@firestitch/filter 12.12.12 → 12.12.13
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.
|
@@ -514,7 +514,7 @@ FilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
|
|
|
514
514
|
FsFilterItemsStore,
|
|
515
515
|
SavedFiltersController,
|
|
516
516
|
ActionsController,
|
|
517
|
-
], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: MatInput }], ngImport: i0, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container> \n </div>\n </ng-container>\n \n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"statusBar\">\n <div class=\"filter-status-container\" [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div class=\"filter-status\" #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips \n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"keywordVisible$ | async\">\n <mat-form-field \n [floatLabel]=\"'never'\" \n class=\"form-field-padless\" \n [ngClass]=\"search\"\n appearance=\"outline\">\n <span matPrefix>\n <mat-icon matPrefix>search</mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n\n<ng-template #filterToolbar>\n <ng-container *ngIf=\"filtersBtnVisible$ | async\">\n
|
|
517
|
+
], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: MatInput }], ngImport: i0, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container> \n </div>\n </ng-container>\n \n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"statusBar\">\n <div class=\"filter-status-container\" [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div class=\"filter-status\" #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips \n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"keywordVisible$ | async\">\n <mat-form-field \n [floatLabel]=\"'never'\" \n class=\"form-field-padless\" \n [ngClass]=\"search\"\n appearance=\"outline\">\n <span matPrefix>\n <mat-icon matPrefix>search</mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n\n<ng-template #filterToolbar>\n <div class=\"filter-toobar\">\n <ng-container *ngIf=\"filtersBtnVisible$ | async\">\n <ng-container *ngIf=\"hasVisibleItemOrSorting\">\n <a\n mat-button\n class=\"filters-button\"\n [ngClass]=\"{\n 'mat-raised-button': config.button.style === 'raised' && config.button.label,\n 'mat-flat-button': config.button.style === 'flat' && config.button.label,\n 'mat-stroked-button': config.button.style === 'stroked' && config.button.label,\n 'mat-button': config.button.style === 'basic' && config.button.label,\n 'mat-icon-button': config.button.style === 'icon' || !config.button.label \n }\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n <mat-icon *ngIf=\"config.button.icon\">{{config.button.icon}}</mat-icon>\n {{ config.button.label }}\n </a>\n </ng-container>\n </ng-container>\n <a \n mat-icon-button\n (click)=\"reload($event)\"\n class=\"reload\"\n *ngIf=\"config.reload\">\n <mat-icon>refresh</mat-icon>\n </a>\n </div>\n</ng-template>", styles: [".fs-filter{margin-bottom:20px;display:block}.fs-filter.has-keyword .filter-status-container.has-status{margin-top:4px}.fs-filter:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}.fs-filter:not(.has-keyword) .filter-inner-container{display:flex}.fs-filter:not(.has-keyword) .filter-toobar{justify-content:flex-end}.fs-filter .filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.fs-filter .filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:17px}.fs-filter .filter-container{width:100%}.fs-filter .filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.fs-filter .filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.fs-filter .filter-inner-container .filter-keyword mat-form-field{max-width:100%;min-width:100px;margin-right:6px}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-wrapper{margin-bottom:0}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix .mat-icon{font-size:22px;color:#626262}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-infix{width:250px}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix,.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-suffix{top:.45em}.fs-filter .filter-inner-container .filter-keyword .mat-form-field-suffix{display:flex}.fs-filter .filter-inner-container .filter-keyword .mat-form-field-suffix .mat-icon-button{height:24px;width:24px}.fs-filter .filter-actions{display:flex;align-items:center}.fs-filter .filter-toobar{flex:1;white-space:nowrap;display:flex;align-items:center}.fs-filter .filter-toobar .filters-button{z-index:100}.fs-filter .filter-toobar .reload{margin-left:-6px}.fs-filter .results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}.fs-filter fs-filter-chips{margin-top:4px;display:block}@media screen and (min-width: 599px){.filter-actions{margin-left:10px}.filters-button+fs-filter-actions:not(:empty){margin-left:5px}}@media screen and (max-width: 600px){.filter-actions{margin-left:5px}.filter-actions .filters-button{font-size:0;padding:0;min-width:unset;width:36px;height:36px;border-radius:50%;box-shadow:unset!important}}@media screen and (min-width: 1200px){body.fs-filter-open{margin-right:350px}.fs-filter-backdrop{display:none}}body.fs-filter-open::-webkit-scrollbar{width:0;background:transparent}\n"], components: [{ type: i5.FsFilterChipsComponent, selector: "fs-filter-chips", inputs: ["filters"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.FsClearComponent, selector: "[fsClear]", inputs: ["ngModel", "fsClear"], outputs: ["ngModelChange", "cleared"] }, { type: i9.FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { type: i10.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }], directives: [{ type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i11.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.MatPrefix, selector: "[matPrefix]" }, { type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i11.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
518
518
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterComponent, decorators: [{
|
|
519
519
|
type: Component,
|
|
520
520
|
args: [{
|
|
@@ -574,4 +574,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
574
574
|
type: HostBinding,
|
|
575
575
|
args: ['class.has-keyword']
|
|
576
576
|
}] } });
|
|
577
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ3pHLE9BQU8s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QXpCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDVyxNQUFNO3NCQUF0QixNQUFNO2dCQUNVLE1BQU07c0JBQXRCLE1BQU07Z0JBQ1UsS0FBSztzQkFBckIsTUFBTTtnQkFHQSxTQUFTO3NCQURmLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUkvQixlQUFlO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFJekMsY0FBYztzQkFEcEIsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBSTFCLGFBQWE7c0JBRG5CLFdBQVc7dUJBQUMsc0JBQXNCO2dCQUk1QixhQUFhO3NCQURuQixXQUFXO3VCQUFDLGlCQUFpQjtnQkFJbkIsVUFBVTtzQkFEcEIsV0FBVzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFjdGlvbnNDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9hY3Rpb25zLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgb2JqZWN0c0FyZUVxdWFscyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvY29tcGFyZSc7XG5pbXBvcnQgeyBGc0ZpbHRlckFjdGlvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWcsIEZpbHRlclNvcnQsIElGaWx0ZXJDb25maWdJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IElTb3J0aW5nQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVVwZGF0ZUZpbHRlckl0ZW1Db25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3VwZGF0ZS1maWx0ZXItaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRnNGaWx0ZXJDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmlsdGVyLWNvbmZpZyc7XG5pbXBvcnQgeyBCYXNlSXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9pdGVtcy9iYXNlLWl0ZW0nO1xuaW1wb3J0IHsgRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXh0ZXJuYWwtcGFyYW1zLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJzaXN0YW5jZVBhcmFtc0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHRlcm5hbC1wYXJhbXMvcGVyc2lzdGFuY2UtcGFyYW1zLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtc0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHRlcm5hbC1wYXJhbXMvcXVlcnktcGFyYW1zLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTYXZlZEZpbHRlcnNDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXh0ZXJuYWwtcGFyYW1zL3NhdmVkLWZpbHRlcnMtY29udHJvbGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZzRmlsdGVyT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXItb3ZlcmxheS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvY3VzQ29udHJvbGxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb2N1cy1jb250cm9sbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnNGaWx0ZXJJdGVtc1N0b3JlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaXRlbXMtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXJTdGF0dXNCYXJEaXJlY3RpdmUgfSBmcm9tICcuLy4uLy4uL2RpcmVjdGl2ZXMvc3RhdHVzLWJhci9zdGF0dXMtYmFyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGU19GSUxURVJfQ09ORklHIH0gZnJvbSAnLi8uLi8uLi9pbmplY3RvcnMvZmlsdGVyLWNvbmZpZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtZmlsdGVyJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICBGc0ZpbHRlck92ZXJsYXlTZXJ2aWNlLFxuICAgIEV4dGVybmFsUGFyYW1zQ29udHJvbGxlcixcbiAgICBQZXJzaXN0YW5jZVBhcmFtc0NvbnRyb2xsZXIsXG4gICAgUXVlcnlQYXJhbXNDb250cm9sbGVyLFxuICAgIEZvY3VzQ29udHJvbGxlclNlcnZpY2UsXG4gICAgRnNGaWx0ZXJJdGVtc1N0b3JlLFxuICAgIFNhdmVkRmlsdGVyc0NvbnRyb2xsZXIsXG4gICAgQWN0aW9uc0NvbnRyb2xsZXIsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCdjb25maWcnKVxuICBzZXQgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgIHRoaXMuX2luaXRGaWx0ZXJXaXRoQ29uZmlnKGNvbmZpZyk7XG4gIH1cblxuICBASW5wdXQoJ2ZpbHRlcicpXG4gIHNldCBzZXRGaWx0ZXIoY29uZmlnKSB7XG4gICAgdGhpcy5faW5pdEZpbHRlcldpdGhDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93U29ydEJ5OiBhbnkgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd0ZpbHRlcklucHV0ID0gdHJ1ZTtcbiAgQE91dHB1dCgpIHB1YmxpYyBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAQ29udGVudENoaWxkKEZpbHRlclN0YXR1c0JhckRpcmVjdGl2ZSlcbiAgcHVibGljIHN0YXR1c0JhcjogRmlsdGVyU3RhdHVzQmFyRGlyZWN0aXZlO1xuXG4gIEBWaWV3Q2hpbGQoJ2tleXdvcmRNYXRJbnB1dCcsIHsgcmVhZDogTWF0SW5wdXQgfSlcbiAgcHVibGljIGtleXdvcmRNYXRJbnB1dDogTWF0SW5wdXQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5maWx0ZXJzLW9wZW4nKVxuICBwdWJsaWMgc2hvd0ZpbHRlck1lbnUgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLndpbmRvdy1kZXNrdG9wJylcbiAgcHVibGljIHdpbmRvd0Rlc2t0b3AgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLWZpbHRlcicpXG4gIHB1YmxpYyBmc0ZpbHRlckNsYXNzID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhhcy1rZXl3b3JkJylcbiAgcHVibGljIGdldCBoYXNLZXl3b3JkKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJJdGVtcy5oYXNLZXl3b3JkO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaFBsYWNlaG9sZGVyID0gJ1NlYXJjaCc7XG4gIHB1YmxpYyBrZXl3b3JkID0gJyc7XG5cbiAgcHJvdGVjdGVkIF9jb25maWc6IEZzRmlsdGVyQ29uZmlnID0gbnVsbDtcblxuICBwcml2YXRlIF9zb3J0OiBGaWx0ZXJTb3J0O1xuICBwcml2YXRlIF9maWx0ZXJzQnRuVmlzaWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwcml2YXRlIF9rZXl3b3JkVmlzaWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwcml2YXRlIF9oYXNGaWx0ZXJDaGlwcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBfa2V5d29yZCQgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGU19GSUxURVJfQ09ORklHKSBwcml2YXRlIF9kZWZhdWx0Q29uZmlnOiBGc0ZpbHRlckNvbmZpZyxcbiAgICBwcml2YXRlIF9maWx0ZXJPdmVybGF5OiBGc0ZpbHRlck92ZXJsYXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9leHRlcm5hbFBhcmFtczogRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyLFxuICAgIHByaXZhdGUgX2ZpbHRlckl0ZW1zOiBGc0ZpbHRlckl0ZW1zU3RvcmUsXG4gICAgcHJpdmF0ZSBfYWN0aW9uczogQWN0aW9uc0NvbnRyb2xsZXIsXG4gICkge1xuICAgIHRoaXMuX2xpc3RlbldoZW5GaWx0ZXJSZWFkeSgpO1xuICAgIHRoaXMuX3VwZGF0ZVdpbmRvd1dpZHRoKCk7XG5cbiAgICB0aGlzLl9maWx0ZXJPdmVybGF5LmF0dGFjaCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93RmlsdGVyTWVudSA9IHRydWU7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuZGV0YWNoJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dGaWx0ZXJNZW51ID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2xpc3RlbldpbmRvd1Jlc2l6ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb25maWcoKTogRnNGaWx0ZXJDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlclBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMudmFsdWVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlclBhcmFtc1F1ZXJ5KCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMudmFsdWVzQXNRdWVyeSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMuaXRlbXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpc2libGVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMudmlzaWJsZUl0ZW1zO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtc1JlYWR5JCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMucmVhZHkkO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNGaWx0ZXJDaGlwcyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0ZpbHRlckNoaXBzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzVmlzaWJsZUl0ZW1PclNvcnRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUl0ZW1zLmxlbmd0aCA+IDAgfHwgISF0aGlzLl9maWx0ZXJJdGVtcy5zb3J0QnlJdGVtXG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlcnNCdG5WaXNpYmxlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyc0J0blZpc2libGUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBrZXl3b3JkVmlzaWJsZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2tleXdvcmRWaXNpYmxlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aW9uc1Zpc2libGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zLnZpc2libGUkO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3Rpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucy5hY3Rpb25zJDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWVudUFjdGlvbnMkKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zLm1lbnVBY3Rpb25zJDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAvLyBBdm9pZCBuZ0NoYW5nZXMgZXJyb3JcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbGlzdGVuSW5wdXRDaGFuZ2VzKClcbiAgICB0aGlzLl9saXN0ZW5JbnRlcm5hbEl0ZW1zQ2hhbmdlKCk7XG4gICAgdGhpcy5faW5pdE92ZXJsYXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95RmlsdGVyRHJhd2VyKCk7XG5cbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cygpIHtcbiAgICB0aGlzLmtleXdvcmRNYXRJbnB1dD8uZm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTb3J0KHNvcnQ6IElTb3J0aW5nQ2hhbmdlRXZlbnQpIHtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy51cGRhdGVTb3J0KHNvcnQpXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRG8gdXBkYXRlIHZhbHVlIG9mIHNvbWUgZmllbGRcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlcyAtIHZhbHVlcyBmb3IgdXBkYXRlXG4gICAqXG4gICAqIFRvIHVwZGF0ZSB0ZXh0IHZhbHVlIGp1c3QgcGFzcyBuZXcgdGV4dCB2YWx1ZVxuICAgKlxuICAgKiBwdWJsaWMgdXBkYXRlU2VsZWN0VmFsdWUodmFsKSB7XG4gICAqICAgdGhpcy5maWx0ZXJFbC51cGRhdGVWYWx1ZXMoeyBrZXl3b3JkOiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIHNlbGVjdCBvciBvYnNlcnZhYmxlIHNlbGVjdCB5b3UgY291bGQgcGFzcyBzdWl0YWJsZSB2YWx1ZVxuICAgKlxuICAgKiBwdWJsaWMgdXBkYXRlU2VsZWN0VmFsdWUodmFsOiBudW1iZXIpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IHNpbXBsZV9zZWxlY3Q6IHZhbCB9LCB7IG9ic2VydmFibGVfc2VsZWN0OiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIGNoZWNrYm94IHZhbHVlIGp1c3QgcGFzcyB0cnVlL2ZhbHNlIGFzIHZhbHVlXG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVDaGVja294KHZhbDogYm9vbGVhbikge1xuICAgKiAgIHRoaXMuZmlsdGVyRWwudXBkYXRlVmFsdWVzKHsgY2hlY2tib3g6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKiBUbyB1cGRhdGUgcmFuZ2UgdmFsdWUganVzdCBwYXNzIG9iamVjdCB3aXRoIG1pbiZtYXggb2JqZWN0IG9yIGp1c3Qgd2l0aCBvbmUgb2YgdGFyZ2V0c1xuICAgKlxuICAgKiBFeC46IHsgbWluOiAxMCwgbWF4IDE1IH0sIHsgbWluOiA1IH0sIHsgbWF4IDUgfVxuICAgKlxuICAgKiBwdWJsaWMgdXBkYXRlUmFuZ2UodmFsKSB7XG4gICAqICAgdGhpcy5maWx0ZXJFbC51cGRhdGVWYWx1ZXMoeyByYW5nZTogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqIFRvIHVwZGF0ZSBhdXRvY29tcGxldGUganVzdCBwYXNzIG9iamVjdCB3aXRoIG5hbWUvdmFsdWUgZmllbGRzXG4gICAqXG4gICAqIEV4LjogeyBuYW1lOiAnSm9obiBEb2UnLCB2YWx1ZTogMSB9XG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVBdXRvY29tcGxldGUodmFsKSB7XG4gICAqICAgdGhpcy5maWx0ZXJFbC51cGRhdGVWYWx1ZXMoeyBhdXRvY29tcGxldGVfdXNlcl9pZDogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqIFRvIHVwZGF0ZSBhdXRvY29tcGxldGVjaGlwcyBqdXN0IHBhc3M6XG4gICAqXG4gICAqIDEpIG9iamVjdCB3aXRoIG5hbWUvdmFsdWUgZmllbGRzIC0gd2lsbCBiZSBhcHBlbmRlZCB0byBleGlzdGluZyBzZXQgb2YgdmFsdWVzXG4gICAqXG4gICAqIHsgbmFtZTogJ0pvaG4gRG9lJywgdmFsdWU6IDEgfVxuICAgKlxuICAgKiAyKSBhcnJheSBvZiBvYmplY3RzIC0gd2lsbCBiZSBhcHBlbmRlZCB0byBleGlzdGluZyBzZXQgb2YgdmFsdWVzXG4gICAqXG4gICAqIFt7IG5hbWU6ICdKb2huIERvZScsIHZhbHVlOiAxIH0sIHsgbmFtZTogJ0RhcnlhIEZpbGlwb3ZhJywgdmFsdWU6IDIgfV1cbiAgICpcbiAgICogMykgbnVsbCAtIGNsZWFyIGV4aXN0aW5nIHNldCBvZiB2YWx1ZXNcbiAgICpcbiAgICogcHVibGljIHVwZGF0ZUF1dG9jb21wbGV0ZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IGF1dG9jb21wbGV0ZWNoaXBzX3VzZXJfaWQ6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZVZhbHVlcyh2YWx1ZXMpIHtcbiAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVySXRlbSA9IHRoaXMuaXRlbXNcbiAgICAgICAgLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0ga2V5KTtcblxuICAgICAgaWYgKCFmaWx0ZXJJdGVtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHZhbHVlc1trZXldO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhpZGUoKSB7XG4gICAgdGhpcy5jaGFuZ2VWaXNpYmlsaXR5KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93KCkge1xuICAgIHRoaXMuY2hhbmdlVmlzaWJpbGl0eSh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VWaXNpYmlsaXR5Q2xpY2sodmFsdWUsIGV2ZW50ID0gbnVsbCkge1xuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZVZpc2liaWxpdHkodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtVmFsdWVzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5vbkVtcHR5SXRlbVZhbHVlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNJdGVtVmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAuc29tZSgoaXRlbSkgPT4gaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtVmFsdWUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXNcbiAgICAgIC5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IG5hbWUpO1xuXG4gICAgcmV0dXJuIGl0ZW0/LnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNob3dJdGVtKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0obmFtZSk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgaXRlbS5oaWRlID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuX2ZpbHRlckl0ZW1zLnVwZGF0ZUl0ZW1zVmlzaWJsaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhpZGVJdGVtKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0obmFtZSk7XG5cbiAgICBpZiAoIWl0ZW0pIHsgcmV0dXJuIH1cblxuICAgIGl0ZW0uaGlkZSA9IHRydWU7XG5cbiAgICB0aGlzLl9maWx0ZXJJdGVtcy51cGRhdGVJdGVtc1Zpc2libGl0eSgpO1xuICB9XG5cbiAgcHVibGljIGNsZWFySXRlbShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKG5hbWUpO1xuXG4gICAgaWYgKCFpdGVtKSB7IHJldHVybiB9XG5cbiAgICBpdGVtLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSXRlbUNvbmZpZyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBJVXBkYXRlRmlsdGVySXRlbUNvbmZpZ1xuICApOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKG5hbWUpO1xuXG4gICAgaWYgKCFpdGVtKSB7IHJldHVybiB9XG5cbiAgICBpdGVtLmxhYmVsID0gcGFyYW1zLmxhYmVsID8/IGl0ZW0ubGFiZWw7XG4gICAgaXRlbS5jaGlwTGFiZWwgPSBwYXJhbXMuY2hpcExhYmVsID8/IGl0ZW0uY2hpcExhYmVsO1xuXG4gICAgdGhpcy5fZmlsdGVySXRlbXMudXBkYXRlSXRlbXNWaXNpYmxpdHkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtVmFsdWVDaGFuZ2UkKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB8IG51bGwge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQoKGkpID0+IGkubmFtZSA9PT0gbmFtZSk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5tb2RlbDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoYW5nZVZpc2liaWxpdHkoc3RhdGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoc3RhdGUgPT09IHRoaXMuc2hvd0ZpbHRlck1lbnUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gICAgICByZXR1cm4gdGhpcy5fZGVzdHJveUZpbHRlckRyYXdlcigpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5oYXNWaXNpYmxlSXRlbU9yU29ydGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xpc3RlbkVzY0J1dHRvbigpO1xuXG4gICAgdGhpcy5vcGVuZWQuZW1pdCgpO1xuXG4gICAgdGhpcy5fZmlsdGVyT3ZlcmxheS5vcGVuKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZmlsdGVySXRlbXMudmFsdWVzQXNRdWVyeSgpO1xuICAgIHRoaXMuX3NvcnQgPSB0aGlzLl9maWx0ZXJJdGVtcy5nZXRTb3J0KCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcuaW5pdCkge1xuICAgICAgdGhpcy5jb25maWcuaW5pdChkYXRhLCB0aGlzLl9zb3J0LCB0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVDaGlwc1Zpc2liaWxpdHkoKTtcblxuICAgIHRoaXMuaXRlbXNcbiAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGl0ZW0uaW5pdChpdGVtLCB0aGlzKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKGV2ZW50ID0gbnVsbCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlsdGVySXRlbXMuZmlsdGVyc0NsZWFyKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcuY2xlYXIpIHtcbiAgICAgIHRoaXMuY29uZmlnLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXl3b3JkID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgZmlsdGVyIHdpbmRvdyBhbmQgZG8gY2hhbmdlIGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKGV2ZW50KSB7XG4gICAgdGhpcy5jaGFuZ2VWaXNpYmlsaXR5Q2xpY2soZmFsc2UsIGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWQoZXZlbnQgPSBudWxsKSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2ZpbHRlckl0ZW1zLnZhbHVlc0FzUXVlcnkoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5yZWxvYWQpIHtcbiAgICAgIHRoaXMuY29uZmlnLnJlbG9hZChkYXRhLCB0aGlzLl9maWx0ZXJJdGVtcy5nZXRTb3J0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtKG5hbWUpOiBCYXNlSXRlbTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZmV0Y2hRdWVyeVBhcmFtcygpOiB2b2lkIHtcbiAgICB0aGlzLl9leHRlcm5hbFBhcmFtcy5mZXRjaFF1ZXJ5UGFyYW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBjaGFuZ2UgY2FsbGJhY2sgYW5kIGFwcGx5IG5ldyBmaWx0ZXIgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9maWx0ZXJJdGVtcy52YWx1ZXNBc1F1ZXJ5KCk7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuX2ZpbHRlckl0ZW1zLmdldFNvcnQoKTtcblxuICAgIGNvbnN0IHNvcnRpbmdDaGFuZ2VkID0gKCghc29ydCB8fCAhdGhpcy5fc29ydCkgJiYgc29ydCAhPT0gdGhpcy5fc29ydClcbiAgICAgIHx8IChzb3J0ICYmIHRoaXMuX3NvcnQgJiYgIW9iamVjdHNBcmVFcXVhbHModGhpcy5fc29ydCwgc29ydCkpO1xuXG4gICAgaWYgKHNvcnRpbmdDaGFuZ2VkKSB7XG4gICAgICB0aGlzLl9zb3J0ID0gc29ydDtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNvcnRDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5jb25maWcuc29ydENoYW5nZShkYXRhLCBzb3J0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuY2hhbmdlKSB7XG4gICAgICB0aGlzLmNvbmZpZy5jaGFuZ2UoZGF0YSwgc29ydCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ2hpcHNWaXNpYmlsaXR5KCk7XG5cbiAgICAvLyB2aXNpYmlsaXR5IGZvciBhY3Rpb25zIGNhbiBkZXBlbmQgb24gZmlsdGVycyBzdGF0ZVxuICAgIHRoaXMuX2FjdGlvbnMudXBkYXRlQWN0aW9uc1Zpc2liaWxpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZmlsdGVyIGFjdGlvbnMgY29uZmlnXG4gICAqIEBwYXJhbSBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlQWN0aW9ucyhhY3Rpb25zOiBGc0ZpbHRlckFjdGlvbltdKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aW9ucy5pbml0QWN0aW9ucyhhY3Rpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IFwiRmlsdGVyc1wiIGJ1dHRvblxuICAgKi9cbiAgcHVibGljIHNob3dGaWx0ZXJzQnRuKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZpbHRlcnNCdG5WaXNpYmxlJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgXCJGaWx0ZXJzXCIgYnV0dG9uXG4gICAqL1xuICBwdWJsaWMgaGlkZUZpbHRlcnNCdG4oKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsdGVyc0J0blZpc2libGUkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgXCJLZXl3b3JkXCIgZmllbGQgaWYgaXQgcHJlc2VudFxuICAgKi9cbiAgcHVibGljIHNob3dLZXl3b3JkRmllbGQoKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5d29yZFZpc2libGUkLm5leHQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBcIktleXdvcmRcIiBmaWVsZCBpZiBpdCBwcmVzZW50XG4gICAqL1xuICBwdWJsaWMgaGlkZUtleXdvcmRGaWVsZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9rZXl3b3JkVmlzaWJsZSQubmV4dChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogR28gdGhyb3VnaCBhY3Rpb25zIGFuZCBjaGVjayBzaG93KCkgY2FsbGJhY2sgYW5kIHVwZGF0ZSB2aXNpYmxlIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVBY3Rpb25zVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25zLnVwZGF0ZUFjdGlvbnNWaXNpYmlsaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogR28gdGhyb3VnaCBhY3Rpb25zIGFuZCBjaGVjayBkaXNhYmxlZCgpIGNhbGxiYWNrIGFuZCB1cGRhdGUgZGlzYWJsZWQgc3RhdGVcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVEaXNhYmxlZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGlvbnMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldEl0ZW1zKGl0ZW1zOiBJRmlsdGVyQ29uZmlnSXRlbVtdKSB7XG4gICAgdGhpcy5fZmlsdGVySXRlbXMuZGVzdHJveUl0ZW1zKCk7XG5cbiAgICB0aGlzLmNvbmZpZy5pdGVtcyA9IGl0ZW1zO1xuICAgIHRoaXMuX2ZpbHRlckl0ZW1zLnNldENvbmZpZyh0aGlzLl9jb25maWcpO1xuICAgIHRoaXMuX2V4dGVybmFsUGFyYW1zLmluaXRJdGVtcygpO1xuXG4gICAgdGhpcy5fc3luY1NlYXJjaElucHV0V2l0aEtleXdvcmQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRGaWx0ZXJXaXRoQ29uZmlnKGNvbmZpZzogRmlsdGVyQ29uZmlnKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLl9maWx0ZXJJdGVtcy5kZXN0cm95SXRlbXMoKTtcbiAgICB9XG5cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi4odGhpcy5fZGVmYXVsdENvbmZpZyB8fCB7fSksXG4gICAgICAuLi5jb25maWcsXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbmZpZyA9IG5ldyBGc0ZpbHRlckNvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2FjdGlvbnMuc2V0Q29uZmlnKHRoaXMuX2NvbmZpZyk7XG4gICAgdGhpcy5fZmlsdGVySXRlbXMuc2V0Q29uZmlnKHRoaXMuX2NvbmZpZyk7XG4gICAgdGhpcy5fZXh0ZXJuYWxQYXJhbXMuc2V0Q29uZmlnKHRoaXMuX2NvbmZpZyk7XG5cbiAgICB0aGlzLl9zeW5jU2VhcmNoSW5wdXRXaXRoS2V5d29yZCgpO1xuXG4gICAgaWYgKCEhdGhpcy5jb25maWcucmVsb2FkV2hlbkNvbmZpZ0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVzdHJveUZpbHRlckRyYXdlcigpIHtcbiAgICB0aGlzLl9maWx0ZXJPdmVybGF5LmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVXaW5kb3dXaWR0aCgpIHtcbiAgICB0aGlzLndpbmRvd0Rlc2t0b3AgPSB3aW5kb3cuaW5uZXJXaWR0aCA+IDEyMDA7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Fc2NCdXR0b24oKSB7XG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQod2luZG93LCAna2V5dXAnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBldmVudC5jb2RlID09PSAnRXNjYXBlJyksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuY2xvc2VkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlV2luZG93V2lkdGgoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBrZXl3b3JkQ2hhbmdlKGtleXdvcmQpIHtcbiAgICB0aGlzLl9rZXl3b3JkJC5uZXh0KGtleXdvcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuSW5wdXRDaGFuZ2VzKCkge1xuICAgIHRoaXMuX2tleXdvcmQkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBrZXl3b3JkSXRlbSA9IHRoaXMuX2ZpbHRlckl0ZW1zLmtleXdvcmRJdGVtO1xuICAgICAgICBrZXl3b3JkSXRlbS5tb2RlbCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jU2VhcmNoSW5wdXRXaXRoS2V5d29yZCgpOiB2b2lkIHtcbiAgICBjb25zdCBrZXl3b3JkSXRlbSA9IHRoaXMuX2ZpbHRlckl0ZW1zLmtleXdvcmRJdGVtO1xuICAgIGlmIChrZXl3b3JkSXRlbSkge1xuICAgICAgdGhpcy5rZXl3b3JkID0ga2V5d29yZEl0ZW0ubW9kZWw7XG4gICAgICB0aGlzLnNlYXJjaFBsYWNlaG9sZGVyID0ga2V5d29yZEl0ZW0ubGFiZWwgYXMgc3RyaW5nIHx8ICdTZWFyY2gnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlbkludGVybmFsSXRlbXNDaGFuZ2UoKSB7XG4gICAgdGhpcy5fZmlsdGVySXRlbXNcbiAgICAgIC5pdGVtc0NoYW5nZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRPdmVybGF5KCkge1xuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuc2V0Q2xlYXJGbih0aGlzLmNsZWFyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuc2V0RG9uZUZuKHRoaXMuaGlkZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8vIFdlIG1heSBuZWVkIHNvbWUgdGltZSB0byByZWNpZXZlIGV4dGVybmFsIHBhcmFtcyBhbmQgYWZ0ZXIgdGhhdCByZWFkeSBjYW4gYmUgZW1pdHRlZFxuICBwcml2YXRlIF9saXN0ZW5XaGVuRmlsdGVyUmVhZHkoKSB7XG4gICAgY29tYmluZUxhdGVzdChcbiAgICAgIFtcbiAgICAgICAgdGhpcy5fZXh0ZXJuYWxQYXJhbXMucGVuZGluZyQsXG4gICAgICAgIHRoaXMuaXRlbXNSZWFkeSQsXG4gICAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoW3BlbmRpbmdQYXJhbXMsIGl0ZW1zUmVhZHldKSA9PiAhcGVuZGluZ1BhcmFtcyAmJiBpdGVtc1JlYWR5KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgdGhpcy5fc3luY1NlYXJjaElucHV0V2l0aEtleXdvcmQoKTtcblxuICAgICAgICB0aGlzLnJlYWR5LmVtaXQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQ2hpcHNWaXNpYmlsaXR5KCkge1xuICAgIGNvbnN0IGhhc0ZpbHRlckNoaXBzID0gdGhpcy5fZmlsdGVySXRlbXMuaXRlbXNcbiAgICAgIC5zb21lKChpdGVtOiBCYXNlSXRlbTxhbnk+KSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLmlzQ2hpcFZpc2libGU7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2hhc0ZpbHRlckNoaXBzJC5uZXh0KGhhc0ZpbHRlckNoaXBzKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZpbHRlci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci1pbm5lci1jb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0tleXdvcmQ7IGVsc2UgZmlsdGVyS2V5d29yZFwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclN0YXR1c0JhckNoaXBzXCI+PC9uZy1jb250YWluZXI+ICAgICAgXG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRvb2xiYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlckFjdGlvbnNcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0tleXdvcmRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyU3RhdHVzQmFyQ2hpcHNcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJTdGF0dXNCYXJDaGlwcz5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXR1c0JhclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItc3RhdHVzLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsgJ2hhcy1zdGF0dXMnOiAhIWZpbHRlclN0YXR1cy50ZXh0Q29udGVudCB9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXN0YXR1c1wiICNmaWx0ZXJTdGF0dXM+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNCYXIudGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLmNoaXBzICYmIGhhc0ZpbHRlckNoaXBzJCB8IGFzeW5jXCI+XG4gICAgPGZzLWZpbHRlci1jaGlwcyAgICBcbiAgICAgIGNsYXNzPVwiZmlsdGVyLWNoaXBzXCJcbiAgICAgIFtmaWx0ZXJzXT1cIml0ZW1zXCI+XG4gICAgPC9mcy1maWx0ZXItY2hpcHM+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJLZXl3b3JkPlxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWtleXdvcmRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwia2V5d29yZFZpc2libGUkIHwgYXN5bmNcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBcbiAgICAgICAgICBbZmxvYXRMYWJlbF09XCInbmV2ZXInXCIgXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLXBhZGxlc3NcIiBcbiAgICAgICAgICBbbmdDbGFzc109XCJzZWFyY2hcIlxuICAgICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgIDxzcGFuIG1hdFByZWZpeD5cbiAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgI2tleXdvcmRNYXRJbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJrZXl3b3JkXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJrZXl3b3JkQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIG5hbWU9XCJmaWx0ZXItaW5wdXRcIlxuICAgICAgICAgIFtmc0NsZWFyXT1cInRydWVcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlclwiPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbHRlckFjdGlvbnM+XG4gIDxkaXYgY2xhc3M9XCJmaWx0ZXItYWN0aW9uc1wiPlxuICAgIDxmcy1maWx0ZXItYWN0aW9uc1xuICAgICAgKm5nSWY9XCJhY3Rpb25zVmlzaWJsZSQgfCBhc3luY1wiXG4gICAgICBbYWN0aW9uc109XCJhY3Rpb25zJCB8IGFzeW5jXCJcbiAgICAgIFtrZWJhYkFjdGlvbnNdPVwibWVudUFjdGlvbnMkIHwgYXN5bmNcIj5cbiAgICA8L2ZzLWZpbHRlci1hY3Rpb25zPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyVG9vbGJhcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcnNCdG5WaXNpYmxlJCB8IGFzeW5jXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci10b29iYXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNWaXNpYmxlSXRlbU9yU29ydGluZ1wiPlxuICAgICAgICA8YVxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXJzLWJ1dHRvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdtYXQtcmFpc2VkLWJ1dHRvbic6IGNvbmZpZy5idXR0b24uc3R5bGUgPT09ICdyYWlzZWQnICYmIGNvbmZpZy5idXR0b24ubGFiZWwsXG4gICAgICAgICAgICAgICdtYXQtZmxhdC1idXR0b24nOiBjb25maWcuYnV0dG9uLnN0eWxlID09PSAnZmxhdCcgJiYgY29uZmlnLmJ1dHRvbi5sYWJlbCxcbiAgICAgICAgICAgICAgJ21hdC1zdHJva2VkLWJ1dHRvbic6IGNvbmZpZy5idXR0b24uc3R5bGUgPT09ICdzdHJva2VkJyAmJiBjb25maWcuYnV0dG9uLmxhYmVsLFxuICAgICAgICAgICAgICAnbWF0LWJ1dHRvbic6IGNvbmZpZy5idXR0b24uc3R5bGUgPT09ICdiYXNpYycgJiYgY29uZmlnLmJ1dHRvbi5sYWJlbCxcbiAgICAgICAgICAgICAgJ21hdC1pY29uLWJ1dHRvbic6IGNvbmZpZy5idXR0b24uc3R5bGUgPT09ICdpY29uJyB8fCAhY29uZmlnLmJ1dHRvbi5sYWJlbCAgXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VWaXNpYmlsaXR5Q2xpY2soIXNob3dGaWx0ZXJNZW51LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJjb25maWcuYnV0dG9uLmNvbG9yXCI+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY29uZmlnLmJ1dHRvbi5pY29uXCI+e3tjb25maWcuYnV0dG9uLmljb259fTwvbWF0LWljb24+XG4gICAgICAgICAge3sgY29uZmlnLmJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxhIFxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJyZWxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJyZWxvYWRcIlxuICAgICAgICAgICpuZ0lmPVwiY29uZmlnLnJlbG9hZFwiPlxuICAgICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
577
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBb0JuRSxNQUFNLE9BQU8sZUFBZTtJQWtEMUIsWUFDZ0QsY0FBOEIsRUFDcEUsY0FBc0MsRUFDdEMsS0FBYSxFQUNiLGVBQXlDLEVBQ3pDLFlBQWdDLEVBQ2hDLFFBQTJCO1FBTFcsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ3BFLG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQUN0QyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQTBCO1FBQ3pDLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUNoQyxhQUFRLEdBQVIsUUFBUSxDQUFtQjtRQTVDckIsZUFBVSxHQUFRLElBQUksQ0FBQztRQUN2QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN0QixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQVMzQyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUd2QixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUd0QixrQkFBYSxHQUFHLElBQUksQ0FBQztRQU9yQixzQkFBaUIsR0FBRyxRQUFRLENBQUM7UUFDN0IsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUVWLFlBQU8sR0FBbUIsSUFBSSxDQUFDO1FBR2pDLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzFCLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBVXRDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTFCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTzthQUN4QixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU87YUFDeEIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQTVFRCxJQUNJLFNBQVMsQ0FBQyxNQUFNO1FBQ2xCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFDSSxTQUFTLENBQUMsTUFBTTtRQUNsQixJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQXVCRCxJQUNXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztJQUN0QyxDQUFDO0lBNENELElBQVcsTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN4QixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBVyx1QkFBdUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFBO0lBQ3ZFLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQ3BDLENBQUM7SUFFTSxRQUFRO1FBQ2Isd0JBQXdCO1FBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO2dCQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDZDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFDMUIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sS0FBSzs7UUFDVixNQUFBLElBQUksQ0FBQyxlQUFlLDBDQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxVQUFVLENBQUMsSUFBeUI7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXdERztJQUNJLFlBQVksQ0FBQyxNQUFNO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUs7aUJBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUVyQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLE9BQU87YUFDUjtZQUVELFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLElBQUk7UUFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLElBQUk7UUFDVCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLHFCQUFxQixDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSTtRQUU5QyxJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUN6QjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLEtBQUs7YUFDZCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxrQkFBa0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNkLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7YUFDMUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLO2FBQ2QsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxZQUFZLENBQUMsSUFBWTtRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSzthQUNwQixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7UUFFdEMsT0FBTyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFTSxRQUFRLENBQUMsSUFBWTtRQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7WUFFbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUFFLE9BQU07U0FBRTtRQUVyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUVqQixJQUFJLENBQUMsWUFBWSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVNLFNBQVMsQ0FBQyxJQUFZO1FBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUFFLE9BQU07U0FBRTtRQUVyQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU0sZ0JBQWdCLENBQ3JCLElBQVksRUFDWixNQUErQjs7UUFFL0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTTtTQUFFO1FBRXJCLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBQSxNQUFNLENBQUMsS0FBSyxtQ0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBQSxNQUFNLENBQUMsU0FBUyxtQ0FBSSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBRXBELElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsSUFBWTtRQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVyRCxJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU07aUJBQ2YsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDTDthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFjO1FBQ3BDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDakMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUNwQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDakMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxJQUFJO1FBQ1QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMxQztRQUVELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLElBQUksQ0FBQyxLQUFLO2FBQ1AsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJO1FBQ3ZCLElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVqQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDckI7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsS0FBSztRQUNqQixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUk7UUFDeEIsSUFBSSxLQUFLLEVBQUU7WUFDVCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUUvQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDdkQ7SUFDSCxDQUFDO0lBRU0sT0FBTyxDQUFDLElBQUk7UUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNkLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXpDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztlQUNqRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpFLElBQUksY0FBYyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBRWxCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNwQztTQUNGO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUU5QixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxhQUFhLENBQUMsT0FBeUI7UUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYztRQUNuQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLGNBQWM7UUFDbkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSx1QkFBdUI7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNJLG1CQUFtQjtRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUEwQjtRQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8scUJBQXFCLENBQUMsTUFBb0I7UUFDaEQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNsQztRQUVELE1BQU0sbUNBQ0QsQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxHQUMzQixNQUFNLENBQ1YsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRTtZQUN6QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDZjtJQUNILENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDaEQsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNoQyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztpQkFDdkIsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLEtBQW9CLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEVBQ3pELFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQ3RCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7aUJBQ3hCLElBQUksQ0FDSCxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQ2pCLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCO2lCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29CQUNsQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVNLGFBQWEsQ0FBQyxPQUFPO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLFNBQVM7YUFDWCxJQUFJLENBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixvQkFBb0IsRUFBRSxFQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQ2xELFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTywyQkFBMkI7UUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7UUFDbEQsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxLQUFlLElBQUksUUFBUSxDQUFDO1NBQ2xFO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQjtRQUNoQyxJQUFJLENBQUMsWUFBWTthQUNkLFlBQVk7YUFDWixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCx1RkFBdUY7SUFDL0Usc0JBQXNCO1FBQzVCLGFBQWEsQ0FDWDtZQUNFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUTtZQUM3QixJQUFJLENBQUMsV0FBVztTQUNqQixDQUFDO2FBQ0QsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGFBQWEsSUFBSSxVQUFVLENBQUMsRUFDckUsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFFbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2FBQzNDLElBQUksQ0FBQyxDQUFDLElBQW1CLEVBQUUsRUFBRTtZQUM1QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7OzZHQWhuQlUsZUFBZSxrQkFtREosZ0JBQWdCO2lHQW5EM0IsZUFBZSw2YkFaZjtRQUNULHNCQUFzQjtRQUN0Qix3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLHFCQUFxQjtRQUNyQixzQkFBc0I7UUFDdEIsa0JBQWtCO1FBQ2xCLHNCQUFzQjtRQUN0QixpQkFBaUI7S0FDbEIsaUVBcUJhLHdCQUF3QiwrSUFHQSxRQUFRLDZCQzlFaEQsMHpHQWlHYzs0RkR4Q0QsZUFBZTtrQkFqQjNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFNBQVMsRUFBRSxDQUFDLHlCQUF5QixDQUFDO29CQUN0QyxXQUFXLEVBQUUseUJBQXlCO29CQUN0QyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsU0FBUyxFQUFFO3dCQUNULHNCQUFzQjt3QkFDdEIsd0JBQXdCO3dCQUN4QiwyQkFBMkI7d0JBQzNCLHFCQUFxQjt3QkFDckIsc0JBQXNCO3dCQUN0QixrQkFBa0I7d0JBQ2xCLHNCQUFzQjt3QkFDdEIsaUJBQWlCO3FCQUNsQjtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQW9ESSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQjs4TUFoRGxDLFNBQVM7c0JBRFosS0FBSzt1QkFBQyxRQUFRO2dCQU1YLFNBQVM7c0JBRFosS0FBSzt1QkFBQyxRQUFRO2dCQUtDLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsZUFBZTtzQkFBOUIsS0FBSztnQkFDVyxNQUFNO3NCQUF0QixNQUFNO2dCQUNVLE1BQU07c0JBQXRCLE1BQU07Z0JBQ1UsS0FBSztzQkFBckIsTUFBTTtnQkFHQSxTQUFTO3NCQURmLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUkvQixlQUFlO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFJekMsY0FBYztzQkFEcEIsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBSTFCLGFBQWE7c0JBRG5CLFdBQVc7dUJBQUMsc0JBQXNCO2dCQUk1QixhQUFhO3NCQURuQixXQUFXO3VCQUFDLGlCQUFpQjtnQkFJbkIsVUFBVTtzQkFEcEIsV0FBVzt1QkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFjdGlvbnNDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9hY3Rpb25zLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgb2JqZWN0c0FyZUVxdWFscyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvY29tcGFyZSc7XG5pbXBvcnQgeyBGc0ZpbHRlckFjdGlvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWcsIEZpbHRlclNvcnQsIElGaWx0ZXJDb25maWdJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IElTb3J0aW5nQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2ZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVVwZGF0ZUZpbHRlckl0ZW1Db25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3VwZGF0ZS1maWx0ZXItaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRnNGaWx0ZXJDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmlsdGVyLWNvbmZpZyc7XG5pbXBvcnQgeyBCYXNlSXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9pdGVtcy9iYXNlLWl0ZW0nO1xuaW1wb3J0IHsgRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXh0ZXJuYWwtcGFyYW1zLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJzaXN0YW5jZVBhcmFtc0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHRlcm5hbC1wYXJhbXMvcGVyc2lzdGFuY2UtcGFyYW1zLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtc0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHRlcm5hbC1wYXJhbXMvcXVlcnktcGFyYW1zLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTYXZlZEZpbHRlcnNDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXh0ZXJuYWwtcGFyYW1zL3NhdmVkLWZpbHRlcnMtY29udHJvbGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZzRmlsdGVyT3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXItb3ZlcmxheS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvY3VzQ29udHJvbGxlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb2N1cy1jb250cm9sbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnNGaWx0ZXJJdGVtc1N0b3JlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaXRlbXMtc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXJTdGF0dXNCYXJEaXJlY3RpdmUgfSBmcm9tICcuLy4uLy4uL2RpcmVjdGl2ZXMvc3RhdHVzLWJhci9zdGF0dXMtYmFyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGU19GSUxURVJfQ09ORklHIH0gZnJvbSAnLi8uLi8uLi9pbmplY3RvcnMvZmlsdGVyLWNvbmZpZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtZmlsdGVyJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtcbiAgICBGc0ZpbHRlck92ZXJsYXlTZXJ2aWNlLFxuICAgIEV4dGVybmFsUGFyYW1zQ29udHJvbGxlcixcbiAgICBQZXJzaXN0YW5jZVBhcmFtc0NvbnRyb2xsZXIsXG4gICAgUXVlcnlQYXJhbXNDb250cm9sbGVyLFxuICAgIEZvY3VzQ29udHJvbGxlclNlcnZpY2UsXG4gICAgRnNGaWx0ZXJJdGVtc1N0b3JlLFxuICAgIFNhdmVkRmlsdGVyc0NvbnRyb2xsZXIsXG4gICAgQWN0aW9uc0NvbnRyb2xsZXIsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCdjb25maWcnKVxuICBzZXQgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgIHRoaXMuX2luaXRGaWx0ZXJXaXRoQ29uZmlnKGNvbmZpZyk7XG4gIH1cblxuICBASW5wdXQoJ2ZpbHRlcicpXG4gIHNldCBzZXRGaWx0ZXIoY29uZmlnKSB7XG4gICAgdGhpcy5faW5pdEZpbHRlcldpdGhDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93U29ydEJ5OiBhbnkgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd0ZpbHRlcklucHV0ID0gdHJ1ZTtcbiAgQE91dHB1dCgpIHB1YmxpYyBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAQ29udGVudENoaWxkKEZpbHRlclN0YXR1c0JhckRpcmVjdGl2ZSlcbiAgcHVibGljIHN0YXR1c0JhcjogRmlsdGVyU3RhdHVzQmFyRGlyZWN0aXZlO1xuXG4gIEBWaWV3Q2hpbGQoJ2tleXdvcmRNYXRJbnB1dCcsIHsgcmVhZDogTWF0SW5wdXQgfSlcbiAgcHVibGljIGtleXdvcmRNYXRJbnB1dDogTWF0SW5wdXQ7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5maWx0ZXJzLW9wZW4nKVxuICBwdWJsaWMgc2hvd0ZpbHRlck1lbnUgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLndpbmRvdy1kZXNrdG9wJylcbiAgcHVibGljIHdpbmRvd0Rlc2t0b3AgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLWZpbHRlcicpXG4gIHB1YmxpYyBmc0ZpbHRlckNsYXNzID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmhhcy1rZXl3b3JkJylcbiAgcHVibGljIGdldCBoYXNLZXl3b3JkKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJJdGVtcy5oYXNLZXl3b3JkO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaFBsYWNlaG9sZGVyID0gJ1NlYXJjaCc7XG4gIHB1YmxpYyBrZXl3b3JkID0gJyc7XG5cbiAgcHJvdGVjdGVkIF9jb25maWc6IEZzRmlsdGVyQ29uZmlnID0gbnVsbDtcblxuICBwcml2YXRlIF9zb3J0OiBGaWx0ZXJTb3J0O1xuICBwcml2YXRlIF9maWx0ZXJzQnRuVmlzaWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwcml2YXRlIF9rZXl3b3JkVmlzaWJsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuICBwcml2YXRlIF9oYXNGaWx0ZXJDaGlwcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHJpdmF0ZSBfa2V5d29yZCQgPSBuZXcgU3ViamVjdCgpO1xuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGU19GSUxURVJfQ09ORklHKSBwcml2YXRlIF9kZWZhdWx0Q29uZmlnOiBGc0ZpbHRlckNvbmZpZyxcbiAgICBwcml2YXRlIF9maWx0ZXJPdmVybGF5OiBGc0ZpbHRlck92ZXJsYXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9leHRlcm5hbFBhcmFtczogRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyLFxuICAgIHByaXZhdGUgX2ZpbHRlckl0ZW1zOiBGc0ZpbHRlckl0ZW1zU3RvcmUsXG4gICAgcHJpdmF0ZSBfYWN0aW9uczogQWN0aW9uc0NvbnRyb2xsZXIsXG4gICkge1xuICAgIHRoaXMuX2xpc3RlbldoZW5GaWx0ZXJSZWFkeSgpO1xuICAgIHRoaXMuX3VwZGF0ZVdpbmRvd1dpZHRoKCk7XG5cbiAgICB0aGlzLl9maWx0ZXJPdmVybGF5LmF0dGFjaCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93RmlsdGVyTWVudSA9IHRydWU7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuZGV0YWNoJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dGaWx0ZXJNZW51ID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2xpc3RlbldpbmRvd1Jlc2l6ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBjb25maWcoKTogRnNGaWx0ZXJDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlclBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMudmFsdWVzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlclBhcmFtc1F1ZXJ5KCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMudmFsdWVzQXNRdWVyeSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMuaXRlbXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpc2libGVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMudmlzaWJsZUl0ZW1zO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtc1JlYWR5JCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMucmVhZHkkO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNGaWx0ZXJDaGlwcyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0ZpbHRlckNoaXBzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzVmlzaWJsZUl0ZW1PclNvcnRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUl0ZW1zLmxlbmd0aCA+IDAgfHwgISF0aGlzLl9maWx0ZXJJdGVtcy5zb3J0QnlJdGVtXG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlcnNCdG5WaXNpYmxlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyc0J0blZpc2libGUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBrZXl3b3JkVmlzaWJsZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2tleXdvcmRWaXNpYmxlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aW9uc1Zpc2libGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zLnZpc2libGUkO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3Rpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucy5hY3Rpb25zJDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbWVudUFjdGlvbnMkKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25zLm1lbnVBY3Rpb25zJDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAvLyBBdm9pZCBuZ0NoYW5nZXMgZXJyb3JcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fbGlzdGVuSW5wdXRDaGFuZ2VzKClcbiAgICB0aGlzLl9saXN0ZW5JbnRlcm5hbEl0ZW1zQ2hhbmdlKCk7XG4gICAgdGhpcy5faW5pdE92ZXJsYXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95RmlsdGVyRHJhd2VyKCk7XG5cbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cygpIHtcbiAgICB0aGlzLmtleXdvcmRNYXRJbnB1dD8uZm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVTb3J0KHNvcnQ6IElTb3J0aW5nQ2hhbmdlRXZlbnQpIHtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy51cGRhdGVTb3J0KHNvcnQpXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRG8gdXBkYXRlIHZhbHVlIG9mIHNvbWUgZmllbGRcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlcyAtIHZhbHVlcyBmb3IgdXBkYXRlXG4gICAqXG4gICAqIFRvIHVwZGF0ZSB0ZXh0IHZhbHVlIGp1c3QgcGFzcyBuZXcgdGV4dCB2YWx1ZVxuICAgKlxuICAgKiBwdWJsaWMgdXBkYXRlU2VsZWN0VmFsdWUodmFsKSB7XG4gICAqICAgdGhpcy5maWx0ZXJFbC51cGRhdGVWYWx1ZXMoeyBrZXl3b3JkOiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIHNlbGVjdCBvciBvYnNlcnZhYmxlIHNlbGVjdCB5b3UgY291bGQgcGFzcyBzdWl0YWJsZSB2YWx1ZVxuICAgKlxuICAgKiBwdWJsaWMgdXBkYXRlU2VsZWN0VmFsdWUodmFsOiBudW1iZXIpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IHNpbXBsZV9zZWxlY3Q6IHZhbCB9LCB7IG9ic2VydmFibGVfc2VsZWN0OiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIGNoZWNrYm94IHZhbHVlIGp1c3QgcGFzcyB0cnVlL2ZhbHNlIGFzIHZhbHVlXG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVDaGVja294KHZhbDogYm9vbGVhbikge1xuICAgKiAgIHRoaXMuZmlsdGVyRWwudXBkYXRlVmFsdWVzKHsgY2hlY2tib3g6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKiBUbyB1cGRhdGUgcmFuZ2UgdmFsdWUganVzdCBwYXNzIG9iamVjdCB3aXRoIG1pbiZtYXggb2JqZWN0IG9yIGp1c3Qgd2l0aCBvbmUgb2YgdGFyZ2V0c1xuICAgKlxuICAgKiBFeC46IHsgbWluOiAxMCwgbWF4IDE1IH0sIHsgbWluOiA1IH0sIHsgbWF4IDUgfVxuICAgKlxuICAgKiBwdWJsaWMgdXBkYXRlUmFuZ2UodmFsKSB7XG4gICAqICAgdGhpcy5maWx0ZXJFbC51cGRhdGVWYWx1ZXMoeyByYW5nZTogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqIFRvIHVwZGF0ZSBhdXRvY29tcGxldGUganVzdCBwYXNzIG9iamVjdCB3aXRoIG5hbWUvdmFsdWUgZmllbGRzXG4gICAqXG4gICAqIEV4LjogeyBuYW1lOiAnSm9obiBEb2UnLCB2YWx1ZTogMSB9XG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVBdXRvY29tcGxldGUodmFsKSB7XG4gICAqICAgdGhpcy5maWx0ZXJFbC51cGRhdGVWYWx1ZXMoeyBhdXRvY29tcGxldGVfdXNlcl9pZDogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqIFRvIHVwZGF0ZSBhdXRvY29tcGxldGVjaGlwcyBqdXN0IHBhc3M6XG4gICAqXG4gICAqIDEpIG9iamVjdCB3aXRoIG5hbWUvdmFsdWUgZmllbGRzIC0gd2lsbCBiZSBhcHBlbmRlZCB0byBleGlzdGluZyBzZXQgb2YgdmFsdWVzXG4gICAqXG4gICAqIHsgbmFtZTogJ0pvaG4gRG9lJywgdmFsdWU6IDEgfVxuICAgKlxuICAgKiAyKSBhcnJheSBvZiBvYmplY3RzIC0gd2lsbCBiZSBhcHBlbmRlZCB0byBleGlzdGluZyBzZXQgb2YgdmFsdWVzXG4gICAqXG4gICAqIFt7IG5hbWU6ICdKb2huIERvZScsIHZhbHVlOiAxIH0sIHsgbmFtZTogJ0RhcnlhIEZpbGlwb3ZhJywgdmFsdWU6IDIgfV1cbiAgICpcbiAgICogMykgbnVsbCAtIGNsZWFyIGV4aXN0aW5nIHNldCBvZiB2YWx1ZXNcbiAgICpcbiAgICogcHVibGljIHVwZGF0ZUF1dG9jb21wbGV0ZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IGF1dG9jb21wbGV0ZWNoaXBzX3VzZXJfaWQ6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKi9cbiAgcHVibGljIHVwZGF0ZVZhbHVlcyh2YWx1ZXMpIHtcbiAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgZmlsdGVySXRlbSA9IHRoaXMuaXRlbXNcbiAgICAgICAgLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0ga2V5KTtcblxuICAgICAgaWYgKCFmaWx0ZXJJdGVtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsdGVySXRlbS5tb2RlbCA9IHZhbHVlc1trZXldO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhpZGUoKSB7XG4gICAgdGhpcy5jaGFuZ2VWaXNpYmlsaXR5KGZhbHNlKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93KCkge1xuICAgIHRoaXMuY2hhbmdlVmlzaWJpbGl0eSh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VWaXNpYmlsaXR5Q2xpY2sodmFsdWUsIGV2ZW50ID0gbnVsbCkge1xuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZVZpc2liaWxpdHkodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtVmFsdWVzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5vbkVtcHR5SXRlbVZhbHVlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNJdGVtVmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAuc29tZSgoaXRlbSkgPT4gaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtVmFsdWUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXNcbiAgICAgIC5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IG5hbWUpO1xuXG4gICAgcmV0dXJuIGl0ZW0/LnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNob3dJdGVtKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0obmFtZSk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgaXRlbS5oaWRlID0gZmFsc2U7XG5cbiAgICAgIHRoaXMuX2ZpbHRlckl0ZW1zLnVwZGF0ZUl0ZW1zVmlzaWJsaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhpZGVJdGVtKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0obmFtZSk7XG5cbiAgICBpZiAoIWl0ZW0pIHsgcmV0dXJuIH1cblxuICAgIGl0ZW0uaGlkZSA9IHRydWU7XG5cbiAgICB0aGlzLl9maWx0ZXJJdGVtcy51cGRhdGVJdGVtc1Zpc2libGl0eSgpO1xuICB9XG5cbiAgcHVibGljIGNsZWFySXRlbShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKG5hbWUpO1xuXG4gICAgaWYgKCFpdGVtKSB7IHJldHVybiB9XG5cbiAgICBpdGVtLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSXRlbUNvbmZpZyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBJVXBkYXRlRmlsdGVySXRlbUNvbmZpZ1xuICApOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKG5hbWUpO1xuXG4gICAgaWYgKCFpdGVtKSB7IHJldHVybiB9XG5cbiAgICBpdGVtLmxhYmVsID0gcGFyYW1zLmxhYmVsID8/IGl0ZW0ubGFiZWw7XG4gICAgaXRlbS5jaGlwTGFiZWwgPSBwYXJhbXMuY2hpcExhYmVsID8/IGl0ZW0uY2hpcExhYmVsO1xuXG4gICAgdGhpcy5fZmlsdGVySXRlbXMudXBkYXRlSXRlbXNWaXNpYmxpdHkoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtVmFsdWVDaGFuZ2UkKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB8IG51bGwge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQoKGkpID0+IGkubmFtZSA9PT0gbmFtZSk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWUkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5tb2RlbDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoYW5nZVZpc2liaWxpdHkoc3RhdGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoc3RhdGUgPT09IHRoaXMuc2hvd0ZpbHRlck1lbnUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gICAgICByZXR1cm4gdGhpcy5fZGVzdHJveUZpbHRlckRyYXdlcigpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5oYXNWaXNpYmxlSXRlbU9yU29ydGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xpc3RlbkVzY0J1dHRvbigpO1xuXG4gICAgdGhpcy5vcGVuZWQuZW1pdCgpO1xuXG4gICAgdGhpcy5fZmlsdGVyT3ZlcmxheS5vcGVuKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5fZmlsdGVySXRlbXMudmFsdWVzQXNRdWVyeSgpO1xuICAgIHRoaXMuX3NvcnQgPSB0aGlzLl9maWx0ZXJJdGVtcy5nZXRTb3J0KCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcuaW5pdCkge1xuICAgICAgdGhpcy5jb25maWcuaW5pdChkYXRhLCB0aGlzLl9zb3J0LCB0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVDaGlwc1Zpc2liaWxpdHkoKTtcblxuICAgIHRoaXMuaXRlbXNcbiAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGl0ZW0uaW5pdChpdGVtLCB0aGlzKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKGV2ZW50ID0gbnVsbCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlsdGVySXRlbXMuZmlsdGVyc0NsZWFyKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcuY2xlYXIpIHtcbiAgICAgIHRoaXMuY29uZmlnLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXl3b3JkID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgZmlsdGVyIHdpbmRvdyBhbmQgZG8gY2hhbmdlIGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKGV2ZW50KSB7XG4gICAgdGhpcy5jaGFuZ2VWaXNpYmlsaXR5Q2xpY2soZmFsc2UsIGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWQoZXZlbnQgPSBudWxsKSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2ZpbHRlckl0ZW1zLnZhbHVlc0FzUXVlcnkoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5yZWxvYWQpIHtcbiAgICAgIHRoaXMuY29uZmlnLnJlbG9hZChkYXRhLCB0aGlzLl9maWx0ZXJJdGVtcy5nZXRTb3J0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtKG5hbWUpOiBCYXNlSXRlbTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gbmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZmV0Y2hRdWVyeVBhcmFtcygpOiB2b2lkIHtcbiAgICB0aGlzLl9leHRlcm5hbFBhcmFtcy5mZXRjaFF1ZXJ5UGFyYW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBjaGFuZ2UgY2FsbGJhY2sgYW5kIGFwcGx5IG5ldyBmaWx0ZXIgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgY2hhbmdlKCkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9maWx0ZXJJdGVtcy52YWx1ZXNBc1F1ZXJ5KCk7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuX2ZpbHRlckl0ZW1zLmdldFNvcnQoKTtcblxuICAgIGNvbnN0IHNvcnRpbmdDaGFuZ2VkID0gKCghc29ydCB8fCAhdGhpcy5fc29ydCkgJiYgc29ydCAhPT0gdGhpcy5fc29ydClcbiAgICAgIHx8IChzb3J0ICYmIHRoaXMuX3NvcnQgJiYgIW9iamVjdHNBcmVFcXVhbHModGhpcy5fc29ydCwgc29ydCkpO1xuXG4gICAgaWYgKHNvcnRpbmdDaGFuZ2VkKSB7XG4gICAgICB0aGlzLl9zb3J0ID0gc29ydDtcblxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNvcnRDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5jb25maWcuc29ydENoYW5nZShkYXRhLCBzb3J0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWcuY2hhbmdlKSB7XG4gICAgICB0aGlzLmNvbmZpZy5jaGFuZ2UoZGF0YSwgc29ydCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ2hpcHNWaXNpYmlsaXR5KCk7XG5cbiAgICAvLyB2aXNpYmlsaXR5IGZvciBhY3Rpb25zIGNhbiBkZXBlbmQgb24gZmlsdGVycyBzdGF0ZVxuICAgIHRoaXMuX2FjdGlvbnMudXBkYXRlQWN0aW9uc1Zpc2liaWxpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZmlsdGVyIGFjdGlvbnMgY29uZmlnXG4gICAqIEBwYXJhbSBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlQWN0aW9ucyhhY3Rpb25zOiBGc0ZpbHRlckFjdGlvbltdKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aW9ucy5pbml0QWN0aW9ucyhhY3Rpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IFwiRmlsdGVyc1wiIGJ1dHRvblxuICAgKi9cbiAgcHVibGljIHNob3dGaWx0ZXJzQnRuKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZpbHRlcnNCdG5WaXNpYmxlJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgXCJGaWx0ZXJzXCIgYnV0dG9uXG4gICAqL1xuICBwdWJsaWMgaGlkZUZpbHRlcnNCdG4oKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsdGVyc0J0blZpc2libGUkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgXCJLZXl3b3JkXCIgZmllbGQgaWYgaXQgcHJlc2VudFxuICAgKi9cbiAgcHVibGljIHNob3dLZXl3b3JkRmllbGQoKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5d29yZFZpc2libGUkLm5leHQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBcIktleXdvcmRcIiBmaWVsZCBpZiBpdCBwcmVzZW50XG4gICAqL1xuICBwdWJsaWMgaGlkZUtleXdvcmRGaWVsZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9rZXl3b3JkVmlzaWJsZSQubmV4dChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogR28gdGhyb3VnaCBhY3Rpb25zIGFuZCBjaGVjayBzaG93KCkgY2FsbGJhY2sgYW5kIHVwZGF0ZSB2aXNpYmxlIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVBY3Rpb25zVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25zLnVwZGF0ZUFjdGlvbnNWaXNpYmlsaXR5KCk7XG4gIH1cblxuICAvKipcbiAgICogR28gdGhyb3VnaCBhY3Rpb25zIGFuZCBjaGVjayBkaXNhYmxlZCgpIGNhbGxiYWNrIGFuZCB1cGRhdGUgZGlzYWJsZWQgc3RhdGVcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVEaXNhYmxlZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGlvbnMudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldEl0ZW1zKGl0ZW1zOiBJRmlsdGVyQ29uZmlnSXRlbVtdKSB7XG4gICAgdGhpcy5fZmlsdGVySXRlbXMuZGVzdHJveUl0ZW1zKCk7XG5cbiAgICB0aGlzLmNvbmZpZy5pdGVtcyA9IGl0ZW1zO1xuICAgIHRoaXMuX2ZpbHRlckl0ZW1zLnNldENvbmZpZyh0aGlzLl9jb25maWcpO1xuICAgIHRoaXMuX2V4dGVybmFsUGFyYW1zLmluaXRJdGVtcygpO1xuXG4gICAgdGhpcy5fc3luY1NlYXJjaElucHV0V2l0aEtleXdvcmQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRGaWx0ZXJXaXRoQ29uZmlnKGNvbmZpZzogRmlsdGVyQ29uZmlnKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLl9maWx0ZXJJdGVtcy5kZXN0cm95SXRlbXMoKTtcbiAgICB9XG5cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi4odGhpcy5fZGVmYXVsdENvbmZpZyB8fCB7fSksXG4gICAgICAuLi5jb25maWcsXG4gICAgfTtcblxuICAgIHRoaXMuX2NvbmZpZyA9IG5ldyBGc0ZpbHRlckNvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2FjdGlvbnMuc2V0Q29uZmlnKHRoaXMuX2NvbmZpZyk7XG4gICAgdGhpcy5fZmlsdGVySXRlbXMuc2V0Q29uZmlnKHRoaXMuX2NvbmZpZyk7XG4gICAgdGhpcy5fZXh0ZXJuYWxQYXJhbXMuc2V0Q29uZmlnKHRoaXMuX2NvbmZpZyk7XG5cbiAgICB0aGlzLl9zeW5jU2VhcmNoSW5wdXRXaXRoS2V5d29yZCgpO1xuXG4gICAgaWYgKCEhdGhpcy5jb25maWcucmVsb2FkV2hlbkNvbmZpZ0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVzdHJveUZpbHRlckRyYXdlcigpIHtcbiAgICB0aGlzLl9maWx0ZXJPdmVybGF5LmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVXaW5kb3dXaWR0aCgpIHtcbiAgICB0aGlzLndpbmRvd0Rlc2t0b3AgPSB3aW5kb3cuaW5uZXJXaWR0aCA+IDEyMDA7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Fc2NCdXR0b24oKSB7XG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQod2luZG93LCAna2V5dXAnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBldmVudC5jb2RlID09PSAnRXNjYXBlJyksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuY2xvc2VkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlV2luZG93V2lkdGgoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBrZXl3b3JkQ2hhbmdlKGtleXdvcmQpIHtcbiAgICB0aGlzLl9rZXl3b3JkJC5uZXh0KGtleXdvcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuSW5wdXRDaGFuZ2VzKCkge1xuICAgIHRoaXMuX2tleXdvcmQkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBrZXl3b3JkSXRlbSA9IHRoaXMuX2ZpbHRlckl0ZW1zLmtleXdvcmRJdGVtO1xuICAgICAgICBrZXl3b3JkSXRlbS5tb2RlbCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jU2VhcmNoSW5wdXRXaXRoS2V5d29yZCgpOiB2b2lkIHtcbiAgICBjb25zdCBrZXl3b3JkSXRlbSA9IHRoaXMuX2ZpbHRlckl0ZW1zLmtleXdvcmRJdGVtO1xuICAgIGlmIChrZXl3b3JkSXRlbSkge1xuICAgICAgdGhpcy5rZXl3b3JkID0ga2V5d29yZEl0ZW0ubW9kZWw7XG4gICAgICB0aGlzLnNlYXJjaFBsYWNlaG9sZGVyID0ga2V5d29yZEl0ZW0ubGFiZWwgYXMgc3RyaW5nIHx8ICdTZWFyY2gnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlbkludGVybmFsSXRlbXNDaGFuZ2UoKSB7XG4gICAgdGhpcy5fZmlsdGVySXRlbXNcbiAgICAgIC5pdGVtc0NoYW5nZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRPdmVybGF5KCkge1xuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuc2V0Q2xlYXJGbih0aGlzLmNsZWFyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuc2V0RG9uZUZuKHRoaXMuaGlkZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8vIFdlIG1heSBuZWVkIHNvbWUgdGltZSB0byByZWNpZXZlIGV4dGVybmFsIHBhcmFtcyBhbmQgYWZ0ZXIgdGhhdCByZWFkeSBjYW4gYmUgZW1pdHRlZFxuICBwcml2YXRlIF9saXN0ZW5XaGVuRmlsdGVyUmVhZHkoKSB7XG4gICAgY29tYmluZUxhdGVzdChcbiAgICAgIFtcbiAgICAgICAgdGhpcy5fZXh0ZXJuYWxQYXJhbXMucGVuZGluZyQsXG4gICAgICAgIHRoaXMuaXRlbXNSZWFkeSQsXG4gICAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoW3BlbmRpbmdQYXJhbXMsIGl0ZW1zUmVhZHldKSA9PiAhcGVuZGluZ1BhcmFtcyAmJiBpdGVtc1JlYWR5KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgdGhpcy5fc3luY1NlYXJjaElucHV0V2l0aEtleXdvcmQoKTtcblxuICAgICAgICB0aGlzLnJlYWR5LmVtaXQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQ2hpcHNWaXNpYmlsaXR5KCkge1xuICAgIGNvbnN0IGhhc0ZpbHRlckNoaXBzID0gdGhpcy5fZmlsdGVySXRlbXMuaXRlbXNcbiAgICAgIC5zb21lKChpdGVtOiBCYXNlSXRlbTxhbnk+KSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLmlzQ2hpcFZpc2libGU7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2hhc0ZpbHRlckNoaXBzJC5uZXh0KGhhc0ZpbHRlckNoaXBzKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZpbHRlci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci1pbm5lci1jb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0tleXdvcmQ7IGVsc2UgZmlsdGVyS2V5d29yZFwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclN0YXR1c0JhckNoaXBzXCI+PC9uZy1jb250YWluZXI+ICAgICAgXG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRvb2xiYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlckFjdGlvbnNcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0tleXdvcmRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyU3RhdHVzQmFyQ2hpcHNcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJTdGF0dXNCYXJDaGlwcz5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXR1c0JhclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItc3RhdHVzLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsgJ2hhcy1zdGF0dXMnOiAhIWZpbHRlclN0YXR1cy50ZXh0Q29udGVudCB9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXN0YXR1c1wiICNmaWx0ZXJTdGF0dXM+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNCYXIudGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLmNoaXBzICYmIGhhc0ZpbHRlckNoaXBzJCB8IGFzeW5jXCI+XG4gICAgPGZzLWZpbHRlci1jaGlwcyAgICBcbiAgICAgIGNsYXNzPVwiZmlsdGVyLWNoaXBzXCJcbiAgICAgIFtmaWx0ZXJzXT1cIml0ZW1zXCI+XG4gICAgPC9mcy1maWx0ZXItY2hpcHM+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmaWx0ZXJLZXl3b3JkPlxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWtleXdvcmRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwia2V5d29yZFZpc2libGUkIHwgYXN5bmNcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBcbiAgICAgICAgICBbZmxvYXRMYWJlbF09XCInbmV2ZXInXCIgXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLXBhZGxlc3NcIiBcbiAgICAgICAgICBbbmdDbGFzc109XCJzZWFyY2hcIlxuICAgICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgIDxzcGFuIG1hdFByZWZpeD5cbiAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgI2tleXdvcmRNYXRJbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJrZXl3b3JkXCJcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJrZXl3b3JkQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIG5hbWU9XCJmaWx0ZXItaW5wdXRcIlxuICAgICAgICAgIFtmc0NsZWFyXT1cInRydWVcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlclwiPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ZpbHRlckFjdGlvbnM+XG4gIDxkaXYgY2xhc3M9XCJmaWx0ZXItYWN0aW9uc1wiPlxuICAgIDxmcy1maWx0ZXItYWN0aW9uc1xuICAgICAgKm5nSWY9XCJhY3Rpb25zVmlzaWJsZSQgfCBhc3luY1wiXG4gICAgICBbYWN0aW9uc109XCJhY3Rpb25zJCB8IGFzeW5jXCJcbiAgICAgIFtrZWJhYkFjdGlvbnNdPVwibWVudUFjdGlvbnMkIHwgYXN5bmNcIj5cbiAgICA8L2ZzLWZpbHRlci1hY3Rpb25zPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyVG9vbGJhcj5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci10b29iYXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyc0J0blZpc2libGUkIHwgYXN5bmNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNWaXNpYmxlSXRlbU9yU29ydGluZ1wiPlxuICAgICAgICA8YVxuICAgICAgICAgICAgbWF0LWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXJzLWJ1dHRvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdtYXQtcmFpc2VkLWJ1dHRvbic6IGNvbmZpZy5idXR0b24uc3R5bGUgPT09ICdyYWlzZWQnICYmIGNvbmZpZy5idXR0b24ubGFiZWwsXG4gICAgICAgICAgICAgICdtYXQtZmxhdC1idXR0b24nOiBjb25maWcuYnV0dG9uLnN0eWxlID09PSAnZmxhdCcgJiYgY29uZmlnLmJ1dHRvbi5sYWJlbCxcbiAgICAgICAgICAgICAgJ21hdC1zdHJva2VkLWJ1dHRvbic6IGNvbmZpZy5idXR0b24uc3R5bGUgPT09ICdzdHJva2VkJyAmJiBjb25maWcuYnV0dG9uLmxhYmVsLFxuICAgICAgICAgICAgICAnbWF0LWJ1dHRvbic6IGNvbmZpZy5idXR0b24uc3R5bGUgPT09ICdiYXNpYycgJiYgY29uZmlnLmJ1dHRvbi5sYWJlbCxcbiAgICAgICAgICAgICAgJ21hdC1pY29uLWJ1dHRvbic6IGNvbmZpZy5idXR0b24uc3R5bGUgPT09ICdpY29uJyB8fCAhY29uZmlnLmJ1dHRvbi5sYWJlbCAgXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VWaXNpYmlsaXR5Q2xpY2soIXNob3dGaWx0ZXJNZW51LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJjb25maWcuYnV0dG9uLmNvbG9yXCI+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY29uZmlnLmJ1dHRvbi5pY29uXCI+e3tjb25maWcuYnV0dG9uLmljb259fTwvbWF0LWljb24+XG4gICAgICAgICAge3sgY29uZmlnLmJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICA8L2E+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8YSBcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJyZWxvYWQoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwicmVsb2FkXCJcbiAgICAgICAgKm5nSWY9XCJjb25maWcucmVsb2FkXCI+XG4gICAgICA8bWF0LWljb24+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgPC9hPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19
|
|
@@ -4271,7 +4271,7 @@ FilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
|
|
|
4271
4271
|
FsFilterItemsStore,
|
|
4272
4272
|
SavedFiltersController,
|
|
4273
4273
|
ActionsController,
|
|
4274
|
-
], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: MatInput }], ngImport: i0, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container> \n </div>\n </ng-container>\n \n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"statusBar\">\n <div class=\"filter-status-container\" [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div class=\"filter-status\" #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips \n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"keywordVisible$ | async\">\n <mat-form-field \n [floatLabel]=\"'never'\" \n class=\"form-field-padless\" \n [ngClass]=\"search\"\n appearance=\"outline\">\n <span matPrefix>\n <mat-icon matPrefix>search</mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n\n<ng-template #filterToolbar>\n <ng-container *ngIf=\"filtersBtnVisible$ | async\">\n
|
|
4274
|
+
], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: MatInput }], ngImport: i0, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container> \n </div>\n </ng-container>\n \n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"statusBar\">\n <div class=\"filter-status-container\" [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div class=\"filter-status\" #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips \n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"keywordVisible$ | async\">\n <mat-form-field \n [floatLabel]=\"'never'\" \n class=\"form-field-padless\" \n [ngClass]=\"search\"\n appearance=\"outline\">\n <span matPrefix>\n <mat-icon matPrefix>search</mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n\n<ng-template #filterToolbar>\n <div class=\"filter-toobar\">\n <ng-container *ngIf=\"filtersBtnVisible$ | async\">\n <ng-container *ngIf=\"hasVisibleItemOrSorting\">\n <a\n mat-button\n class=\"filters-button\"\n [ngClass]=\"{\n 'mat-raised-button': config.button.style === 'raised' && config.button.label,\n 'mat-flat-button': config.button.style === 'flat' && config.button.label,\n 'mat-stroked-button': config.button.style === 'stroked' && config.button.label,\n 'mat-button': config.button.style === 'basic' && config.button.label,\n 'mat-icon-button': config.button.style === 'icon' || !config.button.label \n }\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n <mat-icon *ngIf=\"config.button.icon\">{{config.button.icon}}</mat-icon>\n {{ config.button.label }}\n </a>\n </ng-container>\n </ng-container>\n <a \n mat-icon-button\n (click)=\"reload($event)\"\n class=\"reload\"\n *ngIf=\"config.reload\">\n <mat-icon>refresh</mat-icon>\n </a>\n </div>\n</ng-template>", styles: [".fs-filter{margin-bottom:20px;display:block}.fs-filter.has-keyword .filter-status-container.has-status{margin-top:4px}.fs-filter:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}.fs-filter:not(.has-keyword) .filter-inner-container{display:flex}.fs-filter:not(.has-keyword) .filter-toobar{justify-content:flex-end}.fs-filter .filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.fs-filter .filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:17px}.fs-filter .filter-container{width:100%}.fs-filter .filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.fs-filter .filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.fs-filter .filter-inner-container .filter-keyword mat-form-field{max-width:100%;min-width:100px;margin-right:6px}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-wrapper{margin-bottom:0}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix .mat-icon{font-size:22px;color:#626262}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-infix{width:250px}.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-prefix,.fs-filter .filter-inner-container .filter-keyword mat-form-field .mat-form-field-suffix{top:.45em}.fs-filter .filter-inner-container .filter-keyword .mat-form-field-suffix{display:flex}.fs-filter .filter-inner-container .filter-keyword .mat-form-field-suffix .mat-icon-button{height:24px;width:24px}.fs-filter .filter-actions{display:flex;align-items:center}.fs-filter .filter-toobar{flex:1;white-space:nowrap;display:flex;align-items:center}.fs-filter .filter-toobar .filters-button{z-index:100}.fs-filter .filter-toobar .reload{margin-left:-6px}.fs-filter .results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}.fs-filter fs-filter-chips{margin-top:4px;display:block}@media screen and (min-width: 599px){.filter-actions{margin-left:10px}.filters-button+fs-filter-actions:not(:empty){margin-left:5px}}@media screen and (max-width: 600px){.filter-actions{margin-left:5px}.filter-actions .filters-button{font-size:0;padding:0;min-width:unset;width:36px;height:36px;border-radius:50%;box-shadow:unset!important}}@media screen and (min-width: 1200px){body.fs-filter-open{margin-right:350px}.fs-filter-backdrop{display:none}}body.fs-filter-open::-webkit-scrollbar{width:0;background:transparent}\n"], components: [{ type: FsFilterChipsComponent, selector: "fs-filter-chips", inputs: ["filters"] }, { type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.FsClearComponent, selector: "[fsClear]", inputs: ["ngModel", "fsClear"], outputs: ["ngModelChange", "cleared"] }, { type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { type: i1$4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1$3.MatPrefix, selector: "[matPrefix]" }, { type: i3$2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "async": i3.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
4275
4275
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterComponent, decorators: [{
|
|
4276
4276
|
type: Component,
|
|
4277
4277
|
args: [{
|