@sarasanalytics-com/design-system 0.0.152 → 0.0.154

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 (95) hide show
  1. package/README.md +24 -24
  2. package/esm2022/interfaces/avatar-interface.mjs +1 -1
  3. package/esm2022/interfaces/button-interface.mjs +1 -1
  4. package/esm2022/interfaces/card-carousel-interface.mjs +1 -1
  5. package/esm2022/interfaces/chip-interface.mjs +1 -1
  6. package/esm2022/interfaces/form-layout.interface.mjs +1 -1
  7. package/esm2022/interfaces/grid-interface.mjs +1 -1
  8. package/esm2022/interfaces/guide-card-interface.mjs +1 -1
  9. package/esm2022/interfaces/header-interface.mjs +1 -1
  10. package/esm2022/interfaces/icon-interface.mjs +1 -1
  11. package/esm2022/interfaces/layout-section-interface.mjs +1 -1
  12. package/esm2022/interfaces/left-nav-interface.mjs +1 -1
  13. package/esm2022/interfaces/menu.interface.mjs +1 -1
  14. package/esm2022/interfaces/message-banner.mjs +1 -1
  15. package/esm2022/interfaces/option-interface.mjs +1 -1
  16. package/esm2022/interfaces/scrolling-card-interface.mjs +1 -1
  17. package/esm2022/interfaces/select-interface.mjs +1 -1
  18. package/esm2022/interfaces/status-dot.interface.mjs +1 -1
  19. package/esm2022/interfaces/tab-interface.mjs +1 -1
  20. package/esm2022/interfaces/toast-interface.mjs +1 -1
  21. package/esm2022/interfaces/typography-animation-interface.mjs +1 -1
  22. package/esm2022/lib/accordion/accordion.component.mjs +3 -3
  23. package/esm2022/lib/avatar/avatar.component.mjs +3 -3
  24. package/esm2022/lib/button/button.component.mjs +3 -3
  25. package/esm2022/lib/calendar-header/calendar-header.component.mjs +3 -3
  26. package/esm2022/lib/card/card-body/card-body.component.mjs +1 -1
  27. package/esm2022/lib/card/card-custom-header/card-custom-header.component.mjs +1 -1
  28. package/esm2022/lib/card/card-footer-actions/card-footer-actions.component.mjs +3 -3
  29. package/esm2022/lib/card/card-icon/card-icon.component.mjs +1 -1
  30. package/esm2022/lib/card/card-title-actions/card-title-actions.component.mjs +1 -1
  31. package/esm2022/lib/card/card.component.mjs +3 -3
  32. package/esm2022/lib/card/checkbox-card/checkbox-card.component.mjs +3 -3
  33. package/esm2022/lib/card/guide-card/guide-card.component.mjs +3 -3
  34. package/esm2022/lib/card/menu-card/menu-card.component.mjs +3 -3
  35. package/esm2022/lib/card/thumbnail-card/thumbnail-card.component.mjs +3 -3
  36. package/esm2022/lib/card-carousel/card-carousel.component.mjs +3 -3
  37. package/esm2022/lib/categories-nav/categories-nav.component.mjs +3 -3
  38. package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
  39. package/esm2022/lib/chips/chips.component.mjs +3 -3
  40. package/esm2022/lib/component-library.component.mjs +9 -9
  41. package/esm2022/lib/component-library.service.mjs +1 -1
  42. package/esm2022/lib/dashboard-loader/dashboard-loader.component.mjs +1 -1
  43. package/esm2022/lib/data-grid/data-grid.component.mjs +3 -3
  44. package/esm2022/lib/datepicker/datepicker.component.mjs +3 -3
  45. package/esm2022/lib/dialog/dialog.component.mjs +3 -3
  46. package/esm2022/lib/filter/filter.component.mjs +3 -3
  47. package/esm2022/lib/form-input/form-input.component.mjs +5 -4
  48. package/esm2022/lib/form-select/form-select.component.mjs +3 -3
  49. package/esm2022/lib/grid-cell/grid-cell.component.mjs +10 -10
  50. package/esm2022/lib/header/header.component.mjs +3 -3
  51. package/esm2022/lib/icon/icon.component.mjs +3 -3
  52. package/esm2022/lib/icon/icon.service.mjs +1 -1
  53. package/esm2022/lib/layout-section/layout-section.component.mjs +3 -3
  54. package/esm2022/lib/left-nav/left-nav.component.mjs +3 -3
  55. package/esm2022/lib/list/list.component.mjs +3 -3
  56. package/esm2022/lib/menu/menu-list/menu-item.component.mjs +3 -3
  57. package/esm2022/lib/menu/menu.component.mjs +3 -3
  58. package/esm2022/lib/menu/menu.directive.mjs +1 -1
  59. package/esm2022/lib/message-banner/message-banner.component.mjs +3 -3
  60. package/esm2022/lib/message-banner-v2/message-banner-v2.component.mjs +3 -3
  61. package/esm2022/lib/mini-card/mini-card.component.mjs +3 -3
  62. package/esm2022/lib/page-layout/page-layout.component.mjs +3 -3
  63. package/esm2022/lib/progress-bar/progress-bar.component.mjs +3 -3
  64. package/esm2022/lib/query-builder/query-builder-demo.component.mjs +45 -45
  65. package/esm2022/lib/query-builder/query-builder.component.mjs +3 -3
  66. package/esm2022/lib/query-builder/query-builder.service.mjs +1 -1
  67. package/esm2022/lib/query-builder-textarea/query-builder-textarea-demo.component.mjs +39 -39
  68. package/esm2022/lib/query-builder-textarea/query-builder-textarea.component.mjs +3 -3
  69. package/esm2022/lib/radio-button/radio-button.component.mjs +3 -3
  70. package/esm2022/lib/scrolling-cards/scrolling-cards.component.mjs +3 -3
  71. package/esm2022/lib/skeleton/skeleton-base.component.mjs +1 -1
  72. package/esm2022/lib/skeleton/skeleton-container.component.mjs +9 -9
  73. package/esm2022/lib/skeleton/skeleton-loader.component.mjs +193 -193
  74. package/esm2022/lib/skeleton/skeleton-presets.mjs +1 -1
  75. package/esm2022/lib/skeleton/skeleton-shapes.component.mjs +1 -1
  76. package/esm2022/lib/spinner/spinner.component.mjs +1 -1
  77. package/esm2022/lib/status-dot/status-dot.component.mjs +17 -17
  78. package/esm2022/lib/stepper/stepper.component.mjs +3 -3
  79. package/esm2022/lib/tabs/tabs.component.mjs +3 -3
  80. package/esm2022/lib/toast/toast.component.mjs +3 -3
  81. package/esm2022/lib/tool-tip/tool-tip.component.mjs +3 -3
  82. package/esm2022/lib/typography-animation/typography-animation.component.mjs +3 -3
  83. package/esm2022/public-api.mjs +1 -4
  84. package/esm2022/utils/validators.mjs +1 -1
  85. package/fesm2022/sarasanalytics-com-design-system.mjs +411 -892
  86. package/fesm2022/sarasanalytics-com-design-system.mjs.map +1 -1
  87. package/package.json +1 -1
  88. package/public-api.d.ts +0 -3
  89. package/styles/styles.css +460 -432
  90. package/esm2022/lib/dropdown/category-dropdown/category-dropdown.component.mjs +0 -241
  91. package/esm2022/lib/dropdown/ng-select/ng-select.component.mjs +0 -111
  92. package/esm2022/lib/query-builder-formly/query-builder-formly.component.mjs +0 -191
  93. package/lib/dropdown/category-dropdown/category-dropdown.component.d.ts +0 -40
  94. package/lib/dropdown/ng-select/ng-select.component.d.ts +0 -20
  95. package/lib/query-builder-formly/query-builder-formly.component.d.ts +0 -81
@@ -294,7 +294,7 @@ export class FormSelectComponent extends FieldType {
294
294
  }
295
295
  }
