igniteui-angular 18.2.3 → 18.2.4

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 (93) hide show
  1. package/esm2022/lib/avatar/avatar.component.mjs +17 -2
  2. package/esm2022/lib/checkbox/checkbox.component.mjs +73 -9
  3. package/esm2022/lib/core/utils.mjs +8 -1
  4. package/esm2022/lib/date-picker/date-picker.component.mjs +7 -3
  5. package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +2 -2
  6. package/esm2022/lib/query-builder/query-builder.component.mjs +11 -6
  7. package/fesm2022/igniteui-angular.mjs +110 -15
  8. package/fesm2022/igniteui-angular.mjs.map +1 -1
  9. package/lib/avatar/avatar.component.d.ts +3 -1
  10. package/lib/checkbox/checkbox.component.d.ts +42 -2
  11. package/lib/core/styles/components/action-strip/_action-strip-component.scss +1 -1
  12. package/lib/core/styles/components/action-strip/_action-strip-theme.scss +1 -0
  13. package/lib/core/styles/components/avatar/_avatar-theme.scss +1 -0
  14. package/lib/core/styles/components/badge/_badge-theme.scss +1 -0
  15. package/lib/core/styles/components/banner/_banner-theme.scss +1 -0
  16. package/lib/core/styles/components/bottom-nav/_bottom-nav-theme.scss +1 -0
  17. package/lib/core/styles/components/button/_button-theme.scss +1 -0
  18. package/lib/core/styles/components/button-group/_button-group-theme.scss +1 -0
  19. package/lib/core/styles/components/calendar/_calendar-theme.scss +1 -0
  20. package/lib/core/styles/components/card/_card-theme.scss +1 -0
  21. package/lib/core/styles/components/carousel/_carousel-theme.scss +6 -5
  22. package/lib/core/styles/components/checkbox/_checkbox-component.scss +76 -14
  23. package/lib/core/styles/components/checkbox/_checkbox-theme.scss +98 -109
  24. package/lib/core/styles/components/chip/_chip-theme.scss +1 -0
  25. package/lib/core/styles/components/column-actions/_column-actions-theme.scss +1 -0
  26. package/lib/core/styles/components/combo/_combo-theme.scss +1 -0
  27. package/lib/core/styles/components/dialog/_dialog-theme.scss +1 -0
  28. package/lib/core/styles/components/divider/_divider-theme.scss +1 -0
  29. package/lib/core/styles/components/drop-down/_drop-down-theme.scss +1 -0
  30. package/lib/core/styles/components/expansion-panel/_expansion-panel-theme.scss +1 -0
  31. package/lib/core/styles/components/grid/_grid-component.scss +1 -0
  32. package/lib/core/styles/components/grid/_grid-theme.scss +4 -3
  33. package/lib/core/styles/components/grid/_pivot-data-selector-theme.scss +1 -0
  34. package/lib/core/styles/components/grid-summary/_grid-summary-theme.scss +1 -0
  35. package/lib/core/styles/components/grid-toolbar/_grid-toolbar-theme.scss +1 -0
  36. package/lib/core/styles/components/highlight/highlight-theme.scss +1 -0
  37. package/lib/core/styles/components/icon/_icon-theme.scss +2 -1
  38. package/lib/core/styles/components/icon-button/_icon-button-theme.scss +1 -0
  39. package/lib/core/styles/components/label/_label-theme.scss +1 -0
  40. package/lib/core/styles/components/list/_list-theme.scss +8 -53
  41. package/lib/core/styles/components/navbar/_navbar-theme.scss +1 -0
  42. package/lib/core/styles/components/navdrawer/_navdrawer-theme.scss +1 -0
  43. package/lib/core/styles/components/overlay/_overlay-theme.scss +1 -0
  44. package/lib/core/styles/components/paginator/_paginator-component.scss +1 -1
  45. package/lib/core/styles/components/paginator/_paginator-theme.scss +1 -0
  46. package/lib/core/styles/components/progress/_progress-theme.scss +2 -0
  47. package/lib/core/styles/components/query-builder/_query-builder-component.scss +9 -1
  48. package/lib/core/styles/components/query-builder/_query-builder-theme.scss +1 -0
  49. package/lib/core/styles/components/radio/_radio-theme.scss +1 -0
  50. package/lib/core/styles/components/ripple/_ripple-theme.scss +2 -1
  51. package/lib/core/styles/components/scrollbar/scrollbar-theme.scss +1 -0
  52. package/lib/core/styles/components/select/_select-theme.scss +1 -0
  53. package/lib/core/styles/components/slider/_slider-theme.scss +1 -0
  54. package/lib/core/styles/components/snackbar/_snackbar-theme.scss +1 -0
  55. package/lib/core/styles/components/splitter/_splitter-theme.scss +1 -0
  56. package/lib/core/styles/components/stepper/_stepper-theme.scss +1 -0
  57. package/lib/core/styles/components/switch/_switch-theme.scss +1 -0
  58. package/lib/core/styles/components/tabs/_tabs-theme.scss +21 -15
  59. package/lib/core/styles/components/time-picker/_time-picker-theme.scss +1 -0
  60. package/lib/core/styles/components/toast/_toast-theme.scss +1 -0
  61. package/lib/core/styles/components/tooltip/_tooltip-theme.scss +1 -0
  62. package/lib/core/styles/components/tree/_tree-theme.scss +1 -0
  63. package/lib/core/styles/components/watermark/_watermark-theme.scss +1 -0
  64. package/lib/core/styles/typography/_indigo.scss +3 -1
  65. package/lib/core/utils.d.ts +5 -0
  66. package/lib/date-picker/date-picker.component.d.ts +2 -1
  67. package/package.json +1 -1
  68. package/styles/igniteui-angular-dark.css +1 -1
  69. package/styles/igniteui-angular.css +1 -1
  70. package/styles/igniteui-bootstrap-dark.css +1 -1
  71. package/styles/igniteui-bootstrap-light.css +1 -1
  72. package/styles/igniteui-dark-green.css +1 -1
  73. package/styles/igniteui-fluent-dark-excel.css +1 -1
  74. package/styles/igniteui-fluent-dark-word.css +1 -1
  75. package/styles/igniteui-fluent-dark.css +1 -1
  76. package/styles/igniteui-fluent-light-excel.css +1 -1
  77. package/styles/igniteui-fluent-light-word.css +1 -1
  78. package/styles/igniteui-fluent-light.css +1 -1
  79. package/styles/igniteui-indigo-dark.css +1 -1
  80. package/styles/igniteui-indigo-light.css +1 -1
  81. package/styles/maps/igniteui-angular-dark.css.map +1 -1
  82. package/styles/maps/igniteui-angular.css.map +1 -1
  83. package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
  84. package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
  85. package/styles/maps/igniteui-dark-green.css.map +1 -1
  86. package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
  87. package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
  88. package/styles/maps/igniteui-fluent-dark.css.map +1 -1
  89. package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
  90. package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
  91. package/styles/maps/igniteui-fluent-light.css.map +1 -1
  92. package/styles/maps/igniteui-indigo-dark.css.map +1 -1
  93. package/styles/maps/igniteui-indigo-light.css.map +1 -1
@@ -539,7 +539,6 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective {
539
539
  // input click
540
540
  if (this.hasProjectedInputs && this._focusedInput) {
541
541
  this._focusedInput.setFocus();
542
- this._focusedInput = null;
543
542
  }
544
543
  if (this.inputDirective) {
545
544
  this.inputDirective.focus();
@@ -583,6 +582,7 @@ export class IgxDateRangePickerComponent extends PickerBaseDirective {
583
582
  this.updateCalendar();
584
583
  }
585
584
  updateValidityOnBlur() {
585
+ this._focusedInput = null;
586
586
  this.onTouchCallback();
587
587
  if (this._ngControl) {
588
588
  if (this.hasProjectedInputs) {
@@ -934,4 +934,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
934
934
  type: HostListener,
935
935
  args: ['keydown', ['$event']]
936
936
  }] } });
