cps-ui-kit 0.165.0 → 17.1.0

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 (166) hide show
  1. package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +824 -0
  2. package/esm2022/lib/components/cps-button/cps-button.component.mjs +190 -0
  3. package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +235 -0
  4. package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +149 -0
  5. package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +94 -0
  6. package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +382 -0
  7. package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +209 -0
  8. package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +138 -0
  9. package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +193 -0
  10. package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +61 -0
  11. package/esm2022/lib/components/cps-input/cps-input.component.mjs +386 -0
  12. package/{esm2020 → esm2022}/lib/components/cps-loader/cps-loader.component.mjs +5 -5
  13. package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +552 -0
  14. package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +114 -0
  15. package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +30 -0
  16. package/{esm2020 → esm2022}/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +4 -4
  18. package/{esm2020 → esm2022}/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +7 -7
  19. package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +55 -0
  20. package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +158 -0
  21. package/esm2022/lib/components/cps-select/cps-select.component.mjs +615 -0
  22. package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +110 -0
  23. package/{esm2020 → esm2022}/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +4 -4
  24. package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +303 -0
  25. package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +79 -0
  26. package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +408 -0
  27. package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +149 -0
  28. package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +88 -0
  29. package/esm2022/lib/components/cps-table/cps-table.component.mjs +941 -0
  30. package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +181 -0
  31. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +5 -5
  32. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +5 -5
  33. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +5 -5
  34. package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +220 -0
  35. package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +136 -0
  36. package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +291 -0
  37. package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +351 -0
  38. package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +251 -0
  39. package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +87 -0
  40. package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +1196 -0
  41. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +5 -5
  42. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +5 -5
  43. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +5 -5
  44. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +5 -5
  45. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +43 -0
  46. package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +354 -0
  47. package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +619 -0
  48. package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +257 -0
  49. package/{esm2020 → esm2022}/lib/pipes/internal/check-option-selected.pipe.mjs +4 -4
  50. package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +25 -0
  51. package/{esm2020 → esm2022}/lib/pipes/internal/label-by-value.pipe.mjs +4 -4
  52. package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +99 -0
  53. package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +5 -5
  54. package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +470 -0
  55. package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +5 -5
  56. package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +3 -0
  57. package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +126 -0
  58. package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +91 -0
  59. package/{esm2020 → esm2022}/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +23 -23
  60. package/esm2022/lib/utils/colors-utils.mjs +57 -0
  61. package/esm2022/lib/utils/internal/size-utils.mjs +24 -0
  62. package/{esm2020 → esm2022}/public-api.mjs +2 -2
  63. package/{fesm2020 → fesm2022}/cps-ui-kit.mjs +481 -391
  64. package/fesm2022/cps-ui-kit.mjs.map +1 -0
  65. package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
  66. package/lib/components/cps-button/cps-button.component.d.ts +1 -1
  67. package/lib/components/cps-button-toggle/cps-button-toggle.component.d.ts +2 -2
  68. package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +2 -2
  69. package/lib/components/cps-chip/cps-chip.component.d.ts +1 -1
  70. package/lib/components/cps-datepicker/cps-datepicker.component.d.ts +2 -2
  71. package/lib/components/cps-expansion-panel/cps-expansion-panel.component.d.ts +1 -1
  72. package/lib/components/cps-file-upload/cps-file-upload.component.d.ts +1 -1
  73. package/lib/components/cps-icon/cps-icon.component.d.ts +1 -1
  74. package/lib/components/cps-info-circle/cps-info-circle.component.d.ts +2 -2
  75. package/lib/components/cps-input/cps-input.component.d.ts +2 -2
  76. package/lib/components/cps-loader/cps-loader.component.d.ts +1 -1
  77. package/lib/components/cps-menu/cps-menu.component.d.ts +1 -1
  78. package/lib/components/cps-paginator/cps-paginator.component.d.ts +1 -1
  79. package/lib/components/cps-progress-circular/cps-progress-circular.component.d.ts +1 -1
  80. package/lib/components/cps-progress-linear/cps-progress-linear.component.d.ts +1 -1
  81. package/lib/components/cps-radio-group/cps-radio/cps-radio.component.d.ts +1 -1
  82. package/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.d.ts +1 -1
  83. package/lib/components/cps-radio-group/cps-radio-group.component.d.ts +2 -2
  84. package/lib/components/cps-select/cps-select.component.d.ts +2 -2
  85. package/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.d.ts +1 -1
  86. package/lib/components/cps-tab-group/cps-tab/cps-tab.component.d.ts +1 -1
  87. package/lib/components/cps-tab-group/cps-tab-group.component.d.ts +1 -1
  88. package/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.d.ts +1 -1
  89. package/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.d.ts +1 -1
  90. package/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.d.ts +1 -1
  91. package/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.d.ts +1 -1
  92. package/lib/components/cps-table/cps-table.component.d.ts +1 -1
  93. package/lib/components/cps-table/directives/cps-table-column-filter.directive.d.ts +1 -1
  94. package/lib/components/cps-table/directives/cps-table-column-sortable.directive.d.ts +1 -1
  95. package/lib/components/cps-table/directives/cps-table-row-selectable.directive.d.ts +1 -1
  96. package/lib/components/cps-tag/cps-tag.component.d.ts +1 -1
  97. package/lib/components/cps-textarea/cps-textarea.component.d.ts +2 -2
  98. package/lib/components/cps-timepicker/cps-timepicker.component.d.ts +2 -2
  99. package/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.d.ts +1 -1
  100. package/lib/components/cps-tree-select/cps-tree-select.component.d.ts +1 -1
  101. package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +4 -4
  102. package/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.d.ts +1 -1
  103. package/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.d.ts +1 -1
  104. package/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.d.ts +1 -1
  105. package/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.d.ts +1 -1
  106. package/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.d.ts +2 -2
  107. package/lib/directives/{cps-tooltip.directive.d.ts → cps-tooltip/cps-tooltip.directive.d.ts} +2 -2
  108. package/lib/services/cps-dialog/cps-dialog.service.d.ts +13 -0
  109. package/lib/services/cps-dialog/utils/cps-dialog-config.d.ts +1 -1
  110. package/lib/services/cps-notification/cps-notification.service.d.ts +32 -0
  111. package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +1 -1
  112. package/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.d.ts +1 -1
  113. package/package.json +12 -18
  114. package/public-api.d.ts +1 -1
  115. package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -824
  116. package/esm2020/lib/components/cps-button/cps-button.component.mjs +0 -190
  117. package/esm2020/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -235
  118. package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -149
  119. package/esm2020/lib/components/cps-chip/cps-chip.component.mjs +0 -94
  120. package/esm2020/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
  121. package/esm2020/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -209
  122. package/esm2020/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -138
  123. package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +0 -193
  124. package/esm2020/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
  125. package/esm2020/lib/components/cps-input/cps-input.component.mjs +0 -386
  126. package/esm2020/lib/components/cps-menu/cps-menu.component.mjs +0 -552
  127. package/esm2020/lib/components/cps-paginator/cps-paginator.component.mjs +0 -113
  128. package/esm2020/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
  129. package/esm2020/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -55
  130. package/esm2020/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -158
  131. package/esm2020/lib/components/cps-select/cps-select.component.mjs +0 -615
  132. package/esm2020/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
  133. package/esm2020/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -299
  134. package/esm2020/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
  135. package/esm2020/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -408
  136. package/esm2020/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -148
  137. package/esm2020/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -88
  138. package/esm2020/lib/components/cps-table/cps-table.component.mjs +0 -940
  139. package/esm2020/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
  140. package/esm2020/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -210
  141. package/esm2020/lib/components/cps-tag/cps-tag.component.mjs +0 -136
  142. package/esm2020/lib/components/cps-textarea/cps-textarea.component.mjs +0 -291
  143. package/esm2020/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -351
  144. package/esm2020/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -250
  145. package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
  146. package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1192
  147. package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -43
  148. package/esm2020/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -334
  149. package/esm2020/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -616
  150. package/esm2020/lib/directives/cps-tooltip.directive.mjs +0 -257
  151. package/esm2020/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
  152. package/esm2020/lib/services/cps-dialog/cps-dialog.service.mjs +0 -86
  153. package/esm2020/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
  154. package/esm2020/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
  155. package/esm2020/lib/services/cps-notification/cps-notification.service.mjs +0 -94
  156. package/esm2020/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -91
  157. package/esm2020/lib/utils/colors-utils.mjs +0 -57
  158. package/esm2020/lib/utils/internal/size-utils.mjs +0 -24
  159. package/fesm2015/cps-ui-kit.mjs +0 -12086
  160. package/fesm2015/cps-ui-kit.mjs.map +0 -1
  161. package/fesm2020/cps-ui-kit.mjs.map +0 -1
  162. /package/{esm2020 → esm2022}/cps-ui-kit.mjs +0 -0
  163. /package/{esm2020 → esm2022}/lib/components/cps-table/cps-column-filter-types.mjs +0 -0
  164. /package/{esm2020 → esm2022}/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -0
  165. /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -0
  166. /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -0
