aril 2.0.1-dev.4 → 2.0.1-dev.5

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 (189) hide show
  1. package/boot/config/apps/src/interfaces.d.ts +7 -1
  2. package/boot/config/apps/src/route-close.service.d.ts +8 -3
  3. package/boot/config/apps/src/route-permissions.d.ts +2 -2
  4. package/esm2022/boot/config/api/src/interfaces.mjs +3 -2
  5. package/esm2022/boot/config/apps/src/apps.service.mjs +2 -2
  6. package/esm2022/boot/config/apps/src/custom-route-reuse-strategy.class.mjs +4 -4
  7. package/esm2022/boot/config/apps/src/interfaces.mjs +2 -1
  8. package/esm2022/boot/config/apps/src/route-close.service.mjs +11 -4
  9. package/esm2022/boot/config/apps/src/route-permissions.mjs +24 -6
  10. package/esm2022/boot/config/plugins/src/plugins.service.mjs +7 -5
  11. package/esm2022/boot/host/src/bootstrap.mjs +5 -3
  12. package/esm2022/boot/mfe/src/bootstrap.mjs +11 -3
  13. package/esm2022/http/index.mjs +1 -2
  14. package/esm2022/http/src/serviceBase.mjs +4 -4
  15. package/esm2022/http/src/serviceStateMethods.mjs +9 -1
  16. package/esm2022/keycloak/src/auth.interceptor.mjs +5 -2
  17. package/esm2022/selection/aril-selection.mjs +5 -0
  18. package/esm2022/selection/index.mjs +2 -0
  19. package/esm2022/selection/src/interfaces.mjs +2 -0
  20. package/esm2022/selection/src/selection-group.service.mjs +195 -0
  21. package/esm2022/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.mjs +2 -2
  22. package/esm2022/theme/layout/index.mjs +4 -2
  23. package/esm2022/ui/button/index.mjs +1 -2
  24. package/esm2022/ui/button/src/button.component.mjs +5 -2
  25. package/esm2022/ui/charts/index.mjs +1 -11
  26. package/esm2022/ui/lib/index.mjs +1 -4
  27. package/esm2022/ui/lib/src/form/form-error-message.directive.mjs +9 -5
  28. package/esm2022/ui/multiSelect/src/multi-select.component.mjs +25 -25
  29. package/esm2022/ui/relativeDateSelector/src/relative-date-selector.component.mjs +2 -2
  30. package/esm2022/ui/selectBox/src/select-box.component.mjs +11 -34
  31. package/esm2022/ui/table/src/table.component.mjs +10 -5
  32. package/esm2022/ui/value/src/value.component.mjs +3 -2
  33. package/esm2022/ui-business/enumPicker/src/enum-picker.component.mjs +14 -6
  34. package/esm2022/util/activity/aril-util-activity.mjs +5 -0
  35. package/esm2022/util/activity/index.mjs +4 -0
  36. package/esm2022/util/activity/src/activity.constants.mjs +4 -0
  37. package/esm2022/util/activity/src/activity.service.mjs +218 -0
  38. package/esm2022/util/activity/src/activity.types.mjs +2 -0
  39. package/esm2022/util/block/src/block.mjs +9 -25
  40. package/esm2022/util/pub-sub/src/pub-sub.service.mjs +10 -5
  41. package/fesm2022/{aril-app.component-s14ruALV.mjs → aril-app.component-MjG_tPEe.mjs} +2 -1
  42. package/fesm2022/{aril-app.component-s14ruALV.mjs.map → aril-app.component-MjG_tPEe.mjs.map} +1 -1
  43. package/fesm2022/aril-boot-config-api.mjs +2 -1
  44. package/fesm2022/aril-boot-config-api.mjs.map +1 -1
  45. package/fesm2022/aril-boot-config-apps.mjs +36 -12
  46. package/fesm2022/aril-boot-config-apps.mjs.map +1 -1
  47. package/fesm2022/aril-boot-config-plugins.mjs +6 -4
  48. package/fesm2022/aril-boot-config-plugins.mjs.map +1 -1
  49. package/fesm2022/aril-boot-host.mjs +4 -2
  50. package/fesm2022/aril-boot-host.mjs.map +1 -1
  51. package/fesm2022/{aril-boot-mfe-app.component-oxzMhRXe.mjs → aril-boot-mfe-app.component-DtspQ3J8.mjs} +3 -2
  52. package/fesm2022/{aril-boot-mfe-app.component-oxzMhRXe.mjs.map → aril-boot-mfe-app.component-DtspQ3J8.mjs.map} +1 -1
  53. package/fesm2022/{aril-boot-mfe-aril-boot-mfe-CKOM61xb.mjs → aril-boot-mfe-aril-boot-mfe-lovoFcgw.mjs} +12 -4
  54. package/fesm2022/aril-boot-mfe-aril-boot-mfe-lovoFcgw.mjs.map +1 -0
  55. package/fesm2022/aril-boot-mfe.mjs +2 -1
  56. package/fesm2022/aril-boot-mfe.mjs.map +1 -1
  57. package/fesm2022/aril-http.mjs +11 -7
  58. package/fesm2022/aril-http.mjs.map +1 -1
  59. package/fesm2022/aril-keycloak.mjs +4 -1
  60. package/fesm2022/aril-keycloak.mjs.map +1 -1
  61. package/fesm2022/aril-selection.mjs +202 -0
  62. package/fesm2022/aril-selection.mjs.map +1 -0
  63. package/fesm2022/aril-theme-layout.mjs +4 -193
  64. package/fesm2022/aril-theme-layout.mjs.map +1 -1
  65. package/fesm2022/aril-ui-business-enumPicker.mjs +14 -6
  66. package/fesm2022/aril-ui-business-enumPicker.mjs.map +1 -1
  67. package/fesm2022/aril-ui-button.mjs +5 -17
  68. package/fesm2022/aril-ui-button.mjs.map +1 -1
  69. package/fesm2022/aril-ui-charts.mjs +4 -1302
  70. package/fesm2022/aril-ui-charts.mjs.map +1 -1
  71. package/fesm2022/aril-ui-lib.mjs +10 -98
  72. package/fesm2022/aril-ui-lib.mjs.map +1 -1
  73. package/fesm2022/aril-ui-multiSelect.mjs +24 -24
  74. package/fesm2022/aril-ui-multiSelect.mjs.map +1 -1
  75. package/fesm2022/aril-ui-relativeDateSelector.mjs +1 -1
  76. package/fesm2022/aril-ui-relativeDateSelector.mjs.map +1 -1
  77. package/fesm2022/aril-ui-selectBox.mjs +10 -33
  78. package/fesm2022/aril-ui-selectBox.mjs.map +1 -1
  79. package/fesm2022/aril-ui-table.mjs +9 -4
  80. package/fesm2022/aril-ui-table.mjs.map +1 -1
  81. package/fesm2022/aril-ui-value.mjs +2 -1
  82. package/fesm2022/aril-ui-value.mjs.map +1 -1
  83. package/fesm2022/aril-util-activity.mjs +228 -0
  84. package/fesm2022/aril-util-activity.mjs.map +1 -0
  85. package/fesm2022/aril-util-block.mjs +9 -25
  86. package/fesm2022/aril-util-block.mjs.map +1 -1
  87. package/fesm2022/aril-util-pub-sub.mjs +9 -4
  88. package/fesm2022/aril-util-pub-sub.mjs.map +1 -1
  89. package/fesm2022/aril.mjs +14 -5
  90. package/fesm2022/aril.mjs.map +1 -1
  91. package/http/index.d.ts +0 -1
  92. package/http/src/serviceStateMethods.d.ts +1 -0
  93. package/package.json +215 -239
  94. package/selection/index.d.ts +1 -0
  95. package/selection/src/interfaces.d.ts +8 -0
  96. package/{theme/layout/service → selection/src}/selection-group.service.d.ts +1 -1
  97. package/theme/layout/index.d.ts +1 -1
  98. package/theme/layout/index.ts +3 -1
  99. package/ui/button/index.d.ts +0 -1
  100. package/ui/button/src/button.component.d.ts +2 -0
  101. package/ui/charts/index.d.ts +0 -10
  102. package/ui/lib/index.d.ts +0 -3
  103. package/ui/lib/src/form/form-error-message.directive.d.ts +4 -3
  104. package/ui/multiSelect/src/multi-select.component.d.ts +4 -5
  105. package/ui/selectBox/src/select-box.component.d.ts +2 -7
  106. package/ui/table/src/table.component.d.ts +3 -2
  107. package/util/activity/index.d.ts +3 -0
  108. package/util/activity/src/activity.constants.d.ts +3 -0
  109. package/util/activity/src/activity.service.d.ts +35 -0
  110. package/util/activity/src/activity.types.d.ts +13 -0
  111. package/util/block/src/block.d.ts +4 -10
  112. package/util/pub-sub/src/pub-sub.service.d.ts +2 -2
  113. package/esm2022/http/src/serviceMockBase.mjs +0 -4
  114. package/esm2022/theme/layout/service/selection-group.service.mjs +0 -195
  115. package/esm2022/ui/button/src/split-button.component.mjs +0 -18
  116. package/esm2022/ui/charts/src/amCharts/column/column-chart.component.mjs +0 -124
  117. package/esm2022/ui/charts/src/amCharts/line/line-chart.component.mjs +0 -164
  118. package/esm2022/ui/charts/src/amCharts/pie/pie-chart.component.mjs +0 -116
  119. package/esm2022/ui/charts/src/highCharts/area/area-chart.component.mjs +0 -114
  120. package/esm2022/ui/charts/src/highCharts/bar/bar-chart.component.mjs +0 -100
  121. package/esm2022/ui/charts/src/highCharts/column/column-chart.component.mjs +0 -117
  122. package/esm2022/ui/charts/src/highCharts/heatmap/heatMap-chart.component.mjs +0 -252
  123. package/esm2022/ui/charts/src/highCharts/line/line-chart-series.component.mjs +0 -89
  124. package/esm2022/ui/charts/src/highCharts/line/line-chart.component.mjs +0 -82
  125. package/esm2022/ui/charts/src/highCharts/pie/pie-chart.component.mjs +0 -137
  126. package/esm2022/ui/charts/src/theme/theme.mjs +0 -54
  127. package/esm2022/ui/dxEditor/aril-ui-dxEditor.mjs +0 -5
  128. package/esm2022/ui/dxEditor/index.mjs +0 -2
  129. package/esm2022/ui/dxEditor/src/dx-editor.component.mjs +0 -26
  130. package/esm2022/ui/lib/src/form/form-field-builder.mjs +0 -23
  131. package/esm2022/ui/lib/src/input/common-input-validators.service.mjs +0 -49
  132. package/esm2022/ui/lib/src/input/input-disabled.directive.mjs +0 -25
  133. package/esm2022/ui/overlayPanel/aril-ui-overlayPanel.mjs +0 -5
  134. package/esm2022/ui/overlayPanel/index.mjs +0 -2
  135. package/esm2022/ui/overlayPanel/src/overlay-panel.component.mjs +0 -20
  136. package/esm2022/ui/tooltip/aril-ui-tooltip.mjs +0 -5
  137. package/esm2022/ui/tooltip/index.mjs +0 -2
  138. package/esm2022/ui/tooltip/src/tooltip-component.mjs +0 -23
  139. package/esm2022/ui/treeTable/aril-ui-treeTable.mjs +0 -5
  140. package/esm2022/ui/treeTable/index.mjs +0 -2
  141. package/esm2022/ui/treeTable/src/tree-table.component.mjs +0 -55
  142. package/esm2022/ui-business/operation-types-dialog/aril-ui-business-operation-types-dialog.mjs +0 -5
  143. package/esm2022/ui-business/operation-types-dialog/index.mjs +0 -2
  144. package/esm2022/ui-business/operation-types-dialog/src/operation-types-dialog.component.mjs +0 -76
  145. package/esm2022/util/unwrap/aril-util-unwrap.mjs +0 -5
  146. package/esm2022/util/unwrap/index.mjs +0 -2
  147. package/esm2022/util/unwrap/src/unwrap-tag.directive.mjs +0 -24
  148. package/fesm2022/aril-boot-mfe-aril-boot-mfe-CKOM61xb.mjs.map +0 -1
  149. package/fesm2022/aril-ui-business-operation-types-dialog.mjs +0 -83
  150. package/fesm2022/aril-ui-business-operation-types-dialog.mjs.map +0 -1
  151. package/fesm2022/aril-ui-dxEditor.mjs +0 -33
  152. package/fesm2022/aril-ui-dxEditor.mjs.map +0 -1
  153. package/fesm2022/aril-ui-overlayPanel.mjs +0 -27
  154. package/fesm2022/aril-ui-overlayPanel.mjs.map +0 -1
  155. package/fesm2022/aril-ui-tooltip.mjs +0 -30
  156. package/fesm2022/aril-ui-tooltip.mjs.map +0 -1
  157. package/fesm2022/aril-ui-treeTable.mjs +0 -62
  158. package/fesm2022/aril-ui-treeTable.mjs.map +0 -1
  159. package/fesm2022/aril-util-unwrap.mjs +0 -31
  160. package/fesm2022/aril-util-unwrap.mjs.map +0 -1
  161. package/http/src/serviceMockBase.d.ts +0 -6
  162. package/theme/layout/service/selection-group.service.ts +0 -209
  163. package/ui/button/src/split-button.component.d.ts +0 -8
  164. package/ui/charts/src/amCharts/column/column-chart.component.d.ts +0 -25
  165. package/ui/charts/src/amCharts/line/line-chart.component.d.ts +0 -26
  166. package/ui/charts/src/amCharts/pie/pie-chart.component.d.ts +0 -24
  167. package/ui/charts/src/highCharts/area/area-chart.component.d.ts +0 -20
  168. package/ui/charts/src/highCharts/bar/bar-chart.component.d.ts +0 -26
  169. package/ui/charts/src/highCharts/column/column-chart.component.d.ts +0 -28
  170. package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.d.ts +0 -32
  171. package/ui/charts/src/highCharts/line/line-chart-series.component.d.ts +0 -21
  172. package/ui/charts/src/highCharts/line/line-chart.component.d.ts +0 -21
  173. package/ui/charts/src/highCharts/pie/pie-chart.component.d.ts +0 -27
  174. package/ui/charts/src/theme/theme.d.ts +0 -5
  175. package/ui/dxEditor/index.d.ts +0 -1
  176. package/ui/dxEditor/src/dx-editor.component.d.ts +0 -11
  177. package/ui/lib/src/form/form-field-builder.d.ts +0 -8
  178. package/ui/lib/src/input/common-input-validators.service.d.ts +0 -20
  179. package/ui/lib/src/input/input-disabled.directive.d.ts +0 -9
  180. package/ui/overlayPanel/index.d.ts +0 -1
  181. package/ui/overlayPanel/src/overlay-panel.component.d.ts +0 -8
  182. package/ui/tooltip/index.d.ts +0 -1
  183. package/ui/tooltip/src/tooltip-component.d.ts +0 -14
  184. package/ui/treeTable/index.d.ts +0 -1
  185. package/ui/treeTable/src/tree-table.component.d.ts +0 -21
  186. package/ui-business/operation-types-dialog/index.d.ts +0 -1
  187. package/ui-business/operation-types-dialog/src/operation-types-dialog.component.d.ts +0 -28
  188. package/util/unwrap/index.d.ts +0 -1
  189. package/util/unwrap/src/unwrap-tag.directive.d.ts +0 -9
@@ -1,5 +1,6 @@
1
1
  import { CurrencyPipe, DecimalPipe, SlicePipe } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
4
  import { DialogService } from 'primeng/dynamicdialog';
4
5
  import { OverlayPanelModule } from 'primeng/overlaypanel';
5
6
  import { TooltipModule } from 'primeng/tooltip';
@@ -142,7 +143,7 @@ export class ValueComponent {
142
143
  return '#A2AFFF';
143
144
  });
144
145
  });
