@eo-sdk/client 11.8.1 → 11.9.0-rc.2

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 (50) hide show
  1. package/app/eo-client/about-state/about-state.component.d.ts.map +1 -1
  2. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts +11 -1
  3. package/app/eo-client/inbox-state/inbox-state/inbox-state.component.d.ts.map +1 -1
  4. package/app/eo-client/settings/settings.component.d.ts +4 -2
  5. package/app/eo-client/settings/settings.component.d.ts.map +1 -1
  6. package/app/eo-framework/actions/action-menu/action-menu.component.d.ts +12 -3
  7. package/app/eo-framework/actions/action-menu/action-menu.component.d.ts.map +1 -1
  8. package/app/eo-framework/actions/action-service/action.service.d.ts +39 -3
  9. package/app/eo-framework/actions/action-service/action.service.d.ts.map +1 -1
  10. package/app/eo-framework/actions/action.module.d.ts +16 -13
  11. package/app/eo-framework/actions/action.module.d.ts.map +1 -1
  12. package/app/eo-framework/actions/actions/return-task-action/return-task/return-task.component.d.ts +39 -0
  13. package/app/eo-framework/actions/actions/return-task-action/return-task/return-task.component.d.ts.map +1 -0
  14. package/app/eo-framework/actions/actions/return-task-action/return-task-action.d.ts +32 -0
  15. package/app/eo-framework/actions/actions/return-task-action/return-task-action.d.ts.map +1 -0
  16. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts +1 -0
  17. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
  18. package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts +15 -1
  19. package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts.map +1 -1
  20. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts +1 -2
  21. package/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.d.ts.map +1 -1
  22. package/app/eo-framework/object-form/object-form-helper.service.d.ts.map +1 -1
  23. package/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.d.ts.map +1 -1
  24. package/app/eo-framework-core/api/grid.service.d.ts.map +1 -1
  25. package/assets/_default/i18n/de.json +24 -9
  26. package/assets/_default/i18n/en.json +24 -9
  27. package/assets/_default/svg/ic_rollback.svg +1 -0
  28. package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
  29. package/esm2022/app/eo-client/dashboard/widgets/charts-widget/charts-widget.component.mjs +6 -6
  30. package/esm2022/app/eo-client/inbox-state/inbox-state/inbox-state.component.mjs +70 -23
  31. package/esm2022/app/eo-client/process-state/process-state.component.mjs +1 -1
  32. package/esm2022/app/eo-client/settings/settings.component.mjs +9 -6
  33. package/esm2022/app/eo-framework/actions/action-menu/action-menu.component.mjs +51 -32
  34. package/esm2022/app/eo-framework/actions/action-service/action.service.mjs +54 -3
  35. package/esm2022/app/eo-framework/actions/action.module.mjs +10 -4
  36. package/esm2022/app/eo-framework/actions/actions/return-task-action/return-task/return-task.component.mjs +75 -0
  37. package/esm2022/app/eo-framework/actions/actions/return-task-action/return-task-action.mjs +43 -0
  38. package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +1 -1
  39. package/esm2022/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +150 -11
  40. package/esm2022/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +3 -4
  41. package/esm2022/app/eo-framework/object-form/object-form/form-element/form-element.component.mjs +3 -3
  42. package/esm2022/app/eo-framework/object-form/object-form-edit/object-form-edit.component.mjs +2 -2
  43. package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +14 -2
  44. package/esm2022/app/eo-framework/shortcuts/global-shortcuts/global-shortcuts-section/global-shortcuts-section.component.mjs +2 -2
  45. package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary-entry/indexdata-summary-entry.component.mjs +2 -2
  46. package/esm2022/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +20 -10
  47. package/esm2022/app/eo-framework-core/api/grid.service.mjs +4 -1
  48. package/fesm2022/eo-sdk-client.mjs +591 -203
  49. package/fesm2022/eo-sdk-client.mjs.map +1 -1
  50. package/package.json +2 -2
@@ -24,7 +24,7 @@ let ActionMenuComponent = class ActionMenuComponent {
24
24
  this.elemRef = elemRef;
25
25
  this.componentFactoryResolver = componentFactoryResolver;
26
26
  this.actionLists = {
27
- common: [], further: []
27
+ common: [], further: [], componentSpecific: []
28
28
  };
29
29
  this.subActionsListHeader = '';
30
30
  this.showComponent = false;
@@ -48,12 +48,58 @@ let ActionMenuComponent = class ActionMenuComponent {
48
48
  .pipe(untilDestroyed(this), filter(evt => evt instanceof NavigationStart))
49
49
  .subscribe(() => this.hide());
50
50
  }
51
+ onCancel() {
52
+ this.clear();
53
+ this.catchFocus();
54
+ // broadcasts a cancel event using the actionService.
55
+ this.actionService.broadcastCancel();
56
+ }
57
+ onFinish() {
58
+ this.hideActionMenu();
59
+ // broadcasts a finish event using the actionService.
60
+ this.actionService.broadcastFinish();
61
+ }
62
+ /**
63
+ * Handles keyboard events for navigating through action lists.
64
+ *
65
+ * This method updates the active action index based on the key pressed.
66
+ * It supports navigation using the ArrowUp, ArrowDown, Tab, and Enter keys.
67
+ *
68
+ * @param {KeyboardEvent} event - The keyboard event triggered by the user.
69
+ */
70
+ isArrowUpOrDownPressed(event) {
71
+ const key = event.key;
72
+ let length = this.actionLists.common.length + this.actionLists.further.length - 1;
73
+ if (key === 'ArrowUp' || (event.shiftKey && key === 'Tab')) {
74
+ this.activeActionIndex = (this.activeActionIndex === 0) ? length : this.activeActionIndex - 1;
75
+ }
76
+ else if (key === 'ArrowDown' || key === 'Tab') {
77
+ this.activeActionIndex = (this.activeActionIndex === length) ? 0 : this.activeActionIndex + 1;
78
+ }
79
+ else if (key === 'Enter') {
80
+ let clickedListEntry;
81
+ if (this.activeActionIndex < this.actionLists.common.length) {
82
+ clickedListEntry = this.actionLists.common[this.activeActionIndex];
83
+ }
84
+ else if (this.target === 'COMPONENT_SPECIFIC_ACTIONS') {
85
+ clickedListEntry = this.actionLists.componentSpecific[this.activeActionIndex - this.actionLists.common.length];
86
+ }
87
+ else {
88
+ clickedListEntry = this.actionLists.further[this.activeActionIndex - this.actionLists.common.length];
89
+ }
90
+ this.onClick(clickedListEntry);
91
+ }
92
+ }
51
93
  getActions() {
52
94
  this.actionService
53
95
  .getActionsList(this.selection, this.viewContainerRef)
54
96
  .subscribe(actionsList => {
55
97
  this.actionLists.common = actionsList.filter(actionListEntry => actionListEntry.action.group === 'common');
56
98
  this.actionLists.further = actionsList.filter(actionListEntry => actionListEntry.action.group === 'further');
99
+ // Filter and assign component-specific actions if they exist
100
+ if (this.actionService.hasComponentSpecificActions) {
101
+ this.actionLists.componentSpecific = actionsList.filter(actionListEntry => actionListEntry.action.group === 'componentSpecific');
102
+ }
57
103
  });
58
104
  }
59
105
  getMoreActions() {
@@ -78,26 +124,6 @@ let ActionMenuComponent = class ActionMenuComponent {
78
124
  this.elemRef.nativeElement.querySelector('[tabindex="0"]').focus();
79
125
  });
80
126
  }
