@seniorsistemas/angular-components 19.5.3 → 19.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +2 -0
  2. package/accordion/lib/accordion/models/accordion-button-settings.d.ts +5 -0
  3. package/button/lib/button/button.component.d.ts +5 -1
  4. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +11 -3
  5. package/esm2022/accordion/lib/accordion/models/accordion-button-settings.mjs +1 -1
  6. package/esm2022/button/lib/button/button.component.mjs +9 -3
  7. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +1 -1
  8. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +1 -1
  9. package/esm2022/dynamic-form/dynamic-form/components/grid/row/row.component.mjs +2 -2
  10. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +2 -2
  11. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +2 -2
  12. package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +1 -1
  13. package/esm2022/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.mjs +1 -1
  14. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +2 -2
  15. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +2 -2
  16. package/esm2022/dynamic-form/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +2 -2
  17. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +2 -2
  18. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +1 -1
  19. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +1 -1
  20. package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +1 -1
  21. package/esm2022/global-search/lib/global-search/global-search.component.mjs +2 -2
  22. package/esm2022/help-popover/lib/help-popover/help-popover/help-popover.component.mjs +1 -1
  23. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +1 -1
  24. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
  25. package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +1 -1
  26. package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +1 -1
  27. package/esm2022/object-card/lib/object-card/elements/field/object-card-field.component.mjs +1 -1
  28. package/esm2022/object-card/lib/object-card/elements/main/object-card-main.component.mjs +1 -1
  29. package/esm2022/picklist/lib/picklist/picklist.component.mjs +2 -2
  30. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +1 -1
  31. package/esm2022/select/lib/select/select.component.mjs +93 -7
  32. package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +541 -0
  33. package/esm2022/shared/public-api.mjs +2 -1
  34. package/esm2022/spotlight/lib/spotlight/spotlight.component.mjs +2 -2
  35. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +1 -1
  36. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +10 -2
  37. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components-button.mjs +8 -2
  39. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  40. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +1 -1
  41. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  42. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +1 -1
  43. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  44. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +9 -9
  45. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  46. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +1 -1
  47. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  48. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +1 -1
  49. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  50. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +2 -2
  51. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  52. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +1 -1
  53. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  54. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +1 -1
  55. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  56. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -2
  57. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  58. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +1 -1
  59. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  60. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
  61. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  62. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +1 -1
  63. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  64. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +1 -1
  65. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  66. package/fesm2022/seniorsistemas-angular-components-select.mjs +92 -6
  67. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  68. package/fesm2022/seniorsistemas-angular-components-shared.mjs +541 -3
  69. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  70. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs +1 -1
  71. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs.map +1 -1
  72. package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
  73. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  74. package/package.json +1 -1
  75. package/select/lib/select/select.component.d.ts +40 -2
  76. package/shared/lib/accessibility/datepicker-no-period-tab.directive.d.ts +177 -0
  77. package/shared/public-api.d.ts +1 -0
@@ -611,7 +611,7 @@ export class PicklistComponent {
611
611
  this.selectedItensChange.emit(parseValueEmit(this.selectedItens));
612
612
  }
