@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
@@ -274,7 +274,7 @@ export class SliderComponent {
274
274
  useExisting: forwardRef(() => SliderComponent),
275
275
  multi: true
276
276
  }
277
- ], viewQueries: [{ propertyName: "trackRef", first: true, predicate: ["trackRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-slider\">\n @if (labelText || infoTooltipText) {\n <div class=\"sdc-slider__labelRow\">\n @if (labelText) {\n <span class=\"sdc-slider__label\">{{ labelText }}</span>\n }\n\n @if (infoTooltipText) {\n <sdc-info-sign [tooltip]=\"infoTooltip!\" [tooltipParams]=\"infoTooltipParams\"></sdc-info-sign>\n }\n </div>\n }\n\n <div class=\"sdc-slider__surface\" [class.sdc-slider__surface--disabled]=\"disabled\">\n <div\n #trackRef\n class=\"sdc-slider__track\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n (click)=\"onTrackClick($event)\"\n (keydown)=\"onTrackKeydown($event)\"\n >\n <div class=\"sdc-slider__progress\" [style.left.%]=\"progressLeft\" [style.width.%]=\"progressWidth\"></div>\n\n @if (multiple) {\n <button\n type=\"button\"\n class=\"sdc-slider__thumb\"\n [class.sdc-slider__thumb--hidden]=\"hiddenThumb\"\n [class.sdc-slider__thumb--dragging]=\"draggingThumb === 'start'\"\n [ngStyle]=\"startThumbStyle\"\n [attr.aria-label]=\"startThumbAriaLabel\"\n [attr.data-value]=\"startValue\"\n [disabled]=\"disabled\"\n (mousedown)=\"onThumbMouseDown($event, 'start')\"\n (keydown)=\"onThumbKeydown($event, 'start')\"\n (blur)=\"markTouched()\"\n ></button>\n }\n\n <button\n type=\"button\"\n class=\"sdc-slider__thumb\"\n [class.sdc-slider__thumb--hidden]=\"hiddenThumb\"\n [class.sdc-slider__thumb--dragging]=\"draggingThumb === 'end'\"\n [ngStyle]=\"endThumbStyle\"\n [attr.aria-label]=\"endThumbAriaLabel\"\n [attr.data-value]=\"endValue\"\n [disabled]=\"disabled\"\n (mousedown)=\"onThumbMouseDown($event, 'end')\"\n (keydown)=\"onThumbKeydown($event, 'end')\"\n (blur)=\"markTouched()\"\n ></button>\n </div>\n\n <div class=\"sdc-slider__footer\">\n <span>{{ minLabelText }}</span>\n <span>{{ maxLabelText }}</span>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.sdc-slider{width:100%}.sdc-slider__labelRow{align-items:center;display:flex;gap:var(--sdc-form-label-gap, .5rem);margin-bottom:.5rem}.sdc-slider__label{color:var(--sdc-text-default, #111827);font-size:.875rem;font-weight:600}.sdc-slider__surface{padding:.5rem 0 0}.sdc-slider__surface--disabled{opacity:.7}.sdc-slider__track{background:#ddd;border-radius:999px;cursor:pointer;height:6px;position:relative}.sdc-slider__progress{background:var(--sdc-tab-primary, #428bca);border-radius:inherit;height:100%;position:absolute;top:0}.sdc-slider__thumb{--thumb-size: 20px;background:#fff;border:2px solid var(--sdc-tab-primary, #428bca);border-radius:50%;cursor:grab;height:var(--thumb-size);left:0;margin-left:calc(var(--thumb-size) / -2);position:absolute;top:50%;transform:translateY(-50%);width:var(--thumb-size)}.sdc-slider__thumb:after{background:#111827;border-radius:999px;color:#fff;content:attr(data-value);font-size:.7rem;left:50%;opacity:0;padding:.2rem .4rem;pointer-events:none;position:absolute;top:-1.9rem;transform:translate(-50%);transition:opacity var(--sdc-transition-fast, .18s ease);white-space:nowrap}.sdc-slider__thumb:focus-visible,.sdc-slider__thumb--dragging{box-shadow:var(--sdc-focus-ring, 0 0 0 3px rgba(0, 123, 255, .25));outline:none}.sdc-slider__thumb:focus-visible:after,.sdc-slider__thumb--dragging:after{opacity:1}.sdc-slider__thumb--hidden{opacity:0}.sdc-slider__footer{color:var(--sdc-text-default, #111827);display:flex;font-size:.875rem;justify-content:space-between;margin-top:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: InfoSignComponent, selector: "sdc-info-sign", inputs: ["label", "labelParams", "tooltip", "tooltipParams", "iconClass", "iconAriaLabel", "tooltipPosition", "tooltipEvent", "inline"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
277
+ ], viewQueries: [{ propertyName: "trackRef", first: true, predicate: ["trackRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-slider\">\n @if (labelText || infoTooltipText) {\n <div class=\"sdc-slider__labelRow\">\n @if (labelText) {\n <span class=\"sdc-slider__label\">{{ labelText }}</span>\n }\n\n @if (infoTooltipText) {\n <sdc-info-sign [tooltip]=\"infoTooltip!\" [tooltipParams]=\"infoTooltipParams\"></sdc-info-sign>\n }\n </div>\n }\n\n <div class=\"sdc-slider__surface\" [class.sdc-slider__surface--disabled]=\"disabled\">\n <div\n #trackRef\n class=\"sdc-slider__track\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n (click)=\"onTrackClick($event)\"\n (keydown)=\"onTrackKeydown($event)\"\n >\n <div class=\"sdc-slider__progress\" [style.left.%]=\"progressLeft\" [style.width.%]=\"progressWidth\"></div>\n\n @if (multiple) {\n <button\n type=\"button\"\n class=\"sdc-slider__thumb\"\n [class.sdc-slider__thumb--hidden]=\"hiddenThumb\"\n [class.sdc-slider__thumb--dragging]=\"draggingThumb === 'start'\"\n [ngStyle]=\"startThumbStyle\"\n [attr.aria-label]=\"startThumbAriaLabel\"\n [attr.data-value]=\"startValue\"\n [disabled]=\"disabled\"\n (mousedown)=\"onThumbMouseDown($event, 'start')\"\n (keydown)=\"onThumbKeydown($event, 'start')\"\n (blur)=\"markTouched()\"\n ></button>\n }\n\n <button\n type=\"button\"\n class=\"sdc-slider__thumb\"\n [class.sdc-slider__thumb--hidden]=\"hiddenThumb\"\n [class.sdc-slider__thumb--dragging]=\"draggingThumb === 'end'\"\n [ngStyle]=\"endThumbStyle\"\n [attr.aria-label]=\"endThumbAriaLabel\"\n [attr.data-value]=\"endValue\"\n [disabled]=\"disabled\"\n (mousedown)=\"onThumbMouseDown($event, 'end')\"\n (keydown)=\"onThumbKeydown($event, 'end')\"\n (blur)=\"markTouched()\"\n ></button>\n </div>\n\n <div class=\"sdc-slider__footer\">\n <span>{{ minLabelText }}</span>\n <span>{{ maxLabelText }}</span>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.sdc-slider{width:100%}.sdc-slider__labelRow{align-items:center;display:flex;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-slider__label{color:var(--sdc-form-label-color);font-size:var(--sdc-form-label-font-size);font-weight:var(--sdc-form-label-font-weight);line-height:var(--sdc-form-label-lh)}.sdc-slider__surface{padding:.5rem 0 0}.sdc-slider__surface--disabled{opacity:.7}.sdc-slider__track{background:#ddd;border-radius:999px;cursor:pointer;height:6px;position:relative}.sdc-slider__progress{background:var(--sdc-tab-primary, #428bca);border-radius:inherit;height:100%;position:absolute;top:0}.sdc-slider__thumb{--thumb-size: 20px;background:#fff;border:2px solid var(--sdc-tab-primary, #428bca);border-radius:50%;cursor:grab;height:var(--thumb-size);left:0;margin-left:calc(var(--thumb-size) / -2);position:absolute;top:50%;transform:translateY(-50%);width:var(--thumb-size)}.sdc-slider__thumb:after{background:#111827;border-radius:999px;color:#fff;content:attr(data-value);font-size:.7rem;left:50%;opacity:0;padding:.2rem .4rem;pointer-events:none;position:absolute;top:-1.9rem;transform:translate(-50%);transition:opacity var(--sdc-transition-fast, .18s ease);white-space:nowrap}.sdc-slider__thumb:focus-visible,.sdc-slider__thumb--dragging{box-shadow:var(--sdc-focus-ring, 0 0 0 3px rgba(0, 123, 255, .25));outline:none}.sdc-slider__thumb:focus-visible:after,.sdc-slider__thumb--dragging:after{opacity:1}.sdc-slider__thumb--hidden{opacity:0}.sdc-slider__footer{color:var(--sdc-text-default, #111827);display:flex;font-size:.875rem;justify-content:space-between;margin-top:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: InfoSignComponent, selector: "sdc-info-sign", inputs: ["label", "labelParams", "tooltip", "tooltipParams", "iconClass", "iconAriaLabel", "tooltipPosition", "tooltipEvent", "allowHtml", "inline"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
278
278
  }
279
279
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderComponent, decorators: [{
280
280
  type: Component,
@@ -284,7 +284,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
284
284
  useExisting: forwardRef(() => SliderComponent),
285
285
  multi: true
286
286
  }
287
- ], template: "<div class=\"sdc-slider\">\n @if (labelText || infoTooltipText) {\n <div class=\"sdc-slider__labelRow\">\n @if (labelText) {\n <span class=\"sdc-slider__label\">{{ labelText }}</span>\n }\n\n @if (infoTooltipText) {\n <sdc-info-sign [tooltip]=\"infoTooltip!\" [tooltipParams]=\"infoTooltipParams\"></sdc-info-sign>\n }\n </div>\n }\n\n <div class=\"sdc-slider__surface\" [class.sdc-slider__surface--disabled]=\"disabled\">\n <div\n #trackRef\n class=\"sdc-slider__track\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n (click)=\"onTrackClick($event)\"\n (keydown)=\"onTrackKeydown($event)\"\n >\n <div class=\"sdc-slider__progress\" [style.left.%]=\"progressLeft\" [style.width.%]=\"progressWidth\"></div>\n\n @if (multiple) {\n <button\n type=\"button\"\n class=\"sdc-slider__thumb\"\n [class.sdc-slider__thumb--hidden]=\"hiddenThumb\"\n [class.sdc-slider__thumb--dragging]=\"draggingThumb === 'start'\"\n [ngStyle]=\"startThumbStyle\"\n [attr.aria-label]=\"startThumbAriaLabel\"\n [attr.data-value]=\"startValue\"\n [disabled]=\"disabled\"\n (mousedown)=\"onThumbMouseDown($event, 'start')\"\n (keydown)=\"onThumbKeydown($event, 'start')\"\n (blur)=\"markTouched()\"\n ></button>\n }\n\n <button\n type=\"button\"\n class=\"sdc-slider__thumb\"\n [class.sdc-slider__thumb--hidden]=\"hiddenThumb\"\n [class.sdc-slider__thumb--dragging]=\"draggingThumb === 'end'\"\n [ngStyle]=\"endThumbStyle\"\n [attr.aria-label]=\"endThumbAriaLabel\"\n [attr.data-value]=\"endValue\"\n [disabled]=\"disabled\"\n (mousedown)=\"onThumbMouseDown($event, 'end')\"\n (keydown)=\"onThumbKeydown($event, 'end')\"\n (blur)=\"markTouched()\"\n ></button>\n </div>\n\n <div class=\"sdc-slider__footer\">\n <span>{{ minLabelText }}</span>\n <span>{{ maxLabelText }}</span>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.sdc-slider{width:100%}.sdc-slider__labelRow{align-items:center;display:flex;gap:var(--sdc-form-label-gap, .5rem);margin-bottom:.5rem}.sdc-slider__label{color:var(--sdc-text-default, #111827);font-size:.875rem;font-weight:600}.sdc-slider__surface{padding:.5rem 0 0}.sdc-slider__surface--disabled{opacity:.7}.sdc-slider__track{background:#ddd;border-radius:999px;cursor:pointer;height:6px;position:relative}.sdc-slider__progress{background:var(--sdc-tab-primary, #428bca);border-radius:inherit;height:100%;position:absolute;top:0}.sdc-slider__thumb{--thumb-size: 20px;background:#fff;border:2px solid var(--sdc-tab-primary, #428bca);border-radius:50%;cursor:grab;height:var(--thumb-size);left:0;margin-left:calc(var(--thumb-size) / -2);position:absolute;top:50%;transform:translateY(-50%);width:var(--thumb-size)}.sdc-slider__thumb:after{background:#111827;border-radius:999px;color:#fff;content:attr(data-value);font-size:.7rem;left:50%;opacity:0;padding:.2rem .4rem;pointer-events:none;position:absolute;top:-1.9rem;transform:translate(-50%);transition:opacity var(--sdc-transition-fast, .18s ease);white-space:nowrap}.sdc-slider__thumb:focus-visible,.sdc-slider__thumb--dragging{box-shadow:var(--sdc-focus-ring, 0 0 0 3px rgba(0, 123, 255, .25));outline:none}.sdc-slider__thumb:focus-visible:after,.sdc-slider__thumb--dragging:after{opacity:1}.sdc-slider__thumb--hidden{opacity:0}.sdc-slider__footer{color:var(--sdc-text-default, #111827);display:flex;font-size:.875rem;justify-content:space-between;margin-top:.75rem}\n"] }]
287
+ ], template: "<div class=\"sdc-slider\">\n @if (labelText || infoTooltipText) {\n <div class=\"sdc-slider__labelRow\">\n @if (labelText) {\n <span class=\"sdc-slider__label\">{{ labelText }}</span>\n }\n\n @if (infoTooltipText) {\n <sdc-info-sign [tooltip]=\"infoTooltip!\" [tooltipParams]=\"infoTooltipParams\"></sdc-info-sign>\n }\n </div>\n }\n\n <div class=\"sdc-slider__surface\" [class.sdc-slider__surface--disabled]=\"disabled\">\n <div\n #trackRef\n class=\"sdc-slider__track\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n (click)=\"onTrackClick($event)\"\n (keydown)=\"onTrackKeydown($event)\"\n >\n <div class=\"sdc-slider__progress\" [style.left.%]=\"progressLeft\" [style.width.%]=\"progressWidth\"></div>\n\n @if (multiple) {\n <button\n type=\"button\"\n class=\"sdc-slider__thumb\"\n [class.sdc-slider__thumb--hidden]=\"hiddenThumb\"\n [class.sdc-slider__thumb--dragging]=\"draggingThumb === 'start'\"\n [ngStyle]=\"startThumbStyle\"\n [attr.aria-label]=\"startThumbAriaLabel\"\n [attr.data-value]=\"startValue\"\n [disabled]=\"disabled\"\n (mousedown)=\"onThumbMouseDown($event, 'start')\"\n (keydown)=\"onThumbKeydown($event, 'start')\"\n (blur)=\"markTouched()\"\n ></button>\n }\n\n <button\n type=\"button\"\n class=\"sdc-slider__thumb\"\n [class.sdc-slider__thumb--hidden]=\"hiddenThumb\"\n [class.sdc-slider__thumb--dragging]=\"draggingThumb === 'end'\"\n [ngStyle]=\"endThumbStyle\"\n [attr.aria-label]=\"endThumbAriaLabel\"\n [attr.data-value]=\"endValue\"\n [disabled]=\"disabled\"\n (mousedown)=\"onThumbMouseDown($event, 'end')\"\n (keydown)=\"onThumbKeydown($event, 'end')\"\n (blur)=\"markTouched()\"\n ></button>\n </div>\n\n <div class=\"sdc-slider__footer\">\n <span>{{ minLabelText }}</span>\n <span>{{ maxLabelText }}</span>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.sdc-slider{width:100%}.sdc-slider__labelRow{align-items:center;display:flex;gap:var(--sdc-form-label-row-gap);margin-bottom:var(--sdc-form-label-row-mb)}.sdc-slider__label{color:var(--sdc-form-label-color);font-size:var(--sdc-form-label-font-size);font-weight:var(--sdc-form-label-font-weight);line-height:var(--sdc-form-label-lh)}.sdc-slider__surface{padding:.5rem 0 0}.sdc-slider__surface--disabled{opacity:.7}.sdc-slider__track{background:#ddd;border-radius:999px;cursor:pointer;height:6px;position:relative}.sdc-slider__progress{background:var(--sdc-tab-primary, #428bca);border-radius:inherit;height:100%;position:absolute;top:0}.sdc-slider__thumb{--thumb-size: 20px;background:#fff;border:2px solid var(--sdc-tab-primary, #428bca);border-radius:50%;cursor:grab;height:var(--thumb-size);left:0;margin-left:calc(var(--thumb-size) / -2);position:absolute;top:50%;transform:translateY(-50%);width:var(--thumb-size)}.sdc-slider__thumb:after{background:#111827;border-radius:999px;color:#fff;content:attr(data-value);font-size:.7rem;left:50%;opacity:0;padding:.2rem .4rem;pointer-events:none;position:absolute;top:-1.9rem;transform:translate(-50%);transition:opacity var(--sdc-transition-fast, .18s ease);white-space:nowrap}.sdc-slider__thumb:focus-visible,.sdc-slider__thumb--dragging{box-shadow:var(--sdc-focus-ring, 0 0 0 3px rgba(0, 123, 255, .25));outline:none}.sdc-slider__thumb:focus-visible:after,.sdc-slider__thumb--dragging:after{opacity:1}.sdc-slider__thumb--hidden{opacity:0}.sdc-slider__footer{color:var(--sdc-text-default, #111827);display:flex;font-size:.875rem;justify-content:space-between;margin-top:.75rem}\n"] }]
288
288
  }], propDecorators: { trackRef: [{
289
289
  type: ViewChild,
290
290
  args: ['trackRef']
@@ -325,4 +325,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
325
325
  }], valueChange: [{
326
326
  type: Output
327
327
  }] } });
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvc2xpZGVyL3NsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3NsaWRlci9zbGlkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ3BCLE1BQU0sbUNBQW1DLENBQUM7QUFFM0MsT0FBTyxFQUFFLCtCQUErQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7OztBQW9CckUsTUFBTSxPQUFPLGVBQWU7SUFDVCxTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV2QyxRQUFRLENBQTJC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QUFXO3NCQUFuQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHtcbiAgU0xJREVSX0RFRkFVTFRfQVJJQV9MQUJFTCxcbiAgU0xJREVSX0RFRkFVTFRfTUFYLFxuICBTTElERVJfREVGQVVMVF9NSU4sXG4gIFNMSURFUl9ERUZBVUxUX1NURVBcbn0gZnJvbSAnLi4vLi4vY29yZS9jb25zdGFudHMvc2xpZGVyLmNvbnN0JztcbmltcG9ydCB0eXBlIHsgU2xpZGVyVHJhbnNsYXRlUGFyYW1zLCBTbGlkZXJWYWx1ZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvc2xpZGVyLnR5cGUnO1xuaW1wb3J0IHsgcmVzb2x2ZU51bGxhYmxlVHJhbnNsYXRhYmxlVGV4dCwgcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2kxOG4udXRpbCc7XG5pbXBvcnQgeyBuZXh0U2VxdWVudGlhbElkIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pZC51dGlsJztcbmltcG9ydCB7IEluZm9TaWduQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5mby1zaWduL2luZm8tc2lnbi5jb21wb25lbnQnO1xuXG50eXBlIFNsaWRlclRodW1iID0gJ3N0YXJ0JyB8ICdlbmQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtc2xpZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBJbmZvU2lnbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2xpZGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGdlbmVyYXRlZElkID0gbmV4dFNlcXVlbnRpYWxJZCgnc2RjLXNsaWRlcicpO1xuXG4gIEBWaWV3Q2hpbGQoJ3RyYWNrUmVmJykgdHJhY2tSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBASW5wdXQoKSBpZCA9IHRoaXMuZ2VuZXJhdGVkSWQ7XG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbFBhcmFtcz86IFNsaWRlclRyYW5zbGF0ZVBhcmFtcztcbiAgQElucHV0KCkgaW5mb1Rvb2x0aXA/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwUGFyYW1zPzogU2xpZGVyVHJhbnNsYXRlUGFyYW1zO1xuICBASW5wdXQoKSBhcmlhTGFiZWwgPSBTTElERVJfREVGQVVMVF9BUklBX0xBQkVMO1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSB2YWx1ZTogU2xpZGVyVmFsdWUgPSAwO1xuICBASW5wdXQoKSBzdGVwID0gU0xJREVSX0RFRkFVTFRfU1RFUDtcbiAgQElucHV0KCkgaGlkZGVuVGh1bWIgPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbWluID0gU0xJREVSX0RFRkFVTFRfTUlOO1xuICBASW5wdXQoKSBtYXggPSBTTElERVJfREVGQVVMVF9NQVg7XG4gIEBJbnB1dCgpIG1pblZhbHVlTGFiZWw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1pblZhbHVlTGFiZWxQYXJhbXM/OiBTbGlkZXJUcmFuc2xhdGVQYXJhbXM7XG4gIEBJbnB1dCgpIG1heFZhbHVlTGFiZWw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1heFZhbHVlTGFiZWxQYXJhbXM/OiBTbGlkZXJUcmFuc2xhdGVQYXJhbXM7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTbGlkZXJWYWx1ZT4oKTtcblxuICBkcmFnZ2luZ1RodW1iOiBTbGlkZXJUaHVtYiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogU2xpZGVyVmFsdWUpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvdWxkTm9ybWFsaXplVmFsdWUoY2hhbmdlcykpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm5vcm1hbGl6ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGV0YWNoRHJhZ0xpc3RlbmVycygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogU2xpZGVyVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5ub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IFNsaWRlclZhbHVlKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgbGFiZWxUZXh0KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiByZXNvbHZlTnVsbGFibGVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLmxhYmVsLCAnJywgdGhpcy5sYWJlbFBhcmFtcyk7XG4gIH1cblxuICBnZXQgaW5mb1Rvb2x0aXBUZXh0KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiByZXNvbHZlTnVsbGFibGVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLmluZm9Ub29sdGlwLCAnJywgdGhpcy5pbmZvVG9vbHRpcFBhcmFtcyk7XG4gIH1cblxuICBnZXQgbWluTGFiZWxUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLm1pblZhbHVlTGFiZWwsIFN0cmluZyh0aGlzLm1pbiksIHRoaXMubWluVmFsdWVMYWJlbFBhcmFtcyk7XG4gIH1cblxuICBnZXQgbWF4TGFiZWxUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLm1heFZhbHVlTGFiZWwsIFN0cmluZyh0aGlzLm1heCksIHRoaXMubWF4VmFsdWVMYWJlbFBhcmFtcyk7XG4gIH1cblxuICBnZXQgc3RhcnRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlWzBdIDogdGhpcy5zaW5nbGVWYWx1ZTtcbiAgfVxuXG4gIGdldCBlbmRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlWzFdIDogdGhpcy5zaW5nbGVWYWx1ZTtcbiAgfVxuXG4gIGdldCBzaW5nbGVWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZVsxXSA6IE51bWJlcih0aGlzLnZhbHVlID8/IHRoaXMubWluKTtcbiAgfVxuXG4gIGdldCBwcm9ncmVzc0xlZnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IHRoaXMudG9QZXJjZW50YWdlKHRoaXMuc3RhcnRWYWx1ZSkgOiAwO1xuICB9XG5cbiAgZ2V0IHByb2dyZXNzV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgPyB0aGlzLnRvUGVyY2VudGFnZSh0aGlzLmVuZFZhbHVlKSAtIHRoaXMudG9QZXJjZW50YWdlKHRoaXMuc3RhcnRWYWx1ZSlcbiAgICAgIDogdGhpcy50b1BlcmNlbnRhZ2UodGhpcy5lbmRWYWx1ZSk7XG4gIH1cblxuICBnZXQgc3RhcnRUaHVtYlN0eWxlKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB7IGxlZnQ6IGAke3RoaXMudG9QZXJjZW50YWdlKHRoaXMuc3RhcnRWYWx1ZSl9JWAgfTtcbiAgfVxuXG4gIGdldCBlbmRUaHVtYlN0eWxlKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB7IGxlZnQ6IGAke3RoaXMudG9QZXJjZW50YWdlKHRoaXMuZW5kVmFsdWUpfSVgIH07XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQodGhpcy50cmFuc2xhdGUsIHRoaXMuYXJpYUxhYmVsKTtcbiAgfVxuXG4gIGdldCByYW5nZUFyaWFMYWJlbFN0YXJ0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMucmVzb2x2ZWRBcmlhTGFiZWx9IC0gJHtyZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCh0aGlzLnRyYW5zbGF0ZSwgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkucmFuZ2Vfc3RhcnQnKX1gO1xuICB9XG5cbiAgZ2V0IHJhbmdlQXJpYUxhYmVsRW5kKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMucmVzb2x2ZWRBcmlhTGFiZWx9IC0gJHtyZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCh0aGlzLnRyYW5zbGF0ZSwgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkucmFuZ2VfZW5kJyl9YDtcbiAgfVxuXG4gIGdldCBzdGFydFRodW1iQXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMucmFuZ2VBcmlhTGFiZWxTdGFydH0gLSAke3RoaXMuc3RhcnRWYWx1ZX1gO1xuICB9XG5cbiAgZ2V0IGVuZFRodW1iQXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLm11bHRpcGxlID8gdGhpcy5yYW5nZUFyaWFMYWJlbEVuZCA6IHRoaXMucmVzb2x2ZWRBcmlhTGFiZWw7XG4gICAgcmV0dXJuIGAke2xhYmVsfSAtICR7dGhpcy5lbmRWYWx1ZX1gO1xuICB9XG5cbiAgb25UcmFja0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0VmFsdWUgPSB0aGlzLnZhbHVlRnJvbUNsaWVudFgoZXZlbnQuY2xpZW50WCk7XG5cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuY29tbWl0KG5leHRWYWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdGFuY2VUb1N0YXJ0ID0gTWF0aC5hYnMobmV4dFZhbHVlIC0gdGhpcy5zdGFydFZhbHVlKTtcbiAgICBjb25zdCBkaXN0YW5jZVRvRW5kID0gTWF0aC5hYnMobmV4dFZhbHVlIC0gdGhpcy5lbmRWYWx1ZSk7XG5cbiAgICBpZiAoZGlzdGFuY2VUb1N0YXJ0IDw9IGRpc3RhbmNlVG9FbmQpIHtcbiAgICAgIHRoaXMuY29tbWl0KFtNYXRoLm1pbihuZXh0VmFsdWUsIHRoaXMuZW5kVmFsdWUpLCB0aGlzLmVuZFZhbHVlXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb21taXQoW3RoaXMuc3RhcnRWYWx1ZSwgTWF0aC5tYXgobmV4dFZhbHVlLCB0aGlzLnN0YXJ0VmFsdWUpXSk7XG4gIH1cblxuICBvblRyYWNrS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFZhbHVlID0gdGhpcy5yZXNvbHZlVHJhY2tLZXlib2FyZFZhbHVlKGV2ZW50KTtcblxuICAgIGlmIChuZXh0VmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLmNvbW1pdChuZXh0VmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29tbWl0KFt0aGlzLnN0YXJ0VmFsdWUsIE1hdGgubWF4KG5leHRWYWx1ZSwgdGhpcy5zdGFydFZhbHVlKV0pO1xuICB9XG5cbiAgb25UaHVtYk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgdGh1bWI6IFNsaWRlclRodW1iKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZHJhZ2dpbmdUaHVtYiA9IHRodW1iO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlRHJhZ01vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmhhbmRsZURyYWdFbmQpO1xuICB9XG5cbiAgb25UaHVtYktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHRodW1iOiBTbGlkZXJUaHVtYik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5jcmVtZW50ID0gZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dVcCc7XG4gICAgY29uc3QgZGVjcmVtZW50ID0gZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nO1xuXG4gICAgaWYgKCFpbmNyZW1lbnQgJiYgIWRlY3JlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGVsdGEgPSBpbmNyZW1lbnQgPyB0aGlzLnN0ZXAgOiAtdGhpcy5zdGVwO1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IHRoaXMuc25hcCh0aGlzLmN1cnJlbnRUaHVtYlZhbHVlKHRodW1iKSArIGRlbHRhKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5jb21taXQobmV4dFZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGh1bWIgPT09ICdzdGFydCcpIHtcbiAgICAgIHRoaXMuY29tbWl0KFtNYXRoLm1pbihuZXh0VmFsdWUsIHRoaXMuZW5kVmFsdWUpLCB0aGlzLmVuZFZhbHVlXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb21taXQoW3RoaXMuc3RhcnRWYWx1ZSwgTWF0aC5tYXgobmV4dFZhbHVlLCB0aGlzLnN0YXJ0VmFsdWUpXSk7XG4gIH1cblxuICBtYXJrVG91Y2hlZCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVEcmFnTW92ZSA9IChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5kcmFnZ2luZ1RodW1iKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFZhbHVlID0gdGhpcy52YWx1ZUZyb21DbGllbnRYKGV2ZW50LmNsaWVudFgpO1xuXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLmNvbW1pdChuZXh0VmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnc3RhcnQnKSB7XG4gICAgICB0aGlzLmNvbW1pdChbTWF0aC5taW4obmV4dFZhbHVlLCB0aGlzLmVuZFZhbHVlKSwgdGhpcy5lbmRWYWx1ZV0sIGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbW1pdChbdGhpcy5zdGFydFZhbHVlLCBNYXRoLm1heChuZXh0VmFsdWUsIHRoaXMuc3RhcnRWYWx1ZSldLCBmYWxzZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVEcmFnRW5kID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuZHJhZ2dpbmdUaHVtYiA9IG51bGw7XG4gICAgdGhpcy5kZXRhY2hEcmFnTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfTtcblxuICBwcml2YXRlIGRldGFjaERyYWdMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVEcmFnTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuaGFuZGxlRHJhZ0VuZCk7XG4gIH1cblxuICBwcml2YXRlIGNvbW1pdCh2YWx1ZTogU2xpZGVyVmFsdWUsIGVtaXRUb3VjaGVkID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLm5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcblxuICAgIGlmIChlbWl0VG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgY3VycmVudFRodW1iVmFsdWUodGh1bWI6IFNsaWRlclRodW1iKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGh1bWIgPT09ICdzdGFydCcgPyB0aGlzLnN0YXJ0VmFsdWUgOiB0aGlzLmVuZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGROb3JtYWxpemVWYWx1ZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFsnbWluJywgJ21heCcsICdzdGVwJywgJ211bHRpcGxlJywgJ3ZhbHVlJ10uc29tZSgoa2V5KSA9PiBrZXkgaW4gY2hhbmdlcyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUcmFja0tleWJvYXJkVmFsdWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnSG9tZScpIHtcbiAgICAgIHJldHVybiB0aGlzLm1pbjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW5kJykge1xuICAgICAgcmV0dXJuIHRoaXMubWF4O1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gdGhpcy5lbmRWYWx1ZSA6IHRoaXMuc2luZ2xlVmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICByZXR1cm4gdGhpcy5zbmFwKHRoaXMuZW5kVmFsdWUgKyB0aGlzLnN0ZXApO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHJldHVybiB0aGlzLnNuYXAodGhpcy5lbmRWYWx1ZSAtIHRoaXMuc3RlcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVZhbHVlKHZhbHVlOiBTbGlkZXJWYWx1ZSk6IFNsaWRlclZhbHVlIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsYW1wKHRoaXMuc25hcChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzFdIDogdmFsdWUpKTtcbiAgICB9XG5cbiAgICBjb25zdCByYXcgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3RoaXMubWluLCBOdW1iZXIodmFsdWUgPz8gdGhpcy5taW4pXTtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuY2xhbXAodGhpcy5zbmFwKE1hdGgubWluKHJhd1swXSwgcmF3WzFdKSkpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuY2xhbXAodGhpcy5zbmFwKE1hdGgubWF4KHJhd1swXSwgcmF3WzFdKSkpO1xuICAgIHJldHVybiBbc3RhcnQsIGVuZF07XG4gIH1cblxuICBwcml2YXRlIGNsYW1wKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IHRoaXMubWluKSk7XG4gIH1cblxuICBwcml2YXRlIHNuYXAodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5taW47XG4gICAgfVxuXG4gICAgY29uc3Qgc2FmZVN0ZXAgPSB0aGlzLnN0ZXAgPiAwID8gdGhpcy5zdGVwIDogMTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gTWF0aC5yb3VuZCgodmFsdWUgLSB0aGlzLm1pbikgLyBzYWZlU3RlcCkgKiBzYWZlU3RlcCArIHRoaXMubWluO1xuICAgIHJldHVybiBOdW1iZXIobm9ybWFsaXplZC50b0ZpeGVkKDQpKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsdWVGcm9tQ2xpZW50WChjbGllbnRYOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHRyYWNrID0gdGhpcy50cmFja1JlZj8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghdHJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLm1pbjtcbiAgICB9XG5cbiAgICBjb25zdCByZWN0ID0gdHJhY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IHJlY3Qud2lkdGggPiAwID8gKGNsaWVudFggLSByZWN0LmxlZnQpIC8gcmVjdC53aWR0aCA6IDA7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm1pbiArICh0aGlzLm1heCAtIHRoaXMubWluKSAqIHBlcmNlbnRhZ2U7XG4gICAgcmV0dXJuIHRoaXMuY2xhbXAodGhpcy5zbmFwKHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIHRvUGVyY2VudGFnZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5tYXggPD0gdGhpcy5taW4pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiAoKHZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSAqIDEwMDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNkYy1zbGlkZXJcIj5cbiAgQGlmIChsYWJlbFRleHQgfHwgaW5mb1Rvb2x0aXBUZXh0KSB7XG4gICAgPGRpdiBjbGFzcz1cInNkYy1zbGlkZXJfX2xhYmVsUm93XCI+XG4gICAgICBAaWYgKGxhYmVsVGV4dCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1zbGlkZXJfX2xhYmVsXCI+e3sgbGFiZWxUZXh0IH19PC9zcGFuPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGluZm9Ub29sdGlwVGV4dCkge1xuICAgICAgICA8c2RjLWluZm8tc2lnbiBbdG9vbHRpcF09XCJpbmZvVG9vbHRpcCFcIiBbdG9vbHRpcFBhcmFtc109XCJpbmZvVG9vbHRpcFBhcmFtc1wiPjwvc2RjLWluZm8tc2lnbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxkaXYgY2xhc3M9XCJzZGMtc2xpZGVyX19zdXJmYWNlXCIgW2NsYXNzLnNkYy1zbGlkZXJfX3N1cmZhY2UtLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPGRpdlxuICAgICAgI3RyYWNrUmVmXG4gICAgICBjbGFzcz1cInNkYy1zbGlkZXJfX3RyYWNrXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgIChjbGljayk9XCJvblRyYWNrQ2xpY2soJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bik9XCJvblRyYWNrS2V5ZG93bigkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic2RjLXNsaWRlcl9fcHJvZ3Jlc3NcIiBbc3R5bGUubGVmdC4lXT1cInByb2dyZXNzTGVmdFwiIFtzdHlsZS53aWR0aC4lXT1cInByb2dyZXNzV2lkdGhcIj48L2Rpdj5cblxuICAgICAgQGlmIChtdWx0aXBsZSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzZGMtc2xpZGVyX190aHVtYlwiXG4gICAgICAgICAgW2NsYXNzLnNkYy1zbGlkZXJfX3RodW1iLS1oaWRkZW5dPVwiaGlkZGVuVGh1bWJcIlxuICAgICAgICAgIFtjbGFzcy5zZGMtc2xpZGVyX190aHVtYi0tZHJhZ2dpbmddPVwiZHJhZ2dpbmdUaHVtYiA9PT0gJ3N0YXJ0J1wiXG4gICAgICAgICAgW25nU3R5bGVdPVwic3RhcnRUaHVtYlN0eWxlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0YXJ0VGh1bWJBcmlhTGFiZWxcIlxuICAgICAgICAgIFthdHRyLmRhdGEtdmFsdWVdPVwic3RhcnRWYWx1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAobW91c2Vkb3duKT1cIm9uVGh1bWJNb3VzZURvd24oJGV2ZW50LCAnc3RhcnQnKVwiXG4gICAgICAgICAgKGtleWRvd24pPVwib25UaHVtYktleWRvd24oJGV2ZW50LCAnc3RhcnQnKVwiXG4gICAgICAgICAgKGJsdXIpPVwibWFya1RvdWNoZWQoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIH1cblxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJzZGMtc2xpZGVyX190aHVtYlwiXG4gICAgICAgIFtjbGFzcy5zZGMtc2xpZGVyX190aHVtYi0taGlkZGVuXT1cImhpZGRlblRodW1iXCJcbiAgICAgICAgW2NsYXNzLnNkYy1zbGlkZXJfX3RodW1iLS1kcmFnZ2luZ109XCJkcmFnZ2luZ1RodW1iID09PSAnZW5kJ1wiXG4gICAgICAgIFtuZ1N0eWxlXT1cImVuZFRodW1iU3R5bGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImVuZFRodW1iQXJpYUxhYmVsXCJcbiAgICAgICAgW2F0dHIuZGF0YS12YWx1ZV09XCJlbmRWYWx1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25UaHVtYk1vdXNlRG93bigkZXZlbnQsICdlbmQnKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uVGh1bWJLZXlkb3duKCRldmVudCwgJ2VuZCcpXCJcbiAgICAgICAgKGJsdXIpPVwibWFya1RvdWNoZWQoKVwiXG4gICAgICA+PC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2RjLXNsaWRlcl9fZm9vdGVyXCI+XG4gICAgICA8c3Bhbj57eyBtaW5MYWJlbFRleHQgfX08L3NwYW4+XG4gICAgICA8c3Bhbj57eyBtYXhMYWJlbFRleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvc2xpZGVyL3NsaWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3NsaWRlci9zbGlkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ3BCLE1BQU0sbUNBQW1DLENBQUM7QUFFM0MsT0FBTyxFQUFFLCtCQUErQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7OztBQW9CckUsTUFBTSxPQUFPLGVBQWU7SUFDVCxTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV2QyxRQUFRLENBQTJC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QUFXO3NCQUFuQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHtcbiAgU0xJREVSX0RFRkFVTFRfQVJJQV9MQUJFTCxcbiAgU0xJREVSX0RFRkFVTFRfTUFYLFxuICBTTElERVJfREVGQVVMVF9NSU4sXG4gIFNMSURFUl9ERUZBVUxUX1NURVBcbn0gZnJvbSAnLi4vLi4vY29yZS9jb25zdGFudHMvc2xpZGVyLmNvbnN0JztcbmltcG9ydCB0eXBlIHsgU2xpZGVyVHJhbnNsYXRlUGFyYW1zLCBTbGlkZXJWYWx1ZSB9IGZyb20gJy4uLy4uL2NvcmUvdHlwZXMvc2xpZGVyLnR5cGUnO1xuaW1wb3J0IHsgcmVzb2x2ZU51bGxhYmxlVHJhbnNsYXRhYmxlVGV4dCwgcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2kxOG4udXRpbCc7XG5pbXBvcnQgeyBuZXh0U2VxdWVudGlhbElkIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pZC51dGlsJztcbmltcG9ydCB7IEluZm9TaWduQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5mby1zaWduL2luZm8tc2lnbi5jb21wb25lbnQnO1xuXG50eXBlIFNsaWRlclRodW1iID0gJ3N0YXJ0JyB8ICdlbmQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtc2xpZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBJbmZvU2lnbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2xpZGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGdlbmVyYXRlZElkID0gbmV4dFNlcXVlbnRpYWxJZCgnc2RjLXNsaWRlcicpO1xuXG4gIEBWaWV3Q2hpbGQoJ3RyYWNrUmVmJykgdHJhY2tSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBASW5wdXQoKSBpZCA9IHRoaXMuZ2VuZXJhdGVkSWQ7XG4gIEBJbnB1dCgpIGxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbFBhcmFtcz86IFNsaWRlclRyYW5zbGF0ZVBhcmFtcztcbiAgQElucHV0KCkgaW5mb1Rvb2x0aXA/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwUGFyYW1zPzogU2xpZGVyVHJhbnNsYXRlUGFyYW1zO1xuICBASW5wdXQoKSBhcmlhTGFiZWwgPSBTTElERVJfREVGQVVMVF9BUklBX0xBQkVMO1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSB2YWx1ZTogU2xpZGVyVmFsdWUgPSAwO1xuICBASW5wdXQoKSBzdGVwID0gU0xJREVSX0RFRkFVTFRfU1RFUDtcbiAgQElucHV0KCkgaGlkZGVuVGh1bWIgPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbWluID0gU0xJREVSX0RFRkFVTFRfTUlOO1xuICBASW5wdXQoKSBtYXggPSBTTElERVJfREVGQVVMVF9NQVg7XG4gIEBJbnB1dCgpIG1pblZhbHVlTGFiZWw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1pblZhbHVlTGFiZWxQYXJhbXM/OiBTbGlkZXJUcmFuc2xhdGVQYXJhbXM7XG4gIEBJbnB1dCgpIG1heFZhbHVlTGFiZWw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1heFZhbHVlTGFiZWxQYXJhbXM/OiBTbGlkZXJUcmFuc2xhdGVQYXJhbXM7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTbGlkZXJWYWx1ZT4oKTtcblxuICBkcmFnZ2luZ1RodW1iOiBTbGlkZXJUaHVtYiB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogU2xpZGVyVmFsdWUpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvdWxkTm9ybWFsaXplVmFsdWUoY2hhbmdlcykpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm5vcm1hbGl6ZVZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGV0YWNoRHJhZ0xpc3RlbmVycygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogU2xpZGVyVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5ub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IFNsaWRlclZhbHVlKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXQgbGFiZWxUZXh0KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiByZXNvbHZlTnVsbGFibGVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLmxhYmVsLCAnJywgdGhpcy5sYWJlbFBhcmFtcyk7XG4gIH1cblxuICBnZXQgaW5mb1Rvb2x0aXBUZXh0KCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiByZXNvbHZlTnVsbGFibGVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLmluZm9Ub29sdGlwLCAnJywgdGhpcy5pbmZvVG9vbHRpcFBhcmFtcyk7XG4gIH1cblxuICBnZXQgbWluTGFiZWxUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLm1pblZhbHVlTGFiZWwsIFN0cmluZyh0aGlzLm1pbiksIHRoaXMubWluVmFsdWVMYWJlbFBhcmFtcyk7XG4gIH1cblxuICBnZXQgbWF4TGFiZWxUZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVUcmFuc2xhdGFibGVUZXh0KHRoaXMudHJhbnNsYXRlLCB0aGlzLm1heFZhbHVlTGFiZWwsIFN0cmluZyh0aGlzLm1heCksIHRoaXMubWF4VmFsdWVMYWJlbFBhcmFtcyk7XG4gIH1cblxuICBnZXQgc3RhcnRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlWzBdIDogdGhpcy5zaW5nbGVWYWx1ZTtcbiAgfVxuXG4gIGdldCBlbmRWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlWzFdIDogdGhpcy5zaW5nbGVWYWx1ZTtcbiAgfVxuXG4gIGdldCBzaW5nbGVWYWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZVsxXSA6IE51bWJlcih0aGlzLnZhbHVlID8/IHRoaXMubWluKTtcbiAgfVxuXG4gIGdldCBwcm9ncmVzc0xlZnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IHRoaXMudG9QZXJjZW50YWdlKHRoaXMuc3RhcnRWYWx1ZSkgOiAwO1xuICB9XG5cbiAgZ2V0IHByb2dyZXNzV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgPyB0aGlzLnRvUGVyY2VudGFnZSh0aGlzLmVuZFZhbHVlKSAtIHRoaXMudG9QZXJjZW50YWdlKHRoaXMuc3RhcnRWYWx1ZSlcbiAgICAgIDogdGhpcy50b1BlcmNlbnRhZ2UodGhpcy5lbmRWYWx1ZSk7XG4gIH1cblxuICBnZXQgc3RhcnRUaHVtYlN0eWxlKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB7IGxlZnQ6IGAke3RoaXMudG9QZXJjZW50YWdlKHRoaXMuc3RhcnRWYWx1ZSl9JWAgfTtcbiAgfVxuXG4gIGdldCBlbmRUaHVtYlN0eWxlKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB7IGxlZnQ6IGAke3RoaXMudG9QZXJjZW50YWdlKHRoaXMuZW5kVmFsdWUpfSVgIH07XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRBcmlhTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZVRyYW5zbGF0YWJsZVRleHQodGhpcy50cmFuc2xhdGUsIHRoaXMuYXJpYUxhYmVsKTtcbiAgfVxuXG4gIGdldCByYW5nZUFyaWFMYWJlbFN0YXJ0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMucmVzb2x2ZWRBcmlhTGFiZWx9IC0gJHtyZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCh0aGlzLnRyYW5zbGF0ZSwgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkucmFuZ2Vfc3RhcnQnKX1gO1xuICB9XG5cbiAgZ2V0IHJhbmdlQXJpYUxhYmVsRW5kKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMucmVzb2x2ZWRBcmlhTGFiZWx9IC0gJHtyZXNvbHZlVHJhbnNsYXRhYmxlVGV4dCh0aGlzLnRyYW5zbGF0ZSwgJ3BsYXRmb3JtLmRhdGFjb3JlLmFjY2Vzc2liaWxpdHkucmFuZ2VfZW5kJyl9YDtcbiAgfVxuXG4gIGdldCBzdGFydFRodW1iQXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMucmFuZ2VBcmlhTGFiZWxTdGFydH0gLSAke3RoaXMuc3RhcnRWYWx1ZX1gO1xuICB9XG5cbiAgZ2V0IGVuZFRodW1iQXJpYUxhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLm11bHRpcGxlID8gdGhpcy5yYW5nZUFyaWFMYWJlbEVuZCA6IHRoaXMucmVzb2x2ZWRBcmlhTGFiZWw7XG4gICAgcmV0dXJuIGAke2xhYmVsfSAtICR7dGhpcy5lbmRWYWx1ZX1gO1xuICB9XG5cbiAgb25UcmFja0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0VmFsdWUgPSB0aGlzLnZhbHVlRnJvbUNsaWVudFgoZXZlbnQuY2xpZW50WCk7XG5cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuY29tbWl0KG5leHRWYWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdGFuY2VUb1N0YXJ0ID0gTWF0aC5hYnMobmV4dFZhbHVlIC0gdGhpcy5zdGFydFZhbHVlKTtcbiAgICBjb25zdCBkaXN0YW5jZVRvRW5kID0gTWF0aC5hYnMobmV4dFZhbHVlIC0gdGhpcy5lbmRWYWx1ZSk7XG5cbiAgICBpZiAoZGlzdGFuY2VUb1N0YXJ0IDw9IGRpc3RhbmNlVG9FbmQpIHtcbiAgICAgIHRoaXMuY29tbWl0KFtNYXRoLm1pbihuZXh0VmFsdWUsIHRoaXMuZW5kVmFsdWUpLCB0aGlzLmVuZFZhbHVlXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb21taXQoW3RoaXMuc3RhcnRWYWx1ZSwgTWF0aC5tYXgobmV4dFZhbHVlLCB0aGlzLnN0YXJ0VmFsdWUpXSk7XG4gIH1cblxuICBvblRyYWNrS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFZhbHVlID0gdGhpcy5yZXNvbHZlVHJhY2tLZXlib2FyZFZhbHVlKGV2ZW50KTtcblxuICAgIGlmIChuZXh0VmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLmNvbW1pdChuZXh0VmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29tbWl0KFt0aGlzLnN0YXJ0VmFsdWUsIE1hdGgubWF4KG5leHRWYWx1ZSwgdGhpcy5zdGFydFZhbHVlKV0pO1xuICB9XG5cbiAgb25UaHVtYk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCwgdGh1bWI6IFNsaWRlclRodW1iKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZHJhZ2dpbmdUaHVtYiA9IHRodW1iO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlRHJhZ01vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLmhhbmRsZURyYWdFbmQpO1xuICB9XG5cbiAgb25UaHVtYktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHRodW1iOiBTbGlkZXJUaHVtYik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5jcmVtZW50ID0gZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dVcCc7XG4gICAgY29uc3QgZGVjcmVtZW50ID0gZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nO1xuXG4gICAgaWYgKCFpbmNyZW1lbnQgJiYgIWRlY3JlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGVsdGEgPSBpbmNyZW1lbnQgPyB0aGlzLnN0ZXAgOiAtdGhpcy5zdGVwO1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IHRoaXMuc25hcCh0aGlzLmN1cnJlbnRUaHVtYlZhbHVlKHRodW1iKSArIGRlbHRhKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5jb21taXQobmV4dFZhbHVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGh1bWIgPT09ICdzdGFydCcpIHtcbiAgICAgIHRoaXMuY29tbWl0KFtNYXRoLm1pbihuZXh0VmFsdWUsIHRoaXMuZW5kVmFsdWUpLCB0aGlzLmVuZFZhbHVlXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb21taXQoW3RoaXMuc3RhcnRWYWx1ZSwgTWF0aC5tYXgobmV4dFZhbHVlLCB0aGlzLnN0YXJ0VmFsdWUpXSk7XG4gIH1cblxuICBtYXJrVG91Y2hlZCgpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVEcmFnTW92ZSA9IChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5kcmFnZ2luZ1RodW1iKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFZhbHVlID0gdGhpcy52YWx1ZUZyb21DbGllbnRYKGV2ZW50LmNsaWVudFgpO1xuXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLmNvbW1pdChuZXh0VmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnc3RhcnQnKSB7XG4gICAgICB0aGlzLmNvbW1pdChbTWF0aC5taW4obmV4dFZhbHVlLCB0aGlzLmVuZFZhbHVlKSwgdGhpcy5lbmRWYWx1ZV0sIGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbW1pdChbdGhpcy5zdGFydFZhbHVlLCBNYXRoLm1heChuZXh0VmFsdWUsIHRoaXMuc3RhcnRWYWx1ZSldLCBmYWxzZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVEcmFnRW5kID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuZHJhZ2dpbmdUaHVtYiA9IG51bGw7XG4gICAgdGhpcy5kZXRhY2hEcmFnTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfTtcblxuICBwcml2YXRlIGRldGFjaERyYWdMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5oYW5kbGVEcmFnTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuaGFuZGxlRHJhZ0VuZCk7XG4gIH1cblxuICBwcml2YXRlIGNvbW1pdCh2YWx1ZTogU2xpZGVyVmFsdWUsIGVtaXRUb3VjaGVkID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLm5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcblxuICAgIGlmIChlbWl0VG91Y2hlZCkge1xuICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgY3VycmVudFRodW1iVmFsdWUodGh1bWI6IFNsaWRlclRodW1iKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGh1bWIgPT09ICdzdGFydCcgPyB0aGlzLnN0YXJ0VmFsdWUgOiB0aGlzLmVuZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGROb3JtYWxpemVWYWx1ZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFsnbWluJywgJ21heCcsICdzdGVwJywgJ211bHRpcGxlJywgJ3ZhbHVlJ10uc29tZSgoa2V5KSA9PiBrZXkgaW4gY2hhbmdlcyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUcmFja0tleWJvYXJkVmFsdWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnSG9tZScpIHtcbiAgICAgIHJldHVybiB0aGlzLm1pbjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW5kJykge1xuICAgICAgcmV0dXJuIHRoaXMubWF4O1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gdGhpcy5lbmRWYWx1ZSA6IHRoaXMuc2luZ2xlVmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICByZXR1cm4gdGhpcy5zbmFwKHRoaXMuZW5kVmFsdWUgKyB0aGlzLnN0ZXApO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHJldHVybiB0aGlzLnNuYXAodGhpcy5lbmRWYWx1ZSAtIHRoaXMuc3RlcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVZhbHVlKHZhbHVlOiBTbGlkZXJWYWx1ZSk6IFNsaWRlclZhbHVlIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsYW1wKHRoaXMuc25hcChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlWzFdIDogdmFsdWUpKTtcbiAgICB9XG5cbiAgICBjb25zdCByYXcgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3RoaXMubWluLCBOdW1iZXIodmFsdWUgPz8gdGhpcy5taW4pXTtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuY2xhbXAodGhpcy5zbmFwKE1hdGgubWluKHJhd1swXSwgcmF3WzFdKSkpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuY2xhbXAodGhpcy5zbmFwKE1hdGgubWF4KHJhd1swXSwgcmF3WzFdKSkpO1xuICAgIHJldHVybiBbc3RhcnQsIGVuZF07XG4gIH1cblxuICBwcml2YXRlIGNsYW1wKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSkgPyB2YWx1ZSA6IHRoaXMubWluKSk7XG4gIH1cblxuICBwcml2YXRlIHNuYXAodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5taW47XG4gICAgfVxuXG4gICAgY29uc3Qgc2FmZVN0ZXAgPSB0aGlzLnN0ZXAgPiAwID8gdGhpcy5zdGVwIDogMTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gTWF0aC5yb3VuZCgodmFsdWUgLSB0aGlzLm1pbikgLyBzYWZlU3RlcCkgKiBzYWZlU3RlcCArIHRoaXMubWluO1xuICAgIHJldHVybiBOdW1iZXIobm9ybWFsaXplZC50b0ZpeGVkKDQpKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsdWVGcm9tQ2xpZW50WChjbGllbnRYOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHRyYWNrID0gdGhpcy50cmFja1JlZj8ubmF0aXZlRWxlbWVudDtcblxuICAgIGlmICghdHJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLm1pbjtcbiAgICB9XG5cbiAgICBjb25zdCByZWN0ID0gdHJhY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgcGVyY2VudGFnZSA9IHJlY3Qud2lkdGggPiAwID8gKGNsaWVudFggLSByZWN0LmxlZnQpIC8gcmVjdC53aWR0aCA6IDA7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm1pbiArICh0aGlzLm1heCAtIHRoaXMubWluKSAqIHBlcmNlbnRhZ2U7XG4gICAgcmV0dXJuIHRoaXMuY2xhbXAodGhpcy5zbmFwKHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIHRvUGVyY2VudGFnZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5tYXggPD0gdGhpcy5taW4pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiAoKHZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pKSAqIDEwMDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNkYy1zbGlkZXJcIj5cbiAgQGlmIChsYWJlbFRleHQgfHwgaW5mb1Rvb2x0aXBUZXh0KSB7XG4gICAgPGRpdiBjbGFzcz1cInNkYy1zbGlkZXJfX2xhYmVsUm93XCI+XG4gICAgICBAaWYgKGxhYmVsVGV4dCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1zbGlkZXJfX2xhYmVsXCI+e3sgbGFiZWxUZXh0IH19PC9zcGFuPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGluZm9Ub29sdGlwVGV4dCkge1xuICAgICAgICA8c2RjLWluZm8tc2lnbiBbdG9vbHRpcF09XCJpbmZvVG9vbHRpcCFcIiBbdG9vbHRpcFBhcmFtc109XCJpbmZvVG9vbHRpcFBhcmFtc1wiPjwvc2RjLWluZm8tc2lnbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDxkaXYgY2xhc3M9XCJzZGMtc2xpZGVyX19zdXJmYWNlXCIgW2NsYXNzLnNkYy1zbGlkZXJfX3N1cmZhY2UtLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgPGRpdlxuICAgICAgI3RyYWNrUmVmXG4gICAgICBjbGFzcz1cInNkYy1zbGlkZXJfX3RyYWNrXCJcbiAgICAgIFthdHRyLnRhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgIChjbGljayk9XCJvblRyYWNrQ2xpY2soJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bik9XCJvblRyYWNrS2V5ZG93bigkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic2RjLXNsaWRlcl9fcHJvZ3Jlc3NcIiBbc3R5bGUubGVmdC4lXT1cInByb2dyZXNzTGVmdFwiIFtzdHlsZS53aWR0aC4lXT1cInByb2dyZXNzV2lkdGhcIj48L2Rpdj5cblxuICAgICAgQGlmIChtdWx0aXBsZSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzZGMtc2xpZGVyX190aHVtYlwiXG4gICAgICAgICAgW2NsYXNzLnNkYy1zbGlkZXJfX3RodW1iLS1oaWRkZW5dPVwiaGlkZGVuVGh1bWJcIlxuICAgICAgICAgIFtjbGFzcy5zZGMtc2xpZGVyX190aHVtYi0tZHJhZ2dpbmddPVwiZHJhZ2dpbmdUaHVtYiA9PT0gJ3N0YXJ0J1wiXG4gICAgICAgICAgW25nU3R5bGVdPVwic3RhcnRUaHVtYlN0eWxlXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN0YXJ0VGh1bWJBcmlhTGFiZWxcIlxuICAgICAgICAgIFthdHRyLmRhdGEtdmFsdWVdPVwic3RhcnRWYWx1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAobW91c2Vkb3duKT1cIm9uVGh1bWJNb3VzZURvd24oJGV2ZW50LCAnc3RhcnQnKVwiXG4gICAgICAgICAgKGtleWRvd24pPVwib25UaHVtYktleWRvd24oJGV2ZW50LCAnc3RhcnQnKVwiXG4gICAgICAgICAgKGJsdXIpPVwibWFya1RvdWNoZWQoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIH1cblxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJzZGMtc2xpZGVyX190aHVtYlwiXG4gICAgICAgIFtjbGFzcy5zZGMtc2xpZGVyX190aHVtYi0taGlkZGVuXT1cImhpZGRlblRodW1iXCJcbiAgICAgICAgW2NsYXNzLnNkYy1zbGlkZXJfX3RodW1iLS1kcmFnZ2luZ109XCJkcmFnZ2luZ1RodW1iID09PSAnZW5kJ1wiXG4gICAgICAgIFtuZ1N0eWxlXT1cImVuZFRodW1iU3R5bGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImVuZFRodW1iQXJpYUxhYmVsXCJcbiAgICAgICAgW2F0dHIuZGF0YS12YWx1ZV09XCJlbmRWYWx1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChtb3VzZWRvd24pPVwib25UaHVtYk1vdXNlRG93bigkZXZlbnQsICdlbmQnKVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uVGh1bWJLZXlkb3duKCRldmVudCwgJ2VuZCcpXCJcbiAgICAgICAgKGJsdXIpPVwibWFya1RvdWNoZWQoKVwiXG4gICAgICA+PC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2RjLXNsaWRlcl9fZm9vdGVyXCI+XG4gICAgICA8c3Bhbj57eyBtaW5MYWJlbFRleHQgfX08L3NwYW4+XG4gICAgICA8c3Bhbj57eyBtYXhMYWJlbFRleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -59,7 +59,7 @@ export class SplitButtonComponent {
59
59
  this.open = false;
60
60
  }
