@wavemaker/app-ng-runtime 11.6.0-next.40753 → 11.6.0-next.41002

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +1 -1
  2. app-ng-runtime/build-task/esm2020/data/form/form-field/form-field.build.mjs +2 -2
  3. app-ng-runtime/build-task/fesm2015/index.mjs +1 -1
  4. app-ng-runtime/build-task/fesm2015/index.mjs.map +1 -1
  5. app-ng-runtime/build-task/fesm2020/index.mjs +1 -1
  6. app-ng-runtime/build-task/fesm2020/index.mjs.map +1 -1
  7. app-ng-runtime/components/base/bundles/index.umd.js +1 -0
  8. app-ng-runtime/components/base/esm2020/widgets/common/partial/partial.directive.mjs +2 -1
  9. app-ng-runtime/components/base/fesm2015/index.mjs +1 -0
  10. app-ng-runtime/components/base/fesm2015/index.mjs.map +1 -1
  11. app-ng-runtime/components/base/fesm2020/index.mjs +1 -0
  12. app-ng-runtime/components/base/fesm2020/index.mjs.map +1 -1
  13. app-ng-runtime/components/chart/bundles/index.umd.js +4 -2
  14. app-ng-runtime/components/chart/esm2020/chart.component.mjs +4 -2
  15. app-ng-runtime/components/chart/esm2020/chart.utils.mjs +2 -2
  16. app-ng-runtime/components/chart/fesm2015/index.mjs +4 -2
  17. app-ng-runtime/components/chart/fesm2015/index.mjs.map +1 -1
  18. app-ng-runtime/components/chart/fesm2020/index.mjs +4 -2
  19. app-ng-runtime/components/chart/fesm2020/index.mjs.map +1 -1
  20. app-ng-runtime/components/data/form/bundles/index.umd.js +41 -27
  21. app-ng-runtime/components/data/form/esm2020/form-field/form-field.directive.mjs +28 -19
  22. app-ng-runtime/components/data/form/esm2020/form.component.mjs +19 -7
  23. app-ng-runtime/components/data/form/fesm2015/index.mjs +45 -27
  24. app-ng-runtime/components/data/form/fesm2015/index.mjs.map +1 -1
  25. app-ng-runtime/components/data/form/fesm2020/index.mjs +45 -24
  26. app-ng-runtime/components/data/form/fesm2020/index.mjs.map +1 -1
  27. app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +2 -0
  28. app-ng-runtime/components/data/table/bundles/index.umd.js +3 -2
  29. app-ng-runtime/components/data/table/esm2020/table.component.mjs +4 -3
  30. app-ng-runtime/components/data/table/fesm2015/index.mjs +3 -2
  31. app-ng-runtime/components/data/table/fesm2015/index.mjs.map +1 -1
  32. app-ng-runtime/components/data/table/fesm2020/index.mjs +3 -2
  33. app-ng-runtime/components/data/table/fesm2020/index.mjs.map +1 -1
  34. app-ng-runtime/components/data/table/table.component.d.ts +1 -1
  35. app-ng-runtime/components/input/default/bundles/index.umd.js +55 -30
  36. app-ng-runtime/components/input/default/esm2020/caption-position.directive.mjs +2 -2
  37. app-ng-runtime/components/input/default/esm2020/select/select.component.mjs +58 -35
  38. app-ng-runtime/components/input/default/fesm2015/index.mjs +56 -31
  39. app-ng-runtime/components/input/default/fesm2015/index.mjs.map +1 -1
  40. app-ng-runtime/components/input/default/fesm2020/index.mjs +53 -31
  41. app-ng-runtime/components/input/default/fesm2020/index.mjs.map +1 -1
  42. app-ng-runtime/components/input/default/select/select.component.d.ts +4 -1
  43. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +2 -2
  44. app-ng-runtime/components/input/epoch/bundles/index.umd.js +50 -25
  45. app-ng-runtime/components/input/epoch/esm2020/base-date-time.component.mjs +36 -14
  46. app-ng-runtime/components/input/epoch/esm2020/date/date.component.mjs +5 -5
  47. app-ng-runtime/components/input/epoch/esm2020/date-time/date-time.component.mjs +6 -5
  48. app-ng-runtime/components/input/epoch/esm2020/time/time.component.mjs +7 -5
  49. app-ng-runtime/components/input/epoch/fesm2015/index.mjs +50 -25
  50. app-ng-runtime/components/input/epoch/fesm2015/index.mjs.map +1 -1
  51. app-ng-runtime/components/input/epoch/fesm2020/index.mjs +50 -25
  52. app-ng-runtime/components/input/epoch/fesm2020/index.mjs.map +1 -1
  53. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +15 -5
  54. app-ng-runtime/components/navigation/menu/esm2020/menu.component.mjs +12 -4
  55. app-ng-runtime/components/navigation/menu/esm2020/menu.props.mjs +2 -1
  56. app-ng-runtime/components/navigation/menu/esm2020/nav/nav.component.mjs +3 -3
  57. app-ng-runtime/components/navigation/menu/esm2020/nav/nav.props.mjs +2 -1
  58. app-ng-runtime/components/navigation/menu/fesm2015/index.mjs +15 -5
  59. app-ng-runtime/components/navigation/menu/fesm2015/index.mjs.map +1 -1
  60. app-ng-runtime/components/navigation/menu/fesm2020/index.mjs +15 -5
  61. app-ng-runtime/components/navigation/menu/fesm2020/index.mjs.map +1 -1
  62. app-ng-runtime/components/navigation/menu/menu.component.d.ts +3 -0
  63. app-ng-runtime/components/navigation/menu/nav/nav.component.d.ts +1 -0
  64. app-ng-runtime/components/navigation/popover/bundles/index.umd.js +10 -9
  65. app-ng-runtime/components/navigation/popover/esm2020/popover.component.mjs +11 -10
  66. app-ng-runtime/components/navigation/popover/fesm2015/index.mjs +10 -9
  67. app-ng-runtime/components/navigation/popover/fesm2015/index.mjs.map +1 -1
  68. app-ng-runtime/components/navigation/popover/fesm2020/index.mjs +10 -9
  69. app-ng-runtime/components/navigation/popover/fesm2020/index.mjs.map +1 -1
  70. app-ng-runtime/components/prefab/bundles/index.umd.js +1 -0
  71. app-ng-runtime/components/prefab/esm2020/prefab-container/prefab-container.directive.mjs +2 -1
  72. app-ng-runtime/components/prefab/fesm2015/index.mjs +1 -0
  73. app-ng-runtime/components/prefab/fesm2015/index.mjs.map +1 -1
  74. app-ng-runtime/components/prefab/fesm2020/index.mjs +1 -0
  75. app-ng-runtime/components/prefab/fesm2020/index.mjs.map +1 -1
  76. app-ng-runtime/core/bundles/index.umd.js +2 -1
  77. app-ng-runtime/core/esm2020/utils/utils.mjs +3 -2
  78. app-ng-runtime/core/fesm2015/index.mjs +2 -1
  79. app-ng-runtime/core/fesm2015/index.mjs.map +1 -1
  80. app-ng-runtime/core/fesm2020/index.mjs +2 -1
  81. app-ng-runtime/core/fesm2020/index.mjs.map +1 -1
  82. app-ng-runtime/package.json +1 -1
  83. app-ng-runtime/runtime/base/bundles/index.umd.js +2 -0
  84. app-ng-runtime/runtime/base/esm2020/components/base-page.component.mjs +3 -1
  85. app-ng-runtime/runtime/base/fesm2015/index.mjs +2 -0
  86. app-ng-runtime/runtime/base/fesm2015/index.mjs.map +1 -1
  87. app-ng-runtime/runtime/base/fesm2020/index.mjs +2 -0
  88. app-ng-runtime/runtime/base/fesm2020/index.mjs.map +1 -1
  89. app-ng-runtime/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
  90. app-ng-runtime/scripts/datatable/datatable.js +3 -3
  91. app-ng-runtime/variables/bundles/index.umd.js +13 -7
  92. app-ng-runtime/variables/esm2020/util/variable/variables.utils.mjs +14 -8
  93. app-ng-runtime/variables/fesm2015/index.mjs +13 -7
  94. app-ng-runtime/variables/fesm2015/index.mjs.map +1 -1
  95. app-ng-runtime/variables/fesm2020/index.mjs +13 -7
  96. app-ng-runtime/variables/fesm2020/index.mjs.map +1 -1
  97. app-ng-runtime/variables/util/variable/variables.utils.d.ts +1 -1