613
613
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PicklistComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
614
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PicklistComponent, isStandalone: true, selector: "s-picklist", inputs: { itensToSelect: { classPropertyName: "itensToSelect", publicName: "itensToSelect", isSignal: false, isRequired: false, transformFunction: null }, selectedItens: { classPropertyName: "selectedItens", publicName: "selectedItens", isSignal: false, isRequired: false, transformFunction: null }, availableItensLabel: { classPropertyName: "availableItensLabel", publicName: "availableItensLabel", isSignal: false, isRequired: false, transformFunction: null }, availableItensPlaceholder: { classPropertyName: "availableItensPlaceholder", publicName: "availableItensPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, addSelectedItensLabel: { classPropertyName: "addSelectedItensLabel", publicName: "addSelectedItensLabel", isSignal: false, isRequired: false, transformFunction: null }, addAllItensLabel: { classPropertyName: "addAllItensLabel", publicName: "addAllItensLabel", isSignal: false, isRequired: false, transformFunction: null }, selectedItensLabel: { classPropertyName: "selectedItensLabel", publicName: "selectedItensLabel", isSignal: false, isRequired: false, transformFunction: null }, selectedItensPlaceholder: { classPropertyName: "selectedItensPlaceholder", publicName: "selectedItensPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, removeSelectedItemsLabel: { classPropertyName: "removeSelectedItemsLabel", publicName: "removeSelectedItemsLabel", isSignal: false, isRequired: false, transformFunction: null }, removeAllItemsLabel: { classPropertyName: "removeAllItemsLabel", publicName: "removeAllItemsLabel", isSignal: false, isRequired: false, transformFunction: null }, showCheckbox: { classPropertyName: "showCheckbox", publicName: "showCheckbox", isSignal: false, isRequired: false, transformFunction: null }, filterBy: { classPropertyName: "filterBy", publicName: "filterBy", isSignal: false, isRequired: false, transformFunction: null }, lazyLoad: { classPropertyName: "lazyLoad", publicName: "lazyLoad", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, sourceLoader: { classPropertyName: "sourceLoader", publicName: "sourceLoader", isSignal: true, isRequired: false, transformFunction: null }, targetLoader: { classPropertyName: "targetLoader", publicName: "targetLoader", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodeMoved: "nodeMoved", selectedItensChange: "selectedItensChange", itensToSelectChange: "itensToSelectChange" }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], usesOnChanges: true, ngImport: i0, template: "<ng-template\n #previewRender\n let-itens=\"itens\"\n let-template=\"template\"\n>\n <section class=\"picklist-items\">\n @for (item of itens; track $index) {\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data }\"></ng-container>\n }\n </section>\n</ng-template>\n\n<ng-template\n #picklistItensRender\n let-id=\"id\"\n let-itens=\"itens\"\n let-template=\"template\"\n let-listConnectedTo=\"listConnectedTo\"\n let-isLoading=\"isLoading\"\n>\n <div\n class=\"picklist-items\"\n cdkDropList\n [id]=\"id\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"itens\"\n [cdkDropListConnectedTo]=\"listConnectedTo\"\n (cdkDropListDropped)=\"drop($event)\"\n *sLoadingState=\"{ loading: isLoading, indicator: logoIndicator }\"\n (scroll)=\"onScroll($event, id)\"\n >\n @for (item of itens; track $index) {\n <div\n cdkDrag\n [cdkDragDisabled]=\"item.disabled\"\n [cdkDragData]=\"item\"\n (click)=\"toggleSelected(item, id)\"\n (cdkDragStarted)=\"onDragStart($event, id)\"\n (cdkDragReleased)=\"onDragRelease()\"\n class=\"picklist-item\"\n [class.picklist-disabled]=\"item.disabled\"\n [class.picklist-item-invisible]=\"item.invisible\"\n [class.picklist-item-active]=\"item.selected\"\n >\n @if (showCheckbox) {\n <input\n type=\"checkbox\"\n class=\"input-checkbox\"\n [(ngModel)]=\"item.selected\"\n [disabled]=\"item.disabled\"\n />\n }\n <div class=\"picklist-content\">\n <ng-container\n *ngTemplateOutlet=\"\n template;\n context: { item: item.data, selected: item.selected, disabled: item.disabled }\n \"\n ></ng-container>\n </div>\n <ng-container *cdkDragPreview>\n <ng-container\n *ngTemplateOutlet=\"previewRender; context: { itens: selectedItensMap, template: template }\"\n ></ng-container>\n </ng-container>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #checkboxTitleRender\n let-disabled=\"disabled\"\n let-checked=\"checked\"\n let-changeFn=\"changeFn\"\n let-id=\"id\"\n>\n @if (showCheckbox && !lazyLoad()) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"changeFn($any($event.target).checked)\"\n />\n } @else if (showCheckbox && lazyLoad() && id === itensToSelectId) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"itensToSelectFilterUtil.allItensSelected\"\n (change)=\"checkAllAvailableItensChange($any($event.target).checked)\"\n />\n } @else if (showCheckbox && lazyLoad() && id === selectedItensId) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"selectedItensFilterUtil.allItensSelected\"\n (change)=\"checkAllSelectedItensChange($any($event.target).checked)\"\n />\n }\n</ng-template>\n\n<div class=\"picklist-container\">\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy && !lazyLoad()) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n id: itensToSelectId,\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ availableItensLabel || 'platform.angular_components.available-items' | translate }}\n </span>\n </div>\n @if (filterBy || lazyLoad()) {\n <div class=\"picklist-filter\">\n @if (showCheckbox) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n id: itensToSelectId,\n }\n \"\n ></ng-container>\n }\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"availableItensFilter\"\n (ngModelChange)=\"filterItensToSelect()\"\n [placeholder]=\"\n availableItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\n \"\n />\n </div>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: itensToSelectId,\n itens: itensToSelectFilterUtil.filteredItensToSelect,\n template: itemToSelectTemplate,\n listConnectedTo: selectedItensId,\n isLoading: _loadingSource(),\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"addSelectedItensLabel || 'platform.angular_components.add' | translate\"\n priority=\"primary\"\n rightIconClass=\"fa fa-fw fa-arrow-right\"\n [disabled]=\"!hasSelectedItens\"\n (clicked)=\"add()\"\n [auxiliary]=\"false\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"addAllItensLabel || 'platform.angular_components.add_all' | translate\"\n priority=\"link\"\n (clicked)=\"add(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy && !lazyLoad()) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n id: selectedItensId,\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ selectedItensLabel || 'platform.angular_components.selected-items' | translate }}\n </span>\n </div>\n @if (filterBy || lazyLoad()) {\n <div class=\"picklist-filter\">\n @if (showCheckbox) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n id: selectedItensId,\n }\n \"\n ></ng-container>\n }\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"selectedItensFilter\"\n (ngModelChange)=\"filterSelectedItens()\"\n [placeholder]=\"\n selectedItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\n \"\n />\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: selectedItensId,\n itens: selectedItensFilterUtil.filteredSelectedItens,\n template: itemSelectedTemplate,\n listConnectedTo: itensToSelectId,\n isLoading: _loadingTarget(),\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"removeSelectedItemsLabel || 'platform.angular_components.remove' | translate\"\n priority=\"primary\"\n iconClass=\"fa fa-fw fa-arrow-left\"\n [disabled]=\"!hasSelectedItens\"\n [auxiliary]=\"false\"\n (clicked)=\"remove()\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"removeAllItemsLabel || 'platform.angular_components.remove_all' | translate\"\n priority=\"link\"\n (clicked)=\"remove(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n</div>\n\n", styles: [".picklist-container{display:flex;flex-wrap:wrap;border-radius:4px solid #dedce5;width:100%;background-color:#fff;gap:20px;padding:8px}.picklist-container .picklist-item-container{display:flex;flex-direction:column;flex:1}.picklist-container .picklist-item-container .picklist-box{border:1px solid #dedce5;padding:8px;height:100%;min-width:200px}.picklist-container .picklist-item-container .picklist-box .picklist-filter{display:flex;width:100%}.picklist-container .picklist-item-container .picklist-box .picklist-filter .input-search{border:1px solid #dedce5;min-height:35px;width:100%;border-radius:3px;margin-bottom:10px;margin-top:10px;padding:0 8px;flex:1}.picklist-container .picklist-item-container .picklist-box .picklist-title-container{width:100%;display:flex;align-items:center}.picklist-container .picklist-item-container .picklist-box .picklist-title-container .picklist-title{font-family:Open Sans;font-size:14px;font-weight:700;line-height:21px;text-underline-position:from-font;text-decoration-skip-ink:none}.picklist-container .picklist-item-container .picklist-box .picklist-items{max-height:23em;overflow:auto;height:100%;min-height:100px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-content{width:100%;height:100%;padding-right:8px;border-radius:3px;margin-bottom:8px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item{height:55px;border:3px;display:flex}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:not(.picklist-disabled){cursor:pointer}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:hover:not(.picklist-disabled,.picklist-item-active,.picklist-item-invisible){background-color:#f1f7f8}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-active:not(.picklist-item-invisible){background-color:#d5e8ec}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-disabled{opacity:.5;background-color:#fbfafc}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-invisible{display:none!important}.picklist-container .picklist-item-container .buttons-container{padding-top:10px;display:flex}.picklist-container .picklist-item-container .input-checkbox{margin:12px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel"], outputs: ["clicked"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: LoadingStateModule }, { kind: "directive", type: i4.LoadingStateDirective, selector: "[sLoadingState]", inputs: ["sLoadingState"] }] });
614
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PicklistComponent, isStandalone: true, selector: "s-picklist", inputs: { itensToSelect: { classPropertyName: "itensToSelect", publicName: "itensToSelect", isSignal: false, isRequired: false, transformFunction: null }, selectedItens: { classPropertyName: "selectedItens", publicName: "selectedItens", isSignal: false, isRequired: false, transformFunction: null }, availableItensLabel: { classPropertyName: "availableItensLabel", publicName: "availableItensLabel", isSignal: false, isRequired: false, transformFunction: null }, availableItensPlaceholder: { classPropertyName: "availableItensPlaceholder", publicName: "availableItensPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, addSelectedItensLabel: { classPropertyName: "addSelectedItensLabel", publicName: "addSelectedItensLabel", isSignal: false, isRequired: false, transformFunction: null }, addAllItensLabel: { classPropertyName: "addAllItensLabel", publicName: "addAllItensLabel", isSignal: false, isRequired: false, transformFunction: null }, selectedItensLabel: { classPropertyName: "selectedItensLabel", publicName: "selectedItensLabel", isSignal: false, isRequired: false, transformFunction: null }, selectedItensPlaceholder: { classPropertyName: "selectedItensPlaceholder", publicName: "selectedItensPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, removeSelectedItemsLabel: { classPropertyName: "removeSelectedItemsLabel", publicName: "removeSelectedItemsLabel", isSignal: false, isRequired: false, transformFunction: null }, removeAllItemsLabel: { classPropertyName: "removeAllItemsLabel", publicName: "removeAllItemsLabel", isSignal: false, isRequired: false, transformFunction: null }, showCheckbox: { classPropertyName: "showCheckbox", publicName: "showCheckbox", isSignal: false, isRequired: false, transformFunction: null }, filterBy: { classPropertyName: "filterBy", publicName: "filterBy", isSignal: false, isRequired: false, transformFunction: null }, lazyLoad: { classPropertyName: "lazyLoad", publicName: "lazyLoad", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, sourceLoader: { classPropertyName: "sourceLoader", publicName: "sourceLoader", isSignal: true, isRequired: false, transformFunction: null }, targetLoader: { classPropertyName: "targetLoader", publicName: "targetLoader", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodeMoved: "nodeMoved", selectedItensChange: "selectedItensChange", itensToSelectChange: "itensToSelectChange" }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], usesOnChanges: true, ngImport: i0, template: "<ng-template\n #previewRender\n let-itens=\"itens\"\n let-template=\"template\"\n>\n <section class=\"picklist-items\">\n @for (item of itens; track $index) {\n <ng-container *ngTemplateOutlet=\"template; context: { item: item.data }\"></ng-container>\n }\n </section>\n</ng-template>\n\n<ng-template\n #picklistItensRender\n let-id=\"id\"\n let-itens=\"itens\"\n let-template=\"template\"\n let-listConnectedTo=\"listConnectedTo\"\n let-isLoading=\"isLoading\"\n>\n <div\n class=\"picklist-items\"\n cdkDropList\n [id]=\"id\"\n [cdkDropListSortingDisabled]=\"true\"\n [cdkDropListData]=\"itens\"\n [cdkDropListConnectedTo]=\"listConnectedTo\"\n (cdkDropListDropped)=\"drop($event)\"\n *sLoadingState=\"{ loading: isLoading, indicator: logoIndicator }\"\n (scroll)=\"onScroll($event, id)\"\n >\n @for (item of itens; track $index) {\n <div\n cdkDrag\n [cdkDragDisabled]=\"item.disabled\"\n [cdkDragData]=\"item\"\n (click)=\"toggleSelected(item, id)\"\n (cdkDragStarted)=\"onDragStart($event, id)\"\n (cdkDragReleased)=\"onDragRelease()\"\n class=\"picklist-item\"\n [class.picklist-disabled]=\"item.disabled\"\n [class.picklist-item-invisible]=\"item.invisible\"\n [class.picklist-item-active]=\"item.selected\"\n >\n @if (showCheckbox) {\n <input\n type=\"checkbox\"\n class=\"input-checkbox\"\n [(ngModel)]=\"item.selected\"\n [disabled]=\"item.disabled\"\n />\n }\n <div class=\"picklist-content\">\n <ng-container\n *ngTemplateOutlet=\"\n template;\n context: { item: item.data, selected: item.selected, disabled: item.disabled }\n \"\n ></ng-container>\n </div>\n <ng-container *cdkDragPreview>\n <ng-container\n *ngTemplateOutlet=\"previewRender; context: { itens: selectedItensMap, template: template }\"\n ></ng-container>\n </ng-container>\n </div>\n }\n </div>\n</ng-template>\n\n<ng-template\n #checkboxTitleRender\n let-disabled=\"disabled\"\n let-checked=\"checked\"\n let-changeFn=\"changeFn\"\n let-id=\"id\"\n>\n @if (showCheckbox && !lazyLoad()) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"checked\"\n (change)=\"changeFn($any($event.target).checked)\"\n />\n } @else if (showCheckbox && lazyLoad() && id === itensToSelectId) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"itensToSelectFilterUtil.allItensSelected\"\n (change)=\"checkAllAvailableItensChange($any($event.target).checked)\"\n />\n } @else if (showCheckbox && lazyLoad() && id === selectedItensId) {\n <input\n class=\"input-checkbox\"\n type=\"checkbox\"\n [disabled]=\"disabled\"\n [checked]=\"selectedItensFilterUtil.allItensSelected\"\n (change)=\"checkAllSelectedItensChange($any($event.target).checked)\"\n />\n }\n</ng-template>\n\n<div class=\"picklist-container\">\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy && !lazyLoad()) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n id: itensToSelectId,\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ availableItensLabel || 'platform.angular_components.available-items' | translate }}\n </span>\n </div>\n @if (filterBy || lazyLoad()) {\n <div class=\"picklist-filter\">\n @if (showCheckbox) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableItensToSelectCheckbox,\n checked: itensToSelectAllSelected,\n changeFn: checkAllAvailableItensChange.bind(this),\n id: itensToSelectId,\n }\n \"\n ></ng-container>\n }\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"availableItensFilter\"\n (ngModelChange)=\"filterItensToSelect()\"\n [placeholder]=\"\n availableItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\n \"\n />\n </div>\n }\n\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: itensToSelectId,\n itens: itensToSelectFilterUtil.filteredItensToSelect,\n template: itemToSelectTemplate,\n listConnectedTo: selectedItensId,\n isLoading: _loadingSource(),\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"addSelectedItensLabel || 'platform.angular_components.add' | translate\"\n priority=\"primary\"\n rightIconClass=\"fa fa-fw fa-arrow-right\"\n [disabled]=\"!hasSelectedItens\"\n (clicked)=\"add()\"\n [auxiliary]=\"false\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"addAllItensLabel || 'platform.angular_components.add_all' | translate\"\n priority=\"link\"\n (clicked)=\"add(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n <div class=\"picklist-item-container\">\n <div class=\"picklist-box\">\n <div class=\"picklist-title-container\">\n @if (!filterBy && !lazyLoad()) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n id: selectedItensId,\n }\n \"\n ></ng-container>\n }\n <span class=\"picklist-title\">\n {{ selectedItensLabel || 'platform.angular_components.selected-items' | translate }}\n </span>\n </div>\n @if (filterBy || lazyLoad()) {\n <div class=\"picklist-filter\">\n @if (showCheckbox) {\n <ng-container\n *ngTemplateOutlet=\"\n checkboxTitleRender;\n context: {\n disabled: disableSelectedItensCheckbox,\n checked: selectedItensAllSelected,\n changeFn: checkAllSelectedItensChange.bind(this),\n id: selectedItensId,\n }\n \"\n ></ng-container>\n }\n <input\n type=\"text\"\n class=\"input-search\"\n [(ngModel)]=\"selectedItensFilter\"\n (ngModelChange)=\"filterSelectedItens()\"\n [placeholder]=\"\n selectedItensPlaceholder || 'platform.angular_components.picklist-placeholder' | translate\n \"\n />\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"\n picklistItensRender;\n context: {\n id: selectedItensId,\n itens: selectedItensFilterUtil.filteredSelectedItens,\n template: itemSelectedTemplate,\n listConnectedTo: itensToSelectId,\n isLoading: _loadingTarget(),\n }\n \"\n >\n </ng-container>\n </div>\n <div class=\"buttons-container\">\n <s-button\n [label]=\"removeSelectedItemsLabel || 'platform.angular_components.remove' | translate\"\n priority=\"primary\"\n iconClass=\"fa fa-fw fa-arrow-left\"\n [disabled]=\"!hasSelectedItens\"\n [auxiliary]=\"false\"\n (clicked)=\"remove()\"\n [caret]=\"false\"\n >\n </s-button>\n <s-button\n [label]=\"removeAllItemsLabel || 'platform.angular_components.remove_all' | translate\"\n priority=\"link\"\n (clicked)=\"remove(true)\"\n [auxiliary]=\"false\"\n >\n </s-button>\n </div>\n </div>\n</div>\n\n", styles: [".picklist-container{display:flex;flex-wrap:wrap;border-radius:4px solid #dedce5;width:100%;background-color:#fff;gap:20px;padding:8px}.picklist-container .picklist-item-container{display:flex;flex-direction:column;flex:1}.picklist-container .picklist-item-container .picklist-box{border:1px solid #dedce5;padding:8px;height:100%;min-width:200px}.picklist-container .picklist-item-container .picklist-box .picklist-filter{display:flex;width:100%}.picklist-container .picklist-item-container .picklist-box .picklist-filter .input-search{border:1px solid #dedce5;min-height:35px;width:100%;border-radius:3px;margin-bottom:10px;margin-top:10px;padding:0 8px;flex:1}.picklist-container .picklist-item-container .picklist-box .picklist-title-container{width:100%;display:flex;align-items:center}.picklist-container .picklist-item-container .picklist-box .picklist-title-container .picklist-title{font-family:Open Sans;font-size:14px;font-weight:700;line-height:21px;text-underline-position:from-font;text-decoration-skip-ink:none}.picklist-container .picklist-item-container .picklist-box .picklist-items{max-height:23em;overflow:auto;height:100%;min-height:100px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-content{width:100%;height:100%;padding-right:8px;border-radius:3px;margin-bottom:8px}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item{height:55px;border:3px;display:flex}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:not(.picklist-disabled){cursor:pointer}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item:hover:not(.picklist-disabled,.picklist-item-active,.picklist-item-invisible){background-color:#f1f7f8}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-active:not(.picklist-item-invisible){background-color:#d5e8ec}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-disabled{opacity:.5;background-color:#fbfafc}.picklist-container .picklist-item-container .picklist-box .picklist-items .picklist-item-invisible{display:none!important}.picklist-container .picklist-item-container .buttons-container{padding-top:10px;display:flex}.picklist-container .picklist-item-container .input-checkbox{margin:12px}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: LoadingStateModule }, { kind: "directive", type: i4.LoadingStateDirective, selector: "[sLoadingState]", inputs: ["sLoadingState"] }] });
615
615
  }
616
616
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PicklistComponent, decorators: [{
617
617
  type: Component,
@@ -682,4 +682,4 @@ export const parseItensPickList = (array, disabledFn, idKey) => {
682
682
  };
683
683
  });
684
684
  };
685
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFHTCxNQUFNLEVBQ04sTUFBTSxFQUVOLE1BQU0sR0FHVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM5RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFB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UUFBUSxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxPQUFPLEdBQUcsQ0FBSSxJQUF1QixFQUFFLEVBQUU7SUFDM0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUM5QixLQUFVLEVBQ1YsVUFBaUMsRUFDakMsS0FBZSxFQUNFLEVBQUU7SUFDbkIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDbkIsT0FBTztZQUNILElBQUksRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQzVDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtTQUNyRCxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGVzdHJveVJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgb3V0cHV0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgc2lnbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IExvYWRpbmdTdGF0ZUluZGljYXRvcnMsIExvYWRpbmdTdGF0ZU1vZHVsZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvbG9hZGluZy1zdGF0ZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdGVtcGxhdGUnO1xuaW1wb3J0IHsgcmFuZG9tSGFzaCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgcGlwZSwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBpY2tMaXN0SXRlbSwgUGlja2xpc3RJdGVtTW92ZSwgUGlja2xpc3RMYXp5TG9hZEV2ZW50LCBQaWNrbGlzdExvYWRlciwgUGlja2xpc3RUYXJnZXQgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIEludGVybmFsUGlja2xpc3RJdGVtPFQgPSBhbnk+IGV4dGVuZHMgUGlja0xpc3RJdGVtPFQ+IHtcbiAgICBpbnZpc2libGU/OiBib29sZWFuO1xuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcbn1cblxudHlwZSBDZGtEcmFnRXZlbnQ8VD4gPSB7IHNvdXJjZTogQ2RrRHJhZzxJbnRlcm5hbFBpY2tsaXN0SXRlbTxUPj4gfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSBsaXN0YSBkZSBkdXBsYSBzZWxlw6fDo28gKHBpY2tsaXN0KSBjb20gc3Vwb3J0ZSBhXG4gKiBhcnJhc3RhciBlIHNvbHRhciwgZmlsdHJvLCBjaGVja2JveGVzIGUgdGVtcGxhdGUgY3VzdG9taXrDoXZlbCBwYXJhIGNhZGEgaXRlbS5cbiAqIEVtaXRlIGV2ZW50b3MgYW8gbW92ZXIgaXRlbnMgZW50cmUgYXMgbGlzdGFzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8cy1waWNrbGlzdFxuICogICBbaXRlbnNUb1NlbGVjdF09XCJpdGVuc0Rpc3Bvbml2ZWlzXCJcbiAqICAgW3NlbGVjdGVkSXRlbnNdPVwiaXRlbnNTZWxlY2lvbmFkb3NcIlxuICogICAoc2VsZWN0ZWRJdGVuc0NoYW5nZSk9XCJvblNlbGVjYW9NdWRvdSgkZXZlbnQpXCIgLz5cbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBEYXRhXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgRHJhZ0Ryb3BNb2R1bGUsIEZvcm1zTW9kdWxlLCBCdXR0b25Db21wb25lbnQsIE5nVGVtcGxhdGVPdXRsZXQsIExvYWRpbmdTdGF0ZU1vZHVsZV0sXG4gICAgc2VsZWN0b3I6ICdzLXBpY2tsaXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGlja2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3BpY2tsaXN0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFBpY2tsaXN0Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICAvKiogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGl0ZW5zIGRpc3BvbsOtdmVpcyBwYXJhIHNlbGXDp8OjbyAoY29sdW5hIGVzcXVlcmRhKS4gQGRlZmF1bHQgW10gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpdGVuc1RvU2VsZWN0OiBQaWNrTGlzdEl0ZW08VD5bXSA9IFtdO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBMaXN0YSBkZSBpdGVucyBqw6Egc2VsZWNpb25hZG9zIChjb2x1bmEgZGlyZWl0YSkuIEBkZWZhdWx0IFtdICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuczogUGlja0xpc3RJdGVtPFQ+W10gPSBbXTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyB0w610dWxvIGRhIGxpc3RhIGRlIGRpc3BvbsOtdmVpcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdmFpbGFibGVJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQbGFjZWhvbGRlciBkYSBidXNjYSBuYSBsaXN0YSBkZSBkaXNwb27DrXZlaXMuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgYWRpY2lvbmFyIGl0ZW5zIHNlbGVjaW9uYWRvcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRTZWxlY3RlZEl0ZW5zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFLDs3R1bG8gZG8gYm90w6NvIGRlIGFkaWNpb25hciB0b2RvcyBvcyBpdGVucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRBbGxJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIHTDrXR1bG8gZGEgbGlzdGEgZGUgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNMYWJlbD86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUGxhY2Vob2xkZXIgZGEgYnVzY2EgbmEgbGlzdGEgZGUgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgcmVtb3ZlciBpdGVucyBzZWxlY2lvbmFkb3MuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIGJvdMOjbyBkZSByZW1vdmVyIHRvZG9zIG9zIGl0ZW5zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlbW92ZUFsbEl0ZW1zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIGNoZWNrYm94IG5vcyBpdGVucyBkYXMgbGlzdGFzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dDaGVja2JveCA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQcm9wcmllZGFkZSB1c2FkYSBwYXJhIGZpbHRyYXIgb3MgaXRlbnMgZGFzIGxpc3Rhcy4gQGRlZmF1bHQgJycgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWx0ZXJCeSA9ICcnO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBvIGNhcnJlZ2FtZW50byBwcmVndWnDp29zbyAobGF6eSBsb2FkKSBwYXJhIGFzIGxpc3Rhcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgICBsYXp5TG9hZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTsO6bWVybyBkZSBsaW5oYXMgYSBzZXJlbSBleGliaWRhcyBwb3IgcMOhZ2luYSBjYXNvIG8gbGF6eUxvYWQgZXN0ZWphIGhhYmlsaXRhZG8uIEBkZWZhdWx0IDEwICovXG4gICAgcm93cyA9IGlucHV0PG51bWJlcj4oMTApO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBGdW7Dp8OjbyBsb2FkZXIgcGFyYSBhIGxpc3RhIGRlIGRpc3BvbsOtdmVpcyAodG8tc2VsZWN0KS4gUXVhbmRvIGZvcm5lY2lkYSwgbyBjb21wb25lbnRlIGdlcmVuY2lhIGludGVybmFtZW50ZSBwYWdpbmHDp8OjbywgbG9hZGluZyBlIHJhY2UgY29uZGl0aW9ucy4gKi9cbiAgICBzb3VyY2VMb2FkZXIgPSBpbnB1dDxQaWNrbGlzdExvYWRlcjxUPj4oKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRnVuw6fDo28gbG9hZGVyIHBhcmEgYSBsaXN0YSBkZSBzZWxlY2lvbmFkb3MgKHNlbGVjdGVkKS4gUXVhbmRvIGZvcm5lY2lkYSwgbyBjb21wb25lbnRlIGdlcmVuY2lhIGludGVybmFtZW50ZSBwYWdpbmHDp8OjbywgbG9hZGluZyBlIHJhY2UgY29uZGl0aW9ucy4gKi9cbiAgICB0YXJnZXRMb2FkZXIgPSBpbnB1dDxQaWNrbGlzdExvYWRlcjxUPj4oKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBfbG9hZGluZ1RhcmdldCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2xvYWRpbmdTb3VyY2UgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyB1bSBpdGVtIMOpIG1vdmlkbyBlbnRyZSBhcyBsaXN0YXMgZSBvIGxhenkgbG9hZCBlc3TDoSBoYWJpbGl0YWRvLiAqL1xuICAgIG5vZGVNb3ZlZCA9IG91dHB1dDxQaWNrbGlzdEl0ZW1Nb3ZlPFQ+PigpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBhIGxpc3RhIGRlIHNlbGVjaW9uYWRvcyBtdWRhLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gYSBsaXN0YSBkZSBkaXNwb27DrXZlaXMgbXVkYS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNGaWx0ZXIgPSAnJztcblxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zRmlsdGVyID0gJyc7XG5cbiAgICBwdWJsaWMgaXRlbVRvU2VsZWN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPFQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgaXRlbVNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgbG9nb0luZGljYXRvciA9IExvYWRpbmdTdGF0ZUluZGljYXRvcnMuTG9nbztcblxuICAgIHByb3RlY3RlZCBpdGVuc1RvU2VsZWN0RmlsdGVyVXRpbDoge1xuICAgICAgICBhbGxJdGVuc1NlbGVjdGVkOiBib29sZWFuO1xuICAgICAgICByYXdJdGVuc1RvU2VsZWN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgICAgICBmaWx0ZXJlZEl0ZW5zVG9TZWxlY3Q6IEludGVybmFsUGlja2xpc3RJdGVtW107XG4gICAgfSA9IHtcbiAgICAgICAgYWxsSXRlbnNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHJhd0l0ZW5zVG9TZWxlY3Q6IFtdLFxuICAgICAgICBmaWx0ZXJlZEl0ZW5zVG9TZWxlY3Q6IFtdLFxuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWw6IHtcbiAgICAgICAgYWxsSXRlbnNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgICAgcmF3U2VsZWN0ZWRJdGVuczogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICAgICAgZmlsdGVyZWRTZWxlY3RlZEl0ZW5zOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgIH0gPSB7XG4gICAgICAgIGFsbEl0ZW5zU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICByYXdTZWxlY3RlZEl0ZW5zOiBbXSxcbiAgICAgICAgZmlsdGVyZWRTZWxlY3RlZEl0ZW5zOiBbXSxcbiAgICB9O1xuXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNNYXA6IFNldDxJbnRlcm5hbFBpY2tsaXN0SXRlbT4gPSBuZXcgU2V0KCk7XG4gICAgcHVibGljIGl0ZW5zVG9TZWxlY3RJZCA9IHJhbmRvbUhhc2goJ2l0ZW5zVG9TZWxlY3QnKTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc0lkID0gcmFuZG9tSGFzaCgnc2VsZWN0ZWRJdGVucycpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc291cmNlRmlsdGVyU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldEZpbHRlclN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VMb2FkU3ViamVjdCA9IG5ldyBTdWJqZWN0PFBpY2tsaXN0TGF6eUxvYWRFdmVudD4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldExvYWRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8UGlja2xpc3RMYXp5TG9hZEV2ZW50PigpO1xuICAgIHByaXZhdGUgX2ludGVybmFsVG90YWxTb3VyY2UgPSAwO1xuICAgIHByaXZhdGUgX2ludGVybmFsVG90YWxUYXJnZXQgPSAwO1xuICAgIHByaXZhdGUgc291cmNlQ3VycmVudFBhZ2UgPSAwO1xuICAgIHByaXZhdGUgdGFyZ2V0Q3VycmVudFBhZ2UgPSAwO1xuXG4gICAgcHJpdmF0ZSBfbG9nRXJyb3JUZW1wbGF0ZSA9IHRydWU7XG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlRGlyZWN0aXZlPiB8IG51bGwgPSBudWxsO1xuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1Ub1NlbGVjdFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXM/LmZpbmQoKHgpID0+IHgudHlwZSA9PT0gJ2l0ZW0tdG8tc2VsZWN0Jyk/LnRlbXBsYXRlID8/IG51bGw7XG4gICAgICAgIHRoaXMuaXRlbVNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcz8uZmluZCgoeCkgPT4geC50eXBlID09PSAnc2VsZWN0ZWQtaXRlbScpPy50ZW1wbGF0ZSA/PyBudWxsO1xuICAgICAgICBpZiAodGhpcy5fbG9nRXJyb3JUZW1wbGF0ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1Ub1NlbGVjdFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTWlzc2luZyB0ZW1wbGF0ZSBmb3IgJ2l0ZW0tdG8tc2VsZWN0JyBhZGQgdGhpcyB0ZW1wbGF0ZSB1c2luZyBzVGVtcGxhdGUgZGlyZWN0aXZlLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1TZWxlY3RlZFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTWlzc2luZyB0ZW1wbGF0ZSBmb3IgJ3NlbGVjdGVkLWl0ZW0nIGFkZCB0aGlzIHRlbXBsYXRlIHVzaW5nIHNUZW1wbGF0ZSBkaXJlY3RpdmUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldHVwTG9hZGVyUGlwZWxpbmVzKCk7XG4gICAgICAgIHRoaXMuc2V0dXBMYXp5TG9hZEV2ZW50cygpO1xuICAgICAgICB0aGlzLnNldHVwRmlsdGVyRGVib3VuY2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjaGFuZ2VkSXRlbnNUb1NlbGVjdCA9IGNoYW5nZXNbJ2l0ZW5zVG9TZWxlY3QnXTtcbiAgICAgICAgY29uc3QgY2hhbmdlZFNlbGVjdGVkSXRlbnMgPSBjaGFuZ2VzWydzZWxlY3RlZEl0ZW5zJ107XG4gICAgICAgIGlmIChjaGFuZ2VkSXRlbnNUb1NlbGVjdCAmJiAhdGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsID0ge1xuICAgICAgICAgICAgICAgIGFsbEl0ZW5zU2VsZWN0ZWQ6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICByYXdJdGVuc1RvU2VsZWN0OiB0aGlzLml0ZW5zVG9TZWxlY3QsXG4gICAgICAgICAgICAgICAgZmlsdGVyZWRJdGVuc1RvU2VsZWN0OiB0aGlzLml0ZW5zVG9TZWxlY3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZWRJdGVuc1RvU2VsZWN0ICYmIHRoaXMubGF6eUxvYWQoKSkge1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0ID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLml0ZW5zVG9TZWxlY3QsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdElkLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IFsuLi50aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3RdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZWRTZWxlY3RlZEl0ZW5zICYmICF0aGlzLmxhenlMb2FkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwgPSB7XG4gICAgICAgICAgICAgICAgYWxsSXRlbnNTZWxlY3RlZDogdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkU2VsZWN0ZWRJdGVuczogdGhpcy5zZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IHRoaXMuc2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlZFNlbGVjdGVkSXRlbnMgJiYgdGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmFsbEl0ZW5zU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zID0gWy4uLnRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVuc107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RlZChpbnRlcm5hbFBpY2tsaXN0SXRlbTogSW50ZXJuYWxQaWNrbGlzdEl0ZW0sIGNvbnRhaW5lckxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbnRlcm5hbFBpY2tsaXN0SXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQodGhpcy5nZXRPcHBvc2l0aXZlSWQoY29udGFpbmVyTGlzdElkKSk7XG4gICAgICAgIGludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkID0gIWludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkO1xuICAgICAgICBpZiAoaW50ZXJuYWxQaWNrbGlzdEl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaW50ZXJuYWxQaWNrbGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpbnRlcm5hbFBpY2tsaXN0SXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250YWluZXJGaWx0ZXJVdGlsID1cbiAgICAgICAgICAgIGNvbnRhaW5lckxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQgPyB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsIDogdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbDtcbiAgICAgICAgY29uc3QgaXNBbGxTZWxlY3RlZCA9IHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRCeUxpc3QoXG4gICAgICAgICAgICBjb250YWluZXJMaXN0SWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVuc1xuICAgICAgICAgICAgICAgIDogdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QsXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmxhenlMb2FkKCkgJiYgIWludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkICYmIGNvbnRhaW5lckZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCkge1xuICAgICAgICAgICAgY29udGFpbmVyRmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXp5TG9hZCgpICYmIGlzQWxsU2VsZWN0ZWQgJiYgY29udGFpbmVyRmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkICE9PSBpc0FsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb250YWluZXJGaWx0ZXJVdGlsLmFsbEl0ZW5zU2VsZWN0ZWQgPSBpc0FsbFNlbGVjdGVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICByZW1vdmUoYWxsID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgaXRlbnMgPSBmaWx0ZXJFbmFibGVkPFQ+KGFsbCA/IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyA6IHRoaXMuc2VsZWN0ZWRJdGVuc01hcCk7XG4gICAgICAgIGlmICghaXRlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsRWxlbWVudHMgPSB0aGlzLmxhenlMb2FkKCkgPyBbXSA6IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucztcbiAgICAgICAgY29uc3QgcmV2ZXJ0QWN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgICAgICAuLi5pdGVucy5tYXAoKGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QuZmlsdGVyKFxuICAgICAgICAgICAgICAgICh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVucyA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucztcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJdGVuc1RvU2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5vZGVNb3ZlZC5lbWl0KHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJ3RvLXNlbGVjdCcsXG4gICAgICAgICAgICBpdGVtczogYWxsID8gYWxsRWxlbWVudHMgOiBwYXJzZVZhbHVlRW1pdChBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRJdGVuc01hcCkpLFxuICAgICAgICAgICAgbW92ZUFsbDogYWxsLFxuICAgICAgICAgICAgcmV2ZXJ0QWN0aW9uLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0ID0gW1xuICAgICAgICAgICAgLi4udGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgLi4uaXRlbnMubWFwKChpdGVtUmVtb3ZlKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbVJlbW92ZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoaXRlbVJlbW92ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1SZW1vdmU7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zLmZpbHRlcihcbiAgICAgICAgICAgICh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW5zVG9TZWxlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdERhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYWRkKGFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGl0ZW5zID0gZmlsdGVyRW5hYmxlZDxUPihhbGwgPyB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgOiB0aGlzLnNlbGVjdGVkSXRlbnNNYXApO1xuICAgICAgICBpZiAoIWl0ZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxsRWxlbWVudHMgPSB0aGlzLmxhenlMb2FkKCkgPyBbXSA6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICAgICAgY29uc3QgcmV2ZXJ0QWN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0ID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCxcbiAgICAgICAgICAgICAgICAuLi5pdGVucy5tYXAoKGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZGVsZXRlKGkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJdGVuc1RvU2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5vZGVNb3ZlZC5lbWl0KHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJ3NlbGVjdGVkJyxcbiAgICAgICAgICAgIGl0ZW1zOiBhbGwgPyBhbGxFbGVtZW50cyA6IHBhcnNlVmFsdWVFbWl0KEFycmF5LmZyb20odGhpcy5zZWxlY3RlZEl0ZW5zTWFwKSksXG4gICAgICAgICAgICBtb3ZlQWxsOiBhbGwsXG4gICAgICAgICAgICByZXZlcnRBY3Rpb24sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMsXG4gICAgICAgICAgICAuLi5pdGVucy5tYXAoKGl0ZW1SZW1vdmUpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtUmVtb3ZlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpdGVtUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVJlbW92ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QuZmlsdGVyKFxuICAgICAgICAgICAgKHgpID0+ICFpdGVucy5pbmNsdWRlcyh4KSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmxhenlMb2FkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zO1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclNlbGVjdGVkSXRlbnMoKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySXRlbnNUb1NlbGVjdCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJJdGVuc1RvU2VsZWN0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLnNldCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlRmlsdGVyU3ViamVjdC5uZXh0KHRoaXMuYXZhaWxhYmxlSXRlbnNGaWx0ZXIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZWFyY2hUZXJtID0gdGhpcy5hdmFpbGFibGVJdGVuc0ZpbHRlci50cmltKCk7XG4gICAgICAgIGlmIChzZWFyY2hUZXJtKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGl0ZW0pID0+IGNvbXBhcmVTdHJpbmdzKGl0ZW0uZGF0YVt0aGlzLmZpbHRlckJ5XSwgc2VhcmNoVGVybSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGZpbHRlclNlbGVjdGVkSXRlbnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxhenlMb2FkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdUYXJnZXQuc2V0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy50YXJnZXRGaWx0ZXJTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlci50cmltKCk7XG4gICAgICAgIGlmIChzZWFyY2hUZXJtKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGl0ZW0pID0+IGNvbXBhcmVTdHJpbmdzKGl0ZW0uZGF0YVt0aGlzLmZpbHRlckJ5XSwgc2VhcmNoVGVybSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxJbnRlcm5hbFBpY2tsaXN0SXRlbVtdPikge1xuICAgICAgICBjb25zdCBpc0RpZmZlcmVudENvbnRhaW5lciA9IGV2ZW50LmNvbnRhaW5lciAhPT0gZXZlbnQucHJldmlvdXNDb250YWluZXI7XG4gICAgICAgIGlmICghaXNEaWZmZXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUmVtb3ZlZEl0ZW5zID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkO1xuICAgICAgICBpZiAoaXNSZW1vdmVkSXRlbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogQ2RrRHJhZ0V2ZW50PFQ+LCBkcmFnTGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkSXRlbnNCeUxpc3RJZCh0aGlzLmdldE9wcG9zaXRpdmVJZChkcmFnTGlzdElkKSk7XG4gICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmFkZChldmVudC5zb3VyY2UuZGF0YSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5mb3JFYWNoKCh4KSA9PiAoeC5pbnZpc2libGUgPSB0cnVlKSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdSZWxlYXNlKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZm9yRWFjaCgoaXRlbSkgPT4gKGl0ZW0uaW52aXNpYmxlID0gZmFsc2UpKTtcbiAgICB9XG5cbiAgICBjaGVja0FsbEF2YWlsYWJsZUl0ZW5zQ2hhbmdlKGNoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKGNoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25TY3JvbGwoZXZlbnQ6IEV2ZW50LCBsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMubGF6eUxvYWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgcmVhY2hMaW1pdCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgZWxlbWVudC5zY3JvbGxUb3AgPj0gZWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGlmICghcmVhY2hMaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldDogUGlja2xpc3RUYXJnZXQgPSBsaXN0SWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkID8gJ3NlbGVjdGVkJyA6ICd0by1zZWxlY3QnO1xuICAgICAgICBjb25zdCB0YXJnZXRSZWFjaExpbWl0ID1cbiAgICAgICAgICAgIHRhcmdldCA9PT0gJ3NlbGVjdGVkJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMubGVuZ3RoID49IHRoaXMuX2ludGVybmFsVG90YWxUYXJnZXRcbiAgICAgICAgICAgICAgICA6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0Lmxlbmd0aCA+PSB0aGlzLl9pbnRlcm5hbFRvdGFsU291cmNlO1xuICAgICAgICBpZiAodGFyZ2V0UmVhY2hMaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZE5leHRQYWdlKHRhcmdldCk7XG4gICAgfVxuXG4gICAgZ2V0IGRpc2FibGVTZWxlY3RlZEl0ZW5zQ2hlY2tib3goKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJFbmFibGVkPFQ+KHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgZ2V0IGRpc2FibGVJdGVuc1RvU2VsZWN0Q2hlY2tib3goKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJFbmFibGVkPFQ+KHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0KS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgZ2V0IGl0ZW5zVG9TZWxlY3RBbGxTZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRCeUxpc3QodGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZEl0ZW5zQWxsU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja0FsbFNlbGVjdGVkQnlMaXN0KHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzU2VsZWN0ZWRJdGVucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5zaXplID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVjYXJyZWdhIGFzIGxpc3RhcyBhcMOzcyBhIGNvbmZpcm1hw6fDo28gZGUgdW1hIG1vdmltZW50YcOnw6NvIHBlbG8gYmFja2VuZC5cbiAgICAgKlxuICAgICAqICoqUG9yIHF1ZSB1c2FyPyoqXG4gICAgICogQW8gbW92ZXIgaXRlbnMsIG8gY29tcG9uZW50ZSBhdHVhbGl6YSBhIFVJIGRlIGZvcm1hIG90aW1pc3RhIOKAlCBvcyBpdGVucyBzw6NvIG1vdmlkb3NcbiAgICAgKiBpbWVkaWF0YW1lbnRlIGFudGVzIGRhIGNvbmZpcm1hw6fDo28gZG8gc2Vydmlkb3IuIEFww7NzIG8gYmFja2VuZCBjb25maXJtYXIgYSBvcGVyYcOnw6NvLFxuICAgICAqIGNoYW1lIGByZXNldExpc3RgIHBhcmEgbGltcGFyIGUgcmVjYXJyZWdhciBhcyBsaXN0YXMgYWZldGFkYXMgZG8gemVybywgZ2FyYW50aW5kbyBxdWVcbiAgICAgKiBvIGVzdGFkbyBkYSBVSSByZWZsaXRhIG9zIGRhZG9zIHJlYWlzIHBlcnNpc3RpZG9zLlxuICAgICAqXG4gICAgICogKipPIHF1ZSBlc3BlcmE/KipcbiAgICAgKiBSZWNlYmUgbyBvYmpldG8gYFBpY2tsaXN0SXRlbU1vdmU8VD5gIGVtaXRpZG8gcGVsbyBvdXRwdXQgYChub2RlTW92ZWQpYC4gTyBjb21wb25lbnRlXG4gICAgICogdXRpbGl6YSBgbm9kZS5kaXJlY3Rpb25gIHBhcmEgZGV0ZXJtaW5hciBxdWFsIGxpc3RhIHJlY2FycmVnYXIgKGEgbGlzdGEgZGUgZGVzdGlubyBkYVxuICAgICAqIG1vdmltZW50YcOnw6NvKSBlIGBub2RlLm1vdmVBbGxgIHBhcmEgdmVyaWZpY2FyIHNlIGEgb3JpZ2VtIHRhbWLDqW0gZGV2ZSBzZXIgcmVjYXJyZWdhZGFcbiAgICAgKiAocG9yIGV4ZW1wbG8sIGFvIG1vdmVyIHRvZG9zIG9zIGl0ZW5zIGRlIHVtYSBsaXN0YSBwYXJhIG91dHJhLCBhbWJhcyBmaWNhbSBjb20gZXN0YWRvXG4gICAgICogYWx0ZXJhZG8gbm8gYmFja2VuZCkuXG4gICAgICpcbiAgICAgKiAqKk8gcXVlIGZhej8qKlxuICAgICAqIC0gUmVzZXRhIG8gY29udGFkb3IgZGUgcMOhZ2luYSBkYSBsaXN0YSBkZSBkZXN0aW5vIHBhcmEgYDBgIChwcmltZWlyYSBww6FnaW5hKS5cbiAgICAgKiAtIExpbXBhIHRvZG9zIG9zIGl0ZW5zIGNhcnJlZ2Fkb3MgbmEgbGlzdGEgZGUgZGVzdGluby5cbiAgICAgKiAtIERpc3BhcmEgaW1lZGlhdGFtZW50ZSBvIGNhcnJlZ2FtZW50byBkYSBwcmltZWlyYSBww6FnaW5hIHZpYSBgc291cmNlTG9hZGVyYC9gdGFyZ2V0TG9hZGVyYC5cbiAgICAgKiAtIFNlIGBub2RlLm1vdmVBbGwgPT09IHRydWVgLCByZXBldGUgbyBwcm9jZXNzbyBwYXJhIGEgbGlzdGEgZGUgb3JpZ2VtLlxuICAgICAqXG4gICAgICogKipFeGVtcGxvIGRlIHVzbzoqKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBub2RlTW92ZWQobm9kZTogUGlja2xpc3RJdGVtTW92ZTxNeUl0ZW0+KTogdm9pZCB7XG4gICAgICogICAgIHRoaXMuc2VydmljZS5tb3ZlSXRlbXMobm9kZSkuc3Vic2NyaWJlKHtcbiAgICAgKiAgICAgICAgIG5leHQ6ICgpID0+IHRoaXMubXlQaWNrbGlzdCgpLnJlc2V0TGlzdChub2RlKSxcbiAgICAgKiAgICAgICAgIGVycm9yOiAoKSA9PiBub2RlLnJldmVydEFjdGlvbigpLFxuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZSAtIE8gb2JqZXRvIGRlIG1vdmltZW50YcOnw6NvIGVtaXRpZG8gcGVsbyBvdXRwdXQgYChub2RlTW92ZWQpYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzZXRMaXN0KG5vZGU6IFBpY2tsaXN0SXRlbU1vdmU8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhenlMb2FkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Jlc2V0TGlzdEJ5VGFyZ2V0KG5vZGUuZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKG5vZGUubW92ZUFsbCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRMaXN0QnlUYXJnZXQobm9kZS5kaXJlY3Rpb24gPT09ICdzZWxlY3RlZCcgPyAndG8tc2VsZWN0JyA6ICdzZWxlY3RlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzZXRMaXN0QnlUYXJnZXQodGFyZ2V0OiBQaWNrbGlzdFRhcmdldCk6IHZvaWQge1xuICAgICAgICBpZiAodGFyZ2V0ID09PSAnc2VsZWN0ZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldEN1cnJlbnRQYWdlID0gLTE7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbFRvdGFsVGFyZ2V0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDdXJyZW50UGFnZSA9IC0xO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxUb3RhbFNvdXJjZSA9IDA7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmxvYWROZXh0UGFnZSh0YXJnZXQpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0FsbFNlbGVjdGVkQnlMaXN0KGxpc3Q6IEludGVybmFsUGlja2xpc3RJdGVtW10pIHtcbiAgICAgICAgY29uc3QgX2xpc3RJdGVucyA9IGZpbHRlckVuYWJsZWQ8VD4obGlzdCk7XG4gICAgICAgIGlmICghX2xpc3RJdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfbGlzdEl0ZW5zLmV2ZXJ5KCh4KSA9PiB4LnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBMb2FkZXJQaXBlbGluZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc291cmNlTG9hZGVyICYmICF0aGlzLnRhcmdldExvYWRlciAmJiB0aGlzLl9sb2dFcnJvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGBMYXp5IGxvYWQgaXMgZW5hYmxlZCBidXQgbm8gbG9hZGVyIGZ1bmN0aW9uIHdhcyBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUgYXQgbGVhc3Qgb25lIGxvYWRlciBmdW5jdGlvbiB1c2luZyAnc291cmNlTG9hZGVyJyBvciAndGFyZ2V0TG9hZGVyJyBpbnB1dC5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZUxvYWRlcigpKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUxvYWRTdWJqZWN0XG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdTb3VyY2Uuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlTG9hZGVyKCkhKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGl0ZW1zLCB0b3RhbFJlY29yZHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbFRvdGFsU291cmNlID0gdG90YWxSZWNvcmRzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YXJnZXRMb2FkZXIoKSkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRMb2FkU3ViamVjdFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nVGFyZ2V0LnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldExvYWRlcigpIShldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBpdGVtcywgdG90YWxSZWNvcmRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxUb3RhbFRhcmdldCA9IHRvdGFsUmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmFsbEl0ZW5zU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMsXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdUYXJnZXQuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEZpbHRlckRlYm91bmNlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubGF6eUxvYWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zb3VyY2VGaWx0ZXJTdWJqZWN0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ3VycmVudFBhZ2UgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTmV4dFBhZ2UoJ3RvLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy50YXJnZXRGaWx0ZXJTdWJqZWN0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0Q3VycmVudFBhZ2UgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTmV4dFBhZ2UoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwTGF6eUxvYWRFdmVudHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRQYWdlKCd0by1zZWxlY3QnKTtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRQYWdlKCdzZWxlY3RlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWROZXh0UGFnZSh0YXJnZXQ6IFBpY2tsaXN0VGFyZ2V0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvdGFsUmVnaXN0ZXJzID0gdGFyZ2V0ID09PSAnc2VsZWN0ZWQnID8gdGhpcy5faW50ZXJuYWxUb3RhbFRhcmdldCA6IHRoaXMuX2ludGVybmFsVG90YWxTb3VyY2U7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTWF0aC5jZWlsKHRvdGFsUmVnaXN0ZXJzIC8gdGhpcy5yb3dzKCkpO1xuXG4gICAgICAgIGlmICh0YXJnZXQgPT09ICdzZWxlY3RlZCcgJiYgdGhpcy50YXJnZXRDdXJyZW50UGFnZSA8IGxhc3RQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldEN1cnJlbnRQYWdlKys7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSAndG8tc2VsZWN0JyAmJiB0aGlzLnNvdXJjZUN1cnJlbnRQYWdlIDwgbGFzdFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ3VycmVudFBhZ2UrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdEN1cnJlbnRQYWdlKHRhcmdldCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q3VycmVudFBhZ2UodGFyZ2V0OiBQaWNrbGlzdFRhcmdldCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0YXJnZXQgPT09ICdzZWxlY3RlZCcgPyB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXIgOiB0aGlzLmF2YWlsYWJsZUl0ZW5zRmlsdGVyO1xuICAgICAgICBjb25zdCBwYWdlID0gdGFyZ2V0ID09PSAnc2VsZWN0ZWQnID8gdGhpcy50YXJnZXRDdXJyZW50UGFnZSA6IHRoaXMuc291cmNlQ3VycmVudFBhZ2U7XG5cbiAgICAgICAgY29uc3QgZXZlbnQ6IFBpY2tsaXN0TGF6eUxvYWRFdmVudCA9IHsgdGFyZ2V0LCBwYWdlLCBmaWx0ZXIsIHBhZ2VTaXplOiB0aGlzLnJvd3MoKSB9O1xuXG4gICAgICAgIGlmICh0YXJnZXQgPT09ICdzZWxlY3RlZCcpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0TG9hZFN1YmplY3QubmV4dChldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUxvYWRTdWJqZWN0Lm5leHQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKGNoZWNrZWQ6IGJvb2xlYW4sIGxpc3Q6IEludGVybmFsUGlja2xpc3RJdGVtW10sIGxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQobGlzdElkID09PSB0aGlzLnNlbGVjdGVkSXRlbnNJZCA/IHRoaXMuaXRlbnNUb1NlbGVjdElkIDogdGhpcy5zZWxlY3RlZEl0ZW5zSWQpO1xuICAgICAgICBmaWx0ZXJFbmFibGVkPFQ+KGxpc3QpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBjaGVja2VkO1xuICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuYWRkKGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZGVsZXRlKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCA9IGNoZWNrZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmFsbEl0ZW5zU2VsZWN0ZWQgPSBjaGVja2VkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVuc2VsZWN0ZWRJdGVuc0J5TGlzdElkKGxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNsZWFyTGlzdCA9IHRoaXMuZ2V0QWxsRWxlbWVudHNCeUxpc3RJZChsaXN0SWQpO1xuICAgICAgICBjbGVhckxpc3QuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgeC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZSh4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbEVsZW1lbnRzQnlMaXN0SWQobGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWRcbiAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zXG4gICAgICAgICAgICA6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9wcG9zaXRpdmVJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbGlzdElkID09PSB0aGlzLnNlbGVjdGVkSXRlbnNJZCA/IHRoaXMuaXRlbnNUb1NlbGVjdElkIDogdGhpcy5zZWxlY3RlZEl0ZW5zSWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0Q2hhbmdlLmVtaXQocGFyc2VWYWx1ZUVtaXQodGhpcy5pdGVuc1RvU2VsZWN0KSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0NoYW5nZS5lbWl0KHBhcnNlVmFsdWVFbWl0KHRoaXMuc2VsZWN0ZWRJdGVucykpO1xuICAgIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gc3RyaW5ncyBieSBub3JtYWxpemluZyB0aGVtIHRvIGEgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgYWNjZW50LWZyZWUgZm9ybSxcbiAqIGFuZCBjaGVja3MgaWYgdGhlIG1haW4gc3RyaW5nIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcuXG4gKlxuICogQHBhcmFtIG1haW5TdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkLlxuICogQHBhcmFtIHN1YnN0cmluZyAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvciB3aXRoaW4gdGhlIG1haW4gc3RyaW5nLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbm9ybWFsaXplZCBtYWluIHN0cmluZyBjb250YWlucyB0aGUgbm9ybWFsaXplZCBzdWJzdHJpbmcuXG4gKi9cblxuY29uc3QgY29tcGFyZVN0cmluZ3MgPSAobWFpblN0cmluZzogc3RyaW5nLCBzdWJzdHJpbmc6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBub3JtYWxpemVTdHJpbmcobWFpblN0cmluZykuaW5jbHVkZXMobm9ybWFsaXplU3RyaW5nKHN1YnN0cmluZykpO1xufTtcblxuY29uc3QgZmlsdGVyRW5hYmxlZCA9IDxUPihsaXN0OiBQaWNrTGlzdEl0ZW08VD5bXSB8IFNldDxJbnRlcm5hbFBpY2tsaXN0SXRlbT4pOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdID0+IHtcbiAgICBjb25zdCBfbGlzdCA9IGxpc3QgaW5zdGFuY2VvZiBTZXQgPyBBcnJheS5mcm9tKGxpc3QpIDogbGlzdDtcbiAgICByZXR1cm4gX2xpc3QuZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCk7XG59O1xuXG5jb25zdCBtYXBEYXRhID0gPFQ+KGxpc3Q6IFBpY2tMaXN0SXRlbTxUPltdKSA9PiB7XG4gICAgcmV0dXJuIGxpc3QubWFwKCh4KSA9PiB4LmRhdGEpO1xufTtcblxuY29uc3QgcGFyc2VWYWx1ZUVtaXQgPSBwaXBlKGZpbHRlckVuYWJsZWQsIG1hcERhdGEpO1xuXG5leHBvcnQgY29uc3QgcGFyc2VJdGVuc1BpY2tMaXN0ID0gPFQ+KFxuICAgIGFycmF5OiBUW10sXG4gICAgZGlzYWJsZWRGbj86IChpdGVtOiBUKSA9PiBib29sZWFuLFxuICAgIGlkS2V5Pzoga2V5b2YgVCxcbik6IFBpY2tMaXN0SXRlbTxUPltdID0+IHtcbiAgICByZXR1cm4gYXJyYXkubWFwKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB4LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkRm4gPyBkaXNhYmxlZEZuKHgpIDogZmFsc2UsXG4gICAgICAgICAgICBpZDogaWRLZXkgPyBTdHJpbmcoeFtpZEtleV0pIDogY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn07XG5cbiIsIjxuZy10ZW1wbGF0ZVxuICAgICNwcmV2aWV3UmVuZGVyXG4gICAgbGV0LWl0ZW5zPVwiaXRlbnNcIlxuICAgIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCJcbj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInBpY2tsaXN0LWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0uZGF0YSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjcGlja2xpc3RJdGVuc1JlbmRlclxuICAgIGxldC1pZD1cImlkXCJcbiAgICBsZXQtaXRlbnM9XCJpdGVuc1wiXG4gICAgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIlxuICAgIGxldC1saXN0Q29ubmVjdGVkVG89XCJsaXN0Q29ubmVjdGVkVG9cIlxuICAgIGxldC1pc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwaWNrbGlzdC1pdGVtc1wiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJpdGVuc1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImxpc3RDb25uZWN0ZWRUb1wiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICAgICAgKnNMb2FkaW5nU3RhdGU9XCJ7IGxvYWRpbmc6IGlzTG9hZGluZywgaW5kaWNhdG9yOiBsb2dvSW5kaWNhdG9yIH1cIlxuICAgICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudCwgaWQpXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0ZWQoaXRlbSwgaWQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnUmVsZWFzZWQpPVwib25EcmFnUmVsZWFzZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpY2tsaXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucGlja2xpc3QtaXRlbS1pbnZpc2libGVdPVwiaXRlbS5pbnZpc2libGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1pdGVtLWFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBpdGVtOiBpdGVtLmRhdGEsIHNlbGVjdGVkOiBpdGVtLnNlbGVjdGVkLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrRHJhZ1ByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldmlld1JlbmRlcjsgY29udGV4dDogeyBpdGVuczogc2VsZWN0ZWRJdGVuc01hcCwgdGVtcGxhdGU6IHRlbXBsYXRlIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICAgI2NoZWNrYm94VGl0bGVSZW5kZXJcbiAgICBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgbGV0LWNoZWNrZWQ9XCJjaGVja2VkXCJcbiAgICBsZXQtY2hhbmdlRm49XCJjaGFuZ2VGblwiXG4gICAgbGV0LWlkPVwiaWRcIlxuPlxuICAgIEBpZiAoc2hvd0NoZWNrYm94ICYmICFsYXp5TG9hZCgpKSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jaGVja2JveFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VGbigkYW55KCRldmVudC50YXJnZXQpLmNoZWNrZWQpXCJcbiAgICAgICAgLz5cbiAgICB9IEBlbHNlIGlmIChzaG93Q2hlY2tib3ggJiYgbGF6eUxvYWQoKSAmJiBpZCA9PT0gaXRlbnNUb1NlbGVjdElkKSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jaGVja2JveFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmFsbEl0ZW5zU2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGVja0FsbEF2YWlsYWJsZUl0ZW5zQ2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkuY2hlY2tlZClcIlxuICAgICAgICAvPlxuICAgIH0gQGVsc2UgaWYgKHNob3dDaGVja2JveCAmJiBsYXp5TG9hZCgpICYmIGlkID09PSBzZWxlY3RlZEl0ZW5zSWQpIHtcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLmNoZWNrZWQpXCJcbiAgICAgICAgLz5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2IGNsYXNzPVwicGlja2xpc3QtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInBpY2tsaXN0LWl0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1ib3hcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC10aXRsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICBAaWYgKCFmaWx0ZXJCeSAmJiAhbGF6eUxvYWQoKSkge1xuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VGl0bGVSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGbjogY2hlY2tBbGxBdmFpbGFibGVJdGVuc0NoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbnNUb1NlbGVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWNrbGlzdC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdmFpbGFibGVJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYXZhaWxhYmxlLWl0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSB8fCBsYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tsaXN0LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VGl0bGVSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlSXRlbnNUb1NlbGVjdENoZWNrYm94LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhdmFpbGFibGVJdGVuc0ZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJJdGVuc1RvU2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUl0ZW5zUGxhY2Vob2xkZXIgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5waWNrbGlzdC1wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBwaWNrbGlzdEl0ZW5zUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbnNUb1NlbGVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbnM6IGl0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBpdGVtVG9TZWxlY3RUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RDb25uZWN0ZWRUbzogc2VsZWN0ZWRJdGVuc0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nOiBfbG9hZGluZ1NvdXJjZSgpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8cy1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYWRkU2VsZWN0ZWRJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYWRkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICByaWdodEljb25DbGFzcz1cImZhIGZhLWZ3IGZhLWFycm93LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1NlbGVjdGVkSXRlbnNcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImFkZCgpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRBbGxJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYWRkX2FsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwibGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkKHRydWUpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkgJiYgIWxhenlMb2FkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVTZWxlY3RlZEl0ZW5zQ2hlY2tib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogc2VsZWN0ZWRJdGVuc0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWNrbGlzdC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZEl0ZW5zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5zZWxlY3RlZC1pdGVtcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZmlsdGVyQnkgfHwgbGF6eUxvYWQoKSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93Q2hlY2tib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiBjaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBzZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEl0ZW5zRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlclNlbGVjdGVkSXRlbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVuc1BsYWNlaG9sZGVyIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGlja2xpc3QtcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHBpY2tsaXN0SXRlbnNSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBzZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVuczogc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IGl0ZW1TZWxlY3RlZFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbm5lY3RlZFRvOiBpdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmc6IF9sb2FkaW5nVGFyZ2V0KCksXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJyZW1vdmVTZWxlY3RlZEl0ZW1zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIGljb25DbGFzcz1cImZhIGZhLWZ3IGZhLWFycm93LWxlZnRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRJdGVuc1wiXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlKClcIlxuICAgICAgICAgICAgICAgIFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUFsbEl0ZW1zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfYWxsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmUodHJ1ZSlcIlxuICAgICAgICAgICAgICAgIFthdXhpbGlhcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuIl19
685
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF3QixjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFHTCxNQUFNLEVBQ04sTUFBTSxFQUVOLE1BQU0sR0FHVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM5RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFB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UUFBUSxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxPQUFPLEdBQUcsQ0FBSSxJQUF1QixFQUFFLEVBQUU7SUFDM0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUM5QixLQUFVLEVBQ1YsVUFBaUMsRUFDakMsS0FBZSxFQUNFLEVBQUU7SUFDbkIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDbkIsT0FBTztZQUNILElBQUksRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQzVDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtTQUNyRCxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgRHJhZ0Ryb3BNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGVzdHJveVJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgb3V0cHV0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgc2lnbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IExvYWRpbmdTdGF0ZUluZGljYXRvcnMsIExvYWRpbmdTdGF0ZU1vZHVsZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvbG9hZGluZy1zdGF0ZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdGVtcGxhdGUnO1xuaW1wb3J0IHsgcmFuZG9tSGFzaCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgcGlwZSwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBpY2tMaXN0SXRlbSwgUGlja2xpc3RJdGVtTW92ZSwgUGlja2xpc3RMYXp5TG9hZEV2ZW50LCBQaWNrbGlzdExvYWRlciwgUGlja2xpc3RUYXJnZXQgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIEludGVybmFsUGlja2xpc3RJdGVtPFQgPSBhbnk+IGV4dGVuZHMgUGlja0xpc3RJdGVtPFQ+IHtcbiAgICBpbnZpc2libGU/OiBib29sZWFuO1xuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcbn1cblxudHlwZSBDZGtEcmFnRXZlbnQ8VD4gPSB7IHNvdXJjZTogQ2RrRHJhZzxJbnRlcm5hbFBpY2tsaXN0SXRlbTxUPj4gfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSBsaXN0YSBkZSBkdXBsYSBzZWxlw6fDo28gKHBpY2tsaXN0KSBjb20gc3Vwb3J0ZSBhXG4gKiBhcnJhc3RhciBlIHNvbHRhciwgZmlsdHJvLCBjaGVja2JveGVzIGUgdGVtcGxhdGUgY3VzdG9taXrDoXZlbCBwYXJhIGNhZGEgaXRlbS5cbiAqIEVtaXRlIGV2ZW50b3MgYW8gbW92ZXIgaXRlbnMgZW50cmUgYXMgbGlzdGFzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8cy1waWNrbGlzdFxuICogICBbaXRlbnNUb1NlbGVjdF09XCJpdGVuc0Rpc3Bvbml2ZWlzXCJcbiAqICAgW3NlbGVjdGVkSXRlbnNdPVwiaXRlbnNTZWxlY2lvbmFkb3NcIlxuICogICAoc2VsZWN0ZWRJdGVuc0NoYW5nZSk9XCJvblNlbGVjYW9NdWRvdSgkZXZlbnQpXCIgLz5cbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBEYXRhXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1RyYW5zbGF0ZU1vZHVsZSwgRHJhZ0Ryb3BNb2R1bGUsIEZvcm1zTW9kdWxlLCBCdXR0b25Db21wb25lbnQsIE5nVGVtcGxhdGVPdXRsZXQsIExvYWRpbmdTdGF0ZU1vZHVsZV0sXG4gICAgc2VsZWN0b3I6ICdzLXBpY2tsaXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGlja2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3BpY2tsaXN0LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFBpY2tsaXN0Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkluaXQge1xuICAgIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICAvKiogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGl0ZW5zIGRpc3BvbsOtdmVpcyBwYXJhIHNlbGXDp8OjbyAoY29sdW5hIGVzcXVlcmRhKS4gQGRlZmF1bHQgW10gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpdGVuc1RvU2VsZWN0OiBQaWNrTGlzdEl0ZW08VD5bXSA9IFtdO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBMaXN0YSBkZSBpdGVucyBqw6Egc2VsZWNpb25hZG9zIChjb2x1bmEgZGlyZWl0YSkuIEBkZWZhdWx0IFtdICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuczogUGlja0xpc3RJdGVtPFQ+W10gPSBbXTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyB0w610dWxvIGRhIGxpc3RhIGRlIGRpc3BvbsOtdmVpcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdmFpbGFibGVJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQbGFjZWhvbGRlciBkYSBidXNjYSBuYSBsaXN0YSBkZSBkaXNwb27DrXZlaXMuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgYWRpY2lvbmFyIGl0ZW5zIHNlbGVjaW9uYWRvcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRTZWxlY3RlZEl0ZW5zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFLDs3R1bG8gZG8gYm90w6NvIGRlIGFkaWNpb25hciB0b2RvcyBvcyBpdGVucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRBbGxJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIHTDrXR1bG8gZGEgbGlzdGEgZGUgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNMYWJlbD86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUGxhY2Vob2xkZXIgZGEgYnVzY2EgbmEgbGlzdGEgZGUgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgcmVtb3ZlciBpdGVucyBzZWxlY2lvbmFkb3MuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIGJvdMOjbyBkZSByZW1vdmVyIHRvZG9zIG9zIGl0ZW5zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlbW92ZUFsbEl0ZW1zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIGNoZWNrYm94IG5vcyBpdGVucyBkYXMgbGlzdGFzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dDaGVja2JveCA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQcm9wcmllZGFkZSB1c2FkYSBwYXJhIGZpbHRyYXIgb3MgaXRlbnMgZGFzIGxpc3Rhcy4gQGRlZmF1bHQgJycgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWx0ZXJCeSA9ICcnO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBvIGNhcnJlZ2FtZW50byBwcmVndWnDp29zbyAobGF6eSBsb2FkKSBwYXJhIGFzIGxpc3Rhcy4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgICBsYXp5TG9hZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTsO6bWVybyBkZSBsaW5oYXMgYSBzZXJlbSBleGliaWRhcyBwb3IgcMOhZ2luYSBjYXNvIG8gbGF6eUxvYWQgZXN0ZWphIGhhYmlsaXRhZG8uIEBkZWZhdWx0IDEwICovXG4gICAgcm93cyA9IGlucHV0PG51bWJlcj4oMTApO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBGdW7Dp8OjbyBsb2FkZXIgcGFyYSBhIGxpc3RhIGRlIGRpc3BvbsOtdmVpcyAodG8tc2VsZWN0KS4gUXVhbmRvIGZvcm5lY2lkYSwgbyBjb21wb25lbnRlIGdlcmVuY2lhIGludGVybmFtZW50ZSBwYWdpbmHDp8OjbywgbG9hZGluZyBlIHJhY2UgY29uZGl0aW9ucy4gKi9cbiAgICBzb3VyY2VMb2FkZXIgPSBpbnB1dDxQaWNrbGlzdExvYWRlcjxUPj4oKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRnVuw6fDo28gbG9hZGVyIHBhcmEgYSBsaXN0YSBkZSBzZWxlY2lvbmFkb3MgKHNlbGVjdGVkKS4gUXVhbmRvIGZvcm5lY2lkYSwgbyBjb21wb25lbnRlIGdlcmVuY2lhIGludGVybmFtZW50ZSBwYWdpbmHDp8OjbywgbG9hZGluZyBlIHJhY2UgY29uZGl0aW9ucy4gKi9cbiAgICB0YXJnZXRMb2FkZXIgPSBpbnB1dDxQaWNrbGlzdExvYWRlcjxUPj4oKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBfbG9hZGluZ1RhcmdldCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2xvYWRpbmdTb3VyY2UgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyB1bSBpdGVtIMOpIG1vdmlkbyBlbnRyZSBhcyBsaXN0YXMgZSBvIGxhenkgbG9hZCBlc3TDoSBoYWJpbGl0YWRvLiAqL1xuICAgIG5vZGVNb3ZlZCA9IG91dHB1dDxQaWNrbGlzdEl0ZW1Nb3ZlPFQ+PigpO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBhIGxpc3RhIGRlIHNlbGVjaW9uYWRvcyBtdWRhLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gYSBsaXN0YSBkZSBkaXNwb27DrXZlaXMgbXVkYS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNGaWx0ZXIgPSAnJztcblxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zRmlsdGVyID0gJyc7XG5cbiAgICBwdWJsaWMgaXRlbVRvU2VsZWN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPFQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgaXRlbVNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPFQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcm90ZWN0ZWQgbG9nb0luZGljYXRvciA9IExvYWRpbmdTdGF0ZUluZGljYXRvcnMuTG9nbztcblxuICAgIHByb3RlY3RlZCBpdGVuc1RvU2VsZWN0RmlsdGVyVXRpbDoge1xuICAgICAgICBhbGxJdGVuc1NlbGVjdGVkOiBib29sZWFuO1xuICAgICAgICByYXdJdGVuc1RvU2VsZWN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgICAgICBmaWx0ZXJlZEl0ZW5zVG9TZWxlY3Q6IEludGVybmFsUGlja2xpc3RJdGVtW107XG4gICAgfSA9IHtcbiAgICAgICAgYWxsSXRlbnNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHJhd0l0ZW5zVG9TZWxlY3Q6IFtdLFxuICAgICAgICBmaWx0ZXJlZEl0ZW5zVG9TZWxlY3Q6IFtdLFxuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWw6IHtcbiAgICAgICAgYWxsSXRlbnNTZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgICAgcmF3U2VsZWN0ZWRJdGVuczogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICAgICAgZmlsdGVyZWRTZWxlY3RlZEl0ZW5zOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgIH0gPSB7XG4gICAgICAgIGFsbEl0ZW5zU2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICByYXdTZWxlY3RlZEl0ZW5zOiBbXSxcbiAgICAgICAgZmlsdGVyZWRTZWxlY3RlZEl0ZW5zOiBbXSxcbiAgICB9O1xuXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNNYXA6IFNldDxJbnRlcm5hbFBpY2tsaXN0SXRlbT4gPSBuZXcgU2V0KCk7XG4gICAgcHVibGljIGl0ZW5zVG9TZWxlY3RJZCA9IHJhbmRvbUhhc2goJ2l0ZW5zVG9TZWxlY3QnKTtcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc0lkID0gcmFuZG9tSGFzaCgnc2VsZWN0ZWRJdGVucycpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc291cmNlRmlsdGVyU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldEZpbHRlclN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VMb2FkU3ViamVjdCA9IG5ldyBTdWJqZWN0PFBpY2tsaXN0TGF6eUxvYWRFdmVudD4oKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldExvYWRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8UGlja2xpc3RMYXp5TG9hZEV2ZW50PigpO1xuICAgIHByaXZhdGUgX2ludGVybmFsVG90YWxTb3VyY2UgPSAwO1xuICAgIHByaXZhdGUgX2ludGVybmFsVG90YWxUYXJnZXQgPSAwO1xuICAgIHByaXZhdGUgc291cmNlQ3VycmVudFBhZ2UgPSAwO1xuICAgIHByaXZhdGUgdGFyZ2V0Q3VycmVudFBhZ2UgPSAwO1xuXG4gICAgcHJpdmF0ZSBfbG9nRXJyb3JUZW1wbGF0ZSA9IHRydWU7XG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlRGlyZWN0aXZlPiB8IG51bGwgPSBudWxsO1xuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW1Ub1NlbGVjdFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXM/LmZpbmQoKHgpID0+IHgudHlwZSA9PT0gJ2l0ZW0tdG8tc2VsZWN0Jyk/LnRlbXBsYXRlID8/IG51bGw7XG4gICAgICAgIHRoaXMuaXRlbVNlbGVjdGVkVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcz8uZmluZCgoeCkgPT4geC50eXBlID09PSAnc2VsZWN0ZWQtaXRlbScpPy50ZW1wbGF0ZSA/PyBudWxsO1xuICAgICAgICBpZiAodGhpcy5fbG9nRXJyb3JUZW1wbGF0ZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1Ub1NlbGVjdFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTWlzc2luZyB0ZW1wbGF0ZSBmb3IgJ2l0ZW0tdG8tc2VsZWN0JyBhZGQgdGhpcyB0ZW1wbGF0ZSB1c2luZyBzVGVtcGxhdGUgZGlyZWN0aXZlLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLml0ZW1TZWxlY3RlZFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTWlzc2luZyB0ZW1wbGF0ZSBmb3IgJ3NlbGVjdGVkLWl0ZW0nIGFkZCB0aGlzIHRlbXBsYXRlIHVzaW5nIHNUZW1wbGF0ZSBkaXJlY3RpdmUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldHVwTG9hZGVyUGlwZWxpbmVzKCk7XG4gICAgICAgIHRoaXMuc2V0dXBMYXp5TG9hZEV2ZW50cygpO1xuICAgICAgICB0aGlzLnNldHVwRmlsdGVyRGVib3VuY2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjaGFuZ2VkSXRlbnNUb1NlbGVjdCA9IGNoYW5nZXNbJ2l0ZW5zVG9TZWxlY3QnXTtcbiAgICAgICAgY29uc3QgY2hhbmdlZFNlbGVjdGVkSXRlbnMgPSBjaGFuZ2VzWydzZWxlY3RlZEl0ZW5zJ107XG4gICAgICAgIGlmIChjaGFuZ2VkSXRlbnNUb1NlbGVjdCAmJiAhdGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsID0ge1xuICAgICAgICAgICAgICAgIGFsbEl0ZW5zU2VsZWN0ZWQ6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCB8fCBmYWxzZSxcbiAgICAgICAgICAgICAgICByYXdJdGVuc1RvU2VsZWN0OiB0aGlzLml0ZW5zVG9TZWxlY3QsXG4gICAgICAgICAgICAgICAgZmlsdGVyZWRJdGVuc1RvU2VsZWN0OiB0aGlzLml0ZW5zVG9TZWxlY3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZWRJdGVuc1RvU2VsZWN0ICYmIHRoaXMubGF6eUxvYWQoKSkge1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0ID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLml0ZW5zVG9TZWxlY3QsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdElkLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IFsuLi50aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3RdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZWRTZWxlY3RlZEl0ZW5zICYmICF0aGlzLmxhenlMb2FkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwgPSB7XG4gICAgICAgICAgICAgICAgYWxsSXRlbnNTZWxlY3RlZDogdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkIHx8IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkU2VsZWN0ZWRJdGVuczogdGhpcy5zZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IHRoaXMuc2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlZFNlbGVjdGVkSXRlbnMgJiYgdGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSBbXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmFsbEl0ZW5zU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zID0gWy4uLnRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVuc107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RlZChpbnRlcm5hbFBpY2tsaXN0SXRlbTogSW50ZXJuYWxQaWNrbGlzdEl0ZW0sIGNvbnRhaW5lckxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbnRlcm5hbFBpY2tsaXN0SXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQodGhpcy5nZXRPcHBvc2l0aXZlSWQoY29udGFpbmVyTGlzdElkKSk7XG4gICAgICAgIGludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkID0gIWludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkO1xuICAgICAgICBpZiAoaW50ZXJuYWxQaWNrbGlzdEl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaW50ZXJuYWxQaWNrbGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpbnRlcm5hbFBpY2tsaXN0SXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250YWluZXJGaWx0ZXJVdGlsID1cbiAgICAgICAgICAgIGNvbnRhaW5lckxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQgPyB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsIDogdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbDtcbiAgICAgICAgY29uc3QgaXNBbGxTZWxlY3RlZCA9IHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRCeUxpc3QoXG4gICAgICAgICAgICBjb250YWluZXJMaXN0SWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkXG4gICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVuc1xuICAgICAgICAgICAgICAgIDogdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QsXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmxhenlMb2FkKCkgJiYgIWludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkICYmIGNvbnRhaW5lckZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCkge1xuICAgICAgICAgICAgY29udGFpbmVyRmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXp5TG9hZCgpICYmIGlzQWxsU2VsZWN0ZWQgJiYgY29udGFpbmVyRmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkICE9PSBpc0FsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb250YWluZXJGaWx0ZXJVdGlsLmFsbEl0ZW5zU2VsZWN0ZWQgPSBpc0FsbFNlbGVjdGVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICByZW1vdmUoYWxsID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgaXRlbnMgPSBmaWx0ZXJFbmFibGVkPFQ+KGFsbCA/IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyA6IHRoaXMuc2VsZWN0ZWRJdGVuc01hcCk7XG4gICAgICAgIGlmICghaXRlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWxsRWxlbWVudHMgPSB0aGlzLmxhenlMb2FkKCkgPyBbXSA6IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucztcbiAgICAgICAgY29uc3QgcmV2ZXJ0QWN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgICAgICAuLi5pdGVucy5tYXAoKGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QuZmlsdGVyKFxuICAgICAgICAgICAgICAgICh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVucyA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucztcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJdGVuc1RvU2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5vZGVNb3ZlZC5lbWl0KHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJ3RvLXNlbGVjdCcsXG4gICAgICAgICAgICBpdGVtczogYWxsID8gYWxsRWxlbWVudHMgOiBwYXJzZVZhbHVlRW1pdChBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRJdGVuc01hcCkpLFxuICAgICAgICAgICAgbW92ZUFsbDogYWxsLFxuICAgICAgICAgICAgcmV2ZXJ0QWN0aW9uLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0ID0gW1xuICAgICAgICAgICAgLi4udGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgLi4uaXRlbnMubWFwKChpdGVtUmVtb3ZlKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbVJlbW92ZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoaXRlbVJlbW92ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1SZW1vdmU7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zLmZpbHRlcihcbiAgICAgICAgICAgICh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckl0ZW5zVG9TZWxlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdERhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYWRkKGFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGl0ZW5zID0gZmlsdGVyRW5hYmxlZDxUPihhbGwgPyB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgOiB0aGlzLnNlbGVjdGVkSXRlbnNNYXApO1xuICAgICAgICBpZiAoIWl0ZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxsRWxlbWVudHMgPSB0aGlzLmxhenlMb2FkKCkgPyBbXSA6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICAgICAgY29uc3QgcmV2ZXJ0QWN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0ID0gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCxcbiAgICAgICAgICAgICAgICAuLi5pdGVucy5tYXAoKGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZGVsZXRlKGkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJdGVuc1RvU2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5vZGVNb3ZlZC5lbWl0KHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJ3NlbGVjdGVkJyxcbiAgICAgICAgICAgIGl0ZW1zOiBhbGwgPyBhbGxFbGVtZW50cyA6IHBhcnNlVmFsdWVFbWl0KEFycmF5LmZyb20odGhpcy5zZWxlY3RlZEl0ZW5zTWFwKSksXG4gICAgICAgICAgICBtb3ZlQWxsOiBhbGwsXG4gICAgICAgICAgICByZXZlcnRBY3Rpb24sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSBbXG4gICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMsXG4gICAgICAgICAgICAuLi5pdGVucy5tYXAoKGl0ZW1SZW1vdmUpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtUmVtb3ZlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpdGVtUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVJlbW92ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QuZmlsdGVyKFxuICAgICAgICAgICAgKHgpID0+ICFpdGVucy5pbmNsdWRlcyh4KSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5hbGxJdGVuc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmxhenlMb2FkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zO1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclNlbGVjdGVkSXRlbnMoKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySXRlbnNUb1NlbGVjdCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJJdGVuc1RvU2VsZWN0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nU291cmNlLnNldCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlRmlsdGVyU3ViamVjdC5uZXh0KHRoaXMuYXZhaWxhYmxlSXRlbnNGaWx0ZXIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzZWFyY2hUZXJtID0gdGhpcy5hdmFpbGFibGVJdGVuc0ZpbHRlci50cmltKCk7XG4gICAgICAgIGlmIChzZWFyY2hUZXJtKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGl0ZW0pID0+IGNvbXBhcmVTdHJpbmdzKGl0ZW0uZGF0YVt0aGlzLmZpbHRlckJ5XSwgc2VhcmNoVGVybSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QgPSB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIGZpbHRlclNlbGVjdGVkSXRlbnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmxhenlMb2FkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdUYXJnZXQuc2V0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy50YXJnZXRGaWx0ZXJTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlci50cmltKCk7XG4gICAgICAgIGlmIChzZWFyY2hUZXJtKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGl0ZW0pID0+IGNvbXBhcmVTdHJpbmdzKGl0ZW0uZGF0YVt0aGlzLmZpbHRlckJ5XSwgc2VhcmNoVGVybSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxJbnRlcm5hbFBpY2tsaXN0SXRlbVtdPikge1xuICAgICAgICBjb25zdCBpc0RpZmZlcmVudENvbnRhaW5lciA9IGV2ZW50LmNvbnRhaW5lciAhPT0gZXZlbnQucHJldmlvdXNDb250YWluZXI7XG4gICAgICAgIGlmICghaXNEaWZmZXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUmVtb3ZlZEl0ZW5zID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkO1xuICAgICAgICBpZiAoaXNSZW1vdmVkSXRlbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogQ2RrRHJhZ0V2ZW50PFQ+LCBkcmFnTGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkSXRlbnNCeUxpc3RJZCh0aGlzLmdldE9wcG9zaXRpdmVJZChkcmFnTGlzdElkKSk7XG4gICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmFkZChldmVudC5zb3VyY2UuZGF0YSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5mb3JFYWNoKCh4KSA9PiAoeC5pbnZpc2libGUgPSB0cnVlKSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdSZWxlYXNlKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZm9yRWFjaCgoaXRlbSkgPT4gKGl0ZW0uaW52aXNpYmxlID0gZmFsc2UpKTtcbiAgICB9XG5cbiAgICBjaGVja0FsbEF2YWlsYWJsZUl0ZW5zQ2hhbmdlKGNoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKGNoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25TY3JvbGwoZXZlbnQ6IEV2ZW50LCBsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMubGF6eUxvYWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgcmVhY2hMaW1pdCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgZWxlbWVudC5zY3JvbGxUb3AgPj0gZWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICAgIGlmICghcmVhY2hMaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldDogUGlja2xpc3RUYXJnZXQgPSBsaXN0SWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkID8gJ3NlbGVjdGVkJyA6ICd0by1zZWxlY3QnO1xuICAgICAgICBjb25zdCB0YXJnZXRSZWFjaExpbWl0ID1cbiAgICAgICAgICAgIHRhcmdldCA9PT0gJ3NlbGVjdGVkJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMubGVuZ3RoID49IHRoaXMuX2ludGVybmFsVG90YWxUYXJnZXRcbiAgICAgICAgICAgICAgICA6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0Lmxlbmd0aCA+PSB0aGlzLl9pbnRlcm5hbFRvdGFsU291cmNlO1xuICAgICAgICBpZiAodGFyZ2V0UmVhY2hMaW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZE5leHRQYWdlKHRhcmdldCk7XG4gICAgfVxuXG4gICAgZ2V0IGRpc2FibGVTZWxlY3RlZEl0ZW5zQ2hlY2tib3goKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJFbmFibGVkPFQ+KHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgZ2V0IGRpc2FibGVJdGVuc1RvU2VsZWN0Q2hlY2tib3goKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJFbmFibGVkPFQ+KHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0KS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgZ2V0IGl0ZW5zVG9TZWxlY3RBbGxTZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRCeUxpc3QodGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZEl0ZW5zQWxsU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja0FsbFNlbGVjdGVkQnlMaXN0KHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzU2VsZWN0ZWRJdGVucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5zaXplID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVjYXJyZWdhIGFzIGxpc3RhcyBhcMOzcyBhIGNvbmZpcm1hw6fDo28gZGUgdW1hIG1vdmltZW50YcOnw6NvIHBlbG8gYmFja2VuZC5cbiAgICAgKlxuICAgICAqICoqUG9yIHF1ZSB1c2FyPyoqXG4gICAgICogQW8gbW92ZXIgaXRlbnMsIG8gY29tcG9uZW50ZSBhdHVhbGl6YSBhIFVJIGRlIGZvcm1hIG90aW1pc3RhIOKAlCBvcyBpdGVucyBzw6NvIG1vdmlkb3NcbiAgICAgKiBpbWVkaWF0YW1lbnRlIGFudGVzIGRhIGNvbmZpcm1hw6fDo28gZG8gc2Vydmlkb3IuIEFww7NzIG8gYmFja2VuZCBjb25maXJtYXIgYSBvcGVyYcOnw6NvLFxuICAgICAqIGNoYW1lIGByZXNldExpc3RgIHBhcmEgbGltcGFyIGUgcmVjYXJyZWdhciBhcyBsaXN0YXMgYWZldGFkYXMgZG8gemVybywgZ2FyYW50aW5kbyBxdWVcbiAgICAgKiBvIGVzdGFkbyBkYSBVSSByZWZsaXRhIG9zIGRhZG9zIHJlYWlzIHBlcnNpc3RpZG9zLlxuICAgICAqXG4gICAgICogKipPIHF1ZSBlc3BlcmE/KipcbiAgICAgKiBSZWNlYmUgbyBvYmpldG8gYFBpY2tsaXN0SXRlbU1vdmU8VD5gIGVtaXRpZG8gcGVsbyBvdXRwdXQgYChub2RlTW92ZWQpYC4gTyBjb21wb25lbnRlXG4gICAgICogdXRpbGl6YSBgbm9kZS5kaXJlY3Rpb25gIHBhcmEgZGV0ZXJtaW5hciBxdWFsIGxpc3RhIHJlY2FycmVnYXIgKGEgbGlzdGEgZGUgZGVzdGlubyBkYVxuICAgICAqIG1vdmltZW50YcOnw6NvKSBlIGBub2RlLm1vdmVBbGxgIHBhcmEgdmVyaWZpY2FyIHNlIGEgb3JpZ2VtIHRhbWLDqW0gZGV2ZSBzZXIgcmVjYXJyZWdhZGFcbiAgICAgKiAocG9yIGV4ZW1wbG8sIGFvIG1vdmVyIHRvZG9zIG9zIGl0ZW5zIGRlIHVtYSBsaXN0YSBwYXJhIG91dHJhLCBhbWJhcyBmaWNhbSBjb20gZXN0YWRvXG4gICAgICogYWx0ZXJhZG8gbm8gYmFja2VuZCkuXG4gICAgICpcbiAgICAgKiAqKk8gcXVlIGZhej8qKlxuICAgICAqIC0gUmVzZXRhIG8gY29udGFkb3IgZGUgcMOhZ2luYSBkYSBsaXN0YSBkZSBkZXN0aW5vIHBhcmEgYDBgIChwcmltZWlyYSBww6FnaW5hKS5cbiAgICAgKiAtIExpbXBhIHRvZG9zIG9zIGl0ZW5zIGNhcnJlZ2Fkb3MgbmEgbGlzdGEgZGUgZGVzdGluby5cbiAgICAgKiAtIERpc3BhcmEgaW1lZGlhdGFtZW50ZSBvIGNhcnJlZ2FtZW50byBkYSBwcmltZWlyYSBww6FnaW5hIHZpYSBgc291cmNlTG9hZGVyYC9gdGFyZ2V0TG9hZGVyYC5cbiAgICAgKiAtIFNlIGBub2RlLm1vdmVBbGwgPT09IHRydWVgLCByZXBldGUgbyBwcm9jZXNzbyBwYXJhIGEgbGlzdGEgZGUgb3JpZ2VtLlxuICAgICAqXG4gICAgICogKipFeGVtcGxvIGRlIHVzbzoqKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBub2RlTW92ZWQobm9kZTogUGlja2xpc3RJdGVtTW92ZTxNeUl0ZW0+KTogdm9pZCB7XG4gICAgICogICAgIHRoaXMuc2VydmljZS5tb3ZlSXRlbXMobm9kZSkuc3Vic2NyaWJlKHtcbiAgICAgKiAgICAgICAgIG5leHQ6ICgpID0+IHRoaXMubXlQaWNrbGlzdCgpLnJlc2V0TGlzdChub2RlKSxcbiAgICAgKiAgICAgICAgIGVycm9yOiAoKSA9PiBub2RlLnJldmVydEFjdGlvbigpLFxuICAgICAqICAgICB9KTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZSAtIE8gb2JqZXRvIGRlIG1vdmltZW50YcOnw6NvIGVtaXRpZG8gcGVsbyBvdXRwdXQgYChub2RlTW92ZWQpYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzZXRMaXN0KG5vZGU6IFBpY2tsaXN0SXRlbU1vdmU8VD4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxhenlMb2FkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Jlc2V0TGlzdEJ5VGFyZ2V0KG5vZGUuZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKG5vZGUubW92ZUFsbCkge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXRMaXN0QnlUYXJnZXQobm9kZS5kaXJlY3Rpb24gPT09ICdzZWxlY3RlZCcgPyAndG8tc2VsZWN0JyA6ICdzZWxlY3RlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVzZXRMaXN0QnlUYXJnZXQodGFyZ2V0OiBQaWNrbGlzdFRhcmdldCk6IHZvaWQge1xuICAgICAgICBpZiAodGFyZ2V0ID09PSAnc2VsZWN0ZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldEN1cnJlbnRQYWdlID0gLTE7XG4gICAgICAgICAgICB0aGlzLl9pbnRlcm5hbFRvdGFsVGFyZ2V0ID0gMDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyA9IFtdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VDdXJyZW50UGFnZSA9IC0xO1xuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxUb3RhbFNvdXJjZSA9IDA7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmxvYWROZXh0UGFnZSh0YXJnZXQpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0FsbFNlbGVjdGVkQnlMaXN0KGxpc3Q6IEludGVybmFsUGlja2xpc3RJdGVtW10pIHtcbiAgICAgICAgY29uc3QgX2xpc3RJdGVucyA9IGZpbHRlckVuYWJsZWQ8VD4obGlzdCk7XG4gICAgICAgIGlmICghX2xpc3RJdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfbGlzdEl0ZW5zLmV2ZXJ5KCh4KSA9PiB4LnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0dXBMb2FkZXJQaXBlbGluZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc291cmNlTG9hZGVyICYmICF0aGlzLnRhcmdldExvYWRlciAmJiB0aGlzLl9sb2dFcnJvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgIGBMYXp5IGxvYWQgaXMgZW5hYmxlZCBidXQgbm8gbG9hZGVyIGZ1bmN0aW9uIHdhcyBwcm92aWRlZC4gUGxlYXNlIHByb3ZpZGUgYXQgbGVhc3Qgb25lIGxvYWRlciBmdW5jdGlvbiB1c2luZyAnc291cmNlTG9hZGVyJyBvciAndGFyZ2V0TG9hZGVyJyBpbnB1dC5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZUxvYWRlcigpKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUxvYWRTdWJqZWN0XG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdTb3VyY2Uuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlTG9hZGVyKCkhKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGl0ZW1zLCB0b3RhbFJlY29yZHMgfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbFRvdGFsU291cmNlID0gdG90YWxSZWNvcmRzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtcyxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1NvdXJjZS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YXJnZXRMb2FkZXIoKSkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRMb2FkU3ViamVjdFxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nVGFyZ2V0LnNldCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldExvYWRlcigpIShldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBpdGVtcywgdG90YWxSZWNvcmRzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxUb3RhbFRhcmdldCA9IHRvdGFsUmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbXMsXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmFsbEl0ZW5zU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMsXG4gICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdUYXJnZXQuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cEZpbHRlckRlYm91bmNlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubGF6eUxvYWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zb3VyY2VGaWx0ZXJTdWJqZWN0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlQ3VycmVudFBhZ2UgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTmV4dFBhZ2UoJ3RvLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy50YXJnZXRGaWx0ZXJTdWJqZWN0XG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0Q3VycmVudFBhZ2UgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTmV4dFBhZ2UoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwTGF6eUxvYWRFdmVudHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5sYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRQYWdlKCd0by1zZWxlY3QnKTtcbiAgICAgICAgICAgIHRoaXMubG9hZE5leHRQYWdlKCdzZWxlY3RlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWROZXh0UGFnZSh0YXJnZXQ6IFBpY2tsaXN0VGFyZ2V0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvdGFsUmVnaXN0ZXJzID0gdGFyZ2V0ID09PSAnc2VsZWN0ZWQnID8gdGhpcy5faW50ZXJuYWxUb3RhbFRhcmdldCA6IHRoaXMuX2ludGVybmFsVG90YWxTb3VyY2U7XG4gICAgICAgIGNvbnN0IGxhc3RQYWdlID0gTWF0aC5jZWlsKHRvdGFsUmVnaXN0ZXJzIC8gdGhpcy5yb3dzKCkpO1xuXG4gICAgICAgIGlmICh0YXJnZXQgPT09ICdzZWxlY3RlZCcgJiYgdGhpcy50YXJnZXRDdXJyZW50UGFnZSA8IGxhc3RQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldEN1cnJlbnRQYWdlKys7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSAndG8tc2VsZWN0JyAmJiB0aGlzLnNvdXJjZUN1cnJlbnRQYWdlIDwgbGFzdFBhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlQ3VycmVudFBhZ2UrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdEN1cnJlbnRQYWdlKHRhcmdldCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q3VycmVudFBhZ2UodGFyZ2V0OiBQaWNrbGlzdFRhcmdldCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0YXJnZXQgPT09ICdzZWxlY3RlZCcgPyB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXIgOiB0aGlzLmF2YWlsYWJsZUl0ZW5zRmlsdGVyO1xuICAgICAgICBjb25zdCBwYWdlID0gdGFyZ2V0ID09PSAnc2VsZWN0ZWQnID8gdGhpcy50YXJnZXRDdXJyZW50UGFnZSA6IHRoaXMuc291cmNlQ3VycmVudFBhZ2U7XG5cbiAgICAgICAgY29uc3QgZXZlbnQ6IFBpY2tsaXN0TGF6eUxvYWRFdmVudCA9IHsgdGFyZ2V0LCBwYWdlLCBmaWx0ZXIsIHBhZ2VTaXplOiB0aGlzLnJvd3MoKSB9O1xuXG4gICAgICAgIGlmICh0YXJnZXQgPT09ICdzZWxlY3RlZCcpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0TG9hZFN1YmplY3QubmV4dChldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUxvYWRTdWJqZWN0Lm5leHQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKGNoZWNrZWQ6IGJvb2xlYW4sIGxpc3Q6IEludGVybmFsUGlja2xpc3RJdGVtW10sIGxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQobGlzdElkID09PSB0aGlzLnNlbGVjdGVkSXRlbnNJZCA/IHRoaXMuaXRlbnNUb1NlbGVjdElkIDogdGhpcy5zZWxlY3RlZEl0ZW5zSWQpO1xuICAgICAgICBmaWx0ZXJFbmFibGVkPFQ+KGxpc3QpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBjaGVja2VkO1xuICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuYWRkKGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZGVsZXRlKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZCA9IGNoZWNrZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmFsbEl0ZW5zU2VsZWN0ZWQgPSBjaGVja2VkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVuc2VsZWN0ZWRJdGVuc0J5TGlzdElkKGxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNsZWFyTGlzdCA9IHRoaXMuZ2V0QWxsRWxlbWVudHNCeUxpc3RJZChsaXN0SWQpO1xuICAgICAgICBjbGVhckxpc3QuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgeC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZSh4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFsbEVsZW1lbnRzQnlMaXN0SWQobGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWRcbiAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zXG4gICAgICAgICAgICA6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9wcG9zaXRpdmVJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbGlzdElkID09PSB0aGlzLnNlbGVjdGVkSXRlbnNJZCA/IHRoaXMuaXRlbnNUb1NlbGVjdElkIDogdGhpcy5zZWxlY3RlZEl0ZW5zSWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0Q2hhbmdlLmVtaXQocGFyc2VWYWx1ZUVtaXQodGhpcy5pdGVuc1RvU2VsZWN0KSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0NoYW5nZS5lbWl0KHBhcnNlVmFsdWVFbWl0KHRoaXMuc2VsZWN0ZWRJdGVucykpO1xuICAgIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gc3RyaW5ncyBieSBub3JtYWxpemluZyB0aGVtIHRvIGEgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgYWNjZW50LWZyZWUgZm9ybSxcbiAqIGFuZCBjaGVja3MgaWYgdGhlIG1haW4gc3RyaW5nIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcuXG4gKlxuICogQHBhcmFtIG1haW5TdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkLlxuICogQHBhcmFtIHN1YnN0cmluZyAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvciB3aXRoaW4gdGhlIG1haW4gc3RyaW5nLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbm9ybWFsaXplZCBtYWluIHN0cmluZyBjb250YWlucyB0aGUgbm9ybWFsaXplZCBzdWJzdHJpbmcuXG4gKi9cblxuY29uc3QgY29tcGFyZVN0cmluZ3MgPSAobWFpblN0cmluZzogc3RyaW5nLCBzdWJzdHJpbmc6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBub3JtYWxpemVTdHJpbmcobWFpblN0cmluZykuaW5jbHVkZXMobm9ybWFsaXplU3RyaW5nKHN1YnN0cmluZykpO1xufTtcblxuY29uc3QgZmlsdGVyRW5hYmxlZCA9IDxUPihsaXN0OiBQaWNrTGlzdEl0ZW08VD5bXSB8IFNldDxJbnRlcm5hbFBpY2tsaXN0SXRlbT4pOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdID0+IHtcbiAgICBjb25zdCBfbGlzdCA9IGxpc3QgaW5zdGFuY2VvZiBTZXQgPyBBcnJheS5mcm9tKGxpc3QpIDogbGlzdDtcbiAgICByZXR1cm4gX2xpc3QuZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCk7XG59O1xuXG5jb25zdCBtYXBEYXRhID0gPFQ+KGxpc3Q6IFBpY2tMaXN0SXRlbTxUPltdKSA9PiB7XG4gICAgcmV0dXJuIGxpc3QubWFwKCh4KSA9PiB4LmRhdGEpO1xufTtcblxuY29uc3QgcGFyc2VWYWx1ZUVtaXQgPSBwaXBlKGZpbHRlckVuYWJsZWQsIG1hcERhdGEpO1xuXG5leHBvcnQgY29uc3QgcGFyc2VJdGVuc1BpY2tMaXN0ID0gPFQ+KFxuICAgIGFycmF5OiBUW10sXG4gICAgZGlzYWJsZWRGbj86IChpdGVtOiBUKSA9PiBib29sZWFuLFxuICAgIGlkS2V5Pzoga2V5b2YgVCxcbik6IFBpY2tMaXN0SXRlbTxUPltdID0+IHtcbiAgICByZXR1cm4gYXJyYXkubWFwKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB4LFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkRm4gPyBkaXNhYmxlZEZuKHgpIDogZmFsc2UsXG4gICAgICAgICAgICBpZDogaWRLZXkgPyBTdHJpbmcoeFtpZEtleV0pIDogY3J5cHRvLnJhbmRvbVVVSUQoKSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn07XG5cbiIsIjxuZy10ZW1wbGF0ZVxuICAgICNwcmV2aWV3UmVuZGVyXG4gICAgbGV0LWl0ZW5zPVwiaXRlbnNcIlxuICAgIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCJcbj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInBpY2tsaXN0LWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0uZGF0YSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjcGlja2xpc3RJdGVuc1JlbmRlclxuICAgIGxldC1pZD1cImlkXCJcbiAgICBsZXQtaXRlbnM9XCJpdGVuc1wiXG4gICAgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIlxuICAgIGxldC1saXN0Q29ubmVjdGVkVG89XCJsaXN0Q29ubmVjdGVkVG9cIlxuICAgIGxldC1pc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwaWNrbGlzdC1pdGVtc1wiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJpdGVuc1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImxpc3RDb25uZWN0ZWRUb1wiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICAgICAgKnNMb2FkaW5nU3RhdGU9XCJ7IGxvYWRpbmc6IGlzTG9hZGluZywgaW5kaWNhdG9yOiBsb2dvSW5kaWNhdG9yIH1cIlxuICAgICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsKCRldmVudCwgaWQpXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0ZWQoaXRlbSwgaWQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnUmVsZWFzZWQpPVwib25EcmFnUmVsZWFzZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpY2tsaXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucGlja2xpc3QtaXRlbS1pbnZpc2libGVdPVwiaXRlbS5pbnZpc2libGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1pdGVtLWFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBpdGVtOiBpdGVtLmRhdGEsIHNlbGVjdGVkOiBpdGVtLnNlbGVjdGVkLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrRHJhZ1ByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldmlld1JlbmRlcjsgY29udGV4dDogeyBpdGVuczogc2VsZWN0ZWRJdGVuc01hcCwgdGVtcGxhdGU6IHRlbXBsYXRlIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICAgI2NoZWNrYm94VGl0bGVSZW5kZXJcbiAgICBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgbGV0LWNoZWNrZWQ9XCJjaGVja2VkXCJcbiAgICBsZXQtY2hhbmdlRm49XCJjaGFuZ2VGblwiXG4gICAgbGV0LWlkPVwiaWRcIlxuPlxuICAgIEBpZiAoc2hvd0NoZWNrYm94ICYmICFsYXp5TG9hZCgpKSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jaGVja2JveFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VGbigkYW55KCRldmVudC50YXJnZXQpLmNoZWNrZWQpXCJcbiAgICAgICAgLz5cbiAgICB9IEBlbHNlIGlmIChzaG93Q2hlY2tib3ggJiYgbGF6eUxvYWQoKSAmJiBpZCA9PT0gaXRlbnNUb1NlbGVjdElkKSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jaGVja2JveFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmFsbEl0ZW5zU2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGVja0FsbEF2YWlsYWJsZUl0ZW5zQ2hhbmdlKCRhbnkoJGV2ZW50LnRhcmdldCkuY2hlY2tlZClcIlxuICAgICAgICAvPlxuICAgIH0gQGVsc2UgaWYgKHNob3dDaGVja2JveCAmJiBsYXp5TG9hZCgpICYmIGlkID09PSBzZWxlY3RlZEl0ZW5zSWQpIHtcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuYWxsSXRlbnNTZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZSgkYW55KCRldmVudC50YXJnZXQpLmNoZWNrZWQpXCJcbiAgICAgICAgLz5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2IGNsYXNzPVwicGlja2xpc3QtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cInBpY2tsaXN0LWl0ZW0tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1ib3hcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC10aXRsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICBAaWYgKCFmaWx0ZXJCeSAmJiAhbGF6eUxvYWQoKSkge1xuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VGl0bGVSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGbjogY2hlY2tBbGxBdmFpbGFibGVJdGVuc0NoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbnNUb1NlbGVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWNrbGlzdC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBhdmFpbGFibGVJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYXZhaWxhYmxlLWl0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSB8fCBsYXp5TG9hZCgpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tsaXN0LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VGl0bGVSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlSXRlbnNUb1NlbGVjdENoZWNrYm94LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhdmFpbGFibGVJdGVuc0ZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJJdGVuc1RvU2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUl0ZW5zUGxhY2Vob2xkZXIgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5waWNrbGlzdC1wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBwaWNrbGlzdEl0ZW5zUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbnNUb1NlbGVjdElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbnM6IGl0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBpdGVtVG9TZWxlY3RUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RDb25uZWN0ZWRUbzogc2VsZWN0ZWRJdGVuc0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNMb2FkaW5nOiBfbG9hZGluZ1NvdXJjZSgpLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8cy1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYWRkU2VsZWN0ZWRJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYWRkJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICByaWdodEljb25DbGFzcz1cImZhIGZhLWZ3IGZhLWFycm93LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhc1NlbGVjdGVkSXRlbnNcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImFkZCgpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRBbGxJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYWRkX2FsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwibGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkKHRydWUpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkgJiYgIWxhenlMb2FkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVTZWxlY3RlZEl0ZW5zQ2hlY2tib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogc2VsZWN0ZWRJdGVuc0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWNrbGlzdC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZEl0ZW5zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5zZWxlY3RlZC1pdGVtcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZmlsdGVyQnkgfHwgbGF6eUxvYWQoKSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1maWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93Q2hlY2tib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiBjaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBzZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEl0ZW5zRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlclNlbGVjdGVkSXRlbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVuc1BsYWNlaG9sZGVyIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGlja2xpc3QtcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHBpY2tsaXN0SXRlbnNSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBzZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVuczogc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IGl0ZW1TZWxlY3RlZFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbm5lY3RlZFRvOiBpdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0xvYWRpbmc6IF9sb2FkaW5nVGFyZ2V0KCksXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJyZW1vdmVTZWxlY3RlZEl0ZW1zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIGljb25DbGFzcz1cImZhIGZhLWZ3IGZhLWFycm93LWxlZnRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRJdGVuc1wiXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlKClcIlxuICAgICAgICAgICAgICAgIFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUFsbEl0ZW1zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfYWxsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmUodHJ1ZSlcIlxuICAgICAgICAgICAgICAgIFthdXhpbGlhcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuIl19
@@ -285,7 +285,7 @@ export class ProfilePicturePickerComponent {
285
285
  useExisting: forwardRef(() => ProfilePicturePickerComponent),
286
286
  multi: true,
287
287
  },
288
- ], viewQueries: [{ propertyName: "uploadPicture", first: true, predicate: ["uploadPicture"], descendants: true }, { propertyName: "info", first: true, predicate: ["info"], descendants: true }, { propertyName: "thumbnail", first: true, predicate: ["thumbnail"], descendants: true, read: ElementRef }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef }], ngImport: i0, template: "<p-confirmDialog></p-confirmDialog>\n\n<input\n #fileInput\n [accept]=\"accept\"\n class=\"file-input\"\n type=\"file\"\n (change)=\"photoSelected($event)\"\n/>\n<div\n #uploadPicture\n class=\"upload-picture\"\n>\n <s-thumbnail\n #thumbnail\n iconClass=\"far fa-user\"\n [imageSource]=\"imageBase64\"\n [hasAction]=\"!image\"\n (click)=\"selectPhoto()\"\n >\n </s-thumbnail>\n <div\n #info\n class=\"info\"\n >\n @if (image) {\n <div class=\"buttons\">\n <s-button\n [label]=\"changeButtonLabel || 'platform.angular_components.change_photo' | translate\"\n priority=\"primary\"\n (clicked)=\"selectPhoto()\"\n >\n </s-button>\n <s-button\n [label]=\"removeButtonLabel || 'platform.angular_components.remove' | translate\"\n priority=\"secondary\"\n (clicked)=\"removePhoto()\"\n >\n </s-button>\n </div>\n } @else {\n <p class=\"title\">\n {{ simpleTitle || 'platform.angular_components.drag_your_photo_or' | translate }}\n <span\n class=\"action-title\"\n (click)=\"selectPhoto()\"\n >\n {{ actionTitle || 'platform.angular_components.select_a_file' | translate }}\n </span>\n </p>\n }\n <p class=\"subtitle\">{{ subtitle }}</p>\n </div>\n</div>\n", styles: [".file-input{display:none}.upload-picture{display:flex;flex-wrap:wrap}.upload-picture .info{display:flex;flex-direction:column;padding:12px 20px;align-items:flex-start}.upload-picture .info .title{font-family:Open Sans,sans-serif;font-weight:700;font-size:.875rem;line-height:150%;color:#333}.upload-picture .info .title .action-title{cursor:pointer;color:#428bca}.upload-picture .info .buttons{display:flex;gap:8px}.upload-picture .info .buttons s-button{margin:0}.upload-picture .info .subtitle{padding:6px 0;font-family:Open Sans,sans-serif;font-weight:400;font-size:.75rem;line-height:150%;color:#697882;text-align:center}.upload-picture--small .info{align-items:center}.upload-picture--small .info .title,.upload-picture--small .info .subtitle{text-align:center}.upload-picture--small .info .buttons{justify-content:center;flex-wrap:wrap}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel"], outputs: ["clicked"] }, { kind: "component", type: i2.ThumbnailComponent, selector: "s-thumbnail", inputs: ["id", "size", "imageSource", "imageFallback", "imageAlt", "iconClass", "hasAction", "actionIconClass", "isTile", "isBrand"] }, { kind: "component", type: i3.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
288
+ ], viewQueries: [{ propertyName: "uploadPicture", first: true, predicate: ["uploadPicture"], descendants: true }, { propertyName: "info", first: true, predicate: ["info"], descendants: true }, { propertyName: "thumbnail", first: true, predicate: ["thumbnail"], descendants: true, read: ElementRef }, { propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef }], ngImport: i0, template: "<p-confirmDialog></p-confirmDialog>\n\n<input\n #fileInput\n [accept]=\"accept\"\n class=\"file-input\"\n type=\"file\"\n (change)=\"photoSelected($event)\"\n/>\n<div\n #uploadPicture\n class=\"upload-picture\"\n>\n <s-thumbnail\n #thumbnail\n iconClass=\"far fa-user\"\n [imageSource]=\"imageBase64\"\n [hasAction]=\"!image\"\n (click)=\"selectPhoto()\"\n >\n </s-thumbnail>\n <div\n #info\n class=\"info\"\n >\n @if (image) {\n <div class=\"buttons\">\n <s-button\n [label]=\"changeButtonLabel || 'platform.angular_components.change_photo' | translate\"\n priority=\"primary\"\n (clicked)=\"selectPhoto()\"\n >\n </s-button>\n <s-button\n [label]=\"removeButtonLabel || 'platform.angular_components.remove' | translate\"\n priority=\"secondary\"\n (clicked)=\"removePhoto()\"\n >\n </s-button>\n </div>\n } @else {\n <p class=\"title\">\n {{ simpleTitle || 'platform.angular_components.drag_your_photo_or' | translate }}\n <span\n class=\"action-title\"\n (click)=\"selectPhoto()\"\n >\n {{ actionTitle || 'platform.angular_components.select_a_file' | translate }}\n </span>\n </p>\n }\n <p class=\"subtitle\">{{ subtitle }}</p>\n </div>\n</div>\n", styles: [".file-input{display:none}.upload-picture{display:flex;flex-wrap:wrap}.upload-picture .info{display:flex;flex-direction:column;padding:12px 20px;align-items:flex-start}.upload-picture .info .title{font-family:Open Sans,sans-serif;font-weight:700;font-size:.875rem;line-height:150%;color:#333}.upload-picture .info .title .action-title{cursor:pointer;color:#428bca}.upload-picture .info .buttons{display:flex;gap:8px}.upload-picture .info .buttons s-button{margin:0}.upload-picture .info .subtitle{padding:6px 0;font-family:Open Sans,sans-serif;font-weight:400;font-size:.75rem;line-height:150%;color:#697882;text-align:center}.upload-picture--small .info{align-items:center}.upload-picture--small .info .title,.upload-picture--small .info .subtitle{text-align:center}.upload-picture--small .info .buttons{justify-content:center;flex-wrap:wrap}\n"], dependencies: [{ kind: "component", type: i1.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel", "ariaLabel"], outputs: ["clicked"] }, { kind: "component", type: i2.ThumbnailComponent, selector: "s-thumbnail", inputs: ["id", "size", "imageSource", "imageFallback", "imageAlt", "iconClass", "hasAction", "actionIconClass", "isTile", "isBrand"] }, { kind: "component", type: i3.ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
289
289
  }
290
290
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfilePicturePickerComponent, decorators: [{
291
291
  type: Component,