145
- this.translocoService.langChanges$.subscribe((lang) => {
146
+ this.translocoService.langChanges$.pipe(takeUntilDestroyed()).subscribe((lang) => {
146
147
  this.langSignal.set(lang);
147
148
  });
148
149
  }
@@ -204,4 +205,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
204
205
  RoundNumberPipe
205
206
  ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [DialogService, DecimalPipe], template: "@if (model() == undefined || model() == null) {\r\n\t<i\r\n\t\tclass=\"pi pi-minus\"\r\n\t\tstyle=\"color: red\"\r\n\t\t[pTooltip]=\"this.translocoService.translate('validations.noItemToShow')\"></i>\r\n} @else {\r\n\t@if (type() == 'bool') {\r\n\t\t@if (!!model()) {\r\n\t\t\t<i class=\"pi pi-check\" style=\"color: green\"></i>\r\n\t\t} @else {\r\n\t\t\t<i class=\"pi pi-times\" style=\"color: crimson\"></i>\r\n\t\t}\r\n\t} @else if (type() === 'enum') {\r\n\t\t@if (isModelArray()) {\r\n\t\t\t<div class=\"flex align-items-center gap-1\">\r\n\t\t\t\t@for (display of enumArrayDisplays().slice(0, 2); track display; let i = $index) {\r\n\t\t\t\t\t<aril-badge [background]=\"enumArrayBackgroundColors()[i]\" [value]=\"display\" [textClampCharacters]=\"textClampCharacters()\" />\r\n\t\t\t\t}\r\n\t\t\t\t@if (enumArrayDisplays().length > 2) {\r\n\t\t\t\t\t<i class=\"pi pi-ellipsis-v cursor-pointer\" (click)=\"enumOp.toggle($event)\"></i>\r\n\r\n\t\t\t\t\t<p-overlayPanel #enumOp class=\"shadow-4\" appendTo=\"body\">\r\n\t\t\t\t\t\t<div class=\"flex flex-column gap-2 max-w-30rem max-h-20rem pr-3 overflow-y-auto\">\r\n\t\t\t\t\t\t\t@for (display of enumArrayDisplays() | slice: 2; track display; let i = $index) {\r\n\t\t\t\t\t\t\t\t<aril-badge [background]=\"enumArrayBackgroundColors()[i + 2]\" [value]=\"display\" [textClampCharacters]=\"textClampCharacters()\" />\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</p-overlayPanel>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<aril-badge [background]=\"enumBadgeBackgroundColor()\" [value]=\"enumSelectionDisplay()\" [textClampCharacters]=\"textClampCharacters()\" />\r\n\t\t}\r\n\t} @else if (type() === 'array') {\r\n\t\t<div class=\"flex align-items-center gap-1\">\r\n\t\t\t@for (item of model().slice(0, arrayTypeMaxBadgeCount()); track item) {\r\n\t\t\t\t<aril-badge [background]=\"getArrayItemValue(item) || '' | enumColorPicker\" [value]=\"getArrayItemValue(item)\" [textClampCharacters]=\"textClampCharacters()\" />\r\n\t\t\t}\r\n\t\t\t@if (model().length > arrayTypeMaxBadgeCount()) {\r\n\t\t\t\t<i class=\"pi pi-ellipsis-v cursor-pointer\" (click)=\"op.toggle($event)\"></i>\r\n\r\n\t\t\t\t<p-overlayPanel #op class=\"shadow-4\" appendTo=\"body\">\r\n\t\t\t\t\t<div class=\"flex flex-column gap-2 max-w-30rem max-h-20rem pr-3 overflow-y-auto\">\r\n\t\t\t\t\t\t@for (item of model() | slice: arrayTypeMaxBadgeCount(); track item) {\r\n\t\t\t\t\t\t\t<aril-badge\r\n\t\t\t\t\t\t\t\t[background]=\"getArrayItemValue(item) || '' | enumColorPicker\"\r\n\t\t\t\t\t\t\t\t[value]=\"getArrayItemValue(item)\" />\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-overlayPanel>\r\n\t\t\t}\r\n\t\t</div>\r\n\t} @else {\r\n\t\t@if (display() == undefined) {\r\n\t\t\t<i\r\n\t\t\t\tclass=\"pi pi-exclamation-circle\"\r\n\t\t\t\tstyle=\"color: red\"\r\n\t\t\t\t[pTooltip]=\"this.translocoService.translate('validations.invalidDataFormat')\">\r\n\t\t\t</i>\r\n\t\t} @else {\r\n\t\t\t<span class=\"flex align-items-center gap-2\">\r\n\t\t\t\t@if (showCopyIcon()) {\r\n\t\t\t\t\t<i\r\n\t\t\t\t\t\tclass=\"pi pi-copy cursor-pointer\"\r\n\t\t\t\t\t\t(click)=\"copyToClipboard(display()?.toString()); $event.stopPropagation()\"\r\n\t\t\t\t\t\tstyle=\"font-size: 1rem; color: green\"></i>\r\n\t\t\t\t}\r\n\t\t\t\t<span\r\n\t\t\t\t\t[pTooltip]=\"\r\n\t\t\t\t\t\ttype() === 'text' && isTextClamp() && display()?.toString().length > textClampCharacters() ?\r\n\t\t\t\t\t\t\tdisplay()?.toString()\r\n\t\t\t\t\t\t:\t''\r\n\t\t\t\t\t\"\r\n\t\t\t\t\ttooltipPosition=\"top\"\r\n\t\t\t\t\t[class.text-no-wrap]=\"isTextClamp()\"\r\n\t\t\t\t\t[style]=\"isClickable() ? { 'text-decoration': 'underline', color: '#0000EE', cursor: 'pointer' } : ''\">\r\n\t\t\t\t\t@if (type() === 'number' || type() === 'decimal') {\r\n\t\t\t\t\t\t{{ model() | number: getNumberFormat() : 'tr-TR' }}\r\n\t\t\t\t\t} @else if (type() === 'big_decimal') {\r\n\t\t\t\t\t\t{{ model() | roundNumber: bigDecimalScale() : bigDecimalRoundingMode() : 'tr-TR' }}\r\n\t\t\t\t\t} @else if (type() === 'currency') {\r\n\t\t\t\t\t\t{{ model() | currency: format() ?? 'TRY' : 'symbol' : '1.0-2' }}\r\n\t\t\t\t\t} @else if (type() === 'text' && isTextClamp()) {\r\n\t\t\t\t\t\t{{\r\n\t\t\t\t\t\t\tdisplay().length > textClampCharacters() ? display().slice(0, textClampCharacters()) + '...' : display()\r\n\t\t\t\t\t\t}}\r\n\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t{{ display() }}\r\n\t\t\t\t\t}\r\n\t\t\t\t</span>\r\n\t\t\t</span>\r\n\t\t}\r\n\t}\r\n}\r\n", styles: [".text-no-wrap{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
206
207
  }], ctorParameters: () => [{ type: i1.TranslocoService }, { type: i2.SelectionGroupService }, { type: i3.MessageService }] });
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS92YWx1ZS9zcmMvdmFsdWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS92YWx1ZS9zcmMvdmFsdWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc1RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0sbUJBQW1CLENBQUM7QUFHdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sZ0NBQWdDLENBQUM7Ozs7Ozs7QUFrQ3hDLE1BQU0sT0FBTyxjQUFjO0lBMEIxQixZQUNRLGdCQUFrQyxFQUN4QixxQkFBNEMsRUFDNUMsY0FBOEI7UUFGeEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN4QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTVCaEQsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQW1DLENBQUM7UUFD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QywrQkFBK0IsQ0FBQztnQkFDekUsTUFBTSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsaUNBQWlDLENBQUM7Z0JBQzFFLEdBQUcsRUFBRSxZQUFZO2FBQ2pCLENBQUMsQ0FBQztRQUNKLENBQUMsRUFDRCxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ1AsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3ZCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxvQ0FBb0MsQ0FBQztnQkFDOUUsTUFBTSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUM7Z0JBQ3hFLEdBQUcsRUFBRSxZQUFZO2FBQ2pCLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FDRCxDQUFDO0lBQ0gsQ0FBQzs4R0F6TlcsY0FBYztrR0FBZCxjQUFjLDRzRUFGZixDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsMEJDL0N4QyxtM0lBOEZBLHlKRDFERSxjQUFjLHVMQUNkLGFBQWEscVhBQ2IsZUFBZSw4QkFDZixrQkFBa0IsOFZBQ2xCLG1CQUFtQixtREFDbkIsU0FBUyx5Q0FDVCxXQUFXLDBDQUNYLFlBQVksNENBQ1osZUFBZTs7MkZBS0osY0FBYztrQkFuQjFCLFNBQVM7aUNBQ0csSUFBSSxZQUNOLFlBQVksV0FHYjt3QkFDUixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsU0FBUzt3QkFDVCxXQUFXO3dCQUNYLFlBQVk7d0JBQ1osZUFBZTtxQkFDZixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxhQUNwQyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUsIERlY2ltYWxQaXBlLCBTbGljZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBPdmVybGF5UGFuZWxNb2R1bGUgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsb2NvTW9kdWxlLCBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xyXG5cclxuaW1wb3J0IHsgU2VsZWN0aW9uR3JvdXBTZXJ2aWNlIH0gZnJvbSAnYXJpbC90aGVtZS9sYXlvdXQnO1xyXG5pbXBvcnQgeyBCYWRnZUNvbXBvbmVudCB9IGZyb20gJ2FyaWwvdWkvYmFkZ2UnO1xyXG5pbXBvcnQgeyBFbnVtQ29sb3JQaWNrZXJQaXBlIH0gZnJvbSAnYXJpbC91aS9saWInO1xyXG5pbXBvcnQgeyBEZWNpbWFsUm91bmRpbmdUeXBlIH0gZnJvbSAnYXJpbC91dGlsL2xpYic7XHJcbmltcG9ydCB7IFJvdW5kTnVtYmVyUGlwZSB9IGZyb20gJ2FyaWwvdXRpbC9waXBlcyc7XHJcbmltcG9ydCAnYXJpbC91dGlsL3ByaW1pdGl2ZS1leHRlbnNpb25zJztcclxuXHJcbnR5cGUgVmFsdWVUeXBlcyA9XHJcblx0fCAndGV4dCdcclxuXHR8ICdudW1iZXInXHJcblx0fCAnYm9vbCdcclxuXHR8ICdkZWNpbWFsJ1xyXG5cdHwgJ2JpZ19kZWNpbWFsJ1xyXG5cdHwgJ2RhdGUnXHJcblx0fCAncGFzc3dvcmQnXHJcblx0fCAnZW51bSdcclxuXHR8ICdhcnJheSdcclxuXHR8ICdpc29EYXRlJ1xyXG5cdHwgJ2N1cnJlbmN5JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0c2VsZWN0b3I6ICdhcmlsLXZhbHVlJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vdmFsdWUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi92YWx1ZS5jb21wb25lbnQuc2NzcycsXHJcblx0aW1wb3J0czogW1xyXG5cdFx0QmFkZ2VDb21wb25lbnQsXHJcblx0XHRUb29sdGlwTW9kdWxlLFxyXG5cdFx0VHJhbnNsb2NvTW9kdWxlLFxyXG5cdFx0T3ZlcmxheVBhbmVsTW9kdWxlLFxyXG5cdFx0RW51bUNvbG9yUGlja2VyUGlwZSxcclxuXHRcdFNsaWNlUGlwZSxcclxuXHRcdERlY2ltYWxQaXBlLFxyXG5cdFx0Q3VycmVuY3lQaXBlLFxyXG5cdFx0Um91bmROdW1iZXJQaXBlXHJcblx0XSxcclxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuXHRwcm92aWRlcnM6IFtEaWFsb2dTZXJ2aWNlLCBEZWNpbWFsUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFZhbHVlQ29tcG9uZW50IHtcclxuXHRtb2RlbCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBhbnk+KCk7XHJcblx0dHlwZSA9IGlucHV0PFZhbHVlVHlwZXM+KCd0ZXh0Jyk7XHJcblx0Zm9ybWF0ID0gaW5wdXQ8c3RyaW5nPigpO1xyXG5cdGlzQ2xpY2thYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdGdyb3VwTmFtZSA9IGlucHV0PHN0cmluZz4oKTtcclxuXHRwYXJlbnRTZWxlY3Rpb25LZXkgPSBpbnB1dDxzdHJpbmc+KCdBTEwnKTtcclxuXHRpc1RleHRDbGFtcCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cdHRleHRDbGFtcENoYXJhY3RlcnMgPSBpbnB1dDxudW1iZXI+KDUwKTtcclxuXHRzdHlsZSA9IGlucHV0PHN0cmluZz4oKTtcclxuXHRjb3B5YWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRzaG91bGRTaG93Q29weUZvckNsYW1wZWRUZXh0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdHNob3dDb3B5SWNvbiA9IGNvbXB1dGVkKFxyXG5cdFx0KCkgPT5cclxuXHRcdFx0KCF0aGlzLnNob3VsZFNob3dDb3B5Rm9yQ2xhbXBlZFRleHQoKSAmJiB0aGlzLmNvcHlhYmxlKCkpIHx8XHJcblx0XHRcdCh0aGlzLnNob3VsZFNob3dDb3B5Rm9yQ2xhbXBlZFRleHQoKSAmJiB0aGlzLm1vZGVsKCkubGVuZ3RoID4gdGhpcy50ZXh0Q2xhbXBDaGFyYWN0ZXJzKCkpXHJcblx0KTtcclxuXHJcblx0Ly8gb25seSBmb3IgYXJyYXkgdHlwZVxyXG5cdGFycmF5VHlwZURpc3BsYXlOYW1lID0gaW5wdXQ8c3RyaW5nPigndmFsdWVEZXNjJyk7XHJcblx0YXJyYXlUeXBlTWF4QmFkZ2VDb3VudCA9IGlucHV0PG51bWJlcj4oMyk7XHJcblxyXG5cdC8vIG9ubHkgZm9yIGJpZ19kZWNpbWFsIHR5cGVcclxuXHRiaWdEZWNpbWFsUm91bmRpbmdNb2RlID0gaW5wdXQ8RGVjaW1hbFJvdW5kaW5nVHlwZT4oKTtcclxuXHRiaWdEZWNpbWFsU2NhbGUgPSBpbnB1dDxudW1iZXI+KCk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHRyYW5zbG9jb1NlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJlYWRvbmx5IHNlbGVjdGlvbkdyb3VwU2VydmljZTogU2VsZWN0aW9uR3JvdXBTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcclxuXHQpIHtcclxuXHRcdHRoaXMudHJhbnNsb2NvU2VydmljZS5sYW5nQ2hhbmdlcyQuc3Vic2NyaWJlKChsYW5nKSA9PiB7XHJcblx0XHRcdHRoaXMubGFuZ1NpZ25hbC5zZXQobGFuZyk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGxhbmdTaWduYWwgPSBzaWduYWwodGhpcy50cmFuc2xvY29TZXJ2aWNlLmdldEFjdGl2ZUxhbmcoKSk7XHJcblxyXG5cdGdldE51bWJlckZvcm1hdCgpOiBzdHJpbmcge1xyXG5cdFx0aWYgKHRoaXMudHlwZSgpID09PSAnbnVtYmVyJykgcmV0dXJuICcxLjAtMCc7XHJcblx0XHRlbHNlIGlmICh0aGlzLnR5cGUoKSA9PT0gJ2RlY2ltYWwnKSB7XHJcblx0XHRcdGNvbnN0IGZvcm1hdCA9IHRoaXMuZm9ybWF0KCk7XHJcblxyXG5cdFx0XHRpZiAoIWZvcm1hdCkgcmV0dXJuICcxLjAtMyc7XHJcblxyXG5cdFx0XHQvLyBFxJ9lciBmb3JtYXQgQW5ndWxhciBEZWNpbWFsUGlwZSBmb3JtYXTEsW5kYXlzYSBkaXJla3Qga3VsbGFuXHJcblx0XHRcdGlmIChmb3JtYXQgJiYgdHlwZW9mIGZvcm1hdCA9PT0gJ3N0cmluZycgJiYgZm9ybWF0Lm1hdGNoKC9eXFxkK1xcLlxcZCstXFxkKyQvKSkge1xyXG5cdFx0XHRcdHJldHVybiBmb3JtYXQ7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gRcSfZXIgZXNraSBmb3JtYXQgc3RyaW5nJ2kgdmFyc2EgKMO2cm46ICMuMDApIG9udSDDp2V2aXJcclxuXHRcdFx0aWYgKGZvcm1hdCAmJiB0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJiBmb3JtYXQuaW5jbHVkZXMoJy4nKSkge1xyXG5cdFx0XHRcdGNvbnN0IGRlY2ltYWxQbGFjZXMgPSBmb3JtYXQuc3BsaXQoJy4nKVsxXS5sZW5ndGg7XHJcblx0XHRcdFx0cmV0dXJuIGAxLiR7ZGVjaW1hbFBsYWNlc30tJHtkZWNpbWFsUGxhY2VzfWA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiAnJztcclxuXHR9XHJcblxyXG5cdGNvbG9yTGlzdCA9IFtcclxuXHRcdCcjMTg5MEZGJyxcclxuXHRcdCcjRkFBRDE0JyxcclxuXHRcdCcjNTJDNDFBJyxcclxuXHRcdCcjNUQ2RDdFJyxcclxuXHRcdCcjRkY2QjZCJyxcclxuXHRcdCcjMTNDMkMyJyxcclxuXHRcdCcjNThENjhEJyxcclxuXHRcdCcjNzIyRUQxJyxcclxuXHRcdCcjODVDMUU5JyxcclxuXHRcdCcjYzQ5ZTA1ZmYnXHJcblx0XTtcclxuXHJcblx0ZGlzcGxheSA9IGNvbXB1dGVkKCgpID0+IHtcclxuXHRcdHN3aXRjaCAodGhpcy50eXBlKCkpIHtcclxuXHRcdFx0Y2FzZSAndGV4dCc6XHJcblx0XHRcdGNhc2UgJ251bWJlcic6XHJcblx0XHRcdGNhc2UgJ2RlY2ltYWwnOlxyXG5cdFx0XHRjYXNlICdjdXJyZW5jeSc6XHJcblx0XHRcdGNhc2UgJ2JpZ19kZWNpbWFsJzpcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5tb2RlbCgpO1xyXG5cdFx0XHRjYXNlICdkYXRlJzpcclxuXHRcdFx0XHRyZXR1cm4gKDxudW1iZXI+dGhpcy5tb2RlbCgpKS5sb25nVG9TdHJpbmcodGhpcy5mb3JtYXQoKSA/PyAndGltZScpO1xyXG5cdFx0XHRjYXNlICdwYXNzd29yZCc6XHJcblx0XHRcdFx0cmV0dXJuICg8c3RyaW5nPnRoaXMubW9kZWwoKSkucmVwbGFjZSgvLi9nLCAnKicpO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIHR5cGU6ICdcIiArIHRoaXMudHlwZSgpICsgXCInXCIpO1xyXG5cdFx0XHRcdHJldHVybiAnJztcclxuXHRcdH1cclxuXHR9KTtcclxuXHJcblx0ZW51bVNlbGVjdGlvbkRpc3BsYXkgPSBjb21wdXRlZCgoKSA9PiB7XHJcblx0XHRjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMubGFuZ1NpZ25hbCgpO1xyXG5cclxuXHRcdGNvbnN0IHNlbGVjdGlvbkdyb3VwID1cclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25Hcm91cFNlcnZpY2Uuc2VsZWN0aW9uR3JvdXBzKClbYCR7dGhpcy5ncm91cE5hbWUoKSF9fiR7dGhpcy5wYXJlbnRTZWxlY3Rpb25LZXkoKSF9YF07XHJcblxyXG5cdFx0aWYgKCFzZWxlY3Rpb25Hcm91cCkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGlvbkdyb3VwU2VydmljZS5mZXRjaEVudW0odGhpcy5ncm91cE5hbWUoKSEsIHRoaXMucGFyZW50U2VsZWN0aW9uS2V5KCkhKTtcclxuXHRcdFx0cmV0dXJuIHRoaXMubW9kZWwoKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCByYXdNb2RlbCA9IHRoaXMubW9kZWwoKTtcclxuXHRcdGNvbnN0IGtleSA9XHJcblx0XHRcdHR5cGVvZiByYXdNb2RlbCA9PT0gJ29iamVjdCcgJiYgcmF3TW9kZWwgIT09IG51bGwgJiYgJ3ZhbHVlJyBpbiByYXdNb2RlbCA/IHJhd01vZGVsLnZhbHVlXHJcblx0XHRcdDogdHlwZW9mIHJhd01vZGVsID09PSAnYm9vbGVhbicgPyBTdHJpbmcocmF3TW9kZWwpXHJcblx0XHRcdDogcmF3TW9kZWw7XHJcblxyXG5cdFx0Y29uc3Qgc2VsZWN0aW9uSXRlbSA9IHNlbGVjdGlvbkdyb3VwLnNlbGVjdGlvbkl0ZW1zLmZpbmQoKHQpID0+IHQuc2VsZWN0aW9uS2V5ID09PSBrZXkpIGFzIHtcclxuXHRcdFx0c2VsZWN0aW9uTXVsdGlMYW5ndWFnZURpc3BsYXlzPzogeyBbbGFuZzogc3RyaW5nXTogc3RyaW5nIH07XHJcblx0XHRcdHNlbGVjdGlvbkRpc3BsYXk/OiBzdHJpbmc7XHJcblx0XHR9O1xyXG5cclxuXHRcdGlmICghc2VsZWN0aW9uSXRlbSkgcmV0dXJuIGtleTtcclxuXHJcblx0XHRyZXR1cm4gc2VsZWN0aW9uSXRlbS5zZWxlY3Rpb25NdWx0aUxhbmd1YWdlRGlzcGxheXM/LltjdXJyZW50TGFuZ10gPz8gc2VsZWN0aW9uSXRlbS5zZWxlY3Rpb25EaXNwbGF5ID8/IGtleTtcclxuXHR9KTtcclxuXHJcblx0ZW51bUJhZGdlQmFja2dyb3VuZENvbG9yID0gY29tcHV0ZWQoKCkgPT4ge1xyXG5cdFx0aWYgKHR5cGVvZiB0aGlzLm1vZGVsKCkgPT09ICdib29sZWFuJykge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RlbCgpID8gJyMyMmM1NWUnIDogJyNlZjQ0NDQnOyAvLyB0cnVlIGnDp2luIHllxZ9pbCwgZmFsc2UgacOnaW4ga8Sxcm3EsXrEsVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHNlbGVjdGlvbkdyb3VwID1cclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25Hcm91cFNlcnZpY2Uuc2VsZWN0aW9uR3JvdXBzKClbYCR7dGhpcy5ncm91cE5hbWUoKSF9fiR7dGhpcy5wYXJlbnRTZWxlY3Rpb25LZXkoKSF9YF07XHJcblx0XHRjb25zdCBzZWxlY3Rpb25JdGVtcyA9IHNlbGVjdGlvbkdyb3VwPy5zZWxlY3Rpb25JdGVtcyA/PyBbXTtcclxuXHJcblx0XHRjb25zdCBzZWxlY3Rpb25JdGVtID0gc2VsZWN0aW9uSXRlbXMuZmluZCgodCkgPT4gdC5zZWxlY3Rpb25LZXkgPT09IHRoaXMubW9kZWwoKSk7XHJcblxyXG5cdFx0aWYgKCFzZWxlY3Rpb25JdGVtKSB7XHJcblx0XHRcdHJldHVybiAnIzE4OTBGRic7XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuY29sb3JMaXN0W3NlbGVjdGlvbkl0ZW0uc2hvd09yZGVyXSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmNvbG9yTGlzdFtzZWxlY3Rpb25JdGVtLnNob3dPcmRlcl07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gJyNBMkFGRkYnO1xyXG5cdH0pO1xyXG5cclxuXHRnZXRBcnJheUl0ZW1WYWx1ZShpdGVtOiBhbnkpOiBhbnkge1xyXG5cdFx0cmV0dXJuIGl0ZW1bdGhpcy5hcnJheVR5cGVEaXNwbGF5TmFtZSgpXTtcclxuXHR9XHJcblxyXG5cdGlzTW9kZWxBcnJheSA9IGNvbXB1dGVkKCgpID0+IHtcclxuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMubW9kZWwoKSk7XHJcblx0fSk7XHJcblxyXG5cdC8vIEdldCBlbnVtIGRpc3BsYXkgZm9yIGFycmF5IGl0ZW1zXHJcblx0ZW51bUFycmF5RGlzcGxheXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcblx0XHRpZiAoIXRoaXMuaXNNb2RlbEFycmF5KCkgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCgpKSkgcmV0dXJuIFtdO1xyXG5cclxuXHRcdGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5sYW5nU2lnbmFsKCk7XHJcblx0XHRjb25zdCBzZWxlY3Rpb25Hcm91cCA9XHJcblx0XHRcdHRoaXMuc2VsZWN0aW9uR3JvdXBTZXJ2aWNlLnNlbGVjdGlvbkdyb3VwcygpW2Ake3RoaXMuZ3JvdXBOYW1lKCkhfX4ke3RoaXMucGFyZW50U2VsZWN0aW9uS2V5KCkhfWBdO1xyXG5cclxuXHRcdGlmICghc2VsZWN0aW9uR3JvdXApIHtcclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25Hcm91cFNlcnZpY2UuZmV0Y2hFbnVtKHRoaXMuZ3JvdXBOYW1lKCkhLCB0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpISk7XHJcblx0XHRcdHJldHVybiB0aGlzLm1vZGVsKCkgYXMgc3RyaW5nW107XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMubW9kZWwoKS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG5cdFx0XHRjb25zdCBrZXkgPVxyXG5cdFx0XHRcdHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiBpdGVtICE9PSBudWxsICYmICd2YWx1ZScgaW4gaXRlbSA/IGl0ZW0udmFsdWVcclxuXHRcdFx0XHQ6IHR5cGVvZiBpdGVtID09PSAnYm9vbGVhbicgPyBTdHJpbmcoaXRlbSlcclxuXHRcdFx0XHQ6IGl0ZW07XHJcblxyXG5cdFx0XHRjb25zdCBzZWxlY3Rpb25JdGVtID0gc2VsZWN0aW9uR3JvdXAuc2VsZWN0aW9uSXRlbXMuZmluZCgodCkgPT4gdC5zZWxlY3Rpb25LZXkgPT09IGtleSkgYXMge1xyXG5cdFx0XHRcdHNlbGVjdGlvbk11bHRpTGFuZ3VhZ2VEaXNwbGF5cz86IHsgW2xhbmc6IHN0cmluZ106IHN0cmluZyB9O1xyXG5cdFx0XHRcdHNlbGVjdGlvbkRpc3BsYXk/OiBzdHJpbmc7XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRpZiAoIXNlbGVjdGlvbkl0ZW0pIHJldHVybiBrZXk7XHJcblxyXG5cdFx0XHRyZXR1cm4gc2VsZWN0aW9uSXRlbS5zZWxlY3Rpb25NdWx0aUxhbmd1YWdlRGlzcGxheXM/LltjdXJyZW50TGFuZ10gPz8gc2VsZWN0aW9uSXRlbS5zZWxlY3Rpb25EaXNwbGF5ID8/IGtleTtcclxuXHRcdH0pIGFzIHN0cmluZ1tdO1xyXG5cdH0pO1xyXG5cclxuXHQvLyBHZXQgZW51bSBiYWNrZ3JvdW5kIGNvbG9ycyBmb3IgYXJyYXkgaXRlbXNcclxuXHRlbnVtQXJyYXlCYWNrZ3JvdW5kQ29sb3JzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG5cdFx0aWYgKCF0aGlzLmlzTW9kZWxBcnJheSgpIHx8ICFBcnJheS5pc0FycmF5KHRoaXMubW9kZWwoKSkpIHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCBzZWxlY3Rpb25Hcm91cCA9XHJcblx0XHRcdHRoaXMuc2VsZWN0aW9uR3JvdXBTZXJ2aWNlLnNlbGVjdGlvbkdyb3VwcygpW2Ake3RoaXMuZ3JvdXBOYW1lKCkhfX4ke3RoaXMucGFyZW50U2VsZWN0aW9uS2V5KCkhfWBdO1xyXG5cdFx0Y29uc3Qgc2VsZWN0aW9uSXRlbXMgPSBzZWxlY3Rpb25Hcm91cD8uc2VsZWN0aW9uSXRlbXMgPz8gW107XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMubW9kZWwoKS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG5cdFx0XHRpZiAodHlwZW9mIGl0ZW0gPT09ICdib29sZWFuJykge1xyXG5cdFx0XHRcdHJldHVybiBpdGVtID8gJyMyMmM1NWUnIDogJyNlZjQ0NDQnO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBzZWxlY3Rpb25JdGVtID0gc2VsZWN0aW9uSXRlbXMuZmluZCgodCkgPT4gdC5zZWxlY3Rpb25LZXkgPT09IGl0ZW0pO1xyXG5cclxuXHRcdFx0aWYgKCFzZWxlY3Rpb25JdGVtKSB7XHJcblx0XHRcdFx0cmV0dXJuICcjMTg5MEZGJztcclxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbG9yTGlzdFtzZWxlY3Rpb25JdGVtLnNob3dPcmRlcl0gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbG9yTGlzdFtzZWxlY3Rpb25JdGVtLnNob3dPcmRlcl07XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuICcjQTJBRkZGJztcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG5cclxuXHRjb3B5VG9DbGlwYm9hcmQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG5cdFx0aWYgKCF2YWx1ZSkgcmV0dXJuO1xyXG5cdFx0bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodmFsdWUpLnRoZW4oXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcblx0XHRcdFx0XHRzZXZlcml0eTogJ3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0c3VtbWFyeTogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnbWVzc2FnZXMuc3VjY2Vzc01lc3NhZ2VIZWFkZXInKSxcclxuXHRcdFx0XHRcdGRldGFpbDogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnbWVzc2FnZXMuY29weVRvQ2xpcGJvYXJkU3VjY2VzcycpLFxyXG5cdFx0XHRcdFx0a2V5OiAndG9hc3Qtcm9vdCdcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KGVycikgPT4ge1xyXG5cdFx0XHRcdHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcclxuXHRcdFx0XHRcdHNldmVyaXR5OiAnZXJyb3InLFxyXG5cdFx0XHRcdFx0c3VtbWFyeTogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnbWVzc2FnZXMudW5zdWNjZXNzZnVsTWVzc2FnZUhlYWRlcicpLFxyXG5cdFx0XHRcdFx0ZGV0YWlsOiB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdtZXNzYWdlcy5jb3B5VG9DbGlwYm9hcmRFcnJvcicpLFxyXG5cdFx0XHRcdFx0a2V5OiAndG9hc3Qtcm9vdCdcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiQGlmIChtb2RlbCgpID09IHVuZGVmaW5lZCB8fCBtb2RlbCgpID09IG51bGwpIHtcclxuXHQ8aVxyXG5cdFx0Y2xhc3M9XCJwaSBwaS1taW51c1wiXHJcblx0XHRzdHlsZT1cImNvbG9yOiByZWRcIlxyXG5cdFx0W3BUb29sdGlwXT1cInRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ3ZhbGlkYXRpb25zLm5vSXRlbVRvU2hvdycpXCI+PC9pPlxyXG59IEBlbHNlIHtcclxuXHRAaWYgKHR5cGUoKSA9PSAnYm9vbCcpIHtcclxuXHRcdEBpZiAoISFtb2RlbCgpKSB7XHJcblx0XHRcdDxpIGNsYXNzPVwicGkgcGktY2hlY2tcIiBzdHlsZT1cImNvbG9yOiBncmVlblwiPjwvaT5cclxuXHRcdH0gQGVsc2Uge1xyXG5cdFx0XHQ8aSBjbGFzcz1cInBpIHBpLXRpbWVzXCIgc3R5bGU9XCJjb2xvcjogY3JpbXNvblwiPjwvaT5cclxuXHRcdH1cclxuXHR9IEBlbHNlIGlmICh0eXBlKCkgPT09ICdlbnVtJykge1xyXG5cdFx0QGlmIChpc01vZGVsQXJyYXkoKSkge1xyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cclxuXHRcdFx0XHRAZm9yIChkaXNwbGF5IG9mIGVudW1BcnJheURpc3BsYXlzKCkuc2xpY2UoMCwgMik7IHRyYWNrIGRpc3BsYXk7IGxldCBpID0gJGluZGV4KSB7XHJcblx0XHRcdFx0XHQ8YXJpbC1iYWRnZSBbYmFja2dyb3VuZF09XCJlbnVtQXJyYXlCYWNrZ3JvdW5kQ29sb3JzKClbaV1cIiBbdmFsdWVdPVwiZGlzcGxheVwiIFt0ZXh0Q2xhbXBDaGFyYWN0ZXJzXT1cInRleHRDbGFtcENoYXJhY3RlcnMoKVwiIC8+XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdEBpZiAoZW51bUFycmF5RGlzcGxheXMoKS5sZW5ndGggPiAyKSB7XHJcblx0XHRcdFx0XHQ8aSBjbGFzcz1cInBpIHBpLWVsbGlwc2lzLXYgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiZW51bU9wLnRvZ2dsZSgkZXZlbnQpXCI+PC9pPlxyXG5cclxuXHRcdFx0XHRcdDxwLW92ZXJsYXlQYW5lbCAjZW51bU9wIGNsYXNzPVwic2hhZG93LTRcIiBhcHBlbmRUbz1cImJvZHlcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTIgbWF4LXctMzByZW0gbWF4LWgtMjByZW0gcHItMyBvdmVyZmxvdy15LWF1dG9cIj5cclxuXHRcdFx0XHRcdFx0XHRAZm9yIChkaXNwbGF5IG9mIGVudW1BcnJheURpc3BsYXlzKCkgfCBzbGljZTogMjsgdHJhY2sgZGlzcGxheTsgbGV0IGkgPSAkaW5kZXgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdDxhcmlsLWJhZGdlIFtiYWNrZ3JvdW5kXT1cImVudW1BcnJheUJhY2tncm91bmRDb2xvcnMoKVtpICsgMl1cIiBbdmFsdWVdPVwiZGlzcGxheVwiIFt0ZXh0Q2xhbXBDaGFyYWN0ZXJzXT1cInRleHRDbGFtcENoYXJhY3RlcnMoKVwiIC8+XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDwvcC1vdmVybGF5UGFuZWw+XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdH0gQGVsc2Uge1xyXG5cdFx0XHQ8YXJpbC1iYWRnZSBbYmFja2dyb3VuZF09XCJlbnVtQmFkZ2VCYWNrZ3JvdW5kQ29sb3IoKVwiIFt2YWx1ZV09XCJlbnVtU2VsZWN0aW9uRGlzcGxheSgpXCIgW3RleHRDbGFtcENoYXJhY3RlcnNdPVwidGV4dENsYW1wQ2hhcmFjdGVycygpXCIgLz5cclxuXHRcdH1cclxuXHR9IEBlbHNlIGlmICh0eXBlKCkgPT09ICdhcnJheScpIHtcclxuXHRcdDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiPlxyXG5cdFx0XHRAZm9yIChpdGVtIG9mIG1vZGVsKCkuc2xpY2UoMCwgYXJyYXlUeXBlTWF4QmFkZ2VDb3VudCgpKTsgdHJhY2sgaXRlbSkge1xyXG5cdFx0XHRcdDxhcmlsLWJhZGdlIFtiYWNrZ3JvdW5kXT1cImdldEFycmF5SXRlbVZhbHVlKGl0ZW0pIHx8ICcnIHwgZW51bUNvbG9yUGlja2VyXCIgW3ZhbHVlXT1cImdldEFycmF5SXRlbVZhbHVlKGl0ZW0pXCIgW3RleHRDbGFtcENoYXJhY3RlcnNdPVwidGV4dENsYW1wQ2hhcmFjdGVycygpXCIgLz5cclxuXHRcdFx0fVxyXG5cdFx0XHRAaWYgKG1vZGVsKCkubGVuZ3RoID4gYXJyYXlUeXBlTWF4QmFkZ2VDb3VudCgpKSB7XHJcblx0XHRcdFx0PGkgY2xhc3M9XCJwaSBwaS1lbGxpcHNpcy12IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9wLnRvZ2dsZSgkZXZlbnQpXCI+PC9pPlxyXG5cclxuXHRcdFx0XHQ8cC1vdmVybGF5UGFuZWwgI29wIGNsYXNzPVwic2hhZG93LTRcIiBhcHBlbmRUbz1cImJvZHlcIj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0yIG1heC13LTMwcmVtIG1heC1oLTIwcmVtIHByLTMgb3ZlcmZsb3cteS1hdXRvXCI+XHJcblx0XHRcdFx0XHRcdEBmb3IgKGl0ZW0gb2YgbW9kZWwoKSB8IHNsaWNlOiBhcnJheVR5cGVNYXhCYWRnZUNvdW50KCk7IHRyYWNrIGl0ZW0pIHtcclxuXHRcdFx0XHRcdFx0XHQ8YXJpbC1iYWRnZVxyXG5cdFx0XHRcdFx0XHRcdFx0W2JhY2tncm91bmRdPVwiZ2V0QXJyYXlJdGVtVmFsdWUoaXRlbSkgfHwgJycgfCBlbnVtQ29sb3JQaWNrZXJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0W3ZhbHVlXT1cImdldEFycmF5SXRlbVZhbHVlKGl0ZW0pXCIgLz5cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9wLW92ZXJsYXlQYW5lbD5cclxuXHRcdFx0fVxyXG5cdFx0PC9kaXY+XHJcblx0fSBAZWxzZSB7XHJcblx0XHRAaWYgKGRpc3BsYXkoKSA9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0PGlcclxuXHRcdFx0XHRjbGFzcz1cInBpIHBpLWV4Y2xhbWF0aW9uLWNpcmNsZVwiXHJcblx0XHRcdFx0c3R5bGU9XCJjb2xvcjogcmVkXCJcclxuXHRcdFx0XHRbcFRvb2x0aXBdPVwidGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgndmFsaWRhdGlvbnMuaW52YWxpZERhdGFGb3JtYXQnKVwiPlxyXG5cdFx0XHQ8L2k+XHJcblx0XHR9IEBlbHNlIHtcclxuXHRcdFx0PHNwYW4gY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG5cdFx0XHRcdEBpZiAoc2hvd0NvcHlJY29uKCkpIHtcclxuXHRcdFx0XHRcdDxpXHJcblx0XHRcdFx0XHRcdGNsYXNzPVwicGkgcGktY29weSBjdXJzb3ItcG9pbnRlclwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoZGlzcGxheSgpPy50b1N0cmluZygpKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJmb250LXNpemU6IDFyZW07IGNvbG9yOiBncmVlblwiPjwvaT5cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0PHNwYW5cclxuXHRcdFx0XHRcdFtwVG9vbHRpcF09XCJcclxuXHRcdFx0XHRcdFx0dHlwZSgpID09PSAndGV4dCcgJiYgaXNUZXh0Q2xhbXAoKSAmJiBkaXNwbGF5KCk/LnRvU3RyaW5nKCkubGVuZ3RoID4gdGV4dENsYW1wQ2hhcmFjdGVycygpID9cclxuXHRcdFx0XHRcdFx0XHRkaXNwbGF5KCk/LnRvU3RyaW5nKClcclxuXHRcdFx0XHRcdFx0Olx0JydcclxuXHRcdFx0XHRcdFwiXHJcblx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxyXG5cdFx0XHRcdFx0W2NsYXNzLnRleHQtbm8td3JhcF09XCJpc1RleHRDbGFtcCgpXCJcclxuXHRcdFx0XHRcdFtzdHlsZV09XCJpc0NsaWNrYWJsZSgpID8geyAndGV4dC1kZWNvcmF0aW9uJzogJ3VuZGVybGluZScsIGNvbG9yOiAnIzAwMDBFRScsIGN1cnNvcjogJ3BvaW50ZXInIH0gOiAnJ1wiPlxyXG5cdFx0XHRcdFx0QGlmICh0eXBlKCkgPT09ICdudW1iZXInIHx8IHR5cGUoKSA9PT0gJ2RlY2ltYWwnKSB7XHJcblx0XHRcdFx0XHRcdHt7IG1vZGVsKCkgfCBudW1iZXI6IGdldE51bWJlckZvcm1hdCgpIDogJ3RyLVRSJyB9fVxyXG5cdFx0XHRcdFx0fSBAZWxzZSBpZiAodHlwZSgpID09PSAnYmlnX2RlY2ltYWwnKSB7XHJcblx0XHRcdFx0XHRcdHt7IG1vZGVsKCkgfCByb3VuZE51bWJlcjogYmlnRGVjaW1hbFNjYWxlKCkgOiBiaWdEZWNpbWFsUm91bmRpbmdNb2RlKCkgOiAndHItVFInIH19XHJcblx0XHRcdFx0XHR9IEBlbHNlIGlmICh0eXBlKCkgPT09ICdjdXJyZW5jeScpIHtcclxuXHRcdFx0XHRcdFx0e3sgbW9kZWwoKSB8IGN1cnJlbmN5OiBmb3JtYXQoKSA/PyAnVFJZJyA6ICdzeW1ib2wnIDogJzEuMC0yJyB9fVxyXG5cdFx0XHRcdFx0fSBAZWxzZSBpZiAodHlwZSgpID09PSAndGV4dCcgJiYgaXNUZXh0Q2xhbXAoKSkge1xyXG5cdFx0XHRcdFx0XHR7e1xyXG5cdFx0XHRcdFx0XHRcdGRpc3BsYXkoKS5sZW5ndGggPiB0ZXh0Q2xhbXBDaGFyYWN0ZXJzKCkgPyBkaXNwbGF5KCkuc2xpY2UoMCwgdGV4dENsYW1wQ2hhcmFjdGVycygpKSArICcuLi4nIDogZGlzcGxheSgpXHJcblx0XHRcdFx0XHRcdH19XHJcblx0XHRcdFx0XHR9IEBlbHNlIHtcclxuXHRcdFx0XHRcdFx0e3sgZGlzcGxheSgpIH19XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHQ8L3NwYW4+XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiJdfQ==
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS92YWx1ZS9zcmMvdmFsdWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS92YWx1ZS9zcmMvdmFsdWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0sbUJBQW1CLENBQUM7QUFHdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sZ0NBQWdDLENBQUM7Ozs7Ozs7QUFrQ3hDLE1BQU0sT0FBTyxjQUFjO0lBMEIxQixZQUNRLGdCQUFrQyxFQUN4QixxQkFBNEMsRUFDNUMsY0FBOEI7UUFGeEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN4QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtR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bmN5UGlwZSwgRGVjaW1hbFBpcGUsIFNsaWNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuXHJcbmltcG9ydCB7IFRyYW5zbG9jb01vZHVsZSwgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0BuZ25lYXQvdHJhbnNsb2NvJztcclxuXHJcbmltcG9ydCB7IFNlbGVjdGlvbkdyb3VwU2VydmljZSB9IGZyb20gJ2FyaWwvdGhlbWUvbGF5b3V0JztcclxuaW1wb3J0IHsgQmFkZ2VDb21wb25lbnQgfSBmcm9tICdhcmlsL3VpL2JhZGdlJztcclxuaW1wb3J0IHsgRW51bUNvbG9yUGlja2VyUGlwZSB9IGZyb20gJ2FyaWwvdWkvbGliJztcclxuaW1wb3J0IHsgRGVjaW1hbFJvdW5kaW5nVHlwZSB9IGZyb20gJ2FyaWwvdXRpbC9saWInO1xyXG5pbXBvcnQgeyBSb3VuZE51bWJlclBpcGUgfSBmcm9tICdhcmlsL3V0aWwvcGlwZXMnO1xyXG5pbXBvcnQgJ2FyaWwvdXRpbC9wcmltaXRpdmUtZXh0ZW5zaW9ucyc7XHJcblxyXG50eXBlIFZhbHVlVHlwZXMgPVxyXG5cdHwgJ3RleHQnXHJcblx0fCAnbnVtYmVyJ1xyXG5cdHwgJ2Jvb2wnXHJcblx0fCAnZGVjaW1hbCdcclxuXHR8ICdiaWdfZGVjaW1hbCdcclxuXHR8ICdkYXRlJ1xyXG5cdHwgJ3Bhc3N3b3JkJ1xyXG5cdHwgJ2VudW0nXHJcblx0fCAnYXJyYXknXHJcblx0fCAnaXNvRGF0ZSdcclxuXHR8ICdjdXJyZW5jeSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHNlbGVjdG9yOiAnYXJpbC12YWx1ZScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL3ZhbHVlLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vdmFsdWUuY29tcG9uZW50LnNjc3MnLFxyXG5cdGltcG9ydHM6IFtcclxuXHRcdEJhZGdlQ29tcG9uZW50LFxyXG5cdFx0VG9vbHRpcE1vZHVsZSxcclxuXHRcdFRyYW5zbG9jb01vZHVsZSxcclxuXHRcdE92ZXJsYXlQYW5lbE1vZHVsZSxcclxuXHRcdEVudW1Db2xvclBpY2tlclBpcGUsXHJcblx0XHRTbGljZVBpcGUsXHJcblx0XHREZWNpbWFsUGlwZSxcclxuXHRcdEN1cnJlbmN5UGlwZSxcclxuXHRcdFJvdW5kTnVtYmVyUGlwZVxyXG5cdF0sXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcblx0cHJvdmlkZXJzOiBbRGlhbG9nU2VydmljZSwgRGVjaW1hbFBpcGVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWYWx1ZUNvbXBvbmVudCB7XHJcblx0bW9kZWwgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgYW55PigpO1xyXG5cdHR5cGUgPSBpbnB1dDxWYWx1ZVR5cGVzPigndGV4dCcpO1xyXG5cdGZvcm1hdCA9IGlucHV0PHN0cmluZz4oKTtcclxuXHRpc0NsaWNrYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRncm91cE5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XHJcblx0cGFyZW50U2VsZWN0aW9uS2V5ID0gaW5wdXQ8c3RyaW5nPignQUxMJyk7XHJcblx0aXNUZXh0Q2xhbXAgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuXHR0ZXh0Q2xhbXBDaGFyYWN0ZXJzID0gaW5wdXQ8bnVtYmVyPig1MCk7XHJcblx0c3R5bGUgPSBpbnB1dDxzdHJpbmc+KCk7XHJcblx0Y29weWFibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0c2hvdWxkU2hvd0NvcHlGb3JDbGFtcGVkVGV4dCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRzaG93Q29weUljb24gPSBjb21wdXRlZChcclxuXHRcdCgpID0+XHJcblx0XHRcdCghdGhpcy5zaG91bGRTaG93Q29weUZvckNsYW1wZWRUZXh0KCkgJiYgdGhpcy5jb3B5YWJsZSgpKSB8fFxyXG5cdFx0XHQodGhpcy5zaG91bGRTaG93Q29weUZvckNsYW1wZWRUZXh0KCkgJiYgdGhpcy5tb2RlbCgpLmxlbmd0aCA+IHRoaXMudGV4dENsYW1wQ2hhcmFjdGVycygpKVxyXG5cdCk7XHJcblxyXG5cdC8vIG9ubHkgZm9yIGFycmF5IHR5cGVcclxuXHRhcnJheVR5cGVEaXNwbGF5TmFtZSA9IGlucHV0PHN0cmluZz4oJ3ZhbHVlRGVzYycpO1xyXG5cdGFycmF5VHlwZU1heEJhZGdlQ291bnQgPSBpbnB1dDxudW1iZXI+KDMpO1xyXG5cclxuXHQvLyBvbmx5IGZvciBiaWdfZGVjaW1hbCB0eXBlXHJcblx0YmlnRGVjaW1hbFJvdW5kaW5nTW9kZSA9IGlucHV0PERlY2ltYWxSb3VuZGluZ1R5cGU+KCk7XHJcblx0YmlnRGVjaW1hbFNjYWxlID0gaW5wdXQ8bnVtYmVyPigpO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyB0cmFuc2xvY29TZXJ2aWNlOiBUcmFuc2xvY29TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBzZWxlY3Rpb25Hcm91cFNlcnZpY2U6IFNlbGVjdGlvbkdyb3VwU2VydmljZSxcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXHJcblx0KSB7XHJcblx0XHR0aGlzLnRyYW5zbG9jb1NlcnZpY2UubGFuZ0NoYW5nZXMkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgobGFuZykgPT4ge1xyXG5cdFx0XHR0aGlzLmxhbmdTaWduYWwuc2V0KGxhbmcpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRsYW5nU2lnbmFsID0gc2lnbmFsKHRoaXMudHJhbnNsb2NvU2VydmljZS5nZXRBY3RpdmVMYW5nKCkpO1xyXG5cclxuXHRnZXROdW1iZXJGb3JtYXQoKTogc3RyaW5nIHtcclxuXHRcdGlmICh0aGlzLnR5cGUoKSA9PT0gJ251bWJlcicpIHJldHVybiAnMS4wLTAnO1xyXG5cdFx0ZWxzZSBpZiAodGhpcy50eXBlKCkgPT09ICdkZWNpbWFsJykge1xyXG5cdFx0XHRjb25zdCBmb3JtYXQgPSB0aGlzLmZvcm1hdCgpO1xyXG5cclxuXHRcdFx0aWYgKCFmb3JtYXQpIHJldHVybiAnMS4wLTMnO1xyXG5cclxuXHRcdFx0Ly8gRcSfZXIgZm9ybWF0IEFuZ3VsYXIgRGVjaW1hbFBpcGUgZm9ybWF0xLFuZGF5c2EgZGlyZWt0IGt1bGxhblxyXG5cdFx0XHRpZiAoZm9ybWF0ICYmIHR5cGVvZiBmb3JtYXQgPT09ICdzdHJpbmcnICYmIGZvcm1hdC5tYXRjaCgvXlxcZCtcXC5cXGQrLVxcZCskLykpIHtcclxuXHRcdFx0XHRyZXR1cm4gZm9ybWF0O1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIEXEn2VyIGVza2kgZm9ybWF0IHN0cmluZydpIHZhcnNhICjDtnJuOiAjLjAwKSBvbnUgw6dldmlyXHJcblx0XHRcdGlmIChmb3JtYXQgJiYgdHlwZW9mIGZvcm1hdCA9PT0gJ3N0cmluZycgJiYgZm9ybWF0LmluY2x1ZGVzKCcuJykpIHtcclxuXHRcdFx0XHRjb25zdCBkZWNpbWFsUGxhY2VzID0gZm9ybWF0LnNwbGl0KCcuJylbMV0ubGVuZ3RoO1xyXG5cdFx0XHRcdHJldHVybiBgMS4ke2RlY2ltYWxQbGFjZXN9LSR7ZGVjaW1hbFBsYWNlc31gO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gJyc7XHJcblx0fVxyXG5cclxuXHRjb2xvckxpc3QgPSBbXHJcblx0XHQnIzE4OTBGRicsXHJcblx0XHQnI0ZBQUQxNCcsXHJcblx0XHQnIzUyQzQxQScsXHJcblx0XHQnIzVENkQ3RScsXHJcblx0XHQnI0ZGNkI2QicsXHJcblx0XHQnIzEzQzJDMicsXHJcblx0XHQnIzU4RDY4RCcsXHJcblx0XHQnIzcyMkVEMScsXHJcblx0XHQnIzg1QzFFOScsXHJcblx0XHQnI2M0OWUwNWZmJ1xyXG5cdF07XHJcblxyXG5cdGRpc3BsYXkgPSBjb21wdXRlZCgoKSA9PiB7XHJcblx0XHRzd2l0Y2ggKHRoaXMudHlwZSgpKSB7XHJcblx0XHRcdGNhc2UgJ3RleHQnOlxyXG5cdFx0XHRjYXNlICdudW1iZXInOlxyXG5cdFx0XHRjYXNlICdkZWNpbWFsJzpcclxuXHRcdFx0Y2FzZSAnY3VycmVuY3knOlxyXG5cdFx0XHRjYXNlICdiaWdfZGVjaW1hbCc6XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMubW9kZWwoKTtcclxuXHRcdFx0Y2FzZSAnZGF0ZSc6XHJcblx0XHRcdFx0cmV0dXJuICg8bnVtYmVyPnRoaXMubW9kZWwoKSkubG9uZ1RvU3RyaW5nKHRoaXMuZm9ybWF0KCkgPz8gJ3RpbWUnKTtcclxuXHRcdFx0Y2FzZSAncGFzc3dvcmQnOlxyXG5cdFx0XHRcdHJldHVybiAoPHN0cmluZz50aGlzLm1vZGVsKCkpLnJlcGxhY2UoLy4vZywgJyonKTtcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKFwiSW52YWxpZCB0eXBlOiAnXCIgKyB0aGlzLnR5cGUoKSArIFwiJ1wiKTtcclxuXHRcdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblx0fSk7XHJcblxyXG5cdGVudW1TZWxlY3Rpb25EaXNwbGF5ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG5cdFx0Y29uc3QgY3VycmVudExhbmcgPSB0aGlzLmxhbmdTaWduYWwoKTtcclxuXHJcblx0XHRjb25zdCBzZWxlY3Rpb25Hcm91cCA9XHJcblx0XHRcdHRoaXMuc2VsZWN0aW9uR3JvdXBTZXJ2aWNlLnNlbGVjdGlvbkdyb3VwcygpW2Ake3RoaXMuZ3JvdXBOYW1lKCkhfX4ke3RoaXMucGFyZW50U2VsZWN0aW9uS2V5KCkhfWBdO1xyXG5cclxuXHRcdGlmICghc2VsZWN0aW9uR3JvdXApIHtcclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25Hcm91cFNlcnZpY2UuZmV0Y2hFbnVtKHRoaXMuZ3JvdXBOYW1lKCkhLCB0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpISk7XHJcblx0XHRcdHJldHVybiB0aGlzLm1vZGVsKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgcmF3TW9kZWwgPSB0aGlzLm1vZGVsKCk7XHJcblx0XHRjb25zdCBrZXkgPVxyXG5cdFx0XHR0eXBlb2YgcmF3TW9kZWwgPT09ICdvYmplY3QnICYmIHJhd01vZGVsICE9PSBudWxsICYmICd2YWx1ZScgaW4gcmF3TW9kZWwgPyByYXdNb2RlbC52YWx1ZVxyXG5cdFx0XHQ6IHR5cGVvZiByYXdNb2RlbCA9PT0gJ2Jvb2xlYW4nID8gU3RyaW5nKHJhd01vZGVsKVxyXG5cdFx0XHQ6IHJhd01vZGVsO1xyXG5cclxuXHRcdGNvbnN0IHNlbGVjdGlvbkl0ZW0gPSBzZWxlY3Rpb25Hcm91cC5zZWxlY3Rpb25JdGVtcy5maW5kKCh0KSA9PiB0LnNlbGVjdGlvbktleSA9PT0ga2V5KSBhcyB7XHJcblx0XHRcdHNlbGVjdGlvbk11bHRpTGFuZ3VhZ2VEaXNwbGF5cz86IHsgW2xhbmc6IHN0cmluZ106IHN0cmluZyB9O1xyXG5cdFx0XHRzZWxlY3Rpb25EaXNwbGF5Pzogc3RyaW5nO1xyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoIXNlbGVjdGlvbkl0ZW0pIHJldHVybiBrZXk7XHJcblxyXG5cdFx0cmV0dXJuIHNlbGVjdGlvbkl0ZW0uc2VsZWN0aW9uTXVsdGlMYW5ndWFnZURpc3BsYXlzPy5bY3VycmVudExhbmddID8/IHNlbGVjdGlvbkl0ZW0uc2VsZWN0aW9uRGlzcGxheSA/PyBrZXk7XHJcblx0fSk7XHJcblxyXG5cdGVudW1CYWRnZUJhY2tncm91bmRDb2xvciA9IGNvbXB1dGVkKCgpID0+IHtcclxuXHRcdGlmICh0eXBlb2YgdGhpcy5tb2RlbCgpID09PSAnYm9vbGVhbicpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMubW9kZWwoKSA/ICcjMjJjNTVlJyA6ICcjZWY0NDQ0JzsgLy8gdHJ1ZSBpw6dpbiB5ZcWfaWwsIGZhbHNlIGnDp2luIGvEsXJtxLF6xLFcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzZWxlY3Rpb25Hcm91cCA9XHJcblx0XHRcdHRoaXMuc2VsZWN0aW9uR3JvdXBTZXJ2aWNlLnNlbGVjdGlvbkdyb3VwcygpW2Ake3RoaXMuZ3JvdXBOYW1lKCkhfX4ke3RoaXMucGFyZW50U2VsZWN0aW9uS2V5KCkhfWBdO1xyXG5cdFx0Y29uc3Qgc2VsZWN0aW9uSXRlbXMgPSBzZWxlY3Rpb25Hcm91cD8uc2VsZWN0aW9uSXRlbXMgPz8gW107XHJcblxyXG5cdFx0Y29uc3Qgc2VsZWN0aW9uSXRlbSA9IHNlbGVjdGlvbkl0ZW1zLmZpbmQoKHQpID0+IHQuc2VsZWN0aW9uS2V5ID09PSB0aGlzLm1vZGVsKCkpO1xyXG5cclxuXHRcdGlmICghc2VsZWN0aW9uSXRlbSkge1xyXG5cdFx0XHRyZXR1cm4gJyMxODkwRkYnO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLmNvbG9yTGlzdFtzZWxlY3Rpb25JdGVtLnNob3dPcmRlcl0gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5jb2xvckxpc3Rbc2VsZWN0aW9uSXRlbS5zaG93T3JkZXJdO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuICcjQTJBRkZGJztcclxuXHR9KTtcclxuXHJcblx0Z2V0QXJyYXlJdGVtVmFsdWUoaXRlbTogYW55KTogYW55IHtcclxuXHRcdHJldHVybiBpdGVtW3RoaXMuYXJyYXlUeXBlRGlzcGxheU5hbWUoKV07XHJcblx0fVxyXG5cclxuXHRpc01vZGVsQXJyYXkgPSBjb21wdXRlZCgoKSA9PiB7XHJcblx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsKCkpO1xyXG5cdH0pO1xyXG5cclxuXHQvLyBHZXQgZW51bSBkaXNwbGF5IGZvciBhcnJheSBpdGVtc1xyXG5cdGVudW1BcnJheURpc3BsYXlzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG5cdFx0aWYgKCF0aGlzLmlzTW9kZWxBcnJheSgpIHx8ICFBcnJheS5pc0FycmF5KHRoaXMubW9kZWwoKSkpIHJldHVybiBbXTtcclxuXHJcblx0XHRjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMubGFuZ1NpZ25hbCgpO1xyXG5cdFx0Y29uc3Qgc2VsZWN0aW9uR3JvdXAgPVxyXG5cdFx0XHR0aGlzLnNlbGVjdGlvbkdyb3VwU2VydmljZS5zZWxlY3Rpb25Hcm91cHMoKVtgJHt0aGlzLmdyb3VwTmFtZSgpIX1+JHt0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpIX1gXTtcclxuXHJcblx0XHRpZiAoIXNlbGVjdGlvbkdyb3VwKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0aW9uR3JvdXBTZXJ2aWNlLmZldGNoRW51bSh0aGlzLmdyb3VwTmFtZSgpISwgdGhpcy5wYXJlbnRTZWxlY3Rpb25LZXkoKSEpO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5tb2RlbCgpIGFzIHN0cmluZ1tdO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLm1vZGVsKCkubWFwKChpdGVtOiBhbnkpID0+IHtcclxuXHRcdFx0Y29uc3Qga2V5ID1cclxuXHRcdFx0XHR0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgJiYgaXRlbSAhPT0gbnVsbCAmJiAndmFsdWUnIGluIGl0ZW0gPyBpdGVtLnZhbHVlXHJcblx0XHRcdFx0OiB0eXBlb2YgaXRlbSA9PT0gJ2Jvb2xlYW4nID8gU3RyaW5nKGl0ZW0pXHJcblx0XHRcdFx0OiBpdGVtO1xyXG5cclxuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uSXRlbSA9IHNlbGVjdGlvbkdyb3VwLnNlbGVjdGlvbkl0ZW1zLmZpbmQoKHQpID0+IHQuc2VsZWN0aW9uS2V5ID09PSBrZXkpIGFzIHtcclxuXHRcdFx0XHRzZWxlY3Rpb25NdWx0aUxhbmd1YWdlRGlzcGxheXM/OiB7IFtsYW5nOiBzdHJpbmddOiBzdHJpbmcgfTtcclxuXHRcdFx0XHRzZWxlY3Rpb25EaXNwbGF5Pzogc3RyaW5nO1xyXG5cdFx0XHR9O1xyXG5cclxuXHRcdFx0aWYgKCFzZWxlY3Rpb25JdGVtKSByZXR1cm4ga2V5O1xyXG5cclxuXHRcdFx0cmV0dXJuIHNlbGVjdGlvbkl0ZW0uc2VsZWN0aW9uTXVsdGlMYW5ndWFnZURpc3BsYXlzPy5bY3VycmVudExhbmddID8/IHNlbGVjdGlvbkl0ZW0uc2VsZWN0aW9uRGlzcGxheSA/PyBrZXk7XHJcblx0XHR9KSBhcyBzdHJpbmdbXTtcclxuXHR9KTtcclxuXHJcblx0Ly8gR2V0IGVudW0gYmFja2dyb3VuZCBjb2xvcnMgZm9yIGFycmF5IGl0ZW1zXHJcblx0ZW51bUFycmF5QmFja2dyb3VuZENvbG9ycyA9IGNvbXB1dGVkKCgpID0+IHtcclxuXHRcdGlmICghdGhpcy5pc01vZGVsQXJyYXkoKSB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsKCkpKSByZXR1cm4gW107XHJcblxyXG5cdFx0Y29uc3Qgc2VsZWN0aW9uR3JvdXAgPVxyXG5cdFx0XHR0aGlzLnNlbGVjdGlvbkdyb3VwU2VydmljZS5zZWxlY3Rpb25Hcm91cHMoKVtgJHt0aGlzLmdyb3VwTmFtZSgpIX1+JHt0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpIX1gXTtcclxuXHRcdGNvbnN0IHNlbGVjdGlvbkl0ZW1zID0gc2VsZWN0aW9uR3JvdXA/LnNlbGVjdGlvbkl0ZW1zID8/IFtdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLm1vZGVsKCkubWFwKChpdGVtOiBhbnkpID0+IHtcclxuXHRcdFx0aWYgKHR5cGVvZiBpdGVtID09PSAnYm9vbGVhbicpIHtcclxuXHRcdFx0XHRyZXR1cm4gaXRlbSA/ICcjMjJjNTVlJyA6ICcjZWY0NDQ0JztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uSXRlbSA9IHNlbGVjdGlvbkl0ZW1zLmZpbmQoKHQpID0+IHQuc2VsZWN0aW9uS2V5ID09PSBpdGVtKTtcclxuXHJcblx0XHRcdGlmICghc2VsZWN0aW9uSXRlbSkge1xyXG5cdFx0XHRcdHJldHVybiAnIzE4OTBGRic7XHJcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jb2xvckxpc3Rbc2VsZWN0aW9uSXRlbS5zaG93T3JkZXJdICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xvckxpc3Rbc2VsZWN0aW9uSXRlbS5zaG93T3JkZXJdO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiAnI0EyQUZGRic7XHJcblx0XHR9KTtcclxuXHR9KTtcclxuXHJcblx0Y29weVRvQ2xpcGJvYXJkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuXHRcdGlmICghdmFsdWUpIHJldHVybjtcclxuXHRcdG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHZhbHVlKS50aGVuKFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xyXG5cdFx0XHRcdFx0c2V2ZXJpdHk6ICdzdWNjZXNzJyxcclxuXHRcdFx0XHRcdHN1bW1hcnk6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ21lc3NhZ2VzLnN1Y2Nlc3NNZXNzYWdlSGVhZGVyJyksXHJcblx0XHRcdFx0XHRkZXRhaWw6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ21lc3NhZ2VzLmNvcHlUb0NsaXBib2FyZFN1Y2Nlc3MnKSxcclxuXHRcdFx0XHRcdGtleTogJ3RvYXN0LXJvb3QnXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdChlcnIpID0+IHtcclxuXHRcdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcblx0XHRcdFx0XHRzZXZlcml0eTogJ2Vycm9yJyxcclxuXHRcdFx0XHRcdHN1bW1hcnk6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ21lc3NhZ2VzLnVuc3VjY2Vzc2Z1bE1lc3NhZ2VIZWFkZXInKSxcclxuXHRcdFx0XHRcdGRldGFpbDogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnbWVzc2FnZXMuY29weVRvQ2xpcGJvYXJkRXJyb3InKSxcclxuXHRcdFx0XHRcdGtleTogJ3RvYXN0LXJvb3QnXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsIkBpZiAobW9kZWwoKSA9PSB1bmRlZmluZWQgfHwgbW9kZWwoKSA9PSBudWxsKSB7XHJcblx0PGlcclxuXHRcdGNsYXNzPVwicGkgcGktbWludXNcIlxyXG5cdFx0c3R5bGU9XCJjb2xvcjogcmVkXCJcclxuXHRcdFtwVG9vbHRpcF09XCJ0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCd2YWxpZGF0aW9ucy5ub0l0ZW1Ub1Nob3cnKVwiPjwvaT5cclxufSBAZWxzZSB7XHJcblx0QGlmICh0eXBlKCkgPT0gJ2Jvb2wnKSB7XHJcblx0XHRAaWYgKCEhbW9kZWwoKSkge1xyXG5cdFx0XHQ8aSBjbGFzcz1cInBpIHBpLWNoZWNrXCIgc3R5bGU9XCJjb2xvcjogZ3JlZW5cIj48L2k+XHJcblx0XHR9IEBlbHNlIHtcclxuXHRcdFx0PGkgY2xhc3M9XCJwaSBwaS10aW1lc1wiIHN0eWxlPVwiY29sb3I6IGNyaW1zb25cIj48L2k+XHJcblx0XHR9XHJcblx0fSBAZWxzZSBpZiAodHlwZSgpID09PSAnZW51bScpIHtcclxuXHRcdEBpZiAoaXNNb2RlbEFycmF5KCkpIHtcclxuXHRcdFx0PGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0xXCI+XHJcblx0XHRcdFx0QGZvciAoZGlzcGxheSBvZiBlbnVtQXJyYXlEaXNwbGF5cygpLnNsaWNlKDAsIDIpOyB0cmFjayBkaXNwbGF5OyBsZXQgaSA9ICRpbmRleCkge1xyXG5cdFx0XHRcdFx0PGFyaWwtYmFkZ2UgW2JhY2tncm91bmRdPVwiZW51bUFycmF5QmFja2dyb3VuZENvbG9ycygpW2ldXCIgW3ZhbHVlXT1cImRpc3BsYXlcIiBbdGV4dENsYW1wQ2hhcmFjdGVyc109XCJ0ZXh0Q2xhbXBDaGFyYWN0ZXJzKClcIiAvPlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRAaWYgKGVudW1BcnJheURpc3BsYXlzKCkubGVuZ3RoID4gMikge1xyXG5cdFx0XHRcdFx0PGkgY2xhc3M9XCJwaSBwaS1lbGxpcHNpcy12IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImVudW1PcC50b2dnbGUoJGV2ZW50KVwiPjwvaT5cclxuXHJcblx0XHRcdFx0XHQ8cC1vdmVybGF5UGFuZWwgI2VudW1PcCBjbGFzcz1cInNoYWRvdy00XCIgYXBwZW5kVG89XCJib2R5XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0yIG1heC13LTMwcmVtIG1heC1oLTIwcmVtIHByLTMgb3ZlcmZsb3cteS1hdXRvXCI+XHJcblx0XHRcdFx0XHRcdFx0QGZvciAoZGlzcGxheSBvZiBlbnVtQXJyYXlEaXNwbGF5cygpIHwgc2xpY2U6IDI7IHRyYWNrIGRpc3BsYXk7IGxldCBpID0gJGluZGV4KSB7XHJcblx0XHRcdFx0XHRcdFx0XHQ8YXJpbC1iYWRnZSBbYmFja2dyb3VuZF09XCJlbnVtQXJyYXlCYWNrZ3JvdW5kQ29sb3JzKClbaSArIDJdXCIgW3ZhbHVlXT1cImRpc3BsYXlcIiBbdGV4dENsYW1wQ2hhcmFjdGVyc109XCJ0ZXh0Q2xhbXBDaGFyYWN0ZXJzKClcIiAvPlxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L3Atb3ZlcmxheVBhbmVsPlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0PC9kaXY+XHJcblx0XHR9IEBlbHNlIHtcclxuXHRcdFx0PGFyaWwtYmFkZ2UgW2JhY2tncm91bmRdPVwiZW51bUJhZGdlQmFja2dyb3VuZENvbG9yKClcIiBbdmFsdWVdPVwiZW51bVNlbGVjdGlvbkRpc3BsYXkoKVwiIFt0ZXh0Q2xhbXBDaGFyYWN0ZXJzXT1cInRleHRDbGFtcENoYXJhY3RlcnMoKVwiIC8+XHJcblx0XHR9XHJcblx0fSBAZWxzZSBpZiAodHlwZSgpID09PSAnYXJyYXknKSB7XHJcblx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cclxuXHRcdFx0QGZvciAoaXRlbSBvZiBtb2RlbCgpLnNsaWNlKDAsIGFycmF5VHlwZU1heEJhZGdlQ291bnQoKSk7IHRyYWNrIGl0ZW0pIHtcclxuXHRcdFx0XHQ8YXJpbC1iYWRnZSBbYmFja2dyb3VuZF09XCJnZXRBcnJheUl0ZW1WYWx1ZShpdGVtKSB8fCAnJyB8IGVudW1Db2xvclBpY2tlclwiIFt2YWx1ZV09XCJnZXRBcnJheUl0ZW1WYWx1ZShpdGVtKVwiIFt0ZXh0Q2xhbXBDaGFyYWN0ZXJzXT1cInRleHRDbGFtcENoYXJhY3RlcnMoKVwiIC8+XHJcblx0XHRcdH1cclxuXHRcdFx0QGlmIChtb2RlbCgpLmxlbmd0aCA+IGFycmF5VHlwZU1heEJhZGdlQ291bnQoKSkge1xyXG5cdFx0XHRcdDxpIGNsYXNzPVwicGkgcGktZWxsaXBzaXMtdiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvcC50b2dnbGUoJGV2ZW50KVwiPjwvaT5cclxuXHJcblx0XHRcdFx0PHAtb3ZlcmxheVBhbmVsICNvcCBjbGFzcz1cInNoYWRvdy00XCIgYXBwZW5kVG89XCJib2R5XCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMiBtYXgtdy0zMHJlbSBtYXgtaC0yMHJlbSBwci0zIG92ZXJmbG93LXktYXV0b1wiPlxyXG5cdFx0XHRcdFx0XHRAZm9yIChpdGVtIG9mIG1vZGVsKCkgfCBzbGljZTogYXJyYXlUeXBlTWF4QmFkZ2VDb3VudCgpOyB0cmFjayBpdGVtKSB7XHJcblx0XHRcdFx0XHRcdFx0PGFyaWwtYmFkZ2VcclxuXHRcdFx0XHRcdFx0XHRcdFtiYWNrZ3JvdW5kXT1cImdldEFycmF5SXRlbVZhbHVlKGl0ZW0pIHx8ICcnIHwgZW51bUNvbG9yUGlja2VyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFt2YWx1ZV09XCJnZXRBcnJheUl0ZW1WYWx1ZShpdGVtKVwiIC8+XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvcC1vdmVybGF5UGFuZWw+XHJcblx0XHRcdH1cclxuXHRcdDwvZGl2PlxyXG5cdH0gQGVsc2Uge1xyXG5cdFx0QGlmIChkaXNwbGF5KCkgPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdDxpXHJcblx0XHRcdFx0Y2xhc3M9XCJwaSBwaS1leGNsYW1hdGlvbi1jaXJjbGVcIlxyXG5cdFx0XHRcdHN0eWxlPVwiY29sb3I6IHJlZFwiXHJcblx0XHRcdFx0W3BUb29sdGlwXT1cInRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ3ZhbGlkYXRpb25zLmludmFsaWREYXRhRm9ybWF0JylcIj5cclxuXHRcdFx0PC9pPlxyXG5cdFx0fSBAZWxzZSB7XHJcblx0XHRcdDxzcGFuIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuXHRcdFx0XHRAaWYgKHNob3dDb3B5SWNvbigpKSB7XHJcblx0XHRcdFx0XHQ8aVxyXG5cdFx0XHRcdFx0XHRjbGFzcz1cInBpIHBpLWNvcHkgY3Vyc29yLXBvaW50ZXJcIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKGRpc3BsYXkoKT8udG9TdHJpbmcoKSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwiZm9udC1zaXplOiAxcmVtOyBjb2xvcjogZ3JlZW5cIj48L2k+XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdDxzcGFuXHJcblx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiXHJcblx0XHRcdFx0XHRcdHR5cGUoKSA9PT0gJ3RleHQnICYmIGlzVGV4dENsYW1wKCkgJiYgZGlzcGxheSgpPy50b1N0cmluZygpLmxlbmd0aCA+IHRleHRDbGFtcENoYXJhY3RlcnMoKSA/XHJcblx0XHRcdFx0XHRcdFx0ZGlzcGxheSgpPy50b1N0cmluZygpXHJcblx0XHRcdFx0XHRcdDpcdCcnXHJcblx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcclxuXHRcdFx0XHRcdFtjbGFzcy50ZXh0LW5vLXdyYXBdPVwiaXNUZXh0Q2xhbXAoKVwiXHJcblx0XHRcdFx0XHRbc3R5bGVdPVwiaXNDbGlja2FibGUoKSA/IHsgJ3RleHQtZGVjb3JhdGlvbic6ICd1bmRlcmxpbmUnLCBjb2xvcjogJyMwMDAwRUUnLCBjdXJzb3I6ICdwb2ludGVyJyB9IDogJydcIj5cclxuXHRcdFx0XHRcdEBpZiAodHlwZSgpID09PSAnbnVtYmVyJyB8fCB0eXBlKCkgPT09ICdkZWNpbWFsJykge1xyXG5cdFx0XHRcdFx0XHR7eyBtb2RlbCgpIHwgbnVtYmVyOiBnZXROdW1iZXJGb3JtYXQoKSA6ICd0ci1UUicgfX1cclxuXHRcdFx0XHRcdH0gQGVsc2UgaWYgKHR5cGUoKSA9PT0gJ2JpZ19kZWNpbWFsJykge1xyXG5cdFx0XHRcdFx0XHR7eyBtb2RlbCgpIHwgcm91bmROdW1iZXI6IGJpZ0RlY2ltYWxTY2FsZSgpIDogYmlnRGVjaW1hbFJvdW5kaW5nTW9kZSgpIDogJ3RyLVRSJyB9fVxyXG5cdFx0XHRcdFx0fSBAZWxzZSBpZiAodHlwZSgpID09PSAnY3VycmVuY3knKSB7XHJcblx0XHRcdFx0XHRcdHt7IG1vZGVsKCkgfCBjdXJyZW5jeTogZm9ybWF0KCkgPz8gJ1RSWScgOiAnc3ltYm9sJyA6ICcxLjAtMicgfX1cclxuXHRcdFx0XHRcdH0gQGVsc2UgaWYgKHR5cGUoKSA9PT0gJ3RleHQnICYmIGlzVGV4dENsYW1wKCkpIHtcclxuXHRcdFx0XHRcdFx0e3tcclxuXHRcdFx0XHRcdFx0XHRkaXNwbGF5KCkubGVuZ3RoID4gdGV4dENsYW1wQ2hhcmFjdGVycygpID8gZGlzcGxheSgpLnNsaWNlKDAsIHRleHRDbGFtcENoYXJhY3RlcnMoKSkgKyAnLi4uJyA6IGRpc3BsYXkoKVxyXG5cdFx0XHRcdFx0XHR9fVxyXG5cdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdHt7IGRpc3BsYXkoKSB9fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0PC9zcGFuPlxyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iXX0=
@@ -1,15 +1,16 @@
1
1
  import { Component, EventEmitter, Output, effect, input, signal } from '@angular/core';