81
- isArrowUpOrDownPressed(event) {
82
- const key = event.key;
83
- let length = this.actionLists.common.length + this.actionLists.further.length - 1;
84
- if (key === 'ArrowUp' || (event.shiftKey && key === 'Tab')) {
85
- this.activeActionIndex = (this.activeActionIndex === 0) ? length : this.activeActionIndex - 1;
86
- }
87
- else if (key === 'ArrowDown' || key === 'Tab') {
88
- this.activeActionIndex = (this.activeActionIndex === length) ? 0 : this.activeActionIndex + 1;
89
- }
90
- else if (key === 'Enter') {
91
- let clickedListEntry;
92
- if (this.activeActionIndex < this.actionLists.common.length) {
93
- clickedListEntry = this.actionLists.common[this.activeActionIndex];
94
- }
95
- else {
96
- clickedListEntry = this.actionLists.further[this.activeActionIndex - this.actionLists.common.length];
97
- }
98
- this.onClick(clickedListEntry);
99
- }
100
- }
101
127
  showActionMenu() {
102
128
  this.activeActionIndex = 0;
103
129
  this.getActions();
@@ -110,7 +136,7 @@ let ActionMenuComponent = class ActionMenuComponent {
110
136
  hideActionMenu() {
111
137
  this.clear();
112
138
  this.showMenu = false;
113
- this.actionLists = { common: [], further: [] };
139
+ this.actionLists = { common: [], further: [], componentSpecific: [] };
114
140
  }
115
141
  onClick(actionListEntry) {
116
142
  this.activeActionIndex = 0;
@@ -181,15 +207,8 @@ let ActionMenuComponent = class ActionMenuComponent {
181
207
  this.eoActionComponentAnchor.viewContainerRef.clear();
182
208
  }
183
209
  }
184
- onCancel() {
185
- this.clear();
186
- this.catchFocus();
187
- }
188
- onFinish() {
189
- this.hideActionMenu();
190
- }
191
210
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ActionMenuComponent, deps: [{ token: i1.ActionService }, { token: i2.Router }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Component }); }
192
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: ActionMenuComponent, selector: "eo-action-menu", viewQueries: [{ propertyName: "eoActionComponentAnchor", first: true, predicate: ActionComponentAnchorDirective, descendants: true }, { propertyName: "externalDialog", first: true, predicate: ActionComponentAnchorDirective, descendants: true }], ngImport: i0, template: "<div class=\"action-menu dark\" *ngIf=\"showMenu\" (eoOutsideClick)=\"hide()\">\n\n <div class=\"head\">\n <div class=\"left\">\n <div class=\"title\" translate>eo.actions.sticky.title</div>\n <div class=\"sub-title\" *ngIf=\"selection?.length > 1; else multi\" translate>eo.actions.sticky.title.sub.selection</div>\n <ng-template #multi>\n <div class=\"sub-title\" *ngIf=\"selection && selection.length\"><span translate>eo.actions.sticky.title.sub.for</span> '{{selection[0].title}}'</div>\n </ng-template>\n </div>\n <div class=\"right\">\n <span class=\"count\">{{subSelection?.length || selection?.length || ''}}</span>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"hide()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"actions\" [hidden]=\"subActionsList || showComponent\">\n\n <ng-template #action let-entry let-id>\n\n <a *ngIf=\"isLinkAction(entry.action); else default\" class=\"link\"\n [routerLink]=\"entry.action.getLink(entry.availableSelection)\"\n [queryParams]=\"entry.action.getParams(entry.availableSelection, true)\">\n <ng-container *ngTemplateOutlet=\"default\"></ng-container>\n </a>\n\n <ng-template #default>\n <div>\n <eo-icon [iconSrc]=\"entry.action.iconSrc\" [iconId]=\"entry.action.iconId\"\n [badge]=\"entry.availableSelection?.length != selection?.length ? entry.availableSelection?.length : null\"></eo-icon>\n <div class=\"label\">{{entry.action.label}}</div>\n <!-- <div class=\"available-count\" *ngIf=\"entry.availableSelection?.length != selection?.length\">{{entry.availableSelection?.length}}</div> -->\n <eo-icon class=\"info-icon\" [iconSrc]=\"'assets/_default/svg/ic_info.svg'\" (click)=\"showActionDescription(id, $event)\"></eo-icon>\n </div>\n <div class=\"description\" [hidden]=\"id !== actionDescription\">{{entry.action.description}}</div>\n </ng-template>\n </ng-template>\n\n <div class=\"group\" *ngIf=\"actionLists?.common.length > 0\">\n <div class=\"group-title\" translate>eo.actions.group.common</div>\n <div class=\"action\" id=\"{{actionListEntry.id}}\" (keydown)=\"isArrowUpOrDownPressed($event)\" [attr.tabindex]=\"0\" *ngFor=\"let actionListEntry of actionLists.common; let i = index\"\n (click)=\"onClick(actionListEntry)\" [ngClass]=\"{active: activeActionIndex === i}\">\n\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: +i}\"></ng-container>\n\n </div>\n </div>\n\n <div class=\"group\" *ngIf=\"!loading; else loader\">\n <div *ngIf=\"actionLists?.further.length > 0\">\n <div class=\"group-title\" translate>eo.actions.group.further_actions</div>\n <div class=\"action\" id=\"{{actionListEntry.id}}\" (keydown)=\"isArrowUpOrDownPressed($event)\" *ngFor=\"let actionListEntry of actionLists.further; index as i\"\n eoPreventDoubleClick [ngClass]=\"{active: activeActionIndex === i + actionLists?.common.length }\"\n (debounceClick)=\"onClick(actionListEntry)\">\n\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: 'f'+i}\"></ng-container>\n\n </div>\n </div>\n </div>\n\n <div class=\"group\" *ngIf=\"!loading && !actionLists?.further.length && !actionLists?.common.length\" [style.textAlign]=\"'center'\">\n {{ 'eo.action.not.available' | translate}}\n </div>\n\n <ng-template #loader>\n <div class=\"loading-container\">\n <eo-loading-spinner [size]=\"'medium'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- sub actions -->\n <div class=\"group sub\" *ngIf=\"subActionsList && !showComponent\">\n <div class=\"sub-actions\">\n <div class=\"group-title\">{{subActionsListHeader}}</div>\n <div class=\"action sub\" *ngFor=\"let actionListEntry of subActionsList; index as i\" (click)=\"onClick(actionListEntry)\">\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: 's'+i}\"></ng-container>\n </div>\n </div>\n <div class=\"group-buttons\">\n <button (click)=\"onCancel()\" translate>eo.cta.button.cancel</button>\n </div>\n </div>\n\n <div>\n <ng-template eoActionComponentAnchor></ng-template>\n </div>\n\n <div>\n <ng-template eoExtActionComponentAnchor></ng-template>\n </div>\n\n</div>\n", styles: [".action-menu{position:absolute;top:0;right:0;bottom:0;width:25vw;min-width:300px;z-index:100;background-color:rgba(var(--color-primary-rgb),.95);animation:eoFadeInRight var(--app-default-transition-duration);box-shadow:0 0 10px rgba(var(--color-black-rgb),.3);color:var(--color-white);height:100vh;overflow:hidden}.action-menu .head{display:flex;flex:0 0 auto;flex-flow:row nowrap;order:0;padding:var(--app-pane-padding)}.action-menu .head .left{flex:1 1 auto;order:0}.action-menu .head .left .title{font-size:var(--font-headline);font-weight:var(--font-weight-light)}.action-menu .head .left .sub-title{font-size:var(--font-body);font-weight:var(--font-weight-light)}.action-menu .head .right{display:flex;flex:0 0 auto;flex-flow:row nowrap;order:1}.action-menu .head .right .count{color:rgba(var(--color-white-rgb),.3);font-size:5em;font-weight:var(--font-weight-light);line-height:1em;padding-right:var(--app-pane-padding)}.action-menu .head .right .close{margin:0;z-index:10}.action-menu .actions{height:100%;overflow:scroll}.action-menu .actions .group:last-child{margin-bottom:100px}.action-menu .group{padding:var(--app-pane-padding);min-width:200px;display:inline-block;width:90%}.action-menu .group .group-title{background:rgba(var(--color-white-rgb),.1);margin-bottom:calc(var(--app-pane-padding) / 4);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}.action-menu .group:not(.sub):hover .group-title{background:rgba(var(--color-white-rgb),.3)}.action-menu .action{border-bottom:1px solid rgba(var(--color-white-rgb),.2)}.action-menu .action a.link{text-decoration:none;color:inherit;display:block;opacity:1}.action-menu .action.active{background:rgba(var(--color-white-rgb),.1)}.action-menu .action>a.link>div:first-child,.action-menu .action>div:first-child{transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;cursor:pointer;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding) calc(var(--app-pane-padding) / 2) 0;display:flex;align-items:center}.action-menu .action.sub>div:first-child{padding-left:calc(var(--app-pane-padding) / 2)}.action-menu .action .label{flex:1 1 auto}.action-menu .action .available-count{margin:0 calc(var(--app-pane-padding) / 2);color:rgba(var(--color-white-rgb),.3)}.action-menu .action eo-icon{margin:0 calc(var(--app-pane-padding) / 2)}.action-menu .action eo-icon.info-icon{margin:0;padding:3px;box-sizing:border-box;border-radius:50%;color:rgba(var(--color-white-rgb),.3)}.action-menu .action eo-icon.info-icon:hover{background-color:var(--color-primary)}.action-menu .action .description{border-radius:2px;-webkit-border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;color:rgba(var(--color-white-rgb),.54);font-style:italic;padding:calc(var(--app-pane-padding) / 4) var(--app-pane-padding) calc(var(--app-pane-padding) / 2) var(--app-pane-padding)}.action-menu .action:last-child{border:0}.action-menu .action:hover{background:rgba(var(--color-white-rgb),.1)}.action-menu .group-buttons{display:flex;justify-content:flex-end;padding-top:var(--app-pane-padding)}.action-menu .group-buttons button{background-color:transparent}.action-menu .group-buttons button:hover{background-color:rgba(var(--color-white-rgb),.1)}.action-menu .loading-container{display:flex;justify-content:center;align-items:center;padding:16px;margin:50% auto}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i6.OutsideClickDirective, selector: "[eoOutsideClick]", outputs: ["eoOutsideClick"] }, { kind: "directive", type: i7.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "component", type: i8.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i9.ActionComponentAnchorDirective, selector: "[eoActionComponentAnchor]" }, { kind: "directive", type: i10.PreventDoubleClickDirective, selector: "[eoPreventDoubleClick]", inputs: ["debounceTime"], outputs: ["debounceClick"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
211
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: ActionMenuComponent, selector: "eo-action-menu", viewQueries: [{ propertyName: "eoActionComponentAnchor", first: true, predicate: ActionComponentAnchorDirective, descendants: true }, { propertyName: "externalDialog", first: true, predicate: ActionComponentAnchorDirective, descendants: true }], ngImport: i0, template: "<div class=\"action-menu dark\" *ngIf=\"showMenu\" (eoOutsideClick)=\"hide()\">\n\n <div class=\"head\">\n <div class=\"left\">\n <div class=\"title\" translate>eo.actions.sticky.title</div>\n <div class=\"sub-title\" *ngIf=\"selection?.length > 1; else multi\" translate>eo.actions.sticky.title.sub.selection\n </div>\n <ng-template #multi>\n <div class=\"sub-title\" *ngIf=\"selection && selection.length\"><span\n translate>eo.actions.sticky.title.sub.for</span> '{{selection[0].title}}'</div>\n </ng-template>\n </div>\n <div class=\"right\">\n <span class=\"count\">{{subSelection?.length || selection?.length || ''}}</span>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"hide()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"actions\" [hidden]=\"subActionsList || showComponent\">\n\n <ng-template #action let-entry let-id>\n\n <a *ngIf=\"isLinkAction(entry.action); else default\" class=\"link\"\n [routerLink]=\"entry.action.getLink(entry.availableSelection)\"\n [queryParams]=\"entry.action.getParams(entry.availableSelection, true)\">\n <ng-container *ngTemplateOutlet=\"default\"></ng-container>\n </a>\n\n <ng-template #default>\n <div>\n <eo-icon [iconSrc]=\"entry.action.iconSrc\" [iconId]=\"entry.action.iconId\"\n [badge]=\"entry.availableSelection?.length != selection?.length ? entry.availableSelection?.length : null\"></eo-icon>\n <div class=\"label\">{{entry.action.label}}</div>\n <!-- <div class=\"available-count\" *ngIf=\"entry.availableSelection?.length != selection?.length\">{{entry.availableSelection?.length}}</div> -->\n <eo-icon class=\"info-icon\" [iconSrc]=\"'assets/_default/svg/ic_info.svg'\"\n (click)=\"showActionDescription(id, $event)\"></eo-icon>\n </div>\n <div class=\"description\" [hidden]=\"id !== actionDescription\">{{entry.action.description}}</div>\n <div class=\"description\" [hidden]=\"!entry.action.warning\">{{entry.action.warning}}</div>\n </ng-template>\n </ng-template>\n\n <div class=\"group\" *ngIf=\"actionLists?.common.length > 0\">\n <div class=\"group-title\" translate>eo.actions.group.common</div>\n <div class=\"action\" id=\"{{actionListEntry.id}}\" (keydown)=\"isArrowUpOrDownPressed($event)\" [attr.tabindex]=\"0\"\n *ngFor=\"let actionListEntry of actionLists.common; let i = index\" (click)=\"onClick(actionListEntry)\"\n [ngClass]=\"{active: activeActionIndex === i}\">\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: +i}\"></ng-container>\n </div>\n </div>\n\n <!-- Component Specific Actions Section -->\n @if (actionLists?.componentSpecific.length > 0) {\n <div class=\"group\">\n <div class=\"group-title\" translate>eo.actions.group.inbox</div>\n <div class=\"action\" id=\"{{actionListEntry.id}}\" (keydown)=\"isArrowUpOrDownPressed($event)\" [attr.tabindex]=\"0\"\n *ngFor=\"let actionListEntry of actionLists.componentSpecific; let i = index\" (click)=\"onClick(actionListEntry)\"\n [ngClass]=\"{active: activeActionIndex === i}\">\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: +i}\"></ng-container>\n </div>\n </div>\n }\n\n <div class=\"group\" *ngIf=\"!loading; else loader\">\n <div *ngIf=\"actionLists?.further.length > 0\">\n <div class=\"group-title\" translate>eo.actions.group.further_actions</div>\n <div class=\"action\" id=\"{{actionListEntry.id}}\" (keydown)=\"isArrowUpOrDownPressed($event)\"\n *ngFor=\"let actionListEntry of actionLists.further; index as i\" eoPreventDoubleClick\n [ngClass]=\"{active: activeActionIndex === i + actionLists?.common.length }\"\n (debounceClick)=\"onClick(actionListEntry)\">\n\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: 'f'+i}\"></ng-container>\n\n </div>\n </div>\n </div>\n\n <div class=\"group\"\n *ngIf=\"!loading && !actionLists?.further.length && !actionLists?.common.length && !actionLists?.componentSpecific.length\"\n [style.textAlign]=\"'center'\">\n {{ 'eo.action.not.available' | translate}}\n </div>\n\n <ng-template #loader>\n <div class=\"loading-container\">\n <eo-loading-spinner [size]=\"'medium'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- sub actions -->\n <div class=\"group sub\" *ngIf=\"subActionsList && !showComponent\">\n <div class=\"sub-actions\">\n <div class=\"group-title\">{{subActionsListHeader}}</div>\n <div class=\"action sub\" *ngFor=\"let actionListEntry of subActionsList; index as i\"\n (click)=\"onClick(actionListEntry)\">\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: 's'+i}\"></ng-container>\n </div>\n </div>\n <div class=\"group-buttons\">\n <button (click)=\"onCancel()\" translate>eo.cta.button.cancel</button>\n </div>\n </div>\n\n <div>\n <ng-template eoActionComponentAnchor></ng-template>\n </div>\n\n <div>\n <ng-template eoExtActionComponentAnchor></ng-template>\n </div>\n\n</div>\n", styles: [".action-menu{position:absolute;top:0;right:0;bottom:0;width:25vw;min-width:300px;z-index:100;background-color:rgba(var(--color-primary-rgb),.95);animation:eoFadeInRight var(--app-default-transition-duration);box-shadow:0 0 10px rgba(var(--color-black-rgb),.3);color:var(--color-white);height:100vh;overflow:hidden}.action-menu .head{display:flex;flex:0 0 auto;flex-flow:row nowrap;order:0;padding:var(--app-pane-padding)}.action-menu .head .left{flex:1 1 auto;order:0}.action-menu .head .left .title{font-size:var(--font-headline);font-weight:var(--font-weight-light)}.action-menu .head .left .sub-title{font-size:var(--font-body);font-weight:var(--font-weight-light)}.action-menu .head .right{display:flex;flex:0 0 auto;flex-flow:row nowrap;order:1}.action-menu .head .right .count{color:rgba(var(--color-white-rgb),.3);font-size:5em;font-weight:var(--font-weight-light);line-height:1em;padding-right:var(--app-pane-padding)}.action-menu .head .right .close{margin:0;z-index:10}.action-menu .actions{height:100%;overflow:scroll}.action-menu .actions .group:last-child{margin-bottom:100px}.action-menu .group{padding:var(--app-pane-padding);min-width:200px;display:inline-block;width:90%}.action-menu .group .group-title{background:rgba(var(--color-white-rgb),.1);margin-bottom:calc(var(--app-pane-padding) / 4);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}.action-menu .group:not(.sub):hover .group-title{background:rgba(var(--color-white-rgb),.3)}.action-menu .action{border-bottom:1px solid rgba(var(--color-white-rgb),.2)}.action-menu .action a.link{text-decoration:none;color:inherit;display:block;opacity:1}.action-menu .action.active{background:rgba(var(--color-white-rgb),.1)}.action-menu .action>a.link>div:first-child,.action-menu .action>div:first-child{transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;cursor:pointer;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding) calc(var(--app-pane-padding) / 2) 0;display:flex;align-items:center}.action-menu .action.sub>div:first-child{padding-left:calc(var(--app-pane-padding) / 2)}.action-menu .action .label{flex:1 1 auto}.action-menu .action .available-count{margin:0 calc(var(--app-pane-padding) / 2);color:rgba(var(--color-white-rgb),.3)}.action-menu .action eo-icon{margin:0 calc(var(--app-pane-padding) / 2)}.action-menu .action eo-icon.info-icon{margin:0;padding:3px;box-sizing:border-box;border-radius:50%;color:rgba(var(--color-white-rgb),.3)}.action-menu .action eo-icon.info-icon:hover{background-color:var(--color-primary)}.action-menu .action .description{border-radius:2px;-webkit-border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;color:rgba(var(--color-white-rgb),.54);font-style:italic;padding:calc(var(--app-pane-padding) / 4) var(--app-pane-padding) calc(var(--app-pane-padding) / 2) var(--app-pane-padding)}.action-menu .action:last-child{border:0}.action-menu .action:hover{background:rgba(var(--color-white-rgb),.1)}.action-menu .group-buttons{display:flex;justify-content:flex-end;padding-top:var(--app-pane-padding)}.action-menu .group-buttons button{background-color:transparent}.action-menu .group-buttons button:hover{background-color:rgba(var(--color-white-rgb),.1)}.action-menu .loading-container{display:flex;justify-content:center;align-items:center;padding:16px;margin:50% auto}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.EoIconComponent, selector: "eo-icon", inputs: ["objectType", "iconId", "iconSrc", "badge", "iconTitle"] }, { kind: "directive", type: i6.OutsideClickDirective, selector: "[eoOutsideClick]", outputs: ["eoOutsideClick"] }, { kind: "directive", type: i7.RouterLinkDirective, selector: "a[routerLink]" }, { kind: "component", type: i8.LoadingSpinnerComponent, selector: "eo-loading-spinner", inputs: ["size", "mode"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i9.ActionComponentAnchorDirective, selector: "[eoActionComponentAnchor]" }, { kind: "directive", type: i10.PreventDoubleClickDirective, selector: "[eoPreventDoubleClick]", inputs: ["debounceTime"], outputs: ["debounceClick"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
193
212
  };
194
213
  ActionMenuComponent = __decorate([
195
214
  UntilDestroy()
@@ -197,7 +216,7 @@ ActionMenuComponent = __decorate([
197
216
  export { ActionMenuComponent };
198
217
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: ActionMenuComponent, decorators: [{
199
218
  type: Component,
200
- args: [{ selector: 'eo-action-menu', encapsulation: ViewEncapsulation.None, template: "<div class=\"action-menu dark\" *ngIf=\"showMenu\" (eoOutsideClick)=\"hide()\">\n\n <div class=\"head\">\n <div class=\"left\">\n <div class=\"title\" translate>eo.actions.sticky.title</div>\n <div class=\"sub-title\" *ngIf=\"selection?.length > 1; else multi\" translate>eo.actions.sticky.title.sub.selection</div>\n <ng-template #multi>\n <div class=\"sub-title\" *ngIf=\"selection && selection.length\"><span translate>eo.actions.sticky.title.sub.for</span> '{{selection[0].title}}'</div>\n </ng-template>\n </div>\n <div class=\"right\">\n <span class=\"count\">{{subSelection?.length || selection?.length || ''}}</span>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"hide()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"actions\" [hidden]=\"subActionsList || showComponent\">\n\n <ng-template #action let-entry let-id>\n\n <a *ngIf=\"isLinkAction(entry.action); else default\" class=\"link\"\n [routerLink]=\"entry.action.getLink(entry.availableSelection)\"\n [queryParams]=\"entry.action.getParams(entry.availableSelection, true)\">\n <ng-container *ngTemplateOutlet=\"default\"></ng-container>\n </a>\n\n <ng-template #default>\n <div>\n <eo-icon [iconSrc]=\"entry.action.iconSrc\" [iconId]=\"entry.action.iconId\"\n [badge]=\"entry.availableSelection?.length != selection?.length ? entry.availableSelection?.length : null\"></eo-icon>\n <div class=\"label\">{{entry.action.label}}</div>\n <!-- <div class=\"available-count\" *ngIf=\"entry.availableSelection?.length != selection?.length\">{{entry.availableSelection?.length}}</div> -->\n <eo-icon class=\"info-icon\" [iconSrc]=\"'assets/_default/svg/ic_info.svg'\" (click)=\"showActionDescription(id, $event)\"></eo-icon>\n </div>\n <div class=\"description\" [hidden]=\"id !== actionDescription\">{{entry.action.description}}</div>\n </ng-template>\n </ng-template>\n\n <div class=\"group\" *ngIf=\"actionLists?.common.length > 0\">\n <div class=\"group-title\" translate>eo.actions.group.common</div>\n <div class=\"action\" id=\"{{actionListEntry.id}}\" (keydown)=\"isArrowUpOrDownPressed($event)\" [attr.tabindex]=\"0\" *ngFor=\"let actionListEntry of actionLists.common; let i = index\"\n (click)=\"onClick(actionListEntry)\" [ngClass]=\"{active: activeActionIndex === i}\">\n\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: +i}\"></ng-container>\n\n </div>\n </div>\n\n <div class=\"group\" *ngIf=\"!loading; else loader\">\n <div *ngIf=\"actionLists?.further.length > 0\">\n <div class=\"group-title\" translate>eo.actions.group.further_actions</div>\n <div class=\"action\" id=\"{{actionListEntry.id}}\" (keydown)=\"isArrowUpOrDownPressed($event)\" *ngFor=\"let actionListEntry of actionLists.further; index as i\"\n eoPreventDoubleClick [ngClass]=\"{active: activeActionIndex === i + actionLists?.common.length }\"\n (debounceClick)=\"onClick(actionListEntry)\">\n\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: 'f'+i}\"></ng-container>\n\n </div>\n </div>\n </div>\n\n <div class=\"group\" *ngIf=\"!loading && !actionLists?.further.length && !actionLists?.common.length\" [style.textAlign]=\"'center'\">\n {{ 'eo.action.not.available' | translate}}\n </div>\n\n <ng-template #loader>\n <div class=\"loading-container\">\n <eo-loading-spinner [size]=\"'medium'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- sub actions -->\n <div class=\"group sub\" *ngIf=\"subActionsList && !showComponent\">\n <div class=\"sub-actions\">\n <div class=\"group-title\">{{subActionsListHeader}}</div>\n <div class=\"action sub\" *ngFor=\"let actionListEntry of subActionsList; index as i\" (click)=\"onClick(actionListEntry)\">\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: 's'+i}\"></ng-container>\n </div>\n </div>\n <div class=\"group-buttons\">\n <button (click)=\"onCancel()\" translate>eo.cta.button.cancel</button>\n </div>\n </div>\n\n <div>\n <ng-template eoActionComponentAnchor></ng-template>\n </div>\n\n <div>\n <ng-template eoExtActionComponentAnchor></ng-template>\n </div>\n\n</div>\n", styles: [".action-menu{position:absolute;top:0;right:0;bottom:0;width:25vw;min-width:300px;z-index:100;background-color:rgba(var(--color-primary-rgb),.95);animation:eoFadeInRight var(--app-default-transition-duration);box-shadow:0 0 10px rgba(var(--color-black-rgb),.3);color:var(--color-white);height:100vh;overflow:hidden}.action-menu .head{display:flex;flex:0 0 auto;flex-flow:row nowrap;order:0;padding:var(--app-pane-padding)}.action-menu .head .left{flex:1 1 auto;order:0}.action-menu .head .left .title{font-size:var(--font-headline);font-weight:var(--font-weight-light)}.action-menu .head .left .sub-title{font-size:var(--font-body);font-weight:var(--font-weight-light)}.action-menu .head .right{display:flex;flex:0 0 auto;flex-flow:row nowrap;order:1}.action-menu .head .right .count{color:rgba(var(--color-white-rgb),.3);font-size:5em;font-weight:var(--font-weight-light);line-height:1em;padding-right:var(--app-pane-padding)}.action-menu .head .right .close{margin:0;z-index:10}.action-menu .actions{height:100%;overflow:scroll}.action-menu .actions .group:last-child{margin-bottom:100px}.action-menu .group{padding:var(--app-pane-padding);min-width:200px;display:inline-block;width:90%}.action-menu .group .group-title{background:rgba(var(--color-white-rgb),.1);margin-bottom:calc(var(--app-pane-padding) / 4);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}.action-menu .group:not(.sub):hover .group-title{background:rgba(var(--color-white-rgb),.3)}.action-menu .action{border-bottom:1px solid rgba(var(--color-white-rgb),.2)}.action-menu .action a.link{text-decoration:none;color:inherit;display:block;opacity:1}.action-menu .action.active{background:rgba(var(--color-white-rgb),.1)}.action-menu .action>a.link>div:first-child,.action-menu .action>div:first-child{transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;cursor:pointer;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding) calc(var(--app-pane-padding) / 2) 0;display:flex;align-items:center}.action-menu .action.sub>div:first-child{padding-left:calc(var(--app-pane-padding) / 2)}.action-menu .action .label{flex:1 1 auto}.action-menu .action .available-count{margin:0 calc(var(--app-pane-padding) / 2);color:rgba(var(--color-white-rgb),.3)}.action-menu .action eo-icon{margin:0 calc(var(--app-pane-padding) / 2)}.action-menu .action eo-icon.info-icon{margin:0;padding:3px;box-sizing:border-box;border-radius:50%;color:rgba(var(--color-white-rgb),.3)}.action-menu .action eo-icon.info-icon:hover{background-color:var(--color-primary)}.action-menu .action .description{border-radius:2px;-webkit-border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;color:rgba(var(--color-white-rgb),.54);font-style:italic;padding:calc(var(--app-pane-padding) / 4) var(--app-pane-padding) calc(var(--app-pane-padding) / 2) var(--app-pane-padding)}.action-menu .action:last-child{border:0}.action-menu .action:hover{background:rgba(var(--color-white-rgb),.1)}.action-menu .group-buttons{display:flex;justify-content:flex-end;padding-top:var(--app-pane-padding)}.action-menu .group-buttons button{background-color:transparent}.action-menu .group-buttons button:hover{background-color:rgba(var(--color-white-rgb),.1)}.action-menu .loading-container{display:flex;justify-content:center;align-items:center;padding:16px;margin:50% auto}\n"] }]
219
+ args: [{ selector: 'eo-action-menu', encapsulation: ViewEncapsulation.None, template: "<div class=\"action-menu dark\" *ngIf=\"showMenu\" (eoOutsideClick)=\"hide()\">\n\n <div class=\"head\">\n <div class=\"left\">\n <div class=\"title\" translate>eo.actions.sticky.title</div>\n <div class=\"sub-title\" *ngIf=\"selection?.length > 1; else multi\" translate>eo.actions.sticky.title.sub.selection\n </div>\n <ng-template #multi>\n <div class=\"sub-title\" *ngIf=\"selection && selection.length\"><span\n translate>eo.actions.sticky.title.sub.for</span> '{{selection[0].title}}'</div>\n </ng-template>\n </div>\n <div class=\"right\">\n <span class=\"count\">{{subSelection?.length || selection?.length || ''}}</span>\n <eo-icon class=\"button\" [iconSrc]=\"'assets/_default/svg/ic_clear.svg'\" (click)=\"hide()\"></eo-icon>\n </div>\n </div>\n\n <div class=\"actions\" [hidden]=\"subActionsList || showComponent\">\n\n <ng-template #action let-entry let-id>\n\n <a *ngIf=\"isLinkAction(entry.action); else default\" class=\"link\"\n [routerLink]=\"entry.action.getLink(entry.availableSelection)\"\n [queryParams]=\"entry.action.getParams(entry.availableSelection, true)\">\n <ng-container *ngTemplateOutlet=\"default\"></ng-container>\n </a>\n\n <ng-template #default>\n <div>\n <eo-icon [iconSrc]=\"entry.action.iconSrc\" [iconId]=\"entry.action.iconId\"\n [badge]=\"entry.availableSelection?.length != selection?.length ? entry.availableSelection?.length : null\"></eo-icon>\n <div class=\"label\">{{entry.action.label}}</div>\n <!-- <div class=\"available-count\" *ngIf=\"entry.availableSelection?.length != selection?.length\">{{entry.availableSelection?.length}}</div> -->\n <eo-icon class=\"info-icon\" [iconSrc]=\"'assets/_default/svg/ic_info.svg'\"\n (click)=\"showActionDescription(id, $event)\"></eo-icon>\n </div>\n <div class=\"description\" [hidden]=\"id !== actionDescription\">{{entry.action.description}}</div>\n <div class=\"description\" [hidden]=\"!entry.action.warning\">{{entry.action.warning}}</div>\n </ng-template>\n </ng-template>\n\n <div class=\"group\" *ngIf=\"actionLists?.common.length > 0\">\n <div class=\"group-title\" translate>eo.actions.group.common</div>\n <div class=\"action\" id=\"{{actionListEntry.id}}\" (keydown)=\"isArrowUpOrDownPressed($event)\" [attr.tabindex]=\"0\"\n *ngFor=\"let actionListEntry of actionLists.common; let i = index\" (click)=\"onClick(actionListEntry)\"\n [ngClass]=\"{active: activeActionIndex === i}\">\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: +i}\"></ng-container>\n </div>\n </div>\n\n <!-- Component Specific Actions Section -->\n @if (actionLists?.componentSpecific.length > 0) {\n <div class=\"group\">\n <div class=\"group-title\" translate>eo.actions.group.inbox</div>\n <div class=\"action\" id=\"{{actionListEntry.id}}\" (keydown)=\"isArrowUpOrDownPressed($event)\" [attr.tabindex]=\"0\"\n *ngFor=\"let actionListEntry of actionLists.componentSpecific; let i = index\" (click)=\"onClick(actionListEntry)\"\n [ngClass]=\"{active: activeActionIndex === i}\">\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: +i}\"></ng-container>\n </div>\n </div>\n }\n\n <div class=\"group\" *ngIf=\"!loading; else loader\">\n <div *ngIf=\"actionLists?.further.length > 0\">\n <div class=\"group-title\" translate>eo.actions.group.further_actions</div>\n <div class=\"action\" id=\"{{actionListEntry.id}}\" (keydown)=\"isArrowUpOrDownPressed($event)\"\n *ngFor=\"let actionListEntry of actionLists.further; index as i\" eoPreventDoubleClick\n [ngClass]=\"{active: activeActionIndex === i + actionLists?.common.length }\"\n (debounceClick)=\"onClick(actionListEntry)\">\n\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: 'f'+i}\"></ng-container>\n\n </div>\n </div>\n </div>\n\n <div class=\"group\"\n *ngIf=\"!loading && !actionLists?.further.length && !actionLists?.common.length && !actionLists?.componentSpecific.length\"\n [style.textAlign]=\"'center'\">\n {{ 'eo.action.not.available' | translate}}\n </div>\n\n <ng-template #loader>\n <div class=\"loading-container\">\n <eo-loading-spinner [size]=\"'medium'\"></eo-loading-spinner>\n </div>\n </ng-template>\n </div>\n\n <!-- sub actions -->\n <div class=\"group sub\" *ngIf=\"subActionsList && !showComponent\">\n <div class=\"sub-actions\">\n <div class=\"group-title\">{{subActionsListHeader}}</div>\n <div class=\"action sub\" *ngFor=\"let actionListEntry of subActionsList; index as i\"\n (click)=\"onClick(actionListEntry)\">\n <ng-container *ngTemplateOutlet=\"action; context: {$implicit: actionListEntry, id: 's'+i}\"></ng-container>\n </div>\n </div>\n <div class=\"group-buttons\">\n <button (click)=\"onCancel()\" translate>eo.cta.button.cancel</button>\n </div>\n </div>\n\n <div>\n <ng-template eoActionComponentAnchor></ng-template>\n </div>\n\n <div>\n <ng-template eoExtActionComponentAnchor></ng-template>\n </div>\n\n</div>\n", styles: [".action-menu{position:absolute;top:0;right:0;bottom:0;width:25vw;min-width:300px;z-index:100;background-color:rgba(var(--color-primary-rgb),.95);animation:eoFadeInRight var(--app-default-transition-duration);box-shadow:0 0 10px rgba(var(--color-black-rgb),.3);color:var(--color-white);height:100vh;overflow:hidden}.action-menu .head{display:flex;flex:0 0 auto;flex-flow:row nowrap;order:0;padding:var(--app-pane-padding)}.action-menu .head .left{flex:1 1 auto;order:0}.action-menu .head .left .title{font-size:var(--font-headline);font-weight:var(--font-weight-light)}.action-menu .head .left .sub-title{font-size:var(--font-body);font-weight:var(--font-weight-light)}.action-menu .head .right{display:flex;flex:0 0 auto;flex-flow:row nowrap;order:1}.action-menu .head .right .count{color:rgba(var(--color-white-rgb),.3);font-size:5em;font-weight:var(--font-weight-light);line-height:1em;padding-right:var(--app-pane-padding)}.action-menu .head .right .close{margin:0;z-index:10}.action-menu .actions{height:100%;overflow:scroll}.action-menu .actions .group:last-child{margin-bottom:100px}.action-menu .group{padding:var(--app-pane-padding);min-width:200px;display:inline-block;width:90%}.action-menu .group .group-title{background:rgba(var(--color-white-rgb),.1);margin-bottom:calc(var(--app-pane-padding) / 4);padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2);transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out}.action-menu .group:not(.sub):hover .group-title{background:rgba(var(--color-white-rgb),.3)}.action-menu .action{border-bottom:1px solid rgba(var(--color-white-rgb),.2)}.action-menu .action a.link{text-decoration:none;color:inherit;display:block;opacity:1}.action-menu .action.active{background:rgba(var(--color-white-rgb),.1)}.action-menu .action>a.link>div:first-child,.action-menu .action>div:first-child{transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;cursor:pointer;padding:calc(var(--app-pane-padding) / 2) var(--app-pane-padding) calc(var(--app-pane-padding) / 2) 0;display:flex;align-items:center}.action-menu .action.sub>div:first-child{padding-left:calc(var(--app-pane-padding) / 2)}.action-menu .action .label{flex:1 1 auto}.action-menu .action .available-count{margin:0 calc(var(--app-pane-padding) / 2);color:rgba(var(--color-white-rgb),.3)}.action-menu .action eo-icon{margin:0 calc(var(--app-pane-padding) / 2)}.action-menu .action eo-icon.info-icon{margin:0;padding:3px;box-sizing:border-box;border-radius:50%;color:rgba(var(--color-white-rgb),.3)}.action-menu .action eo-icon.info-icon:hover{background-color:var(--color-primary)}.action-menu .action .description{border-radius:2px;-webkit-border-radius:2px;transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;color:rgba(var(--color-white-rgb),.54);font-style:italic;padding:calc(var(--app-pane-padding) / 4) var(--app-pane-padding) calc(var(--app-pane-padding) / 2) var(--app-pane-padding)}.action-menu .action:last-child{border:0}.action-menu .action:hover{background:rgba(var(--color-white-rgb),.1)}.action-menu .group-buttons{display:flex;justify-content:flex-end;padding-top:var(--app-pane-padding)}.action-menu .group-buttons button{background-color:transparent}.action-menu .group-buttons button:hover{background-color:rgba(var(--color-white-rgb),.1)}.action-menu .loading-container{display:flex;justify-content:center;align-items:center;padding:16px;margin:50% auto}\n"] }]
201
220
  }], ctorParameters: () => [{ type: i1.ActionService }, { type: i2.Router }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i0.ComponentFactoryResolver }], propDecorators: { eoActionComponentAnchor: [{
202
221
  type: ViewChild,
203
222
  args: [ActionComponentAnchorDirective]
@@ -205,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
205
224
  type: ViewChild,
206
225
  args: [ActionComponentAnchorDirective]
207
226
  }] } });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYWN0aW9ucy9hY3Rpb24tbWVudS9hY3Rpb24tbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hY3Rpb25zL2FjdGlvbi1tZW51L2FjdGlvbi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUE4QyxTQUFTLEVBQW9CLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BJLE9BQU8sRUFBQyxlQUFlLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLakQsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sNkRBQTZELENBQUM7Ozs7Ozs7Ozs7OztBQVNwRyxJQUFNLG1CQUFtQixHQUF6QixNQUFNLG1CQUFtQjtJQXFCOUIsWUFBb0IsYUFBNEIsRUFDNUIsTUFBYyxFQUNmLGdCQUFrQyxFQUNqQyxPQUFtQixFQUNuQix3QkFBa0Q7UUFKbEQsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNmLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBckJ0RSxnQkFBVyxHQUdQO1lBQ0YsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVB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Q0FBQyxDQUFDO0lBQzFELENBQUM7SUFFTyxLQUFLO1FBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3hCLENBQUM7OEdBMU1VLG1CQUFtQjtrR0FBbkIsbUJBQW1CLCtHQUVuQiw4QkFBOEIsaUZBQzlCLDhCQUE4QixnRENyQjNDLHU0SUE4RkE7O0FENUVhLG1CQUFtQjtJQVAvQixZQUFZLEVBQUU7R0FPRixtQkFBbUIsQ0EyTS9COzsyRkEzTVksbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGdCQUFnQixpQkFHWCxpQkFBaUIsQ0FBQyxJQUFJO3NNQUlNLHVCQUF1QjtzQkFBakUsU0FBUzt1QkFBQyw4QkFBOEI7Z0JBQ0UsY0FBYztzQkFBeEQsU0FBUzt1QkFBQyw4QkFBOEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBFbGVtZW50UmVmLCBUeXBlLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1V0aWxzfSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2UsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtBY3Rpb25TZXJ2aWNlLCBBY3Rpb25TaG93Q29tbWFuZH0gZnJvbSAnLi4vYWN0aW9uLXNlcnZpY2UvYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtBY3Rpb25Db21wb25lbnR9IGZyb20gJy4uL2ludGVyZmFjZXMvYWN0aW9uLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtBY3Rpb25MaXN0RW50cnl9IGZyb20gJy4uL2ludGVyZmFjZXMvYWN0aW9uLWxpc3QtZW50cnknO1xuaW1wb3J0IHtDb21wb25lbnRBY3Rpb24sIEV4dGVybmFsQ29tcG9uZW50QWN0aW9uLCBFeHRlcm5hbFByb2Nlc3NDb21wb25lbnRBY3Rpb24sIExpc3RBY3Rpb24sIFNpbXBsZUFjdGlvbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7QWN0aW9uQ29tcG9uZW50QW5jaG9yRGlyZWN0aXZlfSBmcm9tICcuL2FjdGlvbi1jb21wb25lbnQtYW5jaG9yL2FjdGlvbi1jb21wb25lbnQtYW5jaG9yLmRpcmVjdGl2ZSc7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tYWN0aW9uLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hY3Rpb24tbWVudS5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFjdGlvbk1lbnVDb21wb25lbnQge1xuXG4gIEBWaWV3Q2hpbGQoQWN0aW9uQ29tcG9uZW50QW5jaG9yRGlyZWN0aXZlKSBlb0FjdGlvbkNvbXBvbmVudEFuY2hvcjogQWN0aW9uQ29tcG9uZW50QW5jaG9yRGlyZWN0aXZlO1xuICBAVmlld0NoaWxkKEFjdGlvbkNvbXBvbmVudEFuY2hvckRpcmVjdGl2ZSkgZXh0ZXJuYWxEaWFsb2c6IEFjdGlvbkNvbXBvbmVudEFuY2hvckRpcmVjdGl2ZTtcbiAgYWN0aW9uTGlzdHM6IHtcbiAgICBjb21tb246IEFjdGlvbkxpc3RFbnRyeVtdLFxuICAgIGZ1cnRoZXI6IEFjdGlvbkxpc3RFbnRyeVtdXG4gIH0gPSB7XG4gICAgY29tbW9uOiBbXSwgZnVydGhlcjogW11cbiAgfTtcbiAgc3ViQWN0aW9uc0xpc3RIZWFkZXIgPSAnJztcbiAgc3ViQWN0aW9uc0xpc3Q6IEFjdGlvbkxpc3RFbnRyeVtdO1xuICBzZWxlY3Rpb246IGFueVtdO1xuICBzdWJTZWxlY3Rpb246IGFueVtdO1xuICB0YXJnZXQ6IHN0cmluZztcbiAgc2hvd0NvbXBvbmVudCA9IGZhbHNlO1xuICBhY3Rpb25EZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzaG93TWVudSA9IGZhbHNlO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIGFjdGl2ZUFjdGlvbkluZGV4ID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGlvblNlcnZpY2U6IEFjdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIGVsZW1SZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcblxuICAgIC8vIHN1YnNjcmliZSBmb3IgdmlzaWJpbGl0eSBvYnNlcnZhYmxlIGluZGljYXRpbmcgd2hldGhlciB0byBzaG93IG9yIGhpZGUgdGhlIGFjdGlvbnNcbiAgICB0aGlzLmFjdGlvblNlcnZpY2VcbiAgICAgIC5hY3Rpb25zU2hvd2luZyQucGlwZShcbiAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgoY21kOiBBY3Rpb25TaG93Q29tbWFuZCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd01lbnUgJiYgY21kLnNob3cpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IGNtZC5zZWxlY3Rpb247XG4gICAgICAgICAgdGhpcy50YXJnZXQgPSBjbWQudGFyZ2V0O1xuICAgICAgICAgIHRoaXMuc2hvd0FjdGlvbk1lbnUoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dNZW51ICYmICFjbWQuc2hvdykge1xuICAgICAgICAgIHRoaXMuaGlkZUFjdGlvbk1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgICAgZmlsdGVyKGV2dCA9PiBldnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhpZGUoKSk7XG5cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aW9ucygpIHtcbiAgICB0aGlzLmFjdGlvblNlcnZpY2VcbiAgICAgIC5nZXRBY3Rpb25zTGlzdCh0aGlzLnNlbGVjdGlvbiwgdGhpcy52aWV3Q29udGFpbmVyUmVmKVxuICAgICAgLnN1YnNjcmliZShhY3Rpb25zTGlzdCA9PiB7XG4gICAgICAgIHRoaXMuYWN0aW9uTGlzdHMuY29tbW9uID0gYWN0aW9uc0xpc3QuZmlsdGVyKGFjdGlvbkxpc3RFbnRyeSA9PiBhY3Rpb25MaXN0RW50cnkuYWN0aW9uLmdyb3VwID09PSAnY29tbW9uJyk7XG4gICAgICAgIHRoaXMuYWN0aW9uTGlzdHMuZnVydGhlciA9IGFjdGlvbnNMaXN0LmZpbHRlcihhY3Rpb25MaXN0RW50cnkgPT4gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbi5ncm91cCA9PT0gJ2Z1cnRoZXInKTtcbiAgICAgIH0pO1xuXG4gIH1cblxuICBwcml2YXRlIGdldE1vcmVBY3Rpb25zKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5hY3Rpb25TZXJ2aWNlXG4gICAgICAuZ2V0TW9yZUFjdGlvbnModGhpcy5zZWxlY3Rpb24sIHRoaXMudmlld0NvbnRhaW5lclJlZilcbiAgICAgIC5zdWJzY3JpYmUoYWN0aW9uTGlzdCA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGlvbkxpc3RzLmZ1cnRoZXIgPSB0aGlzLmFjdGlvbkxpc3RzLmZ1cnRoZXIuY29uY2F0KGFjdGlvbkxpc3QpLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnYWN0aW9uLmxhYmVsJykpO1xuICAgICAgfSwgVXRpbHMudGhyb3coKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5hY3Rpb25TZXJ2aWNlLmhpZGVBY3Rpb25zKCk7XG4gIH1cblxuICBzaG93QWN0aW9uRGVzY3JpcHRpb24oaSwgZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuYWN0aW9uRGVzY3JpcHRpb24gPSBpID09PSB0aGlzLmFjdGlvbkRlc2NyaXB0aW9uID8gbnVsbCA6IGk7XG4gIH1cblxuICBjYXRjaEZvY3VzKCkgeyAgICBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZWxlbVJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD1cIjBcIl0nKS5mb2N1cygpO1xuICAgIH0sKTtcbiAgfVxuXG4gIGlzQXJyb3dVcE9yRG93blByZXNzZWQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG4gICAgbGV0IGxlbmd0aCA9IHRoaXMuYWN0aW9uTGlzdHMuY29tbW9uLmxlbmd0aCArIHRoaXMuYWN0aW9uTGlzdHMuZnVydGhlci5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09ICdBcnJvd1VwJyB8fCAoZXZlbnQuc2hpZnRLZXkgJiYga2V5ID09PSAnVGFiJykgKSB7XG4gICAgICB0aGlzLmFjdGl2ZUFjdGlvbkluZGV4ID0gKHRoaXMuYWN0aXZlQWN0aW9uSW5kZXggPT09IDApID8gbGVuZ3RoIDogdGhpcy5hY3RpdmVBY3Rpb25JbmRleCAtIDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdBcnJvd0Rvd24nIHx8IGtleSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMuYWN0aXZlQWN0aW9uSW5kZXggPSAodGhpcy5hY3RpdmVBY3Rpb25JbmRleCA9PT0gbGVuZ3RoKSA/IDAgOiB0aGlzLmFjdGl2ZUFjdGlvbkluZGV4ICsgMTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0VudGVyJykge1xuICAgICAgbGV0IGNsaWNrZWRMaXN0RW50cnk7XG4gICAgICBpZiAodGhpcy5hY3RpdmVBY3Rpb25JbmRleCA8IHRoaXMuYWN0aW9uTGlzdHMuY29tbW9uLmxlbmd0aCkge1xuICAgICAgICBjbGlja2VkTGlzdEVudHJ5ID0gdGhpcy5hY3Rpb25MaXN0cy5jb21tb25bdGhpcy5hY3RpdmVBY3Rpb25JbmRleF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGlja2VkTGlzdEVudHJ5ID0gdGhpcy5hY3Rpb25MaXN0cy5mdXJ0aGVyW3RoaXMuYWN0aXZlQWN0aW9uSW5kZXggLSB0aGlzLmFjdGlvbkxpc3RzLmNvbW1vbi5sZW5ndGhdO1xuICAgICAgfVxuICAgICAgdGhpcy5vbkNsaWNrKGNsaWNrZWRMaXN0RW50cnkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0FjdGlvbk1lbnUoKSB7XG4gICAgdGhpcy5hY3RpdmVBY3Rpb25JbmRleCA9IDA7XG4gICAgdGhpcy5nZXRBY3Rpb25zKCk7XG4gICAgaWYgKHRoaXMudGFyZ2V0ID09PSAnRE1TX09CSkVDVCcpIHtcbiAgICAgIHRoaXMuZ2V0TW9yZUFjdGlvbnMoKTtcbiAgICB9XG4gICAgdGhpcy5zaG93TWVudSA9IHRydWU7XG4gICAgdGhpcy5jYXRjaEZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVBY3Rpb25NZW51KCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLnNob3dNZW51ID0gZmFsc2U7XG4gICAgdGhpcy5hY3Rpb25MaXN0cyA9IHtjb21tb246IFtdLCBmdXJ0aGVyOiBbXX07XG4gIH1cblxuICBvbkNsaWNrKGFjdGlvbkxpc3RFbnRyeTogQWN0aW9uTGlzdEVudHJ5KSB7XG4gICAgdGhpcy5hY3RpdmVBY3Rpb25JbmRleCA9IDA7XG4gICAgdGhpcy5zdWJTZWxlY3Rpb24gPSBhY3Rpb25MaXN0RW50cnkuYXZhaWxhYmxlU2VsZWN0aW9uO1xuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgYWN0aW9ucyBpbXBsZW1lbnQgbW9yZSB0aGFuIG9uZSBhY3Rpb24gaW50ZXJmYWNlXG4gICAgLy8gc28gd2Ugc2hvdWxkIGJlIGF3YXJlIG9mIHJ1bm5pbmcgYW4gYWN0aW9uIGFuZCB0aGVuIG9wZW4gaXRzIHN1YiBhY3Rpb25zXG5cbiAgICBjb25zdCBpc1NpbXBsZUFjdGlvbiA9ICEhYWN0aW9uTGlzdEVudHJ5LmFjdGlvblsncnVuJ107XG4gICAgY29uc3QgaXNMaXN0QWN0aW9uID0gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnc3ViQWN0aW9uQ29tcG9uZW50cycpO1xuICAgIGNvbnN0IGlzQ29tcG9uZW50QWN0aW9uID0gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnY29tcG9uZW50Jyk7XG4gICAgY29uc3QgaXNFeHRlcm5hbENvbXBvbmVudEFjdGlvbiA9IGFjdGlvbkxpc3RFbnRyeS5hY3Rpb24uaGFzT3duUHJvcGVydHkoJ2V4dENvbXBvbmVudHMnKTtcbiAgICBjb25zdCBpc1dvcmtGbG93QWN0aW9uID0gYWN0aW9uTGlzdEVudHJ5LmFjdGlvblsnZXhlY3V0YWJsZVByb2Nlc3MnXSAmJiBpc0V4dGVybmFsQ29tcG9uZW50QWN0aW9uO1xuICAgIGNvbnN0IGlzU2ltcGxlQWN0aW9uT25seSA9IGlzU2ltcGxlQWN0aW9uICYmICFpc0xpc3RBY3Rpb24gJiYgIWlzQ29tcG9uZW50QWN0aW9uICYmICFpc0V4dGVybmFsQ29tcG9uZW50QWN0aW9uO1xuXG4gICAgaWYgKGlzU2ltcGxlQWN0aW9uKSB7XG4gICAgICBjb25zdCBzaW1wbGVBY3Rpb24gPSBhY3Rpb25MaXN0RW50cnkuYWN0aW9uIGFzIFNpbXBsZUFjdGlvbjtcbiAgICAgIHNpbXBsZUFjdGlvbi5ydW4oYWN0aW9uTGlzdEVudHJ5LmF2YWlsYWJsZVNlbGVjdGlvbik7XG5cbiAgICAgIC8vIGhpZGUgYWN0aW9uIG1lbnUgaWYgbm90aGluZyBlbHNlIGlzIHRvIGJlIHNob3duL2RvbmVcbiAgICAgIGlmIChpc1NpbXBsZUFjdGlvbk9ubHkpIHtcbiAgICAgICAgdGhpcy5oaWRlQWN0aW9uTWVudSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0xpc3RBY3Rpb24pIHtcbiAgICAgIGNvbnN0IGxpc3RBY3Rpb24gPSBhY3Rpb25MaXN0RW50cnkuYWN0aW9uIGFzIExpc3RBY3Rpb247XG4gICAgICB0aGlzLnN1YkFjdGlvbnNMaXN0SGVhZGVyID0gbGlzdEFjdGlvbi5oZWFkZXI7XG4gICAgICB0aGlzLmFjdGlvblNlcnZpY2VcbiAgICAgICAgLmdldEV4ZWN1dGFibGVBY3Rpb25zTGlzdEZyb21HaXZlbkFjdGlvbnMobGlzdEFjdGlvbi5zdWJBY3Rpb25Db21wb25lbnRzLCB0aGlzLnNlbGVjdGlvbiwgdGhpcy52aWV3Q29udGFpbmVyUmVmKVxuICAgICAgICAuc3Vic2NyaWJlKChhY3Rpb25zTGlzdDogQWN0aW9uTGlzdEVudHJ5W10pID0+IHRoaXMuc3ViQWN0aW9uc0xpc3QgPSBhY3Rpb25zTGlzdCk7XG4gICAgfSBlbHNlIGlmIChpc0NvbXBvbmVudEFjdGlvbikge1xuICAgICAgY29uc3QgY29tcG9uZW50QWN0aW9uID0gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbiBhcyBDb21wb25lbnRBY3Rpb247XG4gICAgICB0aGlzLnNob3dBY3Rpb25Db21wb25lbnQoY29tcG9uZW50QWN0aW9uLmNvbXBvbmVudCwgdGhpcy5lb0FjdGlvbkNvbXBvbmVudEFuY2hvciwgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoaXNFeHRlcm5hbENvbXBvbmVudEFjdGlvbiAmJiAhaXNXb3JrRmxvd0FjdGlvbikge1xuICAgICAgY29uc3QgZXh0Q29tcG9uZW50QWN0aW9uID0gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbiBhcyBFeHRlcm5hbENvbXBvbmVudEFjdGlvbjtcbiAgICAgIHRoaXMuc2hvd0FjdGlvbkNvbXBvbmVudChleHRDb21wb25lbnRBY3Rpb24uZXh0Q29tcG9uZW50cywgdGhpcy5leHRlcm5hbERpYWxvZywgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKGlzV29ya0Zsb3dBY3Rpb24pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBleHRDb21wb25lbnRBY3Rpb24gPSBhY3Rpb25MaXN0RW50cnkuYWN0aW9uIGFzIEV4dGVybmFsUHJvY2Vzc0NvbXBvbmVudEFjdGlvbjtcbiAgICAgICAgdGhpcy5zaG93QWN0aW9uQ29tcG9uZW50KGV4dENvbXBvbmVudEFjdGlvbi5leHRDb21wb25lbnRzLCB0aGlzLmV4dGVybmFsRGlhbG9nLCB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICBmYWxzZSwge2V4ZWN1dGFibGVQcm9jZXNzOiBleHRDb21wb25lbnRBY3Rpb24uZXhlY3V0YWJsZVByb2Nlc3N9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0FjdGlvbkNvbXBvbmVudChjb21wb25lbnQ6IFR5cGU8YW55Piwgdmlld0NvbnRSZWYsIGZhY3RvcnlSZXNvbHZlciwgc2hvd0NvbXBvbmVudCwgaW5wdXRzPzogYW55KSB7XG4gICAgdGhpcy5zaG93Q29tcG9uZW50ID0gc2hvd0NvbXBvbmVudDtcbiAgICBsZXQgY29tcG9uZW50RmFjdG9yeSA9IGZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuICAgIGxldCBhbmNob3JWaWV3Q29udGFpbmVyUmVmID0gdmlld0NvbnRSZWYudmlld0NvbnRhaW5lclJlZjtcbiAgICBhbmNob3JWaWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgbGV0IGNvbXBvbmVudFJlZiA9IGFuY2hvclZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgICg8QWN0aW9uQ29tcG9uZW50PmNvbXBvbmVudFJlZi5pbnN0YW5jZSkuc2VsZWN0aW9uID0gdGhpcy5zdWJTZWxlY3Rpb24gfHwgdGhpcy5zZWxlY3Rpb247XG4gICAgKDxBY3Rpb25Db21wb25lbnQ+Y29tcG9uZW50UmVmLmluc3RhbmNlKS5jYW5jZWxlZC5waXBlKHRha2UoMSksIHRhcCgoKSA9PiAodGhpcy5zdWJTZWxlY3Rpb24gPSBudWxsKSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uQ2FuY2VsKCkpO1xuICAgICg8QWN0aW9uQ29tcG9uZW50PmNvbXBvbmVudFJlZi5pbnN0YW5jZSkuZmluaXNoZWQucGlwZSh0YWtlKDEpLCB0YXAoKCkgPT4gKHRoaXMuc3ViU2VsZWN0aW9uID0gbnVsbCkpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkZpbmlzaCgpKTtcbiAgICBpZiAoaW5wdXRzKSB7XG4gICAgICBPYmplY3Qua2V5cyhpbnB1dHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XSA9IGlucHV0c1trZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaXNMaW5rQWN0aW9uKGFjdGlvbikge1xuICAgIC8vIHVzZWQgZnJvbSB3aXRoaW4gdGVtcGxhdGVcbiAgICByZXR1cm4gISEoYWN0aW9uICYmIGFjdGlvbi5nZXRMaW5rICYmIGFjdGlvbi5nZXRQYXJhbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcigpIHtcbiAgICB0aGlzLnNob3dDb21wb25lbnQgPSBmYWxzZTtcbiAgICB0aGlzLnN1YkFjdGlvbnNMaXN0ID0gbnVsbDtcbiAgICB0aGlzLmFjdGlvbkRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5lb0FjdGlvbkNvbXBvbmVudEFuY2hvcikge1xuICAgICAgdGhpcy5lb0FjdGlvbkNvbXBvbmVudEFuY2hvci52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWwoKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMuY2F0Y2hGb2N1cygpO1xuICB9XG5cbiAgb25GaW5pc2goKSB7XG4gICAgdGhpcy5oaWRlQWN0aW9uTWVudSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWN0aW9uLW1lbnUgZGFya1wiICpuZ0lmPVwic2hvd01lbnVcIiAoZW9PdXRzaWRlQ2xpY2spPVwiaGlkZSgpXCI+XG5cbiAgPGRpdiBjbGFzcz1cImhlYWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLmFjdGlvbnMuc3RpY2t5LnRpdGxlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic3ViLXRpdGxlXCIgKm5nSWY9XCJzZWxlY3Rpb24/Lmxlbmd0aCA+IDE7IGVsc2UgbXVsdGlcIiB0cmFuc2xhdGU+ZW8uYWN0aW9ucy5zdGlja3kudGl0bGUuc3ViLnNlbGVjdGlvbjwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNtdWx0aT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi10aXRsZVwiICpuZ0lmPVwic2VsZWN0aW9uICYmIHNlbGVjdGlvbi5sZW5ndGhcIj48c3BhbiB0cmFuc2xhdGU+ZW8uYWN0aW9ucy5zdGlja3kudGl0bGUuc3ViLmZvcjwvc3Bhbj4gJ3t7c2VsZWN0aW9uWzBdLnRpdGxlfX0nPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjb3VudFwiPnt7c3ViU2VsZWN0aW9uPy5sZW5ndGggfHwgc2VsZWN0aW9uPy5sZW5ndGggfHwgJyd9fTwvc3Bhbj5cbiAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJoaWRlKClcIj48L2VvLWljb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCIgW2hpZGRlbl09XCJzdWJBY3Rpb25zTGlzdCB8fCBzaG93Q29tcG9uZW50XCI+XG5cbiAgICA8bmctdGVtcGxhdGUgI2FjdGlvbiBsZXQtZW50cnkgbGV0LWlkPlxuXG4gICAgICA8YSAqbmdJZj1cImlzTGlua0FjdGlvbihlbnRyeS5hY3Rpb24pOyBlbHNlIGRlZmF1bHRcIiBjbGFzcz1cImxpbmtcIlxuICAgICAgICAgW3JvdXRlckxpbmtdPVwiZW50cnkuYWN0aW9uLmdldExpbmsoZW50cnkuYXZhaWxhYmxlU2VsZWN0aW9uKVwiXG4gICAgICAgICBbcXVlcnlQYXJhbXNdPVwiZW50cnkuYWN0aW9uLmdldFBhcmFtcyhlbnRyeS5hdmFpbGFibGVTZWxlY3Rpb24sIHRydWUpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2E+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCJlbnRyeS5hY3Rpb24uaWNvblNyY1wiIFtpY29uSWRdPVwiZW50cnkuYWN0aW9uLmljb25JZFwiXG4gICAgICAgICAgW2JhZGdlXT1cImVudHJ5LmF2YWlsYWJsZVNlbGVjdGlvbj8ubGVuZ3RoICE9IHNlbGVjdGlvbj8ubGVuZ3RoID8gZW50cnkuYXZhaWxhYmxlU2VsZWN0aW9uPy5sZW5ndGggOiBudWxsXCI+PC9lby1pY29uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7ZW50cnkuYWN0aW9uLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJhdmFpbGFibGUtY291bnRcIiAqbmdJZj1cImVudHJ5LmF2YWlsYWJsZVNlbGVjdGlvbj8ubGVuZ3RoICE9IHNlbGVjdGlvbj8ubGVuZ3RoXCI+e3tlbnRyeS5hdmFpbGFibGVTZWxlY3Rpb24/Lmxlbmd0aH19PC9kaXY+IC0tPlxuICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwiaW5mby1pY29uXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfaW5mby5zdmcnXCIgKGNsaWNrKT1cInNob3dBY3Rpb25EZXNjcmlwdGlvbihpZCwgJGV2ZW50KVwiPjwvZW8taWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiIFtoaWRkZW5dPVwiaWQgIT09IGFjdGlvbkRlc2NyaXB0aW9uXCI+e3tlbnRyeS5hY3Rpb24uZGVzY3JpcHRpb259fTwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPGRpdiBjbGFzcz1cImdyb3VwXCIgKm5nSWY9XCJhY3Rpb25MaXN0cz8uY29tbW9uLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cC10aXRsZVwiIHRyYW5zbGF0ZT5lby5hY3Rpb25zLmdyb3VwLmNvbW1vbjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImFjdGlvblwiIGlkPVwie3thY3Rpb25MaXN0RW50cnkuaWR9fVwiIChrZXlkb3duKT1cImlzQXJyb3dVcE9yRG93blByZXNzZWQoJGV2ZW50KVwiIFthdHRyLnRhYmluZGV4XT1cIjBcIiAqbmdGb3I9XCJsZXQgYWN0aW9uTGlzdEVudHJ5IG9mIGFjdGlvbkxpc3RzLmNvbW1vbjsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrKGFjdGlvbkxpc3RFbnRyeSlcIiBbbmdDbGFzc109XCJ7YWN0aXZlOiBhY3RpdmVBY3Rpb25JbmRleCA9PT0gaX1cIj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWN0aW9uOyBjb250ZXh0OiB7JGltcGxpY2l0OiBhY3Rpb25MaXN0RW50cnksIGlkOiAraX1cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBcIiAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIGxvYWRlclwiPlxuICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkxpc3RzPy5mdXJ0aGVyLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLXRpdGxlXCIgdHJhbnNsYXRlPmVvLmFjdGlvbnMuZ3JvdXAuZnVydGhlcl9hY3Rpb25zPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25cIiBpZD1cInt7YWN0aW9uTGlzdEVudHJ5LmlkfX1cIiAoa2V5ZG93bik9XCJpc0Fycm93VXBPckRvd25QcmVzc2VkKCRldmVudClcIiAqbmdGb3I9XCJsZXQgYWN0aW9uTGlzdEVudHJ5IG9mIGFjdGlvbkxpc3RzLmZ1cnRoZXI7IGluZGV4IGFzIGlcIlxuICAgICAgICAgIGVvUHJldmVudERvdWJsZUNsaWNrIFtuZ0NsYXNzXT1cInthY3RpdmU6IGFjdGl2ZUFjdGlvbkluZGV4ID09PSBpICsgYWN0aW9uTGlzdHM/LmNvbW1vbi5sZW5ndGggfVwiXG4gICAgICAgICAgKGRlYm91bmNlQ2xpY2spPVwib25DbGljayhhY3Rpb25MaXN0RW50cnkpXCI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWN0aW9uOyBjb250ZXh0OiB7JGltcGxpY2l0OiBhY3Rpb25MaXN0RW50cnksIGlkOiAnZicraX1cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImdyb3VwXCIgKm5nSWY9XCIhbG9hZGluZyAmJiAhYWN0aW9uTGlzdHM/LmZ1cnRoZXIubGVuZ3RoICYmICFhY3Rpb25MaXN0cz8uY29tbW9uLmxlbmd0aFwiIFtzdHlsZS50ZXh0QWxpZ25dPVwiJ2NlbnRlcidcIj5cbiAgICAgIHt7ICdlby5hY3Rpb24ubm90LmF2YWlsYWJsZScgfCB0cmFuc2xhdGV9fVxuICAgIDwvZGl2PlxuXG4gICAgPG5nLXRlbXBsYXRlICNsb2FkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIj5cbiAgICAgICAgPGVvLWxvYWRpbmctc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiPjwvZW8tbG9hZGluZy1zcGlubmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbiAgPCEtLSBzdWIgYWN0aW9ucyAtLT5cbiAgPGRpdiAgY2xhc3M9XCJncm91cCBzdWJcIiAqbmdJZj1cInN1YkFjdGlvbnNMaXN0ICYmICFzaG93Q29tcG9uZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cInN1Yi1hY3Rpb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj57e3N1YkFjdGlvbnNMaXN0SGVhZGVyfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24gc3ViXCIgKm5nRm9yPVwibGV0IGFjdGlvbkxpc3RFbnRyeSBvZiBzdWJBY3Rpb25zTGlzdDsgaW5kZXggYXMgaVwiIChjbGljayk9XCJvbkNsaWNrKGFjdGlvbkxpc3RFbnRyeSlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjdGlvbjsgY29udGV4dDogeyRpbXBsaWNpdDogYWN0aW9uTGlzdEVudHJ5LCBpZDogJ3MnK2l9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtYnV0dG9uc1wiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib25DYW5jZWwoKVwiIHRyYW5zbGF0ZT5lby5jdGEuYnV0dG9uLmNhbmNlbDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSBlb0FjdGlvbkNvbXBvbmVudEFuY2hvcj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8ZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSBlb0V4dEFjdGlvbkNvbXBvbmVudEFuY2hvcj48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuPC9kaXY+XG4iXX0=
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYWN0aW9ucy9hY3Rpb24tbWVudS9hY3Rpb24tbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hY3Rpb25zL2FjdGlvbi1tZW51L2FjdGlvbi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUE4QyxTQUFTLEVBQW9CLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BJLE9BQU8sRUFBQyxlQUFlLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQ25DLE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDbkUsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLakQsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sNkRBQTZELENBQUM7Ozs7Ozs7Ozs7OztBQVVwRyxJQUFNLG1CQUFtQixHQUF6QixNQUFNLG1CQUFtQjtJQXNCOUIsWUFBb0IsYUFBNEIsRUFDdEMsTUFBYyxFQUNmLGdCQUFrQyxFQUNqQyxPQUFtQixFQUNuQix3QkFBa0Q7UUFKeEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDdEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNmLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDakMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBdEI1RCxnQkFBVyxHQUlQO1lBQ0EsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVB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LElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQzs4R0E3TlUsbUJBQW1CO2tHQUFuQixtQkFBbUIsK0dBRW5CLDhCQUE4QixpRkFDOUIsOEJBQThCLGdEQ3RCM0Msc3ZLQWlIQTs7QUQ5RmEsbUJBQW1CO0lBUC9CLFlBQVksRUFBRTtHQU9GLG1CQUFtQixDQWdPL0I7OzJGQWhPWSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsZ0JBQWdCLGlCQUdYLGlCQUFpQixDQUFDLElBQUk7c01BSU0sdUJBQXVCO3NCQUFqRSxTQUFTO3VCQUFDLDhCQUE4QjtnQkFDRSxjQUFjO3NCQUF4RCxTQUFTO3VCQUFDLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIEVsZW1lbnRSZWYsIFR5cGUsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VXRpbHN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge1VudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWR9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQge2ZpbHRlciwgdGFrZSwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0FjdGlvblNlcnZpY2UsIEFjdGlvblNob3dDb21tYW5kfSBmcm9tICcuLi9hY3Rpb24tc2VydmljZS9hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQge0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9hY3Rpb24tY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQge0FjdGlvbkxpc3RFbnRyeX0gZnJvbSAnLi4vaW50ZXJmYWNlcy9hY3Rpb24tbGlzdC1lbnRyeSc7XG5pbXBvcnQge0NvbXBvbmVudEFjdGlvbiwgRXh0ZXJuYWxDb21wb25lbnRBY3Rpb24sIEV4dGVybmFsUHJvY2Vzc0NvbXBvbmVudEFjdGlvbiwgTGlzdEFjdGlvbiwgU2ltcGxlQWN0aW9ufSBmcm9tICcuLi9pbnRlcmZhY2VzL2FjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHtBY3Rpb25Db21wb25lbnRBbmNob3JEaXJlY3RpdmV9IGZyb20gJy4vYWN0aW9uLWNvbXBvbmVudC1hbmNob3IvYWN0aW9uLWNvbXBvbmVudC1hbmNob3IuZGlyZWN0aXZlJztcbmltcG9ydCB7QWN0aW9uVGFyZ2V0fSBmcm9tICcuLy4uL2FjdGlvbi10YXJnZXQnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VvLWFjdGlvbi1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FjdGlvbi1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWN0aW9uLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBY3Rpb25NZW51Q29tcG9uZW50IHtcblxuICBAVmlld0NoaWxkKEFjdGlvbkNvbXBvbmVudEFuY2hvckRpcmVjdGl2ZSkgZW9BY3Rpb25Db21wb25lbnRBbmNob3I6IEFjdGlvbkNvbXBvbmVudEFuY2hvckRpcmVjdGl2ZTtcbiAgQFZpZXdDaGlsZChBY3Rpb25Db21wb25lbnRBbmNob3JEaXJlY3RpdmUpIGV4dGVybmFsRGlhbG9nOiBBY3Rpb25Db21wb25lbnRBbmNob3JEaXJlY3RpdmU7XG4gIGFjdGlvbkxpc3RzOiB7XG4gICAgY29tbW9uOiBBY3Rpb25MaXN0RW50cnlbXSxcbiAgICBmdXJ0aGVyOiBBY3Rpb25MaXN0RW50cnlbXSxcbiAgICBjb21wb25lbnRTcGVjaWZpYzogQWN0aW9uTGlzdEVudHJ5W11cbiAgfSA9IHtcbiAgICAgIGNvbW1vbjogW10sIGZ1cnRoZXI6IFtdLCBjb21wb25lbnRTcGVjaWZpYzogW11cbiAgICB9O1xuICBzdWJBY3Rpb25zTGlzdEhlYWRlciA9ICcnO1xuICBzdWJBY3Rpb25zTGlzdDogQWN0aW9uTGlzdEVudHJ5W107XG4gIHNlbGVjdGlvbjogYW55W107XG4gIHN1YlNlbGVjdGlvbjogYW55W107XG4gIHRhcmdldDogc3RyaW5nO1xuICBzaG93Q29tcG9uZW50ID0gZmFsc2U7XG4gIGFjdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHNob3dNZW51ID0gZmFsc2U7XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgYWN0aXZlQWN0aW9uSW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgZWxlbVJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSB7XG5cbiAgICAvLyBzdWJzY3JpYmUgZm9yIHZpc2liaWxpdHkgb2JzZXJ2YWJsZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gc2hvdyBvciBoaWRlIHRoZSBhY3Rpb25zXG4gICAgdGhpcy5hY3Rpb25TZXJ2aWNlXG4gICAgICAuYWN0aW9uc1Nob3dpbmckLnBpcGUoXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnN1YnNjcmliZSgoY21kOiBBY3Rpb25TaG93Q29tbWFuZCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2hvd01lbnUgJiYgY21kLnNob3cpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IGNtZC5zZWxlY3Rpb247XG4gICAgICAgICAgdGhpcy50YXJnZXQgPSBjbWQudGFyZ2V0O1xuICAgICAgICAgIHRoaXMuc2hvd0FjdGlvbk1lbnUoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dNZW51ICYmICFjbWQuc2hvdykge1xuICAgICAgICAgIHRoaXMuaGlkZUFjdGlvbk1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKSxcbiAgICAgICAgZmlsdGVyKGV2dCA9PiBldnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhpZGUoKSk7XG5cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLmNhdGNoRm9jdXMoKTtcbiAgICAvLyBicm9hZGNhc3RzIGEgY2FuY2VsIGV2ZW50IHVzaW5nIHRoZSBhY3Rpb25TZXJ2aWNlLlxuICAgIHRoaXMuYWN0aW9uU2VydmljZS5icm9hZGNhc3RDYW5jZWwoKTtcbiAgfVxuXG4gIG9uRmluaXNoKCk6IHZvaWQge1xuICAgIHRoaXMuaGlkZUFjdGlvbk1lbnUoKTtcbiAgICAvLyBicm9hZGNhc3RzIGEgZmluaXNoIGV2ZW50IHVzaW5nIHRoZSBhY3Rpb25TZXJ2aWNlLlxuICAgIHRoaXMuYWN0aW9uU2VydmljZS5icm9hZGNhc3RGaW5pc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGtleWJvYXJkIGV2ZW50cyBmb3IgbmF2aWdhdGluZyB0aHJvdWdoIGFjdGlvbiBsaXN0cy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgYWN0aXZlIGFjdGlvbiBpbmRleCBiYXNlZCBvbiB0aGUga2V5IHByZXNzZWQuXG4gICAqIEl0IHN1cHBvcnRzIG5hdmlnYXRpb24gdXNpbmcgdGhlIEFycm93VXAsIEFycm93RG93biwgVGFiLCBhbmQgRW50ZXIga2V5cy5cbiAgICpcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudCAtIFRoZSBrZXlib2FyZCBldmVudCB0cmlnZ2VyZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBpc0Fycm93VXBPckRvd25QcmVzc2VkKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgIGxldCBsZW5ndGggPSB0aGlzLmFjdGlvbkxpc3RzLmNvbW1vbi5sZW5ndGggKyB0aGlzLmFjdGlvbkxpc3RzLmZ1cnRoZXIubGVuZ3RoIC0gMTtcbiAgICBpZiAoa2V5ID09PSAnQXJyb3dVcCcgfHwgKGV2ZW50LnNoaWZ0S2V5ICYmIGtleSA9PT0gJ1RhYicpKSB7XG4gICAgICB0aGlzLmFjdGl2ZUFjdGlvbkluZGV4ID0gKHRoaXMuYWN0aXZlQWN0aW9uSW5kZXggPT09IDApID8gbGVuZ3RoIDogdGhpcy5hY3RpdmVBY3Rpb25JbmRleCAtIDE7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdBcnJvd0Rvd24nIHx8IGtleSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMuYWN0aXZlQWN0aW9uSW5kZXggPSAodGhpcy5hY3RpdmVBY3Rpb25JbmRleCA9PT0gbGVuZ3RoKSA/IDAgOiB0aGlzLmFjdGl2ZUFjdGlvbkluZGV4ICsgMTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0VudGVyJykge1xuICAgICAgbGV0IGNsaWNrZWRMaXN0RW50cnk7XG4gICAgICBpZiAodGhpcy5hY3RpdmVBY3Rpb25JbmRleCA8IHRoaXMuYWN0aW9uTGlzdHMuY29tbW9uLmxlbmd0aCkge1xuICAgICAgICBjbGlja2VkTGlzdEVudHJ5ID0gdGhpcy5hY3Rpb25MaXN0cy5jb21tb25bdGhpcy5hY3RpdmVBY3Rpb25JbmRleF07XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudGFyZ2V0ID09PSAnQ09NUE9ORU5UX1NQRUNJRklDX0FDVElPTlMnKSB7XG4gICAgICAgIGNsaWNrZWRMaXN0RW50cnkgPSB0aGlzLmFjdGlvbkxpc3RzLmNvbXBvbmVudFNwZWNpZmljW3RoaXMuYWN0aXZlQWN0aW9uSW5kZXggLSB0aGlzLmFjdGlvbkxpc3RzLmNvbW1vbi5sZW5ndGhdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xpY2tlZExpc3RFbnRyeSA9IHRoaXMuYWN0aW9uTGlzdHMuZnVydGhlclt0aGlzLmFjdGl2ZUFjdGlvbkluZGV4IC0gdGhpcy5hY3Rpb25MaXN0cy5jb21tb24ubGVuZ3RoXTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25DbGljayhjbGlja2VkTGlzdEVudHJ5KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGlvbnMoKSB7XG4gICAgdGhpcy5hY3Rpb25TZXJ2aWNlXG4gICAgICAuZ2V0QWN0aW9uc0xpc3QodGhpcy5zZWxlY3Rpb24sIHRoaXMudmlld0NvbnRhaW5lclJlZilcbiAgICAgIC5zdWJzY3JpYmUoYWN0aW9uc0xpc3QgPT4ge1xuICAgICAgICB0aGlzLmFjdGlvbkxpc3RzLmNvbW1vbiA9IGFjdGlvbnNMaXN0LmZpbHRlcihhY3Rpb25MaXN0RW50cnkgPT4gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbi5ncm91cCA9PT0gJ2NvbW1vbicpO1xuICAgICAgICB0aGlzLmFjdGlvbkxpc3RzLmZ1cnRoZXIgPSBhY3Rpb25zTGlzdC5maWx0ZXIoYWN0aW9uTGlzdEVudHJ5ID0+IGFjdGlvbkxpc3RFbnRyeS5hY3Rpb24uZ3JvdXAgPT09ICdmdXJ0aGVyJyk7XG4gICAgICAgIC8vIEZpbHRlciBhbmQgYXNzaWduIGNvbXBvbmVudC1zcGVjaWZpYyBhY3Rpb25zIGlmIHRoZXkgZXhpc3RcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uU2VydmljZS5oYXNDb21wb25lbnRTcGVjaWZpY0FjdGlvbnMpIHtcbiAgICAgICAgICB0aGlzLmFjdGlvbkxpc3RzLmNvbXBvbmVudFNwZWNpZmljID0gYWN0aW9uc0xpc3QuZmlsdGVyKGFjdGlvbkxpc3RFbnRyeSA9PiBhY3Rpb25MaXN0RW50cnkuYWN0aW9uLmdyb3VwID09PSAnY29tcG9uZW50U3BlY2lmaWMnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1vcmVBY3Rpb25zKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5hY3Rpb25TZXJ2aWNlXG4gICAgICAuZ2V0TW9yZUFjdGlvbnModGhpcy5zZWxlY3Rpb24sIHRoaXMudmlld0NvbnRhaW5lclJlZilcbiAgICAgIC5zdWJzY3JpYmUoYWN0aW9uTGlzdCA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGlvbkxpc3RzLmZ1cnRoZXIgPSB0aGlzLmFjdGlvbkxpc3RzLmZ1cnRoZXIuY29uY2F0KGFjdGlvbkxpc3QpLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnYWN0aW9uLmxhYmVsJykpO1xuICAgICAgfSwgVXRpbHMudGhyb3coKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5hY3Rpb25TZXJ2aWNlLmhpZGVBY3Rpb25zKCk7XG4gIH1cblxuICBzaG93QWN0aW9uRGVzY3JpcHRpb24oaSwgZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuYWN0aW9uRGVzY3JpcHRpb24gPSBpID09PSB0aGlzLmFjdGlvbkRlc2NyaXB0aW9uID8gbnVsbCA6IGk7XG4gIH1cblxuICBjYXRjaEZvY3VzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5lbGVtUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3RhYmluZGV4PVwiMFwiXScpLmZvY3VzKCk7XG4gICAgfSwpO1xuICB9XG5cblxuICBwcml2YXRlIHNob3dBY3Rpb25NZW51KCkge1xuICAgIHRoaXMuYWN0aXZlQWN0aW9uSW5kZXggPSAwO1xuICAgIHRoaXMuZ2V0QWN0aW9ucygpO1xuICAgIGlmICh0aGlzLnRhcmdldCA9PT0gJ0RNU19PQkpFQ1QnKSB7XG4gICAgICB0aGlzLmdldE1vcmVBY3Rpb25zKCk7XG4gICAgfVxuICAgIHRoaXMuc2hvd01lbnUgPSB0cnVlO1xuICAgIHRoaXMuY2F0Y2hGb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBoaWRlQWN0aW9uTWVudSgpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5zaG93TWVudSA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aW9uTGlzdHMgPSB7Y29tbW9uOiBbXSwgZnVydGhlcjogW10sIGNvbXBvbmVudFNwZWNpZmljOiBbXX07XG4gIH1cblxuICBvbkNsaWNrKGFjdGlvbkxpc3RFbnRyeTogQWN0aW9uTGlzdEVudHJ5KSB7XG4gICAgdGhpcy5hY3RpdmVBY3Rpb25JbmRleCA9IDA7XG4gICAgdGhpcy5zdWJTZWxlY3Rpb24gPSBhY3Rpb25MaXN0RW50cnkuYXZhaWxhYmxlU2VsZWN0aW9uO1xuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgYWN0aW9ucyBpbXBsZW1lbnQgbW9yZSB0aGFuIG9uZSBhY3Rpb24gaW50ZXJmYWNlXG4gICAgLy8gc28gd2Ugc2hvdWxkIGJlIGF3YXJlIG9mIHJ1bm5pbmcgYW4gYWN0aW9uIGFuZCB0aGVuIG9wZW4gaXRzIHN1YiBhY3Rpb25zXG5cbiAgICBjb25zdCBpc1NpbXBsZUFjdGlvbiA9ICEhYWN0aW9uTGlzdEVudHJ5LmFjdGlvblsncnVuJ107XG4gICAgY29uc3QgaXNMaXN0QWN0aW9uID0gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnc3ViQWN0aW9uQ29tcG9uZW50cycpO1xuICAgIGNvbnN0IGlzQ29tcG9uZW50QWN0aW9uID0gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbi5oYXNPd25Qcm9wZXJ0eSgnY29tcG9uZW50Jyk7XG4gICAgY29uc3QgaXNFeHRlcm5hbENvbXBvbmVudEFjdGlvbiA9IGFjdGlvbkxpc3RFbnRyeS5hY3Rpb24uaGFzT3duUHJvcGVydHkoJ2V4dENvbXBvbmVudHMnKTtcbiAgICBjb25zdCBpc1dvcmtGbG93QWN0aW9uID0gYWN0aW9uTGlzdEVudHJ5LmFjdGlvblsnZXhlY3V0YWJsZVByb2Nlc3MnXSAmJiBpc0V4dGVybmFsQ29tcG9uZW50QWN0aW9uO1xuICAgIGNvbnN0IGlzU2ltcGxlQWN0aW9uT25seSA9IGlzU2ltcGxlQWN0aW9uICYmICFpc0xpc3RBY3Rpb24gJiYgIWlzQ29tcG9uZW50QWN0aW9uICYmICFpc0V4dGVybmFsQ29tcG9uZW50QWN0aW9uO1xuXG4gICAgaWYgKGlzU2ltcGxlQWN0aW9uKSB7XG4gICAgICBjb25zdCBzaW1wbGVBY3Rpb24gPSBhY3Rpb25MaXN0RW50cnkuYWN0aW9uIGFzIFNpbXBsZUFjdGlvbjtcbiAgICAgIHNpbXBsZUFjdGlvbi5ydW4oYWN0aW9uTGlzdEVudHJ5LmF2YWlsYWJsZVNlbGVjdGlvbik7XG5cbiAgICAgIC8vIGhpZGUgYWN0aW9uIG1lbnUgaWYgbm90aGluZyBlbHNlIGlzIHRvIGJlIHNob3duL2RvbmVcbiAgICAgIGlmIChpc1NpbXBsZUFjdGlvbk9ubHkpIHtcbiAgICAgICAgdGhpcy5oaWRlQWN0aW9uTWVudSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0xpc3RBY3Rpb24pIHtcbiAgICAgIGNvbnN0IGxpc3RBY3Rpb24gPSBhY3Rpb25MaXN0RW50cnkuYWN0aW9uIGFzIExpc3RBY3Rpb247XG4gICAgICB0aGlzLnN1YkFjdGlvbnNMaXN0SGVhZGVyID0gbGlzdEFjdGlvbi5oZWFkZXI7XG4gICAgICB0aGlzLmFjdGlvblNlcnZpY2VcbiAgICAgICAgLmdldEV4ZWN1dGFibGVBY3Rpb25zTGlzdEZyb21HaXZlbkFjdGlvbnMobGlzdEFjdGlvbi5zdWJBY3Rpb25Db21wb25lbnRzLCB0aGlzLnNlbGVjdGlvbiwgdGhpcy52aWV3Q29udGFpbmVyUmVmKVxuICAgICAgICAuc3Vic2NyaWJlKChhY3Rpb25zTGlzdDogQWN0aW9uTGlzdEVudHJ5W10pID0+IHRoaXMuc3ViQWN0aW9uc0xpc3QgPSBhY3Rpb25zTGlzdCk7XG4gICAgfSBlbHNlIGlmIChpc0NvbXBvbmVudEFjdGlvbikge1xuICAgICAgY29uc3QgY29tcG9uZW50QWN0aW9uID0gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbiBhcyBDb21wb25lbnRBY3Rpb247XG4gICAgICB0aGlzLnNob3dBY3Rpb25Db21wb25lbnQoY29tcG9uZW50QWN0aW9uLmNvbXBvbmVudCwgdGhpcy5lb0FjdGlvbkNvbXBvbmVudEFuY2hvciwgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoaXNFeHRlcm5hbENvbXBvbmVudEFjdGlvbiAmJiAhaXNXb3JrRmxvd0FjdGlvbikge1xuICAgICAgY29uc3QgZXh0Q29tcG9uZW50QWN0aW9uID0gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbiBhcyBFeHRlcm5hbENvbXBvbmVudEFjdGlvbjtcbiAgICAgIHRoaXMuc2hvd0FjdGlvbkNvbXBvbmVudChleHRDb21wb25lbnRBY3Rpb24uZXh0Q29tcG9uZW50cywgdGhpcy5leHRlcm5hbERpYWxvZywgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKGlzV29ya0Zsb3dBY3Rpb24pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBleHRDb21wb25lbnRBY3Rpb24gPSBhY3Rpb25MaXN0RW50cnkuYWN0aW9uIGFzIEV4dGVybmFsUHJvY2Vzc0NvbXBvbmVudEFjdGlvbjtcbiAgICAgICAgdGhpcy5zaG93QWN0aW9uQ29tcG9uZW50KGV4dENvbXBvbmVudEFjdGlvbi5leHRDb21wb25lbnRzLCB0aGlzLmV4dGVybmFsRGlhbG9nLCB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICBmYWxzZSwge2V4ZWN1dGFibGVQcm9jZXNzOiBleHRDb21wb25lbnRBY3Rpb24uZXhlY3V0YWJsZVByb2Nlc3N9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2hvd0FjdGlvbkNvbXBvbmVudChjb21wb25lbnQ6IFR5cGU8YW55Piwgdmlld0NvbnRSZWYsIGZhY3RvcnlSZXNvbHZlciwgc2hvd0NvbXBvbmVudCwgaW5wdXRzPzogYW55KSB7XG4gICAgdGhpcy5zaG93Q29tcG9uZW50ID0gc2hvd0NvbXBvbmVudDtcbiAgICBsZXQgY29tcG9uZW50RmFjdG9yeSA9IGZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuICAgIGxldCBhbmNob3JWaWV3Q29udGFpbmVyUmVmID0gdmlld0NvbnRSZWYudmlld0NvbnRhaW5lclJlZjtcbiAgICBhbmNob3JWaWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgbGV0IGNvbXBvbmVudFJlZiA9IGFuY2hvclZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgICg8QWN0aW9uQ29tcG9uZW50PmNvbXBvbmVudFJlZi5pbnN0YW5jZSkuc2VsZWN0aW9uID0gdGhpcy5zdWJTZWxlY3Rpb24gfHwgdGhpcy5zZWxlY3Rpb247XG4gICAgKDxBY3Rpb25Db21wb25lbnQ+Y29tcG9uZW50UmVmLmluc3RhbmNlKS5jYW5jZWxlZC5waXBlKHRha2UoMSksIHRhcCgoKSA9PiAodGhpcy5zdWJTZWxlY3Rpb24gPSBudWxsKSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uQ2FuY2VsKCkpO1xuICAgICg8QWN0aW9uQ29tcG9uZW50PmNvbXBvbmVudFJlZi5pbnN0YW5jZSkuZmluaXNoZWQucGlwZSh0YWtlKDEpLCB0YXAoKCkgPT4gKHRoaXMuc3ViU2VsZWN0aW9uID0gbnVsbCkpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkZpbmlzaCgpKTtcbiAgICBpZiAoaW5wdXRzKSB7XG4gICAgICBPYmplY3Qua2V5cyhpbnB1dHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Vba2V5XSA9IGlucHV0c1trZXldO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaXNMaW5rQWN0aW9uKGFjdGlvbikge1xuICAgIC8vIHVzZWQgZnJvbSB3aXRoaW4gdGVtcGxhdGVcbiAgICByZXR1cm4gISEoYWN0aW9uICYmIGFjdGlvbi5nZXRMaW5rICYmIGFjdGlvbi5nZXRQYXJhbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcigpIHtcbiAgICB0aGlzLnNob3dDb21wb25lbnQgPSBmYWxzZTtcbiAgICB0aGlzLnN1YkFjdGlvbnNMaXN0ID0gbnVsbDtcbiAgICB0aGlzLmFjdGlvbkRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5lb0FjdGlvbkNvbXBvbmVudEFuY2hvcikge1xuICAgICAgdGhpcy5lb0FjdGlvbkNvbXBvbmVudEFuY2hvci52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cblxufVxuIiwiPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51IGRhcmtcIiAqbmdJZj1cInNob3dNZW51XCIgKGVvT3V0c2lkZUNsaWNrKT1cImhpZGUoKVwiPlxuXG4gIDxkaXYgY2xhc3M9XCJoZWFkXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5hY3Rpb25zLnN0aWNreS50aXRsZTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInN1Yi10aXRsZVwiICpuZ0lmPVwic2VsZWN0aW9uPy5sZW5ndGggPiAxOyBlbHNlIG11bHRpXCIgdHJhbnNsYXRlPmVvLmFjdGlvbnMuc3RpY2t5LnRpdGxlLnN1Yi5zZWxlY3Rpb25cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNtdWx0aT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi10aXRsZVwiICpuZ0lmPVwic2VsZWN0aW9uICYmIHNlbGVjdGlvbi5sZW5ndGhcIj48c3BhblxuICAgICAgICAgICAgdHJhbnNsYXRlPmVvLmFjdGlvbnMuc3RpY2t5LnRpdGxlLnN1Yi5mb3I8L3NwYW4+ICd7e3NlbGVjdGlvblswXS50aXRsZX19JzwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY291bnRcIj57e3N1YlNlbGVjdGlvbj8ubGVuZ3RoIHx8IHNlbGVjdGlvbj8ubGVuZ3RoIHx8ICcnfX08L3NwYW4+XG4gICAgICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwiaGlkZSgpXCI+PC9lby1pY29uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiIFtoaWRkZW5dPVwic3ViQWN0aW9uc0xpc3QgfHwgc2hvd0NvbXBvbmVudFwiPlxuXG4gICAgPG5nLXRlbXBsYXRlICNhY3Rpb24gbGV0LWVudHJ5IGxldC1pZD5cblxuICAgICAgPGEgKm5nSWY9XCJpc0xpbmtBY3Rpb24oZW50cnkuYWN0aW9uKTsgZWxzZSBkZWZhdWx0XCIgY2xhc3M9XCJsaW5rXCJcbiAgICAgICAgW3JvdXRlckxpbmtdPVwiZW50cnkuYWN0aW9uLmdldExpbmsoZW50cnkuYXZhaWxhYmxlU2VsZWN0aW9uKVwiXG4gICAgICAgIFtxdWVyeVBhcmFtc109XCJlbnRyeS5hY3Rpb24uZ2V0UGFyYW1zKGVudHJ5LmF2YWlsYWJsZVNlbGVjdGlvbiwgdHJ1ZSlcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRlZmF1bHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvYT5cblxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cImVudHJ5LmFjdGlvbi5pY29uU3JjXCIgW2ljb25JZF09XCJlbnRyeS5hY3Rpb24uaWNvbklkXCJcbiAgICAgICAgICAgIFtiYWRnZV09XCJlbnRyeS5hdmFpbGFibGVTZWxlY3Rpb24/Lmxlbmd0aCAhPSBzZWxlY3Rpb24/Lmxlbmd0aCA/IGVudHJ5LmF2YWlsYWJsZVNlbGVjdGlvbj8ubGVuZ3RoIDogbnVsbFwiPjwvZW8taWNvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2VudHJ5LmFjdGlvbi5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYXZhaWxhYmxlLWNvdW50XCIgKm5nSWY9XCJlbnRyeS5hdmFpbGFibGVTZWxlY3Rpb24/Lmxlbmd0aCAhPSBzZWxlY3Rpb24/Lmxlbmd0aFwiPnt7ZW50cnkuYXZhaWxhYmxlU2VsZWN0aW9uPy5sZW5ndGh9fTwvZGl2PiAtLT5cbiAgICAgICAgICA8ZW8taWNvbiBjbGFzcz1cImluZm8taWNvblwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2luZm8uc3ZnJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0FjdGlvbkRlc2NyaXB0aW9uKGlkLCAkZXZlbnQpXCI+PC9lby1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW2hpZGRlbl09XCJpZCAhPT0gYWN0aW9uRGVzY3JpcHRpb25cIj57e2VudHJ5LmFjdGlvbi5kZXNjcmlwdGlvbn19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiIFtoaWRkZW5dPVwiIWVudHJ5LmFjdGlvbi53YXJuaW5nXCI+e3tlbnRyeS5hY3Rpb24ud2FybmluZ319PC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBcIiAqbmdJZj1cImFjdGlvbkxpc3RzPy5jb21tb24ubGVuZ3RoID4gMFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLXRpdGxlXCIgdHJhbnNsYXRlPmVvLmFjdGlvbnMuZ3JvdXAuY29tbW9uPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uXCIgaWQ9XCJ7e2FjdGlvbkxpc3RFbnRyeS5pZH19XCIgKGtleWRvd24pPVwiaXNBcnJvd1VwT3JEb3duUHJlc3NlZCgkZXZlbnQpXCIgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb25MaXN0RW50cnkgb2YgYWN0aW9uTGlzdHMuY29tbW9uOyBsZXQgaSA9IGluZGV4XCIgKGNsaWNrKT1cIm9uQ2xpY2soYWN0aW9uTGlzdEVudHJ5KVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInthY3RpdmU6IGFjdGl2ZUFjdGlvbkluZGV4ID09PSBpfVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWN0aW9uOyBjb250ZXh0OiB7JGltcGxpY2l0OiBhY3Rpb25MaXN0RW50cnksIGlkOiAraX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDb21wb25lbnQgU3BlY2lmaWMgQWN0aW9ucyBTZWN0aW9uIC0tPlxuICAgIEBpZiAoYWN0aW9uTGlzdHM/LmNvbXBvbmVudFNwZWNpZmljLmxlbmd0aCA+IDApIHtcbiAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cC10aXRsZVwiIHRyYW5zbGF0ZT5lby5hY3Rpb25zLmdyb3VwLmluYm94PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uXCIgaWQ9XCJ7e2FjdGlvbkxpc3RFbnRyeS5pZH19XCIgKGtleWRvd24pPVwiaXNBcnJvd1VwT3JEb3duUHJlc3NlZCgkZXZlbnQpXCIgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb25MaXN0RW50cnkgb2YgYWN0aW9uTGlzdHMuY29tcG9uZW50U3BlY2lmaWM7IGxldCBpID0gaW5kZXhcIiAoY2xpY2spPVwib25DbGljayhhY3Rpb25MaXN0RW50cnkpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie2FjdGl2ZTogYWN0aXZlQWN0aW9uSW5kZXggPT09IGl9XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb247IGNvbnRleHQ6IHskaW1wbGljaXQ6IGFjdGlvbkxpc3RFbnRyeSwgaWQ6ICtpfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPGRpdiBjbGFzcz1cImdyb3VwXCIgKm5nSWY9XCIhbG9hZGluZzsgZWxzZSBsb2FkZXJcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25MaXN0cz8uZnVydGhlci5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC10aXRsZVwiIHRyYW5zbGF0ZT5lby5hY3Rpb25zLmdyb3VwLmZ1cnRoZXJfYWN0aW9uczwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uXCIgaWQ9XCJ7e2FjdGlvbkxpc3RFbnRyeS5pZH19XCIgKGtleWRvd24pPVwiaXNBcnJvd1VwT3JEb3duUHJlc3NlZCgkZXZlbnQpXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uTGlzdEVudHJ5IG9mIGFjdGlvbkxpc3RzLmZ1cnRoZXI7IGluZGV4IGFzIGlcIiBlb1ByZXZlbnREb3VibGVDbGlja1xuICAgICAgICAgIFtuZ0NsYXNzXT1cInthY3RpdmU6IGFjdGl2ZUFjdGlvbkluZGV4ID09PSBpICsgYWN0aW9uTGlzdHM/LmNvbW1vbi5sZW5ndGggfVwiXG4gICAgICAgICAgKGRlYm91bmNlQ2xpY2spPVwib25DbGljayhhY3Rpb25MaXN0RW50cnkpXCI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWN0aW9uOyBjb250ZXh0OiB7JGltcGxpY2l0OiBhY3Rpb25MaXN0RW50cnksIGlkOiAnZicraX1cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImdyb3VwXCJcbiAgICAgICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWFjdGlvbkxpc3RzPy5mdXJ0aGVyLmxlbmd0aCAmJiAhYWN0aW9uTGlzdHM/LmNvbW1vbi5sZW5ndGggJiYgIWFjdGlvbkxpc3RzPy5jb21wb25lbnRTcGVjaWZpYy5sZW5ndGhcIlxuICAgICAgW3N0eWxlLnRleHRBbGlnbl09XCInY2VudGVyJ1wiPlxuICAgICAge3sgJ2VvLmFjdGlvbi5ub3QuYXZhaWxhYmxlJyB8IHRyYW5zbGF0ZX19XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgI2xvYWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZW8tbG9hZGluZy1zcGlubmVyIFtzaXplXT1cIidtZWRpdW0nXCI+PC9lby1sb2FkaW5nLXNwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8IS0tIHN1YiBhY3Rpb25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiZ3JvdXAgc3ViXCIgKm5nSWY9XCJzdWJBY3Rpb25zTGlzdCAmJiAhc2hvd0NvbXBvbmVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdWItYWN0aW9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLXRpdGxlXCI+e3tzdWJBY3Rpb25zTGlzdEhlYWRlcn19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uIHN1YlwiICpuZ0Zvcj1cImxldCBhY3Rpb25MaXN0RW50cnkgb2Ygc3ViQWN0aW9uc0xpc3Q7IGluZGV4IGFzIGlcIlxuICAgICAgICAoY2xpY2spPVwib25DbGljayhhY3Rpb25MaXN0RW50cnkpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb247IGNvbnRleHQ6IHskaW1wbGljaXQ6IGFjdGlvbkxpc3RFbnRyeSwgaWQ6ICdzJytpfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdyb3VwLWJ1dHRvbnNcIj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsKClcIiB0cmFuc2xhdGU+ZW8uY3RhLmJ1dHRvbi5jYW5jZWw8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdj5cbiAgICA8bmctdGVtcGxhdGUgZW9BY3Rpb25Db21wb25lbnRBbmNob3I+PC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbiAgPGRpdj5cbiAgICA8bmctdGVtcGxhdGUgZW9FeHRBY3Rpb25Db21wb25lbnRBbmNob3I+PC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG5cbjwvZGl2PlxuIl19
@@ -19,18 +19,34 @@ export class ActionService {
19
19
  this.backend = backend;
20
20
  this.router = router;
21
21
  this.capabilitiesService = capabilitiesService;
22
- this.allActionComponents = [];
22
+ this.onFinishSource = new ReplaySubject(1);
23
+ this.onCancelSource = new ReplaySubject(1);
23
24
  this.actionsShowingSource = new ReplaySubject(1);
25
+ this.onFinish$ = this.onFinishSource.asObservable();
26
+ this.onCancel$ = this.onCancelSource.asObservable();
24
27
  this.actionsShowing$ = this.actionsShowingSource.asObservable();
28
+ this.allActionComponents = [];
29
+ this.componentSpecificActions = [];
25
30
  this.allActionComponents = actions.concat(custom_actions)
26
31
  .filter(entry => entry.target && !entry.isSubAction && !entry.disabled);
27
32
  this.workflowActionClass = WorkflowActionComponent;
28
33
  this.customActionClass = CustomActionsComponent;
29
34
  this.simpleWorkflowActionClass = SimpleWorkflowActionComponent;
30
35
  }
36
+ /**
37
+ * Checks if there are any component-specific actions.
38
+ *
39
+ * @returns {boolean} True if there are component-specific actions, false otherwise.
40
+ */
41
+ get hasComponentSpecificActions() {
42
+ return this.componentSpecificActions.length > 0;
43
+ }
31
44
  getActionsList(selection, viewContainerRef) {
32
45
  // todo: find better solution to exclude components for actions that need to be initialized later
33
- return this.getExecutableActionsListFromGivenActions(this.allActionComponents.filter(ac => ac !== WorkflowComponent && ac !== SimpleWorkflowActionComponent && ac !== CustomActionsComponent && ac !== WorkflowActionComponent), selection, viewContainerRef);
46
+ return this.getExecutableActionsListFromGivenActions(this.allActionComponents.filter(ac => ac !== WorkflowComponent && ac !== SimpleWorkflowActionComponent && ac !== CustomActionsComponent && ac !== WorkflowActionComponent), selection, viewContainerRef).pipe(map(actionListEntries => {
47
+ const componentSpecificActions = this.getComponentSpecificActions();
48
+ return [...actionListEntries, ...componentSpecificActions];
49
+ }));
34
50
  }
35
51
  getMoreActions(selection, viewContainerRef) {
36
52
  if (!this.isAllowedType(selection, ['sysemail'])) {
@@ -87,6 +103,41 @@ export class ActionService {
87
103
  return observableOf([]);
88
104
  }));
89
105
  }
106
+ /**
107
+ * Broadcasts a finish event to all subscribers.
108
+ */
109
+ broadcastFinish() {
110
+ this.onFinishSource.next();
111
+ }
112
+ /**
113
+ * Broadcasts a cancel event to all subscribers.
114
+ */
115
+ broadcastCancel() {
116
+ this.onCancelSource.next();
117
+ }
118
+ /**
119
+ * Sets the component-specific actions.
120
+ *
121
+ * @param {any[]} actions - An array of actions to be set as component-specific actions.
122
+ */
123
+ setComponentSpecificActions(actions) {
124
+ this.componentSpecificActions = actions;
125
+ }
126
+ /**
127
+ * Clears all component-specific actions.
128
+ */
129
+ clearComponentSpecificActions() {
130
+ this.componentSpecificActions = [];
131
+ }
132
+ /**
133
+ * Retrieves the component-specific actions.
134
+ *
135
+ * @returns {ActionListEntry[]} An array of component-specific actions.
136
+ * @private
137
+ */
138
+ getComponentSpecificActions() {
139
+ return this.componentSpecificActions;
140
+ }
90
141
  createExecutableActionListEntry(actionComponent, selection, viewContainerRef) {
91
142
  const componentFactory = this._componentFactoryResolver.resolveComponentFactory(actionComponent);
92
143
  const componentRef = viewContainerRef.createComponent(componentFactory);
@@ -182,4 +233,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImpor
182
233
  type: Inject,
183
234
  args: [CUSTOM_ACTIONS]
184
235
  }] }, { type: i0.ComponentFactoryResolver }, { type: i1.BpmService }, { type: i1.BackendService }, { type: i2.Router }, { type: i1.CapabilitiesService }] });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hY3Rpb25zL2FjdGlvbi1zZXJ2aWNlL2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLElBQUksa0JBQWtCLEVBQUUsRUFBRSxJQUFJLFlBQVksRUFBYyxhQUFhLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkcsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUVMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUVmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUd2RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUM3RixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSw2REFBNkQsQ0FBQztBQUMxRyxPQUFPLEVBQThGLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoSSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx3REFBd0QsQ0FBQzs7OztBQUV6RixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQVEsU0FBUyxDQUFDLENBQUM7QUFDNUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFRLGdCQUFnQixDQUFDLENBQUM7QUFVMUUsTUFBTSxPQUFPLGFBQWE7SUFVeEIsWUFBNkIsVUFBaUIsRUFBRSxFQUNaLGlCQUF3QixFQUFFLEVBQzFDLHlCQUFtRCxFQUNuRCxVQUFzQixFQUN0QixPQUF1QixFQUN2QixNQUFjLEVBQ2QsbUJBQXdDO1FB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T0FFRztJQUNJLFdBQVcsQ0FBQyxTQUFnQixFQUFFLE1BQU0sR0FBRyxZQUFZO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDaEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFrQixFQUFFLFlBQVksR0FBRyxFQUFFO1FBQ2pELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNsQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7OEdBck5VLGFBQWEsa0JBVUosT0FBTyxhQUNQLGNBQWM7a0hBWHZCLGFBQWE7OzJGQUFiLGFBQWE7a0JBRHpCLFVBQVU7OzBCQVdJLE1BQU07MkJBQUMsT0FBTzs7MEJBQ2QsTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmb3JrSm9pbiBhcyBvYnNlcnZhYmxlRm9ya0pvaW4sIG9mIGFzIG9ic2VydmFibGVPZiwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3N3aXRjaE1hcCwgY2F0Y2hFcnJvciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGlvbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7U2VsZWN0aW9uUmFuZ2V9IGZyb20gJy4uL3NlbGVjdGlvbi1yYW5nZS5lbnVtJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBY3Rpb25MaXN0RW50cnl9IGZyb20gJy4uL2ludGVyZmFjZXMvYWN0aW9uLWxpc3QtZW50cnknO1xuaW1wb3J0IHtXb3JrZmxvd0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vYWN0aW9ucy93b3JrZmxvdy1hY3Rpb24vd29ya2Zsb3ctYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0N1c3RvbUFjdGlvbnNDb21wb25lbnR9IGZyb20gJy4uL2FjdGlvbnMvY3VzdG9tLWFjdGlvbnMvY3VzdG9tLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7U2ltcGxlV29ya2Zsb3dBY3Rpb25Db21wb25lbnR9IGZyb20gJy4uL2FjdGlvbnMvd29ya2Zsb3ctYWN0aW9uL3NpbXBsZS13b3JrZmxvdy1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7QnBtU2VydmljZSwgRXhlY3V0YWJsZVByb2Nlc3MsIERtc09iamVjdCwgQ2FwYWJpbGl0aWVzU2VydmljZSwgQmFja2VuZFNlcnZpY2UsIEN1c3RvbUFjdGlvbiwgVXRpbHN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge1dvcmtmbG93Q29tcG9uZW50fSBmcm9tICcuLi9hY3Rpb25zL3dvcmtmbG93LWFjdGlvbi93b3JrZmxvdy93b3JrZmxvdy5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgQUNUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnlbXT4oJ0FDVElPTlMnKTtcbmV4cG9ydCBjb25zdCBDVVNUT01fQUNUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnlbXT4oJ0NVU1RPTV9BQ1RJT05TJyk7XG5cbi8vIGNvbW1hbmQgYnJvYWRjYXN0ZWQgdG8gbGlzdGVuaW5nIGNvbXBvbmVudHNcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uU2hvd0NvbW1hbmQge1xuICBzaG93OiBib29sZWFuO1xuICB0YXJnZXQ/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbjogYW55W107XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBY3Rpb25TZXJ2aWNlIHtcblxuICBwcml2YXRlIGFsbEFjdGlvbkNvbXBvbmVudHM6IGFueVtdID0gW107XG4gIHByaXZhdGUgd29ya2Zsb3dBY3Rpb25DbGFzcztcbiAgcHJpdmF0ZSBjdXN0b21BY3Rpb25DbGFzcztcbiAgcHJpdmF0ZSBzaW1wbGVXb3JrZmxvd0FjdGlvbkNsYXNzO1xuXG4gIHByaXZhdGUgYWN0aW9uc1Nob3dpbmdTb3VyY2UgPSBuZXcgUmVwbGF5U3ViamVjdDxBY3Rpb25TaG93Q29tbWFuZD4oMSk7XG4gIHB1YmxpYyBhY3Rpb25zU2hvd2luZyQ6IE9ic2VydmFibGU8QWN0aW9uU2hvd0NvbW1hbmQ+ID0gdGhpcy5hY3Rpb25zU2hvd2luZ1NvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEFDVElPTlMpIGFjdGlvbnM6IGFueVtdID0gW10sXG4gICAgICAgICAgICAgIEBJbmplY3QoQ1VTVE9NX0FDVElPTlMpIGN1c3RvbV9hY3Rpb25zOiBhbnlbXSA9IFtdLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICAgICAgcHJpdmF0ZSBicG1TZXJ2aWNlOiBCcG1TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGJhY2tlbmQ6IEJhY2tlbmRTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIGNhcGFiaWxpdGllc1NlcnZpY2U6IENhcGFiaWxpdGllc1NlcnZpY2UpIHtcblxuICAgIHRoaXMuYWxsQWN0aW9uQ29tcG9uZW50cyA9IGFjdGlvbnMuY29uY2F0KGN1c3RvbV9hY3Rpb25zKVxuICAgICAgLmZpbHRlcihlbnRyeSA9PiBlbnRyeS50YXJnZXQgJiYgIWVudHJ5LmlzU3ViQWN0aW9uICYmICFlbnRyeS5kaXNhYmxlZCk7XG5cbiAgICB0aGlzLndvcmtmbG93QWN0aW9uQ2xhc3MgPSBXb3JrZmxvd0FjdGlvbkNvbXBvbmVudDtcbiAgICB0aGlzLmN1c3RvbUFjdGlvbkNsYXNzID0gQ3VzdG9tQWN0aW9uc0NvbXBvbmVudDtcbiAgICB0aGlzLnNpbXBsZVdvcmtmbG93QWN0aW9uQ2xhc3MgPSBTaW1wbGVXb3JrZmxvd0FjdGlvbkNvbXBvbmVudDtcbiAgfVxuXG4gIGdldEFjdGlvbnNMaXN0KHNlbGVjdGlvbjogYW55W10sIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpOiBPYnNlcnZhYmxlPEFjdGlvbkxpc3RFbnRyeVtdPiB7XG5cbiAgICAvLyB0b2RvOiBmaW5kIGJldHRlciBzb2x1dGlvbiB0byBleGNsdWRlIGNvbXBvbmVudHMgZm9yIGFjdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGxhdGVyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RXhlY3V0YWJsZUFjdGlvbnNMaXN0RnJvbUdpdmVuQWN0aW9ucyhcbiAgICAgIHRoaXMuYWxsQWN0aW9uQ29tcG9uZW50cy5maWx0ZXIoYWMgPT4gYWMgIT09IFdvcmtmbG93Q29tcG9uZW50ICYmIGFjICE9PSBTaW1wbGVXb3JrZmxvd0FjdGlvbkNvbXBvbmVudCAmJiBhYyAhPT0gQ3VzdG9tQWN0aW9uc0NvbXBvbmVudCAmJiBhYyAhPT0gV29ya2Zsb3dBY3Rpb25Db21wb25lbnQpLFxuICAgICAgc2VsZWN0aW9uLFxuICAgICAgdmlld0NvbnRhaW5lclJlZlxuICAgICk7XG4gIH1cblxuICBnZXRNb3JlQWN0aW9ucyhzZWxlY3Rpb246IGFueVtdLCB2aWV3Q29udGFpbmVyUmVmPyk6IE9ic2VydmFibGU8QWN0aW9uTGlzdEVudHJ5W10+IHtcbiAgICBpZiAoIXRoaXMuaXNBbGxvd2VkVHlwZShzZWxlY3Rpb24sIFsnc3lzZW1haWwnXSkpIHtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoW10pO1xuICAgIH1cbiAgICByZXR1cm4gb2JzZXJ2YWJsZUZvcmtKb2luKFtcbiAgICAgIHRoaXMuY29sbGVjdFByb2Nlc3NBY3Rpb25zKHNlbGVjdGlvbiwgdmlld0NvbnRhaW5lclJlZiksXG4gICAgICB0aGlzLmNvbGxlY3RDdXN0b21BY3Rpb25zKHNlbGVjdGlvbiwgdmlld0NvbnRhaW5lclJlZilcbiAgICBdKS5waXBlKG1hcChyZXMgPT4gWy4uLnJlc1swXSwgLi4ucmVzWzFdXSkpO1xuICB9XG5cbiAgY29sbGVjdFByb2Nlc3NBY3Rpb25zKHNlbGVjdGlvbjogYW55W10sIHZpZXdDb250YWluZXJSZWYpOiBPYnNlcnZhYmxlPEFjdGlvbkxpc3RFbnRyeVtdPiB7XG4gICAgY29uc3QgZW5hYmxlV29ya2Zsb3cgPSB0aGlzLmNhcGFiaWxpdGllc1NlcnZpY2UuaGFzQ2FwYWJpbGl0eSgnYnBtJyk7XG5cbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsLnN0YXJ0c1dpdGgoJy92ZXJzaW9ucycpKSB7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKFtdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW5hYmxlV29ya2Zsb3cgPyB0aGlzLmJwbVNlcnZpY2UuZ2V0RXhlY3V0YWJsZVByb2Nlc3Nlc0ZvckRtc09iamVjdHMoc2VsZWN0aW9uKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzOiBFeGVjdXRhYmxlUHJvY2Vzc1tdKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWxsID0gW107XG4gICAgICAgICAgcmVzLmZvckVhY2goKGV4ZWN1dGFibGVQcm9jZXNzOiBFeGVjdXRhYmxlUHJvY2VzcykgPT4ge1xuXG4gICAgICAgICAgICBsZXQgYWN0aW9uQ29tcG9uZW50ID0gdGhpcy5zaW1wbGVXb3JrZmxvd0FjdGlvbkNsYXNzO1xuICAgICAgICAgICAgaWYgKGV4ZWN1dGFibGVQcm9jZXNzLmZvcm0pIHtcbiAgICAgICAgICAgICAgYWN0aW9uQ29tcG9uZW50ID0gdGhpcy53b3JrZmxvd0FjdGlvbkNsYXNzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uTGlzdEVudHJ5ID0gdGhpcy5jcmVhdGVFeGVjdXRhYmxlQWN0aW9uTGlzdEVudHJ5KGFjdGlvbkNvbXBvbmVudCwgc2VsZWN0aW9uLCB2aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgICAgIGFjdGlvbkxpc3RFbnRyeS5hY3Rpb25bJ2V4ZWN1dGFibGVQcm9jZXNzJ10gPSBleGVjdXRhYmxlUHJvY2VzcztcbiAgICAgICAgICAgIGFsbC5wdXNoKGFjdGlvbkxpc3RFbnRyeSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gYWxsO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlID0+IHtcbiAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKFtdKTtcbiAgICAgICAgfSlcbiAgICAgICkgOiBvYnNlcnZhYmxlT2YoW10pO1xuICB9XG5cbiAgY29sbGVjdEN1c3RvbUFjdGlvbnMoc2VsZWN0aW9uOiBhbnlbXSwgdmlld0NvbnRhaW5lclJlZik6IE9ic2VydmFibGU8QWN0aW9uTGlzdEVudHJ5W10+IHtcblxuICAgIGNvbnN0IHR5cGVzID0gc2VsZWN0aW9uLm1hcChpID0+IGkudHlwZU5hbWUpO1xuICAgIHJldHVybiB0aGlzLmdldEN1c3RvbUFjdGlvbnModHlwZXMpLnBpcGUobWFwKGN1c3RvbUFjdGlvbnMgPT4ge1xuICAgICAgcmV0dXJuIGN1c3RvbUFjdGlvbnMubGVuZ3RoID9cbiAgICAgICAgY3VzdG9tQWN0aW9ucy5tYXAoY3VzdG9tQWN0aW9uID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb25zUmVmOiBWaWV3Q29udGFpbmVyUmVmID0gdGhpcy5jdXN0b21BY3Rpb25DbGFzcztcbiAgICAgICAgICBjb25zdCBhY3Rpb25MaXN0RW50cnkgPSB0aGlzLmNyZWF0ZUV4ZWN1dGFibGVBY3Rpb25MaXN0RW50cnkoYWN0aW9uc1JlZiwgc2VsZWN0aW9uLCB2aWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgICBhY3Rpb25MaXN0RW50cnkuYWN0aW9uWydhY3Rpb24nXSA9IGN1c3RvbUFjdGlvbjtcbiAgICAgICAgICByZXR1cm4gYWN0aW9uTGlzdEVudHJ5O1xuICAgICAgICB9KSA6IFtdO1xuICAgIH0pKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh0YXJnZXRBY3Rpb25zTGlzdCA9PiB7XG4gICAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSB0YXJnZXRBY3Rpb25zTGlzdC5tYXAoKGFjdGlvbkxpc3RFbnRyeTogQWN0aW9uTGlzdEVudHJ5KSA9PiBhY3Rpb25MaXN0RW50cnkuYWN0aW9uLmlzRXhlY3V0YWJsZShzZWxlY3Rpb24pLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXhlY3V0YWJsZSA9PiBBcnJheS5pc0FycmF5KGV4ZWN1dGFibGUpID8gc2VsZWN0aW9uLmZpbHRlcigocywgaSkgPT4gZXhlY3V0YWJsZVtpXSkgOiBleGVjdXRhYmxlID8gc2VsZWN0aW9uIDogW10pLFxuICAgICAgICAgICAgbWFwKGF2YWlsYWJsZSA9PiB7XG4gICAgICAgICAgICAgIGFjdGlvbkxpc3RFbnRyeS5hdmFpbGFibGVTZWxlY3Rpb24gPSBhdmFpbGFibGU7XG4gICAgICAgICAgICAgIHJldHVybiBhY3Rpb25MaXN0RW50cnk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkpO1xuXG4gICAgICAgICAgcmV0dXJuICBvYnNlcnZhYmxlcy5sZW5ndGggPyBvYnNlcnZhYmxlRm9ya0pvaW4ob2JzZXJ2YWJsZXMpLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGlvbkxpc3RFbnRyeXM6IEFjdGlvbkxpc3RFbnRyeVtdKSA9PiBhY3Rpb25MaXN0RW50cnlzLmZpbHRlciggYSA9PiB0aGlzLmlzUmFuZ2VBbGxvd2VkKGEuYWN0aW9uLCBhLmF2YWlsYWJsZVNlbGVjdGlvbi5sZW5ndGgpKSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVPZihbXSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkgOiBvYnNlcnZhYmxlT2YoW10pO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlID0+IHtcbiAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKFtdKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUV4ZWN1dGFibGVBY3Rpb25MaXN0RW50cnkoYWN0aW9uQ29tcG9uZW50OiBhbnksIHNlbGVjdGlvbjogYW55W10sIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpOiBBY3Rpb25MaXN0RW50cnkge1xuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoYWN0aW9uQ29tcG9uZW50KTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgICBjb25zdCBlbnRyeTogQWN0aW9uTGlzdEVudHJ5ID0ge1xuICAgICAgaWQ6IGNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmxvY2FsTmFtZSxcbiAgICAgIGFjdGlvbjogY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIEFjdGlvbixcbiAgICAgIHRhcmdldDogYWN0aW9uQ29tcG9uZW50LnRhcmdldCxcbiAgICAgIGF2YWlsYWJsZVNlbGVjdGlvbjogc2VsZWN0aW9uXG4gICAgfTtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cblxuXG4gIGdldEV4ZWN1dGFibGVBY3Rpb25zTGlzdEZyb21HaXZlbkFjdGlvbnMoYWxsQWN0aW9uQ29tcG9uZW50czogYW55W10sIHNlbGVjdGlvbjogYW55W10sIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpOiBPYnNlcnZhYmxlPEFjdGlvbkxpc3RFbnRyeVtdPiB7XG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ubGVuZ3RoKSB7XG5cbiAgICAgIGNvbnN0IGFsbEFjdGlvbnNMaXN0OiBBY3Rpb25MaXN0RW50cnlbXSA9IGFsbEFjdGlvbkNvbXBvbmVudHNcbiAgICAgICAgLmZpbHRlcihhY3Rpb25Db21wb25lbnQgPT4gc2VsZWN0aW9uWzBdIGluc3RhbmNlb2YgYWN0aW9uQ29tcG9uZW50LnRhcmdldClcbiAgICAgICAgLm1hcCgoYWN0aW9uQ29tcG9uZW50OiBhbnkpID0+IHRoaXMuY3JlYXRlRXhlY3V0YWJsZUFjdGlvbkxpc3RFbnRyeShhY3Rpb25Db21wb25lbnQsIFtdLCB2aWV3Q29udGFpbmVyUmVmKSk7XG5cbiAgICAgIGNvbnN0IHRhcmdldEFjdGlvbnNMaXN0ID0gYWxsQWN0aW9uc0xpc3QuZmlsdGVyKChhY3Rpb25MaXN0RW50cnk6IGFueSkgPT4gc2VsZWN0aW9uWzBdIGluc3RhbmNlb2YgYWN0aW9uTGlzdEVudHJ5LnRhcmdldCk7XG5cbiAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gdGFyZ2V0QWN0aW9uc0xpc3QubWFwKChhY3Rpb25MaXN0RW50cnk6IEFjdGlvbkxpc3RFbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBvYnMgPSBzZWxlY3Rpb24ubWFwKGl0ZW0gPT4gYWN0aW9uTGlzdEVudHJ5LmFjdGlvbi5pc0V4ZWN1dGFibGUoaXRlbSkpO1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZUZvcmtKb2luKG9icykucGlwZShcbiAgICAgICAgICBtYXAoZXhlY3V0YWJsZSA9PiBBcnJheS5pc0FycmF5KGV4ZWN1dGFibGUpID8gc2VsZWN0aW9uLmZpbHRlcigocywgaSkgPT4gZXhlY3V0YWJsZVtpXSkgOiBleGVjdXRhYmxlID8gc2VsZWN0aW9uIDogW10pLFxuICAgICAgICAgIG1hcChhdmFpbGFibGUgPT4ge1xuICAgICAgICAgICAgYWN0aW9uTGlzdEVudHJ5LmF2YWlsYWJsZVNlbGVjdGlvbiA9IGF2YWlsYWJsZTtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb25MaXN0RW50cnk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZXMubGVuZ3RoID8gb2JzZXJ2YWJsZUZvcmtKb2luKG9ic2VydmFibGVzKS5waXBlKFxuICAgICAgICBtYXAoKGFjdGlvbkxpc3RFbnRyeXM6IEFjdGlvbkxpc3RFbnRyeVtdKSA9PiBhY3Rpb25MaXN0RW50cnlzLmZpbHRlciggYSA9PiB0aGlzLmlzUmFuZ2VBbGxvd2VkKGEuYWN0aW9uLCBhLmF2YWlsYWJsZVNlbGVjdGlvbi5sZW5ndGgpKVxuICAgICAgICAuc29ydChVdGlscy5zb3J0VmFsdWVzKCdhY3Rpb24ucHJpb3JpdHknKSkpLFxuICAgICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoW10pO1xuICAgICAgICB9KVxuICAgICAgKSA6IG9ic2VydmFibGVPZihbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoW10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGFjdGlvbiBpcyBhbGxvd2VkIGZvciBzaW5nbGUgb3QgbXVsdGlwbGUgc2VsZWN0aW9uXG4gICAqIEBwYXJhbSBhY3Rpb25cbiAgICogQHBhcmFtIGl0ZW1zQ291bnRcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByaXZhdGUgaXNSYW5nZUFsbG93ZWQoYWN0aW9uLCBpdGVtc0NvdW50KSB7XG4gICAgbGV0IGlzUmFuZ2VBbGxvd2VkID0gdHJ1ZTtcbiAgICBzd2l0Y2ggKGFjdGlvbi5yYW5nZSkge1xuICAgICAgY2FzZSBTZWxlY3Rpb25SYW5nZS5TSU5HTEVfU0VMRUNUOlxuICAgICAgICBpc1JhbmdlQWxsb3dlZCA9IGl0ZW1zQ291bnQgPT09IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTZWxlY3Rpb25SYW5nZS5NVUxUSV9TRUxFQ1Q6XG4gICAgICAgIGlzUmFuZ2VBbGxvd2VkID0gaXRlbXNDb3VudCA+PSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2VsZWN0aW9uUmFuZ2UuTVVMVElfU0VMRUNUX09OTFk6XG4gICAgICAgIGlzUmFuZ2VBbGxvd2VkID0gaXRlbXNDb3VudCA+IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBpc1JhbmdlQWxsb3dlZDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHRlciBmb3IgdGhlIEN1c3RvbSBBY3Rpb25zXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlcyBMaXN0IG9mIHR5cGVzIHRvIGZldGNoIGN1c3RvbSBhY3Rpb25zIGZvclxuICAgKiBAcmV0dXJucyBMaXN0IG9mIGF2YWlsYWJsZSBjdXN0b20gYWN0aW9uc1xuICAgKi9cbiAgZ2V0Q3VzdG9tQWN0aW9ucyh0eXBlczogc3RyaW5nW10gPSBbXSk6IE9ic2VydmFibGU8Q3VzdG9tQWN0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldChgL3VpL2FjdGlvbnM/dHlwZXM9JHt0eXBlcy5qb2luKCcsJyl9YClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHJlcyBhcyBDdXN0b21BY3Rpb25bXSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBnbG9iYWwgYWN0aW9ucyBwYW5lbFxuICAgKi9cbiAgcHVibGljIHNob3dBY3Rpb25zKHNlbGVjdGlvbjogYW55W10sIHRhcmdldCA9ICdETVNfT0JKRUNUJykge1xuICAgIHRoaXMuYWN0aW9uc1Nob3dpbmdTb3VyY2UubmV4dCh7c2hvdzogdHJ1ZSwgc2VsZWN0aW9uLCB0YXJnZXR9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIGdsb2JhbCBhY3Rpb25zIHBhbmVsXG4gICAqL1xuICBwdWJsaWMgaGlkZUFjdGlvbnMoKSB7XG4gICAgdGhpcy5hY3Rpb25zU2hvd2luZ1NvdXJjZS5uZXh0KHtzaG93OiBmYWxzZSwgc2VsZWN0aW9uOiBbXX0pO1xuICB9XG5cbiAgaXNBbGxvd2VkVHlwZShpdGVtczogRG1zT2JqZWN0W10sIHJlamVjdGVkVHlwZSA9IFtdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGlzYWJsZWRUeXBlID0gcmVqZWN0ZWRUeXBlO1xuICAgIHJldHVybiAhIWl0ZW1zLmZpbmQoaXRlbSA9PiAhZGlzYWJsZWRUeXBlLnNvbWUodHlwZSA9PiBpdGVtLnR5cGVOYW1lID09PSB0eXBlKSk7XG4gIH1cbn1cbiJdfQ==
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hY3Rpb25zL2FjdGlvbi1zZXJ2aWNlL2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLElBQUksa0JBQWtCLEVBQUUsRUFBRSxJQUFJLFlBQVksRUFBYyxhQUFhLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkcsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUVMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUVmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUd2RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUM3RixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUMxRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSw2REFBNkQsQ0FBQztBQUMxRyxPQUFPLEVBQThGLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUNoSSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx3REFBd0QsQ0FBQzs7OztBQUV6RixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQVEsU0FBUyxDQUFDLENBQUM7QUFDNUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFRLGdCQUFnQixDQUFDLENBQUM7QUFVMUUsTUFBTSxPQUFPLGFBQWE7SUFnQnhCLFlBQTZCLFVBQWlCLEVBQUUsRUFDdEIsaUJBQXdCLEVBQUUsRUFDMUMseUJBQW1ELEVBQ25ELFVBQXNCLEVBQ3RCLE9BQXVCLEVBQ3ZCLE1BQWMsRUFDZCxtQkFBd0M7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LFlBQVk7UUFDeEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVztRQUNoQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWtCLEVBQUUsWUFBWSxHQUFHLEVBQUU7UUFDakQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEYsQ0FBQzs4R0FsUlUsYUFBYSxrQkFnQkosT0FBTyxhQUNqQixjQUFjO2tIQWpCYixhQUFhOzsyRkFBYixhQUFhO2tCQUR6QixVQUFVOzswQkFpQkksTUFBTTsyQkFBQyxPQUFPOzswQkFDeEIsTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmb3JrSm9pbiBhcyBvYnNlcnZhYmxlRm9ya0pvaW4sIG9mIGFzIG9ic2VydmFibGVPZiwgT2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3N3aXRjaE1hcCwgY2F0Y2hFcnJvciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGlvbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7U2VsZWN0aW9uUmFuZ2V9IGZyb20gJy4uL3NlbGVjdGlvbi1yYW5nZS5lbnVtJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBY3Rpb25MaXN0RW50cnl9IGZyb20gJy4uL2ludGVyZmFjZXMvYWN0aW9uLWxpc3QtZW50cnknO1xuaW1wb3J0IHtXb3JrZmxvd0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi4vYWN0aW9ucy93b3JrZmxvdy1hY3Rpb24vd29ya2Zsb3ctYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0N1c3RvbUFjdGlvbnNDb21wb25lbnR9IGZyb20gJy4uL2FjdGlvbnMvY3VzdG9tLWFjdGlvbnMvY3VzdG9tLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7U2ltcGxlV29ya2Zsb3dBY3Rpb25Db21wb25lbnR9IGZyb20gJy4uL2FjdGlvbnMvd29ya2Zsb3ctYWN0aW9uL3NpbXBsZS13b3JrZmxvdy1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7QnBtU2VydmljZSwgRXhlY3V0YWJsZVByb2Nlc3MsIERtc09iamVjdCwgQ2FwYWJpbGl0aWVzU2VydmljZSwgQmFja2VuZFNlcnZpY2UsIEN1c3RvbUFjdGlvbiwgVXRpbHN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge1dvcmtmbG93Q29tcG9uZW50fSBmcm9tICcuLi9hY3Rpb25zL3dvcmtmbG93LWFjdGlvbi93b3JrZmxvdy93b3JrZmxvdy5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgQUNUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnlbXT4oJ0FDVElPTlMnKTtcbmV4cG9ydCBjb25zdCBDVVNUT01fQUNUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxhbnlbXT4oJ0NVU1RPTV9BQ1RJT05TJyk7XG5cbi8vIGNvbW1hbmQgYnJvYWRjYXN0ZWQgdG8gbGlzdGVuaW5nIGNvbXBvbmVudHNcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uU2hvd0NvbW1hbmQge1xuICBzaG93OiBib29sZWFuO1xuICB0YXJnZXQ/OiBzdHJpbmc7XG4gIHNlbGVjdGlvbjogYW55W107XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBY3Rpb25TZXJ2aWNlIHtcblxuICBvbkZpbmlzaFNvdXJjZSA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuICBvbkNhbmNlbFNvdXJjZSA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuICBhY3Rpb25zU2hvd2luZ1NvdXJjZSA9IG5ldyBSZXBsYXlTdWJqZWN0PEFjdGlvblNob3dDb21tYW5kPigxKTtcblxuICBvbkZpbmlzaCQgPSB0aGlzLm9uRmluaXNoU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICBvbkNhbmNlbCQgPSB0aGlzLm9uQ2FuY2VsU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICBhY3Rpb25zU2hvd2luZyQ6IE9ic2VydmFibGU8QWN0aW9uU2hvd0NvbW1hbmQ+ID0gdGhpcy5hY3Rpb25zU2hvd2luZ1NvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGFsbEFjdGlvbkNvbXBvbmVudHM6IGFueVtdID0gW107XG4gIHByaXZhdGUgd29ya2Zsb3dBY3Rpb25DbGFzcztcbiAgcHJpdmF0ZSBjdXN0b21BY3Rpb25DbGFzcztcbiAgcHJpdmF0ZSBzaW1wbGVXb3JrZmxvd0FjdGlvbkNsYXNzO1xuICBwcml2YXRlIGNvbXBvbmVudFNwZWNpZmljQWN0aW9uczogQWN0aW9uTGlzdEVudHJ5W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEFDVElPTlMpIGFjdGlvbnM6IGFueVtdID0gW10sXG4gICAgQEluamVjdChDVVNUT01fQUNUSU9OUykgY3VzdG9tX2FjdGlvbnM6IGFueVtdID0gW10sXG4gICAgcHJpdmF0ZSBfY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBicG1TZXJ2aWNlOiBCcG1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFja2VuZDogQmFja2VuZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGNhcGFiaWxpdGllc1NlcnZpY2U6IENhcGFiaWxpdGllc1NlcnZpY2UpIHtcblxuICAgIHRoaXMuYWxsQWN0aW9uQ29tcG9uZW50cyA9IGFjdGlvbnMuY29uY2F0KGN1c3RvbV9hY3Rpb25zKVxuICAgICAgLmZpbHRlcihlbnRyeSA9PiBlbnRyeS50YXJnZXQgJiYgIWVudHJ5LmlzU3ViQWN0aW9uICYmICFlbnRyeS5kaXNhYmxlZCk7XG5cbiAgICB0aGlzLndvcmtmbG93QWN0aW9uQ2xhc3MgPSBXb3JrZmxvd0FjdGlvbkNvbXBvbmVudDtcbiAgICB0aGlzLmN1c3RvbUFjdGlvbkNsYXNzID0gQ3VzdG9tQWN0aW9uc0NvbXBvbmVudDtcbiAgICB0aGlzLnNpbXBsZVdvcmtmbG93QWN0aW9uQ2xhc3MgPSBTaW1wbGVXb3JrZmxvd0FjdGlvbkNvbXBvbmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlcmUgYXJlIGFueSBjb21wb25lbnQtc3BlY2lmaWMgYWN0aW9ucy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlcmUgYXJlIGNvbXBvbmVudC1zcGVjaWZpYyBhY3Rpb25zLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBnZXQgaGFzQ29tcG9uZW50U3BlY2lmaWNBY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNwZWNpZmljQWN0aW9ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0QWN0aW9uc0xpc3Qoc2VsZWN0aW9uOiBhbnlbXSwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZik6IE9ic2VydmFibGU8QWN0aW9uTGlzdEVudHJ5W10+IHtcblxuICAgIC8vIHRvZG86IGZpbmQgYmV0dGVyIHNvbHV0aW9uIHRvIGV4Y2x1ZGUgY29tcG9uZW50cyBmb3IgYWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgbGF0ZXJcbiAgICByZXR1cm4gdGhpcy5nZXRFeGVjdXRhYmxlQWN0aW9uc0xpc3RGcm9tR2l2ZW5BY3Rpb25zKFxuICAgICAgdGhpcy5hbGxBY3Rpb25Db21wb25lbnRzLmZpbHRlcihhYyA9PiBhYyAhPT0gV29ya2Zsb3dDb21wb25lbnQgJiYgYWMgIT09IFNpbXBsZVdvcmtmbG93QWN0aW9uQ29tcG9uZW50ICYmIGFjICE9PSBDdXN0b21BY3Rpb25zQ29tcG9uZW50ICYmIGFjICE9PSBXb3JrZmxvd0FjdGlvbkNvbXBvbmVudCksXG4gICAgICBzZWxlY3Rpb24sXG4gICAgICB2aWV3Q29udGFpbmVyUmVmXG4gICAgKS5waXBlKFxuICAgICAgbWFwKGFjdGlvbkxpc3RFbnRyaWVzID0+IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50U3BlY2lmaWNBY3Rpb25zID0gdGhpcy5nZXRDb21wb25lbnRTcGVjaWZpY0FjdGlvbnMoKTtcbiAgICAgICAgcmV0dXJuIFsuLi5hY3Rpb25MaXN0RW50cmllcywgLi4uY29tcG9uZW50U3BlY2lmaWNBY3Rpb25zXTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldE1vcmVBY3Rpb25zKHNlbGVjdGlvbjogYW55W10sIHZpZXdDb250YWluZXJSZWY/KTogT2JzZXJ2YWJsZTxBY3Rpb25MaXN0RW50cnlbXT4ge1xuICAgIGlmICghdGhpcy5pc0FsbG93ZWRUeXBlKHNlbGVjdGlvbiwgWydzeXNlbWFpbCddKSkge1xuICAgICAgcmV0dXJuIG9ic2VydmFibGVPZihbXSk7XG4gICAgfVxuICAgIHJldHVybiBvYnNlcnZhYmxlRm9ya0pvaW4oW1xuICAgICAgdGhpcy5jb2xsZWN0UHJvY2Vzc0FjdGlvbnMoc2VsZWN0aW9uLCB2aWV3Q29udGFpbmVyUmVmKSxcbiAgICAgIHRoaXMuY29sbGVjdEN1c3RvbUFjdGlvbnMoc2VsZWN0aW9uLCB2aWV3Q29udGFpbmVyUmVmKVxuICAgIF0pLnBpcGUobWFwKHJlcyA9PiBbLi4ucmVzWzBdLCAuLi5yZXNbMV1dKSk7XG4gIH1cblxuICBjb2xsZWN0UHJvY2Vzc0FjdGlvbnMoc2VsZWN0aW9uOiBhbnlbXSwgdmlld0NvbnRhaW5lclJlZik6IE9ic2VydmFibGU8QWN0aW9uTGlzdEVudHJ5W10+IHtcbiAgICBjb25zdCBlbmFibGVXb3JrZmxvdyA9IHRoaXMuY2FwYWJpbGl0aWVzU2VydmljZS5oYXNDYXBhYmlsaXR5KCdicG0nKTtcblxuICAgIGlmICh0aGlzLnJvdXRlci51cmwuc3RhcnRzV2l0aCgnL3ZlcnNpb25zJykpIHtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoW10pO1xuICAgIH1cblxuICAgIHJldHVybiBlbmFibGVXb3JrZmxvdyA/IHRoaXMuYnBtU2VydmljZS5nZXRFeGVjdXRhYmxlUHJvY2Vzc2VzRm9yRG1zT2JqZWN0cyhzZWxlY3Rpb24pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXM6IEV4ZWN1dGFibGVQcm9jZXNzW10pID0+IHtcbiAgICAgICAgICBjb25zdCBhbGwgPSBbXTtcbiAgICAgICAgICByZXMuZm9yRWFjaCgoZXhlY3V0YWJsZVByb2Nlc3M6IEV4ZWN1dGFibGVQcm9jZXNzKSA9PiB7XG5cbiAgICAgICAgICAgIGxldCBhY3Rpb25Db21wb25lbnQgPSB0aGlzLnNpbXBsZVdvcmtmbG93QWN0aW9uQ2xhc3M7XG4gICAgICAgICAgICBpZiAoZXhlY3V0YWJsZVByb2Nlc3MuZm9ybSkge1xuICAgICAgICAgICAgICBhY3Rpb25Db21wb25lbnQgPSB0aGlzLndvcmtmbG93QWN0aW9uQ2xhc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25MaXN0RW50cnkgPSB0aGlzLmNyZWF0ZUV4ZWN1dGFibGVBY3Rpb25MaXN0RW50cnkoYWN0aW9uQ29tcG9uZW50LCBzZWxlY3Rpb24sIHZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICAgICAgYWN0aW9uTGlzdEVudHJ5LmFjdGlvblsnZXhlY3V0YWJsZVByb2Nlc3MnXSA9IGV4ZWN1dGFibGVQcm9jZXNzO1xuICAgICAgICAgICAgYWxsLnB1c2goYWN0aW9uTGlzdEVudHJ5KTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBhbGw7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlT2YoW10pO1xuICAgICAgICB9KVxuICAgICAgKSA6IG9ic2VydmFibGVPZihbXSk7XG4gIH1cblxuICBjb2xsZWN0Q3VzdG9tQWN0aW9ucyhzZWxlY3Rpb246IGFueVtdLCB2aWV3Q29udGFpbmVyUmVmKTogT2JzZXJ2YWJsZTxBY3Rpb25MaXN0RW50cnlbXT4ge1xuXG4gICAgY29uc3QgdHlwZXMgPSBzZWxlY3Rpb24ubWFwKGkgPT4gaS50eXBlTmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VzdG9tQWN0aW9ucyh0eXBlcykucGlwZShtYXAoY3VzdG9tQWN0aW9ucyA9PiB7XG4gICAgICByZXR1cm4gY3VzdG9tQWN0aW9ucy5sZW5ndGggP1xuICAgICAgICBjdXN0b21BY3Rpb25zLm1hcChjdXN0b21BY3Rpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnNSZWY6IFZpZXdDb250YWluZXJSZWYgPSB0aGlzLmN1c3RvbUFjdGlvbkNsYXNzO1xuICAgICAgICAgIGNvbnN0IGFjdGlvbkxpc3RFbnRyeSA9IHRoaXMuY3JlYXRlRXhlY3V0YWJsZUFjdGlvbkxpc3RFbnRyeShhY3Rpb25zUmVmLCBzZWxlY3Rpb24sIHZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICAgIGFjdGlvbkxpc3RFbnRyeS5hY3Rpb25bJ2FjdGlvbiddID0gY3VzdG9tQWN0aW9uO1xuICAgICAgICAgIHJldHVybiBhY3Rpb25MaXN0RW50cnk7XG4gICAgICAgIH0pIDogW107XG4gICAgfSkpXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHRhcmdldEFjdGlvbnNMaXN0ID0+IHtcbiAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IHRhcmdldEFjdGlvbnNMaXN0Lm1hcCgoYWN0aW9uTGlzdEVudHJ5OiBBY3Rpb25MaXN0RW50cnkpID0+IGFjdGlvbkxpc3RFbnRyeS5hY3Rpb24uaXNFeGVjdXRhYmxlKHNlbGVjdGlvbikucGlwZShcbiAgICAgICAgICAgIG1hcChleGVjdXRhYmxlID0+IEFycmF5LmlzQXJyYXkoZXhlY3V0YWJsZSkgPyBzZWxlY3Rpb24uZmlsdGVyKChzLCBpKSA9PiBleGVjdXRhYmxlW2ldKSA6IGV4ZWN1dGFibGUgPyBzZWxlY3Rpb24gOiBbXSksXG4gICAgICAgICAgICBtYXAoYXZhaWxhYmxlID0+IHtcbiAgICAgICAgICAgICAgYWN0aW9uTGlzdEVudHJ5LmF2YWlsYWJsZVNlbGVjdGlvbiA9IGF2YWlsYWJsZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbkxpc3RFbnRyeTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSk7XG5cbiAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZXMubGVuZ3RoID8gb2JzZXJ2YWJsZUZvcmtKb2luKG9ic2VydmFibGVzKS5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpb25MaXN0RW50cnlzOiBBY3Rpb25MaXN0RW50cnlbXSkgPT4gYWN0aW9uTGlzdEVudHJ5cy5maWx0ZXIoYSA9PiB0aGlzLmlzUmFuZ2VBbGxvd2VkKGEuYWN0aW9uLCBhLmF2YWlsYWJsZVNlbGVjdGlvbi5sZW5ndGgpKSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVPZihbXSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkgOiBvYnNlcnZhYmxlT2YoW10pO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlID0+IHtcbiAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZU9mKFtdKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQnJvYWRjYXN0cyBhIGZpbmlzaCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqL1xuICBicm9hZGNhc3RGaW5pc2goKTogdm9pZCB7XG4gICAgdGhpcy5vbkZpbmlzaFNvdXJjZS5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogQnJvYWRjYXN0cyBhIGNhbmNlbCBldmVudCB0byBhbGwgc3Vic2NyaWJlcnMuXG4gICAqL1xuICBicm9hZGNhc3RDYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5vbkNhbmNlbFNvdXJjZS5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgY29tcG9uZW50LXNwZWNpZmljIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55W119IGFjdGlvbnMgLSBBbiBhcnJheSBvZiBhY3Rpb25zIHRvIGJlIHNldCBhcyBjb21wb25lbnQtc3BlY2lmaWMgYWN0aW9ucy5cbiAgICovXG4gIHNldENvbXBvbmVudFNwZWNpZmljQWN0aW9ucyhhY3Rpb25zOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9uZW50U3BlY2lmaWNBY3Rpb25zID0gYWN0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGNvbXBvbmVudC1zcGVjaWZpYyBhY3Rpb25zLlxuICAgKi9cbiAgY2xlYXJDb21wb25lbnRTcGVjaWZpY0FjdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnRTcGVjaWZpY0FjdGlvbnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGNvbXBvbmVudC1zcGVjaWZpYyBhY3Rpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QWN0aW9uTGlzdEVudHJ5W119IEFuIGFycmF5IG9mIGNvbXBvbmVudC1zcGVjaWZpYyBhY3Rpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb21wb25lbnRTcGVjaWZpY0FjdGlvbnMoKTogQWN0aW9uTGlzdEVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNwZWNpZmljQWN0aW9ucztcbiAgfVxuXG5cbiAgcHJpdmF0ZSBjcmVhdGVFeGVjdXRhYmxlQWN0aW9uTGlzdEVudHJ5KGFjdGlvbkNvbXBvbmVudDogYW55LCBzZWxlY3Rpb246IGFueVtdLCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKTogQWN0aW9uTGlzdEVudHJ5IHtcbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGFjdGlvbkNvbXBvbmVudCk7XG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgY29uc3QgZW50cnk6IEFjdGlvbkxpc3RFbnRyeSA9IHtcbiAgICAgIGlkOiBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5sb2NhbE5hbWUsXG4gICAgICBhY3Rpb246IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBBY3Rpb24sXG4gICAgICB0YXJnZXQ6IGFjdGlvbkNvbXBvbmVudC50YXJnZXQsXG4gICAgICBhdmFpbGFibGVTZWxlY3Rpb246IHNlbGVjdGlvblxuICAgIH07XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cblxuICBnZXRFeGVjdXRhYmxlQWN0aW9uc0xpc3RGcm9tR2l2ZW5BY3Rpb25zKGFsbEFjdGlvbkNvbXBvbmVudHM6IGFueVtdLCBzZWxlY3Rpb246IGFueVtdLCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKTogT2JzZXJ2YWJsZTxBY3Rpb25MaXN0RW50cnlbXT4ge1xuICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLmxlbmd0aCkge1xuXG4gICAgICBjb25zdCBhbGxBY3Rpb25zTGlzdDogQWN0aW9uTGlzdEVudHJ5W10gPSBhbGxBY3Rpb25Db21wb25lbnRzXG4gICAgICAgIC5maWx0ZXIoYWN0aW9uQ29tcG9uZW50ID0+IHNlbGVjdGlvblswXSBpbnN0YW5jZW9mIGFjdGlvbkNvbXBvbmVudC50YXJnZXQpXG4gICAgICAgIC5tYXAoKGFjdGlvbkNvbXBvbmVudDogYW55KSA9PiB0aGlzLmNyZWF0ZUV4ZWN1dGFibGVBY3Rpb25MaXN0RW50cnkoYWN0aW9uQ29tcG9uZW50LCBbXSwgdmlld0NvbnRhaW5lclJlZikpO1xuXG4gICAgICBjb25zdCB0YXJnZXRBY3Rpb25zTGlzdCA9IGFsbEFjdGlvbnNMaXN0LmZpbHRlcigoYWN0aW9uTGlzdEVudHJ5OiBhbnkpID0+IHNlbGVjdGlvblswXSBpbnN0YW5jZW9mIGFjdGlvbkxpc3RFbnRyeS50YXJnZXQpO1xuXG4gICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IHRhcmdldEFjdGlvbnNMaXN0Lm1hcCgoYWN0aW9uTGlzdEVudHJ5OiBBY3Rpb25MaXN0RW50cnkpID0+IHtcbiAgICAgICAgY29uc3Qgb2JzID0gc2VsZWN0aW9uLm1hcChpdGVtID0+IGFjdGlvbkxpc3RFbnRyeS5hY3Rpb24uaXNFeGVjdXRhYmxlKGl0ZW0pKTtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGVGb3JrSm9pbihvYnMpLnBpcGUoXG4gICAgICAgICAgbWFwKGV4ZWN1dGFibGUgPT4gQXJyYXkuaXNBcnJheShleGVjdXRhYmxlKSA/IHNlbGVjdGlvbi5maWx0ZXIoKHMsIGkpID0+IGV4ZWN1dGFibGVbaV0pIDogZXhlY3V0YWJsZSA/IHNlbGVjdGlvbiA6IFtdKSxcbiAgICAgICAgICBtYXAoYXZhaWxhYmxlID0+IHtcbiAgICAgICAgICAgIGFjdGlvbkxpc3RFbnRyeS5hdmFpbGFibGVTZWxlY3Rpb24gPSBhdmFpbGFibGU7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uTGlzdEVudHJ5O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9ic2VydmFibGVzLmxlbmd0aCA/IG9ic2VydmFibGVGb3JrSm9pbihvYnNlcnZhYmxlcykucGlwZShcbiAgICAgICAgbWFwKChhY3Rpb25MaXN0RW50cnlzOiBBY3Rpb25MaXN0RW50cnlbXSkgPT4gYWN0aW9uTGlzdEVudHJ5cy5maWx0ZXIoYSA9PiB0aGlzLmlzUmFuZ2VBbGxvd2VkKGEuYWN0aW9uLCBhLmF2YWlsYWJsZVNlbGVjdGlvbi5sZW5ndGgpKVxuICAgICAgICAgIC5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2FjdGlvbi5wcmlvcml0eScpKSksXG4gICAgICAgIGNhdGNoRXJyb3IoZSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVPZihbXSk7XG4gICAgICAgIH0pXG4gICAgICApIDogb2JzZXJ2YWJsZU9mKFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9ic2VydmFibGVPZihbXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgYWN0aW9uIGlzIGFsbG93ZWQgZm9yIHNpbmdsZSBvdCBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICogQHBhcmFtIGFjdGlvblxuICAgKiBAcGFyYW0gaXRlbXNDb3VudFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBpc1JhbmdlQWxsb3dlZChhY3Rpb24sIGl0ZW1zQ291bnQpIHtcbiAgICBsZXQgaXNSYW5nZUFsbG93ZWQgPSB0cnVlO1xuICAgIHN3aXRjaCAoYWN0aW9uLnJhbmdlKSB7XG4gICAgICBjYXNlIFNlbGVjdGlvblJhbmdlLlNJTkdMRV9TRUxFQ1Q6XG4gICAgICAgIGlzUmFuZ2VBbGxvd2VkID0gaXRlbXNDb3VudCA9PT0gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNlbGVjdGlvblJhbmdlLk1VTFRJX1NFTEVDVDpcbiAgICAgICAgaXNSYW5nZUFsbG93ZWQgPSBpdGVtc0NvdW50ID49IDE7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTZWxlY3Rpb25SYW5nZS5NVUxUSV9TRUxFQ1RfT05MWTpcbiAgICAgICAgaXNSYW5nZUFsbG93ZWQgPSBpdGVtc0NvdW50ID4gMTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIGlzUmFuZ2VBbGxvd2VkO1xuICB9XG5cblxuICAvKipcbiAgICogR2V0dGVyIGZvciB0aGUgQ3VzdG9tIEFjdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHR5cGVzIExpc3Qgb2YgdHlwZXMgdG8gZmV0Y2ggY3VzdG9tIGFjdGlvbnMgZm9yXG4gICAqIEByZXR1cm5zIExpc3Qgb2YgYXZhaWxhYmxlIGN1c3RvbSBhY3Rpb25zXG4gICAqL1xuICBnZXRDdXN0b21BY3Rpb25zKHR5cGVzOiBzdHJpbmdbXSA9IFtdKTogT2JzZXJ2YWJsZTxDdXN0b21BY3Rpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZ2V0KGAvdWkvYWN0aW9ucz90eXBlcz0ke3R5cGVzLmpvaW4oJywnKX1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gcmVzIGFzIEN1c3RvbUFjdGlvbltdKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGdsb2JhbCBhY3Rpb25zIHBhbmVsXG4gICAqL1xuICBwdWJsaWMgc2hvd0FjdGlvbnMoc2VsZWN0aW9uOiBhbnlbXSwgdGFyZ2V0ID0gJ0RNU19PQkpFQ1QnKSB7XG4gICAgdGhpcy5hY3Rpb25zU2hvd2luZ1NvdXJjZS5uZXh0KHtzaG93OiB0cnVlLCBzZWxlY3Rpb24sIHRhcmdldH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgZ2xvYmFsIGFjdGlvbnMgcGFuZWxcbiAgICovXG4gIHB1YmxpYyBoaWRlQWN0aW9ucygpIHtcbiAgICB0aGlzLmFjdGlvbnNTaG93aW5nU291cmNlLm5leHQoe3Nob3c6IGZhbHNlLCBzZWxlY3Rpb246IFtdfSk7XG4gIH1cblxuICBpc0FsbG93ZWRUeXBlKGl0ZW1zOiBEbXNPYmplY3RbXSwgcmVqZWN0ZWRUeXBlID0gW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBkaXNhYmxlZFR5cGUgPSByZWplY3RlZFR5cGU7XG4gICAgcmV0dXJuICEhaXRlbXMuZmluZChpdGVtID0+ICFkaXNhYmxlZFR5cGUuc29tZSh0eXBlID0+IGl0ZW0udHlwZU5hbWUgPT09IHR5cGUpKTtcbiAgfVxuXG59XG4iXX0=