@rivet-health/design-system 40.6.0 → 40.6.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.
- package/esm2020/lib/accessibility/sr-only/sr-only.component.mjs +4 -4
- package/esm2020/lib/download/download.service.mjs +4 -4
- package/esm2020/lib/format/pipes/date.pipe.mjs +4 -4
- package/esm2020/lib/format/pipes/days.pipe.mjs +4 -4
- package/esm2020/lib/format/pipes/dollars.pipe.mjs +4 -4
- package/esm2020/lib/format/pipes/number.pipe.mjs +4 -4
- package/esm2020/lib/format/pipes/percentage.pipe.mjs +4 -4
- package/esm2020/lib/format/pipes/sentence-case.pipe.mjs +4 -4
- package/esm2020/lib/format/pipes/small-currency.pipe.mjs +4 -4
- package/esm2020/lib/format/svg-text-truncate/svg-text-truncate.directive.mjs +4 -4
- package/esm2020/lib/format/truncate/truncate.component.mjs +4 -4
- package/esm2020/lib/icon/icon.component.mjs +4 -4
- package/esm2020/lib/input/alphabetic-field/alphabetic-field.component.mjs +4 -4
- package/esm2020/lib/input/auto-focus/auto-focus.directive.mjs +4 -4
- package/esm2020/lib/input/button/button.component.mjs +4 -4
- package/esm2020/lib/input/button-group/button-group.component.mjs +4 -4
- package/esm2020/lib/input/calendar/calendar.component.mjs +4 -4
- package/esm2020/lib/input/card-checkbox/card-checkbox.component.mjs +4 -4
- package/esm2020/lib/input/checkbox/checkbox.component.mjs +4 -4
- package/esm2020/lib/input/currency-field/currency-field.component.mjs +4 -4
- package/esm2020/lib/input/date/date.component.mjs +22 -22
- package/esm2020/lib/input/date-range/date-range.component.mjs +4 -4
- package/esm2020/lib/input/input-label/input-label.component.mjs +4 -4
- package/esm2020/lib/input/mentions-input/mentions-input.component.mjs +4 -4
- package/esm2020/lib/input/number-field/number-field.component.mjs +4 -4
- package/esm2020/lib/input/percentage-field/percentage-field.component.mjs +4 -4
- package/esm2020/lib/input/phone-field/phone-field.component.mjs +4 -4
- package/esm2020/lib/input/radio/radio.component.mjs +4 -4
- package/esm2020/lib/input/search/search.component.mjs +4 -4
- package/esm2020/lib/input/search-select/search-select.component.mjs +4 -4
- package/esm2020/lib/input/select/select/select.component.mjs +4 -4
- package/esm2020/lib/input/select/select-node/select-node.component.mjs +4 -4
- package/esm2020/lib/input/select/state.mjs +34 -13
- package/esm2020/lib/input/simple-select/option-group.pipe.mjs +4 -4
- package/esm2020/lib/input/simple-select/simple-select.component.mjs +4 -4
- package/esm2020/lib/input/switch-checkbox/switch-checkbox.component.mjs +4 -4
- package/esm2020/lib/input/text-field/text-field.component.mjs +4 -4
- package/esm2020/lib/input/textarea-field/textarea-field.component.mjs +4 -4
- package/esm2020/lib/input/validation-message/validation-message.component.mjs +4 -4
- package/esm2020/lib/load/loading/loading.component.mjs +4 -4
- package/esm2020/lib/load/loading-cover/loading-cover.component.mjs +4 -4
- package/esm2020/lib/navigation/link/link.component.mjs +4 -4
- package/esm2020/lib/navigation/page-header/page-header.component.mjs +4 -4
- package/esm2020/lib/navigation/tabs/tab/tab.component.mjs +4 -4
- package/esm2020/lib/navigation/tabs/tabs/tabs.component.mjs +4 -4
- package/esm2020/lib/navigation/views/all-views-modal/all-views-modal.component.mjs +4 -4
- package/esm2020/lib/navigation/views/edit-view/edit-view.component.mjs +4 -4
- package/esm2020/lib/navigation/views/permission-picker/permission-picker.component.mjs +4 -4
- package/esm2020/lib/navigation/views/view-menu/view-menu.component.mjs +4 -4
- package/esm2020/lib/navigation/views/views/views.component.mjs +4 -4
- package/esm2020/lib/notification/badge/badge.component.mjs +4 -4
- package/esm2020/lib/notification/banner/banner-action.component.mjs +4 -4
- package/esm2020/lib/notification/banner/banner.component.mjs +4 -4
- package/esm2020/lib/notification/map-indicator/map-indicator.component.mjs +4 -4
- package/esm2020/lib/notification/notification-badge/notification-badge.component.mjs +4 -4
- package/esm2020/lib/overlay/callout/callout.component.mjs +4 -4
- package/esm2020/lib/overlay/callout/help/help.component.mjs +4 -4
- package/esm2020/lib/overlay/callout/lock-scroll.directive.mjs +7 -7
- package/esm2020/lib/overlay/callout/menu/menu-item/menu-item.component.mjs +4 -4
- package/esm2020/lib/overlay/callout/menu/menu.component.mjs +4 -4
- package/esm2020/lib/overlay/callout/tooltip/locked-tooltip.directive.mjs +4 -4
- package/esm2020/lib/overlay/callout/tooltip/tooltip.component.mjs +4 -4
- package/esm2020/lib/overlay/callout/tooltip/tooltip.directive.mjs +4 -4
- package/esm2020/lib/overlay/modal/dialog/dialog.component.mjs +4 -4
- package/esm2020/lib/overlay/modal/modal.component.mjs +4 -4
- package/esm2020/lib/overlay/modal/side-sheet/side-sheet.component.mjs +4 -4
- package/esm2020/lib/overlay/overlay-outlet.component.mjs +4 -4
- package/esm2020/lib/overlay/overlay.directive.mjs +4 -4
- package/esm2020/lib/overlay/overlay.service.mjs +4 -4
- package/esm2020/lib/overlay/toast/toast-action.component.mjs +4 -4
- package/esm2020/lib/overlay/toast/toast.component.mjs +4 -4
- package/esm2020/lib/riv.module.mjs +5 -5
- package/esm2020/lib/size/size.directive.mjs +4 -4
- package/esm2020/lib/table/simple-table/simple-table-cell.component.mjs +4 -4
- package/esm2020/lib/table/simple-table/simple-table-header-cell.component.mjs +4 -4
- package/esm2020/lib/table/simple-table/simple-table-row.component.mjs +4 -4
- package/esm2020/lib/table/simple-table/simple-table.component.mjs +4 -4
- package/esm2020/lib/table/table/table/table.component.mjs +4 -4
- package/esm2020/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.mjs +4 -4
- package/esm2020/lib/table/table/table-column-settings/table-column-settings.component.mjs +4 -4
- package/esm2020/lib/table/table/table-csv-export/table-csv-export.component.mjs +4 -4
- package/esm2020/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.mjs +4 -4
- package/esm2020/lib/table/table/table-search/table-search.component.mjs +4 -4
- package/esm2020/lib/table/table/table-search-columns/table-search-columns.component.mjs +4 -4
- package/esm2020/lib/visibility/visibility.directive.mjs +4 -4
- package/esm2020/lib/visualization/chart/chart.component.mjs +4 -4
- package/esm2020/lib/visualization/data-table/data-table-cell.component.mjs +4 -4
- package/esm2020/lib/visualization/data-table/data-table-header-cell.component.mjs +4 -4
- package/esm2020/lib/visualization/data-table/data-table-row.component.mjs +4 -4
- package/esm2020/lib/visualization/data-table/data-table.component.mjs +4 -4
- package/esm2020/lib/visualization/donut/donut.component.mjs +4 -4
- package/esm2020/lib/visualization/funnel-chart/funnel-chart.component.mjs +4 -4
- package/esm2020/lib/visualization/highlight/highlight.component.mjs +4 -4
- package/esm2020/lib/visualization/issue/issue.component.mjs +4 -4
- package/esm2020/lib/visualization/legend-item/legend-item.component.mjs +4 -4
- package/esm2020/lib/visualization/metric/metric.component.mjs +4 -4
- package/esm2020/lib/visualization/mini-pie/mini-pie.component.mjs +4 -4
- package/esm2020/lib/visualization/progress/progress.component.mjs +4 -4
- package/esm2020/lib/visualization/stacked-column/stacked-column.component.mjs +4 -4
- package/esm2020/lib/visualization/stacked-row/stacked-row.component.mjs +4 -4
- package/esm2020/lib/visualization/time-series/time-series.component.mjs +4 -4
- package/esm2020/lib/visualization/trend/trend.component.mjs +4 -4
- package/esm2020/lib/visualization/zero-state/zero-state.component.mjs +4 -4
- package/fesm2015/rivet-health-design-system.mjs +378 -350
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +361 -340
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/accessibility/sr-only/sr-only.component.d.ts +1 -1
- package/lib/format/svg-text-truncate/svg-text-truncate.directive.d.ts +1 -1
- package/lib/format/truncate/truncate.component.d.ts +1 -1
- package/lib/icon/icon.component.d.ts +1 -1
- package/lib/input/alphabetic-field/alphabetic-field.component.d.ts +1 -1
- package/lib/input/auto-focus/auto-focus.directive.d.ts +1 -1
- package/lib/input/button/button.component.d.ts +1 -1
- package/lib/input/button-group/button-group.component.d.ts +1 -1
- package/lib/input/calendar/calendar.component.d.ts +3 -3
- package/lib/input/card-checkbox/card-checkbox.component.d.ts +1 -1
- package/lib/input/checkbox/checkbox.component.d.ts +1 -1
- package/lib/input/currency-field/currency-field.component.d.ts +1 -1
- package/lib/input/date/date.component.d.ts +1 -1
- package/lib/input/date-range/date-range.component.d.ts +1 -1
- package/lib/input/input-label/input-label.component.d.ts +1 -1
- package/lib/input/mentions-input/mentions-input.component.d.ts +1 -1
- package/lib/input/number-field/number-field.component.d.ts +1 -1
- package/lib/input/percentage-field/percentage-field.component.d.ts +1 -1
- package/lib/input/phone-field/phone-field.component.d.ts +1 -1
- package/lib/input/radio/radio.component.d.ts +1 -1
- package/lib/input/search/search.component.d.ts +1 -1
- package/lib/input/search-select/search-select.component.d.ts +1 -1
- package/lib/input/select/select/select.component.d.ts +1 -1
- package/lib/input/select/select-node/select-node.component.d.ts +1 -1
- package/lib/input/select/state.d.ts +3 -0
- package/lib/input/simple-select/simple-select.component.d.ts +1 -1
- package/lib/input/switch-checkbox/switch-checkbox.component.d.ts +1 -1
- package/lib/input/text-field/text-field.component.d.ts +1 -1
- package/lib/input/textarea-field/textarea-field.component.d.ts +1 -1
- package/lib/input/validation-message/validation-message.component.d.ts +1 -1
- package/lib/load/loading/loading.component.d.ts +1 -1
- package/lib/load/loading-cover/loading-cover.component.d.ts +1 -1
- package/lib/navigation/link/link.component.d.ts +1 -1
- package/lib/navigation/page-header/page-header.component.d.ts +1 -1
- package/lib/navigation/tabs/tab/tab.component.d.ts +1 -1
- package/lib/navigation/tabs/tabs/tabs.component.d.ts +1 -1
- package/lib/navigation/views/all-views-modal/all-views-modal.component.d.ts +1 -1
- package/lib/navigation/views/edit-view/edit-view.component.d.ts +1 -1
- package/lib/navigation/views/permission-picker/permission-picker.component.d.ts +1 -1
- package/lib/navigation/views/view-menu/view-menu.component.d.ts +1 -1
- package/lib/navigation/views/views/views.component.d.ts +1 -1
- package/lib/notification/badge/badge.component.d.ts +1 -1
- package/lib/notification/banner/banner-action.component.d.ts +1 -1
- package/lib/notification/banner/banner.component.d.ts +1 -1
- package/lib/notification/map-indicator/map-indicator.component.d.ts +1 -1
- package/lib/notification/notification-badge/notification-badge.component.d.ts +1 -1
- package/lib/overlay/callout/callout.component.d.ts +1 -1
- package/lib/overlay/callout/callout.helpers.d.ts +4 -4
- package/lib/overlay/callout/help/help.component.d.ts +1 -1
- package/lib/overlay/callout/lock-scroll.directive.d.ts +1 -1
- package/lib/overlay/callout/menu/menu-item/menu-item.component.d.ts +1 -1
- package/lib/overlay/callout/menu/menu.component.d.ts +1 -1
- package/lib/overlay/callout/tooltip/locked-tooltip.directive.d.ts +1 -1
- package/lib/overlay/callout/tooltip/tooltip.component.d.ts +1 -1
- package/lib/overlay/callout/tooltip/tooltip.directive.d.ts +1 -1
- package/lib/overlay/modal/dialog/dialog.component.d.ts +1 -1
- package/lib/overlay/modal/modal.component.d.ts +1 -1
- package/lib/overlay/modal/side-sheet/side-sheet.component.d.ts +1 -1
- package/lib/overlay/overlay-outlet.component.d.ts +2 -2
- package/lib/overlay/overlay.directive.d.ts +1 -1
- package/lib/overlay/overlay.service.d.ts +1 -1
- package/lib/overlay/toast/toast-action.component.d.ts +1 -1
- package/lib/overlay/toast/toast.component.d.ts +1 -1
- package/lib/size/size.directive.d.ts +1 -1
- package/lib/table/simple-table/coordinate-helper.d.ts +3 -3
- package/lib/table/simple-table/simple-table-cell.component.d.ts +1 -1
- package/lib/table/simple-table/simple-table-header-cell.component.d.ts +1 -1
- package/lib/table/simple-table/simple-table-row.component.d.ts +1 -1
- package/lib/table/simple-table/simple-table.component.d.ts +1 -1
- package/lib/table/table/table/table.component.d.ts +2 -2
- package/lib/table/table/table-column-settings/table-column-settings-side-sheet.component.d.ts +3 -3
- package/lib/table/table/table-column-settings/table-column-settings.component.d.ts +2 -2
- package/lib/table/table/table-csv-export/table-csv-export.component.d.ts +1 -1
- package/lib/table/table/table-header-resize-handle/table-header-resize-handle.component.d.ts +1 -1
- package/lib/table/table/table-search/table-search.component.d.ts +1 -1
- package/lib/table/table/table-search-columns/table-search-columns.component.d.ts +2 -2
- package/lib/visibility/visibility.directive.d.ts +1 -1
- package/lib/visualization/chart/chart-scaling.d.ts +16 -16
- package/lib/visualization/chart/chart.component.d.ts +2 -2
- package/lib/visualization/data-table/data-table-cell.component.d.ts +1 -1
- package/lib/visualization/data-table/data-table-header-cell.component.d.ts +1 -1
- package/lib/visualization/data-table/data-table-row.component.d.ts +1 -1
- package/lib/visualization/data-table/data-table.component.d.ts +1 -1
- package/lib/visualization/donut/donut.component.d.ts +1 -1
- package/lib/visualization/funnel-chart/funnel-chart.component.d.ts +1 -1
- package/lib/visualization/highlight/highlight.component.d.ts +1 -1
- package/lib/visualization/intervals.d.ts +2 -2
- package/lib/visualization/issue/issue.component.d.ts +1 -1
- package/lib/visualization/legend-item/legend-item.component.d.ts +1 -1
- package/lib/visualization/metric/metric.component.d.ts +1 -1
- package/lib/visualization/mini-pie/mini-pie.component.d.ts +1 -1
- package/lib/visualization/progress/progress.component.d.ts +1 -1
- package/lib/visualization/stacked-column/stacked-column.component.d.ts +2 -2
- package/lib/visualization/stacked-row/stacked-row.component.d.ts +1 -1
- package/lib/visualization/stacked-row/stacked-row.helpers.d.ts +5 -5
- package/lib/visualization/time-series/time-series.component.d.ts +2 -2
- package/lib/visualization/time-series/time-series.helpers.d.ts +4 -4
- package/lib/visualization/trend/trend.component.d.ts +1 -1
- package/lib/visualization/zero-state/zero-state.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -352,9 +352,9 @@ export class StackedColumnComponent {
|
|
|
352
352
|
this.interval = option.id;
|
|
353
353
|
}
|
|
354
354
|
}
|
|
355
|
-
StackedColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
356
|
-
StackedColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
357
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
355
|
+
StackedColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: StackedColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
356
|
+
StackedColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: StackedColumnComponent, selector: "riv-stacked-column", inputs: { input: "input", valueFormatter: "valueFormatter", interval: "interval" }, outputs: { intervalChanged: "intervalChanged", stackClicked: "stackClicked" }, queries: [{ propertyName: "calloutHeaderTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "controls", first: true, predicate: ["controls"], descendants: true }], ngImport: i0, template: "<div\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let d\"\n [attr.viewBox]=\"d.viewBox\"\n >\n <defs>\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"d.columnWidth\"\n [attr.height]=\"d.columnWidth\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n x1=\"0\"\n [attr.y1]=\"d.columnWidth\"\n [attr.x2]=\"d.columnWidth\"\n y2=\"0\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <g *ngFor=\"let tick of d.xMinorTicks\">\n <rect\n class=\"tick-background\"\n [class.focused]=\"(hoveredBand$ | async)?.dateValue === tick.dateValue\"\n [attr.x]=\"tick.x - 20\"\n [attr.y]=\"d.yScale(0) + 3\"\n width=\"40\"\n height=\"12\"\n rx=\"2\"\n ></rect>\n <text\n class=\"tick-label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"d.yScale(0) + 12\"\n text-anchor=\"middle\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.xMajorTicks\">\n <text\n class=\"tick-label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"d.yScale(0) + 24\"\n text-anchor=\"middle\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <rect\n class=\"tick\"\n x=\"0\"\n [attr.y]=\"d.yScale(tick)\"\n width=\"100%\"\n height=\"1\"\n ></rect>\n <text class=\"tick-label\" x=\"0\" [attr.y]=\"d.yScale(tick)\" dy=\"-4\">\n {{ valueFormatter(tick) }}\n </text>\n </g>\n <g *ngFor=\"let rect of d.rects\">\n <rect\n class=\"column\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"rect.fill\"\n [class.blurred]=\"\n (hoveredBand$ | async) !== null &&\n (hoveredBand$ | async)?.dateValue !== rect.dateValue\n \"\n ></rect>\n <rect\n *ngIf=\"rect.striped\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"url(#stripes)\"\n ></rect>\n </g>\n <ng-container *ngIf=\"getRange$ | async; let getRange\">\n <rect\n *ngFor=\"let rect of d.hoverBands\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"transparent\"\n (mouseenter)=\"\n hoveredBand$.next({ dateValue: rect.dateValue, event: $event })\n \"\n (mouseleave)=\"hoveredBand$.next(null)\"\n (click)=\"\n stackClicked.emit(getRange(rect.dateValue)); hoveredBand$.next(null)\n \"\n ></rect>\n </ng-container>\n </svg>\n</div>\n\n<ng-container *ngIf=\"callout$ | async; let callout\">\n <riv-callout\n *riv-overlay\n [anchor]=\"callout.anchor\"\n [theme]=\"'light'\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [allowedPositions]=\"[\n 'center-right',\n 'center-left',\n 'top-center',\n 'bottom-center'\n ]\"\n >\n <div class=\"callout-content\">\n <ng-container\n [ngTemplateOutlet]=\"calloutHeaderTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: callout }\"\n ></ng-container>\n <div class=\"callout-stack\" *ngFor=\"let stack of callout.content\">\n <div *ngIf=\"stack.title; let title\" class=\"callout-row\">\n <span class=\"series-label\">{{ title }}</span>\n <span>{{ stack.total }}</span>\n </div>\n <div *ngFor=\"let series of stack.series\" class=\"callout-row\">\n <span class=\"series-label\">\n <riv-legend-item\n [colorToken]=\"series.colorToken\"\n [style]=\"series.style\"\n ></riv-legend-item>\n <span>{{ series.label }}</span>\n </span>\n <span>{{ series.formattedValue }}</span>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n\n<ng-template #zeroState>\n <riv-zero-state></riv-zero-state>\n</ng-template>\n\n<ng-template #controls>\n <riv-simple-select\n [optionGroups]=\"intervalOptions$ | async | rivOptionGroup\"\n [orderBy]=\"'source'\"\n [selectedOption]=\"selectedIntervalOption$ | async\"\n (selectedOptionChange)=\"setIntervalOption($event)\"\n ></riv-simple-select>\n</ng-template>\n", styles: [".tick{fill:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.tick-background{transition:fill var(--short-transition);fill:transparent}.tick-background.focused{fill:var(--baloo-10)}.column{transition:opacity var(--short-transition)}.column.blurred{opacity:.4}.callout-content{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-stack{display:flex;flex-direction:column;padding:var(--size-medium) 0;gap:var(--size-medium)}.callout-stack:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}.callout-row{display:flex;gap:var(--size-large);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.LegendItemComponent, selector: "riv-legend-item", inputs: ["label", "colorToken", "style", "visibility", "iconTooltip", "clickable", "showCheckWhenClickable"], outputs: ["itemClick"] }, { kind: "directive", type: i4.OverlayDirective, selector: "[riv-overlay]" }, { kind: "component", type: i5.SimpleSelectComponent, selector: "riv-simple-select", inputs: ["optionGroups", "selectedOption", "size", "disabled", "locked", "filterabilityOptions", "orderBy", "placeholder", "maxHeight", "maxWidth", "minHeight", "minWidth", "dividers", "preferredCalloutPosition", "allowedCalloutPositions"], outputs: ["selectedOptionChange"] }, { kind: "directive", type: i6.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "component", type: i7.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message", "title", "icon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.OptionGroupPipe, name: "rivOptionGroup" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
357
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: StackedColumnComponent, decorators: [{
|
|
358
358
|
type: Component,
|
|
359
359
|
args: [{ selector: 'riv-stacked-column', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let d\"\n [attr.viewBox]=\"d.viewBox\"\n >\n <defs>\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"d.columnWidth\"\n [attr.height]=\"d.columnWidth\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n x1=\"0\"\n [attr.y1]=\"d.columnWidth\"\n [attr.x2]=\"d.columnWidth\"\n y2=\"0\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <g *ngFor=\"let tick of d.xMinorTicks\">\n <rect\n class=\"tick-background\"\n [class.focused]=\"(hoveredBand$ | async)?.dateValue === tick.dateValue\"\n [attr.x]=\"tick.x - 20\"\n [attr.y]=\"d.yScale(0) + 3\"\n width=\"40\"\n height=\"12\"\n rx=\"2\"\n ></rect>\n <text\n class=\"tick-label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"d.yScale(0) + 12\"\n text-anchor=\"middle\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.xMajorTicks\">\n <text\n class=\"tick-label\"\n [attr.x]=\"tick.x\"\n [attr.y]=\"d.yScale(0) + 24\"\n text-anchor=\"middle\"\n >\n {{ tick.label }}\n </text>\n </g>\n <g *ngFor=\"let tick of d.yTicks\">\n <rect\n class=\"tick\"\n x=\"0\"\n [attr.y]=\"d.yScale(tick)\"\n width=\"100%\"\n height=\"1\"\n ></rect>\n <text class=\"tick-label\" x=\"0\" [attr.y]=\"d.yScale(tick)\" dy=\"-4\">\n {{ valueFormatter(tick) }}\n </text>\n </g>\n <g *ngFor=\"let rect of d.rects\">\n <rect\n class=\"column\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"rect.fill\"\n [class.blurred]=\"\n (hoveredBand$ | async) !== null &&\n (hoveredBand$ | async)?.dateValue !== rect.dateValue\n \"\n ></rect>\n <rect\n *ngIf=\"rect.striped\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"url(#stripes)\"\n ></rect>\n </g>\n <ng-container *ngIf=\"getRange$ | async; let getRange\">\n <rect\n *ngFor=\"let rect of d.hoverBands\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"transparent\"\n (mouseenter)=\"\n hoveredBand$.next({ dateValue: rect.dateValue, event: $event })\n \"\n (mouseleave)=\"hoveredBand$.next(null)\"\n (click)=\"\n stackClicked.emit(getRange(rect.dateValue)); hoveredBand$.next(null)\n \"\n ></rect>\n </ng-container>\n </svg>\n</div>\n\n<ng-container *ngIf=\"callout$ | async; let callout\">\n <riv-callout\n *riv-overlay\n [anchor]=\"callout.anchor\"\n [theme]=\"'light'\"\n [isModal]=\"false\"\n [preferredPosition]=\"'center-right'\"\n [allowedPositions]=\"[\n 'center-right',\n 'center-left',\n 'top-center',\n 'bottom-center'\n ]\"\n >\n <div class=\"callout-content\">\n <ng-container\n [ngTemplateOutlet]=\"calloutHeaderTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: callout }\"\n ></ng-container>\n <div class=\"callout-stack\" *ngFor=\"let stack of callout.content\">\n <div *ngIf=\"stack.title; let title\" class=\"callout-row\">\n <span class=\"series-label\">{{ title }}</span>\n <span>{{ stack.total }}</span>\n </div>\n <div *ngFor=\"let series of stack.series\" class=\"callout-row\">\n <span class=\"series-label\">\n <riv-legend-item\n [colorToken]=\"series.colorToken\"\n [style]=\"series.style\"\n ></riv-legend-item>\n <span>{{ series.label }}</span>\n </span>\n <span>{{ series.formattedValue }}</span>\n </div>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n\n<ng-template #zeroState>\n <riv-zero-state></riv-zero-state>\n</ng-template>\n\n<ng-template #controls>\n <riv-simple-select\n [optionGroups]=\"intervalOptions$ | async | rivOptionGroup\"\n [orderBy]=\"'source'\"\n [selectedOption]=\"selectedIntervalOption$ | async\"\n (selectedOptionChange)=\"setIntervalOption($event)\"\n ></riv-simple-select>\n</ng-template>\n", styles: [".tick{fill:var(--gray-20)}.tick-label{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0);fill:var(--type-light-low-contrast)}.tick-background{transition:fill var(--short-transition);fill:transparent}.tick-background.focused{fill:var(--baloo-10)}.column{transition:opacity var(--short-transition)}.column.blurred{opacity:.4}.callout-content{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-stack{display:flex;flex-direction:column;padding:var(--size-medium) 0;gap:var(--size-medium)}.callout-stack:not(:last-child){border-bottom:var(--border-width) solid var(--border-light)}.callout-row{display:flex;gap:var(--size-large);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}\n"] }]
|
|
360
360
|
}], propDecorators: { input: [{
|
|
@@ -374,4 +374,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
374
374
|
type: ViewChild,
|
|
375
375
|
args: ['controls']
|
|
376
376
|
}] } });
|
|
377
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2tlZC1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9zdGFja2VkLWNvbHVtbi9zdGFja2VkLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3N0YWNrZWQtY29sdW1uL3N0YWNrZWQtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsR0FBRyxFQUNILFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLFNBQVMsR0FDVixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBRXRFLE1BQU0sZ0JBQWdCLEdBQWEsT0FBTyxDQUFDO0FBTzNDLDZFQUE2RTtBQUM3RSwyQkFBMkI7QUFDM0IsbUdBQW1HO0FBT25HLE1BQU0sT0FBTyxzQkFBc0I7SUFObkM7UUFPbUIsV0FBTSxHQUFHLElBQUksZUFBZSxDQUMzQyxFQUFFLENBQ0gsQ0FBQztRQVNlLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBUyxHQUFHLENBQUMsQ0FBQztRQVUxQyxXQUFNLEdBQUcsR0FBRyxDQUFDO1FBR3ZCLG1CQUFjLEdBQTBCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWhELGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBVyxnQkFBZ0IsQ0FBQyxDQUFDO1FBYTdFLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUcvQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUF1QyxDQUFDO1FBS3RELGtCQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQVUsQ0FBQztRQUN6QyxxQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpDLGdCQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNWLE1BQU0sVUFBVSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzVDLE1BQU0sc0JBQXNCLEdBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztZQUNsRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLHNCQUFzQixDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQVVlLHNCQUFpQixHQUEyQixhQUFhLENBQUM7WUFDekUsSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLENBQUMsV0FBVztTQUNqQixDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFL0MsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdEUsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLFdBQVcsSUFBSSxVQUFVLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRU8scUJBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FDckQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQ2QsU0FBUyxDQUFDLEdBQUcsQ0FDWCxDQUFDLFFBQVEsRUFBa0IsRUFBRSxDQUFDLENBQUM7WUFDN0IsRUFBRSxFQUFFLFFBQVE7WUFDWixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1NBQ2xDLENBQUMsQ0FDSCxDQUNGLEVBQ0QsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVPLDRCQUF1QixHQUFHLGFBQWEsQ0FBQztZQUMvQyxJQUFJLENBQUMsU0FBUztZQUNkLElBQUksQ0FBQyxnQkFBZ0I7U0FDdEIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQWMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxXQUFXO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUUvQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7b0JBQy9ELFFBQVEsR0FBRyxZQUFZLENBQUM7Z0JBQzFCLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztvQkFDOUQsUUFBUSxHQUFHLFdBQVcsQ0FBQzthQUMxQjtZQUNELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ3RELENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQy9DLENBQUM7UUFFTyxzQkFBaUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUM1RCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUUsTUFBTSxDQUFDLEVBQWUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUNyRSxDQUFDO1FBTU0saUJBQVksR0FBRyxhQUFhLENBQUM7WUFDbkMsSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLElBQUksQ0FBQyxNQUFNO1NBQ1osQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdEMsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxPQUFPLENBQ1IsQ0FBQztZQUVGLE1BQU0sVUFBVSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzVDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ2xFLE1BQU0sc0JBQXNCLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRSxPQUFPLENBQ0wsVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxHQUFHLHNCQUFzQixJQUFJLENBQUMsQ0FDckUsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFdBQVc7Z0JBQUUsT0FBTyxDQUFDLENBQUM7WUFFM0IsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FDL0MsQ0FBQztRQUVPLDBCQUFxQixHQUd6QixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO1lBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFnQixDQUFDO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQWdDLEVBQUU7Z0JBQy9ELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFL0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUEwQyxDQUFDO29CQUNqRSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7d0JBQy9CLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN4RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUVyQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFOzRCQUNwQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ2xDO3dCQUVELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFOzRCQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQzt5QkFDeEI7d0JBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUUsQ0FBQzt3QkFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDakI7b0JBQ0QsT0FBTzt3QkFDTCxHQUFHLE1BQU07d0JBQ1QsSUFBSSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQzs0QkFDeEQsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQzs0QkFDekIsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUM7eUJBQzVCLENBQUMsQ0FBQztxQkFDSixDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU87b0JBQ0wsR0FBRyxLQUFLO29CQUNSLE1BQU0sRUFBRSxNQUFNO2lCQUNmLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU87Z0JBQ0wsTUFBTTtnQkFDTixRQUFRLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtvQkFDekIsT0FBTzt3QkFDTCxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUN2QixPQUFPLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUU7cUJBQzdCLENBQUM7Z0JBQ0osQ0FBQzthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsRUFDRixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO1FBRU8sZ0JBQVcsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUNwRCxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQ3JDLENBQUM7UUFFTyxjQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FDbEQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUN2QyxDQUFDO1FBRU8sZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFFbkIsY0FBUyxHQUFHLGFBQWEsQ0FBQztZQUNqQyxJQUFJLENBQUMsV0FBVztZQUNoQixJQUFJLENBQUMsTUFBTTtZQUNYLElBQUksQ0FBQyxpQkFBaUI7WUFDdEIsSUFBSSxDQUFDLFlBQVk7U0FDbEIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDakQsTUFBTSxPQUFPLEdBQUcsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUVuQixNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkUsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5RCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN2RCxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRCxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQ3BDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFDaEMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDOUQsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQ2pELGNBQWMsRUFDZCxnQkFBZ0IsQ0FDakIsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FDN0IsR0FBRyxvQkFBb0IsSUFBSSxvQkFBb0IsRUFBRSxDQUNsRCxDQUFDO1lBRUYsTUFBTSxXQUFXLEdBQUcsU0FBUyxFQUFFO2lCQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUMvQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFcEMsTUFBTSxZQUFZLEdBQ2hCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTtnQkFDdEIsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7b0JBQzVDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQztZQU1KLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDbkQ7OztrQkFHRTtnQkFDRixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDWixHQUFHLEtBQUs7b0JBQ1IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3RCLEdBQUcsS0FBSzt3QkFDUixNQUFNLEVBQUUsQ0FBQztxQkFDVixDQUFDLENBQUM7aUJBQ0osRUFDRCxFQUFFLENBQ0gsQ0FBQztnQkFFRjs7Ozs7Ozs7Ozs7a0JBV0U7Z0JBQ0YsTUFBTSxZQUFZLEdBQXdDLEtBQUssQ0FDN0QsWUFBWSxFQUNaLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDWCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNwQixDQUFDO2dCQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JBd0JFO2dCQUNGLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFFbEI7cUJBQ0EsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN4QyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtvQkFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDLEtBQUssQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRW5CLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7WUFFSCw2RUFBNkU7WUFDN0UsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLHlCQUF5QjtZQUN6QixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFO2dCQUN0RCxpQkFBaUI7Z0JBQ2pCLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2pELG1CQUFtQjtvQkFDbkIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDdEMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BELENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLFNBQVMsS0FBSyxDQUFDO2dCQUFFLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsV0FBVyxFQUFFO2lCQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7aUJBQ3RCLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBRS9DLE1BQU0sS0FBSyxHQVNMLEVBQUUsQ0FBQztZQUNULHlCQUF5QjtZQUN6QixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDN0QsaUJBQWlCO2dCQUNqQixDQUFDLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFELG1CQUFtQjtvQkFDbkIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN0RCxnREFBZ0Q7d0JBQ2hELE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUUxQyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUM7d0JBQzFCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2xELE1BQU0sQ0FBQyxHQUNMLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDdkMsWUFBWTs0QkFDWixXQUFXLEdBQUcsS0FBSzs0QkFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7d0JBQzlCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7d0JBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQzt3QkFFckQsS0FBSyxDQUFDLElBQUksQ0FBQzs0QkFDVCxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTs0QkFDekIsQ0FBQzs0QkFDRCxDQUFDOzRCQUNELEtBQUs7NEJBQ0wsTUFBTTs0QkFDTixJQUFJOzRCQUNKLE9BQU8sRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTOzRCQUMvQyxXQUFXO3lCQUNaLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3RDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUN6QixLQUFLLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDM0IsQ0FBQyxFQUNDLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2FBQ3hFLENBQUMsQ0FBQyxDQUFDO1lBQ0osTUFBTSxXQUFXLEdBQ2YsUUFBUSxLQUFLLE1BQU07Z0JBQ2pCLENBQUMsQ0FBQyxNQUFNO3FCQUNILEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ3pCLEtBQUssRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDO29CQUMzQixDQUFDLEVBQ0MsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN2QyxXQUFXLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQztpQkFDOUIsQ0FBQyxDQUFDO3FCQUNGLE1BQU0sQ0FDTCxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUMvQztnQkFDTCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRVQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUUvQixNQUFNLGNBQWMsR0FDbEIsaUJBQWlCLENBQUMsTUFBTSxHQUFHLFdBQVc7Z0JBQ3RDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDdkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUN6QixDQUFDLEVBQ0MsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUNoRCxDQUFDLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQztnQkFDcEIsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQzthQUN0QyxDQUFDLENBQUMsQ0FBQztZQUVKLE9BQU87Z0JBQ0wsV0FBVztnQkFDWCxVQUFVO2dCQUNWLEtBQUs7Z0JBQ0wsT0FBTztnQkFDUCxXQUFXO2dCQUNYLFdBQVc7Z0JBQ1gsTUFBTTtnQkFDTixNQUFNO2FBQ1AsQ0FBQztRQUNKLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQy9DLENBQUM7UUFFTyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2hDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNWLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDbEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FDdkQsQ0FDRixFQUNELFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQy9DLENBQUM7UUFFTyxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUdqQyxJQUFJLENBQUMsQ0FBQztRQUVQLGFBQVEsR0FDZixhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDdkQsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsV0FBVztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUU5QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBb0IsTUFBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFFaEUsT0FBTztnQkFDTCxNQUFNO2dCQUNOLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUM5QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQy9DLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSzt3QkFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO3dCQUM3QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7d0JBQ25CLEtBQUssRUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDZCxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxXQUFXLENBQUMsU0FBUyxDQUN2RCxFQUFFLEtBQUssSUFBSSxDQUFDO3FCQUNoQixDQUFDLENBQUMsQ0FBQztvQkFDSixPQUFPO3dCQUNMLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzt3QkFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQ3hCLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FDMUQ7d0JBQ0QsTUFBTSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUNqQyxHQUFHLEtBQUs7NEJBQ1IsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzt5QkFDakQsQ0FBQyxDQUFDO3FCQUNKLENBQUM7Z0JBQ0osQ0FBQyxDQUFDO2FBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxFQUNGLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQy9DLENBQUM7S0FDTDtJQXJlQyxJQUNXLEtBQUssQ0FBQyxDQUFpQztRQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBQ0QsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFHRCxJQUFjLEtBQUssQ0FBQyxDQUFTO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFhRCxJQUNXLFFBQVEsQ0FBQyxDQUFXO1FBQzdCLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBQ0QsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBd0JELGdCQUFnQixDQUFDLFFBQWtCLEVBQUUsT0FBYSxFQUFFLE9BQWE7UUFDL0QsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FDdkIsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFDM0IsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNwRCxDQUFDLE1BQU0sQ0FBQztJQUNYLENBQUM7SUFzREQsaUJBQWlCLENBQUMsTUFBNkI7UUFDN0MsSUFBSSxNQUFNO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7O21IQTNIVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixnUkFpQm5CLFdBQVcsc0pDbEUzQiw2cEpBbUtBOzJGRGxIYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU07OEJBT3BDLEtBQUs7c0JBRGYsS0FBSztnQkFjTixxQkFBcUI7c0JBRHBCLFlBQVk7dUJBQUMsV0FBVztnQkFRbEIsY0FBYztzQkFEcEIsS0FBSztnQkFLSyxRQUFRO3NCQURsQixLQUFLO2dCQVlOLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxZQUFZO3NCQURYLE1BQU07Z0JBSVMsUUFBUTtzQkFEdkIsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5kZXggfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQgeyBzY2FsZUJhbmQsIHNjYWxlTGluZWFyIH0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHsgc3RhY2sgfSBmcm9tICdkMy1zaGFwZSc7XG5pbXBvcnQgeyB1dGNGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgSW50ZXJ2YWwsXG4gIGdldEludGVydmFsVGl0bGUsXG4gIGdldE1ham9ySW50ZXJ2YWwsXG4gIGdldE1ham9ySW50ZXJ2YWxGb3JtYXQsXG4gIGdldE1pbm9ySW50ZXJ2YWxGb3JtYXQsXG4gIGdldFRpbWVJbnRlcnZhbCxcbiAgaW50ZXJ2YWxzLFxufSBmcm9tICcuLi9pbnRlcnZhbHMnO1xuaW1wb3J0IHsgTGVnZW5kSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2xlZ2VuZC1pdGVtL2xlZ2VuZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXREYXRlUmFuZ2UsIHBvaW50UmVkdWNlciB9IGZyb20gJy4vc3RhY2tlZC1jb2x1bW4uaGVscGVycyc7XG5cbmNvbnN0IERFRkFVTFRfSU5URVJWQUw6IEludGVydmFsID0gJ21vbnRoJztcblxudHlwZSBJbnRlcnZhbE9wdGlvbiA9IHtcbiAgaWQ6IEludGVydmFsO1xuICB0aXRsZTogc3RyaW5nO1xufTtcblxuLy8gVE9ETzogb25jZSB3ZSB1cGdyYWRlIHRvIEFuZ3VsYXIgMTYsIHRoaXMgY29tcG9uZW50IGNhbiBiZSBjbGVhbmVkIHVwIHdpdGhcbi8vIHNpZ25hbHMgaW5zdGVhZCBvZiBSeEpTLlxuLy8gaHR0cHM6Ly93d3cubm90aW9uLnNvL3JpdmV0L1Jlc29sdmUtVE9ET3MtYWZ0ZXItQW5ndWxhci11cGdyYWRlLTFmMjY2N2ViMmEzMTgwYjc5ZjZhZDkyYTdlNTc2ZjA4XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtc3RhY2tlZC1jb2x1bW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhY2tlZC1jb2x1bW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdGFja2VkLWNvbHVtbi5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTdGFja2VkQ29sdW1uQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnB1dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0YWNrZWRDb2x1bW5Db21wb25lbnQuU3RhY2tbXT4oXG4gICAgW10sXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW5wdXQodjogU3RhY2tlZENvbHVtbkNvbXBvbmVudC5TdGFja1tdKSB7XG4gICAgdGhpcy5pbnB1dCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlucHV0KCk6IFN0YWNrZWRDb2x1bW5Db21wb25lbnQuU3RhY2tbXSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHdpZHRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPig5NjApO1xuICBwcm90ZWN0ZWQgc2V0IHdpZHRoKHY6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGgkLm5leHQodik7XG4gIH1cblxuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmKVxuICBjYWxsb3V0SGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjx7XG4gICAgJGltcGxpY2l0OiBTdGFja2VkQ29sdW1uQ29tcG9uZW50LkNhbGxvdXRDb250ZXh0O1xuICB9PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IEhFSUdIVCA9IDMwMDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdmFsdWVGb3JtYXR0ZXI6ICh2OiBudW1iZXIpID0+IHN0cmluZyA9IHYgPT4gdi50b1N0cmluZygpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJ2YWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcnZhbD4oREVGQVVMVF9JTlRFUlZBTCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW50ZXJ2YWwodjogSW50ZXJ2YWwpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5pbnRlcnZhbCQuZ2V0VmFsdWUoKSkge1xuICAgICAgdGhpcy5pbnRlcnZhbCQubmV4dCh2KTtcbiAgICAgIHRoaXMuaW50ZXJ2YWxDaGFuZ2VkLmVtaXQodik7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaW50ZXJ2YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJ2YWwkLmdldFZhbHVlKCk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgaW50ZXJ2YWxDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJbnRlcnZhbD4oKTtcblxuICBAT3V0cHV0KClcbiAgc3RhY2tDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTdGFja2VkQ29sdW1uQ29tcG9uZW50LlN0YWNrQ2xpY2tlZD4oKTtcblxuICBAVmlld0NoaWxkKCdjb250cm9scycpXG4gIHB1YmxpYyByZWFkb25seSBjb250cm9scz86IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQ09MVU1OX1dJRFRIUyA9IFs4LCAxNiwgNDAsIDcyXSBhcyBjb25zdDtcbiAgcHJpdmF0ZSByZWFkb25seSBNSU5fQ09MVU1OX1dJRFRIID0gdGhpcy5DT0xVTU5fV0lEVEhTWzBdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4Q29sdW1ucyQgPSB0aGlzLndpZHRoJC5waXBlKFxuICAgIG1hcCh3aWR0aCA9PiB7XG4gICAgICBjb25zdCBpbm5lcldpZHRoID0gd2lkdGggLSB0aGlzLkxFRlRfT0ZGU0VUO1xuICAgICAgY29uc3QgY29sdW1uV2lkdGhXaXRoUGFkZGluZyA9XG4gICAgICAgIHRoaXMuTUlOX0NPTFVNTl9XSURUSCArIHRoaXMuQ09MVU1OX1BBRERJTkcgKiAyO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoaW5uZXJXaWR0aCAvIGNvbHVtbldpZHRoV2l0aFBhZGRpbmcpO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgZ2V0WFN0ZXBzSW5SYW5nZShpbnRlcnZhbDogSW50ZXJ2YWwsIG1pbkRhdGU6IERhdGUsIG1heERhdGU6IERhdGUpIHtcbiAgICBjb25zdCB0aW1lSW50ZXJ2YWwgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgIHJldHVybiB0aW1lSW50ZXJ2YWwucmFuZ2UoXG4gICAgICB0aW1lSW50ZXJ2YWwuZmxvb3IobWluRGF0ZSksXG4gICAgICB0aW1lSW50ZXJ2YWwuZmxvb3IodGltZUludGVydmFsLm9mZnNldChtYXhEYXRlLCAxKSksXG4gICAgKS5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWRJbnRlcnZhbHMkOiBPYnNlcnZhYmxlPEludGVydmFsW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5pbnB1dCQsXG4gICAgdGhpcy5tYXhDb2x1bW5zJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtpbnB1dCwgbWF4Q29sdW1uc10pID0+IHtcbiAgICAgIGNvbnN0IFttaW5EYXRlLCBtYXhEYXRlXSA9IGdldERhdGVSYW5nZShpbnB1dCk7XG5cbiAgICAgIHJldHVybiBpbnRlcnZhbHMuZmlsdGVyKGludGVydmFsID0+IHtcbiAgICAgICAgY29uc3QgeFN0ZXBzQ291bnQgPSB0aGlzLmdldFhTdGVwc0luUmFuZ2UoaW50ZXJ2YWwsIG1pbkRhdGUsIG1heERhdGUpO1xuICAgICAgICByZXR1cm4gaW5wdXQubGVuZ3RoICogeFN0ZXBzQ291bnQgPD0gbWF4Q29sdW1ucztcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaW50ZXJ2YWxPcHRpb25zJCA9IHRoaXMuYWxsb3dlZEludGVydmFscyQucGlwZShcbiAgICBtYXAoaW50ZXJ2YWxzID0+XG4gICAgICBpbnRlcnZhbHMubWFwKFxuICAgICAgICAoaW50ZXJ2YWwpOiBJbnRlcnZhbE9wdGlvbiA9PiAoe1xuICAgICAgICAgIGlkOiBpbnRlcnZhbCxcbiAgICAgICAgICB0aXRsZTogZ2V0SW50ZXJ2YWxUaXRsZShpbnRlcnZhbCksXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRJbnRlcnZhbE9wdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmludGVydmFsJCxcbiAgICB0aGlzLmludGVydmFsT3B0aW9ucyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaW50ZXJ2YWwsIG9wdGlvbnNdKSA9PiB7XG4gICAgICBjb25zdCBhbGxvd2VkSW50ZXJ2YWxzID0gb3B0aW9ucy5tYXAoKHsgaWQgfSkgPT4gaWQgYXMgSW50ZXJ2YWwpO1xuICAgICAgaWYgKCFhbGxvd2VkSW50ZXJ2YWxzLmluY2x1ZGVzKGludGVydmFsKSkge1xuICAgICAgICBjb25zdCBmaXJzdEFsbG93ZWQgPSBhbGxvd2VkSW50ZXJ2YWxzLmF0KDApO1xuICAgICAgICBjb25zdCBsYXN0QWxsb3dlZCA9IGFsbG93ZWRJbnRlcnZhbHMuYXQoLTEpO1xuICAgICAgICBpZiAoIWZpcnN0QWxsb3dlZCB8fCAhbGFzdEFsbG93ZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmIChpbnRlcnZhbHMuaW5kZXhPZihpbnRlcnZhbCkgPCBpbnRlcnZhbHMuaW5kZXhPZihmaXJzdEFsbG93ZWQpKVxuICAgICAgICAgIGludGVydmFsID0gZmlyc3RBbGxvd2VkO1xuICAgICAgICBpZiAoaW50ZXJ2YWxzLmluZGV4T2YoaW50ZXJ2YWwpID4gaW50ZXJ2YWxzLmluZGV4T2YobGFzdEFsbG93ZWQpKVxuICAgICAgICAgIGludGVydmFsID0gbGFzdEFsbG93ZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucy5maW5kKG8gPT4gby5pZCA9PT0gaW50ZXJ2YWwpID8/IG51bGw7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZEludGVydmFsJCA9IHRoaXMuc2VsZWN0ZWRJbnRlcnZhbE9wdGlvbiQucGlwZShcbiAgICBtYXAob3B0aW9uID0+IChvcHRpb24gPyAob3B0aW9uLmlkIGFzIEludGVydmFsKSA6IERFRkFVTFRfSU5URVJWQUwpKSxcbiAgKTtcblxuICBzZXRJbnRlcnZhbE9wdGlvbihvcHRpb246IEludGVydmFsT3B0aW9uIHwgbnVsbCkge1xuICAgIGlmIChvcHRpb24pIHRoaXMuaW50ZXJ2YWwgPSBvcHRpb24uaWQ7XG4gIH1cblxuICBwcml2YXRlIGNvbHVtbldpZHRoJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW5wdXQkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gICAgdGhpcy53aWR0aCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaW5wdXQsIHNlbGVjdGVkSW50ZXJ2YWwsIHdpZHRoXSkgPT4ge1xuICAgICAgY29uc3QgW21pbkRhdGUsIG1heERhdGVdID0gZ2V0RGF0ZVJhbmdlKGlucHV0KTtcbiAgICAgIGNvbnN0IHhTdGVwQ291bnQgPSB0aGlzLmdldFhTdGVwc0luUmFuZ2UoXG4gICAgICAgIHNlbGVjdGVkSW50ZXJ2YWwsXG4gICAgICAgIG1pbkRhdGUsXG4gICAgICAgIG1heERhdGUsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBpbm5lcldpZHRoID0gd2lkdGggLSB0aGlzLkxFRlRfT0ZGU0VUO1xuICAgICAgY29uc3QgYWxsb3dlZENvbHVtbldpZHRocyA9IHRoaXMuQ09MVU1OX1dJRFRIUy5maWx0ZXIoY29sdW1uV2lkdGggPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aFdpdGhQYWRkaW5nID0gY29sdW1uV2lkdGggKyB0aGlzLkNPTFVNTl9QQURESU5HICogMjtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBpbm5lcldpZHRoIC0gaW5wdXQubGVuZ3RoICogeFN0ZXBDb3VudCAqIGNvbHVtbldpZHRoV2l0aFBhZGRpbmcgPj0gMFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGFsbG93ZWRDb2x1bW5XaWR0aHMuYXQoLTEpO1xuICAgICAgaWYgKCFjb2x1bW5XaWR0aCkgcmV0dXJuIDA7XG5cbiAgICAgIHJldHVybiBjb2x1bW5XaWR0aDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGJpbm5lZERhdGFXaXRoUmFuZ2VzJDogT2JzZXJ2YWJsZTx7XG4gICAgc3RhY2tzOiBTdGFja2VkQ29sdW1uQ29tcG9uZW50LlN0YWNrW107XG4gICAgZ2V0UmFuZ2U6IChkYXRlOiBudW1iZXIpID0+IHsgbWluRGF0ZTogRGF0ZTsgbWF4RGF0ZTogRGF0ZSB9O1xuICB9PiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaW5wdXQkLCB0aGlzLnNlbGVjdGVkSW50ZXJ2YWwkXSkucGlwZShcbiAgICBtYXAoKFtpbnB1dCwgaW50ZXJ2YWxdKSA9PiB7XG4gICAgICBjb25zdCByYW5nZU1hcCA9IG5ldyBNYXA8bnVtYmVyLCBEYXRlPigpO1xuICAgICAgY29uc3Qgc3RhY2tzID0gaW5wdXQubWFwKChzdGFjayk6IFN0YWNrZWRDb2x1bW5Db21wb25lbnQuU3RhY2sgPT4ge1xuICAgICAgICBjb25zdCB0aW1lSW50ZXJ2YWwgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpO1xuXG4gICAgICAgIGNvbnN0IHNlcmllcyA9IHN0YWNrLnNlcmllcy5tYXAoc2VyaWVzID0+IHtcbiAgICAgICAgICBjb25zdCBiaW5uZWQgPSBuZXcgTWFwPG51bWJlciwgU3RhY2tlZENvbHVtbkNvbXBvbmVudC5WYWx1ZVtdPigpO1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygc2VyaWVzLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbktleSA9IHRpbWVJbnRlcnZhbC5mbG9vcihwb2ludC5kYXRlKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICBjb25zdCBtYXhEYXRlID0gcmFuZ2VNYXAuZ2V0KGJpbktleSk7XG5cbiAgICAgICAgICAgIGlmICghbWF4RGF0ZSB8fCBtYXhEYXRlIDwgcG9pbnQuZGF0ZSkge1xuICAgICAgICAgICAgICByYW5nZU1hcC5zZXQoYmluS2V5LCBwb2ludC5kYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFiaW5uZWQuaGFzKGJpbktleSkpIHtcbiAgICAgICAgICAgICAgYmlubmVkLnNldChiaW5LZXksIFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IGJpbm5lZC5nZXQoYmluS2V5KSE7XG4gICAgICAgICAgICBiaW4ucHVzaChwb2ludCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zZXJpZXMsXG4gICAgICAgICAgICBkYXRhOiBbLi4uYmlubmVkLmVudHJpZXMoKV0ubWFwKChbZGF0ZVZhbHVlLCBwb2ludHNdKSA9PiAoe1xuICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZShkYXRlVmFsdWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogcG9pbnRSZWR1Y2VyKHBvaW50cyksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhY2ssXG4gICAgICAgICAgc2VyaWVzOiBzZXJpZXMsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YWNrcyxcbiAgICAgICAgZ2V0UmFuZ2U6IChkYXRlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWluRGF0ZTogbmV3IERhdGUoZGF0ZSksXG4gICAgICAgICAgICBtYXhEYXRlOiByYW5nZU1hcC5nZXQoZGF0ZSkhLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgYmlubmVkRGF0YSQgPSB0aGlzLmJpbm5lZERhdGFXaXRoUmFuZ2VzJC5waXBlKFxuICAgIG1hcChiaW5uZWREYXRhID0+IGJpbm5lZERhdGEuc3RhY2tzKSxcbiAgKTtcblxuICByZWFkb25seSBnZXRSYW5nZSQgPSB0aGlzLmJpbm5lZERhdGFXaXRoUmFuZ2VzJC5waXBlKFxuICAgIG1hcChiaW5uZWREYXRhID0+IGJpbm5lZERhdGEuZ2V0UmFuZ2UpLFxuICApO1xuXG4gIHJlYWRvbmx5IExFRlRfT0ZGU0VUID0gNDg7XG4gIHJlYWRvbmx5IENPTFVNTl9QQURESU5HID0gNDtcblxuICByZWFkb25seSBkcmF3RGF0YSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmJpbm5lZERhdGEkLFxuICAgIHRoaXMud2lkdGgkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gICAgdGhpcy5jb2x1bW5XaWR0aCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbYmlubmVkRGF0YSwgd2lkdGgsIGludGVydmFsLCBjb2x1bW5XaWR0aF0pID0+IHtcbiAgICAgIGNvbnN0IHZpZXdCb3ggPSBgMCAwICR7d2lkdGh9ICR7dGhpcy5IRUlHSFR9YDtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAxNjtcblxuICAgICAgY29uc3QgW21pbkRhdGUsIG1heERhdGVdID0gZ2V0RGF0ZVJhbmdlKGJpbm5lZERhdGEpO1xuICAgICAgY29uc3QgaGFzTXVsdGlwbGVZZWFycyA9IG1pbkRhdGUuZ2V0RnVsbFllYXIoKSA8IG1heERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IHhNaW5vckludGVydmFsRm9ybWF0ID0gZ2V0TWlub3JJbnRlcnZhbEZvcm1hdChpbnRlcnZhbCk7XG4gICAgICBjb25zdCBtaW5vckZvcm1hdHRlciA9IHV0Y0Zvcm1hdCh4TWlub3JJbnRlcnZhbEZvcm1hdCk7XG4gICAgICBjb25zdCBtaW5vclRpbWVJbnRlcnZhbCA9IGdldFRpbWVJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBjb25zdCB4U3RlcHMgPSBtaW5vclRpbWVJbnRlcnZhbC5yYW5nZShcbiAgICAgICAgbWlub3JUaW1lSW50ZXJ2YWwuZmxvb3IobWluRGF0ZSksXG4gICAgICAgIG1pbm9yVGltZUludGVydmFsLmZsb29yKG1pbm9yVGltZUludGVydmFsLm9mZnNldChtYXhEYXRlLCAxKSksXG4gICAgICApO1xuICAgICAgY29uc3QgeE1ham9ySW50ZXJ2YWwgPSBnZXRNYWpvckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGNvbnN0IHhNYWpvckludGVydmFsRm9ybWF0ID0gZ2V0TWFqb3JJbnRlcnZhbEZvcm1hdChcbiAgICAgICAgeE1ham9ySW50ZXJ2YWwsXG4gICAgICAgIGhhc011bHRpcGxlWWVhcnMsXG4gICAgICApO1xuICAgICAgY29uc3QgbWFqb3JGb3JtYXR0ZXIgPSB1dGNGb3JtYXQoeE1ham9ySW50ZXJ2YWxGb3JtYXQpO1xuICAgICAgY29uc3QgZnVsbEZvcm1hdHRlciA9IHV0Y0Zvcm1hdChcbiAgICAgICAgYCR7eE1pbm9ySW50ZXJ2YWxGb3JtYXR9ICR7eE1ham9ySW50ZXJ2YWxGb3JtYXR9YCxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHhPdXRlclNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgLmRvbWFpbih4U3RlcHMubWFwKGRhdGUgPT4gZnVsbEZvcm1hdHRlcihkYXRlKSkpXG4gICAgICAgIC5yYW5nZShbdGhpcy5MRUZUX09GRlNFVCwgd2lkdGhdKTtcblxuICAgICAgY29uc3Qgb3V0ZXJQYWRkaW5nID1cbiAgICAgICAgKHhPdXRlclNjYWxlLmJhbmR3aWR0aCgpIC1cbiAgICAgICAgICAodGhpcy5DT0xVTU5fUEFERElORyAqIChiaW5uZWREYXRhLmxlbmd0aCAtIDEpICtcbiAgICAgICAgICAgIGNvbHVtbldpZHRoICogYmlubmVkRGF0YS5sZW5ndGgpKSAvXG4gICAgICAgIDI7XG5cbiAgICAgIHR5cGUgU2VyaWVzUG9pbnQgPSBTdGFja2VkQ29sdW1uQ29tcG9uZW50LlZhbHVlICYge1xuICAgICAgICBzZXJpZXM6IFN0YWNrZWRDb2x1bW5Db21wb25lbnQuU2VyaWVzO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVuZGVySW5mb3JtYXRpb24gPSBiaW5uZWREYXRhLm1hcChzdGFja0RhdGEgPT4ge1xuICAgICAgICAvKlxuICAgICAgICAgIENyZWF0ZSBhbiBhcnJheSB3aXRoIGV2ZXJ5IGRhdGEgcG9pbnQgKyB0aGVpciBhc3NvY2lhdGVkIHNlcmllcy5cbiAgICAgICAgICBpLmUuIE1ha2UgYW4gYmFja2xpbmsgZm9yIGVhY2ggZWxlbWVudCB0byBpdHMgc2VyaWVzLlxuICAgICAgICAqL1xuICAgICAgICBjb25zdCBzdGFja2VkVGFibGUgPSBzdGFja0RhdGEuc2VyaWVzLnJlZHVjZTxTZXJpZXNQb2ludFtdPihcbiAgICAgICAgICAodGFibGUsIHMpID0+IFtcbiAgICAgICAgICAgIC4uLnRhYmxlLFxuICAgICAgICAgICAgLi4ucy5kYXRhLm1hcChwb2ludCA9PiAoe1xuICAgICAgICAgICAgICAuLi5wb2ludCxcbiAgICAgICAgICAgICAgc2VyaWVzOiBzLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgW10sXG4gICAgICAgICk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICBNYXBzIGVhY2ggb2YgdGhlIFNlcmllc1BvaW50cyBiYXNlZCBvbiBsYWJlbC5cbiAgICAgICAgICBUaGVuIG1hcCBlYWNoIG9mIHRob3NlIG1hcHMgdG8gYSBkYXRlLlxuXG4gICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgIElmIHdlIHdlcmUgaW5kZXhpbmcgdGhlIGZvbGxvd2luZyBkYXRhOlxuICAgICAgICAgICAgICAqIEVzdGltYXRlcyBDb21wbGV0ZSAtPiA1IGluIEphbnVhcnksIDcgaW4gRmVicnVhcnlcbiAgICAgICAgICAgICAgKiBFc3RpbWF0ZXMgSW5jb21wbGV0ZSAtPiAzIGluIEphbnVhcnksIDMgaW4gRmVicnVhcnlcbiAgICAgICAgICAgIFdlIHdvdWxkIGdldCBhbiBpbmRleGVkIHRhYmxlIGxpa2UgdGhlIGZvbGxvd2luZywgKG5vdGUgdGhpcyBpcyBwc2V1ZG9jb2RlKTpcbiAgICAgICAgICAgICAgJ0phbnVhcnknOiB7ICdFc3RpbWF0ZXMgQ29tcGxldGUnOiA1LCAnRXN0aW1hdGVzIEluY29tcGxldGUnOiAzIH1cbiAgICAgICAgICAgICAgJ0ZlYnJ1YXJ5JzogeyAnRXN0aW1hdGVzIENvbXBsZXRlJzogNywgJ0VzdGltYXRlcyBJbmNvbXBsZXRlJzogMyB9XG4gICAgICAgICovXG4gICAgICAgIGNvbnN0IGluZGV4ZWRUYWJsZTogTWFwPERhdGUsIE1hcDxzdHJpbmcsIFNlcmllc1BvaW50Pj4gPSBpbmRleChcbiAgICAgICAgICBzdGFja2VkVGFibGUsXG4gICAgICAgICAgZCA9PiBkLmRhdGUsXG4gICAgICAgICAgZCA9PiBkLnNlcmllcy5sYWJlbCxcbiAgICAgICAgKTtcblxuICAgICAgICAvKlxuICAgICAgICAgIFRoZSBvdXRwdXQgb2YgXCJzdGFjaygpXCIgaXMgYW4gYXJyYXkgb2YgYXJyYXlzIG9mIHR1cGxlcy5cbiAgICAgICAgICAgIFRoZSB0dXBsZXMgdW5uZXN0IGFzIFtiYXNlbGluZSwgdG9wbGluZV0uXG4gICAgICAgICAgICBFYWNoIFwia2V5XCIgaW52b2x2ZWQgaW4gdGhlIHN0YWNrIGhhcyBhbiBhcnJheSBvZiB0dXBsZXMgcmVsYXRpbmcgdG8gaXQuXG4gICAgICAgICAgICAgIGkuZS4gWyBEYXRlIDEgVHVwbGUsIERhdGUgMiBUdXBsZSBdXG4gICAgICAgICAgICBBbGwgXCJrZXlcIiBhcnJheXMgYXJlIGNvbnRhaW5lZCBpbiB0aGUgb3V0ZXIgYXJyYXkuXG4gICAgICAgICAgICAgIGkuZS4gWyBLZXkgMSBUdXBsZXMsIEtleSAyIFR1cGxlc11cblxuICAgICAgICAgIFdlIHNlbGVjdCB0aGUga2V5cyB1c2luZyBcIi5rZXlzKClcIi5cbiAgICAgICAgICAgIEZvciBvdXIgcHVycG9zZXMsIHRoZSBrZXlzIGFyZSB0aGUgbGVnZW5kIGVsZW1lbnRzLlxuICAgICAgICAgICAgaS5lLiBJZiB5b3UgaGF2ZSB0d28gYmxvY2tzIG9mIHRoZSBzYW1lIGNvbG9yLCB0aGV5IGhhdmUgdGhlIHNhbWUga2V5LlxuXG4gICAgICAgICAgV2Ugc2VsZWN0IHRoZSBoZWlnaHRzIG9mIHRoZSBibG9ja3MgdXNpbmcgXCIudmFsdWUoKVwiLlxuXG4gICAgICAgICAgV2UgYXJlIGdvaW5nIHRvIHN0YWNrIHRoZSBibG9ja3Mgb24gdG9wIG9mIGVhY2ggb3RoZXIuXG4gICAgICAgICAgICBUaGUgYmFzZWxpbmUgb2YgdGhlIGZpcnN0IGtleSB0dXBsZXMgYXJlIDAuXG4gICAgICAgICAgICBUaGUgYmFzZWxpbmUgb2YgdGhlIHNlY29uZCBrZXkgdHVwbGVzIGFyZSB0aGUgdG9wbGluZSBvZiB0aGUgYXNzb2NpYXRlZCBmaXJzdCBrZXkgdHVwbGUuXG5cbiAgICAgICAgICBFeGFtcGxlOlxuICAgICAgICAgICAgSWYgd2Ugd2VyZSBzdGFja2luZyB0aGUgZm9sbG93aW5nIGRhdGE6XG4gICAgICAgICAgICAgICogRXN0aW1hdGVzIENvbXBsZXRlIC0+IDUgaW4gSmFudWFyeSwgNyBpbiBGZWJydWFyeVxuICAgICAgICAgICAgICAqIEVzdGltYXRlcyBJbmNvbXBsZXRlIC0+IDMgaW4gSmFudWFyeSwgMyBpbiBGZWJydWFyeVxuICAgICAgICAgICAgV2Ugd291bGQgZ2V0IGEgc3RhY2sgb2Y6XG4gICAgICAgICAgICAgIFsgIFsgWzAsNV0sWzAsN10gXSwgWyBbNSw4XSxbNywxMF0gXSAgXVxuICAgICAgICAqL1xuICAgICAgICBjb25zdCBzdGFja2VkID0gc3RhY2s8XG4gICAgICAgICAgdHlwZW9mIGluZGV4ZWRUYWJsZSBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPiA/IFtLLCBWXSA6IG5ldmVyXG4gICAgICAgID4oKVxuICAgICAgICAgIC5rZXlzKHN0YWNrRGF0YS5zZXJpZXMubWFwKHYgPT4gdi5sYWJlbCkpXG4gICAgICAgICAgLnZhbHVlKChbXywgZ3JvdXBdLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBncm91cC5nZXQoa2V5KSEudmFsdWU7XG4gICAgICAgICAgfSkoaW5kZXhlZFRhYmxlKTtcblxuICAgICAgICByZXR1cm4geyBpbmRleGVkVGFibGUsIHN0YWNrZWQgfTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUaGUgZG9tYWluIHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgaGlnaGVzdCB2YWx1ZSBpbiBhbnkgc3RhY2ssIG9uIGFueSBkYXRlLlxuICAgICAgbGV0IGRvbWFpbk1heCA9IDA7XG4gICAgICAvLyBGb3IgZWFjaCB1bmlxdWUgc3RhY2ssXG4gICAgICByZW5kZXJJbmZvcm1hdGlvbi5mb3JFYWNoKCh7IHN0YWNrZWQsIGluZGV4ZWRUYWJsZSB9KSA9PiB7XG4gICAgICAgIC8vIEZvciBlYWNoIGRhdGUsXG4gICAgICAgIFsuLi5pbmRleGVkVGFibGUudmFsdWVzKCldLmZvckVhY2goKHBvaW50TWFwLCBpKSA9PiB7XG4gICAgICAgICAgLy8gRm9yIGVhY2ggc2VyaWVzLFxuICAgICAgICAgIFsuLi5wb2ludE1hcC52YWx1ZXMoKV0uZm9yRWFjaCgoXywgaikgPT4ge1xuICAgICAgICAgICAgZG9tYWluTWF4ID0gTWF0aC5tYXgoZG9tYWluTWF4LCAuLi5zdGFja2VkW2pdW2ldKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChkb21haW5NYXggPT09IDApIGRvbWFpbk1heCA9IDE7XG4gICAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgIC5kb21haW4oWzAsIGRvbWFpbk1heF0pXG4gICAgICAgIC5yYW5nZShbdGhpcy5IRUlHSFQgLSBwYWRkaW5nICogMiwgcGFkZGluZ10pO1xuXG4gICAgICBjb25zdCByZWN0czoge1xuICAgICAgICBkYXRlVmFsdWU6IG51bWJlcjtcbiAgICAgICAgeDogbnVtYmVyO1xuICAgICAgICB5OiBudW1iZXI7XG4gICAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICAgIGhlaWdodDogbnVtYmVyO1xuICAgICAgICBmaWxsOiBzdHJpbmc7XG4gICAgICAgIHN0cmlwZWQ6IGJvb2xlYW47XG4gICAgICAgIHNlcmllc1BvaW50OiBTZXJpZXNQb2ludDtcbiAgICAgIH1bXSA9IFtdO1xuICAgICAgLy8gRm9yIGVhY2ggdW5pcXVlIHN0YWNrLFxuICAgICAgcmVuZGVySW5mb3JtYXRpb24uZm9yRWFjaCgoeyBzdGFja2VkLCBpbmRleGVkVGFibGUgfSwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gRm9yIGVhY2ggZGF0ZSxcbiAgICAgICAgWy4uLmluZGV4ZWRUYWJsZS5lbnRyaWVzKCldLmZvckVhY2goKFtkYXRlLCBwb2ludE1hcF0sIGkpID0+IHtcbiAgICAgICAgICAvLyBGb3IgZWFjaCBzZXJpZXMsXG4gICAgICAgICAgWy4uLnBvaW50TWFwLmVudHJpZXMoKV0uZm9yRWFjaCgoW18sIHNlcmllc1BvaW50XSwgaikgPT4ge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSBib3ggd2UgYXJlIGFib3V0IHRvIGRyYXcuXG4gICAgICAgICAgICBjb25zdCBbYmFzZWxpbmUsIHRvcGxpbmVdID0gc3RhY2tlZFtqXVtpXTtcblxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBjb2x1bW5XaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHlTY2FsZShiYXNlbGluZSkgLSB5U2NhbGUodG9wbGluZSk7XG4gICAgICAgICAgICBjb25zdCB4ID1cbiAgICAgICAgICAgICAgKHhPdXRlclNjYWxlKGZ1bGxGb3JtYXR0ZXIoZGF0ZSkpID8/IDApICtcbiAgICAgICAgICAgICAgb3V0ZXJQYWRkaW5nICtcbiAgICAgICAgICAgICAgY29sdW1uV2lkdGggKiBpbmRleCArXG4gICAgICAgICAgICAgIHRoaXMuQ09MVU1OX1BBRERJTkcgKiBpbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSB5U2NhbGUoYmFzZWxpbmUpIC0gaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgZmlsbCA9IGB2YXIoJHtzZXJpZXNQb2ludC5zZXJpZXMuY29sb3JUb2tlbn0pYDtcblxuICAgICAgICAgICAgcmVjdHMucHVzaCh7XG4gICAgICAgICAgICAgIGRhdGVWYWx1ZTogZGF0ZS52YWx1ZU9mKCksXG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIGZpbGwsXG4gICAgICAgICAgICAgIHN0cmlwZWQ6IHNlcmllc1BvaW50LnNlcmllcy5zdHlsZSA9PT0gJ3N0cmlwZWQnLFxuICAgICAgICAgICAgICBzZXJpZXNQb2ludCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB4TWlub3JUaWNrcyA9IHhTdGVwcy5tYXAoZGF0ZSA9PiAoe1xuICAgICAgICBkYXRlVmFsdWU6IGRhdGUudmFsdWVPZigpLFxuICAgICAgICBsYWJlbDogbWlub3JGb3JtYXR0ZXIoZGF0ZSksXG4gICAgICAgIHg6XG4gICAgICAgICAgKHhPdXRlclNjYWxlKGZ1bGxGb3JtYXR0ZXIoZGF0ZSkpID8/IDApICsgeE91dGVyU2NhbGUuYmFuZHdpZHRoKCkgLyAyLFxuICAgICAgfSkpO1xuICAgICAgY29uc3QgeE1ham9yVGlja3MgPVxuICAgICAgICBpbnRlcnZhbCAhPT0gJ3llYXInXG4gICAgICAgICAgPyB4U3RlcHNcbiAgICAgICAgICAgICAgLm1hcChkYXRlID0+ICh7XG4gICAgICAgICAgICAgICAgZGF0ZVZhbHVlOiBkYXRlLnZhbHVlT2YoKSxcbiAgICAgICAgICAgICAgICBsYWJlbDogbWFqb3JGb3JtYXR0ZXIoZGF0ZSksXG4gICAgICAgICAgICAgICAgeDpcbiAgICAgICAgICAgICAgICAgICh4T3V0ZXJTY2FsZShmdWxsRm9ybWF0dGVyKGRhdGUpKSA/PyAwKSArXG4gICAgICAgICAgICAgICAgICB4T3V0ZXJTY2FsZS5iYW5kd2lkdGgoKSAvIDIsXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICh0aWNrLCBpLCB0aWNrcykgPT5cbiAgICAgICAgICAgICAgICAgIGkgPT09IDAgfHwgdGljay5sYWJlbCAhPT0gdGlja3NbaSAtIDFdLmxhYmVsLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgOiBbXTtcblxuICAgICAgY29uc3QgeVRpY2tzID0geVNjYWxlLnRpY2tzKDUpO1xuXG4gICAgICBjb25zdCBob3ZlckJhbmRXaWR0aCA9XG4gICAgICAgIHJlbmRlckluZm9ybWF0aW9uLmxlbmd0aCAqIGNvbHVtbldpZHRoICtcbiAgICAgICAgKHJlbmRlckluZm9ybWF0aW9uLmxlbmd0aCArIDEpICogdGhpcy5DT0xVTU5fUEFERElORztcbiAgICAgIGNvbnN0IGhvdmVyQmFuZHMgPSB4U3RlcHMubWFwKGRhdGUgPT4gKHtcbiAgICAgICAgZGF0ZVZhbHVlOiBkYXRlLnZhbHVlT2YoKSxcbiAgICAgICAgeDpcbiAgICAgICAgICAoeE91dGVyU2NhbGUoZnVsbEZvcm1hdHRlcihkYXRlKSkgPz8gMCkgK1xuICAgICAgICAgICh4T3V0ZXJTY2FsZS5iYW5kd2lkdGgoKSAtIGhvdmVyQmFuZFdpZHRoKSAvIDIsXG4gICAgICAgIHk6IHlTY2FsZShkb21haW5NYXgpLFxuICAgICAgICB3aWR0aDogaG92ZXJCYW5kV2lkdGgsXG4gICAgICAgIGhlaWdodDogeVNjYWxlKDApIC0geVNjYWxlKGRvbWFpbk1heCksXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbldpZHRoLFxuICAgICAgICBob3ZlckJhbmRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgdmlld0JveCxcbiAgICAgICAgeE1pbm9yVGlja3MsXG4gICAgICAgIHhNYWpvclRpY2tzLFxuICAgICAgICB5U2NhbGUsXG4gICAgICAgIHlUaWNrcyxcbiAgICAgIH07XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBlbXB0eSQgPSB0aGlzLmlucHV0JC5waXBlKFxuICAgIG1hcChpbnB1dCA9PlxuICAgICAgaW5wdXQuZXZlcnkoc3RhY2sgPT5cbiAgICAgICAgc3RhY2suc2VyaWVzLmV2ZXJ5KHNlcmllcyA9PiBzZXJpZXMuZGF0YS5sZW5ndGggPT09IDApLFxuICAgICAgKSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaG92ZXJlZEJhbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgZGF0ZVZhbHVlOiBudW1iZXI7XG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQ7XG4gIH0gfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBjYWxsb3V0JDogT2JzZXJ2YWJsZTxTdGFja2VkQ29sdW1uQ29tcG9uZW50LkNhbGxvdXRDb250ZXh0IHwgbnVsbD4gPVxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuaG92ZXJlZEJhbmQkLCB0aGlzLmJpbm5lZERhdGEkXSkucGlwZShcbiAgICAgIG1hcCgoW2hvdmVyZWRCYW5kLCBiaW5uZWREYXRhXSkgPT4ge1xuICAgICAgICBpZiAoIWhvdmVyZWRCYW5kKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCB7IHRhcmdldCB9ID0gaG92ZXJlZEJhbmQuZXZlbnQ7XG4gICAgICAgIGlmICghdGFyZ2V0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gKDxTVkdSZWN0RWxlbWVudD50YXJnZXQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIGNvbnRlbnQ6IGJpbm5lZERhdGEubWFwKHN0YWNrID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmllc1BvaW50cyA9IHN0YWNrLnNlcmllcy5tYXAoc2VyaWVzID0+ICh7XG4gICAgICAgICAgICAgIGxhYmVsOiBzZXJpZXMubGFiZWwsXG4gICAgICAgICAgICAgIGNvbG9yVG9rZW46IHNlcmllcy5jb2xvclRva2VuLFxuICAgICAgICAgICAgICBzdHlsZTogc2VyaWVzLnN0eWxlLFxuICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICBzZXJpZXMuZGF0YS5maW5kKFxuICAgICAgICAgICAgICAgICAgKHsgZGF0ZSB9KSA9PiBkYXRlLnZhbHVlT2YoKSA9PT0gaG92ZXJlZEJhbmQuZGF0ZVZhbHVlLFxuICAgICAgICAgICAgICAgICk/LnZhbHVlID8/IDAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0aXRsZTogc3RhY2sudGl0bGUsXG4gICAgICAgICAgICAgIHRvdGFsOiB0aGlzLnZhbHVlRm9ybWF0dGVyKFxuICAgICAgICAgICAgICAgIHNlcmllc1BvaW50cy5yZWR1Y2UoKGFjYywgcG9pbnQpID0+IHBvaW50LnZhbHVlICsgYWNjLCAwKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc2VyaWVzOiBzZXJpZXNQb2ludHMubWFwKHBvaW50ID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucG9pbnQsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IHRoaXMudmFsdWVGb3JtYXR0ZXIocG9pbnQudmFsdWUpLFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICAgICk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RhY2tlZENvbHVtbkNvbXBvbmVudCB7XG4gIGV4cG9ydCB0eXBlIFZhbHVlID0ge1xuICAgIGRhdGU6IERhdGU7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTZXJpZXMgPSB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBkYXRhOiBWYWx1ZVtdO1xuICAgIGNvbG9yVG9rZW46IHN0cmluZztcbiAgICBzdHlsZTogTGVnZW5kSXRlbUNvbXBvbmVudC5TdHlsZTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTdGFjayA9IHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBzZXJpZXM6IFNlcmllc1tdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFN0YWNrQ2xpY2tlZCA9IHtcbiAgICBtaW5EYXRlOiBEYXRlO1xuICAgIG1heERhdGU6IERhdGU7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgQ2FsbG91dENvbnRleHQgPSB7XG4gICAgYW5jaG9yOiBET01SZWN0O1xuICAgIGNvbnRlbnQ6IHtcbiAgICAgIHRpdGxlPzogc3RyaW5nO1xuICAgICAgdG90YWw6IHN0cmluZztcbiAgICAgIHNlcmllczoge1xuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICBjb2xvclRva2VuOiBzdHJpbmc7XG4gICAgICAgIHN0eWxlOiBMZWdlbmRJdGVtQ29tcG9uZW50LlN0eWxlO1xuICAgICAgICB2YWx1ZTogbnVtYmVyO1xuICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogc3RyaW5nO1xuICAgICAgfVtdO1xuICAgIH1bXTtcbiAgfTtcbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCIoZW1wdHkkIHwgYXN5bmMpID09PSBmYWxzZTsgZWxzZSB6ZXJvU3RhdGVcIlxuICBjbGFzcz1cImNvbnRhaW5lclwiXG4gIChyaXZDbGllbnRTaXplKT1cIndpZHRoID0gJGV2ZW50LndpZHRoXCJcbj5cbiAgPHN2Z1xuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICpuZ0lmPVwiZHJhd0RhdGEkIHwgYXN5bmM7IGxldCBkXCJcbiAgICBbYXR0ci52aWV3Qm94XT1cImQudmlld0JveFwiXG4gID5cbiAgICA8ZGVmcz5cbiAgICAgIDxwYXR0ZXJuXG4gICAgICAgIGlkPVwic3RyaXBlc1wiXG4gICAgICAgIHg9XCIwXCJcbiAgICAgICAgeT1cIjBcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJkLmNvbHVtbldpZHRoXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImQuY29sdW1uV2lkdGhcIlxuICAgICAgICBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICA+XG4gICAgICAgIDxsaW5lXG4gICAgICAgICAgeDE9XCIwXCJcbiAgICAgICAgICBbYXR0ci55MV09XCJkLmNvbHVtbldpZHRoXCJcbiAgICAgICAgICBbYXR0ci54Ml09XCJkLmNvbHVtbldpZHRoXCJcbiAgICAgICAgICB5Mj1cIjBcIlxuICAgICAgICAgIHN0cm9rZT1cInZhcigtLXdoaXRlLTEwMClcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgICA+PC9saW5lPlxuICAgICAgPC9wYXR0ZXJuPlxuICAgIDwvZGVmcz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnhNaW5vclRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2stYmFja2dyb3VuZFwiXG4gICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cIihob3ZlcmVkQmFuZCQgfCBhc3luYyk/LmRhdGVWYWx1ZSA9PT0gdGljay5kYXRlVmFsdWVcIlxuICAgICAgICBbYXR0ci54XT1cInRpY2sueCAtIDIwXCJcbiAgICAgICAgW2F0dHIueV09XCJkLnlTY2FsZSgwKSArIDNcIlxuICAgICAgICB3aWR0aD1cIjQwXCJcbiAgICAgICAgaGVpZ2h0PVwiMTJcIlxuICAgICAgICByeD1cIjJcIlxuICAgICAgPjwvcmVjdD5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwidGljay1sYWJlbFwiXG4gICAgICAgIFthdHRyLnhdPVwidGljay54XCJcbiAgICAgICAgW2F0dHIueV09XCJkLnlTY2FsZSgwKSArIDEyXCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgPlxuICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueE1ham9yVGlja3NcIj5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwidGljay1sYWJlbFwiXG4gICAgICAgIFthdHRyLnhdPVwidGljay54XCJcbiAgICAgICAgW2F0dHIueV09XCJkLnlTY2FsZSgwKSArIDI0XCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgPlxuICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueVRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2tcIlxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIFthdHRyLnldPVwiZC55U2NhbGUodGljaylcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBoZWlnaHQ9XCIxXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8dGV4dCBjbGFzcz1cInRpY2stbGFiZWxcIiB4PVwiMFwiIFthdHRyLnldPVwiZC55U2NhbGUodGljaylcIiBkeT1cIi00XCI+XG4gICAgICAgIHt7IHZhbHVlRm9ybWF0dGVyKHRpY2spIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCByZWN0IG9mIGQucmVjdHNcIj5cbiAgICAgIDxyZWN0XG4gICAgICAgIGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgW2F0dHIueF09XCJyZWN0LnhcIlxuICAgICAgICBbYXR0ci55XT1cInJlY3QueVwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwicmVjdC5oZWlnaHRcIlxuICAgICAgICBbYXR0ci5maWxsXT1cInJlY3QuZmlsbFwiXG4gICAgICAgIFtjbGFzcy5ibHVycmVkXT1cIlxuICAgICAgICAgIChob3ZlcmVkQmFuZCQgfCBhc3luYykgIT09IG51bGwgJiZcbiAgICAgICAgICAoaG92ZXJlZEJhbmQkIHwgYXN5bmMpPy5kYXRlVmFsdWUgIT09IHJlY3QuZGF0ZVZhbHVlXG4gICAgICAgIFwiXG4gICAgICA+PC9yZWN0PlxuICAgICAgPHJlY3RcbiAgICAgICAgKm5nSWY9XCJyZWN0LnN0cmlwZWRcIlxuICAgICAgICBbYXR0ci54XT1cInJlY3QueFwiXG4gICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwicmVjdC53aWR0aFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJyZWN0LmhlaWdodFwiXG4gICAgICAgIGZpbGw9XCJ1cmwoI3N0cmlwZXMpXCJcbiAgICAgID48L3JlY3Q+XG4gICAgPC9nPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRSYW5nZSQgfCBhc3luYzsgbGV0IGdldFJhbmdlXCI+XG4gICAgICA8cmVjdFxuICAgICAgICAqbmdGb3I9XCJsZXQgcmVjdCBvZiBkLmhvdmVyQmFuZHNcIlxuICAgICAgICBbYXR0ci54XT1cInJlY3QueFwiXG4gICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwicmVjdC53aWR0aFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJyZWN0LmhlaWdodFwiXG4gICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgIGhvdmVyZWRCYW5kJC5uZXh0KHsgZGF0ZVZhbHVlOiByZWN0LmRhdGVWYWx1ZSwgZXZlbnQ6ICRldmVudCB9KVxuICAgICAgICBcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkQmFuZCQubmV4dChudWxsKVwiXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICBzdGFja0NsaWNrZWQuZW1pdChnZXRSYW5nZShyZWN0LmRhdGVWYWx1ZSkpOyBob3ZlcmVkQmFuZCQubmV4dChudWxsKVxuICAgICAgICBcIlxuICAgICAgPjwvcmVjdD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zdmc+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbGxvdXQkIHwgYXN5bmM7IGxldCBjYWxsb3V0XCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtb3ZlcmxheVxuICAgIFthbmNob3JdPVwiY2FsbG91dC5hbmNob3JcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICBbaXNNb2RhbF09XCJmYWxzZVwiXG4gICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIidjZW50ZXItcmlnaHQnXCJcbiAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJbXG4gICAgICAnY2VudGVyLXJpZ2h0JyxcbiAgICAgICdjZW50ZXItbGVmdCcsXG4gICAgICAndG9wLWNlbnRlcicsXG4gICAgICAnYm90dG9tLWNlbnRlcidcbiAgICBdXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LWNvbnRlbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FsbG91dEhlYWRlclRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjYWxsb3V0IH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtc3RhY2tcIiAqbmdGb3I9XCJsZXQgc3RhY2sgb2YgY2FsbG91dC5jb250ZW50XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzdGFjay50aXRsZTsgbGV0IHRpdGxlXCIgY2xhc3M9XCJjYWxsb3V0LXJvd1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+e3sgdGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgc3RhY2sudG90YWwgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzZXJpZXMgb2Ygc3RhY2suc2VyaWVzXCIgY2xhc3M9XCJjYWxsb3V0LXJvd1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+XG4gICAgICAgICAgICA8cml2LWxlZ2VuZC1pdGVtXG4gICAgICAgICAgICAgIFtjb2xvclRva2VuXT1cInNlcmllcy5jb2xvclRva2VuXCJcbiAgICAgICAgICAgICAgW3N0eWxlXT1cInNlcmllcy5zdHlsZVwiXG4gICAgICAgICAgICA+PC9yaXYtbGVnZW5kLWl0ZW0+XG4gICAgICAgICAgICA8c3Bhbj57eyBzZXJpZXMubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPnt7IHNlcmllcy5mb3JtYXR0ZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3plcm9TdGF0ZT5cbiAgPHJpdi16ZXJvLXN0YXRlPjwvcml2LXplcm8tc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRyb2xzPlxuICA8cml2LXNpbXBsZS1zZWxlY3RcbiAgICBbb3B0aW9uR3JvdXBzXT1cImludGVydmFsT3B0aW9ucyQgfCBhc3luYyB8IHJpdk9wdGlvbkdyb3VwXCJcbiAgICBbb3JkZXJCeV09XCInc291cmNlJ1wiXG4gICAgW3NlbGVjdGVkT3B0aW9uXT1cInNlbGVjdGVkSW50ZXJ2YWxPcHRpb24kIHwgYXN5bmNcIlxuICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJzZXRJbnRlcnZhbE9wdGlvbigkZXZlbnQpXCJcbiAgPjwvcml2LXNpbXBsZS1zZWxlY3Q+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
377
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2tlZC1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9zdGFja2VkLWNvbHVtbi9zdGFja2VkLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3N0YWNrZWQtY29sdW1uL3N0YWNrZWQtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsR0FBRyxFQUNILFdBQVcsR0FDWixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLFNBQVMsR0FDVixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBRXRFLE1BQU0sZ0JBQWdCLEdBQWEsT0FBTyxDQUFDO0FBTzNDLDZFQUE2RTtBQUM3RSwyQkFBMkI7QUFDM0IsbUdBQW1HO0FBT25H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Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5kZXggfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQgeyBzY2FsZUJhbmQsIHNjYWxlTGluZWFyIH0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHsgc3RhY2sgfSBmcm9tICdkMy1zaGFwZSc7XG5pbXBvcnQgeyB1dGNGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgSW50ZXJ2YWwsXG4gIGdldEludGVydmFsVGl0bGUsXG4gIGdldE1ham9ySW50ZXJ2YWwsXG4gIGdldE1ham9ySW50ZXJ2YWxGb3JtYXQsXG4gIGdldE1pbm9ySW50ZXJ2YWxGb3JtYXQsXG4gIGdldFRpbWVJbnRlcnZhbCxcbiAgaW50ZXJ2YWxzLFxufSBmcm9tICcuLi9pbnRlcnZhbHMnO1xuaW1wb3J0IHsgTGVnZW5kSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2xlZ2VuZC1pdGVtL2xlZ2VuZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXREYXRlUmFuZ2UsIHBvaW50UmVkdWNlciB9IGZyb20gJy4vc3RhY2tlZC1jb2x1bW4uaGVscGVycyc7XG5cbmNvbnN0IERFRkFVTFRfSU5URVJWQUw6IEludGVydmFsID0gJ21vbnRoJztcblxudHlwZSBJbnRlcnZhbE9wdGlvbiA9IHtcbiAgaWQ6IEludGVydmFsO1xuICB0aXRsZTogc3RyaW5nO1xufTtcblxuLy8gVE9ETzogb25jZSB3ZSB1cGdyYWRlIHRvIEFuZ3VsYXIgMTYsIHRoaXMgY29tcG9uZW50IGNhbiBiZSBjbGVhbmVkIHVwIHdpdGhcbi8vIHNpZ25hbHMgaW5zdGVhZCBvZiBSeEpTLlxuLy8gaHR0cHM6Ly93d3cubm90aW9uLnNvL3JpdmV0L1Jlc29sdmUtVE9ET3MtYWZ0ZXItQW5ndWxhci11cGdyYWRlLTFmMjY2N2ViMmEzMTgwYjc5ZjZhZDkyYTdlNTc2ZjA4XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtc3RhY2tlZC1jb2x1bW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhY2tlZC1jb2x1bW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdGFja2VkLWNvbHVtbi5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTdGFja2VkQ29sdW1uQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnB1dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0YWNrZWRDb2x1bW5Db21wb25lbnQuU3RhY2tbXT4oXG4gICAgW10sXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW5wdXQodjogU3RhY2tlZENvbHVtbkNvbXBvbmVudC5TdGFja1tdKSB7XG4gICAgdGhpcy5pbnB1dCQubmV4dCh2KTtcbiAgfVxuICBwdWJsaWMgZ2V0IGlucHV0KCk6IFN0YWNrZWRDb2x1bW5Db21wb25lbnQuU3RhY2tbXSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXQkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHdpZHRoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPig5NjApO1xuICBwcm90ZWN0ZWQgc2V0IHdpZHRoKHY6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGgkLm5leHQodik7XG4gIH1cblxuICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmKVxuICBjYWxsb3V0SGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjx7XG4gICAgJGltcGxpY2l0OiBTdGFja2VkQ29sdW1uQ29tcG9uZW50LkNhbGxvdXRDb250ZXh0O1xuICB9PjtcblxuICBwcml2YXRlIHJlYWRvbmx5IEhFSUdIVCA9IDMwMDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdmFsdWVGb3JtYXR0ZXI6ICh2OiBudW1iZXIpID0+IHN0cmluZyA9IHYgPT4gdi50b1N0cmluZygpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJ2YWwkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcnZhbD4oREVGQVVMVF9JTlRFUlZBTCk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaW50ZXJ2YWwodjogSW50ZXJ2YWwpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5pbnRlcnZhbCQuZ2V0VmFsdWUoKSkge1xuICAgICAgdGhpcy5pbnRlcnZhbCQubmV4dCh2KTtcbiAgICAgIHRoaXMuaW50ZXJ2YWxDaGFuZ2VkLmVtaXQodik7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgaW50ZXJ2YWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJ2YWwkLmdldFZhbHVlKCk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgaW50ZXJ2YWxDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJbnRlcnZhbD4oKTtcblxuICBAT3V0cHV0KClcbiAgc3RhY2tDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxTdGFja2VkQ29sdW1uQ29tcG9uZW50LlN0YWNrQ2xpY2tlZD4oKTtcblxuICBAVmlld0NoaWxkKCdjb250cm9scycpXG4gIHB1YmxpYyByZWFkb25seSBjb250cm9scz86IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQ09MVU1OX1dJRFRIUyA9IFs4LCAxNiwgNDAsIDcyXSBhcyBjb25zdDtcbiAgcHJpdmF0ZSByZWFkb25seSBNSU5fQ09MVU1OX1dJRFRIID0gdGhpcy5DT0xVTU5fV0lEVEhTWzBdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4Q29sdW1ucyQgPSB0aGlzLndpZHRoJC5waXBlKFxuICAgIG1hcCh3aWR0aCA9PiB7XG4gICAgICBjb25zdCBpbm5lcldpZHRoID0gd2lkdGggLSB0aGlzLkxFRlRfT0ZGU0VUO1xuICAgICAgY29uc3QgY29sdW1uV2lkdGhXaXRoUGFkZGluZyA9XG4gICAgICAgIHRoaXMuTUlOX0NPTFVNTl9XSURUSCArIHRoaXMuQ09MVU1OX1BBRERJTkcgKiAyO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoaW5uZXJXaWR0aCAvIGNvbHVtbldpZHRoV2l0aFBhZGRpbmcpO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgZ2V0WFN0ZXBzSW5SYW5nZShpbnRlcnZhbDogSW50ZXJ2YWwsIG1pbkRhdGU6IERhdGUsIG1heERhdGU6IERhdGUpIHtcbiAgICBjb25zdCB0aW1lSW50ZXJ2YWwgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgIHJldHVybiB0aW1lSW50ZXJ2YWwucmFuZ2UoXG4gICAgICB0aW1lSW50ZXJ2YWwuZmxvb3IobWluRGF0ZSksXG4gICAgICB0aW1lSW50ZXJ2YWwuZmxvb3IodGltZUludGVydmFsLm9mZnNldChtYXhEYXRlLCAxKSksXG4gICAgKS5sZW5ndGg7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93ZWRJbnRlcnZhbHMkOiBPYnNlcnZhYmxlPEludGVydmFsW10+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5pbnB1dCQsXG4gICAgdGhpcy5tYXhDb2x1bW5zJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtpbnB1dCwgbWF4Q29sdW1uc10pID0+IHtcbiAgICAgIGNvbnN0IFttaW5EYXRlLCBtYXhEYXRlXSA9IGdldERhdGVSYW5nZShpbnB1dCk7XG5cbiAgICAgIHJldHVybiBpbnRlcnZhbHMuZmlsdGVyKGludGVydmFsID0+IHtcbiAgICAgICAgY29uc3QgeFN0ZXBzQ291bnQgPSB0aGlzLmdldFhTdGVwc0luUmFuZ2UoaW50ZXJ2YWwsIG1pbkRhdGUsIG1heERhdGUpO1xuICAgICAgICByZXR1cm4gaW5wdXQubGVuZ3RoICogeFN0ZXBzQ291bnQgPD0gbWF4Q29sdW1ucztcbiAgICAgIH0pO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaW50ZXJ2YWxPcHRpb25zJCA9IHRoaXMuYWxsb3dlZEludGVydmFscyQucGlwZShcbiAgICBtYXAoaW50ZXJ2YWxzID0+XG4gICAgICBpbnRlcnZhbHMubWFwKFxuICAgICAgICAoaW50ZXJ2YWwpOiBJbnRlcnZhbE9wdGlvbiA9PiAoe1xuICAgICAgICAgIGlkOiBpbnRlcnZhbCxcbiAgICAgICAgICB0aXRsZTogZ2V0SW50ZXJ2YWxUaXRsZShpbnRlcnZhbCksXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgc2VsZWN0ZWRJbnRlcnZhbE9wdGlvbiQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmludGVydmFsJCxcbiAgICB0aGlzLmludGVydmFsT3B0aW9ucyQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaW50ZXJ2YWwsIG9wdGlvbnNdKSA9PiB7XG4gICAgICBjb25zdCBhbGxvd2VkSW50ZXJ2YWxzID0gb3B0aW9ucy5tYXAoKHsgaWQgfSkgPT4gaWQgYXMgSW50ZXJ2YWwpO1xuICAgICAgaWYgKCFhbGxvd2VkSW50ZXJ2YWxzLmluY2x1ZGVzKGludGVydmFsKSkge1xuICAgICAgICBjb25zdCBmaXJzdEFsbG93ZWQgPSBhbGxvd2VkSW50ZXJ2YWxzLmF0KDApO1xuICAgICAgICBjb25zdCBsYXN0QWxsb3dlZCA9IGFsbG93ZWRJbnRlcnZhbHMuYXQoLTEpO1xuICAgICAgICBpZiAoIWZpcnN0QWxsb3dlZCB8fCAhbGFzdEFsbG93ZWQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIGlmIChpbnRlcnZhbHMuaW5kZXhPZihpbnRlcnZhbCkgPCBpbnRlcnZhbHMuaW5kZXhPZihmaXJzdEFsbG93ZWQpKVxuICAgICAgICAgIGludGVydmFsID0gZmlyc3RBbGxvd2VkO1xuICAgICAgICBpZiAoaW50ZXJ2YWxzLmluZGV4T2YoaW50ZXJ2YWwpID4gaW50ZXJ2YWxzLmluZGV4T2YobGFzdEFsbG93ZWQpKVxuICAgICAgICAgIGludGVydmFsID0gbGFzdEFsbG93ZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucy5maW5kKG8gPT4gby5pZCA9PT0gaW50ZXJ2YWwpID8/IG51bGw7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZEludGVydmFsJCA9IHRoaXMuc2VsZWN0ZWRJbnRlcnZhbE9wdGlvbiQucGlwZShcbiAgICBtYXAob3B0aW9uID0+IChvcHRpb24gPyAob3B0aW9uLmlkIGFzIEludGVydmFsKSA6IERFRkFVTFRfSU5URVJWQUwpKSxcbiAgKTtcblxuICBzZXRJbnRlcnZhbE9wdGlvbihvcHRpb246IEludGVydmFsT3B0aW9uIHwgbnVsbCkge1xuICAgIGlmIChvcHRpb24pIHRoaXMuaW50ZXJ2YWwgPSBvcHRpb24uaWQ7XG4gIH1cblxuICBwcml2YXRlIGNvbHVtbldpZHRoJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuaW5wdXQkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gICAgdGhpcy53aWR0aCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbaW5wdXQsIHNlbGVjdGVkSW50ZXJ2YWwsIHdpZHRoXSkgPT4ge1xuICAgICAgY29uc3QgW21pbkRhdGUsIG1heERhdGVdID0gZ2V0RGF0ZVJhbmdlKGlucHV0KTtcbiAgICAgIGNvbnN0IHhTdGVwQ291bnQgPSB0aGlzLmdldFhTdGVwc0luUmFuZ2UoXG4gICAgICAgIHNlbGVjdGVkSW50ZXJ2YWwsXG4gICAgICAgIG1pbkRhdGUsXG4gICAgICAgIG1heERhdGUsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBpbm5lcldpZHRoID0gd2lkdGggLSB0aGlzLkxFRlRfT0ZGU0VUO1xuICAgICAgY29uc3QgYWxsb3dlZENvbHVtbldpZHRocyA9IHRoaXMuQ09MVU1OX1dJRFRIUy5maWx0ZXIoY29sdW1uV2lkdGggPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aFdpdGhQYWRkaW5nID0gY29sdW1uV2lkdGggKyB0aGlzLkNPTFVNTl9QQURESU5HICogMjtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBpbm5lcldpZHRoIC0gaW5wdXQubGVuZ3RoICogeFN0ZXBDb3VudCAqIGNvbHVtbldpZHRoV2l0aFBhZGRpbmcgPj0gMFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGFsbG93ZWRDb2x1bW5XaWR0aHMuYXQoLTEpO1xuICAgICAgaWYgKCFjb2x1bW5XaWR0aCkgcmV0dXJuIDA7XG5cbiAgICAgIHJldHVybiBjb2x1bW5XaWR0aDtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGJpbm5lZERhdGFXaXRoUmFuZ2VzJDogT2JzZXJ2YWJsZTx7XG4gICAgc3RhY2tzOiBTdGFja2VkQ29sdW1uQ29tcG9uZW50LlN0YWNrW107XG4gICAgZ2V0UmFuZ2U6IChkYXRlOiBudW1iZXIpID0+IHsgbWluRGF0ZTogRGF0ZTsgbWF4RGF0ZTogRGF0ZSB9O1xuICB9PiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaW5wdXQkLCB0aGlzLnNlbGVjdGVkSW50ZXJ2YWwkXSkucGlwZShcbiAgICBtYXAoKFtpbnB1dCwgaW50ZXJ2YWxdKSA9PiB7XG4gICAgICBjb25zdCByYW5nZU1hcCA9IG5ldyBNYXA8bnVtYmVyLCBEYXRlPigpO1xuICAgICAgY29uc3Qgc3RhY2tzID0gaW5wdXQubWFwKChzdGFjayk6IFN0YWNrZWRDb2x1bW5Db21wb25lbnQuU3RhY2sgPT4ge1xuICAgICAgICBjb25zdCB0aW1lSW50ZXJ2YWwgPSBnZXRUaW1lSW50ZXJ2YWwoaW50ZXJ2YWwpO1xuXG4gICAgICAgIGNvbnN0IHNlcmllcyA9IHN0YWNrLnNlcmllcy5tYXAoc2VyaWVzID0+IHtcbiAgICAgICAgICBjb25zdCBiaW5uZWQgPSBuZXcgTWFwPG51bWJlciwgU3RhY2tlZENvbHVtbkNvbXBvbmVudC5WYWx1ZVtdPigpO1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnQgb2Ygc2VyaWVzLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGJpbktleSA9IHRpbWVJbnRlcnZhbC5mbG9vcihwb2ludC5kYXRlKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICBjb25zdCBtYXhEYXRlID0gcmFuZ2VNYXAuZ2V0KGJpbktleSk7XG5cbiAgICAgICAgICAgIGlmICghbWF4RGF0ZSB8fCBtYXhEYXRlIDwgcG9pbnQuZGF0ZSkge1xuICAgICAgICAgICAgICByYW5nZU1hcC5zZXQoYmluS2V5LCBwb2ludC5kYXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFiaW5uZWQuaGFzKGJpbktleSkpIHtcbiAgICAgICAgICAgICAgYmlubmVkLnNldChiaW5LZXksIFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJpbiA9IGJpbm5lZC5nZXQoYmluS2V5KSE7XG4gICAgICAgICAgICBiaW4ucHVzaChwb2ludCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zZXJpZXMsXG4gICAgICAgICAgICBkYXRhOiBbLi4uYmlubmVkLmVudHJpZXMoKV0ubWFwKChbZGF0ZVZhbHVlLCBwb2ludHNdKSA9PiAoe1xuICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZShkYXRlVmFsdWUpLFxuICAgICAgICAgICAgICB2YWx1ZTogcG9pbnRSZWR1Y2VyKHBvaW50cyksXG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RhY2ssXG4gICAgICAgICAgc2VyaWVzOiBzZXJpZXMsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YWNrcyxcbiAgICAgICAgZ2V0UmFuZ2U6IChkYXRlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWluRGF0ZTogbmV3IERhdGUoZGF0ZSksXG4gICAgICAgICAgICBtYXhEYXRlOiByYW5nZU1hcC5nZXQoZGF0ZSkhLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgYmlubmVkRGF0YSQgPSB0aGlzLmJpbm5lZERhdGFXaXRoUmFuZ2VzJC5waXBlKFxuICAgIG1hcChiaW5uZWREYXRhID0+IGJpbm5lZERhdGEuc3RhY2tzKSxcbiAgKTtcblxuICByZWFkb25seSBnZXRSYW5nZSQgPSB0aGlzLmJpbm5lZERhdGFXaXRoUmFuZ2VzJC5waXBlKFxuICAgIG1hcChiaW5uZWREYXRhID0+IGJpbm5lZERhdGEuZ2V0UmFuZ2UpLFxuICApO1xuXG4gIHJlYWRvbmx5IExFRlRfT0ZGU0VUID0gNDg7XG4gIHJlYWRvbmx5IENPTFVNTl9QQURESU5HID0gNDtcblxuICByZWFkb25seSBkcmF3RGF0YSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmJpbm5lZERhdGEkLFxuICAgIHRoaXMud2lkdGgkLFxuICAgIHRoaXMuc2VsZWN0ZWRJbnRlcnZhbCQsXG4gICAgdGhpcy5jb2x1bW5XaWR0aCQsXG4gIF0pLnBpcGUoXG4gICAgbWFwKChbYmlubmVkRGF0YSwgd2lkdGgsIGludGVydmFsLCBjb2x1bW5XaWR0aF0pID0+IHtcbiAgICAgIGNvbnN0IHZpZXdCb3ggPSBgMCAwICR7d2lkdGh9ICR7dGhpcy5IRUlHSFR9YDtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAxNjtcblxuICAgICAgY29uc3QgW21pbkRhdGUsIG1heERhdGVdID0gZ2V0RGF0ZVJhbmdlKGJpbm5lZERhdGEpO1xuICAgICAgY29uc3QgaGFzTXVsdGlwbGVZZWFycyA9IG1pbkRhdGUuZ2V0RnVsbFllYXIoKSA8IG1heERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIGNvbnN0IHhNaW5vckludGVydmFsRm9ybWF0ID0gZ2V0TWlub3JJbnRlcnZhbEZvcm1hdChpbnRlcnZhbCk7XG4gICAgICBjb25zdCBtaW5vckZvcm1hdHRlciA9IHV0Y0Zvcm1hdCh4TWlub3JJbnRlcnZhbEZvcm1hdCk7XG4gICAgICBjb25zdCBtaW5vclRpbWVJbnRlcnZhbCA9IGdldFRpbWVJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICBjb25zdCB4U3RlcHMgPSBtaW5vclRpbWVJbnRlcnZhbC5yYW5nZShcbiAgICAgICAgbWlub3JUaW1lSW50ZXJ2YWwuZmxvb3IobWluRGF0ZSksXG4gICAgICAgIG1pbm9yVGltZUludGVydmFsLmZsb29yKG1pbm9yVGltZUludGVydmFsLm9mZnNldChtYXhEYXRlLCAxKSksXG4gICAgICApO1xuICAgICAgY29uc3QgeE1ham9ySW50ZXJ2YWwgPSBnZXRNYWpvckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGNvbnN0IHhNYWpvckludGVydmFsRm9ybWF0ID0gZ2V0TWFqb3JJbnRlcnZhbEZvcm1hdChcbiAgICAgICAgeE1ham9ySW50ZXJ2YWwsXG4gICAgICAgIGhhc011bHRpcGxlWWVhcnMsXG4gICAgICApO1xuICAgICAgY29uc3QgbWFqb3JGb3JtYXR0ZXIgPSB1dGNGb3JtYXQoeE1ham9ySW50ZXJ2YWxGb3JtYXQpO1xuICAgICAgY29uc3QgZnVsbEZvcm1hdHRlciA9IHV0Y0Zvcm1hdChcbiAgICAgICAgYCR7eE1pbm9ySW50ZXJ2YWxGb3JtYXR9ICR7eE1ham9ySW50ZXJ2YWxGb3JtYXR9YCxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHhPdXRlclNjYWxlID0gc2NhbGVCYW5kKClcbiAgICAgICAgLmRvbWFpbih4U3RlcHMubWFwKGRhdGUgPT4gZnVsbEZvcm1hdHRlcihkYXRlKSkpXG4gICAgICAgIC5yYW5nZShbdGhpcy5MRUZUX09GRlNFVCwgd2lkdGhdKTtcblxuICAgICAgY29uc3Qgb3V0ZXJQYWRkaW5nID1cbiAgICAgICAgKHhPdXRlclNjYWxlLmJhbmR3aWR0aCgpIC1cbiAgICAgICAgICAodGhpcy5DT0xVTU5fUEFERElORyAqIChiaW5uZWREYXRhLmxlbmd0aCAtIDEpICtcbiAgICAgICAgICAgIGNvbHVtbldpZHRoICogYmlubmVkRGF0YS5sZW5ndGgpKSAvXG4gICAgICAgIDI7XG5cbiAgICAgIHR5cGUgU2VyaWVzUG9pbnQgPSBTdGFja2VkQ29sdW1uQ29tcG9uZW50LlZhbHVlICYge1xuICAgICAgICBzZXJpZXM6IFN0YWNrZWRDb2x1bW5Db21wb25lbnQuU2VyaWVzO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVuZGVySW5mb3JtYXRpb24gPSBiaW5uZWREYXRhLm1hcChzdGFja0RhdGEgPT4ge1xuICAgICAgICAvKlxuICAgICAgICAgIENyZWF0ZSBhbiBhcnJheSB3aXRoIGV2ZXJ5IGRhdGEgcG9pbnQgKyB0aGVpciBhc3NvY2lhdGVkIHNlcmllcy5cbiAgICAgICAgICBpLmUuIE1ha2UgYW4gYmFja2xpbmsgZm9yIGVhY2ggZWxlbWVudCB0byBpdHMgc2VyaWVzLlxuICAgICAgICAqL1xuICAgICAgICBjb25zdCBzdGFja2VkVGFibGUgPSBzdGFja0RhdGEuc2VyaWVzLnJlZHVjZTxTZXJpZXNQb2ludFtdPihcbiAgICAgICAgICAodGFibGUsIHMpID0+IFtcbiAgICAgICAgICAgIC4uLnRhYmxlLFxuICAgICAgICAgICAgLi4ucy5kYXRhLm1hcChwb2ludCA9PiAoe1xuICAgICAgICAgICAgICAuLi5wb2ludCxcbiAgICAgICAgICAgICAgc2VyaWVzOiBzLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgW10sXG4gICAgICAgICk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICBNYXBzIGVhY2ggb2YgdGhlIFNlcmllc1BvaW50cyBiYXNlZCBvbiBsYWJlbC5cbiAgICAgICAgICBUaGVuIG1hcCBlYWNoIG9mIHRob3NlIG1hcHMgdG8gYSBkYXRlLlxuXG4gICAgICAgICAgRXhhbXBsZTpcbiAgICAgICAgICAgIElmIHdlIHdlcmUgaW5kZXhpbmcgdGhlIGZvbGxvd2luZyBkYXRhOlxuICAgICAgICAgICAgICAqIEVzdGltYXRlcyBDb21wbGV0ZSAtPiA1IGluIEphbnVhcnksIDcgaW4gRmVicnVhcnlcbiAgICAgICAgICAgICAgKiBFc3RpbWF0ZXMgSW5jb21wbGV0ZSAtPiAzIGluIEphbnVhcnksIDMgaW4gRmVicnVhcnlcbiAgICAgICAgICAgIFdlIHdvdWxkIGdldCBhbiBpbmRleGVkIHRhYmxlIGxpa2UgdGhlIGZvbGxvd2luZywgKG5vdGUgdGhpcyBpcyBwc2V1ZG9jb2RlKTpcbiAgICAgICAgICAgICAgJ0phbnVhcnknOiB7ICdFc3RpbWF0ZXMgQ29tcGxldGUnOiA1LCAnRXN0aW1hdGVzIEluY29tcGxldGUnOiAzIH1cbiAgICAgICAgICAgICAgJ0ZlYnJ1YXJ5JzogeyAnRXN0aW1hdGVzIENvbXBsZXRlJzogNywgJ0VzdGltYXRlcyBJbmNvbXBsZXRlJzogMyB9XG4gICAgICAgICovXG4gICAgICAgIGNvbnN0IGluZGV4ZWRUYWJsZTogTWFwPERhdGUsIE1hcDxzdHJpbmcsIFNlcmllc1BvaW50Pj4gPSBpbmRleChcbiAgICAgICAgICBzdGFja2VkVGFibGUsXG4gICAgICAgICAgZCA9PiBkLmRhdGUsXG4gICAgICAgICAgZCA9PiBkLnNlcmllcy5sYWJlbCxcbiAgICAgICAgKTtcblxuICAgICAgICAvKlxuICAgICAgICAgIFRoZSBvdXRwdXQgb2YgXCJzdGFjaygpXCIgaXMgYW4gYXJyYXkgb2YgYXJyYXlzIG9mIHR1cGxlcy5cbiAgICAgICAgICAgIFRoZSB0dXBsZXMgdW5uZXN0IGFzIFtiYXNlbGluZSwgdG9wbGluZV0uXG4gICAgICAgICAgICBFYWNoIFwia2V5XCIgaW52b2x2ZWQgaW4gdGhlIHN0YWNrIGhhcyBhbiBhcnJheSBvZiB0dXBsZXMgcmVsYXRpbmcgdG8gaXQuXG4gICAgICAgICAgICAgIGkuZS4gWyBEYXRlIDEgVHVwbGUsIERhdGUgMiBUdXBsZSBdXG4gICAgICAgICAgICBBbGwgXCJrZXlcIiBhcnJheXMgYXJlIGNvbnRhaW5lZCBpbiB0aGUgb3V0ZXIgYXJyYXkuXG4gICAgICAgICAgICAgIGkuZS4gWyBLZXkgMSBUdXBsZXMsIEtleSAyIFR1cGxlc11cblxuICAgICAgICAgIFdlIHNlbGVjdCB0aGUga2V5cyB1c2luZyBcIi5rZXlzKClcIi5cbiAgICAgICAgICAgIEZvciBvdXIgcHVycG9zZXMsIHRoZSBrZXlzIGFyZSB0aGUgbGVnZW5kIGVsZW1lbnRzLlxuICAgICAgICAgICAgaS5lLiBJZiB5b3UgaGF2ZSB0d28gYmxvY2tzIG9mIHRoZSBzYW1lIGNvbG9yLCB0aGV5IGhhdmUgdGhlIHNhbWUga2V5LlxuXG4gICAgICAgICAgV2Ugc2VsZWN0IHRoZSBoZWlnaHRzIG9mIHRoZSBibG9ja3MgdXNpbmcgXCIudmFsdWUoKVwiLlxuXG4gICAgICAgICAgV2UgYXJlIGdvaW5nIHRvIHN0YWNrIHRoZSBibG9ja3Mgb24gdG9wIG9mIGVhY2ggb3RoZXIuXG4gICAgICAgICAgICBUaGUgYmFzZWxpbmUgb2YgdGhlIGZpcnN0IGtleSB0dXBsZXMgYXJlIDAuXG4gICAgICAgICAgICBUaGUgYmFzZWxpbmUgb2YgdGhlIHNlY29uZCBrZXkgdHVwbGVzIGFyZSB0aGUgdG9wbGluZSBvZiB0aGUgYXNzb2NpYXRlZCBmaXJzdCBrZXkgdHVwbGUuXG5cbiAgICAgICAgICBFeGFtcGxlOlxuICAgICAgICAgICAgSWYgd2Ugd2VyZSBzdGFja2luZyB0aGUgZm9sbG93aW5nIGRhdGE6XG4gICAgICAgICAgICAgICogRXN0aW1hdGVzIENvbXBsZXRlIC0+IDUgaW4gSmFudWFyeSwgNyBpbiBGZWJydWFyeVxuICAgICAgICAgICAgICAqIEVzdGltYXRlcyBJbmNvbXBsZXRlIC0+IDMgaW4gSmFudWFyeSwgMyBpbiBGZWJydWFyeVxuICAgICAgICAgICAgV2Ugd291bGQgZ2V0IGEgc3RhY2sgb2Y6XG4gICAgICAgICAgICAgIFsgIFsgWzAsNV0sWzAsN10gXSwgWyBbNSw4XSxbNywxMF0gXSAgXVxuICAgICAgICAqL1xuICAgICAgICBjb25zdCBzdGFja2VkID0gc3RhY2s8XG4gICAgICAgICAgdHlwZW9mIGluZGV4ZWRUYWJsZSBleHRlbmRzIE1hcDxpbmZlciBLLCBpbmZlciBWPiA/IFtLLCBWXSA6IG5ldmVyXG4gICAgICAgID4oKVxuICAgICAgICAgIC5rZXlzKHN0YWNrRGF0YS5zZXJpZXMubWFwKHYgPT4gdi5sYWJlbCkpXG4gICAgICAgICAgLnZhbHVlKChbXywgZ3JvdXBdLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBncm91cC5nZXQoa2V5KSEudmFsdWU7XG4gICAgICAgICAgfSkoaW5kZXhlZFRhYmxlKTtcblxuICAgICAgICByZXR1cm4geyBpbmRleGVkVGFibGUsIHN0YWNrZWQgfTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUaGUgZG9tYWluIHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgaGlnaGVzdCB2YWx1ZSBpbiBhbnkgc3RhY2ssIG9uIGFueSBkYXRlLlxuICAgICAgbGV0IGRvbWFpbk1heCA9IDA7XG4gICAgICAvLyBGb3IgZWFjaCB1bmlxdWUgc3RhY2ssXG4gICAgICByZW5kZXJJbmZvcm1hdGlvbi5mb3JFYWNoKCh7IHN0YWNrZWQsIGluZGV4ZWRUYWJsZSB9KSA9PiB7XG4gICAgICAgIC8vIEZvciBlYWNoIGRhdGUsXG4gICAgICAgIFsuLi5pbmRleGVkVGFibGUudmFsdWVzKCldLmZvckVhY2goKHBvaW50TWFwLCBpKSA9PiB7XG4gICAgICAgICAgLy8gRm9yIGVhY2ggc2VyaWVzLFxuICAgICAgICAgIFsuLi5wb2ludE1hcC52YWx1ZXMoKV0uZm9yRWFjaCgoXywgaikgPT4ge1xuICAgICAgICAgICAgZG9tYWluTWF4ID0gTWF0aC5tYXgoZG9tYWluTWF4LCAuLi5zdGFja2VkW2pdW2ldKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGlmIChkb21haW5NYXggPT09IDApIGRvbWFpbk1heCA9IDE7XG4gICAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcigpXG4gICAgICAgIC5kb21haW4oWzAsIGRvbWFpbk1heF0pXG4gICAgICAgIC5yYW5nZShbdGhpcy5IRUlHSFQgLSBwYWRkaW5nICogMiwgcGFkZGluZ10pO1xuXG4gICAgICBjb25zdCByZWN0czoge1xuICAgICAgICBkYXRlVmFsdWU6IG51bWJlcjtcbiAgICAgICAgeDogbnVtYmVyO1xuICAgICAgICB5OiBudW1iZXI7XG4gICAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICAgIGhlaWdodDogbnVtYmVyO1xuICAgICAgICBmaWxsOiBzdHJpbmc7XG4gICAgICAgIHN0cmlwZWQ6IGJvb2xlYW47XG4gICAgICAgIHNlcmllc1BvaW50OiBTZXJpZXNQb2ludDtcbiAgICAgIH1bXSA9IFtdO1xuICAgICAgLy8gRm9yIGVhY2ggdW5pcXVlIHN0YWNrLFxuICAgICAgcmVuZGVySW5mb3JtYXRpb24uZm9yRWFjaCgoeyBzdGFja2VkLCBpbmRleGVkVGFibGUgfSwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gRm9yIGVhY2ggZGF0ZSxcbiAgICAgICAgWy4uLmluZGV4ZWRUYWJsZS5lbnRyaWVzKCldLmZvckVhY2goKFtkYXRlLCBwb2ludE1hcF0sIGkpID0+IHtcbiAgICAgICAgICAvLyBGb3IgZWFjaCBzZXJpZXMsXG4gICAgICAgICAgWy4uLnBvaW50TWFwLmVudHJpZXMoKV0uZm9yRWFjaCgoW18sIHNlcmllc1BvaW50XSwgaikgPT4ge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSBib3ggd2UgYXJlIGFib3V0IHRvIGRyYXcuXG4gICAgICAgICAgICBjb25zdCBbYmFzZWxpbmUsIHRvcGxpbmVdID0gc3RhY2tlZFtqXVtpXTtcblxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBjb2x1bW5XaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHlTY2FsZShiYXNlbGluZSkgLSB5U2NhbGUodG9wbGluZSk7XG4gICAgICAgICAgICBjb25zdCB4ID1cbiAgICAgICAgICAgICAgKHhPdXRlclNjYWxlKGZ1bGxGb3JtYXR0ZXIoZGF0ZSkpID8/IDApICtcbiAgICAgICAgICAgICAgb3V0ZXJQYWRkaW5nICtcbiAgICAgICAgICAgICAgY29sdW1uV2lkdGggKiBpbmRleCArXG4gICAgICAgICAgICAgIHRoaXMuQ09MVU1OX1BBRERJTkcgKiBpbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSB5U2NhbGUoYmFzZWxpbmUpIC0gaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgZmlsbCA9IGB2YXIoJHtzZXJpZXNQb2ludC5zZXJpZXMuY29sb3JUb2tlbn0pYDtcblxuICAgICAgICAgICAgcmVjdHMucHVzaCh7XG4gICAgICAgICAgICAgIGRhdGVWYWx1ZTogZGF0ZS52YWx1ZU9mKCksXG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIGZpbGwsXG4gICAgICAgICAgICAgIHN0cmlwZWQ6IHNlcmllc1BvaW50LnNlcmllcy5zdHlsZSA9PT0gJ3N0cmlwZWQnLFxuICAgICAgICAgICAgICBzZXJpZXNQb2ludCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB4TWlub3JUaWNrcyA9IHhTdGVwcy5tYXAoZGF0ZSA9PiAoe1xuICAgICAgICBkYXRlVmFsdWU6IGRhdGUudmFsdWVPZigpLFxuICAgICAgICBsYWJlbDogbWlub3JGb3JtYXR0ZXIoZGF0ZSksXG4gICAgICAgIHg6XG4gICAgICAgICAgKHhPdXRlclNjYWxlKGZ1bGxGb3JtYXR0ZXIoZGF0ZSkpID8/IDApICsgeE91dGVyU2NhbGUuYmFuZHdpZHRoKCkgLyAyLFxuICAgICAgfSkpO1xuICAgICAgY29uc3QgeE1ham9yVGlja3MgPVxuICAgICAgICBpbnRlcnZhbCAhPT0gJ3llYXInXG4gICAgICAgICAgPyB4U3RlcHNcbiAgICAgICAgICAgICAgLm1hcChkYXRlID0+ICh7XG4gICAgICAgICAgICAgICAgZGF0ZVZhbHVlOiBkYXRlLnZhbHVlT2YoKSxcbiAgICAgICAgICAgICAgICBsYWJlbDogbWFqb3JGb3JtYXR0ZXIoZGF0ZSksXG4gICAgICAgICAgICAgICAgeDpcbiAgICAgICAgICAgICAgICAgICh4T3V0ZXJTY2FsZShmdWxsRm9ybWF0dGVyKGRhdGUpKSA/PyAwKSArXG4gICAgICAgICAgICAgICAgICB4T3V0ZXJTY2FsZS5iYW5kd2lkdGgoKSAvIDIsXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICh0aWNrLCBpLCB0aWNrcykgPT5cbiAgICAgICAgICAgICAgICAgIGkgPT09IDAgfHwgdGljay5sYWJlbCAhPT0gdGlja3NbaSAtIDFdLmxhYmVsLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgOiBbXTtcblxuICAgICAgY29uc3QgeVRpY2tzID0geVNjYWxlLnRpY2tzKDUpO1xuXG4gICAgICBjb25zdCBob3ZlckJhbmRXaWR0aCA9XG4gICAgICAgIHJlbmRlckluZm9ybWF0aW9uLmxlbmd0aCAqIGNvbHVtbldpZHRoICtcbiAgICAgICAgKHJlbmRlckluZm9ybWF0aW9uLmxlbmd0aCArIDEpICogdGhpcy5DT0xVTU5fUEFERElORztcbiAgICAgIGNvbnN0IGhvdmVyQmFuZHMgPSB4U3RlcHMubWFwKGRhdGUgPT4gKHtcbiAgICAgICAgZGF0ZVZhbHVlOiBkYXRlLnZhbHVlT2YoKSxcbiAgICAgICAgeDpcbiAgICAgICAgICAoeE91dGVyU2NhbGUoZnVsbEZvcm1hdHRlcihkYXRlKSkgPz8gMCkgK1xuICAgICAgICAgICh4T3V0ZXJTY2FsZS5iYW5kd2lkdGgoKSAtIGhvdmVyQmFuZFdpZHRoKSAvIDIsXG4gICAgICAgIHk6IHlTY2FsZShkb21haW5NYXgpLFxuICAgICAgICB3aWR0aDogaG92ZXJCYW5kV2lkdGgsXG4gICAgICAgIGhlaWdodDogeVNjYWxlKDApIC0geVNjYWxlKGRvbWFpbk1heCksXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbldpZHRoLFxuICAgICAgICBob3ZlckJhbmRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgdmlld0JveCxcbiAgICAgICAgeE1pbm9yVGlja3MsXG4gICAgICAgIHhNYWpvclRpY2tzLFxuICAgICAgICB5U2NhbGUsXG4gICAgICAgIHlUaWNrcyxcbiAgICAgIH07XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICByZWFkb25seSBlbXB0eSQgPSB0aGlzLmlucHV0JC5waXBlKFxuICAgIG1hcChpbnB1dCA9PlxuICAgICAgaW5wdXQuZXZlcnkoc3RhY2sgPT5cbiAgICAgICAgc3RhY2suc2VyaWVzLmV2ZXJ5KHNlcmllcyA9PiBzZXJpZXMuZGF0YS5sZW5ndGggPT09IDApLFxuICAgICAgKSxcbiAgICApLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG5cbiAgcmVhZG9ubHkgaG92ZXJlZEJhbmQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7XG4gICAgZGF0ZVZhbHVlOiBudW1iZXI7XG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQ7XG4gIH0gfCBudWxsPihudWxsKTtcblxuICByZWFkb25seSBjYWxsb3V0JDogT2JzZXJ2YWJsZTxTdGFja2VkQ29sdW1uQ29tcG9uZW50LkNhbGxvdXRDb250ZXh0IHwgbnVsbD4gPVxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuaG92ZXJlZEJhbmQkLCB0aGlzLmJpbm5lZERhdGEkXSkucGlwZShcbiAgICAgIG1hcCgoW2hvdmVyZWRCYW5kLCBiaW5uZWREYXRhXSkgPT4ge1xuICAgICAgICBpZiAoIWhvdmVyZWRCYW5kKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBjb25zdCB7IHRhcmdldCB9ID0gaG92ZXJlZEJhbmQuZXZlbnQ7XG4gICAgICAgIGlmICghdGFyZ2V0KSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gKDxTVkdSZWN0RWxlbWVudD50YXJnZXQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIGNvbnRlbnQ6IGJpbm5lZERhdGEubWFwKHN0YWNrID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlcmllc1BvaW50cyA9IHN0YWNrLnNlcmllcy5tYXAoc2VyaWVzID0+ICh7XG4gICAgICAgICAgICAgIGxhYmVsOiBzZXJpZXMubGFiZWwsXG4gICAgICAgICAgICAgIGNvbG9yVG9rZW46IHNlcmllcy5jb2xvclRva2VuLFxuICAgICAgICAgICAgICBzdHlsZTogc2VyaWVzLnN0eWxlLFxuICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICBzZXJpZXMuZGF0YS5maW5kKFxuICAgICAgICAgICAgICAgICAgKHsgZGF0ZSB9KSA9PiBkYXRlLnZhbHVlT2YoKSA9PT0gaG92ZXJlZEJhbmQuZGF0ZVZhbHVlLFxuICAgICAgICAgICAgICAgICk/LnZhbHVlID8/IDAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0aXRsZTogc3RhY2sudGl0bGUsXG4gICAgICAgICAgICAgIHRvdGFsOiB0aGlzLnZhbHVlRm9ybWF0dGVyKFxuICAgICAgICAgICAgICAgIHNlcmllc1BvaW50cy5yZWR1Y2UoKGFjYywgcG9pbnQpID0+IHBvaW50LnZhbHVlICsgYWNjLCAwKSxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgc2VyaWVzOiBzZXJpZXNQb2ludHMubWFwKHBvaW50ID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucG9pbnQsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IHRoaXMudmFsdWVGb3JtYXR0ZXIocG9pbnQudmFsdWUpLFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICAgICk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RhY2tlZENvbHVtbkNvbXBvbmVudCB7XG4gIGV4cG9ydCB0eXBlIFZhbHVlID0ge1xuICAgIGRhdGU6IERhdGU7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTZXJpZXMgPSB7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBkYXRhOiBWYWx1ZVtdO1xuICAgIGNvbG9yVG9rZW46IHN0cmluZztcbiAgICBzdHlsZTogTGVnZW5kSXRlbUNvbXBvbmVudC5TdHlsZTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTdGFjayA9IHtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBzZXJpZXM6IFNlcmllc1tdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFN0YWNrQ2xpY2tlZCA9IHtcbiAgICBtaW5EYXRlOiBEYXRlO1xuICAgIG1heERhdGU6IERhdGU7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgQ2FsbG91dENvbnRleHQgPSB7XG4gICAgYW5jaG9yOiBET01SZWN0O1xuICAgIGNvbnRlbnQ6IHtcbiAgICAgIHRpdGxlPzogc3RyaW5nO1xuICAgICAgdG90YWw6IHN0cmluZztcbiAgICAgIHNlcmllczoge1xuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICBjb2xvclRva2VuOiBzdHJpbmc7XG4gICAgICAgIHN0eWxlOiBMZWdlbmRJdGVtQ29tcG9uZW50LlN0eWxlO1xuICAgICAgICB2YWx1ZTogbnVtYmVyO1xuICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogc3RyaW5nO1xuICAgICAgfVtdO1xuICAgIH1bXTtcbiAgfTtcbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCIoZW1wdHkkIHwgYXN5bmMpID09PSBmYWxzZTsgZWxzZSB6ZXJvU3RhdGVcIlxuICBjbGFzcz1cImNvbnRhaW5lclwiXG4gIChyaXZDbGllbnRTaXplKT1cIndpZHRoID0gJGV2ZW50LndpZHRoXCJcbj5cbiAgPHN2Z1xuICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICpuZ0lmPVwiZHJhd0RhdGEkIHwgYXN5bmM7IGxldCBkXCJcbiAgICBbYXR0ci52aWV3Qm94XT1cImQudmlld0JveFwiXG4gID5cbiAgICA8ZGVmcz5cbiAgICAgIDxwYXR0ZXJuXG4gICAgICAgIGlkPVwic3RyaXBlc1wiXG4gICAgICAgIHg9XCIwXCJcbiAgICAgICAgeT1cIjBcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJkLmNvbHVtbldpZHRoXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cImQuY29sdW1uV2lkdGhcIlxuICAgICAgICBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICA+XG4gICAgICAgIDxsaW5lXG4gICAgICAgICAgeDE9XCIwXCJcbiAgICAgICAgICBbYXR0ci55MV09XCJkLmNvbHVtbldpZHRoXCJcbiAgICAgICAgICBbYXR0ci54Ml09XCJkLmNvbHVtbldpZHRoXCJcbiAgICAgICAgICB5Mj1cIjBcIlxuICAgICAgICAgIHN0cm9rZT1cInZhcigtLXdoaXRlLTEwMClcIlxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICAgICAgICA+PC9saW5lPlxuICAgICAgPC9wYXR0ZXJuPlxuICAgIDwvZGVmcz5cbiAgICA8ZyAqbmdGb3I9XCJsZXQgdGljayBvZiBkLnhNaW5vclRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2stYmFja2dyb3VuZFwiXG4gICAgICAgIFtjbGFzcy5mb2N1c2VkXT1cIihob3ZlcmVkQmFuZCQgfCBhc3luYyk/LmRhdGVWYWx1ZSA9PT0gdGljay5kYXRlVmFsdWVcIlxuICAgICAgICBbYXR0ci54XT1cInRpY2sueCAtIDIwXCJcbiAgICAgICAgW2F0dHIueV09XCJkLnlTY2FsZSgwKSArIDNcIlxuICAgICAgICB3aWR0aD1cIjQwXCJcbiAgICAgICAgaGVpZ2h0PVwiMTJcIlxuICAgICAgICByeD1cIjJcIlxuICAgICAgPjwvcmVjdD5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwidGljay1sYWJlbFwiXG4gICAgICAgIFthdHRyLnhdPVwidGljay54XCJcbiAgICAgICAgW2F0dHIueV09XCJkLnlTY2FsZSgwKSArIDEyXCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgPlxuICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueE1ham9yVGlja3NcIj5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwidGljay1sYWJlbFwiXG4gICAgICAgIFthdHRyLnhdPVwidGljay54XCJcbiAgICAgICAgW2F0dHIueV09XCJkLnlTY2FsZSgwKSArIDI0XCJcbiAgICAgICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgICAgPlxuICAgICAgICB7eyB0aWNrLmxhYmVsIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCB0aWNrIG9mIGQueVRpY2tzXCI+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInRpY2tcIlxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIFthdHRyLnldPVwiZC55U2NhbGUodGljaylcIlxuICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICBoZWlnaHQ9XCIxXCJcbiAgICAgID48L3JlY3Q+XG4gICAgICA8dGV4dCBjbGFzcz1cInRpY2stbGFiZWxcIiB4PVwiMFwiIFthdHRyLnldPVwiZC55U2NhbGUodGljaylcIiBkeT1cIi00XCI+XG4gICAgICAgIHt7IHZhbHVlRm9ybWF0dGVyKHRpY2spIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCByZWN0IG9mIGQucmVjdHNcIj5cbiAgICAgIDxyZWN0XG4gICAgICAgIGNsYXNzPVwiY29sdW1uXCJcbiAgICAgICAgW2F0dHIueF09XCJyZWN0LnhcIlxuICAgICAgICBbYXR0ci55XT1cInJlY3QueVwiXG4gICAgICAgIFthdHRyLndpZHRoXT1cInJlY3Qud2lkdGhcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwicmVjdC5oZWlnaHRcIlxuICAgICAgICBbYXR0ci5maWxsXT1cInJlY3QuZmlsbFwiXG4gICAgICAgIFtjbGFzcy5ibHVycmVkXT1cIlxuICAgICAgICAgIChob3ZlcmVkQmFuZCQgfCBhc3luYykgIT09IG51bGwgJiZcbiAgICAgICAgICAoaG92ZXJlZEJhbmQkIHwgYXN5bmMpPy5kYXRlVmFsdWUgIT09IHJlY3QuZGF0ZVZhbHVlXG4gICAgICAgIFwiXG4gICAgICA+PC9yZWN0PlxuICAgICAgPHJlY3RcbiAgICAgICAgKm5nSWY9XCJyZWN0LnN0cmlwZWRcIlxuICAgICAgICBbYXR0ci54XT1cInJlY3QueFwiXG4gICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwicmVjdC53aWR0aFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJyZWN0LmhlaWdodFwiXG4gICAgICAgIGZpbGw9XCJ1cmwoI3N0cmlwZXMpXCJcbiAgICAgID48L3JlY3Q+XG4gICAgPC9nPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRSYW5nZSQgfCBhc3luYzsgbGV0IGdldFJhbmdlXCI+XG4gICAgICA8cmVjdFxuICAgICAgICAqbmdGb3I9XCJsZXQgcmVjdCBvZiBkLmhvdmVyQmFuZHNcIlxuICAgICAgICBbYXR0ci54XT1cInJlY3QueFwiXG4gICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwicmVjdC53aWR0aFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJyZWN0LmhlaWdodFwiXG4gICAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgIGhvdmVyZWRCYW5kJC5uZXh0KHsgZGF0ZVZhbHVlOiByZWN0LmRhdGVWYWx1ZSwgZXZlbnQ6ICRldmVudCB9KVxuICAgICAgICBcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkQmFuZCQubmV4dChudWxsKVwiXG4gICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICBzdGFja0NsaWNrZWQuZW1pdChnZXRSYW5nZShyZWN0LmRhdGVWYWx1ZSkpOyBob3ZlcmVkQmFuZCQubmV4dChudWxsKVxuICAgICAgICBcIlxuICAgICAgPjwvcmVjdD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9zdmc+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbGxvdXQkIHwgYXN5bmM7IGxldCBjYWxsb3V0XCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtb3ZlcmxheVxuICAgIFthbmNob3JdPVwiY2FsbG91dC5hbmNob3JcIlxuICAgIFt0aGVtZV09XCInbGlnaHQnXCJcbiAgICBbaXNNb2RhbF09XCJmYWxzZVwiXG4gICAgW3ByZWZlcnJlZFBvc2l0aW9uXT1cIidjZW50ZXItcmlnaHQnXCJcbiAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJbXG4gICAgICAnY2VudGVyLXJpZ2h0JyxcbiAgICAgICdjZW50ZXItbGVmdCcsXG4gICAgICAndG9wLWNlbnRlcicsXG4gICAgICAnYm90dG9tLWNlbnRlcidcbiAgICBdXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjYWxsb3V0LWNvbnRlbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FsbG91dEhlYWRlclRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjYWxsb3V0IH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGxvdXQtc3RhY2tcIiAqbmdGb3I9XCJsZXQgc3RhY2sgb2YgY2FsbG91dC5jb250ZW50XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzdGFjay50aXRsZTsgbGV0IHRpdGxlXCIgY2xhc3M9XCJjYWxsb3V0LXJvd1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+e3sgdGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgc3RhY2sudG90YWwgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzZXJpZXMgb2Ygc3RhY2suc2VyaWVzXCIgY2xhc3M9XCJjYWxsb3V0LXJvd1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+XG4gICAgICAgICAgICA8cml2LWxlZ2VuZC1pdGVtXG4gICAgICAgICAgICAgIFtjb2xvclRva2VuXT1cInNlcmllcy5jb2xvclRva2VuXCJcbiAgICAgICAgICAgICAgW3N0eWxlXT1cInNlcmllcy5zdHlsZVwiXG4gICAgICAgICAgICA+PC9yaXYtbGVnZW5kLWl0ZW0+XG4gICAgICAgICAgICA8c3Bhbj57eyBzZXJpZXMubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuPnt7IHNlcmllcy5mb3JtYXR0ZWRWYWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3plcm9TdGF0ZT5cbiAgPHJpdi16ZXJvLXN0YXRlPjwvcml2LXplcm8tc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NvbnRyb2xzPlxuICA8cml2LXNpbXBsZS1zZWxlY3RcbiAgICBbb3B0aW9uR3JvdXBzXT1cImludGVydmFsT3B0aW9ucyQgfCBhc3luYyB8IHJpdk9wdGlvbkdyb3VwXCJcbiAgICBbb3JkZXJCeV09XCInc291cmNlJ1wiXG4gICAgW3NlbGVjdGVkT3B0aW9uXT1cInNlbGVjdGVkSW50ZXJ2YWxPcHRpb24kIHwgYXN5bmNcIlxuICAgIChzZWxlY3RlZE9wdGlvbkNoYW5nZSk9XCJzZXRJbnRlcnZhbE9wdGlvbigkZXZlbnQpXCJcbiAgPjwvcml2LXNpbXBsZS1zZWxlY3Q+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -250,9 +250,9 @@ export class StackedRowComponent {
|
|
|
250
250
|
});
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
|
-
StackedRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
254
|
-
StackedRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
255
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
253
|
+
StackedRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: StackedRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
254
|
+
StackedRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: StackedRowComponent, selector: "riv-stacked-row", inputs: { input: "input", valueFormatter: "valueFormatter", zeroStateMessage: "zeroStateMessage" }, outputs: { stackClicked: "stackClicked" }, queries: [{ propertyName: "calloutHeaderTemplate", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<div\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let draw\"\n [attr.viewBox]=\"draw.viewBox\"\n >\n <defs>\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"draw.rowHeight\"\n [attr.height]=\"draw.rowHeight\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"draw.rowHeight\"\n [attr.y2]=\"draw.rowHeight\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <g *ngFor=\"let rowNameToDraw of draw.rowNames\">\n <text\n rivSVGTextTruncate\n [text]=\"rowNameToDraw.label\"\n [width]=\"SECTION_WIDTHS.ROW_NAME\"\n class=\"row-title\"\n [attr.x]=\"rowNameToDraw.x\"\n [attr.y]=\"rowNameToDraw.y\"\n ></text>\n </g>\n <g *ngFor=\"let tick of draw.xTicks\">\n <rect\n class=\"tick\"\n [attr.x]=\"draw.xScale(tick)\"\n y=\"0\"\n width=\"1\"\n height=\"100%\"\n ></rect>\n <text\n class=\"tick-label\"\n [attr.x]=\"draw.xScale(tick)\"\n [attr.y]=\"locationOfXAxisTick()\"\n dx=\"4\"\n dy=\"-4\"\n >\n {{ valueFormatter(tick) }}\n </text>\n </g>\n <g\n *ngFor=\"let rect of draw.rects\"\n (mouseenter)=\"hoveredBand$.next({ rowName: rect.rowName, event: $event })\"\n (mouseleave)=\"hoveredBand$.next(null)\"\n (click)=\"\n stackClicked.emit({ stackIndex: rect.stackIndex });\n hoveredBand$.next(null)\n \"\n >\n <rect\n class=\"row\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"rect.fill\"\n [class.blurred]=\"\n (hoveredBand$ | async) !== null &&\n (hoveredBand$ | async)?.rowName !== rect.rowName\n \"\n ></rect>\n <rect\n *ngIf=\"rect.striped\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"url(#stripes)\"\n ></rect>\n </g>\n <g *ngFor=\"let rowTotalToDraw of draw.rowTotals\">\n <text\n class=\"row-total\"\n [attr.x]=\"rowTotalToDraw.x\"\n [attr.y]=\"rowTotalToDraw.y\"\n text-anchor=\"end\"\n >\n {{ rowTotalToDraw.label }}\n </text>\n </g>\n </svg>\n <legend *ngIf=\"drawData$ | async; let draw\">\n <riv-legend-item\n *ngFor=\"let item of draw.legendItems\"\n [label]=\"item.label\"\n [colorToken]=\"item.colorToken\"\n [style]=\"item.style ? item.style : 'solid'\"\n ></riv-legend-item>\n </legend>\n</div>\n\n<ng-container *ngIf=\"callout$ | async; let callout\">\n <riv-callout\n *riv-overlay\n [anchor]=\"callout.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'bottom-center'\"\n [allowedPositions]=\"[\n 'center-right',\n 'center-left',\n 'top-center',\n 'bottom-center'\n ]\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <ng-container\n [ngTemplateOutlet]=\"calloutHeaderTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: callout }\"\n ></ng-container>\n <div *ngFor=\"let metric of callout.metrics\" class=\"callout-row\">\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.colorToken\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".tick{fill:var(--gray-20)}.tick-label{font-size:var(--type-0-font-size);line-height:var(--type-0-line-height-0);fill:var(--type-light-low-contrast)}.row-title{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2)}.row-total{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2);fill:var(--type-light-low-contrast)}.row{transition:opacity var(--short-transition)}.row.blurred{opacity:.4}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.callout-content{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{padding:var(--size-medium) 0;display:flex;gap:var(--size-large);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.CalloutComponent, selector: "riv-callout", inputs: ["anchor", "isModal", "preferredPosition", "allowedPositions", "fallbackDirection", "showCaret", "theme"], outputs: ["close"] }, { kind: "component", type: i3.LegendItemComponent, selector: "riv-legend-item", inputs: ["label", "colorToken", "style", "visibility", "iconTooltip", "clickable", "showCheckWhenClickable"], outputs: ["itemClick"] }, { kind: "directive", type: i4.OverlayDirective, selector: "[riv-overlay]" }, { kind: "directive", type: i5.SizeDirective, selector: "[rivClientSize]", outputs: ["rivClientSize"] }, { kind: "directive", type: i6.SVGTextTruncateDirective, selector: "svg text[rivSVGTextTruncate]", inputs: ["text", "width"] }, { kind: "component", type: i7.ZeroStateComponent, selector: "riv-zero-state", inputs: ["message", "title", "icon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
255
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: StackedRowComponent, decorators: [{
|
|
256
256
|
type: Component,
|
|
257
257
|
args: [{ selector: 'riv-stacked-row', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"(empty$ | async) === false; else zeroState\"\n class=\"container\"\n (rivClientSize)=\"width = $event.width\"\n>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n *ngIf=\"drawData$ | async; let draw\"\n [attr.viewBox]=\"draw.viewBox\"\n >\n <defs>\n <pattern\n id=\"stripes\"\n x=\"0\"\n y=\"0\"\n [attr.width]=\"draw.rowHeight\"\n [attr.height]=\"draw.rowHeight\"\n patternUnits=\"userSpaceOnUse\"\n >\n <line\n [attr.x1]=\"0\"\n [attr.y1]=\"0\"\n [attr.x2]=\"draw.rowHeight\"\n [attr.y2]=\"draw.rowHeight\"\n stroke=\"var(--white-100)\"\n stroke-width=\"1\"\n ></line>\n </pattern>\n </defs>\n <g *ngFor=\"let rowNameToDraw of draw.rowNames\">\n <text\n rivSVGTextTruncate\n [text]=\"rowNameToDraw.label\"\n [width]=\"SECTION_WIDTHS.ROW_NAME\"\n class=\"row-title\"\n [attr.x]=\"rowNameToDraw.x\"\n [attr.y]=\"rowNameToDraw.y\"\n ></text>\n </g>\n <g *ngFor=\"let tick of draw.xTicks\">\n <rect\n class=\"tick\"\n [attr.x]=\"draw.xScale(tick)\"\n y=\"0\"\n width=\"1\"\n height=\"100%\"\n ></rect>\n <text\n class=\"tick-label\"\n [attr.x]=\"draw.xScale(tick)\"\n [attr.y]=\"locationOfXAxisTick()\"\n dx=\"4\"\n dy=\"-4\"\n >\n {{ valueFormatter(tick) }}\n </text>\n </g>\n <g\n *ngFor=\"let rect of draw.rects\"\n (mouseenter)=\"hoveredBand$.next({ rowName: rect.rowName, event: $event })\"\n (mouseleave)=\"hoveredBand$.next(null)\"\n (click)=\"\n stackClicked.emit({ stackIndex: rect.stackIndex });\n hoveredBand$.next(null)\n \"\n >\n <rect\n class=\"row\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n [attr.fill]=\"rect.fill\"\n [class.blurred]=\"\n (hoveredBand$ | async) !== null &&\n (hoveredBand$ | async)?.rowName !== rect.rowName\n \"\n ></rect>\n <rect\n *ngIf=\"rect.striped\"\n [attr.x]=\"rect.x\"\n [attr.y]=\"rect.y\"\n [attr.width]=\"rect.width\"\n [attr.height]=\"rect.height\"\n fill=\"url(#stripes)\"\n ></rect>\n </g>\n <g *ngFor=\"let rowTotalToDraw of draw.rowTotals\">\n <text\n class=\"row-total\"\n [attr.x]=\"rowTotalToDraw.x\"\n [attr.y]=\"rowTotalToDraw.y\"\n text-anchor=\"end\"\n >\n {{ rowTotalToDraw.label }}\n </text>\n </g>\n </svg>\n <legend *ngIf=\"drawData$ | async; let draw\">\n <riv-legend-item\n *ngFor=\"let item of draw.legendItems\"\n [label]=\"item.label\"\n [colorToken]=\"item.colorToken\"\n [style]=\"item.style ? item.style : 'solid'\"\n ></riv-legend-item>\n </legend>\n</div>\n\n<ng-container *ngIf=\"callout$ | async; let callout\">\n <riv-callout\n *riv-overlay\n [anchor]=\"callout.anchor\"\n [isModal]=\"false\"\n [preferredPosition]=\"'bottom-center'\"\n [allowedPositions]=\"[\n 'center-right',\n 'center-left',\n 'top-center',\n 'bottom-center'\n ]\"\n [theme]=\"'light'\"\n >\n <div class=\"callout-content\">\n <ng-container\n [ngTemplateOutlet]=\"calloutHeaderTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: callout }\"\n ></ng-container>\n <div *ngFor=\"let metric of callout.metrics\" class=\"callout-row\">\n <span class=\"series-label\">\n <riv-legend-item [colorToken]=\"metric.colorToken\"></riv-legend-item>\n <span>{{ metric.label }}</span>\n </span>\n <span>{{ metric.value }}</span>\n </div>\n </div>\n </riv-callout>\n</ng-container>\n\n<ng-template #zeroState>\n <riv-zero-state [message]=\"zeroStateMessage\"></riv-zero-state>\n</ng-template>\n", styles: [".tick{fill:var(--gray-20)}.tick-label{font-size:var(--type-0-font-size);line-height:var(--type-0-line-height-0);fill:var(--type-light-low-contrast)}.row-title{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2)}.row-total{font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-2);fill:var(--type-light-low-contrast)}.row{transition:opacity var(--short-transition)}.row.blurred{opacity:.4}legend{display:flex;flex-wrap:wrap;gap:var(--size-large);justify-content:flex-start;align-items:baseline}.callout-content{padding:var(--size-medium) var(--size-xlarge);display:flex;flex-direction:column}.callout-row{padding:var(--size-medium) 0;display:flex;gap:var(--size-large);align-items:center;font-size:var(--type-1-font-size);line-height:var(--type-1-line-height-0)}.series-label{flex-grow:1;font-weight:var(--font-weight-heavy);display:flex;align-items:center;gap:var(--size-small)}\n"] }]
|
|
258
258
|
}], propDecorators: { input: [{
|
|
@@ -267,4 +267,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
267
267
|
}], stackClicked: [{
|
|
268
268
|
type: Output
|
|
269
269
|
}] } });
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2tlZC1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9zdGFja2VkLXJvdy9zdGFja2VkLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3N0YWNrZWQtcm93L3N0YWNrZWQtcm93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsZUFBZSxFQUVmLGFBQWEsRUFDYixHQUFHLEVBQ0gsV0FBVyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUtMLFdBQVcsRUFDWCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLG9CQUFvQixHQUNyQixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUFFL0IsNkVBQTZFO0FBQzdFLDJCQUEyQjtBQUMzQixtR0FBbUc7QUFPbkcsTUFBTSxPQUFPLG1CQUFtQjtJQU5oQztRQU9FLCtFQUErRTtRQUM5RCxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQzNDLEVBQUUsQ0FDSCxDQUFDO1FBU0YsNkVBQTZFO1FBQzVELFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUt6RCwrRUFBK0U7UUFFeEUsbUJBQWMsR0FBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEQsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQ3RELHFCQUFxQixDQUN0QixDQUFDO1FB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QixFQUM3QixLQUFhLEVBQ2IsU0FBaUI7UUFFakIsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1lBQ2hFLG9GQUFvRjtZQUNwRixNQUFNLFNBQVMsR0FDYixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCO2dCQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUM7Z0JBQ3JCLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFFaEIsT0FBTztnQkFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUN4QyxDQUFDLEVBQUUsU0FBUztnQkFDWixDQUFDLEVBQUUsU0FBUzthQUNiLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2dIQXRTVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix5UEFrQ2hCLFdBQVcsZ0RDekUzQix5NkhBNklBOzJGRHRHYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU07OEJBUXBDLEtBQUs7c0JBRGYsS0FBSztnQkFnQkMsY0FBYztzQkFEcEIsS0FBSztnQkFPSyxnQkFBZ0I7c0JBRDFCLEtBQUs7Z0JBU04scUJBQXFCO3NCQURwQixZQUFZO3VCQUFDLFdBQVc7Z0JBTXpCLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnRlcm5TZXQgfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQgeyBTY2FsZUxpbmVhciwgc2NhbGVMaW5lYXIgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGVnZW5kSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2xlZ2VuZC1pdGVtL2xlZ2VuZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBSb3dEaXNwbGF5SW5mbyxcbiAgUm93TGFiZWwsXG4gIFJvd1JlY3RhbmdsZSxcbiAgU3RhY2tlZFJvd0RyYXdEYXRhLFxuICBnZXRLZXlPcmRlcixcbiAgZ2V0TGVnZW5kSXRlbXMsXG4gIGdldFJvd0Rpc3BsYXlJbmZvLFxuICBzdGFuZGFyZGl6ZVJvd1N0YWNrcyxcbn0gZnJvbSAnLi9zdGFja2VkLXJvdy5oZWxwZXJzJztcblxuLy8gVE9ETzogb25jZSB3ZSB1cGdyYWRlIHRvIEFuZ3VsYXIgMTYsIHRoaXMgY29tcG9uZW50IGNhbiBiZSBjbGVhbmVkIHVwIHdpdGhcbi8vIHNpZ25hbHMgaW5zdGVhZCBvZiBSeEpTLlxuLy8gaHR0cHM6Ly93d3cubm90aW9uLnNvL3JpdmV0L1Jlc29sdmUtVE9ET3MtYWZ0ZXItQW5ndWxhci11cGdyYWRlLTFmMjY2N2ViMmEzMTgwYjc5ZjZhZDkyYTdlNTc2ZjA4XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtc3RhY2tlZC1yb3cnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhY2tlZC1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdGFja2VkLXJvdy5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTdGFja2VkUm93Q29tcG9uZW50IHtcbiAgLy8gVGhpcyBpcyB0aGUgbGlzdCBvZiByb3dzIHdlIHdpbGwgZGlzcGxheSwgaW4gdGhlIG9yZGVyIHdlIHdpbGwgZGlzcGxheSB0aGVtLlxuICBwcml2YXRlIHJlYWRvbmx5IGlucHV0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhY2tlZFJvd0NvbXBvbmVudC5Sb3dTdGFja1tdPihcbiAgICBbXSxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbnB1dCh2OiBTdGFja2VkUm93Q29tcG9uZW50LlJvd1N0YWNrW10pIHtcbiAgICB0aGlzLmlucHV0JC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW5wdXQoKTogU3RhY2tlZFJvd0NvbXBvbmVudC5Sb3dTdGFja1tdIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8vIFdpZHRoIGhlbHBzIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgdmlld2JveCB0aGlzIGdyYXBoIGlzIGRpc3BsYXlpbmcgaW4uXG4gIHByaXZhdGUgcmVhZG9ubHkgd2lkdGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgc2V0IHdpZHRoKHY6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGgkLm5leHQodik7XG4gIH1cblxuICAvLyBWYWx1ZUZvcm1hdHRlciBkZXRlcm1pbmVzIGhvdyB3ZSBzdHlsZSB0aGUgdmFsdWVzIGluIGEgbWV0cmljIGFuZCB0aGUgeC1heGlzXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YWx1ZUZvcm1hdHRlcjogKHY6IG51bWJlcikgPT4gc3RyaW5nID0gdiA9PiB2LnRvU3RyaW5nKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB6ZXJvU3RhdGVNZXNzYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcbiAgICAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgemVyb1N0YXRlTWVzc2FnZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnplcm9TdGF0ZU1lc3NhZ2UkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCB6ZXJvU3RhdGVNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuemVyb1N0YXRlTWVzc2FnZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpXG4gIGNhbGxvdXRIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHtcbiAgICAkaW1wbGljaXQ6IFN0YWNrZWRSb3dDb21wb25lbnQuQ2FsbG91dENvbnRleHQ7XG4gIH0+O1xuXG4gIEBPdXRwdXQoKVxuICBzdGFja0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFN0YWNrZWRSb3dDb21wb25lbnQuU3RhY2tDbGlja2VkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRBbmRSb3dIZWlnaHRzJCA9IHRoaXMuaW5wdXQkLnBpcGUoXG4gICAgbWFwKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IGhlaWdodFdpdGhvdXRSb3dzID1cbiAgICAgICAgaW5wdXQubGVuZ3RoICogdGhpcy5TRUNUSU9OX1BBRERJTkcuQkVUV0VFTl9ST1cgK1xuICAgICAgICB0aGlzLlNFQ1RJT05fUEFERElORy5PVVRFUl9UT1BfQk9UVE9NICogMiArXG4gICAgICAgIHRoaXMuU0VDVElPTl9IRUlHSFRTLlhfQVhJU19MQUJFTDtcblxuICAgICAgLy8gVGhlIGNvbWJpbmVkIGhlaWdodCBvZiBhbGwgcm93cyBhdCB0aGVpciBtaW4vbWF4XG4gICAgICBjb25zdCBtaW5IZWlnaHQgPVxuICAgICAgICBpbnB1dC5sZW5ndGggKiB0aGlzLlJFQ1RBTkdMRV9IRUlHSFRTLk1JTl9IRUlHSFQgKyBoZWlnaHRXaXRob3V0Um93cztcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9XG4gICAgICAgIGlucHV0Lmxlbmd0aCAqIHRoaXMuUkVDVEFOR0xFX0hFSUdIVFMuTUFYX0hFSUdIVCArIGhlaWdodFdpdGhvdXRSb3dzO1xuXG4gICAgICAvLyBJZiB0aGUgbWF4LXNpemVkIHJvd3MgZG9uJ3QgbmVlZCB0aGUgdGFyZ2V0IHNpemUsIHNocmluayB0aGUgY2hhcnRcbiAgICAgIGlmIChtYXhIZWlnaHQgPCB0aGlzLlRBUkdFVF9IRUlHSFQpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hhcnRIZWlnaHQ6IG1heEhlaWdodCxcbiAgICAgICAgICByb3dIZWlnaHQ6IHRoaXMuUkVDVEFOR0xFX0hFSUdIVFMuTUFYX0hFSUdIVCxcbiAgICAgICAgfTtcbiAgICAgIC8vIElmIHRoZSBtaW4tc2l6ZWQgcm93cyBuZWVkIG1vcmUgdGhhbiB0aGUgdGFyZ2V0IHNpemUsIGdyb3cgdGhlIGNoYXJ0XG4gICAgICBpZiAobWluSGVpZ2h0ID4gdGhpcy5UQVJHRVRfSEVJR0hUKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoYXJ0SGVpZ2h0OiBtaW5IZWlnaHQsXG4gICAgICAgICAgcm93SGVpZ2h0OiB0aGlzLlJFQ1RBTkdMRV9IRUlHSFRTLk1JTl9IRUlHSFQsXG4gICAgICAgIH07XG4gICAgICAvLyBPdGhlcndpc2Ugc2hyaW5rIHRoZSByb3dzIHRvIGZpdCB0aGUgdGFyZ2V0IHNpemVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYXJ0SGVpZ2h0OiB0aGlzLlRBUkdFVF9IRUlHSFQsXG4gICAgICAgIHJvd0hlaWdodDogKHRoaXMuVEFSR0VUX0hFSUdIVCAtIGhlaWdodFdpdGhvdXRSb3dzKSAvIGlucHV0Lmxlbmd0aCxcbiAgICAgIH07XG4gICAgfSksXG4gICk7XG5cbiAgLypcbiAgICBUaGUgbGF5b3V0IHdlIGFyZSBzaG9vdGluZyBmb3IgaXM6XG5cbiAgICAgICAgICAgICAgfCAgIFggQXhpcyBMYWJlbHMgIHxcbiAgICBSb3cgTmFtZSAgfCAgIFJlY3RhbmdsZXMgICAgIHwgICBUb3RhbHNcbiAgKi9cbiAgcmVhZG9ubHkgVEFSR0VUX0hFSUdIVCA9IDMwMDtcblxuICByZWFkb25seSBSRUNUQU5HTEVfSEVJR0hUUyA9IHtcbiAgICBNSU5fSEVJR0hUOiAxMiwgLy8gU2V0cyB0aGUgc21hbGxlc3Qgc2l6ZSBhIHJvdyBjYW4gc2hyaW5rIHRvXG4gICAgTUFYX0hFSUdIVDogNDIsIC8vIFNldHMgdGhlIGxhcmdlc3Qgc2l6ZSBhIHJvdyBjYW4gZXhwYW5kIHRvXG4gIH07XG5cbiAgcmVhZG9ubHkgTEFCRUxfSEVJR0hUID0gODtcblxuICByZWFkb25seSBTRUNUSU9OX0hFSUdIVFMgPSB7XG4gICAgLy8gU3BhY2UgcmVzZXJ2ZWQgZm9yIHRoZSB4LWF4aXMgbGFiZWxzXG4gICAgWF9BWElTX0xBQkVMOiAxNCxcbiAgfTtcblxuICByZWFkb25seSBTRUNUSU9OX1dJRFRIUyA9IHtcbiAgICAvLyBTcGFjZSByZXNlcnZlZCBmb3IgdGhlIG5hbWUgYXQgdGhlIHN0YXJ0IG9mIHRoZSByb3dcbiAgICBST1dfTkFNRTogMTAwLFxuICAgIC8vIFNwYWNlIHJlc2VydmVkIGZvciB0aGUgdG90YWxzIGF0IHRoZSBlbmQgb2YgdGhlIHJvd1xuICAgIFJPV19UT1RBTF9MQUJFTDogNzIsXG4gIH07XG5cbiAgcmVhZG9ubHkgU0VDVElPTl9QQURESU5HID0ge1xuICAgIC8vIFBhZGRpbmcgYmV0d2VlbiBlYWNoIGVkZ2Ugb2YgdGhlIHZpZXdib3ggYW5kIHRoZSBjb250ZW50XG4gICAgT1VURVJfVE9QX0JPVFRPTTogNCxcbiAgICBPVVRFUl9MRUZUX1JJR0hUOiA0LFxuICAgIC8vIFBhZGRpbmcgYmV0d2VlbiB0aGUgYm90dG9tIG9mIG9uZSByb3cgYW5kIHRoZSB0b3Agb2YgdGhlIG5leHQgcm93XG4gICAgQkVUV0VFTl9ST1c6IDQsXG4gICAgLy8gU3BhY2UgYmV0d2VlbiB0aGUgcm93IGFuZCB0aGUgdG9wIG9mIGEgcmVjdGFuZ2xlIGluIHRoYXQgcm93XG4gICAgUkVDVEFOR0xFX1RPX1JPVzogNixcbiAgfTtcblxuICAvLyBUaGUgbnVtYmVyIG9mIFgtYXhpcyBzZWdtZW50cyB0byBjcmVhdGUsIHdpdGggbGFiZWxzIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNlZ21lbnQuXG4gIHJlYWRvbmx5IFhfVElDS19DT1VOVF9NQVggPSA4O1xuICByZWFkb25seSBYX1RJQ0tfQ09VTlRfTUlOID0gMztcbiAgcmVhZG9ubHkgWF9USUNLX01BWF9XSURUSCA9IDkwMDtcbiAgcmVhZG9ubHkgWF9USUNLX01JTl9XSURUSCA9IDQwMDtcblxuICAvLyBaZXJvIG9uIHRoZSBYIGF4aXMgaXMgYWZ0ZXIgdGhlIGxlZnQgcGFkZGluZyBhbmQgdGhlIHJvdyBuYW1lLlxuICBsb2NhdGlvbk9mWEF4aXNaZXJvKCkge1xuICAgIHJldHVybiB0aGlzLlNFQ1RJT05fUEFERElORy5PVVRFUl9MRUZUX1JJR0hUICsgdGhpcy5TRUNUSU9OX1dJRFRIUy5ST1dfTkFNRTtcbiAgfVxuICAvLyBUaGUgZW5kIG9mIHRoZSBYIGF4aXMgaXMgcmlnaHQgYmVmb3JlIHRoZSByb3cgdG90YWwgYW5kIHRoZSByaWdodCBwYWRkaW5nLlxuICBsb2NhdGlvbk9mWEF4aXNFbmQod2lkdGg6IG51bWJlcikge1xuICAgIGNvbnN0IHNwYWNlT25SaWdodDogbnVtYmVyID1cbiAgICAgIHRoaXMuU0VDVElPTl9XSURUSFMuUk9XX1RPVEFMX0xBQkVMICtcbiAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX0xFRlRfUklHSFQ7XG4gICAgcmV0dXJuIHdpZHRoIC0gc3BhY2VPblJpZ2h0O1xuICB9XG4gIC8vIFRoZSB5LWluZGV4IG9mIHRoZSB4LWF4aXMgdGlja3NcbiAgbG9jYXRpb25PZlhBeGlzVGljaygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5TRUNUSU9OX1BBRERJTkcuT1VURVJfVE9QX0JPVFRPTSArIHRoaXMuU0VDVElPTl9IRUlHSFRTLlhfQVhJU19MQUJFTFxuICAgICk7XG4gIH1cbiAgLy8gVGhlIHktaW5kZXggb2YgdGhlIHRvcCBvZiB0aGUgY3VycmVudCByb3dcbiAgZ2V0VG9wT2ZSb3cocm93SW5kZXg6IG51bWJlciwgcm93SGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBzcGFjZUFib3ZlUm93czogbnVtYmVyID1cbiAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX1RPUF9CT1RUT00gKyB0aGlzLlNFQ1RJT05fSEVJR0hUUy5YX0FYSVNfTEFCRUw7XG5cbiAgICBjb25zdCBhYm92ZVJvd3M6IG51bWJlciA9IHJvd0luZGV4ICogcm93SGVpZ2h0O1xuICAgIGNvbnN0IGFib3ZlUm93UGFkZGluZ3M6IG51bWJlciA9XG4gICAgICByb3dJbmRleCAqIHRoaXMuU0VDVElPTl9QQURESU5HLkJFVFdFRU5fUk9XO1xuICAgIGNvbnN0IGFsbEFib3ZlUm93czogbnVtYmVyID0gYWJvdmVSb3dzICsgYWJvdmVSb3dQYWRkaW5ncztcblxuICAgIHJldHVybiBzcGFjZUFib3ZlUm93cyArIGFsbEFib3ZlUm93cztcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSBhbGwgdGhlIHZhbHVlcyB3ZSBuZWVkIGZvciBkaXNwbGF5aW5nIHRoZSBncmFwaCBvbiBzY3JlZW4uXG4gIGdldERyYXduRGF0YShcbiAgICByb3dTdGFja3M6IFN0YWNrZWRSb3dDb21wb25lbnQuUm93U3RhY2tbXSxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGNoYXJ0SGVpZ2h0OiBudW1iZXIsXG4gICAgcm93SGVpZ2h0OiBudW1iZXIsXG4gICkge1xuICAgIGlmIChyb3dTdGFja3MubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB2aWV3Qm94ID0gYDAgMCAke3dpZHRofSAke2NoYXJ0SGVpZ2h0fWA7XG5cbiAgICBjb25zdCBrZXlzSW5PcmRlcjogSW50ZXJuU2V0PHN0cmluZz4gPSBnZXRLZXlPcmRlcihyb3dTdGFja3MpO1xuICAgIGNvbnN0IHN0YW5kYXJkaXplZFJvd3M6IFN0YWNrZWRSb3dDb21wb25lbnQuUm93U3RhY2tbXSA9XG4gICAgICBzdGFuZGFyZGl6ZVJvd1N0YWNrcyhyb3dTdGFja3MsIGtleXNJbk9yZGVyKTtcbiAgICBjb25zdCByb3dzRm9yRGlzcGxheTogUm93RGlzcGxheUluZm9bXSA9IHN0YW5kYXJkaXplZFJvd3MubWFwKFxuICAgICAgKHN0YWNrRGF0YSwgaSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0Um93RGlzcGxheUluZm8oc3RhY2tEYXRhLCBpKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBkb21haW4gc2hvdWxkIGJlIHRoZSBoaWdoZXN0IHRvdGFsIHZhbHVlIGZyb20gdGhlIHJvd3MuXG4gICAgY29uc3QgZG9tYWluTWF4ID0gTWF0aC5tYXgoMCwgLi4ucm93c0ZvckRpc3BsYXkubWFwKHJvdyA9PiByb3cucm93VG90YWwpKTtcbiAgICBjb25zdCB4U2NhbGU6IFNjYWxlTGluZWFyPG51bWJlciwgbnVtYmVyLCBuZXZlcj4gPSBzY2FsZUxpbmVhcigpXG4gICAgICAuZG9tYWluKFswLCBkb21haW5NYXhdKVxuICAgICAgLnJhbmdlKFt0aGlzLmxvY2F0aW9uT2ZYQXhpc1plcm8oKSwgdGhpcy5sb2NhdGlvbk9mWEF4aXNFbmQod2lkdGgpXSk7XG5cbiAgICAvLyBTZXR1cCBhIGxpbmVhciBzY2FsZSBmb3IgdGljayBjb3VudCBiYXNlZCBvbiB3aWR0aFxuICAgIGNvbnN0IHRpY2tTY2FsZSA9IHNjYWxlTGluZWFyKClcbiAgICAgIC5kb21haW4oW3RoaXMuWF9USUNLX01JTl9XSURUSCwgdGhpcy5YX1RJQ0tfTUFYX1dJRFRIXSlcbiAgICAgIC5yYW5nZShbdGhpcy5YX1RJQ0tfQ09VTlRfTUlOLCB0aGlzLlhfVElDS19DT1VOVF9NQVhdKVxuICAgICAgLmNsYW1wKHRydWUpOyAvLyBFbnN1cmVzIHRoZSBzY2FsZSBkb2VzIG5vdCBnbyBiZXlvbmQgdGhlIGRlZmluZWQgcmFuZ2VcblxuICAgIGNvbnN0IHh0aWNrQ291bnRBZGp1c3RlZCA9IE1hdGgucm91bmQodGlja1NjYWxlKHdpZHRoKSk7XG4gICAgY29uc3QgeFRpY2tzID0geFNjYWxlLnRpY2tzKHh0aWNrQ291bnRBZGp1c3RlZCk7XG5cbiAgICBjb25zdCByZWN0czogUm93UmVjdGFuZ2xlW10gPSB0aGlzLmNyZWF0ZVJlY3RhbmdsZXNGcm9tUm93cyhcbiAgICAgIHJvd3NGb3JEaXNwbGF5LFxuICAgICAgeFNjYWxlLFxuICAgICAgcm93SGVpZ2h0LFxuICAgICk7XG5cbiAgICBjb25zdCByb3dOYW1lc1RvRHJhdzogUm93TGFiZWxbXSA9IHRoaXMuZ2V0Um93TmFtZXNUb0RyYXcoXG4gICAgICByb3dzRm9yRGlzcGxheSxcbiAgICAgIHJvd0hlaWdodCxcbiAgICApO1xuICAgIGNvbnN0IHJvd1RvdGFsc1RvRHJhdzogUm93TGFiZWxbXSA9IHRoaXMuZ2V0Um93VG90YWxzVG9EcmF3KFxuICAgICAgcm93c0ZvckRpc3BsYXksXG4gICAgICB3aWR0aCxcbiAgICAgIHJvd0hlaWdodCxcbiAgICApO1xuXG4gICAgY29uc3QgbGVnZW5kSXRlbXMgPSBnZXRMZWdlbmRJdGVtcyhyb3dzRm9yRGlzcGxheSwga2V5c0luT3JkZXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZ2VuZEl0ZW1zOiBsZWdlbmRJdGVtcyxcbiAgICAgIHJvd0hlaWdodDogcm93SGVpZ2h0LFxuICAgICAgcmVjdHM6IHJlY3RzLFxuICAgICAgcm93TmFtZXM6IHJvd05hbWVzVG9EcmF3LFxuICAgICAgcm93VG90YWxzOiByb3dUb3RhbHNUb0RyYXcsXG4gICAgICB2aWV3Qm94OiB2aWV3Qm94LFxuICAgICAgeFNjYWxlOiB4U2NhbGUsXG4gICAgICB4VGlja3M6IHhUaWNrcyxcbiAgICB9O1xuICB9XG5cbiAgLy8gR2V0IGRhdGEgZm9yIGFsbCB0aGUgcmVjdGFuZ2xlcyBmb3IgYWxsIHRoZSByb3dzXG4gIGNyZWF0ZVJlY3RhbmdsZXNGcm9tUm93cyhcbiAgICBkaXNwbGF5Um93czogUm93RGlzcGxheUluZm9bXSxcbiAgICB4U2NhbGU6IFNjYWxlTGluZWFyPG51bWJlciwgbnVtYmVyLCBuZXZlcj4sXG4gICAgcm93SGVpZ2h0OiBudW1iZXIsXG4gICk6IFJvd1JlY3RhbmdsZVtdIHtcbiAgICBjb25zdCByZWN0YW5nbGVzOiBSb3dSZWN0YW5nbGVbXSA9IFtdO1xuICAgIGRpc3BsYXlSb3dzLmZvckVhY2goKGN1cnJlbnRSb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICBjdXJyZW50Um93LmVsZW1lbnRzQnV0U3RhY2tlZC5mb3JFYWNoKChjdXJyZW50RWxlbWVudCwgXykgPT4ge1xuICAgICAgICBjb25zdCB0b3BPZlJvdzogbnVtYmVyID0gdGhpcy5nZXRUb3BPZlJvdyhyb3dJbmRleCwgcm93SGVpZ2h0KTtcblxuICAgICAgICBjb25zdCByZWN0YW5nbGVXaWR0aDogbnVtYmVyID1cbiAgICAgICAgICB4U2NhbGUoY3VycmVudEVsZW1lbnQudG9wbGluZSkgLSB4U2NhbGUoY3VycmVudEVsZW1lbnQuYmFzZWxpbmUpO1xuICAgICAgICBjb25zdCByZWN0YW5nbGVIZWlnaHQ6IG51bWJlciA9IHJvd0hlaWdodDtcblxuICAgICAgICBjb25zdCByZWN0YW5nbGVYOiBudW1iZXIgPSB4U2NhbGUoY3VycmVudEVsZW1lbnQuYmFzZWxpbmUpO1xuICAgICAgICBjb25zdCByZWN0YW5nbGVZOiBudW1iZXIgPVxuICAgICAgICAgIHRvcE9mUm93ICsgdGhpcy5TRUNUSU9OX1BBRERJTkcuUkVDVEFOR0xFX1RPX1JPVztcblxuICAgICAgICBjb25zdCBmaWxsID0gYHZhcigke2N1cnJlbnRFbGVtZW50LmNvbG9yVG9rZW59KWA7XG5cbiAgICAgICAgcmVjdGFuZ2xlcy5wdXNoKHtcbiAgICAgICAgICB4OiByZWN0YW5nbGVYLFxuICAgICAgICAgIHk6IHJlY3RhbmdsZVksXG4gICAgICAgICAgd2lkdGg6IE1hdGgubWF4KHJlY3RhbmdsZVdpZHRoLCAwKSxcbiAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZUhlaWdodCxcbiAgICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICAgIHN0cmlwZWQ6IGN1cnJlbnRFbGVtZW50LnN0eWxlID09PSAnc3RyaXBlZCcsXG4gICAgICAgICAgcm93TmFtZTogY3VycmVudFJvdy5yb3dOYW1lLFxuICAgICAgICAgIHN0YWNrZWRSb3dFbGVtZW50OiBjdXJyZW50RWxlbWVudCxcbiAgICAgICAgICBzdGFja0luZGV4OiBjdXJyZW50Um93LnN0YWNrSW5kZXgsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlY3RhbmdsZXM7XG4gIH1cblxuICAvLyBHZXQgZGF0YSBvbiB0aGUgcm93IG5hbWVzIHdlIGFyZSBkcmF3aW5nXG4gIGdldFJvd05hbWVzVG9EcmF3KFxuICAgIGRpc3BsYXlSb3dzOiBSb3dEaXNwbGF5SW5mb1tdLFxuICAgIHJvd0hlaWdodDogbnVtYmVyLFxuICApOiBSb3dMYWJlbFtdIHtcbiAgICByZXR1cm4gZGlzcGxheVJvd3MubWFwKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICBjb25zdCByb3dMYWJlbFggPSB0aGlzLlNFQ1RJT05fUEFERElORy5PVVRFUl9MRUZUX1JJR0hUO1xuICAgICAgLy8gVGhlIHJvdyBuYW1lIGxvb2tzIHJpZ2h0IGlmIGl0cyBiYXNlIGlzIGF0IHRoZSBiYXNlIG9mIHRoZSBhc3NvY2lhdGVkIHJlY3RhbmdsZVxuICAgICAgY29uc3Qgcm93TGFiZWxZID1cbiAgICAgICAgdGhpcy5nZXRUb3BPZlJvdyhyb3dJbmRleCwgcm93SGVpZ2h0KSArXG4gICAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLlJFQ1RBTkdMRV9UT19ST1cgK1xuICAgICAgICB0aGlzLkxBQkVMX0hFSUdIVCAvIDIgK1xuICAgICAgICByb3dIZWlnaHQgLyAyO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogcm93LnJvd05hbWUsXG4gICAgICAgIHg6IHJvd0xhYmVsWCxcbiAgICAgICAgeTogcm93TGFiZWxZLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEdldCBkYXRhIG9uIHRoZSByb3cgdG90YWxzIHdlIGFyZSBkcmF3aW5nXG4gIGdldFJvd1RvdGFsc1RvRHJhdyhcbiAgICBkaXNwbGF5Um93czogUm93RGlzcGxheUluZm9bXSxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIHJvd0hlaWdodDogbnVtYmVyLFxuICApOiBSb3dMYWJlbFtdIHtcbiAgICByZXR1cm4gZGlzcGxheVJvd3MubWFwKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICBjb25zdCByb3dMYWJlbFggPSB3aWR0aCAtIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX0xFRlRfUklHSFQ7XG4gICAgICAvLyBUaGUgcm93IHRvdGFscyBsb29rcyByaWdodCBpZiBpdHMgYmFzZSBpcyBhdCB0aGUgYmFzZSBvZiB0aGUgYXNzb2NpYXRlZCByZWN0YW5nbGVcbiAgICAgIGNvbnN0IHJvd0xhYmVsWSA9XG4gICAgICAgIHRoaXMuZ2V0VG9wT2ZSb3cocm93SW5kZXgsIHJvd0hlaWdodCkgK1xuICAgICAgICB0aGlzLlNFQ1RJT05fUEFERElORy5SRUNUQU5HTEVfVE9fUk9XICtcbiAgICAgICAgdGhpcy5MQUJFTF9IRUlHSFQgLyAyICtcbiAgICAgICAgcm93SGVpZ2h0IC8gMjtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudmFsdWVGb3JtYXR0ZXIocm93LnJvd1RvdGFsKSxcbiAgICAgICAgeDogcm93TGFiZWxYLFxuICAgICAgICB5OiByb3dMYWJlbFksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZG9ubHkgZHJhd0RhdGEkOiBPYnNlcnZhYmxlPFN0YWNrZWRSb3dEcmF3RGF0YSB8IG51bGw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5pbnB1dCQsXG4gICAgdGhpcy53aWR0aCQsXG4gICAgdGhpcy5jaGFydEFuZFJvd0hlaWdodHMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2lucHV0LCB3aWR0aCwgaGVpZ2h0XSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJhd25EYXRhKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodC5jaGFydEhlaWdodCxcbiAgICAgICAgaGVpZ2h0LnJvd0hlaWdodCxcbiAgICAgICk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICAvLyBMZXRzIHVzIGtub3cgd2hldGhlciB0byBkaXNwbGF5IHRoZSB6ZXJvIGRhdGEgc3RhdGVcbiAgcmVhZG9ubHkgZW1wdHkkID0gdGhpcy5pbnB1dCQucGlwZShcbiAgICBtYXAoaW5wdXQgPT4gaW5wdXQuZXZlcnkoc3RhY2sgPT4gc3RhY2suZGF0YS5sZW5ndGggPT09IDApKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIC8vIFdoYXQgcmVjdGFuZ2xlIHdlIGFyZSBjdXJyZW50bHkgaG92ZXJpbmcgb3ZlclxuICByZWFkb25seSBob3ZlcmVkUmVjdGFuZ2xlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIHJlY3RhbmdsZTogUm93UmVjdGFuZ2xlO1xuICAgIGV2ZW50OiBNb3VzZUV2ZW50O1xuICB9IHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gV2hhdCBiYW5kIHdlIGFyZSBjdXJyZW50bHkgaG92ZXJpbmcgb3ZlclxuICByZWFkb25seSBob3ZlcmVkQmFuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcbiAgICByb3dOYW1lOiBzdHJpbmc7XG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQ7XG4gIH0gfCBudWxsPihudWxsKTtcblxuICAvLyBDcmVhdGUgdGhlIG1ldHJpYyB0byBkaXNwbGF5IGJhc2VkIG9uIHRoZSBjdXJyZW50bHkgaG92ZXJlZCByZWN0YW5nbGVcbiAgcmVhZG9ubHkgY2FsbG91dCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmhvdmVyZWRCYW5kJCwgdGhpcy5kcmF3RGF0YSRdKS5waXBlKFxuICAgIG1hcCgoW2hvdmVyZWRCYW5kLCBkcmF3RGF0YV0pID0+IHtcbiAgICAgIGlmICghaG92ZXJlZEJhbmQgfHwgIWRyYXdEYXRhKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGhvdmVyZWRCYW5kLmV2ZW50O1xuICAgICAgaWYgKCF0YXJnZXQpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgYW5jaG9yID0gKDxTVkdSZWN0RWxlbWVudD50YXJnZXQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICB0eXBlIE1ldHJpYyA9IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgY29sb3JUb2tlbjogc3RyaW5nIH07XG4gICAgICBjb25zdCBtZXRyaWNzOiBNZXRyaWNbXSA9IGRyYXdEYXRhLnJlY3RzXG4gICAgICAgIC5maWx0ZXIocmVjdCA9PiByZWN0LnJvd05hbWUgPT09IGhvdmVyZWRCYW5kLnJvd05hbWUpXG4gICAgICAgIC5tYXAocmVjdCA9PiAoe1xuICAgICAgICAgIHJlY3QsXG4gICAgICAgICAgbGFiZWw6IHJlY3Quc3RhY2tlZFJvd0VsZW1lbnQubGFiZWwsXG4gICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWVGb3JtYXR0ZXIocmVjdC5zdGFja2VkUm93RWxlbWVudC52YWx1ZSksXG4gICAgICAgICAgY29sb3JUb2tlbjogcmVjdC5zdGFja2VkUm93RWxlbWVudC5jb2xvclRva2VuLFxuICAgICAgICB9KSk7XG5cbiAgICAgIHJldHVybiB7IGFuY2hvciwgbWV0cmljcyB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RhY2tlZFJvd0NvbXBvbmVudCB7XG4gIC8vIEEgc3BlY2lmaWNhbGx5IGNvbG9yZWQgc2VjdGlvbiBvZiBvbmUgcm93LlxuICBleHBvcnQgdHlwZSBSb3dFbGVtZW50ID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7IC8vIExlZ2VuZCBlbGVtZW50IG5hbWVcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGNvbG9yVG9rZW46IHN0cmluZztcbiAgICBzdHlsZT86IExlZ2VuZEl0ZW1Db21wb25lbnQuU3R5bGU7XG4gIH07XG4gIC8vIFRoZSBpbnB1dCB0aGF0IGRldGVybWluZXMgb25lIHJvdy5cbiAgZXhwb3J0IHR5cGUgUm93U3RhY2sgPSB7XG4gICAgcm93TmFtZTogc3RyaW5nO1xuICAgIGRhdGE6IFJvd0VsZW1lbnRbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTdGFja0NsaWNrZWQgPSB7XG4gICAgc3RhY2tJbmRleDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIENhbGxvdXRDb250ZXh0ID0ge1xuICAgIGFuY2hvcjogRE9NUmVjdDtcbiAgICBtZXRyaWNzOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IGNvbG9yVG9rZW46IHN0cmluZyB9W107XG4gIH07XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwiKGVtcHR5JCB8IGFzeW5jKSA9PT0gZmFsc2U7IGVsc2UgemVyb1N0YXRlXCJcbiAgY2xhc3M9XCJjb250YWluZXJcIlxuICAocml2Q2xpZW50U2l6ZSk9XCJ3aWR0aCA9ICRldmVudC53aWR0aFwiXG4+XG4gIDxzdmdcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAqbmdJZj1cImRyYXdEYXRhJCB8IGFzeW5jOyBsZXQgZHJhd1wiXG4gICAgW2F0dHIudmlld0JveF09XCJkcmF3LnZpZXdCb3hcIlxuICA+XG4gICAgPGRlZnM+XG4gICAgICA8cGF0dGVyblxuICAgICAgICBpZD1cInN0cmlwZXNcIlxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIHk9XCIwXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwiZHJhdy5yb3dIZWlnaHRcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwiZHJhdy5yb3dIZWlnaHRcIlxuICAgICAgICBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICA+XG4gICAgICAgIDxsaW5lXG4gICAgICAgICAgW2F0dHIueDFdPVwiMFwiXG4gICAgICAgICAgW2F0dHIueTFdPVwiMFwiXG4gICAgICAgICAgW2F0dHIueDJdPVwiZHJhdy5yb3dIZWlnaHRcIlxuICAgICAgICAgIFthdHRyLnkyXT1cImRyYXcucm93SGVpZ2h0XCJcbiAgICAgICAgICBzdHJva2U9XCJ2YXIoLS13aGl0ZS0xMDApXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgPjwvbGluZT5cbiAgICAgIDwvcGF0dGVybj5cbiAgICA8L2RlZnM+XG4gICAgPGcgKm5nRm9yPVwibGV0IHJvd05hbWVUb0RyYXcgb2YgZHJhdy5yb3dOYW1lc1wiPlxuICAgICAgPHRleHRcbiAgICAgICAgcml2U1ZHVGV4dFRydW5jYXRlXG4gICAgICAgIFt0ZXh0XT1cInJvd05hbWVUb0RyYXcubGFiZWxcIlxuICAgICAgICBbd2lkdGhdPVwiU0VDVElPTl9XSURUSFMuUk9XX05BTUVcIlxuICAgICAgICBjbGFzcz1cInJvdy10aXRsZVwiXG4gICAgICAgIFthdHRyLnhdPVwicm93TmFtZVRvRHJhdy54XCJcbiAgICAgICAgW2F0dHIueV09XCJyb3dOYW1lVG9EcmF3LnlcIlxuICAgICAgPjwvdGV4dD5cbiAgICA8L2c+XG4gICAgPGcgKm5nRm9yPVwibGV0IHRpY2sgb2YgZHJhdy54VGlja3NcIj5cbiAgICAgIDxyZWN0XG4gICAgICAgIGNsYXNzPVwidGlja1wiXG4gICAgICAgIFthdHRyLnhdPVwiZHJhdy54U2NhbGUodGljaylcIlxuICAgICAgICB5PVwiMFwiXG4gICAgICAgIHdpZHRoPVwiMVwiXG4gICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgPjwvcmVjdD5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwidGljay1sYWJlbFwiXG4gICAgICAgIFthdHRyLnhdPVwiZHJhdy54U2NhbGUodGljaylcIlxuICAgICAgICBbYXR0ci55XT1cImxvY2F0aW9uT2ZYQXhpc1RpY2soKVwiXG4gICAgICAgIGR4PVwiNFwiXG4gICAgICAgIGR5PVwiLTRcIlxuICAgICAgPlxuICAgICAgICB7eyB2YWx1ZUZvcm1hdHRlcih0aWNrKSB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cbiAgICA8Z1xuICAgICAgKm5nRm9yPVwibGV0IHJlY3Qgb2YgZHJhdy5yZWN0c1wiXG4gICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkQmFuZCQubmV4dCh7IHJvd05hbWU6IHJlY3Qucm93TmFtZSwgZXZlbnQ6ICRldmVudCB9KVwiXG4gICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkQmFuZCQubmV4dChudWxsKVwiXG4gICAgICAoY2xpY2spPVwiXG4gICAgICAgIHN0YWNrQ2xpY2tlZC5lbWl0KHsgc3RhY2tJbmRleDogcmVjdC5zdGFja0luZGV4IH0pO1xuICAgICAgICBob3ZlcmVkQmFuZCQubmV4dChudWxsKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInJvd1wiXG4gICAgICAgIFthdHRyLnhdPVwicmVjdC54XCJcbiAgICAgICAgW2F0dHIueV09XCJyZWN0LnlcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJyZWN0LndpZHRoXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInJlY3QuaGVpZ2h0XCJcbiAgICAgICAgW2F0dHIuZmlsbF09XCJyZWN0LmZpbGxcIlxuICAgICAgICBbY2xhc3MuYmx1cnJlZF09XCJcbiAgICAgICAgICAoaG92ZXJlZEJhbmQkIHwgYXN5bmMpICE9PSBudWxsICYmXG4gICAgICAgICAgKGhvdmVyZWRCYW5kJCB8IGFzeW5jKT8ucm93TmFtZSAhPT0gcmVjdC5yb3dOYW1lXG4gICAgICAgIFwiXG4gICAgICA+PC9yZWN0PlxuICAgICAgPHJlY3RcbiAgICAgICAgKm5nSWY9XCJyZWN0LnN0cmlwZWRcIlxuICAgICAgICBbYXR0ci54XT1cInJlY3QueFwiXG4gICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwicmVjdC53aWR0aFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJyZWN0LmhlaWdodFwiXG4gICAgICAgIGZpbGw9XCJ1cmwoI3N0cmlwZXMpXCJcbiAgICAgID48L3JlY3Q+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCByb3dUb3RhbFRvRHJhdyBvZiBkcmF3LnJvd1RvdGFsc1wiPlxuICAgICAgPHRleHRcbiAgICAgICAgY2xhc3M9XCJyb3ctdG90YWxcIlxuICAgICAgICBbYXR0ci54XT1cInJvd1RvdGFsVG9EcmF3LnhcIlxuICAgICAgICBbYXR0ci55XT1cInJvd1RvdGFsVG9EcmF3LnlcIlxuICAgICAgICB0ZXh0LWFuY2hvcj1cImVuZFwiXG4gICAgICA+XG4gICAgICAgIHt7IHJvd1RvdGFsVG9EcmF3LmxhYmVsIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICA8L3N2Zz5cbiAgPGxlZ2VuZCAqbmdJZj1cImRyYXdEYXRhJCB8IGFzeW5jOyBsZXQgZHJhd1wiPlxuICAgIDxyaXYtbGVnZW5kLWl0ZW1cbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRyYXcubGVnZW5kSXRlbXNcIlxuICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgW2NvbG9yVG9rZW5dPVwiaXRlbS5jb2xvclRva2VuXCJcbiAgICAgIFtzdHlsZV09XCJpdGVtLnN0eWxlID8gaXRlbS5zdHlsZSA6ICdzb2xpZCdcIlxuICAgID48L3Jpdi1sZWdlbmQtaXRlbT5cbiAgPC9sZWdlbmQ+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbGxvdXQkIHwgYXN5bmM7IGxldCBjYWxsb3V0XCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtb3ZlcmxheVxuICAgIFthbmNob3JdPVwiY2FsbG91dC5hbmNob3JcIlxuICAgIFtpc01vZGFsXT1cImZhbHNlXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1jZW50ZXInXCJcbiAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJbXG4gICAgICAnY2VudGVyLXJpZ2h0JyxcbiAgICAgICdjZW50ZXItbGVmdCcsXG4gICAgICAndG9wLWNlbnRlcicsXG4gICAgICAnYm90dG9tLWNlbnRlcidcbiAgICBdXCJcbiAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1jb250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhbGxvdXRIZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY2FsbG91dCB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1ldHJpYyBvZiBjYWxsb3V0Lm1ldHJpY3NcIiBjbGFzcz1cImNhbGxvdXQtcm93XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+XG4gICAgICAgICAgPHJpdi1sZWdlbmQtaXRlbSBbY29sb3JUb2tlbl09XCJtZXRyaWMuY29sb3JUb2tlblwiPjwvcml2LWxlZ2VuZC1pdGVtPlxuICAgICAgICAgIDxzcGFuPnt7IG1ldHJpYy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBtZXRyaWMudmFsdWUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3plcm9TdGF0ZT5cbiAgPHJpdi16ZXJvLXN0YXRlIFttZXNzYWdlXT1cInplcm9TdGF0ZU1lc3NhZ2VcIj48L3Jpdi16ZXJvLXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2tlZC1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdmlzdWFsaXphdGlvbi9zdGFja2VkLXJvdy9zdGFja2VkLXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL3N0YWNrZWQtcm93L3N0YWNrZWQtcm93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsZUFBZSxFQUVmLGFBQWEsRUFDYixHQUFHLEVBQ0gsV0FBVyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUtMLFdBQVcsRUFDWCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLG9CQUFvQixHQUNyQixNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUFFL0IsNkVBQTZFO0FBQzdFLDJCQUEyQjtBQUMzQixtR0FBbUc7QUFPbkcsTUFBTSxPQUFPLG1CQUFtQjtJQU5oQztRQU9FLCtFQUErRTtRQUM5RCxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQzNDLEVBQUUsQ0FDSCxDQUFDO1FBU0YsNkVBQTZFO1FBQzVELFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUt6RCwrRUFBK0U7UUFFeEUsbUJBQWMsR0FBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEQsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQ3RELHFCQUFxQixDQUN0QixDQUFDO1FB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QixFQUM3QixLQUFhLEVBQ2IsU0FBaUI7UUFFakIsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDO1lBQ2hFLG9GQUFvRjtZQUNwRixNQUFNLFNBQVMsR0FDYixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCO2dCQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUM7Z0JBQ3JCLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFFaEIsT0FBTztnQkFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUN4QyxDQUFDLEVBQUUsU0FBUztnQkFDWixDQUFDLEVBQUUsU0FBUzthQUNiLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O2lIQXRTVSxtQkFBbUI7cUdBQW5CLG1CQUFtQix5UEFrQ2hCLFdBQVcsZ0RDekUzQix5NkhBNklBOzRGRHRHYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU07OEJBUXBDLEtBQUs7c0JBRGYsS0FBSztnQkFnQkMsY0FBYztzQkFEcEIsS0FBSztnQkFPSyxnQkFBZ0I7c0JBRDFCLEtBQUs7Z0JBU04scUJBQXFCO3NCQURwQixZQUFZO3VCQUFDLFdBQVc7Z0JBTXpCLFlBQVk7c0JBRFgsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnRlcm5TZXQgfSBmcm9tICdkMy1hcnJheSc7XG5pbXBvcnQgeyBTY2FsZUxpbmVhciwgc2NhbGVMaW5lYXIgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGVnZW5kSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2xlZ2VuZC1pdGVtL2xlZ2VuZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBSb3dEaXNwbGF5SW5mbyxcbiAgUm93TGFiZWwsXG4gIFJvd1JlY3RhbmdsZSxcbiAgU3RhY2tlZFJvd0RyYXdEYXRhLFxuICBnZXRLZXlPcmRlcixcbiAgZ2V0TGVnZW5kSXRlbXMsXG4gIGdldFJvd0Rpc3BsYXlJbmZvLFxuICBzdGFuZGFyZGl6ZVJvd1N0YWNrcyxcbn0gZnJvbSAnLi9zdGFja2VkLXJvdy5oZWxwZXJzJztcblxuLy8gVE9ETzogb25jZSB3ZSB1cGdyYWRlIHRvIEFuZ3VsYXIgMTYsIHRoaXMgY29tcG9uZW50IGNhbiBiZSBjbGVhbmVkIHVwIHdpdGhcbi8vIHNpZ25hbHMgaW5zdGVhZCBvZiBSeEpTLlxuLy8gaHR0cHM6Ly93d3cubm90aW9uLnNvL3JpdmV0L1Jlc29sdmUtVE9ET3MtYWZ0ZXItQW5ndWxhci11cGdyYWRlLTFmMjY2N2ViMmEzMTgwYjc5ZjZhZDkyYTdlNTc2ZjA4XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtc3RhY2tlZC1yb3cnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhY2tlZC1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdGFja2VkLXJvdy5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTdGFja2VkUm93Q29tcG9uZW50IHtcbiAgLy8gVGhpcyBpcyB0aGUgbGlzdCBvZiByb3dzIHdlIHdpbGwgZGlzcGxheSwgaW4gdGhlIG9yZGVyIHdlIHdpbGwgZGlzcGxheSB0aGVtLlxuICBwcml2YXRlIHJlYWRvbmx5IGlucHV0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3RhY2tlZFJvd0NvbXBvbmVudC5Sb3dTdGFja1tdPihcbiAgICBbXSxcbiAgKTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBpbnB1dCh2OiBTdGFja2VkUm93Q29tcG9uZW50LlJvd1N0YWNrW10pIHtcbiAgICB0aGlzLmlucHV0JC5uZXh0KHYpO1xuICB9XG4gIHB1YmxpYyBnZXQgaW5wdXQoKTogU3RhY2tlZFJvd0NvbXBvbmVudC5Sb3dTdGFja1tdIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dCQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIC8vIFdpZHRoIGhlbHBzIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgdmlld2JveCB0aGlzIGdyYXBoIGlzIGRpc3BsYXlpbmcgaW4uXG4gIHByaXZhdGUgcmVhZG9ubHkgd2lkdGgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xuICBwcm90ZWN0ZWQgc2V0IHdpZHRoKHY6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGgkLm5leHQodik7XG4gIH1cblxuICAvLyBWYWx1ZUZvcm1hdHRlciBkZXRlcm1pbmVzIGhvdyB3ZSBzdHlsZSB0aGUgdmFsdWVzIGluIGEgbWV0cmljIGFuZCB0aGUgeC1heGlzXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YWx1ZUZvcm1hdHRlcjogKHY6IG51bWJlcikgPT4gc3RyaW5nID0gdiA9PiB2LnRvU3RyaW5nKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB6ZXJvU3RhdGVNZXNzYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcbiAgICAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgemVyb1N0YXRlTWVzc2FnZSh2OiBzdHJpbmcpIHtcbiAgICB0aGlzLnplcm9TdGF0ZU1lc3NhZ2UkLm5leHQodik7XG4gIH1cbiAgcHVibGljIGdldCB6ZXJvU3RhdGVNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuemVyb1N0YXRlTWVzc2FnZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpXG4gIGNhbGxvdXRIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHtcbiAgICAkaW1wbGljaXQ6IFN0YWNrZWRSb3dDb21wb25lbnQuQ2FsbG91dENvbnRleHQ7XG4gIH0+O1xuXG4gIEBPdXRwdXQoKVxuICBzdGFja0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFN0YWNrZWRSb3dDb21wb25lbnQuU3RhY2tDbGlja2VkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhcnRBbmRSb3dIZWlnaHRzJCA9IHRoaXMuaW5wdXQkLnBpcGUoXG4gICAgbWFwKGlucHV0ID0+IHtcbiAgICAgIGNvbnN0IGhlaWdodFdpdGhvdXRSb3dzID1cbiAgICAgICAgaW5wdXQubGVuZ3RoICogdGhpcy5TRUNUSU9OX1BBRERJTkcuQkVUV0VFTl9ST1cgK1xuICAgICAgICB0aGlzLlNFQ1RJT05fUEFERElORy5PVVRFUl9UT1BfQk9UVE9NICogMiArXG4gICAgICAgIHRoaXMuU0VDVElPTl9IRUlHSFRTLlhfQVhJU19MQUJFTDtcblxuICAgICAgLy8gVGhlIGNvbWJpbmVkIGhlaWdodCBvZiBhbGwgcm93cyBhdCB0aGVpciBtaW4vbWF4XG4gICAgICBjb25zdCBtaW5IZWlnaHQgPVxuICAgICAgICBpbnB1dC5sZW5ndGggKiB0aGlzLlJFQ1RBTkdMRV9IRUlHSFRTLk1JTl9IRUlHSFQgKyBoZWlnaHRXaXRob3V0Um93cztcbiAgICAgIGNvbnN0IG1heEhlaWdodCA9XG4gICAgICAgIGlucHV0Lmxlbmd0aCAqIHRoaXMuUkVDVEFOR0xFX0hFSUdIVFMuTUFYX0hFSUdIVCArIGhlaWdodFdpdGhvdXRSb3dzO1xuXG4gICAgICAvLyBJZiB0aGUgbWF4LXNpemVkIHJvd3MgZG9uJ3QgbmVlZCB0aGUgdGFyZ2V0IHNpemUsIHNocmluayB0aGUgY2hhcnRcbiAgICAgIGlmIChtYXhIZWlnaHQgPCB0aGlzLlRBUkdFVF9IRUlHSFQpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hhcnRIZWlnaHQ6IG1heEhlaWdodCxcbiAgICAgICAgICByb3dIZWlnaHQ6IHRoaXMuUkVDVEFOR0xFX0hFSUdIVFMuTUFYX0hFSUdIVCxcbiAgICAgICAgfTtcbiAgICAgIC8vIElmIHRoZSBtaW4tc2l6ZWQgcm93cyBuZWVkIG1vcmUgdGhhbiB0aGUgdGFyZ2V0IHNpemUsIGdyb3cgdGhlIGNoYXJ0XG4gICAgICBpZiAobWluSGVpZ2h0ID4gdGhpcy5UQVJHRVRfSEVJR0hUKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoYXJ0SGVpZ2h0OiBtaW5IZWlnaHQsXG4gICAgICAgICAgcm93SGVpZ2h0OiB0aGlzLlJFQ1RBTkdMRV9IRUlHSFRTLk1JTl9IRUlHSFQsXG4gICAgICAgIH07XG4gICAgICAvLyBPdGhlcndpc2Ugc2hyaW5rIHRoZSByb3dzIHRvIGZpdCB0aGUgdGFyZ2V0IHNpemVcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYXJ0SGVpZ2h0OiB0aGlzLlRBUkdFVF9IRUlHSFQsXG4gICAgICAgIHJvd0hlaWdodDogKHRoaXMuVEFSR0VUX0hFSUdIVCAtIGhlaWdodFdpdGhvdXRSb3dzKSAvIGlucHV0Lmxlbmd0aCxcbiAgICAgIH07XG4gICAgfSksXG4gICk7XG5cbiAgLypcbiAgICBUaGUgbGF5b3V0IHdlIGFyZSBzaG9vdGluZyBmb3IgaXM6XG5cbiAgICAgICAgICAgICAgfCAgIFggQXhpcyBMYWJlbHMgIHxcbiAgICBSb3cgTmFtZSAgfCAgIFJlY3RhbmdsZXMgICAgIHwgICBUb3RhbHNcbiAgKi9cbiAgcmVhZG9ubHkgVEFSR0VUX0hFSUdIVCA9IDMwMDtcblxuICByZWFkb25seSBSRUNUQU5HTEVfSEVJR0hUUyA9IHtcbiAgICBNSU5fSEVJR0hUOiAxMiwgLy8gU2V0cyB0aGUgc21hbGxlc3Qgc2l6ZSBhIHJvdyBjYW4gc2hyaW5rIHRvXG4gICAgTUFYX0hFSUdIVDogNDIsIC8vIFNldHMgdGhlIGxhcmdlc3Qgc2l6ZSBhIHJvdyBjYW4gZXhwYW5kIHRvXG4gIH07XG5cbiAgcmVhZG9ubHkgTEFCRUxfSEVJR0hUID0gODtcblxuICByZWFkb25seSBTRUNUSU9OX0hFSUdIVFMgPSB7XG4gICAgLy8gU3BhY2UgcmVzZXJ2ZWQgZm9yIHRoZSB4LWF4aXMgbGFiZWxzXG4gICAgWF9BWElTX0xBQkVMOiAxNCxcbiAgfTtcblxuICByZWFkb25seSBTRUNUSU9OX1dJRFRIUyA9IHtcbiAgICAvLyBTcGFjZSByZXNlcnZlZCBmb3IgdGhlIG5hbWUgYXQgdGhlIHN0YXJ0IG9mIHRoZSByb3dcbiAgICBST1dfTkFNRTogMTAwLFxuICAgIC8vIFNwYWNlIHJlc2VydmVkIGZvciB0aGUgdG90YWxzIGF0IHRoZSBlbmQgb2YgdGhlIHJvd1xuICAgIFJPV19UT1RBTF9MQUJFTDogNzIsXG4gIH07XG5cbiAgcmVhZG9ubHkgU0VDVElPTl9QQURESU5HID0ge1xuICAgIC8vIFBhZGRpbmcgYmV0d2VlbiBlYWNoIGVkZ2Ugb2YgdGhlIHZpZXdib3ggYW5kIHRoZSBjb250ZW50XG4gICAgT1VURVJfVE9QX0JPVFRPTTogNCxcbiAgICBPVVRFUl9MRUZUX1JJR0hUOiA0LFxuICAgIC8vIFBhZGRpbmcgYmV0d2VlbiB0aGUgYm90dG9tIG9mIG9uZSByb3cgYW5kIHRoZSB0b3Agb2YgdGhlIG5leHQgcm93XG4gICAgQkVUV0VFTl9ST1c6IDQsXG4gICAgLy8gU3BhY2UgYmV0d2VlbiB0aGUgcm93IGFuZCB0aGUgdG9wIG9mIGEgcmVjdGFuZ2xlIGluIHRoYXQgcm93XG4gICAgUkVDVEFOR0xFX1RPX1JPVzogNixcbiAgfTtcblxuICAvLyBUaGUgbnVtYmVyIG9mIFgtYXhpcyBzZWdtZW50cyB0byBjcmVhdGUsIHdpdGggbGFiZWxzIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNlZ21lbnQuXG4gIHJlYWRvbmx5IFhfVElDS19DT1VOVF9NQVggPSA4O1xuICByZWFkb25seSBYX1RJQ0tfQ09VTlRfTUlOID0gMztcbiAgcmVhZG9ubHkgWF9USUNLX01BWF9XSURUSCA9IDkwMDtcbiAgcmVhZG9ubHkgWF9USUNLX01JTl9XSURUSCA9IDQwMDtcblxuICAvLyBaZXJvIG9uIHRoZSBYIGF4aXMgaXMgYWZ0ZXIgdGhlIGxlZnQgcGFkZGluZyBhbmQgdGhlIHJvdyBuYW1lLlxuICBsb2NhdGlvbk9mWEF4aXNaZXJvKCkge1xuICAgIHJldHVybiB0aGlzLlNFQ1RJT05fUEFERElORy5PVVRFUl9MRUZUX1JJR0hUICsgdGhpcy5TRUNUSU9OX1dJRFRIUy5ST1dfTkFNRTtcbiAgfVxuICAvLyBUaGUgZW5kIG9mIHRoZSBYIGF4aXMgaXMgcmlnaHQgYmVmb3JlIHRoZSByb3cgdG90YWwgYW5kIHRoZSByaWdodCBwYWRkaW5nLlxuICBsb2NhdGlvbk9mWEF4aXNFbmQod2lkdGg6IG51bWJlcikge1xuICAgIGNvbnN0IHNwYWNlT25SaWdodDogbnVtYmVyID1cbiAgICAgIHRoaXMuU0VDVElPTl9XSURUSFMuUk9XX1RPVEFMX0xBQkVMICtcbiAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX0xFRlRfUklHSFQ7XG4gICAgcmV0dXJuIHdpZHRoIC0gc3BhY2VPblJpZ2h0O1xuICB9XG4gIC8vIFRoZSB5LWluZGV4IG9mIHRoZSB4LWF4aXMgdGlja3NcbiAgbG9jYXRpb25PZlhBeGlzVGljaygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5TRUNUSU9OX1BBRERJTkcuT1VURVJfVE9QX0JPVFRPTSArIHRoaXMuU0VDVElPTl9IRUlHSFRTLlhfQVhJU19MQUJFTFxuICAgICk7XG4gIH1cbiAgLy8gVGhlIHktaW5kZXggb2YgdGhlIHRvcCBvZiB0aGUgY3VycmVudCByb3dcbiAgZ2V0VG9wT2ZSb3cocm93SW5kZXg6IG51bWJlciwgcm93SGVpZ2h0OiBudW1iZXIpIHtcbiAgICBjb25zdCBzcGFjZUFib3ZlUm93czogbnVtYmVyID1cbiAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX1RPUF9CT1RUT00gKyB0aGlzLlNFQ1RJT05fSEVJR0hUUy5YX0FYSVNfTEFCRUw7XG5cbiAgICBjb25zdCBhYm92ZVJvd3M6IG51bWJlciA9IHJvd0luZGV4ICogcm93SGVpZ2h0O1xuICAgIGNvbnN0IGFib3ZlUm93UGFkZGluZ3M6IG51bWJlciA9XG4gICAgICByb3dJbmRleCAqIHRoaXMuU0VDVElPTl9QQURESU5HLkJFVFdFRU5fUk9XO1xuICAgIGNvbnN0IGFsbEFib3ZlUm93czogbnVtYmVyID0gYWJvdmVSb3dzICsgYWJvdmVSb3dQYWRkaW5ncztcblxuICAgIHJldHVybiBzcGFjZUFib3ZlUm93cyArIGFsbEFib3ZlUm93cztcbiAgfVxuXG4gIC8vIENhbGN1bGF0ZSBhbGwgdGhlIHZhbHVlcyB3ZSBuZWVkIGZvciBkaXNwbGF5aW5nIHRoZSBncmFwaCBvbiBzY3JlZW4uXG4gIGdldERyYXduRGF0YShcbiAgICByb3dTdGFja3M6IFN0YWNrZWRSb3dDb21wb25lbnQuUm93U3RhY2tbXSxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGNoYXJ0SGVpZ2h0OiBudW1iZXIsXG4gICAgcm93SGVpZ2h0OiBudW1iZXIsXG4gICkge1xuICAgIGlmIChyb3dTdGFja3MubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB2aWV3Qm94ID0gYDAgMCAke3dpZHRofSAke2NoYXJ0SGVpZ2h0fWA7XG5cbiAgICBjb25zdCBrZXlzSW5PcmRlcjogSW50ZXJuU2V0PHN0cmluZz4gPSBnZXRLZXlPcmRlcihyb3dTdGFja3MpO1xuICAgIGNvbnN0IHN0YW5kYXJkaXplZFJvd3M6IFN0YWNrZWRSb3dDb21wb25lbnQuUm93U3RhY2tbXSA9XG4gICAgICBzdGFuZGFyZGl6ZVJvd1N0YWNrcyhyb3dTdGFja3MsIGtleXNJbk9yZGVyKTtcbiAgICBjb25zdCByb3dzRm9yRGlzcGxheTogUm93RGlzcGxheUluZm9bXSA9IHN0YW5kYXJkaXplZFJvd3MubWFwKFxuICAgICAgKHN0YWNrRGF0YSwgaSkgPT4ge1xuICAgICAgICByZXR1cm4gZ2V0Um93RGlzcGxheUluZm8oc3RhY2tEYXRhLCBpKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSBkb21haW4gc2hvdWxkIGJlIHRoZSBoaWdoZXN0IHRvdGFsIHZhbHVlIGZyb20gdGhlIHJvd3MuXG4gICAgY29uc3QgZG9tYWluTWF4ID0gTWF0aC5tYXgoMCwgLi4ucm93c0ZvckRpc3BsYXkubWFwKHJvdyA9PiByb3cucm93VG90YWwpKTtcbiAgICBjb25zdCB4U2NhbGU6IFNjYWxlTGluZWFyPG51bWJlciwgbnVtYmVyLCBuZXZlcj4gPSBzY2FsZUxpbmVhcigpXG4gICAgICAuZG9tYWluKFswLCBkb21haW5NYXhdKVxuICAgICAgLnJhbmdlKFt0aGlzLmxvY2F0aW9uT2ZYQXhpc1plcm8oKSwgdGhpcy5sb2NhdGlvbk9mWEF4aXNFbmQod2lkdGgpXSk7XG5cbiAgICAvLyBTZXR1cCBhIGxpbmVhciBzY2FsZSBmb3IgdGljayBjb3VudCBiYXNlZCBvbiB3aWR0aFxuICAgIGNvbnN0IHRpY2tTY2FsZSA9IHNjYWxlTGluZWFyKClcbiAgICAgIC5kb21haW4oW3RoaXMuWF9USUNLX01JTl9XSURUSCwgdGhpcy5YX1RJQ0tfTUFYX1dJRFRIXSlcbiAgICAgIC5yYW5nZShbdGhpcy5YX1RJQ0tfQ09VTlRfTUlOLCB0aGlzLlhfVElDS19DT1VOVF9NQVhdKVxuICAgICAgLmNsYW1wKHRydWUpOyAvLyBFbnN1cmVzIHRoZSBzY2FsZSBkb2VzIG5vdCBnbyBiZXlvbmQgdGhlIGRlZmluZWQgcmFuZ2VcblxuICAgIGNvbnN0IHh0aWNrQ291bnRBZGp1c3RlZCA9IE1hdGgucm91bmQodGlja1NjYWxlKHdpZHRoKSk7XG4gICAgY29uc3QgeFRpY2tzID0geFNjYWxlLnRpY2tzKHh0aWNrQ291bnRBZGp1c3RlZCk7XG5cbiAgICBjb25zdCByZWN0czogUm93UmVjdGFuZ2xlW10gPSB0aGlzLmNyZWF0ZVJlY3RhbmdsZXNGcm9tUm93cyhcbiAgICAgIHJvd3NGb3JEaXNwbGF5LFxuICAgICAgeFNjYWxlLFxuICAgICAgcm93SGVpZ2h0LFxuICAgICk7XG5cbiAgICBjb25zdCByb3dOYW1lc1RvRHJhdzogUm93TGFiZWxbXSA9IHRoaXMuZ2V0Um93TmFtZXNUb0RyYXcoXG4gICAgICByb3dzRm9yRGlzcGxheSxcbiAgICAgIHJvd0hlaWdodCxcbiAgICApO1xuICAgIGNvbnN0IHJvd1RvdGFsc1RvRHJhdzogUm93TGFiZWxbXSA9IHRoaXMuZ2V0Um93VG90YWxzVG9EcmF3KFxuICAgICAgcm93c0ZvckRpc3BsYXksXG4gICAgICB3aWR0aCxcbiAgICAgIHJvd0hlaWdodCxcbiAgICApO1xuXG4gICAgY29uc3QgbGVnZW5kSXRlbXMgPSBnZXRMZWdlbmRJdGVtcyhyb3dzRm9yRGlzcGxheSwga2V5c0luT3JkZXIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlZ2VuZEl0ZW1zOiBsZWdlbmRJdGVtcyxcbiAgICAgIHJvd0hlaWdodDogcm93SGVpZ2h0LFxuICAgICAgcmVjdHM6IHJlY3RzLFxuICAgICAgcm93TmFtZXM6IHJvd05hbWVzVG9EcmF3LFxuICAgICAgcm93VG90YWxzOiByb3dUb3RhbHNUb0RyYXcsXG4gICAgICB2aWV3Qm94OiB2aWV3Qm94LFxuICAgICAgeFNjYWxlOiB4U2NhbGUsXG4gICAgICB4VGlja3M6IHhUaWNrcyxcbiAgICB9O1xuICB9XG5cbiAgLy8gR2V0IGRhdGEgZm9yIGFsbCB0aGUgcmVjdGFuZ2xlcyBmb3IgYWxsIHRoZSByb3dzXG4gIGNyZWF0ZVJlY3RhbmdsZXNGcm9tUm93cyhcbiAgICBkaXNwbGF5Um93czogUm93RGlzcGxheUluZm9bXSxcbiAgICB4U2NhbGU6IFNjYWxlTGluZWFyPG51bWJlciwgbnVtYmVyLCBuZXZlcj4sXG4gICAgcm93SGVpZ2h0OiBudW1iZXIsXG4gICk6IFJvd1JlY3RhbmdsZVtdIHtcbiAgICBjb25zdCByZWN0YW5nbGVzOiBSb3dSZWN0YW5nbGVbXSA9IFtdO1xuICAgIGRpc3BsYXlSb3dzLmZvckVhY2goKGN1cnJlbnRSb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICBjdXJyZW50Um93LmVsZW1lbnRzQnV0U3RhY2tlZC5mb3JFYWNoKChjdXJyZW50RWxlbWVudCwgXykgPT4ge1xuICAgICAgICBjb25zdCB0b3BPZlJvdzogbnVtYmVyID0gdGhpcy5nZXRUb3BPZlJvdyhyb3dJbmRleCwgcm93SGVpZ2h0KTtcblxuICAgICAgICBjb25zdCByZWN0YW5nbGVXaWR0aDogbnVtYmVyID1cbiAgICAgICAgICB4U2NhbGUoY3VycmVudEVsZW1lbnQudG9wbGluZSkgLSB4U2NhbGUoY3VycmVudEVsZW1lbnQuYmFzZWxpbmUpO1xuICAgICAgICBjb25zdCByZWN0YW5nbGVIZWlnaHQ6IG51bWJlciA9IHJvd0hlaWdodDtcblxuICAgICAgICBjb25zdCByZWN0YW5nbGVYOiBudW1iZXIgPSB4U2NhbGUoY3VycmVudEVsZW1lbnQuYmFzZWxpbmUpO1xuICAgICAgICBjb25zdCByZWN0YW5nbGVZOiBudW1iZXIgPVxuICAgICAgICAgIHRvcE9mUm93ICsgdGhpcy5TRUNUSU9OX1BBRERJTkcuUkVDVEFOR0xFX1RPX1JPVztcblxuICAgICAgICBjb25zdCBmaWxsID0gYHZhcigke2N1cnJlbnRFbGVtZW50LmNvbG9yVG9rZW59KWA7XG5cbiAgICAgICAgcmVjdGFuZ2xlcy5wdXNoKHtcbiAgICAgICAgICB4OiByZWN0YW5nbGVYLFxuICAgICAgICAgIHk6IHJlY3RhbmdsZVksXG4gICAgICAgICAgd2lkdGg6IE1hdGgubWF4KHJlY3RhbmdsZVdpZHRoLCAwKSxcbiAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZUhlaWdodCxcbiAgICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICAgIHN0cmlwZWQ6IGN1cnJlbnRFbGVtZW50LnN0eWxlID09PSAnc3RyaXBlZCcsXG4gICAgICAgICAgcm93TmFtZTogY3VycmVudFJvdy5yb3dOYW1lLFxuICAgICAgICAgIHN0YWNrZWRSb3dFbGVtZW50OiBjdXJyZW50RWxlbWVudCxcbiAgICAgICAgICBzdGFja0luZGV4OiBjdXJyZW50Um93LnN0YWNrSW5kZXgsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlY3RhbmdsZXM7XG4gIH1cblxuICAvLyBHZXQgZGF0YSBvbiB0aGUgcm93IG5hbWVzIHdlIGFyZSBkcmF3aW5nXG4gIGdldFJvd05hbWVzVG9EcmF3KFxuICAgIGRpc3BsYXlSb3dzOiBSb3dEaXNwbGF5SW5mb1tdLFxuICAgIHJvd0hlaWdodDogbnVtYmVyLFxuICApOiBSb3dMYWJlbFtdIHtcbiAgICByZXR1cm4gZGlzcGxheVJvd3MubWFwKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICBjb25zdCByb3dMYWJlbFggPSB0aGlzLlNFQ1RJT05fUEFERElORy5PVVRFUl9MRUZUX1JJR0hUO1xuICAgICAgLy8gVGhlIHJvdyBuYW1lIGxvb2tzIHJpZ2h0IGlmIGl0cyBiYXNlIGlzIGF0IHRoZSBiYXNlIG9mIHRoZSBhc3NvY2lhdGVkIHJlY3RhbmdsZVxuICAgICAgY29uc3Qgcm93TGFiZWxZID1cbiAgICAgICAgdGhpcy5nZXRUb3BPZlJvdyhyb3dJbmRleCwgcm93SGVpZ2h0KSArXG4gICAgICAgIHRoaXMuU0VDVElPTl9QQURESU5HLlJFQ1RBTkdMRV9UT19ST1cgK1xuICAgICAgICB0aGlzLkxBQkVMX0hFSUdIVCAvIDIgK1xuICAgICAgICByb3dIZWlnaHQgLyAyO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogcm93LnJvd05hbWUsXG4gICAgICAgIHg6IHJvd0xhYmVsWCxcbiAgICAgICAgeTogcm93TGFiZWxZLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEdldCBkYXRhIG9uIHRoZSByb3cgdG90YWxzIHdlIGFyZSBkcmF3aW5nXG4gIGdldFJvd1RvdGFsc1RvRHJhdyhcbiAgICBkaXNwbGF5Um93czogUm93RGlzcGxheUluZm9bXSxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIHJvd0hlaWdodDogbnVtYmVyLFxuICApOiBSb3dMYWJlbFtdIHtcbiAgICByZXR1cm4gZGlzcGxheVJvd3MubWFwKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICBjb25zdCByb3dMYWJlbFggPSB3aWR0aCAtIHRoaXMuU0VDVElPTl9QQURESU5HLk9VVEVSX0xFRlRfUklHSFQ7XG4gICAgICAvLyBUaGUgcm93IHRvdGFscyBsb29rcyByaWdodCBpZiBpdHMgYmFzZSBpcyBhdCB0aGUgYmFzZSBvZiB0aGUgYXNzb2NpYXRlZCByZWN0YW5nbGVcbiAgICAgIGNvbnN0IHJvd0xhYmVsWSA9XG4gICAgICAgIHRoaXMuZ2V0VG9wT2ZSb3cocm93SW5kZXgsIHJvd0hlaWdodCkgK1xuICAgICAgICB0aGlzLlNFQ1RJT05fUEFERElORy5SRUNUQU5HTEVfVE9fUk9XICtcbiAgICAgICAgdGhpcy5MQUJFTF9IRUlHSFQgLyAyICtcbiAgICAgICAgcm93SGVpZ2h0IC8gMjtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudmFsdWVGb3JtYXR0ZXIocm93LnJvd1RvdGFsKSxcbiAgICAgICAgeDogcm93TGFiZWxYLFxuICAgICAgICB5OiByb3dMYWJlbFksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcmVhZG9ubHkgZHJhd0RhdGEkOiBPYnNlcnZhYmxlPFN0YWNrZWRSb3dEcmF3RGF0YSB8IG51bGw+ID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5pbnB1dCQsXG4gICAgdGhpcy53aWR0aCQsXG4gICAgdGhpcy5jaGFydEFuZFJvd0hlaWdodHMkLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW2lucHV0LCB3aWR0aCwgaGVpZ2h0XSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJhd25EYXRhKFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodC5jaGFydEhlaWdodCxcbiAgICAgICAgaGVpZ2h0LnJvd0hlaWdodCxcbiAgICAgICk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoeyByZWZDb3VudDogdHJ1ZSwgYnVmZmVyU2l6ZTogMSB9KSxcbiAgKTtcblxuICAvLyBMZXRzIHVzIGtub3cgd2hldGhlciB0byBkaXNwbGF5IHRoZSB6ZXJvIGRhdGEgc3RhdGVcbiAgcmVhZG9ubHkgZW1wdHkkID0gdGhpcy5pbnB1dCQucGlwZShcbiAgICBtYXAoaW5wdXQgPT4gaW5wdXQuZXZlcnkoc3RhY2sgPT4gc3RhY2suZGF0YS5sZW5ndGggPT09IDApKSxcbiAgICBzaGFyZVJlcGxheSh7IHJlZkNvdW50OiB0cnVlLCBidWZmZXJTaXplOiAxIH0pLFxuICApO1xuXG4gIC8vIFdoYXQgcmVjdGFuZ2xlIHdlIGFyZSBjdXJyZW50bHkgaG92ZXJpbmcgb3ZlclxuICByZWFkb25seSBob3ZlcmVkUmVjdGFuZ2xlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8e1xuICAgIHJlY3RhbmdsZTogUm93UmVjdGFuZ2xlO1xuICAgIGV2ZW50OiBNb3VzZUV2ZW50O1xuICB9IHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gV2hhdCBiYW5kIHdlIGFyZSBjdXJyZW50bHkgaG92ZXJpbmcgb3ZlclxuICByZWFkb25seSBob3ZlcmVkQmFuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHtcbiAgICByb3dOYW1lOiBzdHJpbmc7XG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQ7XG4gIH0gfCBudWxsPihudWxsKTtcblxuICAvLyBDcmVhdGUgdGhlIG1ldHJpYyB0byBkaXNwbGF5IGJhc2VkIG9uIHRoZSBjdXJyZW50bHkgaG92ZXJlZCByZWN0YW5nbGVcbiAgcmVhZG9ubHkgY2FsbG91dCQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmhvdmVyZWRCYW5kJCwgdGhpcy5kcmF3RGF0YSRdKS5waXBlKFxuICAgIG1hcCgoW2hvdmVyZWRCYW5kLCBkcmF3RGF0YV0pID0+IHtcbiAgICAgIGlmICghaG92ZXJlZEJhbmQgfHwgIWRyYXdEYXRhKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IGhvdmVyZWRCYW5kLmV2ZW50O1xuICAgICAgaWYgKCF0YXJnZXQpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgYW5jaG9yID0gKDxTVkdSZWN0RWxlbWVudD50YXJnZXQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICB0eXBlIE1ldHJpYyA9IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgY29sb3JUb2tlbjogc3RyaW5nIH07XG4gICAgICBjb25zdCBtZXRyaWNzOiBNZXRyaWNbXSA9IGRyYXdEYXRhLnJlY3RzXG4gICAgICAgIC5maWx0ZXIocmVjdCA9PiByZWN0LnJvd05hbWUgPT09IGhvdmVyZWRCYW5kLnJvd05hbWUpXG4gICAgICAgIC5tYXAocmVjdCA9PiAoe1xuICAgICAgICAgIHJlY3QsXG4gICAgICAgICAgbGFiZWw6IHJlY3Quc3RhY2tlZFJvd0VsZW1lbnQubGFiZWwsXG4gICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWVGb3JtYXR0ZXIocmVjdC5zdGFja2VkUm93RWxlbWVudC52YWx1ZSksXG4gICAgICAgICAgY29sb3JUb2tlbjogcmVjdC5zdGFja2VkUm93RWxlbWVudC5jb2xvclRva2VuLFxuICAgICAgICB9KSk7XG5cbiAgICAgIHJldHVybiB7IGFuY2hvciwgbWV0cmljcyB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSksXG4gICk7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RhY2tlZFJvd0NvbXBvbmVudCB7XG4gIC8vIEEgc3BlY2lmaWNhbGx5IGNvbG9yZWQgc2VjdGlvbiBvZiBvbmUgcm93LlxuICBleHBvcnQgdHlwZSBSb3dFbGVtZW50ID0ge1xuICAgIGxhYmVsOiBzdHJpbmc7IC8vIExlZ2VuZCBlbGVtZW50IG5hbWVcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIGNvbG9yVG9rZW46IHN0cmluZztcbiAgICBzdHlsZT86IExlZ2VuZEl0ZW1Db21wb25lbnQuU3R5bGU7XG4gIH07XG4gIC8vIFRoZSBpbnB1dCB0aGF0IGRldGVybWluZXMgb25lIHJvdy5cbiAgZXhwb3J0IHR5cGUgUm93U3RhY2sgPSB7XG4gICAgcm93TmFtZTogc3RyaW5nO1xuICAgIGRhdGE6IFJvd0VsZW1lbnRbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBTdGFja0NsaWNrZWQgPSB7XG4gICAgc3RhY2tJbmRleDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIENhbGxvdXRDb250ZXh0ID0ge1xuICAgIGFuY2hvcjogRE9NUmVjdDtcbiAgICBtZXRyaWNzOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IGNvbG9yVG9rZW46IHN0cmluZyB9W107XG4gIH07XG59XG4iLCI8ZGl2XG4gICpuZ0lmPVwiKGVtcHR5JCB8IGFzeW5jKSA9PT0gZmFsc2U7IGVsc2UgemVyb1N0YXRlXCJcbiAgY2xhc3M9XCJjb250YWluZXJcIlxuICAocml2Q2xpZW50U2l6ZSk9XCJ3aWR0aCA9ICRldmVudC53aWR0aFwiXG4+XG4gIDxzdmdcbiAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAqbmdJZj1cImRyYXdEYXRhJCB8IGFzeW5jOyBsZXQgZHJhd1wiXG4gICAgW2F0dHIudmlld0JveF09XCJkcmF3LnZpZXdCb3hcIlxuICA+XG4gICAgPGRlZnM+XG4gICAgICA8cGF0dGVyblxuICAgICAgICBpZD1cInN0cmlwZXNcIlxuICAgICAgICB4PVwiMFwiXG4gICAgICAgIHk9XCIwXCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwiZHJhdy5yb3dIZWlnaHRcIlxuICAgICAgICBbYXR0ci5oZWlnaHRdPVwiZHJhdy5yb3dIZWlnaHRcIlxuICAgICAgICBwYXR0ZXJuVW5pdHM9XCJ1c2VyU3BhY2VPblVzZVwiXG4gICAgICA+XG4gICAgICAgIDxsaW5lXG4gICAgICAgICAgW2F0dHIueDFdPVwiMFwiXG4gICAgICAgICAgW2F0dHIueTFdPVwiMFwiXG4gICAgICAgICAgW2F0dHIueDJdPVwiZHJhdy5yb3dIZWlnaHRcIlxuICAgICAgICAgIFthdHRyLnkyXT1cImRyYXcucm93SGVpZ2h0XCJcbiAgICAgICAgICBzdHJva2U9XCJ2YXIoLS13aGl0ZS0xMDApXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgICAgICAgPjwvbGluZT5cbiAgICAgIDwvcGF0dGVybj5cbiAgICA8L2RlZnM+XG4gICAgPGcgKm5nRm9yPVwibGV0IHJvd05hbWVUb0RyYXcgb2YgZHJhdy5yb3dOYW1lc1wiPlxuICAgICAgPHRleHRcbiAgICAgICAgcml2U1ZHVGV4dFRydW5jYXRlXG4gICAgICAgIFt0ZXh0XT1cInJvd05hbWVUb0RyYXcubGFiZWxcIlxuICAgICAgICBbd2lkdGhdPVwiU0VDVElPTl9XSURUSFMuUk9XX05BTUVcIlxuICAgICAgICBjbGFzcz1cInJvdy10aXRsZVwiXG4gICAgICAgIFthdHRyLnhdPVwicm93TmFtZVRvRHJhdy54XCJcbiAgICAgICAgW2F0dHIueV09XCJyb3dOYW1lVG9EcmF3LnlcIlxuICAgICAgPjwvdGV4dD5cbiAgICA8L2c+XG4gICAgPGcgKm5nRm9yPVwibGV0IHRpY2sgb2YgZHJhdy54VGlja3NcIj5cbiAgICAgIDxyZWN0XG4gICAgICAgIGNsYXNzPVwidGlja1wiXG4gICAgICAgIFthdHRyLnhdPVwiZHJhdy54U2NhbGUodGljaylcIlxuICAgICAgICB5PVwiMFwiXG4gICAgICAgIHdpZHRoPVwiMVwiXG4gICAgICAgIGhlaWdodD1cIjEwMCVcIlxuICAgICAgPjwvcmVjdD5cbiAgICAgIDx0ZXh0XG4gICAgICAgIGNsYXNzPVwidGljay1sYWJlbFwiXG4gICAgICAgIFthdHRyLnhdPVwiZHJhdy54U2NhbGUodGljaylcIlxuICAgICAgICBbYXR0ci55XT1cImxvY2F0aW9uT2ZYQXhpc1RpY2soKVwiXG4gICAgICAgIGR4PVwiNFwiXG4gICAgICAgIGR5PVwiLTRcIlxuICAgICAgPlxuICAgICAgICB7eyB2YWx1ZUZvcm1hdHRlcih0aWNrKSB9fVxuICAgICAgPC90ZXh0PlxuICAgIDwvZz5cbiAgICA8Z1xuICAgICAgKm5nRm9yPVwibGV0IHJlY3Qgb2YgZHJhdy5yZWN0c1wiXG4gICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkQmFuZCQubmV4dCh7IHJvd05hbWU6IHJlY3Qucm93TmFtZSwgZXZlbnQ6ICRldmVudCB9KVwiXG4gICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkQmFuZCQubmV4dChudWxsKVwiXG4gICAgICAoY2xpY2spPVwiXG4gICAgICAgIHN0YWNrQ2xpY2tlZC5lbWl0KHsgc3RhY2tJbmRleDogcmVjdC5zdGFja0luZGV4IH0pO1xuICAgICAgICBob3ZlcmVkQmFuZCQubmV4dChudWxsKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8cmVjdFxuICAgICAgICBjbGFzcz1cInJvd1wiXG4gICAgICAgIFthdHRyLnhdPVwicmVjdC54XCJcbiAgICAgICAgW2F0dHIueV09XCJyZWN0LnlcIlxuICAgICAgICBbYXR0ci53aWR0aF09XCJyZWN0LndpZHRoXCJcbiAgICAgICAgW2F0dHIuaGVpZ2h0XT1cInJlY3QuaGVpZ2h0XCJcbiAgICAgICAgW2F0dHIuZmlsbF09XCJyZWN0LmZpbGxcIlxuICAgICAgICBbY2xhc3MuYmx1cnJlZF09XCJcbiAgICAgICAgICAoaG92ZXJlZEJhbmQkIHwgYXN5bmMpICE9PSBudWxsICYmXG4gICAgICAgICAgKGhvdmVyZWRCYW5kJCB8IGFzeW5jKT8ucm93TmFtZSAhPT0gcmVjdC5yb3dOYW1lXG4gICAgICAgIFwiXG4gICAgICA+PC9yZWN0PlxuICAgICAgPHJlY3RcbiAgICAgICAgKm5nSWY9XCJyZWN0LnN0cmlwZWRcIlxuICAgICAgICBbYXR0ci54XT1cInJlY3QueFwiXG4gICAgICAgIFthdHRyLnldPVwicmVjdC55XCJcbiAgICAgICAgW2F0dHIud2lkdGhdPVwicmVjdC53aWR0aFwiXG4gICAgICAgIFthdHRyLmhlaWdodF09XCJyZWN0LmhlaWdodFwiXG4gICAgICAgIGZpbGw9XCJ1cmwoI3N0cmlwZXMpXCJcbiAgICAgID48L3JlY3Q+XG4gICAgPC9nPlxuICAgIDxnICpuZ0Zvcj1cImxldCByb3dUb3RhbFRvRHJhdyBvZiBkcmF3LnJvd1RvdGFsc1wiPlxuICAgICAgPHRleHRcbiAgICAgICAgY2xhc3M9XCJyb3ctdG90YWxcIlxuICAgICAgICBbYXR0ci54XT1cInJvd1RvdGFsVG9EcmF3LnhcIlxuICAgICAgICBbYXR0ci55XT1cInJvd1RvdGFsVG9EcmF3LnlcIlxuICAgICAgICB0ZXh0LWFuY2hvcj1cImVuZFwiXG4gICAgICA+XG4gICAgICAgIHt7IHJvd1RvdGFsVG9EcmF3LmxhYmVsIH19XG4gICAgICA8L3RleHQ+XG4gICAgPC9nPlxuICA8L3N2Zz5cbiAgPGxlZ2VuZCAqbmdJZj1cImRyYXdEYXRhJCB8IGFzeW5jOyBsZXQgZHJhd1wiPlxuICAgIDxyaXYtbGVnZW5kLWl0ZW1cbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRyYXcubGVnZW5kSXRlbXNcIlxuICAgICAgW2xhYmVsXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgW2NvbG9yVG9rZW5dPVwiaXRlbS5jb2xvclRva2VuXCJcbiAgICAgIFtzdHlsZV09XCJpdGVtLnN0eWxlID8gaXRlbS5zdHlsZSA6ICdzb2xpZCdcIlxuICAgID48L3Jpdi1sZWdlbmQtaXRlbT5cbiAgPC9sZWdlbmQ+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhbGxvdXQkIHwgYXN5bmM7IGxldCBjYWxsb3V0XCI+XG4gIDxyaXYtY2FsbG91dFxuICAgICpyaXYtb3ZlcmxheVxuICAgIFthbmNob3JdPVwiY2FsbG91dC5hbmNob3JcIlxuICAgIFtpc01vZGFsXT1cImZhbHNlXCJcbiAgICBbcHJlZmVycmVkUG9zaXRpb25dPVwiJ2JvdHRvbS1jZW50ZXInXCJcbiAgICBbYWxsb3dlZFBvc2l0aW9uc109XCJbXG4gICAgICAnY2VudGVyLXJpZ2h0JyxcbiAgICAgICdjZW50ZXItbGVmdCcsXG4gICAgICAndG9wLWNlbnRlcicsXG4gICAgICAnYm90dG9tLWNlbnRlcidcbiAgICBdXCJcbiAgICBbdGhlbWVdPVwiJ2xpZ2h0J1wiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY2FsbG91dC1jb250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNhbGxvdXRIZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY2FsbG91dCB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1ldHJpYyBvZiBjYWxsb3V0Lm1ldHJpY3NcIiBjbGFzcz1cImNhbGxvdXQtcm93XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2VyaWVzLWxhYmVsXCI+XG4gICAgICAgICAgPHJpdi1sZWdlbmQtaXRlbSBbY29sb3JUb2tlbl09XCJtZXRyaWMuY29sb3JUb2tlblwiPjwvcml2LWxlZ2VuZC1pdGVtPlxuICAgICAgICAgIDxzcGFuPnt7IG1ldHJpYy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBtZXRyaWMudmFsdWUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9yaXYtY2FsbG91dD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3plcm9TdGF0ZT5cbiAgPHJpdi16ZXJvLXN0YXRlIFttZXNzYWdlXT1cInplcm9TdGF0ZU1lc3NhZ2VcIj48L3Jpdi16ZXJvLXN0YXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|