@rivet-health/design-system 28.7.0 → 28.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,10 +54,10 @@ export class SelectComponent extends InputLabelComponent {
54
54
  }
55
55
  }
56
56
  SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
57
- SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SelectComponent, selector: "riv-select", inputs: { manager: "manager", size: "size", 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\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\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.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\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 [showSingleSelected]=\"s.display.showSingleSelected\"\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 <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\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 [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\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 class=\"value\">{{ s.display.selected }}</span>\n <span *ngIf=\"s.selection.selected.size > 1\" class=\"selected-count\">\n {{ s.selection.selected.size | rivNumber }}\n </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]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\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</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:var(--input-medium);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)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.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: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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: "directive", type: i6.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i7.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: i8.SelectNodeComponent, selector: "riv-select-node", inputs: ["mode", "node", "showSingleSelected"], outputs: ["selectChange", "expandChange"] }, { kind: "component", type: i9.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message", "title", "icon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.NumberPipe, name: "rivNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57
+ SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SelectComponent, selector: "riv-select", inputs: { manager: "manager", size: "size", 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\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\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.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\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 [showSingleSelected]=\"s.display.showSingleSelected\"\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 <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\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 [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\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 class=\"value\">{{ s.display.formattedSelectedOptions }}</span>\n <span *ngIf=\"s.selection.selected.size > 1\" class=\"selected-count\">\n {{ s.selection.selected.size | rivNumber }}\n </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]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\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</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:var(--input-medium);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)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.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: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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: "directive", type: i6.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i7.SearchComponent, selector: "riv-search", inputs: ["placeholder", "name", "labelTemplate"] }, { kind: "component", type: i8.SelectNodeComponent, selector: "riv-select-node", inputs: ["mode", "node", "showSingleSelected"], outputs: ["selectChange", "expandChange"] }, { kind: "component", type: i9.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message", "title", "icon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.NumberPipe, name: "rivNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
58
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SelectComponent, decorators: [{
59
59
  type: Component,
60
- 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\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\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.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\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 [showSingleSelected]=\"s.display.showSingleSelected\"\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 <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\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 [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\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 class=\"value\">{{ s.display.selected }}</span>\n <span *ngIf=\"s.selection.selected.size > 1\" class=\"selected-count\">\n {{ s.selection.selected.size | rivNumber }}\n </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]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\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</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:var(--input-medium);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)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.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"] }]
60
+ 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\n class=\"content-body\"\n [class.inline]=\"s.display.inline\"\n [ngStyle]=\"{\n 'max-height': s.display.maxHeight,\n 'max-width': s.display.maxWidth,\n 'min-height': s.display.minHeight,\n 'min-width': s.display.minWidth\n }\"\n >\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.showSearch\"\n [value]=\"s.query.search\"\n [placeholder]=\"s.query.searchPlaceholder\"\n [autoFocus]=\"true\"\n (valueChange)=\"searchChange($event)\"\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 [showSingleSelected]=\"s.display.showSingleSelected\"\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 <span\n *ngIf=\"s.display.displayLimitMessage; let message\"\n class=\"display-limit\"\n >\n {{ message }}\n </span>\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 [class.small]=\"size === 'small'\"\n [class.large]=\"size === 'large'\"\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 class=\"value\">{{ s.display.formattedSelectedOptions }}</span>\n <span *ngIf=\"s.selection.selected.size > 1\" class=\"selected-count\">\n {{ s.selection.selected.size | rivNumber }}\n </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]=\"20\"\n ></riv-icon>\n <riv-icon *ngIf=\"locked\" [name]=\"'Lock'\" [size]=\"20\"></riv-icon>\n </span>\n </button>\n </riv-input-label>\n </ng-template>\n\n <ng-container *ngIf=\"s.display.open\">\n <riv-callout\n *riv-overlay\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</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:var(--input-medium);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)}.trigger.small .value{font:var(--input-small)}.trigger.large .value{font:var(--input-large);padding:var(--size-medium) var(--size-xsmall)}.chevron{display:flex;justify-content:center;align-items:center;padding:var(--size-xsmall) calc(var(--base-grid-size) * 1.5)}.content-body{padding:var(--size-large);display:flex;flex-direction:column;gap:var(--size-large)}.content-body:not(.inline){max-height:50vh;min-width:calc(var(--base-grid-size) * 75);max-width:50vw}.options{flex-grow:1;overflow-y:auto;gap:var(--size-medium)}.options,.group{display:flex;flex-direction:column}.group{gap:var(--size-xsmall)}.group.divider:not(:last-child){padding-bottom:var(--size-medium);border-bottom:var(--border-width) solid var(--border-light)}.display-limit{font:var(--body-small);color:var(--type-light-disabled);padding:var(--size-small);text-align:center}.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"] }]
61
61
  }], propDecorators: { manager: [{
62
62
  type: Input
63
63
  }], size: [{
@@ -88,4 +88,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
88
88
  (function (SelectComponent) {
89
89
  SelectComponent.Sizes = ['small', 'medium', 'large'];
90
90
  })(SelectComponent || (SelectComponent = {}));
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7OztBQVM5RSxNQUFNLE9BQU8sZUFFWCxTQUFRLG1CQUFtQjtJQVI3Qjs7UUFhRSxTQUFJLEdBQXlCLFFBQVEsQ0FBQztRQUd0QyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFzRHhCLGlCQUFZLEdBQUcsUUFBUSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDVDtJQXJDQyxVQUFVO1FBQ1IsT0FBTyxDQUNMLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxhQUFhO1lBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLENBQzFDLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxZQUFZO2dCQUNsQixJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFjLEVBQUUsRUFBVztRQUN0QyxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsRUFBRTthQUNILENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEVBQUU7YUFDSCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxZQUFZO2dCQUNsQixJQUFJLEVBQUUsS0FBSzthQUNaLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7NEdBakVVLGVBQWU7Z0dBQWYsZUFBZSxxd0JDbkI1QixnZ01BNktBOzJGRDFKYSxlQUFlO2tCQU4zQixTQUFTOytCQUNFLFlBQVksbUJBR0wsdUJBQXVCLENBQUMsTUFBTTs4QkFNL0MsT0FBTztzQkFETixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxTQUFTO2dCQUl2QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsUUFBUTtnQkFJdEIsY0FBYztzQkFEYixZQUFZO3VCQUFDLFFBQVE7Z0JBSXRCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxRQUFRO2dCQUl0QixtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMscUJBQXFCO2dCQUloQyxxQkFBcUI7c0JBRHBCLFNBQVM7dUJBQUMsdUJBQXVCOztBQTBDcEMsV0FBaUIsZUFBZTtJQUNqQixxQkFBSyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQztBQUU3RCxDQUFDLEVBSGdCLGVBQWUsS0FBZixlQUFlLFFBRy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJbnB1dExhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQtbGFiZWwvaW5wdXQtbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uL3N0YXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50PFxuICBPIGV4dGVuZHMgUml2U2VsZWN0LkJhc2VPcHRpb24sXG4+IGV4dGVuZHMgSW5wdXRMYWJlbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIG1hbmFnZXI/OiBSaXZTZWxlY3QuTWFuYWdlcjxPPjtcblxuICBASW5wdXQoKVxuICBzaXplOiBTZWxlY3RDb21wb25lbnQuU2l6ZSA9ICdtZWRpdW0nO1xuXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbG9ja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQENvbnRlbnRDaGlsZCgndHJpZ2dlcicpXG4gIHRyaWdnZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4gfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnb3B0aW9uJylcbiAgb3B0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IG5vZGU6IFJpdlNlbGVjdC5GdWxsT3B0aW9uPE8+IH0+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicpXG4gIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBzdGF0ZTogUml2U2VsZWN0LkZ1bGxTdGF0ZTxPPiB9PjtcblxuICBAQ29udGVudENoaWxkKCdmb290ZXInKVxuICBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4gfT47XG5cbiAgQFZpZXdDaGlsZCgnY3VzdG9tVHJpZ2dlckJ1dHRvbicpXG4gIGN1c3RvbVRyaWdnZXJCdXR0b24/OiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3N0YW5kYXJkVHJpZ2dlckJ1dHRvbicpXG4gIHN0YW5kYXJkVHJpZ2dlckJ1dHRvbj86IEVsZW1lbnRSZWY7XG5cbiAgZ2V0VHJpZ2dlcigpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tVHJpZ2dlckJ1dHRvbj8ubmF0aXZlRWxlbWVudCA/P1xuICAgICAgdGhpcy5zdGFuZGFyZFRyaWdnZXJCdXR0b24/Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgYWxsb3dlZE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmxvY2tlZCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnb3BlbkNoYW5nZScsXG4gICAgICAgIG9wZW46IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RDaGFuZ2UobXVsdGk6IGJvb2xlYW4sIGlkOiBPWydpZCddKSB7XG4gICAgaWYgKG11bHRpKSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25TZWxlY3RlZCcsXG4gICAgICAgIGlkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ3NldFNlbGVjdGVkT3B0aW9uJyxcbiAgICAgICAgaWQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ29wZW5DaGFuZ2UnLFxuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNlYXJjaENoYW5nZSA9IGRlYm91bmNlKChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ3NlYXJjaENoYW5nZScsIHBheWxvYWQ6IHF1ZXJ5IH0pO1xuICB9LCA1MDApO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlbGVjdENvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBTaXplcyA9IFsnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFNpemUgPSAodHlwZW9mIFNpemVzKVtudW1iZXJdO1xufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1hbmFnZXI/LnN0YXRlIHwgYXN5bmM7IGxldCBzXCI+XG4gIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8cml2LWxvYWRpbmctY292ZXIgW2xvYWRpbmddPVwicy5sb2FkLmxvYWRpbmdcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb250ZW50LWJvZHlcIlxuICAgICAgICBbY2xhc3MuaW5saW5lXT1cInMuZGlzcGxheS5pbmxpbmVcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ21heC1oZWlnaHQnOiBzLmRpc3BsYXkubWF4SGVpZ2h0LFxuICAgICAgICAgICdtYXgtd2lkdGgnOiBzLmRpc3BsYXkubWF4V2lkdGgsXG4gICAgICAgICAgJ21pbi1oZWlnaHQnOiBzLmRpc3BsYXkubWluSGVpZ2h0LFxuICAgICAgICAgICdtaW4td2lkdGgnOiBzLmRpc3BsYXkubWluV2lkdGhcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxoZWFkZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgc3RhdGU6IHMgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPHJpdi1zZWFyY2hcbiAgICAgICAgICAqbmdJZj1cInMucXVlcnkuc2hvd1NlYXJjaFwiXG4gICAgICAgICAgW3ZhbHVlXT1cInMucXVlcnkuc2VhcmNoXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicy5xdWVyeS5zZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2F1dG9Gb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2VhcmNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9yaXYtc2VhcmNoPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QgJiZcbiAgICAgICAgICAgICAgcy5zZWxlY3Rpb24uYWxsb3dTZWxlY3RBbGwgJiZcbiAgICAgICAgICAgICAgIXMuZGlzcGxheS56ZXJvU3RhdGVNZXNzYWdlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW21vZGVdPVwiJ211bHRpJ1wiXG4gICAgICAgICAgICBbbm9kZV09XCJ7XG4gICAgICAgICAgICAgIGlkOiAnX19OT09QX18nLFxuICAgICAgICAgICAgICB0aXRsZTogcy5xdWVyeS5zZWFyY2ggPyAnU2VsZWN0IGFsbCBtYXRjaGluZycgOiAnU2VsZWN0IGFsbCcsXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBzLnNlbGVjdGlvbi52aXNpYmxlU2VsZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBleHBhbmRlZDogZmFsc2VcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKHNlbGVjdENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICd2aXNpYmxlU2VsZWN0ZWRDaGFuZ2UnIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L3Jpdi1zZWxlY3Qtbm9kZT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2Ygcy5mdWxsT3B0aW9uR3JvdXBzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXBcIlxuICAgICAgICAgICAgW2NsYXNzLmRpdmlkZXJdPVwicy5kaXNwbGF5LmRpdmlkZXJzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdyb3VwLmhlYWRlcjsgbGV0IGhlYWRlclwiIGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgIHt7IGhlYWRlciB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdyb3VwLm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblRlbXBsYXRlOyBlbHNlIHN0YW5kYXJkVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBub2RlOiBvcHRpb24gfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgICAgICAgICAgIFttb2RlXT1cInMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QgPyAnbXVsdGknIDogJ3NpbmdsZSdcIlxuICAgICAgICAgICAgICAgICAgW25vZGVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93U2luZ2xlU2VsZWN0ZWRdPVwicy5kaXNwbGF5LnNob3dTaW5nbGVTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RDaGFuZ2Uocy5zZWxlY3Rpb24uYWxsb3dNdWx0aVNlbGVjdCwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChleHBhbmRDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25FeHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6ICRldmVudFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9yaXYtc2VsZWN0LW5vZGU+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJzLmRpc3BsYXkuZGlzcGxheUxpbWl0TWVzc2FnZTsgbGV0IG1lc3NhZ2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJkaXNwbGF5LWxpbWl0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBtZXNzYWdlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxyaXYtemVyby1zdGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJzLmRpc3BsYXkuemVyb1N0YXRlTWVzc2FnZTsgbGV0IG1lc3NhZ2VcIlxuICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXG4gICAgICAgICAgPjwvcml2LXplcm8tc3RhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Zm9vdGVyICpuZ0lmPVwiZm9vdGVyVGVtcGxhdGVcIiBjbGFzcz1cImN1c3RvbS1mb290ZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlOyBjb250ZXh0OiB7IHN0YXRlOiBzIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mb290ZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Jpdi1sb2FkaW5nLWNvdmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcy5kaXNwbGF5LmlubGluZTsgZWxzZSBjb250ZW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyaWdnZXJUZW1wbGF0ZTsgZWxzZSBzdGFuZGFyZFRyaWdnZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgI2N1c3RvbVRyaWdnZXJCdXR0b25cbiAgICAgICAgKGNsaWNrKT1cImFsbG93ZWRPcGVuKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmlnZ2VyVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHN0YXRlOiBzIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3N0YW5kYXJkVHJpZ2dlcj5cbiAgICAgIDxyaXYtaW5wdXQtbGFiZWxcbiAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgW2hlbHBdPVwiaGVscFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIFtsYWJlbEFjdGlvblRleHRdPVwibGFiZWxBY3Rpb25UZXh0XCJcbiAgICAgICAgKGxhYmVsQWN0aW9uKT1cImxhYmVsQWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAjc3RhbmRhcmRUcmlnZ2VyQnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyXCJcbiAgICAgICAgICBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzLmxhcmdlXT1cInNpemUgPT09ICdsYXJnZSdcIlxuICAgICAgICAgIChjbGljayk9XCJhbGxvd2VkT3BlbigpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwicy5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZTsgZWxzZSBwbGFjZWhvbGRlclZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3sgcy5kaXNwbGF5LnNlbGVjdGVkIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzLnNlbGVjdGlvbi5zZWxlY3RlZC5zaXplID4gMVwiIGNsYXNzPVwic2VsZWN0ZWQtY291bnRcIj5cbiAgICAgICAgICAgICAge3sgcy5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZSB8IHJpdk51bWJlciB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGxhY2Vob2xkZXJWYWx1ZT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWUgcGxhY2Vob2xkZXJcIj57eyBzLmRpc3BsYXkucGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZXZyb25cIj5cbiAgICAgICAgICAgIDxyaXYtaWNvblxuICAgICAgICAgICAgICAqbmdJZj1cIiFsb2NrZWRcIlxuICAgICAgICAgICAgICBbbmFtZV09XCInQ2hldnJvbkRvd24nXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwiMjBcIlxuICAgICAgICAgICAgPjwvcml2LWljb24+XG4gICAgICAgICAgICA8cml2LWljb24gKm5nSWY9XCJsb2NrZWRcIiBbbmFtZV09XCInTG9jaydcIiBbc2l6ZV09XCIyMFwiPjwvcml2LWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvcml2LWlucHV0LWxhYmVsPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicy5kaXNwbGF5Lm9wZW5cIj5cbiAgICAgIDxyaXYtY2FsbG91dFxuICAgICAgICAqcml2LW92ZXJsYXlcbiAgICAgICAgW2FuY2hvcl09XCJnZXRUcmlnZ2VyKClcIlxuICAgICAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gICAgICAgIFtzaG93Q2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJbXG4gICAgICAgICAgJ3RvcC1sZWZ0JyxcbiAgICAgICAgICAndG9wLWNlbnRlcicsXG4gICAgICAgICAgJ3RvcC1yaWdodCcsXG4gICAgICAgICAgJ2JvdHRvbS1yaWdodCcsXG4gICAgICAgICAgJ2JvdHRvbS1jZW50ZXInLFxuICAgICAgICAgICdib3R0b20tbGVmdCdcbiAgICAgICAgXVwiXG4gICAgICAgIChjbG9zZSk9XCJtYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ29wZW5DaGFuZ2UnLCBvcGVuOiBmYWxzZSB9KVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9yaXYtY2FsbG91dD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL2lucHV0L3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7Ozs7Ozs7OztBQVM5RSxNQUFNLE9BQU8sZUFFWCxTQUFRLG1CQUFtQjtJQVI3Qjs7UUFhRSxTQUFJLEdBQXlCLFFBQVEsQ0FBQztRQUd0QyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRzFCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFzRHhCLGlCQUFZLEdBQUcsUUFBUSxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDVDtJQXJDQyxVQUFVO1FBQ1IsT0FBTyxDQUNMLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxhQUFhO1lBQ3ZDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLENBQzFDLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxZQUFZO2dCQUNsQixJQUFJLEVBQUUsSUFBSTthQUNYLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFjLEVBQUUsRUFBVztRQUN0QyxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDekIsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsRUFBRTthQUNILENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEVBQUU7YUFDSCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksRUFBRSxZQUFZO2dCQUNsQixJQUFJLEVBQUUsS0FBSzthQUNaLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzs7NEdBakVVLGVBQWU7Z0dBQWYsZUFBZSxxd0JDbkI1QixnaE1BNktBOzJGRDFKYSxlQUFlO2tCQU4zQixTQUFTOytCQUNFLFlBQVksbUJBR0wsdUJBQXVCLENBQUMsTUFBTTs4QkFNL0MsT0FBTztzQkFETixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixRQUFRO3NCQURQLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxTQUFTO2dCQUl2QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsUUFBUTtnQkFJdEIsY0FBYztzQkFEYixZQUFZO3VCQUFDLFFBQVE7Z0JBSXRCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxRQUFRO2dCQUl0QixtQkFBbUI7c0JBRGxCLFNBQVM7dUJBQUMscUJBQXFCO2dCQUloQyxxQkFBcUI7c0JBRHBCLFNBQVM7dUJBQUMsdUJBQXVCOztBQTBDcEMsV0FBaUIsZUFBZTtJQUNqQixxQkFBSyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQVUsQ0FBQztBQUU3RCxDQUFDLEVBSGdCLGVBQWUsS0FBZixlQUFlLFFBRy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJbnB1dExhYmVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQtbGFiZWwvaW5wdXQtbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IFJpdlNlbGVjdCB9IGZyb20gJy4uL3N0YXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncml2LXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50PFxuICBPIGV4dGVuZHMgUml2U2VsZWN0LkJhc2VPcHRpb24sXG4+IGV4dGVuZHMgSW5wdXRMYWJlbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIG1hbmFnZXI/OiBSaXZTZWxlY3QuTWFuYWdlcjxPPjtcblxuICBASW5wdXQoKVxuICBzaXplOiBTZWxlY3RDb21wb25lbnQuU2l6ZSA9ICdtZWRpdW0nO1xuXG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbG9ja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQENvbnRlbnRDaGlsZCgndHJpZ2dlcicpXG4gIHRyaWdnZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4gfT47XG5cbiAgQENvbnRlbnRDaGlsZCgnb3B0aW9uJylcbiAgb3B0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7IG5vZGU6IFJpdlNlbGVjdC5GdWxsT3B0aW9uPE8+IH0+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicpXG4gIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyBzdGF0ZTogUml2U2VsZWN0LkZ1bGxTdGF0ZTxPPiB9PjtcblxuICBAQ29udGVudENoaWxkKCdmb290ZXInKVxuICBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgc3RhdGU6IFJpdlNlbGVjdC5GdWxsU3RhdGU8Tz4gfT47XG5cbiAgQFZpZXdDaGlsZCgnY3VzdG9tVHJpZ2dlckJ1dHRvbicpXG4gIGN1c3RvbVRyaWdnZXJCdXR0b24/OiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3N0YW5kYXJkVHJpZ2dlckJ1dHRvbicpXG4gIHN0YW5kYXJkVHJpZ2dlckJ1dHRvbj86IEVsZW1lbnRSZWY7XG5cbiAgZ2V0VHJpZ2dlcigpOiBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VzdG9tVHJpZ2dlckJ1dHRvbj8ubmF0aXZlRWxlbWVudCA/P1xuICAgICAgdGhpcy5zdGFuZGFyZFRyaWdnZXJCdXR0b24/Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgYWxsb3dlZE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmxvY2tlZCkge1xuICAgICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zLm5leHQoe1xuICAgICAgICB0eXBlOiAnb3BlbkNoYW5nZScsXG4gICAgICAgIG9wZW46IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RDaGFuZ2UobXVsdGk6IGJvb2xlYW4sIGlkOiBPWydpZCddKSB7XG4gICAgaWYgKG11bHRpKSB7XG4gICAgICB0aGlzLm1hbmFnZXI/LmFjdGlvbnMubmV4dCh7XG4gICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25TZWxlY3RlZCcsXG4gICAgICAgIGlkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ3NldFNlbGVjdGVkT3B0aW9uJyxcbiAgICAgICAgaWQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFuYWdlcj8uYWN0aW9ucy5uZXh0KHtcbiAgICAgICAgdHlwZTogJ29wZW5DaGFuZ2UnLFxuICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNlYXJjaENoYW5nZSA9IGRlYm91bmNlKChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5tYW5hZ2VyPy5hY3Rpb25zPy5uZXh0KHsgdHlwZTogJ3NlYXJjaENoYW5nZScsIHBheWxvYWQ6IHF1ZXJ5IH0pO1xuICB9LCA1MDApO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlbGVjdENvbXBvbmVudCB7XG4gIGV4cG9ydCBjb25zdCBTaXplcyA9IFsnc21hbGwnLCAnbWVkaXVtJywgJ2xhcmdlJ10gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFNpemUgPSAodHlwZW9mIFNpemVzKVtudW1iZXJdO1xufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1hbmFnZXI/LnN0YXRlIHwgYXN5bmM7IGxldCBzXCI+XG4gIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8cml2LWxvYWRpbmctY292ZXIgW2xvYWRpbmddPVwicy5sb2FkLmxvYWRpbmdcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjb250ZW50LWJvZHlcIlxuICAgICAgICBbY2xhc3MuaW5saW5lXT1cInMuZGlzcGxheS5pbmxpbmVcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgJ21heC1oZWlnaHQnOiBzLmRpc3BsYXkubWF4SGVpZ2h0LFxuICAgICAgICAgICdtYXgtd2lkdGgnOiBzLmRpc3BsYXkubWF4V2lkdGgsXG4gICAgICAgICAgJ21pbi1oZWlnaHQnOiBzLmRpc3BsYXkubWluSGVpZ2h0LFxuICAgICAgICAgICdtaW4td2lkdGgnOiBzLmRpc3BsYXkubWluV2lkdGhcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxoZWFkZXIgKm5nSWY9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgc3RhdGU6IHMgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPHJpdi1zZWFyY2hcbiAgICAgICAgICAqbmdJZj1cInMucXVlcnkuc2hvd1NlYXJjaFwiXG4gICAgICAgICAgW3ZhbHVlXT1cInMucXVlcnkuc2VhcmNoXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicy5xdWVyeS5zZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgICAgW2F1dG9Gb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwic2VhcmNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9yaXYtc2VhcmNoPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3B0aW9uc1wiPlxuICAgICAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QgJiZcbiAgICAgICAgICAgICAgcy5zZWxlY3Rpb24uYWxsb3dTZWxlY3RBbGwgJiZcbiAgICAgICAgICAgICAgIXMuZGlzcGxheS56ZXJvU3RhdGVNZXNzYWdlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW21vZGVdPVwiJ211bHRpJ1wiXG4gICAgICAgICAgICBbbm9kZV09XCJ7XG4gICAgICAgICAgICAgIGlkOiAnX19OT09QX18nLFxuICAgICAgICAgICAgICB0aXRsZTogcy5xdWVyeS5zZWFyY2ggPyAnU2VsZWN0IGFsbCBtYXRjaGluZycgOiAnU2VsZWN0IGFsbCcsXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBzLnNlbGVjdGlvbi52aXNpYmxlU2VsZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBleHBhbmRlZDogZmFsc2VcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKHNlbGVjdENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgbWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICd2aXNpYmxlU2VsZWN0ZWRDaGFuZ2UnIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L3Jpdi1zZWxlY3Qtbm9kZT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZ3JvdXAgb2Ygcy5mdWxsT3B0aW9uR3JvdXBzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXBcIlxuICAgICAgICAgICAgW2NsYXNzLmRpdmlkZXJdPVwicy5kaXNwbGF5LmRpdmlkZXJzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImdyb3VwLmhlYWRlcjsgbGV0IGhlYWRlclwiIGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgIHt7IGhlYWRlciB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdyb3VwLm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblRlbXBsYXRlOyBlbHNlIHN0YW5kYXJkVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBub2RlOiBvcHRpb24gfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdGFuZGFyZFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxyaXYtc2VsZWN0LW5vZGVcbiAgICAgICAgICAgICAgICAgIFttb2RlXT1cInMuc2VsZWN0aW9uLmFsbG93TXVsdGlTZWxlY3QgPyAnbXVsdGknIDogJ3NpbmdsZSdcIlxuICAgICAgICAgICAgICAgICAgW25vZGVdPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93U2luZ2xlU2VsZWN0ZWRdPVwicy5kaXNwbGF5LnNob3dTaW5nbGVTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0Q2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RDaGFuZ2Uocy5zZWxlY3Rpb24uYWxsb3dNdWx0aVNlbGVjdCwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIChleHBhbmRDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXI/LmFjdGlvbnM/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0b2dnbGVPcHRpb25FeHBhbmRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ6ICRldmVudFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9yaXYtc2VsZWN0LW5vZGU+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJzLmRpc3BsYXkuZGlzcGxheUxpbWl0TWVzc2FnZTsgbGV0IG1lc3NhZ2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJkaXNwbGF5LWxpbWl0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBtZXNzYWdlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxyaXYtemVyby1zdGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJzLmRpc3BsYXkuemVyb1N0YXRlTWVzc2FnZTsgbGV0IG1lc3NhZ2VcIlxuICAgICAgICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZVwiXG4gICAgICAgICAgPjwvcml2LXplcm8tc3RhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Zm9vdGVyICpuZ0lmPVwiZm9vdGVyVGVtcGxhdGVcIiBjbGFzcz1cImN1c3RvbS1mb290ZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlOyBjb250ZXh0OiB7IHN0YXRlOiBzIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mb290ZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L3Jpdi1sb2FkaW5nLWNvdmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcy5kaXNwbGF5LmlubGluZTsgZWxzZSBjb250ZW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyaWdnZXJUZW1wbGF0ZTsgZWxzZSBzdGFuZGFyZFRyaWdnZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgI2N1c3RvbVRyaWdnZXJCdXR0b25cbiAgICAgICAgKGNsaWNrKT1cImFsbG93ZWRPcGVuKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0cmlnZ2VyVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHN0YXRlOiBzIH1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3N0YW5kYXJkVHJpZ2dlcj5cbiAgICAgIDxyaXYtaW5wdXQtbGFiZWxcbiAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgW2hlbHBdPVwiaGVscFwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgIFtsYWJlbEFjdGlvblRleHRdPVwibGFiZWxBY3Rpb25UZXh0XCJcbiAgICAgICAgKGxhYmVsQWN0aW9uKT1cImxhYmVsQWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAjc3RhbmRhcmRUcmlnZ2VyQnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyXCJcbiAgICAgICAgICBbY2xhc3Muc21hbGxdPVwic2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzLmxhcmdlXT1cInNpemUgPT09ICdsYXJnZSdcIlxuICAgICAgICAgIChjbGljayk9XCJhbGxvd2VkT3BlbigpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbG9ja2VkXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwicy5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZTsgZWxzZSBwbGFjZWhvbGRlclZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3sgcy5kaXNwbGF5LmZvcm1hdHRlZFNlbGVjdGVkT3B0aW9ucyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicy5zZWxlY3Rpb24uc2VsZWN0ZWQuc2l6ZSA+IDFcIiBjbGFzcz1cInNlbGVjdGVkLWNvdW50XCI+XG4gICAgICAgICAgICAgIHt7IHMuc2VsZWN0aW9uLnNlbGVjdGVkLnNpemUgfCByaXZOdW1iZXIgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyVmFsdWU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlIHBsYWNlaG9sZGVyXCI+e3sgcy5kaXNwbGF5LnBsYWNlaG9sZGVyIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGV2cm9uXCI+XG4gICAgICAgICAgICA8cml2LWljb25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhbG9ja2VkXCJcbiAgICAgICAgICAgICAgW25hbWVdPVwiJ0NoZXZyb25Eb3duJ1wiXG4gICAgICAgICAgICAgIFtzaXplXT1cIjIwXCJcbiAgICAgICAgICAgID48L3Jpdi1pY29uPlxuICAgICAgICAgICAgPHJpdi1pY29uICpuZ0lmPVwibG9ja2VkXCIgW25hbWVdPVwiJ0xvY2snXCIgW3NpemVdPVwiMjBcIj48L3Jpdi1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3Jpdi1pbnB1dC1sYWJlbD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInMuZGlzcGxheS5vcGVuXCI+XG4gICAgICA8cml2LWNhbGxvdXRcbiAgICAgICAgKnJpdi1vdmVybGF5XG4gICAgICAgIFthbmNob3JdPVwiZ2V0VHJpZ2dlcigpXCJcbiAgICAgICAgW3RoZW1lXT1cIidsaWdodCdcIlxuICAgICAgICBbc2hvd0NhcmV0XT1cImZhbHNlXCJcbiAgICAgICAgW2FsbG93ZWRQb3NpdGlvbnNdPVwiW1xuICAgICAgICAgICd0b3AtbGVmdCcsXG4gICAgICAgICAgJ3RvcC1jZW50ZXInLFxuICAgICAgICAgICd0b3AtcmlnaHQnLFxuICAgICAgICAgICdib3R0b20tcmlnaHQnLFxuICAgICAgICAgICdib3R0b20tY2VudGVyJyxcbiAgICAgICAgICAnYm90dG9tLWxlZnQnXG4gICAgICAgIF1cIlxuICAgICAgICAoY2xvc2UpPVwibWFuYWdlcj8uYWN0aW9ucz8ubmV4dCh7IHR5cGU6ICdvcGVuQ2hhbmdlJywgb3BlbjogZmFsc2UgfSlcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvcml2LWNhbGxvdXQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
@@ -92,7 +92,7 @@ export var RivSelect;
92
92
  },
93
93
  display: {
94
94
  ...s.display,
95
- selected: getSelectedDisplay(s),
95
+ formattedSelectedOptions: getFormattedOptionsForDisplay(s, options),
96
96
  zeroStateMessage: getZeroStateMessage(s),
97
97
  dividers: !!options?.dividers,
98
98
  inline: !!options?.inline,
@@ -401,7 +401,12 @@ export var RivSelect;
401
401
  expandable: false,
402
402
  };
403
403
  }
404
- function getSelectedDisplay(state) {
404
+ function getFormattedOptionsForDisplay(state, options) {
405
+ // If we have a custom display function, use it
406
+ if (options?.getCustomOptionDisplay) {
407
+ return options.getCustomOptionDisplay([...state.selection.selected]);
408
+ }
409
+ // Otherwise, use the default display for options - titles separated by commas.
405
410
  return [...state.selection.selected].map(({ title }) => title).join(', ');
406
411
  }
407
412
  function getZeroStateMessage(state) {
@@ -582,4 +587,4 @@ export var RivSelect;
582
587
  }
583
588
  }
584
589
  })(RivSelect || (RivSelect = {}));
