obsidian-typings 2.8.0 → 2.8.2

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.
@@ -66,114 +66,29 @@ __export(implementations_exports, {
66
66
  });
67
67
  module.exports = __toCommonJS(implementations_exports);
68
68
 
69
- // src/obsidian/implementations/Constructors/getTFolderConstructor.ts
69
+ // src/obsidian/implementations/Constructors/getAppConstructor.ts
70
70
  var import_obsidian = require("obsidian");
71
- function getTFolderConstructor() {
72
- return import_obsidian.TFolder;
71
+ function getAppConstructor() {
72
+ return import_obsidian.App;
73
73
  }
74
74
 
75
- // src/obsidian/implementations/Utils/PathUtils.ts
76
- function parentFolderPath(path) {
77
- return path.replace(/\/?[^\/]*$/, "") || "/";
75
+ // src/obsidian/implementations/Constructors/getTFolderConstructor.ts
76
+ var import_obsidian2 = require("obsidian");
77
+ function getTFolderConstructor() {
78
+ return import_obsidian2.TFolder;
78
79
  }
79
80
 
80
- // src/obsidian/implementations/Functions/createTFolderInstance.ts
81
- function createTFolderInstance(app, path) {
82
- let folder = app.vault.getFolderByPath(path);
83
- if (folder) {
84
- return folder;
85
- }
86
- folder = new (getTFolderConstructor())(app.vault, path);
87
- folder.parent = createTFolderInstance(app, parentFolderPath(path));
88
- folder.deleted = true;
89
- return folder;
81
+ // src/obsidian/implementations/Constructors/getInternalPluginsConstructor.ts
82
+ function getInternalPluginsConstructor(app) {
83
+ return app.internalPlugins.constructor;
90
84
  }
91
85
 
92
86
  // src/obsidian/implementations/Constructors/getTFileConstructor.ts
93
- var import_obsidian2 = require("obsidian");
87
+ var import_obsidian3 = require("obsidian");
94
88
  function getTFileConstructor() {
95
- return import_obsidian2.TFile;
96
- }
97
-
98
- // src/obsidian/implementations/Functions/createTFileInstance.ts
99
- function createTFileInstance(app, path) {
100
- let file = app.vault.getFileByPath(path);
101
- if (file) {
102
- return file;
103
- }
104
- file = new (getTFileConstructor())(app.vault, path);
105
- file.parent = createTFolderInstance(app, parentFolderPath(path));
106
- file.deleted = true;
107
- return file;
108
- }
109
-
110
- // src/obsidian/implementations/TypeGuards/isReferenceCache.ts
111
- function isReferenceCache(reference) {
112
- return !!reference.position;
113
- }
114
-
115
- // src/obsidian/implementations/TypeGuards/isEmbedCache.ts
116
- function isEmbedCache(reference) {
117
- return isReferenceCache(reference) && reference.original[0] === "!";
118
- }
119
-
120
- // src/obsidian/implementations/TypeGuards/isFrontmatterLinkCache.ts
121
- function isFrontmatterLinkCache(reference) {
122
- return !!reference.key;
123
- }
124
-
125
- // src/obsidian/implementations/TypeGuards/isLinkCache.ts
126
- function isLinkCache(reference) {
127
- return isReferenceCache(reference) && reference.original[0] !== "!";
89
+ return import_obsidian3.TFile;
128
90
  }
129
91
 
130
- // src/obsidian/implementations/Classes/CustomArrayDictImpl.ts
131
- var CustomArrayDictImpl = class {
132
- data = /* @__PURE__ */ new Map();
133
- add(key, value) {
134
- let values = this.get(key);
135
- if (!values) {
136
- values = [];
137
- this.data.set(key, values);
138
- }
139
- if (!values.includes(value)) {
140
- values.push(value);
141
- }
142
- }
143
- remove(key, value) {
144
- const values = this.get(key);
145
- if (!values) {
146
- return;
147
- }
148
- values.remove(value);
149
- if (values.length === 0) {
150
- this.clear(key);
151
- }
152
- }
153
- get(key) {
154
- return this.data.get(key) || null;
155
- }
156
- keys() {
157
- return Array.from(this.data.keys());
158
- }
159
- clear(key) {
160
- this.data.delete(key);
161
- }
162
- clearAll() {
163
- this.data.clear();
164
- }
165
- contains(key, value) {
166
- return !!this.get(key)?.contains(value);
167
- }
168
- count() {
169
- let ans = 0;
170
- for (const key in this.keys()) {
171
- ans += this.get(key)?.length ?? 0;
172
- }
173
- return ans;
174
- }
175
- };
176
-
177
92
  // src/obsidian/implementations/Constructors/getInternalPluginConstructor.ts
178
93
  function getInternalPluginConstructor(app) {
179
94
  const anyPlugin = Object.values(app.internalPlugins.plugins)[0];
@@ -183,45 +98,6 @@ function getInternalPluginConstructor(app) {
183
98
  return anyPlugin.constructor;
184
99
  }
185
100
 
186
- // src/obsidian/implementations/Constructors/getInternalPluginsConstructor.ts
187
- function getInternalPluginsConstructor(app) {
188
- return app.internalPlugins.constructor;
189
- }
190
-
191
- // src/obsidian/implementations/Constructors/getAppConstructor.ts
192
- var import_obsidian3 = require("obsidian");
193
- function getAppConstructor() {
194
- return import_obsidian3.App;
195
- }
196
-
197
- // src/obsidian/implementations/Constants/FileExtension.ts
198
- var FileExtension = {
199
- _3gp: "3gp",
200
- avif: "avif",
201
- bmp: "bmp",
202
- canvas: "canvas",
203
- flac: "flac",
204
- gif: "gif",
205
- jpeg: "jpeg",
206
- jpg: "jpg",
207
- m4a: "m4a",
208
- md: "md",
209
- mkv: "mkv",
210
- mov: "mov",
211
- mp3: "mp3",
212
- mp4: "mp4",
213
- oga: "oga",
214
- ogg: "ogg",
215
- ogv: "ogv",
216
- opus: "opus",
217
- pdf: "pdf",
218
- png: "png",
219
- svg: "svg",
220
- wav: "wav",
221
- webm: "webm",
222
- webp: "webp"
223
- };
224
-
225
101
  // src/obsidian/implementations/Constants/InternalPluginName.ts
226
102
  var InternalPluginName = {
227
103
  /**
@@ -342,6 +218,34 @@ var InternalPluginName = {
342
218
  ZkPrefixer: "zk-prefixer"
343
219
  };
344
220
 
221
+ // src/obsidian/implementations/Constants/FileExtension.ts
222
+ var FileExtension = {
223
+ _3gp: "3gp",
224
+ avif: "avif",
225
+ bmp: "bmp",
226
+ canvas: "canvas",
227
+ flac: "flac",
228
+ gif: "gif",
229
+ jpeg: "jpeg",
230
+ jpg: "jpg",
231
+ m4a: "m4a",
232
+ md: "md",
233
+ mkv: "mkv",
234
+ mov: "mov",
235
+ mp3: "mp3",
236
+ mp4: "mp4",
237
+ oga: "oga",
238
+ ogg: "ogg",
239
+ ogv: "ogv",
240
+ opus: "opus",
241
+ pdf: "pdf",
242
+ png: "png",
243
+ svg: "svg",
244
+ wav: "wav",
245
+ webm: "webm",
246
+ webp: "webp"
247
+ };
248
+
345
249
  // src/obsidian/implementations/Constants/ViewType.ts
346
250
  var ViewType = {
347
251
  AllProperties: "all-properties",
@@ -368,6 +272,102 @@ var ViewType = {
368
272
  Video: "video"
369
273
  };
370
274
 
275
+ // src/obsidian/implementations/TypeGuards/isReferenceCache.ts
276
+ function isReferenceCache(reference) {
277
+ return !!reference.position;
278
+ }
279
+
280
+ // src/obsidian/implementations/TypeGuards/isLinkCache.ts
281
+ function isLinkCache(reference) {
282
+ return isReferenceCache(reference) && reference.original[0] !== "!";
283
+ }
284
+
285
+ // src/obsidian/implementations/TypeGuards/isEmbedCache.ts
286
+ function isEmbedCache(reference) {
287
+ return isReferenceCache(reference) && reference.original[0] === "!";
288
+ }
289
+
290
+ // src/obsidian/implementations/TypeGuards/isFrontmatterLinkCache.ts
291
+ function isFrontmatterLinkCache(reference) {
292
+ return !!reference.key;
293
+ }
294
+
295
+ // src/obsidian/implementations/Utils/PathUtils.ts
296
+ function parentFolderPath(path) {
297
+ return path.replace(/\/?[^\/]*$/, "") || "/";
298
+ }
299
+
300
+ // src/obsidian/implementations/Functions/createTFolderInstance.ts
301
+ function createTFolderInstance(app, path) {
302
+ let folder = app.vault.getFolderByPath(path);
303
+ if (folder) {
304
+ return folder;
305
+ }
306
+ folder = new (getTFolderConstructor())(app.vault, path);
307
+ folder.parent = createTFolderInstance(app, parentFolderPath(path));
308
+ folder.deleted = true;
309
+ return folder;
310
+ }
311
+
312
+ // src/obsidian/implementations/Functions/createTFileInstance.ts
313
+ function createTFileInstance(app, path) {
314
+ let file = app.vault.getFileByPath(path);
315
+ if (file) {
316
+ return file;
317
+ }
318
+ file = new (getTFileConstructor())(app.vault, path);
319
+ file.parent = createTFolderInstance(app, parentFolderPath(path));
320
+ file.deleted = true;
321
+ return file;
322
+ }
323
+
324
+ // src/obsidian/implementations/Classes/CustomArrayDictImpl.ts
325
+ var CustomArrayDictImpl = class {
326
+ data = /* @__PURE__ */ new Map();
327
+ add(key, value) {
328
+ let values = this.get(key);
329
+ if (!values) {
330
+ values = [];
331
+ this.data.set(key, values);
332
+ }
333
+ if (!values.includes(value)) {
334
+ values.push(value);
335
+ }
336
+ }
337
+ remove(key, value) {
338
+ const values = this.get(key);
339
+ if (!values) {
340
+ return;
341
+ }
342
+ values.remove(value);
343
+ if (values.length === 0) {
344
+ this.clear(key);
345
+ }
346
+ }
347
+ get(key) {
348
+ return this.data.get(key) || null;
349
+ }
350
+ keys() {
351
+ return Array.from(this.data.keys());
352
+ }
353
+ clear(key) {
354
+ this.data.delete(key);
355
+ }
356
+ clearAll() {
357
+ this.data.clear();
358
+ }
359
+ contains(key, value) {
360
+ return !!this.get(key)?.contains(value);
361
+ }
362
+ count() {
363
+ let ans = 0;
364
+ for (const key in this.keys()) {
365
+ ans += this.get(key)?.length ?? 0;
366
+ }
367
+ return ans;
368
+ }
369
+ };
370
+
371
371
  // src/obsidian/implementations/Constructors/Views/getViewConstructorByViewType.ts
372
372
  function getViewConstructorByViewType(app, viewType) {
373
373
  const leaf = app.workspace.createLeafInTabGroup();
@@ -383,9 +383,29 @@ function getViewConstructorByViewType(app, viewType) {
383
383
  }
384
384
  }
385
385
 
386
- // src/obsidian/implementations/Constructors/Views/getOutlineViewConstructor.ts
387
- function getOutlineViewConstructor(app) {
388
- return getViewConstructorByViewType(app, ViewType.Outline);
386
+ // src/obsidian/implementations/Constructors/Views/getAllPropertiesViewConstructor.ts
387
+ function getAllPropertiesViewConstructor(app) {
388
+ return getViewConstructorByViewType(app, ViewType.AllProperties);
389
+ }
390
+
391
+ // src/obsidian/implementations/Constructors/Views/getMarkdownViewConstructor.ts
392
+ function getMarkdownViewConstructor(app) {
393
+ return getViewConstructorByViewType(app, ViewType.Markdown);
394
+ }
395
+
396
+ // src/obsidian/implementations/Constructors/Views/getCanvasViewConstructor.ts
397
+ function getCanvasViewConstructor(app) {
398
+ return getViewConstructorByViewType(app, ViewType.Canvas);
399
+ }
400
+
401
+ // src/obsidian/implementations/Constructors/Views/getFileExplorerViewConstructor.ts
402
+ function getFileExplorerViewConstructor(app) {
403
+ return getViewConstructorByViewType(app, ViewType.FileExplorer);
404
+ }
405
+
406
+ // src/obsidian/implementations/Constructors/Views/getOutgoingLinkViewConstructor.ts
407
+ function getOutgoingLinkViewConstructor(app) {
408
+ return getViewConstructorByViewType(app, ViewType.OutgoingLink);
389
409
  }
390
410
 
391
411
  // src/obsidian/implementations/Constructors/Views/getBrowserViewConstructor.ts
@@ -393,34 +413,29 @@ function getBrowserViewConstructor(app) {
393
413
  return getViewConstructorByViewType(app, ViewType.Browser);
394
414
  }
395
415
 
396
- // src/obsidian/implementations/Constructors/Views/getReleaseNotesViewConstructor.ts
397
- function getReleaseNotesViewConstructor(app) {
398
- return getViewConstructorByViewType(app, ViewType.ReleaseNotes);
399
- }
400
-
401
416
  // src/obsidian/implementations/Constructors/Views/getPdfViewConstructor.ts
402
417
  function getPdfViewConstructor(app) {
403
418
  return getViewConstructorByViewType(app, ViewType.Pdf);
404
419
  }
405
420
 
406
- // src/obsidian/implementations/Constructors/Views/getSyncViewConstructor.ts
407
- function getSyncViewConstructor(app) {
408
- return getViewConstructorByViewType(app, ViewType.Sync);
421
+ // src/obsidian/implementations/Constructors/Views/getSearchViewConstructor.ts
422
+ function getSearchViewConstructor(app) {
423
+ return getViewConstructorByViewType(app, ViewType.Search);
409
424
  }
410
425
 
411
- // src/obsidian/implementations/Constructors/Views/getOutgoingLinkViewConstructor.ts
412
- function getOutgoingLinkViewConstructor(app) {
413
- return getViewConstructorByViewType(app, ViewType.OutgoingLink);
426
+ // src/obsidian/implementations/Constructors/Views/getFilePropertiesViewConstructor.ts
427
+ function getFilePropertiesViewConstructor(app) {
428
+ return getViewConstructorByViewType(app, ViewType.FileProperties);
414
429
  }
415
430
 
416
- // src/obsidian/implementations/Constructors/Views/getCanvasViewConstructor.ts
417
- function getCanvasViewConstructor(app) {
418
- return getViewConstructorByViewType(app, ViewType.Canvas);
431
+ // src/obsidian/implementations/Constructors/Views/getBookmarksViewConstructor.ts
432
+ function getBookmarksViewConstructor(app) {
433
+ return getViewConstructorByViewType(app, ViewType.Bookmarks);
419
434
  }
420
435
 
421
- // src/obsidian/implementations/Constructors/Views/getTagViewConstructor.ts
422
- function getTagViewConstructor(app) {
423
- return getViewConstructorByViewType(app, ViewType.Tag);
436
+ // src/obsidian/implementations/Constructors/Views/getEmptyViewConstructor.ts
437
+ function getEmptyViewConstructor(app) {
438
+ return getViewConstructorByViewType(app, ViewType.Empty);
424
439
  }
425
440
 
426
441
  // src/obsidian/implementations/Constructors/Views/getAudioViewConstructor.ts
@@ -428,29 +443,29 @@ function getAudioViewConstructor(app) {
428
443
  return getViewConstructorByViewType(app, ViewType.Audio);
429
444
  }
430
445
 
431
- // src/obsidian/implementations/Constructors/Views/getLocalGraphViewConstructor.ts
432
- function getLocalGraphViewConstructor(app) {
433
- return getViewConstructorByViewType(app, ViewType.LocalGraph);
446
+ // src/obsidian/implementations/Constructors/Views/getOutlineViewConstructor.ts
447
+ function getOutlineViewConstructor(app) {
448
+ return getViewConstructorByViewType(app, ViewType.Outline);
434
449
  }
435
450
 
436
- // src/obsidian/implementations/Constructors/Views/getBacklinkViewConstructor.ts
437
- function getBacklinkViewConstructor(app) {
438
- return getViewConstructorByViewType(app, ViewType.Backlink);
451
+ // src/obsidian/implementations/Constructors/Views/getTagViewConstructor.ts
452
+ function getTagViewConstructor(app) {
453
+ return getViewConstructorByViewType(app, ViewType.Tag);
439
454
  }
440
455
 
441
- // src/obsidian/implementations/Constructors/Views/getFileExplorerViewConstructor.ts
442
- function getFileExplorerViewConstructor(app) {
443
- return getViewConstructorByViewType(app, ViewType.FileExplorer);
456
+ // src/obsidian/implementations/Constructors/Views/getVideoViewConstructor.ts
457
+ function getVideoViewConstructor(app) {
458
+ return getViewConstructorByViewType(app, ViewType.Video);
444
459
  }
445
460
 
446
- // src/obsidian/implementations/Constructors/Views/getSearchViewConstructor.ts
447
- function getSearchViewConstructor(app) {
448
- return getViewConstructorByViewType(app, ViewType.Search);
461
+ // src/obsidian/implementations/Constructors/Views/getGraphViewConstructor.ts
462
+ function getGraphViewConstructor(app) {
463
+ return getViewConstructorByViewType(app, ViewType.Graph);
449
464
  }
450
465
 
451
- // src/obsidian/implementations/Constructors/Views/getVideoViewConstructor.ts
452
- function getVideoViewConstructor(app) {
453
- return getViewConstructorByViewType(app, ViewType.Video);
466
+ // src/obsidian/implementations/Constructors/Views/getLocalGraphViewConstructor.ts
467
+ function getLocalGraphViewConstructor(app) {
468
+ return getViewConstructorByViewType(app, ViewType.LocalGraph);
454
469
  }
455
470
 
456
471
  // src/obsidian/implementations/Constructors/Views/getImageViewConstructor.ts
@@ -463,33 +478,18 @@ function getBrowserHistoryViewConstructor(app) {
463
478
  return getViewConstructorByViewType(app, ViewType.BrowserHistory);
464
479
  }
465
480
 
466
- // src/obsidian/implementations/Constructors/Views/getEmptyViewConstructor.ts
467
- function getEmptyViewConstructor(app) {
468
- return getViewConstructorByViewType(app, ViewType.Empty);
469
- }
470
-
471
- // src/obsidian/implementations/Constructors/Views/getGraphViewConstructor.ts
472
- function getGraphViewConstructor(app) {
473
- return getViewConstructorByViewType(app, ViewType.Graph);
474
- }
475
-
476
- // src/obsidian/implementations/Constructors/Views/getFilePropertiesViewConstructor.ts
477
- function getFilePropertiesViewConstructor(app) {
478
- return getViewConstructorByViewType(app, ViewType.FileProperties);
479
- }
480
-
481
- // src/obsidian/implementations/Constructors/Views/getBookmarksViewConstructor.ts
482
- function getBookmarksViewConstructor(app) {
483
- return getViewConstructorByViewType(app, ViewType.Bookmarks);
481
+ // src/obsidian/implementations/Constructors/Views/getSyncViewConstructor.ts
482
+ function getSyncViewConstructor(app) {
483
+ return getViewConstructorByViewType(app, ViewType.Sync);
484
484
  }
485
485
 
486
- // src/obsidian/implementations/Constructors/Views/getMarkdownViewConstructor.ts
487
- function getMarkdownViewConstructor(app) {
488
- return getViewConstructorByViewType(app, ViewType.Markdown);
486
+ // src/obsidian/implementations/Constructors/Views/getReleaseNotesViewConstructor.ts
487
+ function getReleaseNotesViewConstructor(app) {
488
+ return getViewConstructorByViewType(app, ViewType.ReleaseNotes);
489
489
  }
490
490
 
491
- // src/obsidian/implementations/Constructors/Views/getAllPropertiesViewConstructor.ts
492
- function getAllPropertiesViewConstructor(app) {
493
- return getViewConstructorByViewType(app, ViewType.AllProperties);
491
+ // src/obsidian/implementations/Constructors/Views/getBacklinkViewConstructor.ts
492
+ function getBacklinkViewConstructor(app) {
493
+ return getViewConstructorByViewType(app, ViewType.Backlink);
494
494
  }
495
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9pbmRleC50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9VdGlscy9QYXRoVXRpbHMudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9GdW5jdGlvbnMvY3JlYXRlVEZvbGRlckluc3RhbmNlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldFRGaWxlQ29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9GdW5jdGlvbnMvY3JlYXRlVEZpbGVJbnN0YW5jZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1R5cGVHdWFyZHMvaXNSZWZlcmVuY2VDYWNoZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1R5cGVHdWFyZHMvaXNFbWJlZENhY2hlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVHlwZUd1YXJkcy9pc0Zyb250bWF0dGVyTGlua0NhY2hlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVHlwZUd1YXJkcy9pc0xpbmtDYWNoZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL2dldEFwcENvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RhbnRzL0ZpbGVFeHRlbnNpb24udHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdGFudHMvSW50ZXJuYWxQbHVnaW5OYW1lLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RhbnRzL1ZpZXdUeXBlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRCcm93c2VyVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFJlbGVhc2VOb3Rlc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRQZGZWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRPdXRnb2luZ0xpbmtWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Q2FudmFzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFRhZ1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRBdWRpb1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRMb2NhbEdyYXBoVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEJhY2tsaW5rVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0VmlkZW9WaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RW1wdHlWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0R3JhcGhWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldE1hcmtkb3duVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBmcm9tICcuL0Z1bmN0aW9ucy9jcmVhdGVURm9sZGVySW5zdGFuY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9GdW5jdGlvbnMvY3JlYXRlVEZpbGVJbnN0YW5jZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL1V0aWxzL1BhdGhVdGlscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVHdWFyZHMvaXNFbWJlZENhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZUd1YXJkcy9pc0Zyb250bWF0dGVyTGlua0NhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZUd1YXJkcy9pc1JlZmVyZW5jZUNhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZUd1YXJkcy9pc0xpbmtDYWNoZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL2dldFRGb2xkZXJDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRBcHBDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRURmlsZUNvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RhbnRzL0ZpbGVFeHRlbnNpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdGFudHMvVmlld1R5cGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdGFudHMvSW50ZXJuYWxQbHVnaW5OYW1lLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldE91dGxpbmVWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3NlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0UGRmVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRPdXRnb2luZ0xpbmtWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Q2FudmFzVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldFRhZ1ZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRBdWRpb1ZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRMb2NhbEdyYXBoVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEJhY2tsaW5rVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0VmlkZW9WaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RW1wdHlWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0R3JhcGhWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldE1hcmtkb3duVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuaW1wb3J0ICcuLi8uLi9pbmRleC5qcyc7XG4iLCAiaW1wb3J0IHtcbiAgICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVEZvbGRlckNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9URm9sZGVyQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgVEZvbGRlciBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgVEZvbGRlciBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRGb2xkZXJDb25zdHJ1Y3RvcigpOiBURm9sZGVyQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBURm9sZGVyIGFzIFRGb2xkZXJDb25zdHJ1Y3Rvcjtcbn1cbiIsICIvKipcbiAqIEdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mLlxuICogQHJldHVybnMgVGhlIHBhcmVudCBmb2xkZXIgcGF0aC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcmVudEZvbGRlclBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC8/W15cXC9dKiQvLCAnJykgfHwgJy8nO1xufVxuIiwgImltcG9ydCB7XG4gICAgdHlwZSBBcHAsXG4gICAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBnZXRURm9sZGVyQ29uc3RydWN0b3IgfSBmcm9tICcuLi9Db25zdHJ1Y3RvcnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICcuLi9VdGlscy9QYXRoVXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBvZiBURm9sZGVyIGV2ZW4gdGhlIHVuZGVybHlpbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LlxuICogVGhpcyBkb2Vzbid0IGNyZWF0ZSB0aGUgbWlzc2luZyBmb2xkZXIgb24gdGhlIGZpbGUgc3lzdGVtLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBURm9sZGVyIHtcbiAgICBsZXQgZm9sZGVyID0gYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChwYXRoKTtcbiAgICBpZiAoZm9sZGVyKSB7XG4gICAgICAgIHJldHVybiBmb2xkZXI7XG4gICAgfVxuXG4gICAgZm9sZGVyID0gbmV3IChnZXRURm9sZGVyQ29uc3RydWN0b3IoKSkoYXBwLnZhdWx0LCBwYXRoKTtcbiAgICBmb2xkZXIucGFyZW50ID0gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG4gICAgZm9sZGVyLmRlbGV0ZWQgPSB0cnVlO1xuICAgIHJldHVybiBmb2xkZXI7XG59XG4iLCAiaW1wb3J0IHtcbiAgICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1RGaWxlQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgVEZpbGUgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFRGaWxlIGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VEZpbGVDb25zdHJ1Y3RvcigpOiBURmlsZUNvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gVEZpbGUgYXMgVEZpbGVDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQge1xuICAgIHR5cGUgQXBwLFxuICAgIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGdldFRGaWxlQ29uc3RydWN0b3IgfSBmcm9tICcuLi9Db25zdHJ1Y3RvcnMvZ2V0VEZpbGVDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBwYXJlbnRGb2xkZXJQYXRoIH0gZnJvbSAnLi4vVXRpbHMvUGF0aFV0aWxzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZSB9IGZyb20gJy4vY3JlYXRlVEZvbGRlckluc3RhbmNlLnRzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyB0aGUgaW5zdGFuY2Ugb2YgVEZpbGUgZXZlbiB0aGUgdW5kZXJseWluZyBmaWxlIGRvZXMgbm90IGV4aXN0LlxuICogVGhpcyBkb2Vzbid0IGNyZWF0ZSB0aGUgbWlzc2luZyBmaWxlIG9uIHRoZSBmaWxlIHN5c3RlbS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRGaWxlSW5zdGFuY2UoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFRGaWxlIHtcbiAgICBsZXQgZmlsZSA9IGFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGgpO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cblxuICAgIGZpbGUgPSBuZXcgKGdldFRGaWxlQ29uc3RydWN0b3IoKSkoYXBwLnZhdWx0LCBwYXRoKTtcbiAgICBmaWxlLnBhcmVudCA9IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZShhcHAsIHBhcmVudEZvbGRlclBhdGgocGF0aCkpO1xuICAgIGZpbGUuZGVsZXRlZCA9IHRydWU7XG4gICAgcmV0dXJuIGZpbGU7XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIFJlZmVyZW5jZSxcbiAgICBSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUmVmZXJlbmNlQ2FjaGUge1xuICAgIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxSZWZlcmVuY2VDYWNoZT4pLnBvc2l0aW9uO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBFbWJlZENhY2hlLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBpc1JlZmVyZW5jZUNhY2hlIH0gZnJvbSAnLi9pc1JlZmVyZW5jZUNhY2hlLnRzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGFuIGVtYmVkIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGFuIGVtYmVkIGNhY2hlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbWJlZENhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIEVtYmVkQ2FjaGUge1xuICAgIHJldHVybiBpc1JlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSkgJiYgcmVmZXJlbmNlLm9yaWdpbmFsWzBdID09PSAnISc7XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICAgIFJlZmVyZW5jZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGcm9udG1hdHRlckxpbmtDYWNoZShyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBGcm9udG1hdHRlckxpbmtDYWNoZSB7XG4gICAgcmV0dXJuICEhKHJlZmVyZW5jZSBhcyBQYXJ0aWFsPEZyb250bWF0dGVyTGlua0NhY2hlPikua2V5O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBMaW5rQ2FjaGUsXG4gICAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGlzUmVmZXJlbmNlQ2FjaGUgfSBmcm9tICcuL2lzUmVmZXJlbmNlQ2FjaGUudHMnO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZWZlcmVuY2UgaXMgYSBsaW5rIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGEgbGluayBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIExpbmtDYWNoZSB7XG4gICAgcmV0dXJuIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKSAmJiByZWZlcmVuY2Uub3JpZ2luYWxbMF0gIT09ICchJztcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEN1c3RvbUFycmF5RGljdCB9IGZyb20gJy4uLy4uL2ludGVybmFscy9DdXN0b21BcnJheURpY3QuanMnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNsYXNzIEN1c3RvbUFycmF5RGljdEltcGw8VD4gaW1wbGVtZW50cyBDdXN0b21BcnJheURpY3Q8VD4ge1xuICAgIHB1YmxpYyBkYXRhOiBNYXA8c3RyaW5nLCBUW10+ID0gbmV3IE1hcCgpO1xuXG4gICAgcHVibGljIGFkZChrZXk6IHN0cmluZywgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IHRoaXMuZ2V0KGtleSk7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXQoa2V5LCB2YWx1ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF2YWx1ZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmdldChrZXkpO1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlcy5yZW1vdmUodmFsdWUpO1xuXG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogVFtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0KGtleSkgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMga2V5cygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZGF0YS5rZXlzKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcihrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGEuZGVsZXRlKGtleSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyQWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGEuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udGFpbnMoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0KGtleSk/LmNvbnRhaW5zKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGFucyA9IDA7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMua2V5cygpKSB7XG4gICAgICAgICAgICBhbnMgKz0gdGhpcy5nZXQoa2V5KT8ubGVuZ3RoID8/IDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYW5zO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvSW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3Rvci50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBJbnRlcm5hbFBsdWdpbiBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSBJbnRlcm5hbFBsdWdpbiBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsUGx1Z2luQ29uc3RydWN0b3I8SW5zdGFuY2U+KGFwcDogQXBwKTogSW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3RvcjxJbnN0YW5jZT4ge1xuICAgIGNvbnN0IGFueVBsdWdpbiA9IE9iamVjdC52YWx1ZXMoYXBwLmludGVybmFsUGx1Z2lucy5wbHVnaW5zKVswXTtcbiAgICBpZiAoIWFueVBsdWdpbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGludGVybmFsIHBsdWdpbiBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gYW55UGx1Z2luLmNvbnN0cnVjdG9yIGFzIEludGVybmFsUGx1Z2luQ29uc3RydWN0b3I8SW5zdGFuY2U+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgSW50ZXJuYWxQbHVnaW5zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIEludGVybmFsUGx1Z2lucyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yKGFwcDogQXBwKTogSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBhcHAuaW50ZXJuYWxQbHVnaW5zLmNvbnN0cnVjdG9yIGFzIEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQXBwQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL0FwcENvbnN0cnVjdG9yLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEFwcCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQXBwIGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwQ29uc3RydWN0b3IoKTogQXBwQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBBcHAgYXMgQXBwQ29uc3RydWN0b3I7XG59XG4iLCAiLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBGaWxlRXh0ZW5zaW9uID0ge1xuICAgIF8zZ3A6ICczZ3AnLFxuICAgIGF2aWY6ICdhdmlmJyxcbiAgICBibXA6ICdibXAnLFxuICAgIGNhbnZhczogJ2NhbnZhcycsXG4gICAgZmxhYzogJ2ZsYWMnLFxuICAgIGdpZjogJ2dpZicsXG4gICAganBlZzogJ2pwZWcnLFxuICAgIGpwZzogJ2pwZycsXG4gICAgbTRhOiAnbTRhJyxcbiAgICBtZDogJ21kJyxcbiAgICBta3Y6ICdta3YnLFxuICAgIG1vdjogJ21vdicsXG4gICAgbXAzOiAnbXAzJyxcbiAgICBtcDQ6ICdtcDQnLFxuICAgIG9nYTogJ29nYScsXG4gICAgb2dnOiAnb2dnJyxcbiAgICBvZ3Y6ICdvZ3YnLFxuICAgIG9wdXM6ICdvcHVzJyxcbiAgICBwZGY6ICdwZGYnLFxuICAgIHBuZzogJ3BuZycsXG4gICAgc3ZnOiAnc3ZnJyxcbiAgICB3YXY6ICd3YXYnLFxuICAgIHdlYm06ICd3ZWJtJyxcbiAgICB3ZWJwOiAnd2VicCdcbn0gYXMgY29uc3Q7XG4iLCAiLyoqIEBwdWJsaWMgKi9cbmV4cG9ydCBjb25zdCBJbnRlcm5hbFBsdWdpbk5hbWUgPSB7XG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEF1ZGlvIHJlY29yZGVyXG4gICAgICovXG4gICAgQXVkaW9SZWNvcmRlcjogJ2F1ZGlvLXJlY29yZGVyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQmFja2xpbmtzXG4gICAgICovXG4gICAgQmFja2xpbms6ICdiYWNrbGluaycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEJvb2ttYXJrc1xuICAgICAqL1xuICAgIEJvb2ttYXJrczogJ2Jvb2ttYXJrcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdlYiB2aWV3ZXJcbiAgICAgKi9cbiAgICBCcm93c2VyOiAnYnJvd3NlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IENhbnZhc1xuICAgICAqL1xuICAgIENhbnZhczogJ2NhbnZhcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IENvbW1hbmQgcGFsZXR0ZVxuICAgICAqL1xuICAgIENvbW1hbmRQYWxldHRlOiAnY29tbWFuZC1wYWxldHRlJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRGFpbHkgbm90ZXNcbiAgICAgKi9cbiAgICBEYWlseU5vdGVzOiAnZGFpbHktbm90ZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiAoaGlkZGVuKVxuICAgICAqL1xuICAgIEVkaXRvclN0YXR1czogJ2VkaXRvci1zdGF0dXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBGaWxlc1xuICAgICAqL1xuICAgIEZpbGVFeHBsb3JlcjogJ2ZpbGUtZXhwbG9yZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBGaWxlIHJlY292ZXJ5XG4gICAgICovXG4gICAgRmlsZVJlY292ZXJ5OiAnZmlsZS1yZWNvdmVyeScsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFNlYXJjaFxuICAgICAqL1xuICAgIEdsb2JhbFNlYXJjaDogJ2dsb2JhbC1zZWFyY2gnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBHcmFwaCB2aWV3XG4gICAgICovXG4gICAgR3JhcGg6ICdncmFwaCcsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEZvcm1hdCBjb252ZXJ0ZXJcbiAgICAgKi9cbiAgICBNYXJrZG93bkltcG9ydGVyOiAnbWFya2Rvd24taW1wb3J0ZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBOb3RlIGNvbXBvc2VyXG4gICAgICovXG4gICAgTm90ZUNvbXBvc2VyOiAnbm90ZS1jb21wb3NlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IE91dGdvaW5nIGxpbmtzXG4gICAgICovXG4gICAgT3V0Z29pbmdMaW5rOiAnb3V0Z29pbmctbGluaycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IE91dGxpbmVcbiAgICAgKi9cbiAgICBPdXRsaW5lOiAnb3V0bGluZScsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFBhZ2UgcHJldmlld1xuICAgICAqL1xuICAgIFBhZ2VQcmV2aWV3OiAncGFnZS1wcmV2aWV3JyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUHJvcGVydGllcyB2aWV3XG4gICAgICovXG4gICAgUHJvcGVydGllczogJ3Byb3BlcnRpZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBQdWJsaXNoXG4gICAgICovXG4gICAgUHVibGlzaDogJ3B1Ymxpc2gnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBSYW5kb20gbm90ZVxuICAgICAqL1xuICAgIFJhbmRvbU5vdGU6ICdyYW5kb20tbm90ZScsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFNsYXNoIGNvbW1hbmRzXG4gICAgICovXG4gICAgU2xhc2hDb21tYW5kOiAnc2xhc2gtY29tbWFuZCcsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFNsaWRlc1xuICAgICAqL1xuICAgIFNsaWRlczogJ3NsaWRlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFF1aWNrIFN3aXRjaGVyXG4gICAgICovXG4gICAgU3dpdGNoZXI6ICdzd2l0Y2hlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFN5bmNcbiAgICAgKi9cbiAgICBTeW5jOiAnc3luYycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFRhZ3Mgdmlld1xuICAgICAqL1xuICAgIFRhZ1BhbmU6ICd0YWctcGFuZScsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFRlbXBsYXRlc1xuICAgICAqL1xuICAgIFRlbXBsYXRlczogJ3RlbXBsYXRlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdvcmQgY291bnRcbiAgICAgKi9cbiAgICBXb3JkQ291bnQ6ICd3b3JkLWNvdW50JyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogV29ya3NwYWNlc1xuICAgICAqL1xuICAgIFdvcmtzcGFjZXM6ICd3b3Jrc3BhY2VzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVW5pcXVlIG5vdGUgY3JlYXRvclxuICAgICAqL1xuICAgIFprUHJlZml4ZXI6ICd6ay1wcmVmaXhlcidcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHsgSW50ZXJuYWxQbHVnaW5OYW1lIH0gZnJvbSAnLi9JbnRlcm5hbFBsdWdpbk5hbWUuanMnO1xuXG4vKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IFZpZXdUeXBlID0ge1xuICAgIEFsbFByb3BlcnRpZXM6ICdhbGwtcHJvcGVydGllcycsXG4gICAgQXVkaW86ICdhdWRpbycsXG4gICAgQmFja2xpbms6IEludGVybmFsUGx1Z2luTmFtZS5CYWNrbGluayxcbiAgICBCb29rbWFya3M6IEludGVybmFsUGx1Z2luTmFtZS5Cb29rbWFya3MsXG4gICAgQnJvd3NlcjogJ2Jyb3dzZXInLFxuICAgIEJyb3dzZXJIaXN0b3J5OiAnYnJvd3Nlci1oaXN0b3J5JyxcbiAgICBDYW52YXM6IEludGVybmFsUGx1Z2luTmFtZS5DYW52YXMsXG4gICAgRW1wdHk6ICdlbXB0eScsXG4gICAgRmlsZUV4cGxvcmVyOiBJbnRlcm5hbFBsdWdpbk5hbWUuRmlsZUV4cGxvcmVyLFxuICAgIEZpbGVQcm9wZXJ0aWVzOiAnZmlsZS1wcm9wZXJ0aWVzJyxcbiAgICBHcmFwaDogSW50ZXJuYWxQbHVnaW5OYW1lLkdyYXBoLFxuICAgIEltYWdlOiAnaW1hZ2UnLFxuICAgIExvY2FsR3JhcGg6ICdsb2NhbGdyYXBoJyxcbiAgICBNYXJrZG93bjogJ21hcmtkb3duJyxcbiAgICBPdXRnb2luZ0xpbms6IEludGVybmFsUGx1Z2luTmFtZS5PdXRnb2luZ0xpbmssXG4gICAgT3V0bGluZTogSW50ZXJuYWxQbHVnaW5OYW1lLk91dGxpbmUsXG4gICAgUGRmOiAncGRmJyxcbiAgICBSZWxlYXNlTm90ZXM6ICdyZWxlYXNlLW5vdGVzJyxcbiAgICBTZWFyY2g6ICdzZWFyY2gnLFxuICAgIFN5bmM6ICdzeW5jJyxcbiAgICBUYWc6ICd0YWcnLFxuICAgIFZpZGVvOiAndmlkZW8nXG59IGFzIGNvbnN0O1xuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHAsXG4gICAgQ29uc3RydWN0b3IsXG4gICAgVmlld1xufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogR2V0IHRoZSB2aWV3IGNvbnN0cnVjdG9yIGJ5IHZpZXcgdHlwZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEBwYXJhbSB2aWV3VHlwZSAtIFRoZSB2aWV3IHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgdmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGU8VFZpZXcgZXh0ZW5kcyBWaWV3ID0gVmlldz4oXG4gICAgYXBwOiBBcHAsXG4gICAgdmlld1R5cGU6IHN0cmluZ1xuKTogQ29uc3RydWN0b3I8VFZpZXc+IHtcbiAgICBjb25zdCBsZWFmID0gYXBwLndvcmtzcGFjZS5jcmVhdGVMZWFmSW5UYWJHcm91cCgpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZpZXdDcmVhdG9yID0gYXBwLnZpZXdSZWdpc3RyeS5nZXRWaWV3Q3JlYXRvckJ5VHlwZSh2aWV3VHlwZSk7XG4gICAgICAgIGlmICghdmlld0NyZWF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmlldyBjcmVhdG9yIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZpZXcgPSB2aWV3Q3JlYXRvcihsZWFmKTtcbiAgICAgICAgcmV0dXJuIHZpZXcuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3I8VFZpZXc+O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxlYWYuZGV0YWNoKCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBPdXRsaW5lVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9PdXRsaW5lVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgT3V0bGluZVZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIE91dGxpbmVWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IE91dGxpbmVWaWV3Q29uc3RydWN0b3Ige1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuT3V0bGluZSkgYXMgT3V0bGluZVZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQnJvd3NlclZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQnJvd3NlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEJyb3dzZXJWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBCcm93c2VyVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBCcm93c2VyVmlld0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJyb3dzZXIpIGFzIEJyb3dzZXJWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VOb3Rlc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvVmlld3MvUmVsZWFzZU5vdGVzVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFJlbGVhc2VOb3Rlc1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFJlbGVhc2VOb3Rlc1ZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxSZWxlYXNlTm90ZXNWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5SZWxlYXNlTm90ZXMpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPFJlbGVhc2VOb3Rlc1ZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBQZGZWaWV3IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL1ZpZXdzL1BkZlZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBQZGZWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBQZGZWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGRmVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8UGRmVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuUGRmKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxQZGZWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgU3luY1ZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvU3luY1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFN5bmNWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBTeW5jVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN5bmNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBTeW5jVmlld0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlN5bmMpIGFzIFN5bmNWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IE91dGdvaW5nTGlua1ZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL091dGdvaW5nTGluay9PdXRnb2luZ0xpbmtWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgT3V0Z29pbmdMaW5rVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgT3V0Z29pbmdMaW5rVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE91dGdvaW5nTGlua1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPE91dGdvaW5nTGlua1ZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLk91dGdvaW5nTGluaykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8T3V0Z29pbmdMaW5rVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IENhbnZhc1ZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQ2FudmFzVmlld0NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQ2FudmFzVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQ2FudmFzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhbnZhc1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IENhbnZhc1ZpZXdDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5DYW52YXMpIGFzIENhbnZhc1ZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgVGFnVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9UYWdWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgVGFnVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgVGFnVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhZ1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPFRhZ1ZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlRhZykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8VGFnVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEF1ZGlvVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9BdWRpb1ZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBBdWRpb1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEF1ZGlvVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF1ZGlvVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8QXVkaW9WaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5BdWRpbykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8QXVkaW9WaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgTG9jYWxHcmFwaFZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL0dyYXBoL0xvY2FsR3JhcGhWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgTG9jYWxHcmFwaFZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIExvY2FsR3JhcGhWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxHcmFwaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPExvY2FsR3JhcGhWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5Mb2NhbEdyYXBoKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxMb2NhbEdyYXBoVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEJhY2tsaW5rVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvQmFja2xpbmsvQmFja2xpbmtWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQmFja2xpbmtWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBCYWNrbGlua1ZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrbGlua1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPEJhY2tsaW5rVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQmFja2xpbmspIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPEJhY2tsaW5rVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVFeHBsb3JlclZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL0ZpbGVFeHBsb3Jlci9GaWxlRXhwbG9yZXJWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgRmlsZUV4cGxvcmVyVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgRmlsZUV4cGxvcmVyVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPEZpbGVFeHBsb3JlclZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkZpbGVFeHBsb3JlcikgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8RmlsZUV4cGxvcmVyVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaFZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL0dsb2JhbFNlYXJjaC9TZWFyY2hWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgU2VhcmNoVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgU2VhcmNoVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPFNlYXJjaFZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlNlYXJjaCkgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8U2VhcmNoVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFZpZGVvVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9WaWRlb1ZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBWaWRlb1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFZpZGVvVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZGVvVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8VmlkZW9WaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5WaWRlbykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8VmlkZW9WaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgSW1hZ2VWaWV3IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL1ZpZXdzL0ltYWdlVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEltYWdlVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgSW1hZ2VWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxJbWFnZVZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkltYWdlKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxJbWFnZVZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUge1xuICAgIEJyb3dzZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yXG59IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBCcm93c2VySGlzdG9yeVZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEJyb3dzZXJIaXN0b3J5VmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogQnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3Ige1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQnJvd3Nlckhpc3RvcnkpIGFzIEJyb3dzZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBFbXB0eVZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvVmlld3MvRW1wdHlWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgRW1wdHlWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBFbXB0eVZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbXB0eVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPEVtcHR5Vmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuRW1wdHkpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPEVtcHR5Vmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEdyYXBoVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvR3JhcGgvR3JhcGhWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgR3JhcGhWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBHcmFwaFZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmFwaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPEdyYXBoVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuR3JhcGgpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPEdyYXBoVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7XG4gICAgRmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3Jcbn0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9GaWxlUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEZpbGVQcm9wZXJ0aWVzVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgRmlsZVByb3BlcnRpZXNWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBGaWxlUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5GaWxlUHJvcGVydGllcykgYXMgRmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IEJvb2ttYXJrc1ZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQm9va21hcmtzVmlld0NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQm9va21hcmtzVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQm9va21hcmtzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2ttYXJrc1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEJvb2ttYXJrc1ZpZXdDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5Cb29rbWFya3MpIGFzIEJvb2ttYXJrc1ZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwLFxuICAgIE1hcmtkb3duVmlld1xufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIE1hcmtkb3duVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgTWFya2Rvd25WaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25WaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxNYXJrZG93blZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLk1hcmtkb3duKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxNYXJrZG93blZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBBbGxQcm9wZXJ0aWVzVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvUHJvcGVydGllcy9BbGxQcm9wZXJ0aWVzVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEFsbFByb3BlcnRpZXNWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBBbGxQcm9wZXJ0aWVzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxBbGxQcm9wZXJ0aWVzVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQWxsUHJvcGVydGllcykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8QWxsUHJvcGVydGllc1ZpZXc+O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLHNCQUVPO0FBU0EsU0FBUyx3QkFBNEM7QUFDeEQsU0FBTztBQUNYOzs7QUNOTyxTQUFTLGlCQUFpQixNQUFzQjtBQUNuRCxTQUFPLEtBQUssUUFBUSxjQUFjLEVBQUUsS0FBSztBQUM3Qzs7O0FDR08sU0FBUyxzQkFBc0IsS0FBVSxNQUF1QjtBQUNuRSxNQUFJLFNBQVMsSUFBSSxNQUFNLGdCQUFnQixJQUFJO0FBQzNDLE1BQUksUUFBUTtBQUNSLFdBQU87QUFBQSxFQUNYO0FBRUEsV0FBUyxLQUFLLHNCQUFzQixHQUFHLElBQUksT0FBTyxJQUFJO0FBQ3RELFNBQU8sU0FBUyxzQkFBc0IsS0FBSyxpQkFBaUIsSUFBSSxDQUFDO0FBQ2pFLFNBQU8sVUFBVTtBQUNqQixTQUFPO0FBQ1g7OztBQ3RCQSxJQUFBQSxtQkFFTztBQVNBLFNBQVMsc0JBQXdDO0FBQ3BELFNB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Tyw2QkFBNkIsS0FBSyxTQUFTLEtBQUs7QUFDM0Q7OztBQ0ZPLFNBQVMsd0JBQXdCLEtBQTJDO0FBQy9FLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxLQUFLO0FBQzNEOzs7QUNDTyxTQUFTLGlDQUFpQyxLQUF5QztBQUN0RixTQUFPLDZCQUE2QixLQUFLLFNBQVMsY0FBYztBQUNwRTs7O0FDTE8sU0FBUyx3QkFBd0IsS0FBMkM7QUFDL0UsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLEtBQUs7QUFDM0Q7OztBQ0ZPLFNBQVMsd0JBQXdCLEtBQTJDO0FBQy9FLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxLQUFLO0FBQzNEOzs7QUNDTyxTQUFTLGlDQUFpQyxLQUF5QztBQUN0RixTQUFPLDZCQUE2QixLQUFLLFNBQVMsY0FBYztBQUNwRTs7O0FDSk8sU0FBUyw0QkFBNEIsS0FBb0M7QUFDNUUsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLFNBQVM7QUFDL0Q7OztBQ0RPLFNBQVMsMkJBQTJCLEtBQThDO0FBQ3JGLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxRQUFRO0FBQzlEOzs7QUNKTyxTQUFTLGdDQUFnQyxLQUFtRDtBQUMvRixTQUFPLDZCQUE2QixLQUFLLFNBQVMsYUFBYTtBQUNuRTsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiJdCn0K
495
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9pbmRleC50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRBcHBDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvZ2V0SW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvZ2V0VEZpbGVDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RhbnRzL1ZpZXdUeXBlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVHlwZUd1YXJkcy9pc1JlZmVyZW5jZUNhY2hlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVHlwZUd1YXJkcy9pc0xpbmtDYWNoZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL1R5cGVHdWFyZHMvaXNFbWJlZENhY2hlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVHlwZUd1YXJkcy9pc0Zyb250bWF0dGVyTGlua0NhY2hlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvVXRpbHMvUGF0aFV0aWxzLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvRnVuY3Rpb25zL2NyZWF0ZVRGb2xkZXJJbnN0YW5jZS50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0Z1bmN0aW9ucy9jcmVhdGVURmlsZUluc3RhbmNlLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ2xhc3Nlcy9DdXN0b21BcnJheURpY3RJbXBsLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QWxsUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRNYXJrZG93blZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRDYW52YXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RmlsZUV4cGxvcmVyVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldE91dGdvaW5nTGlua1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRCcm93c2VyVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFBkZlZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEVtcHR5Vmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEF1ZGlvVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldE91dGxpbmVWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0VGFnVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldFZpZGVvVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldEdyYXBoVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvQ29uc3RydWN0b3JzL1ZpZXdzL2dldExvY2FsR3JhcGhWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QmFja2xpbmtWaWV3Q29uc3RydWN0b3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRBcHBDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRURm9sZGVyQ29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvZ2V0SW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvZ2V0VEZpbGVDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RhbnRzL1ZpZXdUeXBlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZUd1YXJkcy9pc0xpbmtDYWNoZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVHdWFyZHMvaXNSZWZlcmVuY2VDYWNoZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVHdWFyZHMvaXNFbWJlZENhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVHlwZUd1YXJkcy9pc0Zyb250bWF0dGVyTGlua0NhY2hlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVXRpbHMvUGF0aFV0aWxzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vRnVuY3Rpb25zL2NyZWF0ZVRGaWxlSW5zdGFuY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9GdW5jdGlvbnMvY3JlYXRlVEZvbGRlckluc3RhbmNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ2xhc3Nlcy9DdXN0b21BcnJheURpY3RJbXBsLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0TWFya2Rvd25WaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Q2FudmFzVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRPdXRnb2luZ0xpbmtWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3NlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRQZGZWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEVtcHR5Vmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEF1ZGlvVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldE91dGxpbmVWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0VGFnVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldFZpZGVvVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldEdyYXBoVmlld0NvbnN0cnVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29uc3RydWN0b3JzL1ZpZXdzL2dldExvY2FsR3JhcGhWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QnJvd3Nlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbnN0cnVjdG9ycy9WaWV3cy9nZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db25zdHJ1Y3RvcnMvVmlld3MvZ2V0QmFja2xpbmtWaWV3Q29uc3RydWN0b3IuanMnO1xuaW1wb3J0ICcuLi8uLi9pbmRleC5qcyc7XG4iLCAiaW1wb3J0IHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBBcHBDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvQXBwQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQXBwIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBBcHAgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBDb25zdHJ1Y3RvcigpOiBBcHBDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIEFwcCBhcyBBcHBDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQge1xuICAgIFRGb2xkZXJcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBURm9sZGVyQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1RGb2xkZXJDb25zdHJ1Y3Rvci50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBURm9sZGVyIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBURm9sZGVyIGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VEZvbGRlckNvbnN0cnVjdG9yKCk6IFRGb2xkZXJDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIFRGb2xkZXIgYXMgVEZvbGRlckNvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgSW50ZXJuYWxQbHVnaW5zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIEludGVybmFsUGx1Z2lucyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yKGFwcDogQXBwKTogSW50ZXJuYWxQbHVnaW5zQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiBhcHAuaW50ZXJuYWxQbHVnaW5zLmNvbnN0cnVjdG9yIGFzIEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB7XG4gICAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBURmlsZUNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9URmlsZUNvbnN0cnVjdG9yLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFRGaWxlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBURmlsZSBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRGaWxlQ29uc3RydWN0b3IoKTogVEZpbGVDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIFRGaWxlIGFzIFRGaWxlQ29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsUGx1Z2luQ29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL0ludGVybmFsUGx1Z2luQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgSW50ZXJuYWxQbHVnaW4gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUgSW50ZXJuYWxQbHVnaW4gY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yPEluc3RhbmNlPihhcHA6IEFwcCk6IEludGVybmFsUGx1Z2luQ29uc3RydWN0b3I8SW5zdGFuY2U+IHtcbiAgICBjb25zdCBhbnlQbHVnaW4gPSBPYmplY3QudmFsdWVzKGFwcC5pbnRlcm5hbFBsdWdpbnMucGx1Z2lucylbMF07XG4gICAgaWYgKCFhbnlQbHVnaW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBpbnRlcm5hbCBwbHVnaW4gZm91bmQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGFueVBsdWdpbi5jb25zdHJ1Y3RvciBhcyBJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yPEluc3RhbmNlPjtcbn1cbiIsICIvKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEludGVybmFsUGx1Z2luTmFtZSA9IHtcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQXVkaW8gcmVjb3JkZXJcbiAgICAgKi9cbiAgICBBdWRpb1JlY29yZGVyOiAnYXVkaW8tcmVjb3JkZXInLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYWNrbGlua3NcbiAgICAgKi9cbiAgICBCYWNrbGluazogJ2JhY2tsaW5rJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQm9va21hcmtzXG4gICAgICovXG4gICAgQm9va21hcmtzOiAnYm9va21hcmtzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogV2ViIHZpZXdlclxuICAgICAqL1xuICAgIEJyb3dzZXI6ICdicm93c2VyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ2FudmFzXG4gICAgICovXG4gICAgQ2FudmFzOiAnY2FudmFzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ29tbWFuZCBwYWxldHRlXG4gICAgICovXG4gICAgQ29tbWFuZFBhbGV0dGU6ICdjb21tYW5kLXBhbGV0dGUnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBEYWlseSBub3Rlc1xuICAgICAqL1xuICAgIERhaWx5Tm90ZXM6ICdkYWlseS1ub3RlcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IChoaWRkZW4pXG4gICAgICovXG4gICAgRWRpdG9yU3RhdHVzOiAnZWRpdG9yLXN0YXR1cycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEZpbGVzXG4gICAgICovXG4gICAgRmlsZUV4cGxvcmVyOiAnZmlsZS1leHBsb3JlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEZpbGUgcmVjb3ZlcnlcbiAgICAgKi9cbiAgICBGaWxlUmVjb3Zlcnk6ICdmaWxlLXJlY292ZXJ5JyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2VhcmNoXG4gICAgICovXG4gICAgR2xvYmFsU2VhcmNoOiAnZ2xvYmFsLXNlYXJjaCcsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEdyYXBoIHZpZXdcbiAgICAgKi9cbiAgICBHcmFwaDogJ2dyYXBoJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9ybWF0IGNvbnZlcnRlclxuICAgICAqL1xuICAgIE1hcmtkb3duSW1wb3J0ZXI6ICdtYXJrZG93bi1pbXBvcnRlcicsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IE5vdGUgY29tcG9zZXJcbiAgICAgKi9cbiAgICBOb3RlQ29tcG9zZXI6ICdub3RlLWNvbXBvc2VyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0Z29pbmcgbGlua3NcbiAgICAgKi9cbiAgICBPdXRnb2luZ0xpbms6ICdvdXRnb2luZy1saW5rJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0bGluZVxuICAgICAqL1xuICAgIE91dGxpbmU6ICdvdXRsaW5lJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUGFnZSBwcmV2aWV3XG4gICAgICovXG4gICAgUGFnZVByZXZpZXc6ICdwYWdlLXByZXZpZXcnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBQcm9wZXJ0aWVzIHZpZXdcbiAgICAgKi9cbiAgICBQcm9wZXJ0aWVzOiAncHJvcGVydGllcycsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFB1Ymxpc2hcbiAgICAgKi9cbiAgICBQdWJsaXNoOiAncHVibGlzaCcsXG4gICAgLyoqXG4gICAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFJhbmRvbSBub3RlXG4gICAgICovXG4gICAgUmFuZG9tTm90ZTogJ3JhbmRvbS1ub3RlJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xhc2ggY29tbWFuZHNcbiAgICAgKi9cbiAgICBTbGFzaENvbW1hbmQ6ICdzbGFzaC1jb21tYW5kJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xpZGVzXG4gICAgICovXG4gICAgU2xpZGVzOiAnc2xpZGVzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUXVpY2sgU3dpdGNoZXJcbiAgICAgKi9cbiAgICBTd2l0Y2hlcjogJ3N3aXRjaGVyJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU3luY1xuICAgICAqL1xuICAgIFN5bmM6ICdzeW5jJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGFncyB2aWV3XG4gICAgICovXG4gICAgVGFnUGFuZTogJ3RhZy1wYW5lJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGVtcGxhdGVzXG4gICAgICovXG4gICAgVGVtcGxhdGVzOiAndGVtcGxhdGVzJyxcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogV29yZCBjb3VudFxuICAgICAqL1xuICAgIFdvcmRDb3VudDogJ3dvcmQtY291bnQnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBXb3Jrc3BhY2VzXG4gICAgICovXG4gICAgV29ya3NwYWNlczogJ3dvcmtzcGFjZXMnLFxuICAgIC8qKlxuICAgICAqIFBsdWdpbiBuYW1lIGluIFVJOiBVbmlxdWUgbm90ZSBjcmVhdG9yXG4gICAgICovXG4gICAgWmtQcmVmaXhlcjogJ3prLXByZWZpeGVyJ1xufSBhcyBjb25zdDtcbiIsICIvKiogQHB1YmxpYyAqL1xuZXhwb3J0IGNvbnN0IEZpbGVFeHRlbnNpb24gPSB7XG4gICAgXzNncDogJzNncCcsXG4gICAgYXZpZjogJ2F2aWYnLFxuICAgIGJtcDogJ2JtcCcsXG4gICAgY2FudmFzOiAnY2FudmFzJyxcbiAgICBmbGFjOiAnZmxhYycsXG4gICAgZ2lmOiAnZ2lmJyxcbiAgICBqcGVnOiAnanBlZycsXG4gICAganBnOiAnanBnJyxcbiAgICBtNGE6ICdtNGEnLFxuICAgIG1kOiAnbWQnLFxuICAgIG1rdjogJ21rdicsXG4gICAgbW92OiAnbW92JyxcbiAgICBtcDM6ICdtcDMnLFxuICAgIG1wNDogJ21wNCcsXG4gICAgb2dhOiAnb2dhJyxcbiAgICBvZ2c6ICdvZ2cnLFxuICAgIG9ndjogJ29ndicsXG4gICAgb3B1czogJ29wdXMnLFxuICAgIHBkZjogJ3BkZicsXG4gICAgcG5nOiAncG5nJyxcbiAgICBzdmc6ICdzdmcnLFxuICAgIHdhdjogJ3dhdicsXG4gICAgd2VibTogJ3dlYm0nLFxuICAgIHdlYnA6ICd3ZWJwJ1xufSBhcyBjb25zdDtcbiIsICJpbXBvcnQgeyBJbnRlcm5hbFBsdWdpbk5hbWUgfSBmcm9tICcuL0ludGVybmFsUGx1Z2luTmFtZS5qcyc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgY29uc3QgVmlld1R5cGUgPSB7XG4gICAgQWxsUHJvcGVydGllczogJ2FsbC1wcm9wZXJ0aWVzJyxcbiAgICBBdWRpbzogJ2F1ZGlvJyxcbiAgICBCYWNrbGluazogSW50ZXJuYWxQbHVnaW5OYW1lLkJhY2tsaW5rLFxuICAgIEJvb2ttYXJrczogSW50ZXJuYWxQbHVnaW5OYW1lLkJvb2ttYXJrcyxcbiAgICBCcm93c2VyOiAnYnJvd3NlcicsXG4gICAgQnJvd3Nlckhpc3Rvcnk6ICdicm93c2VyLWhpc3RvcnknLFxuICAgIENhbnZhczogSW50ZXJuYWxQbHVnaW5OYW1lLkNhbnZhcyxcbiAgICBFbXB0eTogJ2VtcHR5JyxcbiAgICBGaWxlRXhwbG9yZXI6IEludGVybmFsUGx1Z2luTmFtZS5GaWxlRXhwbG9yZXIsXG4gICAgRmlsZVByb3BlcnRpZXM6ICdmaWxlLXByb3BlcnRpZXMnLFxuICAgIEdyYXBoOiBJbnRlcm5hbFBsdWdpbk5hbWUuR3JhcGgsXG4gICAgSW1hZ2U6ICdpbWFnZScsXG4gICAgTG9jYWxHcmFwaDogJ2xvY2FsZ3JhcGgnLFxuICAgIE1hcmtkb3duOiAnbWFya2Rvd24nLFxuICAgIE91dGdvaW5nTGluazogSW50ZXJuYWxQbHVnaW5OYW1lLk91dGdvaW5nTGluayxcbiAgICBPdXRsaW5lOiBJbnRlcm5hbFBsdWdpbk5hbWUuT3V0bGluZSxcbiAgICBQZGY6ICdwZGYnLFxuICAgIFJlbGVhc2VOb3RlczogJ3JlbGVhc2Utbm90ZXMnLFxuICAgIFNlYXJjaDogJ3NlYXJjaCcsXG4gICAgU3luYzogJ3N5bmMnLFxuICAgIFRhZzogJ3RhZycsXG4gICAgVmlkZW86ICd2aWRlbydcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIFJlZmVyZW5jZSxcbiAgICBSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIHJlZmVyZW5jZSBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgUmVmZXJlbmNlQ2FjaGUge1xuICAgIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxSZWZlcmVuY2VDYWNoZT4pLnBvc2l0aW9uO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBMaW5rQ2FjaGUsXG4gICAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IGlzUmVmZXJlbmNlQ2FjaGUgfSBmcm9tICcuL2lzUmVmZXJlbmNlQ2FjaGUudHMnO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZWZlcmVuY2UgaXMgYSBsaW5rIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGEgbGluayBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGlua0NhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIExpbmtDYWNoZSB7XG4gICAgcmV0dXJuIGlzUmVmZXJlbmNlQ2FjaGUocmVmZXJlbmNlKSAmJiByZWZlcmVuY2Uub3JpZ2luYWxbMF0gIT09ICchJztcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgRW1iZWRDYWNoZSxcbiAgICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgaXNSZWZlcmVuY2VDYWNoZSB9IGZyb20gJy4vaXNSZWZlcmVuY2VDYWNoZS50cyc7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhbiBlbWJlZCBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhbiBlbWJlZCBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1iZWRDYWNoZShyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBFbWJlZENhY2hlIHtcbiAgICByZXR1cm4gaXNSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpICYmIHJlZmVyZW5jZS5vcmlnaW5hbFswXSA9PT0gJyEnO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZWZlcmVuY2UgaXMgYSBmcm9udG1hdHRlciBsaW5rIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGEgZnJvbnRtYXR0ZXIgbGluayBjYWNoZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUge1xuICAgIHJldHVybiAhIShyZWZlcmVuY2UgYXMgUGFydGlhbDxGcm9udG1hdHRlckxpbmtDYWNoZT4pLmtleTtcbn1cbiIsICIvKipcbiAqIEdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mLlxuICogQHJldHVybnMgVGhlIHBhcmVudCBmb2xkZXIgcGF0aC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcmVudEZvbGRlclBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC8/W15cXC9dKiQvLCAnJykgfHwgJy8nO1xufVxuIiwgImltcG9ydCB7XG4gICAgdHlwZSBBcHAsXG4gICAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBnZXRURm9sZGVyQ29uc3RydWN0b3IgfSBmcm9tICcuLi9Db25zdHJ1Y3RvcnMvZ2V0VEZvbGRlckNvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IHBhcmVudEZvbGRlclBhdGggfSBmcm9tICcuLi9VdGlscy9QYXRoVXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHByb3Blcmx5IGluaXRpYWxpemVzIHRoZSBpbnN0YW5jZSBvZiBURm9sZGVyIGV2ZW4gdGhlIHVuZGVybHlpbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LlxuICogVGhpcyBkb2Vzbid0IGNyZWF0ZSB0aGUgbWlzc2luZyBmb2xkZXIgb24gdGhlIGZpbGUgc3lzdGVtLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBURm9sZGVyIHtcbiAgICBsZXQgZm9sZGVyID0gYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChwYXRoKTtcbiAgICBpZiAoZm9sZGVyKSB7XG4gICAgICAgIHJldHVybiBmb2xkZXI7XG4gICAgfVxuXG4gICAgZm9sZGVyID0gbmV3IChnZXRURm9sZGVyQ29uc3RydWN0b3IoKSkoYXBwLnZhdWx0LCBwYXRoKTtcbiAgICBmb2xkZXIucGFyZW50ID0gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG4gICAgZm9sZGVyLmRlbGV0ZWQgPSB0cnVlO1xuICAgIHJldHVybiBmb2xkZXI7XG59XG4iLCAiaW1wb3J0IHtcbiAgICB0eXBlIEFwcCxcbiAgICBURmlsZVxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBnZXRURmlsZUNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vQ29uc3RydWN0b3JzL2dldFRGaWxlQ29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHsgcGFyZW50Rm9sZGVyUGF0aCB9IGZyb20gJy4uL1V0aWxzL1BhdGhVdGlscy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVURm9sZGVySW5zdGFuY2UgfSBmcm9tICcuL2NyZWF0ZVRGb2xkZXJJbnN0YW5jZS50cyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlIG9mIFRGaWxlIGV2ZW4gdGhlIHVuZGVybHlpbmcgZmlsZSBkb2VzIG5vdCBleGlzdC5cbiAqIFRoaXMgZG9lc24ndCBjcmVhdGUgdGhlIG1pc3NpbmcgZmlsZSBvbiB0aGUgZmlsZSBzeXN0ZW0uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVURmlsZUluc3RhbmNlKGFwcDogQXBwLCBwYXRoOiBzdHJpbmcpOiBURmlsZSB7XG4gICAgbGV0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXRoKTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICB9XG5cbiAgICBmaWxlID0gbmV3IChnZXRURmlsZUNvbnN0cnVjdG9yKCkpKGFwcC52YXVsdCwgcGF0aCk7XG4gICAgZmlsZS5wYXJlbnQgPSBjcmVhdGVURm9sZGVySW5zdGFuY2UoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcbiAgICBmaWxlLmRlbGV0ZWQgPSB0cnVlO1xuICAgIHJldHVybiBmaWxlO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQ3VzdG9tQXJyYXlEaWN0IH0gZnJvbSAnLi4vLi4vaW50ZXJuYWxzL0N1c3RvbUFycmF5RGljdC5qcyc7XG5cbi8qKiBAcHVibGljICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tQXJyYXlEaWN0SW1wbDxUPiBpbXBsZW1lbnRzIEN1c3RvbUFycmF5RGljdDxUPiB7XG4gICAgcHVibGljIGRhdGE6IE1hcDxzdHJpbmcsIFRbXT4gPSBuZXcgTWFwKCk7XG5cbiAgICBwdWJsaWMgYWRkKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgICAgICBsZXQgdmFsdWVzID0gdGhpcy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldChrZXksIHZhbHVlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXZhbHVlcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmUoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0KGtleSk7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnJlbW92ZSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQoa2V5OiBzdHJpbmcpOiBUW10gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXQoa2V5KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBrZXlzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5kYXRhLmtleXMoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YS5kZWxldGUoa2V5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YS5jbGVhcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250YWlucyhrZXk6IHN0cmluZywgdmFsdWU6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXQoa2V5KT8uY29udGFpbnModmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3VudCgpOiBudW1iZXIge1xuICAgICAgICBsZXQgYW5zID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5rZXlzKCkpIHtcbiAgICAgICAgICAgIGFucyArPSB0aGlzLmdldChrZXkpPy5sZW5ndGggPz8gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhbnM7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHAsXG4gICAgQ29uc3RydWN0b3IsXG4gICAgVmlld1xufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogR2V0IHRoZSB2aWV3IGNvbnN0cnVjdG9yIGJ5IHZpZXcgdHlwZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEBwYXJhbSB2aWV3VHlwZSAtIFRoZSB2aWV3IHR5cGUuXG4gKiBAcmV0dXJucyBUaGUgdmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGU8VFZpZXcgZXh0ZW5kcyBWaWV3ID0gVmlldz4oXG4gICAgYXBwOiBBcHAsXG4gICAgdmlld1R5cGU6IHN0cmluZ1xuKTogQ29uc3RydWN0b3I8VFZpZXc+IHtcbiAgICBjb25zdCBsZWFmID0gYXBwLndvcmtzcGFjZS5jcmVhdGVMZWFmSW5UYWJHcm91cCgpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZpZXdDcmVhdG9yID0gYXBwLnZpZXdSZWdpc3RyeS5nZXRWaWV3Q3JlYXRvckJ5VHlwZSh2aWV3VHlwZSk7XG4gICAgICAgIGlmICghdmlld0NyZWF0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmlldyBjcmVhdG9yIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZpZXcgPSB2aWV3Q3JlYXRvcihsZWFmKTtcbiAgICAgICAgcmV0dXJuIHZpZXcuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3I8VFZpZXc+O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxlYWYuZGV0YWNoKCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBBbGxQcm9wZXJ0aWVzVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvUHJvcGVydGllcy9BbGxQcm9wZXJ0aWVzVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEFsbFByb3BlcnRpZXNWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBBbGxQcm9wZXJ0aWVzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxBbGxQcm9wZXJ0aWVzVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQWxsUHJvcGVydGllcykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8QWxsUHJvcGVydGllc1ZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHAsXG4gICAgTWFya2Rvd25WaWV3XG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgTWFya2Rvd25WaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBNYXJrZG93blZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZG93blZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPE1hcmtkb3duVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuTWFya2Rvd24pIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPE1hcmtkb3duVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICAgIEFwcFxufSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IENhbnZhc1ZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQ2FudmFzVmlld0NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQ2FudmFzVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQ2FudmFzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhbnZhc1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IENhbnZhc1ZpZXdDb25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5DYW52YXMpIGFzIENhbnZhc1ZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgRmlsZUV4cGxvcmVyVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvRmlsZUV4cGxvcmVyL0ZpbGVFeHBsb3JlclZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBGaWxlRXhwbG9yZXJWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBGaWxlRXhwbG9yZXJWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZUV4cGxvcmVyVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8RmlsZUV4cGxvcmVyVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuRmlsZUV4cGxvcmVyKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxGaWxlRXhwbG9yZXJWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgT3V0Z29pbmdMaW5rVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9JbnRlcm5hbFBsdWdpbnMvT3V0Z29pbmdMaW5rL091dGdvaW5nTGlua1ZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBPdXRnb2luZ0xpbmtWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBPdXRnb2luZ0xpbmtWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0Z29pbmdMaW5rVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8T3V0Z29pbmdMaW5rVmlldz4ge1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuT3V0Z29pbmdMaW5rKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxPdXRnb2luZ0xpbmtWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQnJvd3NlclZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvQnJvd3NlclZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEJyb3dzZXJWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBCcm93c2VyVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJyb3dzZXJWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBCcm93c2VyVmlld0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJyb3dzZXIpIGFzIEJyb3dzZXJWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFBkZlZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvVmlld3MvUGRmVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFBkZlZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFBkZlZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZGZWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxQZGZWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5QZGYpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPFBkZlZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBTZWFyY2hWaWV3IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0ludGVybmFsUGx1Z2lucy9HbG9iYWxTZWFyY2gvU2VhcmNoVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFNlYXJjaFZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFNlYXJjaFZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxTZWFyY2hWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5TZWFyY2gpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPFNlYXJjaFZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUge1xuICAgIEZpbGVQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yXG59IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvRmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBGaWxlUHJvcGVydGllc1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEZpbGVQcm9wZXJ0aWVzVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3Ige1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuRmlsZVByb3BlcnRpZXMpIGFzIEZpbGVQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBCb29rbWFya3NWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL0Jvb2ttYXJrc1ZpZXdDb25zdHJ1Y3Rvci5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEJvb2ttYXJrc1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEJvb2ttYXJrc1ZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb29rbWFya3NWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBCb29rbWFya3NWaWV3Q29uc3RydWN0b3Ige1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQm9va21hcmtzKSBhcyBCb29rbWFya3NWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEVtcHR5VmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9FbXB0eVZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBFbXB0eVZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEVtcHR5VmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVtcHR5Vmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8RW1wdHlWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5FbXB0eSkgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8RW1wdHlWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgQXVkaW9WaWV3IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL1ZpZXdzL0F1ZGlvVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEF1ZGlvVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQXVkaW9WaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXVkaW9WaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxBdWRpb1ZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkF1ZGlvKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxBdWRpb1ZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgICBBcHBcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBPdXRsaW5lVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9PdXRsaW5lVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgT3V0bGluZVZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIE91dGxpbmVWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IE91dGxpbmVWaWV3Q29uc3RydWN0b3Ige1xuICAgIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuT3V0bGluZSkgYXMgT3V0bGluZVZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgVGFnVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9UYWdWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgVGFnVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgVGFnVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhZ1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPFRhZ1ZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlRhZykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8VGFnVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFZpZGVvVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9WaWRlb1ZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBWaWRlb1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFZpZGVvVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZGVvVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8VmlkZW9WaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5WaWRlbykgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8VmlkZW9WaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgR3JhcGhWaWV3IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0ludGVybmFsUGx1Z2lucy9HcmFwaC9HcmFwaFZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBHcmFwaFZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEdyYXBoVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyYXBoVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8R3JhcGhWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5HcmFwaCkgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8R3JhcGhWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgVHlwZWRWaWV3Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL1R5cGVkVmlld0NvbnN0cnVjdG9yLnRzJztcbmltcG9ydCB0eXBlIHsgTG9jYWxHcmFwaFZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL0dyYXBoL0xvY2FsR3JhcGhWaWV3LmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgTG9jYWxHcmFwaFZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIExvY2FsR3JhcGhWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxHcmFwaFZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IFR5cGVkVmlld0NvbnN0cnVjdG9yPExvY2FsR3JhcGhWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5Mb2NhbEdyYXBoKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxMb2NhbEdyYXBoVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IEltYWdlVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9WaWV3cy9JbWFnZVZpZXcuanMnO1xuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9Db25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSBJbWFnZVZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIEltYWdlVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogVHlwZWRWaWV3Q29uc3RydWN0b3I8SW1hZ2VWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5JbWFnZSkgYXMgVHlwZWRWaWV3Q29uc3RydWN0b3I8SW1hZ2VWaWV3Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHtcbiAgICBCcm93c2VySGlzdG9yeVZpZXdDb25zdHJ1Y3RvclxufSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQ29uc3RydWN0b3JzL1ZpZXdzL0Jyb3dzZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yLmpzJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vQ29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgQnJvd3Nlckhpc3RvcnlWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBCcm93c2VySGlzdG9yeVZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcm93c2VySGlzdG9yeVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEJyb3dzZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJyb3dzZXJIaXN0b3J5KSBhcyBCcm93c2VySGlzdG9yeVZpZXdDb25zdHJ1Y3Rvcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gICAgQXBwXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgU3luY1ZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvU3luY1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFN5bmNWaWV3IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSBTeW5jVmlldyBjb25zdHJ1Y3Rvci5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN5bmNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBTeW5jVmlld0NvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlN5bmMpIGFzIFN5bmNWaWV3Q29uc3RydWN0b3I7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFR5cGVkVmlld0NvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0NvbnN0cnVjdG9ycy9WaWV3cy9UeXBlZFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VOb3Rlc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvVmlld3MvUmVsZWFzZU5vdGVzVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIFJlbGVhc2VOb3Rlc1ZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIFJlbGVhc2VOb3Rlc1ZpZXcgY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxSZWxlYXNlTm90ZXNWaWV3PiB7XG4gICAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5SZWxlYXNlTm90ZXMpIGFzIFR5cGVkVmlld0NvbnN0cnVjdG9yPFJlbGVhc2VOb3Rlc1ZpZXc+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBUeXBlZFZpZXdDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9Db25zdHJ1Y3RvcnMvVmlld3MvVHlwZWRWaWV3Q29uc3RydWN0b3IudHMnO1xuaW1wb3J0IHR5cGUgeyBCYWNrbGlua1ZpZXcgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvSW50ZXJuYWxQbHVnaW5zL0JhY2tsaW5rL0JhY2tsaW5rVmlldy5qcyc7XG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL0NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIEJhY2tsaW5rVmlldyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQmFja2xpbmtWaWV3IGNvbnN0cnVjdG9yLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFja2xpbmtWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxCYWNrbGlua1ZpZXc+IHtcbiAgICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJhY2tsaW5rKSBhcyBUeXBlZFZpZXdDb25zdHJ1Y3RvcjxCYWNrbGlua1ZpZXc+O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLHNCQUVPO0FBU0EsU0FBUyxvQkFBb0M7QUFDaEQsU0FBTztBQUNYOzs7QUNiQSxJQUFBQSxtQkFFTztBQVNBLFNBQVMsd0JBQTRDO0FBQ3hELFNBQU87QUFDWDs7O0FDSE8sU0FBUyw4QkFBOEIsS0FBc0M7QUFDaEYsU0FBTyxJQUFJLGdCQUFnQjtBQUMvQjs7O0FDWkEsSUFBQUMsbUJBRU87QUFTQSxTQUFTLHNCQUF3QztBQUNwRCxTQUFPO0FBQ1g7OztBQ0hPLFNBQVMsNkJBQXVDLEtBQStDO0FBQ2xHLFFBQU0sWUFBWSxPQUFPLE9BQU8sSUFBSSxnQkFBZ0IsT0FBTyxFQUFFLENBQUM7QUFDOUQsTUFBSSxDQUFDLFdBQVc7QUFDWixVQUFNLElBQUksTUFBTSwwQkFBMEI7QUFBQSxFQUM5QztBQUNBLFNBQU8sVUFBVTtBQUNyQjs7O0FDZk8sSUFBTSxxQkFBcUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUk5QixlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZixVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVixXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWCxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVCxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJUixnQkFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUloQixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJUCxrQkFBa0I7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlsQixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVCxhQUFhO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJYixZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWixTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVCxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWixjQUFjO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZCxRQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJUixVQUFVO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVixNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJTixTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJVCxXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWCxXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWCxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJWixZQUFZO0FBQ2hCOzs7QUNySE8sSUFBTSxnQkFB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Tyw2QkFBNkIsS0FBSyxTQUFTLEdBQUc7QUFDekQ7OztBQ0ZPLFNBQVMsd0JBQXdCLEtBQTJDO0FBQy9FLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxLQUFLO0FBQzNEOzs7QUNGTyxTQUFTLHdCQUF3QixLQUEyQztBQUMvRSxTQUFPLDZCQUE2QixLQUFLLFNBQVMsS0FBSztBQUMzRDs7O0FDRk8sU0FBUyw2QkFBNkIsS0FBZ0Q7QUFDekYsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLFVBQVU7QUFDaEU7OztBQ0ZPLFNBQVMsd0JBQXdCLEtBQTJDO0FBQy9FLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxLQUFLO0FBQzNEOzs7QUNDTyxTQUFTLGlDQUFpQyxLQUF5QztBQUN0RixTQUFPLDZCQUE2QixLQUFLLFNBQVMsY0FBYztBQUNwRTs7O0FDSk8sU0FBUyx1QkFBdUIsS0FBK0I7QUFDbEUsU0FBTyw2QkFBNkIsS0FBSyxTQUFTLElBQUk7QUFDMUQ7OztBQ0hPLFNBQVMsK0JBQStCLEtBQWtEO0FBQzdGLFNBQU8sNkJBQTZCLEtBQUssU0FBUyxZQUFZO0FBQ2xFOzs7QUNGTyxTQUFTLDJCQUEyQixLQUE4QztBQUNyRixTQUFPLDZCQUE2QixLQUFLLFNBQVMsUUFBUTtBQUM5RDsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiJdCn0K