@seniorsistemas/data-seniorx-core 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/core/constants/editable-overlay.const.d.ts +4 -0
  2. package/core/constants/help-popover.const.d.ts +7 -0
  3. package/core/constants/input-mask.const.d.ts +5 -0
  4. package/core/constants/navigation-button.const.d.ts +3 -0
  5. package/core/constants/object-card.const.d.ts +21 -0
  6. package/core/constants/thumbnail.const.d.ts +6 -0
  7. package/core/constants/thumbnails.const.d.ts +4 -0
  8. package/core/constants/token-list.const.d.ts +3 -0
  9. package/core/types/button.type.d.ts +1 -1
  10. package/core/types/datepicker.type.d.ts +28 -0
  11. package/core/types/dynamic-form.type.d.ts +29 -0
  12. package/core/types/editable-overlay.type.d.ts +15 -0
  13. package/core/types/help-popover.type.d.ts +2 -0
  14. package/core/types/input-mask.type.d.ts +6 -0
  15. package/core/types/lookup.type.d.ts +45 -0
  16. package/core/types/navigation-button.type.d.ts +9 -0
  17. package/core/types/row-card.type.d.ts +5 -0
  18. package/core/types/semantics.type.d.ts +1 -1
  19. package/core/types/table-options.type.d.ts +1 -0
  20. package/core/types/thumbnail.type.d.ts +1 -0
  21. package/core/types/thumbnails.type.d.ts +20 -0
  22. package/core/types/token-list.type.d.ts +6 -0
  23. package/core/utils/emoji-support.util.d.ts +12 -0
  24. package/core/utils/overlay-dismiss.util.d.ts +25 -0
  25. package/esm2022/core/config/row-card.type.config.mjs +3 -1
  26. package/esm2022/core/constants/country-phone-picker.const.mjs +6 -6
  27. package/esm2022/core/constants/editable-overlay.const.mjs +5 -0
  28. package/esm2022/core/constants/help-popover.const.mjs +7 -0
  29. package/esm2022/core/constants/input-mask.const.mjs +6 -0
  30. package/esm2022/core/constants/navigation-button.const.mjs +4 -0
  31. package/esm2022/core/constants/object-card.const.mjs +23 -0
  32. package/esm2022/core/constants/thumbnail.const.mjs +14 -0
  33. package/esm2022/core/constants/thumbnails.const.mjs +5 -0
  34. package/esm2022/core/constants/token-list.const.mjs +4 -0
  35. package/esm2022/core/types/button.type.mjs +1 -1
  36. package/esm2022/core/types/datepicker.type.mjs +2 -0
  37. package/esm2022/core/types/dynamic-form.type.mjs +2 -0
  38. package/esm2022/core/types/editable-overlay.type.mjs +2 -0
  39. package/esm2022/core/types/help-popover.type.mjs +2 -0
  40. package/esm2022/core/types/input-mask.type.mjs +2 -0
  41. package/esm2022/core/types/lookup.type.mjs +2 -0
  42. package/esm2022/core/types/navigation-button.type.mjs +2 -0
  43. package/esm2022/core/types/row-card.type.mjs +1 -1
  44. package/esm2022/core/types/semantics.type.mjs +1 -1
  45. package/esm2022/core/types/table-options.type.mjs +1 -1
  46. package/esm2022/core/types/thumbnail.type.mjs +2 -0
  47. package/esm2022/core/types/thumbnails.type.mjs +2 -0
  48. package/esm2022/core/types/token-list.type.mjs +2 -0
  49. package/esm2022/core/utils/emoji-support.util.mjs +48 -0
  50. package/esm2022/core/utils/mask.util.mjs +2 -2
  51. package/esm2022/core/utils/overlay-dismiss.util.mjs +38 -0
  52. package/esm2022/features/alert/alert.component.mjs +5 -2
  53. package/esm2022/features/autocomplete/autocomplete.component.mjs +30 -8
  54. package/esm2022/features/bignumber-input/bignumber-input.component.mjs +1 -1
  55. package/esm2022/features/button/button.component.mjs +13 -5
  56. package/esm2022/features/card-list/card/card.component.mjs +2 -2
  57. package/esm2022/features/card-list/card-list.component.mjs +2 -2
  58. package/esm2022/features/checkbox-list/checkbox-list.component.mjs +25 -5
  59. package/esm2022/features/chips/chips.component.mjs +3 -3
  60. package/esm2022/features/code-editor/code-editor.component.mjs +12 -3
  61. package/esm2022/features/combobox/combobox.component.mjs +3 -3
  62. package/esm2022/features/confirm/confirm.component.mjs +2 -2
  63. package/esm2022/features/context-selector/context-selector.component.mjs +1 -1
  64. package/esm2022/features/country-phone-picker/country-phone-picker.component.mjs +22 -18
  65. package/esm2022/features/currency/currency.component.mjs +3 -3
  66. package/esm2022/features/datepicker/datepicker.component.mjs +814 -0
  67. package/esm2022/features/dynamic-form/dynamic-form-field.directive.mjs +178 -0
  68. package/esm2022/features/dynamic-form/dynamic-form.component.mjs +60 -0
  69. package/esm2022/features/dynamic-form/dynamic-form.registry.mjs +13 -0
  70. package/esm2022/features/editable-overlay/editable-overlay-editor.directive.mjs +31 -0
  71. package/esm2022/features/editable-overlay/editable-overlay.component.mjs +217 -0
  72. package/esm2022/features/editor/editor.component.mjs +173 -0
  73. package/esm2022/features/empty-state/empty-state.component.mjs +3 -3
  74. package/esm2022/features/fileupload/fileupload.component.mjs +3 -3
  75. package/esm2022/features/help-popover/help-popover.component.mjs +204 -0
  76. package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
  77. package/esm2022/features/icon-picker/icon-picker.component.mjs +4 -4
  78. package/esm2022/features/image-cropper/image-cropper.component.mjs +2 -2
  79. package/esm2022/features/info-sign/info-sign.component.mjs +6 -3
  80. package/esm2022/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
  81. package/esm2022/features/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +2 -2
  82. package/esm2022/features/input-mask/input-mask.directive.mjs +510 -0
  83. package/esm2022/features/list/list.component.mjs +2 -2
  84. package/esm2022/features/localized-number-input/localized-number-input.component.mjs +3 -3
  85. package/esm2022/features/lookup/lookup.component.mjs +351 -0
  86. package/esm2022/features/modal/modal.component.mjs +6 -3
  87. package/esm2022/features/modalc/modalc.component.mjs +6 -3
  88. package/esm2022/features/navigation-button/navigation-button.component.mjs +172 -0
  89. package/esm2022/features/number-input/number-input.component.mjs +10 -4
  90. package/esm2022/features/object-card/components/object-card-field/object-card-field.component.mjs +89 -0
  91. package/esm2022/features/object-card/components/object-card-main/object-card-main.component.mjs +114 -0
  92. package/esm2022/features/object-card/object-card.component.mjs +199 -0
  93. package/esm2022/features/password-strength/password-strength.component.mjs +3 -3
  94. package/esm2022/features/pin-code-field/pin-code-field.component.mjs +14 -4
  95. package/esm2022/features/popover/popover.component.mjs +29 -3
  96. package/esm2022/features/profile-picture-picker/profile-picture-picker.component.mjs +13 -4
  97. package/esm2022/features/rating-scale/rating-scale.component.mjs +24 -4
  98. package/esm2022/features/row-card-list/row-card/row-card.component.mjs +19 -4
  99. package/esm2022/features/row-card-list/row-card-list.component.mjs +12 -3
  100. package/esm2022/features/scaffold/scaffold.component.mjs +3 -3
  101. package/esm2022/features/searchbox/searchbox.component.mjs +2 -2
  102. package/esm2022/features/select-button/select-button.component.mjs +26 -4
  103. package/esm2022/features/slider/slider.component.mjs +3 -3
  104. package/esm2022/features/split-button/split-button.component.mjs +1 -1
  105. package/esm2022/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.mjs +15 -18
  106. package/esm2022/features/spotlight/spotlight.component.mjs +2 -2
  107. package/esm2022/features/star-rating/star-rating.component.mjs +25 -4
  108. package/esm2022/features/table/components/table-cell-content.component.mjs +2 -2
  109. package/esm2022/features/table/table.component.mjs +30 -9
  110. package/esm2022/features/textarea/textarea.component.mjs +3 -3
  111. package/esm2022/features/thumbnail/thumbnail.component.mjs +86 -0
  112. package/esm2022/features/thumbnails/components/thumbnail-item/thumbnail-item.component.mjs +59 -0
  113. package/esm2022/features/thumbnails/components/thumbnail-item-image/thumbnail-item-image.component.mjs +25 -0
  114. package/esm2022/features/thumbnails/components/thumbnail-item-video/thumbnail-item-video.component.mjs +50 -0
  115. package/esm2022/features/thumbnails/thumbnails.component.mjs +76 -0
  116. package/esm2022/features/tiered-menu/directives/tiered-menu.directive.mjs +13 -1
  117. package/esm2022/features/token-list/token-list.component.mjs +64 -0
  118. package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2 -2
  119. package/esm2022/locales/en.json +409 -1
  120. package/esm2022/locales/es-CO.json +423 -2
  121. package/esm2022/locales/pt.json +1037 -630
  122. package/esm2022/providers/features.provider.mjs +20 -2
  123. package/esm2022/providers/primeng-config.provider.mjs +14 -128
  124. package/esm2022/providers/translate.provider.mjs +2 -2
  125. package/esm2022/public-api.mjs +31 -1
  126. package/features/alert/alert.component.d.ts +1 -0
  127. package/features/autocomplete/autocomplete.component.d.ts +9 -3
  128. package/features/button/button.component.d.ts +3 -1
  129. package/features/checkbox-list/checkbox-list.component.d.ts +8 -1
  130. package/features/code-editor/code-editor.component.d.ts +5 -1
  131. package/features/country-phone-picker/country-phone-picker.component.d.ts +3 -0
  132. package/features/datepicker/datepicker.component.d.ts +118 -0
  133. package/features/dynamic-form/dynamic-form-field.directive.d.ts +26 -0
  134. package/features/dynamic-form/dynamic-form.component.d.ts +15 -0
  135. package/features/dynamic-form/dynamic-form.registry.d.ts +11 -0
  136. package/features/editable-overlay/editable-overlay-editor.directive.d.ts +22 -0
  137. package/features/editable-overlay/editable-overlay.component.d.ts +60 -0
  138. package/features/editor/editor.component.d.ts +47 -0
  139. package/features/help-popover/help-popover.component.d.ts +81 -0
  140. package/features/info-sign/info-sign.component.d.ts +2 -1
  141. package/features/input-mask/input-mask.directive.d.ts +117 -0
  142. package/features/lookup/lookup.component.d.ts +104 -0
  143. package/features/modal/modal.component.d.ts +2 -1
  144. package/features/modalc/modalc.component.d.ts +2 -1
  145. package/features/navigation-button/navigation-button.component.d.ts +58 -0
  146. package/features/number-input/number-input.component.d.ts +3 -1
  147. package/features/object-card/components/object-card-field/object-card-field.component.d.ts +48 -0
  148. package/features/object-card/components/object-card-main/object-card-main.component.d.ts +57 -0
  149. package/features/object-card/object-card.component.d.ts +70 -0
  150. package/features/pin-code-field/pin-code-field.component.d.ts +6 -1
  151. package/features/popover/popover.component.d.ts +4 -1
  152. package/features/profile-picture-picker/profile-picture-picker.component.d.ts +5 -1
  153. package/features/rating-scale/rating-scale.component.d.ts +9 -1
  154. package/features/row-card-list/row-card/row-card.component.d.ts +6 -1
  155. package/features/row-card-list/row-card-list.component.d.ts +4 -1
  156. package/features/select-button/select-button.component.d.ts +9 -1
  157. package/features/star-rating/star-rating.component.d.ts +9 -1
  158. package/features/table/table.component.d.ts +2 -1
  159. package/features/thumbnail/thumbnail.component.d.ts +48 -0
  160. package/features/thumbnails/components/thumbnail-item/thumbnail-item.component.d.ts +29 -0
  161. package/features/thumbnails/components/thumbnail-item-image/thumbnail-item-image.component.d.ts +13 -0
  162. package/features/thumbnails/components/thumbnail-item-video/thumbnail-item-video.component.d.ts +19 -0
  163. package/features/thumbnails/thumbnails.component.d.ts +46 -0
  164. package/features/tiered-menu/directives/tiered-menu.directive.d.ts +2 -0
  165. package/features/token-list/token-list.component.d.ts +31 -0
  166. package/fesm2022/seniorsistemas-data-seniorx-core.mjs +11288 -6613
  167. package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
  168. package/package.json +12 -3
  169. package/providers/primeng-config.provider.d.ts +12 -0
  170. package/public-api.d.ts +38 -0
  171. package/src/locales/en.json +409 -1
  172. package/src/locales/es-CO.json +423 -2
  173. package/src/locales/pt.json +1037 -630
  174. package/styles/sdc-global-variables.scss +38 -0
  175. package/styles.css +132 -0
  176. package/styles.scss +2 -0
  177. package/esm2022/providers/custom/button.mjs +0 -93
  178. package/esm2022/providers/custom/toast.mjs +0 -75
  179. package/providers/custom/button.d.ts +0 -16
  180. package/providers/custom/toast.d.ts +0 -14