2
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
2
3
  import { ReactiveFormsModule } from '@angular/forms';
3
4
  import { MultiSelectModule } from 'primeng/multiselect';
5
+ import { TooltipModule } from 'primeng/tooltip';
4
6
  import { TranslocoModule } from '@ngneat/transloco';
5
7
  import { DxSelectBoxModule } from 'devextreme-angular/ui/select-box';
6
- import { firstValueFrom } from 'rxjs';
7
- import DataSource from 'devextreme/data/data_source';
8
8
  import ArrayStore from 'devextreme/data/array_store';
9
+ import DataSource from 'devextreme/data/data_source';
10
+ import { firstValueFrom } from 'rxjs';
9
11
  import { API_CONFIGS } from 'aril/boot/config/api';
10
12
  import { Apps } from 'aril/boot/config/apps';
11
13
  import { BaseInputComponent, DXInputErrorMessagePipe, InputErrorMessagePipe, ValueAccessorDirective } from 'aril/ui/lib';
12
- import { TooltipModule } from 'primeng/tooltip';
13
14
  import * as i0 from "@angular/core";
14
15
  import * as i1 from "@angular/common/http";
15
16
  import * as i2 from "@ngneat/transloco";
@@ -74,7 +75,7 @@ export class EnumPickerComponent extends BaseInputComponent {
74
75
  this.updateSelectionItemsText();
75
76
  }
