@ng-nest/ui 18.0.7 → 18.0.9

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 (155) hide show
  1. package/alert/alert.component.d.ts +3 -3
  2. package/auto-complete/auto-complete-portal.component.d.ts +6 -9
  3. package/auto-complete/auto-complete.component.d.ts +1 -0
  4. package/cascade/cascade-portal.component.d.ts +7 -9
  5. package/cascade/cascade.component.d.ts +1 -9
  6. package/cascade/cascade.property.d.ts +5 -2
  7. package/checkbox/checkbox.property.d.ts +10 -98
  8. package/color-picker/color-picker-portal.component.d.ts +6 -9
  9. package/core/functions/convert.d.ts +5 -0
  10. package/core/util/public-api.d.ts +1 -0
  11. package/core/util/sleep.d.ts +5 -0
  12. package/date-picker/date-picker-portal.component.d.ts +5 -6
  13. package/date-picker/date-picker.property.d.ts +1 -31
  14. package/date-picker/date-range-portal.component.d.ts +5 -6
  15. package/dialog/dialog.component.d.ts +4 -3
  16. package/dropdown/dropdown-portal.component.d.ts +5 -7
  17. package/esm2022/alert/alert.component.mjs +13 -10
  18. package/esm2022/auto-complete/auto-complete-portal.component.mjs +17 -10
  19. package/esm2022/auto-complete/auto-complete.component.mjs +7 -4
  20. package/esm2022/back-top/back-top.component.mjs +4 -2
  21. package/esm2022/cascade/cascade-portal.component.mjs +20 -11
  22. package/esm2022/cascade/cascade.component.mjs +5 -3
  23. package/esm2022/cascade/cascade.property.mjs +2 -2
  24. package/esm2022/checkbox/checkbox.property.mjs +3 -43
  25. package/esm2022/color-picker/color-picker-portal.component.mjs +17 -10
  26. package/esm2022/color-picker/color-picker.component.mjs +3 -3
  27. package/esm2022/color-picker/color-picker.property.mjs +3 -3
  28. package/esm2022/core/functions/convert.mjs +15 -1
  29. package/esm2022/core/util/public-api.mjs +2 -1
  30. package/esm2022/core/util/sleep.mjs +8 -0
  31. package/esm2022/date-picker/date-picker-portal.component.mjs +17 -6
  32. package/esm2022/date-picker/date-picker.component.mjs +3 -3
  33. package/esm2022/date-picker/date-picker.property.mjs +2 -17
  34. package/esm2022/date-picker/date-range-portal.component.mjs +17 -6
  35. package/esm2022/date-picker/date-range.component.mjs +3 -3
  36. package/esm2022/dialog/dialog.component.mjs +23 -18
  37. package/esm2022/dropdown/dropdown-portal.component.mjs +17 -8
  38. package/esm2022/dropdown/dropdown.component.mjs +3 -3
  39. package/esm2022/find/find.component.mjs +15 -8
  40. package/esm2022/find/find.property.mjs +7 -57
  41. package/esm2022/form/form.component.mjs +3 -3
  42. package/esm2022/form/form.property.mjs +3 -3
  43. package/esm2022/highlight/highlight.component.mjs +3 -3
  44. package/esm2022/icon/icon.component.mjs +2 -2
  45. package/esm2022/image/image.component.mjs +3 -3
  46. package/esm2022/input/input.component.mjs +3 -3
  47. package/esm2022/input-number/input-number.component.mjs +3 -3
  48. package/esm2022/input-number/input-number.property.mjs +3 -23
  49. package/esm2022/loading/loading.component.mjs +3 -3
  50. package/esm2022/loading/loading.property.mjs +5 -5
  51. package/esm2022/pagination/pagination.component.mjs +7 -3
  52. package/esm2022/radio/radio.property.mjs +3 -53
  53. package/esm2022/rate/rate.property.mjs +3 -58
  54. package/esm2022/select/select-portal.component.mjs +17 -10
  55. package/esm2022/select/select.component.mjs +15 -5
  56. package/esm2022/select/select.property.mjs +2 -2
  57. package/esm2022/slider-select/slider-select.property.mjs +3 -58
  58. package/esm2022/switch/switch.property.mjs +3 -58
  59. package/esm2022/table/table-body.component.mjs +5 -4
  60. package/esm2022/table/table.component.mjs +3 -3
  61. package/esm2022/table/table.property.mjs +14 -4
  62. package/esm2022/textarea/textarea.property.mjs +3 -38
  63. package/esm2022/time-picker/time-picker-portal.component.mjs +17 -6
  64. package/esm2022/time-picker/time-picker.component.mjs +3 -3
  65. package/esm2022/time-picker/time-picker.property.mjs +3 -3
  66. package/esm2022/transfer/transfer.component.mjs +3 -3
  67. package/esm2022/tree/tree-node.component.mjs +10 -2
  68. package/esm2022/tree/tree.component.mjs +11 -9
  69. package/esm2022/tree/tree.property.mjs +1 -1
  70. package/esm2022/tree/tree.service.mjs +28 -4
  71. package/esm2022/tree-select/tree-select-portal.component.mjs +17 -6
  72. package/esm2022/tree-select/tree-select.component.mjs +20 -4
  73. package/fesm2022/ng-nest-ui-alert.mjs +12 -9
  74. package/fesm2022/ng-nest-ui-alert.mjs.map +1 -1
  75. package/fesm2022/ng-nest-ui-auto-complete.mjs +21 -11
  76. package/fesm2022/ng-nest-ui-auto-complete.mjs.map +1 -1
  77. package/fesm2022/ng-nest-ui-back-top.mjs +3 -1
  78. package/fesm2022/ng-nest-ui-back-top.mjs.map +1 -1
  79. package/fesm2022/ng-nest-ui-cascade.mjs +24 -13
  80. package/fesm2022/ng-nest-ui-cascade.mjs.map +1 -1
  81. package/fesm2022/ng-nest-ui-checkbox.mjs +2 -42
  82. package/fesm2022/ng-nest-ui-checkbox.mjs.map +1 -1
  83. package/fesm2022/ng-nest-ui-color-picker.mjs +20 -13
  84. package/fesm2022/ng-nest-ui-color-picker.mjs.map +1 -1
  85. package/fesm2022/ng-nest-ui-core.mjs +23 -1
  86. package/fesm2022/ng-nest-ui-core.mjs.map +1 -1
  87. package/fesm2022/ng-nest-ui-date-picker.mjs +36 -29
  88. package/fesm2022/ng-nest-ui-date-picker.mjs.map +1 -1
  89. package/fesm2022/ng-nest-ui-dialog.mjs +22 -17
  90. package/fesm2022/ng-nest-ui-dialog.mjs.map +1 -1
  91. package/fesm2022/ng-nest-ui-dropdown.mjs +19 -10
  92. package/fesm2022/ng-nest-ui-dropdown.mjs.map +1 -1
  93. package/fesm2022/ng-nest-ui-find.mjs +20 -63
  94. package/fesm2022/ng-nest-ui-find.mjs.map +1 -1
  95. package/fesm2022/ng-nest-ui-form.mjs +4 -4
  96. package/fesm2022/ng-nest-ui-form.mjs.map +1 -1
  97. package/fesm2022/ng-nest-ui-highlight.mjs +2 -2
  98. package/fesm2022/ng-nest-ui-highlight.mjs.map +1 -1
  99. package/fesm2022/ng-nest-ui-icon.mjs +1 -1
  100. package/fesm2022/ng-nest-ui-icon.mjs.map +1 -1
  101. package/fesm2022/ng-nest-ui-image.mjs +2 -2
  102. package/fesm2022/ng-nest-ui-image.mjs.map +1 -1
  103. package/fesm2022/ng-nest-ui-input-number.mjs +4 -24
  104. package/fesm2022/ng-nest-ui-input-number.mjs.map +1 -1
  105. package/fesm2022/ng-nest-ui-input.mjs +2 -2
  106. package/fesm2022/ng-nest-ui-input.mjs.map +1 -1
  107. package/fesm2022/ng-nest-ui-loading.mjs +6 -6
  108. package/fesm2022/ng-nest-ui-loading.mjs.map +1 -1
  109. package/fesm2022/ng-nest-ui-pagination.mjs +6 -2
  110. package/fesm2022/ng-nest-ui-pagination.mjs.map +1 -1
  111. package/fesm2022/ng-nest-ui-radio.mjs +2 -52
  112. package/fesm2022/ng-nest-ui-radio.mjs.map +1 -1
  113. package/fesm2022/ng-nest-ui-rate.mjs +2 -57
  114. package/fesm2022/ng-nest-ui-rate.mjs.map +1 -1
  115. package/fesm2022/ng-nest-ui-select.mjs +31 -14
  116. package/fesm2022/ng-nest-ui-select.mjs.map +1 -1
  117. package/fesm2022/ng-nest-ui-slider-select.mjs +2 -57
  118. package/fesm2022/ng-nest-ui-slider-select.mjs.map +1 -1
  119. package/fesm2022/ng-nest-ui-switch.mjs +2 -57
  120. package/fesm2022/ng-nest-ui-switch.mjs.map +1 -1
  121. package/fesm2022/ng-nest-ui-table.mjs +19 -8
  122. package/fesm2022/ng-nest-ui-table.mjs.map +1 -1
  123. package/fesm2022/ng-nest-ui-textarea.mjs +2 -37
  124. package/fesm2022/ng-nest-ui-textarea.mjs.map +1 -1
  125. package/fesm2022/ng-nest-ui-time-picker.mjs +20 -9
  126. package/fesm2022/ng-nest-ui-time-picker.mjs.map +1 -1
  127. package/fesm2022/ng-nest-ui-transfer.mjs +2 -2
  128. package/fesm2022/ng-nest-ui-transfer.mjs.map +1 -1
  129. package/fesm2022/ng-nest-ui-tree-select.mjs +35 -8
  130. package/fesm2022/ng-nest-ui-tree-select.mjs.map +1 -1
  131. package/fesm2022/ng-nest-ui-tree.mjs +46 -12
  132. package/fesm2022/ng-nest-ui-tree.mjs.map +1 -1
  133. package/find/find.component.d.ts +2 -0
  134. package/find/find.property.d.ts +20 -97
  135. package/form/form.property.d.ts +4 -4
  136. package/input-number/input-number.property.d.ts +4 -56
  137. package/loading/loading.property.d.ts +4 -4
  138. package/package.json +123 -123
  139. package/pagination/pagination.component.d.ts +2 -1
  140. package/radio/radio.property.d.ts +10 -118
  141. package/rate/rate.property.d.ts +16 -121
  142. package/select/select-portal.component.d.ts +6 -9
  143. package/select/select.component.d.ts +3 -1
  144. package/slider-select/slider-select.property.d.ts +6 -113
  145. package/switch/switch.property.d.ts +2 -117
  146. package/table/table-body.component.d.ts +1 -1
  147. package/table/table.property.d.ts +13 -3
  148. package/textarea/textarea.property.d.ts +10 -45
  149. package/time-picker/time-picker-portal.component.d.ts +5 -6
  150. package/time-picker/time-picker.property.d.ts +1 -2
  151. package/tree/tree.component.d.ts +2 -3
  152. package/tree/tree.property.d.ts +1 -1
  153. package/tree/tree.service.d.ts +1 -1
  154. package/tree-select/tree-select-portal.component.d.ts +5 -6
  155. package/tree-select/tree-select.component.d.ts +7 -4
@@ -1,4 +1,4 @@
1
- import { Component, ViewEncapsulation, Renderer2, ChangeDetectionStrategy, ViewContainerRef, HostBinding, inject, signal, computed, viewChild } from '@angular/core';
1
+ import { Component, ViewEncapsulation, Renderer2, ChangeDetectionStrategy, ViewContainerRef, HostBinding, inject, signal, computed, viewChild, effect, DestroyRef } from '@angular/core';
2
2
  import { XMoveBoxAnimation, XIsFunction, XConfigService, XOpacityAnimation } from '@ng-nest/ui/core';
3
3
  import { XDialogPrefix, XDialogProperty, XDialogContainer, X_DIALOG_CONTAINER } from './dialog.property';
4
4
  import { XPortalResizablePrefix, XPortalService } from '@ng-nest/ui/portal';
@@ -64,26 +64,31 @@ export class XDialogComponent extends XDialogProperty {
64
64
  this.styleOffsetTop = signal(0);
65
65
  this.visibleChanged = toObservable(this.visible);
66
66
  this.draggableChanged = toObservable(this.draggable);
67
+ this.destroy = signal(false);
68
+ this.destroyRef = inject(DestroyRef);
67
69
  this.visibleChanged.pipe(takeUntil(this.unSubject)).subscribe(() => {
68
70
  this.setVisible();
69
71
  });
72
+ effect(() => {
73
+ this.draggableSignal.set(this.draggable());
74
+ this.resizableSignal.set(this.resizable());
75
+ this.maximizeSignal.set(this.maximize());
76
+ this.dialogBox['draggable'] = this.draggableSignal();
77
+ this.dialogBox['resizable'] = this.resizableSignal();
78
+ }, { allowSignalWrites: true });
70
79
  }
71
80
  ngOnInit() {
72
81
  this.scrollStrategy = this.protalService.overlay.scrollStrategies.block();
73
- this.draggableSignal.set(this.draggable());
74
- this.resizableSignal.set(this.resizable());
75
- this.maximizeSignal.set(this.maximize());
76
- this.dialogBox['draggable'] = this.draggableSignal();
77
- this.dialogBox['resizable'] = this.resizableSignal();
82
+ this.destroyRef.onDestroy(() => {
83
+ this.destroy.set(true);
84
+ this.backdropClick$?.unsubscribe();
85
+ this.unSubject.next();
86
+ this.unSubject.complete();
87
+ });
78
88
  }
79
89
  ngAfterViewInit() {
80
90
  this.viewInit.set(true);
81
91
  }
82
- ngOnDestroy() {
83
- this.backdropClick$?.unsubscribe();
84
- this.unSubject.next();
85
- this.unSubject.complete();
86
- }
87
92
  setVisible() {
88
93
  if (!this.viewInit())
89
94
  return;
@@ -128,8 +133,8 @@ export class XDialogComponent extends XDialogProperty {
128
133
  Object.assign(this.dialogBox, this.protalService.setResizable(this.overlayElement(), this.placement()));
129
134
  this.styleOffsetLeft.set(this.overlayElement()?.offsetLeft);
130
135
  this.styleOffsetTop.set(this.overlayElement()?.offsetTop);
131
- const dialogDraggable = this.overlayElement()?.querySelector('.x-alert-draggable');
132
- this.initHeight = dialogDraggable.clientHeight;
136
+ const dialog = this.overlayElement()?.querySelector('.x-alert');
137
+ this.initHeight = dialog.clientHeight;
133
138
  this.dialogContent = this.overlayElement()?.querySelector('.x-dialog-content');
134
139
  this.initContentHeight = this.dialogContent.clientHeight;
135
140
  });
@@ -240,7 +245,7 @@ export class XDialogComponent extends XDialogProperty {
240
245
  }