585
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9zZWxlY3Qvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUtOLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsV0FBVyxFQUVYLEdBQUcsRUFDSCxLQUFLLEVBRUwsYUFBYSxFQUNiLElBQUksRUFDSixTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzVELE1BQU0sS0FBVyxTQUFTLENBeWdDekI7QUF6Z0NELFdBQWlCLFNBQVM7SUFDeEIsYUFBYTtJQUNiLGFBQWE7SUFDYixhQUFhO0lBb0diOzs7T0FHRztJQUNILE1BQWEsU0FBZ0MsU0FBUSxHQUFvQjtRQUM5RCxHQUFHLENBQUMsTUFBdUI7WUFDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFUSxHQUFHLENBQUMsTUFBdUI7WUFDbEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNwQix1RUFBdUU7Z0JBQ3ZFLG1FQUFtRTtnQkFDbkUscUJBQXFCO2dCQUNyQixNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ25DLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENB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Q0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQyxLQUFLLG1CQUFtQjtnQkFDdEIsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLEtBQUssdUJBQXVCO2dCQUMxQixPQUFPLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLEtBQUssc0JBQXNCO2dCQUN6QixPQUFPLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxFQXpnQ2dCLFNBQVMsS0FBVCxTQUFTLFFBeWdDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRnVzZSwge1xuICBGdXNlUmVzdWx0LFxuICBGdXNlUmVzdWx0TWF0Y2gsXG4gIElGdXNlT3B0aW9ucyxcbiAgUmFuZ2VUdXBsZSxcbn0gZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0c0RlZXAsIGZsYXR0ZW5EZWVwLCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgY29ubmVjdGFibGUsXG4gIENvbm5lY3RhYmxlLFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzY2FuLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwgfSBmcm9tICd1dGlsaXR5LXR5cGVzJztcbmltcG9ydCB7IE51bWJlclBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlzdWFsaXphdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2U2VsZWN0IHtcbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBPcHRpb25zIC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSALS0tLS0tLS0tLS0tLS0tLS0tLeKUgOKUgOKUgOKUkFxuICAgKiDilIIgQmFzZU9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgICog4pSCIFRoZSBjb3JlIGRhdGEgcmVxdWlyZWQgZm9yIGVhY2ggb3B0aW9uICAgIOKUglxuICAgKiDilIIgKHN1Y2ggYXMgaWQgYW5kIHRpdGxlKS4gICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgC0tLS0tLS0tLS0tLS0tLS0tLS3ilIDilIDilKRcbiAgICog4pSCIE9wdGlvbiAoQmFzZU9wdGlvbiArIGNoaWxkcmVuKSAgICAgICAgICAgIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBQcm92aWRlcyByZWN1cnNpdmUgdHlwZSBzYWZldHkgdG8gdGhlICAgICDilIJcbiAgICog4pSCIHR5cGUgc2FmZXR5IHRvIHRoZSBCYXNlT3B0aW9uLiAgICAgICAgICAgIOKUglxuICAgKiDilJTilIAtLS0tLS0tLS0tLS0tLS0tLS3ilKwtLS0tLS0t4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAqICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSCIFNvdXJjZU9wdGlvbiAoT3B0aW9uICsgc2VhcmNoIGhpZ2hsaWdodHMpIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBBZGRzIHNlYXJjaCBoaWdobGlnaHRzIHRvIHRoZSBPcHRpb24gYW5kICDilIJcbiAgICog4pSCIGlzIHRoZSByZXR1cm4gdHlwZSBmb3IgdGhlIG9wdGlvbiBTb3VyY2UgIOKUglxuICAgKiDilIIgKGRhdGEgZmV0Y2hlcikgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHxcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiBGdWxsT3B0aW9uIChTb3VyY2VPcHRpb24gKyBVSSBzdGF0ZSkgICAgICDilIJcbiAgICog4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiDilIIgQXVnbWVudHMgdGhlIFNvdXJjZU9wdGlvbiB3aXRoIGFsbCBvZiB0aGUg4pSCXG4gICAqIOKUgiBVSSBpbmZvcm1hdGlvbiBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSAgICDilIJcbiAgICog4pSCIHN0YXRlLCBzdWNoIGFzIHNlbGVjdGlvbiBzdGF0dXMsIHdoZXRoZXIgIOKUglxuICAgKiDilIIgb3Igbm90IHRoZSBub2RlIGlzIGV4cGFuZGVkLCBldGMuICAgICAgICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIHVzYWdlcyBvZiBPbWl0PC4uLj4gaW4gdGhpcyBzZWN0aW9uIGFyZSBub3QgcmVxdWlyZWQsIGJ1dFxuICAgKiBkbyBoZWxwIGluLWVkaXRvciB0eXBlIGhpbnRzIHRvIGJlIG1vcmUgY2xlYXIgYW5kIGRpcmVjdC5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgQmFzZU9wdGlvbiA9IHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgaGVscD86IHN0cmluZztcbiAgICBjb3VudD86IG51bWJlcjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbiA9IEJhc2VPcHRpb24+ID0gTyAmIHtcbiAgICBjaGlsZHJlbj86IE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZU9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBPbWl0PFxuICAgIE9wdGlvbjxPPixcbiAgICAnY2hpbGRyZW4nXG4gID4gJiB7XG4gICAgdGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICBzdWJ0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgIGNoaWxkcmVuPzogU291cmNlT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3Rpb25TdGF0ZSA9IGJvb2xlYW4gfCAnaW5kZXRlcm1pbmF0ZSc7XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBPbWl0PFxuICAgIFNvdXJjZU9wdGlvbjxPPixcbiAgICAnY2hpbGRyZW4nXG4gID4gJiB7XG4gICAgc2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBleHBhbmRhYmxlOiBib29sZWFuO1xuICAgIGNoaWxkcmVuPzogRnVsbE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gT3B0aW9uIGdyb3VwcyAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIFRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gT3B0aW9uR3JvdXAsIFNvdXJjZU9wdGlvbkdyb3VwLCBhbmRcbiAgICogRnVsbE9wdGlvbkdyb3VwIGlzIGFuYWxvZ291cyB0byB0aGUgb3B0aW9uIHR5cGVzIGFib3ZlLlxuICAgKlxuICAgKiBBcyB3aXRoIGJlZm9yZSwgdGhlIHVzZSBvZiBPbWl0PC4uLj4gaXMgbm90IHJlcXVpcmVkIGJ1dCBoZWxwZnVsLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBPcHRpb25Hcm91cDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgaGVhZGVyPzogc3RyaW5nO1xuICAgIG9wdGlvbnM6IE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZU9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE9taXQ8XG4gICAgT3B0aW9uR3JvdXA8Tz4sXG4gICAgJ29wdGlvbnMnXG4gID4gJiB7XG4gICAgb3B0aW9uczogU291cmNlT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE9taXQ8XG4gICAgU291cmNlT3B0aW9uR3JvdXA8Tz4sXG4gICAgJ29wdGlvbnMnXG4gID4gJiB7XG4gICAgb3B0aW9uczogRnVsbE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgT3B0aW9uU2V0IGNsYXNzIHByb3ZpZGVzIFNldC1saWtlIGZ1bmN0aW9uYWxpdHksIGJ1dCB1bmlxdWVuZXNzIGlzXG4gICAqIGRldGVybWluZWQgYnkgdGhlIG9wdGlvbidzIElEIHJhdGhlciB0aGFuIHRoZSBvYmplY3QgcmVmZXJlbmNlLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIE9wdGlvblNldDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gZXh0ZW5kcyBTZXQ8U291cmNlT3B0aW9uPE8+PiB7XG4gICAgb3ZlcnJpZGUgaGFzKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICByZXR1cm4gISFbLi4udGhpc10uZmluZChvID0+IG8uaWQgPT09IG9wdGlvbi5pZCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgYWRkKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICBpZiAodGhpcy5oYXMob3B0aW9uKSkge1xuICAgICAgICAvLyBUaGUgU2V0IGFscmVhZHkgaGFzIHNvbWUgdmVyc2lvbiBvZiB0aGlzIG9wdGlvbiwgYnV0IHdlJ2xsIG1ha2Ugc3VyZVxuICAgICAgICAvLyBpdCBoYXMgdGhlIG1vc3QgcmVjZW50IG9iamVjdCByZWZlcmVuY2UgKHdoaWxlIGtlZXBpbmcgaW5zZXJ0aW9uXG4gICAgICAgIC8vIG9yZGVyIGNvbnNpc3RlbnQpLlxuICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gWy4uLnRoaXNdLm1hcChvID0+XG4gICAgICAgICAgby5pZCA9PT0gb3B0aW9uLmlkID8gb3B0aW9uIDogbyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICBuZXdPcHRpb25zLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgc3VwZXIuYWRkKG8pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyLmFkZChvcHRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGVsZXRlKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IFsuLi50aGlzXS5maW5kKG8gPT4gby5pZCA9PT0gb3B0aW9uLmlkKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBzdXBlci5kZWxldGUoZXhpc3RpbmcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vL1xuICAvLyBTdGF0ZSAvL1xuICAvLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUaGUgQ29yZVN0YXRlIHByb3ZpZGVzIGFsbCBvZiB0aGUgZm91bmRhdGlvbmFsIHBpZWNlcyBvZiBzdGF0ZSByZXF1aXJlZFxuICAgKiBmb3IgYSB3b3JraW5nIGNvbXBvbmVudC4gRnVsbFN0YXRlIGlzIGEgcHVyZSBkZXJpdmF0aW9uIG9mIENvcmVTdGF0ZSBwbHVzXG4gICAqIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBwcm92aWRlcyBjb252ZW5pZW5jZXMgZm9yIHJlbmRlcmluZyB0aGVcbiAgICogY29tcG9uZW50cy4gQWN0aW9ucyBhbmQgdGhlIGNvcmUgc3RhdGUgYXJlIHBhc3NlZCB0byB0aGUgcmVkdWNlciB0b1xuICAgKiBwcm9kdWNlIG5ldyBDb3JlU3RhdGVzICh3aGljaCBhcmUgdGhlbiB1c2VkIHRvIGNhbGN1bGF0ZSBuZXcgRnVsbFN0YXRlcykuXG4gICAqXG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilIIgIFVJICDil4TilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSYICAgICAgICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgIOKUglxuICAgKiDilIIgIEFjdGlvbnMgIOKUgiAgIOKUglxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUkFxuICAgKiDilIIgIFN0YXRlIHJlZHVjZXIgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgQ29yZVN0YXRlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IHtcbiAgICBxdWVyeToge1xuICAgICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgfTtcbiAgICBsb2FkOiB7XG4gICAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgICAgZXJyb3I6IHVua25vd24gfCBudWxsO1xuICAgIH07XG4gICAgc291cmNlT3B0aW9uR3JvdXBzOiBTb3VyY2VPcHRpb25Hcm91cDxPPltdO1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgc2VsZWN0ZWQ6IE9wdGlvblNldDxPPjtcbiAgICB9O1xuICAgIGRpc3BsYXk6IHtcbiAgICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgICBvcGVuOiBib29sZWFuO1xuICAgICAgZXhwYW5kZWRPcHRpb25zOiBTZXQ8T1snaWQnXT47XG4gICAgfTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsU3RhdGU8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gQ29yZVN0YXRlPE8+ICYge1xuICAgIHF1ZXJ5OiB7XG4gICAgICBzaG93U2VhcmNoOiBib29sZWFuO1xuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICB9O1xuICAgIGZ1bGxPcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdO1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgYWxsb3dNdWx0aVNlbGVjdDogYm9vbGVhbjtcbiAgICAgIGFsbG93U2VsZWN0QWxsOiBib29sZWFuO1xuICAgICAgdmlzaWJsZVNlbGVjdGlvblN0YXRlOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgc2VsZWN0ZWQ6IHN0cmluZztcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgICBkaXZpZGVyczogYm9vbGVhbjtcbiAgICAgIGlubGluZTogYm9vbGVhbjtcbiAgICAgIG1heEhlaWdodDogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1heFdpZHRoOiBzdHJpbmcgfCBudWxsO1xuICAgICAgbWluSGVpZ2h0OiBzdHJpbmcgfCBudWxsO1xuICAgICAgbWluV2lkdGg6IHN0cmluZyB8IG51bGw7XG4gICAgICBkaXNwbGF5TGltaXRNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgc2hvd1NpbmdsZVNlbGVjdGVkOiBib29sZWFuO1xuICAgIH07XG4gIH07XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBBY3Rpb25zIC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBBY3Rpb248TyBleHRlbmRzIEJhc2VPcHRpb24+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWQnIH1cbiAgICB8IHsgdHlwZTogJ29wZW5DaGFuZ2UnOyBvcGVuOiBib29sZWFuIH1cbiAgICB8IHsgdHlwZTogJ3NlYXJjaENoYW5nZSc7IHBheWxvYWQ6IHN0cmluZyB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBDb3JlU3RhdGU8Tz5bJ3NlbGVjdGlvbiddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlT3B0aW9uU2VsZWN0ZWQnO1xuICAgICAgICBpZDogT1snaWQnXTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NldFNlbGVjdGVkT3B0aW9uJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICd2aXNpYmxlU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndG9nZ2xlT3B0aW9uRXhwYW5kZWQnO1xuICAgICAgICBpZDogT1snaWQnXTtcbiAgICAgIH07XG5cbiAgdHlwZSBJbnRlcm5hbEFjdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPVxuICAgIHwgeyB0eXBlOiAnbG9hZENvbXBsZXRlJzsgZGF0YTogU291cmNlT3B0aW9uR3JvdXA8Tz5bXSB9XG4gICAgfCB7IHR5cGU6ICdsb2FkRXJyb3InOyBlcnJvcjogdW5rbm93biB9O1xuXG4gIC8vLy8vLy8vLy8vL1xuICAvLyBTb3VyY2UgLy9cbiAgLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIFRoZSBTb3VyY2UncyBqb2IgaXMgdG8gZmV0Y2ggb3B0aW9ucyAoYmFzZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUpIHdoaWNoXG4gICAqIHRoZW4gYmxlbmQgd2l0aCB0aGUgb3RoZXIgcGllY2VzIG9mIHN0YXRlIHRvIHByb2R1Y2UgdGhlIEZ1bGxTdGF0ZS5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgU291cmNlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IChcbiAgICBxdWVyeTogQ29yZVN0YXRlPE8+WydxdWVyeSddLFxuICAgIG1vc3RSZWNlbnRBY3Rpb246IEFjdGlvbjxPPixcbiAgKSA9PiBQcm9taXNlPFNvdXJjZU9wdGlvbkdyb3VwPE8+W10+O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gTWFuYWdlciAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgTWFuYWdlcjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgYWN0aW9uczogU3ViamVjdDxBY3Rpb248Tz4+O1xuICAgIHN0YXRlOiBDb25uZWN0YWJsZTxGdWxsU3RhdGU8Tz4+O1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIE1hbmFnZXJPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IHtcbiAgICBpbml0aWFsU3RhdGU/OiBEZWVwUGFydGlhbDxDb3JlU3RhdGU8Tz4+O1xuICAgIGFsbG93TXVsdGlTZWxlY3Q/OiBib29sZWFuO1xuICAgIGFsbG93U2VhcmNoPzogYm9vbGVhbjtcbiAgICBhbGxvd1NlbGVjdEFsbD86IGJvb2xlYW47XG4gICAgc2VhcmNoUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gICAgZGl2aWRlcnM/OiBib29sZWFuO1xuICAgIGlubGluZT86IGJvb2xlYW47XG4gICAgbWF4SGVpZ2h0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBtYXhXaWR0aD86IHN0cmluZyB8IG51bGw7XG4gICAgbWluSGVpZ2h0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBtaW5XaWR0aD86IHN0cmluZyB8IG51bGw7XG4gICAgZGlzcGxheUxpbWl0PzogbnVtYmVyO1xuICAgIHNob3dTaW5nbGVTZWxlY3RlZD86IGJvb2xlYW47XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hbmFnZXI8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHNvdXJjZTogU291cmNlPE8+LFxuICAgIG9wdGlvbnM/OiBNYW5hZ2VyT3B0aW9uczxPPixcbiAgKTogTWFuYWdlcjxPPiB7XG4gICAgY29uc3QgZGVmYXVsdFN0YXRlOiBDb3JlU3RhdGU8Tz4gPSB7XG4gICAgICBxdWVyeToge1xuICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgfSxcbiAgICAgIGxvYWQ6IHtcbiAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfSxcbiAgICAgIHNvdXJjZU9wdGlvbkdyb3VwczogW10sXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgc2VsZWN0ZWQ6IG5ldyBPcHRpb25TZXQoKSxcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0Li4uJyxcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIGV4cGFuZGVkT3B0aW9uczogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRlZEluaXRpYWxTdGF0ZTogQ29yZVN0YXRlPE8+ID0gZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBvcHRpb25zPy5pbml0aWFsU3RhdGUsXG4gICAgICBkZWZhdWx0U3RhdGUsXG4gICAgKTtcblxuICAgIGNvbnN0IGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPE8+PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgaW50ZXJuYWxBY3Rpb25zOiBTdWJqZWN0PEludGVybmFsQWN0aW9uPE8+PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgY29yZVN0YXRlOiBPYnNlcnZhYmxlPENvcmVTdGF0ZTxPPj4gPSBtZXJnZShcbiAgICAgIGFjdGlvbnMsXG4gICAgICBpbnRlcm5hbEFjdGlvbnMsXG4gICAgKS5waXBlKFxuICAgICAgc2NhbihcbiAgICAgICAgKHN0YXRlLCBhY3Rpb24pID0+XG4gICAgICAgICAgc2lkZUVmZmVjdHMocmVkdWNlKHN0YXRlLCBhY3Rpb24pLCBhY3Rpb24sIHNvdXJjZSwgaW50ZXJuYWxBY3Rpb25zKSxcbiAgICAgICAgZGVmYXVsdGVkSW5pdGlhbFN0YXRlLFxuICAgICAgKSxcbiAgICAgIHN0YXJ0V2l0aChkZWZhdWx0ZWRJbml0aWFsU3RhdGUpLFxuICAgICk7XG5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPE8+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcChzID0+IHtcbiAgICAgICAgICBjb25zdCBhbGxPcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdID1cbiAgICAgICAgICAgIHMuc291cmNlT3B0aW9uR3JvdXBzLm1hcChvcHRpb25Hcm91cCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9uR3JvdXAsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uR3JvdXAub3B0aW9ucy5tYXAob3B0aW9uID0+XG4gICAgICAgICAgICAgICAgICBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uKHMsIG9wdGlvbiksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKGFsbE9wdGlvbkdyb3Vwcyk7XG5cbiAgICAgICAgICBjb25zdCBmdWxsT3B0aW9uR3JvdXBzID0gYXBwbHlEaXNwbGF5TGltaXQoXG4gICAgICAgICAgICBhbGxPcHRpb25Hcm91cHMsXG4gICAgICAgICAgICBvcHRpb25zPy5kaXNwbGF5TGltaXQsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zLFxuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgLi4ucy5xdWVyeSxcbiAgICAgICAgICAgICAgc2hvd1NlYXJjaDpcbiAgICAgICAgICAgICAgICAhIW9wdGlvbnM/LmFsbG93U2VhcmNoICYmXG4gICAgICAgICAgICAgICAgKCEhcy5xdWVyeS5zZWFyY2ggfHwgY291bnRBbGxPcHRpb25zKGFsbE9wdGlvbkdyb3VwcykgPiA1KSxcbiAgICAgICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6IG9wdGlvbnM/LnNlYXJjaFBsYWNlaG9sZGVyID8/ICdTZWFyY2gnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZ1bGxPcHRpb25Hcm91cHMsXG4gICAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgICAgLi4ucy5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgIGFsbG93TXVsdGlTZWxlY3Q6ICEhb3B0aW9ucz8uYWxsb3dNdWx0aVNlbGVjdCxcbiAgICAgICAgICAgICAgYWxsb3dTZWxlY3RBbGw6ICEhb3B0aW9ucz8uYWxsb3dTZWxlY3RBbGwsXG4gICAgICAgICAgICAgIHZpc2libGVTZWxlY3Rpb25TdGF0ZTpcbiAgICAgICAgICAgICAgICBnZXRQYXJlbnRNdWx0aVNlbGVjdGlvblN0YXRlKHRvcExldmVsT3B0aW9ucyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgICAuLi5zLmRpc3BsYXksXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBnZXRTZWxlY3RlZERpc3BsYXkocyksXG4gICAgICAgICAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IGdldFplcm9TdGF0ZU1lc3NhZ2UocyksXG4gICAgICAgICAgICAgIGRpdmlkZXJzOiAhIW9wdGlvbnM/LmRpdmlkZXJzLFxuICAgICAgICAgICAgICBpbmxpbmU6ICEhb3B0aW9ucz8uaW5saW5lLFxuICAgICAgICAgICAgICBtYXhIZWlnaHQ6IG9wdGlvbnM/Lm1heEhlaWdodCA/PyBudWxsLFxuICAgICAgICAgICAgICBtYXhXaWR0aDogb3B0aW9ucz8ubWF4V2lkdGggPz8gbnVsbCxcbiAgICAgICAgICAgICAgbWluSGVpZ2h0OiBvcHRpb25zPy5taW5IZWlnaHQgPz8gbnVsbCxcbiAgICAgICAgICAgICAgbWluV2lkdGg6IG9wdGlvbnM/Lm1pbldpZHRoID8/IG51bGwsXG4gICAgICAgICAgICAgIGRpc3BsYXlMaW1pdE1lc3NhZ2U6IGdldERpc3BsYXlMaW1pdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgY291bnRWaXNpYmxlT3B0aW9ucyhmdWxsT3B0aW9uR3JvdXBzLCAhIXMucXVlcnkuc2VhcmNoKSxcbiAgICAgICAgICAgICAgICBjb3VudFZpc2libGVPcHRpb25zKGFsbE9wdGlvbkdyb3VwcywgISFzLnF1ZXJ5LnNlYXJjaCksXG4gICAgICAgICAgICAgICAgcy5xdWVyeSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc2hvd1NpbmdsZVNlbGVjdGVkOiAhIW9wdGlvbnM/LnNob3dTaW5nbGVTZWxlY3RlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgLy8gTG9hZCB0aGUgb3B0aW9ucyBpbW1lZGlhdGVseSBmb3Igc2VsZWN0cyB0aGF0IGFyZSBkaXNwbGF5ZWQgaW5saW5lLlxuICAgIGlmIChvcHRpb25zPy5pbmxpbmUpIGFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkJyB9KTtcblxuICAgIHJldHVybiB7IGFjdGlvbnMsIHN0YXRlIH07XG4gIH1cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9XG4gICAgTWFuYWdlck9wdGlvbnM8Tz4gJiB7XG4gICAgICBmdXNlT3B0aW9ucz86IElGdXNlT3B0aW9uczxPPjtcbiAgICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbk1lbW9yeU1hbmFnZXI8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIGZldGNoRGF0YXNldDogKCkgPT4gUHJvbWlzZTxPcHRpb25Hcm91cDxPPltdPiB8IE9wdGlvbkdyb3VwPE8+W10sXG4gICAgb3B0aW9ucz86IEluTWVtb3J5TWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IE1hbmFnZXI8Tz4ge1xuICAgIGxldCBkYXRhOiBPcHRpb25Hcm91cDxPPltdO1xuICAgIGxldCBmdXNlOiBGdXNlPE8+O1xuICAgIGxldCBleGFjdE1hdGNoOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IHBhcmVudHM6IE1hcDxPWydpZCddLCBPWydpZCddPjtcbiAgICBsZXQgY2hpbGRyZW46IE1hcDxPWydpZCddLCBPWydpZCddW10+O1xuXG4gICAgY29uc3Qgc291cmNlOiBTb3VyY2U8Tz4gPSBhc3luYyAocXVlcnksIG1vc3RSZWNlbnRBY3Rpb24pID0+IHtcbiAgICAgIC8qXG4gICAgICAgIFJlLWZldGNoIHRoZSBvcHRpb25zIG9uIHRoZSBsb2FkIGFjdGlvbiwgYW5kIHJlYnVpbGQgdGhlIHN0YXRlXG4gICAgICAgIGRlcml2ZWQgZnJvbSB0aGUgb3B0aW9uIGRhdGEuXG4gICAgICAqL1xuICAgICAgaWYgKFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdsb2FkJyB8fFxuICAgICAgICBtb3N0UmVjZW50QWN0aW9uLnR5cGUgPT09ICdvcGVuQ2hhbmdlJ1xuICAgICAgKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKGRhdGEpO1xuXG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShmbGF0dGVuT3B0aW9ucyh0b3BMZXZlbE9wdGlvbnMsIGZhbHNlKSwge1xuICAgICAgICAgIHRocmVzaG9sZDogMC4yLFxuICAgICAgICAgIGtleXM6IFsndGl0bGUnXSxcbiAgICAgICAgICBpbmNsdWRlU2NvcmU6IHRydWUsXG4gICAgICAgICAgaW5jbHVkZU1hdGNoZXM6IHRydWUsXG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4YWN0TWF0Y2ggPSBvcHRpb25zPy5mdXNlT3B0aW9ucz8udGhyZXNob2xkID09IDA7XG4gICAgICAgIFtwYXJlbnRzLCBjaGlsZHJlbl0gPSBnZXRSZWxhdGlvbnNoaXBNYXBzKHRvcExldmVsT3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICAgIElmIHRoZSB1c2VyIGlzIG5vdCBzZWFyY2hpbmcgb3B0aW9ucywgcmV0dXJuIHRoZSBmdWxsIHNldCBvZiBvcHRpb25zXG4gICAgICAgIGFzLWlzLlxuICAgICAgKi9cbiAgICAgIGlmICghcXVlcnkuc2VhcmNoKSByZXR1cm4gZGF0YTtcblxuICAgICAgLypcbiAgICAgICAgRXhlY3V0ZSB0aGUgc2VhcmNoIHdpdGggZnVzZS4gT25jZSB3ZSBoYXZlIHRoZSBzZWFyY2ggbWF0Y2ggZGF0YSxcbiAgICAgICAgcmVidWlsZCBqdXN0IGFzIG11Y2ggb2YgdGhlIHRyZWUgYXMgaXMgbmVlZGVkIHRvIHJlbmRlciB0aGUgc2VhcmNoXG4gICAgICAgIHJlc3VsdHMuIFNwZWNpZmljYWxseSwgYW55IG1hdGNoIHdpbGwgbmVlZCBhbGwgb2YgaXRzIGFuY2VzdG9ycyAoc29cbiAgICAgICAgdGhhdCBtYXRjaGVkIGxlYWYgbm9kZXMgYXJlIHNob3duIG5lc3RlZCB1bmRlciB0aGVpciBhbmNlc3RvcnMpIGFuZCBhbGxcbiAgICAgICAgb2YgaXRzIGNoaWxkcmVuIChiZWNhdXNlIGEgbWF0Y2hpbmcgcGFyZW50IG1lYW5zIHRoYXQgYWxsIG9mIGl0c1xuICAgICAgICBkZXNjZW5kYW50cyBtYXRjaCB0b28sIHBlciB0aGUgZGVzaWduIHNwZWNpZmljYXRpb24pLCB3aGV0aGVyIHRoZXlcbiAgICAgICAgdGhlbXNlbHZlcyBtYXRjaGVkIG9yIG5vdC5cbiAgICAgICovXG4gICAgICBjb25zdCBtYXRjaGVkT3B0aW9uczogRnVzZVJlc3VsdDxPPltdID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKTtcbiAgICAgIGNvbnN0IG1hdGNoZWRJZHM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoXG4gICAgICAgIG1hdGNoZWRPcHRpb25zLm1hcChyZXN1bHQgPT4gcmVzdWx0Lml0ZW0uaWQpLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbWF0Y2hBbmNlc3RvcnM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoKTtcbiAgICAgIGZ1bmN0aW9uIGNvbGxlY3RBbmNlc3RvcnMoaWRzOiBPWydpZCddW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudHMuZ2V0KGlkKTtcbiAgICAgICAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgICAgICAgIG1hdGNoQW5jZXN0b3JzLmFkZChwYXJlbnRJZCk7XG4gICAgICAgICAgICBjb2xsZWN0QW5jZXN0b3JzKFtwYXJlbnRJZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29sbGVjdEFuY2VzdG9ycyhbLi4ubWF0Y2hlZElkc10pO1xuXG4gICAgICBjb25zdCBtYXRjaERlc2NlbmRhbnRzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KCk7XG4gICAgICBmdW5jdGlvbiBjb2xsZWN0RGVzY2VuZGFudHMoaWRzOiBPWydpZCddW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZHMpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbklkcyA9IGNoaWxkcmVuLmdldChpZCk7XG4gICAgICAgICAgaWYgKGNoaWxkcmVuSWRzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuSWRzKSB7XG4gICAgICAgICAgICAgIG1hdGNoRGVzY2VuZGFudHMuYWRkKGNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbGxlY3REZXNjZW5kYW50cyhjaGlsZHJlbklkcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb2xsZWN0RGVzY2VuZGFudHMoWy4uLm1hdGNoZWRJZHNdKTtcblxuICAgICAgLypcbiAgICAgICAgTmV4dCwgd2UnbGwgY29tYmluZSBhbGwgdGhlIG1hdGNoZWQgSURzIHdpdGggdGhlaXIgZGlyZWN0IGFuY2VzdG9ycyBhbmRcbiAgICAgICAgZGVzY2FuZGFudHMsIGFuZCBmaWx0ZXIgdGhlIG9yaWdpbmFsIGRhdGEgc2V0IGRvd24gdG8ganVzdCB0aGVzZVxuICAgICAgICBvcHRpb25zLlxuICAgICAgKi9cbiAgICAgIGNvbnN0IGZpbHRlcmVkSWRzOiBTZXQ8T1snaWQnXT4gPSBuZXcgU2V0KFtcbiAgICAgICAgLi4ubWF0Y2hlZElkcyxcbiAgICAgICAgLi4ubWF0Y2hBbmNlc3RvcnMsXG4gICAgICAgIC4uLm1hdGNoRGVzY2VuZGFudHMsXG4gICAgICBdKTtcblxuICAgICAgZnVuY3Rpb24gZmlsdGVyT3B0aW9ucyhvcHRpb25zOiBPcHRpb248Tz5bXSk6IE9wdGlvbjxPPltdIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zOiBPcHRpb248Tz5bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGZpbHRlcmVkSWRzLmhhcyhvcHRpb24uaWQpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZE9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgICAgY2hpbGRyZW46IG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBmaWx0ZXJPcHRpb25zKG9wdGlvbi5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZmlsdGVyT3B0aW9ucyhnZXRUb3BMZXZlbE9wdGlvbnMoZGF0YSkpO1xuXG4gICAgICAvKlxuICAgICAgICBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGFuIGFycmF5IG9mIGRpc3RpbmN0IHRyZWVzICh0b3AtbGV2ZWwgb3B0aW9ucyksXG4gICAgICAgIGZpbHRlcmVkIGRvd24gdG8gb25seSB0aGUgb3B0aW9ucyBtYXRjaGluZyB0aGUgc2VhcmNoIHF1ZXJ5LiBOb3RlIHRoYXRcbiAgICAgICAgd2UgZG9uJ3QgY2FyZSBhYm91dCBzZWN0aW9uIGhlYWRlcnMgd2hlbiBzZWFyY2hpbmcgc2luY2UgcmVzdWx0cyBzaG91bGRcbiAgICAgICAgYmUgb3JkZXJlZCBieSByZWxldmFuY2UuIFRvIGNhbGN1bGF0ZSB0aGUgb3JkZXIgb2YgdGhlc2UgdHJlZXMsIHdlJ2xsXG4gICAgICAgIHRha2UgdGhlIHRvdGFsIG1hdGNoIHNjb3JlcyBmb3Igb3B0aW9ucyBmb3VuZCBpbiB0aGUgdHJlZSwgZGl2aWRlZCBieVxuICAgICAgICB0aGUgY291bnQgb2YgbWF0Y2hlcyBpbiB0aGUgdHJlZSAodGhlIGJlc3QgYXZlcmFnZSBtYXRjaCBzY29yZSkuXG4gICAgICAqL1xuXG4gICAgICBjb25zdCBzY29yZU1hcDogTWFwPE9bJ2lkJ10sIG51bWJlcj4gPSBuZXcgTWFwKFxuICAgICAgICBtYXRjaGVkT3B0aW9ucy5tYXAocmVzdWx0ID0+IFtyZXN1bHQuaXRlbS5pZCwgcmVzdWx0LnNjb3JlID8/IDBdKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBvcmRlcmVkID0gc29ydEJ5KGZpbHRlcmVkT3B0aW9ucywgKG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyID0+IHtcbiAgICAgICAgZnVuY3Rpb24gY2FsY3VsYXRlU2NvcmUob3B0aW9uOiBPcHRpb248Tz4pOiBudW1iZXIge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2NvcmVNYXAuZ2V0KG9wdGlvbi5pZCkgPz8gMCkgK1xuICAgICAgICAgICAgKG9wdGlvbi5jaGlsZHJlbiA/PyBbXSkucmVkdWNlKFxuICAgICAgICAgICAgICAoc2NvcmUsIGNoaWxkKSA9PiBzY29yZSArIGNhbGN1bGF0ZVNjb3JlKGNoaWxkKSxcbiAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvdW50KG9wdGlvbjogT3B0aW9uPE8+KTogbnVtYmVyIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgMSArXG4gICAgICAgICAgICAob3B0aW9uLmNoaWxkcmVuID8/IFtdKS5yZWR1Y2UoXG4gICAgICAgICAgICAgIChjb3VudCwgY2hpbGQpID0+IGNvdW50ICsgY2FsY3VsYXRlQ291bnQoY2hpbGQpLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxTY29yZSA9IGNhbGN1bGF0ZVNjb3JlKG9wdGlvbik7XG4gICAgICAgIGNvbnN0IHRvdGFsQ291bnQgPSBjYWxjdWxhdGVDb3VudChvcHRpb24pO1xuICAgICAgICByZXR1cm4gdG90YWxTY29yZSAvIHRvdGFsQ291bnQ7XG4gICAgICB9KTtcblxuICAgICAgLypcbiAgICAgICAgRmluYWxseSwgd2UnbGwgYWRkIGhpZ2hsaWdodCBpbmRpY2VzIHRvIHRoZSBtYXRjaGVzIHNvIHRoYXQgdGhleSBjYW4gYmVcbiAgICAgICAgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgICAgKi9cblxuICAgICAgdHlwZSBIaWdobGlnaHRzID0ge1xuICAgICAgICB0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgICAgICBzdWJ0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IGhpZ2hsaWdodE1hcDogTWFwPE9bJ2lkJ10sIEhpZ2hsaWdodHM+ID0gbmV3IE1hcChcbiAgICAgICAgbWF0Y2hlZE9wdGlvbnMubWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgY29uc3QgaGlnaGxpZ2h0czogSGlnaGxpZ2h0cyA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcmVzdWx0Lm1hdGNoZXMgPz8gW10pIHtcbiAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgaW5leGFjdCBtYXRjaGVzXG4gICAgICAgICAgICBpZiAoZXhhY3RNYXRjaCAmJiBtYXRjaC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIG1hdGNoLmluZGljZXMgPSBtYXRjaC5pbmRpY2VzLmZpbHRlcihcbiAgICAgICAgICAgICAgICBpc0Z1c2VNYXRjaEV4YWN0KG1hdGNoLCBxdWVyeS5zZWFyY2gpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoLmtleSA9PT0gJ3RpdGxlJykge1xuICAgICAgICAgICAgICBoaWdobGlnaHRzLnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyA9IFsuLi5tYXRjaC5pbmRpY2VzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaC5rZXkgPT09ICdzdWJ0aXRsZScpIHtcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0cy5zdWJ0aXRsZUhpZ2hsaWdodEluZGljZXMgPSBbLi4ubWF0Y2guaW5kaWNlc107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbcmVzdWx0Lml0ZW0uaWQsIGhpZ2hsaWdodHNdO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBmdW5jdGlvbiBhZGRIaWdobGlnaHRzVG9PcHRpb24ob3B0aW9uczogT3B0aW9uPE8+W10pOiBTb3VyY2VPcHRpb248Tz5bXSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLm1hcChvcHRpb24gPT4gKHtcbiAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgLi4uaGlnaGxpZ2h0TWFwLmdldChvcHRpb24uaWQpLFxuICAgICAgICAgIC4uLihvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aFxuICAgICAgICAgICAgPyB7IGNoaWxkcmVuOiBhZGRIaWdobGlnaHRzVG9PcHRpb24ob3B0aW9uLmNoaWxkcmVuKSB9XG4gICAgICAgICAgICA6IG51bGwpLFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbeyBvcHRpb25zOiBhZGRIaWdobGlnaHRzVG9PcHRpb24ob3JkZXJlZCkgfV07XG4gICAgfTtcblxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgb3B0aW9ucyk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaXNGdXNlTWF0Y2hFeGFjdChcbiAgICBtYXRjaDogRnVzZVJlc3VsdE1hdGNoLFxuICAgIHNlYXJjaDogc3RyaW5nLFxuICApOiAoXG4gICAgdmFsdWU6IFJhbmdlVHVwbGUsXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBhcnJheTogcmVhZG9ubHkgUmFuZ2VUdXBsZVtdLFxuICApID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiBtYXRjaGVkSW5kaWNlcyA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVkVmFsdWUgPSBtYXRjaFxuICAgICAgICAudmFsdWUhLnNsaWNlKG1hdGNoZWRJbmRpY2VzWzBdLCBtYXRjaGVkSW5kaWNlc1sxXSArIDEpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgLy8gZnVzZSBpcyB3ZWlyZCB3aXRoIGl0J3MgbWF0Y2hlcy4gRm9yIGEgdGV4dCBvZiBcInBsYW5uaW5nXCIgYW5kIGEgc2VhcmNoIHN0cmluZyBvZiBcInBsYW5cIlxuICAgICAgLy8gdGhlIG1hdGNoZWQgdmFsdWUgd2lsbCBiZSBcInBsYW5uXCIgd2l0aCB0aGUgZXh0cmEgJ24nIGJlY2F1c2Ugb2YgaXRzIGZ1enp5IG1hdGNoaW5nLlxuICAgICAgLy8gc28ganVzdCBtYWtlIHN1cmUgdGhlIG1hdGNoZWQgdmFsdWUgYXQgbGVhc3Qgc3RhcnRzIHdpdGggdGhlIHNlYXJjaCBzdHJpbmcuXG4gICAgICAvLyBpdCdzIGV4dHJhIHdlaXJkIGJlY2F1c2UgZm9yIGEgdGV4dCBvZiBcImFuYWx5dGljc1wiIGFuZCBhIHNlYXJjaCBzdHJpbmcgb2YgXCJuYWx5dGljc1wiLFxuICAgICAgLy8gdGhlIG1hdGNoZWQgdmFsdWUgd2lsbCBiZSBcImFuYWx5dGljc1wiLiBTbyB3ZSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0aGUgbWF0Y2hlZCB2YWx1ZVxuICAgICAgLy8gaW5jbHVkZXMgdGhlIHNlYXJjaCBzdHJpbmcgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBleHRyYSBzdHVmZiBvbiB0aGUgZnJvbnQgb3IgdGhlIGVuZC5cbiAgICAgIHJldHVybiBtYXRjaGVkVmFsdWUuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpO1xuICAgIH07XG4gIH1cblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFN0YXRlIHJlZHVjZXIgKHdpdGggaGVscGVycykgLy9cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIGZ1bmN0aW9uIGdldERpc3BsYXlMaW1pdE1lc3NhZ2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIGRpc3BsYXllZE9wdGlvbkNvdW50OiBudW1iZXIsXG4gICAgdG90YWxPcHRpb25Db3VudDogbnVtYmVyLFxuICAgIHF1ZXJ5OiBDb3JlU3RhdGU8Tz5bJ3F1ZXJ5J10sXG4gICk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmIChkaXNwbGF5ZWRPcHRpb25Db3VudCA9PT0gdG90YWxPcHRpb25Db3VudCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgcml2TnVtYmVyID0gbmV3IE51bWJlclBpcGUoKTtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSByaXZOdW1iZXIudHJhbnNmb3JtKGRpc3BsYXllZE9wdGlvbkNvdW50KTtcbiAgICBjb25zdCB0b3RhbCA9IHJpdk51bWJlci50cmFuc2Zvcm0odG90YWxPcHRpb25Db3VudCk7XG4gICAgY29uc3Qgc3RhcnQgPSBgU2hvd2luZyAke2Rpc3BsYXllZH0gb2YgJHt0b3RhbH0gb3B0aW9uc2A7XG4gICAgcmV0dXJuIHF1ZXJ5LnNlYXJjaCA/IGAke3N0YXJ0fSBtYXRjaGluZyBcIiR7cXVlcnkuc2VhcmNofVwiYCA6IHN0YXJ0O1xuICB9XG5cbiAgZnVuY3Rpb24gY291bnRWaXNpYmxlT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSxcbiAgICBsZWFmT25seTogYm9vbGVhbixcbiAgKTogbnVtYmVyIHtcbiAgICBmdW5jdGlvbiBjb3VudChvcHRpb25zOiBGdWxsT3B0aW9uPE8+W10pOiBudW1iZXIge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucmVkdWNlKChhY2MsIG9wdGlvbikgPT4ge1xuICAgICAgICBpZiAob3B0aW9uLmV4cGFuZGVkICYmIG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYyArIChsZWFmT25seSA/IDAgOiAxKSArIGNvdW50KG9wdGlvbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYyArIDE7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgZ3JvdXApID0+IHRvdGFsICsgY291bnQoZ3JvdXAub3B0aW9ucyksXG4gICAgICAwLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjb3VudEFsbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IG51bWJlciB7XG4gICAgZnVuY3Rpb24gY291bnQob3B0aW9uczogRnVsbE9wdGlvbjxPPltdKTogbnVtYmVyIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJlZHVjZSgoYWNjLCBvcHRpb24pID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGFjYyArIDEgKyBjb3VudChvcHRpb24uY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2MgKyAxO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbkdyb3Vwcy5yZWR1Y2UoXG4gICAgICAodG90YWwsIGdyb3VwKSA9PiB0b3RhbCArIGNvdW50KGdyb3VwLm9wdGlvbnMpLFxuICAgICAgMCxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlEaXNwbGF5TGltaXQ8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICAgZGlzcGxheUxpbWl0PzogbnVtYmVyLFxuICApOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSB7XG4gICAgaWYgKGRpc3BsYXlMaW1pdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gb3B0aW9uR3JvdXBzO1xuXG4gICAgdHlwZSBEaXNwbGF5TGltaXRPcHRpb25zID0gW0Z1bGxPcHRpb248Tz5bXSwgbnVtYmVyXTtcbiAgICBmdW5jdGlvbiBmaWx0ZXJXaXRoTGltaXQoXG4gICAgICBvcHRpb25zOiBGdWxsT3B0aW9uPE8+W10sXG4gICAgICByZW1haW5pbmc6IG51bWJlcixcbiAgICApOiBEaXNwbGF5TGltaXRPcHRpb25zIHtcbiAgICAgIGxldCBsZWZ0ID0gcmVtYWluaW5nO1xuICAgICAgY29uc3QgdmlzaWJsZU9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAobGVmdCA8PSAwKSBicmVhaztcblxuICAgICAgICBpZiAob3B0aW9uLmV4cGFuZGVkICYmIG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgW2NoaWxkT3B0aW9ucywgY2hpbGRSZW1haW5pbmddID0gZmlsdGVyV2l0aExpbWl0KFxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkcmVuLFxuICAgICAgICAgICAgbGVmdCAtIDEsXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZE9wdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGVmdCA9IGNoaWxkUmVtYWluaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZpc2libGVPcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICBsZWZ0LS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdmlzaWJsZU9wdGlvbnMsIGxlZnRdO1xuICAgIH1cblxuICAgIHR5cGUgRGlzcGxheUxpbWl0R3JvdXBzID0gW0Z1bGxPcHRpb25Hcm91cDxPPltdLCBudW1iZXJdO1xuICAgIGNvbnN0IHN0YXJ0aW5nVmFsdWU6IERpc3BsYXlMaW1pdEdyb3VwcyA9IFtbXSwgZGlzcGxheUxpbWl0XTtcbiAgICBjb25zdCBbcmVzb2x2ZWRHcm91cHNdID0gb3B0aW9uR3JvdXBzLnJlZHVjZTxEaXNwbGF5TGltaXRHcm91cHM+KFxuICAgICAgKFtncm91cHMsIHJlbWFpbmluZ10sIGdyb3VwKSA9PiB7XG4gICAgICAgIGNvbnN0IFtvcHRpb25zLCBsZWZ0QWZ0ZXJdID0gZmlsdGVyV2l0aExpbWl0KGdyb3VwLm9wdGlvbnMsIHJlbWFpbmluZyk7XG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbWy4uLmdyb3VwcywgeyAuLi5ncm91cCwgb3B0aW9ucyB9XSwgbGVmdEFmdGVyXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW2dyb3VwcywgcmVtYWluaW5nXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN0YXJ0aW5nVmFsdWUsXG4gICAgKTtcblxuICAgIHJldHVybiByZXNvbHZlZEdyb3VwcztcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJlbGF0aW9uc2hpcE1hcHM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbnM6IE9wdGlvbjxPPltdLFxuICApOiBbTWFwPE9bJ2lkJ10sIE9bJ2lkJ10+LCBNYXA8T1snaWQnXSwgT1snaWQnXVtdPl0ge1xuICAgIGNvbnN0IHBhcmVudHMgPSBuZXcgTWFwKCk7XG4gICAgZnVuY3Rpb24gYnVpbGRQYXJlbnRzTWFwKG9wdGlvbnM6IE9wdGlvbjxPPltdLCBwYXJlbnQ/OiBPcHRpb248Tz4pOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIHBhcmVudHMuc2V0KG9wdGlvbi5pZCwgcGFyZW50LmlkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBidWlsZFBhcmVudHNNYXAob3B0aW9uLmNoaWxkcmVuLCBvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGJ1aWxkUGFyZW50c01hcChvcHRpb25zKTtcblxuICAgIGNvbnN0IGNoaWxkcmVuID0gbmV3IE1hcCgpO1xuICAgIGZ1bmN0aW9uIGJ1aWxkQ2hpbGRyZW5NYXAob3B0aW9uczogT3B0aW9uPE8+W10pOiB2b2lkIHtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgY2hpbGRyZW4uc2V0KFxuICAgICAgICAgICAgb3B0aW9uLmlkLFxuICAgICAgICAgICAgb3B0aW9uLmNoaWxkcmVuLm1hcCgoeyBpZCB9KSA9PiBpZCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBidWlsZENoaWxkcmVuTWFwKG9wdGlvbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRDaGlsZHJlbk1hcChvcHRpb25zKTtcblxuICAgIHJldHVybiBbcGFyZW50cywgY2hpbGRyZW5dO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdLFxuICApOiBGdWxsT3B0aW9uPE8+W107XG4gIGZ1bmN0aW9uIGdldFRvcExldmVsT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBTb3VyY2VPcHRpb25Hcm91cDxPPltdLFxuICApOiBTb3VyY2VPcHRpb248Tz5bXTtcbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IE9wdGlvbjxPPltdO1xuICBmdW5jdGlvbiBnZXRUb3BMZXZlbE9wdGlvbnM8XG4gICAgTyBleHRlbmRzIEJhc2VPcHRpb24sXG4gICAgRyBleHRlbmRzIHsgb3B0aW9uczogcmVhZG9ubHkgVFtdIH0sXG4gICAgVCA9IEcgZXh0ZW5kcyBGdWxsT3B0aW9uR3JvdXA8Tz5cbiAgICAgID8gRnVsbE9wdGlvbjxPPlxuICAgICAgOiBHIGV4dGVuZHMgU291cmNlT3B0aW9uR3JvdXA8Tz5cbiAgICAgID8gU291cmNlT3B0aW9uPE8+XG4gICAgICA6IE9wdGlvbjxPPixcbiAgPihvcHRpb25Hcm91cHM6IEdbXSk6IFRbXSB7XG4gICAgcmV0dXJuIG9wdGlvbkdyb3Vwcy5yZWR1Y2U8VFtdPihcbiAgICAgIChvcHRpb25zLCBncm91cCkgPT4gWy4uLm9wdGlvbnMsIC4uLmdyb3VwLm9wdGlvbnNdLFxuICAgICAgW10sXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBhcmVudE11bHRpU2VsZWN0aW9uU3RhdGU8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIGNoaWxkcmVuOiBGdWxsT3B0aW9uPE8+W10sXG4gICk6IE11bHRpU2VsZWN0aW9uU3RhdGUge1xuICAgIGlmIChjaGlsZHJlbi5ldmVyeShjaGlsZCA9PiBjaGlsZC5zZWxlY3RlZCA9PT0gdHJ1ZSkpIHJldHVybiB0cnVlO1xuICAgIGlmIChjaGlsZHJlbi5ldmVyeShjaGlsZCA9PiBjaGlsZC5zZWxlY3RlZCA9PT0gZmFsc2UpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICdpbmRldGVybWluYXRlJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGF1Z21lbnRPcHRpb25Ub0Z1bGxPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgb3B0aW9uOiBTb3VyY2VPcHRpb248Tz4sXG4gICk6IEZ1bGxPcHRpb248Tz4ge1xuICAgIGlmIChvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgYXVnbWVudGVkQ2hpbGRyZW4gPSBvcHRpb24uY2hpbGRyZW4ubWFwKGNoaWxkID0+XG4gICAgICAgIGF1Z21lbnRPcHRpb25Ub0Z1bGxPcHRpb24oc3RhdGUsIGNoaWxkKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgIGNoaWxkcmVuOiBhdWdtZW50ZWRDaGlsZHJlbixcbiAgICAgICAgc2VsZWN0ZWQ6IGdldFBhcmVudE11bHRpU2VsZWN0aW9uU3RhdGUoYXVnbWVudGVkQ2hpbGRyZW4pLFxuICAgICAgICBleHBhbmRlZDogc3RhdGUucXVlcnkuc2VhcmNoXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBzdGF0ZS5kaXNwbGF5LmV4cGFuZGVkT3B0aW9ucy5oYXMob3B0aW9uLmlkKSxcbiAgICAgICAgc2VsZWN0YWJsZTogIXN0YXRlLnF1ZXJ5LnNlYXJjaCxcbiAgICAgICAgZXhwYW5kYWJsZTogIXN0YXRlLnF1ZXJ5LnNlYXJjaCxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5vcHRpb24sXG4gICAgICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICAgICAgc2VsZWN0ZWQ6IHN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZC5oYXMob3B0aW9uKSxcbiAgICAgIGV4cGFuZGVkOiBmYWxzZSxcbiAgICAgIHNlbGVjdGFibGU6IHRydWUsXG4gICAgICBleHBhbmRhYmxlOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWREaXNwbGF5PE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXS5tYXAoKHsgdGl0bGUgfSkgPT4gdGl0bGUpLmpvaW4oJywgJyk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRaZXJvU3RhdGVNZXNzYWdlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICApOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoc3RhdGUuc291cmNlT3B0aW9uR3JvdXBzLmV2ZXJ5KGdyb3VwID0+IGdyb3VwLm9wdGlvbnMubGVuZ3RoID09PSAwKSkge1xuICAgICAgaWYgKHN0YXRlLnF1ZXJ5LnNlYXJjaCkgcmV0dXJuICdObyByZXN1bHRzIGZvdW5kLic7XG4gICAgICByZXR1cm4gJ05vIG9wdGlvbnMuJztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kT3B0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25zOiBTb3VyY2VPcHRpb248Tz5bXSxcbiAgICBpZDogT1snaWQnXSxcbiAgKTogU291cmNlT3B0aW9uPE8+IHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbi5pZCA9PT0gaWQpIHJldHVybiBvcHRpb247XG4gICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBmaW5kT3B0aW9uKG9wdGlvbi5jaGlsZHJlbiwgaWQpO1xuICAgICAgICBpZiAoY2hpbGQpIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBmbGF0dGVuT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uczogT3B0aW9uPE8+W10sXG4gICAgbGVhZk9ubHk6IGJvb2xlYW4sXG4gICk6IE9bXSB7XG4gICAgcmV0dXJuIGZsYXR0ZW5EZWVwKFxuICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSBvcHRpb24uY2hpbGRyZW4ubWFwKGNoaWxkID0+XG4gICAgICAgICAgICBmbGF0dGVuT3B0aW9ucyhbY2hpbGRdLCBsZWFmT25seSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbGVhZk9ubHkgPyBkZXNjZW5kYW50cyA6IFtvcHRpb24sIC4uLmRlc2NlbmRhbnRzXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW29wdGlvbl07XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVTZWxlY3RlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBpZDogT1snaWQnXSxcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCB0b3BMZXZlbE9wdGlvbnMgPSBnZXRUb3BMZXZlbE9wdGlvbnMoc3RhdGUuc291cmNlT3B0aW9uR3JvdXBzKTtcbiAgICBjb25zdCBvcHRpb24gPSBmaW5kT3B0aW9uKHRvcExldmVsT3B0aW9ucywgaWQpO1xuICAgIGlmICghb3B0aW9uKSByZXR1cm4gc3RhdGU7XG5cbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBuZXcgT3B0aW9uU2V0KHN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG5cbiAgICBjb25zdCBuZXdWYWx1ZSA9ICEoXG4gICAgICBhdWdtZW50T3B0aW9uVG9GdWxsT3B0aW9uKHN0YXRlLCBvcHRpb24pLnNlbGVjdGVkID09PSB0cnVlXG4gICAgKTtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuT3B0aW9ucyhbb3B0aW9uXSwgdHJ1ZSk7XG4gICAgZm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIG5ld1NlbGVjdGlvbi5hZGQobGVhZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZWxlY3Rpb24uZGVsZXRlKGxlYWYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBzZWxlY3RlZDogbmV3U2VsZWN0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0U2VsZWN0ZWRPcHRpb248TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgaWQ6IE9bJ2lkJ10sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKHN0YXRlLnNvdXJjZU9wdGlvbkdyb3Vwcyk7XG4gICAgY29uc3Qgb3B0aW9uID0gZmluZE9wdGlvbih0b3BMZXZlbE9wdGlvbnMsIGlkKTtcbiAgICBpZiAoIW9wdGlvbikgcmV0dXJuIHN0YXRlO1xuXG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IE9wdGlvblNldDxPPigpO1xuICAgIG5ld1NlbGVjdGlvbi5hZGQob3B0aW9uKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBzZWxlY3RlZDogbmV3U2VsZWN0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlVmlzaWJsZVNlbGVjdGVkPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IGxlYXZlcyA9IGZsYXR0ZW5PcHRpb25zKFxuICAgICAgZ2V0VG9wTGV2ZWxPcHRpb25zKHN0YXRlLnNvdXJjZU9wdGlvbkdyb3VwcyksXG4gICAgICB0cnVlLFxuICAgICk7XG4gICAgY29uc3QgaXNBbGxTZWxlY3RlZCA9IGxlYXZlcy5ldmVyeShsZWFmID0+XG4gICAgICBbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXS5tYXAoKHsgaWQgfSkgPT4gaWQpLmluY2x1ZGVzKGxlYWYuaWQpLFxuICAgICk7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IE9wdGlvblNldChzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuXG4gICAgZm9yIChjb25zdCBsZWFmIG9mIGxlYXZlcykge1xuICAgICAgaWYgKGlzQWxsU2VsZWN0ZWQpIG5ld1NlbGVjdGlvbi5kZWxldGUobGVhZik7XG4gICAgICBlbHNlIG5ld1NlbGVjdGlvbi5hZGQobGVhZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIC4uLnN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZU9wdGlvbkV4cGFuZGVkPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGlkOiBPWydpZCddLFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gIXN0YXRlLmRpc3BsYXkuZXhwYW5kZWRPcHRpb25zLmhhcyhpZCk7XG4gICAgY29uc3QgbmV3RXhwYW5kZWRPcHRpb25zID0gbmV3IFNldChzdGF0ZS5kaXNwbGF5LmV4cGFuZGVkT3B0aW9ucyk7XG4gICAgaWYgKG5ld1ZhbHVlKSBuZXdFeHBhbmRlZE9wdGlvbnMuYWRkKGlkKTtcbiAgICBlbHNlIG5ld0V4cGFuZGVkT3B0aW9ucy5kZWxldGUoaWQpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgZXhwYW5kZWRPcHRpb25zOiBuZXdFeHBhbmRlZE9wdGlvbnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBzaWRlRWZmZWN0czxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBhY3Rpb246IEFjdGlvbjxPPiB8IEludGVybmFsQWN0aW9uPE8+LFxuICAgIHNvdXJjZTogU291cmNlPE8+LFxuICAgIGludGVybmFsQWN0aW9uczogU3ViamVjdDxJbnRlcm5hbEFjdGlvbjxPPj4sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgaWYgKFxuICAgICAgYWN0aW9uLnR5cGUgPT09ICdsb2FkJyB8fFxuICAgICAgYWN0aW9uLnR5cGUgPT09ICdzZWFyY2hDaGFuZ2UnIHx8XG4gICAgICAoYWN0aW9uLnR5cGUgPT09ICdvcGVuQ2hhbmdlJyAmJiBhY3Rpb24ub3BlbilcbiAgICApIHtcbiAgICAgIHNvdXJjZShzdGF0ZS5xdWVyeSwgYWN0aW9uKVxuICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICBpbnRlcm5hbEFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkQ29tcGxldGUnLCBkYXRhIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIGludGVybmFsQWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWRFcnJvcicsIGVycm9yIH0pO1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgbG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZHVjZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBhY3Rpb246IEFjdGlvbjxPPiB8IEludGVybmFsQWN0aW9uPE8+LFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2xvYWQnOlxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICBjYXNlICdsb2FkQ29tcGxldGUnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIGxvYWQ6IHtcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzb3VyY2VPcHRpb25Hcm91cHM6IGFjdGlvbi5kYXRhLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnbG9hZEVycm9yJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBhY3Rpb24uZXJyb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ29wZW5DaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgICAgIG9wZW46IGFjdGlvbi5vcGVuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICBzZWFyY2g6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICBjYXNlICdzZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHNlbGVjdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b2dnbGVPcHRpb25TZWxlY3RlZCc6XG4gICAgICAgIHJldHVybiB0b2dnbGVTZWxlY3RlZChzdGF0ZSwgYWN0aW9uLmlkKTtcbiAgICAgIGNhc2UgJ3NldFNlbGVjdGVkT3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIHNldFNlbGVjdGVkT3B0aW9uKHN0YXRlLCBhY3Rpb24uaWQpO1xuICAgICAgY2FzZSAndmlzaWJsZVNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgICAgcmV0dXJuIHRvZ2dsZVZpc2libGVTZWxlY3RlZChzdGF0ZSk7XG4gICAgICBjYXNlICd0b2dnbGVPcHRpb25FeHBhbmRlZCc6XG4gICAgICAgIHJldHVybiB0b2dnbGVPcHRpb25FeHBhbmRlZChzdGF0ZSwgYWN0aW9uLmlkKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
590
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi9pbnB1dC9zZWxlY3Qvc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUtOLE1BQU0sU0FBUyxDQUFDO0FBQ2pCLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsV0FBVyxFQUVYLEdBQUcsRUFDSCxLQUFLLEVBRUwsYUFBYSxFQUNiLElBQUksRUFDSixTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRzVELE1BQU0sS0FBVyxTQUFTLENBbWhDekI7QUFuaENELFdBQWlCLFNBQVM7SUFDeEIsYUFBYTtJQUNiLGFBQWE7SUFDYixhQUFhO0lBb0diOzs7T0FHRztJQUNILE1BQWEsU0FBZ0MsU0FBUSxHQUFvQjtRQUM5RCxHQUFHLENBQUMsTUFBdUI7WUFDbEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFUSxHQUFHLENBQUMsTUFBdUI7WUFDbEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNwQix1RUFBdUU7Z0JBQ3ZFLG1FQUFtRTtnQkFDbkUscUJBQXFCO2dCQUNyQixNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ25DLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENB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LENBQUMsT0FBTztxQkFDdkI7aUJBQ0YsQ0FBQztZQUNKLEtBQUssaUJBQWlCO2dCQUNwQixPQUFPO29CQUNMLEdBQUcsS0FBSztvQkFDUixTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU87aUJBQzFCLENBQUM7WUFDSixLQUFLLHNCQUFzQjtnQkFDekIsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxQyxLQUFLLG1CQUFtQjtnQkFDdEIsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLEtBQUssdUJBQXVCO2dCQUMxQixPQUFPLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLEtBQUssc0JBQXNCO2dCQUN6QixPQUFPLG9CQUFvQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxFQW5oQ2dCLFNBQVMsS0FBVCxTQUFTLFFBbWhDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRnVzZSwge1xuICBGdXNlUmVzdWx0LFxuICBGdXNlUmVzdWx0TWF0Y2gsXG4gIElGdXNlT3B0aW9ucyxcbiAgUmFuZ2VUdXBsZSxcbn0gZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0c0RlZXAsIGZsYXR0ZW5EZWVwLCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgY29ubmVjdGFibGUsXG4gIENvbm5lY3RhYmxlLFxuICBtYXAsXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzY2FuLFxuICBzdGFydFdpdGgsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwgfSBmcm9tICd1dGlsaXR5LXR5cGVzJztcbmltcG9ydCB7IE51bWJlclBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHsgSGlnaGxpZ2h0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdmlzdWFsaXphdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmNvbXBvbmVudCc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgUml2U2VsZWN0IHtcbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBPcHRpb25zIC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvKipcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSALS0tLS0tLS0tLS0tLS0tLS0tLeKUgOKUgOKUgOKUkFxuICAgKiDilIIgQmFzZU9wdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgICog4pSCIFRoZSBjb3JlIGRhdGEgcmVxdWlyZWQgZm9yIGVhY2ggb3B0aW9uICAgIOKUglxuICAgKiDilIIgKHN1Y2ggYXMgaWQgYW5kIHRpdGxlKS4gICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgC0tLS0tLS0tLS0tLS0tLS0tLS3ilIDilIDilKRcbiAgICog4pSCIE9wdGlvbiAoQmFzZU9wdGlvbiArIGNoaWxkcmVuKSAgICAgICAgICAgIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBQcm92aWRlcyByZWN1cnNpdmUgdHlwZSBzYWZldHkgdG8gdGhlICAgICDilIJcbiAgICog4pSCIHR5cGUgc2FmZXR5IHRvIHRoZSBCYXNlT3B0aW9uLiAgICAgICAgICAgIOKUglxuICAgKiDilJTilIAtLS0tLS0tLS0tLS0tLS0tLS3ilKwtLS0tLS0t4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAqICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSCIFNvdXJjZU9wdGlvbiAoT3B0aW9uICsgc2VhcmNoIGhpZ2hsaWdodHMpIOKUglxuICAgKiDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUgiBBZGRzIHNlYXJjaCBoaWdobGlnaHRzIHRvIHRoZSBPcHRpb24gYW5kICDilIJcbiAgICog4pSCIGlzIHRoZSByZXR1cm4gdHlwZSBmb3IgdGhlIG9wdGlvbiBTb3VyY2UgIOKUglxuICAgKiDilIIgKGRhdGEgZmV0Y2hlcikgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKiAgICAgICAgICAgICAgICAgICAgIHxcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiBGdWxsT3B0aW9uIChTb3VyY2VPcHRpb24gKyBVSSBzdGF0ZSkgICAgICDilIJcbiAgICog4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiDilIIgQXVnbWVudHMgdGhlIFNvdXJjZU9wdGlvbiB3aXRoIGFsbCBvZiB0aGUg4pSCXG4gICAqIOKUgiBVSSBpbmZvcm1hdGlvbiBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSAgICDilIJcbiAgICog4pSCIHN0YXRlLCBzdWNoIGFzIHNlbGVjdGlvbiBzdGF0dXMsIHdoZXRoZXIgIOKUglxuICAgKiDilIIgb3Igbm90IHRoZSBub2RlIGlzIGV4cGFuZGVkLCBldGMuICAgICAgICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIHVzYWdlcyBvZiBPbWl0PC4uLj4gaW4gdGhpcyBzZWN0aW9uIGFyZSBub3QgcmVxdWlyZWQsIGJ1dFxuICAgKiBkbyBoZWxwIGluLWVkaXRvciB0eXBlIGhpbnRzIHRvIGJlIG1vcmUgY2xlYXIgYW5kIGRpcmVjdC5cbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgQmFzZU9wdGlvbiA9IHtcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgc3VidGl0bGU/OiBzdHJpbmc7XG4gICAgaGVscD86IHN0cmluZztcbiAgICBjb3VudD86IG51bWJlcjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbiA9IEJhc2VPcHRpb24+ID0gTyAmIHtcbiAgICBjaGlsZHJlbj86IE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZU9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBPbWl0PFxuICAgIE9wdGlvbjxPPixcbiAgICAnY2hpbGRyZW4nXG4gID4gJiB7XG4gICAgdGl0bGVIaWdobGlnaHRJbmRpY2VzPzogSGlnaGxpZ2h0Q29tcG9uZW50LkhpZ2hsaWdodEluZGljZXNbXTtcbiAgICBzdWJ0aXRsZUhpZ2hsaWdodEluZGljZXM/OiBIaWdobGlnaHRDb21wb25lbnQuSGlnaGxpZ2h0SW5kaWNlc1tdO1xuICAgIGNoaWxkcmVuPzogU291cmNlT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3Rpb25TdGF0ZSA9IGJvb2xlYW4gfCAnaW5kZXRlcm1pbmF0ZSc7XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSBPbWl0PFxuICAgIFNvdXJjZU9wdGlvbjxPPixcbiAgICAnY2hpbGRyZW4nXG4gID4gJiB7XG4gICAgc2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgZXhwYW5kZWQ6IGJvb2xlYW47XG4gICAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgICBleHBhbmRhYmxlOiBib29sZWFuO1xuICAgIGNoaWxkcmVuPzogRnVsbE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gT3B0aW9uIGdyb3VwcyAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLyoqXG4gICAqIFRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gT3B0aW9uR3JvdXAsIFNvdXJjZU9wdGlvbkdyb3VwLCBhbmRcbiAgICogRnVsbE9wdGlvbkdyb3VwIGlzIGFuYWxvZ291cyB0byB0aGUgb3B0aW9uIHR5cGVzIGFib3ZlLlxuICAgKlxuICAgKiBBcyB3aXRoIGJlZm9yZSwgdGhlIHVzZSBvZiBPbWl0PC4uLj4gaXMgbm90IHJlcXVpcmVkIGJ1dCBoZWxwZnVsLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBPcHRpb25Hcm91cDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgaGVhZGVyPzogc3RyaW5nO1xuICAgIG9wdGlvbnM6IE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZU9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE9taXQ8XG4gICAgT3B0aW9uR3JvdXA8Tz4sXG4gICAgJ29wdGlvbnMnXG4gID4gJiB7XG4gICAgb3B0aW9uczogU291cmNlT3B0aW9uPE8+W107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRnVsbE9wdGlvbkdyb3VwPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IE9taXQ8XG4gICAgU291cmNlT3B0aW9uR3JvdXA8Tz4sXG4gICAgJ29wdGlvbnMnXG4gID4gJiB7XG4gICAgb3B0aW9uczogRnVsbE9wdGlvbjxPPltdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgT3B0aW9uU2V0IGNsYXNzIHByb3ZpZGVzIFNldC1saWtlIGZ1bmN0aW9uYWxpdHksIGJ1dCB1bmlxdWVuZXNzIGlzXG4gICAqIGRldGVybWluZWQgYnkgdGhlIG9wdGlvbidzIElEIHJhdGhlciB0aGFuIHRoZSBvYmplY3QgcmVmZXJlbmNlLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIE9wdGlvblNldDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gZXh0ZW5kcyBTZXQ8U291cmNlT3B0aW9uPE8+PiB7XG4gICAgb3ZlcnJpZGUgaGFzKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICByZXR1cm4gISFbLi4udGhpc10uZmluZChvID0+IG8uaWQgPT09IG9wdGlvbi5pZCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgYWRkKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICBpZiAodGhpcy5oYXMob3B0aW9uKSkge1xuICAgICAgICAvLyBUaGUgU2V0IGFscmVhZHkgaGFzIHNvbWUgdmVyc2lvbiBvZiB0aGlzIG9wdGlvbiwgYnV0IHdlJ2xsIG1ha2Ugc3VyZVxuICAgICAgICAvLyBpdCBoYXMgdGhlIG1vc3QgcmVjZW50IG9iamVjdCByZWZlcmVuY2UgKHdoaWxlIGtlZXBpbmcgaW5zZXJ0aW9uXG4gICAgICAgIC8vIG9yZGVyIGNvbnNpc3RlbnQpLlxuICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gWy4uLnRoaXNdLm1hcChvID0+XG4gICAgICAgICAgby5pZCA9PT0gb3B0aW9uLmlkID8gb3B0aW9uIDogbyxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICBuZXdPcHRpb25zLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgc3VwZXIuYWRkKG8pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1cGVyLmFkZChvcHRpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgZGVsZXRlKG9wdGlvbjogU291cmNlT3B0aW9uPE8+KSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IFsuLi50aGlzXS5maW5kKG8gPT4gby5pZCA9PT0gb3B0aW9uLmlkKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBzdXBlci5kZWxldGUoZXhpc3RpbmcpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLy8vLy8vLy8vL1xuICAvLyBTdGF0ZSAvL1xuICAvLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUaGUgQ29yZVN0YXRlIHByb3ZpZGVzIGFsbCBvZiB0aGUgZm91bmRhdGlvbmFsIHBpZWNlcyBvZiBzdGF0ZSByZXF1aXJlZFxuICAgKiBmb3IgYSB3b3JraW5nIGNvbXBvbmVudC4gRnVsbFN0YXRlIGlzIGEgcHVyZSBkZXJpdmF0aW9uIG9mIENvcmVTdGF0ZSBwbHVzXG4gICAqIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCBwcm92aWRlcyBjb252ZW5pZW5jZXMgZm9yIHJlbmRlcmluZyB0aGVcbiAgICogY29tcG9uZW50cy4gQWN0aW9ucyBhbmQgdGhlIGNvcmUgc3RhdGUgYXJlIHBhc3NlZCB0byB0aGUgcmVkdWNlciB0b1xuICAgKiBwcm9kdWNlIG5ldyBDb3JlU3RhdGVzICh3aGljaCBhcmUgdGhlbiB1c2VkIHRvIGNhbGN1bGF0ZSBuZXcgRnVsbFN0YXRlcykuXG4gICAqXG4gICAqIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilIIgIFVJICDil4TilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSYICAgICAgICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgIOKUglxuICAgKiDilIIgIEFjdGlvbnMgIOKUgiAgIOKUglxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilIDilIDilIDilIDilIDilJggICDilIJcbiAgICogICAg4pSCICAgICAgICAgICAg4pSCXG4gICAqIOKUjOKUgOKUgOKWvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUkFxuICAgKiDilIIgIFN0YXRlIHJlZHVjZXIgIOKUglxuICAgKiDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgICovXG5cbiAgZXhwb3J0IHR5cGUgQ29yZVN0YXRlPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9IHtcbiAgICBxdWVyeToge1xuICAgICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgfTtcbiAgICBsb2FkOiB7XG4gICAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgICAgZXJyb3I6IHVua25vd24gfCBudWxsO1xuICAgIH07XG4gICAgc291cmNlT3B0aW9uR3JvdXBzOiBTb3VyY2VPcHRpb25Hcm91cDxPPltdO1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgc2VsZWN0ZWQ6IE9wdGlvblNldDxPPjtcbiAgICB9O1xuICAgIGRpc3BsYXk6IHtcbiAgICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgICBvcGVuOiBib29sZWFuO1xuICAgICAgZXhwYW5kZWRPcHRpb25zOiBTZXQ8T1snaWQnXT47XG4gICAgfTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBGdWxsU3RhdGU8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0gQ29yZVN0YXRlPE8+ICYge1xuICAgIHF1ZXJ5OiB7XG4gICAgICBzaG93U2VhcmNoOiBib29sZWFuO1xuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICB9O1xuICAgIGZ1bGxPcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdO1xuICAgIHNlbGVjdGlvbjoge1xuICAgICAgYWxsb3dNdWx0aVNlbGVjdDogYm9vbGVhbjtcbiAgICAgIGFsbG93U2VsZWN0QWxsOiBib29sZWFuO1xuICAgICAgdmlzaWJsZVNlbGVjdGlvblN0YXRlOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIH07XG4gICAgZGlzcGxheToge1xuICAgICAgZm9ybWF0dGVkU2VsZWN0ZWRPcHRpb25zOiBzdHJpbmc7XG4gICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgZGl2aWRlcnM6IGJvb2xlYW47XG4gICAgICBpbmxpbmU6IGJvb2xlYW47XG4gICAgICBtYXhIZWlnaHQ6IHN0cmluZyB8IG51bGw7XG4gICAgICBtYXhXaWR0aDogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1pbkhlaWdodDogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1pbldpZHRoOiBzdHJpbmcgfCBudWxsO1xuICAgICAgZGlzcGxheUxpbWl0TWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHNob3dTaW5nbGVTZWxlY3RlZDogYm9vbGVhbjtcbiAgICB9O1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gQWN0aW9ucyAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPiA9XG4gICAgfCB7IHR5cGU6ICdsb2FkJyB9XG4gICAgfCB7IHR5cGU6ICdvcGVuQ2hhbmdlJzsgb3BlbjogYm9vbGVhbiB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnOyBwYXlsb2FkOiBzdHJpbmcgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogQ29yZVN0YXRlPE8+WydzZWxlY3Rpb24nXTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvblNlbGVjdGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZXRTZWxlY3RlZE9wdGlvbic7XG4gICAgICAgIGlkOiBPWydpZCddO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAndmlzaWJsZVNlbGVjdGVkQ2hhbmdlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3RvZ2dsZU9wdGlvbkV4cGFuZGVkJztcbiAgICAgICAgaWQ6IE9bJ2lkJ107XG4gICAgICB9O1xuXG4gIHR5cGUgSW50ZXJuYWxBY3Rpb248TyBleHRlbmRzIEJhc2VPcHRpb24+ID1cbiAgICB8IHsgdHlwZTogJ2xvYWRDb21wbGV0ZSc7IGRhdGE6IFNvdXJjZU9wdGlvbkdyb3VwPE8+W10gfVxuICAgIHwgeyB0eXBlOiAnbG9hZEVycm9yJzsgZXJyb3I6IHVua25vd24gfTtcblxuICAvLy8vLy8vLy8vLy9cbiAgLy8gU291cmNlIC8vXG4gIC8vLy8vLy8vLy8vL1xuXG4gIC8qKlxuICAgKiBUaGUgU291cmNlJ3Mgam9iIGlzIHRvIGZldGNoIG9wdGlvbnMgKGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0YXRlKSB3aGljaFxuICAgKiB0aGVuIGJsZW5kIHdpdGggdGhlIG90aGVyIHBpZWNlcyBvZiBzdGF0ZSB0byBwcm9kdWNlIHRoZSBGdWxsU3RhdGUuXG4gICAqL1xuXG4gIGV4cG9ydCB0eXBlIFNvdXJjZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSAoXG4gICAgcXVlcnk6IENvcmVTdGF0ZTxPPlsncXVlcnknXSxcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBBY3Rpb248Tz4sXG4gICkgPT4gUHJvbWlzZTxTb3VyY2VPcHRpb25Hcm91cDxPPltdPjtcblxuICAvLy8vLy8vLy8vLy8vXG4gIC8vIE1hbmFnZXIgLy9cbiAgLy8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIE1hbmFnZXI8TyBleHRlbmRzIEJhc2VPcHRpb24+ID0ge1xuICAgIGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPE8+PjtcbiAgICBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPE8+PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPE8+PjtcbiAgICBhbGxvd011bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgICBhbGxvd1NlYXJjaD86IGJvb2xlYW47XG4gICAgYWxsb3dTZWxlY3RBbGw/OiBib29sZWFuO1xuICAgIHNlYXJjaFBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgIGRpdmlkZXJzPzogYm9vbGVhbjtcbiAgICBpbmxpbmU/OiBib29sZWFuO1xuICAgIG1heEhlaWdodD86IHN0cmluZyB8IG51bGw7XG4gICAgbWF4V2lkdGg/OiBzdHJpbmcgfCBudWxsO1xuICAgIG1pbkhlaWdodD86IHN0cmluZyB8IG51bGw7XG4gICAgbWluV2lkdGg/OiBzdHJpbmcgfCBudWxsO1xuICAgIGRpc3BsYXlMaW1pdD86IG51bWJlcjtcbiAgICBzaG93U2luZ2xlU2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIGdldEN1c3RvbU9wdGlvbkRpc3BsYXk/OiAoc2VsZWN0ZWRPcHRpb25zOiBTb3VyY2VPcHRpb248Tz5bXSkgPT4gc3RyaW5nO1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYW5hZ2VyPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzb3VyY2U6IFNvdXJjZTxPPixcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IE1hbmFnZXI8Tz4ge1xuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPE8+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgIH0sXG4gICAgICBsb2FkOiB7XG4gICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgICBzb3VyY2VPcHRpb25Hcm91cHM6IFtdLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIHNlbGVjdGVkOiBuZXcgT3B0aW9uU2V0KCksXG4gICAgICB9LFxuICAgICAgZGlzcGxheToge1xuICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdC4uLicsXG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBleHBhbmRlZE9wdGlvbnM6IG5ldyBTZXQoKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBkZWZhdWx0ZWRJbml0aWFsU3RhdGU6IENvcmVTdGF0ZTxPPiA9IGRlZmF1bHRzRGVlcChcbiAgICAgIHt9LFxuICAgICAgb3B0aW9ucz8uaW5pdGlhbFN0YXRlLFxuICAgICAgZGVmYXVsdFN0YXRlLFxuICAgICk7XG5cbiAgICBjb25zdCBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxPPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGludGVybmFsQWN0aW9uczogU3ViamVjdDxJbnRlcm5hbEFjdGlvbjxPPj4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGNvcmVTdGF0ZTogT2JzZXJ2YWJsZTxDb3JlU3RhdGU8Tz4+ID0gbWVyZ2UoXG4gICAgICBhY3Rpb25zLFxuICAgICAgaW50ZXJuYWxBY3Rpb25zLFxuICAgICkucGlwZShcbiAgICAgIHNjYW4oXG4gICAgICAgIChzdGF0ZSwgYWN0aW9uKSA9PlxuICAgICAgICAgIHNpZGVFZmZlY3RzKHJlZHVjZShzdGF0ZSwgYWN0aW9uKSwgYWN0aW9uLCBzb3VyY2UsIGludGVybmFsQWN0aW9ucyksXG4gICAgICAgIGRlZmF1bHRlZEluaXRpYWxTdGF0ZSxcbiAgICAgICksXG4gICAgICBzdGFydFdpdGgoZGVmYXVsdGVkSW5pdGlhbFN0YXRlKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxPPj4gPSBjb25uZWN0YWJsZShcbiAgICAgIGNvcmVTdGF0ZS5waXBlKFxuICAgICAgICBtYXAocyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxsT3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSA9XG4gICAgICAgICAgICBzLnNvdXJjZU9wdGlvbkdyb3Vwcy5tYXAob3B0aW9uR3JvdXAgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbkdyb3VwLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbkdyb3VwLm9wdGlvbnMubWFwKG9wdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbihzLCBvcHRpb24pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHRvcExldmVsT3B0aW9ucyA9IGdldFRvcExldmVsT3B0aW9ucyhhbGxPcHRpb25Hcm91cHMpO1xuXG4gICAgICAgICAgY29uc3QgZnVsbE9wdGlvbkdyb3VwcyA9IGFwcGx5RGlzcGxheUxpbWl0KFxuICAgICAgICAgICAgYWxsT3B0aW9uR3JvdXBzLFxuICAgICAgICAgICAgb3B0aW9ucz8uZGlzcGxheUxpbWl0LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgICAgIHNob3dTZWFyY2g6XG4gICAgICAgICAgICAgICAgISFvcHRpb25zPy5hbGxvd1NlYXJjaCAmJlxuICAgICAgICAgICAgICAgICghIXMucXVlcnkuc2VhcmNoIHx8IGNvdW50QWxsT3B0aW9ucyhhbGxPcHRpb25Hcm91cHMpID4gNSksXG4gICAgICAgICAgICAgIHNlYXJjaFBsYWNlaG9sZGVyOiBvcHRpb25zPy5zZWFyY2hQbGFjZWhvbGRlciA/PyAnU2VhcmNoJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdWxsT3B0aW9uR3JvdXBzLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgIC4uLnMuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICBhbGxvd011bHRpU2VsZWN0OiAhIW9wdGlvbnM/LmFsbG93TXVsdGlTZWxlY3QsXG4gICAgICAgICAgICAgIGFsbG93U2VsZWN0QWxsOiAhIW9wdGlvbnM/LmFsbG93U2VsZWN0QWxsLFxuICAgICAgICAgICAgICB2aXNpYmxlU2VsZWN0aW9uU3RhdGU6XG4gICAgICAgICAgICAgICAgZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZSh0b3BMZXZlbE9wdGlvbnMpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgICAgLi4ucy5kaXNwbGF5LFxuICAgICAgICAgICAgICBmb3JtYXR0ZWRTZWxlY3RlZE9wdGlvbnM6IGdldEZvcm1hdHRlZE9wdGlvbnNGb3JEaXNwbGF5KFxuICAgICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgemVyb1N0YXRlTWVzc2FnZTogZ2V0WmVyb1N0YXRlTWVzc2FnZShzKSxcbiAgICAgICAgICAgICAgZGl2aWRlcnM6ICEhb3B0aW9ucz8uZGl2aWRlcnMsXG4gICAgICAgICAgICAgIGlubGluZTogISFvcHRpb25zPy5pbmxpbmUsXG4gICAgICAgICAgICAgIG1heEhlaWdodDogb3B0aW9ucz8ubWF4SGVpZ2h0ID8/IG51bGwsXG4gICAgICAgICAgICAgIG1heFdpZHRoOiBvcHRpb25zPy5tYXhXaWR0aCA/PyBudWxsLFxuICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG9wdGlvbnM/Lm1pbkhlaWdodCA/PyBudWxsLFxuICAgICAgICAgICAgICBtaW5XaWR0aDogb3B0aW9ucz8ubWluV2lkdGggPz8gbnVsbCxcbiAgICAgICAgICAgICAgZGlzcGxheUxpbWl0TWVzc2FnZTogZ2V0RGlzcGxheUxpbWl0TWVzc2FnZShcbiAgICAgICAgICAgICAgICBjb3VudFZpc2libGVPcHRpb25zKGZ1bGxPcHRpb25Hcm91cHMsICEhcy5xdWVyeS5zZWFyY2gpLFxuICAgICAgICAgICAgICAgIGNvdW50VmlzaWJsZU9wdGlvbnMoYWxsT3B0aW9uR3JvdXBzLCAhIXMucXVlcnkuc2VhcmNoKSxcbiAgICAgICAgICAgICAgICBzLnF1ZXJ5LFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBzaG93U2luZ2xlU2VsZWN0ZWQ6ICEhb3B0aW9ucz8uc2hvd1NpbmdsZVNlbGVjdGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBzdGF0ZS5jb25uZWN0KCk7XG5cbiAgICAvLyBMb2FkIHRoZSBvcHRpb25zIGltbWVkaWF0ZWx5IGZvciBzZWxlY3RzIHRoYXQgYXJlIGRpc3BsYXllZCBpbmxpbmUuXG4gICAgaWYgKG9wdGlvbnM/LmlubGluZSkgYWN0aW9ucy5uZXh0KHsgdHlwZTogJ2xvYWQnIH0pO1xuXG4gICAgcmV0dXJuIHsgYWN0aW9ucywgc3RhdGUgfTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEluTWVtb3J5TWFuYWdlck9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+ID1cbiAgICBNYW5hZ2VyT3B0aW9uczxPPiAmIHtcbiAgICAgIGZ1c2VPcHRpb25zPzogSUZ1c2VPcHRpb25zPE8+O1xuICAgIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlcjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPE9wdGlvbkdyb3VwPE8+W10+IHwgT3B0aW9uR3JvdXA8Tz5bXSxcbiAgICBvcHRpb25zPzogSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxPPixcbiAgKTogTWFuYWdlcjxPPiB7XG4gICAgbGV0IGRhdGE6IE9wdGlvbkdyb3VwPE8+W107XG4gICAgbGV0IGZ1c2U6IEZ1c2U8Tz47XG4gICAgbGV0IGV4YWN0TWF0Y2g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgcGFyZW50czogTWFwPE9bJ2lkJ10sIE9bJ2lkJ10+O1xuICAgIGxldCBjaGlsZHJlbjogTWFwPE9bJ2lkJ10sIE9bJ2lkJ11bXT47XG5cbiAgICBjb25zdCBzb3VyY2U6IFNvdXJjZTxPPiA9IGFzeW5jIChxdWVyeSwgbW9zdFJlY2VudEFjdGlvbikgPT4ge1xuICAgICAgLypcbiAgICAgICAgUmUtZmV0Y2ggdGhlIG9wdGlvbnMgb24gdGhlIGxvYWQgYWN0aW9uLCBhbmQgcmVidWlsZCB0aGUgc3RhdGVcbiAgICAgICAgZGVyaXZlZCBmcm9tIHRoZSBvcHRpb24gZGF0YS5cbiAgICAgICovXG4gICAgICBpZiAoXG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ2xvYWQnIHx8XG4gICAgICAgIG1vc3RSZWNlbnRBY3Rpb24udHlwZSA9PT0gJ29wZW5DaGFuZ2UnXG4gICAgICApIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZldGNoRGF0YXNldCgpO1xuICAgICAgICBjb25zdCB0b3BMZXZlbE9wdGlvbnMgPSBnZXRUb3BMZXZlbE9wdGlvbnMoZGF0YSk7XG5cbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGZsYXR0ZW5PcHRpb25zKHRvcExldmVsT3B0aW9ucywgZmFsc2UpLCB7XG4gICAgICAgICAgdGhyZXNob2xkOiAwLjIsXG4gICAgICAgICAga2V5czogWyd0aXRsZSddLFxuICAgICAgICAgIGluY2x1ZGVTY29yZTogdHJ1ZSxcbiAgICAgICAgICBpbmNsdWRlTWF0Y2hlczogdHJ1ZSxcbiAgICAgICAgICAuLi5vcHRpb25zPy5mdXNlT3B0aW9ucyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhhY3RNYXRjaCA9IG9wdGlvbnM/LmZ1c2VPcHRpb25zPy50aHJlc2hvbGQgPT0gMDtcbiAgICAgICAgW3BhcmVudHMsIGNoaWxkcmVuXSA9IGdldFJlbGF0aW9uc2hpcE1hcHModG9wTGV2ZWxPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAgSWYgdGhlIHVzZXIgaXMgbm90IHNlYXJjaGluZyBvcHRpb25zLCByZXR1cm4gdGhlIGZ1bGwgc2V0IG9mIG9wdGlvbnNcbiAgICAgICAgYXMtaXMuXG4gICAgICAqL1xuICAgICAgaWYgKCFxdWVyeS5zZWFyY2gpIHJldHVybiBkYXRhO1xuXG4gICAgICAvKlxuICAgICAgICBFeGVjdXRlIHRoZSBzZWFyY2ggd2l0aCBmdXNlLiBPbmNlIHdlIGhhdmUgdGhlIHNlYXJjaCBtYXRjaCBkYXRhLFxuICAgICAgICByZWJ1aWxkIGp1c3QgYXMgbXVjaCBvZiB0aGUgdHJlZSBhcyBpcyBuZWVkZWQgdG8gcmVuZGVyIHRoZSBzZWFyY2hcbiAgICAgICAgcmVzdWx0cy4gU3BlY2lmaWNhbGx5LCBhbnkgbWF0Y2ggd2lsbCBuZWVkIGFsbCBvZiBpdHMgYW5jZXN0b3JzIChzb1xuICAgICAgICB0aGF0IG1hdGNoZWQgbGVhZiBub2RlcyBhcmUgc2hvd24gbmVzdGVkIHVuZGVyIHRoZWlyIGFuY2VzdG9ycykgYW5kIGFsbFxuICAgICAgICBvZiBpdHMgY2hpbGRyZW4gKGJlY2F1c2UgYSBtYXRjaGluZyBwYXJlbnQgbWVhbnMgdGhhdCBhbGwgb2YgaXRzXG4gICAgICAgIGRlc2NlbmRhbnRzIG1hdGNoIHRvbywgcGVyIHRoZSBkZXNpZ24gc3BlY2lmaWNhdGlvbiksIHdoZXRoZXIgdGhleVxuICAgICAgICB0aGVtc2VsdmVzIG1hdGNoZWQgb3Igbm90LlxuICAgICAgKi9cbiAgICAgIGNvbnN0IG1hdGNoZWRPcHRpb25zOiBGdXNlUmVzdWx0PE8+W10gPSBmdXNlLnNlYXJjaChxdWVyeS5zZWFyY2gpO1xuICAgICAgY29uc3QgbWF0Y2hlZElkczogU2V0PE9bJ2lkJ10+ID0gbmV3IFNldChcbiAgICAgICAgbWF0Y2hlZE9wdGlvbnMubWFwKHJlc3VsdCA9PiByZXN1bHQuaXRlbS5pZCksXG4gICAgICApO1xuXG4gICAgICBjb25zdCBtYXRjaEFuY2VzdG9yczogU2V0PE9bJ2lkJ10+ID0gbmV3IFNldCgpO1xuICAgICAgZnVuY3Rpb24gY29sbGVjdEFuY2VzdG9ycyhpZHM6IE9bJ2lkJ11bXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gcGFyZW50cy5nZXQoaWQpO1xuICAgICAgICAgIGlmIChwYXJlbnRJZCkge1xuICAgICAgICAgICAgbWF0Y2hBbmNlc3RvcnMuYWRkKHBhcmVudElkKTtcbiAgICAgICAgICAgIGNvbGxlY3RBbmNlc3RvcnMoW3BhcmVudElkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb2xsZWN0QW5jZXN0b3JzKFsuLi5tYXRjaGVkSWRzXSk7XG5cbiAgICAgIGNvbnN0IG1hdGNoRGVzY2VuZGFudHM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoKTtcbiAgICAgIGZ1bmN0aW9uIGNvbGxlY3REZXNjZW5kYW50cyhpZHM6IE9bJ2lkJ11bXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcykge1xuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuSWRzID0gY2hpbGRyZW4uZ2V0KGlkKTtcbiAgICAgICAgICBpZiAoY2hpbGRyZW5JZHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW5JZHMpIHtcbiAgICAgICAgICAgICAgbWF0Y2hEZXNjZW5kYW50cy5hZGQoY2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sbGVjdERlc2NlbmRhbnRzKGNoaWxkcmVuSWRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbGxlY3REZXNjZW5kYW50cyhbLi4ubWF0Y2hlZElkc10pO1xuXG4gICAgICAvKlxuICAgICAgICBOZXh0LCB3ZSdsbCBjb21iaW5lIGFsbCB0aGUgbWF0Y2hlZCBJRHMgd2l0aCB0aGVpciBkaXJlY3QgYW5jZXN0b3JzIGFuZFxuICAgICAgICBkZXNjYW5kYW50cywgYW5kIGZpbHRlciB0aGUgb3JpZ2luYWwgZGF0YSBzZXQgZG93biB0byBqdXN0IHRoZXNlXG4gICAgICAgIG9wdGlvbnMuXG4gICAgICAqL1xuICAgICAgY29uc3QgZmlsdGVyZWRJZHM6IFNldDxPWydpZCddPiA9IG5ldyBTZXQoW1xuICAgICAgICAuLi5tYXRjaGVkSWRzLFxuICAgICAgICAuLi5tYXRjaEFuY2VzdG9ycyxcbiAgICAgICAgLi4ubWF0Y2hEZXNjZW5kYW50cyxcbiAgICAgIF0pO1xuXG4gICAgICBmdW5jdGlvbiBmaWx0ZXJPcHRpb25zKG9wdGlvbnM6IE9wdGlvbjxPPltdKTogT3B0aW9uPE8+W10ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnM6IE9wdGlvbjxPPltdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZmlsdGVyZWRJZHMuaGFzKG9wdGlvbi5pZCkpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogb3B0aW9uLmNoaWxkcmVuPy5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IGZpbHRlck9wdGlvbnMob3B0aW9uLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJlZE9wdGlvbnM7XG4gICAgICB9XG4gICAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSBmaWx0ZXJPcHRpb25zKGdldFRvcExldmVsT3B0aW9ucyhkYXRhKSk7XG5cbiAgICAgIC8qXG4gICAgICAgIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYW4gYXJyYXkgb2YgZGlzdGluY3QgdHJlZXMgKHRvcC1sZXZlbCBvcHRpb25zKSxcbiAgICAgICAgZmlsdGVyZWQgZG93biB0byBvbmx5IHRoZSBvcHRpb25zIG1hdGNoaW5nIHRoZSBzZWFyY2ggcXVlcnkuIE5vdGUgdGhhdFxuICAgICAgICB3ZSBkb24ndCBjYXJlIGFib3V0IHNlY3Rpb24gaGVhZGVycyB3aGVuIHNlYXJjaGluZyBzaW5jZSByZXN1bHRzIHNob3VsZFxuICAgICAgICBiZSBvcmRlcmVkIGJ5IHJlbGV2YW5jZS4gVG8gY2FsY3VsYXRlIHRoZSBvcmRlciBvZiB0aGVzZSB0cmVlcywgd2UnbGxcbiAgICAgICAgdGFrZSB0aGUgdG90YWwgbWF0Y2ggc2NvcmVzIGZvciBvcHRpb25zIGZvdW5kIGluIHRoZSB0cmVlLCBkaXZpZGVkIGJ5XG4gICAgICAgIHRoZSBjb3VudCBvZiBtYXRjaGVzIGluIHRoZSB0cmVlICh0aGUgYmVzdCBhdmVyYWdlIG1hdGNoIHNjb3JlKS5cbiAgICAgICovXG5cbiAgICAgIGNvbnN0IHNjb3JlTWFwOiBNYXA8T1snaWQnXSwgbnVtYmVyPiA9IG5ldyBNYXAoXG4gICAgICAgIG1hdGNoZWRPcHRpb25zLm1hcChyZXN1bHQgPT4gW3Jlc3VsdC5pdGVtLmlkLCByZXN1bHQuc2NvcmUgPz8gMF0pLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG9yZGVyZWQgPSBzb3J0QnkoZmlsdGVyZWRPcHRpb25zLCAob3B0aW9uOiBPcHRpb248Tz4pOiBudW1iZXIgPT4ge1xuICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGVTY29yZShvcHRpb246IE9wdGlvbjxPPik6IG51bWJlciB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzY29yZU1hcC5nZXQob3B0aW9uLmlkKSA/PyAwKSArXG4gICAgICAgICAgICAob3B0aW9uLmNoaWxkcmVuID8/IFtdKS5yZWR1Y2UoXG4gICAgICAgICAgICAgIChzY29yZSwgY2hpbGQpID0+IHNjb3JlICsgY2FsY3VsYXRlU2NvcmUoY2hpbGQpLFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2FsY3VsYXRlQ291bnQob3B0aW9uOiBPcHRpb248Tz4pOiBudW1iZXIge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChvcHRpb24uY2hpbGRyZW4gPz8gW10pLnJlZHVjZShcbiAgICAgICAgICAgICAgKGNvdW50LCBjaGlsZCkgPT4gY291bnQgKyBjYWxjdWxhdGVDb3VudChjaGlsZCksXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b3RhbFNjb3JlID0gY2FsY3VsYXRlU2NvcmUob3B0aW9uKTtcbiAgICAgICAgY29uc3QgdG90YWxDb3VudCA9IGNhbGN1bGF0ZUNvdW50KG9wdGlvbik7XG4gICAgICAgIHJldHVybiB0b3RhbFNjb3JlIC8gdG90YWxDb3VudDtcbiAgICAgIH0pO1xuXG4gICAgICAvKlxuICAgICAgICBGaW5hbGx5LCB3ZSdsbCBhZGQgaGlnaGxpZ2h0IGluZGljZXMgdG8gdGhlIG1hdGNoZXMgc28gdGhhdCB0aGV5IGNhbiBiZVxuICAgICAgICBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAgICAqL1xuXG4gICAgICB0eXBlIEhpZ2hsaWdodHMgPSB7XG4gICAgICAgIHRpdGxlSGlnaGxpZ2h0SW5kaWNlcz86IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gICAgICAgIHN1YnRpdGxlSGlnaGxpZ2h0SW5kaWNlcz86IEhpZ2hsaWdodENvbXBvbmVudC5IaWdobGlnaHRJbmRpY2VzW107XG4gICAgICB9O1xuICAgICAgY29uc3QgaGlnaGxpZ2h0TWFwOiBNYXA8T1snaWQnXSwgSGlnaGxpZ2h0cz4gPSBuZXcgTWFwKFxuICAgICAgICBtYXRjaGVkT3B0aW9ucy5tYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICBjb25zdCBoaWdobGlnaHRzOiBIaWdobGlnaHRzID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiByZXN1bHQubWF0Y2hlcyA/PyBbXSkge1xuICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBpbmV4YWN0IG1hdGNoZXNcbiAgICAgICAgICAgIGlmIChleGFjdE1hdGNoICYmIG1hdGNoLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgbWF0Y2guaW5kaWNlcyA9IG1hdGNoLmluZGljZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIGlzRnVzZU1hdGNoRXhhY3QobWF0Y2gsIHF1ZXJ5LnNlYXJjaCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2gua2V5ID09PSAndGl0bGUnKSB7XG4gICAgICAgICAgICAgIGhpZ2hsaWdodHMudGl0bGVIaWdobGlnaHRJbmRpY2VzID0gWy4uLm1hdGNoLmluZGljZXNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoLmtleSA9PT0gJ3N1YnRpdGxlJykge1xuICAgICAgICAgICAgICBoaWdobGlnaHRzLnN1YnRpdGxlSGlnaGxpZ2h0SW5kaWNlcyA9IFsuLi5tYXRjaC5pbmRpY2VzXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFtyZXN1bHQuaXRlbS5pZCwgaGlnaGxpZ2h0c107XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIGZ1bmN0aW9uIGFkZEhpZ2hsaWdodHNUb09wdGlvbihvcHRpb25zOiBPcHRpb248Tz5bXSk6IFNvdXJjZU9wdGlvbjxPPltdIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwKG9wdGlvbiA9PiAoe1xuICAgICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgICAuLi5oaWdobGlnaHRNYXAuZ2V0KG9wdGlvbi5pZCksXG4gICAgICAgICAgLi4uKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoXG4gICAgICAgICAgICA/IHsgY2hpbGRyZW46IGFkZEhpZ2hsaWdodHNUb09wdGlvbihvcHRpb24uY2hpbGRyZW4pIH1cbiAgICAgICAgICAgIDogbnVsbCksXG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFt7IG9wdGlvbnM6IGFkZEhpZ2hsaWdodHNUb09wdGlvbihvcmRlcmVkKSB9XTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNyZWF0ZU1hbmFnZXIoc291cmNlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc0Z1c2VNYXRjaEV4YWN0KFxuICAgIG1hdGNoOiBGdXNlUmVzdWx0TWF0Y2gsXG4gICAgc2VhcmNoOiBzdHJpbmcsXG4gICk6IChcbiAgICB2YWx1ZTogUmFuZ2VUdXBsZSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGFycmF5OiByZWFkb25seSBSYW5nZVR1cGxlW10sXG4gICkgPT4gYm9vbGVhbiB7XG4gICAgcmV0dXJuIG1hdGNoZWRJbmRpY2VzID0+IHtcbiAgICAgIGNvbnN0IG1hdGNoZWRWYWx1ZSA9IG1hdGNoXG4gICAgICAgIC52YWx1ZSEuc2xpY2UobWF0Y2hlZEluZGljZXNbMF0sIG1hdGNoZWRJbmRpY2VzWzFdICsgMSlcbiAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAvLyBmdXNlIGlzIHdlaXJkIHdpdGggaXQncyBtYXRjaGVzLiBGb3IgYSB0ZXh0IG9mIFwicGxhbm5pbmdcIiBhbmQgYSBzZWFyY2ggc3RyaW5nIG9mIFwicGxhblwiXG4gICAgICAvLyB0aGUgbWF0Y2hlZCB2YWx1ZSB3aWxsIGJlIFwicGxhbm5cIiB3aXRoIHRoZSBleHRyYSAnbicgYmVjYXVzZSBvZiBpdHMgZnV6enkgbWF0Y2hpbmcuXG4gICAgICAvLyBzbyBqdXN0IG1ha2Ugc3VyZSB0aGUgbWF0Y2hlZCB2YWx1ZSBhdCBsZWFzdCBzdGFydHMgd2l0aCB0aGUgc2VhcmNoIHN0cmluZy5cbiAgICAgIC8vIGl0J3MgZXh0cmEgd2VpcmQgYmVjYXVzZSBmb3IgYSB0ZXh0IG9mIFwiYW5hbHl0aWNzXCIgYW5kIGEgc2VhcmNoIHN0cmluZyBvZiBcIm5hbHl0aWNzXCIsXG4gICAgICAvLyB0aGUgbWF0Y2hlZCB2YWx1ZSB3aWxsIGJlIFwiYW5hbHl0aWNzXCIuIFNvIHdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHRoZSBtYXRjaGVkIHZhbHVlXG4gICAgICAvLyBpbmNsdWRlcyB0aGUgc2VhcmNoIHN0cmluZyBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGV4dHJhIHN0dWZmIG9uIHRoZSBmcm9udCBvciB0aGUgZW5kLlxuICAgICAgcmV0dXJuIG1hdGNoZWRWYWx1ZS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSk7XG4gICAgfTtcbiAgfVxuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgLy8gU3RhdGUgcmVkdWNlciAod2l0aCBoZWxwZXJzKSAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgZnVuY3Rpb24gZ2V0RGlzcGxheUxpbWl0TWVzc2FnZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgZGlzcGxheWVkT3B0aW9uQ291bnQ6IG51bWJlcixcbiAgICB0b3RhbE9wdGlvbkNvdW50OiBudW1iZXIsXG4gICAgcXVlcnk6IENvcmVTdGF0ZTxPPlsncXVlcnknXSxcbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKGRpc3BsYXllZE9wdGlvbkNvdW50ID09PSB0b3RhbE9wdGlvbkNvdW50KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCByaXZOdW1iZXIgPSBuZXcgTnVtYmVyUGlwZSgpO1xuICAgIGNvbnN0IGRpc3BsYXllZCA9IHJpdk51bWJlci50cmFuc2Zvcm0oZGlzcGxheWVkT3B0aW9uQ291bnQpO1xuICAgIGNvbnN0IHRvdGFsID0gcml2TnVtYmVyLnRyYW5zZm9ybSh0b3RhbE9wdGlvbkNvdW50KTtcbiAgICBjb25zdCBzdGFydCA9IGBTaG93aW5nICR7ZGlzcGxheWVkfSBvZiAke3RvdGFsfSBvcHRpb25zYDtcbiAgICByZXR1cm4gcXVlcnkuc2VhcmNoID8gYCR7c3RhcnR9IG1hdGNoaW5nIFwiJHtxdWVyeS5zZWFyY2h9XCJgIDogc3RhcnQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb3VudFZpc2libGVPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IEZ1bGxPcHRpb25Hcm91cDxPPltdLFxuICAgIGxlYWZPbmx5OiBib29sZWFuLFxuICApOiBudW1iZXIge1xuICAgIGZ1bmN0aW9uIGNvdW50KG9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSk6IG51bWJlciB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5yZWR1Y2UoKGFjYywgb3B0aW9uKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb24uZXhwYW5kZWQgJiYgb3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gYWNjICsgKGxlYWZPbmx5ID8gMCA6IDEpICsgY291bnQob3B0aW9uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjICsgMTtcbiAgICAgIH0sIDApO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb25Hcm91cHMucmVkdWNlKFxuICAgICAgKHRvdGFsLCBncm91cCkgPT4gdG90YWwgKyBjb3VudChncm91cC5vcHRpb25zKSxcbiAgICAgIDAsXG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvdW50QWxsT3B0aW9uczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSxcbiAgKTogbnVtYmVyIHtcbiAgICBmdW5jdGlvbiBjb3VudChvcHRpb25zOiBGdWxsT3B0aW9uPE8+W10pOiBudW1iZXIge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucmVkdWNlKChhY2MsIG9wdGlvbikgPT4ge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gYWNjICsgMSArIGNvdW50KG9wdGlvbi5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYyArIDE7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZShcbiAgICAgICh0b3RhbCwgZ3JvdXApID0+IHRvdGFsICsgY291bnQoZ3JvdXAub3B0aW9ucyksXG4gICAgICAwLFxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseURpc3BsYXlMaW1pdDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uR3JvdXBzOiBGdWxsT3B0aW9uR3JvdXA8Tz5bXSxcbiAgICBkaXNwbGF5TGltaXQ/OiBudW1iZXIsXG4gICk6IEZ1bGxPcHRpb25Hcm91cDxPPltdIHtcbiAgICBpZiAoZGlzcGxheUxpbWl0ID09PSB1bmRlZmluZWQpIHJldHVybiBvcHRpb25Hcm91cHM7XG5cbiAgICB0eXBlIERpc3BsYXlMaW1pdE9wdGlvbnMgPSBbRnVsbE9wdGlvbjxPPltdLCBudW1iZXJdO1xuICAgIGZ1bmN0aW9uIGZpbHRlcldpdGhMaW1pdChcbiAgICAgIG9wdGlvbnM6IEZ1bGxPcHRpb248Tz5bXSxcbiAgICAgIHJlbWFpbmluZzogbnVtYmVyLFxuICAgICk6IERpc3BsYXlMaW1pdE9wdGlvbnMge1xuICAgICAgbGV0IGxlZnQgPSByZW1haW5pbmc7XG4gICAgICBjb25zdCB2aXNpYmxlT3B0aW9uczogRnVsbE9wdGlvbjxPPltdID0gW107XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgIGlmIChsZWZ0IDw9IDApIGJyZWFrO1xuXG4gICAgICAgIGlmIChvcHRpb24uZXhwYW5kZWQgJiYgb3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBbY2hpbGRPcHRpb25zLCBjaGlsZFJlbWFpbmluZ10gPSBmaWx0ZXJXaXRoTGltaXQoXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRyZW4sXG4gICAgICAgICAgICBsZWZ0IC0gMSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goe1xuICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkT3B0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZWZ0ID0gY2hpbGRSZW1haW5pbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChvcHRpb24pO1xuICAgICAgICAgIGxlZnQtLTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt2aXNpYmxlT3B0aW9ucywgbGVmdF07XG4gICAgfVxuXG4gICAgdHlwZSBEaXNwbGF5TGltaXRHcm91cHMgPSBbRnVsbE9wdGlvbkdyb3VwPE8+W10sIG51bWJlcl07XG4gICAgY29uc3Qgc3RhcnRpbmdWYWx1ZTogRGlzcGxheUxpbWl0R3JvdXBzID0gW1tdLCBkaXNwbGF5TGltaXRdO1xuICAgIGNvbnN0IFtyZXNvbHZlZEdyb3Vwc10gPSBvcHRpb25Hcm91cHMucmVkdWNlPERpc3BsYXlMaW1pdEdyb3Vwcz4oXG4gICAgICAoW2dyb3VwcywgcmVtYWluaW5nXSwgZ3JvdXApID0+IHtcbiAgICAgICAgY29uc3QgW29wdGlvbnMsIGxlZnRBZnRlcl0gPSBmaWx0ZXJXaXRoTGltaXQoZ3JvdXAub3B0aW9ucywgcmVtYWluaW5nKTtcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIFtbLi4uZ3JvdXBzLCB7IC4uLmdyb3VwLCBvcHRpb25zIH1dLCBsZWZ0QWZ0ZXJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBbZ3JvdXBzLCByZW1haW5pbmddO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RhcnRpbmdWYWx1ZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkR3JvdXBzO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmVsYXRpb25zaGlwTWFwczxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uczogT3B0aW9uPE8+W10sXG4gICk6IFtNYXA8T1snaWQnXSwgT1snaWQnXT4sIE1hcDxPWydpZCddLCBPWydpZCddW10+XSB7XG4gICAgY29uc3QgcGFyZW50cyA9IG5ldyBNYXAoKTtcbiAgICBmdW5jdGlvbiBidWlsZFBhcmVudHNNYXAob3B0aW9uczogT3B0aW9uPE8+W10sIHBhcmVudD86IE9wdGlvbjxPPik6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgcGFyZW50cy5zZXQob3B0aW9uLmlkLCBwYXJlbnQuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGJ1aWxkUGFyZW50c01hcChvcHRpb24uY2hpbGRyZW4sIG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYnVpbGRQYXJlbnRzTWFwKG9wdGlvbnMpO1xuXG4gICAgY29uc3QgY2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgZnVuY3Rpb24gYnVpbGRDaGlsZHJlbk1hcChvcHRpb25zOiBPcHRpb248Tz5bXSk6IHZvaWQge1xuICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9uLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGlsZHJlbi5zZXQoXG4gICAgICAgICAgICBvcHRpb24uaWQsXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRyZW4ubWFwKCh7IGlkIH0pID0+IGlkKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJ1aWxkQ2hpbGRyZW5NYXAob3B0aW9uLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBidWlsZENoaWxkcmVuTWFwKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIFtwYXJlbnRzLCBjaGlsZHJlbl07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRUb3BMZXZlbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogRnVsbE9wdGlvbkdyb3VwPE8+W10sXG4gICk6IEZ1bGxPcHRpb248Tz5bXTtcbiAgZnVuY3Rpb24gZ2V0VG9wTGV2ZWxPcHRpb25zPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBvcHRpb25Hcm91cHM6IFNvdXJjZU9wdGlvbkdyb3VwPE8+W10sXG4gICk6IFNvdXJjZU9wdGlvbjxPPltdO1xuICBmdW5jdGlvbiBnZXRUb3BMZXZlbE9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbkdyb3VwczogT3B0aW9uR3JvdXA8Tz5bXSxcbiAgKTogT3B0aW9uPE8+W107XG4gIGZ1bmN0aW9uIGdldFRvcExldmVsT3B0aW9uczxcbiAgICBPIGV4dGVuZHMgQmFzZU9wdGlvbixcbiAgICBHIGV4dGVuZHMgeyBvcHRpb25zOiByZWFkb25seSBUW10gfSxcbiAgICBUID0gRyBleHRlbmRzIEZ1bGxPcHRpb25Hcm91cDxPPlxuICAgICAgPyBGdWxsT3B0aW9uPE8+XG4gICAgICA6IEcgZXh0ZW5kcyBTb3VyY2VPcHRpb25Hcm91cDxPPlxuICAgICAgPyBTb3VyY2VPcHRpb248Tz5cbiAgICAgIDogT3B0aW9uPE8+LFxuICA+KG9wdGlvbkdyb3VwczogR1tdKTogVFtdIHtcbiAgICByZXR1cm4gb3B0aW9uR3JvdXBzLnJlZHVjZTxUW10+KFxuICAgICAgKG9wdGlvbnMsIGdyb3VwKSA9PiBbLi4ub3B0aW9ucywgLi4uZ3JvdXAub3B0aW9uc10sXG4gICAgICBbXSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgY2hpbGRyZW46IEZ1bGxPcHRpb248Tz5bXSxcbiAgKTogTXVsdGlTZWxlY3Rpb25TdGF0ZSB7XG4gICAgaWYgKGNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkID09PSB0cnVlKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+IGNoaWxkLnNlbGVjdGVkID09PSBmYWxzZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xuICB9XG5cbiAgZnVuY3Rpb24gYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBvcHRpb246IFNvdXJjZU9wdGlvbjxPPixcbiAgKTogRnVsbE9wdGlvbjxPPiB7XG4gICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBhdWdtZW50ZWRDaGlsZHJlbiA9IG9wdGlvbi5jaGlsZHJlbi5tYXAoY2hpbGQgPT5cbiAgICAgICAgYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbihzdGF0ZSwgY2hpbGQpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLm9wdGlvbixcbiAgICAgICAgY2hpbGRyZW46IGF1Z21lbnRlZENoaWxkcmVuLFxuICAgICAgICBzZWxlY3RlZDogZ2V0UGFyZW50TXVsdGlTZWxlY3Rpb25TdGF0ZShhdWdtZW50ZWRDaGlsZHJlbiksXG4gICAgICAgIGV4cGFuZGVkOiBzdGF0ZS5xdWVyeS5zZWFyY2hcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IHN0YXRlLmRpc3BsYXkuZXhwYW5kZWRPcHRpb25zLmhhcyhvcHRpb24uaWQpLFxuICAgICAgICBzZWxlY3RhYmxlOiAhc3RhdGUucXVlcnkuc2VhcmNoLFxuICAgICAgICBleHBhbmRhYmxlOiAhc3RhdGUucXVlcnkuc2VhcmNoLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbixcbiAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXG4gICAgICBzZWxlY3RlZDogc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkLmhhcyhvcHRpb24pLFxuICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGb3JtYXR0ZWRPcHRpb25zRm9yRGlzcGxheTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8Tz4sXG4gICk6IHN0cmluZyB7XG4gICAgLy8gSWYgd2UgaGF2ZSBhIGN1c3RvbSBkaXNwbGF5IGZ1bmN0aW9uLCB1c2UgaXRcbiAgICBpZiAob3B0aW9ucz8uZ2V0Q3VzdG9tT3B0aW9uRGlzcGxheSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0Q3VzdG9tT3B0aW9uRGlzcGxheShbLi4uc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkXSk7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBkZWZhdWx0IGRpc3BsYXkgZm9yIG9wdGlvbnMgLSB0aXRsZXMgc2VwYXJhdGVkIGJ5IGNvbW1hcy5cbiAgICByZXR1cm4gWy4uLnN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZF0ubWFwKCh7IHRpdGxlIH0pID0+IHRpdGxlKS5qb2luKCcsICcpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0WmVyb1N0YXRlTWVzc2FnZTxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHN0YXRlLnNvdXJjZU9wdGlvbkdyb3Vwcy5ldmVyeShncm91cCA9PiBncm91cC5vcHRpb25zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIGlmIChzdGF0ZS5xdWVyeS5zZWFyY2gpIHJldHVybiAnTm8gcmVzdWx0cyBmb3VuZC4nO1xuICAgICAgcmV0dXJuICdObyBvcHRpb25zLic7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZE9wdGlvbjxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgb3B0aW9uczogU291cmNlT3B0aW9uPE8+W10sXG4gICAgaWQ6IE9bJ2lkJ10sXG4gICk6IFNvdXJjZU9wdGlvbjxPPiB8IG51bGwge1xuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb24uaWQgPT09IGlkKSByZXR1cm4gb3B0aW9uO1xuICAgICAgaWYgKG9wdGlvbi5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZmluZE9wdGlvbihvcHRpb24uY2hpbGRyZW4sIGlkKTtcbiAgICAgICAgaWYgKGNoaWxkKSByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gZmxhdHRlbk9wdGlvbnM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIG9wdGlvbnM6IE9wdGlvbjxPPltdLFxuICAgIGxlYWZPbmx5OiBib29sZWFuLFxuICApOiBPW10ge1xuICAgIHJldHVybiBmbGF0dGVuRGVlcChcbiAgICAgIG9wdGlvbnMubWFwKG9wdGlvbiA9PiB7XG4gICAgICAgIGlmIChvcHRpb24uY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gb3B0aW9uLmNoaWxkcmVuLm1hcChjaGlsZCA9PlxuICAgICAgICAgICAgZmxhdHRlbk9wdGlvbnMoW2NoaWxkXSwgbGVhZk9ubHkpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGxlYWZPbmx5ID8gZGVzY2VuZGFudHMgOiBbb3B0aW9uLCAuLi5kZXNjZW5kYW50c107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtvcHRpb25dO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlU2VsZWN0ZWQ8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgaWQ6IE9bJ2lkJ10sXG4gICk6IENvcmVTdGF0ZTxPPiB7XG4gICAgY29uc3QgdG9wTGV2ZWxPcHRpb25zID0gZ2V0VG9wTGV2ZWxPcHRpb25zKHN0YXRlLnNvdXJjZU9wdGlvbkdyb3Vwcyk7XG4gICAgY29uc3Qgb3B0aW9uID0gZmluZE9wdGlvbih0b3BMZXZlbE9wdGlvbnMsIGlkKTtcbiAgICBpZiAoIW9wdGlvbikgcmV0dXJuIHN0YXRlO1xuXG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IE9wdGlvblNldChzdGF0ZS5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuXG4gICAgY29uc3QgbmV3VmFsdWUgPSAhKFxuICAgICAgYXVnbWVudE9wdGlvblRvRnVsbE9wdGlvbihzdGF0ZSwgb3B0aW9uKS5zZWxlY3RlZCA9PT0gdHJ1ZVxuICAgICk7XG4gICAgY29uc3QgbGVhdmVzID0gZmxhdHRlbk9wdGlvbnMoW29wdGlvbl0sIHRydWUpO1xuICAgIGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcbiAgICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgICBuZXdTZWxlY3Rpb24uYWRkKGxlYWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U2VsZWN0aW9uLmRlbGV0ZShsZWFmKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGVkT3B0aW9uPE8gZXh0ZW5kcyBCYXNlT3B0aW9uPihcbiAgICBzdGF0ZTogQ29yZVN0YXRlPE8+LFxuICAgIGlkOiBPWydpZCddLFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGNvbnN0IHRvcExldmVsT3B0aW9ucyA9IGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5zb3VyY2VPcHRpb25Hcm91cHMpO1xuICAgIGNvbnN0IG9wdGlvbiA9IGZpbmRPcHRpb24odG9wTGV2ZWxPcHRpb25zLCBpZCk7XG4gICAgaWYgKCFvcHRpb24pIHJldHVybiBzdGF0ZTtcblxuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IG5ldyBPcHRpb25TZXQ8Tz4oKTtcbiAgICBuZXdTZWxlY3Rpb24uYWRkKG9wdGlvbik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgc2VsZWN0ZWQ6IG5ld1NlbGVjdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZVZpc2libGVTZWxlY3RlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuT3B0aW9ucyhcbiAgICAgIGdldFRvcExldmVsT3B0aW9ucyhzdGF0ZS5zb3VyY2VPcHRpb25Hcm91cHMpLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIGNvbnN0IGlzQWxsU2VsZWN0ZWQgPSBsZWF2ZXMuZXZlcnkobGVhZiA9PlxuICAgICAgWy4uLnN0YXRlLnNlbGVjdGlvbi5zZWxlY3RlZF0ubWFwKCh7IGlkIH0pID0+IGlkKS5pbmNsdWRlcyhsZWFmLmlkKSxcbiAgICApO1xuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IG5ldyBPcHRpb25TZXQoc3RhdGUuc2VsZWN0aW9uLnNlbGVjdGVkKTtcblxuICAgIGZvciAoY29uc3QgbGVhZiBvZiBsZWF2ZXMpIHtcbiAgICAgIGlmIChpc0FsbFNlbGVjdGVkKSBuZXdTZWxlY3Rpb24uZGVsZXRlKGxlYWYpO1xuICAgICAgZWxzZSBuZXdTZWxlY3Rpb24uYWRkKGxlYWYpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAuLi5zdGF0ZS5zZWxlY3Rpb24sXG4gICAgICAgIHNlbGVjdGVkOiBuZXdTZWxlY3Rpb24sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVPcHRpb25FeHBhbmRlZDxPIGV4dGVuZHMgQmFzZU9wdGlvbj4oXG4gICAgc3RhdGU6IENvcmVTdGF0ZTxPPixcbiAgICBpZDogT1snaWQnXSxcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICFzdGF0ZS5kaXNwbGF5LmV4cGFuZGVkT3B0aW9ucy5oYXMoaWQpO1xuICAgIGNvbnN0IG5ld0V4cGFuZGVkT3B0aW9ucyA9IG5ldyBTZXQoc3RhdGUuZGlzcGxheS5leHBhbmRlZE9wdGlvbnMpO1xuICAgIGlmIChuZXdWYWx1ZSkgbmV3RXhwYW5kZWRPcHRpb25zLmFkZChpZCk7XG4gICAgZWxzZSBuZXdFeHBhbmRlZE9wdGlvbnMuZGVsZXRlKGlkKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgIGV4cGFuZGVkT3B0aW9uczogbmV3RXhwYW5kZWRPcHRpb25zLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gc2lkZUVmZmVjdHM8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgYWN0aW9uOiBBY3Rpb248Tz4gfCBJbnRlcm5hbEFjdGlvbjxPPixcbiAgICBzb3VyY2U6IFNvdXJjZTxPPixcbiAgICBpbnRlcm5hbEFjdGlvbnM6IFN1YmplY3Q8SW50ZXJuYWxBY3Rpb248Tz4+LFxuICApOiBDb3JlU3RhdGU8Tz4ge1xuICAgIGlmIChcbiAgICAgIGFjdGlvbi50eXBlID09PSAnbG9hZCcgfHxcbiAgICAgIGFjdGlvbi50eXBlID09PSAnc2VhcmNoQ2hhbmdlJyB8fFxuICAgICAgKGFjdGlvbi50eXBlID09PSAnb3BlbkNoYW5nZScgJiYgYWN0aW9uLm9wZW4pXG4gICAgKSB7XG4gICAgICBzb3VyY2Uoc3RhdGUucXVlcnksIGFjdGlvbilcbiAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgaW50ZXJuYWxBY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZENvbXBsZXRlJywgZGF0YSB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICBpbnRlcm5hbEFjdGlvbnMubmV4dCh7IHR5cGU6ICdsb2FkRXJyb3InLCBlcnJvciB9KTtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbG9hZDoge1xuICAgICAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBmdW5jdGlvbiByZWR1Y2U8TyBleHRlbmRzIEJhc2VPcHRpb24+KFxuICAgIHN0YXRlOiBDb3JlU3RhdGU8Tz4sXG4gICAgYWN0aW9uOiBBY3Rpb248Tz4gfCBJbnRlcm5hbEFjdGlvbjxPPixcbiAgKTogQ29yZVN0YXRlPE8+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdsb2FkJzpcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgY2FzZSAnbG9hZENvbXBsZXRlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc291cmNlT3B0aW9uR3JvdXBzOiBhY3Rpb24uZGF0YSxcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2xvYWRFcnJvcic6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgbG9hZDoge1xuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogYWN0aW9uLmVycm9yLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICBjYXNlICdvcGVuQ2hhbmdlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICAgICAgICBvcGVuOiBhY3Rpb24ub3BlbixcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnc2VhcmNoQ2hhbmdlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgY2FzZSAnc2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBzZWxlY3Rpb246IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9nZ2xlT3B0aW9uU2VsZWN0ZWQnOlxuICAgICAgICByZXR1cm4gdG9nZ2xlU2VsZWN0ZWQoc3RhdGUsIGFjdGlvbi5pZCk7XG4gICAgICBjYXNlICdzZXRTZWxlY3RlZE9wdGlvbic6XG4gICAgICAgIHJldHVybiBzZXRTZWxlY3RlZE9wdGlvbihzdGF0ZSwgYWN0aW9uLmlkKTtcbiAgICAgIGNhc2UgJ3Zpc2libGVTZWxlY3RlZENoYW5nZSc6XG4gICAgICAgIHJldHVybiB0b2dnbGVWaXNpYmxlU2VsZWN0ZWQoc3RhdGUpO1xuICAgICAgY2FzZSAndG9nZ2xlT3B0aW9uRXhwYW5kZWQnOlxuICAgICAgICByZXR1cm4gdG9nZ2xlT3B0aW9uRXhwYW5kZWQoc3RhdGUsIGFjdGlvbi5pZCk7XG4gICAgfVxuICB9XG59XG4iXX0=