UNPKG

@mobilelivenpm/fds-angular-qa

Version:

This library was generated with [Nx](https://nx.dev).

132 lines 20.4 kB
import { CdkStep, CdkStepper, STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper'; import { ChangeDetectionStrategy, Component, ContentChildren, Directive, EventEmitter, forwardRef, Inject, Input, Optional, Output, QueryList, SkipSelf, ViewEncapsulation, ContentChild } from '@angular/core'; import { FdsErrorStateMatcher } from '../shared/error-options'; import { Subject } from 'rxjs'; import { takeUntil, distinctUntilChanged } from 'rxjs/operators'; import { fdsStepperAnimations } from './stepper-animations'; import { Template } from '../shared/template.directive'; import { FdsStepLabel } from './step-label'; export class FdsStep extends CdkStep { constructor(stepper, _errorStateMatcher, stepperOptions) { super(stepper, stepperOptions); this._errorStateMatcher = _errorStateMatcher; } /** Custom error state matcher that additionally checks for validity of interacted form. */ isErrorState(control, form) { const originalErrorState = this._errorStateMatcher.isErrorState(control, form); // Custom error state checks for the validity of form that is not submitted or touched // since user can trigger a form change by calling for another step without directly // interacting with the current form. const customErrorState = !!(control && control.invalid && this.interacted); debugger; if (originalErrorState || customErrorState) { return true; } return false; } } FdsStep.decorators = [ { type: Component, args: [{ selector: 'fds-step', template: "\n<ng-template><ng-content></ng-content></ng-template>", providers: [ { provide: FdsErrorStateMatcher, useExisting: FdsStep }, { provide: CdkStep, useExisting: FdsStep } ], encapsulation: ViewEncapsulation.None, exportAs: 'fdsStep', changeDetection: ChangeDetectionStrategy.OnPush },] } ]; FdsStep.ctorParameters = () => [ { type: FdsStepper, decorators: [{ type: Inject, args: [forwardRef(() => FdsStepper),] }] }, { type: FdsErrorStateMatcher, decorators: [{ type: SkipSelf }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [STEPPER_GLOBAL_OPTIONS,] }] } ]; FdsStep.propDecorators = { stepLabel: [{ type: ContentChild, args: [FdsStepLabel,] }] }; export class FdsStepper extends CdkStepper { constructor() { super(...arguments); /** Steps that belong to the current stepper, excluding ones from nested steppers. */ this.steps = new QueryList(); /** Event emitted when the current step is done transitioning in. */ this.animationDone = new EventEmitter(); /** Stream of animation `done` events when the body expands/collapses. */ this._animationDone = new Subject(); } ngAfterContentInit() { super.ngAfterContentInit(); // Mark the component for change detection whenever the content children query changes this.steps.changes.pipe(takeUntil(this._destroyed)).subscribe(() => { this._stateChanged(); }); this._animationDone .pipe( // This needs a `distinctUntilChanged` in order to avoid emitting the same event twice due // to a bug in animations where the `.done` callback gets invoked twice on some browsers. // See https://github.com/angular/angular/issues/24084 distinctUntilChanged((x, y) => x.fromState === y.fromState && x.toState === y.toState), takeUntil(this._destroyed)) .subscribe(event => { if (event.toState === 'current') { this.animationDone.emit(); } }); } } FdsStepper.decorators = [ { type: Directive, args: [{ selector: '[fdsStepper]', providers: [{ provide: CdkStepper, useExisting: FdsStepper }] },] } ]; FdsStepper.propDecorators = { _steps: [{ type: ContentChildren, args: [FdsStep, { descendants: true },] }], animationDone: [{ type: Output }] }; export class FdsHorizontalStepper extends FdsStepper { constructor() { super(...arguments); /** Whether the label should display in bottom or end position. */ this.labelPosition = 'end'; } ngAfterContentInit() { this.templates.forEach(item => { switch (item.getType()) { case 'header': this.headerTemplate = item.template; break; } }); super.ngAfterContentInit(); } } FdsHorizontalStepper.decorators = [ { type: Component, args: [{ selector: 'fds-horizontal-stepper', exportAs: 'FdsHorizontalStepper', template: "<ng-container\n *ngTemplateOutlet=\"headerTemplate; context: {$implicit: {selectedIndex: selectedIndex, stepsCount: steps.length}}\"\n></ng-container>\n\n<div\n class=\"fds--stepper--head position--relative d--flex align--items--center justify--content--between text--center mb--4\"\n>\n <ng-container *ngFor=\"let step of steps; let i = index; let isLast = last\">\n <fds-step-header\n *ngIf=\"!headerTemplate\"\n [class.fds--slide--active]=\"selected\"\n (click)=\"step.select()\"\n (keydown)=\"_onKeydown($event)\"\n [editable]=\"step.editable\"\n [attr.aria-posinset]=\"i + 1\"\n [attr.aria-setsize]=\"steps.length\"\n [attr.aria-controls]=\"_getStepContentId(i)\"\n [attr.aria-selected]=\"selectedIndex == i\"\n [attr.aria-label]=\"step.ariaLabel || null\"\n [index]=\"i\"\n [state]=\"_getIndicatorType(i, step.state)\"\n [id]=\"_getStepLabelId(i)\"\n [label]=\"step.stepLabel || step.label\"\n [selected]=\"selectedIndex === i\"\n [attr.aria-labelledby]=\"(!step.ariaLabel && step.ariaLabelledby) ? step.ariaLabelledby : null\"\n [active]=\"step.completed || selectedIndex === i || !linear\"\n ></fds-step-header>\n <!-- <div *ngIf=\"!isLast\" class=\"fds-stepper-horizontal-line\"></div> -->\n </ng-container>\n</div>\n<div class=\"fds-horizontal-content-container\">\n <div\n *ngFor=\"let step of steps; let i = index\"\n class=\"fds-horizontal-stepper-content\"\n role=\"tabpanel\"\n [@stepTransition]=\"_getAnimationDirection(i)\"\n (@stepTransition.done)=\"_animationDone.next($event)\"\n [id]=\"_getStepContentId(i)\"\n [attr.aria-expanded]=\"selectedIndex === i\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n >\n <ng-container [ngTemplateOutlet]=\"step.content\"></ng-container>\n </div>\n</div>", inputs: ['selectedIndex'], host: { id: 'fds--slider--stepper', class: 'fds-advanced-stepper fds--slider--stepper', ariaValuenow: '0', ariaValuemin: '0', ariaValuemax: '100' }, animations: [fdsStepperAnimations.horizontalStepTransition], providers: [ { provide: FdsStepper, useExisting: FdsHorizontalStepper }, { provide: CdkStepper, useExisting: FdsHorizontalStepper } ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".fds-horizontal-stepper{display:block}.fds-horizontal-stepper-content{outline:0}.fds-horizontal-stepper-content[aria-expanded=false]{height:0;overflow:hidden}"] },] } ]; FdsHorizontalStepper.propDecorators = { labelPosition: [{ type: Input }], templates: [{ type: ContentChildren, args: [Template,] }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvbGliL3N0ZXBwZXIvc3RlcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLFVBQVUsRUFFVixzQkFBc0IsRUFFdkIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBR1IsaUJBQWlCLEVBQ2pCLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQWE1QyxNQUFNLE9BQU8sT0FBUSxTQUFRLE9BQU87SUFJbEMsWUFDd0MsT0FBbUIsRUFDckMsa0JBQXdDLEVBQ2hCLGNBQThCO1FBRTFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFIWCx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQXNCO0lBSTlELENBQUM7SUFFRCwyRkFBMkY7SUFDM0YsWUFBWSxDQUNWLE9BQTJCLEVBQzNCLElBQXdDO1FBRXhDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFr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QyxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUIsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3RCLEtBQUssUUFBUTtvQkFDWCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQ3BDLE1BQU07YUFDVDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDN0IsQ0FBQzs7O1lBekNGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2dCQUNsQyxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyw2ekRBQXNDO2dCQUN0QyxNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7Z0JBRXpCLElBQUksRUFBRTtvQkFDSixFQUFFLEVBQUUsc0JBQXNCO29CQUMxQixLQUFLLEVBQUUsMkNBQTJDO29CQUNsRCxZQUFZLEVBQUUsR0FBRztvQkFDakIsWUFBWSxFQUFFLEdBQUc7b0JBQ2pCLFlBQVksRUFBRSxLQUFLO2lCQUNwQjtnQkFDRCxVQUFVLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDM0QsU0FBUyxFQUFFO29CQUNULEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUU7b0JBQzFELEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUU7aUJBQzNEO2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2dCQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7Ozs0QkFLRSxLQUFLO3dCQUdMLGVBQWUsU0FBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIENka1N0ZXAsXG4gIENka1N0ZXBwZXIsXG4gIFN0ZXBDb250ZW50UG9zaXRpb25TdGF0ZSxcbiAgU1RFUFBFUl9HTE9CQUxfT1BUSU9OUyxcbiAgU3RlcHBlck9wdGlvbnNcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2tpcFNlbGYsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBDb250ZW50Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwRGlyZWN0aXZlLFxuICBOZ0Zvcm0sXG4gIEZvcm1Hcm91cFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGZHNFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJy4uL3NoYXJlZC9lcnJvci1vcHRpb25zJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmZHNTdGVwcGVyQW5pbWF0aW9ucyB9IGZyb20gJy4vc3RlcHBlci1hbmltYXRpb25zJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vc2hhcmVkL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGZHNTdGVwTGFiZWwgfSBmcm9tICcuL3N0ZXAtbGFiZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmZHMtc3RlcCcsXG4gIHRlbXBsYXRlVXJsOiAnc3RlcC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBGZHNFcnJvclN0YXRlTWF0Y2hlciwgdXNlRXhpc3Rpbmc6IEZkc1N0ZXAgfSxcbiAgICB7IHByb3ZpZGU6IENka1N0ZXAsIHVzZUV4aXN0aW5nOiBGZHNTdGVwIH1cbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgZXhwb3J0QXM6ICdmZHNTdGVwJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRmRzU3RlcCBleHRlbmRzIENka1N0ZXAgaW1wbGVtZW50cyBGZHNFcnJvclN0YXRlTWF0Y2hlciB7XG4gIC8qKiBDb250ZW50IGZvciBzdGVwIGxhYmVsIGdpdmVuIGJ5IGA8bmctdGVtcGxhdGUgbWF0U3RlcExhYmVsPmAuICovXG4gIEBDb250ZW50Q2hpbGQoRmRzU3RlcExhYmVsKSBzdGVwTGFiZWw6IEZkc1N0ZXBMYWJlbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gRmRzU3RlcHBlcikpIHN0ZXBwZXI6IEZkc1N0ZXBwZXIsXG4gICAgQFNraXBTZWxmKCkgcHJpdmF0ZSBfZXJyb3JTdGF0ZU1hdGNoZXI6IEZkc0Vycm9yU3RhdGVNYXRjaGVyLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoU1RFUFBFUl9HTE9CQUxfT1BUSU9OUykgc3RlcHBlck9wdGlvbnM6IFN0ZXBwZXJPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKHN0ZXBwZXIsIHN0ZXBwZXJPcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBDdXN0b20gZXJyb3Igc3RhdGUgbWF0Y2hlciB0aGF0IGFkZGl0aW9uYWxseSBjaGVja3MgZm9yIHZhbGlkaXR5IG9mIGludGVyYWN0ZWQgZm9ybS4gKi9cbiAgaXNFcnJvclN0YXRlKFxuICAgIGNvbnRyb2w6IEZvcm1Db250cm9sIHwgbnVsbCxcbiAgICBmb3JtOiBGb3JtR3JvdXBEaXJlY3RpdmUgfCBOZ0Zvcm0gfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRXJyb3JTdGF0ZSA9IHRoaXMuX2Vycm9yU3RhdGVNYXRjaGVyLmlzRXJyb3JTdGF0ZShcbiAgICAgIGNvbnRyb2wsXG4gICAgICBmb3JtXG4gICAgKTtcblxuICAgIC8vIEN1c3RvbSBlcnJvciBzdGF0ZSBjaGVja3MgZm9yIHRoZSB2YWxpZGl0eSBvZiBmb3JtIHRoYXQgaXMgbm90IHN1Ym1pdHRlZCBvciB0b3VjaGVkXG4gICAgLy8gc2luY2UgdXNlciBjYW4gdHJpZ2dlciBhIGZvcm0gY2hhbmdlIGJ5IGNhbGxpbmcgZm9yIGFub3RoZXIgc3RlcCB3aXRob3V0IGRpcmVjdGx5XG4gICAgLy8gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgY3VycmVudCBmb3JtLlxuICAgIGNvbnN0IGN1c3RvbUVycm9yU3RhdGUgPSAhIShjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmludGVyYWN0ZWQpO1xuXG4gICAgZGVidWdnZXI7XG4gICAgaWYgKG9yaWdpbmFsRXJyb3JTdGF0ZSB8fCBjdXN0b21FcnJvclN0YXRlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmZHNTdGVwcGVyXScsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQ2RrU3RlcHBlciwgdXNlRXhpc3Rpbmc6IEZkc1N0ZXBwZXIgfV1cbn0pXG5leHBvcnQgY2xhc3MgRmRzU3RlcHBlciBleHRlbmRzIENka1N0ZXBwZXIgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2VkaXRhYmxlOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vcHRpb25hbDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY29tcGxldGVkOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oYXNFcnJvcjogQm9vbGVhbklucHV0O1xuICAvKiogRnVsbCBsaXN0IG9mIHN0ZXBzIGluc2lkZSB0aGUgc3RlcHBlciwgaW5jbHVkaW5nIGluc2lkZSBuZXN0ZWQgc3RlcHBlcnMuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oRmRzU3RlcCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBfc3RlcHM6IFF1ZXJ5TGlzdDxGZHNTdGVwPjtcbiAgLyoqIFN0ZXBzIHRoYXQgYmVsb25nIHRvIHRoZSBjdXJyZW50IHN0ZXBwZXIsIGV4Y2x1ZGluZyBvbmVzIGZyb20gbmVzdGVkIHN0ZXBwZXJzLiAqL1xuICByZWFkb25seSBzdGVwczogUXVlcnlMaXN0PEZkc1N0ZXA+ID0gbmV3IFF1ZXJ5TGlzdDxGZHNTdGVwPigpO1xuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBjdXJyZW50IHN0ZXAgaXMgZG9uZSB0cmFuc2l0aW9uaW5nIGluLiAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgYW5pbWF0aW9uRG9uZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogU3RyZWFtIG9mIGFuaW1hdGlvbiBgZG9uZWAgZXZlbnRzIHdoZW4gdGhlIGJvZHkgZXhwYW5kcy9jb2xsYXBzZXMuICovXG4gIF9hbmltYXRpb25Eb25lID0gbmV3IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+KCk7XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHN1cGVyLm5nQWZ0ZXJDb250ZW50SW5pdCgpO1xuXG4gICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGZvciBjaGFuZ2UgZGV0ZWN0aW9uIHdoZW5ldmVyIHRoZSBjb250ZW50IGNoaWxkcmVuIHF1ZXJ5IGNoYW5nZXNcbiAgICB0aGlzLnN0ZXBzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX3N0YXRlQ2hhbmdlZCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fYW5pbWF0aW9uRG9uZVxuICAgICAgLnBpcGUoXG4gICAgICAgIC8vIFRoaXMgbmVlZHMgYSBgZGlzdGluY3RVbnRpbENoYW5nZWRgIGluIG9yZGVyIHRvIGF2b2lkIGVtaXR0aW5nIHRoZSBzYW1lIGV2ZW50IHR3aWNlIGR1ZVxuICAgICAgICAvLyB0byBhIGJ1ZyBpbiBhbmltYXRpb25zIHdoZXJlIHRoZSBgLmRvbmVgIGNhbGxiYWNrIGdldHMgaW52b2tlZCB0d2ljZSBvbiBzb21lIGJyb3dzZXJzLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMjQwODRcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAgICAgKHgsIHkpID0+IHguZnJvbVN0YXRlID09PSB5LmZyb21TdGF0ZSAmJiB4LnRvU3RhdGUgPT09IHkudG9TdGF0ZVxuICAgICAgICApLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmICgoZXZlbnQudG9TdGF0ZSBhcyBTdGVwQ29udGVudFBvc2l0aW9uU3RhdGUpID09PSAnY3VycmVudCcpIHtcbiAgICAgICAgICB0aGlzLmFuaW1hdGlvbkRvbmUuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmZHMtaG9yaXpvbnRhbC1zdGVwcGVyJyxcbiAgZXhwb3J0QXM6ICdGZHNIb3Jpem9udGFsU3RlcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnc3RlcHBlci1ob3Jpem9udGFsLmh0bWwnLFxuICBpbnB1dHM6IFsnc2VsZWN0ZWRJbmRleCddLFxuICBzdHlsZVVybHM6IFsnLi9zdGVwcGVyLnNjc3MnXSxcbiAgaG9zdDoge1xuICAgIGlkOiAnZmRzLS1zbGlkZXItLXN0ZXBwZXInLFxuICAgIGNsYXNzOiAnZmRzLWFkdmFuY2VkLXN0ZXBwZXIgZmRzLS1zbGlkZXItLXN0ZXBwZXInLFxuICAgIGFyaWFWYWx1ZW5vdzogJzAnLFxuICAgIGFyaWFWYWx1ZW1pbjogJzAnLFxuICAgIGFyaWFWYWx1ZW1heDogJzEwMCdcbiAgfSxcbiAgYW5pbWF0aW9uczogW2Zkc1N0ZXBwZXJBbmltYXRpb25zLmhvcml6b250YWxTdGVwVHJhbnNpdGlvbl0sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogRmRzU3RlcHBlciwgdXNlRXhpc3Rpbmc6IEZkc0hvcml6b250YWxTdGVwcGVyIH0sXG4gICAgeyBwcm92aWRlOiBDZGtTdGVwcGVyLCB1c2VFeGlzdGluZzogRmRzSG9yaXpvbnRhbFN0ZXBwZXIgfVxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBGZHNIb3Jpem9udGFsU3RlcHBlclxuICBleHRlbmRzIEZkc1N0ZXBwZXJcbiAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgLyoqIFdoZXRoZXIgdGhlIGxhYmVsIHNob3VsZCBkaXNwbGF5IGluIGJvdHRvbSBvciBlbmQgcG9zaXRpb24uICovXG4gIEBJbnB1dCgpXG4gIGxhYmVsUG9zaXRpb246ICdib3R0b20nIHwgJ2VuZCcgPSAnZW5kJztcblxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxhbnk+O1xuXG4gIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgICAgICB0aGlzLmhlYWRlclRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzdXBlci5uZ0FmdGVyQ29udGVudEluaXQoKTtcbiAgfVxuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9lZGl0YWJsZTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb3B0aW9uYWw6IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NvbXBsZXRlZDogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGFzRXJyb3I6IEJvb2xlYW5JbnB1dDtcbn0iXX0=