@ragemp-mango/server 2.0.6-beta.0 → 2.0.6-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +494 -465
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -1,51 +1,6 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
- // ../core/dist/chunk-TBWHLT75.js
5
- var AppEnviroment = /* @__PURE__ */ (function(AppEnviroment2) {
6
- AppEnviroment2[AppEnviroment2["Client"] = 0] = "Client";
7
- AppEnviroment2[AppEnviroment2["Server"] = 1] = "Server";
8
- return AppEnviroment2;
9
- })({});
10
- var CoreMetadataKey = /* @__PURE__ */ (function(CoreMetadataKey2) {
11
- CoreMetadataKey2["Injectable"] = "mango:injectable";
12
- CoreMetadataKey2["Inject"] = "mango:inject";
13
- CoreMetadataKey2["Module"] = "mango:module";
14
- CoreMetadataKey2["GlobalModule"] = "mango:global-module";
15
- CoreMetadataKey2["Controller"] = "mango:controller-options";
16
- CoreMetadataKey2["ControllerEvents"] = "mango:controller-events";
17
- CoreMetadataKey2["ControllerRPCs"] = "mango:controller-rpcs";
18
- CoreMetadataKey2["ControllerParams"] = "mango:controller-rpc-params";
19
- CoreMetadataKey2["Guards"] = "mango:guards";
20
- CoreMetadataKey2["Interceptors"] = "mango:interceptors";
21
- CoreMetadataKey2["Pipes"] = "mango:pipes";
22
- CoreMetadataKey2["Catch"] = "mango:catch";
23
- CoreMetadataKey2["ErrorFilters"] = "mango:error-filters";
24
- CoreMetadataKey2["Timers"] = "mango:timers";
25
- return CoreMetadataKey2;
26
- })({});
27
- var EventDestination = /* @__PURE__ */ (function(EventDestination2) {
28
- EventDestination2["Server"] = "server";
29
- EventDestination2["Client"] = "client";
30
- EventDestination2["WebView"] = "webview";
31
- return EventDestination2;
32
- })({});
33
- var ExecutionContextType = /* @__PURE__ */ (function(ExecutionContextType2) {
34
- ExecutionContextType2["Event"] = "event";
35
- ExecutionContextType2["RPC"] = "rpc";
36
- return ExecutionContextType2;
37
- })({});
38
- var MethodParamType = /* @__PURE__ */ (function(MethodParamType2) {
39
- MethodParamType2["Body"] = "body";
40
- MethodParamType2["Custom"] = "custom";
41
- MethodParamType2["Param"] = "param";
42
- MethodParamType2["Player"] = "player";
43
- MethodParamType2["Request"] = "request";
44
- MethodParamType2["Response"] = "response";
45
- MethodParamType2["Index"] = "index";
46
- return MethodParamType2;
47
- })({});
48
-
49
4
  // ../core/dist/chunk-DJZCOYB3.js
50
5
  var LOGGER_SERVICE = "LOGGER_SERVICE";
51
6
  var EVENT_SERVICE = "EVENT_SERVICE";
@@ -132,29 +87,10 @@ var __name2 = /* @__PURE__ */ __name((target, value) => __defProp2(target, "name
132
87
  configurable: true
133
88
  }), "__name");
134
89
 
135
- // ../core/dist/chunk-E6IQL4S6.js
136
- function generateRandomId() {
137
- return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
138
- }
139
- __name(generateRandomId, "generateRandomId");
140
- __name2(generateRandomId, "generateRandomId");
141
- var isUndefined = /* @__PURE__ */ __name2((obj) => typeof obj === "undefined", "isUndefined");
142
- var isObject = /* @__PURE__ */ __name2((fn) => !isNil(fn) && typeof fn === "object", "isObject");
143
- var isFunction = /* @__PURE__ */ __name2((val) => typeof val === "function", "isFunction");
144
- var isString = /* @__PURE__ */ __name2((val) => typeof val === "string", "isString");
145
- var isNumber = /* @__PURE__ */ __name2((val) => typeof val === "number", "isNumber");
146
- var isConstructor = /* @__PURE__ */ __name2((val) => val === "constructor", "isConstructor");
147
- var isNil = /* @__PURE__ */ __name2((val) => isUndefined(val) || val === null, "isNil");
148
- var isEmpty = /* @__PURE__ */ __name2((array) => !(array && array.length > 0), "isEmpty");
149
- var isSymbol = /* @__PURE__ */ __name2((val) => typeof val === "symbol", "isSymbol");
150
- var isAsyncFunction = /* @__PURE__ */ __name2((val) => isFunction(val) && val.constructor.name === "AsyncFunction", "isAsyncFunction");
151
- var isBoolean = /* @__PURE__ */ __name2((val) => typeof val === "boolean", "isBoolean");
152
- var isPromise = /* @__PURE__ */ __name2((val) => val instanceof Promise, "isPromise");
153
-
154
- // ../core/dist/chunk-73LIJA6X.js
155
- import { inject, injectable } from "inversify";
156
- import { Container } from "inversify";
90
+ // ../core/dist/chunk-AO6BXG54.js
91
+ import { injectable } from "inversify";
157
92
  import { injectable as injectable2 } from "inversify";
93
+ import { inject, injectable as injectable3 } from "inversify";
158
94
  function _ts_decorate(decorators, target, key, desc) {
159
95
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
160
96
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -163,165 +99,6 @@ function _ts_decorate(decorators, target, key, desc) {
163
99
  }
164
100
  __name(_ts_decorate, "_ts_decorate");
165
101
  __name2(_ts_decorate, "_ts_decorate");
166
- function _ts_metadata(k, v) {
167
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
168
- }
169
- __name(_ts_metadata, "_ts_metadata");
170
- __name2(_ts_metadata, "_ts_metadata");
171
- var ModuleMetadataReader = class {
172
- static {
173
- __name(this, "ModuleMetadataReader");
174
- }
175
- static {
176
- __name2(this, "ModuleMetadataReader");
177
- }
178
- loggerService;
179
- async read(module) {
180
- if (isFunction(module)) {
181
- const options2 = Reflect.getMetadata(CoreMetadataKey.Module, module) ?? {};
182
- const exportTokens2 = this.getExportTokens(options2.exports);
183
- const separatedProviders2 = this.separateProviders(options2.providers, exportTokens2);
184
- return {
185
- controllers: options2.controllers,
186
- imports: options2.imports,
187
- ...this.getPipeline(module),
188
- ...separatedProviders2,
189
- classRef: module,
190
- global: Reflect.getMetadata(CoreMetadataKey.GlobalModule, module) ?? false,
191
- container: options2.container
192
- };
193
- }
194
- if (module instanceof Promise) module = await module;
195
- if (!("module" in module)) {
196
- this.loggerService.error("An error occurred while reading module metadata.");
197
- throw new Error(ErrorMessage.InvalidModuleDefinition);
198
- }
199
- const { module: classRef, global, ...options } = module;
200
- const exportTokens = this.getExportTokens(options.exports);
201
- const separatedProviders = this.separateProviders(options.providers, exportTokens);
202
- return {
203
- controllers: options.controllers,
204
- imports: options.imports,
205
- ...this.getPipeline(classRef),
206
- ...separatedProviders,
207
- classRef,
208
- global: global ?? false,
209
- container: options.container
210
- };
211
- }
212
- getPipeline(classRef) {
213
- const guards = Reflect.getMetadata(CoreMetadataKey.Guards, classRef) ?? [];
214
- const interceptors = Reflect.getMetadata(CoreMetadataKey.Interceptors, classRef) ?? [];
215
- const pipes = Reflect.getMetadata(CoreMetadataKey.Pipes, classRef) ?? [];
216
- const errorFilters = Reflect.getMetadata(CoreMetadataKey.ErrorFilters, classRef) ?? [];
217
- return {
218
- guards,
219
- interceptors,
220
- pipes,
221
- errorFilters
222
- };
223
- }
224
- getExportTokens(exports) {
225
- return exports.map((providerExport) => {
226
- if (isFunction(providerExport)) {
227
- if (!Reflect.hasOwnMetadata(CoreMetadataKey.Injectable, providerExport)) {
228
- this.loggerService.error("An error occurred while reading module metadata.");
229
- throw new Error(ErrorMessage.InvalidExportDefinition);
230
- }
231
- return providerExport;
232
- } else if (isString(providerExport) || isSymbol(providerExport)) {
233
- return providerExport;
234
- } else if ("provide" in providerExport) {
235
- return providerExport.provide;
236
- }
237
- this.loggerService.error("An error occurred while reading module metadata.");
238
- throw new Error(ErrorMessage.InvalidExportDefinition);
239
- });
240
- }
241
- separateProviders(providers, exportTokens) {
242
- return providers.map((provider) => {
243
- if (isFunction(provider)) {
244
- const injectableMetadata = Reflect.getMetadata(CoreMetadataKey.Injectable, provider);
245
- if (isNil(injectableMetadata)) {
246
- this.loggerService.error("An error occurred while reading module metadata.");
247
- throw new Error(ErrorMessage.InvalidProviderDefinition);
248
- }
249
- return {
250
- provide: provider,
251
- useClass: provider,
252
- scope: injectableMetadata.scope
253
- };
254
- } else if ("useClass" in provider || "useValue" in provider || "useFactory" in provider || "useExisting" in provider) {
255
- return provider;
256
- }
257
- this.loggerService.error("An error occurred while reading module metadata.");
258
- throw new Error(ErrorMessage.InvalidProviderDefinition);
259
- }).reduce((acc, provider) => {
260
- if (exportTokens.includes(provider.provide)) {
261
- acc.externalProviders.set(provider.provide, provider);
262
- } else {
263
- acc.internalProviders.set(provider.provide, provider);
264
- }
265
- return acc;
266
- }, {
267
- internalProviders: /* @__PURE__ */ new Map(),
268
- externalProviders: /* @__PURE__ */ new Map()
269
- });
270
- }
271
- };
272
- _ts_decorate([
273
- inject(LOGGER_SERVICE),
274
- _ts_metadata("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
275
- ], ModuleMetadataReader.prototype, "loggerService", void 0);
276
- ModuleMetadataReader = _ts_decorate([
277
- injectable()
278
- ], ModuleMetadataReader);
279
- var ModuleContainer = class extends Container {
280
- static {
281
- __name(this, "ModuleContainer");
282
- }
283
- static {
284
- __name2(this, "ModuleContainer");
285
- }
286
- };
287
- function _ts_decorate2(decorators, target, key, desc) {
288
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
289
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
290
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
291
- return c > 3 && r && Object.defineProperty(target, key, r), r;
292
- }
293
- __name(_ts_decorate2, "_ts_decorate2");
294
- __name2(_ts_decorate2, "_ts_decorate");
295
- var Module = class {
296
- static {
297
- __name(this, "Module");
298
- }
299
- static {
300
- __name2(this, "Module");
301
- }
302
- controllers = [];
303
- container;
304
- parent;
305
- metadata;
306
- instance;
307
- repetitiveImports = /* @__PURE__ */ new Set();
308
- };
309
- Module = _ts_decorate2([
310
- injectable2()
311
- ], Module);
312
-
313
- // ../core/dist/chunk-AO6BXG54.js
314
- import { injectable as injectable3 } from "inversify";
315
- import { injectable as injectable22 } from "inversify";
316
- import { inject as inject2, injectable as injectable32 } from "inversify";
317
- function _ts_decorate3(decorators, target, key, desc) {
318
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
319
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
320
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
321
- return c > 3 && r && Object.defineProperty(target, key, r), r;
322
- }
323
- __name(_ts_decorate3, "_ts_decorate");
324
- __name2(_ts_decorate3, "_ts_decorate");
325
102
  var ExecutionContextBase = class {
326
103
  static {
327
104
  __name(this, "ExecutionContextBase");
@@ -354,17 +131,17 @@ var ExecutionContextBase = class {
354
131
  return this.$name;
355
132
  }
356
133
  };
357
- ExecutionContextBase = _ts_decorate3([
358
- injectable3()
134
+ ExecutionContextBase = _ts_decorate([
135
+ injectable()
359
136
  ], ExecutionContextBase);
360
- function _ts_decorate22(decorators, target, key, desc) {
137
+ function _ts_decorate2(decorators, target, key, desc) {
361
138
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
362
139
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
363
140
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
364
141
  return c > 3 && r && Object.defineProperty(target, key, r), r;
365
142
  }
366
- __name(_ts_decorate22, "_ts_decorate2");
367
- __name2(_ts_decorate22, "_ts_decorate");
143
+ __name(_ts_decorate2, "_ts_decorate2");
144
+ __name2(_ts_decorate2, "_ts_decorate");
368
145
  var MangoRequestBase = class {
369
146
  static {
370
147
  __name(this, "MangoRequestBase");
@@ -381,22 +158,22 @@ var MangoRequestBase = class {
381
158
  return this.$player;
382
159
  }
383
160
  };
384
- MangoRequestBase = _ts_decorate22([
385
- injectable22()
161
+ MangoRequestBase = _ts_decorate2([
162
+ injectable2()
386
163
  ], MangoRequestBase);
387
- function _ts_decorate32(decorators, target, key, desc) {
164
+ function _ts_decorate3(decorators, target, key, desc) {
388
165
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
389
166
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
390
167
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
391
168
  return c > 3 && r && Object.defineProperty(target, key, r), r;
392
169
  }
393
- __name(_ts_decorate32, "_ts_decorate3");
394
- __name2(_ts_decorate32, "_ts_decorate");
395
- function _ts_metadata2(k, v) {
170
+ __name(_ts_decorate3, "_ts_decorate3");
171
+ __name2(_ts_decorate3, "_ts_decorate");
172
+ function _ts_metadata(k, v) {
396
173
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
397
174
  }
398
- __name(_ts_metadata2, "_ts_metadata");
399
- __name2(_ts_metadata2, "_ts_metadata");
175
+ __name(_ts_metadata, "_ts_metadata");
176
+ __name2(_ts_metadata, "_ts_metadata");
400
177
  var MangoResponseBase = class {
401
178
  static {
402
179
  __name(this, "MangoResponseBase");
@@ -434,12 +211,12 @@ var MangoResponseBase = class {
434
211
  this.$errorListeners.add(listener);
435
212
  }
436
213
  };
437
- _ts_decorate32([
438
- inject2(LOGGER_SERVICE),
439
- _ts_metadata2("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
214
+ _ts_decorate3([
215
+ inject(LOGGER_SERVICE),
216
+ _ts_metadata("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
440
217
  ], MangoResponseBase.prototype, "$loggerService", void 0);
441
- MangoResponseBase = _ts_decorate32([
442
- injectable32()
218
+ MangoResponseBase = _ts_decorate3([
219
+ injectable3()
443
220
  ], MangoResponseBase);
444
221
 
445
222
  // ../core/dist/chunk-RYOUF322.js
@@ -510,6 +287,70 @@ var Tree = class {
510
287
  }
511
288
  };
512
289
 
290
+ // ../core/dist/chunk-TBWHLT75.js
291
+ var AppEnviroment = /* @__PURE__ */ (function(AppEnviroment2) {
292
+ AppEnviroment2[AppEnviroment2["Client"] = 0] = "Client";
293
+ AppEnviroment2[AppEnviroment2["Server"] = 1] = "Server";
294
+ return AppEnviroment2;
295
+ })({});
296
+ var CoreMetadataKey = /* @__PURE__ */ (function(CoreMetadataKey2) {
297
+ CoreMetadataKey2["Injectable"] = "mango:injectable";
298
+ CoreMetadataKey2["Inject"] = "mango:inject";
299
+ CoreMetadataKey2["Module"] = "mango:module";
300
+ CoreMetadataKey2["GlobalModule"] = "mango:global-module";
301
+ CoreMetadataKey2["Controller"] = "mango:controller-options";
302
+ CoreMetadataKey2["ControllerEvents"] = "mango:controller-events";
303
+ CoreMetadataKey2["ControllerRPCs"] = "mango:controller-rpcs";
304
+ CoreMetadataKey2["ControllerParams"] = "mango:controller-rpc-params";
305
+ CoreMetadataKey2["Guards"] = "mango:guards";
306
+ CoreMetadataKey2["Interceptors"] = "mango:interceptors";
307
+ CoreMetadataKey2["Pipes"] = "mango:pipes";
308
+ CoreMetadataKey2["Catch"] = "mango:catch";
309
+ CoreMetadataKey2["ErrorFilters"] = "mango:error-filters";
310
+ CoreMetadataKey2["Timers"] = "mango:timers";
311
+ return CoreMetadataKey2;
312
+ })({});
313
+ var EventDestination = /* @__PURE__ */ (function(EventDestination2) {
314
+ EventDestination2["Server"] = "server";
315
+ EventDestination2["Client"] = "client";
316
+ EventDestination2["WebView"] = "webview";
317
+ return EventDestination2;
318
+ })({});
319
+ var ExecutionContextType = /* @__PURE__ */ (function(ExecutionContextType2) {
320
+ ExecutionContextType2["Event"] = "event";
321
+ ExecutionContextType2["RPC"] = "rpc";
322
+ return ExecutionContextType2;
323
+ })({});
324
+ var MethodParamType = /* @__PURE__ */ (function(MethodParamType2) {
325
+ MethodParamType2["Body"] = "body";
326
+ MethodParamType2["Custom"] = "custom";
327
+ MethodParamType2["Param"] = "param";
328
+ MethodParamType2["Player"] = "player";
329
+ MethodParamType2["Request"] = "request";
330
+ MethodParamType2["Response"] = "response";
331
+ MethodParamType2["Index"] = "index";
332
+ return MethodParamType2;
333
+ })({});
334
+
335
+ // ../core/dist/chunk-E6IQL4S6.js
336
+ function generateRandomId() {
337
+ return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
338
+ }
339
+ __name(generateRandomId, "generateRandomId");
340
+ __name2(generateRandomId, "generateRandomId");
341
+ var isUndefined = /* @__PURE__ */ __name2((obj) => typeof obj === "undefined", "isUndefined");
342
+ var isObject = /* @__PURE__ */ __name2((fn) => !isNil(fn) && typeof fn === "object", "isObject");
343
+ var isFunction = /* @__PURE__ */ __name2((val) => typeof val === "function", "isFunction");
344
+ var isString = /* @__PURE__ */ __name2((val) => typeof val === "string", "isString");
345
+ var isNumber = /* @__PURE__ */ __name2((val) => typeof val === "number", "isNumber");
346
+ var isConstructor = /* @__PURE__ */ __name2((val) => val === "constructor", "isConstructor");
347
+ var isNil = /* @__PURE__ */ __name2((val) => isUndefined(val) || val === null, "isNil");
348
+ var isEmpty = /* @__PURE__ */ __name2((array) => !(array && array.length > 0), "isEmpty");
349
+ var isSymbol = /* @__PURE__ */ __name2((val) => typeof val === "symbol", "isSymbol");
350
+ var isAsyncFunction = /* @__PURE__ */ __name2((val) => isFunction(val) && val.constructor.name === "AsyncFunction", "isAsyncFunction");
351
+ var isBoolean = /* @__PURE__ */ __name2((val) => typeof val === "boolean", "isBoolean");
352
+ var isPromise = /* @__PURE__ */ __name2((val) => val instanceof Promise, "isPromise");
353
+
513
354
  // ../core/dist/chunk-PGWRESZG.js
514
355
  var defaultControllerOptions = {
515
356
  prefix: ""
@@ -1372,10 +1213,10 @@ var UnknownError = class extends MangoError {
1372
1213
  };
1373
1214
 
1374
1215
  // ../core/dist/chunk-SKPH3K2M.js
1375
- import { inject as inject3, injectable as injectable33 } from "inversify";
1376
- import { inject as inject4, injectable as injectable4 } from "inversify";
1377
- import { inject as inject22, injectable as injectable23 } from "inversify";
1378
- import { inject as inject42, injectable as injectable42 } from "inversify";
1216
+ import { inject as inject3, injectable as injectable32 } from "inversify";
1217
+ import { inject as inject2, injectable as injectable4 } from "inversify";
1218
+ import { inject as inject22, injectable as injectable22 } from "inversify";
1219
+ import { inject as inject4, injectable as injectable42 } from "inversify";
1379
1220
  import { inject as inject5, injectable as injectable5 } from "inversify";
1380
1221
  import { injectable as injectable6 } from "inversify";
1381
1222
  function _ts_decorate4(decorators, target, key, desc) {
@@ -1386,11 +1227,11 @@ function _ts_decorate4(decorators, target, key, desc) {
1386
1227
  }
1387
1228
  __name(_ts_decorate4, "_ts_decorate");
1388
1229
  __name2(_ts_decorate4, "_ts_decorate");
1389
- function _ts_metadata3(k, v) {
1230
+ function _ts_metadata2(k, v) {
1390
1231
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1391
1232
  }
1392
- __name(_ts_metadata3, "_ts_metadata");
1393
- __name2(_ts_metadata3, "_ts_metadata");
1233
+ __name(_ts_metadata2, "_ts_metadata");
1234
+ __name2(_ts_metadata2, "_ts_metadata");
1394
1235
  var PipelineHandler = class {
1395
1236
  static {
1396
1237
  __name(this, "PipelineHandler");
@@ -1440,20 +1281,20 @@ var PipelineHandler = class {
1440
1281
  }
1441
1282
  };
1442
1283
  _ts_decorate4([
1443
- inject4(LOGGER_SERVICE),
1444
- _ts_metadata3("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
1284
+ inject2(LOGGER_SERVICE),
1285
+ _ts_metadata2("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
1445
1286
  ], PipelineHandler.prototype, "loggerService", void 0);
1446
1287
  PipelineHandler = _ts_decorate4([
1447
1288
  injectable4()
1448
1289
  ], PipelineHandler);
1449
- function _ts_decorate23(decorators, target, key, desc) {
1290
+ function _ts_decorate22(decorators, target, key, desc) {
1450
1291
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1451
1292
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1452
1293
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1453
1294
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1454
1295
  }
1455
- __name(_ts_decorate23, "_ts_decorate2");
1456
- __name2(_ts_decorate23, "_ts_decorate");
1296
+ __name(_ts_decorate22, "_ts_decorate2");
1297
+ __name2(_ts_decorate22, "_ts_decorate");
1457
1298
  function _ts_metadata22(k, v) {
1458
1299
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1459
1300
  }
@@ -1509,30 +1350,30 @@ var ControllerFlowHandler = class {
1509
1350
  }));
1510
1351
  }
1511
1352
  };
1512
- _ts_decorate23([
1353
+ _ts_decorate22([
1513
1354
  inject22(APP_ENVIROMENT),
1514
1355
  _ts_metadata22("design:type", typeof AppEnviroment === "undefined" ? Object : AppEnviroment)
1515
1356
  ], ControllerFlowHandler.prototype, "appEnv", void 0);
1516
- _ts_decorate23([
1357
+ _ts_decorate22([
1517
1358
  inject22(PipelineHandler),
1518
1359
  _ts_metadata22("design:type", typeof PipelineHandler === "undefined" ? Object : PipelineHandler)
1519
1360
  ], ControllerFlowHandler.prototype, "pipelineHandler", void 0);
1520
- ControllerFlowHandler = _ts_decorate23([
1521
- injectable23()
1361
+ ControllerFlowHandler = _ts_decorate22([
1362
+ injectable22()
1522
1363
  ], ControllerFlowHandler);
1523
- function _ts_decorate33(decorators, target, key, desc) {
1364
+ function _ts_decorate32(decorators, target, key, desc) {
1524
1365
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1525
1366
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1526
1367
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1527
1368
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1528
1369
  }
1529
- __name(_ts_decorate33, "_ts_decorate3");
1530
- __name2(_ts_decorate33, "_ts_decorate");
1531
- function _ts_metadata32(k, v) {
1370
+ __name(_ts_decorate32, "_ts_decorate3");
1371
+ __name2(_ts_decorate32, "_ts_decorate");
1372
+ function _ts_metadata3(k, v) {
1532
1373
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1533
1374
  }
1534
- __name(_ts_metadata32, "_ts_metadata3");
1535
- __name2(_ts_metadata32, "_ts_metadata");
1375
+ __name(_ts_metadata3, "_ts_metadata3");
1376
+ __name2(_ts_metadata3, "_ts_metadata");
1536
1377
  var ControllerEventHandler = class {
1537
1378
  static {
1538
1379
  __name(this, "ControllerEventHandler");
@@ -1608,40 +1449,40 @@ var ControllerEventHandler = class {
1608
1449
  }
1609
1450
  }
1610
1451
  };
1611
- _ts_decorate33([
1452
+ _ts_decorate32([
1612
1453
  inject3(APP_ENVIROMENT),
1613
- _ts_metadata32("design:type", typeof AppEnviroment === "undefined" ? Object : AppEnviroment)
1454
+ _ts_metadata3("design:type", typeof AppEnviroment === "undefined" ? Object : AppEnviroment)
1614
1455
  ], ControllerEventHandler.prototype, "appEnv", void 0);
1615
- _ts_decorate33([
1456
+ _ts_decorate32([
1616
1457
  inject3(MULTIPLAYER_SERVICE),
1617
- _ts_metadata32("design:type", typeof MultiplayerService === "undefined" ? Object : MultiplayerService)
1458
+ _ts_metadata3("design:type", typeof MultiplayerService === "undefined" ? Object : MultiplayerService)
1618
1459
  ], ControllerEventHandler.prototype, "multiplayerService", void 0);
1619
- _ts_decorate33([
1460
+ _ts_decorate32([
1620
1461
  inject3(EVENT_SERVICE),
1621
- _ts_metadata32("design:type", typeof InternalEventService === "undefined" ? Object : InternalEventService)
1462
+ _ts_metadata3("design:type", typeof InternalEventService === "undefined" ? Object : InternalEventService)
1622
1463
  ], ControllerEventHandler.prototype, "eventService", void 0);
1623
- _ts_decorate33([
1464
+ _ts_decorate32([
1624
1465
  inject3(ControllerFlowHandler),
1625
- _ts_metadata32("design:type", typeof ControllerFlowHandler === "undefined" ? Object : ControllerFlowHandler)
1466
+ _ts_metadata3("design:type", typeof ControllerFlowHandler === "undefined" ? Object : ControllerFlowHandler)
1626
1467
  ], ControllerEventHandler.prototype, "controllerFlowHandler", void 0);
1627
- _ts_decorate33([
1468
+ _ts_decorate32([
1628
1469
  inject3(PipelineHandler),
1629
- _ts_metadata32("design:type", typeof PipelineHandler === "undefined" ? Object : PipelineHandler)
1470
+ _ts_metadata3("design:type", typeof PipelineHandler === "undefined" ? Object : PipelineHandler)
1630
1471
  ], ControllerEventHandler.prototype, "pipelineHandler", void 0);
1631
- _ts_decorate33([
1472
+ _ts_decorate32([
1632
1473
  inject3(LOGGER_SERVICE),
1633
- _ts_metadata32("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
1474
+ _ts_metadata3("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
1634
1475
  ], ControllerEventHandler.prototype, "loggerService", void 0);
1635
- _ts_decorate33([
1476
+ _ts_decorate32([
1636
1477
  inject3(MANGO_REQUEST_FACTORY),
1637
- _ts_metadata32("design:type", Function)
1478
+ _ts_metadata3("design:type", Function)
1638
1479
  ], ControllerEventHandler.prototype, "createMangoRequest", void 0);
1639
- _ts_decorate33([
1480
+ _ts_decorate32([
1640
1481
  inject3(EXECUTION_CONTEXT_FACTORY),
1641
- _ts_metadata32("design:type", Function)
1482
+ _ts_metadata3("design:type", Function)
1642
1483
  ], ControllerEventHandler.prototype, "createExecutionContext", void 0);
1643
- ControllerEventHandler = _ts_decorate33([
1644
- injectable33()
1484
+ ControllerEventHandler = _ts_decorate32([
1485
+ injectable32()
1645
1486
  ], ControllerEventHandler);
1646
1487
  function _ts_decorate42(decorators, target, key, desc) {
1647
1488
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -1745,11 +1586,11 @@ var ControllerMetadataReader = class {
1745
1586
  }
1746
1587
  };
1747
1588
  _ts_decorate42([
1748
- inject42(APP_ENVIROMENT),
1589
+ inject4(APP_ENVIROMENT),
1749
1590
  _ts_metadata4("design:type", typeof AppEnviroment === "undefined" ? Object : AppEnviroment)
1750
1591
  ], ControllerMetadataReader.prototype, "appEnv", void 0);
1751
1592
  _ts_decorate42([
1752
- inject42(LOGGER_SERVICE),
1593
+ inject4(LOGGER_SERVICE),
1753
1594
  _ts_metadata4("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
1754
1595
  ], ControllerMetadataReader.prototype, "loggerService", void 0);
1755
1596
  ControllerMetadataReader = _ts_decorate42([
@@ -1850,86 +1691,245 @@ var ControllerRPCHandler = class {
1850
1691
  if (isNil(instance)) {
1851
1692
  return this.loggerService.error(ErrorMessage.InvalidErrorFilterDefinition);
1852
1693
  }
1853
- await Promise.resolve(instance.catch.call(instance, error, executionContext));
1694
+ await Promise.resolve(instance.catch.call(instance, error, executionContext));
1695
+ }
1696
+ });
1697
+ }
1698
+ };
1699
+ _ts_decorate5([
1700
+ inject5(APP_ENVIROMENT),
1701
+ _ts_metadata5("design:type", typeof AppEnviroment === "undefined" ? Object : AppEnviroment)
1702
+ ], ControllerRPCHandler.prototype, "appEnv", void 0);
1703
+ _ts_decorate5([
1704
+ inject5(RPC_SERVICE),
1705
+ _ts_metadata5("design:type", typeof InternalRPCService === "undefined" ? Object : InternalRPCService)
1706
+ ], ControllerRPCHandler.prototype, "rpcService", void 0);
1707
+ _ts_decorate5([
1708
+ inject5(PipelineHandler),
1709
+ _ts_metadata5("design:type", typeof PipelineHandler === "undefined" ? Object : PipelineHandler)
1710
+ ], ControllerRPCHandler.prototype, "pipelineHandler", void 0);
1711
+ _ts_decorate5([
1712
+ inject5(ControllerFlowHandler),
1713
+ _ts_metadata5("design:type", typeof ControllerFlowHandler === "undefined" ? Object : ControllerFlowHandler)
1714
+ ], ControllerRPCHandler.prototype, "controllerFlowHandler", void 0);
1715
+ _ts_decorate5([
1716
+ inject5(LOGGER_SERVICE),
1717
+ _ts_metadata5("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
1718
+ ], ControllerRPCHandler.prototype, "loggerService", void 0);
1719
+ _ts_decorate5([
1720
+ inject5(MANGO_REQUEST_FACTORY),
1721
+ _ts_metadata5("design:type", Function)
1722
+ ], ControllerRPCHandler.prototype, "createMangoRequest", void 0);
1723
+ _ts_decorate5([
1724
+ inject5(MANGO_RESPONSE_FACTORY),
1725
+ _ts_metadata5("design:type", Function)
1726
+ ], ControllerRPCHandler.prototype, "createMangoResponse", void 0);
1727
+ _ts_decorate5([
1728
+ inject5(EXECUTION_CONTEXT_FACTORY),
1729
+ _ts_metadata5("design:type", Function)
1730
+ ], ControllerRPCHandler.prototype, "createExecutionContext", void 0);
1731
+ ControllerRPCHandler = _ts_decorate5([
1732
+ injectable5()
1733
+ ], ControllerRPCHandler);
1734
+ function _ts_decorate6(decorators, target, key, desc) {
1735
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1736
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1737
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1738
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1739
+ }
1740
+ __name(_ts_decorate6, "_ts_decorate6");
1741
+ __name2(_ts_decorate6, "_ts_decorate");
1742
+ var Controller = class {
1743
+ static {
1744
+ __name(this, "Controller");
1745
+ }
1746
+ static {
1747
+ __name2(this, "Controller");
1748
+ }
1749
+ metadata;
1750
+ instance;
1751
+ owner;
1752
+ eventHandlers = [];
1753
+ rpcHandlers = [];
1754
+ };
1755
+ Controller = _ts_decorate6([
1756
+ injectable6()
1757
+ ], Controller);
1758
+
1759
+ // ../core/dist/chunk-73LIJA6X.js
1760
+ import { inject as inject6, injectable as injectable7 } from "inversify";
1761
+ import { Container } from "inversify";
1762
+ import { injectable as injectable23 } from "inversify";
1763
+ function _ts_decorate7(decorators, target, key, desc) {
1764
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1765
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1766
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1767
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1768
+ }
1769
+ __name(_ts_decorate7, "_ts_decorate");
1770
+ __name2(_ts_decorate7, "_ts_decorate");
1771
+ function _ts_metadata6(k, v) {
1772
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1773
+ }
1774
+ __name(_ts_metadata6, "_ts_metadata");
1775
+ __name2(_ts_metadata6, "_ts_metadata");
1776
+ var ModuleMetadataReader = class {
1777
+ static {
1778
+ __name(this, "ModuleMetadataReader");
1779
+ }
1780
+ static {
1781
+ __name2(this, "ModuleMetadataReader");
1782
+ }
1783
+ loggerService;
1784
+ async read(module) {
1785
+ if (isFunction(module)) {
1786
+ const options2 = Reflect.getMetadata(CoreMetadataKey.Module, module) ?? {};
1787
+ const exportTokens2 = this.getExportTokens(options2.exports);
1788
+ const separatedProviders2 = this.separateProviders(options2.providers, exportTokens2);
1789
+ return {
1790
+ controllers: options2.controllers,
1791
+ imports: options2.imports,
1792
+ ...this.getPipeline(module),
1793
+ ...separatedProviders2,
1794
+ classRef: module,
1795
+ global: Reflect.getMetadata(CoreMetadataKey.GlobalModule, module) ?? false,
1796
+ container: options2.container
1797
+ };
1798
+ }
1799
+ if (module instanceof Promise) module = await module;
1800
+ if (!("module" in module)) {
1801
+ this.loggerService.error("An error occurred while reading module metadata.");
1802
+ throw new Error(ErrorMessage.InvalidModuleDefinition);
1803
+ }
1804
+ const { module: classRef, global, ...options } = module;
1805
+ const exportTokens = this.getExportTokens(options.exports);
1806
+ const separatedProviders = this.separateProviders(options.providers, exportTokens);
1807
+ return {
1808
+ controllers: options.controllers,
1809
+ imports: options.imports,
1810
+ ...this.getPipeline(classRef),
1811
+ ...separatedProviders,
1812
+ classRef,
1813
+ global: global ?? false,
1814
+ container: options.container
1815
+ };
1816
+ }
1817
+ getPipeline(classRef) {
1818
+ const guards = Reflect.getMetadata(CoreMetadataKey.Guards, classRef) ?? [];
1819
+ const interceptors = Reflect.getMetadata(CoreMetadataKey.Interceptors, classRef) ?? [];
1820
+ const pipes = Reflect.getMetadata(CoreMetadataKey.Pipes, classRef) ?? [];
1821
+ const errorFilters = Reflect.getMetadata(CoreMetadataKey.ErrorFilters, classRef) ?? [];
1822
+ return {
1823
+ guards,
1824
+ interceptors,
1825
+ pipes,
1826
+ errorFilters
1827
+ };
1828
+ }
1829
+ getExportTokens(exports) {
1830
+ return exports.map((providerExport) => {
1831
+ if (isFunction(providerExport)) {
1832
+ if (!Reflect.hasOwnMetadata(CoreMetadataKey.Injectable, providerExport)) {
1833
+ this.loggerService.error("An error occurred while reading module metadata.");
1834
+ throw new Error(ErrorMessage.InvalidExportDefinition);
1835
+ }
1836
+ return providerExport;
1837
+ } else if (isString(providerExport) || isSymbol(providerExport)) {
1838
+ return providerExport;
1839
+ } else if ("provide" in providerExport) {
1840
+ return providerExport.provide;
1841
+ }
1842
+ this.loggerService.error("An error occurred while reading module metadata.");
1843
+ throw new Error(ErrorMessage.InvalidExportDefinition);
1844
+ });
1845
+ }
1846
+ separateProviders(providers, exportTokens) {
1847
+ return providers.map((provider) => {
1848
+ if (isFunction(provider)) {
1849
+ const injectableMetadata = Reflect.getMetadata(CoreMetadataKey.Injectable, provider);
1850
+ if (isNil(injectableMetadata)) {
1851
+ this.loggerService.error("An error occurred while reading module metadata.");
1852
+ throw new Error(ErrorMessage.InvalidProviderDefinition);
1853
+ }
1854
+ return {
1855
+ provide: provider,
1856
+ useClass: provider,
1857
+ scope: injectableMetadata.scope
1858
+ };
1859
+ } else if ("useClass" in provider || "useValue" in provider || "useFactory" in provider || "useExisting" in provider) {
1860
+ return provider;
1861
+ }
1862
+ this.loggerService.error("An error occurred while reading module metadata.");
1863
+ throw new Error(ErrorMessage.InvalidProviderDefinition);
1864
+ }).reduce((acc, provider) => {
1865
+ if (exportTokens.includes(provider.provide)) {
1866
+ acc.externalProviders.set(provider.provide, provider);
1867
+ } else {
1868
+ acc.internalProviders.set(provider.provide, provider);
1854
1869
  }
1870
+ return acc;
1871
+ }, {
1872
+ internalProviders: /* @__PURE__ */ new Map(),
1873
+ externalProviders: /* @__PURE__ */ new Map()
1855
1874
  });
1856
1875
  }
1857
1876
  };
1858
- _ts_decorate5([
1859
- inject5(APP_ENVIROMENT),
1860
- _ts_metadata5("design:type", typeof AppEnviroment === "undefined" ? Object : AppEnviroment)
1861
- ], ControllerRPCHandler.prototype, "appEnv", void 0);
1862
- _ts_decorate5([
1863
- inject5(RPC_SERVICE),
1864
- _ts_metadata5("design:type", typeof InternalRPCService === "undefined" ? Object : InternalRPCService)
1865
- ], ControllerRPCHandler.prototype, "rpcService", void 0);
1866
- _ts_decorate5([
1867
- inject5(PipelineHandler),
1868
- _ts_metadata5("design:type", typeof PipelineHandler === "undefined" ? Object : PipelineHandler)
1869
- ], ControllerRPCHandler.prototype, "pipelineHandler", void 0);
1870
- _ts_decorate5([
1871
- inject5(ControllerFlowHandler),
1872
- _ts_metadata5("design:type", typeof ControllerFlowHandler === "undefined" ? Object : ControllerFlowHandler)
1873
- ], ControllerRPCHandler.prototype, "controllerFlowHandler", void 0);
1874
- _ts_decorate5([
1875
- inject5(LOGGER_SERVICE),
1876
- _ts_metadata5("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
1877
- ], ControllerRPCHandler.prototype, "loggerService", void 0);
1878
- _ts_decorate5([
1879
- inject5(MANGO_REQUEST_FACTORY),
1880
- _ts_metadata5("design:type", Function)
1881
- ], ControllerRPCHandler.prototype, "createMangoRequest", void 0);
1882
- _ts_decorate5([
1883
- inject5(MANGO_RESPONSE_FACTORY),
1884
- _ts_metadata5("design:type", Function)
1885
- ], ControllerRPCHandler.prototype, "createMangoResponse", void 0);
1886
- _ts_decorate5([
1887
- inject5(EXECUTION_CONTEXT_FACTORY),
1888
- _ts_metadata5("design:type", Function)
1889
- ], ControllerRPCHandler.prototype, "createExecutionContext", void 0);
1890
- ControllerRPCHandler = _ts_decorate5([
1891
- injectable5()
1892
- ], ControllerRPCHandler);
1893
- function _ts_decorate6(decorators, target, key, desc) {
1877
+ _ts_decorate7([
1878
+ inject6(LOGGER_SERVICE),
1879
+ _ts_metadata6("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
1880
+ ], ModuleMetadataReader.prototype, "loggerService", void 0);
1881
+ ModuleMetadataReader = _ts_decorate7([
1882
+ injectable7()
1883
+ ], ModuleMetadataReader);
1884
+ var ModuleContainer = class extends Container {
1885
+ static {
1886
+ __name(this, "ModuleContainer");
1887
+ }
1888
+ static {
1889
+ __name2(this, "ModuleContainer");
1890
+ }
1891
+ };
1892
+ function _ts_decorate23(decorators, target, key, desc) {
1894
1893
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1895
1894
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1896
1895
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1897
1896
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1898
1897
  }
1899
- __name(_ts_decorate6, "_ts_decorate6");
1900
- __name2(_ts_decorate6, "_ts_decorate");
1901
- var Controller = class {
1898
+ __name(_ts_decorate23, "_ts_decorate2");
1899
+ __name2(_ts_decorate23, "_ts_decorate");
1900
+ var Module = class {
1902
1901
  static {
1903
- __name(this, "Controller");
1902
+ __name(this, "Module");
1904
1903
  }
1905
1904
  static {
1906
- __name2(this, "Controller");
1905
+ __name2(this, "Module");
1907
1906
  }
1907
+ controllers = [];
1908
+ container;
1909
+ parent;
1908
1910
  metadata;
1909
1911
  instance;
1910
- owner;
1911
- eventHandlers = [];
1912
- rpcHandlers = [];
1912
+ repetitiveImports = /* @__PURE__ */ new Set();
1913
1913
  };
1914
- Controller = _ts_decorate6([
1915
- injectable6()
1916
- ], Controller);
1914
+ Module = _ts_decorate23([
1915
+ injectable23()
1916
+ ], Module);
1917
1917
 
1918
- // ../core/dist/chunk-CW7WAA3P.js
1918
+ // ../core/dist/chunk-OZLD6ANO.js
1919
1919
  import { injectable as injectable9 } from "inversify";
1920
- import { injectable as injectable7 } from "inversify";
1921
- import { inject as inject6 } from "inversify";
1920
+ import { injectable as injectable8 } from "inversify";
1921
+ import { inject as inject7 } from "inversify";
1922
1922
  import { injectable as injectable24 } from "inversify";
1923
- import { injectable as injectable34 } from "inversify";
1923
+ import { injectable as injectable33 } from "inversify";
1924
1924
  import { optional } from "inversify";
1925
1925
  import { inject as inject23, injectable as injectable43, optional as optional2 } from "inversify";
1926
1926
  import { Container as Container2, inject as inject32, injectable as injectable52, optional as optional3 } from "inversify";
1927
- import { inject as inject43, injectable as injectable62 } from "inversify";
1928
- import { inject as inject62, Container as Container3, injectable as injectable8 } from "inversify";
1927
+ import { inject as inject42, injectable as injectable62 } from "inversify";
1928
+ import { inject as inject62, Container as Container3, injectable as injectable82 } from "inversify";
1929
1929
  import { Container as Container22, inject as inject52, injectable as injectable72 } from "inversify";
1930
1930
  import { Container as Container4 } from "inversify";
1931
1931
  import { LazyServiceIdentifer } from "inversify";
1932
- import { inject as inject7, injectable as injectable10 } from "inversify";
1932
+ import { inject as inject72, injectable as injectable10 } from "inversify";
1933
1933
 
1934
1934
  // ../../node_modules/.pnpm/croner@8.1.2/node_modules/croner/dist/croner.min.js
1935
1935
  function minitz(y, m, d, h, i, s, tz, throwOnInvalid) {
@@ -2742,7 +2742,7 @@ Cron.prototype._calculatePreviousRun = function(prev, hasPreviousRun) {
2742
2742
  Cron.Cron = Cron;
2743
2743
  Cron.scheduledJobs = scheduledJobs;
2744
2744
 
2745
- // ../core/dist/chunk-CW7WAA3P.js
2745
+ // ../core/dist/chunk-OZLD6ANO.js
2746
2746
  function Controller2(options) {
2747
2747
  return (target) => {
2748
2748
  if (Reflect.hasMetadata(CoreMetadataKey.Controller, target)) {
@@ -2751,7 +2751,7 @@ function Controller2(options) {
2751
2751
  const { valid, value, error } = validateControllerOptions(options);
2752
2752
  if (!valid) throw new Error(error);
2753
2753
  Reflect.defineMetadata(CoreMetadataKey.Controller, value, target);
2754
- return injectable7()(target);
2754
+ return injectable8()(target);
2755
2755
  };
2756
2756
  }
2757
2757
  __name(Controller2, "Controller2");
@@ -2773,7 +2773,7 @@ function Inject(key) {
2773
2773
  if (!token) {
2774
2774
  throw new Error(ErrorMessage.InjectionTokenNotFound);
2775
2775
  }
2776
- inject6(token)(target, propertyKey, paramIndex);
2776
+ inject7(token)(target, propertyKey, paramIndex);
2777
2777
  };
2778
2778
  }
2779
2779
  __name(Inject, "Inject");
@@ -2799,7 +2799,7 @@ function Module2(options) {
2799
2799
  const { valid, value, error } = validateModuleOptions(options);
2800
2800
  if (!valid) throw new Error(error);
2801
2801
  Reflect.defineMetadata(CoreMetadataKey.Module, value, target);
2802
- return injectable34()(target);
2802
+ return injectable33()(target);
2803
2803
  };
2804
2804
  }
2805
2805
  __name(Module2, "Module2");
@@ -2878,19 +2878,19 @@ function UseFilters(...filters) {
2878
2878
  }
2879
2879
  __name(UseFilters, "UseFilters");
2880
2880
  __name2(UseFilters, "UseFilters");
2881
- function _ts_decorate7(decorators, target, key, desc) {
2881
+ function _ts_decorate8(decorators, target, key, desc) {
2882
2882
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2883
2883
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2884
2884
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
2885
2885
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2886
2886
  }
2887
- __name(_ts_decorate7, "_ts_decorate");
2888
- __name2(_ts_decorate7, "_ts_decorate");
2889
- function _ts_metadata6(k, v) {
2887
+ __name(_ts_decorate8, "_ts_decorate");
2888
+ __name2(_ts_decorate8, "_ts_decorate");
2889
+ function _ts_metadata7(k, v) {
2890
2890
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
2891
2891
  }
2892
- __name(_ts_metadata6, "_ts_metadata");
2893
- __name2(_ts_metadata6, "_ts_metadata");
2892
+ __name(_ts_metadata7, "_ts_metadata");
2893
+ __name2(_ts_metadata7, "_ts_metadata");
2894
2894
  var AppRuntime = class {
2895
2895
  static {
2896
2896
  __name(this, "AppRuntime");
@@ -3064,40 +3064,40 @@ var AppRuntime = class {
3064
3064
  await module.instance[method]();
3065
3065
  }
3066
3066
  };
3067
- _ts_decorate7([
3067
+ _ts_decorate8([
3068
3068
  inject23(ControllerEventHandler),
3069
- _ts_metadata6("design:type", typeof ControllerEventHandler === "undefined" ? Object : ControllerEventHandler)
3069
+ _ts_metadata7("design:type", typeof ControllerEventHandler === "undefined" ? Object : ControllerEventHandler)
3070
3070
  ], AppRuntime.prototype, "eventHandler", void 0);
3071
- _ts_decorate7([
3071
+ _ts_decorate8([
3072
3072
  inject23(ControllerRPCHandler),
3073
- _ts_metadata6("design:type", typeof ControllerRPCHandler === "undefined" ? Object : ControllerRPCHandler)
3073
+ _ts_metadata7("design:type", typeof ControllerRPCHandler === "undefined" ? Object : ControllerRPCHandler)
3074
3074
  ], AppRuntime.prototype, "rpcHandler", void 0);
3075
- _ts_decorate7([
3075
+ _ts_decorate8([
3076
3076
  inject23(GLOBAL_GUARDS),
3077
- _ts_metadata6("design:type", Array)
3077
+ _ts_metadata7("design:type", Array)
3078
3078
  ], AppRuntime.prototype, "globalGuards", void 0);
3079
- _ts_decorate7([
3079
+ _ts_decorate8([
3080
3080
  inject23(GLOBAL_INTERCEPTORS),
3081
- _ts_metadata6("design:type", Array)
3081
+ _ts_metadata7("design:type", Array)
3082
3082
  ], AppRuntime.prototype, "globalInterceptors", void 0);
3083
- _ts_decorate7([
3083
+ _ts_decorate8([
3084
3084
  inject23(GLOBAL_PIPES),
3085
- _ts_metadata6("design:type", Array)
3085
+ _ts_metadata7("design:type", Array)
3086
3086
  ], AppRuntime.prototype, "globalPipes", void 0);
3087
- _ts_decorate7([
3087
+ _ts_decorate8([
3088
3088
  inject23(GLOBAL_ERROR_FILTERS),
3089
- _ts_metadata6("design:type", Array)
3089
+ _ts_metadata7("design:type", Array)
3090
3090
  ], AppRuntime.prototype, "globalErrorFilters", void 0);
3091
- _ts_decorate7([
3091
+ _ts_decorate8([
3092
3092
  inject23(LOGGER_SERVICE),
3093
- _ts_metadata6("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
3093
+ _ts_metadata7("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
3094
3094
  ], AppRuntime.prototype, "loggerService", void 0);
3095
- _ts_decorate7([
3095
+ _ts_decorate8([
3096
3096
  inject23(ENABLE_SHUTDOWN_HOOKS),
3097
3097
  optional2(),
3098
- _ts_metadata6("design:type", Boolean)
3098
+ _ts_metadata7("design:type", Boolean)
3099
3099
  ], AppRuntime.prototype, "enableShutdownHooks", void 0);
3100
- AppRuntime = _ts_decorate7([
3100
+ AppRuntime = _ts_decorate8([
3101
3101
  injectable43()
3102
3102
  ], AppRuntime);
3103
3103
  function _ts_decorate24(decorators, target, key, desc) {
@@ -3204,19 +3204,19 @@ _ts_decorate24([
3204
3204
  ModuleDependencyBinder = _ts_decorate24([
3205
3205
  injectable52()
3206
3206
  ], ModuleDependencyBinder);
3207
- function _ts_decorate34(decorators, target, key, desc) {
3207
+ function _ts_decorate33(decorators, target, key, desc) {
3208
3208
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3209
3209
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
3210
3210
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
3211
3211
  return c > 3 && r && Object.defineProperty(target, key, r), r;
3212
3212
  }
3213
- __name(_ts_decorate34, "_ts_decorate3");
3214
- __name2(_ts_decorate34, "_ts_decorate");
3215
- function _ts_metadata33(k, v) {
3213
+ __name(_ts_decorate33, "_ts_decorate3");
3214
+ __name2(_ts_decorate33, "_ts_decorate");
3215
+ function _ts_metadata32(k, v) {
3216
3216
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
3217
3217
  }
3218
- __name(_ts_metadata33, "_ts_metadata3");
3219
- __name2(_ts_metadata33, "_ts_metadata");
3218
+ __name(_ts_metadata32, "_ts_metadata3");
3219
+ __name2(_ts_metadata32, "_ts_metadata");
3220
3220
  var ModuleTreeScanner = class {
3221
3221
  static {
3222
3222
  __name(this, "ModuleTreeScanner");
@@ -3280,19 +3280,19 @@ var ModuleTreeScanner = class {
3280
3280
  }
3281
3281
  }
3282
3282
  };
3283
- _ts_decorate34([
3284
- inject43(ModuleMetadataReader),
3285
- _ts_metadata33("design:type", typeof ModuleMetadataReader === "undefined" ? Object : ModuleMetadataReader)
3283
+ _ts_decorate33([
3284
+ inject42(ModuleMetadataReader),
3285
+ _ts_metadata32("design:type", typeof ModuleMetadataReader === "undefined" ? Object : ModuleMetadataReader)
3286
3286
  ], ModuleTreeScanner.prototype, "moduleMetadataReader", void 0);
3287
- _ts_decorate34([
3288
- inject43(ControllerMetadataReader),
3289
- _ts_metadata33("design:type", typeof ControllerMetadataReader === "undefined" ? Object : ControllerMetadataReader)
3287
+ _ts_decorate33([
3288
+ inject42(ControllerMetadataReader),
3289
+ _ts_metadata32("design:type", typeof ControllerMetadataReader === "undefined" ? Object : ControllerMetadataReader)
3290
3290
  ], ModuleTreeScanner.prototype, "controllerMetadataReader", void 0);
3291
- _ts_decorate34([
3292
- inject43(LOGGER_SERVICE),
3293
- _ts_metadata33("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
3291
+ _ts_decorate33([
3292
+ inject42(LOGGER_SERVICE),
3293
+ _ts_metadata32("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
3294
3294
  ], ModuleTreeScanner.prototype, "loggerService", void 0);
3295
- ModuleTreeScanner = _ts_decorate34([
3295
+ ModuleTreeScanner = _ts_decorate33([
3296
3296
  injectable62()
3297
3297
  ], ModuleTreeScanner);
3298
3298
  var RageMPScriptEvent = class {
@@ -3835,7 +3835,7 @@ _ts_decorate52([
3835
3835
  _ts_metadata52("design:type", Array)
3836
3836
  ], AppBuilder.prototype, "plugins", void 0);
3837
3837
  AppBuilder = _ts_decorate52([
3838
- injectable8()
3838
+ injectable82()
3839
3839
  ], AppBuilder);
3840
3840
  async function createAppBuilder({ enviroment, plugins, appBuilderInherit, multiplayerService: multiplayerService2 }) {
3841
3841
  const internalAppContainer = new Container4();
@@ -4490,7 +4490,7 @@ var TimerService = class {
4490
4490
  }
4491
4491
  };
4492
4492
  _ts_decorate72([
4493
- inject7(MULTIPLAYER_SERVICE),
4493
+ inject72(MULTIPLAYER_SERVICE),
4494
4494
  _ts_metadata62("design:type", typeof MultiplayerService === "undefined" ? Object : MultiplayerService)
4495
4495
  ], TimerService.prototype, "multiplayerService", void 0);
4496
4496
  TimerService = _ts_decorate72([
@@ -4500,19 +4500,19 @@ TimerService = _ts_decorate72([
4500
4500
  // ../core/dist/chunk-2ADQZWQE.js
4501
4501
  import { injectable as injectable11 } from "inversify";
4502
4502
  import { inject as inject8, injectable as injectable25 } from "inversify";
4503
- function _ts_decorate8(decorators, target, key, desc) {
4503
+ function _ts_decorate9(decorators, target, key, desc) {
4504
4504
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4505
4505
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4506
4506
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
4507
4507
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4508
4508
  }
4509
- __name(_ts_decorate8, "_ts_decorate");
4510
- __name2(_ts_decorate8, "_ts_decorate");
4511
- function _ts_metadata7(k, v) {
4509
+ __name(_ts_decorate9, "_ts_decorate");
4510
+ __name2(_ts_decorate9, "_ts_decorate");
4511
+ function _ts_metadata8(k, v) {
4512
4512
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
4513
4513
  }
4514
- __name(_ts_metadata7, "_ts_metadata");
4515
- __name2(_ts_metadata7, "_ts_metadata");
4514
+ __name(_ts_metadata8, "_ts_metadata");
4515
+ __name2(_ts_metadata8, "_ts_metadata");
4516
4516
  var BaseEventService = class {
4517
4517
  static {
4518
4518
  __name(this, "BaseEventService");
@@ -4560,10 +4560,10 @@ var BaseEventService = class {
4560
4560
  return eventHandler;
4561
4561
  }
4562
4562
  };
4563
- BaseEventService = _ts_decorate8([
4563
+ BaseEventService = _ts_decorate9([
4564
4564
  injectable11(),
4565
- _ts_metadata7("design:type", Function),
4566
- _ts_metadata7("design:paramtypes", [
4565
+ _ts_metadata8("design:type", Function),
4566
+ _ts_metadata8("design:paramtypes", [
4567
4567
  typeof EventEmmiter === "undefined" ? Object : EventEmmiter
4568
4568
  ])
4569
4569
  ], BaseEventService);
@@ -4675,17 +4675,17 @@ var DefaultValuePipe = class {
4675
4675
  };
4676
4676
 
4677
4677
  // src/plugins/player-prototype.plugin.ts
4678
- function _ts_decorate9(decorators, target, key, desc) {
4678
+ function _ts_decorate10(decorators, target, key, desc) {
4679
4679
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4680
4680
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4681
4681
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
4682
4682
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4683
4683
  }
4684
- __name(_ts_decorate9, "_ts_decorate");
4685
- function _ts_metadata8(k, v) {
4684
+ __name(_ts_decorate10, "_ts_decorate");
4685
+ function _ts_metadata9(k, v) {
4686
4686
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
4687
4687
  }
4688
- __name(_ts_metadata8, "_ts_metadata");
4688
+ __name(_ts_metadata9, "_ts_metadata");
4689
4689
  var PlayerPrototypePlugin = class {
4690
4690
  static {
4691
4691
  __name(this, "PlayerPrototypePlugin");
@@ -4713,35 +4713,35 @@ var PlayerPrototypePlugin = class {
4713
4713
  this.loggerService.log(`~lw~Player prototype methods defined ~lk~(${Date.now() - time}ms)`);
4714
4714
  }
4715
4715
  };
4716
- _ts_decorate9([
4716
+ _ts_decorate10([
4717
4717
  inject9(GLOBAL_APP_CONTAINER),
4718
- _ts_metadata8("design:type", typeof Container5 === "undefined" ? Object : Container5)
4718
+ _ts_metadata9("design:type", typeof Container5 === "undefined" ? Object : Container5)
4719
4719
  ], PlayerPrototypePlugin.prototype, "globalAppContainer", void 0);
4720
- _ts_decorate9([
4720
+ _ts_decorate10([
4721
4721
  inject9(LOGGER_SERVICE),
4722
- _ts_metadata8("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
4722
+ _ts_metadata9("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
4723
4723
  ], PlayerPrototypePlugin.prototype, "loggerService", void 0);
4724
- _ts_decorate9([
4724
+ _ts_decorate10([
4725
4725
  inject9(MULTIPLAYER_SERVICE),
4726
- _ts_metadata8("design:type", typeof ServerMultiplayerService === "undefined" ? Object : ServerMultiplayerService)
4726
+ _ts_metadata9("design:type", typeof ServerMultiplayerService === "undefined" ? Object : ServerMultiplayerService)
4727
4727
  ], PlayerPrototypePlugin.prototype, "multiplayerService", void 0);
4728
- PlayerPrototypePlugin = _ts_decorate9([
4728
+ PlayerPrototypePlugin = _ts_decorate10([
4729
4729
  injectable12()
4730
4730
  ], PlayerPrototypePlugin);
4731
4731
 
4732
4732
  // src/plugins/rpc.plugin.ts
4733
4733
  import { inject as inject10, injectable as injectable13 } from "inversify";
4734
- function _ts_decorate10(decorators, target, key, desc) {
4734
+ function _ts_decorate11(decorators, target, key, desc) {
4735
4735
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4736
4736
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4737
4737
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
4738
4738
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4739
4739
  }
4740
- __name(_ts_decorate10, "_ts_decorate");
4741
- function _ts_metadata9(k, v) {
4740
+ __name(_ts_decorate11, "_ts_decorate");
4741
+ function _ts_metadata10(k, v) {
4742
4742
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
4743
4743
  }
4744
- __name(_ts_metadata9, "_ts_metadata");
4744
+ __name(_ts_metadata10, "_ts_metadata");
4745
4745
  var RPCPlugin = class {
4746
4746
  static {
4747
4747
  __name(this, "RPCPlugin");
@@ -4809,19 +4809,19 @@ var RPCPlugin = class {
4809
4809
  this.loggerService.log(`~lw~RPC handlers registered ~lk~(${Date.now() - time}ms)`);
4810
4810
  }
4811
4811
  };
4812
- _ts_decorate10([
4812
+ _ts_decorate11([
4813
4813
  inject10(EVENT_SERVICE),
4814
- _ts_metadata9("design:type", typeof EventService === "undefined" ? Object : EventService)
4814
+ _ts_metadata10("design:type", typeof EventService === "undefined" ? Object : EventService)
4815
4815
  ], RPCPlugin.prototype, "eventService", void 0);
4816
- _ts_decorate10([
4816
+ _ts_decorate11([
4817
4817
  inject10(RPC_SERVICE),
4818
- _ts_metadata9("design:type", typeof RPCService === "undefined" ? Object : RPCService)
4818
+ _ts_metadata10("design:type", typeof RPCService === "undefined" ? Object : RPCService)
4819
4819
  ], RPCPlugin.prototype, "rpcService", void 0);
4820
- _ts_decorate10([
4820
+ _ts_decorate11([
4821
4821
  inject10(LOGGER_SERVICE),
4822
- _ts_metadata9("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
4822
+ _ts_metadata10("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
4823
4823
  ], RPCPlugin.prototype, "loggerService", void 0);
4824
- RPCPlugin = _ts_decorate10([
4824
+ RPCPlugin = _ts_decorate11([
4825
4825
  injectable13()
4826
4826
  ], RPCPlugin);
4827
4827
 
@@ -4901,17 +4901,17 @@ var INTERNAL_EVENTS = {
4901
4901
  };
4902
4902
 
4903
4903
  // src/services/server-event.service.ts
4904
- function _ts_decorate11(decorators, target, key, desc) {
4904
+ function _ts_decorate12(decorators, target, key, desc) {
4905
4905
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4906
4906
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4907
4907
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
4908
4908
  return c > 3 && r && Object.defineProperty(target, key, r), r;
4909
4909
  }
4910
- __name(_ts_decorate11, "_ts_decorate");
4911
- function _ts_metadata10(k, v) {
4910
+ __name(_ts_decorate12, "_ts_decorate");
4911
+ function _ts_metadata11(k, v) {
4912
4912
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
4913
4913
  }
4914
- __name(_ts_metadata10, "_ts_metadata");
4914
+ __name(_ts_metadata11, "_ts_metadata");
4915
4915
  function _ts_param(paramIndex, decorator) {
4916
4916
  return function(target, key) {
4917
4917
  decorator(target, key, paramIndex);
@@ -5069,28 +5069,28 @@ var ServerEventService2 = class extends BaseEventService {
5069
5069
  });
5070
5070
  }
5071
5071
  };
5072
- ServerEventService2 = _ts_decorate11([
5072
+ ServerEventService2 = _ts_decorate12([
5073
5073
  injectable14(),
5074
5074
  _ts_param(0, inject11(MULTIPLAYER_SERVICE)),
5075
- _ts_metadata10("design:type", Function),
5076
- _ts_metadata10("design:paramtypes", [
5075
+ _ts_metadata11("design:type", Function),
5076
+ _ts_metadata11("design:paramtypes", [
5077
5077
  typeof ServerMultiplayerService === "undefined" ? Object : ServerMultiplayerService
5078
5078
  ])
5079
5079
  ], ServerEventService2);
5080
5080
 
5081
5081
  // src/services/server-logger.service.ts
5082
5082
  import { inject as inject12, injectable as injectable15 } from "inversify";
5083
- function _ts_decorate12(decorators, target, key, desc) {
5083
+ function _ts_decorate13(decorators, target, key, desc) {
5084
5084
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5085
5085
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5086
5086
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5087
5087
  return c > 3 && r && Object.defineProperty(target, key, r), r;
5088
5088
  }
5089
- __name(_ts_decorate12, "_ts_decorate");
5090
- function _ts_metadata11(k, v) {
5089
+ __name(_ts_decorate13, "_ts_decorate");
5090
+ function _ts_metadata12(k, v) {
5091
5091
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
5092
5092
  }
5093
- __name(_ts_metadata11, "_ts_metadata");
5093
+ __name(_ts_metadata12, "_ts_metadata");
5094
5094
  var ServerLoggerService = class {
5095
5095
  static {
5096
5096
  __name(this, "ServerLoggerService");
@@ -5109,27 +5109,27 @@ var ServerLoggerService = class {
5109
5109
  this.multiplayerService.logDebug(`~w~[~y~${MANGO_LOG_PREFIX}Server~w~][~lc~Debug~w~]`, ...args);
5110
5110
  }
5111
5111
  };
5112
- _ts_decorate12([
5112
+ _ts_decorate13([
5113
5113
  inject12(MULTIPLAYER_SERVICE),
5114
- _ts_metadata11("design:type", typeof ServerMultiplayerService === "undefined" ? Object : ServerMultiplayerService)
5114
+ _ts_metadata12("design:type", typeof ServerMultiplayerService === "undefined" ? Object : ServerMultiplayerService)
5115
5115
  ], ServerLoggerService.prototype, "multiplayerService", void 0);
5116
- ServerLoggerService = _ts_decorate12([
5116
+ ServerLoggerService = _ts_decorate13([
5117
5117
  injectable15()
5118
5118
  ], ServerLoggerService);
5119
5119
 
5120
5120
  // src/services/server-rpc.service.ts
5121
5121
  import { inject as inject13, injectable as injectable16 } from "inversify";
5122
- function _ts_decorate13(decorators, target, key, desc) {
5122
+ function _ts_decorate14(decorators, target, key, desc) {
5123
5123
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5124
5124
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5125
5125
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5126
5126
  return c > 3 && r && Object.defineProperty(target, key, r), r;
5127
5127
  }
5128
- __name(_ts_decorate13, "_ts_decorate");
5129
- function _ts_metadata12(k, v) {
5128
+ __name(_ts_decorate14, "_ts_decorate");
5129
+ function _ts_metadata13(k, v) {
5130
5130
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
5131
5131
  }
5132
- __name(_ts_metadata12, "_ts_metadata");
5132
+ __name(_ts_metadata13, "_ts_metadata");
5133
5133
  var ServerRPCService = class extends BaseRPCService {
5134
5134
  static {
5135
5135
  __name(this, "ServerRPCService");
@@ -5218,26 +5218,26 @@ var ServerRPCService = class extends BaseRPCService {
5218
5218
  });
5219
5219
  }
5220
5220
  };
5221
- _ts_decorate13([
5221
+ _ts_decorate14([
5222
5222
  inject13(EVENT_SERVICE),
5223
- _ts_metadata12("design:type", typeof ServerEventService === "undefined" ? Object : ServerEventService)
5223
+ _ts_metadata13("design:type", typeof ServerEventService === "undefined" ? Object : ServerEventService)
5224
5224
  ], ServerRPCService.prototype, "$eventService", void 0);
5225
- ServerRPCService = _ts_decorate13([
5225
+ ServerRPCService = _ts_decorate14([
5226
5226
  injectable16()
5227
5227
  ], ServerRPCService);
5228
5228
 
5229
5229
  // src/plugins/service-binder.plugin.ts
5230
- function _ts_decorate14(decorators, target, key, desc) {
5230
+ function _ts_decorate15(decorators, target, key, desc) {
5231
5231
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5232
5232
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5233
5233
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5234
5234
  return c > 3 && r && Object.defineProperty(target, key, r), r;
5235
5235
  }
5236
- __name(_ts_decorate14, "_ts_decorate");
5237
- function _ts_metadata13(k, v) {
5236
+ __name(_ts_decorate15, "_ts_decorate");
5237
+ function _ts_metadata14(k, v) {
5238
5238
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
5239
5239
  }
5240
- __name(_ts_metadata13, "_ts_metadata");
5240
+ __name(_ts_metadata14, "_ts_metadata");
5241
5241
  var ServiceBinderPlugin = class {
5242
5242
  static {
5243
5243
  __name(this, "ServiceBinderPlugin");
@@ -5256,15 +5256,15 @@ var ServiceBinderPlugin = class {
5256
5256
  loggerService.log(`~lw~Internal services binded ~lk~(${Date.now() - time}ms)`);
5257
5257
  }
5258
5258
  };
5259
- _ts_decorate14([
5259
+ _ts_decorate15([
5260
5260
  inject14(INTERNAL_APP_CONTAINER),
5261
- _ts_metadata13("design:type", typeof Container6 === "undefined" ? Object : Container6)
5261
+ _ts_metadata14("design:type", typeof Container6 === "undefined" ? Object : Container6)
5262
5262
  ], ServiceBinderPlugin.prototype, "internalAppContainer", void 0);
5263
- _ts_decorate14([
5263
+ _ts_decorate15([
5264
5264
  inject14(GLOBAL_APP_CONTAINER),
5265
- _ts_metadata13("design:type", typeof Container6 === "undefined" ? Object : Container6)
5265
+ _ts_metadata14("design:type", typeof Container6 === "undefined" ? Object : Container6)
5266
5266
  ], ServiceBinderPlugin.prototype, "globalAppContainer", void 0);
5267
- ServiceBinderPlugin = _ts_decorate14([
5267
+ ServiceBinderPlugin = _ts_decorate15([
5268
5268
  injectable17()
5269
5269
  ], ServiceBinderPlugin);
5270
5270
 
@@ -5417,6 +5417,35 @@ var ServerRageMPMultiplayerService = class extends RageMPMultiplayerService {
5417
5417
  }
5418
5418
  setVoiceChannelFactory(_factory) {
5419
5419
  }
5420
+ // Override logging methods - RageMP server uses console.log, not mp.console.logInfo
5421
+ log(arg, ...args) {
5422
+ const message = [
5423
+ arg,
5424
+ ...args
5425
+ ].map((a) => typeof a === "object" ? JSON.stringify(a) : String(a)).join(" ");
5426
+ console.log(message);
5427
+ }
5428
+ logError(arg, ...args) {
5429
+ const message = [
5430
+ arg,
5431
+ ...args
5432
+ ].map((a) => typeof a === "object" ? JSON.stringify(a) : String(a)).join(" ");
5433
+ console.error(message);
5434
+ }
5435
+ logWarning(arg, ...args) {
5436
+ const message = [
5437
+ arg,
5438
+ ...args
5439
+ ].map((a) => typeof a === "object" ? JSON.stringify(a) : String(a)).join(" ");
5440
+ console.warn(message);
5441
+ }
5442
+ logDebug(arg, ...args) {
5443
+ const message = [
5444
+ arg,
5445
+ ...args
5446
+ ].map((a) => typeof a === "object" ? JSON.stringify(a) : String(a)).join(" ");
5447
+ console.log(`[DEBUG] ${message}`);
5448
+ }
5420
5449
  };
5421
5450
 
5422
5451
  // src/decorators/errors/use-filters.decorator.ts
@@ -6083,17 +6112,17 @@ __name(Throttle, "Throttle");
6083
6112
 
6084
6113
  // src/modules/throttler/throttler.guard.ts
6085
6114
  import { createHash } from "crypto";
6086
- function _ts_decorate15(decorators, target, key, desc) {
6115
+ function _ts_decorate16(decorators, target, key, desc) {
6087
6116
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6088
6117
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
6089
6118
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6090
6119
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6091
6120
  }
6092
- __name(_ts_decorate15, "_ts_decorate");
6093
- function _ts_metadata14(k, v) {
6121
+ __name(_ts_decorate16, "_ts_decorate");
6122
+ function _ts_metadata15(k, v) {
6094
6123
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
6095
6124
  }
6096
- __name(_ts_metadata14, "_ts_metadata");
6125
+ __name(_ts_metadata15, "_ts_metadata");
6097
6126
  var ThrottlerGuard = class {
6098
6127
  static {
6099
6128
  __name(this, "ThrottlerGuard");
@@ -6184,30 +6213,30 @@ var ThrottlerGuard = class {
6184
6213
  return isFunction(resolvableValue) ? resolvableValue(context) : resolvableValue;
6185
6214
  }
6186
6215
  };
6187
- _ts_decorate15([
6216
+ _ts_decorate16([
6188
6217
  Inject(THROTTLER_OPTIONS),
6189
- _ts_metadata14("design:type", typeof ThrottlerModuleOptions === "undefined" ? Object : ThrottlerModuleOptions)
6218
+ _ts_metadata15("design:type", typeof ThrottlerModuleOptions === "undefined" ? Object : ThrottlerModuleOptions)
6190
6219
  ], ThrottlerGuard.prototype, "options", void 0);
6191
- _ts_decorate15([
6220
+ _ts_decorate16([
6192
6221
  Inject(THROTTLER_STORAGE),
6193
- _ts_metadata14("design:type", typeof ThrottlerStorageService === "undefined" ? Object : ThrottlerStorageService)
6222
+ _ts_metadata15("design:type", typeof ThrottlerStorageService === "undefined" ? Object : ThrottlerStorageService)
6194
6223
  ], ThrottlerGuard.prototype, "storageService", void 0);
6195
- _ts_decorate15([
6224
+ _ts_decorate16([
6196
6225
  Inject(REFLECTOR_SERVICE),
6197
- _ts_metadata14("design:type", typeof ReflectorService === "undefined" ? Object : ReflectorService)
6226
+ _ts_metadata15("design:type", typeof ReflectorService === "undefined" ? Object : ReflectorService)
6198
6227
  ], ThrottlerGuard.prototype, "reflector", void 0);
6199
- ThrottlerGuard = _ts_decorate15([
6228
+ ThrottlerGuard = _ts_decorate16([
6200
6229
  Injectable()
6201
6230
  ], ThrottlerGuard);
6202
6231
 
6203
6232
  // src/modules/throttler/services/throttler-storage.service.ts
6204
- function _ts_decorate16(decorators, target, key, desc) {
6233
+ function _ts_decorate17(decorators, target, key, desc) {
6205
6234
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6206
6235
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
6207
6236
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6208
6237
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6209
6238
  }
6210
- __name(_ts_decorate16, "_ts_decorate");
6239
+ __name(_ts_decorate17, "_ts_decorate");
6211
6240
  var ThrottlerStorageService2 = class {
6212
6241
  static {
6213
6242
  __name(this, "ThrottlerStorageService");
@@ -6252,18 +6281,18 @@ var ThrottlerStorageService2 = class {
6252
6281
  this.timeoutIds.forEach(clearTimeout);
6253
6282
  }
6254
6283
  };
6255
- ThrottlerStorageService2 = _ts_decorate16([
6284
+ ThrottlerStorageService2 = _ts_decorate17([
6256
6285
  Injectable()
6257
6286
  ], ThrottlerStorageService2);
6258
6287
 
6259
6288
  // src/modules/throttler/throttler.module.ts
6260
- function _ts_decorate17(decorators, target, key, desc) {
6289
+ function _ts_decorate18(decorators, target, key, desc) {
6261
6290
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6262
6291
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
6263
6292
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6264
6293
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6265
6294
  }
6266
- __name(_ts_decorate17, "_ts_decorate");
6295
+ __name(_ts_decorate18, "_ts_decorate");
6267
6296
  var ThrottlerModule = class _ThrottlerModule {
6268
6297
  static {
6269
6298
  __name(this, "ThrottlerModule");
@@ -6335,7 +6364,7 @@ var ThrottlerModule = class _ThrottlerModule {
6335
6364
  };
6336
6365
  }
6337
6366
  };
6338
- ThrottlerModule = _ts_decorate17([
6367
+ ThrottlerModule = _ts_decorate18([
6339
6368
  Global(),
6340
6369
  Module2()
6341
6370
  ], ThrottlerModule);
@@ -6592,4 +6621,4 @@ export {
6592
6621
  isSymbol,
6593
6622
  isUndefined
6594
6623
  };
6595
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2FwcC1lbnZpcm9tZW50LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2NvcmUtbWV0YWRhdGEta2V5LmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V2ZW50LWRlc3RpbmF0aW9uLmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL2V4ZWN1dGlvbi1jb250ZXh0LXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvZW51bXMvbWV0aG9kLXBhcmFtLXR5cGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvZW51bXMvZXJyb3ItbWVzc2FnZS5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2VudW1zL2luamVjdGFibGUtc2NvcGUuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9lbnVtcy9ycGMtcmVzdWx0LXN0YXR1cy5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvZGlzdC9jaHVuay03UVZZVTYzRS5qcyIsICIuLi8uLi9jb3JlL3NyYy91dGlscy9nZW5lcmF0ZS1yYW5kb20taWQudXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy91dGlscy90eXBlLWNoZWNrLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS9tb2R1bGUtbWV0YWRhdGEucmVhZGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUvbW9kdWxlLWNvbnRhaW5lci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlL21vZHVsZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvZXhlY3V0aW9uLWNvbnRleHQtYmFzZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvbWFuZ28tcmVxdWVzdC1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9waXBlbGluZS9tYW5nby1yZXNwb25zZS1iYXNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC91dGlscy90cmVlLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9jb250cm9sbGVyL2NvbnRyb2xsZXItb3B0aW9ucy52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9lcnJvci1maWx0ZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvcGlwZS52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9zY2hlbWFzL2V2ZW50cy9ldmVudC1wYXJhbWV0ZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZXZlbnQtbWV0YWRhdGEudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZ3VhcmQudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvaW50ZXJjZXB0b3IudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbmplY3Rpb24tdG9rZW4udmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9tb2R1bGUvcHJvdmlkZXIudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9tb2R1bGUvbW9kdWxlLW9wdGlvbnMudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9pbmplY3RhYmxlLW1ldGFkYXRhLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb25zdGFudHMvaW5kZXgudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL21hbmdvLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9ndWFyZC1jYW5jZWwuZXJyb3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL2d1YXJkLWludmFsaWQtcmV0dXJuLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy90b28tbWFueS1yZXF1ZXN0cy5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9lcnJvcnMvdW5rbm93bi5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWV2ZW50LmhhbmRsZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvcGlwZWxpbmUuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLWZsb3cuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLW1ldGFkYXRhLnJlYWRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLXJwYy5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb250cm9sbGVyL2NvbnRyb2xsZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvc2VydmljZXMvcmVmbGVjdG9yLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL2NvbnRyb2xsZXIuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9nbG9iYWwuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9pbmplY3QuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9pbmplY3RhYmxlLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvbW9kdWxlLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvb3B0aW9uYWwuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9zZXQtbWV0YWRhdGEuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXJyb3JzL2NhdGNoLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2Vycm9ycy91c2UtZmlsdGVycy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS10cmVlL2FwcC1ydW50aW1lLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUtdHJlZS9kZXBlbmRlbmN5LWJpbmRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlLXRyZWUvbW9kdWxlLXRyZWUtc2Nhbm5lci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1zY3JpcHQtZXZlbnQtaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1ldmVudC1lbW1pdGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXRpbWVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXRpbWVycy50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1tdWx0aXBsYXllci5zZXJ2aWNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9hcHAtYnVpbGRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvYXBwLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jcmVhdGUtYXBwLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY3JlYXRlLWV2ZW50LWRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi1pbnRlcm5hbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24td2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24uZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2UtaW50ZXJuYWwuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2UuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2Utd2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvYm9keS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvaW5kZXguZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGFyYW1zL3JlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGFyYW1zL3BhcmFtLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9yZXNwb25zZS5kZW9yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1ndWFyZHMuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGlwZWxpbmUvdXNlLWludGVyY2VwdG9ycy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtcGlwZXMuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY3JlYXRlLXJwYy1kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ycGMvb24tcmVxdWVzdC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ycGMvb24td2Vidmlldy1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NyZWF0ZS10aW1lci5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy90aW1lcnMvY3Jvbi5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy90aW1lcnMvZXZlcnktdGljay5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy90aW1lcnMvaW50ZXJ2YWwuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvdGltZXJzL3RpbWVvdXQuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvYXBwbHktZGVjb3JhdG9yLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtcGFyYW0udXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2ZvcndhcmQtcmVmLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvc2VydmljZXMvdGltZXIuc2VydmljZS50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3JvbmVyQDguMS4yL25vZGVfbW9kdWxlcy9jcm9uZXIvZGlzdC9jcm9uZXIubWluLmpzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9zZXJ2aWNlcy9iYXNlLWV2ZW50LnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3NlcnZpY2VzL2Jhc2UtcnBjLnNlcnZpY2UudHMiLCAiLi4vc3JjL3BsdWdpbnMvcGxheWVyLXByb3RvdHlwZS5wbHVnaW4udHMiLCAiLi4vLi4vY29yZS9zcmMvcGlwZXMvZGVmYXVsdC12YWx1ZS5waXBlLnRzIiwgIi4uL3NyYy9wbHVnaW5zL3JwYy5wbHVnaW4udHMiLCAiLi4vc3JjL3BsdWdpbnMvc2VydmljZS1iaW5kZXIucGx1Z2luLnRzIiwgIi4uL3NyYy9zZXJ2aWNlcy9zZXJ2ZXItZXZlbnQuc2VydmljZS50cyIsICIuLi9zcmMvY29uc3RhbnRzL2ludGVybmFsLWV2ZW50cy5jb25zdHMudHMiLCAiLi4vc3JjL3NlcnZpY2VzL3NlcnZlci1sb2dnZXIuc2VydmljZS50cyIsICIuLi9zcmMvc2VydmljZXMvc2VydmVyLXJwYy5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXNjcmlwdC1ldmVudC1oYW5kbGVyLnRzIiwgIi4uL3NyYy9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLWV2ZW50LWVtbWl0ZXIudHMiLCAiLi4vc3JjL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtbXVsdGlwbGF5ZXIuc2VydmljZS50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9lcnJvcnMvdXNlLWZpbHRlcnMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9pbnRlcm5hbC9pbmRleC50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24tcGxheWVyLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24td2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS1wbGF5ZXIuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbmNlLXdlYnZpZXcuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbmNlLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcGxheWVyLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtZ3VhcmRzLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtaW50ZXJjZXB0b3JzLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ycGMvb24tcGxheWVyLXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ycGMvb24td2Vidmlldy1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvdGhyb3R0bGVyLmNvbnN0YW50cy50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvZGVjb3JhdG9ycy9za2lwLXRocm90dGxlLmRlY29yYXRvci50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvZGVjb3JhdG9ycy90aHJvdHRsZS5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL21vZHVsZXMvdGhyb3R0bGVyL3Rocm90dGxlci5ndWFyZC50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvc2VydmljZXMvdGhyb3R0bGVyLXN0b3JhZ2Uuc2VydmljZS50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvdGhyb3R0bGVyLm1vZHVsZS50cyIsICIuLi9zcmMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCBlbnVtIEFwcEVudmlyb21lbnQge1xuICAgIENsaWVudCxcbiAgICBTZXJ2ZXIsXG59XG4iLCAiZXhwb3J0IGVudW0gQ29yZU1ldGFkYXRhS2V5IHtcbiAgICAvLyBHZW5lcmFsXG4gICAgSW5qZWN0YWJsZSA9ICdtYW5nbzppbmplY3RhYmxlJyxcbiAgICBJbmplY3QgPSAnbWFuZ286aW5qZWN0JyxcbiAgICBNb2R1bGUgPSAnbWFuZ286bW9kdWxlJyxcbiAgICBHbG9iYWxNb2R1bGUgPSAnbWFuZ286Z2xvYmFsLW1vZHVsZScsXG4gICAgQ29udHJvbGxlciA9ICdtYW5nbzpjb250cm9sbGVyLW9wdGlvbnMnLFxuICAgIC8vIEV2ZW50cyAmIFJQQ1xuICAgIENvbnRyb2xsZXJFdmVudHMgPSAnbWFuZ286Y29udHJvbGxlci1ldmVudHMnLFxuICAgIENvbnRyb2xsZXJSUENzID0gJ21hbmdvOmNvbnRyb2xsZXItcnBjcycsXG4gICAgQ29udHJvbGxlclBhcmFtcyA9ICdtYW5nbzpjb250cm9sbGVyLXJwYy1wYXJhbXMnLFxuICAgIC8vIFBpcGVsaW5lXG4gICAgR3VhcmRzID0gJ21hbmdvOmd1YXJkcycsXG4gICAgSW50ZXJjZXB0b3JzID0gJ21hbmdvOmludGVyY2VwdG9ycycsXG4gICAgUGlwZXMgPSAnbWFuZ286cGlwZXMnLFxuICAgIC8vIEVycm9yXG4gICAgQ2F0Y2ggPSAnbWFuZ286Y2F0Y2gnLFxuICAgIEVycm9yRmlsdGVycyA9ICdtYW5nbzplcnJvci1maWx0ZXJzJyxcbiAgICAvL1xuICAgIFRpbWVycyA9ICdtYW5nbzp0aW1lcnMnLFxufVxuIiwgImV4cG9ydCBlbnVtIEV2ZW50RGVzdGluYXRpb24ge1xuICAgIFNlcnZlciA9ICdzZXJ2ZXInLFxuICAgIENsaWVudCA9ICdjbGllbnQnLFxuICAgIFdlYlZpZXcgPSAnd2VidmlldycsXG59XG4iLCAiZXhwb3J0IGVudW0gRXhlY3V0aW9uQ29udGV4dFR5cGUge1xuICAgIEV2ZW50ID0gJ2V2ZW50JyxcbiAgICBSUEMgPSAncnBjJyxcbn1cbiIsICJleHBvcnQgZW51bSBNZXRob2RQYXJhbVR5cGUge1xuICAgIEJvZHkgPSAnYm9keScsXG4gICAgQ3VzdG9tID0gJ2N1c3RvbScsXG4gICAgUGFyYW0gPSAncGFyYW0nLFxuICAgIFBsYXllciA9ICdwbGF5ZXInLFxuICAgIFJlcXVlc3QgPSAncmVxdWVzdCcsXG4gICAgUmVzcG9uc2UgPSAncmVzcG9uc2UnLFxuICAgIEluZGV4ID0gJ2luZGV4Jyxcbn1cbiIsICJleHBvcnQgY29uc3QgTE9HR0VSX1NFUlZJQ0UgPSAnTE9HR0VSX1NFUlZJQ0UnO1xuZXhwb3J0IGNvbnN0IEVWRU5UX1NFUlZJQ0UgPSAnRVZFTlRfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgUlBDX1NFUlZJQ0UgPSAnUlBDX1NFUlZJQ0UnO1xuZXhwb3J0IGNvbnN0IE1PRFVMRV9DT05UQUlORVIgPSAnTU9EVUxFX0NPTlRBSU5FUic7XG5leHBvcnQgY29uc3QgUkVGTEVDVE9SX1NFUlZJQ0UgPSAnUkVGTEVDVE9SX1NFUlZJQ0UnO1xuZXhwb3J0IGNvbnN0IFRJTUVSX1NFUlZJQ0UgPSAnVElNRVJfU0VSVklDRSc7XG4iLCAiZXhwb3J0IGVudW0gRXJyb3JNZXNzYWdlIHtcbiAgICBUb29NYW55UmVxdWVzdHMgPSAnVG9vIG1hbnkgcmVxdWVzdHMuJyxcblxuICAgIC8vIEV2ZW50c1xuICAgIEV2ZW50TmFtZU11c3RCZVN0cmluZyA9ICdUaGUgZXZlbnQgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLicsXG4gICAgRXZlbnROYW1lTXVzdEJlVW5pcXVlID0gJ1RoZSBldmVudCBuYW1lIG11c3QgYmUgdW5pcXVlLicsXG4gICAgRXZlbnROb3RBbGxvd2VkSW5DbGllbnQgPSAnVGhlIGV2ZW50IGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjbGllbnQgZW52aXJvbm1lbnQuJyxcbiAgICBFdmVudE5vdEFsbG93ZWRJblNlcnZlciA9ICdUaGUgZXZlbnQgaXMgbm90IGFsbG93ZWQgaW4gdGhlIHNlcnZlciBlbnZpcm9ubWVudC4nLFxuICAgIEludmFsaWRFdmVudFR5cGUgPSAnSW52YWxpZCBldmVudCB0eXBlLicsXG4gICAgSW52YWxpZEludGVybmFsRXZlbnROYW1lID0gJ1RoZSBuYW1lIG9mIHRoZSBpbnRlcm5hbCBldmVudCBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFJldHVybkluRXZlbnQgPSAnQ2Fubm90IHJldHVybiBhIHZhbHVlIGZyb20gYW4gZXZlbnQuJyxcblxuICAgIC8vIFJQQ1xuICAgIFJQQ05hbWVNdXN0QmVTdHJpbmcgPSAnVGhlIFJQQyBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBSUENOYW1lTXVzdEJlVW5pcXVlID0gJ1RoZSBSUEMgbmFtZSBtdXN0IGJlIHVuaXF1ZS4nLFxuICAgIFJQQ05vdEFsbG93ZWRJbkNsaWVudCA9ICdUaGUgUlBDIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjbGllbnQgZW52aXJvbm1lbnQuJyxcbiAgICBSUENOb3RBbGxvd2VkSW5TZXJ2ZXIgPSAnVGhlIFJQQyBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc2VydmVyIGVudmlyb25tZW50LicsXG4gICAgSW52YWxpZFJQQ1R5cGUgPSAnSW52YWxpZCBSUEMgdHlwZS4nLFxuICAgIFJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzID0gJ1RoZSBSUEMgaGFuZGxlciBhbHJlYWR5IGV4aXN0cy4gUGxlYXNlIHByb3ZpZGUgYSB1bmlxdWUgbmFtZSBmb3IgdGhlIFJQQy4nLFxuICAgIFJQQ1Jlc3BvbnNlQWxyZWFkeVNlbnQgPSAnVGhlIFJQQyByZXNwb25zZSBoYXMgYWxyZWFkeSBiZWVuIHNlbnQuJyxcblxuICAgIC8vIEVycm9yIGZpbHRlcnNcbiAgICBJbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uID0gJ0ludmFsaWQgZXJyb3IgZmlsdGVyLiBFcnJvciBmaWx0ZXJzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYSBjYXRjaCBtZXRob2QuJyxcbiAgICBFcnJvckFscmVhZHlIYW5kbGVkQnlGaWx0ZXIgPSAnVGhlIGVycm9yIGFscmVhZHkgcG9pbnRzIHRvIGEgZmlsdGVyLicsXG4gICAgRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCA9ICdUaGUgc2FtZSBleGNlcHRpb24gY2FuIG9ubHkgYmUgY2F1Z2h0IG9uY2UuJyxcbiAgICBBdExlYXN0T25lRmlsdGVyUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGVycm9yIGZpbHRlciBtdXN0IGJlIHByb3ZpZGVkLicsXG4gICAgRHVwbGljYXRlRXJyb3JGaWx0ZXJEZXRlY3RlZCA9ICdEdXBsaWNhdGUgZXJyb3IgZmlsdGVyIGZvdW5kLiBFbnN1cmUgdGhhdCB0aGUgc2FtZSBmaWx0ZXIgaXMgbm90IGFwcGxpZWQgbW9yZSB0aGFuIG9uY2UuJyxcblxuICAgIC8vIFdlYlZpZXdcbiAgICBXZWJWaWV3Tm90Rm91bmQgPSAnVGhlIFdlYlZpZXcgd2l0aCB0aGUgc3BlY2lmaWVkIGlkIGRvZXMgbm90IGV4aXN0LicsXG4gICAgV2ViVmlld0lkTXVzdEJlU3RyaW5nT3JOdW1iZXIgPSAnVGhlIFdlYlZpZXcgaWQgbXVzdCBiZSBhIHN0cmluZyBvciBudW1iZXIuJyxcblxuICAgIC8vIEd1YXJkXG4gICAgSW52YWxpZEd1YXJkRGVmaW5pdGlvbiA9ICdJbnZhbGlkIGd1YXJkLiBHdWFyZHMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhIGNhbkFjdGl2YXRlIG1ldGhvZC4nLFxuICAgIEF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkID0gJ0F0IGxlYXN0IG9uZSBndWFyZCBtdXN0IGJlIHByb3ZpZGVkLicsXG5cbiAgICAvLyBJbnRlcmNlcHRvclxuICAgIEludmFsaWRJbnRlcmNlcHRvckRlZmluaXRpb24gPSAnSW52YWxpZCBpbnRlcmNlcHRvci4gSW50ZXJjZXB0b3JzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYW4gaW50ZXJjZXB0IG1ldGhvZC4nLFxuICAgIEF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkID0gJ0F0IGxlYXN0IG9uZSBpbnRlcmNlcHRvciBtdXN0IGJlIHByb3ZpZGVkLicsXG4gICAgSW52YWxpZEludGVyY2VwdG9yUmV0dXJuVmFsdWUgPSAnVGhlIGludGVyY2VwdG9yIG11c3QgcmV0dXJuIGEgZnVuY3Rpb24uJyxcblxuICAgIC8vIFBpcGVcbiAgICBJbnZhbGlkUGlwZURlZmluaXRpb24gPSAnSW52YWxpZCBwaXBlLiBQaXBlcyBtdXN0IGJlIGEgY2xhc3MgcmVmZXJlbmNlIG9yIGFuIG9iamVjdCB3aXRoIGEgdHJhbnNmb3JtIG1ldGhvZC4nLFxuICAgIEF0TGVhc3RPbmVQaXBlUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIHBpcGUgbXVzdCBiZSBwcm92aWRlZC4nLFxuXG4gICAgLy8gQXBwIGxvYWRpbmdcbiAgICBBcHBBbHJlYWR5TG9hZGVkID0gJ0FwcCBpcyBhbHJlYWR5IGxvYWRlZC4gUGxlYXNlIGNhbGwgdGhlIHN0b3AgbWV0aG9kIGJlZm9yZSBjYWxsaW5nIHRoZSBzdGFydCBtZXRob2QuJyxcbiAgICBBcHBOb3RMb2FkZWQgPSAnQXBwIGlzIG5vdCBsb2FkZWQuIFBsZWFzZSBjYWxsIHRoZSBzdGFydCBtZXRob2QgYmVmb3JlIGNhbGxpbmcgdGhlIHN0b3AgbWV0aG9kLicsXG5cbiAgICAvLyBEZWNvcmF0b3JzXG4gICAgSW52YWxpZEluamVjdGlvblRva2VuU3BlY2lmaWVkID0gJ1RoZSBzcGVjaWZpZWQgaW5qZWN0aW9uIHRva2VuIGlzIGludmFsaWQuJyxcbiAgICBJbmplY3Rpb25Ub2tlbk5vdEZvdW5kID0gJ1RoZSBpbmplY3Rpb24gdG9rZW4gY291bGQgbm90IGJlIGZvdW5kLicsXG4gICAgUGFyYW1LZXlNdXN0QmVTdHJpbmcgPSAnVGhlIHBhcmFtIGtleSBtdXN0IGJlIGEgc3RyaW5nLicsXG4gICAgSW5kZXhLZXlNdXN0QmVOdW1iZXIgPSAnVGhlIGluZGV4IGtleSBtdXN0IGJlIGEgbnVtYmVyLicsXG4gICAgRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UgPSAnVGhlIHNhbWUgZGVjb3JhdG9yIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBpbiB0aGUgc2FtZSBjbGFzcy4nLFxuICAgIEludmFsaWRDb250cm9sbGVyT3B0aW9ucyA9ICdJbnZhbGlkIGNvbnRyb2xsZXIgb3B0aW9ucyBmb3VuZC4nLFxuICAgIEludmFsaWRJbmplY3RhYmxlT3B0aW9ucyA9ICdJbnZhbGlkIGluamVjdGFibGUgb3B0aW9ucyBmb3VuZC4nLFxuICAgIEludmFsaWRNb2R1bGVPcHRpb25zID0gJ0ludmFsaWQgbW9kdWxlIG9wdGlvbnMgZm91bmQuJyxcbiAgICBNdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQgPSAnQ2Fubm90IGFwcGx5IG11bHRpcGxlIGRlY29yYXRvcnMgdG8gdGhlIHNhbWUgcGFyYW1ldGVyLicsXG5cbiAgICAvLyBJbnRlcm5hbCBBcHBcbiAgICBDaXJjdWxhckRlcGVuZGVuY3lEZXRlY3RlZCA9ICdDaXJjdWxhciBkZXBlbmRlbmN5IGRldGVjdGVkLicsXG4gICAgSW52YWxpZE1vZHVsZURlZmluaXRpb24gPSAnVGhlIG1vZHVsZSBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZEV4cG9ydERlZmluaXRpb24gPSAnVGhlIGV4cG9ydCBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbiA9ICdUaGUgcHJvdmlkZXIgaXMgaW52YWxpZC4nLFxuICAgIEludmFsaWRQYXJhbWV0ZXJEZWNvcmF0b3JVc2FnZSA9ICdFYWNoIHBhcmFtZXRlciBtdXN0IGhhdmUgdGhlaXIgaXRzIG93biBkZWNvcmF0b3IuJyxcbiAgICBSZXNwb25zZURlY29yYXRvck5vdEFsbG93ZWRPbkV2ZW50cyA9ICdUaGUgQFJlc3BvbnNlKCkgZGVjb3JhdG9yIGlzIG5vdCBhbGxvd2VkIG9uIGV2ZW50cy4nLFxuICAgIFBsYXllckRlY29yYXRvck5vdEFsbG93ZWRPbkNsaWVudEV2ZW50cyA9ICdUaGUgQFBsYXllcigpIGRlY29yYXRvciBpcyBub3QgYWxsb3dlZCBvbiBjbGllbnQgZXZlbnRzLicsXG5cbiAgICAvLyBUaW1lcnNcbiAgICBUaW1lck5hbWVNdXN0QmVTdHJpbmcgPSAnVGhlIHRpbWVyIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4nLFxufVxuIiwgImV4cG9ydCBlbnVtIEluamVjdGFibGVTY29wZSB7XG4gICAgUmVxdWVzdCA9ICdyZXF1ZXN0JyxcbiAgICBUcmFuc2llbnQgPSAndHJhbnNpZW50JyxcbiAgICBTaW5nbGV0b24gPSAnc2luZ2xldG9uJyxcbn1cbiIsICJleHBvcnQgZW51bSBSUENSZXN1bHRTdGF0dXMge1xuICAgIFN1Y2Nlc3MgPSAxLFxuICAgIFRpbWVvdXQgPSAyLFxuICAgIEhhbmRsZXJOb3RGb3VuZCA9IDMsXG4gICAgVW5rbm93biA9IDQsXG4gICAgQ2FuY2VsbGVkQnlHdWFyZCA9IDUsXG4gICAgSW52YWxpZEd1YXJkUmV0dXJuID0gNixcbiAgICBUb29NYW55UmVxdWVzdHMgPSA3LFxuICAgIFBsYXllckRpc2Nvbm5lY3RlZCA9IDgsXG4gICAgUGxheWVyTm90Rm91bmQgPSA5LFxufVxuIiwgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19uYW1lID0gKHRhcmdldCwgdmFsdWUpPT5fX2RlZlByb3AodGFyZ2V0LCBcIm5hbWVcIiwge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG5leHBvcnQgeyBfX25hbWUgfTsgLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxld29nSUNKMlpYSnphVzl1SWpvZ015d0tJQ0FpYzI5MWNtTmxjeUk2SUZ0ZExBb2dJQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZJRnRkTEFvZ0lDSnRZWEJ3YVc1bmN5STZJQ0lpTEFvZ0lDSnVZVzFsY3lJNklGdGRDbjBLXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJaUo5IiwgImV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbUlkKCkge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KTtcbn1cbiIsICJleHBvcnQgY29uc3QgaXNVbmRlZmluZWQgPSAob2JqOiBhbnkpOiBvYmogaXMgdW5kZWZpbmVkID0+IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnO1xuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gKGZuOiBhbnkpOiBmbiBpcyBvYmplY3QgPT4gIWlzTmlsKGZuKSAmJiB0eXBlb2YgZm4gPT09ICdvYmplY3QnO1xuZXhwb3J0IGNvbnN0IGlzRnVuY3Rpb24gPSAodmFsOiBhbnkpOiB2YWwgaXMgRnVuY3Rpb24gPT4gdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBpc1N0cmluZyA9ICh2YWw6IGFueSk6IHZhbCBpcyBzdHJpbmcgPT4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG5leHBvcnQgY29uc3QgaXNOdW1iZXIgPSAodmFsOiBhbnkpOiB2YWwgaXMgbnVtYmVyID0+IHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xuZXhwb3J0IGNvbnN0IGlzQ29uc3RydWN0b3IgPSAodmFsOiBhbnkpOiBib29sZWFuID0+IHZhbCA9PT0gJ2NvbnN0cnVjdG9yJztcbmV4cG9ydCBjb25zdCBpc05pbCA9ICh2YWw6IGFueSk6IHZhbCBpcyBudWxsIHwgdW5kZWZpbmVkID0+IGlzVW5kZWZpbmVkKHZhbCkgfHwgdmFsID09PSBudWxsO1xuZXhwb3J0IGNvbnN0IGlzRW1wdHkgPSAoYXJyYXk6IGFueSk6IGJvb2xlYW4gPT4gIShhcnJheSAmJiBhcnJheS5sZW5ndGggPiAwKTtcbmV4cG9ydCBjb25zdCBpc1N5bWJvbCA9ICh2YWw6IGFueSk6IHZhbCBpcyBzeW1ib2wgPT4gdHlwZW9mIHZhbCA9PT0gJ3N5bWJvbCc7XG5leHBvcnQgY29uc3QgaXNBc3luY0Z1bmN0aW9uID0gKHZhbDogYW55KTogYm9vbGVhbiA9PiBpc0Z1bmN0aW9uKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdBc3luY0Z1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBpc0Jvb2xlYW4gPSAodmFsOiBhbnkpOiB2YWwgaXMgYm9vbGVhbiA9PiB0eXBlb2YgdmFsID09PSAnYm9vbGVhbic7XG5leHBvcnQgY29uc3QgaXNQcm9taXNlID0gPFQgPSBhbnk+KHZhbDogYW55KTogdmFsIGlzIFByb21pc2U8VD4gPT4gdmFsIGluc3RhbmNlb2YgUHJvbWlzZTtcbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25Ub2tlbiwgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU1ldGFkYXRhLCBFcnJvckZpbHRlciwgR3VhcmQsIEludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZU1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsYXNzUHJvdmlkZXIsIER5bmFtaWNNb2R1bGUsIExvZ2dlclNlcnZpY2UsIE1vZHVsZU9wdGlvbnMsIFBpcGUsIFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNTdHJpbmcsIGlzU3ltYm9sIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlTWV0YWRhdGFSZWFkZXIge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyByZWFkKG1vZHVsZTogTmV3YWJsZSB8IER5bmFtaWNNb2R1bGUgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+KSB7XG4gICAgICAgIC8vIENsYXNzIHJlZmVyZW5jZVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihtb2R1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxSZXF1aXJlZDxNb2R1bGVPcHRpb25zPj4oQ29yZU1ldGFkYXRhS2V5Lk1vZHVsZSwgbW9kdWxlKSA/PyA8UmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz4+e307XG4gICAgICAgICAgICBjb25zdCBleHBvcnRUb2tlbnMgPSB0aGlzLmdldEV4cG9ydFRva2VucyhvcHRpb25zLmV4cG9ydHMpO1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdGVkUHJvdmlkZXJzID0gdGhpcy5zZXBhcmF0ZVByb3ZpZGVycyhvcHRpb25zLnByb3ZpZGVycywgZXhwb3J0VG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIDxNb2R1bGVNZXRhZGF0YT57XG4gICAgICAgICAgICAgICAgY29udHJvbGxlcnM6IG9wdGlvbnMuY29udHJvbGxlcnMsXG4gICAgICAgICAgICAgICAgaW1wb3J0czogb3B0aW9ucy5pbXBvcnRzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0UGlwZWxpbmUobW9kdWxlKSxcbiAgICAgICAgICAgICAgICAuLi5zZXBhcmF0ZWRQcm92aWRlcnMsXG4gICAgICAgICAgICAgICAgY2xhc3NSZWY6IG1vZHVsZSxcbiAgICAgICAgICAgICAgICBnbG9iYWw6IFJlZmxlY3QuZ2V0TWV0YWRhdGE8Ym9vbGVhbj4oQ29yZU1ldGFkYXRhS2V5Lkdsb2JhbE1vZHVsZSwgbW9kdWxlKSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IG9wdGlvbnMuY29udGFpbmVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEeW5hbWljIG1vZHVsZVxuICAgICAgICBpZiAobW9kdWxlIGluc3RhbmNlb2YgUHJvbWlzZSkgbW9kdWxlID0gYXdhaXQgbW9kdWxlO1xuICAgICAgICBpZiAoISgnbW9kdWxlJyBpbiBtb2R1bGUpKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkTW9kdWxlRGVmaW5pdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IG1vZHVsZTogY2xhc3NSZWYsIGdsb2JhbCwgLi4ub3B0aW9ucyB9ID0gPFJlcXVpcmVkPER5bmFtaWNNb2R1bGU+Pm1vZHVsZTtcbiAgICAgICAgY29uc3QgZXhwb3J0VG9rZW5zID0gdGhpcy5nZXRFeHBvcnRUb2tlbnMob3B0aW9ucy5leHBvcnRzKTtcbiAgICAgICAgY29uc3Qgc2VwYXJhdGVkUHJvdmlkZXJzID0gdGhpcy5zZXBhcmF0ZVByb3ZpZGVycyhvcHRpb25zLnByb3ZpZGVycywgZXhwb3J0VG9rZW5zKTtcblxuICAgICAgICByZXR1cm4gPE1vZHVsZU1ldGFkYXRhPntcbiAgICAgICAgICAgIGNvbnRyb2xsZXJzOiBvcHRpb25zLmNvbnRyb2xsZXJzLFxuICAgICAgICAgICAgaW1wb3J0czogb3B0aW9ucy5pbXBvcnRzLFxuICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiksXG4gICAgICAgICAgICAuLi5zZXBhcmF0ZWRQcm92aWRlcnMsXG4gICAgICAgICAgICBjbGFzc1JlZixcbiAgICAgICAgICAgIGdsb2JhbDogZ2xvYmFsID8/IGZhbHNlLFxuICAgICAgICAgICAgY29udGFpbmVyOiBvcHRpb25zLmNvbnRhaW5lcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBpcGVsaW5lKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IGd1YXJkcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxHdWFyZD5bXT4oQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgY2xhc3NSZWYpID8/IFtdO1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8SW50ZXJjZXB0b3I+W10+KENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIGNsYXNzUmVmKSA/PyBbXTtcbiAgICAgICAgY29uc3QgcGlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8UGlwZT5bXT4oQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCBjbGFzc1JlZikgPz8gW107XG4gICAgICAgIGNvbnN0IGVycm9yRmlsdGVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxFcnJvckZpbHRlcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgY2xhc3NSZWYpID8/IFtdO1xuXG4gICAgICAgIHJldHVybiB7IGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgZXJyb3JGaWx0ZXJzIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRUb2tlbnMoZXhwb3J0czogUmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz5bJ2V4cG9ydHMnXSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tYXA8SW5qZWN0aW9uVG9rZW4+KChwcm92aWRlckV4cG9ydCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXJFeHBvcnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFSZWZsZWN0Lmhhc093bk1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5JbmplY3RhYmxlLCBwcm92aWRlckV4cG9ydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXhwb3J0RGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlckV4cG9ydDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcocHJvdmlkZXJFeHBvcnQpIHx8IGlzU3ltYm9sKHByb3ZpZGVyRXhwb3J0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlckV4cG9ydDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ3Byb3ZpZGUnIGluIHByb3ZpZGVyRXhwb3J0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyRXhwb3J0LnByb3ZpZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBtb2R1bGUgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFeHBvcnREZWZpbml0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXBhcmF0ZVByb3ZpZGVycyhwcm92aWRlcnM6IFJlcXVpcmVkPE1vZHVsZU9wdGlvbnM+Wydwcm92aWRlcnMnXSwgZXhwb3J0VG9rZW5zOiBJbmplY3Rpb25Ub2tlbltdKSB7XG4gICAgICAgIHJldHVybiBwcm92aWRlcnNcbiAgICAgICAgICAgIC5tYXAoKHByb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluamVjdGFibGVNZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8SW5qZWN0YWJsZU1ldGFkYXRhPihDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOaWwoaW5qZWN0YWJsZU1ldGFkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxDbGFzc1Byb3ZpZGVyPnsgcHJvdmlkZTogcHJvdmlkZXIsIHVzZUNsYXNzOiBwcm92aWRlciwgc2NvcGU6IGluamVjdGFibGVNZXRhZGF0YS5zY29wZSB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ3VzZUNsYXNzJyBpbiBwcm92aWRlciB8fCAndXNlVmFsdWUnIGluIHByb3ZpZGVyIHx8ICd1c2VGYWN0b3J5JyBpbiBwcm92aWRlciB8fCAndXNlRXhpc3RpbmcnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoYWNjLCBwcm92aWRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb3J0VG9rZW5zLmluY2x1ZGVzKHByb3ZpZGVyLnByb3ZpZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2MuZXh0ZXJuYWxQcm92aWRlcnMuc2V0KHByb3ZpZGVyLnByb3ZpZGUsIHByb3ZpZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjYy5pbnRlcm5hbFByb3ZpZGVycy5zZXQocHJvdmlkZXIucHJvdmlkZSwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGludGVybmFsUHJvdmlkZXJzOiBuZXcgTWFwPEluamVjdGlvblRva2VuLCBFeGNsdWRlPFByb3ZpZGVyLCBOZXdhYmxlPj4oKSxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcnM6IG5ldyBNYXA8SW5qZWN0aW9uVG9rZW4sIEV4Y2x1ZGU8UHJvdmlkZXIsIE5ld2FibGU+PigpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdpbnZlcnNpZnknO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ29udGFpbmVyIGV4dGVuZHMgQ29udGFpbmVyIHt9XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBDb250cm9sbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZU1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNb2R1bGVDb250YWluZXIgfSBmcm9tICcuL21vZHVsZS1jb250YWluZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udHJvbGxlcnM6IENvbnRyb2xsZXJbXSA9IFtdO1xuICAgIHB1YmxpYyBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcjtcbiAgICBwdWJsaWMgcGFyZW50OiBNb2R1bGUgfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIG1ldGFkYXRhOiBNb2R1bGVNZXRhZGF0YTtcbiAgICBwdWJsaWMgaW5zdGFuY2U6IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfTtcbiAgICBwdWJsaWMgcmVwZXRpdGl2ZUltcG9ydHM6IFNldDxNb2R1bGU+ID0gbmV3IFNldCgpO1xufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0VHlwZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBNYW5nb1JlcXVlc3RCYXNlIH0gZnJvbSAnLi9tYW5nby1yZXF1ZXN0LWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBNYW5nb1Jlc3BvbnNlQmFzZSB9IGZyb20gJy4vbWFuZ28tcmVzcG9uc2UtYmFzZSc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25Db250ZXh0QmFzZTxcbiAgICBUUmVxdWVzdCBleHRlbmRzIE1hbmdvUmVxdWVzdEJhc2UgPSBNYW5nb1JlcXVlc3RCYXNlLFxuICAgIFRSZXNwb25zZSBleHRlbmRzIE1hbmdvUmVzcG9uc2VCYXNlID0gTWFuZ29SZXNwb25zZUJhc2UsXG4+IGltcGxlbWVudHMgRXhlY3V0aW9uQ29udGV4dDxUUmVxdWVzdCwgVFJlc3BvbnNlPlxue1xuICAgIHB1YmxpYyAkdHlwZTogRXhlY3V0aW9uQ29udGV4dFR5cGU7XG4gICAgcHVibGljICRjbGFzc1JlZjogTmV3YWJsZTtcbiAgICBwdWJsaWMgJGhhbmRsZXI6IEZ1bmN0aW9uO1xuICAgIHB1YmxpYyAkcmVxdWVzdDogVFJlcXVlc3Q7XG4gICAgcHVibGljICRyZXNwb25zZT86IFRSZXNwb25zZTtcbiAgICBwdWJsaWMgJG5hbWU6IHN0cmluZztcblxuICAgIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc1JlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGNsYXNzUmVmO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFuZGxlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1ZXN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmVxdWVzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlc3BvbnNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmVzcG9uc2UhO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG5hbWU7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBNYW5nb1JlcXVlc3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1hbmdvUmVxdWVzdEJhc2U8VERhdGEgPSB1bmtub3duPiBpbXBsZW1lbnRzIE1hbmdvUmVxdWVzdCB7XG4gICAgcHVibGljICRib2R5OiBURGF0YTtcbiAgICBwdWJsaWMgJHBsYXllcj86IFBsYXllck1wO1xuXG4gICAgcHVibGljIGdldCBib2R5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kYm9keTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBsYXllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHBsYXllcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTG9nZ2VyU2VydmljZSwgUlBDRXJyb3IgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTWFuZ29SZXNwb25zZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTWFuZ29SZXNwb25zZUJhc2UgaW1wbGVtZW50cyBNYW5nb1Jlc3BvbnNlIHtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5ICRsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyAkc2VuZExpc3RlbmVyczogU2V0PChkYXRhOiB1bmtub3duKSA9PiB2b2lkPiA9IG5ldyBTZXQoKTtcbiAgICBwdWJsaWMgJGVycm9yTGlzdGVuZXJzOiBTZXQ8KGVycm9yOiBSUENFcnJvcikgPT4gdm9pZD4gPSBuZXcgU2V0KCk7XG4gICAgcHVibGljICRpc1NlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBzZW5kPFREYXRhID0gdW5rbm93bj4oZGF0YT86IFREYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLiRpc1NlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgdGhlIFJQQyByZXNwb25zZS4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDUmVzcG9uc2VBbHJlYWR5U2VudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRzZW5kTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihkYXRhKSk7XG4gICAgICAgIHRoaXMuJGlzU2VudCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGVycm9yPFREZXRhaWxzID0gdW5rbm93bj4obWVzc2FnZTogc3RyaW5nLCBkZXRhaWxzPzogVERldGFpbHMpIHtcbiAgICAgICAgaWYgKHRoaXMuJGlzU2VudCkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyB0aGUgUlBDIHJlc3BvbnNlLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENSZXNwb25zZUFscmVhZHlTZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlcnJvckxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIoeyBtZXNzYWdlLCBkZXRhaWxzIH0pKTtcbiAgICAgICAgdGhpcy4kaXNTZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgJG9uU2VuZChsaXN0ZW5lcjogKGRhdGE6IHVua25vd24pID0+IHZvaWQpIHtcbiAgICAgICAgdGhpcy4kc2VuZExpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyAkb25FcnJvcihsaXN0ZW5lcjogKGVycm9yOiBSUENFcnJvcikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLiRlcnJvckxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIH1cbn1cbiIsICJleHBvcnQgY2xhc3MgVHJlZU5vZGU8VD4ge1xuICAgIHB1YmxpYyB2YWx1ZTogVDtcbiAgICBwdWJsaWMgY2hpbGRyZW46IFRyZWVOb2RlPFQ+W107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIGFkZENoaWxkKGNoaWxkOiBUcmVlTm9kZTxUPikge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVDaGlsZChjaGlsZDogVHJlZU5vZGU8VD4pIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmVlPFQ+IHtcbiAgICBwdWJsaWMgcm9vdDogVHJlZU5vZGU8VD47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IodmFsdWU6IFQpIHtcbiAgICAgICAgdGhpcy5yb290ID0gbmV3IFRyZWVOb2RlPFQ+KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhdmVyc2UoY2FsbGJhY2s6IChub2RlOiBUcmVlTm9kZTxUPikgPT4gdm9pZCkge1xuICAgICAgICBmdW5jdGlvbiB0cmF2ZXJzZU5vZGUobm9kZTogVHJlZU5vZGU8VD4pIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUpO1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKHRyYXZlcnNlTm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0cmF2ZXJzZU5vZGUodGhpcy5yb290KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYXN5bmNUcmF2ZXJzZShjYWxsYmFjazogKG5vZGU6IFRyZWVOb2RlPFQ+KSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uIHRyYXZlcnNlTm9kZShub2RlOiBUcmVlTm9kZTxUPikge1xuICAgICAgICAgICAgYXdhaXQgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChub2RlLmNoaWxkcmVuLm1hcCh0cmF2ZXJzZU5vZGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRyYXZlcnNlTm9kZSh0aGlzLnJvb3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlTm9kZShub2RlOiBUcmVlTm9kZTxUPiwgZGVwdGg6IG51bWJlcikge1xuICAgICAgICAgICAgbGluZXMucHVzaChgJHsnLScucmVwZWF0KGRlcHRoICogMil9JHtub2RlLnZhbHVlfWApO1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gdHJhdmVyc2VOb2RlKGNoaWxkLCBkZXB0aCArIDEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYXZlcnNlTm9kZSh0aGlzLnJvb3QsIDApO1xuICAgICAgICByZXN1bHQgPSBsaW5lcy5qb2luKCdcXG4nKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IENvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5jb25zdCBkZWZhdWx0Q29udHJvbGxlck9wdGlvbnM6IENvbnRyb2xsZXJPcHRpb25zID0geyBwcmVmaXg6ICcnIH07XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zKG9wdGlvbnM/OiBDb250cm9sbGVyT3B0aW9ucykge1xuICAgIGlmIChpc05pbChvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IGRlZmF1bHRDb250cm9sbGVyT3B0aW9ucyB9O1xuICAgIH1cblxuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZTogZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zLCBlcnJvcjogJ0NvbnRyb2xsZXIgb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG5cbiAgICBpZiAoISgncHJlZml4JyBpbiBvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IHsgLi4uZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zLCAuLi5vcHRpb25zIH0gfTtcbiAgICB9XG4gICAgaWYgKCdwcmVmaXgnIGluIG9wdGlvbnMgJiYgIWlzU3RyaW5nKG9wdGlvbnMucHJlZml4KSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IGRlZmF1bHRDb250cm9sbGVyT3B0aW9ucywgZXJyb3I6ICdDb250cm9sbGVyIHByZWZpeCBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogeyAuLi5kZWZhdWx0Q29udHJvbGxlck9wdGlvbnMsIC4uLm9wdGlvbnMgfSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUVycm9yRmlsdGVyPEVGIGV4dGVuZHMgRXJyb3JGaWx0ZXIgPSBFcnJvckZpbHRlcj4odmFsdWU6IEVGIHwgTmV3YWJsZTxFRj4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0Vycm9yIGZpbHRlciBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUucHJvdG90eXBlLmNhdGNoKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgaGF2ZSBhIGNhdGNoIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKCg8RXJyb3JGaWx0ZXI+dmFsdWUpLmNhdGNoKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUsIGVycm9yOiAnRXJyb3IgZmlsdGVyIG11c3QgaGF2ZSBhIGNhdGNoIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGlwZSh2YWx1ZTogUGlwZSB8IE5ld2FibGU8UGlwZT4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUGlwZSBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpICYmICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQaXBlIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUudHJhbnNmb3JtKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1BpcGUgbXVzdCBoYXZlIGEgdHJhbnNmb3JtIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKCg8UGlwZT52YWx1ZSkudHJhbnNmb3JtKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1BpcGUgbXVzdCBoYXZlIGEgdHJhbnNmb3JtIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNOdW1iZXIsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4vcGlwZS52YWxpZGF0ZSc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV2ZW50UGFyYW1ldGVyKHZhbHVlOiBNZXRob2RQYXJhbWV0ZXIpIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpIHx8ICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgbXVzdCBiZSBhbiBvYmplY3QnIH07XG4gICAgfVxuICAgIGlmICgna2V5JyBpbiB2YWx1ZSAmJiAhaXNOaWwodmFsdWUua2V5KSAmJiAhaXNTdHJpbmcodmFsdWUua2V5KSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBrZXkgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG4gICAgaWYgKCEoJ2luZGV4JyBpbiB2YWx1ZSkgfHwgIWlzTnVtYmVyKHZhbHVlLmluZGV4KSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBpbmRleCBpcyByZXF1aXJlZCcgfTtcbiAgICB9XG4gICAgLy8gQm9keVBhcmFtZXRlciB8IFBsYXllclBhcmFtZXRlclxuICAgIGlmIChcbiAgICAgICAgKHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5Cb2R5IHx8IHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5QbGF5ZXIpICYmXG4gICAgICAgICdkYXRhJyBpbiB2YWx1ZSAmJlxuICAgICAgICAhaXNOaWwodmFsdWUuZGF0YSkgJiZcbiAgICAgICAgIWlzU3RyaW5nKHZhbHVlLmRhdGEpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGRhdGEgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG4gICAgLy8gQ3VzdG9tUGFyYW1ldGVyXG4gICAgaWYgKHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5DdXN0b20gJiYgISgnZmFjdG9yeScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGZhY3RvcnkgaXMgcmVxdWlyZWQnIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuQ3VzdG9tICYmICdmYWN0b3J5JyBpbiB2YWx1ZSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5mYWN0b3J5KSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbicgfTtcbiAgICB9XG4gICAgLy8gIFBhcmFtUGFyYW1ldGVyXG4gICAgaWYgKCh2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuUGFyYW0gfHwgdmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLkluZGV4KSAmJiAhKCdkYXRhJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZGF0YSBpcyByZXF1aXJlZCcgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5QYXJhbSAmJiAnZGF0YScgaW4gdmFsdWUgJiYgIWlzU3RyaW5nKHZhbHVlLmRhdGEpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGRhdGEgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG4gICAgLy8gSW5kZXhQYXJhbWV0ZXJcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLkluZGV4ICYmICdkYXRhJyBpbiB2YWx1ZSAmJiAhaXNOdW1iZXIodmFsdWUuZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZGF0YSBtdXN0IGJlIGEgbnVtYmVyJyB9O1xuICAgIH1cbiAgICAvLyBCb2R5UGFyYW1ldGVyIHwgQ3VzdG9tUGFyYW1ldGVyIHwgUGFyYW1QYXJhbWV0ZXIgfCBQbGF5ZXJQYXJhbWV0ZXIgfCBJbmRleFBhcmFtZXRlcjtcbiAgICBpZiAoXG4gICAgICAgIHZhbHVlLnR5cGUgIT09IE1ldGhvZFBhcmFtVHlwZS5SZXF1ZXN0ICYmXG4gICAgICAgIHZhbHVlLnR5cGUgIT09IE1ldGhvZFBhcmFtVHlwZS5SZXNwb25zZSAmJlxuICAgICAgICAncGlwZXMnIGluIHZhbHVlICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlLnBpcGVzKVxuICAgICkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBwaXBlcyBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlcXVlc3QgJiYgdmFsdWUudHlwZSAhPT0gTWV0aG9kUGFyYW1UeXBlLlJlc3BvbnNlICYmICEoJ3BpcGVzJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUucGlwZXMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnR5cGUgIT09IE1ldGhvZFBhcmFtVHlwZS5SZXF1ZXN0ICYmIHZhbHVlLnR5cGUgIT09IE1ldGhvZFBhcmFtVHlwZS5SZXNwb25zZSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgdmFsdWUucGlwZXMhKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEV2ZW50TWV0YWRhdGEgfSBmcm9tICcuLi8uLi9hcHAnO1xuaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IHZhbGlkYXRlRXZlbnRQYXJhbWV0ZXIgfSBmcm9tICcuL2V2ZW50LXBhcmFtZXRlci52YWxpZGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV2ZW50TWV0YWRhdGEodmFsdWU6IEV2ZW50TWV0YWRhdGEpIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpIHx8ICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG5cbiAgICAvLyBUeXBlXG4gICAgaWYgKCEoJ3R5cGUnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIHR5cGUgaXMgcmVxdWlyZWQnIH07XG4gICAgfVxuICAgIGlmICghaXNTdHJpbmcodmFsdWUudHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSB0eXBlIG11c3QgYmUgYSBzdHJpbmcnIH07XG4gICAgfVxuICAgIC8vIE5hbWVcbiAgICBpZiAoISgnbmFtZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgbmFtZSBpcyByZXF1aXJlZCcgfTtcbiAgICB9XG4gICAgaWYgKCFpc1N0cmluZyh2YWx1ZS5uYW1lKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIG5hbWUgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG4gICAgLy8gTWV0aG9kXG4gICAgaWYgKCEoJ21ldGhvZCcgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgbWV0aG9kIGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICBpZiAoIWlzU3RyaW5nKHZhbHVlLm1ldGhvZCkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBtZXRob2QgbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG4gICAgLy8gUGFyYW1zXG4gICAgaWYgKCEoJ3BhcmFtcycgaW4gdmFsdWUpKSB7XG4gICAgICAgICg8RXZlbnRNZXRhZGF0YT52YWx1ZSkucGFyYW1zID0gW107XG4gICAgfVxuICAgIGlmICgncGFyYW1zJyBpbiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS5wYXJhbXMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgcGFyYW1zIG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfVxuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgdmFsdWUucGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZUV2ZW50UGFyYW1ldGVyKHBhcmFtKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBHdWFyZCB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlR3VhcmQ8RyBleHRlbmRzIEd1YXJkID0gR3VhcmQ+KHZhbHVlOiBHIHwgTmV3YWJsZTxHPikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdHdWFyZCBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpICYmICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdHdWFyZCBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUucHJvdG90eXBlLmNhbkFjdGl2YXRlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgaGF2ZSBhIGNhbkFjdGl2YXRlIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKCg8R3VhcmQ+dmFsdWUpLmNhbkFjdGl2YXRlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0d1YXJkIG11c3QgaGF2ZSBhIGNhbkFjdGl2YXRlIG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEludGVyY2VwdG9yIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnRlcmNlcHRvcjxJIGV4dGVuZHMgSW50ZXJjZXB0b3IgPSBJbnRlcmNlcHRvcj4odmFsdWU6IEkgfCBOZXdhYmxlPEk+KSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0ludGVyY2VwdG9yIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0ludGVyY2VwdG9yIG11c3QgYmUgYSBjbGFzcyBvciBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZS5wcm90b3R5cGUuaW50ZXJjZXB0KSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0ludGVyY2VwdG9yIG11c3QgaGF2ZSBhbiBpbnRlcmNlcHQgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24oKDxJbnRlcmNlcHRvcj52YWx1ZSkuaW50ZXJjZXB0KSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0ludGVyY2VwdG9yIG11c3QgaGF2ZSBhbiBpbnRlcmNlcHQgbWV0aG9kJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNTdHJpbmcsIGlzU3ltYm9sIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbmplY3Rpb25Ub2tlbih2YWx1ZTogSW5qZWN0aW9uVG9rZW4pIHtcbiAgICBjb25zdCB2YWxpZCA9IGlzU3RyaW5nKHZhbHVlKSB8fCBpc1N5bWJvbCh2YWx1ZSkgfHwgaXNGdW5jdGlvbih2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpO1xuICAgIHJldHVybiB2YWxpZCA/IHsgdmFsaWQsIHZhbHVlIH0gOiB7IHZhbGlkLCB2YWx1ZSwgZXJyb3I6ICdJbmplY3Rpb24gdG9rZW4gbXVzdCBiZSBhIHN0cmluZywgc3ltYm9sLCBjbGFzcywgb3Igb2JqZWN0JyB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUge1xuICAgIENsYXNzUHJvdmlkZXIsXG4gICAgRXhpc3RpbmdQcm92aWRlcixcbiAgICBGYWN0b3J5UHJvdmlkZXIsXG4gICAgT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSxcbiAgICBQcm92aWRlcixcbiAgICBWYWx1ZVByb3ZpZGVyLFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi9pbmplY3Rpb24tdG9rZW4udmFsaWRhdGUnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZVNjb3BlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcm92aWRlcih2YWx1ZTogUHJvdmlkZXIpIHtcbiAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGJlIGFuIG9iamVjdCBvciBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIGlmICghKCdwcm92aWRlJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgcHJvdmlkZSBwcm9wZXJ0eScgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZUluamVjdGlvblRva2VuKHZhbHVlLnByb3ZpZGUpO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvciB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCd1c2VDbGFzcycgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUNsYXNzUHJvdmlkZXIodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VWYWx1ZScgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZVZhbHVlUHJvdmlkZXIodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKCd1c2VGYWN0b3J5JyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlRmFjdG9yeVByb3ZpZGVyKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlRXhpc3RpbmcnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVFeGlzdGluZ1Byb3ZpZGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGhhdmUgYSB1c2VDbGFzcywgdXNlVmFsdWUsIHVzZUZhY3RvcnksIG9yIHVzZUV4aXN0aW5nIHByb3BlcnR5JyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDbGFzc1Byb3ZpZGVyKHZhbHVlOiBDbGFzc1Byb3ZpZGVyKSB7XG4gICAgaWYgKCEoJ3VzZUNsYXNzJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGhhdmUgYSB1c2VDbGFzcyBwcm9wZXJ0eScgfTtcbiAgICB9XG5cbiAgICBpZiAoISgnc2NvcGUnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5zY29wZSA9IEluamVjdGFibGVTY29wZS5TaW5nbGV0b247XG4gICAgfVxuXG4gICAgaWYgKCdzY29wZScgaW4gdmFsdWUgJiYgIU9iamVjdC52YWx1ZXM8YCR7SW5qZWN0YWJsZVNjb3BlfWA+KEluamVjdGFibGVTY29wZSkuaW5jbHVkZXModmFsdWUuc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgc2NvcGUgbXVzdCBiZSBhIHZhbGlkIGluamVjdGFibGUgc2NvcGUnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVZhbHVlUHJvdmlkZXIodmFsdWU6IFZhbHVlUHJvdmlkZXIpIHtcbiAgICBpZiAoISgndXNlVmFsdWUnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZVZhbHVlIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9wdGlvbmFsRmFjdG9yeURlcGVuZGVuY3kodmFsdWU6IE9wdGlvbmFsRmFjdG9yeURlcGVuZGVuY3kpIHtcbiAgICBpZiAoISgnb3B0aW9uYWwnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhbiBvcHRpb25hbCBwcm9wZXJ0eScgfTtcbiAgICB9XG5cbiAgICBpZiAoISgndG9rZW4nIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHRva2VuIHByb3BlcnR5JyB9O1xuICAgIH1cblxuICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZUluamVjdGlvblRva2VuKHZhbHVlLnRva2VuKTtcbiAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUZhY3RvcnlQcm92aWRlcih2YWx1ZTogRmFjdG9yeVByb3ZpZGVyKSB7XG4gICAgaWYgKCEoJ3VzZUZhY3RvcnknIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHVzZUZhY3RvcnkgcHJvcGVydHknIH07XG4gICAgfVxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZS51c2VGYWN0b3J5KSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIHVzZUZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uJyB9O1xuICAgIH1cblxuICAgIGlmICghKCdpbmplY3QnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5pbmplY3QgPSBbXTtcbiAgICB9XG4gICAgaWYgKCdpbmplY3QnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLmluamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBpbmplY3QgbXVzdCBiZSBhbiBhcnJheScgfTtcbiAgICB9XG4gICAgaWYgKCdpbmplY3QnIGluIHZhbHVlKSB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUuaW5qZWN0KSB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QodG9rZW4pICYmICdvcHRpb25hbCcgaW4gdG9rZW4gJiYgJ3Rva2VuJyBpbiB0b2tlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZU9wdGlvbmFsRmFjdG9yeURlcGVuZGVuY3kodG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4odG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgnc2NvcGUnIGluIHZhbHVlICYmICFPYmplY3QudmFsdWVzPGAke0luamVjdGFibGVTY29wZX1gPihJbmplY3RhYmxlU2NvcGUpLmluY2x1ZGVzKHZhbHVlLnNjb3BlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIHNjb3BlIG11c3QgYmUgYSB2YWxpZCBpbmplY3RhYmxlIHNjb3BlJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFeGlzdGluZ1Byb3ZpZGVyKHZhbHVlOiBFeGlzdGluZ1Byb3ZpZGVyKSB7XG4gICAgaWYgKCEoJ3VzZUV4aXN0aW5nJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGhhdmUgYSB1c2VFeGlzdGluZyBwcm9wZXJ0eScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IER5bmFtaWNNb2R1bGUsIE1vZHVsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlUHJvdmlkZXIgfSBmcm9tICcuL3Byb3ZpZGVyLnZhbGlkYXRlJztcbmltcG9ydCB7IGlzQm9vbGVhbiwgaXNGdW5jdGlvbiwgaXNOaWwsIGlzT2JqZWN0LCBpc1Byb21pc2UgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGlvblRva2VuLCBOdWxsYWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi9pbmplY3Rpb24tdG9rZW4udmFsaWRhdGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNb2R1bGVPcHRpb25zKFxuICAgIHZhbHVlPzogTW9kdWxlT3B0aW9ucyB8IER5bmFtaWNNb2R1bGUsXG4gICAgaXNEeW5hbWljID0gZmFsc2UsXG4pOiB7IHZhbGlkOiBib29sZWFuOyB2YWx1ZTogTW9kdWxlT3B0aW9ucyB8IER5bmFtaWNNb2R1bGU7IGVycm9yPzogTnVsbGFibGU8c3RyaW5nPiB9IHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgY29udHJvbGxlcnM6IFtdLFxuICAgICAgICAgICAgaW1wb3J0czogW10sXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtdLFxuICAgICAgICAgICAgZXhwb3J0czogW10sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc05pbCh2YWx1ZSkgJiYgIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ01vZHVsZSBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICAgIH1cblxuICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgICAgaWYgKCEoJ21vZHVsZScgaW4gdmFsdWUpIHx8ICFpc0Z1bmN0aW9uKHZhbHVlLm1vZHVsZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRHluYW1pYyBtb2R1bGUgbXVzdCBoYXZlIGEgbW9kdWxlIGZ1bmN0aW9uJyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoJ2dsb2JhbCcgaW4gdmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZS5nbG9iYWwgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICghKCdnbG9iYWwnIGluIHZhbHVlKSAmJiAhaXNCb29sZWFuKHZhbHVlLmdsb2JhbCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRHluYW1pYyBtb2R1bGUgbXVzdCBoYXZlIGEgZ2xvYmFsIHByb3BlcnR5JyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCdpbXBvcnRzJyBpbiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS5pbXBvcnRzKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0ltcG9ydHMgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheScgfTtcbiAgICB9IGVsc2UgaWYgKCEoJ2ltcG9ydHMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5pbXBvcnRzID0gW107XG4gICAgfVxuXG4gICAgaWYgKCdjb250cm9sbGVycycgaW4gdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUuY29udHJvbGxlcnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnQ29udHJvbGxlcnMgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheScgfTtcbiAgICB9IGVsc2UgaWYgKCEoJ2NvbnRyb2xsZXJzJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuY29udHJvbGxlcnMgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAoJ3Byb3ZpZGVycycgaW4gdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUucHJvdmlkZXJzKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVycyBwcm9wZXJ0eSBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH0gZWxzZSBpZiAoISgncHJvdmlkZXJzJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUucHJvdmlkZXJzID0gW107XG4gICAgfVxuXG4gICAgaWYgKCdleHBvcnRzJyBpbiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS5leHBvcnRzKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V4cG9ydHMgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheScgfTtcbiAgICB9IGVsc2UgaWYgKCEoJ2V4cG9ydHMnIGluIHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5leHBvcnRzID0gW107XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbXBvcnRlZCBvZiB2YWx1ZS5pbXBvcnRzKSB7XG4gICAgICAgIGlmICghaXNGdW5jdGlvbihpbXBvcnRlZCkgJiYgIWlzT2JqZWN0KGltcG9ydGVkKSAmJiAhaXNQcm9taXNlKGltcG9ydGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdJbXBvcnQgbXVzdCBiZSBhIGZ1bmN0aW9uLCBvYmplY3QsIG9yIHByb21pc2UnIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYmplY3QoaW1wb3J0ZWQpICYmICFpc1Byb21pc2UoaW1wb3J0ZWQpKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVNb2R1bGVPcHRpb25zKDxEeW5hbWljTW9kdWxlPmltcG9ydGVkLCB0cnVlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgdmFsdWUuY29udHJvbGxlcnMpIHtcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uKGNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0NvbnRyb2xsZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwcm92aWRlciBvZiB2YWx1ZS5wcm92aWRlcnMpIHtcbiAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlUHJvdmlkZXIocHJvdmlkZXIpO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvciB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBleHBvcnRJdGVtIG9mIHZhbHVlLmV4cG9ydHMpIHtcbiAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4oPEluamVjdGlvblRva2VuPmV4cG9ydEl0ZW0pO1xuICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZCwgdmFsdWUsIGVycm9yIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc09iamVjdChleHBvcnRJdGVtKSAmJlxuICAgICAgICAgICAgKCd1c2VDbGFzcycgaW4gZXhwb3J0SXRlbSB8fCAndXNlRmFjdG9yeScgaW4gZXhwb3J0SXRlbSB8fCAndXNlVmFsdWUnIGluIGV4cG9ydEl0ZW0gfHwgJ3VzZUV4aXN0aW5nJyBpbiBleHBvcnRJdGVtKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQgfSA9IHZhbGlkYXRlUHJvdmlkZXIoZXhwb3J0SXRlbSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFeHBvcnQgbXVzdCBiZSBhIHByb3ZpZGVyIG9iamVjdCcgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzTmlsLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlU2NvcGUgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGFibGVPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmNvbnN0IGRlZmF1bHRJbmplY3RhYmxlT3B0aW9uczogSW5qZWN0YWJsZU9wdGlvbnMgPSB7IHNjb3BlOiBJbmplY3RhYmxlU2NvcGUuU2luZ2xldG9uIH07XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSh2YWx1ZT86IEluamVjdGFibGVPcHRpb25zKSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IGRlZmF1bHRJbmplY3RhYmxlT3B0aW9ucyB9O1xuICAgIH1cblxuICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWU6IGRlZmF1bHRJbmplY3RhYmxlT3B0aW9ucywgZXJyb3I6ICdJbmplY3RhYmxlIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnIH07XG4gICAgfVxuXG4gICAgaWYgKCEoJ3Njb3BlJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiB7IC4uLmRlZmF1bHRJbmplY3RhYmxlT3B0aW9ucywgLi4udmFsdWUgfSB9O1xuICAgIH1cbiAgICBpZiAoJ3Njb3BlJyBpbiB2YWx1ZSAmJiAhaXNTdHJpbmcodmFsdWUuc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWU6IGRlZmF1bHRJbmplY3RhYmxlT3B0aW9ucywgZXJyb3I6ICdJbmplY3RhYmxlIHNjb3BlIG11c3QgYmUgYSBzdHJpbmcnIH07XG4gICAgfVxuXG4gICAgaWYgKCdzY29wZScgaW4gdmFsdWUgJiYgIU9iamVjdC52YWx1ZXM8YCR7SW5qZWN0YWJsZVNjb3BlfWA+KEluamVjdGFibGVTY29wZSkuaW5jbHVkZXModmFsdWUuc2NvcGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWU6IGRlZmF1bHRJbmplY3RhYmxlT3B0aW9ucywgZXJyb3I6ICdJbnZhbGlkIGluamVjdGFibGUgc2NvcGUnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHsgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBSUENSZXN1bHQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IElOVEVSTkFMX0FQUF9DT05UQUlORVIgPSAnSU5URVJOQUxfQVBQX0NPTlRBSU5FUic7XG5leHBvcnQgY29uc3QgR0xPQkFMX0FQUF9DT05UQUlORVIgPSAnR0xPQkFMX0FQUF9DT05UQUlORVInO1xuZXhwb3J0IGNvbnN0IEFQUF9FTlZJUk9NRU5UID0gJ0FQUF9FTlZJUk9NRU5UJztcblxuZXhwb3J0IGNvbnN0IEdMT0JBTF9HVUFSRFMgPSAnR0xPQkFMX0dVQVJEUyc7XG5leHBvcnQgY29uc3QgR0xPQkFMX0lOVEVSQ0VQVE9SUyA9ICdHTE9CQUxfSU5URVJDRVBUT1JTJztcbmV4cG9ydCBjb25zdCBHTE9CQUxfUElQRVMgPSAnR0xPQkFMX1BJUEVTJztcbmV4cG9ydCBjb25zdCBHTE9CQUxfRVJST1JfRklMVEVSUyA9ICdHTE9CQUxfRVJST1JfRklMVEVSUyc7XG5cbmV4cG9ydCBjb25zdCBQTFVHSU5TID0gJ1BMVUdJTlMnO1xuXG5leHBvcnQgY29uc3QgRU5BQkxFX1NIVVRET1dOX0hPT0tTID0gJ0VOQUJMRV9TSFVURE9XTl9IT09LUyc7XG5leHBvcnQgY29uc3QgQ09OVEFJTkVSX09QVElPTlMgPSAnQ09OVEFJTkVSX09QVElPTlMnO1xuZXhwb3J0IGNvbnN0IExPR19FUlJPUl9TVEFDS1RSQUNFID0gJ0xPR19FUlJPUl9TVEFDS1RSQUNFJztcblxuZXhwb3J0IGNvbnN0IE1BTkdPX0xPR19QUkVGSVggPSAn8J+lrSc7XG5cbmV4cG9ydCBjb25zdCBNQU5HT19SRVFVRVNUX0ZBQ1RPUlkgPSAnTUFOR09fUkVRVUVTVF9GQUNUT1JZJztcbmV4cG9ydCBjb25zdCBNQU5HT19SRVNQT05TRV9GQUNUT1JZID0gJ01BTkdPX1JFU1BPTlNFX0ZBQ1RPUlknO1xuZXhwb3J0IGNvbnN0IEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkgPSAnRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSc7XG5cbmV4cG9ydCBjb25zdCBNVUxUSVBMQVlFUl9TRVJWSUNFID0gJ01VTFRJUExBWUVSX1NFUlZJQ0UnO1xuXG5leHBvcnQgY29uc3QgUlBDX1JFU1VMVF9USU1FT1VUOiBSUENSZXN1bHQgPSB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogJ1JQQyBjYWxsIHRpbWVkIG91dC4nIH0sXG4gICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuVGltZW91dCxcbn07XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EOiBSUENSZXN1bHQgPSB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogJ1JQQyBoYW5kbGVyIG5vdCBmb3VuZC4nIH0sXG4gICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuSGFuZGxlck5vdEZvdW5kLFxufTtcblxuZXhwb3J0IGNvbnN0IFJQQ19SRVNVTFRfVU5LTk9XTjogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdVbmtub3duIGVycm9yLicgfSxcbiAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5Vbmtub3duLFxufTtcblxuZXhwb3J0IGNvbnN0IFJQQ19SRVNVTFRfUExBWUVSX0RJU0NPTk5FQ1RFRDogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdQbGF5ZXIgZGlzY29ubmVjdGVkLicgfSxcbiAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5QbGF5ZXJEaXNjb25uZWN0ZWQsXG59O1xuXG5leHBvcnQgY29uc3QgUlBDX1JFU1VMVF9QTEFZRVJfTk9UX0ZPVU5EOiBSUENSZXN1bHQgPSB7XG4gICAgc3VjY2VzczogZmFsc2UsXG4gICAgZXJyb3I6IHsgbWVzc2FnZTogJ1BsYXllciBub3QgZm91bmQuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlBsYXllck5vdEZvdW5kLFxufTtcbiIsICJpbXBvcnQgeyBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBjbGFzcyBNYW5nb0Vycm9yPFREZXRhaWxzID0gdW5rbm93bj4gZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIHN0YXR1czogbnVtYmVyID0gUlBDUmVzdWx0U3RhdHVzLlVua25vd247XG4gICAgcHVibGljIGRldGFpbHM6IFREZXRhaWxzIHwgdW5kZWZpbmVkO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzPzogbnVtYmVyLCBkZXRhaWxzPzogVERldGFpbHMpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzID8/IFJQQ1Jlc3VsdFN0YXR1cy5Vbmtub3duO1xuICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBNYW5nb0Vycm9yIH0gZnJvbSAnLi9tYW5nby5lcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBHdWFyZENhbmNlbEVycm9yIGV4dGVuZHMgTWFuZ29FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignUHJvY2VzcyBjYW5jZWxsZWQgYnkgdGhlIGd1YXJkLicsIFJQQ1Jlc3VsdFN0YXR1cy5DYW5jZWxsZWRCeUd1YXJkKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgTWFuZ29FcnJvciB9IGZyb20gJy4vbWFuZ28uZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgR3VhcmRJbnZhbGlkUmV0dXJuRXJyb3IgZXh0ZW5kcyBNYW5nb0Vycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdHdWFyZCByZXR1cm5lZCBhbiBpbnZhbGlkIHZhbHVlLiBFeHBlY3RlZCBib29sZWFuLicsIFJQQ1Jlc3VsdFN0YXR1cy5JbnZhbGlkR3VhcmRSZXR1cm4pO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBNYW5nb0Vycm9yIH0gZnJvbSAnLi9tYW5nby5lcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBUb29NYW55UmVxdWVzdHMgZXh0ZW5kcyBNYW5nb0Vycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZSA9ICdUb28gbWFueSByZXF1ZXN0cy4nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsIFJQQ1Jlc3VsdFN0YXR1cy5Ub29NYW55UmVxdWVzdHMpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBNYW5nb0Vycm9yIH0gZnJvbSAnLi9tYW5nby5lcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duRXJyb3IgZXh0ZW5kcyBNYW5nb0Vycm9yIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdVbmtub3duIGVycm9yLicsIFJQQ1Jlc3VsdFN0YXR1cy5Vbmtub3duKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgSW50ZXJuYWxFdmVudFNlcnZpY2UsIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQsIEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlksIE1BTkdPX1JFUVVFU1RfRkFDVE9SWSwgTVVMVElQTEFZRVJfU0VSVklDRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBQaXBlbGluZUhhbmRsZXIgfSBmcm9tICcuL3BpcGVsaW5lLmhhbmRsZXInO1xuaW1wb3J0IHR5cGUgeyBFdmVudE1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFVkVOVF9TRVJWSUNFLCBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgQXBwRW52aXJvbWVudCwgRXhlY3V0aW9uQ29udGV4dFR5cGUgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBFeGVjdXRpb25Db250ZXh0QmFzZSwgTWFuZ29SZXNwb25zZUJhc2UsIHR5cGUgTWFuZ29SZXF1ZXN0QmFzZSB9IGZyb20gJy4uL3BpcGVsaW5lJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQ2FsbEhhbmRsZXIsIExvZ2dlclNlcnZpY2UsIFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzQXN5bmNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvbnRyb2xsZXJGbG93SGFuZGxlciB9IGZyb20gJy4vY29udHJvbGxlci1mbG93LmhhbmRsZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlckV2ZW50SGFuZGxlciB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJpdmF0ZSByZWFkb25seSBhcHBFbnY6IEFwcEVudmlyb21lbnQ7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoRVZFTlRfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2U6IEludGVybmFsRXZlbnRTZXJ2aWNlO1xuICAgIEBpbmplY3QoQ29udHJvbGxlckZsb3dIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xsZXJGbG93SGFuZGxlcjogQ29udHJvbGxlckZsb3dIYW5kbGVyO1xuICAgIEBpbmplY3QoUGlwZWxpbmVIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lSGFuZGxlcjogUGlwZWxpbmVIYW5kbGVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAaW5qZWN0KE1BTkdPX1JFUVVFU1RfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVNYW5nb1JlcXVlc3Q6IChib2R5OiB1bmtub3duLCBwbGF5ZXI/OiBQbGF5ZXJNcCkgPT4gTWFuZ29SZXF1ZXN0QmFzZTtcbiAgICBAaW5qZWN0KEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlRXhlY3V0aW9uQ29udGV4dDogKFxuICAgICAgICB0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZSxcbiAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUsXG4gICAgICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICAgICAgICByZXF1ZXN0OiBNYW5nb1JlcXVlc3RCYXNlLFxuICAgICAgICByZXNwb25zZT86IE1hbmdvUmVzcG9uc2VCYXNlLFxuICAgICAgICBuYW1lPzogc3RyaW5nLFxuICAgICkgPT4gRXhlY3V0aW9uQ29udGV4dEJhc2U7XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJFdmVudChcbiAgICAgICAgZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSxcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgbWFwcGVkRXJyb3JGaWx0ZXJzOiBbYW55IHwgJ01BTkdPX0FOWV9FUlJPUicsIE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXJdW10sXG4gICAgICAgIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICAgICAgIGV2ZW50OiBFdmVudE1ldGFkYXRhLFxuICAgICkge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ29uJyB8fCBldmVudC50eXBlID09PSAnb25jZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC5uYW1lLCBhc3luYyAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdvbkludGVybmFsJyB8fCBldmVudC50eXBlID09PSAnb25jZUludGVybmFsJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlW2AkJHtldmVudC50eXBlfWBdKGV2ZW50Lm5hbWUsIGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBwbGF5ZXIsIGJvZHkgfSA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLnBhcnNlSW50ZXJuYWxBcmdzPFBsYXllck1wPiguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUV2ZW50KGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBldmVudCwgYm9keSwgcGxheWVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdvblBsYXllcicgfHwgZXZlbnQudHlwZSA9PT0gJ29uY2VQbGF5ZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2VbZXZlbnQudHlwZV0oZXZlbnQubmFtZSwgYXN5bmMgKHBsYXllciwgYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gJ29uU2VydmVyJyB8fCBldmVudC50eXBlID09PSAnb25jZVNlcnZlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC5uYW1lLCBhc3luYyAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdvbldlYlZpZXcnIHx8IGV2ZW50LnR5cGUgPT09ICdvbmNlV2ViVmlldycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtldmVudC50eXBlXShldmVudC53ZWJWaWV3SWQhLCBldmVudC5uYW1lLCBhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciA/IGFyZ3NbMV0gOiBhcmdzWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYXllciA9IHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciA/IDxQbGF5ZXJNcD5hcmdzWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50LCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWdpc3RlciBldmVudC4nKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXZlbnRUeXBlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUV2ZW50KFxuICAgICAgICBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBtYXBwZWRFcnJvckZpbHRlcnM6IFthbnkgfCAnTUFOR09fQU5ZX0VSUk9SJywgTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcl1bXSxcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgZXZlbnQ6IEV2ZW50TWV0YWRhdGEsXG4gICAgICAgIGJvZHk6IHVua25vd24sXG4gICAgICAgIHBsYXllcj86IFBsYXllck1wLFxuICAgICkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5jcmVhdGVNYW5nb1JlcXVlc3QoYm9keSwgcGxheWVyKTtcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IHRoaXMuY3JlYXRlRXhlY3V0aW9uQ29udGV4dChcbiAgICAgICAgICAgIEV4ZWN1dGlvbkNvbnRleHRUeXBlLkV2ZW50LFxuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZixcbiAgICAgICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYucHJvdG90eXBlW2V2ZW50Lm1ldGhvZF0sXG4gICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZXZlbnQubmFtZSxcbiAgICAgICAgKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hHdWFyZHMoZXhlY3V0aW9uQ29udGV4dCwgZ3VhcmRzLCBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcik7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gYXdhaXQgdGhpcy5jb250cm9sbGVyRmxvd0hhbmRsZXIuY3JlYXRlQXJncyhjb250cm9sbGVyLCBleGVjdXRpb25Db250ZXh0LCBldmVudCwgcGlwZXMsIHBsYXllcik7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0aG9kID0gY29udHJvbGxlci5pbnN0YW5jZVtldmVudC5tZXRob2RdITtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IGlzQXN5bmNGdW5jdGlvbihjb250cm9sbGVyTWV0aG9kKVxuICAgICAgICAgICAgICAgID8gKCk6IHVua25vd24gPT4gY29udHJvbGxlci5pbnN0YW5jZVtldmVudC5tZXRob2RdIS5hcHBseShjb250cm9sbGVyLmluc3RhbmNlLCBhcmdzKVxuICAgICAgICAgICAgICAgIDogKCk6IFByb21pc2U8dW5rbm93bj4gPT4gY29udHJvbGxlci5pbnN0YW5jZVtldmVudC5tZXRob2RdIS5hcHBseShjb250cm9sbGVyLmluc3RhbmNlLCBhcmdzKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxIYW5kbGVyOiBDYWxsSGFuZGxlciA9IHtcbiAgICAgICAgICAgICAgICBoYW5kbGUsXG4gICAgICAgICAgICAgICAgcmV0dXJuOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJldHVybiBhIHZhbHVlIGZyb20gYW4gZXZlbnQuJyk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFJldHVybkluRXZlbnQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Rocm91Z2hJbnRlcmNlcHRvcnMoZXhlY3V0aW9uQ29udGV4dCwgaW50ZXJjZXB0b3JzLCBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lciwgY2FsbEhhbmRsZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjYWxsSGFuZGxlci5oYW5kbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yR3JvdXAgPSBtYXBwZWRFcnJvckZpbHRlcnMuZmluZChcbiAgICAgICAgICAgICAgICAoW2Vycm9yVHlwZV0pID0+XG4gICAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGVycm9yVHlwZSkgJiYgZXJyb3IgaW5zdGFuY2VvZiBlcnJvclR5cGUpIHx8IGVycm9yVHlwZSA9PT0gJ01BTkdPX0FOWV9FUlJPUicgfHwgZXJyb3IgPT09IGVycm9yVHlwZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaXNOaWwoZXJyb3JHcm91cCkpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihlcnJvckdyb3VwWzFdKVxuICAgICAgICAgICAgICAgID8gY29udHJvbGxlci5vd25lci5jb250YWluZXIuZ2V0KGVycm9yR3JvdXBbMV0pXG4gICAgICAgICAgICAgICAgOiBpc09iamVjdChlcnJvckdyb3VwWzFdKSAmJiBpc0Z1bmN0aW9uKGVycm9yR3JvdXBbMV1bJ2NhdGNoJ10pXG4gICAgICAgICAgICAgICAgICA/IGVycm9yR3JvdXBbMV1cbiAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnbyB0aHJvdWdoIGVycm9yIGZpbHRlcnMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShpbnN0YW5jZS5jYXRjaC5jYWxsKGluc3RhbmNlLCBlcnJvciwgZXhlY3V0aW9uQ29udGV4dCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IEd1YXJkLCBJbnRlcmNlcHRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgR3VhcmRDYW5jZWxFcnJvciwgR3VhcmRJbnZhbGlkUmV0dXJuRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0QmFzZSB9IGZyb20gJy4uL3BpcGVsaW5lJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQXJndW1lbnRNZXRhZGF0YSwgQ2FsbEhhbmRsZXIsIExvZ2dlclNlcnZpY2UsIFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlQ29udGFpbmVyIH0gZnJvbSAnLi4vbW9kdWxlJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBpcGVsaW5lSGFuZGxlciB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIC8vIEBpbmplY3QoR0xPQkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsQ29udGFpbmVyOiBDb250YWluZXI7XG5cbiAgICBwdWJsaWMgYXN5bmMgZ29Ucm91Z2hHdWFyZHMoZXhlY3V0aW9uQ29udGV4dDogRXhlY3V0aW9uQ29udGV4dEJhc2UsIGd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10sIGNvbnRhaW5lcjogTW9kdWxlQ29udGFpbmVyKSB7XG4gICAgICAgIGZvciAoY29uc3QgZ3VhcmQgb2YgZ3VhcmRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGlzRnVuY3Rpb24oZ3VhcmQpID8gY29udGFpbmVyLmdldChndWFyZCkgOiBpc09iamVjdChndWFyZCkgJiYgaXNGdW5jdGlvbihndWFyZFsnY2FuQWN0aXZhdGUnXSkgPyBndWFyZCA6IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNOaWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ28gdGhyb3VnaCBndWFyZHMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkR3VhcmREZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNhbkFjdGl2YXRlID0gYXdhaXQgaW5zdGFuY2UuY2FuQWN0aXZhdGUuY2FsbChpbnN0YW5jZSwgZXhlY3V0aW9uQ29udGV4dCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNhbkFjdGl2YXRlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnbyB0aHJvdWdoIGd1YXJkcy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR3VhcmRJbnZhbGlkUmV0dXJuRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY2FuQWN0aXZhdGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR3VhcmRDYW5jZWxFcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdvVGhyb3VnaEludGVyY2VwdG9ycyhcbiAgICAgICAgZXhlY3V0aW9uQ29udGV4dDogRXhlY3V0aW9uQ29udGV4dEJhc2UsXG4gICAgICAgIGludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10sXG4gICAgICAgIGNvbnRhaW5lcjogTW9kdWxlQ29udGFpbmVyLFxuICAgICAgICBjYWxsSGFuZGxlcjogQ2FsbEhhbmRsZXIsXG4gICAgKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW50ZXJjZXB0b3Igb2YgaW50ZXJjZXB0b3JzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGlzRnVuY3Rpb24oaW50ZXJjZXB0b3IpXG4gICAgICAgICAgICAgICAgPyBjb250YWluZXIuZ2V0KGludGVyY2VwdG9yKVxuICAgICAgICAgICAgICAgIDogaXNPYmplY3QoaW50ZXJjZXB0b3IpICYmIGlzRnVuY3Rpb24oaW50ZXJjZXB0b3JbJ2ludGVyY2VwdCddKVxuICAgICAgICAgICAgICAgICAgPyBpbnRlcmNlcHRvclxuICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdvIHRocm91Z2ggaW50ZXJjZXB0b3JzLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEludGVyY2VwdG9yRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBpbnN0YW5jZS5pbnRlcmNlcHQuY2FsbChpbnN0YW5jZSwgZXhlY3V0aW9uQ29udGV4dCwgY2FsbEhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdvVHJvdWdoUGlwZXMoXG4gICAgICAgIHZhbHVlOiB1bmtub3duLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBhcmd1bWVudE1ldGFkYXRhOiBBcmd1bWVudE1ldGFkYXRhLFxuICAgICAgICBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcixcbiAgICApIHtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGlzRnVuY3Rpb24ocGlwZSkgPyBjb250YWluZXIuZ2V0KHBpcGUpIDogaXNPYmplY3QocGlwZSkgPyBwaXBlIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnbyB0aHJvdWdoIHBpcGVzLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFBpcGVEZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGluc3RhbmNlLnRyYW5zZm9ybS5jYWxsKGluc3RhbmNlLCB2YWx1ZSwgYXJndW1lbnRNZXRhZGF0YSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dEJhc2UgfSBmcm9tICcuLi9waXBlbGluZSc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50TWV0YWRhdGEsIFJQQ01ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBpcGVsaW5lSGFuZGxlciB9IGZyb20gJy4vcGlwZWxpbmUuaGFuZGxlcic7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEFwcEVudmlyb21lbnQgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTUVOVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyRmxvd0hhbmRsZXIge1xuICAgIEBpbmplY3QoQVBQX0VOVklST01FTlQpIHByaXZhdGUgcmVhZG9ubHkgYXBwRW52OiBBcHBFbnZpcm9tZW50O1xuICAgIEBpbmplY3QoUGlwZWxpbmVIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IHBpcGVsaW5lSGFuZGxlcjogUGlwZWxpbmVIYW5kbGVyO1xuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZUFyZ3MoXG4gICAgICAgIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHRCYXNlLFxuICAgICAgICBtZXRhZGF0YTogUlBDTWV0YWRhdGEgfCBFdmVudE1ldGFkYXRhLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBwbGF5ZXI/OiBQbGF5ZXJNcCxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgbWV0YWRhdGEucGFyYW1zLm1hcChhc3luYyAocGFyYW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmd1bWVudE1ldGFkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBwYXJhbS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBtZXRhdHlwZTogcGFyYW0ubWV0YXR5cGUsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChwYXJhbS50eXBlID09PSAnYm9keScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQm9keVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5LFxuICAgICAgICAgICAgICAgICAgICAgICAgWy4uLnBpcGVzLCAuLi4ocGFyYW0/LnBpcGVzID8/IFtdKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudE1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vd25lci5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAncGFyYW0nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcmFtXG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoZXhlY3V0aW9uQ29udGV4dC5yZXF1ZXN0LmJvZHkpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICg8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ZXhlY3V0aW9uQ29udGV4dC5yZXF1ZXN0LmJvZHkpW3BhcmFtLmRhdGFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgWy4uLnBpcGVzLCAuLi4ocGFyYW0/LnBpcGVzID8/IFtdKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudE1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vd25lci5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAnaW5kZXgnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShleGVjdXRpb25Db250ZXh0LnJlcXVlc3QuYm9keSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaFBpcGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC5yZXF1ZXN0LmJvZHlbcGFyYW0uZGF0YV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdyZXF1ZXN0Jykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0aW9uQ29udGV4dC5yZXF1ZXN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ3VzdG9tXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaFBpcGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZmFjdG9yeShwYXJhbS5kYXRhLCBleGVjdXRpb25Db250ZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5waXBlcywgLi4uKHBhcmFtPy5waXBlcyA/PyBbXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ3BsYXllcicgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFBsYXllciAoU2VydmVyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmRhdGEgPyBwbGF5ZXIhWzxrZXlvZiBQbGF5ZXJNcD5wYXJhbS5kYXRhXSA6IHBsYXllcixcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5waXBlcywgLi4uKHBhcmFtPy5waXBlcyA/PyBbXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IEd1YXJkLCBJbnRlcmNlcHRvciwgRXJyb3JGaWx0ZXIsIFRpbWVyTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlck1ldGFkYXRhLCBFdmVudE1ldGFkYXRhLCBNZXRob2RQYXJhbWV0ZXIsIFJQQ01ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcHBFbnZpcm9tZW50LCBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTUVOVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbnRyb2xsZXJNZXRhZGF0YVJlYWRlciB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJpdmF0ZSByZWFkb25seSBhcHBFbnY6IEFwcEVudmlyb21lbnQ7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGFzeW5jIHJlYWQoY2xhc3NSZWY6IE5ld2FibGUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9XG4gICAgICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhPFBpY2s8Q29udHJvbGxlck1ldGFkYXRhLCAncHJlZml4Jz4+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyLCBjbGFzc1JlZikgPz9cbiAgICAgICAgICAgIDxQaWNrPENvbnRyb2xsZXJNZXRhZGF0YSwgJ3ByZWZpeCc+Pnt9O1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLmdldEV2ZW50cyhjbGFzc1JlZik7XG4gICAgICAgIGNvbnN0IHJwY3MgPSB0aGlzLmdldFJQQ3MoY2xhc3NSZWYpO1xuICAgICAgICBjb25zdCB0aW1lcnMgPSB0aGlzLmdldFRpbWVycyhjbGFzc1JlZik7XG5cbiAgICAgICAgcmV0dXJuIDxDb250cm9sbGVyTWV0YWRhdGE+e1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIGNsYXNzUmVmLFxuICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgcnBjcyxcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0UGlwZWxpbmUoY2xhc3NSZWYpLFxuICAgICAgICAgICAgdGltZXJzLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXZlbnRzKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8RXZlbnRNZXRhZGF0YVtdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlckV2ZW50cywgY2xhc3NSZWYucHJvdG90eXBlKSA/PyBbXTtcblxuICAgICAgICByZXR1cm4gZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8RXZlbnRNZXRhZGF0YT57XG4gICAgICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiB0aGlzLmdldE1ldGhvZFBhcmFtcyhjbGFzc1JlZiwgZXZlbnQpLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0UGlwZWxpbmUoY2xhc3NSZWYsIGV2ZW50Lm1ldGhvZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJQQ3MoY2xhc3NSZWY6IE5ld2FibGUpIHtcbiAgICAgICAgY29uc3QgcnBjcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8UlBDTWV0YWRhdGFbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJSUENzLCBjbGFzc1JlZi5wcm90b3R5cGUpID8/IFtdO1xuXG4gICAgICAgIHJldHVybiBycGNzLm1hcCgocnBjKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPFJQQ01ldGFkYXRhPntcbiAgICAgICAgICAgICAgICAuLi5ycGMsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiB0aGlzLmdldE1ldGhvZFBhcmFtcyhjbGFzc1JlZiwgcnBjKSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldFBpcGVsaW5lKGNsYXNzUmVmLCBycGMubWV0aG9kKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TWV0aG9kUGFyYW1zKGNsYXNzUmVmOiBOZXdhYmxlLCBtZXRhZGF0YTogRXZlbnRNZXRhZGF0YSB8IFJQQ01ldGFkYXRhKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCBjbGFzc1JlZi5wcm90b3R5cGUsIG1ldGFkYXRhLm1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgcGFyYW1zLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgICAgcGFyYW1zLmZvckVhY2goKHBhcmFtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcmFtLmluZGV4ICE9PSBpbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFBhcmFtZXRlckRlY29yYXRvclVzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKG1ldGFkYXRhLnR5cGUgPT09ICdvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uUGxheWVyJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25JbnRlcm5hbCcgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uU2VydmVyJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25XZWJWaWV3JyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25jZScgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2VQbGF5ZXInIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlSW50ZXJuYWwnIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlU2VydmVyJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25jZVdlYlZpZXcnKSAmJlxuICAgICAgICAgICAgICAgIHBhcmFtLnR5cGUgPT09ICdyZXNwb25zZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIFJlc3BvbnNlXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SZXNwb25zZURlY29yYXRvck5vdEFsbG93ZWRPbkV2ZW50cyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdwbGF5ZXInICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LkNsaWVudCkge1xuICAgICAgICAgICAgICAgIC8vIFBsYXllciAoQ2xpZW50KSAtIE5vdCBhbGxvd2VkXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5QbGF5ZXJEZWNvcmF0b3JOb3RBbGxvd2VkT25DbGllbnRFdmVudHMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS50eXBlID09PSAnb25QbGF5ZXJSZXF1ZXN0JyAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5DbGllbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ05vdEFsbG93ZWRJbkNsaWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnR5cGUgPT09ICdvblNlcnZlclJlcXVlc3QnICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlcikge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDTm90QWxsb3dlZEluU2VydmVyKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKG1ldGFkYXRhLnR5cGUgPT09ICdvblBsYXllcicgfHwgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2VQbGF5ZXInKSAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5DbGllbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkV2ZW50Tm90QWxsb3dlZEluQ2xpZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKG1ldGFkYXRhLnR5cGUgPT09ICdvblNlcnZlcicgfHwgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2VTZXJ2ZXInKSAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkV2ZW50Tm90QWxsb3dlZEluU2VydmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBpcGVsaW5lKHRhcmdldDogTmV3YWJsZSB8IG9iamVjdCwgbWV0aG9kPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGd1YXJkcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxHdWFyZD5bXT4oQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8SW50ZXJjZXB0b3I+W10+KENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcbiAgICAgICAgY29uc3QgcGlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8UGlwZT5bXT4oQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG4gICAgICAgIGNvbnN0IGVycm9yRmlsdGVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxFcnJvckZpbHRlcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIHJldHVybiB7IGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgZXJyb3JGaWx0ZXJzIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUaW1lcnMoY2xhc3NSZWY6IE5ld2FibGUpIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGE8VGltZXJNZXRhZGF0YVtdPihDb3JlTWV0YWRhdGFLZXkuVGltZXJzLCBjbGFzc1JlZi5wcm90b3R5cGUpID8/IFtdO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciwgR3VhcmQsIEludGVyY2VwdG9yLCBJbnRlcm5hbFJQQ1NlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFLCBSUENfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTUVOVCwgRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSwgTUFOR09fUkVRVUVTVF9GQUNUT1JZLCBNQU5HT19SRVNQT05TRV9GQUNUT1JZIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzQXN5bmNGdW5jdGlvbiwgaXNGdW5jdGlvbiwgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgUGlwZWxpbmVIYW5kbGVyIH0gZnJvbSAnLi9waXBlbGluZS5oYW5kbGVyJztcbmltcG9ydCB0eXBlIHsgUlBDTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFwcEVudmlyb21lbnQsIEV4ZWN1dGlvbkNvbnRleHRUeXBlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgRXhlY3V0aW9uQ29udGV4dEJhc2UsIHR5cGUgTWFuZ29SZXF1ZXN0QmFzZSwgdHlwZSBNYW5nb1Jlc3BvbnNlQmFzZSB9IGZyb20gJy4uL3BpcGVsaW5lJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQ2FsbEhhbmRsZXIsIExvZ2dlclNlcnZpY2UsIFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBDb250cm9sbGVyRmxvd0hhbmRsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXItZmxvdy5oYW5kbGVyJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbnRyb2xsZXJSUENIYW5kbGVyIHtcbiAgICBAaW5qZWN0KEFQUF9FTlZJUk9NRU5UKSBwcml2YXRlIHJlYWRvbmx5IGFwcEVudjogQXBwRW52aXJvbWVudDtcbiAgICBAaW5qZWN0KFJQQ19TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IHJwY1NlcnZpY2U6IEludGVybmFsUlBDU2VydmljZTtcbiAgICBAaW5qZWN0KFBpcGVsaW5lSGFuZGxlcikgcHJpdmF0ZSByZWFkb25seSBwaXBlbGluZUhhbmRsZXI6IFBpcGVsaW5lSGFuZGxlcjtcbiAgICBAaW5qZWN0KENvbnRyb2xsZXJGbG93SGFuZGxlcikgcHJpdmF0ZSByZWFkb25seSBjb250cm9sbGVyRmxvd0hhbmRsZXI6IENvbnRyb2xsZXJGbG93SGFuZGxlcjtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgQGluamVjdChNQU5HT19SRVFVRVNUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlTWFuZ29SZXF1ZXN0OiAoZGF0YTogdW5rbm93biwgcGxheWVyPzogUGxheWVyTXApID0+IE1hbmdvUmVxdWVzdEJhc2U7XG4gICAgQGluamVjdChNQU5HT19SRVNQT05TRV9GQUNUT1JZKSBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZU1hbmdvUmVzcG9uc2U6ICgpID0+IE1hbmdvUmVzcG9uc2VCYXNlO1xuICAgIEBpbmplY3QoRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVFeGVjdXRpb25Db250ZXh0OiAoXG4gICAgICAgIHR5cGU6IEV4ZWN1dGlvbkNvbnRleHRUeXBlLFxuICAgICAgICBjbGFzc1JlZjogTmV3YWJsZSxcbiAgICAgICAgaGFuZGxlcjogRnVuY3Rpb24sXG4gICAgICAgIHJlcXVlc3Q6IE1hbmdvUmVxdWVzdEJhc2UsXG4gICAgICAgIHJlc3BvbnNlOiBNYW5nb1Jlc3BvbnNlQmFzZSxcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICkgPT4gRXhlY3V0aW9uQ29udGV4dEJhc2U7XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJSUEMoXG4gICAgICAgIGd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10sXG4gICAgICAgIGludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10sXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIG1hcHBlZEVycm9yRmlsdGVyczogW2FueSB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdLFxuICAgICAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICBycGM6IFJQQ01ldGFkYXRhLFxuICAgICkge1xuICAgICAgICBpZiAocnBjLnR5cGUgPT09ICdvblJlcXVlc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNTZXJ2aWNlW3JwYy50eXBlXShycGMubmFtZSwgYXN5bmMgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVSUEMoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIHJwYywgYm9keSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChycGMudHlwZSA9PT0gJ29uUGxheWVyUmVxdWVzdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJwY1NlcnZpY2VbcnBjLnR5cGVdKHJwYy5uYW1lLCBhc3luYyAocGxheWVyLCBib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMsIGJvZHksIHBsYXllcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChycGMudHlwZSA9PT0gJ29uU2VydmVyUmVxdWVzdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJwY1NlcnZpY2VbcnBjLnR5cGVdKHJwYy5uYW1lLCBhc3luYyAoYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJQQyhndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgcnBjLCBib2R5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHJwYy50eXBlID09PSAnb25XZWJWaWV3UmVxdWVzdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJwY1NlcnZpY2VbcnBjLnR5cGVdKHJwYy53ZWJWaWV3SWQhLCBycGMubmFtZSwgYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIgPyBhcmdzWzFdIDogYXJnc1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIgPyA8UGxheWVyTXA+YXJnc1swXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVSUEMoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIHJwYywgYm9keSwgcGxheWVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVnaXN0ZXIgUlBDLicpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRSUENUeXBlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZVJQQyhcbiAgICAgICAgZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSxcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgbWFwcGVkRXJyb3JGaWx0ZXJzOiBbYW55IHwgJ01BTkdPX0FOWV9FUlJPUicsIE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXJdW10sXG4gICAgICAgIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICAgICAgIHJwYzogUlBDTWV0YWRhdGEsXG4gICAgICAgIGJvZHk6IHVua25vd24sXG4gICAgICAgIHBsYXllcj86IFBsYXllck1wLFxuICAgICkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmNyZWF0ZU1hbmdvUmVxdWVzdChcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlciAmJiAocnBjLnR5cGUgPT09ICdvblBsYXllclJlcXVlc3QnIHx8IHJwYy50eXBlID09PSAnb25XZWJWaWV3UmVxdWVzdCcpXG4gICAgICAgICAgICAgICAgICAgID8gcGxheWVyXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5jcmVhdGVNYW5nb1Jlc3BvbnNlKCk7XG4gICAgICAgICAgICByZXNwb25zZS4kb25TZW5kKChkYXRhKSA9PiByZXNvbHZlKGRhdGEpKTtcbiAgICAgICAgICAgIHJlc3BvbnNlLiRvbkVycm9yKChlcnJvcikgPT4gcmVzb2x2ZShlcnJvcikpO1xuICAgICAgICAgICAgY29uc3QgZXhlY3V0aW9uQ29udGV4dCA9IHRoaXMuY3JlYXRlRXhlY3V0aW9uQ29udGV4dChcbiAgICAgICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0VHlwZS5SUEMsXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZixcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLmNsYXNzUmVmLnByb3RvdHlwZVtycGMubWV0aG9kXSxcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIHJwYy5uYW1lLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Ryb3VnaEd1YXJkcyhleGVjdXRpb25Db250ZXh0LCBndWFyZHMsIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gYXdhaXQgdGhpcy5jb250cm9sbGVyRmxvd0hhbmRsZXIuY3JlYXRlQXJncyhjb250cm9sbGVyLCBleGVjdXRpb25Db250ZXh0LCBycGMsIHBpcGVzLCBwbGF5ZXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXJNZXRob2QgPSBjb250cm9sbGVyLmluc3RhbmNlW3JwYy5tZXRob2RdITtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBpc0FzeW5jRnVuY3Rpb24oY29udHJvbGxlck1ldGhvZClcbiAgICAgICAgICAgICAgICAgICAgPyAob3B0aW9uczogeyBzZW5kOiBib29sZWFuIH0gPSB7IHNlbmQ6IHRydWUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb250cm9sbGVyLmluc3RhbmNlW3JwYy5tZXRob2RdIS5hcHBseShjb250cm9sbGVyLmluc3RhbmNlLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IGFzeW5jIChvcHRpb25zOiB7IHNlbmQ6IGJvb2xlYW4gfSA9IHsgc2VuZDogdHJ1ZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbnRyb2xsZXIuaW5zdGFuY2VbcnBjLm1ldGhvZF0hLmFwcGx5KGNvbnRyb2xsZXIuaW5zdGFuY2UsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5zZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZW5kKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxIYW5kbGVyOiBDYWxsSGFuZGxlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICByZXR1cm46ICh2YWx1ZTogdW5rbm93bikgPT4gcmVzcG9uc2Uuc2VuZCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChpbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBpcGVsaW5lSGFuZGxlci5nb1Rocm91Z2hJbnRlcmNlcHRvcnMoXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vd25lci5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsSGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjYWxsSGFuZGxlci5oYW5kbGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yR3JvdXAgPSBtYXBwZWRFcnJvckZpbHRlcnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKFtlcnJvclR5cGVdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZXJyb3JUeXBlKSAmJiBlcnJvciBpbnN0YW5jZW9mIGVycm9yVHlwZSkgfHwgZXJyb3JUeXBlID09PSAnTUFOR09fQU5ZX0VSUk9SJyB8fCBlcnJvciA9PT0gZXJyb3JUeXBlLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmlsKGVycm9yR3JvdXApKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKGVycm9yR3JvdXBbMV0pXG4gICAgICAgICAgICAgICAgICAgID8gY29udHJvbGxlci5vd25lci5jb250YWluZXIuZ2V0KGVycm9yR3JvdXBbMV0pXG4gICAgICAgICAgICAgICAgICAgIDogaXNPYmplY3QoZXJyb3JHcm91cFsxXSkgJiYgaXNGdW5jdGlvbihlcnJvckdyb3VwWzFdWydjYXRjaCddKVxuICAgICAgICAgICAgICAgICAgICAgID8gZXJyb3JHcm91cFsxXVxuICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoaXNOaWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoaW5zdGFuY2UuY2F0Y2guY2FsbChpbnN0YW5jZSwgZXJyb3IsIGV4ZWN1dGlvbkNvbnRleHQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sbGVyTWV0YWRhdGEsIFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGUgfSBmcm9tICcuLi9tb2R1bGUnO1xuaW1wb3J0IHR5cGUgeyBTY3JpcHRSUENIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyIHtcbiAgICBwdWJsaWMgbWV0YWRhdGE6IENvbnRyb2xsZXJNZXRhZGF0YTtcbiAgICBwdWJsaWMgaW5zdGFuY2U6IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfTtcbiAgICBwdWJsaWMgb3duZXI6IE1vZHVsZTtcbiAgICBwdWJsaWMgZXZlbnRIYW5kbGVyczogU2NyaXB0RXZlbnRIYW5kbGVyW10gPSBbXTtcbiAgICBwdWJsaWMgcnBjSGFuZGxlcnM6IFNjcmlwdFJQQ0hhbmRsZXJbXSA9IFtdO1xufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgU2V0TWV0YWRhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzJztcbmltcG9ydCB0eXBlIHsgQ3JlYXRlRGVjb3JhdG9yT3B0aW9ucywgQ3JlYXRlRGVjb3JhdG9yV2l0aFRyYW5zZm9ybU9wdGlvbnMsIFJlZmxlY3RhYmxlRGVjb3JhdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUlkLCBpc0VtcHR5LCBpc09iamVjdCB9IGZyb20gJy4uL3V0aWxzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlZmxlY3RvclNlcnZpY2Uge1xuICAgIHB1YmxpYyBnZXQ8VFJlc3VsdCA9IHVua25vd24sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KG1ldGFkYXRhS2V5OiBUS2V5LCB0YXJnZXQ6IE5ld2FibGUgfCBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YTxUUmVzdWx0PihtZXRhZGF0YUtleSwgdGFyZ2V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsPFRSZXN1bHQgZXh0ZW5kcyB1bmtub3duW10gPSB1bmtub3duW10sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KFxuICAgICAgICBtZXRhZGF0YUtleTogVEtleSxcbiAgICAgICAgdGFyZ2V0czogKE5ld2FibGUgfCBGdW5jdGlvbilbXSxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIDxUUmVzdWx0Pih0YXJnZXRzIHx8IFtdKS5tYXAoKHRhcmdldCkgPT4gdGhpcy5nZXQobWV0YWRhdGFLZXksIHRhcmdldCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxBbmRNZXJnZTxUUmVzdWx0IGV4dGVuZHMgdW5rbm93bltdID0gdW5rbm93bltdLCBUS2V5IGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sID0gc3RyaW5nPihcbiAgICAgICAgbWV0YWRhdGFLZXk6IFRLZXksXG4gICAgICAgIHRhcmdldHM6IChOZXdhYmxlIHwgRnVuY3Rpb24pW10sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQ29sbGVjdGlvbiA9IHRoaXMuZ2V0QWxsPFRSZXN1bHQsIFRLZXk+KG1ldGFkYXRhS2V5LCB0YXJnZXRzKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKGlzRW1wdHkobWV0YWRhdGFDb2xsZWN0aW9uKSkgcmV0dXJuIDxUUmVzdWx0Pm1ldGFkYXRhQ29sbGVjdGlvbjtcblxuICAgICAgICByZXR1cm4gPFRSZXN1bHQ+bWV0YWRhdGFDb2xsZWN0aW9uLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoYSkgJiYgaXNPYmplY3QoYikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICAgICAgICAuLi5iLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2EsIGJdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsQW5kT3ZlcnJpZGU8VFJlc3VsdCA9IHVua25vd24sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KG1ldGFkYXRhS2V5OiBUS2V5LCB0YXJnZXRzOiAoTmV3YWJsZSB8IEZ1bmN0aW9uKVtdKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0KG1ldGFkYXRhS2V5LCB0YXJnZXQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gPFRSZXN1bHQ+cmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVEZWNvcmF0b3I8VFBhcmFtPihvcHRpb25zPzogQ3JlYXRlRGVjb3JhdG9yT3B0aW9uczxUUGFyYW0+KTogUmVmbGVjdGFibGVEZWNvcmF0b3I8VFBhcmFtPjtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD4oXG4gICAgICAgIG9wdGlvbnM6IENyZWF0ZURlY29yYXRvcldpdGhUcmFuc2Zvcm1PcHRpb25zPFRQYXJhbSwgVFRyYW5zZm9ybWVkPixcbiAgICApOiBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD47XG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQgPSBUUGFyYW0+KFxuICAgICAgICBvcHRpb25zOiBDcmVhdGVEZWNvcmF0b3JPcHRpb25zPFRQYXJhbSwgVFRyYW5zZm9ybWVkPiA9IHt9LFxuICAgICk6IFJlZmxlY3RhYmxlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkPiB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhS2V5ID0gb3B0aW9ucy5rZXkgPz8gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgICAgICBjb25zdCBkZWNvcmF0b3JGbiA9IChtZXRhZGF0YVZhbHVlOiBUUGFyYW0pID0+ICh0YXJnZXQ6IG9iamVjdCB8IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy50cmFuc2Zvcm0gPyBvcHRpb25zLnRyYW5zZm9ybShtZXRhZGF0YVZhbHVlKSA6IG1ldGFkYXRhVmFsdWU7XG4gICAgICAgICAgICBTZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdmFsdWUgPz8ge30pKHRhcmdldCwga2V5ISwgZGVzY3JpcHRvcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZGVjb3JhdG9yRm4uS0VZID0gbWV0YWRhdGFLZXk7XG4gICAgICAgIHJldHVybiBkZWNvcmF0b3JGbiBhcyBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD47XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIENvbnRyb2xsZXI8VCBleHRlbmRzIE5ld2FibGU+KG9wdGlvbnM/OiBDb250cm9sbGVyT3B0aW9ucykge1xuICAgIHJldHVybiAodGFyZ2V0OiBUKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhc01ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZURlY29yYXRvclVzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlciwgdmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGUoKSh0YXJnZXQpO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEdsb2JhbDxUIGV4dGVuZHMgTmV3YWJsZT4oKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuR2xvYmFsTW9kdWxlLCB0cnVlLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEluamVjdDxUID0gdW5rbm93bj4oa2V5PzogSW5qZWN0aW9uVG9rZW48VD4pIHtcbiAgICByZXR1cm4gPFByb3BlcnR5RGVjb3JhdG9yICYgUGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHBhcmFtSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbChrZXkpICYmICF2YWxpZGF0ZUluamVjdGlvblRva2VuKGtleSkudmFsaWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEluamVjdGlvblRva2VuU3BlY2lmaWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRva2VuID0ga2V5ID8/IFJlZmxlY3QuZ2V0TWV0YWRhdGE8SW5qZWN0aW9uVG9rZW4+KCdkZXNpZ246dHlwZScsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkluamVjdGlvblRva2VuTm90Rm91bmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5qZWN0KHRva2VuKSh0YXJnZXQsIHByb3BlcnR5S2V5LCBwYXJhbUluZGV4KTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGFibGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0YWJsZTxUIGV4dGVuZHMgTmV3YWJsZT4ob3B0aW9ucz86IEluamVjdGFibGVPcHRpb25zKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgaWYgKFJlZmxlY3QuaGFzTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkluamVjdGFibGUsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YShvcHRpb25zKTtcbiAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgdmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGUoKSh0YXJnZXQpO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIE1vZHVsZTxUIGV4dGVuZHMgTmV3YWJsZT4ob3B0aW9ucz86IE1vZHVsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuTW9kdWxlLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZURlY29yYXRvclVzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVNb2R1bGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IhKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuTW9kdWxlLCB2YWx1ZSwgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZSgpKHRhcmdldCk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBvcHRpb25hbCB9IGZyb20gJ2ludmVyc2lmeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPcHRpb25hbCgpIHtcbiAgICByZXR1cm4gPFByb3BlcnR5RGVjb3JhdG9yICYgUGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHBhcmFtSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKCkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgcGFyYW1JbmRleCk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDdXN0b21EZWNvcmF0b3IgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTZXRNZXRhZGF0YTxLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBWID0gdW5rbm93bj4oa2V5OiBLLCB2YWx1ZTogVikge1xuICAgIGNvbnN0IGRlY29yYXRvckZhY3RvcnkgPSA8Q3VzdG9tRGVjb3JhdG9yPigodGFyZ2V0OiBvYmplY3QsIF9tZXRob2Q/OiBzdHJpbmcsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoa2V5LCB2YWx1ZSwgZGVzY3JpcHRvci52YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKGtleSwgdmFsdWUsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG4gICAgZGVjb3JhdG9yRmFjdG9yeS5LRVkgPSBrZXk7XG4gICAgcmV0dXJuIGRlY29yYXRvckZhY3Rvcnk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIENhdGNoPFQgZXh0ZW5kcyBOZXdhYmxlPiguLi5leGNlcHRpb25zOiB1bmtub3duW10pIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuQ2F0Y2gsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHVwbGljYXRlcyA9IGV4Y2VwdGlvbnMuZmlsdGVyKChleGNlcHRpb24sIGluZGV4KSA9PiBleGNlcHRpb25zLmluZGV4T2YoZXhjZXB0aW9uKSAhPT0gaW5kZXgpO1xuICAgICAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5DYXRjaCwgZXhjZXB0aW9ucywgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlRXJyb3JGaWx0ZXIgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICByZXR1cm4gPENsYXNzRGVjb3JhdG9yICYgTWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGaWx0ZXJzOiAoTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcilbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlRXJyb3JGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRGaWx0ZXJzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChkZXNjcmlwdG9yKSAmJiAhaXNOaWwoZGVzY3JpcHRvci52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUZpbHRlclJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWV0aG9kRmlsdGVycyA9XG4gICAgICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEVycm9yRmlsdGVyPltdPihDb3JlTWV0YWRhdGFLZXkuRXJyb3JGaWx0ZXJzLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCkgfHwgW107XG4gICAgICAgICAgICBpZiAoIWlzTmlsKG1ldGhvZEZpbHRlcnMuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXJzLmluY2x1ZGVzKGZpbHRlcikpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRXJyb3JGaWx0ZXJEZXRlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIFsuLi52YWxpZGF0ZWRGaWx0ZXJzLCAuLi5tZXRob2RGaWx0ZXJzXSwgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUZpbHRlclJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzRmlsdGVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxFcnJvckZpbHRlcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgdGFyZ2V0KSB8fCBbXTtcbiAgICAgICAgaWYgKCFpc05pbChjbGFzc0ZpbHRlcnMuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXJzLmluY2x1ZGVzKGZpbHRlcikpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIFsuLi52YWxpZGF0ZWRGaWx0ZXJzLCAuLi5jbGFzc0ZpbHRlcnNdLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVOQUJMRV9TSFVURE9XTl9IT09LUywgR0xPQkFMX0VSUk9SX0ZJTFRFUlMsIEdMT0JBTF9HVUFSRFMsIEdMT0JBTF9JTlRFUkNFUFRPUlMsIEdMT0JBTF9QSVBFUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUsIG9wdGlvbmFsIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IENvbnRyb2xsZXIsIENvbnRyb2xsZXJFdmVudEhhbmRsZXIsIENvbnRyb2xsZXJSUENIYW5kbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgVElNRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgVHJlZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgVGltZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBwUnVudGltZSB7XG4gICAgQGluamVjdChDb250cm9sbGVyRXZlbnRIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50SGFuZGxlcjogQ29udHJvbGxlckV2ZW50SGFuZGxlcjtcbiAgICBAaW5qZWN0KENvbnRyb2xsZXJSUENIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IHJwY0hhbmRsZXI6IENvbnRyb2xsZXJSUENIYW5kbGVyO1xuICAgIEBpbmplY3QoR0xPQkFMX0dVQVJEUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxHdWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdO1xuICAgIEBpbmplY3QoR0xPQkFMX0lOVEVSQ0VQVE9SUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxJbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdO1xuICAgIEBpbmplY3QoR0xPQkFMX1BJUEVTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW107XG4gICAgQGluamVjdChHTE9CQUxfRVJST1JfRklMVEVSUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxFcnJvckZpbHRlcnM6IChOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyKVtdO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAaW5qZWN0KEVOQUJMRV9TSFVURE9XTl9IT09LUykgQG9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBlbmFibGVTaHV0ZG93bkhvb2tzOiBib29sZWFuO1xuXG4gICAgcHVibGljIGFzeW5jIGJvb3QocmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4pIHtcbiAgICAgICAgYXdhaXQgcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIG1vZHVsZSwgY29udHJvbGxlcnMgYW5kIHByb3ZpZGVycy5cbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuaW5zdGFuY2UgPSBtb2R1bGUuY29udGFpbmVyLmdldDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+KG1vZHVsZS5tZXRhZGF0YS5jbGFzc1JlZik7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoY29udHJvbGxlcikgPT4gKGNvbnRyb2xsZXIuaW5zdGFuY2UgPSBtb2R1bGUuY29udGFpbmVyLmdldDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+KGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBbLi4ubW9kdWxlLm1ldGFkYXRhLmludGVybmFsUHJvdmlkZXJzLCAuLi5tb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnNdLmZvckVhY2goKFt0b2tlbl0pID0+XG4gICAgICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5nZXQ8YW55Pih0b2tlbiksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBMb2cgbW9kdWxlIGxvYWRlZC5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35sb2FkZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJ1bkxpZmVjeWNsZU1ldGhvZChtb2R1bGUsICdvbk1vZHVsZUluaXQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbk1vZHVsZUluaXQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ29uQXBwQm9vdHN0cmFwJyk7XG5cbiAgICAgICAgLy8gUmVnaXN0ZXIgZXZlbnQgYW5kIHJwYyBsaXN0ZW5lcnMuXG4gICAgICAgIHJlc29sdmVkVHJlZS50cmF2ZXJzZSgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5mb3JFYWNoKChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlclRpbWVycyhjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGB+bHd+Q29udHJvbGxlciB+bGN+JHtjb250cm9sbGVyLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd350aW1lcnMgYW5kIGxpc3RlbmVycyByZWdpc3RlcmVkIH5sa34oJHtEYXRlLm5vdygpIC0gdGltZX1tcylgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNodXRkb3duKHJlc29sdmVkVHJlZTogVHJlZTxNb2R1bGU+KSB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbk1vZHVsZURlc3Ryb3knKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdiZWZvcmVBcHBTaHV0ZG93bicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyU2VydmljZSA9IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldDxUaW1lclNlcnZpY2U+KFRJTUVSX1NFUlZJQ0UpO1xuXG4gICAgICAgICAgICAgICAgLy8gRGVzdHJveSBhbGwgdGltZXJzLlxuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5ldmVyeXRpY2tzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5pbnRlcnZhbHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLnRpbWVvdXRzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcm9ucy5mb3JFYWNoKChjcm9uKSA9PiBjcm9uLnN0b3AoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5ldmVudEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJwY0hhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCB0aW1lcnMuXG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmV2ZXJ5dGlja3MuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmludGVydmFscy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UudGltZW91dHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmNyb25Kb2JzLmZvckVhY2goKGNyb25Kb2IpID0+IGNyb25Kb2Iuc3RvcCgpKTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgIC8vIHRoaXMuZXZlbnRTZXJ2aWNlLiRsb2NhbEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy5ldmVudFNlcnZpY2UuJGludGVybmFsSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAvLyB0aGlzLmV2ZW50U2VydmljZS4kcmVtb3RlSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbkFwcFNodXRkb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTGlzdGVuZXJzKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gY29udHJvbGxlci5vd25lcjtcbiAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5ldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkcyA9IFsuLi50aGlzLmdsb2JhbEd1YXJkcywgLi4ubW9kdWxlLm1ldGFkYXRhLmd1YXJkcywgLi4uY29udHJvbGxlci5tZXRhZGF0YS5ndWFyZHMsIC4uLmV2ZW50Lmd1YXJkc107XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxJbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ldmVudC5waXBlc107XG4gICAgICAgICAgICBjb25zdCBtYXBwZWRFcnJvckZpbHRlcnMgPSB0aGlzLm1hcEVycm9yRmlsdGVycyhbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxFcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuZXZlbnRIYW5kbGVyLnJlZ2lzdGVyRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZXZlbnRIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnJwY3MuZm9yRWFjaChhc3luYyAocnBjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBndWFyZHMgPSBbLi4udGhpcy5nbG9iYWxHdWFyZHMsIC4uLm1vZHVsZS5tZXRhZGF0YS5ndWFyZHMsIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuZ3VhcmRzLCAuLi5ycGMuZ3VhcmRzXTtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdsb2JhbEludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLnJwYy5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ycGMucGlwZXNdO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkRXJyb3JGaWx0ZXJzID0gdGhpcy5tYXBFcnJvckZpbHRlcnMoW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2xvYmFsRXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIC4uLm1vZHVsZS5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4uY29udHJvbGxlci5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ucnBjLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgdGhpcy5ycGNIYW5kbGVyLnJlZ2lzdGVyUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMpO1xuICAgICAgICAgICAgY29udHJvbGxlci5ycGNIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJUaW1lcnMoY29udHJvbGxlcjogQ29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB0aW1lclNlcnZpY2UgPSBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lci5nZXQ8VGltZXJTZXJ2aWNlPihUSU1FUl9TRVJWSUNFKTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnRpbWVycy5mb3JFYWNoKCh0aW1lcikgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVyLnR5cGUgPT09ICdjcm9uJykge1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcmVhdGVDcm9uSm9iKGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSwgdGltZXIub3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLnR5cGUgPT09ICdldmVyeXRpY2snKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUV2ZXJ5VGljayhjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAnaW50ZXJ2YWwnKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUludGVydmFsKFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLm9wdGlvbnMudGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgdGltZXIubmFtZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAndGltZW91dCcpIHtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlVGltZW91dChjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm9wdGlvbnMudGltZW91dCwgdGltZXIubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwRXJyb3JGaWx0ZXJzKGVycm9yRmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyTWFwOiBbdW5rbm93biB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZXJyb3JGaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPGFueVtdPihDb3JlTWV0YWRhdGFLZXkuQ2F0Y2gsIGZpbHRlcikgPz8gW107XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdNQU5HT19BTllfRVJST1InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05pbChmaWx0ZXJNYXAuZmluZCgoZmlsdGVyRXJyb3IpID0+IGZpbHRlckVycm9yWzBdID09PSBlcnJvcikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIG1hcCBlcnJvciBmaWx0ZXJzLicpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlck1hcC5wdXNoKFtlcnJvciwgZmlsdGVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyTWFwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kcyhcbiAgICAgICAgcmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4sXG4gICAgICAgIG1ldGhvZDogJ29uTW9kdWxlSW5pdCcgfCAnb25Nb2R1bGVEZXN0cm95JyB8ICdvbkFwcEJvb3RzdHJhcCcgfCAnYmVmb3JlQXBwU2h1dGRvd24nIHwgJ29uQXBwU2h1dGRvd24nLFxuICAgICkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kKG5vZGUudmFsdWUsIG1ldGhvZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kKFxuICAgICAgICBtb2R1bGU6IE1vZHVsZSxcbiAgICAgICAgbWV0aG9kOiAnb25Nb2R1bGVJbml0JyB8ICdvbk1vZHVsZURlc3Ryb3knIHwgJ29uQXBwQm9vdHN0cmFwJyB8ICdiZWZvcmVBcHBTaHV0ZG93bicgfCAnb25BcHBTaHV0ZG93bicsXG4gICAgKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgbW9kdWxlLmNvbnRyb2xsZXJzLm1hcChhc3luYyAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoY29udHJvbGxlci5pbnN0YW5jZSkgfHwgaXNOaWwoY29udHJvbGxlci5pbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2xsZXIuaW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIFsuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMsIC4uLm1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVyc10ubWFwKGFzeW5jIChbdG9rZW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJbnN0YW5jZSA9IDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+bW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QocHJvdmlkZXJJbnN0YW5jZSkgfHwgaXNOaWwocHJvdmlkZXJJbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IHByb3ZpZGVySW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KG1vZHVsZS5pbnN0YW5jZSkgfHwgaXNOaWwobW9kdWxlLmluc3RhbmNlW21ldGhvZF0pKSByZXR1cm47XG4gICAgICAgIGF3YWl0IG1vZHVsZS5pbnN0YW5jZVttZXRob2RdISgpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENPTlRBSU5FUl9PUFRJT05TLCBHTE9CQUxfQVBQX0NPTlRBSU5FUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgeyBDb250YWluZXIsIGluamVjdCwgaW5qZWN0YWJsZSwgb3B0aW9uYWwsIHR5cGUgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgTU9EVUxFX0NPTlRBSU5FUiwgVElNRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IFRyZWUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVEZXBlbmRlbmN5QmluZGVyIHtcbiAgICBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAb3B0aW9uYWwoKSBAaW5qZWN0KENPTlRBSU5FUl9PUFRJT05TKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lck9wdGlvbnM/OiBpbnRlcmZhY2VzLkNvbnRhaW5lck9wdGlvbnM7XG5cbiAgICBwdWJsaWMgYXN5bmMgYmluZChyZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPikge1xuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIgPSBuZXcgTW9kdWxlQ29udGFpbmVyKG1vZHVsZS5tZXRhZGF0YS5jb250YWluZXIgPz8gdGhpcy5jb250YWluZXJPcHRpb25zKTtcbiAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgZ2xvYmFsIGNvbnRhaW5lciB0byB0aGUgbW9kdWxlIGNvbnRhaW5lciwgc28gaXQgY2FuIGJlIHVzZWQgdG8gcmVzb2x2ZSBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLnBhcmVudCA9IHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChtb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBnbG9iYWwsIHdlIHdhbnQgdG8gYmluZCBpdCB0byB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgICAgIGlmIChtb2R1bGUubWV0YWRhdGEuZ2xvYmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gQmluZCBleHRlcm5hbCBwcm92aWRlcnMgdG8gdGhlIGdsb2JhbCBjb250YWluZXIsIHNvIHRoZXkgY2FuIGJlIGluamVjdGVkIGluIG90aGVyIG1vZHVsZXMuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgcHJvdmlkZXJdIG9mIG1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRQcm92aWRlcihwcm92aWRlciwgdGhpcy5nbG9iYWxBcHBDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBub3QgZ2xvYmFsLCB3ZSB3YW50IHRvIGJpbmQgaXQgdG8gaXRzIG93biBjb250YWluZXIuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdG9rZW4sIHByb3ZpZGVyXSBvZiBtb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUucGFyZW50Py5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gbW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbXBvcnRNb2R1bGUgb2YgbW9kdWxlLnJlcGV0aXRpdmVJbXBvcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3Rva2VuXSBvZiBpbXBvcnRNb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gaW1wb3J0TW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBpbnRlcm5hbCBwcm92aWRlcnMuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBwcm92aWRlcl0gb2YgbW9kdWxlLm1ldGFkYXRhLmludGVybmFsUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5kIGNvbnRhaW5lciB0byBpdHNlbGYgc28gaXQgY2FuIGJlIGluamVjdGVkLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKE1PRFVMRV9DT05UQUlORVIpLnRvQ29uc3RhbnRWYWx1ZShtb2R1bGUuY29udGFpbmVyKTtcblxuICAgICAgICAgICAgLy8gQmluZCBjb250cm9sbGVycyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmJpbmQoY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBzZXJ2aWNlcyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKFRJTUVSX1NFUlZJQ0UpLnRvKFRpbWVyU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKFxuICAgICAgICAgICAgICAgIGB+bHd+TW9kdWxlIH5sYn4ke21vZHVsZS5tZXRhZGF0YS5jbGFzc1JlZi5uYW1lfSB+bHd+ZGVwZW5kZW5jaWVzIGJpbmRlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kUHJvdmlkZXIocHJvdmlkZXI6IEV4Y2x1ZGU8UHJvdmlkZXIsIE5ld2FibGU+LCBjb250YWluZXI6IENvbnRhaW5lcikge1xuICAgICAgICBpZiAoJ3VzZVZhbHVlJyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29udGFpbmVyLmJpbmQocHJvdmlkZXIucHJvdmlkZSkudG9Db25zdGFudFZhbHVlKHByb3ZpZGVyLnVzZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlRmFjdG9yeScgaW4gcHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b0R5bmFtaWNWYWx1ZSgoY3R4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwcyA9XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLmluamVjdD8ubWFwKChkZXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChkZXApICYmICd0b2tlbicgaW4gZGVwICYmICdvcHRpb25hbCcgaW4gZGVwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5jb250YWluZXIuZ2V0KGRlcC50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXAub3B0aW9uYWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlc29sdmUgYSBkZXBlbmRlbmN5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5jb250YWluZXIuZ2V0KGRlcCk7XG4gICAgICAgICAgICAgICAgICAgIH0pID8/IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlci51c2VGYWN0b3J5KC4uLmRlcHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICd0cmFuc2llbnQnKSBiaW5kaW5nLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyLnNjb3BlID09PSAncmVxdWVzdCcpIGJpbmRpbmcuaW5SZXF1ZXN0U2NvcGUoKTtcbiAgICAgICAgICAgIGVsc2UgYmluZGluZy5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZUNsYXNzJyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvKHByb3ZpZGVyLnVzZUNsYXNzKTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3RyYW5zaWVudCcpIGJpbmRpbmcuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICdyZXF1ZXN0JykgYmluZGluZy5pblJlcXVlc3RTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBiaW5kaW5nLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlRXhpc3RpbmcnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b1NlcnZpY2UocHJvdmlkZXIudXNlRXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgRHluYW1pY01vZHVsZSwgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29udHJvbGxlciwgQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZU1ldGFkYXRhUmVhZGVyIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBUcmVlLCBUcmVlTm9kZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlVHJlZVNjYW5uZXIge1xuICAgIEBpbmplY3QoTW9kdWxlTWV0YWRhdGFSZWFkZXIpIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlTWV0YWRhdGFSZWFkZXI6IE1vZHVsZU1ldGFkYXRhUmVhZGVyO1xuICAgIEBpbmplY3QoQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlcjogQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyBzY2FuKGNsYXNzUmVmOiBOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4pIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gUmVhZCBtb2R1bGUgbWV0YWRhdGFcbiAgICAgICAgY29uc3QgbW9kdWxlTWV0YWRhdGEgPSBhd2FpdCB0aGlzLm1vZHVsZU1ldGFkYXRhUmVhZGVyLnJlYWQoY2xhc3NSZWYpO1xuICAgICAgICAvLyBDcmVhdGUgbW9kdWxlIGluc3RhbmNlIGFuZCBzZXQgbWV0YWRhdGEgdG8gaXRcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IE1vZHVsZSgpO1xuICAgICAgICBtb2R1bGUubWV0YWRhdGEgPSBtb2R1bGVNZXRhZGF0YTtcbiAgICAgICAgLy8gTG9nIG1vZHVsZSBpbmZvXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35zY2FubmVkIH5sa34oJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Db250cm9sbGVycyhtb2R1bGUpO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBjb25zdCBtb2R1bGVUcmVlID0gbmV3IFRyZWUobW9kdWxlKTtcbiAgICAgICAgY29uc3Qgc2Nhbm5lZE1vZHVsZXMgPSBuZXcgTWFwPE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPiwgTW9kdWxlPigpO1xuICAgICAgICBzY2FubmVkTW9kdWxlcy5zZXQoY2xhc3NSZWYsIG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gaW1wb3J0ZWQgbW9kdWxlc1xuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydGVkTW9kdWxlIG9mIG1vZHVsZU1ldGFkYXRhLmltcG9ydHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2Nhbk1vZHVsZXMobW9kdWxlVHJlZS5yb290LCBpbXBvcnRlZE1vZHVsZSwgc2Nhbm5lZE1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVUcmVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2Nhbk1vZHVsZXMoXG4gICAgICAgIHBhcmVudE5vZGU6IFRyZWVOb2RlPE1vZHVsZT4sXG4gICAgICAgIGNsYXNzUmVmOiBOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4sXG4gICAgICAgIHNjYW5uZWRNb2R1bGVzID0gbmV3IE1hcDxOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4sIE1vZHVsZT4oKSxcbiAgICApIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgbW9kdWxlIGlzIGFscmVhZHkgaW1wb3J0ZWRcbiAgICAgICAgY29uc3Qgc2Nhbm5lZE1vZHVsZSA9IHNjYW5uZWRNb2R1bGVzLmdldChjbGFzc1JlZik7XG4gICAgICAgIGlmICghaXNOaWwoc2Nhbm5lZE1vZHVsZSkpIHtcbiAgICAgICAgICAgIHBhcmVudE5vZGUudmFsdWUucmVwZXRpdGl2ZUltcG9ydHMuYWRkKHNjYW5uZWRNb2R1bGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBSZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgICBjb25zdCBtb2R1bGVNZXRhZGF0YSA9IGF3YWl0IHRoaXMubW9kdWxlTWV0YWRhdGFSZWFkZXIucmVhZChjbGFzc1JlZik7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgICAgICB0aGlzLmNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5KHBhcmVudE5vZGUudmFsdWUubWV0YWRhdGEsIG1vZHVsZU1ldGFkYXRhKTtcbiAgICAgICAgLy8gQ3JlYXRlIG1vZHVsZSBpbnN0YW5jZVxuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgTW9kdWxlKCk7XG4gICAgICAgIG1vZHVsZS5tZXRhZGF0YSA9IG1vZHVsZU1ldGFkYXRhO1xuICAgICAgICBtb2R1bGUucGFyZW50ID0gcGFyZW50Tm9kZS52YWx1ZTtcbiAgICAgICAgLy8gTG9nIG1vZHVsZSBpbmZvXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35zY2FubmVkIH5sa34oJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Db250cm9sbGVycyhtb2R1bGUpO1xuICAgICAgICAvLyBBZGQgbW9kdWxlIHRvIHRyZWVcbiAgICAgICAgY29uc3QgdHJlZU5vZGUgPSBuZXcgVHJlZU5vZGUobW9kdWxlKTtcbiAgICAgICAgcGFyZW50Tm9kZS5hZGRDaGlsZCh0cmVlTm9kZSk7XG4gICAgICAgIC8vIEFkZCBtb2R1bGUgdG8gaW1wb3J0ZWQgbW9kdWxlcyBzZXQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzY2FubmluZ1xuICAgICAgICBzY2FubmVkTW9kdWxlcy5zZXQoY2xhc3NSZWYsIG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gaW1wb3J0ZWQgbW9kdWxlcyByZWN1cnNpdmVseVxuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydE1vZHVsZSBvZiBtb2R1bGVNZXRhZGF0YS5pbXBvcnRzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNjYW5Nb2R1bGVzKHRyZWVOb2RlLCBpbXBvcnRNb2R1bGUsIHNjYW5uZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2NhbkNvbnRyb2xsZXJzKG1vZHVsZTogTW9kdWxlKSB7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnNcbiAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0YWRhdGEgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlci5yZWFkKGNsYXNzUmVmKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YSA9IGNvbnRyb2xsZXJNZXRhZGF0YTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIgPSBtb2R1bGU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMucHVzaChjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fkNvbnRyb2xsZXIgfmxjfiR7Y2xhc3NSZWYubmFtZX0gfmx3fnNjYW5uZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5KHBhcmVudE1ldGFkYXRhOiBNb2R1bGVNZXRhZGF0YSwgbW9kdWxlTWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHBhcmVudCBtb2R1bGUgaXMgaW1wb3J0ZWQgaW4gbW9kdWxlXG4gICAgICAgIGlmIChtb2R1bGVNZXRhZGF0YS5pbXBvcnRzLmluY2x1ZGVzKHBhcmVudE1ldGFkYXRhLmNsYXNzUmVmKSkge1xuICAgICAgICAgICAgLy8gdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzY2FubmluZyB0aGUgbW9kdWxlIHRyZWUuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkNpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QU2NyaXB0RXZlbnQgaW1wbGVtZW50cyBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQsXG4gICAgKSB7fVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSh0aGlzLmV2ZW50TmFtZSwgdGhpcy5saXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgRXZlbnRFbW1pdGVyLCBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJhZ2VNUFNjcmlwdEV2ZW50IH0gZnJvbSAnLi9yYWdlbXAtc2NyaXB0LWV2ZW50LWhhbmRsZXInO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QRXZlbnRFbW1pdGVyIGltcGxlbWVudHMgRXZlbnRFbW1pdGVyIHtcbiAgICBwcml2YXRlIG1hcEV2ZW50c1NoYXJlZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgLy8gTWFwIGFsdDpWIGV2ZW50IG5hbWVzIHRvIFJhZ2VNUCBlcXVpdmFsZW50c1xuICAgICAgICAnZW50aXR5Q29sU2hhcGVFbnRlcic6ICdwbGF5ZXJFbnRlckNvbHNoYXBlJyxcbiAgICAgICAgJ2VudGl0eUNvbFNoYXBlTGVhdmUnOiAncGxheWVyRXhpdENvbHNoYXBlJyxcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXBFdmVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSkge31cblxuICAgIHByaXZhdGUgZ2V0RXZlbnROYW1lKGV2ZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwRXZlbnRzU2hhcmVkW2V2ZW50TmFtZV0gfHwgdGhpcy5tYXBFdmVudHNbZXZlbnROYW1lXSB8fCBldmVudE5hbWU7XG4gICAgfVxuXG4gICAgZW1pdChldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLmNhbGwoZXZlbnROYW1lLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50TmFtZSA9IHRoaXMuZ2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICAgIG1wLmV2ZW50cy5hZGQobWFwcGVkRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2NyaXB0RXZlbnQobWFwcGVkRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgb25jZShldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50TmFtZSA9IHRoaXMuZ2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICAgIGNvbnN0IG9uY2VXcmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKG1hcHBlZEV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICAgICAgbGlzdGVuZXIoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIG1wLmV2ZW50cy5hZGQobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2NyaXB0RXZlbnQobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgfVxuXG4gICAgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJUaW1lciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QVGltZXIgaW1wbGVtZW50cyBNdWx0aXBsYXllclRpbWVyIHtcbiAgICBwdWJsaWMgbGFzdFRpY2sgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgaWQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIGludGVydmFsOiBudW1iZXIgPSAwLFxuICAgICAgICBwdWJsaWMgb25jZTogYm9vbGVhbixcbiAgICAgICAgcHVibGljIGNhbGxiYWNrOiBGdW5jdGlvbixcbiAgICAgICAgcHJpdmF0ZSBjbGVhclRpbWVyOiBGdW5jdGlvbixcbiAgICApIHt9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBNdWx0aXBsYXllclRpbWVyLCBNdWx0aXBsYXllclRpbWVycyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QVGltZXIgfSBmcm9tICcuL3JhZ2VtcC10aW1lcic7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBUaW1lcnMgaW1wbGVtZW50cyBNdWx0aXBsYXllclRpbWVycyB7XG4gICAgcHJpdmF0ZSB0aW1lckluY3JlbWVudGVyOiBudW1iZXIgPSAwO1xuICAgIHByaXZhdGUgdGltZXJzID0gbmV3IE1hcDxudW1iZXIsIE11bHRpcGxheWVyVGltZXI+KCk7XG4gICAgcHJpdmF0ZSBldmVyeVRpY2tIYW5kbGVycyA9IG5ldyBNYXA8bnVtYmVyLCB7IGNhbGxiYWNrOiBGdW5jdGlvbjsgYm91bmQ6IEZ1bmN0aW9uIH0+KCk7XG4gICAgcHJpdmF0ZSBpc0V2ZXJ5VGlja1J1bm5pbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGV2ZXJ5VGlja01haW5IYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBnZXQgYWxsKCk6IE11bHRpcGxheWVyVGltZXJbXSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy50aW1lcnMudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgd2FybmluZ1RocmVzaG9sZCgpOiBudW1iZXIge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIHRoaXMgZmVhdHVyZVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHdhcm5pbmdUaHJlc2hvbGQoX3ZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSB0aGlzIGZlYXR1cmVcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSB0aGlzIGZlYXR1cmVcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KF92YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgdGhpcyBmZWF0dXJlXG4gICAgfVxuXG4gICAgZ2V0QnlJRChpZDogbnVtYmVyKTogTXVsdGlwbGF5ZXJUaW1lciB8IG51bGwge1xuICAgICAgICBjb25zdCB0aW1lciA9IHRoaXMudGltZXJzLmdldChpZCk7XG4gICAgICAgIHJldHVybiB0aW1lciA/PyBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVGltZXIoXG4gICAgICAgIGNyZWF0ZVRpbWVyOiAoLi4uYXJnczogYW55W10pID0+IG51bWJlcixcbiAgICAgICAgY2xlYXI6IChpZDogbnVtYmVyKSA9PiB2b2lkLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb24sXG4gICAgICAgIGludGVydmFsOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgICAgIG9uY2U6IGJvb2xlYW4sXG4gICAgICAgIC4uLmFyZ3M6IHVua25vd25bXVxuICAgICkge1xuICAgICAgICBjb25zdCBjYWxsYmFja0JpbmQgPSBjYWxsYmFjay5iaW5kKHRoaXMsIC4uLihBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFtdKSk7XG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSB0eXBlb2YgaW50ZXJ2YWwgPT09ICdudW1iZXInID8gY3JlYXRlVGltZXIoY2FsbGJhY2tCaW5kLCBpbnRlcnZhbCkgOiBjcmVhdGVUaW1lcihjYWxsYmFja0JpbmQpO1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMudGltZXJJbmNyZW1lbnRlcisrO1xuXG4gICAgICAgIGNvbnN0IHJhZ2VNUFRpbWVyID0gbmV3IFJhZ2VNUFRpbWVyKGlkLCBpbnRlcnZhbCA/PyAwLCBvbmNlLCBjYWxsYmFja0JpbmQsICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyKHRpbWVySWQpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgfVxuXG4gICAgc2V0SW50ZXJ2YWwoY2FsbGJhY2s6IEZ1bmN0aW9uLCB0aW1lOiBudW1iZXIsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUaW1lcihcbiAgICAgICAgICAgIChjYjogRnVuY3Rpb24sIGludGVydmFsOiBudW1iZXIpID0+IHNldEludGVydmFsKGNiIGFzICgpID0+IHZvaWQsIGludGVydmFsKSBhcyB1bmtub3duIGFzIG51bWJlcixcbiAgICAgICAgICAgIChpZDogbnVtYmVyKSA9PiBjbGVhckludGVydmFsKGlkKSxcbiAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgdGltZSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoY2FsbGJhY2s6IEZ1bmN0aW9uLCB0aW1lOiBudW1iZXIsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMudGltZXJJbmNyZW1lbnRlcisrO1xuICAgICAgICBjb25zdCBjYWxsYmFja0JpbmQgPSBjYWxsYmFjay5iaW5kKHRoaXMsIC4uLihBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFtdKSk7XG5cbiAgICAgICAgY29uc3QgdGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2tCaW5kKCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xuICAgICAgICB9LCB0aW1lKSBhcyB1bmtub3duIGFzIG51bWJlcjtcblxuICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgdGltZSwgdHJ1ZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50aW1lcnMuc2V0KGlkLCByYWdlTVBUaW1lcik7XG4gICAgICAgIHJldHVybiByYWdlTVBUaW1lcjtcbiAgICB9XG5cbiAgICBldmVyeVRpY2soY2FsbGJhY2s6IEZ1bmN0aW9uLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuXG4gICAgICAgIHRoaXMuZXZlcnlUaWNrSGFuZGxlcnMuc2V0KGlkLCB7IGNhbGxiYWNrLCBib3VuZDogY2FsbGJhY2tCaW5kIH0pO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uIGNsaWVudC1zaWRlIChyZW5kZXIgZXZlbnQgZXhpc3RzKSBvciBzZXJ2ZXItc2lkZVxuICAgICAgICBjb25zdCBpc0NsaWVudFNpZGUgPSB0eXBlb2YgbXAgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiAobXAgYXMgYW55KS5icm93c2VycyAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAgICAgLy8gU3RhcnQgdGhlIHRpY2sgbG9vcCBpZiBub3QgYWxyZWFkeSBydW5uaW5nXG4gICAgICAgIGlmICghdGhpcy5pc0V2ZXJ5VGlja1J1bm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFdmVyeVRpY2tSdW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGlzQ2xpZW50U2lkZSkge1xuICAgICAgICAgICAgICAgIC8vIENsaWVudC1zaWRlOiB1c2UgcmVuZGVyIGV2ZW50IGZvciBmcmFtZS1hY2N1cmF0ZSB0aWNraW5nXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVyeVRpY2tNYWluSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbLCBoYW5kbGVyXSBvZiB0aGlzLmV2ZXJ5VGlja0hhbmRsZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuYm91bmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcC5jb25zb2xlLmxvZ0Vycm9yKGBFcnJvciBpbiBldmVyeVRpY2sgaGFuZGxlcjogJHtlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtcC5ldmVudHMuYWRkKCdyZW5kZXInLCB0aGlzLmV2ZXJ5VGlja01haW5IYW5kbGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyLXNpZGU6IHVzZSBzZXRJbnRlcnZhbCB3aXRoIG1pbmltYWwgZGVsYXkgYXMgYXBwcm94aW1hdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGludGVydmFsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbLCBoYW5kbGVyXSBvZiB0aGlzLmV2ZXJ5VGlja0hhbmRsZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuYm91bmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcC5jb25zb2xlLmxvZ0Vycm9yKGBFcnJvciBpbiBldmVyeVRpY2sgaGFuZGxlcjogJHtlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAodGhpcyBhcyBhbnkpLl9ldmVyeVRpY2tJbnRlcnZhbCA9IHNldEludGVydmFsKGludGVydmFsSGFuZGxlciwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgMCwgZmFsc2UsIGNhbGxiYWNrQmluZCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ldmVyeVRpY2tIYW5kbGVycy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcblxuICAgICAgICAgICAgLy8gU3RvcCB0aGUgdGljayBsb29wIGlmIG5vIG1vcmUgaGFuZGxlcnNcbiAgICAgICAgICAgIGlmICh0aGlzLmV2ZXJ5VGlja0hhbmRsZXJzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNDbGllbnRTaWRlICYmIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSgncmVuZGVyJywgdGhpcy5ldmVyeVRpY2tNYWluSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRoaXMgYXMgYW55KS5fZXZlcnlUaWNrSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCgodGhpcyBhcyBhbnkpLl9ldmVyeVRpY2tJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzIGFzIGFueSkuX2V2ZXJ5VGlja0ludGVydmFsID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pc0V2ZXJ5VGlja1J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgfVxuXG4gICAgbmV4dFRpY2soY2FsbGJhY2s6IEZ1bmN0aW9uLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uIGNsaWVudC1zaWRlIChyZW5kZXIgZXZlbnQgZXhpc3RzKSBvciBzZXJ2ZXItc2lkZVxuICAgICAgICBjb25zdCBpc0NsaWVudFNpZGUgPSB0eXBlb2YgbXAgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiAobXAgYXMgYW55KS5icm93c2VycyAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAgICAgbGV0IHRpbWVySWQ6IGFueTtcblxuICAgICAgICBpZiAoaXNDbGllbnRTaWRlKSB7XG4gICAgICAgICAgICAvLyBDbGllbnQtc2lkZTogdXNlIHJlbmRlciBldmVudCBmb3IgbmV4dCBmcmFtZVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0JpbmQoKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKCdyZW5kZXInLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbXAuZXZlbnRzLmFkZCgncmVuZGVyJywgaGFuZGxlcik7XG5cbiAgICAgICAgICAgIGNvbnN0IHJhZ2VNUFRpbWVyID0gbmV3IFJhZ2VNUFRpbWVyKGlkLCAwLCB0cnVlLCBjYWxsYmFja0JpbmQsICgpID0+IHtcbiAgICAgICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKCdyZW5kZXInLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnRpbWVycy5zZXQoaWQsIHJhZ2VNUFRpbWVyKTtcbiAgICAgICAgICAgIHJldHVybiByYWdlTVBUaW1lcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNlcnZlci1zaWRlOiB1c2Ugc2V0SW1tZWRpYXRlIG9yIHNldFRpbWVvdXQoMCkgZm9yIG5leHQgdGlja1xuICAgICAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQmluZCgpO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJhZ2VNUFRpbWVyID0gbmV3IFJhZ2VNUFRpbWVyKGlkLCAwLCB0cnVlLCBjYWxsYmFja0JpbmQsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuc2V0KGlkLCByYWdlTVBUaW1lcik7XG4gICAgICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aW1lKF9uYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgY29uc29sZS50aW1lIGVxdWl2YWxlbnRcbiAgICAgICAgLy8gQ291bGQgaW1wbGVtZW50IGN1c3RvbSB0aW1pbmcgaWYgbmVlZGVkXG4gICAgfVxuXG4gICAgdGltZUVuZChfbmFtZT86IHN0cmluZykge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGNvbnNvbGUudGltZUVuZCBlcXVpdmFsZW50XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgRXZlbnRFbW1pdGVyLCBNdWx0aXBsYXllclNlcnZpY2UsIE11bHRpcGxheWVyVGltZXJzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSYWdlTVBFdmVudEVtbWl0ZXIgfSBmcm9tICcuL3JhZ2VtcC1ldmVudC1lbW1pdGVyJztcbmltcG9ydCB7IFJhZ2VNUFRpbWVycyB9IGZyb20gJy4vcmFnZW1wLXRpbWVycyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIFJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBpbXBsZW1lbnRzIE11bHRpcGxheWVyU2VydmljZSB7XG4gICAgcmVhZG9ubHkgVGltZXJzOiBNdWx0aXBsYXllclRpbWVycztcbiAgICByZWFkb25seSBFdmVudHM6IEV2ZW50RW1taXRlcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBSYWdlTVBFdmVudEVtbWl0ZXIoKTtcbiAgICAgICAgdGhpcy5UaW1lcnMgPSBuZXcgUmFnZU1QVGltZXJzKCk7XG4gICAgfVxuXG4gICAgcGFyc2VJbnRlcm5hbEFyZ3M8VSA9IHVua25vd24sIFQgPSB1bmtub3duPihcbiAgICAgICAgLi4uYXJnczogYW55XG4gICAgKToge1xuICAgICAgICBwbGF5ZXI/OiBVO1xuICAgICAgICBib2R5PzogVDtcbiAgICB9IHtcbiAgICAgICAgY29uc3QgcGxheWVyID0gKGlzT2JqZWN0KGFyZ3NbMF0pID8gYXJnc1swXSA6IHVuZGVmaW5lZCkgYXMgVTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGxheWVyLFxuICAgICAgICAgICAgYm9keTogYXJncyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBsb2coYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIG1wLmNvbnNvbGUubG9nSW5mbyhtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBsb2dFcnJvcihhcmc6IGFueSwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFthcmcsIC4uLmFyZ3NdLm1hcChhID0+XG4gICAgICAgICAgICB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhKSA6IFN0cmluZyhhKVxuICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgbXAuY29uc29sZS5sb2dFcnJvcihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBsb2dXYXJuaW5nKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBtcC5jb25zb2xlLmxvZ1dhcm5pbmcobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbG9nRGVidWcoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgYSBkZWRpY2F0ZWQgZGVidWcgbG9nLCB1c2UgaW5mb1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBtcC5jb25zb2xlLmxvZ0luZm8oYFtERUJVR10gJHttZXNzYWdlfWApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyB2YWxpZGF0ZUVycm9yRmlsdGVyLCB2YWxpZGF0ZUd1YXJkLCB2YWxpZGF0ZUludGVyY2VwdG9yLCB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi9zY2hlbWFzL2V2ZW50cyc7XG5pbXBvcnQge1xuICAgIElOVEVSTkFMX0FQUF9DT05UQUlORVIsXG4gICAgR0xPQkFMX0VSUk9SX0ZJTFRFUlMsXG4gICAgR0xPQkFMX0dVQVJEUyxcbiAgICBHTE9CQUxfSU5URVJDRVBUT1JTLFxuICAgIEdMT0JBTF9QSVBFUyxcbiAgICBFTkFCTEVfU0hVVERPV05fSE9PS1MsXG4gICAgUExVR0lOUyxcbiAgICBHTE9CQUxfQVBQX0NPTlRBSU5FUixcbiAgICBBUFBfRU5WSVJPTUVOVCxcbiAgICBNQU5HT19SRVFVRVNUX0ZBQ1RPUlksXG4gICAgTUFOR09fUkVTUE9OU0VfRkFDVE9SWSxcbiAgICBFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZLFxuICAgIENPTlRBSU5FUl9PUFRJT05TLFxuICAgIE1VTFRJUExBWUVSX1NFUlZJQ0UsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGluamVjdCwgQ29udGFpbmVyLCBpbmplY3RhYmxlLCB0eXBlIGludGVyZmFjZXMgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi9hcHAnO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciwgR3VhcmQsIEludGVyY2VwdG9yLCBNYW5nb1BsdWdpbiwgTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgICBDb250cm9sbGVyRXZlbnRIYW5kbGVyLFxuICAgIENvbnRyb2xsZXJGbG93SGFuZGxlcixcbiAgICBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIsXG4gICAgQ29udHJvbGxlclJQQ0hhbmRsZXIsXG4gICAgUGlwZWxpbmVIYW5kbGVyLFxufSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgTW9kdWxlLCBNb2R1bGVNZXRhZGF0YVJlYWRlciB9IGZyb20gJy4vbW9kdWxlJztcbmltcG9ydCB7IEFwcFJ1bnRpbWUsIE1vZHVsZURlcGVuZGVuY3lCaW5kZXIsIE1vZHVsZVRyZWVTY2FubmVyIH0gZnJvbSAnLi9tb2R1bGUtdHJlZSc7XG5pbXBvcnQgeyBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlLCBNYW5nb1JlcXVlc3RCYXNlLCBNYW5nb1Jlc3BvbnNlQmFzZSB9IGZyb20gJy4vcGlwZWxpbmUnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0VHlwZSB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgUkVGTEVDVE9SX1NFUlZJQ0UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUmVmbGVjdG9yU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcEJ1aWxkZXI8RyBleHRlbmRzIEd1YXJkID0gR3VhcmQsIEkgZXh0ZW5kcyBJbnRlcmNlcHRvciA9IEludGVyY2VwdG9yLCBFRiBleHRlbmRzIEVycm9yRmlsdGVyID0gRXJyb3JGaWx0ZXI+IHtcbiAgICBAaW5qZWN0KEFQUF9FTlZJUk9NRU5UKSBwcm90ZWN0ZWQgcmVhZG9ubHkgZW52aXJvbWVudDogc3RyaW5nO1xuICAgIEBpbmplY3QoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikgcHJvdGVjdGVkIHJlYWRvbmx5IGludGVybmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBwcm90ZWN0ZWQgcmVhZG9ubHkgbXVsdGlwbGF5ZXJTZXJ2aWNlOiBNdWx0aXBsYXllclNlcnZpY2U7XG4gICAgQGluamVjdChQTFVHSU5TKSBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXTtcblxuICAgIHByaXZhdGUgZ2xvYmFsQ29udGFpbmVyT3B0aW9uczogaW50ZXJmYWNlcy5Db250YWluZXJPcHRpb25zID0ge307XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsR3VhcmRzKC4uLmd1YXJkczogKE5ld2FibGU8Rz4gfCBHKVtdKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEd1YXJkczogKE5ld2FibGU8Rz4gfCBHKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ3VhcmQgb2YgZ3VhcmRzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlR3VhcmQoZ3VhcmQpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEd1YXJkcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfR1VBUkRTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkR3VhcmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZUdsb2JhbEludGVyY2VwdG9ycyguLi5pbnRlcmNlcHRvcnM6IChOZXdhYmxlPEk+IHwgSSlbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRJbnRlcmNlcHRvcnM6IChOZXdhYmxlPEk+IHwgSSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIGludGVyY2VwdG9ycykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUludGVyY2VwdG9yKGludGVyY2VwdG9yKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRJbnRlcmNlcHRvcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0lOVEVSQ0VQVE9SUykudG9Db25zdGFudFZhbHVlKHZhbGlkYXRlZEludGVyY2VwdG9ycyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VHbG9iYWxQaXBlcyguLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfUElQRVMpLnRvQ29uc3RhbnRWYWx1ZSh2YWxpZGF0ZWRQaXBlcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VHbG9iYWxGaWx0ZXJzKC4uLmZpbHRlcnM6IChOZXdhYmxlPEVGPiB8IEVGKVtdKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEZJbHRlcnM6IChOZXdhYmxlPEVGPiB8IEVGKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVFcnJvckZpbHRlcihmaWx0ZXIpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEZJbHRlcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0VSUk9SX0ZJTFRFUlMpLnRvQ29uc3RhbnRWYWx1ZSh2YWxpZGF0ZWRGSWx0ZXJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZVBsdWdpbnMoLi4ucGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXSkge1xuICAgICAgICBwbHVnaW5zLmZvckVhY2goKHApID0+IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChwKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCkpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbFBsdWdpbnMgPSB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmdldDxOZXdhYmxlPE1hbmdvUGx1Z2luPltdPihQTFVHSU5TKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5yZWJpbmQoUExVR0lOUykudG9Db25zdGFudFZhbHVlKFsuLi5pbnRlcm5hbFBsdWdpbnMsIC4uLnBsdWdpbnNdKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGVuYWJsZVNodXRkb3duSG9va3MoKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChFTkFCTEVfU0hVVERPV05fSE9PS1MpLnRvQ29uc3RhbnRWYWx1ZSh0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENvbnRhaW5lck9wdGlvbnMob3B0aW9uczogaW50ZXJmYWNlcy5Db250YWluZXJPcHRpb25zLCBvbmx5R2xvYmFsID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxDb250YWluZXJPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgaWYgKG9ubHlHbG9iYWwpIHJldHVybiB0aGlzO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ09OVEFJTkVSX09QVElPTlMpLnRvQ29uc3RhbnRWYWx1ZShvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxBcHBDb250YWluZXIgPSBuZXcgQ29udGFpbmVyKHRoaXMuZ2xvYmFsQ29udGFpbmVyT3B0aW9ucyk7XG4gICAgICAgIC8vIEdMb2JhbCBzZXJ2aWNlIGJpbmRpbmdzXG4gICAgICAgIGdsb2JhbEFwcENvbnRhaW5lci5iaW5kKFJFRkxFQ1RPUl9TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUoUmVmbGVjdG9yU2VydmljZSk7XG4gICAgICAgIGdsb2JhbEFwcENvbnRhaW5lci5iaW5kKFJlZmxlY3RvclNlcnZpY2UpLnRvU2VydmljZShSRUZMRUNUT1JfU0VSVklDRSk7XG5cbiAgICAgICAgLy8gTXVsdGlwbGF5ZXIgc2VydmljZSBiaW5kaW5nc1xuICAgICAgICBnbG9iYWxBcHBDb250YWluZXIuYmluZChNVUxUSVBMQVlFUl9TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUodGhpcy5tdWx0aXBsYXllclNlcnZpY2UpO1xuIFxuICAgICAgICAvLyBBcHAgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFwcCkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0FQUF9DT05UQUlORVIpLnRvQ29uc3RhbnRWYWx1ZShnbG9iYWxBcHBDb250YWluZXIpO1xuXG4gICAgICAgIC8vIE1vZHVsZSB0cmVlIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNb2R1bGVUcmVlU2Nhbm5lcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlRGVwZW5kZW5jeUJpbmRlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQXBwUnVudGltZSkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIEFwcCBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoUGlwZWxpbmVIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgLy8gTW9kdWxlIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNb2R1bGUpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1vZHVsZU1ldGFkYXRhUmVhZGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgLy8gQ29udHJvbGxlciBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlcikudG9TZWxmKCkuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyRmxvd0hhbmRsZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXJFdmVudEhhbmRsZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXJSUENIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgLy8gTWFuZ28gUmVxdWVzdCBhbmQgUmVzcG9uc2UgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1hbmdvUmVxdWVzdEJhc2UpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1BTkdPX1JFUVVFU1RfRkFDVE9SWSkudG9GYWN0b3J5KChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKGJvZHk6IHVua25vd24sIHBsYXllcjogUGxheWVyTXApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gY29udGV4dC5jb250YWluZXIuZ2V0KE1hbmdvUmVxdWVzdEJhc2UpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuJGJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuJHBsYXllciA9IHBsYXllcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTWFuZ29SZXNwb25zZUJhc2UpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkpLnRvRmFjdG9yeSgoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb250YWluZXIuZ2V0KE1hbmdvUmVzcG9uc2VCYXNlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoRXhlY3V0aW9uQ29udGV4dEJhc2UpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkpLnRvRmFjdG9yeSgoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZSxcbiAgICAgICAgICAgICAgICBjbGFzc1JlZjogTmV3YWJsZSxcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBGdW5jdGlvbixcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiBNYW5nb1JlcXVlc3RCYXNlLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBNYW5nb1Jlc3BvbnNlQmFzZSxcbiAgICAgICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRpb25Db250ZXh0ID0gY29udGV4dC5jb250YWluZXIuZ2V0KEV4ZWN1dGlvbkNvbnRleHRCYXNlKTtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiR0eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRyZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRyZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJGhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJGNsYXNzUmVmID0gY2xhc3NSZWY7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kbmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBQbHVnaW5zIGJpbmRpbmdzXG4gICAgICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHRoaXMucGx1Z2lucykge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKHBsdWdpbikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICAgICAgY29uc3QgcGx1Z2luSW5zdGFuY2UgPSB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmdldChwbHVnaW4pO1xuICAgICAgICAgICAgaWYgKCFwbHVnaW5JbnN0YW5jZS5vbkJ1aWxkKSBjb250aW51ZTtcbiAgICAgICAgICAgIGF3YWl0IHBsdWdpbkluc3RhbmNlLm9uQnVpbGQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9HVUFSRFMpKSB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0dVQVJEUykudG9Db25zdGFudFZhbHVlKFtdKTtcbiAgICAgICAgaWYgKCF0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmlzQm91bmQoR0xPQkFMX0lOVEVSQ0VQVE9SUykpXG4gICAgICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0lOVEVSQ0VQVE9SUykudG9Db25zdGFudFZhbHVlKFtdKTtcbiAgICAgICAgaWYgKCF0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmlzQm91bmQoR0xPQkFMX1BJUEVTKSkgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9QSVBFUykudG9Db25zdGFudFZhbHVlKFtdKTtcbiAgICAgICAgaWYgKCF0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmlzQm91bmQoR0xPQkFMX0VSUk9SX0ZJTFRFUlMpKVxuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9FUlJPUl9GSUxURVJTKS50b0NvbnN0YW50VmFsdWUoW10pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmdldChBcHApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIsIGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBNb2R1bGVEZXBlbmRlbmN5QmluZGVyLCBNb2R1bGVUcmVlU2Nhbm5lciB9IGZyb20gJy4vbW9kdWxlLXRyZWUnO1xuaW1wb3J0IHsgTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGUvbW9kdWxlJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IElOVEVSTkFMX0FQUF9DT05UQUlORVIsIFBMVUdJTlMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBSdW50aW1lIH0gZnJvbSAnLi9tb2R1bGUtdHJlZSc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUGx1Z2luIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvcmUvbWFuZ28tcGx1Z2luLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFRyZWUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHR5cGUgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBwIHtcbiAgICBAaW5qZWN0KE1vZHVsZVRyZWVTY2FubmVyKSBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZVRyZWVTY2FubmVyOiBNb2R1bGVUcmVlU2Nhbm5lcjtcbiAgICBAaW5qZWN0KE1vZHVsZURlcGVuZGVuY3lCaW5kZXIpIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlRGVwZW5kZW5jeUJpbmRlcjogTW9kdWxlRGVwZW5kZW5jeUJpbmRlcjtcbiAgICBAaW5qZWN0KEFwcFJ1bnRpbWUpIHByaXZhdGUgcmVhZG9ubHkgYXBwUnVudGltZTogQXBwUnVudGltZTtcbiAgICBAaW5qZWN0KElOVEVSTkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWxBcHBDb250YWluZXI6IENvbnRhaW5lcjtcbiAgICBAaW5qZWN0KFBMVUdJTlMpIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXTtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgcHJpdmF0ZSBtb2R1bGVUcmVlOiBUcmVlPE1vZHVsZT47XG4gICAgcHJpdmF0ZSBsb2FkZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBhc3luYyBzdGFydDxUPihyb290TW9kdWxlOiBOZXdhYmxlPFQ+KSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBzdGFydGluZyB0aGUgYXBwLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BcHBBbHJlYWR5TG9hZGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+U3RhcnRpbmcgYXBwLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYmVmb3JlU3RhcnQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+U2Nhbm5pbmcgbW9kdWxlIHRyZWUuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVTY2FuJyk7XG4gICAgICAgIHRoaXMubW9kdWxlVHJlZSA9IGF3YWl0IHRoaXMubW9kdWxlVHJlZVNjYW5uZXIuc2Nhbihyb290TW9kdWxlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlclNjYW4nKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+QmluZGluZyBtb2R1bGUgZGVwZW5kZW5jaWVzLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYmVmb3JlQmluZCcpO1xuICAgICAgICBhd2FpdCB0aGlzLm1vZHVsZURlcGVuZGVuY3lCaW5kZXIuYmluZCh0aGlzLm1vZHVsZVRyZWUpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2FmdGVyQmluZCcpO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35Mb2FkaW5nIGFwcC4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZUxvYWQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBSdW50aW1lLmJvb3QodGhpcy5tb2R1bGVUcmVlKTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2FmdGVyTG9hZCcpO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35BcHAgbG9hZGVkJyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlclN0YXJ0Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0b3AoKSB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgc3RvcHBpbmcgdGhlIGFwcC4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXBwTm90TG9hZGVkKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZVN0b3AnKTtcbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3flN0b3BwaW5nIGFwcC4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcFJ1bnRpbWUuc2h1dGRvd24odGhpcy5tb2R1bGVUcmVlKTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3fkFwcCBzdG9wcGVkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJTdG9wJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBydW5QbHVnaW5NZXRob2RzKG1ldGhvZDoga2V5b2YgTWFuZ29QbHVnaW4pIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQocCk7XG4gICAgICAgICAgICAgICAgaWYgKCFwbHVnaW5bbWV0aG9kXSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGx1Z2luW21ldGhvZF0hKCkpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTUVOVCwgSU5URVJOQUxfQVBQX0NPTlRBSU5FUiwgTVVMVElQTEFZRVJfU0VSVklDRSwgUExVR0lOUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWFuZ29QbHVnaW4sIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IEFwcEVudmlyb21lbnQgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQXBwQnVpbGRlciB9IGZyb20gJy4vYXBwLWJ1aWxkZXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwQnVpbGRlcjxUIGV4dGVuZHMgQXBwQnVpbGRlcj4oe1xuICAgIGVudmlyb21lbnQsXG4gICAgcGx1Z2lucyxcbiAgICBhcHBCdWlsZGVySW5oZXJpdCxcbiAgICBtdWx0aXBsYXllclNlcnZpY2UsXG59OiB7XG4gICAgZW52aXJvbWVudDogQXBwRW52aXJvbWVudDtcbiAgICBwbHVnaW5zOiBOZXdhYmxlPE1hbmdvUGx1Z2luPltdO1xuICAgIGFwcEJ1aWxkZXJJbmhlcml0OiBOZXdhYmxlPFQ+O1xuICAgIG11bHRpcGxheWVyU2VydmljZT86IE11bHRpcGxheWVyU2VydmljZTtcbn0pIHtcbiAgICBjb25zdCBpbnRlcm5hbEFwcENvbnRhaW5lciA9IG5ldyBDb250YWluZXIoKTtcblxuICAgIGlmIChtdWx0aXBsYXllclNlcnZpY2UpIGludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTVVMVElQTEFZRVJfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKG11bHRpcGxheWVyU2VydmljZSk7XG4gICAgaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChJTlRFUk5BTF9BUFBfQ09OVEFJTkVSKS50b0NvbnN0YW50VmFsdWUoaW50ZXJuYWxBcHBDb250YWluZXIpO1xuICAgIGludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQVBQX0VOVklST01FTlQpLnRvQ29uc3RhbnRWYWx1ZShlbnZpcm9tZW50KTtcbiAgICBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFBMVUdJTlMpLnRvQ29uc3RhbnRWYWx1ZShwbHVnaW5zKTtcbiAgICBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKGFwcEJ1aWxkZXJJbmhlcml0KS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICByZXR1cm4gaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KGFwcEJ1aWxkZXJJbmhlcml0KTtcbn1cbiIsICJpbXBvcnQgeyBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXksIHR5cGUgRXZlbnRNZXRhZGF0YSwgdHlwZSBQaXBlbGluZU1ldGFkYXRhIH0gZnJvbSAnLi4vYXBwJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKHR5cGU6IEV2ZW50TWV0YWRhdGFbJ3R5cGUnXSwgbmFtZT86IHN0cmluZywgd2ViVmlld0lkPzogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIDxNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbChuYW1lKSAmJiAhaXNTdHJpbmcobmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXZlbnROYW1lTXVzdEJlU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBuYW1lID8/IG1ldGhvZDtcblxuICAgICAgICBjb25zdCBldmVudHMgPVxuICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxPbWl0PEV2ZW50TWV0YWRhdGEsICdwYXJhbXMnIHwga2V5b2YgUGlwZWxpbmVNZXRhZGF0YT5bXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJFdmVudHMsIHRhcmdldCkgPz8gW107XG5cbiAgICAgICAgaWYgKGV2ZW50cy5zb21lKChldmVudCkgPT4gZXZlbnQubWV0aG9kID09PSBtZXRob2QgJiYgZXZlbnQubmFtZSA9PT0gbmFtZSAmJiBldmVudC50eXBlID09PSB0eXBlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5hbWVNdXN0QmVVbmlxdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxPbWl0PEV2ZW50TWV0YWRhdGEsICdwYXJhbXMnIHwga2V5b2YgUGlwZWxpbmVNZXRhZGF0YT5bXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlckV2ZW50cyxcbiAgICAgICAgICAgIFsuLi5ldmVudHMsIHsgbWV0aG9kLCBuYW1lLCB0eXBlLCB3ZWJWaWV3SWQgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uSW50ZXJuYWwoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uSW50ZXJuYWwnLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXcoaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbldlYlZpZXcnLCBldmVudE5hbWUsIGlkKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT24oZXZlbnROYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbicsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VJbnRlcm5hbChldmVudE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25jZUludGVybmFsJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZShldmVudE5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uY2UnLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2ViVmlldyhpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uY2VXZWJWaWV3JywgZXZlbnROYW1lLCBpZCk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBCb2R5KC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCBwaXBlczogdmFsaWRhdGVkUGlwZXMsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5Cb2R5LCBkYXRhOiB1bmRlZmluZWQsIG1ldGF0eXBlIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbmRleChrZXk6IG51bWJlciwgLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICghaXNOdW1iZXIoa2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbmRleEtleU11c3RCZU51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgcGlwZXM6IHZhbGlkYXRlZFBpcGVzLCB0eXBlOiBNZXRob2RQYXJhbVR5cGUuSW5kZXgsIGRhdGE6IGtleSwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgdHlwZTogTWV0aG9kUGFyYW1UeXBlLlJlcXVlc3QsIGRhdGE6IHVuZGVmaW5lZCwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXEoKSB7XG4gICAgcmV0dXJuIFJlcXVlc3QoKTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gUGFyYW0oa2V5OiBzdHJpbmcsIC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoIWlzU3RyaW5nKGtleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUGFyYW1LZXlNdXN0QmVTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICBbLi4ucGFyYW1zLCB7IGluZGV4LCBtZXRob2QsIGRhdGE6IGtleSwgcGlwZXM6IHZhbGlkYXRlZFBpcGVzLCB0eXBlOiBNZXRob2RQYXJhbVR5cGUuUGFyYW0sIG1ldGF0eXBlIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZSgpIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCB0eXBlOiBNZXRob2RQYXJhbVR5cGUuUmVzcG9uc2UsIGRhdGE6IHVuZGVmaW5lZCwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXMoKSB7XG4gICAgcmV0dXJuIFJlc3BvbnNlKCk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBHdWFyZCB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlR3VhcmQgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUd1YXJkcyguLi5ndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdKSB7XG4gICAgcmV0dXJuIDxDbGFzc0RlY29yYXRvciAmIE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q/OiBzdHJpbmcsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkR3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIGd1YXJkcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUd1YXJkKGd1YXJkKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRHdWFyZHMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKGRlc2NyaXB0b3IpICYmICFpc05pbChkZXNjcmlwdG9yLnZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGd1YXJkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWV0aG9kR3VhcmRzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEd1YXJkPltdPihDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCkgfHwgW107XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIFsuLi52YWxpZGF0ZWRHdWFyZHMsIC4uLm1ldGhvZEd1YXJkc10sIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKTtcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGd1YXJkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUd1YXJkUmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xhc3NHdWFyZHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8R3VhcmQ+W10+KENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIHRhcmdldCkgfHwgW107XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgWy4uLnZhbGlkYXRlZEd1YXJkcywgLi4uY2xhc3NHdWFyZHNdLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUludGVyY2VwdG9yIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSkge1xuICAgIHJldHVybiA8Q2xhc3NEZWNvcmF0b3IgJiBNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kPzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVJbnRlcmNlcHRvcihpbnRlcmNlcHRvcik7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkSW50ZXJjZXB0b3JzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChkZXNjcmlwdG9yKSAmJiAhaXNOaWwoZGVzY3JpcHRvci52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChpbnRlcmNlcHRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lSW50ZXJjZXB0b3JSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZEludGVyY2VwdG9ycyA9XG4gICAgICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEludGVyY2VwdG9yPltdPihDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCkgfHwgW107XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuICAgICAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgWy4uLnZhbGlkYXRlZEludGVyY2VwdG9ycywgLi4ubWV0aG9kSW50ZXJjZXB0b3JzXSxcbiAgICAgICAgICAgICAgICB0YXJnZXQuY29uc3RydWN0b3IsXG4gICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUludGVyY2VwdG9yUmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xhc3NJbnRlcmNlcHRvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8SW50ZXJjZXB0b3I+W10+KENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIHRhcmdldCkgfHwgW107XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycywgWy4uLnZhbGlkYXRlZEludGVyY2VwdG9ycywgLi4uY2xhc3NJbnRlcmNlcHRvcnNdLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VQaXBlcyguLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSB7XG4gICAgcmV0dXJuIDxDbGFzc0RlY29yYXRvciAmIE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q/OiBzdHJpbmcsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChkZXNjcmlwdG9yKSAmJiAhaXNOaWwoZGVzY3JpcHRvci52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChwaXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVQaXBlUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtZXRob2RQaXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxQaXBlPltdPihDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKSB8fCBbXTtcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCBbLi4udmFsaWRhdGVkUGlwZXMsIC4uLm1ldGhvZFBpcGVzXSwgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVQaXBlUmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xhc3NQaXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxQaXBlPltdPihDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIHRhcmdldCkgfHwgW107XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCBbLi4udmFsaWRhdGVkUGlwZXMsIC4uLmNsYXNzUGlwZXNdLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IGlzTmlsLCBpc051bWJlciwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXksIHR5cGUgUGlwZWxpbmVNZXRhZGF0YSwgdHlwZSBSUENNZXRhZGF0YSB9IGZyb20gJy4uL2FwcCc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSUENEZWNvcmF0b3IodHlwZTogUlBDTWV0YWRhdGFbJ3R5cGUnXSwgbmFtZT86IHN0cmluZywgd2ViVmlld0lkPzogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIDxNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbCh3ZWJWaWV3SWQpICYmICFpc1N0cmluZyh3ZWJWaWV3SWQpICYmICFpc051bWJlcih3ZWJWaWV3SWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLldlYlZpZXdJZE11c3RCZVN0cmluZ09yTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOaWwobmFtZSkgJiYgIWlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ05hbWVNdXN0QmVTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmFtZSA9IG5hbWUgPz8gbWV0aG9kO1xuXG4gICAgICAgIGNvbnN0IHJwY3MgPVxuICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxPbWl0PFJQQ01ldGFkYXRhLCAncGFyYW1zJyB8IGtleW9mIFBpcGVsaW5lTWV0YWRhdGE+W10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUlBDcywgdGFyZ2V0KSA/PyBbXTtcblxuICAgICAgICBpZiAocnBjcy5zb21lKChycGMpID0+IHJwYy5tZXRob2QgPT09IG1ldGhvZCAmJiBycGMubmFtZSA9PT0gbmFtZSAmJiBycGMudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDTmFtZU11c3RCZVVuaXF1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE9taXQ8UlBDTWV0YWRhdGEsICdwYXJhbXMnIHwga2V5b2YgUGlwZWxpbmVNZXRhZGF0YT5bXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclJQQ3MsXG4gICAgICAgICAgICBbLi4ucnBjcywgeyBtZXRob2QsIG5hbWUsIHR5cGUsIHdlYlZpZXdJZCB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVSUENEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtcnBjLWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblJlcXVlc3QocnBjTmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVSUENEZWNvcmF0b3IoJ29uUmVxdWVzdCcsIHJwY05hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVJQQ0RlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ycGMtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlld1JlcXVlc3QoaWQ6IHN0cmluZyB8IG51bWJlciwgcnBjTmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVSUENEZWNvcmF0b3IoJ29uV2ViVmlld1JlcXVlc3QnLCBycGNOYW1lLCBpZCk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5LCB0eXBlIFRpbWVyTWV0YWRhdGEgfSBmcm9tICcuLi9hcHAnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGltZXJEZWNvcmF0b3IodHlwZTogVGltZXJNZXRhZGF0YVsndHlwZSddLCBuYW1lPzogc3RyaW5nLCBvcHRpb25zPzogVGltZXJNZXRhZGF0YVsnb3B0aW9ucyddKSB7XG4gICAgcmV0dXJuIDxNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbChuYW1lKSAmJiAhaXNTdHJpbmcobmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuVGltZXJOYW1lTXVzdEJlU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBuYW1lID8/IG1ldGhvZDtcblxuICAgICAgICBjb25zdCB0aW1lcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPFRpbWVyTWV0YWRhdGFbXT4oQ29yZU1ldGFkYXRhS2V5LlRpbWVycywgdGFyZ2V0KSA/PyBbXTtcblxuICAgICAgICBpZiAodGltZXJzLnNvbWUoKHRpbWVyKSA9PiB0aW1lci5tZXRob2QgPT09IG1ldGhvZCAmJiB0aW1lci5uYW1lID09PSBuYW1lICYmIHRpbWVyLnR5cGUgPT09IHR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkV2ZW50TmFtZU11c3RCZVVuaXF1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPFRpbWVyTWV0YWRhdGFbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuVGltZXJzLFxuICAgICAgICAgICAgWy4uLnRpbWVycywgPFRpbWVyTWV0YWRhdGE+eyBtZXRob2QsIG5hbWUsIHR5cGUsIG9wdGlvbnMgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDcm9uT3B0aW9ucyB9IGZyb20gJ2Nyb25lcic7XG5pbXBvcnQgeyBjcmVhdGVUaW1lckRlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS10aW1lci5kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gQ3JvbihwYXR0ZXJuOiBzdHJpbmcgfCBEYXRlLCBvcHRpb25zOiBDcm9uT3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRpbWVyRGVjb3JhdG9yKCdjcm9uJywgb3B0aW9ucy5uYW1lLCB7IHBhdHRlcm4sIC4uLm9wdGlvbnMgfSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlVGltZXJEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtdGltZXIuZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZXJ5VGljayhuYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRpbWVyRGVjb3JhdG9yKCdldmVyeXRpY2snLCBuYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVRpbWVyRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXRpbWVyLmRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbnRlcnZhbCh0aW1lb3V0OiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gSW50ZXJ2YWwobmFtZTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gSW50ZXJ2YWwobmFtZU9yVGltZW91dDogc3RyaW5nIHwgbnVtYmVyLCB0aW1lb3V0PzogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yIHtcbiAgICBjb25zdCBbbmFtZSwgaW50ZXJ2YWxUaW1lb3V0XSA9IGlzU3RyaW5nKG5hbWVPclRpbWVvdXQpID8gW25hbWVPclRpbWVvdXQsIHRpbWVvdXRdIDogW3VuZGVmaW5lZCwgbmFtZU9yVGltZW91dF07XG4gICAgcmV0dXJuIGNyZWF0ZVRpbWVyRGVjb3JhdG9yKCdpbnRlcnZhbCcsIG5hbWUsIHsgdGltZW91dDogaW50ZXJ2YWxUaW1lb3V0ISB9KTtcbn1cbiIsICJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVRpbWVyRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXRpbWVyLmRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lb3V0KHRpbWVvdXQ6IG51bWJlcik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBUaW1lb3V0KG5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBUaW1lb3V0KG5hbWVPclRpbWVvdXQ6IHN0cmluZyB8IG51bWJlciwgdGltZW91dD86IG51bWJlcik6IE1ldGhvZERlY29yYXRvciB7XG4gICAgY29uc3QgW25hbWUsIGludGVydmFsVGltZW91dF0gPSBpc1N0cmluZyhuYW1lT3JUaW1lb3V0KSA/IFtuYW1lT3JUaW1lb3V0LCB0aW1lb3V0XSA6IFt1bmRlZmluZWQsIG5hbWVPclRpbWVvdXRdO1xuICAgIHJldHVybiBjcmVhdGVUaW1lckRlY29yYXRvcigndGltZW91dCcsIG5hbWUsIHsgdGltZW91dDogaW50ZXJ2YWxUaW1lb3V0ISB9KTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gYXBwbHlEZWNvcmF0b3JzKC4uLmRlY29yYXRvcnM6IChDbGFzc0RlY29yYXRvciB8IE1ldGhvZERlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yKVtdKSB7XG4gICAgcmV0dXJuIDxURnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiwgWT4oXG4gICAgICAgIHRhcmdldDogVEZ1bmN0aW9uIHwgT2JqZWN0LFxuICAgICAgICBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLFxuICAgICAgICBkZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxZPixcbiAgICApID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBkZWNvcmF0b3Igb2YgZGVjb3JhdG9ycykge1xuICAgICAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmICFkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgKDxDbGFzc0RlY29yYXRvcj5kZWNvcmF0b3IpKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoPE1ldGhvZERlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yPmRlY29yYXRvcikodGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dCwgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyYW1EZWNvcmF0b3I8VElucHV0ID0gdW5rbm93biwgVE91dHB1dCA9IHVua25vd24+KGZhY3Rvcnk6IChkYXRhOiBUSW5wdXQsIGN0eDogRXhlY3V0aW9uQ29udGV4dCkgPT4gVE91dHB1dCkge1xuICAgIHJldHVybiA8VElucHV0ID0gdW5rbm93bj4oZGF0YT86IFRJbnB1dCwgLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkgPT4ge1xuICAgICAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGlwZXM6IHZhbGlkYXRlZFBpcGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0aG9kUGFyYW1UeXBlLkN1c3RvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcnk6IDwoZGF0YTogdW5rbm93biwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCkgPT4gdW5rbm93bj5mYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF0eXBlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgTGF6eVNlcnZpY2VJZGVudGlmZXIsIHR5cGUgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkUmVmPFQgPSB1bmtub3duPihmbjogKCkgPT4gaW50ZXJmYWNlcy5TZXJ2aWNlSWRlbnRpZmllcjxUPikge1xuICAgIHJldHVybiBuZXcgTGF6eVNlcnZpY2VJZGVudGlmZXI8VD4oZm4pO1xufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IENyb24sIHR5cGUgQ3Jvbk9wdGlvbnMgfSBmcm9tICdjcm9uZXInO1xuaW1wb3J0IHsgTVVMVElQTEFZRVJfU0VSVklDRSwgdHlwZSBNdWx0aXBsYXllclNlcnZpY2UsIHR5cGUgTXVsdGlwbGF5ZXJUaW1lciB9IGZyb20gJy4uL2FwcCc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaW1lclNlcnZpY2Uge1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBsYXllclNlcnZpY2U6IE11bHRpcGxheWVyU2VydmljZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICRldmVyeXRpY2tzID0gbmV3IE1hcDxzdHJpbmcsIE11bHRpcGxheWVyVGltZXI+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkaW50ZXJ2YWxzID0gbmV3IE1hcDxzdHJpbmcsIE11bHRpcGxheWVyVGltZXI+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkdGltZW91dHMgPSBuZXcgTWFwPHN0cmluZywgTXVsdGlwbGF5ZXJUaW1lcj4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICRjcm9ucyA9IG5ldyBNYXA8c3RyaW5nLCBDcm9uPigpO1xuXG4gICAgcHVibGljIGdldCBhbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuYWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXZlcnl0aWNrcygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLiRldmVyeXRpY2tzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGludGVydmFscygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLiRpbnRlcnZhbHMudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGltZW91dHMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kdGltZW91dHMudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3JvbnMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kY3JvbnMudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgd2FybmluZ1RocmVzaG9sZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy53YXJuaW5nVGhyZXNob2xkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB3YXJuaW5nVGhyZXNob2xkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLndhcm5pbmdUaHJlc2hvbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlQ3JvbkpvYihjYWxsYmFjazogRnVuY3Rpb24sIG9wdGlvbnM6IENyb25PcHRpb25zICYgeyBwYXR0ZXJuOiBzdHJpbmcgfCBEYXRlIH0pIHtcbiAgICAgICAgY29uc3QgeyBwYXR0ZXJuLCAuLi5jcm9uT3B0aW9ucyB9ID0gb3B0aW9ucztcblxuICAgICAgICBjb25zdCBjcm9uID0gQ3JvbihwYXR0ZXJuLCBjcm9uT3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucy5uYW1lKSkgdGhpcy4kY3JvbnMuc2V0KG9wdGlvbnMubmFtZSwgY3Jvbik7XG5cbiAgICAgICAgcmV0dXJuIGNyb247XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUludGVydmFsKGNhbGxiYWNrOiBGdW5jdGlvbiwgaW50ZXJ2YWw6IG51bWJlciwgbmFtZT86IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aW1lciA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5zZXRJbnRlcnZhbChjYWxsYmFjaywgaW50ZXJ2YWwpO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHRoaXMuJGludGVydmFscy5zZXQobmFtZSwgdGltZXIpO1xuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVRpbWVvdXQoY2FsbGJhY2s6IEZ1bmN0aW9uLCB0aW1lb3V0OiBudW1iZXIsIG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCk7XG4gICAgICAgIGlmIChpc1N0cmluZyhuYW1lKSkgdGhpcy4kdGltZW91dHMuc2V0KG5hbWUsIHRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVFdmVyeVRpY2soY2FsbGJhY2s6IEZ1bmN0aW9uLCBuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLmV2ZXJ5VGljayhjYWxsYmFjayk7XG4gICAgICAgIGlmIChpc1N0cmluZyhuYW1lKSkgdGhpcy4kZXZlcnl0aWNrcy5zZXQobmFtZSwgdGltZXIpO1xuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZSh0eXBlOiAnY3JvbicgfCAnZXZlcnl0aWNrJyB8ICd0aW1lb3V0JyB8ICdpbnRlcnZhbCcsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Nyb24nOlxuICAgICAgICAgICAgICAgIGNvbnN0IGNyb25Kb2IgPSB0aGlzLiRjcm9ucy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNyb25Kb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JvbkpvYi5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGNyb25zLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdldmVyeXRpY2snOlxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZXJ5dGljayA9IHRoaXMuJGV2ZXJ5dGlja3MuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChldmVyeXRpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlcnl0aWNrLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZXZlcnl0aWNrcy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaW50ZXJ2YWwnOlxuICAgICAgICAgICAgICAgIGNvbnN0IGludGVydmFsID0gdGhpcy4kaW50ZXJ2YWxzLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWwuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRpbnRlcnZhbHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLiR0aW1lb3V0cy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXRzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlOYW1lKHR5cGU6ICdjcm9uJyB8ICdldmVyeXRpY2snIHwgJ3RpbWVvdXQnIHwgJ2ludGVydmFsJywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY3Jvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGNyb25zLmdldChuYW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ2V2ZXJ5dGljayc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGV2ZXJ5dGlja3MuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgY2FzZSAnaW50ZXJ2YWwnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRpbnRlcnZhbHMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHRpbWVvdXRzLmdldChuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeUlkKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5nZXRCeUlEKGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdGltZShuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMudGltZShuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdGltZUVuZChuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMudGltZUVuZChuYW1lKTtcbiAgICB9XG59XG4iLCAiZnVuY3Rpb24gbWluaXR6KHksbSxkLGgsaSxzLHR6LHRocm93T25JbnZhbGlkKXtyZXR1cm4gbWluaXR6LmZyb21UWihtaW5pdHoudHAoeSxtLGQsaCxpLHMsdHopLHRocm93T25JbnZhbGlkKX1taW5pdHouZnJvbVRaSVNPPShsb2NhbFRpbWVTdHIsdHosdGhyb3dPbkludmFsaWQpPT57cmV0dXJuIG1pbml0ei5mcm9tVFoocGFyc2VJU09Mb2NhbChsb2NhbFRpbWVTdHIsdHopLHRocm93T25JbnZhbGlkKX07bWluaXR6LmZyb21UWj1mdW5jdGlvbih0cCx0aHJvd09uSW52YWxpZCl7Y29uc3QgaW5EYXRlPW5ldyBEYXRlKERhdGUuVVRDKHRwLnksdHAubS0xLHRwLmQsdHAuaCx0cC5pLHRwLnMpKSxvZmZzZXQ9Z2V0VGltZXpvbmVPZmZzZXQodHAudHosaW5EYXRlKSxkYXRlR3Vlc3M9bmV3IERhdGUoaW5EYXRlLmdldFRpbWUoKS1vZmZzZXQpLGRhdGVPZmZzR3Vlc3M9Z2V0VGltZXpvbmVPZmZzZXQodHAudHosZGF0ZUd1ZXNzKTtpZihkYXRlT2Zmc0d1ZXNzLW9mZnNldD09PTApe3JldHVybiBkYXRlR3Vlc3N9ZWxzZXtjb25zdCBkYXRlR3Vlc3MyPW5ldyBEYXRlKGluRGF0ZS5nZXRUaW1lKCktZGF0ZU9mZnNHdWVzcyksZGF0ZU9mZnNHdWVzczI9Z2V0VGltZXpvbmVPZmZzZXQodHAudHosZGF0ZUd1ZXNzMik7aWYoZGF0ZU9mZnNHdWVzczItZGF0ZU9mZnNHdWVzcz09PTApe3JldHVybiBkYXRlR3Vlc3MyfWVsc2UgaWYoIXRocm93T25JbnZhbGlkJiZkYXRlT2Zmc0d1ZXNzMi1kYXRlT2Zmc0d1ZXNzPjApe3JldHVybiBkYXRlR3Vlc3MyfWVsc2UgaWYoIXRocm93T25JbnZhbGlkKXtyZXR1cm4gZGF0ZUd1ZXNzfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIHBhc3NlZCB0byBmcm9tVFooKVwiKX19fTttaW5pdHoudG9UWj1mdW5jdGlvbihkLHR6U3RyKXtjb25zdCBsb2NhbERhdGVTdHJpbmc9ZC50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIse3RpbWVab25lOnR6U3RyfSkucmVwbGFjZSgvW1xcdTIwMmZdLyxcIiBcIik7Y29uc3QgdGQ9bmV3IERhdGUobG9jYWxEYXRlU3RyaW5nKTtyZXR1cm57eTp0ZC5nZXRGdWxsWWVhcigpLG06dGQuZ2V0TW9udGgoKSsxLGQ6dGQuZ2V0RGF0ZSgpLGg6dGQuZ2V0SG91cnMoKSxpOnRkLmdldE1pbnV0ZXMoKSxzOnRkLmdldFNlY29uZHMoKSx0ejp0elN0cn19O21pbml0ei50cD0oeSxtLGQsaCxpLHMsdHopPT57cmV0dXJue3k6eSxtOm0sZDpkLGg6aCxpOmksczpzLHR6OnR6fX07ZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXQodGltZVpvbmUsZGF0ZT1uZXcgRGF0ZSl7Y29uc3QgdHo9ZGF0ZS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIse3RpbWVab25lOnRpbWVab25lLHRpbWVab25lTmFtZTpcInNob3J0T2Zmc2V0XCJ9KS5zcGxpdChcIiBcIikuc2xpY2UoLTEpWzBdO2NvbnN0IGRhdGVTdHJpbmc9ZGF0ZS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIpLnJlcGxhY2UoL1tcXHUyMDJmXS8sXCIgXCIpO3JldHVybiBEYXRlLnBhcnNlKGAke2RhdGVTdHJpbmd9IEdNVGApLURhdGUucGFyc2UoYCR7ZGF0ZVN0cmluZ30gJHt0en1gKX1mdW5jdGlvbiBwYXJzZUlTT0xvY2FsKGR0U3RyLHR6KXtjb25zdCBwZD1uZXcgRGF0ZShEYXRlLnBhcnNlKGR0U3RyKSk7aWYoaXNOYU4ocGQpKXt0aHJvdyBuZXcgRXJyb3IoXCJtaW5pdHo6IEludmFsaWQgSVNPODYwMSBwYXNzZWQgdG8gcGFyc2VyLlwiKX1jb25zdCBzdHJpbmdFbmQ9ZHRTdHIuc3Vic3RyaW5nKDkpO2lmKGR0U3RyLmluY2x1ZGVzKFwiWlwiKXx8c3RyaW5nRW5kLmluY2x1ZGVzKFwiLVwiKXx8c3RyaW5nRW5kLmluY2x1ZGVzKFwiK1wiKSl7cmV0dXJuIG1pbml0ei50cChwZC5nZXRVVENGdWxsWWVhcigpLHBkLmdldFVUQ01vbnRoKCkrMSxwZC5nZXRVVENEYXRlKCkscGQuZ2V0VVRDSG91cnMoKSxwZC5nZXRVVENNaW51dGVzKCkscGQuZ2V0VVRDU2Vjb25kcygpLFwiRXRjL1VUQ1wiKX1lbHNle3JldHVybiBtaW5pdHoudHAocGQuZ2V0RnVsbFllYXIoKSxwZC5nZXRNb250aCgpKzEscGQuZ2V0RGF0ZSgpLHBkLmdldEhvdXJzKCkscGQuZ2V0TWludXRlcygpLHBkLmdldFNlY29uZHMoKSx0eil9fW1pbml0ei5taW5pdHo9bWluaXR6O2Z1bmN0aW9uIENyb25PcHRpb25zKG9wdGlvbnMpe2lmKG9wdGlvbnM9PT12b2lkIDApe29wdGlvbnM9e319ZGVsZXRlIG9wdGlvbnMubmFtZTtvcHRpb25zLmxlZ2FjeU1vZGU9b3B0aW9ucy5sZWdhY3lNb2RlPT09dm9pZCAwP3RydWU6b3B0aW9ucy5sZWdhY3lNb2RlO29wdGlvbnMucGF1c2VkPW9wdGlvbnMucGF1c2VkPT09dm9pZCAwP2ZhbHNlOm9wdGlvbnMucGF1c2VkO29wdGlvbnMubWF4UnVucz1vcHRpb25zLm1heFJ1bnM9PT12b2lkIDA/SW5maW5pdHk6b3B0aW9ucy5tYXhSdW5zO29wdGlvbnMuY2F0Y2g9b3B0aW9ucy5jYXRjaD09PXZvaWQgMD9mYWxzZTpvcHRpb25zLmNhdGNoO29wdGlvbnMuaW50ZXJ2YWw9b3B0aW9ucy5pbnRlcnZhbD09PXZvaWQgMD8wOnBhcnNlSW50KG9wdGlvbnMuaW50ZXJ2YWwsMTApO29wdGlvbnMudXRjT2Zmc2V0PW9wdGlvbnMudXRjT2Zmc2V0PT09dm9pZCAwP3ZvaWQgMDpwYXJzZUludChvcHRpb25zLnV0Y09mZnNldCwxMCk7b3B0aW9ucy51bnJlZj1vcHRpb25zLnVucmVmPT09dm9pZCAwP2ZhbHNlOm9wdGlvbnMudW5yZWY7aWYob3B0aW9ucy5zdGFydEF0KXtvcHRpb25zLnN0YXJ0QXQ9bmV3IENyb25EYXRlKG9wdGlvbnMuc3RhcnRBdCxvcHRpb25zLnRpbWV6b25lKX1pZihvcHRpb25zLnN0b3BBdCl7b3B0aW9ucy5zdG9wQXQ9bmV3IENyb25EYXRlKG9wdGlvbnMuc3RvcEF0LG9wdGlvbnMudGltZXpvbmUpfWlmKG9wdGlvbnMuaW50ZXJ2YWwhPT1udWxsKXtpZihpc05hTihvcHRpb25zLmludGVydmFsKSl7dGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IFN1cHBsaWVkIHZhbHVlIGZvciBpbnRlcnZhbCBpcyBub3QgYSBudW1iZXJcIil9ZWxzZSBpZihvcHRpb25zLmludGVydmFsPDApe3Rocm93IG5ldyBFcnJvcihcIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgY2FuIG5vdCBiZSBuZWdhdGl2ZVwiKX19aWYob3B0aW9ucy51dGNPZmZzZXQhPT12b2lkIDApe2lmKGlzTmFOKG9wdGlvbnMudXRjT2Zmc2V0KSl7dGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IEludmFsaWQgdmFsdWUgcGFzc2VkIGZvciB1dGNPZmZzZXQsIHNob3VsZCBiZSBudW1iZXIgcmVwcmVzZW50aW5nIG1pbnV0ZXMgb2Zmc2V0IGZyb20gVVRDLlwiKX1lbHNlIGlmKG9wdGlvbnMudXRjT2Zmc2V0PC04NzB8fG9wdGlvbnMudXRjT2Zmc2V0Pjg3MCl7dGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IHV0Y09mZnNldCBvdXQgb2YgYm91bmRzLlwiKX1pZihvcHRpb25zLnV0Y09mZnNldCE9PXZvaWQgMCYmb3B0aW9ucy50aW1lem9uZSl7dGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IENvbWJpbmluZyAndXRjT2Zmc2V0JyB3aXRoICd0aW1lem9uZScgaXMgbm90IGFsbG93ZWQuXCIpfX1pZihvcHRpb25zLnVucmVmIT09dHJ1ZSYmb3B0aW9ucy51bnJlZiE9PWZhbHNlKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uT3B0aW9uczogVW5yZWYgc2hvdWxkIGJlIGVpdGhlciB0cnVlLCBmYWxzZSBvciB1bmRlZmluZWQoZmFsc2UpLlwiKX1yZXR1cm4gb3B0aW9uc31jb25zdCBMQVNUX09DQ1VSUkVOQ0U9MzI7Y29uc3QgQU5ZX09DQ1VSUkVOQ0U9MXwyfDR8OHwxNnxMQVNUX09DQ1VSUkVOQ0U7Y29uc3QgT0NDVVJSRU5DRV9CSVRNQVNLUz1bMSwyLDQsOCwxNl07ZnVuY3Rpb24gQ3JvblBhdHRlcm4ocGF0dGVybix0aW1lem9uZSl7dGhpcy5wYXR0ZXJuPXBhdHRlcm47dGhpcy50aW1lem9uZT10aW1lem9uZTt0aGlzLnNlY29uZD1BcnJheSg2MCkuZmlsbCgwKTt0aGlzLm1pbnV0ZT1BcnJheSg2MCkuZmlsbCgwKTt0aGlzLmhvdXI9QXJyYXkoMjQpLmZpbGwoMCk7dGhpcy5kYXk9QXJyYXkoMzEpLmZpbGwoMCk7dGhpcy5tb250aD1BcnJheSgxMikuZmlsbCgwKTt0aGlzLmRheU9mV2Vlaz1BcnJheSg3KS5maWxsKDApO3RoaXMubGFzdERheU9mTW9udGg9ZmFsc2U7dGhpcy5zdGFyRE9NPWZhbHNlO3RoaXMuc3RhckRPVz1mYWxzZTt0aGlzLnBhcnNlKCl9Q3JvblBhdHRlcm4ucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKCl7aWYoISh0eXBlb2YgdGhpcy5wYXR0ZXJuPT09XCJzdHJpbmdcInx8dGhpcy5wYXR0ZXJuLmNvbnN0cnVjdG9yPT09U3RyaW5nKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBQYXR0ZXJuIGhhcyB0byBiZSBvZiB0eXBlIHN0cmluZy5cIil9aWYodGhpcy5wYXR0ZXJuLmluZGV4T2YoXCJAXCIpPj0wKXRoaXMucGF0dGVybj10aGlzLmhhbmRsZU5pY2tuYW1lcyh0aGlzLnBhdHRlcm4pLnRyaW0oKTtjb25zdCBwYXJ0cz10aGlzLnBhdHRlcm4ucmVwbGFjZSgvXFxzKy9nLFwiIFwiKS5zcGxpdChcIiBcIik7aWYocGFydHMubGVuZ3RoPDV8fHBhcnRzLmxlbmd0aD42KXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IGludmFsaWQgY29uZmlndXJhdGlvbiBmb3JtYXQgKCdcIit0aGlzLnBhdHRlcm4rXCInKSwgZXhhY3RseSBmaXZlIG9yIHNpeCBzcGFjZSBzZXBhcmF0ZWQgcGFydHMgYXJlIHJlcXVpcmVkLlwiKX1pZihwYXJ0cy5sZW5ndGg9PT01KXtwYXJ0cy51bnNoaWZ0KFwiMFwiKX1pZihwYXJ0c1szXS5pbmRleE9mKFwiTFwiKT49MCl7cGFydHNbM109cGFydHNbM10ucmVwbGFjZShcIkxcIixcIlwiKTt0aGlzLmxhc3REYXlPZk1vbnRoPXRydWV9aWYocGFydHNbM109PVwiKlwiKXt0aGlzLnN0YXJET009dHJ1ZX1pZihwYXJ0c1s0XS5sZW5ndGg+PTMpcGFydHNbNF09dGhpcy5yZXBsYWNlQWxwaGFNb250aHMocGFydHNbNF0pO2lmKHBhcnRzWzVdLmxlbmd0aD49MylwYXJ0c1s1XT10aGlzLnJlcGxhY2VBbHBoYURheXMocGFydHNbNV0pO2lmKHBhcnRzWzVdPT1cIipcIil7dGhpcy5zdGFyRE9XPXRydWV9aWYodGhpcy5wYXR0ZXJuLmluZGV4T2YoXCI/XCIpPj0wKXtjb25zdCBpbml0RGF0ZT1uZXcgQ3JvbkRhdGUobmV3IERhdGUsdGhpcy50aW1lem9uZSkuZ2V0RGF0ZSh0cnVlKTtwYXJ0c1swXT1wYXJ0c1swXS5yZXBsYWNlKFwiP1wiLGluaXREYXRlLmdldFNlY29uZHMoKSk7cGFydHNbMV09cGFydHNbMV0ucmVwbGFjZShcIj9cIixpbml0RGF0ZS5nZXRNaW51dGVzKCkpO3BhcnRzWzJdPXBhcnRzWzJdLnJlcGxhY2UoXCI/XCIsaW5pdERhdGUuZ2V0SG91cnMoKSk7aWYoIXRoaXMuc3RhckRPTSlwYXJ0c1szXT1wYXJ0c1szXS5yZXBsYWNlKFwiP1wiLGluaXREYXRlLmdldERhdGUoKSk7cGFydHNbNF09cGFydHNbNF0ucmVwbGFjZShcIj9cIixpbml0RGF0ZS5nZXRNb250aCgpKzEpO2lmKCF0aGlzLnN0YXJET1cpcGFydHNbNV09cGFydHNbNV0ucmVwbGFjZShcIj9cIixpbml0RGF0ZS5nZXREYXkoKSl9dGhpcy50aHJvd0F0SWxsZWdhbENoYXJhY3RlcnMocGFydHMpO3RoaXMucGFydFRvQXJyYXkoXCJzZWNvbmRcIixwYXJ0c1swXSwwLDEpO3RoaXMucGFydFRvQXJyYXkoXCJtaW51dGVcIixwYXJ0c1sxXSwwLDEpO3RoaXMucGFydFRvQXJyYXkoXCJob3VyXCIscGFydHNbMl0sMCwxKTt0aGlzLnBhcnRUb0FycmF5KFwiZGF5XCIscGFydHNbM10sLTEsMSk7dGhpcy5wYXJ0VG9BcnJheShcIm1vbnRoXCIscGFydHNbNF0sLTEsMSk7dGhpcy5wYXJ0VG9BcnJheShcImRheU9mV2Vla1wiLHBhcnRzWzVdLDAsQU5ZX09DQ1VSUkVOQ0UpO2lmKHRoaXMuZGF5T2ZXZWVrWzddKXt0aGlzLmRheU9mV2Vla1swXT10aGlzLmRheU9mV2Vla1s3XX19O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS5wYXJ0VG9BcnJheT1mdW5jdGlvbih0eXBlLGNvbmYsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpe2NvbnN0IGFycj10aGlzW3R5cGVdO2NvbnN0IGxhc3REYXlPZk1vbnRoPXR5cGU9PT1cImRheVwiJiZ0aGlzLmxhc3REYXlPZk1vbnRoO2lmKGNvbmY9PT1cIlwiJiYhbGFzdERheU9mTW9udGgpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBjb25maWd1cmF0aW9uIGVudHJ5IFwiK3R5cGUrXCIgKFwiK2NvbmYrXCIpIGlzIGVtcHR5LCBjaGVjayBmb3IgdHJhaWxpbmcgc3BhY2VzLlwiKTtpZihjb25mPT09XCIqXCIpcmV0dXJuIGFyci5maWxsKGRlZmF1bHRWYWx1ZSk7Y29uc3Qgc3BsaXQ9Y29uZi5zcGxpdChcIixcIik7aWYoc3BsaXQubGVuZ3RoPjEpe2ZvcihsZXQgaT0wO2k8c3BsaXQubGVuZ3RoO2krKyl7dGhpcy5wYXJ0VG9BcnJheSh0eXBlLHNwbGl0W2ldLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKX19ZWxzZSBpZihjb25mLmluZGV4T2YoXCItXCIpIT09LTEmJmNvbmYuaW5kZXhPZihcIi9cIikhPT0tMSl7dGhpcy5oYW5kbGVSYW5nZVdpdGhTdGVwcGluZyhjb25mLHR5cGUsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpfWVsc2UgaWYoY29uZi5pbmRleE9mKFwiLVwiKSE9PS0xKXt0aGlzLmhhbmRsZVJhbmdlKGNvbmYsdHlwZSx2YWx1ZUluZGV4T2Zmc2V0LGRlZmF1bHRWYWx1ZSl9ZWxzZSBpZihjb25mLmluZGV4T2YoXCIvXCIpIT09LTEpe3RoaXMuaGFuZGxlU3RlcHBpbmcoY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKX1lbHNlIGlmKGNvbmYhPT1cIlwiKXt0aGlzLmhhbmRsZU51bWJlcihjb25mLHR5cGUsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpfX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLnRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycz1mdW5jdGlvbihwYXJ0cyl7Zm9yKGxldCBpPTA7aTxwYXJ0cy5sZW5ndGg7aSsrKXtjb25zdCByZVZhbGlkQ3Jvbj1pPT09NT8vW14vKjAtOSxcXC0jTF0rLzovW14vKjAtOSwtXSsvO2lmKHJlVmFsaWRDcm9uLnRlc3QocGFydHNbaV0pKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgXCIraStcIiAoXCIrcGFydHNbaV0rXCIpIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy5cIil9fX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLmhhbmRsZU51bWJlcj1mdW5jdGlvbihjb25mLHR5cGUsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpe2NvbnN0IHJlc3VsdD10aGlzLmV4dHJhY3ROdGgoY29uZix0eXBlKTtjb25zdCBpPXBhcnNlSW50KHJlc3VsdFswXSwxMCkrdmFsdWVJbmRleE9mZnNldDtpZihpc05hTihpKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBcIit0eXBlK1wiIGlzIG5vdCBhIG51bWJlcjogJ1wiK2NvbmYrXCInXCIpfXRoaXMuc2V0UGFydCh0eXBlLGkscmVzdWx0WzFdfHxkZWZhdWx0VmFsdWUpfTtDcm9uUGF0dGVybi5wcm90b3R5cGUuc2V0UGFydD1mdW5jdGlvbihwYXJ0LGluZGV4LHZhbHVlKXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMscGFydCkpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCBwYXJ0IHNwZWNpZmllZDogXCIrcGFydCl9aWYocGFydD09PVwiZGF5T2ZXZWVrXCIpe2lmKGluZGV4PT09NylpbmRleD0wO2lmKChpbmRleDwwfHxpbmRleD42KSYmaW5kZXghPT1cIkxcIil7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrOiBcIitpbmRleCl9dGhpcy5zZXROdGhXZWVrZGF5T2ZNb250aChpbmRleCx2YWx1ZSk7cmV0dXJufWlmKHBhcnQ9PT1cInNlY29uZFwifHxwYXJ0PT09XCJtaW51dGVcIil7aWYoaW5kZXg8MHx8aW5kZXg+PTYwKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBcIitwYXJ0K1wiOiBcIitpbmRleCl9fWVsc2UgaWYocGFydD09PVwiaG91clwiKXtpZihpbmRleDwwfHxpbmRleD49MjQpe3Rocm93IG5ldyBSYW5nZUVycm9yKFwiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yIFwiK3BhcnQrXCI6IFwiK2luZGV4KX19ZWxzZSBpZihwYXJ0PT09XCJkYXlcIil7aWYoaW5kZXg8MHx8aW5kZXg+PTMxKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBcIitwYXJ0K1wiOiBcIitpbmRleCl9fWVsc2UgaWYocGFydD09PVwibW9udGhcIil7aWYoaW5kZXg8MHx8aW5kZXg+PTEyKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBcIitwYXJ0K1wiOiBcIitpbmRleCl9fXRoaXNbcGFydF1baW5kZXhdPXZhbHVlfTtDcm9uUGF0dGVybi5wcm90b3R5cGUuaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmc9ZnVuY3Rpb24oY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKXtjb25zdCByZXN1bHQ9dGhpcy5leHRyYWN0TnRoKGNvbmYsdHlwZSk7Y29uc3QgbWF0Y2hlcz1yZXN1bHRbMF0ubWF0Y2goL14oXFxkKyktKFxcZCspXFwvKFxcZCspJC8pO2lmKG1hdGNoZXM9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHJhbmdlIHdpdGggc3RlcHBpbmc6ICdcIitjb25mK1wiJ1wiKTtsZXRbLGxvd2VyLHVwcGVyLHN0ZXBzXT1tYXRjaGVzO2xvd2VyPXBhcnNlSW50KGxvd2VyLDEwKSt2YWx1ZUluZGV4T2Zmc2V0O3VwcGVyPXBhcnNlSW50KHVwcGVyLDEwKSt2YWx1ZUluZGV4T2Zmc2V0O3N0ZXBzPXBhcnNlSW50KHN0ZXBzLDEwKTtpZihpc05hTihsb3dlcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgbG93ZXIgcmFuZ2UgKE5hTilcIik7aWYoaXNOYU4odXBwZXIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHVwcGVyIHJhbmdlIChOYU4pXCIpO2lmKGlzTmFOKHN0ZXBzKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTilcIik7aWYoc3RlcHM9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAwXCIpO2lmKHN0ZXBzPnRoaXNbdHlwZV0ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBzdGVwcyBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1heGltdW0gdmFsdWUgb2YgcGFydCAoXCIrdGhpc1t0eXBlXS5sZW5ndGgrXCIpXCIpO2lmKGxvd2VyPnVwcGVyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogRnJvbSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0byB2YWx1ZTogJ1wiK2NvbmYrXCInXCIpO2ZvcihsZXQgaT1sb3dlcjtpPD11cHBlcjtpKz1zdGVwcyl7dGhpcy5zZXRQYXJ0KHR5cGUsaSxyZXN1bHRbMV18fGRlZmF1bHRWYWx1ZSl9fTtDcm9uUGF0dGVybi5wcm90b3R5cGUuZXh0cmFjdE50aD1mdW5jdGlvbihjb25mLHR5cGUpe2xldCByZXN0PWNvbmY7bGV0IG50aDtpZihyZXN0LmluY2x1ZGVzKFwiI1wiKSl7aWYodHlwZSE9PVwiZGF5T2ZXZWVrXCIpe3Rocm93IG5ldyBFcnJvcihcIkNyb25QYXR0ZXJuOiBudGggKCMpIG9ubHkgYWxsb3dlZCBpbiBkYXktb2Ytd2VlayBmaWVsZFwiKX1udGg9cmVzdC5zcGxpdChcIiNcIilbMV07cmVzdD1yZXN0LnNwbGl0KFwiI1wiKVswXX1yZXR1cm5bcmVzdCxudGhdfTtDcm9uUGF0dGVybi5wcm90b3R5cGUuaGFuZGxlUmFuZ2U9ZnVuY3Rpb24oY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKXtjb25zdCByZXN1bHQ9dGhpcy5leHRyYWN0TnRoKGNvbmYsdHlwZSk7Y29uc3Qgc3BsaXQ9cmVzdWx0WzBdLnNwbGl0KFwiLVwiKTtpZihzcGxpdC5sZW5ndGghPT0yKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZTogJ1wiK2NvbmYrXCInXCIpfWNvbnN0IGxvd2VyPXBhcnNlSW50KHNwbGl0WzBdLDEwKSt2YWx1ZUluZGV4T2Zmc2V0LHVwcGVyPXBhcnNlSW50KHNwbGl0WzFdLDEwKSt2YWx1ZUluZGV4T2Zmc2V0O2lmKGlzTmFOKGxvd2VyKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgbG93ZXIgcmFuZ2UgKE5hTilcIil9ZWxzZSBpZihpc05hTih1cHBlcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHVwcGVyIHJhbmdlIChOYU4pXCIpfWlmKGxvd2VyPnVwcGVyKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IEZyb20gdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdG8gdmFsdWU6ICdcIitjb25mK1wiJ1wiKX1mb3IobGV0IGk9bG93ZXI7aTw9dXBwZXI7aSsrKXt0aGlzLnNldFBhcnQodHlwZSxpLHJlc3VsdFsxXXx8ZGVmYXVsdFZhbHVlKX19O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS5oYW5kbGVTdGVwcGluZz1mdW5jdGlvbihjb25mLHR5cGUsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpe2NvbnN0IHJlc3VsdD10aGlzLmV4dHJhY3ROdGgoY29uZix0eXBlKTtjb25zdCBzcGxpdD1yZXN1bHRbMF0uc3BsaXQoXCIvXCIpO2lmKHNwbGl0Lmxlbmd0aCE9PTIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAnXCIrY29uZitcIidcIil9bGV0IHN0YXJ0PTA7aWYoc3BsaXRbMF0hPT1cIipcIil7c3RhcnQ9cGFyc2VJbnQoc3BsaXRbMF0sMTApK3ZhbHVlSW5kZXhPZmZzZXR9Y29uc3Qgc3RlcHM9cGFyc2VJbnQoc3BsaXRbMV0sMTApO2lmKGlzTmFOKHN0ZXBzKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTilcIik7aWYoc3RlcHM9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAwXCIpO2lmKHN0ZXBzPnRoaXNbdHlwZV0ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBtYXggc3RlcHMgZm9yIHBhcnQgaXMgKFwiK3RoaXNbdHlwZV0ubGVuZ3RoK1wiKVwiKTtmb3IobGV0IGk9c3RhcnQ7aTx0aGlzW3R5cGVdLmxlbmd0aDtpKz1zdGVwcyl7dGhpcy5zZXRQYXJ0KHR5cGUsaSxyZXN1bHRbMV18fGRlZmF1bHRWYWx1ZSl9fTtDcm9uUGF0dGVybi5wcm90b3R5cGUucmVwbGFjZUFscGhhRGF5cz1mdW5jdGlvbihjb25mKXtyZXR1cm4gY29uZi5yZXBsYWNlKC8tc3VuL2dpLFwiLTdcIikucmVwbGFjZSgvc3VuL2dpLFwiMFwiKS5yZXBsYWNlKC9tb24vZ2ksXCIxXCIpLnJlcGxhY2UoL3R1ZS9naSxcIjJcIikucmVwbGFjZSgvd2VkL2dpLFwiM1wiKS5yZXBsYWNlKC90aHUvZ2ksXCI0XCIpLnJlcGxhY2UoL2ZyaS9naSxcIjVcIikucmVwbGFjZSgvc2F0L2dpLFwiNlwiKX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLnJlcGxhY2VBbHBoYU1vbnRocz1mdW5jdGlvbihjb25mKXtyZXR1cm4gY29uZi5yZXBsYWNlKC9qYW4vZ2ksXCIxXCIpLnJlcGxhY2UoL2ZlYi9naSxcIjJcIikucmVwbGFjZSgvbWFyL2dpLFwiM1wiKS5yZXBsYWNlKC9hcHIvZ2ksXCI0XCIpLnJlcGxhY2UoL21heS9naSxcIjVcIikucmVwbGFjZSgvanVuL2dpLFwiNlwiKS5yZXBsYWNlKC9qdWwvZ2ksXCI3XCIpLnJlcGxhY2UoL2F1Zy9naSxcIjhcIikucmVwbGFjZSgvc2VwL2dpLFwiOVwiKS5yZXBsYWNlKC9vY3QvZ2ksXCIxMFwiKS5yZXBsYWNlKC9ub3YvZ2ksXCIxMVwiKS5yZXBsYWNlKC9kZWMvZ2ksXCIxMlwiKX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLmhhbmRsZU5pY2tuYW1lcz1mdW5jdGlvbihwYXR0ZXJuKXtjb25zdCBjbGVhblBhdHRlcm49cGF0dGVybi50cmltKCkudG9Mb3dlckNhc2UoKTtpZihjbGVhblBhdHRlcm49PT1cIkB5ZWFybHlcInx8Y2xlYW5QYXR0ZXJuPT09XCJAYW5udWFsbHlcIil7cmV0dXJuXCIwIDAgMSAxICpcIn1lbHNlIGlmKGNsZWFuUGF0dGVybj09PVwiQG1vbnRobHlcIil7cmV0dXJuXCIwIDAgMSAqICpcIn1lbHNlIGlmKGNsZWFuUGF0dGVybj09PVwiQHdlZWtseVwiKXtyZXR1cm5cIjAgMCAqICogMFwifWVsc2UgaWYoY2xlYW5QYXR0ZXJuPT09XCJAZGFpbHlcIil7cmV0dXJuXCIwIDAgKiAqICpcIn1lbHNlIGlmKGNsZWFuUGF0dGVybj09PVwiQGhvdXJseVwiKXtyZXR1cm5cIjAgKiAqICogKlwifWVsc2V7cmV0dXJuIHBhdHRlcm59fTtDcm9uUGF0dGVybi5wcm90b3R5cGUuc2V0TnRoV2Vla2RheU9mTW9udGg9ZnVuY3Rpb24oaW5kZXgsbnRoV2Vla2RheSl7aWYobnRoV2Vla2RheT09PVwiTFwiKXt0aGlzW1wiZGF5T2ZXZWVrXCJdW2luZGV4XT10aGlzW1wiZGF5T2ZXZWVrXCJdW2luZGV4XXxMQVNUX09DQ1VSUkVOQ0V9ZWxzZSBpZihudGhXZWVrZGF5PDYmJm50aFdlZWtkYXk+MCl7dGhpc1tcImRheU9mV2Vla1wiXVtpbmRleF09dGhpc1tcImRheU9mV2Vla1wiXVtpbmRleF18T0NDVVJSRU5DRV9CSVRNQVNLU1tudGhXZWVrZGF5LTFdfWVsc2UgaWYobnRoV2Vla2RheT09PUFOWV9PQ0NVUlJFTkNFKXt0aGlzW1wiZGF5T2ZXZWVrXCJdW2luZGV4XT1BTllfT0NDVVJSRU5DRX1lbHNle3Rocm93IG5ldyBUeXBlRXJyb3IoYENyb25QYXR0ZXJuOiBudGggd2Vla2RheSBvZiBvZiByYW5nZSwgc2hvdWxkIGJlIDEtNSBvciBMLiBWYWx1ZTogJHtudGhXZWVrZGF5fWApfX07Y29uc3QgRGF5c09mTW9udGg9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtjb25zdCBSZWN1cnNpb25TdGVwcz1bW1wibW9udGhcIixcInllYXJcIiwwXSxbXCJkYXlcIixcIm1vbnRoXCIsLTFdLFtcImhvdXJcIixcImRheVwiLDBdLFtcIm1pbnV0ZVwiLFwiaG91clwiLDBdLFtcInNlY29uZFwiLFwibWludXRlXCIsMF1dO2Z1bmN0aW9uIENyb25EYXRlKGQsdHope3RoaXMudHo9dHo7aWYoZCYmZCBpbnN0YW5jZW9mIERhdGUpe2lmKCFpc05hTihkKSl7dGhpcy5mcm9tRGF0ZShkKX1lbHNle3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uRGF0ZTogSW52YWxpZCBkYXRlIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvclwiKX19ZWxzZSBpZihkPT09dm9pZCAwKXt0aGlzLmZyb21EYXRlKG5ldyBEYXRlKX1lbHNlIGlmKGQmJnR5cGVvZiBkPT09XCJzdHJpbmdcIil7dGhpcy5mcm9tU3RyaW5nKGQpfWVsc2UgaWYoZCBpbnN0YW5jZW9mIENyb25EYXRlKXt0aGlzLmZyb21Dcm9uRGF0ZShkKX1lbHNle3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uRGF0ZTogSW52YWxpZCB0eXBlIChcIit0eXBlb2YgZCtcIikgcGFzc2VkIHRvIENyb25EYXRlIGNvbnN0cnVjdG9yXCIpfX1Dcm9uRGF0ZS5wcm90b3R5cGUuaXNOdGhXZWVrZGF5T2ZNb250aD1mdW5jdGlvbih5ZWFyLG1vbnRoLGRheSxudGgpe2NvbnN0IGRhdGU9bmV3IERhdGUoRGF0ZS5VVEMoeWVhcixtb250aCxkYXkpKTtjb25zdCB3ZWVrZGF5PWRhdGUuZ2V0VVRDRGF5KCk7bGV0IGNvdW50PTA7Zm9yKGxldCBkPTE7ZDw9ZGF5O2QrKyl7aWYobmV3IERhdGUoRGF0ZS5VVEMoeWVhcixtb250aCxkKSkuZ2V0VVRDRGF5KCk9PT13ZWVrZGF5KXtjb3VudCsrfX1pZihudGgmQU5ZX09DQ1VSUkVOQ0UmJk9DQ1VSUkVOQ0VfQklUTUFTS1NbY291bnQtMV0mbnRoKXtyZXR1cm4gdHJ1ZX1pZihudGgmTEFTVF9PQ0NVUlJFTkNFKXtjb25zdCBkYXlzSW5Nb250aD1uZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLG1vbnRoKzEsMCkpLmdldFVUQ0RhdGUoKTtmb3IobGV0IGQ9ZGF5KzE7ZDw9ZGF5c0luTW9udGg7ZCsrKXtpZihuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLG1vbnRoLGQpKS5nZXRVVENEYXkoKT09PXdlZWtkYXkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfTtDcm9uRGF0ZS5wcm90b3R5cGUuZnJvbURhdGU9ZnVuY3Rpb24oaW5EYXRlKXtpZih0aGlzLnR6IT09dm9pZCAwKXtpZih0eXBlb2YgdGhpcy50ej09PVwibnVtYmVyXCIpe3RoaXMubXM9aW5EYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO3RoaXMuc2Vjb25kPWluRGF0ZS5nZXRVVENTZWNvbmRzKCk7dGhpcy5taW51dGU9aW5EYXRlLmdldFVUQ01pbnV0ZXMoKSt0aGlzLnR6O3RoaXMuaG91cj1pbkRhdGUuZ2V0VVRDSG91cnMoKTt0aGlzLmRheT1pbkRhdGUuZ2V0VVRDRGF0ZSgpO3RoaXMubW9udGg9aW5EYXRlLmdldFVUQ01vbnRoKCk7dGhpcy55ZWFyPWluRGF0ZS5nZXRVVENGdWxsWWVhcigpO3RoaXMuYXBwbHkoKX1lbHNle2NvbnN0IGQ9bWluaXR6LnRvVFooaW5EYXRlLHRoaXMudHopO3RoaXMubXM9aW5EYXRlLmdldE1pbGxpc2Vjb25kcygpO3RoaXMuc2Vjb25kPWQuczt0aGlzLm1pbnV0ZT1kLmk7dGhpcy5ob3VyPWQuaDt0aGlzLmRheT1kLmQ7dGhpcy5tb250aD1kLm0tMTt0aGlzLnllYXI9ZC55fX1lbHNle3RoaXMubXM9aW5EYXRlLmdldE1pbGxpc2Vjb25kcygpO3RoaXMuc2Vjb25kPWluRGF0ZS5nZXRTZWNvbmRzKCk7dGhpcy5taW51dGU9aW5EYXRlLmdldE1pbnV0ZXMoKTt0aGlzLmhvdXI9aW5EYXRlLmdldEhvdXJzKCk7dGhpcy5kYXk9aW5EYXRlLmdldERhdGUoKTt0aGlzLm1vbnRoPWluRGF0ZS5nZXRNb250aCgpO3RoaXMueWVhcj1pbkRhdGUuZ2V0RnVsbFllYXIoKX19O0Nyb25EYXRlLnByb3RvdHlwZS5mcm9tQ3JvbkRhdGU9ZnVuY3Rpb24oZCl7dGhpcy50ej1kLnR6O3RoaXMueWVhcj1kLnllYXI7dGhpcy5tb250aD1kLm1vbnRoO3RoaXMuZGF5PWQuZGF5O3RoaXMuaG91cj1kLmhvdXI7dGhpcy5taW51dGU9ZC5taW51dGU7dGhpcy5zZWNvbmQ9ZC5zZWNvbmQ7dGhpcy5tcz1kLm1zfTtDcm9uRGF0ZS5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZih0aGlzLm1vbnRoPjExfHx0aGlzLmRheT5EYXlzT2ZNb250aFt0aGlzLm1vbnRoXXx8dGhpcy5ob3VyPjU5fHx0aGlzLm1pbnV0ZT41OXx8dGhpcy5zZWNvbmQ+NTl8fHRoaXMuaG91cjwwfHx0aGlzLm1pbnV0ZTwwfHx0aGlzLnNlY29uZDwwKXtjb25zdCBkPW5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZSx0aGlzLnNlY29uZCx0aGlzLm1zKSk7dGhpcy5tcz1kLmdldFVUQ01pbGxpc2Vjb25kcygpO3RoaXMuc2Vjb25kPWQuZ2V0VVRDU2Vjb25kcygpO3RoaXMubWludXRlPWQuZ2V0VVRDTWludXRlcygpO3RoaXMuaG91cj1kLmdldFVUQ0hvdXJzKCk7dGhpcy5kYXk9ZC5nZXRVVENEYXRlKCk7dGhpcy5tb250aD1kLmdldFVUQ01vbnRoKCk7dGhpcy55ZWFyPWQuZ2V0VVRDRnVsbFllYXIoKTtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O0Nyb25EYXRlLnByb3RvdHlwZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHN0cil7aWYodHlwZW9mIHRoaXMudHo9PT1cIm51bWJlclwiKXtjb25zdCBpbkRhdGU9bWluaXR6LmZyb21UWklTTyhzdHIpO3RoaXMubXM9aW5EYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO3RoaXMuc2Vjb25kPWluRGF0ZS5nZXRVVENTZWNvbmRzKCk7dGhpcy5taW51dGU9aW5EYXRlLmdldFVUQ01pbnV0ZXMoKTt0aGlzLmhvdXI9aW5EYXRlLmdldFVUQ0hvdXJzKCk7dGhpcy5kYXk9aW5EYXRlLmdldFVUQ0RhdGUoKTt0aGlzLm1vbnRoPWluRGF0ZS5nZXRVVENNb250aCgpO3RoaXMueWVhcj1pbkRhdGUuZ2V0VVRDRnVsbFllYXIoKTt0aGlzLmFwcGx5KCl9ZWxzZXtyZXR1cm4gdGhpcy5mcm9tRGF0ZShtaW5pdHouZnJvbVRaSVNPKHN0cix0aGlzLnR6KSl9fTtDcm9uRGF0ZS5wcm90b3R5cGUuZmluZE5leHQ9ZnVuY3Rpb24ob3B0aW9ucyx0YXJnZXQscGF0dGVybixvZmZzZXQpe2NvbnN0IG9yaWdpbmFsVGFyZ2V0PXRoaXNbdGFyZ2V0XTtsZXQgbGFzdERheU9mTW9udGg7aWYocGF0dGVybi5sYXN0RGF5T2ZNb250aCl7aWYodGhpcy5tb250aCE9PTEpe2xhc3REYXlPZk1vbnRoPURheXNPZk1vbnRoW3RoaXMubW9udGhdfWVsc2V7bGFzdERheU9mTW9udGg9bmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLHRoaXMubW9udGgrMSwwLDAsMCwwLDApKS5nZXRVVENEYXRlKCl9fWNvbnN0IGZEb21XZWVrRGF5PSFwYXR0ZXJuLnN0YXJET1cmJnRhcmdldD09XCJkYXlcIj9uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCwxLDAsMCwwLDApKS5nZXRVVENEYXkoKTp1bmRlZmluZWQ7Zm9yKGxldCBpPXRoaXNbdGFyZ2V0XStvZmZzZXQ7aTxwYXR0ZXJuW3RhcmdldF0ubGVuZ3RoO2krKyl7bGV0IG1hdGNoPXBhdHRlcm5bdGFyZ2V0XVtpXTtpZih0YXJnZXQ9PT1cImRheVwiJiZwYXR0ZXJuLmxhc3REYXlPZk1vbnRoJiZpLW9mZnNldD09bGFzdERheU9mTW9udGgpe21hdGNoPXRydWV9aWYodGFyZ2V0PT09XCJkYXlcIiYmIXBhdHRlcm4uc3RhckRPVyl7bGV0IGRvd01hdGNoPXBhdHRlcm4uZGF5T2ZXZWVrWyhmRG9tV2Vla0RheSsoaS1vZmZzZXQtMSkpJTddO2lmKGRvd01hdGNoJiZkb3dNYXRjaCZBTllfT0NDVVJSRU5DRSl7ZG93TWF0Y2g9dGhpcy5pc050aFdlZWtkYXlPZk1vbnRoKHRoaXMueWVhcix0aGlzLm1vbnRoLGktb2Zmc2V0LGRvd01hdGNoKX1lbHNlIGlmKGRvd01hdGNoKXt0aHJvdyBuZXcgRXJyb3IoYENyb25EYXRlOiBJbnZhbGlkIHZhbHVlIGZvciBkYXlPZldlZWsgZW5jb3VudGVyZWQuICR7ZG93TWF0Y2h9YCl9aWYob3B0aW9ucy5sZWdhY3lNb2RlJiYhcGF0dGVybi5zdGFyRE9NKXttYXRjaD1tYXRjaHx8ZG93TWF0Y2h9ZWxzZXttYXRjaD1tYXRjaCYmZG93TWF0Y2h9fWlmKG1hdGNoKXt0aGlzW3RhcmdldF09aS1vZmZzZXQ7cmV0dXJuIG9yaWdpbmFsVGFyZ2V0IT09dGhpc1t0YXJnZXRdPzI6MX19cmV0dXJuIDN9O0Nyb25EYXRlLnByb3RvdHlwZS5yZWN1cnNlPWZ1bmN0aW9uKHBhdHRlcm4sb3B0aW9ucyxkb2luZyl7Y29uc3QgcmVzPXRoaXMuZmluZE5leHQob3B0aW9ucyxSZWN1cnNpb25TdGVwc1tkb2luZ11bMF0scGF0dGVybixSZWN1cnNpb25TdGVwc1tkb2luZ11bMl0pO2lmKHJlcz4xKXtsZXQgcmVzZXRMZXZlbD1kb2luZysxO3doaWxlKHJlc2V0TGV2ZWw8UmVjdXJzaW9uU3RlcHMubGVuZ3RoKXt0aGlzW1JlY3Vyc2lvblN0ZXBzW3Jlc2V0TGV2ZWxdWzBdXT0tUmVjdXJzaW9uU3RlcHNbcmVzZXRMZXZlbF1bMl07cmVzZXRMZXZlbCsrfWlmKHJlcz09PTMpe3RoaXNbUmVjdXJzaW9uU3RlcHNbZG9pbmddWzFdXSsrO3RoaXNbUmVjdXJzaW9uU3RlcHNbZG9pbmddWzBdXT0tUmVjdXJzaW9uU3RlcHNbZG9pbmddWzJdO3RoaXMuYXBwbHkoKTtyZXR1cm4gdGhpcy5yZWN1cnNlKHBhdHRlcm4sb3B0aW9ucywwKX1lbHNlIGlmKHRoaXMuYXBwbHkoKSl7cmV0dXJuIHRoaXMucmVjdXJzZShwYXR0ZXJuLG9wdGlvbnMsZG9pbmctMSl9fWRvaW5nKz0xO2lmKGRvaW5nPj1SZWN1cnNpb25TdGVwcy5sZW5ndGgpe3JldHVybiB0aGlzfWVsc2UgaWYodGhpcy55ZWFyPj0zZTMpe3JldHVybiBudWxsfWVsc2V7cmV0dXJuIHRoaXMucmVjdXJzZShwYXR0ZXJuLG9wdGlvbnMsZG9pbmcpfX07Q3JvbkRhdGUucHJvdG90eXBlLmluY3JlbWVudD1mdW5jdGlvbihwYXR0ZXJuLG9wdGlvbnMsaGFzUHJldmlvdXNSdW4pe3RoaXMuc2Vjb25kKz1vcHRpb25zLmludGVydmFsPjEmJmhhc1ByZXZpb3VzUnVuP29wdGlvbnMuaW50ZXJ2YWw6MTt0aGlzLm1zPTA7dGhpcy5hcHBseSgpO3JldHVybiB0aGlzLnJlY3Vyc2UocGF0dGVybixvcHRpb25zLDApfTtDcm9uRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZT1mdW5jdGlvbihpbnRlcm5hbCl7aWYoaW50ZXJuYWx8fHRoaXMudHo9PT12b2lkIDApe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUsdGhpcy5zZWNvbmQsdGhpcy5tcyl9ZWxzZXtpZih0eXBlb2YgdGhpcy50ej09PVwibnVtYmVyXCIpe3JldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUtdGhpcy50eix0aGlzLnNlY29uZCx0aGlzLm1zKSl9ZWxzZXtyZXR1cm4gbWluaXR6KHRoaXMueWVhcix0aGlzLm1vbnRoKzEsdGhpcy5kYXksdGhpcy5ob3VyLHRoaXMubWludXRlLHRoaXMuc2Vjb25kLHRoaXMudHopfX19O0Nyb25EYXRlLnByb3RvdHlwZS5nZXRUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RGF0ZSgpLmdldFRpbWUoKX07ZnVuY3Rpb24gaXNGdW5jdGlvbih2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpPT09XCJbb2JqZWN0IEZ1bmN0aW9uXVwifHxcImZ1bmN0aW9uXCI9PT10eXBlb2Ygdnx8diBpbnN0YW5jZW9mIEZ1bmN0aW9ufWZ1bmN0aW9uIHVucmVmVGltZXIodGltZXIpe2lmKHR5cGVvZiBEZW5vIT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIERlbm8udW5yZWZUaW1lciE9PVwidW5kZWZpbmVkXCIpe0Rlbm8udW5yZWZUaW1lcih0aW1lcil9ZWxzZSBpZih0aW1lciYmdHlwZW9mIHRpbWVyLnVucmVmIT09XCJ1bmRlZmluZWRcIil7dGltZXIudW5yZWYoKX19Y29uc3QgbWF4RGVsYXk9MzAqMWUzO2NvbnN0IHNjaGVkdWxlZEpvYnM9W107ZnVuY3Rpb24gQ3JvbihwYXR0ZXJuLGZuT3JPcHRpb25zMSxmbk9yT3B0aW9uczIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIENyb24pKXtyZXR1cm4gbmV3IENyb24ocGF0dGVybixmbk9yT3B0aW9uczEsZm5Pck9wdGlvbnMyKX1sZXQgb3B0aW9ucyxmdW5jO2lmKGlzRnVuY3Rpb24oZm5Pck9wdGlvbnMxKSl7ZnVuYz1mbk9yT3B0aW9uczF9ZWxzZSBpZih0eXBlb2YgZm5Pck9wdGlvbnMxPT09XCJvYmplY3RcIil7b3B0aW9ucz1mbk9yT3B0aW9uczF9ZWxzZSBpZihmbk9yT3B0aW9uczEhPT12b2lkIDApe3Rocm93IG5ldyBFcnJvcihcIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBvcHRpb25zSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuXCIpfWlmKGlzRnVuY3Rpb24oZm5Pck9wdGlvbnMyKSl7ZnVuYz1mbk9yT3B0aW9uczJ9ZWxzZSBpZih0eXBlb2YgZm5Pck9wdGlvbnMyPT09XCJvYmplY3RcIil7b3B0aW9ucz1mbk9yT3B0aW9uczJ9ZWxzZSBpZihmbk9yT3B0aW9uczIhPT12b2lkIDApe3Rocm93IG5ldyBFcnJvcihcIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBmdW5jSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuXCIpfXRoaXMubmFtZT1vcHRpb25zP29wdGlvbnMubmFtZTp2b2lkIDA7dGhpcy5vcHRpb25zPUNyb25PcHRpb25zKG9wdGlvbnMpO3RoaXMuX3N0YXRlcz17a2lsbDpmYWxzZSxibG9ja2luZzpmYWxzZSxwcmV2aW91c1J1bjp2b2lkIDAsY3VycmVudFJ1bjp2b2lkIDAsb25jZTp2b2lkIDAsY3VycmVudFRpbWVvdXQ6dm9pZCAwLG1heFJ1bnM6b3B0aW9ucz9vcHRpb25zLm1heFJ1bnM6dm9pZCAwLHBhdXNlZDpvcHRpb25zP29wdGlvbnMucGF1c2VkOmZhbHNlLHBhdHRlcm46dm9pZCAwfTtpZihwYXR0ZXJuJiYocGF0dGVybiBpbnN0YW5jZW9mIERhdGV8fHR5cGVvZiBwYXR0ZXJuPT09XCJzdHJpbmdcIiYmcGF0dGVybi5pbmRleE9mKFwiOlwiKT4wKSl7dGhpcy5fc3RhdGVzLm9uY2U9bmV3IENyb25EYXRlKHBhdHRlcm4sdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KX1lbHNle3RoaXMuX3N0YXRlcy5wYXR0ZXJuPW5ldyBDcm9uUGF0dGVybihwYXR0ZXJuLHRoaXMub3B0aW9ucy50aW1lem9uZSl9aWYodGhpcy5uYW1lKXtjb25zdCBleGlzdGluZz1zY2hlZHVsZWRKb2JzLmZpbmQoaj0+ai5uYW1lPT09dGhpcy5uYW1lKTtpZihleGlzdGluZyl7dGhyb3cgbmV3IEVycm9yKFwiQ3JvbjogVHJpZWQgdG8gaW5pdGlhbGl6ZSBuZXcgbmFtZWQgam9iICdcIit0aGlzLm5hbWUrXCInLCBidXQgbmFtZSBhbHJlYWR5IHRha2VuLlwiKX1lbHNle3NjaGVkdWxlZEpvYnMucHVzaCh0aGlzKX19aWYoZnVuYyE9PXZvaWQgMCl7dGhpcy5mbj1mdW5jO3RoaXMuc2NoZWR1bGUoKX1yZXR1cm4gdGhpc31Dcm9uLnByb3RvdHlwZS5uZXh0UnVuPWZ1bmN0aW9uKHByZXYpe2NvbnN0IG5leHQ9dGhpcy5fbmV4dChwcmV2KTtyZXR1cm4gbmV4dD9uZXh0LmdldERhdGUoKTpudWxsfTtDcm9uLnByb3RvdHlwZS5uZXh0UnVucz1mdW5jdGlvbihuLHByZXZpb3VzKXtpZihuPnRoaXMuX3N0YXRlcy5tYXhSdW5zKXtuPXRoaXMuX3N0YXRlcy5tYXhSdW5zfWNvbnN0IGVudW1lcmF0aW9uPVtdO2xldCBwcmV2PXByZXZpb3VzfHx0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bjt3aGlsZShuLS0mJihwcmV2PXRoaXMubmV4dFJ1bihwcmV2KSkpe2VudW1lcmF0aW9uLnB1c2gocHJldil9cmV0dXJuIGVudW1lcmF0aW9ufTtDcm9uLnByb3RvdHlwZS5nZXRQYXR0ZXJuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5wYXR0ZXJuP3RoaXMuX3N0YXRlcy5wYXR0ZXJuLnBhdHRlcm46dm9pZCAwfTtDcm9uLnByb3RvdHlwZS5pc1J1bm5pbmc9ZnVuY3Rpb24oKXtjb25zdCBuZXh0UnVuVGltZT10aGlzLm5leHRSdW4odGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4pO2NvbnN0IGlzUnVubmluZz0hdGhpcy5fc3RhdGVzLnBhdXNlZDtjb25zdCBpc1NjaGVkdWxlZD10aGlzLmZuIT09dm9pZCAwO2NvbnN0IG5vdElzS2lsbGVkPSF0aGlzLl9zdGF0ZXMua2lsbDtyZXR1cm4gaXNSdW5uaW5nJiZpc1NjaGVkdWxlZCYmbm90SXNLaWxsZWQmJm5leHRSdW5UaW1lIT09bnVsbH07Q3Jvbi5wcm90b3R5cGUuaXNTdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5raWxsfTtDcm9uLnByb3RvdHlwZS5pc0J1c3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGVzLmJsb2NraW5nfTtDcm9uLnByb3RvdHlwZS5jdXJyZW50UnVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuP3RoaXMuX3N0YXRlcy5jdXJyZW50UnVuLmdldERhdGUoKTpudWxsfTtDcm9uLnByb3RvdHlwZS5wcmV2aW91c1J1bj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZXMucHJldmlvdXNSdW4/dGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuLmdldERhdGUoKTpudWxsfTtDcm9uLnByb3RvdHlwZS5tc1RvTmV4dD1mdW5jdGlvbihwcmV2KXtwcmV2PXByZXZ8fG5ldyBEYXRlO2NvbnN0IG5leHQ9dGhpcy5fbmV4dChwcmV2KTtpZihuZXh0KXtyZXR1cm4gbmV4dC5nZXRUaW1lKCktcHJldi5nZXRUaW1lKCl9ZWxzZXtyZXR1cm4gbnVsbH19O0Nyb24ucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLl9zdGF0ZXMua2lsbD10cnVlO2lmKHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCl9Y29uc3Qgam9iSW5kZXg9c2NoZWR1bGVkSm9icy5pbmRleE9mKHRoaXMpO2lmKGpvYkluZGV4Pj0wKXtzY2hlZHVsZWRKb2JzLnNwbGljZShqb2JJbmRleCwxKX19O0Nyb24ucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fc3RhdGVzLnBhdXNlZD10cnVlO3JldHVybiF0aGlzLl9zdGF0ZXMua2lsbH07Q3Jvbi5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dGhpcy5fc3RhdGVzLnBhdXNlZD1mYWxzZTtyZXR1cm4hdGhpcy5fc3RhdGVzLmtpbGx9O0Nyb24ucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKGZ1bmMpe2lmKGZ1bmMmJnRoaXMuZm4pe3Rocm93IG5ldyBFcnJvcihcIkNyb246IEl0IGlzIG5vdCBhbGxvd2VkIHRvIHNjaGVkdWxlIHR3byBmdW5jdGlvbnMgdXNpbmcgdGhlIHNhbWUgQ3JvbmVyIGluc3RhbmNlLlwiKX1lbHNlIGlmKGZ1bmMpe3RoaXMuZm49ZnVuY31sZXQgd2FpdE1zPXRoaXMubXNUb05leHQoKTtjb25zdCB0YXJnZXQ9dGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKTtpZih3YWl0TXM9PT1udWxsfHx3YWl0TXM9PT11bmRlZmluZWR8fGlzTmFOKHdhaXRNcyl8fHRhcmdldD09PW51bGwpcmV0dXJuIHRoaXM7aWYod2FpdE1zPm1heERlbGF5KXt3YWl0TXM9bWF4RGVsYXl9dGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuX2NoZWNrVHJpZ2dlcih0YXJnZXQpLHdhaXRNcyk7aWYodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0JiZ0aGlzLm9wdGlvbnMudW5yZWYpe3VucmVmVGltZXIodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KX1yZXR1cm4gdGhpc307Q3Jvbi5wcm90b3R5cGUuX3RyaWdnZXI9YXN5bmMgZnVuY3Rpb24oaW5pdGlhdGlvbkRhdGUpe3RoaXMuX3N0YXRlcy5ibG9ja2luZz10cnVlO3RoaXMuX3N0YXRlcy5jdXJyZW50UnVuPW5ldyBDcm9uRGF0ZSh2b2lkIDAsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KTtpZih0aGlzLm9wdGlvbnMuY2F0Y2gpe3RyeXthd2FpdCB0aGlzLmZuKHRoaXMsdGhpcy5vcHRpb25zLmNvbnRleHQpfWNhdGNoKF9lKXtpZihpc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5jYXRjaCkpe3RoaXMub3B0aW9ucy5jYXRjaChfZSx0aGlzKX19fWVsc2V7YXdhaXQgdGhpcy5mbih0aGlzLHRoaXMub3B0aW9ucy5jb250ZXh0KX10aGlzLl9zdGF0ZXMucHJldmlvdXNSdW49bmV3IENyb25EYXRlKGluaXRpYXRpb25EYXRlLHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCk7dGhpcy5fc3RhdGVzLmJsb2NraW5nPWZhbHNlfTtDcm9uLnByb3RvdHlwZS50cmlnZ2VyPWFzeW5jIGZ1bmN0aW9uKCl7YXdhaXQgdGhpcy5fdHJpZ2dlcigpfTtDcm9uLnByb3RvdHlwZS5fY2hlY2tUcmlnZ2VyPWZ1bmN0aW9uKHRhcmdldCl7Y29uc3Qgbm93PW5ldyBEYXRlLHNob3VsZFJ1bj0hdGhpcy5fc3RhdGVzLnBhdXNlZCYmbm93LmdldFRpbWUoKT49dGFyZ2V0LGlzQmxvY2tlZD10aGlzLl9zdGF0ZXMuYmxvY2tpbmcmJnRoaXMub3B0aW9ucy5wcm90ZWN0O2lmKHNob3VsZFJ1biYmIWlzQmxvY2tlZCl7dGhpcy5fc3RhdGVzLm1heFJ1bnMtLTt0aGlzLl90cmlnZ2VyKCl9ZWxzZXtpZihzaG91bGRSdW4mJmlzQmxvY2tlZCYmaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMucHJvdGVjdCkpe3NldFRpbWVvdXQoKCk9PnRoaXMub3B0aW9ucy5wcm90ZWN0KHRoaXMpLDApfX10aGlzLnNjaGVkdWxlKCl9O0Nyb24ucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHByZXYpe2xldCBoYXNQcmV2aW91c1J1bj1wcmV2fHx0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bj90cnVlOmZhbHNlO2xldCBzdGFydEF0SW5GdXR1cmVXaXRoSW50ZXJ2YWw9ZmFsc2U7aWYoIXByZXYmJnRoaXMub3B0aW9ucy5zdGFydEF0JiZ0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpe1twcmV2LGhhc1ByZXZpb3VzUnVuXT10aGlzLl9jYWxjdWxhdGVQcmV2aW91c1J1bihwcmV2LGhhc1ByZXZpb3VzUnVuKTtzdGFydEF0SW5GdXR1cmVXaXRoSW50ZXJ2YWw9IXByZXY/dHJ1ZTpmYWxzZX1wcmV2PW5ldyBDcm9uRGF0ZShwcmV2LHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCk7aWYodGhpcy5vcHRpb25zLnN0YXJ0QXQmJnByZXYmJnByZXYuZ2V0VGltZSgpPHRoaXMub3B0aW9ucy5zdGFydEF0LmdldFRpbWUoKSl7cHJldj10aGlzLm9wdGlvbnMuc3RhcnRBdH1sZXQgbmV4dFJ1bj10aGlzLl9zdGF0ZXMub25jZXx8bmV3IENyb25EYXRlKHByZXYsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KTtpZighc3RhcnRBdEluRnV0dXJlV2l0aEludGVydmFsJiZuZXh0UnVuIT09dGhpcy5fc3RhdGVzLm9uY2Upe25leHRSdW49bmV4dFJ1bi5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sdGhpcy5vcHRpb25zLGhhc1ByZXZpb3VzUnVuKX1pZih0aGlzLl9zdGF0ZXMub25jZSYmdGhpcy5fc3RhdGVzLm9uY2UuZ2V0VGltZSgpPD1wcmV2LmdldFRpbWUoKSl7cmV0dXJuIG51bGx9ZWxzZSBpZihuZXh0UnVuPT09bnVsbHx8dGhpcy5fc3RhdGVzLm1heFJ1bnM8PTB8fHRoaXMuX3N0YXRlcy5raWxsfHx0aGlzLm9wdGlvbnMuc3RvcEF0JiZuZXh0UnVuLmdldFRpbWUoKT49dGhpcy5vcHRpb25zLnN0b3BBdC5nZXRUaW1lKCkpe3JldHVybiBudWxsfWVsc2V7cmV0dXJuIG5leHRSdW59fTtDcm9uLnByb3RvdHlwZS5fY2FsY3VsYXRlUHJldmlvdXNSdW49ZnVuY3Rpb24ocHJldixoYXNQcmV2aW91c1J1bil7Y29uc3Qgbm93PW5ldyBDcm9uRGF0ZSh1bmRlZmluZWQsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KTtpZih0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCk8PW5vdy5nZXRUaW1lKCkpe3ByZXY9dGhpcy5vcHRpb25zLnN0YXJ0QXQ7bGV0IHByZXZUaW1lUGx1c0ludGVydmFsPXByZXYuZ2V0VGltZSgpK3RoaXMub3B0aW9ucy5pbnRlcnZhbCoxZTM7d2hpbGUocHJldlRpbWVQbHVzSW50ZXJ2YWw8PW5vdy5nZXRUaW1lKCkpe3ByZXY9bmV3IENyb25EYXRlKHByZXYsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KS5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sdGhpcy5vcHRpb25zLHRydWUpO3ByZXZUaW1lUGx1c0ludGVydmFsPXByZXYuZ2V0VGltZSgpK3RoaXMub3B0aW9ucy5pbnRlcnZhbCoxZTN9aGFzUHJldmlvdXNSdW49dHJ1ZX1yZXR1cm5bcHJldixoYXNQcmV2aW91c1J1bl19O0Nyb24uQ3Jvbj1Dcm9uO0Nyb24uc2NoZWR1bGVkSm9icz1zY2hlZHVsZWRKb2JzO2V4cG9ydHtDcm9uLENyb24gYXMgZGVmYXVsdCxzY2hlZHVsZWRKb2JzfTsiLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50RW1taXRlciwgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUV2ZW50U2VydmljZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkbG9jYWxIYW5kbGVyczogU2V0PFNjcmlwdEV2ZW50SGFuZGxlcj4gPSBuZXcgU2V0KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpbnRlcm5hbEhhbmRsZXJzOiBTZXQ8U2NyaXB0RXZlbnRIYW5kbGVyPiA9IG5ldyBTZXQoKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHJlbW90ZUhhbmRsZXJzOiBTZXQ8U2NyaXB0RXZlbnRIYW5kbGVyPiA9IG5ldyBTZXQoKTtcbiAgICBwcm90ZWN0ZWQgJGludGVybmFsRXZlbnROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCAkZXZlbnRFbW1pdGVyOiBFdmVudEVtbWl0ZXIpIHt9XG5cbiAgICBwdWJsaWMgb248RSBleHRlbmRzIGtleW9mIFQ+KGV2ZW50TmFtZTogRSwgY2FsbGJhY2s6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pOiBTY3JpcHRFdmVudEhhbmRsZXI7XG4gICAgcHVibGljIG9uPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBUPiwgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPFNjcmlwdEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub24oZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG4gICAgcHVibGljIG9uY2U8RSBleHRlbmRzIGtleW9mIFQ+KGV2ZW50TmFtZTogRSwgY2FsbGJhY2s6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbmNlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBUPiwgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPik6IFNjcmlwdEV2ZW50SGFuZGxlcjtcbiAgICBwdWJsaWMgb25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IDxTY3JpcHRFdmVudEhhbmRsZXI+dGhpcy4kZXZlbnRFbW1pdGVyLm9uY2UoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdDxFIGV4dGVuZHMga2V5b2YgVD4oZXZlbnROYW1lOiBFLCBib2R5PzogVFtFXSk6IHZvaWQ7XG4gICAgcHVibGljIGVtaXQ8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFLCBib2R5PzogdW5rbm93bik6IHZvaWQ7XG4gICAgcHVibGljIGVtaXQ8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFLCBib2R5PzogdW5rbm93bikge1xuICAgICAgICB0aGlzLiRldmVudEVtbWl0ZXIuZW1pdChldmVudE5hbWUsIGJvZHkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCAkb25JbnRlcm5hbChldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGlmICghdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzLmhhcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub24oZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgICAgdGhpcy4kaW50ZXJuYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgJG9uY2VJbnRlcm5hbChldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGlmICghdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzLmhhcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPFNjcmlwdEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub25jZShldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICB0aGlzLiRpbnRlcm5hbEhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBSUENSZXN1bHQsIFJQQ0NhbGxPcHRpb25zLCBTY3JpcHRSUENIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5ELCBSUENfUkVTVUxUX1RJTUVPVVQsIFJQQ19SRVNVTFRfVU5LTk9XTiB9IGZyb20gJy4uLy4uL2FwcC9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBNYW5nb0Vycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhc2VSUENTZXJ2aWNlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJvdGVjdGVkIHJlYWRvbmx5ICRsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkVElNRU9VVCA9IDIwMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkbG9jYWxIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBTY3JpcHRSUENIYW5kbGVyPigpO1xuXG4gICAgcHVibGljIGFzeW5jIGNhbGw8RSBleHRlbmRzIGtleW9mIFQ+KFxuICAgICAgICBycGNOYW1lOiBFLFxuICAgICAgICBib2R5PzogUGFyYW1ldGVyczxUW0VdPlswXSxcbiAgICAgICAgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zLFxuICAgICk6IFByb21pc2U8UlBDUmVzdWx0PFJldHVyblR5cGU8VFtFXT4+PjtcbiAgICBwdWJsaWMgYXN5bmMgY2FsbDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zKTogUHJvbWlzZTxSUENSZXN1bHQ8dW5rbm93bj4+O1xuICAgIHB1YmxpYyBhc3luYyBjYWxsPEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU6IEUsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zOiBSUENDYWxsT3B0aW9ucyA9IHsgdGltZW91dDogdGhpcy4kVElNRU9VVCB9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuJGxvY2FsSGFuZGxlcnMuZ2V0KDxzdHJpbmc+cnBjTmFtZSk/LmhhbmRsZXI7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShSUENfUkVTVUxUX1RJTUVPVVQpO1xuICAgICAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0ID8/IHRoaXMuJFRJTUVPVVQpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoYm9keSk7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUsIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlN1Y2Nlc3MsIGJvZHk6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNYW5nb0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogeyBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBkZXRhaWxzOiBlcnJvci5kZXRhaWxzIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoUlBDX1JFU1VMVF9VTktOT1dOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBvblJlcXVlc3Q8RSBleHRlbmRzIGtleW9mIFQ+KHJwY05hbWU6IEUsIGhhbmRsZXI6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0UlBDSGFuZGxlcjtcbiAgICBwdWJsaWMgb25SZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU6IEUsIGhhbmRsZXI6IChib2R5OiB1bmtub3duKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPik6IFNjcmlwdFJQQ0hhbmRsZXI7XG4gICAgcHVibGljIG9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj4pIHtcbiAgICAgICAgaWYgKHRoaXMuJGxvY2FsSGFuZGxlcnMuaGFzKHJwY05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVnaXN0ZXIgUlBDLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENIYW5kbGVyQWxyZWFkeUV4aXN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBycGNIYW5kbGVyOiBTY3JpcHRSUENIYW5kbGVyID0ge1xuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBycGNIYW5kbGVyLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5kZWxldGUocnBjTmFtZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnBjTmFtZTogcnBjTmFtZSxcbiAgICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLiRsb2NhbEhhbmRsZXJzLnNldChycGNOYW1lLCBycGNIYW5kbGVyKTtcblxuICAgICAgICByZXR1cm4gcnBjSGFuZGxlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ29udGFpbmVyLCBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBSUENTZXJ2aWNlLCBTZXJ2ZXJNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFLCBSUENfU0VSVklDRSwgdHlwZSBMb2dnZXJTZXJ2aWNlLCB0eXBlIFJQQ0NhbGxPcHRpb25zIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IEdMT0JBTF9BUFBfQ09OVEFJTkVSLCBNVUxUSVBMQVlFUl9TRVJWSUNFLCB0eXBlIE1hbmdvUGx1Z2luIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQbGF5ZXJQcm90b3R5cGVQbHVnaW4gaW1wbGVtZW50cyBNYW5nb1BsdWdpbiB7XG4gICAgQGluamVjdChHTE9CQUxfQVBQX0NPTlRBSU5FUikgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxBcHBDb250YWluZXI6IENvbnRhaW5lcjtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGJlZm9yZUxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBQbGF5ZXIgPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5nZXRQbGF5ZXIoKTtcblxuICAgICAgICBQbGF5ZXIucHJvdG90eXBlLmVtaXRXZWJWaWV3ID0gZnVuY3Rpb24gKGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZTogc3RyaW5nLCBib2R5PzogdW5rbm93bikge1xuICAgICAgICAgICAgdGhpcy5lbWl0UmF3KCdTRVJWRVI6OkVNSVRfV0VCVklFVycsIHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJwY1NlcnZpY2UgPSB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5nZXQ8UlBDU2VydmljZT4oUlBDX1NFUlZJQ0UpO1xuXG4gICAgICAgIFBsYXllci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChycGNOYW1lOiBzdHJpbmcsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zPzogUlBDQ2FsbE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBycGNTZXJ2aWNlLmNhbGxQbGF5ZXIodGhpcywgcnBjTmFtZSwgYm9keSwgb3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgUGxheWVyLnByb3RvdHlwZS5jYWxsV2ViVmlldyA9IGZ1bmN0aW9uIChpZDogc3RyaW5nIHwgbnVtYmVyLCBycGNOYW1lOiBzdHJpbmcsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zPzogUlBDQ2FsbE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBycGNTZXJ2aWNlLmNhbGxXZWJWaWV3KHRoaXMsIGlkLCBycGNOYW1lLCBib2R5LCBvcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGB+bHd+UGxheWVyIHByb3RvdHlwZSBtZXRob2RzIGRlZmluZWQgfmxrfigke0RhdGUubm93KCkgLSB0aW1lfW1zKWApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsLCBpc051bWJlciB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIERlZmF1bHRWYWx1ZVBpcGU8VCA9IHVua25vd24sIFIgPSB1bmtub3duPiBpbXBsZW1lbnRzIFBpcGU8VCwgVCB8IFI+IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZTogVCkge31cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IFQpIHtcbiAgICAgICAgaWYgKGlzTmlsKHZhbHVlKSB8fCAoaXNOdW1iZXIodmFsdWUpICYmIGlzTmFOKDxudW1iZXI+dmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IFJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQsIHR5cGUgTWFuZ29QbHVnaW4sIFJQQ19SRVNVTFRfVU5LTk9XTiwgRXZlbnREZXN0aW5hdGlvbiB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHtcbiAgICBFVkVOVF9TRVJWSUNFLFxuICAgIE1hbmdvRXJyb3IsXG4gICAgUlBDX1NFUlZJQ0UsXG4gICAgUlBDUmVzdWx0U3RhdHVzLFxuICAgIHR5cGUgUlBDUmVzdWx0LFxuICAgIExPR0dFUl9TRVJWSUNFLFxuICAgIHR5cGUgTG9nZ2VyU2VydmljZSxcbn0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgRXZlbnRTZXJ2aWNlLCBSUENTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSUENQbHVnaW4gaW1wbGVtZW50cyBNYW5nb1BsdWdpbiB7XG4gICAgQGluamVjdChFVkVOVF9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlO1xuICAgIEBpbmplY3QoUlBDX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgcnBjU2VydmljZTogUlBDU2VydmljZTtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG5cbiAgICBwdWJsaWMgYmVmb3JlTG9hZCgpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uub25QbGF5ZXIoJ1JQQzo6Q0FMTF9TRVJWRVInLCBhc3luYyAocGxheWVyLCBib2R5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBsYXllci52YWxpZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBycGNIYW5kbGVyID1cbiAgICAgICAgICAgICAgICBib2R5LnNvdXJjZSA9PT0gRXZlbnREZXN0aW5hdGlvbi5DbGllbnRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnJwY1NlcnZpY2UuJGNsaWVudEhhbmRsZXJzLmdldChib2R5LnJwY05hbWUpXG4gICAgICAgICAgICAgICAgICAgIDogYm9keS5zb3VyY2UgPT09IEV2ZW50RGVzdGluYXRpb24uV2ViVmlld1xuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucnBjU2VydmljZS4kd2ViVmlld0hhbmRsZXJzLmdldChgJHtib2R5LndlYlZpZXdJZH06OiR7Ym9keS5ycGNOYW1lfWApXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFycGNIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRXZWJWaWV3KFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keS53ZWJWaWV3SWQgYXMgc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLkNsaWVudCkge1xuICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFJhdyhgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIFJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlclJlc3VsdCA9IGF3YWl0IHJwY0hhbmRsZXIuaGFuZGxlcihwbGF5ZXIsIGJvZHkuYm9keSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnBjUmVzdWx0OiBSUENSZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGhhbmRsZXJSZXN1bHQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoYm9keS5zb3VyY2UgPT09IEV2ZW50RGVzdGluYXRpb24uV2ViVmlldykge1xuICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFdlYlZpZXcoYm9keS53ZWJWaWV3SWQgYXMgc3RyaW5nIHwgbnVtYmVyLCBgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIHJwY1Jlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5LnNvdXJjZSA9PT0gRXZlbnREZXN0aW5hdGlvbi5DbGllbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRSYXcoYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLCBycGNSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTWFuZ29FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnBjUmVzdWx0OiBSUENSZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgZGV0YWlsczogZXJyb3IuZGV0YWlscyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllci5lbWl0V2ViVmlldyhib2R5LndlYlZpZXdJZCBhcyBzdHJpbmcgfCBudW1iZXIsIGBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8ke2JvZHkuaWR9YCwgcnBjUmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllci5lbWl0V2ViVmlldyhib2R5LndlYlZpZXdJZCBhcyBzdHJpbmcgfCBudW1iZXIsIGBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8ke2JvZHkuaWR9YCwgUlBDX1JFU1VMVF9VTktOT1dOKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zb3VyY2UgPT09IEV2ZW50RGVzdGluYXRpb24uQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE1hbmdvRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJwY1Jlc3VsdDogUlBDUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRldGFpbHM6IGVycm9yLmRldGFpbHMgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFJhdyhgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIHJwY1Jlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFJhdyhgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIFJQQ19SRVNVTFRfVU5LTk9XTik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35SUEMgaGFuZGxlcnMgcmVnaXN0ZXJlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHRpbWV9bXMpYCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEdMT0JBTF9BUFBfQ09OVEFJTkVSLCBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLCBNVUxUSVBMQVlFUl9TRVJWSUNFLCB0eXBlIE1hbmdvUGx1Z2luIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBFVkVOVF9TRVJWSUNFLCBMT0dHRVJfU0VSVklDRSwgUlBDX1NFUlZJQ0UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHsgU2VydmVyRXZlbnRTZXJ2aWNlLCBTZXJ2ZXJMb2dnZXJTZXJ2aWNlLCBTZXJ2ZXJSUENTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNlcnZlckFsdE11bHRpcGxheWVyU2VydmNlVjEsIFNlcnZlckFsdE11bHRpcGxheWVyU2VydmNlVjIgfSBmcm9tICcuLi9tdWx0aXBsYXllcic7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQmluZGVyUGx1Z2luIGltcGxlbWVudHMgTWFuZ29QbHVnaW4ge1xuICAgIEBpbmplY3QoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikgcHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoR0xPQkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG5cbiAgICBwdWJsaWMgYXN5bmMgb25CdWlsZCgpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChMT0dHRVJfU0VSVklDRSkudG8oU2VydmVyTG9nZ2VyU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKEVWRU5UX1NFUlZJQ0UpLnRvKFNlcnZlckV2ZW50U2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKFJQQ19TRVJWSUNFKS50byhTZXJ2ZXJSUENTZXJ2aWNlKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKExPR0dFUl9TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUodGhpcy5nbG9iYWxBcHBDb250YWluZXIuZ2V0KExPR0dFUl9TRVJWSUNFKSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChFVkVOVF9TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUodGhpcy5nbG9iYWxBcHBDb250YWluZXIuZ2V0KEVWRU5UX1NFUlZJQ0UpKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFJQQ19TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUodGhpcy5nbG9iYWxBcHBDb250YWluZXIuZ2V0KFJQQ19TRVJWSUNFKSk7XG5cbiAgICAgICAgY29uc3QgbG9nZ2VyU2VydmljZSA9IHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldDxTZXJ2ZXJMb2dnZXJTZXJ2aWNlPihMT0dHRVJfU0VSVklDRSk7XG4gICAgICAgIGxvZ2dlclNlcnZpY2UubG9nKGB+bHd+SW50ZXJuYWwgc2VydmljZXMgYmluZGVkIH5sa34oJHtEYXRlLm5vdygpIC0gdGltZX1tcylgKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQmFzZUV2ZW50U2VydmljZSwgTVVMVElQTEFZRVJfU0VSVklDRSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IElOVEVSTkFMX0VWRU5UUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50U2VydmljZSwgTXVsdGlwbGF5ZXJQbGF5ZXIsIFNlcnZlckV2ZW50RW1taXRlciwgU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZXJFdmVudFNlcnZpY2UgZXh0ZW5kcyBCYXNlRXZlbnRTZXJ2aWNlPE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlckV2ZW50PiBpbXBsZW1lbnRzIEV2ZW50U2VydmljZSB7XG4gICAgcHJpdmF0ZSAkcmFnZUV2ZW50czogU2VydmVyRXZlbnRFbW1pdGVyO1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIG11bHRpcGxheWVyU2VydmljZTogU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKG11bHRpcGxheWVyU2VydmljZS5FdmVudHMpO1xuICAgICAgICB0aGlzLiRyYWdlRXZlbnRzID0gbXVsdGlwbGF5ZXJTZXJ2aWNlLkV2ZW50cztcbiAgICAgICAgdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzID0gbmV3IFNldChPYmplY3QudmFsdWVzKElOVEVSTkFMX0VWRU5UUykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllcjxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKHBsYXllcjogVSwgLi4uYXJnczogdW5rbm93bltdKSA9PiBjYWxsYmFjayhwbGF5ZXIsIGFyZ3NbMF0pO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLiRyYWdlRXZlbnRzLm9uUGxheWVyKGV2ZW50TmFtZSwgd3JhcHBlcik7XG4gICAgICAgIHRoaXMuJHJlbW90ZUhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbmNlUGxheWVyPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21QbGF5ZXJUb1NlcnZlckV2ZW50PixcbiAgICAgICAgY2FsbGJhY2s6IChwbGF5ZXI6IFUsIGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICAgICk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSAocGxheWVyOiBVLCAuLi5hcmdzOiB1bmtub3duW10pID0+IGNhbGxiYWNrKHBsYXllciwgYXJnc1swXSEpO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLiRyYWdlRXZlbnRzLm9uY2VQbGF5ZXIoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kcmVtb3RlSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3RlPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21QbGF5ZXJUb1NlcnZlckV2ZW50PixcbiAgICAgICAgY2FsbGJhY2s6IChwbGF5ZXI6IFUsIGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICAgICk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uUGxheWVyKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbmNlUmVtb3RlPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21QbGF5ZXJUb1NlcnZlckV2ZW50PixcbiAgICAgICAgY2FsbGJhY2s6IChwbGF5ZXI6IFUsIGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICAgICk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uY2VQbGF5ZXIoZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRQbGF5ZXJzPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIHBsYXllcnM6IFVbXSxcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvUGxheWVyRXZlbnQ+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICApOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBwbGF5ZXIgb2YgcGxheWVycykge1xuICAgICAgICAgICAgcGxheWVyLmNhbGwoZXZlbnROYW1lLCBbYm9keV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRQbGF5ZXJzVW5yZWxpYWJsZTxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgTXVsdGlwbGF5ZXJQbGF5ZXI+KFxuICAgICAgICBwbGF5ZXJzOiBVW10sXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCB1c2VzIGNhbGxVbnJlbGlhYmxlIGZvciB1bnJlbGlhYmxlIG1lc3NhZ2VzXG4gICAgICAgIGZvciAoY29uc3QgcGxheWVyIG9mIHBsYXllcnMpIHtcbiAgICAgICAgICAgIHBsYXllci5jYWxsVW5yZWxpYWJsZShldmVudE5hbWUsIFtib2R5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdEFsbFBsYXllcnM8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvUGxheWVyRXZlbnQ+LCBib2R5PzogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBtcC5wbGF5ZXJzLmNhbGwoZXZlbnROYW1lLCBbYm9keV0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0QWxsUGxheWVyc1VucmVsaWFibGU8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvUGxheWVyRXZlbnQ+LCBib2R5PzogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBtcC5wbGF5ZXJzLmNhbGxVbnJlbGlhYmxlKGV2ZW50TmFtZSwgW2JvZHldKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25XZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5vblBsYXllcig8c3RyaW5nPmBTRVJWRVI6Ok9OX1dFQlZJRVdfJHtldmVudE5hbWV9XyR7aWR9YCwgPGFueT5jYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uY2VXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5vbmNlUGxheWVyKDxzdHJpbmc+YFNFUlZFUjo6T05fV0VCVklFV18ke2V2ZW50TmFtZX1fJHtpZH1gLCA8YW55PmNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdFdlYlZpZXdzPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIHBsYXllcnM6IFVbXSxcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvV2ViVmlld0V2ZW50PixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgKTogdm9pZCB7XG4gICAgICAgICg8RXZlbnRTZXJ2aWNlPnRoaXMpLmVtaXRQbGF5ZXJzKHBsYXllcnMsICdTRVJWRVI6OkVNSVRfV0VCVklFVycsIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgcGF5bG9hZDogYm9keSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRBbGxXZWJWaWV3czxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvV2ViVmlld0V2ZW50PixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgKTogdm9pZCB7XG4gICAgICAgICg8RXZlbnRTZXJ2aWNlPnRoaXMpLmVtaXRBbGxQbGF5ZXJzKCdTRVJWRVI6OkVNSVRfV0VCVklFVycsIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgcGF5bG9hZDogYm9keSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRBbGxXZWJWaWV3c1VucmVsaWFibGU8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1dlYlZpZXdFdmVudD4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICk6IHZvaWQge1xuICAgICAgICAoPEV2ZW50U2VydmljZT50aGlzKS5lbWl0QWxsUGxheWVyc1VucmVsaWFibGUoJ1NFUlZFUjo6RU1JVF9XRUJWSUVXJywge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgICBwYXlsb2FkOiBib2R5LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSYWdlTVAgc2VydmVyIGV2ZW50c1xuICAgIHB1YmxpYyBvblBsYXllckpvaW4oY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckpvaW4nLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyUXVpdChjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGV4aXRUeXBlOiBzdHJpbmcsIHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllclF1aXQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyUmVhZHkoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllclJlYWR5JywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckRlYXRoKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgcmVhc29uOiBudW1iZXIsIGtpbGxlcj86IFBsYXllck1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckRlYXRoJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllclNwYXduKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJTcGF3bicsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJDaGF0KGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgdGV4dDogc3RyaW5nKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckNoYXQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyQ29tbWFuZChjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGNvbW1hbmQ6IHN0cmluZykgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJDb21tYW5kJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckVudGVyVmVoaWNsZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIHZlaGljbGU6IFZlaGljbGVNcCwgc2VhdDogbnVtYmVyKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckVudGVyVmVoaWNsZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJFeGl0VmVoaWNsZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIHZlaGljbGU6IFZlaGljbGVNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFeGl0VmVoaWNsZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJTdGFydEVudGVyVmVoaWNsZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIHZlaGljbGU6IFZlaGljbGVNcCwgc2VhdDogbnVtYmVyKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllclN0YXJ0RW50ZXJWZWhpY2xlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllclN0YXJ0RXhpdFZlaGljbGUoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCB2ZWhpY2xlOiBWZWhpY2xlTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyU3RhcnRFeGl0VmVoaWNsZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJXZWFwb25DaGFuZ2UoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBvbGRXZWFwb246IG51bWJlciwgbmV3V2VhcG9uOiBudW1iZXIpID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyV2VhcG9uQ2hhbmdlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckRhbWFnZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGhlYWx0aExvc3M6IG51bWJlciwgYXJtb3JMb3NzOiBudW1iZXIpID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRGFtYWdlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblZlaGljbGVEZWF0aChjYWxsYmFjazogKHZlaGljbGU6IFZlaGljbGVNcCwgaGFzaDogbnVtYmVyLCBraWxsZXI/OiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCd2ZWhpY2xlRGVhdGgnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVmVoaWNsZURhbWFnZShjYWxsYmFjazogKHZlaGljbGU6IFZlaGljbGVNcCwgYm9keUhlYWx0aExvc3M6IG51bWJlciwgZW5naW5lSGVhbHRoTG9zczogbnVtYmVyKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3ZlaGljbGVEYW1hZ2UnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRW50ZXJDb2xzaGFwZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGNvbHNoYXBlOiBDb2xzaGFwZU1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckVudGVyQ29sc2hhcGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdENvbHNoYXBlKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgY29sc2hhcGU6IENvbHNoYXBlTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdENvbHNoYXBlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckVudGVyQ2hlY2twb2ludChjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGNoZWNrcG9pbnQ6IENoZWNrcG9pbnRNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFbnRlckNoZWNrcG9pbnQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdENoZWNrcG9pbnQoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBjaGVja3BvaW50OiBDaGVja3BvaW50TXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdENoZWNrcG9pbnQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLy8gQWxpYXNlcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIHB1YmxpYyBvblBsYXllckNvbm5lY3QoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25QbGF5ZXJKb2luKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJEaXNjb25uZWN0KGNhbGxiYWNrOiAoY29udGV4dDogeyBwbGF5ZXI6IFBsYXllck1wOyBleGl0VHlwZTogc3RyaW5nOyByZWFzb246IHN0cmluZyB9KSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllclF1aXQnLCAocGxheWVyOiBQbGF5ZXJNcCwgZXhpdFR5cGU6IHN0cmluZywgcmVhc29uOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHsgcGxheWVyLCBleGl0VHlwZSwgcmVhc29uIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IElOVEVSTkFMX0VWRU5UUyA9IHtcbiAgICBTQ1JJUFRfUlBDOiAnc2NyaXB0UlBDJyxcbiAgICBTQ1JJUFRfUlBDX0FOU1dFUjogJ3NjcmlwdFJQQ0Fuc3dlcicsXG4gICAgU0VSVkVSX1NUQVJURUQ6ICdzZXJ2ZXJTdGFydGVkJyxcbiAgICBDT05ORUNUSU9OX1FVRVVFX0FERDogJ2Nvbm5lY3Rpb25RdWV1ZUFkZCcsXG4gICAgQ09OTkVDVElPTl9RVUVVRV9SRU1PVkU6ICdjb25uZWN0aW9uUXVldWVSZW1vdmUnLFxuICAgIFBMQVlFUl9DT05ORUNUOiAncGxheWVyQ29ubmVjdCcsXG4gICAgUExBWUVSX0NPTk5FQ1RfREVOSUVEOiAncGxheWVyQ29ubmVjdERlbmllZCcsXG4gICAgUExBWUVSX0RJU0NPTk5FQ1Q6ICdwbGF5ZXJEaXNjb25uZWN0JyxcbiAgICBQTEFZRVJfREFNQUdFOiAncGxheWVyRGFtYWdlJyxcbiAgICBQTEFZRVJfREVBVEg6ICdwbGF5ZXJEZWF0aCcsXG4gICAgUExBWUVSX0hFQUw6ICdwbGF5ZXJIZWFsJyxcbiAgICBQTEFZRVJfQ09OVFJPTF9SRVFVRVNUOiAncGxheWVyQ29udHJvbFJlcXVlc3QnLFxuICAgIFBMQVlFUl9JTlRFUklPUl9DSEFOR0U6ICdwbGF5ZXJJbnRlcmlvckNoYW5nZScsXG4gICAgUExBWUVSX0RJTUVOU0lPTl9DSEFOR0U6ICdwbGF5ZXJEaW1lbnNpb25DaGFuZ2UnLFxuICAgIFBMQVlFUl9XRUFQT05fQ0hBTkdFOiAncGxheWVyV2VhcG9uQ2hhbmdlJyxcbiAgICBQTEFZRVJfU1lOQ0VEX1NDRU5FX1JFUVVFU1Q6ICdwbGF5ZXJTeW5jZWRTY2VuZVJlcXVlc3QnLFxuICAgIFBMQVlFUl9TWU5DRURfU0NFTkVfU1RBUlQ6ICdwbGF5ZXJTeW5jZWRTY2VuZVN0YXJ0JyxcbiAgICBQTEFZRVJfU1lOQ0VEX1NDRU5FX1NUT1A6ICdwbGF5ZXJTeW5jZWRTY2VuZVN0b3AnLFxuICAgIFBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFOiAncGxheWVyU3luY2VkU2NlbmVVcGRhdGUnLFxuICAgIFBMQVlFUl9TUEFXTjogJ3BsYXllclNwYXduJyxcbiAgICBQTEFZRVJfQU5JTUFUSU9OX0NIQU5HRTogJ3BsYXllckFuaW1hdGlvbkNoYW5nZScsXG4gICAgUExBWUVSX1ZFSElDTEVfRU5URVJFRDogJ3BsYXllclZlaGljbGVFbnRlcmVkJyxcbiAgICBQTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUjogJ3BsYXllclN0YXJ0VmVoaWNsZUVudGVyJyxcbiAgICBQTEFZRVJfVkVISUNMRV9MRUZUOiAncGxheWVyVmVoaWNsZUxlZnQnLFxuICAgIFBMQVlFUl9WRUhJQ0xFX1NFQVRfQ0hBTkdFOiAncGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UnLFxuICAgIFBFRF9IRUFMOiAncGVkSGVhbCcsXG4gICAgUEVEX0RFQVRIOiAncGVkRGVhdGgnLFxuICAgIFBFRF9EQU1BR0U6ICdwZWREYW1hZ2UnLFxuICAgIFZFSElDTEVfREVTVFJPWTogJ3ZlaGljbGVEZXN0cm95JyxcbiAgICBWRUhJQ0xFX0FUVEFDSDogJ3ZlaGljbGVBdHRhY2gnLFxuICAgIFZFSElDTEVfREVUQUNIOiAndmVoaWNsZURldGFjaCcsXG4gICAgVkVISUNMRV9EQU1BR0U6ICd2ZWhpY2xlRGFtYWdlJyxcbiAgICBWRUhJQ0xFX1NJUkVOX1NUQVRFX0NIQU5HRTogJ3ZlaGljbGVTaXJlblN0YXRlQ2hhbmdlJyxcbiAgICBWRUhJQ0xFX0hPUk5fU1RBVEVfQ0hBTkdFOiAndmVoaWNsZUhvcm5TdGF0ZUNoYW5nZScsXG4gICAgVk9JQ0VfQ09OTkVDVElPTjogJ3ZvaWNlQ29ubmVjdGlvbicsXG4gICAgQ0xJRU5UX09CSkVDVF9ERUxFVEU6ICdjbGllbnRPYmplY3REZWxldGUnLFxuICAgIENMSUVOVF9PQkpFQ1RfUkVRVUVTVDogJ2NsaWVudE9iamVjdFJlcXVlc3QnLFxuICAgIEJBU0VfT0JKRUNUX0NSRUFURTogJ2Jhc2VPYmplY3RDcmVhdGUnLFxuICAgIEJBU0VfT0JKRUNUX1JFTU9WRTogJ2Jhc2VPYmplY3RSZW1vdmUnLFxuICAgIE5FVF9PV05FUl9DSEFOR0U6ICduZXRPd25lckNoYW5nZScsXG4gICAgV0VBUE9OX0RBTUFHRTogJ3dlYXBvbkRhbWFnZScsXG4gICAgTUVUQV9DSEFOR0U6ICdtZXRhQ2hhbmdlJyxcbiAgICBMT0NBTF9NRVRBX0NIQU5HRTogJ2xvY2FsTWV0YUNoYW5nZScsXG4gICAgU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRTogJ3N0cmVhbVN5bmNlZE1ldGFDaGFuZ2UnLFxuICAgIEdMT0JBTF9NRVRBX0NIQU5HRTogJ2dsb2JhbE1ldGFDaGFuZ2UnLFxuICAgIEdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0U6ICdnbG9iYWxTeW5jZWRNZXRhQ2hhbmdlJyxcbiAgICBDT05TT0xFX0NPTU1BTkQ6ICdjb25zb2xlQ29tbWFuZCcsXG4gICAgRVJST1I6ICdlcnJvcicsXG4gICAgQ09MX1NIQVBFX0VWRU5UOiAnY29sU2hhcGVFdmVudCcsXG4gICAgRVhQTE9TSU9OOiAnZXhwbG9zaW9uJyxcbiAgICBGSVJFX1NUQVJUOiAnZmlyZVN0YXJ0JyxcbiAgICBQUk9KRUNUSUxFX1NUQVJUOiAncHJvamVjdGlsZVN0YXJ0JyxcbiAgICBFTlRJVFlfQ09MX1NIQVBFX0VOVEVSOiAnZW50aXR5Q29sU2hhcGVFbnRlcicsXG4gICAgRU5USVRZX0NPTF9TSEFQRV9MRUFWRTogJ2VudGl0eUNvbFNoYXBlTGVhdmUnLFxuICAgIEVOVElUWV9DSEVDS1BPSU5UX0VOVEVSOiAnZW50aXR5Q2hlY2twb2ludEVudGVyJyxcbiAgICBFTlRJVFlfQ0hFQ0tQT0lOVF9MRUFWRTogJ2VudGl0eUNoZWNrcG9pbnRMZWF2ZScsXG4gICAgR0lWRV9QRURfU0NSSVBURURfVEFTSzogJ2dpdmVQZWRTY3JpcHRlZFRhc2snLFxuICAgIExPQ0FMX1NDUklQVF9FVkVOVDogJ2xvY2FsU2NyaXB0RXZlbnQnLFxuICAgIFJFTU9URV9TQ1JJUFRfRVZFTlQ6ICdyZW1vdGVTY3JpcHRFdmVudCcsXG5cbiAgICBBTllfUkVTT1VSQ0VfU1RBUlQ6ICdhbnlSZXNvdXJjZVN0YXJ0JyxcbiAgICBBTllfUkVTT1VSQ0VfU1RPUDogJ2FueVJlc291cmNlU3RvcCcsXG5cbiAgICBSRVNPVVJDRV9TVEFSVDogJ3Jlc291cmNlU3RhcnQnLFxuICAgIFJFU09VUkNFX1NUT1A6ICdyZXNvdXJjZVN0b3AnLFxuICAgIFJFU09VUkNFX0VSUk9SOiAncmVzb3VyY2VFcnJvcicsXG4gICAgRVZFTlQ6ICdldmVudCcsXG59O1xuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBNQU5HT19MT0dfUFJFRklYLCBNVUxUSVBMQVlFUl9TRVJWSUNFIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlcnZlckxvZ2dlclNlcnZpY2UgaW1wbGVtZW50cyBMb2dnZXJTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIG11bHRpcGxheWVyU2VydmljZTogU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBsb2coLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLmxvZyhgfnd+W355fiR7TUFOR09fTE9HX1BSRUZJWH1TZXJ2ZXJ+d35dW35sYn5Mb2d+d35dYCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdhcm4oLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLmxvZ1dhcm5pbmcoYFske01BTkdPX0xPR19QUkVGSVh9U2VydmVyXVtXYXJuXWAsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlcnJvciguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tdWx0aXBsYXllclNlcnZpY2UubG9nRXJyb3IoYFske01BTkdPX0xPR19QUkVGSVh9U2VydmVyXVtFcnJvcl1gLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVidWcoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLmxvZ0RlYnVnKGB+d35bfnl+JHtNQU5HT19MT0dfUFJFRklYfVNlcnZlcn53fl1bfmxjfkRlYnVnfnd+XWAsIC4uLmFyZ3MpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHtcbiAgICBCYXNlUlBDU2VydmljZSxcbiAgICBFdmVudERlc3RpbmF0aW9uLFxuICAgIHR5cGUgUlBDUGF5bG9hZCxcbiAgICBSUENfUkVTVUxUX1RJTUVPVVQsXG4gICAgUlBDX1JFU1VMVF9QTEFZRVJfRElTQ09OTkVDVEVELFxuICAgIFJQQ19SRVNVTFRfUExBWUVSX05PVF9GT1VORCxcbn0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQge1xuICAgIEVWRU5UX1NFUlZJQ0UsXG4gICAgRXJyb3JNZXNzYWdlLFxuICAgIHR5cGUgUlBDQ2FsbE9wdGlvbnMsXG4gICAgdHlwZSBSUENSZXN1bHQsXG4gICAgdHlwZSBTY3JpcHRSUENIYW5kbGVyLFxuICAgIGdlbmVyYXRlUmFuZG9tSWQsXG59IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5pbXBvcnQgdHlwZSB7IE11bHRpcGxheWVyUGxheWVyLCBSUENTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmVyLWV2ZW50LnNlcnZpY2UnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VydmVyUlBDU2VydmljZSBleHRlbmRzIEJhc2VSUENTZXJ2aWNlPE1hbmdvUlBDLkN1c3RvbVNlcnZlclJQQz4gaW1wbGVtZW50cyBSUENTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KEVWRU5UX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJGV2ZW50U2VydmljZTogU2VydmVyRXZlbnRTZXJ2aWNlO1xuICAgIHB1YmxpYyByZWFkb25seSAkY2xpZW50SGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgU2NyaXB0UlBDSGFuZGxlcj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgJHdlYlZpZXdIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBTY3JpcHRSUENIYW5kbGVyPigpO1xuXG4gICAgcHVibGljIGFzeW5jIGNhbGxQbGF5ZXI8RSBleHRlbmRzIHN0cmluZywgVSBleHRlbmRzIE11bHRpcGxheWVyUGxheWVyPihcbiAgICAgICAgcGxheWVyOiBVLFxuICAgICAgICBycGNOYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbVNlcnZlclRvQ2xpZW50UlBDPixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgICAgIG9wdGlvbnM6IFJQQ0NhbGxPcHRpb25zID0geyB0aW1lb3V0OiB0aGlzLiRUSU1FT1VUIH0sXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVDYWxsKHBsYXllciwgcnBjTmFtZSwgRXZlbnREZXN0aW5hdGlvbi5DbGllbnQsIG9wdGlvbnMsIGJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllclJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZywgVSBleHRlbmRzIE11bHRpcGxheWVyUGxheWVyPihcbiAgICAgICAgcnBjTmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21DbGllbnRUb1NlcnZlclJQQz4sXG4gICAgICAgIGhhbmRsZXI6IChzZW5kZXI6IFUsIGJvZHk6IHVua25vd24pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+LFxuICAgICkge1xuICAgICAgICBpZiAodGhpcy4kY2xpZW50SGFuZGxlcnMuaGFzKHJwY05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVnaXN0ZXIgUlBDLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENIYW5kbGVyQWxyZWFkeUV4aXN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBycGNIYW5kbGVyOiBTY3JpcHRSUENIYW5kbGVyID0ge1xuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBycGNIYW5kbGVyLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kY2xpZW50SGFuZGxlcnMuZGVsZXRlKHJwY05hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJwY05hbWUsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy4kY2xpZW50SGFuZGxlcnMuc2V0KHJwY05hbWUsIHJwY0hhbmRsZXIpO1xuXG4gICAgICAgIHJldHVybiBycGNIYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYWxsV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgTXVsdGlwbGF5ZXJQbGF5ZXI+KFxuICAgICAgICBwbGF5ZXI6IFUsXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIHJwY05hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyVG9XZWJWaWV3UlBDPixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgICAgIG9wdGlvbnM6IFJQQ0NhbGxPcHRpb25zID0geyB0aW1lb3V0OiB0aGlzLiRUSU1FT1VUIH0sXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVDYWxsKHBsYXllciwgcnBjTmFtZSwgRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3LCBvcHRpb25zLCBib2R5LCBpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uV2ViVmlld1JlcXVlc3Q8RSBleHRlbmRzIGtleW9mIE1hbmdvUlBDLkN1c3RvbVdlYlZpZXdUb1NlcnZlclJQQywgVSBleHRlbmRzIE11bHRpcGxheWVyUGxheWVyPihcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgcnBjTmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUEM+LFxuICAgICAgICBoYW5kbGVyOiAoXG4gICAgICAgICAgICBwbGF5ZXI6IFUsXG4gICAgICAgICAgICBib2R5OiBQYXJhbWV0ZXJzPE1hbmdvUlBDLkN1c3RvbVdlYlZpZXdUb1NlcnZlclJQQ1tFXT5bMF0sXG4gICAgICAgICkgPT4gUmV0dXJuVHlwZTxNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUENbRV0+LFxuICAgICkge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHtpZH06OiR7cnBjTmFtZX1gO1xuICAgICAgICBpZiAodGhpcy4kd2ViVmlld0hhbmRsZXJzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVnaXN0ZXIgUlBDLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENIYW5kbGVyQWxyZWFkeUV4aXN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBycGNIYW5kbGVyOiBTY3JpcHRSUENIYW5kbGVyID0ge1xuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBycGNIYW5kbGVyLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kd2ViVmlld0hhbmRsZXJzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJwY05hbWUsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy4kd2ViVmlld0hhbmRsZXJzLnNldChrZXksIHJwY0hhbmRsZXIpO1xuXG4gICAgICAgIHJldHVybiBycGNIYW5kbGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgJGhhbmRsZUNhbGw8VFJlc3VsdD4oXG4gICAgICAgIHBsYXllcjogTXVsdGlwbGF5ZXJQbGF5ZXIsXG4gICAgICAgIHJwY05hbWU6IHN0cmluZyxcbiAgICAgICAgZGVzdGluYXRpb246IEV2ZW50RGVzdGluYXRpb24sIC8vICdjbGllbnQnIHwgJ3dlYnZpZXcnLFxuICAgICAgICBvcHRpb25zPzogUGFydGlhbDxSUENDYWxsT3B0aW9ucz4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICAgICB3ZWJWaWV3SWQ/OiBzdHJpbmcgfCBudW1iZXIsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxSUENSZXN1bHQ8VFJlc3VsdD4+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBsYXllci52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5SUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2FsbElkID0gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgICAgICAgICAgbGV0IHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGRpc2Nvbm5lY3RIYW5kbGVyID0gdGhpcy4kZXZlbnRTZXJ2aWNlLm9uUGxheWVyRGlzY29ubmVjdCgoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnBsYXllciA9PT0gcGxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgICAgICBkaXNjb25uZWN0SGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5SUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBvbmNlSGFuZGxlID0gKF9wbGF5ZXI6IE11bHRpcGxheWVyUGxheWVyLCBib2R5OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgZGlzY29ubmVjdEhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5ib2R5KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBFeGFtcGxlOiBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8yMWV3ckVxLCBSUEM6OlJFVFVSTl9GUk9NX1dFQlZJRVdfdGVFcWQyXG4gICAgICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPVxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXdcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiRldmVudFNlcnZpY2Uub25jZVdlYlZpZXcod2ViVmlld0lkISwgYFJQQzo6UkVUVVJOX0ZST01fV0VCVklFV18ke2NhbGxJZH1gLCBvbmNlSGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJGV2ZW50U2VydmljZS5vbmNlUGxheWVyKGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke2NhbGxJZH1gLCBvbmNlSGFuZGxlKTtcblxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZDogUlBDUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IEV2ZW50RGVzdGluYXRpb24uU2VydmVyLFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICAgIGlkOiBjYWxsSWQsXG4gICAgICAgICAgICAgICAgcnBjTmFtZSxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIEV4YW1wbGU6IFJQQzo6Q0FMTF9TRVJWRVIsIFJQQzo6Q0FMTF9XRUJWSUVXXG4gICAgICAgICAgICBkZXN0aW5hdGlvbiA9PT0gRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3XG4gICAgICAgICAgICAgICAgPyBwbGF5ZXIuZW1pdFdlYlZpZXcod2ViVmlld0lkISwgJ1JQQzo6Q0FMTF9XRUJWSUVXJywgcGF5bG9hZClcbiAgICAgICAgICAgICAgICA6IHBsYXllci5lbWl0KCdSUEM6OkNBTExfQ0xJRU5UJywgcGF5bG9hZCk7XG5cbiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSg8UlBDUmVzdWx0PFRSZXN1bHQ+PlJQQ19SRVNVTFRfVElNRU9VVCk7XG4gICAgICAgICAgICB9LCBvcHRpb25zPy50aW1lb3V0ID8/IHRoaXMuJFRJTUVPVVQpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcblxuZXhwb3J0IGNsYXNzIFJhZ2VNUFNlcnZlclNjcmlwdEV2ZW50IGltcGxlbWVudHMgU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBldmVudE5hbWU6IHN0cmluZyxcbiAgICAgICAgcHJpdmF0ZSBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLFxuICAgICkge31cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5yZW1vdmUodGhpcy5ldmVudE5hbWUsIHRoaXMubGlzdGVuZXIpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHR5cGUgeyBNdWx0aXBsYXllclBsYXllciwgU2VydmVyRXZlbnRFbW1pdGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudCB9IGZyb20gJy4vcmFnZW1wLXNjcmlwdC1ldmVudC1oYW5kbGVyJztcblxuZXhwb3J0IGNsYXNzIFNlcnZlclJhZ2VNUEV2ZW50RW1taXRlciBpbXBsZW1lbnRzIFNlcnZlckV2ZW50RW1taXRlciB7XG4gICAgcHJpdmF0ZSBtYXBFdmVudHNTaGFyZWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgIC8vIE1hcCBhbHQ6ViBldmVudCBuYW1lcyB0byBSYWdlTVAgZXF1aXZhbGVudHNcbiAgICAgICAgJ2VudGl0eUNvbFNoYXBlRW50ZXInOiAncGxheWVyRW50ZXJDb2xzaGFwZScsXG4gICAgICAgICdlbnRpdHlDb2xTaGFwZUxlYXZlJzogJ3BsYXllckV4aXRDb2xzaGFwZScsXG4gICAgICAgICdwbGF5ZXJWZWhpY2xlRW50ZXJlZCc6ICdwbGF5ZXJFbnRlclZlaGljbGUnLFxuICAgICAgICAncGxheWVyVmVoaWNsZUxlZnQnOiAncGxheWVyRXhpdFZlaGljbGUnLFxuICAgICAgICAncGxheWVyU3RhcnRWZWhpY2xlRW50ZXInOiAncGxheWVyU3RhcnRFbnRlclZlaGljbGUnLFxuICAgICAgICAncGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UnOiAncGxheWVyRXhpdFZlaGljbGUnLCAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIHNlYXQgY2hhbmdlLCBjbG9zZXN0IGlzIGV4aXRcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXBFdmVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSkge31cblxuICAgIHByaXZhdGUgZ2V0RXZlbnROYW1lKGV2ZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwRXZlbnRzU2hhcmVkW2V2ZW50TmFtZV0gfHwgdGhpcy5tYXBFdmVudHNbZXZlbnROYW1lXSB8fCBldmVudE5hbWU7XG4gICAgfVxuXG4gICAgZW1pdChldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLmNhbGwoZXZlbnROYW1lLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50TmFtZSA9IHRoaXMuZ2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICAgIG1wLmV2ZW50cy5hZGQobWFwcGVkRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQobWFwcGVkRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgb25jZShldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50TmFtZSA9IHRoaXMuZ2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICAgIGNvbnN0IG9uY2VXcmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKG1hcHBlZEV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICAgICAgbGlzdGVuZXIoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIG1wLmV2ZW50cy5hZGQobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgfVxuXG4gICAgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgZW1pdFBsYXllcihwbGF5ZXI6IE11bHRpcGxheWVyUGxheWVyLCBldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgLy8gSW4gUmFnZU1QLCBwbGF5ZXIuY2FsbCgpIGlzIHVzZWQgdG8gZW1pdCBldmVudHMgdG8gY2xpZW50c1xuICAgICAgICAocGxheWVyIGFzIGFueSkuY2FsbChldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRBbGxQbGF5ZXJzUmF3KGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBJbiBSYWdlTVAsIHVzZSBtcC5wbGF5ZXJzLmNhbGwoKSB0byBlbWl0IHRvIGFsbCBwbGF5ZXJzXG4gICAgICAgIG1wLnBsYXllcnMuY2FsbChldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRBbGxQbGF5ZXJzVW5yZWxpYWJsZVJhdyhldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGhhcyBjYWxsVW5yZWxpYWJsZSBmb3IgdW5yZWxpYWJsZSBldmVudHNcbiAgICAgICAgbXAucGxheWVycy5jYWxsVW5yZWxpYWJsZShldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRVbnJlbGlhYmxlUmF3KHBsYXllcnM6IE11bHRpcGxheWVyUGxheWVyW10sIGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IHBsYXllciBvZiBwbGF5ZXJzKSB7XG4gICAgICAgICAgICAocGxheWVyIGFzIGFueSkuY2FsbFVucmVsaWFibGUoZXZlbnROYW1lLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheWVyKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgLy8gSW4gUmFnZU1QLCBjbGllbnQgZXZlbnRzIGNvbWUgdGhyb3VnaCB0aGUgc2FtZSBtcC5ldmVudHMuYWRkXG4gICAgICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0eXBpY2FsbHkgdGhlIHBsYXllciB3aG8gc2VudCB0aGUgZXZlbnRcbiAgICAgICAgY29uc3QgbWFwcGVkRXZlbnROYW1lID0gdGhpcy5nZXRFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChtYXBwZWRFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudChtYXBwZWRFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBvbmNlUGxheWVyKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgY29uc3QgbWFwcGVkRXZlbnROYW1lID0gdGhpcy5nZXRFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgICAgY29uc3Qgb25jZVdyYXBwZXIgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5yZW1vdmUobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgICAgICBsaXN0ZW5lciguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChtYXBwZWRFdmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudChtYXBwZWRFdmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBvZmZQbGF5ZXIoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFdmVudEVtbWl0ZXIsIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIgfSBmcm9tICcuL3JhZ2VtcC1ldmVudC1lbW1pdGVyJztcblxuZXhwb3J0IGNsYXNzIFNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBleHRlbmRzIFJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBpbXBsZW1lbnRzIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB7XG4gICAgcHVibGljIG92ZXJyaWRlIEV2ZW50czogU2VydmVyRXZlbnRFbW1pdGVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuRXZlbnRzID0gbmV3IFNlcnZlclJhZ2VNUEV2ZW50RW1taXRlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQbGF5ZXIoKSB7XG4gICAgICAgIC8vIFJldHVybiB0aGUgbXAuUGxheWVyIGNvbnN0cnVjdG9yIGZvciBmYWN0b3J5IHB1cnBvc2VzXG4gICAgICAgIHJldHVybiAobXAgYXMgYW55KS5QbGF5ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEJsaXBGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGZhY3RvcnkgcGF0dGVybiBsaWtlIGFsdDpWXG4gICAgICAgIC8vIFdlIGNhbiBleHRlbmQgdGhlIHByb3RvdHlwZSBpbnN0ZWFkXG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkJsaXApIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuQmxpcC5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1hcmtlckZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLk1hcmtlcikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5NYXJrZXIucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb2xTaGFwZUZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkNvbHNoYXBlKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLkNvbHNoYXBlLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q2hlY2twb2ludEZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkNoZWNrcG9pbnQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuQ2hlY2twb2ludC5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE9iamVjdEZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLk9iamVjdCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5PYmplY3QucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQZWRGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5QZWQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuUGVkLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGxheWVyRmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuUGxheWVyKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlBsYXllci5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlaGljbGVGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5WZWhpY2xlKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlZlaGljbGUucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsRW50aXR5R3JvdXBcbiAgICAgICAgLy8gQ291bGQgbG9nIGEgd2FybmluZyBvciBpbXBsZW1lbnQgY3VzdG9tIHNvbHV0aW9uXG4gICAgfVxuXG4gICAgcHVibGljIHNldFZpcnR1YWxFbnRpdHlGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsRW50aXR5XG4gICAgICAgIC8vIENvdWxkIGxvZyBhIHdhcm5pbmcgb3IgaW1wbGVtZW50IGN1c3RvbSBzb2x1dGlvblxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWb2ljZUNoYW5uZWxGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIHZvaWNlIGlzIGhhbmRsZWQgZGlmZmVyZW50bHlcbiAgICAgICAgLy8gQ291bGQgaW1wbGVtZW50IGN1c3RvbSB2b2ljZSBjaGFubmVsIG1hbmFnZW1lbnRcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXNlRmlsdGVycyBhcyAkVXNlRmlsdGVycywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICByZXR1cm4gJFVzZUZpbHRlcnMoLi4uZmlsdGVycyk7XG59XG4iLCAiaW1wb3J0IHsgT25JbnRlcm5hbCwgT25jZUludGVybmFsIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IElOVEVSTkFMX0VWRU5UUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblNjcmlwdFJQQygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU0NSSVBUX1JQQyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2NyaXB0UlBDKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUEMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uU2NyaXB0UlBDQW5zd2VyKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TQ1JJUFRfUlBDX0FOU1dFUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2NyaXB0UlBDQW5zd2VyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUENfQU5TV0VSKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblNlcnZlclN0YXJ0ZWQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNFUlZFUl9TVEFSVEVEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VTZXJ2ZXJTdGFydGVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNFUlZFUl9TVEFSVEVEKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkNvbm5lY3Rpb25RdWV1ZUFkZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OTkVDVElPTl9RVUVVRV9BREQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUNvbm5lY3Rpb25RdWV1ZUFkZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05ORUNUSU9OX1FVRVVFX0FERCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db25uZWN0aW9uUXVldWVSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNPTk5FQ1RJT05fUVVFVUVfUkVNT1ZFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb25uZWN0aW9uUXVldWVSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OTkVDVElPTl9RVUVVRV9SRU1PVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyQ29ubmVjdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyQ29ubmVjdERlbmllZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1RfREVOSUVEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJDb25uZWN0RGVuaWVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9DT05ORUNUX0RFTklFRCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEaXNjb25uZWN0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfRElTQ09OTkVDVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyRGlzY29ubmVjdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfRElTQ09OTkVDVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEYW1hZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9EQU1BR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckRhbWFnZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfREFNQUdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllckRlYXRoKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfREVBVEgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckRlYXRoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9ERUFUSCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJIZWFsKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfSEVBTCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVySGVhbCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfSEVBTCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJDb250cm9sUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTlRST0xfUkVRVUVTVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyQ29udHJvbFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTlRST0xfUkVRVUVTVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJJbnRlcmlvckNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0lOVEVSSU9SX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVySW50ZXJpb3JDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0lOVEVSSU9SX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEaW1lbnNpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9ESU1FTlNJT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJEaW1lbnNpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0RJTUVOU0lPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyV2VhcG9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfV0VBUE9OX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyV2VhcG9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9XRUFQT05fQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclN5bmNlZFNjZW5lUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJTeW5jZWRTY2VuZVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclN5bmNlZFNjZW5lU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN5bmNlZFNjZW5lU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9TVEFSVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTeW5jZWRTY2VuZVN0b3AoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RPUCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyU3luY2VkU2NlbmVTdG9wKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RPUCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTeW5jZWRTY2VuZVVwZGF0ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9VUERBVEUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN5bmNlZFNjZW5lVXBkYXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclNwYXduKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1BBV04pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclNwYXduKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TUEFXTik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJBbmltYXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9BTklNQVRJT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJBbmltYXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0FOSU1BVElPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyVmVoaWNsZUVudGVyZWQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclZlaGljbGVFbnRlcmVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyU3RhcnRWZWhpY2xlRW50ZXIoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJTdGFydFZlaGljbGVFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJWZWhpY2xlTGVmdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfTEVGVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyVmVoaWNsZUxlZnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfTEVGVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJWZWhpY2xlU2VhdENoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclZlaGljbGVTZWF0Q2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX1NFQVRfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uUGVkSGVhbCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0hFQUwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBlZEhlYWwoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0hFQUwpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGVkRGVhdGgoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBFRF9ERUFUSCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGVkRGVhdGgoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0RFQVRIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBlZERhbWFnZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0RBTUFHRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGVkRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBFRF9EQU1BR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uVmVoaWNsZURlc3Ryb3koKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVTVFJPWSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZURlc3Ryb3koKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9ERVNUUk9ZKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVBdHRhY2goKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfQVRUQUNIKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlQXR0YWNoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfQVRUQUNIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVEZXRhY2goKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVUQUNIKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlRGV0YWNoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVUQUNIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVEYW1hZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREFNQUdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREFNQUdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVTaXJlblN0YXRlQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5WRUhJQ0xFX1NJUkVOX1NUQVRFX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZVNpcmVuU3RhdGVDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9TSVJFTl9TVEFURV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9IT1JOX1NUQVRFX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5WRUhJQ0xFX0hPUk5fU1RBVEVfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZvaWNlQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVk9JQ0VfQ09OTkVDVElPTik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVm9pY2VDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZPSUNFX0NPTk5FQ1RJT04pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQ2xpZW50T2JqZWN0RGVsZXRlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DTElFTlRfT0JKRUNUX0RFTEVURSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQ2xpZW50T2JqZWN0RGVsZXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNMSUVOVF9PQkpFQ1RfREVMRVRFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkNsaWVudE9iamVjdFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNMSUVOVF9PQkpFQ1RfUkVRVUVTVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQ2xpZW50T2JqZWN0UmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DTElFTlRfT0JKRUNUX1JFUVVFU1QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQmFzZU9iamVjdENyZWF0ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQkFTRV9PQkpFQ1RfQ1JFQVRFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VCYXNlT2JqZWN0Q3JlYXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkJBU0VfT0JKRUNUX0NSRUFURSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25CYXNlT2JqZWN0UmVtb3ZlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5CQVNFX09CSkVDVF9SRU1PVkUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUJhc2VPYmplY3RSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQkFTRV9PQkpFQ1RfUkVNT1ZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbk5ldE93bmVyQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5ORVRfT1dORVJfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VOZXRPd25lckNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5ORVRfT1dORVJfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbldlYXBvbkRhbWFnZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuV0VBUE9OX0RBTUFHRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2VhcG9uRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldFQVBPTl9EQU1BR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uTWV0YUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZU1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTUVUQV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uTG9jYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5MT0NBTF9NRVRBX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlTG9jYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkxPQ0FMX01FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25HbG9iYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HTE9CQUxfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdsb2JhbE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX01FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db25zb2xlQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OU09MRV9DT01NQU5EKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb25zb2xlQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05TT0xFX0NPTU1BTkQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVSUk9SKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFcnJvcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FUlJPUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db2xTaGFwZUV2ZW50KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT0xfU0hBUEVfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUNvbFNoYXBlRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09MX1NIQVBFX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkV4cGxvc2lvbigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVhQTE9TSU9OKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFeHBsb3Npb24oKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVhQTE9TSU9OKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkZpcmVTdGFydCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRklSRV9TVEFSVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRmlyZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkZJUkVfU1RBUlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUHJvamVjdGlsZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QUk9KRUNUSUxFX1NUQVJUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQcm9qZWN0aWxlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUFJPSkVDVElMRV9TVEFSVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDb2xTaGFwZUVudGVyKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDb2xTaGFwZUVudGVyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DT0xfU0hBUEVfRU5URVIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRW50aXR5Q29sU2hhcGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NPTF9TSEFQRV9MRUFWRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRW50aXR5Q29sU2hhcGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0xFQVZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkVudGl0eUNoZWNrcG9pbnRFbnRlcigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfRU5URVIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUVudGl0eUNoZWNrcG9pbnRFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDaGVja3BvaW50TGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDaGVja3BvaW50TGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfTEVBVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uR2l2ZVBlZFNjcmlwdGVkVGFzaygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0lWRV9QRURfU0NSSVBURURfVEFTSyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlR2l2ZVBlZFNjcmlwdGVkVGFzaygpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HSVZFX1BFRF9TQ1JJUFRFRF9UQVNLKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkxvY2FsU2NyaXB0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkxPQ0FMX1NDUklQVF9FVkVOVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlTG9jYWxTY3JpcHRFdmVudCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5MT0NBTF9TQ1JJUFRfRVZFTlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVtb3RlU2NyaXB0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFTU9URV9TQ1JJUFRfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJlbW90ZVNjcmlwdEV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFTU9URV9TQ1JJUFRfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25BbnlSZXNvdXJjZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5BTllfUkVTT1VSQ0VfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUFueVJlc291cmNlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQU5ZX1JFU09VUkNFX1NUQVJUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uQW55UmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5BTllfUkVTT1VSQ0VfU1RPUCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQW55UmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkFOWV9SRVNPVVJDRV9TVE9QKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVzb3VyY2VTdGFydCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJlc291cmNlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RBUlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9TVE9QKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VSZXNvdXJjZVN0b3AoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RPUCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25SZXNvdXJjZUVycm9yKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9FUlJPUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUmVzb3VyY2VFcnJvcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9FUlJPUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FdmVudCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVWRU5UKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllcjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4oZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllcjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uUGxheWVyJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBPbldlYlZpZXcgYXMgJE9uV2ViVmlldyB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXc8RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb1NlcnZlckV2ZW50PihpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvU2VydmVyRXZlbnQ+LFxuKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb1NlcnZlckV2ZW50Pikge1xuICAgIHJldHVybiAkT25XZWJWaWV3KGlkLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uIGFzICRPbiB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyRXZlbnQ+KGV2ZW50TmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT248RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJFdmVudD4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT248RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gJE9uKGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllcjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4oZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllcjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbmNlUGxheWVyJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBPbmNlV2ViVmlldyBhcyAkT25jZVdlYlZpZXcgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYlZpZXc8RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb1NlcnZlckV2ZW50PihpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4sXG4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYlZpZXc8RSBleHRlbmRzIHN0cmluZz4oaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gJE9uY2VXZWJWaWV3KGlkLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uY2UgYXMgJE9uY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZTxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyRXZlbnQ+KGV2ZW50TmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlckV2ZW50Pik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyRXZlbnQ+KSB7XG4gICAgcmV0dXJuICRPbmNlKGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5LCBNZXRob2RQYXJhbVR5cGUsIHR5cGUgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UsIHR5cGUgTmV3YWJsZSwgdHlwZSBQaXBlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFBsYXllcihrZXk/OiBzdHJpbmcsIC4uLnBpcGVzOiBOZXdhYmxlPFBpcGU+W10pIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCBwaXBlcywgdHlwZTogTWV0aG9kUGFyYW1UeXBlLlBsYXllciwgZGF0YToga2V5LCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEd1YXJkIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBVc2VHdWFyZHMgYXMgJFVzZUd1YXJkcywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUd1YXJkcyguLi5ndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdKSB7XG4gICAgcmV0dXJuICRVc2VHdWFyZHMoLi4uZ3VhcmRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEludGVyY2VwdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBVc2VJbnRlcmNlcHRvcnMgYXMgJFVzZUludGVyY2VwdG9ycywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUludGVyY2VwdG9ycyguLi5pbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdKSB7XG4gICAgcmV0dXJuICRVc2VJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVSUENEZWNvcmF0b3IgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21DbGllbnRUb1NlcnZlclJQQz4ocnBjTmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbUNsaWVudFRvU2VydmVyUlBDPik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tQ2xpZW50VG9TZXJ2ZXJSUEM+KSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJQQ0RlY29yYXRvcignb25QbGF5ZXJSZXF1ZXN0JywgcnBjTmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgT25SZXF1ZXN0IGFzICRPblJlcXVlc3QgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25SZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21TZXJ2ZXJSUEM+KHJwY05hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21TZXJ2ZXJSUEM+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21TZXJ2ZXJSUEM+KSB7XG4gICAgcmV0dXJuICRPblJlcXVlc3QocnBjTmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgT25XZWJWaWV3UmVxdWVzdCBhcyAkT25XZWJWaWV3UmVxdWVzdCB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUEM+KGlkOiBzdHJpbmcgfCBudW1iZXIsIHJwY05hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlld1JlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUEM+LFxuKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlld1JlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4oaWQ6IHN0cmluZyB8IG51bWJlciwgcnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvU2VydmVyUlBDPikge1xuICAgIHJldHVybiAkT25XZWJWaWV3UmVxdWVzdChpZCwgcnBjTmFtZSk7XG59XG4iLCAiZXhwb3J0IGNvbnN0IFRIUk9UVExFUl9MSU1JVCA9ICdUSFJPVFRMRVJfTElNSVQnO1xuZXhwb3J0IGNvbnN0IFRIUk9UVExFUl9UVEwgPSAnVEhST1RUTEVSX1RUTCc7XG5leHBvcnQgY29uc3QgVEhST1RUTEVSX09QVElPTlMgPSAnVEhST1RUTEVSX01PRFVMRV9PUFRJT05TJztcbmV4cG9ydCBjb25zdCBUSFJPVFRMRVJfU0tJUCA9ICdUSFJPVFRMRVJfU0tJUCc7XG5leHBvcnQgY29uc3QgVEhST1RUTEVSX1NUT1JBR0UgPSAnVEhST1RUTEVSX1NUT1JBR0UnO1xuIiwgImltcG9ydCB7IFRIUk9UVExFUl9TS0lQIH0gZnJvbSAnLi4vdGhyb3R0bGVyLmNvbnN0YW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTa2lwVGhyb3R0bGUoc2tpcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7IGRlZmF1bHQ6IHRydWUgfSkge1xuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIF9wcm9wZXJ0eUtleT86IHN0cmluZyB8IHN5bWJvbCwgZGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2tpcCkge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFRIUk9UVExFUl9TS0lQICsga2V5LCBza2lwW2tleV0sIGRlc2NyaXB0b3IudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShUSFJPVFRMRVJfU0tJUCArIGtleSwgc2tpcFtrZXldLCB0YXJnZXQpO1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBUaHJvdHRsZXJNZXRob2RPckNvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUSFJPVFRMRVJfTElNSVQsIFRIUk9UVExFUl9UVEwgfSBmcm9tICcuLi90aHJvdHRsZXIuY29uc3RhbnRzJztcblxuZnVuY3Rpb24gc2V0VGhyb3R0bGVyTWV0YWRhdGEodGFyZ2V0OiBhbnksIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRocm90dGxlck1ldGhvZE9yQ29udHJvbGxlck9wdGlvbnM+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShUSFJPVFRMRVJfVFRMICsgbmFtZSwgb3B0aW9uc1tuYW1lXSEudHRsLCB0YXJnZXQpO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFRIUk9UVExFUl9MSU1JVCArIG5hbWUsIG9wdGlvbnNbbmFtZV0hLmxpbWl0LCB0YXJnZXQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRocm90dGxlKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRocm90dGxlck1ldGhvZE9yQ29udHJvbGxlck9wdGlvbnM+KSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgX3Byb3BlcnR5S2V5Pzogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55PikgPT4ge1xuICAgICAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc2V0VGhyb3R0bGVyTWV0YWRhdGEoZGVzY3JpcHRvci52YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaHJvdHRsZXJNZXRhZGF0YSh0YXJnZXQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBSZXNvbHZhYmxlLCBUaHJvdHRsZXJMaW1pdERldGFpbCwgVGhyb3R0bGVyTW9kdWxlT3B0aW9ucywgVGhyb3R0bGVyT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUSFJPVFRMRVJfTElNSVQsIFRIUk9UVExFUl9PUFRJT05TLCBUSFJPVFRMRVJfU0tJUCwgVEhST1RUTEVSX1NUT1JBR0UsIFRIUk9UVExFUl9UVEwgfSBmcm9tICcuL3Rocm90dGxlci5jb25zdGFudHMnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHQsIEd1YXJkIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IFRocm90dGxlclN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICAgIGlzRnVuY3Rpb24sXG4gICAgVG9vTWFueVJlcXVlc3RzLFxuICAgIHR5cGUgT25Nb2R1bGVJbml0LFxuICAgIHR5cGUgUmVmbGVjdG9yU2VydmljZSxcbiAgICBFcnJvck1lc3NhZ2UsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbmplY3QsXG4gICAgUkVGTEVDVE9SX1NFUlZJQ0UsXG59IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaHJvdHRsZXJHdWFyZCBpbXBsZW1lbnRzIEd1YXJkLCBPbk1vZHVsZUluaXQge1xuICAgIEBJbmplY3QoVEhST1RUTEVSX09QVElPTlMpIHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zOiBUaHJvdHRsZXJNb2R1bGVPcHRpb25zO1xuICAgIEBJbmplY3QoVEhST1RUTEVSX1NUT1JBR0UpIHByb3RlY3RlZCByZWFkb25seSBzdG9yYWdlU2VydmljZTogVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2U7XG4gICAgQEluamVjdChSRUZMRUNUT1JfU0VSVklDRSkgcHJvdGVjdGVkIHJlYWRvbmx5IHJlZmxlY3RvcjogUmVmbGVjdG9yU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgdGhyb3R0bGVyczogQXJyYXk8VGhyb3R0bGVyT3B0aW9ucz47XG4gICAgcHJvdGVjdGVkIGNvbW1vbk9wdGlvbnM6IFBpY2s8VGhyb3R0bGVyT3B0aW9ucywgJ3NraXBJZic+O1xuXG4gICAgcHVibGljIGFzeW5jIG9uTW9kdWxlSW5pdCgpIHtcbiAgICAgICAgdGhpcy50aHJvdHRsZXJzID0gKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zKSA/IHRoaXMub3B0aW9ucyA6IHRoaXMub3B0aW9ucy50aHJvdHRsZXJzKVxuICAgICAgICAgICAgLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmaXJzdC50dGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihzZWNvbmQudHRsKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnR0bCAtIHNlY29uZC50dGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcCgob3B0KSA9PiAoeyAuLi5vcHQsIG5hbWU6IG9wdC5uYW1lID8/ICdkZWZhdWx0JyB9KSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uT3B0aW9ucyA9IHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb21tb25PcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHNraXBJZjogdGhpcy5vcHRpb25zLnNraXBJZiEsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNhbkFjdGl2YXRlKGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgY29udGludWVzOiBib29sZWFuW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lZFRocm90dGxlciBvZiB0aGlzLnRocm90dGxlcnMpIHtcbiAgICAgICAgICAgIC8vIFJldHVybiBlYXJseSBpZiB0aGUgY3VycmVudCByb3V0ZSBzaG91bGQgYmUgc2tpcHBlZC5cbiAgICAgICAgICAgIGNvbnN0IHNraXAgPSB0aGlzLnJlZmxlY3Rvci5nZXRBbGxBbmRPdmVycmlkZTxib29sZWFuPihUSFJPVFRMRVJfU0tJUCArIG5hbWVkVGhyb3R0bGVyLm5hbWUsIFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmhhbmRsZXIsXG4gICAgICAgICAgICAgICAgY29udGV4dC5jbGFzc1JlZixcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29uc3Qgc2tpcElmID0gbmFtZWRUaHJvdHRsZXIuc2tpcElmIHx8IHRoaXMuY29tbW9uT3B0aW9ucy5za2lwSWY7XG4gICAgICAgICAgICBpZiAoc2tpcCB8fCBza2lwSWY/Lihjb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlcy5wdXNoKHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXR1cm4gZWFybHkgd2hlbiB3ZSBoYXZlIG5vIGxpbWl0IG9yIHR0bCBkYXRhLlxuICAgICAgICAgICAgY29uc3Qgcm91dGVPckNsYXNzTGltaXQgPSB0aGlzLnJlZmxlY3Rvci5nZXRBbGxBbmRPdmVycmlkZTxSZXNvbHZhYmxlPG51bWJlcj4+KFRIUk9UVExFUl9MSU1JVCArIG5hbWVkVGhyb3R0bGVyLm5hbWUsIFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmhhbmRsZXIsXG4gICAgICAgICAgICAgICAgY29udGV4dC5jbGFzc1JlZixcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29uc3Qgcm91dGVPckNsYXNzVHRsID0gdGhpcy5yZWZsZWN0b3IuZ2V0QWxsQW5kT3ZlcnJpZGU8UmVzb2x2YWJsZTxudW1iZXI+PihUSFJPVFRMRVJfVFRMICsgbmFtZWRUaHJvdHRsZXIubmFtZSwgW1xuICAgICAgICAgICAgICAgIGNvbnRleHQuaGFuZGxlcixcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsYXNzUmVmLFxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHNwZWNpZmljIGxpbWl0cyBhcmUgc2V0IGF0IGNsYXNzIG9yIHJvdXRlIGxldmVsLCBvdGhlcndpc2UgdXNlIGdsb2JhbCBvcHRpb25zLlxuICAgICAgICAgICAgY29uc3QgbGltaXQgPSBhd2FpdCB0aGlzLnJlc29sdmVWYWx1ZShjb250ZXh0LCByb3V0ZU9yQ2xhc3NMaW1pdCB8fCBuYW1lZFRocm90dGxlci5saW1pdCk7XG4gICAgICAgICAgICBjb25zdCB0dGwgPSBhd2FpdCB0aGlzLnJlc29sdmVWYWx1ZShjb250ZXh0LCByb3V0ZU9yQ2xhc3NUdGwgfHwgbmFtZWRUaHJvdHRsZXIudHRsKTtcbiAgICAgICAgICAgIGNvbnRpbnVlcy5wdXNoKGF3YWl0IHRoaXMuaGFuZGxlUmVxdWVzdChjb250ZXh0LCBsaW1pdCwgdHRsLCBuYW1lZFRocm90dGxlcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250aW51ZXMuZXZlcnkoKGNvbnQpID0+IGNvbnQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBoYW5kbGVSZXF1ZXN0KGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIGxpbWl0OiBudW1iZXIsIHR0bDogbnVtYmVyLCB0aHJvdHRsZXI6IFRocm90dGxlck9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGxheWVyID0gY29udGV4dC5yZXF1ZXN0LnBsYXllcjtcbiAgICAgICAgaWYoIXBsYXllcikgdGhyb3cgbmV3IEVycm9yKGBQbGF5ZXIgaXMgbm90IGluIGNvbnRleHRgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZW5lcmF0ZUtleShjb250ZXh0LCB0aHJvdHRsZXIubmFtZSEpO1xuICAgICAgICBjb25zdCB7IHRvdGFsSGl0cywgdGltZVRvRXhwaXJlIH0gPSBhd2FpdCB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmluY3JlbWVudChwbGF5ZXIsIGtleSwgdHRsKTtcblxuICAgICAgICBpZiAodG90YWxIaXRzID4gbGltaXQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudGhyb3dUaHJvdHRsaW5nRXhjZXB0aW9uKGNvbnRleHQsIHtcbiAgICAgICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgICAgICB0dGwsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHBsYXllcixcbiAgICAgICAgICAgICAgICB0b3RhbEhpdHMsXG4gICAgICAgICAgICAgICAgdGltZVRvRXhwaXJlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVLZXkoY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGAke2NvbnRleHQuY2xhc3NSZWYubmFtZX0tJHtjb250ZXh0LmhhbmRsZXIubmFtZX0tJHtuYW1lfWA7XG4gICAgICAgIHJldHVybiBjcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUocHJlZml4KS5kaWdlc3QoJ2hleCcpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHRocm93VGhyb3R0bGluZ0V4Y2VwdGlvbihjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCBfdGhyb3R0bGVyTGltaXREZXRhaWw6IFRocm90dGxlckxpbWl0RGV0YWlsKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29NYW55UmVxdWVzdHMoYXdhaXQgdGhpcy5nZXRFcnJvck1lc3NhZ2UoY29udGV4dCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRFcnJvck1lc3NhZ2UoX2NvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlID8/IEVycm9yTWVzc2FnZS5Ub29NYW55UmVxdWVzdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEVycm9yTWVzc2FnZS5Ub29NYW55UmVxdWVzdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlVmFsdWU8VCBleHRlbmRzIG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4+KGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIHJlc29sdmFibGVWYWx1ZTogUmVzb2x2YWJsZTxUPikge1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihyZXNvbHZhYmxlVmFsdWUpID8gcmVzb2x2YWJsZVZhbHVlKGNvbnRleHQpIDogcmVzb2x2YWJsZVZhbHVlO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBJbmplY3RhYmxlLCB0eXBlIE9uQXBwU2h1dGRvd24gfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBUaHJvdHRsZXJTdG9yYWdlT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2UgaW1wbGVtZW50cyBPbkFwcFNodXRkb3duIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RvcmFnZTogV2Vha01hcDxQbGF5ZXJNcCwgTWFwPHN0cmluZywgVGhyb3R0bGVyU3RvcmFnZU9wdGlvbnM+PiA9IG5ldyBXZWFrTWFwKCk7XG4gICAgcHJpdmF0ZSB0aW1lb3V0SWRzOiBOb2RlSlMuVGltZW91dFtdID0gW107XG5cbiAgICBwcml2YXRlIGdldEV4cGlyYXRpb25UaW1lKHBsYXllcjogUGxheWVyTXAsIGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKCh0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLmdldChrZXkpIS5leHBpcmVzQXQgLSBEYXRlLm5vdygpKSAvIDEwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RXhwaXJhdGlvblRpbWUocGxheWVyOiBQbGF5ZXJNcCwga2V5OiBzdHJpbmcsIHR0bE1pbGxpc2Vjb25kczogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmdldChwbGF5ZXIpIS5nZXQoa2V5KSEudG90YWxIaXRzLS07XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkcyA9IHRoaXMudGltZW91dElkcy5maWx0ZXIoKGlkKSA9PiBpZCAhPSB0aW1lb3V0SWQpO1xuICAgICAgICB9LCB0dGxNaWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLnRpbWVvdXRJZHMucHVzaCh0aW1lb3V0SWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbmNyZW1lbnQocGxheWVyOiBQbGF5ZXJNcCwga2V5OiBzdHJpbmcsIHR0bDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHR0bE1pbGxpc2Vjb25kcyA9IHR0bDtcblxuICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZS5nZXQocGxheWVyKSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldChwbGF5ZXIsIG5ldyBNYXAoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZS5nZXQocGxheWVyKSEuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5nZXQocGxheWVyKSEuc2V0KGtleSwgeyB0b3RhbEhpdHM6IDAsIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIHR0bE1pbGxpc2Vjb25kcyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW1lVG9FeHBpcmUgPSB0aGlzLmdldEV4cGlyYXRpb25UaW1lKHBsYXllciwga2V5KTtcblxuICAgICAgICAvLyBSZXNldCB0aGUgdGltZVRvRXhwaXJlIG9uY2UgaXQgaGFzIGJlZW4gZXhwaXJlZC5cbiAgICAgICAgaWYgKHRpbWVUb0V4cGlyZSA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLmdldChrZXkpIS5leHBpcmVzQXQgPSBEYXRlLm5vdygpICsgdHRsTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgdGltZVRvRXhwaXJlID0gdGhpcy5nZXRFeHBpcmF0aW9uVGltZShwbGF5ZXIsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLmdldChrZXkpIS50b3RhbEhpdHMrKztcbiAgICAgICAgdGhpcy5zZXRFeHBpcmF0aW9uVGltZShwbGF5ZXIsIGtleSwgdHRsTWlsbGlzZWNvbmRzKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG90YWxIaXRzOiB0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLmdldChrZXkpIS50b3RhbEhpdHMsXG4gICAgICAgICAgICB0aW1lVG9FeHBpcmUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIG9uQXBwU2h1dGRvd24oKSB7XG4gICAgICAgIHRoaXMudGltZW91dElkcy5mb3JFYWNoKGNsZWFyVGltZW91dCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEdsb2JhbCwgTW9kdWxlLCB0eXBlIER5bmFtaWNNb2R1bGUsIHR5cGUgUHJvdmlkZXIsIHR5cGUgRmFjdG9yeVByb3ZpZGVyIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IFRIUk9UVExFUl9PUFRJT05TLCBUSFJPVFRMRVJfU1RPUkFHRSB9IGZyb20gJy4vdGhyb3R0bGVyLmNvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IFRocm90dGxlckFzeW5jT3B0aW9ucywgVGhyb3R0bGVyTW9kdWxlT3B0aW9ucywgVGhyb3R0bGVyT3B0aW9uc0ZhY3RvcnkgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Rocm90dGxlci1zdG9yYWdlLnNlcnZpY2UnO1xuXG5AR2xvYmFsKClcbkBNb2R1bGUoKVxuZXhwb3J0IGNsYXNzIFRocm90dGxlck1vZHVsZSB7XG4gICAgcHVibGljIHN0YXRpYyBmb3JSb290KG9wdGlvbnM6IFRocm90dGxlck1vZHVsZU9wdGlvbnMgPSBbXSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kdWxlOiBUaHJvdHRsZXJNb2R1bGUsXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFRIUk9UVExFUl9PUFRJT05TLFxuICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogb3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogVEhST1RUTEVSX1NUT1JBR0UsXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsYXNzOiBUaHJvdHRsZXJTdG9yYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGV4cG9ydHM6IFtUSFJPVFRMRVJfU1RPUkFHRSwgVEhST1RUTEVSX09QVElPTlNdLFxuICAgICAgICB9IGFzIER5bmFtaWNNb2R1bGU8VGhyb3R0bGVyTW9kdWxlPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZvclJvb3RBc3luYyhvcHRpb25zOiBUaHJvdHRsZXJBc3luY09wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXJzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5jcmVhdGVBc3luY1Byb3ZpZGVycyhvcHRpb25zKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBUSFJPVFRMRVJfU1RPUkFHRSxcbiAgICAgICAgICAgICAgICB1c2VDbGFzczogVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kdWxlOiBUaHJvdHRsZXJNb2R1bGUsXG4gICAgICAgICAgICBpbXBvcnRzOiBvcHRpb25zLmltcG9ydHMgPz8gW10sXG4gICAgICAgICAgICBwcm92aWRlcnMsXG4gICAgICAgICAgICBleHBvcnRzOiBwcm92aWRlcnMsXG4gICAgICAgIH0gYXMgRHluYW1pY01vZHVsZTxUaHJvdHRsZXJNb2R1bGU+O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZUFzeW5jUHJvdmlkZXJzKG9wdGlvbnM6IFRocm90dGxlckFzeW5jT3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy51c2VFeGlzdGluZyB8fCBvcHRpb25zLnVzZUZhY3RvcnkpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5jcmVhdGVBc3luY09wdGlvbnNQcm92aWRlcihvcHRpb25zKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQXN5bmNPcHRpb25zUHJvdmlkZXIob3B0aW9ucyksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogb3B0aW9ucy51c2VDbGFzcyxcbiAgICAgICAgICAgICAgICB1c2VDbGFzczogb3B0aW9ucy51c2VDbGFzcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0gYXMgUHJvdmlkZXJbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVBc3luY09wdGlvbnNQcm92aWRlcihvcHRpb25zOiBUaHJvdHRsZXJBc3luY09wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlRmFjdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBUSFJPVFRMRVJfT1BUSU9OUyxcbiAgICAgICAgICAgICAgICB1c2VGYWN0b3J5OiBvcHRpb25zLnVzZUZhY3RvcnksXG4gICAgICAgICAgICAgICAgaW5qZWN0OiBvcHRpb25zLmluamVjdCA/PyBbXSxcbiAgICAgICAgICAgIH0gYXMgRmFjdG9yeVByb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSFJPVFRMRVJfT1BUSU9OUyxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGFzeW5jIChvcHRpb25zRmFjdG9yeTogVGhyb3R0bGVyT3B0aW9uc0ZhY3RvcnkpID0+IGF3YWl0IG9wdGlvbnNGYWN0b3J5LmNyZWF0ZVRocm90dGxlck9wdGlvbnMoKSxcbiAgICAgICAgICAgIGluamVjdDogb3B0aW9ucy51c2VDbGFzcyA/IFtvcHRpb25zLnVzZUNsYXNzXSA6IG9wdGlvbnMudXNlRXhpc3RpbmcgPyBbb3B0aW9ucy51c2VFeGlzdGluZ10gOiBbXSxcbiAgICAgICAgfSBhcyBGYWN0b3J5UHJvdmlkZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZUFwcEJ1aWxkZXIgYXMgJGNyZWF0ZUFwcEJ1aWxkZXIsIEFwcEJ1aWxkZXIsIEFwcEVudmlyb21lbnQgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IFBsYXllclByb3RvdHlwZVBsdWdpbiwgUlBDUGx1Z2luLCBTZXJ2aWNlQmluZGVyUGx1Z2luIH0gZnJvbSAnLi9wbHVnaW5zJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vbXVsdGlwbGF5ZXIvcmFnZW1wJztcblxuY29uc3QgbXVsdGlwbGF5ZXJTZXJ2aWNlOiBTZXJ2ZXJNdWx0aXBsYXllclNlcnZpY2UgPSBuZXcgU2VydmVyUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlKCk7XG5cbmNsYXNzIFNlcnZlckFwcEJ1aWxkZXIgZXh0ZW5kcyBBcHBCdWlsZGVyPEd1YXJkLCBJbnRlcmNlcHRvciwgRXJyb3JGaWx0ZXI+IHtcbiAgICBwdWJsaWMgc2V0QmxpcEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0QmxpcEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1hcmtlckZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0TWFya2VyRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q29sU2hhcGVGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldENvbFNoYXBlRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q2hlY2twb2ludEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0Q2hlY2twb2ludEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE9iamVjdEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0T2JqZWN0RmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGVkRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRQZWRGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQbGF5ZXJGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFBsYXllckZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlaGljbGVGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZlaGljbGVGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZpcnR1YWxFbnRpdHlGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZpcnR1YWxFbnRpdHlGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWb2ljZUNoYW5uZWxGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZvaWNlQ2hhbm5lbEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwQnVpbGRlcigpIHtcbiAgICByZXR1cm4gYXdhaXQgJGNyZWF0ZUFwcEJ1aWxkZXIoe1xuICAgICAgICBlbnZpcm9tZW50OiBBcHBFbnZpcm9tZW50LlNlcnZlcixcbiAgICAgICAgcGx1Z2luczogW1NlcnZpY2VCaW5kZXJQbHVnaW4sIFBsYXllclByb3RvdHlwZVBsdWdpbiwgUlBDUGx1Z2luXSxcbiAgICAgICAgYXBwQnVpbGRlckluaGVyaXQ6IFNlcnZlckFwcEJ1aWxkZXIsXG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZVxuICAgIH0pO1xufVxuXG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydHMnO1xuXG5pbXBvcnQgJy4vZXh0ZW5zaW9uLmQudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7OztBQUFPLElBQUtBLGdCQUFBQSwwQkFBQUEsZ0JBQUFBOzs7U0FBQUE7O0FDQUwsSUFBS0Msa0JBQUFBLDBCQUFBQSxrQkFBQUE7Ozs7Ozs7Ozs7Ozs7OztTQUFBQTs7QUNBTCxJQUFLQyxtQkFBQUEsMEJBQUFBLG1CQUFBQTs7OztTQUFBQTs7QUNBTCxJQUFLQyx1QkFBQUEsMEJBQUFBLHVCQUFBQTs7O1NBQUFBOztBQ0FMLElBQUtDLGtCQUFBQSwwQkFBQUEsa0JBQUFBOzs7Ozs7OztTQUFBQTs7OztBQ0FMLElBQU1DLGlCQUFpQjtBQUN2QixJQUFNQyxnQkFBZ0I7QUFDdEIsSUFBTUMsY0FBYztBQUNwQixJQUFNQyxtQkFBbUI7QUFDekIsSUFBTUMsb0JBQW9CO0FBQzFCLElBQU1DLGdCQUFnQjs7O0FDTHRCLElBQUtDLGVBQUFBLDBCQUFBQSxlQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQUFBQTs7QUNBTCxJQUFLQyxrQkFBQUEsMEJBQUFBLGtCQUFBQTs7OztTQUFBQTs7QUNBTCxJQUFLQyxrQkFBQUEsMEJBQUFBLGtCQUFBQTs7Ozs7Ozs7OztTQUFBQTs7OztBQ0FaLElBQUlDLGFBQVksT0FBTztBQUN2QixJQUFJQyxVQUFTLHdCQUFDLFFBQVEsVUFBUUQsV0FBVSxRQUFRLFFBQVE7QUFBQSxFQUNoRDtBQUFBLEVBQ0EsY0FBYztBQUNsQixDQUFDLEdBSFE7OztBQ0ROLFNBQVNFLG1CQUFBQTtBQUNaLFNBQU9DLEtBQUtDLE9BQU0sRUFBR0MsU0FBUyxFQUFBLEVBQUlDLFVB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QUFtQkYsU0FBa0I7QUFDeENMLHVCQUFtQk8sbUJBQW1CRixPQUFBQTtFQUMxQztFQUVPRyxxQkFBcUJILFNBQWtCO0FBQzFDTCx1QkFBbUJRLHFCQUFxQkgsT0FBQUE7RUFDNUM7RUFFT0ksaUJBQWlCSixTQUFrQjtBQUN0Q0wsdUJBQW1CUyxpQkFBaUJKLE9BQUFBO0VBQ3hDO0VBRU9LLGNBQWNMLFNBQWtCO0FBQ25DTCx1QkFBbUJVLGNBQWNMLE9BQUFBO0VBQ3JDO0VBRU9NLGlCQUFpQk4sU0FBa0I7QUFDdENMLHVCQUFtQlcsaUJBQWlCTixPQUFBQTtFQUN4QztFQUVPTyxrQkFBa0JQLFNBQWtCO0FBQ3ZDTCx1QkFBbUJZLGtCQUFrQlAsT0FBQUE7RUFDekM7RUFFT1EsNkJBQTZCUixTQUFrQjtBQUNsREwsdUJBQW1CYSw2QkFBNkJSLE9BQUFBO0VBQ3BEO0VBRU9TLHdCQUF3QlQsU0FBa0I7QUFDN0NMLHVCQUFtQmMsd0JBQXdCVCxPQUFBQTtFQUMvQztFQUVPVSx1QkFBdUJWLFNBQWtCO0FBQzVDTCx1QkFBbUJlLHVCQUF1QlYsT0FBQUE7RUFDOUM7QUFDSjtBQUVBLGVBQXNCVyxvQkFBQUE7QUFDbEIsU0FBTyxNQUFNQyxpQkFBa0I7SUFDM0JDLFlBQVlDLGNBQWNDO0lBQzFCQyxTQUFTO01BQUNDO01BQXFCQztNQUF1QkM7O0lBQ3REQyxtQkFBbUJ2QjtJQUNuQkY7RUFDSixDQUFBO0FBQ0o7QUFQc0JnQixPQUFBQSxtQkFBQUE7IiwKICAibmFtZXMiOiBbIkFwcEVudmlyb21lbnQiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkV2ZW50RGVzdGluYXRpb24iLCAiRXhlY3V0aW9uQ29udGV4dFR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgIkxPR0dFUl9TRVJWSUNFIiwgIkVWRU5UX1NFUlZJQ0UiLCAiUlBDX1NFUlZJQ0UiLCAiTU9EVUxFX0NPTlRBSU5FUiIsICJSRUZMRUNUT1JfU0VSVklDRSIsICJUSU1FUl9TRVJWSUNFIiwgIkVycm9yTWVzc2FnZSIsICJJbmplY3RhYmxlU2NvcGUiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIl9fZGVmUHJvcCIsICJfX25hbWUiLCAiZ2VuZXJhdGVSYW5kb21JZCIsICJNYXRoIiwgInJhbmRvbSIsICJ0b1N0cmluZyIsICJzdWJzdHJpbmciLCAiaXNVbmRlZmluZWQiLCAiX19uYW1lIiwgIm9iaiIsICJpc09iamVjdCIsICJmbiIsICJpc05pbCIsICJpc0Z1bmN0aW9uIiwgInZhbCIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJpc0NvbnN0cnVjdG9yIiwgImlzRW1wdHkiLCAiYXJyYXkiLCAibGVuZ3RoIiwgImlzU3ltYm9sIiwgImlzQXN5bmNGdW5jdGlvbiIsICJuYW1lIiwgImlzQm9vbGVhbiIsICJpc1Byb21pc2UiLCAiUHJvbWlzZSIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJDb250YWluZXIiLCAiTW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAibG9nZ2VyU2VydmljZSIsICJyZWFkIiwgIm1vZHVsZSIsICJpc0Z1bmN0aW9uIiwgIm9wdGlvbnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiTW9kdWxlIiwgImV4cG9ydFRva2VucyIsICJnZXRFeHBvcnRUb2tlbnMiLCAiZXhwb3J0cyIsICJzZXBhcmF0ZWRQcm92aWRlcnMiLCAic2VwYXJhdGVQcm92aWRlcnMiLCAicHJvdmlkZXJzIiwgImNvbnRyb2xsZXJzIiwgImltcG9ydHMiLCAiZ2V0UGlwZWxpbmUiLCAiY2xhc3NSZWYiLCAiZ2xvYmFsIiwgIkdsb2JhbE1vZHVsZSIsICJjb250YWluZXIiLCAiUHJvbWlzZSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZE1vZHVsZURlZmluaXRpb24iLCAiZ3VhcmRzIiwgIkd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAiSW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIlBpcGVzIiwgImVycm9yRmlsdGVycyIsICJFcnJvckZpbHRlcnMiLCAibWFwIiwgInByb3ZpZGVyRXhwb3J0IiwgImhhc093bk1ldGFkYXRhIiwgIkluamVjdGFibGUiLCAiSW52YWxpZEV4cG9ydERlZmluaXRpb24iLCAiaXNTdHJpbmciLCAiaXNTeW1ib2wiLCAicHJvdmlkZSIsICJwcm92aWRlciIsICJpbmplY3RhYmxlTWV0YWRhdGEiLCAiaXNOaWwiLCAiSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbiIsICJ1c2VDbGFzcyIsICJzY29wZSIsICJyZWR1Y2UiLCAiYWNjIiwgImluY2x1ZGVzIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgInNldCIsICJpbnRlcm5hbFByb3ZpZGVycyIsICJNYXAiLCAiTW9kdWxlQ29udGFpbmVyIiwgIkNvbnRhaW5lciIsICJwYXJlbnQiLCAibWV0YWRhdGEiLCAiaW5zdGFuY2UiLCAicmVwZXRpdGl2ZUltcG9ydHMiLCAiU2V0IiwgImluamVjdGFibGUiLCAiaW5qZWN0IiwgIkV4ZWN1dGlvbkNvbnRleHRCYXNlIiwgIiR0eXBlIiwgIiRjbGFzc1JlZiIsICIkaGFuZGxlciIsICIkcmVxdWVzdCIsICIkcmVzcG9uc2UiLCAiJG5hbWUiLCAidHlwZSIsICJjbGFzc1JlZiIsICJoYW5kbGVyIiwgInJlcXVlc3QiLCAicmVzcG9uc2UiLCAibmFtZSIsICJNYW5nb1JlcXVlc3RCYXNlIiwgIiRib2R5IiwgIiRwbGF5ZXIiLCAiYm9keSIsICJwbGF5ZXIiLCAiTWFuZ29SZXNwb25zZUJhc2UiLCAiJGxvZ2dlclNlcnZpY2UiLCAiJHNlbmRMaXN0ZW5lcnMiLCAiU2V0IiwgIiRlcnJvckxpc3RlbmVycyIsICIkaXNTZW50IiwgInNlbmQiLCAiZGF0YSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiUlBDUmVzcG9uc2VBbHJlYWR5U2VudCIsICJmb3JFYWNoIiwgImxpc3RlbmVyIiwgIm1lc3NhZ2UiLCAiZGV0YWlscyIsICIkb25TZW5kIiwgImFkZCIsICIkb25FcnJvciIsICJUcmVlTm9kZSIsICJ2YWx1ZSIsICJjaGlsZHJlbiIsICJhZGRDaGlsZCIsICJjaGlsZCIsICJwdXNoIiwgInJlbW92ZUNoaWxkIiwgImluZGV4IiwgImluZGV4T2YiLCAic3BsaWNlIiwgIlRyZWUiLCAicm9vdCIsICJ0cmF2ZXJzZSIsICJjYWxsYmFjayIsICJ0cmF2ZXJzZU5vZGUiLCAibm9kZSIsICJmb3JFYWNoIiwgImFzeW5jVHJhdmVyc2UiLCAiUHJvbWlzZSIsICJhbGwiLCAibWFwIiwgInRvU3RyaW5nIiwgInJlc3VsdCIsICJsaW5lcyIsICJkZXB0aCIsICJyZXBlYXQiLCAiam9pbiIsICJkZWZhdWx0Q29udHJvbGxlck9wdGlvbnMiLCAicHJlZml4IiwgInZhbGlkYXRlQ29udHJvbGxlck9wdGlvbnMiLCAib3B0aW9ucyIsICJpc05pbCIsICJ2YWxpZCIsICJ2YWx1ZSIsICJpc09iamVjdCIsICJlcnJvciIsICJpc1N0cmluZyIsICJ2YWxpZGF0ZUVycm9yRmlsdGVyIiwgImlzRnVuY3Rpb24iLCAicHJvdG90eXBlIiwgImNhdGNoIiwgInZhbGlkYXRlUGlwZSIsICJ0cmFuc2Zvcm0iLCAidmFsaWRhdGVFdmVudFBhcmFtZXRlciIsICJrZXkiLCAiaXNOdW1iZXIiLCAiaW5kZXgiLCAidHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiQm9keSIsICJQbGF5ZXIiLCAiZGF0YSIsICJDdXN0b20iLCAiZmFjdG9yeSIsICJQYXJhbSIsICJJbmRleCIsICJSZXF1ZXN0IiwgIlJlc3BvbnNlIiwgIkFycmF5IiwgImlzQXJyYXkiLCAicGlwZXMiLCAicGlwZSIsICJ2YWxpZGF0ZUV2ZW50TWV0YWRhdGEiLCAibmFtZSIsICJtZXRob2QiLCAicGFyYW1zIiwgInBhcmFtIiwgInZhbGlkYXRlR3VhcmQiLCAiY2FuQWN0aXZhdGUiLCAidmFsaWRhdGVJbnRlcmNlcHRvciIsICJpbnRlcmNlcHQiLCAidmFsaWRhdGVJbmplY3Rpb25Ub2tlbiIsICJpc1N5bWJvbCIsICJ2YWxpZGF0ZVByb3ZpZGVyIiwgInByb3ZpZGUiLCAidmFsaWRhdGVDbGFzc1Byb3ZpZGVyIiwgInZhbGlkYXRlVmFsdWVQcm92aWRlciIsICJ2YWxpZGF0ZUZhY3RvcnlQcm92aWRlciIsICJ2YWxpZGF0ZUV4aXN0aW5nUHJvdmlkZXIiLCAic2NvcGUiLCAiSW5qZWN0YWJsZVNjb3BlIiwgIlNpbmdsZXRvbiIsICJPYmplY3QiLCAidmFsdWVzIiwgImluY2x1ZGVzIiwgInZhbGlkYXRlT3B0aW9uYWxGYWN0b3J5RGVwZW5kZW5jeSIsICJ0b2tlbiIsICJ1c2VGYWN0b3J5IiwgImluamVjdCIsICJ2YWxpZGF0ZU1vZHVsZU9wdGlvbnMiLCAiaXNEeW5hbWljIiwgImNvbnRyb2xsZXJzIiwgImltcG9ydHMiLCAicHJvdmlkZXJzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbCIsICJpc0Jvb2xlYW4iLCAiaW1wb3J0ZWQiLCAiaXNQcm9taXNlIiwgImNvbnRyb2xsZXIiLCAicHJvdmlkZXIiLCAiZXhwb3J0SXRlbSIsICJkZWZhdWx0SW5qZWN0YWJsZU9wdGlvbnMiLCAidmFsaWRhdGVJbmplY3RhYmxlTWV0YWRhdGEiLCAiSU5URVJOQUxfQVBQX0NPTlRBSU5FUiIsICJHTE9CQUxfQVBQX0NPTlRBSU5FUiIsICJBUFBfRU5WSVJPTUVOVCIsICJHTE9CQUxfR1VBUkRTIiwgIkdMT0JBTF9JTlRFUkNFUFRPUlMiLCAiR0xPQkFMX1BJUEVTIiwgIkdMT0JBTF9FUlJPUl9GSUxURVJTIiwgIlBMVUdJTlMiLCAiRU5BQkxFX1NIVVRET1dOX0hPT0tTIiwgIkNPTlRBSU5FUl9PUFRJT05TIiwgIk1BTkdPX0xPR19QUkVGSVgiLCAiTUFOR09fUkVRVUVTVF9GQUNUT1JZIiwgIk1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkiLCAiRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSIsICJNVUxUSVBMQVlFUl9TRVJWSUNFIiwgIlJQQ19SRVNVTFRfVElNRU9VVCIsICJzdWNjZXNzIiwgImVycm9yIiwgIm1lc3NhZ2UiLCAic3RhdHVzIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJUaW1lb3V0IiwgIlJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQiLCAiSGFuZGxlck5vdEZvdW5kIiwgIlJQQ19SRVNVTFRfVU5LTk9XTiIsICJVbmtub3duIiwgIlJQQ19SRVNVTFRfUExBWUVSX0RJU0NPTk5FQ1RFRCIsICJQbGF5ZXJEaXNjb25uZWN0ZWQiLCAiUlBDX1JFU1VMVF9QTEFZRVJfTk9UX0ZPVU5EIiwgIlBsYXllck5vdEZvdW5kIiwgIk1hbmdvRXJyb3IiLCAiRXJyb3IiLCAic3RhdHVzIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJVbmtub3duIiwgImRldGFpbHMiLCAibWVzc2FnZSIsICJHdWFyZENhbmNlbEVycm9yIiwgIkNhbmNlbGxlZEJ5R3VhcmQiLCAiR3VhcmRJbnZhbGlkUmV0dXJuRXJyb3IiLCAiSW52YWxpZEd1YXJkUmV0dXJuIiwgIlRvb01hbnlSZXF1ZXN0cyIsICJVbmtub3duRXJyb3IiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiUGlwZWxpbmVIYW5kbGVyIiwgImxvZ2dlclNlcnZpY2UiLCAiZ29Ucm91Z2hHdWFyZHMiLCAiZXhlY3V0aW9uQ29udGV4dCIsICJndWFyZHMiLCAiY29udGFpbmVyIiwgImd1YXJkIiwgImluc3RhbmNlIiwgImlzRnVuY3Rpb24iLCAiZ2V0IiwgImlzT2JqZWN0IiwgImlzTmlsIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkR3VhcmREZWZpbml0aW9uIiwgImNhbkFjdGl2YXRlIiwgImNhbGwiLCAiR3VhcmRJbnZhbGlkUmV0dXJuRXJyb3IiLCAiR3VhcmRDYW5jZWxFcnJvciIsICJnb1Rocm91Z2hJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3JzIiwgImNhbGxIYW5kbGVyIiwgImludGVyY2VwdG9yIiwgIkludmFsaWRJbnRlcmNlcHRvckRlZmluaXRpb24iLCAiaW50ZXJjZXB0IiwgImdvVHJvdWdoUGlwZXMiLCAidmFsdWUiLCAicGlwZXMiLCAiYXJndW1lbnRNZXRhZGF0YSIsICJwaXBlIiwgIkludmFsaWRQaXBlRGVmaW5pdGlvbiIsICJQcm9taXNlIiwgInJlc29sdmUiLCAidHJhbnNmb3JtIiwgIkNvbnRyb2xsZXJGbG93SGFuZGxlciIsICJhcHBFbnYiLCAicGlwZWxpbmVIYW5kbGVyIiwgImNyZWF0ZUFyZ3MiLCAiY29udHJvbGxlciIsICJtZXRhZGF0YSIsICJwbGF5ZXIiLCAiYWxsIiwgInBhcmFtcyIsICJtYXAiLCAicGFyYW0iLCAidHlwZSIsICJkYXRhIiwgIm1ldGF0eXBlIiwgInJlcXVlc3QiLCAiYm9keSIsICJvd25lciIsICJ1bmRlZmluZWQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJmYWN0b3J5IiwgIkFwcEVudmlyb21lbnQiLCAiU2VydmVyIiwgIkNvbnRyb2xsZXJFdmVudEhhbmRsZXIiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgImV2ZW50U2VydmljZSIsICJjb250cm9sbGVyRmxvd0hhbmRsZXIiLCAiY3JlYXRlTWFuZ29SZXF1ZXN0IiwgImNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQiLCAicmVnaXN0ZXJFdmVudCIsICJtYXBwZWRFcnJvckZpbHRlcnMiLCAiZXZlbnQiLCAibmFtZSIsICJoYW5kbGVFdmVudCIsICJhcmdzIiwgInBhcnNlSW50ZXJuYWxBcmdzIiwgIndlYlZpZXdJZCIsICJJbnZhbGlkRXZlbnRUeXBlIiwgIkV4ZWN1dGlvbkNvbnRleHRUeXBlIiwgIkV2ZW50IiwgImNsYXNzUmVmIiwgInByb3RvdHlwZSIsICJtZXRob2QiLCAiY29udHJvbGxlck1ldGhvZCIsICJoYW5kbGUiLCAiaXNBc3luY0Z1bmN0aW9uIiwgImFwcGx5IiwgInJldHVybiIsICJfX25hbWUiLCAiSW52YWxpZFJldHVybkluRXZlbnQiLCAibGVuZ3RoIiwgImVycm9yR3JvdXAiLCAiZmluZCIsICJlcnJvclR5cGUiLCAiSW52YWxpZEVycm9yRmlsdGVyRGVmaW5pdGlvbiIsICJjYXRjaCIsICJDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIiLCAicmVhZCIsICJvcHRpb25zIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXIiLCAiZXZlbnRzIiwgImdldEV2ZW50cyIsICJycGNzIiwgImdldFJQQ3MiLCAidGltZXJzIiwgImdldFRpbWVycyIsICJnZXRQaXBlbGluZSIsICJDb250cm9sbGVyRXZlbnRzIiwgImdldE1ldGhvZFBhcmFtcyIsICJDb250cm9sbGVyUlBDcyIsICJycGMiLCAiQ29udHJvbGxlclBhcmFtcyIsICJzb3J0IiwgImEiLCAiYiIsICJpbmRleCIsICJmb3JFYWNoIiwgIkludmFsaWRQYXJhbWV0ZXJEZWNvcmF0b3JVc2FnZSIsICJSZXNwb25zZURlY29yYXRvck5vdEFsbG93ZWRPbkV2ZW50cyIsICJDbGllbnQiLCAiUGxheWVyRGVjb3JhdG9yTm90QWxsb3dlZE9uQ2xpZW50RXZlbnRzIiwgIlJQQ05vdEFsbG93ZWRJbkNsaWVudCIsICJSUENOb3RBbGxvd2VkSW5TZXJ2ZXIiLCAiRXZlbnROb3RBbGxvd2VkSW5DbGllbnQiLCAiRXZlbnROb3RBbGxvd2VkSW5TZXJ2ZXIiLCAidGFyZ2V0IiwgIkd1YXJkcyIsICJJbnRlcmNlcHRvcnMiLCAiUGlwZXMiLCAiZXJyb3JGaWx0ZXJzIiwgIkVycm9yRmlsdGVycyIsICJUaW1lcnMiLCAiQ29udHJvbGxlclJQQ0hhbmRsZXIiLCAicnBjU2VydmljZSIsICJjcmVhdGVNYW5nb1Jlc3BvbnNlIiwgInJlZ2lzdGVyUlBDIiwgImhhbmRsZVJQQyIsICJJbnZhbGlkUlBDVHlwZSIsICJyZXNwb25zZSIsICIkb25TZW5kIiwgIiRvbkVycm9yIiwgIlJQQyIsICJzZW5kIiwgInJlc3VsdCIsICJldmVudEhhbmRsZXJzIiwgInJwY0hhbmRsZXJzIiwgImluamVjdGFibGUiLCAiaW5qZWN0IiwgIm9wdGlvbmFsIiwgIkNvbnRhaW5lciIsICJMYXp5U2VydmljZUlkZW50aWZlciIsICJtaW5pdHoiLCAieSIsICJtIiwgImQiLCAiaCIsICJpIiwgInMiLCAidHoiLCAidGhyb3dPbkludmFsaWQiLCAiZnJvbVRaIiwgInRwIiwgImZyb21UWklTTyIsICJsb2NhbFRpbWVTdHIiLCAicGFyc2VJU09Mb2NhbCIsICJpbkRhdGUiLCAiRGF0ZSIsICJVVEMiLCAib2Zmc2V0IiwgImdldFRpbWV6b25lT2Zmc2V0IiwgImRhdGVHdWVzcyIsICJnZXRUaW1lIiwgImRhdGVPZmZzR3Vlc3MiLCAiZGF0ZUd1ZXNzMiIsICJkYXRlT2Zmc0d1ZXNzMiIsICJFcnJvciIsICJ0b1RaIiwgInR6U3RyIiwgImxvY2FsRGF0ZVN0cmluZyIsICJ0b0xvY2FsZVN0cmluZyIsICJ0aW1lWm9uZSIsICJyZXBsYWNlIiwgInRkIiwgImdldEZ1bGxZZWFyIiwgImdldE1vbnRoIiwgImdldERhdGUiLCAiZ2V0SG91cnMiLCAiZ2V0TWludXRlcyIsICJnZXRTZWNvbmRzIiwgImRhdGUiLCAidGltZVpvbmVOYW1lIiwgInNwbGl0IiwgInNsaWNlIiwgImRhdGVTdHJpbmciLCAicGFyc2UiLCAiZHRTdHIiLCAicGQiLCAiaXNOYU4iLCAic3RyaW5nRW5kIiwgInN1YnN0cmluZyIsICJpbmNsdWRlcyIsICJnZXRVVENGdWxsWWVhciIsICJnZXRVVENNb250aCIsICJnZXRVVENEYXRlIiwgImdldFVUQ0hvdXJzIiwgImdldFVUQ01pbnV0ZXMiLCAiZ2V0VVRDU2Vjb25kcyIsICJDcm9uT3B0aW9ucyIsICJvcHRpb25zIiwgIm5hbWUiLCAibGVnYWN5TW9kZSIsICJwYXVzZWQiLCAibWF4UnVucyIsICJJbmZpbml0eSIsICJjYXRjaCIsICJpbnRlcnZhbCIsICJwYXJzZUludCIsICJ1dGNPZmZzZXQiLCAidW5yZWYiLCAic3RhcnRBdCIsICJDcm9uRGF0ZSIsICJ0aW1lem9uZSIsICJzdG9wQXQiLCAiTEFTVF9PQ0NVUlJFTkNFIiwgIkFOWV9PQ0NVUlJFTkNFIiwgIk9DQ1VSUkVOQ0VfQklUTUFTS1MiLCAiQ3JvblBhdHRlcm4iLCAicGF0dGVybiIsICJzZWNvbmQiLCAiQXJyYXkiLCAiZmlsbCIsICJtaW51dGUiLCAiaG91ciIsICJkYXkiLCAibW9udGgiLCAiZGF5T2ZXZWVrIiwgImxhc3REYXlPZk1vbnRoIiwgInN0YXJET00iLCAic3RhckRPVyIsICJwcm90b3R5cGUiLCAiU3RyaW5nIiwgIlR5cGVFcnJvciIsICJpbmRleE9mIiwgImhhbmRsZU5pY2tuYW1lcyIsICJ0cmltIiwgInBhcnRzIiwgImxlbmd0aCIsICJ1bnNoaWZ0IiwgInJlcGxhY2VBbHBoYU1vbnRocyIsICJyZXBsYWNlQWxwaGFEYXlzIiwgImluaXREYXRlIiwgImdldERheSIsICJ0aHJvd0F0SWxsZWdhbENoYXJhY3RlcnMiLCAicGFydFRvQXJyYXkiLCAidHlwZSIsICJjb25mIiwgInZhbHVlSW5kZXhPZmZzZXQiLCAiZGVmYXVsdFZhbHVlIiwgImFyciIsICJoYW5kbGVSYW5nZVdpdGhTdGVwcGluZyIsICJoYW5kbGVSYW5nZSIsICJoYW5kbGVTdGVwcGluZyIsICJoYW5kbGVOdW1iZXIiLCAicmVWYWxpZENyb24iLCAidGVzdCIsICJyZXN1bHQiLCAiZXh0cmFjdE50aCIsICJzZXRQYXJ0IiwgInBhcnQiLCAiaW5kZXgiLCAidmFsdWUiLCAiT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImNhbGwiLCAiUmFuZ2VFcnJvciIsICJzZXROdGhXZWVrZGF5T2ZNb250aCIsICJtYXRjaGVzIiwgIm1hdGNoIiwgImxvd2VyIiwgInVwcGVyIiwgInN0ZXBzIiwgInJlc3QiLCAibnRoIiwgInN0YXJ0IiwgImNsZWFuUGF0dGVybiIsICJ0b0xvd2VyQ2FzZSIsICJudGhXZWVrZGF5IiwgIkRheXNPZk1vbnRoIiwgIlJlY3Vyc2lvblN0ZXBzIiwgImZyb21EYXRlIiwgImZyb21TdHJpbmciLCAiZnJvbUNyb25EYXRlIiwgImlzTnRoV2Vla2RheU9mTW9udGgiLCAieWVhciIsICJ3ZWVrZGF5IiwgImdldFVUQ0RheSIsICJjb3VudCIsICJkYXlzSW5Nb250aCIsICJtcyIsICJnZXRVVENNaWxsaXNlY29uZHMiLCAiYXBwbHkiLCAiZ2V0TWlsbGlzZWNvbmRzIiwgInN0ciIsICJmaW5kTmV4dCIsICJ0YXJnZXQiLCAib3JpZ2luYWxUYXJnZXQiLCAiZkRvbVdlZWtEYXkiLCAidW5kZWZpbmVkIiwgImRvd01hdGNoIiwgInJlY3Vyc2UiLCAiZG9pbmciLCAicmVzIiwgInJlc2V0TGV2ZWwiLCAiaW5jcmVtZW50IiwgImhhc1ByZXZpb3VzUnVuIiwgImludGVybmFsIiwgImlzRnVuY3Rpb24iLCAidiIsICJ0b1N0cmluZyIsICJGdW5jdGlvbiIsICJ1bnJlZlRpbWVyIiwgInRpbWVyIiwgIkRlbm8iLCAibWF4RGVsYXkiLCAic2NoZWR1bGVkSm9icyIsICJDcm9uIiwgImZuT3JPcHRpb25zMSIsICJmbk9yT3B0aW9uczIiLCAiZnVuYyIsICJfc3RhdGVzIiwgImtpbGwiLCAiYmxvY2tpbmciLCAicHJldmlvdXNSdW4iLCAiY3VycmVudFJ1biIsICJvbmNlIiwgImN1cnJlbnRUaW1lb3V0IiwgImV4aXN0aW5nIiwgImZpbmQiLCAiaiIsICJwdXNoIiwgImZuIiwgInNjaGVkdWxlIiwgIm5leHRSdW4iLCAicHJldiIsICJuZXh0IiwgIl9uZXh0IiwgIm5leHRSdW5zIiwgIm4iLCAicHJldmlvdXMiLCAiZW51bWVyYXRpb24iLCAiZ2V0UGF0dGVybiIsICJpc1J1bm5pbmciLCAibmV4dFJ1blRpbWUiLCAiaXNTY2hlZHVsZWQiLCAibm90SXNLaWxsZWQiLCAiaXNTdG9wcGVkIiwgImlzQnVzeSIsICJtc1RvTmV4dCIsICJzdG9wIiwgImNsZWFyVGltZW91dCIsICJqb2JJbmRleCIsICJzcGxpY2UiLCAicGF1c2UiLCAicmVzdW1lIiwgIndhaXRNcyIsICJzZXRUaW1lb3V0IiwgIl9jaGVja1RyaWdnZXIiLCAiX3RyaWdnZXIiLCAiaW5pdGlhdGlvbkRhdGUiLCAiY29udGV4dCIsICJfZSIsICJ0cmlnZ2VyIiwgIm5vdyIsICJzaG91bGRSdW4iLCAiaXNCbG9ja2VkIiwgInByb3RlY3QiLCAic3RhcnRBdEluRnV0dXJlV2l0aEludGVydmFsIiwgIl9jYWxjdWxhdGVQcmV2aW91c1J1biIsICJwcmV2VGltZVBsdXNJbnRlcnZhbCIsICJDb250cm9sbGVyIiwgIm9wdGlvbnMiLCAidGFyZ2V0IiwgIlJlZmxlY3QiLCAiaGFzTWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIiwgImRlZmluZU1ldGFkYXRhIiwgImluamVjdGFibGUiLCAiR2xvYmFsIiwgIkdsb2JhbE1vZHVsZSIsICJJbmplY3QiLCAia2V5IiwgInByb3BlcnR5S2V5IiwgInBhcmFtSW5kZXgiLCAiaXNOaWwiLCAidmFsaWRhdGVJbmplY3Rpb25Ub2tlbiIsICJJbnZhbGlkSW5qZWN0aW9uVG9rZW5TcGVjaWZpZWQiLCAidG9rZW4iLCAiZ2V0TWV0YWRhdGEiLCAiSW5qZWN0aW9uVG9rZW5Ob3RGb3VuZCIsICJpbmplY3QiLCAiSW5qZWN0YWJsZSIsICJ2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSIsICJNb2R1bGUiLCAidmFsaWRhdGVNb2R1bGVPcHRpb25zIiwgIk9wdGlvbmFsIiwgIm9wdGlvbmFsIiwgIlNldE1ldGFkYXRhIiwgImRlY29yYXRvckZhY3RvcnkiLCAiX19uYW1lIiwgIl9tZXRob2QiLCAiZGVzY3JpcHRvciIsICJLRVkiLCAiQ2F0Y2giLCAiZXhjZXB0aW9ucyIsICJkdXBsaWNhdGVzIiwgImZpbHRlciIsICJleGNlcHRpb24iLCAiaW5kZXgiLCAiaW5kZXhPZiIsICJsZW5ndGgiLCAiRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCIsICJVc2VGaWx0ZXJzIiwgImZpbHRlcnMiLCAibWV0aG9kIiwgInZhbGlkYXRlZEZpbHRlcnMiLCAidmFsaWRhdGVFcnJvckZpbHRlciIsICJwdXNoIiwgIkF0TGVhc3RPbmVGaWx0ZXJSZXF1aXJlZCIsICJtZXRob2RGaWx0ZXJzIiwgIkVycm9yRmlsdGVycyIsICJmaW5kIiwgImluY2x1ZGVzIiwgIkR1cGxpY2F0ZUVycm9yRmlsdGVyRGV0ZWN0ZWQiLCAiY2xhc3NGaWx0ZXJzIiwgIkFwcFJ1bnRpbWUiLCAiZXZlbnRIYW5kbGVyIiwgInJwY0hhbmRsZXIiLCAiZ2xvYmFsR3VhcmRzIiwgImdsb2JhbEludGVyY2VwdG9ycyIsICJnbG9iYWxQaXBlcyIsICJnbG9iYWxFcnJvckZpbHRlcnMiLCAibG9nZ2VyU2VydmljZSIsICJlbmFibGVTaHV0ZG93bkhvb2tzIiwgImJvb3QiLCAicmVzb2x2ZWRUcmVlIiwgImFzeW5jVHJhdmVyc2UiLCAibm9kZSIsICJzdGFydFRpbWUiLCAiRGF0ZSIsICJub3ciLCAibW9kdWxlIiwgImluc3RhbmNlIiwgImNvbnRhaW5lciIsICJnZXQiLCAibWV0YWRhdGEiLCAiY2xhc3NSZWYiLCAiY29udHJvbGxlcnMiLCAiZm9yRWFjaCIsICJjb250cm9sbGVyIiwgImludGVybmFsUHJvdmlkZXJzIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgImxvZyIsICJuYW1lIiwgInJ1bkxpZmVjeWNsZU1ldGhvZCIsICJydW5MaWZlY3ljbGVNZXRob2RzIiwgInRyYXZlcnNlIiwgInRpbWUiLCAicmVnaXN0ZXJUaW1lcnMiLCAicmVnaXN0ZXJMaXN0ZW5lcnMiLCAic2h1dGRvd24iLCAidGltZXJTZXJ2aWNlIiwgIm93bmVyIiwgIlRJTUVSX1NFUlZJQ0UiLCAiZXZlcnl0aWNrcyIsICJ0aW1lciIsICJkZXN0cm95IiwgImludGVydmFscyIsICJ0aW1lb3V0cyIsICJjcm9ucyIsICJjcm9uIiwgInN0b3AiLCAiZXZlbnRIYW5kbGVycyIsICJoYW5kbGVyIiwgInJwY0hhbmRsZXJzIiwgImV2ZW50cyIsICJldmVudCIsICJndWFyZHMiLCAiaW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIm1hcHBlZEVycm9yRmlsdGVycyIsICJtYXBFcnJvckZpbHRlcnMiLCAiZXJyb3JGaWx0ZXJzIiwgInJlZ2lzdGVyRXZlbnQiLCAicnBjcyIsICJycGMiLCAicmVnaXN0ZXJSUEMiLCAidGltZXJzIiwgInR5cGUiLCAiY3JlYXRlQ3JvbkpvYiIsICJiaW5kIiwgImNyZWF0ZUV2ZXJ5VGljayIsICJjcmVhdGVJbnRlcnZhbCIsICJ0aW1lb3V0IiwgImNyZWF0ZVRpbWVvdXQiLCAiZmlsdGVyTWFwIiwgImVycm9ycyIsICJmaWx0ZXJFcnJvciIsICJFcnJvckFscmVhZHlIYW5kbGVkQnlGaWx0ZXIiLCAiUHJvbWlzZSIsICJhbGwiLCAibWFwIiwgImlzT2JqZWN0IiwgInByb3ZpZGVySW5zdGFuY2UiLCAiTW9kdWxlRGVwZW5kZW5jeUJpbmRlciIsICJnbG9iYWxBcHBDb250YWluZXIiLCAiY29udGFpbmVyT3B0aW9ucyIsICJNb2R1bGVDb250YWluZXIiLCAicGFyZW50IiwgInRvU2VsZiIsICJpblNpbmdsZXRvblNjb3BlIiwgImdsb2JhbCIsICJfIiwgInByb3ZpZGVyIiwgImJpbmRQcm92aWRlciIsICJ0b0R5bmFtaWNWYWx1ZSIsICJpbXBvcnRNb2R1bGUiLCAicmVwZXRpdGl2ZUltcG9ydHMiLCAiTU9EVUxFX0NPTlRBSU5FUiIsICJ0b0NvbnN0YW50VmFsdWUiLCAidG8iLCAiVGltZXJTZXJ2aWNlIiwgInByb3ZpZGUiLCAidXNlVmFsdWUiLCAiYmluZGluZyIsICJjdHgiLCAiZGVwcyIsICJkZXAiLCAiZXJyIiwgInVuZGVmaW5lZCIsICJ1c2VGYWN0b3J5IiwgInNjb3BlIiwgImluVHJhbnNpZW50U2NvcGUiLCAiaW5SZXF1ZXN0U2NvcGUiLCAidXNlQ2xhc3MiLCAidG9TZXJ2aWNlIiwgInVzZUV4aXN0aW5nIiwgIk1vZHVsZVRyZWVTY2FubmVyIiwgIm1vZHVsZU1ldGFkYXRhUmVhZGVyIiwgImNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlciIsICJzY2FuIiwgIm1vZHVsZU1ldGFkYXRhIiwgInJlYWQiLCAic2NhbkNvbnRyb2xsZXJzIiwgIm1vZHVsZVRyZWUiLCAiVHJlZSIsICJzY2FubmVkTW9kdWxlcyIsICJNYXAiLCAic2V0IiwgImltcG9ydGVkTW9kdWxlIiwgImltcG9ydHMiLCAic2Nhbk1vZHVsZXMiLCAicm9vdCIsICJwYXJlbnROb2RlIiwgInNjYW5uZWRNb2R1bGUiLCAiYWRkIiwgImNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5IiwgInRyZWVOb2RlIiwgIlRyZWVOb2RlIiwgImFkZENoaWxkIiwgImNvbnRyb2xsZXJNZXRhZGF0YSIsICJwYXJlbnRNZXRhZGF0YSIsICJDaXJjdWxhckRlcGVuZGVuY3lEZXRlY3RlZCIsICJSYWdlTVBTY3JpcHRFdmVudCIsICJldmVudE5hbWUiLCAibGlzdGVuZXIiLCAibXAiLCAicmVtb3ZlIiwgIlJhZ2VNUEV2ZW50RW1taXRlciIsICJtYXBFdmVudHNTaGFyZWQiLCAibWFwRXZlbnRzIiwgImdldEV2ZW50TmFtZSIsICJlbWl0IiwgImFyZ3MiLCAiY2FsbCIsICJvbiIsICJtYXBwZWRFdmVudE5hbWUiLCAib25jZSIsICJvbmNlV3JhcHBlciIsICJvZmYiLCAiUmFnZU1QVGltZXIiLCAibGFzdFRpY2siLCAiaWQiLCAiaW50ZXJ2YWwiLCAiY2FsbGJhY2siLCAiY2xlYXJUaW1lciIsICJSYWdlTVBUaW1lcnMiLCAidGltZXJJbmNyZW1lbnRlciIsICJldmVyeVRpY2tIYW5kbGVycyIsICJpc0V2ZXJ5VGlja1J1bm5pbmciLCAiZXZlcnlUaWNrTWFpbkhhbmRsZXIiLCAidmFsdWVzIiwgIndhcm5pbmdUaHJlc2hvbGQiLCAiX3ZhbHVlIiwgInNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQiLCAiZ2V0QnlJRCIsICJjcmVhdGVUaW1lciIsICJjbGVhciIsICJjYWxsYmFja0JpbmQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ0aW1lcklkIiwgInJhZ2VNUFRpbWVyIiwgImRlbGV0ZSIsICJzZXRJbnRlcnZhbCIsICJjYiIsICJjbGVhckludGVydmFsIiwgInNldFRpbWVvdXQiLCAiY2xlYXJUaW1lb3V0IiwgImV2ZXJ5VGljayIsICJib3VuZCIsICJpc0NsaWVudFNpZGUiLCAiYnJvd3NlcnMiLCAiZSIsICJjb25zb2xlIiwgImxvZ0Vycm9yIiwgImludGVydmFsSGFuZGxlciIsICJfZXZlcnlUaWNrSW50ZXJ2YWwiLCAic2l6ZSIsICJuZXh0VGljayIsICJfbmFtZSIsICJ0aW1lRW5kIiwgIlJhZ2VNUE11bHRpcGxheWVyU2VydmljZSIsICJUaW1lcnMiLCAiRXZlbnRzIiwgInBhcnNlSW50ZXJuYWxBcmdzIiwgInBsYXllciIsICJib2R5IiwgImFyZyIsICJtZXNzYWdlIiwgImEiLCAiSlNPTiIsICJzdHJpbmdpZnkiLCAiU3RyaW5nIiwgImpvaW4iLCAibG9nSW5mbyIsICJsb2dXYXJuaW5nIiwgImxvZ0RlYnVnIiwgIkFwcCIsICJtb2R1bGVUcmVlU2Nhbm5lciIsICJtb2R1bGVEZXBlbmRlbmN5QmluZGVyIiwgImFwcFJ1bnRpbWUiLCAiaW50ZXJuYWxBcHBDb250YWluZXIiLCAicGx1Z2lucyIsICJsb2FkZWQiLCAic3RhcnQiLCAicm9vdE1vZHVsZSIsICJBcHBBbHJlYWR5TG9hZGVkIiwgInJ1blBsdWdpbk1ldGhvZHMiLCAiQXBwTm90TG9hZGVkIiwgInAiLCAicGx1Z2luIiwgInJlc29sdmUiLCAiQXBwQnVpbGRlciIsICJlbnZpcm9tZW50IiwgIm11bHRpcGxheWVyU2VydmljZSIsICJnbG9iYWxDb250YWluZXJPcHRpb25zIiwgInVzZUdsb2JhbEd1YXJkcyIsICJ2YWxpZGF0ZWRHdWFyZHMiLCAiZ3VhcmQiLCAidmFsaWRhdGVHdWFyZCIsICJHTE9CQUxfR1VBUkRTIiwgInVzZUdsb2JhbEludGVyY2VwdG9ycyIsICJ2YWxpZGF0ZWRJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3IiLCAidmFsaWRhdGVJbnRlcmNlcHRvciIsICJHTE9CQUxfSU5URVJDRVBUT1JTIiwgInVzZUdsb2JhbFBpcGVzIiwgInZhbGlkYXRlZFBpcGVzIiwgInBpcGUiLCAidmFsaWRhdGVQaXBlIiwgIkdMT0JBTF9QSVBFUyIsICJ1c2VHbG9iYWxGaWx0ZXJzIiwgInZhbGlkYXRlZEZJbHRlcnMiLCAiR0xPQkFMX0VSUk9SX0ZJTFRFUlMiLCAidXNlUGx1Z2lucyIsICJpbnRlcm5hbFBsdWdpbnMiLCAiUExVR0lOUyIsICJyZWJpbmQiLCAiRU5BQkxFX1NIVVRET1dOX0hPT0tTIiwgInNldENvbnRhaW5lck9wdGlvbnMiLCAib25seUdsb2JhbCIsICJDT05UQUlORVJfT1BUSU9OUyIsICJidWlsZCIsICJDb250YWluZXIiLCAiUkVGTEVDVE9SX1NFUlZJQ0UiLCAiUmVmbGVjdG9yU2VydmljZSIsICJNVUxUSVBMQVlFUl9TRVJWSUNFIiwgIkdMT0JBTF9BUFBfQ09OVEFJTkVSIiwgIlBpcGVsaW5lSGFuZGxlciIsICJNb2R1bGVNZXRhZGF0YVJlYWRlciIsICJDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIiLCAiQ29udHJvbGxlckZsb3dIYW5kbGVyIiwgIkNvbnRyb2xsZXJFdmVudEhhbmRsZXIiLCAiQ29udHJvbGxlclJQQ0hhbmRsZXIiLCAiTWFuZ29SZXF1ZXN0QmFzZSIsICJNQU5HT19SRVFVRVNUX0ZBQ1RPUlkiLCAidG9GYWN0b3J5IiwgImNvbnRleHQiLCAicmVxdWVzdCIsICIkYm9keSIsICIkcGxheWVyIiwgIk1hbmdvUmVzcG9uc2VCYXNlIiwgIk1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkiLCAiRXhlY3V0aW9uQ29udGV4dEJhc2UiLCAiRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSIsICJyZXNwb25zZSIsICJleGVjdXRpb25Db250ZXh0IiwgIiR0eXBlIiwgIiRyZXF1ZXN0IiwgIiRyZXNwb25zZSIsICIkaGFuZGxlciIsICIkY2xhc3NSZWYiLCAiJG5hbWUiLCAicGx1Z2luSW5zdGFuY2UiLCAib25CdWlsZCIsICJpc0JvdW5kIiwgImNyZWF0ZUFwcEJ1aWxkZXIiLCAiYXBwQnVpbGRlckluaGVyaXQiLCAiSU5URVJOQUxfQVBQX0NPTlRBSU5FUiIsICJBUFBfRU5WSVJPTUVOVCIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJ3ZWJWaWV3SWQiLCAiaXNTdHJpbmciLCAiRXZlbnROYW1lTXVzdEJlU3RyaW5nIiwgIkNvbnRyb2xsZXJFdmVudHMiLCAic29tZSIsICJFdmVudE5hbWVNdXN0QmVVbmlxdWUiLCAiT25JbnRlcm5hbCIsICJPbldlYlZpZXciLCAiT24iLCAiT25jZUludGVybmFsIiwgIk9uY2UiLCAiT25jZVdlYlZpZXciLCAiQm9keSIsICJwYXJhbXMiLCAiQ29udHJvbGxlclBhcmFtcyIsICJwYXJhbSIsICJNdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQiLCAicGFyYW1UeXBlcyIsICJtZXRhdHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiZGF0YSIsICJJbmRleCIsICJpc051bWJlciIsICJJbmRleEtleU11c3RCZU51bWJlciIsICJSZXF1ZXN0IiwgIlJlcSIsICJQYXJhbSIsICJQYXJhbUtleU11c3RCZVN0cmluZyIsICJSZXNwb25zZSIsICJSZXMiLCAiVXNlR3VhcmRzIiwgIkF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkIiwgIm1ldGhvZEd1YXJkcyIsICJHdWFyZHMiLCAiY2xhc3NHdWFyZHMiLCAiVXNlSW50ZXJjZXB0b3JzIiwgIkF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkIiwgIm1ldGhvZEludGVyY2VwdG9ycyIsICJJbnRlcmNlcHRvcnMiLCAiY2xhc3NJbnRlcmNlcHRvcnMiLCAiVXNlUGlwZXMiLCAiQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCIsICJtZXRob2RQaXBlcyIsICJQaXBlcyIsICJjbGFzc1BpcGVzIiwgImNyZWF0ZVJQQ0RlY29yYXRvciIsICJXZWJWaWV3SWRNdXN0QmVTdHJpbmdPck51bWJlciIsICJSUENOYW1lTXVzdEJlU3RyaW5nIiwgIkNvbnRyb2xsZXJSUENzIiwgIlJQQ05hbWVNdXN0QmVVbmlxdWUiLCAiT25SZXF1ZXN0IiwgInJwY05hbWUiLCAiT25XZWJWaWV3UmVxdWVzdCIsICJjcmVhdGVUaW1lckRlY29yYXRvciIsICJUaW1lck5hbWVNdXN0QmVTdHJpbmciLCAiQ3JvbiIsICJwYXR0ZXJuIiwgIkV2ZXJ5VGljayIsICJJbnRlcnZhbCIsICJuYW1lT3JUaW1lb3V0IiwgImludGVydmFsVGltZW91dCIsICJUaW1lb3V0IiwgImFwcGx5RGVjb3JhdG9ycyIsICJkZWNvcmF0b3JzIiwgImRlY29yYXRvciIsICJGdW5jdGlvbiIsICJjcmVhdGVQYXJhbURlY29yYXRvciIsICJmYWN0b3J5IiwgIkN1c3RvbSIsICJmb3J3YXJkUmVmIiwgImZuIiwgIkxhenlTZXJ2aWNlSWRlbnRpZmVyIiwgIm1ldGFkYXRhS2V5IiwgImdldEFsbCIsICJ0YXJnZXRzIiwgImdldEFsbEFuZE1lcmdlIiwgIm1ldGFkYXRhQ29sbGVjdGlvbiIsICJpdGVtIiwgImlzRW1wdHkiLCAicmVkdWNlIiwgImIiLCAiY29uY2F0IiwgImdldEFsbEFuZE92ZXJyaWRlIiwgInJlc3VsdCIsICJjcmVhdGVEZWNvcmF0b3IiLCAiZ2VuZXJhdGVSYW5kb21JZCIsICJkZWNvcmF0b3JGbiIsICJtZXRhZGF0YVZhbHVlIiwgInRyYW5zZm9ybSIsICIkZXZlcnl0aWNrcyIsICIkaW50ZXJ2YWxzIiwgIiR0aW1lb3V0cyIsICIkY3JvbnMiLCAiY3Jvbk9wdGlvbnMiLCAiY3JvbkpvYiIsICJldmVyeXRpY2siLCAiZ2V0QnlOYW1lIiwgImdldEJ5SWQiLCAiaW5qZWN0YWJsZSIsICJpbmplY3QiLCAiQmFzZUV2ZW50U2VydmljZSIsICIkbG9jYWxIYW5kbGVycyIsICJTZXQiLCAiJGludGVybmFsSGFuZGxlcnMiLCAiJHJlbW90ZUhhbmRsZXJzIiwgIiRpbnRlcm5hbEV2ZW50TmFtZXMiLCAiJGV2ZW50RW1taXRlciIsICJvbiIsICJldmVudE5hbWUiLCAiY2FsbGJhY2siLCAid3JhcHBlciIsICJfX25hbWUiLCAiYXJncyIsICJldmVudEhhbmRsZXIiLCAiYWRkIiwgIm9uY2UiLCAiZW1pdCIsICJib2R5IiwgIiRvbkludGVybmFsIiwgImhhbmRsZXIiLCAiaGFzIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUiLCAiJG9uY2VJbnRlcm5hbCIsICJCYXNlUlBDU2VydmljZSIsICIkbG9nZ2VyU2VydmljZSIsICIkVElNRU9VVCIsICJNYXAiLCAiY2FsbCIsICJycGNOYW1lIiwgIm9wdGlvbnMiLCAidGltZW91dCIsICJQcm9taXNlIiwgInJlc29sdmUiLCAiZ2V0IiwgIlJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQiLCAidGltZW91dElkIiwgInNldFRpbWVvdXQiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgInJlc3VsdCIsICJjbGVhclRpbWVvdXQiLCAic3VjY2VzcyIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlN1Y2Nlc3MiLCAiZXJyb3IiLCAiTWFuZ29FcnJvciIsICJtZXNzYWdlIiwgImRldGFpbHMiLCAiUlBDX1JFU1VMVF9VTktOT1dOIiwgIm9uUmVxdWVzdCIsICJSUENIYW5kbGVyQWxyZWFkeUV4aXN0cyIsICJycGNIYW5kbGVyIiwgImRlc3Ryb3kiLCAidmFsaWQiLCAiZGVsZXRlIiwgInNldCIsICJDb250YWluZXIiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiRGVmYXVsdFZhbHVlUGlwZSIsICJkZWZhdWx0VmFsdWUiLCAidHJhbnNmb3JtIiwgInZhbHVlIiwgImlzTmlsIiwgImlzTnVtYmVyIiwgImlzTmFOIiwgIlBsYXllclByb3RvdHlwZVBsdWdpbiIsICJnbG9iYWxBcHBDb250YWluZXIiLCAibG9nZ2VyU2VydmljZSIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiYmVmb3JlTG9hZCIsICJ0aW1lIiwgIkRhdGUiLCAibm93IiwgIlBsYXllciIsICJnZXRQbGF5ZXIiLCAicHJvdG90eXBlIiwgImVtaXRXZWJWaWV3IiwgImlkIiwgImV2ZW50TmFtZSIsICJib2R5IiwgImVtaXRSYXciLCAicGF5bG9hZCIsICJycGNTZXJ2aWNlIiwgImdldCIsICJSUENfU0VSVklDRSIsICJjYWxsIiwgInJwY05hbWUiLCAib3B0aW9ucyIsICJjYWxsUGxheWVyIiwgImNhbGxXZWJWaWV3IiwgImxvZyIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJSUENQbHVnaW4iLCAiZXZlbnRTZXJ2aWNlIiwgInJwY1NlcnZpY2UiLCAibG9nZ2VyU2VydmljZSIsICJiZWZvcmVMb2FkIiwgInRpbWUiLCAiRGF0ZSIsICJub3ciLCAib25QbGF5ZXIiLCAicGxheWVyIiwgImJvZHkiLCAidmFsaWQiLCAicnBjSGFuZGxlciIsICJzb3VyY2UiLCAiRXZlbnREZXN0aW5hdGlvbiIsICJDbGllbnQiLCAiJGNsaWVudEhhbmRsZXJzIiwgImdldCIsICJycGNOYW1lIiwgIldlYlZpZXciLCAiJHdlYlZpZXdIYW5kbGVycyIsICJ3ZWJWaWV3SWQiLCAidW5kZWZpbmVkIiwgImVtaXRXZWJWaWV3IiwgImlkIiwgIlJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQiLCAiZW1pdFJhdyIsICJoYW5kbGVyUmVzdWx0IiwgImhhbmRsZXIiLCAicnBjUmVzdWx0IiwgInN1Y2Nlc3MiLCAic3RhdHVzIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJTdWNjZXNzIiwgImVycm9yIiwgIk1hbmdvRXJyb3IiLCAibWVzc2FnZSIsICJkZXRhaWxzIiwgIlJQQ19SRVNVTFRfVU5LTk9XTiIsICJsb2ciLCAiQ29udGFpbmVyIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIklOVEVSTkFMX0VWRU5UUyIsICJTQ1JJUFRfUlBDIiwgIlNDUklQVF9SUENfQU5TV0VSIiwgIlNFUlZFUl9TVEFSVEVEIiwgIkNPTk5FQ1RJT05fUVVFVUVfQUREIiwgIkNPTk5FQ1RJT05fUVVFVUVfUkVNT1ZFIiwgIlBMQVlFUl9DT05ORUNUIiwgIlBMQVlFUl9DT05ORUNUX0RFTklFRCIsICJQTEFZRVJfRElTQ09OTkVDVCIsICJQTEFZRVJfREFNQUdFIiwgIlBMQVlFUl9ERUFUSCIsICJQTEFZRVJfSEVBTCIsICJQTEFZRVJfQ09OVFJPTF9SRVFVRVNUIiwgIlBMQVlFUl9JTlRFUklPUl9DSEFOR0UiLCAiUExBWUVSX0RJTUVOU0lPTl9DSEFOR0UiLCAiUExBWUVSX1dFQVBPTl9DSEFOR0UiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUIiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfU1RBUlQiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9TVE9QIiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFIiwgIlBMQVlFUl9TUEFXTiIsICJQTEFZRVJfQU5JTUFUSU9OX0NIQU5HRSIsICJQTEFZRVJfVkVISUNMRV9FTlRFUkVEIiwgIlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSIiwgIlBMQVlFUl9WRUhJQ0xFX0xFRlQiLCAiUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UiLCAiUEVEX0hFQUwiLCAiUEVEX0RFQVRIIiwgIlBFRF9EQU1BR0UiLCAiVkVISUNMRV9ERVNUUk9ZIiwgIlZFSElDTEVfQVRUQUNIIiwgIlZFSElDTEVfREVUQUNIIiwgIlZFSElDTEVfREFNQUdFIiwgIlZFSElDTEVfU0lSRU5fU1RBVEVfQ0hBTkdFIiwgIlZFSElDTEVfSE9STl9TVEFURV9DSEFOR0UiLCAiVk9JQ0VfQ09OTkVDVElPTiIsICJDTElFTlRfT0JKRUNUX0RFTEVURSIsICJDTElFTlRfT0JKRUNUX1JFUVVFU1QiLCAiQkFTRV9PQkpFQ1RfQ1JFQVRFIiwgIkJBU0VfT0JKRUNUX1JFTU9WRSIsICJORVRfT1dORVJfQ0hBTkdFIiwgIldFQVBPTl9EQU1BR0UiLCAiTUVUQV9DSEFOR0UiLCAiTE9DQUxfTUVUQV9DSEFOR0UiLCAiU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRSIsICJHTE9CQUxfTUVUQV9DSEFOR0UiLCAiR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSIsICJDT05TT0xFX0NPTU1BTkQiLCAiRVJST1IiLCAiQ09MX1NIQVBFX0VWRU5UIiwgIkVYUExPU0lPTiIsICJGSVJFX1NUQVJUIiwgIlBST0pFQ1RJTEVfU1RBUlQiLCAiRU5USVRZX0NPTF9TSEFQRV9FTlRFUiIsICJFTlRJVFlfQ09MX1NIQVBFX0xFQVZFIiwgIkVOVElUWV9DSEVDS1BPSU5UX0VOVEVSIiwgIkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFIiwgIkdJVkVfUEVEX1NDUklQVEVEX1RBU0siLCAiTE9DQUxfU0NSSVBUX0VWRU5UIiwgIlJFTU9URV9TQ1JJUFRfRVZFTlQiLCAiQU5ZX1JFU09VUkNFX1NUQVJUIiwgIkFOWV9SRVNPVVJDRV9TVE9QIiwgIlJFU09VUkNFX1NUQVJUIiwgIlJFU09VUkNFX1NUT1AiLCAiUkVTT1VSQ0VfRVJST1IiLCAiRVZFTlQiLCAiU2VydmVyRXZlbnRTZXJ2aWNlIiwgIkJhc2VFdmVudFNlcnZpY2UiLCAiJHJhZ2VFdmVudHMiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIkV2ZW50cyIsICIkaW50ZXJuYWxFdmVudE5hbWVzIiwgIlNldCIsICJPYmplY3QiLCAidmFsdWVzIiwgIklOVEVSTkFMX0VWRU5UUyIsICJvblBsYXllciIsICJldmVudE5hbWUiLCAiY2FsbGJhY2siLCAid3JhcHBlciIsICJwbGF5ZXIiLCAiYXJncyIsICJldmVudEhhbmRsZXIiLCAiJHJlbW90ZUhhbmRsZXJzIiwgImFkZCIsICJvbmNlUGxheWVyIiwgIm9uUmVtb3RlIiwgIm9uY2VSZW1vdGUiLCAiZW1pdFBsYXllcnMiLCAicGxheWVycyIsICJib2R5IiwgImNhbGwiLCAiZW1pdFBsYXllcnNVbnJlbGlhYmxlIiwgImNhbGxVbnJlbGlhYmxlIiwgImVtaXRBbGxQbGF5ZXJzIiwgIm1wIiwgImVtaXRBbGxQbGF5ZXJzVW5yZWxpYWJsZSIsICJvbldlYlZpZXciLCAiaWQiLCAib25jZVdlYlZpZXciLCAiZW1pdFdlYlZpZXdzIiwgInBheWxvYWQiLCAiZW1pdEFsbFdlYlZpZXdzIiwgImVtaXRBbGxXZWJWaWV3c1VucmVsaWFibGUiLCAib25QbGF5ZXJKb2luIiwgIm9uIiwgIm9uUGxheWVyUXVpdCIsICJvblBsYXllclJlYWR5IiwgIm9uUGxheWVyRGVhdGgiLCAib25QbGF5ZXJTcGF3biIsICJvblBsYXllckNoYXQiLCAib25QbGF5ZXJDb21tYW5kIiwgIm9uUGxheWVyRW50ZXJWZWhpY2xlIiwgIm9uUGxheWVyRXhpdFZlaGljbGUiLCAib25QbGF5ZXJTdGFydEVudGVyVmVoaWNsZSIsICJvblBsYXllclN0YXJ0RXhpdFZlaGljbGUiLCAib25QbGF5ZXJXZWFwb25DaGFuZ2UiLCAib25QbGF5ZXJEYW1hZ2UiLCAib25WZWhpY2xlRGVhdGgiLCAib25WZWhpY2xlRGFtYWdlIiwgIm9uUGxheWVyRW50ZXJDb2xzaGFwZSIsICJvblBsYXllckV4aXRDb2xzaGFwZSIsICJvblBsYXllckVudGVyQ2hlY2twb2ludCIsICJvblBsYXllckV4aXRDaGVja3BvaW50IiwgIm9uUGxheWVyQ29ubmVjdCIsICJvblBsYXllckRpc2Nvbm5lY3QiLCAiZXhpdFR5cGUiLCAicmVhc29uIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlNlcnZlckxvZ2dlclNlcnZpY2UiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgImxvZyIsICJhcmdzIiwgIk1BTkdPX0xPR19QUkVGSVgiLCAid2FybiIsICJsb2dXYXJuaW5nIiwgImVycm9yIiwgImxvZ0Vycm9yIiwgImRlYnVnIiwgImxvZ0RlYnVnIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlNlcnZlclJQQ1NlcnZpY2UiLCAiQmFzZVJQQ1NlcnZpY2UiLCAiJGV2ZW50U2VydmljZSIsICIkY2xpZW50SGFuZGxlcnMiLCAiTWFwIiwgIiR3ZWJWaWV3SGFuZGxlcnMiLCAiY2FsbFBsYXllciIsICJwbGF5ZXIiLCAicnBjTmFtZSIsICJib2R5IiwgIm9wdGlvbnMiLCAidGltZW91dCIsICIkVElNRU9VVCIsICIkaGFuZGxlQ2FsbCIsICJFdmVudERlc3RpbmF0aW9uIiwgIkNsaWVudCIsICJvblBsYXllclJlcXVlc3QiLCAiaGFuZGxlciIsICJoYXMiLCAiJGxvZ2dlclNlcnZpY2UiLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzIiwgInJwY0hhbmRsZXIiLCAiZGVzdHJveSIsICJ2YWxpZCIsICJkZWxldGUiLCAic2V0IiwgImNhbGxXZWJWaWV3IiwgImlkIiwgIldlYlZpZXciLCAib25XZWJWaWV3UmVxdWVzdCIsICJrZXkiLCAiZGVzdGluYXRpb24iLCAid2ViVmlld0lkIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJSUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQiLCAiY2FsbElkIiwgImdlbmVyYXRlUmFuZG9tSWQiLCAidGltZW91dElkIiwgImRpc2Nvbm5lY3RIYW5kbGVyIiwgIm9uUGxheWVyRGlzY29ubmVjdCIsICJjb250ZXh0IiwgImNsZWFyVGltZW91dCIsICJSUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQiLCAib25jZUhhbmRsZSIsICJfcGxheWVyIiwgImV2ZW50SGFuZGxlciIsICJvbmNlV2ViVmlldyIsICJvbmNlUGxheWVyIiwgInBheWxvYWQiLCAic291cmNlIiwgIlNlcnZlciIsICJlbWl0V2ViVmlldyIsICJlbWl0IiwgInNldFRpbWVvdXQiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgIlNlcnZpY2VCaW5kZXJQbHVnaW4iLCAiaW50ZXJuYWxBcHBDb250YWluZXIiLCAiZ2xvYmFsQXBwQ29udGFpbmVyIiwgIm9uQnVpbGQiLCAidGltZSIsICJEYXRlIiwgIm5vdyIsICJiaW5kIiwgIkxPR0dFUl9TRVJWSUNFIiwgInRvIiwgIlNlcnZlckxvZ2dlclNlcnZpY2UiLCAiaW5TaW5nbGV0b25TY29wZSIsICJFVkVOVF9TRVJWSUNFIiwgIlNlcnZlckV2ZW50U2VydmljZSIsICJSUENfU0VSVklDRSIsICJTZXJ2ZXJSUENTZXJ2aWNlIiwgInRvQ29uc3RhbnRWYWx1ZSIsICJnZXQiLCAibG9nZ2VyU2VydmljZSIsICJsb2ciLCAiUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQiLCAiZXZlbnROYW1lIiwgImxpc3RlbmVyIiwgImRlc3Ryb3kiLCAibXAiLCAiZXZlbnRzIiwgInJlbW92ZSIsICJTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIiLCAibWFwRXZlbnRzU2hhcmVkIiwgIm1hcEV2ZW50cyIsICJnZXRFdmVudE5hbWUiLCAiZXZlbnROYW1lIiwgImVtaXQiLCAiYXJncyIsICJtcCIsICJldmVudHMiLCAiY2FsbCIsICJvbiIsICJsaXN0ZW5lciIsICJtYXBwZWRFdmVudE5hbWUiLCAiYWRkIiwgIlJhZ2VNUFNlcnZlclNjcmlwdEV2ZW50IiwgIm9uY2UiLCAib25jZVdyYXBwZXIiLCAicmVtb3ZlIiwgIm9mZiIsICJlbWl0UGxheWVyIiwgInBsYXllciIsICJlbWl0QWxsUGxheWVyc1JhdyIsICJwbGF5ZXJzIiwgImVtaXRBbGxQbGF5ZXJzVW5yZWxpYWJsZVJhdyIsICJjYWxsVW5yZWxpYWJsZSIsICJlbWl0VW5yZWxpYWJsZVJhdyIsICJvblBsYXllciIsICJvbmNlUGxheWVyIiwgIm9mZlBsYXllciIsICJTZXJ2ZXJSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UiLCAiUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIkV2ZW50cyIsICJTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIiLCAiZ2V0UGxheWVyIiwgIm1wIiwgIlBsYXllciIsICJzZXRCbGlwRmFjdG9yeSIsICJmYWN0b3J5IiwgIkJsaXAiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJwcm90b3R5cGUiLCAic2V0TWFya2VyRmFjdG9yeSIsICJNYXJrZXIiLCAic2V0Q29sU2hhcGVGYWN0b3J5IiwgIkNvbHNoYXBlIiwgInNldENoZWNrcG9pbnRGYWN0b3J5IiwgIkNoZWNrcG9pbnQiLCAic2V0T2JqZWN0RmFjdG9yeSIsICJzZXRQZWRGYWN0b3J5IiwgIlBlZCIsICJzZXRQbGF5ZXJGYWN0b3J5IiwgInNldFZlaGljbGVGYWN0b3J5IiwgIlZlaGljbGUiLCAic2V0VmlydHVhbEVudGl0eUdyb3VwRmFjdG9yeSIsICJfZmFjdG9yeSIsICJzZXRWaXJ0dWFsRW50aXR5RmFjdG9yeSIsICJzZXRWb2ljZUNoYW5uZWxGYWN0b3J5IiwgIlVzZUZpbHRlcnMiLCAiZmlsdGVycyIsICIkVXNlRmlsdGVycyIsICJPblNjcmlwdFJQQyIsICJPbkludGVybmFsIiwgIklOVEVSTkFMX0VWRU5UUyIsICJTQ1JJUFRfUlBDIiwgIk9uY2VTY3JpcHRSUEMiLCAiT25jZUludGVybmFsIiwgIk9uU2NyaXB0UlBDQW5zd2VyIiwgIlNDUklQVF9SUENfQU5TV0VSIiwgIk9uY2VTY3JpcHRSUENBbnN3ZXIiLCAiT25TZXJ2ZXJTdGFydGVkIiwgIlNFUlZFUl9TVEFSVEVEIiwgIk9uY2VTZXJ2ZXJTdGFydGVkIiwgIk9uQ29ubmVjdGlvblF1ZXVlQWRkIiwgIkNPTk5FQ1RJT05fUVVFVUVfQUREIiwgIk9uY2VDb25uZWN0aW9uUXVldWVBZGQiLCAiT25Db25uZWN0aW9uUXVldWVSZW1vdmUiLCAiQ09OTkVDVElPTl9RVUVVRV9SRU1PVkUiLCAiT25jZUNvbm5lY3Rpb25RdWV1ZVJlbW92ZSIsICJPblBsYXllckNvbm5lY3QiLCAiUExBWUVSX0NPTk5FQ1QiLCAiT25jZVBsYXllckNvbm5lY3QiLCAiT25QbGF5ZXJDb25uZWN0RGVuaWVkIiwgIlBMQVlFUl9DT05ORUNUX0RFTklFRCIsICJPbmNlUGxheWVyQ29ubmVjdERlbmllZCIsICJPblBsYXllckRpc2Nvbm5lY3QiLCAiUExBWUVSX0RJU0NPTk5FQ1QiLCAiT25jZVBsYXllckRpc2Nvbm5lY3QiLCAiT25QbGF5ZXJEYW1hZ2UiLCAiUExBWUVSX0RBTUFHRSIsICJPbmNlUGxheWVyRGFtYWdlIiwgIk9uUGxheWVyRGVhdGgiLCAiUExBWUVSX0RFQVRIIiwgIk9uY2VQbGF5ZXJEZWF0aCIsICJPblBsYXllckhlYWwiLCAiUExBWUVSX0hFQUwiLCAiT25jZVBsYXllckhlYWwiLCAiT25QbGF5ZXJDb250cm9sUmVxdWVzdCIsICJQTEFZRVJfQ09OVFJPTF9SRVFVRVNUIiwgIk9uY2VQbGF5ZXJDb250cm9sUmVxdWVzdCIsICJPblBsYXllckludGVyaW9yQ2hhbmdlIiwgIlBMQVlFUl9JTlRFUklPUl9DSEFOR0UiLCAiT25jZVBsYXllckludGVyaW9yQ2hhbmdlIiwgIk9uUGxheWVyRGltZW5zaW9uQ2hhbmdlIiwgIlBMQVlFUl9ESU1FTlNJT05fQ0hBTkdFIiwgIk9uY2VQbGF5ZXJEaW1lbnNpb25DaGFuZ2UiLCAiT25QbGF5ZXJXZWFwb25DaGFuZ2UiLCAiUExBWUVSX1dFQVBPTl9DSEFOR0UiLCAiT25jZVBsYXllcldlYXBvbkNoYW5nZSIsICJPblBsYXllclN5bmNlZFNjZW5lUmVxdWVzdCIsICJQTEFZRVJfU1lOQ0VEX1NDRU5FX1JFUVVFU1QiLCAiT25jZVBsYXllclN5bmNlZFNjZW5lUmVxdWVzdCIsICJPblBsYXllclN5bmNlZFNjZW5lU3RhcnQiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9TVEFSVCIsICJPbmNlUGxheWVyU3luY2VkU2NlbmVTdGFydCIsICJPblBsYXllclN5bmNlZFNjZW5lU3RvcCIsICJQTEFZRVJfU1lOQ0VEX1NDRU5FX1NUT1AiLCAiT25jZVBsYXllclN5bmNlZFNjZW5lU3RvcCIsICJPblBsYXllclN5bmNlZFNjZW5lVXBkYXRlIiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFIiwgIk9uY2VQbGF5ZXJTeW5jZWRTY2VuZVVwZGF0ZSIsICJPblBsYXllclNwYXduIiwgIlBMQVlFUl9TUEFXTiIsICJPbmNlUGxheWVyU3Bhd24iLCAiT25QbGF5ZXJBbmltYXRpb25DaGFuZ2UiLCAiUExBWUVSX0FOSU1BVElPTl9DSEFOR0UiLCAiT25jZVBsYXllckFuaW1hdGlvbkNoYW5nZSIsICJPblBsYXllclZlaGljbGVFbnRlcmVkIiwgIlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQiLCAiT25jZVBsYXllclZlaGljbGVFbnRlcmVkIiwgIk9uUGxheWVyU3RhcnRWZWhpY2xlRW50ZXIiLCAiUExBWUVSX1NUQVJUX1ZFSElDTEVfRU5URVIiLCAiT25jZVBsYXllclN0YXJ0VmVoaWNsZUVudGVyIiwgIk9uUGxheWVyVmVoaWNsZUxlZnQiLCAiUExBWUVSX1ZFSElDTEVfTEVGVCIsICJPbmNlUGxheWVyVmVoaWNsZUxlZnQiLCAiT25QbGF5ZXJWZWhpY2xlU2VhdENoYW5nZSIsICJQTEFZRVJfVkVISUNMRV9TRUFUX0NIQU5HRSIsICJPbmNlUGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UiLCAiT25QZWRIZWFsIiwgIlBFRF9IRUFMIiwgIk9uY2VQZWRIZWFsIiwgIk9uUGVkRGVhdGgiLCAiUEVEX0RFQVRIIiwgIk9uY2VQZWREZWF0aCIsICJPblBlZERhbWFnZSIsICJQRURfREFNQUdFIiwgIk9uY2VQZWREYW1hZ2UiLCAiT25WZWhpY2xlRGVzdHJveSIsICJWRUhJQ0xFX0RFU1RST1kiLCAiT25jZVZlaGljbGVEZXN0cm95IiwgIk9uVmVoaWNsZUF0dGFjaCIsICJWRUhJQ0xFX0FUVEFDSCIsICJPbmNlVmVoaWNsZUF0dGFjaCIsICJPblZlaGljbGVEZXRhY2giLCAiVkVISUNMRV9ERVRBQ0giLCAiT25jZVZlaGljbGVEZXRhY2giLCAiT25WZWhpY2xlRGFtYWdlIiwgIlZFSElDTEVfREFNQUdFIiwgIk9uY2VWZWhpY2xlRGFtYWdlIiwgIk9uVmVoaWNsZVNpcmVuU3RhdGVDaGFuZ2UiLCAiVkVISUNMRV9TSVJFTl9TVEFURV9DSEFOR0UiLCAiT25jZVZlaGljbGVTaXJlblN0YXRlQ2hhbmdlIiwgIk9uVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSIsICJWRUhJQ0xFX0hPUk5fU1RBVEVfQ0hBTkdFIiwgIk9uY2VWZWhpY2xlSG9yblN0YXRlQ2hhbmdlIiwgIk9uVm9pY2VDb25uZWN0aW9uIiwgIlZPSUNFX0NPTk5FQ1RJT04iLCAiT25jZVZvaWNlQ29ubmVjdGlvbiIsICJPbkNsaWVudE9iamVjdERlbGV0ZSIsICJDTElFTlRfT0JKRUNUX0RFTEVURSIsICJPbmNlQ2xpZW50T2JqZWN0RGVsZXRlIiwgIk9uQ2xpZW50T2JqZWN0UmVxdWVzdCIsICJDTElFTlRfT0JKRUNUX1JFUVVFU1QiLCAiT25jZUNsaWVudE9iamVjdFJlcXVlc3QiLCAiT25CYXNlT2JqZWN0Q3JlYXRlIiwgIkJBU0VfT0JKRUNUX0NSRUFURSIsICJPbmNlQmFzZU9iamVjdENyZWF0ZSIsICJPbkJhc2VPYmplY3RSZW1vdmUiLCAiQkFTRV9PQkpFQ1RfUkVNT1ZFIiwgIk9uY2VCYXNlT2JqZWN0UmVtb3ZlIiwgIk9uTmV0T3duZXJDaGFuZ2UiLCAiTkVUX09XTkVSX0NIQU5HRSIsICJPbmNlTmV0T3duZXJDaGFuZ2UiLCAiT25XZWFwb25EYW1hZ2UiLCAiV0VBUE9OX0RBTUFHRSIsICJPbmNlV2VhcG9uRGFtYWdlIiwgIk9uTWV0YUNoYW5nZSIsICJNRVRBX0NIQU5HRSIsICJPbmNlTWV0YUNoYW5nZSIsICJPbkxvY2FsTWV0YUNoYW5nZSIsICJMT0NBTF9NRVRBX0NIQU5HRSIsICJPbmNlTG9jYWxNZXRhQ2hhbmdlIiwgIk9uU3RyZWFtU3luY2VkTWV0YUNoYW5nZSIsICJTVFJFQU1fU1lOQ0VEX01FVEFfQ0hBTkdFIiwgIk9uY2VTdHJlYW1TeW5jZWRNZXRhQ2hhbmdlIiwgIk9uR2xvYmFsTWV0YUNoYW5nZSIsICJHTE9CQUxfTUVUQV9DSEFOR0UiLCAiT25jZUdsb2JhbE1ldGFDaGFuZ2UiLCAiT25HbG9iYWxTeW5jZWRNZXRhQ2hhbmdlIiwgIkdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0UiLCAiT25jZUdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UiLCAiT25Db25zb2xlQ29tbWFuZCIsICJDT05TT0xFX0NPTU1BTkQiLCAiT25jZUNvbnNvbGVDb21tYW5kIiwgIk9uRXJyb3IiLCAiRVJST1IiLCAiT25jZUVycm9yIiwgIk9uQ29sU2hhcGVFdmVudCIsICJDT0xfU0hBUEVfRVZFTlQiLCAiT25jZUNvbFNoYXBlRXZlbnQiLCAiT25FeHBsb3Npb24iLCAiRVhQTE9TSU9OIiwgIk9uY2VFeHBsb3Npb24iLCAiT25GaXJlU3RhcnQiLCAiRklSRV9TVEFSVCIsICJPbmNlRmlyZVN0YXJ0IiwgIk9uUHJvamVjdGlsZVN0YXJ0IiwgIlBST0pFQ1RJTEVfU1RBUlQiLCAiT25jZVByb2plY3RpbGVTdGFydCIsICJPbkVudGl0eUNvbFNoYXBlRW50ZXIiLCAiRU5USVRZX0NPTF9TSEFQRV9FTlRFUiIsICJPbmNlRW50aXR5Q29sU2hhcGVFbnRlciIsICJPbkVudGl0eUNvbFNoYXBlTGVhdmUiLCAiRU5USVRZX0NPTF9TSEFQRV9MRUFWRSIsICJPbmNlRW50aXR5Q29sU2hhcGVMZWF2ZSIsICJPbkVudGl0eUNoZWNrcG9pbnRFbnRlciIsICJFTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUiIsICJPbmNlRW50aXR5Q2hlY2twb2ludEVudGVyIiwgIk9uRW50aXR5Q2hlY2twb2ludExlYXZlIiwgIkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFIiwgIk9uY2VFbnRpdHlDaGVja3BvaW50TGVhdmUiLCAiT25HaXZlUGVkU2NyaXB0ZWRUYXNrIiwgIkdJVkVfUEVEX1NDUklQVEVEX1RBU0siLCAiT25jZUdpdmVQZWRTY3JpcHRlZFRhc2siLCAiT25Mb2NhbFNjcmlwdEV2ZW50IiwgIkxPQ0FMX1NDUklQVF9FVkVOVCIsICJPbmNlTG9jYWxTY3JpcHRFdmVudCIsICJPblJlbW90ZVNjcmlwdEV2ZW50IiwgIlJFTU9URV9TQ1JJUFRfRVZFTlQiLCAiT25jZVJlbW90ZVNjcmlwdEV2ZW50IiwgIk9uQW55UmVzb3VyY2VTdGFydCIsICJBTllfUkVTT1VSQ0VfU1RBUlQiLCAiT25jZUFueVJlc291cmNlU3RhcnQiLCAiT25BbnlSZXNvdXJjZVN0b3AiLCAiQU5ZX1JFU09VUkNFX1NUT1AiLCAiT25jZUFueVJlc291cmNlU3RvcCIsICJPblJlc291cmNlU3RhcnQiLCAiUkVTT1VSQ0VfU1RBUlQiLCAiT25jZVJlc291cmNlU3RhcnQiLCAiT25SZXNvdXJjZVN0b3AiLCAiUkVTT1VSQ0VfU1RPUCIsICJPbmNlUmVzb3VyY2VTdG9wIiwgIk9uUmVzb3VyY2VFcnJvciIsICJSRVNPVVJDRV9FUlJPUiIsICJPbmNlUmVzb3VyY2VFcnJvciIsICJPbkV2ZW50IiwgIkVWRU5UIiwgIk9uY2VFdmVudCIsICJPblBsYXllciIsICJldmVudE5hbWUiLCAiY3JlYXRlRXZlbnREZWNvcmF0b3IiLCAiT25XZWJWaWV3IiwgImlkIiwgImV2ZW50TmFtZSIsICIkT25XZWJWaWV3IiwgIk9uIiwgImV2ZW50TmFtZSIsICIkT24iLCAiT25jZVBsYXllciIsICJldmVudE5hbWUiLCAiY3JlYXRlRXZlbnREZWNvcmF0b3IiLCAiT25jZVdlYlZpZXciLCAiaWQiLCAiZXZlbnROYW1lIiwgIiRPbmNlV2ViVmlldyIsICJPbmNlIiwgImV2ZW50TmFtZSIsICIkT25jZSIsICJQbGF5ZXIiLCAia2V5IiwgInBpcGVzIiwgInRhcmdldCIsICJtZXRob2QiLCAiaW5kZXgiLCAicGFyYW1zIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAic29tZSIsICJwYXJhbSIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkIiwgInBhcmFtVHlwZXMiLCAibWV0YXR5cGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ1bmRlZmluZWQiLCAiZGVmaW5lTWV0YWRhdGEiLCAidHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiZGF0YSIsICJVc2VHdWFyZHMiLCAiZ3VhcmRzIiwgIiRVc2VHdWFyZHMiLCAiVXNlSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9ycyIsICIkVXNlSW50ZXJjZXB0b3JzIiwgIk9uUGxheWVyUmVxdWVzdCIsICJycGNOYW1lIiwgImNyZWF0ZVJQQ0RlY29yYXRvciIsICJPblJlcXVlc3QiLCAicnBjTmFtZSIsICIkT25SZXF1ZXN0IiwgIk9uV2ViVmlld1JlcXVlc3QiLCAiaWQiLCAicnBjTmFtZSIsICIkT25XZWJWaWV3UmVxdWVzdCIsICJUSFJPVFRMRVJfTElNSVQiLCAiVEhST1RUTEVSX1RUTCIsICJUSFJPVFRMRVJfT1BUSU9OUyIsICJUSFJPVFRMRVJfU0tJUCIsICJUSFJPVFRMRVJfU1RPUkFHRSIsICJTa2lwVGhyb3R0bGUiLCAic2tpcCIsICJkZWZhdWx0IiwgInRhcmdldCIsICJfcHJvcGVydHlLZXkiLCAiZGVzY3JpcHRvciIsICJrZXkiLCAiUmVmbGVjdCIsICJkZWZpbmVNZXRhZGF0YSIsICJUSFJPVFRMRVJfU0tJUCIsICJ2YWx1ZSIsICJzZXRUaHJvdHRsZXJNZXRhZGF0YSIsICJ0YXJnZXQiLCAib3B0aW9ucyIsICJuYW1lIiwgIlJlZmxlY3QiLCAiZGVmaW5lTWV0YWRhdGEiLCAiVEhST1RUTEVSX1RUTCIsICJ0dGwiLCAiVEhST1RUTEVSX0xJTUlUIiwgImxpbWl0IiwgIlRocm90dGxlIiwgIl9wcm9wZXJ0eUtleSIsICJkZXNjcmlwdG9yIiwgInZhbHVlIiwgImNyZWF0ZUhhc2giLCAiVGhyb3R0bGVyR3VhcmQiLCAib3B0aW9ucyIsICJzdG9yYWdlU2VydmljZSIsICJyZWZsZWN0b3IiLCAidGhyb3R0bGVycyIsICJjb21tb25PcHRpb25zIiwgIm9uTW9kdWxlSW5pdCIsICJBcnJheSIsICJpc0FycmF5IiwgInNvcnQiLCAiZmlyc3QiLCAic2Vjb25kIiwgImlzRnVuY3Rpb24iLCAidHRsIiwgIm1hcCIsICJvcHQiLCAibmFtZSIsICJza2lwSWYiLCAiY2FuQWN0aXZhdGUiLCAiY29udGV4dCIsICJjb250aW51ZXMiLCAibmFtZWRUaHJvdHRsZXIiLCAic2tpcCIsICJnZXRBbGxBbmRPdmVycmlkZSIsICJUSFJPVFRMRVJfU0tJUCIsICJoYW5kbGVyIiwgImNsYXNzUmVmIiwgInB1c2giLCAicm91dGVPckNsYXNzTGltaXQiLCAiVEhST1RUTEVSX0xJTUlUIiwgInJvdXRlT3JDbGFzc1R0bCIsICJUSFJPVFRMRVJfVFRMIiwgImxpbWl0IiwgInJlc29sdmVWYWx1ZSIsICJoYW5kbGVSZXF1ZXN0IiwgImV2ZXJ5IiwgImNvbnQiLCAidGhyb3R0bGVyIiwgInBsYXllciIsICJyZXF1ZXN0IiwgIkVycm9yIiwgImtleSIsICJnZW5lcmF0ZUtleSIsICJ0b3RhbEhpdHMiLCAidGltZVRvRXhwaXJlIiwgImluY3JlbWVudCIsICJ0aHJvd1Rocm90dGxpbmdFeGNlcHRpb24iLCAicHJlZml4IiwgImNyZWF0ZUhhc2giLCAidXBkYXRlIiwgImRpZ2VzdCIsICJ0b1N0cmluZyIsICJfdGhyb3R0bGVyTGltaXREZXRhaWwiLCAiVG9vTWFueVJlcXVlc3RzIiwgImdldEVycm9yTWVzc2FnZSIsICJfY29udGV4dCIsICJlcnJvck1lc3NhZ2UiLCAiRXJyb3JNZXNzYWdlIiwgInJlc29sdmFibGVWYWx1ZSIsICJUaHJvdHRsZXJTdG9yYWdlU2VydmljZSIsICJzdG9yYWdlIiwgIldlYWtNYXAiLCAidGltZW91dElkcyIsICJnZXRFeHBpcmF0aW9uVGltZSIsICJwbGF5ZXIiLCAia2V5IiwgIk1hdGgiLCAiZmxvb3IiLCAiZ2V0IiwgImV4cGlyZXNBdCIsICJEYXRlIiwgIm5vdyIsICJzZXRFeHBpcmF0aW9uVGltZSIsICJ0dGxNaWxsaXNlY29uZHMiLCAidGltZW91dElkIiwgInNldFRpbWVvdXQiLCAidG90YWxIaXRzIiwgImNsZWFyVGltZW91dCIsICJmaWx0ZXIiLCAiaWQiLCAicHVzaCIsICJpbmNyZW1lbnQiLCAidHRsIiwgInNldCIsICJNYXAiLCAidGltZVRvRXhwaXJlIiwgIm9uQXBwU2h1dGRvd24iLCAiZm9yRWFjaCIsICJUaHJvdHRsZXJNb2R1bGUiLCAiZm9yUm9vdCIsICJvcHRpb25zIiwgIm1vZHVsZSIsICJwcm92aWRlcnMiLCAicHJvdmlkZSIsICJUSFJPVFRMRVJfT1BUSU9OUyIsICJ1c2VWYWx1ZSIsICJUSFJPVFRMRVJfU1RPUkFHRSIsICJ1c2VDbGFzcyIsICJUaHJvdHRsZXJTdG9yYWdlU2VydmljZSIsICJleHBvcnRzIiwgImZvclJvb3RBc3luYyIsICJjcmVhdGVBc3luY1Byb3ZpZGVycyIsICJpbXBvcnRzIiwgInVzZUV4aXN0aW5nIiwgInVzZUZhY3RvcnkiLCAiY3JlYXRlQXN5bmNPcHRpb25zUHJvdmlkZXIiLCAiaW5qZWN0IiwgIm9wdGlvbnNGYWN0b3J5IiwgImNyZWF0ZVRocm90dGxlck9wdGlvbnMiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIlNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSIsICJTZXJ2ZXJBcHBCdWlsZGVyIiwgIkFwcEJ1aWxkZXIiLCAic2V0QmxpcEZhY3RvcnkiLCAiZmFjdG9yeSIsICJzZXRNYXJrZXJGYWN0b3J5IiwgInNldENvbFNoYXBlRmFjdG9yeSIsICJzZXRDaGVja3BvaW50RmFjdG9yeSIsICJzZXRPYmplY3RGYWN0b3J5IiwgInNldFBlZEZhY3RvcnkiLCAic2V0UGxheWVyRmFjdG9yeSIsICJzZXRWZWhpY2xlRmFjdG9yeSIsICJzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5IiwgInNldFZpcnR1YWxFbnRpdHlGYWN0b3J5IiwgInNldFZvaWNlQ2hhbm5lbEZhY3RvcnkiLCAiY3JlYXRlQXBwQnVpbGRlciIsICIkY3JlYXRlQXBwQnVpbGRlciIsICJlbnZpcm9tZW50IiwgIkFwcEVudmlyb21lbnQiLCAiU2VydmVyIiwgInBsdWdpbnMiLCAiU2VydmljZUJpbmRlclBsdWdpbiIsICJQbGF5ZXJQcm90b3R5cGVQbHVnaW4iLCAiUlBDUGx1Z2luIiwgImFwcEJ1aWxkZXJJbmhlcml0Il0KfQo=
6624
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vY29yZS9zcmMvY29uc3RhbnRzL2luZGV4LnRzIiwgIi4uLy4uL2NvcmUvc3JjL2VudW1zL2Vycm9yLW1lc3NhZ2UuZW51bS50cyIsICIuLi8uLi9jb3JlL3NyYy9lbnVtcy9pbmplY3RhYmxlLXNjb3BlLmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvZW51bXMvcnBjLXJlc3VsdC1zdGF0dXMuZW51bS50cyIsICIuLi8uLi9jb3JlL2Rpc3QvY2h1bmstN1FWWVU2M0UuanMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3BpcGVsaW5lL2V4ZWN1dGlvbi1jb250ZXh0LWJhc2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3BpcGVsaW5lL21hbmdvLXJlcXVlc3QtYmFzZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvcGlwZWxpbmUvbWFuZ28tcmVzcG9uc2UtYmFzZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvdXRpbHMvdHJlZS51dGlsLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9lbnVtcy9hcHAtZW52aXJvbWVudC5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9lbnVtcy9jb3JlLW1ldGFkYXRhLWtleS5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9lbnVtcy9ldmVudC1kZXN0aW5hdGlvbi5lbnVtLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9lbnVtcy9leGVjdXRpb24tY29udGV4dC10eXBlLmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2VudW1zL21ldGhvZC1wYXJhbS10eXBlLmVudW0udHMiLCAiLi4vLi4vY29yZS9zcmMvdXRpbHMvZ2VuZXJhdGUtcmFuZG9tLWlkLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvdXRpbHMvdHlwZS1jaGVjay51dGlsLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvY29udHJvbGxlci9jb250cm9sbGVyLW9wdGlvbnMudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZXJyb3ItZmlsdGVyLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvZXZlbnRzL3BpcGUudmFsaWRhdGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2NoZW1hcy9ldmVudHMvZXZlbnQtcGFyYW1ldGVyLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvZXZlbnRzL2V2ZW50LW1ldGFkYXRhLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvZXZlbnRzL2d1YXJkLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvZXZlbnRzL2ludGVyY2VwdG9yLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvaW5qZWN0aW9uLXRva2VuLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvbW9kdWxlL3Byb3ZpZGVyLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvbW9kdWxlL21vZHVsZS1vcHRpb25zLnZhbGlkYXRlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL3NjaGVtYXMvaW5qZWN0YWJsZS1tZXRhZGF0YS52YWxpZGF0ZS50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29uc3RhbnRzL2luZGV4LnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9tYW5nby5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9lcnJvcnMvZ3VhcmQtY2FuY2VsLmVycm9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2Vycm9ycy9ndWFyZC1pbnZhbGlkLXJldHVybi5lcnJvci50cyIsICIuLi8uLi9jb3JlL3NyYy9lcnJvcnMvdG9vLW1hbnktcmVxdWVzdHMuZXJyb3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZXJyb3JzL3Vua25vd24uZXJyb3IudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvY29udHJvbGxlci1ldmVudC5oYW5kbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jb250cm9sbGVyL3BpcGVsaW5lLmhhbmRsZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvY29udHJvbGxlci1mbG93LmhhbmRsZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvY29udHJvbGxlci1tZXRhZGF0YS5yZWFkZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL2NvbnRyb2xsZXIvY29udHJvbGxlci1ycGMuaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvY29udHJvbGxlci9jb250cm9sbGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUvbW9kdWxlLW1ldGFkYXRhLnJlYWRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlL21vZHVsZS1jb250YWluZXIudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS9tb2R1bGUudHMiLCAiLi4vLi4vY29yZS9zcmMvc2VydmljZXMvcmVmbGVjdG9yLnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jb3JlL2NvbnRyb2xsZXIuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9nbG9iYWwuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9pbmplY3QuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9pbmplY3RhYmxlLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvbW9kdWxlLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NvcmUvb3B0aW9uYWwuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY29yZS9zZXQtbWV0YWRhdGEuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXJyb3JzL2NhdGNoLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2Vycm9ycy91c2UtZmlsdGVycy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL21vZHVsZS10cmVlL2FwcC1ydW50aW1lLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tb2R1bGUtdHJlZS9kZXBlbmRlbmN5LWJpbmRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbW9kdWxlLXRyZWUvbW9kdWxlLXRyZWUtc2Nhbm5lci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1zY3JpcHQtZXZlbnQtaGFuZGxlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1ldmVudC1lbW1pdGVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXRpbWVyLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXRpbWVycy50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvbXVsdGlwbGF5ZXIvcmFnZW1wL3JhZ2VtcC1tdWx0aXBsYXllci5zZXJ2aWNlLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9hcHAtYnVpbGRlci50cyIsICIuLi8uLi9jb3JlL3NyYy9hcHAvYXBwLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9jcmVhdGUtYXBwLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY3JlYXRlLWV2ZW50LWRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbi1pbnRlcm5hbC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24td2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24uZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2UtaW50ZXJuYWwuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2UuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uY2Utd2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvYm9keS5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvaW5kZXguZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGFyYW1zL3JlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGFyYW1zL3BhcmFtLmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BhcmFtcy9yZXNwb25zZS5kZW9yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL3BpcGVsaW5lL3VzZS1ndWFyZHMuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvcGlwZWxpbmUvdXNlLWludGVyY2VwdG9ycy5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtcGlwZXMuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvY3JlYXRlLXJwYy1kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ycGMvb24tcmVxdWVzdC5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9ycGMvb24td2Vidmlldy1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2NyZWF0ZS10aW1lci5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy90aW1lcnMvY3Jvbi5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy90aW1lcnMvZXZlcnktdGljay5kZWNvcmF0b3IudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy90aW1lcnMvaW50ZXJ2YWwuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvdGltZXJzL3RpbWVvdXQuZGVjb3JhdG9yLnRzIiwgIi4uLy4uL2NvcmUvc3JjL2RlY29yYXRvcnMvYXBwbHktZGVjb3JhdG9yLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvZGVjb3JhdG9ycy9jcmVhdGUtcGFyYW0udXRpbC50cyIsICIuLi8uLi9jb3JlL3NyYy9kZWNvcmF0b3JzL2ZvcndhcmQtcmVmLnV0aWwudHMiLCAiLi4vLi4vY29yZS9zcmMvc2VydmljZXMvdGltZXIuc2VydmljZS50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vY3JvbmVyQDguMS4yL25vZGVfbW9kdWxlcy9jcm9uZXIvZGlzdC9jcm9uZXIubWluLmpzIiwgIi4uLy4uL2NvcmUvc3JjL2FwcC9zZXJ2aWNlcy9iYXNlLWV2ZW50LnNlcnZpY2UudHMiLCAiLi4vLi4vY29yZS9zcmMvYXBwL3NlcnZpY2VzL2Jhc2UtcnBjLnNlcnZpY2UudHMiLCAiLi4vc3JjL3BsdWdpbnMvcGxheWVyLXByb3RvdHlwZS5wbHVnaW4udHMiLCAiLi4vLi4vY29yZS9zcmMvcGlwZXMvZGVmYXVsdC12YWx1ZS5waXBlLnRzIiwgIi4uL3NyYy9wbHVnaW5zL3JwYy5wbHVnaW4udHMiLCAiLi4vc3JjL3BsdWdpbnMvc2VydmljZS1iaW5kZXIucGx1Z2luLnRzIiwgIi4uL3NyYy9zZXJ2aWNlcy9zZXJ2ZXItZXZlbnQuc2VydmljZS50cyIsICIuLi9zcmMvY29uc3RhbnRzL2ludGVybmFsLWV2ZW50cy5jb25zdHMudHMiLCAiLi4vc3JjL3NlcnZpY2VzL3NlcnZlci1sb2dnZXIuc2VydmljZS50cyIsICIuLi9zcmMvc2VydmljZXMvc2VydmVyLXJwYy5zZXJ2aWNlLnRzIiwgIi4uL3NyYy9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLXNjcmlwdC1ldmVudC1oYW5kbGVyLnRzIiwgIi4uL3NyYy9tdWx0aXBsYXllci9yYWdlbXAvcmFnZW1wLWV2ZW50LWVtbWl0ZXIudHMiLCAiLi4vc3JjL211bHRpcGxheWVyL3JhZ2VtcC9yYWdlbXAtbXVsdGlwbGF5ZXIuc2VydmljZS50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9lcnJvcnMvdXNlLWZpbHRlcnMuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9pbnRlcm5hbC9pbmRleC50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24tcGxheWVyLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb24td2Vidmlldy5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL2RlY29yYXRvcnMvZXZlbnRzL29uLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ldmVudHMvb25jZS1wbGF5ZXIuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbmNlLXdlYnZpZXcuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL2V2ZW50cy9vbmNlLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9wYXJhbXMvcGxheWVyLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtZ3VhcmRzLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9waXBlbGluZS91c2UtaW50ZXJjZXB0b3JzLmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ycGMvb24tcGxheWVyLXJlcXVlc3QuZGVjb3JhdG9yLnRzIiwgIi4uL3NyYy9kZWNvcmF0b3JzL3JwYy9vbi1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvZGVjb3JhdG9ycy9ycGMvb24td2Vidmlldy1yZXF1ZXN0LmRlY29yYXRvci50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvdGhyb3R0bGVyLmNvbnN0YW50cy50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvZGVjb3JhdG9ycy9za2lwLXRocm90dGxlLmRlY29yYXRvci50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvZGVjb3JhdG9ycy90aHJvdHRsZS5kZWNvcmF0b3IudHMiLCAiLi4vc3JjL21vZHVsZXMvdGhyb3R0bGVyL3Rocm90dGxlci5ndWFyZC50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvc2VydmljZXMvdGhyb3R0bGVyLXN0b3JhZ2Uuc2VydmljZS50cyIsICIuLi9zcmMvbW9kdWxlcy90aHJvdHRsZXIvdGhyb3R0bGVyLm1vZHVsZS50cyIsICIuLi9zcmMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCBjb25zdCBMT0dHRVJfU0VSVklDRSA9ICdMT0dHRVJfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgRVZFTlRfU0VSVklDRSA9ICdFVkVOVF9TRVJWSUNFJztcbmV4cG9ydCBjb25zdCBSUENfU0VSVklDRSA9ICdSUENfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgTU9EVUxFX0NPTlRBSU5FUiA9ICdNT0RVTEVfQ09OVEFJTkVSJztcbmV4cG9ydCBjb25zdCBSRUZMRUNUT1JfU0VSVklDRSA9ICdSRUZMRUNUT1JfU0VSVklDRSc7XG5leHBvcnQgY29uc3QgVElNRVJfU0VSVklDRSA9ICdUSU1FUl9TRVJWSUNFJztcbiIsICJleHBvcnQgZW51bSBFcnJvck1lc3NhZ2Uge1xuICAgIFRvb01hbnlSZXF1ZXN0cyA9ICdUb28gbWFueSByZXF1ZXN0cy4nLFxuXG4gICAgLy8gRXZlbnRzXG4gICAgRXZlbnROYW1lTXVzdEJlU3RyaW5nID0gJ1RoZSBldmVudCBuYW1lIG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBFdmVudE5hbWVNdXN0QmVVbmlxdWUgPSAnVGhlIGV2ZW50IG5hbWUgbXVzdCBiZSB1bmlxdWUuJyxcbiAgICBFdmVudE5vdEFsbG93ZWRJbkNsaWVudCA9ICdUaGUgZXZlbnQgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNsaWVudCBlbnZpcm9ubWVudC4nLFxuICAgIEV2ZW50Tm90QWxsb3dlZEluU2VydmVyID0gJ1RoZSBldmVudCBpcyBub3QgYWxsb3dlZCBpbiB0aGUgc2VydmVyIGVudmlyb25tZW50LicsXG4gICAgSW52YWxpZEV2ZW50VHlwZSA9ICdJbnZhbGlkIGV2ZW50IHR5cGUuJyxcbiAgICBJbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUgPSAnVGhlIG5hbWUgb2YgdGhlIGludGVybmFsIGV2ZW50IGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkUmV0dXJuSW5FdmVudCA9ICdDYW5ub3QgcmV0dXJuIGEgdmFsdWUgZnJvbSBhbiBldmVudC4nLFxuXG4gICAgLy8gUlBDXG4gICAgUlBDTmFtZU11c3RCZVN0cmluZyA9ICdUaGUgUlBDIG5hbWUgbXVzdCBiZSBhIHN0cmluZy4nLFxuICAgIFJQQ05hbWVNdXN0QmVVbmlxdWUgPSAnVGhlIFJQQyBuYW1lIG11c3QgYmUgdW5pcXVlLicsXG4gICAgUlBDTm90QWxsb3dlZEluQ2xpZW50ID0gJ1RoZSBSUEMgaXMgbm90IGFsbG93ZWQgaW4gdGhlIGNsaWVudCBlbnZpcm9ubWVudC4nLFxuICAgIFJQQ05vdEFsbG93ZWRJblNlcnZlciA9ICdUaGUgUlBDIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQuJyxcbiAgICBJbnZhbGlkUlBDVHlwZSA9ICdJbnZhbGlkIFJQQyB0eXBlLicsXG4gICAgUlBDSGFuZGxlckFscmVhZHlFeGlzdHMgPSAnVGhlIFJQQyBoYW5kbGVyIGFscmVhZHkgZXhpc3RzLiBQbGVhc2UgcHJvdmlkZSBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgUlBDLicsXG4gICAgUlBDUmVzcG9uc2VBbHJlYWR5U2VudCA9ICdUaGUgUlBDIHJlc3BvbnNlIGhhcyBhbHJlYWR5IGJlZW4gc2VudC4nLFxuXG4gICAgLy8gRXJyb3IgZmlsdGVyc1xuICAgIEludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24gPSAnSW52YWxpZCBlcnJvciBmaWx0ZXIuIEVycm9yIGZpbHRlcnMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhIGNhdGNoIG1ldGhvZC4nLFxuICAgIEVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlciA9ICdUaGUgZXJyb3IgYWxyZWFkeSBwb2ludHMgdG8gYSBmaWx0ZXIuJyxcbiAgICBFeGNlcHRpb25IYW5kbGluZ0NvbmZsaWN0ID0gJ1RoZSBzYW1lIGV4Y2VwdGlvbiBjYW4gb25seSBiZSBjYXVnaHQgb25jZS4nLFxuICAgIEF0TGVhc3RPbmVGaWx0ZXJSZXF1aXJlZCA9ICdBdCBsZWFzdCBvbmUgZXJyb3IgZmlsdGVyIG11c3QgYmUgcHJvdmlkZWQuJyxcbiAgICBEdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkID0gJ0R1cGxpY2F0ZSBlcnJvciBmaWx0ZXIgZm91bmQuIEVuc3VyZSB0aGF0IHRoZSBzYW1lIGZpbHRlciBpcyBub3QgYXBwbGllZCBtb3JlIHRoYW4gb25jZS4nLFxuXG4gICAgLy8gV2ViVmlld1xuICAgIFdlYlZpZXdOb3RGb3VuZCA9ICdUaGUgV2ViVmlldyB3aXRoIHRoZSBzcGVjaWZpZWQgaWQgZG9lcyBub3QgZXhpc3QuJyxcbiAgICBXZWJWaWV3SWRNdXN0QmVTdHJpbmdPck51bWJlciA9ICdUaGUgV2ViVmlldyBpZCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bWJlci4nLFxuXG4gICAgLy8gR3VhcmRcbiAgICBJbnZhbGlkR3VhcmREZWZpbml0aW9uID0gJ0ludmFsaWQgZ3VhcmQuIEd1YXJkcyBtdXN0IGJlIGEgY2xhc3MgcmVmZXJlbmNlIG9yIGFuIG9iamVjdCB3aXRoIGEgY2FuQWN0aXZhdGUgbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZUd1YXJkUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGd1YXJkIG11c3QgYmUgcHJvdmlkZWQuJyxcblxuICAgIC8vIEludGVyY2VwdG9yXG4gICAgSW52YWxpZEludGVyY2VwdG9yRGVmaW5pdGlvbiA9ICdJbnZhbGlkIGludGVyY2VwdG9yLiBJbnRlcmNlcHRvcnMgbXVzdCBiZSBhIGNsYXNzIHJlZmVyZW5jZSBvciBhbiBvYmplY3Qgd2l0aCBhbiBpbnRlcmNlcHQgbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZUludGVyY2VwdG9yUmVxdWlyZWQgPSAnQXQgbGVhc3Qgb25lIGludGVyY2VwdG9yIG11c3QgYmUgcHJvdmlkZWQuJyxcbiAgICBJbnZhbGlkSW50ZXJjZXB0b3JSZXR1cm5WYWx1ZSA9ICdUaGUgaW50ZXJjZXB0b3IgbXVzdCByZXR1cm4gYSBmdW5jdGlvbi4nLFxuXG4gICAgLy8gUGlwZVxuICAgIEludmFsaWRQaXBlRGVmaW5pdGlvbiA9ICdJbnZhbGlkIHBpcGUuIFBpcGVzIG11c3QgYmUgYSBjbGFzcyByZWZlcmVuY2Ugb3IgYW4gb2JqZWN0IHdpdGggYSB0cmFuc2Zvcm0gbWV0aG9kLicsXG4gICAgQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCA9ICdBdCBsZWFzdCBvbmUgcGlwZSBtdXN0IGJlIHByb3ZpZGVkLicsXG5cbiAgICAvLyBBcHAgbG9hZGluZ1xuICAgIEFwcEFscmVhZHlMb2FkZWQgPSAnQXBwIGlzIGFscmVhZHkgbG9hZGVkLiBQbGVhc2UgY2FsbCB0aGUgc3RvcCBtZXRob2QgYmVmb3JlIGNhbGxpbmcgdGhlIHN0YXJ0IG1ldGhvZC4nLFxuICAgIEFwcE5vdExvYWRlZCA9ICdBcHAgaXMgbm90IGxvYWRlZC4gUGxlYXNlIGNhbGwgdGhlIHN0YXJ0IG1ldGhvZCBiZWZvcmUgY2FsbGluZyB0aGUgc3RvcCBtZXRob2QuJyxcblxuICAgIC8vIERlY29yYXRvcnNcbiAgICBJbnZhbGlkSW5qZWN0aW9uVG9rZW5TcGVjaWZpZWQgPSAnVGhlIHNwZWNpZmllZCBpbmplY3Rpb24gdG9rZW4gaXMgaW52YWxpZC4nLFxuICAgIEluamVjdGlvblRva2VuTm90Rm91bmQgPSAnVGhlIGluamVjdGlvbiB0b2tlbiBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICBQYXJhbUtleU11c3RCZVN0cmluZyA9ICdUaGUgcGFyYW0ga2V5IG11c3QgYmUgYSBzdHJpbmcuJyxcbiAgICBJbmRleEtleU11c3RCZU51bWJlciA9ICdUaGUgaW5kZXgga2V5IG11c3QgYmUgYSBudW1iZXIuJyxcbiAgICBEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSA9ICdUaGUgc2FtZSBkZWNvcmF0b3IgY2FuIG9ubHkgYmUgdXNlZCBvbmNlIGluIHRoZSBzYW1lIGNsYXNzLicsXG4gICAgSW52YWxpZENvbnRyb2xsZXJPcHRpb25zID0gJ0ludmFsaWQgY29udHJvbGxlciBvcHRpb25zIGZvdW5kLicsXG4gICAgSW52YWxpZEluamVjdGFibGVPcHRpb25zID0gJ0ludmFsaWQgaW5qZWN0YWJsZSBvcHRpb25zIGZvdW5kLicsXG4gICAgSW52YWxpZE1vZHVsZU9wdGlvbnMgPSAnSW52YWxpZCBtb2R1bGUgb3B0aW9ucyBmb3VuZC4nLFxuICAgIE11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCA9ICdDYW5ub3QgYXBwbHkgbXVsdGlwbGUgZGVjb3JhdG9ycyB0byB0aGUgc2FtZSBwYXJhbWV0ZXIuJyxcblxuICAgIC8vIEludGVybmFsIEFwcFxuICAgIENpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkID0gJ0NpcmN1bGFyIGRlcGVuZGVuY3kgZGV0ZWN0ZWQuJyxcbiAgICBJbnZhbGlkTW9kdWxlRGVmaW5pdGlvbiA9ICdUaGUgbW9kdWxlIGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkRXhwb3J0RGVmaW5pdGlvbiA9ICdUaGUgZXhwb3J0IGlzIGludmFsaWQuJyxcbiAgICBJbnZhbGlkUHJvdmlkZXJEZWZpbml0aW9uID0gJ1RoZSBwcm92aWRlciBpcyBpbnZhbGlkLicsXG4gICAgSW52YWxpZFBhcmFtZXRlckRlY29yYXRvclVzYWdlID0gJ0VhY2ggcGFyYW1ldGVyIG11c3QgaGF2ZSB0aGVpciBpdHMgb3duIGRlY29yYXRvci4nLFxuICAgIFJlc3BvbnNlRGVjb3JhdG9yTm90QWxsb3dlZE9uRXZlbnRzID0gJ1RoZSBAUmVzcG9uc2UoKSBkZWNvcmF0b3IgaXMgbm90IGFsbG93ZWQgb24gZXZlbnRzLicsXG4gICAgUGxheWVyRGVjb3JhdG9yTm90QWxsb3dlZE9uQ2xpZW50RXZlbnRzID0gJ1RoZSBAUGxheWVyKCkgZGVjb3JhdG9yIGlzIG5vdCBhbGxvd2VkIG9uIGNsaWVudCBldmVudHMuJyxcblxuICAgIC8vIFRpbWVyc1xuICAgIFRpbWVyTmFtZU11c3RCZVN0cmluZyA9ICdUaGUgdGltZXIgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLicsXG59XG4iLCAiZXhwb3J0IGVudW0gSW5qZWN0YWJsZVNjb3BlIHtcbiAgICBSZXF1ZXN0ID0gJ3JlcXVlc3QnLFxuICAgIFRyYW5zaWVudCA9ICd0cmFuc2llbnQnLFxuICAgIFNpbmdsZXRvbiA9ICdzaW5nbGV0b24nLFxufVxuIiwgImV4cG9ydCBlbnVtIFJQQ1Jlc3VsdFN0YXR1cyB7XG4gICAgU3VjY2VzcyA9IDEsXG4gICAgVGltZW91dCA9IDIsXG4gICAgSGFuZGxlck5vdEZvdW5kID0gMyxcbiAgICBVbmtub3duID0gNCxcbiAgICBDYW5jZWxsZWRCeUd1YXJkID0gNSxcbiAgICBJbnZhbGlkR3VhcmRSZXR1cm4gPSA2LFxuICAgIFRvb01hbnlSZXF1ZXN0cyA9IDcsXG4gICAgUGxheWVyRGlzY29ubmVjdGVkID0gOCxcbiAgICBQbGF5ZXJOb3RGb3VuZCA9IDksXG59XG4iLCAidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSk9Pl9fZGVmUHJvcCh0YXJnZXQsIFwibmFtZVwiLCB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbmV4cG9ydCB7IF9fbmFtZSB9OyAvLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV3b2dJQ0oyWlhKemFXOXVJam9nTXl3S0lDQWljMjkxY21ObGN5STZJRnRkTEFvZ0lDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNklGdGRMQW9nSUNKdFlYQndhVzVuY3lJNklDSWlMQW9nSUNKdVlXMWxjeUk2SUZ0ZENuMEtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklpSjkiLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHRUeXBlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVxdWVzdEJhc2UgfSBmcm9tICcuL21hbmdvLXJlcXVlc3QtYmFzZSc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVzcG9uc2VCYXNlIH0gZnJvbSAnLi9tYW5nby1yZXNwb25zZS1iYXNlJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEV4ZWN1dGlvbkNvbnRleHRCYXNlPFxuICAgIFRSZXF1ZXN0IGV4dGVuZHMgTWFuZ29SZXF1ZXN0QmFzZSA9IE1hbmdvUmVxdWVzdEJhc2UsXG4gICAgVFJlc3BvbnNlIGV4dGVuZHMgTWFuZ29SZXNwb25zZUJhc2UgPSBNYW5nb1Jlc3BvbnNlQmFzZSxcbj4gaW1wbGVtZW50cyBFeGVjdXRpb25Db250ZXh0PFRSZXF1ZXN0LCBUUmVzcG9uc2U+XG57XG4gICAgcHVibGljICR0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZTtcbiAgICBwdWJsaWMgJGNsYXNzUmVmOiBOZXdhYmxlO1xuICAgIHB1YmxpYyAkaGFuZGxlcjogRnVuY3Rpb247XG4gICAgcHVibGljICRyZXF1ZXN0OiBUUmVxdWVzdDtcbiAgICBwdWJsaWMgJHJlc3BvbnNlPzogVFJlc3BvbnNlO1xuICAgIHB1YmxpYyAkbmFtZTogc3RyaW5nO1xuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kY2xhc3NSZWY7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYW5kbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kaGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcXVlc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyZXF1ZXN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVzcG9uc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyZXNwb25zZSE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kbmFtZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUmVxdWVzdCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTWFuZ29SZXF1ZXN0QmFzZTxURGF0YSA9IHVua25vd24+IGltcGxlbWVudHMgTWFuZ29SZXF1ZXN0IHtcbiAgICBwdWJsaWMgJGJvZHk6IFREYXRhO1xuICAgIHB1YmxpYyAkcGxheWVyPzogUGxheWVyTXA7XG5cbiAgICBwdWJsaWMgZ2V0IGJvZHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRib2R5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGxheWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kcGxheWVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXJTZXJ2aWNlLCBSUENFcnJvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBNYW5nb1Jlc3BvbnNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNYW5nb1Jlc3BvbnNlQmFzZSBpbXBsZW1lbnRzIE1hbmdvUmVzcG9uc2Uge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgcHVibGljICRzZW5kTGlzdGVuZXJzOiBTZXQ8KGRhdGE6IHVua25vd24pID0+IHZvaWQ+ID0gbmV3IFNldCgpO1xuICAgIHB1YmxpYyAkZXJyb3JMaXN0ZW5lcnM6IFNldDwoZXJyb3I6IFJQQ0Vycm9yKSA9PiB2b2lkPiA9IG5ldyBTZXQoKTtcbiAgICBwdWJsaWMgJGlzU2VudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIHNlbmQ8VERhdGEgPSB1bmtub3duPihkYXRhPzogVERhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuJGlzU2VudCkge1xuICAgICAgICAgICAgdGhpcy4kbG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyB0aGUgUlBDIHJlc3BvbnNlLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENSZXNwb25zZUFscmVhZHlTZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJHNlbmRMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKGRhdGEpKTtcbiAgICAgICAgdGhpcy4kaXNTZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXJyb3I8VERldGFpbHMgPSB1bmtub3duPihtZXNzYWdlOiBzdHJpbmcsIGRldGFpbHM/OiBURGV0YWlscykge1xuICAgICAgICBpZiAodGhpcy4kaXNTZW50KSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzZW5kaW5nIHRoZSBSUEMgcmVzcG9uc2UuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ1Jlc3BvbnNlQWxyZWFkeVNlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJGVycm9yTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcih7IG1lc3NhZ2UsIGRldGFpbHMgfSkpO1xuICAgICAgICB0aGlzLiRpc1NlbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyAkb25TZW5kKGxpc3RlbmVyOiAoZGF0YTogdW5rbm93bikgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLiRzZW5kTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgcHVibGljICRvbkVycm9yKGxpc3RlbmVyOiAoZXJyb3I6IFJQQ0Vycm9yKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuJGVycm9yTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImV4cG9ydCBjbGFzcyBUcmVlTm9kZTxUPiB7XG4gICAgcHVibGljIHZhbHVlOiBUO1xuICAgIHB1YmxpYyBjaGlsZHJlbjogVHJlZU5vZGU8VD5bXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkQ2hpbGQoY2hpbGQ6IFRyZWVOb2RlPFQ+KSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUNoaWxkKGNoaWxkOiBUcmVlTm9kZTxUPikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hpbGRyZW4uaW5kZXhPZihjaGlsZCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyZWU8VD4ge1xuICAgIHB1YmxpYyByb290OiBUcmVlTm9kZTxUPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgICAgICB0aGlzLnJvb3QgPSBuZXcgVHJlZU5vZGU8VD4odmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmF2ZXJzZShjYWxsYmFjazogKG5vZGU6IFRyZWVOb2RlPFQ+KSA9PiB2b2lkKSB7XG4gICAgICAgIGZ1bmN0aW9uIHRyYXZlcnNlTm9kZShub2RlOiBUcmVlTm9kZTxUPikge1xuICAgICAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2godHJhdmVyc2VOb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYXZlcnNlTm9kZSh0aGlzLnJvb3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhc3luY1RyYXZlcnNlKGNhbGxiYWNrOiAobm9kZTogVHJlZU5vZGU8VD4pID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gdHJhdmVyc2VOb2RlKG5vZGU6IFRyZWVOb2RlPFQ+KSB7XG4gICAgICAgICAgICBhd2FpdCBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKG5vZGUuY2hpbGRyZW4ubWFwKHRyYXZlcnNlTm9kZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdHJhdmVyc2VOb2RlKHRoaXMucm9vdCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgICAgZnVuY3Rpb24gdHJhdmVyc2VOb2RlKG5vZGU6IFRyZWVOb2RlPFQ+LCBkZXB0aDogbnVtYmVyKSB7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKGAkeyctJy5yZXBlYXQoZGVwdGggKiAyKX0ke25vZGUudmFsdWV9YCk7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB0cmF2ZXJzZU5vZGUoY2hpbGQsIGRlcHRoICsgMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhdmVyc2VOb2RlKHRoaXMucm9vdCwgMCk7XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIiwgImV4cG9ydCBlbnVtIEFwcEVudmlyb21lbnQge1xuICAgIENsaWVudCxcbiAgICBTZXJ2ZXIsXG59XG4iLCAiZXhwb3J0IGVudW0gQ29yZU1ldGFkYXRhS2V5IHtcbiAgICAvLyBHZW5lcmFsXG4gICAgSW5qZWN0YWJsZSA9ICdtYW5nbzppbmplY3RhYmxlJyxcbiAgICBJbmplY3QgPSAnbWFuZ286aW5qZWN0JyxcbiAgICBNb2R1bGUgPSAnbWFuZ286bW9kdWxlJyxcbiAgICBHbG9iYWxNb2R1bGUgPSAnbWFuZ286Z2xvYmFsLW1vZHVsZScsXG4gICAgQ29udHJvbGxlciA9ICdtYW5nbzpjb250cm9sbGVyLW9wdGlvbnMnLFxuICAgIC8vIEV2ZW50cyAmIFJQQ1xuICAgIENvbnRyb2xsZXJFdmVudHMgPSAnbWFuZ286Y29udHJvbGxlci1ldmVudHMnLFxuICAgIENvbnRyb2xsZXJSUENzID0gJ21hbmdvOmNvbnRyb2xsZXItcnBjcycsXG4gICAgQ29udHJvbGxlclBhcmFtcyA9ICdtYW5nbzpjb250cm9sbGVyLXJwYy1wYXJhbXMnLFxuICAgIC8vIFBpcGVsaW5lXG4gICAgR3VhcmRzID0gJ21hbmdvOmd1YXJkcycsXG4gICAgSW50ZXJjZXB0b3JzID0gJ21hbmdvOmludGVyY2VwdG9ycycsXG4gICAgUGlwZXMgPSAnbWFuZ286cGlwZXMnLFxuICAgIC8vIEVycm9yXG4gICAgQ2F0Y2ggPSAnbWFuZ286Y2F0Y2gnLFxuICAgIEVycm9yRmlsdGVycyA9ICdtYW5nbzplcnJvci1maWx0ZXJzJyxcbiAgICAvL1xuICAgIFRpbWVycyA9ICdtYW5nbzp0aW1lcnMnLFxufVxuIiwgImV4cG9ydCBlbnVtIEV2ZW50RGVzdGluYXRpb24ge1xuICAgIFNlcnZlciA9ICdzZXJ2ZXInLFxuICAgIENsaWVudCA9ICdjbGllbnQnLFxuICAgIFdlYlZpZXcgPSAnd2VidmlldycsXG59XG4iLCAiZXhwb3J0IGVudW0gRXhlY3V0aW9uQ29udGV4dFR5cGUge1xuICAgIEV2ZW50ID0gJ2V2ZW50JyxcbiAgICBSUEMgPSAncnBjJyxcbn1cbiIsICJleHBvcnQgZW51bSBNZXRob2RQYXJhbVR5cGUge1xuICAgIEJvZHkgPSAnYm9keScsXG4gICAgQ3VzdG9tID0gJ2N1c3RvbScsXG4gICAgUGFyYW0gPSAncGFyYW0nLFxuICAgIFBsYXllciA9ICdwbGF5ZXInLFxuICAgIFJlcXVlc3QgPSAncmVxdWVzdCcsXG4gICAgUmVzcG9uc2UgPSAncmVzcG9uc2UnLFxuICAgIEluZGV4ID0gJ2luZGV4Jyxcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21JZCgpIHtcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KSArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSk7XG59XG4iLCAiZXhwb3J0IGNvbnN0IGlzVW5kZWZpbmVkID0gKG9iajogYW55KTogb2JqIGlzIHVuZGVmaW5lZCA9PiB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJztcbmV4cG9ydCBjb25zdCBpc09iamVjdCA9IChmbjogYW55KTogZm4gaXMgb2JqZWN0ID0+ICFpc05pbChmbikgJiYgdHlwZW9mIGZuID09PSAnb2JqZWN0JztcbmV4cG9ydCBjb25zdCBpc0Z1bmN0aW9uID0gKHZhbDogYW55KTogdmFsIGlzIEZ1bmN0aW9uID0+IHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbic7XG5leHBvcnQgY29uc3QgaXNTdHJpbmcgPSAodmFsOiBhbnkpOiB2YWwgaXMgc3RyaW5nID0+IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xuZXhwb3J0IGNvbnN0IGlzTnVtYmVyID0gKHZhbDogYW55KTogdmFsIGlzIG51bWJlciA9PiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbmV4cG9ydCBjb25zdCBpc0NvbnN0cnVjdG9yID0gKHZhbDogYW55KTogYm9vbGVhbiA9PiB2YWwgPT09ICdjb25zdHJ1Y3Rvcic7XG5leHBvcnQgY29uc3QgaXNOaWwgPSAodmFsOiBhbnkpOiB2YWwgaXMgbnVsbCB8IHVuZGVmaW5lZCA9PiBpc1VuZGVmaW5lZCh2YWwpIHx8IHZhbCA9PT0gbnVsbDtcbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKGFycmF5OiBhbnkpOiBib29sZWFuID0+ICEoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID4gMCk7XG5leHBvcnQgY29uc3QgaXNTeW1ib2wgPSAodmFsOiBhbnkpOiB2YWwgaXMgc3ltYm9sID0+IHR5cGVvZiB2YWwgPT09ICdzeW1ib2wnO1xuZXhwb3J0IGNvbnN0IGlzQXN5bmNGdW5jdGlvbiA9ICh2YWw6IGFueSk6IGJvb2xlYW4gPT4gaXNGdW5jdGlvbih2YWwpICYmIHZhbC5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXN5bmNGdW5jdGlvbic7XG5leHBvcnQgY29uc3QgaXNCb29sZWFuID0gKHZhbDogYW55KTogdmFsIGlzIGJvb2xlYW4gPT4gdHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nO1xuZXhwb3J0IGNvbnN0IGlzUHJvbWlzZSA9IDxUID0gYW55Pih2YWw6IGFueSk6IHZhbCBpcyBQcm9taXNlPFQ+ID0+IHZhbCBpbnN0YW5jZW9mIFByb21pc2U7XG4iLCAiaW1wb3J0IHR5cGUgeyBDb250cm9sbGVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNOaWwsIGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuY29uc3QgZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zOiBDb250cm9sbGVyT3B0aW9ucyA9IHsgcHJlZml4OiAnJyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyhvcHRpb25zPzogQ29udHJvbGxlck9wdGlvbnMpIHtcbiAgICBpZiAoaXNOaWwob3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiBkZWZhdWx0Q29udHJvbGxlck9wdGlvbnMgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWU6IGRlZmF1bHRDb250cm9sbGVyT3B0aW9ucywgZXJyb3I6ICdDb250cm9sbGVyIG9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnIH07XG4gICAgfVxuXG4gICAgaWYgKCEoJ3ByZWZpeCcgaW4gb3B0aW9ucykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiB7IC4uLmRlZmF1bHRDb250cm9sbGVyT3B0aW9ucywgLi4ub3B0aW9ucyB9IH07XG4gICAgfVxuICAgIGlmICgncHJlZml4JyBpbiBvcHRpb25zICYmICFpc1N0cmluZyhvcHRpb25zLnByZWZpeCkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiBkZWZhdWx0Q29udHJvbGxlck9wdGlvbnMsIGVycm9yOiAnQ29udHJvbGxlciBwcmVmaXggbXVzdCBiZSBhIHN0cmluZycgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWU6IHsgLi4uZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zLCAuLi5vcHRpb25zIH0gfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFcnJvckZpbHRlcjxFRiBleHRlbmRzIEVycm9yRmlsdGVyID0gRXJyb3JGaWx0ZXI+KHZhbHVlOiBFRiB8IE5ld2FibGU8RUY+KSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0Vycm9yIGZpbHRlciBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpICYmICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFcnJvciBmaWx0ZXIgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlLnByb3RvdHlwZS5jYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlLCBlcnJvcjogJ0Vycm9yIGZpbHRlciBtdXN0IGhhdmUgYSBjYXRjaCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNGdW5jdGlvbigoPEVycm9yRmlsdGVyPnZhbHVlKS5jYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlLCBlcnJvcjogJ0Vycm9yIGZpbHRlciBtdXN0IGhhdmUgYSBjYXRjaCBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBpcGUodmFsdWU6IFBpcGUgfCBOZXdhYmxlPFBpcGU+KSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1BpcGUgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUGlwZSBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUucHJvdG90eXBlLnRyYW5zZm9ybSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQaXBlIG11c3QgaGF2ZSBhIHRyYW5zZm9ybSBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNGdW5jdGlvbigoPFBpcGU+dmFsdWUpLnRyYW5zZm9ybSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQaXBlIG11c3QgaGF2ZSBhIHRyYW5zZm9ybSBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzTnVtYmVyLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuL3BpcGUudmFsaWRhdGUnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFdmVudFBhcmFtZXRlcih2YWx1ZTogTWV0aG9kUGFyYW1ldGVyKSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSB8fCAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICAgIH1cbiAgICBpZiAoJ2tleScgaW4gdmFsdWUgJiYgIWlzTmlsKHZhbHVlLmtleSkgJiYgIWlzU3RyaW5nKHZhbHVlLmtleSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIga2V5IG11c3QgYmUgYSBzdHJpbmcnIH07XG4gICAgfVxuICAgIGlmICghKCdpbmRleCcgaW4gdmFsdWUpIHx8ICFpc051bWJlcih2YWx1ZS5pbmRleCkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgaW5kZXggaXMgcmVxdWlyZWQnIH07XG4gICAgfVxuICAgIC8vIEJvZHlQYXJhbWV0ZXIgfCBQbGF5ZXJQYXJhbWV0ZXJcbiAgICBpZiAoXG4gICAgICAgICh2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuQm9keSB8fCB2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuUGxheWVyKSAmJlxuICAgICAgICAnZGF0YScgaW4gdmFsdWUgJiZcbiAgICAgICAgIWlzTmlsKHZhbHVlLmRhdGEpICYmXG4gICAgICAgICFpc1N0cmluZyh2YWx1ZS5kYXRhKVxuICAgICkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBkYXRhIG11c3QgYmUgYSBzdHJpbmcnIH07XG4gICAgfVxuICAgIC8vIEN1c3RvbVBhcmFtZXRlclxuICAgIGlmICh2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuQ3VzdG9tICYmICEoJ2ZhY3RvcnknIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBmYWN0b3J5IGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLkN1c3RvbSAmJiAnZmFjdG9yeScgaW4gdmFsdWUgJiYgIWlzRnVuY3Rpb24odmFsdWUuZmFjdG9yeSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuICAgIC8vICBQYXJhbVBhcmFtZXRlclxuICAgIGlmICgodmFsdWUudHlwZSA9PT0gTWV0aG9kUGFyYW1UeXBlLlBhcmFtIHx8IHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5JbmRleCkgJiYgISgnZGF0YScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGRhdGEgaXMgcmVxdWlyZWQnIH07XG4gICAgfVxuICAgIGlmICh2YWx1ZS50eXBlID09PSBNZXRob2RQYXJhbVR5cGUuUGFyYW0gJiYgJ2RhdGEnIGluIHZhbHVlICYmICFpc1N0cmluZyh2YWx1ZS5kYXRhKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IHBhcmFtZXRlciBkYXRhIG11c3QgYmUgYSBzdHJpbmcnIH07XG4gICAgfVxuICAgIC8vIEluZGV4UGFyYW1ldGVyXG4gICAgaWYgKHZhbHVlLnR5cGUgPT09IE1ldGhvZFBhcmFtVHlwZS5JbmRleCAmJiAnZGF0YScgaW4gdmFsdWUgJiYgIWlzTnVtYmVyKHZhbHVlLmRhdGEpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgcGFyYW1ldGVyIGRhdGEgbXVzdCBiZSBhIG51bWJlcicgfTtcbiAgICB9XG4gICAgLy8gQm9keVBhcmFtZXRlciB8IEN1c3RvbVBhcmFtZXRlciB8IFBhcmFtUGFyYW1ldGVyIHwgUGxheWVyUGFyYW1ldGVyIHwgSW5kZXhQYXJhbWV0ZXI7XG4gICAgaWYgKFxuICAgICAgICB2YWx1ZS50eXBlICE9PSBNZXRob2RQYXJhbVR5cGUuUmVxdWVzdCAmJlxuICAgICAgICB2YWx1ZS50eXBlICE9PSBNZXRob2RQYXJhbVR5cGUuUmVzcG9uc2UgJiZcbiAgICAgICAgJ3BpcGVzJyBpbiB2YWx1ZSAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZS5waXBlcylcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBwYXJhbWV0ZXIgcGlwZXMgbXVzdCBiZSBhbiBhcnJheScgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnR5cGUgIT09IE1ldGhvZFBhcmFtVHlwZS5SZXF1ZXN0ICYmIHZhbHVlLnR5cGUgIT09IE1ldGhvZFBhcmFtVHlwZS5SZXNwb25zZSAmJiAhKCdwaXBlcycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLnBpcGVzID0gW107XG4gICAgfVxuICAgIGlmICh2YWx1ZS50eXBlICE9PSBNZXRob2RQYXJhbVR5cGUuUmVxdWVzdCAmJiB2YWx1ZS50eXBlICE9PSBNZXRob2RQYXJhbVR5cGUuUmVzcG9uc2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHZhbHVlLnBpcGVzISkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFdmVudE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vYXBwJztcbmltcG9ydCB7IGlzTmlsLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUV2ZW50UGFyYW1ldGVyIH0gZnJvbSAnLi9ldmVudC1wYXJhbWV0ZXIudmFsaWRhdGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVFdmVudE1ldGFkYXRhKHZhbHVlOiBFdmVudE1ldGFkYXRhKSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSB8fCAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgbXVzdCBiZSBhbiBvYmplY3QnIH07XG4gICAgfVxuXG4gICAgLy8gVHlwZVxuICAgIGlmICghKCd0eXBlJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSB0eXBlIGlzIHJlcXVpcmVkJyB9O1xuICAgIH1cbiAgICBpZiAoIWlzU3RyaW5nKHZhbHVlLnR5cGUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgdHlwZSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cbiAgICAvLyBOYW1lXG4gICAgaWYgKCEoJ25hbWUnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIG5hbWUgaXMgcmVxdWlyZWQnIH07XG4gICAgfVxuICAgIGlmICghaXNTdHJpbmcodmFsdWUubmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFdmVudCBtZXRhZGF0YSBuYW1lIG11c3QgYmUgYSBzdHJpbmcnIH07XG4gICAgfVxuICAgIC8vIE1ldGhvZFxuICAgIGlmICghKCdtZXRob2QnIGluIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIG1ldGhvZCBpcyByZXF1aXJlZCcgfTtcbiAgICB9XG4gICAgaWYgKCFpc1N0cmluZyh2YWx1ZS5tZXRob2QpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXZlbnQgbWV0YWRhdGEgbWV0aG9kIG11c3QgYmUgYSBzdHJpbmcnIH07XG4gICAgfVxuICAgIC8vIFBhcmFtc1xuICAgIGlmICghKCdwYXJhbXMnIGluIHZhbHVlKSkge1xuICAgICAgICAoPEV2ZW50TWV0YWRhdGE+dmFsdWUpLnBhcmFtcyA9IFtdO1xuICAgIH1cbiAgICBpZiAoJ3BhcmFtcycgaW4gdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUucGFyYW1zKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0V2ZW50IG1ldGFkYXRhIHBhcmFtcyBtdXN0IGJlIGFuIGFycmF5JyB9O1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIHZhbHVlLnBhcmFtcykge1xuICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVFdmVudFBhcmFtZXRlcihwYXJhbSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgR3VhcmQgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUd1YXJkPEcgZXh0ZW5kcyBHdWFyZCA9IEd1YXJkPih2YWx1ZTogRyB8IE5ld2FibGU8Rz4pIHtcbiAgICBpZiAoaXNOaWwodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSAmJiAhaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnR3VhcmQgbXVzdCBiZSBhIGNsYXNzIG9yIGEgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlLnByb3RvdHlwZS5jYW5BY3RpdmF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdHdWFyZCBtdXN0IGhhdmUgYSBjYW5BY3RpdmF0ZSBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAhaXNGdW5jdGlvbigoPEd1YXJkPnZhbHVlKS5jYW5BY3RpdmF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdHdWFyZCBtdXN0IGhhdmUgYSBjYW5BY3RpdmF0ZSBtZXRob2QnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBJbnRlcmNlcHRvciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW50ZXJjZXB0b3I8SSBleHRlbmRzIEludGVyY2VwdG9yID0gSW50ZXJjZXB0b3I+KHZhbHVlOiBJIHwgTmV3YWJsZTxJPikge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdJbnRlcmNlcHRvciBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUpICYmICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdJbnRlcmNlcHRvciBtdXN0IGJlIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUucHJvdG90eXBlLmludGVyY2VwdCkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdJbnRlcmNlcHRvciBtdXN0IGhhdmUgYW4gaW50ZXJjZXB0IG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QodmFsdWUpICYmICFpc0Z1bmN0aW9uKCg8SW50ZXJjZXB0b3I+dmFsdWUpLmludGVyY2VwdCkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdJbnRlcmNlcHRvciBtdXN0IGhhdmUgYW4gaW50ZXJjZXB0IG1ldGhvZCcgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc1N5bWJvbCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlSW5qZWN0aW9uVG9rZW4odmFsdWU6IEluamVjdGlvblRva2VuKSB7XG4gICAgY29uc3QgdmFsaWQgPSBpc1N0cmluZyh2YWx1ZSkgfHwgaXNTeW1ib2wodmFsdWUpIHx8IGlzRnVuY3Rpb24odmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKTtcbiAgICByZXR1cm4gdmFsaWQgPyB7IHZhbGlkLCB2YWx1ZSB9IDogeyB2YWxpZCwgdmFsdWUsIGVycm9yOiAnSW5qZWN0aW9uIHRva2VuIG11c3QgYmUgYSBzdHJpbmcsIHN5bWJvbCwgY2xhc3MsIG9yIG9iamVjdCcgfTtcbn1cbiIsICJpbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHtcbiAgICBDbGFzc1Byb3ZpZGVyLFxuICAgIEV4aXN0aW5nUHJvdmlkZXIsXG4gICAgRmFjdG9yeVByb3ZpZGVyLFxuICAgIE9wdGlvbmFsRmFjdG9yeURlcGVuZGVuY3ksXG4gICAgUHJvdmlkZXIsXG4gICAgVmFsdWVQcm92aWRlcixcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vaW5qZWN0aW9uLXRva2VuLnZhbGlkYXRlJztcbmltcG9ydCB7IEluamVjdGFibGVTY29wZSB9IGZyb20gJy4uLy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUHJvdmlkZXIodmFsdWU6IFByb3ZpZGVyKSB7XG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkgJiYgIWlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBiZSBhbiBvYmplY3Qgb3IgZnVuY3Rpb24nIH07XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBpZiAoISgncHJvdmlkZScgaW4gdmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIG11c3QgaGF2ZSBhIHByb3ZpZGUgcHJvcGVydHknIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVJbmplY3Rpb25Ub2tlbih2YWx1ZS5wcm92aWRlKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgndXNlQ2xhc3MnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVDbGFzc1Byb3ZpZGVyKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlVmFsdWUnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVWYWx1ZVByb3ZpZGVyKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlRmFjdG9yeScgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZUZhY3RvcnlQcm92aWRlcih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZUV4aXN0aW5nJyBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlRXhpc3RpbmdQcm92aWRlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdXNlQ2xhc3MsIHVzZVZhbHVlLCB1c2VGYWN0b3J5LCBvciB1c2VFeGlzdGluZyBwcm9wZXJ0eScgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlQ2xhc3NQcm92aWRlcih2YWx1ZTogQ2xhc3NQcm92aWRlcikge1xuICAgIGlmICghKCd1c2VDbGFzcycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdXNlQ2xhc3MgcHJvcGVydHknIH07XG4gICAgfVxuXG4gICAgaWYgKCEoJ3Njb3BlJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuc2NvcGUgPSBJbmplY3RhYmxlU2NvcGUuU2luZ2xldG9uO1xuICAgIH1cblxuICAgIGlmICgnc2NvcGUnIGluIHZhbHVlICYmICFPYmplY3QudmFsdWVzPGAke0luamVjdGFibGVTY29wZX1gPihJbmplY3RhYmxlU2NvcGUpLmluY2x1ZGVzKHZhbHVlLnNjb3BlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ1Byb3ZpZGVyIHNjb3BlIG11c3QgYmUgYSB2YWxpZCBpbmplY3RhYmxlIHNjb3BlJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVWYWx1ZVByb3ZpZGVyKHZhbHVlOiBWYWx1ZVByb3ZpZGVyKSB7XG4gICAgaWYgKCEoJ3VzZVZhbHVlJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGhhdmUgYSB1c2VWYWx1ZSBwcm9wZXJ0eScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVPcHRpb25hbEZhY3RvcnlEZXBlbmRlbmN5KHZhbHVlOiBPcHRpb25hbEZhY3RvcnlEZXBlbmRlbmN5KSB7XG4gICAgaWYgKCEoJ29wdGlvbmFsJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGhhdmUgYW4gb3B0aW9uYWwgcHJvcGVydHknIH07XG4gICAgfVxuXG4gICAgaWYgKCEoJ3Rva2VuJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGhhdmUgYSB0b2tlbiBwcm9wZXJ0eScgfTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVJbmplY3Rpb25Ub2tlbih2YWx1ZS50b2tlbik7XG4gICAgaWYgKCF2YWxpZCkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvciB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGYWN0b3J5UHJvdmlkZXIodmFsdWU6IEZhY3RvcnlQcm92aWRlcikge1xuICAgIGlmICghKCd1c2VGYWN0b3J5JyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBtdXN0IGhhdmUgYSB1c2VGYWN0b3J5IHByb3BlcnR5JyB9O1xuICAgIH1cbiAgICBpZiAoIWlzRnVuY3Rpb24odmFsdWUudXNlRmFjdG9yeSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciB1c2VGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbicgfTtcbiAgICB9XG5cbiAgICBpZiAoISgnaW5qZWN0JyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuaW5qZWN0ID0gW107XG4gICAgfVxuICAgIGlmICgnaW5qZWN0JyBpbiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS5pbmplY3QpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgaW5qZWN0IG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfVxuICAgIGlmICgnaW5qZWN0JyBpbiB2YWx1ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlLmluamVjdCkge1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHRva2VuKSAmJiAnb3B0aW9uYWwnIGluIHRva2VuICYmICd0b2tlbicgaW4gdG9rZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHZhbGlkLCBlcnJvciB9ID0gdmFsaWRhdGVPcHRpb25hbEZhY3RvcnlEZXBlbmRlbmN5KHRva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZUluamVjdGlvblRva2VuKHRva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJ3Njb3BlJyBpbiB2YWx1ZSAmJiAhT2JqZWN0LnZhbHVlczxgJHtJbmplY3RhYmxlU2NvcGV9YD4oSW5qZWN0YWJsZVNjb3BlKS5pbmNsdWRlcyh2YWx1ZS5zY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlciBzY29wZSBtdXN0IGJlIGEgdmFsaWQgaW5qZWN0YWJsZSBzY29wZScgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRXhpc3RpbmdQcm92aWRlcih2YWx1ZTogRXhpc3RpbmdQcm92aWRlcikge1xuICAgIGlmICghKCd1c2VFeGlzdGluZycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnUHJvdmlkZXIgbXVzdCBoYXZlIGEgdXNlRXhpc3RpbmcgcHJvcGVydHknIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBEeW5hbWljTW9kdWxlLCBNb2R1bGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVByb3ZpZGVyIH0gZnJvbSAnLi9wcm92aWRlci52YWxpZGF0ZSc7XG5pbXBvcnQgeyBpc0Jvb2xlYW4sIGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCwgaXNQcm9taXNlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25Ub2tlbiwgTnVsbGFibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vaW5qZWN0aW9uLXRva2VuLnZhbGlkYXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTW9kdWxlT3B0aW9ucyhcbiAgICB2YWx1ZT86IE1vZHVsZU9wdGlvbnMgfCBEeW5hbWljTW9kdWxlLFxuICAgIGlzRHluYW1pYyA9IGZhbHNlLFxuKTogeyB2YWxpZDogYm9vbGVhbjsgdmFsdWU6IE1vZHVsZU9wdGlvbnMgfCBEeW5hbWljTW9kdWxlOyBlcnJvcj86IE51bGxhYmxlPHN0cmluZz4gfSB7XG4gICAgaWYgKGlzTmlsKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXJzOiBbXSxcbiAgICAgICAgICAgIGltcG9ydHM6IFtdLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXSxcbiAgICAgICAgICAgIGV4cG9ydHM6IFtdLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmICghaXNOaWwodmFsdWUpICYmICFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdNb2R1bGUgb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcgfTtcbiAgICB9XG5cbiAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICAgIGlmICghKCdtb2R1bGUnIGluIHZhbHVlKSB8fCAhaXNGdW5jdGlvbih2YWx1ZS5tb2R1bGUpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0R5bmFtaWMgbW9kdWxlIG11c3QgaGF2ZSBhIG1vZHVsZSBmdW5jdGlvbicgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKCdnbG9iYWwnIGluIHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUuZ2xvYmFsID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoISgnZ2xvYmFsJyBpbiB2YWx1ZSkgJiYgIWlzQm9vbGVhbih2YWx1ZS5nbG9iYWwpKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0R5bmFtaWMgbW9kdWxlIG11c3QgaGF2ZSBhIGdsb2JhbCBwcm9wZXJ0eScgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgnaW1wb3J0cycgaW4gdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUuaW1wb3J0cykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdJbXBvcnRzIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfSBlbHNlIGlmICghKCdpbXBvcnRzJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuaW1wb3J0cyA9IFtdO1xuICAgIH1cblxuICAgIGlmICgnY29udHJvbGxlcnMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLmNvbnRyb2xsZXJzKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlLCBlcnJvcjogJ0NvbnRyb2xsZXJzIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfSBlbHNlIGlmICghKCdjb250cm9sbGVycycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmNvbnRyb2xsZXJzID0gW107XG4gICAgfVxuXG4gICAgaWYgKCdwcm92aWRlcnMnIGluIHZhbHVlICYmICFBcnJheS5pc0FycmF5KHZhbHVlLnByb3ZpZGVycykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdQcm92aWRlcnMgcHJvcGVydHkgbXVzdCBiZSBhbiBhcnJheScgfTtcbiAgICB9IGVsc2UgaWYgKCEoJ3Byb3ZpZGVycycgaW4gdmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLnByb3ZpZGVycyA9IFtdO1xuICAgIH1cblxuICAgIGlmICgnZXhwb3J0cycgaW4gdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUuZXhwb3J0cykpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdFeHBvcnRzIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXknIH07XG4gICAgfSBlbHNlIGlmICghKCdleHBvcnRzJyBpbiB2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZXhwb3J0cyA9IFtdO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgaW1wb3J0ZWQgb2YgdmFsdWUuaW1wb3J0cykge1xuICAgICAgICBpZiAoIWlzRnVuY3Rpb24oaW1wb3J0ZWQpICYmICFpc09iamVjdChpbXBvcnRlZCkgJiYgIWlzUHJvbWlzZShpbXBvcnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnSW1wb3J0IG11c3QgYmUgYSBmdW5jdGlvbiwgb2JqZWN0LCBvciBwcm9taXNlJyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT2JqZWN0KGltcG9ydGVkKSAmJiAhaXNQcm9taXNlKGltcG9ydGVkKSkge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgZXJyb3IgfSA9IHZhbGlkYXRlTW9kdWxlT3B0aW9ucyg8RHluYW1pY01vZHVsZT5pbXBvcnRlZCwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIHZhbHVlLmNvbnRyb2xsZXJzKSB7XG4gICAgICAgIGlmICghaXNGdW5jdGlvbihjb250cm9sbGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3I6ICdDb250cm9sbGVyIG11c3QgYmUgYSBmdW5jdGlvbicgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgcHJvdmlkZXIgb2YgdmFsdWUucHJvdmlkZXJzKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZVByb3ZpZGVyKHByb3ZpZGVyKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCB2YWx1ZSwgZXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZXhwb3J0SXRlbSBvZiB2YWx1ZS5leHBvcnRzKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIGVycm9yIH0gPSB2YWxpZGF0ZUluamVjdGlvblRva2VuKDxJbmplY3Rpb25Ub2tlbj5leHBvcnRJdGVtKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNPYmplY3QoZXhwb3J0SXRlbSkgJiZcbiAgICAgICAgICAgICgndXNlQ2xhc3MnIGluIGV4cG9ydEl0ZW0gfHwgJ3VzZUZhY3RvcnknIGluIGV4cG9ydEl0ZW0gfHwgJ3VzZVZhbHVlJyBpbiBleHBvcnRJdGVtIHx8ICd1c2VFeGlzdGluZycgaW4gZXhwb3J0SXRlbSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkIH0gPSB2YWxpZGF0ZVByb3ZpZGVyKGV4cG9ydEl0ZW0pO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgdmFsdWUsIGVycm9yOiAnRXhwb3J0IG11c3QgYmUgYSBwcm92aWRlciBvYmplY3QnIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgdmFsdWUgfTtcbn1cbiIsICJpbXBvcnQgeyBpc05pbCwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZVNjb3BlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBJbmplY3RhYmxlT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5jb25zdCBkZWZhdWx0SW5qZWN0YWJsZU9wdGlvbnM6IEluamVjdGFibGVPcHRpb25zID0geyBzY29wZTogSW5qZWN0YWJsZVNjb3BlLlNpbmdsZXRvbiB9O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbmplY3RhYmxlTWV0YWRhdGEodmFsdWU/OiBJbmplY3RhYmxlT3B0aW9ucykge1xuICAgIGlmIChpc05pbCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIHZhbHVlOiBkZWZhdWx0SW5qZWN0YWJsZU9wdGlvbnMgfTtcbiAgICB9XG5cbiAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlOiBkZWZhdWx0SW5qZWN0YWJsZU9wdGlvbnMsIGVycm9yOiAnSW5qZWN0YWJsZSBvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JyB9O1xuICAgIH1cblxuICAgIGlmICghKCdzY29wZScgaW4gdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZTogeyAuLi5kZWZhdWx0SW5qZWN0YWJsZU9wdGlvbnMsIC4uLnZhbHVlIH0gfTtcbiAgICB9XG4gICAgaWYgKCdzY29wZScgaW4gdmFsdWUgJiYgIWlzU3RyaW5nKHZhbHVlLnNjb3BlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlOiBkZWZhdWx0SW5qZWN0YWJsZU9wdGlvbnMsIGVycm9yOiAnSW5qZWN0YWJsZSBzY29wZSBtdXN0IGJlIGEgc3RyaW5nJyB9O1xuICAgIH1cblxuICAgIGlmICgnc2NvcGUnIGluIHZhbHVlICYmICFPYmplY3QudmFsdWVzPGAke0luamVjdGFibGVTY29wZX1gPihJbmplY3RhYmxlU2NvcGUpLmluY2x1ZGVzKHZhbHVlLnNjb3BlKSkge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIHZhbHVlOiBkZWZhdWx0SW5qZWN0YWJsZU9wdGlvbnMsIGVycm9yOiAnSW52YWxpZCBpbmplY3RhYmxlIHNjb3BlJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCB2YWx1ZSB9O1xufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUlBDUmVzdWx0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjb25zdCBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSID0gJ0lOVEVSTkFMX0FQUF9DT05UQUlORVInO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9BUFBfQ09OVEFJTkVSID0gJ0dMT0JBTF9BUFBfQ09OVEFJTkVSJztcbmV4cG9ydCBjb25zdCBBUFBfRU5WSVJPTUVOVCA9ICdBUFBfRU5WSVJPTUVOVCc7XG5cbmV4cG9ydCBjb25zdCBHTE9CQUxfR1VBUkRTID0gJ0dMT0JBTF9HVUFSRFMnO1xuZXhwb3J0IGNvbnN0IEdMT0JBTF9JTlRFUkNFUFRPUlMgPSAnR0xPQkFMX0lOVEVSQ0VQVE9SUyc7XG5leHBvcnQgY29uc3QgR0xPQkFMX1BJUEVTID0gJ0dMT0JBTF9QSVBFUyc7XG5leHBvcnQgY29uc3QgR0xPQkFMX0VSUk9SX0ZJTFRFUlMgPSAnR0xPQkFMX0VSUk9SX0ZJTFRFUlMnO1xuXG5leHBvcnQgY29uc3QgUExVR0lOUyA9ICdQTFVHSU5TJztcblxuZXhwb3J0IGNvbnN0IEVOQUJMRV9TSFVURE9XTl9IT09LUyA9ICdFTkFCTEVfU0hVVERPV05fSE9PS1MnO1xuZXhwb3J0IGNvbnN0IENPTlRBSU5FUl9PUFRJT05TID0gJ0NPTlRBSU5FUl9PUFRJT05TJztcbmV4cG9ydCBjb25zdCBMT0dfRVJST1JfU1RBQ0tUUkFDRSA9ICdMT0dfRVJST1JfU1RBQ0tUUkFDRSc7XG5cbmV4cG9ydCBjb25zdCBNQU5HT19MT0dfUFJFRklYID0gJ/Cfpa0nO1xuXG5leHBvcnQgY29uc3QgTUFOR09fUkVRVUVTVF9GQUNUT1JZID0gJ01BTkdPX1JFUVVFU1RfRkFDVE9SWSc7XG5leHBvcnQgY29uc3QgTUFOR09fUkVTUE9OU0VfRkFDVE9SWSA9ICdNQU5HT19SRVNQT05TRV9GQUNUT1JZJztcbmV4cG9ydCBjb25zdCBFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZID0gJ0VYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlknO1xuXG5leHBvcnQgY29uc3QgTVVMVElQTEFZRVJfU0VSVklDRSA9ICdNVUxUSVBMQVlFUl9TRVJWSUNFJztcblxuZXhwb3J0IGNvbnN0IFJQQ19SRVNVTFRfVElNRU9VVDogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdSUEMgY2FsbCB0aW1lZCBvdXQuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlRpbWVvdXQsXG59O1xuXG5leHBvcnQgY29uc3QgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORDogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdSUEMgaGFuZGxlciBub3QgZm91bmQuJyB9LFxuICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLkhhbmRsZXJOb3RGb3VuZCxcbn07XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX1VOS05PV046IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnVW5rbm93biBlcnJvci4nIH0sXG4gICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuVW5rbm93bixcbn07XG5cbmV4cG9ydCBjb25zdCBSUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQ6IFJQQ1Jlc3VsdCA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBlcnJvcjogeyBtZXNzYWdlOiAnUGxheWVyIGRpc2Nvbm5lY3RlZC4nIH0sXG4gICAgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuUGxheWVyRGlzY29ubmVjdGVkLFxufTtcblxuZXhwb3J0IGNvbnN0IFJQQ19SRVNVTFRfUExBWUVSX05PVF9GT1VORDogUlBDUmVzdWx0ID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGVycm9yOiB7IG1lc3NhZ2U6ICdQbGF5ZXIgbm90IGZvdW5kLicgfSxcbiAgICBzdGF0dXM6IFJQQ1Jlc3VsdFN0YXR1cy5QbGF5ZXJOb3RGb3VuZCxcbn07XG4iLCAiaW1wb3J0IHsgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vZW51bXMnO1xuXG5leHBvcnQgY2xhc3MgTWFuZ29FcnJvcjxURGV0YWlscyA9IHVua25vd24+IGV4dGVuZHMgRXJyb3Ige1xuICAgIHB1YmxpYyBzdGF0dXM6IG51bWJlciA9IFJQQ1Jlc3VsdFN0YXR1cy5Vbmtub3duO1xuICAgIHB1YmxpYyBkZXRhaWxzOiBURGV0YWlscyB8IHVuZGVmaW5lZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1cz86IG51bWJlciwgZGV0YWlscz86IFREZXRhaWxzKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cyA/PyBSUENSZXN1bHRTdGF0dXMuVW5rbm93bjtcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgTWFuZ29FcnJvciB9IGZyb20gJy4vbWFuZ28uZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgR3VhcmRDYW5jZWxFcnJvciBleHRlbmRzIE1hbmdvRXJyb3Ige1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoJ1Byb2Nlc3MgY2FuY2VsbGVkIGJ5IHRoZSBndWFyZC4nLCBSUENSZXN1bHRTdGF0dXMuQ2FuY2VsbGVkQnlHdWFyZCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IE1hbmdvRXJyb3IgfSBmcm9tICcuL21hbmdvLmVycm9yJztcblxuZXhwb3J0IGNsYXNzIEd1YXJkSW52YWxpZFJldHVybkVycm9yIGV4dGVuZHMgTWFuZ29FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignR3VhcmQgcmV0dXJuZWQgYW4gaW52YWxpZCB2YWx1ZS4gRXhwZWN0ZWQgYm9vbGVhbi4nLCBSUENSZXN1bHRTdGF0dXMuSW52YWxpZEd1YXJkUmV0dXJuKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgTWFuZ29FcnJvciB9IGZyb20gJy4vbWFuZ28uZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgVG9vTWFueVJlcXVlc3RzIGV4dGVuZHMgTWFuZ29FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSAnVG9vIG1hbnkgcmVxdWVzdHMuJykge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCBSUENSZXN1bHRTdGF0dXMuVG9vTWFueVJlcXVlc3RzKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgUlBDUmVzdWx0U3RhdHVzIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgTWFuZ29FcnJvciB9IGZyb20gJy4vbWFuZ28uZXJyb3InO1xuXG5leHBvcnQgY2xhc3MgVW5rbm93bkVycm9yIGV4dGVuZHMgTWFuZ29FcnJvciB7XG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignVW5rbm93biBlcnJvci4nLCBSUENSZXN1bHRTdGF0dXMuVW5rbm93bik7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IsIEludGVybmFsRXZlbnRTZXJ2aWNlLCBNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEFQUF9FTlZJUk9NRU5ULCBFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZLCBNQU5HT19SRVFVRVNUX0ZBQ1RPUlksIE1VTFRJUExBWUVSX1NFUlZJQ0UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgUGlwZWxpbmVIYW5kbGVyIH0gZnJvbSAnLi9waXBlbGluZS5oYW5kbGVyJztcbmltcG9ydCB0eXBlIHsgRXZlbnRNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRVZFTlRfU0VSVklDRSwgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IEFwcEVudmlyb21lbnQsIEV4ZWN1dGlvbkNvbnRleHRUeXBlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgRXhlY3V0aW9uQ29udGV4dEJhc2UsIE1hbmdvUmVzcG9uc2VCYXNlLCB0eXBlIE1hbmdvUmVxdWVzdEJhc2UgfSBmcm9tICcuLi9waXBlbGluZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IENhbGxIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlLCBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc0FzeW5jRnVuY3Rpb24gfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBDb250cm9sbGVyRmxvd0hhbmRsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXItZmxvdy5oYW5kbGVyJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbnRyb2xsZXJFdmVudEhhbmRsZXIge1xuICAgIEBpbmplY3QoQVBQX0VOVklST01FTlQpIHByaXZhdGUgcmVhZG9ubHkgYXBwRW52OiBBcHBFbnZpcm9tZW50O1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBsYXllclNlcnZpY2U6IE11bHRpcGxheWVyU2VydmljZTtcbiAgICBAaW5qZWN0KEVWRU5UX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRTZXJ2aWNlOiBJbnRlcm5hbEV2ZW50U2VydmljZTtcbiAgICBAaW5qZWN0KENvbnRyb2xsZXJGbG93SGFuZGxlcikgcHJpdmF0ZSByZWFkb25seSBjb250cm9sbGVyRmxvd0hhbmRsZXI6IENvbnRyb2xsZXJGbG93SGFuZGxlcjtcbiAgICBAaW5qZWN0KFBpcGVsaW5lSGFuZGxlcikgcHJpdmF0ZSByZWFkb25seSBwaXBlbGluZUhhbmRsZXI6IFBpcGVsaW5lSGFuZGxlcjtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgQGluamVjdChNQU5HT19SRVFVRVNUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlTWFuZ29SZXF1ZXN0OiAoYm9keTogdW5rbm93biwgcGxheWVyPzogUGxheWVyTXApID0+IE1hbmdvUmVxdWVzdEJhc2U7XG4gICAgQGluamVjdChFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZKSBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQ6IChcbiAgICAgICAgdHlwZTogRXhlY3V0aW9uQ29udGV4dFR5cGUsXG4gICAgICAgIGNsYXNzUmVmOiBOZXdhYmxlLFxuICAgICAgICBoYW5kbGVyOiBGdW5jdGlvbixcbiAgICAgICAgcmVxdWVzdDogTWFuZ29SZXF1ZXN0QmFzZSxcbiAgICAgICAgcmVzcG9uc2U/OiBNYW5nb1Jlc3BvbnNlQmFzZSxcbiAgICAgICAgbmFtZT86IHN0cmluZyxcbiAgICApID0+IEV4ZWN1dGlvbkNvbnRleHRCYXNlO1xuXG4gICAgcHVibGljIHJlZ2lzdGVyRXZlbnQoXG4gICAgICAgIGd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10sXG4gICAgICAgIGludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10sXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIG1hcHBlZEVycm9yRmlsdGVyczogW2FueSB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdLFxuICAgICAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICBldmVudDogRXZlbnRNZXRhZGF0YSxcbiAgICApIHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdvbicgfHwgZXZlbnQudHlwZSA9PT0gJ29uY2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2VbZXZlbnQudHlwZV0oZXZlbnQubmFtZSwgYXN5bmMgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUV2ZW50KGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBldmVudCwgYm9keSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnb25JbnRlcm5hbCcgfHwgZXZlbnQudHlwZSA9PT0gJ29uY2VJbnRlcm5hbCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZVtgJCR7ZXZlbnQudHlwZX1gXShldmVudC5uYW1lLCBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGxheWVyLCBib2R5IH0gPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5wYXJzZUludGVybmFsQXJnczxQbGF5ZXJNcD4oLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVFdmVudChndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgZXZlbnQsIGJvZHksIHBsYXllcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnb25QbGF5ZXInIHx8IGV2ZW50LnR5cGUgPT09ICdvbmNlUGxheWVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlW2V2ZW50LnR5cGVdKGV2ZW50Lm5hbWUsIGFzeW5jIChwbGF5ZXIsIGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUV2ZW50KGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBldmVudCwgYm9keSwgcGxheWVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdvblNlcnZlcicgfHwgZXZlbnQudHlwZSA9PT0gJ29uY2VTZXJ2ZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2VbZXZlbnQudHlwZV0oZXZlbnQubmFtZSwgYXN5bmMgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUV2ZW50KGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBldmVudCwgYm9keSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnb25XZWJWaWV3JyB8fCBldmVudC50eXBlID09PSAnb25jZVdlYlZpZXcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2VbZXZlbnQudHlwZV0oZXZlbnQud2ViVmlld0lkISwgZXZlbnQubmFtZSwgYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIgPyBhcmdzWzFdIDogYXJnc1swXTtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGF5ZXIgPSB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIgPyA8UGxheWVyTXA+YXJnc1swXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUV2ZW50KGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBldmVudCwgYm9keSwgcGxheWVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVnaXN0ZXIgZXZlbnQuJyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEV2ZW50VHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVFdmVudChcbiAgICAgICAgZ3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSxcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgbWFwcGVkRXJyb3JGaWx0ZXJzOiBbYW55IHwgJ01BTkdPX0FOWV9FUlJPUicsIE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXJdW10sXG4gICAgICAgIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4gICAgICAgIGV2ZW50OiBFdmVudE1ldGFkYXRhLFxuICAgICAgICBib2R5OiB1bmtub3duLFxuICAgICAgICBwbGF5ZXI/OiBQbGF5ZXJNcCxcbiAgICApIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuY3JlYXRlTWFuZ29SZXF1ZXN0KGJvZHksIHBsYXllcik7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSB0aGlzLmNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQoXG4gICAgICAgICAgICBFeGVjdXRpb25Db250ZXh0VHlwZS5FdmVudCxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYsXG4gICAgICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLmNsYXNzUmVmLnByb3RvdHlwZVtldmVudC5tZXRob2RdLFxuICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGV2ZW50Lm5hbWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoR3VhcmRzKGV4ZWN1dGlvbkNvbnRleHQsIGd1YXJkcywgY29udHJvbGxlci5vd25lci5jb250YWluZXIpO1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGF3YWl0IHRoaXMuY29udHJvbGxlckZsb3dIYW5kbGVyLmNyZWF0ZUFyZ3MoY29udHJvbGxlciwgZXhlY3V0aW9uQ29udGV4dCwgZXZlbnQsIHBpcGVzLCBwbGF5ZXIpO1xuICAgICAgICAgICAgY29uc3QgY29udHJvbGxlck1ldGhvZCA9IGNvbnRyb2xsZXIuaW5zdGFuY2VbZXZlbnQubWV0aG9kXSE7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGUgPSBpc0FzeW5jRnVuY3Rpb24oY29udHJvbGxlck1ldGhvZClcbiAgICAgICAgICAgICAgICA/ICgpOiB1bmtub3duID0+IGNvbnRyb2xsZXIuaW5zdGFuY2VbZXZlbnQubWV0aG9kXSEuYXBwbHkoY29udHJvbGxlci5pbnN0YW5jZSwgYXJncylcbiAgICAgICAgICAgICAgICA6ICgpOiBQcm9taXNlPHVua25vd24+ID0+IGNvbnRyb2xsZXIuaW5zdGFuY2VbZXZlbnQubWV0aG9kXSEuYXBwbHkoY29udHJvbGxlci5pbnN0YW5jZSwgYXJncyk7XG4gICAgICAgICAgICBjb25zdCBjYWxsSGFuZGxlcjogQ2FsbEhhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlLFxuICAgICAgICAgICAgICAgIHJldHVybjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZXR1cm4gYSB2YWx1ZSBmcm9tIGFuIGV2ZW50LicpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRSZXR1cm5JbkV2ZW50KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5waXBlbGluZUhhbmRsZXIuZ29UaHJvdWdoSW50ZXJjZXB0b3JzKGV4ZWN1dGlvbkNvbnRleHQsIGludGVyY2VwdG9ycywgY29udHJvbGxlci5vd25lci5jb250YWluZXIsIGNhbGxIYW5kbGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgY2FsbEhhbmRsZXIuaGFuZGxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvckdyb3VwID0gbWFwcGVkRXJyb3JGaWx0ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICAgKFtlcnJvclR5cGVdKSA9PlxuICAgICAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihlcnJvclR5cGUpICYmIGVycm9yIGluc3RhbmNlb2YgZXJyb3JUeXBlKSB8fCBlcnJvclR5cGUgPT09ICdNQU5HT19BTllfRVJST1InIHx8IGVycm9yID09PSBlcnJvclR5cGUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGlzTmlsKGVycm9yR3JvdXApKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGlzRnVuY3Rpb24oZXJyb3JHcm91cFsxXSlcbiAgICAgICAgICAgICAgICA/IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldChlcnJvckdyb3VwWzFdKVxuICAgICAgICAgICAgICAgIDogaXNPYmplY3QoZXJyb3JHcm91cFsxXSkgJiYgaXNGdW5jdGlvbihlcnJvckdyb3VwWzFdWydjYXRjaCddKVxuICAgICAgICAgICAgICAgICAgPyBlcnJvckdyb3VwWzFdXG4gICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNOaWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ28gdGhyb3VnaCBlcnJvciBmaWx0ZXJzLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEVycm9yRmlsdGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoaW5zdGFuY2UuY2F0Y2guY2FsbChpbnN0YW5jZSwgZXJyb3IsIGV4ZWN1dGlvbkNvbnRleHQpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBHdWFyZCwgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEd1YXJkQ2FuY2VsRXJyb3IsIEd1YXJkSW52YWxpZFJldHVybkVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dEJhc2UgfSBmcm9tICcuLi9waXBlbGluZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEFyZ3VtZW50TWV0YWRhdGEsIENhbGxIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlLCBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4uL21vZHVsZSc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQaXBlbGluZUhhbmRsZXIge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICAvLyBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbENvbnRhaW5lcjogQ29udGFpbmVyO1xuXG4gICAgcHVibGljIGFzeW5jIGdvVHJvdWdoR3VhcmRzKGV4ZWN1dGlvbkNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHRCYXNlLCBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLCBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcikge1xuICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIGd1YXJkcykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKGd1YXJkKSA/IGNvbnRhaW5lci5nZXQoZ3VhcmQpIDogaXNPYmplY3QoZ3VhcmQpICYmIGlzRnVuY3Rpb24oZ3VhcmRbJ2NhbkFjdGl2YXRlJ10pID8gZ3VhcmQgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdvIHRocm91Z2ggZ3VhcmRzLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEd1YXJkRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjYW5BY3RpdmF0ZSA9IGF3YWl0IGluc3RhbmNlLmNhbkFjdGl2YXRlLmNhbGwoaW5zdGFuY2UsIGV4ZWN1dGlvbkNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjYW5BY3RpdmF0ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ28gdGhyb3VnaCBndWFyZHMuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEd1YXJkSW52YWxpZFJldHVybkVycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWNhbkFjdGl2YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEd1YXJkQ2FuY2VsRXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnb1Rocm91Z2hJbnRlcmNlcHRvcnMoXG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHRCYXNlLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcixcbiAgICAgICAgY2FsbEhhbmRsZXI6IENhbGxIYW5kbGVyLFxuICAgICkge1xuICAgICAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIGludGVyY2VwdG9ycykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKGludGVyY2VwdG9yKVxuICAgICAgICAgICAgICAgID8gY29udGFpbmVyLmdldChpbnRlcmNlcHRvcilcbiAgICAgICAgICAgICAgICA6IGlzT2JqZWN0KGludGVyY2VwdG9yKSAmJiBpc0Z1bmN0aW9uKGludGVyY2VwdG9yWydpbnRlcmNlcHQnXSlcbiAgICAgICAgICAgICAgICAgID8gaW50ZXJjZXB0b3JcbiAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChpc05pbChpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBnbyB0aHJvdWdoIGludGVyY2VwdG9ycy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcmNlcHRvckRlZmluaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgaW5zdGFuY2UuaW50ZXJjZXB0LmNhbGwoaW5zdGFuY2UsIGV4ZWN1dGlvbkNvbnRleHQsIGNhbGxIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnb1Ryb3VnaFBpcGVzKFxuICAgICAgICB2YWx1ZTogdW5rbm93bixcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgYXJndW1lbnRNZXRhZGF0YTogQXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgY29udGFpbmVyOiBNb2R1bGVDb250YWluZXIsXG4gICAgKSB7XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBpc0Z1bmN0aW9uKHBpcGUpID8gY29udGFpbmVyLmdldChwaXBlKSA6IGlzT2JqZWN0KHBpcGUpID8gcGlwZSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoaXNOaWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ28gdGhyb3VnaCBwaXBlcy4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRQaXBlRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZSA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShpbnN0YW5jZS50cmFuc2Zvcm0uY2FsbChpbnN0YW5jZSwgdmFsdWUsIGFyZ3VtZW50TWV0YWRhdGEpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlIH0gZnJvbSAnLi4vcGlwZWxpbmUnO1xuaW1wb3J0IHR5cGUgeyBFdmVudE1ldGFkYXRhLCBSUENNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQaXBlbGluZUhhbmRsZXIgfSBmcm9tICcuL3BpcGVsaW5lLmhhbmRsZXInO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBBcHBFbnZpcm9tZW50IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlckZsb3dIYW5kbGVyIHtcbiAgICBAaW5qZWN0KEFQUF9FTlZJUk9NRU5UKSBwcml2YXRlIHJlYWRvbmx5IGFwcEVudjogQXBwRW52aXJvbWVudDtcbiAgICBAaW5qZWN0KFBpcGVsaW5lSGFuZGxlcikgcHJpdmF0ZSByZWFkb25seSBwaXBlbGluZUhhbmRsZXI6IFBpcGVsaW5lSGFuZGxlcjtcblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVBcmdzKFxuICAgICAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICBleGVjdXRpb25Db250ZXh0OiBFeGVjdXRpb25Db250ZXh0QmFzZSxcbiAgICAgICAgbWV0YWRhdGE6IFJQQ01ldGFkYXRhIHwgRXZlbnRNZXRhZGF0YSxcbiAgICAgICAgcGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSxcbiAgICAgICAgcGxheWVyPzogUGxheWVyTXAsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIG1ldGFkYXRhLnBhcmFtcy5tYXAoYXN5bmMgKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJndW1lbnRNZXRhZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogcGFyYW0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcGFyYW0uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgbWV0YXR5cGU6IHBhcmFtLm1ldGF0eXBlLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gJ2JvZHknKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEJvZHlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LnJlcXVlc3QuYm9keSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5waXBlcywgLi4uKHBhcmFtPy5waXBlcyA/PyBbXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ3BhcmFtJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBQYXJhbVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAoPFJlY29yZDxzdHJpbmcsIHVua25vd24+PmV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5KVtwYXJhbS5kYXRhXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFsuLi5waXBlcywgLi4uKHBhcmFtPy5waXBlcyA/PyBbXSldLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW0udHlwZSA9PT0gJ2luZGV4Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhlY3V0aW9uQ29udGV4dC5yZXF1ZXN0LmJvZHkpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdC5ib2R5W3BhcmFtLmRhdGFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgWy4uLnBpcGVzLCAuLi4ocGFyYW0/LnBpcGVzID8/IFtdKV0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudE1ldGFkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5vd25lci5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAncmVxdWVzdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGlvbkNvbnRleHQucmVxdWVzdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEN1c3RvbVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hQaXBlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmZhY3RvcnkocGFyYW0uZGF0YSwgZXhlY3V0aW9uQ29udGV4dCksXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtLnR5cGUgPT09ICdwbGF5ZXInICYmIHRoaXMuYXBwRW52ID09PSBBcHBFbnZpcm9tZW50LlNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBQbGF5ZXIgKFNlcnZlcilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGlwZWxpbmVIYW5kbGVyLmdvVHJvdWdoUGlwZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kYXRhID8gcGxheWVyIVs8a2V5b2YgUGxheWVyTXA+cGFyYW0uZGF0YV0gOiBwbGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4ucGlwZXMsIC4uLihwYXJhbT8ucGlwZXMgPz8gW10pXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50TWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBHdWFyZCwgSW50ZXJjZXB0b3IsIEVycm9yRmlsdGVyLCBUaW1lck1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXJNZXRhZGF0YSwgRXZlbnRNZXRhZGF0YSwgTWV0aG9kUGFyYW1ldGVyLCBSUENNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQXBwRW52aXJvbWVudCwgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBMb2dnZXJTZXJ2aWNlLCBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIge1xuICAgIEBpbmplY3QoQVBQX0VOVklST01FTlQpIHByaXZhdGUgcmVhZG9ubHkgYXBwRW52OiBBcHBFbnZpcm9tZW50O1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyByZWFkKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPVxuICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxQaWNrPENvbnRyb2xsZXJNZXRhZGF0YSwgJ3ByZWZpeCc+PihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlciwgY2xhc3NSZWYpID8/XG4gICAgICAgICAgICA8UGljazxDb250cm9sbGVyTWV0YWRhdGEsICdwcmVmaXgnPj57fTtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoY2xhc3NSZWYpO1xuICAgICAgICBjb25zdCBycGNzID0gdGhpcy5nZXRSUENzKGNsYXNzUmVmKTtcbiAgICAgICAgY29uc3QgdGltZXJzID0gdGhpcy5nZXRUaW1lcnMoY2xhc3NSZWYpO1xuXG4gICAgICAgIHJldHVybiA8Q29udHJvbGxlck1ldGFkYXRhPntcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBjbGFzc1JlZixcbiAgICAgICAgICAgIGV2ZW50cyxcbiAgICAgICAgICAgIHJwY3MsXG4gICAgICAgICAgICAuLi50aGlzLmdldFBpcGVsaW5lKGNsYXNzUmVmKSxcbiAgICAgICAgICAgIHRpbWVycyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEV2ZW50cyhjbGFzc1JlZjogTmV3YWJsZSkge1xuICAgICAgICBjb25zdCBldmVudHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPEV2ZW50TWV0YWRhdGFbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJFdmVudHMsIGNsYXNzUmVmLnByb3RvdHlwZSkgPz8gW107XG5cbiAgICAgICAgcmV0dXJuIGV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPEV2ZW50TWV0YWRhdGE+e1xuICAgICAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRNZXRob2RQYXJhbXMoY2xhc3NSZWYsIGV2ZW50KSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldFBpcGVsaW5lKGNsYXNzUmVmLCBldmVudC5tZXRob2QpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSUENzKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IHJwY3MgPSBSZWZsZWN0LmdldE1ldGFkYXRhPFJQQ01ldGFkYXRhW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUlBDcywgY2xhc3NSZWYucHJvdG90eXBlKSA/PyBbXTtcblxuICAgICAgICByZXR1cm4gcnBjcy5tYXAoKHJwYykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIDxSUENNZXRhZGF0YT57XG4gICAgICAgICAgICAgICAgLi4ucnBjLFxuICAgICAgICAgICAgICAgIHBhcmFtczogdGhpcy5nZXRNZXRob2RQYXJhbXMoY2xhc3NSZWYsIHJwYyksXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiwgcnBjLm1ldGhvZCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1ldGhvZFBhcmFtcyhjbGFzc1JlZjogTmV3YWJsZSwgbWV0YWRhdGE6IEV2ZW50TWV0YWRhdGEgfCBSUENNZXRhZGF0YSkge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgY2xhc3NSZWYucHJvdG90eXBlLCBtZXRhZGF0YS5tZXRob2QpID8/IFtdO1xuXG4gICAgICAgIHBhcmFtcy5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG4gICAgICAgIHBhcmFtcy5mb3JFYWNoKChwYXJhbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJhbS5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRQYXJhbWV0ZXJEZWNvcmF0b3JVc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIChtZXRhZGF0YS50eXBlID09PSAnb24nIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvblBsYXllcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uSW50ZXJuYWwnIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvblNlcnZlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uV2ViVmlldycgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2UnIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlUGxheWVyJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25jZUludGVybmFsJyB8fFxuICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YS50eXBlID09PSAnb25jZVNlcnZlcicgfHxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEudHlwZSA9PT0gJ29uY2VXZWJWaWV3JykgJiZcbiAgICAgICAgICAgICAgICBwYXJhbS50eXBlID09PSAncmVzcG9uc2UnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBSZXNwb25zZVxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUmVzcG9uc2VEZWNvcmF0b3JOb3RBbGxvd2VkT25FdmVudHMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbS50eXBlID09PSAncGxheWVyJyAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5DbGllbnQpIHtcbiAgICAgICAgICAgICAgICAvLyBQbGF5ZXIgKENsaWVudCkgLSBOb3QgYWxsb3dlZFxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBjb250cm9sbGVyIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUGxheWVyRGVjb3JhdG9yTm90QWxsb3dlZE9uQ2xpZW50RXZlbnRzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEudHlwZSA9PT0gJ29uUGxheWVyUmVxdWVzdCcgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENOb3RBbGxvd2VkSW5DbGllbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS50eXBlID09PSAnb25TZXJ2ZXJSZXF1ZXN0JyAmJiB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgY29udHJvbGxlciBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ05vdEFsbG93ZWRJblNlcnZlcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChtZXRhZGF0YS50eXBlID09PSAnb25QbGF5ZXInIHx8IG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlUGxheWVyJykgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5vdEFsbG93ZWRJbkNsaWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKChtZXRhZGF0YS50eXBlID09PSAnb25TZXJ2ZXInIHx8IG1ldGFkYXRhLnR5cGUgPT09ICdvbmNlU2VydmVyJykgJiYgdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGNvbnRyb2xsZXIgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5vdEFsbG93ZWRJblNlcnZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQaXBlbGluZSh0YXJnZXQ6IE5ld2FibGUgfCBvYmplY3QsIG1ldGhvZD86IHN0cmluZykge1xuICAgICAgICBjb25zdCBndWFyZHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8R3VhcmQ+W10+KENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3JzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEludGVyY2VwdG9yPltdPihDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG4gICAgICAgIGNvbnN0IHBpcGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPFBpcGU+W10+KENvcmVNZXRhZGF0YUtleS5QaXBlcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuICAgICAgICBjb25zdCBlcnJvckZpbHRlcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8RXJyb3JGaWx0ZXI+W10+KENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICByZXR1cm4geyBndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIGVycm9yRmlsdGVycyB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGltZXJzKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhPFRpbWVyTWV0YWRhdGFbXT4oQ29yZU1ldGFkYXRhS2V5LlRpbWVycywgY2xhc3NSZWYucHJvdG90eXBlKSA/PyBbXTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgSW50ZXJuYWxSUENTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgUlBDX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQVBQX0VOVklST01FTlQsIEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlksIE1BTkdPX1JFUVVFU1RfRkFDVE9SWSwgTUFOR09fUkVTUE9OU0VfRkFDVE9SWSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc0FzeW5jRnVuY3Rpb24sIGlzRnVuY3Rpb24sIGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFBpcGVsaW5lSGFuZGxlciB9IGZyb20gJy4vcGlwZWxpbmUuaGFuZGxlcic7XG5pbXBvcnQgdHlwZSB7IFJQQ01ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBcHBFbnZpcm9tZW50LCBFeGVjdXRpb25Db250ZXh0VHlwZSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlLCB0eXBlIE1hbmdvUmVxdWVzdEJhc2UsIHR5cGUgTWFuZ29SZXNwb25zZUJhc2UgfSBmcm9tICcuLi9waXBlbGluZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IENhbGxIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlLCBQaXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgQ29udHJvbGxlckZsb3dIYW5kbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyLWZsb3cuaGFuZGxlcic7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyUlBDSGFuZGxlciB7XG4gICAgQGluamVjdChBUFBfRU5WSVJPTUVOVCkgcHJpdmF0ZSByZWFkb25seSBhcHBFbnY6IEFwcEVudmlyb21lbnQ7XG4gICAgQGluamVjdChSUENfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBycGNTZXJ2aWNlOiBJbnRlcm5hbFJQQ1NlcnZpY2U7XG4gICAgQGluamVjdChQaXBlbGluZUhhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgcGlwZWxpbmVIYW5kbGVyOiBQaXBlbGluZUhhbmRsZXI7XG4gICAgQGluamVjdChDb250cm9sbGVyRmxvd0hhbmRsZXIpIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbGxlckZsb3dIYW5kbGVyOiBDb250cm9sbGVyRmxvd0hhbmRsZXI7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIEBpbmplY3QoTUFOR09fUkVRVUVTVF9GQUNUT1JZKSBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZU1hbmdvUmVxdWVzdDogKGRhdGE6IHVua25vd24sIHBsYXllcj86IFBsYXllck1wKSA9PiBNYW5nb1JlcXVlc3RCYXNlO1xuICAgIEBpbmplY3QoTUFOR09fUkVTUE9OU0VfRkFDVE9SWSkgcHJpdmF0ZSByZWFkb25seSBjcmVhdGVNYW5nb1Jlc3BvbnNlOiAoKSA9PiBNYW5nb1Jlc3BvbnNlQmFzZTtcbiAgICBAaW5qZWN0KEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkpIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRlRXhlY3V0aW9uQ29udGV4dDogKFxuICAgICAgICB0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZSxcbiAgICAgICAgY2xhc3NSZWY6IE5ld2FibGUsXG4gICAgICAgIGhhbmRsZXI6IEZ1bmN0aW9uLFxuICAgICAgICByZXF1ZXN0OiBNYW5nb1JlcXVlc3RCYXNlLFxuICAgICAgICByZXNwb25zZTogTWFuZ29SZXNwb25zZUJhc2UsXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICApID0+IEV4ZWN1dGlvbkNvbnRleHRCYXNlO1xuXG4gICAgcHVibGljIGFzeW5jIHJlZ2lzdGVyUlBDKFxuICAgICAgICBndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdLFxuICAgICAgICBwaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdLFxuICAgICAgICBtYXBwZWRFcnJvckZpbHRlcnM6IFthbnkgfCAnTUFOR09fQU5ZX0VSUk9SJywgTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcl1bXSxcbiAgICAgICAgY29udHJvbGxlcjogQ29udHJvbGxlcixcbiAgICAgICAgcnBjOiBSUENNZXRhZGF0YSxcbiAgICApIHtcbiAgICAgICAgaWYgKHJwYy50eXBlID09PSAnb25SZXF1ZXN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucnBjU2VydmljZVtycGMudHlwZV0ocnBjLm5hbWUsIGFzeW5jIChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMsIGJvZHkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocnBjLnR5cGUgPT09ICdvblBsYXllclJlcXVlc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNTZXJ2aWNlW3JwYy50eXBlXShycGMubmFtZSwgYXN5bmMgKHBsYXllciwgYm9keSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVJQQyhndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIG1hcHBlZEVycm9yRmlsdGVycywgY29udHJvbGxlciwgcnBjLCBib2R5LCBwbGF5ZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocnBjLnR5cGUgPT09ICdvblNlcnZlclJlcXVlc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNTZXJ2aWNlW3JwYy50eXBlXShycGMubmFtZSwgYXN5bmMgKGJvZHkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVSUEMoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIHJwYywgYm9keSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChycGMudHlwZSA9PT0gJ29uV2ViVmlld1JlcXVlc3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ycGNTZXJ2aWNlW3JwYy50eXBlXShycGMud2ViVmlld0lkISwgcnBjLm5hbWUsIGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyID8gYXJnc1sxXSA6IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgcGxheWVyID0gdGhpcy5hcHBFbnYgPT09IEFwcEVudmlyb21lbnQuU2VydmVyID8gPFBsYXllck1wPmFyZ3NbMF0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMsIGJvZHksIHBsYXllcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlZ2lzdGVyIFJQQy4nKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkUlBDVHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVSUEMoXG4gICAgICAgIGd1YXJkczogKE5ld2FibGU8R3VhcmQ+IHwgR3VhcmQpW10sXG4gICAgICAgIGludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10sXG4gICAgICAgIHBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10sXG4gICAgICAgIG1hcHBlZEVycm9yRmlsdGVyczogW2FueSB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdLFxuICAgICAgICBjb250cm9sbGVyOiBDb250cm9sbGVyLFxuICAgICAgICBycGM6IFJQQ01ldGFkYXRhLFxuICAgICAgICBib2R5OiB1bmtub3duLFxuICAgICAgICBwbGF5ZXI/OiBQbGF5ZXJNcCxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5jcmVhdGVNYW5nb1JlcXVlc3QoXG4gICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICB0aGlzLmFwcEVudiA9PT0gQXBwRW52aXJvbWVudC5TZXJ2ZXIgJiYgKHJwYy50eXBlID09PSAnb25QbGF5ZXJSZXF1ZXN0JyB8fCBycGMudHlwZSA9PT0gJ29uV2ViVmlld1JlcXVlc3QnKVxuICAgICAgICAgICAgICAgICAgICA/IHBsYXllclxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHRoaXMuY3JlYXRlTWFuZ29SZXNwb25zZSgpO1xuICAgICAgICAgICAgcmVzcG9uc2UuJG9uU2VuZCgoZGF0YSkgPT4gcmVzb2x2ZShkYXRhKSk7XG4gICAgICAgICAgICByZXNwb25zZS4kb25FcnJvcigoZXJyb3IpID0+IHJlc29sdmUoZXJyb3IpKTtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGlvbkNvbnRleHQgPSB0aGlzLmNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQoXG4gICAgICAgICAgICAgICAgRXhlY3V0aW9uQ29udGV4dFR5cGUuUlBDLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYsXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5jbGFzc1JlZi5wcm90b3R5cGVbcnBjLm1ldGhvZF0sXG4gICAgICAgICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICAgICAgICBycGMubmFtZSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5waXBlbGluZUhhbmRsZXIuZ29Ucm91Z2hHdWFyZHMoZXhlY3V0aW9uQ29udGV4dCwgZ3VhcmRzLCBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJncyA9IGF3YWl0IHRoaXMuY29udHJvbGxlckZsb3dIYW5kbGVyLmNyZWF0ZUFyZ3MoY29udHJvbGxlciwgZXhlY3V0aW9uQ29udGV4dCwgcnBjLCBwaXBlcywgcGxheWVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0aG9kID0gY29udHJvbGxlci5pbnN0YW5jZVtycGMubWV0aG9kXSE7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gaXNBc3luY0Z1bmN0aW9uKGNvbnRyb2xsZXJNZXRob2QpXG4gICAgICAgICAgICAgICAgICAgID8gKG9wdGlvbnM6IHsgc2VuZDogYm9vbGVhbiB9ID0geyBzZW5kOiB0cnVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udHJvbGxlci5pbnN0YW5jZVtycGMubWV0aG9kXSEuYXBwbHkoY29udHJvbGxlci5pbnN0YW5jZSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnNlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNlbmQocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiBhc3luYyAob3B0aW9uczogeyBzZW5kOiBib29sZWFuIH0gPSB7IHNlbmQ6IHRydWUgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjb250cm9sbGVyLmluc3RhbmNlW3JwYy5tZXRob2RdIS5hcHBseShjb250cm9sbGVyLmluc3RhbmNlLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxsSGFuZGxlcjogQ2FsbEhhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOiAodmFsdWU6IHVua25vd24pID0+IHJlc3BvbnNlLnNlbmQodmFsdWUpLFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5waXBlbGluZUhhbmRsZXIuZ29UaHJvdWdoSW50ZXJjZXB0b3JzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY2FsbEhhbmRsZXIuaGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckdyb3VwID0gbWFwcGVkRXJyb3JGaWx0ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChbZXJyb3JUeXBlXSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGVycm9yVHlwZSkgJiYgZXJyb3IgaW5zdGFuY2VvZiBlcnJvclR5cGUpIHx8IGVycm9yVHlwZSA9PT0gJ01BTkdPX0FOWV9FUlJPUicgfHwgZXJyb3IgPT09IGVycm9yVHlwZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChpc05pbChlcnJvckdyb3VwKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaXNGdW5jdGlvbihlcnJvckdyb3VwWzFdKVxuICAgICAgICAgICAgICAgICAgICA/IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldChlcnJvckdyb3VwWzFdKVxuICAgICAgICAgICAgICAgICAgICA6IGlzT2JqZWN0KGVycm9yR3JvdXBbMV0pICYmIGlzRnVuY3Rpb24oZXJyb3JHcm91cFsxXVsnY2F0Y2gnXSlcbiAgICAgICAgICAgICAgICAgICAgICA/IGVycm9yR3JvdXBbMV1cbiAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmlsKGluc3RhbmNlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXJyb3JGaWx0ZXJEZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGluc3RhbmNlLmNhdGNoLmNhbGwoaW5zdGFuY2UsIGVycm9yLCBleGVjdXRpb25Db250ZXh0KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgQ29udHJvbGxlck1ldGFkYXRhLCBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB0eXBlIHsgU2NyaXB0UlBDSGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlciB7XG4gICAgcHVibGljIG1ldGFkYXRhOiBDb250cm9sbGVyTWV0YWRhdGE7XG4gICAgcHVibGljIGluc3RhbmNlOiB7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH07XG4gICAgcHVibGljIG93bmVyOiBNb2R1bGU7XG4gICAgcHVibGljIGV2ZW50SGFuZGxlcnM6IFNjcmlwdEV2ZW50SGFuZGxlcltdID0gW107XG4gICAgcHVibGljIHJwY0hhbmRsZXJzOiBTY3JpcHRSUENIYW5kbGVyW10gPSBbXTtcbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBJbmplY3Rpb25Ub2tlbiwgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgSW5qZWN0YWJsZU1ldGFkYXRhLCBFcnJvckZpbHRlciwgR3VhcmQsIEludGVyY2VwdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZU1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IENsYXNzUHJvdmlkZXIsIER5bmFtaWNNb2R1bGUsIExvZ2dlclNlcnZpY2UsIE1vZHVsZU9wdGlvbnMsIFBpcGUsIFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc05pbCwgaXNTdHJpbmcsIGlzU3ltYm9sIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlTWV0YWRhdGFSZWFkZXIge1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyByZWFkKG1vZHVsZTogTmV3YWJsZSB8IER5bmFtaWNNb2R1bGUgfCBQcm9taXNlPER5bmFtaWNNb2R1bGU+KSB7XG4gICAgICAgIC8vIENsYXNzIHJlZmVyZW5jZVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihtb2R1bGUpKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxSZXF1aXJlZDxNb2R1bGVPcHRpb25zPj4oQ29yZU1ldGFkYXRhS2V5Lk1vZHVsZSwgbW9kdWxlKSA/PyA8UmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz4+e307XG4gICAgICAgICAgICBjb25zdCBleHBvcnRUb2tlbnMgPSB0aGlzLmdldEV4cG9ydFRva2VucyhvcHRpb25zLmV4cG9ydHMpO1xuICAgICAgICAgICAgY29uc3Qgc2VwYXJhdGVkUHJvdmlkZXJzID0gdGhpcy5zZXBhcmF0ZVByb3ZpZGVycyhvcHRpb25zLnByb3ZpZGVycywgZXhwb3J0VG9rZW5zKTtcblxuICAgICAgICAgICAgcmV0dXJuIDxNb2R1bGVNZXRhZGF0YT57XG4gICAgICAgICAgICAgICAgY29udHJvbGxlcnM6IG9wdGlvbnMuY29udHJvbGxlcnMsXG4gICAgICAgICAgICAgICAgaW1wb3J0czogb3B0aW9ucy5pbXBvcnRzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0UGlwZWxpbmUobW9kdWxlKSxcbiAgICAgICAgICAgICAgICAuLi5zZXBhcmF0ZWRQcm92aWRlcnMsXG4gICAgICAgICAgICAgICAgY2xhc3NSZWY6IG1vZHVsZSxcbiAgICAgICAgICAgICAgICBnbG9iYWw6IFJlZmxlY3QuZ2V0TWV0YWRhdGE8Ym9vbGVhbj4oQ29yZU1ldGFkYXRhS2V5Lkdsb2JhbE1vZHVsZSwgbW9kdWxlKSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IG9wdGlvbnMuY29udGFpbmVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEeW5hbWljIG1vZHVsZVxuICAgICAgICBpZiAobW9kdWxlIGluc3RhbmNlb2YgUHJvbWlzZSkgbW9kdWxlID0gYXdhaXQgbW9kdWxlO1xuICAgICAgICBpZiAoISgnbW9kdWxlJyBpbiBtb2R1bGUpKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkTW9kdWxlRGVmaW5pdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IG1vZHVsZTogY2xhc3NSZWYsIGdsb2JhbCwgLi4ub3B0aW9ucyB9ID0gPFJlcXVpcmVkPER5bmFtaWNNb2R1bGU+Pm1vZHVsZTtcbiAgICAgICAgY29uc3QgZXhwb3J0VG9rZW5zID0gdGhpcy5nZXRFeHBvcnRUb2tlbnMob3B0aW9ucy5leHBvcnRzKTtcbiAgICAgICAgY29uc3Qgc2VwYXJhdGVkUHJvdmlkZXJzID0gdGhpcy5zZXBhcmF0ZVByb3ZpZGVycyhvcHRpb25zLnByb3ZpZGVycywgZXhwb3J0VG9rZW5zKTtcblxuICAgICAgICByZXR1cm4gPE1vZHVsZU1ldGFkYXRhPntcbiAgICAgICAgICAgIGNvbnRyb2xsZXJzOiBvcHRpb25zLmNvbnRyb2xsZXJzLFxuICAgICAgICAgICAgaW1wb3J0czogb3B0aW9ucy5pbXBvcnRzLFxuICAgICAgICAgICAgLi4udGhpcy5nZXRQaXBlbGluZShjbGFzc1JlZiksXG4gICAgICAgICAgICAuLi5zZXBhcmF0ZWRQcm92aWRlcnMsXG4gICAgICAgICAgICBjbGFzc1JlZixcbiAgICAgICAgICAgIGdsb2JhbDogZ2xvYmFsID8/IGZhbHNlLFxuICAgICAgICAgICAgY29udGFpbmVyOiBvcHRpb25zLmNvbnRhaW5lcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBpcGVsaW5lKGNsYXNzUmVmOiBOZXdhYmxlKSB7XG4gICAgICAgIGNvbnN0IGd1YXJkcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxHdWFyZD5bXT4oQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgY2xhc3NSZWYpID8/IFtdO1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8SW50ZXJjZXB0b3I+W10+KENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIGNsYXNzUmVmKSA/PyBbXTtcbiAgICAgICAgY29uc3QgcGlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8UGlwZT5bXT4oQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCBjbGFzc1JlZikgPz8gW107XG4gICAgICAgIGNvbnN0IGVycm9yRmlsdGVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxFcnJvckZpbHRlcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgY2xhc3NSZWYpID8/IFtdO1xuXG4gICAgICAgIHJldHVybiB7IGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgZXJyb3JGaWx0ZXJzIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFeHBvcnRUb2tlbnMoZXhwb3J0czogUmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz5bJ2V4cG9ydHMnXSkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5tYXA8SW5qZWN0aW9uVG9rZW4+KChwcm92aWRlckV4cG9ydCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXJFeHBvcnQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFSZWZsZWN0Lmhhc093bk1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5JbmplY3RhYmxlLCBwcm92aWRlckV4cG9ydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXhwb3J0RGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlckV4cG9ydDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcocHJvdmlkZXJFeHBvcnQpIHx8IGlzU3ltYm9sKHByb3ZpZGVyRXhwb3J0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlckV4cG9ydDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJ3Byb3ZpZGUnIGluIHByb3ZpZGVyRXhwb3J0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyRXhwb3J0LnByb3ZpZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBtb2R1bGUgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRFeHBvcnREZWZpbml0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXBhcmF0ZVByb3ZpZGVycyhwcm92aWRlcnM6IFJlcXVpcmVkPE1vZHVsZU9wdGlvbnM+Wydwcm92aWRlcnMnXSwgZXhwb3J0VG9rZW5zOiBJbmplY3Rpb25Ub2tlbltdKSB7XG4gICAgICAgIHJldHVybiBwcm92aWRlcnNcbiAgICAgICAgICAgIC5tYXAoKHByb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluamVjdGFibGVNZXRhZGF0YSA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8SW5qZWN0YWJsZU1ldGFkYXRhPihDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOaWwoaW5qZWN0YWJsZU1ldGFkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDxDbGFzc1Byb3ZpZGVyPnsgcHJvdmlkZTogcHJvdmlkZXIsIHVzZUNsYXNzOiBwcm92aWRlciwgc2NvcGU6IGluamVjdGFibGVNZXRhZGF0YS5zY29wZSB9O1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ3VzZUNsYXNzJyBpbiBwcm92aWRlciB8fCAndXNlVmFsdWUnIGluIHByb3ZpZGVyIHx8ICd1c2VGYWN0b3J5JyBpbiBwcm92aWRlciB8fCAndXNlRXhpc3RpbmcnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoYWNjLCBwcm92aWRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb3J0VG9rZW5zLmluY2x1ZGVzKHByb3ZpZGVyLnByb3ZpZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2MuZXh0ZXJuYWxQcm92aWRlcnMuc2V0KHByb3ZpZGVyLnByb3ZpZGUsIHByb3ZpZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjYy5pbnRlcm5hbFByb3ZpZGVycy5zZXQocHJvdmlkZXIucHJvdmlkZSwgcHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGludGVybmFsUHJvdmlkZXJzOiBuZXcgTWFwPEluamVjdGlvblRva2VuLCBFeGNsdWRlPFByb3ZpZGVyLCBOZXdhYmxlPj4oKSxcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcnM6IG5ldyBNYXA8SW5qZWN0aW9uVG9rZW4sIEV4Y2x1ZGU8UHJvdmlkZXIsIE5ld2FibGU+PigpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIgfSBmcm9tICdpbnZlcnNpZnknO1xuXG5leHBvcnQgY2xhc3MgTW9kdWxlQ29udGFpbmVyIGV4dGVuZHMgQ29udGFpbmVyIHt9XG4iLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBDb250cm9sbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZU1ldGFkYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNb2R1bGVDb250YWluZXIgfSBmcm9tICcuL21vZHVsZS1jb250YWluZXInO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29udHJvbGxlcnM6IENvbnRyb2xsZXJbXSA9IFtdO1xuICAgIHB1YmxpYyBjb250YWluZXI6IE1vZHVsZUNvbnRhaW5lcjtcbiAgICBwdWJsaWMgcGFyZW50OiBNb2R1bGUgfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIG1ldGFkYXRhOiBNb2R1bGVNZXRhZGF0YTtcbiAgICBwdWJsaWMgaW5zdGFuY2U6IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfTtcbiAgICBwdWJsaWMgcmVwZXRpdGl2ZUltcG9ydHM6IFNldDxNb2R1bGU+ID0gbmV3IFNldCgpO1xufVxuIiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgU2V0TWV0YWRhdGEgfSBmcm9tICcuLi9kZWNvcmF0b3JzJztcbmltcG9ydCB0eXBlIHsgQ3JlYXRlRGVjb3JhdG9yT3B0aW9ucywgQ3JlYXRlRGVjb3JhdG9yV2l0aFRyYW5zZm9ybU9wdGlvbnMsIFJlZmxlY3RhYmxlRGVjb3JhdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUlkLCBpc0VtcHR5LCBpc09iamVjdCB9IGZyb20gJy4uL3V0aWxzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlZmxlY3RvclNlcnZpY2Uge1xuICAgIHB1YmxpYyBnZXQ8VFJlc3VsdCA9IHVua25vd24sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KG1ldGFkYXRhS2V5OiBUS2V5LCB0YXJnZXQ6IE5ld2FibGUgfCBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YTxUUmVzdWx0PihtZXRhZGF0YUtleSwgdGFyZ2V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsPFRSZXN1bHQgZXh0ZW5kcyB1bmtub3duW10gPSB1bmtub3duW10sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KFxuICAgICAgICBtZXRhZGF0YUtleTogVEtleSxcbiAgICAgICAgdGFyZ2V0czogKE5ld2FibGUgfCBGdW5jdGlvbilbXSxcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIDxUUmVzdWx0Pih0YXJnZXRzIHx8IFtdKS5tYXAoKHRhcmdldCkgPT4gdGhpcy5nZXQobWV0YWRhdGFLZXksIHRhcmdldCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxBbmRNZXJnZTxUUmVzdWx0IGV4dGVuZHMgdW5rbm93bltdID0gdW5rbm93bltdLCBUS2V5IGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sID0gc3RyaW5nPihcbiAgICAgICAgbWV0YWRhdGFLZXk6IFRLZXksXG4gICAgICAgIHRhcmdldHM6IChOZXdhYmxlIHwgRnVuY3Rpb24pW10sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQ29sbGVjdGlvbiA9IHRoaXMuZ2V0QWxsPFRSZXN1bHQsIFRLZXk+KG1ldGFkYXRhS2V5LCB0YXJnZXRzKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKGlzRW1wdHkobWV0YWRhdGFDb2xsZWN0aW9uKSkgcmV0dXJuIDxUUmVzdWx0Pm1ldGFkYXRhQ29sbGVjdGlvbjtcblxuICAgICAgICByZXR1cm4gPFRSZXN1bHQ+bWV0YWRhdGFDb2xsZWN0aW9uLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QoYSkgJiYgaXNPYmplY3QoYikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5hLFxuICAgICAgICAgICAgICAgICAgICAuLi5iLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2EsIGJdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsQW5kT3ZlcnJpZGU8VFJlc3VsdCA9IHVua25vd24sIFRLZXkgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgPSBzdHJpbmc+KG1ldGFkYXRhS2V5OiBUS2V5LCB0YXJnZXRzOiAoTmV3YWJsZSB8IEZ1bmN0aW9uKVtdKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0KG1ldGFkYXRhS2V5LCB0YXJnZXQpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gPFRSZXN1bHQ+cmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVEZWNvcmF0b3I8VFBhcmFtPihvcHRpb25zPzogQ3JlYXRlRGVjb3JhdG9yT3B0aW9uczxUUGFyYW0+KTogUmVmbGVjdGFibGVEZWNvcmF0b3I8VFBhcmFtPjtcbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD4oXG4gICAgICAgIG9wdGlvbnM6IENyZWF0ZURlY29yYXRvcldpdGhUcmFuc2Zvcm1PcHRpb25zPFRQYXJhbSwgVFRyYW5zZm9ybWVkPixcbiAgICApOiBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD47XG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGVEZWNvcmF0b3I8VFBhcmFtLCBUVHJhbnNmb3JtZWQgPSBUUGFyYW0+KFxuICAgICAgICBvcHRpb25zOiBDcmVhdGVEZWNvcmF0b3JPcHRpb25zPFRQYXJhbSwgVFRyYW5zZm9ybWVkPiA9IHt9LFxuICAgICk6IFJlZmxlY3RhYmxlRGVjb3JhdG9yPFRQYXJhbSwgVFRyYW5zZm9ybWVkPiB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhS2V5ID0gb3B0aW9ucy5rZXkgPz8gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgICAgICBjb25zdCBkZWNvcmF0b3JGbiA9IChtZXRhZGF0YVZhbHVlOiBUUGFyYW0pID0+ICh0YXJnZXQ6IG9iamVjdCB8IEZ1bmN0aW9uLCBrZXk/OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I/OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9ucy50cmFuc2Zvcm0gPyBvcHRpb25zLnRyYW5zZm9ybShtZXRhZGF0YVZhbHVlKSA6IG1ldGFkYXRhVmFsdWU7XG4gICAgICAgICAgICBTZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdmFsdWUgPz8ge30pKHRhcmdldCwga2V5ISwgZGVzY3JpcHRvcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgZGVjb3JhdG9yRm4uS0VZID0gbWV0YWRhdGFLZXk7XG4gICAgICAgIHJldHVybiBkZWNvcmF0b3JGbiBhcyBSZWZsZWN0YWJsZURlY29yYXRvcjxUUGFyYW0sIFRUcmFuc2Zvcm1lZD47XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IENvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIENvbnRyb2xsZXI8VCBleHRlbmRzIE5ld2FibGU+KG9wdGlvbnM/OiBDb250cm9sbGVyT3B0aW9ucykge1xuICAgIHJldHVybiAodGFyZ2V0OiBUKSA9PiB7XG4gICAgICAgIGlmIChSZWZsZWN0Lmhhc01ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZURlY29yYXRvclVzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVDb250cm9sbGVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlciwgdmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGUoKSh0YXJnZXQpO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEdsb2JhbDxUIGV4dGVuZHMgTmV3YWJsZT4oKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuR2xvYmFsTW9kdWxlLCB0cnVlLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIEluamVjdDxUID0gdW5rbm93bj4oa2V5PzogSW5qZWN0aW9uVG9rZW48VD4pIHtcbiAgICByZXR1cm4gPFByb3BlcnR5RGVjb3JhdG9yICYgUGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHBhcmFtSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbChrZXkpICYmICF2YWxpZGF0ZUluamVjdGlvblRva2VuKGtleSkudmFsaWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEluamVjdGlvblRva2VuU3BlY2lmaWVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRva2VuID0ga2V5ID8/IFJlZmxlY3QuZ2V0TWV0YWRhdGE8SW5qZWN0aW9uVG9rZW4+KCdkZXNpZ246dHlwZScsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkluamVjdGlvblRva2VuTm90Rm91bmQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5qZWN0KHRva2VuKSh0YXJnZXQsIHByb3BlcnR5S2V5LCBwYXJhbUluZGV4KTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGFibGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gSW5qZWN0YWJsZTxUIGV4dGVuZHMgTmV3YWJsZT4ob3B0aW9ucz86IEluamVjdGFibGVPcHRpb25zKSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IFQpID0+IHtcbiAgICAgICAgaWYgKFJlZmxlY3QuaGFzTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkluamVjdGFibGUsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YShvcHRpb25zKTtcbiAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgdmFsdWUsIHRhcmdldCk7XG5cbiAgICAgICAgcmV0dXJuIGluamVjdGFibGUoKSh0YXJnZXQpO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZU1vZHVsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIE1vZHVsZTxUIGV4dGVuZHMgTmV3YWJsZT4ob3B0aW9ucz86IE1vZHVsZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuTW9kdWxlLCB0YXJnZXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkR1cGxpY2F0ZURlY29yYXRvclVzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVNb2R1bGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IhKTtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuTW9kdWxlLCB2YWx1ZSwgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gaW5qZWN0YWJsZSgpKHRhcmdldCk7XG4gICAgfTtcbn1cbiIsICJpbXBvcnQgeyBvcHRpb25hbCB9IGZyb20gJ2ludmVyc2lmeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPcHRpb25hbCgpIHtcbiAgICByZXR1cm4gPFByb3BlcnR5RGVjb3JhdG9yICYgUGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHBhcmFtSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKCkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgcGFyYW1JbmRleCk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDdXN0b21EZWNvcmF0b3IgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTZXRNZXRhZGF0YTxLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBWID0gdW5rbm93bj4oa2V5OiBLLCB2YWx1ZTogVikge1xuICAgIGNvbnN0IGRlY29yYXRvckZhY3RvcnkgPSA8Q3VzdG9tRGVjb3JhdG9yPigodGFyZ2V0OiBvYmplY3QsIF9tZXRob2Q/OiBzdHJpbmcsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoa2V5LCB2YWx1ZSwgZGVzY3JpcHRvci52YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKGtleSwgdmFsdWUsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSk7XG4gICAgZGVjb3JhdG9yRmFjdG9yeS5LRVkgPSBrZXk7XG4gICAgcmV0dXJuIGRlY29yYXRvckZhY3Rvcnk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIENhdGNoPFQgZXh0ZW5kcyBOZXdhYmxlPiguLi5leGNlcHRpb25zOiB1bmtub3duW10pIHtcbiAgICByZXR1cm4gKHRhcmdldDogVCkgPT4ge1xuICAgICAgICBpZiAoUmVmbGVjdC5oYXNNZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuQ2F0Y2gsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRGVjb3JhdG9yVXNhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHVwbGljYXRlcyA9IGV4Y2VwdGlvbnMuZmlsdGVyKChleGNlcHRpb24sIGluZGV4KSA9PiBleGNlcHRpb25zLmluZGV4T2YoZXhjZXB0aW9uKSAhPT0gaW5kZXgpO1xuICAgICAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5DYXRjaCwgZXhjZXB0aW9ucywgdGFyZ2V0KTtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlRXJyb3JGaWx0ZXIgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICByZXR1cm4gPENsYXNzRGVjb3JhdG9yICYgTWV0aG9kRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZD86IHN0cmluZywgZGVzY3JpcHRvcj86IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGaWx0ZXJzOiAoTmV3YWJsZTxFcnJvckZpbHRlcj4gfCBFcnJvckZpbHRlcilbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlRXJyb3JGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRGaWx0ZXJzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChkZXNjcmlwdG9yKSAmJiAhaXNOaWwoZGVzY3JpcHRvci52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUZpbHRlclJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWV0aG9kRmlsdGVycyA9XG4gICAgICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEVycm9yRmlsdGVyPltdPihDb3JlTWV0YWRhdGFLZXkuRXJyb3JGaWx0ZXJzLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCkgfHwgW107XG4gICAgICAgICAgICBpZiAoIWlzTmlsKG1ldGhvZEZpbHRlcnMuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXJzLmluY2x1ZGVzKGZpbHRlcikpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRHVwbGljYXRlRXJyb3JGaWx0ZXJEZXRlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIFsuLi52YWxpZGF0ZWRGaWx0ZXJzLCAuLi5tZXRob2RGaWx0ZXJzXSwgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUZpbHRlclJlcXVpcmVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzRmlsdGVycyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxFcnJvckZpbHRlcj5bXT4oQ29yZU1ldGFkYXRhS2V5LkVycm9yRmlsdGVycywgdGFyZ2V0KSB8fCBbXTtcbiAgICAgICAgaWYgKCFpc05pbChjbGFzc0ZpbHRlcnMuZmluZCgoZmlsdGVyKSA9PiBmaWx0ZXJzLmluY2x1ZGVzKGZpbHRlcikpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5EdXBsaWNhdGVFcnJvckZpbHRlckRldGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIFsuLi52YWxpZGF0ZWRGaWx0ZXJzLCAuLi5jbGFzc0ZpbHRlcnNdLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsLCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVOQUJMRV9TSFVURE9XTl9IT09LUywgR0xPQkFMX0VSUk9SX0ZJTFRFUlMsIEdMT0JBTF9HVUFSRFMsIEdMT0JBTF9JTlRFUkNFUFRPUlMsIEdMT0JBTF9QSVBFUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRmlsdGVyLCBHdWFyZCwgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUsIG9wdGlvbmFsIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IENvbnRyb2xsZXIsIENvbnRyb2xsZXJFdmVudEhhbmRsZXIsIENvbnRyb2xsZXJSUENIYW5kbGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgVElNRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgVHJlZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgVGltZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBwUnVudGltZSB7XG4gICAgQGluamVjdChDb250cm9sbGVyRXZlbnRIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50SGFuZGxlcjogQ29udHJvbGxlckV2ZW50SGFuZGxlcjtcbiAgICBAaW5qZWN0KENvbnRyb2xsZXJSUENIYW5kbGVyKSBwcml2YXRlIHJlYWRvbmx5IHJwY0hhbmRsZXI6IENvbnRyb2xsZXJSUENIYW5kbGVyO1xuICAgIEBpbmplY3QoR0xPQkFMX0dVQVJEUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxHdWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdO1xuICAgIEBpbmplY3QoR0xPQkFMX0lOVEVSQ0VQVE9SUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxJbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdO1xuICAgIEBpbmplY3QoR0xPQkFMX1BJUEVTKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW107XG4gICAgQGluamVjdChHTE9CQUxfRVJST1JfRklMVEVSUykgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxFcnJvckZpbHRlcnM6IChOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyKVtdO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAaW5qZWN0KEVOQUJMRV9TSFVURE9XTl9IT09LUykgQG9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBlbmFibGVTaHV0ZG93bkhvb2tzOiBib29sZWFuO1xuXG4gICAgcHVibGljIGFzeW5jIGJvb3QocmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4pIHtcbiAgICAgICAgYXdhaXQgcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIG1vZHVsZSwgY29udHJvbGxlcnMgYW5kIHByb3ZpZGVycy5cbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuaW5zdGFuY2UgPSBtb2R1bGUuY29udGFpbmVyLmdldDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+KG1vZHVsZS5tZXRhZGF0YS5jbGFzc1JlZik7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAoY29udHJvbGxlcikgPT4gKGNvbnRyb2xsZXIuaW5zdGFuY2UgPSBtb2R1bGUuY29udGFpbmVyLmdldDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+KGNvbnRyb2xsZXIubWV0YWRhdGEuY2xhc3NSZWYpKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBbLi4ubW9kdWxlLm1ldGFkYXRhLmludGVybmFsUHJvdmlkZXJzLCAuLi5tb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnNdLmZvckVhY2goKFt0b2tlbl0pID0+XG4gICAgICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5nZXQ8YW55Pih0b2tlbiksXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBMb2cgbW9kdWxlIGxvYWRlZC5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35sb2FkZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJ1bkxpZmVjeWNsZU1ldGhvZChtb2R1bGUsICdvbk1vZHVsZUluaXQnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbk1vZHVsZUluaXQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5MaWZlY3ljbGVNZXRob2RzKHJlc29sdmVkVHJlZSwgJ29uQXBwQm9vdHN0cmFwJyk7XG5cbiAgICAgICAgLy8gUmVnaXN0ZXIgZXZlbnQgYW5kIHJwYyBsaXN0ZW5lcnMuXG4gICAgICAgIHJlc29sdmVkVHJlZS50cmF2ZXJzZSgobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250cm9sbGVycy5mb3JFYWNoKChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlclRpbWVycyhjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGB+bHd+Q29udHJvbGxlciB+bGN+JHtjb250cm9sbGVyLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd350aW1lcnMgYW5kIGxpc3RlbmVycyByZWdpc3RlcmVkIH5sa34oJHtEYXRlLm5vdygpIC0gdGltZX1tcylgLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNodXRkb3duKHJlc29sdmVkVHJlZTogVHJlZTxNb2R1bGU+KSB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbk1vZHVsZURlc3Ryb3knKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdiZWZvcmVBcHBTaHV0ZG93bicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5vZGUudmFsdWU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMuZm9yRWFjaCgoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVyU2VydmljZSA9IGNvbnRyb2xsZXIub3duZXIuY29udGFpbmVyLmdldDxUaW1lclNlcnZpY2U+KFRJTUVSX1NFUlZJQ0UpO1xuXG4gICAgICAgICAgICAgICAgLy8gRGVzdHJveSBhbGwgdGltZXJzLlxuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5ldmVyeXRpY2tzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5pbnRlcnZhbHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLnRpbWVvdXRzLmZvckVhY2goKHRpbWVyKSA9PiB0aW1lci5kZXN0cm95KCkpO1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcm9ucy5mb3JFYWNoKChjcm9uKSA9PiBjcm9uLnN0b3AoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgICAgICAgICAgY29udHJvbGxlci5ldmVudEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLnJwY0hhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCB0aW1lcnMuXG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmV2ZXJ5dGlja3MuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmludGVydmFscy5mb3JFYWNoKCh0aW1lcikgPT4gdGltZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy50aW1lclNlcnZpY2UudGltZW91dHMuZm9yRWFjaCgodGltZXIpID0+IHRpbWVyLmRlc3Ryb3koKSk7XG4gICAgICAgIC8vIHRoaXMudGltZXJTZXJ2aWNlLmNyb25Kb2JzLmZvckVhY2goKGNyb25Kb2IpID0+IGNyb25Kb2Iuc3RvcCgpKTtcblxuICAgICAgICAvLyAvLyBEZXN0cm95IGFsbCBzY3JpcHQgZXZlbnQgaGFuZGxlcnMuXG4gICAgICAgIC8vIHRoaXMuZXZlbnRTZXJ2aWNlLiRsb2NhbEhhbmRsZXJzLmZvckVhY2goKGhhbmRsZXIpID0+IGhhbmRsZXIuZGVzdHJveSgpKTtcbiAgICAgICAgLy8gdGhpcy5ldmVudFNlcnZpY2UuJGludGVybmFsSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuICAgICAgICAvLyB0aGlzLmV2ZW50U2VydmljZS4kcmVtb3RlSGFuZGxlcnMuZm9yRWFjaCgoaGFuZGxlcikgPT4gaGFuZGxlci5kZXN0cm95KCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVNodXRkb3duSG9va3MpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kcyhyZXNvbHZlZFRyZWUsICdvbkFwcFNodXRkb3duJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTGlzdGVuZXJzKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gY29udHJvbGxlci5vd25lcjtcbiAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YS5ldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGd1YXJkcyA9IFsuLi50aGlzLmdsb2JhbEd1YXJkcywgLi4ubW9kdWxlLm1ldGFkYXRhLmd1YXJkcywgLi4uY29udHJvbGxlci5tZXRhZGF0YS5ndWFyZHMsIC4uLmV2ZW50Lmd1YXJkc107XG4gICAgICAgICAgICBjb25zdCBpbnRlcmNlcHRvcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxJbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ldmVudC5waXBlc107XG4gICAgICAgICAgICBjb25zdCBtYXBwZWRFcnJvckZpbHRlcnMgPSB0aGlzLm1hcEVycm9yRmlsdGVycyhbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nbG9iYWxFcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ubW9kdWxlLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5jb250cm9sbGVyLm1ldGFkYXRhLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgICAgICAuLi5ldmVudC5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuZXZlbnRIYW5kbGVyLnJlZ2lzdGVyRXZlbnQoZ3VhcmRzLCBpbnRlcmNlcHRvcnMsIHBpcGVzLCBtYXBwZWRFcnJvckZpbHRlcnMsIGNvbnRyb2xsZXIsIGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZXZlbnRIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnJwY3MuZm9yRWFjaChhc3luYyAocnBjKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBndWFyZHMgPSBbLi4udGhpcy5nbG9iYWxHdWFyZHMsIC4uLm1vZHVsZS5tZXRhZGF0YS5ndWFyZHMsIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuZ3VhcmRzLCAuLi5ycGMuZ3VhcmRzXTtcbiAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdsb2JhbEludGVyY2VwdG9ycyxcbiAgICAgICAgICAgICAgICAuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2xsZXIubWV0YWRhdGEuaW50ZXJjZXB0b3JzLFxuICAgICAgICAgICAgICAgIC4uLnJwYy5pbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBbLi4udGhpcy5nbG9iYWxQaXBlcywgLi4ubW9kdWxlLm1ldGFkYXRhLnBpcGVzLCAuLi5jb250cm9sbGVyLm1ldGFkYXRhLnBpcGVzLCAuLi5ycGMucGlwZXNdO1xuICAgICAgICAgICAgY29uc3QgbWFwcGVkRXJyb3JGaWx0ZXJzID0gdGhpcy5tYXBFcnJvckZpbHRlcnMoW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2xvYmFsRXJyb3JGaWx0ZXJzLFxuICAgICAgICAgICAgICAgIC4uLm1vZHVsZS5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4uY29udHJvbGxlci5tZXRhZGF0YS5lcnJvckZpbHRlcnMsXG4gICAgICAgICAgICAgICAgLi4ucnBjLmVycm9yRmlsdGVycyxcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gYXdhaXQgdGhpcy5ycGNIYW5kbGVyLnJlZ2lzdGVyUlBDKGd1YXJkcywgaW50ZXJjZXB0b3JzLCBwaXBlcywgbWFwcGVkRXJyb3JGaWx0ZXJzLCBjb250cm9sbGVyLCBycGMpO1xuICAgICAgICAgICAgY29udHJvbGxlci5ycGNIYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJUaW1lcnMoY29udHJvbGxlcjogQ29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB0aW1lclNlcnZpY2UgPSBjb250cm9sbGVyLm93bmVyLmNvbnRhaW5lci5nZXQ8VGltZXJTZXJ2aWNlPihUSU1FUl9TRVJWSUNFKTtcblxuICAgICAgICBjb250cm9sbGVyLm1ldGFkYXRhLnRpbWVycy5mb3JFYWNoKCh0aW1lcikgPT4ge1xuICAgICAgICAgICAgaWYgKHRpbWVyLnR5cGUgPT09ICdjcm9uJykge1xuICAgICAgICAgICAgICAgIHRpbWVyU2VydmljZS5jcmVhdGVDcm9uSm9iKGNvbnRyb2xsZXIuaW5zdGFuY2VbdGltZXIubWV0aG9kXSEuYmluZChjb250cm9sbGVyLmluc3RhbmNlKSwgdGltZXIub3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyLnR5cGUgPT09ICdldmVyeXRpY2snKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUV2ZXJ5VGljayhjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAnaW50ZXJ2YWwnKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTZXJ2aWNlLmNyZWF0ZUludGVydmFsKFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksXG4gICAgICAgICAgICAgICAgICAgIHRpbWVyLm9wdGlvbnMudGltZW91dCxcbiAgICAgICAgICAgICAgICAgICAgdGltZXIubmFtZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lci50eXBlID09PSAndGltZW91dCcpIHtcbiAgICAgICAgICAgICAgICB0aW1lclNlcnZpY2UuY3JlYXRlVGltZW91dChjb250cm9sbGVyLmluc3RhbmNlW3RpbWVyLm1ldGhvZF0hLmJpbmQoY29udHJvbGxlci5pbnN0YW5jZSksIHRpbWVyLm9wdGlvbnMudGltZW91dCwgdGltZXIubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwRXJyb3JGaWx0ZXJzKGVycm9yRmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyTWFwOiBbdW5rbm93biB8ICdNQU5HT19BTllfRVJST1InLCBOZXdhYmxlPEVycm9yRmlsdGVyPiB8IEVycm9yRmlsdGVyXVtdID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZXJyb3JGaWx0ZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPGFueVtdPihDb3JlTWV0YWRhdGFLZXkuQ2F0Y2gsIGZpbHRlcikgPz8gW107XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdNQU5HT19BTllfRVJST1InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgZXJyb3Igb2YgZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05pbChmaWx0ZXJNYXAuZmluZCgoZmlsdGVyRXJyb3IpID0+IGZpbHRlckVycm9yWzBdID09PSBlcnJvcikpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIG1hcCBlcnJvciBmaWx0ZXJzLicpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkVycm9yQWxyZWFkeUhhbmRsZWRCeUZpbHRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbHRlck1hcC5wdXNoKFtlcnJvciwgZmlsdGVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyTWFwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kcyhcbiAgICAgICAgcmVzb2x2ZWRUcmVlOiBUcmVlPE1vZHVsZT4sXG4gICAgICAgIG1ldGhvZDogJ29uTW9kdWxlSW5pdCcgfCAnb25Nb2R1bGVEZXN0cm95JyB8ICdvbkFwcEJvb3RzdHJhcCcgfCAnYmVmb3JlQXBwU2h1dGRvd24nIHwgJ29uQXBwU2h1dGRvd24nLFxuICAgICkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWRUcmVlLmFzeW5jVHJhdmVyc2UoYXN5bmMgKG5vZGUpID0+IGF3YWl0IHRoaXMucnVuTGlmZWN5Y2xlTWV0aG9kKG5vZGUudmFsdWUsIG1ldGhvZCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcnVuTGlmZWN5Y2xlTWV0aG9kKFxuICAgICAgICBtb2R1bGU6IE1vZHVsZSxcbiAgICAgICAgbWV0aG9kOiAnb25Nb2R1bGVJbml0JyB8ICdvbk1vZHVsZURlc3Ryb3knIHwgJ29uQXBwQm9vdHN0cmFwJyB8ICdiZWZvcmVBcHBTaHV0ZG93bicgfCAnb25BcHBTaHV0ZG93bicsXG4gICAgKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgbW9kdWxlLmNvbnRyb2xsZXJzLm1hcChhc3luYyAoY29udHJvbGxlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoY29udHJvbGxlci5pbnN0YW5jZSkgfHwgaXNOaWwoY29udHJvbGxlci5pbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2xsZXIuaW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIFsuLi5tb2R1bGUubWV0YWRhdGEuaW50ZXJuYWxQcm92aWRlcnMsIC4uLm1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVyc10ubWFwKGFzeW5jIChbdG9rZW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZXJJbnN0YW5jZSA9IDx7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH0+bW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QocHJvdmlkZXJJbnN0YW5jZSkgfHwgaXNOaWwocHJvdmlkZXJJbnN0YW5jZVttZXRob2RdKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGF3YWl0IHByb3ZpZGVySW5zdGFuY2VbbWV0aG9kXSEoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KG1vZHVsZS5pbnN0YW5jZSkgfHwgaXNOaWwobW9kdWxlLmluc3RhbmNlW21ldGhvZF0pKSByZXR1cm47XG4gICAgICAgIGF3YWl0IG1vZHVsZS5pbnN0YW5jZVttZXRob2RdISgpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UsIFByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENPTlRBSU5FUl9PUFRJT05TLCBHTE9CQUxfQVBQX0NPTlRBSU5FUiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZUNvbnRhaW5lciB9IGZyb20gJy4uL21vZHVsZSc7XG5pbXBvcnQgeyBDb250YWluZXIsIGluamVjdCwgaW5qZWN0YWJsZSwgb3B0aW9uYWwsIHR5cGUgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBMT0dHRVJfU0VSVklDRSwgTU9EVUxFX0NPTlRBSU5FUiwgVElNRVJfU0VSVklDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IFRyZWUgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBUaW1lclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNb2R1bGVEZXBlbmRlbmN5QmluZGVyIHtcbiAgICBAaW5qZWN0KEdMT0JBTF9BUFBfQ09OVEFJTkVSKSBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBAb3B0aW9uYWwoKSBAaW5qZWN0KENPTlRBSU5FUl9PUFRJT05TKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lck9wdGlvbnM/OiBpbnRlcmZhY2VzLkNvbnRhaW5lck9wdGlvbnM7XG5cbiAgICBwdWJsaWMgYXN5bmMgYmluZChyZXNvbHZlZFRyZWU6IFRyZWU8TW9kdWxlPikge1xuICAgICAgICBhd2FpdCByZXNvbHZlZFRyZWUuYXN5bmNUcmF2ZXJzZShhc3luYyAobm9kZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIgPSBuZXcgTW9kdWxlQ29udGFpbmVyKG1vZHVsZS5tZXRhZGF0YS5jb250YWluZXIgPz8gdGhpcy5jb250YWluZXJPcHRpb25zKTtcbiAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgZ2xvYmFsIGNvbnRhaW5lciB0byB0aGUgbW9kdWxlIGNvbnRhaW5lciwgc28gaXQgY2FuIGJlIHVzZWQgdG8gcmVzb2x2ZSBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLnBhcmVudCA9IHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChtb2R1bGUubWV0YWRhdGEuY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBnbG9iYWwsIHdlIHdhbnQgdG8gYmluZCBpdCB0byB0aGUgZ2xvYmFsIGNvbnRhaW5lci5cbiAgICAgICAgICAgIGlmIChtb2R1bGUubWV0YWRhdGEuZ2xvYmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gQmluZCBleHRlcm5hbCBwcm92aWRlcnMgdG8gdGhlIGdsb2JhbCBjb250YWluZXIsIHNvIHRoZXkgY2FuIGJlIGluamVjdGVkIGluIG90aGVyIG1vZHVsZXMuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgcHJvdmlkZXJdIG9mIG1vZHVsZS5tZXRhZGF0YS5leHRlcm5hbFByb3ZpZGVycykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRQcm92aWRlcihwcm92aWRlciwgdGhpcy5nbG9iYWxBcHBDb250YWluZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZHVsZSBpcyBub3QgZ2xvYmFsLCB3ZSB3YW50IHRvIGJpbmQgaXQgdG8gaXRzIG93biBjb250YWluZXIuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbdG9rZW4sIHByb3ZpZGVyXSBvZiBtb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUucGFyZW50Py5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gbW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbXBvcnRNb2R1bGUgb2YgbW9kdWxlLnJlcGV0aXRpdmVJbXBvcnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3Rva2VuXSBvZiBpbXBvcnRNb2R1bGUubWV0YWRhdGEuZXh0ZXJuYWxQcm92aWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5jb250YWluZXIuYmluZCh0b2tlbikudG9EeW5hbWljVmFsdWUoKCkgPT4gaW1wb3J0TW9kdWxlLmNvbnRhaW5lci5nZXQodG9rZW4pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBpbnRlcm5hbCBwcm92aWRlcnMuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBwcm92aWRlcl0gb2YgbW9kdWxlLm1ldGFkYXRhLmludGVybmFsUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kUHJvdmlkZXIocHJvdmlkZXIsIG1vZHVsZS5jb250YWluZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCaW5kIGNvbnRhaW5lciB0byBpdHNlbGYgc28gaXQgY2FuIGJlIGluamVjdGVkLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKE1PRFVMRV9DT05UQUlORVIpLnRvQ29uc3RhbnRWYWx1ZShtb2R1bGUuY29udGFpbmVyKTtcblxuICAgICAgICAgICAgLy8gQmluZCBjb250cm9sbGVycyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICBtb2R1bGUuY29udGFpbmVyLmJpbmQoY2xhc3NSZWYpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQmluZCBzZXJ2aWNlcyB0byB0aGUgY29udGFpbmVyLlxuICAgICAgICAgICAgbW9kdWxlLmNvbnRhaW5lci5iaW5kKFRJTUVSX1NFUlZJQ0UpLnRvKFRpbWVyU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKFxuICAgICAgICAgICAgICAgIGB+bHd+TW9kdWxlIH5sYn4ke21vZHVsZS5tZXRhZGF0YS5jbGFzc1JlZi5uYW1lfSB+bHd+ZGVwZW5kZW5jaWVzIGJpbmRlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHN0YXJ0VGltZX1tcylgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kUHJvdmlkZXIocHJvdmlkZXI6IEV4Y2x1ZGU8UHJvdmlkZXIsIE5ld2FibGU+LCBjb250YWluZXI6IENvbnRhaW5lcikge1xuICAgICAgICBpZiAoJ3VzZVZhbHVlJyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29udGFpbmVyLmJpbmQocHJvdmlkZXIucHJvdmlkZSkudG9Db25zdGFudFZhbHVlKHByb3ZpZGVyLnVzZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlRmFjdG9yeScgaW4gcHJvdmlkZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b0R5bmFtaWNWYWx1ZSgoY3R4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwcyA9XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLmluamVjdD8ubWFwKChkZXApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChkZXApICYmICd0b2tlbicgaW4gZGVwICYmICdvcHRpb25hbCcgaW4gZGVwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5jb250YWluZXIuZ2V0KGRlcC50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXAub3B0aW9uYWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIHJlc29sdmUgYSBkZXBlbmRlbmN5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5jb250YWluZXIuZ2V0KGRlcCk7XG4gICAgICAgICAgICAgICAgICAgIH0pID8/IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlci51c2VGYWN0b3J5KC4uLmRlcHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICd0cmFuc2llbnQnKSBiaW5kaW5nLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyLnNjb3BlID09PSAncmVxdWVzdCcpIGJpbmRpbmcuaW5SZXF1ZXN0U2NvcGUoKTtcbiAgICAgICAgICAgIGVsc2UgYmluZGluZy5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ3VzZUNsYXNzJyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGNvbnRhaW5lci5iaW5kKHByb3ZpZGVyLnByb3ZpZGUpLnRvKHByb3ZpZGVyLnVzZUNsYXNzKTtcbiAgICAgICAgICAgIGlmIChwcm92aWRlci5zY29wZSA9PT0gJ3RyYW5zaWVudCcpIGJpbmRpbmcuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIuc2NvcGUgPT09ICdyZXF1ZXN0JykgYmluZGluZy5pblJlcXVlc3RTY29wZSgpO1xuICAgICAgICAgICAgZWxzZSBiaW5kaW5nLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgfSBlbHNlIGlmICgndXNlRXhpc3RpbmcnIGluIHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb250YWluZXIuYmluZChwcm92aWRlci5wcm92aWRlKS50b1NlcnZpY2UocHJvdmlkZXIudXNlRXhpc3RpbmcpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgRHluYW1pY01vZHVsZSwgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29udHJvbGxlciwgQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIH0gZnJvbSAnLi4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBNb2R1bGUsIE1vZHVsZU1ldGFkYXRhUmVhZGVyIH0gZnJvbSAnLi4vbW9kdWxlJztcbmltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBUcmVlLCBUcmVlTm9kZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTW9kdWxlTWV0YWRhdGEgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kdWxlVHJlZVNjYW5uZXIge1xuICAgIEBpbmplY3QoTW9kdWxlTWV0YWRhdGFSZWFkZXIpIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlTWV0YWRhdGFSZWFkZXI6IE1vZHVsZU1ldGFkYXRhUmVhZGVyO1xuICAgIEBpbmplY3QoQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlcjogQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyO1xuICAgIEBpbmplY3QoTE9HR0VSX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcblxuICAgIHB1YmxpYyBhc3luYyBzY2FuKGNsYXNzUmVmOiBOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4pIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgLy8gUmVhZCBtb2R1bGUgbWV0YWRhdGFcbiAgICAgICAgY29uc3QgbW9kdWxlTWV0YWRhdGEgPSBhd2FpdCB0aGlzLm1vZHVsZU1ldGFkYXRhUmVhZGVyLnJlYWQoY2xhc3NSZWYpO1xuICAgICAgICAvLyBDcmVhdGUgbW9kdWxlIGluc3RhbmNlIGFuZCBzZXQgbWV0YWRhdGEgdG8gaXRcbiAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IE1vZHVsZSgpO1xuICAgICAgICBtb2R1bGUubWV0YWRhdGEgPSBtb2R1bGVNZXRhZGF0YTtcbiAgICAgICAgLy8gTG9nIG1vZHVsZSBpbmZvXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35zY2FubmVkIH5sa34oJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Db250cm9sbGVycyhtb2R1bGUpO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBjb25zdCBtb2R1bGVUcmVlID0gbmV3IFRyZWUobW9kdWxlKTtcbiAgICAgICAgY29uc3Qgc2Nhbm5lZE1vZHVsZXMgPSBuZXcgTWFwPE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPiwgTW9kdWxlPigpO1xuICAgICAgICBzY2FubmVkTW9kdWxlcy5zZXQoY2xhc3NSZWYsIG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gaW1wb3J0ZWQgbW9kdWxlc1xuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydGVkTW9kdWxlIG9mIG1vZHVsZU1ldGFkYXRhLmltcG9ydHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2Nhbk1vZHVsZXMobW9kdWxlVHJlZS5yb290LCBpbXBvcnRlZE1vZHVsZSwgc2Nhbm5lZE1vZHVsZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2R1bGVUcmVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2Nhbk1vZHVsZXMoXG4gICAgICAgIHBhcmVudE5vZGU6IFRyZWVOb2RlPE1vZHVsZT4sXG4gICAgICAgIGNsYXNzUmVmOiBOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4sXG4gICAgICAgIHNjYW5uZWRNb2R1bGVzID0gbmV3IE1hcDxOZXdhYmxlIHwgRHluYW1pY01vZHVsZSB8IFByb21pc2U8RHluYW1pY01vZHVsZT4sIE1vZHVsZT4oKSxcbiAgICApIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgbW9kdWxlIGlzIGFscmVhZHkgaW1wb3J0ZWRcbiAgICAgICAgY29uc3Qgc2Nhbm5lZE1vZHVsZSA9IHNjYW5uZWRNb2R1bGVzLmdldChjbGFzc1JlZik7XG4gICAgICAgIGlmICghaXNOaWwoc2Nhbm5lZE1vZHVsZSkpIHtcbiAgICAgICAgICAgIHBhcmVudE5vZGUudmFsdWUucmVwZXRpdGl2ZUltcG9ydHMuYWRkKHNjYW5uZWRNb2R1bGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAvLyBSZWFkIG1vZHVsZSBtZXRhZGF0YVxuICAgICAgICBjb25zdCBtb2R1bGVNZXRhZGF0YSA9IGF3YWl0IHRoaXMubW9kdWxlTWV0YWRhdGFSZWFkZXIucmVhZChjbGFzc1JlZik7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgY2lyY3VsYXIgZGVwZW5kZW5jeVxuICAgICAgICB0aGlzLmNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5KHBhcmVudE5vZGUudmFsdWUubWV0YWRhdGEsIG1vZHVsZU1ldGFkYXRhKTtcbiAgICAgICAgLy8gQ3JlYXRlIG1vZHVsZSBpbnN0YW5jZVxuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgTW9kdWxlKCk7XG4gICAgICAgIG1vZHVsZS5tZXRhZGF0YSA9IG1vZHVsZU1ldGFkYXRhO1xuICAgICAgICBtb2R1bGUucGFyZW50ID0gcGFyZW50Tm9kZS52YWx1ZTtcbiAgICAgICAgLy8gTG9nIG1vZHVsZSBpbmZvXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35Nb2R1bGUgfmxifiR7bW9kdWxlLm1ldGFkYXRhLmNsYXNzUmVmLm5hbWV9IH5sd35zY2FubmVkIH5sa34oJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zKWApO1xuICAgICAgICAvLyBTY2FuIGNvbnRyb2xsZXJzIGluIG1vZHVsZVxuICAgICAgICBhd2FpdCB0aGlzLnNjYW5Db250cm9sbGVycyhtb2R1bGUpO1xuICAgICAgICAvLyBBZGQgbW9kdWxlIHRvIHRyZWVcbiAgICAgICAgY29uc3QgdHJlZU5vZGUgPSBuZXcgVHJlZU5vZGUobW9kdWxlKTtcbiAgICAgICAgcGFyZW50Tm9kZS5hZGRDaGlsZCh0cmVlTm9kZSk7XG4gICAgICAgIC8vIEFkZCBtb2R1bGUgdG8gaW1wb3J0ZWQgbW9kdWxlcyBzZXQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBzY2FubmluZ1xuICAgICAgICBzY2FubmVkTW9kdWxlcy5zZXQoY2xhc3NSZWYsIG1vZHVsZSk7XG4gICAgICAgIC8vIFNjYW4gaW1wb3J0ZWQgbW9kdWxlcyByZWN1cnNpdmVseVxuICAgICAgICBmb3IgKGNvbnN0IGltcG9ydE1vZHVsZSBvZiBtb2R1bGVNZXRhZGF0YS5pbXBvcnRzKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNjYW5Nb2R1bGVzKHRyZWVOb2RlLCBpbXBvcnRNb2R1bGUsIHNjYW5uZWRNb2R1bGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2NhbkNvbnRyb2xsZXJzKG1vZHVsZTogTW9kdWxlKSB7XG4gICAgICAgIC8vIFNjYW4gY29udHJvbGxlcnNcbiAgICAgICAgZm9yIChjb25zdCBjbGFzc1JlZiBvZiBtb2R1bGUubWV0YWRhdGEuY29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sbGVyTWV0YWRhdGEgPSBhd2FpdCB0aGlzLmNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlci5yZWFkKGNsYXNzUmVmKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgY29udHJvbGxlci5tZXRhZGF0YSA9IGNvbnRyb2xsZXJNZXRhZGF0YTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIub3duZXIgPSBtb2R1bGU7XG4gICAgICAgICAgICBtb2R1bGUuY29udHJvbGxlcnMucHVzaChjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhgfmx3fkNvbnRyb2xsZXIgfmxjfiR7Y2xhc3NSZWYubmFtZX0gfmx3fnNjYW5uZWQgfmxrfigke0RhdGUubm93KCkgLSBzdGFydFRpbWV9bXMpYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5KHBhcmVudE1ldGFkYXRhOiBNb2R1bGVNZXRhZGF0YSwgbW9kdWxlTWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHBhcmVudCBtb2R1bGUgaXMgaW1wb3J0ZWQgaW4gbW9kdWxlXG4gICAgICAgIGlmIChtb2R1bGVNZXRhZGF0YS5pbXBvcnRzLmluY2x1ZGVzKHBhcmVudE1ldGFkYXRhLmNsYXNzUmVmKSkge1xuICAgICAgICAgICAgLy8gdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBzY2FubmluZyB0aGUgbW9kdWxlIHRyZWUuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkNpcmN1bGFyRGVwZW5kZW5jeURldGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QU2NyaXB0RXZlbnQgaW1wbGVtZW50cyBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQsXG4gICAgKSB7fVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSh0aGlzLmV2ZW50TmFtZSwgdGhpcy5saXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgRXZlbnRFbW1pdGVyLCBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJhZ2VNUFNjcmlwdEV2ZW50IH0gZnJvbSAnLi9yYWdlbXAtc2NyaXB0LWV2ZW50LWhhbmRsZXInO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QRXZlbnRFbW1pdGVyIGltcGxlbWVudHMgRXZlbnRFbW1pdGVyIHtcbiAgICBwcml2YXRlIG1hcEV2ZW50c1NoYXJlZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgLy8gTWFwIGFsdDpWIGV2ZW50IG5hbWVzIHRvIFJhZ2VNUCBlcXVpdmFsZW50c1xuICAgICAgICAnZW50aXR5Q29sU2hhcGVFbnRlcic6ICdwbGF5ZXJFbnRlckNvbHNoYXBlJyxcbiAgICAgICAgJ2VudGl0eUNvbFNoYXBlTGVhdmUnOiAncGxheWVyRXhpdENvbHNoYXBlJyxcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXBFdmVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSkge31cblxuICAgIHByaXZhdGUgZ2V0RXZlbnROYW1lKGV2ZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwRXZlbnRzU2hhcmVkW2V2ZW50TmFtZV0gfHwgdGhpcy5tYXBFdmVudHNbZXZlbnROYW1lXSB8fCBldmVudE5hbWU7XG4gICAgfVxuXG4gICAgZW1pdChldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLmNhbGwoZXZlbnROYW1lLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50TmFtZSA9IHRoaXMuZ2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICAgIG1wLmV2ZW50cy5hZGQobWFwcGVkRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2NyaXB0RXZlbnQobWFwcGVkRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgb25jZShldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50TmFtZSA9IHRoaXMuZ2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICAgIGNvbnN0IG9uY2VXcmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKG1hcHBlZEV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICAgICAgbGlzdGVuZXIoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIG1wLmV2ZW50cy5hZGQobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2NyaXB0RXZlbnQobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgfVxuXG4gICAgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgTXVsdGlwbGF5ZXJUaW1lciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgUmFnZU1QVGltZXIgaW1wbGVtZW50cyBNdWx0aXBsYXllclRpbWVyIHtcbiAgICBwdWJsaWMgbGFzdFRpY2sgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgaWQ6IG51bWJlcixcbiAgICAgICAgcHVibGljIGludGVydmFsOiBudW1iZXIgPSAwLFxuICAgICAgICBwdWJsaWMgb25jZTogYm9vbGVhbixcbiAgICAgICAgcHVibGljIGNhbGxiYWNrOiBGdW5jdGlvbixcbiAgICAgICAgcHJpdmF0ZSBjbGVhclRpbWVyOiBGdW5jdGlvbixcbiAgICApIHt9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNsZWFyVGltZXIoKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBNdWx0aXBsYXllclRpbWVyLCBNdWx0aXBsYXllclRpbWVycyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QVGltZXIgfSBmcm9tICcuL3JhZ2VtcC10aW1lcic7XG5cbmV4cG9ydCBjbGFzcyBSYWdlTVBUaW1lcnMgaW1wbGVtZW50cyBNdWx0aXBsYXllclRpbWVycyB7XG4gICAgcHJpdmF0ZSB0aW1lckluY3JlbWVudGVyOiBudW1iZXIgPSAwO1xuICAgIHByaXZhdGUgdGltZXJzID0gbmV3IE1hcDxudW1iZXIsIE11bHRpcGxheWVyVGltZXI+KCk7XG4gICAgcHJpdmF0ZSBldmVyeVRpY2tIYW5kbGVycyA9IG5ldyBNYXA8bnVtYmVyLCB7IGNhbGxiYWNrOiBGdW5jdGlvbjsgYm91bmQ6IEZ1bmN0aW9uIH0+KCk7XG4gICAgcHJpdmF0ZSBpc0V2ZXJ5VGlja1J1bm5pbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGV2ZXJ5VGlja01haW5IYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBnZXQgYWxsKCk6IE11bHRpcGxheWVyVGltZXJbXSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy50aW1lcnMudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgd2FybmluZ1RocmVzaG9sZCgpOiBudW1iZXIge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIHRoaXMgZmVhdHVyZVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHdhcm5pbmdUaHJlc2hvbGQoX3ZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSB0aGlzIGZlYXR1cmVcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSB0aGlzIGZlYXR1cmVcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KF92YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgdGhpcyBmZWF0dXJlXG4gICAgfVxuXG4gICAgZ2V0QnlJRChpZDogbnVtYmVyKTogTXVsdGlwbGF5ZXJUaW1lciB8IG51bGwge1xuICAgICAgICBjb25zdCB0aW1lciA9IHRoaXMudGltZXJzLmdldChpZCk7XG4gICAgICAgIHJldHVybiB0aW1lciA/PyBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVGltZXIoXG4gICAgICAgIGNyZWF0ZVRpbWVyOiAoLi4uYXJnczogYW55W10pID0+IG51bWJlcixcbiAgICAgICAgY2xlYXI6IChpZDogbnVtYmVyKSA9PiB2b2lkLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb24sXG4gICAgICAgIGludGVydmFsOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgICAgIG9uY2U6IGJvb2xlYW4sXG4gICAgICAgIC4uLmFyZ3M6IHVua25vd25bXVxuICAgICkge1xuICAgICAgICBjb25zdCBjYWxsYmFja0JpbmQgPSBjYWxsYmFjay5iaW5kKHRoaXMsIC4uLihBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFtdKSk7XG4gICAgICAgIGNvbnN0IHRpbWVySWQgPSB0eXBlb2YgaW50ZXJ2YWwgPT09ICdudW1iZXInID8gY3JlYXRlVGltZXIoY2FsbGJhY2tCaW5kLCBpbnRlcnZhbCkgOiBjcmVhdGVUaW1lcihjYWxsYmFja0JpbmQpO1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMudGltZXJJbmNyZW1lbnRlcisrO1xuXG4gICAgICAgIGNvbnN0IHJhZ2VNUFRpbWVyID0gbmV3IFJhZ2VNUFRpbWVyKGlkLCBpbnRlcnZhbCA/PyAwLCBvbmNlLCBjYWxsYmFja0JpbmQsICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyKHRpbWVySWQpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgfVxuXG4gICAgc2V0SW50ZXJ2YWwoY2FsbGJhY2s6IEZ1bmN0aW9uLCB0aW1lOiBudW1iZXIsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUaW1lcihcbiAgICAgICAgICAgIChjYjogRnVuY3Rpb24sIGludGVydmFsOiBudW1iZXIpID0+IHNldEludGVydmFsKGNiIGFzICgpID0+IHZvaWQsIGludGVydmFsKSBhcyB1bmtub3duIGFzIG51bWJlcixcbiAgICAgICAgICAgIChpZDogbnVtYmVyKSA9PiBjbGVhckludGVydmFsKGlkKSxcbiAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgdGltZSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoY2FsbGJhY2s6IEZ1bmN0aW9uLCB0aW1lOiBudW1iZXIsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMudGltZXJJbmNyZW1lbnRlcisrO1xuICAgICAgICBjb25zdCBjYWxsYmFja0JpbmQgPSBjYWxsYmFjay5iaW5kKHRoaXMsIC4uLihBcnJheS5pc0FycmF5KGFyZ3MpID8gYXJncyA6IFtdKSk7XG5cbiAgICAgICAgY29uc3QgdGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2tCaW5kKCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xuICAgICAgICB9LCB0aW1lKSBhcyB1bmtub3duIGFzIG51bWJlcjtcblxuICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgdGltZSwgdHJ1ZSwgY2FsbGJhY2tCaW5kLCAoKSA9PiB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50aW1lcnMuc2V0KGlkLCByYWdlTVBUaW1lcik7XG4gICAgICAgIHJldHVybiByYWdlTVBUaW1lcjtcbiAgICB9XG5cbiAgICBldmVyeVRpY2soY2FsbGJhY2s6IEZ1bmN0aW9uLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuXG4gICAgICAgIHRoaXMuZXZlcnlUaWNrSGFuZGxlcnMuc2V0KGlkLCB7IGNhbGxiYWNrLCBib3VuZDogY2FsbGJhY2tCaW5kIH0pO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uIGNsaWVudC1zaWRlIChyZW5kZXIgZXZlbnQgZXhpc3RzKSBvciBzZXJ2ZXItc2lkZVxuICAgICAgICBjb25zdCBpc0NsaWVudFNpZGUgPSB0eXBlb2YgbXAgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiAobXAgYXMgYW55KS5icm93c2VycyAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAgICAgLy8gU3RhcnQgdGhlIHRpY2sgbG9vcCBpZiBub3QgYWxyZWFkeSBydW5uaW5nXG4gICAgICAgIGlmICghdGhpcy5pc0V2ZXJ5VGlja1J1bm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFdmVyeVRpY2tSdW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGlzQ2xpZW50U2lkZSkge1xuICAgICAgICAgICAgICAgIC8vIENsaWVudC1zaWRlOiB1c2UgcmVuZGVyIGV2ZW50IGZvciBmcmFtZS1hY2N1cmF0ZSB0aWNraW5nXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVyeVRpY2tNYWluSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbLCBoYW5kbGVyXSBvZiB0aGlzLmV2ZXJ5VGlja0hhbmRsZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuYm91bmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcC5jb25zb2xlLmxvZ0Vycm9yKGBFcnJvciBpbiBldmVyeVRpY2sgaGFuZGxlcjogJHtlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBtcC5ldmVudHMuYWRkKCdyZW5kZXInLCB0aGlzLmV2ZXJ5VGlja01haW5IYW5kbGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyLXNpZGU6IHVzZSBzZXRJbnRlcnZhbCB3aXRoIG1pbmltYWwgZGVsYXkgYXMgYXBwcm94aW1hdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGludGVydmFsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbLCBoYW5kbGVyXSBvZiB0aGlzLmV2ZXJ5VGlja0hhbmRsZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuYm91bmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcC5jb25zb2xlLmxvZ0Vycm9yKGBFcnJvciBpbiBldmVyeVRpY2sgaGFuZGxlcjogJHtlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAodGhpcyBhcyBhbnkpLl9ldmVyeVRpY2tJbnRlcnZhbCA9IHNldEludGVydmFsKGludGVydmFsSGFuZGxlciwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByYWdlTVBUaW1lciA9IG5ldyBSYWdlTVBUaW1lcihpZCwgMCwgZmFsc2UsIGNhbGxiYWNrQmluZCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ldmVyeVRpY2tIYW5kbGVycy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcblxuICAgICAgICAgICAgLy8gU3RvcCB0aGUgdGljayBsb29wIGlmIG5vIG1vcmUgaGFuZGxlcnNcbiAgICAgICAgICAgIGlmICh0aGlzLmV2ZXJ5VGlja0hhbmRsZXJzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNDbGllbnRTaWRlICYmIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbXAuZXZlbnRzLnJlbW92ZSgncmVuZGVyJywgdGhpcy5ldmVyeVRpY2tNYWluSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXZlcnlUaWNrTWFpbkhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHRoaXMgYXMgYW55KS5fZXZlcnlUaWNrSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCgodGhpcyBhcyBhbnkpLl9ldmVyeVRpY2tJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgICh0aGlzIGFzIGFueSkuX2V2ZXJ5VGlja0ludGVydmFsID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pc0V2ZXJ5VGlja1J1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGltZXJzLnNldChpZCwgcmFnZU1QVGltZXIpO1xuICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgfVxuXG4gICAgbmV4dFRpY2soY2FsbGJhY2s6IEZ1bmN0aW9uLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnRpbWVySW5jcmVtZW50ZXIrKztcbiAgICAgICAgY29uc3QgY2FsbGJhY2tCaW5kID0gY2FsbGJhY2suYmluZCh0aGlzLCAuLi4oQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MgOiBbXSkpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIG9uIGNsaWVudC1zaWRlIChyZW5kZXIgZXZlbnQgZXhpc3RzKSBvciBzZXJ2ZXItc2lkZVxuICAgICAgICBjb25zdCBpc0NsaWVudFNpZGUgPSB0eXBlb2YgbXAgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiAobXAgYXMgYW55KS5icm93c2VycyAhPT0gJ3VuZGVmaW5lZCc7XG5cbiAgICAgICAgbGV0IHRpbWVySWQ6IGFueTtcblxuICAgICAgICBpZiAoaXNDbGllbnRTaWRlKSB7XG4gICAgICAgICAgICAvLyBDbGllbnQtc2lkZTogdXNlIHJlbmRlciBldmVudCBmb3IgbmV4dCBmcmFtZVxuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0JpbmQoKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKCdyZW5kZXInLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbXAuZXZlbnRzLmFkZCgncmVuZGVyJywgaGFuZGxlcik7XG5cbiAgICAgICAgICAgIGNvbnN0IHJhZ2VNUFRpbWVyID0gbmV3IFJhZ2VNUFRpbWVyKGlkLCAwLCB0cnVlLCBjYWxsYmFja0JpbmQsICgpID0+IHtcbiAgICAgICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKCdyZW5kZXInLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVycy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnRpbWVycy5zZXQoaWQsIHJhZ2VNUFRpbWVyKTtcbiAgICAgICAgICAgIHJldHVybiByYWdlTVBUaW1lcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNlcnZlci1zaWRlOiB1c2Ugc2V0SW1tZWRpYXRlIG9yIHNldFRpbWVvdXQoMCkgZm9yIG5leHQgdGlja1xuICAgICAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrQmluZCgpO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZXJzLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgMCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJhZ2VNUFRpbWVyID0gbmV3IFJhZ2VNUFRpbWVyKGlkLCAwLCB0cnVlLCBjYWxsYmFja0JpbmQsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lcnMuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50aW1lcnMuc2V0KGlkLCByYWdlTVBUaW1lcik7XG4gICAgICAgICAgICByZXR1cm4gcmFnZU1QVGltZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aW1lKF9uYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgY29uc29sZS50aW1lIGVxdWl2YWxlbnRcbiAgICAgICAgLy8gQ291bGQgaW1wbGVtZW50IGN1c3RvbSB0aW1pbmcgaWYgbmVlZGVkXG4gICAgfVxuXG4gICAgdGltZUVuZChfbmFtZT86IHN0cmluZykge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGNvbnNvbGUudGltZUVuZCBlcXVpdmFsZW50XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgRXZlbnRFbW1pdGVyLCBNdWx0aXBsYXllclNlcnZpY2UsIE11bHRpcGxheWVyVGltZXJzIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSYWdlTVBFdmVudEVtbWl0ZXIgfSBmcm9tICcuL3JhZ2VtcC1ldmVudC1lbW1pdGVyJztcbmltcG9ydCB7IFJhZ2VNUFRpbWVycyB9IGZyb20gJy4vcmFnZW1wLXRpbWVycyc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIFJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBpbXBsZW1lbnRzIE11bHRpcGxheWVyU2VydmljZSB7XG4gICAgcmVhZG9ubHkgVGltZXJzOiBNdWx0aXBsYXllclRpbWVycztcbiAgICByZWFkb25seSBFdmVudHM6IEV2ZW50RW1taXRlcjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLkV2ZW50cyA9IG5ldyBSYWdlTVBFdmVudEVtbWl0ZXIoKTtcbiAgICAgICAgdGhpcy5UaW1lcnMgPSBuZXcgUmFnZU1QVGltZXJzKCk7XG4gICAgfVxuXG4gICAgcGFyc2VJbnRlcm5hbEFyZ3M8VSA9IHVua25vd24sIFQgPSB1bmtub3duPihcbiAgICAgICAgLi4uYXJnczogYW55XG4gICAgKToge1xuICAgICAgICBwbGF5ZXI/OiBVO1xuICAgICAgICBib2R5PzogVDtcbiAgICB9IHtcbiAgICAgICAgY29uc3QgcGxheWVyID0gKGlzT2JqZWN0KGFyZ3NbMF0pID8gYXJnc1swXSA6IHVuZGVmaW5lZCkgYXMgVTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGxheWVyLFxuICAgICAgICAgICAgYm9keTogYXJncyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBsb2coYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIG1wLmNvbnNvbGUubG9nSW5mbyhtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBsb2dFcnJvcihhcmc6IGFueSwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IFthcmcsIC4uLmFyZ3NdLm1hcChhID0+XG4gICAgICAgICAgICB0eXBlb2YgYSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShhKSA6IFN0cmluZyhhKVxuICAgICAgICApLmpvaW4oJyAnKTtcbiAgICAgICAgbXAuY29uc29sZS5sb2dFcnJvcihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBsb2dXYXJuaW5nKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBtcC5jb25zb2xlLmxvZ1dhcm5pbmcobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgbG9nRGVidWcoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCBkb2Vzbid0IGhhdmUgYSBkZWRpY2F0ZWQgZGVidWcgbG9nLCB1c2UgaW5mb1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBtcC5jb25zb2xlLmxvZ0luZm8oYFtERUJVR10gJHttZXNzYWdlfWApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyB2YWxpZGF0ZUVycm9yRmlsdGVyLCB2YWxpZGF0ZUd1YXJkLCB2YWxpZGF0ZUludGVyY2VwdG9yLCB2YWxpZGF0ZVBpcGUgfSBmcm9tICcuLi9zY2hlbWFzL2V2ZW50cyc7XG5pbXBvcnQge1xuICAgIElOVEVSTkFMX0FQUF9DT05UQUlORVIsXG4gICAgR0xPQkFMX0VSUk9SX0ZJTFRFUlMsXG4gICAgR0xPQkFMX0dVQVJEUyxcbiAgICBHTE9CQUxfSU5URVJDRVBUT1JTLFxuICAgIEdMT0JBTF9QSVBFUyxcbiAgICBFTkFCTEVfU0hVVERPV05fSE9PS1MsXG4gICAgUExVR0lOUyxcbiAgICBHTE9CQUxfQVBQX0NPTlRBSU5FUixcbiAgICBBUFBfRU5WSVJPTUVOVCxcbiAgICBNQU5HT19SRVFVRVNUX0ZBQ1RPUlksXG4gICAgTUFOR09fUkVTUE9OU0VfRkFDVE9SWSxcbiAgICBFWEVDVVRJT05fQ09OVEVYVF9GQUNUT1JZLFxuICAgIENPTlRBSU5FUl9PUFRJT05TLFxuICAgIE1VTFRJUExBWUVSX1NFUlZJQ0UsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGluamVjdCwgQ29udGFpbmVyLCBpbmplY3RhYmxlLCB0eXBlIGludGVyZmFjZXMgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQXBwIH0gZnJvbSAnLi9hcHAnO1xuaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciwgR3VhcmQsIEludGVyY2VwdG9yLCBNYW5nb1BsdWdpbiwgTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgICBDb250cm9sbGVyRXZlbnRIYW5kbGVyLFxuICAgIENvbnRyb2xsZXJGbG93SGFuZGxlcixcbiAgICBDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIsXG4gICAgQ29udHJvbGxlclJQQ0hhbmRsZXIsXG4gICAgUGlwZWxpbmVIYW5kbGVyLFxufSBmcm9tICcuL2NvbnRyb2xsZXInO1xuaW1wb3J0IHsgTW9kdWxlLCBNb2R1bGVNZXRhZGF0YVJlYWRlciB9IGZyb20gJy4vbW9kdWxlJztcbmltcG9ydCB7IEFwcFJ1bnRpbWUsIE1vZHVsZURlcGVuZGVuY3lCaW5kZXIsIE1vZHVsZVRyZWVTY2FubmVyIH0gZnJvbSAnLi9tb2R1bGUtdHJlZSc7XG5pbXBvcnQgeyBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IEV4ZWN1dGlvbkNvbnRleHRCYXNlLCBNYW5nb1JlcXVlc3RCYXNlLCBNYW5nb1Jlc3BvbnNlQmFzZSB9IGZyb20gJy4vcGlwZWxpbmUnO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25Db250ZXh0VHlwZSB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgUkVGTEVDVE9SX1NFUlZJQ0UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUmVmbGVjdG9yU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcEJ1aWxkZXI8RyBleHRlbmRzIEd1YXJkID0gR3VhcmQsIEkgZXh0ZW5kcyBJbnRlcmNlcHRvciA9IEludGVyY2VwdG9yLCBFRiBleHRlbmRzIEVycm9yRmlsdGVyID0gRXJyb3JGaWx0ZXI+IHtcbiAgICBAaW5qZWN0KEFQUF9FTlZJUk9NRU5UKSBwcm90ZWN0ZWQgcmVhZG9ubHkgZW52aXJvbWVudDogc3RyaW5nO1xuICAgIEBpbmplY3QoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikgcHJvdGVjdGVkIHJlYWRvbmx5IGludGVybmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBwcm90ZWN0ZWQgcmVhZG9ubHkgbXVsdGlwbGF5ZXJTZXJ2aWNlOiBNdWx0aXBsYXllclNlcnZpY2U7XG4gICAgQGluamVjdChQTFVHSU5TKSBwcm90ZWN0ZWQgcmVhZG9ubHkgcGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXTtcblxuICAgIHByaXZhdGUgZ2xvYmFsQ29udGFpbmVyT3B0aW9uczogaW50ZXJmYWNlcy5Db250YWluZXJPcHRpb25zID0ge307XG5cbiAgICBwdWJsaWMgdXNlR2xvYmFsR3VhcmRzKC4uLmd1YXJkczogKE5ld2FibGU8Rz4gfCBHKVtdKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEd1YXJkczogKE5ld2FibGU8Rz4gfCBHKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ3VhcmQgb2YgZ3VhcmRzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlR3VhcmQoZ3VhcmQpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEd1YXJkcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfR1VBUkRTKS50b0NvbnN0YW50VmFsdWUodmFsaWRhdGVkR3VhcmRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZUdsb2JhbEludGVyY2VwdG9ycyguLi5pbnRlcmNlcHRvcnM6IChOZXdhYmxlPEk+IHwgSSlbXSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRJbnRlcmNlcHRvcnM6IChOZXdhYmxlPEk+IHwgSSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGludGVyY2VwdG9yIG9mIGludGVyY2VwdG9ycykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUludGVyY2VwdG9yKGludGVyY2VwdG9yKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRJbnRlcmNlcHRvcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0lOVEVSQ0VQVE9SUykudG9Db25zdGFudFZhbHVlKHZhbGlkYXRlZEludGVyY2VwdG9ycyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VHbG9iYWxQaXBlcyguLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChHTE9CQUxfUElQRVMpLnRvQ29uc3RhbnRWYWx1ZSh2YWxpZGF0ZWRQaXBlcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VHbG9iYWxGaWx0ZXJzKC4uLmZpbHRlcnM6IChOZXdhYmxlPEVGPiB8IEVGKVtdKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEZJbHRlcnM6IChOZXdhYmxlPEVGPiB8IEVGKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVFcnJvckZpbHRlcihmaWx0ZXIpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZEZJbHRlcnMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0VSUk9SX0ZJTFRFUlMpLnRvQ29uc3RhbnRWYWx1ZSh2YWxpZGF0ZWRGSWx0ZXJzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHVzZVBsdWdpbnMoLi4ucGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXSkge1xuICAgICAgICBwbHVnaW5zLmZvckVhY2goKHApID0+IHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChwKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCkpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbFBsdWdpbnMgPSB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmdldDxOZXdhYmxlPE1hbmdvUGx1Z2luPltdPihQTFVHSU5TKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5yZWJpbmQoUExVR0lOUykudG9Db25zdGFudFZhbHVlKFsuLi5pbnRlcm5hbFBsdWdpbnMsIC4uLnBsdWdpbnNdKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGVuYWJsZVNodXRkb3duSG9va3MoKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChFTkFCTEVfU0hVVERPV05fSE9PS1MpLnRvQ29uc3RhbnRWYWx1ZSh0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldENvbnRhaW5lck9wdGlvbnMob3B0aW9uczogaW50ZXJmYWNlcy5Db250YWluZXJPcHRpb25zLCBvbmx5R2xvYmFsID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxDb250YWluZXJPcHRpb25zID0gb3B0aW9ucztcbiAgICAgICAgaWYgKG9ubHlHbG9iYWwpIHJldHVybiB0aGlzO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ09OVEFJTkVSX09QVElPTlMpLnRvQ29uc3RhbnRWYWx1ZShvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkKCkge1xuICAgICAgICBjb25zdCBnbG9iYWxBcHBDb250YWluZXIgPSBuZXcgQ29udGFpbmVyKHRoaXMuZ2xvYmFsQ29udGFpbmVyT3B0aW9ucyk7XG4gICAgICAgIC8vIEdMb2JhbCBzZXJ2aWNlIGJpbmRpbmdzXG4gICAgICAgIGdsb2JhbEFwcENvbnRhaW5lci5iaW5kKFJFRkxFQ1RPUl9TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUoUmVmbGVjdG9yU2VydmljZSk7XG4gICAgICAgIGdsb2JhbEFwcENvbnRhaW5lci5iaW5kKFJlZmxlY3RvclNlcnZpY2UpLnRvU2VydmljZShSRUZMRUNUT1JfU0VSVklDRSk7XG5cbiAgICAgICAgLy8gTXVsdGlwbGF5ZXIgc2VydmljZSBiaW5kaW5nc1xuICAgICAgICBnbG9iYWxBcHBDb250YWluZXIuYmluZChNVUxUSVBMQVlFUl9TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUodGhpcy5tdWx0aXBsYXllclNlcnZpY2UpO1xuIFxuICAgICAgICAvLyBBcHAgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEFwcCkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0FQUF9DT05UQUlORVIpLnRvQ29uc3RhbnRWYWx1ZShnbG9iYWxBcHBDb250YWluZXIpO1xuXG4gICAgICAgIC8vIE1vZHVsZSB0cmVlIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNb2R1bGVUcmVlU2Nhbm5lcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTW9kdWxlRGVwZW5kZW5jeUJpbmRlcikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQXBwUnVudGltZSkudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuXG4gICAgICAgIC8vIEFwcCBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoUGlwZWxpbmVIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgLy8gTW9kdWxlIGJpbmRpbmdzXG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChNb2R1bGUpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1vZHVsZU1ldGFkYXRhUmVhZGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgLy8gQ29udHJvbGxlciBiaW5kaW5nc1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlcikudG9TZWxmKCkuaW5UcmFuc2llbnRTY29wZSgpO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChDb250cm9sbGVyRmxvd0hhbmRsZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXJFdmVudEhhbmRsZXIpLnRvU2VsZigpLmluU2luZ2xldG9uU2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKENvbnRyb2xsZXJSUENIYW5kbGVyKS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgLy8gTWFuZ28gUmVxdWVzdCBhbmQgUmVzcG9uc2UgYmluZGluZ3NcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1hbmdvUmVxdWVzdEJhc2UpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1BTkdPX1JFUVVFU1RfRkFDVE9SWSkudG9GYWN0b3J5KChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKGJvZHk6IHVua25vd24sIHBsYXllcjogUGxheWVyTXApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gY29udGV4dC5jb250YWluZXIuZ2V0KE1hbmdvUmVxdWVzdEJhc2UpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuJGJvZHkgPSBib2R5O1xuICAgICAgICAgICAgICAgIHJlcXVlc3QuJHBsYXllciA9IHBsYXllcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTWFuZ29SZXNwb25zZUJhc2UpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKE1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkpLnRvRmFjdG9yeSgoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jb250YWluZXIuZ2V0KE1hbmdvUmVzcG9uc2VCYXNlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoRXhlY3V0aW9uQ29udGV4dEJhc2UpLnRvU2VsZigpLmluVHJhbnNpZW50U2NvcGUoKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkpLnRvRmFjdG9yeSgoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0eXBlOiBFeGVjdXRpb25Db250ZXh0VHlwZSxcbiAgICAgICAgICAgICAgICBjbGFzc1JlZjogTmV3YWJsZSxcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBGdW5jdGlvbixcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiBNYW5nb1JlcXVlc3RCYXNlLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlOiBNYW5nb1Jlc3BvbnNlQmFzZSxcbiAgICAgICAgICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGVjdXRpb25Db250ZXh0ID0gY29udGV4dC5jb250YWluZXIuZ2V0KEV4ZWN1dGlvbkNvbnRleHRCYXNlKTtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiR0eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRyZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICAgICAgICAgICAgICBleGVjdXRpb25Db250ZXh0LiRyZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJGhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbkNvbnRleHQuJGNsYXNzUmVmID0gY2xhc3NSZWY7XG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uQ29udGV4dC4kbmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBQbHVnaW5zIGJpbmRpbmdzXG4gICAgICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHRoaXMucGx1Z2lucykge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKHBsdWdpbikudG9TZWxmKCkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICAgICAgY29uc3QgcGx1Z2luSW5zdGFuY2UgPSB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmdldChwbHVnaW4pO1xuICAgICAgICAgICAgaWYgKCFwbHVnaW5JbnN0YW5jZS5vbkJ1aWxkKSBjb250aW51ZTtcbiAgICAgICAgICAgIGF3YWl0IHBsdWdpbkluc3RhbmNlLm9uQnVpbGQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5pc0JvdW5kKEdMT0JBTF9HVUFSRFMpKSB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0dVQVJEUykudG9Db25zdGFudFZhbHVlKFtdKTtcbiAgICAgICAgaWYgKCF0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmlzQm91bmQoR0xPQkFMX0lOVEVSQ0VQVE9SUykpXG4gICAgICAgICAgICB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoR0xPQkFMX0lOVEVSQ0VQVE9SUykudG9Db25zdGFudFZhbHVlKFtdKTtcbiAgICAgICAgaWYgKCF0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmlzQm91bmQoR0xPQkFMX1BJUEVTKSkgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9QSVBFUykudG9Db25zdGFudFZhbHVlKFtdKTtcbiAgICAgICAgaWYgKCF0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmlzQm91bmQoR0xPQkFMX0VSUk9SX0ZJTFRFUlMpKVxuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKEdMT0JBTF9FUlJPUl9GSUxURVJTKS50b0NvbnN0YW50VmFsdWUoW10pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQXBwQ29udGFpbmVyLmdldChBcHApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBDb250YWluZXIsIGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBNb2R1bGVEZXBlbmRlbmN5QmluZGVyLCBNb2R1bGVUcmVlU2Nhbm5lciB9IGZyb20gJy4vbW9kdWxlLXRyZWUnO1xuaW1wb3J0IHsgTW9kdWxlIH0gZnJvbSAnLi9tb2R1bGUvbW9kdWxlJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IElOVEVSTkFMX0FQUF9DT05UQUlORVIsIFBMVUdJTlMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBSdW50aW1lIH0gZnJvbSAnLi9tb2R1bGUtdHJlZSc7XG5pbXBvcnQgdHlwZSB7IE1hbmdvUGx1Z2luIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvcmUvbWFuZ28tcGx1Z2luLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFRyZWUgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHR5cGUgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBwIHtcbiAgICBAaW5qZWN0KE1vZHVsZVRyZWVTY2FubmVyKSBwcml2YXRlIHJlYWRvbmx5IG1vZHVsZVRyZWVTY2FubmVyOiBNb2R1bGVUcmVlU2Nhbm5lcjtcbiAgICBAaW5qZWN0KE1vZHVsZURlcGVuZGVuY3lCaW5kZXIpIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlRGVwZW5kZW5jeUJpbmRlcjogTW9kdWxlRGVwZW5kZW5jeUJpbmRlcjtcbiAgICBAaW5qZWN0KEFwcFJ1bnRpbWUpIHByaXZhdGUgcmVhZG9ubHkgYXBwUnVudGltZTogQXBwUnVudGltZTtcbiAgICBAaW5qZWN0KElOVEVSTkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJuYWxBcHBDb250YWluZXI6IENvbnRhaW5lcjtcbiAgICBAaW5qZWN0KFBMVUdJTlMpIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luczogTmV3YWJsZTxNYW5nb1BsdWdpbj5bXTtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgcHJpdmF0ZSBtb2R1bGVUcmVlOiBUcmVlPE1vZHVsZT47XG4gICAgcHJpdmF0ZSBsb2FkZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBhc3luYyBzdGFydDxUPihyb290TW9kdWxlOiBOZXdhYmxlPFQ+KSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBzdGFydGluZyB0aGUgYXBwLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BcHBBbHJlYWR5TG9hZGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+U3RhcnRpbmcgYXBwLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYmVmb3JlU3RhcnQnKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+U2Nhbm5pbmcgbW9kdWxlIHRyZWUuLi4nKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdiZWZvcmVTY2FuJyk7XG4gICAgICAgIHRoaXMubW9kdWxlVHJlZSA9IGF3YWl0IHRoaXMubW9kdWxlVHJlZVNjYW5uZXIuc2Nhbihyb290TW9kdWxlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlclNjYW4nKTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKCd+bHd+QmluZGluZyBtb2R1bGUgZGVwZW5kZW5jaWVzLi4uJyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYmVmb3JlQmluZCcpO1xuICAgICAgICBhd2FpdCB0aGlzLm1vZHVsZURlcGVuZGVuY3lCaW5kZXIuYmluZCh0aGlzLm1vZHVsZVRyZWUpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2FmdGVyQmluZCcpO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35Mb2FkaW5nIGFwcC4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZUxvYWQnKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBSdW50aW1lLmJvb3QodGhpcy5tb2R1bGVUcmVlKTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2FmdGVyTG9hZCcpO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coJ35sd35BcHAgbG9hZGVkJyk7XG5cbiAgICAgICAgYXdhaXQgdGhpcy5ydW5QbHVnaW5NZXRob2RzKCdhZnRlclN0YXJ0Jyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHN0b3AoKSB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignRXJyb3Igb2NjdXJyZWQgd2hpbGUgc3RvcHBpbmcgdGhlIGFwcC4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXBwTm90TG9hZGVkKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLnJ1blBsdWdpbk1ldGhvZHMoJ2JlZm9yZVN0b3AnKTtcbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3flN0b3BwaW5nIGFwcC4uLicpO1xuICAgICAgICBhd2FpdCB0aGlzLmFwcFJ1bnRpbWUuc2h1dGRvd24odGhpcy5tb2R1bGVUcmVlKTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygnfmx3fkFwcCBzdG9wcGVkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuUGx1Z2luTWV0aG9kcygnYWZ0ZXJTdG9wJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBydW5QbHVnaW5NZXRob2RzKG1ldGhvZDoga2V5b2YgTWFuZ29QbHVnaW4pIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICB0aGlzLnBsdWdpbnMubWFwKGFzeW5jIChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5nZXQocCk7XG4gICAgICAgICAgICAgICAgaWYgKCFwbHVnaW5bbWV0aG9kXSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGx1Z2luW21ldGhvZF0hKCkpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTUVOVCwgSU5URVJOQUxfQVBQX0NPTlRBSU5FUiwgTVVMVElQTEFZRVJfU0VSVklDRSwgUExVR0lOUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWFuZ29QbHVnaW4sIE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IEFwcEVudmlyb21lbnQgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB0eXBlIHsgQXBwQnVpbGRlciB9IGZyb20gJy4vYXBwLWJ1aWxkZXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwQnVpbGRlcjxUIGV4dGVuZHMgQXBwQnVpbGRlcj4oe1xuICAgIGVudmlyb21lbnQsXG4gICAgcGx1Z2lucyxcbiAgICBhcHBCdWlsZGVySW5oZXJpdCxcbiAgICBtdWx0aXBsYXllclNlcnZpY2UsXG59OiB7XG4gICAgZW52aXJvbWVudDogQXBwRW52aXJvbWVudDtcbiAgICBwbHVnaW5zOiBOZXdhYmxlPE1hbmdvUGx1Z2luPltdO1xuICAgIGFwcEJ1aWxkZXJJbmhlcml0OiBOZXdhYmxlPFQ+O1xuICAgIG11bHRpcGxheWVyU2VydmljZT86IE11bHRpcGxheWVyU2VydmljZTtcbn0pIHtcbiAgICBjb25zdCBpbnRlcm5hbEFwcENvbnRhaW5lciA9IG5ldyBDb250YWluZXIoKTtcblxuICAgIGlmIChtdWx0aXBsYXllclNlcnZpY2UpIGludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoTVVMVElQTEFZRVJfU0VSVklDRSkudG9Db25zdGFudFZhbHVlKG11bHRpcGxheWVyU2VydmljZSk7XG4gICAgaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChJTlRFUk5BTF9BUFBfQ09OVEFJTkVSKS50b0NvbnN0YW50VmFsdWUoaW50ZXJuYWxBcHBDb250YWluZXIpO1xuICAgIGludGVybmFsQXBwQ29udGFpbmVyLmJpbmQoQVBQX0VOVklST01FTlQpLnRvQ29uc3RhbnRWYWx1ZShlbnZpcm9tZW50KTtcbiAgICBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFBMVUdJTlMpLnRvQ29uc3RhbnRWYWx1ZShwbHVnaW5zKTtcbiAgICBpbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKGFwcEJ1aWxkZXJJbmhlcml0KS50b1NlbGYoKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICByZXR1cm4gaW50ZXJuYWxBcHBDb250YWluZXIuZ2V0KGFwcEJ1aWxkZXJJbmhlcml0KTtcbn1cbiIsICJpbXBvcnQgeyBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXksIHR5cGUgRXZlbnRNZXRhZGF0YSwgdHlwZSBQaXBlbGluZU1ldGFkYXRhIH0gZnJvbSAnLi4vYXBwJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKHR5cGU6IEV2ZW50TWV0YWRhdGFbJ3R5cGUnXSwgbmFtZT86IHN0cmluZywgd2ViVmlld0lkPzogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIDxNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbChuYW1lKSAmJiAhaXNTdHJpbmcobmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuRXZlbnROYW1lTXVzdEJlU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBuYW1lID8/IG1ldGhvZDtcblxuICAgICAgICBjb25zdCBldmVudHMgPVxuICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxPbWl0PEV2ZW50TWV0YWRhdGEsICdwYXJhbXMnIHwga2V5b2YgUGlwZWxpbmVNZXRhZGF0YT5bXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJFdmVudHMsIHRhcmdldCkgPz8gW107XG5cbiAgICAgICAgaWYgKGV2ZW50cy5zb21lKChldmVudCkgPT4gZXZlbnQubWV0aG9kID09PSBtZXRob2QgJiYgZXZlbnQubmFtZSA9PT0gbmFtZSAmJiBldmVudC50eXBlID09PSB0eXBlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5FdmVudE5hbWVNdXN0QmVVbmlxdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxPbWl0PEV2ZW50TWV0YWRhdGEsICdwYXJhbXMnIHwga2V5b2YgUGlwZWxpbmVNZXRhZGF0YT5bXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlckV2ZW50cyxcbiAgICAgICAgICAgIFsuLi5ldmVudHMsIHsgbWV0aG9kLCBuYW1lLCB0eXBlLCB3ZWJWaWV3SWQgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uSW50ZXJuYWwoZXZlbnROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uSW50ZXJuYWwnLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXcoaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbldlYlZpZXcnLCBldmVudE5hbWUsIGlkKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT24oZXZlbnROYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbicsIGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtZXZlbnQtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VJbnRlcm5hbChldmVudE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVFdmVudERlY29yYXRvcignb25jZUludGVybmFsJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ldmVudC1kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZShldmVudE5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uY2UnLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZUV2ZW50RGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLWV2ZW50LWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2ViVmlldyhpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uY2VXZWJWaWV3JywgZXZlbnROYW1lLCBpZCk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBCb2R5KC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRQaXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgcGlwZSBvZiBwaXBlcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkUGlwZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCBwaXBlczogdmFsaWRhdGVkUGlwZXMsIHR5cGU6IE1ldGhvZFBhcmFtVHlwZS5Cb2R5LCBkYXRhOiB1bmRlZmluZWQsIG1ldGF0eXBlIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbmRleChrZXk6IG51bWJlciwgLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkge1xuICAgIHJldHVybiA8UGFyYW1ldGVyRGVjb3JhdG9yPigodGFyZ2V0OiBPYmplY3QsIG1ldGhvZDogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICghaXNOdW1iZXIoa2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbmRleEtleU11c3RCZU51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgcGlwZXM6IHZhbGlkYXRlZFBpcGVzLCB0eXBlOiBNZXRob2RQYXJhbVR5cGUuSW5kZXgsIGRhdGE6IGtleSwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWV0aG9kUGFyYW1UeXBlIH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIDxQYXJhbWV0ZXJEZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICBpZiAocGFyYW1zLnNvbWUoKHBhcmFtKSA9PiBwYXJhbS5pbmRleCA9PT0gaW5kZXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLk11bHRpcGxlRGVjb3JhdG9yc09uU2luZ2xlUGFyYW1ldGVyTm90QWxsb3dlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhbVR5cGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlW10+KCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCwgbWV0aG9kKTtcbiAgICAgICAgY29uc3QgbWV0YXR5cGUgPSBBcnJheS5pc0FycmF5KHBhcmFtVHlwZXMpID8gcGFyYW1UeXBlc1tpbmRleF0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcyxcbiAgICAgICAgICAgIFsuLi5wYXJhbXMsIHsgaW5kZXgsIG1ldGhvZCwgdHlwZTogTWV0aG9kUGFyYW1UeXBlLlJlcXVlc3QsIGRhdGE6IHVuZGVmaW5lZCwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXEoKSB7XG4gICAgcmV0dXJuIFJlcXVlc3QoKTtcbn1cbiIsICJpbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHR5cGUgeyBOZXdhYmxlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBNZXRob2RQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZXRob2RQYXJhbVR5cGUgfSBmcm9tICcuLi8uLi9hcHAvZW51bXMnO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4uLy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gUGFyYW0oa2V5OiBzdHJpbmcsIC4uLnBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10pIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoIWlzU3RyaW5nKGtleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUGFyYW1LZXlNdXN0QmVTdHJpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZFBpcGVzOiAoTmV3YWJsZTxQaXBlPiB8IFBpcGUpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHZhbGlkLCB2YWx1ZSwgZXJyb3IgfSA9IHZhbGlkYXRlUGlwZShwaXBlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLCB0YXJnZXQsIG1ldGhvZCkgPz8gW107XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5NdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgIGNvbnN0IG1ldGF0eXBlID0gQXJyYXkuaXNBcnJheShwYXJhbVR5cGVzKSA/IHBhcmFtVHlwZXNbaW5kZXhdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGE8TWV0aG9kUGFyYW1ldGVyW10+KFxuICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICBbLi4ucGFyYW1zLCB7IGluZGV4LCBtZXRob2QsIGRhdGE6IGtleSwgcGlwZXM6IHZhbGlkYXRlZFBpcGVzLCB0eXBlOiBNZXRob2RQYXJhbVR5cGUuUGFyYW0sIG1ldGF0eXBlIH1dLFxuICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICApO1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE1ldGhvZFBhcmFtZXRlciB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXNwb25zZSgpIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCB0eXBlOiBNZXRob2RQYXJhbVR5cGUuUmVzcG9uc2UsIGRhdGE6IHVuZGVmaW5lZCwgbWV0YXR5cGUgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZXMoKSB7XG4gICAgcmV0dXJuIFJlc3BvbnNlKCk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBHdWFyZCB9IGZyb20gJy4uLy4uL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IHZhbGlkYXRlR3VhcmQgfSBmcm9tICcuLi8uLi9zY2hlbWFzJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUd1YXJkcyguLi5ndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdKSB7XG4gICAgcmV0dXJuIDxDbGFzc0RlY29yYXRvciAmIE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q/OiBzdHJpbmcsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkR3VhcmRzOiAoTmV3YWJsZTxHdWFyZD4gfCBHdWFyZClbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGd1YXJkIG9mIGd1YXJkcykge1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZUd1YXJkKGd1YXJkKTtcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB2YWxpZGF0ZWRHdWFyZHMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmlsKGRlc2NyaXB0b3IpICYmICFpc05pbChkZXNjcmlwdG9yLnZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKGd1YXJkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWV0aG9kR3VhcmRzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEd1YXJkPltdPihDb3JlTWV0YWRhdGFLZXkuR3VhcmRzLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCkgfHwgW107XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIFsuLi52YWxpZGF0ZWRHdWFyZHMsIC4uLm1ldGhvZEd1YXJkc10sIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKTtcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGd1YXJkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUd1YXJkUmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xhc3NHdWFyZHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8R3VhcmQ+W10+KENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIHRhcmdldCkgfHwgW107XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5Lkd1YXJkcywgWy4uLnZhbGlkYXRlZEd1YXJkcywgLi4uY2xhc3NHdWFyZHNdLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJjZXB0b3IgfSBmcm9tICcuLi8uLi9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IENvcmVNZXRhZGF0YUtleSB9IGZyb20gJy4uLy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUludGVyY2VwdG9yIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzOiAoTmV3YWJsZTxJbnRlcmNlcHRvcj4gfCBJbnRlcmNlcHRvcilbXSkge1xuICAgIHJldHVybiA8Q2xhc3NEZWNvcmF0b3IgJiBNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kPzogc3RyaW5nLCBkZXNjcmlwdG9yPzogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEludGVyY2VwdG9yczogKE5ld2FibGU8SW50ZXJjZXB0b3I+IHwgSW50ZXJjZXB0b3IpW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVJbnRlcmNlcHRvcihpbnRlcmNlcHRvcik7XG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdmFsaWRhdGVkSW50ZXJjZXB0b3JzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChkZXNjcmlwdG9yKSAmJiAhaXNOaWwoZGVzY3JpcHRvci52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChpbnRlcmNlcHRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5BdExlYXN0T25lSW50ZXJjZXB0b3JSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZEludGVyY2VwdG9ycyA9XG4gICAgICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEludGVyY2VwdG9yPltdPihDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLCB0YXJnZXQuY29uc3RydWN0b3IsIG1ldGhvZCkgfHwgW107XG4gICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFxuICAgICAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsXG4gICAgICAgICAgICAgICAgWy4uLnZhbGlkYXRlZEludGVyY2VwdG9ycywgLi4ubWV0aG9kSW50ZXJjZXB0b3JzXSxcbiAgICAgICAgICAgICAgICB0YXJnZXQuY29uc3RydWN0b3IsXG4gICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVyY2VwdG9ycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuQXRMZWFzdE9uZUludGVyY2VwdG9yUmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xhc3NJbnRlcmNlcHRvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8SW50ZXJjZXB0b3I+W10+KENvcmVNZXRhZGF0YUtleS5JbnRlcmNlcHRvcnMsIHRhcmdldCkgfHwgW107XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LkludGVyY2VwdG9ycywgWy4uLnZhbGlkYXRlZEludGVyY2VwdG9ycywgLi4uY2xhc3NJbnRlcmNlcHRvcnNdLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vLi4vYXBwL2VudW1zJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgUGlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQaXBlIH0gZnJvbSAnLi4vLi4vc2NoZW1hcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBVc2VQaXBlcyguLi5waXBlczogKE5ld2FibGU8UGlwZT4gfCBQaXBlKVtdKSB7XG4gICAgcmV0dXJuIDxDbGFzc0RlY29yYXRvciAmIE1ldGhvZERlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q/OiBzdHJpbmcsIGRlc2NyaXB0b3I/OiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHBpcGUgb2YgcGlwZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdmFsaWQsIHZhbHVlLCBlcnJvciB9ID0gdmFsaWRhdGVQaXBlKHBpcGUpO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBpcGVzLnB1c2godmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05pbChkZXNjcmlwdG9yKSAmJiAhaXNOaWwoZGVzY3JpcHRvci52YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChwaXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVQaXBlUmVxdWlyZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtZXRob2RQaXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxQaXBlPltdPihDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIHRhcmdldC5jb25zdHJ1Y3RvciwgbWV0aG9kKSB8fCBbXTtcbiAgICAgICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCBbLi4udmFsaWRhdGVkUGlwZXMsIC4uLm1ldGhvZFBpcGVzXSwgdGFyZ2V0LmNvbnN0cnVjdG9yLCBtZXRob2QpO1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkF0TGVhc3RPbmVQaXBlUmVxdWlyZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xhc3NQaXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZTxQaXBlPltdPihDb3JlTWV0YWRhdGFLZXkuUGlwZXMsIHRhcmdldCkgfHwgW107XG4gICAgICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoQ29yZU1ldGFkYXRhS2V5LlBpcGVzLCBbLi4udmFsaWRhdGVkUGlwZXMsIC4uLmNsYXNzUGlwZXNdLCB0YXJnZXQpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0pO1xufVxuIiwgImltcG9ydCB7IGlzTmlsLCBpc051bWJlciwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXksIHR5cGUgUGlwZWxpbmVNZXRhZGF0YSwgdHlwZSBSUENNZXRhZGF0YSB9IGZyb20gJy4uL2FwcCc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9lbnVtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSUENEZWNvcmF0b3IodHlwZTogUlBDTWV0YWRhdGFbJ3R5cGUnXSwgbmFtZT86IHN0cmluZywgd2ViVmlld0lkPzogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgcmV0dXJuIDxNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbCh3ZWJWaWV3SWQpICYmICFpc1N0cmluZyh3ZWJWaWV3SWQpICYmICFpc051bWJlcih3ZWJWaWV3SWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLldlYlZpZXdJZE11c3RCZVN0cmluZ09yTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOaWwobmFtZSkgJiYgIWlzU3RyaW5nKG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ05hbWVNdXN0QmVTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmFtZSA9IG5hbWUgPz8gbWV0aG9kO1xuXG4gICAgICAgIGNvbnN0IHJwY3MgPVxuICAgICAgICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YTxPbWl0PFJQQ01ldGFkYXRhLCAncGFyYW1zJyB8IGtleW9mIFBpcGVsaW5lTWV0YWRhdGE+W10+KENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUlBDcywgdGFyZ2V0KSA/PyBbXTtcblxuICAgICAgICBpZiAocnBjcy5zb21lKChycGMpID0+IHJwYy5tZXRob2QgPT09IG1ldGhvZCAmJiBycGMubmFtZSA9PT0gbmFtZSAmJiBycGMudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuUlBDTmFtZU11c3RCZVVuaXF1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE9taXQ8UlBDTWV0YWRhdGEsICdwYXJhbXMnIHwga2V5b2YgUGlwZWxpbmVNZXRhZGF0YT5bXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclJQQ3MsXG4gICAgICAgICAgICBbLi4ucnBjcywgeyBtZXRob2QsIG5hbWUsIHR5cGUsIHdlYlZpZXdJZCB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVSUENEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtcnBjLWRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblJlcXVlc3QocnBjTmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVSUENEZWNvcmF0b3IoJ29uUmVxdWVzdCcsIHJwY05hbWUpO1xufVxuIiwgImltcG9ydCB7IGNyZWF0ZVJQQ0RlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS1ycGMtZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlld1JlcXVlc3QoaWQ6IHN0cmluZyB8IG51bWJlciwgcnBjTmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiBjcmVhdGVSUENEZWNvcmF0b3IoJ29uV2ViVmlld1JlcXVlc3QnLCBycGNOYW1lLCBpZCk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5LCB0eXBlIFRpbWVyTWV0YWRhdGEgfSBmcm9tICcuLi9hcHAnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vZW51bXMnO1xuaW1wb3J0IHsgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGltZXJEZWNvcmF0b3IodHlwZTogVGltZXJNZXRhZGF0YVsndHlwZSddLCBuYW1lPzogc3RyaW5nLCBvcHRpb25zPzogVGltZXJNZXRhZGF0YVsnb3B0aW9ucyddKSB7XG4gICAgcmV0dXJuIDxNZXRob2REZWNvcmF0b3I+KCh0YXJnZXQ6IE9iamVjdCwgbWV0aG9kOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKCFpc05pbChuYW1lKSAmJiAhaXNTdHJpbmcobmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuVGltZXJOYW1lTXVzdEJlU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWUgPSBuYW1lID8/IG1ldGhvZDtcblxuICAgICAgICBjb25zdCB0aW1lcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPFRpbWVyTWV0YWRhdGFbXT4oQ29yZU1ldGFkYXRhS2V5LlRpbWVycywgdGFyZ2V0KSA/PyBbXTtcblxuICAgICAgICBpZiAodGltZXJzLnNvbWUoKHRpbWVyKSA9PiB0aW1lci5tZXRob2QgPT09IG1ldGhvZCAmJiB0aW1lci5uYW1lID09PSBuYW1lICYmIHRpbWVyLnR5cGUgPT09IHR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkV2ZW50TmFtZU11c3RCZVVuaXF1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPFRpbWVyTWV0YWRhdGFbXT4oXG4gICAgICAgICAgICBDb3JlTWV0YWRhdGFLZXkuVGltZXJzLFxuICAgICAgICAgICAgWy4uLnRpbWVycywgPFRpbWVyTWV0YWRhdGE+eyBtZXRob2QsIG5hbWUsIHR5cGUsIG9wdGlvbnMgfV0sXG4gICAgICAgICAgICB0YXJnZXQsXG4gICAgICAgICk7XG4gICAgfSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBDcm9uT3B0aW9ucyB9IGZyb20gJ2Nyb25lcic7XG5pbXBvcnQgeyBjcmVhdGVUaW1lckRlY29yYXRvciB9IGZyb20gJy4uL2NyZWF0ZS10aW1lci5kZWNvcmF0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gQ3JvbihwYXR0ZXJuOiBzdHJpbmcgfCBEYXRlLCBvcHRpb25zOiBDcm9uT3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRpbWVyRGVjb3JhdG9yKCdjcm9uJywgb3B0aW9ucy5uYW1lLCB7IHBhdHRlcm4sIC4uLm9wdGlvbnMgfSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlVGltZXJEZWNvcmF0b3IgfSBmcm9tICcuLi9jcmVhdGUtdGltZXIuZGVjb3JhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZXJ5VGljayhuYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVRpbWVyRGVjb3JhdG9yKCdldmVyeXRpY2snLCBuYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVRpbWVyRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXRpbWVyLmRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBJbnRlcnZhbCh0aW1lb3V0OiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gSW50ZXJ2YWwobmFtZTogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gSW50ZXJ2YWwobmFtZU9yVGltZW91dDogc3RyaW5nIHwgbnVtYmVyLCB0aW1lb3V0PzogbnVtYmVyKTogTWV0aG9kRGVjb3JhdG9yIHtcbiAgICBjb25zdCBbbmFtZSwgaW50ZXJ2YWxUaW1lb3V0XSA9IGlzU3RyaW5nKG5hbWVPclRpbWVvdXQpID8gW25hbWVPclRpbWVvdXQsIHRpbWVvdXRdIDogW3VuZGVmaW5lZCwgbmFtZU9yVGltZW91dF07XG4gICAgcmV0dXJuIGNyZWF0ZVRpbWVyRGVjb3JhdG9yKCdpbnRlcnZhbCcsIG5hbWUsIHsgdGltZW91dDogaW50ZXJ2YWxUaW1lb3V0ISB9KTtcbn1cbiIsICJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IGNyZWF0ZVRpbWVyRGVjb3JhdG9yIH0gZnJvbSAnLi4vY3JlYXRlLXRpbWVyLmRlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lb3V0KHRpbWVvdXQ6IG51bWJlcik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBUaW1lb3V0KG5hbWU6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBUaW1lb3V0KG5hbWVPclRpbWVvdXQ6IHN0cmluZyB8IG51bWJlciwgdGltZW91dD86IG51bWJlcik6IE1ldGhvZERlY29yYXRvciB7XG4gICAgY29uc3QgW25hbWUsIGludGVydmFsVGltZW91dF0gPSBpc1N0cmluZyhuYW1lT3JUaW1lb3V0KSA/IFtuYW1lT3JUaW1lb3V0LCB0aW1lb3V0XSA6IFt1bmRlZmluZWQsIG5hbWVPclRpbWVvdXRdO1xuICAgIHJldHVybiBjcmVhdGVUaW1lckRlY29yYXRvcigndGltZW91dCcsIG5hbWUsIHsgdGltZW91dDogaW50ZXJ2YWxUaW1lb3V0ISB9KTtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gYXBwbHlEZWNvcmF0b3JzKC4uLmRlY29yYXRvcnM6IChDbGFzc0RlY29yYXRvciB8IE1ldGhvZERlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yKVtdKSB7XG4gICAgcmV0dXJuIDxURnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiwgWT4oXG4gICAgICAgIHRhcmdldDogVEZ1bmN0aW9uIHwgT2JqZWN0LFxuICAgICAgICBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLFxuICAgICAgICBkZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxZPixcbiAgICApID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBkZWNvcmF0b3Igb2YgZGVjb3JhdG9ycykge1xuICAgICAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmICFkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgKDxDbGFzc0RlY29yYXRvcj5kZWNvcmF0b3IpKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoPE1ldGhvZERlY29yYXRvciB8IFByb3BlcnR5RGVjb3JhdG9yPmRlY29yYXRvcikodGFyZ2V0LCBwcm9wZXJ0eUtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXhlY3V0aW9uQ29udGV4dCwgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnLi4vYXBwL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5IH0gZnJvbSAnLi4vYXBwL2VudW1zJztcbmltcG9ydCB0eXBlIHsgTmV3YWJsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE1ldGhvZFBhcmFtVHlwZSB9IGZyb20gJy4uL2FwcC9lbnVtcyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHZhbGlkYXRlUGlwZSB9IGZyb20gJy4uL3NjaGVtYXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyYW1EZWNvcmF0b3I8VElucHV0ID0gdW5rbm93biwgVE91dHB1dCA9IHVua25vd24+KGZhY3Rvcnk6IChkYXRhOiBUSW5wdXQsIGN0eDogRXhlY3V0aW9uQ29udGV4dCkgPT4gVE91dHB1dCkge1xuICAgIHJldHVybiA8VElucHV0ID0gdW5rbm93bj4oZGF0YT86IFRJbnB1dCwgLi4ucGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSkgPT4ge1xuICAgICAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkUGlwZXM6IChOZXdhYmxlPFBpcGU+IHwgUGlwZSlbXSA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwaXBlIG9mIHBpcGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZCwgdmFsdWUsIGVycm9yIH0gPSB2YWxpZGF0ZVBpcGUocGlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZWRQaXBlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsIHRhcmdldCwgbWV0aG9kKSA/PyBbXTtcblxuICAgICAgICAgICAgaWYgKHBhcmFtcy5zb21lKChwYXJhbSkgPT4gcGFyYW0uaW5kZXggPT09IGluZGV4KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGFyYW1UeXBlcyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8TmV3YWJsZVtdPignZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQsIG1ldGhvZCk7XG4gICAgICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YTxNZXRob2RQYXJhbWV0ZXJbXT4oXG4gICAgICAgICAgICAgICAgQ29yZU1ldGFkYXRhS2V5LkNvbnRyb2xsZXJQYXJhbXMsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGlwZXM6IHZhbGlkYXRlZFBpcGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogTWV0aG9kUGFyYW1UeXBlLkN1c3RvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY3Rvcnk6IDwoZGF0YTogdW5rbm93biwgY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCkgPT4gdW5rbm93bj5mYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF0eXBlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0LFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHsgTGF6eVNlcnZpY2VJZGVudGlmZXIsIHR5cGUgaW50ZXJmYWNlcyB9IGZyb20gJ2ludmVyc2lmeSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkUmVmPFQgPSB1bmtub3duPihmbjogKCkgPT4gaW50ZXJmYWNlcy5TZXJ2aWNlSWRlbnRpZmllcjxUPikge1xuICAgIHJldHVybiBuZXcgTGF6eVNlcnZpY2VJZGVudGlmZXI8VD4oZm4pO1xufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IENyb24sIHR5cGUgQ3Jvbk9wdGlvbnMgfSBmcm9tICdjcm9uZXInO1xuaW1wb3J0IHsgTVVMVElQTEFZRVJfU0VSVklDRSwgdHlwZSBNdWx0aXBsYXllclNlcnZpY2UsIHR5cGUgTXVsdGlwbGF5ZXJUaW1lciB9IGZyb20gJy4uL2FwcCc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaW1lclNlcnZpY2Uge1xuICAgIEBpbmplY3QoTVVMVElQTEFZRVJfU0VSVklDRSkgcHJpdmF0ZSByZWFkb25seSBtdWx0aXBsYXllclNlcnZpY2U6IE11bHRpcGxheWVyU2VydmljZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICRldmVyeXRpY2tzID0gbmV3IE1hcDxzdHJpbmcsIE11bHRpcGxheWVyVGltZXI+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkaW50ZXJ2YWxzID0gbmV3IE1hcDxzdHJpbmcsIE11bHRpcGxheWVyVGltZXI+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkdGltZW91dHMgPSBuZXcgTWFwPHN0cmluZywgTXVsdGlwbGF5ZXJUaW1lcj4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICRjcm9ucyA9IG5ldyBNYXA8c3RyaW5nLCBDcm9uPigpO1xuXG4gICAgcHVibGljIGdldCBhbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuYWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXZlcnl0aWNrcygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLiRldmVyeXRpY2tzLnZhbHVlcygpXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGludGVydmFscygpIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLiRpbnRlcnZhbHMudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGltZW91dHMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kdGltZW91dHMudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3JvbnMoKSB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy4kY3JvbnMudmFsdWVzKCldO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgd2FybmluZ1RocmVzaG9sZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy53YXJuaW5nVGhyZXNob2xkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB3YXJuaW5nVGhyZXNob2xkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLndhcm5pbmdUaHJlc2hvbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBzb3VyY2VMb2NhdGlvbkZyYW1lU2tpcENvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLnNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuc291cmNlTG9jYXRpb25GcmFtZVNraXBDb3VudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlQ3JvbkpvYihjYWxsYmFjazogRnVuY3Rpb24sIG9wdGlvbnM6IENyb25PcHRpb25zICYgeyBwYXR0ZXJuOiBzdHJpbmcgfCBEYXRlIH0pIHtcbiAgICAgICAgY29uc3QgeyBwYXR0ZXJuLCAuLi5jcm9uT3B0aW9ucyB9ID0gb3B0aW9ucztcblxuICAgICAgICBjb25zdCBjcm9uID0gQ3JvbihwYXR0ZXJuLCBjcm9uT3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucy5uYW1lKSkgdGhpcy4kY3JvbnMuc2V0KG9wdGlvbnMubmFtZSwgY3Jvbik7XG5cbiAgICAgICAgcmV0dXJuIGNyb247XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUludGVydmFsKGNhbGxiYWNrOiBGdW5jdGlvbiwgaW50ZXJ2YWw6IG51bWJlciwgbmFtZT86IHN0cmluZykge1xuICAgICAgICBjb25zdCB0aW1lciA9IHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5zZXRJbnRlcnZhbChjYWxsYmFjaywgaW50ZXJ2YWwpO1xuICAgICAgICBpZiAoaXNTdHJpbmcobmFtZSkpIHRoaXMuJGludGVydmFscy5zZXQobmFtZSwgdGltZXIpO1xuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZVRpbWVvdXQoY2FsbGJhY2s6IEZ1bmN0aW9uLCB0aW1lb3V0OiBudW1iZXIsIG5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdGltZXIgPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMuc2V0VGltZW91dChjYWxsYmFjaywgdGltZW91dCk7XG4gICAgICAgIGlmIChpc1N0cmluZyhuYW1lKSkgdGhpcy4kdGltZW91dHMuc2V0KG5hbWUsIHRpbWVyKTtcbiAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVFdmVyeVRpY2soY2FsbGJhY2s6IEZ1bmN0aW9uLCBuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWVyID0gdGhpcy5tdWx0aXBsYXllclNlcnZpY2UuVGltZXJzLmV2ZXJ5VGljayhjYWxsYmFjayk7XG4gICAgICAgIGlmIChpc1N0cmluZyhuYW1lKSkgdGhpcy4kZXZlcnl0aWNrcy5zZXQobmFtZSwgdGltZXIpO1xuICAgICAgICByZXR1cm4gdGltZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZSh0eXBlOiAnY3JvbicgfCAnZXZlcnl0aWNrJyB8ICd0aW1lb3V0JyB8ICdpbnRlcnZhbCcsIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Nyb24nOlxuICAgICAgICAgICAgICAgIGNvbnN0IGNyb25Kb2IgPSB0aGlzLiRjcm9ucy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNyb25Kb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JvbkpvYi5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGNyb25zLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdldmVyeXRpY2snOlxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZXJ5dGljayA9IHRoaXMuJGV2ZXJ5dGlja3MuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChldmVyeXRpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlcnl0aWNrLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZXZlcnl0aWNrcy5kZWxldGUobmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaW50ZXJ2YWwnOlxuICAgICAgICAgICAgICAgIGNvbnN0IGludGVydmFsID0gdGhpcy4kaW50ZXJ2YWxzLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJ2YWwuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRpbnRlcnZhbHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RpbWVvdXQnOlxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLiR0aW1lb3V0cy5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHRpbWVvdXRzLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QnlOYW1lKHR5cGU6ICdjcm9uJyB8ICdldmVyeXRpY2snIHwgJ3RpbWVvdXQnIHwgJ2ludGVydmFsJywgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY3Jvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGNyb25zLmdldChuYW1lKTtcbiAgICAgICAgICAgIGNhc2UgJ2V2ZXJ5dGljayc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJGV2ZXJ5dGlja3MuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgY2FzZSAnaW50ZXJ2YWwnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRpbnRlcnZhbHMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHRpbWVvdXRzLmdldChuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRCeUlkKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLlRpbWVycy5nZXRCeUlEKGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdGltZShuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMudGltZShuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdGltZUVuZChuYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxheWVyU2VydmljZS5UaW1lcnMudGltZUVuZChuYW1lKTtcbiAgICB9XG59XG4iLCAiZnVuY3Rpb24gbWluaXR6KHksbSxkLGgsaSxzLHR6LHRocm93T25JbnZhbGlkKXtyZXR1cm4gbWluaXR6LmZyb21UWihtaW5pdHoudHAoeSxtLGQsaCxpLHMsdHopLHRocm93T25JbnZhbGlkKX1taW5pdHouZnJvbVRaSVNPPShsb2NhbFRpbWVTdHIsdHosdGhyb3dPbkludmFsaWQpPT57cmV0dXJuIG1pbml0ei5mcm9tVFoocGFyc2VJU09Mb2NhbChsb2NhbFRpbWVTdHIsdHopLHRocm93T25JbnZhbGlkKX07bWluaXR6LmZyb21UWj1mdW5jdGlvbih0cCx0aHJvd09uSW52YWxpZCl7Y29uc3QgaW5EYXRlPW5ldyBEYXRlKERhdGUuVVRDKHRwLnksdHAubS0xLHRwLmQsdHAuaCx0cC5pLHRwLnMpKSxvZmZzZXQ9Z2V0VGltZXpvbmVPZmZzZXQodHAudHosaW5EYXRlKSxkYXRlR3Vlc3M9bmV3IERhdGUoaW5EYXRlLmdldFRpbWUoKS1vZmZzZXQpLGRhdGVPZmZzR3Vlc3M9Z2V0VGltZXpvbmVPZmZzZXQodHAudHosZGF0ZUd1ZXNzKTtpZihkYXRlT2Zmc0d1ZXNzLW9mZnNldD09PTApe3JldHVybiBkYXRlR3Vlc3N9ZWxzZXtjb25zdCBkYXRlR3Vlc3MyPW5ldyBEYXRlKGluRGF0ZS5nZXRUaW1lKCktZGF0ZU9mZnNHdWVzcyksZGF0ZU9mZnNHdWVzczI9Z2V0VGltZXpvbmVPZmZzZXQodHAudHosZGF0ZUd1ZXNzMik7aWYoZGF0ZU9mZnNHdWVzczItZGF0ZU9mZnNHdWVzcz09PTApe3JldHVybiBkYXRlR3Vlc3MyfWVsc2UgaWYoIXRocm93T25JbnZhbGlkJiZkYXRlT2Zmc0d1ZXNzMi1kYXRlT2Zmc0d1ZXNzPjApe3JldHVybiBkYXRlR3Vlc3MyfWVsc2UgaWYoIXRocm93T25JbnZhbGlkKXtyZXR1cm4gZGF0ZUd1ZXNzfWVsc2V7dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIHBhc3NlZCB0byBmcm9tVFooKVwiKX19fTttaW5pdHoudG9UWj1mdW5jdGlvbihkLHR6U3RyKXtjb25zdCBsb2NhbERhdGVTdHJpbmc9ZC50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIse3RpbWVab25lOnR6U3RyfSkucmVwbGFjZSgvW1xcdTIwMmZdLyxcIiBcIik7Y29uc3QgdGQ9bmV3IERhdGUobG9jYWxEYXRlU3RyaW5nKTtyZXR1cm57eTp0ZC5nZXRGdWxsWWVhcigpLG06dGQuZ2V0TW9udGgoKSsxLGQ6dGQuZ2V0RGF0ZSgpLGg6dGQuZ2V0SG91cnMoKSxpOnRkLmdldE1pbnV0ZXMoKSxzOnRkLmdldFNlY29uZHMoKSx0ejp0elN0cn19O21pbml0ei50cD0oeSxtLGQsaCxpLHMsdHopPT57cmV0dXJue3k6eSxtOm0sZDpkLGg6aCxpOmksczpzLHR6OnR6fX07ZnVuY3Rpb24gZ2V0VGltZXpvbmVPZmZzZXQodGltZVpvbmUsZGF0ZT1uZXcgRGF0ZSl7Y29uc3QgdHo9ZGF0ZS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIse3RpbWVab25lOnRpbWVab25lLHRpbWVab25lTmFtZTpcInNob3J0T2Zmc2V0XCJ9KS5zcGxpdChcIiBcIikuc2xpY2UoLTEpWzBdO2NvbnN0IGRhdGVTdHJpbmc9ZGF0ZS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIpLnJlcGxhY2UoL1tcXHUyMDJmXS8sXCIgXCIpO3JldHVybiBEYXRlLnBhcnNlKGAke2RhdGVTdHJpbmd9IEdNVGApLURhdGUucGFyc2UoYCR7ZGF0ZVN0cmluZ30gJHt0en1gKX1mdW5jdGlvbiBwYXJzZUlTT0xvY2FsKGR0U3RyLHR6KXtjb25zdCBwZD1uZXcgRGF0ZShEYXRlLnBhcnNlKGR0U3RyKSk7aWYoaXNOYU4ocGQpKXt0aHJvdyBuZXcgRXJyb3IoXCJtaW5pdHo6IEludmFsaWQgSVNPODYwMSBwYXNzZWQgdG8gcGFyc2VyLlwiKX1jb25zdCBzdHJpbmdFbmQ9ZHRTdHIuc3Vic3RyaW5nKDkpO2lmKGR0U3RyLmluY2x1ZGVzKFwiWlwiKXx8c3RyaW5nRW5kLmluY2x1ZGVzKFwiLVwiKXx8c3RyaW5nRW5kLmluY2x1ZGVzKFwiK1wiKSl7cmV0dXJuIG1pbml0ei50cChwZC5nZXRVVENGdWxsWWVhcigpLHBkLmdldFVUQ01vbnRoKCkrMSxwZC5nZXRVVENEYXRlKCkscGQuZ2V0VVRDSG91cnMoKSxwZC5nZXRVVENNaW51dGVzKCkscGQuZ2V0VVRDU2Vjb25kcygpLFwiRXRjL1VUQ1wiKX1lbHNle3JldHVybiBtaW5pdHoudHAocGQuZ2V0RnVsbFllYXIoKSxwZC5nZXRNb250aCgpKzEscGQuZ2V0RGF0ZSgpLHBkLmdldEhvdXJzKCkscGQuZ2V0TWludXRlcygpLHBkLmdldFNlY29uZHMoKSx0eil9fW1pbml0ei5taW5pdHo9bWluaXR6O2Z1bmN0aW9uIENyb25PcHRpb25zKG9wdGlvbnMpe2lmKG9wdGlvbnM9PT12b2lkIDApe29wdGlvbnM9e319ZGVsZXRlIG9wdGlvbnMubmFtZTtvcHRpb25zLmxlZ2FjeU1vZGU9b3B0aW9ucy5sZWdhY3lNb2RlPT09dm9pZCAwP3RydWU6b3B0aW9ucy5sZWdhY3lNb2RlO29wdGlvbnMucGF1c2VkPW9wdGlvbnMucGF1c2VkPT09dm9pZCAwP2ZhbHNlOm9wdGlvbnMucGF1c2VkO29wdGlvbnMubWF4UnVucz1vcHRpb25zLm1heFJ1bnM9PT12b2lkIDA/SW5maW5pdHk6b3B0aW9ucy5tYXhSdW5zO29wdGlvbnMuY2F0Y2g9b3B0aW9ucy5jYXRjaD09PXZvaWQgMD9mYWxzZTpvcHRpb25zLmNhdGNoO29wdGlvbnMuaW50ZXJ2YWw9b3B0aW9ucy5pbnRlcnZhbD09PXZvaWQgMD8wOnBhcnNlSW50KG9wdGlvbnMuaW50ZXJ2YWwsMTApO29wdGlvbnMudXRjT2Zmc2V0PW9wdGlvbnMudXRjT2Zmc2V0PT09dm9pZCAwP3ZvaWQgMDpwYXJzZUludChvcHRpb25zLnV0Y09mZnNldCwxMCk7b3B0aW9ucy51bnJlZj1vcHRpb25zLnVucmVmPT09dm9pZCAwP2ZhbHNlOm9wdGlvbnMudW5yZWY7aWYob3B0aW9ucy5zdGFydEF0KXtvcHRpb25zLnN0YXJ0QXQ9bmV3IENyb25EYXRlKG9wdGlvbnMuc3RhcnRBdCxvcHRpb25zLnRpbWV6b25lKX1pZihvcHRpb25zLnN0b3BBdCl7b3B0aW9ucy5zdG9wQXQ9bmV3IENyb25EYXRlKG9wdGlvbnMuc3RvcEF0LG9wdGlvbnMudGltZXpvbmUpfWlmKG9wdGlvbnMuaW50ZXJ2YWwhPT1udWxsKXtpZihpc05hTihvcHRpb25zLmludGVydmFsKSl7dGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IFN1cHBsaWVkIHZhbHVlIGZvciBpbnRlcnZhbCBpcyBub3QgYSBudW1iZXJcIil9ZWxzZSBpZihvcHRpb25zLmludGVydmFsPDApe3Rocm93IG5ldyBFcnJvcihcIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgY2FuIG5vdCBiZSBuZWdhdGl2ZVwiKX19aWYob3B0aW9ucy51dGNPZmZzZXQhPT12b2lkIDApe2lmKGlzTmFOKG9wdGlvbnMudXRjT2Zmc2V0KSl7dGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IEludmFsaWQgdmFsdWUgcGFzc2VkIGZvciB1dGNPZmZzZXQsIHNob3VsZCBiZSBudW1iZXIgcmVwcmVzZW50aW5nIG1pbnV0ZXMgb2Zmc2V0IGZyb20gVVRDLlwiKX1lbHNlIGlmKG9wdGlvbnMudXRjT2Zmc2V0PC04NzB8fG9wdGlvbnMudXRjT2Zmc2V0Pjg3MCl7dGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IHV0Y09mZnNldCBvdXQgb2YgYm91bmRzLlwiKX1pZihvcHRpb25zLnV0Y09mZnNldCE9PXZvaWQgMCYmb3B0aW9ucy50aW1lem9uZSl7dGhyb3cgbmV3IEVycm9yKFwiQ3Jvbk9wdGlvbnM6IENvbWJpbmluZyAndXRjT2Zmc2V0JyB3aXRoICd0aW1lem9uZScgaXMgbm90IGFsbG93ZWQuXCIpfX1pZihvcHRpb25zLnVucmVmIT09dHJ1ZSYmb3B0aW9ucy51bnJlZiE9PWZhbHNlKXt0aHJvdyBuZXcgRXJyb3IoXCJDcm9uT3B0aW9uczogVW5yZWYgc2hvdWxkIGJlIGVpdGhlciB0cnVlLCBmYWxzZSBvciB1bmRlZmluZWQoZmFsc2UpLlwiKX1yZXR1cm4gb3B0aW9uc31jb25zdCBMQVNUX09DQ1VSUkVOQ0U9MzI7Y29uc3QgQU5ZX09DQ1VSUkVOQ0U9MXwyfDR8OHwxNnxMQVNUX09DQ1VSUkVOQ0U7Y29uc3QgT0NDVVJSRU5DRV9CSVRNQVNLUz1bMSwyLDQsOCwxNl07ZnVuY3Rpb24gQ3JvblBhdHRlcm4ocGF0dGVybix0aW1lem9uZSl7dGhpcy5wYXR0ZXJuPXBhdHRlcm47dGhpcy50aW1lem9uZT10aW1lem9uZTt0aGlzLnNlY29uZD1BcnJheSg2MCkuZmlsbCgwKTt0aGlzLm1pbnV0ZT1BcnJheSg2MCkuZmlsbCgwKTt0aGlzLmhvdXI9QXJyYXkoMjQpLmZpbGwoMCk7dGhpcy5kYXk9QXJyYXkoMzEpLmZpbGwoMCk7dGhpcy5tb250aD1BcnJheSgxMikuZmlsbCgwKTt0aGlzLmRheU9mV2Vlaz1BcnJheSg3KS5maWxsKDApO3RoaXMubGFzdERheU9mTW9udGg9ZmFsc2U7dGhpcy5zdGFyRE9NPWZhbHNlO3RoaXMuc3RhckRPVz1mYWxzZTt0aGlzLnBhcnNlKCl9Q3JvblBhdHRlcm4ucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKCl7aWYoISh0eXBlb2YgdGhpcy5wYXR0ZXJuPT09XCJzdHJpbmdcInx8dGhpcy5wYXR0ZXJuLmNvbnN0cnVjdG9yPT09U3RyaW5nKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBQYXR0ZXJuIGhhcyB0byBiZSBvZiB0eXBlIHN0cmluZy5cIil9aWYodGhpcy5wYXR0ZXJuLmluZGV4T2YoXCJAXCIpPj0wKXRoaXMucGF0dGVybj10aGlzLmhhbmRsZU5pY2tuYW1lcyh0aGlzLnBhdHRlcm4pLnRyaW0oKTtjb25zdCBwYXJ0cz10aGlzLnBhdHRlcm4ucmVwbGFjZSgvXFxzKy9nLFwiIFwiKS5zcGxpdChcIiBcIik7aWYocGFydHMubGVuZ3RoPDV8fHBhcnRzLmxlbmd0aD42KXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IGludmFsaWQgY29uZmlndXJhdGlvbiBmb3JtYXQgKCdcIit0aGlzLnBhdHRlcm4rXCInKSwgZXhhY3RseSBmaXZlIG9yIHNpeCBzcGFjZSBzZXBhcmF0ZWQgcGFydHMgYXJlIHJlcXVpcmVkLlwiKX1pZihwYXJ0cy5sZW5ndGg9PT01KXtwYXJ0cy51bnNoaWZ0KFwiMFwiKX1pZihwYXJ0c1szXS5pbmRleE9mKFwiTFwiKT49MCl7cGFydHNbM109cGFydHNbM10ucmVwbGFjZShcIkxcIixcIlwiKTt0aGlzLmxhc3REYXlPZk1vbnRoPXRydWV9aWYocGFydHNbM109PVwiKlwiKXt0aGlzLnN0YXJET009dHJ1ZX1pZihwYXJ0c1s0XS5sZW5ndGg+PTMpcGFydHNbNF09dGhpcy5yZXBsYWNlQWxwaGFNb250aHMocGFydHNbNF0pO2lmKHBhcnRzWzVdLmxlbmd0aD49MylwYXJ0c1s1XT10aGlzLnJlcGxhY2VBbHBoYURheXMocGFydHNbNV0pO2lmKHBhcnRzWzVdPT1cIipcIil7dGhpcy5zdGFyRE9XPXRydWV9aWYodGhpcy5wYXR0ZXJuLmluZGV4T2YoXCI/XCIpPj0wKXtjb25zdCBpbml0RGF0ZT1uZXcgQ3JvbkRhdGUobmV3IERhdGUsdGhpcy50aW1lem9uZSkuZ2V0RGF0ZSh0cnVlKTtwYXJ0c1swXT1wYXJ0c1swXS5yZXBsYWNlKFwiP1wiLGluaXREYXRlLmdldFNlY29uZHMoKSk7cGFydHNbMV09cGFydHNbMV0ucmVwbGFjZShcIj9cIixpbml0RGF0ZS5nZXRNaW51dGVzKCkpO3BhcnRzWzJdPXBhcnRzWzJdLnJlcGxhY2UoXCI/XCIsaW5pdERhdGUuZ2V0SG91cnMoKSk7aWYoIXRoaXMuc3RhckRPTSlwYXJ0c1szXT1wYXJ0c1szXS5yZXBsYWNlKFwiP1wiLGluaXREYXRlLmdldERhdGUoKSk7cGFydHNbNF09cGFydHNbNF0ucmVwbGFjZShcIj9cIixpbml0RGF0ZS5nZXRNb250aCgpKzEpO2lmKCF0aGlzLnN0YXJET1cpcGFydHNbNV09cGFydHNbNV0ucmVwbGFjZShcIj9cIixpbml0RGF0ZS5nZXREYXkoKSl9dGhpcy50aHJvd0F0SWxsZWdhbENoYXJhY3RlcnMocGFydHMpO3RoaXMucGFydFRvQXJyYXkoXCJzZWNvbmRcIixwYXJ0c1swXSwwLDEpO3RoaXMucGFydFRvQXJyYXkoXCJtaW51dGVcIixwYXJ0c1sxXSwwLDEpO3RoaXMucGFydFRvQXJyYXkoXCJob3VyXCIscGFydHNbMl0sMCwxKTt0aGlzLnBhcnRUb0FycmF5KFwiZGF5XCIscGFydHNbM10sLTEsMSk7dGhpcy5wYXJ0VG9BcnJheShcIm1vbnRoXCIscGFydHNbNF0sLTEsMSk7dGhpcy5wYXJ0VG9BcnJheShcImRheU9mV2Vla1wiLHBhcnRzWzVdLDAsQU5ZX09DQ1VSUkVOQ0UpO2lmKHRoaXMuZGF5T2ZXZWVrWzddKXt0aGlzLmRheU9mV2Vla1swXT10aGlzLmRheU9mV2Vla1s3XX19O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS5wYXJ0VG9BcnJheT1mdW5jdGlvbih0eXBlLGNvbmYsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpe2NvbnN0IGFycj10aGlzW3R5cGVdO2NvbnN0IGxhc3REYXlPZk1vbnRoPXR5cGU9PT1cImRheVwiJiZ0aGlzLmxhc3REYXlPZk1vbnRoO2lmKGNvbmY9PT1cIlwiJiYhbGFzdERheU9mTW9udGgpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBjb25maWd1cmF0aW9uIGVudHJ5IFwiK3R5cGUrXCIgKFwiK2NvbmYrXCIpIGlzIGVtcHR5LCBjaGVjayBmb3IgdHJhaWxpbmcgc3BhY2VzLlwiKTtpZihjb25mPT09XCIqXCIpcmV0dXJuIGFyci5maWxsKGRlZmF1bHRWYWx1ZSk7Y29uc3Qgc3BsaXQ9Y29uZi5zcGxpdChcIixcIik7aWYoc3BsaXQubGVuZ3RoPjEpe2ZvcihsZXQgaT0wO2k8c3BsaXQubGVuZ3RoO2krKyl7dGhpcy5wYXJ0VG9BcnJheSh0eXBlLHNwbGl0W2ldLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKX19ZWxzZSBpZihjb25mLmluZGV4T2YoXCItXCIpIT09LTEmJmNvbmYuaW5kZXhPZihcIi9cIikhPT0tMSl7dGhpcy5oYW5kbGVSYW5nZVdpdGhTdGVwcGluZyhjb25mLHR5cGUsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpfWVsc2UgaWYoY29uZi5pbmRleE9mKFwiLVwiKSE9PS0xKXt0aGlzLmhhbmRsZVJhbmdlKGNvbmYsdHlwZSx2YWx1ZUluZGV4T2Zmc2V0LGRlZmF1bHRWYWx1ZSl9ZWxzZSBpZihjb25mLmluZGV4T2YoXCIvXCIpIT09LTEpe3RoaXMuaGFuZGxlU3RlcHBpbmcoY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKX1lbHNlIGlmKGNvbmYhPT1cIlwiKXt0aGlzLmhhbmRsZU51bWJlcihjb25mLHR5cGUsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpfX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLnRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycz1mdW5jdGlvbihwYXJ0cyl7Zm9yKGxldCBpPTA7aTxwYXJ0cy5sZW5ndGg7aSsrKXtjb25zdCByZVZhbGlkQ3Jvbj1pPT09NT8vW14vKjAtOSxcXC0jTF0rLzovW14vKjAtOSwtXSsvO2lmKHJlVmFsaWRDcm9uLnRlc3QocGFydHNbaV0pKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgXCIraStcIiAoXCIrcGFydHNbaV0rXCIpIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy5cIil9fX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLmhhbmRsZU51bWJlcj1mdW5jdGlvbihjb25mLHR5cGUsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpe2NvbnN0IHJlc3VsdD10aGlzLmV4dHJhY3ROdGgoY29uZix0eXBlKTtjb25zdCBpPXBhcnNlSW50KHJlc3VsdFswXSwxMCkrdmFsdWVJbmRleE9mZnNldDtpZihpc05hTihpKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBcIit0eXBlK1wiIGlzIG5vdCBhIG51bWJlcjogJ1wiK2NvbmYrXCInXCIpfXRoaXMuc2V0UGFydCh0eXBlLGkscmVzdWx0WzFdfHxkZWZhdWx0VmFsdWUpfTtDcm9uUGF0dGVybi5wcm90b3R5cGUuc2V0UGFydD1mdW5jdGlvbihwYXJ0LGluZGV4LHZhbHVlKXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMscGFydCkpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCBwYXJ0IHNwZWNpZmllZDogXCIrcGFydCl9aWYocGFydD09PVwiZGF5T2ZXZWVrXCIpe2lmKGluZGV4PT09NylpbmRleD0wO2lmKChpbmRleDwwfHxpbmRleD42KSYmaW5kZXghPT1cIkxcIil7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrOiBcIitpbmRleCl9dGhpcy5zZXROdGhXZWVrZGF5T2ZNb250aChpbmRleCx2YWx1ZSk7cmV0dXJufWlmKHBhcnQ9PT1cInNlY29uZFwifHxwYXJ0PT09XCJtaW51dGVcIil7aWYoaW5kZXg8MHx8aW5kZXg+PTYwKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBcIitwYXJ0K1wiOiBcIitpbmRleCl9fWVsc2UgaWYocGFydD09PVwiaG91clwiKXtpZihpbmRleDwwfHxpbmRleD49MjQpe3Rocm93IG5ldyBSYW5nZUVycm9yKFwiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yIFwiK3BhcnQrXCI6IFwiK2luZGV4KX19ZWxzZSBpZihwYXJ0PT09XCJkYXlcIil7aWYoaW5kZXg8MHx8aW5kZXg+PTMxKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBcIitwYXJ0K1wiOiBcIitpbmRleCl9fWVsc2UgaWYocGFydD09PVwibW9udGhcIil7aWYoaW5kZXg8MHx8aW5kZXg+PTEyKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHZhbHVlIGZvciBcIitwYXJ0K1wiOiBcIitpbmRleCl9fXRoaXNbcGFydF1baW5kZXhdPXZhbHVlfTtDcm9uUGF0dGVybi5wcm90b3R5cGUuaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmc9ZnVuY3Rpb24oY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKXtjb25zdCByZXN1bHQ9dGhpcy5leHRyYWN0TnRoKGNvbmYsdHlwZSk7Y29uc3QgbWF0Y2hlcz1yZXN1bHRbMF0ubWF0Y2goL14oXFxkKyktKFxcZCspXFwvKFxcZCspJC8pO2lmKG1hdGNoZXM9PT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHJhbmdlIHdpdGggc3RlcHBpbmc6ICdcIitjb25mK1wiJ1wiKTtsZXRbLGxvd2VyLHVwcGVyLHN0ZXBzXT1tYXRjaGVzO2xvd2VyPXBhcnNlSW50KGxvd2VyLDEwKSt2YWx1ZUluZGV4T2Zmc2V0O3VwcGVyPXBhcnNlSW50KHVwcGVyLDEwKSt2YWx1ZUluZGV4T2Zmc2V0O3N0ZXBzPXBhcnNlSW50KHN0ZXBzLDEwKTtpZihpc05hTihsb3dlcikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgbG93ZXIgcmFuZ2UgKE5hTilcIik7aWYoaXNOYU4odXBwZXIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHVwcGVyIHJhbmdlIChOYU4pXCIpO2lmKGlzTmFOKHN0ZXBzKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTilcIik7aWYoc3RlcHM9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAwXCIpO2lmKHN0ZXBzPnRoaXNbdHlwZV0ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBzdGVwcyBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG1heGltdW0gdmFsdWUgb2YgcGFydCAoXCIrdGhpc1t0eXBlXS5sZW5ndGgrXCIpXCIpO2lmKGxvd2VyPnVwcGVyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogRnJvbSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0byB2YWx1ZTogJ1wiK2NvbmYrXCInXCIpO2ZvcihsZXQgaT1sb3dlcjtpPD11cHBlcjtpKz1zdGVwcyl7dGhpcy5zZXRQYXJ0KHR5cGUsaSxyZXN1bHRbMV18fGRlZmF1bHRWYWx1ZSl9fTtDcm9uUGF0dGVybi5wcm90b3R5cGUuZXh0cmFjdE50aD1mdW5jdGlvbihjb25mLHR5cGUpe2xldCByZXN0PWNvbmY7bGV0IG50aDtpZihyZXN0LmluY2x1ZGVzKFwiI1wiKSl7aWYodHlwZSE9PVwiZGF5T2ZXZWVrXCIpe3Rocm93IG5ldyBFcnJvcihcIkNyb25QYXR0ZXJuOiBudGggKCMpIG9ubHkgYWxsb3dlZCBpbiBkYXktb2Ytd2VlayBmaWVsZFwiKX1udGg9cmVzdC5zcGxpdChcIiNcIilbMV07cmVzdD1yZXN0LnNwbGl0KFwiI1wiKVswXX1yZXR1cm5bcmVzdCxudGhdfTtDcm9uUGF0dGVybi5wcm90b3R5cGUuaGFuZGxlUmFuZ2U9ZnVuY3Rpb24oY29uZix0eXBlLHZhbHVlSW5kZXhPZmZzZXQsZGVmYXVsdFZhbHVlKXtjb25zdCByZXN1bHQ9dGhpcy5leHRyYWN0TnRoKGNvbmYsdHlwZSk7Y29uc3Qgc3BsaXQ9cmVzdWx0WzBdLnNwbGl0KFwiLVwiKTtpZihzcGxpdC5sZW5ndGghPT0yKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZTogJ1wiK2NvbmYrXCInXCIpfWNvbnN0IGxvd2VyPXBhcnNlSW50KHNwbGl0WzBdLDEwKSt2YWx1ZUluZGV4T2Zmc2V0LHVwcGVyPXBhcnNlSW50KHNwbGl0WzFdLDEwKSt2YWx1ZUluZGV4T2Zmc2V0O2lmKGlzTmFOKGxvd2VyKSl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgbG93ZXIgcmFuZ2UgKE5hTilcIil9ZWxzZSBpZihpc05hTih1cHBlcikpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHVwcGVyIHJhbmdlIChOYU4pXCIpfWlmKGxvd2VyPnVwcGVyKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IEZyb20gdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdG8gdmFsdWU6ICdcIitjb25mK1wiJ1wiKX1mb3IobGV0IGk9bG93ZXI7aTw9dXBwZXI7aSsrKXt0aGlzLnNldFBhcnQodHlwZSxpLHJlc3VsdFsxXXx8ZGVmYXVsdFZhbHVlKX19O0Nyb25QYXR0ZXJuLnByb3RvdHlwZS5oYW5kbGVTdGVwcGluZz1mdW5jdGlvbihjb25mLHR5cGUsdmFsdWVJbmRleE9mZnNldCxkZWZhdWx0VmFsdWUpe2NvbnN0IHJlc3VsdD10aGlzLmV4dHJhY3ROdGgoY29uZix0eXBlKTtjb25zdCBzcGxpdD1yZXN1bHRbMF0uc3BsaXQoXCIvXCIpO2lmKHNwbGl0Lmxlbmd0aCE9PTIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAnXCIrY29uZitcIidcIil9bGV0IHN0YXJ0PTA7aWYoc3BsaXRbMF0hPT1cIipcIil7c3RhcnQ9cGFyc2VJbnQoc3BsaXRbMF0sMTApK3ZhbHVlSW5kZXhPZmZzZXR9Y29uc3Qgc3RlcHM9cGFyc2VJbnQoc3BsaXRbMV0sMTApO2lmKGlzTmFOKHN0ZXBzKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTilcIik7aWYoc3RlcHM9PT0wKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAwXCIpO2lmKHN0ZXBzPnRoaXNbdHlwZV0ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBtYXggc3RlcHMgZm9yIHBhcnQgaXMgKFwiK3RoaXNbdHlwZV0ubGVuZ3RoK1wiKVwiKTtmb3IobGV0IGk9c3RhcnQ7aTx0aGlzW3R5cGVdLmxlbmd0aDtpKz1zdGVwcyl7dGhpcy5zZXRQYXJ0KHR5cGUsaSxyZXN1bHRbMV18fGRlZmF1bHRWYWx1ZSl9fTtDcm9uUGF0dGVybi5wcm90b3R5cGUucmVwbGFjZUFscGhhRGF5cz1mdW5jdGlvbihjb25mKXtyZXR1cm4gY29uZi5yZXBsYWNlKC8tc3VuL2dpLFwiLTdcIikucmVwbGFjZSgvc3VuL2dpLFwiMFwiKS5yZXBsYWNlKC9tb24vZ2ksXCIxXCIpLnJlcGxhY2UoL3R1ZS9naSxcIjJcIikucmVwbGFjZSgvd2VkL2dpLFwiM1wiKS5yZXBsYWNlKC90aHUvZ2ksXCI0XCIpLnJlcGxhY2UoL2ZyaS9naSxcIjVcIikucmVwbGFjZSgvc2F0L2dpLFwiNlwiKX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLnJlcGxhY2VBbHBoYU1vbnRocz1mdW5jdGlvbihjb25mKXtyZXR1cm4gY29uZi5yZXBsYWNlKC9qYW4vZ2ksXCIxXCIpLnJlcGxhY2UoL2ZlYi9naSxcIjJcIikucmVwbGFjZSgvbWFyL2dpLFwiM1wiKS5yZXBsYWNlKC9hcHIvZ2ksXCI0XCIpLnJlcGxhY2UoL21heS9naSxcIjVcIikucmVwbGFjZSgvanVuL2dpLFwiNlwiKS5yZXBsYWNlKC9qdWwvZ2ksXCI3XCIpLnJlcGxhY2UoL2F1Zy9naSxcIjhcIikucmVwbGFjZSgvc2VwL2dpLFwiOVwiKS5yZXBsYWNlKC9vY3QvZ2ksXCIxMFwiKS5yZXBsYWNlKC9ub3YvZ2ksXCIxMVwiKS5yZXBsYWNlKC9kZWMvZ2ksXCIxMlwiKX07Q3JvblBhdHRlcm4ucHJvdG90eXBlLmhhbmRsZU5pY2tuYW1lcz1mdW5jdGlvbihwYXR0ZXJuKXtjb25zdCBjbGVhblBhdHRlcm49cGF0dGVybi50cmltKCkudG9Mb3dlckNhc2UoKTtpZihjbGVhblBhdHRlcm49PT1cIkB5ZWFybHlcInx8Y2xlYW5QYXR0ZXJuPT09XCJAYW5udWFsbHlcIil7cmV0dXJuXCIwIDAgMSAxICpcIn1lbHNlIGlmKGNsZWFuUGF0dGVybj09PVwiQG1vbnRobHlcIil7cmV0dXJuXCIwIDAgMSAqICpcIn1lbHNlIGlmKGNsZWFuUGF0dGVybj09PVwiQHdlZWtseVwiKXtyZXR1cm5cIjAgMCAqICogMFwifWVsc2UgaWYoY2xlYW5QYXR0ZXJuPT09XCJAZGFpbHlcIil7cmV0dXJuXCIwIDAgKiAqICpcIn1lbHNlIGlmKGNsZWFuUGF0dGVybj09PVwiQGhvdXJseVwiKXtyZXR1cm5cIjAgKiAqICogKlwifWVsc2V7cmV0dXJuIHBhdHRlcm59fTtDcm9uUGF0dGVybi5wcm90b3R5cGUuc2V0TnRoV2Vla2RheU9mTW9udGg9ZnVuY3Rpb24oaW5kZXgsbnRoV2Vla2RheSl7aWYobnRoV2Vla2RheT09PVwiTFwiKXt0aGlzW1wiZGF5T2ZXZWVrXCJdW2luZGV4XT10aGlzW1wiZGF5T2ZXZWVrXCJdW2luZGV4XXxMQVNUX09DQ1VSUkVOQ0V9ZWxzZSBpZihudGhXZWVrZGF5PDYmJm50aFdlZWtkYXk+MCl7dGhpc1tcImRheU9mV2Vla1wiXVtpbmRleF09dGhpc1tcImRheU9mV2Vla1wiXVtpbmRleF18T0NDVVJSRU5DRV9CSVRNQVNLU1tudGhXZWVrZGF5LTFdfWVsc2UgaWYobnRoV2Vla2RheT09PUFOWV9PQ0NVUlJFTkNFKXt0aGlzW1wiZGF5T2ZXZWVrXCJdW2luZGV4XT1BTllfT0NDVVJSRU5DRX1lbHNle3Rocm93IG5ldyBUeXBlRXJyb3IoYENyb25QYXR0ZXJuOiBudGggd2Vla2RheSBvZiBvZiByYW5nZSwgc2hvdWxkIGJlIDEtNSBvciBMLiBWYWx1ZTogJHtudGhXZWVrZGF5fWApfX07Y29uc3QgRGF5c09mTW9udGg9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtjb25zdCBSZWN1cnNpb25TdGVwcz1bW1wibW9udGhcIixcInllYXJcIiwwXSxbXCJkYXlcIixcIm1vbnRoXCIsLTFdLFtcImhvdXJcIixcImRheVwiLDBdLFtcIm1pbnV0ZVwiLFwiaG91clwiLDBdLFtcInNlY29uZFwiLFwibWludXRlXCIsMF1dO2Z1bmN0aW9uIENyb25EYXRlKGQsdHope3RoaXMudHo9dHo7aWYoZCYmZCBpbnN0YW5jZW9mIERhdGUpe2lmKCFpc05hTihkKSl7dGhpcy5mcm9tRGF0ZShkKX1lbHNle3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uRGF0ZTogSW52YWxpZCBkYXRlIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvclwiKX19ZWxzZSBpZihkPT09dm9pZCAwKXt0aGlzLmZyb21EYXRlKG5ldyBEYXRlKX1lbHNlIGlmKGQmJnR5cGVvZiBkPT09XCJzdHJpbmdcIil7dGhpcy5mcm9tU3RyaW5nKGQpfWVsc2UgaWYoZCBpbnN0YW5jZW9mIENyb25EYXRlKXt0aGlzLmZyb21Dcm9uRGF0ZShkKX1lbHNle3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDcm9uRGF0ZTogSW52YWxpZCB0eXBlIChcIit0eXBlb2YgZCtcIikgcGFzc2VkIHRvIENyb25EYXRlIGNvbnN0cnVjdG9yXCIpfX1Dcm9uRGF0ZS5wcm90b3R5cGUuaXNOdGhXZWVrZGF5T2ZNb250aD1mdW5jdGlvbih5ZWFyLG1vbnRoLGRheSxudGgpe2NvbnN0IGRhdGU9bmV3IERhdGUoRGF0ZS5VVEMoeWVhcixtb250aCxkYXkpKTtjb25zdCB3ZWVrZGF5PWRhdGUuZ2V0VVRDRGF5KCk7bGV0IGNvdW50PTA7Zm9yKGxldCBkPTE7ZDw9ZGF5O2QrKyl7aWYobmV3IERhdGUoRGF0ZS5VVEMoeWVhcixtb250aCxkKSkuZ2V0VVRDRGF5KCk9PT13ZWVrZGF5KXtjb3VudCsrfX1pZihudGgmQU5ZX09DQ1VSUkVOQ0UmJk9DQ1VSUkVOQ0VfQklUTUFTS1NbY291bnQtMV0mbnRoKXtyZXR1cm4gdHJ1ZX1pZihudGgmTEFTVF9PQ0NVUlJFTkNFKXtjb25zdCBkYXlzSW5Nb250aD1uZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLG1vbnRoKzEsMCkpLmdldFVUQ0RhdGUoKTtmb3IobGV0IGQ9ZGF5KzE7ZDw9ZGF5c0luTW9udGg7ZCsrKXtpZihuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLG1vbnRoLGQpKS5nZXRVVENEYXkoKT09PXdlZWtkYXkpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfTtDcm9uRGF0ZS5wcm90b3R5cGUuZnJvbURhdGU9ZnVuY3Rpb24oaW5EYXRlKXtpZih0aGlzLnR6IT09dm9pZCAwKXtpZih0eXBlb2YgdGhpcy50ej09PVwibnVtYmVyXCIpe3RoaXMubXM9aW5EYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO3RoaXMuc2Vjb25kPWluRGF0ZS5nZXRVVENTZWNvbmRzKCk7dGhpcy5taW51dGU9aW5EYXRlLmdldFVUQ01pbnV0ZXMoKSt0aGlzLnR6O3RoaXMuaG91cj1pbkRhdGUuZ2V0VVRDSG91cnMoKTt0aGlzLmRheT1pbkRhdGUuZ2V0VVRDRGF0ZSgpO3RoaXMubW9udGg9aW5EYXRlLmdldFVUQ01vbnRoKCk7dGhpcy55ZWFyPWluRGF0ZS5nZXRVVENGdWxsWWVhcigpO3RoaXMuYXBwbHkoKX1lbHNle2NvbnN0IGQ9bWluaXR6LnRvVFooaW5EYXRlLHRoaXMudHopO3RoaXMubXM9aW5EYXRlLmdldE1pbGxpc2Vjb25kcygpO3RoaXMuc2Vjb25kPWQuczt0aGlzLm1pbnV0ZT1kLmk7dGhpcy5ob3VyPWQuaDt0aGlzLmRheT1kLmQ7dGhpcy5tb250aD1kLm0tMTt0aGlzLnllYXI9ZC55fX1lbHNle3RoaXMubXM9aW5EYXRlLmdldE1pbGxpc2Vjb25kcygpO3RoaXMuc2Vjb25kPWluRGF0ZS5nZXRTZWNvbmRzKCk7dGhpcy5taW51dGU9aW5EYXRlLmdldE1pbnV0ZXMoKTt0aGlzLmhvdXI9aW5EYXRlLmdldEhvdXJzKCk7dGhpcy5kYXk9aW5EYXRlLmdldERhdGUoKTt0aGlzLm1vbnRoPWluRGF0ZS5nZXRNb250aCgpO3RoaXMueWVhcj1pbkRhdGUuZ2V0RnVsbFllYXIoKX19O0Nyb25EYXRlLnByb3RvdHlwZS5mcm9tQ3JvbkRhdGU9ZnVuY3Rpb24oZCl7dGhpcy50ej1kLnR6O3RoaXMueWVhcj1kLnllYXI7dGhpcy5tb250aD1kLm1vbnRoO3RoaXMuZGF5PWQuZGF5O3RoaXMuaG91cj1kLmhvdXI7dGhpcy5taW51dGU9ZC5taW51dGU7dGhpcy5zZWNvbmQ9ZC5zZWNvbmQ7dGhpcy5tcz1kLm1zfTtDcm9uRGF0ZS5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXtpZih0aGlzLm1vbnRoPjExfHx0aGlzLmRheT5EYXlzT2ZNb250aFt0aGlzLm1vbnRoXXx8dGhpcy5ob3VyPjU5fHx0aGlzLm1pbnV0ZT41OXx8dGhpcy5zZWNvbmQ+NTl8fHRoaXMuaG91cjwwfHx0aGlzLm1pbnV0ZTwwfHx0aGlzLnNlY29uZDwwKXtjb25zdCBkPW5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF5LHRoaXMuaG91cix0aGlzLm1pbnV0ZSx0aGlzLnNlY29uZCx0aGlzLm1zKSk7dGhpcy5tcz1kLmdldFVUQ01pbGxpc2Vjb25kcygpO3RoaXMuc2Vjb25kPWQuZ2V0VVRDU2Vjb25kcygpO3RoaXMubWludXRlPWQuZ2V0VVRDTWludXRlcygpO3RoaXMuaG91cj1kLmdldFVUQ0hvdXJzKCk7dGhpcy5kYXk9ZC5nZXRVVENEYXRlKCk7dGhpcy5tb250aD1kLmdldFVUQ01vbnRoKCk7dGhpcy55ZWFyPWQuZ2V0VVRDRnVsbFllYXIoKTtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O0Nyb25EYXRlLnByb3RvdHlwZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKHN0cil7aWYodHlwZW9mIHRoaXMudHo9PT1cIm51bWJlclwiKXtjb25zdCBpbkRhdGU9bWluaXR6LmZyb21UWklTTyhzdHIpO3RoaXMubXM9aW5EYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO3RoaXMuc2Vjb25kPWluRGF0ZS5nZXRVVENTZWNvbmRzKCk7dGhpcy5taW51dGU9aW5EYXRlLmdldFVUQ01pbnV0ZXMoKTt0aGlzLmhvdXI9aW5EYXRlLmdldFVUQ0hvdXJzKCk7dGhpcy5kYXk9aW5EYXRlLmdldFVUQ0RhdGUoKTt0aGlzLm1vbnRoPWluRGF0ZS5nZXRVVENNb250aCgpO3RoaXMueWVhcj1pbkRhdGUuZ2V0VVRDRnVsbFllYXIoKTt0aGlzLmFwcGx5KCl9ZWxzZXtyZXR1cm4gdGhpcy5mcm9tRGF0ZShtaW5pdHouZnJvbVRaSVNPKHN0cix0aGlzLnR6KSl9fTtDcm9uRGF0ZS5wcm90b3R5cGUuZmluZE5leHQ9ZnVuY3Rpb24ob3B0aW9ucyx0YXJnZXQscGF0dGVybixvZmZzZXQpe2NvbnN0IG9yaWdpbmFsVGFyZ2V0PXRoaXNbdGFyZ2V0XTtsZXQgbGFzdERheU9mTW9udGg7aWYocGF0dGVybi5sYXN0RGF5T2ZNb250aCl7aWYodGhpcy5tb250aCE9PTEpe2xhc3REYXlPZk1vbnRoPURheXNPZk1vbnRoW3RoaXMubW9udGhdfWVsc2V7bGFzdERheU9mTW9udGg9bmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLHRoaXMubW9udGgrMSwwLDAsMCwwLDApKS5nZXRVVENEYXRlKCl9fWNvbnN0IGZEb21XZWVrRGF5PSFwYXR0ZXJuLnN0YXJET1cmJnRhcmdldD09XCJkYXlcIj9uZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCwxLDAsMCwwLDApKS5nZXRVVENEYXkoKTp1bmRlZmluZWQ7Zm9yKGxldCBpPXRoaXNbdGFyZ2V0XStvZmZzZXQ7aTxwYXR0ZXJuW3RhcmdldF0ubGVuZ3RoO2krKyl7bGV0IG1hdGNoPXBhdHRlcm5bdGFyZ2V0XVtpXTtpZih0YXJnZXQ9PT1cImRheVwiJiZwYXR0ZXJuLmxhc3REYXlPZk1vbnRoJiZpLW9mZnNldD09bGFzdERheU9mTW9udGgpe21hdGNoPXRydWV9aWYodGFyZ2V0PT09XCJkYXlcIiYmIXBhdHRlcm4uc3RhckRPVyl7bGV0IGRvd01hdGNoPXBhdHRlcm4uZGF5T2ZXZWVrWyhmRG9tV2Vla0RheSsoaS1vZmZzZXQtMSkpJTddO2lmKGRvd01hdGNoJiZkb3dNYXRjaCZBTllfT0NDVVJSRU5DRSl7ZG93TWF0Y2g9dGhpcy5pc050aFdlZWtkYXlPZk1vbnRoKHRoaXMueWVhcix0aGlzLm1vbnRoLGktb2Zmc2V0LGRvd01hdGNoKX1lbHNlIGlmKGRvd01hdGNoKXt0aHJvdyBuZXcgRXJyb3IoYENyb25EYXRlOiBJbnZhbGlkIHZhbHVlIGZvciBkYXlPZldlZWsgZW5jb3VudGVyZWQuICR7ZG93TWF0Y2h9YCl9aWYob3B0aW9ucy5sZWdhY3lNb2RlJiYhcGF0dGVybi5zdGFyRE9NKXttYXRjaD1tYXRjaHx8ZG93TWF0Y2h9ZWxzZXttYXRjaD1tYXRjaCYmZG93TWF0Y2h9fWlmKG1hdGNoKXt0aGlzW3RhcmdldF09aS1vZmZzZXQ7cmV0dXJuIG9yaWdpbmFsVGFyZ2V0IT09dGhpc1t0YXJnZXRdPzI6MX19cmV0dXJuIDN9O0Nyb25EYXRlLnByb3RvdHlwZS5yZWN1cnNlPWZ1bmN0aW9uKHBhdHRlcm4sb3B0aW9ucyxkb2luZyl7Y29uc3QgcmVzPXRoaXMuZmluZE5leHQob3B0aW9ucyxSZWN1cnNpb25TdGVwc1tkb2luZ11bMF0scGF0dGVybixSZWN1cnNpb25TdGVwc1tkb2luZ11bMl0pO2lmKHJlcz4xKXtsZXQgcmVzZXRMZXZlbD1kb2luZysxO3doaWxlKHJlc2V0TGV2ZWw8UmVjdXJzaW9uU3RlcHMubGVuZ3RoKXt0aGlzW1JlY3Vyc2lvblN0ZXBzW3Jlc2V0TGV2ZWxdWzBdXT0tUmVjdXJzaW9uU3RlcHNbcmVzZXRMZXZlbF1bMl07cmVzZXRMZXZlbCsrfWlmKHJlcz09PTMpe3RoaXNbUmVjdXJzaW9uU3RlcHNbZG9pbmddWzFdXSsrO3RoaXNbUmVjdXJzaW9uU3RlcHNbZG9pbmddWzBdXT0tUmVjdXJzaW9uU3RlcHNbZG9pbmddWzJdO3RoaXMuYXBwbHkoKTtyZXR1cm4gdGhpcy5yZWN1cnNlKHBhdHRlcm4sb3B0aW9ucywwKX1lbHNlIGlmKHRoaXMuYXBwbHkoKSl7cmV0dXJuIHRoaXMucmVjdXJzZShwYXR0ZXJuLG9wdGlvbnMsZG9pbmctMSl9fWRvaW5nKz0xO2lmKGRvaW5nPj1SZWN1cnNpb25TdGVwcy5sZW5ndGgpe3JldHVybiB0aGlzfWVsc2UgaWYodGhpcy55ZWFyPj0zZTMpe3JldHVybiBudWxsfWVsc2V7cmV0dXJuIHRoaXMucmVjdXJzZShwYXR0ZXJuLG9wdGlvbnMsZG9pbmcpfX07Q3JvbkRhdGUucHJvdG90eXBlLmluY3JlbWVudD1mdW5jdGlvbihwYXR0ZXJuLG9wdGlvbnMsaGFzUHJldmlvdXNSdW4pe3RoaXMuc2Vjb25kKz1vcHRpb25zLmludGVydmFsPjEmJmhhc1ByZXZpb3VzUnVuP29wdGlvbnMuaW50ZXJ2YWw6MTt0aGlzLm1zPTA7dGhpcy5hcHBseSgpO3JldHVybiB0aGlzLnJlY3Vyc2UocGF0dGVybixvcHRpb25zLDApfTtDcm9uRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZT1mdW5jdGlvbihpbnRlcm5hbCl7aWYoaW50ZXJuYWx8fHRoaXMudHo9PT12b2lkIDApe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUsdGhpcy5zZWNvbmQsdGhpcy5tcyl9ZWxzZXtpZih0eXBlb2YgdGhpcy50ej09PVwibnVtYmVyXCIpe3JldHVybiBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRheSx0aGlzLmhvdXIsdGhpcy5taW51dGUtdGhpcy50eix0aGlzLnNlY29uZCx0aGlzLm1zKSl9ZWxzZXtyZXR1cm4gbWluaXR6KHRoaXMueWVhcix0aGlzLm1vbnRoKzEsdGhpcy5kYXksdGhpcy5ob3VyLHRoaXMubWludXRlLHRoaXMuc2Vjb25kLHRoaXMudHopfX19O0Nyb25EYXRlLnByb3RvdHlwZS5nZXRUaW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RGF0ZSgpLmdldFRpbWUoKX07ZnVuY3Rpb24gaXNGdW5jdGlvbih2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpPT09XCJbb2JqZWN0IEZ1bmN0aW9uXVwifHxcImZ1bmN0aW9uXCI9PT10eXBlb2Ygdnx8diBpbnN0YW5jZW9mIEZ1bmN0aW9ufWZ1bmN0aW9uIHVucmVmVGltZXIodGltZXIpe2lmKHR5cGVvZiBEZW5vIT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIERlbm8udW5yZWZUaW1lciE9PVwidW5kZWZpbmVkXCIpe0Rlbm8udW5yZWZUaW1lcih0aW1lcil9ZWxzZSBpZih0aW1lciYmdHlwZW9mIHRpbWVyLnVucmVmIT09XCJ1bmRlZmluZWRcIil7dGltZXIudW5yZWYoKX19Y29uc3QgbWF4RGVsYXk9MzAqMWUzO2NvbnN0IHNjaGVkdWxlZEpvYnM9W107ZnVuY3Rpb24gQ3JvbihwYXR0ZXJuLGZuT3JPcHRpb25zMSxmbk9yT3B0aW9uczIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIENyb24pKXtyZXR1cm4gbmV3IENyb24ocGF0dGVybixmbk9yT3B0aW9uczEsZm5Pck9wdGlvbnMyKX1sZXQgb3B0aW9ucyxmdW5jO2lmKGlzRnVuY3Rpb24oZm5Pck9wdGlvbnMxKSl7ZnVuYz1mbk9yT3B0aW9uczF9ZWxzZSBpZih0eXBlb2YgZm5Pck9wdGlvbnMxPT09XCJvYmplY3RcIil7b3B0aW9ucz1mbk9yT3B0aW9uczF9ZWxzZSBpZihmbk9yT3B0aW9uczEhPT12b2lkIDApe3Rocm93IG5ldyBFcnJvcihcIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBvcHRpb25zSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuXCIpfWlmKGlzRnVuY3Rpb24oZm5Pck9wdGlvbnMyKSl7ZnVuYz1mbk9yT3B0aW9uczJ9ZWxzZSBpZih0eXBlb2YgZm5Pck9wdGlvbnMyPT09XCJvYmplY3RcIil7b3B0aW9ucz1mbk9yT3B0aW9uczJ9ZWxzZSBpZihmbk9yT3B0aW9uczIhPT12b2lkIDApe3Rocm93IG5ldyBFcnJvcihcIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBmdW5jSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuXCIpfXRoaXMubmFtZT1vcHRpb25zP29wdGlvbnMubmFtZTp2b2lkIDA7dGhpcy5vcHRpb25zPUNyb25PcHRpb25zKG9wdGlvbnMpO3RoaXMuX3N0YXRlcz17a2lsbDpmYWxzZSxibG9ja2luZzpmYWxzZSxwcmV2aW91c1J1bjp2b2lkIDAsY3VycmVudFJ1bjp2b2lkIDAsb25jZTp2b2lkIDAsY3VycmVudFRpbWVvdXQ6dm9pZCAwLG1heFJ1bnM6b3B0aW9ucz9vcHRpb25zLm1heFJ1bnM6dm9pZCAwLHBhdXNlZDpvcHRpb25zP29wdGlvbnMucGF1c2VkOmZhbHNlLHBhdHRlcm46dm9pZCAwfTtpZihwYXR0ZXJuJiYocGF0dGVybiBpbnN0YW5jZW9mIERhdGV8fHR5cGVvZiBwYXR0ZXJuPT09XCJzdHJpbmdcIiYmcGF0dGVybi5pbmRleE9mKFwiOlwiKT4wKSl7dGhpcy5fc3RhdGVzLm9uY2U9bmV3IENyb25EYXRlKHBhdHRlcm4sdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KX1lbHNle3RoaXMuX3N0YXRlcy5wYXR0ZXJuPW5ldyBDcm9uUGF0dGVybihwYXR0ZXJuLHRoaXMub3B0aW9ucy50aW1lem9uZSl9aWYodGhpcy5uYW1lKXtjb25zdCBleGlzdGluZz1zY2hlZHVsZWRKb2JzLmZpbmQoaj0+ai5uYW1lPT09dGhpcy5uYW1lKTtpZihleGlzdGluZyl7dGhyb3cgbmV3IEVycm9yKFwiQ3JvbjogVHJpZWQgdG8gaW5pdGlhbGl6ZSBuZXcgbmFtZWQgam9iICdcIit0aGlzLm5hbWUrXCInLCBidXQgbmFtZSBhbHJlYWR5IHRha2VuLlwiKX1lbHNle3NjaGVkdWxlZEpvYnMucHVzaCh0aGlzKX19aWYoZnVuYyE9PXZvaWQgMCl7dGhpcy5mbj1mdW5jO3RoaXMuc2NoZWR1bGUoKX1yZXR1cm4gdGhpc31Dcm9uLnByb3RvdHlwZS5uZXh0UnVuPWZ1bmN0aW9uKHByZXYpe2NvbnN0IG5leHQ9dGhpcy5fbmV4dChwcmV2KTtyZXR1cm4gbmV4dD9uZXh0LmdldERhdGUoKTpudWxsfTtDcm9uLnByb3RvdHlwZS5uZXh0UnVucz1mdW5jdGlvbihuLHByZXZpb3VzKXtpZihuPnRoaXMuX3N0YXRlcy5tYXhSdW5zKXtuPXRoaXMuX3N0YXRlcy5tYXhSdW5zfWNvbnN0IGVudW1lcmF0aW9uPVtdO2xldCBwcmV2PXByZXZpb3VzfHx0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bjt3aGlsZShuLS0mJihwcmV2PXRoaXMubmV4dFJ1bihwcmV2KSkpe2VudW1lcmF0aW9uLnB1c2gocHJldil9cmV0dXJuIGVudW1lcmF0aW9ufTtDcm9uLnByb3RvdHlwZS5nZXRQYXR0ZXJuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5wYXR0ZXJuP3RoaXMuX3N0YXRlcy5wYXR0ZXJuLnBhdHRlcm46dm9pZCAwfTtDcm9uLnByb3RvdHlwZS5pc1J1bm5pbmc9ZnVuY3Rpb24oKXtjb25zdCBuZXh0UnVuVGltZT10aGlzLm5leHRSdW4odGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4pO2NvbnN0IGlzUnVubmluZz0hdGhpcy5fc3RhdGVzLnBhdXNlZDtjb25zdCBpc1NjaGVkdWxlZD10aGlzLmZuIT09dm9pZCAwO2NvbnN0IG5vdElzS2lsbGVkPSF0aGlzLl9zdGF0ZXMua2lsbDtyZXR1cm4gaXNSdW5uaW5nJiZpc1NjaGVkdWxlZCYmbm90SXNLaWxsZWQmJm5leHRSdW5UaW1lIT09bnVsbH07Q3Jvbi5wcm90b3R5cGUuaXNTdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5raWxsfTtDcm9uLnByb3RvdHlwZS5pc0J1c3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdGVzLmJsb2NraW5nfTtDcm9uLnByb3RvdHlwZS5jdXJyZW50UnVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuP3RoaXMuX3N0YXRlcy5jdXJyZW50UnVuLmdldERhdGUoKTpudWxsfTtDcm9uLnByb3RvdHlwZS5wcmV2aW91c1J1bj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0ZXMucHJldmlvdXNSdW4/dGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuLmdldERhdGUoKTpudWxsfTtDcm9uLnByb3RvdHlwZS5tc1RvTmV4dD1mdW5jdGlvbihwcmV2KXtwcmV2PXByZXZ8fG5ldyBEYXRlO2NvbnN0IG5leHQ9dGhpcy5fbmV4dChwcmV2KTtpZihuZXh0KXtyZXR1cm4gbmV4dC5nZXRUaW1lKCktcHJldi5nZXRUaW1lKCl9ZWxzZXtyZXR1cm4gbnVsbH19O0Nyb24ucHJvdG90eXBlLnN0b3A9ZnVuY3Rpb24oKXt0aGlzLl9zdGF0ZXMua2lsbD10cnVlO2lmKHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCl9Y29uc3Qgam9iSW5kZXg9c2NoZWR1bGVkSm9icy5pbmRleE9mKHRoaXMpO2lmKGpvYkluZGV4Pj0wKXtzY2hlZHVsZWRKb2JzLnNwbGljZShqb2JJbmRleCwxKX19O0Nyb24ucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5fc3RhdGVzLnBhdXNlZD10cnVlO3JldHVybiF0aGlzLl9zdGF0ZXMua2lsbH07Q3Jvbi5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dGhpcy5fc3RhdGVzLnBhdXNlZD1mYWxzZTtyZXR1cm4hdGhpcy5fc3RhdGVzLmtpbGx9O0Nyb24ucHJvdG90eXBlLnNjaGVkdWxlPWZ1bmN0aW9uKGZ1bmMpe2lmKGZ1bmMmJnRoaXMuZm4pe3Rocm93IG5ldyBFcnJvcihcIkNyb246IEl0IGlzIG5vdCBhbGxvd2VkIHRvIHNjaGVkdWxlIHR3byBmdW5jdGlvbnMgdXNpbmcgdGhlIHNhbWUgQ3JvbmVyIGluc3RhbmNlLlwiKX1lbHNlIGlmKGZ1bmMpe3RoaXMuZm49ZnVuY31sZXQgd2FpdE1zPXRoaXMubXNUb05leHQoKTtjb25zdCB0YXJnZXQ9dGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKTtpZih3YWl0TXM9PT1udWxsfHx3YWl0TXM9PT11bmRlZmluZWR8fGlzTmFOKHdhaXRNcyl8fHRhcmdldD09PW51bGwpcmV0dXJuIHRoaXM7aWYod2FpdE1zPm1heERlbGF5KXt3YWl0TXM9bWF4RGVsYXl9dGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuX2NoZWNrVHJpZ2dlcih0YXJnZXQpLHdhaXRNcyk7aWYodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0JiZ0aGlzLm9wdGlvbnMudW5yZWYpe3VucmVmVGltZXIodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KX1yZXR1cm4gdGhpc307Q3Jvbi5wcm90b3R5cGUuX3RyaWdnZXI9YXN5bmMgZnVuY3Rpb24oaW5pdGlhdGlvbkRhdGUpe3RoaXMuX3N0YXRlcy5ibG9ja2luZz10cnVlO3RoaXMuX3N0YXRlcy5jdXJyZW50UnVuPW5ldyBDcm9uRGF0ZSh2b2lkIDAsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KTtpZih0aGlzLm9wdGlvbnMuY2F0Y2gpe3RyeXthd2FpdCB0aGlzLmZuKHRoaXMsdGhpcy5vcHRpb25zLmNvbnRleHQpfWNhdGNoKF9lKXtpZihpc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5jYXRjaCkpe3RoaXMub3B0aW9ucy5jYXRjaChfZSx0aGlzKX19fWVsc2V7YXdhaXQgdGhpcy5mbih0aGlzLHRoaXMub3B0aW9ucy5jb250ZXh0KX10aGlzLl9zdGF0ZXMucHJldmlvdXNSdW49bmV3IENyb25EYXRlKGluaXRpYXRpb25EYXRlLHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCk7dGhpcy5fc3RhdGVzLmJsb2NraW5nPWZhbHNlfTtDcm9uLnByb3RvdHlwZS50cmlnZ2VyPWFzeW5jIGZ1bmN0aW9uKCl7YXdhaXQgdGhpcy5fdHJpZ2dlcigpfTtDcm9uLnByb3RvdHlwZS5fY2hlY2tUcmlnZ2VyPWZ1bmN0aW9uKHRhcmdldCl7Y29uc3Qgbm93PW5ldyBEYXRlLHNob3VsZFJ1bj0hdGhpcy5fc3RhdGVzLnBhdXNlZCYmbm93LmdldFRpbWUoKT49dGFyZ2V0LGlzQmxvY2tlZD10aGlzLl9zdGF0ZXMuYmxvY2tpbmcmJnRoaXMub3B0aW9ucy5wcm90ZWN0O2lmKHNob3VsZFJ1biYmIWlzQmxvY2tlZCl7dGhpcy5fc3RhdGVzLm1heFJ1bnMtLTt0aGlzLl90cmlnZ2VyKCl9ZWxzZXtpZihzaG91bGRSdW4mJmlzQmxvY2tlZCYmaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMucHJvdGVjdCkpe3NldFRpbWVvdXQoKCk9PnRoaXMub3B0aW9ucy5wcm90ZWN0KHRoaXMpLDApfX10aGlzLnNjaGVkdWxlKCl9O0Nyb24ucHJvdG90eXBlLl9uZXh0PWZ1bmN0aW9uKHByZXYpe2xldCBoYXNQcmV2aW91c1J1bj1wcmV2fHx0aGlzLl9zdGF0ZXMuY3VycmVudFJ1bj90cnVlOmZhbHNlO2xldCBzdGFydEF0SW5GdXR1cmVXaXRoSW50ZXJ2YWw9ZmFsc2U7aWYoIXByZXYmJnRoaXMub3B0aW9ucy5zdGFydEF0JiZ0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpe1twcmV2LGhhc1ByZXZpb3VzUnVuXT10aGlzLl9jYWxjdWxhdGVQcmV2aW91c1J1bihwcmV2LGhhc1ByZXZpb3VzUnVuKTtzdGFydEF0SW5GdXR1cmVXaXRoSW50ZXJ2YWw9IXByZXY/dHJ1ZTpmYWxzZX1wcmV2PW5ldyBDcm9uRGF0ZShwcmV2LHRoaXMub3B0aW9ucy50aW1lem9uZXx8dGhpcy5vcHRpb25zLnV0Y09mZnNldCk7aWYodGhpcy5vcHRpb25zLnN0YXJ0QXQmJnByZXYmJnByZXYuZ2V0VGltZSgpPHRoaXMub3B0aW9ucy5zdGFydEF0LmdldFRpbWUoKSl7cHJldj10aGlzLm9wdGlvbnMuc3RhcnRBdH1sZXQgbmV4dFJ1bj10aGlzLl9zdGF0ZXMub25jZXx8bmV3IENyb25EYXRlKHByZXYsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KTtpZighc3RhcnRBdEluRnV0dXJlV2l0aEludGVydmFsJiZuZXh0UnVuIT09dGhpcy5fc3RhdGVzLm9uY2Upe25leHRSdW49bmV4dFJ1bi5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sdGhpcy5vcHRpb25zLGhhc1ByZXZpb3VzUnVuKX1pZih0aGlzLl9zdGF0ZXMub25jZSYmdGhpcy5fc3RhdGVzLm9uY2UuZ2V0VGltZSgpPD1wcmV2LmdldFRpbWUoKSl7cmV0dXJuIG51bGx9ZWxzZSBpZihuZXh0UnVuPT09bnVsbHx8dGhpcy5fc3RhdGVzLm1heFJ1bnM8PTB8fHRoaXMuX3N0YXRlcy5raWxsfHx0aGlzLm9wdGlvbnMuc3RvcEF0JiZuZXh0UnVuLmdldFRpbWUoKT49dGhpcy5vcHRpb25zLnN0b3BBdC5nZXRUaW1lKCkpe3JldHVybiBudWxsfWVsc2V7cmV0dXJuIG5leHRSdW59fTtDcm9uLnByb3RvdHlwZS5fY2FsY3VsYXRlUHJldmlvdXNSdW49ZnVuY3Rpb24ocHJldixoYXNQcmV2aW91c1J1bil7Y29uc3Qgbm93PW5ldyBDcm9uRGF0ZSh1bmRlZmluZWQsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KTtpZih0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCk8PW5vdy5nZXRUaW1lKCkpe3ByZXY9dGhpcy5vcHRpb25zLnN0YXJ0QXQ7bGV0IHByZXZUaW1lUGx1c0ludGVydmFsPXByZXYuZ2V0VGltZSgpK3RoaXMub3B0aW9ucy5pbnRlcnZhbCoxZTM7d2hpbGUocHJldlRpbWVQbHVzSW50ZXJ2YWw8PW5vdy5nZXRUaW1lKCkpe3ByZXY9bmV3IENyb25EYXRlKHByZXYsdGhpcy5vcHRpb25zLnRpbWV6b25lfHx0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KS5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sdGhpcy5vcHRpb25zLHRydWUpO3ByZXZUaW1lUGx1c0ludGVydmFsPXByZXYuZ2V0VGltZSgpK3RoaXMub3B0aW9ucy5pbnRlcnZhbCoxZTN9aGFzUHJldmlvdXNSdW49dHJ1ZX1yZXR1cm5bcHJldixoYXNQcmV2aW91c1J1bl19O0Nyb24uQ3Jvbj1Dcm9uO0Nyb24uc2NoZWR1bGVkSm9icz1zY2hlZHVsZWRKb2JzO2V4cG9ydHtDcm9uLENyb24gYXMgZGVmYXVsdCxzY2hlZHVsZWRKb2JzfTsiLCAiaW1wb3J0IHsgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50RW1taXRlciwgU2NyaXB0RXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUV2ZW50U2VydmljZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkbG9jYWxIYW5kbGVyczogU2V0PFNjcmlwdEV2ZW50SGFuZGxlcj4gPSBuZXcgU2V0KCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5ICRpbnRlcm5hbEhhbmRsZXJzOiBTZXQ8U2NyaXB0RXZlbnRIYW5kbGVyPiA9IG5ldyBTZXQoKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgJHJlbW90ZUhhbmRsZXJzOiBTZXQ8U2NyaXB0RXZlbnRIYW5kbGVyPiA9IG5ldyBTZXQoKTtcbiAgICBwcm90ZWN0ZWQgJGludGVybmFsRXZlbnROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCAkZXZlbnRFbW1pdGVyOiBFdmVudEVtbWl0ZXIpIHt9XG5cbiAgICBwdWJsaWMgb248RSBleHRlbmRzIGtleW9mIFQ+KGV2ZW50TmFtZTogRSwgY2FsbGJhY2s6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pOiBTY3JpcHRFdmVudEhhbmRsZXI7XG4gICAgcHVibGljIG9uPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBUPiwgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPFNjcmlwdEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub24oZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG4gICAgcHVibGljIG9uY2U8RSBleHRlbmRzIGtleW9mIFQ+KGV2ZW50TmFtZTogRSwgY2FsbGJhY2s6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbmNlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBUPiwgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPik6IFNjcmlwdEV2ZW50SGFuZGxlcjtcbiAgICBwdWJsaWMgb25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgVD4sIGNhbGxiYWNrOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9ICguLi5hcmdzOiBhbnlbXSkgPT4gY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgIGNvbnN0IGV2ZW50SGFuZGxlciA9IDxTY3JpcHRFdmVudEhhbmRsZXI+dGhpcy4kZXZlbnRFbW1pdGVyLm9uY2UoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdDxFIGV4dGVuZHMga2V5b2YgVD4oZXZlbnROYW1lOiBFLCBib2R5PzogVFtFXSk6IHZvaWQ7XG4gICAgcHVibGljIGVtaXQ8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFLCBib2R5PzogdW5rbm93bik6IHZvaWQ7XG4gICAgcHVibGljIGVtaXQ8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFLCBib2R5PzogdW5rbm93bikge1xuICAgICAgICB0aGlzLiRldmVudEVtbWl0ZXIuZW1pdChldmVudE5hbWUsIGJvZHkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCAkb25JbnRlcm5hbChldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGlmICghdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzLmhhcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub24oZXZlbnROYW1lLCBoYW5kbGVyKTtcbiAgICAgICAgdGhpcy4kaW50ZXJuYWxIYW5kbGVycy5hZGQoZXZlbnRIYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgJG9uY2VJbnRlcm5hbChldmVudE5hbWU6IHN0cmluZywgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGlmICghdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzLmhhcyhldmVudE5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRJbnRlcm5hbEV2ZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPFNjcmlwdEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub25jZShldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICB0aGlzLiRpbnRlcm5hbEhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBSUENSZXN1bHQsIFJQQ0NhbGxPcHRpb25zLCBTY3JpcHRSUENIYW5kbGVyLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5ELCBSUENfUkVTVUxUX1RJTUVPVVQsIFJQQ19SRVNVTFRfVU5LTk9XTiB9IGZyb20gJy4uLy4uL2FwcC9jb25zdGFudHMnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlLCBSUENSZXN1bHRTdGF0dXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBNYW5nb0Vycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhc2VSUENTZXJ2aWNlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgQGluamVjdChMT0dHRVJfU0VSVklDRSkgcHJvdGVjdGVkIHJlYWRvbmx5ICRsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkVElNRU9VVCA9IDIwMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSAkbG9jYWxIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBTY3JpcHRSUENIYW5kbGVyPigpO1xuXG4gICAgcHVibGljIGFzeW5jIGNhbGw8RSBleHRlbmRzIGtleW9mIFQ+KFxuICAgICAgICBycGNOYW1lOiBFLFxuICAgICAgICBib2R5PzogUGFyYW1ldGVyczxUW0VdPlswXSxcbiAgICAgICAgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zLFxuICAgICk6IFByb21pc2U8UlBDUmVzdWx0PFJldHVyblR5cGU8VFtFXT4+PjtcbiAgICBwdWJsaWMgYXN5bmMgY2FsbDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IFJQQ0NhbGxPcHRpb25zKTogUHJvbWlzZTxSUENSZXN1bHQ8dW5rbm93bj4+O1xuICAgIHB1YmxpYyBhc3luYyBjYWxsPEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU6IEUsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zOiBSUENDYWxsT3B0aW9ucyA9IHsgdGltZW91dDogdGhpcy4kVElNRU9VVCB9KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuJGxvY2FsSGFuZGxlcnMuZ2V0KDxzdHJpbmc+cnBjTmFtZSk/LmhhbmRsZXI7XG4gICAgICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShSUENfUkVTVUxUX1RJTUVPVVQpO1xuICAgICAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0ID8/IHRoaXMuJFRJTUVPVVQpO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIoYm9keSk7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7IHN1Y2Nlc3M6IHRydWUsIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlN1Y2Nlc3MsIGJvZHk6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNYW5nb0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogeyBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBkZXRhaWxzOiBlcnJvci5kZXRhaWxzIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUoUlBDX1JFU1VMVF9VTktOT1dOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyBvblJlcXVlc3Q8RSBleHRlbmRzIGtleW9mIFQ+KHJwY05hbWU6IEUsIGhhbmRsZXI6IChib2R5OiBQYXJhbWV0ZXJzPFRbRV0+WzBdKSA9PiBSZXR1cm5UeXBlPFRbRV0+KTogU2NyaXB0UlBDSGFuZGxlcjtcbiAgICBwdWJsaWMgb25SZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU6IEUsIGhhbmRsZXI6IChib2R5OiB1bmtub3duKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPik6IFNjcmlwdFJQQ0hhbmRsZXI7XG4gICAgcHVibGljIG9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lOiBFLCBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdW5rbm93biB8IFByb21pc2U8dW5rbm93bj4pIHtcbiAgICAgICAgaWYgKHRoaXMuJGxvY2FsSGFuZGxlcnMuaGFzKHJwY05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVnaXN0ZXIgUlBDLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENIYW5kbGVyQWxyZWFkeUV4aXN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBycGNIYW5kbGVyOiBTY3JpcHRSUENIYW5kbGVyID0ge1xuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBycGNIYW5kbGVyLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kbG9jYWxIYW5kbGVycy5kZWxldGUocnBjTmFtZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnBjTmFtZTogcnBjTmFtZSxcbiAgICAgICAgICAgIGhhbmRsZXIsXG4gICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLiRsb2NhbEhhbmRsZXJzLnNldChycGNOYW1lLCBycGNIYW5kbGVyKTtcblxuICAgICAgICByZXR1cm4gcnBjSGFuZGxlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ29udGFpbmVyLCBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHR5cGUgeyBSUENTZXJ2aWNlLCBTZXJ2ZXJNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFLCBSUENfU0VSVklDRSwgdHlwZSBMb2dnZXJTZXJ2aWNlLCB0eXBlIFJQQ0NhbGxPcHRpb25zIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IEdMT0JBTF9BUFBfQ09OVEFJTkVSLCBNVUxUSVBMQVlFUl9TRVJWSUNFLCB0eXBlIE1hbmdvUGx1Z2luIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQbGF5ZXJQcm90b3R5cGVQbHVnaW4gaW1wbGVtZW50cyBNYW5nb1BsdWdpbiB7XG4gICAgQGluamVjdChHTE9CQUxfQVBQX0NPTlRBSU5FUikgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxBcHBDb250YWluZXI6IENvbnRhaW5lcjtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgQGluamVjdChNVUxUSVBMQVlFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IG11bHRpcGxheWVyU2VydmljZTogU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuXG4gICAgcHVibGljIGJlZm9yZUxvYWQoKSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBQbGF5ZXIgPSB0aGlzLm11bHRpcGxheWVyU2VydmljZS5nZXRQbGF5ZXIoKTtcblxuICAgICAgICBQbGF5ZXIucHJvdG90eXBlLmVtaXRXZWJWaWV3ID0gZnVuY3Rpb24gKGlkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50TmFtZTogc3RyaW5nLCBib2R5PzogdW5rbm93bikge1xuICAgICAgICAgICAgdGhpcy5lbWl0UmF3KCdTRVJWRVI6OkVNSVRfV0VCVklFVycsIHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgICAgICAgcGF5bG9hZDogYm9keSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJwY1NlcnZpY2UgPSB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5nZXQ8UlBDU2VydmljZT4oUlBDX1NFUlZJQ0UpO1xuXG4gICAgICAgIFBsYXllci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChycGNOYW1lOiBzdHJpbmcsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zPzogUlBDQ2FsbE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBycGNTZXJ2aWNlLmNhbGxQbGF5ZXIodGhpcywgcnBjTmFtZSwgYm9keSwgb3B0aW9ucyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgUGxheWVyLnByb3RvdHlwZS5jYWxsV2ViVmlldyA9IGZ1bmN0aW9uIChpZDogc3RyaW5nIHwgbnVtYmVyLCBycGNOYW1lOiBzdHJpbmcsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zPzogUlBDQ2FsbE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBycGNTZXJ2aWNlLmNhbGxXZWJWaWV3KHRoaXMsIGlkLCBycGNOYW1lLCBib2R5LCBvcHRpb25zKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGB+bHd+UGxheWVyIHByb3RvdHlwZSBtZXRob2RzIGRlZmluZWQgfmxrfigke0RhdGUubm93KCkgLSB0aW1lfW1zKWApO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFBpcGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzTmlsLCBpc051bWJlciB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNsYXNzIERlZmF1bHRWYWx1ZVBpcGU8VCA9IHVua25vd24sIFIgPSB1bmtub3duPiBpbXBsZW1lbnRzIFBpcGU8VCwgVCB8IFI+IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZTogVCkge31cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0odmFsdWU6IFQpIHtcbiAgICAgICAgaWYgKGlzTmlsKHZhbHVlKSB8fCAoaXNOdW1iZXIodmFsdWUpICYmIGlzTmFOKDxudW1iZXI+dmFsdWUpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IFJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQsIHR5cGUgTWFuZ29QbHVnaW4sIFJQQ19SRVNVTFRfVU5LTk9XTiwgRXZlbnREZXN0aW5hdGlvbiB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHtcbiAgICBFVkVOVF9TRVJWSUNFLFxuICAgIE1hbmdvRXJyb3IsXG4gICAgUlBDX1NFUlZJQ0UsXG4gICAgUlBDUmVzdWx0U3RhdHVzLFxuICAgIHR5cGUgUlBDUmVzdWx0LFxuICAgIExPR0dFUl9TRVJWSUNFLFxuICAgIHR5cGUgTG9nZ2VyU2VydmljZSxcbn0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB0eXBlIHsgRXZlbnRTZXJ2aWNlLCBSUENTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSUENQbHVnaW4gaW1wbGVtZW50cyBNYW5nb1BsdWdpbiB7XG4gICAgQGluamVjdChFVkVOVF9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlO1xuICAgIEBpbmplY3QoUlBDX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgcnBjU2VydmljZTogUlBDU2VydmljZTtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG5cbiAgICBwdWJsaWMgYmVmb3JlTG9hZCgpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uub25QbGF5ZXIoJ1JQQzo6Q0FMTF9TRVJWRVInLCBhc3luYyAocGxheWVyLCBib2R5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBsYXllci52YWxpZCkgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCBycGNIYW5kbGVyID1cbiAgICAgICAgICAgICAgICBib2R5LnNvdXJjZSA9PT0gRXZlbnREZXN0aW5hdGlvbi5DbGllbnRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnJwY1NlcnZpY2UuJGNsaWVudEhhbmRsZXJzLmdldChib2R5LnJwY05hbWUpXG4gICAgICAgICAgICAgICAgICAgIDogYm9keS5zb3VyY2UgPT09IEV2ZW50RGVzdGluYXRpb24uV2ViVmlld1xuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucnBjU2VydmljZS4kd2ViVmlld0hhbmRsZXJzLmdldChgJHtib2R5LndlYlZpZXdJZH06OiR7Ym9keS5ycGNOYW1lfWApXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCFycGNIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRXZWJWaWV3KFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keS53ZWJWaWV3SWQgYXMgc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLkNsaWVudCkge1xuICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFJhdyhgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIFJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlclJlc3VsdCA9IGF3YWl0IHJwY0hhbmRsZXIuaGFuZGxlcihwbGF5ZXIsIGJvZHkuYm9keSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcnBjUmVzdWx0OiBSUENSZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogUlBDUmVzdWx0U3RhdHVzLlN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGhhbmRsZXJSZXN1bHQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoYm9keS5zb3VyY2UgPT09IEV2ZW50RGVzdGluYXRpb24uV2ViVmlldykge1xuICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFdlYlZpZXcoYm9keS53ZWJWaWV3SWQgYXMgc3RyaW5nIHwgbnVtYmVyLCBgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIHJwY1Jlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5LnNvdXJjZSA9PT0gRXZlbnREZXN0aW5hdGlvbi5DbGllbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGxheWVyLmVtaXRSYXcoYFJQQzo6UkVUVVJOX0ZST01fU0VSVkVSXyR7Ym9keS5pZH1gLCBycGNSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJvZHkuc291cmNlID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTWFuZ29FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnBjUmVzdWx0OiBSUENSZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlcnJvci5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgZGV0YWlsczogZXJyb3IuZGV0YWlscyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllci5lbWl0V2ViVmlldyhib2R5LndlYlZpZXdJZCBhcyBzdHJpbmcgfCBudW1iZXIsIGBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8ke2JvZHkuaWR9YCwgcnBjUmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllci5lbWl0V2ViVmlldyhib2R5LndlYlZpZXdJZCBhcyBzdHJpbmcgfCBudW1iZXIsIGBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8ke2JvZHkuaWR9YCwgUlBDX1JFU1VMVF9VTktOT1dOKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zb3VyY2UgPT09IEV2ZW50RGVzdGluYXRpb24uQ2xpZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE1hbmdvRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJwY1Jlc3VsdDogUlBDUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRldGFpbHM6IGVycm9yLmRldGFpbHMgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFJhdyhgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIHJwY1Jlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5ZXIuZW1pdFJhdyhgUlBDOjpSRVRVUk5fRlJPTV9TRVJWRVJfJHtib2R5LmlkfWAsIFJQQ19SRVNVTFRfVU5LTk9XTik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5sb2coYH5sd35SUEMgaGFuZGxlcnMgcmVnaXN0ZXJlZCB+bGt+KCR7RGF0ZS5ub3coKSAtIHRpbWV9bXMpYCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEdMT0JBTF9BUFBfQ09OVEFJTkVSLCBJTlRFUk5BTF9BUFBfQ09OVEFJTkVSLCBNVUxUSVBMQVlFUl9TRVJWSUNFLCB0eXBlIE1hbmdvUGx1Z2luIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBFVkVOVF9TRVJWSUNFLCBMT0dHRVJfU0VSVklDRSwgUlBDX1NFUlZJQ0UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHsgU2VydmVyRXZlbnRTZXJ2aWNlLCBTZXJ2ZXJMb2dnZXJTZXJ2aWNlLCBTZXJ2ZXJSUENTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNlcnZlckFsdE11bHRpcGxheWVyU2VydmNlVjEsIFNlcnZlckFsdE11bHRpcGxheWVyU2VydmNlVjIgfSBmcm9tICcuLi9tdWx0aXBsYXllcic7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQmluZGVyUGx1Z2luIGltcGxlbWVudHMgTWFuZ29QbHVnaW4ge1xuICAgIEBpbmplY3QoSU5URVJOQUxfQVBQX0NPTlRBSU5FUikgcHJpdmF0ZSByZWFkb25seSBpbnRlcm5hbEFwcENvbnRhaW5lcjogQ29udGFpbmVyO1xuICAgIEBpbmplY3QoR0xPQkFMX0FQUF9DT05UQUlORVIpIHByaXZhdGUgcmVhZG9ubHkgZ2xvYmFsQXBwQ29udGFpbmVyOiBDb250YWluZXI7XG5cbiAgICBwdWJsaWMgYXN5bmMgb25CdWlsZCgpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IERhdGUubm93KCk7XG5cbiAgICAgICAgdGhpcy5nbG9iYWxBcHBDb250YWluZXIuYmluZChMT0dHRVJfU0VSVklDRSkudG8oU2VydmVyTG9nZ2VyU2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKEVWRU5UX1NFUlZJQ0UpLnRvKFNlcnZlckV2ZW50U2VydmljZSkuaW5TaW5nbGV0b25TY29wZSgpO1xuICAgICAgICB0aGlzLmdsb2JhbEFwcENvbnRhaW5lci5iaW5kKFJQQ19TRVJWSUNFKS50byhTZXJ2ZXJSUENTZXJ2aWNlKS5pblNpbmdsZXRvblNjb3BlKCk7XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKExPR0dFUl9TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUodGhpcy5nbG9iYWxBcHBDb250YWluZXIuZ2V0KExPR0dFUl9TRVJWSUNFKSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxBcHBDb250YWluZXIuYmluZChFVkVOVF9TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUodGhpcy5nbG9iYWxBcHBDb250YWluZXIuZ2V0KEVWRU5UX1NFUlZJQ0UpKTtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEFwcENvbnRhaW5lci5iaW5kKFJQQ19TRVJWSUNFKS50b0NvbnN0YW50VmFsdWUodGhpcy5nbG9iYWxBcHBDb250YWluZXIuZ2V0KFJQQ19TRVJWSUNFKSk7XG5cbiAgICAgICAgY29uc3QgbG9nZ2VyU2VydmljZSA9IHRoaXMuZ2xvYmFsQXBwQ29udGFpbmVyLmdldDxTZXJ2ZXJMb2dnZXJTZXJ2aWNlPihMT0dHRVJfU0VSVklDRSk7XG4gICAgICAgIGxvZ2dlclNlcnZpY2UubG9nKGB+bHd+SW50ZXJuYWwgc2VydmljZXMgYmluZGVkIH5sa34oJHtEYXRlLm5vdygpIC0gdGltZX1tcylgKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQmFzZUV2ZW50U2VydmljZSwgTVVMVElQTEFZRVJfU0VSVklDRSB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IElOVEVSTkFMX0VWRU5UUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50U2VydmljZSwgTXVsdGlwbGF5ZXJQbGF5ZXIsIFNlcnZlckV2ZW50RW1taXRlciwgU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXJ2ZXJFdmVudFNlcnZpY2UgZXh0ZW5kcyBCYXNlRXZlbnRTZXJ2aWNlPE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlckV2ZW50PiBpbXBsZW1lbnRzIEV2ZW50U2VydmljZSB7XG4gICAgcHJpdmF0ZSAkcmFnZUV2ZW50czogU2VydmVyRXZlbnRFbW1pdGVyO1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIG11bHRpcGxheWVyU2VydmljZTogU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKG11bHRpcGxheWVyU2VydmljZS5FdmVudHMpO1xuICAgICAgICB0aGlzLiRyYWdlRXZlbnRzID0gbXVsdGlwbGF5ZXJTZXJ2aWNlLkV2ZW50cztcbiAgICAgICAgdGhpcy4kaW50ZXJuYWxFdmVudE5hbWVzID0gbmV3IFNldChPYmplY3QudmFsdWVzKElOVEVSTkFMX0VWRU5UUykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllcjxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgUGxheWVyTXA+KFxuICAgICAgICBldmVudE5hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKHBsYXllcjogVSwgLi4uYXJnczogdW5rbm93bltdKSA9PiBjYWxsYmFjayhwbGF5ZXIsIGFyZ3NbMF0pO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLiRyYWdlRXZlbnRzLm9uUGxheWVyKGV2ZW50TmFtZSwgd3JhcHBlcik7XG4gICAgICAgIHRoaXMuJHJlbW90ZUhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbmNlUGxheWVyPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21QbGF5ZXJUb1NlcnZlckV2ZW50PixcbiAgICAgICAgY2FsbGJhY2s6IChwbGF5ZXI6IFUsIGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICAgICk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSAocGxheWVyOiBVLCAuLi5hcmdzOiB1bmtub3duW10pID0+IGNhbGxiYWNrKHBsYXllciwgYXJnc1swXSEpO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLiRyYWdlRXZlbnRzLm9uY2VQbGF5ZXIoZXZlbnROYW1lLCB3cmFwcGVyKTtcbiAgICAgICAgdGhpcy4kcmVtb3RlSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3RlPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21QbGF5ZXJUb1NlcnZlckV2ZW50PixcbiAgICAgICAgY2FsbGJhY2s6IChwbGF5ZXI6IFUsIGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICAgICk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uUGxheWVyKGV2ZW50TmFtZSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbmNlUmVtb3RlPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21QbGF5ZXJUb1NlcnZlckV2ZW50PixcbiAgICAgICAgY2FsbGJhY2s6IChwbGF5ZXI6IFUsIGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+LFxuICAgICk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm9uY2VQbGF5ZXIoZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRQbGF5ZXJzPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIHBsYXllcnM6IFVbXSxcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvUGxheWVyRXZlbnQ+LFxuICAgICAgICBib2R5PzogdW5rbm93bixcbiAgICApOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBwbGF5ZXIgb2YgcGxheWVycykge1xuICAgICAgICAgICAgcGxheWVyLmNhbGwoZXZlbnROYW1lLCBbYm9keV0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRQbGF5ZXJzVW5yZWxpYWJsZTxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgTXVsdGlwbGF5ZXJQbGF5ZXI+KFxuICAgICAgICBwbGF5ZXJzOiBVW10sXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1BsYXllckV2ZW50PixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIFJhZ2VNUCB1c2VzIGNhbGxVbnJlbGlhYmxlIGZvciB1bnJlbGlhYmxlIG1lc3NhZ2VzXG4gICAgICAgIGZvciAoY29uc3QgcGxheWVyIG9mIHBsYXllcnMpIHtcbiAgICAgICAgICAgIHBsYXllci5jYWxsVW5yZWxpYWJsZShldmVudE5hbWUsIFtib2R5XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdEFsbFBsYXllcnM8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvUGxheWVyRXZlbnQ+LCBib2R5PzogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBtcC5wbGF5ZXJzLmNhbGwoZXZlbnROYW1lLCBbYm9keV0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0QWxsUGxheWVyc1VucmVsaWFibGU8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvUGxheWVyRXZlbnQ+LCBib2R5PzogdW5rbm93bik6IHZvaWQge1xuICAgICAgICBtcC5wbGF5ZXJzLmNhbGxVbnJlbGlhYmxlKGV2ZW50TmFtZSwgW2JvZHldKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25XZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5vblBsYXllcig8c3RyaW5nPmBTRVJWRVI6Ok9OX1dFQlZJRVdfJHtldmVudE5hbWV9XyR7aWR9YCwgPGFueT5jYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uY2VXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4sXG4gICAgICAgIGNhbGxiYWNrOiAocGxheWVyOiBVLCBib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPixcbiAgICApOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5vbmNlUGxheWVyKDxzdHJpbmc+YFNFUlZFUjo6T05fV0VCVklFV18ke2V2ZW50TmFtZX1fJHtpZH1gLCA8YW55PmNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdFdlYlZpZXdzPEUgZXh0ZW5kcyBzdHJpbmcsIFUgZXh0ZW5kcyBQbGF5ZXJNcD4oXG4gICAgICAgIHBsYXllcnM6IFVbXSxcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvV2ViVmlld0V2ZW50PixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgKTogdm9pZCB7XG4gICAgICAgICg8RXZlbnRTZXJ2aWNlPnRoaXMpLmVtaXRQbGF5ZXJzKHBsYXllcnMsICdTRVJWRVI6OkVNSVRfV0VCVklFVycsIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgcGF5bG9hZDogYm9keSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRBbGxXZWJWaWV3czxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlclRvV2ViVmlld0V2ZW50PixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgKTogdm9pZCB7XG4gICAgICAgICg8RXZlbnRTZXJ2aWNlPnRoaXMpLmVtaXRBbGxQbGF5ZXJzKCdTRVJWRVI6OkVNSVRfV0VCVklFVycsIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgcGF5bG9hZDogYm9keSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRBbGxXZWJWaWV3c1VucmVsaWFibGU8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJUb1dlYlZpZXdFdmVudD4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICk6IHZvaWQge1xuICAgICAgICAoPEV2ZW50U2VydmljZT50aGlzKS5lbWl0QWxsUGxheWVyc1VucmVsaWFibGUoJ1NFUlZFUjo6RU1JVF9XRUJWSUVXJywge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBldmVudE5hbWUsXG4gICAgICAgICAgICBwYXlsb2FkOiBib2R5LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBSYWdlTVAgc2VydmVyIGV2ZW50c1xuICAgIHB1YmxpYyBvblBsYXllckpvaW4oY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckpvaW4nLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyUXVpdChjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGV4aXRUeXBlOiBzdHJpbmcsIHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllclF1aXQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyUmVhZHkoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllclJlYWR5JywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckRlYXRoKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgcmVhc29uOiBudW1iZXIsIGtpbGxlcj86IFBsYXllck1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckRlYXRoJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllclNwYXduKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJTcGF3bicsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJDaGF0KGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgdGV4dDogc3RyaW5nKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckNoYXQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyQ29tbWFuZChjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGNvbW1hbmQ6IHN0cmluZykgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJDb21tYW5kJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckVudGVyVmVoaWNsZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIHZlaGljbGU6IFZlaGljbGVNcCwgc2VhdDogbnVtYmVyKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckVudGVyVmVoaWNsZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJFeGl0VmVoaWNsZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIHZlaGljbGU6IFZlaGljbGVNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFeGl0VmVoaWNsZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJTdGFydEVudGVyVmVoaWNsZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIHZlaGljbGU6IFZlaGljbGVNcCwgc2VhdDogbnVtYmVyKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllclN0YXJ0RW50ZXJWZWhpY2xlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllclN0YXJ0RXhpdFZlaGljbGUoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCB2ZWhpY2xlOiBWZWhpY2xlTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyU3RhcnRFeGl0VmVoaWNsZScsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJXZWFwb25DaGFuZ2UoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBvbGRXZWFwb246IG51bWJlciwgbmV3V2VhcG9uOiBudW1iZXIpID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyV2VhcG9uQ2hhbmdlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckRhbWFnZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGhlYWx0aExvc3M6IG51bWJlciwgYXJtb3JMb3NzOiBudW1iZXIpID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRGFtYWdlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblZlaGljbGVEZWF0aChjYWxsYmFjazogKHZlaGljbGU6IFZlaGljbGVNcCwgaGFzaDogbnVtYmVyLCBraWxsZXI/OiBQbGF5ZXJNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCd2ZWhpY2xlRGVhdGgnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVmVoaWNsZURhbWFnZShjYWxsYmFjazogKHZlaGljbGU6IFZlaGljbGVNcCwgYm9keUhlYWx0aExvc3M6IG51bWJlciwgZW5naW5lSGVhbHRoTG9zczogbnVtYmVyKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3ZlaGljbGVEYW1hZ2UnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRW50ZXJDb2xzaGFwZShjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGNvbHNoYXBlOiBDb2xzaGFwZU1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllckVudGVyQ29sc2hhcGUnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdENvbHNoYXBlKGNhbGxiYWNrOiAocGxheWVyOiBQbGF5ZXJNcCwgY29sc2hhcGU6IENvbHNoYXBlTXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdENvbHNoYXBlJywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllckVudGVyQ2hlY2twb2ludChjYWxsYmFjazogKHBsYXllcjogUGxheWVyTXAsIGNoZWNrcG9pbnQ6IENoZWNrcG9pbnRNcCkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIHJldHVybiB0aGlzLiRyYWdlRXZlbnRzLm9uKCdwbGF5ZXJFbnRlckNoZWNrcG9pbnQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUGxheWVyRXhpdENoZWNrcG9pbnQoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wLCBjaGVja3BvaW50OiBDaGVja3BvaW50TXApID0+IHZvaWQpOiBTY3JpcHRFdmVudEhhbmRsZXIge1xuICAgICAgICByZXR1cm4gdGhpcy4kcmFnZUV2ZW50cy5vbigncGxheWVyRXhpdENoZWNrcG9pbnQnLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLy8gQWxpYXNlcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgIHB1YmxpYyBvblBsYXllckNvbm5lY3QoY2FsbGJhY2s6IChwbGF5ZXI6IFBsYXllck1wKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub25QbGF5ZXJKb2luKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25QbGF5ZXJEaXNjb25uZWN0KGNhbGxiYWNrOiAoY29udGV4dDogeyBwbGF5ZXI6IFBsYXllck1wOyBleGl0VHlwZTogc3RyaW5nOyByZWFzb246IHN0cmluZyB9KSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJhZ2VFdmVudHMub24oJ3BsYXllclF1aXQnLCAocGxheWVyOiBQbGF5ZXJNcCwgZXhpdFR5cGU6IHN0cmluZywgcmVhc29uOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHsgcGxheWVyLCBleGl0VHlwZSwgcmVhc29uIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IElOVEVSTkFMX0VWRU5UUyA9IHtcbiAgICBTQ1JJUFRfUlBDOiAnc2NyaXB0UlBDJyxcbiAgICBTQ1JJUFRfUlBDX0FOU1dFUjogJ3NjcmlwdFJQQ0Fuc3dlcicsXG4gICAgU0VSVkVSX1NUQVJURUQ6ICdzZXJ2ZXJTdGFydGVkJyxcbiAgICBDT05ORUNUSU9OX1FVRVVFX0FERDogJ2Nvbm5lY3Rpb25RdWV1ZUFkZCcsXG4gICAgQ09OTkVDVElPTl9RVUVVRV9SRU1PVkU6ICdjb25uZWN0aW9uUXVldWVSZW1vdmUnLFxuICAgIFBMQVlFUl9DT05ORUNUOiAncGxheWVyQ29ubmVjdCcsXG4gICAgUExBWUVSX0NPTk5FQ1RfREVOSUVEOiAncGxheWVyQ29ubmVjdERlbmllZCcsXG4gICAgUExBWUVSX0RJU0NPTk5FQ1Q6ICdwbGF5ZXJEaXNjb25uZWN0JyxcbiAgICBQTEFZRVJfREFNQUdFOiAncGxheWVyRGFtYWdlJyxcbiAgICBQTEFZRVJfREVBVEg6ICdwbGF5ZXJEZWF0aCcsXG4gICAgUExBWUVSX0hFQUw6ICdwbGF5ZXJIZWFsJyxcbiAgICBQTEFZRVJfQ09OVFJPTF9SRVFVRVNUOiAncGxheWVyQ29udHJvbFJlcXVlc3QnLFxuICAgIFBMQVlFUl9JTlRFUklPUl9DSEFOR0U6ICdwbGF5ZXJJbnRlcmlvckNoYW5nZScsXG4gICAgUExBWUVSX0RJTUVOU0lPTl9DSEFOR0U6ICdwbGF5ZXJEaW1lbnNpb25DaGFuZ2UnLFxuICAgIFBMQVlFUl9XRUFQT05fQ0hBTkdFOiAncGxheWVyV2VhcG9uQ2hhbmdlJyxcbiAgICBQTEFZRVJfU1lOQ0VEX1NDRU5FX1JFUVVFU1Q6ICdwbGF5ZXJTeW5jZWRTY2VuZVJlcXVlc3QnLFxuICAgIFBMQVlFUl9TWU5DRURfU0NFTkVfU1RBUlQ6ICdwbGF5ZXJTeW5jZWRTY2VuZVN0YXJ0JyxcbiAgICBQTEFZRVJfU1lOQ0VEX1NDRU5FX1NUT1A6ICdwbGF5ZXJTeW5jZWRTY2VuZVN0b3AnLFxuICAgIFBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFOiAncGxheWVyU3luY2VkU2NlbmVVcGRhdGUnLFxuICAgIFBMQVlFUl9TUEFXTjogJ3BsYXllclNwYXduJyxcbiAgICBQTEFZRVJfQU5JTUFUSU9OX0NIQU5HRTogJ3BsYXllckFuaW1hdGlvbkNoYW5nZScsXG4gICAgUExBWUVSX1ZFSElDTEVfRU5URVJFRDogJ3BsYXllclZlaGljbGVFbnRlcmVkJyxcbiAgICBQTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUjogJ3BsYXllclN0YXJ0VmVoaWNsZUVudGVyJyxcbiAgICBQTEFZRVJfVkVISUNMRV9MRUZUOiAncGxheWVyVmVoaWNsZUxlZnQnLFxuICAgIFBMQVlFUl9WRUhJQ0xFX1NFQVRfQ0hBTkdFOiAncGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UnLFxuICAgIFBFRF9IRUFMOiAncGVkSGVhbCcsXG4gICAgUEVEX0RFQVRIOiAncGVkRGVhdGgnLFxuICAgIFBFRF9EQU1BR0U6ICdwZWREYW1hZ2UnLFxuICAgIFZFSElDTEVfREVTVFJPWTogJ3ZlaGljbGVEZXN0cm95JyxcbiAgICBWRUhJQ0xFX0FUVEFDSDogJ3ZlaGljbGVBdHRhY2gnLFxuICAgIFZFSElDTEVfREVUQUNIOiAndmVoaWNsZURldGFjaCcsXG4gICAgVkVISUNMRV9EQU1BR0U6ICd2ZWhpY2xlRGFtYWdlJyxcbiAgICBWRUhJQ0xFX1NJUkVOX1NUQVRFX0NIQU5HRTogJ3ZlaGljbGVTaXJlblN0YXRlQ2hhbmdlJyxcbiAgICBWRUhJQ0xFX0hPUk5fU1RBVEVfQ0hBTkdFOiAndmVoaWNsZUhvcm5TdGF0ZUNoYW5nZScsXG4gICAgVk9JQ0VfQ09OTkVDVElPTjogJ3ZvaWNlQ29ubmVjdGlvbicsXG4gICAgQ0xJRU5UX09CSkVDVF9ERUxFVEU6ICdjbGllbnRPYmplY3REZWxldGUnLFxuICAgIENMSUVOVF9PQkpFQ1RfUkVRVUVTVDogJ2NsaWVudE9iamVjdFJlcXVlc3QnLFxuICAgIEJBU0VfT0JKRUNUX0NSRUFURTogJ2Jhc2VPYmplY3RDcmVhdGUnLFxuICAgIEJBU0VfT0JKRUNUX1JFTU9WRTogJ2Jhc2VPYmplY3RSZW1vdmUnLFxuICAgIE5FVF9PV05FUl9DSEFOR0U6ICduZXRPd25lckNoYW5nZScsXG4gICAgV0VBUE9OX0RBTUFHRTogJ3dlYXBvbkRhbWFnZScsXG4gICAgTUVUQV9DSEFOR0U6ICdtZXRhQ2hhbmdlJyxcbiAgICBMT0NBTF9NRVRBX0NIQU5HRTogJ2xvY2FsTWV0YUNoYW5nZScsXG4gICAgU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRTogJ3N0cmVhbVN5bmNlZE1ldGFDaGFuZ2UnLFxuICAgIEdMT0JBTF9NRVRBX0NIQU5HRTogJ2dsb2JhbE1ldGFDaGFuZ2UnLFxuICAgIEdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0U6ICdnbG9iYWxTeW5jZWRNZXRhQ2hhbmdlJyxcbiAgICBDT05TT0xFX0NPTU1BTkQ6ICdjb25zb2xlQ29tbWFuZCcsXG4gICAgRVJST1I6ICdlcnJvcicsXG4gICAgQ09MX1NIQVBFX0VWRU5UOiAnY29sU2hhcGVFdmVudCcsXG4gICAgRVhQTE9TSU9OOiAnZXhwbG9zaW9uJyxcbiAgICBGSVJFX1NUQVJUOiAnZmlyZVN0YXJ0JyxcbiAgICBQUk9KRUNUSUxFX1NUQVJUOiAncHJvamVjdGlsZVN0YXJ0JyxcbiAgICBFTlRJVFlfQ09MX1NIQVBFX0VOVEVSOiAnZW50aXR5Q29sU2hhcGVFbnRlcicsXG4gICAgRU5USVRZX0NPTF9TSEFQRV9MRUFWRTogJ2VudGl0eUNvbFNoYXBlTGVhdmUnLFxuICAgIEVOVElUWV9DSEVDS1BPSU5UX0VOVEVSOiAnZW50aXR5Q2hlY2twb2ludEVudGVyJyxcbiAgICBFTlRJVFlfQ0hFQ0tQT0lOVF9MRUFWRTogJ2VudGl0eUNoZWNrcG9pbnRMZWF2ZScsXG4gICAgR0lWRV9QRURfU0NSSVBURURfVEFTSzogJ2dpdmVQZWRTY3JpcHRlZFRhc2snLFxuICAgIExPQ0FMX1NDUklQVF9FVkVOVDogJ2xvY2FsU2NyaXB0RXZlbnQnLFxuICAgIFJFTU9URV9TQ1JJUFRfRVZFTlQ6ICdyZW1vdGVTY3JpcHRFdmVudCcsXG5cbiAgICBBTllfUkVTT1VSQ0VfU1RBUlQ6ICdhbnlSZXNvdXJjZVN0YXJ0JyxcbiAgICBBTllfUkVTT1VSQ0VfU1RPUDogJ2FueVJlc291cmNlU3RvcCcsXG5cbiAgICBSRVNPVVJDRV9TVEFSVDogJ3Jlc291cmNlU3RhcnQnLFxuICAgIFJFU09VUkNFX1NUT1A6ICdyZXNvdXJjZVN0b3AnLFxuICAgIFJFU09VUkNFX0VSUk9SOiAncmVzb3VyY2VFcnJvcicsXG4gICAgRVZFTlQ6ICdldmVudCcsXG59O1xuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgeyBNQU5HT19MT0dfUFJFRklYLCBNVUxUSVBMQVlFUl9TRVJWSUNFIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJNdWx0aXBsYXllclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlcnZlckxvZ2dlclNlcnZpY2UgaW1wbGVtZW50cyBMb2dnZXJTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KE1VTFRJUExBWUVSX1NFUlZJQ0UpIG11bHRpcGxheWVyU2VydmljZTogU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBsb2coLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLmxvZyhgfnd+W355fiR7TUFOR09fTE9HX1BSRUZJWH1TZXJ2ZXJ+d35dW35sYn5Mb2d+d35dYCwgLi4uYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdhcm4oLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLmxvZ1dhcm5pbmcoYFske01BTkdPX0xPR19QUkVGSVh9U2VydmVyXVtXYXJuXWAsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBlcnJvciguLi5hcmdzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tdWx0aXBsYXllclNlcnZpY2UubG9nRXJyb3IoYFske01BTkdPX0xPR19QUkVGSVh9U2VydmVyXVtFcnJvcl1gLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVidWcoLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlwbGF5ZXJTZXJ2aWNlLmxvZ0RlYnVnKGB+d35bfnl+JHtNQU5HT19MT0dfUFJFRklYfVNlcnZlcn53fl1bfmxjfkRlYnVnfnd+XWAsIC4uLmFyZ3MpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBpbmplY3QsIGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHtcbiAgICBCYXNlUlBDU2VydmljZSxcbiAgICBFdmVudERlc3RpbmF0aW9uLFxuICAgIHR5cGUgUlBDUGF5bG9hZCxcbiAgICBSUENfUkVTVUxUX1RJTUVPVVQsXG4gICAgUlBDX1JFU1VMVF9QTEFZRVJfRElTQ09OTkVDVEVELFxuICAgIFJQQ19SRVNVTFRfUExBWUVSX05PVF9GT1VORCxcbn0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQge1xuICAgIEVWRU5UX1NFUlZJQ0UsXG4gICAgRXJyb3JNZXNzYWdlLFxuICAgIHR5cGUgUlBDQ2FsbE9wdGlvbnMsXG4gICAgdHlwZSBSUENSZXN1bHQsXG4gICAgdHlwZSBTY3JpcHRSUENIYW5kbGVyLFxuICAgIGdlbmVyYXRlUmFuZG9tSWQsXG59IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5pbXBvcnQgdHlwZSB7IE11bHRpcGxheWVyUGxheWVyLCBSUENTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmVyLWV2ZW50LnNlcnZpY2UnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VydmVyUlBDU2VydmljZSBleHRlbmRzIEJhc2VSUENTZXJ2aWNlPE1hbmdvUlBDLkN1c3RvbVNlcnZlclJQQz4gaW1wbGVtZW50cyBSUENTZXJ2aWNlIHtcbiAgICBAaW5qZWN0KEVWRU5UX1NFUlZJQ0UpIHByaXZhdGUgcmVhZG9ubHkgJGV2ZW50U2VydmljZTogU2VydmVyRXZlbnRTZXJ2aWNlO1xuICAgIHB1YmxpYyByZWFkb25seSAkY2xpZW50SGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgU2NyaXB0UlBDSGFuZGxlcj4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgJHdlYlZpZXdIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCBTY3JpcHRSUENIYW5kbGVyPigpO1xuXG4gICAgcHVibGljIGFzeW5jIGNhbGxQbGF5ZXI8RSBleHRlbmRzIHN0cmluZywgVSBleHRlbmRzIE11bHRpcGxheWVyUGxheWVyPihcbiAgICAgICAgcGxheWVyOiBVLFxuICAgICAgICBycGNOYW1lOiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbVNlcnZlclRvQ2xpZW50UlBDPixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgICAgIG9wdGlvbnM6IFJQQ0NhbGxPcHRpb25zID0geyB0aW1lb3V0OiB0aGlzLiRUSU1FT1VUIH0sXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVDYWxsKHBsYXllciwgcnBjTmFtZSwgRXZlbnREZXN0aW5hdGlvbi5DbGllbnQsIG9wdGlvbnMsIGJvZHkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBsYXllclJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZywgVSBleHRlbmRzIE11bHRpcGxheWVyUGxheWVyPihcbiAgICAgICAgcnBjTmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21DbGllbnRUb1NlcnZlclJQQz4sXG4gICAgICAgIGhhbmRsZXI6IChzZW5kZXI6IFUsIGJvZHk6IHVua25vd24pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+LFxuICAgICkge1xuICAgICAgICBpZiAodGhpcy4kY2xpZW50SGFuZGxlcnMuaGFzKHJwY05hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVnaXN0ZXIgUlBDLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENIYW5kbGVyQWxyZWFkeUV4aXN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBycGNIYW5kbGVyOiBTY3JpcHRSUENIYW5kbGVyID0ge1xuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBycGNIYW5kbGVyLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kY2xpZW50SGFuZGxlcnMuZGVsZXRlKHJwY05hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJwY05hbWUsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy4kY2xpZW50SGFuZGxlcnMuc2V0KHJwY05hbWUsIHJwY0hhbmRsZXIpO1xuXG4gICAgICAgIHJldHVybiBycGNIYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYWxsV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nLCBVIGV4dGVuZHMgTXVsdGlwbGF5ZXJQbGF5ZXI+KFxuICAgICAgICBwbGF5ZXI6IFUsXG4gICAgICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgIHJwY05hbWU6IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tU2VydmVyVG9XZWJWaWV3UlBDPixcbiAgICAgICAgYm9keT86IHVua25vd24sXG4gICAgICAgIG9wdGlvbnM6IFJQQ0NhbGxPcHRpb25zID0geyB0aW1lb3V0OiB0aGlzLiRUSU1FT1VUIH0sXG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRoYW5kbGVDYWxsKHBsYXllciwgcnBjTmFtZSwgRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3LCBvcHRpb25zLCBib2R5LCBpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uV2ViVmlld1JlcXVlc3Q8RSBleHRlbmRzIGtleW9mIE1hbmdvUlBDLkN1c3RvbVdlYlZpZXdUb1NlcnZlclJQQywgVSBleHRlbmRzIE11bHRpcGxheWVyUGxheWVyPihcbiAgICAgICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAgcnBjTmFtZTogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUEM+LFxuICAgICAgICBoYW5kbGVyOiAoXG4gICAgICAgICAgICBwbGF5ZXI6IFUsXG4gICAgICAgICAgICBib2R5OiBQYXJhbWV0ZXJzPE1hbmdvUlBDLkN1c3RvbVdlYlZpZXdUb1NlcnZlclJQQ1tFXT5bMF0sXG4gICAgICAgICkgPT4gUmV0dXJuVHlwZTxNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUENbRV0+LFxuICAgICkge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHtpZH06OiR7cnBjTmFtZX1gO1xuICAgICAgICBpZiAodGhpcy4kd2ViVmlld0hhbmRsZXJzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gcmVnaXN0ZXIgUlBDLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5SUENIYW5kbGVyQWxyZWFkeUV4aXN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBycGNIYW5kbGVyOiBTY3JpcHRSUENIYW5kbGVyID0ge1xuICAgICAgICAgICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBycGNIYW5kbGVyLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy4kd2ViVmlld0hhbmRsZXJzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJwY05hbWUsXG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy4kd2ViVmlld0hhbmRsZXJzLnNldChrZXksIHJwY0hhbmRsZXIpO1xuXG4gICAgICAgIHJldHVybiBycGNIYW5kbGVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgJGhhbmRsZUNhbGw8VFJlc3VsdD4oXG4gICAgICAgIHBsYXllcjogTXVsdGlwbGF5ZXJQbGF5ZXIsXG4gICAgICAgIHJwY05hbWU6IHN0cmluZyxcbiAgICAgICAgZGVzdGluYXRpb246IEV2ZW50RGVzdGluYXRpb24sIC8vICdjbGllbnQnIHwgJ3dlYnZpZXcnLFxuICAgICAgICBvcHRpb25zPzogUGFydGlhbDxSUENDYWxsT3B0aW9ucz4sXG4gICAgICAgIGJvZHk/OiB1bmtub3duLFxuICAgICAgICB3ZWJWaWV3SWQ/OiBzdHJpbmcgfCBudW1iZXIsXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxSUENSZXN1bHQ8VFJlc3VsdD4+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBsYXllci52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5SUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2FsbElkID0gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgICAgICAgICAgbGV0IHRpbWVvdXRJZDogTm9kZUpTLlRpbWVvdXQ7XG5cbiAgICAgICAgICAgIGNvbnN0IGRpc2Nvbm5lY3RIYW5kbGVyID0gdGhpcy4kZXZlbnRTZXJ2aWNlLm9uUGxheWVyRGlzY29ubmVjdCgoY29udGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnBsYXllciA9PT0gcGxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgICAgICBkaXNjb25uZWN0SGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5SUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBvbmNlSGFuZGxlID0gKF9wbGF5ZXI6IE11bHRpcGxheWVyUGxheWVyLCBib2R5OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgZGlzY29ubmVjdEhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoPFJQQ1Jlc3VsdDxUUmVzdWx0Pj5ib2R5KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBFeGFtcGxlOiBSUEM6OlJFVFVSTl9GUk9NX1NFUlZFUl8yMWV3ckVxLCBSUEM6OlJFVFVSTl9GUk9NX1dFQlZJRVdfdGVFcWQyXG4gICAgICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPVxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uID09PSBFdmVudERlc3RpbmF0aW9uLldlYlZpZXdcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLiRldmVudFNlcnZpY2Uub25jZVdlYlZpZXcod2ViVmlld0lkISwgYFJQQzo6UkVUVVJOX0ZST01fV0VCVklFV18ke2NhbGxJZH1gLCBvbmNlSGFuZGxlKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJGV2ZW50U2VydmljZS5vbmNlUGxheWVyKGBSUEM6OlJFVFVSTl9GUk9NX0NMSUVOVF8ke2NhbGxJZH1gLCBvbmNlSGFuZGxlKTtcblxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZDogUlBDUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IEV2ZW50RGVzdGluYXRpb24uU2VydmVyLFxuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICAgIGlkOiBjYWxsSWQsXG4gICAgICAgICAgICAgICAgcnBjTmFtZSxcbiAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIEV4YW1wbGU6IFJQQzo6Q0FMTF9TRVJWRVIsIFJQQzo6Q0FMTF9XRUJWSUVXXG4gICAgICAgICAgICBkZXN0aW5hdGlvbiA9PT0gRXZlbnREZXN0aW5hdGlvbi5XZWJWaWV3XG4gICAgICAgICAgICAgICAgPyBwbGF5ZXIuZW1pdFdlYlZpZXcod2ViVmlld0lkISwgJ1JQQzo6Q0FMTF9XRUJWSUVXJywgcGF5bG9hZClcbiAgICAgICAgICAgICAgICA6IHBsYXllci5lbWl0KCdSUEM6OkNBTExfQ0xJRU5UJywgcGF5bG9hZCk7XG5cbiAgICAgICAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSg8UlBDUmVzdWx0PFRSZXN1bHQ+PlJQQ19SRVNVTFRfVElNRU9VVCk7XG4gICAgICAgICAgICB9LCBvcHRpb25zPy50aW1lb3V0ID8/IHRoaXMuJFRJTUVPVVQpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcblxuZXhwb3J0IGNsYXNzIFJhZ2VNUFNlcnZlclNjcmlwdEV2ZW50IGltcGxlbWVudHMgU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBldmVudE5hbWU6IHN0cmluZyxcbiAgICAgICAgcHJpdmF0ZSBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkLFxuICAgICkge31cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5yZW1vdmUodGhpcy5ldmVudE5hbWUsIHRoaXMubGlzdGVuZXIpO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IFNjcmlwdEV2ZW50SGFuZGxlciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZS9hcHAnO1xuaW1wb3J0IHR5cGUgeyBNdWx0aXBsYXllclBsYXllciwgU2VydmVyRXZlbnRFbW1pdGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudCB9IGZyb20gJy4vcmFnZW1wLXNjcmlwdC1ldmVudC1oYW5kbGVyJztcblxuZXhwb3J0IGNsYXNzIFNlcnZlclJhZ2VNUEV2ZW50RW1taXRlciBpbXBsZW1lbnRzIFNlcnZlckV2ZW50RW1taXRlciB7XG4gICAgcHJpdmF0ZSBtYXBFdmVudHNTaGFyZWQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgIC8vIE1hcCBhbHQ6ViBldmVudCBuYW1lcyB0byBSYWdlTVAgZXF1aXZhbGVudHNcbiAgICAgICAgJ2VudGl0eUNvbFNoYXBlRW50ZXInOiAncGxheWVyRW50ZXJDb2xzaGFwZScsXG4gICAgICAgICdlbnRpdHlDb2xTaGFwZUxlYXZlJzogJ3BsYXllckV4aXRDb2xzaGFwZScsXG4gICAgICAgICdwbGF5ZXJWZWhpY2xlRW50ZXJlZCc6ICdwbGF5ZXJFbnRlclZlaGljbGUnLFxuICAgICAgICAncGxheWVyVmVoaWNsZUxlZnQnOiAncGxheWVyRXhpdFZlaGljbGUnLFxuICAgICAgICAncGxheWVyU3RhcnRWZWhpY2xlRW50ZXInOiAncGxheWVyU3RhcnRFbnRlclZlaGljbGUnLFxuICAgICAgICAncGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UnOiAncGxheWVyRXhpdFZlaGljbGUnLCAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIHNlYXQgY2hhbmdlLCBjbG9zZXN0IGlzIGV4aXRcbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXBFdmVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSkge31cblxuICAgIHByaXZhdGUgZ2V0RXZlbnROYW1lKGV2ZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwRXZlbnRzU2hhcmVkW2V2ZW50TmFtZV0gfHwgdGhpcy5tYXBFdmVudHNbZXZlbnROYW1lXSB8fCBldmVudE5hbWU7XG4gICAgfVxuXG4gICAgZW1pdChldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLmNhbGwoZXZlbnROYW1lLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBvbihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50TmFtZSA9IHRoaXMuZ2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICAgIG1wLmV2ZW50cy5hZGQobWFwcGVkRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQobWFwcGVkRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgb25jZShldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IFNjcmlwdEV2ZW50SGFuZGxlciB7XG4gICAgICAgIGNvbnN0IG1hcHBlZEV2ZW50TmFtZSA9IHRoaXMuZ2V0RXZlbnROYW1lKGV2ZW50TmFtZSk7XG4gICAgICAgIGNvbnN0IG9uY2VXcmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBtcC5ldmVudHMucmVtb3ZlKG1hcHBlZEV2ZW50TmFtZSwgb25jZVdyYXBwZXIpO1xuICAgICAgICAgICAgbGlzdGVuZXIoLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIG1wLmV2ZW50cy5hZGQobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgIHJldHVybiBuZXcgUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgfVxuXG4gICAgb2ZmKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIG1wLmV2ZW50cy5yZW1vdmUoZXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgZW1pdFBsYXllcihwbGF5ZXI6IE11bHRpcGxheWVyUGxheWVyLCBldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgLy8gSW4gUmFnZU1QLCBwbGF5ZXIuY2FsbCgpIGlzIHVzZWQgdG8gZW1pdCBldmVudHMgdG8gY2xpZW50c1xuICAgICAgICAocGxheWVyIGFzIGFueSkuY2FsbChldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRBbGxQbGF5ZXJzUmF3KGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICAvLyBJbiBSYWdlTVAsIHVzZSBtcC5wbGF5ZXJzLmNhbGwoKSB0byBlbWl0IHRvIGFsbCBwbGF5ZXJzXG4gICAgICAgIG1wLnBsYXllcnMuY2FsbChldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRBbGxQbGF5ZXJzVW5yZWxpYWJsZVJhdyhldmVudE5hbWU6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGhhcyBjYWxsVW5yZWxpYWJsZSBmb3IgdW5yZWxpYWJsZSBldmVudHNcbiAgICAgICAgbXAucGxheWVycy5jYWxsVW5yZWxpYWJsZShldmVudE5hbWUsIGFyZ3MpO1xuICAgIH1cblxuICAgIGVtaXRVbnJlbGlhYmxlUmF3KHBsYXllcnM6IE11bHRpcGxheWVyUGxheWVyW10sIGV2ZW50TmFtZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IHBsYXllciBvZiBwbGF5ZXJzKSB7XG4gICAgICAgICAgICAocGxheWVyIGFzIGFueSkuY2FsbFVucmVsaWFibGUoZXZlbnROYW1lLCBhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheWVyKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgLy8gSW4gUmFnZU1QLCBjbGllbnQgZXZlbnRzIGNvbWUgdGhyb3VnaCB0aGUgc2FtZSBtcC5ldmVudHMuYWRkXG4gICAgICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0eXBpY2FsbHkgdGhlIHBsYXllciB3aG8gc2VudCB0aGUgZXZlbnRcbiAgICAgICAgY29uc3QgbWFwcGVkRXZlbnROYW1lID0gdGhpcy5nZXRFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChtYXBwZWRFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudChtYXBwZWRFdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICBvbmNlUGxheWVyKGV2ZW50TmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU2NyaXB0RXZlbnRIYW5kbGVyIHtcbiAgICAgICAgY29uc3QgbWFwcGVkRXZlbnROYW1lID0gdGhpcy5nZXRFdmVudE5hbWUoZXZlbnROYW1lKTtcbiAgICAgICAgY29uc3Qgb25jZVdyYXBwZXIgPSAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICAgIG1wLmV2ZW50cy5yZW1vdmUobWFwcGVkRXZlbnROYW1lLCBvbmNlV3JhcHBlcik7XG4gICAgICAgICAgICBsaXN0ZW5lciguLi5hcmdzKTtcbiAgICAgICAgfTtcbiAgICAgICAgbXAuZXZlbnRzLmFkZChtYXBwZWRFdmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYWdlTVBTZXJ2ZXJTY3JpcHRFdmVudChtYXBwZWRFdmVudE5hbWUsIG9uY2VXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBvZmZQbGF5ZXIoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgbXAuZXZlbnRzLnJlbW92ZShldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBTZXJ2ZXJFdmVudEVtbWl0ZXIsIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIgfSBmcm9tICcuL3JhZ2VtcC1ldmVudC1lbW1pdGVyJztcblxuZXhwb3J0IGNsYXNzIFNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBleHRlbmRzIFJhZ2VNUE11bHRpcGxheWVyU2VydmljZSBpbXBsZW1lbnRzIFNlcnZlck11bHRpcGxheWVyU2VydmljZSB7XG4gICAgcHVibGljIG92ZXJyaWRlIEV2ZW50czogU2VydmVyRXZlbnRFbW1pdGVyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuRXZlbnRzID0gbmV3IFNlcnZlclJhZ2VNUEV2ZW50RW1taXRlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQbGF5ZXIoKSB7XG4gICAgICAgIC8vIFJldHVybiB0aGUgbXAuUGxheWVyIGNvbnN0cnVjdG9yIGZvciBmYWN0b3J5IHB1cnBvc2VzXG4gICAgICAgIHJldHVybiAobXAgYXMgYW55KS5QbGF5ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEJsaXBGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBSYWdlTVAgZG9lc24ndCBoYXZlIGZhY3RvcnkgcGF0dGVybiBsaWtlIGFsdDpWXG4gICAgICAgIC8vIFdlIGNhbiBleHRlbmQgdGhlIHByb3RvdHlwZSBpbnN0ZWFkXG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkJsaXApIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuQmxpcC5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1hcmtlckZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLk1hcmtlcikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5NYXJrZXIucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDb2xTaGFwZUZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkNvbHNoYXBlKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLkNvbHNoYXBlLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q2hlY2twb2ludEZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLkNoZWNrcG9pbnQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuQ2hlY2twb2ludC5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE9iamVjdEZhY3RvcnkoZmFjdG9yeTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChmYWN0b3J5ICYmIChtcCBhcyBhbnkpLk9iamVjdCkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbigobXAgYXMgYW55KS5PYmplY3QucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQZWRGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5QZWQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oKG1wIGFzIGFueSkuUGVkLnByb3RvdHlwZSwgZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGxheWVyRmFjdG9yeShmYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZhY3RvcnkgJiYgKG1wIGFzIGFueSkuUGxheWVyKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlBsYXllci5wcm90b3R5cGUsIGZhY3RvcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlaGljbGVGYWN0b3J5KGZhY3Rvcnk6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoZmFjdG9yeSAmJiAobXAgYXMgYW55KS5WZWhpY2xlKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKChtcCBhcyBhbnkpLlZlaGljbGUucHJvdG90eXBlLCBmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsRW50aXR5R3JvdXBcbiAgICAgICAgLy8gQ291bGQgbG9nIGEgd2FybmluZyBvciBpbXBsZW1lbnQgY3VzdG9tIHNvbHV0aW9uXG4gICAgfVxuXG4gICAgcHVibGljIHNldFZpcnR1YWxFbnRpdHlGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIGRvZXNuJ3QgaGF2ZSBWaXJ0dWFsRW50aXR5XG4gICAgICAgIC8vIENvdWxkIGxvZyBhIHdhcm5pbmcgb3IgaW1wbGVtZW50IGN1c3RvbSBzb2x1dGlvblxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWb2ljZUNoYW5uZWxGYWN0b3J5KF9mYWN0b3J5OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gUmFnZU1QIHZvaWNlIGlzIGhhbmRsZWQgZGlmZmVyZW50bHlcbiAgICAgICAgLy8gQ291bGQgaW1wbGVtZW50IGN1c3RvbSB2b2ljZSBjaGFubmVsIG1hbmFnZW1lbnRcbiAgICB9XG5cbiAgICAvLyBPdmVycmlkZSBsb2dnaW5nIG1ldGhvZHMgLSBSYWdlTVAgc2VydmVyIHVzZXMgY29uc29sZS5sb2csIG5vdCBtcC5jb25zb2xlLmxvZ0luZm9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbG9nKGFyZzogYW55LCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gW2FyZywgLi4uYXJnc10ubWFwKGEgPT5cbiAgICAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KGEpIDogU3RyaW5nKGEpXG4gICAgICAgICkuam9pbignICcpO1xuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbG9nRXJyb3IoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGxvZ1dhcm5pbmcoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbG9nRGVidWcoYXJnOiBhbnksIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBbYXJnLCAuLi5hcmdzXS5tYXAoYSA9PlxuICAgICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoYSkgOiBTdHJpbmcoYSlcbiAgICAgICAgKS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbREVCVUddICR7bWVzc2FnZX1gKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBFcnJvckZpbHRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVXNlRmlsdGVycyBhcyAkVXNlRmlsdGVycywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUZpbHRlcnMoLi4uZmlsdGVyczogKE5ld2FibGU8RXJyb3JGaWx0ZXI+IHwgRXJyb3JGaWx0ZXIpW10pIHtcbiAgICByZXR1cm4gJFVzZUZpbHRlcnMoLi4uZmlsdGVycyk7XG59XG4iLCAiaW1wb3J0IHsgT25JbnRlcm5hbCwgT25jZUludGVybmFsIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IElOVEVSTkFMX0VWRU5UUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblNjcmlwdFJQQygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU0NSSVBUX1JQQyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2NyaXB0UlBDKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUEMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uU2NyaXB0UlBDQW5zd2VyKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5TQ1JJUFRfUlBDX0FOU1dFUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlU2NyaXB0UlBDQW5zd2VyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNDUklQVF9SUENfQU5TV0VSKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblNlcnZlclN0YXJ0ZWQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNFUlZFUl9TVEFSVEVEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VTZXJ2ZXJTdGFydGVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNFUlZFUl9TVEFSVEVEKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkNvbm5lY3Rpb25RdWV1ZUFkZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OTkVDVElPTl9RVUVVRV9BREQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUNvbm5lY3Rpb25RdWV1ZUFkZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05ORUNUSU9OX1FVRVVFX0FERCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db25uZWN0aW9uUXVldWVSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNPTk5FQ1RJT05fUVVFVUVfUkVNT1ZFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb25uZWN0aW9uUXVldWVSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OTkVDVElPTl9RVUVVRV9SRU1PVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyQ29ubmVjdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckNvbm5lY3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyQ29ubmVjdERlbmllZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTk5FQ1RfREVOSUVEKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJDb25uZWN0RGVuaWVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9DT05ORUNUX0RFTklFRCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEaXNjb25uZWN0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfRElTQ09OTkVDVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyRGlzY29ubmVjdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfRElTQ09OTkVDVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEYW1hZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9EQU1BR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckRhbWFnZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfREFNQUdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllckRlYXRoKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfREVBVEgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllckRlYXRoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9ERUFUSCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJIZWFsKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfSEVBTCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVySGVhbCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfSEVBTCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJDb250cm9sUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTlRST0xfUkVRVUVTVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyQ29udHJvbFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0NPTlRST0xfUkVRVUVTVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJJbnRlcmlvckNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0lOVEVSSU9SX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVySW50ZXJpb3JDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0lOVEVSSU9SX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJEaW1lbnNpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9ESU1FTlNJT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJEaW1lbnNpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0RJTUVOU0lPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyV2VhcG9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfV0VBUE9OX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyV2VhcG9uQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9XRUFQT05fQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclN5bmNlZFNjZW5lUmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJTeW5jZWRTY2VuZVJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclN5bmNlZFNjZW5lU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN5bmNlZFNjZW5lU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9TVEFSVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTeW5jZWRTY2VuZVN0b3AoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RPUCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyU3luY2VkU2NlbmVTdG9wKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfU1RPUCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJTeW5jZWRTY2VuZVVwZGF0ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1NZTkNFRF9TQ0VORV9VUERBVEUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclN5bmNlZFNjZW5lVXBkYXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclNwYXduKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1BBV04pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclNwYXduKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TUEFXTik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJBbmltYXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9BTklNQVRJT05fQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJBbmltYXRpb25DaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX0FOSU1BVElPTl9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyVmVoaWNsZUVudGVyZWQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclZlaGljbGVFbnRlcmVkKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyU3RhcnRWZWhpY2xlRW50ZXIoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQbGF5ZXJTdGFydFZlaGljbGVFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QTEFZRVJfU1RBUlRfVkVISUNMRV9FTlRFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJWZWhpY2xlTGVmdCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfTEVGVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyVmVoaWNsZUxlZnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfTEVGVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJWZWhpY2xlU2VhdENoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllclZlaGljbGVTZWF0Q2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBMQVlFUl9WRUhJQ0xFX1NFQVRfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uUGVkSGVhbCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0hFQUwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBlZEhlYWwoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0hFQUwpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUGVkRGVhdGgoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBFRF9ERUFUSCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGVkRGVhdGgoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0RFQVRIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblBlZERhbWFnZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUEVEX0RBTUFHRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGVkRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlBFRF9EQU1BR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uVmVoaWNsZURlc3Ryb3koKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVTVFJPWSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZURlc3Ryb3koKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9ERVNUUk9ZKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVBdHRhY2goKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfQVRUQUNIKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlQXR0YWNoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfQVRUQUNIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVEZXRhY2goKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVUQUNIKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlRGV0YWNoKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREVUQUNIKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVEYW1hZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREFNQUdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VWZWhpY2xlRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZFSElDTEVfREFNQUdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZlaGljbGVTaXJlblN0YXRlQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5WRUhJQ0xFX1NJUkVOX1NUQVRFX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZVNpcmVuU3RhdGVDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9TSVJFTl9TVEFURV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVkVISUNMRV9IT1JOX1NUQVRFX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5WRUhJQ0xFX0hPUk5fU1RBVEVfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblZvaWNlQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuVk9JQ0VfQ09OTkVDVElPTik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlVm9pY2VDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlZPSUNFX0NPTk5FQ1RJT04pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQ2xpZW50T2JqZWN0RGVsZXRlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DTElFTlRfT0JKRUNUX0RFTEVURSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQ2xpZW50T2JqZWN0RGVsZXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNMSUVOVF9PQkpFQ1RfREVMRVRFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkNsaWVudE9iamVjdFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkNMSUVOVF9PQkpFQ1RfUkVRVUVTVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQ2xpZW50T2JqZWN0UmVxdWVzdCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DTElFTlRfT0JKRUNUX1JFUVVFU1QpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uQmFzZU9iamVjdENyZWF0ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQkFTRV9PQkpFQ1RfQ1JFQVRFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VCYXNlT2JqZWN0Q3JlYXRlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkJBU0VfT0JKRUNUX0NSRUFURSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25CYXNlT2JqZWN0UmVtb3ZlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5CQVNFX09CSkVDVF9SRU1PVkUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUJhc2VPYmplY3RSZW1vdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQkFTRV9PQkpFQ1RfUkVNT1ZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbk5ldE93bmVyQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5ORVRfT1dORVJfQ0hBTkdFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VOZXRPd25lckNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5ORVRfT1dORVJfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbldlYXBvbkRhbWFnZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuV0VBUE9OX0RBTUFHRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlV2VhcG9uRGFtYWdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLldFQVBPTl9EQU1BR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uTWV0YUNoYW5nZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZU1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuTUVUQV9DSEFOR0UpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uTG9jYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5MT0NBTF9NRVRBX0NIQU5HRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlTG9jYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkxPQ0FMX01FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPblN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlNUUkVBTV9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVN0cmVhbVN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25HbG9iYWxNZXRhQ2hhbmdlKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HTE9CQUxfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdsb2JhbE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX01FVEFfQ0hBTkdFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db25zb2xlQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09OU09MRV9DT01NQU5EKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VDb25zb2xlQ29tbWFuZCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT05TT0xFX0NPTU1BTkQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRXJyb3IoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVSUk9SKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFcnJvcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FUlJPUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25Db2xTaGFwZUV2ZW50KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5DT0xfU0hBUEVfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUNvbFNoYXBlRXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQ09MX1NIQVBFX0VWRU5UKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkV4cGxvc2lvbigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVhQTE9TSU9OKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFeHBsb3Npb24oKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVhQTE9TSU9OKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkZpcmVTdGFydCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRklSRV9TVEFSVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRmlyZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkZJUkVfU1RBUlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUHJvamVjdGlsZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5QUk9KRUNUSUxFX1NUQVJUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VQcm9qZWN0aWxlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUFJPSkVDVElMRV9TVEFSVCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDb2xTaGFwZUVudGVyKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0VOVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDb2xTaGFwZUVudGVyKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DT0xfU0hBUEVfRU5URVIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uRW50aXR5Q29sU2hhcGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NPTF9TSEFQRV9MRUFWRSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlRW50aXR5Q29sU2hhcGVMZWF2ZSgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ09MX1NIQVBFX0xFQVZFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkVudGl0eUNoZWNrcG9pbnRFbnRlcigpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfRU5URVIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUVudGl0eUNoZWNrcG9pbnRFbnRlcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5FTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FbnRpdHlDaGVja3BvaW50TGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VFbnRpdHlDaGVja3BvaW50TGVhdmUoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRU5USVRZX0NIRUNLUE9JTlRfTEVBVkUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uR2l2ZVBlZFNjcmlwdGVkVGFzaygpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuR0lWRV9QRURfU0NSSVBURURfVEFTSyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlR2l2ZVBlZFNjcmlwdGVkVGFzaygpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5HSVZFX1BFRF9TQ1JJUFRFRF9UQVNLKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBPbkxvY2FsU2NyaXB0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkxPQ0FMX1NDUklQVF9FVkVOVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlTG9jYWxTY3JpcHRFdmVudCgpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5MT0NBTF9TQ1JJUFRfRVZFTlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVtb3RlU2NyaXB0RXZlbnQoKSB7XG4gICAgcmV0dXJuIE9uSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFTU9URV9TQ1JJUFRfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJlbW90ZVNjcmlwdEV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLlJFTU9URV9TQ1JJUFRfRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25BbnlSZXNvdXJjZVN0YXJ0KCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5BTllfUkVTT1VSQ0VfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUFueVJlc291cmNlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuQU5ZX1JFU09VUkNFX1NUQVJUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uQW55UmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5BTllfUkVTT1VSQ0VfU1RPUCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlQW55UmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkFOWV9SRVNPVVJDRV9TVE9QKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVzb3VyY2VTdGFydCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RBUlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZVJlc291cmNlU3RhcnQoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RBUlQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIE9uUmVzb3VyY2VTdG9wKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9TVE9QKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE9uY2VSZXNvdXJjZVN0b3AoKSB7XG4gICAgcmV0dXJuIE9uY2VJbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuUkVTT1VSQ0VfU1RPUCk7XG59XG5leHBvcnQgZnVuY3Rpb24gT25SZXNvdXJjZUVycm9yKCkge1xuICAgIHJldHVybiBPbkludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9FUlJPUik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBPbmNlUmVzb3VyY2VFcnJvcigpIHtcbiAgICByZXR1cm4gT25jZUludGVybmFsKElOVEVSTkFMX0VWRU5UUy5SRVNPVVJDRV9FUlJPUik7XG59XG5leHBvcnQgZnVuY3Rpb24gT25FdmVudCgpIHtcbiAgICByZXR1cm4gT25JbnRlcm5hbChJTlRFUk5BTF9FVkVOVFMuRVZFTlQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gT25jZUV2ZW50KCkge1xuICAgIHJldHVybiBPbmNlSW50ZXJuYWwoSU5URVJOQUxfRVZFTlRTLkVWRU5UKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVFdmVudERlY29yYXRvciB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllcjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4oZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllcjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUGxheWVyPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gY3JlYXRlRXZlbnREZWNvcmF0b3IoJ29uUGxheWVyJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBPbldlYlZpZXcgYXMgJE9uV2ViVmlldyB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXc8RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb1NlcnZlckV2ZW50PihpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tV2ViVmlld1RvU2VydmVyRXZlbnQ+LFxuKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlldzxFIGV4dGVuZHMgc3RyaW5nPihpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb1NlcnZlckV2ZW50Pikge1xuICAgIHJldHVybiAkT25XZWJWaWV3KGlkLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uIGFzICRPbiB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyRXZlbnQ+KGV2ZW50TmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT248RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJFdmVudD4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT248RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21TZXJ2ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gJE9uKGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgY3JlYXRlRXZlbnREZWNvcmF0b3IgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllcjxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4oZXZlbnROYW1lPzogRSk6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlUGxheWVyPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tUGxheWVyVG9TZXJ2ZXJFdmVudD4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZVBsYXllcjxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVBsYXllclRvU2VydmVyRXZlbnQ+KSB7XG4gICAgcmV0dXJuIGNyZWF0ZUV2ZW50RGVjb3JhdG9yKCdvbmNlUGxheWVyJywgZXZlbnROYW1lKTtcbn1cbiIsICJpbXBvcnQgeyBPbmNlV2ViVmlldyBhcyAkT25jZVdlYlZpZXcgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYlZpZXc8RSBleHRlbmRzIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVdlYlZpZXdUb1NlcnZlckV2ZW50PihpZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudE5hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uY2VXZWJWaWV3PEUgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4sXG4pOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZVdlYlZpZXc8RSBleHRlbmRzIHN0cmluZz4oaWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnROYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb0V2ZW50cy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJFdmVudD4pIHtcbiAgICByZXR1cm4gJE9uY2VXZWJWaWV3KGlkLCBldmVudE5hbWUpO1xufVxuIiwgImltcG9ydCB7IE9uY2UgYXMgJE9uY2UgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25jZTxFIGV4dGVuZHMga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyRXZlbnQ+KGV2ZW50TmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25jZTxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvRXZlbnRzLkN1c3RvbVNlcnZlckV2ZW50Pik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPbmNlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29FdmVudHMuQ3VzdG9tU2VydmVyRXZlbnQ+KSB7XG4gICAgcmV0dXJuICRPbmNlKGV2ZW50TmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgQ29yZU1ldGFkYXRhS2V5LCBNZXRob2RQYXJhbVR5cGUsIHR5cGUgTWV0aG9kUGFyYW1ldGVyIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlL2FwcCc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UsIHR5cGUgTmV3YWJsZSwgdHlwZSBQaXBlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFBsYXllcihrZXk/OiBzdHJpbmcsIC4uLnBpcGVzOiBOZXdhYmxlPFBpcGU+W10pIHtcbiAgICByZXR1cm4gPFBhcmFtZXRlckRlY29yYXRvcj4oKHRhcmdldDogT2JqZWN0LCBtZXRob2Q6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihDb3JlTWV0YWRhdGFLZXkuQ29udHJvbGxlclBhcmFtcywgdGFyZ2V0LCBtZXRob2QpID8/IFtdO1xuXG4gICAgICAgIGlmIChwYXJhbXMuc29tZSgocGFyYW0pID0+IHBhcmFtLmluZGV4ID09PSBpbmRleCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFtVHlwZXMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGVbXT4oJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0LCBtZXRob2QpO1xuICAgICAgICBjb25zdCBtZXRhdHlwZSA9IEFycmF5LmlzQXJyYXkocGFyYW1UeXBlcykgPyBwYXJhbVR5cGVzW2luZGV4XSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhPE1ldGhvZFBhcmFtZXRlcltdPihcbiAgICAgICAgICAgIENvcmVNZXRhZGF0YUtleS5Db250cm9sbGVyUGFyYW1zLFxuICAgICAgICAgICAgWy4uLnBhcmFtcywgeyBpbmRleCwgbWV0aG9kLCBwaXBlcywgdHlwZTogTWV0aG9kUGFyYW1UeXBlLlBsYXllciwgZGF0YToga2V5LCBtZXRhdHlwZSB9XSxcbiAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgKTtcbiAgICB9KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEd1YXJkIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBVc2VHdWFyZHMgYXMgJFVzZUd1YXJkcywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUd1YXJkcyguLi5ndWFyZHM6IChOZXdhYmxlPEd1YXJkPiB8IEd1YXJkKVtdKSB7XG4gICAgcmV0dXJuICRVc2VHdWFyZHMoLi4uZ3VhcmRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEludGVyY2VwdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBVc2VJbnRlcmNlcHRvcnMgYXMgJFVzZUludGVyY2VwdG9ycywgdHlwZSBOZXdhYmxlIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZUludGVyY2VwdG9ycyguLi5pbnRlcmNlcHRvcnM6IChOZXdhYmxlPEludGVyY2VwdG9yPiB8IEludGVyY2VwdG9yKVtdKSB7XG4gICAgcmV0dXJuICRVc2VJbnRlcmNlcHRvcnMoLi4uaW50ZXJjZXB0b3JzKTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVSUENEZWNvcmF0b3IgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21DbGllbnRUb1NlcnZlclJQQz4ocnBjTmFtZT86IEUpOiBNZXRob2REZWNvcmF0b3I7XG5leHBvcnQgZnVuY3Rpb24gT25QbGF5ZXJSZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU/OiBFeGNsdWRlPEUsIGtleW9mIE1hbmdvUlBDLkN1c3RvbUNsaWVudFRvU2VydmVyUlBDPik6IE1ldGhvZERlY29yYXRvcjtcbmV4cG9ydCBmdW5jdGlvbiBPblBsYXllclJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tQ2xpZW50VG9TZXJ2ZXJSUEM+KSB7XG4gICAgcmV0dXJuIGNyZWF0ZVJQQ0RlY29yYXRvcignb25QbGF5ZXJSZXF1ZXN0JywgcnBjTmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgT25SZXF1ZXN0IGFzICRPblJlcXVlc3QgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gT25SZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21TZXJ2ZXJSUEM+KHJwY05hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21TZXJ2ZXJSUEM+KTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uUmVxdWVzdDxFIGV4dGVuZHMgc3RyaW5nPihycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21TZXJ2ZXJSUEM+KSB7XG4gICAgcmV0dXJuICRPblJlcXVlc3QocnBjTmFtZSk7XG59XG4iLCAiaW1wb3J0IHsgT25XZWJWaWV3UmVxdWVzdCBhcyAkT25XZWJWaWV3UmVxdWVzdCB9IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBPbldlYlZpZXdSZXF1ZXN0PEUgZXh0ZW5kcyBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUEM+KGlkOiBzdHJpbmcgfCBudW1iZXIsIHJwY05hbWU/OiBFKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlld1JlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4oXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBycGNOYW1lPzogRXhjbHVkZTxFLCBrZXlvZiBNYW5nb1JQQy5DdXN0b21XZWJWaWV3VG9TZXJ2ZXJSUEM+LFxuKTogTWV0aG9kRGVjb3JhdG9yO1xuZXhwb3J0IGZ1bmN0aW9uIE9uV2ViVmlld1JlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4oaWQ6IHN0cmluZyB8IG51bWJlciwgcnBjTmFtZT86IEV4Y2x1ZGU8RSwga2V5b2YgTWFuZ29SUEMuQ3VzdG9tV2ViVmlld1RvU2VydmVyUlBDPikge1xuICAgIHJldHVybiAkT25XZWJWaWV3UmVxdWVzdChpZCwgcnBjTmFtZSk7XG59XG4iLCAiZXhwb3J0IGNvbnN0IFRIUk9UVExFUl9MSU1JVCA9ICdUSFJPVFRMRVJfTElNSVQnO1xuZXhwb3J0IGNvbnN0IFRIUk9UVExFUl9UVEwgPSAnVEhST1RUTEVSX1RUTCc7XG5leHBvcnQgY29uc3QgVEhST1RUTEVSX09QVElPTlMgPSAnVEhST1RUTEVSX01PRFVMRV9PUFRJT05TJztcbmV4cG9ydCBjb25zdCBUSFJPVFRMRVJfU0tJUCA9ICdUSFJPVFRMRVJfU0tJUCc7XG5leHBvcnQgY29uc3QgVEhST1RUTEVSX1NUT1JBR0UgPSAnVEhST1RUTEVSX1NUT1JBR0UnO1xuIiwgImltcG9ydCB7IFRIUk9UVExFUl9TS0lQIH0gZnJvbSAnLi4vdGhyb3R0bGVyLmNvbnN0YW50cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBTa2lwVGhyb3R0bGUoc2tpcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7IGRlZmF1bHQ6IHRydWUgfSkge1xuICAgIHJldHVybiAodGFyZ2V0OiBhbnksIF9wcm9wZXJ0eUtleT86IHN0cmluZyB8IHN5bWJvbCwgZGVzY3JpcHRvcj86IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2tpcCkge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFRIUk9UVExFUl9TS0lQICsga2V5LCBza2lwW2tleV0sIGRlc2NyaXB0b3IudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShUSFJPVFRMRVJfU0tJUCArIGtleSwgc2tpcFtrZXldLCB0YXJnZXQpO1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBUaHJvdHRsZXJNZXRob2RPckNvbnRyb2xsZXJPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUSFJPVFRMRVJfTElNSVQsIFRIUk9UVExFUl9UVEwgfSBmcm9tICcuLi90aHJvdHRsZXIuY29uc3RhbnRzJztcblxuZnVuY3Rpb24gc2V0VGhyb3R0bGVyTWV0YWRhdGEodGFyZ2V0OiBhbnksIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRocm90dGxlck1ldGhvZE9yQ29udHJvbGxlck9wdGlvbnM+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShUSFJPVFRMRVJfVFRMICsgbmFtZSwgb3B0aW9uc1tuYW1lXSEudHRsLCB0YXJnZXQpO1xuICAgICAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKFRIUk9UVExFUl9MSU1JVCArIG5hbWUsIG9wdGlvbnNbbmFtZV0hLmxpbWl0LCB0YXJnZXQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRocm90dGxlKG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIFRocm90dGxlck1ldGhvZE9yQ29udHJvbGxlck9wdGlvbnM+KSB7XG4gICAgcmV0dXJuICh0YXJnZXQ6IGFueSwgX3Byb3BlcnR5S2V5Pzogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yPzogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55PikgPT4ge1xuICAgICAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgc2V0VGhyb3R0bGVyTWV0YWRhdGEoZGVzY3JpcHRvci52YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaHJvdHRsZXJNZXRhZGF0YSh0YXJnZXQsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBSZXNvbHZhYmxlLCBUaHJvdHRsZXJMaW1pdERldGFpbCwgVGhyb3R0bGVyTW9kdWxlT3B0aW9ucywgVGhyb3R0bGVyT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUSFJPVFRMRVJfTElNSVQsIFRIUk9UVExFUl9PUFRJT05TLCBUSFJPVFRMRVJfU0tJUCwgVEhST1RUTEVSX1NUT1JBR0UsIFRIUk9UVExFUl9UVEwgfSBmcm9tICcuL3Rocm90dGxlci5jb25zdGFudHMnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvbkNvbnRleHQsIEd1YXJkIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgdHlwZSB7IFRocm90dGxlclN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcyc7XG5pbXBvcnQge1xuICAgIGlzRnVuY3Rpb24sXG4gICAgVG9vTWFueVJlcXVlc3RzLFxuICAgIHR5cGUgT25Nb2R1bGVJbml0LFxuICAgIHR5cGUgUmVmbGVjdG9yU2VydmljZSxcbiAgICBFcnJvck1lc3NhZ2UsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbmplY3QsXG4gICAgUkVGTEVDVE9SX1NFUlZJQ0UsXG59IGZyb20gJ0ByYWdlbXAtbWFuZ28vY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaHJvdHRsZXJHdWFyZCBpbXBsZW1lbnRzIEd1YXJkLCBPbk1vZHVsZUluaXQge1xuICAgIEBJbmplY3QoVEhST1RUTEVSX09QVElPTlMpIHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zOiBUaHJvdHRsZXJNb2R1bGVPcHRpb25zO1xuICAgIEBJbmplY3QoVEhST1RUTEVSX1NUT1JBR0UpIHByb3RlY3RlZCByZWFkb25seSBzdG9yYWdlU2VydmljZTogVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2U7XG4gICAgQEluamVjdChSRUZMRUNUT1JfU0VSVklDRSkgcHJvdGVjdGVkIHJlYWRvbmx5IHJlZmxlY3RvcjogUmVmbGVjdG9yU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgdGhyb3R0bGVyczogQXJyYXk8VGhyb3R0bGVyT3B0aW9ucz47XG4gICAgcHJvdGVjdGVkIGNvbW1vbk9wdGlvbnM6IFBpY2s8VGhyb3R0bGVyT3B0aW9ucywgJ3NraXBJZic+O1xuXG4gICAgcHVibGljIGFzeW5jIG9uTW9kdWxlSW5pdCgpIHtcbiAgICAgICAgdGhpcy50aHJvdHRsZXJzID0gKEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zKSA/IHRoaXMub3B0aW9ucyA6IHRoaXMub3B0aW9ucy50aHJvdHRsZXJzKVxuICAgICAgICAgICAgLnNvcnQoKGZpcnN0LCBzZWNvbmQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmaXJzdC50dGwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihzZWNvbmQudHRsKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0LnR0bCAtIHNlY29uZC50dGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcCgob3B0KSA9PiAoeyAuLi5vcHQsIG5hbWU6IG9wdC5uYW1lID8/ICdkZWZhdWx0JyB9KSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uT3B0aW9ucyA9IHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb21tb25PcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIHNraXBJZjogdGhpcy5vcHRpb25zLnNraXBJZiEsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNhbkFjdGl2YXRlKGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgY29udGludWVzOiBib29sZWFuW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lZFRocm90dGxlciBvZiB0aGlzLnRocm90dGxlcnMpIHtcbiAgICAgICAgICAgIC8vIFJldHVybiBlYXJseSBpZiB0aGUgY3VycmVudCByb3V0ZSBzaG91bGQgYmUgc2tpcHBlZC5cbiAgICAgICAgICAgIGNvbnN0IHNraXAgPSB0aGlzLnJlZmxlY3Rvci5nZXRBbGxBbmRPdmVycmlkZTxib29sZWFuPihUSFJPVFRMRVJfU0tJUCArIG5hbWVkVGhyb3R0bGVyLm5hbWUsIFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmhhbmRsZXIsXG4gICAgICAgICAgICAgICAgY29udGV4dC5jbGFzc1JlZixcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29uc3Qgc2tpcElmID0gbmFtZWRUaHJvdHRsZXIuc2tpcElmIHx8IHRoaXMuY29tbW9uT3B0aW9ucy5za2lwSWY7XG4gICAgICAgICAgICBpZiAoc2tpcCB8fCBza2lwSWY/Lihjb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlcy5wdXNoKHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXR1cm4gZWFybHkgd2hlbiB3ZSBoYXZlIG5vIGxpbWl0IG9yIHR0bCBkYXRhLlxuICAgICAgICAgICAgY29uc3Qgcm91dGVPckNsYXNzTGltaXQgPSB0aGlzLnJlZmxlY3Rvci5nZXRBbGxBbmRPdmVycmlkZTxSZXNvbHZhYmxlPG51bWJlcj4+KFRIUk9UVExFUl9MSU1JVCArIG5hbWVkVGhyb3R0bGVyLm5hbWUsIFtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmhhbmRsZXIsXG4gICAgICAgICAgICAgICAgY29udGV4dC5jbGFzc1JlZixcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgY29uc3Qgcm91dGVPckNsYXNzVHRsID0gdGhpcy5yZWZsZWN0b3IuZ2V0QWxsQW5kT3ZlcnJpZGU8UmVzb2x2YWJsZTxudW1iZXI+PihUSFJPVFRMRVJfVFRMICsgbmFtZWRUaHJvdHRsZXIubmFtZSwgW1xuICAgICAgICAgICAgICAgIGNvbnRleHQuaGFuZGxlcixcbiAgICAgICAgICAgICAgICBjb250ZXh0LmNsYXNzUmVmLFxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHNwZWNpZmljIGxpbWl0cyBhcmUgc2V0IGF0IGNsYXNzIG9yIHJvdXRlIGxldmVsLCBvdGhlcndpc2UgdXNlIGdsb2JhbCBvcHRpb25zLlxuICAgICAgICAgICAgY29uc3QgbGltaXQgPSBhd2FpdCB0aGlzLnJlc29sdmVWYWx1ZShjb250ZXh0LCByb3V0ZU9yQ2xhc3NMaW1pdCB8fCBuYW1lZFRocm90dGxlci5saW1pdCk7XG4gICAgICAgICAgICBjb25zdCB0dGwgPSBhd2FpdCB0aGlzLnJlc29sdmVWYWx1ZShjb250ZXh0LCByb3V0ZU9yQ2xhc3NUdGwgfHwgbmFtZWRUaHJvdHRsZXIudHRsKTtcbiAgICAgICAgICAgIGNvbnRpbnVlcy5wdXNoKGF3YWl0IHRoaXMuaGFuZGxlUmVxdWVzdChjb250ZXh0LCBsaW1pdCwgdHRsLCBuYW1lZFRocm90dGxlcikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250aW51ZXMuZXZlcnkoKGNvbnQpID0+IGNvbnQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBoYW5kbGVSZXF1ZXN0KGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIGxpbWl0OiBudW1iZXIsIHR0bDogbnVtYmVyLCB0aHJvdHRsZXI6IFRocm90dGxlck9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGxheWVyID0gY29udGV4dC5yZXF1ZXN0LnBsYXllcjtcbiAgICAgICAgaWYoIXBsYXllcikgdGhyb3cgbmV3IEVycm9yKGBQbGF5ZXIgaXMgbm90IGluIGNvbnRleHRgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZW5lcmF0ZUtleShjb250ZXh0LCB0aHJvdHRsZXIubmFtZSEpO1xuICAgICAgICBjb25zdCB7IHRvdGFsSGl0cywgdGltZVRvRXhwaXJlIH0gPSBhd2FpdCB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmluY3JlbWVudChwbGF5ZXIsIGtleSwgdHRsKTtcblxuICAgICAgICBpZiAodG90YWxIaXRzID4gbGltaXQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudGhyb3dUaHJvdHRsaW5nRXhjZXB0aW9uKGNvbnRleHQsIHtcbiAgICAgICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgICAgICB0dGwsXG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHBsYXllcixcbiAgICAgICAgICAgICAgICB0b3RhbEhpdHMsXG4gICAgICAgICAgICAgICAgdGltZVRvRXhwaXJlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVLZXkoY29udGV4dDogRXhlY3V0aW9uQ29udGV4dCwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGAke2NvbnRleHQuY2xhc3NSZWYubmFtZX0tJHtjb250ZXh0LmhhbmRsZXIubmFtZX0tJHtuYW1lfWA7XG4gICAgICAgIHJldHVybiBjcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUocHJlZml4KS5kaWdlc3QoJ2hleCcpLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHRocm93VGhyb3R0bGluZ0V4Y2VwdGlvbihjb250ZXh0OiBFeGVjdXRpb25Db250ZXh0LCBfdGhyb3R0bGVyTGltaXREZXRhaWw6IFRocm90dGxlckxpbWl0RGV0YWlsKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29NYW55UmVxdWVzdHMoYXdhaXQgdGhpcy5nZXRFcnJvck1lc3NhZ2UoY29udGV4dCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRFcnJvck1lc3NhZ2UoX2NvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlID8/IEVycm9yTWVzc2FnZS5Ub29NYW55UmVxdWVzdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEVycm9yTWVzc2FnZS5Ub29NYW55UmVxdWVzdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXNvbHZlVmFsdWU8VCBleHRlbmRzIG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4+KGNvbnRleHQ6IEV4ZWN1dGlvbkNvbnRleHQsIHJlc29sdmFibGVWYWx1ZTogUmVzb2x2YWJsZTxUPikge1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihyZXNvbHZhYmxlVmFsdWUpID8gcmVzb2x2YWJsZVZhbHVlKGNvbnRleHQpIDogcmVzb2x2YWJsZVZhbHVlO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBJbmplY3RhYmxlLCB0eXBlIE9uQXBwU2h1dGRvd24gfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBUaHJvdHRsZXJTdG9yYWdlT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2UgaW1wbGVtZW50cyBPbkFwcFNodXRkb3duIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RvcmFnZTogV2Vha01hcDxQbGF5ZXJNcCwgTWFwPHN0cmluZywgVGhyb3R0bGVyU3RvcmFnZU9wdGlvbnM+PiA9IG5ldyBXZWFrTWFwKCk7XG4gICAgcHJpdmF0ZSB0aW1lb3V0SWRzOiBOb2RlSlMuVGltZW91dFtdID0gW107XG5cbiAgICBwcml2YXRlIGdldEV4cGlyYXRpb25UaW1lKHBsYXllcjogUGxheWVyTXAsIGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKCh0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLmdldChrZXkpIS5leHBpcmVzQXQgLSBEYXRlLm5vdygpKSAvIDEwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RXhwaXJhdGlvblRpbWUocGxheWVyOiBQbGF5ZXJNcCwga2V5OiBzdHJpbmcsIHR0bE1pbGxpc2Vjb25kczogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLmdldChwbGF5ZXIpIS5nZXQoa2V5KSEudG90YWxIaXRzLS07XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkcyA9IHRoaXMudGltZW91dElkcy5maWx0ZXIoKGlkKSA9PiBpZCAhPSB0aW1lb3V0SWQpO1xuICAgICAgICB9LCB0dGxNaWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLnRpbWVvdXRJZHMucHVzaCh0aW1lb3V0SWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbmNyZW1lbnQocGxheWVyOiBQbGF5ZXJNcCwga2V5OiBzdHJpbmcsIHR0bDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHR0bE1pbGxpc2Vjb25kcyA9IHR0bDtcblxuICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZS5nZXQocGxheWVyKSkge1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldChwbGF5ZXIsIG5ldyBNYXAoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc3RvcmFnZS5nZXQocGxheWVyKSEuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5nZXQocGxheWVyKSEuc2V0KGtleSwgeyB0b3RhbEhpdHM6IDAsIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIHR0bE1pbGxpc2Vjb25kcyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB0aW1lVG9FeHBpcmUgPSB0aGlzLmdldEV4cGlyYXRpb25UaW1lKHBsYXllciwga2V5KTtcblxuICAgICAgICAvLyBSZXNldCB0aGUgdGltZVRvRXhwaXJlIG9uY2UgaXQgaGFzIGJlZW4gZXhwaXJlZC5cbiAgICAgICAgaWYgKHRpbWVUb0V4cGlyZSA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLmdldChrZXkpIS5leHBpcmVzQXQgPSBEYXRlLm5vdygpICsgdHRsTWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgdGltZVRvRXhwaXJlID0gdGhpcy5nZXRFeHBpcmF0aW9uVGltZShwbGF5ZXIsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLmdldChrZXkpIS50b3RhbEhpdHMrKztcbiAgICAgICAgdGhpcy5zZXRFeHBpcmF0aW9uVGltZShwbGF5ZXIsIGtleSwgdHRsTWlsbGlzZWNvbmRzKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG90YWxIaXRzOiB0aGlzLnN0b3JhZ2UuZ2V0KHBsYXllcikhLmdldChrZXkpIS50b3RhbEhpdHMsXG4gICAgICAgICAgICB0aW1lVG9FeHBpcmUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIG9uQXBwU2h1dGRvd24oKSB7XG4gICAgICAgIHRoaXMudGltZW91dElkcy5mb3JFYWNoKGNsZWFyVGltZW91dCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IEdsb2JhbCwgTW9kdWxlLCB0eXBlIER5bmFtaWNNb2R1bGUsIHR5cGUgUHJvdmlkZXIsIHR5cGUgRmFjdG9yeVByb3ZpZGVyIH0gZnJvbSAnQHJhZ2VtcC1tYW5nby9jb3JlJztcbmltcG9ydCB7IFRIUk9UVExFUl9PUFRJT05TLCBUSFJPVFRMRVJfU1RPUkFHRSB9IGZyb20gJy4vdGhyb3R0bGVyLmNvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IFRocm90dGxlckFzeW5jT3B0aW9ucywgVGhyb3R0bGVyTW9kdWxlT3B0aW9ucywgVGhyb3R0bGVyT3B0aW9uc0ZhY3RvcnkgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Rocm90dGxlci1zdG9yYWdlLnNlcnZpY2UnO1xuXG5AR2xvYmFsKClcbkBNb2R1bGUoKVxuZXhwb3J0IGNsYXNzIFRocm90dGxlck1vZHVsZSB7XG4gICAgcHVibGljIHN0YXRpYyBmb3JSb290KG9wdGlvbnM6IFRocm90dGxlck1vZHVsZU9wdGlvbnMgPSBbXSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kdWxlOiBUaHJvdHRsZXJNb2R1bGUsXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFRIUk9UVExFUl9PUFRJT05TLFxuICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogb3B0aW9ucyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogVEhST1RUTEVSX1NUT1JBR0UsXG4gICAgICAgICAgICAgICAgICAgIHVzZUNsYXNzOiBUaHJvdHRsZXJTdG9yYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGV4cG9ydHM6IFtUSFJPVFRMRVJfU1RPUkFHRSwgVEhST1RUTEVSX09QVElPTlNdLFxuICAgICAgICB9IGFzIER5bmFtaWNNb2R1bGU8VGhyb3R0bGVyTW9kdWxlPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZvclJvb3RBc3luYyhvcHRpb25zOiBUaHJvdHRsZXJBc3luY09wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXJzID0gW1xuICAgICAgICAgICAgLi4udGhpcy5jcmVhdGVBc3luY1Byb3ZpZGVycyhvcHRpb25zKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBUSFJPVFRMRVJfU1RPUkFHRSxcbiAgICAgICAgICAgICAgICB1c2VDbGFzczogVGhyb3R0bGVyU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kdWxlOiBUaHJvdHRsZXJNb2R1bGUsXG4gICAgICAgICAgICBpbXBvcnRzOiBvcHRpb25zLmltcG9ydHMgPz8gW10sXG4gICAgICAgICAgICBwcm92aWRlcnMsXG4gICAgICAgICAgICBleHBvcnRzOiBwcm92aWRlcnMsXG4gICAgICAgIH0gYXMgRHluYW1pY01vZHVsZTxUaHJvdHRsZXJNb2R1bGU+O1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZUFzeW5jUHJvdmlkZXJzKG9wdGlvbnM6IFRocm90dGxlckFzeW5jT3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy51c2VFeGlzdGluZyB8fCBvcHRpb25zLnVzZUZhY3RvcnkpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5jcmVhdGVBc3luY09wdGlvbnNQcm92aWRlcihvcHRpb25zKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQXN5bmNPcHRpb25zUHJvdmlkZXIob3B0aW9ucyksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogb3B0aW9ucy51c2VDbGFzcyxcbiAgICAgICAgICAgICAgICB1c2VDbGFzczogb3B0aW9ucy51c2VDbGFzcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0gYXMgUHJvdmlkZXJbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVBc3luY09wdGlvbnNQcm92aWRlcihvcHRpb25zOiBUaHJvdHRsZXJBc3luY09wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlRmFjdG9yeSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBUSFJPVFRMRVJfT1BUSU9OUyxcbiAgICAgICAgICAgICAgICB1c2VGYWN0b3J5OiBvcHRpb25zLnVzZUZhY3RvcnksXG4gICAgICAgICAgICAgICAgaW5qZWN0OiBvcHRpb25zLmluamVjdCA/PyBbXSxcbiAgICAgICAgICAgIH0gYXMgRmFjdG9yeVByb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm92aWRlOiBUSFJPVFRMRVJfT1BUSU9OUyxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGFzeW5jIChvcHRpb25zRmFjdG9yeTogVGhyb3R0bGVyT3B0aW9uc0ZhY3RvcnkpID0+IGF3YWl0IG9wdGlvbnNGYWN0b3J5LmNyZWF0ZVRocm90dGxlck9wdGlvbnMoKSxcbiAgICAgICAgICAgIGluamVjdDogb3B0aW9ucy51c2VDbGFzcyA/IFtvcHRpb25zLnVzZUNsYXNzXSA6IG9wdGlvbnMudXNlRXhpc3RpbmcgPyBbb3B0aW9ucy51c2VFeGlzdGluZ10gOiBbXSxcbiAgICAgICAgfSBhcyBGYWN0b3J5UHJvdmlkZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGNyZWF0ZUFwcEJ1aWxkZXIgYXMgJGNyZWF0ZUFwcEJ1aWxkZXIsIEFwcEJ1aWxkZXIsIEFwcEVudmlyb21lbnQgfSBmcm9tICdAcmFnZW1wLW1hbmdvL2NvcmUvYXBwJztcbmltcG9ydCB7IFBsYXllclByb3RvdHlwZVBsdWdpbiwgUlBDUGx1Z2luLCBTZXJ2aWNlQmluZGVyUGx1Z2luIH0gZnJvbSAnLi9wbHVnaW5zJztcbmltcG9ydCB0eXBlIHsgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciwgU2VydmVyTXVsdGlwbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSB9IGZyb20gJy4vbXVsdGlwbGF5ZXIvcmFnZW1wJztcblxuY29uc3QgbXVsdGlwbGF5ZXJTZXJ2aWNlOiBTZXJ2ZXJNdWx0aXBsYXllclNlcnZpY2UgPSBuZXcgU2VydmVyUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlKCk7XG5cbmNsYXNzIFNlcnZlckFwcEJ1aWxkZXIgZXh0ZW5kcyBBcHBCdWlsZGVyPEd1YXJkLCBJbnRlcmNlcHRvciwgRXJyb3JGaWx0ZXI+IHtcbiAgICBwdWJsaWMgc2V0QmxpcEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0QmxpcEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE1hcmtlckZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0TWFya2VyRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q29sU2hhcGVGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldENvbFNoYXBlRmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Q2hlY2twb2ludEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0Q2hlY2twb2ludEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldE9iamVjdEZhY3RvcnkoZmFjdG9yeTogdW5rbm93bikge1xuICAgICAgICBtdWx0aXBsYXllclNlcnZpY2Uuc2V0T2JqZWN0RmFjdG9yeShmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UGVkRmFjdG9yeShmYWN0b3J5OiB1bmtub3duKSB7XG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZS5zZXRQZWRGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQbGF5ZXJGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFBsYXllckZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZlaGljbGVGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZlaGljbGVGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZpcnR1YWxFbnRpdHlHcm91cEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFZpcnR1YWxFbnRpdHlGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZpcnR1YWxFbnRpdHlGYWN0b3J5KGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWb2ljZUNoYW5uZWxGYWN0b3J5KGZhY3Rvcnk6IHVua25vd24pIHtcbiAgICAgICAgbXVsdGlwbGF5ZXJTZXJ2aWNlLnNldFZvaWNlQ2hhbm5lbEZhY3RvcnkoZmFjdG9yeSk7XG4gICAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXBwQnVpbGRlcigpIHtcbiAgICByZXR1cm4gYXdhaXQgJGNyZWF0ZUFwcEJ1aWxkZXIoe1xuICAgICAgICBlbnZpcm9tZW50OiBBcHBFbnZpcm9tZW50LlNlcnZlcixcbiAgICAgICAgcGx1Z2luczogW1NlcnZpY2VCaW5kZXJQbHVnaW4sIFBsYXllclByb3RvdHlwZVBsdWdpbiwgUlBDUGx1Z2luXSxcbiAgICAgICAgYXBwQnVpbGRlckluaGVyaXQ6IFNlcnZlckFwcEJ1aWxkZXIsXG4gICAgICAgIG11bHRpcGxheWVyU2VydmljZVxuICAgIH0pO1xufVxuXG5leHBvcnQgKiBmcm9tICcuL2V4cG9ydHMnO1xuXG5pbXBvcnQgJy4vZXh0ZW5zaW9uLmQudHMnO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7OztBQUFPLElBQU1BLGlCQUFpQjtBQUN2QixJQUFNQyxnQkFBZ0I7QUFDdEIsSUFBTUMsY0FBYztBQUNwQixJQUFNQyxtQkFBbUI7QUFDekIsSUFBTUMsb0JBQW9CO0FBQzFCLElBQU1DLGdCQUFnQjs7O0FDTHRCLElBQUtDLGVBQUFBLDBCQUFBQSxlQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQUFBQTs7QUNBTCxJQUFLQyxrQkFBQUEsMEJBQUFBLGtCQUFBQTs7OztTQUFBQTs7QUNBTCxJQUFLQyxrQkFBQUEsMEJBQUFBLGtCQUFBQTs7Ozs7Ozs7OztTQUFBQTs7OztBQ0FaLElBQUlDLGFBQVksT0FBTztBQUN2QixJQUFJQyxVQUFTLHdCQUFDLFFBQVEsVUFBUUQsV0FBVSxRQUFRLFFBQVE7QUFBQSxFQUNoRDtBQUFBLEVBQ0EsY0FBYztBQUNsQixDQUFDLEdBSFE7OztBQ0RiLFNBQVNFLGtCQUFrQjtBQ0EzQixTQUFTQSxjQUFBQSxtQkFBa0I7QUNBM0IsU0FBU0MsUUFBUUQsY0FBQUEsbUJBQWtCOzs7Ozs7Ozs7QUZRNUIsSUFBTUUsdUJBQU4sTUFBTUE7U0FBQUE7OztTQUFB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QUFBO0VBQ3hDO0VBRU9FLG1CQUFtQkYsU0FBa0I7QUFDeENMLHVCQUFtQk8sbUJBQW1CRixPQUFBQTtFQUMxQztFQUVPRyxxQkFBcUJILFNBQWtCO0FBQzFDTCx1QkFBbUJRLHFCQUFxQkgsT0FBQUE7RUFDNUM7RUFFT0ksaUJBQWlCSixTQUFrQjtBQUN0Q0wsdUJBQW1CUyxpQkFBaUJKLE9BQUFBO0VBQ3hDO0VBRU9LLGNBQWNMLFNBQWtCO0FBQ25DTCx1QkFBbUJVLGNBQWNMLE9BQUFBO0VBQ3JDO0VBRU9NLGlCQUFpQk4sU0FBa0I7QUFDdENMLHVCQUFtQlcsaUJBQWlCTixPQUFBQTtFQUN4QztFQUVPTyxrQkFBa0JQLFNBQWtCO0FBQ3ZDTCx1QkFBbUJZLGtCQUFrQlAsT0FBQUE7RUFDekM7RUFFT1EsNkJBQTZCUixTQUFrQjtBQUNsREwsdUJBQW1CYSw2QkFBNkJSLE9BQUFBO0VBQ3BEO0VBRU9TLHdCQUF3QlQsU0FBa0I7QUFDN0NMLHVCQUFtQmMsd0JBQXdCVCxPQUFBQTtFQUMvQztFQUVPVSx1QkFBdUJWLFNBQWtCO0FBQzVDTCx1QkFBbUJlLHVCQUF1QlYsT0FBQUE7RUFDOUM7QUFDSjtBQUVBLGVBQXNCVyxvQkFBQUE7QUFDbEIsU0FBTyxNQUFNQyxpQkFBa0I7SUFDM0JDLFlBQVlDLGNBQWNDO0lBQzFCQyxTQUFTO01BQUNDO01BQXFCQztNQUF1QkM7O0lBQ3REQyxtQkFBbUJ2QjtJQUNuQkY7RUFDSixDQUFBO0FBQ0o7QUFQc0JnQixPQUFBQSxtQkFBQUE7IiwKICAibmFtZXMiOiBbIkxPR0dFUl9TRVJWSUNFIiwgIkVWRU5UX1NFUlZJQ0UiLCAiUlBDX1NFUlZJQ0UiLCAiTU9EVUxFX0NPTlRBSU5FUiIsICJSRUZMRUNUT1JfU0VSVklDRSIsICJUSU1FUl9TRVJWSUNFIiwgIkVycm9yTWVzc2FnZSIsICJJbmplY3RhYmxlU2NvcGUiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIl9fZGVmUHJvcCIsICJfX25hbWUiLCAiaW5qZWN0YWJsZSIsICJpbmplY3QiLCAiRXhlY3V0aW9uQ29udGV4dEJhc2UiLCAiJHR5cGUiLCAiJGNsYXNzUmVmIiwgIiRoYW5kbGVyIiwgIiRyZXF1ZXN0IiwgIiRyZXNwb25zZSIsICIkbmFtZSIsICJ0eXBlIiwgImNsYXNzUmVmIiwgImhhbmRsZXIiLCAicmVxdWVzdCIsICJyZXNwb25zZSIsICJuYW1lIiwgIk1hbmdvUmVxdWVzdEJhc2UiLCAiJGJvZHkiLCAiJHBsYXllciIsICJib2R5IiwgInBsYXllciIsICJNYW5nb1Jlc3BvbnNlQmFzZSIsICIkbG9nZ2VyU2VydmljZSIsICIkc2VuZExpc3RlbmVycyIsICJTZXQiLCAiJGVycm9yTGlzdGVuZXJzIiwgIiRpc1NlbnQiLCAic2VuZCIsICJkYXRhIiwgImVycm9yIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJSUENSZXNwb25zZUFscmVhZHlTZW50IiwgImZvckVhY2giLCAibGlzdGVuZXIiLCAibWVzc2FnZSIsICJkZXRhaWxzIiwgIiRvblNlbmQiLCAiYWRkIiwgIiRvbkVycm9yIiwgIlRyZWVOb2RlIiwgInZhbHVlIiwgImNoaWxkcmVuIiwgImFkZENoaWxkIiwgImNoaWxkIiwgInB1c2giLCAicmVtb3ZlQ2hpbGQiLCAiaW5kZXgiLCAiaW5kZXhPZiIsICJzcGxpY2UiLCAiVHJlZSIsICJyb290IiwgInRyYXZlcnNlIiwgImNhbGxiYWNrIiwgInRyYXZlcnNlTm9kZSIsICJub2RlIiwgImZvckVhY2giLCAiYXN5bmNUcmF2ZXJzZSIsICJQcm9taXNlIiwgImFsbCIsICJtYXAiLCAidG9TdHJpbmciLCAicmVzdWx0IiwgImxpbmVzIiwgImRlcHRoIiwgInJlcGVhdCIsICJqb2luIiwgIkFwcEVudmlyb21lbnQiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkV2ZW50RGVzdGluYXRpb24iLCAiRXhlY3V0aW9uQ29udGV4dFR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgImdlbmVyYXRlUmFuZG9tSWQiLCAiTWF0aCIsICJyYW5kb20iLCAidG9TdHJpbmciLCAic3Vic3RyaW5nIiwgImlzVW5kZWZpbmVkIiwgIl9fbmFtZSIsICJvYmoiLCAiaXNPYmplY3QiLCAiZm4iLCAiaXNOaWwiLCAiaXNGdW5jdGlvbiIsICJ2YWwiLCAiaXNTdHJpbmciLCAiaXNOdW1iZXIiLCAiaXNDb25zdHJ1Y3RvciIsICJpc0VtcHR5IiwgImFycmF5IiwgImxlbmd0aCIsICJpc1N5bWJvbCIsICJpc0FzeW5jRnVuY3Rpb24iLCAibmFtZSIsICJpc0Jvb2xlYW4iLCAiaXNQcm9taXNlIiwgIlByb21pc2UiLCAiZGVmYXVsdENvbnRyb2xsZXJPcHRpb25zIiwgInByZWZpeCIsICJ2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIiwgIm9wdGlvbnMiLCAiaXNOaWwiLCAidmFsaWQiLCAidmFsdWUiLCAiaXNPYmplY3QiLCAiZXJyb3IiLCAiaXNTdHJpbmciLCAidmFsaWRhdGVFcnJvckZpbHRlciIsICJpc0Z1bmN0aW9uIiwgInByb3RvdHlwZSIsICJjYXRjaCIsICJ2YWxpZGF0ZVBpcGUiLCAidHJhbnNmb3JtIiwgInZhbGlkYXRlRXZlbnRQYXJhbWV0ZXIiLCAia2V5IiwgImlzTnVtYmVyIiwgImluZGV4IiwgInR5cGUiLCAiTWV0aG9kUGFyYW1UeXBlIiwgIkJvZHkiLCAiUGxheWVyIiwgImRhdGEiLCAiQ3VzdG9tIiwgImZhY3RvcnkiLCAiUGFyYW0iLCAiSW5kZXgiLCAiUmVxdWVzdCIsICJSZXNwb25zZSIsICJBcnJheSIsICJpc0FycmF5IiwgInBpcGVzIiwgInBpcGUiLCAidmFsaWRhdGVFdmVudE1ldGFkYXRhIiwgIm5hbWUiLCAibWV0aG9kIiwgInBhcmFtcyIsICJwYXJhbSIsICJ2YWxpZGF0ZUd1YXJkIiwgImNhbkFjdGl2YXRlIiwgInZhbGlkYXRlSW50ZXJjZXB0b3IiLCAiaW50ZXJjZXB0IiwgInZhbGlkYXRlSW5qZWN0aW9uVG9rZW4iLCAiaXNTeW1ib2wiLCAidmFsaWRhdGVQcm92aWRlciIsICJwcm92aWRlIiwgInZhbGlkYXRlQ2xhc3NQcm92aWRlciIsICJ2YWxpZGF0ZVZhbHVlUHJvdmlkZXIiLCAidmFsaWRhdGVGYWN0b3J5UHJvdmlkZXIiLCAidmFsaWRhdGVFeGlzdGluZ1Byb3ZpZGVyIiwgInNjb3BlIiwgIkluamVjdGFibGVTY29wZSIsICJTaW5nbGV0b24iLCAiT2JqZWN0IiwgInZhbHVlcyIsICJpbmNsdWRlcyIsICJ2YWxpZGF0ZU9wdGlvbmFsRmFjdG9yeURlcGVuZGVuY3kiLCAidG9rZW4iLCAidXNlRmFjdG9yeSIsICJpbmplY3QiLCAidmFsaWRhdGVNb2R1bGVPcHRpb25zIiwgImlzRHluYW1pYyIsICJjb250cm9sbGVycyIsICJpbXBvcnRzIiwgInByb3ZpZGVycyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWwiLCAiaXNCb29sZWFuIiwgImltcG9ydGVkIiwgImlzUHJvbWlzZSIsICJjb250cm9sbGVyIiwgInByb3ZpZGVyIiwgImV4cG9ydEl0ZW0iLCAiZGVmYXVsdEluamVjdGFibGVPcHRpb25zIiwgInZhbGlkYXRlSW5qZWN0YWJsZU1ldGFkYXRhIiwgIklOVEVSTkFMX0FQUF9DT05UQUlORVIiLCAiR0xPQkFMX0FQUF9DT05UQUlORVIiLCAiQVBQX0VOVklST01FTlQiLCAiR0xPQkFMX0dVQVJEUyIsICJHTE9CQUxfSU5URVJDRVBUT1JTIiwgIkdMT0JBTF9QSVBFUyIsICJHTE9CQUxfRVJST1JfRklMVEVSUyIsICJQTFVHSU5TIiwgIkVOQUJMRV9TSFVURE9XTl9IT09LUyIsICJDT05UQUlORVJfT1BUSU9OUyIsICJNQU5HT19MT0dfUFJFRklYIiwgIk1BTkdPX1JFUVVFU1RfRkFDVE9SWSIsICJNQU5HT19SRVNQT05TRV9GQUNUT1JZIiwgIkVYRUNVVElPTl9DT05URVhUX0ZBQ1RPUlkiLCAiTVVMVElQTEFZRVJfU0VSVklDRSIsICJSUENfUkVTVUxUX1RJTUVPVVQiLCAic3VjY2VzcyIsICJlcnJvciIsICJtZXNzYWdlIiwgInN0YXR1cyIsICJSUENSZXN1bHRTdGF0dXMiLCAiVGltZW91dCIsICJSUENfUkVTVUxUX0hBTkRMRVJfTk9UX0ZPVU5EIiwgIkhhbmRsZXJOb3RGb3VuZCIsICJSUENfUkVTVUxUX1VOS05PV04iLCAiVW5rbm93biIsICJSUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQiLCAiUGxheWVyRGlzY29ubmVjdGVkIiwgIlJQQ19SRVNVTFRfUExBWUVSX05PVF9GT1VORCIsICJQbGF5ZXJOb3RGb3VuZCIsICJNYW5nb0Vycm9yIiwgIkVycm9yIiwgInN0YXR1cyIsICJSUENSZXN1bHRTdGF0dXMiLCAiVW5rbm93biIsICJkZXRhaWxzIiwgIm1lc3NhZ2UiLCAiR3VhcmRDYW5jZWxFcnJvciIsICJDYW5jZWxsZWRCeUd1YXJkIiwgIkd1YXJkSW52YWxpZFJldHVybkVycm9yIiwgIkludmFsaWRHdWFyZFJldHVybiIsICJUb29NYW55UmVxdWVzdHMiLCAiVW5rbm93bkVycm9yIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlBpcGVsaW5lSGFuZGxlciIsICJsb2dnZXJTZXJ2aWNlIiwgImdvVHJvdWdoR3VhcmRzIiwgImV4ZWN1dGlvbkNvbnRleHQiLCAiZ3VhcmRzIiwgImNvbnRhaW5lciIsICJndWFyZCIsICJpbnN0YW5jZSIsICJpc0Z1bmN0aW9uIiwgImdldCIsICJpc09iamVjdCIsICJpc05pbCIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZEd1YXJkRGVmaW5pdGlvbiIsICJjYW5BY3RpdmF0ZSIsICJjYWxsIiwgIkd1YXJkSW52YWxpZFJldHVybkVycm9yIiwgIkd1YXJkQ2FuY2VsRXJyb3IiLCAiZ29UaHJvdWdoSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9ycyIsICJjYWxsSGFuZGxlciIsICJpbnRlcmNlcHRvciIsICJJbnZhbGlkSW50ZXJjZXB0b3JEZWZpbml0aW9uIiwgImludGVyY2VwdCIsICJnb1Ryb3VnaFBpcGVzIiwgInZhbHVlIiwgInBpcGVzIiwgImFyZ3VtZW50TWV0YWRhdGEiLCAicGlwZSIsICJJbnZhbGlkUGlwZURlZmluaXRpb24iLCAiUHJvbWlzZSIsICJyZXNvbHZlIiwgInRyYW5zZm9ybSIsICJDb250cm9sbGVyRmxvd0hhbmRsZXIiLCAiYXBwRW52IiwgInBpcGVsaW5lSGFuZGxlciIsICJjcmVhdGVBcmdzIiwgImNvbnRyb2xsZXIiLCAibWV0YWRhdGEiLCAicGxheWVyIiwgImFsbCIsICJwYXJhbXMiLCAibWFwIiwgInBhcmFtIiwgInR5cGUiLCAiZGF0YSIsICJtZXRhdHlwZSIsICJyZXF1ZXN0IiwgImJvZHkiLCAib3duZXIiLCAidW5kZWZpbmVkIiwgIkFycmF5IiwgImlzQXJyYXkiLCAiZmFjdG9yeSIsICJBcHBFbnZpcm9tZW50IiwgIlNlcnZlciIsICJDb250cm9sbGVyRXZlbnRIYW5kbGVyIiwgIm11bHRpcGxheWVyU2VydmljZSIsICJldmVudFNlcnZpY2UiLCAiY29udHJvbGxlckZsb3dIYW5kbGVyIiwgImNyZWF0ZU1hbmdvUmVxdWVzdCIsICJjcmVhdGVFeGVjdXRpb25Db250ZXh0IiwgInJlZ2lzdGVyRXZlbnQiLCAibWFwcGVkRXJyb3JGaWx0ZXJzIiwgImV2ZW50IiwgIm5hbWUiLCAiaGFuZGxlRXZlbnQiLCAiYXJncyIsICJwYXJzZUludGVybmFsQXJncyIsICJ3ZWJWaWV3SWQiLCAiSW52YWxpZEV2ZW50VHlwZSIsICJFeGVjdXRpb25Db250ZXh0VHlwZSIsICJFdmVudCIsICJjbGFzc1JlZiIsICJwcm90b3R5cGUiLCAibWV0aG9kIiwgImNvbnRyb2xsZXJNZXRob2QiLCAiaGFuZGxlIiwgImlzQXN5bmNGdW5jdGlvbiIsICJhcHBseSIsICJyZXR1cm4iLCAiX19uYW1lIiwgIkludmFsaWRSZXR1cm5JbkV2ZW50IiwgImxlbmd0aCIsICJlcnJvckdyb3VwIiwgImZpbmQiLCAiZXJyb3JUeXBlIiwgIkludmFsaWRFcnJvckZpbHRlckRlZmluaXRpb24iLCAiY2F0Y2giLCAiQ29udHJvbGxlck1ldGFkYXRhUmVhZGVyIiwgInJlYWQiLCAib3B0aW9ucyIsICJSZWZsZWN0IiwgImdldE1ldGFkYXRhIiwgIkNvcmVNZXRhZGF0YUtleSIsICJDb250cm9sbGVyIiwgImV2ZW50cyIsICJnZXRFdmVudHMiLCAicnBjcyIsICJnZXRSUENzIiwgInRpbWVycyIsICJnZXRUaW1lcnMiLCAiZ2V0UGlwZWxpbmUiLCAiQ29udHJvbGxlckV2ZW50cyIsICJnZXRNZXRob2RQYXJhbXMiLCAiQ29udHJvbGxlclJQQ3MiLCAicnBjIiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAic29ydCIsICJhIiwgImIiLCAiaW5kZXgiLCAiZm9yRWFjaCIsICJJbnZhbGlkUGFyYW1ldGVyRGVjb3JhdG9yVXNhZ2UiLCAiUmVzcG9uc2VEZWNvcmF0b3JOb3RBbGxvd2VkT25FdmVudHMiLCAiQ2xpZW50IiwgIlBsYXllckRlY29yYXRvck5vdEFsbG93ZWRPbkNsaWVudEV2ZW50cyIsICJSUENOb3RBbGxvd2VkSW5DbGllbnQiLCAiUlBDTm90QWxsb3dlZEluU2VydmVyIiwgIkV2ZW50Tm90QWxsb3dlZEluQ2xpZW50IiwgIkV2ZW50Tm90QWxsb3dlZEluU2VydmVyIiwgInRhcmdldCIsICJHdWFyZHMiLCAiSW50ZXJjZXB0b3JzIiwgIlBpcGVzIiwgImVycm9yRmlsdGVycyIsICJFcnJvckZpbHRlcnMiLCAiVGltZXJzIiwgIkNvbnRyb2xsZXJSUENIYW5kbGVyIiwgInJwY1NlcnZpY2UiLCAiY3JlYXRlTWFuZ29SZXNwb25zZSIsICJyZWdpc3RlclJQQyIsICJoYW5kbGVSUEMiLCAiSW52YWxpZFJQQ1R5cGUiLCAicmVzcG9uc2UiLCAiJG9uU2VuZCIsICIkb25FcnJvciIsICJSUEMiLCAic2VuZCIsICJyZXN1bHQiLCAiZXZlbnRIYW5kbGVycyIsICJycGNIYW5kbGVycyIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJDb250YWluZXIiLCAiTW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAibG9nZ2VyU2VydmljZSIsICJyZWFkIiwgIm1vZHVsZSIsICJpc0Z1bmN0aW9uIiwgIm9wdGlvbnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiTW9kdWxlIiwgImV4cG9ydFRva2VucyIsICJnZXRFeHBvcnRUb2tlbnMiLCAiZXhwb3J0cyIsICJzZXBhcmF0ZWRQcm92aWRlcnMiLCAic2VwYXJhdGVQcm92aWRlcnMiLCAicHJvdmlkZXJzIiwgImNvbnRyb2xsZXJzIiwgImltcG9ydHMiLCAiZ2V0UGlwZWxpbmUiLCAiY2xhc3NSZWYiLCAiZ2xvYmFsIiwgIkdsb2JhbE1vZHVsZSIsICJjb250YWluZXIiLCAiUHJvbWlzZSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZE1vZHVsZURlZmluaXRpb24iLCAiZ3VhcmRzIiwgIkd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAiSW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIlBpcGVzIiwgImVycm9yRmlsdGVycyIsICJFcnJvckZpbHRlcnMiLCAibWFwIiwgInByb3ZpZGVyRXhwb3J0IiwgImhhc093bk1ldGFkYXRhIiwgIkluamVjdGFibGUiLCAiSW52YWxpZEV4cG9ydERlZmluaXRpb24iLCAiaXNTdHJpbmciLCAiaXNTeW1ib2wiLCAicHJvdmlkZSIsICJwcm92aWRlciIsICJpbmplY3RhYmxlTWV0YWRhdGEiLCAiaXNOaWwiLCAiSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbiIsICJ1c2VDbGFzcyIsICJzY29wZSIsICJyZWR1Y2UiLCAiYWNjIiwgImluY2x1ZGVzIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgInNldCIsICJpbnRlcm5hbFByb3ZpZGVycyIsICJNYXAiLCAiTW9kdWxlQ29udGFpbmVyIiwgIkNvbnRhaW5lciIsICJwYXJlbnQiLCAibWV0YWRhdGEiLCAiaW5zdGFuY2UiLCAicmVwZXRpdGl2ZUltcG9ydHMiLCAiU2V0IiwgImluamVjdGFibGUiLCAiaW5qZWN0IiwgIm9wdGlvbmFsIiwgIkNvbnRhaW5lciIsICJMYXp5U2VydmljZUlkZW50aWZlciIsICJtaW5pdHoiLCAieSIsICJtIiwgImQiLCAiaCIsICJpIiwgInMiLCAidHoiLCAidGhyb3dPbkludmFsaWQiLCAiZnJvbVRaIiwgInRwIiwgImZyb21UWklTTyIsICJsb2NhbFRpbWVTdHIiLCAicGFyc2VJU09Mb2NhbCIsICJpbkRhdGUiLCAiRGF0ZSIsICJVVEMiLCAib2Zmc2V0IiwgImdldFRpbWV6b25lT2Zmc2V0IiwgImRhdGVHdWVzcyIsICJnZXRUaW1lIiwgImRhdGVPZmZzR3Vlc3MiLCAiZGF0ZUd1ZXNzMiIsICJkYXRlT2Zmc0d1ZXNzMiIsICJFcnJvciIsICJ0b1RaIiwgInR6U3RyIiwgImxvY2FsRGF0ZVN0cmluZyIsICJ0b0xvY2FsZVN0cmluZyIsICJ0aW1lWm9uZSIsICJyZXBsYWNlIiwgInRkIiwgImdldEZ1bGxZZWFyIiwgImdldE1vbnRoIiwgImdldERhdGUiLCAiZ2V0SG91cnMiLCAiZ2V0TWludXRlcyIsICJnZXRTZWNvbmRzIiwgImRhdGUiLCAidGltZVpvbmVOYW1lIiwgInNwbGl0IiwgInNsaWNlIiwgImRhdGVTdHJpbmciLCAicGFyc2UiLCAiZHRTdHIiLCAicGQiLCAiaXNOYU4iLCAic3RyaW5nRW5kIiwgInN1YnN0cmluZyIsICJpbmNsdWRlcyIsICJnZXRVVENGdWxsWWVhciIsICJnZXRVVENNb250aCIsICJnZXRVVENEYXRlIiwgImdldFVUQ0hvdXJzIiwgImdldFVUQ01pbnV0ZXMiLCAiZ2V0VVRDU2Vjb25kcyIsICJDcm9uT3B0aW9ucyIsICJvcHRpb25zIiwgIm5hbWUiLCAibGVnYWN5TW9kZSIsICJwYXVzZWQiLCAibWF4UnVucyIsICJJbmZpbml0eSIsICJjYXRjaCIsICJpbnRlcnZhbCIsICJwYXJzZUludCIsICJ1dGNPZmZzZXQiLCAidW5yZWYiLCAic3RhcnRBdCIsICJDcm9uRGF0ZSIsICJ0aW1lem9uZSIsICJzdG9wQXQiLCAiTEFTVF9PQ0NVUlJFTkNFIiwgIkFOWV9PQ0NVUlJFTkNFIiwgIk9DQ1VSUkVOQ0VfQklUTUFTS1MiLCAiQ3JvblBhdHRlcm4iLCAicGF0dGVybiIsICJzZWNvbmQiLCAiQXJyYXkiLCAiZmlsbCIsICJtaW51dGUiLCAiaG91ciIsICJkYXkiLCAibW9udGgiLCAiZGF5T2ZXZWVrIiwgImxhc3REYXlPZk1vbnRoIiwgInN0YXJET00iLCAic3RhckRPVyIsICJwcm90b3R5cGUiLCAiU3RyaW5nIiwgIlR5cGVFcnJvciIsICJpbmRleE9mIiwgImhhbmRsZU5pY2tuYW1lcyIsICJ0cmltIiwgInBhcnRzIiwgImxlbmd0aCIsICJ1bnNoaWZ0IiwgInJlcGxhY2VBbHBoYU1vbnRocyIsICJyZXBsYWNlQWxwaGFEYXlzIiwgImluaXREYXRlIiwgImdldERheSIsICJ0aHJvd0F0SWxsZWdhbENoYXJhY3RlcnMiLCAicGFydFRvQXJyYXkiLCAidHlwZSIsICJjb25mIiwgInZhbHVlSW5kZXhPZmZzZXQiLCAiZGVmYXVsdFZhbHVlIiwgImFyciIsICJoYW5kbGVSYW5nZVdpdGhTdGVwcGluZyIsICJoYW5kbGVSYW5nZSIsICJoYW5kbGVTdGVwcGluZyIsICJoYW5kbGVOdW1iZXIiLCAicmVWYWxpZENyb24iLCAidGVzdCIsICJyZXN1bHQiLCAiZXh0cmFjdE50aCIsICJzZXRQYXJ0IiwgInBhcnQiLCAiaW5kZXgiLCAidmFsdWUiLCAiT2JqZWN0IiwgImhhc093blByb3BlcnR5IiwgImNhbGwiLCAiUmFuZ2VFcnJvciIsICJzZXROdGhXZWVrZGF5T2ZNb250aCIsICJtYXRjaGVzIiwgIm1hdGNoIiwgImxvd2VyIiwgInVwcGVyIiwgInN0ZXBzIiwgInJlc3QiLCAibnRoIiwgInN0YXJ0IiwgImNsZWFuUGF0dGVybiIsICJ0b0xvd2VyQ2FzZSIsICJudGhXZWVrZGF5IiwgIkRheXNPZk1vbnRoIiwgIlJlY3Vyc2lvblN0ZXBzIiwgImZyb21EYXRlIiwgImZyb21TdHJpbmciLCAiZnJvbUNyb25EYXRlIiwgImlzTnRoV2Vla2RheU9mTW9udGgiLCAieWVhciIsICJ3ZWVrZGF5IiwgImdldFVUQ0RheSIsICJjb3VudCIsICJkYXlzSW5Nb250aCIsICJtcyIsICJnZXRVVENNaWxsaXNlY29uZHMiLCAiYXBwbHkiLCAiZ2V0TWlsbGlzZWNvbmRzIiwgInN0ciIsICJmaW5kTmV4dCIsICJ0YXJnZXQiLCAib3JpZ2luYWxUYXJnZXQiLCAiZkRvbVdlZWtEYXkiLCAidW5kZWZpbmVkIiwgImRvd01hdGNoIiwgInJlY3Vyc2UiLCAiZG9pbmciLCAicmVzIiwgInJlc2V0TGV2ZWwiLCAiaW5jcmVtZW50IiwgImhhc1ByZXZpb3VzUnVuIiwgImludGVybmFsIiwgImlzRnVuY3Rpb24iLCAidiIsICJ0b1N0cmluZyIsICJGdW5jdGlvbiIsICJ1bnJlZlRpbWVyIiwgInRpbWVyIiwgIkRlbm8iLCAibWF4RGVsYXkiLCAic2NoZWR1bGVkSm9icyIsICJDcm9uIiwgImZuT3JPcHRpb25zMSIsICJmbk9yT3B0aW9uczIiLCAiZnVuYyIsICJfc3RhdGVzIiwgImtpbGwiLCAiYmxvY2tpbmciLCAicHJldmlvdXNSdW4iLCAiY3VycmVudFJ1biIsICJvbmNlIiwgImN1cnJlbnRUaW1lb3V0IiwgImV4aXN0aW5nIiwgImZpbmQiLCAiaiIsICJwdXNoIiwgImZuIiwgInNjaGVkdWxlIiwgIm5leHRSdW4iLCAicHJldiIsICJuZXh0IiwgIl9uZXh0IiwgIm5leHRSdW5zIiwgIm4iLCAicHJldmlvdXMiLCAiZW51bWVyYXRpb24iLCAiZ2V0UGF0dGVybiIsICJpc1J1bm5pbmciLCAibmV4dFJ1blRpbWUiLCAiaXNTY2hlZHVsZWQiLCAibm90SXNLaWxsZWQiLCAiaXNTdG9wcGVkIiwgImlzQnVzeSIsICJtc1RvTmV4dCIsICJzdG9wIiwgImNsZWFyVGltZW91dCIsICJqb2JJbmRleCIsICJzcGxpY2UiLCAicGF1c2UiLCAicmVzdW1lIiwgIndhaXRNcyIsICJzZXRUaW1lb3V0IiwgIl9jaGVja1RyaWdnZXIiLCAiX3RyaWdnZXIiLCAiaW5pdGlhdGlvbkRhdGUiLCAiY29udGV4dCIsICJfZSIsICJ0cmlnZ2VyIiwgIm5vdyIsICJzaG91bGRSdW4iLCAiaXNCbG9ja2VkIiwgInByb3RlY3QiLCAic3RhcnRBdEluRnV0dXJlV2l0aEludGVydmFsIiwgIl9jYWxjdWxhdGVQcmV2aW91c1J1biIsICJwcmV2VGltZVBsdXNJbnRlcnZhbCIsICJDb250cm9sbGVyIiwgIm9wdGlvbnMiLCAidGFyZ2V0IiwgIlJlZmxlY3QiLCAiaGFzTWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJEdXBsaWNhdGVEZWNvcmF0b3JVc2FnZSIsICJ2YWxpZCIsICJ2YWx1ZSIsICJlcnJvciIsICJ2YWxpZGF0ZUNvbnRyb2xsZXJPcHRpb25zIiwgImRlZmluZU1ldGFkYXRhIiwgImluamVjdGFibGUiLCAiR2xvYmFsIiwgIkdsb2JhbE1vZHVsZSIsICJJbmplY3QiLCAia2V5IiwgInByb3BlcnR5S2V5IiwgInBhcmFtSW5kZXgiLCAiaXNOaWwiLCAidmFsaWRhdGVJbmplY3Rpb25Ub2tlbiIsICJJbnZhbGlkSW5qZWN0aW9uVG9rZW5TcGVjaWZpZWQiLCAidG9rZW4iLCAiZ2V0TWV0YWRhdGEiLCAiSW5qZWN0aW9uVG9rZW5Ob3RGb3VuZCIsICJpbmplY3QiLCAiSW5qZWN0YWJsZSIsICJ2YWxpZGF0ZUluamVjdGFibGVNZXRhZGF0YSIsICJNb2R1bGUiLCAidmFsaWRhdGVNb2R1bGVPcHRpb25zIiwgIk9wdGlvbmFsIiwgIm9wdGlvbmFsIiwgIlNldE1ldGFkYXRhIiwgImRlY29yYXRvckZhY3RvcnkiLCAiX19uYW1lIiwgIl9tZXRob2QiLCAiZGVzY3JpcHRvciIsICJLRVkiLCAiQ2F0Y2giLCAiZXhjZXB0aW9ucyIsICJkdXBsaWNhdGVzIiwgImZpbHRlciIsICJleGNlcHRpb24iLCAiaW5kZXgiLCAiaW5kZXhPZiIsICJsZW5ndGgiLCAiRXhjZXB0aW9uSGFuZGxpbmdDb25mbGljdCIsICJVc2VGaWx0ZXJzIiwgImZpbHRlcnMiLCAibWV0aG9kIiwgInZhbGlkYXRlZEZpbHRlcnMiLCAidmFsaWRhdGVFcnJvckZpbHRlciIsICJwdXNoIiwgIkF0TGVhc3RPbmVGaWx0ZXJSZXF1aXJlZCIsICJtZXRob2RGaWx0ZXJzIiwgIkVycm9yRmlsdGVycyIsICJmaW5kIiwgImluY2x1ZGVzIiwgIkR1cGxpY2F0ZUVycm9yRmlsdGVyRGV0ZWN0ZWQiLCAiY2xhc3NGaWx0ZXJzIiwgIkFwcFJ1bnRpbWUiLCAiZXZlbnRIYW5kbGVyIiwgInJwY0hhbmRsZXIiLCAiZ2xvYmFsR3VhcmRzIiwgImdsb2JhbEludGVyY2VwdG9ycyIsICJnbG9iYWxQaXBlcyIsICJnbG9iYWxFcnJvckZpbHRlcnMiLCAibG9nZ2VyU2VydmljZSIsICJlbmFibGVTaHV0ZG93bkhvb2tzIiwgImJvb3QiLCAicmVzb2x2ZWRUcmVlIiwgImFzeW5jVHJhdmVyc2UiLCAibm9kZSIsICJzdGFydFRpbWUiLCAiRGF0ZSIsICJub3ciLCAibW9kdWxlIiwgImluc3RhbmNlIiwgImNvbnRhaW5lciIsICJnZXQiLCAibWV0YWRhdGEiLCAiY2xhc3NSZWYiLCAiY29udHJvbGxlcnMiLCAiZm9yRWFjaCIsICJjb250cm9sbGVyIiwgImludGVybmFsUHJvdmlkZXJzIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgImxvZyIsICJuYW1lIiwgInJ1bkxpZmVjeWNsZU1ldGhvZCIsICJydW5MaWZlY3ljbGVNZXRob2RzIiwgInRyYXZlcnNlIiwgInRpbWUiLCAicmVnaXN0ZXJUaW1lcnMiLCAicmVnaXN0ZXJMaXN0ZW5lcnMiLCAic2h1dGRvd24iLCAidGltZXJTZXJ2aWNlIiwgIm93bmVyIiwgIlRJTUVSX1NFUlZJQ0UiLCAiZXZlcnl0aWNrcyIsICJ0aW1lciIsICJkZXN0cm95IiwgImludGVydmFscyIsICJ0aW1lb3V0cyIsICJjcm9ucyIsICJjcm9uIiwgInN0b3AiLCAiZXZlbnRIYW5kbGVycyIsICJoYW5kbGVyIiwgInJwY0hhbmRsZXJzIiwgImV2ZW50cyIsICJldmVudCIsICJndWFyZHMiLCAiaW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIm1hcHBlZEVycm9yRmlsdGVycyIsICJtYXBFcnJvckZpbHRlcnMiLCAiZXJyb3JGaWx0ZXJzIiwgInJlZ2lzdGVyRXZlbnQiLCAicnBjcyIsICJycGMiLCAicmVnaXN0ZXJSUEMiLCAidGltZXJzIiwgInR5cGUiLCAiY3JlYXRlQ3JvbkpvYiIsICJiaW5kIiwgImNyZWF0ZUV2ZXJ5VGljayIsICJjcmVhdGVJbnRlcnZhbCIsICJ0aW1lb3V0IiwgImNyZWF0ZVRpbWVvdXQiLCAiZmlsdGVyTWFwIiwgImVycm9ycyIsICJmaWx0ZXJFcnJvciIsICJFcnJvckFscmVhZHlIYW5kbGVkQnlGaWx0ZXIiLCAiUHJvbWlzZSIsICJhbGwiLCAibWFwIiwgImlzT2JqZWN0IiwgInByb3ZpZGVySW5zdGFuY2UiLCAiTW9kdWxlRGVwZW5kZW5jeUJpbmRlciIsICJnbG9iYWxBcHBDb250YWluZXIiLCAiY29udGFpbmVyT3B0aW9ucyIsICJNb2R1bGVDb250YWluZXIiLCAicGFyZW50IiwgInRvU2VsZiIsICJpblNpbmdsZXRvblNjb3BlIiwgImdsb2JhbCIsICJfIiwgInByb3ZpZGVyIiwgImJpbmRQcm92aWRlciIsICJ0b0R5bmFtaWNWYWx1ZSIsICJpbXBvcnRNb2R1bGUiLCAicmVwZXRpdGl2ZUltcG9ydHMiLCAiTU9EVUxFX0NPTlRBSU5FUiIsICJ0b0NvbnN0YW50VmFsdWUiLCAidG8iLCAiVGltZXJTZXJ2aWNlIiwgInByb3ZpZGUiLCAidXNlVmFsdWUiLCAiYmluZGluZyIsICJjdHgiLCAiZGVwcyIsICJkZXAiLCAiZXJyIiwgInVuZGVmaW5lZCIsICJ1c2VGYWN0b3J5IiwgInNjb3BlIiwgImluVHJhbnNpZW50U2NvcGUiLCAiaW5SZXF1ZXN0U2NvcGUiLCAidXNlQ2xhc3MiLCAidG9TZXJ2aWNlIiwgInVzZUV4aXN0aW5nIiwgIk1vZHVsZVRyZWVTY2FubmVyIiwgIm1vZHVsZU1ldGFkYXRhUmVhZGVyIiwgImNvbnRyb2xsZXJNZXRhZGF0YVJlYWRlciIsICJzY2FuIiwgIm1vZHVsZU1ldGFkYXRhIiwgInJlYWQiLCAic2NhbkNvbnRyb2xsZXJzIiwgIm1vZHVsZVRyZWUiLCAiVHJlZSIsICJzY2FubmVkTW9kdWxlcyIsICJNYXAiLCAic2V0IiwgImltcG9ydGVkTW9kdWxlIiwgImltcG9ydHMiLCAic2Nhbk1vZHVsZXMiLCAicm9vdCIsICJwYXJlbnROb2RlIiwgInNjYW5uZWRNb2R1bGUiLCAiYWRkIiwgImNoZWNrQ2lyY3VsYXJEZXBlbmRlbmN5IiwgInRyZWVOb2RlIiwgIlRyZWVOb2RlIiwgImFkZENoaWxkIiwgImNvbnRyb2xsZXJNZXRhZGF0YSIsICJwYXJlbnRNZXRhZGF0YSIsICJDaXJjdWxhckRlcGVuZGVuY3lEZXRlY3RlZCIsICJSYWdlTVBTY3JpcHRFdmVudCIsICJldmVudE5hbWUiLCAibGlzdGVuZXIiLCAibXAiLCAicmVtb3ZlIiwgIlJhZ2VNUEV2ZW50RW1taXRlciIsICJtYXBFdmVudHNTaGFyZWQiLCAibWFwRXZlbnRzIiwgImdldEV2ZW50TmFtZSIsICJlbWl0IiwgImFyZ3MiLCAiY2FsbCIsICJvbiIsICJtYXBwZWRFdmVudE5hbWUiLCAib25jZSIsICJvbmNlV3JhcHBlciIsICJvZmYiLCAiUmFnZU1QVGltZXIiLCAibGFzdFRpY2siLCAiaWQiLCAiaW50ZXJ2YWwiLCAiY2FsbGJhY2siLCAiY2xlYXJUaW1lciIsICJSYWdlTVBUaW1lcnMiLCAidGltZXJJbmNyZW1lbnRlciIsICJldmVyeVRpY2tIYW5kbGVycyIsICJpc0V2ZXJ5VGlja1J1bm5pbmciLCAiZXZlcnlUaWNrTWFpbkhhbmRsZXIiLCAidmFsdWVzIiwgIndhcm5pbmdUaHJlc2hvbGQiLCAiX3ZhbHVlIiwgInNvdXJjZUxvY2F0aW9uRnJhbWVTa2lwQ291bnQiLCAiZ2V0QnlJRCIsICJjcmVhdGVUaW1lciIsICJjbGVhciIsICJjYWxsYmFja0JpbmQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ0aW1lcklkIiwgInJhZ2VNUFRpbWVyIiwgImRlbGV0ZSIsICJzZXRJbnRlcnZhbCIsICJjYiIsICJjbGVhckludGVydmFsIiwgInNldFRpbWVvdXQiLCAiY2xlYXJUaW1lb3V0IiwgImV2ZXJ5VGljayIsICJib3VuZCIsICJpc0NsaWVudFNpZGUiLCAiYnJvd3NlcnMiLCAiZSIsICJjb25zb2xlIiwgImxvZ0Vycm9yIiwgImludGVydmFsSGFuZGxlciIsICJfZXZlcnlUaWNrSW50ZXJ2YWwiLCAic2l6ZSIsICJuZXh0VGljayIsICJfbmFtZSIsICJ0aW1lRW5kIiwgIlJhZ2VNUE11bHRpcGxheWVyU2VydmljZSIsICJUaW1lcnMiLCAiRXZlbnRzIiwgInBhcnNlSW50ZXJuYWxBcmdzIiwgInBsYXllciIsICJib2R5IiwgImFyZyIsICJtZXNzYWdlIiwgImEiLCAiSlNPTiIsICJzdHJpbmdpZnkiLCAiU3RyaW5nIiwgImpvaW4iLCAibG9nSW5mbyIsICJsb2dXYXJuaW5nIiwgImxvZ0RlYnVnIiwgIkFwcCIsICJtb2R1bGVUcmVlU2Nhbm5lciIsICJtb2R1bGVEZXBlbmRlbmN5QmluZGVyIiwgImFwcFJ1bnRpbWUiLCAiaW50ZXJuYWxBcHBDb250YWluZXIiLCAicGx1Z2lucyIsICJsb2FkZWQiLCAic3RhcnQiLCAicm9vdE1vZHVsZSIsICJBcHBBbHJlYWR5TG9hZGVkIiwgInJ1blBsdWdpbk1ldGhvZHMiLCAiQXBwTm90TG9hZGVkIiwgInAiLCAicGx1Z2luIiwgInJlc29sdmUiLCAiQXBwQnVpbGRlciIsICJlbnZpcm9tZW50IiwgIm11bHRpcGxheWVyU2VydmljZSIsICJnbG9iYWxDb250YWluZXJPcHRpb25zIiwgInVzZUdsb2JhbEd1YXJkcyIsICJ2YWxpZGF0ZWRHdWFyZHMiLCAiZ3VhcmQiLCAidmFsaWRhdGVHdWFyZCIsICJHTE9CQUxfR1VBUkRTIiwgInVzZUdsb2JhbEludGVyY2VwdG9ycyIsICJ2YWxpZGF0ZWRJbnRlcmNlcHRvcnMiLCAiaW50ZXJjZXB0b3IiLCAidmFsaWRhdGVJbnRlcmNlcHRvciIsICJHTE9CQUxfSU5URVJDRVBUT1JTIiwgInVzZUdsb2JhbFBpcGVzIiwgInZhbGlkYXRlZFBpcGVzIiwgInBpcGUiLCAidmFsaWRhdGVQaXBlIiwgIkdMT0JBTF9QSVBFUyIsICJ1c2VHbG9iYWxGaWx0ZXJzIiwgInZhbGlkYXRlZEZJbHRlcnMiLCAiR0xPQkFMX0VSUk9SX0ZJTFRFUlMiLCAidXNlUGx1Z2lucyIsICJpbnRlcm5hbFBsdWdpbnMiLCAiUExVR0lOUyIsICJyZWJpbmQiLCAiRU5BQkxFX1NIVVRET1dOX0hPT0tTIiwgInNldENvbnRhaW5lck9wdGlvbnMiLCAib25seUdsb2JhbCIsICJDT05UQUlORVJfT1BUSU9OUyIsICJidWlsZCIsICJDb250YWluZXIiLCAiUkVGTEVDVE9SX1NFUlZJQ0UiLCAiUmVmbGVjdG9yU2VydmljZSIsICJNVUxUSVBMQVlFUl9TRVJWSUNFIiwgIkdMT0JBTF9BUFBfQ09OVEFJTkVSIiwgIlBpcGVsaW5lSGFuZGxlciIsICJNb2R1bGVNZXRhZGF0YVJlYWRlciIsICJDb250cm9sbGVyTWV0YWRhdGFSZWFkZXIiLCAiQ29udHJvbGxlckZsb3dIYW5kbGVyIiwgIkNvbnRyb2xsZXJFdmVudEhhbmRsZXIiLCAiQ29udHJvbGxlclJQQ0hhbmRsZXIiLCAiTWFuZ29SZXF1ZXN0QmFzZSIsICJNQU5HT19SRVFVRVNUX0ZBQ1RPUlkiLCAidG9GYWN0b3J5IiwgImNvbnRleHQiLCAicmVxdWVzdCIsICIkYm9keSIsICIkcGxheWVyIiwgIk1hbmdvUmVzcG9uc2VCYXNlIiwgIk1BTkdPX1JFU1BPTlNFX0ZBQ1RPUlkiLCAiRXhlY3V0aW9uQ29udGV4dEJhc2UiLCAiRVhFQ1VUSU9OX0NPTlRFWFRfRkFDVE9SWSIsICJyZXNwb25zZSIsICJleGVjdXRpb25Db250ZXh0IiwgIiR0eXBlIiwgIiRyZXF1ZXN0IiwgIiRyZXNwb25zZSIsICIkaGFuZGxlciIsICIkY2xhc3NSZWYiLCAiJG5hbWUiLCAicGx1Z2luSW5zdGFuY2UiLCAib25CdWlsZCIsICJpc0JvdW5kIiwgImNyZWF0ZUFwcEJ1aWxkZXIiLCAiYXBwQnVpbGRlckluaGVyaXQiLCAiSU5URVJOQUxfQVBQX0NPTlRBSU5FUiIsICJBUFBfRU5WSVJPTUVOVCIsICJjcmVhdGVFdmVudERlY29yYXRvciIsICJ3ZWJWaWV3SWQiLCAiaXNTdHJpbmciLCAiRXZlbnROYW1lTXVzdEJlU3RyaW5nIiwgIkNvbnRyb2xsZXJFdmVudHMiLCAic29tZSIsICJFdmVudE5hbWVNdXN0QmVVbmlxdWUiLCAiT25JbnRlcm5hbCIsICJPbldlYlZpZXciLCAiT24iLCAiT25jZUludGVybmFsIiwgIk9uY2UiLCAiT25jZVdlYlZpZXciLCAiQm9keSIsICJwYXJhbXMiLCAiQ29udHJvbGxlclBhcmFtcyIsICJwYXJhbSIsICJNdWx0aXBsZURlY29yYXRvcnNPblNpbmdsZVBhcmFtZXRlck5vdEFsbG93ZWQiLCAicGFyYW1UeXBlcyIsICJtZXRhdHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiZGF0YSIsICJJbmRleCIsICJpc051bWJlciIsICJJbmRleEtleU11c3RCZU51bWJlciIsICJSZXF1ZXN0IiwgIlJlcSIsICJQYXJhbSIsICJQYXJhbUtleU11c3RCZVN0cmluZyIsICJSZXNwb25zZSIsICJSZXMiLCAiVXNlR3VhcmRzIiwgIkF0TGVhc3RPbmVHdWFyZFJlcXVpcmVkIiwgIm1ldGhvZEd1YXJkcyIsICJHdWFyZHMiLCAiY2xhc3NHdWFyZHMiLCAiVXNlSW50ZXJjZXB0b3JzIiwgIkF0TGVhc3RPbmVJbnRlcmNlcHRvclJlcXVpcmVkIiwgIm1ldGhvZEludGVyY2VwdG9ycyIsICJJbnRlcmNlcHRvcnMiLCAiY2xhc3NJbnRlcmNlcHRvcnMiLCAiVXNlUGlwZXMiLCAiQXRMZWFzdE9uZVBpcGVSZXF1aXJlZCIsICJtZXRob2RQaXBlcyIsICJQaXBlcyIsICJjbGFzc1BpcGVzIiwgImNyZWF0ZVJQQ0RlY29yYXRvciIsICJXZWJWaWV3SWRNdXN0QmVTdHJpbmdPck51bWJlciIsICJSUENOYW1lTXVzdEJlU3RyaW5nIiwgIkNvbnRyb2xsZXJSUENzIiwgIlJQQ05hbWVNdXN0QmVVbmlxdWUiLCAiT25SZXF1ZXN0IiwgInJwY05hbWUiLCAiT25XZWJWaWV3UmVxdWVzdCIsICJjcmVhdGVUaW1lckRlY29yYXRvciIsICJUaW1lck5hbWVNdXN0QmVTdHJpbmciLCAiQ3JvbiIsICJwYXR0ZXJuIiwgIkV2ZXJ5VGljayIsICJJbnRlcnZhbCIsICJuYW1lT3JUaW1lb3V0IiwgImludGVydmFsVGltZW91dCIsICJUaW1lb3V0IiwgImFwcGx5RGVjb3JhdG9ycyIsICJkZWNvcmF0b3JzIiwgImRlY29yYXRvciIsICJGdW5jdGlvbiIsICJjcmVhdGVQYXJhbURlY29yYXRvciIsICJmYWN0b3J5IiwgIkN1c3RvbSIsICJmb3J3YXJkUmVmIiwgImZuIiwgIkxhenlTZXJ2aWNlSWRlbnRpZmVyIiwgIm1ldGFkYXRhS2V5IiwgImdldEFsbCIsICJ0YXJnZXRzIiwgImdldEFsbEFuZE1lcmdlIiwgIm1ldGFkYXRhQ29sbGVjdGlvbiIsICJpdGVtIiwgImlzRW1wdHkiLCAicmVkdWNlIiwgImIiLCAiY29uY2F0IiwgImdldEFsbEFuZE92ZXJyaWRlIiwgInJlc3VsdCIsICJjcmVhdGVEZWNvcmF0b3IiLCAiZ2VuZXJhdGVSYW5kb21JZCIsICJkZWNvcmF0b3JGbiIsICJtZXRhZGF0YVZhbHVlIiwgInRyYW5zZm9ybSIsICIkZXZlcnl0aWNrcyIsICIkaW50ZXJ2YWxzIiwgIiR0aW1lb3V0cyIsICIkY3JvbnMiLCAiY3Jvbk9wdGlvbnMiLCAiY3JvbkpvYiIsICJldmVyeXRpY2siLCAiZ2V0QnlOYW1lIiwgImdldEJ5SWQiLCAiaW5qZWN0YWJsZSIsICJpbmplY3QiLCAiQmFzZUV2ZW50U2VydmljZSIsICIkbG9jYWxIYW5kbGVycyIsICJTZXQiLCAiJGludGVybmFsSGFuZGxlcnMiLCAiJHJlbW90ZUhhbmRsZXJzIiwgIiRpbnRlcm5hbEV2ZW50TmFtZXMiLCAiJGV2ZW50RW1taXRlciIsICJvbiIsICJldmVudE5hbWUiLCAiY2FsbGJhY2siLCAid3JhcHBlciIsICJfX25hbWUiLCAiYXJncyIsICJldmVudEhhbmRsZXIiLCAiYWRkIiwgIm9uY2UiLCAiZW1pdCIsICJib2R5IiwgIiRvbkludGVybmFsIiwgImhhbmRsZXIiLCAiaGFzIiwgIkVycm9yIiwgIkVycm9yTWVzc2FnZSIsICJJbnZhbGlkSW50ZXJuYWxFdmVudE5hbWUiLCAiJG9uY2VJbnRlcm5hbCIsICJCYXNlUlBDU2VydmljZSIsICIkbG9nZ2VyU2VydmljZSIsICIkVElNRU9VVCIsICJNYXAiLCAiY2FsbCIsICJycGNOYW1lIiwgIm9wdGlvbnMiLCAidGltZW91dCIsICJQcm9taXNlIiwgInJlc29sdmUiLCAiZ2V0IiwgIlJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQiLCAidGltZW91dElkIiwgInNldFRpbWVvdXQiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgInJlc3VsdCIsICJjbGVhclRpbWVvdXQiLCAic3VjY2VzcyIsICJzdGF0dXMiLCAiUlBDUmVzdWx0U3RhdHVzIiwgIlN1Y2Nlc3MiLCAiZXJyb3IiLCAiTWFuZ29FcnJvciIsICJtZXNzYWdlIiwgImRldGFpbHMiLCAiUlBDX1JFU1VMVF9VTktOT1dOIiwgIm9uUmVxdWVzdCIsICJSUENIYW5kbGVyQWxyZWFkeUV4aXN0cyIsICJycGNIYW5kbGVyIiwgImRlc3Ryb3kiLCAidmFsaWQiLCAiZGVsZXRlIiwgInNldCIsICJDb250YWluZXIiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiRGVmYXVsdFZhbHVlUGlwZSIsICJkZWZhdWx0VmFsdWUiLCAidHJhbnNmb3JtIiwgInZhbHVlIiwgImlzTmlsIiwgImlzTnVtYmVyIiwgImlzTmFOIiwgIlBsYXllclByb3RvdHlwZVBsdWdpbiIsICJnbG9iYWxBcHBDb250YWluZXIiLCAibG9nZ2VyU2VydmljZSIsICJtdWx0aXBsYXllclNlcnZpY2UiLCAiYmVmb3JlTG9hZCIsICJ0aW1lIiwgIkRhdGUiLCAibm93IiwgIlBsYXllciIsICJnZXRQbGF5ZXIiLCAicHJvdG90eXBlIiwgImVtaXRXZWJWaWV3IiwgImlkIiwgImV2ZW50TmFtZSIsICJib2R5IiwgImVtaXRSYXciLCAicGF5bG9hZCIsICJycGNTZXJ2aWNlIiwgImdldCIsICJSUENfU0VSVklDRSIsICJjYWxsIiwgInJwY05hbWUiLCAib3B0aW9ucyIsICJjYWxsUGxheWVyIiwgImNhbGxXZWJWaWV3IiwgImxvZyIsICJpbmplY3QiLCAiaW5qZWN0YWJsZSIsICJSUENQbHVnaW4iLCAiZXZlbnRTZXJ2aWNlIiwgInJwY1NlcnZpY2UiLCAibG9nZ2VyU2VydmljZSIsICJiZWZvcmVMb2FkIiwgInRpbWUiLCAiRGF0ZSIsICJub3ciLCAib25QbGF5ZXIiLCAicGxheWVyIiwgImJvZHkiLCAidmFsaWQiLCAicnBjSGFuZGxlciIsICJzb3VyY2UiLCAiRXZlbnREZXN0aW5hdGlvbiIsICJDbGllbnQiLCAiJGNsaWVudEhhbmRsZXJzIiwgImdldCIsICJycGNOYW1lIiwgIldlYlZpZXciLCAiJHdlYlZpZXdIYW5kbGVycyIsICJ3ZWJWaWV3SWQiLCAidW5kZWZpbmVkIiwgImVtaXRXZWJWaWV3IiwgImlkIiwgIlJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQiLCAiZW1pdFJhdyIsICJoYW5kbGVyUmVzdWx0IiwgImhhbmRsZXIiLCAicnBjUmVzdWx0IiwgInN1Y2Nlc3MiLCAic3RhdHVzIiwgIlJQQ1Jlc3VsdFN0YXR1cyIsICJTdWNjZXNzIiwgImVycm9yIiwgIk1hbmdvRXJyb3IiLCAibWVzc2FnZSIsICJkZXRhaWxzIiwgIlJQQ19SRVNVTFRfVU5LTk9XTiIsICJsb2ciLCAiQ29udGFpbmVyIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIklOVEVSTkFMX0VWRU5UUyIsICJTQ1JJUFRfUlBDIiwgIlNDUklQVF9SUENfQU5TV0VSIiwgIlNFUlZFUl9TVEFSVEVEIiwgIkNPTk5FQ1RJT05fUVVFVUVfQUREIiwgIkNPTk5FQ1RJT05fUVVFVUVfUkVNT1ZFIiwgIlBMQVlFUl9DT05ORUNUIiwgIlBMQVlFUl9DT05ORUNUX0RFTklFRCIsICJQTEFZRVJfRElTQ09OTkVDVCIsICJQTEFZRVJfREFNQUdFIiwgIlBMQVlFUl9ERUFUSCIsICJQTEFZRVJfSEVBTCIsICJQTEFZRVJfQ09OVFJPTF9SRVFVRVNUIiwgIlBMQVlFUl9JTlRFUklPUl9DSEFOR0UiLCAiUExBWUVSX0RJTUVOU0lPTl9DSEFOR0UiLCAiUExBWUVSX1dFQVBPTl9DSEFOR0UiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9SRVFVRVNUIiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfU1RBUlQiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9TVE9QIiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFIiwgIlBMQVlFUl9TUEFXTiIsICJQTEFZRVJfQU5JTUFUSU9OX0NIQU5HRSIsICJQTEFZRVJfVkVISUNMRV9FTlRFUkVEIiwgIlBMQVlFUl9TVEFSVF9WRUhJQ0xFX0VOVEVSIiwgIlBMQVlFUl9WRUhJQ0xFX0xFRlQiLCAiUExBWUVSX1ZFSElDTEVfU0VBVF9DSEFOR0UiLCAiUEVEX0hFQUwiLCAiUEVEX0RFQVRIIiwgIlBFRF9EQU1BR0UiLCAiVkVISUNMRV9ERVNUUk9ZIiwgIlZFSElDTEVfQVRUQUNIIiwgIlZFSElDTEVfREVUQUNIIiwgIlZFSElDTEVfREFNQUdFIiwgIlZFSElDTEVfU0lSRU5fU1RBVEVfQ0hBTkdFIiwgIlZFSElDTEVfSE9STl9TVEFURV9DSEFOR0UiLCAiVk9JQ0VfQ09OTkVDVElPTiIsICJDTElFTlRfT0JKRUNUX0RFTEVURSIsICJDTElFTlRfT0JKRUNUX1JFUVVFU1QiLCAiQkFTRV9PQkpFQ1RfQ1JFQVRFIiwgIkJBU0VfT0JKRUNUX1JFTU9WRSIsICJORVRfT1dORVJfQ0hBTkdFIiwgIldFQVBPTl9EQU1BR0UiLCAiTUVUQV9DSEFOR0UiLCAiTE9DQUxfTUVUQV9DSEFOR0UiLCAiU1RSRUFNX1NZTkNFRF9NRVRBX0NIQU5HRSIsICJHTE9CQUxfTUVUQV9DSEFOR0UiLCAiR0xPQkFMX1NZTkNFRF9NRVRBX0NIQU5HRSIsICJDT05TT0xFX0NPTU1BTkQiLCAiRVJST1IiLCAiQ09MX1NIQVBFX0VWRU5UIiwgIkVYUExPU0lPTiIsICJGSVJFX1NUQVJUIiwgIlBST0pFQ1RJTEVfU1RBUlQiLCAiRU5USVRZX0NPTF9TSEFQRV9FTlRFUiIsICJFTlRJVFlfQ09MX1NIQVBFX0xFQVZFIiwgIkVOVElUWV9DSEVDS1BPSU5UX0VOVEVSIiwgIkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFIiwgIkdJVkVfUEVEX1NDUklQVEVEX1RBU0siLCAiTE9DQUxfU0NSSVBUX0VWRU5UIiwgIlJFTU9URV9TQ1JJUFRfRVZFTlQiLCAiQU5ZX1JFU09VUkNFX1NUQVJUIiwgIkFOWV9SRVNPVVJDRV9TVE9QIiwgIlJFU09VUkNFX1NUQVJUIiwgIlJFU09VUkNFX1NUT1AiLCAiUkVTT1VSQ0VfRVJST1IiLCAiRVZFTlQiLCAiU2VydmVyRXZlbnRTZXJ2aWNlIiwgIkJhc2VFdmVudFNlcnZpY2UiLCAiJHJhZ2VFdmVudHMiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIkV2ZW50cyIsICIkaW50ZXJuYWxFdmVudE5hbWVzIiwgIlNldCIsICJPYmplY3QiLCAidmFsdWVzIiwgIklOVEVSTkFMX0VWRU5UUyIsICJvblBsYXllciIsICJldmVudE5hbWUiLCAiY2FsbGJhY2siLCAid3JhcHBlciIsICJwbGF5ZXIiLCAiYXJncyIsICJldmVudEhhbmRsZXIiLCAiJHJlbW90ZUhhbmRsZXJzIiwgImFkZCIsICJvbmNlUGxheWVyIiwgIm9uUmVtb3RlIiwgIm9uY2VSZW1vdGUiLCAiZW1pdFBsYXllcnMiLCAicGxheWVycyIsICJib2R5IiwgImNhbGwiLCAiZW1pdFBsYXllcnNVbnJlbGlhYmxlIiwgImNhbGxVbnJlbGlhYmxlIiwgImVtaXRBbGxQbGF5ZXJzIiwgIm1wIiwgImVtaXRBbGxQbGF5ZXJzVW5yZWxpYWJsZSIsICJvbldlYlZpZXciLCAiaWQiLCAib25jZVdlYlZpZXciLCAiZW1pdFdlYlZpZXdzIiwgInBheWxvYWQiLCAiZW1pdEFsbFdlYlZpZXdzIiwgImVtaXRBbGxXZWJWaWV3c1VucmVsaWFibGUiLCAib25QbGF5ZXJKb2luIiwgIm9uIiwgIm9uUGxheWVyUXVpdCIsICJvblBsYXllclJlYWR5IiwgIm9uUGxheWVyRGVhdGgiLCAib25QbGF5ZXJTcGF3biIsICJvblBsYXllckNoYXQiLCAib25QbGF5ZXJDb21tYW5kIiwgIm9uUGxheWVyRW50ZXJWZWhpY2xlIiwgIm9uUGxheWVyRXhpdFZlaGljbGUiLCAib25QbGF5ZXJTdGFydEVudGVyVmVoaWNsZSIsICJvblBsYXllclN0YXJ0RXhpdFZlaGljbGUiLCAib25QbGF5ZXJXZWFwb25DaGFuZ2UiLCAib25QbGF5ZXJEYW1hZ2UiLCAib25WZWhpY2xlRGVhdGgiLCAib25WZWhpY2xlRGFtYWdlIiwgIm9uUGxheWVyRW50ZXJDb2xzaGFwZSIsICJvblBsYXllckV4aXRDb2xzaGFwZSIsICJvblBsYXllckVudGVyQ2hlY2twb2ludCIsICJvblBsYXllckV4aXRDaGVja3BvaW50IiwgIm9uUGxheWVyQ29ubmVjdCIsICJvblBsYXllckRpc2Nvbm5lY3QiLCAiZXhpdFR5cGUiLCAicmVhc29uIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlNlcnZlckxvZ2dlclNlcnZpY2UiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgImxvZyIsICJhcmdzIiwgIk1BTkdPX0xPR19QUkVGSVgiLCAid2FybiIsICJsb2dXYXJuaW5nIiwgImVycm9yIiwgImxvZ0Vycm9yIiwgImRlYnVnIiwgImxvZ0RlYnVnIiwgImluamVjdCIsICJpbmplY3RhYmxlIiwgIlNlcnZlclJQQ1NlcnZpY2UiLCAiQmFzZVJQQ1NlcnZpY2UiLCAiJGV2ZW50U2VydmljZSIsICIkY2xpZW50SGFuZGxlcnMiLCAiTWFwIiwgIiR3ZWJWaWV3SGFuZGxlcnMiLCAiY2FsbFBsYXllciIsICJwbGF5ZXIiLCAicnBjTmFtZSIsICJib2R5IiwgIm9wdGlvbnMiLCAidGltZW91dCIsICIkVElNRU9VVCIsICIkaGFuZGxlQ2FsbCIsICJFdmVudERlc3RpbmF0aW9uIiwgIkNsaWVudCIsICJvblBsYXllclJlcXVlc3QiLCAiaGFuZGxlciIsICJoYXMiLCAiJGxvZ2dlclNlcnZpY2UiLCAiZXJyb3IiLCAiRXJyb3IiLCAiRXJyb3JNZXNzYWdlIiwgIlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzIiwgInJwY0hhbmRsZXIiLCAiZGVzdHJveSIsICJ2YWxpZCIsICJkZWxldGUiLCAic2V0IiwgImNhbGxXZWJWaWV3IiwgImlkIiwgIldlYlZpZXciLCAib25XZWJWaWV3UmVxdWVzdCIsICJrZXkiLCAiZGVzdGluYXRpb24iLCAid2ViVmlld0lkIiwgIlByb21pc2UiLCAicmVzb2x2ZSIsICJSUENfUkVTVUxUX1BMQVlFUl9OT1RfRk9VTkQiLCAiY2FsbElkIiwgImdlbmVyYXRlUmFuZG9tSWQiLCAidGltZW91dElkIiwgImRpc2Nvbm5lY3RIYW5kbGVyIiwgIm9uUGxheWVyRGlzY29ubmVjdCIsICJjb250ZXh0IiwgImNsZWFyVGltZW91dCIsICJSUENfUkVTVUxUX1BMQVlFUl9ESVNDT05ORUNURUQiLCAib25jZUhhbmRsZSIsICJfcGxheWVyIiwgImV2ZW50SGFuZGxlciIsICJvbmNlV2ViVmlldyIsICJvbmNlUGxheWVyIiwgInBheWxvYWQiLCAic291cmNlIiwgIlNlcnZlciIsICJlbWl0V2ViVmlldyIsICJlbWl0IiwgInNldFRpbWVvdXQiLCAiUlBDX1JFU1VMVF9USU1FT1VUIiwgIlNlcnZpY2VCaW5kZXJQbHVnaW4iLCAiaW50ZXJuYWxBcHBDb250YWluZXIiLCAiZ2xvYmFsQXBwQ29udGFpbmVyIiwgIm9uQnVpbGQiLCAidGltZSIsICJEYXRlIiwgIm5vdyIsICJiaW5kIiwgIkxPR0dFUl9TRVJWSUNFIiwgInRvIiwgIlNlcnZlckxvZ2dlclNlcnZpY2UiLCAiaW5TaW5nbGV0b25TY29wZSIsICJFVkVOVF9TRVJWSUNFIiwgIlNlcnZlckV2ZW50U2VydmljZSIsICJSUENfU0VSVklDRSIsICJTZXJ2ZXJSUENTZXJ2aWNlIiwgInRvQ29uc3RhbnRWYWx1ZSIsICJnZXQiLCAibG9nZ2VyU2VydmljZSIsICJsb2ciLCAiUmFnZU1QU2VydmVyU2NyaXB0RXZlbnQiLCAiZXZlbnROYW1lIiwgImxpc3RlbmVyIiwgImRlc3Ryb3kiLCAibXAiLCAiZXZlbnRzIiwgInJlbW92ZSIsICJTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIiLCAibWFwRXZlbnRzU2hhcmVkIiwgIm1hcEV2ZW50cyIsICJnZXRFdmVudE5hbWUiLCAiZXZlbnROYW1lIiwgImVtaXQiLCAiYXJncyIsICJtcCIsICJldmVudHMiLCAiY2FsbCIsICJvbiIsICJsaXN0ZW5lciIsICJtYXBwZWRFdmVudE5hbWUiLCAiYWRkIiwgIlJhZ2VNUFNlcnZlclNjcmlwdEV2ZW50IiwgIm9uY2UiLCAib25jZVdyYXBwZXIiLCAicmVtb3ZlIiwgIm9mZiIsICJlbWl0UGxheWVyIiwgInBsYXllciIsICJlbWl0QWxsUGxheWVyc1JhdyIsICJwbGF5ZXJzIiwgImVtaXRBbGxQbGF5ZXJzVW5yZWxpYWJsZVJhdyIsICJjYWxsVW5yZWxpYWJsZSIsICJlbWl0VW5yZWxpYWJsZVJhdyIsICJvblBsYXllciIsICJvbmNlUGxheWVyIiwgIm9mZlBsYXllciIsICJTZXJ2ZXJSYWdlTVBNdWx0aXBsYXllclNlcnZpY2UiLCAiUmFnZU1QTXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIkV2ZW50cyIsICJTZXJ2ZXJSYWdlTVBFdmVudEVtbWl0ZXIiLCAiZ2V0UGxheWVyIiwgIm1wIiwgIlBsYXllciIsICJzZXRCbGlwRmFjdG9yeSIsICJmYWN0b3J5IiwgIkJsaXAiLCAiT2JqZWN0IiwgImFzc2lnbiIsICJwcm90b3R5cGUiLCAic2V0TWFya2VyRmFjdG9yeSIsICJNYXJrZXIiLCAic2V0Q29sU2hhcGVGYWN0b3J5IiwgIkNvbHNoYXBlIiwgInNldENoZWNrcG9pbnRGYWN0b3J5IiwgIkNoZWNrcG9pbnQiLCAic2V0T2JqZWN0RmFjdG9yeSIsICJzZXRQZWRGYWN0b3J5IiwgIlBlZCIsICJzZXRQbGF5ZXJGYWN0b3J5IiwgInNldFZlaGljbGVGYWN0b3J5IiwgIlZlaGljbGUiLCAic2V0VmlydHVhbEVudGl0eUdyb3VwRmFjdG9yeSIsICJfZmFjdG9yeSIsICJzZXRWaXJ0dWFsRW50aXR5RmFjdG9yeSIsICJzZXRWb2ljZUNoYW5uZWxGYWN0b3J5IiwgImxvZyIsICJhcmciLCAiYXJncyIsICJtZXNzYWdlIiwgIm1hcCIsICJhIiwgIkpTT04iLCAic3RyaW5naWZ5IiwgIlN0cmluZyIsICJqb2luIiwgImNvbnNvbGUiLCAibG9nRXJyb3IiLCAiZXJyb3IiLCAibG9nV2FybmluZyIsICJ3YXJuIiwgImxvZ0RlYnVnIiwgIlVzZUZpbHRlcnMiLCAiZmlsdGVycyIsICIkVXNlRmlsdGVycyIsICJPblNjcmlwdFJQQyIsICJPbkludGVybmFsIiwgIklOVEVSTkFMX0VWRU5UUyIsICJTQ1JJUFRfUlBDIiwgIk9uY2VTY3JpcHRSUEMiLCAiT25jZUludGVybmFsIiwgIk9uU2NyaXB0UlBDQW5zd2VyIiwgIlNDUklQVF9SUENfQU5TV0VSIiwgIk9uY2VTY3JpcHRSUENBbnN3ZXIiLCAiT25TZXJ2ZXJTdGFydGVkIiwgIlNFUlZFUl9TVEFSVEVEIiwgIk9uY2VTZXJ2ZXJTdGFydGVkIiwgIk9uQ29ubmVjdGlvblF1ZXVlQWRkIiwgIkNPTk5FQ1RJT05fUVVFVUVfQUREIiwgIk9uY2VDb25uZWN0aW9uUXVldWVBZGQiLCAiT25Db25uZWN0aW9uUXVldWVSZW1vdmUiLCAiQ09OTkVDVElPTl9RVUVVRV9SRU1PVkUiLCAiT25jZUNvbm5lY3Rpb25RdWV1ZVJlbW92ZSIsICJPblBsYXllckNvbm5lY3QiLCAiUExBWUVSX0NPTk5FQ1QiLCAiT25jZVBsYXllckNvbm5lY3QiLCAiT25QbGF5ZXJDb25uZWN0RGVuaWVkIiwgIlBMQVlFUl9DT05ORUNUX0RFTklFRCIsICJPbmNlUGxheWVyQ29ubmVjdERlbmllZCIsICJPblBsYXllckRpc2Nvbm5lY3QiLCAiUExBWUVSX0RJU0NPTk5FQ1QiLCAiT25jZVBsYXllckRpc2Nvbm5lY3QiLCAiT25QbGF5ZXJEYW1hZ2UiLCAiUExBWUVSX0RBTUFHRSIsICJPbmNlUGxheWVyRGFtYWdlIiwgIk9uUGxheWVyRGVhdGgiLCAiUExBWUVSX0RFQVRIIiwgIk9uY2VQbGF5ZXJEZWF0aCIsICJPblBsYXllckhlYWwiLCAiUExBWUVSX0hFQUwiLCAiT25jZVBsYXllckhlYWwiLCAiT25QbGF5ZXJDb250cm9sUmVxdWVzdCIsICJQTEFZRVJfQ09OVFJPTF9SRVFVRVNUIiwgIk9uY2VQbGF5ZXJDb250cm9sUmVxdWVzdCIsICJPblBsYXllckludGVyaW9yQ2hhbmdlIiwgIlBMQVlFUl9JTlRFUklPUl9DSEFOR0UiLCAiT25jZVBsYXllckludGVyaW9yQ2hhbmdlIiwgIk9uUGxheWVyRGltZW5zaW9uQ2hhbmdlIiwgIlBMQVlFUl9ESU1FTlNJT05fQ0hBTkdFIiwgIk9uY2VQbGF5ZXJEaW1lbnNpb25DaGFuZ2UiLCAiT25QbGF5ZXJXZWFwb25DaGFuZ2UiLCAiUExBWUVSX1dFQVBPTl9DSEFOR0UiLCAiT25jZVBsYXllcldlYXBvbkNoYW5nZSIsICJPblBsYXllclN5bmNlZFNjZW5lUmVxdWVzdCIsICJQTEFZRVJfU1lOQ0VEX1NDRU5FX1JFUVVFU1QiLCAiT25jZVBsYXllclN5bmNlZFNjZW5lUmVxdWVzdCIsICJPblBsYXllclN5bmNlZFNjZW5lU3RhcnQiLCAiUExBWUVSX1NZTkNFRF9TQ0VORV9TVEFSVCIsICJPbmNlUGxheWVyU3luY2VkU2NlbmVTdGFydCIsICJPblBsYXllclN5bmNlZFNjZW5lU3RvcCIsICJQTEFZRVJfU1lOQ0VEX1NDRU5FX1NUT1AiLCAiT25jZVBsYXllclN5bmNlZFNjZW5lU3RvcCIsICJPblBsYXllclN5bmNlZFNjZW5lVXBkYXRlIiwgIlBMQVlFUl9TWU5DRURfU0NFTkVfVVBEQVRFIiwgIk9uY2VQbGF5ZXJTeW5jZWRTY2VuZVVwZGF0ZSIsICJPblBsYXllclNwYXduIiwgIlBMQVlFUl9TUEFXTiIsICJPbmNlUGxheWVyU3Bhd24iLCAiT25QbGF5ZXJBbmltYXRpb25DaGFuZ2UiLCAiUExBWUVSX0FOSU1BVElPTl9DSEFOR0UiLCAiT25jZVBsYXllckFuaW1hdGlvbkNoYW5nZSIsICJPblBsYXllclZlaGljbGVFbnRlcmVkIiwgIlBMQVlFUl9WRUhJQ0xFX0VOVEVSRUQiLCAiT25jZVBsYXllclZlaGljbGVFbnRlcmVkIiwgIk9uUGxheWVyU3RhcnRWZWhpY2xlRW50ZXIiLCAiUExBWUVSX1NUQVJUX1ZFSElDTEVfRU5URVIiLCAiT25jZVBsYXllclN0YXJ0VmVoaWNsZUVudGVyIiwgIk9uUGxheWVyVmVoaWNsZUxlZnQiLCAiUExBWUVSX1ZFSElDTEVfTEVGVCIsICJPbmNlUGxheWVyVmVoaWNsZUxlZnQiLCAiT25QbGF5ZXJWZWhpY2xlU2VhdENoYW5nZSIsICJQTEFZRVJfVkVISUNMRV9TRUFUX0NIQU5HRSIsICJPbmNlUGxheWVyVmVoaWNsZVNlYXRDaGFuZ2UiLCAiT25QZWRIZWFsIiwgIlBFRF9IRUFMIiwgIk9uY2VQZWRIZWFsIiwgIk9uUGVkRGVhdGgiLCAiUEVEX0RFQVRIIiwgIk9uY2VQZWREZWF0aCIsICJPblBlZERhbWFnZSIsICJQRURfREFNQUdFIiwgIk9uY2VQZWREYW1hZ2UiLCAiT25WZWhpY2xlRGVzdHJveSIsICJWRUhJQ0xFX0RFU1RST1kiLCAiT25jZVZlaGljbGVEZXN0cm95IiwgIk9uVmVoaWNsZUF0dGFjaCIsICJWRUhJQ0xFX0FUVEFDSCIsICJPbmNlVmVoaWNsZUF0dGFjaCIsICJPblZlaGljbGVEZXRhY2giLCAiVkVISUNMRV9ERVRBQ0giLCAiT25jZVZlaGljbGVEZXRhY2giLCAiT25WZWhpY2xlRGFtYWdlIiwgIlZFSElDTEVfREFNQUdFIiwgIk9uY2VWZWhpY2xlRGFtYWdlIiwgIk9uVmVoaWNsZVNpcmVuU3RhdGVDaGFuZ2UiLCAiVkVISUNMRV9TSVJFTl9TVEFURV9DSEFOR0UiLCAiT25jZVZlaGljbGVTaXJlblN0YXRlQ2hhbmdlIiwgIk9uVmVoaWNsZUhvcm5TdGF0ZUNoYW5nZSIsICJWRUhJQ0xFX0hPUk5fU1RBVEVfQ0hBTkdFIiwgIk9uY2VWZWhpY2xlSG9yblN0YXRlQ2hhbmdlIiwgIk9uVm9pY2VDb25uZWN0aW9uIiwgIlZPSUNFX0NPTk5FQ1RJT04iLCAiT25jZVZvaWNlQ29ubmVjdGlvbiIsICJPbkNsaWVudE9iamVjdERlbGV0ZSIsICJDTElFTlRfT0JKRUNUX0RFTEVURSIsICJPbmNlQ2xpZW50T2JqZWN0RGVsZXRlIiwgIk9uQ2xpZW50T2JqZWN0UmVxdWVzdCIsICJDTElFTlRfT0JKRUNUX1JFUVVFU1QiLCAiT25jZUNsaWVudE9iamVjdFJlcXVlc3QiLCAiT25CYXNlT2JqZWN0Q3JlYXRlIiwgIkJBU0VfT0JKRUNUX0NSRUFURSIsICJPbmNlQmFzZU9iamVjdENyZWF0ZSIsICJPbkJhc2VPYmplY3RSZW1vdmUiLCAiQkFTRV9PQkpFQ1RfUkVNT1ZFIiwgIk9uY2VCYXNlT2JqZWN0UmVtb3ZlIiwgIk9uTmV0T3duZXJDaGFuZ2UiLCAiTkVUX09XTkVSX0NIQU5HRSIsICJPbmNlTmV0T3duZXJDaGFuZ2UiLCAiT25XZWFwb25EYW1hZ2UiLCAiV0VBUE9OX0RBTUFHRSIsICJPbmNlV2VhcG9uRGFtYWdlIiwgIk9uTWV0YUNoYW5nZSIsICJNRVRBX0NIQU5HRSIsICJPbmNlTWV0YUNoYW5nZSIsICJPbkxvY2FsTWV0YUNoYW5nZSIsICJMT0NBTF9NRVRBX0NIQU5HRSIsICJPbmNlTG9jYWxNZXRhQ2hhbmdlIiwgIk9uU3RyZWFtU3luY2VkTWV0YUNoYW5nZSIsICJTVFJFQU1fU1lOQ0VEX01FVEFfQ0hBTkdFIiwgIk9uY2VTdHJlYW1TeW5jZWRNZXRhQ2hhbmdlIiwgIk9uR2xvYmFsTWV0YUNoYW5nZSIsICJHTE9CQUxfTUVUQV9DSEFOR0UiLCAiT25jZUdsb2JhbE1ldGFDaGFuZ2UiLCAiT25HbG9iYWxTeW5jZWRNZXRhQ2hhbmdlIiwgIkdMT0JBTF9TWU5DRURfTUVUQV9DSEFOR0UiLCAiT25jZUdsb2JhbFN5bmNlZE1ldGFDaGFuZ2UiLCAiT25Db25zb2xlQ29tbWFuZCIsICJDT05TT0xFX0NPTU1BTkQiLCAiT25jZUNvbnNvbGVDb21tYW5kIiwgIk9uRXJyb3IiLCAiRVJST1IiLCAiT25jZUVycm9yIiwgIk9uQ29sU2hhcGVFdmVudCIsICJDT0xfU0hBUEVfRVZFTlQiLCAiT25jZUNvbFNoYXBlRXZlbnQiLCAiT25FeHBsb3Npb24iLCAiRVhQTE9TSU9OIiwgIk9uY2VFeHBsb3Npb24iLCAiT25GaXJlU3RhcnQiLCAiRklSRV9TVEFSVCIsICJPbmNlRmlyZVN0YXJ0IiwgIk9uUHJvamVjdGlsZVN0YXJ0IiwgIlBST0pFQ1RJTEVfU1RBUlQiLCAiT25jZVByb2plY3RpbGVTdGFydCIsICJPbkVudGl0eUNvbFNoYXBlRW50ZXIiLCAiRU5USVRZX0NPTF9TSEFQRV9FTlRFUiIsICJPbmNlRW50aXR5Q29sU2hhcGVFbnRlciIsICJPbkVudGl0eUNvbFNoYXBlTGVhdmUiLCAiRU5USVRZX0NPTF9TSEFQRV9MRUFWRSIsICJPbmNlRW50aXR5Q29sU2hhcGVMZWF2ZSIsICJPbkVudGl0eUNoZWNrcG9pbnRFbnRlciIsICJFTlRJVFlfQ0hFQ0tQT0lOVF9FTlRFUiIsICJPbmNlRW50aXR5Q2hlY2twb2ludEVudGVyIiwgIk9uRW50aXR5Q2hlY2twb2ludExlYXZlIiwgIkVOVElUWV9DSEVDS1BPSU5UX0xFQVZFIiwgIk9uY2VFbnRpdHlDaGVja3BvaW50TGVhdmUiLCAiT25HaXZlUGVkU2NyaXB0ZWRUYXNrIiwgIkdJVkVfUEVEX1NDUklQVEVEX1RBU0siLCAiT25jZUdpdmVQZWRTY3JpcHRlZFRhc2siLCAiT25Mb2NhbFNjcmlwdEV2ZW50IiwgIkxPQ0FMX1NDUklQVF9FVkVOVCIsICJPbmNlTG9jYWxTY3JpcHRFdmVudCIsICJPblJlbW90ZVNjcmlwdEV2ZW50IiwgIlJFTU9URV9TQ1JJUFRfRVZFTlQiLCAiT25jZVJlbW90ZVNjcmlwdEV2ZW50IiwgIk9uQW55UmVzb3VyY2VTdGFydCIsICJBTllfUkVTT1VSQ0VfU1RBUlQiLCAiT25jZUFueVJlc291cmNlU3RhcnQiLCAiT25BbnlSZXNvdXJjZVN0b3AiLCAiQU5ZX1JFU09VUkNFX1NUT1AiLCAiT25jZUFueVJlc291cmNlU3RvcCIsICJPblJlc291cmNlU3RhcnQiLCAiUkVTT1VSQ0VfU1RBUlQiLCAiT25jZVJlc291cmNlU3RhcnQiLCAiT25SZXNvdXJjZVN0b3AiLCAiUkVTT1VSQ0VfU1RPUCIsICJPbmNlUmVzb3VyY2VTdG9wIiwgIk9uUmVzb3VyY2VFcnJvciIsICJSRVNPVVJDRV9FUlJPUiIsICJPbmNlUmVzb3VyY2VFcnJvciIsICJPbkV2ZW50IiwgIkVWRU5UIiwgIk9uY2VFdmVudCIsICJPblBsYXllciIsICJldmVudE5hbWUiLCAiY3JlYXRlRXZlbnREZWNvcmF0b3IiLCAiT25XZWJWaWV3IiwgImlkIiwgImV2ZW50TmFtZSIsICIkT25XZWJWaWV3IiwgIk9uIiwgImV2ZW50TmFtZSIsICIkT24iLCAiT25jZVBsYXllciIsICJldmVudE5hbWUiLCAiY3JlYXRlRXZlbnREZWNvcmF0b3IiLCAiT25jZVdlYlZpZXciLCAiaWQiLCAiZXZlbnROYW1lIiwgIiRPbmNlV2ViVmlldyIsICJPbmNlIiwgImV2ZW50TmFtZSIsICIkT25jZSIsICJQbGF5ZXIiLCAia2V5IiwgInBpcGVzIiwgInRhcmdldCIsICJtZXRob2QiLCAiaW5kZXgiLCAicGFyYW1zIiwgIlJlZmxlY3QiLCAiZ2V0TWV0YWRhdGEiLCAiQ29yZU1ldGFkYXRhS2V5IiwgIkNvbnRyb2xsZXJQYXJhbXMiLCAic29tZSIsICJwYXJhbSIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiTXVsdGlwbGVEZWNvcmF0b3JzT25TaW5nbGVQYXJhbWV0ZXJOb3RBbGxvd2VkIiwgInBhcmFtVHlwZXMiLCAibWV0YXR5cGUiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJ1bmRlZmluZWQiLCAiZGVmaW5lTWV0YWRhdGEiLCAidHlwZSIsICJNZXRob2RQYXJhbVR5cGUiLCAiZGF0YSIsICJVc2VHdWFyZHMiLCAiZ3VhcmRzIiwgIiRVc2VHdWFyZHMiLCAiVXNlSW50ZXJjZXB0b3JzIiwgImludGVyY2VwdG9ycyIsICIkVXNlSW50ZXJjZXB0b3JzIiwgIk9uUGxheWVyUmVxdWVzdCIsICJycGNOYW1lIiwgImNyZWF0ZVJQQ0RlY29yYXRvciIsICJPblJlcXVlc3QiLCAicnBjTmFtZSIsICIkT25SZXF1ZXN0IiwgIk9uV2ViVmlld1JlcXVlc3QiLCAiaWQiLCAicnBjTmFtZSIsICIkT25XZWJWaWV3UmVxdWVzdCIsICJUSFJPVFRMRVJfTElNSVQiLCAiVEhST1RUTEVSX1RUTCIsICJUSFJPVFRMRVJfT1BUSU9OUyIsICJUSFJPVFRMRVJfU0tJUCIsICJUSFJPVFRMRVJfU1RPUkFHRSIsICJTa2lwVGhyb3R0bGUiLCAic2tpcCIsICJkZWZhdWx0IiwgInRhcmdldCIsICJfcHJvcGVydHlLZXkiLCAiZGVzY3JpcHRvciIsICJrZXkiLCAiUmVmbGVjdCIsICJkZWZpbmVNZXRhZGF0YSIsICJUSFJPVFRMRVJfU0tJUCIsICJ2YWx1ZSIsICJzZXRUaHJvdHRsZXJNZXRhZGF0YSIsICJ0YXJnZXQiLCAib3B0aW9ucyIsICJuYW1lIiwgIlJlZmxlY3QiLCAiZGVmaW5lTWV0YWRhdGEiLCAiVEhST1RUTEVSX1RUTCIsICJ0dGwiLCAiVEhST1RUTEVSX0xJTUlUIiwgImxpbWl0IiwgIlRocm90dGxlIiwgIl9wcm9wZXJ0eUtleSIsICJkZXNjcmlwdG9yIiwgInZhbHVlIiwgImNyZWF0ZUhhc2giLCAiVGhyb3R0bGVyR3VhcmQiLCAib3B0aW9ucyIsICJzdG9yYWdlU2VydmljZSIsICJyZWZsZWN0b3IiLCAidGhyb3R0bGVycyIsICJjb21tb25PcHRpb25zIiwgIm9uTW9kdWxlSW5pdCIsICJBcnJheSIsICJpc0FycmF5IiwgInNvcnQiLCAiZmlyc3QiLCAic2Vjb25kIiwgImlzRnVuY3Rpb24iLCAidHRsIiwgIm1hcCIsICJvcHQiLCAibmFtZSIsICJza2lwSWYiLCAiY2FuQWN0aXZhdGUiLCAiY29udGV4dCIsICJjb250aW51ZXMiLCAibmFtZWRUaHJvdHRsZXIiLCAic2tpcCIsICJnZXRBbGxBbmRPdmVycmlkZSIsICJUSFJPVFRMRVJfU0tJUCIsICJoYW5kbGVyIiwgImNsYXNzUmVmIiwgInB1c2giLCAicm91dGVPckNsYXNzTGltaXQiLCAiVEhST1RUTEVSX0xJTUlUIiwgInJvdXRlT3JDbGFzc1R0bCIsICJUSFJPVFRMRVJfVFRMIiwgImxpbWl0IiwgInJlc29sdmVWYWx1ZSIsICJoYW5kbGVSZXF1ZXN0IiwgImV2ZXJ5IiwgImNvbnQiLCAidGhyb3R0bGVyIiwgInBsYXllciIsICJyZXF1ZXN0IiwgIkVycm9yIiwgImtleSIsICJnZW5lcmF0ZUtleSIsICJ0b3RhbEhpdHMiLCAidGltZVRvRXhwaXJlIiwgImluY3JlbWVudCIsICJ0aHJvd1Rocm90dGxpbmdFeGNlcHRpb24iLCAicHJlZml4IiwgImNyZWF0ZUhhc2giLCAidXBkYXRlIiwgImRpZ2VzdCIsICJ0b1N0cmluZyIsICJfdGhyb3R0bGVyTGltaXREZXRhaWwiLCAiVG9vTWFueVJlcXVlc3RzIiwgImdldEVycm9yTWVzc2FnZSIsICJfY29udGV4dCIsICJlcnJvck1lc3NhZ2UiLCAiRXJyb3JNZXNzYWdlIiwgInJlc29sdmFibGVWYWx1ZSIsICJUaHJvdHRsZXJTdG9yYWdlU2VydmljZSIsICJzdG9yYWdlIiwgIldlYWtNYXAiLCAidGltZW91dElkcyIsICJnZXRFeHBpcmF0aW9uVGltZSIsICJwbGF5ZXIiLCAia2V5IiwgIk1hdGgiLCAiZmxvb3IiLCAiZ2V0IiwgImV4cGlyZXNBdCIsICJEYXRlIiwgIm5vdyIsICJzZXRFeHBpcmF0aW9uVGltZSIsICJ0dGxNaWxsaXNlY29uZHMiLCAidGltZW91dElkIiwgInNldFRpbWVvdXQiLCAidG90YWxIaXRzIiwgImNsZWFyVGltZW91dCIsICJmaWx0ZXIiLCAiaWQiLCAicHVzaCIsICJpbmNyZW1lbnQiLCAidHRsIiwgInNldCIsICJNYXAiLCAidGltZVRvRXhwaXJlIiwgIm9uQXBwU2h1dGRvd24iLCAiZm9yRWFjaCIsICJUaHJvdHRsZXJNb2R1bGUiLCAiZm9yUm9vdCIsICJvcHRpb25zIiwgIm1vZHVsZSIsICJwcm92aWRlcnMiLCAicHJvdmlkZSIsICJUSFJPVFRMRVJfT1BUSU9OUyIsICJ1c2VWYWx1ZSIsICJUSFJPVFRMRVJfU1RPUkFHRSIsICJ1c2VDbGFzcyIsICJUaHJvdHRsZXJTdG9yYWdlU2VydmljZSIsICJleHBvcnRzIiwgImZvclJvb3RBc3luYyIsICJjcmVhdGVBc3luY1Byb3ZpZGVycyIsICJpbXBvcnRzIiwgInVzZUV4aXN0aW5nIiwgInVzZUZhY3RvcnkiLCAiY3JlYXRlQXN5bmNPcHRpb25zUHJvdmlkZXIiLCAiaW5qZWN0IiwgIm9wdGlvbnNGYWN0b3J5IiwgImNyZWF0ZVRocm90dGxlck9wdGlvbnMiLCAibXVsdGlwbGF5ZXJTZXJ2aWNlIiwgIlNlcnZlclJhZ2VNUE11bHRpcGxheWVyU2VydmljZSIsICJTZXJ2ZXJBcHBCdWlsZGVyIiwgIkFwcEJ1aWxkZXIiLCAic2V0QmxpcEZhY3RvcnkiLCAiZmFjdG9yeSIsICJzZXRNYXJrZXJGYWN0b3J5IiwgInNldENvbFNoYXBlRmFjdG9yeSIsICJzZXRDaGVja3BvaW50RmFjdG9yeSIsICJzZXRPYmplY3RGYWN0b3J5IiwgInNldFBlZEZhY3RvcnkiLCAic2V0UGxheWVyRmFjdG9yeSIsICJzZXRWZWhpY2xlRmFjdG9yeSIsICJzZXRWaXJ0dWFsRW50aXR5R3JvdXBGYWN0b3J5IiwgInNldFZpcnR1YWxFbnRpdHlGYWN0b3J5IiwgInNldFZvaWNlQ2hhbm5lbEZhY3RvcnkiLCAiY3JlYXRlQXBwQnVpbGRlciIsICIkY3JlYXRlQXBwQnVpbGRlciIsICJlbnZpcm9tZW50IiwgIkFwcEVudmlyb21lbnQiLCAiU2VydmVyIiwgInBsdWdpbnMiLCAiU2VydmljZUJpbmRlclBsdWdpbiIsICJQbGF5ZXJQcm90b3R5cGVQbHVnaW4iLCAiUlBDUGx1Z2luIiwgImFwcEJ1aWxkZXJJbmhlcml0Il0KfQo=