@rivet-health/design-system 19.2.1 → 19.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -28,12 +28,30 @@ export class SelectComponent extends InputLabelComponent {
28
28
  });
29
29
  }
30
30
  }
31
+ selectChange(multi, id) {
32
+ if (multi) {
33
+ this.manager?.actions.next({
34
+ type: 'toggleOptionSelected',
35
+ id,
36
+ });
37
+ }
38
+ else {
39
+ this.manager?.actions.next({
40
+ type: 'setSelectedOption',
41
+ id,
42
+ });
43
+ this.manager?.actions.next({
44
+ type: 'openChange',
45
+ open: false,
46
+ });
47
+ }
48
+ }
31
49
  }
32
50
  SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
33
- SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SelectComponent, selector: "riv-select", inputs: { manager: "manager", disabled: "disabled", locked: "locked" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }], viewQueries: [{ propertyName: "customTriggerButton", first: true, predicate: ["customTriggerButton"], descendants: true }, { propertyName: "standardTriggerButton", first: true, predicate: ["standardTriggerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container *ngIf=\"s.selection.selected.size; else placeholderValue\">\n <span *ngIf=\"s.selection.selected.size > 1\" class=\"selected-count\">\n {{ s.selection.selected.size | rivNumber }}\n </span>\n <span class=\"value\">{{ s.display.selected }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"'ChevronDown'\"\n [size]=\"16\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <riv-callout\n *ngIf=\"s.display.open\"\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-right',\n 'bottom-center',\n 'bottom-left'\n ]\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div class=\"callout-body\">\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.allowSearch\"\n [value]=\"s.query.search\"\n (valueChange)=\"\n manager?.actions?.next({ type: 'searchChange', payload: $event })\n \"\n ></riv-search>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div *ngFor=\"let group of s.fullOptionGroups\" class=\"group\">\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n </span>\n <riv-select-node\n *ngFor=\"let option of group.options\"\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n (selectChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionSelected',\n id: $event\n })\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </div>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </riv-callout>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-small);background-color:var(--surface-light-2);border-left:var(--border-width) solid var(--border-light)}.callout-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large);height:calc(var(--base-grid-size) * 120);max-height:50vh;width:calc(var(--base-grid-size) * 150);max-width:50vw}.options{flex-grow:1;overflow-y:auto}.options,.group{display:flex;flex-direction:column}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i4.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText"], outputs: ["labelAction"] }, { kind: "component", type: i5.LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "errorMessage"] }, { kind: "component", type: i6.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name"] }, { kind: "component", type: i7.SelectNodeComponent, selector: "riv-select-node", inputs: ["mode", "node"], outputs: ["selectChange", "expandChange"] }, { kind: "component", type: i8.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.NumberPipe, name: "rivNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
51
+ SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SelectComponent, selector: "riv-select", inputs: { manager: "manager", disabled: "disabled", locked: "locked" }, queries: [{ propertyName: "triggerTemplate", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "optionTemplate", first: true, predicate: ["option"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "footerTemplate", first: true, predicate: ["footer"], descendants: true }], viewQueries: [{ propertyName: "customTriggerButton", first: true, predicate: ["customTriggerButton"], descendants: true }, { propertyName: "standardTriggerButton", first: true, predicate: ["standardTriggerButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div class=\"content-body\" [class.inline]=\"s.display.inline\">\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.allowSearch\"\n [value]=\"s.query.search\"\n (valueChange)=\"\n manager?.actions?.next({ type: 'searchChange', payload: $event })\n \"\n ></riv-search>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n </span>\n <ng-container *ngFor=\"let option of group.options\">\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <span *ngIf=\"s.selection.selected.size > 1\" class=\"selected-count\">\n {{ s.selection.selected.size | rivNumber }}\n </span>\n <span class=\"value\">{{ s.display.selected }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"'ChevronDown'\"\n [size]=\"16\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <riv-callout\n *ngIf=\"s.display.open\"\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-right',\n 'bottom-center',\n 'bottom-left'\n ]\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-small);background-color:var(--surface-light-2);border-left:var(--border-width) solid var(--border-light)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){height:calc(var(--base-grid-size) * 120);max-height:50vh;width:calc(var(--base-grid-size) * 150);max-width:50vw}.options{flex-grow:1;overflow-y:auto}.options,.group{display:flex;flex-direction:column;gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-xsmall);border-bottom:var(--border-width) solid var(--border-light)}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: i4.InputLabelComponent, selector: "riv-input-label", inputs: ["label", "help", "required", "labelActionText"], outputs: ["labelAction"] }, { kind: "component", type: i5.LoadingCoverComponent, selector: "riv-loading-cover", inputs: ["loading", "loadingSize", "errorMessage"] }, { kind: "component", type: i6.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name"] }, { kind: "component", type: i7.SelectNodeComponent, selector: "riv-select-node", inputs: ["mode", "node"], outputs: ["selectChange", "expandChange"] }, { kind: "component", type: i8.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.NumberPipe, name: "rivNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
34
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SelectComponent, decorators: [{
35
53
  type: Component,
36
- args: [{ selector: 'riv-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container *ngIf=\"s.selection.selected.size; else placeholderValue\">\n <span *ngIf=\"s.selection.selected.size > 1\" class=\"selected-count\">\n {{ s.selection.selected.size | rivNumber }}\n </span>\n <span class=\"value\">{{ s.display.selected }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"'ChevronDown'\"\n [size]=\"16\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <riv-callout\n *ngIf=\"s.display.open\"\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-right',\n 'bottom-center',\n 'bottom-left'\n ]\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div class=\"callout-body\">\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.allowSearch\"\n [value]=\"s.query.search\"\n (valueChange)=\"\n manager?.actions?.next({ type: 'searchChange', payload: $event })\n \"\n ></riv-search>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div *ngFor=\"let group of s.fullOptionGroups\" class=\"group\">\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n </span>\n <riv-select-node\n *ngFor=\"let option of group.options\"\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n (selectChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionSelected',\n id: $event\n })\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </div>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </riv-callout>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-small);background-color:var(--surface-light-2);border-left:var(--border-width) solid var(--border-light)}.callout-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large);height:calc(var(--base-grid-size) * 120);max-height:50vh;width:calc(var(--base-grid-size) * 150);max-width:50vw}.options{flex-grow:1;overflow-y:auto}.options,.group{display:flex;flex-direction:column}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\n"] }]
54
+ args: [{ selector: 'riv-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <ng-template #content>\n <riv-loading-cover [loading]=\"s.load.loading\">\n <div class=\"content-body\" [class.inline]=\"s.display.inline\">\n <header *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"headerTemplate; context: { state: s }\"\n ></ng-container>\n </header>\n <riv-search\n *ngIf=\"s.query.allowSearch\"\n [value]=\"s.query.search\"\n (valueChange)=\"\n manager?.actions?.next({ type: 'searchChange', payload: $event })\n \"\n ></riv-search>\n <div class=\"options\">\n <riv-select-node\n *ngIf=\"\n s.selection.allowMultiSelect &&\n s.selection.allowSelectAll &&\n !s.display.zeroStateMessage\n \"\n [mode]=\"'multi'\"\n [node]=\"{\n id: '__NOOP__',\n title: s.query.search ? 'Select all matching' : 'Select all',\n selected: s.selection.visibleSelectionState,\n selectable: true,\n expandable: false,\n expanded: false\n }\"\n (selectChange)=\"\n manager?.actions?.next({ type: 'visibleSelectedChange' })\n \"\n ></riv-select-node>\n <div\n *ngFor=\"let group of s.fullOptionGroups\"\n class=\"group\"\n [class.divider]=\"s.display.dividers\"\n >\n <span *ngIf=\"group.header; let header\" class=\"header\">\n {{ header }}\n </span>\n <ng-container *ngFor=\"let option of group.options\">\n <ng-container *ngIf=\"optionTemplate; else standardTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ node: option }\"\n ></ng-container>\n </ng-container>\n <ng-template #standardTemplate>\n <riv-select-node\n [mode]=\"s.selection.allowMultiSelect ? 'multi' : 'single'\"\n [node]=\"option\"\n (selectChange)=\"\n selectChange(s.selection.allowMultiSelect, $event)\n \"\n (expandChange)=\"\n manager?.actions?.next({\n type: 'toggleOptionExpanded',\n id: $event\n })\n \"\n ></riv-select-node>\n </ng-template>\n </ng-container>\n </div>\n <riv-zero-state\n *ngIf=\"s.display.zeroStateMessage; let message\"\n [message]=\"message\"\n ></riv-zero-state>\n </div>\n <footer *ngIf=\"footerTemplate\" class=\"custom-footer\">\n <ng-container\n *ngTemplateOutlet=\"footerTemplate; context: { state: s }\"\n ></ng-container>\n </footer>\n </div>\n </riv-loading-cover>\n </ng-template>\n\n <ng-container *ngIf=\"!s.display.inline; else content\">\n <ng-container *ngIf=\"triggerTemplate; else standardTrigger\">\n <button\n #customTriggerButton\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container\n [ngTemplateOutlet]=\"triggerTemplate\"\n [ngTemplateOutletContext]=\"{ state: s }\"\n ></ng-container>\n </button>\n </ng-container>\n <ng-template #standardTrigger>\n <riv-input-label\n [label]=\"label\"\n [help]=\"help\"\n [required]=\"required\"\n [labelActionText]=\"labelActionText\"\n (labelAction)=\"labelAction.emit($event)\"\n >\n <button\n #standardTriggerButton\n class=\"trigger\"\n (click)=\"allowedOpen()\"\n [disabled]=\"disabled || locked\"\n type=\"button\"\n >\n <ng-container\n *ngIf=\"s.selection.selected.size; else placeholderValue\"\n >\n <span *ngIf=\"s.selection.selected.size > 1\" class=\"selected-count\">\n {{ s.selection.selected.size | rivNumber }}\n </span>\n <span class=\"value\">{{ s.display.selected }}</span>\n </ng-container>\n <ng-template #placeholderValue>\n <span class=\"value placeholder\">{{ s.display.placeholder }}</span>\n </ng-template>\n <span class=\"chevron\">\n <riv-icon\n *ngIf=\"!locked\"\n [name]=\"'ChevronDown'\"\n [size]=\"16\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"16\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <riv-callout\n *ngIf=\"s.display.open\"\n [anchor]=\"getTrigger()\"\n [theme]=\"'light'\"\n [showCaret]=\"false\"\n [allowedPositions]=\"[\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-right',\n 'bottom-center',\n 'bottom-left'\n ]\"\n (close)=\"manager?.actions?.next({ type: 'openChange', open: false })\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </riv-callout>\n </ng-container>\n</ng-container>\n", styles: [".trigger{width:100%;border:var(--border-width) solid var(--border-light);border-radius:var(--border-radius-small);display:flex;gap:var(--size-small);background-color:var(--surface-light-0);cursor:pointer;padding-left:var(--size-small)}.trigger:focus{outline:none;border:var(--border-width) solid var(--purp-60)}.trigger:disabled{color:var(--type-light-disabled);background-color:var(--surface-light-1);cursor:default}.selected-count{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);font-weight:var(--font-weight-normal);color:var(--type-dark-body);border-radius:calc(var(--base-grid-size) * 3);background-color:var(--brand);padding:calc(var(--base-grid-size) / 4) calc(var(--base-grid-size) * 2);align-self:center}.value{font-size:var(--type-2-font-size);line-height:var(--type-2-line-height-0);color:var(--type-light-high-contrast);padding:var(--size-small) 0;flex-grow:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:pre}.value.placeholder{color:var(--type-light-disabled)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-small);background-color:var(--surface-light-2);border-left:var(--border-width) solid var(--border-light)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){height:calc(var(--base-grid-size) * 120);max-height:50vh;width:calc(var(--base-grid-size) * 150);max-width:50vw}.options{flex-grow:1;overflow-y:auto}.options,.group{display:flex;flex-direction:column;gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-xsmall);border-bottom:var(--border-width) solid var(--border-light)}.header{font:var(--input-medium);color:var(--type-light-low-contrast);padding:var(--size-xsmall) 0}.custom-footer{padding-top:var(--size-large);border-top:var(--border-width) solid var(--border-light)}\n"] }]
37
55
  }], propDecorators: { manager: [{
38
56
  type: Input
39
57
  }], disabled: [{
@@ -43,6 +61,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
43
61
  }], triggerTemplate: [{
44
62
  type: ContentChild,
45
63
  args: ['trigger']
64
+ }], optionTemplate: [{
65
+ type: ContentChild,
66
+ args: ['option']
46
67
  }], headerTemplate: [{
47
68
  type: ContentChild,
48
69
  args: ['header']
@@ -56,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
56
77
  type: ViewChild,
57
78
  args: ['standardTriggerButton']
58
79
  }] } });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7OztBQVM5RSxNQUFNLE9BQU8sZUFFWCxTQUFRLG1CQUFtQjtJQVI3Qjs7UUFhRSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLFdBQU0sR0FBWSxLQUFLLENBQUM7S0EyQnpCO0lBZkMsVUFBVTtRQUNSLE9BQU8sQ0FDTCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsYUFBYTtZQUN2QyxJQUFJLENBQUMscUJBQXFCLEVBQUUsYUFBYSxDQUMxQyxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7OzRHQXBDVSxlQUFlO2dHQUFmLGVBQWUsNHBCQ2xCNUIsNitJQXVJQTsyRkRySGEsZUFBZTtrQkFOM0IsU0FBUzsrQkFDRSxZQUFZLG1CQUdMLHVCQUF1QixDQUFDLE1BQU07OEJBTS9DLE9BQU87c0JBRE4sS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUdtQixlQUFlO3NCQUF2QyxZQUFZO3VCQUFDLFNBQVM7Z0JBSUMsY0FBYztzQkFBckMsWUFBWTt1QkFBQyxRQUFRO2dCQUNFLGNBQWM7c0JBQXJDLFlBQVk7dUJBQUMsUUFBUTtnQkFFWSxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCO2dCQUNJLHFCQUFxQjtzQkFBeEQsU0FBUzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElucHV0TGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC1sYWJlbC9pbnB1dC1sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUml2U2VsZWN0IH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQ8XG4gIE8gZXh0ZW5kcyBSaXZTZWxlY3QuQmFzZU9wdGlvbixcbj4gZXh0ZW5kcyBJbnB1dExhYmVsQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlNlbGVjdC5NYW5hZ2VyPE8+O1xuXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbG9ja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQENvbnRlbnRDaGlsZCgndHJpZ2dlcicpIHRyaWdnZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFxuICAgIFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz5cbiAgPjtcblxuICBAQ29udGVudENoaWxkKCdoZWFkZXInKSBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4+O1xuICBAQ29udGVudENoaWxkKCdmb290ZXInKSBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4+O1xuXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbVRyaWdnZXJCdXR0b24nKSBjdXN0b21UcmlnZ2VyQnV0dG9uPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3RhbmRhcmRUcmlnZ2VyQnV0dG9uJykgc3RhbmRhcmRUcmlnZ2VyQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICBnZXRUcmlnZ2VyKCk6IEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXN0b21UcmlnZ2VyQnV0dG9uPy5uYXRpdmVFbGVtZW50ID8/XG4gICAgICB0aGlzLnN0YW5kYXJkVHJpZ2dlckJ1dHRvbj8ubmF0aXZlRWxlbWVudFxuICAgICk7XG4gIH1cblxuICBhbGxvd2VkT3BlbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMubG9ja2VkKSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICdvcGVuQ2hhbmdlJyxcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1hbmFnZXI/LnN0YXRlIHwgYXN5bmM7IGxldCBzXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmlnZ2VyVGVtcGxhdGU7IGVsc2Ugc3RhbmRhcmRUcmlnZ2VyXCI+XG4gICAgPGJ1dHRvblxuICAgICAgI2N1c3RvbVRyaWdnZXJCdXR0b25cbiAgICAgIChjbGljayk9XCJhbGxvd2VkT3BlbigpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBsb2NrZWRcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmlnZ2VyVGVtcGxhdGVcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzdGF0ZTogcyB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjc3RhbmRhcmRUcmlnZ2VyPlxuICAgIDxyaXYtaW5wdXQtbGFiZWxcbiAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICBbaGVscF09XCJoZWxwXCJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICBbbGFiZWxBY3Rpb25UZXh0XT1cImxhYmVsQWN0aW9uVGV4dFwiXG4gICAgICAobGFiZWxBY3Rpb24pPVwibGFiZWxBY3Rpb24uZW1pdCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICNzdGFuZGFyZFRyaWdnZXJCdXR0b25cbiAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyXCJcbiAgICAgICAgKGNsaWNrKT1cImFsbG93ZWRPcGVuKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzLnNlbGVjdGlvbi5zZWxlY3RlZC5zaXplOyBlbHNlIHBsYWNlaG9sZGVyVmFsdWVcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInMuc2VsZWN0aW9uLnNlbGVjdGVkLnNpemUgPiAxXCIgY2xhc3M9XCJzZWxlY3RlZC1jb3VudFwiPlxuICAgICAgICAgICAge3sgcy5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZSB8IHJpdk51bWJlciB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3sgcy5kaXNwbGF5LnNlbGVjdGVkIH19PC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNwbGFjZWhvbGRlclZhbHVlPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWUgcGxhY2Vob2xkZXJcIj57eyBzLmRpc3BsYXkucGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY2hldnJvblwiPlxuICAgICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgICAgKm5nSWY9XCIhbG9ja2VkXCJcbiAgICAgICAgICAgIFtuYW1lXT1cIidDaGV2cm9uRG93bidcIlxuICAgICAgICAgICAgW3NpemVdPVwiMTZcIlxuICAgICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgICAgIDxyaXYtaWNvbiAqbmdJZj1cImxvY2tlZFwiIFtuYW1lXT1cIidMb2NrJ1wiIFtzaXplXT1cIjE2XCI+PC9yaXYtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9yaXYtaW5wdXQtbGFiZWw+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPHJpdi1jYWxsb3V0XG4gICAgKm5nSWY9XCJzLmRpc3BsYXkub3BlblwiXG4gICAgW2FuY2hvcl09XCJnZXRUcmlnZ2VyKClcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICBbc2hvd0NhcmV0XT1cImZhbHNlXCJcbiAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJbXG4gICAgICAndG9wLWxlZnQnLFxuICAgICAgJ3RvcC1jZW50ZXInLFxuICAgICAgJ3RvcC1yaWdodCcsXG4gICAgICAnYm90dG9tLXJpZ2h0JyxcbiAgICAgICdib3R0b20tY2VudGVyJyxcbiAgICAgICdib3R0b20tbGVmdCdcbiAgICBdXCJcbiAgICAoY2xvc2UpPVwibWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdvcGVuQ2hhbmdlJywgb3BlbjogZmFsc2UgfSlcIlxuICA+XG4gICAgPHJpdi1sb2FkaW5nLWNvdmVyIFtsb2FkaW5nXT1cInMubG9hZC5sb2FkaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1ib2R5XCI+XG4gICAgICAgIDxoZWFkZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgc3RhdGU6IHMgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPHJpdi1zZWFyY2hcbiAgICAgICAgICAqbmdJZj1cInMucXVlcnkuYWxsb3dTZWFyY2hcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzLnF1ZXJ5LnNlYXJjaFwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIlxuICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnLCBwYXlsb2FkOiAkZXZlbnQgfSlcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9yaXYtc2VhcmNoPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QgJiZcbiAgICAgICAgICAgICAgcy5zZWxlY3Rpb24uYWxsb3dTZWxlY3RBbGwgJiZcbiAgICAgICAgICAgICAgIXMuZGlzcGxheS56ZXJvU3RhdGVNZXNzYWdlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW21vZGVdPVwiJ211bHRpJ1wiXG4gICAgICAgICAgICBbbm9kZV09XCJ7XG4gICAgICAgICAgICAgIGlkOiAnX19OT09QX18nLFxuICAgICAgICAgICAgICB0aXRsZTogcy5xdWVyeS5zZWFyY2ggPyAnU2VsZWN0IGFsbCBtYXRjaGluZycgOiAnU2VsZWN0IGFsbCcsXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBzLnNlbGVjdGlvbi52aXNpYmxlU2VsZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBleHBhbmRlZDogZmFsc2VcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKHNlbGVjdENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICd2aXNpYmxlU2VsZWN0ZWRDaGFuZ2UnIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L3Jpdi1zZWxlY3Qtbm9kZT5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiBzLmZ1bGxPcHRpb25Hcm91cHNcIiBjbGFzcz1cImdyb3VwXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdyb3VwLmhlYWRlcjsgbGV0IGhlYWRlclwiIGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgIHt7IGhlYWRlciB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHJpdi1zZWxlY3Qtbm9kZVxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdyb3VwLm9wdGlvbnNcIlxuICAgICAgICAgICAgICBbbW9kZV09XCJzLnNlbGVjdGlvbi5hbGxvd011bHRpU2VsZWN0ID8gJ211bHRpJyA6ICdzaW5nbGUnXCJcbiAgICAgICAgICAgICAgW25vZGVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgKHNlbGVjdENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25TZWxlY3RlZCcsXG4gICAgICAgICAgICAgICAgICBpZDogJGV2ZW50XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGV4cGFuZENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICBtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25FeHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgICBpZDogJGV2ZW50XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L3Jpdi1zZWxlY3Qtbm9kZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cml2LXplcm8tc3RhdGVcbiAgICAgICAgICAgICpuZ0lmPVwicy5kaXNwbGF5Lnplcm9TdGF0ZU1lc3NhZ2U7IGxldCBtZXNzYWdlXCJcbiAgICAgICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIlxuICAgICAgICAgID48L3Jpdi16ZXJvLXN0YXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZvb3RlciAqbmdJZj1cImZvb3RlclRlbXBsYXRlXCIgY2xhc3M9XCJjdXN0b20tZm9vdGVyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZTsgY29udGV4dDogeyBzdGF0ZTogcyB9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZm9vdGVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9yaXYtbG9hZGluZy1jb3Zlcj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7Ozs7OztBQVM5RSxNQUFNLE9BQU8sZUFFWCxTQUFRLG1CQUFtQjtJQVI3Qjs7UUFhRSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLFdBQU0sR0FBWSxLQUFLLENBQUM7S0FrRHpCO0lBakNDLFVBQVU7UUFDUixPQUFPLENBQ0wsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGFBQWE7WUFDdkMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLGFBQWEsQ0FDMUMsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWMsRUFBRSxFQUFXO1FBQ3RDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN6QixJQUFJLEVBQUUsc0JBQXNCO2dCQUM1QixFQUFFO2FBQ0gsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsRUFBRTthQUNILENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLFlBQVk7Z0JBQ2xCLElBQUksRUFBRSxLQUFLO2FBQ1osQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzs0R0EzRFUsZUFBZTtnR0FBZixlQUFlLHV2QkNsQjVCLGcxS0F5SkE7MkZEdklhLGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0UsWUFBWSxtQkFHTCx1QkFBdUIsQ0FBQyxNQUFNOzhCQU0vQyxPQUFPO3NCQUROLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixlQUFlO3NCQURkLFlBQVk7dUJBQUMsU0FBUztnQkFJdkIsY0FBYztzQkFEYixZQUFZO3VCQUFDLFFBQVE7Z0JBSXRCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxRQUFRO2dCQUl0QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsUUFBUTtnQkFHWSxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCO2dCQUNJLHFCQUFxQjtzQkFBeEQsU0FBUzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElucHV0TGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnB1dC1sYWJlbC9pbnB1dC1sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUml2U2VsZWN0IH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlbGVjdC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RDb21wb25lbnQ8XG4gIE8gZXh0ZW5kcyBSaXZTZWxlY3QuQmFzZU9wdGlvbixcbj4gZXh0ZW5kcyBJbnB1dExhYmVsQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgbWFuYWdlcj86IFJpdlNlbGVjdC5NYW5hZ2VyPE8+O1xuXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbG9ja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQENvbnRlbnRDaGlsZCgndHJpZ2dlcicpXG4gIHRyaWdnZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4gfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnb3B0aW9uJylcbiAgb3B0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IG5vZGU6IFJpdlNlbGVjdC5GdWxsT3B0aW9uPE8+IH0+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicpXG4gIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBzdGF0ZTogUml2U2VsZWN0LkZ1bGxTdGF0ZTxPPiB9PjtcblxuICBAQ29udGVudENoaWxkKCdmb290ZXInKVxuICBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4gfT47XG5cbiAgQFZpZXdDaGlsZCgnY3VzdG9tVHJpZ2dlckJ1dHRvbicpIGN1c3RvbVRyaWdnZXJCdXR0b24/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdGFuZGFyZFRyaWdnZXJCdXR0b24nKSBzdGFuZGFyZFRyaWdnZXJCdXR0b24/OiBFbGVtZW50UmVmO1xuXG4gIGdldFRyaWdnZXIoKTogRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1c3RvbVRyaWdnZXJCdXR0b24/Lm5hdGl2ZUVsZW1lbnQgPz9cbiAgICAgIHRoaXMuc3RhbmRhcmRUcmlnZ2VyQnV0dG9uPy5uYXRpdmVFbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIGFsbG93ZWRPcGVuKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5sb2NrZWQpIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ29wZW5DaGFuZ2UnLFxuICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Q2hhbmdlKG11bHRpOiBib29sZWFuLCBpZDogT1snaWQnXSkge1xuICAgIGlmIChtdWx0aSkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAndG9nZ2xlT3B0aW9uU2VsZWN0ZWQnLFxuICAgICAgICBpZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICdzZXRTZWxlY3RlZE9wdGlvbicsXG4gICAgICAgIGlkLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICdvcGVuQ2hhbmdlJyxcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtYW5hZ2VyPy5zdGF0ZSB8IGFzeW5jOyBsZXQgc1wiPlxuICA8bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gICAgPHJpdi1sb2FkaW5nLWNvdmVyIFtsb2FkaW5nXT1cInMubG9hZC5sb2FkaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1ib2R5XCIgW2NsYXNzLmlubGluZV09XCJzLmRpc3BsYXkuaW5saW5lXCI+XG4gICAgICAgIDxoZWFkZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgc3RhdGU6IHMgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPHJpdi1zZWFyY2hcbiAgICAgICAgICAqbmdJZj1cInMucXVlcnkuYWxsb3dTZWFyY2hcIlxuICAgICAgICAgIFt2YWx1ZV09XCJzLnF1ZXJ5LnNlYXJjaFwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIlxuICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnLCBwYXlsb2FkOiAkZXZlbnQgfSlcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9yaXYtc2VhcmNoPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QgJiZcbiAgICAgICAgICAgICAgcy5zZWxlY3Rpb24uYWxsb3dTZWxlY3RBbGwgJiZcbiAgICAgICAgICAgICAgIXMuZGlzcGxheS56ZXJvU3RhdGVNZXNzYWdlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW21vZGVdPVwiJ211bHRpJ1wiXG4gICAgICAgICAgICBbbm9kZV09XCJ7XG4gICAgICAgICAgICAgIGlkOiAnX19OT09QX18nLFxuICAgICAgICAgICAgICB0aXRsZTogcy5xdWVyeS5zZWFyY2ggPyAnU2VsZWN0IGFsbCBtYXRjaGluZycgOiAnU2VsZWN0IGFsbCcsXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBzLnNlbGVjdGlvbi52aXNpYmxlU2VsZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBleHBhbmRlZDogZmFsc2VcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKHNlbGVjdENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICd2aXNpYmxlU2VsZWN0ZWRDaGFuZ2UnIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L3Jpdi1zZWxlY3Qtbm9kZT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2Ygcy5mdWxsT3B0aW9uR3JvdXBzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXBcIlxuICAgICAgICAgICAgW2NsYXNzLmRpdmlkZXJdPVwicy5kaXNwbGF5LmRpdmlkZXJzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdyb3VwLmhlYWRlcjsgbGV0IGhlYWRlclwiIGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgIHt7IGhlYWRlciB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdyb3VwLm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblRlbXBsYXRlOyBlbHNlIHN0YW5kYXJkVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBub2RlOiBvcHRpb24gfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgICAgICAgICAgIFttb2RlXT1cInMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QgPyAnbXVsdGknIDogJ3NpbmdsZSdcIlxuICAgICAgICAgICAgICAgICAgW25vZGVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIChzZWxlY3RDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdENoYW5nZShzLnNlbGVjdGlvbi5hbGxvd011bHRpU2VsZWN0LCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgKGV4cGFuZENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICBpZDogJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L3Jpdi1zZWxlY3Qtbm9kZT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxyaXYtemVyby1zdGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJzLmRpc3BsYXkuemVyb1N0YXRlTWVzc2FnZTsgbGV0IG1lc3NhZ2VcIlxuICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXG4gICAgICAgICAgPjwvcml2LXplcm8tc3RhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Zm9vdGVyICpuZ0lmPVwiZm9vdGVyVGVtcGxhdGVcIiBjbGFzcz1cImN1c3RvbS1mb290ZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlOyBjb250ZXh0OiB7IHN0YXRlOiBzIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mb290ZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Jpdi1sb2FkaW5nLWNvdmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcy5kaXNwbGF5LmlubGluZTsgZWxzZSBjb250ZW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyaWdnZXJUZW1wbGF0ZTsgZWxzZSBzdGFuZGFyZFRyaWdnZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgI2N1c3RvbVRyaWdnZXJCdXR0b25cbiAgICAgICAgKGNsaWNrKT1cImFsbG93ZWRPcGVuKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmlnZ2VyVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHN0YXRlOiBzIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3N0YW5kYXJkVHJpZ2dlcj5cbiAgICAgIDxyaXYtaW5wdXQtbGFiZWxcbiAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgW2hlbHBdPVwiaGVscFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIFtsYWJlbEFjdGlvblRleHRdPVwibGFiZWxBY3Rpb25UZXh0XCJcbiAgICAgICAgKGxhYmVsQWN0aW9uKT1cImxhYmVsQWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAjc3RhbmRhcmRUcmlnZ2VyQnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyXCJcbiAgICAgICAgICAoY2xpY2spPVwiYWxsb3dlZE9wZW4oKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IGxvY2tlZFwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cInMuc2VsZWN0aW9uLnNlbGVjdGVkLnNpemU7IGVsc2UgcGxhY2Vob2xkZXJWYWx1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzLnNlbGVjdGlvbi5zZWxlY3RlZC5zaXplID4gMVwiIGNsYXNzPVwic2VsZWN0ZWQtY291bnRcIj5cbiAgICAgICAgICAgICAge3sgcy5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZSB8IHJpdk51bWJlciB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IHMuZGlzcGxheS5zZWxlY3RlZCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyVmFsdWU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlIHBsYWNlaG9sZGVyXCI+e3sgcy5kaXNwbGF5LnBsYWNlaG9sZGVyIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGV2cm9uXCI+XG4gICAgICAgICAgICA8cml2LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhbG9ja2VkXCJcbiAgICAgICAgICAgICAgW25hbWVdPVwiJ0NoZXZyb25Eb3duJ1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cIjE2XCJcbiAgICAgICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgICAgICAgPHJpdi1pY29uICpuZ0lmPVwibG9ja2VkXCIgW25hbWVdPVwiJ0xvY2snXCIgW3NpemVdPVwiMTZcIj48L3Jpdi1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3Jpdi1pbnB1dC1sYWJlbD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPHJpdi1jYWxsb3V0XG4gICAgICAqbmdJZj1cInMuZGlzcGxheS5vcGVuXCJcbiAgICAgIFthbmNob3JdPVwiZ2V0VHJpZ2dlcigpXCJcbiAgICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgICAgW2FsbG93ZWRQb3NpdGlvbnNdPVwiW1xuICAgICAgICAndG9wLWxlZnQnLFxuICAgICAgICAndG9wLWNlbnRlcicsXG4gICAgICAgICd0b3AtcmlnaHQnLFxuICAgICAgICAnYm90dG9tLXJpZ2h0JyxcbiAgICAgICAgJ2JvdHRvbS1jZW50ZXInLFxuICAgICAgICAnYm90dG9tLWxlZnQnXG4gICAgICBdXCJcbiAgICAgIChjbG9zZSk9XCJtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ29wZW5DaGFuZ2UnLCBvcGVuOiBmYWxzZSB9KVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9yaXYtY2FsbG91dD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -16,10 +16,10 @@ export class SelectNodeComponent {
16
16
  }