241
246
  moveDone($event) {
242
247
  if ($event.toState === 'void') {
243
- this.closeDone.emit($event);
248
+ !this.destroy() && this.closeDone.emit($event);
244
249
  this.isMaximize.set(false);
245
250
  this.dialogBox = {
246
251
  draggable: this.draggableSignal(),
@@ -250,7 +255,7 @@ export class XDialogComponent extends XDialogProperty {
250
255
  this.dialogRef?.overlayRef?.dispose();
251
256
  }
252
257
  else {
253
- this.showDone.emit($event);
258
+ !this.destroy() && this.showDone.emit($event);
254
259
  }
255
260
  }
256
261
  onResizing(event) {
@@ -262,11 +267,11 @@ export class XDialogComponent extends XDialogProperty {
262
267
  }
263
268
  }
264
269
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
265
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: XDialogComponent, isStandalone: true, selector: "x-dialog", host: { properties: { "class.x-dialog-visible": "this.getVisible", "class": "this.clsName" } }, viewQueries: [{ propertyName: "dialogTpl", first: true, predicate: ["dialogTpl"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #dialogTpl>\r\n @if (container && hasBackdrop()) {\r\n <div class=\"x-dialog-backdrop\" [@x-opacity-animation]=\"visible()\" (click)=\"onClose('close')\"></div>\r\n }\r\n <div\r\n class=\"x-dialog\"\r\n [@x-move-box-animation]=\"placement()\"\r\n (@x-move-box-animation.done)=\"moveDone($event)\"\r\n [class.x-dialog-maximize]=\"isMaximize()\"\r\n [class.x-dialog-resizable]=\"resizableSignal()\"\r\n [class.x-dialog-default-maximize]=\"isDefaultMaximize()\"\r\n [ngStyle]=\"getStyle()\"\r\n >\r\n <x-alert\r\n [draggable]=\"draggableSignal() && dialogBox['draggable']\"\r\n [resizable]=\"resizableSignal() && dialogBox['resizable']\"\r\n [dragFreeDragPosition]=\"dialogBox['distance']\"\r\n [offsetLeft]=\"styleOffsetLeft()\"\r\n [offsetTop]=\"styleOffsetTop()\"\r\n [minWidth]=\"dialogBox['minWidth']\"\r\n [minHeight]=\"dialogBox['minHeight']\"\r\n [dragBoundary]=\"'.cdk-overlay-container'\"\r\n [title]=\"title()\"\r\n [content]=\"contentTpl\"\r\n [type]=\"type()\"\r\n [effect]=\"effect()\"\r\n [hideClose]=\"hideClose()\"\r\n [closeText]=\"closeText()\"\r\n [operationTpl]=\"operationTpl\"\r\n (close)=\"onClose('close')\"\r\n (dragEnded)=\"onDragEnded($event)\"\r\n (resizing)=\"onResizing($event)\"\r\n [showIcon]=\"false\"\r\n [duration]=\"0\"\r\n manual\r\n disabledAnimation\r\n ></x-alert>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"x-dialog-inner\">\r\n <div class=\"x-dialog-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"x-dialog-buttons\" [class.x-dialog-buttons-center]=\"buttonsCenter()\">\r\n <ng-container *xOutlet=\"footer()\">\r\n @if (showCancel() || showConfirm()) {\r\n <x-buttons space=\"0.5rem\">\r\n @if (showCancel()) {\r\n <x-button (click)=\"onClose('cancel')\" flat plain>{{ getCancelText() }}</x-button>\r\n }\r\n @if (showConfirm()) {\r\n <x-button type=\"primary\" flat (click)=\"onClose('confirm')\">{{ getConfirmText() }}</x-button>\r\n }\r\n </x-buttons>\r\n }\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #operationTpl>\r\n @if (maximizeSignal() || resizableSignal()) {\r\n <x-button\r\n size=\"small\"\r\n flat\r\n [icon]=\"isMaximize() ? 'fto-minimize' : 'fto-maximize'\"\r\n [onlyIcon]=\"true\"\r\n (click)=\"onSize()\"\r\n ></x-button>\r\n }\r\n</ng-template>\r\n\r\n@if (container && visible()) {\r\n <ng-container *ngTemplateOutlet=\"dialogTpl\"></ng-container>\r\n}\r\n", styles: [".x-dialog{margin:0;padding:0}.x-dialog{width:100%;height:100%}.x-dialog>x-alert{height:100%}.x-dialog>x-alert .x-alert{min-height:100%;height:fit-content;align-items:inherit;padding:0}.x-dialog>x-alert .x-alert-inner{min-height:100%;display:flex;flex-direction:column}.x-dialog>x-alert .x-alert-title{padding:1rem 1rem 0}.x-dialog>x-alert .x-alert-content{flex:1;display:flex;flex-direction:column;padding:0 1rem .5rem}.x-dialog-inner{display:flex;flex-direction:column;margin:.5rem 0;flex:1}.x-dialog-buttons{display:flex;justify-content:flex-end}.x-dialog-buttons>x-buttons{margin-top:1rem;align-self:flex-end}.x-dialog-buttons-center{justify-content:center}.x-dialog-content{display:inline-flex;flex-direction:column;flex:1;max-height:70vh;overflow:auto;min-height:2rem}.x-dialog-maximize>x-alert .x-alert{left:0!important;top:0!important;border-radius:0!important}.x-dialog-maximize .x-dialog-content{max-height:calc(100vh - 7.875rem)!important;height:calc(100vh - 7.875rem)!important}.x-dialog-default-maximize .x-dialog-content{max-height:calc(100vh - 7.875rem)!important;height:calc(100vh - 7.875rem)!important;flex:initial}.x-dialog-default-maximize>x-alert .x-alert{left:0!important;top:0!important;border-radius:0!important}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: XAlertComponent, selector: "x-alert" }, { kind: "component", type: XButtonComponent, selector: "x-button" }, { kind: "component", type: XButtonsComponent, selector: "x-buttons" }, { kind: "directive", type: XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }], animations: [XMoveBoxAnimation, XOpacityAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
270
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.2", type: XDialogComponent, isStandalone: true, selector: "x-dialog", host: { properties: { "class.x-dialog-visible": "this.getVisible", "class": "this.clsName" } }, viewQueries: [{ propertyName: "dialogTpl", first: true, predicate: ["dialogTpl"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #dialogTpl>\r\n @if (container && hasBackdrop()) {\r\n <div class=\"x-dialog-backdrop\" [@x-opacity-animation]=\"visible()\" (click)=\"onClose('close')\"></div>\r\n }\r\n <div\r\n class=\"x-dialog\"\r\n [@x-move-box-animation]=\"placement()\"\r\n (@x-move-box-animation.done)=\"moveDone($event)\"\r\n [class.x-dialog-maximize]=\"isMaximize()\"\r\n [class.x-dialog-resizable]=\"resizableSignal()\"\r\n [class.x-dialog-default-maximize]=\"isDefaultMaximize()\"\r\n [ngStyle]=\"getStyle()\"\r\n >\r\n <x-alert\r\n [draggable]=\"draggableSignal() && dialogBox['draggable']\"\r\n [resizable]=\"resizableSignal() && dialogBox['resizable']\"\r\n [dragFreeDragPosition]=\"dialogBox['distance']\"\r\n [offsetLeft]=\"styleOffsetLeft()\"\r\n [offsetTop]=\"styleOffsetTop()\"\r\n [minWidth]=\"dialogBox['minWidth']\"\r\n [minHeight]=\"dialogBox['minHeight']\"\r\n [dragBoundary]=\"'.cdk-overlay-container'\"\r\n [title]=\"title()\"\r\n [content]=\"contentTpl\"\r\n [type]=\"type()\"\r\n [effect]=\"effect()\"\r\n [hideClose]=\"hideClose()\"\r\n [closeText]=\"closeText()\"\r\n [operationTpl]=\"operationTpl\"\r\n (close)=\"onClose('close')\"\r\n (dragEnded)=\"onDragEnded($event)\"\r\n (resizing)=\"onResizing($event)\"\r\n [showIcon]=\"false\"\r\n [duration]=\"0\"\r\n manual\r\n disabledAnimation\r\n ></x-alert>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"x-dialog-inner\">\r\n <div class=\"x-dialog-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"x-dialog-buttons\" [class.x-dialog-buttons-center]=\"buttonsCenter()\">\r\n <ng-container *xOutlet=\"footer()\">\r\n @if (showCancel() || showConfirm()) {\r\n <x-buttons space=\"0.5rem\">\r\n @if (showCancel()) {\r\n <x-button class=\"x-dialog-cancel\" (click)=\"onClose('cancel')\" flat plain>{{ getCancelText() }}</x-button>\r\n }\r\n @if (showConfirm()) {\r\n <x-button class=\"x-dialog-confirm\" type=\"primary\" flat (click)=\"onClose('confirm')\">{{\r\n getConfirmText()\r\n }}</x-button>\r\n }\r\n </x-buttons>\r\n }\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #operationTpl>\r\n @if (maximizeSignal() || resizableSignal()) {\r\n <x-button\r\n size=\"small\"\r\n flat\r\n [icon]=\"isMaximize() ? 'fto-minimize' : 'fto-maximize'\"\r\n [onlyIcon]=\"true\"\r\n (click)=\"onSize()\"\r\n class=\"x-dialog-maximize\"\r\n ></x-button>\r\n }\r\n</ng-template>\r\n\r\n@if (container && visible()) {\r\n <ng-container *ngTemplateOutlet=\"dialogTpl\"></ng-container>\r\n}\r\n", styles: [".x-dialog{margin:0;padding:0}.x-dialog{width:100%;height:100%}.x-dialog>x-alert{height:100%}.x-dialog>x-alert .x-alert{min-height:100%;height:fit-content;align-items:inherit;padding:0}.x-dialog>x-alert .x-alert-inner{min-height:100%;display:flex;flex-direction:column}.x-dialog>x-alert .x-alert-title{padding:1rem 1rem 0}.x-dialog>x-alert .x-alert-content{flex:1;display:flex;flex-direction:column;padding:0 1rem .5rem}.x-dialog-inner{display:flex;flex-direction:column;margin:.5rem 0;flex:1}.x-dialog-buttons{display:flex;justify-content:flex-end}.x-dialog-buttons>x-buttons{margin-top:1rem;align-self:flex-end}.x-dialog-buttons-center{justify-content:center}.x-dialog-content{display:inline-flex;flex-direction:column;flex:1;max-height:70vh;overflow:auto;min-height:2rem}.x-dialog-maximize>x-alert .x-alert{left:0!important;top:0!important;border-radius:0!important}.x-dialog-maximize .x-dialog-content{max-height:calc(100vh - 7.875rem)!important;height:calc(100vh - 7.875rem)!important}.x-dialog-default-maximize .x-dialog-content{max-height:calc(100vh - 7.875rem)!important;height:calc(100vh - 7.875rem)!important;flex:initial}.x-dialog-default-maximize>x-alert .x-alert{left:0!important;top:0!important;border-radius:0!important}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: XAlertComponent, selector: "x-alert" }, { kind: "component", type: XButtonComponent, selector: "x-button" }, { kind: "component", type: XButtonsComponent, selector: "x-buttons" }, { kind: "directive", type: XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }], animations: [XMoveBoxAnimation, XOpacityAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
266
271
  }
267
272
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: XDialogComponent, decorators: [{
268
273
  type: Component,
269
- args: [{ selector: `${XDialogPrefix}`, standalone: true, imports: [NgStyle, NgTemplateOutlet, XAlertComponent, XButtonComponent, XButtonsComponent, XOutletDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [XMoveBoxAnimation, XOpacityAnimation], template: "<ng-template #dialogTpl>\r\n @if (container && hasBackdrop()) {\r\n <div class=\"x-dialog-backdrop\" [@x-opacity-animation]=\"visible()\" (click)=\"onClose('close')\"></div>\r\n }\r\n <div\r\n class=\"x-dialog\"\r\n [@x-move-box-animation]=\"placement()\"\r\n (@x-move-box-animation.done)=\"moveDone($event)\"\r\n [class.x-dialog-maximize]=\"isMaximize()\"\r\n [class.x-dialog-resizable]=\"resizableSignal()\"\r\n [class.x-dialog-default-maximize]=\"isDefaultMaximize()\"\r\n [ngStyle]=\"getStyle()\"\r\n >\r\n <x-alert\r\n [draggable]=\"draggableSignal() && dialogBox['draggable']\"\r\n [resizable]=\"resizableSignal() && dialogBox['resizable']\"\r\n [dragFreeDragPosition]=\"dialogBox['distance']\"\r\n [offsetLeft]=\"styleOffsetLeft()\"\r\n [offsetTop]=\"styleOffsetTop()\"\r\n [minWidth]=\"dialogBox['minWidth']\"\r\n [minHeight]=\"dialogBox['minHeight']\"\r\n [dragBoundary]=\"'.cdk-overlay-container'\"\r\n [title]=\"title()\"\r\n [content]=\"contentTpl\"\r\n [type]=\"type()\"\r\n [effect]=\"effect()\"\r\n [hideClose]=\"hideClose()\"\r\n [closeText]=\"closeText()\"\r\n [operationTpl]=\"operationTpl\"\r\n (close)=\"onClose('close')\"\r\n (dragEnded)=\"onDragEnded($event)\"\r\n (resizing)=\"onResizing($event)\"\r\n [showIcon]=\"false\"\r\n [duration]=\"0\"\r\n manual\r\n disabledAnimation\r\n ></x-alert>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"x-dialog-inner\">\r\n <div class=\"x-dialog-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"x-dialog-buttons\" [class.x-dialog-buttons-center]=\"buttonsCenter()\">\r\n <ng-container *xOutlet=\"footer()\">\r\n @if (showCancel() || showConfirm()) {\r\n <x-buttons space=\"0.5rem\">\r\n @if (showCancel()) {\r\n <x-button (click)=\"onClose('cancel')\" flat plain>{{ getCancelText() }}</x-button>\r\n }\r\n @if (showConfirm()) {\r\n <x-button type=\"primary\" flat (click)=\"onClose('confirm')\">{{ getConfirmText() }}</x-button>\r\n }\r\n </x-buttons>\r\n }\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #operationTpl>\r\n @if (maximizeSignal() || resizableSignal()) {\r\n <x-button\r\n size=\"small\"\r\n flat\r\n [icon]=\"isMaximize() ? 'fto-minimize' : 'fto-maximize'\"\r\n [onlyIcon]=\"true\"\r\n (click)=\"onSize()\"\r\n ></x-button>\r\n }\r\n</ng-template>\r\n\r\n@if (container && visible()) {\r\n <ng-container *ngTemplateOutlet=\"dialogTpl\"></ng-container>\r\n}\r\n", styles: [".x-dialog{margin:0;padding:0}.x-dialog{width:100%;height:100%}.x-dialog>x-alert{height:100%}.x-dialog>x-alert .x-alert{min-height:100%;height:fit-content;align-items:inherit;padding:0}.x-dialog>x-alert .x-alert-inner{min-height:100%;display:flex;flex-direction:column}.x-dialog>x-alert .x-alert-title{padding:1rem 1rem 0}.x-dialog>x-alert .x-alert-content{flex:1;display:flex;flex-direction:column;padding:0 1rem .5rem}.x-dialog-inner{display:flex;flex-direction:column;margin:.5rem 0;flex:1}.x-dialog-buttons{display:flex;justify-content:flex-end}.x-dialog-buttons>x-buttons{margin-top:1rem;align-self:flex-end}.x-dialog-buttons-center{justify-content:center}.x-dialog-content{display:inline-flex;flex-direction:column;flex:1;max-height:70vh;overflow:auto;min-height:2rem}.x-dialog-maximize>x-alert .x-alert{left:0!important;top:0!important;border-radius:0!important}.x-dialog-maximize .x-dialog-content{max-height:calc(100vh - 7.875rem)!important;height:calc(100vh - 7.875rem)!important}.x-dialog-default-maximize .x-dialog-content{max-height:calc(100vh - 7.875rem)!important;height:calc(100vh - 7.875rem)!important;flex:initial}.x-dialog-default-maximize>x-alert .x-alert{left:0!important;top:0!important;border-radius:0!important}\n"] }]
274
+ args: [{ selector: `${XDialogPrefix}`, standalone: true, imports: [NgStyle, NgTemplateOutlet, XAlertComponent, XButtonComponent, XButtonsComponent, XOutletDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [XMoveBoxAnimation, XOpacityAnimation], template: "<ng-template #dialogTpl>\r\n @if (container && hasBackdrop()) {\r\n <div class=\"x-dialog-backdrop\" [@x-opacity-animation]=\"visible()\" (click)=\"onClose('close')\"></div>\r\n }\r\n <div\r\n class=\"x-dialog\"\r\n [@x-move-box-animation]=\"placement()\"\r\n (@x-move-box-animation.done)=\"moveDone($event)\"\r\n [class.x-dialog-maximize]=\"isMaximize()\"\r\n [class.x-dialog-resizable]=\"resizableSignal()\"\r\n [class.x-dialog-default-maximize]=\"isDefaultMaximize()\"\r\n [ngStyle]=\"getStyle()\"\r\n >\r\n <x-alert\r\n [draggable]=\"draggableSignal() && dialogBox['draggable']\"\r\n [resizable]=\"resizableSignal() && dialogBox['resizable']\"\r\n [dragFreeDragPosition]=\"dialogBox['distance']\"\r\n [offsetLeft]=\"styleOffsetLeft()\"\r\n [offsetTop]=\"styleOffsetTop()\"\r\n [minWidth]=\"dialogBox['minWidth']\"\r\n [minHeight]=\"dialogBox['minHeight']\"\r\n [dragBoundary]=\"'.cdk-overlay-container'\"\r\n [title]=\"title()\"\r\n [content]=\"contentTpl\"\r\n [type]=\"type()\"\r\n [effect]=\"effect()\"\r\n [hideClose]=\"hideClose()\"\r\n [closeText]=\"closeText()\"\r\n [operationTpl]=\"operationTpl\"\r\n (close)=\"onClose('close')\"\r\n (dragEnded)=\"onDragEnded($event)\"\r\n (resizing)=\"onResizing($event)\"\r\n [showIcon]=\"false\"\r\n [duration]=\"0\"\r\n manual\r\n disabledAnimation\r\n ></x-alert>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #contentTpl>\r\n <div class=\"x-dialog-inner\">\r\n <div class=\"x-dialog-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"x-dialog-buttons\" [class.x-dialog-buttons-center]=\"buttonsCenter()\">\r\n <ng-container *xOutlet=\"footer()\">\r\n @if (showCancel() || showConfirm()) {\r\n <x-buttons space=\"0.5rem\">\r\n @if (showCancel()) {\r\n <x-button class=\"x-dialog-cancel\" (click)=\"onClose('cancel')\" flat plain>{{ getCancelText() }}</x-button>\r\n }\r\n @if (showConfirm()) {\r\n <x-button class=\"x-dialog-confirm\" type=\"primary\" flat (click)=\"onClose('confirm')\">{{\r\n getConfirmText()\r\n }}</x-button>\r\n }\r\n </x-buttons>\r\n }\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #operationTpl>\r\n @if (maximizeSignal() || resizableSignal()) {\r\n <x-button\r\n size=\"small\"\r\n flat\r\n [icon]=\"isMaximize() ? 'fto-minimize' : 'fto-maximize'\"\r\n [onlyIcon]=\"true\"\r\n (click)=\"onSize()\"\r\n class=\"x-dialog-maximize\"\r\n ></x-button>\r\n }\r\n</ng-template>\r\n\r\n@if (container && visible()) {\r\n <ng-container *ngTemplateOutlet=\"dialogTpl\"></ng-container>\r\n}\r\n", styles: [".x-dialog{margin:0;padding:0}.x-dialog{width:100%;height:100%}.x-dialog>x-alert{height:100%}.x-dialog>x-alert .x-alert{min-height:100%;height:fit-content;align-items:inherit;padding:0}.x-dialog>x-alert .x-alert-inner{min-height:100%;display:flex;flex-direction:column}.x-dialog>x-alert .x-alert-title{padding:1rem 1rem 0}.x-dialog>x-alert .x-alert-content{flex:1;display:flex;flex-direction:column;padding:0 1rem .5rem}.x-dialog-inner{display:flex;flex-direction:column;margin:.5rem 0;flex:1}.x-dialog-buttons{display:flex;justify-content:flex-end}.x-dialog-buttons>x-buttons{margin-top:1rem;align-self:flex-end}.x-dialog-buttons-center{justify-content:center}.x-dialog-content{display:inline-flex;flex-direction:column;flex:1;max-height:70vh;overflow:auto;min-height:2rem}.x-dialog-maximize>x-alert .x-alert{left:0!important;top:0!important;border-radius:0!important}.x-dialog-maximize .x-dialog-content{max-height:calc(100vh - 7.875rem)!important;height:calc(100vh - 7.875rem)!important}.x-dialog-default-maximize .x-dialog-content{max-height:calc(100vh - 7.875rem)!important;height:calc(100vh - 7.875rem)!important;flex:initial}.x-dialog-default-maximize>x-alert .x-alert{left:0!important;top:0!important;border-radius:0!important}\n"] }]
270
275
  }], ctorParameters: () => [], propDecorators: { getVisible: [{
271
276
  type: HostBinding,
272
277
  args: ['class.x-dialog-visible']
@@ -274,4 +279,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
274
279
  type: HostBinding,
275
280
  args: ['class']
276
281
  }] } });
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsdUJBQXVCLEVBRXZCLGdCQUFnQixFQUVoQixXQUFXLEVBQ1gsTUFBTSxFQUVOLE1BQU0sRUFDTixRQUFRLEVBRVIsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckcsT0FBTyxFQUNMLGFBQWEsRUFFYixlQUFlLEVBQ2YsZ0JBQWdCLEVBRWhCLGtCQUFrQixFQUNuQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1RSxPQUFPLEVBQWdCLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQXVCLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BFLE9BQU8sRUFBZSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUloRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7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c0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgUmVuZGVyZXIyLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgT25EZXN0cm95LFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIGluamVjdCxcclxuICBPbkluaXQsXHJcbiAgc2lnbmFsLFxyXG4gIGNvbXB1dGVkLFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgdmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFhNb3ZlQm94QW5pbWF0aW9uLCBYSXNGdW5jdGlvbiwgWENvbmZpZ1NlcnZpY2UsIFhPcGFjaXR5QW5pbWF0aW9uIH0gZnJvbSAnQG5nLW5lc3QvdWkvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgWERpYWxvZ1ByZWZpeCxcclxuICBYRGlhbG9nT3ZlcmxheVJlZixcclxuICBYRGlhbG9nUHJvcGVydHksXHJcbiAgWERpYWxvZ0NvbnRhaW5lcixcclxuICBYRGlhbG9nQWN0aW9uLFxyXG4gIFhfRElBTE9HX0NPTlRBSU5FUlxyXG59IGZyb20gJy4vZGlhbG9nLnByb3BlcnR5JztcclxuaW1wb3J0IHsgWFBvcnRhbFJlc2l6YWJsZVByZWZpeCwgWFBvcnRhbFNlcnZpY2UgfSBmcm9tICdAbmctbmVzdC91aS9wb3J0YWwnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmxvY2tTY3JvbGxTdHJhdGVneSwgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgWEkxOG5EaWFsb2csIFhJMThuU2VydmljZSwgemhfQ04gfSBmcm9tICdAbmctbmVzdC91aS9pMThuJztcclxuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENka0RyYWdFbmQgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgWFJlc2l6YWJsZUV2ZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvcmVzaXphYmxlJztcclxuaW1wb3J0IHsgWERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBYQWxlcnRDb21wb25lbnQgfSBmcm9tICdAbmctbmVzdC91aS9hbGVydCc7XHJcbmltcG9ydCB7IFhCdXR0b25Db21wb25lbnQsIFhCdXR0b25zQ29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvYnV0dG9uJztcclxuaW1wb3J0IHsgWE91dGxldERpcmVjdGl2ZSB9IGZyb20gJ0BuZy1uZXN0L3VpL291dGxldCc7XHJcbmltcG9ydCB7IE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IGAke1hEaWFsb2dQcmVmaXh9YCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0LCBYQWxlcnRDb21wb25lbnQsIFhCdXR0b25Db21wb25lbnQsIFhCdXR0b25zQ29tcG9uZW50LCBYT3V0bGV0RGlyZWN0aXZlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGFuaW1hdGlvbnM6IFtYTW92ZUJveEFuaW1hdGlvbiwgWE9wYWNpdHlBbmltYXRpb25dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYRGlhbG9nQ29tcG9uZW50IGV4dGVuZHMgWERpYWxvZ1Byb3BlcnR5IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcclxuICBwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XHJcbiAgcHJpdmF0ZSBwcm90YWxTZXJ2aWNlID0gaW5qZWN0KFhQb3J0YWxTZXJ2aWNlKTtcclxuICBwcml2YXRlIG92ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XHJcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KFhJMThuU2VydmljZSk7XHJcbiAgcHJpdmF0ZSB1blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLngtZGlhbG9nLXZpc2libGUnKSBnZXQgZ2V0VmlzaWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnZpc2libGUoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbHNOYW1lID0gYCR7WERpYWxvZ1ByZWZpeH0tJHt0aGlzLnBsYWNlbWVudCgpfWA7XHJcblxyXG4gIGRpYWxvZ1RwbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxUZW1wbGF0ZVJlZjx2b2lkPj4oJ2RpYWxvZ1RwbCcpO1xyXG4gIGRpYWxvZ1JlZiE6IFhEaWFsb2dPdmVybGF5UmVmO1xyXG4gIGJhY2tkcm9wQ2xpY2skITogU3Vic2NyaXB0aW9uO1xyXG4gIHNjcm9sbFN0cmF0ZWd5ITogQmxvY2tTY3JvbGxTdHJhdGVneTtcclxuICBsb2NhbGUgPSB0b1NpZ25hbCh0aGlzLmkxOG4ubG9jYWxlQ2hhbmdlLnBpcGUobWFwKCh4KSA9PiB4LmRpYWxvZyBhcyBYSTE4bkRpYWxvZykpLCB7IGluaXRpYWxWYWx1ZTogemhfQ04uZGlhbG9nIH0pO1xyXG4gIG92ZXJsYXlFbGVtZW50ID0gc2lnbmFsPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XHJcbiAgZGlhbG9nQ29udGVudD86IEhUTUxFbGVtZW50O1xyXG4gIGluaXRIZWlnaHQ/ID0gMDtcclxuICBpbml0Q29udGVudEhlaWdodD8gPSAwO1xyXG4gIGlzTWF4aW1pemUgPSBzaWduYWwoZmFsc2UpO1xyXG4gIGlzRGVmYXVsdE1heGltaXplID0gc2lnbmFsKGZhbHNlKTtcclxuICBkaWFsb2dCb3g6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICBjb250ZW50Qm94OiBYUmVzaXphYmxlRXZlbnQgPSB7fTtcclxuICBkaXN0YW5jZSA9IHsgeDogMCwgeTogMCB9O1xyXG4gIHZpZXdJbml0ID0gc2lnbmFsKGZhbHNlKTtcclxuICBhY3Rpb246IFhEaWFsb2dBY3Rpb24gfCBudWxsID0gbnVsbDtcclxuICBjb250YWluZXJJbml0ID0gZmFsc2U7XHJcbiAgcmVzaXphYmxlU2lnbmFsID0gc2lnbmFsKGZhbHNlKTtcclxuICBkcmFnZ2FibGVTaWduYWwgPSBzaWduYWwoZmFsc2UpO1xyXG4gIG1heGltaXplU2lnbmFsID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcbiAgZ2V0Q2FuY2VsVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLmNhbmNlbFRleHQoKSB8fCB0aGlzLmxvY2FsZSgpLmNhbmNlbFRleHQ7XHJcbiAgfSk7XHJcblxyXG4gIGdldENvbmZpcm1UZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlybVRleHQoKSB8fCB0aGlzLmxvY2FsZSgpLmNvbmZpcm1UZXh0O1xyXG4gIH0pO1xyXG5cclxuICBnZXRTdHlsZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclxyXG4gICAgICA/IHtcclxuICAgICAgICAgIC4uLnRoaXMucHJvdGFsU2VydmljZS5zZXRDb250YWluZXJTdHlsZSh0aGlzLnBsYWNlbWVudCgpLCB0aGlzLm9mZnNldCgpKSxcclxuICAgICAgICAgIHdpZHRoOiB0aGlzLndpZHRoKCksXHJcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksXHJcbiAgICAgICAgICBtaW5XaWR0aDogdGhpcy5taW5XaWR0aCgpLFxyXG4gICAgICAgICAgbWluSGVpZ2h0OiB0aGlzLm1pbkhlaWdodCgpXHJcbiAgICAgICAgfVxyXG4gICAgICA6IHt9O1xyXG4gIH0pO1xyXG4gIGNvbnRhaW5lciA9IGluamVjdDxYRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50PihYX0RJQUxPR19DT05UQUlORVIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XHJcbiAgY29uZmlnU2VydmljZSA9IGluamVjdChYQ29uZmlnU2VydmljZSk7XHJcblxyXG4gIHN0eWxlT2Zmc2V0TGVmdCA9IHNpZ25hbCgwKTtcclxuICBzdHlsZU9mZnNldFRvcCA9IHNpZ25hbCgwKTtcclxuXHJcbiAgdmlzaWJsZUNoYW5nZWQgPSB0b09ic2VydmFibGUodGhpcy52aXNpYmxlKTtcclxuICBkcmFnZ2FibGVDaGFuZ2VkID0gdG9PYnNlcnZhYmxlKHRoaXMuZHJhZ2dhYmxlKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0VmlzaWJsZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLnByb3RhbFNlcnZpY2Uub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCk7XHJcbiAgICB0aGlzLmRyYWdnYWJsZVNpZ25hbC5zZXQodGhpcy5kcmFnZ2FibGUoKSk7XHJcbiAgICB0aGlzLnJlc2l6YWJsZVNpZ25hbC5zZXQodGhpcy5yZXNpemFibGUoKSk7XHJcbiAgICB0aGlzLm1heGltaXplU2lnbmFsLnNldCh0aGlzLm1heGltaXplKCkpO1xyXG4gICAgdGhpcy5kaWFsb2dCb3hbJ2RyYWdnYWJsZSddID0gdGhpcy5kcmFnZ2FibGVTaWduYWwoKTtcclxuICAgIHRoaXMuZGlhbG9nQm94WydyZXNpemFibGUnXSA9IHRoaXMucmVzaXphYmxlU2lnbmFsKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpZXdJbml0LnNldCh0cnVlKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5iYWNrZHJvcENsaWNrJD8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMudW5TdWJqZWN0Lm5leHQoKTtcclxuICAgIHRoaXMudW5TdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRWaXNpYmxlKCkge1xyXG4gICAgaWYgKCF0aGlzLnZpZXdJbml0KCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnZpc2libGUoKSkge1xyXG4gICAgICB0aGlzLmNyZWF0ZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbkNsb3NlKCdjbG9zZScsIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmNvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLmNvbnRhaW5lckluaXQgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMucHJvdGFsU2VydmljZS5hdHRhY2goe1xyXG4gICAgICBjb250ZW50OiB0aGlzLmRpYWxvZ1RwbCgpLFxyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgIG92ZXJsYXlDb25maWc6IHtcclxuICAgICAgICBwYW5lbENsYXNzOiBbWERpYWxvZ0NvbnRhaW5lciwgdGhpcy5jbGFzc05hbWUoKV0sXHJcbiAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuaGFzQmFja2Ryb3AoKSxcclxuICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKSxcclxuICAgICAgICB3aWR0aDogdGhpcy53aWR0aCgpLFxyXG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQoKSxcclxuICAgICAgICBtaW5XaWR0aDogdGhpcy5taW5XaWR0aCgpLFxyXG4gICAgICAgIG1pbkhlaWdodDogdGhpcy5taW5IZWlnaHQoKSxcclxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLnByb3RhbFNlcnZpY2Uuc2V0UGxhY2UodGhpcy5wbGFjZW1lbnQoKSwgdGhpcy5vZmZzZXQoKSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCB7IGhvc3RFbGVtZW50LCBvdmVybGF5RWxlbWVudCB9ID0gdGhpcy5kaWFsb2dSZWYub3ZlcmxheVJlZiE7XHJcbiAgICB0aGlzLm92ZXJsYXlFbGVtZW50LnNldChvdmVybGF5RWxlbWVudCk7XHJcbiAgICB0aGlzLnNldFdpZHRoSGVpZ2h0KCk7XHJcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuZGlhbG9nQm94LCB7XHJcbiAgICAgIHdpZHRoOiB0aGlzLndpZHRoKCksXHJcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQoKSxcclxuICAgICAgbWluV2lkdGg6IHRoaXMubWluV2lkdGgoKSxcclxuICAgICAgbWluSGVpZ2h0OiB0aGlzLm1pbkhlaWdodCgpXHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLnJlc2l6YWJsZVNpZ25hbCgpICYmICF0aGlzLmlzRGVmYXVsdE1heGltaXplKCkpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhob3N0RWxlbWVudCwgWFBvcnRhbFJlc2l6YWJsZVByZWZpeCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kaWFsb2dCb3gsIHRoaXMucHJvdGFsU2VydmljZS5zZXRSZXNpemFibGUodGhpcy5vdmVybGF5RWxlbWVudCgpISwgdGhpcy5wbGFjZW1lbnQoKSkpO1xyXG4gICAgICAgIHRoaXMuc3R5bGVPZmZzZXRMZWZ0LnNldCh0aGlzLm92ZXJsYXlFbGVtZW50KCk/Lm9mZnNldExlZnQhKTtcclxuICAgICAgICB0aGlzLnN0eWxlT2Zmc2V0VG9wLnNldCh0aGlzLm92ZXJsYXlFbGVtZW50KCk/Lm9mZnNldFRvcCEpO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0RyYWdnYWJsZSA9IHRoaXMub3ZlcmxheUVsZW1lbnQoKT8ucXVlcnlTZWxlY3RvcignLngtYWxlcnQtZHJhZ2dhYmxlJykhO1xyXG4gICAgICAgIHRoaXMuaW5pdEhlaWdodCA9IGRpYWxvZ0RyYWdnYWJsZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dDb250ZW50ID0gdGhpcy5vdmVybGF5RWxlbWVudCgpPy5xdWVyeVNlbGVjdG9yKCcueC1kaWFsb2ctY29udGVudCcpITtcclxuICAgICAgICB0aGlzLmluaXRDb250ZW50SGVpZ2h0ID0gdGhpcy5kaWFsb2dDb250ZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNCYWNrZHJvcCgpICYmIHRoaXMuYmFja2Ryb3BDbG9zZSgpICYmIHRoaXMuZGlhbG9nUmVmPy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuYmFja2Ryb3BDbGljayQgPSB0aGlzLmRpYWxvZ1JlZi5vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkNsb3NlKCdjbG9zZScpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFdpZHRoSGVpZ2h0KCkge1xyXG4gICAgY29uc3Qgd3MgPSBbJzEwMCUnLCAnMTAwdncnXTtcclxuICAgIGNvbnN0IGhzID0gWycxMDAlJywgJzEwMHZoJ107XHJcbiAgICBpZiAod3MuaW5jbHVkZXModGhpcy53aWR0aCgpKSAmJiBocy5pbmNsdWRlcyh0aGlzLmhlaWdodCgpKSkge1xyXG4gICAgICB0aGlzLmlzRGVmYXVsdE1heGltaXplLnNldCh0cnVlKTtcclxuICAgICAgdGhpcy5yZXNpemFibGVTaWduYWwuc2V0KGZhbHNlKTtcclxuICAgICAgdGhpcy5kcmFnZ2FibGVTaWduYWwuc2V0KGZhbHNlKTtcclxuICAgICAgdGhpcy5tYXhpbWl6ZVNpZ25hbC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9ydGFsQXR0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dSZWY/Lm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlKGFjdGlvbjogWERpYWxvZ0FjdGlvbiwgZXhlY0Z1bmN0aW9uID0gdHJ1ZSkge1xyXG4gICAgaWYgKCF0aGlzLnBvcnRhbEF0dGFjaGVkKCkgJiYgIXRoaXMuY29udGFpbmVyKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5jb250YWluZXIgJiYgIXRoaXMuY29udGFpbmVySW5pdCkgcmV0dXJuO1xyXG4gICAgaWYgKFhJc0Z1bmN0aW9uKHRoaXMuYmVmb3JlQ2xvc2UoKSkgJiYgZXhlY0Z1bmN0aW9uKSB7XHJcbiAgICAgIHRoaXMuYmVmb3JlQ2xvc2UoKT8uKGFjdGlvbik7XHJcbiAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aXNpYmxlLnNldChmYWxzZSk7XHJcbiAgICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZj8ub3ZlcmxheVJlZj8uZGV0YWNoKCk7XHJcbiAgICAgICAgdGhpcy5iYWNrZHJvcENsaWNrJD8udW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoW2FjdGlvbiwgdGhpcy5hY3Rpb25dLmluY2x1ZGVzKCdjb25maXJtJykpIHtcclxuICAgICAgICB0aGlzLmNvbmZpcm0uZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChbYWN0aW9uLCB0aGlzLmFjdGlvbl0uaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udGFpbmVySW5pdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmFjdGlvbiA9IG51bGw7XHJcbiAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EcmFnRW5kZWQoJGV2ZW50OiBDZGtEcmFnRW5kKSB7XHJcbiAgICB0aGlzLmRpc3RhbmNlID0geyB4OiB0aGlzLmRpc3RhbmNlLnggKyAkZXZlbnQuZGlzdGFuY2UueCwgeTogdGhpcy5kaXN0YW5jZS55ICsgJGV2ZW50LmRpc3RhbmNlLnkgfTtcclxuICB9XHJcblxyXG4gIG9uU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5kaWFsb2dSZWYpIHJldHVybjtcclxuICAgIHRoaXMuaXNNYXhpbWl6ZS51cGRhdGUoKHgpID0+ICF4KTtcclxuICAgIGlmICh0aGlzLmlzTWF4aW1pemUoKSkge1xyXG4gICAgICB0aGlzLm9uTWF4aW1pemUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25NaW5pbWl6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25NYXhpbWl6ZSgpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLm92ZXJsYXlSZWY/LnVwZGF0ZVNpemUoe1xyXG4gICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcclxuICAgICAgbWluV2lkdGg6ICcxMDAlJyxcclxuICAgICAgbWluSGVpZ2h0OiAnMTAwJSdcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFsb2dCb3hbJ21pbldpZHRoJ10gPSAnMTAwJSc7XHJcbiAgICB0aGlzLmRpYWxvZ0JveFsnbWluSGVpZ2h0J10gPSAnMTAwJSc7XHJcbiAgICB0aGlzLmRpYWxvZ0JveFsnZHJhZ2dhYmxlJ10gPSBmYWxzZTtcclxuICAgIHRoaXMuZGlhbG9nQm94WydyZXNpemFibGUnXSA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucmVzaXphYmxlU2lnbmFsKCkpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXlFbGVtZW50KCksICdtYXJnaW4nLCAnMCAwIDAgMCcpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHJhZ2dhYmxlU2lnbmFsKCkpIHtcclxuICAgICAgdGhpcy5kaWFsb2dCb3hbJ2Rpc3RhbmNlJ10gPSB7IHg6IDAsIHk6IDAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTWluaW1pemUoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0JveFsnbWluV2lkdGgnXSA9IHRoaXMubWluV2lkdGgoKTtcclxuICAgIHRoaXMuZGlhbG9nQm94WydtaW5IZWlnaHQnXSA9IHRoaXMubWluSGVpZ2h0KCk7XHJcbiAgICB0aGlzLmRpYWxvZ0JveFsnZHJhZ2dhYmxlJ10gPSB0aGlzLmRyYWdnYWJsZVNpZ25hbCgpO1xyXG4gICAgdGhpcy5kaWFsb2dCb3hbJ3Jlc2l6YWJsZSddID0gdGhpcy5yZXNpemFibGVTaWduYWwoKTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLm92ZXJsYXlSZWY/LnVwZGF0ZVNpemUoe1xyXG4gICAgICB3aWR0aDogdGhpcy5kaWFsb2dCb3hbJ3dpZHRoJ10sXHJcbiAgICAgIGhlaWdodDogdGhpcy5kaWFsb2dCb3hbJ2hlaWdodCddLFxyXG4gICAgICBtaW5XaWR0aDogdGhpcy5kaWFsb2dCb3hbJ21pbldpZHRoJ10sXHJcbiAgICAgIG1pbkhlaWdodDogdGhpcy5kaWFsb2dCb3hbJ21pbkhlaWdodCddXHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLmRyYWdnYWJsZVNpZ25hbCgpKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nQm94WydkaXN0YW5jZSddID0geyAuLi50aGlzLmRpc3RhbmNlIH07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXNpemFibGVTaWduYWwoKSkge1xyXG4gICAgICBpZiAodGhpcy5kaWFsb2dCb3hbJ21hcmdpblRvcCddKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXlFbGVtZW50KCksICdtYXJnaW4tdG9wJywgYCR7dGhpcy5kaWFsb2dCb3hbJ21hcmdpblRvcCddfWApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRpYWxvZ0JveFsnbWFyZ2luTGVmdCddKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXlFbGVtZW50KCksICdtYXJnaW4tbGVmdCcsIGAke3RoaXMuZGlhbG9nQm94WydtYXJnaW5MZWZ0J119YCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGlhbG9nQm94WydtYXJnaW5SaWdodCddKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXlFbGVtZW50KCksICdtYXJnaW4tcmlnaHQnLCBgJHt0aGlzLmRpYWxvZ0JveFsnbWFyZ2luUmlnaHQnXX1gKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kaWFsb2dCb3hbJ21hcmdpbkJvdHRvbSddKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXlFbGVtZW50KCksICdtYXJnaW4tYm90dG9tJywgYCR7dGhpcy5kaWFsb2dCb3hbJ21hcmdpbkJvdHRvbSddfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3ZlRG9uZSgkZXZlbnQ6IHsgdG9TdGF0ZTogc3RyaW5nIH0pIHtcclxuICAgIGlmICgkZXZlbnQudG9TdGF0ZSA9PT0gJ3ZvaWQnKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VEb25lLmVtaXQoJGV2ZW50KTtcclxuICAgICAgdGhpcy5pc01heGltaXplLnNldChmYWxzZSk7XHJcbiAgICAgIHRoaXMuZGlhbG9nQm94ID0ge1xyXG4gICAgICAgIGRyYWdnYWJsZTogdGhpcy5kcmFnZ2FibGVTaWduYWwoKSxcclxuICAgICAgICByZXNpemFibGU6IHRoaXMucmVzaXphYmxlU2lnbmFsKClcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5kaXN0YW5jZSA9IHsgeDogMCwgeTogMCB9O1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZj8ub3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93RG9uZS5lbWl0KCRldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlc2l6aW5nKGV2ZW50OiBYUmVzaXphYmxlRXZlbnQpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSBOdW1iZXIodGhpcy5pbml0Q29udGVudEhlaWdodCkgKyBOdW1iZXIoZXZlbnQuY2xpZW50SGVpZ2h0KSAtIE51bWJlcih0aGlzLmluaXRIZWlnaHQpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRpYWxvZ0NvbnRlbnQsICdtYXgtaGVpZ2h0JywgJ2luaXRpYWwnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kaWFsb2dDb250ZW50LCAnZmxleCcsICdpbml0aWFsJyk7XHJcbiAgICBpZiAoWyd0b3Atc3RhcnQnLCAndG9wLWVuZCcsICdib3R0b20nLCAndG9wJywgJ2JvdHRvbS1zdGFydCcsICdib3R0b20tZW5kJ10uaW5jbHVkZXMoZXZlbnQuZGlyZWN0aW9uIGFzIHN0cmluZykpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRpYWxvZ0NvbnRlbnQsICdoZWlnaHQnLCBgJHtjb250ZW50SGVpZ2h0fXB4YCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSAjZGlhbG9nVHBsPlxyXG4gIEBpZiAoY29udGFpbmVyICYmIGhhc0JhY2tkcm9wKCkpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJ4LWRpYWxvZy1iYWNrZHJvcFwiIFtAeC1vcGFjaXR5LWFuaW1hdGlvbl09XCJ2aXNpYmxlKClcIiAoY2xpY2spPVwib25DbG9zZSgnY2xvc2UnKVwiPjwvZGl2PlxyXG4gIH1cclxuICA8ZGl2XHJcbiAgICBjbGFzcz1cIngtZGlhbG9nXCJcclxuICAgIFtAeC1tb3ZlLWJveC1hbmltYXRpb25dPVwicGxhY2VtZW50KClcIlxyXG4gICAgKEB4LW1vdmUtYm94LWFuaW1hdGlvbi5kb25lKT1cIm1vdmVEb25lKCRldmVudClcIlxyXG4gICAgW2NsYXNzLngtZGlhbG9nLW1heGltaXplXT1cImlzTWF4aW1pemUoKVwiXHJcbiAgICBbY2xhc3MueC1kaWFsb2ctcmVzaXphYmxlXT1cInJlc2l6YWJsZVNpZ25hbCgpXCJcclxuICAgIFtjbGFzcy54LWRpYWxvZy1kZWZhdWx0LW1heGltaXplXT1cImlzRGVmYXVsdE1heGltaXplKClcIlxyXG4gICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgPlxyXG4gICAgPHgtYWxlcnRcclxuICAgICAgW2RyYWdnYWJsZV09XCJkcmFnZ2FibGVTaWduYWwoKSAmJiBkaWFsb2dCb3hbJ2RyYWdnYWJsZSddXCJcclxuICAgICAgW3Jlc2l6YWJsZV09XCJyZXNpemFibGVTaWduYWwoKSAmJiBkaWFsb2dCb3hbJ3Jlc2l6YWJsZSddXCJcclxuICAgICAgW2RyYWdGcmVlRHJhZ1Bvc2l0aW9uXT1cImRpYWxvZ0JveFsnZGlzdGFuY2UnXVwiXHJcbiAgICAgIFtvZmZzZXRMZWZ0XT1cInN0eWxlT2Zmc2V0TGVmdCgpXCJcclxuICAgICAgW29mZnNldFRvcF09XCJzdHlsZU9mZnNldFRvcCgpXCJcclxuICAgICAgW21pbldpZHRoXT1cImRpYWxvZ0JveFsnbWluV2lkdGgnXVwiXHJcbiAgICAgIFttaW5IZWlnaHRdPVwiZGlhbG9nQm94WydtaW5IZWlnaHQnXVwiXHJcbiAgICAgIFtkcmFnQm91bmRhcnldPVwiJy5jZGstb3ZlcmxheS1jb250YWluZXInXCJcclxuICAgICAgW3RpdGxlXT1cInRpdGxlKClcIlxyXG4gICAgICBbY29udGVudF09XCJjb250ZW50VHBsXCJcclxuICAgICAgW3R5cGVdPVwidHlwZSgpXCJcclxuICAgICAgW2VmZmVjdF09XCJlZmZlY3QoKVwiXHJcbiAgICAgIFtoaWRlQ2xvc2VdPVwiaGlkZUNsb3NlKClcIlxyXG4gICAgICBbY2xvc2VUZXh0XT1cImNsb3NlVGV4dCgpXCJcclxuICAgICAgW29wZXJhdGlvblRwbF09XCJvcGVyYXRpb25UcGxcIlxyXG4gICAgICAoY2xvc2UpPVwib25DbG9zZSgnY2xvc2UnKVwiXHJcbiAgICAgIChkcmFnRW5kZWQpPVwib25EcmFnRW5kZWQoJGV2ZW50KVwiXHJcbiAgICAgIChyZXNpemluZyk9XCJvblJlc2l6aW5nKCRldmVudClcIlxyXG4gICAgICBbc2hvd0ljb25dPVwiZmFsc2VcIlxyXG4gICAgICBbZHVyYXRpb25dPVwiMFwiXHJcbiAgICAgIG1hbnVhbFxyXG4gICAgICBkaXNhYmxlZEFuaW1hdGlvblxyXG4gICAgPjwveC1hbGVydD5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29udGVudFRwbD5cclxuICA8ZGl2IGNsYXNzPVwieC1kaWFsb2ctaW5uZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ4LWRpYWxvZy1jb250ZW50XCI+XHJcbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIngtZGlhbG9nLWJ1dHRvbnNcIiBbY2xhc3MueC1kaWFsb2ctYnV0dG9ucy1jZW50ZXJdPVwiYnV0dG9uc0NlbnRlcigpXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKnhPdXRsZXQ9XCJmb290ZXIoKVwiPlxyXG4gICAgICAgIEBpZiAoc2hvd0NhbmNlbCgpIHx8IHNob3dDb25maXJtKCkpIHtcclxuICAgICAgICAgIDx4LWJ1dHRvbnMgc3BhY2U9XCIwLjVyZW1cIj5cclxuICAgICAgICAgICAgQGlmIChzaG93Q2FuY2VsKCkpIHtcclxuICAgICAgICAgICAgICA8eC1idXR0b24gKGNsaWNrKT1cIm9uQ2xvc2UoJ2NhbmNlbCcpXCIgZmxhdCBwbGFpbj57eyBnZXRDYW5jZWxUZXh0KCkgfX08L3gtYnV0dG9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEBpZiAoc2hvd0NvbmZpcm0oKSkge1xyXG4gICAgICAgICAgICAgIDx4LWJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIGZsYXQgKGNsaWNrKT1cIm9uQ2xvc2UoJ2NvbmZpcm0nKVwiPnt7IGdldENvbmZpcm1UZXh0KCkgfX08L3gtYnV0dG9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L3gtYnV0dG9ucz5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI29wZXJhdGlvblRwbD5cclxuICBAaWYgKG1heGltaXplU2lnbmFsKCkgfHwgcmVzaXphYmxlU2lnbmFsKCkpIHtcclxuICAgIDx4LWJ1dHRvblxyXG4gICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICBmbGF0XHJcbiAgICAgIFtpY29uXT1cImlzTWF4aW1pemUoKSA/ICdmdG8tbWluaW1pemUnIDogJ2Z0by1tYXhpbWl6ZSdcIlxyXG4gICAgICBbb25seUljb25dPVwidHJ1ZVwiXHJcbiAgICAgIChjbGljayk9XCJvblNpemUoKVwiXHJcbiAgICA+PC94LWJ1dHRvbj5cclxuICB9XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5AaWYgKGNvbnRhaW5lciAmJiB2aXNpYmxlKCkpIHtcclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGlhbG9nVHBsXCI+PC9uZy1jb250YWluZXI+XHJcbn1cclxuIl19
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2RpYWxvZy9kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvZGlhbG9nL2RpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsdUJBQXVCLEVBRXZCLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsTUFBTSxFQUVOLE1BQU0sRUFDTixRQUFRLEVBRVIsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNyRyxPQUFPLEVBQ0wsYUFBYSxFQUViLGVBQWUsRUFDZixnQkFBZ0IsRUFFaEIsa0JBQWtCLEVBQ25CLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVFLE9BQU8sRUFBZ0IsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBdUIsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUFlLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWhELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVB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LCtFQUsvRixDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDOzsyRkFFdkMsZ0JBQWdCO2tCQVY1QixTQUFTOytCQUNFLEdBQUcsYUFBYSxFQUFFLGNBQ2hCLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsaUJBRzdGLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQzt3REFVUCxVQUFVO3NCQUFwRCxXQUFXO3VCQUFDLHdCQUF3QjtnQkFJZixPQUFPO3NCQUE1QixXQUFXO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBSZW5kZXJlcjIsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBpbmplY3QsXHJcbiAgT25Jbml0LFxyXG4gIHNpZ25hbCxcclxuICBjb21wdXRlZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIHZpZXdDaGlsZCxcclxuICBlZmZlY3QsXHJcbiAgRGVzdHJveVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYTW92ZUJveEFuaW1hdGlvbiwgWElzRnVuY3Rpb24sIFhDb25maWdTZXJ2aWNlLCBYT3BhY2l0eUFuaW1hdGlvbiB9IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIFhEaWFsb2dQcmVmaXgsXHJcbiAgWERpYWxvZ092ZXJsYXlSZWYsXHJcbiAgWERpYWxvZ1Byb3BlcnR5LFxyXG4gIFhEaWFsb2dDb250YWluZXIsXHJcbiAgWERpYWxvZ0FjdGlvbixcclxuICBYX0RJQUxPR19DT05UQUlORVJcclxufSBmcm9tICcuL2RpYWxvZy5wcm9wZXJ0eSc7XHJcbmltcG9ydCB7IFhQb3J0YWxSZXNpemFibGVQcmVmaXgsIFhQb3J0YWxTZXJ2aWNlIH0gZnJvbSAnQG5nLW5lc3QvdWkvcG9ydGFsJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEJsb2NrU2Nyb2xsU3RyYXRlZ3ksIE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFhJMThuRGlhbG9nLCBYSTE4blNlcnZpY2UsIHpoX0NOIH0gZnJvbSAnQG5nLW5lc3QvdWkvaTE4bic7XHJcbmltcG9ydCB7IG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRW5kIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IFhSZXNpemFibGVFdmVudCB9IGZyb20gJ0BuZy1uZXN0L3VpL3Jlc2l6YWJsZSc7XHJcbmltcG9ydCB7IFhEaWFsb2dDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2RpYWxvZy1jb250YWluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgWEFsZXJ0Q29tcG9uZW50IH0gZnJvbSAnQG5nLW5lc3QvdWkvYWxlcnQnO1xyXG5pbXBvcnQgeyBYQnV0dG9uQ29tcG9uZW50LCBYQnV0dG9uc0NvbXBvbmVudCB9IGZyb20gJ0BuZy1uZXN0L3VpL2J1dHRvbic7XHJcbmltcG9ydCB7IFhPdXRsZXREaXJlY3RpdmUgfSBmcm9tICdAbmctbmVzdC91aS9vdXRsZXQnO1xyXG5pbXBvcnQgeyBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYRGlhbG9nUHJlZml4fWAsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTmdTdHlsZSwgTmdUZW1wbGF0ZU91dGxldCwgWEFsZXJ0Q29tcG9uZW50LCBYQnV0dG9uQ29tcG9uZW50LCBYQnV0dG9uc0NvbXBvbmVudCwgWE91dGxldERpcmVjdGl2ZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBhbmltYXRpb25zOiBbWE1vdmVCb3hBbmltYXRpb24sIFhPcGFjaXR5QW5pbWF0aW9uXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWERpYWxvZ0NvbXBvbmVudCBleHRlbmRzIFhEaWFsb2dQcm9wZXJ0eSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcclxuICBwcml2YXRlIHByb3RhbFNlcnZpY2UgPSBpbmplY3QoWFBvcnRhbFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcclxuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoWEkxOG5TZXJ2aWNlKTtcclxuICBwcml2YXRlIHVuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MueC1kaWFsb2ctdmlzaWJsZScpIGdldCBnZXRWaXNpYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsc05hbWUgPSBgJHtYRGlhbG9nUHJlZml4fS0ke3RoaXMucGxhY2VtZW50KCl9YDtcclxuXHJcbiAgZGlhbG9nVHBsID0gdmlld0NoaWxkLnJlcXVpcmVkPFRlbXBsYXRlUmVmPHZvaWQ+PignZGlhbG9nVHBsJyk7XHJcbiAgZGlhbG9nUmVmITogWERpYWxvZ092ZXJsYXlSZWY7XHJcbiAgYmFja2Ryb3BDbGljayQhOiBTdWJzY3JpcHRpb247XHJcbiAgc2Nyb2xsU3RyYXRlZ3khOiBCbG9ja1Njcm9sbFN0cmF0ZWd5O1xyXG4gIGxvY2FsZSA9IHRvU2lnbmFsKHRoaXMuaTE4bi5sb2NhbGVDaGFuZ2UucGlwZShtYXAoKHgpID0+IHguZGlhbG9nIGFzIFhJMThuRGlhbG9nKSksIHsgaW5pdGlhbFZhbHVlOiB6aF9DTi5kaWFsb2cgfSk7XHJcbiAgb3ZlcmxheUVsZW1lbnQgPSBzaWduYWw8SFRNTEVsZW1lbnQgfCBudWxsPihudWxsKTtcclxuICBkaWFsb2dDb250ZW50PzogSFRNTEVsZW1lbnQ7XHJcbiAgaW5pdEhlaWdodD8gPSAwO1xyXG4gIGluaXRDb250ZW50SGVpZ2h0PyA9IDA7XHJcbiAgaXNNYXhpbWl6ZSA9IHNpZ25hbChmYWxzZSk7XHJcbiAgaXNEZWZhdWx0TWF4aW1pemUgPSBzaWduYWwoZmFsc2UpO1xyXG4gIGRpYWxvZ0JveDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gIGNvbnRlbnRCb3g6IFhSZXNpemFibGVFdmVudCA9IHt9O1xyXG4gIGRpc3RhbmNlID0geyB4OiAwLCB5OiAwIH07XHJcbiAgdmlld0luaXQgPSBzaWduYWwoZmFsc2UpO1xyXG4gIGFjdGlvbjogWERpYWxvZ0FjdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIGNvbnRhaW5lckluaXQgPSBmYWxzZTtcclxuICByZXNpemFibGVTaWduYWwgPSBzaWduYWwoZmFsc2UpO1xyXG4gIGRyYWdnYWJsZVNpZ25hbCA9IHNpZ25hbChmYWxzZSk7XHJcbiAgbWF4aW1pemVTaWduYWwgPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICBnZXRDYW5jZWxUZXh0ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FuY2VsVGV4dCgpIHx8IHRoaXMubG9jYWxlKCkuY2FuY2VsVGV4dDtcclxuICB9KTtcclxuXHJcbiAgZ2V0Q29uZmlybVRleHQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maXJtVGV4dCgpIHx8IHRoaXMubG9jYWxlKCkuY29uZmlybVRleHQ7XHJcbiAgfSk7XHJcblxyXG4gIGdldFN0eWxlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyXHJcbiAgICAgID8ge1xyXG4gICAgICAgICAgLi4udGhpcy5wcm90YWxTZXJ2aWNlLnNldENvbnRhaW5lclN0eWxlKHRoaXMucGxhY2VtZW50KCksIHRoaXMub2Zmc2V0KCkpLFxyXG4gICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgoKSxcclxuICAgICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQoKSxcclxuICAgICAgICAgIG1pbldpZHRoOiB0aGlzLm1pbldpZHRoKCksXHJcbiAgICAgICAgICBtaW5IZWlnaHQ6IHRoaXMubWluSGVpZ2h0KClcclxuICAgICAgICB9XHJcbiAgICAgIDoge307XHJcbiAgfSk7XHJcbiAgY29udGFpbmVyID0gaW5qZWN0PFhEaWFsb2dDb250YWluZXJDb21wb25lbnQ+KFhfRElBTE9HX0NPTlRBSU5FUiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuICBjb25maWdTZXJ2aWNlID0gaW5qZWN0KFhDb25maWdTZXJ2aWNlKTtcclxuXHJcbiAgc3R5bGVPZmZzZXRMZWZ0ID0gc2lnbmFsKDApO1xyXG4gIHN0eWxlT2Zmc2V0VG9wID0gc2lnbmFsKDApO1xyXG5cclxuICB2aXNpYmxlQ2hhbmdlZCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnZpc2libGUpO1xyXG4gIGRyYWdnYWJsZUNoYW5nZWQgPSB0b09ic2VydmFibGUodGhpcy5kcmFnZ2FibGUpO1xyXG5cclxuICBkZXN0cm95ID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnZpc2libGVDaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRWaXNpYmxlKCk7XHJcbiAgICB9KTtcclxuICAgIGVmZmVjdChcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlU2lnbmFsLnNldCh0aGlzLmRyYWdnYWJsZSgpKTtcclxuICAgICAgICB0aGlzLnJlc2l6YWJsZVNpZ25hbC5zZXQodGhpcy5yZXNpemFibGUoKSk7XHJcbiAgICAgICAgdGhpcy5tYXhpbWl6ZVNpZ25hbC5zZXQodGhpcy5tYXhpbWl6ZSgpKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ0JveFsnZHJhZ2dhYmxlJ10gPSB0aGlzLmRyYWdnYWJsZVNpZ25hbCgpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nQm94WydyZXNpemFibGUnXSA9IHRoaXMucmVzaXphYmxlU2lnbmFsKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zY3JvbGxTdHJhdGVneSA9IHRoaXMucHJvdGFsU2VydmljZS5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKTtcclxuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xyXG4gICAgICB0aGlzLmRlc3Ryb3kuc2V0KHRydWUpO1xyXG4gICAgICB0aGlzLmJhY2tkcm9wQ2xpY2skPy51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLnVuU3ViamVjdC5uZXh0KCk7XHJcbiAgICAgIHRoaXMudW5TdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudmlld0luaXQuc2V0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0VmlzaWJsZSgpIHtcclxuICAgIGlmICghdGhpcy52aWV3SW5pdCgpKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy52aXNpYmxlKCkpIHtcclxuICAgICAgdGhpcy5jcmVhdGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25DbG9zZSgnY2xvc2UnLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5jb250YWluZXIpIHtcclxuICAgICAgdGhpcy5jb250YWluZXJJbml0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLnByb3RhbFNlcnZpY2UuYXR0YWNoKHtcclxuICAgICAgY29udGVudDogdGhpcy5kaWFsb2dUcGwoKSxcclxuICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICBvdmVybGF5Q29uZmlnOiB7XHJcbiAgICAgICAgcGFuZWxDbGFzczogW1hEaWFsb2dDb250YWluZXIsIHRoaXMuY2xhc3NOYW1lKCldLFxyXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0aGlzLmhhc0JhY2tkcm9wKCksXHJcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCksXHJcbiAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgoKSxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksXHJcbiAgICAgICAgbWluV2lkdGg6IHRoaXMubWluV2lkdGgoKSxcclxuICAgICAgICBtaW5IZWlnaHQ6IHRoaXMubWluSGVpZ2h0KCksXHJcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5wcm90YWxTZXJ2aWNlLnNldFBsYWNlKHRoaXMucGxhY2VtZW50KCksIHRoaXMub2Zmc2V0KCkpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgeyBob3N0RWxlbWVudCwgb3ZlcmxheUVsZW1lbnQgfSA9IHRoaXMuZGlhbG9nUmVmLm92ZXJsYXlSZWYhO1xyXG4gICAgdGhpcy5vdmVybGF5RWxlbWVudC5zZXQob3ZlcmxheUVsZW1lbnQpO1xyXG4gICAgdGhpcy5zZXRXaWR0aEhlaWdodCgpO1xyXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmRpYWxvZ0JveCwge1xyXG4gICAgICB3aWR0aDogdGhpcy53aWR0aCgpLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0KCksXHJcbiAgICAgIG1pbldpZHRoOiB0aGlzLm1pbldpZHRoKCksXHJcbiAgICAgIG1pbkhlaWdodDogdGhpcy5taW5IZWlnaHQoKVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5yZXNpemFibGVTaWduYWwoKSAmJiAhdGhpcy5pc0RlZmF1bHRNYXhpbWl6ZSgpKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoaG9zdEVsZW1lbnQsIFhQb3J0YWxSZXNpemFibGVQcmVmaXgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGlhbG9nQm94LCB0aGlzLnByb3RhbFNlcnZpY2Uuc2V0UmVzaXphYmxlKHRoaXMub3ZlcmxheUVsZW1lbnQoKSEsIHRoaXMucGxhY2VtZW50KCkpKTtcclxuICAgICAgICB0aGlzLnN0eWxlT2Zmc2V0TGVmdC5zZXQodGhpcy5vdmVybGF5RWxlbWVudCgpPy5vZmZzZXRMZWZ0ISk7XHJcbiAgICAgICAgdGhpcy5zdHlsZU9mZnNldFRvcC5zZXQodGhpcy5vdmVybGF5RWxlbWVudCgpPy5vZmZzZXRUb3AhKTtcclxuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLm92ZXJsYXlFbGVtZW50KCk/LnF1ZXJ5U2VsZWN0b3IoJy54LWFsZXJ0JykhO1xyXG4gICAgICAgIHRoaXMuaW5pdEhlaWdodCA9IGRpYWxvZy5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dDb250ZW50ID0gdGhpcy5vdmVybGF5RWxlbWVudCgpPy5xdWVyeVNlbGVjdG9yKCcueC1kaWFsb2ctY29udGVudCcpITtcclxuICAgICAgICB0aGlzLmluaXRDb250ZW50SGVpZ2h0ID0gdGhpcy5kaWFsb2dDb250ZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYXNCYWNrZHJvcCgpICYmIHRoaXMuYmFja2Ryb3BDbG9zZSgpICYmIHRoaXMuZGlhbG9nUmVmPy5vdmVybGF5UmVmKSB7XHJcbiAgICAgIHRoaXMuYmFja2Ryb3BDbGljayQgPSB0aGlzLmRpYWxvZ1JlZi5vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkNsb3NlKCdjbG9zZScpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFdpZHRoSGVpZ2h0KCkge1xyXG4gICAgY29uc3Qgd3MgPSBbJzEwMCUnLCAnMTAwdncnXTtcclxuICAgIGNvbnN0IGhzID0gWycxMDAlJywgJzEwMHZoJ107XHJcbiAgICBpZiAod3MuaW5jbHVkZXModGhpcy53aWR0aCgpKSAmJiBocy5pbmNsdWRlcyh0aGlzLmhlaWdodCgpKSkge1xyXG4gICAgICB0aGlzLmlzRGVmYXVsdE1heGltaXplLnNldCh0cnVlKTtcclxuICAgICAgdGhpcy5yZXNpemFibGVTaWduYWwuc2V0KGZhbHNlKTtcclxuICAgICAgdGhpcy5kcmFnZ2FibGVTaWduYWwuc2V0KGZhbHNlKTtcclxuICAgICAgdGhpcy5tYXhpbWl6ZVNpZ25hbC5zZXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9ydGFsQXR0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dSZWY/Lm92ZXJsYXlSZWY/Lmhhc0F0dGFjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlKGFjdGlvbjogWERpYWxvZ0FjdGlvbiwgZXhlY0Z1bmN0aW9uID0gdHJ1ZSkge1xyXG4gICAgaWYgKCF0aGlzLnBvcnRhbEF0dGFjaGVkKCkgJiYgIXRoaXMuY29udGFpbmVyKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5jb250YWluZXIgJiYgIXRoaXMuY29udGFpbmVySW5pdCkgcmV0dXJuO1xyXG4gICAgaWYgKFhJc0Z1bmN0aW9uKHRoaXMuYmVmb3JlQ2xvc2UoKSkgJiYgZXhlY0Z1bmN0aW9uKSB7XHJcbiAgICAgIHRoaXMuYmVmb3JlQ2xvc2UoKT8uKGFjdGlvbik7XHJcbiAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aXNpYmxlLnNldChmYWxzZSk7XHJcbiAgICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZj8ub3ZlcmxheVJlZj8uZGV0YWNoKCk7XHJcbiAgICAgICAgdGhpcy5iYWNrZHJvcENsaWNrJD8udW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoW2FjdGlvbiwgdGhpcy5hY3Rpb25dLmluY2x1ZGVzKCdjb25maXJtJykpIHtcclxuICAgICAgICB0aGlzLmNvbmZpcm0uZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChbYWN0aW9uLCB0aGlzLmFjdGlvbl0uaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XHJcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udGFpbmVySW5pdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmFjdGlvbiA9IG51bGw7XHJcbiAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EcmFnRW5kZWQoJGV2ZW50OiBDZGtEcmFnRW5kKSB7XHJcbiAgICB0aGlzLmRpc3RhbmNlID0geyB4OiB0aGlzLmRpc3RhbmNlLnggKyAkZXZlbnQuZGlzdGFuY2UueCwgeTogdGhpcy5kaXN0YW5jZS55ICsgJGV2ZW50LmRpc3RhbmNlLnkgfTtcclxuICB9XHJcblxyXG4gIG9uU2l6ZSgpIHtcclxuICAgIGlmICghdGhpcy5kaWFsb2dSZWYpIHJldHVybjtcclxuICAgIHRoaXMuaXNNYXhpbWl6ZS51cGRhdGUoKHgpID0+ICF4KTtcclxuICAgIGlmICh0aGlzLmlzTWF4aW1pemUoKSkge1xyXG4gICAgICB0aGlzLm9uTWF4aW1pemUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub25NaW5pbWl6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25NYXhpbWl6ZSgpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLm92ZXJsYXlSZWY/LnVwZGF0ZVNpemUoe1xyXG4gICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcclxuICAgICAgbWluV2lkdGg6ICcxMDAlJyxcclxuICAgICAgbWluSGVpZ2h0OiAnMTAwJSdcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFsb2dCb3hbJ21pbldpZHRoJ10gPSAnMTAwJSc7XHJcbiAgICB0aGlzLmRpYWxvZ0JveFsnbWluSGVpZ2h0J10gPSAnMTAwJSc7XHJcbiAgICB0aGlzLmRpYWxvZ0JveFsnZHJhZ2dhYmxlJ10gPSBmYWxzZTtcclxuICAgIHRoaXMuZGlhbG9nQm94WydyZXNpemFibGUnXSA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucmVzaXphYmxlU2lnbmFsKCkpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXlFbGVtZW50KCksICdtYXJnaW4nLCAnMCAwIDAgMCcpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHJhZ2dhYmxlU2lnbmFsKCkpIHtcclxuICAgICAgdGhpcy5kaWFsb2dCb3hbJ2Rpc3RhbmNlJ10gPSB7IHg6IDAsIHk6IDAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTWluaW1pemUoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ0JveFsnbWluV2lkdGgnXSA9IHRoaXMubWluV2lkdGgoKTtcclxuICAgIHRoaXMuZGlhbG9nQm94WydtaW5IZWlnaHQnXSA9IHRoaXMubWluSGVpZ2h0KCk7XHJcbiAgICB0aGlzLmRpYWxvZ0JveFsnZHJhZ2dhYmxlJ10gPSB0aGlzLmRyYWdnYWJsZVNpZ25hbCgpO1xyXG4gICAgdGhpcy5kaWFsb2dCb3hbJ3Jlc2l6YWJsZSddID0gdGhpcy5yZXNpemFibGVTaWduYWwoKTtcclxuICAgIHRoaXMuZGlhbG9nUmVmLm92ZXJsYXlSZWY/LnVwZGF0ZVNpemUoe1xyXG4gICAgICB3aWR0aDogdGhpcy5kaWFsb2dCb3hbJ3dpZHRoJ10sXHJcbiAgICAgIGhlaWdodDogdGhpcy5kaWFsb2dCb3hbJ2hlaWdodCddLFxyXG4gICAgICBtaW5XaWR0aDogdGhpcy5kaWFsb2dCb3hbJ21pbldpZHRoJ10sXHJcbiAgICAgIG1pbkhlaWdodDogdGhpcy5kaWFsb2dCb3hbJ21pbkhlaWdodCddXHJcbiAgICB9KTtcclxuICAgIGlmICh0aGlzLmRyYWdnYWJsZVNpZ25hbCgpKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nQm94WydkaXN0YW5jZSddID0geyAuLi50aGlzLmRpc3RhbmNlIH07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXNpemFibGVTaWduYWwoKSkge1xyXG4gICAgICBpZiAodGhpcy5kaWFsb2dCb3hbJ21hcmdpblRvcCddKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXlFbGVtZW50KCksICdtYXJnaW4tdG9wJywgYCR7dGhpcy5kaWFsb2dCb3hbJ21hcmdpblRvcCddfWApO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRpYWxvZ0JveFsnbWFyZ2luTGVmdCddKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXlFbGVtZW50KCksICdtYXJnaW4tbGVmdCcsIGAke3RoaXMuZGlhbG9nQm94WydtYXJnaW5MZWZ0J119YCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGlhbG9nQm94WydtYXJnaW5SaWdodCddKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXlFbGVtZW50KCksICdtYXJnaW4tcmlnaHQnLCBgJHt0aGlzLmRpYWxvZ0JveFsnbWFyZ2luUmlnaHQnXX1gKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kaWFsb2dCb3hbJ21hcmdpbkJvdHRvbSddKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLm92ZXJsYXlFbGVtZW50KCksICdtYXJnaW4tYm90dG9tJywgYCR7dGhpcy5kaWFsb2dCb3hbJ21hcmdpbkJvdHRvbSddfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3ZlRG9uZSgkZXZlbnQ6IHsgdG9TdGF0ZTogc3RyaW5nIH0pIHtcclxuICAgIGlmICgkZXZlbnQudG9TdGF0ZSA9PT0gJ3ZvaWQnKSB7XHJcbiAgICAgICF0aGlzLmRlc3Ryb3koKSAmJiB0aGlzLmNsb3NlRG9uZS5lbWl0KCRldmVudCk7XHJcbiAgICAgIHRoaXMuaXNNYXhpbWl6ZS5zZXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLmRpYWxvZ0JveCA9IHtcclxuICAgICAgICBkcmFnZ2FibGU6IHRoaXMuZHJhZ2dhYmxlU2lnbmFsKCksXHJcbiAgICAgICAgcmVzaXphYmxlOiB0aGlzLnJlc2l6YWJsZVNpZ25hbCgpXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZGlzdGFuY2UgPSB7IHg6IDAsIHk6IDAgfTtcclxuICAgICAgdGhpcy5kaWFsb2dSZWY/Lm92ZXJsYXlSZWY/LmRpc3Bvc2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICF0aGlzLmRlc3Ryb3koKSAmJiB0aGlzLnNob3dEb25lLmVtaXQoJGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUmVzaXppbmcoZXZlbnQ6IFhSZXNpemFibGVFdmVudCkge1xyXG4gICAgY29uc3QgY29udGVudEhlaWdodCA9IE51bWJlcih0aGlzLmluaXRDb250ZW50SGVpZ2h0KSArIE51bWJlcihldmVudC5jbGllbnRIZWlnaHQpIC0gTnVtYmVyKHRoaXMuaW5pdEhlaWdodCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZGlhbG9nQ29udGVudCwgJ21heC1oZWlnaHQnLCAnaW5pdGlhbCcpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRpYWxvZ0NvbnRlbnQsICdmbGV4JywgJ2luaXRpYWwnKTtcclxuICAgIGlmIChbJ3RvcC1zdGFydCcsICd0b3AtZW5kJywgJ2JvdHRvbScsICd0b3AnLCAnYm90dG9tLXN0YXJ0JywgJ2JvdHRvbS1lbmQnXS5pbmNsdWRlcyhldmVudC5kaXJlY3Rpb24gYXMgc3RyaW5nKSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZGlhbG9nQ29udGVudCwgJ2hlaWdodCcsIGAke2NvbnRlbnRIZWlnaHR9cHhgKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlICNkaWFsb2dUcGw+XHJcbiAgQGlmIChjb250YWluZXIgJiYgaGFzQmFja2Ryb3AoKSkge1xyXG4gICAgPGRpdiBjbGFzcz1cIngtZGlhbG9nLWJhY2tkcm9wXCIgW0B4LW9wYWNpdHktYW5pbWF0aW9uXT1cInZpc2libGUoKVwiIChjbGljayk9XCJvbkNsb3NlKCdjbG9zZScpXCI+PC9kaXY+XHJcbiAgfVxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwieC1kaWFsb2dcIlxyXG4gICAgW0B4LW1vdmUtYm94LWFuaW1hdGlvbl09XCJwbGFjZW1lbnQoKVwiXHJcbiAgICAoQHgtbW92ZS1ib3gtYW5pbWF0aW9uLmRvbmUpPVwibW92ZURvbmUoJGV2ZW50KVwiXHJcbiAgICBbY2xhc3MueC1kaWFsb2ctbWF4aW1pemVdPVwiaXNNYXhpbWl6ZSgpXCJcclxuICAgIFtjbGFzcy54LWRpYWxvZy1yZXNpemFibGVdPVwicmVzaXphYmxlU2lnbmFsKClcIlxyXG4gICAgW2NsYXNzLngtZGlhbG9nLWRlZmF1bHQtbWF4aW1pemVdPVwiaXNEZWZhdWx0TWF4aW1pemUoKVwiXHJcbiAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICA+XHJcbiAgICA8eC1hbGVydFxyXG4gICAgICBbZHJhZ2dhYmxlXT1cImRyYWdnYWJsZVNpZ25hbCgpICYmIGRpYWxvZ0JveFsnZHJhZ2dhYmxlJ11cIlxyXG4gICAgICBbcmVzaXphYmxlXT1cInJlc2l6YWJsZVNpZ25hbCgpICYmIGRpYWxvZ0JveFsncmVzaXphYmxlJ11cIlxyXG4gICAgICBbZHJhZ0ZyZWVEcmFnUG9zaXRpb25dPVwiZGlhbG9nQm94WydkaXN0YW5jZSddXCJcclxuICAgICAgW29mZnNldExlZnRdPVwic3R5bGVPZmZzZXRMZWZ0KClcIlxyXG4gICAgICBbb2Zmc2V0VG9wXT1cInN0eWxlT2Zmc2V0VG9wKClcIlxyXG4gICAgICBbbWluV2lkdGhdPVwiZGlhbG9nQm94WydtaW5XaWR0aCddXCJcclxuICAgICAgW21pbkhlaWdodF09XCJkaWFsb2dCb3hbJ21pbkhlaWdodCddXCJcclxuICAgICAgW2RyYWdCb3VuZGFyeV09XCInLmNkay1vdmVybGF5LWNvbnRhaW5lcidcIlxyXG4gICAgICBbdGl0bGVdPVwidGl0bGUoKVwiXHJcbiAgICAgIFtjb250ZW50XT1cImNvbnRlbnRUcGxcIlxyXG4gICAgICBbdHlwZV09XCJ0eXBlKClcIlxyXG4gICAgICBbZWZmZWN0XT1cImVmZmVjdCgpXCJcclxuICAgICAgW2hpZGVDbG9zZV09XCJoaWRlQ2xvc2UoKVwiXHJcbiAgICAgIFtjbG9zZVRleHRdPVwiY2xvc2VUZXh0KClcIlxyXG4gICAgICBbb3BlcmF0aW9uVHBsXT1cIm9wZXJhdGlvblRwbFwiXHJcbiAgICAgIChjbG9zZSk9XCJvbkNsb3NlKCdjbG9zZScpXCJcclxuICAgICAgKGRyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgkZXZlbnQpXCJcclxuICAgICAgKHJlc2l6aW5nKT1cIm9uUmVzaXppbmcoJGV2ZW50KVwiXHJcbiAgICAgIFtzaG93SWNvbl09XCJmYWxzZVwiXHJcbiAgICAgIFtkdXJhdGlvbl09XCIwXCJcclxuICAgICAgbWFudWFsXHJcbiAgICAgIGRpc2FibGVkQW5pbWF0aW9uXHJcbiAgICA+PC94LWFsZXJ0PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250ZW50VHBsPlxyXG4gIDxkaXYgY2xhc3M9XCJ4LWRpYWxvZy1pbm5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIngtZGlhbG9nLWNvbnRlbnRcIj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwieC1kaWFsb2ctYnV0dG9uc1wiIFtjbGFzcy54LWRpYWxvZy1idXR0b25zLWNlbnRlcl09XCJidXR0b25zQ2VudGVyKClcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqeE91dGxldD1cImZvb3RlcigpXCI+XHJcbiAgICAgICAgQGlmIChzaG93Q2FuY2VsKCkgfHwgc2hvd0NvbmZpcm0oKSkge1xyXG4gICAgICAgICAgPHgtYnV0dG9ucyBzcGFjZT1cIjAuNXJlbVwiPlxyXG4gICAgICAgICAgICBAaWYgKHNob3dDYW5jZWwoKSkge1xyXG4gICAgICAgICAgICAgIDx4LWJ1dHRvbiBjbGFzcz1cIngtZGlhbG9nLWNhbmNlbFwiIChjbGljayk9XCJvbkNsb3NlKCdjYW5jZWwnKVwiIGZsYXQgcGxhaW4+e3sgZ2V0Q2FuY2VsVGV4dCgpIH19PC94LWJ1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAaWYgKHNob3dDb25maXJtKCkpIHtcclxuICAgICAgICAgICAgICA8eC1idXR0b24gY2xhc3M9XCJ4LWRpYWxvZy1jb25maXJtXCIgdHlwZT1cInByaW1hcnlcIiBmbGF0IChjbGljayk9XCJvbkNsb3NlKCdjb25maXJtJylcIj57e1xyXG4gICAgICAgICAgICAgICAgZ2V0Q29uZmlybVRleHQoKVxyXG4gICAgICAgICAgICAgIH19PC94LWJ1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC94LWJ1dHRvbnM+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNvcGVyYXRpb25UcGw+XHJcbiAgQGlmIChtYXhpbWl6ZVNpZ25hbCgpIHx8IHJlc2l6YWJsZVNpZ25hbCgpKSB7XHJcbiAgICA8eC1idXR0b25cclxuICAgICAgc2l6ZT1cInNtYWxsXCJcclxuICAgICAgZmxhdFxyXG4gICAgICBbaWNvbl09XCJpc01heGltaXplKCkgPyAnZnRvLW1pbmltaXplJyA6ICdmdG8tbWF4aW1pemUnXCJcclxuICAgICAgW29ubHlJY29uXT1cInRydWVcIlxyXG4gICAgICAoY2xpY2spPVwib25TaXplKClcIlxyXG4gICAgICBjbGFzcz1cIngtZGlhbG9nLW1heGltaXplXCJcclxuICAgID48L3gtYnV0dG9uPlxyXG4gIH1cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbkBpZiAoY29udGFpbmVyICYmIHZpc2libGUoKSkge1xyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkaWFsb2dUcGxcIj48L25nLWNvbnRhaW5lcj5cclxufVxyXG4iXX0=
@@ -13,11 +13,15 @@ export class XDropdownPortalComponent {
13
13
  get getPlacement() {
14
14
  return this.placement();
15
15
  }
16
- done(event) {
17
- event.toState !== 'void' && !this.isDestroy() && this.animating.emit(false);
16
+ done() {
17
+ if (this.destroy())
18
+ return;
19
+ this.animating.emit(false);
18
20
  }
19
- start(event) {
20
- event.toState !== 'void' && !this.isDestroy() && this.animating.emit(true);
21
+ start() {
22
+ if (this.destroy())
23
+ return;
24
+ this.animating.emit(true);
21
25
  }
22
26
  mouseenter() {
23
27
  this.portalHover.emit(true);
@@ -43,8 +47,9 @@ export class XDropdownPortalComponent {
43
47
  this.portalPlacement = signal(null);
44
48
  this.childAnimating = signal(false);
45
49
  this.activatedId = model();
46
- this.isDestroy = signal(false);
50
+ this.destroy = signal(false);
47
51
  this.unSubject = new Subject();
52
+ this.destroyRef = inject(DestroyRef);
48
53
  this.portalService = inject(XPortalService);
49
54
  this.overlay = inject(Overlay);
50
55
  this.viewContainerRef = inject(ViewContainerRef);
@@ -58,8 +63,12 @@ export class XDropdownPortalComponent {
58
63
  effect(() => this.portalComponent()?.setInput('size', this.size()));
59
64
  effect(() => this.portalComponent()?.setInput('placement', this.portalPlacement()));
60
65
  effect(() => this.portalComponent()?.setInput('activatedId', this.activatedId()));
61
- inject(DestroyRef).onDestroy(() => {
62
- this.isDestroy.set(true);
66
+ }
67
+ ngOnInit() {
68
+ this.destroyRef.onDestroy(() => {
69
+ this.destroy.set(true);
70
+ this.unSubject.next();
71
+ this.unSubject.complete();
63
72
  });
64
73
  }
65
74
  onNodeClick(node) {
@@ -192,4 +201,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
192
201
  type: HostListener,
193
202
  args: ['mouseleave']
194
203
  }] } });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tcG9ydGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2Ryb3Bkb3duL2Ryb3Bkb3duLXBvcnRhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS9kcm9wZG93bi9kcm9wZG93bi1wb3J0YWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUVOLE1BQU0sRUFDTixVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFtQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdGLE9BQU8sRUFBRSx3QkFBd0IsRUFBcUIsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakcsT0FBTyxFQUFFLHFCQUFxQixFQUE2QixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFHTCxPQUFPLEVBR1IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFZN0MsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxJQUFxRCxZQUFZO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDMkQsSUFBSSxDQUFDLEtBQXVCO1FBQ3RG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V0FDUCxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsaUJBR3ZCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsQ0FBQyxxQkFBcUIsQ0FBQzt3REFHa0IsWUFBWTtzQkFBaEUsV0FBVzt1QkFBQywyQkFBMkI7Z0JBR29CLElBQUk7c0JBQS9ELFlBQVk7dUJBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBR0csS0FBSztzQkFBakUsWUFBWTt1QkFBQyxpQ0FBaUMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkEwQi9CLFVBQVU7c0JBQXJDLFlBQVk7dUJBQUMsWUFBWTtnQkFJRSxVQUFVO3NCQUFyQyxZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBFbGVtZW50UmVmLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIGlucHV0LFxyXG4gIG91dHB1dCxcclxuICBtb2RlbCxcclxuICBzaWduYWwsXHJcbiAgaW5qZWN0LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBlZmZlY3QsXHJcbiAgRGVzdHJveVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYRHJvcGRvd25Qb3J0YWxQcmVmaXgsIFhEcm9wZG93bk5vZGUsIFhEcm9wZG93blRyaWdnZXIgfSBmcm9tICcuL2Ryb3Bkb3duLnByb3BlcnR5JztcclxuaW1wb3J0IHsgWFBvcnRhbENvbm5lY3RlZFBvc2l0aW9uLCBYUG9ydGFsT3ZlcmxheVJlZiwgWFBvcnRhbFNlcnZpY2UgfSBmcm9tICdAbmctbmVzdC91aS9wb3J0YWwnO1xyXG5pbXBvcnQgeyBYQ29ubmVjdEJhc2VBbmltYXRpb24sIFhQb3NpdGlvblRvcEJvdHRvbSwgWFNpemUgfSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlLFxyXG4gIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcclxuICBPdmVybGF5LFxyXG4gIE92ZXJsYXlDb25maWcsXHJcbiAgT3ZlcmxheVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgWExpc3RDb21wb25lbnQgfSBmcm9tICdAbmctbmVzdC91aS9saXN0JztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYCR7WERyb3Bkb3duUG9ydGFsUHJlZml4fWAsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIFhMaXN0Q29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24tcG9ydGFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi1wb3J0YWwuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGFuaW1hdGlvbnM6IFtYQ29ubmVjdEJhc2VBbmltYXRpb25dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYRHJvcGRvd25Qb3J0YWxDb21wb25lbnQge1xyXG4gIEBIb3N0QmluZGluZygnQHgtY29ubmVjdC1iYXNlLWFuaW1hdGlvbicpIHB1YmxpYyBnZXQgZ2V0UGxhY2VtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGxhY2VtZW50KCk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ0B4LWNvbm5lY3QtYmFzZS1hbmltYXRpb24uZG9uZScsIFsnJGV2ZW50J10pIGRvbmUoZXZlbnQ6IHsgdG9TdGF0ZTogYW55IH0pIHtcclxuICAgIGV2ZW50LnRvU3RhdGUgIT09ICd2b2lkJyAmJiAhdGhpcy5pc0Rlc3Ryb3koKSAmJiB0aGlzLmFuaW1hdGluZy5lbWl0KGZhbHNlKTtcclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignQHgtY29ubmVjdC1iYXNlLWFuaW1hdGlvbi5zdGFydCcsIFsnJGV2ZW50J10pIHN0YXJ0KGV2ZW50OiB7IHRvU3RhdGU6IGFueSB9KSB7XHJcbiAgICBldmVudC50b1N0YXRlICE9PSAndm9pZCcgJiYgIXRoaXMuaXNEZXN0cm95KCkgJiYgdGhpcy5hbmltYXRpbmcuZW1pdCh0cnVlKTtcclxuICB9XHJcbiAgZGF0YSA9IGlucHV0PFhEcm9wZG93bk5vZGVbXT4oW10pO1xyXG4gIHRyaWdnZXIgPSBpbnB1dDxYRHJvcGRvd25UcmlnZ2VyPignaG92ZXInKTtcclxuICBwbGFjZW1lbnQgPSBpbnB1dDxYUG9zaXRpb25Ub3BCb3R0b20+KCk7XHJcbiAgc2l6ZSA9IGlucHV0PFhTaXplPignbWVkaXVtJyk7XHJcbiAgbWluV2lkdGggPSBpbnB1dDxzdHJpbmc+KCk7XHJcbiAgbWF4V2lkdGggPSBpbnB1dDxzdHJpbmc+KCk7XHJcbiAgbWluSGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPigpO1xyXG4gIG1heEhlaWdodCA9IGlucHV0PHN0cmluZz4oKTtcclxuICBjbG9zZWQgPSBvdXRwdXQoKTtcclxuICBhbmltYXRpbmcgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcclxuICBub2RlQ2xpY2sgPSBvdXRwdXQ8WERyb3Bkb3duTm9kZT4oKTtcclxuICBwb3J0YWxIb3ZlciA9IG91dHB1dDxib29sZWFuPigpO1xyXG4gIHBvcnRhbCE6IFhQb3J0YWxPdmVybGF5UmVmPFhEcm9wZG93blBvcnRhbENvbXBvbmVudD47XHJcbiAgbm9kZSA9IHNpZ25hbDxYRHJvcGRvd25Ob2RlIHwgbnVsbD4obnVsbCk7XHJcbiAgb3Blbk5vZGUgPSBzaWduYWw8WERyb3Bkb3duTm9kZSB8IG51bGw+KG51bGwpO1xyXG4gIHRpbWVvdXRIaWRlOiBhbnk7XHJcblxyXG4gIHBvcnRhbFBsYWNlbWVudCA9IHNpZ25hbDxYUG9zaXRpb25Ub3BCb3R0b20gfCBudWxsPihudWxsKTtcclxuICBjaGlsZEFuaW1hdGluZyA9IHNpZ25hbChmYWxzZSk7XHJcbiAgYWN0aXZhdGVkSWQgPSBtb2RlbDxhbnk+KCk7XHJcbiAgaXNEZXN0cm95ID0gc2lnbmFsKGZhbHNlKTtcclxuICBwcml2YXRlIHVuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKSBtb3VzZWVudGVyKCkge1xyXG4gICAgdGhpcy5wb3J0YWxIb3Zlci5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpIG1vdXNlbGVhdmUoKSB7XHJcbiAgICAhdGhpcy5wb3J0YWxBdHRhY2hlZCgpICYmIHRoaXMucG9ydGFsSG92ZXIuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwb3J0YWxTZXJ2aWNlID0gaW5qZWN0KFhQb3J0YWxTZXJ2aWNlKTtcclxuICBvdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xyXG4gIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XHJcbiAgcG9ydGFsQ29tcG9uZW50ID0gc2lnbmFsPENvbXBvbmVudFJlZjxYRHJvcGRvd25Qb3J0YWxDb21wb25lbnQ+IHwgbnVsbD4obnVsbCk7XHJcbiAgcG9ydGFsT3ZlcmxheVJlZiA9IHNpZ25hbDxPdmVybGF5UmVmIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdkYXRhJywgdGhpcy5ub2RlKCk/LmNoaWxkcmVuKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ21pbldpZHRoJywgdGhpcy5taW5XaWR0aCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ21heFdpZHRoJywgdGhpcy5tYXhXaWR0aCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ21pbkhlaWdodCcsIHRoaXMubWluSGVpZ2h0KCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnbWF4SGVpZ2h0JywgdGhpcy5tYXhIZWlnaHQoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdzaXplJywgdGhpcy5zaXplKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgncGxhY2VtZW50JywgdGhpcy5wb3J0YWxQbGFjZW1lbnQoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdhY3RpdmF0ZWRJZCcsIHRoaXMuYWN0aXZhdGVkSWQoKSkpO1xyXG5cclxuICAgIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzRGVzdHJveS5zZXQodHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uTm9kZUNsaWNrKG5vZGU6IFhEcm9wZG93bk5vZGUpIHtcclxuICAgIHRoaXMubm9kZUNsaWNrLmVtaXQobm9kZSk7XHJcbiAgICBpZiAoIW5vZGUubGVhZikge1xyXG4gICAgICB0aGlzLmFjdGl2YXRlZElkLnNldChub2RlLmlkKTtcclxuICAgICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9ydGFsQXR0YWNoZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/Lmhhc0F0dGFjaGVkKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVBvcnRhbCgpIHtcclxuICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LmRpc3Bvc2UoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVQb3J0YWwoKSB7XHJcbiAgICBjb25zdCBjb25maWc6IE92ZXJsYXlDb25maWcgPSB7XHJcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICcnLFxyXG4gICAgICBwYW5lbENsYXNzOiAneC1kcm9wZG93bi1wb3J0YWwtY2hpbGQnLFxyXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLnNldFBsYWNlbWVudCgpLFxyXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxyXG4gICAgICBtaW5XaWR0aDogdGhpcy5taW5XaWR0aCgpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zZXRQb3NpdGlvbihjb25maWcpO1xyXG4gICAgdGhpcy5wb3J0YWwgPSB0aGlzLnBvcnRhbFNlcnZpY2UuYXR0YWNoKHtcclxuICAgICAgY29udGVudDogWERyb3Bkb3duUG9ydGFsQ29tcG9uZW50LFxyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgIG92ZXJsYXlDb25maWc6IGNvbmZpZ1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNldEluc3RhbmNlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQb3NpdGlvbihjb25maWc6IE92ZXJsYXlDb25maWcpIHtcclxuICAgIGxldCBwb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcclxuICAgIHBvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgocG9zOiBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UpID0+IHtcclxuICAgICAgY29uc3QgcGxhY2UgPSBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24uZ2V0KHBvcy5jb25uZWN0aW9uUGFpcikgYXMgWFBvc2l0aW9uVG9wQm90dG9tO1xyXG4gICAgICBpZiAocGxhY2UgIT09IHRoaXMucG9ydGFsUGxhY2VtZW50KCkpIHtcclxuICAgICAgICB0aGlzLnBvcnRhbFBsYWNlbWVudC5zZXQocGxhY2UpO1xyXG4gICAgICAgIHRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy51cGRhdGVQb3NpdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldEluc3RhbmNlKCkge1xyXG4gICAgbGV0IHsgY29tcG9uZW50UmVmLCBvdmVybGF5UmVmIH0gPSB0aGlzLnBvcnRhbDtcclxuICAgIGlmICghY29tcG9uZW50UmVmIHx8ICFvdmVybGF5UmVmKSByZXR1cm47XHJcbiAgICB0aGlzLnBvcnRhbENvbXBvbmVudC5zZXQoY29tcG9uZW50UmVmKTtcclxuICAgIHRoaXMucG9ydGFsT3ZlcmxheVJlZi5zZXQob3ZlcmxheVJlZik7XHJcbiAgICBjb25zdCB7IGNsb3NlZCwgYW5pbWF0aW5nLCBub2RlQ2xpY2ssIHBvcnRhbEhvdmVyLCBhY3RpdmF0ZWRJZCB9ID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xyXG4gICAgY2xvc2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlUG9ydGFsKCkpO1xyXG4gICAgYW5pbWF0aW5nLnN1YnNjcmliZSgoaW5nKSA9PiB0aGlzLmNoaWxkQW5pbWF0aW5nLnNldChpbmcpKTtcclxuICAgIG5vZGVDbGljay5zdWJzY3JpYmUoKG5vZGUpID0+IHRoaXMubm9kZUNsaWNrLmVtaXQobm9kZSkpO1xyXG4gICAgYWN0aXZhdGVkSWQuc3Vic2NyaWJlKChpZCkgPT4gdGhpcy5hY3RpdmF0ZWRJZC5zZXQoaWQpKTtcclxuICAgIHBvcnRhbEhvdmVyLnN1YnNjcmliZSgoaG92ZXIpID0+IHRoaXMuaG92ZXIoaG92ZXIpKTtcclxuICB9XHJcblxyXG4gIGhvdmVyKGhvdmVyOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy50aW1lb3V0SGlkZSAmJiBob3Zlcikge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SGlkZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBvcnRhbEhvdmVyLmVtaXQoZmFsc2UpO1xyXG4gICAgICB0aGlzLm9uTGVhdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBsYWNlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnBvcnRhbFNlcnZpY2Uuc2V0UGxhY2VtZW50KHtcclxuICAgICAgZWxlbWVudFJlZjogbmV3IEVsZW1lbnRSZWYodGhpcy5ub2RlKCk/LmV2ZW50Py50YXJnZXQpLFxyXG4gICAgICBwbGFjZW1lbnQ6IFsncmlnaHQtc3RhcnQnLCAncmlnaHQtZW5kJywgJ2xlZnQtc3RhcnQnLCAnbGVmdC1lbmQnXSxcclxuICAgICAgdHJhbnNmb3JtT3JpZ2luT246ICd4LWRyb3Bkb3duLXBvcnRhbCdcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25FbnRlcihub2RlOiBYRHJvcGRvd25Ob2RlKSB7XHJcbiAgICBpZiAoIW5vZGUubGVhZiB8fCBub2RlLmRpc2FibGVkIHx8IHRoaXMuY2hpbGRBbmltYXRpbmcoKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudGltZW91dEhpZGUpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRIaWRlKTtcclxuICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkgJiYgdGhpcy5ub2RlKCk/LmlkICE9PSBub2RlLmlkKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlT3Blbk5vZGUoZmFsc2UpO1xyXG4gICAgICB0aGlzLnBvcnRhbE92ZXJsYXlSZWYoKT8uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ub2RlLnNldChub2RlKTtcclxuICAgIGlmICghdGhpcy5wb3J0YWxBdHRhY2hlZCgpKSB7XHJcbiAgICAgIHRoaXMub3Blbk5vZGUuc2V0KG5vZGUpO1xyXG4gICAgICB0aGlzLmNoYW5nZU9wZW5Ob2RlKHRydWUpO1xyXG4gICAgICB0aGlzLmNyZWF0ZVBvcnRhbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25MZWF2ZSgpIHtcclxuICAgIGlmICh0aGlzLnBvcnRhbEF0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy50aW1lb3V0SGlkZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hhbmdlT3Blbk5vZGUoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMucG9ydGFsPy5vdmVybGF5UmVmPy5kaXNwb3NlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jaGFuZ2VPcGVuTm9kZShmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VPcGVuTm9kZShvcGVuOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5vcGVuTm9kZSgpKSB7XHJcbiAgICAgIHRoaXMub3Blbk5vZGUudXBkYXRlKCh4KSA9PiB7XHJcbiAgICAgICAgeCEub3BlblBvcnRhbCA9IG9wZW47XHJcbiAgICAgICAgeCEuY2hhbmdlICYmIHghLmNoYW5nZSgpO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICNkcm9wZG93blBvcnRhbFxyXG4gIGNsYXNzPVwieC1kcm9wZG93bi1wb3J0YWxcIlxyXG4gIFtzdHlsZS5taW5XaWR0aF09XCJtaW5XaWR0aCgpXCJcclxuICBbc3R5bGUubWF4V2lkdGhdPVwibWF4V2lkdGgoKVwiXHJcbiAgW3N0eWxlLm1pbkhlaWdodF09XCJtaW5IZWlnaHQoKVwiXHJcbiAgW3N0eWxlLm1heEhlaWdodF09XCJtYXhIZWlnaHQoKVwiXHJcbj5cclxuICA8eC1saXN0XHJcbiAgICBbZGF0YV09XCJkYXRhKClcIlxyXG4gICAgKG5vZGVDbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQpXCJcclxuICAgIFsobmdNb2RlbCldPVwiYWN0aXZhdGVkSWRcIlxyXG4gICAgKG5vZGVNb3VzZWVudGVyKT1cIm9uRW50ZXIoJGV2ZW50KVwiXHJcbiAgICAobm9kZU1vdXNlbGVhdmUpPVwib25MZWF2ZSgpXCJcclxuICAgIFtpblBvcnRhbF09XCJ0cnVlXCJcclxuICAgIFtzaXplXT1cInNpemUoKVwiXHJcbiAgPjwveC1saXN0PlxyXG48L2Rpdj5cclxuIl19
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tcG9ydGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9uZy1uZXN0L3VpL2Ryb3Bkb3duL2Ryb3Bkb3duLXBvcnRhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvbmctbmVzdC91aS9kcm9wZG93bi9kcm9wZG93bi1wb3J0YWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLHVCQUF1QixFQUN2QixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUVOLE1BQU0sRUFDTixVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFtQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdGLE9BQU8sRUFBRSx3QkFBd0IsRUFBcUIsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakcsT0FBTyxFQUFFLHFCQUFxQixFQUE2QixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFHTCxPQUFPLEVBR1IsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFZN0MsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxJQUFxRCxZQUFZO1FBQy9ELE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFDMkQsSUFBSTtRQUM5RCxJQUFJLElBQUks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Q0FBQyxxQkFBcUIsQ0FBQzs7MkZBRXhCLHdCQUF3QjtrQkFWcEMsU0FBUzsrQkFDRSxHQUFHLHFCQUFxQixFQUFFLGNBQ3hCLElBQUksV0FDUCxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsaUJBR3ZCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsQ0FBQyxxQkFBcUIsQ0FBQzt3REFHa0IsWUFBWTtzQkFBaEUsV0FBVzt1QkFBQywyQkFBMkI7Z0JBR29CLElBQUk7c0JBQS9ELFlBQVk7dUJBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBSUcsS0FBSztzQkFBakUsWUFBWTt1QkFBQyxpQ0FBaUMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE0Qi9CLFVBQVU7c0JBQXJDLFlBQVk7dUJBQUMsWUFBWTtnQkFJRSxVQUFVO3NCQUFyQyxZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBFbGVtZW50UmVmLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIGlucHV0LFxyXG4gIG91dHB1dCxcclxuICBtb2RlbCxcclxuICBzaWduYWwsXHJcbiAgaW5qZWN0LFxyXG4gIENvbXBvbmVudFJlZixcclxuICBlZmZlY3QsXHJcbiAgRGVzdHJveVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBYRHJvcGRvd25Qb3J0YWxQcmVmaXgsIFhEcm9wZG93bk5vZGUsIFhEcm9wZG93blRyaWdnZXIgfSBmcm9tICcuL2Ryb3Bkb3duLnByb3BlcnR5JztcclxuaW1wb3J0IHsgWFBvcnRhbENvbm5lY3RlZFBvc2l0aW9uLCBYUG9ydGFsT3ZlcmxheVJlZiwgWFBvcnRhbFNlcnZpY2UgfSBmcm9tICdAbmctbmVzdC91aS9wb3J0YWwnO1xyXG5pbXBvcnQgeyBYQ29ubmVjdEJhc2VBbmltYXRpb24sIFhQb3NpdGlvblRvcEJvdHRvbSwgWFNpemUgfSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlLFxyXG4gIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcclxuICBPdmVybGF5LFxyXG4gIE92ZXJsYXlDb25maWcsXHJcbiAgT3ZlcmxheVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgWExpc3RDb21wb25lbnQgfSBmcm9tICdAbmctbmVzdC91aS9saXN0JztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYCR7WERyb3Bkb3duUG9ydGFsUHJlZml4fWAsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIFhMaXN0Q29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24tcG9ydGFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi1wb3J0YWwuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGFuaW1hdGlvbnM6IFtYQ29ubmVjdEJhc2VBbmltYXRpb25dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBYRHJvcGRvd25Qb3J0YWxDb21wb25lbnQge1xyXG4gIEBIb3N0QmluZGluZygnQHgtY29ubmVjdC1iYXNlLWFuaW1hdGlvbicpIHB1YmxpYyBnZXQgZ2V0UGxhY2VtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGxhY2VtZW50KCk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ0B4LWNvbm5lY3QtYmFzZS1hbmltYXRpb24uZG9uZScsIFsnJGV2ZW50J10pIGRvbmUoKSB7XHJcbiAgICBpZiAodGhpcy5kZXN0cm95KCkpIHJldHVybjtcclxuICAgIHRoaXMuYW5pbWF0aW5nLmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdAeC1jb25uZWN0LWJhc2UtYW5pbWF0aW9uLnN0YXJ0JywgWyckZXZlbnQnXSkgc3RhcnQoKSB7XHJcbiAgICBpZiAodGhpcy5kZXN0cm95KCkpIHJldHVybjtcclxuICAgIHRoaXMuYW5pbWF0aW5nLmVtaXQodHJ1ZSk7XHJcbiAgfVxyXG4gIGRhdGEgPSBpbnB1dDxYRHJvcGRvd25Ob2RlW10+KFtdKTtcclxuICB0cmlnZ2VyID0gaW5wdXQ8WERyb3Bkb3duVHJpZ2dlcj4oJ2hvdmVyJyk7XHJcbiAgcGxhY2VtZW50ID0gaW5wdXQ8WFBvc2l0aW9uVG9wQm90dG9tPigpO1xyXG4gIHNpemUgPSBpbnB1dDxYU2l6ZT4oJ21lZGl1bScpO1xyXG4gIG1pbldpZHRoID0gaW5wdXQ8c3RyaW5nPigpO1xyXG4gIG1heFdpZHRoID0gaW5wdXQ8c3RyaW5nPigpO1xyXG4gIG1pbkhlaWdodCA9IGlucHV0PHN0cmluZz4oKTtcclxuICBtYXhIZWlnaHQgPSBpbnB1dDxzdHJpbmc+KCk7XHJcbiAgY2xvc2VkID0gb3V0cHV0KCk7XHJcbiAgYW5pbWF0aW5nID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcbiAgbm9kZUNsaWNrID0gb3V0cHV0PFhEcm9wZG93bk5vZGU+KCk7XHJcbiAgcG9ydGFsSG92ZXIgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcclxuICBwb3J0YWwhOiBYUG9ydGFsT3ZlcmxheVJlZjxYRHJvcGRvd25Qb3J0YWxDb21wb25lbnQ+O1xyXG4gIG5vZGUgPSBzaWduYWw8WERyb3Bkb3duTm9kZSB8IG51bGw+KG51bGwpO1xyXG4gIG9wZW5Ob2RlID0gc2lnbmFsPFhEcm9wZG93bk5vZGUgfCBudWxsPihudWxsKTtcclxuICB0aW1lb3V0SGlkZTogYW55O1xyXG5cclxuICBwb3J0YWxQbGFjZW1lbnQgPSBzaWduYWw8WFBvc2l0aW9uVG9wQm90dG9tIHwgbnVsbD4obnVsbCk7XHJcbiAgY2hpbGRBbmltYXRpbmcgPSBzaWduYWwoZmFsc2UpO1xyXG4gIGFjdGl2YXRlZElkID0gbW9kZWw8YW55PigpO1xyXG4gIGRlc3Ryb3kgPSBzaWduYWwoZmFsc2UpO1xyXG4gIHByaXZhdGUgdW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKSBtb3VzZWVudGVyKCkge1xyXG4gICAgdGhpcy5wb3J0YWxIb3Zlci5lbWl0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpIG1vdXNlbGVhdmUoKSB7XHJcbiAgICAhdGhpcy5wb3J0YWxBdHRhY2hlZCgpICYmIHRoaXMucG9ydGFsSG92ZXIuZW1pdChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwb3J0YWxTZXJ2aWNlID0gaW5qZWN0KFhQb3J0YWxTZXJ2aWNlKTtcclxuICBvdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xyXG4gIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XHJcbiAgcG9ydGFsQ29tcG9uZW50ID0gc2lnbmFsPENvbXBvbmVudFJlZjxYRHJvcGRvd25Qb3J0YWxDb21wb25lbnQ+IHwgbnVsbD4obnVsbCk7XHJcbiAgcG9ydGFsT3ZlcmxheVJlZiA9IHNpZ25hbDxPdmVybGF5UmVmIHwgbnVsbD4obnVsbCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdkYXRhJywgdGhpcy5ub2RlKCk/LmNoaWxkcmVuKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ21pbldpZHRoJywgdGhpcy5taW5XaWR0aCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ21heFdpZHRoJywgdGhpcy5tYXhXaWR0aCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ21pbkhlaWdodCcsIHRoaXMubWluSGVpZ2h0KCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnbWF4SGVpZ2h0JywgdGhpcy5tYXhIZWlnaHQoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdzaXplJywgdGhpcy5zaXplKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgncGxhY2VtZW50JywgdGhpcy5wb3J0YWxQbGFjZW1lbnQoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdhY3RpdmF0ZWRJZCcsIHRoaXMuYWN0aXZhdGVkSWQoKSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcclxuICAgICAgdGhpcy5kZXN0cm95LnNldCh0cnVlKTtcclxuICAgICAgdGhpcy51blN1YmplY3QubmV4dCgpO1xyXG4gICAgICB0aGlzLnVuU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbk5vZGVDbGljayhub2RlOiBYRHJvcGRvd25Ob2RlKSB7XHJcbiAgICB0aGlzLm5vZGVDbGljay5lbWl0KG5vZGUpO1xyXG4gICAgaWYgKCFub2RlLmxlYWYpIHtcclxuICAgICAgdGhpcy5hY3RpdmF0ZWRJZC5zZXQobm9kZS5pZCk7XHJcbiAgICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBvcnRhbEF0dGFjaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy5oYXNBdHRhY2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VQb3J0YWwoKSB7XHJcbiAgICBpZiAodGhpcy5wb3J0YWxBdHRhY2hlZCgpKSB7XHJcbiAgICAgIHRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy5kaXNwb3NlKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlUG9ydGFsKCkge1xyXG4gICAgY29uc3QgY29uZmlnOiBPdmVybGF5Q29uZmlnID0ge1xyXG4gICAgICBiYWNrZHJvcENsYXNzOiAnJyxcclxuICAgICAgcGFuZWxDbGFzczogJ3gtZHJvcGRvd24tcG9ydGFsLWNoaWxkJyxcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5zZXRQbGFjZW1lbnQoKSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcclxuICAgICAgbWluV2lkdGg6IHRoaXMubWluV2lkdGgoKVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2V0UG9zaXRpb24oY29uZmlnKTtcclxuICAgIHRoaXMucG9ydGFsID0gdGhpcy5wb3J0YWxTZXJ2aWNlLmF0dGFjaCh7XHJcbiAgICAgIGNvbnRlbnQ6IFhEcm9wZG93blBvcnRhbENvbXBvbmVudCxcclxuICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICBvdmVybGF5Q29uZmlnOiBjb25maWdcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRJbnN0YW5jZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0UG9zaXRpb24oY29uZmlnOiBPdmVybGF5Q29uZmlnKSB7XHJcbiAgICBsZXQgcG9zaXRpb24gPSBjb25maWcucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3k7XHJcbiAgICBwb3NpdGlvbi5wb3NpdGlvbkNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy51blN1YmplY3QpKS5zdWJzY3JpYmUoKHBvczogQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBsYWNlID0gWFBvcnRhbENvbm5lY3RlZFBvc2l0aW9uLmdldChwb3MuY29ubmVjdGlvblBhaXIpIGFzIFhQb3NpdGlvblRvcEJvdHRvbTtcclxuICAgICAgaWYgKHBsYWNlICE9PSB0aGlzLnBvcnRhbFBsYWNlbWVudCgpKSB7XHJcbiAgICAgICAgdGhpcy5wb3J0YWxQbGFjZW1lbnQuc2V0KHBsYWNlKTtcclxuICAgICAgICB0aGlzLnBvcnRhbE92ZXJsYXlSZWYoKT8udXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbnN0YW5jZSgpIHtcclxuICAgIGxldCB7IGNvbXBvbmVudFJlZiwgb3ZlcmxheVJlZiB9ID0gdGhpcy5wb3J0YWw7XHJcbiAgICBpZiAoIWNvbXBvbmVudFJlZiB8fCAhb3ZlcmxheVJlZikgcmV0dXJuO1xyXG4gICAgdGhpcy5wb3J0YWxDb21wb25lbnQuc2V0KGNvbXBvbmVudFJlZik7XHJcbiAgICB0aGlzLnBvcnRhbE92ZXJsYXlSZWYuc2V0KG92ZXJsYXlSZWYpO1xyXG4gICAgY29uc3QgeyBjbG9zZWQsIGFuaW1hdGluZywgbm9kZUNsaWNrLCBwb3J0YWxIb3ZlciwgYWN0aXZhdGVkSWQgfSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcclxuICAgIGNsb3NlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZVBvcnRhbCgpKTtcclxuICAgIGFuaW1hdGluZy5zdWJzY3JpYmUoKGluZykgPT4gdGhpcy5jaGlsZEFuaW1hdGluZy5zZXQoaW5nKSk7XHJcbiAgICBub2RlQ2xpY2suc3Vic2NyaWJlKChub2RlKSA9PiB0aGlzLm5vZGVDbGljay5lbWl0KG5vZGUpKTtcclxuICAgIGFjdGl2YXRlZElkLnN1YnNjcmliZSgoaWQpID0+IHRoaXMuYWN0aXZhdGVkSWQuc2V0KGlkKSk7XHJcbiAgICBwb3J0YWxIb3Zlci5zdWJzY3JpYmUoKGhvdmVyKSA9PiB0aGlzLmhvdmVyKGhvdmVyKSk7XHJcbiAgfVxyXG5cclxuICBob3Zlcihob3ZlcjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMudGltZW91dEhpZGUgJiYgaG92ZXIpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dEhpZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb3J0YWxIb3Zlci5lbWl0KGZhbHNlKTtcclxuICAgICAgdGhpcy5vbkxlYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQbGFjZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWxTZXJ2aWNlLnNldFBsYWNlbWVudCh7XHJcbiAgICAgIGVsZW1lbnRSZWY6IG5ldyBFbGVtZW50UmVmKHRoaXMubm9kZSgpPy5ldmVudD8udGFyZ2V0KSxcclxuICAgICAgcGxhY2VtZW50OiBbJ3JpZ2h0LXN0YXJ0JywgJ3JpZ2h0LWVuZCcsICdsZWZ0LXN0YXJ0JywgJ2xlZnQtZW5kJ10sXHJcbiAgICAgIHRyYW5zZm9ybU9yaWdpbk9uOiAneC1kcm9wZG93bi1wb3J0YWwnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRW50ZXIobm9kZTogWERyb3Bkb3duTm9kZSkge1xyXG4gICAgaWYgKCFub2RlLmxlYWYgfHwgbm9kZS5kaXNhYmxlZCB8fCB0aGlzLmNoaWxkQW5pbWF0aW5nKCkpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnRpbWVvdXRIaWRlKSBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SGlkZSk7XHJcbiAgICBpZiAodGhpcy5wb3J0YWxBdHRhY2hlZCgpICYmIHRoaXMubm9kZSgpPy5pZCAhPT0gbm9kZS5pZCkge1xyXG4gICAgICB0aGlzLmNoYW5nZU9wZW5Ob2RlKGZhbHNlKTtcclxuICAgICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIHRoaXMubm9kZS5zZXQobm9kZSk7XHJcbiAgICBpZiAoIXRoaXMucG9ydGFsQXR0YWNoZWQoKSkge1xyXG4gICAgICB0aGlzLm9wZW5Ob2RlLnNldChub2RlKTtcclxuICAgICAgdGhpcy5jaGFuZ2VPcGVuTm9kZSh0cnVlKTtcclxuICAgICAgdGhpcy5jcmVhdGVQb3J0YWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTGVhdmUoKSB7XHJcbiAgICBpZiAodGhpcy5wb3J0YWxBdHRhY2hlZCgpKSB7XHJcbiAgICAgIHRoaXMudGltZW91dEhpZGUgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoYW5nZU9wZW5Ob2RlKGZhbHNlKTtcclxuICAgICAgICB0aGlzLnBvcnRhbD8ub3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlT3Blbk5vZGUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hhbmdlT3Blbk5vZGUob3BlbjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMub3Blbk5vZGUoKSkge1xyXG4gICAgICB0aGlzLm9wZW5Ob2RlLnVwZGF0ZSgoeCkgPT4ge1xyXG4gICAgICAgIHghLm9wZW5Qb3J0YWwgPSBvcGVuO1xyXG4gICAgICAgIHghLmNoYW5nZSAmJiB4IS5jaGFuZ2UoKTtcclxuICAgICAgICByZXR1cm4geDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXZcclxuICAjZHJvcGRvd25Qb3J0YWxcclxuICBjbGFzcz1cIngtZHJvcGRvd24tcG9ydGFsXCJcclxuICBbc3R5bGUubWluV2lkdGhdPVwibWluV2lkdGgoKVwiXHJcbiAgW3N0eWxlLm1heFdpZHRoXT1cIm1heFdpZHRoKClcIlxyXG4gIFtzdHlsZS5taW5IZWlnaHRdPVwibWluSGVpZ2h0KClcIlxyXG4gIFtzdHlsZS5tYXhIZWlnaHRdPVwibWF4SGVpZ2h0KClcIlxyXG4+XHJcbiAgPHgtbGlzdFxyXG4gICAgW2RhdGFdPVwiZGF0YSgpXCJcclxuICAgIChub2RlQ2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICBbKG5nTW9kZWwpXT1cImFjdGl2YXRlZElkXCJcclxuICAgIChub2RlTW91c2VlbnRlcik9XCJvbkVudGVyKCRldmVudClcIlxyXG4gICAgKG5vZGVNb3VzZWxlYXZlKT1cIm9uTGVhdmUoKVwiXHJcbiAgICBbaW5Qb3J0YWxdPVwidHJ1ZVwiXHJcbiAgICBbc2l6ZV09XCJzaXplKClcIlxyXG4gID48L3gtbGlzdD5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Component, ViewEncapsulation, ChangeDetectionStrategy, ViewContainerRef, inject, signal, computed, viewChild, effect } from '@angular/core';
2
2
  import { XDropdownPrefix, XDropdownProperty } from './dropdown.property';
3
- import { XIsEmpty, XGetChildren } from '@ng-nest/ui/core';
3
+ import { XIsEmpty, XHasChildren, XGetChildren } from '@ng-nest/ui/core';
4
4
  import { of, Subject } from 'rxjs';
5
5
  import { XPortalConnectedPosition, XPortalService } from '@ng-nest/ui/portal';
6
6
  import { XDropdownPortalComponent } from './dropdown-portal.component';
@@ -21,7 +21,7 @@ export class XDropdownComponent extends XDropdownProperty {
21
21
  if (!this.children()) {
22
22
  return data.filter((y) => XIsEmpty(y.pid)).map((y) => XGetChildren(data, y, 0));
23
23
  }
24
- return data;
24
+ return XHasChildren(data, 0);
25
25
  });
26
26
  this.visible = signal(false);
27
27
  this.animating = signal(false);
@@ -176,4 +176,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImpor
176
176
  type: Component,
177
177
  args: [{ selector: `${XDropdownPrefix}`, standalone: true, imports: [NgClass], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\r\n #dropdown\r\n class=\"x-dropdown\"\r\n [class.x-visible]=\"visible()\"\r\n (mouseenter)=\"onEnter()\"\r\n (mouseleave)=\"onLeave()\"\r\n (click)=\"showPortal()\"\r\n>\r\n <ng-content></ng-content>\r\n</div>\r\n", styles: [".x-dropdown{margin:0;padding:0}.x-dropdown{display:inline-block}.x-dropdown.x-visible{color:var(--x-primary)}\n"] }]
178
178
  }], ctorParameters: () => [] });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFFakIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixNQUFNLEVBR04sTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBRVQsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQWtDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUYsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkMsT0FBTyxFQUFFLHdCQUF3QixFQUFxQixjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBR0wsT0FBTyxFQUdSLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQVcxQyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsaUJBQWlCO0lBMEJ2RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBMUJGLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2hDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLFlBQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsYUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQTBCLFVBQVUsQ0FBQyxDQUFDO1FBQ25FLFVBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFnQixJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakcsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFHSCxZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsaUJBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsYUFBUSxHQUFHLE1BQU0sQ0FBUyxLQUFLLENBQUMsQ0FBQztRQUNqQyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDdEMsaUJBQVksR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVwQyxrQkFBYSxHQUFHLE1BQU0sQ0FBb0IsSUFBSSxDQUFDLENBQUM7UUFDeEQsb0JBQWUsR0FBRyxNQUFNLENBQWdELElBQUksQ0FBQyxDQUFDO1FBQzlFLHFCQUFnQixHQUFHLE1BQU0sQ0FBb0IsSUFBSSxDQUFDLENBQUM7UUFJakQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsVUFB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RUFBRSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQztZQUNuRixpQkFBaUIsRUFBRSxtQkFBbUI7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztpSUEvS1Usa0JBQWtCO3FIQUFsQixrQkFBa0IsbU5DdkMvQixvT0FVQTs7MkZENkJhLGtCQUFrQjtrQkFUOUIsU0FBUzsrQkFDRSxHQUFHLGVBQWUsRUFBRSxjQUNsQixJQUFJLFdBQ1AsQ0FBQyxPQUFPLENBQUMsaUJBR0gsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBpbmplY3QsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBzaWduYWwsXHJcbiAgY29tcHV0ZWQsXHJcbiAgdmlld0NoaWxkLFxyXG4gIENvbXBvbmVudFJlZixcclxuICBlZmZlY3RcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWERyb3Bkb3duUHJlZml4LCBYRHJvcGRvd25Ob2RlLCBYRHJvcGRvd25Qcm9wZXJ0eSB9IGZyb20gJy4vZHJvcGRvd24ucHJvcGVydHknO1xyXG5pbXBvcnQgeyBYSXNFbXB0eSwgWEdldENoaWxkcmVuLCBYUG9zaXRpb25Ub3BCb3R0b20sIFhQbGFjZW1lbnQgfSBmcm9tICdAbmctbmVzdC91aS9jb3JlJztcclxuaW1wb3J0IHsgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgWFBvcnRhbENvbm5lY3RlZFBvc2l0aW9uLCBYUG9ydGFsT3ZlcmxheVJlZiwgWFBvcnRhbFNlcnZpY2UgfSBmcm9tICdAbmctbmVzdC91aS9wb3J0YWwnO1xyXG5pbXBvcnQgeyBYRHJvcGRvd25Qb3J0YWxDb21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLXBvcnRhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRlbGF5LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlLFxyXG4gIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcclxuICBPdmVybGF5LFxyXG4gIE92ZXJsYXlDb25maWcsXHJcbiAgT3ZlcmxheVJlZlxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogYCR7WERyb3Bkb3duUHJlZml4fWAsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTmdDbGFzc10sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFhEcm9wZG93bkNvbXBvbmVudCBleHRlbmRzIFhEcm9wZG93blByb3BlcnR5IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgdW5TdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHBvcnRhbFNlcnZpY2UgPSBpbmplY3QoWFBvcnRhbFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcclxuICBwcml2YXRlIG92ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XHJcbiAgZHJvcGRvd24gPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdkcm9wZG93bicpO1xyXG4gIG5vZGVzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YSgpO1xyXG4gICAgaWYgKCF0aGlzLmNoaWxkcmVuKCkpIHtcclxuICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKCh5KSA9PiBYSXNFbXB0eSh5LnBpZCkpLm1hcCgoeSkgPT4gWEdldENoaWxkcmVuPFhEcm9wZG93bk5vZGU+KGRhdGEsIHksIDApKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH0pO1xyXG4gIHBvcnRhbCE6IFhQb3J0YWxPdmVybGF5UmVmPFhEcm9wZG93blBvcnRhbENvbXBvbmVudD47XHJcbiAgdGltZW91dEhpZGU6IGFueTtcclxuICB2aXNpYmxlID0gc2lnbmFsKGZhbHNlKTtcclxuICBhbmltYXRpbmcgPSBzaWduYWwoZmFsc2UpO1xyXG4gIG91dHNpZGVDbGljayA9IHNpZ25hbChmYWxzZSk7XHJcbiAgbWluV2lkdGggPSBzaWduYWw8c3RyaW5nPignMHB4Jyk7XHJcbiAgaG92ZXJEZWxheVVuc3ViID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjbG9zZVN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIHJlYWxQbGFjZW1lbnQgPSBzaWduYWw8WFBsYWNlbWVudCB8IG51bGw+KG51bGwpO1xyXG4gIHBvcnRhbENvbXBvbmVudCA9IHNpZ25hbDxDb21wb25lbnRSZWY8WERyb3Bkb3duUG9ydGFsQ29tcG9uZW50PiB8IG51bGw+KG51bGwpO1xyXG4gIHBvcnRhbE92ZXJsYXlSZWYgPSBzaWduYWw8T3ZlcmxheVJlZiB8IG51bGw+KG51bGwpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ2RhdGEnLCB0aGlzLm5vZGVzKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgndHJpZ2dlcicsIHRoaXMudHJpZ2dlcigpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ21pbldpZHRoJywgdGhpcy5taW5XaWR0aCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ21heFdpZHRoJywgdGhpcy5wb3J0YWxNYXhXaWR0aCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ21pbkhlaWdodCcsIHRoaXMucG9ydGFsTWluSGVpZ2h0KCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnbWF4SGVpZ2h0JywgdGhpcy5wb3J0YWxNYXhIZWlnaHQoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdhY3RpdmF0ZWRJZCcsIHRoaXMuYWN0aXZhdGVkSWQoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdzaXplJywgdGhpcy5zaXplKCkpKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRTdWJqZWN0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5TdWJqZWN0Lm5leHQoKTtcclxuICAgIHRoaXMudW5TdWJqZWN0LmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmhvdmVyRGVsYXlVbnN1Yi5uZXh0KCk7XHJcbiAgICB0aGlzLmhvdmVyRGVsYXlVbnN1Yi5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0U3ViamVjdCgpIHtcclxuICAgIHRoaXMuY2xvc2VTdWJqZWN0LnBpcGUodGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jbG9zZVBvcnRhbCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkVudGVyKCkge1xyXG4gICAgb2YodHJ1ZSlcclxuICAgICAgLnBpcGUoZGVsYXkodGhpcy5ob3ZlckRlbGF5KCkpLCB0YWtlVW50aWwodGhpcy5ob3ZlckRlbGF5VW5zdWIpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpIHx8IHRoaXMudHJpZ2dlcigpID09PSAnY2xpY2snKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMudGltZW91dEhpZGUpIHtcclxuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRIaWRlKTtcclxuICAgICAgICAgIHRoaXMudGltZW91dEhpZGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMucG9ydGFsIHx8ICh0aGlzLnBvcnRhbCAmJiAhdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/Lmhhc0F0dGFjaGVkKCkpKSB7XHJcbiAgICAgICAgICB0aGlzLnZpc2libGUuc2V0KHRydWUpO1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVQb3J0YWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25MZWF2ZSgpIHtcclxuICAgIHRoaXMuaG92ZXJEZWxheVVuc3ViLm5leHQoKTtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy50cmlnZ2VyKCkgPT09ICdjbGljaycpIHJldHVybjtcclxuICAgIGlmICh0aGlzLnBvcnRhbE92ZXJsYXlSZWYoKT8uaGFzQXR0YWNoZWQoKSkge1xyXG4gICAgICB0aGlzLnRpbWVvdXRIaWRlID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLnZpc2libGUuc2V0KGZhbHNlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93UG9ydGFsKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQoKSB8fCB0aGlzLnRyaWdnZXIoKSA9PT0gJ2hvdmVyJyB8fCB0aGlzLmFuaW1hdGluZygpKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy50cmlnZ2VyKCkgPT09ICdjbGljaycgJiYgdGhpcy5wb3J0YWxBdHRhY2hlZCgpKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jcmVhdGVQb3J0YWwoKTtcclxuICB9XHJcblxyXG4gIHBvcnRhbEF0dGFjaGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy5oYXNBdHRhY2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VQb3J0YWwoKSB7XHJcbiAgICBpZiAodGhpcy5wb3J0YWxBdHRhY2hlZCgpKSB7XHJcbiAgICAgIHRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMudmlzaWJsZS5zZXQoZmFsc2UpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3lQb3J0YWwoKSB7XHJcbiAgICB0aGlzLnBvcnRhbE92ZXJsYXlSZWYoKT8uZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlUG9ydGFsKCkge1xyXG4gICAgbGV0IGJveCA9IHRoaXMuZHJvcGRvd24oKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgdGhpcy5taW5XaWR0aC5zZXQodGhpcy5wb3J0YWxNaW5XaWR0aCgpID8gdGhpcy5wb3J0YWxNaW5XaWR0aCgpIDogYCR7Ym94LndpZHRofXB4YCk7XHJcbiAgICBjb25zdCBjb25maWc6IE92ZXJsYXlDb25maWcgPSB7XHJcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICcnLFxyXG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLnNldFBsYWNlbWVudCgpLFxyXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpLFxyXG4gICAgICBtaW5XaWR0aDogdGhpcy5taW5XaWR0aCgpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zZXRQb3NpdGlvbihjb25maWcpO1xyXG4gICAgdGhpcy5wb3J0YWwgPSB0aGlzLnBvcnRhbFNlcnZpY2UuYXR0YWNoKHtcclxuICAgICAgY29udGVudDogWERyb3Bkb3duUG9ydGFsQ29tcG9uZW50LFxyXG4gICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgIG92ZXJsYXlDb25maWc6IGNvbmZpZ1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMudHJpZ2dlcigpID09PSAnY2xpY2snKSB7XHJcbiAgICAgIHRoaXMucG9ydGFsLm92ZXJsYXlSZWZcclxuICAgICAgICA/Lm91dHNpZGVQb2ludGVyRXZlbnRzKClcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMzApLCB0YWtlVW50aWwodGhpcy51blN1YmplY3QpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jbG9zZVN1YmplY3QubmV4dCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0SW5zdGFuY2UoKTtcclxuICB9XHJcblxyXG4gIHNldFBvc2l0aW9uKGNvbmZpZzogT3ZlcmxheUNvbmZpZykge1xyXG4gICAgbGV0IHBvc2l0aW9uID0gY29uZmlnLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5O1xyXG4gICAgcG9zaXRpb24ucG9zaXRpb25DaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSkuc3Vic2NyaWJlKChwb3M6IENvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbkNoYW5nZSkgPT4ge1xyXG4gICAgICBjb25zdCBwbGFjZSA9IFhQb3J0YWxDb25uZWN0ZWRQb3NpdGlvbi5nZXQocG9zLmNvbm5lY3Rpb25QYWlyKSBhcyBYUG9zaXRpb25Ub3BCb3R0b207XHJcbiAgICAgIGlmIChwbGFjZSAhPT0gdGhpcy5yZWFsUGxhY2VtZW50KCkpIHtcclxuICAgICAgICB0aGlzLnJlYWxQbGFjZW1lbnQuc2V0KHBsYWNlKTtcclxuICAgICAgICB0aGlzLnBvcnRhbE92ZXJsYXlSZWYoKT8udXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbnN0YW5jZSgpIHtcclxuICAgIGxldCB7IGNvbXBvbmVudFJlZiwgb3ZlcmxheVJlZiB9ID0gdGhpcy5wb3J0YWw7XHJcbiAgICBpZiAoIWNvbXBvbmVudFJlZiB8fCAhb3ZlcmxheVJlZikgcmV0dXJuO1xyXG4gICAgdGhpcy5wb3J0YWxDb21wb25lbnQuc2V0KGNvbXBvbmVudFJlZik7XHJcbiAgICB0aGlzLnBvcnRhbE92ZXJsYXlSZWYuc2V0KG92ZXJsYXlSZWYpO1xyXG4gICAgdGhpcy5yZWFsUGxhY2VtZW50LnNldCh0aGlzLnBsYWNlbWVudCgpKTtcclxuICAgIGNvbnN0IHsgY2xvc2VkLCBhbmltYXRpbmcsIG5vZGVDbGljaywgcG9ydGFsSG92ZXIsIGFjdGl2YXRlZElkIH0gPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcbiAgICBjbG9zZWQuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQoKSk7XHJcbiAgICBhbmltYXRpbmcuc3Vic2NyaWJlKChpbmcpID0+IHRoaXMuYW5pbWF0aW5nLnNldChpbmcpKTtcclxuICAgIG5vZGVDbGljay5zdWJzY3JpYmUoKG5vZGUpID0+IHRoaXMubm9kZUNsaWNrLmVtaXQobm9kZSkpO1xyXG4gICAgYWN0aXZhdGVkSWQuc3Vic2NyaWJlKChpZCkgPT4gdGhpcy5hY3RpdmF0ZWRJZC5zZXQoaWQpKTtcclxuICAgIHBvcnRhbEhvdmVyLnN1YnNjcmliZSgoaG92ZXIpID0+IHRoaXMucG9ydGFsSG92ZXIoaG92ZXIpKTtcclxuICB9XHJcblxyXG4gIHBvcnRhbEhvdmVyKGhvdmVyOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy50aW1lb3V0SGlkZSAmJiBob3Zlcikge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SGlkZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9uTGVhdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBsYWNlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnBvcnRhbFNlcnZpY2Uuc2V0UGxhY2VtZW50KHtcclxuICAgICAgZWxlbWVudFJlZjogdGhpcy5kcm9wZG93bigpLFxyXG4gICAgICBwbGFjZW1lbnQ6IFt0aGlzLnBsYWNlbWVudCgpLCAnYm90dG9tLXN0YXJ0JywgJ3RvcC1zdGFydCcsICdib3R0b20tZW5kJywgJ3RvcC1lbmQnXSxcclxuICAgICAgdHJhbnNmb3JtT3JpZ2luT246ICd4LWRyb3Bkb3duLXBvcnRhbCdcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgI2Ryb3Bkb3duXHJcbiAgY2xhc3M9XCJ4LWRyb3Bkb3duXCJcclxuICBbY2xhc3MueC12aXNpYmxlXT1cInZpc2libGUoKVwiXHJcbiAgKG1vdXNlZW50ZXIpPVwib25FbnRlcigpXCJcclxuICAobW91c2VsZWF2ZSk9XCJvbkxlYXZlKClcIlxyXG4gIChjbGljayk9XCJzaG93UG9ydGFsKClcIlxyXG4+XHJcbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48L2Rpdj5cclxuIl19
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGliL25nLW5lc3QvdWkvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFFakIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixNQUFNLEVBR04sTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBRVQsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQWlCLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFrQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3hHLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25DLE9BQU8sRUFBRSx3QkFBd0IsRUFBcUIsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakcsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUdMLE9BQU8sRUFHUixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFXMUMsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGlCQUFpQjtJQTBCdkQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQTFCRixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNoQyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN2QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxZQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLGFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUEwQixVQUFVLENBQUMsQ0FBQztRQUNuRSxVQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBZ0IsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pHLENBQUM7WUFDRCxPQUFPLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFHSCxZQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLGNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsaUJBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsYUFBUSxHQUFHLE1BQU0sQ0FBUyxLQUFLLENBQUMsQ0FBQztRQUNqQyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDdEMsaUJBQVksR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVwQyxrQkFBYSxHQUFHLE1BQU0sQ0FBb0IsSUFBSSxDQUFDLENBQUM7UUFDeEQsb0JBQWUsR0FBRyxNQUFNLENBQWdELElBQUksQ0FBQyxDQUFDO1FBQzlFLHFCQUFnQixHQUFHLE1BQU0sQ0FBb0IsSUFBSSxDQUFDLENBQUM7UUFJakQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFD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WUFDM0IsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQztZQUNuRixpQkFBaUIsRUFBRSxtQkFBbUI7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztpSUEvS1Usa0JBQWtCO3FIQUFsQixrQkFBa0IsbU5DdkMvQixvT0FVQTs7MkZENkJhLGtCQUFrQjtrQkFUOUIsU0FBUzsrQkFDRSxHQUFHLGVBQWUsRUFBRSxjQUNsQixJQUFJLFdBQ1AsQ0FBQyxPQUFPLENBQUMsaUJBR0gsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxuICBpbmplY3QsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBzaWduYWwsXHJcbiAgY29tcHV0ZWQsXHJcbiAgdmlld0NoaWxkLFxyXG4gIENvbXBvbmVudFJlZixcclxuICBlZmZlY3RcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgWERyb3Bkb3duUHJlZml4LCBYRHJvcGRvd25Ob2RlLCBYRHJvcGRvd25Qcm9wZXJ0eSB9IGZyb20gJy4vZHJvcGRvd24ucHJvcGVydHknO1xyXG5pbXBvcnQgeyBYSXNFbXB0eSwgWEhhc0NoaWxkcmVuLCBYR2V0Q2hpbGRyZW4sIFhQb3NpdGlvblRvcEJvdHRvbSwgWFBsYWNlbWVudCB9IGZyb20gJ0BuZy1uZXN0L3VpL2NvcmUnO1xyXG5pbXBvcnQgeyBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24sIFhQb3J0YWxPdmVybGF5UmVmLCBYUG9ydGFsU2VydmljZSB9IGZyb20gJ0BuZy1uZXN0L3VpL3BvcnRhbCc7XHJcbmltcG9ydCB7IFhEcm9wZG93blBvcnRhbENvbXBvbmVudCB9IGZyb20gJy4vZHJvcGRvd24tcG9ydGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGVsYXksIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UsXHJcbiAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxyXG4gIE92ZXJsYXksXHJcbiAgT3ZlcmxheUNvbmZpZyxcclxuICBPdmVybGF5UmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBgJHtYRHJvcGRvd25QcmVmaXh9YCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtOZ0NsYXNzXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWERyb3Bkb3duQ29tcG9uZW50IGV4dGVuZHMgWERyb3Bkb3duUHJvcGVydHkgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSB1blN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcG9ydGFsU2VydmljZSA9IGluamVjdChYUG9ydGFsU2VydmljZSk7XHJcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xyXG4gIHByaXZhdGUgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcclxuICBkcm9wZG93biA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ2Ryb3Bkb3duJyk7XHJcbiAgbm9kZXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhKCk7XHJcbiAgICBpZiAoIXRoaXMuY2hpbGRyZW4oKSkge1xyXG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHkpID0+IFhJc0VtcHR5KHkucGlkKSkubWFwKCh5KSA9PiBYR2V0Q2hpbGRyZW48WERyb3Bkb3duTm9kZT4oZGF0YSwgeSwgMCkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFhIYXNDaGlsZHJlbihkYXRhLCAwKTtcclxuICB9KTtcclxuICBwb3J0YWwhOiBYUG9ydGFsT3ZlcmxheVJlZjxYRHJvcGRvd25Qb3J0YWxDb21wb25lbnQ+O1xyXG4gIHRpbWVvdXRIaWRlOiBhbnk7XHJcbiAgdmlzaWJsZSA9IHNpZ25hbChmYWxzZSk7XHJcbiAgYW5pbWF0aW5nID0gc2lnbmFsKGZhbHNlKTtcclxuICBvdXRzaWRlQ2xpY2sgPSBzaWduYWwoZmFsc2UpO1xyXG4gIG1pbldpZHRoID0gc2lnbmFsPHN0cmluZz4oJzBweCcpO1xyXG4gIGhvdmVyRGVsYXlVbnN1YiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY2xvc2VTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFsUGxhY2VtZW50ID0gc2lnbmFsPFhQbGFjZW1lbnQgfCBudWxsPihudWxsKTtcclxuICBwb3J0YWxDb21wb25lbnQgPSBzaWduYWw8Q29tcG9uZW50UmVmPFhEcm9wZG93blBvcnRhbENvbXBvbmVudD4gfCBudWxsPihudWxsKTtcclxuICBwb3J0YWxPdmVybGF5UmVmID0gc2lnbmFsPE92ZXJsYXlSZWYgfCBudWxsPihudWxsKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdkYXRhJywgdGhpcy5ub2RlcygpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ3RyaWdnZXInLCB0aGlzLnRyaWdnZXIoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdtaW5XaWR0aCcsIHRoaXMubWluV2lkdGgoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdtYXhXaWR0aCcsIHRoaXMucG9ydGFsTWF4V2lkdGgoKSkpO1xyXG4gICAgZWZmZWN0KCgpID0+IHRoaXMucG9ydGFsQ29tcG9uZW50KCk/LnNldElucHV0KCdtaW5IZWlnaHQnLCB0aGlzLnBvcnRhbE1pbkhlaWdodCgpKSk7XHJcbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5wb3J0YWxDb21wb25lbnQoKT8uc2V0SW5wdXQoJ21heEhlaWdodCcsIHRoaXMucG9ydGFsTWF4SGVpZ2h0KCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnYWN0aXZhdGVkSWQnLCB0aGlzLmFjdGl2YXRlZElkKCkpKTtcclxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnBvcnRhbENvbXBvbmVudCgpPy5zZXRJbnB1dCgnc2l6ZScsIHRoaXMuc2l6ZSgpKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0U3ViamVjdCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuU3ViamVjdC5uZXh0KCk7XHJcbiAgICB0aGlzLnVuU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5ob3ZlckRlbGF5VW5zdWIubmV4dCgpO1xyXG4gICAgdGhpcy5ob3ZlckRlbGF5VW5zdWIuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHNldFN1YmplY3QoKSB7XHJcbiAgICB0aGlzLmNsb3NlU3ViamVjdC5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2xvc2VQb3J0YWwoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25FbnRlcigpIHtcclxuICAgIG9mKHRydWUpXHJcbiAgICAgIC5waXBlKGRlbGF5KHRoaXMuaG92ZXJEZWxheSgpKSwgdGFrZVVudGlsKHRoaXMuaG92ZXJEZWxheVVuc3ViKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSB8fCB0aGlzLnRyaWdnZXIoKSA9PT0gJ2NsaWNrJykgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXRIaWRlKSB7XHJcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SGlkZSk7XHJcbiAgICAgICAgICB0aGlzLnRpbWVvdXRIaWRlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvcnRhbCB8fCAodGhpcy5wb3J0YWwgJiYgIXRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy5oYXNBdHRhY2hlZCgpKSkge1xyXG4gICAgICAgICAgdGhpcy52aXNpYmxlLnNldCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlUG9ydGFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uTGVhdmUoKSB7XHJcbiAgICB0aGlzLmhvdmVyRGVsYXlVbnN1Yi5uZXh0KCk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpIHx8IHRoaXMudHJpZ2dlcigpID09PSAnY2xpY2snKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/Lmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgdGhpcy50aW1lb3V0SGlkZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucG9ydGFsT3ZlcmxheVJlZigpPy5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlLnNldChmYWxzZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1BvcnRhbCgpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKCkgfHwgdGhpcy50cmlnZ2VyKCkgPT09ICdob3ZlcicgfHwgdGhpcy5hbmltYXRpbmcoKSkgcmV0dXJuO1xyXG4gICAgaWYgKHRoaXMudHJpZ2dlcigpID09PSAnY2xpY2snICYmIHRoaXMucG9ydGFsQXR0YWNoZWQoKSkge1xyXG4gICAgICB0aGlzLmNsb3NlU3ViamVjdC5uZXh0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY3JlYXRlUG9ydGFsKCk7XHJcbiAgfVxyXG5cclxuICBwb3J0YWxBdHRhY2hlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnBvcnRhbE92ZXJsYXlSZWYoKT8uaGFzQXR0YWNoZWQoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlUG9ydGFsKCkge1xyXG4gICAgaWYgKHRoaXMucG9ydGFsQXR0YWNoZWQoKSkge1xyXG4gICAgICB0aGlzLnBvcnRhbE92ZXJsYXlSZWYoKT8uZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLnZpc2libGUuc2V0KGZhbHNlKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95UG9ydGFsKCkge1xyXG4gICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVBvcnRhbCgpIHtcclxuICAgIGxldCBib3ggPSB0aGlzLmRyb3Bkb3duKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIHRoaXMubWluV2lkdGguc2V0KHRoaXMucG9ydGFsTWluV2lkdGgoKSA/IHRoaXMucG9ydGFsTWluV2lkdGgoKSA6IGAke2JveC53aWR0aH1weGApO1xyXG4gICAgY29uc3QgY29uZmlnOiBPdmVybGF5Q29uZmlnID0ge1xyXG4gICAgICBiYWNrZHJvcENsYXNzOiAnJyxcclxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5zZXRQbGFjZW1lbnQoKSxcclxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcclxuICAgICAgbWluV2lkdGg6IHRoaXMubWluV2lkdGgoKVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2V0UG9zaXRpb24oY29uZmlnKTtcclxuICAgIHRoaXMucG9ydGFsID0gdGhpcy5wb3J0YWxTZXJ2aWNlLmF0dGFjaCh7XHJcbiAgICAgIGNvbnRlbnQ6IFhEcm9wZG93blBvcnRhbENvbXBvbmVudCxcclxuICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICBvdmVybGF5Q29uZmlnOiBjb25maWdcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnRyaWdnZXIoKSA9PT0gJ2NsaWNrJykge1xyXG4gICAgICB0aGlzLnBvcnRhbC5vdmVybGF5UmVmXHJcbiAgICAgICAgPy5vdXRzaWRlUG9pbnRlckV2ZW50cygpXHJcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDMwKSwgdGFrZVVudGlsKHRoaXMudW5TdWJqZWN0KSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldEluc3RhbmNlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQb3NpdGlvbihjb25maWc6IE92ZXJsYXlDb25maWcpIHtcclxuICAgIGxldCBwb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5IGFzIEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneTtcclxuICAgIHBvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3ViamVjdCkpLnN1YnNjcmliZSgocG9zOiBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UpID0+IHtcclxuICAgICAgY29uc3QgcGxhY2UgPSBYUG9ydGFsQ29ubmVjdGVkUG9zaXRpb24uZ2V0KHBvcy5jb25uZWN0aW9uUGFpcikgYXMgWFBvc2l0aW9uVG9wQm90dG9tO1xyXG4gICAgICBpZiAocGxhY2UgIT09IHRoaXMucmVhbFBsYWNlbWVudCgpKSB7XHJcbiAgICAgICAgdGhpcy5yZWFsUGxhY2VtZW50LnNldChwbGFjZSk7XHJcbiAgICAgICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmKCk/LnVwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5zdGFuY2UoKSB7XHJcbiAgICBsZXQgeyBjb21wb25lbnRSZWYsIG92ZXJsYXlSZWYgfSA9IHRoaXMucG9ydGFsO1xyXG4gICAgaWYgKCFjb21wb25lbnRSZWYgfHwgIW92ZXJsYXlSZWYpIHJldHVybjtcclxuICAgIHRoaXMucG9ydGFsQ29tcG9uZW50LnNldChjb21wb25lbnRSZWYpO1xyXG4gICAgdGhpcy5wb3J0YWxPdmVybGF5UmVmLnNldChvdmVybGF5UmVmKTtcclxuICAgIHRoaXMucmVhbFBsYWNlbWVudC5zZXQodGhpcy5wbGFjZW1lbnQoKSk7XHJcbiAgICBjb25zdCB7IGNsb3NlZCwgYW5pbWF0aW5nLCBub2RlQ2xpY2ssIHBvcnRhbEhvdmVyLCBhY3RpdmF0ZWRJZCB9ID0gY29tcG9uZW50UmVmLmluc3RhbmNlO1xyXG4gICAgY2xvc2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlU3ViamVjdC5uZXh0KCkpO1xyXG4gICAgYW5pbWF0aW5nLnN1YnNjcmliZSgoaW5nKSA9PiB0aGlzLmFuaW1hdGluZy5zZXQoaW5nKSk7XHJcbiAgICBub2RlQ2xpY2suc3Vic2NyaWJlKChub2RlKSA9PiB0aGlzLm5vZGVDbGljay5lbWl0KG5vZGUpKTtcclxuICAgIGFjdGl2YXRlZElkLnN1YnNjcmliZSgoaWQpID0+IHRoaXMuYWN0aXZhdGVkSWQuc2V0KGlkKSk7XHJcbiAgICBwb3J0YWxIb3Zlci5zdWJzY3JpYmUoKGhvdmVyKSA9PiB0aGlzLnBvcnRhbEhvdmVyKGhvdmVyKSk7XHJcbiAgfVxyXG5cclxuICBwb3J0YWxIb3Zlcihob3ZlcjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMudGltZW91dEhpZGUgJiYgaG92ZXIpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dEhpZGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vbkxlYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQbGFjZW1lbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3J0YWxTZXJ2aWNlLnNldFBsYWNlbWVudCh7XHJcbiAgICAgIGVsZW1lbnRSZWY6IHRoaXMuZHJvcGRvd24oKSxcclxuICAgICAgcGxhY2VtZW50OiBbdGhpcy5wbGFjZW1lbnQoKSwgJ2JvdHRvbS1zdGFydCcsICd0b3Atc3RhcnQnLCAnYm90dG9tLWVuZCcsICd0b3AtZW5kJ10sXHJcbiAgICAgIHRyYW5zZm9ybU9yaWdpbk9uOiAneC1kcm9wZG93bi1wb3J0YWwnXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICNkcm9wZG93blxyXG4gIGNsYXNzPVwieC1kcm9wZG93blwiXHJcbiAgW2NsYXNzLngtdmlzaWJsZV09XCJ2aXNpYmxlKClcIlxyXG4gIChtb3VzZWVudGVyKT1cIm9uRW50ZXIoKVwiXHJcbiAgKG1vdXNlbGVhdmUpPVwib25MZWF2ZSgpXCJcclxuICAoY2xpY2spPVwic2hvd1BvcnRhbCgpXCJcclxuPlxyXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuPC9kaXY+XHJcbiJdfQ==