@seniorsistemas/angular-components 19.9.7-develop-ad878012 → 19.9.8-develop-dbc2f1b4

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 (162) hide show
  1. package/card/lib/card/card.component.d.ts +6 -2
  2. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +0 -1
  3. package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -0
  4. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +3 -3
  5. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +8 -3
  6. package/esm2022/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +4 -3
  7. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +3 -3
  8. package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.mjs +4 -2
  9. package/esm2022/button/lib/button/button.component.mjs +3 -3
  10. package/esm2022/card/lib/card/card.component.mjs +13 -5
  11. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -3
  12. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +3 -3
  13. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +3 -3
  14. package/esm2022/chips/lib/chips/chips/chips.component.mjs +3 -3
  15. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-style.mjs +3 -2
  16. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +3 -3
  17. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +14 -9
  18. package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +3 -3
  19. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +3 -3
  20. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -1
  21. package/esm2022/drawer/lib/drawer/drawer.component.mjs +3 -3
  22. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
  23. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
  24. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
  25. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
  26. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
  27. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
  28. package/esm2022/editor/lib/editor/editor.component.mjs +3 -3
  29. package/esm2022/editor/lib/editor/toolbar-button/editor-toolbar-button.component.mjs +3 -3
  30. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +3 -3
  31. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +3 -3
  32. package/esm2022/gantt/lib/gantt/components/gantt/bar.mjs +2 -1
  33. package/esm2022/gantt/lib/gantt/gantt.component.mjs +3 -3
  34. package/esm2022/global-search/lib/global-search/global-search.component.mjs +16 -25
  35. package/esm2022/grid-menu/lib/grid-menu/components/grid-menu-item/grid-menu-item.component.mjs +3 -3
  36. package/esm2022/input-text/lib/input-text/input-text.directive.mjs +3 -3
  37. package/esm2022/lib/locale/fallback.mjs +5 -2
  38. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +3 -3
  39. package/esm2022/object-card/lib/object-card/object-card.component.mjs +3 -3
  40. package/esm2022/paginator/lib/paginator/paginator.component.mjs +3 -3
  41. package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +3 -3
  42. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +4 -10
  43. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +3 -3
  44. package/esm2022/select/lib/select/select.component.mjs +3 -3
  45. package/esm2022/select-button/lib/select-button/components/select-button-item/select-button-item.component.mjs +3 -3
  46. package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +6 -6
  47. package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +3 -3
  48. package/esm2022/slider/lib/slider/slider.component.mjs +67 -65
  49. package/esm2022/slider/lib/slider/slider.module.mjs +2 -2
  50. package/esm2022/split-button/lib/split-button/split-button.component.mjs +3 -3
  51. package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
  52. package/esm2022/stepper/lib/stepper/stepper.component.mjs +3 -3
  53. package/esm2022/switch/lib/switch/switch.component.mjs +5 -19
  54. package/esm2022/tabs/lib/tabs/tabs.component.mjs +3 -3
  55. package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
  56. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +10 -3
  57. package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.mjs +3 -3
  58. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +3 -3
  59. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.global.service.mjs +4 -3
  60. package/esm2022/tile/lib/tile/tile.component.mjs +3 -3
  61. package/esm2022/tree/lib/tree/components/tree-node-item/tree-node-item.component.mjs +20 -3
  62. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +3 -3
  63. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +2 -2
  64. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  65. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +10 -5
  66. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  67. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +5 -3
  68. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  69. package/fesm2022/seniorsistemas-angular-components-button.mjs +2 -2
  70. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  71. package/fesm2022/seniorsistemas-angular-components-card.mjs +12 -4
  72. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  73. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +2 -2
  74. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  75. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -2
  76. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  77. package/fesm2022/seniorsistemas-angular-components-chips.mjs +4 -4
  78. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  79. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +2 -1
  80. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  81. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +2 -2
  82. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  83. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +13 -8
  84. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  85. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +2 -2
  86. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -1
  87. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +14 -2
  88. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  89. package/fesm2022/seniorsistemas-angular-components-drawer.mjs +2 -2
  90. package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
  91. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +12 -12
  92. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  93. package/fesm2022/seniorsistemas-angular-components-editor.mjs +4 -4
  94. package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
  95. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +2 -2
  96. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  97. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +2 -2
  98. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  99. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +3 -2
  100. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  101. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +14 -23
  102. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  103. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +2 -2
  104. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  105. package/fesm2022/seniorsistemas-angular-components-input-text.mjs +2 -2
  106. package/fesm2022/seniorsistemas-angular-components-input-text.mjs.map +1 -1
  107. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +2 -2
  108. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  109. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
  110. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  111. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +2 -2
  112. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  113. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +2 -2
  114. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  115. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +3 -9
  116. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
  117. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +2 -2
  118. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  119. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +2 -2
  120. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  121. package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
  122. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  123. package/fesm2022/seniorsistemas-angular-components-shared.mjs +5 -5
  124. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  125. package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +2 -2
  126. package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -1
  127. package/fesm2022/seniorsistemas-angular-components-slider.mjs +67 -65
  128. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  129. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +2 -2
  130. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  131. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +2 -2
  132. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  133. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +2 -2
  134. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  135. package/fesm2022/seniorsistemas-angular-components-switch.mjs +4 -18
  136. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  137. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +2 -2
  138. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  139. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +2 -2
  140. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  141. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +9 -2
  142. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  143. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +2 -2
  144. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  145. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +5 -4
  146. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  147. package/fesm2022/seniorsistemas-angular-components-tile.mjs +2 -2
  148. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  149. package/fesm2022/seniorsistemas-angular-components-tree.mjs +20 -3
  150. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  151. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +2 -2
  152. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  153. package/fesm2022/seniorsistemas-angular-components.mjs +4 -1
  154. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  155. package/global-search/lib/global-search/global-search.component.d.ts +7 -3
  156. package/package.json +1 -1
  157. package/radio-button/lib/radio-button/radio-button.component.d.ts +0 -1
  158. package/slider/lib/slider/slider.component.d.ts +25 -7
  159. package/styles.css +5 -0
  160. package/switch/lib/switch/switch.component.d.ts +0 -2
  161. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +1 -0
  162. package/tree/lib/tree/components/tree-node-item/tree-node-item.component.d.ts +4 -0
@@ -93,7 +93,7 @@ export class ObjectCardComponent {
93
93
  this.expandedChange.emit(this.expanded);
94
94
  }