17
17
  }
18
18
  SelectNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SelectNodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
- SelectNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SelectNodeComponent, selector: "riv-select-node", inputs: { mode: "mode", node: "node" }, outputs: { selectChange: "selectChange", expandChange: "expandChange" }, ngImport: i0, template: "<ng-container *ngIf=\"node; let n\">\n <ng-container *ngIf=\"mode === 'multi'\">\n <div class=\"multi-row\">\n <label rivTruncate>\n <riv-checkbox\n *ngIf=\"n.selectable\"\n [value]=\"n.selected === true\"\n [indeterminate]=\"n.selected === 'indeterminate'\"\n (valueChange)=\"selectChange.emit(n.id)\"\n >\n </riv-checkbox>\n <span rivTruncate class=\"title\">\n <riv-highlight\n [text]=\"n.title\"\n [indices]=\"n.titleHighlightIndices ?? []\"\n ></riv-highlight>\n <riv-highlight\n *ngIf=\"n.subtitle\"\n [text]=\"n.subtitle\"\n [indices]=\"n.subtitleHighlightIndices ?? []\"\n ></riv-highlight>\n </span>\n <span *ngIf=\"includeCount()\" class=\"count\">\n {{ n.count | rivNumber }}\n </span>\n </label>\n <button\n *ngIf=\"n.children\"\n class=\"expand\"\n [disabled]=\"!n.expandable\"\n (click)=\"expandChange.emit(n.id)\"\n >\n <riv-icon\n [size]=\"20\"\n [name]=\"n.expanded ? 'ChevronUp' : 'ChevronDown'\"\n ></riv-icon>\n </button>\n </div>\n <div *ngIf=\"n.expanded\" class=\"children\">\n <riv-select-node\n *ngFor=\"let child of n.children\"\n [mode]=\"mode\"\n [node]=\"child\"\n (selectChange)=\"selectChange.emit($event)\"\n (expandChange)=\"expandChange.emit($event)\"\n ></riv-select-node>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".multi-row{display:flex;align-items:center}.multi-row label{flex-grow:1;border-radius:var(--border-radius-medium);padding:var(--size-small) var(--size-xsmall);font:var(--input-medium);display:flex;align-items:center;gap:var(--size-small);cursor:pointer}.multi-row label:hover{background-color:var(--surface-light-2)}.title{flex-grow:1}.count{color:var(--type-light-low-contrast)}.expand{cursor:pointer;color:var(--purp-80);display:inline-flex;transition:background-color var(--medium-transition);border-radius:var(--border-radius-small);padding:var(--size-xsmall)}.expand:hover{background-color:var(--black-20)}.expand:active{background-color:var(--black-40)}.expand:disabled{color:var(--type-light-disabled)}.expand:disabled:hover{background-color:transparent}.children{padding-left:var(--size-large)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CheckboxComponent, selector: "riv-checkbox", inputs: ["name", "identifier", "value", "checkedColorToken", "indeterminateColorToken", "checkboxTooltip", "indeterminate", "disabled", "required"], outputs: ["valueChange"] }, { kind: "component", type: i3.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: SelectNodeComponent, selector: "riv-select-node", inputs: ["mode", "node"], outputs: ["selectChange", "expandChange"] }, { kind: "component", type: i5.TruncateComponent, selector: "[rivTruncate]", inputs: ["maxTooltipWidth"] }, { kind: "pipe", type: i6.NumberPipe, name: "rivNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
19
+ SelectNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SelectNodeComponent, selector: "riv-select-node", inputs: { mode: "mode", node: "node" }, outputs: { selectChange: "selectChange", expandChange: "expandChange" }, ngImport: i0, template: "<ng-template #title let-n=\"node\">\n <riv-highlight\n [text]=\"n.title\"\n [indices]=\"n.titleHighlightIndices ?? []\"\n ></riv-highlight>\n <span *ngIf=\"n.subtitle\">&nbsp;</span>\n <riv-highlight\n *ngIf=\"n.subtitle\"\n class=\"subtitle\"\n [text]=\"n.subtitle\"\n [indices]=\"n.subtitleHighlightIndices ?? []\"\n ></riv-highlight>\n</ng-template>\n\n<ng-container *ngIf=\"node; let n\">\n <ng-container *ngIf=\"mode === 'multi'\">\n <div class=\"row\">\n <label rivTruncate>\n <riv-checkbox\n *ngIf=\"n.selectable\"\n [value]=\"n.selected === true\"\n [indeterminate]=\"n.selected === 'indeterminate'\"\n (valueChange)=\"selectChange.emit(n.id)\"\n >\n </riv-checkbox>\n <span rivTruncate class=\"title\">\n <ng-container\n *ngTemplateOutlet=\"title; context: { node: n }\"\n ></ng-container>\n </span>\n <span *ngIf=\"includeCount()\" class=\"count\">\n {{ n.count | rivNumber }}\n </span>\n </label>\n <button\n *ngIf=\"n.children\"\n class=\"expand\"\n [disabled]=\"!n.expandable\"\n (click)=\"expandChange.emit(n.id)\"\n >\n <riv-icon\n [size]=\"20\"\n [name]=\"n.expanded ? 'ChevronUp' : 'ChevronDown'\"\n ></riv-icon>\n </button>\n </div>\n <div *ngIf=\"n.expanded\" class=\"children\">\n <riv-select-node\n *ngFor=\"let child of n.children\"\n [mode]=\"mode\"\n [node]=\"child\"\n (selectChange)=\"selectChange.emit($event)\"\n (expandChange)=\"expandChange.emit($event)\"\n ></riv-select-node>\n </div>\n </ng-container>\n <ng-container *ngIf=\"mode === 'single'\">\n <div class=\"row\">\n <button class=\"single\" (click)=\"selectChange.emit(node.id)\">\n <span class=\"label\" rivTruncate>\n <ng-container\n *ngTemplateOutlet=\"title; context: { node: n }\"\n ></ng-container>\n </span>\n <span *ngIf=\"includeCount()\" class=\"count\">\n {{ n.count | rivNumber }}\n </span>\n </button>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".row{display:flex;align-items:center}.row label{flex-grow:1;border-radius:var(--border-radius-medium);padding:var(--size-small) var(--size-xsmall);font:var(--input-medium);display:flex;align-items:center;gap:var(--size-small);cursor:pointer}.row label:hover{background-color:var(--surface-light-2)}.title{flex-grow:1}.subtitle,.count{color:var(--type-light-low-contrast)}.expand{cursor:pointer;color:var(--purp-80);display:inline-flex;transition:background-color var(--medium-transition);border-radius:var(--border-radius-small);padding:var(--size-xsmall)}.expand:hover{background-color:var(--black-20)}.expand:active{background-color:var(--black-40)}.expand:disabled{color:var(--type-light-disabled)}.expand:disabled:hover{background-color:transparent}.children{padding-left:var(--size-large)}.single{border-radius:var(--border-radius-medium);padding:var(--size-small) var(--size-xsmall);font:var(--input-medium);display:flex;align-items:baseline;gap:var(--size-small);cursor:pointer;text-align:left;width:100%}.single:hover{background-color:var(--surface-light-2)}.single .label{flex-grow:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.CheckboxComponent, selector: "riv-checkbox", inputs: ["name", "identifier", "value", "checkedColorToken", "indeterminateColorToken", "checkboxTooltip", "indeterminate", "disabled", "required"], outputs: ["valueChange"] }, { kind: "component", type: i3.HighlightComponent, selector: "riv-highlight", inputs: ["text", "indices"] }, { kind: "component", type: i4.IconComponent, selector: "riv-icon", inputs: ["name", "size", "customSize", "strokeWidth"] }, { kind: "component", type: SelectNodeComponent, selector: "riv-select-node", inputs: ["mode", "node"], outputs: ["selectChange", "expandChange"] }, { kind: "component", type: i5.TruncateComponent, selector: "[rivTruncate]", inputs: ["maxTooltipWidth"] }, { kind: "pipe", type: i6.NumberPipe, name: "rivNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20
20
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SelectNodeComponent, decorators: [{
21
21
  type: Component,
22
- args: [{ selector: 'riv-select-node', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"node; let n\">\n <ng-container *ngIf=\"mode === 'multi'\">\n <div class=\"multi-row\">\n <label rivTruncate>\n <riv-checkbox\n *ngIf=\"n.selectable\"\n [value]=\"n.selected === true\"\n [indeterminate]=\"n.selected === 'indeterminate'\"\n (valueChange)=\"selectChange.emit(n.id)\"\n >\n </riv-checkbox>\n <span rivTruncate class=\"title\">\n <riv-highlight\n [text]=\"n.title\"\n [indices]=\"n.titleHighlightIndices ?? []\"\n ></riv-highlight>\n <riv-highlight\n *ngIf=\"n.subtitle\"\n [text]=\"n.subtitle\"\n [indices]=\"n.subtitleHighlightIndices ?? []\"\n ></riv-highlight>\n </span>\n <span *ngIf=\"includeCount()\" class=\"count\">\n {{ n.count | rivNumber }}\n </span>\n </label>\n <button\n *ngIf=\"n.children\"\n class=\"expand\"\n [disabled]=\"!n.expandable\"\n (click)=\"expandChange.emit(n.id)\"\n >\n <riv-icon\n [size]=\"20\"\n [name]=\"n.expanded ? 'ChevronUp' : 'ChevronDown'\"\n ></riv-icon>\n </button>\n </div>\n <div *ngIf=\"n.expanded\" class=\"children\">\n <riv-select-node\n *ngFor=\"let child of n.children\"\n [mode]=\"mode\"\n [node]=\"child\"\n (selectChange)=\"selectChange.emit($event)\"\n (expandChange)=\"expandChange.emit($event)\"\n ></riv-select-node>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".multi-row{display:flex;align-items:center}.multi-row label{flex-grow:1;border-radius:var(--border-radius-medium);padding:var(--size-small) var(--size-xsmall);font:var(--input-medium);display:flex;align-items:center;gap:var(--size-small);cursor:pointer}.multi-row label:hover{background-color:var(--surface-light-2)}.title{flex-grow:1}.count{color:var(--type-light-low-contrast)}.expand{cursor:pointer;color:var(--purp-80);display:inline-flex;transition:background-color var(--medium-transition);border-radius:var(--border-radius-small);padding:var(--size-xsmall)}.expand:hover{background-color:var(--black-20)}.expand:active{background-color:var(--black-40)}.expand:disabled{color:var(--type-light-disabled)}.expand:disabled:hover{background-color:transparent}.children{padding-left:var(--size-large)}\n"] }]
22
+ args: [{ selector: 'riv-select-node', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #title let-n=\"node\">\n <riv-highlight\n [text]=\"n.title\"\n [indices]=\"n.titleHighlightIndices ?? []\"\n ></riv-highlight>\n <span *ngIf=\"n.subtitle\">&nbsp;</span>\n <riv-highlight\n *ngIf=\"n.subtitle\"\n class=\"subtitle\"\n [text]=\"n.subtitle\"\n [indices]=\"n.subtitleHighlightIndices ?? []\"\n ></riv-highlight>\n</ng-template>\n\n<ng-container *ngIf=\"node; let n\">\n <ng-container *ngIf=\"mode === 'multi'\">\n <div class=\"row\">\n <label rivTruncate>\n <riv-checkbox\n *ngIf=\"n.selectable\"\n [value]=\"n.selected === true\"\n [indeterminate]=\"n.selected === 'indeterminate'\"\n (valueChange)=\"selectChange.emit(n.id)\"\n >\n </riv-checkbox>\n <span rivTruncate class=\"title\">\n <ng-container\n *ngTemplateOutlet=\"title; context: { node: n }\"\n ></ng-container>\n </span>\n <span *ngIf=\"includeCount()\" class=\"count\">\n {{ n.count | rivNumber }}\n </span>\n </label>\n <button\n *ngIf=\"n.children\"\n class=\"expand\"\n [disabled]=\"!n.expandable\"\n (click)=\"expandChange.emit(n.id)\"\n >\n <riv-icon\n [size]=\"20\"\n [name]=\"n.expanded ? 'ChevronUp' : 'ChevronDown'\"\n ></riv-icon>\n </button>\n </div>\n <div *ngIf=\"n.expanded\" class=\"children\">\n <riv-select-node\n *ngFor=\"let child of n.children\"\n [mode]=\"mode\"\n [node]=\"child\"\n (selectChange)=\"selectChange.emit($event)\"\n (expandChange)=\"expandChange.emit($event)\"\n ></riv-select-node>\n </div>\n </ng-container>\n <ng-container *ngIf=\"mode === 'single'\">\n <div class=\"row\">\n <button class=\"single\" (click)=\"selectChange.emit(node.id)\">\n <span class=\"label\" rivTruncate>\n <ng-container\n *ngTemplateOutlet=\"title; context: { node: n }\"\n ></ng-container>\n </span>\n <span *ngIf=\"includeCount()\" class=\"count\">\n {{ n.count | rivNumber }}\n </span>\n </button>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".row{display:flex;align-items:center}.row label{flex-grow:1;border-radius:var(--border-radius-medium);padding:var(--size-small) var(--size-xsmall);font:var(--input-medium);display:flex;align-items:center;gap:var(--size-small);cursor:pointer}.row label:hover{background-color:var(--surface-light-2)}.title{flex-grow:1}.subtitle,.count{color:var(--type-light-low-contrast)}.expand{cursor:pointer;color:var(--purp-80);display:inline-flex;transition:background-color var(--medium-transition);border-radius:var(--border-radius-small);padding:var(--size-xsmall)}.expand:hover{background-color:var(--black-20)}.expand:active{background-color:var(--black-40)}.expand:disabled{color:var(--type-light-disabled)}.expand:disabled:hover{background-color:transparent}.children{padding-left:var(--size-large)}.single{border-radius:var(--border-radius-medium);padding:var(--size-small) var(--size-xsmall);font:var(--input-medium);display:flex;align-items:baseline;gap:var(--size-small);cursor:pointer;text-align:left;width:100%}.single:hover{background-color:var(--surface-light-2)}.single .label{flex-grow:1}\n"] }]
23
23
  }], propDecorators: { mode: [{
24
24
  type: Input
25
25
  }], node: [{
@@ -32,4 +32,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
32
32
  (function (SelectNodeComponent) {
33
33
  SelectNodeComponent.modes = ['single', 'multi'];
34
34
  })(SelectNodeComponent || (SelectNodeComponent = {}));
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvc2VsZWN0L3NlbGVjdC1ub2RlL3NlbGVjdC1ub2RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qtbm9kZS9zZWxlY3Qtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFTdkIsTUFBTSxPQUFPLG1CQUFtQjtJQU5oQztRQWNFLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUczQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7S0FLNUM7SUFIQyxZQUFZO1FBQ1YsT0FBTyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLFFBQVEsQ0FBQztJQUM5QyxDQUFDOztnSEFmVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix3S0NmaEMsZ2pEQWlEQSxtaUREbENhLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzhCQUkvQyxJQUFJO3NCQURILEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsTUFBTTtnQkFJUCxZQUFZO3NCQURYLE1BQU07O0FBUVQsV0FBaUIsbUJBQW1CO0lBQ3JCLHlCQUFLLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFFcEQsQ0FBQyxFQUhnQixtQkFBbUIsS0FBbkIsbUJBQW1CLFFBR25DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uL3N0YXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXNlbGVjdC1ub2RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LW5vZGUuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Tm9kZUNvbXBvbmVudDxPIGV4dGVuZHMgUml2U2VsZWN0LkJhc2VPcHRpb24+IHtcbiAgQElucHV0KClcbiAgbW9kZT86IFNlbGVjdE5vZGVDb21wb25lbnQuTW9kZTtcblxuICBASW5wdXQoKVxuICBub2RlPzogUml2U2VsZWN0Lk9wdGlvbjxSaXZTZWxlY3QuRnVsbE9wdGlvbjxPPj47XG5cbiAgQE91dHB1dCgpXG4gIHNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8T1snaWQnXT4oKTtcblxuICBAT3V0cHV0KClcbiAgZXhwYW5kQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxPWydpZCddPigpO1xuXG4gIGluY2x1ZGVDb3VudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMubm9kZT8uY291bnQgPT09ICdudW1iZXInO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VsZWN0Tm9kZUNvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBtb2RlcyA9IFsnc2luZ2xlJywgJ211bHRpJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIE1vZGUgPSAodHlwZW9mIG1vZGVzKVtudW1iZXJdO1xufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGU7IGxldCBuXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtb2RlID09PSAnbXVsdGknXCI+XG4gICAgPGRpdiBjbGFzcz1cIm11bHRpLXJvd1wiPlxuICAgICAgPGxhYmVsIHJpdlRydW5jYXRlPlxuICAgICAgICA8cml2LWNoZWNrYm94XG4gICAgICAgICAgKm5nSWY9XCJuLnNlbGVjdGFibGVcIlxuICAgICAgICAgIFt2YWx1ZV09XCJuLnNlbGVjdGVkID09PSB0cnVlXCJcbiAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJuLnNlbGVjdGVkID09PSAnaW5kZXRlcm1pbmF0ZSdcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJzZWxlY3RDaGFuZ2UuZW1pdChuLmlkKVwiXG4gICAgICAgID5cbiAgICAgICAgPC9yaXYtY2hlY2tib3g+XG4gICAgICAgIDxzcGFuIHJpdlRydW5jYXRlIGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICA8cml2LWhpZ2hsaWdodFxuICAgICAgICAgICAgW3RleHRdPVwibi50aXRsZVwiXG4gICAgICAgICAgICBbaW5kaWNlc109XCJuLnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyA/PyBbXVwiXG4gICAgICAgICAgPjwvcml2LWhpZ2hsaWdodD5cbiAgICAgICAgICA8cml2LWhpZ2hsaWdodFxuICAgICAgICAgICAgKm5nSWY9XCJuLnN1YnRpdGxlXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cIm4uc3VidGl0bGVcIlxuICAgICAgICAgICAgW2luZGljZXNdPVwibi5zdWJ0aXRsZUhpZ2hsaWdodEluZGljZXMgPz8gW11cIlxuICAgICAgICAgID48L3Jpdi1oaWdobGlnaHQ+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpbmNsdWRlQ291bnQoKVwiIGNsYXNzPVwiY291bnRcIj5cbiAgICAgICAgICB7eyBuLmNvdW50IHwgcml2TnVtYmVyIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwibi5jaGlsZHJlblwiXG4gICAgICAgIGNsYXNzPVwiZXhwYW5kXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFuLmV4cGFuZGFibGVcIlxuICAgICAgICAoY2xpY2spPVwiZXhwYW5kQ2hhbmdlLmVtaXQobi5pZClcIlxuICAgICAgPlxuICAgICAgICA8cml2LWljb25cbiAgICAgICAgICBbc2l6ZV09XCIyMFwiXG4gICAgICAgICAgW25hbWVdPVwibi5leHBhbmRlZCA/ICdDaGV2cm9uVXAnIDogJ0NoZXZyb25Eb3duJ1wiXG4gICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm4uZXhwYW5kZWRcIiBjbGFzcz1cImNoaWxkcmVuXCI+XG4gICAgICA8cml2LXNlbGVjdC1ub2RlXG4gICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBuLmNoaWxkcmVuXCJcbiAgICAgICAgW21vZGVdPVwibW9kZVwiXG4gICAgICAgIFtub2RlXT1cImNoaWxkXCJcbiAgICAgICAgKHNlbGVjdENoYW5nZSk9XCJzZWxlY3RDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGV4cGFuZENoYW5nZSk9XCJleHBhbmRDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgID48L3Jpdi1zZWxlY3Qtbm9kZT5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvaW5wdXQvc2VsZWN0L3NlbGVjdC1ub2RlL3NlbGVjdC1ub2RlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qtbm9kZS9zZWxlY3Qtbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFTdkIsTUFBTSxPQUFPLG1CQUFtQjtJQU5oQztRQWNFLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUczQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7S0FLNUM7SUFIQyxZQUFZO1FBQ1YsT0FBTyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxLQUFLLFFBQVEsQ0FBQztJQUM5QyxDQUFDOztnSEFmVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix3S0NmaEMsZ3JFQXVFQSw2K0REeERhLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixtQkFHVix1QkFBdUIsQ0FBQyxNQUFNOzhCQUkvQyxJQUFJO3NCQURILEtBQUs7Z0JBSU4sSUFBSTtzQkFESCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsTUFBTTtnQkFJUCxZQUFZO3NCQURYLE1BQU07O0FBUVQsV0FBaUIsbUJBQW1CO0lBQ3JCLHlCQUFLLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFVLENBQUM7QUFFcEQsQ0FBQyxFQUhnQixtQkFBbUIsS0FBbkIsbUJBQW1CLFFBR25DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uL3N0YXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXNlbGVjdC1ub2RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LW5vZGUuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Tm9kZUNvbXBvbmVudDxPIGV4dGVuZHMgUml2U2VsZWN0LkJhc2VPcHRpb24+IHtcbiAgQElucHV0KClcbiAgbW9kZT86IFNlbGVjdE5vZGVDb21wb25lbnQuTW9kZTtcblxuICBASW5wdXQoKVxuICBub2RlPzogUml2U2VsZWN0Lk9wdGlvbjxSaXZTZWxlY3QuRnVsbE9wdGlvbjxPPj47XG5cbiAgQE91dHB1dCgpXG4gIHNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8T1snaWQnXT4oKTtcblxuICBAT3V0cHV0KClcbiAgZXhwYW5kQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxPWydpZCddPigpO1xuXG4gIGluY2x1ZGVDb3VudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMubm9kZT8uY291bnQgPT09ICdudW1iZXInO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VsZWN0Tm9kZUNvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBtb2RlcyA9IFsnc2luZ2xlJywgJ211bHRpJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIE1vZGUgPSAodHlwZW9mIG1vZGVzKVtudW1iZXJdO1xufVxuIiwiPG5nLXRlbXBsYXRlICN0aXRsZSBsZXQtbj1cIm5vZGVcIj5cbiAgPHJpdi1oaWdobGlnaHRcbiAgICBbdGV4dF09XCJuLnRpdGxlXCJcbiAgICBbaW5kaWNlc109XCJuLnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyA/PyBbXVwiXG4gID48L3Jpdi1oaWdobGlnaHQ+XG4gIDxzcGFuICpuZ0lmPVwibi5zdWJ0aXRsZVwiPiZuYnNwOzwvc3Bhbj5cbiAgPHJpdi1oaWdobGlnaHRcbiAgICAqbmdJZj1cIm4uc3VidGl0bGVcIlxuICAgIGNsYXNzPVwic3VidGl0bGVcIlxuICAgIFt0ZXh0XT1cIm4uc3VidGl0bGVcIlxuICAgIFtpbmRpY2VzXT1cIm4uc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzID8/IFtdXCJcbiAgPjwvcml2LWhpZ2hsaWdodD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlOyBsZXQgblwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ211bHRpJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxsYWJlbCByaXZUcnVuY2F0ZT5cbiAgICAgICAgPHJpdi1jaGVja2JveFxuICAgICAgICAgICpuZ0lmPVwibi5zZWxlY3RhYmxlXCJcbiAgICAgICAgICBbdmFsdWVdPVwibi5zZWxlY3RlZCA9PT0gdHJ1ZVwiXG4gICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwibi5zZWxlY3RlZCA9PT0gJ2luZGV0ZXJtaW5hdGUnXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2VsZWN0Q2hhbmdlLmVtaXQobi5pZClcIlxuICAgICAgICA+XG4gICAgICAgIDwvcml2LWNoZWNrYm94PlxuICAgICAgICA8c3BhbiByaXZUcnVuY2F0ZSBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aXRsZTsgY29udGV4dDogeyBub2RlOiBuIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImluY2x1ZGVDb3VudCgpXCIgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgIHt7IG4uY291bnQgfCByaXZOdW1iZXIgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJuLmNoaWxkcmVuXCJcbiAgICAgICAgY2xhc3M9XCJleHBhbmRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiIW4uZXhwYW5kYWJsZVwiXG4gICAgICAgIChjbGljayk9XCJleHBhbmRDaGFuZ2UuZW1pdChuLmlkKVwiXG4gICAgICA+XG4gICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgICAgICBbbmFtZV09XCJuLmV4cGFuZGVkID8gJ0NoZXZyb25VcCcgOiAnQ2hldnJvbkRvd24nXCJcbiAgICAgICAgPjwvcml2LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibi5leHBhbmRlZFwiIGNsYXNzPVwiY2hpbGRyZW5cIj5cbiAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIG4uY2hpbGRyZW5cIlxuICAgICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgICAgW25vZGVdPVwiY2hpbGRcIlxuICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cInNlbGVjdENoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAoZXhwYW5kQ2hhbmdlKT1cImV4cGFuZENoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgPjwvcml2LXNlbGVjdC1ub2RlPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vZGUgPT09ICdzaW5nbGUnXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInNpbmdsZVwiIChjbGljayk9XCJzZWxlY3RDaGFuZ2UuZW1pdChub2RlLmlkKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCIgcml2VHJ1bmNhdGU+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aXRsZTsgY29udGV4dDogeyBub2RlOiBuIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImluY2x1ZGVDb3VudCgpXCIgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgIHt7IG4uY291bnQgfCByaXZOdW1iZXIgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -102,6 +102,8 @@ export var RivSelect;
102
102
  ...s.display,
103
103
  selected: getSelectedDisplay(s),
104
104
  zeroStateMessage: getZeroStateMessage(s),
105
+ dividers: !!options?.dividers,
106
+ inline: !!options?.inline,
105
107
  },
106
108
  };
107
109
  })), {
@@ -373,6 +375,20 @@ export var RivSelect;
373
375
  },
374
376
  };
375
377
  }
378
+ function setSelectedOption(state, id) {
379
+ const topLevelOptions = getTopLevelOptions(state.optionGroupData);
380
+ const option = findOption(topLevelOptions, id);
381
+ if (!option)
382
+ return state;
383
+ const newSelection = new OptionSet();
384
+ newSelection.add(option);
385
+ return {
386
+ ...state,
387
+ selection: {
388
+ selected: newSelection,
389
+ },
390
+ };
391
+ }
376
392
  function toggleVisibleSelected(state) {
377
393
  const leaves = flattenOptions(getTopLevelOptions(state.optionGroupData), true);
378
394
  const isAllSelected = leaves.every(leaf => [...state.selection.selected].map(({ id }) => id).includes(leaf.id));
@@ -455,6 +471,8 @@ export var RivSelect;
455
471
  };
456
472
  case 'toggleOptionSelected':
457
473
  return toggleSelected(state, action.id);
474
+ case 'setSelectedOption':
475
+ return setSelectedOption(state, action.id);
458
476
  case 'visibleSelectedChange':
459
477
  return toggleVisibleSelected(state);
460
478
  case 'toggleOptionExpanded':
@@ -462,4 +480,4 @@ export var RivSelect;
462
480
  }
463
481
  }