76
77
  });
77
- this.translocoService.langChanges$.subscribe(() => {
78
+ this.translocoService.langChanges$.pipe(takeUntilDestroyed()).subscribe(() => {
78
79
  if (this.selectionItems() && this.selectionItems()?.length > 0) {
79
80
  this.updateSelectionItemsText();
80
81
  }
@@ -187,8 +188,15 @@ export class EnumPickerComponent extends BaseInputComponent {
187
188
  }
188
189
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: EnumPickerComponent, decorators: [{
189
190
  type: Component,
190
- args: [{ standalone: true, selector: 'enum-picker[ngModel], enum-picker[formControl], enum-picker[formControlName]', imports: [ReactiveFormsModule, DxSelectBoxModule, DXInputErrorMessagePipe, TranslocoModule, MultiSelectModule, TooltipModule], providers: [InputErrorMessagePipe], hostDirectives: [ValueAccessorDirective], template: "@if (isMultiple()) {\r\n\t<p-multiSelect\r\n\t\t[options]=\"selectionItems() || items() || []\"\r\n\t\t[optionValue]=\"itemKey()\"\r\n\t\t[optionLabel]=\"itemText()\"\r\n\t\t[defaultLabel]=\"placeholder()\"\r\n\t\t[selectedItemsLabel]=\"selectedItemsLabel()\"\r\n\t\t[style]=\"style()\"\r\n\t\t[styleClass]=\"styleClass()\"\r\n\t\t[tooltip]=\"tooltip()\"\r\n\t\t[tooltipPosition]=\"tooltipPosition()\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n\t\t[maxSelectedLabels]=\"2\"\r\n\t\t[appendTo]=\"appendTo()\"\r\n\t\t[virtualScroll]=\"useVirtualScroll()\"\r\n\t\t[virtualScrollItemSize]=\"virtualScrollItemSize()\"\r\n\t\t[scrollHeight]=\"scrollHeight()\"\r\n\t\t[filter]=\"true\"\r\n\t\t[panelStyle]=\"{ 'max-width': '400px', 'min-width': 'auto' }\">\r\n\t\t<ng-template let-enum pTemplate=\"item\">\r\n\t\t\t<div [pTooltip]=\"enum[itemText()]?.length > textClampCharacters() ? enum[itemText()] : ''\">\r\n\t\t\t\t@if (enum[itemText()]?.length > textClampCharacters()) {\r\n\t\t\t\t\t{{ enum[itemText()].slice(0, textClampCharacters()) }}...\r\n\t\t\t\t} @else {\r\n\t\t\t\t\t{{ enum[itemText()] }}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</p-multiSelect>\r\n} @else {\r\n\t<dx-select-box\r\n [dataSource]=\"useVirtualScroll() ? selectBoxDataSource() : (selectionItems() || items() || [])\"\r\n\t\t[valueExpr]=\"itemKey()\"\r\n\t\t[displayExpr]=\"itemText()\"\r\n\t\t[searchEnabled]=\"true\"\r\n\t\t[searchExpr]=\"searchExpr()\"\r\n\t\t[tabIndex]=\"tabindex()\"\r\n\t\t[grouped]=\"grouped()\"\r\n\t\t[placeholder]=\"placeholder()\"\r\n\t\t[showClearButton]=\"showClearButton()\"\r\n\t\t[acceptCustomValue]=\"acceptCustomValue()\"\r\n\t\t(onCustomItemCreating)=\"onCustomItemCreating($event)\"\r\n\t\t[isValid]=\"ngControl?.control?.valid || ngControl?.control?.pristine || ngControl?.control?.disabled || false\"\r\n\t\t[validationError]=\"ngControl?.control?.errors | dxInputErrorMessage: ngControl?.control\"\r\n\t\tvalidationMessagePosition=\"top\"\r\n\t\t[noDataText]=\"translocoService.translate('messages.noDataToDisplay')\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged.emit($event.selectedItem);setTitle($event.selectedItem)\"\r\n [inputAttr]=\"{ 'title': selectedItemText }\">\r\n\t</dx-select-box>\r\n}\r\n" }]
191
+ args: [{ standalone: true, selector: 'enum-picker[ngModel], enum-picker[formControl], enum-picker[formControlName]', imports: [
192
+ ReactiveFormsModule,
193
+ DxSelectBoxModule,
194
+ DXInputErrorMessagePipe,
195
+ TranslocoModule,
196
+ MultiSelectModule,
197
+ TooltipModule
198
+ ], providers: [InputErrorMessagePipe], hostDirectives: [ValueAccessorDirective], template: "@if (isMultiple()) {\r\n\t<p-multiSelect\r\n\t\t[options]=\"selectionItems() || items() || []\"\r\n\t\t[optionValue]=\"itemKey()\"\r\n\t\t[optionLabel]=\"itemText()\"\r\n\t\t[defaultLabel]=\"placeholder()\"\r\n\t\t[selectedItemsLabel]=\"selectedItemsLabel()\"\r\n\t\t[style]=\"style()\"\r\n\t\t[styleClass]=\"styleClass()\"\r\n\t\t[tooltip]=\"tooltip()\"\r\n\t\t[tooltipPosition]=\"tooltipPosition()\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n\t\t[maxSelectedLabels]=\"2\"\r\n\t\t[appendTo]=\"appendTo()\"\r\n\t\t[virtualScroll]=\"useVirtualScroll()\"\r\n\t\t[virtualScrollItemSize]=\"virtualScrollItemSize()\"\r\n\t\t[scrollHeight]=\"scrollHeight()\"\r\n\t\t[filter]=\"true\"\r\n\t\t[panelStyle]=\"{ 'max-width': '400px', 'min-width': 'auto' }\">\r\n\t\t<ng-template let-enum pTemplate=\"item\">\r\n\t\t\t<div [pTooltip]=\"enum[itemText()]?.length > textClampCharacters() ? enum[itemText()] : ''\">\r\n\t\t\t\t@if (enum[itemText()]?.length > textClampCharacters()) {\r\n\t\t\t\t\t{{ enum[itemText()].slice(0, textClampCharacters()) }}...\r\n\t\t\t\t} @else {\r\n\t\t\t\t\t{{ enum[itemText()] }}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</p-multiSelect>\r\n} @else {\r\n\t<dx-select-box\r\n [dataSource]=\"useVirtualScroll() ? selectBoxDataSource() : (selectionItems() || items() || [])\"\r\n\t\t[valueExpr]=\"itemKey()\"\r\n\t\t[displayExpr]=\"itemText()\"\r\n\t\t[searchEnabled]=\"true\"\r\n\t\t[searchExpr]=\"searchExpr()\"\r\n\t\t[tabIndex]=\"tabindex()\"\r\n\t\t[grouped]=\"grouped()\"\r\n\t\t[placeholder]=\"placeholder()\"\r\n\t\t[showClearButton]=\"showClearButton()\"\r\n\t\t[acceptCustomValue]=\"acceptCustomValue()\"\r\n\t\t(onCustomItemCreating)=\"onCustomItemCreating($event)\"\r\n\t\t[isValid]=\"ngControl?.control?.valid || ngControl?.control?.pristine || ngControl?.control?.disabled || false\"\r\n\t\t[validationError]=\"ngControl?.control?.errors | dxInputErrorMessage: ngControl?.control\"\r\n\t\tvalidationMessagePosition=\"top\"\r\n\t\t[noDataText]=\"translocoService.translate('messages.noDataToDisplay')\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged.emit($event.selectedItem);setTitle($event.selectedItem)\"\r\n [inputAttr]=\"{ 'title': selectedItemText }\">\r\n\t</dx-select-box>\r\n}\r\n" }]
191
199
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.TranslocoService }], propDecorators: { onSelectionChanged: [{
192
200
  type: Output
193
201
  }] } });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS1idXNpbmVzcy9lbnVtUGlja2VyL3NyYy9lbnVtLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3VpLWJ1c2luZXNzL2VudW1QaWNrZXIvc3JjL2VudW0tcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLG1CQUFtQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxVQUFVLE1BQU0sNkJBQTZCLENBQUM7QUFDckQsT0FBTyxVQUFVLE1BQU0sNkJBQTZCLENBQUM7QUFFckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEVBQ04sa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQVVoRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsa0JBQWtCO0lBOEMxRCxZQUNrQixJQUFnQixFQUMxQixnQkFBa0M7UUFFekMsS0FBSyxFQUFFLENBQUM7UUFIUyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQzFCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUEvQzFDLG1CQUFjLEdBQUcsTUFBTSxDQUF5QixJQUFJLENBQUMsQ0FBQztRQUN0RCx3QkFBbUIsR0FBRyxNQUFNLENBQW9CLElBQUksQ0FBQyxDQUFDO1FBQzlDLDJCQUFzQixHQUFvQixFQUFFLENBQUM7UUFDckQ7O1dBRUc7UUFFSCxZQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLGFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsY0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0Qix1QkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsYUFBUSxHQUFHLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1QixVQUFLLEdBQUcsS0FBSyxFQUFtQixDQUFDO1FBQ2pDLGVBQVUsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbkMsMkdBQTJHO1FBQzNHLGlCQUFZLEdBQUcsS0FBSyxDQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN0Qix5RkFBeUY7UUFDekYsWUFBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QixvQkFBZSxHQUFHLEtBQUssQ0FBVSxJQUFJLENBQUMsQ0FBQztRQUN2QyxnQkFBVyxHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNoQyxlQUFVLEdBQUcsS0FBSyxDQUFvQixFQUFFLENBQUMsQ0FBQztRQUMxQyxzQkFBaUIsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDMUMsd0JBQW1CLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRXhDOztXQUVHO1FBQ0gscUJBQWdCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLDBCQUFxQixHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUMxQyxpQkFBWSxHQUFHLEtBQUssQ0FBUyxPQUFPLENBQUMsQ0FBQztRQUV0Qzs7V0FFRztRQUVILHVCQUFrQixHQUFHLEtBQUssQ0FBUyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsdUNBQXVDO1FBQ2pHLGFBQVEsR0FBRyxLQUFLLENBQVMsTUFBTSxDQUFDLENBQUM7UUFDakMsVUFBSyxHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUMxQixlQUFVLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLFlBQU8sR0FBRyxLQUFLLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDNUIsb0JBQWUsR0FBRyxLQUFLLENBQU0sS0FBSyxDQUFDLENBQUM7UUFFMUIsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFPaEUsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztRQUVILDBGQUEwRjtRQUMxRixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDakMsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFLLElBQUksQ0FBQyxjQUFjLEVBQXNCLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyRixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVc7UUFDbkIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM3RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQjtRQUN0QixNQUFNLE9BQU8sR0FBaUM7WUFDN0MsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7U0FDM0IsQ0FBQztRQUVGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pELENBQUM7YUFBTSxDQUFDO1lBQ1AsT0FBTyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hELENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQztZQUNKLE1BQU0sY0FBYyxHQUFHLE1BQU0sY0FBYyxDQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBb0IsT0FBTyxHQUFHLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyxDQUM3RSxDQUFDO1lBRUYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGNBQWMsRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1FBQ3BFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTyx3QkFBd0I7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsT0FBTztRQUNSLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxzQkFBc0I7YUFDN0MsTUFBTSxDQUFDLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNqRSxHQUFHLENBQUMsQ0FBQyxJQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUN0QixJQUFJLEVBQ0gsSUFBSSxFQUFFLDhCQUE4QixFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsQ0FBQztnQkFDakQsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0I7WUFDeEIsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtTQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsaUVBQWlFO0lBQ2pFLDBGQUEwRjtJQUMxRixrQ0FBa0M7UUFDakMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUN2RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQ3hCLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQ3RFLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQ3ZCLG9FQUFvRTtZQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTztZQUN0RSxNQUFNLFFBQVEsR0FBSSxZQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqRSxDQUFDO1FBQ0YsQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLENBQUMsWUFBWTtnQkFBRSxPQUFPO1lBRTFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRCxDQUFDO1FBQ0YsQ0FBQztJQUNGLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFVO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDeEIsT0FBTztRQUNSLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRztZQUNmLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDNUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSTtTQUM3QixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5QyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBRVEsMEJBQTBCLENBQUMsS0FBc0I7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxPQUFPO1FBQ1IsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQzNCLElBQUksVUFBVSxDQUFDO1lBQ2QsS0FBSyxFQUFFLElBQUksVUFBVSxDQUFDO2dCQUNyQixJQUFJLEVBQUUsS0FBSztnQkFDWCxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTthQUNuQixDQUFDO1lBQ0YsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsRUFBRTtTQUNaLENBQUMsQ0FDRixDQUFDO0lBQ0gsQ0FBQzs4R0ExTFcsbUJBQW1CO2tHQUFuQixtQkFBbUIsaTFHQUhwQixDQUFDLHFCQUFxQixDQUFDLDZHQzlCbkMsODJFQXFEQSwyQ0R4QlcsbUJBQW1CLHlUQUFFLGlCQUFpQiw0cUZBQUUsdUJBQXVCLDJEQUFFLGVBQWUsOEJBQUUsaUJBQWlCLDI3Q0FBRSxhQUFhOzsyRkFJaEgsbUJBQW1CO2tCQVIvQixTQUFTO2lDQUNHLElBQUksWUFDTiw4RUFBOEUsV0FFL0UsQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLGFBQ2xILENBQUMscUJBQXFCLENBQUMsa0JBQ2xCLENBQUMsc0JBQXNCLENBQUM7OEdBOEM5QixrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBlZmZlY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE11bHRpU2VsZWN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xvY29Nb2R1bGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XHJcbmltcG9ydCB7IER4U2VsZWN0Qm94TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3NlbGVjdC1ib3gnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IERhdGFTb3VyY2UgZnJvbSAnZGV2ZXh0cmVtZS9kYXRhL2RhdGFfc291cmNlJztcclxuaW1wb3J0IEFycmF5U3RvcmUgZnJvbSAnZGV2ZXh0cmVtZS9kYXRhL2FycmF5X3N0b3JlJztcclxuXHJcbmltcG9ydCB7IEFQSV9DT05GSUdTIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcGknO1xyXG5pbXBvcnQgeyBBcHBzIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuaW1wb3J0IHtcclxuXHRCYXNlSW5wdXRDb21wb25lbnQsXHJcblx0RFhJbnB1dEVycm9yTWVzc2FnZVBpcGUsXHJcblx0SW5wdXRFcnJvck1lc3NhZ2VQaXBlLFxyXG5cdFZhbHVlQWNjZXNzb3JEaXJlY3RpdmVcclxufSBmcm9tICdhcmlsL3VpL2xpYic7XHJcblxyXG5pbXBvcnQgeyBTZWxlY3RCb3hJdGVtLCBTZWxlY3Rpb25Hcm91cERUTywgU2VsZWN0aW9uSXRlbSwgU2VsZWN0aW9uUmVxdWVzdERUTyB9IGZyb20gJy4vaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHNlbGVjdG9yOiAnZW51bS1waWNrZXJbbmdNb2RlbF0sIGVudW0tcGlja2VyW2Zvcm1Db250cm9sXSwgZW51bS1waWNrZXJbZm9ybUNvbnRyb2xOYW1lXScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2VudW0tcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuXHRpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgRHhTZWxlY3RCb3hNb2R1bGUsIERYSW5wdXRFcnJvck1lc3NhZ2VQaXBlLCBUcmFuc2xvY29Nb2R1bGUsIE11bHRpU2VsZWN0TW9kdWxlLCBUb29sdGlwTW9kdWxlXSxcclxuXHRwcm92aWRlcnM6IFtJbnB1dEVycm9yTWVzc2FnZVBpcGVdLFxyXG5cdGhvc3REaXJlY3RpdmVzOiBbVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVudW1QaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlSW5wdXRDb21wb25lbnQge1xyXG5cdHNlbGVjdGlvbkl0ZW1zID0gc2lnbmFsPFNlbGVjdEJveEl0ZW1bXSB8IG51bGw+KG51bGwpO1xyXG5cdHNlbGVjdEJveERhdGFTb3VyY2UgPSBzaWduYWw8RGF0YVNvdXJjZSB8IG51bGw+KG51bGwpO1xyXG5cdHByaXZhdGUgb3JpZ2luYWxTZWxlY3Rpb25JdGVtczogU2VsZWN0aW9uSXRlbVtdID0gW107XHJcblx0LyoqXHJcblx0ICogU2luZ2xlIFNlbGVjdCBTdGF0ZXNcclxuXHQgKi9cclxuXHJcblx0aXRlbUtleSA9IGlucHV0KCdrZXknKTtcclxuXHRpdGVtVGV4dCA9IGlucHV0KCd0ZXh0Jyk7XHJcblx0Z3JvdXBOYW1lID0gaW5wdXQoJycpO1xyXG5cdHBhcmVudFNlbGVjdGlvbktleSA9IGlucHV0KG51bGwpO1xyXG5cdHRhYmluZGV4ID0gaW5wdXQ8bnVtYmVyPigwKTtcclxuXHRpdGVtcyA9IGlucHV0PFNlbGVjdEJveEl0ZW1bXT4oKTtcclxuXHRpc011bHRpcGxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdC8vIENyb3NzLXZhbGlkYXRpb24gUmVtb3ZlSXRlbSBhY3Rpb24gaWxlIHNldCBlZGlsaXI7IHZlcmlsZW4gc2VsZWN0aW9uS2V5J2xlcmkgaXRlbSBsaXN0ZXNpbmRlbiBmaWx0cmVsZXIuXHJcblx0ZXhjbHVkZWRLZXlzID0gaW5wdXQ8c3RyaW5nW10+KFtdKTtcclxuXHRzZWxlY3RlZEl0ZW1UZXh0ID0gJyc7XHJcblx0LyoqICogQGRlc2NyaXB0aW9uIHdoZW4gZ3JvdXBlZCA9IHRydWUsIG9wdGlvbiBpdGVtIHN0cnVjdHVyZSB7IGtleTpzdHJpbmcsIGl0ZW1zOltdIH0gKi9cclxuXHRncm91cGVkID0gaW5wdXQoZmFsc2UpO1xyXG5cdHNob3dDbGVhckJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xyXG5cdHBsYWNlaG9sZGVyID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblx0c2VhcmNoRXhwciA9IGlucHV0PHN0cmluZyB8IHN0cmluZ1tdPignJyk7XHJcblx0YWNjZXB0Q3VzdG9tVmFsdWUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0dGV4dENsYW1wQ2hhcmFjdGVycyA9IGlucHV0PG51bWJlcj4oNDApO1xyXG5cclxuXHQvKipcclxuXHQgKiBWaXJ0dWFsIFNjcm9sbCBTdGF0ZXNcclxuXHQgKi9cclxuXHR1c2VWaXJ0dWFsU2Nyb2xsID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdHZpcnR1YWxTY3JvbGxJdGVtU2l6ZSA9IGlucHV0PG51bWJlcj4oMzApO1xyXG5cdHNjcm9sbEhlaWdodCA9IGlucHV0PHN0cmluZz4oJzMwMHB4Jyk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE11bHRpIFNlbGVjdCBTdGF0ZXNcclxuXHQgKi9cclxuXHJcblx0c2VsZWN0ZWRJdGVtc0xhYmVsID0gaW5wdXQ8c3RyaW5nPignezB9ICBkZcSfZXIgc2XDp2lsZGknKTsgLy8gZGVmYXVsdCB2YWx1ZSAtPiAoezB9IGl0ZW1zIHNlbGVjdGVkXHJcblx0YXBwZW5kVG8gPSBpbnB1dDxzdHJpbmc+KCdib2R5Jyk7XHJcblx0c3R5bGUgPSBpbnB1dDxvYmplY3Q+KHt9KTtcclxuXHRzdHlsZUNsYXNzID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblx0dG9vbHRpcCA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cdHRvb2x0aXBQb3NpdGlvbiA9IGlucHV0PGFueT4oJ3RvcCcpO1xyXG5cclxuXHRAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RCb3hJdGVtPigpO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcclxuXHRcdHB1YmxpYyB0cmFuc2xvY29TZXJ2aWNlOiBUcmFuc2xvY29TZXJ2aWNlXHJcblx0KSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0ZWZmZWN0KCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuZ3JvdXBOYW1lKCkgfHwgdGhpcy5wYXJlbnRTZWxlY3Rpb25LZXkoKSkgdGhpcy5nZXRTZWxlY3Rpb25JdGVtcygpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gZXhjbHVkZWRLZXlzIGRlxJ9pxZ9pbmNlIGl0ZW0gbGlzdGVzaW5pIHllbmlkZW4gZmlsdHJlbGUgKG9yaWdpbmFsU2VsZWN0aW9uSXRlbXMga29ydW51cilcclxuXHRcdGVmZmVjdCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuZXhjbHVkZWRLZXlzKCk7XHJcblx0XHRcdGlmICh0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uSXRlbXNUZXh0KCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHRoaXMudHJhbnNsb2NvU2VydmljZS5sYW5nQ2hhbmdlcyQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0aW9uSXRlbXMoKSAmJiAodGhpcy5zZWxlY3Rpb25JdGVtcygpIGFzIFNlbGVjdEJveEl0ZW1bXSk/Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLnVwZGF0ZVNlbGVjdGlvbkl0ZW1zVGV4dCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHNldFRpdGxlKGV2ZW50PzogYW55KSB7XHJcblx0XHRpZiAoZXZlbnQgJiYgZXZlbnRbdGhpcy5pdGVtVGV4dCgpXS5sZW5ndGggPiAyNSkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbVRleHQgPSBldmVudCA/IGV2ZW50W3RoaXMuaXRlbVRleHQoKV0gOiAnJztcclxuXHRcdH1cclxuXHRcdHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoZXZlbnQpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2V0U2VsZWN0aW9uSXRlbXMoKSB7XHJcblx0XHRjb25zdCBwYXlsb2FkOiBQYXJ0aWFsPFNlbGVjdGlvblJlcXVlc3REVE8+ID0ge1xyXG5cdFx0XHRncm91cE5hbWU6IHRoaXMuZ3JvdXBOYW1lKClcclxuXHRcdH07XHJcblxyXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodGhpcy5wYXJlbnRTZWxlY3Rpb25LZXkoKSkpIHtcclxuXHRcdFx0cGF5bG9hZC5wYXJlbnRTZWxlY3Rpb25LZXlzID0gdGhpcy5wYXJlbnRTZWxlY3Rpb25LZXkoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHBheWxvYWQucGFyZW50U2VsZWN0aW9uS2V5ID0gdGhpcy5wYXJlbnRTZWxlY3Rpb25LZXkoKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBob3N0QXBpID0gQVBJX0NPTkZJR1MuZ2V0RXh0ZXJuYWxBcHBFbmRwb2ludChBcHBzLk1ORyk7XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uR3JvdXAgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuXHRcdFx0XHR0aGlzLmh0dHAucG9zdDxTZWxlY3Rpb25Hcm91cERUTz4oaG9zdEFwaSArICcvc2VsZWN0aW9uLWdyb3VwL2xvYWQnLCBwYXlsb2FkKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0dGhpcy5vcmlnaW5hbFNlbGVjdGlvbkl0ZW1zID0gc2VsZWN0aW9uR3JvdXA/LnNlbGVjdGlvbkl0ZW1zIHx8IFtdO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0dGhpcy5vcmlnaW5hbFNlbGVjdGlvbkl0ZW1zID0gW107XHJcblx0XHR9XHJcblx0XHR0aGlzLnVwZGF0ZVNlbGVjdGlvbkl0ZW1zVGV4dCgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVTZWxlY3Rpb25JdGVtc1RleHQoKSB7XHJcblx0XHRpZiAoIXRoaXMub3JpZ2luYWxTZWxlY3Rpb25JdGVtcyB8fCB0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXMubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0aW9uSXRlbXMuc2V0KG51bGwpO1xyXG5cdFx0XHR0aGlzLnNlbGVjdEJveERhdGFTb3VyY2Uuc2V0KG51bGwpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMudHJhbnNsb2NvU2VydmljZS5nZXRBY3RpdmVMYW5nKCk7XHJcblxyXG5cdFx0dGhpcy5zZWxlY3Rpb25JdGVtcy5zZXQobnVsbCk7XHJcblxyXG5cdFx0Y29uc3QgZXhjbHVkZWQgPSBuZXcgU2V0KHRoaXMuZXhjbHVkZWRLZXlzKCkgfHwgW10pO1xyXG5cdFx0Y29uc3QgbWFwcGVkSXRlbXMgPSB0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXNcclxuXHRcdFx0LmZpbHRlcigoaXRlbTogU2VsZWN0aW9uSXRlbSkgPT4gIWV4Y2x1ZGVkLmhhcyhpdGVtLnNlbGVjdGlvbktleSkpXHJcblx0XHRcdC5tYXAoKGl0ZW06IFNlbGVjdGlvbkl0ZW0pID0+ICh7XHJcblx0XHRcdFx0a2V5OiBpdGVtLnNlbGVjdGlvbktleSxcclxuXHRcdFx0XHR0ZXh0OlxyXG5cdFx0XHRcdFx0aXRlbT8uc2VsZWN0aW9uTXVsdGlMYW5ndWFnZURpc3BsYXlzPy5bY3VycmVudExhbmddID9cclxuXHRcdFx0XHRcdFx0aXRlbS5zZWxlY3Rpb25NdWx0aUxhbmd1YWdlRGlzcGxheXNbY3VycmVudExhbmddXHJcblx0XHRcdFx0XHQ6XHRpdGVtLnNlbGVjdGlvbkRpc3BsYXksXHJcblx0XHRcdFx0cGFyZW50U2VsZWN0aW9uS2V5OiBpdGVtLnBhcmVudFNlbGVjdGlvbktleVxyXG5cdFx0XHR9KSk7XHJcblxyXG5cdFx0dGhpcy5zZWxlY3Rpb25JdGVtcy5zZXQobWFwcGVkSXRlbXMpO1xyXG5cdFx0dGhpcy5yZWJ1aWxkU2VsZWN0Qm94RGF0YVNvdXJjZShtYXBwZWRJdGVtcyk7XHJcblx0XHR0aGlzLmZpbHRlckN1cnJlbnRWYWx1ZUJ5U2VsZWN0aW9uSXRlbXMoKTtcclxuXHR9XHJcblxyXG5cdC8vIFBhcmVudCBlbnVtIChtdWx0aXBsZSkgZGXEn2nFn3RpxJ9pbmRlIHZleWEgZXhjbHVkZWRLZXlzIGFrdGlma2VuXHJcblx0Ly8gZm9ybSdkYWtpIGdlw6dlcnNpeiBrZXknbGVyaSB0ZW1pemxlciAoc2VsZWN0aW9uSXRlbXMgemF0ZW4gZmlsdHJlbGVubWnFnyBoYWxpeWxlIGdlbGlyKS5cclxuXHRmaWx0ZXJDdXJyZW50VmFsdWVCeVNlbGVjdGlvbkl0ZW1zKCk6IHZvaWQge1xyXG5cdFx0Y29uc3QgaGFzRXhjbHVkZWQgPSAodGhpcy5leGNsdWRlZEtleXMoKSB8fCBbXSkubGVuZ3RoID4gMDtcclxuXHRcdGlmICghdGhpcy5wYXJlbnRTZWxlY3Rpb25LZXkoKSAmJiAhaGFzRXhjbHVkZWQpIHJldHVybjtcclxuXHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnZhbHVlO1xyXG5cdFx0Y29uc3QgdmFsaWRLZXlzID0gbmV3IFNldChcclxuXHRcdFx0KHRoaXMuc2VsZWN0aW9uSXRlbXMoKSB8fCBbXSkubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bdGhpcy5pdGVtS2V5KCldKVxyXG5cdFx0KTtcclxuXHJcblx0XHRpZiAodGhpcy5pc011bHRpcGxlKCkpIHtcclxuXHRcdFx0Ly8gQ2hpbGQgbXVsdGktc2VsZWN0OiBnZcOnZXJzaXoga2V5J2xlcmkgZmlsdHJlbGUsIGdlw6dlcmxpbGVyaSBixLFyYWtcclxuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkgfHwgY3VycmVudFZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cdFx0XHRjb25zdCBmaWx0ZXJlZCA9IChjdXJyZW50VmFsdWUgYXMgc3RyaW5nW10pLmZpbHRlcigoa2V5KSA9PiB2YWxpZEtleXMuaGFzKGtleSkpO1xyXG5cdFx0XHRpZiAoZmlsdGVyZWQubGVuZ3RoICE9PSBjdXJyZW50VmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0dGhpcy5uZ0NvbnRyb2wuY29udHJvbD8uc2V0VmFsdWUoZmlsdGVyZWQsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoIWN1cnJlbnRWYWx1ZSkgcmV0dXJuO1xyXG5cdFx0XHRcclxuXHRcdFx0aWYgKCF2YWxpZEtleXMuaGFzKGN1cnJlbnRWYWx1ZSkpIHtcclxuXHRcdFx0XHR0aGlzLm5nQ29udHJvbC5jb250cm9sPy5yZXNldChudWxsLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0b25DdXN0b21JdGVtQ3JlYXRpbmcoZXZlbnQ6IGFueSkge1xyXG5cdFx0aWYgKCFldmVudC50ZXh0KSB7XHJcblx0XHRcdGV2ZW50LmN1c3RvbUl0ZW0gPSBudWxsO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRjb25zdCBuZXdJdGVtID0ge1xyXG5cdFx0XHRbdGhpcy5pdGVtS2V5KCldOiBldmVudC50ZXh0LFxyXG5cdFx0XHRbdGhpcy5pdGVtVGV4dCgpXTogZXZlbnQudGV4dFxyXG5cdFx0fTtcclxuXHRcdGNvbnN0IGN1cnJlbnRJdGVtcyA9IHRoaXMuc2VsZWN0aW9uSXRlbXMoKSB8fCBbXTtcclxuXHRcdGNvbnN0IHVwZGF0ZWRJdGVtcyA9IFsuLi5jdXJyZW50SXRlbXMsIG5ld0l0ZW1dO1xyXG5cdFx0dGhpcy5zZWxlY3Rpb25JdGVtcy5zZXQodXBkYXRlZEl0ZW1zKTtcclxuXHRcdHRoaXMucmVidWlsZFNlbGVjdEJveERhdGFTb3VyY2UodXBkYXRlZEl0ZW1zKTtcclxuXHRcdGV2ZW50LmN1c3RvbUl0ZW0gPSBuZXdJdGVtO1xyXG5cdH1cclxuXHJcblx0XHRwcml2YXRlIHJlYnVpbGRTZWxlY3RCb3hEYXRhU291cmNlKGl0ZW1zOiBTZWxlY3RCb3hJdGVtW10pOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy51c2VWaXJ0dWFsU2Nyb2xsKCkpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3RCb3hEYXRhU291cmNlLnNldChudWxsKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZWxlY3RCb3hEYXRhU291cmNlLnNldChcclxuXHRcdFx0bmV3IERhdGFTb3VyY2Uoe1xyXG5cdFx0XHRcdHN0b3JlOiBuZXcgQXJyYXlTdG9yZSh7XHJcblx0XHRcdFx0XHRkYXRhOiBpdGVtcyxcclxuXHRcdFx0XHRcdGtleTogdGhpcy5pdGVtS2V5KClcclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHRwYWdpbmF0ZTogdHJ1ZSxcclxuXHRcdFx0XHRwYWdlU2l6ZTogNTBcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsIkBpZiAoaXNNdWx0aXBsZSgpKSB7XHJcblx0PHAtbXVsdGlTZWxlY3RcclxuXHRcdFtvcHRpb25zXT1cInNlbGVjdGlvbkl0ZW1zKCkgfHwgaXRlbXMoKSB8fCBbXVwiXHJcblx0XHRbb3B0aW9uVmFsdWVdPVwiaXRlbUtleSgpXCJcclxuXHRcdFtvcHRpb25MYWJlbF09XCJpdGVtVGV4dCgpXCJcclxuXHRcdFtkZWZhdWx0TGFiZWxdPVwicGxhY2Vob2xkZXIoKVwiXHJcblx0XHRbc2VsZWN0ZWRJdGVtc0xhYmVsXT1cInNlbGVjdGVkSXRlbXNMYWJlbCgpXCJcclxuXHRcdFtzdHlsZV09XCJzdHlsZSgpXCJcclxuXHRcdFtzdHlsZUNsYXNzXT1cInN0eWxlQ2xhc3MoKVwiXHJcblx0XHRbdG9vbHRpcF09XCJ0b29sdGlwKClcIlxyXG5cdFx0W3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24oKVwiXHJcblx0XHRbZm9ybUNvbnRyb2xdPVwibmdDb250cm9sLmNvbnRyb2xcIlxyXG5cdFx0KG5nTW9kZWxDaGFuZ2UpPVwibmdDb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKCRldmVudClcIlxyXG5cdFx0W21heFNlbGVjdGVkTGFiZWxzXT1cIjJcIlxyXG5cdFx0W2FwcGVuZFRvXT1cImFwcGVuZFRvKClcIlxyXG5cdFx0W3ZpcnR1YWxTY3JvbGxdPVwidXNlVmlydHVhbFNjcm9sbCgpXCJcclxuXHRcdFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplKClcIlxyXG5cdFx0W3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHQoKVwiXHJcblx0XHRbZmlsdGVyXT1cInRydWVcIlxyXG5cdFx0W3BhbmVsU3R5bGVdPVwieyAnbWF4LXdpZHRoJzogJzQwMHB4JywgJ21pbi13aWR0aCc6ICdhdXRvJyB9XCI+XHJcblx0XHQ8bmctdGVtcGxhdGUgbGV0LWVudW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG5cdFx0XHQ8ZGl2IFtwVG9vbHRpcF09XCJlbnVtW2l0ZW1UZXh0KCldPy5sZW5ndGggPiB0ZXh0Q2xhbXBDaGFyYWN0ZXJzKCkgPyBlbnVtW2l0ZW1UZXh0KCldIDogJydcIj5cclxuXHRcdFx0XHRAaWYgKGVudW1baXRlbVRleHQoKV0/Lmxlbmd0aCA+IHRleHRDbGFtcENoYXJhY3RlcnMoKSkge1xyXG5cdFx0XHRcdFx0e3sgZW51bVtpdGVtVGV4dCgpXS5zbGljZSgwLCB0ZXh0Q2xhbXBDaGFyYWN0ZXJzKCkpIH19Li4uXHJcblx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHR7eyBlbnVtW2l0ZW1UZXh0KCldIH19XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvbmctdGVtcGxhdGU+XHJcblx0PC9wLW11bHRpU2VsZWN0PlxyXG59IEBlbHNlIHtcclxuXHQ8ZHgtc2VsZWN0LWJveFxyXG4gICAgW2RhdGFTb3VyY2VdPVwidXNlVmlydHVhbFNjcm9sbCgpID8gc2VsZWN0Qm94RGF0YVNvdXJjZSgpIDogKHNlbGVjdGlvbkl0ZW1zKCkgfHwgaXRlbXMoKSB8fCBbXSlcIlxyXG5cdFx0W3ZhbHVlRXhwcl09XCJpdGVtS2V5KClcIlxyXG5cdFx0W2Rpc3BsYXlFeHByXT1cIml0ZW1UZXh0KClcIlxyXG5cdFx0W3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXHJcblx0XHRbc2VhcmNoRXhwcl09XCJzZWFyY2hFeHByKClcIlxyXG5cdFx0W3RhYkluZGV4XT1cInRhYmluZGV4KClcIlxyXG5cdFx0W2dyb3VwZWRdPVwiZ3JvdXBlZCgpXCJcclxuXHRcdFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCJcclxuXHRcdFtzaG93Q2xlYXJCdXR0b25dPVwic2hvd0NsZWFyQnV0dG9uKClcIlxyXG5cdFx0W2FjY2VwdEN1c3RvbVZhbHVlXT1cImFjY2VwdEN1c3RvbVZhbHVlKClcIlxyXG5cdFx0KG9uQ3VzdG9tSXRlbUNyZWF0aW5nKT1cIm9uQ3VzdG9tSXRlbUNyZWF0aW5nKCRldmVudClcIlxyXG5cdFx0W2lzVmFsaWRdPVwibmdDb250cm9sPy5jb250cm9sPy52YWxpZCB8fCBuZ0NvbnRyb2w/LmNvbnRyb2w/LnByaXN0aW5lIHx8IG5nQ29udHJvbD8uY29udHJvbD8uZGlzYWJsZWQgfHwgZmFsc2VcIlxyXG5cdFx0W3ZhbGlkYXRpb25FcnJvcl09XCJuZ0NvbnRyb2w/LmNvbnRyb2w/LmVycm9ycyB8IGR4SW5wdXRFcnJvck1lc3NhZ2U6IG5nQ29udHJvbD8uY29udHJvbFwiXHJcblx0XHR2YWxpZGF0aW9uTWVzc2FnZVBvc2l0aW9uPVwidG9wXCJcclxuXHRcdFtub0RhdGFUZXh0XT1cInRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdtZXNzYWdlcy5ub0RhdGFUb0Rpc3BsYXknKVwiXHJcblx0XHRbZm9ybUNvbnRyb2xdPVwibmdDb250cm9sLmNvbnRyb2xcIlxyXG5cdFx0KG5nTW9kZWxDaGFuZ2UpPVwibmdDb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKCRldmVudClcIlxyXG4gICAgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJvblNlbGVjdGlvbkNoYW5nZWQuZW1pdCgkZXZlbnQuc2VsZWN0ZWRJdGVtKTtzZXRUaXRsZSgkZXZlbnQuc2VsZWN0ZWRJdGVtKVwiXHJcbiAgICBbaW5wdXRBdHRyXT1cInsgJ3RpdGxlJzogc2VsZWN0ZWRJdGVtVGV4dCB9XCI+XHJcblx0PC9keC1zZWxlY3QtYm94PlxyXG59XHJcbiJdfQ==
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS1idXNpbmVzcy9lbnVtUGlja2VyL3NyYy9lbnVtLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3VpLWJ1c2luZXNzL2VudW1QaWNrZXIvc3JjL2VudW0tcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLFVBQVUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRCxPQUFPLFVBQVUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxFQUNOLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixNQUFNLGFBQWEsQ0FBQzs7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QUFDO0lBQzVCLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxLQUFzQjtRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLE9BQU87UUFDUixDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FDM0IsSUFBSSxVQUFVLENBQUM7WUFDZCxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUM7Z0JBQ3JCLElBQUksRUFBRSxLQUFLO2dCQUNYLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO2FBQ25CLENBQUM7WUFDRixRQUFRLEVBQUUsSUFBSTtZQUNkLFFBQVEsRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUNGLENBQUM7SUFDSCxDQUFDOzhHQXhMVyxtQkFBbUI7a0dBQW5CLG1CQUFtQixpMUdBSHBCLENBQUMscUJBQXFCLENBQUMsNkdDckNuQyw4MkVBcURBLDJDRHZCRSxtQkFBbUIseVRBQ25CLGlCQUFpQiw0cUZBQ2pCLHVCQUF1QiwyREFDdkIsZUFBZSw4QkFDZixpQkFBaUIsMjdDQUNqQixhQUFhOzsyRkFLRixtQkFBbUI7a0JBZi9CLFNBQVM7aUNBQ0csSUFBSSxZQUNOLDhFQUE4RSxXQUUvRTt3QkFDUixtQkFBbUI7d0JBQ25CLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2QixlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsYUFBYTtxQkFDYixhQUNVLENBQUMscUJBQXFCLENBQUMsa0JBQ2xCLENBQUMsc0JBQXNCLENBQUM7OEdBOEM5QixrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBlZmZlY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgTXVsdGlTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xvY29Nb2R1bGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XHJcbmltcG9ydCB7IER4U2VsZWN0Qm94TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3NlbGVjdC1ib3gnO1xyXG5pbXBvcnQgQXJyYXlTdG9yZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvYXJyYXlfc3RvcmUnO1xyXG5pbXBvcnQgRGF0YVNvdXJjZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvZGF0YV9zb3VyY2UnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQVBJX0NPTkZJR1MgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwaSc7XHJcbmltcG9ydCB7IEFwcHMgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwcHMnO1xyXG5pbXBvcnQge1xyXG5cdEJhc2VJbnB1dENvbXBvbmVudCxcclxuXHREWElucHV0RXJyb3JNZXNzYWdlUGlwZSxcclxuXHRJbnB1dEVycm9yTWVzc2FnZVBpcGUsXHJcblx0VmFsdWVBY2Nlc3NvckRpcmVjdGl2ZVxyXG59IGZyb20gJ2FyaWwvdWkvbGliJztcclxuXHJcbmltcG9ydCB7IFNlbGVjdEJveEl0ZW0sIFNlbGVjdGlvbkdyb3VwRFRPLCBTZWxlY3Rpb25JdGVtLCBTZWxlY3Rpb25SZXF1ZXN0RFRPIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRzZWxlY3RvcjogJ2VudW0tcGlja2VyW25nTW9kZWxdLCBlbnVtLXBpY2tlcltmb3JtQ29udHJvbF0sIGVudW0tcGlja2VyW2Zvcm1Db250cm9sTmFtZV0nLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9lbnVtLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcblx0aW1wb3J0czogW1xyXG5cdFx0UmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuXHRcdER4U2VsZWN0Qm94TW9kdWxlLFxyXG5cdFx0RFhJbnB1dEVycm9yTWVzc2FnZVBpcGUsXHJcblx0XHRUcmFuc2xvY29Nb2R1bGUsXHJcblx0XHRNdWx0aVNlbGVjdE1vZHVsZSxcclxuXHRcdFRvb2x0aXBNb2R1bGVcclxuXHRdLFxyXG5cdHByb3ZpZGVyczogW0lucHV0RXJyb3JNZXNzYWdlUGlwZV0sXHJcblx0aG9zdERpcmVjdGl2ZXM6IFtWYWx1ZUFjY2Vzc29yRGlyZWN0aXZlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRW51bVBpY2tlckNvbXBvbmVudCBleHRlbmRzIEJhc2VJbnB1dENvbXBvbmVudCB7XHJcblx0c2VsZWN0aW9uSXRlbXMgPSBzaWduYWw8U2VsZWN0Qm94SXRlbVtdIHwgbnVsbD4obnVsbCk7XHJcblx0c2VsZWN0Qm94RGF0YVNvdXJjZSA9IHNpZ25hbDxEYXRhU291cmNlIHwgbnVsbD4obnVsbCk7XHJcblx0cHJpdmF0ZSBvcmlnaW5hbFNlbGVjdGlvbkl0ZW1zOiBTZWxlY3Rpb25JdGVtW10gPSBbXTtcclxuXHQvKipcclxuXHQgKiBTaW5nbGUgU2VsZWN0IFN0YXRlc1xyXG5cdCAqL1xyXG5cclxuXHRpdGVtS2V5ID0gaW5wdXQoJ2tleScpO1xyXG5cdGl0ZW1UZXh0ID0gaW5wdXQoJ3RleHQnKTtcclxuXHRncm91cE5hbWUgPSBpbnB1dCgnJyk7XHJcblx0cGFyZW50U2VsZWN0aW9uS2V5ID0gaW5wdXQobnVsbCk7XHJcblx0dGFiaW5kZXggPSBpbnB1dDxudW1iZXI+KDApO1xyXG5cdGl0ZW1zID0gaW5wdXQ8U2VsZWN0Qm94SXRlbVtdPigpO1xyXG5cdGlzTXVsdGlwbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0Ly8gQ3Jvc3MtdmFsaWRhdGlvbiBSZW1vdmVJdGVtIGFjdGlvbiBpbGUgc2V0IGVkaWxpcjsgdmVyaWxlbiBzZWxlY3Rpb25LZXknbGVyaSBpdGVtIGxpc3Rlc2luZGVuIGZpbHRyZWxlci5cclxuXHRleGNsdWRlZEtleXMgPSBpbnB1dDxzdHJpbmdbXT4oW10pO1xyXG5cdHNlbGVjdGVkSXRlbVRleHQgPSAnJztcclxuXHQvKiogKiBAZGVzY3JpcHRpb24gd2hlbiBncm91cGVkID0gdHJ1ZSwgb3B0aW9uIGl0ZW0gc3RydWN0dXJlIHsga2V5OnN0cmluZywgaXRlbXM6W10gfSAqL1xyXG5cdGdyb3VwZWQgPSBpbnB1dChmYWxzZSk7XHJcblx0c2hvd0NsZWFyQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblx0cGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHRzZWFyY2hFeHByID0gaW5wdXQ8c3RyaW5nIHwgc3RyaW5nW10+KCcnKTtcclxuXHRhY2NlcHRDdXN0b21WYWx1ZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHR0ZXh0Q2xhbXBDaGFyYWN0ZXJzID0gaW5wdXQ8bnVtYmVyPig0MCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZpcnR1YWwgU2Nyb2xsIFN0YXRlc1xyXG5cdCAqL1xyXG5cdHVzZVZpcnR1YWxTY3JvbGwgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0dmlydHVhbFNjcm9sbEl0ZW1TaXplID0gaW5wdXQ8bnVtYmVyPigzMCk7XHJcblx0c2Nyb2xsSGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMzAwcHgnKTtcclxuXHJcblx0LyoqXHJcblx0ICogTXVsdGkgU2VsZWN0IFN0YXRlc1xyXG5cdCAqL1xyXG5cclxuXHRzZWxlY3RlZEl0ZW1zTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCd7MH0gIGRlxJ9lciBzZcOnaWxkaScpOyAvLyBkZWZhdWx0IHZhbHVlIC0+ICh7MH0gaXRlbXMgc2VsZWN0ZWRcclxuXHRhcHBlbmRUbyA9IGlucHV0PHN0cmluZz4oJ2JvZHknKTtcclxuXHRzdHlsZSA9IGlucHV0PG9iamVjdD4oe30pO1xyXG5cdHN0eWxlQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHR0b29sdGlwID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblx0dG9vbHRpcFBvc2l0aW9uID0gaW5wdXQ8YW55PigndG9wJyk7XHJcblxyXG5cdEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdEJveEl0ZW0+KCk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxyXG5cdFx0cHVibGljIHRyYW5zbG9jb1NlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2VcclxuXHQpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHRlZmZlY3QoKCkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5ncm91cE5hbWUoKSB8fCB0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpKSB0aGlzLmdldFNlbGVjdGlvbkl0ZW1zKCk7XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBleGNsdWRlZEtleXMgZGXEn2nFn2luY2UgaXRlbSBsaXN0ZXNpbmkgeWVuaWRlbiBmaWx0cmVsZSAob3JpZ2luYWxTZWxlY3Rpb25JdGVtcyBrb3J1bnVyKVxyXG5cdFx0ZWZmZWN0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5leGNsdWRlZEtleXMoKTtcclxuXHRcdFx0aWYgKHRoaXMub3JpZ2luYWxTZWxlY3Rpb25JdGVtcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0dGhpcy51cGRhdGVTZWxlY3Rpb25JdGVtc1RleHQoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy50cmFuc2xvY29TZXJ2aWNlLmxhbmdDaGFuZ2VzJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5zZWxlY3Rpb25JdGVtcygpICYmICh0aGlzLnNlbGVjdGlvbkl0ZW1zKCkgYXMgU2VsZWN0Qm94SXRlbVtdKT8ubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uSXRlbXNUZXh0KCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0c2V0VGl0bGUoZXZlbnQ/OiBhbnkpIHtcclxuXHRcdGlmIChldmVudCAmJiBldmVudFt0aGlzLml0ZW1UZXh0KCldLmxlbmd0aCA+IDI1KSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtVGV4dCA9IGV2ZW50ID8gZXZlbnRbdGhpcy5pdGVtVGV4dCgpXSA6ICcnO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChldmVudCk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnZXRTZWxlY3Rpb25JdGVtcygpIHtcclxuXHRcdGNvbnN0IHBheWxvYWQ6IFBhcnRpYWw8U2VsZWN0aW9uUmVxdWVzdERUTz4gPSB7XHJcblx0XHRcdGdyb3VwTmFtZTogdGhpcy5ncm91cE5hbWUoKVxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpKSkge1xyXG5cdFx0XHRwYXlsb2FkLnBhcmVudFNlbGVjdGlvbktleXMgPSB0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cGF5bG9hZC5wYXJlbnRTZWxlY3Rpb25LZXkgPSB0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGhvc3RBcGkgPSBBUElfQ09ORklHUy5nZXRFeHRlcm5hbEFwcEVuZHBvaW50KEFwcHMuTU5HKTtcclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBzZWxlY3Rpb25Hcm91cCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG5cdFx0XHRcdHRoaXMuaHR0cC5wb3N0PFNlbGVjdGlvbkdyb3VwRFRPPihob3N0QXBpICsgJy9zZWxlY3Rpb24tZ3JvdXAvbG9hZCcsIHBheWxvYWQpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXMgPSBzZWxlY3Rpb25Hcm91cD8uc2VsZWN0aW9uSXRlbXMgfHwgW107XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHR0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXMgPSBbXTtcclxuXHRcdH1cclxuXHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uSXRlbXNUZXh0KCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbkl0ZW1zVGV4dCgpIHtcclxuXHRcdGlmICghdGhpcy5vcmlnaW5hbFNlbGVjdGlvbkl0ZW1zIHx8IHRoaXMub3JpZ2luYWxTZWxlY3Rpb25JdGVtcy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0dGhpcy5zZWxlY3Rpb25JdGVtcy5zZXQobnVsbCk7XHJcblx0XHRcdHRoaXMuc2VsZWN0Qm94RGF0YVNvdXJjZS5zZXQobnVsbCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy50cmFuc2xvY29TZXJ2aWNlLmdldEFjdGl2ZUxhbmcoKTtcclxuXHJcblx0XHR0aGlzLnNlbGVjdGlvbkl0ZW1zLnNldChudWxsKTtcclxuXHJcblx0XHRjb25zdCBleGNsdWRlZCA9IG5ldyBTZXQodGhpcy5leGNsdWRlZEtleXMoKSB8fCBbXSk7XHJcblx0XHRjb25zdCBtYXBwZWRJdGVtcyA9IHRoaXMub3JpZ2luYWxTZWxlY3Rpb25JdGVtc1xyXG5cdFx0XHQuZmlsdGVyKChpdGVtOiBTZWxlY3Rpb25JdGVtKSA9PiAhZXhjbHVkZWQuaGFzKGl0ZW0uc2VsZWN0aW9uS2V5KSlcclxuXHRcdFx0Lm1hcCgoaXRlbTogU2VsZWN0aW9uSXRlbSkgPT4gKHtcclxuXHRcdFx0XHRrZXk6IGl0ZW0uc2VsZWN0aW9uS2V5LFxyXG5cdFx0XHRcdHRleHQ6XHJcblx0XHRcdFx0XHRpdGVtPy5zZWxlY3Rpb25NdWx0aUxhbmd1YWdlRGlzcGxheXM/LltjdXJyZW50TGFuZ10gP1xyXG5cdFx0XHRcdFx0XHRpdGVtLnNlbGVjdGlvbk11bHRpTGFuZ3VhZ2VEaXNwbGF5c1tjdXJyZW50TGFuZ11cclxuXHRcdFx0XHRcdDpcdGl0ZW0uc2VsZWN0aW9uRGlzcGxheSxcclxuXHRcdFx0XHRwYXJlbnRTZWxlY3Rpb25LZXk6IGl0ZW0ucGFyZW50U2VsZWN0aW9uS2V5XHJcblx0XHRcdH0pKTtcclxuXHJcblx0XHR0aGlzLnNlbGVjdGlvbkl0ZW1zLnNldChtYXBwZWRJdGVtcyk7XHJcblx0XHR0aGlzLnJlYnVpbGRTZWxlY3RCb3hEYXRhU291cmNlKG1hcHBlZEl0ZW1zKTtcclxuXHRcdHRoaXMuZmlsdGVyQ3VycmVudFZhbHVlQnlTZWxlY3Rpb25JdGVtcygpO1xyXG5cdH1cclxuXHJcblx0Ly8gUGFyZW50IGVudW0gKG11bHRpcGxlKSBkZcSfacWfdGnEn2luZGUgdmV5YSBleGNsdWRlZEtleXMgYWt0aWZrZW5cclxuXHQvLyBmb3JtJ2Rha2kgZ2XDp2Vyc2l6IGtleSdsZXJpIHRlbWl6bGVyIChzZWxlY3Rpb25JdGVtcyB6YXRlbiBmaWx0cmVsZW5tacWfIGhhbGl5bGUgZ2VsaXIpLlxyXG5cdGZpbHRlckN1cnJlbnRWYWx1ZUJ5U2VsZWN0aW9uSXRlbXMoKTogdm9pZCB7XHJcblx0XHRjb25zdCBoYXNFeGNsdWRlZCA9ICh0aGlzLmV4Y2x1ZGVkS2V5cygpIHx8IFtdKS5sZW5ndGggPiAwO1xyXG5cdFx0aWYgKCF0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpICYmICFoYXNFeGNsdWRlZCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8udmFsdWU7XHJcblx0XHRjb25zdCB2YWxpZEtleXMgPSBuZXcgU2V0KCh0aGlzLnNlbGVjdGlvbkl0ZW1zKCkgfHwgW10pLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW3RoaXMuaXRlbUtleSgpXSkpO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzTXVsdGlwbGUoKSkge1xyXG5cdFx0XHQvLyBDaGlsZCBtdWx0aS1zZWxlY3Q6IGdlw6dlcnNpeiBrZXknbGVyaSBmaWx0cmVsZSwgZ2XDp2VybGlsZXJpIGLEsXJha1xyXG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSB8fCBjdXJyZW50VmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblx0XHRcdGNvbnN0IGZpbHRlcmVkID0gKGN1cnJlbnRWYWx1ZSBhcyBzdHJpbmdbXSkuZmlsdGVyKChrZXkpID0+IHZhbGlkS2V5cy5oYXMoa2V5KSk7XHJcblx0XHRcdGlmIChmaWx0ZXJlZC5sZW5ndGggIT09IGN1cnJlbnRWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHR0aGlzLm5nQ29udHJvbC5jb250cm9sPy5zZXRWYWx1ZShmaWx0ZXJlZCwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICghY3VycmVudFZhbHVlKSByZXR1cm47XHJcblxyXG5cdFx0XHRpZiAoIXZhbGlkS2V5cy5oYXMoY3VycmVudFZhbHVlKSkge1xyXG5cdFx0XHRcdHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnJlc2V0KG51bGwsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRvbkN1c3RvbUl0ZW1DcmVhdGluZyhldmVudDogYW55KSB7XHJcblx0XHRpZiAoIWV2ZW50LnRleHQpIHtcclxuXHRcdFx0ZXZlbnQuY3VzdG9tSXRlbSA9IG51bGw7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdGNvbnN0IG5ld0l0ZW0gPSB7XHJcblx0XHRcdFt0aGlzLml0ZW1LZXkoKV06IGV2ZW50LnRleHQsXHJcblx0XHRcdFt0aGlzLml0ZW1UZXh0KCldOiBldmVudC50ZXh0XHJcblx0XHR9O1xyXG5cdFx0Y29uc3QgY3VycmVudEl0ZW1zID0gdGhpcy5zZWxlY3Rpb25JdGVtcygpIHx8IFtdO1xyXG5cdFx0Y29uc3QgdXBkYXRlZEl0ZW1zID0gWy4uLmN1cnJlbnRJdGVtcywgbmV3SXRlbV07XHJcblx0XHR0aGlzLnNlbGVjdGlvbkl0ZW1zLnNldCh1cGRhdGVkSXRlbXMpO1xyXG5cdFx0dGhpcy5yZWJ1aWxkU2VsZWN0Qm94RGF0YVNvdXJjZSh1cGRhdGVkSXRlbXMpO1xyXG5cdFx0ZXZlbnQuY3VzdG9tSXRlbSA9IG5ld0l0ZW07XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJlYnVpbGRTZWxlY3RCb3hEYXRhU291cmNlKGl0ZW1zOiBTZWxlY3RCb3hJdGVtW10pOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy51c2VWaXJ0dWFsU2Nyb2xsKCkpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3RCb3hEYXRhU291cmNlLnNldChudWxsKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZWxlY3RCb3hEYXRhU291cmNlLnNldChcclxuXHRcdFx0bmV3IERhdGFTb3VyY2Uoe1xyXG5cdFx0XHRcdHN0b3JlOiBuZXcgQXJyYXlTdG9yZSh7XHJcblx0XHRcdFx0XHRkYXRhOiBpdGVtcyxcclxuXHRcdFx0XHRcdGtleTogdGhpcy5pdGVtS2V5KClcclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHRwYWdpbmF0ZTogdHJ1ZSxcclxuXHRcdFx0XHRwYWdlU2l6ZTogNTBcclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsIkBpZiAoaXNNdWx0aXBsZSgpKSB7XHJcblx0PHAtbXVsdGlTZWxlY3RcclxuXHRcdFtvcHRpb25zXT1cInNlbGVjdGlvbkl0ZW1zKCkgfHwgaXRlbXMoKSB8fCBbXVwiXHJcblx0XHRbb3B0aW9uVmFsdWVdPVwiaXRlbUtleSgpXCJcclxuXHRcdFtvcHRpb25MYWJlbF09XCJpdGVtVGV4dCgpXCJcclxuXHRcdFtkZWZhdWx0TGFiZWxdPVwicGxhY2Vob2xkZXIoKVwiXHJcblx0XHRbc2VsZWN0ZWRJdGVtc0xhYmVsXT1cInNlbGVjdGVkSXRlbXNMYWJlbCgpXCJcclxuXHRcdFtzdHlsZV09XCJzdHlsZSgpXCJcclxuXHRcdFtzdHlsZUNsYXNzXT1cInN0eWxlQ2xhc3MoKVwiXHJcblx0XHRbdG9vbHRpcF09XCJ0b29sdGlwKClcIlxyXG5cdFx0W3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb24oKVwiXHJcblx0XHRbZm9ybUNvbnRyb2xdPVwibmdDb250cm9sLmNvbnRyb2xcIlxyXG5cdFx0KG5nTW9kZWxDaGFuZ2UpPVwibmdDb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKCRldmVudClcIlxyXG5cdFx0W21heFNlbGVjdGVkTGFiZWxzXT1cIjJcIlxyXG5cdFx0W2FwcGVuZFRvXT1cImFwcGVuZFRvKClcIlxyXG5cdFx0W3ZpcnR1YWxTY3JvbGxdPVwidXNlVmlydHVhbFNjcm9sbCgpXCJcclxuXHRcdFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplKClcIlxyXG5cdFx0W3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHQoKVwiXHJcblx0XHRbZmlsdGVyXT1cInRydWVcIlxyXG5cdFx0W3BhbmVsU3R5bGVdPVwieyAnbWF4LXdpZHRoJzogJzQwMHB4JywgJ21pbi13aWR0aCc6ICdhdXRvJyB9XCI+XHJcblx0XHQ8bmctdGVtcGxhdGUgbGV0LWVudW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG5cdFx0XHQ8ZGl2IFtwVG9vbHRpcF09XCJlbnVtW2l0ZW1UZXh0KCldPy5sZW5ndGggPiB0ZXh0Q2xhbXBDaGFyYWN0ZXJzKCkgPyBlbnVtW2l0ZW1UZXh0KCldIDogJydcIj5cclxuXHRcdFx0XHRAaWYgKGVudW1baXRlbVRleHQoKV0/Lmxlbmd0aCA+IHRleHRDbGFtcENoYXJhY3RlcnMoKSkge1xyXG5cdFx0XHRcdFx0e3sgZW51bVtpdGVtVGV4dCgpXS5zbGljZSgwLCB0ZXh0Q2xhbXBDaGFyYWN0ZXJzKCkpIH19Li4uXHJcblx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHR7eyBlbnVtW2l0ZW1UZXh0KCldIH19XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvbmctdGVtcGxhdGU+XHJcblx0PC9wLW11bHRpU2VsZWN0PlxyXG59IEBlbHNlIHtcclxuXHQ8ZHgtc2VsZWN0LWJveFxyXG4gICAgW2RhdGFTb3VyY2VdPVwidXNlVmlydHVhbFNjcm9sbCgpID8gc2VsZWN0Qm94RGF0YVNvdXJjZSgpIDogKHNlbGVjdGlvbkl0ZW1zKCkgfHwgaXRlbXMoKSB8fCBbXSlcIlxyXG5cdFx0W3ZhbHVlRXhwcl09XCJpdGVtS2V5KClcIlxyXG5cdFx0W2Rpc3BsYXlFeHByXT1cIml0ZW1UZXh0KClcIlxyXG5cdFx0W3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXHJcblx0XHRbc2VhcmNoRXhwcl09XCJzZWFyY2hFeHByKClcIlxyXG5cdFx0W3RhYkluZGV4XT1cInRhYmluZGV4KClcIlxyXG5cdFx0W2dyb3VwZWRdPVwiZ3JvdXBlZCgpXCJcclxuXHRcdFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCJcclxuXHRcdFtzaG93Q2xlYXJCdXR0b25dPVwic2hvd0NsZWFyQnV0dG9uKClcIlxyXG5cdFx0W2FjY2VwdEN1c3RvbVZhbHVlXT1cImFjY2VwdEN1c3RvbVZhbHVlKClcIlxyXG5cdFx0KG9uQ3VzdG9tSXRlbUNyZWF0aW5nKT1cIm9uQ3VzdG9tSXRlbUNyZWF0aW5nKCRldmVudClcIlxyXG5cdFx0W2lzVmFsaWRdPVwibmdDb250cm9sPy5jb250cm9sPy52YWxpZCB8fCBuZ0NvbnRyb2w/LmNvbnRyb2w/LnByaXN0aW5lIHx8IG5nQ29udHJvbD8uY29udHJvbD8uZGlzYWJsZWQgfHwgZmFsc2VcIlxyXG5cdFx0W3ZhbGlkYXRpb25FcnJvcl09XCJuZ0NvbnRyb2w/LmNvbnRyb2w/LmVycm9ycyB8IGR4SW5wdXRFcnJvck1lc3NhZ2U6IG5nQ29udHJvbD8uY29udHJvbFwiXHJcblx0XHR2YWxpZGF0aW9uTWVzc2FnZVBvc2l0aW9uPVwidG9wXCJcclxuXHRcdFtub0RhdGFUZXh0XT1cInRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdtZXNzYWdlcy5ub0RhdGFUb0Rpc3BsYXknKVwiXHJcblx0XHRbZm9ybUNvbnRyb2xdPVwibmdDb250cm9sLmNvbnRyb2xcIlxyXG5cdFx0KG5nTW9kZWxDaGFuZ2UpPVwibmdDb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKCRldmVudClcIlxyXG4gICAgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJvblNlbGVjdGlvbkNoYW5nZWQuZW1pdCgkZXZlbnQuc2VsZWN0ZWRJdGVtKTtzZXRUaXRsZSgkZXZlbnQuc2VsZWN0ZWRJdGVtKVwiXHJcbiAgICBbaW5wdXRBdHRyXT1cInsgJ3RpdGxlJzogc2VsZWN0ZWRJdGVtVGV4dCB9XCI+XHJcblx0PC9keC1zZWxlY3QtYm94PlxyXG59XHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJpbC11dGlsLWFjdGl2aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91dGlsL2FjdGl2aXR5L2FyaWwtdXRpbC1hY3Rpdml0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './src/activity.service';
2
+ export * from './src/activity.types';
3
+ export * from './src/activity.constants';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3V0aWwvYWN0aXZpdHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NyYy9hY3Rpdml0eS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9zcmMvYWN0aXZpdHkudHlwZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL3NyYy9hY3Rpdml0eS5jb25zdGFudHMnO1xyXG4iXX0=
@@ -0,0 +1,4 @@
1
+ export const ACTIVITY_ENDPOINT_PATH = 'analytics/track';
2
+ export const ACTIVITY_SESSION_MARKER_PREFIX = 'aril.activity.session:';
3
+ export const LOGGER_SESSION_HEADER = 'x-aril-logger-session-id';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkuY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91dGlsL2FjdGl2aXR5L3NyYy9hY3Rpdml0eS5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsaUJBQWlCLENBQUM7QUFDeEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsd0JBQXdCLENBQUM7QUFDdkUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgQUNUSVZJVFlfRU5EUE9JTlRfUEFUSCA9ICdhbmFseXRpY3MvdHJhY2snO1xyXG5leHBvcnQgY29uc3QgQUNUSVZJVFlfU0VTU0lPTl9NQVJLRVJfUFJFRklYID0gJ2FyaWwuYWN0aXZpdHkuc2Vzc2lvbjonO1xyXG5leHBvcnQgY29uc3QgTE9HR0VSX1NFU1NJT05fSEVBREVSID0gJ3gtYXJpbC1sb2dnZXItc2Vzc2lvbi1pZCc7XHJcbiJdfQ==
@@ -0,0 +1,218 @@
1
+ import { Location } from '@angular/common';
2
+ import { Injectable, inject } from '@angular/core';
3
+ import { NavigationEnd, Router } from '@angular/router';
4
+ import { KeycloakEventType, KeycloakService } from 'keycloak-angular';
5
+ import { filter } from 'rxjs/operators';
6
+ import { API_CONFIGS } from 'aril/boot/config/api';
7
+ import { Apps } from 'aril/boot/config/apps';
8
+ import { ACTIVITY_ENDPOINT_PATH, ACTIVITY_SESSION_MARKER_PREFIX, LOGGER_SESSION_HEADER } from './activity.constants';
9
+ import * as i0 from "@angular/core";
10
+ export class ActivityService {
11
+ constructor() {
12
+ this.keycloak = inject(KeycloakService);
13
+ // Router/Location optional: MFE shared scope'da bunlar yok (child injector'da yaşıyor).
14
+ // Plugin/Host scope'da var. Null durumunda PAGE_VIEW subscribe'ları no-op olur.
15
+ this.router = inject(Router, { optional: true });
16
+ this.location = inject(Location, { optional: true });
17
+ this.sessionId = null;
18
+ this.username = null;
19
+ this.previousPath = null;
20
+ this.started = false;
21
+ }
22
+ getSessionId() {
23
+ if (this.sessionId)
24
+ return this.sessionId;
25
+ const fresh = this.readSessionIdFromKeycloak();
26
+ if (fresh)
27
+ this.sessionId = fresh;
28
+ return fresh;
29
+ }
30
+ start(options = {}) {
31
+ if (this.started)
32
+ return;
33
+ this.started = true;
34
+ this.captureSessionContext();
35
+ this.subscribeKeycloakRefresh();
36
+ if (this.location) {
37
+ this.location.onUrlChange(() => this.maybeEmitPageView(this.location.path()));
38
+ }
39
+ if (options.shellMode) {
40
+ this.subscribeLifecycleEvents();
41
+ this.subscribeRouterEvents();
42
+ this.handleSessionStart();
43
+ }
44
+ }
45
+ track(event, properties = {}, type = 'CUSTOM') {
46
+ if (!this.started)
47
+ return;
48
+ this.send({ type, event, properties });
49
+ }
50
+ readSessionIdFromKeycloak() {
51
+ const kc = this.keycloak.getKeycloakInstance();
52
+ return kc?.sessionId ?? kc?.tokenParsed?.session_state ?? kc?.tokenParsed?.sid ?? null;
53
+ }
54
+ captureSessionContext() {
55
+ this.sessionId = this.readSessionIdFromKeycloak();
56
+ this.username = this.keycloak.getUsername() ?? null;
57
+ }
58
+ subscribeKeycloakRefresh() {
59
+ this.keycloak.keycloakEvents$.subscribe((event) => {
60
+ if (event.type === KeycloakEventType.OnAuthRefreshSuccess) {
61
+ this.captureSessionContext();
62
+ }
63
+ });
64
+ }
65
+ subscribeLifecycleEvents() {
66
+ this.keycloak.keycloakEvents$.subscribe((event) => {
67
+ if (event.type === KeycloakEventType.OnAuthLogout) {
68
+ this.sendSessionEnd('logout');
69
+ }
70
+ else if (event.type === KeycloakEventType.OnAuthRefreshError) {
71
+ this.sendSessionEnd('refresh_failed');
72
+ }
73
+ });
74
+ }
75
+ subscribeRouterEvents() {
76
+ if (!this.router)
77
+ return;
78
+ this.router.events.pipe(filter((e) => e instanceof NavigationEnd)).subscribe((event) => {
79
+ this.maybeEmitPageView(event.urlAfterRedirects);
80
+ });
81
+ }
82
+ maybeEmitPageView(currentUrl) {
83
+ if (currentUrl === this.previousPath)
84
+ return;
85
+ const slot = globalThis;
86
+ const lastUrl = slot['__arilActivityLastPageUrl'];
87
+ const lastAt = slot['__arilActivityLastPageAt'];
88
+ if (lastUrl === currentUrl && lastAt && Date.now() - lastAt < 1000) {
89
+ this.previousPath = currentUrl;
90
+ return;
91
+ }
92
+ const previous = this.previousPath;
93
+ this.previousPath = currentUrl;
94
+ slot['__arilActivityLastPageUrl'] = currentUrl;
95
+ slot['__arilActivityLastPageAt'] = Date.now();
96
+ this.send({
97
+ type: 'PAGE_VIEW',
98
+ event: '',
99
+ page: currentUrl,
100
+ referrer: previous ?? undefined,
101
+ properties: {}
102
+ });
103
+ }
104
+ handleSessionStart() {
105
+ if (!this.sessionId)
106
+ return;
107
+ const currentKey = `${ACTIVITY_SESSION_MARKER_PREFIX}${this.sessionId}`;
108
+ let alreadyMarked = false;
109
+ try {
110
+ alreadyMarked = !!localStorage.getItem(currentKey);
111
+ this.purgeStaleSessionMarkers(currentKey);
112
+ }
113
+ catch {
114
+ /* swallow */
115
+ }
116
+ if (alreadyMarked)
117
+ return;
118
+ try {
119
+ localStorage.setItem(currentKey, Date.now().toString());
120
+ }
121
+ catch {
122
+ /* swallow */
123
+ }
124
+ this.send({
125
+ type: 'SESSION_START',
126
+ event: 'login',
127
+ properties: { userAgent: navigator.userAgent }
128
+ });
129
+ }
130
+ purgeStaleSessionMarkers(keepKey) {
131
+ const stale = [];
132
+ for (let i = 0; i < localStorage.length; i++) {
133
+ const key = localStorage.key(i);
134
+ if (key && key !== keepKey && key.startsWith(ACTIVITY_SESSION_MARKER_PREFIX)) {
135
+ stale.push(key);
136
+ }
137
+ }
138
+ stale.forEach((k) => localStorage.removeItem(k));
139
+ }
140
+ sendSessionEnd(reason) {
141
+ if (!this.sessionId)
142
+ return;
143
+ const markerKey = `${ACTIVITY_SESSION_MARKER_PREFIX}${this.sessionId}`;
144
+ let durationMs = 0;
145
+ try {
146
+ const loginTimestamp = parseInt(localStorage.getItem(markerKey) ?? '0', 10);
147
+ durationMs = loginTimestamp ? Date.now() - loginTimestamp : 0;
148
+ localStorage.removeItem(markerKey);
149
+ }
150
+ catch {
151
+ /* swallow */
152
+ }
153
+ this.send({
154
+ type: 'SESSION_END',
155
+ event: reason,
156
+ properties: { durationMs }
157
+ });
158
+ }
159
+ toAbsoluteUrl(routerPath) {
160
+ if (routerPath.startsWith('http://') || routerPath.startsWith('https://'))
161
+ return routerPath;
162
+ return `${window.location.origin}/#${routerPath}`;
163
+ }
164
+ /**
165
+ * MFE shared scope'unda `Router` ve `Location` null (her ikisi de child injector'da yaşıyor).
166
+ * Bu durumda Angular soyutlamalarına dayanamayız; `window.location.hash`'ten okuruz —
167
+ * browser'ın sahip olduğu güncel URL.
168
+ */
169
+ readCurrentPath() {
170
+ if (this.location)
171
+ return this.location.path();
172
+ if (this.router)
173
+ return this.router.url;
174
+ const hash = window.location.hash;
175
+ return hash.startsWith('#') ? hash.slice(1) : '';
176
+ }
177
+ send(partial) {
178
+ if (!this.sessionId)
179
+ return;
180
+ const baseUrl = API_CONFIGS.getExternalAppEndpoint(Apps.EVENT_GATEWAY);
181
+ if (!baseUrl)
182
+ return;
183
+ const currentPath = partial.page ?? this.readCurrentPath();
184
+ const payload = {
185
+ type: partial.type,
186
+ sessionId: this.sessionId,
187
+ username: this.username ?? '',
188
+ event: partial.event,
189
+ page: this.toAbsoluteUrl(currentPath),
190
+ ip: '',
191
+ referrer: partial.referrer ? this.toAbsoluteUrl(partial.referrer) : `${window.location.origin}/#`,
192
+ traceId: '',
193
+ clientTimestamp: Date.now(),
194
+ properties: partial.properties
195
+ };
196
+ const url = `${baseUrl.replace(/\/$/, '')}/${ACTIVITY_ENDPOINT_PATH}`;
197
+ this.keycloak
198
+ .getToken()
199
+ .then((token) => fetch(url, {
200
+ method: 'POST',
201
+ keepalive: true,
202
+ headers: {
203
+ 'Content-Type': 'application/json',
204
+ [LOGGER_SESSION_HEADER]: this.sessionId,
205
+ ...(token ? { Authorization: `Bearer ${token}` } : {})
206
+ },
207
+ body: JSON.stringify(payload)
208
+ }))
209
+ .catch(() => undefined);
210
+ }
211
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ActivityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
212
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ActivityService, providedIn: 'root' }); }
213
+ }
214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ActivityService, decorators: [{
215
+ type: Injectable,
216
+ args: [{ providedIn: 'root' }]
217
+ }] });
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdXRpbC9hY3Rpdml0eS9zcmMvYWN0aXZpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0MsT0FBTyxFQUNOLHNCQUFzQixFQUN0Qiw4QkFBOEIsRUFDOUIscUJBQXFCLEVBQ3JCLE1BQU0sc0JBQXNCLENBQUM7O0FBSTlCLE1BQU0sT0FBTyxlQUFlO0lBRDVCO1FBRWtCLGFBQVEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEQsd0ZBQXdGO1FBQ3hGLGdGQUFnRjtRQUMvRCxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFekQsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFDaEMsYUFBUSxHQUFrQixJQUFJLENBQUM7UUFDL0IsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLFlBQU8sR0FBRyxLQUFLLENBQUM7S0ErTXhCO0lBN01BLFlBQVk7UUFDWCxJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQy9DLElBQUksS0FBSztZQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFtQyxFQUFFO1FBQzFDLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRWhDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNGLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYSxFQUFFLGFBQXNDLEVBQUUsRUFBRSxPQUEwQixRQUFRO1FBQ2hHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU8seUJBQXlCO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBRWhDLENBQUM7UUFDYixPQUFPLEVBQUUsRUFBRSxTQUFTLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDO0lBQ3hGLENBQUM7SUFFTyxxQkFBcUI7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFFTyx3QkFBd0I7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzlCLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyx3QkFBd0I7UUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDakQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLENBQUM7aUJBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBc0IsRUFBRSxDQUFDLENBQUMsWUFBWSxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxVQUFrQjtRQUMzQyxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFN0MsTUFBTSxJQUFJLEdBQUcsVUFBcUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQXVCLENBQUM7UUFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUF1QixDQUFDO1FBQ3RFLElBQUksT0FBTyxLQUFLLFVBQVUsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQztZQUMvQixPQUFPO1FBQ1IsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7UUFDL0IsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsVUFBVSxDQUFDO1FBQy9DLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1QsSUFBSSxFQUFFLFdBQVc7WUFDakIsS0FBSyxFQUFFLEVBQUU7WUFDVCxJQUFJLEVBQUUsVUFBVTtZQUNoQixRQUFRLEVBQUUsUUFBUSxJQUFJLFNBQVM7WUFDL0IsVUFBVSxFQUFFLEVBQUU7U0FDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sa0JBQWtCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDNUIsTUFBTSxVQUFVLEdBQUcsR0FBRyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDeEUsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQztZQUNKLGFBQWEsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNSLGFBQWE7UUFDZCxDQUFDO1FBQ0QsSUFBSSxhQUFhO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUM7WUFDSixZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1IsYUFBYTtRQUNkLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1QsSUFBSSxFQUFFLGVBQWU7WUFDckIsS0FBSyxFQUFFLE9BQU87WUFDZCxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRTtTQUM5QyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sd0JBQXdCLENBQUMsT0FBZTtRQUMvQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM5QyxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxPQUFPLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7Z0JBQzlFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakIsQ0FBQztRQUNGLENBQUM7UUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFtQztRQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQzVCLE1BQU0sU0FBUyxHQUFHLEdBQUcsOEJBQThCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZFLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUM7WUFDSixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUUsVUFBVSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELFlBQVksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNSLGFBQWE7UUFDZCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNULElBQUksRUFBRSxhQUFhO1lBQ25CLEtBQUssRUFBRSxNQUFNO1lBQ2IsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFO1NBQzFCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxhQUFhLENBQUMsVUFBa0I7UUFDdkMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1lBQUUsT0FBTyxVQUFVLENBQUM7UUFDN0YsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZUFBZTtRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTyxJQUFJLENBQUMsT0FNWjtRQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFFNUIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFckIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQWtCO1lBQzlCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRTtZQUM3QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQ3JDLEVBQUUsRUFBRSxFQUFFO1lBQ04sUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJO1lBQ2pHLE9BQU8sRUFBRSxFQUFFO1lBQ1gsZUFBZSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDM0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQzlCLENBQUM7UUFFRixNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFFdEUsSUFBSSxDQUFDLFFBQVE7YUFDWCxRQUFRLEVBQUU7YUFDVixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNmLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxJQUFJO1lBQ2YsT0FBTyxFQUFFO2dCQUNSLGNBQWMsRUFBRSxrQkFBa0I7Z0JBQ2xDLENBQUMscUJBQXFCLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBVTtnQkFDeEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDdEQ7WUFDRCxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7U0FDN0IsQ0FBQyxDQUNGO2FBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7OEdBeE5XLGVBQWU7a0hBQWYsZUFBZSxjQURGLE1BQU07OzJGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBLZXljbG9ha0V2ZW50VHlwZSwgS2V5Y2xvYWtTZXJ2aWNlIH0gZnJvbSAna2V5Y2xvYWstYW5ndWxhcic7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEFQSV9DT05GSUdTIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcGknO1xyXG5pbXBvcnQgeyBBcHBzIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuXHJcbmltcG9ydCB7XHJcblx0QUNUSVZJVFlfRU5EUE9JTlRfUEFUSCxcclxuXHRBQ1RJVklUWV9TRVNTSU9OX01BUktFUl9QUkVGSVgsXHJcblx0TE9HR0VSX1NFU1NJT05fSEVBREVSXHJcbn0gZnJvbSAnLi9hY3Rpdml0eS5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBBY3Rpdml0eUV2ZW50LCBBY3Rpdml0eUV2ZW50VHlwZSB9IGZyb20gJy4vYWN0aXZpdHkudHlwZXMnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEFjdGl2aXR5U2VydmljZSB7XHJcblx0cHJpdmF0ZSByZWFkb25seSBrZXljbG9hayA9IGluamVjdChLZXljbG9ha1NlcnZpY2UpO1xyXG5cdC8vIFJvdXRlci9Mb2NhdGlvbiBvcHRpb25hbDogTUZFIHNoYXJlZCBzY29wZSdkYSBidW5sYXIgeW9rIChjaGlsZCBpbmplY3RvcidkYSB5YcWfxLF5b3IpLlxyXG5cdC8vIFBsdWdpbi9Ib3N0IHNjb3BlJ2RhIHZhci4gTnVsbCBkdXJ1bXVuZGEgUEFHRV9WSUVXIHN1YnNjcmliZSdsYXLEsSBuby1vcCBvbHVyLlxyXG5cdHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGxvY2F0aW9uID0gaW5qZWN0KExvY2F0aW9uLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuXHRwcml2YXRlIHNlc3Npb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSB1c2VybmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblx0cHJpdmF0ZSBwcmV2aW91c1BhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cdHByaXZhdGUgc3RhcnRlZCA9IGZhbHNlO1xyXG5cclxuXHRnZXRTZXNzaW9uSWQoKTogc3RyaW5nIHwgbnVsbCB7XHJcblx0XHRpZiAodGhpcy5zZXNzaW9uSWQpIHJldHVybiB0aGlzLnNlc3Npb25JZDtcclxuXHRcdGNvbnN0IGZyZXNoID0gdGhpcy5yZWFkU2Vzc2lvbklkRnJvbUtleWNsb2FrKCk7XHJcblx0XHRpZiAoZnJlc2gpIHRoaXMuc2Vzc2lvbklkID0gZnJlc2g7XHJcblx0XHRyZXR1cm4gZnJlc2g7XHJcblx0fVxyXG5cclxuXHRzdGFydChvcHRpb25zOiB7IHNoZWxsTW9kZT86IGJvb2xlYW4gfSA9IHt9KTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5zdGFydGVkKSByZXR1cm47XHJcblx0XHR0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xyXG5cclxuXHRcdHRoaXMuY2FwdHVyZVNlc3Npb25Db250ZXh0KCk7XHJcblx0XHR0aGlzLnN1YnNjcmliZUtleWNsb2FrUmVmcmVzaCgpO1xyXG5cclxuXHRcdGlmICh0aGlzLmxvY2F0aW9uKSB7XHJcblx0XHRcdHRoaXMubG9jYXRpb24ub25VcmxDaGFuZ2UoKCkgPT4gdGhpcy5tYXliZUVtaXRQYWdlVmlldyh0aGlzLmxvY2F0aW9uIS5wYXRoKCkpKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAob3B0aW9ucy5zaGVsbE1vZGUpIHtcclxuXHRcdFx0dGhpcy5zdWJzY3JpYmVMaWZlY3ljbGVFdmVudHMoKTtcclxuXHRcdFx0dGhpcy5zdWJzY3JpYmVSb3V0ZXJFdmVudHMoKTtcclxuXHRcdFx0dGhpcy5oYW5kbGVTZXNzaW9uU3RhcnQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRyYWNrKGV2ZW50OiBzdHJpbmcsIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sIHR5cGU6IEFjdGl2aXR5RXZlbnRUeXBlID0gJ0NVU1RPTScpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zdGFydGVkKSByZXR1cm47XHJcblx0XHR0aGlzLnNlbmQoeyB0eXBlLCBldmVudCwgcHJvcGVydGllcyB9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVhZFNlc3Npb25JZEZyb21LZXljbG9haygpOiBzdHJpbmcgfCBudWxsIHtcclxuXHRcdGNvbnN0IGtjID0gdGhpcy5rZXljbG9hay5nZXRLZXljbG9ha0luc3RhbmNlKCkgYXNcclxuXHRcdFx0fCB7IHNlc3Npb25JZD86IHN0cmluZzsgdG9rZW5QYXJzZWQ/OiB7IHNlc3Npb25fc3RhdGU/OiBzdHJpbmc7IHNpZD86IHN0cmluZyB9IH1cclxuXHRcdFx0fCB1bmRlZmluZWQ7XHJcblx0XHRyZXR1cm4ga2M/LnNlc3Npb25JZCA/PyBrYz8udG9rZW5QYXJzZWQ/LnNlc3Npb25fc3RhdGUgPz8ga2M/LnRva2VuUGFyc2VkPy5zaWQgPz8gbnVsbDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FwdHVyZVNlc3Npb25Db250ZXh0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZXNzaW9uSWQgPSB0aGlzLnJlYWRTZXNzaW9uSWRGcm9tS2V5Y2xvYWsoKTtcclxuXHRcdHRoaXMudXNlcm5hbWUgPSB0aGlzLmtleWNsb2FrLmdldFVzZXJuYW1lKCkgPz8gbnVsbDtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3Vic2NyaWJlS2V5Y2xvYWtSZWZyZXNoKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5rZXljbG9hay5rZXljbG9ha0V2ZW50cyQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG5cdFx0XHRpZiAoZXZlbnQudHlwZSA9PT0gS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoUmVmcmVzaFN1Y2Nlc3MpIHtcclxuXHRcdFx0XHR0aGlzLmNhcHR1cmVTZXNzaW9uQ29udGV4dCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc3Vic2NyaWJlTGlmZWN5Y2xlRXZlbnRzKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5rZXljbG9hay5rZXljbG9ha0V2ZW50cyQuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG5cdFx0XHRpZiAoZXZlbnQudHlwZSA9PT0gS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoTG9nb3V0KSB7XHJcblx0XHRcdFx0dGhpcy5zZW5kU2Vzc2lvbkVuZCgnbG9nb3V0Jyk7XHJcblx0XHRcdH0gZWxzZSBpZiAoZXZlbnQudHlwZSA9PT0gS2V5Y2xvYWtFdmVudFR5cGUuT25BdXRoUmVmcmVzaEVycm9yKSB7XHJcblx0XHRcdFx0dGhpcy5zZW5kU2Vzc2lvbkVuZCgncmVmcmVzaF9mYWlsZWQnKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHN1YnNjcmliZVJvdXRlckV2ZW50cygpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5yb3V0ZXIpIHJldHVybjtcclxuXHRcdHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcigoZSk6IGUgaXMgTmF2aWdhdGlvbkVuZCA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuXHRcdFx0dGhpcy5tYXliZUVtaXRQYWdlVmlldyhldmVudC51cmxBZnRlclJlZGlyZWN0cyk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbWF5YmVFbWl0UGFnZVZpZXcoY3VycmVudFVybDogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRpZiAoY3VycmVudFVybCA9PT0gdGhpcy5wcmV2aW91c1BhdGgpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBzbG90ID0gZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuXHRcdGNvbnN0IGxhc3RVcmwgPSBzbG90WydfX2FyaWxBY3Rpdml0eUxhc3RQYWdlVXJsJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cdFx0Y29uc3QgbGFzdEF0ID0gc2xvdFsnX19hcmlsQWN0aXZpdHlMYXN0UGFnZUF0J10gYXMgbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG5cdFx0aWYgKGxhc3RVcmwgPT09IGN1cnJlbnRVcmwgJiYgbGFzdEF0ICYmIERhdGUubm93KCkgLSBsYXN0QXQgPCAxMDAwKSB7XHJcblx0XHRcdHRoaXMucHJldmlvdXNQYXRoID0gY3VycmVudFVybDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHByZXZpb3VzID0gdGhpcy5wcmV2aW91c1BhdGg7XHJcblx0XHR0aGlzLnByZXZpb3VzUGF0aCA9IGN1cnJlbnRVcmw7XHJcblx0XHRzbG90WydfX2FyaWxBY3Rpdml0eUxhc3RQYWdlVXJsJ10gPSBjdXJyZW50VXJsO1xyXG5cdFx0c2xvdFsnX19hcmlsQWN0aXZpdHlMYXN0UGFnZUF0J10gPSBEYXRlLm5vdygpO1xyXG5cclxuXHRcdHRoaXMuc2VuZCh7XHJcblx0XHRcdHR5cGU6ICdQQUdFX1ZJRVcnLFxyXG5cdFx0XHRldmVudDogJycsXHJcblx0XHRcdHBhZ2U6IGN1cnJlbnRVcmwsXHJcblx0XHRcdHJlZmVycmVyOiBwcmV2aW91cyA/PyB1bmRlZmluZWQsXHJcblx0XHRcdHByb3BlcnRpZXM6IHt9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaGFuZGxlU2Vzc2lvblN0YXJ0KCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLnNlc3Npb25JZCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgY3VycmVudEtleSA9IGAke0FDVElWSVRZX1NFU1NJT05fTUFSS0VSX1BSRUZJWH0ke3RoaXMuc2Vzc2lvbklkfWA7XHJcblx0XHRsZXQgYWxyZWFkeU1hcmtlZCA9IGZhbHNlO1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0YWxyZWFkeU1hcmtlZCA9ICEhbG9jYWxTdG9yYWdlLmdldEl0ZW0oY3VycmVudEtleSk7XHJcblx0XHRcdHRoaXMucHVyZ2VTdGFsZVNlc3Npb25NYXJrZXJzKGN1cnJlbnRLZXkpO1xyXG5cdFx0fSBjYXRjaCB7XHJcblx0XHRcdC8qIHN3YWxsb3cgKi9cclxuXHRcdH1cclxuXHRcdGlmIChhbHJlYWR5TWFya2VkKSByZXR1cm47XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbShjdXJyZW50S2V5LCBEYXRlLm5vdygpLnRvU3RyaW5nKCkpO1xyXG5cdFx0fSBjYXRjaCB7XHJcblx0XHRcdC8qIHN3YWxsb3cgKi9cclxuXHRcdH1cclxuXHRcdHRoaXMuc2VuZCh7XHJcblx0XHRcdHR5cGU6ICdTRVNTSU9OX1NUQVJUJyxcclxuXHRcdFx0ZXZlbnQ6ICdsb2dpbicsXHJcblx0XHRcdHByb3BlcnRpZXM6IHsgdXNlckFnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50IH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBwdXJnZVN0YWxlU2Vzc2lvbk1hcmtlcnMoa2VlcEtleTogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRjb25zdCBzdGFsZTogc3RyaW5nW10gPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbG9jYWxTdG9yYWdlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGtleSA9IGxvY2FsU3RvcmFnZS5rZXkoaSk7XHJcblx0XHRcdGlmIChrZXkgJiYga2V5ICE9PSBrZWVwS2V5ICYmIGtleS5zdGFydHNXaXRoKEFDVElWSVRZX1NFU1NJT05fTUFSS0VSX1BSRUZJWCkpIHtcclxuXHRcdFx0XHRzdGFsZS5wdXNoKGtleSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHN0YWxlLmZvckVhY2goKGspID0+IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGspKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2VuZFNlc3Npb25FbmQocmVhc29uOiAnbG9nb3V0JyB8ICdyZWZyZXNoX2ZhaWxlZCcpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zZXNzaW9uSWQpIHJldHVybjtcclxuXHRcdGNvbnN0IG1hcmtlcktleSA9IGAke0FDVElWSVRZX1NFU1NJT05fTUFSS0VSX1BSRUZJWH0ke3RoaXMuc2Vzc2lvbklkfWA7XHJcblx0XHRsZXQgZHVyYXRpb25NcyA9IDA7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBsb2dpblRpbWVzdGFtcCA9IHBhcnNlSW50KGxvY2FsU3RvcmFnZS5nZXRJdGVtKG1hcmtlcktleSkgPz8gJzAnLCAxMCk7XHJcblx0XHRcdGR1cmF0aW9uTXMgPSBsb2dpblRpbWVzdGFtcCA/IERhdGUubm93KCkgLSBsb2dpblRpbWVzdGFtcCA6IDA7XHJcblx0XHRcdGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG1hcmtlcktleSk7XHJcblx0XHR9IGNhdGNoIHtcclxuXHRcdFx0Lyogc3dhbGxvdyAqL1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZW5kKHtcclxuXHRcdFx0dHlwZTogJ1NFU1NJT05fRU5EJyxcclxuXHRcdFx0ZXZlbnQ6IHJlYXNvbixcclxuXHRcdFx0cHJvcGVydGllczogeyBkdXJhdGlvbk1zIH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB0b0Fic29sdXRlVXJsKHJvdXRlclBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRpZiAocm91dGVyUGF0aC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgcm91dGVyUGF0aC5zdGFydHNXaXRoKCdodHRwczovLycpKSByZXR1cm4gcm91dGVyUGF0aDtcclxuXHRcdHJldHVybiBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS8jJHtyb3V0ZXJQYXRofWA7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBNRkUgc2hhcmVkIHNjb3BlJ3VuZGEgYFJvdXRlcmAgdmUgYExvY2F0aW9uYCBudWxsIChoZXIgaWtpc2kgZGUgY2hpbGQgaW5qZWN0b3InZGEgeWHFn8SxeW9yKS5cclxuXHQgKiBCdSBkdXJ1bWRhIEFuZ3VsYXIgc295dXRsYW1hbGFyxLFuYSBkYXlhbmFtYXnEsXo7IGB3aW5kb3cubG9jYXRpb24uaGFzaGAndGVuIG9rdXJ1eiDigJRcclxuXHQgKiBicm93c2VyJ8SxbiBzYWhpcCBvbGR1xJ91IGfDvG5jZWwgVVJMLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgcmVhZEN1cnJlbnRQYXRoKCk6IHN0cmluZyB7XHJcblx0XHRpZiAodGhpcy5sb2NhdGlvbikgcmV0dXJuIHRoaXMubG9jYXRpb24ucGF0aCgpO1xyXG5cdFx0aWYgKHRoaXMucm91dGVyKSByZXR1cm4gdGhpcy5yb3V0ZXIudXJsO1xyXG5cdFx0Y29uc3QgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xyXG5cdFx0cmV0dXJuIGhhc2guc3RhcnRzV2l0aCgnIycpID8gaGFzaC5zbGljZSgxKSA6ICcnO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZW5kKHBhcnRpYWw6IHtcclxuXHRcdHR5cGU6IEFjdGl2aXR5RXZlbnRUeXBlO1xyXG5cdFx0ZXZlbnQ6IHN0cmluZztcclxuXHRcdHBhZ2U/OiBzdHJpbmc7XHJcblx0XHRyZWZlcnJlcj86IHN0cmluZztcclxuXHRcdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG5cdH0pOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5zZXNzaW9uSWQpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBiYXNlVXJsID0gQVBJX0NPTkZJR1MuZ2V0RXh0ZXJuYWxBcHBFbmRwb2ludChBcHBzLkVWRU5UX0dBVEVXQVkpO1xyXG5cdFx0aWYgKCFiYXNlVXJsKSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgY3VycmVudFBhdGggPSBwYXJ0aWFsLnBhZ2UgPz8gdGhpcy5yZWFkQ3VycmVudFBhdGgoKTtcclxuXHRcdGNvbnN0IHBheWxvYWQ6IEFjdGl2aXR5RXZlbnQgPSB7XHJcblx0XHRcdHR5cGU6IHBhcnRpYWwudHlwZSxcclxuXHRcdFx0c2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcclxuXHRcdFx0dXNlcm5hbWU6IHRoaXMudXNlcm5hbWUgPz8gJycsXHJcblx0XHRcdGV2ZW50OiBwYXJ0aWFsLmV2ZW50LFxyXG5cdFx0XHRwYWdlOiB0aGlzLnRvQWJzb2x1dGVVcmwoY3VycmVudFBhdGgpLFxyXG5cdFx0XHRpcDogJycsXHJcblx0XHRcdHJlZmVycmVyOiBwYXJ0aWFsLnJlZmVycmVyID8gdGhpcy50b0Fic29sdXRlVXJsKHBhcnRpYWwucmVmZXJyZXIpIDogYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vI2AsXHJcblx0XHRcdHRyYWNlSWQ6ICcnLFxyXG5cdFx0XHRjbGllbnRUaW1lc3RhbXA6IERhdGUubm93KCksXHJcblx0XHRcdHByb3BlcnRpZXM6IHBhcnRpYWwucHJvcGVydGllc1xyXG5cdFx0fTtcclxuXHJcblx0XHRjb25zdCB1cmwgPSBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyQvLCAnJyl9LyR7QUNUSVZJVFlfRU5EUE9JTlRfUEFUSH1gO1xyXG5cclxuXHRcdHRoaXMua2V5Y2xvYWtcclxuXHRcdFx0LmdldFRva2VuKClcclxuXHRcdFx0LnRoZW4oKHRva2VuKSA9PlxyXG5cdFx0XHRcdGZldGNoKHVybCwge1xyXG5cdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXHJcblx0XHRcdFx0XHRrZWVwYWxpdmU6IHRydWUsXHJcblx0XHRcdFx0XHRoZWFkZXJzOiB7XHJcblx0XHRcdFx0XHRcdCdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcblx0XHRcdFx0XHRcdFtMT0dHRVJfU0VTU0lPTl9IRUFERVJdOiB0aGlzLnNlc3Npb25JZCEsXHJcblx0XHRcdFx0XHRcdC4uLih0b2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSA6IHt9KVxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdGJvZHk6IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KVxyXG5cdFx0XHQuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcclxuXHR9XHJcbn1cclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3V0aWwvYWN0aXZpdHkvc3JjL2FjdGl2aXR5LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBBY3Rpdml0eUV2ZW50VHlwZSA9ICdTRVNTSU9OX1NUQVJUJyB8ICdTRVNTSU9OX0VORCcgfCAnUEFHRV9WSUVXJyB8ICdCVVRUT05fQ0xJQ0snIHwgJ0NVU1RPTSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2aXR5RXZlbnQge1xyXG5cdHR5cGU6IEFjdGl2aXR5RXZlbnRUeXBlO1xyXG5cdHNlc3Npb25JZDogc3RyaW5nO1xyXG5cdHVzZXJuYW1lOiBzdHJpbmc7XHJcblx0ZXZlbnQ6IHN0cmluZztcclxuXHRwYWdlOiBzdHJpbmc7XHJcblx0aXA6IHN0cmluZztcclxuXHRyZWZlcnJlcjogc3RyaW5nO1xyXG5cdHRyYWNlSWQ6IHN0cmluZztcclxuXHRjbGllbnRUaW1lc3RhbXA/OiBudW1iZXI7XHJcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbn1cclxuIl19