937
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1ksZ0JBQWdCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUM1RixZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVksS0FBSyxFQUFFLFNBQVMsRUFDN0MsUUFBUSxFQUFFLE1BQU0sRUFDL0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFDMUQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xGLE9BQU8sRUFDb0MsU0FBUyxFQUNoRCxhQUFhLEVBQUUsaUJBQWlCLEVBQ25DLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLElBQUksRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQW1DLE1BQU0sMENBQTBDLENBQUM7QUFDN0gsT0FBTyxFQUFtQyxNQUFNLEVBQUUsU0FBUyxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUMvRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEUsT0FBTyxFQUNILGlCQUFpQixFQUFFLHNCQUFzQixFQUFxQixhQUFhLEVBQzNFLGlCQUFpQixFQUFFLG9CQUFvQixFQUMxQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFDSCxvQkFBb0IsRUFBRSxpQkFBaUIsRUFFMUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQWEsd0JBQXdCLEVBQUUsK0JBQStCLEVBQUUsOEJBQThCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoTixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBRTlELE1BQU0sbUNBQW1DLEdBQUcsS0FBSyxDQUFDO0FBRWxEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFtQkgsTUFBTSxPQUFPLDJCQUE0QixTQUFRLG1CQUFtQjtJQWtEaEU7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxJQUNXLGNBQWMsQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDckIsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQ0FBaUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFzQ0Q7Ozs7O09BS0c7SUFDSCxJQUNXLFFBQVEsQ0FBQyxLQUFvQjtRQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILElBQ1csUUFBUSxDQUFDLEtBQW9CO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQ1csZUFBZSxDQUFDLEtBQXNDO1FBQzdELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUErRUQsd0JBQXdCO0lBQ3hCLElBQVcsYUFBYTtRQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLG9DQUFvQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixJQUFXLGFBQWE7UUFDcEIsT0FBTyxZQUFZLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDO2VBQ2pFLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSDs7O09BR0c7SUFDSCxJQUNvQixNQUFNO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBb0IsTUFBTSxDQUFDLEtBQWE7UUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQztZQUNELHVCQUF1QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixJQUFXLGlCQUFpQjtRQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ2xDLE9BQU8sR0FBRyxNQUFNLEdBQUcsbUNBQW1DLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQW9CLFNBQVM7UUFDekIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFDVyxLQUFLLENBQUMsS0FBdUI7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixJQUFXLGtCQUFrQjtRQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQVcsY0FBYztRQUNyQixPQUFPLDhCQUE4QixDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUF1QixlQUFlO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFZLFFBQVE7UUFDaEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFxQixDQUFDLENBQUM7WUFDdkUsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3BELENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsSUFBWSxRQUFRO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBWSx1QkFBdUI7UUFDL0IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxJQUFZLHFCQUFxQjtRQUM3QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQWdDRCxZQUFZLE9BQW1CLEVBQ1IsU0FBaUIsRUFDMUIsUUFBc0IsRUFDeEIsU0FBbUIsRUFDbkIsSUFBdUIsRUFDSSxlQUFrQyxFQUMzQixlQUFtQztRQUM3RSxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUxqQyxhQUFRLEdBQVIsUUFBUSxDQUFjO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUFDSSxvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUF6WXpFOzs7Ozs7Ozs7O1dBVUc7UUFFSSx1QkFBa0IsR0FBRyxDQUFDLENBQUM7UUErSTlCOzs7Ozs7O1dBT0c7UUFFYSxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQWtCakM7Ozs7Ozs7Ozs7V0FVRztRQUVJLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRS9COzs7Ozs7O1dBT0c7UUFFSSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7UUFFbkQsd0JBQXdCO1FBRWpCLGFBQVEsR0FBRyx1QkFBdUIsQ0FBQztRQXFKbEMscUJBQWdCLEdBQUcseUJBQXlCLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUMvRSxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixtQkFBYyxHQUFHLElBQUksQ0FBQztRQVN0QixzQkFBaUIsR0FDbUc7WUFDcEgsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3JDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEQsQ0FBQztRQUNFLDJCQUFzQixHQUFvQjtZQUM5QyxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLEtBQUssRUFBRSxJQUFJO1lBQ1gsYUFBYSxFQUFFLElBQUk7U0FDdEIsQ0FBQztRQUNNLDZCQUF3QixHQUFvQjtZQUNoRCxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLEtBQUssRUFBRSxLQUFLO1lBQ1osYUFBYSxFQUFFLElBQUk7U0FDdEIsQ0FBQztRQUNNLHFCQUFnQixHQUFtQyxJQUFJLENBQUM7UUFDeEQsb0JBQWUsR0FBZSxJQUFJLENBQUM7UUFDbkMsc0JBQWlCLEdBQWUsSUFBSSxDQUFDO1FBNE9uQyxvQkFBZSxHQUFHLEdBQUcsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRSxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxlQUFlO3FCQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekQsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBNU9FLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2hELENBQUM7SUFFRCx3QkFBd0I7SUFHakIsU0FBUyxDQUFDLEtBQW9CO1FBQ2pDLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUTtnQkFDOUIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqQixDQUFDO2dCQUNELE1BQU07WUFDVixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVU7Z0JBQ2hDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNmLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsQ0FBQztnQkFDRCxNQUFNO1FBQ2QsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxJQUFJLENBQUMsZUFBaUM7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25DLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDOUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUI7WUFDOUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFDMUIsZUFBZSxDQUFDLENBQUM7UUFFdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZTthQUNqQyxNQUFNLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksS0FBSztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksTUFBTSxDQUFDLGVBQWlDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksTUFBTSxDQUFDLFNBQWUsRUFBRSxPQUFjO1FBQ3pDLE9BQU8sR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDO1FBQy9CLE1BQU0sU0FBUyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixVQUFVLENBQUMsS0FBZ0I7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLGdCQUFnQixDQUFDLEVBQU87UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsd0JBQXdCO0lBQ2pCLGlCQUFpQixDQUFDLEVBQU87UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixRQUFRLENBQUMsT0FBd0I7UUFDcEMsTUFBTSxLQUFLLEdBQWMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLDBCQUEwQixDQUErQixDQUFDO2dCQUN6SCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSx3QkFBd0IsQ0FBNkIsQ0FBQztnQkFDbkgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2hELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzlDLENBQUM7WUFDTCxDQUFDO1lBRUQsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsR0FBRyxJQUFJLEtBQUssSUFBSSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQzttQkFDL0QsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLElBQUksWUFBWSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7bUJBQ2xFLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxZQUFZLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUQsQ0FBQztJQUVELHdCQUF3QjtJQUNqQix5QkFBeUIsQ0FBRSxFQUFPO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixnQkFBZ0IsQ0FBRSxVQUFtQjtRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYztJQUNQLFFBQVE7UUFDWCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFZLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsY0FBYztJQUNFLGVBQWU7UUFDM0IsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixzSEFBc0g7WUFDdEg7OztlQUdHO1lBQ0gsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzdCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsV0FBVyxDQUFDLE9BQXNCO1FBQ3JDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNSLFdBQVc7UUFDdkIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixjQUFjO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7SUFDN0MsQ0FBQztJQWNPLGdCQUFnQixDQUFDLGNBQWlDLEVBQUUsU0FBa0I7UUFDMUUsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEUsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNsQyxjQUFjLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQy9GLENBQUM7aUJBQU0sQ0FBQztnQkFDSixjQUFjLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQ2pHLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLGNBQWMsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVksZ0JBQWdCO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELElBQVksYUFBYTtRQUNyQixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVPLGVBQWUsQ0FBQyxhQUFxQjtRQUN6QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ25DLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxhQUFhLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxDQUFrQztRQUNwRCxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pELGdCQUFnQjtZQUNoQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixjQUFjO1lBQ2QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUM5QixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3pFLE1BQU0sWUFBWSxHQUFHLENBQStCLENBQUM7WUFDckQsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDM0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM3QyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDM0IsT0FBTztZQUNYLENBQUM7WUFFRCxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN6RSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQStCLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBZ0I7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUN6QixDQUFDLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNqRCxDQUFDO3lCQUFNLENBQUM7d0JBQ0osQ0FBQyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDakQsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7Z0JBQ3RELENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDO2dCQUN0RCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksMEJBQTBCLENBQStCLENBQUM7WUFDcEgsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksd0JBQXdCLENBQTZCLENBQUM7WUFDOUcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM5QyxHQUFHLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzVDLE9BQU87UUFDWCxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QiwyQ0FBMkM7UUFDM0MsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDeEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUM1QyxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBb0I7UUFDdEMsSUFBSSxRQUFRLEdBQVMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRixJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNSLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBb0I7UUFDdEMsSUFBSSxRQUFRLEdBQVMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkYsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDTixRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEQsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRU8sY0FBYztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxZQUFZLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksMEJBQTBCLENBQStCLENBQUM7WUFDcEgsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksd0JBQXdCLENBQTZCLENBQUM7WUFDOUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoSCxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQWdCLEVBQUUsUUFBZSxFQUFFLFFBQWU7UUFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUUsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxZQUFZLENBQUMsU0FBaUI7UUFDbEMsT0FBTztZQUNILEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSTtZQUMzQixHQUFHLEVBQUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO1NBQ3JFLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQWdCO1FBQ25DLElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxHQUFHLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQixHQUFHLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBYSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBVyxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVPLDJCQUEyQjtRQUMvQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLDBCQUEwQixDQUErQixDQUFDO1lBQ3BILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLHdCQUF3QixDQUE2QixDQUFDO1lBQzlHLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNmLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBVztxQkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7cUJBQy9CLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDZixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDYixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDdkQsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztvQkFDN0MsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDUCxHQUFHLENBQUMsY0FBYyxDQUFDLFdBQVc7cUJBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMvQixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2YsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBYSxFQUFFLENBQUM7b0JBQ2pFLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBYSxFQUFFLENBQUM7b0JBQ3JELENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdCLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7cUJBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMvQixTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUNqQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztvQkFDaEMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO2lCQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDL0IsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDakIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQ2hDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdCLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7cUJBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMvQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUNyQixhQUFhLEVBQUUsTUFBTTtZQUNyQixjQUFjLEVBQUUsT0FBTztTQUMxQixDQUFDO1FBQ0YsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGdCQUFnQixHQUFHLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbEcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUN0RSxDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN2RyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWU7UUFDbkIsdUdBQXVHO1FBQ3ZHLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDekcsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksMEJBQTBCLENBQUMsQ0FBQztZQUN0RixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSx3QkFBd0IsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxNQUFNLEdBQUc7Z0JBQ1YsS0FBSyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBYTtnQkFDekMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBYTthQUN4QyxDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFTyxZQUFZO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLDBCQUEwQixDQUErQixDQUFDO1FBQ3JILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLHdCQUF3QixDQUE2QixDQUFDO1FBQy9HLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM5QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixNQUFNLEtBQUssR0FBRyxDQUFvQyxDQUFDO1lBQ25ELEtBQUssQ0FBQyxjQUFjLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdCLE1BQU0sS0FBSyxHQUFHLENBQW9DLENBQUM7WUFDbkQsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3hELEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDeEQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixNQUFNLEtBQUssR0FBRyxDQUFvQyxDQUFDO1lBQ25ELEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sNEJBQTRCLENBQUMsaUJBQWdEO1FBQ2pGLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTNHLGlCQUFpQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25DLGlCQUFpQixDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25GLGlCQUFpQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3JELGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsRyxDQUFDOzhHQXovQlEsMkJBQTJCLDRDQXdZeEIsU0FBUyxrR0FJVCxpQkFBaUIsYUFDTCxvQkFBb0I7a0dBN1luQywyQkFBMkIscUtBNEJoQixnQkFBZ0IsbVZBd0toQixnQkFBZ0Isb05Bbk56QjtZQUNQLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ3JGLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtTQUNwRiw2REE2T2EsaUJBQWlCLGdGQUdqQix5QkFBeUIsd0ZBSXpCLDhCQUE4QiwyQkFBVSxXQUFXLGtEQVZoRCwrQkFBK0IsK0VBUnJDLHNCQUFzQiwyQkFBVSxnQkFBZ0IsOERBSWhELGlCQUFpQiw0RkMxU2hDLDJsRUFnREEsNENEdUJRLElBQUksNkZBQ0osZ0JBQWdCLG9KQUNoQixnQkFBZ0IsMkZBQ2hCLHNCQUFzQixvSUFDdEIsaUJBQWlCLDBIQUNqQixrQkFBa0IseUVBQ2xCLHlCQUF5Qjs7MkZBR3BCLDJCQUEyQjtrQkFsQnZDLFNBQVM7K0JBQ0ksdUJBQXVCLGFBRXRCO3dCQUNQLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsNkJBQTZCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTt3QkFDckYsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsNkJBQTZCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtxQkFDcEYsY0FDVyxJQUFJLFdBQ1A7d0JBQ0wsSUFBSTt3QkFDSixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3dCQUN0QixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIseUJBQXlCO3FCQUM1Qjs7MEJBMFlJLE1BQU07MkJBQUMsU0FBUzs7MEJBSWhCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxvQkFBb0I7eUNBOVhyQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBZUMsZUFBZTtzQkFEckIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFvQi9CLFNBQVM7c0JBRGYsS0FBSztnQkFnQkssY0FBYztzQkFEeEIsS0FBSztnQkFvQlUsZUFBZTtzQkFEOUIsS0FBSztnQkFnQlUsYUFBYTtzQkFENUIsS0FBSztnQkFZVSxXQUFXO3NCQUQxQixLQUFLO2dCQVVLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBaUJLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBZUssZUFBZTtzQkFEekIsS0FBSztnQkFxQlUsV0FBVztzQkFEMUIsS0FBSztnQkFpQlUsTUFBTTtzQkFEckIsS0FBSztnQkFlQyxlQUFlO3NCQURyQixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQVkvQixXQUFXO3NCQURqQixNQUFNO2dCQUtBLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyw2QkFBNkI7Z0JBSWxDLGdCQUFnQjtzQkFEdkIsU0FBUzt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFLdEQsY0FBYztzQkFEcEIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBS3JCLGVBQWU7c0JBRHJCLGVBQWU7dUJBQUMsK0JBQStCO2dCQUl6QyxLQUFLO3NCQURYLFlBQVk7dUJBQUMsaUJBQWlCO2dCQUl4QixhQUFhO3NCQURuQixZQUFZO3VCQUFDLHlCQUF5QjtnQkFLaEMscUJBQXFCO3NCQUQzQixZQUFZO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkE0Qi9DLE1BQU07c0JBRHpCLEtBQUs7Z0JBNkRLLEtBQUs7c0JBRGYsS0FBSztnQkFzRkMsU0FBUztzQkFGZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCwgYm9vbGVhbkF0dHJpYnV0ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbmplY3QsIEluamVjdG9yLCBJbnB1dCwgTE9DQUxFX0lELFxuICAgIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCwgTmdJZiwgZ2V0TG9jYWxlRmlyc3REYXlPZldlZWsgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsXG4gICAgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgbm9vcCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ2FsZW5kYXJTZWxlY3Rpb24sIElneENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vY2FsZW5kYXIvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VUeXBlIH0gZnJvbSAnLi4vY29yZS9kYXRlcyc7XG5pbXBvcnQgeyBEYXRlUmFuZ2VQaWNrZXJSZXNvdXJjZVN0cmluZ3NFTiwgSURhdGVSYW5nZVBpY2tlclJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9kYXRlLXJhbmdlLXBpY2tlci1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgaXNEYXRlLCBwYXJzZURhdGUsIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4Q2FsZW5kYXJDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9jYWxlbmRhci1jb250YWluZXIvY2FsZW5kYXItY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaWNrZXJCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vcGlja2VyLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9waWNrZXItaWNvbnMuY29tbW9uJztcbmltcG9ydCB7IERhdGVUaW1lVXRpbCB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3V0aWwvZGF0ZS10aW1lLnV0aWwnO1xuaW1wb3J0IHsgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgICBJZ3hJbnB1dERpcmVjdGl2ZSwgSWd4SW5wdXRHcm91cENvbXBvbmVudCwgSWd4SW5wdXRHcm91cFR5cGUsIElneElucHV0U3RhdGUsXG4gICAgSWd4TGFiZWxEaXJlY3RpdmUsIElHWF9JTlBVVF9HUk9VUF9UWVBFXG59IGZyb20gJy4uL2lucHV0LWdyb3VwL3B1YmxpY19hcGknO1xuaW1wb3J0IHtcbiAgICBBdXRvUG9zaXRpb25TdHJhdGVneSwgSWd4T3ZlcmxheVNlcnZpY2UsIE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzLCBPdmVybGF5RXZlbnRBcmdzLFxuICAgIE92ZXJsYXlTZXR0aW5ncywgUG9zaXRpb25TZXR0aW5nc1xufSBmcm9tICcuLi9zZXJ2aWNlcy9wdWJsaWNfYXBpJztcbmltcG9ydCB7IERhdGVSYW5nZSwgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50LCBJZ3hEYXRlUmFuZ2VJbnB1dHNCYXNlQ29tcG9uZW50LCBJZ3hEYXRlUmFuZ2VTZXBhcmF0b3JEaXJlY3RpdmUsIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50LCBEYXRlUmFuZ2VQaWNrZXJGb3JtYXRQaXBlIH0gZnJvbSAnLi9kYXRlLXJhbmdlLXBpY2tlci1pbnB1dHMuY29tbW9uJztcbmltcG9ydCB7IElneFByZWZpeERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcHJlZml4L3ByZWZpeC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgZmFkZUluLCBmYWRlT3V0IH0gZnJvbSAnaWduaXRldWktYW5ndWxhci9hbmltYXRpb25zJztcblxuY29uc3QgU2luZ2xlSW5wdXREYXRlc0NvbmNhdGVuYXRpb25TdHJpbmcgPSAnIC0gJztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgYWJpbGl0eSB0byBzZWxlY3QgYSByYW5nZSBvZiBkYXRlcyBmcm9tIGEgY2FsZW5kYXIgVUkgb3IgZWRpdGFibGUgaW5wdXRzLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4RGF0ZVJhbmdlTW9kdWxlXG4gKlxuICogQGlneFRoZW1lIGlneC1pbnB1dC1ncm91cC10aGVtZSwgaWd4LWNhbGVuZGFyLXRoZW1lLCBpZ3gtZGF0ZS1yYW5nZS1waWNrZXItdGhlbWVcbiAqXG4gKiBAaWd4S2V5d29yZHMgZGF0ZSwgcmFuZ2UsIGRhdGUgcmFuZ2UsIGRhdGUgcGlja2VyXG4gKlxuICogQGlneEdyb3VwIHNjaGVkdWxpbmdcbiAqXG4gKiBAcmVtYXJrc1xuICogSXQgZGlzcGxheXMgdGhlIHJhbmdlIHNlbGVjdGlvbiBpbiBhIHNpbmdsZSBvciB0d28gaW5wdXQgZmllbGRzLlxuICogVGhlIGRlZmF1bHQgdGVtcGxhdGUgZGlzcGxheXMgYSBzaW5nbGUgKnJlYWRvbmx5KiBpbnB1dCBmaWVsZFxuICogd2hpbGUgcHJvamVjdGluZyBgaWd4LWRhdGUtcmFuZ2Utc3RhcnRgIGFuZCBgaWd4LWRhdGUtcmFuZ2UtZW5kYFxuICogZGlzcGxheXMgdHdvICplZGl0YWJsZSogaW5wdXQgZmllbGRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIG1vZGU9XCJkcm9wZG93blwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LWRhdGUtcmFuZ2UtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBJZ3hEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJZ3hJY29uQ29tcG9uZW50LFxuICAgICAgICBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LFxuICAgICAgICBJZ3hJbnB1dERpcmVjdGl2ZSxcbiAgICAgICAgSWd4UHJlZml4RGlyZWN0aXZlLFxuICAgICAgICBEYXRlUmFuZ2VQaWNrZXJGb3JtYXRQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBQaWNrZXJCYXNlRGlyZWN0aXZlXG4gICAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgZGlzcGxheWVkIG1vbnRoIHZpZXdzLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IGlzIGAyYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW2Rpc3BsYXlNb250aHNDb3VudF09XCIzXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheU1vbnRoc0NvdW50ID0gMjtcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB3aGV0aGVyIGRhdGVzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IG1vbnRoIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFtoaWRlT3V0c2lkZURheXNdPVwidHJ1ZVwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBoaWRlT3V0c2lkZURheXM6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBIGN1c3RvbSBmb3JtYXR0ZXIgZnVuY3Rpb24sIGFwcGxpZWQgb24gdGhlIHNlbGVjdGVkIG9yIHBhc3NlZCBpbiBkYXRlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHJpdmF0ZSBkYXlGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImVuXCIsIHsgd2Vla2RheTogXCJsb25nXCIgfSk7XG4gICAgICogcHJpdmF0ZSBtb250aEZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW5cIiwgeyBtb250aDogXCJsb25nXCIgfSk7XG4gICAgICpcbiAgICAgKiBwdWJsaWMgZm9ybWF0dGVyKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgICAqICByZXR1cm4gYCR7dGhpcy5kYXlGb3JtYXR0ZXIuZm9ybWF0KGRhdGUpfSAtICR7dGhpcy5tb250aEZvcm1hdHRlci5mb3JtYXQoZGF0ZSl9IC0gJHtkYXRlLmdldEZ1bGxZZWFyKCl9YDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW2Zvcm1hdHRlcl09XCJmb3JtYXR0ZXJcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmb3JtYXR0ZXI6ICh2YWw6IERhdGVSYW5nZSkgPT4gc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHRleHQgb2YgdGhlIGNhbGVuZGFyIGRpYWxvZyAqKkRvbmUqKiBidXR0b24uXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBmcm9tIHJlc291cmNlIHN0cmluZ3MsIGBcIkRvbmVcImAgZm9yIHRoZSBidWlsdC1pbiBFTi5cbiAgICAgKiBUaGUgYnV0dG9uIHdpbGwgb25seSBzaG93IHVwIGluIGBkaWFsb2dgIG1vZGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIGRvbmVCdXR0b25UZXh0PVwi5a6M5LqGXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGRvbmVCdXR0b25UZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZG9uZUJ1dHRvblRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRvbmVCdXR0b25UZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9kb25lQnV0dG9uVGV4dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9kYXRlX3JhbmdlX3BpY2tlcl9kb25lX2J1dHRvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZG9uZUJ1dHRvblRleHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBvdmVybGF5IHNldHRpbmdzIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgY2FsZW5kYXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFtvdmVybGF5U2V0dGluZ3NdPVwiY3VzdG9tT3ZlcmxheVNldHRpbmdzXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgb3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3M7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9ybWF0IHVzZWQgd2hlbiBlZGl0YWJsZSBpbnB1dHMgYXJlIG5vdCBmb2N1c2VkLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBVc2VzIEFuZ3VsYXIncyBEYXRlUGlwZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgZGlzcGxheUZvcm1hdD1cIkVFL00veXlcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGRpc3BsYXlGb3JtYXQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBleHBlY3RlZCB1c2VyIGlucHV0IGZvcm1hdCBhbmQgcGxhY2Vob2xkZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIGlucHV0Rm9ybWF0PVwiZGQvTU0veXlcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBpbnB1dEZvcm1hdDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gdmFsdWUgaW4gYSB2YWxpZCByYW5nZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbbWluVmFsdWVdPVwibWluRGF0ZVwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtaW5WYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtaW5WYWx1ZSgpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHZhbHVlIGluIGEgdmFsaWQgcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW21heFZhbHVlXT1cIm1heERhdGVcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWF4VmFsdWUodmFsdWU6IERhdGUgfCBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogRGF0ZSB8IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJRGF0ZVJhbmdlUGlja2VyUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJlc291cmNlU3RyaW5ncygpOiBJRGF0ZVJhbmdlUGlja2VyUmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgcGxhY2Vob2xkZXJgIGZvciBzaW5nbGUtaW5wdXQgYElneERhdGVSYW5nZVBpY2tlckNvbXBvbmVudGAuXG4gICAgICpcbiAgICAgKiAgIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW3BsYWNlaG9sZGVyXT1cIidDaG9vc2UgeW91ciBkYXRlcydcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBwbGFjZWhvbGRlciA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHRoZSBjb250YWluZXIgdXNlZCBmb3IgdGhlIHBvcHVwIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqICBgb3V0bGV0YCBpcyBhbiBpbnN0YW5jZSBvZiBgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZWAgb3IgYW4gYEVsZW1lbnRSZWZgLlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgaWd4T3ZlcmxheU91dGxldCAjb3V0bGV0PVwib3ZlcmxheS1vdXRsZXRcIj48L2Rpdj5cbiAgICAgKiAvLy4uXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbb3V0bGV0XT1cIm91dGxldFwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBvdXRsZXQ6IElneE92ZXJsYXlPdXRsZXREaXJlY3RpdmUgfCBFbGVtZW50UmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgd2VlayBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW3Nob3dXZWVrTnVtYmVyc109XCJ0cnVlXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2hvd1dlZWtOdW1iZXJzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHBpY2tlcidzIHZhbHVlIGNoYW5nZXMuIFVzZWQgZm9yIHR3by13YXkgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgWyh2YWx1ZSldPVwiZGF0ZVwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZGF0ZS1yYW5nZS1waWNrZXInKVxuICAgIHB1YmxpYyBjc3NDbGFzcyA9ICdpZ3gtZGF0ZS1yYW5nZS1waWNrZXInO1xuXG4gICAgQFZpZXdDaGlsZChJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAVmlld0NoaWxkKElneElucHV0RGlyZWN0aXZlKVxuICAgIHB1YmxpYyBpbnB1dERpcmVjdGl2ZTogSWd4SW5wdXREaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneERhdGVSYW5nZUlucHV0c0Jhc2VDb21wb25lbnQpXG4gICAgcHVibGljIHByb2plY3RlZElucHV0czogUXVlcnlMaXN0PElneERhdGVSYW5nZUlucHV0c0Jhc2VDb21wb25lbnQ+O1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hMYWJlbERpcmVjdGl2ZSlcbiAgICBwdWJsaWMgbGFiZWw6IElneExhYmVsRGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlKVxuICAgIHB1YmxpYyBwaWNrZXJBY3Rpb25zOiBJZ3hQaWNrZXJBY3Rpb25zRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hEYXRlUmFuZ2VTZXBhcmF0b3JEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgZGF0ZVNlcGFyYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBkYXRlU2VwYXJhdG9yKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRlU2VwYXJhdG9yID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X2RhdGVfcmFuZ2VfcGlja2VyX2RhdGVfc2VwYXJhdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlU2VwYXJhdG9yO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgYXBwbGllZEZvcm1hdCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gRGF0ZVRpbWVVdGlsLmdldExvY2FsZURhdGVGb3JtYXQodGhpcy5sb2NhbGUsIHRoaXMuZGlzcGxheUZvcm1hdClcbiAgICAgICAgICAgIHx8IERhdGVUaW1lVXRpbC5ERUZBVUxUX0lOUFVUX0ZPUk1BVDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIGxvY2FsZT1cImpwXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGxvY2FsZWAgb2YgdGhlIGRhdGUtcmFuZ2UtcGlja2VyLlxuICAgICAqIElmIG5vdCBzZXQsIGRlZmF1bHRzIHRvIGFwcGxpY2F0aW9uJ3MgbG9jYWxlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBsb2NhbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgZGF0ZS1waWNrZXIuXG4gICAgICogRXhwZWN0cyBhIHZhbGlkIEJDUCA0NyBsYW5ndWFnZSB0YWcuXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIHNldCBsb2NhbGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9sb2NhbGUgPSB2YWx1ZTtcbiAgICAgICAgLy8gaWYgdmFsdWUgaXMgaW52YWxpZCwgc2V0IGl0IGJhY2sgdG8gX2xvY2FsZUlkXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBnZXRMb2NhbGVGaXJzdERheU9mV2Vlayh0aGlzLl9sb2NhbGUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2NhbGUgPSB0aGlzLl9sb2NhbGVJZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXRMb2NhbGUoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheUZvcm1hdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBzaW5nbGVJbnB1dEZvcm1hdCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5hcHBsaWVkRm9ybWF0O1xuICAgICAgICByZXR1cm4gYCR7Zm9ybWF0fSR7U2luZ2xlSW5wdXREYXRlc0NvbmNhdGVuYXRpb25TdHJpbmd9JHtmb3JtYXR9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGNhbGVuZGFyIHN0YXRlLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuZGF0ZVJhbmdlLmNvbGxhcHNlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGNvbGxhcHNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxhcHNlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIHZhbHVlIC8gcmFuZ2UgZnJvbSB0aGUgY2FsZW5kYXJcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIGN1cnJlbnQgdmFsdWUgaXMgb2YgdHlwZSBgRGF0ZVJhbmdlYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgbmV3VmFsdWU6IERhdGVSYW5nZSA9IHsgc3RhcnQ6IG5ldyBEYXRlKFwiMi8yLzIwMTJcIiksIGVuZDogbmV3IERhdGUoXCIzLzMvMjAxM1wiKX07XG4gICAgICogdGhpcy5kYXRlUmFuZ2VQaWNrZXIudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IERhdGVSYW5nZSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBEYXRlUmFuZ2UgfCBudWxsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgaGFzUHJvamVjdGVkSW5wdXRzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0ZWRJbnB1dHM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBzZXBhcmF0b3JDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ2lneC1kYXRlLXJhbmdlLXBpY2tlcl9fbGFiZWwnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXQgdG9nZ2xlQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyQ29udGFpbmVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3Ioe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgICAgICAgIHJldHVybiAoZXJyb3IgJiYgZXJyb3IucmVxdWlyZWQpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGNhbGVuZGFyKCk6IElneENhbGVuZGFyQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGRyb3Bkb3duT3ZlcmxheVNldHRpbmdzKCk6IE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kcm9wRG93bk92ZXJsYXlTZXR0aW5ncywgdGhpcy5vdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGRpYWxvZ092ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGlhbG9nT3ZlcmxheVNldHRpbmdzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gZ2V0Q3VycmVudFJlc291cmNlU3RyaW5ncyhEYXRlUmFuZ2VQaWNrZXJSZXNvdXJjZVN0cmluZ3NFTik7XG4gICAgcHJpdmF0ZSBfZG9uZUJ1dHRvblRleHQgPSBudWxsO1xuICAgIHByaXZhdGUgX2RhdGVTZXBhcmF0b3IgPSBudWxsO1xuICAgIHByaXZhdGUgX3ZhbHVlOiBEYXRlUmFuZ2UgfCBudWxsO1xuICAgIHByaXZhdGUgX292ZXJsYXlJZDogc3RyaW5nO1xuICAgIHByaXZhdGUgX25nQ29udHJvbDogTmdDb250cm9sO1xuICAgIHByaXZhdGUgX3N0YXR1c0NoYW5nZXMkOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfY2FsZW5kYXI6IElneENhbGVuZGFyQ29tcG9uZW50O1xuICAgIHByaXZhdGUgX2NhbGVuZGFyQ29udGFpbmVyPzogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBfcG9zaXRpb25TZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncztcbiAgICBwcml2YXRlIF9mb2N1c2VkSW5wdXQ6IElneERhdGVSYW5nZUlucHV0c0Jhc2VDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheVN1YkZpbHRlcjpcbiAgICAgICAgW01vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxPdmVybGF5RXZlbnRBcmdzPiwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPE92ZXJsYXlFdmVudEFyZ3MgfCBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncz5dID0gW1xuICAgICAgICAgICAgZmlsdGVyKHggPT4geC5pZCA9PT0gdGhpcy5fb3ZlcmxheUlkKSxcbiAgICAgICAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLl9kZXN0cm95JCwgdGhpcy5jbG9zZWQpKVxuICAgICAgICBdO1xuICAgIHByaXZhdGUgX2RpYWxvZ092ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbkVzY2FwZTogdHJ1ZVxuICAgIH07XG4gICAgcHJpdmF0ZSBfZHJvcERvd25PdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHtcbiAgICAgICAgY2xvc2VPbk91dHNpZGVDbGljazogdHJ1ZSxcbiAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChkYXRlUmFuZ2U6IERhdGVSYW5nZSkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBvblRvdWNoQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICAgIHByaXZhdGUgb25WYWxpZGF0b3JDaGFuZ2U6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgQEluamVjdChMT0NBTEVfSUQpIF9sb2NhbGVJZDogc3RyaW5nLFxuICAgICAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KElneE92ZXJsYXlTZXJ2aWNlKSBwcml2YXRlIF9vdmVybGF5U2VydmljZTogSWd4T3ZlcmxheVNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0lOUFVUX0dST1VQX1RZUEUpIF9pbnB1dEdyb3VwVHlwZT86IElneElucHV0R3JvdXBUeXBlKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQsIF9sb2NhbGVJZCwgX2lucHV0R3JvdXBUeXBlKTtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSB0aGlzLmxvY2FsZSB8fCB0aGlzLl9sb2NhbGVJZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIHRoaXMucGxhdGZvcm0uS0VZTUFQLkFSUk9XX1VQOlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfRE9XTjpcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBkYXRlIHJhbmdlIHBpY2tlcidzIGRyb3Bkb3duIG9yIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgI2RhdGVSYW5nZT48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbiAoY2xpY2spPVwiZGF0ZVJhbmdlLm9wZW4oKVwiPk9wZW4gRGlhbG9nPC9idXR0b25cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbihvdmVybGF5U2V0dGluZ3M/OiBPdmVybGF5U2V0dGluZ3MpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCB8fCB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuaXNEcm9wZG93blxuICAgICAgICAgICAgPyB0aGlzLmRyb3Bkb3duT3ZlcmxheVNldHRpbmdzXG4gICAgICAgICAgICA6IHRoaXMuZGlhbG9nT3ZlcmxheVNldHRpbmdzXG4gICAgICAgICAgICAsIG92ZXJsYXlTZXR0aW5ncyk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheUlkID0gdGhpcy5fb3ZlcmxheVNlcnZpY2VcbiAgICAgICAgICAgIC5hdHRhY2goSWd4Q2FsZW5kYXJDb250YWluZXJDb21wb25lbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZiwgc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvT3ZlcmxheUV2ZW50cygpO1xuICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5zaG93KHRoaXMuX292ZXJsYXlJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBkYXRlIHJhbmdlIHBpY2tlcidzIGRyb3Bkb3duIG9yIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgI2RhdGVSYW5nZT48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbiAoY2xpY2spPVwiZGF0ZVJhbmdlLmNsb3NlKClcIj5DbG9zZSBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmhpZGUodGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGRhdGUgcmFuZ2UgcGlja2VyJ3MgZHJvcGRvd24gb3IgZGlhbG9nXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyICNkYXRlUmFuZ2U+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICpcbiAgICAgKiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZ3hCdXR0b24gKGNsaWNrKT1cImRhdGVSYW5nZS50b2dnbGUoKVwiPlRvZ2dsZSBEaWFsb2c8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKG92ZXJsYXlTZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4ob3ZlcmxheVNldHRpbmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgYSByYW5nZSBvZiBkYXRlcy4gSWYgbm8gYGVuZERhdGVgIGlzIHBhc3NlZCwgcmFuZ2UgaXMgMSBkYXkgKG9ubHkgYHN0YXJ0RGF0ZWApXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgc2VsZWN0Rml2ZURheVJhbmdlKCkge1xuICAgICAqICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICogIGNvbnN0IGluRml2ZURheXMgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpICsgNSkpO1xuICAgICAqICB0aGlzLmRhdGVSYW5nZS5zZWxlY3QodG9kYXksIGluRml2ZURheXMpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZT86IERhdGUpOiB2b2lkIHtcbiAgICAgICAgZW5kRGF0ZSA9IGVuZERhdGUgPz8gc3RhcnREYXRlO1xuICAgICAgICBjb25zdCBkYXRlUmFuZ2UgPSBbc3RhcnREYXRlLCBlbmREYXRlXTtcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb24oZGF0ZVJhbmdlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZVJhbmdlKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgICAgICBjb25zdCB2YWx1ZTogRGF0ZVJhbmdlID0gY29udHJvbC52YWx1ZTtcbiAgICAgICAgY29uc3QgZXJyb3JzID0ge307XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRJbnB1dCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZElucHV0ID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQpIGFzIElneERhdGVSYW5nZUVuZENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0SW5wdXQuZGF0ZVRpbWVFZGl0b3IudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIHsgc3RhcnRWYWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFlbmRJbnB1dC5kYXRlVGltZUVkaXRvci52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgeyBlbmRWYWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHBhcnNlRGF0ZSh0aGlzLm1pblZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHBhcnNlRGF0ZSh0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFyc2VEYXRlKHZhbHVlLnN0YXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHBhcnNlRGF0ZSh2YWx1ZS5lbmQpO1xuICAgICAgICAgICAgaWYgKChtaW4gJiYgc3RhcnQgJiYgRGF0ZVRpbWVVdGlsLmxlc3NUaGFuTWluVmFsdWUoc3RhcnQsIG1pbiwgZmFsc2UpKVxuICAgICAgICAgICAgICAgIHx8IChtaW4gJiYgZW5kICYmIERhdGVUaW1lVXRpbC5sZXNzVGhhbk1pblZhbHVlKGVuZCwgbWluLCBmYWxzZSkpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihlcnJvcnMsIHsgbWluVmFsdWU6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKG1heCAmJiBzdGFydCAmJiBEYXRlVGltZVV0aWwuZ3JlYXRlclRoYW5NYXhWYWx1ZShzdGFydCwgbWF4LCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgfHwgKG1heCAmJiBlbmQgJiYgRGF0ZVRpbWVVdGlsLmdyZWF0ZXJUaGFuTWF4VmFsdWUoZW5kLCBtYXgsIGZhbHNlKSkpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgeyBtYXhWYWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCA+IDAgPyBlcnJvcnMgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlPyhmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmdDb250cm9sID0gdGhpcy5faW5qZWN0b3IuZ2V0PE5nQ29udHJvbD4oTmdDb250cm9sLCBudWxsKTtcblxuICAgICAgICB0aGlzLmxvY2FsZSA9IHRoaXMubG9jYWxlIHx8IHRoaXMuX2xvY2FsZUlkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlRWRpdG9yRXZlbnRzKCk7XG4gICAgICAgIHRoaXMuY29uZmlnUG9zaXRpb25TdHJhdGVneSgpO1xuICAgICAgICB0aGlzLmNvbmZpZ092ZXJsYXlTZXR0aW5ncygpO1xuICAgICAgICB0aGlzLmNhY2hlRm9jdXNlZElucHV0KCk7XG4gICAgICAgIHRoaXMuYXR0YWNoT25Ub3VjaGVkKCk7XG5cbiAgICAgICAgdGhpcy5zZXRSZXF1aXJlZFRvSW5wdXRzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdHVzQ2hhbmdlcyQgPSB0aGlzLl9uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZWQuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBkZWxheSBpbnZvY2F0aW9ucyB1bnRpbCB0aGUgY3VycmVudCBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIGhhcyBjb21wbGV0ZWRcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbFNldFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0cygpO1xuICAgICAgICAgICAgLy8gQi5QLiAwNyBKdWx5IDIwMjEgLSBJZ3hEYXRlUmFuZ2VQaWNrZXIgbm90IHNob3dpbmcgaW5pdGlhbCBkaXNhYmxlZCBzdGF0ZSB3aXRoIENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCAjOTc3NlxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBpZiBkaXNhYmxlZCBpcyBwbGFjZWQgb24gdGhlIHJhbmdlIHBpY2tlciBlbGVtZW50IGFuZCB0aGVyZSBhcmUgcHJvamVjdGVkIGlucHV0c1xuICAgICAgICAgICAgICogcnVuIGNoYW5nZSBkZXRlY3Rpb24gc2luY2UgaWd4SW5wdXQgd2lsbCBpbml0aWFsbHkgc2V0IHRoZSBwcm9qZWN0ZWQgaW5wdXRzJyBkaXNhYmxlZCB0byBmYWxzZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMgJiYgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheUZvcm1hdCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUlucHV0Rm9ybWF0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2Rpc3BsYXlGb3JtYXQnXSAmJiB0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5Rm9ybWF0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2lucHV0Rm9ybWF0J10gJiYgdGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXRGb3JtYXQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlc1snZGlzYWJsZWQnXSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0dXNDaGFuZ2VzJCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdHVzQ2hhbmdlcyQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5kZXRhY2godGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXREaXJlY3RpdmUubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25TdGF0dXNDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbGlkaXR5U3RhdGUodGhpcy5pbnB1dERpcmVjdGl2ZSwgdGhpcy5pbnB1dEdyb3VwLmlzRm9jdXNlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGl0eVN0YXRlKGkuaW5wdXREaXJlY3RpdmUsIGkuaXNGb2N1c2VkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFJlcXVpcmVkVG9JbnB1dHMoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBzZXRWYWxpZGl0eVN0YXRlKGlucHV0RGlyZWN0aXZlOiBJZ3hJbnB1dERpcmVjdGl2ZSwgaXNGb2N1c2VkOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wgJiYgIXRoaXMuX25nQ29udHJvbC5kaXNhYmxlZCAmJiB0aGlzLmlzVG91Y2hlZE9yRGlydHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1ZhbGlkYXRvcnMgJiYgaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgaW5wdXREaXJlY3RpdmUudmFsaWQgPSB0aGlzLl9uZ0NvbnRyb2wudmFsaWQgPyBJZ3hJbnB1dFN0YXRlLlZBTElEIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnB1dERpcmVjdGl2ZS52YWxpZCA9IHRoaXMuX25nQ29udHJvbC52YWxpZCA/IElneElucHV0U3RhdGUuSU5JVElBTCA6IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0RGlyZWN0aXZlLnZhbGlkID0gSWd4SW5wdXRTdGF0ZS5JTklUSUFMO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNUb3VjaGVkT3JEaXJ0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC50b3VjaGVkIHx8IHRoaXMuX25nQ29udHJvbC5jb250cm9sLmRpcnR5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBoYXNWYWxpZGF0b3JzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKCEhdGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yIHx8ICEhdGhpcy5fbmdDb250cm9sLmNvbnRyb2wuYXN5bmNWYWxpZGF0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uKHNlbGVjdGlvbkRhdGE6IERhdGVbXSk6IHZvaWQge1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSB0aGlzLmV4dHJhY3RSYW5nZShzZWxlY3Rpb25EYXRhKTtcbiAgICAgICAgaWYgKCFuZXdWYWx1ZS5zdGFydCAmJiAhbmV3VmFsdWUuZW5kKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duICYmIHNlbGVjdGlvbkRhdGE/Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xvc2luZyhlOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB7IG93bmVyOiB0aGlzLCBjYW5jZWw6IGU/LmNhbmNlbCwgZXZlbnQ6IGU/LmV2ZW50IH07XG4gICAgICAgIHRoaXMuY2xvc2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRHJvcGRvd24gJiYgZT8uZXZlbnQgJiYgIXRoaXMuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAvLyBvdXRzaWRlIGNsaWNrXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkaXR5T25CbHVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hDYWxsYmFjaygpO1xuICAgICAgICAgICAgLy8gaW5wdXQgY2xpY2tcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cyAmJiB0aGlzLl9mb2N1c2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c2VkSW5wdXQuc2V0Rm9jdXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c2VkSW5wdXQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvT3ZlcmxheUV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmluZy5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmxheUV2ZW50ID0gZSBhcyBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncztcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB7IG93bmVyOiB0aGlzLCBjYW5jZWw6IG92ZXJsYXlFdmVudD8uY2FuY2VsLCBldmVudDogZS5ldmVudCB9O1xuICAgICAgICAgICAgdGhpcy5vcGVuaW5nLmVtaXQoYXJncyk7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5kZXRhY2godGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgICAgICAgICBvdmVybGF5RXZlbnQuY2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDYWxlbmRhckNvbnRhaW5lcihlLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhckNvbnRhaW5lciA9IGUuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXIoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmVkLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIud3JhcHBlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmNsb3NpbmcucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2luZyhlIGFzIE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuY2xvc2VkLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJZCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhckNvbnRhaW5lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZTogRGF0ZVJhbmdlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6IG51bGw7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXRzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkaXR5T25CbHVyKCkge1xuICAgICAgICB0aGlzLm9uVG91Y2hDYWxsYmFjaygpO1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX25nQ29udHJvbC52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaS51cGRhdGVJbnB1dFZhbGlkaXR5KElneElucHV0U3RhdGUuSU5WQUxJRCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLnVwZGF0ZUlucHV0VmFsaWRpdHkoSWd4SW5wdXRTdGF0ZS5JTklUSUFMKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbmdDb250cm9sLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IElneElucHV0U3RhdGUuSU5JVElBTDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURpc2FibGVkU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQ7XG4gICAgICAgICAgICBzdGFydC5pbnB1dERpcmVjdGl2ZS5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgICAgICAgICBlbmQuaW5wdXREaXJlY3RpdmUuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSZXF1aXJlZFRvSW5wdXRzKCk6IHZvaWQge1xuICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciBpZ3hJbnB1dCBzZXR0aW5nIHJlcXVpcmVkXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwICYmIHRoaXMuaW5wdXRHcm91cC5pc1JlcXVpcmVkICE9PSBpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLmlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cyAmJiB0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4gaS5pc1JlcXVpcmVkID0gaXNSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VNaW5WYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSk6IERhdGUgfCBudWxsIHtcbiAgICAgICAgbGV0IG1pblZhbHVlOiBEYXRlID0gcGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFtaW5WYWx1ZSAmJiB0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maWx0ZXIoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpWzBdO1xuICAgICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBwYXJzZURhdGUoc3RhcnQuZGF0ZVRpbWVFZGl0b3IubWluVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VNYXhWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSk6IERhdGUgfCBudWxsIHtcbiAgICAgICAgbGV0IG1heFZhbHVlOiBEYXRlID0gcGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFtYXhWYWx1ZSAmJiB0aGlzLnByb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmlsdGVyKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZUVuZENvbXBvbmVudClbMF07XG4gICAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSBwYXJzZURhdGUoZW5kLmRhdGVUaW1lRWRpdG9yLm1heFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY2FsZW5kYXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGVuZGFyLmRpc2FibGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbWluVmFsdWUgPSB0aGlzLnBhcnNlTWluVmFsdWUodGhpcy5taW5WYWx1ZSk7XG4gICAgICAgIGlmIChtaW5WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5kaXNhYmxlZERhdGVzLnB1c2goeyB0eXBlOiBEYXRlUmFuZ2VUeXBlLkJlZm9yZSwgZGF0ZVJhbmdlOiBbbWluVmFsdWVdIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5wYXJzZU1heFZhbHVlKHRoaXMubWF4VmFsdWUpO1xuICAgICAgICBpZiAobWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuZGlzYWJsZWREYXRlcy5wdXNoKHsgdHlwZTogRGF0ZVJhbmdlVHlwZS5BZnRlciwgZGF0ZVJhbmdlOiBbbWF4VmFsdWVdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmFuZ2U6IERhdGVbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy52YWx1ZT8uc3RhcnQgJiYgdGhpcy52YWx1ZT8uZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBfdmFsdWUgPSB0aGlzLnRvUmFuZ2VPZkRhdGVzKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgaWYgKERhdGVUaW1lVXRpbC5ncmVhdGVyVGhhbk1heFZhbHVlKF92YWx1ZS5zdGFydCwgX3ZhbHVlLmVuZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN3YXBFZGl0b3JEYXRlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVJblJhbmdlKHRoaXMudmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5wdXNoKF92YWx1ZS5zdGFydCwgX3ZhbHVlLmVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmFuZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5zZWxlY3REYXRlKHJhbmdlKTtcbiAgICAgICAgfSBlbHNlIGlmIChyYW5nZS5sZW5ndGggPT09IDAgJiYgdGhpcy5jYWxlbmRhci5tb250aFZpZXdzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyLmRlc2VsZWN0RGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsZW5kYXIudmlld0RhdGUgPSByYW5nZVswXSB8fCBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3dhcEVkaXRvckRhdGVzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudCkgYXMgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZUVuZENvbXBvbmVudCkgYXMgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50O1xuICAgICAgICAgICAgW3N0YXJ0LmRhdGVUaW1lRWRpdG9yLnZhbHVlLCBlbmQuZGF0ZVRpbWVFZGl0b3IudmFsdWVdID0gW2VuZC5kYXRlVGltZUVkaXRvci52YWx1ZSwgc3RhcnQuZGF0ZVRpbWVFZGl0b3IudmFsdWVdO1xuICAgICAgICAgICAgW3RoaXMudmFsdWUuc3RhcnQsIHRoaXMudmFsdWUuZW5kXSA9IFt0aGlzLnZhbHVlLmVuZCwgdGhpcy52YWx1ZS5zdGFydF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbHVlSW5SYW5nZSh2YWx1ZTogRGF0ZVJhbmdlLCBtaW5WYWx1ZT86IERhdGUsIG1heFZhbHVlPzogRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBfdmFsdWUgPSB0aGlzLnRvUmFuZ2VPZkRhdGVzKHZhbHVlKTtcbiAgICAgICAgaWYgKG1pblZhbHVlICYmIERhdGVUaW1lVXRpbC5sZXNzVGhhbk1pblZhbHVlKF92YWx1ZS5zdGFydCwgbWluVmFsdWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhWYWx1ZSAmJiBEYXRlVGltZVV0aWwuZ3JlYXRlclRoYW5NYXhWYWx1ZShfdmFsdWUuZW5kLCBtYXhWYWx1ZSwgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dHJhY3RSYW5nZShzZWxlY3Rpb246IERhdGVbXSk6IERhdGVSYW5nZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydDogc2VsZWN0aW9uWzBdIHx8IG51bGwsXG4gICAgICAgICAgICBlbmQ6IHNlbGVjdGlvbi5sZW5ndGggPiAwID8gc2VsZWN0aW9uW3NlbGVjdGlvbi5sZW5ndGggLSAxXSA6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvUmFuZ2VPZkRhdGVzKHJhbmdlOiBEYXRlUmFuZ2UpOiB7IHN0YXJ0OiBEYXRlOyBlbmQ6IERhdGUgfSB7XG4gICAgICAgIGxldCBzdGFydDtcbiAgICAgICAgbGV0IGVuZDtcbiAgICAgICAgaWYgKCFpc0RhdGUocmFuZ2Uuc3RhcnQpKSB7XG4gICAgICAgICAgICBzdGFydCA9IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUocmFuZ2Uuc3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNEYXRlKHJhbmdlLmVuZCkpIHtcbiAgICAgICAgICAgIGVuZCA9IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUocmFuZ2UuZW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFydCB8fCBlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHN0YXJ0OiByYW5nZS5zdGFydCBhcyBEYXRlLCBlbmQ6IHJhbmdlLmVuZCBhcyBEYXRlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoc3RhcnQgJiYgZW5kKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQuZGF0ZVRpbWVFZGl0b3IudmFsdWVDaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB7IHN0YXJ0OiB2YWx1ZSwgZW5kOiB0aGlzLnZhbHVlLmVuZCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0geyBzdGFydDogdmFsdWUsIGVuZDogbnVsbCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlbmQuZGF0ZVRpbWVFZGl0b3IudmFsdWVDaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB7IHN0YXJ0OiB0aGlzLnZhbHVlLnN0YXJ0LCBlbmQ6IHZhbHVlIGFzIERhdGUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHsgc3RhcnQ6IG51bGwsIGVuZDogdmFsdWUgYXMgRGF0ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoT25Ub3VjaGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KGkuZGF0ZVRpbWVFZGl0b3IubmF0aXZlRWxlbWVudCwgJ2JsdXInKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHlPbkJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQsICdibHVyJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHlPbkJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWNoZUZvY3VzZWRJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgICAgIGZyb21FdmVudChpLmRhdGVUaW1lRWRpdG9yLm5hdGl2ZUVsZW1lbnQsICdmb2N1cycpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZm9jdXNlZElucHV0ID0gaSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlnUG9zaXRpb25TdHJhdGVneSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIG9wZW5BbmltYXRpb246IGZhZGVJbixcbiAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBmYWRlT3V0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kgPSBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLnRhcmdldCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlnT3ZlcmxheVNldHRpbmdzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5U2V0dGluZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ092ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RpYWxvZ092ZXJsYXlTZXR0aW5ncywgdGhpcy5vdmVybGF5U2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsU2V0VmFsdWUoKSB7XG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGFuZCBubyBuZ0NvbnRyb2wgb24gdGhlIHBpY2tlciBidXQgd2UgaGF2ZSBpbnB1dHMgd2UgbWF5IGhhdmUgdmFsdWUgc2V0IHRocm91Z2hcbiAgICAgICAgLy8gdGhlaXIgbmdNb2RlbHMgLSB3ZSBzaG91bGQgZ2VuZXJhdGUgb3VyIGluaXRpYWwgY29udHJvbCB2YWx1ZVxuICAgICAgICBpZiAoKCF0aGlzLnZhbHVlIHx8ICghdGhpcy52YWx1ZS5zdGFydCAmJiAhdGhpcy52YWx1ZS5lbmQpKSAmJiB0aGlzLmhhc1Byb2plY3RlZElucHV0cyAmJiAhdGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQpO1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LmRhdGVUaW1lRWRpdG9yLnZhbHVlIGFzIERhdGUsXG4gICAgICAgICAgICAgICAgZW5kOiBlbmQuZGF0ZVRpbWVFZGl0b3IudmFsdWUgYXMgRGF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW5wdXRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucHJvamVjdGVkSW5wdXRzPy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudDtcbiAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHM/LmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQ7XG4gICAgICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnRvUmFuZ2VPZkRhdGVzKHRoaXMudmFsdWUpIDogbnVsbDtcbiAgICAgICAgICAgIHN0YXJ0LnVwZGF0ZUlucHV0VmFsdWUoX3ZhbHVlPy5zdGFydCB8fCBudWxsKTtcbiAgICAgICAgICAgIGVuZC51cGRhdGVJbnB1dFZhbHVlKF92YWx1ZT8uZW5kIHx8IG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVEaXNwbGF5Rm9ybWF0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBpIGFzIElneERhdGVSYW5nZUlucHV0c0Jhc2VDb21wb25lbnQ7XG4gICAgICAgICAgICBpbnB1dC5kYXRlVGltZUVkaXRvci5kaXNwbGF5Rm9ybWF0ID0gdGhpcy5kaXNwbGF5Rm9ybWF0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUlucHV0Rm9ybWF0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBpIGFzIElneERhdGVSYW5nZUlucHV0c0Jhc2VDb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoaW5wdXQuZGF0ZVRpbWVFZGl0b3IuaW5wdXRGb3JtYXQgIT09IHRoaXMuaW5wdXRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRlVGltZUVkaXRvci5pbnB1dEZvcm1hdCA9IHRoaXMuaW5wdXRGb3JtYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW5wdXRMb2NhbGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGkgYXMgSWd4RGF0ZVJhbmdlSW5wdXRzQmFzZUNvbXBvbmVudDtcbiAgICAgICAgICAgIGlucHV0LmRhdGVUaW1lRWRpdG9yLmxvY2FsZSA9IHRoaXMubG9jYWxlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ2FsZW5kYXJDb250YWluZXIoY29tcG9uZW50SW5zdGFuY2U6IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyID0gY29tcG9uZW50SW5zdGFuY2UuY2FsZW5kYXI7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuaGFzSGVhZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIubG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuc2VsZWN0aW9uID0gQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0U7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIud2Vla1N0YXJ0ID0gdGhpcy53ZWVrU3RhcnQ7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuaGlkZU91dHNpZGVEYXlzID0gdGhpcy5oaWRlT3V0c2lkZURheXM7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIubW9udGhzVmlld051bWJlciA9IHRoaXMuZGlzcGxheU1vbnRoc0NvdW50O1xuICAgICAgICB0aGlzLmNhbGVuZGFyLnNob3dXZWVrTnVtYmVycyA9IHRoaXMuc2hvd1dlZWtOdW1iZXJzO1xuICAgICAgICB0aGlzLmNhbGVuZGFyLnNlbGVjdGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChldjogRGF0ZVtdKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihldikpO1xuXG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLm1vZGUgPSB0aGlzLm1vZGU7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNsb3NlQnV0dG9uTGFiZWwgPSAhdGhpcy5pc0Ryb3Bkb3duID8gdGhpcy5kb25lQnV0dG9uVGV4dCA6IG51bGw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnBpY2tlckFjdGlvbnMgPSB0aGlzLnBpY2tlckFjdGlvbnM7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNhbGVuZGFyQ2xvc2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGFzUHJvamVjdGVkSW5wdXRzID8gc3RhcnRFbmRUZW1wbGF0ZSA6IGRlZlRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVGVtcGxhdGU+XG4gICAgPGRpdiAoY2xpY2spPVwib3BlbigpXCIgY2xhc3M9XCJjb250ZW50LXdyYXBcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWRhdGUtc2luZ2xlXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdGFydEVuZFRlbXBsYXRlPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1kYXRlLXJhbmdlLXN0YXJ0XCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgW2NsYXNzTmFtZV09XCJzZXBhcmF0b3JDbGFzc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZVNlcGFyYXRvclRlbXBsYXRlIHx8IGRlZkRhdGVTZXBhcmF0b3JUZW1wbGF0ZTtcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWRhdGUtcmFuZ2UtZW5kXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZJY29uPlxuICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgbmFtZT1cImRhdGVfcmFuZ2VcIj48L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZEYXRlU2VwYXJhdG9yVGVtcGxhdGU+e3sgZGF0ZVNlcGFyYXRvciB9fTwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmVGVtcGxhdGU+XG4gICAgPGlneC1pbnB1dC1ncm91cCBbdHlwZV09XCJ0eXBlXCIgKGNsaWNrKT1cIm9wZW4oKVwiPlxuICAgICAgICA8IS0tIG9ubHkgc2V0IG1hc2sgcGxhY2Vob2xkZXIgd2hlbiBlbXB0eSwgb3RoZXJ3aXNlIGlucHV0IGdyb3VwIG1pZ2h0IHVzZSBpdCBhcyBsYWJlbCBpZiBub25lIGlzIHNldCAtLT5cbiAgICAgICAgPGlucHV0ICNzaW5nbGVJbnB1dCBpZ3hJbnB1dCB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtwbGFjZWhvbGRlcl09XCJ2YWx1ZSA/ICcnIDogc2luZ2xlSW5wdXRGb3JtYXRcIlxuICAgICAgICAgICAgcm9sZT1cImNvbWJvYm94XCIgYXJpYS1oYXNwb3B1cD1cImdyaWRcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiFjb2xsYXBzZWRcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWw/LmlkXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZSB8IGRhdGVSYW5nZTogYXBwbGllZEZvcm1hdCA6IGxvY2FsZSA6IGZvcm1hdHRlclwiIC8+XG5cbiAgICAgICAgPGlneC1wcmVmaXggKm5nSWY9XCIhdG9nZ2xlQ29tcG9uZW50cy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZJY29uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LXByZWZpeD5cblxuICAgICAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiW2lneExhYmVsXVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneExhYmVsXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtcHJlZml4XCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtcHJlZml4LFtpZ3hQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1zdWZmaXhcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1zdWZmaXgsW2lneFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LWhpbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1oaW50LFtpZ3hIaW50XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuIl19
937
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2RhdGUtcmFuZ2UtcGlja2VyL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kYXRlLXJhbmdlLXBpY2tlci9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ1ksZ0JBQWdCLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUM1RixZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVksS0FBSyxFQUFFLFNBQVMsRUFDN0MsUUFBUSxFQUFFLE1BQU0sRUFDL0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFDMUQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xGLE9BQU8sRUFDb0MsU0FBUyxFQUNoRCxhQUFhLEVBQUUsaUJBQWlCLEVBQ25DLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLElBQUksRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0NBQWdDLEVBQW1DLE1BQU0sMENBQTBDLENBQUM7QUFDN0gsT0FBTyxFQUFtQyxNQUFN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O2dCQW9CVSxlQUFlO3NCQUQ5QixLQUFLO2dCQWdCVSxhQUFhO3NCQUQ1QixLQUFLO2dCQVlVLFdBQVc7c0JBRDFCLEtBQUs7Z0JBVUssUUFBUTtzQkFEbEIsS0FBSztnQkFpQkssUUFBUTtzQkFEbEIsS0FBSztnQkFlSyxlQUFlO3NCQUR6QixLQUFLO2dCQXFCVSxXQUFXO3NCQUQxQixLQUFLO2dCQWlCVSxNQUFNO3NCQURyQixLQUFLO2dCQWVDLGVBQWU7c0JBRHJCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBWS9CLFdBQVc7c0JBRGpCLE1BQU07Z0JBS0EsUUFBUTtzQkFEZCxXQUFXO3VCQUFDLDZCQUE2QjtnQkFJbEMsZ0JBQWdCO3NCQUR2QixTQUFTO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUt0RCxjQUFjO3NCQURwQixTQUFTO3VCQUFDLGlCQUFpQjtnQkFLckIsZUFBZTtzQkFEckIsZUFBZTt1QkFBQywrQkFBK0I7Z0JBSXpDLEtBQUs7c0JBRFgsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBSXhCLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMseUJBQXlCO2dCQUtoQyxxQkFBcUI7c0JBRDNCLFlBQVk7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQTRCL0MsTUFBTTtzQkFEekIsS0FBSztnQkE2REssS0FBSztzQkFEZixLQUFLO2dCQXNGQyxTQUFTO3NCQUZmLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LCBib29sZWFuQXR0cmlidXRlLCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5qZWN0b3IsIElucHV0LCBMT0NBTEVfSUQsXG4gICAgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0LCBOZ0lmLCBnZXRMb2NhbGVGaXJzdERheU9mV2VlayB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCxcbiAgICBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uLCBub29wLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDYWxlbmRhclNlbGVjdGlvbiwgSWd4Q2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi9jYWxlbmRhci9wdWJsaWNfYXBpJztcbmltcG9ydCB7IERhdGVSYW5nZVR5cGUgfSBmcm9tICcuLi9jb3JlL2RhdGVzJztcbmltcG9ydCB7IERhdGVSYW5nZVBpY2tlclJlc291cmNlU3RyaW5nc0VOLCBJRGF0ZVJhbmdlUGlja2VyUmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL2RhdGUtcmFuZ2UtcGlja2VyLXJlc291cmNlcyc7XG5pbXBvcnQgeyBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzLCBpc0RhdGUsIHBhcnNlRGF0ZSwgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBJZ3hDYWxlbmRhckNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtY29tbW9uL2NhbGVuZGFyLWNvbnRhaW5lci9jYWxlbmRhci1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFBpY2tlckJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRlLWNvbW1vbi9waWNrZXItYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UGlja2VyQWN0aW9uc0RpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGUtY29tbW9uL3BpY2tlci1pY29ucy5jb21tb24nO1xuaW1wb3J0IHsgRGF0ZVRpbWVVdGlsIH0gZnJvbSAnLi4vZGF0ZS1jb21tb24vdXRpbC9kYXRlLXRpbWUudXRpbCc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICAgIElneElucHV0RGlyZWN0aXZlLCBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LCBJZ3hJbnB1dEdyb3VwVHlwZSwgSWd4SW5wdXRTdGF0ZSxcbiAgICBJZ3hMYWJlbERpcmVjdGl2ZSwgSUdYX0lOUFVUX0dST1VQX1RZUEVcbn0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvcHVibGljX2FwaSc7XG5pbXBvcnQge1xuICAgIEF1dG9Qb3NpdGlvblN0cmF0ZWd5LCBJZ3hPdmVybGF5U2VydmljZSwgT3ZlcmxheUNhbmNlbGFibGVFdmVudEFyZ3MsIE92ZXJsYXlFdmVudEFyZ3MsXG4gICAgT3ZlcmxheVNldHRpbmdzLCBQb3NpdGlvblNldHRpbmdzXG59IGZyb20gJy4uL3NlcnZpY2VzL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgRGF0ZVJhbmdlLCBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQsIElneERhdGVSYW5nZUlucHV0c0Jhc2VDb21wb25lbnQsIElneERhdGVSYW5nZVNlcGFyYXRvckRpcmVjdGl2ZSwgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQsIERhdGVSYW5nZVBpY2tlckZvcm1hdFBpcGUgfSBmcm9tICcuL2RhdGUtcmFuZ2UtcGlja2VyLWlucHV0cy5jb21tb24nO1xuaW1wb3J0IHsgSWd4UHJlZml4RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9wcmVmaXgvcHJlZml4LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBmYWRlSW4sIGZhZGVPdXQgfSBmcm9tICdpZ25pdGV1aS1hbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5jb25zdCBTaW5nbGVJbnB1dERhdGVzQ29uY2F0ZW5hdGlvblN0cmluZyA9ICcgLSAnO1xuXG4vKipcbiAqIFByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIHNlbGVjdCBhIHJhbmdlIG9mIGRhdGVzIGZyb20gYSBjYWxlbmRhciBVSSBvciBlZGl0YWJsZSBpbnB1dHMuXG4gKlxuICogQGlneE1vZHVsZSBJZ3hEYXRlUmFuZ2VNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWlucHV0LWdyb3VwLXRoZW1lLCBpZ3gtY2FsZW5kYXItdGhlbWUsIGlneC1kYXRlLXJhbmdlLXBpY2tlci10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBkYXRlLCByYW5nZSwgZGF0ZSByYW5nZSwgZGF0ZSBwaWNrZXJcbiAqXG4gKiBAaWd4R3JvdXAgc2NoZWR1bGluZ1xuICpcbiAqIEByZW1hcmtzXG4gKiBJdCBkaXNwbGF5cyB0aGUgcmFuZ2Ugc2VsZWN0aW9uIGluIGEgc2luZ2xlIG9yIHR3byBpbnB1dCBmaWVsZHMuXG4gKiBUaGUgZGVmYXVsdCB0ZW1wbGF0ZSBkaXNwbGF5cyBhIHNpbmdsZSAqcmVhZG9ubHkqIGlucHV0IGZpZWxkXG4gKiB3aGlsZSBwcm9qZWN0aW5nIGBpZ3gtZGF0ZS1yYW5nZS1zdGFydGAgYW5kIGBpZ3gtZGF0ZS1yYW5nZS1lbmRgXG4gKiBkaXNwbGF5cyB0d28gKmVkaXRhYmxlKiBpbnB1dCBmaWVsZHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgbW9kZT1cImRyb3Bkb3duXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZGF0ZS1yYW5nZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBJZ3hEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IElneERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIElneEljb25Db21wb25lbnQsXG4gICAgICAgIElneElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIElneElucHV0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hQcmVmaXhEaXJlY3RpdmUsXG4gICAgICAgIERhdGVSYW5nZVBpY2tlckZvcm1hdFBpcGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIFBpY2tlckJhc2VEaXJlY3RpdmVcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuXG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBkaXNwbGF5ZWQgbW9udGggdmlld3MuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgaXMgYDJgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbZGlzcGxheU1vbnRoc0NvdW50XT1cIjNcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5TW9udGhzQ291bnQgPSAyO1xuXG4gICAgLyoqXG4gICAgICogR2V0cy9TZXRzIHdoZXRoZXIgZGF0ZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnQgbW9udGggd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW2hpZGVPdXRzaWRlRGF5c109XCJ0cnVlXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIGhpZGVPdXRzaWRlRGF5czogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEEgY3VzdG9tIGZvcm1hdHRlciBmdW5jdGlvbiwgYXBwbGllZCBvbiB0aGUgc2VsZWN0ZWQgb3IgcGFzc2VkIGluIGRhdGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwcml2YXRlIGRheUZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW5cIiwgeyB3ZWVrZGF5OiBcImxvbmdcIiB9KTtcbiAgICAgKiBwcml2YXRlIG1vbnRoRm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlblwiLCB7IG1vbnRoOiBcImxvbmdcIiB9KTtcbiAgICAgKlxuICAgICAqIHB1YmxpYyBmb3JtYXR0ZXIoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICogIHJldHVybiBgJHt0aGlzLmRheUZvcm1hdHRlci5mb3JtYXQoZGF0ZSl9IC0gJHt0aGlzLm1vbnRoRm9ybWF0dGVyLmZvcm1hdChkYXRlKX0gLSAke2RhdGUuZ2V0RnVsbFllYXIoKX1gO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbZm9ybWF0dGVyXT1cImZvcm1hdHRlclwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZvcm1hdHRlcjogKHZhbDogRGF0ZVJhbmdlKSA9PiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgdGV4dCBvZiB0aGUgY2FsZW5kYXIgZGlhbG9nICoqRG9uZSoqIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRGVmYXVsdHMgdG8gdGhlIHZhbHVlIGZyb20gcmVzb3VyY2Ugc3RyaW5ncywgYFwiRG9uZVwiYCBmb3IgdGhlIGJ1aWx0LWluIEVOLlxuICAgICAqIFRoZSBidXR0b24gd2lsbCBvbmx5IHNob3cgdXAgaW4gYGRpYWxvZ2AgbW9kZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgZG9uZUJ1dHRvblRleHQ9XCLlrozkuoZcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZG9uZUJ1dHRvblRleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kb25lQnV0dG9uVGV4dCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZG9uZUJ1dHRvblRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2RvbmVCdXR0b25UZXh0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X2RhdGVfcmFuZ2VfcGlja2VyX2RvbmVfYnV0dG9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kb25lQnV0dG9uVGV4dDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIG92ZXJsYXkgc2V0dGluZ3MgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBjYWxlbmRhci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgW292ZXJsYXlTZXR0aW5nc109XCJjdXN0b21PdmVybGF5U2V0dGluZ3NcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvdmVycmlkZSBvdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncztcblxuICAgIC8qKlxuICAgICAqIFRoZSBmb3JtYXQgdXNlZCB3aGVuIGVkaXRhYmxlIGlucHV0cyBhcmUgbm90IGZvY3VzZWQuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIFVzZXMgQW5ndWxhcidzIERhdGVQaXBlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBkaXNwbGF5Rm9ybWF0PVwiRUUvTS95eVwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZGlzcGxheUZvcm1hdDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGV4cGVjdGVkIHVzZXIgaW5wdXQgZm9ybWF0IGFuZCBwbGFjZWhvbGRlci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgaW5wdXRGb3JtYXQ9XCJkZC9NTS95eVwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIGlucHV0Rm9ybWF0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSB2YWx1ZSBpbiBhIHZhbGlkIHJhbmdlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFttaW5WYWx1ZV09XCJtaW5EYXRlXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG1pblZhbHVlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX21pblZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1pblZhbHVlKCk6IERhdGUgfCBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gdmFsdWUgaW4gYSB2YWxpZCByYW5nZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbbWF4VmFsdWVdPVwibWF4RGF0ZVwiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtYXhWYWx1ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tYXhWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBtYXhWYWx1ZSgpOiBEYXRlIHwgc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heFZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgc2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKiBCeSBkZWZhdWx0IGl0IHVzZXMgRU4gcmVzb3VyY2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IElEYXRlUmFuZ2VQaWNrZXJSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElEYXRlUmFuZ2VQaWNrZXJSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBwbGFjZWhvbGRlcmAgZm9yIHNpbmdsZS1pbnB1dCBgSWd4RGF0ZVJhbmdlUGlja2VyQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqICAgQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbcGxhY2Vob2xkZXJdPVwiJ0Nob29zZSB5b3VyIGRhdGVzJ1wiPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIHBsYWNlaG9sZGVyID0gJyc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIGNvbnRhaW5lciB1c2VkIGZvciB0aGUgcG9wdXAgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogIGBvdXRsZXRgIGlzIGFuIGluc3RhbmNlIG9mIGBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlYCBvciBhbiBgRWxlbWVudFJlZmAuXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGRpdiBpZ3hPdmVybGF5T3V0bGV0ICNvdXRsZXQ9XCJvdmVybGF5LW91dGxldFwiPjwvZGl2PlxuICAgICAqIC8vLi5cbiAgICAgKiA8aWd4LWRhdGUtcmFuZ2UtcGlja2VyIFtvdXRsZXRdPVwib3V0bGV0XCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogLy8uLlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJyaWRlIG91dGxldDogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB8IEVsZW1lbnRSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIFNob3cvaGlkZSB3ZWVrIG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogRGVmYXVsdCBpcyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbc2hvd1dlZWtOdW1iZXJzXT1cInRydWVcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzaG93V2Vla051bWJlcnMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgcGlja2VyJ3MgdmFsdWUgY2hhbmdlcy4gVXNlZCBmb3IgdHdvLXdheSBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciBbKHZhbHVlKV09XCJkYXRlXCI+PC9pZ3gtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlUmFuZ2U+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1kYXRlLXJhbmdlLXBpY2tlcicpXG4gICAgcHVibGljIGNzc0NsYXNzID0gJ2lneC1kYXRlLXJhbmdlLXBpY2tlcic7XG5cbiAgICBAVmlld0NoaWxkKElneElucHV0R3JvdXBDb21wb25lbnQsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4SW5wdXREaXJlY3RpdmUpXG4gICAgcHVibGljIGlucHV0RGlyZWN0aXZlOiBJZ3hJbnB1dERpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4RGF0ZVJhbmdlSW5wdXRzQmFzZUNvbXBvbmVudClcbiAgICBwdWJsaWMgcHJvamVjdGVkSW5wdXRzOiBRdWVyeUxpc3Q8SWd4RGF0ZVJhbmdlSW5wdXRzQmFzZUNvbXBvbmVudD47XG5cbiAgICBAQ29udGVudENoaWxkKElneExhYmVsRGlyZWN0aXZlKVxuICAgIHB1YmxpYyBsYWJlbDogSWd4TGFiZWxEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmUpXG4gICAgcHVibGljIHBpY2tlckFjdGlvbnM6IElneFBpY2tlckFjdGlvbnNEaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAQ29udGVudENoaWxkKElneERhdGVSYW5nZVNlcGFyYXRvckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyBkYXRlU2VwYXJhdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGRhdGVTZXBhcmF0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGVTZXBhcmF0b3IgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfZGF0ZV9yYW5nZV9waWNrZXJfZGF0ZV9zZXBhcmF0b3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVTZXBhcmF0b3I7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBhcHBsaWVkRm9ybWF0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBEYXRlVGltZVV0aWwuZ2V0TG9jYWxlRGF0ZUZvcm1hdCh0aGlzLmxvY2FsZSwgdGhpcy5kaXNwbGF5Rm9ybWF0KVxuICAgICAgICAgICAgfHwgRGF0ZVRpbWVVdGlsLkRFRkFVTFRfSU5QVVRfRk9STUFUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgbG9jYWxlPVwianBcIj48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgbG9jYWxlYCBvZiB0aGUgZGF0ZS1yYW5nZS1waWNrZXIuXG4gICAgICogSWYgbm90IHNldCwgZGVmYXVsdHMgdG8gYXBwbGljYXRpb24ncyBsb2NhbGUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGxvY2FsZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGBsb2NhbGVgIG9mIHRoZSBkYXRlLXBpY2tlci5cbiAgICAgKiBFeHBlY3RzIGEgdmFsaWQgQkNQIDQ3IGxhbmd1YWdlIHRhZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGxvY2FsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IHZhbHVlO1xuICAgICAgICAvLyBpZiB2YWx1ZSBpcyBpbnZhbGlkLCBzZXQgaXQgYmFjayB0byBfbG9jYWxlSWRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdldExvY2FsZUZpcnN0RGF5T2ZXZWVrKHRoaXMuX2xvY2FsZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IHRoaXMuX2xvY2FsZUlkO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dExvY2FsZSgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5Rm9ybWF0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHNpbmdsZUlucHV0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyICE9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmFwcGxpZWRGb3JtYXQ7XG4gICAgICAgIHJldHVybiBgJHtmb3JtYXR9JHtTaW5nbGVJbnB1dERhdGVzQ29uY2F0ZW5hdGlvblN0cmluZ30ke2Zvcm1hdH1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgY2FsZW5kYXIgc3RhdGUuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHN0YXRlID0gdGhpcy5kYXRlUmFuZ2UuY29sbGFwc2VkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgY29sbGFwc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sbGFwc2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgdmFsdWUgLyByYW5nZSBmcm9tIHRoZSBjYWxlbmRhclxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgY3VycmVudCB2YWx1ZSBpcyBvZiB0eXBlIGBEYXRlUmFuZ2VgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBuZXdWYWx1ZTogRGF0ZVJhbmdlID0geyBzdGFydDogbmV3IERhdGUoXCIyLzIvMjAxMlwiKSwgZW5kOiBuZXcgRGF0ZShcIjMvMy8yMDEzXCIpfTtcbiAgICAgKiB0aGlzLmRhdGVSYW5nZVBpY2tlci52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogRGF0ZVJhbmdlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBoYXNQcm9qZWN0ZWRJbnB1dHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2plY3RlZElucHV0cz8ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHNlcGFyYXRvckNsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnaWd4LWRhdGUtcmFuZ2UtcGlja2VyX19sYWJlbCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldCB0b2dnbGVDb250YWluZXIoKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXJDb250YWluZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLl9uZ0NvbnRyb2wgJiYgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wgJiYgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcih7fSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICAgICAgICAgICAgcmV0dXJuIChlcnJvciAmJiBlcnJvci5yZXF1aXJlZCkgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgY2FsZW5kYXIoKTogSWd4Q2FsZW5kYXJDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZHJvcGRvd25PdmVybGF5U2V0dGluZ3MoKTogT3ZlcmxheVNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLCB0aGlzLm92ZXJsYXlTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgZGlhbG9nT3ZlcmxheVNldHRpbmdzKCk6IE92ZXJsYXlTZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBnZXRDdXJyZW50UmVzb3VyY2VTdHJpbmdzKERhdGVSYW5nZVBpY2tlclJlc291cmNlU3RyaW5nc0VOKTtcbiAgICBwcml2YXRlIF9kb25lQnV0dG9uVGV4dCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfZGF0ZVNlcGFyYXRvciA9IG51bGw7XG4gICAgcHJpdmF0ZSBfdmFsdWU6IERhdGVSYW5nZSB8IG51bGw7XG4gICAgcHJpdmF0ZSBfb3ZlcmxheUlkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbmdDb250cm9sOiBOZ0NvbnRyb2w7XG4gICAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlcyQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9jYWxlbmRhcjogSWd4Q2FsZW5kYXJDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfY2FsZW5kYXJDb250YWluZXI/OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIF9wb3NpdGlvblNldHRpbmdzOiBQb3NpdGlvblNldHRpbmdzO1xuICAgIHByaXZhdGUgX2ZvY3VzZWRJbnB1dDogSWd4RGF0ZVJhbmdlSW5wdXRzQmFzZUNvbXBvbmVudDtcbiAgICBwcml2YXRlIF9vdmVybGF5U3ViRmlsdGVyOlxuICAgICAgICBbTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPE92ZXJsYXlFdmVudEFyZ3M+LCBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248T3ZlcmxheUV2ZW50QXJncyB8IE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzPl0gPSBbXG4gICAgICAgICAgICBmaWx0ZXIoeCA9PiB4LmlkID09PSB0aGlzLl9vdmVybGF5SWQpLFxuICAgICAgICAgICAgdGFrZVVudGlsKG1lcmdlKHRoaXMuX2Rlc3Ryb3kkLCB0aGlzLmNsb3NlZCkpXG4gICAgICAgIF07XG4gICAgcHJpdmF0ZSBfZGlhbG9nT3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiB0cnVlLFxuICAgICAgICBjbG9zZU9uRXNjYXBlOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIF9kcm9wRG93bk92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0ge1xuICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgIGNsb3NlT25Fc2NhcGU6IHRydWVcbiAgICB9O1xuICAgIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKGRhdGVSYW5nZTogRGF0ZVJhbmdlKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIG9uVG91Y2hDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBvblZhbGlkYXRvckNoYW5nZTogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgX2xvY2FsZUlkOiBzdHJpbmcsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsLFxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBJbmplY3QoSWd4T3ZlcmxheVNlcnZpY2UpIHByaXZhdGUgX292ZXJsYXlTZXJ2aWNlOiBJZ3hPdmVybGF5U2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSkgX2lucHV0R3JvdXBUeXBlPzogSWd4SW5wdXRHcm91cFR5cGUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCwgX2xvY2FsZUlkLCBfaW5wdXRHcm91cFR5cGUpO1xuICAgICAgICB0aGlzLmxvY2FsZSA9IHRoaXMubG9jYWxlIHx8IHRoaXMuX2xvY2FsZUlkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5wbGF0Zm9ybS5LRVlNQVAuQVJST1dfVVA6XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLnBsYXRmb3JtLktFWU1BUC5BUlJPV19ET1dOOlxuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgdGhlIGRhdGUgcmFuZ2UgcGlja2VyJ3MgZHJvcGRvd24gb3IgZGlhbG9nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciAjZGF0ZVJhbmdlPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uIChjbGljayk9XCJkYXRlUmFuZ2Uub3BlbigpXCI+T3BlbiBEaWFsb2c8L2J1dHRvblxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKG92ZXJsYXlTZXR0aW5ncz86IE92ZXJsYXlTZXR0aW5ncyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkIHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5pc0Ryb3Bkb3duXG4gICAgICAgICAgICA/IHRoaXMuZHJvcGRvd25PdmVybGF5U2V0dGluZ3NcbiAgICAgICAgICAgIDogdGhpcy5kaWFsb2dPdmVybGF5U2V0dGluZ3NcbiAgICAgICAgICAgICwgb3ZlcmxheVNldHRpbmdzKTtcblxuICAgICAgICB0aGlzLl9vdmVybGF5SWQgPSB0aGlzLl9vdmVybGF5U2VydmljZVxuICAgICAgICAgICAgLmF0dGFjaChJZ3hDYWxlbmRhckNvbnRhaW5lckNvbXBvbmVudCwgdGhpcy52aWV3Q29udGFpbmVyUmVmLCBzZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9PdmVybGF5RXZlbnRzKCk7XG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLnNob3codGhpcy5fb3ZlcmxheUlkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGRhdGUgcmFuZ2UgcGlja2VyJ3MgZHJvcGRvd24gb3IgZGlhbG9nLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kYXRlLXJhbmdlLXBpY2tlciAjZGF0ZVJhbmdlPjwvaWd4LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAqXG4gICAgICogPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWd4QnV0dG9uIChjbGljayk9XCJkYXRlUmFuZ2UuY2xvc2UoKVwiPkNsb3NlIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuaGlkZSh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgZGF0ZSByYW5nZSBwaWNrZXIncyBkcm9wZG93biBvciBkaWFsb2dcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGF0ZS1yYW5nZS1waWNrZXIgI2RhdGVSYW5nZT48L2lneC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgKlxuICAgICAqIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbiAoY2xpY2spPVwiZGF0ZVJhbmdlLnRvZ2dsZSgpXCI+VG9nZ2xlIERpYWxvZzwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUob3ZlcmxheVNldHRpbmdzPzogT3ZlcmxheVNldHRpbmdzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlbihvdmVybGF5U2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBhIHJhbmdlIG9mIGRhdGVzLiBJZiBubyBgZW5kRGF0ZWAgaXMgcGFzc2VkLCByYW5nZSBpcyAxIGRheSAob25seSBgc3RhcnREYXRlYClcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBzZWxlY3RGaXZlRGF5UmFuZ2UoKSB7XG4gICAgICogIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICAgKiAgY29uc3QgaW5GaXZlRGF5cyA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0RGF0ZSh0b2RheS5nZXREYXRlKCkgKyA1KSk7XG4gICAgICogIHRoaXMuZGF0ZVJhbmdlLnNlbGVjdCh0b2RheSwgaW5GaXZlRGF5cyk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3Qoc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlPzogRGF0ZSk6IHZvaWQge1xuICAgICAgICBlbmREYXRlID0gZW5kRGF0ZSA/PyBzdGFydERhdGU7XG4gICAgICAgIGNvbnN0IGRhdGVSYW5nZSA9IFtzdGFydERhdGUsIGVuZERhdGVdO1xuICAgICAgICB0aGlzLmhhbmRsZVNlbGVjdGlvbihkYXRlUmFuZ2UpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlUmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hDYWxsYmFjayA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBEYXRlUmFuZ2UgPSBjb250cm9sLnZhbHVlO1xuICAgICAgICBjb25zdCBlcnJvcnMgPSB7fTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydElucHV0ID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudCkgYXMgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kSW5wdXQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZUVuZENvbXBvbmVudCkgYXMgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGlmICghc3RhcnRJbnB1dC5kYXRlVGltZUVkaXRvci52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgeyBzdGFydFZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWVuZElucHV0LmRhdGVUaW1lRWRpdG9yLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCB7IGVuZFZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWluID0gcGFyc2VEYXRlKHRoaXMubWluVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gcGFyc2VEYXRlKHRoaXMubWF4VmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBwYXJzZURhdGUodmFsdWUuc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gcGFyc2VEYXRlKHZhbHVlLmVuZCk7XG4gICAgICAgICAgICBpZiAoKG1pbiAmJiBzdGFydCAmJiBEYXRlVGltZVV0aWwubGVzc1RoYW5NaW5WYWx1ZShzdGFydCwgbWluLCBmYWxzZSkpXG4gICAgICAgICAgICAgICAgfHwgKG1pbiAmJiBlbmQgJiYgRGF0ZVRpbWVVdGlsLmxlc3NUaGFuTWluVmFsdWUoZW5kLCBtaW4sIGZhbHNlKSkpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGVycm9ycywgeyBtaW5WYWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgobWF4ICYmIHN0YXJ0ICYmIERhdGVUaW1lVXRpbC5ncmVhdGVyVGhhbk1heFZhbHVlKHN0YXJ0LCBtYXgsIGZhbHNlKSlcbiAgICAgICAgICAgICAgICB8fCAobWF4ICYmIGVuZCAmJiBEYXRlVGltZVV0aWwuZ3JlYXRlclRoYW5NYXhWYWx1ZShlbmQsIG1heCwgZmFsc2UpKSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZXJyb3JzLCB7IG1heFZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCA/IGVycm9ycyA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2U/KGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZ0NvbnRyb2wgPSB0aGlzLl9pbmplY3Rvci5nZXQ8TmdDb250cm9sPihOZ0NvbnRyb2wsIG51bGwpO1xuXG4gICAgICAgIHRoaXMubG9jYWxlID0gdGhpcy5sb2NhbGUgfHwgdGhpcy5fbG9jYWxlSWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTtcbiAgICAgICAgdGhpcy5jb25maWdQb3NpdGlvblN0cmF0ZWd5KCk7XG4gICAgICAgIHRoaXMuY29uZmlnT3ZlcmxheVNldHRpbmdzKCk7XG4gICAgICAgIHRoaXMuY2FjaGVGb2N1c2VkSW5wdXQoKTtcbiAgICAgICAgdGhpcy5hdHRhY2hPblRvdWNoZWQoKTtcblxuICAgICAgICB0aGlzLnNldFJlcXVpcmVkVG9JbnB1dHMoKTtcblxuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzJCA9IHRoaXMuX25nQ29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh0aGlzLm9uU3RhdHVzQ2hhbmdlZC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRlbGF5IGludm9jYXRpb25zIHVudGlsIHRoZSBjdXJyZW50IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgaGFzIGNvbXBsZXRlZFxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsU2V0VmFsdWUoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXRzKCk7XG4gICAgICAgICAgICAvLyBCLlAuIDA3IEp1bHkgMjAyMSAtIElneERhdGVSYW5nZVBpY2tlciBub3Qgc2hvd2luZyBpbml0aWFsIGRpc2FibGVkIHN0YXRlIHdpdGggQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoICM5Nzc2XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGlmIGRpc2FibGVkIGlzIHBsYWNlZCBvbiB0aGUgcmFuZ2UgcGlja2VyIGVsZW1lbnQgYW5kIHRoZXJlIGFyZSBwcm9qZWN0ZWQgaW5wdXRzXG4gICAgICAgICAgICAgKiBydW4gY2hhbmdlIGRldGVjdGlvbiBzaW5jZSBpZ3hJbnB1dCB3aWxsIGluaXRpYWxseSBzZXQgdGhlIHByb2plY3RlZCBpbnB1dHMnIGRpc2FibGVkIHRvIGZhbHNlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cyAmJiB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5Rm9ybWF0KCk7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXRGb3JtYXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1snZGlzcGxheUZvcm1hdCddICYmIHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXlGb3JtYXQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlc1snaW5wdXRGb3JtYXQnXSAmJiB0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dEZvcm1hdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWydkaXNhYmxlZCddKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZURpc2FibGVkU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXR1c0NoYW5nZXMkKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5SWQpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dERpcmVjdGl2ZS5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblN0YXR1c0NoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0R3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRpdHlTdGF0ZSh0aGlzLmlucHV0RGlyZWN0aXZlLCB0aGlzLmlucHV0R3JvdXAuaXNGb2N1c2VkKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgdGhpcy5wcm9qZWN0ZWRJbnB1dHNcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkaXR5U3RhdGUoaS5pbnB1dERpcmVjdGl2ZSwgaS5pc0ZvY3VzZWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0UmVxdWlyZWRUb0lucHV0cygpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHNldFZhbGlkaXR5U3RhdGUoaW5wdXREaXJlY3RpdmU6IElneElucHV0RGlyZWN0aXZlLCBpc0ZvY3VzZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCAmJiAhdGhpcy5fbmdDb250cm9sLmRpc2FibGVkICYmIHRoaXMuaXNUb3VjaGVkT3JEaXJ0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzVmFsaWRhdG9ycyAmJiBpc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dERpcmVjdGl2ZS52YWxpZCA9IHRoaXMuX25nQ29udHJvbC52YWxpZCA/IElneElucHV0U3RhdGUuVkFMSUQgOiBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlucHV0RGlyZWN0aXZlLnZhbGlkID0gdGhpcy5fbmdDb250cm9sLnZhbGlkID8gSWd4SW5wdXRTdGF0ZS5JTklUSUFMIDogSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1RvdWNoZWRPckRpcnR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuX25nQ29udHJvbC5jb250cm9sLnRvdWNoZWQgfHwgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wuZGlydHkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGhhc1ZhbGlkYXRvcnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IgfHwgISF0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5hc3luY1ZhbGlkYXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb24oc2VsZWN0aW9uRGF0YTogRGF0ZVtdKTogdm9pZCB7XG4gICAgICAgIGxldCBuZXdWYWx1ZSA9IHRoaXMuZXh0cmFjdFJhbmdlKHNlbGVjdGlvbkRhdGEpO1xuICAgICAgICBpZiAoIW5ld1ZhbHVlLnN0YXJ0ICYmICFuZXdWYWx1ZS5lbmQpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmlzRHJvcGRvd24gJiYgc2VsZWN0aW9uRGF0YT8ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbG9zaW5nKGU6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJncyA9IHsgb3duZXI6IHRoaXMsIGNhbmNlbDogZT8uY2FuY2VsLCBldmVudDogZT8uZXZlbnQgfTtcbiAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEcm9wZG93biAmJiBlPy5ldmVudCAmJiAhdGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIC8vIG91dHNpZGUgY2xpY2tcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHlPbkJsdXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaENhbGxiYWNrKCk7XG4gICAgICAgICAgICAvLyBpbnB1dCBjbGlja1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzICYmIHRoaXMuX2ZvY3VzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzZWRJbnB1dC5zZXRGb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXREaXJlY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0RGlyZWN0aXZlLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvT3ZlcmxheUV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmluZy5waXBlKC4uLnRoaXMuX292ZXJsYXlTdWJGaWx0ZXIpLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmxheUV2ZW50ID0gZSBhcyBPdmVybGF5Q2FuY2VsYWJsZUV2ZW50QXJncztcbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSB7IG93bmVyOiB0aGlzLCBjYW5jZWw6IG92ZXJsYXlFdmVudD8uY2FuY2VsLCBldmVudDogZS5ldmVudCB9O1xuICAgICAgICAgICAgdGhpcy5vcGVuaW5nLmVtaXQoYXJncyk7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5U2VydmljZS5kZXRhY2godGhpcy5fb3ZlcmxheUlkKTtcbiAgICAgICAgICAgICAgICBvdmVybGF5RXZlbnQuY2FuY2VsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDYWxlbmRhckNvbnRhaW5lcihlLmNvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhckNvbnRhaW5lciA9IGUuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXIoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2Uub3BlbmVkLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIud3JhcHBlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmNsb3NpbmcucGlwZSguLi50aGlzLl9vdmVybGF5U3ViRmlsdGVyKS5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2luZyhlIGFzIE92ZXJsYXlDYW5jZWxhYmxlRXZlbnRBcmdzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3ZlcmxheVNlcnZpY2UuY2xvc2VkLnBpcGUoLi4udGhpcy5fb3ZlcmxheVN1YkZpbHRlcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlTZXJ2aWNlLmRldGFjaCh0aGlzLl9vdmVybGF5SWQpO1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlJZCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jYWxlbmRhckNvbnRhaW5lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoeyBvd25lcjogdGhpcyB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSh2YWx1ZTogRGF0ZVJhbmdlKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6IG51bGw7XG4gICAgICAgIHRoaXMudXBkYXRlSW5wdXRzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkaXR5T25CbHVyKCkge1xuICAgICAgICB0aGlzLl9mb2N1c2VkSW5wdXQgPSBudWxsO1xuICAgICAgICB0aGlzLm9uVG91Y2hDYWxsYmFjaygpO1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX25nQ29udHJvbC52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaS51cGRhdGVJbnB1dFZhbGlkaXR5KElneElucHV0U3RhdGUuSU5WQUxJRCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpLnVwZGF0ZUlucHV0VmFsaWRpdHkoSWd4SW5wdXRTdGF0ZS5JTklUSUFMKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dERpcmVjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fbmdDb250cm9sLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXREaXJlY3RpdmUudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dERpcmVjdGl2ZS52YWxpZCA9IElneElucHV0U3RhdGUuSU5JVElBTDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURpc2FibGVkU3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQ7XG4gICAgICAgICAgICBzdGFydC5pbnB1dERpcmVjdGl2ZS5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgICAgICAgICBlbmQuaW5wdXREaXJlY3RpdmUuZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSZXF1aXJlZFRvSW5wdXRzKCk6IHZvaWQge1xuICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciBpZ3hJbnB1dCBzZXR0aW5nIHJlcXVpcmVkXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwICYmIHRoaXMuaW5wdXRHcm91cC5pc1JlcXVpcmVkICE9PSBpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLmlzUmVxdWlyZWQgPSBpc1JlcXVpcmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cyAmJiB0aGlzLl9uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4gaS5pc1JlcXVpcmVkID0gaXNSZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VNaW5WYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSk6IERhdGUgfCBudWxsIHtcbiAgICAgICAgbGV0IG1pblZhbHVlOiBEYXRlID0gcGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFtaW5WYWx1ZSAmJiB0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maWx0ZXIoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpWzBdO1xuICAgICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBwYXJzZURhdGUoc3RhcnQuZGF0ZVRpbWVFZGl0b3IubWluVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VNYXhWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSk6IERhdGUgfCBudWxsIHtcbiAgICAgICAgbGV0IG1heFZhbHVlOiBEYXRlID0gcGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFtYXhWYWx1ZSAmJiB0aGlzLnByb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmlsdGVyKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZUVuZENvbXBvbmVudClbMF07XG4gICAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSBwYXJzZURhdGUoZW5kLmRhdGVUaW1lRWRpdG9yLm1heFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXhWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNhbGVuZGFyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY2FsZW5kYXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGVuZGFyLmRpc2FibGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbWluVmFsdWUgPSB0aGlzLnBhcnNlTWluVmFsdWUodGhpcy5taW5WYWx1ZSk7XG4gICAgICAgIGlmIChtaW5WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5kaXNhYmxlZERhdGVzLnB1c2goeyB0eXBlOiBEYXRlUmFuZ2VUeXBlLkJlZm9yZSwgZGF0ZVJhbmdlOiBbbWluVmFsdWVdIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5wYXJzZU1heFZhbHVlKHRoaXMubWF4VmFsdWUpO1xuICAgICAgICBpZiAobWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXIuZGlzYWJsZWREYXRlcy5wdXNoKHsgdHlwZTogRGF0ZVJhbmdlVHlwZS5BZnRlciwgZGF0ZVJhbmdlOiBbbWF4VmFsdWVdIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmFuZ2U6IERhdGVbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy52YWx1ZT8uc3RhcnQgJiYgdGhpcy52YWx1ZT8uZW5kKSB7XG4gICAgICAgICAgICBjb25zdCBfdmFsdWUgPSB0aGlzLnRvUmFuZ2VPZkRhdGVzKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgaWYgKERhdGVUaW1lVXRpbC5ncmVhdGVyVGhhbk1heFZhbHVlKF92YWx1ZS5zdGFydCwgX3ZhbHVlLmVuZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN3YXBFZGl0b3JEYXRlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVJblJhbmdlKHRoaXMudmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByYW5nZS5wdXNoKF92YWx1ZS5zdGFydCwgX3ZhbHVlLmVuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmFuZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5zZWxlY3REYXRlKHJhbmdlKTtcbiAgICAgICAgfSBlbHNlIGlmIChyYW5nZS5sZW5ndGggPT09IDAgJiYgdGhpcy5jYWxlbmRhci5tb250aFZpZXdzKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyLmRlc2VsZWN0RGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsZW5kYXIudmlld0RhdGUgPSByYW5nZVswXSB8fCBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3dhcEVkaXRvckRhdGVzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudCkgYXMgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZUVuZENvbXBvbmVudCkgYXMgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50O1xuICAgICAgICAgICAgW3N0YXJ0LmRhdGVUaW1lRWRpdG9yLnZhbHVlLCBlbmQuZGF0ZVRpbWVFZGl0b3IudmFsdWVdID0gW2VuZC5kYXRlVGltZUVkaXRvci52YWx1ZSwgc3RhcnQuZGF0ZVRpbWVFZGl0b3IudmFsdWVdO1xuICAgICAgICAgICAgW3RoaXMudmFsdWUuc3RhcnQsIHRoaXMudmFsdWUuZW5kXSA9IFt0aGlzLnZhbHVlLmVuZCwgdGhpcy52YWx1ZS5zdGFydF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbHVlSW5SYW5nZSh2YWx1ZTogRGF0ZVJhbmdlLCBtaW5WYWx1ZT86IERhdGUsIG1heFZhbHVlPzogRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBfdmFsdWUgPSB0aGlzLnRvUmFuZ2VPZkRhdGVzKHZhbHVlKTtcbiAgICAgICAgaWYgKG1pblZhbHVlICYmIERhdGVUaW1lVXRpbC5sZXNzVGhhbk1pblZhbHVlKF92YWx1ZS5zdGFydCwgbWluVmFsdWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXhWYWx1ZSAmJiBEYXRlVGltZVV0aWwuZ3JlYXRlclRoYW5NYXhWYWx1ZShfdmFsdWUuZW5kLCBtYXhWYWx1ZSwgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4dHJhY3RSYW5nZShzZWxlY3Rpb246IERhdGVbXSk6IERhdGVSYW5nZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydDogc2VsZWN0aW9uWzBdIHx8IG51bGwsXG4gICAgICAgICAgICBlbmQ6IHNlbGVjdGlvbi5sZW5ndGggPiAwID8gc2VsZWN0aW9uW3NlbGVjdGlvbi5sZW5ndGggLSAxXSA6IG51bGxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvUmFuZ2VPZkRhdGVzKHJhbmdlOiBEYXRlUmFuZ2UpOiB7IHN0YXJ0OiBEYXRlOyBlbmQ6IERhdGUgfSB7XG4gICAgICAgIGxldCBzdGFydDtcbiAgICAgICAgbGV0IGVuZDtcbiAgICAgICAgaWYgKCFpc0RhdGUocmFuZ2Uuc3RhcnQpKSB7XG4gICAgICAgICAgICBzdGFydCA9IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUocmFuZ2Uuc3RhcnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNEYXRlKHJhbmdlLmVuZCkpIHtcbiAgICAgICAgICAgIGVuZCA9IERhdGVUaW1lVXRpbC5wYXJzZUlzb0RhdGUocmFuZ2UuZW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFydCB8fCBlbmQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHN0YXJ0OiByYW5nZS5zdGFydCBhcyBEYXRlLCBlbmQ6IHJhbmdlLmVuZCBhcyBEYXRlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0RhdGVFZGl0b3JFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Byb2plY3RlZElucHV0cykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnByb2plY3RlZElucHV0cy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoc3RhcnQgJiYgZW5kKSB7XG4gICAgICAgICAgICAgICAgc3RhcnQuZGF0ZVRpbWVFZGl0b3IudmFsdWVDaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB7IHN0YXJ0OiB2YWx1ZSwgZW5kOiB0aGlzLnZhbHVlLmVuZCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0geyBzdGFydDogdmFsdWUsIGVuZDogbnVsbCB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBlbmQuZGF0ZVRpbWVFZGl0b3IudmFsdWVDaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB7IHN0YXJ0OiB0aGlzLnZhbHVlLnN0YXJ0LCBlbmQ6IHZhbHVlIGFzIERhdGUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHsgc3RhcnQ6IG51bGwsIGVuZDogdmFsdWUgYXMgRGF0ZSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXR0YWNoT25Ub3VjaGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNQcm9qZWN0ZWRJbnB1dHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICAgICAgZnJvbUV2ZW50KGkuZGF0ZVRpbWVFZGl0b3IubmF0aXZlRWxlbWVudCwgJ2JsdXInKVxuICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHlPbkJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmlucHV0RGlyZWN0aXZlLm5hdGl2ZUVsZW1lbnQsICdibHVyJylcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsaWRpdHlPbkJsdXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWNoZUZvY3VzZWRJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkSW5wdXRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgICAgIGZyb21FdmVudChpLmRhdGVUaW1lRWRpdG9yLm5hdGl2ZUVsZW1lbnQsICdmb2N1cycpXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZm9jdXNlZElucHV0ID0gaSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlnUG9zaXRpb25TdHJhdGVneSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIG9wZW5BbmltYXRpb246IGZhZGVJbixcbiAgICAgICAgICAgIGNsb3NlQW5pbWF0aW9uOiBmYWRlT3V0XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kgPSBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb25TZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzLnRhcmdldCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgY29uZmlnT3ZlcmxheVNldHRpbmdzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5U2V0dGluZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2Ryb3BEb3duT3ZlcmxheVNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MsIHRoaXMub3ZlcmxheVNldHRpbmdzKTtcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ092ZXJsYXlTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2RpYWxvZ092ZXJsYXlTZXR0aW5ncywgdGhpcy5vdmVybGF5U2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsU2V0VmFsdWUoKSB7XG4gICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIHZhbHVlIGFuZCBubyBuZ0NvbnRyb2wgb24gdGhlIHBpY2tlciBidXQgd2UgaGF2ZSBpbnB1dHMgd2UgbWF5IGhhdmUgdmFsdWUgc2V0IHRocm91Z2hcbiAgICAgICAgLy8gdGhlaXIgbmdNb2RlbHMgLSB3ZSBzaG91bGQgZ2VuZXJhdGUgb3VyIGluaXRpYWwgY29udHJvbCB2YWx1ZVxuICAgICAgICBpZiAoKCF0aGlzLnZhbHVlIHx8ICghdGhpcy52YWx1ZS5zdGFydCAmJiAhdGhpcy52YWx1ZS5lbmQpKSAmJiB0aGlzLmhhc1Byb2plY3RlZElucHV0cyAmJiAhdGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucHJvamVjdGVkSW5wdXRzLmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlU3RhcnRDb21wb25lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHMuZmluZChpID0+IGkgaW5zdGFuY2VvZiBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQpO1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LmRhdGVUaW1lRWRpdG9yLnZhbHVlIGFzIERhdGUsXG4gICAgICAgICAgICAgICAgZW5kOiBlbmQuZGF0ZVRpbWVFZGl0b3IudmFsdWUgYXMgRGF0ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW5wdXRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMucHJvamVjdGVkSW5wdXRzPy5maW5kKGkgPT4gaSBpbnN0YW5jZW9mIElneERhdGVSYW5nZVN0YXJ0Q29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VTdGFydENvbXBvbmVudDtcbiAgICAgICAgY29uc3QgZW5kID0gdGhpcy5wcm9qZWN0ZWRJbnB1dHM/LmZpbmQoaSA9PiBpIGluc3RhbmNlb2YgSWd4RGF0ZVJhbmdlRW5kQ29tcG9uZW50KSBhcyBJZ3hEYXRlUmFuZ2VFbmRDb21wb25lbnQ7XG4gICAgICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnRvUmFuZ2VPZkRhdGVzKHRoaXMudmFsdWUpIDogbnVsbDtcbiAgICAgICAgICAgIHN0YXJ0LnVwZGF0ZUlucHV0VmFsdWUoX3ZhbHVlPy5zdGFydCB8fCBudWxsKTtcbiAgICAgICAgICAgIGVuZC51cGRhdGVJbnB1dFZhbHVlKF92YWx1ZT8uZW5kIHx8IG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVEaXNwbGF5Rm9ybWF0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBpIGFzIElneERhdGVSYW5nZUlucHV0c0Jhc2VDb21wb25lbnQ7XG4gICAgICAgICAgICBpbnB1dC5kYXRlVGltZUVkaXRvci5kaXNwbGF5Rm9ybWF0ID0gdGhpcy5kaXNwbGF5Rm9ybWF0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUlucHV0Rm9ybWF0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb2plY3RlZElucHV0cy5mb3JFYWNoKGkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBpIGFzIElneERhdGVSYW5nZUlucHV0c0Jhc2VDb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoaW5wdXQuZGF0ZVRpbWVFZGl0b3IuaW5wdXRGb3JtYXQgIT09IHRoaXMuaW5wdXRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRlVGltZUVkaXRvci5pbnB1dEZvcm1hdCA9IHRoaXMuaW5wdXRGb3JtYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlSW5wdXRMb2NhbGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvamVjdGVkSW5wdXRzLmZvckVhY2goaSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGkgYXMgSWd4RGF0ZVJhbmdlSW5wdXRzQmFzZUNvbXBvbmVudDtcbiAgICAgICAgICAgIGlucHV0LmRhdGVUaW1lRWRpdG9yLmxvY2FsZSA9IHRoaXMubG9jYWxlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ2FsZW5kYXJDb250YWluZXIoY29tcG9uZW50SW5zdGFuY2U6IElneENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuX2NhbGVuZGFyID0gY29tcG9uZW50SW5zdGFuY2UuY2FsZW5kYXI7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuaGFzSGVhZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIubG9jYWxlID0gdGhpcy5sb2NhbGU7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuc2VsZWN0aW9uID0gQ2FsZW5kYXJTZWxlY3Rpb24uUkFOR0U7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIud2Vla1N0YXJ0ID0gdGhpcy53ZWVrU3RhcnQ7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIuaGlkZU91dHNpZGVEYXlzID0gdGhpcy5oaWRlT3V0c2lkZURheXM7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIubW9udGhzVmlld051bWJlciA9IHRoaXMuZGlzcGxheU1vbnRoc0NvdW50O1xuICAgICAgICB0aGlzLmNhbGVuZGFyLnNob3dXZWVrTnVtYmVycyA9IHRoaXMuc2hvd1dlZWtOdW1iZXJzO1xuICAgICAgICB0aGlzLmNhbGVuZGFyLnNlbGVjdGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKChldjogRGF0ZVtdKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihldikpO1xuXG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLm1vZGUgPSB0aGlzLm1vZGU7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNsb3NlQnV0dG9uTGFiZWwgPSAhdGhpcy5pc0Ryb3Bkb3duID8gdGhpcy5kb25lQnV0dG9uVGV4dCA6IG51bGw7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLnBpY2tlckFjdGlvbnMgPSB0aGlzLnBpY2tlckFjdGlvbnM7XG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNhbGVuZGFyQ2xvc2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGFzUHJvamVjdGVkSW5wdXRzID8gc3RhcnRFbmRUZW1wbGF0ZSA6IGRlZlRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVGVtcGxhdGU+XG4gICAgPGRpdiAoY2xpY2spPVwib3BlbigpXCIgY2xhc3M9XCJjb250ZW50LXdyYXBcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWRhdGUtc2luZ2xlXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzdGFydEVuZFRlbXBsYXRlPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1kYXRlLXJhbmdlLXN0YXJ0XCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgW2NsYXNzTmFtZV09XCJzZXBhcmF0b3JDbGFzc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGF0ZVNlcGFyYXRvclRlbXBsYXRlIHx8IGRlZkRhdGVTZXBhcmF0b3JUZW1wbGF0ZTtcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LWRhdGUtcmFuZ2UtZW5kXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZJY29uPlxuICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJkZWZhdWx0XCIgbmFtZT1cImRhdGVfcmFuZ2VcIj48L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZEYXRlU2VwYXJhdG9yVGVtcGxhdGU+e3sgZGF0ZVNlcGFyYXRvciB9fTwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmVGVtcGxhdGU+XG4gICAgPGlneC1pbnB1dC1ncm91cCBbdHlwZV09XCJ0eXBlXCIgKGNsaWNrKT1cIm9wZW4oKVwiPlxuICAgICAgICA8IS0tIG9ubHkgc2V0IG1hc2sgcGxhY2Vob2xkZXIgd2hlbiBlbXB0eSwgb3RoZXJ3aXNlIGlucHV0IGdyb3VwIG1pZ2h0IHVzZSBpdCBhcyBsYWJlbCBpZiBub25lIGlzIHNldCAtLT5cbiAgICAgICAgPGlucHV0ICNzaW5nbGVJbnB1dCBpZ3hJbnB1dCB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtwbGFjZWhvbGRlcl09XCJ2YWx1ZSA/ICcnIDogc2luZ2xlSW5wdXRGb3JtYXRcIlxuICAgICAgICAgICAgcm9sZT1cImNvbWJvYm94XCIgYXJpYS1oYXNwb3B1cD1cImdyaWRcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIiFjb2xsYXBzZWRcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWw/LmlkXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZSB8IGRhdGVSYW5nZTogYXBwbGllZEZvcm1hdCA6IGxvY2FsZSA6IGZvcm1hdHRlclwiIC8+XG5cbiAgICAgICAgPGlneC1wcmVmaXggKm5nSWY9XCIhdG9nZ2xlQ29tcG9uZW50cy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZJY29uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LXByZWZpeD5cblxuICAgICAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiW2lneExhYmVsXVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneExhYmVsXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtcHJlZml4XCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtcHJlZml4LFtpZ3hQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1zdWZmaXhcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1zdWZmaXgsW2lneFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LWhpbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1oaW50LFtpZ3hIaW50XVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG48L25nLXRlbXBsYXRlPlxuIl19