@@ -225,6 +225,7 @@ export class BaseDateTimeComponent extends BaseFormCustomComponent {
225
225
  */
226
226
  setActiveDateFocus(newDate, isMouseEvent) {
227
227
  this.setNextData(newDate);
228
+ this.clicked = false;
228
229
  const activeMonth = this.activeDate.getMonth();
229
230
  // check for keyboard event
230
231
  if (!isMouseEvent) {
@@ -288,11 +289,12 @@ export class BaseDateTimeComponent extends BaseFormCustomComponent {
288
289
  };
289
290
  }
290
291
  /**
291
- * This method sets the mouse events to Datepicker popup. These events are required when we navigate date picker through mouse.
292
+ * This method sets the mouse events to Datepicker popup. These events are required when we navigate date picker through mouse.
292
293
  */
293
294
  addDatepickerMouseEvents() {
294
- const datePickerHead = $(`.bs-datepicker-head`);
295
- datePickerHead.find(`.previous`).click((event) => {
295
+ $(".bs-datepicker-head .previous span").attr("aria-hidden", true);
296
+ $(".bs-datepicker-head .next span").attr("aria-hidden", true);
297
+ $(".bs-datepicker-head").on("click", ".previous", (event) => {
296
298
  this.next = this.getMonth(this.activeDate, 0);
297
299
  this.prev = this.getMonth(this.activeDate, -2);
298
300
  this.clicked = true;
@@ -301,12 +303,19 @@ export class BaseDateTimeComponent extends BaseFormCustomComponent {
301
303
  this.setFocusForDate(-1);
302
304
  }
303
305
  var prevMon = this.getMonth(this.activeDate, -1);
304
- $(`.bs-datepicker-head .previous`).prepend(`<p aria-hidden="false" class="sr-only">Changed to Previous Month, ${prevMon.fullMonth} and year ${prevMon.date.getFullYear()}</p>`);
305
306
  setTimeout(() => {
307
+ $(".bs-datepicker-head .previous span").attr("aria-hidden", true);
308
+ $(".bs-datepicker-head .next span").attr("aria-hidden", true);
309
+ $(".bs-datepicker-head .next").attr('aria-label', `Next Month, ${this.next.fullMonth} ${this.next.date.getFullYear()}`);
310
+ $(".bs-datepicker-head .previous").attr('aria-label', `Previous Month, ${this.prev.fullMonth} ${this.prev.date.getFullYear()}`);
311
+ $('.bs-datepicker-head .current').first().append(`<h2 aria-hidden="false" aria-atomic="true" aria-live='polite' class="sr-only">Changed to Previous Month, ${prevMon.fullMonth} and year ${prevMon.date.getFullYear()}</h2>`);
312
+ $('.bs-datepicker-head').on('focus', '.current', function () {
313
+ $('.bs-datepicker-head .current').find('h2').remove();
314
+ });
306
315
  $(`.bs-datepicker-head .previous`).focus();
307
316
  });
308
317
  });
309
- datePickerHead.find(`.next`).click((event) => {
318
+ $(".bs-datepicker-head").on("click", ".next", (event) => {
310
319
  this.next = this.getMonth(this.activeDate, 2);
311
320
  this.prev = this.getMonth(this.activeDate, 0);
312
321
  this.clicked = true;
@@ -315,28 +324,35 @@ export class BaseDateTimeComponent extends BaseFormCustomComponent {
315
324
  this.setFocusForDate(1);
316
325
  }
317
326
  var nextMon = this.getMonth(this.activeDate, 1);
318
- $(`.bs-datepicker-head .next`).prepend(`<p aria-hidden="false" class="sr-only">Changed to Next Month, ${nextMon.fullMonth} and year ${nextMon.date.getFullYear()}</p>`);
319
327
  setTimeout(() => {
328
+ $(".bs-datepicker-head .previous span").attr("aria-hidden", true);
329
+ $(".bs-datepicker-head .next span").attr("aria-hidden", true);
330
+ $(".bs-datepicker-head .next").attr('aria-label', `Next Month, ${this.next.fullMonth} ${this.next.date.getFullYear()}`);
331
+ $(".bs-datepicker-head .previous").attr('aria-label', `Previous Month, ${this.prev.fullMonth} ${this.prev.date.getFullYear()}`);
332
+ $('.bs-datepicker-head .current').first().append(`<h2 aria-hidden="false" aria-atomic="true" aria-live='polite' class="sr-only">Changed to Next Month, ${nextMon.fullMonth} and year ${nextMon.date.getFullYear()}</h2>`);
333
+ $('.bs-datepicker-head').on('focus', '.current', function () {
334
+ $('.bs-datepicker-head .current').find('h2').remove();
335
+ });
320
336
  $(`.bs-datepicker-head .next`).focus();
321
337
  });
322
338
  });
323
- datePickerHead.find(`.current`).click((event) => {
339
+ $(".bs-datepicker-head").on("click", ".current", (event) => {
324
340
  // check for original mouse click
325
341
  if (event.originalEvent) {
326
342
  this.setFocusForCurrentMonthOryear();
327
343
  }
328
344
  });
329
- $('.bs-datepicker-body, .bs-datepicker-action-buttons').click((event) => {
345
+ $('.bs-datepicker-body').on("click", ".bs-datepicker-action-buttons", (event) => {
330
346
  event.stopPropagation();
331
347
  // check for original mouse click
332
348
  if (event.originalEvent) {
333
349
  this.setFocusForMonthOrDay();
334
350
  }
335
351
  });
336
- if (!this.clicked) {
337
- datePickerHead.find('.next').attr('aria-label', `Next Month, ${this.next.fullMonth} ${this.next.date.getFullYear()}`);
338
- datePickerHead.find('.previous').attr('aria-label', `Previous Month, ${this.prev.fullMonth} ${this.prev.date.getFullYear()}`);
339
- }
352
+ // if(!this.clicked) {
353
+ $(".bs-datepicker-head .next").attr('aria-label', `Next Month, ${this.next.fullMonth} ${this.next.date.getFullYear()}`);
354
+ $(".bs-datepicker-head .previous").attr('aria-label', `Previous Month, ${this.prev.fullMonth} ${this.prev.date.getFullYear()}`);
355
+ // }
340
356
  }
341
357
  /**
342
358
  * This method sets focus for months/days depending on the loaded datepicker table
@@ -843,8 +859,14 @@ export class BaseDateTimeComponent extends BaseFormCustomComponent {
843
859
  return _.get(window, 'cordova.wavemaker.datePicker.selectDate');
844
860
  }
845
861
  }
846
- showDatePickerModal() {
862
+ showDatePickerModal(bsDataval) {
863
+ bsDataval ? this.activeDate = bsDataval : this.activeDate = new Date();
864
+ this.setNextData(this.activeDate);
847
865
  this.datetimepickerComponent.show();
866
+ setTimeout(() => {
867
+ this.addDatepickerMouseEvents();
868
+ this.setActiveDateFocus(this.activeDate, true);
869
+ }, 500);
848
870
  return;
849
871
  }
850
872
  blurDateInput(isPickerOpen) {
@@ -967,4 +989,4 @@ BaseDateTimeComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseD
967
989
  type: ViewChild,
968
990
  args: [DateTimePickerComponent]
969
991
  }] }); })();
970
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRlLXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2Vwb2NoL3NyYy9iYXNlLWRhdGUtdGltZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixRQUFRLEVBQWEsU0FBUyxFQUFFLFNBQVMsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUdqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakYsT0FBTyxFQUNILG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsS0FBSyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsT0FBTyxFQUNWLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBSWxGLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxV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QVc7UUFDUCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM3QixJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDN0M7UUFDRCxJQUFHLElBQUksQ0FBQyw4QkFBOEIsRUFBRTtZQUNwQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztTQUN6QztRQUVELEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU0sVUFBVTtRQUNiLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQU07UUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQzs7O3dFQWgrQmlCLHFCQUFxQjt1QkF3RDVCLG1CQUFtQjt1QkFDbkIsbUJBQW1CO3VCQUNuQix1QkFBdUI7Ozs7Ozs7dUZBMURoQixxQkFBcUI7Y0FEMUMsU0FBUztnRkF5RG9DLFVBQVU7a0JBQW5ELFNBQVM7bUJBQUMsbUJBQW1CO1lBQ1ksWUFBWTtrQkFBckQsU0FBUzttQkFBQyxtQkFBbUI7WUFDTSx1QkFBdUI7a0JBQTFELFNBQVM7bUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBJbmplY3RvciwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIERpcmVjdGl2ZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdG9yLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGdldExvY2FsZURheVBlcmlvZHMsIEZvcm1TdHlsZSwgVHJhbnNsYXRpb25XaWR0aCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBUaW1lcGlja2VyQ29tcG9uZW50LCBUaW1lcGlja2VyQ29uZmlnIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90aW1lcGlja2VyJztcblxuaW1wb3J0IHtcbiAgICBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgIGdldERhdGVPYmosXG4gICAgZ2V0Rm9ybWF0dGVkRGF0ZSxcbiAgICBnZXROYXRpdmVEYXRlT2JqZWN0LFxuICAgIGhhc0NvcmRvdmEsXG4gICAgaXNJb3MsXG4gICAgaXNNb2JpbGUsXG4gICAgaXNTdHJpbmcsXG4gICAgc2V0QXR0clxufSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7IGdldENvbnRhaW5lclRhcmdldENsYXNzLCBUb0RhdGVQaXBlIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyBCYXNlRm9ybUN1c3RvbUNvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2lucHV0JztcbmltcG9ydCB7IEJzRGF0ZXBpY2tlckNvbmZpZywgQnNEYXRlcGlja2VyRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcbmltcG9ydCB7IERhdGVUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXRpbWUvL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50JztcblxuZGVjbGFyZSBjb25zdCBtb21lbnQsIF8sICQ7XG5cbmNvbnN0IENVUlJFTlRfREFURSA9ICdDVVJSRU5UX0RBVEUnO1xuY29uc3QgbW9udGhzID0gWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ107XG5jb25zdCBEQVRFUElDS0VSX0RST1BET1dOX09QVElPTlMgPSB7XG4gICAgQlVUVE9OOiAnYnV0dG9uJyxcbiAgICBERUZBVUxUOiAnZGVmYXVsdCdcbn07XG5jb25zdCBEQVRBRU5UUllNT0RFX0RST1BET1dOX09QVElPTlMgPSB7XG4gICAgUElDS0VSOiAncGlja2VyJyxcbiAgICBERUZBVUxUOiAnZGVmYXVsdCdcbn07XG5cbi8vIFByb3ZpZGluZyBtZXJpZGlhbnMgdG8gdGhlIHRpbWVwaWNrZXIgYmFlc2Qgb24gc2VsZWN0ZWQgbG9jYWxlXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXBpY2tlckNvbmZpZyhpMThuU2VydmljZSk6IFRpbWVwaWNrZXJDb25maWcge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBUaW1lcGlja2VyQ29uZmlnKCksIHtcbiAgICAgICAgbWVyaWRpYW5zOiBnZXRMb2NhbGVEYXlQZXJpb2RzKGkxOG5TZXJ2aWNlLmdldFNlbGVjdGVkTG9jYWxlKCksIEZvcm1TdHlsZS5Gb3JtYXQsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpXG4gICAgfSk7XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VEYXRlVGltZUNvbXBvbmVudCBleHRlbmRzIEJhc2VGb3JtQ3VzdG9tQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBWYWxpZGF0b3Ige1xuICAgIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIHRhYmluZGV4OiBhbnk7XG4gICAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBwdWJsaWMgYXV0b2ZvY3VzOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcbiAgICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICBwdWJsaWMgc2hvcnRjdXRrZXk6IHN0cmluZztcbiAgICBwdWJsaWMgX3RyaWdnZXJlZEJ5VXNlcjogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBleGNsdWRlZGF5czogc3RyaW5nO1xuICAgIHB1YmxpYyBleGNsdWRlZERheXNUb0Rpc2FibGU6IEFycmF5PG51bWJlcj47XG4gICAgcHVibGljIGV4Y2x1ZGVkRGF0ZXNUb0Rpc2FibGU6IEFycmF5PERhdGU+O1xuICAgIHB1YmxpYyBleGNsdWRlZGF0ZXM7XG4gICAgcHVibGljIG91dHB1dGZvcm1hdDtcbiAgICBwdWJsaWMgbWluZGF0ZTtcbiAgICBwdWJsaWMgbWF4ZGF0ZTtcbiAgICBwdWJsaWMgZGF0YWVudHJ5bW9kZTtcbiAgICBwcm90ZWN0ZWQgYWN0aXZlRGF0ZTtcbiAgICBwcml2YXRlIGVsZW1lbnRTY29wZTtcbiAgICBwdWJsaWMgZGF0ZXBhdHRlcm47XG4gICAgcHVibGljIHRpbWVwYXR0ZXJuO1xuICAgIHByb3RlY3RlZCBzaG93c2Vjb25kczogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgaXNtZXJpZGlhbjogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgbWVyaWRpYW5zOiBhbnk7XG4gICAgcHJvdGVjdGVkIGRhdGVQaXBlO1xuICAgIHByb3RlY3RlZCBpMThuU2VydmljZTtcbiAgICBwdWJsaWMgaXNSZWFkT25seSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZExvY2FsZTogc3RyaW5nO1xuICAgIHB1YmxpYyBzZWxlY3Rmcm9tb3RoZXJtb250aDogYm9vbGVhbjtcbiAgICBwdWJsaWMgdG9kYXlidXR0b246IGJvb2xlYW47XG4gICAgcHVibGljIGNsZWFyYnV0dG9uOiBib29sZWFuO1xuICAgIHB1YmxpYyByZW1vdmVLZXl1cExpc3RlbmVyO1xuICAgIHB1YmxpYyBsb2FkTmF0aXZlRGF0ZUlucHV0O1xuICAgIHB1YmxpYyBzaG93Y3VzdG9tcGlja2VyO1xuICAgIHB1YmxpYyBuZXh0O1xuICAgIHB1YmxpYyBwcmV2O1xuICAgIHB1YmxpYyBjbGlja2VkID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgZGF0ZU5vdEluUmFuZ2U6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIHRpbWVOb3RJblJhbmdlOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBpbnZhbGlkRGF0ZVRpbWVGb3JtYXQ6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGRhdGVPblNob3dTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGNhbmNlbExvY2FsZUNoYW5nZVN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgZ2V0IHRpbWVab25lKCkgeyByZXR1cm4gdGhpcy5pbmouZ2V0KEFic3RyYWN0STE4blNlcnZpY2UpLmdldFRpbWV6b25lKHRoaXMpOyB9XG5cbiAgICBmb3JtYXRzQnlMb2NhbGUgPSB7J3RpbWV6b25lJzogJyd9O1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBwcm9wZXJ0eSB1c2VkIHRvIG1hcCB0aGUgY29udGFpbmVyQ2xhc3MsIHNob3dXZWVrTnVtYmVycyBldGMuLCB0byB0aGUgYnNEYXRlcGlja2VyXG4gICAgICovXG4gICAgcHVibGljIF9kYXRlT3B0aW9uczogQnNEYXRlcGlja2VyQ29uZmlnID0gbmV3IEJzRGF0ZXBpY2tlckNvbmZpZygpO1xuICAgIHByb3RlY3RlZCBic0RhdGVQaWNrZXJEaXJlY3RpdmU6IEJzRGF0ZXBpY2tlckRpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoQnNEcm9wZG93bkRpcmVjdGl2ZSkgcHJvdGVjdGVkIGJzRHJvcGRvd247XG4gICAgQFZpZXdDaGlsZChUaW1lcGlja2VyQ29tcG9uZW50KSBwcm90ZWN0ZWQgYnNUaW1lUGlja2VyO1xuICAgIEBWaWV3Q2hpbGQoRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQpIGRhdGV0aW1lcGlja2VyQ29tcG9uZW50O1xuICAgIHByaXZhdGUgdmFsaWRhdGVUeXBlOiBzdHJpbmc7XG4gICAgY29udGFpbmVyVGFyZ2V0OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBXSURHRVRfQ09ORklHKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRyk7XG4gICAgICAgIHRoaXMuaTE4blNlcnZpY2UgPSB0aGlzLmluai5nZXQoQWJzdHJhY3RJMThuU2VydmljZSk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlbG9hZCcpO1xuXG4gICAgICAgIHRoaXMuZGF0ZVBpcGUgPSB0aGlzLmluai5nZXQoVG9EYXRlUGlwZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlLmdldFNlbGVjdGVkTG9jYWxlKCk7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnRvZGF5UG9zaXRpb24gPSAnbGVmdCc7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLmNsZWFyUG9zaXRpb24gPSAncmlnaHQnO1xuICAgICAgICB0aGlzLm1lcmlkaWFucyA9IGdldExvY2FsZURheVBlcmlvZHModGhpcy5zZWxlY3RlZExvY2FsZSwgRm9ybVN0eWxlLkZvcm1hdCwgVHJhbnNsYXRpb25XaWR0aC5BYmJyZXZpYXRlZCk7XG4gICAgICAgIHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCA9IGlzTW9iaWxlKCkgJiYgIXRoaXMuc2hvd2N1c3RvbXBpY2tlcjtcblxuICAgICAgICB0aGlzLmNhbmNlbExvY2FsZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZ2V0QXBwSW5zdGFuY2UoKS5zdWJzY3JpYmUoXCJsb2NhbGUtY2hhbmdlZFwiLCAobG9jYWxlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaXBlLmRhdGVQaXBlLmxvY2FsZSA9IGxvY2FsZS5hbmd1bGFyO1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMudG9kYXlCdXR0b25MYWJlbCA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0TG9jYWxpemVkTWVzc2FnZSgnTEFCRUxfVE9EQVlfREFURScpO1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuY2xlYXJCdXR0b25MYWJlbCA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0TG9jYWxpemVkTWVzc2FnZSgnTEFCRUxfQ0xFQVJfREFURScpO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgZGVmYXVsdCAoaS5lIG9wZW4gZGF0ZSBwaWNrZXIgb24gaW5wdXQgY2xpY2spXG4gICAgICogQHBhcmFtMSBkcm9wZG93bnZhbHVlLCB1c2VyIHNlbGVjdGVkIHZhbHVlIChieSBkZWZhdWx0IGRhdGVwaWNrZXIgb3BlbnMgb24gaW5wdXQgY2xpY2spXG4gICAgICogKiovXG4gICAgcHJvdGVjdGVkIGlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQoZHJvcGRvd252YWx1ZSkge1xuICAgICAgICByZXR1cm4gZHJvcGRvd252YWx1ZSA9PT0gREFURVBJQ0tFUl9EUk9QRE9XTl9PUFRJT05TLkRFRkFVTFQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBkZWZhdWx0IChpLmUgRGF0YSBlbnRyeSBjYW4gYmUgZG9uZSBlaXRoZXIgYnkgc2VsZWN0aW5nIGZyb20gdGhlIERhdGUvRGF0ZVRpbWUvVGltZSBQaWNrZXIgb3IgYnkgZW50ZXJpbmcgIG1hbnVhbGx5IHVzaW5nIHRoZSBrZXlib2FyZC4gKVxuICAgICAqIEBwYXJhbTEgZHJvcGRvd252YWx1ZSwgdXNlciBzZWxlY3RlZCB2YWx1ZVxuICAgICAqICoqL1xuICAgIHByb3RlY3RlZCBpc0RhdGFFbnRyeU1vZGVFbmFibGVkT25JbnB1dChkcm9wZG93bnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkcm9wZG93bnZhbHVlID09PSBEQVRBRU5UUllNT0RFX0RST1BET1dOX09QVElPTlMuREVGQVVMVDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzaG93IHZhbGlkYXRpb24gbWVzc2FnZSBkZXBlbmRpbmcgb24gdGhlIGlzTmF0aXZlUGlja2VyIGZsYWcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzaG93VmFsaWRhdGlvbigkZXZlbnQsIGRpc3BsYXlWYWx1ZSwgaXNOYXRpdmVQaWNrZXIsIG1zZykge1xuICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignbWluIG1heCBkYXRlIHZhbGlkYXRpb24gZmFpbGVkICcsIG1zZyk7XG4gICAgICAgICAgICByZXR1cm4gJCgkZXZlbnQudGFyZ2V0KS52YWwoZGlzcGxheVZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0RGlzcGxheUlucHV0KCkge1xuICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmRpc3BsYXktaW5wdXQnKS52YWwoJycpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgaWYgKHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGludmFsaWREYXRlVGltZUZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmRhdGVOb3RJblJhbmdlKSAmJiB0aGlzLmRhdGVOb3RJblJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGVOb3RJblJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLnRpbWVOb3RJblJhbmdlKSAmJiB0aGlzLnRpbWVOb3RJblJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRpbWVOb3RJblJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8qIFdNUy0xODI2OSB8IEV4dGVuZGluZyB0aGUgZXhpc3RpbmcgdmFsaWRhdGlvbiBmb3IgJ3JlcXVpcmVkJyAqL1xuICAgICAgICBpZiAodGhpc1snc2hvdyddICYmIHRoaXNbJ3JlcXVpcmVkJ10pIHtcbiAgICAgICAgICAgIHJldHVybiAhIWMudmFsdWUgPyBudWxsIDogeyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJyc7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gdmFsaWRhdGUgZGF0ZSBwYXR0ZXJuIGFuZCB0aW1lIHBhdHRlcm5cbiAgICAgKiBJZiB1c2VyIHNlbGVjdHMgb25lIHBhdHRlcm4gaW4gZGVzaWduIHRpbWUgYW5kIGlmIGhlIHRyaWVzIHRvIGVudGVyIHRoZSBkYXRlIGluIGFub3RoZXIgcGF0dGVybiB0aGVuIHRoZSBkZXZpY2UgaXMgdGhyb3dpbmcgYW4gZXJyb3JcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZm9ybWF0VmFsaWRhdGlvbihuZXdWYWwsIGlucHV0VmFsLCBpc05hdGl2ZVBpY2tlcj86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMuZGF0ZXBhdHRlcm4gfHwgdGhpcy50aW1lcGF0dGVybjtcbiAgICAgICAgY29uc3QgdGltZVpvbmUgPSB0aGlzLnRpbWVab25lO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBuZXdWYWwsIHBhdHRlcm4sIHRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKTtcbiAgICAgICAgaW5wdXRWYWwgPSBpbnB1dFZhbC50cmltKCk7XG4gICAgICAgIGlmIChpbnB1dFZhbCkge1xuICAgICAgICAgICAgaWYgKHBhdHRlcm4gPT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfLmlzTmFOKGlucHV0VmFsKSAmJiBfLnBhcnNlSW50KGlucHV0VmFsKSAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ2luY29ycmVjdGZvcm1hdCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9ybWF0IHRoZSBkYXRlIHZhbHVlIG9ubHkgd2hlbiBpbnB1dFZhbCBpcyBvYnRhaW5lZCBmcm9tICRldmVudC50YXJnZXQudmFsdWUsIGFzIHRoZSBmb3JtYXQgZG9lc250IG1hdGNoLlxuICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbCA9IGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgaW5wdXRWYWwsIHBhdHRlcm4sIHRpbWVab25lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0VmFsICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnaW5jb3JyZWN0Zm9ybWF0JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHZhbGlkYXRlIG1pbiBkYXRlLCBtYXggZGF0ZSwgZXhjbHVkZSBkYXRlcyBhbmQgZXhjbHVkZSBkYXlzXG4gICAgICogSW4gbW9iaWxlIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIGFuIGFsZXJ0LlxuICAgICAqIEluIHdlYiBpZiBpbnZhbGlkIGRhdGVzIGFyZSBlbnRlcmVkLCBkZXZpY2UgaXMgc2hvd2luZyB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1pbkRhdGVNYXhEYXRlVmFsaWRhdGlvbk9uSW5wdXQobmV3VmFsLCAkZXZlbnQ/OiBFdmVudCwgZGlzcGxheVZhbHVlPzogc3RyaW5nLCBpc05hdGl2ZVBpY2tlcj86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVRpbWVWYWwgPSBuZXdWYWw7XG4gICAgICAgICAgICBuZXdWYWwgPSBtb21lbnQobmV3VmFsKS5zdGFydE9mKCdkYXknKS50b0RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbkRhdGUgPSBtb21lbnQoZ2V0RGF0ZU9iaih0aGlzLm1pbmRhdGUpKS5zdGFydE9mKCdkYXknKS50b0RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IG1heERhdGUgPSBtb21lbnQoZ2V0RGF0ZU9iaih0aGlzLm1heGRhdGUpKS5zdGFydE9mKCdkYXknKS50b0RhdGUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1pbmRhdGUgJiYgbmV3VmFsIDwgbWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGAke3RoaXMuYXBwTG9jYWxlLkxBQkVMX01JTkRBVEVfVkFMSURBVElPTl9NRVNTQUdFfSAke3RoaXMubWluZGF0ZX0uYDtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIgJiYgZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBtaW5EYXRlLCB0aGlzLmRhdGVwYXR0ZXJuLCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKSA9PT0gZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCRldmVudC50YXJnZXQpLnZhbChkaXNwbGF5VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVOb3RJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdtaW5kYXRlJztcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93VmFsaWRhdGlvbigkZXZlbnQsIGRpc3BsYXlWYWx1ZSwgaXNOYXRpdmVQaWNrZXIsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhkYXRlICYmIG5ld1ZhbCA+IG1heERhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBgJHt0aGlzLmFwcExvY2FsZS5MQUJFTF9NQVhEQVRFX1ZBTElEQVRJT05fTUVTU0FHRX0gJHt0aGlzLm1heGRhdGV9LmA7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmF0aXZlUGlja2VyICYmIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbWF4RGF0ZSwgdGhpcy5kYXRlcGF0dGVybiwgdGhpcy50aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcykgPT09IGRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgkZXZlbnQudGFyZ2V0KS52YWwoZGlzcGxheVZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlTm90SW5SYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnbWF4ZGF0ZSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1ZhbGlkYXRpb24oJGV2ZW50LCBkaXNwbGF5VmFsdWUsIGlzTmF0aXZlUGlja2VyLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZWRhdGVzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4Y2x1ZGVEYXRlc0FycmF5O1xuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyh0aGlzLmV4Y2x1ZGVkYXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZURhdGVzQXJyYXkgPSBfLnNwbGl0KHRoaXMuZXhjbHVkZWRhdGVzLCAnLCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVEYXRlc0FycmF5ID0gdGhpcy5leGNsdWRlZGF0ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVEYXRlc0FycmF5ID0gZXhjbHVkZURhdGVzQXJyYXkubWFwKGQgPT4gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBkLCB0aGlzLmRhdGVwYXR0ZXJuLCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKSk7XG4gICAgICAgICAgICAgICAgaWYgKGV4Y2x1ZGVEYXRlc0FycmF5LmluZGV4T2YoZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBkYXRlVGltZVZhbCwgdGhpcy5kYXRlcGF0dGVybiwgdGhpcy50aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcykpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlTm90SW5SYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ2V4Y2x1ZGVkYXRlcyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZWRheXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGNsdWRlRGF5c0FycmF5ID0gXy5zcGxpdCh0aGlzLmV4Y2x1ZGVkYXlzLCAnLCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9IF8uZ2V0KGRhdGVUaW1lVmFsLCAnZ2V0RGF5JykgPyBkYXRlVGltZVZhbC5nZXREYXkoKSA6IGRhdGVUaW1lVmFsO1xuICAgICAgICAgICAgICAgIGlmIChleGNsdWRlRGF5c0FycmF5LmluZGV4T2YoZGF5LnRvU3RyaW5nKCkpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlTm90SW5SYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ2V4Y2x1ZGVkYXlzJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmF0aXZlUGlja2VyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVOb3RJblJhbmdlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gaGlnaGxpZ2h0IHRoZSBjdXJyZW50IGRhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaGlnaHRsaWdodFRvZGF5KCkge1xuICAgICAgICBjb25zdCB0b0RheSA9IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpLnRvU3RyaW5nKCk7XG4gICAgICAgIF8uZmlsdGVyKCQoYHNwYW46Y29udGFpbnMoJHt0b0RheX0pYCkubm90KCcuaXMtb3RoZXItbW9udGgnKSwgKG9iaikgPT4ge1xuICAgICAgICAgICAgaWYgKCQob2JqKS50ZXh0KCkgPT09IHRvRGF5KSB7XG4gICAgICAgICAgICAgICAgJChvYmopLmFkZENsYXNzKCdjdXJyZW50LWRhdGUgdGV4dC1pbmZvJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZmluZCB0aGUgbmV3IGRhdGUgaXMgZnJvbSBhbm90aGVyIHllYXIgb3Igbm90XG4gICAgICogQHBhcmFtIG5ld0RhdGUgLSBuZXdseSBzZWxlY3RlZCBkYXRlIHZhbHVlXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc090aGVyeWVhcihuZXdEYXRlKSB7XG4gICAgICAgIHJldHVybiAobmV3RGF0ZS5nZXRNb250aCgpID09PSAwICYmIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpID09PSAxMSkgfHwgKG5ld0RhdGUuZ2V0TW9udGgoKSA9PT0gMTEgJiYgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkgPT09IDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IGZvY3VzIGZvciBhY3RpdmUgZGF5XG4gICAgICogQHBhcmFtIG5ld0RhdGUgLSBuZXdseSBzZWxlY3RlZCBkYXRlIHZhbHVlXG4gICAgICogQHBhcmFtIGlzTW91c2VFdmVudCAtIGJvb2xlYW4gdmFsdWUgcmVwcmVzZW50cyB0aGUgZXZlbnQgaXMgbW91c2UgZXZlbnQvIGtleWJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRBY3RpdmVEYXRlRm9jdXMobmV3RGF0ZSwgaXNNb3VzZUV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldE5leHREYXRhKG5ld0RhdGUpO1xuICAgICAgICBjb25zdCBhY3RpdmVNb250aCA9IHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAvLyBjaGVjayBmb3Iga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgaWYgKCFpc01vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChuZXdEYXRlLmdldE1vbnRoKCkgPCBhY3RpdmVNb250aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPdGhlcnllYXIobmV3RGF0ZSkgPyB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCduZXh0JywgJ2RheXMnKSA6IHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ3ByZXZpb3VzJywgJ2RheXMnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3RGF0ZS5nZXRNb250aCgpID4gYWN0aXZlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3RoZXJ5ZWFyKG5ld0RhdGUpID8gdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcigncHJldmlvdXMnLCAnZGF5cycpIDogdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcignbmV4dCcsICdkYXlzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXkgPSBuZXdEYXRlLmdldERhdGUoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgXy5maWx0ZXIoJChgc3Bhbjpjb250YWlucygke25ld0RheX0pYCkubm90KCcuaXMtb3RoZXItbW9udGgnKSwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgkKG9iaikudGV4dCgpID09PSBuZXdEYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQob2JqKS5oYXNDbGFzcygnc2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAkKG9iaikucGFyZW50KCkuYXR0cignYXJpYS1zZWxlY3RlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgJChvYmopLmF0dHIoJ2FyaWEtbGFiZWwnLCBtb21lbnQobmV3RGF0ZSkuZm9ybWF0KCdkZGRkLCBNTU1NIERvIFlZWVknKSk7XG4gICAgICAgICAgICAgICAgICAgICQoJ1tic2RhdGVwaWNrZXJkYXlkZWNvcmF0b3JdJykubm90KCcuaXMtb3RoZXItbW9udGgnKS5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICAgICAgICAgICAgICAkKG9iaikuYXR0cigndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgICAgICAgICAgICAkKG9iaikuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChuZXdEYXRlLmdldE1vbnRoKCkgPT09IG5ldyBEYXRlKCkuZ2V0TW9udGgoKSAmJiBuZXdEYXRlLmdldEZ1bGxZZWFyKCkgPT09IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaHRsaWdodFRvZGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb2FkIG90aGVyIG1vbnRoIGRheXMgb3Igb3RoZXIgbW9udGggb3Igb3RoZXIgeWVhclxuICAgICAqIEBwYXJhbSBidG5DbGFzcyAtIGNsYXNzKHByZXZpb3VzL25leHQpIG9mIHRoZSBidXR0b24gd2hpY2ggd2UgaGF2ZSB0byBjbGlja1xuICAgICAqIEBwYXJhbSB0aW1lUGVyaW9kIC0gU3RyaW5nIHZhbHVlIGRlY2lkZXMgdG8gbG9hZCBvdGhlciBtb250aCBkYXlzIG9yIG90aGVyIG1vbnRoIG9yIG90aGVyIHllYXJcbiAgICAgKi9cbiAgICBwcml2YXRlIGdvVG9PdGhlck1vbnRoT3J5ZWFyKGJ0bkNsYXNzLCB0aW1lUGVyaW9kKSB7XG4gICAgICAgIGNvbnN0ICRub2RlID0gJChgLmJzLWRhdGVwaWNrZXItaGVhZCAuJHtidG5DbGFzc31gKTtcbiAgICAgICAgaWYgKCRub2RlLmF0dHIoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAkbm9kZS50cmlnZ2VyKCdjbGljaycpO1xuICAgICAgICBpZiAodGltZVBlcmlvZCA9PT0gJ2RheXMnKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGltZVBlcmlvZCA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9udGhzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGltZVBlcmlvZCA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRZZWFycygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb250aChkYXRlLCBpbmMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1vbnRoID0gbmV3IERhdGUoZGF0ZSk7XG5cbiAgICAgICAgbGV0IG1vbnRoID0gY3VycmVudE1vbnRoLmdldE1vbnRoKCk7XG4gICAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50TW9udGguZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICBtb250aCArPSBpbmM7XG5cbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoKTtcblxuICAgICAgICBjb25zdCBmdWxsTW9udGggPSBuZXdEYXRlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdsb25nJyB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0ZTogbmV3RGF0ZSxcbiAgICAgICAgICAgIGZ1bGxNb250aDogZnVsbE1vbnRoXG4gICAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG1vdXNlIGV2ZW50cyB0byBEYXRlcGlja2VyIHBvcHVwLiBUaGVzZSBldmVudHMgYXJlIHJlcXVpcmVkIHdoZW4gd2UgbmF2aWdhdGUgZGF0ZSBwaWNrZXIgdGhyb3VnaCBtb3VzZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZERhdGVwaWNrZXJNb3VzZUV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckhlYWQgPSAkKGAuYnMtZGF0ZXBpY2tlci1oZWFkYCk7XG4gICAgICAgIGRhdGVQaWNrZXJIZWFkLmZpbmQoYC5wcmV2aW91c2ApLmNsaWNrKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDApO1xuICAgICAgICAgICAgdGhpcy5wcmV2ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIC0yKTtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igb3JpZ2luYWwgbW91c2UgY2xpY2tcbiAgICAgICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1c0ZvckRhdGUoLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHByZXZNb24gPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItaGVhZCAucHJldmlvdXNgKS5wcmVwZW5kKGA8cCBhcmlhLWhpZGRlbj1cImZhbHNlXCIgY2xhc3M9XCJzci1vbmx5XCI+Q2hhbmdlZCB0byBQcmV2aW91cyBNb250aCwgJHtwcmV2TW9uLmZ1bGxNb250aH0gYW5kIHllYXIgJHtwcmV2TW9uLmRhdGUuZ2V0RnVsbFllYXIoKX08L3A+YCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItaGVhZCAucHJldmlvdXNgKS5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGVQaWNrZXJIZWFkLmZpbmQoYC5uZXh0YCkuY2xpY2soKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5leHQgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMik7XG4gICAgICAgICAgICB0aGlzLnByZXYgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMCk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JEYXRlKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5leHRNb24gPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMSk7XG4gICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1oZWFkIC5uZXh0YCkucHJlcGVuZChgPHAgYXJpYS1oaWRkZW49XCJmYWxzZVwiIGNsYXNzPVwic3Itb25seVwiPkNoYW5nZWQgdG8gTmV4dCBNb250aCwgJHtuZXh0TW9uLmZ1bGxNb250aH0gYW5kIHllYXIgJHtuZXh0TW9uLmRhdGUuZ2V0RnVsbFllYXIoKX08L3A+YCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1oZWFkIC5uZXh0YCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBkYXRlUGlja2VySGVhZC5maW5kKGAuY3VycmVudGApLmNsaWNrKChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JDdXJyZW50TW9udGhPcnllYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQoJy5icy1kYXRlcGlja2VyLWJvZHksIC5icy1kYXRlcGlja2VyLWFjdGlvbi1idXR0b25zJykuY2xpY2soKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcmlnaW5hbCBtb3VzZSBjbGlja1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzRm9yTW9udGhPckRheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYoIXRoaXMuY2xpY2tlZCkge1xuICAgICAgICAgICAgZGF0ZVBpY2tlckhlYWQuZmluZCgnLm5leHQnKS5hdHRyKCdhcmlhLWxhYmVsJywgYE5leHQgTW9udGgsICR7dGhpcy5uZXh0LmZ1bGxNb250aH0gJHt0aGlzLm5leHQuZGF0ZS5nZXRGdWxsWWVhcigpfWApO1xuICAgICAgICAgICAgZGF0ZVBpY2tlckhlYWQuZmluZCgnLnByZXZpb3VzJykuYXR0cignYXJpYS1sYWJlbCcsIGBQcmV2aW91cyBNb250aCwgJHt0aGlzLnByZXYuZnVsbE1vbnRofSAke3RoaXMucHJldi5kYXRlLmdldEZ1bGxZZWFyKCl9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGZvY3VzIGZvciBtb250aHMvZGF5cyBkZXBlbmRpbmcgb24gdGhlIGxvYWRlZCBkYXRlcGlja2VyIHRhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRGb2N1c0Zvck1vbnRoT3JEYXkoKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU1vbnRoT3JZZWFyID0gJChgLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudGApLmZpcnN0KCkudGV4dCgpO1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChfLnBhcnNlSW50KGFjdGl2ZU1vbnRoT3JZZWFyKSAhPT0gdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShfLnBhcnNlSW50KGFjdGl2ZU1vbnRoT3JZZWFyKSwgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLmRheXMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdNb250aCA9IG1vbnRocy5pbmRleE9mKGFjdGl2ZU1vbnRoT3JZZWFyKTtcbiAgICAgICAgICAgIGlmIChuZXdNb250aCAhPT0gdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIG5ld01vbnRoLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBmb2N1cyBmb3IgbW9udGhzL3llYXJzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yQ3VycmVudE1vbnRoT3J5ZWFyKCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKHRoaXMuYWN0aXZlRGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0ZVBpY2tlckJvZHkuZmluZCgndGFibGUueWVhcnMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRZZWFycygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXModGhpcy5hY3RpdmVEYXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgZm9jdXMgZm9yIG1vbnRocy95ZWFycy9kYXlzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yRGF0ZShjb3VudCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpICsgY291bnQsIDAsIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzIHNwYW4nKS5maXJzdCgpLnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShfLnBhcnNlSW50KHN0YXJ0WWVhciksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpLCB0aGlzLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLmRheXMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpICsgY291bnQsIDEpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3RGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkZCBrZXlib2FyZCBldmVudHMgd2hpbGUgb3BlbmluZyB0aGUgZGF0ZSBwaWNrZXJcbiAgICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgZGF0ZS9kYXRldGltZSB3aWRnZXRcbiAgICAgKiBAcGFyYW0gaXNEYXRlVGltZSAtIGJvb2xlYW4gdmFsdWUgcmVwcmVzZW50cyB0aGUgbG9hZGVkIHdpZGdldCBpcyBkYXRlIG9yIGRhdGV0aW1lXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZERhdGVwaWNrZXJLZXlib2FyZEV2ZW50cyhzY29wZSwgaXNEYXRlVGltZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnRTY29wZSA9IHNjb3BlO1xuICAgICAgICBjb25zdCBkYXRlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7c2NvcGUuZGF0ZUNvbnRhaW5lckNsc31gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgc2V0QXR0cihkYXRlQ29udGFpbmVyLCAndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICBkYXRlQ29udGFpbmVyLm9ua2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFNoaWZ0K1RhYiBrZXkgb3IgVGFiIGtleSBvciBlc2NhcGVcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUuaGlkZURhdGVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlJbnB1dEVsZW0gPSB0aGlzLmVsZW1lbnRTY29wZS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBkaXNwbGF5SW5wdXRFbGVtLmZvY3VzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgc2V0TmV4dERhdGEobmV4dERhdGUpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aChuZXh0RGF0ZSwgMSk7XG4gICAgICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgobmV4dERhdGUsIC0xKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGFiaW5kZXgsIGtleWJvcmQgYW5kIG1vdXNlIGV2ZW50cyBmb3IgZGF5c1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZERheXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJCgnW2JzZGF0ZXBpY2tlcmRheWRlY29yYXRvcl0nKS5ub3QoJy5pcy1vdGhlci1tb250aCcpLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmNsaWNrZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDEpO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAtMSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yRGF5cygpO1xuICAgICAgICAgICAgdGhpcy5hZGREYXRlcGlja2VyTW91c2VFdmVudHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBrZXlib2FyZCBldmVudHMgZm9yIGRheXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZEtleUJvYXJkRXZlbnRzRm9yRGF5cygpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckJvZHkgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jyk7XG4gICAgICAgIGRhdGVQaWNrZXJCb2R5LmtleWRvd24oKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3ZGF0ZTtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCs3LCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xpY2tpbmcgb24gdGFibGUgaGVhZGVyIG1vbnRoIG5hbWUgdG8gbG9hZCBsaXN0IG9mIG1vbnRoc1xuICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnQnKS5maXJzdCgpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTW9udGhzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC03LCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdQYWdlVXAnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC0xLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnUGFnZURvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuaGFzQ2xhc3MoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUuaGlkZURhdGVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlJbnB1dEVsZW0gPSB0aGlzLmVsZW1lbnRTY29wZS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBkaXNwbGF5SW5wdXRFbGVtLmZvY3VzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb2N1c0JsdXJEYXRlUGlja2VySGVhZEJ1dHRvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzQmx1ckRhdGVQaWNrZXJIZWFkQnV0dG9ucygpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckhlYWRCdXR0b24gPSAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIGJ1dHRvbicpO1xuICAgICAgICBkYXRlUGlja2VySGVhZEJ1dHRvbi5vbignZm9jdXMnLCBmdW5jdGlvbigpIHsgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQtY29sb3InLCAnIzlBQTBBMycpOyB9KTtcbiAgICAgICAgZGF0ZVBpY2tlckhlYWRCdXR0b24ub24oJ2JsdXInLCBmdW5jdGlvbigpIHsgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQtY29sb3InLCAnJyk7IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRkIHRhYmluZGV4LCBrZXlib3JkIGFuZCBtb3VzZSBldmVudHMgZm9yIG1vbnRoc1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZE1vbnRocygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yTW9udGhzKCk7XG4gICAgICAgICAgICB0aGlzLmFkZERhdGVwaWNrZXJNb3VzZUV2ZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGtleWJvYXJkIGV2ZW50cyBmb3IgbW9udGhzXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRLZXlCb2FyZEV2ZW50c0Zvck1vbnRocygpIHtcbiAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItYm9keScpLmtleWRvd24oKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3ZGF0ZTtcbiAgICAgICAgICAgIGlmICgoZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICBpZiAoJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5wYXJlbnQoKS5oYXNDbGFzcygnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3RGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGlja2luZyBvbiB0YWJsZSBoZWFkZXIgeWVhciB0byBsb2FkIGxpc3Qgb2YgeWVhcnNcbiAgICAgICAgICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50JykuZmlyc3QoKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFllYXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXModGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMywgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMywgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoKzEsICdtb250aCcpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9jdXNCbHVyRGF0ZVBpY2tlckhlYWRCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGFiaW5kZXgsIGtleWJvcmQgYW5kIG1vdXNlIGV2ZW50cyBmb3IgeWVhcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWRZZWFycygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yWWVhcnMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlck1vdXNlRXZlbnRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IGZvY3VzIGZvciBhY3RpdmUgbW9udGhcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEFjdGl2ZU1vbnRoRm9jdXMobmV3RGF0ZSwgaXNNb291c2VFdmVudD86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXROZXh0RGF0YShuZXdEYXRlKTtcbiAgICAgICAgY29uc3QgbmV3TW9udGggPSBtb250aHNbbmV3RGF0ZS5nZXRNb250aCgpXTtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGtleWJvYXJkIGV2ZW50XG4gICAgICAgIGlmICghaXNNb291c2VFdmVudCkge1xuICAgICAgICAgICAgaWYgKG5ld0RhdGUuZ2V0RnVsbFllYXIoKSA8IHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcigncHJldmlvdXMnLCAnbW9udGgnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3RGF0ZS5nZXRGdWxsWWVhcigpID4gdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCduZXh0JywgJ21vbnRoJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLm1vbnRocyBzcGFuYCkuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUubW9udGhzIHNwYW46Y29udGFpbnMoJHtuZXdNb250aH0pYCkuYXR0cigndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS5tb250aHMgc3Bhbjpjb250YWlucygke25ld01vbnRofSlgKS5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBrZXlib2FyZCBldmVudHMgZm9yIHllYXJzXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRLZXlCb2FyZEV2ZW50c0ZvclllYXJzKCkge1xuICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jykua2V5ZG93bigoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdkYXRlO1xuICAgICAgICAgICAgaWYgKChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgICAgIGlmICgkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLnBhcmVudCgpLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCs0LCAneWVhcicpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtNCwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoLTEsICd5ZWFyJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMSwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9jdXNCbHVyRGF0ZVBpY2tlckhlYWRCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXQgZm9jdXMgZm9yIGFjdGl2ZSB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRBY3RpdmVZZWFyRm9jdXMobmV3RGF0ZSwgaXNNb3VzZUV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBuZXdZZWFyID0gbmV3RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyWWVhcnMgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLnllYXJzIHNwYW4nKTtcbiAgICAgICAgY29uc3Qgc3RhcnRZZWFyID0gZGF0ZVBpY2tlclllYXJzLmZpcnN0KCkudGV4dCgpO1xuICAgICAgICBjb25zdCBlbmRZZWFyID0gZGF0ZVBpY2tlclllYXJzLmxhc3QoKS50ZXh0KCk7XG4gICAgICAgIC8vIGNoZWNrIGZvciBrZXlib2FyZCBldmVudFxuICAgICAgICBpZiAoIWlzTW91c2VFdmVudCkge1xuICAgICAgICAgICAgaWYgKG5ld0RhdGUuZ2V0RnVsbFllYXIoKSA8IF8ucGFyc2VJbnQoc3RhcnRZZWFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ3ByZXZpb3VzJywgJ3llYXInKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3RGF0ZS5nZXRGdWxsWWVhcigpID4gXy5wYXJzZUludChlbmRZZWFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ25leHQnLCAneWVhcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS55ZWFycyBzcGFuYCkuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUueWVhcnMgc3Bhbjpjb250YWlucygke25ld1llYXJ9KWApLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUueWVhcnMgc3Bhbjpjb250YWlucygke25ld1llYXJ9KWApLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXdEYXRlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGZvY3VzIGZvciB0aW1lcGlja2VyIGZpcnN0IGlucHV0IGZpZWxkKGhvdXJzIGZpZWxkKSB3aGlsZSBvcGVuaW5nIHRpbWUgcGlja2VyXG4gICAgICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHRpbWUgcGlja2VyIHdpZGdldFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb2N1c1RpbWVQaWNrZXJQb3BvdmVyKHNjb3BlKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFNjb3BlID0gc2NvcGU7XG4gICAgICAgIC8vIHNldFRpbWVvdXQgaXMgdXNlZCBzbyB0aGF0IGJ5IHRoZW4gdGltZSBpbnB1dCBoYXMgdGhlIHVwZGF0ZWQgdmFsdWUuIGZvY3VzIGlzIHNldHRpbmcgYmFjayB0byB0aGUgaW5wdXQgZmllbGRcbiAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoJ3RpbWVwaWNrZXIgLmZvcm0tZ3JvdXAnKS5maXJzdCgpLmZpbmQoJz4gaW5wdXQuZm9ybS1jb250cm9sJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUga2V5Ym9hcmQgZXZlbnRzIHRvIFRpbWVwaWNrZXIgcG9wdXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYmluZFRpbWVQaWNrZXJLZXlib2FyZEV2ZW50cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdGltZXBpY2tlclBvcHVwID0gJCgnYm9keScpLmZpbmQoJz4gYnMtZHJvcGRvd24tY29udGFpbmVyIHRpbWVwaWNrZXInKTtcbiAgICAgICAgICAgICR0aW1lcGlja2VyUG9wdXAuYXR0cigndGFiaW5kZXgnLCAwKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRzT25UaW1lUGlja2VyKCR0aW1lcGlja2VyUG9wdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9jdXNPbklucHV0RWwoKSB7XG4gICAgICAgIGlmICgkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnLmNhcHRpb24tZmxvYXRpbmcnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmFwcC10ZXh0Ym94JykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBkYXRlIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqIEByZXR1cm5zIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZGF0ZSBpcyB2YWxpZCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWREYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB0aW1lIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqL1xuICAgIHByaXZhdGUgdGltZUZvcm1hdFZhbGlkYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGVudGVyZWREYXRlID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJ2lucHV0JykudmFsKCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGdldE5hdGl2ZURhdGVPYmplY3QoZW50ZXJlZERhdGUsIHttZXJpZGlhbnM6IHRoaXMubWVyaWRpYW5zLCBwYXR0ZXJuOiB0aGlzLmRhdGVwYXR0ZXJufSk7XG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRWYWxpZGF0aW9uKG5ld1ZhbCwgZW50ZXJlZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lVmFsdWUoZWwsIHZhbHVlLCBmaWVsZE5hbWUpIHtcbiAgICAgICAgbGV0IG1pbkVsID0gZWwuZmluZCgnaW5wdXRbYXJpYS1sYWJlbD1cIm1pbnV0ZXNcIl0nKTtcbiAgICAgICAgbGV0IHNlY0VsID0gZWwuZmluZCgnaW5wdXRbYXJpYS1sYWJlbD1cInNlY29uZHNcIl0nKTtcbiAgICAgICAgbWluRWwudmFsdWUgPSBzZWNFbC52YWx1ZSA9ICcwMCc7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPT09ICdtaW51dGVzJyA/IHRoaXMuYnNUaW1lUGlja2VyLnVwZGF0ZU1pbnV0ZXMobWluRWwpIDogdGhpcy5ic1RpbWVQaWNrZXIudXBkYXRlU2Vjb25kcyhzZWNFbCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGROYW1lID09PSAnbWludXRlcycgPyB0aGlzLmJzVGltZVBpY2tlci51cGRhdGVNaW51dGVzKG1pbkVsKSA6IHRoaXMuYnNUaW1lUGlja2VyLnVwZGF0ZVNlY29uZHMoc2VjRWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBldmVudHMgdG8gZ2l2ZW4gZWxlbWVudFxuICAgICAqIEBwYXJhbSAkZWwgLSBlbGVtZW50IG9uIHdoaWNoIHRoZSBldmVudCBpcyBhZGRlZFxuICAgICAqL1xuICAgIHByaXZhdGUgYWRkRXZlbnRzT25UaW1lUGlja2VyKCRlbDogSlF1ZXJ5KSB7XG4gICAgICAgIGNvbnN0IGlucHV0RmllbGRzID0gJGVsLmZpbmQoJy5icy10aW1lcGlja2VyLWZpZWxkJyk7XG4gICAgICAgIC8vIFdNUy0xOTM4MjogdXBkYXRlIG1pbnV0ZXMgYW5kIHNlY29uZHMgdG8gMCB3aGVuIHdlIGVudGVyIGhvdXIgdmFsdWVcbiAgICAgICAgaW5wdXRGaWVsZHMuZmlyc3QoKS5vbigna2V5dXAnLCBldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaG91clZhbHVlID0gKGV2dC50YXJnZXQgYXMgYW55KS52YWx1ZTtcbiAgICAgICAgICAgIF8uZm9yRWFjaChpbnB1dEZpZWxkcywgKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldnQudGFyZ2V0ICE9PSBmaWVsZCAmJiBmaWVsZC52YWx1ZSA9PT0gJycgJiYgaG91clZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBpbmRleCA9PT0gMSA/ICdtaW51dGVzJyA6ICdzZWNvbmRzJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUaW1lVmFsdWUoJGVsLCBob3VyVmFsdWUsIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlbW92ZUtleXVwTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBpbnB1dEZpZWxkcy5maXJzdCgpLm9mZigna2V5dXAnKTtcbiAgICAgICAgfTtcbiAgICAgICAgJGVsLm9uKCdrZXlkb3duJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgJHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0ICRwYXJlbnQgPSAkdGFyZ2V0LnBhcmVudCgpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNjb3BlID0gdGhpcy5lbGVtZW50U2NvcGU7XG5cbiAgICAgICAgICAgIGxldCBzdG9wUHJvcG9nYXRpb24sIHByZXZlbnREZWZhdWx0O1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5oaWRlVGltZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgkdGFyZ2V0Lmhhc0NsYXNzKCdicy10aW1lcGlja2VyLWZpZWxkJykpIHtcbiAgICAgICAgICAgICAgICBpZiAoJHBhcmVudC5pcygnOmZpcnN0LWNoaWxkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdUYWInKSB8fCBldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLnNldElzVGltZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFByb3BvZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHBhcmVudC5pcygnOmxhc3QtY2hpbGQnKSB8fCAoJHBhcmVudC5uZXh0KCkubmV4dCgpLmZpbmQoJ2J1dHRvbi5kaXNhYmxlZCcpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgfHwgZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wb2dhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wb2dhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0b3BQcm9wb2dhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U2NvcGUubWludGltZSAmJiBlbGVtZW50U2NvcGUubWF4dGltZSAmJiAhdGhpcy5pc1ZhbGlkRGF0ZShlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUgPSBlbGVtZW50U2NvcGUubWF4VGltZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlID0gZWxlbWVudFNjb3BlLm1pblRpbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLmRhdGVwYXR0ZXJuIHx8IHRoaXMudGltZXBhdHRlcm47XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRGb3JtYXR0ZWREYXRlKGVsZW1lbnRTY29wZS5kYXRlUGlwZSwgZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlLCBwYXR0ZXJuLCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKSA9PT0gZWxlbWVudFNjb3BlLmRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5kaXNwbGF5LWlucHV0JykudmFsKGVsZW1lbnRTY29wZS5kaXNwbGF5VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZUZvcm1hdFZhbGlkYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0YXJnZXQuaGFzQ2xhc3MoJ2J0bi1kZWZhdWx0JykpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyB8fCBldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICRlbC5maW5kKCdhJykub24oJ2NsaWNrJywgZXZ0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTY29wZSA9IHRoaXMuZWxlbWVudFNjb3BlO1xuICAgICAgICAgICAgY29uc3QgJHRhcmdldCA9ICQoZXZ0LnRhcmdldCk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudFNjb3BlLm1pbnRpbWUgJiYgZWxlbWVudFNjb3BlLm1heHRpbWUgJiYgIXRoaXMuaXNWYWxpZERhdGUoZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmICgkdGFyZ2V0LmZpbmQoJ3NwYW4nKS5oYXNDbGFzcygnYnMtY2hldnJvbi1kb3duJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlID0gZWxlbWVudFNjb3BlLm1heFRpbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkdGFyZ2V0LmZpbmQoJ3NwYW4nKS5oYXNDbGFzcygnYnMtY2hldnJvbi11cCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSA9IGVsZW1lbnRTY29wZS5taW5UaW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZUZvcm1hdFZhbGlkYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUZvcm1hdChwYXR0ZXJuKSB7XG4gICAgICAgIGlmIChwYXR0ZXJuID09PSAnZGF0ZXBhdHRlcm4nKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5kYXRlSW5wdXRGb3JtYXQgPSB0aGlzLmRhdGVwYXR0ZXJuO1xuICAgICAgICAgICAgdGhpcy5zaG93c2Vjb25kcyA9IF8uaW5jbHVkZXModGhpcy5kYXRlcGF0dGVybiwgJ3MnKTtcbiAgICAgICAgICAgIHRoaXMuaXNtZXJpZGlhbiA9IF8uaW5jbHVkZXModGhpcy5kYXRlcGF0dGVybiwgJ2gnKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuID09PSAndGltZXBhdHRlcm4nKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dzZWNvbmRzID0gXy5pbmNsdWRlcyh0aGlzLnRpbWVwYXR0ZXJuLCAncycpO1xuICAgICAgICAgICAgdGhpcy5pc21lcmlkaWFuID0gXy5pbmNsdWRlcyh0aGlzLnRpbWVwYXR0ZXJuLCAnaCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TW9iaWxlSW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1vYmlsZS1pbnB1dCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIG9uRGF0ZVRpbWVJbnB1dEJsdXIoKSB7XG4gICAgICAgIC8vIHJlbW92aW5nIHRoZSBvcGFjaXR5IG9uIGJsdXIgb2YgdGhlIG1vYmlsZSB3aWRnZXRcbiAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMuZ2V0TW9iaWxlSW5wdXQoKTtcbiAgICAgICAgaWYgKGRpc3BsYXlJbnB1dEVsZW0gJiYgIWhhc0NvcmRvdmEoKSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uY2xhc3NMaXN0LnJlbW92ZSgnYWRkLW9wYWNpdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BsYXlJbnB1dEVsZW0uY2xhc3NMaXN0LnJlbW92ZSgncmVtb3ZlLW9wYWNpdHknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRGF0ZVRpbWVJbnB1dEZvY3VzKHNraXBGb2N1czogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMuZ2V0TW9iaWxlSW5wdXQoKTtcbiAgICAgICAgLy8gdG9nZ2xpbmcgdGhlIGNsYXNzZXMgdG8gc2hvdyBhbmQgaGlkZSB0aGUgbmF0aXZlIHdpZGdldCB1c2luZyBvcGFjaXR5XG4gICAgICAgIGlmIChza2lwRm9jdXMgJiYgIWhhc0NvcmRvdmEoKSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uY2xhc3NMaXN0LmFkZCgnYWRkLW9wYWNpdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BsYXlJbnB1dEVsZW0uY2xhc3NMaXN0LmFkZCgncmVtb3ZlLW9wYWNpdHknKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5SW5wdXRFbGVtICYmIHRoaXMuX3RyaWdnZXJlZEJ5VXNlcikge1xuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5mb2N1cygpO1xuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5jbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q29yZG92YVBsdWdpbkRhdGVQaWNrZXJBcGkoKSB7XG4gICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQod2luZG93LCAnY29yZG92YS53YXZlbWFrZXIuZGF0ZVBpY2tlci5zZWxlY3REYXRlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0RhdGVQaWNrZXJNb2RhbCgpIHtcbiAgICAgICAgdGhpcy5kYXRldGltZXBpY2tlckNvbXBvbmVudC5zaG93KCk7XG4gICAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgYmx1ckRhdGVJbnB1dChpc1BpY2tlck9wZW4pIHtcbiAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGlzcGxheS1pbnB1dCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoaXNQaWNrZXJPcGVuKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGRpc3BsYXlJbnB1dEVsZW0uYmx1cigpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdyZXF1aXJlZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGF0ZXBhdHRlcm4nKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdChrZXkpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3Nob3d3ZWVrcycpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dXZWVrTnVtYmVycyA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21pbmRhdGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5taW5EYXRlID0gKG52ID09PSBDVVJSRU5UX0RBVEUpID8gdGhpcy5taW5kYXRlID0gbmV3IERhdGUoKSA6IGdldERhdGVPYmoobnYpO1xuICAgICAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdtYXhkYXRlJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMubWF4RGF0ZSA9IChudiA9PT0gQ1VSUkVOVF9EQVRFKSA/IHRoaXMubWF4ZGF0ZSA9IG5ldyBEYXRlKCkgOiBnZXREYXRlT2JqKG52KTtcbiAgICAgICAgICAgIHRoaXMubWluRGF0ZU1heERhdGVWYWxpZGF0aW9uT25JbnB1dCh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZXhjbHVkZWRhdGVzJyB8fCBrZXkgPT09ICdleGNsdWRlZGF5cycpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkYXlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlZERheXNUb0Rpc2FibGUgPSBfLnNwbGl0KHRoaXMuZXhjbHVkZWRheXMsICcsJykubWFwKChkYXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICtkYXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5leGNsdWRlZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkRGF0ZXNUb0Rpc2FibGUgPSB0aGlzLmV4Y2x1ZGVkYXRlcztcbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcodGhpcy5leGNsdWRlZGF0ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZWREYXRlc1RvRGlzYWJsZSA9IF8uc3BsaXQodGhpcy5leGNsdWRlZGF0ZXMsICcsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZWREYXRlc1RvRGlzYWJsZSA9IHRoaXMuZXhjbHVkZWREYXRlc1RvRGlzYWJsZS5tYXAoZCA9PiBnZXREYXRlT2JqKGQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubWluRGF0ZU1heERhdGVWYWxpZGF0aW9uT25JbnB1dCh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc2VsZWN0ZnJvbW90aGVybW9udGgnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5zZWxlY3RGcm9tT3RoZXJNb250aCA9IG52O1xuXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndG9kYXlidXR0b24nKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5zaG93VG9kYXlCdXR0b24gPSBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjbGVhcmJ1dHRvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dDbGVhckJ1dHRvbiA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3RvZGF5YnV0dG9ubGFiZWwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy50b2RheUJ1dHRvbkxhYmVsID0gdGhpcy5pMThuU2VydmljZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKG52KSB8fCBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjbGVhcmJ1dHRvbmxhYmVsJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuY2xlYXJCdXR0b25MYWJlbCA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0TG9jYWxpemVkTWVzc2FnZShudikgfHwgbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc2hvd2N1c3RvbXBpY2tlcicpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCA9IGlzTW9iaWxlKCkgJiYgIXRoaXMuc2hvd2N1c3RvbXBpY2tlcjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhZGFwdGl2ZXBvc2l0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuYWRhcHRpdmVQb3NpdGlvbiA9IG52O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyVGFyZ2V0ID0gZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3ModGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5pc1JlYWRPbmx5ID0gdGhpcy5kYXRhZW50cnltb2RlICE9ICd1bmRlZmluZWQnICYmICF0aGlzLmlzRGF0YUVudHJ5TW9kZUVuYWJsZWRPbklucHV0KHRoaXMuZGF0YWVudHJ5bW9kZSk7XG5cbiAgICAgICAgLy8gdGhpcyBtb2JpbGVpbnB1dCB3aWR0aCB2YXJpZXMgaW4gaW9zIGhlbmNlIHNldHRpbmcgd2lkdGggaGVyZS5cbiAgICAgICAgY29uc3QgbW9iaWxlSW5wdXQgPSB0aGlzLmdldE1vYmlsZUlucHV0KCk7XG4gICAgICAgIGlmIChtb2JpbGVJbnB1dCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbW9iaWxlSW5wdXQuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICAgICAgICAgICAgbW9iaWxlSW5wdXQuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZU9uU2hvd1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kYXRlT25TaG93U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5jYW5jZWxMb2NhbGVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsTG9jYWxlQ2hhbmdlU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGV0YWNoKCkge1xuICAgICAgICB0aGlzLmRhdGV0aW1lcGlja2VyQ29tcG9uZW50Py5oaWRlTW9kYWwoKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lem9uZShsb2NhbGUpIHtcbiAgICAgICAgdGhpcy5pMThuU2VydmljZS5zZXRUaW1lem9uZShsb2NhbGUsIHRoaXMpO1xuICAgIH1cbn1cbiJdfQ==
992
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRlLXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2Vwb2NoL3NyYy9iYXNlLWRhdGUtdGltZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixRQUFRLEVBQWEsU0FBUyxFQUFFLFNBQVMsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUdqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakYsT0FBTyxFQUNILG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsS0FBSyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsT0FBTyxFQUNWLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBSWxGLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxV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Q0FBQyw4QkFBOEIsRUFBRSxDQUFDO1NBQ3pDO1FBRUQsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxVQUFVO1FBQ2IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBTTtRQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDOzs7d0VBeC9CaUIscUJBQXFCO3VCQXdENUIsbUJBQW1CO3VCQUNuQixtQkFBbUI7dUJBQ25CLHVCQUF1Qjs7Ozs7Ozt1RkExRGhCLHFCQUFxQjtjQUQxQyxTQUFTO2dGQXlEb0MsVUFBVTtrQkFBbkQsU0FBUzttQkFBQyxtQkFBbUI7WUFDWSxZQUFZO2tCQUFyRCxTQUFTO21CQUFDLG1CQUFtQjtZQUNNLHVCQUF1QjtrQkFBMUQsU0FBUzttQkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgRGlyZWN0aXZlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWYWxpZGF0b3IsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxlRGF5UGVyaW9kcywgRm9ybVN0eWxlLCBUcmFuc2xhdGlvbldpZHRoIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEJzRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcbmltcG9ydCB7IFRpbWVwaWNrZXJDb21wb25lbnQsIFRpbWVwaWNrZXJDb25maWcgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3RpbWVwaWNrZXInO1xuXG5pbXBvcnQge1xuICAgIEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgZ2V0RGF0ZU9iaixcbiAgICBnZXRGb3JtYXR0ZWREYXRlLFxuICAgIGdldE5hdGl2ZURhdGVPYmplY3QsXG4gICAgaGFzQ29yZG92YSxcbiAgICBpc0lvcyxcbiAgICBpc01vYmlsZSxcbiAgICBpc1N0cmluZyxcbiAgICBzZXRBdHRyXG59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MsIFRvRGF0ZVBpcGUgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IEJhc2VGb3JtQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvaW5wdXQnO1xuaW1wb3J0IHsgQnNEYXRlcGlja2VyQ29uZmlnLCBCc0RhdGVwaWNrZXJEaXJlY3RpdmUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtdGltZS8vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQnO1xuXG5kZWNsYXJlIGNvbnN0IG1vbWVudCwgXywgJDtcblxuY29uc3QgQ1VSUkVOVF9EQVRFID0gJ0NVUlJFTlRfREFURSc7XG5jb25zdCBtb250aHMgPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcbmNvbnN0IERBVEVQSUNLRVJfRFJPUERPV05fT1BUSU9OUyA9IHtcbiAgICBCVVRUT046ICdidXR0b24nLFxuICAgIERFRkFVTFQ6ICdkZWZhdWx0J1xufTtcbmNvbnN0IERBVEFFTlRSWU1PREVfRFJPUERPV05fT1BUSU9OUyA9IHtcbiAgICBQSUNLRVI6ICdwaWNrZXInLFxuICAgIERFRkFVTFQ6ICdkZWZhdWx0J1xufTtcblxuLy8gUHJvdmlkaW5nIG1lcmlkaWFucyB0byB0aGUgdGltZXBpY2tlciBiYWVzZCBvbiBzZWxlY3RlZCBsb2NhbGVcbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lcGlja2VyQ29uZmlnKGkxOG5TZXJ2aWNlKTogVGltZXBpY2tlckNvbmZpZyB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFRpbWVwaWNrZXJDb25maWcoKSwge1xuICAgICAgICBtZXJpZGlhbnM6IGdldExvY2FsZURheVBlcmlvZHMoaTE4blNlcnZpY2UuZ2V0U2VsZWN0ZWRMb2NhbGUoKSwgRm9ybVN0eWxlLkZvcm1hdCwgVHJhbnNsYXRpb25XaWR0aC5BYmJyZXZpYXRlZClcbiAgICB9KTtcbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZURhdGVUaW1lQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZvcm1DdXN0b21Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIFZhbGlkYXRvciB7XG4gICAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgdGFiaW5kZXg6IGFueTtcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyBhdXRvZm9jdXM6IGJvb2xlYW47XG4gICAgcHVibGljIHJlYWRvbmx5OiBib29sZWFuO1xuICAgIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyBzaG9ydGN1dGtleTogc3RyaW5nO1xuICAgIHB1YmxpYyBfdHJpZ2dlcmVkQnlVc2VyOiBib29sZWFuO1xuXG4gICAgcHVibGljIGV4Y2x1ZGVkYXlzOiBzdHJpbmc7XG4gICAgcHVibGljIGV4Y2x1ZGVkRGF5c1RvRGlzYWJsZTogQXJyYXk8bnVtYmVyPjtcbiAgICBwdWJsaWMgZXhjbHVkZWREYXRlc1RvRGlzYWJsZTogQXJyYXk8RGF0ZT47XG4gICAgcHVibGljIGV4Y2x1ZGVkYXRlcztcbiAgICBwdWJsaWMgb3V0cHV0Zm9ybWF0O1xuICAgIHB1YmxpYyBtaW5kYXRlO1xuICAgIHB1YmxpYyBtYXhkYXRlO1xuICAgIHB1YmxpYyBkYXRhZW50cnltb2RlO1xuICAgIHByb3RlY3RlZCBhY3RpdmVEYXRlO1xuICAgIHByaXZhdGUgZWxlbWVudFNjb3BlO1xuICAgIHB1YmxpYyBkYXRlcGF0dGVybjtcbiAgICBwdWJsaWMgdGltZXBhdHRlcm47XG4gICAgcHJvdGVjdGVkIHNob3dzZWNvbmRzOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBpc21lcmlkaWFuOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBtZXJpZGlhbnM6IGFueTtcbiAgICBwcm90ZWN0ZWQgZGF0ZVBpcGU7XG4gICAgcHJvdGVjdGVkIGkxOG5TZXJ2aWNlO1xuICAgIHB1YmxpYyBpc1JlYWRPbmx5ID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkTG9jYWxlOiBzdHJpbmc7XG4gICAgcHVibGljIHNlbGVjdGZyb21vdGhlcm1vbnRoOiBib29sZWFuO1xuICAgIHB1YmxpYyB0b2RheWJ1dHRvbjogYm9vbGVhbjtcbiAgICBwdWJsaWMgY2xlYXJidXR0b246IGJvb2xlYW47XG4gICAgcHVibGljIHJlbW92ZUtleXVwTGlzdGVuZXI7XG4gICAgcHVibGljIGxvYWROYXRpdmVEYXRlSW5wdXQ7XG4gICAgcHVibGljIHNob3djdXN0b21waWNrZXI7XG4gICAgcHVibGljIG5leHQ7XG4gICAgcHVibGljIHByZXY7XG4gICAgcHVibGljIGNsaWNrZWQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBkYXRlTm90SW5SYW5nZTogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgdGltZU5vdEluUmFuZ2U6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIGludmFsaWREYXRlVGltZUZvcm1hdDogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgZGF0ZU9uU2hvd1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgY2FuY2VsTG9jYWxlQ2hhbmdlU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBnZXQgdGltZVpvbmUoKSB7IHJldHVybiB0aGlzLmluai5nZXQoQWJzdHJhY3RJMThuU2VydmljZSkuZ2V0VGltZXpvbmUodGhpcyk7IH1cblxuICAgIGZvcm1hdHNCeUxvY2FsZSA9IHsndGltZXpvbmUnOiAnJ307XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIHByb3BlcnR5IHVzZWQgdG8gbWFwIHRoZSBjb250YWluZXJDbGFzcywgc2hvd1dlZWtOdW1iZXJzIGV0Yy4sIHRvIHRoZSBic0RhdGVwaWNrZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgX2RhdGVPcHRpb25zOiBCc0RhdGVwaWNrZXJDb25maWcgPSBuZXcgQnNEYXRlcGlja2VyQ29uZmlnKCk7XG4gICAgcHJvdGVjdGVkIGJzRGF0ZVBpY2tlckRpcmVjdGl2ZTogQnNEYXRlcGlja2VyRGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZChCc0Ryb3Bkb3duRGlyZWN0aXZlKSBwcm90ZWN0ZWQgYnNEcm9wZG93bjtcbiAgICBAVmlld0NoaWxkKFRpbWVwaWNrZXJDb21wb25lbnQpIHByb3RlY3RlZCBic1RpbWVQaWNrZXI7XG4gICAgQFZpZXdDaGlsZChEYXRlVGltZVBpY2tlckNvbXBvbmVudCkgZGF0ZXRpbWVwaWNrZXJDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVR5cGU6IHN0cmluZztcbiAgICBjb250YWluZXJUYXJnZXQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIFdJREdFVF9DT05GSUcpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHKTtcbiAgICAgICAgdGhpcy5pMThuU2VydmljZSA9IHRoaXMuaW5qLmdldChBYnN0cmFjdEkxOG5TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVsb2FkJyk7XG5cbiAgICAgICAgdGhpcy5kYXRlUGlwZSA9IHRoaXMuaW5qLmdldChUb0RhdGVQaXBlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExvY2FsZSA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0U2VsZWN0ZWRMb2NhbGUoKTtcbiAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMudG9kYXlQb3NpdGlvbiA9ICdsZWZ0JztcbiAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuY2xlYXJQb3NpdGlvbiA9ICdyaWdodCc7XG4gICAgICAgIHRoaXMubWVyaWRpYW5zID0gZ2V0TG9jYWxlRGF5UGVyaW9kcyh0aGlzLnNlbGVjdGVkTG9jYWxlLCBGb3JtU3R5bGUuRm9ybWF0LCBUcmFuc2xhdGlvbldpZHRoLkFiYnJldmlhdGVkKTtcbiAgICAgICAgdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0ID0gaXNNb2JpbGUoKSAmJiAhdGhpcy5zaG93Y3VzdG9tcGlja2VyO1xuXG4gICAgICAgIHRoaXMuY2FuY2VsTG9jYWxlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5nZXRBcHBJbnN0YW5jZSgpLnN1YnNjcmliZShcImxvY2FsZS1jaGFuZ2VkXCIsIChsb2NhbGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpcGUuZGF0ZVBpcGUubG9jYWxlID0gbG9jYWxlLmFuZ3VsYXI7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy50b2RheUJ1dHRvbkxhYmVsID0gdGhpcy5pMThuU2VydmljZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCdMQUJFTF9UT0RBWV9EQVRFJyk7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5jbGVhckJ1dHRvbkxhYmVsID0gdGhpcy5pMThuU2VydmljZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCdMQUJFTF9DTEVBUl9EQVRFJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBkZWZhdWx0IChpLmUgb3BlbiBkYXRlIHBpY2tlciBvbiBpbnB1dCBjbGljaylcbiAgICAgKiBAcGFyYW0xIGRyb3Bkb3dudmFsdWUsIHVzZXIgc2VsZWN0ZWQgdmFsdWUgKGJ5IGRlZmF1bHQgZGF0ZXBpY2tlciBvcGVucyBvbiBpbnB1dCBjbGljaylcbiAgICAgKiAqKi9cbiAgICBwcm90ZWN0ZWQgaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dChkcm9wZG93bnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkcm9wZG93bnZhbHVlID09PSBEQVRFUElDS0VSX0RST1BET1dOX09QVElPTlMuREVGQVVMVDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGRlZmF1bHQgKGkuZSBEYXRhIGVudHJ5IGNhbiBiZSBkb25lIGVpdGhlciBieSBzZWxlY3RpbmcgZnJvbSB0aGUgRGF0ZS9EYXRlVGltZS9UaW1lIFBpY2tlciBvciBieSBlbnRlcmluZyAgbWFudWFsbHkgdXNpbmcgdGhlIGtleWJvYXJkLiApXG4gICAgICogQHBhcmFtMSBkcm9wZG93bnZhbHVlLCB1c2VyIHNlbGVjdGVkIHZhbHVlXG4gICAgICogKiovXG4gICAgcHJvdGVjdGVkIGlzRGF0YUVudHJ5TW9kZUVuYWJsZWRPbklucHV0KGRyb3Bkb3dudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRyb3Bkb3dudmFsdWUgPT09IERBVEFFTlRSWU1PREVfRFJPUERPV05fT1BUSU9OUy5ERUZBVUxUO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNob3cgdmFsaWRhdGlvbiBtZXNzYWdlIGRlcGVuZGluZyBvbiB0aGUgaXNOYXRpdmVQaWNrZXIgZmxhZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNob3dWYWxpZGF0aW9uKCRldmVudCwgZGlzcGxheVZhbHVlLCBpc05hdGl2ZVBpY2tlciwgbXNnKSB7XG4gICAgICAgIGlmIChpc05hdGl2ZVBpY2tlcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdtaW4gbWF4IGRhdGUgdmFsaWRhdGlvbiBmYWlsZWQgJywgbXNnKTtcbiAgICAgICAgICAgIHJldHVybiAkKCRldmVudC50YXJnZXQpLnZhbChkaXNwbGF5VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXREaXNwbGF5SW5wdXQoKSB7XG4gICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcuZGlzcGxheS1pbnB1dCcpLnZhbCgnJyk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCkge1xuICAgICAgICBpZiAodGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW52YWxpZERhdGVUaW1lRm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZGF0ZU5vdEluUmFuZ2UpICYmIHRoaXMuZGF0ZU5vdEluUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0ZU5vdEluUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMudGltZU5vdEluUmFuZ2UpICYmIHRoaXMudGltZU5vdEluUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGltZU5vdEluUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLyogV01TLTE4MjY5IHwgRXh0ZW5kaW5nIHRoZSBleGlzdGluZyB2YWxpZGF0aW9uIGZvciAncmVxdWlyZWQnICovXG4gICAgICAgIGlmICh0aGlzWydzaG93J10gJiYgdGhpc1sncmVxdWlyZWQnXSkge1xuICAgICAgICAgICAgcmV0dXJuICEhYy52YWx1ZSA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnJztcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB2YWxpZGF0ZSBkYXRlIHBhdHRlcm4gYW5kIHRpbWUgcGF0dGVyblxuICAgICAqIElmIHVzZXIgc2VsZWN0cyBvbmUgcGF0dGVybiBpbiBkZXNpZ24gdGltZSBhbmQgaWYgaGUgdHJpZXMgdG8gZW50ZXIgdGhlIGRhdGUgaW4gYW5vdGhlciBwYXR0ZXJuIHRoZW4gdGhlIGRldmljZSBpcyB0aHJvd2luZyBhbiBlcnJvclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtYXRWYWxpZGF0aW9uKG5ld1ZhbCwgaW5wdXRWYWwsIGlzTmF0aXZlUGlja2VyPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5kYXRlcGF0dGVybiB8fCB0aGlzLnRpbWVwYXR0ZXJuO1xuICAgICAgICBjb25zdCB0aW1lWm9uZSA9IHRoaXMudGltZVpvbmU7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG5ld1ZhbCwgcGF0dGVybiwgdGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpO1xuICAgICAgICBpbnB1dFZhbCA9IGlucHV0VmFsLnRyaW0oKTtcbiAgICAgICAgaWYgKGlucHV0VmFsKSB7XG4gICAgICAgICAgICBpZiAocGF0dGVybiA9PT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV8uaXNOYU4oaW5wdXRWYWwpICYmIF8ucGFyc2VJbnQoaW5wdXRWYWwpICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnaW5jb3JyZWN0Zm9ybWF0JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc05hdGl2ZVBpY2tlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtYXQgdGhlIGRhdGUgdmFsdWUgb25seSB3aGVuIGlucHV0VmFsIGlzIG9idGFpbmVkIGZyb20gJGV2ZW50LnRhcmdldC52YWx1ZSwgYXMgdGhlIGZvcm1hdCBkb2VzbnQgbWF0Y2guXG4gICAgICAgICAgICAgICAgICAgIGlucHV0VmFsID0gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBpbnB1dFZhbCwgcGF0dGVybiwgdGltZVpvbmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWwgIT09IGZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdpbmNvcnJlY3Rmb3JtYXQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gdmFsaWRhdGUgbWluIGRhdGUsIG1heCBkYXRlLCBleGNsdWRlIGRhdGVzIGFuZCBleGNsdWRlIGRheXNcbiAgICAgKiBJbiBtb2JpbGUgaWYgaW52YWxpZCBkYXRlcyBhcmUgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgYW4gYWxlcnQuXG4gICAgICogSW4gd2ViIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbWluRGF0ZU1heERhdGVWYWxpZGF0aW9uT25JbnB1dChuZXdWYWwsICRldmVudD86IEV2ZW50LCBkaXNwbGF5VmFsdWU/OiBzdHJpbmcsIGlzTmF0aXZlUGlja2VyPzogYm9vbGVhbikge1xuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlVGltZVZhbCA9IG5ld1ZhbDtcbiAgICAgICAgICAgIG5ld1ZhbCA9IG1vbWVudChuZXdWYWwpLnN0YXJ0T2YoJ2RheScpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgbWluRGF0ZSA9IG1vbWVudChnZXREYXRlT2JqKHRoaXMubWluZGF0ZSkpLnN0YXJ0T2YoJ2RheScpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgbWF4RGF0ZSA9IG1vbWVudChnZXREYXRlT2JqKHRoaXMubWF4ZGF0ZSkpLnN0YXJ0T2YoJ2RheScpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMubWluZGF0ZSAmJiBuZXdWYWwgPCBtaW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7dGhpcy5hcHBMb2NhbGUuTEFCRUxfTUlOREFURV9WQUxJREFUSU9OX01FU1NBR0V9ICR7dGhpcy5taW5kYXRlfS5gO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hdGl2ZVBpY2tlciAmJiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG1pbkRhdGUsIHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpID09PSBkaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJGV2ZW50LnRhcmdldCkudmFsKGRpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21pbmRhdGUnO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dWYWxpZGF0aW9uKCRldmVudCwgZGlzcGxheVZhbHVlLCBpc05hdGl2ZVBpY2tlciwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1heGRhdGUgJiYgbmV3VmFsID4gbWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGAke3RoaXMuYXBwTG9jYWxlLkxBQkVMX01BWERBVEVfVkFMSURBVElPTl9NRVNTQUdFfSAke3RoaXMubWF4ZGF0ZX0uYDtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIgJiYgZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBtYXhEYXRlLCB0aGlzLmRhdGVwYXR0ZXJuLCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKSA9PT0gZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCRldmVudC50YXJnZXQpLnZhbChkaXNwbGF5VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVOb3RJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdtYXhkYXRlJztcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93VmFsaWRhdGlvbigkZXZlbnQsIGRpc3BsYXlWYWx1ZSwgaXNOYXRpdmVQaWNrZXIsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5leGNsdWRlZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhjbHVkZURhdGVzQXJyYXk7XG4gICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKHRoaXMuZXhjbHVkZWRhdGVzKSkge1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlRGF0ZXNBcnJheSA9IF8uc3BsaXQodGhpcy5leGNsdWRlZGF0ZXMsICcsJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZURhdGVzQXJyYXkgPSB0aGlzLmV4Y2x1ZGVkYXRlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhjbHVkZURhdGVzQXJyYXkgPSBleGNsdWRlRGF0ZXNBcnJheS5tYXAoZCA9PiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIGQsIHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpKTtcbiAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZURhdGVzQXJyYXkuaW5kZXhPZihnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIGRhdGVUaW1lVmFsLCB0aGlzLmRhdGVwYXR0ZXJuLCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVOb3RJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnZXhjbHVkZWRhdGVzJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5leGNsdWRlZGF5cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVEYXlzQXJyYXkgPSBfLnNwbGl0KHRoaXMuZXhjbHVkZWRheXMsICcsJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gXy5nZXQoZGF0ZVRpbWVWYWwsICdnZXREYXknKSA/IGRhdGVUaW1lVmFsLmdldERheSgpIDogZGF0ZVRpbWVWYWw7XG4gICAgICAgICAgICAgICAgaWYgKGV4Y2x1ZGVEYXlzQXJyYXkuaW5kZXhPZihkYXkudG9TdHJpbmcoKSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVOb3RJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnZXhjbHVkZWRheXMnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYXRpdmVQaWNrZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBoaWdobGlnaHQgdGhlIGN1cnJlbnQgZGF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBoaWdodGxpZ2h0VG9kYXkoKSB7XG4gICAgICAgIGNvbnN0IHRvRGF5ID0gbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKTtcbiAgICAgICAgXy5maWx0ZXIoJChgc3Bhbjpjb250YWlucygke3RvRGF5fSlgKS5ub3QoJy5pcy1vdGhlci1tb250aCcpLCAob2JqKSA9PiB7XG4gICAgICAgICAgICBpZiAoJChvYmopLnRleHQoKSA9PT0gdG9EYXkpIHtcbiAgICAgICAgICAgICAgICAkKG9iaikuYWRkQ2xhc3MoJ2N1cnJlbnQtZGF0ZSB0ZXh0LWluZm8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBmaW5kIHRoZSBuZXcgZGF0ZSBpcyBmcm9tIGFub3RoZXIgeWVhciBvciBub3RcbiAgICAgKiBAcGFyYW0gbmV3RGF0ZSAtIG5ld2x5IHNlbGVjdGVkIGRhdGUgdmFsdWVcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzT3RoZXJ5ZWFyKG5ld0RhdGUpIHtcbiAgICAgICAgcmV0dXJuIChuZXdEYXRlLmdldE1vbnRoKCkgPT09IDAgJiYgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkgPT09IDExKSB8fCAobmV3RGF0ZS5nZXRNb250aCgpID09PSAxMSAmJiB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSA9PT0gMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXQgZm9jdXMgZm9yIGFjdGl2ZSBkYXlcbiAgICAgKiBAcGFyYW0gbmV3RGF0ZSAtIG5ld2x5IHNlbGVjdGVkIGRhdGUgdmFsdWVcbiAgICAgKiBAcGFyYW0gaXNNb3VzZUV2ZW50IC0gYm9vbGVhbiB2YWx1ZSByZXByZXNlbnRzIHRoZSBldmVudCBpcyBtb3VzZSBldmVudC8ga2V5Ym9hcmQgZXZlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEFjdGl2ZURhdGVGb2N1cyhuZXdEYXRlLCBpc01vdXNlRXZlbnQ/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0TmV4dERhdGEobmV3RGF0ZSk7XG4gICAgICAgIHRoaXMuY2xpY2tlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBhY3RpdmVNb250aCA9IHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAvLyBjaGVjayBmb3Iga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgaWYgKCFpc01vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChuZXdEYXRlLmdldE1vbnRoKCkgPCBhY3RpdmVNb250aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPdGhlcnllYXIobmV3RGF0ZSkgPyB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCduZXh0JywgJ2RheXMnKSA6IHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ3ByZXZpb3VzJywgJ2RheXMnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3RGF0ZS5nZXRNb250aCgpID4gYWN0aXZlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3RoZXJ5ZWFyKG5ld0RhdGUpID8gdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcigncHJldmlvdXMnLCAnZGF5cycpIDogdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcignbmV4dCcsICdkYXlzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXkgPSBuZXdEYXRlLmdldERhdGUoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgXy5maWx0ZXIoJChgc3Bhbjpjb250YWlucygke25ld0RheX0pYCkubm90KCcuaXMtb3RoZXItbW9udGgnKSwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgkKG9iaikudGV4dCgpID09PSBuZXdEYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQob2JqKS5oYXNDbGFzcygnc2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChvYmopLnBhcmVudCgpLmF0dHIoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICQob2JqKS5hdHRyKCdhcmlhLWxhYmVsJywgbW9tZW50KG5ld0RhdGUpLmZvcm1hdCgnZGRkZCwgTU1NTSBEbyBZWVlZJykpO1xuICAgICAgICAgICAgICAgICAgICAkKCdbYnNkYXRlcGlja2VyZGF5ZGVjb3JhdG9yXScpLm5vdCgnLmlzLW90aGVyLW1vbnRoJykuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICAgICAgICAgJChvYmopLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgJChvYmopLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXRNb250aCgpID09PSBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgJiYgbmV3RGF0ZS5nZXRGdWxsWWVhcigpID09PSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2h0bGlnaHRUb2RheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9hZCBvdGhlciBtb250aCBkYXlzIG9yIG90aGVyIG1vbnRoIG9yIG90aGVyIHllYXJcbiAgICAgKiBAcGFyYW0gYnRuQ2xhc3MgLSBjbGFzcyhwcmV2aW91cy9uZXh0KSBvZiB0aGUgYnV0dG9uIHdoaWNoIHdlIGhhdmUgdG8gY2xpY2tcbiAgICAgKiBAcGFyYW0gdGltZVBlcmlvZCAtIFN0cmluZyB2YWx1ZSBkZWNpZGVzIHRvIGxvYWQgb3RoZXIgbW9udGggZGF5cyBvciBvdGhlciBtb250aCBvciBvdGhlciB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBnb1RvT3RoZXJNb250aE9yeWVhcihidG5DbGFzcywgdGltZVBlcmlvZCkge1xuICAgICAgICBjb25zdCAkbm9kZSA9ICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLiR7YnRuQ2xhc3N9YCk7XG4gICAgICAgIGlmICgkbm9kZS5hdHRyKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgJG5vZGUudHJpZ2dlcignY2xpY2snKTtcbiAgICAgICAgaWYgKHRpbWVQZXJpb2QgPT09ICdkYXlzJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkRGF5cygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbWVQZXJpb2QgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbWVQZXJpb2QgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9udGgoZGF0ZSwgaW5jKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IG5ldyBEYXRlKGRhdGUpO1xuXG4gICAgICAgIGxldCBtb250aCA9IGN1cnJlbnRNb250aC5nZXRNb250aCgpO1xuICAgICAgICBjb25zdCB5ZWFyID0gY3VycmVudE1vbnRoLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgbW9udGggKz0gaW5jO1xuXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCk7XG5cbiAgICAgICAgY29uc3QgZnVsbE1vbnRoID0gbmV3RGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnbG9uZycgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGU6IG5ld0RhdGUsXG4gICAgICAgICAgICBmdWxsTW9udGg6IGZ1bGxNb250aFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgdGhlIG1vdXNlIGV2ZW50cyB0byBEYXRlcGlja2VyIHBvcHVwLiBUaGVzZSBldmVudHMgYXJlIHJlcXVpcmVkIHdoZW4gd2UgbmF2aWdhdGUgZGF0ZSBwaWNrZXIgdGhyb3VnaCBtb3VzZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZERhdGVwaWNrZXJNb3VzZUV2ZW50cygpIHtcbiAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWQgLnByZXZpb3VzIHNwYW5cIikuYXR0cihcImFyaWEtaGlkZGVuXCIsIHRydWUpO1xuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAubmV4dCBzcGFuXCIpLmF0dHIoXCJhcmlhLWhpZGRlblwiLCB0cnVlKTtcblxuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZFwiKS5vbihcImNsaWNrXCIsIFwiLnByZXZpb3VzXCIsIChldmVudCk9PiB7XG4gICAgICAgICAgICB0aGlzLm5leHQgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMCk7XG4gICAgICAgICAgICB0aGlzLnByZXYgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgLTIpO1xuICAgICAgICAgICAgdGhpcy5jbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcmlnaW5hbCBtb3VzZSBjbGlja1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzRm9yRGF0ZSgtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcHJldk1vbiA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAtMSk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5wcmV2aW91cyBzcGFuXCIpLmF0dHIoXCJhcmlhLWhpZGRlblwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAubmV4dCBzcGFuXCIpLmF0dHIoXCJhcmlhLWhpZGRlblwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAubmV4dFwiKS5hdHRyKCdhcmlhLWxhYmVsJywgYE5leHQgTW9udGgsICR7dGhpcy5uZXh0LmZ1bGxNb250aH0gJHt0aGlzLm5leHQuZGF0ZS5nZXRGdWxsWWVhcigpfWApO1xuICAgICAgICAgICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5wcmV2aW91c1wiKS5hdHRyKCdhcmlhLWxhYmVsJywgYFByZXZpb3VzIE1vbnRoLCAke3RoaXMucHJldi5mdWxsTW9udGh9ICR7dGhpcy5wcmV2LmRhdGUuZ2V0RnVsbFllYXIoKX1gKTtcbiAgICAgICAgICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50JykuZmlyc3QoKS5hcHBlbmQoYDxoMiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCIgYXJpYS1saXZlPSdwb2xpdGUnIGNsYXNzPVwic3Itb25seVwiPkNoYW5nZWQgdG8gUHJldmlvdXMgTW9udGgsICR7cHJldk1vbi5mdWxsTW9udGh9IGFuZCB5ZWFyICR7cHJldk1vbi5kYXRlLmdldEZ1bGxZZWFyKCl9PC9oMj5gKTtcbiAgICAgICAgICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkJykub24oJ2ZvY3VzJywgJy5jdXJyZW50JywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudCcpLmZpbmQoJ2gyJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1oZWFkIC5wcmV2aW91c2ApLmZvY3VzKCk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZFwiKS5vbihcImNsaWNrXCIsIFwiLm5leHRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5leHQgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMik7XG4gICAgICAgICAgICB0aGlzLnByZXYgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMCk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JEYXRlKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5leHRNb24gPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAucHJldmlvdXMgc3BhblwiKS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWQgLm5leHQgc3BhblwiKS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWQgLm5leHRcIikuYXR0cignYXJpYS1sYWJlbCcsIGBOZXh0IE1vbnRoLCAke3RoaXMubmV4dC5mdWxsTW9udGh9ICR7dGhpcy5uZXh0LmRhdGUuZ2V0RnVsbFllYXIoKX1gKTtcbiAgICAgICAgICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAucHJldmlvdXNcIikuYXR0cignYXJpYS1sYWJlbCcsIGBQcmV2aW91cyBNb250aCwgJHt0aGlzLnByZXYuZnVsbE1vbnRofSAke3RoaXMucHJldi5kYXRlLmdldEZ1bGxZZWFyKCl9YCk7XG4gICAgICAgICAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudCcpLmZpcnN0KCkuYXBwZW5kKGA8aDIgYXJpYS1oaWRkZW49XCJmYWxzZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGFyaWEtbGl2ZT0ncG9saXRlJyBjbGFzcz1cInNyLW9ubHlcIj5DaGFuZ2VkIHRvIE5leHQgTW9udGgsICR7bmV4dE1vbi5mdWxsTW9udGh9IGFuZCB5ZWFyICR7bmV4dE1vbi5kYXRlLmdldEZ1bGxZZWFyKCl9PC9oMj5gKTtcbiAgICAgICAgICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkJykub24oJ2ZvY3VzJywgJy5jdXJyZW50JywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudCcpLmZpbmQoJ2gyJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1oZWFkIC5uZXh0YCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZFwiKS5vbihcImNsaWNrXCIsIFwiLmN1cnJlbnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igb3JpZ2luYWwgbW91c2UgY2xpY2tcbiAgICAgICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1c0ZvckN1cnJlbnRNb250aE9yeWVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItYm9keScpLm9uKFwiY2xpY2tcIiwgXCIuYnMtZGF0ZXBpY2tlci1hY3Rpb24tYnV0dG9uc1wiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JNb250aE9yRGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpZighdGhpcy5jbGlja2VkKSB7XG4gICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5uZXh0XCIpLmF0dHIoJ2FyaWEtbGFiZWwnLCBgTmV4dCBNb250aCwgJHt0aGlzLm5leHQuZnVsbE1vbnRofSAke3RoaXMubmV4dC5kYXRlLmdldEZ1bGxZZWFyKCl9YCk7XG4gICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5wcmV2aW91c1wiKS5hdHRyKCdhcmlhLWxhYmVsJywgYFByZXZpb3VzIE1vbnRoLCAke3RoaXMucHJldi5mdWxsTW9udGh9ICR7dGhpcy5wcmV2LmRhdGUuZ2V0RnVsbFllYXIoKX1gKTtcbiAgICAgICAgLy8gIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGZvY3VzIGZvciBtb250aHMvZGF5cyBkZXBlbmRpbmcgb24gdGhlIGxvYWRlZCBkYXRlcGlja2VyIHRhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRGb2N1c0Zvck1vbnRoT3JEYXkoKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU1vbnRoT3JZZWFyID0gJChgLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudGApLmZpcnN0KCkudGV4dCgpO1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChfLnBhcnNlSW50KGFjdGl2ZU1vbnRoT3JZZWFyKSAhPT0gdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShfLnBhcnNlSW50KGFjdGl2ZU1vbnRoT3JZZWFyKSwgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLmRheXMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdNb250aCA9IG1vbnRocy5pbmRleE9mKGFjdGl2ZU1vbnRoT3JZZWFyKTtcbiAgICAgICAgICAgIGlmIChuZXdNb250aCAhPT0gdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIG5ld01vbnRoLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBmb2N1cyBmb3IgbW9udGhzL3llYXJzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yQ3VycmVudE1vbnRoT3J5ZWFyKCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKHRoaXMuYWN0aXZlRGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0ZVBpY2tlckJvZHkuZmluZCgndGFibGUueWVhcnMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRZZWFycygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXModGhpcy5hY3RpdmVEYXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgZm9jdXMgZm9yIG1vbnRocy95ZWFycy9kYXlzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yRGF0ZShjb3VudCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpICsgY291bnQsIDAsIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzIHNwYW4nKS5maXJzdCgpLnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShfLnBhcnNlSW50KHN0YXJ0WWVhciksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpLCB0aGlzLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLmRheXMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpICsgY291bnQsIDEpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3RGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkZCBrZXlib2FyZCBldmVudHMgd2hpbGUgb3BlbmluZyB0aGUgZGF0ZSBwaWNrZXJcbiAgICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgZGF0ZS9kYXRldGltZSB3aWRnZXRcbiAgICAgKiBAcGFyYW0gaXNEYXRlVGltZSAtIGJvb2xlYW4gdmFsdWUgcmVwcmVzZW50cyB0aGUgbG9hZGVkIHdpZGdldCBpcyBkYXRlIG9yIGRhdGV0aW1lXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZERhdGVwaWNrZXJLZXlib2FyZEV2ZW50cyhzY29wZSwgaXNEYXRlVGltZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnRTY29wZSA9IHNjb3BlO1xuICAgICAgICBjb25zdCBkYXRlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7c2NvcGUuZGF0ZUNvbnRhaW5lckNsc31gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgc2V0QXR0cihkYXRlQ29udGFpbmVyLCAndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICBkYXRlQ29udGFpbmVyLm9ua2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFNoaWZ0K1RhYiBrZXkgb3IgVGFiIGtleSBvciBlc2NhcGVcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUuaGlkZURhdGVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlJbnB1dEVsZW0gPSB0aGlzLmVsZW1lbnRTY29wZS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBkaXNwbGF5SW5wdXRFbGVtLmZvY3VzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgc2V0TmV4dERhdGEobmV4dERhdGUpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aChuZXh0RGF0ZSwgMSk7XG4gICAgICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgobmV4dERhdGUsIC0xKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGFiaW5kZXgsIGtleWJvcmQgYW5kIG1vdXNlIGV2ZW50cyBmb3IgZGF5c1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZERheXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJCgnW2JzZGF0ZXBpY2tlcmRheWRlY29yYXRvcl0nKS5ub3QoJy5pcy1vdGhlci1tb250aCcpLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmNsaWNrZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDEpO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAtMSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yRGF5cygpO1xuICAgICAgICAgICAgdGhpcy5hZGREYXRlcGlja2VyTW91c2VFdmVudHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBrZXlib2FyZCBldmVudHMgZm9yIGRheXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZEtleUJvYXJkRXZlbnRzRm9yRGF5cygpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckJvZHkgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jyk7XG4gICAgICAgIGRhdGVQaWNrZXJCb2R5LmtleWRvd24oKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3ZGF0ZTtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCs3LCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xpY2tpbmcgb24gdGFibGUgaGVhZGVyIG1vbnRoIG5hbWUgdG8gbG9hZCBsaXN0IG9mIG1vbnRoc1xuICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnQnKS5maXJzdCgpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTW9udGhzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC03LCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdQYWdlVXAnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC0xLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnUGFnZURvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuaGFzQ2xhc3MoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUuaGlkZURhdGVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlJbnB1dEVsZW0gPSB0aGlzLmVsZW1lbnRTY29wZS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBkaXNwbGF5SW5wdXRFbGVtLmZvY3VzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb2N1c0JsdXJEYXRlUGlja2VySGVhZEJ1dHRvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzQmx1ckRhdGVQaWNrZXJIZWFkQnV0dG9ucygpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckhlYWRCdXR0b24gPSAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIGJ1dHRvbicpO1xuICAgICAgICBkYXRlUGlja2VySGVhZEJ1dHRvbi5vbignZm9jdXMnLCBmdW5jdGlvbigpIHsgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQtY29sb3InLCAnIzlBQTBBMycpOyB9KTtcbiAgICAgICAgZGF0ZVBpY2tlckhlYWRCdXR0b24ub24oJ2JsdXInLCBmdW5jdGlvbigpIHsgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQtY29sb3InLCAnJyk7IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRkIHRhYmluZGV4LCBrZXlib3JkIGFuZCBtb3VzZSBldmVudHMgZm9yIG1vbnRoc1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZE1vbnRocygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yTW9udGhzKCk7XG4gICAgICAgICAgICB0aGlzLmFkZERhdGVwaWNrZXJNb3VzZUV2ZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGtleWJvYXJkIGV2ZW50cyBmb3IgbW9udGhzXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRLZXlCb2FyZEV2ZW50c0Zvck1vbnRocygpIHtcbiAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItYm9keScpLmtleWRvd24oKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3ZGF0ZTtcbiAgICAgICAgICAgIGlmICgoZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICBpZiAoJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5wYXJlbnQoKS5oYXNDbGFzcygnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3RGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGlja2luZyBvbiB0YWJsZSBoZWFkZXIgeWVhciB0byBsb2FkIGxpc3Qgb2YgeWVhcnNcbiAgICAgICAgICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50JykuZmlyc3QoKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFllYXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXModGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMywgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMywgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoKzEsICdtb250aCcpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9jdXNCbHVyRGF0ZVBpY2tlckhlYWRCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGFiaW5kZXgsIGtleWJvcmQgYW5kIG1vdXNlIGV2ZW50cyBmb3IgeWVhcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWRZZWFycygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yWWVhcnMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlck1vdXNlRXZlbnRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IGZvY3VzIGZvciBhY3RpdmUgbW9udGhcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEFjdGl2ZU1vbnRoRm9jdXMobmV3RGF0ZSwgaXNNb291c2VFdmVudD86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXROZXh0RGF0YShuZXdEYXRlKTtcbiAgICAgICAgY29uc3QgbmV3TW9udGggPSBtb250aHNbbmV3RGF0ZS5nZXRNb250aCgpXTtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGtleWJvYXJkIGV2ZW50XG4gICAgICAgIGlmICghaXNNb291c2VFdmVudCkge1xuICAgICAgICAgICAgaWYgKG5ld0RhdGUuZ2V0RnVsbFllYXIoKSA8IHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcigncHJldmlvdXMnLCAnbW9udGgnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3RGF0ZS5nZXRGdWxsWWVhcigpID4gdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCduZXh0JywgJ21vbnRoJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLm1vbnRocyBzcGFuYCkuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUubW9udGhzIHNwYW46Y29udGFpbnMoJHtuZXdNb250aH0pYCkuYXR0cigndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS5tb250aHMgc3Bhbjpjb250YWlucygke25ld01vbnRofSlgKS5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBrZXlib2FyZCBldmVudHMgZm9yIHllYXJzXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRLZXlCb2FyZEV2ZW50c0ZvclllYXJzKCkge1xuICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jykua2V5ZG93bigoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdkYXRlO1xuICAgICAgICAgICAgaWYgKChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgICAgIGlmICgkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLnBhcmVudCgpLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCs0LCAneWVhcicpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtNCwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoLTEsICd5ZWFyJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMSwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9jdXNCbHVyRGF0ZVBpY2tlckhlYWRCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXQgZm9jdXMgZm9yIGFjdGl2ZSB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRBY3RpdmVZZWFyRm9jdXMobmV3RGF0ZSwgaXNNb3VzZUV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBuZXdZZWFyID0gbmV3RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyWWVhcnMgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLnllYXJzIHNwYW4nKTtcbiAgICAgICAgY29uc3Qgc3RhcnRZZWFyID0gZGF0ZVBpY2tlclllYXJzLmZpcnN0KCkudGV4dCgpO1xuICAgICAgICBjb25zdCBlbmRZZWFyID0gZGF0ZVBpY2tlclllYXJzLmxhc3QoKS50ZXh0KCk7XG4gICAgICAgIC8vIGNoZWNrIGZvciBrZXlib2FyZCBldmVudFxuICAgICAgICBpZiAoIWlzTW91c2VFdmVudCkge1xuICAgICAgICAgICAgaWYgKG5ld0RhdGUuZ2V0RnVsbFllYXIoKSA8IF8ucGFyc2VJbnQoc3RhcnRZZWFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ3ByZXZpb3VzJywgJ3llYXInKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3RGF0ZS5nZXRGdWxsWWVhcigpID4gXy5wYXJzZUludChlbmRZZWFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ25leHQnLCAneWVhcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS55ZWFycyBzcGFuYCkuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUueWVhcnMgc3Bhbjpjb250YWlucygke25ld1llYXJ9KWApLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUueWVhcnMgc3Bhbjpjb250YWlucygke25ld1llYXJ9KWApLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXdEYXRlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGZvY3VzIGZvciB0aW1lcGlja2VyIGZpcnN0IGlucHV0IGZpZWxkKGhvdXJzIGZpZWxkKSB3aGlsZSBvcGVuaW5nIHRpbWUgcGlja2VyXG4gICAgICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHRpbWUgcGlja2VyIHdpZGdldFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb2N1c1RpbWVQaWNrZXJQb3BvdmVyKHNjb3BlKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFNjb3BlID0gc2NvcGU7XG4gICAgICAgIC8vIHNldFRpbWVvdXQgaXMgdXNlZCBzbyB0aGF0IGJ5IHRoZW4gdGltZSBpbnB1dCBoYXMgdGhlIHVwZGF0ZWQgdmFsdWUuIGZvY3VzIGlzIHNldHRpbmcgYmFjayB0byB0aGUgaW5wdXQgZmllbGRcbiAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoJ3RpbWVwaWNrZXIgLmZvcm0tZ3JvdXAnKS5maXJzdCgpLmZpbmQoJz4gaW5wdXQuZm9ybS1jb250cm9sJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUga2V5Ym9hcmQgZXZlbnRzIHRvIFRpbWVwaWNrZXIgcG9wdXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYmluZFRpbWVQaWNrZXJLZXlib2FyZEV2ZW50cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdGltZXBpY2tlclBvcHVwID0gJCgnYm9keScpLmZpbmQoJz4gYnMtZHJvcGRvd24tY29udGFpbmVyIHRpbWVwaWNrZXInKTtcbiAgICAgICAgICAgICR0aW1lcGlja2VyUG9wdXAuYXR0cigndGFiaW5kZXgnLCAwKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRzT25UaW1lUGlja2VyKCR0aW1lcGlja2VyUG9wdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9jdXNPbklucHV0RWwoKSB7XG4gICAgICAgIGlmICgkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnLmNhcHRpb24tZmxvYXRpbmcnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmFwcC10ZXh0Ym94JykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBkYXRlIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqIEByZXR1cm5zIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZGF0ZSBpcyB2YWxpZCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWREYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB0aW1lIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqL1xuICAgIHByaXZhdGUgdGltZUZvcm1hdFZhbGlkYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGVudGVyZWREYXRlID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJ2lucHV0JykudmFsKCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGdldE5hdGl2ZURhdGVPYmplY3QoZW50ZXJlZERhdGUsIHttZXJpZGlhbnM6IHRoaXMubWVyaWRpYW5zLCBwYXR0ZXJuOiB0aGlzLmRhdGVwYXR0ZXJufSk7XG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRWYWxpZGF0aW9uKG5ld1ZhbCwgZW50ZXJlZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lVmFsdWUoZWwsIHZhbHVlLCBmaWVsZE5hbWUpIHtcbiAgICAgICAgbGV0IG1pbkVsID0gZWwuZmluZCgnaW5wdXRbYXJpYS1sYWJlbD1cIm1pbnV0ZXNcIl0nKTtcbiAgICAgICAgbGV0IHNlY0VsID0gZWwuZmluZCgnaW5wdXRbYXJpYS1sYWJlbD1cInNlY29uZHNcIl0nKTtcbiAgICAgICAgbWluRWwudmFsdWUgPSBzZWNFbC52YWx1ZSA9ICcwMCc7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPT09ICdtaW51dGVzJyA/IHRoaXMuYnNUaW1lUGlja2VyLnVwZGF0ZU1pbnV0ZXMobWluRWwpIDogdGhpcy5ic1RpbWVQaWNrZXIudXBkYXRlU2Vjb25kcyhzZWNFbCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGROYW1lID09PSAnbWludXRlcycgPyB0aGlzLmJzVGltZVBpY2tlci51cGRhdGVNaW51dGVzKG1pbkVsKSA6IHRoaXMuYnNUaW1lUGlja2VyLnVwZGF0ZVNlY29uZHMoc2VjRWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBldmVudHMgdG8gZ2l2ZW4gZWxlbWVudFxuICAgICAqIEBwYXJhbSAkZWwgLSBlbGVtZW50IG9uIHdoaWNoIHRoZSBldmVudCBpcyBhZGRlZFxuICAgICAqL1xuICAgIHByaXZhdGUgYWRkRXZlbnRzT25UaW1lUGlja2VyKCRlbDogSlF1ZXJ5KSB7XG4gICAgICAgIGNvbnN0IGlucHV0RmllbGRzID0gJGVsLmZpbmQoJy5icy10aW1lcGlja2VyLWZpZWxkJyk7XG4gICAgICAgIC8vIFdNUy0xOTM4MjogdXBkYXRlIG1pbnV0ZXMgYW5kIHNlY29uZHMgdG8gMCB3aGVuIHdlIGVudGVyIGhvdXIgdmFsdWVcbiAgICAgICAgaW5wdXRGaWVsZHMuZmlyc3QoKS5vbigna2V5dXAnLCBldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaG91clZhbHVlID0gKGV2dC50YXJnZXQgYXMgYW55KS52YWx1ZTtcbiAgICAgICAgICAgIF8uZm9yRWFjaChpbnB1dEZpZWxkcywgKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldnQudGFyZ2V0ICE9PSBmaWVsZCAmJiBmaWVsZC52YWx1ZSA9PT0gJycgJiYgaG91clZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBpbmRleCA9PT0gMSA/ICdtaW51dGVzJyA6ICdzZWNvbmRzJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUaW1lVmFsdWUoJGVsLCBob3VyVmFsdWUsIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlbW92ZUtleXVwTGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBpbnB1dEZpZWxkcy5maXJzdCgpLm9mZigna2V5dXAnKTtcbiAgICAgICAgfTtcbiAgICAgICAgJGVsLm9uKCdrZXlkb3duJywgZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgJHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0ICRwYXJlbnQgPSAkdGFyZ2V0LnBhcmVudCgpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNjb3BlID0gdGhpcy5lbGVtZW50U2NvcGU7XG5cbiAgICAgICAgICAgIGxldCBzdG9wUHJvcG9nYXRpb24sIHByZXZlbnREZWZhdWx0O1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5oaWRlVGltZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgkdGFyZ2V0Lmhhc0NsYXNzKCdicy10aW1lcGlja2VyLWZpZWxkJykpIHtcbiAgICAgICAgICAgICAgICBpZiAoJHBhcmVudC5pcygnOmZpcnN0LWNoaWxkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXkgPT09ICdUYWInKSB8fCBldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLnNldElzVGltZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFByb3BvZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHBhcmVudC5pcygnOmxhc3QtY2hpbGQnKSB8fCAoJHBhcmVudC5uZXh0KCkubmV4dCgpLmZpbmQoJ2J1dHRvbi5kaXNhYmxlZCcpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgfHwgZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wb2dhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wb2dhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0b3BQcm9wb2dhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U2NvcGUubWludGltZSAmJiBlbGVtZW50U2NvcGUubWF4dGltZSAmJiAhdGhpcy5pc1ZhbGlkRGF0ZShlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUgPSBlbGVtZW50U2NvcGUubWF4VGltZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlID0gZWxlbWVudFNjb3BlLm1pblRpbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLmRhdGVwYXR0ZXJuIHx8IHRoaXMudGltZXBhdHRlcm47XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRGb3JtYXR0ZWREYXRlKGVsZW1lbnRTY29wZS5kYXRlUGlwZSwgZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlLCBwYXR0ZXJuLCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKSA9PT0gZWxlbWVudFNjb3BlLmRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5kaXNwbGF5LWlucHV0JykudmFsKGVsZW1lbnRTY29wZS5kaXNwbGF5VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGltZUZvcm1hdFZhbGlkYXRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0YXJnZXQuaGFzQ2xhc3MoJ2J0bi1kZWZhdWx0JykpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyB8fCBldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICRlbC5maW5kKCdhJykub24oJ2NsaWNrJywgZXZ0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTY29wZSA9IHRoaXMuZWxlbWVudFNjb3BlO1xuICAgICAgICAgICAgY29uc3QgJHRhcmdldCA9ICQoZXZ0LnRhcmdldCk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudFNjb3BlLm1pbnRpbWUgJiYgZWxlbWVudFNjb3BlLm1heHRpbWUgJiYgIXRoaXMuaXNWYWxpZERhdGUoZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGlmICgkdGFyZ2V0LmZpbmQoJ3NwYW4nKS5oYXNDbGFzcygnYnMtY2hldnJvbi1kb3duJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlID0gZWxlbWVudFNjb3BlLm1heFRpbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkdGFyZ2V0LmZpbmQoJ3NwYW4nKS5oYXNDbGFzcygnYnMtY2hldnJvbi11cCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSA9IGVsZW1lbnRTY29wZS5taW5UaW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZUZvcm1hdFZhbGlkYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUZvcm1hdChwYXR0ZXJuKSB7XG4gICAgICAgIGlmIChwYXR0ZXJuID09PSAnZGF0ZXBhdHRlcm4nKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5kYXRlSW5wdXRGb3JtYXQgPSB0aGlzLmRhdGVwYXR0ZXJuO1xuICAgICAgICAgICAgdGhpcy5zaG93c2Vjb25kcyA9IF8uaW5jbHVkZXModGhpcy5kYXRlcGF0dGVybiwgJ3MnKTtcbiAgICAgICAgICAgIHRoaXMuaXNtZXJpZGlhbiA9IF8uaW5jbHVkZXModGhpcy5kYXRlcGF0dGVybiwgJ2gnKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuID09PSAndGltZXBhdHRlcm4nKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dzZWNvbmRzID0gXy5pbmNsdWRlcyh0aGlzLnRpbWVwYXR0ZXJuLCAncycpO1xuICAgICAgICAgICAgdGhpcy5pc21lcmlkaWFuID0gXy5pbmNsdWRlcyh0aGlzLnRpbWVwYXR0ZXJuLCAnaCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TW9iaWxlSW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1vYmlsZS1pbnB1dCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIG9uRGF0ZVRpbWVJbnB1dEJsdXIoKSB7XG4gICAgICAgIC8vIHJlbW92aW5nIHRoZSBvcGFjaXR5IG9uIGJsdXIgb2YgdGhlIG1vYmlsZSB3aWRnZXRcbiAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMuZ2V0TW9iaWxlSW5wdXQoKTtcbiAgICAgICAgaWYgKGRpc3BsYXlJbnB1dEVsZW0gJiYgIWhhc0NvcmRvdmEoKSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uY2xhc3NMaXN0LnJlbW92ZSgnYWRkLW9wYWNpdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BsYXlJbnB1dEVsZW0uY2xhc3NMaXN0LnJlbW92ZSgncmVtb3ZlLW9wYWNpdHknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRGF0ZVRpbWVJbnB1dEZvY3VzKHNraXBGb2N1czogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMuZ2V0TW9iaWxlSW5wdXQoKTtcbiAgICAgICAgLy8gdG9nZ2xpbmcgdGhlIGNsYXNzZXMgdG8gc2hvdyBhbmQgaGlkZSB0aGUgbmF0aXZlIHdpZGdldCB1c2luZyBvcGFjaXR5XG4gICAgICAgIGlmIChza2lwRm9jdXMgJiYgIWhhc0NvcmRvdmEoKSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uY2xhc3NMaXN0LmFkZCgnYWRkLW9wYWNpdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BsYXlJbnB1dEVsZW0uY2xhc3NMaXN0LmFkZCgncmVtb3ZlLW9wYWNpdHknKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5SW5wdXRFbGVtICYmIHRoaXMuX3RyaWdnZXJlZEJ5VXNlcikge1xuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5mb2N1cygpO1xuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5jbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q29yZG92YVBsdWdpbkRhdGVQaWNrZXJBcGkoKSB7XG4gICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gXy5nZXQod2luZG93LCAnY29yZG92YS53YXZlbWFrZXIuZGF0ZVBpY2tlci5zZWxlY3REYXRlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0RhdGVQaWNrZXJNb2RhbChic0RhdGF2YWwpIHtcbiAgICAgICAgYnNEYXRhdmFsID8gdGhpcy5hY3RpdmVEYXRlID0gYnNEYXRhdmFsIDogdGhpcy5hY3RpdmVEYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5zZXROZXh0RGF0YSh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLmRhdGV0aW1lcGlja2VyQ29tcG9uZW50LnNob3coKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZERhdGVwaWNrZXJNb3VzZUV2ZW50cygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXModGhpcy5hY3RpdmVEYXRlLCB0cnVlKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICBibHVyRGF0ZUlucHV0KGlzUGlja2VyT3Blbikge1xuICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChpc1BpY2tlck9wZW4pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZGlzcGxheUlucHV0RWxlbS5ibHVyKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcblxuICAgICAgICBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ3JlcXVpcmVkJykge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRlcGF0dGVybicpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWF0KGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc2hvd3dlZWtzJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuc2hvd1dlZWtOdW1iZXJzID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbWluZGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLm1pbkRhdGUgPSAobnYgPT09IENVUlJFTlRfREFURSkgPyB0aGlzLm1pbmRhdGUgPSBuZXcgRGF0ZSgpIDogZ2V0RGF0ZU9iaihudik7XG4gICAgICAgICAgICB0aGlzLm1pbkRhdGVNYXhEYXRlVmFsaWRhdGlvbk9uSW5wdXQodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21heGRhdGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5tYXhEYXRlID0gKG52ID09PSBDVVJSRU5UX0RBVEUpID8gdGhpcy5tYXhkYXRlID0gbmV3IERhdGUoKSA6IGdldERhdGVPYmoobnYpO1xuICAgICAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdleGNsdWRlZGF0ZXMnIHx8IGtleSA9PT0gJ2V4Y2x1ZGVkYXlzJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZWRheXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkRGF5c1RvRGlzYWJsZSA9IF8uc3BsaXQodGhpcy5leGNsdWRlZGF5cywgJywnKS5tYXAoKGRheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gK2RheTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkYXRlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZWREYXRlc1RvRGlzYWJsZSA9IHRoaXMuZXhjbHVkZWRhdGVzO1xuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyh0aGlzLmV4Y2x1ZGVkYXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlID0gXy5zcGxpdCh0aGlzLmV4Y2x1ZGVkYXRlcywgJywnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlID0gdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlLm1hcChkID0+IGdldERhdGVPYmooZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzZWxlY3Rmcm9tb3RoZXJtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNlbGVjdEZyb21PdGhlck1vbnRoID0gbnY7XG5cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICd0b2RheWJ1dHRvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dUb2RheUJ1dHRvbiA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsZWFyYnV0dG9uJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuc2hvd0NsZWFyQnV0dG9uID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndG9kYXlidXR0b25sYWJlbCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnRvZGF5QnV0dG9uTGFiZWwgPSB0aGlzLmkxOG5TZXJ2aWNlLmdldExvY2FsaXplZE1lc3NhZ2UobnYpIHx8IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsZWFyYnV0dG9ubGFiZWwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5jbGVhckJ1dHRvbkxhYmVsID0gdGhpcy5pMThuU2VydmljZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKG52KSB8fCBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzaG93Y3VzdG9tcGlja2VyJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0ID0gaXNNb2JpbGUoKSAmJiAhdGhpcy5zaG93Y3VzdG9tcGlja2VyO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2FkYXB0aXZlcG9zaXRpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5hZGFwdGl2ZVBvc2l0aW9uID0gbnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJUYXJnZXQgPSBnZXRDb250YWluZXJUYXJnZXRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLmlzUmVhZE9ubHkgPSB0aGlzLmRhdGFlbnRyeW1vZGUgIT0gJ3VuZGVmaW5lZCcgJiYgIXRoaXMuaXNEYXRhRW50cnlNb2RlRW5hYmxlZE9uSW5wdXQodGhpcy5kYXRhZW50cnltb2RlKTtcblxuICAgICAgICAvLyB0aGlzIG1vYmlsZWlucHV0IHdpZHRoIHZhcmllcyBpbiBpb3MgaGVuY2Ugc2V0dGluZyB3aWR0aCBoZXJlLlxuICAgICAgICBjb25zdCBtb2JpbGVJbnB1dCA9IHRoaXMuZ2V0TW9iaWxlSW5wdXQoKTtcbiAgICAgICAgaWYgKG1vYmlsZUlucHV0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBtb2JpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgICAgICAgICAgICBtb2JpbGVJbnB1dC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5kYXRlT25TaG93U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVPblNob3dTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmNhbmNlbExvY2FsZUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxMb2NhbGVDaGFuZ2VTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXRhY2goKSB7XG4gICAgICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJDb21wb25lbnQ/LmhpZGVNb2RhbCgpO1xuICAgIH1cblxuICAgIHNldFRpbWV6b25lKGxvY2FsZSkge1xuICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlLnNldFRpbWV6b25lKGxvY2FsZSwgdGhpcyk7XG4gICAgfVxufVxuIl19