61
61
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplitButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
62
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SplitButtonComponent, isStandalone: true, selector: "sdc-split-button", inputs: { label: "label", labelParams: "labelParams", ariaLabel: "ariaLabel", ariaLabelParams: "ariaLabelParams", iconClass: "iconClass", disabled: "disabled", priority: "priority", options: "options", appendTo: "appendTo", menuAriaLabel: "menuAriaLabel", toggleAriaLabel: "toggleAriaLabel" }, outputs: { buttonClicked: "buttonClicked", optionSelected: "optionSelected" }, ngImport: i0, template: "<sdc-popover\n [open]=\"open\"\n [appendTo]=\"appendTo\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnOutsideClick]=\"true\"\n [matchTriggerWidth]=\"true\"\n (openChange)=\"open = $event\"\n>\n <div\n sdc-popover-trigger\n class=\"sdc-split-button\"\n [class.sdc-split-button--disabled]=\"disabled\"\n [class.sdc-split-button--primary]=\"priority === 'primary'\"\n [class.sdc-split-button--secondary]=\"priority === 'secondary'\"\n [class.sdc-split-button--default]=\"priority === 'default'\"\n [class.sdc-split-button--danger]=\"priority === 'danger'\"\n >\n <button\n type=\"button\"\n class=\"sdc-split-button__primary\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? (ariaLabel | translate: ariaLabelParams) : (label | translate: labelParams)\"\n (click)=\"onPrimaryClick($event)\"\n >\n @if (iconClass) {\n <i class=\"sdc-split-button__primaryIcon\" [class]=\"iconClass\" aria-hidden=\"true\"></i>\n }\n <span>{{ label | translate: labelParams }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-split-button__toggle\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"toggleAriaLabel | translate\"\n [attr.aria-expanded]=\"open\"\n (click)=\"toggleMenu($event)\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <div sdc-popover-content class=\"sdc-split-button__menu\" role=\"menu\" [attr.aria-label]=\"menuAriaLabel | translate\">\n @for (option of visibleOptions; track trackOption($index, option)) {\n <button\n type=\"button\"\n class=\"sdc-split-button__option\"\n role=\"menuitem\"\n [disabled]=\"disabled || option.disabled\"\n (click)=\"onOptionClick(option, $event)\"\n >\n @if (option.iconClass) {\n <i class=\"sdc-split-button__optionIcon\" [class]=\"option.iconClass\" aria-hidden=\"true\"></i>\n }\n <span>{{ option.title | translate: option.titleParams }}</span>\n </button>\n }\n </div>\n</sdc-popover>\n", styles: [":host{display:inline-flex}.sdc-split-button{--sdc-split-bg: #428bca;--sdc-split-border: #428bca;--sdc-split-color: #ffffff;--sdc-split-hover: #3a7ab0;display:inline-flex;min-height:34px}.sdc-split-button--secondary{--sdc-split-bg: #ffffff;--sdc-split-border: #cfd6df;--sdc-split-color: #324154;--sdc-split-hover: #f5f7fa}.sdc-split-button--default{--sdc-split-bg: #eceeef;--sdc-split-border: #d6dadd;--sdc-split-color: #324154;--sdc-split-hover: #e2e6ea}.sdc-split-button--danger{--sdc-split-bg: #dc2626;--sdc-split-border: #dc2626;--sdc-split-color: #ffffff;--sdc-split-hover: #b91c1c}.sdc-split-button--disabled{opacity:.7}.sdc-split-button__primary,.sdc-split-button__toggle{align-items:center;background:var(--sdc-split-bg);border:1px solid var(--sdc-split-border);color:var(--sdc-split-color);cursor:pointer;display:inline-flex;min-height:34px;transition:background-color var(--sdc-transition-fast, .18s ease)}.sdc-split-button__primary{gap:.5rem;border-radius:4px 0 0 4px;padding:0 .875rem}.sdc-split-button__toggle{border-left-width:0;border-radius:0 4px 4px 0;justify-content:center;min-width:2.4rem}.sdc-split-button__primary:focus-visible,.sdc-split-button__toggle:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:2px}.sdc-split-button__primary:hover:not(:disabled),.sdc-split-button__toggle:hover:not(:disabled){background:var(--sdc-split-hover)}.sdc-split-button__menu{background:var(--sdc-split-menu-bg, #ffffff);border:1px solid var(--sdc-border-strong, #d1d5db);border-radius:6px;box-shadow:var(--sdc-shadow-sm, 0 2px 8px rgba(0, 0, 0, .08));display:flex;flex-direction:column;min-width:12rem;overflow:hidden;padding:.25rem}.sdc-split-button__option{align-items:center;background:transparent;border:0;border-radius:4px;color:var(--sdc-text-default, #111827);cursor:pointer;display:inline-flex;gap:.625rem;justify-content:flex-start;min-height:2.25rem;padding:0 .75rem;text-align:left}.sdc-split-button__option:hover:not(:disabled){background:var(--sdc-split-menu-option-hover-bg, #f5f7fa)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: PopoverComponent, selector: "sdc-popover", inputs: ["open", "disabled", "toggleOnTriggerClick", "closeOnOutsideClick", "closeOnEscape", "trapFocus", "focusOnOpen", "restoreFocusOnClose", "ariaLabel", "appendTo", "zIndex", "offset", "placement", "role", "matchTriggerWidth", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "panelClass"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
62
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SplitButtonComponent, isStandalone: true, selector: "sdc-split-button", inputs: { label: "label", labelParams: "labelParams", ariaLabel: "ariaLabel", ariaLabelParams: "ariaLabelParams", iconClass: "iconClass", disabled: "disabled", priority: "priority", options: "options", appendTo: "appendTo", menuAriaLabel: "menuAriaLabel", toggleAriaLabel: "toggleAriaLabel" }, outputs: { buttonClicked: "buttonClicked", optionSelected: "optionSelected" }, ngImport: i0, template: "<sdc-popover\n [open]=\"open\"\n [appendTo]=\"appendTo\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnOutsideClick]=\"true\"\n [matchTriggerWidth]=\"true\"\n (openChange)=\"open = $event\"\n>\n <div\n sdc-popover-trigger\n class=\"sdc-split-button\"\n [class.sdc-split-button--disabled]=\"disabled\"\n [class.sdc-split-button--primary]=\"priority === 'primary'\"\n [class.sdc-split-button--secondary]=\"priority === 'secondary'\"\n [class.sdc-split-button--default]=\"priority === 'default'\"\n [class.sdc-split-button--danger]=\"priority === 'danger'\"\n >\n <button\n type=\"button\"\n class=\"sdc-split-button__primary\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? (ariaLabel | translate: ariaLabelParams) : (label | translate: labelParams)\"\n (click)=\"onPrimaryClick($event)\"\n >\n @if (iconClass) {\n <i class=\"sdc-split-button__primaryIcon\" [class]=\"iconClass\" aria-hidden=\"true\"></i>\n }\n <span>{{ label | translate: labelParams }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"sdc-split-button__toggle\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"toggleAriaLabel | translate\"\n [attr.aria-expanded]=\"open\"\n (click)=\"toggleMenu($event)\"\n >\n <i class=\"fas fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n\n <div sdc-popover-content class=\"sdc-split-button__menu\" role=\"menu\" [attr.aria-label]=\"menuAriaLabel | translate\">\n @for (option of visibleOptions; track trackOption($index, option)) {\n <button\n type=\"button\"\n class=\"sdc-split-button__option\"\n role=\"menuitem\"\n [disabled]=\"disabled || option.disabled\"\n (click)=\"onOptionClick(option, $event)\"\n >\n @if (option.iconClass) {\n <i class=\"sdc-split-button__optionIcon\" [class]=\"option.iconClass\" aria-hidden=\"true\"></i>\n }\n <span>{{ option.title | translate: option.titleParams }}</span>\n </button>\n }\n </div>\n</sdc-popover>\n", styles: [":host{display:inline-flex}.sdc-split-button{--sdc-split-bg: #428bca;--sdc-split-border: #428bca;--sdc-split-color: #ffffff;--sdc-split-hover: #3a7ab0;display:inline-flex;min-height:34px}.sdc-split-button--secondary{--sdc-split-bg: #ffffff;--sdc-split-border: #cfd6df;--sdc-split-color: #324154;--sdc-split-hover: #f5f7fa}.sdc-split-button--default{--sdc-split-bg: #eceeef;--sdc-split-border: #d6dadd;--sdc-split-color: #324154;--sdc-split-hover: #e2e6ea}.sdc-split-button--danger{--sdc-split-bg: #dc2626;--sdc-split-border: #dc2626;--sdc-split-color: #ffffff;--sdc-split-hover: #b91c1c}.sdc-split-button--disabled{opacity:.7}.sdc-split-button__primary,.sdc-split-button__toggle{align-items:center;background:var(--sdc-split-bg);border:1px solid var(--sdc-split-border);color:var(--sdc-split-color);cursor:pointer;display:inline-flex;min-height:34px;transition:background-color var(--sdc-transition-fast, .18s ease)}.sdc-split-button__primary{gap:.5rem;border-radius:4px 0 0 4px;padding:0 .875rem}.sdc-split-button__toggle{border-left-width:0;border-radius:0 4px 4px 0;justify-content:center;min-width:2.4rem}.sdc-split-button__primary:focus-visible,.sdc-split-button__toggle:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:2px}.sdc-split-button__primary:hover:not(:disabled),.sdc-split-button__toggle:hover:not(:disabled){background:var(--sdc-split-hover)}.sdc-split-button__menu{background:var(--sdc-split-menu-bg, #ffffff);border:1px solid var(--sdc-border-strong, #d1d5db);border-radius:6px;box-shadow:var(--sdc-shadow-sm, 0 2px 8px rgba(0, 0, 0, .08));display:flex;flex-direction:column;min-width:12rem;overflow:hidden;padding:.25rem}.sdc-split-button__option{align-items:center;background:transparent;border:0;border-radius:4px;color:var(--sdc-text-default, #111827);cursor:pointer;display:inline-flex;gap:.625rem;justify-content:flex-start;min-height:2.25rem;padding:0 .75rem;text-align:left}.sdc-split-button__option:hover:not(:disabled){background:var(--sdc-split-menu-option-hover-bg, #f5f7fa)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: PopoverComponent, selector: "sdc-popover", inputs: ["open", "disabled", "toggleOnTriggerClick", "closeOnOutsideClick", "closeOnScroll", "closeOnEscape", "trapFocus", "focusOnOpen", "restoreFocusOnClose", "ariaLabel", "appendTo", "zIndex", "offset", "placement", "role", "matchTriggerWidth", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "panelClass"], outputs: ["openChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
63
63
  }
64
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SplitButtonComponent, decorators: [{
65
65
  type: Component,
@@ -24,7 +24,11 @@ function createMaskBaseStyle() {
24
24
  'z-index': OVERLAY_Z,
25
25
  background: MASK_BG,
26
26
  transition: MASK_TRANSITION,
27
- cursor: 'default'
27
+ cursor: 'default',
28
+ border: 'none',
29
+ margin: '0',
30
+ padding: '0',
31
+ appearance: 'none'
28
32
  };
29
33
  }
30
34
  function createHiddenMaskStyle() {
@@ -157,11 +161,7 @@ export class SpotlightOverlayComponent {
157
161
  const bottom = Math.min(window.innerHeight, rect.bottom + SPOTLIGHT_PADDING);
158
162
  const left = Math.max(0, rect.left - SPOTLIGHT_PADDING);
159
163
  return {
160
- position: 'fixed',
161
- 'z-index': OVERLAY_Z,
162
- background: MASK_BG,
163
- transition: MASK_TRANSITION,
164
- cursor: 'default',
164
+ ...createMaskBaseStyle(),
165
165
  top: `${top}px`,
166
166
  left: '0',
167
167
  width: `${left}px`,
@@ -177,11 +177,7 @@ export class SpotlightOverlayComponent {
177
177
  const bottom = Math.min(window.innerHeight, rect.bottom + SPOTLIGHT_PADDING);
178
178
  const right = Math.min(window.innerWidth, rect.right + SPOTLIGHT_PADDING);
179
179
  return {
180
- position: 'fixed',
181
- 'z-index': OVERLAY_Z,
182
- background: MASK_BG,
183
- transition: MASK_TRANSITION,
184
- cursor: 'default',
180
+ ...createMaskBaseStyle(),
185
181
  top: `${top}px`,
186
182
  left: `${right}px`,
187
183
  right: '0',
@@ -194,11 +190,7 @@ export class SpotlightOverlayComponent {
194
190
  return createHiddenMaskStyle();
195
191
  }
196
192
  return {
197
- position: 'fixed',
198
- 'z-index': OVERLAY_Z,
199
- background: MASK_BG,
200
- transition: MASK_TRANSITION,
201
- cursor: 'default',
193
+ ...createMaskBaseStyle(),
202
194
  top: `${Math.min(window.innerHeight, rect.bottom + SPOTLIGHT_PADDING)}px`,
203
195
  left: '0',
204
196
  right: '0',
@@ -212,7 +204,12 @@ export class SpotlightOverlayComponent {
212
204
  right: '0',
213
205
  bottom: '0',
214
206
  'z-index': OVERLAY_Z,
215
- cursor: 'default'
207
+ cursor: 'default',
208
+ background: 'transparent',
209
+ border: 'none',
210
+ margin: '0',
211
+ padding: '0',
212
+ appearance: 'none'
216
213
  }));
217
214
  resizeObserver = null;
218
215
  popoverOverlayRef = null;
@@ -518,4 +515,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
518
515
  type: Component,
519
516
  args: [{ selector: 'sdc-spotlight-overlay', standalone: true, imports: [NgStyle], template: "@if (isActive() && currentStep(); as step) {\n@if (step.showBackdrop !== false) {\n<button\n type=\"button\"\n [ngStyle]=\"topMaskStyle()\"\n (click)=\"onDismiss()\"\n></button>\n\n@if (targetRect()) {\n<button\n type=\"button\"\n [ngStyle]=\"leftMaskStyle()\"\n (click)=\"onDismiss()\"\n></button>\n<button\n type=\"button\"\n [ngStyle]=\"rightMaskStyle()\"\n (click)=\"onDismiss()\"\n></button>\n<button\n type=\"button\"\n [ngStyle]=\"bottomMaskStyle()\"\n (click)=\"onDismiss()\"\n></button>\n}\n}\n\n@if (step.showBackdrop === false) {\n@if (step.dismissible === false) {\n<div [ngStyle]=\"transparentBlockerStyle()\"></div>\n} @else {\n<button\n type=\"button\"\n [ngStyle]=\"transparentBlockerStyle()\"\n (click)=\"onDismiss()\"\n></button>\n}\n}\n}\n" }]
520
517
  }], ctorParameters: () => [] });
521
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9zcG90bGlnaHQvY29tcG9uZW50cy9zcG90bGlnaHQtb3ZlcmxheS9zcG90bGlnaHQtb3ZlcmxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Nwb3RsaWdodC9jb21wb25lbnRzL3Nwb3RsaWdodC1vdmVybGF5L3Nwb3RsaWdodC1vdmVybGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsTUFBTSxFQUdOLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQXFCLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBSTdFLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQztB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NEZBQXpCLHlCQUF5QixpRkN4SnRDLHV3QkF1Q0EsNENEOEdZLE9BQU87OzRGQUdOLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQLENBQUMsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRGVzdHJveVJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb2N1c1RyYXAsIEZvY3VzVHJhcEZhY3RvcnkgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgZGlzYWJsZUJvZHlTY3JvbGwsIGVuYWJsZUJvZHlTY3JvbGwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL2JvZHktc2Nyb2xsLnV0aWwnO1xuaW1wb3J0IHR5cGUgeyBTcG90bGlnaHRQb3NpdGlvbiwgU3BvdGxpZ2h0U3RlcCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdHlwZXMvc3BvdGxpZ2h0LnR5cGUnO1xuaW1wb3J0IHsgU3BvdGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc3BvdGxpZ2h0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTcG90bGlnaHRUb3VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nwb3RsaWdodC10b3VyLnNlcnZpY2UnO1xuXG50eXBlIFNwb3RsaWdodERpcmVjdGlvbiA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnO1xuXG5jb25zdCBQT1BPVkVSX1dJRFRIID0gMzQyO1xuY29uc3QgU1BPVExJR0hUX1BBRERJTkcgPSA4O1xuY29uc3QgQVJST1dfSEFMRl9TSVpFID0gODtcbmNvbnN0IEFSUk9XX09GRlNFVF9NSU4gPSA0O1xuY29uc3QgQVJST1dfT0ZGU0VUX01BWCA9IFBPUE9WRVJfV0lEVEggLSA0IC0gMTY7XG5jb25zdCBNQVNLX0JHID0gJ3JnYmEoMCwwLDAsMC41KSc7XG5jb25zdCBNQVNLX1RSQU5TSVRJT04gPSAnYWxsIDAuMnMgZWFzZSc7XG5jb25zdCBPVkVSTEFZX1ogPSAnMTAwMDAnO1xuY29uc3QgUE9QT1ZFUl9aID0gJzEwMDAxJztcblxuZnVuY3Rpb24gY3JlYXRlTWFza0Jhc2VTdHlsZSgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAnei1pbmRleCc6IE9WRVJMQVlfWixcbiAgICBiYWNrZ3JvdW5kOiBNQVNLX0JHLFxuICAgIHRyYW5zaXRpb246IE1BU0tfVFJBTlNJVElPTixcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIaWRkZW5NYXNrU3R5bGUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIHJldHVybiB7XG4gICAgLi4uY3JlYXRlTWFza0Jhc2VTdHlsZSgpLFxuICAgIHRvcDogJzAnLFxuICAgIGxlZnQ6ICcwJyxcbiAgICB3aWR0aDogJzAnLFxuICAgIGhlaWdodDogJzAnXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvQ29ubmVjdGVkUG9zaXRpb25zKHBvc2l0aW9uOiBTcG90bGlnaHRQb3NpdGlvbik6IENvbm5lY3RlZFBvc2l0aW9uW10ge1xuICBjb25zdCBbZGlyZWN0aW9uLCBhbGlnbm1lbnRdID0gcG9zaXRpb24uc3BsaXQoJy0nKTtcbiAgY29uc3QgcGFkZGluZyA9IFNQT1RMSUdIVF9QQURESU5HICsgMjtcbiAgY29uc3QgaG9yaXpvbnRhbEFsaWdubWVudCA9IGFsaWdubWVudCBhcyAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJztcbiAgY29uc3QgdmVydGljYWxBbGlnbm1lbnRNYXA6IFJlY29yZDxzdHJpbmcsICd0b3AnIHwgJ2NlbnRlcicgfCAnYm90dG9tJz4gPSB7XG4gICAgc3RhcnQ6ICd0b3AnLFxuICAgIGNlbnRlcjogJ2NlbnRlcicsXG4gICAgZW5kOiAnYm90dG9tJ1xuICB9O1xuICBjb25zdCB2ZXJ0aWNhbEFsaWdubWVudCA9IHZlcnRpY2FsQWxpZ25tZW50TWFwW2FsaWdubWVudF0gPz8gJ2NlbnRlcic7XG5cbiAgbGV0IHByaW1hcnk6IENvbm5lY3RlZFBvc2l0aW9uO1xuICBsZXQgb3Bwb3NpdGU6IENvbm5lY3RlZFBvc2l0aW9uO1xuXG4gIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIHByaW1hcnkgPSB7XG4gICAgICAgIG9yaWdpblg6IGhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICBvdmVybGF5WDogaG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICBvZmZzZXRZOiAtcGFkZGluZ1xuICAgICAgfTtcbiAgICAgIG9wcG9zaXRlID0ge1xuICAgICAgICBvcmlnaW5YOiBob3Jpem9udGFsQWxpZ25tZW50LFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6IGhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgb2Zmc2V0WTogcGFkZGluZ1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHByaW1hcnkgPSB7XG4gICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICBvcmlnaW5ZOiB2ZXJ0aWNhbEFsaWdubWVudCxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiB2ZXJ0aWNhbEFsaWdubWVudCxcbiAgICAgICAgb2Zmc2V0WDogcGFkZGluZ1xuICAgICAgfTtcbiAgICAgIG9wcG9zaXRlID0ge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiB2ZXJ0aWNhbEFsaWdubWVudCxcbiAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICBvdmVybGF5WTogdmVydGljYWxBbGlnbm1lbnQsXG4gICAgICAgIG9mZnNldFg6IC1wYWRkaW5nXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBwcmltYXJ5ID0ge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiB2ZXJ0aWNhbEFsaWdubWVudCxcbiAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICBvdmVybGF5WTogdmVydGljYWxBbGlnbm1lbnQsXG4gICAgICAgIG9mZnNldFg6IC1wYWRkaW5nXG4gICAgICB9O1xuICAgICAgb3Bwb3NpdGUgPSB7XG4gICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICBvcmlnaW5ZOiB2ZXJ0aWNhbEFsaWdubWVudCxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiB2ZXJ0aWNhbEFsaWdubWVudCxcbiAgICAgICAgb2Zmc2V0WDogcGFkZGluZ1xuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBwcmltYXJ5ID0ge1xuICAgICAgICBvcmlnaW5YOiBob3Jpem9udGFsQWxpZ25tZW50LFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6IGhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgb2Zmc2V0WTogcGFkZGluZ1xuICAgICAgfTtcbiAgICAgIG9wcG9zaXRlID0ge1xuICAgICAgICBvcmlnaW5YOiBob3Jpem9udGFsQWxpZ25tZW50LFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6IGhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJyxcbiAgICAgICAgb2Zmc2V0WTogLXBhZGRpbmdcbiAgICAgIH07XG4gIH1cblxuICByZXR1cm4gW1xuICAgIHByaW1hcnksXG4gICAgb3Bwb3NpdGUsXG4gICAgeyBvcmlnaW5YOiAnY2VudGVyJywgb3JpZ2luWTogJ2JvdHRvbScsIG92ZXJsYXlYOiAnY2VudGVyJywgb3ZlcmxheVk6ICd0b3AnLCBvZmZzZXRZOiBwYWRkaW5nIH0sXG4gICAgeyBvcmlnaW5YOiAnY2VudGVyJywgb3JpZ2luWTogJ3RvcCcsIG92ZXJsYXlYOiAnY2VudGVyJywgb3ZlcmxheVk6ICdib3R0b20nLCBvZmZzZXRZOiAtcGFkZGluZyB9LFxuICAgIHsgb3JpZ2luWDogJ2VuZCcsIG9yaWdpblk6ICdjZW50ZXInLCBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiBwYWRkaW5nIH0sXG4gICAgeyBvcmlnaW5YOiAnc3RhcnQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2NlbnRlcicsIG9mZnNldFg6IC1wYWRkaW5nIH1cbiAgXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLXNwb3RsaWdodC1vdmVybGF5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nU3R5bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vc3BvdGxpZ2h0LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNwb3RsaWdodE92ZXJsYXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG91clNlcnZpY2UgPSBpbmplY3QoU3BvdGxpZ2h0VG91clNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb2N1c1RyYXBGYWN0b3J5ID0gaW5qZWN0KEZvY3VzVHJhcEZhY3RvcnkpO1xuXG4gIHJlYWRvbmx5IGlzQWN0aXZlID0gdGhpcy50b3VyU2VydmljZS5pc0FjdGl2ZTtcbiAgcmVhZG9ubHkgY3VycmVudFN0ZXAgPSB0aGlzLnRvdXJTZXJ2aWNlLmN1cnJlbnRTdGVwO1xuICByZWFkb25seSBjdXJyZW50SW5kZXggPSB0aGlzLnRvdXJTZXJ2aWNlLmN1cnJlbnRJbmRleDtcbiAgcmVhZG9ubHkgdG90YWxTdGVwcyA9IHRoaXMudG91clNlcnZpY2UudG90YWxTdGVwcztcbiAgcmVhZG9ubHkgdGFyZ2V0UmVjdCA9IHNpZ25hbDxET01SZWN0IHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgdG9wTWFza1N0eWxlID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcbiAgICBjb25zdCBiYXNlID0gY3JlYXRlTWFza0Jhc2VTdHlsZSgpO1xuXG4gICAgaWYgKCFyZWN0KSB7XG4gICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6ICcwJywgbGVmdDogJzAnLCByaWdodDogJzAnLCBib3R0b206ICcwJyB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICByaWdodDogJzAnLFxuICAgICAgaGVpZ2h0OiBgJHtNYXRoLm1heCgwLCByZWN0LnRvcCAtIFNQT1RMSUdIVF9QQURESU5HKX1weGBcbiAgICB9O1xuICB9KTtcblxuICByZWFkb25seSBsZWZ0TWFza1N0eWxlID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgIGlmICghcmVjdCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUhpZGRlbk1hc2tTdHlsZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KDAsIHJlY3QudG9wIC0gU1BPVExJR0hUX1BBRERJTkcpO1xuICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgubWluKHdpbmRvdy5pbm5lckhlaWdodCwgcmVjdC5ib3R0b20gKyBTUE9UTElHSFRfUEFERElORyk7XG4gICAgY29uc3QgbGVmdCA9IE1hdGgubWF4KDAsIHJlY3QubGVmdCAtIFNQT1RMSUdIVF9QQURESU5HKTtcblxuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgYmFja2dyb3VuZDogTUFTS19CRyxcbiAgICAgIHRyYW5zaXRpb246IE1BU0tfVFJBTlNJVElPTixcbiAgICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgICAgdG9wOiBgJHt0b3B9cHhgLFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgd2lkdGg6IGAke2xlZnR9cHhgLFxuICAgICAgaGVpZ2h0OiBgJHtib3R0b20gLSB0b3B9cHhgXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcmlnaHRNYXNrU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMudGFyZ2V0UmVjdCgpO1xuXG4gICAgaWYgKCFyZWN0KSB7XG4gICAgICByZXR1cm4gY3JlYXRlSGlkZGVuTWFza1N0eWxlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9wID0gTWF0aC5tYXgoMCwgcmVjdC50b3AgLSBTUE9UTElHSFRfUEFERElORyk7XG4gICAgY29uc3QgYm90dG9tID0gTWF0aC5taW4od2luZG93LmlubmVySGVpZ2h0LCByZWN0LmJvdHRvbSArIFNQT1RMSUdIVF9QQURESU5HKTtcbiAgICBjb25zdCByaWdodCA9IE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoLCByZWN0LnJpZ2h0ICsgU1BPVExJR0hUX1BBRERJTkcpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgJ3otaW5kZXgnOiBPVkVSTEFZX1osXG4gICAgICBiYWNrZ3JvdW5kOiBNQVNLX0JHLFxuICAgICAgdHJhbnNpdGlvbjogTUFTS19UUkFOU0lUSU9OLFxuICAgICAgY3Vyc29yOiAnZGVmYXVsdCcsXG4gICAgICB0b3A6IGAke3RvcH1weGAsXG4gICAgICBsZWZ0OiBgJHtyaWdodH1weGAsXG4gICAgICByaWdodDogJzAnLFxuICAgICAgaGVpZ2h0OiBgJHtib3R0b20gLSB0b3B9cHhgXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYm90dG9tTWFza1N0eWxlID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgIGlmICghcmVjdCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUhpZGRlbk1hc2tTdHlsZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgICAgYmFja2dyb3VuZDogTUFTS19CRyxcbiAgICAgIHRyYW5zaXRpb246IE1BU0tfVFJBTlNJVElPTixcbiAgICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgICAgdG9wOiBgJHtNYXRoLm1pbih3aW5kb3cuaW5uZXJIZWlnaHQsIHJlY3QuYm90dG9tICsgU1BPVExJR0hUX1BBRERJTkcpfXB4YCxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHJpZ2h0OiAnMCcsXG4gICAgICBib3R0b206ICcwJ1xuICAgIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRyYW5zcGFyZW50QmxvY2tlclN0eWxlID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4gKHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICB0b3A6ICcwJyxcbiAgICBsZWZ0OiAnMCcsXG4gICAgcmlnaHQ6ICcwJyxcbiAgICBib3R0b206ICcwJyxcbiAgICAnei1pbmRleCc6IE9WRVJMQVlfWixcbiAgICBjdXJzb3I6ICdkZWZhdWx0J1xuICB9KSk7XG5cbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwb3BvdmVyT3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBvcG92ZXJDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxTcG90bGlnaHRDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcG9wb3ZlclN1YnNjcmlwdGlvbnM6IEFycmF5PHsgdW5zdWJzY3JpYmUoKTogdm9pZCB9PiA9IFtdO1xuICBwcml2YXRlIGZvY3VzVHJhcDogRm9jdXNUcmFwIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcHJldmlvdXNseUZvY3VzZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuY3VycmVudFN0ZXApLFxuICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuaXNBY3RpdmUpLFxuICAgICAgdG9PYnNlcnZhYmxlKHRoaXMudG91clNlcnZpY2UucmVnaXN0cmF0aW9uVmVyc2lvbilcbiAgICBdKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChbc3RlcCwgYWN0aXZlXSkgPT4ge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpO1xuXG4gICAgICAgIGlmICghc3RlcCB8fCAhYWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy50YXJnZXRSZWN0LnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3lQb3BvdmVyT3ZlcmxheSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRvdXJTZXJ2aWNlLmdldEVsZW1lbnQoc3RlcC5zdGVwSWQpO1xuXG4gICAgICAgIGlmIChlbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgICAgICAgIHRoaXMuc3luY1Jlc29sdmVkRWxlbWVudChlbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHN0ZXApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFyZ2V0UmVjdC5zZXQobnVsbCk7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wb3Zlck92ZXJsYXkobnVsbCwgc3RlcCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvVmlld3BvcnRVcGRhdGVzKCk7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvRXNjYXBlS2V5KCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lQb3BvdmVyT3ZlcmxheSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uTmV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLnRvdXJTZXJ2aWNlLm5leHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblByZXZpb3VzKCk6IHZvaWQge1xuICAgIHRoaXMudG91clNlcnZpY2UucHJldmlvdXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRGlzbWlzcygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5jdXJyZW50U3RlcCgpO1xuXG4gICAgaWYgKCFzdGVwIHx8IHN0ZXAuZGlzbWlzc2libGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50b3VyU2VydmljZS5zdG9wKHtcbiAgICAgIHJlYXNvbjogdGhpcy50b3RhbFN0ZXBzKCkgPT09IDEgPyAnZGlzbWlzc2VkJyA6ICdpbnRlcnJ1cHRlZCcsXG4gICAgICBkb05vdFNob3dBZ2FpbjogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9wb3Zlck92ZXJsYXkodGFyZ2V0OiBIVE1MRWxlbWVudCB8IG51bGwsIHN0ZXA6IFNwb3RsaWdodFN0ZXApOiB2b2lkIHtcbiAgICBjb25zdCBzdHJhdGVneSA9IHRhcmdldFxuICAgICAgPyB0aGlzLm92ZXJsYXlcbiAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGFyZ2V0KVxuICAgICAgICAud2l0aFBvc2l0aW9ucyh0b0Nvbm5lY3RlZFBvc2l0aW9ucyhzdGVwLnBvc2l0aW9uID8/ICdib3R0b20tY2VudGVyJykpXG4gICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAud2l0aFB1c2godHJ1ZSlcbiAgICAgICAgLndpdGhWaWV3cG9ydE1hcmdpbig4KVxuICAgICAgOiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCk7XG5cbiAgICBpZiAoIXRoaXMucG9wb3Zlck92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogdGFyZ2V0XG4gICAgICAgICAgPyB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKClcbiAgICAgICAgICA6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICAgIHdpZHRoOiBQT1BPVkVSX1dJRFRIXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXRQb3BvdmVyWkluZGV4KCk7XG4gICAgICB0aGlzLmF0dGFjaFBvcG92ZXJQb3J0YWwoc3RlcCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wb3BvdmVyT3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHN0cmF0ZWd5KTtcbiAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgdGhpcy51cGRhdGVQb3BvdmVySW5wdXRzKHN0ZXApO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5zY2hlZHVsZVN5bmMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNjaGVkdWxlRm9jdXNUcmFwUmVmb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3BvdmVyWkluZGV4KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wb3BvdmVyT3ZlcmxheVJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUuekluZGV4ID0gUE9QT1ZFUl9aO1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLmhvc3RFbGVtZW50O1xuXG4gICAgaWYgKGhvc3QgIT09IHRoaXMucG9wb3Zlck92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQpIHtcbiAgICAgIGhvc3Quc3R5bGUuekluZGV4ID0gUE9QT1ZFUl9aO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoUG9wb3ZlclBvcnRhbChzdGVwOiBTcG90bGlnaHRTdGVwKTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmID0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8uYXR0YWNoKFxuICAgICAgbmV3IENvbXBvbmVudFBvcnRhbChTcG90bGlnaHRDb21wb25lbnQsIG51bGwsIHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcilcbiAgICApID8/IG51bGw7XG4gICAgdGhpcy51cGRhdGVQb3BvdmVySW5wdXRzKHN0ZXApO1xuICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG5cbiAgICBpZiAodGhpcy50b3RhbFN0ZXBzKCkgPiAxKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlVG91ck1vZGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucG9wb3ZlckNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucG9wb3ZlclN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZi5pbnN0YW5jZS5uZXh0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRvTm90U2hvd0FnYWluID0gdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmPy5pbnN0YW5jZS5pc0RvTm90U2hvd0FnYWluQ2hlY2tlZCgpID8/IGZhbHNlO1xuICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLm5leHQoZG9Ob3RTaG93QWdhaW4pO1xuICAgICAgfSksXG4gICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UucHJldmlvdXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudG91clNlcnZpY2UucHJldmlvdXMoKSksXG4gICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UuY2xvc2VkLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLnN0b3Aoe1xuICAgICAgICAgIHJlYXNvbjogdGhpcy50b3RhbFN0ZXBzKCkgPT09IDEgPyAnZGlzbWlzc2VkJyA6ICdpbnRlcnJ1cHRlZCcsXG4gICAgICAgICAgZG9Ob3RTaG93QWdhaW46IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLmluc3RhbmNlLnVuZGVyc3RhbmQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgZG9Ob3RTaG93QWdhaW4gPSB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWY/Lmluc3RhbmNlLmlzRG9Ob3RTaG93QWdhaW5DaGVja2VkKCkgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCh7IHJlYXNvbjogJ2NvbXBsZXRlZCcsIGRvTm90U2hvd0FnYWluIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQb3BvdmVySW5wdXRzKHN0ZXA6IFNwb3RsaWdodFN0ZXAgJiB7IHNob3dEb05vdFNob3dBZ2Fpbj86IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLnNldElucHV0KCd0aXRsZScsIHN0ZXAudGl0bGUpO1xuICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbWVzc2FnZScsIHN0ZXAubWVzc2FnZSk7XG4gICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLnNldElucHV0KCdwb3NpdGlvbicsIHN0ZXAucG9zaXRpb24gPz8gJ2JvdHRvbS1jZW50ZXInKTtcbiAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2N1cnJlbnRTdGVwJywgdGhpcy5jdXJyZW50SW5kZXgoKSArIDEpO1xuICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZi5zZXRJbnB1dCgndG90YWxTdGVwcycsIHRoaXMudG90YWxTdGVwcygpKTtcbiAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2NvbnRlbnQnLCBzdGVwLmNvbnRlbnQgPz8gbnVsbCk7XG4gICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLnNldElucHV0KCdhY3Rpb25zJywgc3RlcC5hY3Rpb25zID8/IFtdKTtcbiAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3Nob3dEb05vdFNob3dBZ2FpbicsIHN0ZXAuc2hvd0RvTm90U2hvd0FnYWluID8/IHRydWUpO1xuICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnYXJyb3dPZmZzZXRQeCcsIG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVN5bmMoKTogdm9pZCB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5zeW5jRGlyZWN0aW9uQW5kQXJyb3coKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVUb3VyTW9kZSgpOiB2b2lkIHtcbiAgICBkaXNhYmxlQm9keVNjcm9sbCgpO1xuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhbmVFbGVtZW50ID0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQ7XG5cbiAgICAgICAgICBpZiAoIXBhbmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5mb2N1c1RyYXAgPSB0aGlzLmZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHBhbmVFbGVtZW50KTtcbiAgICAgICAgICB0aGlzLmZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlRm9jdXNUcmFwUmVmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9jdXNUcmFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5mb2N1c1RyYXA/LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9WaWV3cG9ydFVwZGF0ZXMoKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnc2Nyb2xsJywgeyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH0gYXMgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTYpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5ydW5PdmVybGF5UmVmcmVzaCgpKTtcblxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnLCB7IHBhc3NpdmU6IHRydWUgfSBhcyBBZGRFdmVudExpc3RlbmVyT3B0aW9ucylcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxNiksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJ1bk92ZXJsYXlSZWZyZXNoKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VzY2FwZUtleSgpOiB2b2lkIHtcbiAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMub25EaXNtaXNzKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcnVuT3ZlcmxheVJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hSZWN0KCk7XG4gICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgdGhpcy5zY2hlZHVsZVN5bmMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1Jlc29sdmVkRWxlbWVudCh0YXJnZXQ6IEhUTUxFbGVtZW50LCBzdGVwOiBTcG90bGlnaHRTdGVwKTogdm9pZCB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5hcHBseVJlc29sdmVkRWxlbWVudCh0YXJnZXQsIHN0ZXApKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVJlc29sdmVkRWxlbWVudCh0YXJnZXQ6IEhUTUxFbGVtZW50LCBzdGVwOiBTcG90bGlnaHRTdGVwKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRhcmdldFJlY3QodGFyZ2V0KTtcbiAgICB0aGlzLm9ic2VydmVFbGVtZW50KHRhcmdldCk7XG4gICAgdGhpcy51cGRhdGVQb3BvdmVyT3ZlcmxheSh0YXJnZXQsIHN0ZXApO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jRGlyZWN0aW9uQW5kQXJyb3coKTogdm9pZCB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmO1xuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBvcG92ZXJPdmVybGF5UmVmPy5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCByZWN0ID0gdGhpcy50YXJnZXRSZWN0KCk7XG5cbiAgICBpZiAoIXJlZiB8fCAhcGFuZSB8fCAhcmVjdCkge1xuICAgICAgcmVmPy5zZXRJbnB1dCgnYXJyb3dPZmZzZXRQeCcsIG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuY29tcHV0ZURpcmVjdGlvbihwYW5lLCByZWN0KTtcbiAgICByZWYuc2V0SW5wdXQoJ3Bvc2l0aW9uJywgYCR7ZGlyZWN0aW9ufS1jZW50ZXJgKTtcblxuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuY29tcHV0ZUFycm93T2Zmc2V0KHBhbmUsIHJlY3QsIGRpcmVjdGlvbik7XG4gICAgcmVmLnNldElucHV0KCdhcnJvd09mZnNldFB4JywgTWF0aC5tYXgoQVJST1dfT0ZGU0VUX01JTiwgTWF0aC5taW4oQVJST1dfT0ZGU0VUX01BWCwgb2Zmc2V0KSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRGlyZWN0aW9uKHBhbmU6IERPTVJlY3QsIHJlY3Q6IERPTVJlY3QpOiBTcG90bGlnaHREaXJlY3Rpb24ge1xuICAgIGNvbnN0IHRvbGVyYW5jZSA9IFNQT1RMSUdIVF9QQURESU5HICsgNDtcblxuICAgIGlmIChwYW5lLnRvcCA+PSByZWN0LmJvdHRvbSAtIHRvbGVyYW5jZSkge1xuICAgICAgcmV0dXJuICdib3R0b20nO1xuICAgIH1cbiAgICBpZiAocGFuZS5ib3R0b20gPD0gcmVjdC50b3AgKyB0b2xlcmFuY2UpIHtcbiAgICAgIHJldHVybiAndG9wJztcbiAgICB9XG4gICAgaWYgKHBhbmUubGVmdCA+PSByZWN0LnJpZ2h0IC0gdG9sZXJhbmNlKSB7XG4gICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9XG4gICAgaWYgKHBhbmUucmlnaHQgPD0gcmVjdC5sZWZ0ICsgdG9sZXJhbmNlKSB7XG4gICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXB1dGVEaXJlY3Rpb25CeURpc3RhbmNlKHBhbmUsIHJlY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRGlyZWN0aW9uQnlEaXN0YW5jZShwYW5lOiBET01SZWN0LCByZWN0OiBET01SZWN0KTogU3BvdGxpZ2h0RGlyZWN0aW9uIHtcbiAgICBjb25zdCBwYW5lQ2VudGVyWSA9IHBhbmUudG9wICsgcGFuZS5oZWlnaHQgLyAyO1xuICAgIGNvbnN0IHJlY3RDZW50ZXJZID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7XG4gICAgY29uc3QgcGFuZUNlbnRlclggPSBwYW5lLmxlZnQgKyBwYW5lLndpZHRoIC8gMjtcbiAgICBjb25zdCByZWN0Q2VudGVyWCA9IHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyO1xuXG4gICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnMocGFuZUNlbnRlclkgLSByZWN0Q2VudGVyWSk7XG4gICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnMocGFuZUNlbnRlclggLSByZWN0Q2VudGVyWCk7XG5cbiAgICBjb25zdCBpc1ZlcnRpY2FsUHJlZmVycmVkID0gZGVsdGFZID49IGRlbHRhWDtcbiAgICBjb25zdCBpc0Fib3ZlVGFyZ2V0ID0gcGFuZUNlbnRlclkgPCByZWN0Q2VudGVyWTtcbiAgICBjb25zdCB2ZXJ0aWNhbERpcmVjdGlvbjogU3BvdGxpZ2h0RGlyZWN0aW9uID0gaXNBYm92ZVRhcmdldCA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gICAgY29uc3QgaG9yaXpvbnRhbERpcmVjdGlvbjogU3BvdGxpZ2h0RGlyZWN0aW9uID0gcGFuZUNlbnRlclggPCByZWN0Q2VudGVyWCA/ICdsZWZ0JyA6ICdyaWdodCc7XG5cbiAgICByZXR1cm4gaXNWZXJ0aWNhbFByZWZlcnJlZCA/IHZlcnRpY2FsRGlyZWN0aW9uIDogaG9yaXpvbnRhbERpcmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUFycm93T2Zmc2V0KHBhbmU6IERPTVJlY3QsIHJlY3Q6IERPTVJlY3QsIGRpcmVjdGlvbjogU3BvdGxpZ2h0RGlyZWN0aW9uKTogbnVtYmVyIHtcbiAgICBjb25zdCB0YXJnZXRDZW50ZXJYID0gcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDI7XG4gICAgY29uc3QgdGFyZ2V0Q2VudGVyWSA9IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyO1xuXG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ3RvcCcgfHwgZGlyZWN0aW9uID09PSAnYm90dG9tJ1xuICAgICAgPyB0YXJnZXRDZW50ZXJYIC0gcGFuZS5sZWZ0IC0gQVJST1dfSEFMRl9TSVpFXG4gICAgICA6IHRhcmdldENlbnRlclkgLSBwYW5lLnRvcCAtIEFSUk9XX0hBTEZfU0laRTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveVBvcG92ZXJPdmVybGF5KCk6IHZvaWQge1xuICAgIHRoaXMucG9wb3ZlclN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5wb3BvdmVyU3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5mb2N1c1RyYXApIHtcbiAgICAgIHRoaXMuZm9jdXNUcmFwLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuZm9jdXNUcmFwID0gbnVsbDtcbiAgICB9XG5cbiAgICBlbmFibGVCb2R5U2Nyb2xsKCk7XG5cbiAgICBpZiAodGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9wb3Zlck92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFyZ2V0UmVjdChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMudGFyZ2V0UmVjdC5zZXQoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hSZWN0KCk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmN1cnJlbnRTdGVwKCk7XG5cbiAgICBpZiAoIXN0ZXAgfHwgIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRvdXJTZXJ2aWNlLmdldEVsZW1lbnQoc3RlcC5zdGVwSWQpO1xuICAgIGlmIChlbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnVwZGF0ZVRhcmdldFJlY3QoZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMudXBkYXRlVGFyZ2V0UmVjdChlbGVtZW50KSk7XG4gICAgfSk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICB9XG59XG4iLCJAaWYgKGlzQWN0aXZlKCkgJiYgY3VycmVudFN0ZXAoKTsgYXMgc3RlcCkge1xuQGlmIChzdGVwLnNob3dCYWNrZHJvcCAhPT0gZmFsc2UpIHtcbjxidXR0b25cbiAgdHlwZT1cImJ1dHRvblwiXG4gIFtuZ1N0eWxlXT1cInRvcE1hc2tTdHlsZSgpXCJcbiAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbj48L2J1dHRvbj5cblxuQGlmICh0YXJnZXRSZWN0KCkpIHtcbjxidXR0b25cbiAgdHlwZT1cImJ1dHRvblwiXG4gIFtuZ1N0eWxlXT1cImxlZnRNYXNrU3R5bGUoKVwiXG4gIChjbGljayk9XCJvbkRpc21pc3MoKVwiXG4+PC9idXR0b24+XG48YnV0dG9uXG4gIHR5cGU9XCJidXR0b25cIlxuICBbbmdTdHlsZV09XCJyaWdodE1hc2tTdHlsZSgpXCJcbiAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbj48L2J1dHRvbj5cbjxidXR0b25cbiAgdHlwZT1cImJ1dHRvblwiXG4gIFtuZ1N0eWxlXT1cImJvdHRvbU1hc2tTdHlsZSgpXCJcbiAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbj48L2J1dHRvbj5cbn1cbn1cblxuQGlmIChzdGVwLnNob3dCYWNrZHJvcCA9PT0gZmFsc2UpIHtcbkBpZiAoc3RlcC5kaXNtaXNzaWJsZSA9PT0gZmFsc2UpIHtcbjxkaXYgW25nU3R5bGVdPVwidHJhbnNwYXJlbnRCbG9ja2VyU3R5bGUoKVwiPjwvZGl2PlxufSBAZWxzZSB7XG48YnV0dG9uXG4gIHR5cGU9XCJidXR0b25cIlxuICBbbmdTdHlsZV09XCJ0cmFuc3BhcmVudEJsb2NrZXJTdHlsZSgpXCJcbiAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbj48L2J1dHRvbj5cbn1cbn1cbn1cbiJdfQ==
518
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvdGxpZ2h0LW92ZXJsYXkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9zcG90bGlnaHQvY29tcG9uZW50cy9zcG90bGlnaHQtb3ZlcmxheS9zcG90bGlnaHQtb3ZlcmxheS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3Nwb3RsaWdodC9jb21wb25lbnRzL3Nwb3RsaWdodC1vdmVybGF5L3Nwb3RsaWdodC1vdmVybGF5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsTUFBTSxFQUdOLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQXFCLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBSTdFLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQztB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U0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQLENBQUMsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRGVzdHJveVJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb2N1c1RyYXAsIEZvY3VzVHJhcEZhY3RvcnkgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgZGlzYWJsZUJvZHlTY3JvbGwsIGVuYWJsZUJvZHlTY3JvbGwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3V0aWxzL2JvZHktc2Nyb2xsLnV0aWwnO1xuaW1wb3J0IHR5cGUgeyBTcG90bGlnaHRQb3NpdGlvbiwgU3BvdGxpZ2h0U3RlcCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdHlwZXMvc3BvdGxpZ2h0LnR5cGUnO1xuaW1wb3J0IHsgU3BvdGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc3BvdGxpZ2h0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTcG90bGlnaHRUb3VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nwb3RsaWdodC10b3VyLnNlcnZpY2UnO1xuXG50eXBlIFNwb3RsaWdodERpcmVjdGlvbiA9ICd0b3AnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAncmlnaHQnO1xuXG5jb25zdCBQT1BPVkVSX1dJRFRIID0gMzQyO1xuY29uc3QgU1BPVExJR0hUX1BBRERJTkcgPSA4O1xuY29uc3QgQVJST1dfSEFMRl9TSVpFID0gODtcbmNvbnN0IEFSUk9XX09GRlNFVF9NSU4gPSA0O1xuY29uc3QgQVJST1dfT0ZGU0VUX01BWCA9IFBPUE9WRVJfV0lEVEggLSA0IC0gMTY7XG5jb25zdCBNQVNLX0JHID0gJ3JnYmEoMCwwLDAsMC41KSc7XG5jb25zdCBNQVNLX1RSQU5TSVRJT04gPSAnYWxsIDAuMnMgZWFzZSc7XG5jb25zdCBPVkVSTEFZX1ogPSAnMTAwMDAnO1xuY29uc3QgUE9QT1ZFUl9aID0gJzEwMDAxJztcblxuZnVuY3Rpb24gY3JlYXRlTWFza0Jhc2VTdHlsZSgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAnei1pbmRleCc6IE9WRVJMQVlfWixcbiAgICBiYWNrZ3JvdW5kOiBNQVNLX0JHLFxuICAgIHRyYW5zaXRpb246IE1BU0tfVFJBTlNJVElPTixcbiAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBtYXJnaW46ICcwJyxcbiAgICBwYWRkaW5nOiAnMCcsXG4gICAgYXBwZWFyYW5jZTogJ25vbmUnXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpZGRlbk1hc2tTdHlsZSgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jcmVhdGVNYXNrQmFzZVN0eWxlKCksXG4gICAgdG9wOiAnMCcsXG4gICAgbGVmdDogJzAnLFxuICAgIHdpZHRoOiAnMCcsXG4gICAgaGVpZ2h0OiAnMCdcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9Db25uZWN0ZWRQb3NpdGlvbnMocG9zaXRpb246IFNwb3RsaWdodFBvc2l0aW9uKTogQ29ubmVjdGVkUG9zaXRpb25bXSB7XG4gIGNvbnN0IFtkaXJlY3Rpb24sIGFsaWdubWVudF0gPSBwb3NpdGlvbi5zcGxpdCgnLScpO1xuICBjb25zdCBwYWRkaW5nID0gU1BPVExJR0hUX1BBRERJTkcgKyAyO1xuICBjb25zdCBob3Jpem9udGFsQWxpZ25tZW50ID0gYWxpZ25tZW50IGFzICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnO1xuICBjb25zdCB2ZXJ0aWNhbEFsaWdubWVudE1hcDogUmVjb3JkPHN0cmluZywgJ3RvcCcgfCAnY2VudGVyJyB8ICdib3R0b20nPiA9IHtcbiAgICBzdGFydDogJ3RvcCcsXG4gICAgY2VudGVyOiAnY2VudGVyJyxcbiAgICBlbmQ6ICdib3R0b20nXG4gIH07XG4gIGNvbnN0IHZlcnRpY2FsQWxpZ25tZW50ID0gdmVydGljYWxBbGlnbm1lbnRNYXBbYWxpZ25tZW50XSA/PyAnY2VudGVyJztcblxuICBsZXQgcHJpbWFyeTogQ29ubmVjdGVkUG9zaXRpb247XG4gIGxldCBvcHBvc2l0ZTogQ29ubmVjdGVkUG9zaXRpb247XG5cbiAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgcHJpbWFyeSA9IHtcbiAgICAgICAgb3JpZ2luWDogaG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgIG92ZXJsYXlYOiBob3Jpem9udGFsQWxpZ25tZW50LFxuICAgICAgICBvdmVybGF5WTogJ2JvdHRvbScsXG4gICAgICAgIG9mZnNldFk6IC1wYWRkaW5nXG4gICAgICB9O1xuICAgICAgb3Bwb3NpdGUgPSB7XG4gICAgICAgIG9yaWdpblg6IGhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICBvdmVybGF5WDogaG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICBvZmZzZXRZOiBwYWRkaW5nXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcHJpbWFyeSA9IHtcbiAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgIG9yaWdpblk6IHZlcnRpY2FsQWxpZ25tZW50LFxuICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgb3ZlcmxheVk6IHZlcnRpY2FsQWxpZ25tZW50LFxuICAgICAgICBvZmZzZXRYOiBwYWRkaW5nXG4gICAgICB9O1xuICAgICAgb3Bwb3NpdGUgPSB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6IHZlcnRpY2FsQWxpZ25tZW50LFxuICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgIG92ZXJsYXlZOiB2ZXJ0aWNhbEFsaWdubWVudCxcbiAgICAgICAgb2Zmc2V0WDogLXBhZGRpbmdcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHByaW1hcnkgPSB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6IHZlcnRpY2FsQWxpZ25tZW50LFxuICAgICAgICBvdmVybGF5WDogJ2VuZCcsXG4gICAgICAgIG92ZXJsYXlZOiB2ZXJ0aWNhbEFsaWdubWVudCxcbiAgICAgICAgb2Zmc2V0WDogLXBhZGRpbmdcbiAgICAgIH07XG4gICAgICBvcHBvc2l0ZSA9IHtcbiAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgIG9yaWdpblk6IHZlcnRpY2FsQWxpZ25tZW50LFxuICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgb3ZlcmxheVk6IHZlcnRpY2FsQWxpZ25tZW50LFxuICAgICAgICBvZmZzZXRYOiBwYWRkaW5nXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHByaW1hcnkgPSB7XG4gICAgICAgIG9yaWdpblg6IGhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICBvdmVybGF5WDogaG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxuICAgICAgICBvZmZzZXRZOiBwYWRkaW5nXG4gICAgICB9O1xuICAgICAgb3Bwb3NpdGUgPSB7XG4gICAgICAgIG9yaWdpblg6IGhvcml6b250YWxBbGlnbm1lbnQsXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICBvdmVybGF5WDogaG9yaXpvbnRhbEFsaWdubWVudCxcbiAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICBvZmZzZXRZOiAtcGFkZGluZ1xuICAgICAgfTtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgcHJpbWFyeSxcbiAgICBvcHBvc2l0ZSxcbiAgICB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAnYm90dG9tJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ3RvcCcsIG9mZnNldFk6IHBhZGRpbmcgfSxcbiAgICB7IG9yaWdpblg6ICdjZW50ZXInLCBvcmlnaW5ZOiAndG9wJywgb3ZlcmxheVg6ICdjZW50ZXInLCBvdmVybGF5WTogJ2JvdHRvbScsIG9mZnNldFk6IC1wYWRkaW5nIH0sXG4gICAgeyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2NlbnRlcicsIG9mZnNldFg6IHBhZGRpbmcgfSxcbiAgICB7IG9yaWdpblg6ICdzdGFydCcsIG9yaWdpblk6ICdjZW50ZXInLCBvdmVybGF5WDogJ2VuZCcsIG92ZXJsYXlZOiAnY2VudGVyJywgb2Zmc2V0WDogLXBhZGRpbmcgfVxuICBdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtc3BvdGxpZ2h0LW92ZXJsYXknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdTdHlsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zcG90bGlnaHQtb3ZlcmxheS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU3BvdGxpZ2h0T3ZlcmxheUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0b3VyU2VydmljZSA9IGluamVjdChTcG90bGlnaHRUb3VyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbnZpcm9ubWVudEluamVjdG9yID0gaW5qZWN0KEVudmlyb25tZW50SW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvY3VzVHJhcEZhY3RvcnkgPSBpbmplY3QoRm9jdXNUcmFwRmFjdG9yeSk7XG5cbiAgcmVhZG9ubHkgaXNBY3RpdmUgPSB0aGlzLnRvdXJTZXJ2aWNlLmlzQWN0aXZlO1xuICByZWFkb25seSBjdXJyZW50U3RlcCA9IHRoaXMudG91clNlcnZpY2UuY3VycmVudFN0ZXA7XG4gIHJlYWRvbmx5IGN1cnJlbnRJbmRleCA9IHRoaXMudG91clNlcnZpY2UuY3VycmVudEluZGV4O1xuICByZWFkb25seSB0b3RhbFN0ZXBzID0gdGhpcy50b3VyU2VydmljZS50b3RhbFN0ZXBzO1xuICByZWFkb25seSB0YXJnZXRSZWN0ID0gc2lnbmFsPERPTVJlY3QgfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSB0b3BNYXNrU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMudGFyZ2V0UmVjdCgpO1xuICAgIGNvbnN0IGJhc2UgPSBjcmVhdGVNYXNrQmFzZVN0eWxlKCk7XG5cbiAgICBpZiAoIXJlY3QpIHtcbiAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogJzAnLCBsZWZ0OiAnMCcsIHJpZ2h0OiAnMCcsIGJvdHRvbTogJzAnIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHJpZ2h0OiAnMCcsXG4gICAgICBoZWlnaHQ6IGAke01hdGgubWF4KDAsIHJlY3QudG9wIC0gU1BPVExJR0hUX1BBRERJTkcpfXB4YFxuICAgIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGxlZnRNYXNrU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IHRoaXMudGFyZ2V0UmVjdCgpO1xuXG4gICAgaWYgKCFyZWN0KSB7XG4gICAgICByZXR1cm4gY3JlYXRlSGlkZGVuTWFza1N0eWxlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdG9wID0gTWF0aC5tYXgoMCwgcmVjdC50b3AgLSBTUE9UTElHSFRfUEFERElORyk7XG4gICAgY29uc3QgYm90dG9tID0gTWF0aC5taW4od2luZG93LmlubmVySGVpZ2h0LCByZWN0LmJvdHRvbSArIFNQT1RMSUdIVF9QQURESU5HKTtcbiAgICBjb25zdCBsZWZ0ID0gTWF0aC5tYXgoMCwgcmVjdC5sZWZ0IC0gU1BPVExJR0hUX1BBRERJTkcpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNyZWF0ZU1hc2tCYXNlU3R5bGUoKSxcbiAgICAgIHRvcDogYCR7dG9wfXB4YCxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHdpZHRoOiBgJHtsZWZ0fXB4YCxcbiAgICAgIGhlaWdodDogYCR7Ym90dG9tIC0gdG9wfXB4YFxuICAgIH07XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJpZ2h0TWFza1N0eWxlID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgIGlmICghcmVjdCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUhpZGRlbk1hc2tTdHlsZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRvcCA9IE1hdGgubWF4KDAsIHJlY3QudG9wIC0gU1BPVExJR0hUX1BBRERJTkcpO1xuICAgIGNvbnN0IGJvdHRvbSA9IE1hdGgubWluKHdpbmRvdy5pbm5lckhlaWdodCwgcmVjdC5ib3R0b20gKyBTUE9UTElHSFRfUEFERElORyk7XG4gICAgY29uc3QgcmlnaHQgPSBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCwgcmVjdC5yaWdodCArIFNQT1RMSUdIVF9QQURESU5HKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jcmVhdGVNYXNrQmFzZVN0eWxlKCksXG4gICAgICB0b3A6IGAke3RvcH1weGAsXG4gICAgICBsZWZ0OiBgJHtyaWdodH1weGAsXG4gICAgICByaWdodDogJzAnLFxuICAgICAgaGVpZ2h0OiBgJHtib3R0b20gLSB0b3B9cHhgXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYm90dG9tTWFza1N0eWxlID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKCkgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLnRhcmdldFJlY3QoKTtcblxuICAgIGlmICghcmVjdCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUhpZGRlbk1hc2tTdHlsZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jcmVhdGVNYXNrQmFzZVN0eWxlKCksXG4gICAgICB0b3A6IGAke01hdGgubWluKHdpbmRvdy5pbm5lckhlaWdodCwgcmVjdC5ib3R0b20gKyBTUE9UTElHSFRfUEFERElORyl9cHhgLFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgIGJvdHRvbTogJzAnXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdHJhbnNwYXJlbnRCbG9ja2VyU3R5bGUgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PigoKSA9PiAoe1xuICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgIHRvcDogJzAnLFxuICAgIGxlZnQ6ICcwJyxcbiAgICByaWdodDogJzAnLFxuICAgIGJvdHRvbTogJzAnLFxuICAgICd6LWluZGV4JzogT1ZFUkxBWV9aLFxuICAgIGN1cnNvcjogJ2RlZmF1bHQnLFxuICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgbWFyZ2luOiAnMCcsXG4gICAgcGFkZGluZzogJzAnLFxuICAgIGFwcGVhcmFuY2U6ICdub25lJ1xuICB9KSk7XG5cbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwb3BvdmVyT3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBvcG92ZXJDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxTcG90bGlnaHRDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcG9wb3ZlclN1YnNjcmlwdGlvbnM6IEFycmF5PHsgdW5zdWJzY3JpYmUoKTogdm9pZCB9PiA9IFtdO1xuICBwcml2YXRlIGZvY3VzVHJhcDogRm9jdXNUcmFwIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcHJldmlvdXNseUZvY3VzZWRFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuY3VycmVudFN0ZXApLFxuICAgICAgdG9PYnNlcnZhYmxlKHRoaXMuaXNBY3RpdmUpLFxuICAgICAgdG9PYnNlcnZhYmxlKHRoaXMudG91clNlcnZpY2UucmVnaXN0cmF0aW9uVmVyc2lvbilcbiAgICBdKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChbc3RlcCwgYWN0aXZlXSkgPT4ge1xuICAgICAgICB0aGlzLmRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpO1xuXG4gICAgICAgIGlmICghc3RlcCB8fCAhYWN0aXZlKSB7XG4gICAgICAgICAgdGhpcy50YXJnZXRSZWN0LnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3lQb3BvdmVyT3ZlcmxheSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRvdXJTZXJ2aWNlLmdldEVsZW1lbnQoc3RlcC5zdGVwSWQpO1xuXG4gICAgICAgIGlmIChlbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JyB9KTtcblxuICAgICAgICAgIHRoaXMuc3luY1Jlc29sdmVkRWxlbWVudChlbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHN0ZXApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFyZ2V0UmVjdC5zZXQobnVsbCk7XG4gICAgICAgIHRoaXMudXBkYXRlUG9wb3Zlck92ZXJsYXkobnVsbCwgc3RlcCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvVmlld3BvcnRVcGRhdGVzKCk7XG4gICAgICB0aGlzLnN1YnNjcmliZVRvRXNjYXBlS2V5KCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lQb3BvdmVyT3ZlcmxheSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uTmV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLnRvdXJTZXJ2aWNlLm5leHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblByZXZpb3VzKCk6IHZvaWQge1xuICAgIHRoaXMudG91clNlcnZpY2UucHJldmlvdXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRGlzbWlzcygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwID0gdGhpcy5jdXJyZW50U3RlcCgpO1xuXG4gICAgaWYgKCFzdGVwIHx8IHN0ZXAuZGlzbWlzc2libGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50b3VyU2VydmljZS5zdG9wKHtcbiAgICAgIHJlYXNvbjogdGhpcy50b3RhbFN0ZXBzKCkgPT09IDEgPyAnZGlzbWlzc2VkJyA6ICdpbnRlcnJ1cHRlZCcsXG4gICAgICBkb05vdFNob3dBZ2FpbjogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUG9wb3Zlck92ZXJsYXkodGFyZ2V0OiBIVE1MRWxlbWVudCB8IG51bGwsIHN0ZXA6IFNwb3RsaWdodFN0ZXApOiB2b2lkIHtcbiAgICBjb25zdCBzdHJhdGVneSA9IHRhcmdldFxuICAgICAgPyB0aGlzLm92ZXJsYXlcbiAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGFyZ2V0KVxuICAgICAgICAud2l0aFBvc2l0aW9ucyh0b0Nvbm5lY3RlZFBvc2l0aW9ucyhzdGVwLnBvc2l0aW9uID8/ICdib3R0b20tY2VudGVyJykpXG4gICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAud2l0aFB1c2godHJ1ZSlcbiAgICAgICAgLndpdGhWaWV3cG9ydE1hcmdpbig4KVxuICAgICAgOiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKS5jZW50ZXJIb3Jpem9udGFsbHkoKS5jZW50ZXJWZXJ0aWNhbGx5KCk7XG5cbiAgICBpZiAoIXRoaXMucG9wb3Zlck92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcbiAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICBzY3JvbGxTdHJhdGVneTogdGFyZ2V0XG4gICAgICAgICAgPyB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKClcbiAgICAgICAgICA6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLm5vb3AoKSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogc3RyYXRlZ3ksXG4gICAgICAgIHdpZHRoOiBQT1BPVkVSX1dJRFRIXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXRQb3BvdmVyWkluZGV4KCk7XG4gICAgICB0aGlzLmF0dGFjaFBvcG92ZXJQb3J0YWwoc3RlcCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wb3BvdmVyT3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHN0cmF0ZWd5KTtcbiAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgdGhpcy51cGRhdGVQb3BvdmVySW5wdXRzKHN0ZXApO1xuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5zY2hlZHVsZVN5bmMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNjaGVkdWxlRm9jdXNUcmFwUmVmb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3BvdmVyWkluZGV4KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wb3BvdmVyT3ZlcmxheVJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUuekluZGV4ID0gUE9QT1ZFUl9aO1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLmhvc3RFbGVtZW50O1xuXG4gICAgaWYgKGhvc3QgIT09IHRoaXMucG9wb3Zlck92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQpIHtcbiAgICAgIGhvc3Quc3R5bGUuekluZGV4ID0gUE9QT1ZFUl9aO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoUG9wb3ZlclBvcnRhbChzdGVwOiBTcG90bGlnaHRTdGVwKTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmID0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8uYXR0YWNoKFxuICAgICAgbmV3IENvbXBvbmVudFBvcnRhbChTcG90bGlnaHRDb21wb25lbnQsIG51bGwsIHRoaXMuZW52aXJvbm1lbnRJbmplY3RvcilcbiAgICApID8/IG51bGw7XG4gICAgdGhpcy51cGRhdGVQb3BvdmVySW5wdXRzKHN0ZXApO1xuICAgIHRoaXMuc2NoZWR1bGVTeW5jKCk7XG5cbiAgICBpZiAodGhpcy50b3RhbFN0ZXBzKCkgPiAxKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlVG91ck1vZGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucG9wb3ZlckNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucG9wb3ZlclN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZi5pbnN0YW5jZS5uZXh0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRvTm90U2hvd0FnYWluID0gdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmPy5pbnN0YW5jZS5pc0RvTm90U2hvd0FnYWluQ2hlY2tlZCgpID8/IGZhbHNlO1xuICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLm5leHQoZG9Ob3RTaG93QWdhaW4pO1xuICAgICAgfSksXG4gICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UucHJldmlvdXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudG91clNlcnZpY2UucHJldmlvdXMoKSksXG4gICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuaW5zdGFuY2UuY2xvc2VkLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICB0aGlzLnRvdXJTZXJ2aWNlLnN0b3Aoe1xuICAgICAgICAgIHJlYXNvbjogdGhpcy50b3RhbFN0ZXBzKCkgPT09IDEgPyAnZGlzbWlzc2VkJyA6ICdpbnRlcnJ1cHRlZCcsXG4gICAgICAgICAgZG9Ob3RTaG93QWdhaW46IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLmluc3RhbmNlLnVuZGVyc3RhbmQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgZG9Ob3RTaG93QWdhaW4gPSB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWY/Lmluc3RhbmNlLmlzRG9Ob3RTaG93QWdhaW5DaGVja2VkKCkgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMudG91clNlcnZpY2Uuc3RvcCh7IHJlYXNvbjogJ2NvbXBsZXRlZCcsIGRvTm90U2hvd0FnYWluIH0pO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQb3BvdmVySW5wdXRzKHN0ZXA6IFNwb3RsaWdodFN0ZXAgJiB7IHNob3dEb05vdFNob3dBZ2Fpbj86IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLnNldElucHV0KCd0aXRsZScsIHN0ZXAudGl0bGUpO1xuICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnbWVzc2FnZScsIHN0ZXAubWVzc2FnZSk7XG4gICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLnNldElucHV0KCdwb3NpdGlvbicsIHN0ZXAucG9zaXRpb24gPz8gJ2JvdHRvbS1jZW50ZXInKTtcbiAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2N1cnJlbnRTdGVwJywgdGhpcy5jdXJyZW50SW5kZXgoKSArIDEpO1xuICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZi5zZXRJbnB1dCgndG90YWxTdGVwcycsIHRoaXMudG90YWxTdGVwcygpKTtcbiAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2NvbnRlbnQnLCBzdGVwLmNvbnRlbnQgPz8gbnVsbCk7XG4gICAgdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmLnNldElucHV0KCdhY3Rpb25zJywgc3RlcC5hY3Rpb25zID8/IFtdKTtcbiAgICB0aGlzLnBvcG92ZXJDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3Nob3dEb05vdFNob3dBZ2FpbicsIHN0ZXAuc2hvd0RvTm90U2hvd0FnYWluID8/IHRydWUpO1xuICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnYXJyb3dPZmZzZXRQeCcsIG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZVN5bmMoKTogdm9pZCB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5zeW5jRGlyZWN0aW9uQW5kQXJyb3coKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWN0aXZhdGVUb3VyTW9kZSgpOiB2b2lkIHtcbiAgICBkaXNhYmxlQm9keVNjcm9sbCgpO1xuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhbmVFbGVtZW50ID0gdGhpcy5wb3BvdmVyT3ZlcmxheVJlZj8ub3ZlcmxheUVsZW1lbnQ7XG5cbiAgICAgICAgICBpZiAoIXBhbmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5mb2N1c1RyYXAgPSB0aGlzLmZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHBhbmVFbGVtZW50KTtcbiAgICAgICAgICB0aGlzLmZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlRm9jdXNUcmFwUmVmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9jdXNUcmFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5mb2N1c1RyYXA/LmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9WaWV3cG9ydFVwZGF0ZXMoKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KGRvY3VtZW50LCAnc2Nyb2xsJywgeyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH0gYXMgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTYpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5ydW5PdmVybGF5UmVmcmVzaCgpKTtcblxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnLCB7IHBhc3NpdmU6IHRydWUgfSBhcyBBZGRFdmVudExpc3RlbmVyT3B0aW9ucylcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxNiksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJ1bk92ZXJsYXlSZWZyZXNoKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0VzY2FwZUtleSgpOiB2b2lkIHtcbiAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMub25EaXNtaXNzKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcnVuT3ZlcmxheVJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hSZWN0KCk7XG4gICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgdGhpcy5zY2hlZHVsZVN5bmMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY1Jlc29sdmVkRWxlbWVudCh0YXJnZXQ6IEhUTUxFbGVtZW50LCBzdGVwOiBTcG90bGlnaHRTdGVwKTogdm9pZCB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5hcHBseVJlc29sdmVkRWxlbWVudCh0YXJnZXQsIHN0ZXApKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVJlc29sdmVkRWxlbWVudCh0YXJnZXQ6IEhUTUxFbGVtZW50LCBzdGVwOiBTcG90bGlnaHRTdGVwKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRhcmdldFJlY3QodGFyZ2V0KTtcbiAgICB0aGlzLm9ic2VydmVFbGVtZW50KHRhcmdldCk7XG4gICAgdGhpcy51cGRhdGVQb3BvdmVyT3ZlcmxheSh0YXJnZXQsIHN0ZXApO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jRGlyZWN0aW9uQW5kQXJyb3coKTogdm9pZCB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5wb3BvdmVyQ29tcG9uZW50UmVmO1xuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBvcG92ZXJPdmVybGF5UmVmPy5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCByZWN0ID0gdGhpcy50YXJnZXRSZWN0KCk7XG5cbiAgICBpZiAoIXJlZiB8fCAhcGFuZSB8fCAhcmVjdCkge1xuICAgICAgcmVmPy5zZXRJbnB1dCgnYXJyb3dPZmZzZXRQeCcsIG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuY29tcHV0ZURpcmVjdGlvbihwYW5lLCByZWN0KTtcbiAgICByZWYuc2V0SW5wdXQoJ3Bvc2l0aW9uJywgYCR7ZGlyZWN0aW9ufS1jZW50ZXJgKTtcblxuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuY29tcHV0ZUFycm93T2Zmc2V0KHBhbmUsIHJlY3QsIGRpcmVjdGlvbik7XG4gICAgcmVmLnNldElucHV0KCdhcnJvd09mZnNldFB4JywgTWF0aC5tYXgoQVJST1dfT0ZGU0VUX01JTiwgTWF0aC5taW4oQVJST1dfT0ZGU0VUX01BWCwgb2Zmc2V0KSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRGlyZWN0aW9uKHBhbmU6IERPTVJlY3QsIHJlY3Q6IERPTVJlY3QpOiBTcG90bGlnaHREaXJlY3Rpb24ge1xuICAgIGNvbnN0IHRvbGVyYW5jZSA9IFNQT1RMSUdIVF9QQURESU5HICsgNDtcblxuICAgIGlmIChwYW5lLnRvcCA+PSByZWN0LmJvdHRvbSAtIHRvbGVyYW5jZSkge1xuICAgICAgcmV0dXJuICdib3R0b20nO1xuICAgIH1cbiAgICBpZiAocGFuZS5ib3R0b20gPD0gcmVjdC50b3AgKyB0b2xlcmFuY2UpIHtcbiAgICAgIHJldHVybiAndG9wJztcbiAgICB9XG4gICAgaWYgKHBhbmUubGVmdCA+PSByZWN0LnJpZ2h0IC0gdG9sZXJhbmNlKSB7XG4gICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9XG4gICAgaWYgKHBhbmUucmlnaHQgPD0gcmVjdC5sZWZ0ICsgdG9sZXJhbmNlKSB7XG4gICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXB1dGVEaXJlY3Rpb25CeURpc3RhbmNlKHBhbmUsIHJlY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRGlyZWN0aW9uQnlEaXN0YW5jZShwYW5lOiBET01SZWN0LCByZWN0OiBET01SZWN0KTogU3BvdGxpZ2h0RGlyZWN0aW9uIHtcbiAgICBjb25zdCBwYW5lQ2VudGVyWSA9IHBhbmUudG9wICsgcGFuZS5oZWlnaHQgLyAyO1xuICAgIGNvbnN0IHJlY3RDZW50ZXJZID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7XG4gICAgY29uc3QgcGFuZUNlbnRlclggPSBwYW5lLmxlZnQgKyBwYW5lLndpZHRoIC8gMjtcbiAgICBjb25zdCByZWN0Q2VudGVyWCA9IHJlY3QubGVmdCArIHJlY3Qud2lkdGggLyAyO1xuXG4gICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnMocGFuZUNlbnRlclkgLSByZWN0Q2VudGVyWSk7XG4gICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnMocGFuZUNlbnRlclggLSByZWN0Q2VudGVyWCk7XG5cbiAgICBjb25zdCBpc1ZlcnRpY2FsUHJlZmVycmVkID0gZGVsdGFZID49IGRlbHRhWDtcbiAgICBjb25zdCBpc0Fib3ZlVGFyZ2V0ID0gcGFuZUNlbnRlclkgPCByZWN0Q2VudGVyWTtcbiAgICBjb25zdCB2ZXJ0aWNhbERpcmVjdGlvbjogU3BvdGxpZ2h0RGlyZWN0aW9uID0gaXNBYm92ZVRhcmdldCA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gICAgY29uc3QgaG9yaXpvbnRhbERpcmVjdGlvbjogU3BvdGxpZ2h0RGlyZWN0aW9uID0gcGFuZUNlbnRlclggPCByZWN0Q2VudGVyWCA/ICdsZWZ0JyA6ICdyaWdodCc7XG5cbiAgICByZXR1cm4gaXNWZXJ0aWNhbFByZWZlcnJlZCA/IHZlcnRpY2FsRGlyZWN0aW9uIDogaG9yaXpvbnRhbERpcmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUFycm93T2Zmc2V0KHBhbmU6IERPTVJlY3QsIHJlY3Q6IERPTVJlY3QsIGRpcmVjdGlvbjogU3BvdGxpZ2h0RGlyZWN0aW9uKTogbnVtYmVyIHtcbiAgICBjb25zdCB0YXJnZXRDZW50ZXJYID0gcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDI7XG4gICAgY29uc3QgdGFyZ2V0Q2VudGVyWSA9IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyO1xuXG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ3RvcCcgfHwgZGlyZWN0aW9uID09PSAnYm90dG9tJ1xuICAgICAgPyB0YXJnZXRDZW50ZXJYIC0gcGFuZS5sZWZ0IC0gQVJST1dfSEFMRl9TSVpFXG4gICAgICA6IHRhcmdldENlbnRlclkgLSBwYW5lLnRvcCAtIEFSUk9XX0hBTEZfU0laRTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveVBvcG92ZXJPdmVybGF5KCk6IHZvaWQge1xuICAgIHRoaXMucG9wb3ZlclN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5wb3BvdmVyU3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudFJlZiA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5mb2N1c1RyYXApIHtcbiAgICAgIHRoaXMuZm9jdXNUcmFwLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuZm9jdXNUcmFwID0gbnVsbDtcbiAgICB9XG5cbiAgICBlbmFibGVCb2R5U2Nyb2xsKCk7XG5cbiAgICBpZiAodGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9wb3Zlck92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICB0aGlzLnBvcG92ZXJPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMucG9wb3Zlck92ZXJsYXlSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFyZ2V0UmVjdChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMudGFyZ2V0UmVjdC5zZXQoZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hSZWN0KCk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLmN1cnJlbnRTdGVwKCk7XG5cbiAgICBpZiAoIXN0ZXAgfHwgIXRoaXMuaXNBY3RpdmUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRvdXJTZXJ2aWNlLmdldEVsZW1lbnQoc3RlcC5zdGVwSWQpO1xuICAgIGlmIChlbGVtZW50Py5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLnVwZGF0ZVRhcmdldFJlY3QoZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9ic2VydmVFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMudXBkYXRlVGFyZ2V0UmVjdChlbGVtZW50KSk7XG4gICAgfSk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBudWxsO1xuICB9XG59XG4iLCJAaWYgKGlzQWN0aXZlKCkgJiYgY3VycmVudFN0ZXAoKTsgYXMgc3RlcCkge1xuQGlmIChzdGVwLnNob3dCYWNrZHJvcCAhPT0gZmFsc2UpIHtcbjxidXR0b25cbiAgdHlwZT1cImJ1dHRvblwiXG4gIFtuZ1N0eWxlXT1cInRvcE1hc2tTdHlsZSgpXCJcbiAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbj48L2J1dHRvbj5cblxuQGlmICh0YXJnZXRSZWN0KCkpIHtcbjxidXR0b25cbiAgdHlwZT1cImJ1dHRvblwiXG4gIFtuZ1N0eWxlXT1cImxlZnRNYXNrU3R5bGUoKVwiXG4gIChjbGljayk9XCJvbkRpc21pc3MoKVwiXG4+PC9idXR0b24+XG48YnV0dG9uXG4gIHR5cGU9XCJidXR0b25cIlxuICBbbmdTdHlsZV09XCJyaWdodE1hc2tTdHlsZSgpXCJcbiAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbj48L2J1dHRvbj5cbjxidXR0b25cbiAgdHlwZT1cImJ1dHRvblwiXG4gIFtuZ1N0eWxlXT1cImJvdHRvbU1hc2tTdHlsZSgpXCJcbiAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbj48L2J1dHRvbj5cbn1cbn1cblxuQGlmIChzdGVwLnNob3dCYWNrZHJvcCA9PT0gZmFsc2UpIHtcbkBpZiAoc3RlcC5kaXNtaXNzaWJsZSA9PT0gZmFsc2UpIHtcbjxkaXYgW25nU3R5bGVdPVwidHJhbnNwYXJlbnRCbG9ja2VyU3R5bGUoKVwiPjwvZGl2PlxufSBAZWxzZSB7XG48YnV0dG9uXG4gIHR5cGU9XCJidXR0b25cIlxuICBbbmdTdHlsZV09XCJ0cmFuc3BhcmVudEJsb2NrZXJTdHlsZSgpXCJcbiAgKGNsaWNrKT1cIm9uRGlzbWlzcygpXCJcbj48L2J1dHRvbj5cbn1cbn1cbn1cbiJdfQ==