296
296
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FormSelectComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
297
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: FormSelectComponent, isStandalone: true, selector: "lib-form-select", outputs: { hoverEvent: "hoverEvent" }, viewQueries: [{ propertyName: "ngSelect", first: true, predicate: NgSelectComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-select-container {{props?.['inputContainerClass']}}\">\n @if(!!props?.['label']){\n <div class=\"sa-select-label-container\">\n <div class=\"sa-select-label-tooltip-container\">\n <span class=\"sa-select-label\">\n {{props?.['label']}}\n </span>\n @if(!!props?.['tooltip']){\n <span class=\"tooltip-container\">\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\n </span>\n }\n </div>\n @if(!!props?.['description']) {\n <p class=\"sa-select-description\">\n {{props?.['description']}}\n </p>\n }\n </div>\n }\n <div class=\"sa-select-field-container\">\n <div [style.visibility]=\"(props?.['showTag'] !== false && (openState || topLabel)) ? 'visible' : 'hidden'\"\n class=\"clicked-label\">{{params.label}}\n </div>\n <div\n class=\"ng-select-field {{openState ? 'activated' : 'idle'}} {{field.props.disabled ? 'disabled' : ''}} {{formControl.valid ? '' : 'invalid'}}\">\n <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"left-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'left' || params.dropIconPosition == 'both')\">\n </div>\n <ng-select (change)=\"onNgSelectChange($event)\" (remove)=\"shiftLabel('removed')\" (clear)=\"shiftLabel('cleared')\"\n (search)=\"openClose(true)\" (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\" [isOpen]=\"openState\"\n [placeholder]=\"placeholderLabel\" [bindLabel]=\"props?.['bindLabel'] || 'name'\" [bindValue]=\"props?.['bindValue'] || null\" [items]=\"selectables\" [multiple]=\"params?.multiple\"\n [formControl]=\"formControl\" [style] [formlyAttributes]=\"field\" [searchable]=\"field.props['searchable']\" [clearable]=\"false\" class=\"form-ng-select\"> \n <!-- Multi-label template for displaying selected items as chips -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div *ngFor=\"let item of (items ? items.slice(startInd,startInd+labelLimit): [])\">\n <sa-chip (onClickEvent)=\" (!field.props.disabled) ? clear(item) : null\" \n [id]=\"getFullObjectFromValue(item)[params?.bindValue || props?.['bindValue'] || 'id']\"\n [iconPath]=\"params.iconPath\" \n [text]=\"getFullObjectFromValue(item)[params?.bindLabel || props?.['bindLabel'] || 'name']\" \n [type]=\"params.type\"\n [state]=\"field.props.disabled ? 'neutral' : params.state\" \n [filling]=\"params.filling\"\n [iconPosition]=\"params.iconPosition\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\n *ngIf=\"items.length > (startInd+labelLimit)\">\n <sa-chip text=\"+{{items.length-(startInd+labelLimit)}}\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'primary'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('cleared')\" *ngIf=\"startInd > 0\"\n class=\"ng-value overflow-label\">\n <sa-chip text=\"...\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'default'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n </ng-template>\n \n <!-- Universal option template with tooltip support for any select type -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\n <div class=\"option-container\" [ngClass]=\"{'checkbox-option': params?.showCheckboxes, 'single-option-with-tooltip': !params?.showCheckboxes}\">\n <!-- Checkbox for multi-select -->\n <input *ngIf=\"params?.showCheckboxes\" \n type=\"checkbox\" \n [checked]=\"isOptionSelected(item)\" \n (mousedown)=\"toggleItemSelection(item, $event)\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n class=\"option-checkbox\">\n \n <!-- Option label -->\n <span class=\"option-label\">{{ item[props?.['bindLabel'] || 'name'] }}</span>\n \n <!-- Tooltip icon - shows when item has description/tooltip -->\n <sa-icon *ngIf=\"item.description || item.tooltip\" \n [icon]=\"'infoCircleOutlined'\" \n [size]=\"'16'\" \n class=\"option-tooltip-icon d-flex\"\n [matTooltip]=\"item.description || item.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\"\n [matTooltipDisabled]=\"!(item.description || item.tooltip)\">\n </sa-icon>\n </div>\n </ng-template>\n \n <!-- Simple header template for Select All / Unselect All when in checkbox mode -->\n <ng-template ng-header-tmp *ngIf=\"params?.showCheckboxes && params?.multiple\">\n <div class=\"select-all-header\">\n <span class=\"select-all-label\" (click)=\"selectAll()\">Select all</span>\n <span class=\"unselect-all-label\" (click)=\"unselectAll()\">Unselect all</span>\n </div>\n </ng-template>\n\n <ng-template ng-arrow-tmp>\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex custom-dropdown-arrow\" [size]=\"'18'\"></sa-icon>\n </ng-template>\n </ng-select>\n <div *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\" class=\"right-icon\">\n <sa-icon [icon]=\"'downChevronOutlined'\" tabindex=\"0\" class=\"d-flex\" [size]=\"'18'\" (click)=\"openClose(!this.openState)\"\n (blur)=\"openClose(false)\" ></sa-icon>\n </div>\n <!-- <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"right-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(true)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\">\n </div> -->\n\n <div class=\"fallback-arrow\" *ngIf=\"!openState\">\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex\" [size]=\"'18'\"></sa-icon>\n </div>\n </div>\n @if(!formControl.valid){\n <div class=\"error-message-container\">\n <span class=\"error-message\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </span>\n </div>\n }\n <div class=\"support-label\">{{params.supportText}}</div>\n</div>", styles: [".idle{--border: 1px solid var(--grey-50)}.activated{--border: 1px solid var(--primary-300)}.disabled{border:1px solid var(--grey-50)!important}.ng-select-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.ng-select-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px) 0 var(--medium-30px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-family:var(--font);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.invalid{border:1px solid var(--semantic-error-500, #BD271E)}.ng-select{width:inherit;display:inline-flex;justify-content:center;align-items:center;flex-shrink:0}::ng-deep .ng-arrow-wrapper{pointer-events:none}.custom-select-container .ng-select{padding-left:1.25rem}.ng-select ::ng-deep .ng-select-container{display:inline-flex;justify-content:center;align-items:center;flex-shrink:0;font-family:var(--font);box-sizing:border-box;border:none}.ng-select ::ng-deep .ng-dropdown-panel{margin-top:2px;border:1px solid var(--grey-50);box-shadow:none;z-index:1000}.ng-select ::ng-deep .ng-select-container{box-shadow:none;position:relative;z-index:1}::ng-deep .ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{box-shadow:none}.ng-select ::ng-deep .ng-value-container{padding:0!important;flex-wrap:nowrap!important;display:flex;justify-content:flex-start;gap:5px;overflow-x:hidden}.ng-select ::ng-deep .ng-value{flex:none;margin:0!important}.overflow-label{padding:0 5px;cursor:pointer}.ng-select ::ng-deep .ng-placeholder{padding:0!important;position:inherit!important;color:var(--text-lowemphasis)}.ng-select ::ng-deep .ng-input{padding:0!important;position:inherit!important}.ng-select ::ng-deep .ng-clear-wrapper{z-index:9;display:flex;margin-left:5px}.ng-select ::ng-deep .ng-arrow{border-color:none!important;border-style:none!important;border-width:0!important}.svg-icon{-webkit-mask-size:contain;mask-size:contain;width:20px;height:20px;background-color:gray}.svg-icon:hover{cursor:pointer}.ng-select ::ng-deep .ng-arrow-wrapper,::ng-deep .ng-select-filtered .ng-select-container .ng-value-container .ng-value{display:none}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:var(--ng-select-chip-bg, var(--primary-50))}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.clicked-label{position:relative;width:max-content;font-family:var(--font);font-size:11px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:0 var(--small-8px);margin-left:12px;margin-bottom:-8px;z-index:9999;background-color:#fff}.ng-select ::ng-deep .ng-dropdown-panel{width:calc(100% + 24px);left:-12px;margin-top:6px}.custom-select-container .ng-select ::ng-deep .ng-dropdown-panel{left:.45rem}.d-flex{display:flex}.custom-select-container.sa-select-container{display:flex;flex-direction:column;gap:var(--small-12px, 12px)}.sa-select-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.sa-select-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.right-icon{padding-right:1.2rem;color:#757575}.invalid .right-icon{color:var(--semantic-error-500, #BD271E)}.error-message{color:var(--semantic-error-500, #BD271E);font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:var(--small-16px);letter-spacing:.5px}.checkbox-option{display:flex;align-items:center;padding:8px 12px;cursor:pointer;gap:8px;transition:background-color .2s ease}.checkbox-option:hover{background-color:var(--grey-50, #F9FAFB)}.option-checkbox{width:16px;height:16px;margin-right:8px;cursor:pointer;accent-color:var(--primary-500, #6B46C1)}.option-label{font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.single-option-with-tooltip{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:8px;transition:background-color .2s ease;width:100%}.single-option-with-tooltip .option-label{flex:1;font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.option-tooltip-icon{color:var(--grey-400, #98A2B3);cursor:pointer;flex-shrink:0}.option-tooltip-icon:hover{color:var(--primary-500, #6B46C1)}.select-all-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--grey-200, #E4E7EC);background-color:var(--grey-25, #FCFCFD);cursor:pointer;transition:background-color .2s ease}.select-all-header:hover{background-color:var(--grey-50, #F9FAFB)}.select-all-label,.unselect-all-label{font-size:14px;font-weight:500;color:var(--primary-500, #6B46C1);line-height:20px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background-color .2s ease}.select-all-label:hover,.unselect-all-label:hover{background-color:var(--primary-50, #F3F4F6)}.unselect-all-label{color:var(--grey-600, #475467)}.unselect-all-label:hover{background-color:var(--grey-100, #F2F4F7)}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-medium-emphasis, #6D6979)}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:transparent!important}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-highlighted{background-color:var(--grey-50, #F9FAFB)!important}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:0}.custom-dropdown-arrow{color:var(--Grey-600, #475467);cursor:pointer;transition:transform .2s ease}.ng-select.ng-select-opened .custom-dropdown-arrow{transform:rotate(180deg)}.form-ng-select.ng-select ::ng-deep .ng-arrow-wrapper{display:flex!important;align-items:center;justify-content:center;padding-right:12px;width:18px;height:18px}.ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow{display:none}.ng-select.ng-select-multiple ::ng-deep .ng-arrow-wrapper{display:flex!important}.fallback-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;z-index:2;color:var(--Grey-600, #475467)}.ng-select ::ng-deep .ng-arrow-wrapper:not(:empty)+.fallback-arrow{display:none}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "component", type: i2.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: i3.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
297
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: FormSelectComponent, isStandalone: true, selector: "lib-form-select", outputs: { hoverEvent: "hoverEvent" }, viewQueries: [{ propertyName: "ngSelect", first: true, predicate: NgSelectComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"sa-select-container {{props?.['inputContainerClass']}}\">\r\n @if(!!props?.['label']){\r\n <div class=\"sa-select-label-container\">\r\n <div class=\"sa-select-label-tooltip-container\">\r\n <span class=\"sa-select-label\">\r\n {{props?.['label']}}\r\n </span>\r\n @if(!!props?.['tooltip']){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\r\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\r\n </span>\r\n }\r\n </div>\r\n @if(!!props?.['description']) {\r\n <p class=\"sa-select-description\">\r\n {{props?.['description']}}\r\n </p>\r\n }\r\n </div>\r\n }\r\n <div class=\"sa-select-field-container\">\r\n <div [style.visibility]=\"(props?.['showTag'] !== false && (openState || topLabel)) ? 'visible' : 'hidden'\"\r\n class=\"clicked-label\">{{params.label}}\r\n </div>\r\n <div\r\n class=\"ng-select-field {{openState ? 'activated' : 'idle'}} {{field.props.disabled ? 'disabled' : ''}} {{formControl.valid ? '' : 'invalid'}}\">\r\n <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"left-icon svg-icon\" [style]=\"svgStyle\"\r\n (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\"\r\n *ngIf=\"(params.dropIconPosition == 'left' || params.dropIconPosition == 'both')\">\r\n </div>\r\n <ng-select (change)=\"onNgSelectChange($event)\" (remove)=\"shiftLabel('removed')\" (clear)=\"shiftLabel('cleared')\"\r\n (search)=\"openClose(true)\" (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\" [isOpen]=\"openState\"\r\n [placeholder]=\"placeholderLabel\" [bindLabel]=\"props?.['bindLabel'] || 'name'\" [bindValue]=\"props?.['bindValue'] || null\" [items]=\"selectables\" [multiple]=\"params?.multiple\"\r\n [formControl]=\"formControl\" [style] [formlyAttributes]=\"field\" [searchable]=\"field.props['searchable']\" [clearable]=\"false\" [closeOnSelect]=\"!params?.showCheckboxes\"> \r\n <!-- Multi-label template for displaying selected items as chips -->\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n <div *ngFor=\"let item of (items ? items.slice(startInd,startInd+labelLimit): [])\">\r\n <sa-chip (onClickEvent)=\" (!field.props.disabled) ? clear(item) : null\" \r\n [id]=\"getFullObjectFromValue(item)[params?.bindValue || props?.['bindValue'] || 'id']\"\r\n [iconPath]=\"params.iconPath\" \r\n [text]=\"getFullObjectFromValue(item)[params?.bindLabel || props?.['bindLabel'] || 'name']\" \r\n [type]=\"params.type\"\r\n [state]=\"field.props.disabled ? 'neutral' : params.state\" \r\n [filling]=\"params.filling\"\r\n [iconPosition]=\"params.iconPosition\">\r\n </sa-chip>\r\n </div>\r\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\r\n *ngIf=\"items.length > (startInd+labelLimit)\">\r\n <sa-chip text=\"+{{items.length-(startInd+labelLimit)}}\" \r\n [type]=\"params.type || 'regular'\" \r\n [state]=\"params.state || 'primary'\" \r\n [filling]=\"params.filling || 'filled'\">\r\n </sa-chip>\r\n </div>\r\n <div (click)=\"shiftLabel('cleared')\" *ngIf=\"startInd > 0\"\r\n class=\"ng-value overflow-label\">\r\n <sa-chip text=\"...\" \r\n [type]=\"params.type || 'regular'\" \r\n [state]=\"params.state || 'default'\" \r\n [filling]=\"params.filling || 'filled'\">\r\n </sa-chip>\r\n </div>\r\n </ng-template>\r\n \r\n <!-- Universal option template with tooltip support for any select type -->\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\r\n <div class=\"option-container\" [ngClass]=\"{'checkbox-option': params?.showCheckboxes, 'single-option-with-tooltip': !params?.showCheckboxes}\">\r\n <!-- Checkbox for multi-select -->\r\n <input *ngIf=\"params?.showCheckboxes\" \r\n type=\"checkbox\" \r\n [checked]=\"isOptionSelected(item)\" \r\n (mousedown)=\"toggleItemSelection(item, $event)\"\r\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\r\n class=\"option-checkbox\">\r\n \r\n <!-- Option label -->\r\n <span class=\"option-label\">{{ item[props?.['bindLabel'] || 'name'] }}</span>\r\n \r\n <!-- Tooltip icon - shows when item has description/tooltip -->\r\n <sa-icon *ngIf=\"item.description || item.tooltip\" \r\n [icon]=\"'infoCircleOutlined'\" \r\n [size]=\"'16'\" \r\n class=\"option-tooltip-icon d-flex\"\r\n [matTooltip]=\"item.description || item.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\"\r\n [matTooltipDisabled]=\"!(item.description || item.tooltip)\">\r\n </sa-icon>\r\n </div>\r\n </ng-template>\r\n \r\n <!-- Simple header template for Select All / Unselect All when in checkbox mode -->\r\n <ng-template ng-header-tmp *ngIf=\"params?.showCheckboxes && params?.multiple\">\r\n <div class=\"select-all-header\">\r\n <span class=\"select-all-label\" (click)=\"selectAll()\">Select all</span>\r\n <span class=\"unselect-all-label\" (click)=\"unselectAll()\">Unselect all</span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-arrow-tmp>\r\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex custom-dropdown-arrow\" [size]=\"'18'\"></sa-icon>\r\n </ng-template>\r\n </ng-select>\r\n <div *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\" class=\"right-icon\">\r\n <sa-icon [icon]=\"'downChevronOutlined'\" tabindex=\"0\" class=\"d-flex\" [size]=\"'18'\" (click)=\"openClose(!this.openState)\"\r\n (blur)=\"openClose(false)\" ></sa-icon>\r\n </div>\r\n <!-- <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"right-icon svg-icon\" [style]=\"svgStyle\"\r\n (click)=\"openClose(true)\" (blur)=\"openClose(false)\"\r\n *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\">\r\n </div> -->\r\n\r\n <div class=\"fallback-arrow\" *ngIf=\"!openState\">\r\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex\" [size]=\"'18'\"></sa-icon>\r\n </div>\r\n </div>\r\n @if(!formControl.valid){\r\n <div class=\"error-message-container\">\r\n <span class=\"error-message\">\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </span>\r\n </div>\r\n }\r\n <div class=\"support-label\">{{params.supportText}}</div>\r\n</div>", styles: [".idle{--border: 1px solid var(--grey-50)}.activated{--border: 1px solid var(--primary-300)}.disabled{border:1px solid var(--grey-50)!important}.ng-select-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.ng-select-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px) 0 var(--medium-30px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-family:var(--font);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.invalid{border:1px solid var(--semantic-error-500, #BD271E)}.ng-select{width:inherit;display:inline-flex;justify-content:center;align-items:center;flex-shrink:0}::ng-deep .ng-arrow-wrapper{pointer-events:none}.custom-select-container .ng-select{padding-left:1.25rem}.ng-select ::ng-deep .ng-select-container{display:inline-flex;justify-content:center;align-items:center;flex-shrink:0;font-family:var(--font);box-sizing:border-box;border:none}.ng-select ::ng-deep .ng-dropdown-panel{margin-top:2px;border:1px solid var(--grey-50);box-shadow:none;z-index:1000}.ng-select ::ng-deep .ng-select-container{box-shadow:none;position:relative;z-index:1}::ng-deep .ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{box-shadow:none}.ng-select ::ng-deep .ng-value-container{padding:0!important;flex-wrap:nowrap!important;display:flex;justify-content:flex-start;gap:5px;overflow-x:hidden}.ng-select ::ng-deep .ng-value{flex:none;margin:0!important}.overflow-label{padding:0 5px;cursor:pointer}.ng-select ::ng-deep .ng-placeholder{padding:0!important;position:inherit!important;color:var(--text-lowemphasis)}.ng-select ::ng-deep .ng-input{padding:0!important;position:inherit!important}.ng-select ::ng-deep .ng-clear-wrapper{z-index:9;display:flex;margin-left:5px}.ng-select ::ng-deep .ng-arrow{border-color:none!important;border-style:none!important;border-width:0!important}.svg-icon{-webkit-mask-size:contain;mask-size:contain;width:20px;height:20px;background-color:gray}.svg-icon:hover{cursor:pointer}.ng-select ::ng-deep .ng-arrow-wrapper,::ng-deep .ng-select-filtered .ng-select-container .ng-value-container .ng-value{display:none}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:var(--ng-select-chip-bg, var(--primary-50))}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.clicked-label{position:relative;width:max-content;font-family:var(--font);font-size:11px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:0 var(--small-8px);margin-left:12px;margin-bottom:-8px;z-index:9999;background-color:#fff}.ng-select ::ng-deep .ng-dropdown-panel{width:calc(100% + 24px);left:-12px;margin-top:6px}.custom-select-container .ng-select ::ng-deep .ng-dropdown-panel{left:.45rem}.d-flex{display:flex}.custom-select-container.sa-select-container{display:flex;flex-direction:column;gap:var(--small-12px, 12px)}.sa-select-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.sa-select-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.right-icon{padding-right:1.2rem;color:#757575}.invalid .right-icon{color:var(--semantic-error-500, #BD271E)}.error-message{color:var(--semantic-error-500, #BD271E);font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:var(--small-16px);letter-spacing:.5px}.checkbox-option{display:flex;align-items:center;padding:8px 12px;cursor:pointer;gap:8px;transition:background-color .2s ease}.checkbox-option:hover{background-color:var(--grey-50, #F9FAFB)}.option-checkbox{width:16px;height:16px;margin-right:8px;cursor:pointer;accent-color:var(--primary-500, #6B46C1)}.option-label{font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.single-option-with-tooltip{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:8px;transition:background-color .2s ease;width:100%}.single-option-with-tooltip .option-label{flex:1;font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.option-tooltip-icon{color:var(--grey-400, #98A2B3);cursor:pointer;flex-shrink:0}.option-tooltip-icon:hover{color:var(--primary-500, #6B46C1)}.select-all-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--grey-200, #E4E7EC);background-color:var(--grey-25, #FCFCFD);cursor:pointer;transition:background-color .2s ease}.select-all-header:hover{background-color:var(--grey-50, #F9FAFB)}.select-all-label,.unselect-all-label{font-size:14px;font-weight:500;color:var(--primary-500, #6B46C1);line-height:20px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background-color .2s ease}.select-all-label:hover,.unselect-all-label:hover{background-color:var(--primary-50, #F3F4F6)}.unselect-all-label{color:var(--grey-600, #475467)}.unselect-all-label:hover{background-color:var(--grey-100, #F2F4F7)}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-medium-emphasis, #6D6979)}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:transparent!important}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-highlighted{background-color:var(--grey-50, #F9FAFB)!important}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:0}.custom-dropdown-arrow{color:var(--Grey-600, #475467);cursor:pointer;transition:transform .2s ease}.ng-select.ng-select-opened .custom-dropdown-arrow{transform:rotate(180deg)}.ng-select ::ng-deep .ng-arrow-wrapper{display:flex!important;align-items:center;justify-content:center;padding-right:12px;width:18px;height:18px}.ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow{display:none}.ng-select.ng-select-multiple ::ng-deep .ng-arrow-wrapper{display:flex!important}.fallback-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;z-index:2;color:var(--Grey-600, #475467)}.ng-select ::ng-deep .ng-arrow-wrapper:not(:empty)+.fallback-arrow{display:none}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "directive", type: i2.ɵFormlyAttributes, selector: "[formlyAttributes]", inputs: ["formlyAttributes", "id"] }, { kind: "component", type: i2.ɵFormlyValidationMessage, selector: "formly-validation-message", inputs: ["field"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "directive", type: i3.NgHeaderTemplateDirective, selector: "[ng-header-tmp]" }, { kind: "component", type: ChipsComponent, selector: "sa-chip", inputs: ["id", "iconPath", "text", "type", "state", "filling", "iconPosition", "largeStateIcon", "largeStateText", "tooltip", "className"], outputs: ["onClickEvent"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: IconComponent, selector: "sa-icon", inputs: ["img", "icon", "size", "color", "iconPath", "iconUrl", "customClass", "href", "hrefTarget", "iconPosition"], outputs: ["onClickEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
298
298
  }
299
299
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FormSelectComponent, decorators: [{
300
300
  type: Component,
@@ -310,7 +310,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
310
310
  IconComponent,
311
311
  CommonModule,
312
312
  MatTooltipModule
313
- ], template: "<div class=\"sa-select-container {{props?.['inputContainerClass']}}\">\n @if(!!props?.['label']){\n <div class=\"sa-select-label-container\">\n <div class=\"sa-select-label-tooltip-container\">\n <span class=\"sa-select-label\">\n {{props?.['label']}}\n </span>\n @if(!!props?.['tooltip']){\n <span class=\"tooltip-container\">\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\n </span>\n }\n </div>\n @if(!!props?.['description']) {\n <p class=\"sa-select-description\">\n {{props?.['description']}}\n </p>\n }\n </div>\n }\n <div class=\"sa-select-field-container\">\n <div [style.visibility]=\"(props?.['showTag'] !== false && (openState || topLabel)) ? 'visible' : 'hidden'\"\n class=\"clicked-label\">{{params.label}}\n </div>\n <div\n class=\"ng-select-field {{openState ? 'activated' : 'idle'}} {{field.props.disabled ? 'disabled' : ''}} {{formControl.valid ? '' : 'invalid'}}\">\n <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"left-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'left' || params.dropIconPosition == 'both')\">\n </div>\n <ng-select (change)=\"onNgSelectChange($event)\" (remove)=\"shiftLabel('removed')\" (clear)=\"shiftLabel('cleared')\"\n (search)=\"openClose(true)\" (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\" [isOpen]=\"openState\"\n [placeholder]=\"placeholderLabel\" [bindLabel]=\"props?.['bindLabel'] || 'name'\" [bindValue]=\"props?.['bindValue'] || null\" [items]=\"selectables\" [multiple]=\"params?.multiple\"\n [formControl]=\"formControl\" [style] [formlyAttributes]=\"field\" [searchable]=\"field.props['searchable']\" [clearable]=\"false\" class=\"form-ng-select\"> \n <!-- Multi-label template for displaying selected items as chips -->\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\n <div *ngFor=\"let item of (items ? items.slice(startInd,startInd+labelLimit): [])\">\n <sa-chip (onClickEvent)=\" (!field.props.disabled) ? clear(item) : null\" \n [id]=\"getFullObjectFromValue(item)[params?.bindValue || props?.['bindValue'] || 'id']\"\n [iconPath]=\"params.iconPath\" \n [text]=\"getFullObjectFromValue(item)[params?.bindLabel || props?.['bindLabel'] || 'name']\" \n [type]=\"params.type\"\n [state]=\"field.props.disabled ? 'neutral' : params.state\" \n [filling]=\"params.filling\"\n [iconPosition]=\"params.iconPosition\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\n *ngIf=\"items.length > (startInd+labelLimit)\">\n <sa-chip text=\"+{{items.length-(startInd+labelLimit)}}\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'primary'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n <div (click)=\"shiftLabel('cleared')\" *ngIf=\"startInd > 0\"\n class=\"ng-value overflow-label\">\n <sa-chip text=\"...\" \n [type]=\"params.type || 'regular'\" \n [state]=\"params.state || 'default'\" \n [filling]=\"params.filling || 'filled'\">\n </sa-chip>\n </div>\n </ng-template>\n \n <!-- Universal option template with tooltip support for any select type -->\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\n <div class=\"option-container\" [ngClass]=\"{'checkbox-option': params?.showCheckboxes, 'single-option-with-tooltip': !params?.showCheckboxes}\">\n <!-- Checkbox for multi-select -->\n <input *ngIf=\"params?.showCheckboxes\" \n type=\"checkbox\" \n [checked]=\"isOptionSelected(item)\" \n (mousedown)=\"toggleItemSelection(item, $event)\"\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\n class=\"option-checkbox\">\n \n <!-- Option label -->\n <span class=\"option-label\">{{ item[props?.['bindLabel'] || 'name'] }}</span>\n \n <!-- Tooltip icon - shows when item has description/tooltip -->\n <sa-icon *ngIf=\"item.description || item.tooltip\" \n [icon]=\"'infoCircleOutlined'\" \n [size]=\"'16'\" \n class=\"option-tooltip-icon d-flex\"\n [matTooltip]=\"item.description || item.tooltip || ''\" \n matTooltipClass=\"custom-tooltip\"\n [matTooltipDisabled]=\"!(item.description || item.tooltip)\">\n </sa-icon>\n </div>\n </ng-template>\n \n <!-- Simple header template for Select All / Unselect All when in checkbox mode -->\n <ng-template ng-header-tmp *ngIf=\"params?.showCheckboxes && params?.multiple\">\n <div class=\"select-all-header\">\n <span class=\"select-all-label\" (click)=\"selectAll()\">Select all</span>\n <span class=\"unselect-all-label\" (click)=\"unselectAll()\">Unselect all</span>\n </div>\n </ng-template>\n\n <ng-template ng-arrow-tmp>\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex custom-dropdown-arrow\" [size]=\"'18'\"></sa-icon>\n </ng-template>\n </ng-select>\n <div *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\" class=\"right-icon\">\n <sa-icon [icon]=\"'downChevronOutlined'\" tabindex=\"0\" class=\"d-flex\" [size]=\"'18'\" (click)=\"openClose(!this.openState)\"\n (blur)=\"openClose(false)\" ></sa-icon>\n </div>\n <!-- <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"right-icon svg-icon\" [style]=\"svgStyle\"\n (click)=\"openClose(true)\" (blur)=\"openClose(false)\"\n *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\">\n </div> -->\n\n <div class=\"fallback-arrow\" *ngIf=\"!openState\">\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex\" [size]=\"'18'\"></sa-icon>\n </div>\n </div>\n @if(!formControl.valid){\n <div class=\"error-message-container\">\n <span class=\"error-message\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </span>\n </div>\n }\n <div class=\"support-label\">{{params.supportText}}</div>\n</div>", styles: [".idle{--border: 1px solid var(--grey-50)}.activated{--border: 1px solid var(--primary-300)}.disabled{border:1px solid var(--grey-50)!important}.ng-select-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.ng-select-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px) 0 var(--medium-30px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-family:var(--font);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.invalid{border:1px solid var(--semantic-error-500, #BD271E)}.ng-select{width:inherit;display:inline-flex;justify-content:center;align-items:center;flex-shrink:0}::ng-deep .ng-arrow-wrapper{pointer-events:none}.custom-select-container .ng-select{padding-left:1.25rem}.ng-select ::ng-deep .ng-select-container{display:inline-flex;justify-content:center;align-items:center;flex-shrink:0;font-family:var(--font);box-sizing:border-box;border:none}.ng-select ::ng-deep .ng-dropdown-panel{margin-top:2px;border:1px solid var(--grey-50);box-shadow:none;z-index:1000}.ng-select ::ng-deep .ng-select-container{box-shadow:none;position:relative;z-index:1}::ng-deep .ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{box-shadow:none}.ng-select ::ng-deep .ng-value-container{padding:0!important;flex-wrap:nowrap!important;display:flex;justify-content:flex-start;gap:5px;overflow-x:hidden}.ng-select ::ng-deep .ng-value{flex:none;margin:0!important}.overflow-label{padding:0 5px;cursor:pointer}.ng-select ::ng-deep .ng-placeholder{padding:0!important;position:inherit!important;color:var(--text-lowemphasis)}.ng-select ::ng-deep .ng-input{padding:0!important;position:inherit!important}.ng-select ::ng-deep .ng-clear-wrapper{z-index:9;display:flex;margin-left:5px}.ng-select ::ng-deep .ng-arrow{border-color:none!important;border-style:none!important;border-width:0!important}.svg-icon{-webkit-mask-size:contain;mask-size:contain;width:20px;height:20px;background-color:gray}.svg-icon:hover{cursor:pointer}.ng-select ::ng-deep .ng-arrow-wrapper,::ng-deep .ng-select-filtered .ng-select-container .ng-value-container .ng-value{display:none}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:var(--ng-select-chip-bg, var(--primary-50))}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.clicked-label{position:relative;width:max-content;font-family:var(--font);font-size:11px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:0 var(--small-8px);margin-left:12px;margin-bottom:-8px;z-index:9999;background-color:#fff}.ng-select ::ng-deep .ng-dropdown-panel{width:calc(100% + 24px);left:-12px;margin-top:6px}.custom-select-container .ng-select ::ng-deep .ng-dropdown-panel{left:.45rem}.d-flex{display:flex}.custom-select-container.sa-select-container{display:flex;flex-direction:column;gap:var(--small-12px, 12px)}.sa-select-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.sa-select-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.right-icon{padding-right:1.2rem;color:#757575}.invalid .right-icon{color:var(--semantic-error-500, #BD271E)}.error-message{color:var(--semantic-error-500, #BD271E);font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:var(--small-16px);letter-spacing:.5px}.checkbox-option{display:flex;align-items:center;padding:8px 12px;cursor:pointer;gap:8px;transition:background-color .2s ease}.checkbox-option:hover{background-color:var(--grey-50, #F9FAFB)}.option-checkbox{width:16px;height:16px;margin-right:8px;cursor:pointer;accent-color:var(--primary-500, #6B46C1)}.option-label{font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.single-option-with-tooltip{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:8px;transition:background-color .2s ease;width:100%}.single-option-with-tooltip .option-label{flex:1;font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.option-tooltip-icon{color:var(--grey-400, #98A2B3);cursor:pointer;flex-shrink:0}.option-tooltip-icon:hover{color:var(--primary-500, #6B46C1)}.select-all-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--grey-200, #E4E7EC);background-color:var(--grey-25, #FCFCFD);cursor:pointer;transition:background-color .2s ease}.select-all-header:hover{background-color:var(--grey-50, #F9FAFB)}.select-all-label,.unselect-all-label{font-size:14px;font-weight:500;color:var(--primary-500, #6B46C1);line-height:20px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background-color .2s ease}.select-all-label:hover,.unselect-all-label:hover{background-color:var(--primary-50, #F3F4F6)}.unselect-all-label{color:var(--grey-600, #475467)}.unselect-all-label:hover{background-color:var(--grey-100, #F2F4F7)}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-medium-emphasis, #6D6979)}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:transparent!important}::ng-deep .form-ng-select.ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-highlighted{background-color:var(--grey-50, #F9FAFB)!important}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:0}.custom-dropdown-arrow{color:var(--Grey-600, #475467);cursor:pointer;transition:transform .2s ease}.ng-select.ng-select-opened .custom-dropdown-arrow{transform:rotate(180deg)}.form-ng-select.ng-select ::ng-deep .ng-arrow-wrapper{display:flex!important;align-items:center;justify-content:center;padding-right:12px;width:18px;height:18px}.ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow{display:none}.ng-select.ng-select-multiple ::ng-deep .ng-arrow-wrapper{display:flex!important}.fallback-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;z-index:2;color:var(--Grey-600, #475467)}.ng-select ::ng-deep .ng-arrow-wrapper:not(:empty)+.fallback-arrow{display:none}\n"] }]
313
+ ], template: "<div class=\"sa-select-container {{props?.['inputContainerClass']}}\">\r\n @if(!!props?.['label']){\r\n <div class=\"sa-select-label-container\">\r\n <div class=\"sa-select-label-tooltip-container\">\r\n <span class=\"sa-select-label\">\r\n {{props?.['label']}}\r\n </span>\r\n @if(!!props?.['tooltip']){\r\n <span class=\"tooltip-container\">\r\n <sa-icon [icon]=\"props?.['tooltipIcon'] || 'infoCircleOutlined'\" customClass=\"info-icon\"\r\n [matTooltip]=\"props?.['tooltip']\" matTooltipClass=\"custom-tooltip\" class=\"tooltip-icon d-flex\"\r\n [size]=\"props?.['tooltipIconSize'] || '20'\"></sa-icon>\r\n </span>\r\n }\r\n </div>\r\n @if(!!props?.['description']) {\r\n <p class=\"sa-select-description\">\r\n {{props?.['description']}}\r\n </p>\r\n }\r\n </div>\r\n }\r\n <div class=\"sa-select-field-container\">\r\n <div [style.visibility]=\"(props?.['showTag'] !== false && (openState || topLabel)) ? 'visible' : 'hidden'\"\r\n class=\"clicked-label\">{{params.label}}\r\n </div>\r\n <div\r\n class=\"ng-select-field {{openState ? 'activated' : 'idle'}} {{field.props.disabled ? 'disabled' : ''}} {{formControl.valid ? '' : 'invalid'}}\">\r\n <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"left-icon svg-icon\" [style]=\"svgStyle\"\r\n (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\"\r\n *ngIf=\"(params.dropIconPosition == 'left' || params.dropIconPosition == 'both')\">\r\n </div>\r\n <ng-select (change)=\"onNgSelectChange($event)\" (remove)=\"shiftLabel('removed')\" (clear)=\"shiftLabel('cleared')\"\r\n (search)=\"openClose(true)\" (click)=\"openClose(!this.openState)\" (blur)=\"openClose(false)\" [isOpen]=\"openState\"\r\n [placeholder]=\"placeholderLabel\" [bindLabel]=\"props?.['bindLabel'] || 'name'\" [bindValue]=\"props?.['bindValue'] || null\" [items]=\"selectables\" [multiple]=\"params?.multiple\"\r\n [formControl]=\"formControl\" [style] [formlyAttributes]=\"field\" [searchable]=\"field.props['searchable']\" [clearable]=\"false\" [closeOnSelect]=\"!params?.showCheckboxes\"> \r\n <!-- Multi-label template for displaying selected items as chips -->\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n <div *ngFor=\"let item of (items ? items.slice(startInd,startInd+labelLimit): [])\">\r\n <sa-chip (onClickEvent)=\" (!field.props.disabled) ? clear(item) : null\" \r\n [id]=\"getFullObjectFromValue(item)[params?.bindValue || props?.['bindValue'] || 'id']\"\r\n [iconPath]=\"params.iconPath\" \r\n [text]=\"getFullObjectFromValue(item)[params?.bindLabel || props?.['bindLabel'] || 'name']\" \r\n [type]=\"params.type\"\r\n [state]=\"field.props.disabled ? 'neutral' : params.state\" \r\n [filling]=\"params.filling\"\r\n [iconPosition]=\"params.iconPosition\">\r\n </sa-chip>\r\n </div>\r\n <div (click)=\"shiftLabel('clicked')\" class=\"ng-value overflow-label\"\r\n *ngIf=\"items.length > (startInd+labelLimit)\">\r\n <sa-chip text=\"+{{items.length-(startInd+labelLimit)}}\" \r\n [type]=\"params.type || 'regular'\" \r\n [state]=\"params.state || 'primary'\" \r\n [filling]=\"params.filling || 'filled'\">\r\n </sa-chip>\r\n </div>\r\n <div (click)=\"shiftLabel('cleared')\" *ngIf=\"startInd > 0\"\r\n class=\"ng-value overflow-label\">\r\n <sa-chip text=\"...\" \r\n [type]=\"params.type || 'regular'\" \r\n [state]=\"params.state || 'default'\" \r\n [filling]=\"params.filling || 'filled'\">\r\n </sa-chip>\r\n </div>\r\n </ng-template>\r\n \r\n <!-- Universal option template with tooltip support for any select type -->\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\r\n <div class=\"option-container\" [ngClass]=\"{'checkbox-option': params?.showCheckboxes, 'single-option-with-tooltip': !params?.showCheckboxes}\">\r\n <!-- Checkbox for multi-select -->\r\n <input *ngIf=\"params?.showCheckboxes\" \r\n type=\"checkbox\" \r\n [checked]=\"isOptionSelected(item)\" \r\n (mousedown)=\"toggleItemSelection(item, $event)\"\r\n (click)=\"$event.stopPropagation(); $event.preventDefault()\"\r\n class=\"option-checkbox\">\r\n \r\n <!-- Option label -->\r\n <span class=\"option-label\">{{ item[props?.['bindLabel'] || 'name'] }}</span>\r\n \r\n <!-- Tooltip icon - shows when item has description/tooltip -->\r\n <sa-icon *ngIf=\"item.description || item.tooltip\" \r\n [icon]=\"'infoCircleOutlined'\" \r\n [size]=\"'16'\" \r\n class=\"option-tooltip-icon d-flex\"\r\n [matTooltip]=\"item.description || item.tooltip || ''\" \r\n matTooltipClass=\"custom-tooltip\"\r\n [matTooltipDisabled]=\"!(item.description || item.tooltip)\">\r\n </sa-icon>\r\n </div>\r\n </ng-template>\r\n \r\n <!-- Simple header template for Select All / Unselect All when in checkbox mode -->\r\n <ng-template ng-header-tmp *ngIf=\"params?.showCheckboxes && params?.multiple\">\r\n <div class=\"select-all-header\">\r\n <span class=\"select-all-label\" (click)=\"selectAll()\">Select all</span>\r\n <span class=\"unselect-all-label\" (click)=\"unselectAll()\">Unselect all</span>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template ng-arrow-tmp>\r\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex custom-dropdown-arrow\" [size]=\"'18'\"></sa-icon>\r\n </ng-template>\r\n </ng-select>\r\n <div *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\" class=\"right-icon\">\r\n <sa-icon [icon]=\"'downChevronOutlined'\" tabindex=\"0\" class=\"d-flex\" [size]=\"'18'\" (click)=\"openClose(!this.openState)\"\r\n (blur)=\"openClose(false)\" ></sa-icon>\r\n </div>\r\n <!-- <div role=\"button\" title=\"drop-button\" tabindex=\"0\" class=\"right-icon svg-icon\" [style]=\"svgStyle\"\r\n (click)=\"openClose(true)\" (blur)=\"openClose(false)\"\r\n *ngIf=\"(params.dropIconPosition == 'right' || params.dropIconPosition == 'both')\">\r\n </div> -->\r\n\r\n <div class=\"fallback-arrow\" *ngIf=\"!openState\">\r\n <sa-icon [icon]=\"'downChevronOutlined'\" class=\"d-flex\" [size]=\"'18'\"></sa-icon>\r\n </div>\r\n </div>\r\n @if(!formControl.valid){\r\n <div class=\"error-message-container\">\r\n <span class=\"error-message\">\r\n <formly-validation-message [field]=\"field\"></formly-validation-message>\r\n </span>\r\n </div>\r\n }\r\n <div class=\"support-label\">{{params.supportText}}</div>\r\n</div>", styles: [".idle{--border: 1px solid var(--grey-50)}.activated{--border: 1px solid var(--primary-300)}.disabled{border:1px solid var(--grey-50)!important}.ng-select-field:hover{--border: 1px solid var(--primary-300);--font-color: var(--text-highemphasis)}.ng-select-field{width:100%;box-sizing:border-box;position:relative;display:inline-flex;padding:0px var(--small-12px) 0 var(--medium-30px);height:40px;justify-content:center;align-items:center;border:var(--border);border-radius:var(--small-4px);font-family:var(--font);font-size:14px;font-style:normal;font-weight:400;line-height:20px;letter-spacing:.25px;--font-color: var(--text-lowemphasis)}.invalid{border:1px solid var(--semantic-error-500, #BD271E)}.ng-select{width:inherit;display:inline-flex;justify-content:center;align-items:center;flex-shrink:0}::ng-deep .ng-arrow-wrapper{pointer-events:none}.custom-select-container .ng-select{padding-left:1.25rem}.ng-select ::ng-deep .ng-select-container{display:inline-flex;justify-content:center;align-items:center;flex-shrink:0;font-family:var(--font);box-sizing:border-box;border:none}.ng-select ::ng-deep .ng-dropdown-panel{margin-top:2px;border:1px solid var(--grey-50);box-shadow:none;z-index:1000}.ng-select ::ng-deep .ng-select-container{box-shadow:none;position:relative;z-index:1}::ng-deep .ng-select.ng-select-focused:not(.ng-select-opened)>.ng-select-container{box-shadow:none}.ng-select ::ng-deep .ng-value-container{padding:0!important;flex-wrap:nowrap!important;display:flex;justify-content:flex-start;gap:5px;overflow-x:hidden}.ng-select ::ng-deep .ng-value{flex:none;margin:0!important}.overflow-label{padding:0 5px;cursor:pointer}.ng-select ::ng-deep .ng-placeholder{padding:0!important;position:inherit!important;color:var(--text-lowemphasis)}.ng-select ::ng-deep .ng-input{padding:0!important;position:inherit!important}.ng-select ::ng-deep .ng-clear-wrapper{z-index:9;display:flex;margin-left:5px}.ng-select ::ng-deep .ng-arrow{border-color:none!important;border-style:none!important;border-width:0!important}.svg-icon{-webkit-mask-size:contain;mask-size:contain;width:20px;height:20px;background-color:gray}.svg-icon:hover{cursor:pointer}.ng-select ::ng-deep .ng-arrow-wrapper,::ng-deep .ng-select-filtered .ng-select-container .ng-value-container .ng-value{display:none}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:var(--ng-select-chip-bg, var(--primary-50))}.support-label{font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:var(--small-4px) var(--small-16px) 0px var(--small-16px)}.clicked-label{position:relative;width:max-content;font-family:var(--font);font-size:11px;font-style:normal;font-weight:500;line-height:16px;letter-spacing:.5px;color:var(--text-lowemphasis);padding:0 var(--small-8px);margin-left:12px;margin-bottom:-8px;z-index:9999;background-color:#fff}.ng-select ::ng-deep .ng-dropdown-panel{width:calc(100% + 24px);left:-12px;margin-top:6px}.custom-select-container .ng-select ::ng-deep .ng-dropdown-panel{left:.45rem}.d-flex{display:flex}.custom-select-container.sa-select-container{display:flex;flex-direction:column;gap:var(--small-12px, 12px)}.sa-select-label-tooltip-container{display:flex;gap:var(--small-4px);align-items:center}.sa-select-label{color:var(--text-highemphasis, #1B1D20);font-family:var(--font);font-size:var(--small-14px);font-style:normal;font-weight:500;line-height:var(--medium-20px);letter-spacing:.1px}.right-icon{padding-right:1.2rem;color:#757575}.invalid .right-icon{color:var(--semantic-error-500, #BD271E)}.error-message{color:var(--semantic-error-500, #BD271E);font-family:var(--font);font-size:11px;font-style:normal;font-weight:400;line-height:var(--small-16px);letter-spacing:.5px}.checkbox-option{display:flex;align-items:center;padding:8px 12px;cursor:pointer;gap:8px;transition:background-color .2s ease}.checkbox-option:hover{background-color:var(--grey-50, #F9FAFB)}.option-checkbox{width:16px;height:16px;margin-right:8px;cursor:pointer;accent-color:var(--primary-500, #6B46C1)}.option-label{font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.single-option-with-tooltip{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;gap:8px;transition:background-color .2s ease;width:100%}.single-option-with-tooltip .option-label{flex:1;font-size:14px;font-weight:400;color:var(--text-high-emphasis, #1D2939);line-height:20px;letter-spacing:.25px}.option-tooltip-icon{color:var(--grey-400, #98A2B3);cursor:pointer;flex-shrink:0}.option-tooltip-icon:hover{color:var(--primary-500, #6B46C1)}.select-all-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid var(--grey-200, #E4E7EC);background-color:var(--grey-25, #FCFCFD);cursor:pointer;transition:background-color .2s ease}.select-all-header:hover{background-color:var(--grey-50, #F9FAFB)}.select-all-label,.unselect-all-label{font-size:14px;font-weight:500;color:var(--primary-500, #6B46C1);line-height:20px;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background-color .2s ease}.select-all-label:hover,.unselect-all-label:hover{background-color:var(--primary-50, #F3F4F6)}.unselect-all-label{color:var(--grey-600, #475467)}.unselect-all-label:hover{background-color:var(--grey-100, #F2F4F7)}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-placeholder{color:var(--text-medium-emphasis, #6D6979)}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background-color:transparent!important}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-highlighted{background-color:var(--grey-50, #F9FAFB)!important}::ng-deep .ng-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:0}.custom-dropdown-arrow{color:var(--Grey-600, #475467);cursor:pointer;transition:transform .2s ease}.ng-select.ng-select-opened .custom-dropdown-arrow{transform:rotate(180deg)}.ng-select ::ng-deep .ng-arrow-wrapper{display:flex!important;align-items:center;justify-content:center;padding-right:12px;width:18px;height:18px}.ng-select ::ng-deep .ng-arrow-wrapper .ng-arrow{display:none}.ng-select.ng-select-multiple ::ng-deep .ng-arrow-wrapper{display:flex!important}.fallback-arrow{position:absolute;right:12px;top:50%;transform:translateY(-50%);pointer-events:none;z-index:2;color:var(--Grey-600, #475467)}.ng-select ::ng-deep .ng-arrow-wrapper:not(:empty)+.fallback-arrow{display:none}\n"] }]
314
314
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { hoverEvent: [{
315
315
  type: Output,
316
316
  args: ['hoverEvent']
@@ -318,4 +318,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
318
318
  type: ViewChild,
319
319
  args: [NgSelectComponent]
320
320
  }] } });
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9mb3JtLXNlbGVjdC9mb3JtLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0tc2VsZWN0L2Zvcm0tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFzQnpFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxTQUEwQjtJQUlqRSxvREFBb0Q7SUFDcEQsc0JBQXNCLENBQUMsS0FBVTtRQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNsRixDQUFDO0lBWUQsWUFBb0IsVUFBc0I7UUFDeEMsS0FBSyxFQUFFLENBQUM7UUFEVSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBVjFDLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxjQUFTLEdBQVksS0FBSyxDQUFDO1FBRTNCLGFBQVEsR0FBVyxDQUFDLENBQUM7UUFDckIsZUFBVSxHQUFXLENBQUMsQ0FBQztRQUdELGVBQVUsR0FBbUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUt0RixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRS9DLDZDQUE2QztRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNqQyxDQUFDO1FBR0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUMxRSxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2Qsb0JBQW9CLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSztZQUN0RCxZQUFZLEVBQUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRztTQUM3QyxDQUFBO1FBRUQsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDakMsSUFBSSxlQUFlLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxtQkFBbUI7UUFFOUQsbURBQW1EO1FBQ25ELFFBQU8sS0FBSyxFQUFFLENBQUM7WUFDYixLQUFLLFNBQVM7Z0JBQ1osZUFBZSxHQUFHLGdCQUFnQixDQUFDO2dCQUNuQyxNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztnQkFDdEMsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixlQUFlLEdBQUcsaUJBQWlCLENBQUM7Z0JBQ3BDLE1BQU07WUFDUixLQUFLLFNBQVM7Z0JBQ1osZUFBZSxHQUFHLG1CQUFtQixDQUFDO2dCQUN0QyxNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUM7WUFDZjtnQkFDRSxlQUFlLEdBQUcsbUJBQW1CLENBQUM7Z0JBQ3RDLE1BQU07UUFDVixDQUFDO1FBRUQsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzVGLENBQUM7SUFDSCxDQUFDO0lBQ0QsU0FBUyxDQUFDLEtBQWM7UUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFBO1FBQy9DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBQ0QsVUFBVSxDQUFDLE1BQWM7UUFDekIsSUFBSSxNQUFNLElBQUksU0FBUztZQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxJQUFJLE1BQU0sSUFBSSxTQUFTO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDM0MsSUFBSSxNQUFNLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQztZQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDMUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztZQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVDLFlBQVksQ0FBQyxJQUFTLEVBQUUsS0FBWTtRQUNsQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQzNCLHFCQUFxQjtZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRXJELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUNyRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2pFLE9BQU8sYUFBYSxLQUFLLFNBQVMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNmLFFBQVEsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7WUFDN0IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQzthQUFNLENBQUM7WUFDTixRQUFRLEdBQUcsQ0FBQyxHQUFHLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFHRCxnQkFBZ0IsQ0FBQyxRQUFhO1FBQzVCLDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04scUVBQXFFO1lBQ3JFLDhEQUE4RDtZQUM5RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDeEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtZQUFFLE9BQU87UUFFbkMsd0NBQXdDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFNUUsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsNERBQTREO1lBQzVELFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQzthQUFNLENBQUM7WUFDTixzQ0FBc0M7WUFDdEMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTdCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUUxQyw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUTtZQUFFLE9BQU87UUFFbkMsTUFBTSxVQUFVLEdBQVUsRUFBRSxDQUFDO1FBRTdCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUUxQyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbEQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUMzQixZQUFZLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbEQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUMzQixZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDdkIsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUN2RCxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsSUFBUyxFQUFFLEtBQVk7UUFDekMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRO1lBQUUsT0FBTztRQUVuQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU1RSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQixJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRW5ELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCwwRUFBMEU7WUFDMUUsU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQztRQUNoRixDQUFDO2FBQU0sQ0FBQztZQUNOLGlEQUFpRDtZQUNqRCxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUNuRCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDN0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNELENBQUM7Z0JBQ0QsT0FBTyxRQUFRLEtBQUssSUFBSSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksUUFBUSxDQUFDO1FBQ2IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNuQixrQkFBa0I7WUFDbEIsUUFBUSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztZQUM3QixRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoQyxDQUFDO2FBQU0sQ0FBQztZQUNOLGVBQWU7WUFDZixJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLDJCQUEyQjtnQkFDM0IsUUFBUSxHQUFHLENBQUMsR0FBRyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDMUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHNCQUFzQjtnQkFDdEIsUUFBUSxHQUFHLENBQUMsR0FBRyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUVELGtEQUFrRDtRQUNsRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QixDQUFDO1FBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQVM7UUFDeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRS9DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFNUUsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLG9FQUFvRTtZQUNwRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEMsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04saURBQWlEO1lBQ2pELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUN6QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDN0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNELENBQUM7Z0JBQ0QsT0FBTyxRQUFRLEtBQUssSUFBSSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsUUFBYSxFQUFFLEtBQWU7UUFDekMsNEZBQTRGO1FBQzVGLE1BQU0sWUFBWSxHQUFHLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFFaEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekQsc0RBQXNEO1FBQ3RELHNDQUFzQztRQUN0Qyx3REFBd0Q7UUFDeEQscURBQXFEO1FBQ3JELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksS0FBSyxJQUFJLFlBQVksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBQ0QsVUFBVSxDQUFDLElBQXdCLEVBQUUsUUFBYSxJQUFJLEVBQUUsT0FBbUI7UUFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkIsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7UUFDSCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDOzhHQTdUVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw0SkFvQm5CLGlCQUFpQix1RUNuRDlCLHN1TkE4SE0sdWtORDlHRixtQkFBbUIseVRBQ25CLFlBQVkseVFBRVosY0FBYyxzcUNBQ2QsY0FBYywyTkFDZCxJQUFJLDZGQUNKLEtBQUssa0hBQ0wsZ0JBQWdCLDZUQUNoQixhQUFhLG9NQUNiLFlBQVk7OzJGQU1ILG1CQUFtQjtrQkFuQi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osZ0JBQWdCO3FCQUNqQjsrRUF1QnFCLFVBQVU7c0JBQS9CLE1BQU07dUJBQUMsWUFBWTtnQkFDVSxRQUFRO3NCQUFyQyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1seU1vZHVsZSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7IE5nU2VsZWN0Q29tcG9uZW50LCBOZ1NlbGVjdE1vZHVsZSB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcbmltcG9ydCB7IENoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcHMvY2hpcHMuY29tcG9uZW50JztcbmltcG9ydCB7IE5nSWYsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRUb29sdGlwLCBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBTZWxlY3RJbnRlcmZhY2UsIFNlbGVjdFN1YkludGVyZmFjZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZm9ybS1zZWxlY3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3JtbHlNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBOZ1NlbGVjdE1vZHVsZSxcbiAgICBDaGlwc0NvbXBvbmVudCxcbiAgICBOZ0lmLFxuICAgIE5nRm9yLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudCxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZm9ybS1zZWxlY3QuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgRm9ybVNlbGVjdENvbXBvbmVudCBleHRlbmRzIEZpZWxkVHlwZTxGaWVsZFR5cGVDb25maWc+IHtcbiAgc2VsZWN0YWJsZXM6IGFueTtcbiAgcGFyYW1zOiBhbnk7XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgZnVsbCBvYmplY3QgZnJvbSBib3VuZCB2YWx1ZVxuICBnZXRGdWxsT2JqZWN0RnJvbVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGJpbmRWYWx1ZSA9IHRoaXMucGFyYW1zPy5iaW5kVmFsdWUgfHwgdGhpcy5maWVsZC5wcm9wcz8uWydiaW5kVmFsdWUnXTtcbiAgICBpZiAoIWJpbmRWYWx1ZSkgcmV0dXJuIHZhbHVlO1xuICAgIFxuICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVzLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbVtiaW5kVmFsdWVdID09PSB2YWx1ZSkgfHwgdmFsdWU7XG4gIH1cblxuICBzdmdTdHlsZSA9IHt9O1xuICBvcGVuU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG9wTGFiZWw6IGJvb2xlYW47XG4gIHN0YXJ0SW5kOiBudW1iZXIgPSAwO1xuICBsYWJlbExpbWl0OiBudW1iZXIgPSAyO1xuXG4gIHBsYWNlaG9sZGVyTGFiZWw6IHN0cmluZztcbiAgQE91dHB1dCgnaG92ZXJFdmVudCcpIGhvdmVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxzZWxlY3RIb3ZlckV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZChOZ1NlbGVjdENvbXBvbmVudCkgbmdTZWxlY3QhOiBOZ1NlbGVjdENvbXBvbmVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIFxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlbGVjdGFibGVzID0gdGhpcy5maWVsZC5wcm9wcy5vcHRpb25zOyAgICBcbiAgICB0aGlzLnBhcmFtcyA9IHRoaXMuZmllbGQucHJvcHNbJ3BhcmFtcyddIHx8IHt9O1xuICAgIFxuICAgIC8vIEZhbGxiYWNrIHRvIGZpZWxkLnByb3BzIGlmIHBhcmFtcyBpcyBlbXB0eVxuICAgIGlmICghdGhpcy5wYXJhbXMgfHwgT2JqZWN0LmtleXModGhpcy5wYXJhbXMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wYXJhbXMgPSB0aGlzLmZpZWxkLnByb3BzO1xuICAgIH1cbiAgICBcbiAgICBcbiAgICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLnBhcmFtcy5sYWJlbCB8fCB0aGlzLmZpZWxkLnByb3BzLnBsYWNlaG9sZGVyO1xuICAgIHRoaXMuc3ZnU3R5bGUgPSB7XG4gICAgICAnLXdlYmtpdC1tYXNrLWltYWdlJzogYHVybCgke3RoaXMucGFyYW1zLmRyb3BJY29ufSl9KWAsXG4gICAgICAnbWFzay1pbWFnZSc6IGB1cmwoJHt0aGlzLnBhcmFtcy5kcm9wSWNvbn0pYCxcbiAgICB9XG4gICAgXG4gICAgLy8gU2V0IENTUyBjdXN0b20gcHJvcGVydHkgZm9yIGNoaXAgYmFja2dyb3VuZCBiYXNlZCBvbiBzdGF0ZVxuICAgIHRoaXMuc2V0Q2hpcEJhY2tncm91bmRDb2xvcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDaGlwQmFja2dyb3VuZENvbG9yKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5wYXJhbXM/LnN0YXRlO1xuICAgIGxldCBiYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0tcHJpbWFyeS01MCknOyAvLyBkZWZhdWx0IGZhbGxiYWNrXG4gICAgXG4gICAgLy8gTWFwIGNoaXAgc3RhdGVzIHRvIGFwcHJvcHJpYXRlIGJhY2tncm91bmQgY29sb3JzXG4gICAgc3dpdGNoKHN0YXRlKSB7XG4gICAgICBjYXNlICduZXV0cmFsJzpcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLWdyZXktNTApJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLXN1Y2Nlc3MtNTApJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIGJhY2tncm91bmRDb2xvciA9ICd2YXIoLS1lcnJvci01MCknO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0td2FybmluZy01MCknO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ByaW1hcnknOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLXByaW1hcnktNTApJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1uZy1zZWxlY3QtY2hpcC1iZycsIGJhY2tncm91bmRDb2xvcik7XG4gICAgfVxuICB9XG4gIG9wZW5DbG9zZShzdGF0ZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmZpZWxkLnByb3BzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5vcGVuU3RhdGUgPSBzdGF0ZTtcbiAgICBpZiAoc3RhdGUgfHwgdGhpcy5mb3JtQ29udHJvbC52YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlckxhYmVsID0gdGhpcy5wYXJhbXMucGxhY2Vob2xkZXJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXJMYWJlbCA9IHRoaXMucGFyYW1zLmxhYmVsO1xuICAgIH1cbiAgfVxuICBzaGlmdExhYmVsKGFjdGlvbjogc3RyaW5nKSB7XG4gIGlmIChhY3Rpb24gPT0gJ2NsaWNrZWQnKSB0aGlzLnN0YXJ0SW5kKys7XG4gIGlmIChhY3Rpb24gPT0gJ2NsZWFyZWQnKSB0aGlzLnN0YXJ0SW5kID0gMDtcbiAgaWYgKGFjdGlvbiA9PSAncmVtb3ZlZCcgJiYgdGhpcy5zdGFydEluZCA+IDApIHRoaXMuc3RhcnRJbmQtLTtcbiAgdGhpcy50b3BMYWJlbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU/Lmxlbmd0aCA+IDA7IFxuICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLm9wZW5TdGF0ZSB8fCB0aGlzLmZvcm1Db250cm9sLnZhbHVlPy5sZW5ndGggPiAwIFxuICAgID8gdGhpcy5wYXJhbXMucGxhY2Vob2xkZXIgXG4gICAgOiB0aGlzLnBhcmFtcy5sYWJlbDtcbn1cblxuICB0b2dnbGVPcHRpb24oaXRlbTogYW55LCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIGlmICghdGhpcy5wYXJhbXM/Lm11bHRpcGxlKSB7XG4gICAgICAvLyBTaW5nbGUgc2VsZWN0IG1vZGVcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoaXRlbSk7XG4gICAgICB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlOyBcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBNdWx0aS1zZWxlY3QgbW9kZVxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgY29uc3QgYmluZFZhbHVlID0gdGhpcy5wYXJhbXM/LmJpbmRWYWx1ZSB8fCB0aGlzLmZpZWxkLnByb3BzPy5bJ2JpbmRWYWx1ZSddO1xuICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGJpbmRWYWx1ZSA/IGl0ZW1bYmluZFZhbHVlXSA6IGl0ZW07XG4gICAgXG4gICAgY29uc3QgaW5kZXggPSBjdXJyZW50VmFsdWUuZmluZEluZGV4KChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gYmluZFZhbHVlID8gc2VsZWN0ZWRbYmluZFZhbHVlXSA6IHNlbGVjdGVkO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkVmFsdWUgPT09IGl0ZW1WYWx1ZTtcbiAgICB9KTtcblxuICAgIGxldCBuZXdWYWx1ZTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgbmV3VmFsdWUgPSBbLi4uY3VycmVudFZhbHVlXTtcbiAgICAgIG5ld1ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1ZhbHVlID0gWy4uLmN1cnJlbnRWYWx1ZSwgaXRlbV07XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBcbiAgICB0aGlzLmNoZWNrRm9yWmVybyhuZXdWYWx1ZSk7XG4gICAgXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuXG4gIG9uTmdTZWxlY3RDaGFuZ2Uoc2VsZWN0ZWQ6IGFueSk6IHZvaWQge1xuICAgIC8vIE9ubHkgaGFuZGxlIG5nLXNlbGVjdCBjaGFuZ2VzIHdoZW4gTk9UIGluIGNoZWNrYm94IG1vZGVcbiAgICBpZiAoIXRoaXMucGFyYW1zPy5zaG93Q2hlY2tib3hlcykge1xuICAgICAgdGhpcy5jaGVja0Zvclplcm8oc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBjaGVja2JveCBtb2RlLCBwcmV2ZW50IG5nLXNlbGVjdCBmcm9tIGNoYW5naW5nIHRoZSBmb3JtIGNvbnRyb2xcbiAgICAgIC8vIFJlc3RvcmUgdGhlIGN1cnJlbnQgdmFsdWUgdG8gcHJldmVudCBuZy1zZWxlY3QgaW50ZXJmZXJlbmNlXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xuICAgICAgdGhpcy5vcGVuU3RhdGUgPSB0cnVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoY3VycmVudFZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMub3BlblN0YXRlID0gdHJ1ZTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGFyYW1zPy5tdWx0aXBsZSkgcmV0dXJuO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYmluZFZhbHVlIGNvbmZpZ3VyZWRcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnBhcmFtcz8uYmluZFZhbHVlIHx8IHRoaXMuZmllbGQucHJvcHM/LlsnYmluZFZhbHVlJ107XG4gICAgXG4gICAgbGV0IGFsbFZhbHVlcztcbiAgICBpZiAoYmluZFZhbHVlKSB7XG4gICAgICAvLyBJZiBiaW5kVmFsdWUgaXMgY29uZmlndXJlZCwgZXh0cmFjdCBvbmx5IHRoZSBib3VuZCB2YWx1ZXNcbiAgICAgIGFsbFZhbHVlcyA9IHRoaXMuc2VsZWN0YWJsZXMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bYmluZFZhbHVlXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIGJpbmRWYWx1ZSwgc3RvcmUgZnVsbCBvYmplY3RzXG4gICAgICBhbGxWYWx1ZXMgPSBbLi4udGhpcy5zZWxlY3RhYmxlc107XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoYWxsVmFsdWVzKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgXG4gICAgdGhpcy5jaGVja0Zvclplcm8oYWxsVmFsdWVzKTtcbiAgICBcbiAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICBcbiAgICAvLyBFbnN1cmUgRm9ybWx5IGludGVncmF0aW9uXG4gICAgaWYgKHRoaXMuZmllbGQgJiYgdGhpcy5maWVsZC5mb3JtQ29udHJvbCkge1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC5zZXRWYWx1ZShhbGxWYWx1ZXMpO1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgdW5zZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhcmFtcz8ubXVsdGlwbGUpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBlbXB0eVZhbHVlOiBhbnlbXSA9IFtdO1xuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZW1wdHlWYWx1ZSk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIFxuICAgIHRoaXMuY2hlY2tGb3JaZXJvKGVtcHR5VmFsdWUpO1xuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIFxuICAgIGlmICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wpIHtcbiAgICAgIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZW1wdHlWYWx1ZSk7XG4gICAgICB0aGlzLmZpZWxkLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gIH1cblxuICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSAmJiBcbiAgICAgICAgICAgY3VycmVudFZhbHVlLmxlbmd0aCA9PT0gdGhpcy5zZWxlY3RhYmxlcy5sZW5ndGggJiZcbiAgICAgICAgICAgdGhpcy5zZWxlY3RhYmxlcy5ldmVyeSgoaXRlbTogYW55KSA9PiB0aGlzLmlzT3B0aW9uU2VsZWN0ZWQoaXRlbSkpO1xuICB9XG5cbiAgaXNTb21lU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpICYmIFxuICAgICAgICAgICBjdXJyZW50VmFsdWUubGVuZ3RoID4gMCAmJiBcbiAgICAgICAgICAgY3VycmVudFZhbHVlLmxlbmd0aCA8IHRoaXMuc2VsZWN0YWJsZXMubGVuZ3RoO1xuICB9XG4gIHRvZ2dsZUl0ZW1TZWxlY3Rpb24oaXRlbTogYW55LCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIGlmICghdGhpcy5wYXJhbXM/Lm11bHRpcGxlKSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnBhcmFtcz8uYmluZFZhbHVlIHx8IHRoaXMuZmllbGQucHJvcHM/LlsnYmluZFZhbHVlJ107XG4gICAgXG4gICAgbGV0IGl0ZW1JbmRleCA9IC0xO1xuICAgIGxldCBpdGVtVmFsdWUgPSBiaW5kVmFsdWUgPyBpdGVtW2JpbmRWYWx1ZV0gOiBpdGVtO1xuICAgIFxuICAgIGlmIChiaW5kVmFsdWUpIHtcbiAgICAgIC8vIFdoZW4gdXNpbmcgYmluZFZhbHVlLCBjdXJyZW50VmFsdWUgc2hvdWxkIGNvbnRhaW4gb25seSB0aGUgYm91bmQgdmFsdWVzXG4gICAgICBpdGVtSW5kZXggPSBjdXJyZW50VmFsdWUuZmluZEluZGV4KChzZWxlY3RlZDogYW55KSA9PiBzZWxlY3RlZCA9PT0gaXRlbVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2hlbiBub3QgdXNpbmcgYmluZFZhbHVlLCBjb21wYXJlIGZ1bGwgb2JqZWN0c1xuICAgICAgaXRlbUluZGV4ID0gY3VycmVudFZhbHVlLmZpbmRJbmRleCgoc2VsZWN0ZWQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHNlbGVjdGVkID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWQpID09PSBKU09OLnN0cmluZ2lmeShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQgPT09IGl0ZW07XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgbGV0IG5ld1ZhbHVlO1xuICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBpdGVtXG4gICAgICBuZXdWYWx1ZSA9IFsuLi5jdXJyZW50VmFsdWVdO1xuICAgICAgbmV3VmFsdWUuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFkZCB0aGUgaXRlbVxuICAgICAgaWYgKGJpbmRWYWx1ZSkge1xuICAgICAgICAvLyBBZGQgb25seSB0aGUgYm91bmQgdmFsdWVcbiAgICAgICAgbmV3VmFsdWUgPSBbLi4uY3VycmVudFZhbHVlLCBpdGVtVmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIHRoZSBmdWxsIG9iamVjdFxuICAgICAgICBuZXdWYWx1ZSA9IFsuLi5jdXJyZW50VmFsdWUsIGl0ZW1dO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgXG4gICAgdGhpcy5jaGVja0Zvclplcm8obmV3VmFsdWUpO1xuICAgIFxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIFxuICAgIGlmICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wpIHtcbiAgICAgIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICAgIFxuICAgIC8vIEZvcmNlIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbiB0byB1cGRhdGUgdGhlIFVJXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5uZ1NlbGVjdCAmJiAhdGhpcy5uZ1NlbGVjdC5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5uZ1NlbGVjdC5vcGVuKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBpc09wdGlvblNlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnBhcmFtcz8uYmluZFZhbHVlIHx8IHRoaXMuZmllbGQucHJvcHM/LlsnYmluZFZhbHVlJ107XG4gICAgXG4gICAgaWYgKGJpbmRWYWx1ZSkge1xuICAgICAgLy8gV2hlbiB1c2luZyBiaW5kVmFsdWUsIGN1cnJlbnRWYWx1ZSBjb250YWlucyBvbmx5IHRoZSBib3VuZCB2YWx1ZXNcbiAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGl0ZW1bYmluZFZhbHVlXTtcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWUuaW5jbHVkZXMoaXRlbVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2hlbiBub3QgdXNpbmcgYmluZFZhbHVlLCBjb21wYXJlIGZ1bGwgb2JqZWN0c1xuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZS5zb21lKChzZWxlY3RlZDogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzZWxlY3RlZCkgPT09IEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWxlY3RlZCA9PT0gaXRlbTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRm9yWmVybyhzZWxlY3RlZDogYW55LCBzdGF0ZT86IGJvb2xlYW4pIHtcbiAgICAvLyBVc2UgdGhlIHBhc3NlZCBzZWxlY3RlZCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGZvcm0gY29udHJvbCB2YWx1ZVxuICAgIGNvbnN0IHZhbHVlVG9DaGVjayA9IHNlbGVjdGVkICE9PSB1bmRlZmluZWQgPyBzZWxlY3RlZCA6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgXG4gICAgdGhpcy50b3BMYWJlbCA9IHZhbHVlVG9DaGVjaz8ubGVuZ3RoID09IDAgPyBmYWxzZSA6IHRydWU7XG4gICAgLy8gY29uc29sZS5sb2coXCJ0ZXN0XCIsIHRoaXMuZm9ybUNvbnRyb2wudmFsdWU/Lmxlbmd0aClcbiAgICAvLyBjb25zb2xlLmxvZyhcInRlc3RcIiwgdGhpcy5vcGVuU3RhdGUpXG4gICAgLy8gY29uc29sZS5sb2coXCJwbGFjZWhvbGRlci0tLSBcIiwgdGhpcy5wbGFjZWhvbGRlckxhYmVsKVxuICAgIC8vIGNvbnNvbGUubG9nKFwicGFyYW1zLmxhYmVsLS0tIFwiLCB0aGlzLnBhcmFtcy5sYWJlbClcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IHN0YXRlO1xuICAgIGlmIChzdGF0ZSB8fCB2YWx1ZVRvQ2hlY2s/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJMYWJlbCA9IHRoaXMucGFyYW1zLnBsYWNlaG9sZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLnBhcmFtcy5sYWJlbDtcbiAgICB9XG4gIH1cbiAgbW91c2VIb3ZlcihpdGVtOiBTZWxlY3RTdWJJbnRlcmZhY2UsIGV2ZW50OiBhbnkgPSBudWxsLCB0b29sdGlwOiBNYXRUb29sdGlwKSB7ICAvLyBOZXcgbWV0aG9kIGZvciBtb3VzZWVudGVyIGV2ZW50XG4gICAgdGhpcy5ob3ZlckV2ZW50LmVtaXQoe1xuICAgICAgZXZlbnQsXG4gICAgICBpdGVtXG4gICAgfSk7XG4gICAgaWYgKHRvb2x0aXApIHtcbiAgICAgIHRvb2x0aXAuc2hvdygpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIHNlbGVjdEhvdmVyRXZlbnQge1xuICBldmVudDogYW55LFxuICBpdGVtOiBTZWxlY3RTdWJJbnRlcmZhY2Vcbn0iLCI8ZGl2IGNsYXNzPVwic2Etc2VsZWN0LWNvbnRhaW5lciB7e3Byb3BzPy5bJ2lucHV0Q29udGFpbmVyQ2xhc3MnXX19XCI+XG4gIEBpZighIXByb3BzPy5bJ2xhYmVsJ10pe1xuICA8ZGl2IGNsYXNzPVwic2Etc2VsZWN0LWxhYmVsLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJzYS1zZWxlY3QtbGFiZWwtdG9vbHRpcC1jb250YWluZXJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwic2Etc2VsZWN0LWxhYmVsXCI+XG4gICAgICAgIHt7cHJvcHM/LlsnbGFiZWwnXX19XG4gICAgICA8L3NwYW4+XG4gICAgICBAaWYoISFwcm9wcz8uWyd0b29sdGlwJ10pe1xuICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLWNvbnRhaW5lclwiPlxuICAgICAgICA8c2EtaWNvbiBbaWNvbl09XCJwcm9wcz8uWyd0b29sdGlwSWNvbiddIHx8ICdpbmZvQ2lyY2xlT3V0bGluZWQnXCIgY3VzdG9tQ2xhc3M9XCJpbmZvLWljb25cIlxuICAgICAgICAgIFttYXRUb29sdGlwXT1cInByb3BzPy5bJ3Rvb2x0aXAnXVwiIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCIgY2xhc3M9XCJ0b29sdGlwLWljb24gZC1mbGV4XCJcbiAgICAgICAgICBbc2l6ZV09XCJwcm9wcz8uWyd0b29sdGlwSWNvblNpemUnXSB8fCAnMjAnXCI+PC9zYS1pY29uPlxuICAgICAgPC9zcGFuPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIEBpZighIXByb3BzPy5bJ2Rlc2NyaXB0aW9uJ10pIHtcbiAgICA8cCBjbGFzcz1cInNhLXNlbGVjdC1kZXNjcmlwdGlvblwiPlxuICAgICAge3twcm9wcz8uWydkZXNjcmlwdGlvbiddfX1cbiAgICA8L3A+XG4gICAgfVxuICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwic2Etc2VsZWN0LWZpZWxkLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgW3N0eWxlLnZpc2liaWxpdHldPVwiKHByb3BzPy5bJ3Nob3dUYWcnXSAhPT0gZmFsc2UgJiYgKG9wZW5TdGF0ZSB8fCB0b3BMYWJlbCkpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgY2xhc3M9XCJjbGlja2VkLWxhYmVsXCI+e3twYXJhbXMubGFiZWx9fVxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibmctc2VsZWN0LWZpZWxkIHt7b3BlblN0YXRlID8gJ2FjdGl2YXRlZCcgOiAnaWRsZSd9fSB7e2ZpZWxkLnByb3BzLmRpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnfX0ge3tmb3JtQ29udHJvbC52YWxpZCA/ICcnIDogJ2ludmFsaWQnfX1cIj5cbiAgICAgIDxkaXYgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiZHJvcC1idXR0b25cIiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImxlZnQtaWNvbiBzdmctaWNvblwiIFtzdHlsZV09XCJzdmdTdHlsZVwiXG4gICAgICAgIChjbGljayk9XCJvcGVuQ2xvc2UoIXRoaXMub3BlblN0YXRlKVwiIChibHVyKT1cIm9wZW5DbG9zZShmYWxzZSlcIlxuICAgICAgICAqbmdJZj1cIihwYXJhbXMuZHJvcEljb25Qb3NpdGlvbiA9PSAnbGVmdCcgfHwgcGFyYW1zLmRyb3BJY29uUG9zaXRpb24gPT0gJ2JvdGgnKVwiPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctc2VsZWN0IChjaGFuZ2UpPVwib25OZ1NlbGVjdENoYW5nZSgkZXZlbnQpXCIgKHJlbW92ZSk9XCJzaGlmdExhYmVsKCdyZW1vdmVkJylcIiAoY2xlYXIpPVwic2hpZnRMYWJlbCgnY2xlYXJlZCcpXCJcbiAgICAgIChzZWFyY2gpPVwib3BlbkNsb3NlKHRydWUpXCIgKGNsaWNrKT1cIm9wZW5DbG9zZSghdGhpcy5vcGVuU3RhdGUpXCIgKGJsdXIpPVwib3BlbkNsb3NlKGZhbHNlKVwiIFtpc09wZW5dPVwib3BlblN0YXRlXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlckxhYmVsXCIgW2JpbmRMYWJlbF09XCJwcm9wcz8uWydiaW5kTGFiZWwnXSB8fCAnbmFtZSdcIiBbYmluZFZhbHVlXT1cInByb3BzPy5bJ2JpbmRWYWx1ZSddIHx8IG51bGxcIiBbaXRlbXNdPVwic2VsZWN0YWJsZXNcIiBbbXVsdGlwbGVdPVwicGFyYW1zPy5tdWx0aXBsZVwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiBbc3R5bGVdIFtmb3JtbHlBdHRyaWJ1dGVzXT1cImZpZWxkXCIgW3NlYXJjaGFibGVdPVwiZmllbGQucHJvcHNbJ3NlYXJjaGFibGUnXVwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBjbGFzcz1cImZvcm0tbmctc2VsZWN0XCI+ICAgICAgXG4gICAgICA8IS0tIE11bHRpLWxhYmVsIHRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHNlbGVjdGVkIGl0ZW1zIGFzIGNoaXBzIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nLW11bHRpLWxhYmVsLXRtcCBsZXQtaXRlbXM9XCJpdGVtc1wiIGxldC1jbGVhcj1cImNsZWFyXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgKGl0ZW1zID8gaXRlbXMuc2xpY2Uoc3RhcnRJbmQsc3RhcnRJbmQrbGFiZWxMaW1pdCk6IFtdKVwiPlxuICAgICAgICAgIDxzYS1jaGlwIChvbkNsaWNrRXZlbnQpPVwiICghZmllbGQucHJvcHMuZGlzYWJsZWQpID8gIGNsZWFyKGl0ZW0pIDogbnVsbFwiIFxuICAgICAgICAgICAgW2lkXT1cImdldEZ1bGxPYmplY3RGcm9tVmFsdWUoaXRlbSlbcGFyYW1zPy5iaW5kVmFsdWUgfHwgcHJvcHM/LlsnYmluZFZhbHVlJ10gfHwgJ2lkJ11cIlxuICAgICAgICAgICAgW2ljb25QYXRoXT1cInBhcmFtcy5pY29uUGF0aFwiIFxuICAgICAgICAgICAgW3RleHRdPVwiZ2V0RnVsbE9iamVjdEZyb21WYWx1ZShpdGVtKVtwYXJhbXM/LmJpbmRMYWJlbCB8fCBwcm9wcz8uWydiaW5kTGFiZWwnXSB8fCAnbmFtZSddXCIgXG4gICAgICAgICAgICBbdHlwZV09XCJwYXJhbXMudHlwZVwiXG4gICAgICAgICAgICBbc3RhdGVdPVwiZmllbGQucHJvcHMuZGlzYWJsZWQgPyAnbmV1dHJhbCcgOiBwYXJhbXMuc3RhdGVcIiBcbiAgICAgICAgICAgIFtmaWxsaW5nXT1cInBhcmFtcy5maWxsaW5nXCJcbiAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwicGFyYW1zLmljb25Qb3NpdGlvblwiPlxuICAgICAgICAgIDwvc2EtY2hpcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInNoaWZ0TGFiZWwoJ2NsaWNrZWQnKVwiIGNsYXNzPVwibmctdmFsdWUgb3ZlcmZsb3ctbGFiZWxcIlxuICAgICAgICAgICpuZ0lmPVwiaXRlbXMubGVuZ3RoID4gKHN0YXJ0SW5kK2xhYmVsTGltaXQpXCI+XG4gICAgICAgICAgPHNhLWNoaXAgdGV4dD1cIit7e2l0ZW1zLmxlbmd0aC0oc3RhcnRJbmQrbGFiZWxMaW1pdCl9fVwiIFxuICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInBhcmFtcy50eXBlIHx8ICdyZWd1bGFyJ1wiIFxuICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJwYXJhbXMuc3RhdGUgfHwgJ3ByaW1hcnknXCIgXG4gICAgICAgICAgICAgICAgICAgW2ZpbGxpbmddPVwicGFyYW1zLmZpbGxpbmcgfHwgJ2ZpbGxlZCdcIj5cbiAgICAgICAgICA8L3NhLWNoaXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IChjbGljayk9XCJzaGlmdExhYmVsKCdjbGVhcmVkJylcIiAqbmdJZj1cInN0YXJ0SW5kID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJuZy12YWx1ZSBvdmVyZmxvdy1sYWJlbFwiPlxuICAgICAgICAgIDxzYS1jaGlwIHRleHQ9XCIuLi5cIiBcbiAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJwYXJhbXMudHlwZSB8fCAncmVndWxhcidcIiBcbiAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwicGFyYW1zLnN0YXRlIHx8ICdkZWZhdWx0J1wiIFxuICAgICAgICAgICAgICAgICAgIFtmaWxsaW5nXT1cInBhcmFtcy5maWxsaW5nIHx8ICdmaWxsZWQnXCI+XG4gICAgICAgICAgPC9zYS1jaGlwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICBcbiAgICAgIDwhLS0gVW5pdmVyc2FsIG9wdGlvbiB0ZW1wbGF0ZSB3aXRoIHRvb2x0aXAgc3VwcG9ydCBmb3IgYW55IHNlbGVjdCB0eXBlIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWl0ZW0kPVwiaXRlbSRcIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsnY2hlY2tib3gtb3B0aW9uJzogcGFyYW1zPy5zaG93Q2hlY2tib3hlcywgJ3NpbmdsZS1vcHRpb24td2l0aC10b29sdGlwJzogIXBhcmFtcz8uc2hvd0NoZWNrYm94ZXN9XCI+XG4gICAgICAgICAgPCEtLSBDaGVja2JveCBmb3IgbXVsdGktc2VsZWN0IC0tPlxuICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInBhcmFtcz8uc2hvd0NoZWNrYm94ZXNcIiBcbiAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgXG4gICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzT3B0aW9uU2VsZWN0ZWQoaXRlbSlcIiBcbiAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJ0b2dnbGVJdGVtU2VsZWN0aW9uKGl0ZW0sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWNoZWNrYm94XCI+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBPcHRpb24gbGFiZWwgLS0+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb24tbGFiZWxcIj57eyBpdGVtW3Byb3BzPy5bJ2JpbmRMYWJlbCddIHx8ICduYW1lJ10gfX08L3NwYW4+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSBUb29sdGlwIGljb24gLSBzaG93cyB3aGVuIGl0ZW0gaGFzIGRlc2NyaXB0aW9uL3Rvb2x0aXAgLS0+XG4gICAgICAgICAgPHNhLWljb24gKm5nSWY9XCJpdGVtLmRlc2NyaXB0aW9uIHx8IGl0ZW0udG9vbHRpcFwiIFxuICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidpbmZvQ2lyY2xlT3V0bGluZWQnXCIgXG4gICAgICAgICAgICAgICAgICAgW3NpemVdPVwiJzE2J1wiIFxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLXRvb2x0aXAtaWNvbiBkLWZsZXhcIlxuICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIml0ZW0uZGVzY3JpcHRpb24gfHwgaXRlbS50b29sdGlwIHx8ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIShpdGVtLmRlc2NyaXB0aW9uIHx8IGl0ZW0udG9vbHRpcClcIj5cbiAgICAgICAgICA8L3NhLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIFxuICAgICAgPCEtLSBTaW1wbGUgaGVhZGVyIHRlbXBsYXRlIGZvciBTZWxlY3QgQWxsIC8gVW5zZWxlY3QgQWxsIHdoZW4gaW4gY2hlY2tib3ggbW9kZSAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBuZy1oZWFkZXItdG1wICpuZ0lmPVwicGFyYW1zPy5zaG93Q2hlY2tib3hlcyAmJiBwYXJhbXM/Lm11bHRpcGxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtYWxsLWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LWFsbC1sYWJlbFwiIChjbGljayk9XCJzZWxlY3RBbGwoKVwiPlNlbGVjdCBhbGw8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bnNlbGVjdC1hbGwtbGFiZWxcIiAoY2xpY2spPVwidW5zZWxlY3RBbGwoKVwiPlVuc2VsZWN0IGFsbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGUgbmctYXJyb3ctdG1wPlxuICAgICAgICA8c2EtaWNvbiBbaWNvbl09XCInZG93bkNoZXZyb25PdXRsaW5lZCdcIiBjbGFzcz1cImQtZmxleCBjdXN0b20tZHJvcGRvd24tYXJyb3dcIiBbc2l6ZV09XCInMTgnXCI+PC9zYS1pY29uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXNlbGVjdD5cbiAgICA8ZGl2ICpuZ0lmPVwiKHBhcmFtcy5kcm9wSWNvblBvc2l0aW9uID09ICdyaWdodCcgfHwgcGFyYW1zLmRyb3BJY29uUG9zaXRpb24gPT0gJ2JvdGgnKVwiIGNsYXNzPVwicmlnaHQtaWNvblwiPlxuICAgICAgPHNhLWljb24gW2ljb25dPVwiJ2Rvd25DaGV2cm9uT3V0bGluZWQnXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJkLWZsZXhcIiBbc2l6ZV09XCInMTgnXCIgKGNsaWNrKT1cIm9wZW5DbG9zZSghdGhpcy5vcGVuU3RhdGUpXCJcbiAgICAgICAgKGJsdXIpPVwib3BlbkNsb3NlKGZhbHNlKVwiID48L3NhLWljb24+XG4gICAgPC9kaXY+XG4gICAgPCEtLSA8ZGl2IHJvbGU9XCJidXR0b25cIiB0aXRsZT1cImRyb3AtYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJyaWdodC1pY29uIHN2Zy1pY29uXCIgW3N0eWxlXT1cInN2Z1N0eWxlXCJcbiAgICAgIChjbGljayk9XCJvcGVuQ2xvc2UodHJ1ZSlcIiAoYmx1cik9XCJvcGVuQ2xvc2UoZmFsc2UpXCJcbiAgICAgICpuZ0lmPVwiKHBhcmFtcy5kcm9wSWNvblBvc2l0aW9uID09ICdyaWdodCcgfHwgcGFyYW1zLmRyb3BJY29uUG9zaXRpb24gPT0gJ2JvdGgnKVwiPlxuICAgIDwvZGl2PiAtLT5cblxuIDxkaXYgY2xhc3M9XCJmYWxsYmFjay1hcnJvd1wiICpuZ0lmPVwiIW9wZW5TdGF0ZVwiPlxuICA8c2EtaWNvbiBbaWNvbl09XCInZG93bkNoZXZyb25PdXRsaW5lZCdcIiBjbGFzcz1cImQtZmxleFwiIFtzaXplXT1cIicxOCdcIj48L3NhLWljb24+XG4gPC9kaXY+XG4gIDwvZGl2PlxuICBAaWYoIWZvcm1Db250cm9sLnZhbGlkKXtcbiAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2UtY29udGFpbmVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8Zm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZSBbZmllbGRdPVwiZmllbGRcIj48L2Zvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2U+XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwic3VwcG9ydC1sYWJlbFwiPnt7cGFyYW1zLnN1cHBvcnRUZXh0fX08L2Rpdj5cbjwvZGl2PiJdfQ==
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50LWxpYnJhcnkvc3JjL2xpYi9mb3JtLXNlbGVjdC9mb3JtLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnQtbGlicmFyeS9zcmMvbGliL2Zvcm0tc2VsZWN0L2Zvcm0tc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWMsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7QUFzQnpFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxTQUEwQjtJQUlqRSxvREFBb0Q7SUFDcEQsc0JBQXNCLENBQUMsS0FBVTtRQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMs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QUMsV0FBVyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBQ0QsVUFBVSxDQUFDLElBQXdCLEVBQUUsUUFBYSxJQUFJLEVBQUUsT0FBbUI7UUFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDbkIsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDLENBQUM7UUFDSCxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDOzhHQTdUVSxtQkFBbUI7a0dBQW5CLG1CQUFtQiw0SkFvQm5CLGlCQUFpQix1RUNuRDlCLHEvTkE4SE0sMGhORDlHRixtQkFBbUIseVRBQ25CLFlBQVkseVFBRVosY0FBYyxzcUNBQ2QsY0FBYywyTkFDZCxJQUFJLDZGQUNKLEtBQUssa0hBQ0wsZ0JBQWdCLDZUQUNoQixhQUFhLG9NQUNiLFlBQVk7OzJGQU1ILG1CQUFtQjtrQkFuQi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osZ0JBQWdCO3FCQUNqQjsrRUF1QnFCLFVBQVU7c0JBQS9CLE1BQU07dUJBQUMsWUFBWTtnQkFDVSxRQUFRO3NCQUFyQyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtbHlNb2R1bGUgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgRmllbGRUeXBlLCBGaWVsZFR5cGVDb25maWcgfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcclxuaW1wb3J0IHsgTmdTZWxlY3RDb21wb25lbnQsIE5nU2VsZWN0TW9kdWxlIH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xyXG5pbXBvcnQgeyBDaGlwc0NvbXBvbmVudCB9IGZyb20gJy4uL2NoaXBzL2NoaXBzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5nSWYsIE5nRm9yIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaWNvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwLCBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IFNlbGVjdEludGVyZmFjZSwgU2VsZWN0U3ViSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1mb3JtLXNlbGVjdCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgRm9ybWx5TW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE5nU2VsZWN0TW9kdWxlLFxyXG4gICAgQ2hpcHNDb21wb25lbnQsXHJcbiAgICBOZ0lmLFxyXG4gICAgTmdGb3IsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgSWNvbkNvbXBvbmVudCxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2Zvcm0tc2VsZWN0LmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgRmllbGRUeXBlPEZpZWxkVHlwZUNvbmZpZz4ge1xyXG4gIHNlbGVjdGFibGVzOiBhbnk7XHJcbiAgcGFyYW1zOiBhbnk7XHJcblxyXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IGZ1bGwgb2JqZWN0IGZyb20gYm91bmQgdmFsdWVcclxuICBnZXRGdWxsT2JqZWN0RnJvbVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgY29uc3QgYmluZFZhbHVlID0gdGhpcy5wYXJhbXM/LmJpbmRWYWx1ZSB8fCB0aGlzLmZpZWxkLnByb3BzPy5bJ2JpbmRWYWx1ZSddO1xyXG4gICAgaWYgKCFiaW5kVmFsdWUpIHJldHVybiB2YWx1ZTtcclxuICAgIFxyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZXMuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtW2JpbmRWYWx1ZV0gPT09IHZhbHVlKSB8fCB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHN2Z1N0eWxlID0ge307XHJcbiAgb3BlblN0YXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9wTGFiZWw6IGJvb2xlYW47XHJcbiAgc3RhcnRJbmQ6IG51bWJlciA9IDA7XHJcbiAgbGFiZWxMaW1pdDogbnVtYmVyID0gMjtcclxuXHJcbiAgcGxhY2Vob2xkZXJMYWJlbDogc3RyaW5nO1xyXG4gIEBPdXRwdXQoJ2hvdmVyRXZlbnQnKSBob3ZlckV2ZW50OiBFdmVudEVtaXR0ZXI8c2VsZWN0SG92ZXJFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZChOZ1NlbGVjdENvbXBvbmVudCkgbmdTZWxlY3QhOiBOZ1NlbGVjdENvbXBvbmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuICBcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2VsZWN0YWJsZXMgPSB0aGlzLmZpZWxkLnByb3BzLm9wdGlvbnM7ICAgIFxyXG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLmZpZWxkLnByb3BzWydwYXJhbXMnXSB8fCB7fTtcclxuICAgIFxyXG4gICAgLy8gRmFsbGJhY2sgdG8gZmllbGQucHJvcHMgaWYgcGFyYW1zIGlzIGVtcHR5XHJcbiAgICBpZiAoIXRoaXMucGFyYW1zIHx8IE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5wYXJhbXMgPSB0aGlzLmZpZWxkLnByb3BzO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIHRoaXMucGxhY2Vob2xkZXJMYWJlbCA9IHRoaXMucGFyYW1zLmxhYmVsIHx8IHRoaXMuZmllbGQucHJvcHMucGxhY2Vob2xkZXI7XHJcbiAgICB0aGlzLnN2Z1N0eWxlID0ge1xyXG4gICAgICAnLXdlYmtpdC1tYXNrLWltYWdlJzogYHVybCgke3RoaXMucGFyYW1zLmRyb3BJY29ufSl9KWAsXHJcbiAgICAgICdtYXNrLWltYWdlJzogYHVybCgke3RoaXMucGFyYW1zLmRyb3BJY29ufSlgLFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBTZXQgQ1NTIGN1c3RvbSBwcm9wZXJ0eSBmb3IgY2hpcCBiYWNrZ3JvdW5kIGJhc2VkIG9uIHN0YXRlXHJcbiAgICB0aGlzLnNldENoaXBCYWNrZ3JvdW5kQ29sb3IoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q2hpcEJhY2tncm91bmRDb2xvcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5wYXJhbXM/LnN0YXRlO1xyXG4gICAgbGV0IGJhY2tncm91bmRDb2xvciA9ICd2YXIoLS1wcmltYXJ5LTUwKSc7IC8vIGRlZmF1bHQgZmFsbGJhY2tcclxuICAgIFxyXG4gICAgLy8gTWFwIGNoaXAgc3RhdGVzIHRvIGFwcHJvcHJpYXRlIGJhY2tncm91bmQgY29sb3JzXHJcbiAgICBzd2l0Y2goc3RhdGUpIHtcclxuICAgICAgY2FzZSAnbmV1dHJhbCc6XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLWdyZXktNTApJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc3VjY2Vzcyc6XHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gJ3ZhcigtLXN1Y2Nlc3MtNTApJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZXJyb3InOlxyXG4gICAgICAgIGJhY2tncm91bmRDb2xvciA9ICd2YXIoLS1lcnJvci01MCknO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICd3YXJuaW5nJzpcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0td2FybmluZy01MCknO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwcmltYXJ5JzpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0tcHJpbWFyeS01MCknO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1uZy1zZWxlY3QtY2hpcC1iZycsIGJhY2tncm91bmRDb2xvcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9wZW5DbG9zZShzdGF0ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuZmllbGQucHJvcHMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMub3BlblN0YXRlID0gc3RhdGU7XHJcbiAgICBpZiAoc3RhdGUgfHwgdGhpcy5mb3JtQ29udHJvbC52YWx1ZT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLnBhcmFtcy5wbGFjZWhvbGRlclxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXJMYWJlbCA9IHRoaXMucGFyYW1zLmxhYmVsO1xyXG4gICAgfVxyXG4gIH1cclxuICBzaGlmdExhYmVsKGFjdGlvbjogc3RyaW5nKSB7XHJcbiAgaWYgKGFjdGlvbiA9PSAnY2xpY2tlZCcpIHRoaXMuc3RhcnRJbmQrKztcclxuICBpZiAoYWN0aW9uID09ICdjbGVhcmVkJykgdGhpcy5zdGFydEluZCA9IDA7XHJcbiAgaWYgKGFjdGlvbiA9PSAncmVtb3ZlZCcgJiYgdGhpcy5zdGFydEluZCA+IDApIHRoaXMuc3RhcnRJbmQtLTtcclxuICB0aGlzLnRvcExhYmVsID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZT8ubGVuZ3RoID4gMDsgXHJcbiAgdGhpcy5wbGFjZWhvbGRlckxhYmVsID0gdGhpcy5vcGVuU3RhdGUgfHwgdGhpcy5mb3JtQ29udHJvbC52YWx1ZT8ubGVuZ3RoID4gMCBcclxuICAgID8gdGhpcy5wYXJhbXMucGxhY2Vob2xkZXIgXHJcbiAgICA6IHRoaXMucGFyYW1zLmxhYmVsO1xyXG59XHJcblxyXG4gIHRvZ2dsZU9wdGlvbihpdGVtOiBhbnksIGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMucGFyYW1zPy5tdWx0aXBsZSkge1xyXG4gICAgICAvLyBTaW5nbGUgc2VsZWN0IG1vZGVcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShpdGVtKTtcclxuICAgICAgdGhpcy5vcGVuU3RhdGUgPSBmYWxzZTsgXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBNdWx0aS1zZWxlY3QgbW9kZVxyXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcclxuICAgIGNvbnN0IGJpbmRWYWx1ZSA9IHRoaXMucGFyYW1zPy5iaW5kVmFsdWUgfHwgdGhpcy5maWVsZC5wcm9wcz8uWydiaW5kVmFsdWUnXTtcclxuICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGJpbmRWYWx1ZSA/IGl0ZW1bYmluZFZhbHVlXSA6IGl0ZW07XHJcbiAgICBcclxuICAgIGNvbnN0IGluZGV4ID0gY3VycmVudFZhbHVlLmZpbmRJbmRleCgoc2VsZWN0ZWQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gYmluZFZhbHVlID8gc2VsZWN0ZWRbYmluZFZhbHVlXSA6IHNlbGVjdGVkO1xyXG4gICAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZSA9PT0gaXRlbVZhbHVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IG5ld1ZhbHVlO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgbmV3VmFsdWUgPSBbLi4uY3VycmVudFZhbHVlXTtcclxuICAgICAgbmV3VmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld1ZhbHVlID0gWy4uLmN1cnJlbnRWYWx1ZSwgaXRlbV07XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICBcclxuICAgIHRoaXMuY2hlY2tGb3JaZXJvKG5ld1ZhbHVlKTtcclxuICAgIFxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25OZ1NlbGVjdENoYW5nZShzZWxlY3RlZDogYW55KTogdm9pZCB7XHJcbiAgICAvLyBPbmx5IGhhbmRsZSBuZy1zZWxlY3QgY2hhbmdlcyB3aGVuIE5PVCBpbiBjaGVja2JveCBtb2RlXHJcbiAgICBpZiAoIXRoaXMucGFyYW1zPy5zaG93Q2hlY2tib3hlcykge1xyXG4gICAgICB0aGlzLmNoZWNrRm9yWmVybyhzZWxlY3RlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBJbiBjaGVja2JveCBtb2RlLCBwcmV2ZW50IG5nLXNlbGVjdCBmcm9tIGNoYW5naW5nIHRoZSBmb3JtIGNvbnRyb2xcclxuICAgICAgLy8gUmVzdG9yZSB0aGUgY3VycmVudCB2YWx1ZSB0byBwcmV2ZW50IG5nLXNlbGVjdCBpbnRlcmZlcmVuY2VcclxuICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcclxuICAgICAgdGhpcy5vcGVuU3RhdGUgPSB0cnVlO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGN1cnJlbnRWYWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIHRoaXMub3BlblN0YXRlID0gdHJ1ZTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGwoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMucGFyYW1zPy5tdWx0aXBsZSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGJpbmRWYWx1ZSBjb25maWd1cmVkXHJcbiAgICBjb25zdCBiaW5kVmFsdWUgPSB0aGlzLnBhcmFtcz8uYmluZFZhbHVlIHx8IHRoaXMuZmllbGQucHJvcHM/LlsnYmluZFZhbHVlJ107XHJcbiAgICBcclxuICAgIGxldCBhbGxWYWx1ZXM7XHJcbiAgICBpZiAoYmluZFZhbHVlKSB7XHJcbiAgICAgIC8vIElmIGJpbmRWYWx1ZSBpcyBjb25maWd1cmVkLCBleHRyYWN0IG9ubHkgdGhlIGJvdW5kIHZhbHVlc1xyXG4gICAgICBhbGxWYWx1ZXMgPSB0aGlzLnNlbGVjdGFibGVzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW2JpbmRWYWx1ZV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gSWYgbm8gYmluZFZhbHVlLCBzdG9yZSBmdWxsIG9iamVjdHNcclxuICAgICAgYWxsVmFsdWVzID0gWy4uLnRoaXMuc2VsZWN0YWJsZXNdO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKGFsbFZhbHVlcyk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIFxyXG4gICAgdGhpcy5jaGVja0Zvclplcm8oYWxsVmFsdWVzKTtcclxuICAgIFxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICBcclxuICAgIC8vIEVuc3VyZSBGb3JtbHkgaW50ZWdyYXRpb25cclxuICAgIGlmICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC5zZXRWYWx1ZShhbGxWYWx1ZXMpO1xyXG4gICAgICB0aGlzLmZpZWxkLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVuc2VsZWN0QWxsKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnBhcmFtcz8ubXVsdGlwbGUpIHJldHVybjtcclxuICAgIFxyXG4gICAgY29uc3QgZW1wdHlWYWx1ZTogYW55W10gPSBbXTtcclxuICAgIFxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShlbXB0eVZhbHVlKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgXHJcbiAgICB0aGlzLmNoZWNrRm9yWmVybyhlbXB0eVZhbHVlKTtcclxuICAgIFxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmZpZWxkICYmIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC5zZXRWYWx1ZShlbXB0eVZhbHVlKTtcclxuICAgICAgdGhpcy5maWVsZC5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcclxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGN1cnJlbnRWYWx1ZSkgJiYgXHJcbiAgICAgICAgICAgY3VycmVudFZhbHVlLmxlbmd0aCA9PT0gdGhpcy5zZWxlY3RhYmxlcy5sZW5ndGggJiZcclxuICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVzLmV2ZXJ5KChpdGVtOiBhbnkpID0+IHRoaXMuaXNPcHRpb25TZWxlY3RlZChpdGVtKSk7XHJcbiAgfVxyXG5cclxuICBpc1NvbWVTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpICYmIFxyXG4gICAgICAgICAgIGN1cnJlbnRWYWx1ZS5sZW5ndGggPiAwICYmIFxyXG4gICAgICAgICAgIGN1cnJlbnRWYWx1ZS5sZW5ndGggPCB0aGlzLnNlbGVjdGFibGVzLmxlbmd0aDtcclxuICB9XHJcbiAgdG9nZ2xlSXRlbVNlbGVjdGlvbihpdGVtOiBhbnksIGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMucGFyYW1zPy5tdWx0aXBsZSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xyXG4gICAgY29uc3QgYmluZFZhbHVlID0gdGhpcy5wYXJhbXM/LmJpbmRWYWx1ZSB8fCB0aGlzLmZpZWxkLnByb3BzPy5bJ2JpbmRWYWx1ZSddO1xyXG4gICAgXHJcbiAgICBsZXQgaXRlbUluZGV4ID0gLTE7XHJcbiAgICBsZXQgaXRlbVZhbHVlID0gYmluZFZhbHVlID8gaXRlbVtiaW5kVmFsdWVdIDogaXRlbTtcclxuICAgIFxyXG4gICAgaWYgKGJpbmRWYWx1ZSkge1xyXG4gICAgICAvLyBXaGVuIHVzaW5nIGJpbmRWYWx1ZSwgY3VycmVudFZhbHVlIHNob3VsZCBjb250YWluIG9ubHkgdGhlIGJvdW5kIHZhbHVlc1xyXG4gICAgICBpdGVtSW5kZXggPSBjdXJyZW50VmFsdWUuZmluZEluZGV4KChzZWxlY3RlZDogYW55KSA9PiBzZWxlY3RlZCA9PT0gaXRlbVZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdoZW4gbm90IHVzaW5nIGJpbmRWYWx1ZSwgY29tcGFyZSBmdWxsIG9iamVjdHNcclxuICAgICAgaXRlbUluZGV4ID0gY3VycmVudFZhbHVlLmZpbmRJbmRleCgoc2VsZWN0ZWQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNlbGVjdGVkKSA9PT0gSlNPTi5zdHJpbmdpZnkoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWxlY3RlZCA9PT0gaXRlbTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGxldCBuZXdWYWx1ZTtcclxuICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xyXG4gICAgICAvLyBSZW1vdmUgdGhlIGl0ZW1cclxuICAgICAgbmV3VmFsdWUgPSBbLi4uY3VycmVudFZhbHVlXTtcclxuICAgICAgbmV3VmFsdWUuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBBZGQgdGhlIGl0ZW1cclxuICAgICAgaWYgKGJpbmRWYWx1ZSkge1xyXG4gICAgICAgIC8vIEFkZCBvbmx5IHRoZSBib3VuZCB2YWx1ZVxyXG4gICAgICAgIG5ld1ZhbHVlID0gWy4uLmN1cnJlbnRWYWx1ZSwgaXRlbVZhbHVlXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBBZGQgdGhlIGZ1bGwgb2JqZWN0XHJcbiAgICAgICAgbmV3VmFsdWUgPSBbLi4uY3VycmVudFZhbHVlLCBpdGVtXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgXHJcbiAgICB0aGlzLmNoZWNrRm9yWmVybyhuZXdWYWx1ZSk7XHJcbiAgICBcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5maWVsZCAmJiB0aGlzLmZpZWxkLmZvcm1Db250cm9sKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuZm9ybUNvbnRyb2wuc2V0VmFsdWUobmV3VmFsdWUpO1xyXG4gICAgICB0aGlzLmZpZWxkLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gRm9yY2UgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uIHRvIHVwZGF0ZSB0aGUgVUlcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5uZ1NlbGVjdCAmJiAhdGhpcy5uZ1NlbGVjdC5pc09wZW4pIHtcclxuICAgICAgICB0aGlzLm5nU2VsZWN0Lm9wZW4oKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICBpc09wdGlvblNlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBcclxuICAgIGNvbnN0IGJpbmRWYWx1ZSA9IHRoaXMucGFyYW1zPy5iaW5kVmFsdWUgfHwgdGhpcy5maWVsZC5wcm9wcz8uWydiaW5kVmFsdWUnXTtcclxuICAgIFxyXG4gICAgaWYgKGJpbmRWYWx1ZSkge1xyXG4gICAgICAvLyBXaGVuIHVzaW5nIGJpbmRWYWx1ZSwgY3VycmVudFZhbHVlIGNvbnRhaW5zIG9ubHkgdGhlIGJvdW5kIHZhbHVlc1xyXG4gICAgICBjb25zdCBpdGVtVmFsdWUgPSBpdGVtW2JpbmRWYWx1ZV07XHJcbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWUuaW5jbHVkZXMoaXRlbVZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdoZW4gbm90IHVzaW5nIGJpbmRWYWx1ZSwgY29tcGFyZSBmdWxsIG9iamVjdHNcclxuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZS5zb21lKChzZWxlY3RlZDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RlZCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWQpID09PSBKU09OLnN0cmluZ2lmeShpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkID09PSBpdGVtO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrRm9yWmVybyhzZWxlY3RlZDogYW55LCBzdGF0ZT86IGJvb2xlYW4pIHtcclxuICAgIC8vIFVzZSB0aGUgcGFzc2VkIHNlbGVjdGVkIHBhcmFtZXRlciBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gZm9ybSBjb250cm9sIHZhbHVlXHJcbiAgICBjb25zdCB2YWx1ZVRvQ2hlY2sgPSBzZWxlY3RlZCAhPT0gdW5kZWZpbmVkID8gc2VsZWN0ZWQgOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgXHJcbiAgICB0aGlzLnRvcExhYmVsID0gdmFsdWVUb0NoZWNrPy5sZW5ndGggPT0gMCA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwidGVzdFwiLCB0aGlzLmZvcm1Db250cm9sLnZhbHVlPy5sZW5ndGgpXHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInRlc3RcIiwgdGhpcy5vcGVuU3RhdGUpXHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInBsYWNlaG9sZGVyLS0tIFwiLCB0aGlzLnBsYWNlaG9sZGVyTGFiZWwpXHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInBhcmFtcy5sYWJlbC0tLSBcIiwgdGhpcy5wYXJhbXMubGFiZWwpXHJcbiAgICB0aGlzLm9wZW5TdGF0ZSA9IHN0YXRlO1xyXG4gICAgaWYgKHN0YXRlIHx8IHZhbHVlVG9DaGVjaz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyTGFiZWwgPSB0aGlzLnBhcmFtcy5wbGFjZWhvbGRlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJMYWJlbCA9IHRoaXMucGFyYW1zLmxhYmVsO1xyXG4gICAgfVxyXG4gIH1cclxuICBtb3VzZUhvdmVyKGl0ZW06IFNlbGVjdFN1YkludGVyZmFjZSwgZXZlbnQ6IGFueSA9IG51bGwsIHRvb2x0aXA6IE1hdFRvb2x0aXApIHsgIC8vIE5ldyBtZXRob2QgZm9yIG1vdXNlZW50ZXIgZXZlbnRcclxuICAgIHRoaXMuaG92ZXJFdmVudC5lbWl0KHtcclxuICAgICAgZXZlbnQsXHJcbiAgICAgIGl0ZW1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRvb2x0aXApIHtcclxuICAgICAgdG9vbHRpcC5zaG93KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIHNlbGVjdEhvdmVyRXZlbnQge1xyXG4gIGV2ZW50OiBhbnksXHJcbiAgaXRlbTogU2VsZWN0U3ViSW50ZXJmYWNlXHJcbn0iLCI8ZGl2IGNsYXNzPVwic2Etc2VsZWN0LWNvbnRhaW5lciB7e3Byb3BzPy5bJ2lucHV0Q29udGFpbmVyQ2xhc3MnXX19XCI+XHJcbiAgQGlmKCEhcHJvcHM/LlsnbGFiZWwnXSl7XHJcbiAgPGRpdiBjbGFzcz1cInNhLXNlbGVjdC1sYWJlbC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzYS1zZWxlY3QtbGFiZWwtdG9vbHRpcC1jb250YWluZXJcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzYS1zZWxlY3QtbGFiZWxcIj5cclxuICAgICAgICB7e3Byb3BzPy5bJ2xhYmVsJ119fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIEBpZighIXByb3BzPy5bJ3Rvb2x0aXAnXSl7XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcC1jb250YWluZXJcIj5cclxuICAgICAgICA8c2EtaWNvbiBbaWNvbl09XCJwcm9wcz8uWyd0b29sdGlwSWNvbiddIHx8ICdpbmZvQ2lyY2xlT3V0bGluZWQnXCIgY3VzdG9tQ2xhc3M9XCJpbmZvLWljb25cIlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwicHJvcHM/LlsndG9vbHRpcCddXCIgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIiBjbGFzcz1cInRvb2x0aXAtaWNvbiBkLWZsZXhcIlxyXG4gICAgICAgICAgW3NpemVdPVwicHJvcHM/LlsndG9vbHRpcEljb25TaXplJ10gfHwgJzIwJ1wiPjwvc2EtaWNvbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIEBpZighIXByb3BzPy5bJ2Rlc2NyaXB0aW9uJ10pIHtcclxuICAgIDxwIGNsYXNzPVwic2Etc2VsZWN0LWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgIHt7cHJvcHM/LlsnZGVzY3JpcHRpb24nXX19XHJcbiAgICA8L3A+XHJcbiAgICB9XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG4gIDxkaXYgY2xhc3M9XCJzYS1zZWxlY3QtZmllbGQtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IFtzdHlsZS52aXNpYmlsaXR5XT1cIihwcm9wcz8uWydzaG93VGFnJ10gIT09IGZhbHNlICYmIChvcGVuU3RhdGUgfHwgdG9wTGFiZWwpKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcclxuICAgICAgY2xhc3M9XCJjbGlja2VkLWxhYmVsXCI+e3twYXJhbXMubGFiZWx9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwibmctc2VsZWN0LWZpZWxkIHt7b3BlblN0YXRlID8gJ2FjdGl2YXRlZCcgOiAnaWRsZSd9fSB7e2ZpZWxkLnByb3BzLmRpc2FibGVkID8gJ2Rpc2FibGVkJyA6ICcnfX0ge3tmb3JtQ29udHJvbC52YWxpZCA/ICcnIDogJ2ludmFsaWQnfX1cIj5cclxuICAgICAgPGRpdiByb2xlPVwiYnV0dG9uXCIgdGl0bGU9XCJkcm9wLWJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwibGVmdC1pY29uIHN2Zy1pY29uXCIgW3N0eWxlXT1cInN2Z1N0eWxlXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbkNsb3NlKCF0aGlzLm9wZW5TdGF0ZSlcIiAoYmx1cik9XCJvcGVuQ2xvc2UoZmFsc2UpXCJcclxuICAgICAgICAqbmdJZj1cIihwYXJhbXMuZHJvcEljb25Qb3NpdGlvbiA9PSAnbGVmdCcgfHwgcGFyYW1zLmRyb3BJY29uUG9zaXRpb24gPT0gJ2JvdGgnKVwiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG5nLXNlbGVjdCAoY2hhbmdlKT1cIm9uTmdTZWxlY3RDaGFuZ2UoJGV2ZW50KVwiIChyZW1vdmUpPVwic2hpZnRMYWJlbCgncmVtb3ZlZCcpXCIgKGNsZWFyKT1cInNoaWZ0TGFiZWwoJ2NsZWFyZWQnKVwiXHJcbiAgICAgIChzZWFyY2gpPVwib3BlbkNsb3NlKHRydWUpXCIgKGNsaWNrKT1cIm9wZW5DbG9zZSghdGhpcy5vcGVuU3RhdGUpXCIgKGJsdXIpPVwib3BlbkNsb3NlKGZhbHNlKVwiIFtpc09wZW5dPVwib3BlblN0YXRlXCJcclxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyTGFiZWxcIiBbYmluZExhYmVsXT1cInByb3BzPy5bJ2JpbmRMYWJlbCddIHx8ICduYW1lJ1wiIFtiaW5kVmFsdWVdPVwicHJvcHM/LlsnYmluZFZhbHVlJ10gfHwgbnVsbFwiIFtpdGVtc109XCJzZWxlY3RhYmxlc1wiIFttdWx0aXBsZV09XCJwYXJhbXM/Lm11bHRpcGxlXCJcclxuICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgW3N0eWxlXSBbZm9ybWx5QXR0cmlidXRlc109XCJmaWVsZFwiIFtzZWFyY2hhYmxlXT1cImZpZWxkLnByb3BzWydzZWFyY2hhYmxlJ11cIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgW2Nsb3NlT25TZWxlY3RdPVwiIXBhcmFtcz8uc2hvd0NoZWNrYm94ZXNcIj4gICAgICBcclxuICAgICAgPCEtLSBNdWx0aS1sYWJlbCB0ZW1wbGF0ZSBmb3IgZGlzcGxheWluZyBzZWxlY3RlZCBpdGVtcyBhcyBjaGlwcyAtLT5cclxuICAgICAgPG5nLXRlbXBsYXRlIG5nLW11bHRpLWxhYmVsLXRtcCBsZXQtaXRlbXM9XCJpdGVtc1wiIGxldC1jbGVhcj1cImNsZWFyXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiAoaXRlbXMgPyBpdGVtcy5zbGljZShzdGFydEluZCxzdGFydEluZCtsYWJlbExpbWl0KTogW10pXCI+XHJcbiAgICAgICAgICA8c2EtY2hpcCAob25DbGlja0V2ZW50KT1cIiAoIWZpZWxkLnByb3BzLmRpc2FibGVkKSA/ICBjbGVhcihpdGVtKSA6IG51bGxcIiBcclxuICAgICAgICAgICAgW2lkXT1cImdldEZ1bGxPYmplY3RGcm9tVmFsdWUoaXRlbSlbcGFyYW1zPy5iaW5kVmFsdWUgfHwgcHJvcHM/LlsnYmluZFZhbHVlJ10gfHwgJ2lkJ11cIlxyXG4gICAgICAgICAgICBbaWNvblBhdGhdPVwicGFyYW1zLmljb25QYXRoXCIgXHJcbiAgICAgICAgICAgIFt0ZXh0XT1cImdldEZ1bGxPYmplY3RGcm9tVmFsdWUoaXRlbSlbcGFyYW1zPy5iaW5kTGFiZWwgfHwgcHJvcHM/LlsnYmluZExhYmVsJ10gfHwgJ25hbWUnXVwiIFxyXG4gICAgICAgICAgICBbdHlwZV09XCJwYXJhbXMudHlwZVwiXHJcbiAgICAgICAgICAgIFtzdGF0ZV09XCJmaWVsZC5wcm9wcy5kaXNhYmxlZCA/ICduZXV0cmFsJyA6IHBhcmFtcy5zdGF0ZVwiIFxyXG4gICAgICAgICAgICBbZmlsbGluZ109XCJwYXJhbXMuZmlsbGluZ1wiXHJcbiAgICAgICAgICAgIFtpY29uUG9zaXRpb25dPVwicGFyYW1zLmljb25Qb3NpdGlvblwiPlxyXG4gICAgICAgICAgPC9zYS1jaGlwPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKGNsaWNrKT1cInNoaWZ0TGFiZWwoJ2NsaWNrZWQnKVwiIGNsYXNzPVwibmctdmFsdWUgb3ZlcmZsb3ctbGFiZWxcIlxyXG4gICAgICAgICAgKm5nSWY9XCJpdGVtcy5sZW5ndGggPiAoc3RhcnRJbmQrbGFiZWxMaW1pdClcIj5cclxuICAgICAgICAgIDxzYS1jaGlwIHRleHQ9XCIre3tpdGVtcy5sZW5ndGgtKHN0YXJ0SW5kK2xhYmVsTGltaXQpfX1cIiBcclxuICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInBhcmFtcy50eXBlIHx8ICdyZWd1bGFyJ1wiIFxyXG4gICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cInBhcmFtcy5zdGF0ZSB8fCAncHJpbWFyeSdcIiBcclxuICAgICAgICAgICAgICAgICAgIFtmaWxsaW5nXT1cInBhcmFtcy5maWxsaW5nIHx8ICdmaWxsZWQnXCI+XHJcbiAgICAgICAgICA8L3NhLWNoaXA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAoY2xpY2spPVwic2hpZnRMYWJlbCgnY2xlYXJlZCcpXCIgKm5nSWY9XCJzdGFydEluZCA+IDBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJuZy12YWx1ZSBvdmVyZmxvdy1sYWJlbFwiPlxyXG4gICAgICAgICAgPHNhLWNoaXAgdGV4dD1cIi4uLlwiIFxyXG4gICAgICAgICAgICAgICAgICAgW3R5cGVdPVwicGFyYW1zLnR5cGUgfHwgJ3JlZ3VsYXInXCIgXHJcbiAgICAgICAgICAgICAgICAgICBbc3RhdGVdPVwicGFyYW1zLnN0YXRlIHx8ICdkZWZhdWx0J1wiIFxyXG4gICAgICAgICAgICAgICAgICAgW2ZpbGxpbmddPVwicGFyYW1zLmZpbGxpbmcgfHwgJ2ZpbGxlZCdcIj5cclxuICAgICAgICAgIDwvc2EtY2hpcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgXHJcbiAgICAgIDwhLS0gVW5pdmVyc2FsIG9wdGlvbiB0ZW1wbGF0ZSB3aXRoIHRvb2x0aXAgc3VwcG9ydCBmb3IgYW55IHNlbGVjdCB0eXBlIC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaXRlbSQ9XCJpdGVtJFwiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7J2NoZWNrYm94LW9wdGlvbic6IHBhcmFtcz8uc2hvd0NoZWNrYm94ZXMsICdzaW5nbGUtb3B0aW9uLXdpdGgtdG9vbHRpcCc6ICFwYXJhbXM/LnNob3dDaGVja2JveGVzfVwiPlxyXG4gICAgICAgICAgPCEtLSBDaGVja2JveCBmb3IgbXVsdGktc2VsZWN0IC0tPlxyXG4gICAgICAgICAgPGlucHV0ICpuZ0lmPVwicGFyYW1zPy5zaG93Q2hlY2tib3hlc1wiIFxyXG4gICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIFxyXG4gICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzT3B0aW9uU2VsZWN0ZWQoaXRlbSlcIiBcclxuICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cInRvZ2dsZUl0ZW1TZWxlY3Rpb24oaXRlbSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxyXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLWNoZWNrYm94XCI+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDwhLS0gT3B0aW9uIGxhYmVsIC0tPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcHRpb24tbGFiZWxcIj57eyBpdGVtW3Byb3BzPy5bJ2JpbmRMYWJlbCddIHx8ICduYW1lJ10gfX08L3NwYW4+XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIDwhLS0gVG9vbHRpcCBpY29uIC0gc2hvd3Mgd2hlbiBpdGVtIGhhcyBkZXNjcmlwdGlvbi90b29sdGlwIC0tPlxyXG4gICAgICAgICAgPHNhLWljb24gKm5nSWY9XCJpdGVtLmRlc2NyaXB0aW9uIHx8IGl0ZW0udG9vbHRpcFwiIFxyXG4gICAgICAgICAgICAgICAgICAgW2ljb25dPVwiJ2luZm9DaXJjbGVPdXRsaW5lZCdcIiBcclxuICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIicxNidcIiBcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib3B0aW9uLXRvb2x0aXAtaWNvbiBkLWZsZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaXRlbS5kZXNjcmlwdGlvbiB8fCBpdGVtLnRvb2x0aXAgfHwgJydcIiBcclxuICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIShpdGVtLmRlc2NyaXB0aW9uIHx8IGl0ZW0udG9vbHRpcClcIj5cclxuICAgICAgICAgIDwvc2EtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgXHJcbiAgICAgIDwhLS0gU2ltcGxlIGhlYWRlciB0ZW1wbGF0ZSBmb3IgU2VsZWN0IEFsbCAvIFVuc2VsZWN0IEFsbCB3aGVuIGluIGNoZWNrYm94IG1vZGUgLS0+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBuZy1oZWFkZXItdG1wICpuZ0lmPVwicGFyYW1zPy5zaG93Q2hlY2tib3hlcyAmJiBwYXJhbXM/Lm11bHRpcGxlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC1hbGwtaGVhZGVyXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdC1hbGwtbGFiZWxcIiAoY2xpY2spPVwic2VsZWN0QWxsKClcIj5TZWxlY3QgYWxsPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1bnNlbGVjdC1hbGwtbGFiZWxcIiAoY2xpY2spPVwidW5zZWxlY3RBbGwoKVwiPlVuc2VsZWN0IGFsbDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBuZy1hcnJvdy10bXA+XHJcbiAgICAgICAgPHNhLWljb24gW2ljb25dPVwiJ2Rvd25DaGV2cm9uT3V0bGluZWQnXCIgY2xhc3M9XCJkLWZsZXggY3VzdG9tLWRyb3Bkb3duLWFycm93XCIgW3NpemVdPVwiJzE4J1wiPjwvc2EtaWNvbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvbmctc2VsZWN0PlxyXG4gICAgPGRpdiAqbmdJZj1cIihwYXJhbXMuZHJvcEljb25Qb3NpdGlvbiA9PSAncmlnaHQnIHx8IHBhcmFtcy5kcm9wSWNvblBvc2l0aW9uID09ICdib3RoJylcIiBjbGFzcz1cInJpZ2h0LWljb25cIj5cclxuICAgICAgPHNhLWljb24gW2ljb25dPVwiJ2Rvd25DaGV2cm9uT3V0bGluZWQnXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJkLWZsZXhcIiBbc2l6ZV09XCInMTgnXCIgKGNsaWNrKT1cIm9wZW5DbG9zZSghdGhpcy5vcGVuU3RhdGUpXCJcclxuICAgICAgICAoYmx1cik9XCJvcGVuQ2xvc2UoZmFsc2UpXCIgPjwvc2EtaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSA8ZGl2IHJvbGU9XCJidXR0b25cIiB0aXRsZT1cImRyb3AtYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJyaWdodC1pY29uIHN2Zy1pY29uXCIgW3N0eWxlXT1cInN2Z1N0eWxlXCJcclxuICAgICAgKGNsaWNrKT1cIm9wZW5DbG9zZSh0cnVlKVwiIChibHVyKT1cIm9wZW5DbG9zZShmYWxzZSlcIlxyXG4gICAgICAqbmdJZj1cIihwYXJhbXMuZHJvcEljb25Qb3NpdGlvbiA9PSAncmlnaHQnIHx8IHBhcmFtcy5kcm9wSWNvblBvc2l0aW9uID09ICdib3RoJylcIj5cclxuICAgIDwvZGl2PiAtLT5cclxuXHJcbiA8ZGl2IGNsYXNzPVwiZmFsbGJhY2stYXJyb3dcIiAqbmdJZj1cIiFvcGVuU3RhdGVcIj5cclxuICA8c2EtaWNvbiBbaWNvbl09XCInZG93bkNoZXZyb25PdXRsaW5lZCdcIiBjbGFzcz1cImQtZmxleFwiIFtzaXplXT1cIicxOCdcIj48L3NhLWljb24+XHJcbiA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICBAaWYoIWZvcm1Db250cm9sLnZhbGlkKXtcclxuICA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZS1jb250YWluZXJcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAgICA8Zm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZSBbZmllbGRdPVwiZmllbGRcIj48L2Zvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2U+XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcbiAgfVxyXG4gIDxkaXYgY2xhc3M9XCJzdXBwb3J0LWxhYmVsXCI+e3twYXJhbXMuc3VwcG9ydFRleHR9fTwvZGl2PlxyXG48L2Rpdj4iXX0=