@@ -1,7 +1,9 @@
1
1
  import { ApplicationRef, ChangeDetectorRef, Directive, ElementRef, EventEmitter, HostListener, Injector, Input, Output, createComponent, inject } from '@angular/core';
2
+ import { Router } from '@angular/router';
2
3
  import { Subject, takeUntil } from 'rxjs';
3
4
  import { TIERED_MENU_DEFAULT_TRIGGER_EVENT, TIERED_MENU_MOBILE_BREAKPOINT_PX } from '../../../core/constants/tiered-menu.const';
4
5
  import { enableBodyScroll } from '../../../core/utils/body-scroll.util';
6
+ import { watchOverlayDismiss } from '../../../core/utils/overlay-dismiss.util';
5
7
  import { TieredMenuNestedComponent } from '../components/tiered-menu-nested/tiered-menu-nested.component';
6
8
  import { TieredMenuComponent } from '../components/tiered-menu/tiered-menu.component';
7
9
  import { TieredMenuEventService } from '../services/tiered-menu.event.service';
@@ -21,6 +23,7 @@ export class TieredMenuDirective {
21
23
  tieredMenuService = inject(TieredMenuService);
22
24
  globalService = inject(TieredMenuGlobalService);
23
25
  cdr = inject(ChangeDetectorRef);
26
+ router = inject(Router, { optional: true });
24
27
  items = [];
25
28
  focusedItem;
26
29
  triggerEvent = TIERED_MENU_DEFAULT_TRIGGER_EVENT;
@@ -44,6 +47,7 @@ export class TieredMenuDirective {
44
47
  unsubscribe$ = new Subject();
45
48
  lastActiveElement;
46
49
  itemsAreValid = false;
50
+ dismissWatcher = null;
47
51
  resizeObserver = new ResizeObserver(() => {
48
52
  this.setMenuPosition();
49
53
  this.componentRef?.hostView.detectChanges();
@@ -109,6 +113,12 @@ export class TieredMenuDirective {
109
113
  else {
110
114
  this.createTieredMenu();
111
115
  }
116
+ this.dismissWatcher = watchOverlayDismiss({
117
+ getTriggerElement: () => this.elementRef.nativeElement,
118
+ isOpen: () => this.isOpen,
119
+ onDismiss: () => this.eventService.closeAllMenusEvent.emit(),
120
+ router: this.router
121
+ });
112
122
  }
113
123
  createTieredMenu() {
114
124
  this.componentRef = createComponent(TieredMenuComponent, {
@@ -144,6 +154,8 @@ export class TieredMenuDirective {
144
154
  this.componentRef.destroy();
145
155
  this.componentRef = null;
146
156
  this.resizeObserver.disconnect();
157
+ this.dismissWatcher?.destroy();
158
+ this.dismissWatcher = null;
147
159
  this.tieredMenuService.currentItems = this.tieredMenuService.items;
148
160
  this.tieredMenuService.currentItem = this.tieredMenuService.items[0] ?? null;
149
161
  // Restore focus to the element that was focused before opening the menu
@@ -243,4 +255,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
243
255
  type: HostListener,
244
256
  args: ['mouseenter']
245
257
  }] } });
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGllcmVkLW1lbnUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy90aWVyZWQtbWVudS9kaXJlY3RpdmVzL3RpZXJlZC1tZW51LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLGlCQUFpQixFQUVqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBRU4sZUFBZSxFQUNmLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQU14RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUMxRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFFcEUsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7QUFDdEMsTUFBTSxpQ0FBaUMsR0FBRyxFQUFFLENBQUM7QUFDN0MsTUFBTSxvQ0FBb0MsR0FBRyxDQUFDLENBQUM7QUFDL0MsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQUM7QUFDeEMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFPN0IsTUFBTSxPQUFPLG1CQUFtQjtJQUNiLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUF1QixDQUFBLENBQUMsQ0FBQztJQUM3QyxNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUIsWUFBWSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzlDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzlDLGFBQWEsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNoRCxHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFHMUMsS0FBSyxHQUF5QixFQUFFLENBQUM7SUFHakMsV0FBVyxDQUFzQjtJQUdqQyxZQUFZLEdBQTJCLGlDQUEyRCxDQUFDO0lBR25HLFNBQVMsQ0FBVTtJQUVULGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDNUMsZ0JBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztJQUU3RCxJQUNXLGFBQWEsQ0FBQyxLQUE4QztRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUNXLFdBQVcsQ0FBQyxLQUE4QztRQUNuRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxRQUFRLENBQUMsS0FBOEM7UUFDN0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRU8sWUFBWSxHQUF5RSxJQUFJLENBQUM7SUFDMUYsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ04sWUFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDNUMsaUJBQWlCLENBQVc7SUFDNUIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUNiLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUU7UUFDeEQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1FBRTFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO1lBQzFDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFHUyxPQUFPLENBQUMsS0FBaUI7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxhQUF3QixDQUFDO1FBQzNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFHUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4RSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsYUFBd0IsQ0FBQztRQUMzRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5RCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN0QyxJQUFJLENBQUMsaUJBQTZDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxnQ0FBZ0MsQ0FBQztRQUU3RSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixFQUFFO1lBQ3ZELG1CQUFtQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUN6QyxlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDL0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUE0QixDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsTUFBTSxXQUFXLEdBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBNkIsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoSCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyx5QkFBeUIsRUFBRTtZQUM3RCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFDekMsZUFBZSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQy9CLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsYUFBNEIsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ25FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7UUFFN0Usd0VBQXdFO1FBQ3hFLGdCQUFnQixFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGlCQUE2QyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLGlDQUFpQyxDQUFDO1FBQ3JELE1BQU0sYUFBYSxHQUFHLG9DQUFvQyxDQUFDO1FBQzNELE1BQU0sT0FBTyxHQUFHLDZCQUE2QixDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQTZCLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDaEgsTUFBTSxTQUFTLEdBQUcsV0FBVyxFQUFFLFdBQVcsSUFBSSx5QkFBeUIsQ0FBQztRQUN4RSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3RGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUNwRCxDQUFDLEtBQWEsRUFBRSxJQUFnQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQ3hGLENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3ZELENBQUMsS0FBYSxFQUFFLElBQWdDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQ3ZGLENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxhQUFhLEdBQUcsYUFBYSxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDOUYsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDakQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7UUFFcEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRztZQUM1QixlQUFlLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZILElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUk7WUFDN0IsSUFBSSxDQUFDLFFBQVEsSUFBSSxjQUFjLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRTVHLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLFlBQVksbUJBQW1CLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNyRixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBRW5FLCtGQUErRjtRQUMvRixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxZQUFZLElBQUksQ0FBQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQzFHLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzlDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUMvRSxDQUFDO0lBQ0gsQ0FBQzt3R0FyUFUsbUJBQW1COzRGQUFuQixtQkFBbUIsd2NBRm5CLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLENBQUM7OzRGQUUzQyxtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLCtCQUErQjtvQkFDekMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRSxDQUFDLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDO2lCQUN2RDs4QkFXUSxLQUFLO3NCQURYLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLFNBQVM7c0JBRGYsS0FBSztnQkFHVyxnQkFBZ0I7c0JBQWhDLE1BQU07Z0JBQ1UsZ0JBQWdCO3NCQUFoQyxNQUFNO2dCQUdJLGFBQWE7c0JBRHZCLEtBQUs7dUJBQUMsZUFBZTtnQkFNWCxXQUFXO3NCQURyQixLQUFLO3VCQUFDLGFBQWE7Z0JBMERWLE9BQU87c0JBRGhCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWF2QixZQUFZO3NCQURyQixZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudFJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0b3IsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIGNyZWF0ZUNvbXBvbmVudCxcbiAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFRJRVJFRF9NRU5VX0RFRkFVTFRfVFJJR0dFUl9FVkVOVCwgVElFUkVEX01FTlVfTU9CSUxFX0JSRUFLUE9JTlRfUFggfSBmcm9tICcuLi8uLi8uLi9jb3JlL2NvbnN0YW50cy90aWVyZWQtbWVudS5jb25zdCc7XG5pbXBvcnQgeyBlbmFibGVCb2R5U2Nyb2xsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9ib2R5LXNjcm9sbC51dGlsJztcbmltcG9ydCB0eXBlIHtcbiAgVGllcmVkTWVudUl0ZW1EYXRhLFxuICBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSxcbiAgVGllcmVkTWVudVRyaWdnZXJFdmVudFxufSBmcm9tICcuLi8uLi8uLi9jb3JlL3R5cGVzL3RpZXJlZC1tZW51LnR5cGUnO1xuaW1wb3J0IHsgVGllcmVkTWVudU5lc3RlZENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvdGllcmVkLW1lbnUtbmVzdGVkL3RpZXJlZC1tZW51LW5lc3RlZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGllcmVkTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvdGllcmVkLW1lbnUvdGllcmVkLW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IFRpZXJlZE1lbnVFdmVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90aWVyZWQtbWVudS5ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFRpZXJlZE1lbnVHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGllcmVkLW1lbnUuZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGllcmVkTWVudVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90aWVyZWQtbWVudS5zZXJ2aWNlJztcblxuY29uc3QgVElFUkVEX01FTlVfREVGQVVMVF9XSURUSCA9IDE3NjtcbmNvbnN0IFRJRVJFRF9NRU5VX0lURU1fSEVJR0hUX0RJUkVDVElWRSA9IDM3O1xuY29uc3QgVElFUkVEX01FTlVfRElWSURFUl9IRUlHSFRfRElSRUNUSVZFID0gNTtcbmNvbnN0IFRJRVJFRF9NRU5VX1BBRERJTkdfRElSRUNUSVZFID0gODtcbmNvbnN0IFRJRVJFRF9NRU5VX01BUkdJTiA9IDQ7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzZGNUaWVyZWRNZW51XSxbc1RpZXJlZE1lbnVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbVGllcmVkTWVudUV2ZW50U2VydmljZSwgVGllcmVkTWVudVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFRpZXJlZE1lbnVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBSZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2UgPSBpbmplY3QoVGllcmVkTWVudUV2ZW50U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGllcmVkTWVudVNlcnZpY2UgPSBpbmplY3QoVGllcmVkTWVudVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbFNlcnZpY2UgPSBpbmplY3QoVGllcmVkTWVudUdsb2JhbFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGl0ZW1zOiBUaWVyZWRNZW51SXRlbURhdGFbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBmb2N1c2VkSXRlbT86IFRpZXJlZE1lbnVJdGVtRGF0YTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdHJpZ2dlckV2ZW50OiBUaWVyZWRNZW51VHJpZ2dlckV2ZW50ID0gVElFUkVEX01FTlVfREVGQVVMVF9UUklHR0VSX0VWRU5UIGFzIFRpZXJlZE1lbnVUcmlnZ2VyRXZlbnQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGFyaWFMYWJlbD86IHN0cmluZztcblxuICBAT3V0cHV0KCkgcHVibGljIHRpZXJlZE1lbnVPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgdGllcmVkTWVudUNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBASW5wdXQoJ3NkY1RpZXJlZE1lbnUnKVxuICBwdWJsaWMgc2V0IGRhdGFDb3JlSXRlbXModmFsdWU6IFRpZXJlZE1lbnVJdGVtRGF0YVtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc2V0SXRlbXModmFsdWUpO1xuICB9XG5cbiAgQElucHV0KCdzVGllcmVkTWVudScpXG4gIHB1YmxpYyBzZXQgbGVnYWN5SXRlbXModmFsdWU6IFRpZXJlZE1lbnVJdGVtRGF0YVtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuc2V0SXRlbXModmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRJdGVtcyh2YWx1ZTogVGllcmVkTWVudUl0ZW1EYXRhW10gfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLml0ZW1zID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxUaWVyZWRNZW51Q29tcG9uZW50IHwgVGllcmVkTWVudU5lc3RlZENvbXBvbmVudD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc05lc3RlZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgbGFzdEFjdGl2ZUVsZW1lbnQ/OiBFbGVtZW50O1xuICBwcml2YXRlIGl0ZW1zQXJlVmFsaWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgdGhpcy5zZXRNZW51UG9zaXRpb24oKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZj8uaG9zdFZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xuICB9KTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zQXJlVmFsaWQgPSAhIXRoaXMuaXRlbXM/Lmxlbmd0aDtcblxuICAgIGlmICghdGhpcy5pdGVtc0FyZVZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdWJzY3JpYmVFdmVudHMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbXNBcmVWYWxpZCkge1xuICAgICAgdGhpcy5pdGVtc0FyZVZhbGlkID0gISF0aGlzLml0ZW1zPy5sZW5ndGg7XG4gICAgICBpZiAodGhpcy5pdGVtc0FyZVZhbGlkKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLml0ZW1zQXJlVmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snaXRlbXMnXSkge1xuICAgICAgdGhpcy51cGRhdGVTZXJ2aWNlSXRlbXMoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMucmVidWlsZE1lbnUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbXNBcmVWYWxpZCB8fCB0aGlzLnRyaWdnZXJFdmVudCAhPT0gJ2NsaWNrJyB8fCB0aGlzLmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubGFzdEFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEVsZW1lbnQ7XG4gICAgdGhpcy5jcmVhdGVNZW51KCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKVxuICBwcm90ZWN0ZWQgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pdGVtc0FyZVZhbGlkIHx8IHRoaXMudHJpZ2dlckV2ZW50ICE9PSAnaG92ZXInIHx8IHRoaXMuaXNPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgRWxlbWVudDtcbiAgICB0aGlzLmNyZWF0ZU1lbnUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVNlcnZpY2VJdGVtcygpO1xuXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmIHx8ICF0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5sYXN0SW5zdGFuY2U/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmdsb2JhbFNlcnZpY2UubGFzdEluc3RhbmNlID0gdGhpcztcbiAgICAodGhpcy5sYXN0QWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCk/LmJsdXI/LigpO1xuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnRpZXJlZE1lbnVPcGVuZWQuZW1pdCgpO1xuICAgIHRoaXMuaXNOZXN0ZWQgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDwgVElFUkVEX01FTlVfTU9CSUxFX0JSRUFLUE9JTlRfUFg7XG5cbiAgICBpZiAodGhpcy5pc05lc3RlZCkge1xuICAgICAgdGhpcy5jcmVhdGVOZXN0ZWRNZW51KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlVGllcmVkTWVudSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGllcmVkTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IGNyZWF0ZUNvbXBvbmVudChUaWVyZWRNZW51Q29tcG9uZW50LCB7XG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmFwcFJlZi5pbmplY3RvcixcbiAgICAgIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvclxuICAgIH0pO1xuICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XG4gICAgdGhpcy5zZXRNZW51Q29tcG9uZW50UHJvcGVydGllcygpO1xuICAgIGNvbnN0IG1lbnVFbGVtZW50ID0gKHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJy5zZGMtdGllcmVkLW1lbnUnKTtcbiAgICBpZiAobWVudUVsZW1lbnQpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShtZW51RWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuc2V0TWVudVBvc2l0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5lc3RlZE1lbnUoKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSBjcmVhdGVDb21wb25lbnQoVGllcmVkTWVudU5lc3RlZENvbXBvbmVudCwge1xuICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5hcHBSZWYuaW5qZWN0b3IsXG4gICAgICBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3JcbiAgICB9KTtcbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIHRoaXMuc2V0TWVudUNvbXBvbmVudFByb3BlcnRpZXMoKTtcbiAgICB0aGlzLnNldE1lbnVQb3NpdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy50aWVyZWRNZW51Q2xvc2VkLmVtaXQoKTtcbiAgICB0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW1zID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtcztcbiAgICB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtc1swXSA/PyBudWxsO1xuICAgIFxuICAgIC8vIFJlc3RvcmUgZm9jdXMgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgZm9jdXNlZCBiZWZvcmUgb3BlbmluZyB0aGUgbWVudVxuICAgIGVuYWJsZUJvZHlTY3JvbGwoKTtcbiAgICAodGhpcy5sYXN0QWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCk/LmZvY3VzPy4oKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TWVudVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpdGVtSGVpZ2h0ID0gVElFUkVEX01FTlVfSVRFTV9IRUlHSFRfRElSRUNUSVZFO1xuICAgIGNvbnN0IGRpdmlkZXJIZWlnaHQgPSBUSUVSRURfTUVOVV9ESVZJREVSX0hFSUdIVF9ESVJFQ1RJVkU7XG4gICAgY29uc3QgcGFkZGluZyA9IFRJRVJFRF9NRU5VX1BBRERJTkdfRElSRUNUSVZFO1xuICAgIGNvbnN0IG1hcmdpbiA9IFRJRVJFRF9NRU5VX01BUkdJTjtcbiAgICBjb25zdCBtZW51RWxlbWVudCA9ICh0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuc2RjLXRpZXJlZC1tZW51Jyk7XG4gICAgY29uc3QgbWVudVdpZHRoID0gbWVudUVsZW1lbnQ/LmNsaWVudFdpZHRoID8/IFRJRVJFRF9NRU5VX0RFRkFVTFRfV0lEVEg7XG4gICAgY29uc3QgeyBib3R0b20sIGxlZnQsIHJpZ2h0IH0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBpdGVtc0NvdW50ID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtcy5yZWR1Y2UoXG4gICAgICAoY291bnQ6IG51bWJlciwgaXRlbTogVGllcmVkTWVudUl0ZW1JbnRlcm5hbERhdGEpID0+ICghaXRlbS5kaXZpZGVyID8gY291bnQgKyAxIDogY291bnQpLFxuICAgICAgMFxuICAgICk7XG4gICAgY29uc3QgZGl2aWRlcnNDb3VudCA9IHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXMucmVkdWNlKFxuICAgICAgKGNvdW50OiBudW1iZXIsIGl0ZW06IFRpZXJlZE1lbnVJdGVtSW50ZXJuYWxEYXRhKSA9PiAoaXRlbS5kaXZpZGVyID8gY291bnQgKyAxIDogY291bnQpLFxuICAgICAgMFxuICAgICk7XG4gICAgY29uc3QgbWVudUhlaWdodCA9IGl0ZW1zQ291bnQgKiBpdGVtSGVpZ2h0ICsgZGl2aWRlcnNDb3VudCAqIGRpdmlkZXJIZWlnaHQgKyBwYWRkaW5nICsgbWFyZ2luO1xuICAgIGNvbnN0IHJpZ2h0RnJlZVNwYWNlID0gd2luZG93LmlubmVyV2lkdGggLSByaWdodDtcbiAgICBjb25zdCBib3R0b21GcmVlU3BhY2UgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBib3R0b207XG5cbiAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS50b3AgPVxuICAgICAgYm90dG9tRnJlZVNwYWNlIDw9IG1lbnVIZWlnaHQgPyBNYXRoLm1heCh3aW5kb3cuc2Nyb2xsWSArIGJvdHRvbSAtIG1lbnVIZWlnaHQsIDApIDogd2luZG93LnNjcm9sbFkgKyBib3R0b20gKyBtYXJnaW47XG4gICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubGVmdCA9XG4gICAgICB0aGlzLmlzTmVzdGVkIHx8IHJpZ2h0RnJlZVNwYWNlIDw9IG1lbnVXaWR0aCA/IHdpbmRvdy5zY3JvbGxYICsgcmlnaHQgLSBtZW51V2lkdGggOiB3aW5kb3cuc2Nyb2xsWCArIGxlZnQ7XG5cbiAgICBpZiAodGhpcy5pc05lc3RlZCkge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubGVmdCA9IG1hcmdpbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE1lbnVDb21wb25lbnRQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5pdGVtcyA9IHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXM7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuYXJpYUxhYmVsID0gdGhpcy5hcmlhTGFiZWw7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGluc3RhbmNlb2YgVGllcmVkTWVudUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubWVudVRyaWdnZXJFdmVudCA9IHRoaXMudHJpZ2dlckV2ZW50O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlQWxsTWVudXNFdmVudC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5tYXJrQWxsSXRlbXNBc0Nsb3NlZCh0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zKTtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgZW5hYmxlQm9keVNjcm9sbCgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWJ1aWxkTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VydmljZUl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXMgPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLm5vcm1hbGl6ZURhdGEodGhpcy5pdGVtcyk7XG4gICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbXMgPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zO1xuICAgIFxuICAgIC8vIEZpbmQgdGhlIGZvY3VzZWQgaXRlbSBieSBtYXRjaGluZyB0aGUgb3JpZ2luYWwgb2JqZWN0IHJlZmVyZW5jZSBvciBsYWJlbCAoaWYgbm8gbWF0Y2ggZm91bmQpXG4gICAgaWYgKHRoaXMuZm9jdXNlZEl0ZW0pIHtcbiAgICAgIGNvbnN0IGZvY3VzZWRJbmRleCA9IHRoaXMuaXRlbXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKTtcbiAgICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW0gPSBmb2N1c2VkSW5kZXggPj0gMCAmJiBmb2N1c2VkSW5kZXggPCB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zLmxlbmd0aFxuICAgICAgICA/IHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXNbZm9jdXNlZEluZGV4XVxuICAgICAgICA6IHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXNbMF0gPz8gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSA9IHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXNbMF0gPz8gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGllcmVkLW1lbnUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy90aWVyZWQtbWVudS9kaXJlY3RpdmVzL3RpZXJlZC1tZW51LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLGlCQUFpQixFQUVqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBRU4sZUFBZSxFQUNmLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDaEksT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUE4QixNQUFNLDBDQUEwQyxDQUFDO0FBTTNHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzFHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQUVwRSxNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztBQUN0QyxNQUFNLGlDQUFpQyxHQUFHLEVBQUUsQ0FBQztBQUM3QyxNQUFNLG9DQUFvQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxN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O3NCQURmLEtBQUs7Z0JBR1csZ0JBQWdCO3NCQUFoQyxNQUFNO2dCQUNVLGdCQUFnQjtzQkFBaEMsTUFBTTtnQkFHSSxhQUFhO3NCQUR2QixLQUFLO3VCQUFDLGVBQWU7Z0JBTVgsV0FBVztzQkFEckIsS0FBSzt1QkFBQyxhQUFhO2dCQTJEVixPQUFPO3NCQURoQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhdkIsWUFBWTtzQkFEckIsWUFBWTt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBwbGljYXRpb25SZWYsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnRSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBjcmVhdGVDb21wb25lbnQsXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVElFUkVEX01FTlVfREVGQVVMVF9UUklHR0VSX0VWRU5ULCBUSUVSRURfTUVOVV9NT0JJTEVfQlJFQUtQT0lOVF9QWCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29uc3RhbnRzL3RpZXJlZC1tZW51LmNvbnN0JztcbmltcG9ydCB7IGVuYWJsZUJvZHlTY3JvbGwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL2JvZHktc2Nyb2xsLnV0aWwnO1xuaW1wb3J0IHsgd2F0Y2hPdmVybGF5RGlzbWlzcywgdHlwZSBPdmVybGF5RGlzbWlzc1dhdGNoZXIgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL292ZXJsYXktZGlzbWlzcy51dGlsJztcbmltcG9ydCB0eXBlIHtcbiAgVGllcmVkTWVudUl0ZW1EYXRhLFxuICBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSxcbiAgVGllcmVkTWVudVRyaWdnZXJFdmVudFxufSBmcm9tICcuLi8uLi8uLi9jb3JlL3R5cGVzL3RpZXJlZC1tZW51LnR5cGUnO1xuaW1wb3J0IHsgVGllcmVkTWVudU5lc3RlZENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvdGllcmVkLW1lbnUtbmVzdGVkL3RpZXJlZC1tZW51LW5lc3RlZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGllcmVkTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvdGllcmVkLW1lbnUvdGllcmVkLW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IFRpZXJlZE1lbnVFdmVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90aWVyZWQtbWVudS5ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFRpZXJlZE1lbnVHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGllcmVkLW1lbnUuZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGllcmVkTWVudVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90aWVyZWQtbWVudS5zZXJ2aWNlJztcblxuY29uc3QgVElFUkVEX01FTlVfREVGQVVMVF9XSURUSCA9IDE3NjtcbmNvbnN0IFRJRVJFRF9NRU5VX0lURU1fSEVJR0hUX0RJUkVDVElWRSA9IDM3O1xuY29uc3QgVElFUkVEX01FTlVfRElWSURFUl9IRUlHSFRfRElSRUNUSVZFID0gNTtcbmNvbnN0IFRJRVJFRF9NRU5VX1BBRERJTkdfRElSRUNUSVZFID0gODtcbmNvbnN0IFRJRVJFRF9NRU5VX01BUkdJTiA9IDQ7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tzZGNUaWVyZWRNZW51XSxbc1RpZXJlZE1lbnVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbVGllcmVkTWVudUV2ZW50U2VydmljZSwgVGllcmVkTWVudVNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFRpZXJlZE1lbnVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBSZWYgPSBpbmplY3QoQXBwbGljYXRpb25SZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2UgPSBpbmplY3QoVGllcmVkTWVudUV2ZW50U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGllcmVkTWVudVNlcnZpY2UgPSBpbmplY3QoVGllcmVkTWVudVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGdsb2JhbFNlcnZpY2UgPSBpbmplY3QoVGllcmVkTWVudUdsb2JhbFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaXRlbXM6IFRpZXJlZE1lbnVJdGVtRGF0YVtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZvY3VzZWRJdGVtPzogVGllcmVkTWVudUl0ZW1EYXRhO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0cmlnZ2VyRXZlbnQ6IFRpZXJlZE1lbnVUcmlnZ2VyRXZlbnQgPSBUSUVSRURfTUVOVV9ERUZBVUxUX1RSSUdHRVJfRVZFTlQgYXMgVGllcmVkTWVudVRyaWdnZXJFdmVudDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgYXJpYUxhYmVsPzogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgdGllcmVkTWVudU9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyB0aWVyZWRNZW51Q2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBJbnB1dCgnc2RjVGllcmVkTWVudScpXG4gIHB1YmxpYyBzZXQgZGF0YUNvcmVJdGVtcyh2YWx1ZTogVGllcmVkTWVudUl0ZW1EYXRhW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZXRJdGVtcyh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoJ3NUaWVyZWRNZW51JylcbiAgcHVibGljIHNldCBsZWdhY3lJdGVtcyh2YWx1ZTogVGllcmVkTWVudUl0ZW1EYXRhW10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5zZXRJdGVtcyh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldEl0ZW1zKHZhbHVlOiBUaWVyZWRNZW51SXRlbURhdGFbXSB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuaXRlbXMgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFRpZXJlZE1lbnVDb21wb25lbnQgfCBUaWVyZWRNZW51TmVzdGVkQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzTmVzdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgaXNPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBsYXN0QWN0aXZlRWxlbWVudD86IEVsZW1lbnQ7XG4gIHByaXZhdGUgaXRlbXNBcmVWYWxpZCA9IGZhbHNlO1xuICBwcml2YXRlIGRpc21pc3NXYXRjaGVyOiBPdmVybGF5RGlzbWlzc1dhdGNoZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgdGhpcy5zZXRNZW51UG9zaXRpb24oKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZj8uaG9zdFZpZXcuZGV0ZWN0Q2hhbmdlcygpO1xuICB9KTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zQXJlVmFsaWQgPSAhIXRoaXMuaXRlbXM/Lmxlbmd0aDtcblxuICAgIGlmICghdGhpcy5pdGVtc0FyZVZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdWJzY3JpYmVFdmVudHMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbXNBcmVWYWxpZCkge1xuICAgICAgdGhpcy5pdGVtc0FyZVZhbGlkID0gISF0aGlzLml0ZW1zPy5sZW5ndGg7XG4gICAgICBpZiAodGhpcy5pdGVtc0FyZVZhbGlkKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLml0ZW1zQXJlVmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snaXRlbXMnXSkge1xuICAgICAgdGhpcy51cGRhdGVTZXJ2aWNlSXRlbXMoKTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMucmVidWlsZE1lbnUoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbXNBcmVWYWxpZCB8fCB0aGlzLnRyaWdnZXJFdmVudCAhPT0gJ2NsaWNrJyB8fCB0aGlzLmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubGFzdEFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEVsZW1lbnQ7XG4gICAgdGhpcy5jcmVhdGVNZW51KCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKVxuICBwcm90ZWN0ZWQgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pdGVtc0FyZVZhbGlkIHx8IHRoaXMudHJpZ2dlckV2ZW50ICE9PSAnaG92ZXInIHx8IHRoaXMuaXNPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0QWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgRWxlbWVudDtcbiAgICB0aGlzLmNyZWF0ZU1lbnUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVNlcnZpY2VJdGVtcygpO1xuXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmIHx8ICF0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5sYXN0SW5zdGFuY2U/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmdsb2JhbFNlcnZpY2UubGFzdEluc3RhbmNlID0gdGhpcztcbiAgICAodGhpcy5sYXN0QWN0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCk/LmJsdXI/LigpO1xuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnRpZXJlZE1lbnVPcGVuZWQuZW1pdCgpO1xuICAgIHRoaXMuaXNOZXN0ZWQgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIDwgVElFUkVEX01FTlVfTU9CSUxFX0JSRUFLUE9JTlRfUFg7XG5cbiAgICBpZiAodGhpcy5pc05lc3RlZCkge1xuICAgICAgdGhpcy5jcmVhdGVOZXN0ZWRNZW51KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlVGllcmVkTWVudSgpO1xuICAgIH1cblxuICAgIHRoaXMuZGlzbWlzc1dhdGNoZXIgPSB3YXRjaE92ZXJsYXlEaXNtaXNzKHtcbiAgICAgIGdldFRyaWdnZXJFbGVtZW50OiAoKSA9PiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIGlzT3BlbjogKCkgPT4gdGhpcy5pc09wZW4sXG4gICAgICBvbkRpc21pc3M6ICgpID0+IHRoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlQWxsTWVudXNFdmVudC5lbWl0KCksXG4gICAgICByb3V0ZXI6IHRoaXMucm91dGVyXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRpZXJlZE1lbnUoKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSBjcmVhdGVDb21wb25lbnQoVGllcmVkTWVudUNvbXBvbmVudCwge1xuICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5hcHBSZWYuaW5qZWN0b3IsXG4gICAgICBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3JcbiAgICB9KTtcbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIHRoaXMuc2V0TWVudUNvbXBvbmVudFByb3BlcnRpZXMoKTtcbiAgICBjb25zdCBtZW51RWxlbWVudCA9ICh0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuc2RjLXRpZXJlZC1tZW51Jyk7XG4gICAgaWYgKG1lbnVFbGVtZW50KSB7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUobWVudUVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLnNldE1lbnVQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXN0ZWRNZW51KCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9uZW50UmVmID0gY3JlYXRlQ29tcG9uZW50KFRpZXJlZE1lbnVOZXN0ZWRDb21wb25lbnQsIHtcbiAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuYXBwUmVmLmluamVjdG9yLFxuICAgICAgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yXG4gICAgfSk7XG4gICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyh0aGlzLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcbiAgICB0aGlzLnNldE1lbnVDb21wb25lbnRQcm9wZXJ0aWVzKCk7XG4gICAgdGhpcy5zZXRNZW51UG9zaXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMudGllcmVkTWVudUNsb3NlZC5lbWl0KCk7XG4gICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyh0aGlzLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmRpc21pc3NXYXRjaGVyPy5kZXN0cm95KCk7XG4gICAgdGhpcy5kaXNtaXNzV2F0Y2hlciA9IG51bGw7XG4gICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbXMgPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zO1xuICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW0gPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zWzBdID8/IG51bGw7XG4gICAgXG4gICAgLy8gUmVzdG9yZSBmb2N1cyB0byB0aGUgZWxlbWVudCB0aGF0IHdhcyBmb2N1c2VkIGJlZm9yZSBvcGVuaW5nIHRoZSBtZW51XG4gICAgZW5hYmxlQm9keVNjcm9sbCgpO1xuICAgICh0aGlzLmxhc3RBY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkKT8uZm9jdXM/LigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZW51UG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSBUSUVSRURfTUVOVV9JVEVNX0hFSUdIVF9ESVJFQ1RJVkU7XG4gICAgY29uc3QgZGl2aWRlckhlaWdodCA9IFRJRVJFRF9NRU5VX0RJVklERVJfSEVJR0hUX0RJUkVDVElWRTtcbiAgICBjb25zdCBwYWRkaW5nID0gVElFUkVEX01FTlVfUEFERElOR19ESVJFQ1RJVkU7XG4gICAgY29uc3QgbWFyZ2luID0gVElFUkVEX01FTlVfTUFSR0lOO1xuICAgIGNvbnN0IG1lbnVFbGVtZW50ID0gKHRoaXMuY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJy5zZGMtdGllcmVkLW1lbnUnKTtcbiAgICBjb25zdCBtZW51V2lkdGggPSBtZW51RWxlbWVudD8uY2xpZW50V2lkdGggPz8gVElFUkVEX01FTlVfREVGQVVMVF9XSURUSDtcbiAgICBjb25zdCB7IGJvdHRvbSwgbGVmdCwgcmlnaHQgfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGl0ZW1zQ291bnQgPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zLnJlZHVjZShcbiAgICAgIChjb3VudDogbnVtYmVyLCBpdGVtOiBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSkgPT4gKCFpdGVtLmRpdmlkZXIgPyBjb3VudCArIDEgOiBjb3VudCksXG4gICAgICAwXG4gICAgKTtcbiAgICBjb25zdCBkaXZpZGVyc0NvdW50ID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtcy5yZWR1Y2UoXG4gICAgICAoY291bnQ6IG51bWJlciwgaXRlbTogVGllcmVkTWVudUl0ZW1JbnRlcm5hbERhdGEpID0+IChpdGVtLmRpdmlkZXIgPyBjb3VudCArIDEgOiBjb3VudCksXG4gICAgICAwXG4gICAgKTtcbiAgICBjb25zdCBtZW51SGVpZ2h0ID0gaXRlbXNDb3VudCAqIGl0ZW1IZWlnaHQgKyBkaXZpZGVyc0NvdW50ICogZGl2aWRlckhlaWdodCArIHBhZGRpbmcgKyBtYXJnaW47XG4gICAgY29uc3QgcmlnaHRGcmVlU3BhY2UgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIHJpZ2h0O1xuICAgIGNvbnN0IGJvdHRvbUZyZWVTcGFjZSA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGJvdHRvbTtcblxuICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9XG4gICAgICBib3R0b21GcmVlU3BhY2UgPD0gbWVudUhlaWdodCA/IE1hdGgubWF4KHdpbmRvdy5zY3JvbGxZICsgYm90dG9tIC0gbWVudUhlaWdodCwgMCkgOiB3aW5kb3cuc2Nyb2xsWSArIGJvdHRvbSArIG1hcmdpbjtcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID1cbiAgICAgIHRoaXMuaXNOZXN0ZWQgfHwgcmlnaHRGcmVlU3BhY2UgPD0gbWVudVdpZHRoID8gd2luZG93LnNjcm9sbFggKyByaWdodCAtIG1lbnVXaWR0aCA6IHdpbmRvdy5zY3JvbGxYICsgbGVmdDtcblxuICAgIGlmICh0aGlzLmlzTmVzdGVkKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gbWFyZ2luO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0TWVudUNvbXBvbmVudFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLml0ZW1zID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtcztcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5hcmlhTGFiZWwgPSB0aGlzLmFyaWFMYWJlbDtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgaW5zdGFuY2VvZiBUaWVyZWRNZW51Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5tZW51VHJpZ2dlckV2ZW50ID0gdGhpcy50cmlnZ2VyRXZlbnQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVFdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudFNlcnZpY2UuY2xvc2VBbGxNZW51c0V2ZW50LnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXMgPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLm1hcmtBbGxJdGVtc0FzQ2xvc2VkKHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXMpO1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICBlbmFibGVCb2R5U2Nyb2xsKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYnVpbGRNZW51KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJ2aWNlSXRlbXMoKTogdm9pZCB7XG4gICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtcyA9IHRoaXMudGllcmVkTWVudVNlcnZpY2Uubm9ybWFsaXplRGF0YSh0aGlzLml0ZW1zKTtcbiAgICB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtcyA9IHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXM7XG4gICAgXG4gICAgLy8gRmluZCB0aGUgZm9jdXNlZCBpdGVtIGJ5IG1hdGNoaW5nIHRoZSBvcmlnaW5hbCBvYmplY3QgcmVmZXJlbmNlIG9yIGxhYmVsIChpZiBubyBtYXRjaCBmb3VuZClcbiAgICBpZiAodGhpcy5mb2N1c2VkSXRlbSkge1xuICAgICAgY29uc3QgZm9jdXNlZEluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKHRoaXMuZm9jdXNlZEl0ZW0pO1xuICAgICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSA9IGZvY3VzZWRJbmRleCA+PSAwICYmIGZvY3VzZWRJbmRleCA8IHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXMubGVuZ3RoXG4gICAgICAgID8gdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtc1tmb2N1c2VkSW5kZXhdXG4gICAgICAgIDogdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtc1swXSA/PyBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtc1swXSA/PyBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,64 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation, inject } from '@angular/core';
3
+ import { TranslateModule, TranslateService } from '@ngx-translate/core';
4
+ import { TOKEN_LIST_ID_PREFIX, TOKEN_LIST_REMOVE_ARIA_LABEL_KEY, TOKEN_LIST_REMOVE_ARIA_LABEL_PLACEHOLDER } from '../../core/constants/token-list.const';
5
+ import { resolveTranslatableText } from '../../core/utils/i18n.util';
6
+ import { nextSequentialId } from '../../core/utils/id.util';
7
+ import * as i0 from "@angular/core";
8
+ /**
9
+ * Lista de tokens (etiquetas) clicáveis e opcionalmente removíveis.
10
+ * Emite eventos ao selecionar ou remover um token — a remoção efetiva
11
+ * do item da lista é responsabilidade do componente pai.
12
+ *
13
+ * @example
14
+ * ```html
15
+ * <sdc-token-list
16
+ * [tokens]="tokens"
17
+ * [removableTokens]="true"
18
+ * (tokenSelected)="onTokenSelected($event)"
19
+ * (tokenRemoved)="onTokenRemoved($event)" />
20
+ * ```
21
+ */
22
+ export class TokenListComponent {
23
+ translate = inject(TranslateService);
24
+ id = nextSequentialId(TOKEN_LIST_ID_PREFIX);
25
+ tokens;
26
+ removableTokens = false;
27
+ hidePointerEvents = false;
28
+ tokenSelected = new EventEmitter();
29
+ tokenRemoved = new EventEmitter();
30
+ onTokenSelected(token) {
31
+ if (!token.disabled) {
32
+ this.tokenSelected.emit(token);
33
+ }
34
+ }
35
+ onTokenRemoved(token) {
36
+ if (!token.disabled) {
37
+ this.tokenRemoved.emit(token);
38
+ }
39
+ }
40
+ resolveRemoveAriaLabel(token) {
41
+ const template = resolveTranslatableText(this.translate, TOKEN_LIST_REMOVE_ARIA_LABEL_KEY);
42
+ return template.replace(TOKEN_LIST_REMOVE_ARIA_LABEL_PLACEHOLDER, token.label);
43
+ }
44
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TokenListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TokenListComponent, isStandalone: true, selector: "sdc-token-list", inputs: { id: "id", tokens: "tokens", removableTokens: "removableTokens", hidePointerEvents: "hidePointerEvents" }, outputs: { tokenSelected: "tokenSelected", tokenRemoved: "tokenRemoved" }, ngImport: i0, template: "<ul [id]=\"id\" class=\"sdc-token-list\">\n @for (token of tokens; track token.id || $index) {\n <li\n [attr.id]=\"token.id ?? null\"\n class=\"sdc-token-list__token\"\n [class.sdc-token-list__token--disabled]=\"token.disabled\"\n [class.sdc-token-list__token--no-pointer-events]=\"hidePointerEvents\"\n >\n <button\n type=\"button\"\n [attr.id]=\"token.id ? token.id + '-label' : null\"\n class=\"sdc-token-list__label\"\n [disabled]=\"token.disabled\"\n (click)=\"onTokenSelected(token)\"\n >\n {{ token.label }}\n </button>\n\n @if (removableTokens && !token.notRemovable) {\n <button\n type=\"button\"\n [attr.id]=\"token.id ? token.id + '-remove' : null\"\n class=\"sdc-token-list__remove\"\n [attr.aria-label]=\"resolveRemoveAriaLabel(token)\"\n [disabled]=\"token.disabled\"\n (click)=\"onTokenRemoved(token)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </li>\n }\n</ul>\n", styles: [":host{display:inline-block}.sdc-token-list{--sdc-token-list-token-bg: #e5eaea;--sdc-token-list-token-border: #697882;--sdc-token-list-token-radius: 4px;--sdc-token-list-token-color: #212533;--sdc-token-list-token-hover-bg: #ccc;--sdc-token-list-token-disabled-opacity: .5;--sdc-token-list-label-max-width: 50ch;align-items:center;display:inline-flex;flex-wrap:wrap;font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);list-style:none;margin:0;max-width:100%;padding:0 10px;text-transform:none}.sdc-token-list__token{align-items:center;background-color:var(--sdc-token-list-token-bg);border:1px solid var(--sdc-token-list-token-border);border-radius:var(--sdc-token-list-token-radius);color:var(--sdc-token-list-token-color);display:flex;font-size:12px;font-weight:400;gap:8px;line-height:150%;margin:2px 5px 0 0;max-width:100%;padding:2px 8px;transition:background-color var(--sdc-transition-fast, .18s ease);-webkit-user-select:none;user-select:none}.sdc-token-list__label,.sdc-token-list__remove{background:transparent;border:0;color:inherit;cursor:pointer;font:inherit;padding:0}.sdc-token-list__label{max-width:var(--sdc-token-list-label-max-width);overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.sdc-token-list__remove{align-items:center;display:inline-flex;line-height:1}.sdc-token-list__token--disabled{opacity:var(--sdc-token-list-token-disabled-opacity)}.sdc-token-list__token--no-pointer-events{pointer-events:none}.sdc-token-list__label:disabled,.sdc-token-list__remove:disabled{cursor:default}.sdc-token-list__label:focus-visible,.sdc-token-list__remove:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:1px}.sdc-token-list__token:not(.sdc-token-list__token--disabled):hover,.sdc-token-list__token:not(.sdc-token-list__token--disabled):focus-within{background-color:var(--sdc-token-list-token-hover-bg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
46
+ }
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TokenListComponent, decorators: [{
48
+ type: Component,
49
+ args: [{ selector: 'sdc-token-list', standalone: true, imports: [CommonModule, TranslateModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<ul [id]=\"id\" class=\"sdc-token-list\">\n @for (token of tokens; track token.id || $index) {\n <li\n [attr.id]=\"token.id ?? null\"\n class=\"sdc-token-list__token\"\n [class.sdc-token-list__token--disabled]=\"token.disabled\"\n [class.sdc-token-list__token--no-pointer-events]=\"hidePointerEvents\"\n >\n <button\n type=\"button\"\n [attr.id]=\"token.id ? token.id + '-label' : null\"\n class=\"sdc-token-list__label\"\n [disabled]=\"token.disabled\"\n (click)=\"onTokenSelected(token)\"\n >\n {{ token.label }}\n </button>\n\n @if (removableTokens && !token.notRemovable) {\n <button\n type=\"button\"\n [attr.id]=\"token.id ? token.id + '-remove' : null\"\n class=\"sdc-token-list__remove\"\n [attr.aria-label]=\"resolveRemoveAriaLabel(token)\"\n [disabled]=\"token.disabled\"\n (click)=\"onTokenRemoved(token)\"\n >\n <i class=\"fas fa-times\" aria-hidden=\"true\"></i>\n </button>\n }\n </li>\n }\n</ul>\n", styles: [":host{display:inline-block}.sdc-token-list{--sdc-token-list-token-bg: #e5eaea;--sdc-token-list-token-border: #697882;--sdc-token-list-token-radius: 4px;--sdc-token-list-token-color: #212533;--sdc-token-list-token-hover-bg: #ccc;--sdc-token-list-token-disabled-opacity: .5;--sdc-token-list-label-max-width: 50ch;align-items:center;display:inline-flex;flex-wrap:wrap;font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);list-style:none;margin:0;max-width:100%;padding:0 10px;text-transform:none}.sdc-token-list__token{align-items:center;background-color:var(--sdc-token-list-token-bg);border:1px solid var(--sdc-token-list-token-border);border-radius:var(--sdc-token-list-token-radius);color:var(--sdc-token-list-token-color);display:flex;font-size:12px;font-weight:400;gap:8px;line-height:150%;margin:2px 5px 0 0;max-width:100%;padding:2px 8px;transition:background-color var(--sdc-transition-fast, .18s ease);-webkit-user-select:none;user-select:none}.sdc-token-list__label,.sdc-token-list__remove{background:transparent;border:0;color:inherit;cursor:pointer;font:inherit;padding:0}.sdc-token-list__label{max-width:var(--sdc-token-list-label-max-width);overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.sdc-token-list__remove{align-items:center;display:inline-flex;line-height:1}.sdc-token-list__token--disabled{opacity:var(--sdc-token-list-token-disabled-opacity)}.sdc-token-list__token--no-pointer-events{pointer-events:none}.sdc-token-list__label:disabled,.sdc-token-list__remove:disabled{cursor:default}.sdc-token-list__label:focus-visible,.sdc-token-list__remove:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:1px}.sdc-token-list__token:not(.sdc-token-list__token--disabled):hover,.sdc-token-list__token:not(.sdc-token-list__token--disabled):focus-within{background-color:var(--sdc-token-list-token-hover-bg)}\n"] }]
50
+ }], propDecorators: { id: [{
51
+ type: Input
52
+ }], tokens: [{
53
+ type: Input,
54
+ args: [{ required: true }]
55
+ }], removableTokens: [{
56
+ type: Input
57
+ }], hidePointerEvents: [{
58
+ type: Input
59
+ }], tokenSelected: [{
60
+ type: Output
61
+ }], tokenRemoved: [{
62
+ type: Output
63
+ }] } });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Rva2VuLWxpc3QvdG9rZW4tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Rva2VuLWxpc3QvdG9rZW4tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEUsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixnQ0FBZ0MsRUFDaEMsd0NBQXdDLEVBQ3pDLE1BQU0sdUNBQXVDLENBQUM7QUFFL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRTVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFVSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ1osU0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTdDLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBb0I7SUFDNUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUN4QixpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFFekIsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO0lBQ25ELFlBQVksR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztJQUU1RCxlQUFlLENBQUMsS0FBcUI7UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFxQjtRQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBcUI7UUFDMUMsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakYsQ0FBQzt3R0ExQlUsa0JBQWtCOzRGQUFsQixrQkFBa0IseVFDNUMvQix3a0NBaUNBLHE1RERLWSxZQUFZLDhCQUFFLGVBQWU7OzRGQU01QixrQkFBa0I7a0JBVDlCLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxtQkFHdkIsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsUUFBUTs4QkFLaEMsRUFBRTtzQkFBVixLQUFLO2dCQUNxQixNQUFNO3NCQUFoQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQge1xuICBUT0tFTl9MSVNUX0lEX1BSRUZJWCxcbiAgVE9LRU5fTElTVF9SRU1PVkVfQVJJQV9MQUJFTF9LRVksXG4gIFRPS0VOX0xJU1RfUkVNT1ZFX0FSSUFfTEFCRUxfUExBQ0VIT0xERVJcbn0gZnJvbSAnLi4vLi4vY29yZS9jb25zdGFudHMvdG9rZW4tbGlzdC5jb25zdCc7XG5pbXBvcnQgdHlwZSB7IFRva2VuTGlzdFRva2VuIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy90b2tlbi1saXN0LnR5cGUnO1xuaW1wb3J0IHsgcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2kxOG4udXRpbCc7XG5pbXBvcnQgeyBuZXh0U2VxdWVudGlhbElkIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pZC51dGlsJztcblxuLyoqXG4gKiBMaXN0YSBkZSB0b2tlbnMgKGV0aXF1ZXRhcykgY2xpY8OhdmVpcyBlIG9wY2lvbmFsbWVudGUgcmVtb3bDrXZlaXMuXG4gKiBFbWl0ZSBldmVudG9zIGFvIHNlbGVjaW9uYXIgb3UgcmVtb3ZlciB1bSB0b2tlbiDigJQgYSByZW1vw6fDo28gZWZldGl2YVxuICogZG8gaXRlbSBkYSBsaXN0YSDDqSByZXNwb25zYWJpbGlkYWRlIGRvIGNvbXBvbmVudGUgcGFpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8c2RjLXRva2VuLWxpc3RcbiAqICAgW3Rva2Vuc109XCJ0b2tlbnNcIlxuICogICBbcmVtb3ZhYmxlVG9rZW5zXT1cInRydWVcIlxuICogICAodG9rZW5TZWxlY3RlZCk9XCJvblRva2VuU2VsZWN0ZWQoJGV2ZW50KVwiXG4gKiAgICh0b2tlblJlbW92ZWQpPVwib25Ub2tlblJlbW92ZWQoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLXRva2VuLWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vdG9rZW4tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi90b2tlbi1saXN0LmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXG59KVxuZXhwb3J0IGNsYXNzIFRva2VuTGlzdENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIEBJbnB1dCgpIGlkID0gbmV4dFNlcXVlbnRpYWxJZChUT0tFTl9MSVNUX0lEX1BSRUZJWCk7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRva2VucyE6IFRva2VuTGlzdFRva2VuW107XG4gIEBJbnB1dCgpIHJlbW92YWJsZVRva2VucyA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlUG9pbnRlckV2ZW50cyA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSB0b2tlblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxUb2tlbkxpc3RUb2tlbj4oKTtcbiAgQE91dHB1dCgpIHRva2VuUmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VG9rZW5MaXN0VG9rZW4+KCk7XG5cbiAgb25Ub2tlblNlbGVjdGVkKHRva2VuOiBUb2tlbkxpc3RUb2tlbik6IHZvaWQge1xuICAgIGlmICghdG9rZW4uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudG9rZW5TZWxlY3RlZC5lbWl0KHRva2VuKTtcbiAgICB9XG4gIH1cblxuICBvblRva2VuUmVtb3ZlZCh0b2tlbjogVG9rZW5MaXN0VG9rZW4pOiB2b2lkIHtcbiAgICBpZiAoIXRva2VuLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnRva2VuUmVtb3ZlZC5lbWl0KHRva2VuKTtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlUmVtb3ZlQXJpYUxhYmVsKHRva2VuOiBUb2tlbkxpc3RUb2tlbik6IHN0cmluZyB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSByZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCh0aGlzLnRyYW5zbGF0ZSwgVE9LRU5fTElTVF9SRU1PVkVfQVJJQV9MQUJFTF9LRVkpO1xuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKFRPS0VOX0xJU1RfUkVNT1ZFX0FSSUFfTEFCRUxfUExBQ0VIT0xERVIsIHRva2VuLmxhYmVsKTtcbiAgfVxufVxuIiwiPHVsIFtpZF09XCJpZFwiIGNsYXNzPVwic2RjLXRva2VuLWxpc3RcIj5cbiAgQGZvciAodG9rZW4gb2YgdG9rZW5zOyB0cmFjayB0b2tlbi5pZCB8fCAkaW5kZXgpIHtcbiAgICA8bGlcbiAgICAgIFthdHRyLmlkXT1cInRva2VuLmlkID8/IG51bGxcIlxuICAgICAgY2xhc3M9XCJzZGMtdG9rZW4tbGlzdF9fdG9rZW5cIlxuICAgICAgW2NsYXNzLnNkYy10b2tlbi1saXN0X190b2tlbi0tZGlzYWJsZWRdPVwidG9rZW4uZGlzYWJsZWRcIlxuICAgICAgW2NsYXNzLnNkYy10b2tlbi1saXN0X190b2tlbi0tbm8tcG9pbnRlci1ldmVudHNdPVwiaGlkZVBvaW50ZXJFdmVudHNcIlxuICAgID5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmlkXT1cInRva2VuLmlkID8gdG9rZW4uaWQgKyAnLWxhYmVsJyA6IG51bGxcIlxuICAgICAgICBjbGFzcz1cInNkYy10b2tlbi1saXN0X19sYWJlbFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ0b2tlbi5kaXNhYmxlZFwiXG4gICAgICAgIChjbGljayk9XCJvblRva2VuU2VsZWN0ZWQodG9rZW4pXCJcbiAgICAgID5cbiAgICAgICAge3sgdG9rZW4ubGFiZWwgfX1cbiAgICAgIDwvYnV0dG9uPlxuXG4gICAgICBAaWYgKHJlbW92YWJsZVRva2VucyAmJiAhdG9rZW4ubm90UmVtb3ZhYmxlKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbYXR0ci5pZF09XCJ0b2tlbi5pZCA/IHRva2VuLmlkICsgJy1yZW1vdmUnIDogbnVsbFwiXG4gICAgICAgICAgY2xhc3M9XCJzZGMtdG9rZW4tbGlzdF9fcmVtb3ZlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJlc29sdmVSZW1vdmVBcmlhTGFiZWwodG9rZW4pXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwidG9rZW4uZGlzYWJsZWRcIlxuICAgICAgICAgIChjbGljayk9XCJvblRva2VuUmVtb3ZlZCh0b2tlbilcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvbGk+XG4gIH1cbjwvdWw+XG4iXX0=