464
482
  })(RivSelect || (RivSelect = {}));
465
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9zZWxlY3Qvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFrQyxNQUFNLFNBQVMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0QsT0FBTyxFQUNMLFdBQVcsRUFFWCxHQUFHLEVBQ0gsS0FBSyxFQUVMLGFBQWEsRUFDYixJQUFJLEVBQ0osT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBSWQsTUFBTSxLQUFXLFNBQVMsQ0Ftc0J6QjtBQW5zQkQsV0FBaUIsU0FBUztJQThCeEI7OztNQUdFO0lBQ0YsTUFBYSxTQUFnQyxTQUFRLEdBQU07UUFDaEQsR0FBRyxDQUFDLE1BQVM7WUFDcEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFUSxHQUFHLENBQUMsTUFBUztZQUNwQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3BCLHVFQUF1RTtnQkFDdkUsbUVBQW1FO2dCQUNuRSxxQkFBcUI7Z0JBQ3JCLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDbkMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDaEMsQ0FBQztnQkFDRixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFD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QUM7QUFDSCxDQUFDLEVBbnNCZ0IsU0FBUyxLQUFULFNBQVMsUUFtc0J6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBGdXNlLCB7IEZ1c2VSZXN1bHQsIElGdXNlT3B0aW9ucyB9IGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgZGVmYXVsdHNEZWVwLCBmbGF0dGVuRGVlcCwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIGNvbm5lY3RhYmxlLFxuICBDb25uZWN0YWJsZSxcbiAgbWFwLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgc2NhbixcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEZWVwUGFydGlhbCB9IGZyb20gJ3V0aWxpdHktdHlwZXMnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlzdWFsaXphdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2U2VsZWN0IHtcbiAgZXhwb3J0IHR5cGUgQmFzZU9wdGlvbiA9IHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgY291bnQ/OiBudW1iZXI7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHRpdGxlSGlnaGxpZ2h0SW5kaWNlcz86IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gICAgc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24gPSBCYXNlT3B0aW9uPiA9IEJhc2VPcHRpb24gJlxuICAgIE8gJiB7XG4gICAgICBjaGlsZHJlbj86IE9wdGlvbjxPPltdO1xuICAgIH07XG5cbiAgZXhwb3J0IHR5cGUgT3B0aW9uR3JvdXA8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0ge1xuICAgIGhlYWRlcj86IHN0cmluZztcbiAgICBvcHRpb25zOiBPcHRpb248Tz5bXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNdWx0aVNlbGVjdGlvblN0YXRlID0gYm9vbGVhbiB8ICdpbmRldGVybWluYXRlJztcblxuICBleHBvcnQgdHlwZSBGdWxsT3B0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE8gJiB7XG4gICAgc2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBleHBhbmRhYmxlOiBib29sZWFuO1xuICB9O1xuXG4gIC8qXG4gICAgVGhlIE9wdGlvblNldCBjbGFzcyBwcm92aWRlcyBTZXQtbGlrZSBmdW5jdGlvbmFsaXR5LCBidXQgdW5pcXVlbmVzcyBpc1xuICAgIGRldGVybWluZWQgYnkgdGhlIE9wdGlvbidzIElEIHJhdGhlciB0aGFuIHRoZSBvYmplY3QgcmVmZXJlbmNlLlxuICAqL1xuICBleHBvcnQgY2xhc3MgT3B0aW9uU2V0PE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiBleHRlbmRzIFNldDxPPiB7XG4gICAgb3ZlcnJpZGUgaGFzKG9wdGlvbjogTykge1xuICAgICAgcmV0dXJuICEhWy4uLnRoaXNdLmZpbmQobyA9PiBvLmlkID09PSBvcHRpb24uaWQpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGFkZChvcHRpb246IE8pIHtcbiAgICAgIGlmICh0aGlzLmhhcyhvcHRpb24pKSB7XG4gICAgICAgIC8vIFRoZSBTZXQgYWxyZWFkeSBoYXMgc29tZSB2ZXJzaW9uIG9mIHRoaXMgb3B0aW9uLCBidXQgd2UnbGwgbWFrZSBzdXJlXG4gICAgICAgIC8vIGl0IGhhcyB0aGUgbW9zdCByZWNlbnQgb2JqZWN0IHJlZmVyZW5jZSAod2hpbGUga2VlcGluZyBpbnNlcnRpb25cbiAgICAgICAgLy8gb3JkZXIgY29uc2lzdGVudCkuXG4gICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbLi4udGhpc10ubWFwKG8gPT5cbiAgICAgICAgICBvLmlkID09PSBvcHRpb24uaWQgPyBvcHRpb24gOiBvLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIG5ld09wdGlvbnMuZm9yRWFjaChvID0+IHtcbiAgICAgICAgICBzdXBlci5hZGQobyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VwZXIuYWRkKG9wdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkZWxldGUob3B0aW9uOiBPKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IFsuLi50aGlzXS5maW5kKG8gPT4gby5pZCA9PT0gb3B0aW9uLmlkKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBzdXBlci5kZWxldGUoZXhpc3RpbmcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vL1xuICAvLyBTdGF0ZSAvL1xuICAvLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIENvcmVTdGF0ZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHNlYXJjaDogc3RyaW5nO1xuICAgIH07XG4gICAgbG9hZDoge1xuICAgICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICAgIGVycm9yOiB1bmtub3duIHwgbnVsbDtcbiAgICB9O1xuICAgIG9wdGlvbkdyb3VwRGF0YTogT3B0aW9uR3JvdXA8Tz5bXTtcbiAgICBzZWxlY3Rpb246IHtcbiAgICAgIHNlbGVjdGVkOiBPcHRpb25TZXQ8Tz47XG4gICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgICAgb3BlbjogYm9vbGVhbjtcbiAgICAgIGV4cGFuZGVkT3B0aW9uczogU2V0PE9bJ2lkJ10+O1xuICAgIH07XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbFN0YXRlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IENvcmVTdGF0ZTxPPiAmIHtcbiAgICBxdWVyeToge1xuICAgICAgYWxsb3dTZWFyY2g6IGJvb2xlYW47XG4gICAgfTtcbiAgICBmdWxsT3B0aW9uR3JvdXBzOiBPcHRpb25Hcm91cDxGdWxsT3B0aW9uPE8+PltdOyAvLyBNYXliZSB0aGUgYW5zd2VyIGlzIHdlIGRvbid0IG92ZXJyaWRlIHRoaXMuIFByb2JhYmx5IG5vdCB0aGUgZnVsbCBhbnN3ZXIsIGJlY2FzZSB3ZSdsbCBzdGlsbCBuZWVkIGEgd2F5IHRvIGdldCBhcm91bmQgdGhlIGZhY3QgdGhhdCBvYmplY3QgcmVmZXJlbmNlcyBvbiB0aGUgaW5wdXQgT3B0aW9uR3JvdXBzIG1heSBub3QgYmUgc3RhYmxlLlxuICAgIHNlbGVjdGlvbjoge1xuICAgICAgYWxsb3dNdWx0aVNlbGVjdDogYm9vbGVhbjtcbiAgICAgIGFsbG93U2VsZWN0QWxsOiBib29sZWFuO1xuICAgICAgdmlzaWJsZVNlbGVjdGlvblN0YXRlOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgc2VsZWN0ZWQ6IHN0cmluZztcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgfTtcblxuICAvLy8vLy8vLy8vLy8vXG4gIC8vIEFjdGlvbnMgLy9cbiAgLy8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPVxuICAgIHwgeyB0eXBlOiAnbG9hZCcgfVxuICAgIHwgeyB0eXBlOiAnb3BlbkNoYW5nZSc7IG9wZW46IGJvb2xlYW4gfVxuICAgIHwgeyB0eXBlOiAnc2VhcmNoQ2hhbmdlJzsgcGF5bG9hZDogc3RyaW5nIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NlbGVjdGlvbkNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IENvcmVTdGF0ZTxPPlsnc2VsZWN0aW9uJ107XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25TZWxlY3RlZCc7XG4gICAgICAgIGlkOiBPWydpZCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndmlzaWJsZVNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9O1xuXG4gIHR5cGUgSW50ZXJuYWxBY3Rpb248TyBleHRlbmRzIEJhc2VPcHRpb24+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWRDb21wbGV0ZSc7IGRhdGE6IE9wdGlvbkdyb3VwPE8+W10gfVxuICAgIHwgeyB0eXBlOiAnbG9hZEVycm9yJzsgZXJyb3I6IHVua25vd24gfTtcblxuICBleHBvcnQgdHlwZSBTb3VyY2U8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gKFxuICAgIHF1ZXJ5OiBDb3JlU3RhdGU8Tz5bJ3F1ZXJ5J10sXG4gICAgbW9zdFJlY2VudEFjdGlvbjogQWN0aW9uPE8+LFxuICApID0+IFByb21pc2U8Q29yZVN0YXRlPE8+WydvcHRpb25Hcm91cERhdGEnXT47XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBNYW5hZ2VyIC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IHtcbiAgICBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxPPj47XG4gICAgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxPPj47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlck9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0ge1xuICAgIGluaXRpYWxTdGF0ZT86IERlZXBQYXJ0aWFsPENvcmVTdGF0ZTxPPj47XG4gICAgYWxsb3dNdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gICAgYWxsb3dTZWFyY2g/OiBib29sZWFuO1xuICAgIGFsbG93U2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFuYWdlcjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc291cmNlOiBTb3VyY2U8Tz4sXG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPE8+LFxuICApOiBNYW5hZ2VyPE8+IHtcbiAgICBjb25zdCBkZWZhdWx0U3RhdGU6IENvcmVTdGF0ZTxPPiA9IHtcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICB9LFxuICAgICAgbG9hZDoge1xuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9LFxuICAgICAgb3B0aW9uR3JvdXBEYXRhOiBbXSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBzZWxlY3RlZDogbmV3IE9wdGlvblNldCgpLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QuLi4nLFxuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgZXhwYW5kZWRPcHRpb25zOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdGVkSW5pdGlhbFN0YXRlOiBDb3JlU3RhdGU8Tz4gPSBkZWZhdWx0c0RlZXAoXG4gICAgICB7fSxcbiAgICAgIG9wdGlvbnM/LmluaXRpYWxTdGF0ZSxcbiAgICAgIGRlZmF1bHRTdGF0ZSxcbiAgICApO1xuXG4gICAgY29uc3QgYWN0aW9uczogU3ViamVjdDxBY3Rpb248Tz4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBpbnRlcm5hbEFjdGlvbnM6IFN1YmplY3Q8SW50ZXJuYWxBY3Rpb248Tz4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjb3JlU3RhdGU6IE9ic2VydmFibGU8Q29yZVN0YXRlPE8+PiA9IG1lcmdlKFxuICAgICAgYWN0aW9ucyxcbiAgICAgIGludGVybmFsQWN0aW9ucyxcbiAgICApLnBpcGUoXG4gICAgICBzY2FuKChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gcmVkdWNlKHN0YXRlLCBhY3Rpb24pO1xuXG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdsb2FkJzpcbiAgICAgICAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgICAgICAgc291cmNlKG5ld1N0YXRlLnF1ZXJ5LCBhY3Rpb24pXG4gICAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGludGVybmFsQWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWRDb21wbGV0ZScsIGRhdGEgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxBY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZEVycm9yJywgZXJyb3IgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgICB9LCBkZWZhdWx0ZWRJbml0aWFsU3RhdGUpLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPE8+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcChzID0+IHtcbiAgICAgICAgICBjb25zdCBmdWxsT3B0aW9uR3JvdXBzOiBPcHRpb25Hcm91cDxGdWxsT3B0aW9uPE8+PltdID1cbiAgICAgICAgICAgIHMub3B0aW9uR3JvdXBEYXRhLm1hcChvcHRpb25Hcm91cCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uR3JvdXAsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uR3JvdXAub3B0aW9ucy5tYXAob3B0aW9uID0+XG4gICAgICAgICAgICAgICAgICBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uKHMsIG9wdGlvbiksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKGZ1bGxPcHRpb25Hcm91cHMpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICBhbGxvd1NlYXJjaDogISFvcHRpb25zPy5hbGxvd1NlYXJjaCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdWxsT3B0aW9uR3JvdXBzLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnMuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICBhbGxvd011bHRpU2VsZWN0OiAhIW9wdGlvbnM/LmFsbG93TXVsdGlTZWxlY3QsXG4gICAgICAgICAgICAgIGFsbG93U2VsZWN0QWxsOiAhIW9wdGlvbnM/LmFsbG93U2VsZWN0QWxsLFxuICAgICAgICAgICAgICB2aXNpYmxlU2VsZWN0aW9uU3RhdGU6XG4gICAgICAgICAgICAgICAgZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZSh0b3BMZXZlbE9wdGlvbnMpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgICAgLi4ucy5kaXNwbGF5LFxuICAgICAgICAgICAgICBzZWxlY3RlZDogZ2V0U2VsZWN0ZWREaXNwbGF5KHMpLFxuICAgICAgICAgICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBnZXRaZXJvU3RhdGVNZXNzYWdlKHMpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBzdGF0ZS5jb25uZWN0KCk7XG5cbiAgICBhY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zLCBzdGF0ZSB9O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPVxuICAgIE1hbmFnZXJPcHRpb25zPE8+ICYge1xuICAgICAgZnVzZU9wdGlvbnM/OiBJRnVzZU9wdGlvbnM8Tz47XG4gICAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5NZW1vcnlNYW5hZ2VyPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBmZXRjaERhdGFzZXQ6ICgpID0+IFByb21pc2U8T3B0aW9uR3JvdXA8Tz5bXT4gfCBPcHRpb25Hcm91cDxPPltdLFxuICAgIG9wdGlvbnM/OiBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPE8+LFxuICApOiBNYW5hZ2VyPE8+IHtcbiAgICBsZXQgZGF0YTogT3B0aW9uR3JvdXA8Tz5bXTtcbiAgICBsZXQgZnVzZTogRnVzZTxPPjtcbiAgICBsZXQgcGFyZW50czogTWFwPE9bJ2lkJ10sIE9bJ2lkJ10+O1xuICAgIGxldCBjaGlsZHJlbjogTWFwPE9bJ2lkJ10sIE9bJ2lkJ11bXT47XG5cbiAgICBjb25zdCBzb3VyY2U6IFNvdXJjZTxPPiA9IGFzeW5jIChxdWVyeSwgbW9zdFJlY2VudEFjdGlvbikgPT4ge1xuICAgICAgLypcbiAgICAgICAgUmUtZmV0Y2ggdGhlIG9wdGlvbnMgb24gdGhlIGxvYWQgYWN0aW9uLCBhbmQgcmVidWlsZCB0aGUgc3RhdGVcbiAgICAgICAgZGVyaXZlZCBmcm9tIHRoZSBvcHRpb24gZGF0YS5cbiAgICAgICovXG4gICAgICBpZiAobW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnbG9hZCcpIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICBjb25zdCB0b3BMZXZlbE9wdGlvbnMgPSBnZXRUb3BMZXZlbE9wdGlvbnMoZGF0YSk7XG5cbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGZsYXR0ZW5PcHRpb25zKHRvcExldmVsT3B0aW9ucywgZmFsc2UpLCB7XG4gICAgICAgICAgdGhyZXNob2xkOiAwLjIsXG4gICAgICAgICAga2V5czogWyd0aXRsZSddLFxuICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICBpbmNsdWRlTWF0Y2hlczogdHJ1ZSxcbiAgICAgICAgICAuLi5vcHRpb25zPy5mdXNlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW3BhcmVudHMsIGNoaWxkcmVuXSA9IGdldFJlbGF0aW9uc2hpcE1hcHModG9wTGV2ZWxPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAgSWYgdGhlIHVzZXIgaXMgbm90IHNlYXJjaGluZyBvcHRpb25zLCByZXR1cm4gdGhlIGZ1bGwgc2V0IG9mIG9wdGlvbnNcbiAgICAgICAgYXMtaXMuXG4gICAgICAqL1xuICAgICAgaWYgKCFxdWVyeS5zZWFyY2gpIHJldHVybiBkYXRhO1xuXG4gICAgICAvKlxuICAgICAgICBFeGVjdXRlIHRoZSBzZWFyY2ggd2l0aCBmdXNlLiBPbmNlIHdlIGhhdmUgdGhlIHNlYXJjaCBtYXRjaCBkYXRhLFxuICAgICAgICByZWJ1aWxkIGp1c3QgYXMgbXVjaCBvZiB0aGUgdHJlZSBhcyBpcyBuZWVkZWQgdG8gcmVuZGVyIHRoZSBzZWFyY2hcbiAgICAgICAgcmVzdWx0cy4gU3BlY2lmaWNhbGx5LCBhbnkgbWF0Y2ggd2lsbCBuZWVkIGFsbCBvZiBpdHMgYW5jZXN0b3JzIChzb1xuICAgICAgICB0aGF0IG1hdGNoZWQgbGVhZiBub2RlcyBhcmUgc2hvd24gbmVzdGVkIHVuZGVyIHRoZWlyIGFuY2VzdG9ycykgYW5kIGFsbFxuICAgICAgICBvZiBpdHMgY2hpbGRyZW4gKGJlY2F1c2UgYSBtYXRjaGluZyBwYXJlbnQgbWVhbnMgdGhhdCBhbGwgb2YgaXRzXG4gICAgICAgIGRlc2NlbmRhbnRzIG1hdGNoIHRvbywgcGVyIHRoZSBkZXNpZ24gc3BlY2lmaWNhdGlvbiksIHdoZXRoZXIgdGhleVxuICAgICAgICB0aGVtc2VsdmVzIG1hdGNoZWQgb3Igbm90LlxuICAgICAgKi9cbiAgICAgIGNvbnN0IG1hdGNoZWRPcHRpb25zOiBGdXNlUmVzdWx0PE8+W10gPSBmdXNlLnNlYXJjaChxdWVyeS5zZWFyY2gpO1xuICAgICAgY29uc3QgbWF0Y2hlZElkczogU2V0PE9bJ2lkJ10+ID0gbmV3IFNldChcbiAgICAgICAgbWF0Y2hlZE9wdGlvbnMubWFwKHJlc3VsdCA9PiByZXN1bHQuaXRlbS5pZCksXG4gICAgICApO1xuXG4gICAgICBjb25zdCBtYXRjaEFuY2VzdG9yczogU2V0PE9bJ2lkJ10+ID0gbmV3IFNldCgpO1xuICAgICAgZnVuY3Rpb24gY29sbGVjdEFuY2VzdG9ycyhpZHM6IE9bJ2lkJ11bXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gcGFyZW50cy5nZXQoaWQpO1xuICAgICAgICAgIGlmIChwYXJlbnRJZCkge1xuICAgICAgICAgICAgbWF0Y2hBbmNlc3RvcnMuYWRkKHBhcmVudElkKTtcbiAgICAgICAgICAgIGNvbGxlY3RBbmNlc3RvcnMoW3BhcmVudElkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb2xsZWN0QW5jZXN0b3JzKFsuLi5tYXRjaGVkSWRzXSk7XG5cbiAgICAgIGNvbnN0IG1hdGNoRGVzY2VuZGFudHM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoKTtcbiAgICAgIGZ1bmN0aW9uIGNvbGxlY3REZXNjZW5kYW50cyhpZHM6IE9bJ2lkJ11bXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuSWRzID0gY2hpbGRyZW4uZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoY2hpbGRyZW5JZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW5JZHMpIHtcbiAgICAgICAgICAgICAgbWF0Y2hEZXNjZW5kYW50cy5hZGQoY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sbGVjdERlc2NlbmRhbnRzKGNoaWxkcmVuSWRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbGxlY3REZXNjZW5kYW50cyhbLi4ubWF0Y2hlZElkc10pO1xuXG4gICAgICAvKlxuICAgICAgICBOZXh0LCB3ZSdsbCBjb21iaW5lIGFsbCB0aGUgbWF0Y2hlZCBJRHMgd2l0aCB0aGVpciBkaXJlY3QgYW5jZXN0b3JzIGFuZFxuICAgICAgICBkZXNjYW5kYW50cywgYW5kIGZpbHRlciB0aGUgb3JpZ2luYWwgZGF0YSBzZXQgZG93biB0byBqdXN0IHRoZXNlXG4gICAgICAgIG9wdGlvbnMuXG4gICAgICAqL1xuICAgICAgY29uc3QgZmlsdGVyZWRJZHM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoW1xuICAgICAgICAuLi5tYXRjaGVkSWRzLFxuICAgICAgICAuLi5tYXRjaEFuY2VzdG9ycyxcbiAgICAgICAgLi4ubWF0Y2hEZXNjZW5kYW50cyxcbiAgICAgIF0pO1xuXG4gICAgICBmdW5jdGlvbiBmaWx0ZXJPcHRpb25zKG9wdGlvbnM6IE9wdGlvbjxPPltdKTogT3B0aW9uPE8+W10ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnM6IE9wdGlvbjxPPltdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZmlsdGVyZWRJZHMuaGFzKG9wdGlvbi5pZCkpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogb3B0aW9uLmNoaWxkcmVuXG4gICAgICAgICAgICAgICAgPyBmaWx0ZXJPcHRpb25zKG9wdGlvbi5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZmlsdGVyT3B0aW9ucyhnZXRUb3BMZXZlbE9wdGlvbnMoZGF0YSkpO1xuXG4gICAgICAvKlxuICAgICAgICBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGFuIGFycmF5IG9mIGRpc3RpbmN0IHRyZWVzICh0b3AtbGV2ZWwgb3B0aW9ucyksXG4gICAgICAgIGZpbHRlcmVkIGRvd24gdG8gb25seSB0aGUgb3B0aW9ucyBtYXRjaGluZyB0aGUgc2VhcmNoIHF1ZXJ5LiBOb3RlIHRoYXRcbiAgICAgICAgd2UgZG9uJ3QgY2FyZSBhYm91dCBzZWN0aW9uIGhlYWRlcnMgd2hlbiBzZWFyY2hpbmcgc2luY2UgcmVzdWx0cyBzaG91bGRcbiAgICAgICAgYmUgb3JkZXJlZCBieSByZWxldmFuY2UuIFRvIGNhbGN1bGF0ZSB0aGUgb3JkZXIgb2YgdGhlc2UgdHJlZXMsIHdlJ2xsXG4gICAgICAgIHRha2UgdGhlIHRvdGFsIG1hdGNoIHNjb3JlcyBmb3Igb3B0aW9ucyBmb3VuZCBpbiB0aGUgdHJlZSwgZGl2aWRlZCBieVxuICAgICAgICB0aGUgY291bnQgb2YgbWF0Y2hlcyBpbiB0aGUgdHJlZSAodGhlIGJlc3QgYXZlcmFnZSBtYXRjaCBzY29yZSkuXG4gICAgICAqL1xuXG4gICAgICBjb25zdCBzY29yZU1hcDogTWFwPE9bJ2lkJ10sIG51bWJlcj4gPSBuZXcgTWFwKFxuICAgICAgICBtYXRjaGVkT3B0aW9ucy5tYXAocmVzdWx0ID0+IFtyZXN1bHQuaXRlbS5pZCwgcmVzdWx0LnNjb3JlID8/IDBdKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBvcmRlcmVkID0gc29ydEJ5KGZpbHRlcmVkT3B0aW9ucywgKG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyID0+IHtcbiAgICAgICAgZnVuY3Rpb24gY2FsY3VsYXRlU2NvcmUob3B0aW9uOiBPcHRpb248Tz4pOiBudW1iZXIge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2NvcmVNYXAuZ2V0KG9wdGlvbi5pZCkgPz8gMCkgK1xuICAgICAgICAgICAgKG9wdGlvbi5jaGlsZHJlbiA/PyBbXSkucmVkdWNlKFxuICAgICAgICAgICAgICAoc2NvcmUsIGNoaWxkKSA9PiBzY29yZSArIGNhbGN1bGF0ZVNjb3JlKGNoaWxkKSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvdW50KG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgMSArXG4gICAgICAgICAgICAob3B0aW9uLmNoaWxkcmVuID8/IFtdKS5yZWR1Y2UoXG4gICAgICAgICAgICAgIChjb3VudCwgY2hpbGQpID0+IGNvdW50ICsgY2FsY3VsYXRlQ291bnQoY2hpbGQpLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxTY29yZSA9IGNhbGN1bGF0ZVNjb3JlKG9wdGlvbik7XG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBjYWxjdWxhdGVDb3VudChvcHRpb24pO1xuICAgICAgICByZXR1cm4gdG90YWxTY29yZSAvIHRvdGFsQ291bnQ7XG4gICAgICB9KTtcblxuICAgICAgLypcbiAgICAgICAgRmluYWxseSwgd2UnbGwgYWRkIGhpZ2hsaWdodCBpbmRpY2VzIHRvIHRoZSBtYXRjaGVzIHNvIHRoYXQgdGhleSBjYW4gYmVcbiAgICAgICAgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgICAgKi9cblxuICAgICAgY29uc3QgaGlnaGxpZ2h0TWFwOiBNYXA8XG4gICAgICAgIE9bJ2lkJ10sXG4gICAgICAgIFBpY2s8QmFzZU9wdGlvbiwgJ3RpdGxlSGlnaGxpZ2h0SW5kaWNlcycgfCAnc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzJz5cbiAgICAgID4gPSBuZXcgTWFwKFxuICAgICAgICBtYXRjaGVkT3B0aW9ucy5tYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICBjb25zdCBoaWdobGlnaHRzOiBQaWNrPFxuICAgICAgICAgICAgQmFzZU9wdGlvbixcbiAgICAgICAgICAgICd0aXRsZUhpZ2hsaWdodEluZGljZXMnIHwgJ3N1YnRpdGxlSGlnaGxpZ2h0SW5kaWNlcydcbiAgICAgICAgICA+ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiByZXN1bHQubWF0Y2hlcyA/PyBbXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoLmtleSA9PT0gJ3RpdGxlJykge1xuICAgICAgICAgICAgICBoaWdobGlnaHRzLnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyA9IFsuLi5tYXRjaC5pbmRpY2VzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaC5rZXkgPT09ICdzdWJ0aXRsZScpIHtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0cy5zdWJ0aXRsZUhpZ2hsaWdodEluZGljZXMgPSBbLi4ubWF0Y2guaW5kaWNlc107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbcmVzdWx0Lml0ZW0uaWQsIGhpZ2hsaWdodHNdO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBmdW5jdGlvbiBhZGRIaWdobGlnaHRzVG9PcHRpb24ob3B0aW9uczogT3B0aW9uPE8+W10pOiBPcHRpb248Tz5bXSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLm1hcChvcHRpb24gPT4gKHtcbiAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgLi4uaGlnaGxpZ2h0TWFwLmdldChvcHRpb24uaWQpLFxuICAgICAgICAgIC4uLihvcHRpb24uY2hpbGRyZW5cbiAgICAgICAgICAgID8geyBjaGlsZHJlbjogYWRkSGlnaGxpZ2h0c1RvT3B0aW9uKG9wdGlvbi5jaGlsZHJlbikgfVxuICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW3sgb3B0aW9uczogYWRkSGlnaGxpZ2h0c1RvT3B0aW9uKG9yZGVyZWQpIH1dO1xuICAgIH07XG5cbiAgICByZXR1cm4gY3JlYXRlTWFuYWdlcihzb3VyY2UsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBTdGF0ZSByZWR1Y2VyICh3aXRoIGhlbHBlcnMpIC8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICBmdW5jdGlvbiBnZXRSZWxhdGlvbnNoaXBNYXBzPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25zOiBPcHRpb248Tz5bXSxcbiAgKTogW01hcDxPWydpZCddLCBPWydpZCddPiwgTWFwPE9bJ2lkJ10sIE9bJ2lkJ11bXT5dIHtcbiAgICBjb25zdCBwYXJlbnRzID0gbmV3IE1hcCgpO1xuICAgIGZ1bmN0aW9uIGJ1aWxkUGFyZW50c01hcChvcHRpb25zOiBPcHRpb248Tz5bXSwgcGFyZW50PzogT3B0aW9uPE8+KTogdm9pZCB7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICBwYXJlbnRzLnNldChvcHRpb24uaWQsIHBhcmVudC5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgIGJ1aWxkUGFyZW50c01hcChvcHRpb24uY2hpbGRyZW4sIG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRQYXJlbnRzTWFwKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgZnVuY3Rpb24gYnVpbGRDaGlsZHJlbk1hcChvcHRpb25zOiBPcHRpb248Tz5bXSk6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY2hpbGRyZW4uc2V0KFxuICAgICAgICAgICAgb3B0aW9uLmlkLFxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkcmVuLm1hcCgoeyBpZCB9KSA9PiBpZCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBidWlsZENoaWxkcmVuTWFwKG9wdGlvbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRDaGlsZHJlbk1hcChvcHRpb25zKTtcblxuICAgIHJldHVybiBbcGFyZW50cywgY2hpbGRyZW5dO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IE9wdGlvbjxPPltdIHtcbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZTxPcHRpb248Tz5bXT4oXG4gICAgICAob3B0aW9ucywgZ3JvdXApID0+IFsuLi5vcHRpb25zLCAuLi5ncm91cC5vcHRpb25zXSxcbiAgICAgIFtdLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQYXJlbnRNdWx0aVNlbGVjdGlvblN0YXRlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBjaGlsZHJlbjogT3B0aW9uPEZ1bGxPcHRpb248Tz4+W10sXG4gICk6IE11bHRpU2VsZWN0aW9uU3RhdGUge1xuICAgIGlmIChjaGlsZHJlbi5ldmVyeShjaGlsZCA9PiBjaGlsZC5zZWxlY3RlZCA9PT0gdHJ1ZSkpIHJldHVybiB0cnVlO1xuICAgIGlmIChjaGlsZHJlbi5ldmVyeShjaGlsZCA9PiBjaGlsZC5zZWxlY3RlZCA9PT0gZmFsc2UpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICdpbmRldGVybWluYXRlJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGF1Z21lbnRPcHRpb25Ub0Z1bGxPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgb3B0aW9uOiBPcHRpb248Tz4sXG4gICk6IE9wdGlvbjxGdWxsT3B0aW9uPE8+PiB7XG4gICAgaWYgKG9wdGlvbi5jaGlsZHJlbikge1xuICAgICAgY29uc3QgYXVnbWVudGVkQ2hpbGRyZW4gPSBvcHRpb24uY2hpbGRyZW4ubWFwKGNoaWxkID0+XG4gICAgICAgIGF1Z21lbnRPcHRpb25Ub0Z1bGxPcHRpb24oc3RhdGUsIGNoaWxkKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgIGNoaWxkcmVuOiBhdWdtZW50ZWRDaGlsZHJlbixcbiAgICAgICAgc2VsZWN0ZWQ6IGdldFBhcmVudE11bHRpU2VsZWN0aW9uU3RhdGUoYXVnbWVudGVkQ2hpbGRyZW4pLFxuICAgICAgICBleHBhbmRlZDogc3RhdGUucXVlcnkuc2VhcmNoXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBzdGF0ZS5kaXNwbGF5LmV4cGFuZGVkT3B0aW9ucy5oYXMob3B0aW9uLmlkKSxcbiAgICAgICAgc2VsZWN0YWJsZTogIXN0YXRlLnF1ZXJ5LnNlYXJjaCxcbiAgICAgICAgZXhwYW5kYWJsZTogIXN0YXRlLnF1ZXJ5LnNlYXJjaCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb24sXG4gICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICAgICAgc2VsZWN0ZWQ6IFsuLi5zdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWRdXG4gICAgICAgIC5tYXAoKHsgaWQgfSkgPT4gaWQpXG4gICAgICAgIC5pbmNsdWRlcyhvcHRpb24uaWQpLFxuICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTZWxlY3RlZERpc3BsYXk8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFsuLi5zdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWRdLm1hcCgoeyB0aXRsZSB9KSA9PiB0aXRsZSkuam9pbignLCAnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFplcm9TdGF0ZU1lc3NhZ2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChzdGF0ZS5vcHRpb25Hcm91cERhdGEuZXZlcnkoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICBpZiAoc3RhdGUucXVlcnkuc2VhcmNoKSByZXR1cm4gJ05vIHJlc3VsdHMgZm91bmQuJztcbiAgICAgIHJldHVybiAnTm8gb3B0aW9ucy4nO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmRPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbnM6IE9wdGlvbjxPPltdLFxuICAgIGlkOiBPWydpZCddLFxuICApOiBPcHRpb248Tz4gfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9uLmlkID09PSBpZCkgcmV0dXJuIG9wdGlvbjtcbiAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBmaW5kT3B0aW9uKG9wdGlvbi5jaGlsZHJlbiwgaWQpO1xuICAgICAgICBpZiAoY2hpbGQpIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBmbGF0dGVuT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uczogT3B0aW9uPE8+W10sXG4gICAgbGVhZk9ubHk6IGJvb2xlYW4sXG4gICk6IE9wdGlvbjxPPltdIHtcbiAgICByZXR1cm4gZmxhdHRlbkRlZXAoXG4gICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSBvcHRpb24uY2hpbGRyZW4ubWFwKGNoaWxkID0+XG4gICAgICAgICAgICBmbGF0dGVuT3B0aW9ucyhbY2hpbGRdLCBsZWFmT25seSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbGVhZk9ubHkgPyBkZXNjZW5kYW50cyA6IFtvcHRpb24sIC4uLmRlc2NlbmRhbnRzXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW29wdGlvbl07XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVTZWxlY3RlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBpZDogT1snaWQnXSxcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCB0b3BMZXZlbE9wdGlvbnMgPSBnZXRUb3BMZXZlbE9wdGlvbnMoc3RhdGUub3B0aW9uR3JvdXBEYXRhKTtcbiAgICBjb25zdCBvcHRpb24gPSBmaW5kT3B0aW9uKHRvcExldmVsT3B0aW9ucywgaWQpO1xuICAgIGlmICghb3B0aW9uKSByZXR1cm4gc3RhdGU7XG5cbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBuZXcgT3B0aW9uU2V0KHN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG5cbiAgICBjb25zdCBuZXdWYWx1ZSA9ICEoXG4gICAgICBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uKHN0YXRlLCBvcHRpb24pLnNlbGVjdGVkID09PSB0cnVlXG4gICAgKTtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuT3B0aW9ucyhbb3B0aW9uXSwgdHJ1ZSk7XG4gICAgZm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIG5ld1NlbGVjdGlvbi5hZGQobGVhZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZWxlY3Rpb24uZGVsZXRlKGxlYWYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBzZWxlY3RlZDogbmV3U2VsZWN0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlVmlzaWJsZVNlbGVjdGVkPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IGxlYXZlcyA9IGZsYXR0ZW5PcHRpb25zKFxuICAgICAgZ2V0VG9wTGV2ZWxPcHRpb25zKHN0YXRlLm9wdGlvbkdyb3VwRGF0YSksXG4gICAgICB0cnVlLFxuICAgICk7XG4gICAgY29uc3QgaXNBbGxTZWxlY3RlZCA9IGxlYXZlcy5ldmVyeShsZWFmID0+XG4gICAgICBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXS5tYXAoKHsgaWQgfSkgPT4gaWQpLmluY2x1ZGVzKGxlYWYuaWQpLFxuICAgICk7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IE9wdGlvblNldChzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuXG4gICAgZm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuICAgICAgaWYgKGlzQWxsU2VsZWN0ZWQpIG5ld1NlbGVjdGlvbi5kZWxldGUobGVhZik7XG4gICAgICBlbHNlIG5ld1NlbGVjdGlvbi5hZGQobGVhZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIC4uLnN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZU9wdGlvbkV4cGFuZGVkPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGlkOiBPWydpZCddLFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gIXN0YXRlLmRpc3BsYXkuZXhwYW5kZWRPcHRpb25zLmhhcyhpZCk7XG4gICAgY29uc3QgbmV3RXhwYW5kZWRPcHRpb25zID0gbmV3IFNldChzdGF0ZS5kaXNwbGF5LmV4cGFuZGVkT3B0aW9ucyk7XG4gICAgaWYgKG5ld1ZhbHVlKSBuZXdFeHBhbmRlZE9wdGlvbnMuYWRkKGlkKTtcbiAgICBlbHNlIG5ld0V4cGFuZGVkT3B0aW9ucy5kZWxldGUoaWQpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgZXhwYW5kZWRPcHRpb25zOiBuZXdFeHBhbmRlZE9wdGlvbnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiByZWR1Y2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgYWN0aW9uOiBBY3Rpb248Tz4gfCBJbnRlcm5hbEFjdGlvbjxPPixcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdsb2FkJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2xvYWRDb21wbGV0ZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgbG9hZDoge1xuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbkdyb3VwRGF0YTogYWN0aW9uLmRhdGEsXG4gICAgICAgIH07XG4gICAgICBjYXNlICdsb2FkRXJyb3InOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGxvYWQ6IHtcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGFjdGlvbi5lcnJvcixcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnb3BlbkNoYW5nZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgICAgIG9wZW46IGFjdGlvbi5vcGVuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICBzZWFyY2g6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICBjYXNlICdzZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHNlbGVjdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b2dnbGVPcHRpb25TZWxlY3RlZCc6XG4gICAgICAgIHJldHVybiB0b2dnbGVTZWxlY3RlZChzdGF0ZSwgYWN0aW9uLmlkKTtcbiAgICAgIGNhc2UgJ3Zpc2libGVTZWxlY3RlZENoYW5nZSc6XG4gICAgICAgIHJldHVybiB0b2dnbGVWaXNpYmxlU2VsZWN0ZWQoc3RhdGUpO1xuICAgICAgY2FzZSAndG9nZ2xlT3B0aW9uRXhwYW5kZWQnOlxuICAgICAgICByZXR1cm4gdG9nZ2xlT3B0aW9uRXhwYW5kZWQoc3RhdGUsIGFjdGlvbi5pZCk7XG4gICAgfVxuICB9XG59XG4iXX0=
483
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9zZWxlY3Qvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFrQyxNQUFNLFNBQVMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDM0QsT0FBTyxFQUNMLFdBQVcsRUFFWCxHQUFHLEVBQ0gsS0FBSyxFQUVMLGFBQWEsRUFDYixJQUFJLEVBQ0osT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBSWQsTUFBTSxLQUFXLFNBQVMsQ0FrdUJ6QjtBQWx1QkQsV0FBaUIsU0FBUztJQThCeEI7OztNQUdFO0lBQ0YsTUFBYSxTQUFnQyxTQUFRLEdBQU07UUFDaEQsR0FBRyxDQUFDLE1BQVM7WUFDcEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFUSxHQUFHLENBQUMsTUFBUztZQUNwQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3BCLHVFQUF1RTtnQkFDdkUsbUVBQW1FO2dCQUNuRSxxQkFBcUI7Z0JBQ3JCLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDbkMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDaEMsQ0FBQztnQkFDRixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFD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QU0sQ0FBQyxJQUFJO3FCQUNsQjtpQkFDRixDQUFDO1lBQ0osS0FBSyxjQUFjO2dCQUNqQixPQUFPO29CQUNMLEdBQUcsS0FBSztvQkFDUixLQUFLLEVBQUU7d0JBQ0wsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPO3FCQUN2QjtpQkFDRixDQUFDO1lBQ0osS0FBSyxpQkFBaUI7Z0JBQ3BCLE9BQU87b0JBQ0wsR0FBRyxLQUFLO29CQUNSLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTztpQkFDMUIsQ0FBQztZQUNKLEtBQUssc0JBQXNCO2dCQUN6QixPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLEtBQUssbUJBQW1CO2dCQUN0QixPQUFPLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsS0FBSyx1QkFBdUI7Z0JBQzFCLE9BQU8scUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsS0FBSyxzQkFBc0I7Z0JBQ3pCLE9BQU8sb0JBQW9CLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7QUFDSCxDQUFDLEVBbHVCZ0IsU0FBUyxLQUFULFNBQVMsUUFrdUJ6QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBGdXNlLCB7IEZ1c2VSZXN1bHQsIElGdXNlT3B0aW9ucyB9IGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHsgZGVmYXVsdHNEZWVwLCBmbGF0dGVuRGVlcCwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIGNvbm5lY3RhYmxlLFxuICBDb25uZWN0YWJsZSxcbiAgbWFwLFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgc2NhbixcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEZWVwUGFydGlhbCB9IGZyb20gJ3V0aWxpdHktdHlwZXMnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlzdWFsaXphdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2U2VsZWN0IHtcbiAgZXhwb3J0IHR5cGUgQmFzZU9wdGlvbiA9IHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgY291bnQ/OiBudW1iZXI7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHRpdGxlSGlnaGxpZ2h0SW5kaWNlcz86IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gICAgc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24gPSBCYXNlT3B0aW9uPiA9IEJhc2VPcHRpb24gJlxuICAgIE8gJiB7XG4gICAgICBjaGlsZHJlbj86IE9wdGlvbjxPPltdO1xuICAgIH07XG5cbiAgZXhwb3J0IHR5cGUgT3B0aW9uR3JvdXA8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0ge1xuICAgIGhlYWRlcj86IHN0cmluZztcbiAgICBvcHRpb25zOiBPcHRpb248Tz5bXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNdWx0aVNlbGVjdGlvblN0YXRlID0gYm9vbGVhbiB8ICdpbmRldGVybWluYXRlJztcblxuICBleHBvcnQgdHlwZSBGdWxsT3B0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE8gJiB7XG4gICAgc2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBleHBhbmRhYmxlOiBib29sZWFuO1xuICB9O1xuXG4gIC8qXG4gICAgVGhlIE9wdGlvblNldCBjbGFzcyBwcm92aWRlcyBTZXQtbGlrZSBmdW5jdGlvbmFsaXR5LCBidXQgdW5pcXVlbmVzcyBpc1xuICAgIGRldGVybWluZWQgYnkgdGhlIE9wdGlvbidzIElEIHJhdGhlciB0aGFuIHRoZSBvYmplY3QgcmVmZXJlbmNlLlxuICAqL1xuICBleHBvcnQgY2xhc3MgT3B0aW9uU2V0PE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiBleHRlbmRzIFNldDxPPiB7XG4gICAgb3ZlcnJpZGUgaGFzKG9wdGlvbjogTykge1xuICAgICAgcmV0dXJuICEhWy4uLnRoaXNdLmZpbmQobyA9PiBvLmlkID09PSBvcHRpb24uaWQpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGFkZChvcHRpb246IE8pIHtcbiAgICAgIGlmICh0aGlzLmhhcyhvcHRpb24pKSB7XG4gICAgICAgIC8vIFRoZSBTZXQgYWxyZWFkeSBoYXMgc29tZSB2ZXJzaW9uIG9mIHRoaXMgb3B0aW9uLCBidXQgd2UnbGwgbWFrZSBzdXJlXG4gICAgICAgIC8vIGl0IGhhcyB0aGUgbW9zdCByZWNlbnQgb2JqZWN0IHJlZmVyZW5jZSAod2hpbGUga2VlcGluZyBpbnNlcnRpb25cbiAgICAgICAgLy8gb3JkZXIgY29uc2lzdGVudCkuXG4gICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBbLi4udGhpc10ubWFwKG8gPT5cbiAgICAgICAgICBvLmlkID09PSBvcHRpb24uaWQgPyBvcHRpb24gOiBvLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIG5ld09wdGlvbnMuZm9yRWFjaChvID0+IHtcbiAgICAgICAgICBzdXBlci5hZGQobyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VwZXIuYWRkKG9wdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvdmVycmlkZSBkZWxldGUob3B0aW9uOiBPKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IFsuLi50aGlzXS5maW5kKG8gPT4gby5pZCA9PT0gb3B0aW9uLmlkKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBzdXBlci5kZWxldGUoZXhpc3RpbmcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vL1xuICAvLyBTdGF0ZSAvL1xuICAvLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIENvcmVTdGF0ZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgcXVlcnk6IHtcbiAgICAgIHNlYXJjaDogc3RyaW5nO1xuICAgIH07XG4gICAgbG9hZDoge1xuICAgICAgbG9hZGluZzogYm9vbGVhbjtcbiAgICAgIGVycm9yOiB1bmtub3duIHwgbnVsbDtcbiAgICB9O1xuICAgIG9wdGlvbkdyb3VwRGF0YTogT3B0aW9uR3JvdXA8Tz5bXTtcbiAgICBzZWxlY3Rpb246IHtcbiAgICAgIHNlbGVjdGVkOiBPcHRpb25TZXQ8Tz47XG4gICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgICAgb3BlbjogYm9vbGVhbjtcbiAgICAgIGV4cGFuZGVkT3B0aW9uczogU2V0PE9bJ2lkJ10+O1xuICAgIH07XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbFN0YXRlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IENvcmVTdGF0ZTxPPiAmIHtcbiAgICBxdWVyeToge1xuICAgICAgYWxsb3dTZWFyY2g6IGJvb2xlYW47XG4gICAgfTtcbiAgICBmdWxsT3B0aW9uR3JvdXBzOiBPcHRpb25Hcm91cDxGdWxsT3B0aW9uPE8+PltdOyAvLyBNYXliZSB0aGUgYW5zd2VyIGlzIHdlIGRvbid0IG92ZXJyaWRlIHRoaXMuIFByb2JhYmx5IG5vdCB0aGUgZnVsbCBhbnN3ZXIsIGJlY2FzZSB3ZSdsbCBzdGlsbCBuZWVkIGEgd2F5IHRvIGdldCBhcm91bmQgdGhlIGZhY3QgdGhhdCBvYmplY3QgcmVmZXJlbmNlcyBvbiB0aGUgaW5wdXQgT3B0aW9uR3JvdXBzIG1heSBub3QgYmUgc3RhYmxlLlxuICAgIHNlbGVjdGlvbjoge1xuICAgICAgYWxsb3dNdWx0aVNlbGVjdDogYm9vbGVhbjtcbiAgICAgIGFsbG93U2VsZWN0QWxsOiBib29sZWFuO1xuICAgICAgdmlzaWJsZVNlbGVjdGlvblN0YXRlOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgc2VsZWN0ZWQ6IHN0cmluZztcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgICBkaXZpZGVyczogYm9vbGVhbjtcbiAgICAgIGlubGluZTogYm9vbGVhbjtcbiAgICB9O1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gQWN0aW9ucyAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9XG4gICAgfCB7IHR5cGU6ICdsb2FkJyB9XG4gICAgfCB7IHR5cGU6ICdvcGVuQ2hhbmdlJzsgb3BlbjogYm9vbGVhbiB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogQ29yZVN0YXRlPE8+WydzZWxlY3Rpb24nXTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvblNlbGVjdGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZXRTZWxlY3RlZE9wdGlvbic7XG4gICAgICAgIGlkOiBPWydpZCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndmlzaWJsZVNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9O1xuXG4gIHR5cGUgSW50ZXJuYWxBY3Rpb248TyBleHRlbmRzIEJhc2VPcHRpb24+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWRDb21wbGV0ZSc7IGRhdGE6IE9wdGlvbkdyb3VwPE8+W10gfVxuICAgIHwgeyB0eXBlOiAnbG9hZEVycm9yJzsgZXJyb3I6IHVua25vd24gfTtcblxuICBleHBvcnQgdHlwZSBTb3VyY2U8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gKFxuICAgIHF1ZXJ5OiBDb3JlU3RhdGU8Tz5bJ3F1ZXJ5J10sXG4gICAgbW9zdFJlY2VudEFjdGlvbjogQWN0aW9uPE8+LFxuICApID0+IFByb21pc2U8Q29yZVN0YXRlPE8+WydvcHRpb25Hcm91cERhdGEnXT47XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBNYW5hZ2VyIC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IHtcbiAgICBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxPPj47XG4gICAgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxPPj47XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlck9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0ge1xuICAgIGluaXRpYWxTdGF0ZT86IERlZXBQYXJ0aWFsPENvcmVTdGF0ZTxPPj47XG4gICAgYWxsb3dNdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gICAgYWxsb3dTZWFyY2g/OiBib29sZWFuO1xuICAgIGFsbG93U2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgICBkaXZpZGVycz86IGJvb2xlYW47XG4gICAgaW5saW5lPzogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFuYWdlcjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc291cmNlOiBTb3VyY2U8Tz4sXG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPE8+LFxuICApOiBNYW5hZ2VyPE8+IHtcbiAgICBjb25zdCBkZWZhdWx0U3RhdGU6IENvcmVTdGF0ZTxPPiA9IHtcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICB9LFxuICAgICAgbG9hZDoge1xuICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9LFxuICAgICAgb3B0aW9uR3JvdXBEYXRhOiBbXSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBzZWxlY3RlZDogbmV3IE9wdGlvblNldCgpLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QuLi4nLFxuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgZXhwYW5kZWRPcHRpb25zOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdGVkSW5pdGlhbFN0YXRlOiBDb3JlU3RhdGU8Tz4gPSBkZWZhdWx0c0RlZXAoXG4gICAgICB7fSxcbiAgICAgIG9wdGlvbnM/LmluaXRpYWxTdGF0ZSxcbiAgICAgIGRlZmF1bHRTdGF0ZSxcbiAgICApO1xuXG4gICAgY29uc3QgYWN0aW9uczogU3ViamVjdDxBY3Rpb248Tz4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBpbnRlcm5hbEFjdGlvbnM6IFN1YmplY3Q8SW50ZXJuYWxBY3Rpb248Tz4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjb3JlU3RhdGU6IE9ic2VydmFibGU8Q29yZVN0YXRlPE8+PiA9IG1lcmdlKFxuICAgICAgYWN0aW9ucyxcbiAgICAgIGludGVybmFsQWN0aW9ucyxcbiAgICApLnBpcGUoXG4gICAgICBzY2FuKChzdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gcmVkdWNlKHN0YXRlLCBhY3Rpb24pO1xuXG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdsb2FkJzpcbiAgICAgICAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgICAgICAgc291cmNlKG5ld1N0YXRlLnF1ZXJ5LCBhY3Rpb24pXG4gICAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGludGVybmFsQWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWRDb21wbGV0ZScsIGRhdGEgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWxBY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZEVycm9yJywgZXJyb3IgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3U3RhdGU7XG4gICAgICB9LCBkZWZhdWx0ZWRJbml0aWFsU3RhdGUpLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPE8+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcChzID0+IHtcbiAgICAgICAgICBjb25zdCBmdWxsT3B0aW9uR3JvdXBzOiBPcHRpb25Hcm91cDxGdWxsT3B0aW9uPE8+PltdID1cbiAgICAgICAgICAgIHMub3B0aW9uR3JvdXBEYXRhLm1hcChvcHRpb25Hcm91cCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uR3JvdXAsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uR3JvdXAub3B0aW9ucy5tYXAob3B0aW9uID0+XG4gICAgICAgICAgICAgICAgICBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uKHMsIG9wdGlvbiksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKGZ1bGxPcHRpb25Hcm91cHMpO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICBhbGxvd1NlYXJjaDogISFvcHRpb25zPy5hbGxvd1NlYXJjaCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdWxsT3B0aW9uR3JvdXBzLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnMuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICBhbGxvd011bHRpU2VsZWN0OiAhIW9wdGlvbnM/LmFsbG93TXVsdGlTZWxlY3QsXG4gICAgICAgICAgICAgIGFsbG93U2VsZWN0QWxsOiAhIW9wdGlvbnM/LmFsbG93U2VsZWN0QWxsLFxuICAgICAgICAgICAgICB2aXNpYmxlU2VsZWN0aW9uU3RhdGU6XG4gICAgICAgICAgICAgICAgZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZSh0b3BMZXZlbE9wdGlvbnMpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgICAgLi4ucy5kaXNwbGF5LFxuICAgICAgICAgICAgICBzZWxlY3RlZDogZ2V0U2VsZWN0ZWREaXNwbGF5KHMpLFxuICAgICAgICAgICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBnZXRaZXJvU3RhdGVNZXNzYWdlKHMpLFxuICAgICAgICAgICAgICBkaXZpZGVyczogISFvcHRpb25zPy5kaXZpZGVycyxcbiAgICAgICAgICAgICAgaW5saW5lOiAhIW9wdGlvbnM/LmlubGluZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgYWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWQnIH0pO1xuXG4gICAgcmV0dXJuIHsgYWN0aW9ucywgc3RhdGUgfTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEluTWVtb3J5TWFuYWdlck9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+ID1cbiAgICBNYW5hZ2VyT3B0aW9uczxPPiAmIHtcbiAgICAgIGZ1c2VPcHRpb25zPzogSUZ1c2VPcHRpb25zPE8+O1xuICAgIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlcjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPE9wdGlvbkdyb3VwPE8+W10+IHwgT3B0aW9uR3JvdXA8Tz5bXSxcbiAgICBvcHRpb25zPzogSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxPPixcbiAgKTogTWFuYWdlcjxPPiB7XG4gICAgbGV0IGRhdGE6IE9wdGlvbkdyb3VwPE8+W107XG4gICAgbGV0IGZ1c2U6IEZ1c2U8Tz47XG4gICAgbGV0IHBhcmVudHM6IE1hcDxPWydpZCddLCBPWydpZCddPjtcbiAgICBsZXQgY2hpbGRyZW46IE1hcDxPWydpZCddLCBPWydpZCddW10+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8Tz4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIC8qXG4gICAgICAgIFJlLWZldGNoIHRoZSBvcHRpb25zIG9uIHRoZSBsb2FkIGFjdGlvbiwgYW5kIHJlYnVpbGQgdGhlIHN0YXRlXG4gICAgICAgIGRlcml2ZWQgZnJvbSB0aGUgb3B0aW9uIGRhdGEuXG4gICAgICAqL1xuICAgICAgaWYgKG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKGRhdGEpO1xuXG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShmbGF0dGVuT3B0aW9ucyh0b3BMZXZlbE9wdGlvbnMsIGZhbHNlKSwge1xuICAgICAgICAgIHRocmVzaG9sZDogMC4yLFxuICAgICAgICAgIGtleXM6IFsndGl0bGUnXSxcbiAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgaW5jbHVkZU1hdGNoZXM6IHRydWUsXG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtwYXJlbnRzLCBjaGlsZHJlbl0gPSBnZXRSZWxhdGlvbnNoaXBNYXBzKHRvcExldmVsT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICAgIElmIHRoZSB1c2VyIGlzIG5vdCBzZWFyY2hpbmcgb3B0aW9ucywgcmV0dXJuIHRoZSBmdWxsIHNldCBvZiBvcHRpb25zXG4gICAgICAgIGFzLWlzLlxuICAgICAgKi9cbiAgICAgIGlmICghcXVlcnkuc2VhcmNoKSByZXR1cm4gZGF0YTtcblxuICAgICAgLypcbiAgICAgICAgRXhlY3V0ZSB0aGUgc2VhcmNoIHdpdGggZnVzZS4gT25jZSB3ZSBoYXZlIHRoZSBzZWFyY2ggbWF0Y2ggZGF0YSxcbiAgICAgICAgcmVidWlsZCBqdXN0IGFzIG11Y2ggb2YgdGhlIHRyZWUgYXMgaXMgbmVlZGVkIHRvIHJlbmRlciB0aGUgc2VhcmNoXG4gICAgICAgIHJlc3VsdHMuIFNwZWNpZmljYWxseSwgYW55IG1hdGNoIHdpbGwgbmVlZCBhbGwgb2YgaXRzIGFuY2VzdG9ycyAoc29cbiAgICAgICAgdGhhdCBtYXRjaGVkIGxlYWYgbm9kZXMgYXJlIHNob3duIG5lc3RlZCB1bmRlciB0aGVpciBhbmNlc3RvcnMpIGFuZCBhbGxcbiAgICAgICAgb2YgaXRzIGNoaWxkcmVuIChiZWNhdXNlIGEgbWF0Y2hpbmcgcGFyZW50IG1lYW5zIHRoYXQgYWxsIG9mIGl0c1xuICAgICAgICBkZXNjZW5kYW50cyBtYXRjaCB0b28sIHBlciB0aGUgZGVzaWduIHNwZWNpZmljYXRpb24pLCB3aGV0aGVyIHRoZXlcbiAgICAgICAgdGhlbXNlbHZlcyBtYXRjaGVkIG9yIG5vdC5cbiAgICAgICovXG4gICAgICBjb25zdCBtYXRjaGVkT3B0aW9uczogRnVzZVJlc3VsdDxPPltdID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKTtcbiAgICAgIGNvbnN0IG1hdGNoZWRJZHM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoXG4gICAgICAgIG1hdGNoZWRPcHRpb25zLm1hcChyZXN1bHQgPT4gcmVzdWx0Lml0ZW0uaWQpLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbWF0Y2hBbmNlc3RvcnM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoKTtcbiAgICAgIGZ1bmN0aW9uIGNvbGxlY3RBbmNlc3RvcnMoaWRzOiBPWydpZCddW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudHMuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgICAgICAgIG1hdGNoQW5jZXN0b3JzLmFkZChwYXJlbnRJZCk7XG4gICAgICAgICAgICBjb2xsZWN0QW5jZXN0b3JzKFtwYXJlbnRJZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29sbGVjdEFuY2VzdG9ycyhbLi4ubWF0Y2hlZElkc10pO1xuXG4gICAgICBjb25zdCBtYXRjaERlc2NlbmRhbnRzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KCk7XG4gICAgICBmdW5jdGlvbiBjb2xsZWN0RGVzY2VuZGFudHMoaWRzOiBPWydpZCddW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbklkcyA9IGNoaWxkcmVuLmdldChpZCk7XG4gICAgICAgICAgaWYgKGNoaWxkcmVuSWRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuSWRzKSB7XG4gICAgICAgICAgICAgIG1hdGNoRGVzY2VuZGFudHMuYWRkKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbGxlY3REZXNjZW5kYW50cyhjaGlsZHJlbklkcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb2xsZWN0RGVzY2VuZGFudHMoWy4uLm1hdGNoZWRJZHNdKTtcblxuICAgICAgLypcbiAgICAgICAgTmV4dCwgd2UnbGwgY29tYmluZSBhbGwgdGhlIG1hdGNoZWQgSURzIHdpdGggdGhlaXIgZGlyZWN0IGFuY2VzdG9ycyBhbmRcbiAgICAgICAgZGVzY2FuZGFudHMsIGFuZCBmaWx0ZXIgdGhlIG9yaWdpbmFsIGRhdGEgc2V0IGRvd24gdG8ganVzdCB0aGVzZVxuICAgICAgICBvcHRpb25zLlxuICAgICAgKi9cbiAgICAgIGNvbnN0IGZpbHRlcmVkSWRzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KFtcbiAgICAgICAgLi4ubWF0Y2hlZElkcyxcbiAgICAgICAgLi4ubWF0Y2hBbmNlc3RvcnMsXG4gICAgICAgIC4uLm1hdGNoRGVzY2VuZGFudHMsXG4gICAgICBdKTtcblxuICAgICAgZnVuY3Rpb24gZmlsdGVyT3B0aW9ucyhvcHRpb25zOiBPcHRpb248Tz5bXSk6IE9wdGlvbjxPPltdIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zOiBPcHRpb248Tz5bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGZpbHRlcmVkSWRzLmhhcyhvcHRpb24uaWQpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZE9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5jaGlsZHJlblxuICAgICAgICAgICAgICAgID8gZmlsdGVyT3B0aW9ucyhvcHRpb24uY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IGZpbHRlck9wdGlvbnMoZ2V0VG9wTGV2ZWxPcHRpb25zKGRhdGEpKTtcblxuICAgICAgLypcbiAgICAgICAgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhbiBhcnJheSBvZiBkaXN0aW5jdCB0cmVlcyAodG9wLWxldmVsIG9wdGlvbnMpLFxuICAgICAgICBmaWx0ZXJlZCBkb3duIHRvIG9ubHkgdGhlIG9wdGlvbnMgbWF0Y2hpbmcgdGhlIHNlYXJjaCBxdWVyeS4gTm90ZSB0aGF0XG4gICAgICAgIHdlIGRvbid0IGNhcmUgYWJvdXQgc2VjdGlvbiBoZWFkZXJzIHdoZW4gc2VhcmNoaW5nIHNpbmNlIHJlc3VsdHMgc2hvdWxkXG4gICAgICAgIGJlIG9yZGVyZWQgYnkgcmVsZXZhbmNlLiBUbyBjYWxjdWxhdGUgdGhlIG9yZGVyIG9mIHRoZXNlIHRyZWVzLCB3ZSdsbFxuICAgICAgICB0YWtlIHRoZSB0b3RhbCBtYXRjaCBzY29yZXMgZm9yIG9wdGlvbnMgZm91bmQgaW4gdGhlIHRyZWUsIGRpdmlkZWQgYnlcbiAgICAgICAgdGhlIGNvdW50IG9mIG1hdGNoZXMgaW4gdGhlIHRyZWUgKHRoZSBiZXN0IGF2ZXJhZ2UgbWF0Y2ggc2NvcmUpLlxuICAgICAgKi9cblxuICAgICAgY29uc3Qgc2NvcmVNYXA6IE1hcDxPWydpZCddLCBudW1iZXI+ID0gbmV3IE1hcChcbiAgICAgICAgbWF0Y2hlZE9wdGlvbnMubWFwKHJlc3VsdCA9PiBbcmVzdWx0Lml0ZW0uaWQsIHJlc3VsdC5zY29yZSA/PyAwXSksXG4gICAgICApO1xuICAgICAgY29uc3Qgb3JkZXJlZCA9IHNvcnRCeShmaWx0ZXJlZE9wdGlvbnMsIChvcHRpb246IE9wdGlvbjxPPik6IG51bWJlciA9PiB7XG4gICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjb3JlKG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHNjb3JlTWFwLmdldChvcHRpb24uaWQpID8/IDApICtcbiAgICAgICAgICAgIChvcHRpb24uY2hpbGRyZW4gPz8gW10pLnJlZHVjZShcbiAgICAgICAgICAgICAgKHNjb3JlLCBjaGlsZCkgPT4gc2NvcmUgKyBjYWxjdWxhdGVTY29yZShjaGlsZCksXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGVDb3VudChvcHRpb246IE9wdGlvbjxPPik6IG51bWJlciB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgKG9wdGlvbi5jaGlsZHJlbiA/PyBbXSkucmVkdWNlKFxuICAgICAgICAgICAgICAoY291bnQsIGNoaWxkKSA9PiBjb3VudCArIGNhbGN1bGF0ZUNvdW50KGNoaWxkKSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsU2NvcmUgPSBjYWxjdWxhdGVTY29yZShvcHRpb24pO1xuICAgICAgICBjb25zdCB0b3RhbENvdW50ID0gY2FsY3VsYXRlQ291bnQob3B0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRvdGFsU2NvcmUgLyB0b3RhbENvdW50O1xuICAgICAgfSk7XG5cbiAgICAgIC8qXG4gICAgICAgIEZpbmFsbHksIHdlJ2xsIGFkZCBoaWdobGlnaHQgaW5kaWNlcyB0byB0aGUgbWF0Y2hlcyBzbyB0aGF0IHRoZXkgY2FuIGJlXG4gICAgICAgIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICAgICovXG5cbiAgICAgIGNvbnN0IGhpZ2hsaWdodE1hcDogTWFwPFxuICAgICAgICBPWydpZCddLFxuICAgICAgICBQaWNrPEJhc2VPcHRpb24sICd0aXRsZUhpZ2hsaWdodEluZGljZXMnIHwgJ3N1YnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyc+XG4gICAgICA+ID0gbmV3IE1hcChcbiAgICAgICAgbWF0Y2hlZE9wdGlvbnMubWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgY29uc3QgaGlnaGxpZ2h0czogUGljazxcbiAgICAgICAgICAgIEJhc2VPcHRpb24sXG4gICAgICAgICAgICAndGl0bGVIaWdobGlnaHRJbmRpY2VzJyB8ICdzdWJ0aXRsZUhpZ2hsaWdodEluZGljZXMnXG4gICAgICAgICAgPiA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcmVzdWx0Lm1hdGNoZXMgPz8gW10pIHtcbiAgICAgICAgICAgIGlmIChtYXRjaC5rZXkgPT09ICd0aXRsZScpIHtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0cy50aXRsZUhpZ2hsaWdodEluZGljZXMgPSBbLi4ubWF0Y2guaW5kaWNlc107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2gua2V5ID09PSAnc3VidGl0bGUnKSB7XG4gICAgICAgICAgICAgIGhpZ2hsaWdodHMuc3VidGl0bGVIaWdobGlnaHRJbmRpY2VzID0gWy4uLm1hdGNoLmluZGljZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW3Jlc3VsdC5pdGVtLmlkLCBoaWdobGlnaHRzXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgZnVuY3Rpb24gYWRkSGlnaGxpZ2h0c1RvT3B0aW9uKG9wdGlvbnM6IE9wdGlvbjxPPltdKTogT3B0aW9uPE8+W10ge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5tYXAob3B0aW9uID0+ICh7XG4gICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgIC4uLmhpZ2hsaWdodE1hcC5nZXQob3B0aW9uLmlkKSxcbiAgICAgICAgICAuLi4ob3B0aW9uLmNoaWxkcmVuXG4gICAgICAgICAgICA/IHsgY2hpbGRyZW46IGFkZEhpZ2hsaWdodHNUb09wdGlvbihvcHRpb24uY2hpbGRyZW4pIH1cbiAgICAgICAgICAgIDogbnVsbCksXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFt7IG9wdGlvbnM6IGFkZEhpZ2hsaWdodHNUb09wdGlvbihvcmRlcmVkKSB9XTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1hbmFnZXIoc291cmNlLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gU3RhdGUgcmVkdWNlciAod2l0aCBoZWxwZXJzKSAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gZ2V0UmVsYXRpb25zaGlwTWFwczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uczogT3B0aW9uPE8+W10sXG4gICk6IFtNYXA8T1snaWQnXSwgT1snaWQnXT4sIE1hcDxPWydpZCddLCBPWydpZCddW10+XSB7XG4gICAgY29uc3QgcGFyZW50cyA9IG5ldyBNYXAoKTtcbiAgICBmdW5jdGlvbiBidWlsZFBhcmVudHNNYXAob3B0aW9uczogT3B0aW9uPE8+W10sIHBhcmVudD86IE9wdGlvbjxPPik6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgcGFyZW50cy5zZXQob3B0aW9uLmlkLCBwYXJlbnQuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4pIHtcbiAgICAgICAgICBidWlsZFBhcmVudHNNYXAob3B0aW9uLmNoaWxkcmVuLCBvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGJ1aWxkUGFyZW50c01hcChvcHRpb25zKTtcblxuICAgIGNvbnN0IGNoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIGZ1bmN0aW9uIGJ1aWxkQ2hpbGRyZW5NYXAob3B0aW9uczogT3B0aW9uPE8+W10pOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgIGNoaWxkcmVuLnNldChcbiAgICAgICAgICAgIG9wdGlvbi5pZCxcbiAgICAgICAgICAgIG9wdGlvbi5jaGlsZHJlbi5tYXAoKHsgaWQgfSkgPT4gaWQpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnVpbGRDaGlsZHJlbk1hcChvcHRpb24uY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGJ1aWxkQ2hpbGRyZW5NYXAob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gW3BhcmVudHMsIGNoaWxkcmVuXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFRvcExldmVsT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBPcHRpb25Hcm91cDxPPltdLFxuICApOiBPcHRpb248Tz5bXSB7XG4gICAgcmV0dXJuIG9wdGlvbkdyb3Vwcy5yZWR1Y2U8T3B0aW9uPE8+W10+KFxuICAgICAgKG9wdGlvbnMsIGdyb3VwKSA9PiBbLi4ub3B0aW9ucywgLi4uZ3JvdXAub3B0aW9uc10sXG4gICAgICBbXSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgY2hpbGRyZW46IE9wdGlvbjxGdWxsT3B0aW9uPE8+PltdLFxuICApOiBNdWx0aVNlbGVjdGlvblN0YXRlIHtcbiAgICBpZiAoY2hpbGRyZW4uZXZlcnkoY2hpbGQgPT4gY2hpbGQuc2VsZWN0ZWQgPT09IHRydWUpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoY2hpbGRyZW4uZXZlcnkoY2hpbGQgPT4gY2hpbGQuc2VsZWN0ZWQgPT09IGZhbHNlKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAnaW5kZXRlcm1pbmF0ZSc7XG4gIH1cblxuICBmdW5jdGlvbiBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIG9wdGlvbjogT3B0aW9uPE8+LFxuICApOiBPcHRpb248RnVsbE9wdGlvbjxPPj4ge1xuICAgIGlmIChvcHRpb24uY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IGF1Z21lbnRlZENoaWxkcmVuID0gb3B0aW9uLmNoaWxkcmVuLm1hcChjaGlsZCA9PlxuICAgICAgICBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uKHN0YXRlLCBjaGlsZCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICBjaGlsZHJlbjogYXVnbWVudGVkQ2hpbGRyZW4sXG4gICAgICAgIHNlbGVjdGVkOiBnZXRQYXJlbnRNdWx0aVNlbGVjdGlvblN0YXRlKGF1Z21lbnRlZENoaWxkcmVuKSxcbiAgICAgICAgZXhwYW5kZWQ6IHN0YXRlLnF1ZXJ5LnNlYXJjaFxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogc3RhdGUuZGlzcGxheS5leHBhbmRlZE9wdGlvbnMuaGFzKG9wdGlvbi5pZCksXG4gICAgICAgIHNlbGVjdGFibGU6ICFzdGF0ZS5xdWVyeS5zZWFyY2gsXG4gICAgICAgIGV4cGFuZGFibGU6ICFzdGF0ZS5xdWVyeS5zZWFyY2gsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9uLFxuICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgICAgIHNlbGVjdGVkOiBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXVxuICAgICAgICAubWFwKCh7IGlkIH0pID0+IGlkKVxuICAgICAgICAuaW5jbHVkZXMob3B0aW9uLmlkKSxcbiAgICAgIGV4cGFuZGVkOiBmYWxzZSxcbiAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICBleHBhbmRhYmxlOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWREaXNwbGF5PE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXS5tYXAoKHsgdGl0bGUgfSkgPT4gdGl0bGUpLmpvaW4oJywgJyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRaZXJvU3RhdGVNZXNzYWdlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoc3RhdGUub3B0aW9uR3JvdXBEYXRhLmV2ZXJ5KGdyb3VwID0+IGdyb3VwLm9wdGlvbnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgaWYgKHN0YXRlLnF1ZXJ5LnNlYXJjaCkgcmV0dXJuICdObyByZXN1bHRzIGZvdW5kLic7XG4gICAgICByZXR1cm4gJ05vIG9wdGlvbnMuJztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kT3B0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25zOiBPcHRpb248Tz5bXSxcbiAgICBpZDogT1snaWQnXSxcbiAgKTogT3B0aW9uPE8+IHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbi5pZCA9PT0gaWQpIHJldHVybiBvcHRpb247XG4gICAgICBpZiAob3B0aW9uLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZmluZE9wdGlvbihvcHRpb24uY2hpbGRyZW4sIGlkKTtcbiAgICAgICAgaWYgKGNoaWxkKSByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gZmxhdHRlbk9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbnM6IE9wdGlvbjxPPltdLFxuICAgIGxlYWZPbmx5OiBib29sZWFuLFxuICApOiBPcHRpb248Tz5bXSB7XG4gICAgcmV0dXJuIGZsYXR0ZW5EZWVwKFxuICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gb3B0aW9uLmNoaWxkcmVuLm1hcChjaGlsZCA9PlxuICAgICAgICAgICAgZmxhdHRlbk9wdGlvbnMoW2NoaWxkXSwgbGVhZk9ubHkpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGxlYWZPbmx5ID8gZGVzY2VuZGFudHMgOiBbb3B0aW9uLCAuLi5kZXNjZW5kYW50c107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtvcHRpb25dO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlU2VsZWN0ZWQ8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgaWQ6IE9bJ2lkJ10sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKHN0YXRlLm9wdGlvbkdyb3VwRGF0YSk7XG4gICAgY29uc3Qgb3B0aW9uID0gZmluZE9wdGlvbih0b3BMZXZlbE9wdGlvbnMsIGlkKTtcbiAgICBpZiAoIW9wdGlvbikgcmV0dXJuIHN0YXRlO1xuXG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IE9wdGlvblNldChzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuXG4gICAgY29uc3QgbmV3VmFsdWUgPSAhKFxuICAgICAgYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbihzdGF0ZSwgb3B0aW9uKS5zZWxlY3RlZCA9PT0gdHJ1ZVxuICAgICk7XG4gICAgY29uc3QgbGVhdmVzID0gZmxhdHRlbk9wdGlvbnMoW29wdGlvbl0sIHRydWUpO1xuICAgIGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICBuZXdTZWxlY3Rpb24uYWRkKGxlYWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U2VsZWN0aW9uLmRlbGV0ZShsZWFmKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGVkT3B0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGlkOiBPWydpZCddLFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IHRvcExldmVsT3B0aW9ucyA9IGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5vcHRpb25Hcm91cERhdGEpO1xuICAgIGNvbnN0IG9wdGlvbiA9IGZpbmRPcHRpb24odG9wTGV2ZWxPcHRpb25zLCBpZCk7XG4gICAgaWYgKCFvcHRpb24pIHJldHVybiBzdGF0ZTtcblxuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IG5ldyBPcHRpb25TZXQ8Tz4oKTtcbiAgICBuZXdTZWxlY3Rpb24uYWRkKG9wdGlvbik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVZpc2libGVTZWxlY3RlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuT3B0aW9ucyhcbiAgICAgIGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5vcHRpb25Hcm91cERhdGEpLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIGNvbnN0IGlzQWxsU2VsZWN0ZWQgPSBsZWF2ZXMuZXZlcnkobGVhZiA9PlxuICAgICAgWy4uLnN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZF0ubWFwKCh7IGlkIH0pID0+IGlkKS5pbmNsdWRlcyhsZWFmLmlkKSxcbiAgICApO1xuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IG5ldyBPcHRpb25TZXQoc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkKTtcblxuICAgIGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcbiAgICAgIGlmIChpc0FsbFNlbGVjdGVkKSBuZXdTZWxlY3Rpb24uZGVsZXRlKGxlYWYpO1xuICAgICAgZWxzZSBuZXdTZWxlY3Rpb24uYWRkKGxlYWYpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAuLi5zdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIHNlbGVjdGVkOiBuZXdTZWxlY3Rpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVPcHRpb25FeHBhbmRlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBpZDogT1snaWQnXSxcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICFzdGF0ZS5kaXNwbGF5LmV4cGFuZGVkT3B0aW9ucy5oYXMoaWQpO1xuICAgIGNvbnN0IG5ld0V4cGFuZGVkT3B0aW9ucyA9IG5ldyBTZXQoc3RhdGUuZGlzcGxheS5leHBhbmRlZE9wdGlvbnMpO1xuICAgIGlmIChuZXdWYWx1ZSkgbmV3RXhwYW5kZWRPcHRpb25zLmFkZChpZCk7XG4gICAgZWxzZSBuZXdFeHBhbmRlZE9wdGlvbnMuZGVsZXRlKGlkKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGV4cGFuZGVkT3B0aW9uczogbmV3RXhwYW5kZWRPcHRpb25zLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcmVkdWNlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGFjdGlvbjogQWN0aW9uPE8+IHwgSW50ZXJuYWxBY3Rpb248Tz4sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAnbG9hZCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgbG9hZDoge1xuICAgICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICBjYXNlICdsb2FkQ29tcGxldGUnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGxvYWQ6IHtcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcHRpb25Hcm91cERhdGE6IGFjdGlvbi5kYXRhLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnbG9hZEVycm9yJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ29wZW5DaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgICAgICBvcGVuOiBhY3Rpb24ub3BlbixcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnc2VhcmNoQ2hhbmdlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnc2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBzZWxlY3Rpb246IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9nZ2xlT3B0aW9uU2VsZWN0ZWQnOlxuICAgICAgICByZXR1cm4gdG9nZ2xlU2VsZWN0ZWQoc3RhdGUsIGFjdGlvbi5pZCk7XG4gICAgICBjYXNlICdzZXRTZWxlY3RlZE9wdGlvbic6XG4gICAgICAgIHJldHVybiBzZXRTZWxlY3RlZE9wdGlvbihzdGF0ZSwgYWN0aW9uLmlkKTtcbiAgICAgIGNhc2UgJ3Zpc2libGVTZWxlY3RlZENoYW5nZSc6XG4gICAgICAgIHJldHVybiB0b2dnbGVWaXNpYmxlU2VsZWN0ZWQoc3RhdGUpO1xuICAgICAgY2FzZSAndG9nZ2xlT3B0aW9uRXhwYW5kZWQnOlxuICAgICAgICByZXR1cm4gdG9nZ2xlT3B0aW9uRXhwYW5kZWQoc3RhdGUsIGFjdGlvbi5pZCk7XG4gICAgfVxuICB9XG59XG4iXX0=