@@ -0,0 +1,470 @@
1
+ import { animate, animation, style, transition, trigger, useAnimation } from '@angular/animations';
2
+ import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';
3
+ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, PLATFORM_ID, ViewChild, ViewEncapsulation } from '@angular/core';
4
+ import { SharedModule } from 'primeng/api';
5
+ import { DomHandler } from 'primeng/dom';
6
+ import { ZIndexUtils } from 'primeng/utils';
7
+ import { CpsDialogContentDirective } from '../../directives/cps-dialog-content.directive';
8
+ import { CpsButtonComponent } from '../../../../../components/cps-button/cps-button.component';
9
+ import { CpsInfoCircleComponent } from '../../../../../components/cps-info-circle/cps-info-circle.component';
10
+ import { CpsIconComponent } from '../../../../../components/cps-icon/cps-icon.component';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "../../../utils/cps-dialog-ref";
13
+ import * as i2 from "../../../utils/cps-dialog-config";
14
+ import * as i3 from "primeng/api";
15
+ import * as i4 from "@angular/common";
16
+ const showAnimation = animation([
17
+ style({ transform: '{{transform}}', opacity: 0 }),
18
+ animate('{{transition}}', style({ transform: 'none', opacity: 1 }))
19
+ ]);
20
+ const hideAnimation = animation([
21
+ animate('{{transition}}', style({ transform: '{{transform}}', opacity: 0 }))
22
+ ]);
23
+ export class CpsDialogComponent {
24
+ get minX() {
25
+ return this.config.minX ? this.config.minX : 0;
26
+ }
27
+ get minY() {
28
+ return this.config.minY ? this.config.minY : 0;
29
+ }
30
+ get keepInViewport() {
31
+ return this.config.keepInViewport || false;
32
+ }
33
+ get maximizable() {
34
+ return this.config.maximizable || false;
35
+ }
36
+ get draggable() {
37
+ return this.config.draggable || false;
38
+ }
39
+ get resizable() {
40
+ return this.config.resizable || false;
41
+ }
42
+ get style() {
43
+ return this._style;
44
+ }
45
+ set style(value) {
46
+ if (value) {
47
+ this._style = { ...value };
48
+ this.originalStyle = value;
49
+ }
50
+ }
51
+ get position() {
52
+ return this.config.position || '';
53
+ }
54
+ get parent() {
55
+ const domElements = Array.from(this.document.getElementsByClassName('cps-dialog'));
56
+ return domElements.length > 1 ? domElements.pop() : undefined;
57
+ }
58
+ // eslint-disable-next-line no-useless-constructor
59
+ constructor(document, platformId, _dialogRef, _cdRef, renderer, config, zone, primeNGConfig) {
60
+ this.document = document;
61
+ this.platformId = platformId;
62
+ this._dialogRef = _dialogRef;
63
+ this._cdRef = _cdRef;
64
+ this.renderer = renderer;
65
+ this.config = config;
66
+ this.zone = zone;
67
+ this.primeNGConfig = primeNGConfig;
68
+ this.visible = true;
69
+ this._style = {};
70
+ this.transformOptions = 'scale(0.7)';
71
+ this._openStateChanged = new EventEmitter();
72
+ this._dragStarted = new EventEmitter();
73
+ this._dragEnded = new EventEmitter();
74
+ this._resizeStarted = new EventEmitter();
75
+ this._resizeEnded = new EventEmitter();
76
+ this._maximizedStateChanged = new EventEmitter();
77
+ }
78
+ ngAfterViewInit() {
79
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
80
+ this.loadChildComponent(this.childComponentType);
81
+ if (this.config.maximized && this.maximizable) {
82
+ this.toggleMaximized();
83
+ }
84
+ this._cdRef.detectChanges();
85
+ }
86
+ loadChildComponent(componentType) {
87
+ const viewContainerRef = this.insertionPoint?.viewContainerRef;
88
+ viewContainerRef?.clear();
89
+ this.componentRef = viewContainerRef?.createComponent(componentType);
90
+ if (this._dialogRef)
91
+ this._dialogRef.componentInstance = this.componentRef?.instance;
92
+ }
93
+ moveOnTop() {
94
+ if (this.config.autoZIndex !== false) {
95
+ ZIndexUtils.set('modal', this.container, (this.config.baseZIndex || 0) + this.primeNGConfig.zIndex.modal);
96
+ this.wrapper.style.zIndex = String(parseInt(this.container.style.zIndex, 10) - 1);
97
+ }
98
+ }
99
+ onAnimationStart(event) {
100
+ switch (event.toState) {
101
+ case 'visible':
102
+ this.container = event.element;
103
+ this.wrapper = this.container.parentElement;
104
+ this.moveOnTop();
105
+ if (this.parent) {
106
+ this.unbindGlobalListeners();
107
+ }
108
+ this.bindGlobalListeners();
109
+ if (this.config.modal !== false) {
110
+ this.enableModality();
111
+ }
112
+ this.focus();
113
+ break;
114
+ case 'void':
115
+ if (this.wrapper && this.config.modal !== false) {
116
+ if (this.config.blurredBackground) {
117
+ DomHandler.addClass(this.wrapper, 'cps-dialog-blurred-overlay-leave');
118
+ }
119
+ else
120
+ DomHandler.addClass(this.wrapper, 'cps-dialog-overlay-leave');
121
+ }
122
+ break;
123
+ }
124
+ }
125
+ onAnimationEnd(event) {
126
+ if (event.toState === 'void') {
127
+ this.onContainerDestroy();
128
+ this._dialogRef.destroy();
129
+ }
130
+ else {
131
+ this._openStateChanged.emit();
132
+ }
133
+ }
134
+ onContainerDestroy() {
135
+ this.unbindGlobalListeners();
136
+ if (this.container && this.config.autoZIndex !== false) {
137
+ ZIndexUtils.clear(this.container);
138
+ }
139
+ if (this.config.modal !== false) {
140
+ this.disableModality();
141
+ }
142
+ this.container = null;
143
+ }
144
+ close() {
145
+ if (this.config?.disableClose || this._dialogRef?.disableClose)
146
+ return;
147
+ this.visible = false;
148
+ this._cdRef.markForCheck();
149
+ }
150
+ hide() {
151
+ if (this.config?.disableClose)
152
+ return;
153
+ if (this._dialogRef) {
154
+ if (!this._dialogRef.disableClose)
155
+ this._dialogRef.close();
156
+ }
157
+ }
158
+ enableModality() {
159
+ if (!this.config.disableClose) {
160
+ this.maskClickListener = this.renderer.listen(this.wrapper, 'mousedown', (event) => {
161
+ if (this.wrapper && this.wrapper.isSameNode(event.target)) {
162
+ this.hide();
163
+ }
164
+ });
165
+ }
166
+ if (this.config.modal !== false) {
167
+ DomHandler.addClass(this.document.body, 'cps-overflow-hidden');
168
+ }
169
+ }
170
+ disableModality() {
171
+ if (this.wrapper) {
172
+ if (!this.config.disableClose) {
173
+ this.unbindMaskClickListener();
174
+ }
175
+ if (this.config.modal !== false) {
176
+ DomHandler.removeClass(this.document.body, 'cps-overflow-hidden');
177
+ }
178
+ if (!this._cdRef.destroyed) {
179
+ this._cdRef.detectChanges();
180
+ }
181
+ }
182
+ }
183
+ focus() {
184
+ const focusable = DomHandler.getFocusableElements(this.container);
185
+ if (focusable && focusable.length > 0) {
186
+ this.zone.runOutsideAngular(() => {
187
+ setTimeout(() => focusable[0].focus(), 5);
188
+ });
189
+ }
190
+ }
191
+ toggleMaximized(value) {
192
+ if (!this.maximizable)
193
+ return;
194
+ if (typeof value === 'boolean') {
195
+ if (value === this.maximized || (!value && !this.maximized))
196
+ return;
197
+ this.maximized = value;
198
+ }
199
+ else
200
+ this.maximized = !this.maximized;
201
+ if (this.maximized) {
202
+ DomHandler.addClass(this.document.body, 'cps-overflow-hidden');
203
+ }
204
+ else {
205
+ DomHandler.removeClass(this.document.body, 'cps-overflow-hidden');
206
+ }
207
+ this._maximizedStateChanged.emit(this.maximized);
208
+ }
209
+ initResize(event) {
210
+ if (this.resizable) {
211
+ if (!this.documentResizeListener) {
212
+ this.bindDocumentResizeListeners();
213
+ }
214
+ this.resizing = true;
215
+ this.lastPageX = event.pageX;
216
+ this.lastPageY = event.pageY;
217
+ DomHandler.addClass(this.document.body, 'cps-unselectable-text');
218
+ this._resizeStarted.emit(event);
219
+ }
220
+ }
221
+ onResize(event) {
222
+ if (this.resizing) {
223
+ const deltaX = event.pageX - this.lastPageX;
224
+ const deltaY = event.pageY - this.lastPageY;
225
+ const containerWidth = DomHandler.getOuterWidth(this.container);
226
+ const containerHeight = DomHandler.getOuterHeight(this.container);
227
+ const contentHeight = DomHandler.getOuterHeight(this.contentViewChild.nativeElement);
228
+ const contentWidth = DomHandler.getOuterWidth(this.contentViewChild.nativeElement);
229
+ const headerHeight = this.headerViewChild
230
+ ? DomHandler.getOuterHeight(this.headerViewChild.nativeElement)
231
+ : 0;
232
+ const headerWidth = this.headerViewChild
233
+ ? DomHandler.getOuterWidth(this.headerViewChild.nativeElement)
234
+ : 0;
235
+ let newWidth = containerWidth + deltaX;
236
+ let newHeight = containerHeight + deltaY;
237
+ const minWidth = this.container.style.minWidth;
238
+ const minHeight = this.container.style.minHeight;
239
+ const offset = this.container.getBoundingClientRect();
240
+ const viewport = DomHandler.getViewport();
241
+ const hasBeenDragged = !parseInt(this.container.style.top) ||
242
+ !parseInt(this.container.style.left);
243
+ if (hasBeenDragged) {
244
+ newWidth += deltaX;
245
+ newHeight += deltaY;
246
+ }
247
+ if ((!minWidth || newWidth > parseInt(minWidth)) &&
248
+ offset.left + newWidth < viewport.width) {
249
+ const newContentWidth = contentWidth + newWidth - containerWidth;
250
+ const newHeaderWidth = headerWidth + newWidth - containerWidth;
251
+ this._style.width =
252
+ Math.max(newWidth, newContentWidth, newHeaderWidth) + 'px';
253
+ this.container.style.width = this._style.width;
254
+ }
255
+ if ((!minHeight || newHeight > parseInt(minHeight)) &&
256
+ offset.top + newHeight < viewport.height) {
257
+ const newContentHeight = contentHeight + newHeight - containerHeight;
258
+ this._style.height =
259
+ Math.max(newHeight, headerHeight + newContentHeight) + 'px';
260
+ this.container.style.height = this._style.height;
261
+ }
262
+ this.lastPageX = event.pageX;
263
+ this.lastPageY = event.pageY;
264
+ }
265
+ }
266
+ resizeEnd(event) {
267
+ if (this.resizing) {
268
+ this.resizing = false;
269
+ DomHandler.removeClass(this.document.body, 'cps-unselectable-text');
270
+ this._resizeEnded.emit(event);
271
+ }
272
+ }
273
+ initDrag(event) {
274
+ function isHeaderActionButton(element) {
275
+ while (element &&
276
+ !element.classList.contains('cps-dialog-header-action-button') &&
277
+ !element.classList.contains('cps-dialog-header-info-circle')) {
278
+ element = element.parentElement;
279
+ }
280
+ return !!element;
281
+ }
282
+ if (!this.draggable || this.maximized)
283
+ return;
284
+ if (isHeaderActionButton(event.target))
285
+ return;
286
+ this.dragging = true;
287
+ this.lastPageX = event.pageX;
288
+ this.lastPageY = event.pageY;
289
+ this.container.style.margin = '0';
290
+ DomHandler.addClass(this.document.body, 'cps-unselectable-text');
291
+ this._dragStarted.emit(event);
292
+ }
293
+ onDrag(event) {
294
+ if (this.dragging) {
295
+ const containerWidth = DomHandler.getOuterWidth(this.container);
296
+ const containerHeight = DomHandler.getOuterHeight(this.container);
297
+ const deltaX = event.pageX - this.lastPageX;
298
+ const deltaY = event.pageY - this.lastPageY;
299
+ const offset = this.container.getBoundingClientRect();
300
+ const leftPos = offset.left + deltaX;
301
+ const topPos = offset.top + deltaY;
302
+ const viewport = DomHandler.getViewport();
303
+ this.container.style.position = 'fixed';
304
+ if (this.keepInViewport) {
305
+ if (leftPos >= this.minX && leftPos + containerWidth < viewport.width) {
306
+ this._style.left = leftPos + 'px';
307
+ this.lastPageX = event.pageX;
308
+ this.container.style.left = leftPos + 'px';
309
+ }
310
+ if (topPos >= this.minY && topPos + containerHeight < viewport.height) {
311
+ this._style.top = topPos + 'px';
312
+ this.lastPageY = event.pageY;
313
+ this.container.style.top = topPos + 'px';
314
+ }
315
+ }
316
+ else {
317
+ this.lastPageX = event.pageX;
318
+ this.container.style.left = leftPos + 'px';
319
+ this.lastPageY = event.pageY;
320
+ this.container.style.top = topPos + 'px';
321
+ }
322
+ }
323
+ }
324
+ endDrag(event) {
325
+ if (this.dragging) {
326
+ this.dragging = false;
327
+ DomHandler.removeClass(this.document.body, 'cps-unselectable-text');
328
+ this._dragEnded.emit(event);
329
+ this._cdRef.detectChanges();
330
+ }
331
+ }
332
+ resetPosition() {
333
+ this.container.style.position = '';
334
+ this.container.style.left = '';
335
+ this.container.style.top = '';
336
+ this.container.style.margin = '';
337
+ }
338
+ bindDocumentDragListener() {
339
+ if (isPlatformBrowser(this.platformId)) {
340
+ this.zone.runOutsideAngular(() => {
341
+ this.documentDragListener = this.renderer.listen(this.document, 'mousemove', this.onDrag.bind(this));
342
+ });
343
+ }
344
+ }
345
+ bindDocumentDragEndListener() {
346
+ if (isPlatformBrowser(this.platformId)) {
347
+ this.zone.runOutsideAngular(() => {
348
+ this.documentDragEndListener = this.renderer.listen(this.document, 'mouseup', this.endDrag.bind(this));
349
+ });
350
+ }
351
+ }
352
+ unbindDocumentDragEndListener() {
353
+ if (this.documentDragEndListener) {
354
+ this.documentDragEndListener();
355
+ this.documentDragListener = null;
356
+ }
357
+ }
358
+ unbindDocumentDragListener() {
359
+ if (this.documentDragListener) {
360
+ this.documentDragListener();
361
+ this.documentDragListener = null;
362
+ }
363
+ }
364
+ bindDocumentResizeListeners() {
365
+ if (isPlatformBrowser(this.platformId)) {
366
+ this.zone.runOutsideAngular(() => {
367
+ this.documentResizeListener = this.renderer.listen(this.document, 'mousemove', this.onResize.bind(this));
368
+ this.documentResizeEndListener = this.renderer.listen(this.document, 'mouseup', this.resizeEnd.bind(this));
369
+ });
370
+ }
371
+ }
372
+ unbindDocumentResizeListeners() {
373
+ if (this.documentResizeListener && this.documentResizeEndListener) {
374
+ this.documentResizeListener();
375
+ this.documentResizeEndListener();
376
+ this.documentResizeListener = null;
377
+ this.documentResizeEndListener = null;
378
+ }
379
+ }
380
+ bindGlobalListeners() {
381
+ if (this.config.closeOnEscape !== false &&
382
+ this.config.disableClose !== false) {
383
+ this.bindDocumentEscapeListener();
384
+ }
385
+ if (this.resizable) {
386
+ this.bindDocumentResizeListeners();
387
+ }
388
+ if (this.draggable) {
389
+ this.bindDocumentDragListener();
390
+ this.bindDocumentDragEndListener();
391
+ }
392
+ }
393
+ unbindGlobalListeners() {
394
+ this.unbindDocumentEscapeListener();
395
+ this.unbindDocumentResizeListeners();
396
+ this.unbindDocumentDragListener();
397
+ this.unbindDocumentDragEndListener();
398
+ }
399
+ bindDocumentEscapeListener() {
400
+ const documentTarget = this.maskViewChild
401
+ ? this.maskViewChild.nativeElement.ownerDocument
402
+ : 'document';
403
+ this.documentEscapeListener = this.renderer.listen(documentTarget, 'keydown', (event) => {
404
+ if (event.which === 27) {
405
+ if (parseInt(this.container.style.zIndex) ===
406
+ ZIndexUtils.getCurrent()) {
407
+ this.hide();
408
+ }
409
+ }
410
+ });
411
+ }
412
+ unbindDocumentEscapeListener() {
413
+ if (this.documentEscapeListener) {
414
+ this.documentEscapeListener();
415
+ this.documentEscapeListener = null;
416
+ }
417
+ }
418
+ unbindMaskClickListener() {
419
+ if (this.maskClickListener) {
420
+ this.maskClickListener();
421
+ this.maskClickListener = null;
422
+ }
423
+ }
424
+ ngOnDestroy() {
425
+ this.onContainerDestroy();
426
+ this.componentRef?.destroy();
427
+ }
428
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsDialogComponent, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i1.CpsDialogRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.CpsDialogConfig }, { token: i0.NgZone }, { token: i3.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Component }); }
429
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: CpsDialogComponent, isStandalone: true, selector: "cps-dialog", viewQueries: [{ propertyName: "insertionPoint", first: true, predicate: CpsDialogContentDirective, descendants: true }, { propertyName: "maskViewChild", first: true, predicate: ["mask"], descendants: true }, { propertyName: "contentViewChild", first: true, predicate: ["content"], descendants: true }, { propertyName: "headerViewChild", first: true, predicate: ["header"], descendants: true }], ngImport: i0, template: "<div\n #mask\n [ngClass]=\"{\n 'cps-dialog-mask': true,\n 'cps-dialog-overlay': config.modal !== false,\n 'cps-dialog-overlay-enter':\n config.modal !== false && !config.blurredBackground,\n 'cps-dialog-blurred-overlay cps-dialog-blurred-overlay-enter':\n config.modal !== false && config.blurredBackground,\n 'cps-dialog-left': position === 'left',\n 'cps-dialog-right': position === 'right',\n 'cps-dialog-top': position === 'top',\n 'cps-dialog-bottom': position === 'bottom',\n 'cps-dialog-top-left': position === 'topleft' || position === 'top-left',\n 'cps-dialog-top-right': position === 'topright' || position === 'top-right',\n 'cps-dialog-bottom-left':\n position === 'bottomleft' || position === 'bottom-left',\n 'cps-dialog-bottom-right':\n position === 'bottomright' || position === 'bottom-right'\n }\"\n [class]=\"config.maskStyleClass || ''\">\n <div\n #container\n [ngClass]=\"{\n 'cps-dialog': true,\n 'cps-dialog-resizable': resizable,\n 'cps-dialog-draggable': draggable && !maximized,\n 'cps-dialog-dragging': dragging,\n 'cps-dialog-maximized': maximized\n }\"\n [ngStyle]=\"config.style\"\n [class]=\"config.styleClass || ''\"\n [@animation]=\"{\n value: 'visible',\n params: {\n transform: transformOptions,\n transition:\n config.transitionOptions || '150ms cubic-bezier(0, 0, 0.2, 1)'\n }\n }\"\n (@animation.start)=\"onAnimationStart($event)\"\n (@animation.done)=\"onAnimationEnd($event)\"\n role=\"dialog\"\n *ngIf=\"visible\"\n [style.width]=\"config.width\"\n [style.height]=\"config.height\"\n [style.minWidth]=\"config.minWidth\"\n [style.minHeight]=\"config.minHeight\"\n [style.maxWidth]=\"maximized ? '' : config.maxWidth\"\n [style.maxHeight]=\"maximized ? '' : config.maxHeight\">\n <div\n *ngIf=\"resizable && !maximized\"\n class=\"cps-dialog-resizable-handle\"\n style=\"z-index: 90\"\n (mousedown)=\"initResize($event)\"></div>\n <div\n #header\n *ngIf=\"config.showHeader !== false\"\n class=\"cps-dialog-header\"\n [ngClass]=\"{\n 'cps-dialog-header-left-bordered':\n config.showHeaderLeftBorder !== false,\n 'cps-dialog-header-bottom-bordered':\n config.showHeaderBottomBorder !== false\n }\"\n (mousedown)=\"initDrag($event)\">\n <div class=\"cps-dialog-header-left\">\n <div class=\"cps-dialog-header-icon\">\n <cps-icon\n *ngIf=\"config.headerIcon\"\n [icon]=\"config.headerIcon\"\n [color]=\"config.headerIconColor || 'currentColor'\">\n </cps-icon>\n </div>\n <span class=\"cps-dialog-header-title\">{{ config.headerTitle }}</span>\n <div class=\"cps-dialog-header-info-circle\">\n <cps-info-circle\n *ngIf=\"config.headerInfoTooltip\"\n size=\"small\"\n [tooltipPosition]=\"config.headerInfoTooltipPosition || 'top'\"\n [tooltipText]=\"config.headerInfoTooltip\">\n </cps-info-circle>\n </div>\n </div>\n <div class=\"cps-dialog-header-action-buttons\">\n <cps-button\n *ngIf=\"maximizable\"\n class=\"cps-dialog-header-action-button\"\n [icon]=\"maximized ? 'minimize' : 'maximize'\"\n size=\"small\"\n width=\"32\"\n color=\"graphite\"\n type=\"borderless\"\n (clicked)=\"toggleMaximized()\">\n </cps-button>\n <cps-button\n *ngIf=\"config.showCloseBtn !== false\"\n class=\"cps-dialog-header-action-button\"\n icon=\"close-x-2\"\n size=\"small\"\n width=\"32\"\n color=\"graphite\"\n type=\"borderless\"\n (clicked)=\"hide()\">\n </cps-button>\n </div>\n </div>\n <div\n #content\n class=\"cps-dialog-content\"\n [ngStyle]=\"config.contentStyle\"\n [class]=\"config.contentStyleClass || ''\">\n <ng-template cpsDialogContent></ng-template>\n </div>\n </div>\n</div>\n", styles: [".cps-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.cps-dialog-mask.cps-dialog-overlay{pointer-events:auto}.cps-dialog-overlay-enter{animation:cps-dialog-overlay-enter-animation .15s forwards}.cps-dialog-overlay-leave{animation:cps-dialog-overlay-leave-animation .15s forwards}.cps-dialog-blurred-overlay-enter{animation:cps-dialog-blurred-overlay-enter-animation .15s forwards}.cps-dialog-blurred-overlay-leave{animation:cps-dialog-blurred-overlay-leave-animation .15s forwards}.cps-dialog-overlay{background-color:#0003;transition-duration:.2s}.cps-dialog-blurred-overlay{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}@keyframes cps-dialog-overlay-enter-animation{0%{background-color:transparent}to{background-color:#0003}}@keyframes cps-dialog-overlay-leave-animation{0%{background-color:#0003}to{background-color:transparent}}@keyframes cps-dialog-blurred-overlay-enter-animation{0%{background-color:transparent;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}to{background-color:#0003;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}}@keyframes cps-dialog-blurred-overlay-leave-animation{0%{background-color:#0003;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}to{background-color:transparent;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}}.cps-dialog{box-sizing:border-box;display:flex;flex-direction:column;pointer-events:auto;transform:scale(1);position:relative;border-radius:4px;box-shadow:0 1px 3px #0000004d;border:0 none;font-family:Source Sans Pro,sans-serif;font-size:1rem;font-weight:400}.cps-dialog .cps-dialog-header{overflow:hidden;border-bottom:0 none;background:#fff;color:var(--cps-color-text-dark);padding:1rem;border-top-right-radius:4px;border-top-left-radius:4px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.cps-dialog .cps-dialog-header.cps-dialog-header-left-bordered{border-left:4px solid var(--cps-color-surprise)}.cps-dialog .cps-dialog-header.cps-dialog-header-bottom-bordered{border-bottom:1px solid var(--cps-color-line-mid)}.cps-dialog .cps-dialog-header .cps-dialog-header-left{display:flex;align-items:center}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-icon{margin-right:8px;display:flex}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-title{cursor:default;font-weight:700;font-size:1.25rem}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-info-circle{margin-left:8px;cursor:default;display:flex}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-info-circle cps-info-circle{margin-top:2px}.cps-dialog .cps-dialog-content{background:#fff;color:var(--cps-color-text-dark);padding:1rem}.cps-dialog .cps-dialog-content:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cps-dialog-content{overflow-y:auto;flex-grow:1}.cps-dialog-dragging .cps-dialog-header{background-color:var(--cps-color-highlight-active)!important}.cps-dialog-draggable .cps-dialog-header{cursor:move}.cps-dialog-draggable .cps-dialog-header:hover{background-color:var(--cps-color-highlight-hover)}.cps-dialog-draggable .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-title{cursor:unset}.cps-dialog .cps-dialog-header-action-buttons{display:flex;align-items:center}.cps-dialog-top .cps-dialog,.cps-dialog-bottom .cps-dialog,.cps-dialog-left .cps-dialog,.cps-dialog-right .cps-dialog,.cps-dialog-top-left .cps-dialog,.cps-dialog-top-right .cps-dialog,.cps-dialog-bottom-left .cps-dialog,.cps-dialog-bottom-right .cps-dialog{margin:.75rem;transform:translateZ(0)}.cps-dialog-maximized{-webkit-transition:none;transition:none;transform:none;width:100vw!important;height:100vh!important;top:0!important;left:0!important;max-height:100%;height:100%}.cps-dialog-maximized .cps-dialog-content{flex-grow:1;border-radius:0!important}.cps-dialog-maximized .cps-dialog-header{border-radius:0!important}.cps-dialog-left{justify-content:flex-start}.cps-dialog-right{justify-content:flex-end}.cps-dialog-top{align-items:flex-start}.cps-dialog-top-left{justify-content:flex-start;align-items:flex-start}.cps-dialog-top-right{justify-content:flex-end;align-items:flex-start}.cps-dialog-bottom{align-items:flex-end}.cps-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.cps-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.cps-dialog .cps-dialog-resizable-handle{position:absolute;display:block;cursor:nwse-resize;width:12px;height:12px;right:0;bottom:0;overflow:hidden}.cps-dialog .cps-dialog-resizable-handle:after{content:\"\";position:absolute;display:block;width:40px;height:0;box-shadow:0 0 0 1px var(--cps-color-calm),0 7px 0 1px var(--cps-color-calm),0 14px 0 1px var(--cps-color-calm);transform:translate(-50%,-50%) rotate(-45deg) scale(.5);top:50%;left:50%}.cps-unselectable-text{-webkit-user-select:none;user-select:none}.cps-overflow-hidden{overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: SharedModule }, { kind: "directive", type: CpsDialogContentDirective, selector: "[cpsDialogContent]" }, { kind: "component", type: CpsButtonComponent, selector: "cps-button", inputs: ["color", "contentColor", "type", "label", "icon", "iconPosition", "size", "width", "height", "disabled", "loading"], outputs: ["clicked"] }, { kind: "component", type: CpsInfoCircleComponent, selector: "cps-info-circle", inputs: ["size", "tooltipText", "tooltipPosition", "tooltipContentClass", "tooltipMaxWidth", "tooltipPersistent"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }], animations: [
430
+ trigger('animation', [
431
+ transition('void => visible', [useAnimation(showAnimation)]),
432
+ transition('visible => void', [useAnimation(hideAnimation)])
433
+ ])
434
+ ], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
435
+ }
436
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsDialogComponent, decorators: [{
437
+ type: Component,
438
+ args: [{ selector: 'cps-dialog', standalone: true, imports: [
439
+ CommonModule,
440
+ SharedModule,
441
+ CpsDialogContentDirective,
442
+ CpsButtonComponent,
443
+ CpsInfoCircleComponent,
444
+ CpsIconComponent
445
+ ], animations: [
446
+ trigger('animation', [
447
+ transition('void => visible', [useAnimation(showAnimation)]),
448
+ transition('visible => void', [useAnimation(hideAnimation)])
449
+ ])
450
+ ], changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, template: "<div\n #mask\n [ngClass]=\"{\n 'cps-dialog-mask': true,\n 'cps-dialog-overlay': config.modal !== false,\n 'cps-dialog-overlay-enter':\n config.modal !== false && !config.blurredBackground,\n 'cps-dialog-blurred-overlay cps-dialog-blurred-overlay-enter':\n config.modal !== false && config.blurredBackground,\n 'cps-dialog-left': position === 'left',\n 'cps-dialog-right': position === 'right',\n 'cps-dialog-top': position === 'top',\n 'cps-dialog-bottom': position === 'bottom',\n 'cps-dialog-top-left': position === 'topleft' || position === 'top-left',\n 'cps-dialog-top-right': position === 'topright' || position === 'top-right',\n 'cps-dialog-bottom-left':\n position === 'bottomleft' || position === 'bottom-left',\n 'cps-dialog-bottom-right':\n position === 'bottomright' || position === 'bottom-right'\n }\"\n [class]=\"config.maskStyleClass || ''\">\n <div\n #container\n [ngClass]=\"{\n 'cps-dialog': true,\n 'cps-dialog-resizable': resizable,\n 'cps-dialog-draggable': draggable && !maximized,\n 'cps-dialog-dragging': dragging,\n 'cps-dialog-maximized': maximized\n }\"\n [ngStyle]=\"config.style\"\n [class]=\"config.styleClass || ''\"\n [@animation]=\"{\n value: 'visible',\n params: {\n transform: transformOptions,\n transition:\n config.transitionOptions || '150ms cubic-bezier(0, 0, 0.2, 1)'\n }\n }\"\n (@animation.start)=\"onAnimationStart($event)\"\n (@animation.done)=\"onAnimationEnd($event)\"\n role=\"dialog\"\n *ngIf=\"visible\"\n [style.width]=\"config.width\"\n [style.height]=\"config.height\"\n [style.minWidth]=\"config.minWidth\"\n [style.minHeight]=\"config.minHeight\"\n [style.maxWidth]=\"maximized ? '' : config.maxWidth\"\n [style.maxHeight]=\"maximized ? '' : config.maxHeight\">\n <div\n *ngIf=\"resizable && !maximized\"\n class=\"cps-dialog-resizable-handle\"\n style=\"z-index: 90\"\n (mousedown)=\"initResize($event)\"></div>\n <div\n #header\n *ngIf=\"config.showHeader !== false\"\n class=\"cps-dialog-header\"\n [ngClass]=\"{\n 'cps-dialog-header-left-bordered':\n config.showHeaderLeftBorder !== false,\n 'cps-dialog-header-bottom-bordered':\n config.showHeaderBottomBorder !== false\n }\"\n (mousedown)=\"initDrag($event)\">\n <div class=\"cps-dialog-header-left\">\n <div class=\"cps-dialog-header-icon\">\n <cps-icon\n *ngIf=\"config.headerIcon\"\n [icon]=\"config.headerIcon\"\n [color]=\"config.headerIconColor || 'currentColor'\">\n </cps-icon>\n </div>\n <span class=\"cps-dialog-header-title\">{{ config.headerTitle }}</span>\n <div class=\"cps-dialog-header-info-circle\">\n <cps-info-circle\n *ngIf=\"config.headerInfoTooltip\"\n size=\"small\"\n [tooltipPosition]=\"config.headerInfoTooltipPosition || 'top'\"\n [tooltipText]=\"config.headerInfoTooltip\">\n </cps-info-circle>\n </div>\n </div>\n <div class=\"cps-dialog-header-action-buttons\">\n <cps-button\n *ngIf=\"maximizable\"\n class=\"cps-dialog-header-action-button\"\n [icon]=\"maximized ? 'minimize' : 'maximize'\"\n size=\"small\"\n width=\"32\"\n color=\"graphite\"\n type=\"borderless\"\n (clicked)=\"toggleMaximized()\">\n </cps-button>\n <cps-button\n *ngIf=\"config.showCloseBtn !== false\"\n class=\"cps-dialog-header-action-button\"\n icon=\"close-x-2\"\n size=\"small\"\n width=\"32\"\n color=\"graphite\"\n type=\"borderless\"\n (clicked)=\"hide()\">\n </cps-button>\n </div>\n </div>\n <div\n #content\n class=\"cps-dialog-content\"\n [ngStyle]=\"config.contentStyle\"\n [class]=\"config.contentStyleClass || ''\">\n <ng-template cpsDialogContent></ng-template>\n </div>\n </div>\n</div>\n", styles: [".cps-dialog-mask{position:fixed;top:0;left:0;width:100%;height:100%;display:flex;justify-content:center;align-items:center;pointer-events:none}.cps-dialog-mask.cps-dialog-overlay{pointer-events:auto}.cps-dialog-overlay-enter{animation:cps-dialog-overlay-enter-animation .15s forwards}.cps-dialog-overlay-leave{animation:cps-dialog-overlay-leave-animation .15s forwards}.cps-dialog-blurred-overlay-enter{animation:cps-dialog-blurred-overlay-enter-animation .15s forwards}.cps-dialog-blurred-overlay-leave{animation:cps-dialog-blurred-overlay-leave-animation .15s forwards}.cps-dialog-overlay{background-color:#0003;transition-duration:.2s}.cps-dialog-blurred-overlay{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}@keyframes cps-dialog-overlay-enter-animation{0%{background-color:transparent}to{background-color:#0003}}@keyframes cps-dialog-overlay-leave-animation{0%{background-color:#0003}to{background-color:transparent}}@keyframes cps-dialog-blurred-overlay-enter-animation{0%{background-color:transparent;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}to{background-color:#0003;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}}@keyframes cps-dialog-blurred-overlay-leave-animation{0%{background-color:#0003;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}to{background-color:transparent;-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}}.cps-dialog{box-sizing:border-box;display:flex;flex-direction:column;pointer-events:auto;transform:scale(1);position:relative;border-radius:4px;box-shadow:0 1px 3px #0000004d;border:0 none;font-family:Source Sans Pro,sans-serif;font-size:1rem;font-weight:400}.cps-dialog .cps-dialog-header{overflow:hidden;border-bottom:0 none;background:#fff;color:var(--cps-color-text-dark);padding:1rem;border-top-right-radius:4px;border-top-left-radius:4px;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.cps-dialog .cps-dialog-header.cps-dialog-header-left-bordered{border-left:4px solid var(--cps-color-surprise)}.cps-dialog .cps-dialog-header.cps-dialog-header-bottom-bordered{border-bottom:1px solid var(--cps-color-line-mid)}.cps-dialog .cps-dialog-header .cps-dialog-header-left{display:flex;align-items:center}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-icon{margin-right:8px;display:flex}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-title{cursor:default;font-weight:700;font-size:1.25rem}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-info-circle{margin-left:8px;cursor:default;display:flex}.cps-dialog .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-info-circle cps-info-circle{margin-top:2px}.cps-dialog .cps-dialog-content{background:#fff;color:var(--cps-color-text-dark);padding:1rem}.cps-dialog .cps-dialog-content:last-of-type{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.cps-dialog-content{overflow-y:auto;flex-grow:1}.cps-dialog-dragging .cps-dialog-header{background-color:var(--cps-color-highlight-active)!important}.cps-dialog-draggable .cps-dialog-header{cursor:move}.cps-dialog-draggable .cps-dialog-header:hover{background-color:var(--cps-color-highlight-hover)}.cps-dialog-draggable .cps-dialog-header .cps-dialog-header-left .cps-dialog-header-title{cursor:unset}.cps-dialog .cps-dialog-header-action-buttons{display:flex;align-items:center}.cps-dialog-top .cps-dialog,.cps-dialog-bottom .cps-dialog,.cps-dialog-left .cps-dialog,.cps-dialog-right .cps-dialog,.cps-dialog-top-left .cps-dialog,.cps-dialog-top-right .cps-dialog,.cps-dialog-bottom-left .cps-dialog,.cps-dialog-bottom-right .cps-dialog{margin:.75rem;transform:translateZ(0)}.cps-dialog-maximized{-webkit-transition:none;transition:none;transform:none;width:100vw!important;height:100vh!important;top:0!important;left:0!important;max-height:100%;height:100%}.cps-dialog-maximized .cps-dialog-content{flex-grow:1;border-radius:0!important}.cps-dialog-maximized .cps-dialog-header{border-radius:0!important}.cps-dialog-left{justify-content:flex-start}.cps-dialog-right{justify-content:flex-end}.cps-dialog-top{align-items:flex-start}.cps-dialog-top-left{justify-content:flex-start;align-items:flex-start}.cps-dialog-top-right{justify-content:flex-end;align-items:flex-start}.cps-dialog-bottom{align-items:flex-end}.cps-dialog-bottom-left{justify-content:flex-start;align-items:flex-end}.cps-dialog-bottom-right{justify-content:flex-end;align-items:flex-end}.cps-dialog .cps-dialog-resizable-handle{position:absolute;display:block;cursor:nwse-resize;width:12px;height:12px;right:0;bottom:0;overflow:hidden}.cps-dialog .cps-dialog-resizable-handle:after{content:\"\";position:absolute;display:block;width:40px;height:0;box-shadow:0 0 0 1px var(--cps-color-calm),0 7px 0 1px var(--cps-color-calm),0 14px 0 1px var(--cps-color-calm);transform:translate(-50%,-50%) rotate(-45deg) scale(.5);top:50%;left:50%}.cps-unselectable-text{-webkit-user-select:none;user-select:none}.cps-overflow-hidden{overflow:hidden}\n"] }]
451
+ }], ctorParameters: () => [{ type: Document, decorators: [{
452
+ type: Inject,
453
+ args: [DOCUMENT]
454
+ }] }, { type: undefined, decorators: [{
455
+ type: Inject,
456
+ args: [PLATFORM_ID]
457
+ }] }, { type: i1.CpsDialogRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i2.CpsDialogConfig }, { type: i0.NgZone }, { type: i3.PrimeNGConfig }], propDecorators: { insertionPoint: [{
458
+ type: ViewChild,
459
+ args: [CpsDialogContentDirective]
460
+ }], maskViewChild: [{
461
+ type: ViewChild,
462
+ args: ['mask']
463
+ }], contentViewChild: [{
464
+ type: ViewChild,
465
+ args: ['content']
466
+ }], headerViewChild: [{
467
+ type: ViewChild,
468
+ args: ['header']
469
+ }] } });
470
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvc2VydmljZXMvY3BzLWRpYWxvZy9pbnRlcm5hbC9jb21wb25lbnRzL2Nwcy1kaWFsb2cvY3BzLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcHMtdWkta2l0L3NyYy9saWIvc2VydmljZXMvY3BzLWRpYWxvZy9pbnRlcm5hbC9jb21wb25lbnRzL2Nwcy1kaWFsb2cvY3BzLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLFNBQVMsRUFFVCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUCxZQUFZLEVBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVFLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUdULFlBQVksRUFDWixNQUFNLEVBR04sV0FBVyxFQUdYLFNBQVMsRUFDVCxpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFpQixZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRzFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzdHLE9BQU8sRUFB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Qjt3QkFDekIsa0JBQWtCO3dCQUNsQixzQkFBc0I7d0JBQ3RCLGdCQUFnQjtxQkFDakIsY0FHVzt3QkFDVixPQUFPLENBQUMsV0FBVyxFQUFFOzRCQUNuQixVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs0QkFDNUQsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7eUJBQzdELENBQUM7cUJBQ0gsbUJBQ2dCLHVCQUF1QixDQUFDLE9BQU8saUJBQ2pDLGlCQUFpQixDQUFDLElBQUk7OzBCQXVHbEMsTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLFdBQVc7Mk1BbEZyQixjQUFjO3NCQURiLFNBQVM7dUJBQUMseUJBQXlCO2dCQUdqQixhQUFhO3NCQUEvQixTQUFTO3VCQUFDLE1BQU07Z0JBQ0ssZ0JBQWdCO3NCQUFyQyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ0MsZUFBZTtzQkFBbkMsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgYW5pbWF0aW9uLFxuICBBbmltYXRpb25FdmVudCxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXIsXG4gIHVzZUFuaW1hdGlvblxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgUExBVEZPUk1fSUQsXG4gIFJlbmRlcmVyMixcbiAgVHlwZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgVmlld1JlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByaW1lTkdDb25maWcsIFNoYXJlZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICdwcmltZW5nL2RvbSc7XG5pbXBvcnQgeyBaSW5kZXhVdGlscyB9IGZyb20gJ3ByaW1lbmcvdXRpbHMnO1xuaW1wb3J0IHsgQ3BzRGlhbG9nQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY3BzLWRpYWxvZy1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNEaWFsb2dDb25maWcgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jcHMtZGlhbG9nLWNvbmZpZyc7XG5pbXBvcnQgeyBDcHNEaWFsb2dSZWYgfSBmcm9tICcuLi8uLi8uLi91dGlscy9jcHMtZGlhbG9nLXJlZic7XG5pbXBvcnQgeyBDcHNCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnRzL2Nwcy1idXR0b24vY3BzLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY3BzLWluZm8tY2lyY2xlL2Nwcy1pbmZvLWNpcmNsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcblxuY29uc3Qgc2hvd0FuaW1hdGlvbiA9IGFuaW1hdGlvbihbXG4gIHN0eWxlKHsgdHJhbnNmb3JtOiAne3t0cmFuc2Zvcm19fScsIG9wYWNpdHk6IDAgfSksXG4gIGFuaW1hdGUoJ3t7dHJhbnNpdGlvbn19Jywgc3R5bGUoeyB0cmFuc2Zvcm06ICdub25lJywgb3BhY2l0eTogMSB9KSlcbl0pO1xuXG5jb25zdCBoaWRlQW5pbWF0aW9uID0gYW5pbWF0aW9uKFtcbiAgYW5pbWF0ZSgne3t0cmFuc2l0aW9ufX0nLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3t7dHJhbnNmb3JtfX0nLCBvcGFjaXR5OiAwIH0pKVxuXSk7XG5cbnR5cGUgTnVsbGFibGU8VCA9IHZvaWQ+ID0gVCB8IG51bGwgfCB1bmRlZmluZWQ7XG50eXBlIFZvaWRMaXN0ZW5lciA9ICgpID0+IHZvaWQgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcHMtZGlhbG9nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTaGFyZWRNb2R1bGUsXG4gICAgQ3BzRGlhbG9nQ29udGVudERpcmVjdGl2ZSxcbiAgICBDcHNCdXR0b25Db21wb25lbnQsXG4gICAgQ3BzSW5mb0NpcmNsZUNvbXBvbmVudCxcbiAgICBDcHNJY29uQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jcHMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3BzLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignYW5pbWF0aW9uJywgW1xuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiB2aXNpYmxlJywgW3VzZUFuaW1hdGlvbihzaG93QW5pbWF0aW9uKV0pLFxuICAgICAgdHJhbnNpdGlvbigndmlzaWJsZSA9PiB2b2lkJywgW3VzZUFuaW1hdGlvbihoaWRlQW5pbWF0aW9uKV0pXG4gICAgXSlcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIENwc0RpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHZpc2libGUgPSB0cnVlO1xuXG4gIGNvbXBvbmVudFJlZjogTnVsbGFibGU8Q29tcG9uZW50UmVmPGFueT4+O1xuXG4gIHJlc2l6aW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIGRyYWdnaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIG1heGltaXplZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICBfc3R5bGU6IGFueSA9IHt9O1xuXG4gIG9yaWdpbmFsU3R5bGU6IGFueTtcblxuICBsYXN0UGFnZVg6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBsYXN0UGFnZVk6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBAVmlld0NoaWxkKENwc0RpYWxvZ0NvbnRlbnREaXJlY3RpdmUpXG4gIGluc2VydGlvblBvaW50OiBOdWxsYWJsZTxDcHNEaWFsb2dDb250ZW50RGlyZWN0aXZlPjtcblxuICBAVmlld0NoaWxkKCdtYXNrJykgbWFza1ZpZXdDaGlsZDogTnVsbGFibGU8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnQnKSBjb250ZW50Vmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZCgnaGVhZGVyJykgaGVhZGVyVmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICBjaGlsZENvbXBvbmVudFR5cGU6IE51bGxhYmxlPFR5cGU8YW55Pj47XG5cbiAgY29udGFpbmVyOiBOdWxsYWJsZTxIVE1MRGl2RWxlbWVudD47XG5cbiAgd3JhcHBlcjogTnVsbGFibGU8SFRNTEVsZW1lbnQ+O1xuXG4gIGRvY3VtZW50RXNjYXBlTGlzdGVuZXIhOiBWb2lkTGlzdGVuZXIgfCBudWxsO1xuXG4gIG1hc2tDbGlja0xpc3RlbmVyITogVm9pZExpc3RlbmVyIHwgbnVsbDtcblxuICB0cmFuc2Zvcm1PcHRpb25zID0gJ3NjYWxlKDAuNyknO1xuXG4gIGRvY3VtZW50UmVzaXplTGlzdGVuZXIhOiBWb2lkTGlzdGVuZXIgfCBudWxsO1xuXG4gIGRvY3VtZW50UmVzaXplRW5kTGlzdGVuZXIhOiBWb2lkTGlzdGVuZXIgfCBudWxsO1xuXG4gIGRvY3VtZW50RHJhZ0xpc3RlbmVyITogVm9pZExpc3RlbmVyIHwgbnVsbDtcblxuICBkb2N1bWVudERyYWdFbmRMaXN0ZW5lciE6IFZvaWRMaXN0ZW5lciB8IG51bGw7XG5cbiAgX29wZW5TdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIF9kcmFnU3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgX2RyYWdFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgX3Jlc2l6ZVN0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG4gIF9yZXNpemVFbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcbiAgX21heGltaXplZFN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBnZXQgbWluWCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5taW5YID8gdGhpcy5jb25maWcubWluWCA6IDA7XG4gIH1cblxuICBnZXQgbWluWSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5taW5ZID8gdGhpcy5jb25maWcubWluWSA6IDA7XG4gIH1cblxuICBnZXQga2VlcEluVmlld3BvcnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmtlZXBJblZpZXdwb3J0IHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0IG1heGltaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5tYXhpbWl6YWJsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBkcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRyYWdnYWJsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCByZXNpemFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLnJlc2l6YWJsZSB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBzdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9zdHlsZTtcbiAgfVxuXG4gIHNldCBzdHlsZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zdHlsZSA9IHsgLi4udmFsdWUgfTtcbiAgICAgIHRoaXMub3JpZ2luYWxTdHlsZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBwb3NpdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wb3NpdGlvbiB8fCAnJztcbiAgfVxuXG4gIGdldCBwYXJlbnQoKSB7XG4gICAgY29uc3QgZG9tRWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjcHMtZGlhbG9nJylcbiAgICApO1xuICAgIHJldHVybiBkb21FbGVtZW50cy5sZW5ndGggPiAxID8gZG9tRWxlbWVudHMucG9wKCkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSxcbiAgICBwcml2YXRlIF9kaWFsb2dSZWY6IENwc0RpYWxvZ1JlZixcbiAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHVibGljIGNvbmZpZzogQ3BzRGlhbG9nQ29uZmlnLFxuICAgIHB1YmxpYyB6b25lOiBOZ1pvbmUsXG4gICAgcHVibGljIHByaW1lTkdDb25maWc6IFByaW1lTkdDb25maWdcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgIHRoaXMubG9hZENoaWxkQ29tcG9uZW50KHRoaXMuY2hpbGRDb21wb25lbnRUeXBlISk7XG5cbiAgICBpZiAodGhpcy5jb25maWcubWF4aW1pemVkICYmIHRoaXMubWF4aW1pemFibGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlTWF4aW1pemVkKCk7XG4gICAgfVxuICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGxvYWRDaGlsZENvbXBvbmVudChjb21wb25lbnRUeXBlOiBUeXBlPGFueT4pIHtcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy5pbnNlcnRpb25Qb2ludD8udmlld0NvbnRhaW5lclJlZjtcbiAgICB2aWV3Q29udGFpbmVyUmVmPy5jbGVhcigpO1xuXG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmPy5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZilcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZTtcbiAgfVxuXG4gIG1vdmVPblRvcCgpIHtcbiAgICBpZiAodGhpcy5jb25maWcuYXV0b1pJbmRleCAhPT0gZmFsc2UpIHtcbiAgICAgIFpJbmRleFV0aWxzLnNldChcbiAgICAgICAgJ21vZGFsJyxcbiAgICAgICAgdGhpcy5jb250YWluZXIsXG4gICAgICAgICh0aGlzLmNvbmZpZy5iYXNlWkluZGV4IHx8IDApICsgdGhpcy5wcmltZU5HQ29uZmlnLnpJbmRleC5tb2RhbFxuICAgICAgKTtcbiAgICAgICh0aGlzLndyYXBwZXIgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnpJbmRleCA9IFN0cmluZyhcbiAgICAgICAgcGFyc2VJbnQoKHRoaXMuY29udGFpbmVyIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS56SW5kZXgsIDEwKSAtIDFcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgb25BbmltYXRpb25TdGFydChldmVudDogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnRvU3RhdGUpIHtcbiAgICAgIGNhc2UgJ3Zpc2libGUnOlxuICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGV2ZW50LmVsZW1lbnQ7XG4gICAgICAgIHRoaXMud3JhcHBlciA9ICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkucGFyZW50RWxlbWVudDtcbiAgICAgICAgdGhpcy5tb3ZlT25Ub3AoKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgdGhpcy51bmJpbmRHbG9iYWxMaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJpbmRHbG9iYWxMaXN0ZW5lcnMoKTtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcubW9kYWwgIT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5lbmFibGVNb2RhbGl0eSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3ZvaWQnOlxuICAgICAgICBpZiAodGhpcy53cmFwcGVyICYmIHRoaXMuY29uZmlnLm1vZGFsICE9PSBmYWxzZSkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5ibHVycmVkQmFja2dyb3VuZCkge1xuICAgICAgICAgICAgRG9tSGFuZGxlci5hZGRDbGFzcyhcbiAgICAgICAgICAgICAgdGhpcy53cmFwcGVyLFxuICAgICAgICAgICAgICAnY3BzLWRpYWxvZy1ibHVycmVkLW92ZXJsYXktbGVhdmUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBEb21IYW5kbGVyLmFkZENsYXNzKHRoaXMud3JhcHBlciwgJ2Nwcy1kaWFsb2ctb3ZlcmxheS1sZWF2ZScpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIGlmIChldmVudC50b1N0YXRlID09PSAndm9pZCcpIHtcbiAgICAgIHRoaXMub25Db250YWluZXJEZXN0cm95KCk7XG4gICAgICB0aGlzLl9kaWFsb2dSZWYuZGVzdHJveSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcGVuU3RhdGVDaGFuZ2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbnRhaW5lckRlc3Ryb3koKSB7XG4gICAgdGhpcy51bmJpbmRHbG9iYWxMaXN0ZW5lcnMoKTtcblxuICAgIGlmICh0aGlzLmNvbnRhaW5lciAmJiB0aGlzLmNvbmZpZy5hdXRvWkluZGV4ICE9PSBmYWxzZSkge1xuICAgICAgWkluZGV4VXRpbHMuY2xlYXIodGhpcy5jb250YWluZXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5tb2RhbCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZGlzYWJsZU1vZGFsaXR5KCk7XG4gICAgfVxuICAgIHRoaXMuY29udGFpbmVyID0gbnVsbDtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZz8uZGlzYWJsZUNsb3NlIHx8IHRoaXMuX2RpYWxvZ1JlZj8uZGlzYWJsZUNsb3NlKSByZXR1cm47XG5cbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnPy5kaXNhYmxlQ2xvc2UpIHJldHVybjtcblxuICAgIGlmICh0aGlzLl9kaWFsb2dSZWYpIHtcbiAgICAgIGlmICghdGhpcy5fZGlhbG9nUmVmLmRpc2FibGVDbG9zZSkgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZW5hYmxlTW9kYWxpdHkoKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5kaXNhYmxlQ2xvc2UpIHtcbiAgICAgIHRoaXMubWFza0NsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgdGhpcy53cmFwcGVyLFxuICAgICAgICAnbW91c2Vkb3duJyxcbiAgICAgICAgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy53cmFwcGVyICYmIHRoaXMud3JhcHBlci5pc1NhbWVOb2RlKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcubW9kYWwgIT09IGZhbHNlKSB7XG4gICAgICBEb21IYW5kbGVyLmFkZENsYXNzKHRoaXMuZG9jdW1lbnQuYm9keSwgJ2Nwcy1vdmVyZmxvdy1oaWRkZW4nKTtcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTW9kYWxpdHkoKSB7XG4gICAgaWYgKHRoaXMud3JhcHBlcikge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5kaXNhYmxlQ2xvc2UpIHtcbiAgICAgICAgdGhpcy51bmJpbmRNYXNrQ2xpY2tMaXN0ZW5lcigpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25maWcubW9kYWwgIT09IGZhbHNlKSB7XG4gICAgICAgIERvbUhhbmRsZXIucmVtb3ZlQ2xhc3ModGhpcy5kb2N1bWVudC5ib2R5LCAnY3BzLW92ZXJmbG93LWhpZGRlbicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoISh0aGlzLl9jZFJlZiBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGNvbnN0IGZvY3VzYWJsZSA9IERvbUhhbmRsZXIuZ2V0Rm9jdXNhYmxlRWxlbWVudHMoXG4gICAgICB0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudFxuICAgICk7XG4gICAgaWYgKGZvY3VzYWJsZSAmJiBmb2N1c2FibGUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiBmb2N1c2FibGVbMF0uZm9jdXMoKSwgNSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVNYXhpbWl6ZWQodmFsdWU/OiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLm1heGltaXphYmxlKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHRoaXMubWF4aW1pemVkIHx8ICghdmFsdWUgJiYgIXRoaXMubWF4aW1pemVkKSkgcmV0dXJuO1xuICAgICAgdGhpcy5tYXhpbWl6ZWQgPSB2YWx1ZTtcbiAgICB9IGVsc2UgdGhpcy5tYXhpbWl6ZWQgPSAhdGhpcy5tYXhpbWl6ZWQ7XG5cbiAgICBpZiAodGhpcy5tYXhpbWl6ZWQpIHtcbiAgICAgIERvbUhhbmRsZXIuYWRkQ2xhc3ModGhpcy5kb2N1bWVudC5ib2R5LCAnY3BzLW92ZXJmbG93LWhpZGRlbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBEb21IYW5kbGVyLnJlbW92ZUNsYXNzKHRoaXMuZG9jdW1lbnQuYm9keSwgJ2Nwcy1vdmVyZmxvdy1oaWRkZW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tYXhpbWl6ZWRTdGF0ZUNoYW5nZWQuZW1pdCh0aGlzLm1heGltaXplZCk7XG4gIH1cblxuICBpbml0UmVzaXplKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMucmVzaXphYmxlKSB7XG4gICAgICBpZiAoIXRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lcikge1xuICAgICAgICB0aGlzLmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVycygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlc2l6aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubGFzdFBhZ2VYID0gZXZlbnQucGFnZVg7XG4gICAgICB0aGlzLmxhc3RQYWdlWSA9IGV2ZW50LnBhZ2VZO1xuICAgICAgRG9tSGFuZGxlci5hZGRDbGFzcyh0aGlzLmRvY3VtZW50LmJvZHksICdjcHMtdW5zZWxlY3RhYmxlLXRleHQnKTtcbiAgICAgIHRoaXMuX3Jlc2l6ZVN0YXJ0ZWQuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgb25SZXNpemUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5yZXNpemluZykge1xuICAgICAgY29uc3QgZGVsdGFYID0gZXZlbnQucGFnZVggLSAodGhpcy5sYXN0UGFnZVggYXMgbnVtYmVyKTtcbiAgICAgIGNvbnN0IGRlbHRhWSA9IGV2ZW50LnBhZ2VZIC0gKHRoaXMubGFzdFBhZ2VZIGFzIG51bWJlcik7XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IERvbUhhbmRsZXIuZ2V0T3V0ZXJXaWR0aCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSBEb21IYW5kbGVyLmdldE91dGVySGVpZ2h0KHRoaXMuY29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSBEb21IYW5kbGVyLmdldE91dGVySGVpZ2h0KFxuICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5jb250ZW50Vmlld0NoaWxkKS5uYXRpdmVFbGVtZW50XG4gICAgICApO1xuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gRG9tSGFuZGxlci5nZXRPdXRlcldpZHRoKFxuICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5jb250ZW50Vmlld0NoaWxkKS5uYXRpdmVFbGVtZW50XG4gICAgICApO1xuICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gdGhpcy5oZWFkZXJWaWV3Q2hpbGRcbiAgICAgICAgPyBEb21IYW5kbGVyLmdldE91dGVySGVpZ2h0KFxuICAgICAgICAgICAgKDxFbGVtZW50UmVmPnRoaXMuaGVhZGVyVmlld0NoaWxkKS5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgKVxuICAgICAgICA6IDA7XG4gICAgICBjb25zdCBoZWFkZXJXaWR0aCA9IHRoaXMuaGVhZGVyVmlld0NoaWxkXG4gICAgICAgID8gRG9tSGFuZGxlci5nZXRPdXRlcldpZHRoKFxuICAgICAgICAgICAgKDxFbGVtZW50UmVmPnRoaXMuaGVhZGVyVmlld0NoaWxkKS5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgKVxuICAgICAgICA6IDA7XG4gICAgICBsZXQgbmV3V2lkdGggPSBjb250YWluZXJXaWR0aCArIGRlbHRhWDtcbiAgICAgIGxldCBuZXdIZWlnaHQgPSBjb250YWluZXJIZWlnaHQgKyBkZWx0YVk7XG4gICAgICBjb25zdCBtaW5XaWR0aCA9ICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUubWluV2lkdGg7XG4gICAgICBjb25zdCBtaW5IZWlnaHQgPSAodGhpcy5jb250YWluZXIgYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLm1pbkhlaWdodDtcbiAgICAgIGNvbnN0IG9mZnNldCA9ICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCB2aWV3cG9ydCA9IERvbUhhbmRsZXIuZ2V0Vmlld3BvcnQoKTtcbiAgICAgIGNvbnN0IGhhc0JlZW5EcmFnZ2VkID1cbiAgICAgICAgIXBhcnNlSW50KCh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUudG9wKSB8fFxuICAgICAgICAhcGFyc2VJbnQoKHRoaXMuY29udGFpbmVyIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS5sZWZ0KTtcblxuICAgICAgaWYgKGhhc0JlZW5EcmFnZ2VkKSB7XG4gICAgICAgIG5ld1dpZHRoICs9IGRlbHRhWDtcbiAgICAgICAgbmV3SGVpZ2h0ICs9IGRlbHRhWTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAoIW1pbldpZHRoIHx8IG5ld1dpZHRoID4gcGFyc2VJbnQobWluV2lkdGgpKSAmJlxuICAgICAgICBvZmZzZXQubGVmdCArIG5ld1dpZHRoIDwgdmlld3BvcnQud2lkdGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBuZXdDb250ZW50V2lkdGggPSBjb250ZW50V2lkdGggKyBuZXdXaWR0aCAtIGNvbnRhaW5lcldpZHRoO1xuICAgICAgICBjb25zdCBuZXdIZWFkZXJXaWR0aCA9IGhlYWRlcldpZHRoICsgbmV3V2lkdGggLSBjb250YWluZXJXaWR0aDtcbiAgICAgICAgdGhpcy5fc3R5bGUud2lkdGggPVxuICAgICAgICAgIE1hdGgubWF4KG5ld1dpZHRoLCBuZXdDb250ZW50V2lkdGgsIG5ld0hlYWRlcldpZHRoKSArICdweCc7XG4gICAgICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUud2lkdGggPSB0aGlzLl9zdHlsZS53aWR0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAoIW1pbkhlaWdodCB8fCBuZXdIZWlnaHQgPiBwYXJzZUludChtaW5IZWlnaHQpKSAmJlxuICAgICAgICBvZmZzZXQudG9wICsgbmV3SGVpZ2h0IDwgdmlld3BvcnQuaGVpZ2h0XG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGVudEhlaWdodCA9IGNvbnRlbnRIZWlnaHQgKyBuZXdIZWlnaHQgLSBjb250YWluZXJIZWlnaHQ7XG4gICAgICAgIHRoaXMuX3N0eWxlLmhlaWdodCA9XG4gICAgICAgICAgTWF0aC5tYXgobmV3SGVpZ2h0LCBoZWFkZXJIZWlnaHQgKyBuZXdDb250ZW50SGVpZ2h0KSArICdweCc7XG4gICAgICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUuaGVpZ2h0ID0gdGhpcy5fc3R5bGUuaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxhc3RQYWdlWCA9IGV2ZW50LnBhZ2VYO1xuICAgICAgdGhpcy5sYXN0UGFnZVkgPSBldmVudC5wYWdlWTtcbiAgICB9XG4gIH1cblxuICByZXNpemVFbmQoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5yZXNpemluZykge1xuICAgICAgdGhpcy5yZXNpemluZyA9IGZhbHNlO1xuICAgICAgRG9tSGFuZGxlci5yZW1vdmVDbGFzcyh0aGlzLmRvY3VtZW50LmJvZHksICdjcHMtdW5zZWxlY3RhYmxlLXRleHQnKTtcbiAgICAgIHRoaXMuX3Jlc2l6ZUVuZGVkLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGluaXREcmFnKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZnVuY3Rpb24gaXNIZWFkZXJBY3Rpb25CdXR0b24oZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIGVsZW1lbnQgJiZcbiAgICAgICAgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjcHMtZGlhbG9nLWhlYWRlci1hY3Rpb24tYnV0dG9uJykgJiZcbiAgICAgICAgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdjcHMtZGlhbG9nLWhlYWRlci1pbmZvLWNpcmNsZScpXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICEhZWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMubWF4aW1pemVkKSByZXR1cm47XG5cbiAgICBpZiAoaXNIZWFkZXJBY3Rpb25CdXR0b24oPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkpIHJldHVybjtcblxuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgIHRoaXMubGFzdFBhZ2VYID0gZXZlbnQucGFnZVg7XG4gICAgdGhpcy5sYXN0UGFnZVkgPSBldmVudC5wYWdlWTtcblxuICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUubWFyZ2luID0gJzAnO1xuICAgIERvbUhhbmRsZXIuYWRkQ2xhc3ModGhpcy5kb2N1bWVudC5ib2R5LCAnY3BzLXVuc2VsZWN0YWJsZS10ZXh0Jyk7XG4gICAgdGhpcy5fZHJhZ1N0YXJ0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkRyYWcoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kcmFnZ2luZykge1xuICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBEb21IYW5kbGVyLmdldE91dGVyV2lkdGgodGhpcy5jb250YWluZXIpO1xuICAgICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gRG9tSGFuZGxlci5nZXRPdXRlckhlaWdodCh0aGlzLmNvbnRhaW5lcik7XG4gICAgICBjb25zdCBkZWx0YVggPSBldmVudC5wYWdlWCAtICh0aGlzLmxhc3RQYWdlWCBhcyBudW1iZXIpO1xuICAgICAgY29uc3QgZGVsdGFZID0gZXZlbnQucGFnZVkgLSAodGhpcy5sYXN0UGFnZVkgYXMgbnVtYmVyKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9ICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBsZWZ0UG9zID0gb2Zmc2V0LmxlZnQgKyBkZWx0YVg7XG4gICAgICBjb25zdCB0b3BQb3MgPSBvZmZzZXQudG9wICsgZGVsdGFZO1xuICAgICAgY29uc3Qgdmlld3BvcnQgPSBEb21IYW5kbGVyLmdldFZpZXdwb3J0KCk7XG5cbiAgICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuXG4gICAgICBpZiAodGhpcy5rZWVwSW5WaWV3cG9ydCkge1xuICAgICAgICBpZiAobGVmdFBvcyA+PSB0aGlzLm1pblggJiYgbGVmdFBvcyArIGNvbnRhaW5lcldpZHRoIDwgdmlld3BvcnQud2lkdGgpIHtcbiAgICAgICAgICB0aGlzLl9zdHlsZS5sZWZ0ID0gbGVmdFBvcyArICdweCc7XG4gICAgICAgICAgdGhpcy5sYXN0UGFnZVggPSBldmVudC5wYWdlWDtcbiAgICAgICAgICAodGhpcy5jb250YWluZXIgYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLmxlZnQgPSBsZWZ0UG9zICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b3BQb3MgPj0gdGhpcy5taW5ZICYmIHRvcFBvcyArIGNvbnRhaW5lckhlaWdodCA8IHZpZXdwb3J0LmhlaWdodCkge1xuICAgICAgICAgIHRoaXMuX3N0eWxlLnRvcCA9IHRvcFBvcyArICdweCc7XG4gICAgICAgICAgdGhpcy5sYXN0UGFnZVkgPSBldmVudC5wYWdlWTtcbiAgICAgICAgICAodGhpcy5jb250YWluZXIgYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLnRvcCA9IHRvcFBvcyArICdweCc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFzdFBhZ2VYID0gZXZlbnQucGFnZVg7XG4gICAgICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUubGVmdCA9IGxlZnRQb3MgKyAncHgnO1xuICAgICAgICB0aGlzLmxhc3RQYWdlWSA9IGV2ZW50LnBhZ2VZO1xuICAgICAgICAodGhpcy5jb250YWluZXIgYXMgSFRNTERpdkVsZW1lbnQpLnN0eWxlLnRvcCA9IHRvcFBvcyArICdweCc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZW5kRHJhZyhldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgICBEb21IYW5kbGVyLnJlbW92ZUNsYXNzKHRoaXMuZG9jdW1lbnQuYm9keSwgJ2Nwcy11bnNlbGVjdGFibGUtdGV4dCcpO1xuICAgICAgdGhpcy5fZHJhZ0VuZGVkLmVtaXQoZXZlbnQpO1xuICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0UG9zaXRpb24oKSB7XG4gICAgKHRoaXMuY29udGFpbmVyIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUubGVmdCA9ICcnO1xuICAgICh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUudG9wID0gJyc7XG4gICAgKHRoaXMuY29udGFpbmVyIGFzIEhUTUxEaXZFbGVtZW50KS5zdHlsZS5tYXJnaW4gPSAnJztcbiAgfVxuXG4gIGJpbmREb2N1bWVudERyYWdMaXN0ZW5lcigpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy5kb2N1bWVudERyYWdMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgIHRoaXMuZG9jdW1lbnQsXG4gICAgICAgICAgJ21vdXNlbW92ZScsXG4gICAgICAgICAgdGhpcy5vbkRyYWcuYmluZCh0aGlzKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYmluZERvY3VtZW50RHJhZ0VuZExpc3RlbmVyKCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50RHJhZ0VuZExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgdGhpcy5kb2N1bWVudCxcbiAgICAgICAgICAnbW91c2V1cCcsXG4gICAgICAgICAgdGhpcy5lbmREcmFnLmJpbmQodGhpcylcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHVuYmluZERvY3VtZW50RHJhZ0VuZExpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmRvY3VtZW50RHJhZ0VuZExpc3RlbmVyKSB7XG4gICAgICB0aGlzLmRvY3VtZW50RHJhZ0VuZExpc3RlbmVyKCk7XG4gICAgICB0aGlzLmRvY3VtZW50RHJhZ0xpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB1bmJpbmREb2N1bWVudERyYWdMaXN0ZW5lcigpIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudERyYWdMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kb2N1bWVudERyYWdMaXN0ZW5lcigpO1xuICAgICAgdGhpcy5kb2N1bWVudERyYWdMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXJzKCkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICdtb3VzZW1vdmUnLFxuICAgICAgICAgIHRoaXMub25SZXNpemUuYmluZCh0aGlzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmRvY3VtZW50UmVzaXplRW5kTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgICB0aGlzLmRvY3VtZW50LFxuICAgICAgICAgICdtb3VzZXVwJyxcbiAgICAgICAgICB0aGlzLnJlc2l6ZUVuZC5iaW5kKHRoaXMpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB1bmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyICYmIHRoaXMuZG9jdW1lbnRSZXNpemVFbmRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICB0aGlzLmRvY3VtZW50UmVzaXplRW5kTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lciA9IG51bGw7XG4gICAgICB0aGlzLmRvY3VtZW50UmVzaXplRW5kTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGJpbmRHbG9iYWxMaXN0ZW5lcnMoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb25maWcuY2xvc2VPbkVzY2FwZSAhPT0gZmFsc2UgJiZcbiAgICAgIHRoaXMuY29uZmlnLmRpc2FibGVDbG9zZSAhPT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHRoaXMuYmluZERvY3VtZW50RXNjYXBlTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXNpemFibGUpIHtcbiAgICAgIHRoaXMuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhZ2dhYmxlKSB7XG4gICAgICB0aGlzLmJpbmREb2N1bWVudERyYWdMaXN0ZW5lcigpO1xuICAgICAgdGhpcy5iaW5kRG9jdW1lbnREcmFnRW5kTGlzdGVuZXIoKTtcbiAgICB9XG4gIH1cblxuICB1bmJpbmRHbG9iYWxMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy51bmJpbmREb2N1bWVudEVzY2FwZUxpc3RlbmVyKCk7XG4gICAgdGhpcy51bmJpbmREb2N1bWVudFJlc2l6ZUxpc3RlbmVycygpO1xuICAgIHRoaXMudW5iaW5kRG9jdW1lbnREcmFnTGlzdGVuZXIoKTtcbiAgICB0aGlzLnVuYmluZERvY3VtZW50RHJhZ0VuZExpc3RlbmVyKCk7XG4gIH1cblxuICBiaW5kRG9jdW1lbnRFc2NhcGVMaXN0ZW5lcigpIHtcbiAgICBjb25zdCBkb2N1bWVudFRhcmdldDogYW55ID0gdGhpcy5tYXNrVmlld0NoaWxkXG4gICAgICA/IHRoaXMubWFza1ZpZXdDaGlsZC5uYXRpdmVFbGVtZW50Lm93bmVyRG9jdW1lbnRcbiAgICAgIDogJ2RvY3VtZW50JztcblxuICAgIHRoaXMuZG9jdW1lbnRFc2NhcGVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgZG9jdW1lbnRUYXJnZXQsXG4gICAgICAna2V5ZG93bicsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LndoaWNoID09PSAyNykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcnNlSW50KCh0aGlzLmNvbnRhaW5lciBhcyBIVE1MRGl2RWxlbWVudCkuc3R5bGUuekluZGV4KSA9PT1cbiAgICAgICAgICAgIFpJbmRleFV0aWxzLmdldEN1cnJlbnQoKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHVuYmluZERvY3VtZW50RXNjYXBlTGlzdGVuZXIoKSB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRFc2NhcGVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5kb2N1bWVudEVzY2FwZUxpc3RlbmVyKCk7XG4gICAgICB0aGlzLmRvY3VtZW50RXNjYXBlTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHVuYmluZE1hc2tDbGlja0xpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLm1hc2tDbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLm1hc2tDbGlja0xpc3RlbmVyKCk7XG4gICAgICB0aGlzLm1hc2tDbGlja0xpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uQ29udGFpbmVyRGVzdHJveSgpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI21hc2tcbiAgW25nQ2xhc3NdPVwie1xuICAgICdjcHMtZGlhbG9nLW1hc2snOiB0cnVlLFxuICAgICdjcHMtZGlhbG9nLW92ZXJsYXknOiBjb25maWcubW9kYWwgIT09IGZhbHNlLFxuICAgICdjcHMtZGlhbG9nLW92ZXJsYXktZW50ZXInOlxuICAgICAgY29uZmlnLm1vZGFsICE9PSBmYWxzZSAmJiAhY29uZmlnLmJsdXJyZWRCYWNrZ3JvdW5kLFxuICAgICdjcHMtZGlhbG9nLWJsdXJyZWQtb3ZlcmxheSBjcHMtZGlhbG9nLWJsdXJyZWQtb3ZlcmxheS1lbnRlcic6XG4gICAgICBjb25maWcubW9kYWwgIT09IGZhbHNlICYmIGNvbmZpZy5ibHVycmVkQmFja2dyb3VuZCxcbiAgICAnY3BzLWRpYWxvZy1sZWZ0JzogcG9zaXRpb24gPT09ICdsZWZ0JyxcbiAgICAnY3BzLWRpYWxvZy1yaWdodCc6IHBvc2l0aW9uID09PSAncmlnaHQnLFxuICAgICdjcHMtZGlhbG9nLXRvcCc6IHBvc2l0aW9uID09PSAndG9wJyxcbiAgICAnY3BzLWRpYWxvZy1ib3R0b20nOiBwb3NpdGlvbiA9PT0gJ2JvdHRvbScsXG4gICAgJ2Nwcy1kaWFsb2ctdG9wLWxlZnQnOiBwb3NpdGlvbiA9PT0gJ3RvcGxlZnQnIHx8IHBvc2l0aW9uID09PSAndG9wLWxlZnQnLFxuICAgICdjcHMtZGlhbG9nLXRvcC1yaWdodCc6IHBvc2l0aW9uID09PSAndG9wcmlnaHQnIHx8IHBvc2l0aW9uID09PSAndG9wLXJpZ2h0JyxcbiAgICAnY3BzLWRpYWxvZy1ib3R0b20tbGVmdCc6XG4gICAgICBwb3NpdGlvbiA9PT0gJ2JvdHRvbWxlZnQnIHx8IHBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnLFxuICAgICdjcHMtZGlhbG9nLWJvdHRvbS1yaWdodCc6XG4gICAgICBwb3NpdGlvbiA9PT0gJ2JvdHRvbXJpZ2h0JyB8fCBwb3NpdGlvbiA9PT0gJ2JvdHRvbS1yaWdodCdcbiAgfVwiXG4gIFtjbGFzc109XCJjb25maWcubWFza1N0eWxlQ2xhc3MgfHwgJydcIj5cbiAgPGRpdlxuICAgICNjb250YWluZXJcbiAgICBbbmdDbGFzc109XCJ7XG4gICAgICAnY3BzLWRpYWxvZyc6IHRydWUsXG4gICAgICAnY3BzLWRpYWxvZy1yZXNpemFibGUnOiByZXNpemFibGUsXG4gICAgICAnY3BzLWRpYWxvZy1kcmFnZ2FibGUnOiBkcmFnZ2FibGUgJiYgIW1heGltaXplZCxcbiAgICAgICdjcHMtZGlhbG9nLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgICAnY3BzLWRpYWxvZy1tYXhpbWl6ZWQnOiBtYXhpbWl6ZWRcbiAgICB9XCJcbiAgICBbbmdTdHlsZV09XCJjb25maWcuc3R5bGVcIlxuICAgIFtjbGFzc109XCJjb25maWcuc3R5bGVDbGFzcyB8fCAnJ1wiXG4gICAgW0BhbmltYXRpb25dPVwie1xuICAgICAgdmFsdWU6ICd2aXNpYmxlJyxcbiAgICAgIHBhcmFtczoge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybU9wdGlvbnMsXG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgY29uZmlnLnRyYW5zaXRpb25PcHRpb25zIHx8ICcxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSdcbiAgICAgIH1cbiAgICB9XCJcbiAgICAoQGFuaW1hdGlvbi5zdGFydCk9XCJvbkFuaW1hdGlvblN0YXJ0KCRldmVudClcIlxuICAgIChAYW5pbWF0aW9uLmRvbmUpPVwib25BbmltYXRpb25FbmQoJGV2ZW50KVwiXG4gICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgKm5nSWY9XCJ2aXNpYmxlXCJcbiAgICBbc3R5bGUud2lkdGhdPVwiY29uZmlnLndpZHRoXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNvbmZpZy5oZWlnaHRcIlxuICAgIFtzdHlsZS5taW5XaWR0aF09XCJjb25maWcubWluV2lkdGhcIlxuICAgIFtzdHlsZS5taW5IZWlnaHRdPVwiY29uZmlnLm1pbkhlaWdodFwiXG4gICAgW3N0eWxlLm1heFdpZHRoXT1cIm1heGltaXplZCA/ICcnIDogY29uZmlnLm1heFdpZHRoXCJcbiAgICBbc3R5bGUubWF4SGVpZ2h0XT1cIm1heGltaXplZCA/ICcnIDogY29uZmlnLm1heEhlaWdodFwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicmVzaXphYmxlICYmICFtYXhpbWl6ZWRcIlxuICAgICAgY2xhc3M9XCJjcHMtZGlhbG9nLXJlc2l6YWJsZS1oYW5kbGVcIlxuICAgICAgc3R5bGU9XCJ6LWluZGV4OiA5MFwiXG4gICAgICAobW91c2Vkb3duKT1cImluaXRSZXNpemUoJGV2ZW50KVwiPjwvZGl2PlxuICAgIDxkaXZcbiAgICAgICNoZWFkZXJcbiAgICAgICpuZ0lmPVwiY29uZmlnLnNob3dIZWFkZXIgIT09IGZhbHNlXCJcbiAgICAgIGNsYXNzPVwiY3BzLWRpYWxvZy1oZWFkZXJcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnY3BzLWRpYWxvZy1oZWFkZXItbGVmdC1ib3JkZXJlZCc6XG4gICAgICAgICAgY29uZmlnLnNob3dIZWFkZXJMZWZ0Qm9yZGVyICE9PSBmYWxzZSxcbiAgICAgICAgJ2Nwcy1kaWFsb2ctaGVhZGVyLWJvdHRvbS1ib3JkZXJlZCc6XG4gICAgICAgICAgY29uZmlnLnNob3dIZWFkZXJCb3R0b21Cb3JkZXIgIT09IGZhbHNlXG4gICAgICB9XCJcbiAgICAgIChtb3VzZWRvd24pPVwiaW5pdERyYWcoJGV2ZW50KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy1kaWFsb2ctaGVhZGVyLWxlZnRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNwcy1kaWFsb2ctaGVhZGVyLWljb25cIj5cbiAgICAgICAgICA8Y3BzLWljb25cbiAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmhlYWRlckljb25cIlxuICAgICAgICAgICAgW2ljb25dPVwiY29uZmlnLmhlYWRlckljb25cIlxuICAgICAgICAgICAgW2NvbG9yXT1cImNvbmZpZy5oZWFkZXJJY29uQ29sb3IgfHwgJ2N1cnJlbnRDb2xvcidcIj5cbiAgICAgICAgICA8L2Nwcy1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtZGlhbG9nLWhlYWRlci10aXRsZVwiPnt7IGNvbmZpZy5oZWFkZXJUaXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNwcy1kaWFsb2ctaGVhZGVyLWluZm8tY2lyY2xlXCI+XG4gICAgICAgICAgPGNwcy1pbmZvLWNpcmNsZVxuICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuaGVhZGVySW5mb1Rvb2x0aXBcIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiY29uZmlnLmhlYWRlckluZm9Ub29sdGlwUG9zaXRpb24gfHwgJ3RvcCdcIlxuICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cImNvbmZpZy5oZWFkZXJJbmZvVG9vbHRpcFwiPlxuICAgICAgICAgIDwvY3BzLWluZm8tY2lyY2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy1kaWFsb2ctaGVhZGVyLWFjdGlvbi1idXR0b25zXCI+XG4gICAgICAgIDxjcHMtYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJtYXhpbWl6YWJsZVwiXG4gICAgICAgICAgY2xhc3M9XCJjcHMtZGlhbG9nLWhlYWRlci1hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICBbaWNvbl09XCJtYXhpbWl6ZWQgPyAnbWluaW1pemUnIDogJ21heGltaXplJ1wiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICB3aWR0aD1cIjMyXCJcbiAgICAgICAgICBjb2xvcj1cImdyYXBoaXRlXCJcbiAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwidG9nZ2xlTWF4aW1pemVkKClcIj5cbiAgICAgICAgPC9jcHMtYnV0dG9uPlxuICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwiY29uZmlnLnNob3dDbG9zZUJ0biAhPT0gZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLWRpYWxvZy1oZWFkZXItYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgaWNvbj1cImNsb3NlLXgtMlwiXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICB3aWR0aD1cIjMyXCJcbiAgICAgICAgICBjb2xvcj1cImdyYXBoaXRlXCJcbiAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiaGlkZSgpXCI+XG4gICAgICAgIDwvY3BzLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgICNjb250ZW50XG4gICAgICBjbGFzcz1cImNwcy1kaWFsb2ctY29udGVudFwiXG4gICAgICBbbmdTdHlsZV09XCJjb25maWcuY29udGVudFN0eWxlXCJcbiAgICAgIFtjbGFzc109XCJjb25maWcuY29udGVudFN0eWxlQ2xhc3MgfHwgJydcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBjcHNEaWFsb2dDb250ZW50PjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=