95
95
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ObjectCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
96
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ObjectCardComponent, isStandalone: true, selector: "s-object-card", inputs: { id: "id", expanded: "expanded", expandTooltip: "expandTooltip", collapseTooltip: "collapseTooltip", fieldsMinWidth: "fieldsMinWidth", severity: "severity", borderButtonOptions: "borderButtonOptions" }, outputs: { expandedChange: "expandedChange" }, queries: [{ propertyName: "fields", predicate: ObjectCardFieldComponent, descendants: true, isSignal: true }, { propertyName: "main", first: true, predicate: ObjectCardMainComponent, descendants: true, static: true }], viewQueries: [{ propertyName: "container", first: true, predicate: ["contentContainer"], descendants: true, isSignal: true }, { propertyName: "cardMainContainer", first: true, predicate: ["cardMainContainer"], descendants: true, isSignal: true }, { propertyName: "iconContainer", first: true, predicate: ["iconContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"object-card-container\"\n>\n @if (borderButtonOptions?.visible ? borderButtonOptions?.visible(severity) : false) {\n <s-border-button\n [severity]=\"severity\"\n [options]=\"borderButtonOptions\"\n class=\"object-card__border-button\"\n [@BorderButtonAnimation]\n ></s-border-button>\n }\n\n <div\n [id]=\"id + '-main-container'\"\n class=\"main-container\"\n #contentContainer\n [ngClass]=\"{\n 'with-hidden-fields': fields().length > maxVisibleFields,\n 'with-visible-fields': fields().length && maxVisibleFields,\n 'main-container--severity-default': severity === 'default',\n 'main-container--severity-info': severity === 'info',\n 'main-container--severity-warn': severity === 'warn',\n 'main-container--severity-error': severity === 'error',\n 'main-container--severity-success': severity === 'success',\n }\"\n >\n <div class=\"object-content\">\n <div\n class=\"s-object-card-main\"\n #cardMainContainer\n [style.min-width.px]=\"fieldsMinWidth\"\n >\n <ng-content select=\"s-object-card-main\"></ng-content>\n </div>\n\n @if (maxVisibleFields && fields().length) {\n <div class=\"divider\"></div>\n }\n\n @for (field of fields() | slice: 0 : maxVisibleFields; track field.id) {\n <div\n class=\"s-object-card-field\"\n [style.min-width.px]=\"fieldsMinWidth\"\n >\n <ng-container *ngTemplateOutlet=\"field.content\"></ng-container>\n </div>\n }\n </div>\n\n <div\n [id]=\"id + '-expand-icon-container'\"\n class=\"expand-icon-container\"\n #iconContainer\n (click)=\"toggle()\"\n [sTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n >\n <span\n [id]=\"id + '-expand-icon'\"\n class=\"expand-icon fa\"\n [ngClass]=\"{ 'fa-minus': expanded, 'fa-plus': !expanded }\"\n ></span>\n </div>\n </div>\n\n <div\n [id]=\"id + '-expandable-container'\"\n [@expandableContent]=\"expanded\"\n class=\"expandable-container\"\n [ngClass]=\"{\n 'expandable-container--severity-default': severity === 'default',\n 'expandable-container--severity-info': severity === 'info',\n 'expandable-container--severity-warn': severity === 'warn',\n 'expandable-container--severity-error': severity === 'error',\n 'expandable-container--severity-success': severity === 'success',\n }\"\n >\n <div class=\"childlist\">\n @for (field of fields() | slice: maxVisibleFields : fields().length; track field.id) {\n <div class=\"s-object-card-field\">\n <ng-container *ngTemplateOutlet=\"field.content\"></ng-container>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [":host{display:block}:host::ng-deep .sds-badge{height:auto;white-space:normal}.container{margin-bottom:20px;position:relative}.main-container{display:flex}.main-container,.expandable-container{background-color:#fff;border:1px solid #cccccc;position:relative;overflow:hidden;width:100%}.expandable-container--severity-default{border-color:#ccc;border-top:initial}.expandable-container--severity-info{transition:border-color .5s ease;border-color:#428bca;border-top:initial}.expandable-container--severity-warn{transition:border-color .5s ease;border-color:#f8931f;border-top:initial}.expandable-container--severity-error{transition:border-color .5s ease;border-color:#c13018;border-top:initial}.expandable-container--severity-success{transition:border-color .5s ease;border-color:#0c9348;border-top:initial}.main-container--severity-default{border-color:#ccc}.main-container--severity-info{transition:border-color .5s ease;border-color:#428bca}.main-container--severity-warn{transition:border-color .5s ease;border-color:#f8931f}.main-container--severity-error{transition:border-color .5s ease;border-color:#c13018}.main-container--severity-success{transition:border-color .5s ease;border-color:#0c9348}.object-card__border-button{position:absolute;top:-13px;right:15px;z-index:1}.expandable-container{border-top:none;box-shadow:inset 0 6px 4px -4px #ddd;margin-top:-1px}.expand-icon-container{display:flex;text-align:center;align-items:center;cursor:pointer;padding:12px}.expand-icon{flex:1}.object-content{display:flex;width:100%}.s-object-card-main{overflow:hidden;padding:15px}.main-container.with-visible-fields .s-object-card-main{max-width:30%}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.main-container.with-visible-fields .s-object-card-main{width:20%}}.s-object-card-field{overflow:hidden;height:100%}.main-container .s-object-card-field{padding:15px}.main-container .divider{width:1px;flex-shrink:0;background-color:#ccc;margin:15px -1px 15px 0}.main-container.with-hidden-fields .object-content{width:calc(100% - 35px)}.main-container.with-hidden-fields .expand-icon-container{display:flex}::ng-deep .object-card-button{padding-left:0!important;padding-right:10px!important;border:none!important;height:auto!important;min-width:auto!important;text-align:left!important}@media (max-width: 767px){.s-object-card-main{max-width:calc(100% - 50px)}}.childlist{width:100%;display:flex;flex-wrap:wrap;padding:1em;gap:1em}\n"], dependencies: [{ kind: "component", type: BorderButtonComponent, selector: "s-border-button", inputs: ["severity", "options"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "pipe", type: SlicePipe, name: "slice" }], animations: [
96
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ObjectCardComponent, isStandalone: true, selector: "s-object-card", inputs: { id: "id", expanded: "expanded", expandTooltip: "expandTooltip", collapseTooltip: "collapseTooltip", fieldsMinWidth: "fieldsMinWidth", severity: "severity", borderButtonOptions: "borderButtonOptions" }, outputs: { expandedChange: "expandedChange" }, queries: [{ propertyName: "fields", predicate: ObjectCardFieldComponent, descendants: true, isSignal: true }, { propertyName: "main", first: true, predicate: ObjectCardMainComponent, descendants: true, static: true }], viewQueries: [{ propertyName: "container", first: true, predicate: ["contentContainer"], descendants: true, isSignal: true }, { propertyName: "cardMainContainer", first: true, predicate: ["cardMainContainer"], descendants: true, isSignal: true }, { propertyName: "iconContainer", first: true, predicate: ["iconContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n [id]=\"id\"\n class=\"object-card-container\"\n>\n @if (borderButtonOptions?.visible ? borderButtonOptions?.visible(severity) : false) {\n <s-border-button\n [severity]=\"severity\"\n [options]=\"borderButtonOptions\"\n class=\"object-card__border-button\"\n [@BorderButtonAnimation]\n ></s-border-button>\n }\n\n <div\n [id]=\"id + '-main-container'\"\n class=\"main-container\"\n #contentContainer\n [ngClass]=\"{\n 'with-hidden-fields': fields().length > maxVisibleFields,\n 'with-visible-fields': fields().length && maxVisibleFields,\n 'main-container--severity-default': severity === 'default',\n 'main-container--severity-info': severity === 'info',\n 'main-container--severity-warn': severity === 'warn',\n 'main-container--severity-error': severity === 'error',\n 'main-container--severity-success': severity === 'success',\n }\"\n >\n <div class=\"object-content\">\n <div\n class=\"s-object-card-main\"\n #cardMainContainer\n [style.min-width.px]=\"fieldsMinWidth\"\n >\n <ng-content select=\"s-object-card-main\"></ng-content>\n </div>\n\n @if (maxVisibleFields && fields().length) {\n <div class=\"divider\"></div>\n }\n\n @for (field of fields() | slice: 0 : maxVisibleFields; track field.id) {\n <div\n class=\"s-object-card-field\"\n [style.min-width.px]=\"fieldsMinWidth\"\n >\n <ng-container *ngTemplateOutlet=\"field.content\"></ng-container>\n </div>\n }\n </div>\n\n <div\n [id]=\"id + '-expand-icon-container'\"\n class=\"expand-icon-container\"\n #iconContainer\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-expanded]=\"expanded\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n [sTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n >\n <span\n [id]=\"id + '-expand-icon'\"\n class=\"expand-icon fa\"\n [ngClass]=\"{ 'fa-minus': expanded, 'fa-plus': !expanded }\"\n ></span>\n </div>\n </div>\n\n <div\n [id]=\"id + '-expandable-container'\"\n [@expandableContent]=\"expanded\"\n class=\"expandable-container\"\n [ngClass]=\"{\n 'expandable-container--severity-default': severity === 'default',\n 'expandable-container--severity-info': severity === 'info',\n 'expandable-container--severity-warn': severity === 'warn',\n 'expandable-container--severity-error': severity === 'error',\n 'expandable-container--severity-success': severity === 'success',\n }\"\n >\n <div class=\"childlist\">\n @for (field of fields() | slice: maxVisibleFields : fields().length; track field.id) {\n <div class=\"s-object-card-field\">\n <ng-container *ngTemplateOutlet=\"field.content\"></ng-container>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [":host{display:block}:host::ng-deep .sds-badge{height:auto;white-space:normal}.container{margin-bottom:20px;position:relative}.main-container{display:flex}.main-container,.expandable-container{background-color:#fff;border:1px solid #cccccc;position:relative;overflow:hidden;width:100%}.expandable-container--severity-default{border-color:#ccc;border-top:initial}.expandable-container--severity-info{transition:border-color .5s ease;border-color:#428bca;border-top:initial}.expandable-container--severity-warn{transition:border-color .5s ease;border-color:#f8931f;border-top:initial}.expandable-container--severity-error{transition:border-color .5s ease;border-color:#c13018;border-top:initial}.expandable-container--severity-success{transition:border-color .5s ease;border-color:#0c9348;border-top:initial}.main-container--severity-default{border-color:#ccc}.main-container--severity-info{transition:border-color .5s ease;border-color:#428bca}.main-container--severity-warn{transition:border-color .5s ease;border-color:#f8931f}.main-container--severity-error{transition:border-color .5s ease;border-color:#c13018}.main-container--severity-success{transition:border-color .5s ease;border-color:#0c9348}.object-card__border-button{position:absolute;top:-13px;right:15px;z-index:1}.expandable-container{border-top:none;box-shadow:inset 0 6px 4px -4px #ddd;margin-top:-1px}.expand-icon-container{display:flex;text-align:center;align-items:center;cursor:pointer;padding:12px;border-radius:50%}.expand-icon-container:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.expand-icon{flex:1}.object-content{display:flex;width:100%}.s-object-card-main{overflow:hidden;padding:15px}.main-container.with-visible-fields .s-object-card-main{max-width:30%}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.main-container.with-visible-fields .s-object-card-main{width:20%}}.s-object-card-field{overflow:hidden;height:100%}.main-container .s-object-card-field{padding:15px}.main-container .divider{width:1px;flex-shrink:0;background-color:#ccc;margin:15px -1px 15px 0}.main-container.with-hidden-fields .object-content{width:calc(100% - 35px)}.main-container.with-hidden-fields .expand-icon-container{display:flex}::ng-deep .info-container>s-button{min-width:0!important;max-width:100%!important}::ng-deep .object-card-button{padding-left:0!important;padding-right:10px!important;border:none!important;height:auto!important;min-width:0!important;max-width:100%!important;text-align:left!important}::ng-deep .object-card-button:focus-visible{outline-offset:-2px!important}@media (max-width: 767px){.s-object-card-main{max-width:calc(100% - 50px)}}.childlist{width:100%;display:flex;flex-wrap:wrap;padding:1em;gap:1em}\n"], dependencies: [{ kind: "component", type: BorderButtonComponent, selector: "s-border-button", inputs: ["severity", "options"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "pipe", type: SlicePipe, name: "slice" }], animations: [
97
97
  trigger('expandableContent', [
98
98
  state('*', style({
99
99
  height: '0',
@@ -145,7 +145,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
145
145
  animate('300ms ease', style({ transform: 'scaleY(0)', opacity: 0 })),
146
146
  ]),
147
147
  ]),
148
- ], standalone: true, imports: [BorderButtonComponent, NgClass, NgTemplateOutlet, TooltipDirective, SlicePipe], template: "<div\n [id]=\"id\"\n class=\"object-card-container\"\n>\n @if (borderButtonOptions?.visible ? borderButtonOptions?.visible(severity) : false) {\n <s-border-button\n [severity]=\"severity\"\n [options]=\"borderButtonOptions\"\n class=\"object-card__border-button\"\n [@BorderButtonAnimation]\n ></s-border-button>\n }\n\n <div\n [id]=\"id + '-main-container'\"\n class=\"main-container\"\n #contentContainer\n [ngClass]=\"{\n 'with-hidden-fields': fields().length > maxVisibleFields,\n 'with-visible-fields': fields().length && maxVisibleFields,\n 'main-container--severity-default': severity === 'default',\n 'main-container--severity-info': severity === 'info',\n 'main-container--severity-warn': severity === 'warn',\n 'main-container--severity-error': severity === 'error',\n 'main-container--severity-success': severity === 'success',\n }\"\n >\n <div class=\"object-content\">\n <div\n class=\"s-object-card-main\"\n #cardMainContainer\n [style.min-width.px]=\"fieldsMinWidth\"\n >\n <ng-content select=\"s-object-card-main\"></ng-content>\n </div>\n\n @if (maxVisibleFields && fields().length) {\n <div class=\"divider\"></div>\n }\n\n @for (field of fields() | slice: 0 : maxVisibleFields; track field.id) {\n <div\n class=\"s-object-card-field\"\n [style.min-width.px]=\"fieldsMinWidth\"\n >\n <ng-container *ngTemplateOutlet=\"field.content\"></ng-container>\n </div>\n }\n </div>\n\n <div\n [id]=\"id + '-expand-icon-container'\"\n class=\"expand-icon-container\"\n #iconContainer\n (click)=\"toggle()\"\n [sTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n >\n <span\n [id]=\"id + '-expand-icon'\"\n class=\"expand-icon fa\"\n [ngClass]=\"{ 'fa-minus': expanded, 'fa-plus': !expanded }\"\n ></span>\n </div>\n </div>\n\n <div\n [id]=\"id + '-expandable-container'\"\n [@expandableContent]=\"expanded\"\n class=\"expandable-container\"\n [ngClass]=\"{\n 'expandable-container--severity-default': severity === 'default',\n 'expandable-container--severity-info': severity === 'info',\n 'expandable-container--severity-warn': severity === 'warn',\n 'expandable-container--severity-error': severity === 'error',\n 'expandable-container--severity-success': severity === 'success',\n }\"\n >\n <div class=\"childlist\">\n @for (field of fields() | slice: maxVisibleFields : fields().length; track field.id) {\n <div class=\"s-object-card-field\">\n <ng-container *ngTemplateOutlet=\"field.content\"></ng-container>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [":host{display:block}:host::ng-deep .sds-badge{height:auto;white-space:normal}.container{margin-bottom:20px;position:relative}.main-container{display:flex}.main-container,.expandable-container{background-color:#fff;border:1px solid #cccccc;position:relative;overflow:hidden;width:100%}.expandable-container--severity-default{border-color:#ccc;border-top:initial}.expandable-container--severity-info{transition:border-color .5s ease;border-color:#428bca;border-top:initial}.expandable-container--severity-warn{transition:border-color .5s ease;border-color:#f8931f;border-top:initial}.expandable-container--severity-error{transition:border-color .5s ease;border-color:#c13018;border-top:initial}.expandable-container--severity-success{transition:border-color .5s ease;border-color:#0c9348;border-top:initial}.main-container--severity-default{border-color:#ccc}.main-container--severity-info{transition:border-color .5s ease;border-color:#428bca}.main-container--severity-warn{transition:border-color .5s ease;border-color:#f8931f}.main-container--severity-error{transition:border-color .5s ease;border-color:#c13018}.main-container--severity-success{transition:border-color .5s ease;border-color:#0c9348}.object-card__border-button{position:absolute;top:-13px;right:15px;z-index:1}.expandable-container{border-top:none;box-shadow:inset 0 6px 4px -4px #ddd;margin-top:-1px}.expand-icon-container{display:flex;text-align:center;align-items:center;cursor:pointer;padding:12px}.expand-icon{flex:1}.object-content{display:flex;width:100%}.s-object-card-main{overflow:hidden;padding:15px}.main-container.with-visible-fields .s-object-card-main{max-width:30%}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.main-container.with-visible-fields .s-object-card-main{width:20%}}.s-object-card-field{overflow:hidden;height:100%}.main-container .s-object-card-field{padding:15px}.main-container .divider{width:1px;flex-shrink:0;background-color:#ccc;margin:15px -1px 15px 0}.main-container.with-hidden-fields .object-content{width:calc(100% - 35px)}.main-container.with-hidden-fields .expand-icon-container{display:flex}::ng-deep .object-card-button{padding-left:0!important;padding-right:10px!important;border:none!important;height:auto!important;min-width:auto!important;text-align:left!important}@media (max-width: 767px){.s-object-card-main{max-width:calc(100% - 50px)}}.childlist{width:100%;display:flex;flex-wrap:wrap;padding:1em;gap:1em}\n"] }]
148
+ ], standalone: true, imports: [BorderButtonComponent, NgClass, NgTemplateOutlet, TooltipDirective, SlicePipe], template: "<div\n [id]=\"id\"\n class=\"object-card-container\"\n>\n @if (borderButtonOptions?.visible ? borderButtonOptions?.visible(severity) : false) {\n <s-border-button\n [severity]=\"severity\"\n [options]=\"borderButtonOptions\"\n class=\"object-card__border-button\"\n [@BorderButtonAnimation]\n ></s-border-button>\n }\n\n <div\n [id]=\"id + '-main-container'\"\n class=\"main-container\"\n #contentContainer\n [ngClass]=\"{\n 'with-hidden-fields': fields().length > maxVisibleFields,\n 'with-visible-fields': fields().length && maxVisibleFields,\n 'main-container--severity-default': severity === 'default',\n 'main-container--severity-info': severity === 'info',\n 'main-container--severity-warn': severity === 'warn',\n 'main-container--severity-error': severity === 'error',\n 'main-container--severity-success': severity === 'success',\n }\"\n >\n <div class=\"object-content\">\n <div\n class=\"s-object-card-main\"\n #cardMainContainer\n [style.min-width.px]=\"fieldsMinWidth\"\n >\n <ng-content select=\"s-object-card-main\"></ng-content>\n </div>\n\n @if (maxVisibleFields && fields().length) {\n <div class=\"divider\"></div>\n }\n\n @for (field of fields() | slice: 0 : maxVisibleFields; track field.id) {\n <div\n class=\"s-object-card-field\"\n [style.min-width.px]=\"fieldsMinWidth\"\n >\n <ng-container *ngTemplateOutlet=\"field.content\"></ng-container>\n </div>\n }\n </div>\n\n <div\n [id]=\"id + '-expand-icon-container'\"\n class=\"expand-icon-container\"\n #iconContainer\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-expanded]=\"expanded\"\n (click)=\"toggle()\"\n (keydown.enter)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n [sTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n >\n <span\n [id]=\"id + '-expand-icon'\"\n class=\"expand-icon fa\"\n [ngClass]=\"{ 'fa-minus': expanded, 'fa-plus': !expanded }\"\n ></span>\n </div>\n </div>\n\n <div\n [id]=\"id + '-expandable-container'\"\n [@expandableContent]=\"expanded\"\n class=\"expandable-container\"\n [ngClass]=\"{\n 'expandable-container--severity-default': severity === 'default',\n 'expandable-container--severity-info': severity === 'info',\n 'expandable-container--severity-warn': severity === 'warn',\n 'expandable-container--severity-error': severity === 'error',\n 'expandable-container--severity-success': severity === 'success',\n }\"\n >\n <div class=\"childlist\">\n @for (field of fields() | slice: maxVisibleFields : fields().length; track field.id) {\n <div class=\"s-object-card-field\">\n <ng-container *ngTemplateOutlet=\"field.content\"></ng-container>\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [":host{display:block}:host::ng-deep .sds-badge{height:auto;white-space:normal}.container{margin-bottom:20px;position:relative}.main-container{display:flex}.main-container,.expandable-container{background-color:#fff;border:1px solid #cccccc;position:relative;overflow:hidden;width:100%}.expandable-container--severity-default{border-color:#ccc;border-top:initial}.expandable-container--severity-info{transition:border-color .5s ease;border-color:#428bca;border-top:initial}.expandable-container--severity-warn{transition:border-color .5s ease;border-color:#f8931f;border-top:initial}.expandable-container--severity-error{transition:border-color .5s ease;border-color:#c13018;border-top:initial}.expandable-container--severity-success{transition:border-color .5s ease;border-color:#0c9348;border-top:initial}.main-container--severity-default{border-color:#ccc}.main-container--severity-info{transition:border-color .5s ease;border-color:#428bca}.main-container--severity-warn{transition:border-color .5s ease;border-color:#f8931f}.main-container--severity-error{transition:border-color .5s ease;border-color:#c13018}.main-container--severity-success{transition:border-color .5s ease;border-color:#0c9348}.object-card__border-button{position:absolute;top:-13px;right:15px;z-index:1}.expandable-container{border-top:none;box-shadow:inset 0 6px 4px -4px #ddd;margin-top:-1px}.expand-icon-container{display:flex;text-align:center;align-items:center;cursor:pointer;padding:12px;border-radius:50%}.expand-icon-container:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.expand-icon{flex:1}.object-content{display:flex;width:100%}.s-object-card-main{overflow:hidden;padding:15px}.main-container.with-visible-fields .s-object-card-main{max-width:30%}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.main-container.with-visible-fields .s-object-card-main{width:20%}}.s-object-card-field{overflow:hidden;height:100%}.main-container .s-object-card-field{padding:15px}.main-container .divider{width:1px;flex-shrink:0;background-color:#ccc;margin:15px -1px 15px 0}.main-container.with-hidden-fields .object-content{width:calc(100% - 35px)}.main-container.with-hidden-fields .expand-icon-container{display:flex}::ng-deep .info-container>s-button{min-width:0!important;max-width:100%!important}::ng-deep .object-card-button{padding-left:0!important;padding-right:10px!important;border:none!important;height:auto!important;min-width:0!important;max-width:100%!important;text-align:left!important}::ng-deep .object-card-button:focus-visible{outline-offset:-2px!important}@media (max-width: 767px){.s-object-card-main{max-width:calc(100% - 50px)}}.childlist{width:100%;display:flex;flex-wrap:wrap;padding:1em;gap:1em}\n"] }]
149
149
  }], propDecorators: { id: [{
150
150
  type: Input
151
151
  }], expanded: [{
@@ -166,4 +166,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
166
166
  type: ContentChild,
167
167
  args: [ObjectCardMainComponent, { static: true }]
168
168
  }] } });
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL29iamVjdC1jYXJkL3NyYy9saWIvb2JqZWN0LWNhcmQvb2JqZWN0LWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL29iamVjdC1jYXJkL3NyYy9saWIvb2JqZWN0LWNhcmQvb2JqZWN0LWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBR2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN2RSxPQUFPLEVBQW1DLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkgsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFFOUU7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUEwQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixNQUFNLENBQVUsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUM5QixNQUFNLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDLFVB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NEJBQzdCLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ2pCLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO2dDQUM3QyxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7NkJBQ3ZFLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDakIsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0NBQzdDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs2QkFDdkUsQ0FBQzt5QkFDTCxDQUFDO3FCQUNMLGNBQ1csSUFBSSxXQUNQLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsQ0FBQzs4QkFZakYsRUFBRTtzQkFEUixLQUFLO2dCQUtDLFFBQVE7c0JBRGQsS0FBSztnQkFLQyxhQUFhO3NCQURuQixLQUFLO2dCQUtDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsS0FBSztnQkFLQyxRQUFRO3NCQURkLEtBQUs7Z0JBS0MsbUJBQW1CO3NCQUR6QixLQUFLO2dCQUtDLGNBQWM7c0JBRHBCLE1BQU07Z0JBSUEsSUFBSTtzQkFEVixZQUFZO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gICAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZCxcclxuICAgIGNvbnRlbnRDaGlsZHJlbixcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIHZpZXdDaGlsZCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JqZWN0Q2FyZEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9lbGVtZW50cy9maWVsZC9vYmplY3QtY2FyZC1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPYmplY3RDYXJkTWFpbkNvbXBvbmVudCB9IGZyb20gJy4vZWxlbWVudHMvbWFpbi9vYmplY3QtY2FyZC1tYWluLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRzIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XHJcbmltcG9ydCB7IEJvcmRlckJ1dHRvbk9wdGlvbnMsIFNldmVyaXRpZXMsIEJvcmRlckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvc2hhcmVkJztcclxuaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCwgU2xpY2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdG9vbHRpcCc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIENhcmQgZGUgZXhpYmnDp8OjbyBkZSBvYmpldG8gY29tIHNldG9yIHByaW5jaXBhbCwgY2FtcG9zIGV4dHJhcyBlXHJcbiAqIHBhaW5lbCBleHBhbnPDrXZlbC4gQ2FsY3VsYSBhdXRvbWF0aWNhbWVudGUgcXVhbnRvcyBjYW1wb3MgY8OhYmVtIHZpc8OtdmVpc1xyXG4gKiBjb25mb3JtZSBhIGxhcmd1cmEgZG8gY29udGFpbmVyIGUgc3Vwb3J0YSBuw612ZWwgZGUgc2V2ZXJpZGFkZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8cy1vYmplY3QtY2FyZCBbc2V2ZXJpdHldPVwiJ2luZm8nXCIgW2V4cGFuZGVkXT1cImZhbHNlXCI+XHJcbiAqICAgPHMtb2JqZWN0LWNhcmQtbWFpbiBsYWJlbD1cIk5vbWVcIiB2YWx1ZT1cIkpvw6NvXCIgLz5cclxuICogICA8cy1vYmplY3QtY2FyZC1maWVsZCBsYWJlbD1cIkNQRlwiIHZhbHVlPVwiMDAwLjAwMC4wMDAtMDBcIiAvPlxyXG4gKiA8L3Mtb2JqZWN0LWNhcmQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgU3RydWN0dXJlXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1vYmplY3QtY2FyZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vb2JqZWN0LWNhcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vb2JqZWN0LWNhcmQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCdleHBhbmRhYmxlQ29udGVudCcsIFtcclxuICAgICAgICAgICAgc3RhdGUoXHJcbiAgICAgICAgICAgICAgICAnKicsXHJcbiAgICAgICAgICAgICAgICBzdHlsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMCcsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgc3RhdGUoXHJcbiAgICAgICAgICAgICAgICAnZmFsc2UnLFxyXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzAnLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHN0YXRlKFxyXG4gICAgICAgICAgICAgICAgJ3RydWUnLFxyXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogJyonLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJyogPT4gdHJ1ZScsIGFuaW1hdGUoJzIwMG1zIGVhc2Utb3V0JykpLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdmYWxzZSA8PT4gdHJ1ZScsIGFuaW1hdGUoJzIwMG1zIGVhc2Utb3V0JykpLFxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIHRyaWdnZXIoJ0JvcmRlckJ1dHRvbkFuaW1hdGlvbicsIFtcclxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xyXG4gICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZVkoMCknLCBvcGFjaXR5OiAwIH0pLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGVZKDEpJywgb3BhY2l0eTogMSB9KSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXHJcbiAgICAgICAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3NjYWxlWSgxKScsIG9wYWNpdHk6IDEgfSksXHJcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlJywgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZVkoMCknLCBvcGFjaXR5OiAwIH0pKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgXSksXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtCb3JkZXJCdXR0b25Db21wb25lbnQsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQsIFRvb2x0aXBEaXJlY3RpdmUsIFNsaWNlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPYmplY3RDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IG5leHRJZFNlZWQgPSAwO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgX25leHRJZCA9IE9iamVjdENhcmRDb21wb25lbnQubmV4dElkU2VlZDtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldE5leHRJZCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9uZXh0SWQrKztcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIElkZW50aWZpY2Fkb3IgZG8gY29tcG9uZW50ZSBubyBET00uIEdlcmFkbyBhdXRvbWF0aWNhbWVudGUgc2UgbsOjbyBpbmZvcm1hZG8uICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlkID0gYHMtb2JqZWN0LWNhcmQtJHtPYmplY3RDYXJkQ29tcG9uZW50LmdldE5leHRJZCgpfWA7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBEZWZpbmUgc2UgbyBwYWluZWwgZXhwYW5zw612ZWwgZXN0w6EgYWJlcnRvLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBleHBhbmRlZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gVG9vbHRpcCBkbyBib3TDo28gZGUgZXhwYW5kaXIuIEBkZWZhdWx0ICdBYnJpciBwYWluZWwnICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGV4cGFuZFRvb2x0aXAgPSAnQWJyaXIgcGFpbmVsJztcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIFRvb2x0aXAgZG8gYm90w6NvIGRlIGNvbGFwc2FyLiBAZGVmYXVsdCAnRmVjaGFyIHBhaW5lbCcgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY29sbGFwc2VUb29sdGlwID0gJ0ZlY2hhciBwYWluZWwnO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGFyZ3VyYSBtw61uaW1hIGVtIHBpeGVscyBkZSBjYWRhIGNhbXBvIHZpc8OtdmVsLiBAZGVmYXVsdCAyMDAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZmllbGRzTWluV2lkdGggPSAyMDA7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBOw612ZWwgZGUgc2V2ZXJpZGFkZSBxdWUgYWx0ZXJhIG8gZXN0aWxvIHZpc3VhbC4gQGRlZmF1bHQgJ2RlZmF1bHQnICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldmVyaXR5OiBTZXZlcml0aWVzID0gJ2RlZmF1bHQnO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gT3DDp8O1ZXMgZGUgY29uZmlndXJhw6fDo28gZG8gYm90w6NvIGRlIGJvcmRhIGxhdGVyYWwuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGJvcmRlckJ1dHRvbk9wdGlvbnM/OiBCb3JkZXJCdXR0b25PcHRpb25zO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBlc3RhZG8gZGUgZXhwYW5zw6NvIG11ZGEsIGNvbSBvIG5vdm8gdmFsb3IgYm9vbGVhbm8uICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBAQ29udGVudENoaWxkKE9iamVjdENhcmRNYWluQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgcHVibGljIG1haW46IE9iamVjdENhcmRNYWluQ29tcG9uZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgZmllbGRzID0gY29udGVudENoaWxkcmVuKE9iamVjdENhcmRGaWVsZENvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ2NvbnRlbnRDb250YWluZXInKTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhcmRNYWluQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignY2FyZE1haW5Db250YWluZXInKTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25Db250YWluZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdpY29uQ29udGFpbmVyJyk7XHJcblxyXG4gICAgcHVibGljIG1heFZpc2libGVGaWVsZHMgPSAwO1xyXG5cclxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZSgpIHtcclxuICAgICAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICAgIGNvbnN0IG1haW5GaWVsZFdpZHRoID0gdGhpcy5jYXJkTWFpbkNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcbiAgICAgICAgbGV0IHJlbWFpbmluZ1NwYWNlID0gY29udGFpbmVyV2lkdGggLSBtYWluRmllbGRXaWR0aDtcclxuICAgICAgICBjb25zdCBmaWVsZHNNaW5XaWR0aCA9IHRoaXMuZmllbGRzTWluV2lkdGg7XHJcbiAgICAgICAgY29uc3QgZXhwYW5kSWNvbldpZHRoID0gdGhpcy5pY29uQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuXHJcbiAgICAgICAgbGV0IG1heEZpZWxkUXRkOiBudW1iZXI7XHJcblxyXG4gICAgICAgIGlmICh3aW5kb3dXaWR0aCA8PSBCcmVha3BvaW50cy5TTV9NQVgpIHtcclxuICAgICAgICAgICAgbWF4RmllbGRRdGQgPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1heEZpZWxkUXRkID0gTWF0aC5mbG9vcihyZW1haW5pbmdTcGFjZSAvIGZpZWxkc01pbldpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0V4cGFuZEljb24gPSBtYXhGaWVsZFF0ZCA8IHRoaXMuZmllbGRzKCkubGVuZ3RoO1xyXG4gICAgICAgIGlmIChoYXNFeHBhbmRJY29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaWNvbkNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcclxuICAgICAgICAgICAgcmVtYWluaW5nU3BhY2UgPSByZW1haW5pbmdTcGFjZSAtIGV4cGFuZEljb25XaWR0aDtcclxuICAgICAgICAgICAgbWF4RmllbGRRdGQgPSBNYXRoLmZsb29yKHJlbWFpbmluZ1NwYWNlIC8gZmllbGRzTWluV2lkdGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaWNvbkNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWF4VmlzaWJsZUZpZWxkcyA9IG1heEZpZWxkUXRkO1xyXG5cclxuICAgICAgICBpZiAobWF4RmllbGRRdGQgPj0gdGhpcy5maWVsZHMoKS5sZW5ndGggJiYgdGhpcy5leHBhbmRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGUoKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZCA/IHRoaXMuY29sbGFwc2UoKSA6IHRoaXMuZXhwYW5kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4cGFuZCgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbGxhcHNlKCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdlxuICAgIFtpZF09XCJpZFwiXG4gICAgY2xhc3M9XCJvYmplY3QtY2FyZC1jb250YWluZXJcIlxuPlxuICAgIEBpZiAoYm9yZGVyQnV0dG9uT3B0aW9ucz8udmlzaWJsZSA/IGJvcmRlckJ1dHRvbk9wdGlvbnM/LnZpc2libGUoc2V2ZXJpdHkpIDogZmFsc2UpIHtcbiAgICAgICAgPHMtYm9yZGVyLWJ1dHRvblxuICAgICAgICAgICAgW3NldmVyaXR5XT1cInNldmVyaXR5XCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImJvcmRlckJ1dHRvbk9wdGlvbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJvYmplY3QtY2FyZF9fYm9yZGVyLWJ1dHRvblwiXG4gICAgICAgICAgICBbQEJvcmRlckJ1dHRvbkFuaW1hdGlvbl1cbiAgICAgICAgPjwvcy1ib3JkZXItYnV0dG9uPlxuICAgIH1cblxuICAgIDxkaXZcbiAgICAgICAgW2lkXT1cImlkICsgJy1tYWluLWNvbnRhaW5lcidcIlxuICAgICAgICBjbGFzcz1cIm1haW4tY29udGFpbmVyXCJcbiAgICAgICAgI2NvbnRlbnRDb250YWluZXJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3dpdGgtaGlkZGVuLWZpZWxkcyc6IGZpZWxkcygpLmxlbmd0aCA+IG1heFZpc2libGVGaWVsZHMsXG4gICAgICAgICAgICAnd2l0aC12aXNpYmxlLWZpZWxkcyc6IGZpZWxkcygpLmxlbmd0aCAmJiBtYXhWaXNpYmxlRmllbGRzLFxuICAgICAgICAgICAgJ21haW4tY29udGFpbmVyLS1zZXZlcml0eS1kZWZhdWx0Jzogc2V2ZXJpdHkgPT09ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdtYWluLWNvbnRhaW5lci0tc2V2ZXJpdHktaW5mbyc6IHNldmVyaXR5ID09PSAnaW5mbycsXG4gICAgICAgICAgICAnbWFpbi1jb250YWluZXItLXNldmVyaXR5LXdhcm4nOiBzZXZlcml0eSA9PT0gJ3dhcm4nLFxuICAgICAgICAgICAgJ21haW4tY29udGFpbmVyLS1zZXZlcml0eS1lcnJvcic6IHNldmVyaXR5ID09PSAnZXJyb3InLFxuICAgICAgICAgICAgJ21haW4tY29udGFpbmVyLS1zZXZlcml0eS1zdWNjZXNzJzogc2V2ZXJpdHkgPT09ICdzdWNjZXNzJyxcbiAgICAgICAgfVwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInMtb2JqZWN0LWNhcmQtbWFpblwiXG4gICAgICAgICAgICAgICAgI2NhcmRNYWluQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJmaWVsZHNNaW5XaWR0aFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwicy1vYmplY3QtY2FyZC1tYWluXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIEBpZiAobWF4VmlzaWJsZUZpZWxkcyAmJiBmaWVsZHMoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAZm9yIChmaWVsZCBvZiBmaWVsZHMoKSB8IHNsaWNlOiAwIDogbWF4VmlzaWJsZUZpZWxkczsgdHJhY2sgZmllbGQuaWQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicy1vYmplY3QtY2FyZC1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiZmllbGRzTWluV2lkdGhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkLmNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2lkXT1cImlkICsgJy1leHBhbmQtaWNvbi1jb250YWluZXInXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXhwYW5kLWljb24tY29udGFpbmVyXCJcbiAgICAgICAgICAgICNpY29uQ29udGFpbmVyXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgICAgICAgW3NUb29sdGlwXT1cImV4cGFuZGVkID8gY29sbGFwc2VUb29sdGlwIDogZXhwYW5kVG9vbHRpcFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJy1leHBhbmQtaWNvbidcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXhwYW5kLWljb24gZmFcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ZhLW1pbnVzJzogZXhwYW5kZWQsICdmYS1wbHVzJzogIWV4cGFuZGVkIH1cIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgIFtpZF09XCJpZCArICctZXhwYW5kYWJsZS1jb250YWluZXInXCJcbiAgICAgICAgW0BleHBhbmRhYmxlQ29udGVudF09XCJleHBhbmRlZFwiXG4gICAgICAgIGNsYXNzPVwiZXhwYW5kYWJsZS1jb250YWluZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZXhwYW5kYWJsZS1jb250YWluZXItLXNldmVyaXR5LWRlZmF1bHQnOiBzZXZlcml0eSA9PT0gJ2RlZmF1bHQnLFxuICAgICAgICAgICAgJ2V4cGFuZGFibGUtY29udGFpbmVyLS1zZXZlcml0eS1pbmZvJzogc2V2ZXJpdHkgPT09ICdpbmZvJyxcbiAgICAgICAgICAgICdleHBhbmRhYmxlLWNvbnRhaW5lci0tc2V2ZXJpdHktd2Fybic6IHNldmVyaXR5ID09PSAnd2FybicsXG4gICAgICAgICAgICAnZXhwYW5kYWJsZS1jb250YWluZXItLXNldmVyaXR5LWVycm9yJzogc2V2ZXJpdHkgPT09ICdlcnJvcicsXG4gICAgICAgICAgICAnZXhwYW5kYWJsZS1jb250YWluZXItLXNldmVyaXR5LXN1Y2Nlc3MnOiBzZXZlcml0eSA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGlsZGxpc3RcIj5cbiAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGZpZWxkcygpIHwgc2xpY2U6IG1heFZpc2libGVGaWVsZHMgOiBmaWVsZHMoKS5sZW5ndGg7IHRyYWNrIGZpZWxkLmlkKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInMtb2JqZWN0LWNhcmQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkLmNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL29iamVjdC1jYXJkL3NyYy9saWIvb2JqZWN0LWNhcmQvb2JqZWN0LWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL29iamVjdC1jYXJkL3NyYy9saWIvb2JqZWN0LWNhcmQvb2JqZWN0LWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBR2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sU0FBUyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN2RSxPQUFPLEVBQW1DLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkgsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFFOUU7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUEwQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixNQUFNLENBQVUsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUM5QixNQUFNLENBQUMsT0FBTyxHQUFHLG1CQUFtQixDQUFDLFVB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NEJBQzdCLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0NBQ2pCLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO2dDQUM3QyxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7NkJBQ3ZFLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDakIsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0NBQzdDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzs2QkFDdkUsQ0FBQzt5QkFDTCxDQUFDO3FCQUNMLGNBQ1csSUFBSSxXQUNQLENBQUMscUJBQXFCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFNBQVMsQ0FBQzs4QkFZakYsRUFBRTtzQkFEUixLQUFLO2dCQUtDLFFBQVE7c0JBRGQsS0FBSztnQkFLQyxhQUFhO3NCQURuQixLQUFLO2dCQUtDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsS0FBSztnQkFLQyxRQUFRO3NCQURkLEtBQUs7Z0JBS0MsbUJBQW1CO3NCQUR6QixLQUFLO2dCQUtDLGNBQWM7c0JBRHBCLE1BQU07Z0JBSUEsSUFBSTtzQkFEVixZQUFZO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gICAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZCxcclxuICAgIGNvbnRlbnRDaGlsZHJlbixcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIHZpZXdDaGlsZCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JqZWN0Q2FyZEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi9lbGVtZW50cy9maWVsZC9vYmplY3QtY2FyZC1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBPYmplY3RDYXJkTWFpbkNvbXBvbmVudCB9IGZyb20gJy4vZWxlbWVudHMvbWFpbi9vYmplY3QtY2FyZC1tYWluLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJyZWFrcG9pbnRzIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XHJcbmltcG9ydCB7IEJvcmRlckJ1dHRvbk9wdGlvbnMsIFNldmVyaXRpZXMsIEJvcmRlckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvc2hhcmVkJztcclxuaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCwgU2xpY2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdG9vbHRpcCc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIENhcmQgZGUgZXhpYmnDp8OjbyBkZSBvYmpldG8gY29tIHNldG9yIHByaW5jaXBhbCwgY2FtcG9zIGV4dHJhcyBlXHJcbiAqIHBhaW5lbCBleHBhbnPDrXZlbC4gQ2FsY3VsYSBhdXRvbWF0aWNhbWVudGUgcXVhbnRvcyBjYW1wb3MgY8OhYmVtIHZpc8OtdmVpc1xyXG4gKiBjb25mb3JtZSBhIGxhcmd1cmEgZG8gY29udGFpbmVyIGUgc3Vwb3J0YSBuw612ZWwgZGUgc2V2ZXJpZGFkZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8cy1vYmplY3QtY2FyZCBbc2V2ZXJpdHldPVwiJ2luZm8nXCIgW2V4cGFuZGVkXT1cImZhbHNlXCI+XHJcbiAqICAgPHMtb2JqZWN0LWNhcmQtbWFpbiBsYWJlbD1cIk5vbWVcIiB2YWx1ZT1cIkpvw6NvXCIgLz5cclxuICogICA8cy1vYmplY3QtY2FyZC1maWVsZCBsYWJlbD1cIkNQRlwiIHZhbHVlPVwiMDAwLjAwMC4wMDAtMDBcIiAvPlxyXG4gKiA8L3Mtb2JqZWN0LWNhcmQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgU3RydWN0dXJlXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1vYmplY3QtY2FyZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vb2JqZWN0LWNhcmQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vb2JqZWN0LWNhcmQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCdleHBhbmRhYmxlQ29udGVudCcsIFtcclxuICAgICAgICAgICAgc3RhdGUoXHJcbiAgICAgICAgICAgICAgICAnKicsXHJcbiAgICAgICAgICAgICAgICBzdHlsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMCcsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgc3RhdGUoXHJcbiAgICAgICAgICAgICAgICAnZmFsc2UnLFxyXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzAnLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHN0YXRlKFxyXG4gICAgICAgICAgICAgICAgJ3RydWUnLFxyXG4gICAgICAgICAgICAgICAgc3R5bGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogJyonLFxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJyogPT4gdHJ1ZScsIGFuaW1hdGUoJzIwMG1zIGVhc2Utb3V0JykpLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdmYWxzZSA8PT4gdHJ1ZScsIGFuaW1hdGUoJzIwMG1zIGVhc2Utb3V0JykpLFxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIHRyaWdnZXIoJ0JvcmRlckJ1dHRvbkFuaW1hdGlvbicsIFtcclxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xyXG4gICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZVkoMCknLCBvcGFjaXR5OiAwIH0pLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGVZKDEpJywgb3BhY2l0eTogMSB9KSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXHJcbiAgICAgICAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3NjYWxlWSgxKScsIG9wYWNpdHk6IDEgfSksXHJcbiAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlJywgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZVkoMCknLCBvcGFjaXR5OiAwIH0pKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgXSksXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtCb3JkZXJCdXR0b25Db21wb25lbnQsIE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQsIFRvb2x0aXBEaXJlY3RpdmUsIFNsaWNlUGlwZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPYmplY3RDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IG5leHRJZFNlZWQgPSAwO1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgX25leHRJZCA9IE9iamVjdENhcmRDb21wb25lbnQubmV4dElkU2VlZDtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldE5leHRJZCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9uZXh0SWQrKztcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIElkZW50aWZpY2Fkb3IgZG8gY29tcG9uZW50ZSBubyBET00uIEdlcmFkbyBhdXRvbWF0aWNhbWVudGUgc2UgbsOjbyBpbmZvcm1hZG8uICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlkID0gYHMtb2JqZWN0LWNhcmQtJHtPYmplY3RDYXJkQ29tcG9uZW50LmdldE5leHRJZCgpfWA7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBEZWZpbmUgc2UgbyBwYWluZWwgZXhwYW5zw612ZWwgZXN0w6EgYWJlcnRvLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBleHBhbmRlZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gVG9vbHRpcCBkbyBib3TDo28gZGUgZXhwYW5kaXIuIEBkZWZhdWx0ICdBYnJpciBwYWluZWwnICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGV4cGFuZFRvb2x0aXAgPSAnQWJyaXIgcGFpbmVsJztcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIFRvb2x0aXAgZG8gYm90w6NvIGRlIGNvbGFwc2FyLiBAZGVmYXVsdCAnRmVjaGFyIHBhaW5lbCcgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgY29sbGFwc2VUb29sdGlwID0gJ0ZlY2hhciBwYWluZWwnO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGFyZ3VyYSBtw61uaW1hIGVtIHBpeGVscyBkZSBjYWRhIGNhbXBvIHZpc8OtdmVsLiBAZGVmYXVsdCAyMDAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZmllbGRzTWluV2lkdGggPSAyMDA7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBOw612ZWwgZGUgc2V2ZXJpZGFkZSBxdWUgYWx0ZXJhIG8gZXN0aWxvIHZpc3VhbC4gQGRlZmF1bHQgJ2RlZmF1bHQnICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldmVyaXR5OiBTZXZlcml0aWVzID0gJ2RlZmF1bHQnO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gT3DDp8O1ZXMgZGUgY29uZmlndXJhw6fDo28gZG8gYm90w6NvIGRlIGJvcmRhIGxhdGVyYWwuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGJvcmRlckJ1dHRvbk9wdGlvbnM/OiBCb3JkZXJCdXR0b25PcHRpb25zO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBlc3RhZG8gZGUgZXhwYW5zw6NvIG11ZGEsIGNvbSBvIG5vdm8gdmFsb3IgYm9vbGVhbm8uICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBleHBhbmRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBAQ29udGVudENoaWxkKE9iamVjdENhcmRNYWluQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgcHVibGljIG1haW46IE9iamVjdENhcmRNYWluQ29tcG9uZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgZmllbGRzID0gY29udGVudENoaWxkcmVuKE9iamVjdENhcmRGaWVsZENvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oJ2NvbnRlbnRDb250YWluZXInKTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhcmRNYWluQ29udGFpbmVyID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignY2FyZE1haW5Db250YWluZXInKTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25Db250YWluZXIgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdpY29uQ29udGFpbmVyJyk7XHJcblxyXG4gICAgcHVibGljIG1heFZpc2libGVGaWVsZHMgPSAwO1xyXG5cclxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZSgpIHtcclxuICAgICAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5jb250YWluZXIoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICAgIGNvbnN0IG1haW5GaWVsZFdpZHRoID0gdGhpcy5jYXJkTWFpbkNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XHJcbiAgICAgICAgbGV0IHJlbWFpbmluZ1NwYWNlID0gY29udGFpbmVyV2lkdGggLSBtYWluRmllbGRXaWR0aDtcclxuICAgICAgICBjb25zdCBmaWVsZHNNaW5XaWR0aCA9IHRoaXMuZmllbGRzTWluV2lkdGg7XHJcbiAgICAgICAgY29uc3QgZXhwYW5kSWNvbldpZHRoID0gdGhpcy5pY29uQ29udGFpbmVyKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcclxuXHJcbiAgICAgICAgbGV0IG1heEZpZWxkUXRkOiBudW1iZXI7XHJcblxyXG4gICAgICAgIGlmICh3aW5kb3dXaWR0aCA8PSBCcmVha3BvaW50cy5TTV9NQVgpIHtcclxuICAgICAgICAgICAgbWF4RmllbGRRdGQgPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1heEZpZWxkUXRkID0gTWF0aC5mbG9vcihyZW1haW5pbmdTcGFjZSAvIGZpZWxkc01pbldpZHRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGhhc0V4cGFuZEljb24gPSBtYXhGaWVsZFF0ZCA8IHRoaXMuZmllbGRzKCkubGVuZ3RoO1xyXG4gICAgICAgIGlmIChoYXNFeHBhbmRJY29uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaWNvbkNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcclxuICAgICAgICAgICAgcmVtYWluaW5nU3BhY2UgPSByZW1haW5pbmdTcGFjZSAtIGV4cGFuZEljb25XaWR0aDtcclxuICAgICAgICAgICAgbWF4RmllbGRRdGQgPSBNYXRoLmZsb29yKHJlbWFpbmluZ1NwYWNlIC8gZmllbGRzTWluV2lkdGgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaWNvbkNvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWF4VmlzaWJsZUZpZWxkcyA9IG1heEZpZWxkUXRkO1xyXG5cclxuICAgICAgICBpZiAobWF4RmllbGRRdGQgPj0gdGhpcy5maWVsZHMoKS5sZW5ndGggJiYgdGhpcy5leHBhbmRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB0b2dnbGUoKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZCA/IHRoaXMuY29sbGFwc2UoKSA6IHRoaXMuZXhwYW5kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4cGFuZCgpIHtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbGxhcHNlKCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdlxuICAgIFtpZF09XCJpZFwiXG4gICAgY2xhc3M9XCJvYmplY3QtY2FyZC1jb250YWluZXJcIlxuPlxuICAgIEBpZiAoYm9yZGVyQnV0dG9uT3B0aW9ucz8udmlzaWJsZSA/IGJvcmRlckJ1dHRvbk9wdGlvbnM/LnZpc2libGUoc2V2ZXJpdHkpIDogZmFsc2UpIHtcbiAgICAgICAgPHMtYm9yZGVyLWJ1dHRvblxuICAgICAgICAgICAgW3NldmVyaXR5XT1cInNldmVyaXR5XCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImJvcmRlckJ1dHRvbk9wdGlvbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJvYmplY3QtY2FyZF9fYm9yZGVyLWJ1dHRvblwiXG4gICAgICAgICAgICBbQEJvcmRlckJ1dHRvbkFuaW1hdGlvbl1cbiAgICAgICAgPjwvcy1ib3JkZXItYnV0dG9uPlxuICAgIH1cblxuICAgIDxkaXZcbiAgICAgICAgW2lkXT1cImlkICsgJy1tYWluLWNvbnRhaW5lcidcIlxuICAgICAgICBjbGFzcz1cIm1haW4tY29udGFpbmVyXCJcbiAgICAgICAgI2NvbnRlbnRDb250YWluZXJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3dpdGgtaGlkZGVuLWZpZWxkcyc6IGZpZWxkcygpLmxlbmd0aCA+IG1heFZpc2libGVGaWVsZHMsXG4gICAgICAgICAgICAnd2l0aC12aXNpYmxlLWZpZWxkcyc6IGZpZWxkcygpLmxlbmd0aCAmJiBtYXhWaXNpYmxlRmllbGRzLFxuICAgICAgICAgICAgJ21haW4tY29udGFpbmVyLS1zZXZlcml0eS1kZWZhdWx0Jzogc2V2ZXJpdHkgPT09ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdtYWluLWNvbnRhaW5lci0tc2V2ZXJpdHktaW5mbyc6IHNldmVyaXR5ID09PSAnaW5mbycsXG4gICAgICAgICAgICAnbWFpbi1jb250YWluZXItLXNldmVyaXR5LXdhcm4nOiBzZXZlcml0eSA9PT0gJ3dhcm4nLFxuICAgICAgICAgICAgJ21haW4tY29udGFpbmVyLS1zZXZlcml0eS1lcnJvcic6IHNldmVyaXR5ID09PSAnZXJyb3InLFxuICAgICAgICAgICAgJ21haW4tY29udGFpbmVyLS1zZXZlcml0eS1zdWNjZXNzJzogc2V2ZXJpdHkgPT09ICdzdWNjZXNzJyxcbiAgICAgICAgfVwiXG4gICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInMtb2JqZWN0LWNhcmQtbWFpblwiXG4gICAgICAgICAgICAgICAgI2NhcmRNYWluQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJmaWVsZHNNaW5XaWR0aFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwicy1vYmplY3QtY2FyZC1tYWluXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIEBpZiAobWF4VmlzaWJsZUZpZWxkcyAmJiBmaWVsZHMoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAZm9yIChmaWVsZCBvZiBmaWVsZHMoKSB8IHNsaWNlOiAwIDogbWF4VmlzaWJsZUZpZWxkczsgdHJhY2sgZmllbGQuaWQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicy1vYmplY3QtY2FyZC1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiZmllbGRzTWluV2lkdGhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkLmNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2lkXT1cImlkICsgJy1leHBhbmQtaWNvbi1jb250YWluZXInXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXhwYW5kLWljb24tY29udGFpbmVyXCJcbiAgICAgICAgICAgICNpY29uQ29udGFpbmVyXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJ0b2dnbGUoKVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJ0b2dnbGUoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgW3NUb29sdGlwXT1cImV4cGFuZGVkID8gY29sbGFwc2VUb29sdGlwIDogZXhwYW5kVG9vbHRpcFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgW2lkXT1cImlkICsgJy1leHBhbmQtaWNvbidcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXhwYW5kLWljb24gZmFcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ZhLW1pbnVzJzogZXhwYW5kZWQsICdmYS1wbHVzJzogIWV4cGFuZGVkIH1cIlxuICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgIFtpZF09XCJpZCArICctZXhwYW5kYWJsZS1jb250YWluZXInXCJcbiAgICAgICAgW0BleHBhbmRhYmxlQ29udGVudF09XCJleHBhbmRlZFwiXG4gICAgICAgIGNsYXNzPVwiZXhwYW5kYWJsZS1jb250YWluZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZXhwYW5kYWJsZS1jb250YWluZXItLXNldmVyaXR5LWRlZmF1bHQnOiBzZXZlcml0eSA9PT0gJ2RlZmF1bHQnLFxuICAgICAgICAgICAgJ2V4cGFuZGFibGUtY29udGFpbmVyLS1zZXZlcml0eS1pbmZvJzogc2V2ZXJpdHkgPT09ICdpbmZvJyxcbiAgICAgICAgICAgICdleHBhbmRhYmxlLWNvbnRhaW5lci0tc2V2ZXJpdHktd2Fybic6IHNldmVyaXR5ID09PSAnd2FybicsXG4gICAgICAgICAgICAnZXhwYW5kYWJsZS1jb250YWluZXItLXNldmVyaXR5LWVycm9yJzogc2V2ZXJpdHkgPT09ICdlcnJvcicsXG4gICAgICAgICAgICAnZXhwYW5kYWJsZS1jb250YWluZXItLXNldmVyaXR5LXN1Y2Nlc3MnOiBzZXZlcml0eSA9PT0gJ3N1Y2Nlc3MnLFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGlsZGxpc3RcIj5cbiAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGZpZWxkcygpIHwgc2xpY2U6IG1heFZpc2libGVGaWVsZHMgOiBmaWVsZHMoKS5sZW5ndGg7IHRyYWNrIGZpZWxkLmlkKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInMtb2JqZWN0LWNhcmQtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkLmNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -154,10 +154,10 @@ export class PaginatorComponent {
154
154
  this.requestedPage.set(pageIndex);
155
155
  }
156
156
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
157
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PaginatorComponent, isStandalone: true, selector: "s-paginator", inputs: { totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: true, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rows: "rowsChange", pageChange: "pageChange" }, ngImport: i0, template: "<div class=\"flex justify-between\">\n <section class=\"flex items-center gap-2\">\n <div\n class=\"inline-block h-8 divide-x divide-grayscale-30 overflow-hidden rounded-medium border border-grayscale-30 bg-grayscale-0\"\n >\n @for (btn of buttons(); track $index) {\n @let active = btn.pageIndex === currentPage();\n @let ariaLabelKey =\n btn.ariaLabelKey ??\n (active\n ? 'platform.angular_components.aria_current_page'\n : 'platform.angular_components.aria_page_number');\n <button\n [class.bg-criticality-blue]=\"active\"\n [class.text-grayscale-0]=\"active\"\n [class.text-criticality-blue]=\"!active\"\n (sInteractiveContent)=\"activatedButton(btn)\"\n [disabled]=\"btn.disabled || (btn.validate && btn.validate()) || false\"\n [attr.aria-label]=\"ariaLabelKey | translate: { page: btn.pageIndex }\"\n [attr.aria-current]=\"active ? 'page' : null\"\n class=\"group h-8 w-8 hover:bg-grayscale-20 hover:text-grayscale-100 disabled:hover:bg-[transparent] disabled:hover:text-criticality-blue\"\n >\n <div class=\"group-disabled:opacity-50\">\n @let page = btn.pageIndex;\n @let icon = btn.icon;\n @if (page !== undefined) {\n {{ page }}\n }\n @if (icon) {\n <i [class]=\"icon\" aria-hidden=\"true\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\n [ariaLabel]=\"'platform.angular_components.aria_page_selection' | translate\"\n [(ngModel)]=\"rows\"\n (ngModelChange)=\"rowsPerPageChange()\"\n ></s-select>\n </section>\n <section class=\"flex items-center gap-2\">\n @let text =\n totalRecords() === 0\n ? 'platform.angular_components.total_record'\n : 'platform.angular_components.total_records';\n <p class=\"text-[14px] text-[#212533]\">\n {{ text | translate: { count: totalRecords() } }}\n </p>\n <ng-content></ng-content>\n </section>\n</div>\n\n", dependencies: [{ kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }, { kind: "component", type: SelectComponent, selector: "s-select", inputs: ["placeholder", "multiple", "options", "optionLabel", "optionValue", "showClear", "filter", "checkmark", "checkIconClass", "filterBy", "group", "virtualScroll", "virtualScrollItemSize", "emptyMessage", "disabled", "showOptions", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "showOptionsChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
157
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PaginatorComponent, isStandalone: true, selector: "s-paginator", inputs: { totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: true, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rows: "rowsChange", pageChange: "pageChange" }, ngImport: i0, template: "<div class=\"flex justify-between\">\n <section class=\"flex items-center gap-2\">\n <div\n class=\"inline-block h-8 divide-x divide-grayscale-30 overflow-hidden rounded-medium border border-grayscale-30 bg-grayscale-0\"\n >\n @for (btn of buttons(); track $index) {\n @let active = btn.pageIndex === currentPage();\n @let ariaLabelKey =\n btn.ariaLabelKey ??\n (active\n ? 'platform.angular_components.aria_current_page'\n : 'platform.angular_components.aria_page_number');\n <button\n [class.bg-criticality-blue]=\"active\"\n [class.text-grayscale-0]=\"active\"\n [class.text-criticality-blue]=\"!active\"\n [class.rounded-l-medium]=\"$first\"\n [class.rounded-r-medium]=\"$last\"\n (sInteractiveContent)=\"activatedButton(btn)\"\n [attr.disabled]=\"btn.disabled || (btn.validate && btn.validate()) ? '' : null\"\n [attr.aria-label]=\"ariaLabelKey | translate: { page: btn.pageIndex }\"\n [attr.aria-current]=\"active ? 'page' : null\"\n class=\"group h-[30px] w-8 hover:bg-grayscale-20 hover:text-grayscale-100 disabled:hover:bg-[transparent] disabled:hover:text-criticality-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n >\n <div class=\"group-disabled:opacity-50\">\n @let page = btn.pageIndex;\n @let icon = btn.icon;\n @if (page !== undefined) {\n {{ page }}\n }\n @if (icon) {\n <i [class]=\"icon\" aria-hidden=\"true\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\n [ariaLabel]=\"'platform.angular_components.aria_page_selection' | translate\"\n [(ngModel)]=\"rows\"\n (ngModelChange)=\"rowsPerPageChange()\"\n ></s-select>\n </section>\n <section class=\"flex items-center gap-2\">\n @let text =\n totalRecords() === 0\n ? 'platform.angular_components.total_record'\n : 'platform.angular_components.total_records';\n <p class=\"text-[14px] text-[#212533]\">\n {{ text | translate: { count: totalRecords() } }}\n </p>\n <ng-content></ng-content>\n </section>\n</div>\n\n", dependencies: [{ kind: "directive", type: InteractiveContentDirective, selector: "[sInteractiveContent]", inputs: ["focusable", "disabled", "stopPropagation"], outputs: ["sInteractiveContent"] }, { kind: "component", type: SelectComponent, selector: "s-select", inputs: ["placeholder", "multiple", "options", "optionLabel", "optionValue", "showClear", "filter", "checkmark", "checkIconClass", "filterBy", "group", "virtualScroll", "virtualScrollItemSize", "emptyMessage", "disabled", "showOptions", "ariaLabel", "ariaLabelledBy"], outputs: ["disabledChange", "showOptionsChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
158
158
  }
159
159
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PaginatorComponent, decorators: [{
160
160
  type: Component,
161
- args: [{ selector: 's-paginator', standalone: true, imports: [InteractiveContentDirective, SelectComponent, FormsModule, TranslateModule], template: "<div class=\"flex justify-between\">\n <section class=\"flex items-center gap-2\">\n <div\n class=\"inline-block h-8 divide-x divide-grayscale-30 overflow-hidden rounded-medium border border-grayscale-30 bg-grayscale-0\"\n >\n @for (btn of buttons(); track $index) {\n @let active = btn.pageIndex === currentPage();\n @let ariaLabelKey =\n btn.ariaLabelKey ??\n (active\n ? 'platform.angular_components.aria_current_page'\n : 'platform.angular_components.aria_page_number');\n <button\n [class.bg-criticality-blue]=\"active\"\n [class.text-grayscale-0]=\"active\"\n [class.text-criticality-blue]=\"!active\"\n (sInteractiveContent)=\"activatedButton(btn)\"\n [disabled]=\"btn.disabled || (btn.validate && btn.validate()) || false\"\n [attr.aria-label]=\"ariaLabelKey | translate: { page: btn.pageIndex }\"\n [attr.aria-current]=\"active ? 'page' : null\"\n class=\"group h-8 w-8 hover:bg-grayscale-20 hover:text-grayscale-100 disabled:hover:bg-[transparent] disabled:hover:text-criticality-blue\"\n >\n <div class=\"group-disabled:opacity-50\">\n @let page = btn.pageIndex;\n @let icon = btn.icon;\n @if (page !== undefined) {\n {{ page }}\n }\n @if (icon) {\n <i [class]=\"icon\" aria-hidden=\"true\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\n [ariaLabel]=\"'platform.angular_components.aria_page_selection' | translate\"\n [(ngModel)]=\"rows\"\n (ngModelChange)=\"rowsPerPageChange()\"\n ></s-select>\n </section>\n <section class=\"flex items-center gap-2\">\n @let text =\n totalRecords() === 0\n ? 'platform.angular_components.total_record'\n : 'platform.angular_components.total_records';\n <p class=\"text-[14px] text-[#212533]\">\n {{ text | translate: { count: totalRecords() } }}\n </p>\n <ng-content></ng-content>\n </section>\n</div>\n\n" }]
161
+ args: [{ selector: 's-paginator', standalone: true, imports: [InteractiveContentDirective, SelectComponent, FormsModule, TranslateModule], template: "<div class=\"flex justify-between\">\n <section class=\"flex items-center gap-2\">\n <div\n class=\"inline-block h-8 divide-x divide-grayscale-30 overflow-hidden rounded-medium border border-grayscale-30 bg-grayscale-0\"\n >\n @for (btn of buttons(); track $index) {\n @let active = btn.pageIndex === currentPage();\n @let ariaLabelKey =\n btn.ariaLabelKey ??\n (active\n ? 'platform.angular_components.aria_current_page'\n : 'platform.angular_components.aria_page_number');\n <button\n [class.bg-criticality-blue]=\"active\"\n [class.text-grayscale-0]=\"active\"\n [class.text-criticality-blue]=\"!active\"\n [class.rounded-l-medium]=\"$first\"\n [class.rounded-r-medium]=\"$last\"\n (sInteractiveContent)=\"activatedButton(btn)\"\n [attr.disabled]=\"btn.disabled || (btn.validate && btn.validate()) ? '' : null\"\n [attr.aria-label]=\"ariaLabelKey | translate: { page: btn.pageIndex }\"\n [attr.aria-current]=\"active ? 'page' : null\"\n class=\"group h-[30px] w-8 hover:bg-grayscale-20 hover:text-grayscale-100 disabled:hover:bg-[transparent] disabled:hover:text-criticality-blue focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n >\n <div class=\"group-disabled:opacity-50\">\n @let page = btn.pageIndex;\n @let icon = btn.icon;\n @if (page !== undefined) {\n {{ page }}\n }\n @if (icon) {\n <i [class]=\"icon\" aria-hidden=\"true\"></i>\n }\n </div>\n </button>\n }\n </div>\n <s-select\n [options]=\"rowsPerPageOptions()\"\n [ariaLabel]=\"'platform.angular_components.aria_page_selection' | translate\"\n [(ngModel)]=\"rows\"\n (ngModelChange)=\"rowsPerPageChange()\"\n ></s-select>\n </section>\n <section class=\"flex items-center gap-2\">\n @let text =\n totalRecords() === 0\n ? 'platform.angular_components.total_record'\n : 'platform.angular_components.total_records';\n <p class=\"text-[14px] text-[#212533]\">\n {{ text | translate: { count: totalRecords() } }}\n </p>\n <ng-content></ng-content>\n </section>\n</div>\n\n" }]
162
162
  }] });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9wYWdpbmF0b3Ivc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9wYWdpbmF0b3Ivc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFHdEQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFPSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLGlFQUFpRTtJQUNqRSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO0lBQ3hDLG9GQUFvRjtJQUNwRixJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCLDBGQUEwRjtJQUMxRixrQkFBa0IsR0FBRyxLQUFLLENBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxxRkFBcUY7SUFDckYsVUFBVSxHQUFHLE1BQU0sRUFBYyxDQUFDO0lBRWpCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxH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Q0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sUUFBUSxDQUFDLFNBQWlCO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7d0dBdkpRLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDhpQkM3Qi9CLG0vRUFzREEsNENENUJjLDJCQUEyQiwwSkFBRSxlQUFlLG1YQUFFLFdBQVcsOFZBQUUsZUFBZTs7NEZBRzNFLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDSSxhQUFhLGNBQ1gsSUFBSSxXQUNQLENBQUMsMkJBQTJCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEludGVyYWN0aXZlQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvaW50ZXJhY3RpdmUtY29udGVudCc7XG5pbXBvcnQgeyBTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3NlbGVjdCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgUGFnZUNoYW5nZSwgUGFnaW5hdG9ySW50ZXJuYWxCdXR0b24gfSBmcm9tICcuLi9tb2RlbHMvcGFnaW5hdG9yLm1vZGVscyc7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIHBhZ2luYcOnw6NvIHN0YW5kYWxvbmUgcXVlIGV4aWJlIGJvdMO1ZXMgZGUgcMOhZ2luYXMsXG4gKiBzZWxldG9yIGRlIGl0ZW5zIHBvciBww6FnaW5hIGUgbmF2ZWdhw6fDo28gcGFyYSBwcmltZWlyYS/Dumx0aW1hIHDDoWdpbmEuXG4gKiBFbWl0ZSBgcGFnZUNoYW5nZWAgYSBjYWRhIG11ZGFuw6dhIGRlIHDDoWdpbmEgb3UgdGFtYW5obyBkZSBww6FnaW5hLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8cy1wYWdpbmF0b3JcbiAqICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFwiXG4gKiAgIFsocm93cyldPVwidGFtYW5ob1BhZ2luYVwiXG4gKiAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnaW5hTXVkb3UoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgU3RydWN0dXJlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1wYWdpbmF0b3InLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0ludGVyYWN0aXZlQ29udGVudERpcmVjdGl2ZSwgU2VsZWN0Q29tcG9uZW50LCBGb3Jtc01vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKiogQGRlc2NyaXB0aW9uIE7Dum1lcm8gdG90YWwgZGUgcmVnaXN0cm9zLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXG4gICAgdG90YWxSZWNvcmRzID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICAgIC8qKiBAZGVzY3JpcHRpb24gTsO6bWVybyBkZSBpdGVucyBwb3IgcMOhZ2luYS4gU3Vwb3J0YSB0d28td2F5IGJpbmRpbmcuIEBkZWZhdWx0IDEwICovXG4gICAgcm93cyA9IG1vZGVsKDEwKTtcbiAgICAvKiogQGRlc2NyaXB0aW9uIE9ww6fDtWVzIGRvIHNlbGV0b3IgZGUgaXRlbnMgcG9yIHDDoWdpbmEuIEBkZWZhdWx0IFsxMCwgMjAsIDUwLCAxMDAsIDIwMF0gKi9cbiAgICByb3dzUGVyUGFnZU9wdGlvbnMgPSBpbnB1dDxudW1iZXJbXT4oWzEwLCAyMCwgNTAsIDEwMCwgMjAwXSk7XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHNlbXByZSBxdWUgYSBww6FnaW5hIG91IG8gbsO6bWVybyBkZSBpdGVucyBwb3IgcMOhZ2luYSBtdWRhLiAqL1xuICAgIHBhZ2VDaGFuZ2UgPSBvdXRwdXQ8UGFnZUNoYW5nZT4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFBhZ2VFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy50b3RhbFBhZ2VzKCk7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlKCkgLSAxO1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgcGFnZUNvdW50OiB0b3RhbFBhZ2VzLFxuICAgICAgICAgICAgcm93czogdGhpcy5yb3dzKCksXG4gICAgICAgICAgICBmaXJzdDogdGhpcy5yb3dzKCkgKiBwYWdlLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9QQUdFX0JVVFRPTlMgPSA1O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFzUHJldmlvdXNQYWdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2aW91c1BhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlKCkgLSAxO1xuICAgICAgICByZXR1cm4gcHJldmlvdXNQYWdlID49IDE7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhc05leHRQYWdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0UGFnZSA9IHRoaXMuY3VycmVudFBhZ2UoKSArIDE7XG4gICAgICAgIHJldHVybiBuZXh0UGFnZSA8PSB0aGlzLnRvdGFsUGFnZXMoKTtcbiAgICB9KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdGVkUGFnZSA9IHNpZ25hbCgxKTtcbiAgICAvKiogQGRlc2NyaXB0aW9uIFDDoWdpbmEgYXR1YWwsIHNlbXByZSByZWFqdXN0YWRhIHBhcmEgbyBpbnRlcnZhbG8gdsOhbGlkbyBkZSBgWzEsIHRvdGFsUGFnZXNdYC4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3VycmVudFBhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1heFBhZ2UgPSBNYXRoLm1heCh0aGlzLnRvdGFsUGFnZXMoKSwgMSk7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh0aGlzLnJlcXVlc3RlZFBhZ2UoKSwgMSksIG1heFBhZ2UpO1xuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIGJ1dHRvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25QYWdlQnV0dG9uczogUGFnaW5hdG9ySW50ZXJuYWxCdXR0b25bXSA9IFtdO1xuICAgICAgICBjb25zdCBtYXhQYWdlQnV0dG9ucyA9IHRoaXMuTUFYX1BBR0VfQlVUVE9OUztcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlKCk7XG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IobWF4UGFnZUJ1dHRvbnMgLyAyKTtcbiAgICAgICAgY29uc3QgX3N0YXJ0UGFnZSA9IGN1cnJlbnRQYWdlIC0gbWlkZGxlO1xuICAgICAgICBsZXQgc3RhcnRQYWdlID0gX3N0YXJ0UGFnZSA8IDEgPyAxIDogX3N0YXJ0UGFnZTtcbiAgICAgICAgY29uc3QgX2VuZFBhZ2UgPSBzdGFydFBhZ2UgKyBtYXhQYWdlQnV0dG9ucyAtIDE7XG4gICAgICAgIGNvbnN0IGVuZFBhZ2VJc01vcmVUaGFuVG90YWxQYWdlcyA9IF9lbmRQYWdlID4gdGhpcy50b3RhbFBhZ2VzKCk7XG5cbiAgICAgICAgaWYgKGVuZFBhZ2VJc01vcmVUaGFuVG90YWxQYWdlcykge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9IF9lbmRQYWdlIC0gdGhpcy50b3RhbFBhZ2VzKCk7XG4gICAgICAgICAgICBjb25zdCBjYW5Nb2RpZnlTdGFydFBhZ2UgPSBzdGFydFBhZ2UgLSBkaWZmID49IDE7XG4gICAgICAgICAgICBpZiAoY2FuTW9kaWZ5U3RhcnRQYWdlKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQYWdlID0gc3RhcnRQYWdlIC0gZGlmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmRQYWdlID0gZW5kUGFnZUlzTW9yZVRoYW5Ub3RhbFBhZ2VzID8gdGhpcy50b3RhbFBhZ2VzKCkgOiBfZW5kUGFnZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRQYWdlOyBpIDw9IGVuZFBhZ2U7IGkrKykge1xuICAgICAgICAgICAgbmF2aWdhdGlvblBhZ2VCdXR0b25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGNsaWNrZWQ6IChwYWdlKSA9PiB0aGlzLmdvVG9QYWdlKHBhZ2UucGFnZUluZGV4IGFzIG51bWJlciksXG4gICAgICAgICAgICAgICAgcGFnZUluZGV4OiBpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5GSVJTVF9QQUdFX0JVVFRPTixcbiAgICAgICAgICAgIHRoaXMuUFJFVklPVVNfUEFHRV9CVVRUT04sXG4gICAgICAgICAgICAuLi5uYXZpZ2F0aW9uUGFnZUJ1dHRvbnMsXG4gICAgICAgICAgICB0aGlzLk5FWFRfUEFHRV9CVVRUT04sXG4gICAgICAgICAgICB0aGlzLkxBU1RfUEFHRV9CVVRUT04sXG4gICAgICAgIF07XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IEZJUlNUX1BBR0VfQlVUVE9OOiBQYWdpbmF0b3JJbnRlcm5hbEJ1dHRvbiA9IHtcbiAgICAgICAgY2xpY2tlZDogdGhpcy5nb0ZpcnN0UGFnZS5iaW5kKHRoaXMpLFxuICAgICAgICBpY29uOiAnZmFzIGZhLXN0ZXAtYmFja3dhcmQnLFxuICAgICAgICBhcmlhTGFiZWxLZXk6ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYXJpYV9maXJzdF9wYWdlJyxcbiAgICAgICAgdmFsaWRhdGU6IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKTtcbiAgICAgICAgfSksXG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgUFJFVklPVVNfUEFHRV9CVVRUT046IFBhZ2luYXRvckludGVybmFsQnV0dG9uID0ge1xuICAgICAgICBjbGlja2VkOiB0aGlzLmdvUHJldmlvdXNQYWdlLmJpbmQodGhpcyksXG4gICAgICAgIGljb246ICdmYXMgZmEtY2FyZXQtbGVmdCcsXG4gICAgICAgIGFyaWFMYWJlbEtleTogJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hcmlhX3ByZXZpb3VzX3BhZ2UnLFxuICAgICAgICB2YWxpZGF0ZTogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpO1xuICAgICAgICB9KSxcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBMQVNUX1BBR0VfQlVUVE9OOiBQYWdpbmF0b3JJbnRlcm5hbEJ1dHRvbiA9IHtcbiAgICAgICAgY2xpY2tlZDogdGhpcy5nb0xhc3RQYWdlLmJpbmQodGhpcyksXG4gICAgICAgIGljb246ICdmYXMgZmEtc3RlcC1mb3J3YXJkJyxcbiAgICAgICAgYXJpYUxhYmVsS2V5OiAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmFyaWFfbGFzdF9wYWdlJyxcbiAgICAgICAgdmFsaWRhdGU6IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5oYXNOZXh0UGFnZSgpO1xuICAgICAgICB9KSxcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBORVhUX1BBR0VfQlVUVE9OOiBQYWdpbmF0b3JJbnRlcm5hbEJ1dHRvbiA9IHtcbiAgICAgICAgY2xpY2tlZDogdGhpcy5nb05leHRQYWdlLmJpbmQodGhpcyksXG4gICAgICAgIGljb246ICdmYXMgZmEtY2FyZXQtcmlnaHQnLFxuICAgICAgICBhcmlhTGFiZWxLZXk6ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYXJpYV9uZXh0X3BhZ2UnLFxuICAgICAgICB2YWxpZGF0ZTogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmhhc05leHRQYWdlKCk7XG4gICAgICAgIH0pLFxuICAgIH07XG5cbiAgICBwcml2YXRlIHRvdGFsUGFnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMoKSAvIHRoaXMucm93cygpKTtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUVmZmVjdC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJvd3NQZXJQYWdlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpICE9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFjdGl2YXRlZEJ1dHRvbihidXR0b246IFBhZ2luYXRvckludGVybmFsQnV0dG9uKTogdm9pZCB7XG4gICAgICAgIGJ1dHRvbi5jbGlja2VkKGJ1dHRvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnb0ZpcnN0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nb1RvUGFnZSgxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdvTmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5oYXNOZXh0UGFnZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nb1RvUGFnZSh0aGlzLmN1cnJlbnRQYWdlKCkgKyAxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdvUHJldmlvdXNQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdvVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UoKSAtIDEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ29MYXN0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nb1RvUGFnZSh0aGlzLnRvdGFsUGFnZXMoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnb1RvUGFnZShwYWdlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlcXVlc3RlZFBhZ2Uuc2V0KHBhZ2VJbmRleCk7XG4gICAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIGgtOCBkaXZpZGUteCBkaXZpZGUtZ3JheXNjYWxlLTMwIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1lZGl1bSBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS0zMCBiZy1ncmF5c2NhbGUtMFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBmb3IgKGJ0biBvZiBidXR0b25zKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBsZXQgYWN0aXZlID0gYnRuLnBhZ2VJbmRleCA9PT0gY3VycmVudFBhZ2UoKTtcbiAgICAgICAgICAgICAgICBAbGV0IGFyaWFMYWJlbEtleSA9XG4gICAgICAgICAgICAgICAgICAgIGJ0bi5hcmlhTGFiZWxLZXkgPz9cbiAgICAgICAgICAgICAgICAgICAgKGFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmFyaWFfY3VycmVudF9wYWdlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmFyaWFfcGFnZV9udW1iZXInKTtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5iZy1jcml0aWNhbGl0eS1ibHVlXT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LWdyYXlzY2FsZS0wXT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LWNyaXRpY2FsaXR5LWJsdWVdPVwiIWFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgIChzSW50ZXJhY3RpdmVDb250ZW50KT1cImFjdGl2YXRlZEJ1dHRvbihidG4pXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0bi5kaXNhYmxlZCB8fCAoYnRuLnZhbGlkYXRlICYmIGJ0bi52YWxpZGF0ZSgpKSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsS2V5IHwgdHJhbnNsYXRlOiB7IHBhZ2U6IGJ0bi5wYWdlSW5kZXggfVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJhY3RpdmUgPyAncGFnZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cCBoLTggdy04IGhvdmVyOmJnLWdyYXlzY2FsZS0yMCBob3Zlcjp0ZXh0LWdyYXlzY2FsZS0xMDAgZGlzYWJsZWQ6aG92ZXI6YmctW3RyYW5zcGFyZW50XSBkaXNhYmxlZDpob3Zlcjp0ZXh0LWNyaXRpY2FsaXR5LWJsdWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWRpc2FibGVkOm9wYWNpdHktNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgcGFnZSA9IGJ0bi5wYWdlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBAbGV0IGljb24gPSBidG4uaWNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocGFnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcGFnZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHMtc2VsZWN0XG4gICAgICAgICAgICBbb3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnMoKVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYXJpYV9wYWdlX3NlbGVjdGlvbicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dzXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd3NQZXJQYWdlQ2hhbmdlKClcIlxuICAgICAgICA+PC9zLXNlbGVjdD5cbiAgICA8L3NlY3Rpb24+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICBAbGV0IHRleHQgPVxuICAgICAgICAgICAgdG90YWxSZWNvcmRzKCkgPT09IDBcbiAgICAgICAgICAgICAgICA/ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMudG90YWxfcmVjb3JkJ1xuICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy50b3RhbF9yZWNvcmRzJztcbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LVsxNHB4XSB0ZXh0LVsjMjEyNTMzXVwiPlxuICAgICAgICAgICAge3sgdGV4dCB8IHRyYW5zbGF0ZTogeyBjb3VudDogdG90YWxSZWNvcmRzKCkgfSB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3NlY3Rpb24+XG48L2Rpdj5cblxuIl19
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9wYWdpbmF0b3Ivc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9wYWdpbmF0b3Ivc3JjL2xpYi9wYWdpbmF0b3IvcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFHdEQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFPSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzNCLGlFQUFpRTtJQUNqRSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO0lBQ3hDLG9GQUFvRjtJQUNwRixJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pCLDBGQUEwRjtJQUMxRixrQkFBa0IsR0FBRyxLQUFLLENBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3RCxxRkFBcUY7SUFDckYsVUFBVSxHQUFHLE1BQU0sRUFBYyxDQUFDO0lBRWpCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxH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Q0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sUUFBUSxDQUFDLFNBQWlCO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7d0dBdkpRLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDhpQkM3Qi9CLDZ2RkF3REEsNENEOUJjLDJCQUEyQiwwSkFBRSxlQUFlLG1YQUFFLFdBQVcsOFZBQUUsZUFBZTs7NEZBRzNFLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDSSxhQUFhLGNBQ1gsSUFBSSxXQUNQLENBQUMsMkJBQTJCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEludGVyYWN0aXZlQ29udGVudERpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvaW50ZXJhY3RpdmUtY29udGVudCc7XG5pbXBvcnQgeyBTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3NlbGVjdCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgUGFnZUNoYW5nZSwgUGFnaW5hdG9ySW50ZXJuYWxCdXR0b24gfSBmcm9tICcuLi9tb2RlbHMvcGFnaW5hdG9yLm1vZGVscyc7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIHBhZ2luYcOnw6NvIHN0YW5kYWxvbmUgcXVlIGV4aWJlIGJvdMO1ZXMgZGUgcMOhZ2luYXMsXG4gKiBzZWxldG9yIGRlIGl0ZW5zIHBvciBww6FnaW5hIGUgbmF2ZWdhw6fDo28gcGFyYSBwcmltZWlyYS/Dumx0aW1hIHDDoWdpbmEuXG4gKiBFbWl0ZSBgcGFnZUNoYW5nZWAgYSBjYWRhIG11ZGFuw6dhIGRlIHDDoWdpbmEgb3UgdGFtYW5obyBkZSBww6FnaW5hLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8cy1wYWdpbmF0b3JcbiAqICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFwiXG4gKiAgIFsocm93cyldPVwidGFtYW5ob1BhZ2luYVwiXG4gKiAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnaW5hTXVkb3UoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgU3RydWN0dXJlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1wYWdpbmF0b3InLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0ludGVyYWN0aXZlQ29udGVudERpcmVjdGl2ZSwgU2VsZWN0Q29tcG9uZW50LCBGb3Jtc01vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFnaW5hdG9yLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKiogQGRlc2NyaXB0aW9uIE7Dum1lcm8gdG90YWwgZGUgcmVnaXN0cm9zLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXG4gICAgdG90YWxSZWNvcmRzID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuICAgIC8qKiBAZGVzY3JpcHRpb24gTsO6bWVybyBkZSBpdGVucyBwb3IgcMOhZ2luYS4gU3Vwb3J0YSB0d28td2F5IGJpbmRpbmcuIEBkZWZhdWx0IDEwICovXG4gICAgcm93cyA9IG1vZGVsKDEwKTtcbiAgICAvKiogQGRlc2NyaXB0aW9uIE9ww6fDtWVzIGRvIHNlbGV0b3IgZGUgaXRlbnMgcG9yIHDDoWdpbmEuIEBkZWZhdWx0IFsxMCwgMjAsIDUwLCAxMDAsIDIwMF0gKi9cbiAgICByb3dzUGVyUGFnZU9wdGlvbnMgPSBpbnB1dDxudW1iZXJbXT4oWzEwLCAyMCwgNTAsIDEwMCwgMjAwXSk7XG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHNlbXByZSBxdWUgYSBww6FnaW5hIG91IG8gbsO6bWVybyBkZSBpdGVucyBwb3IgcMOhZ2luYSBtdWRhLiAqL1xuICAgIHBhZ2VDaGFuZ2UgPSBvdXRwdXQ8UGFnZUNoYW5nZT4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFBhZ2VFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbFBhZ2VzID0gdGhpcy50b3RhbFBhZ2VzKCk7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlKCkgLSAxO1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgcGFnZUNvdW50OiB0b3RhbFBhZ2VzLFxuICAgICAgICAgICAgcm93czogdGhpcy5yb3dzKCksXG4gICAgICAgICAgICBmaXJzdDogdGhpcy5yb3dzKCkgKiBwYWdlLFxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9QQUdFX0JVVFRPTlMgPSA1O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFzUHJldmlvdXNQYWdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2aW91c1BhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlKCkgLSAxO1xuICAgICAgICByZXR1cm4gcHJldmlvdXNQYWdlID49IDE7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhc05leHRQYWdlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0UGFnZSA9IHRoaXMuY3VycmVudFBhZ2UoKSArIDE7XG4gICAgICAgIHJldHVybiBuZXh0UGFnZSA8PSB0aGlzLnRvdGFsUGFnZXMoKTtcbiAgICB9KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVxdWVzdGVkUGFnZSA9IHNpZ25hbCgxKTtcbiAgICAvKiogQGRlc2NyaXB0aW9uIFDDoWdpbmEgYXR1YWwsIHNlbXByZSByZWFqdXN0YWRhIHBhcmEgbyBpbnRlcnZhbG8gdsOhbGlkbyBkZSBgWzEsIHRvdGFsUGFnZXNdYC4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3VycmVudFBhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1heFBhZ2UgPSBNYXRoLm1heCh0aGlzLnRvdGFsUGFnZXMoKSwgMSk7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh0aGlzLnJlcXVlc3RlZFBhZ2UoKSwgMSksIG1heFBhZ2UpO1xuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIGJ1dHRvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25QYWdlQnV0dG9uczogUGFnaW5hdG9ySW50ZXJuYWxCdXR0b25bXSA9IFtdO1xuICAgICAgICBjb25zdCBtYXhQYWdlQnV0dG9ucyA9IHRoaXMuTUFYX1BBR0VfQlVUVE9OUztcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlKCk7XG4gICAgICAgIGNvbnN0IG1pZGRsZSA9IE1hdGguZmxvb3IobWF4UGFnZUJ1dHRvbnMgLyAyKTtcbiAgICAgICAgY29uc3QgX3N0YXJ0UGFnZSA9IGN1cnJlbnRQYWdlIC0gbWlkZGxlO1xuICAgICAgICBsZXQgc3RhcnRQYWdlID0gX3N0YXJ0UGFnZSA8IDEgPyAxIDogX3N0YXJ0UGFnZTtcbiAgICAgICAgY29uc3QgX2VuZFBhZ2UgPSBzdGFydFBhZ2UgKyBtYXhQYWdlQnV0dG9ucyAtIDE7XG4gICAgICAgIGNvbnN0IGVuZFBhZ2VJc01vcmVUaGFuVG90YWxQYWdlcyA9IF9lbmRQYWdlID4gdGhpcy50b3RhbFBhZ2VzKCk7XG5cbiAgICAgICAgaWYgKGVuZFBhZ2VJc01vcmVUaGFuVG90YWxQYWdlcykge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9IF9lbmRQYWdlIC0gdGhpcy50b3RhbFBhZ2VzKCk7XG4gICAgICAgICAgICBjb25zdCBjYW5Nb2RpZnlTdGFydFBhZ2UgPSBzdGFydFBhZ2UgLSBkaWZmID49IDE7XG4gICAgICAgICAgICBpZiAoY2FuTW9kaWZ5U3RhcnRQYWdlKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQYWdlID0gc3RhcnRQYWdlIC0gZGlmZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmRQYWdlID0gZW5kUGFnZUlzTW9yZVRoYW5Ub3RhbFBhZ2VzID8gdGhpcy50b3RhbFBhZ2VzKCkgOiBfZW5kUGFnZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRQYWdlOyBpIDw9IGVuZFBhZ2U7IGkrKykge1xuICAgICAgICAgICAgbmF2aWdhdGlvblBhZ2VCdXR0b25zLnB1c2goe1xuICAgICAgICAgICAgICAgIGNsaWNrZWQ6IChwYWdlKSA9PiB0aGlzLmdvVG9QYWdlKHBhZ2UucGFnZUluZGV4IGFzIG51bWJlciksXG4gICAgICAgICAgICAgICAgcGFnZUluZGV4OiBpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5GSVJTVF9QQUdFX0JVVFRPTixcbiAgICAgICAgICAgIHRoaXMuUFJFVklPVVNfUEFHRV9CVVRUT04sXG4gICAgICAgICAgICAuLi5uYXZpZ2F0aW9uUGFnZUJ1dHRvbnMsXG4gICAgICAgICAgICB0aGlzLk5FWFRfUEFHRV9CVVRUT04sXG4gICAgICAgICAgICB0aGlzLkxBU1RfUEFHRV9CVVRUT04sXG4gICAgICAgIF07XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IEZJUlNUX1BBR0VfQlVUVE9OOiBQYWdpbmF0b3JJbnRlcm5hbEJ1dHRvbiA9IHtcbiAgICAgICAgY2xpY2tlZDogdGhpcy5nb0ZpcnN0UGFnZS5iaW5kKHRoaXMpLFxuICAgICAgICBpY29uOiAnZmFzIGZhLXN0ZXAtYmFja3dhcmQnLFxuICAgICAgICBhcmlhTGFiZWxLZXk6ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYXJpYV9maXJzdF9wYWdlJyxcbiAgICAgICAgdmFsaWRhdGU6IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKTtcbiAgICAgICAgfSksXG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgUFJFVklPVVNfUEFHRV9CVVRUT046IFBhZ2luYXRvckludGVybmFsQnV0dG9uID0ge1xuICAgICAgICBjbGlja2VkOiB0aGlzLmdvUHJldmlvdXNQYWdlLmJpbmQodGhpcyksXG4gICAgICAgIGljb246ICdmYXMgZmEtY2FyZXQtbGVmdCcsXG4gICAgICAgIGFyaWFMYWJlbEtleTogJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hcmlhX3ByZXZpb3VzX3BhZ2UnLFxuICAgICAgICB2YWxpZGF0ZTogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpO1xuICAgICAgICB9KSxcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBMQVNUX1BBR0VfQlVUVE9OOiBQYWdpbmF0b3JJbnRlcm5hbEJ1dHRvbiA9IHtcbiAgICAgICAgY2xpY2tlZDogdGhpcy5nb0xhc3RQYWdlLmJpbmQodGhpcyksXG4gICAgICAgIGljb246ICdmYXMgZmEtc3RlcC1mb3J3YXJkJyxcbiAgICAgICAgYXJpYUxhYmVsS2V5OiAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmFyaWFfbGFzdF9wYWdlJyxcbiAgICAgICAgdmFsaWRhdGU6IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5oYXNOZXh0UGFnZSgpO1xuICAgICAgICB9KSxcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBORVhUX1BBR0VfQlVUVE9OOiBQYWdpbmF0b3JJbnRlcm5hbEJ1dHRvbiA9IHtcbiAgICAgICAgY2xpY2tlZDogdGhpcy5nb05leHRQYWdlLmJpbmQodGhpcyksXG4gICAgICAgIGljb246ICdmYXMgZmEtY2FyZXQtcmlnaHQnLFxuICAgICAgICBhcmlhTGFiZWxLZXk6ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYXJpYV9uZXh0X3BhZ2UnLFxuICAgICAgICB2YWxpZGF0ZTogY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmhhc05leHRQYWdlKCk7XG4gICAgICAgIH0pLFxuICAgIH07XG5cbiAgICBwcml2YXRlIHRvdGFsUGFnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMoKSAvIHRoaXMucm93cygpKTtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUVmZmVjdC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJvd3NQZXJQYWdlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpICE9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFjdGl2YXRlZEJ1dHRvbihidXR0b246IFBhZ2luYXRvckludGVybmFsQnV0dG9uKTogdm9pZCB7XG4gICAgICAgIGJ1dHRvbi5jbGlja2VkKGJ1dHRvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnb0ZpcnN0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nb1RvUGFnZSgxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdvTmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5oYXNOZXh0UGFnZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nb1RvUGFnZSh0aGlzLmN1cnJlbnRQYWdlKCkgKyAxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdvUHJldmlvdXNQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaGFzUHJldmlvdXNQYWdlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdvVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UoKSAtIDEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ29MYXN0UGFnZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nb1RvUGFnZSh0aGlzLnRvdGFsUGFnZXMoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnb1RvUGFnZShwYWdlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlcXVlc3RlZFBhZ2Uuc2V0KHBhZ2VJbmRleCk7XG4gICAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIGgtOCBkaXZpZGUteCBkaXZpZGUtZ3JheXNjYWxlLTMwIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1lZGl1bSBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS0zMCBiZy1ncmF5c2NhbGUtMFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBmb3IgKGJ0biBvZiBidXR0b25zKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBsZXQgYWN0aXZlID0gYnRuLnBhZ2VJbmRleCA9PT0gY3VycmVudFBhZ2UoKTtcbiAgICAgICAgICAgICAgICBAbGV0IGFyaWFMYWJlbEtleSA9XG4gICAgICAgICAgICAgICAgICAgIGJ0bi5hcmlhTGFiZWxLZXkgPz9cbiAgICAgICAgICAgICAgICAgICAgKGFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmFyaWFfY3VycmVudF9wYWdlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmFyaWFfcGFnZV9udW1iZXInKTtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5iZy1jcml0aWNhbGl0eS1ibHVlXT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LWdyYXlzY2FsZS0wXT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LWNyaXRpY2FsaXR5LWJsdWVdPVwiIWFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yb3VuZGVkLWwtbWVkaXVtXT1cIiRmaXJzdFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yb3VuZGVkLXItbWVkaXVtXT1cIiRsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgKHNJbnRlcmFjdGl2ZUNvbnRlbnQpPVwiYWN0aXZhdGVkQnV0dG9uKGJ0bilcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJidG4uZGlzYWJsZWQgfHwgKGJ0bi52YWxpZGF0ZSAmJiBidG4udmFsaWRhdGUoKSkgPyAnJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbEtleSB8IHRyYW5zbGF0ZTogeyBwYWdlOiBidG4ucGFnZUluZGV4IH1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiYWN0aXZlID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAgaC1bMzBweF0gdy04IGhvdmVyOmJnLWdyYXlzY2FsZS0yMCBob3Zlcjp0ZXh0LWdyYXlzY2FsZS0xMDAgZGlzYWJsZWQ6aG92ZXI6YmctW3RyYW5zcGFyZW50XSBkaXNhYmxlZDpob3Zlcjp0ZXh0LWNyaXRpY2FsaXR5LWJsdWUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtWy0ycHhdIGZvY3VzLXZpc2libGU6b3V0bGluZS1bdmFyKC0tcy1mb2N1cy1yaW5nLWNvbG9yLCMwMDkwZmYpXVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtZGlzYWJsZWQ6b3BhY2l0eS01MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGxldCBwYWdlID0gYnRuLnBhZ2VJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgaWNvbiA9IGJ0bi5pY29uO1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBwYWdlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cy1zZWxlY3RcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInJvd3NQZXJQYWdlT3B0aW9ucygpXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hcmlhX3BhZ2Vfc2VsZWN0aW9uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJvd3NcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93c1BlclBhZ2VDaGFuZ2UoKVwiXG4gICAgICAgID48L3Mtc2VsZWN0PlxuICAgIDwvc2VjdGlvbj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIEBsZXQgdGV4dCA9XG4gICAgICAgICAgICB0b3RhbFJlY29yZHMoKSA9PT0gMFxuICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy50b3RhbF9yZWNvcmQnXG4gICAgICAgICAgICAgICAgOiAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnRvdGFsX3JlY29yZHMnO1xuICAgICAgICA8cCBjbGFzcz1cInRleHQtWzE0cHhdIHRleHQtWyMyMTI1MzNdXCI+XG4gICAgICAgICAgICB7eyB0ZXh0IHwgdHJhbnNsYXRlOiB7IGNvdW50OiB0b3RhbFJlY29yZHMoKSB9IH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvc2VjdGlvbj5cbjwvZGl2PlxuXG4iXX0=
@@ -438,7 +438,7 @@ export class PinCodeFieldComponent {
438
438
  useExisting: forwardRef(() => PinCodeFieldComponent),
439
439
  multi: true,
440
440
  },
441
- ], viewQueries: [{ propertyName: "pinInputs", predicate: ["pinInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"gap-xsmall flex flex-col\">\n <div\n class=\"flex gap-2\"\n role=\"group\"\n aria-label=\"PIN code input\"\n [attr.aria-labelledby]=\"helpText() ? 'pin-help-text' : null\"\n >\n @for (input of inputs(); let i = $index; track i) {\n <input\n #pinInput\n type=\"text\"\n class=\"h-12 w-12 rounded-xbig border text-center text-lg font-medium transition-all duration-200\"\n [ngClass]=\"{\n 'border-criticality-red focus:ring-criticality-red': hasError(),\n 'border-grayscale-30 focus:border-primary focus:ring-primary': !hasError(),\n 'cursor-not-allowed bg-grayscale-10 text-grayscale-60': disabled(),\n 'bg-grayscale-0 text-grayscale-100 focus:outline-none': !disabled(),\n }\"\n [value]=\"input\"\n [disabled]=\"disabled()\"\n [attr.maxlength]=\"1\"\n [attr.inputmode]=\"alphanumeric() ? 'text' : 'numeric'\"\n [attr.aria-label]=\"\n alphanumeric()\n ? ('platform.angular_components.pin_code_character_index_of_total'\n | translate: { index: i + 1, length: length() })\n : ('platform.angular_components.pin_code_digit_index_of_total'\n | translate: { index: i + 1, length: length() })\n \"\n [attr.aria-describedby]=\"helpText() ? 'pin-help-text' : null\"\n [attr.aria-required]=\"true\"\n autocomplete=\"off\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeyDown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onFocus(i)\"\n (blur)=\"onBlur(i)\"\n />\n }\n </div>\n\n @if (helpText()) {\n <div\n id=\"pin-help-text\"\n class=\"mt-small text-sm text-grayscale-60\"\n >\n {{ helpText() }}\n </div>\n }\n</div>\n\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
441
+ ], viewQueries: [{ propertyName: "pinInputs", predicate: ["pinInput"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"gap-xsmall flex flex-col\">\n <div\n class=\"flex gap-2\"\n role=\"group\"\n aria-label=\"PIN code input\"\n [attr.aria-labelledby]=\"helpText() ? 'pin-help-text' : null\"\n >\n @for (input of inputs(); let i = $index; track i) {\n <input\n #pinInput\n type=\"text\"\n class=\"h-12 w-12 rounded-xbig border text-center text-lg font-medium transition-[background-color,border-color,color] duration-200\"\n [ngClass]=\"{\n 'border-criticality-red focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-criticality-red': hasError(),\n 'border-grayscale-30 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]': !hasError(),\n 'cursor-not-allowed bg-grayscale-10 text-grayscale-60': disabled(),\n 'bg-grayscale-0 text-grayscale-100': !disabled(),\n }\"\n [value]=\"input\"\n [disabled]=\"disabled()\"\n [attr.maxlength]=\"1\"\n [attr.inputmode]=\"alphanumeric() ? 'text' : 'numeric'\"\n [attr.aria-label]=\"\n alphanumeric()\n ? ('platform.angular_components.pin_code_character_index_of_total'\n | translate: { index: i + 1, length: length() })\n : ('platform.angular_components.pin_code_digit_index_of_total'\n | translate: { index: i + 1, length: length() })\n \"\n [attr.aria-describedby]=\"helpText() ? 'pin-help-text' : null\"\n [attr.aria-required]=\"true\"\n autocomplete=\"off\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeyDown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onFocus(i)\"\n (blur)=\"onBlur(i)\"\n />\n }\n </div>\n\n @if (helpText()) {\n <div\n id=\"pin-help-text\"\n class=\"mt-small text-sm text-grayscale-60\"\n >\n {{ helpText() }}\n </div>\n }\n</div>\n\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
442
442
  }
443
443
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PinCodeFieldComponent, decorators: [{
444
444
  type: Component,
@@ -448,6 +448,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
448
448
  useExisting: forwardRef(() => PinCodeFieldComponent),
449
449
  multi: true,
450
450
  },
451
- ], template: "<div class=\"gap-xsmall flex flex-col\">\n <div\n class=\"flex gap-2\"\n role=\"group\"\n aria-label=\"PIN code input\"\n [attr.aria-labelledby]=\"helpText() ? 'pin-help-text' : null\"\n >\n @for (input of inputs(); let i = $index; track i) {\n <input\n #pinInput\n type=\"text\"\n class=\"h-12 w-12 rounded-xbig border text-center text-lg font-medium transition-all duration-200\"\n [ngClass]=\"{\n 'border-criticality-red focus:ring-criticality-red': hasError(),\n 'border-grayscale-30 focus:border-primary focus:ring-primary': !hasError(),\n 'cursor-not-allowed bg-grayscale-10 text-grayscale-60': disabled(),\n 'bg-grayscale-0 text-grayscale-100 focus:outline-none': !disabled(),\n }\"\n [value]=\"input\"\n [disabled]=\"disabled()\"\n [attr.maxlength]=\"1\"\n [attr.inputmode]=\"alphanumeric() ? 'text' : 'numeric'\"\n [attr.aria-label]=\"\n alphanumeric()\n ? ('platform.angular_components.pin_code_character_index_of_total'\n | translate: { index: i + 1, length: length() })\n : ('platform.angular_components.pin_code_digit_index_of_total'\n | translate: { index: i + 1, length: length() })\n \"\n [attr.aria-describedby]=\"helpText() ? 'pin-help-text' : null\"\n [attr.aria-required]=\"true\"\n autocomplete=\"off\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeyDown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onFocus(i)\"\n (blur)=\"onBlur(i)\"\n />\n }\n </div>\n\n @if (helpText()) {\n <div\n id=\"pin-help-text\"\n class=\"mt-small text-sm text-grayscale-60\"\n >\n {{ helpText() }}\n </div>\n }\n</div>\n\n" }]
451
+ ], template: "<div class=\"gap-xsmall flex flex-col\">\n <div\n class=\"flex gap-2\"\n role=\"group\"\n aria-label=\"PIN code input\"\n [attr.aria-labelledby]=\"helpText() ? 'pin-help-text' : null\"\n >\n @for (input of inputs(); let i = $index; track i) {\n <input\n #pinInput\n type=\"text\"\n class=\"h-12 w-12 rounded-xbig border text-center text-lg font-medium transition-[background-color,border-color,color] duration-200\"\n [ngClass]=\"{\n 'border-criticality-red focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-criticality-red': hasError(),\n 'border-grayscale-30 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]': !hasError(),\n 'cursor-not-allowed bg-grayscale-10 text-grayscale-60': disabled(),\n 'bg-grayscale-0 text-grayscale-100': !disabled(),\n }\"\n [value]=\"input\"\n [disabled]=\"disabled()\"\n [attr.maxlength]=\"1\"\n [attr.inputmode]=\"alphanumeric() ? 'text' : 'numeric'\"\n [attr.aria-label]=\"\n alphanumeric()\n ? ('platform.angular_components.pin_code_character_index_of_total'\n | translate: { index: i + 1, length: length() })\n : ('platform.angular_components.pin_code_digit_index_of_total'\n | translate: { index: i + 1, length: length() })\n \"\n [attr.aria-describedby]=\"helpText() ? 'pin-help-text' : null\"\n [attr.aria-required]=\"true\"\n autocomplete=\"off\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeyDown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onFocus(i)\"\n (blur)=\"onBlur(i)\"\n />\n }\n </div>\n\n @if (helpText()) {\n <div\n id=\"pin-help-text\"\n class=\"mt-small text-sm text-grayscale-60\"\n >\n {{ helpText() }}\n </div>\n }\n</div>\n\n" }]
452
452
  }], ctorParameters: () => [] });
453
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFFdEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBY0gsTUFBTSxPQUFPLHFCQUFxQjtJQUN0QixNQUFNLENBQVUsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sQ0FBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBRXpDOzs7OztPQUtHO0lBQ0ksTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6Qjs7Ozs7T0FLRztJQUNJLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbkM7Ozs7O09BS0c7SUFDSSxRQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUUs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QUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgZm9yd2FyZFJlZixcclxuICAgIHZpZXdDaGlsZHJlbixcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBzaWduYWwsXHJcbiAgICBpbnB1dCxcclxuICAgIG91dHB1dCxcclxuICAgIGVmZmVjdCxcclxuICAgIGNvbXB1dGVkLFxyXG4gICAgbW9kZWwsXHJcbiAgICBpbmplY3QsXHJcbiAgICBEZXN0cm95UmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgZW50cmFkYSBkZSBjw7NkaWdvIFBJTi9PVFAgY29tIGNhbXBvcyBpbmRpdmlkdWFpcyBwYXJhIGNhZGEgZMOtZ2l0by5cclxuICogSW1wbGVtZW50YSB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9IHBhcmEgaW50ZWdyYcOnw6NvIG5hdGl2YSBjb20gUmVhY3RpdmUgRm9ybXNcclxuICogZSBUZW1wbGF0ZS1kcml2ZW4gRm9ybXMgZG8gQW5ndWxhci5cclxuICpcclxuICogRnVuY2lvbmFsaWRhZGVzOlxyXG4gKiAtIENhbXBvcyBzZXBhcmFkb3MgZSBuYXZlZ8OhdmVpcyBwYXJhIGNhZGEgZMOtZ2l0byBkbyBjw7NkaWdvXHJcbiAqIC0gQ29tcHJpbWVudG8gY29uZmlndXLDoXZlbCB2aWEgaW5wdXQgYGxlbmd0aGBcclxuICogLSBTdXBvcnRlIGEgZW50cmFkYSBudW3DqXJpY2Egb3UgYWxmYW51bcOpcmljYVxyXG4gKiAtIE5hdmVnYcOnw6NvIHBvciB0ZWNsYWRvIChzZXRhcywgYmFja3NwYWNlKVxyXG4gKiAtIFN1cG9ydGUgYSBjb2xhciAocGFzdGUpIGNvbSB0cnVuY2FtZW50byBhdXRvbcOhdGljbyBhbyB0YW1hbmhvIGRlZmluaWRvXHJcbiAqIC0gRXN0YWRvIGRlIGVycm8gdmlhIGlucHV0IGBpbnZhbGlkYFxyXG4gKiAtIEFjZXNzaWJpbGlkYWRlIGNvbXBsZXRhIGNvbSBBUklBIGxhYmVscyBlIHJvbGVzIHNlbcOibnRpY29zXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAqICAgPHMtcGluLWNvZGUtZmllbGRcclxuICogICAgIGZvcm1Db250cm9sTmFtZT1cImNvZGVcIlxyXG4gKiAgICAgW2xlbmd0aF09XCI2XCJcclxuICogICAgIFthbHBoYW51bWVyaWNdPVwiZmFsc2VcIlxyXG4gKiAgICAgW2ludmFsaWRdPVwiKGZvcm0uZ2V0KCdjb2RlJyk/LmludmFsaWQgJiYgZm9ybS5nZXQoJ2NvZGUnKT8uZGlydHkpIHx8IGZhbHNlXCJcclxuICogICAgIGhlbHBUZXh0PVwiRGlnaXRlIHNldSBjw7NkaWdvIGRlIDYgZMOtZ2l0b3NcIlxyXG4gKiAgICAgKGNvZGVGaWxsZWQpPVwib25Db2RlRmlsbGVkKCRldmVudClcIj5cclxuICogICA8L3MtcGluLWNvZGUtZmllbGQ+XHJcbiAqIDwvZm9ybT5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBjYXRlZ29yeSBJbnB1dHNcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzLXBpbi1jb2RlLWZpZWxkJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9waW4tY29kZS1maWVsZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW05nQ2xhc3MsIFRyYW5zbGF0ZU1vZHVsZV0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQaW5Db2RlRmllbGRDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBpbkNvZGVGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExBU1RfSU5ERVhfT0ZGU0VUID0gMTtcclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEVNUFRZX1ZBTFVFID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTsO6bWVybyBkZSBjYW1wb3MgZGUgZW50cmFkYSAoY29tcHJpbWVudG8gZG8gY8OzZGlnbyBQSU4pLlxyXG4gICAgICogRGV2ZSBzZXIgYW8gbWVub3MgMS5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCA2XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsZW5ndGggPSBpbnB1dCg2KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlIGVudHJhZGEgYWxmYW51bcOpcmljYSBlIGRlIGNhcmFjdGVyZXMgZXNwZWNpYWlzLlxyXG4gICAgICogUXVhbmRvIGBmYWxzZWAsIGFjZWl0YSBhcGVuYXMgZMOtZ2l0b3MgbnVtw6lyaWNvcyAoMOKAkzkpLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbHBoYW51bWVyaWMgPSBpbnB1dChmYWxzZSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gZGUgYWp1ZGEgZXhpYmlkbyBhYmFpeG8gZG9zIGNhbXBvcyBkZSBlbnRyYWRhLFxyXG4gICAgICogZm9ybmVjZW5kbyBpbnN0cnXDp8O1ZXMgYWRpY2lvbmFpcyBhbyB1c3XDoXJpby5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAnJ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGVscFRleHQgPSBpbnB1dCgnJyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbGEgYSB2aXN1YWxpemHDp8OjbyBkbyBlc3RhZG8gZGUgZXJybyBkbyBjb21wb25lbnRlLlxyXG4gICAgICogUXVhbmRvIGB0cnVlYCwgZXhpYmUgYm9yZGEgdmVybWVsaGEgbm9zIGNhbXBvcyBkZSBlbnRyYWRhLlxyXG4gICAgICogTm9ybWFsbWVudGUgdmluY3VsYWRvIGFvIGVzdGFkbyBgaW52YWxpZCAmJiBkaXJ0eWAgZG8gYEZvcm1Db250cm9sYC5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgaHRtbFxyXG4gICAgICogW2ludmFsaWRdPVwiKGNvbnRyb2w/LmludmFsaWQgJiYgY29udHJvbD8uZGlydHkpIHx8IGZhbHNlXCJcclxuICAgICAqIGBgYFxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGludmFsaWQgPSBpbnB1dChmYWxzZSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbGEgbyBlc3RhZG8gZGVzYWJpbGl0YWRvIGRvIGNvbXBvbmVudGUgdmlhIHR3by13YXkgYmluZGluZy5cclxuICAgICAqIFF1YW5kbyBgdHJ1ZWAsIHRvZG9zIG9zIGNhbXBvcyBmaWNhbSBkZXNhYmlsaXRhZG9zIGUgYSBpbnRlcmHDp8OjbyBkbyB1c3XDoXJpbyDDqSBibG9xdWVhZGEuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpc2FibGVkID0gbW9kZWwoZmFsc2UpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIHRvZG9zIG9zIGNhbXBvcyBkbyBjw7NkaWdvIFBJTiBzw6NvIHByZWVuY2hpZG9zLlxyXG4gICAgICogRW1pdGUgbyBjw7NkaWdvIGNvbXBsZXRvIGNvbW8gc3RyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGBodG1sXHJcbiAgICAgKiAoY29kZUZpbGxlZCk9XCJvbkNvZGVGaWxsZWQoJGV2ZW50KVwiXHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvZGVGaWxsZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNpZ25hbCBjb20gb3MgdmFsb3JlcyBhdHVhaXMgZGUgY2FkYSBjYW1wbyBkZSBlbnRyYWRhLlxyXG4gICAgICogTyBjb21wcmltZW50byBkbyBhcnJheSBjb3JyZXNwb25kZSBhbyB2YWxvciBkbyBpbnB1dCBgbGVuZ3RoYC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlucHV0cyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2lnbmFsIHRyYWNraW5nIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB0b3VjaGVkIGJ5IHRoZSB1c2VyLlxyXG4gICAgICogU2V0IHRvIHRydWUgd2hlbiB0aGUgbGFzdCBpbnB1dCBmaWVsZCBsb3NlcyBmb2N1cyAoYmx1ciBldmVudCkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0b3VjaGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgYWxsIFBJTiBjb2RlIGZpZWxkcyBhcmUgZmlsbGVkLlxyXG4gICAgICogVHJ1ZSBvbmx5IHdoZW4gZXZlcnkgZmllbGQgY29udGFpbnMgYSBub24tZW1wdHkgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0NvbXBsZXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbnB1dHMoKS5ldmVyeSgoaW5wdXQpID0+IGlucHV0ICE9PSAnJykpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcHV0ZWQgc2lnbmFsIGNvbnRhaW5pbmcgdGhlIGNvbXBsZXRlIFBJTiBjb2RlIGFzIGEgam9pbmVkIHN0cmluZy5cclxuICAgICAqIFJldHVybnMgZW1wdHkgc3RyaW5nIGlmIG5vIGlucHV0cyBhcmUgZmlsbGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY3VycmVudFZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbnB1dHMoKS5qb2luKCcnKSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWduYWwgdHJhY2tpbmcgaWYgdGhlIGNvbXBvbmVudCBob3N0IGhhcyB0aGUgbmctaW52YWxpZCBjbGFzcyBmcm9tIEZvcm1Db250cm9sIHZhbGlkYXRvcnMuXHJcbiAgICAgKiBVcGRhdGVkIHJlYWN0aXZlbHkgd2hlbmV2ZXIgdGhlIGludmFsaWQgc3RhdGUgY2hhbmdlcy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYXNOZ0ludmFsaWRDbGFzcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWduYWwgdHJhY2tpbmcgaWYgdGhlIEZvcm1Db250cm9sIGlzIGRpcnR5LlxyXG4gICAgICogVXBkYXRlZCByZWFjdGl2ZWx5IHdoZW5ldmVyIHRoZSBkaXJ0eSBzdGF0ZSBjaGFuZ2VzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGlzQ29udHJvbERpcnR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBpbmRpY2F0aW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHNob3cgZXJyb3Igc3RhdGUuXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWY6XHJcbiAgICAgKiAtIFRoZSBgaW52YWxpZGAgaW5wdXQgaXMgdHJ1ZSwgT1JcclxuICAgICAqIC0gVGhlIGNvbXBvbmVudCBoYXMgdGhlIGBuZy1pbnZhbGlkYCBjbGFzcyBBTkQgdGhlIEZvcm1Db250cm9sIGlzIGRpcnR5ICh0b3VjaGVkL21vZGlmaWVkKVxyXG4gICAgICogVGhpcyBlbnN1cmVzIGVycm9ycyBhcmUgb25seSBzaG93biB0byB0aGUgdXNlciBhZnRlciB0aGV5J3ZlIGludGVyYWN0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYXNFcnJvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW52YWxpZCgpIHx8ICh0aGlzLmhhc05nSW52YWxpZENsYXNzKCkgJiYgdGhpcy5pc0NvbnRyb2xEaXJ0eSgpKSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWaWV3Q2hpbGRyZW4gcmVmZXJlbmNlIHRvIGFsbCBpbnB1dCBET00gZWxlbWVudHMuXHJcbiAgICAgKiBVc2VkIGZvciBET00gbWFuaXB1bGF0aW9uIChmb2N1cywgc2VsZWN0aW9uKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBpbklucHV0cyA9IHZpZXdDaGlsZHJlbjxFbGVtZW50UmVmPigncGluSW5wdXQnKTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuICAgIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgZWZmZWN0KFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld0xlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BJTiBjb2RlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDEnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dHMoKS5sZW5ndGggIT09IG5ld0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNldChBcnJheS5mcm9tKHsgbGVuZ3RoOiBuZXdMZW5ndGggfSwgKCkgPT4gJycpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIE1vbml0b3IgbmctaW52YWxpZCBhbmQgbmctZGlydHkgY2xhc3NlcyBvbiB0aGUgaG9zdCBlbGVtZW50IGZvciByZWFjdGl2ZSBlcnJvciBzdGF0ZVxyXG4gICAgICAgIGVmZmVjdChcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gQWNjZXNzIGlucHV0cyB0byBjcmVhdGUgZGVwZW5kZW5jeSBvbiBjaGFuZ2VzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0cygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZGVmZXIgdGhlIGNoZWNrIHRvIG5leHQgdGljayB0byBlbnN1cmUgQW5ndWxhciBoYXMgdXBkYXRlZCBET00gY2xhc3Nlc1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzTmdJbnZhbGlkID0gaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNEaXJ0eSA9IGhvc3RFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctZGlydHknKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNOZ0ludmFsaWRDbGFzcy5zZXQoaGFzTmdJbnZhbGlkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udHJvbERpcnR5LnNldChpc0RpcnR5KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENsZWFudXAgdGltZW91dCBvbiBjb21wb25lbnQgZGVzdHJveVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGlucHV0IGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cclxuICAgICAqIFZhbGlkYXRlcyBjaGFyYWN0ZXIgaW5wdXQsIHByZXZlbnRzIG11bHRpcGxlIGNoYXJhY3RlcnMgcGVyIGZpZWxkLFxyXG4gICAgICogYXV0by1hZHZhbmNlcyB0byBuZXh0IGZpZWxkIHdoZW4gY2hhcmFjdGVyIGlzIGVudGVyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGlucHV0IGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbklucHV0KGluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAxIHx8ICh2YWx1ZSAmJiAhdGhpcy5pc1ZhbGlkQ2hhcmFjdGVyKHZhbHVlKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhcklucHV0KHRhcmdldCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4LCB2YWx1ZSk7XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSAmJiBpbmRleCA8IHRoaXMubGVuZ3RoKCkgLSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCArIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29kZUZpbGxlZC5lbWl0KHRoaXMuY3VycmVudFZhbHVlKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIG9uIFBJTiBjb2RlIGZpZWxkcy5cclxuICAgICAqIFN1cHBvcnRzIGFycm93IG5hdmlnYXRpb24gKGxlZnQvcmlnaHQpIGFuZCBiYWNrc3BhY2Uga2V5LlxyXG4gICAgICpcclxuICAgICAqIEtleWJvYXJkIGJlaGF2aW9yOlxyXG4gICAgICogLSBBcnJvd1JpZ2h0OiBNb3ZlIGZvY3VzIHRvIG5leHQgZmllbGRcclxuICAgICAqIC0gQXJyb3dMZWZ0OiBNb3ZlIGZvY3VzIHRvIHByZXZpb3VzIGZpZWxkXHJcbiAgICAgKiAtIEJhY2tzcGFjZTogQ2xlYXIgY3VycmVudCBvciBwcmV2aW91cyBmaWVsZCBhbmQgYWRqdXN0IGZvY3VzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGtleWJvYXJkIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbktleURvd24oaW5kZXg6IG51bWJlciwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmxlbmd0aCgpIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4ICsgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVCYWNrc3BhY2UoaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBwYXN0ZSAoY2xpcGJvYXJkKSBldmVudHMgb24gUElOIGNvZGUgZmllbGRzLlxyXG4gICAgICogRXh0cmFjdHMgdmFsaWQgY2hhcmFjdGVycyBmcm9tIHBhc3RlZCBjb250ZW50LCBmaWx0ZXJzIGJ5IGNoYXJhY3RlciB0eXBlLFxyXG4gICAgICogYW5kIGF1dG9tYXRpY2FsbHkgdHJ1bmNhdGVzIHRvIG1hdGNoIGZpZWxkIGxlbmd0aC5cclxuICAgICAqXHJcbiAgICAgKiBCZWhhdmlvcjpcclxuICAgICAqIC0gRmlsdGVycyBjaGFyYWN0ZXJzIGJhc2VkIG9uIGBhbHBoYW51bWVyaWNgIHNldHRpbmdcclxuICAgICAqIC0gVHJ1bmNhdGVzIHRvIG1heGltdW0gZmllbGQgY291bnRcclxuICAgICAqIC0gRmlsbHMgYXZhaWxhYmxlIGZpZWxkcyB3aXRoIHBhc3RlZCBjb250ZW50XHJcbiAgICAgKiAtIEVtaXRzIGNvZGVGaWxsZWQgZXZlbnQgaWYgYWxsIGZpZWxkcyBhcmUgZmlsbGVkXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGNsaXBib2FyZCBldmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbGlkQ2hhcnMgPSB0aGlzLmV4dHJhY3RWYWxpZENoYXJhY3RlcnNGcm9tUGFzdGUoZXZlbnQpO1xyXG5cclxuICAgICAgICBpZiAodmFsaWRDaGFycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlsbGVkSW5wdXRzID0gWy4uLnZhbGlkQ2hhcnMsIC4uLkFycmF5KHRoaXMubGVuZ3RoKCkgLSB2YWxpZENoYXJzLmxlbmd0aCkuZmlsbCgnJyldO1xyXG5cclxuICAgICAgICB0aGlzLmlucHV0cy5zZXQoZmlsbGVkSW5wdXRzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcblxyXG4gICAgICAgIC8vIEZvY3VzIG9uIHRoZSBmaXJzdCBlbXB0eSBpbnB1dCBvciB0aGUgbGFzdCBmaWxsZWQgaW5wdXQgaWYgYWxsIGFyZSBmaWxsZWRcclxuICAgICAgICBjb25zdCBmaXJzdEVtcHR5SW5kZXggPSB2YWxpZENoYXJzLmxlbmd0aCA8IHRoaXMubGVuZ3RoKCkgPyB2YWxpZENoYXJzLmxlbmd0aCA6IHZhbGlkQ2hhcnMubGVuZ3RoIC0gMTtcclxuICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoZmlyc3RFbXB0eUluZGV4KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29kZUZpbGxlZC5lbWl0KHRoaXMuY3VycmVudFZhbHVlKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgZm9jdXMgZXZlbnQgb24gUElOIGNvZGUgZmllbGRzLlxyXG4gICAgICogU2VsZWN0cyBhbGwgdGV4dCBpbiB0aGUgaW5wdXQgZmllbGQgd2hlbiBmb2N1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRm9jdXMoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5waW5JbnB1dHMoKVtpbmRleF07XHJcbiAgICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBibHVyIGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cclxuICAgICAqIE1hcmtzIHRoZSBjb21wb25lbnQgYXMgdG91Y2hlZCB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzLlxyXG4gICAgICogQWxzbyBub3RpZmllcyB0aGUgcmVnaXN0ZXJlZCBvblRvdWNoZWQgY2FsbGJhY2sgZm9yIEZvcm1Db250cm9sIGludGVncmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQmx1cihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgLy8gT25seSBtYXJrIGFzIHRvdWNoZWQgd2hlbiB0aGUgTEFTVCBpbnB1dCBsb3NlcyBmb2N1c1xyXG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5sZW5ndGgoKSAtIFBpbkNvZGVGaWVsZENvbXBvbmVudC5MQVNUX0lOREVYX09GRlNFVCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvdWNoZWQuc2V0KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgaW5wdXQgdmFsdWUgYXQgc3BlY2lmaWVkIGluZGV4IGFuZCBhZGp1c3RzIGZvY3VzIGFjY29yZGluZ2x5LlxyXG4gICAgICogSWYgY3VycmVudCBmaWVsZCBpcyBlbXB0eSwgbW92ZXMgdG8gcHJldmlvdXMgZmllbGQgYW5kIGNsZWFycyBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZUJhY2tzcGFjZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XHJcblxyXG4gICAgICAgIC8vIElmIGN1cnJlbnQgaW5wdXQgaGFzIHZhbHVlLCBjbGVhciBpdFxyXG4gICAgICAgIGlmIChjdXJyZW50SW5wdXRzW2luZGV4XSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldElucHV0QXRJbmRleChpbmRleCwgUGluQ29kZUZpZWxkQ29tcG9uZW50LkVNUFRZX1ZBTFVFKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBjbGVhciBwcmV2aW91cyBpbnB1dCBhbmQgZm9jdXMgaXRcclxuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4IC0gMSwgUGluQ29kZUZpZWxkQ29tcG9uZW50LkVNUFRZX1ZBTFVFKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4IC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWUgYXQgYSBzcGVjaWZpYyBpbnB1dCBmaWVsZCBpbmRleCBhbmQgdXBkYXRlcyB0aGUgZm9ybSB2YWx1ZS5cclxuICAgICAqIFVwZGF0ZXMgdGhlIHNpZ25hbCBhbmQgdHJpZ2dlcnMgdGhlIGNoYW5nZSBkZXRlY3Rpb24gdmlhIG9uQ2hhbmdlIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IGluIHRoZSBmaWVsZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldElucHV0QXRJbmRleChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XHJcbiAgICAgICAgY3VycmVudElucHV0c1tpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmlucHV0cy5zZXQoWy4uLmN1cnJlbnRJbnB1dHNdKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb2N1c2VzIG9uIGFuZCBzZWxlY3RzIHRleHQgaW4gdGhlIGlucHV0IGZpZWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXHJcbiAgICAgKiBVc2VzIHF1ZXVlTWljcm90YXNrIHRvIGVuc3VyZSBET00gaXMgdXBkYXRlZCBiZWZvcmUgZm9jdXNpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmb2N1c0FuZFNlbGVjdElucHV0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5waW5JbnB1dHMoKVtpbmRleF07XHJcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIHRoZSB2YWx1ZSBvZiBhbiBpbnB1dCBlbGVtZW50LlxyXG4gICAgICogVXNlZCBmb3IgaW5wdXQgdmFsaWRhdGlvbiB0byByZWplY3QgaW52YWxpZCBjaGFyYWN0ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIEhUTUwgaW5wdXQgZWxlbWVudCB0byBjbGVhclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNsZWFySW5wdXQodGFyZ2V0OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRyYWN0cyB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gcGFzdGVkIGNvbnRlbnQuXHJcbiAgICAgKiBGaWx0ZXJzIGJhc2VkIG9uIGFscGhhbnVtZXJpYyBzZXR0aW5nIGFuZCBsaW1pdHMgdG8gY29tcG9uZW50J3MgbGVuZ3RoLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgY2xpcGJvYXJkIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gdGhlIHBhc3RlZCBjb250ZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXh0cmFjdFZhbGlkQ2hhcmFjdGVyc0Zyb21QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IChldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICByZXR1cm4gcGFzdGVkVGV4dFxyXG4gICAgICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGNoYXIpID0+IHRoaXMuaXNWYWxpZENoYXJhY3RlcihjaGFyKSlcclxuICAgICAgICAgICAgLnNsaWNlKDAsIHRoaXMubGVuZ3RoKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdGVzIGlmIGEgY2hhcmFjdGVyIGlzIGFjY2VwdGFibGUgYmFzZWQgb24gY29tcG9uZW50IGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKiBGb3IgbnVtZXJpYyBtb2RlLCBhY2NlcHRzIG9ubHkgZGlnaXRzIDAtOS5cclxuICAgICAqIEZvciBhbHBoYW51bWVyaWMgbW9kZSwgYWNjZXB0cyBhbnkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0gY2hhciAtIFRoZSBjaGFyYWN0ZXIgdG8gdmFsaWRhdGVcclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgY2hhcmFjdGVyIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc1ZhbGlkQ2hhcmFjdGVyKGNoYXI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmFscGhhbnVtZXJpYygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGFyLnRyaW0oKS5sZW5ndGggPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gL15bMC05XSQvLnRlc3QoY2hhcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBmb3JtIHZhbHVlIGJ5IGNhbGxpbmcgdGhlIG9uQ2hhbmdlIGNhbGxiYWNrIHJlZ2lzdGVyZWQgYnkgRm9ybUNvbnRyb2wuXHJcbiAgICAgKiBUaGlzIGVuc3VyZXMgdGhlIHJlYWN0aXZlIGZvcm0gc3RheXMgc3luY2hyb25pemVkIHdpdGggY29tcG9uZW50IHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlVmFsdWUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxyXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB0byB3cml0ZSBhIHZhbHVlIHRvIHRoZSBjb21wb25lbnQuXHJcbiAgICAgKiBPbmx5IGFjY2VwdHMgc3RyaW5nIHZhbHVlcyB3aXRoIGxlbmd0aCBtYXRjaGluZyB0aGUgY29tcG9uZW50J3MgbGVuZ3RoIHNldHRpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyaXRlICh0eXBpY2FsbHkgZnJvbSB0aGUgRm9ybUNvbnRyb2wpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUubGVuZ3RoID09PSB0aGlzLmxlbmd0aCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0cy5zZXQoc3RyaW5nVmFsdWUuc3BsaXQoJycpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxyXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB3aGVuIHZhbHVlIGNoYW5nZXMuXHJcbiAgICAgKiBSZWdpc3RlcnMgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgdmFsdWUgY2hhbmdlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBjb21wb25lbnQgdmFsdWUgY2hhbmdlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cclxuICAgICAqIENhbGxlZCBieSB0aGUgRm9ybUNvbnRyb2wgdG8gcmVnaXN0ZXIgdGhlIHRvdWNoZWQgY2FsbGJhY2suXHJcbiAgICAgKiBUaGUgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGNvbXBvbmVudCBpcyB0b3VjaGVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cclxuICAgICAqIENhbGxlZCBieSB0aGUgRm9ybUNvbnRyb2wgdG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LlxyXG4gICAgICogVXBkYXRlcyB0aGUgZGlzYWJsZWQgbW9kZWwgdG8gcmVmbGVjdCB0aGUgZm9ybSdzIGRpc2FibGVkIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkIC0gV2hldGhlciB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBkaXNhYmxlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZC5zZXQoaXNEaXNhYmxlZCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdhcC14c21hbGwgZmxleCBmbGV4LWNvbFwiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmbGV4IGdhcC0yXCJcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlBJTiBjb2RlIGlucHV0XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImhlbHBUZXh0KCkgPyAncGluLWhlbHAtdGV4dCcgOiBudWxsXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGlucHV0IG9mIGlucHV0cygpOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI3BpbklucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xMiB3LTEyIHJvdW5kZWQteGJpZyBib3JkZXIgdGV4dC1jZW50ZXIgdGV4dC1sZyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1jcml0aWNhbGl0eS1yZWQgZm9jdXM6cmluZy1jcml0aWNhbGl0eS1yZWQnOiBoYXNFcnJvcigpLFxuICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWdyYXlzY2FsZS0zMCBmb2N1czpib3JkZXItcHJpbWFyeSBmb2N1czpyaW5nLXByaW1hcnknOiAhaGFzRXJyb3IoKSxcbiAgICAgICAgICAgICAgICAgICAgJ2N1cnNvci1ub3QtYWxsb3dlZCBiZy1ncmF5c2NhbGUtMTAgdGV4dC1ncmF5c2NhbGUtNjAnOiBkaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgICAgICAnYmctZ3JheXNjYWxlLTAgdGV4dC1ncmF5c2NhbGUtMTAwIGZvY3VzOm91dGxpbmUtbm9uZSc6ICFkaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpbnB1dFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLm1heGxlbmd0aF09XCIxXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pbnB1dG1vZGVdPVwiYWxwaGFudW1lcmljKCkgPyAndGV4dCcgOiAnbnVtZXJpYydcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgIGFscGhhbnVtZXJpYygpXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpbl9jb2RlX2NoYXJhY3Rlcl9pbmRleF9vZl90b3RhbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgaW5kZXg6IGkgKyAxLCBsZW5ndGg6IGxlbmd0aCgpIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpbl9jb2RlX2RpZ2l0X2luZGV4X29mX3RvdGFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBpbmRleDogaSArIDEsIGxlbmd0aDogbGVuZ3RoKCkgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGVscFRleHQoKSA/ICdwaW4taGVscC10ZXh0JyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dChpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoaSlcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cihpKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGhlbHBUZXh0KCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9XCJwaW4taGVscC10ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXQtc21hbGwgdGV4dC1zbSB0ZXh0LWdyYXlzY2FsZS02MFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IGhlbHBUZXh0KCkgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG5cbiJdfQ==
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFFdEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBY0gsTUFBTSxPQUFPLHFCQUFxQjtJQUN0QixNQUFNLENBQVUsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sQ0FBVSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBRXpDOzs7OztPQUtHO0lBQ0ksTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6Qjs7Ozs7T0FLRztJQUNJLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbkM7Ozs7O09BS0c7SUFDSSxRQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUUs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QUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgZm9yd2FyZFJlZixcclxuICAgIHZpZXdDaGlsZHJlbixcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBzaWduYWwsXHJcbiAgICBpbnB1dCxcclxuICAgIG91dHB1dCxcclxuICAgIGVmZmVjdCxcclxuICAgIGNvbXB1dGVkLFxyXG4gICAgbW9kZWwsXHJcbiAgICBpbmplY3QsXHJcbiAgICBEZXN0cm95UmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgZW50cmFkYSBkZSBjw7NkaWdvIFBJTi9PVFAgY29tIGNhbXBvcyBpbmRpdmlkdWFpcyBwYXJhIGNhZGEgZMOtZ2l0by5cclxuICogSW1wbGVtZW50YSB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9IHBhcmEgaW50ZWdyYcOnw6NvIG5hdGl2YSBjb20gUmVhY3RpdmUgRm9ybXNcclxuICogZSBUZW1wbGF0ZS1kcml2ZW4gRm9ybXMgZG8gQW5ndWxhci5cclxuICpcclxuICogRnVuY2lvbmFsaWRhZGVzOlxyXG4gKiAtIENhbXBvcyBzZXBhcmFkb3MgZSBuYXZlZ8OhdmVpcyBwYXJhIGNhZGEgZMOtZ2l0byBkbyBjw7NkaWdvXHJcbiAqIC0gQ29tcHJpbWVudG8gY29uZmlndXLDoXZlbCB2aWEgaW5wdXQgYGxlbmd0aGBcclxuICogLSBTdXBvcnRlIGEgZW50cmFkYSBudW3DqXJpY2Egb3UgYWxmYW51bcOpcmljYVxyXG4gKiAtIE5hdmVnYcOnw6NvIHBvciB0ZWNsYWRvIChzZXRhcywgYmFja3NwYWNlKVxyXG4gKiAtIFN1cG9ydGUgYSBjb2xhciAocGFzdGUpIGNvbSB0cnVuY2FtZW50byBhdXRvbcOhdGljbyBhbyB0YW1hbmhvIGRlZmluaWRvXHJcbiAqIC0gRXN0YWRvIGRlIGVycm8gdmlhIGlucHV0IGBpbnZhbGlkYFxyXG4gKiAtIEFjZXNzaWJpbGlkYWRlIGNvbXBsZXRhIGNvbSBBUklBIGxhYmVscyBlIHJvbGVzIHNlbcOibnRpY29zXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAqICAgPHMtcGluLWNvZGUtZmllbGRcclxuICogICAgIGZvcm1Db250cm9sTmFtZT1cImNvZGVcIlxyXG4gKiAgICAgW2xlbmd0aF09XCI2XCJcclxuICogICAgIFthbHBoYW51bWVyaWNdPVwiZmFsc2VcIlxyXG4gKiAgICAgW2ludmFsaWRdPVwiKGZvcm0uZ2V0KCdjb2RlJyk/LmludmFsaWQgJiYgZm9ybS5nZXQoJ2NvZGUnKT8uZGlydHkpIHx8IGZhbHNlXCJcclxuICogICAgIGhlbHBUZXh0PVwiRGlnaXRlIHNldSBjw7NkaWdvIGRlIDYgZMOtZ2l0b3NcIlxyXG4gKiAgICAgKGNvZGVGaWxsZWQpPVwib25Db2RlRmlsbGVkKCRldmVudClcIj5cclxuICogICA8L3MtcGluLWNvZGUtZmllbGQ+XHJcbiAqIDwvZm9ybT5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBjYXRlZ29yeSBJbnB1dHNcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzLXBpbi1jb2RlLWZpZWxkJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9waW4tY29kZS1maWVsZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW05nQ2xhc3MsIFRyYW5zbGF0ZU1vZHVsZV0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQaW5Db2RlRmllbGRDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBpbkNvZGVGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExBU1RfSU5ERVhfT0ZGU0VUID0gMTtcclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEVNUFRZX1ZBTFVFID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTsO6bWVybyBkZSBjYW1wb3MgZGUgZW50cmFkYSAoY29tcHJpbWVudG8gZG8gY8OzZGlnbyBQSU4pLlxyXG4gICAgICogRGV2ZSBzZXIgYW8gbWVub3MgMS5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCA2XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBsZW5ndGggPSBpbnB1dCg2KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlIGVudHJhZGEgYWxmYW51bcOpcmljYSBlIGRlIGNhcmFjdGVyZXMgZXNwZWNpYWlzLlxyXG4gICAgICogUXVhbmRvIGBmYWxzZWAsIGFjZWl0YSBhcGVuYXMgZMOtZ2l0b3MgbnVtw6lyaWNvcyAoMOKAkzkpLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhbHBoYW51bWVyaWMgPSBpbnB1dChmYWxzZSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG8gZGUgYWp1ZGEgZXhpYmlkbyBhYmFpeG8gZG9zIGNhbXBvcyBkZSBlbnRyYWRhLFxyXG4gICAgICogZm9ybmVjZW5kbyBpbnN0cnXDp8O1ZXMgYWRpY2lvbmFpcyBhbyB1c3XDoXJpby5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAnJ1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGVscFRleHQgPSBpbnB1dCgnJyk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbGEgYSB2aXN1YWxpemHDp8OjbyBkbyBlc3RhZG8gZGUgZXJybyBkbyBjb21wb25lbnRlLlxyXG4gICAgICogUXVhbmRvIGB0cnVlYCwgZXhpYmUgYm9yZGEgdmVybWVsaGEgbm9zIGNhbXBvcyBkZSBlbnRyYWRhLlxyXG4gICAgICogTm9ybWFsbWVudGUgdmluY3VsYWRvIGFvIGVzdGFkbyBgaW52YWxpZCAmJiBkaXJ0eWAgZG8gYEZvcm1Db250cm9sYC5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgaHRtbFxyXG4gICAgICogW2ludmFsaWRdPVwiKGNvbnRyb2w/LmludmFsaWQgJiYgY29udHJvbD8uZGlydHkpIHx8IGZhbHNlXCJcclxuICAgICAqIGBgYFxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGludmFsaWQgPSBpbnB1dChmYWxzZSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udHJvbGEgbyBlc3RhZG8gZGVzYWJpbGl0YWRvIGRvIGNvbXBvbmVudGUgdmlhIHR3by13YXkgYmluZGluZy5cclxuICAgICAqIFF1YW5kbyBgdHJ1ZWAsIHRvZG9zIG9zIGNhbXBvcyBmaWNhbSBkZXNhYmlsaXRhZG9zIGUgYSBpbnRlcmHDp8OjbyBkbyB1c3XDoXJpbyDDqSBibG9xdWVhZGEuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpc2FibGVkID0gbW9kZWwoZmFsc2UpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIHRvZG9zIG9zIGNhbXBvcyBkbyBjw7NkaWdvIFBJTiBzw6NvIHByZWVuY2hpZG9zLlxyXG4gICAgICogRW1pdGUgbyBjw7NkaWdvIGNvbXBsZXRvIGNvbW8gc3RyaW5nLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGBodG1sXHJcbiAgICAgKiAoY29kZUZpbGxlZCk9XCJvbkNvZGVGaWxsZWQoJGV2ZW50KVwiXHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvZGVGaWxsZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFNpZ25hbCBjb20gb3MgdmFsb3JlcyBhdHVhaXMgZGUgY2FkYSBjYW1wbyBkZSBlbnRyYWRhLlxyXG4gICAgICogTyBjb21wcmltZW50byBkbyBhcnJheSBjb3JyZXNwb25kZSBhbyB2YWxvciBkbyBpbnB1dCBgbGVuZ3RoYC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGlucHV0cyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2lnbmFsIHRyYWNraW5nIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB0b3VjaGVkIGJ5IHRoZSB1c2VyLlxyXG4gICAgICogU2V0IHRvIHRydWUgd2hlbiB0aGUgbGFzdCBpbnB1dCBmaWVsZCBsb3NlcyBmb2N1cyAoYmx1ciBldmVudCkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0b3VjaGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgYWxsIFBJTiBjb2RlIGZpZWxkcyBhcmUgZmlsbGVkLlxyXG4gICAgICogVHJ1ZSBvbmx5IHdoZW4gZXZlcnkgZmllbGQgY29udGFpbnMgYSBub24tZW1wdHkgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0NvbXBsZXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbnB1dHMoKS5ldmVyeSgoaW5wdXQpID0+IGlucHV0ICE9PSAnJykpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29tcHV0ZWQgc2lnbmFsIGNvbnRhaW5pbmcgdGhlIGNvbXBsZXRlIFBJTiBjb2RlIGFzIGEgam9pbmVkIHN0cmluZy5cclxuICAgICAqIFJldHVybnMgZW1wdHkgc3RyaW5nIGlmIG5vIGlucHV0cyBhcmUgZmlsbGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY3VycmVudFZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbnB1dHMoKS5qb2luKCcnKSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWduYWwgdHJhY2tpbmcgaWYgdGhlIGNvbXBvbmVudCBob3N0IGhhcyB0aGUgbmctaW52YWxpZCBjbGFzcyBmcm9tIEZvcm1Db250cm9sIHZhbGlkYXRvcnMuXHJcbiAgICAgKiBVcGRhdGVkIHJlYWN0aXZlbHkgd2hlbmV2ZXIgdGhlIGludmFsaWQgc3RhdGUgY2hhbmdlcy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYXNOZ0ludmFsaWRDbGFzcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaWduYWwgdHJhY2tpbmcgaWYgdGhlIEZvcm1Db250cm9sIGlzIGRpcnR5LlxyXG4gICAgICogVXBkYXRlZCByZWFjdGl2ZWx5IHdoZW5ldmVyIHRoZSBkaXJ0eSBzdGF0ZSBjaGFuZ2VzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGlzQ29udHJvbERpcnR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBpbmRpY2F0aW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHNob3cgZXJyb3Igc3RhdGUuXHJcbiAgICAgKiBSZXR1cm5zIHRydWUgaWY6XHJcbiAgICAgKiAtIFRoZSBgaW52YWxpZGAgaW5wdXQgaXMgdHJ1ZSwgT1JcclxuICAgICAqIC0gVGhlIGNvbXBvbmVudCBoYXMgdGhlIGBuZy1pbnZhbGlkYCBjbGFzcyBBTkQgdGhlIEZvcm1Db250cm9sIGlzIGRpcnR5ICh0b3VjaGVkL21vZGlmaWVkKVxyXG4gICAgICogVGhpcyBlbnN1cmVzIGVycm9ycyBhcmUgb25seSBzaG93biB0byB0aGUgdXNlciBhZnRlciB0aGV5J3ZlIGludGVyYWN0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYXNFcnJvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW52YWxpZCgpIHx8ICh0aGlzLmhhc05nSW52YWxpZENsYXNzKCkgJiYgdGhpcy5pc0NvbnRyb2xEaXJ0eSgpKSk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWaWV3Q2hpbGRyZW4gcmVmZXJlbmNlIHRvIGFsbCBpbnB1dCBET00gZWxlbWVudHMuXHJcbiAgICAgKiBVc2VkIGZvciBET00gbWFuaXB1bGF0aW9uIChmb2N1cywgc2VsZWN0aW9uKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBpbklucHV0cyA9IHZpZXdDaGlsZHJlbjxFbGVtZW50UmVmPigncGluSW5wdXQnKTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XHJcblxyXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuICAgIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgZWZmZWN0KFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld0xlbmd0aCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1BJTiBjb2RlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDEnKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dHMoKS5sZW5ndGggIT09IG5ld0xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNldChBcnJheS5mcm9tKHsgbGVuZ3RoOiBuZXdMZW5ndGggfSwgKCkgPT4gJycpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIE1vbml0b3IgbmctaW52YWxpZCBhbmQgbmctZGlydHkgY2xhc3NlcyBvbiB0aGUgaG9zdCBlbGVtZW50IGZvciByZWFjdGl2ZSBlcnJvciBzdGF0ZVxyXG4gICAgICAgIGVmZmVjdChcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gQWNjZXNzIGlucHV0cyB0byBjcmVhdGUgZGVwZW5kZW5jeSBvbiBjaGFuZ2VzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0cygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZGVmZXIgdGhlIGNoZWNrIHRvIG5leHQgdGljayB0byBlbnN1cmUgQW5ndWxhciBoYXMgdXBkYXRlZCBET00gY2xhc3Nlc1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzTmdJbnZhbGlkID0gaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNEaXJ0eSA9IGhvc3RFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctZGlydHknKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNOZ0ludmFsaWRDbGFzcy5zZXQoaGFzTmdJbnZhbGlkKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udHJvbERpcnR5LnNldChpc0RpcnR5KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENsZWFudXAgdGltZW91dCBvbiBjb21wb25lbnQgZGVzdHJveVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIGlucHV0IGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cclxuICAgICAqIFZhbGlkYXRlcyBjaGFyYWN0ZXIgaW5wdXQsIHByZXZlbnRzIG11bHRpcGxlIGNoYXJhY3RlcnMgcGVyIGZpZWxkLFxyXG4gICAgICogYXV0by1hZHZhbmNlcyB0byBuZXh0IGZpZWxkIHdoZW4gY2hhcmFjdGVyIGlzIGVudGVyZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGlucHV0IGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbklucHV0KGluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAxIHx8ICh2YWx1ZSAmJiAhdGhpcy5pc1ZhbGlkQ2hhcmFjdGVyKHZhbHVlKSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhcklucHV0KHRhcmdldCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4LCB2YWx1ZSk7XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZSAmJiBpbmRleCA8IHRoaXMubGVuZ3RoKCkgLSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCArIDEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29kZUZpbGxlZC5lbWl0KHRoaXMuY3VycmVudFZhbHVlKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIG9uIFBJTiBjb2RlIGZpZWxkcy5cclxuICAgICAqIFN1cHBvcnRzIGFycm93IG5hdmlnYXRpb24gKGxlZnQvcmlnaHQpIGFuZCBiYWNrc3BhY2Uga2V5LlxyXG4gICAgICpcclxuICAgICAqIEtleWJvYXJkIGJlaGF2aW9yOlxyXG4gICAgICogLSBBcnJvd1JpZ2h0OiBNb3ZlIGZvY3VzIHRvIG5leHQgZmllbGRcclxuICAgICAqIC0gQXJyb3dMZWZ0OiBNb3ZlIGZvY3VzIHRvIHByZXZpb3VzIGZpZWxkXHJcbiAgICAgKiAtIEJhY2tzcGFjZTogQ2xlYXIgY3VycmVudCBvciBwcmV2aW91cyBmaWVsZCBhbmQgYWRqdXN0IGZvY3VzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxyXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGtleWJvYXJkIGV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvbktleURvd24oaW5kZXg6IG51bWJlciwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmxlbmd0aCgpIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4ICsgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVCYWNrc3BhY2UoaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBwYXN0ZSAoY2xpcGJvYXJkKSBldmVudHMgb24gUElOIGNvZGUgZmllbGRzLlxyXG4gICAgICogRXh0cmFjdHMgdmFsaWQgY2hhcmFjdGVycyBmcm9tIHBhc3RlZCBjb250ZW50LCBmaWx0ZXJzIGJ5IGNoYXJhY3RlciB0eXBlLFxyXG4gICAgICogYW5kIGF1dG9tYXRpY2FsbHkgdHJ1bmNhdGVzIHRvIG1hdGNoIGZpZWxkIGxlbmd0aC5cclxuICAgICAqXHJcbiAgICAgKiBCZWhhdmlvcjpcclxuICAgICAqIC0gRmlsdGVycyBjaGFyYWN0ZXJzIGJhc2VkIG9uIGBhbHBoYW51bWVyaWNgIHNldHRpbmdcclxuICAgICAqIC0gVHJ1bmNhdGVzIHRvIG1heGltdW0gZmllbGQgY291bnRcclxuICAgICAqIC0gRmlsbHMgYXZhaWxhYmxlIGZpZWxkcyB3aXRoIHBhc3RlZCBjb250ZW50XHJcbiAgICAgKiAtIEVtaXRzIGNvZGVGaWxsZWQgZXZlbnQgaWYgYWxsIGZpZWxkcyBhcmUgZmlsbGVkXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGNsaXBib2FyZCBldmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHZhbGlkQ2hhcnMgPSB0aGlzLmV4dHJhY3RWYWxpZENoYXJhY3RlcnNGcm9tUGFzdGUoZXZlbnQpO1xyXG5cclxuICAgICAgICBpZiAodmFsaWRDaGFycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlsbGVkSW5wdXRzID0gWy4uLnZhbGlkQ2hhcnMsIC4uLkFycmF5KHRoaXMubGVuZ3RoKCkgLSB2YWxpZENoYXJzLmxlbmd0aCkuZmlsbCgnJyldO1xyXG5cclxuICAgICAgICB0aGlzLmlucHV0cy5zZXQoZmlsbGVkSW5wdXRzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcblxyXG4gICAgICAgIC8vIEZvY3VzIG9uIHRoZSBmaXJzdCBlbXB0eSBpbnB1dCBvciB0aGUgbGFzdCBmaWxsZWQgaW5wdXQgaWYgYWxsIGFyZSBmaWxsZWRcclxuICAgICAgICBjb25zdCBmaXJzdEVtcHR5SW5kZXggPSB2YWxpZENoYXJzLmxlbmd0aCA8IHRoaXMubGVuZ3RoKCkgPyB2YWxpZENoYXJzLmxlbmd0aCA6IHZhbGlkQ2hhcnMubGVuZ3RoIC0gMTtcclxuICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoZmlyc3RFbXB0eUluZGV4KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29kZUZpbGxlZC5lbWl0KHRoaXMuY3VycmVudFZhbHVlKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhhbmRsZXMgZm9jdXMgZXZlbnQgb24gUElOIGNvZGUgZmllbGRzLlxyXG4gICAgICogU2VsZWN0cyBhbGwgdGV4dCBpbiB0aGUgaW5wdXQgZmllbGQgd2hlbiBmb2N1c2VkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uRm9jdXMoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5waW5JbnB1dHMoKVtpbmRleF07XHJcbiAgICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBibHVyIGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cclxuICAgICAqIE1hcmtzIHRoZSBjb21wb25lbnQgYXMgdG91Y2hlZCB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzLlxyXG4gICAgICogQWxzbyBub3RpZmllcyB0aGUgcmVnaXN0ZXJlZCBvblRvdWNoZWQgY2FsbGJhY2sgZm9yIEZvcm1Db250cm9sIGludGVncmF0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uQmx1cihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgLy8gT25seSBtYXJrIGFzIHRvdWNoZWQgd2hlbiB0aGUgTEFTVCBpbnB1dCBsb3NlcyBmb2N1c1xyXG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5sZW5ndGgoKSAtIFBpbkNvZGVGaWVsZENvbXBvbmVudC5MQVNUX0lOREVYX09GRlNFVCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvdWNoZWQuc2V0KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyB0aGUgaW5wdXQgdmFsdWUgYXQgc3BlY2lmaWVkIGluZGV4IGFuZCBhZGp1c3RzIGZvY3VzIGFjY29yZGluZ2x5LlxyXG4gICAgICogSWYgY3VycmVudCBmaWVsZCBpcyBlbXB0eSwgbW92ZXMgdG8gcHJldmlvdXMgZmllbGQgYW5kIGNsZWFycyBpdC5cclxuICAgICAqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGhhbmRsZUJhY2tzcGFjZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XHJcblxyXG4gICAgICAgIC8vIElmIGN1cnJlbnQgaW5wdXQgaGFzIHZhbHVlLCBjbGVhciBpdFxyXG4gICAgICAgIGlmIChjdXJyZW50SW5wdXRzW2luZGV4XSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldElucHV0QXRJbmRleChpbmRleCwgUGluQ29kZUZpZWxkQ29tcG9uZW50LkVNUFRZX1ZBTFVFKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBjbGVhciBwcmV2aW91cyBpbnB1dCBhbmQgZm9jdXMgaXRcclxuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4IC0gMSwgUGluQ29kZUZpZWxkQ29tcG9uZW50LkVNUFRZX1ZBTFVFKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4IC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWUgYXQgYSBzcGVjaWZpYyBpbnB1dCBmaWVsZCBpbmRleCBhbmQgdXBkYXRlcyB0aGUgZm9ybSB2YWx1ZS5cclxuICAgICAqIFVwZGF0ZXMgdGhlIHNpZ25hbCBhbmQgdHJpZ2dlcnMgdGhlIGNoYW5nZSBkZXRlY3Rpb24gdmlhIG9uQ2hhbmdlIGNhbGxiYWNrLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IGluIHRoZSBmaWVsZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldElucHV0QXRJbmRleChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XHJcbiAgICAgICAgY3VycmVudElucHV0c1tpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmlucHV0cy5zZXQoWy4uLmN1cnJlbnRJbnB1dHNdKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb2N1c2VzIG9uIGFuZCBzZWxlY3RzIHRleHQgaW4gdGhlIGlucHV0IGZpZWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXHJcbiAgICAgKiBVc2VzIHF1ZXVlTWljcm90YXNrIHRvIGVuc3VyZSBET00gaXMgdXBkYXRlZCBiZWZvcmUgZm9jdXNpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmb2N1c0FuZFNlbGVjdElucHV0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5waW5JbnB1dHMoKVtpbmRleF07XHJcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIHRoZSB2YWx1ZSBvZiBhbiBpbnB1dCBlbGVtZW50LlxyXG4gICAgICogVXNlZCBmb3IgaW5wdXQgdmFsaWRhdGlvbiB0byByZWplY3QgaW52YWxpZCBjaGFyYWN0ZXJzLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIEhUTUwgaW5wdXQgZWxlbWVudCB0byBjbGVhclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNsZWFySW5wdXQodGFyZ2V0OiBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XHJcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFeHRyYWN0cyB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gcGFzdGVkIGNvbnRlbnQuXHJcbiAgICAgKiBGaWx0ZXJzIGJhc2VkIG9uIGFscGhhbnVtZXJpYyBzZXR0aW5nIGFuZCBsaW1pdHMgdG8gY29tcG9uZW50J3MgbGVuZ3RoLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgY2xpcGJvYXJkIGV2ZW50XHJcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gdGhlIHBhc3RlZCBjb250ZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXh0cmFjdFZhbGlkQ2hhcmFjdGVyc0Zyb21QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IChldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICByZXR1cm4gcGFzdGVkVGV4dFxyXG4gICAgICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGNoYXIpID0+IHRoaXMuaXNWYWxpZENoYXJhY3RlcihjaGFyKSlcclxuICAgICAgICAgICAgLnNsaWNlKDAsIHRoaXMubGVuZ3RoKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdGVzIGlmIGEgY2hhcmFjdGVyIGlzIGFjY2VwdGFibGUgYmFzZWQgb24gY29tcG9uZW50IGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKiBGb3IgbnVtZXJpYyBtb2RlLCBhY2NlcHRzIG9ubHkgZGlnaXRzIDAtOS5cclxuICAgICAqIEZvciBhbHBoYW51bWVyaWMgbW9kZSwgYWNjZXB0cyBhbnkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBAcGFyYW0gY2hhciAtIFRoZSBjaGFyYWN0ZXIgdG8gdmFsaWRhdGVcclxuICAgICAqIEByZXR1cm5zIHRydWUgaWYgY2hhcmFjdGVyIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc1ZhbGlkQ2hhcmFjdGVyKGNoYXI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLmFscGhhbnVtZXJpYygpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjaGFyLnRyaW0oKS5sZW5ndGggPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gL15bMC05XSQvLnRlc3QoY2hhcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBmb3JtIHZhbHVlIGJ5IGNhbGxpbmcgdGhlIG9uQ2hhbmdlIGNhbGxiYWNrIHJlZ2lzdGVyZWQgYnkgRm9ybUNvbnRyb2wuXHJcbiAgICAgKiBUaGlzIGVuc3VyZXMgdGhlIHJlYWN0aXZlIGZvcm0gc3RheXMgc3luY2hyb25pemVkIHdpdGggY29tcG9uZW50IHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdXBkYXRlVmFsdWUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxyXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB0byB3cml0ZSBhIHZhbHVlIHRvIHRoZSBjb21wb25lbnQuXHJcbiAgICAgKiBPbmx5IGFjY2VwdHMgc3RyaW5nIHZhbHVlcyB3aXRoIGxlbmd0aCBtYXRjaGluZyB0aGUgY29tcG9uZW50J3MgbGVuZ3RoIHNldHRpbmcuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHdyaXRlICh0eXBpY2FsbHkgZnJvbSB0aGUgRm9ybUNvbnRyb2wpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUubGVuZ3RoID09PSB0aGlzLmxlbmd0aCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0cy5zZXQoc3RyaW5nVmFsdWUuc3BsaXQoJycpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxyXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB3aGVuIHZhbHVlIGNoYW5nZXMuXHJcbiAgICAgKiBSZWdpc3RlcnMgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgdmFsdWUgY2hhbmdlcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBjb21wb25lbnQgdmFsdWUgY2hhbmdlc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cclxuICAgICAqIENhbGxlZCBieSB0aGUgRm9ybUNvbnRyb2wgdG8gcmVnaXN0ZXIgdGhlIHRvdWNoZWQgY2FsbGJhY2suXHJcbiAgICAgKiBUaGUgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGNvbXBvbmVudCBpcyB0b3VjaGVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cclxuICAgICAqIENhbGxlZCBieSB0aGUgRm9ybUNvbnRyb2wgdG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LlxyXG4gICAgICogVXBkYXRlcyB0aGUgZGlzYWJsZWQgbW9kZWwgdG8gcmVmbGVjdCB0aGUgZm9ybSdzIGRpc2FibGVkIHN0YXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkIC0gV2hldGhlciB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBkaXNhYmxlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZC5zZXQoaXNEaXNhYmxlZCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdhcC14c21hbGwgZmxleCBmbGV4LWNvbFwiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmbGV4IGdhcC0yXCJcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlBJTiBjb2RlIGlucHV0XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImhlbHBUZXh0KCkgPyAncGluLWhlbHAtdGV4dCcgOiBudWxsXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGlucHV0IG9mIGlucHV0cygpOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI3BpbklucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xMiB3LTEyIHJvdW5kZWQteGJpZyBib3JkZXIgdGV4dC1jZW50ZXIgdGV4dC1sZyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLVtiYWNrZ3JvdW5kLWNvbG9yLGJvcmRlci1jb2xvcixjb2xvcl0gZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdib3JkZXItY3JpdGljYWxpdHktcmVkIGZvY3VzLXZpc2libGU6b3V0bGluZSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtb2Zmc2V0LVstMnB4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtY3JpdGljYWxpdHktcmVkJzogaGFzRXJyb3IoKSxcbiAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1ncmF5c2NhbGUtMzAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtWy0ycHhdIGZvY3VzLXZpc2libGU6b3V0bGluZS1bdmFyKC0tcy1mb2N1cy1yaW5nLWNvbG9yLCMwMDkwZmYpXSc6ICFoYXNFcnJvcigpLFxuICAgICAgICAgICAgICAgICAgICAnY3Vyc29yLW5vdC1hbGxvd2VkIGJnLWdyYXlzY2FsZS0xMCB0ZXh0LWdyYXlzY2FsZS02MCc6IGRpc2FibGVkKCksXG4gICAgICAgICAgICAgICAgICAgICdiZy1ncmF5c2NhbGUtMCB0ZXh0LWdyYXlzY2FsZS0xMDAnOiAhZGlzYWJsZWQoKSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaW5wdXRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwiMVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuaW5wdXRtb2RlXT1cImFscGhhbnVtZXJpYygpID8gJ3RleHQnIDogJ251bWVyaWMnXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICBhbHBoYW51bWVyaWMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5waW5fY29kZV9jaGFyYWN0ZXJfaW5kZXhfb2ZfdG90YWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IGluZGV4OiBpICsgMSwgbGVuZ3RoOiBsZW5ndGgoKSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5waW5fY29kZV9kaWdpdF9pbmRleF9vZl90b3RhbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgaW5kZXg6IGkgKyAxLCBsZW5ndGg6IGxlbmd0aCgpIH0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImhlbHBUZXh0KCkgPyAncGluLWhlbHAtdGV4dCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKGksICRldmVudClcIlxuICAgICAgICAgICAgICAgIChwYXN0ZSk9XCJvblBhc3RlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKGkpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoaSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChoZWxwVGV4dCgpKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGlkPVwicGluLWhlbHAtdGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cIm10LXNtYWxsIHRleHQtc20gdGV4dC1ncmF5c2NhbGUtNjBcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyBoZWxwVGV4dCgpIH19XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PlxuXG4iXX0=