UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

329 lines (328 loc) 28.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, HostListener, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { PhloxAppService } from '../../service/PhloxAppService.service'; import { AbstractWizardPane } from './AbstractWizardPane'; import { Option } from '../../decorator/Option.decorator'; import { I18N } from '../../decorator/I18N.decorator'; import { WizardModel } from '../model/WizardModel'; const /** @type {?} */ TYPE_NAME = "phx-scroll-pagination-wizard-pane"; const /** @type {?} */ INDEX_Y_0 = "INDEX_Y_0"; const /** @type {?} */ UP = "UP"; const /** @type {?} */ DOWN = "DOWN"; export class ScrollPaginationWizardPane extends AbstractWizardPane { /** * @param {?} appSvc * @param {?} sanitizer * @param {?} elementRef */ constructor(appSvc, sanitizer, elementRef) { super(appSvc, elementRef); this.sanitizer = sanitizer; } /** * @return {?} */ ngOnInit() { super.ngOnInit(); } /** * @param {?} event * @return {?} */ onmousewheel(event) { clearTimeout(this.delayMouseWheelTimer); this.delayMouseWheelTimer = null; this.delayMouseWheelTimer = setTimeout(() => { event = window.event || event; let /** @type {?} */ delta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail))); if (delta > -1) { // mouseWheel up if (this.currentStep !== 0) { this.currentStep -= 1; if (this.currentStep === 0) { this.setSafeStyleIndexY(INDEX_Y_0); } else { this.setSafeStyleIndexY(UP); } } } else { // mouseWheel down if (this.getModel().steps.length > 0) { let /** @type {?} */ stepsIndex = this.getModel().steps.length - 1; if (this.currentStep < stepsIndex) { this.currentStep += 1; this.setSafeStyleIndexY(DOWN); } } } event.preventDefault(); }, 250); } /** * @param {?} mouseWheel * @return {?} */ setSafeStyleIndexY(mouseWheel) { let /** @type {?} */ y; let /** @type {?} */ index = this.currentStep; if (mouseWheel === DOWN || mouseWheel === UP) { // set Style translate3d = (0, -(index * 100), 0); y = -(index * 100); } else if (mouseWheel === INDEX_Y_0) { // set Style translate3d = (0, 0, 0); y = 0; } else { // default set Style translate3d = (0, 0, 0); y = 0; } this.safeStyle = this.sanitizer.bypassSecurityTrustStyle("translate3d( 0, " + y + "%, 0 )"); } /** * @return {?} */ getSafeStyle() { return this.safeStyle; } /** * @param {?} index * @return {?} */ showStepContent(index) { let /** @type {?} */ y; if (index !== 0) { // set Style translate3d = (0, -(index * 100), 0); y = -(index * 100); } else if (index === 0) { // set Style translate3d = (0, 0, 0); y = 0; } else { // default set Style translate3d = (0, 0, 0); y = 0; } this.safeStyle = this.sanitizer.bypassSecurityTrustStyle("translate3d( 0, " + y + "%, 0 )"); } /** * @param {?} index * @return {?} */ getStepInstance(index) { } } ScrollPaginationWizardPane.TYPE_NAME = TYPE_NAME; ScrollPaginationWizardPane.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: 'phx-scroll-pagination-wizard-pane', template: `<div class="phx-scroll-pagination-wizard-pane"> <div class="left" [style.padding-top]="getHeaderHeight() + 'pt'" [style.padding-bottom]="getFooterHeight() + 'pt'"> <div class="header" [style.height]="getHeaderHeight() + 'pt'"> <ng-template [ngIf]="getModel() !== null && getModel().header !== null"> <ng-template [ngIf]="getModel().header.type === null"> <div *ngIf="getModel().header.imageURL !== null && getModel().header.imageURL !== ''" class="header-image"> <img src="{{getModel().header.imageURL}}"> </div> <div class="header-label">{{getModel().header.label}}</div> </ng-template> <ng-template [ngIf]="getModel().header.type !== null"> <phx-component-wrapper [type]="getModel().header.type" [data]="getModel().header.model"></phx-component-wrapper> </ng-template> </ng-template> </div> <div class="body"> <ng-template [ngIf]="getModel() !== null && getModel().steps !== null"> <div *ngFor="let item of getModel().steps; let i = index;" class="step" [class.active]="isStepSelected(i)"> <ng-template [ngIf]="item.type === null"> <div (click)="stepSelected(i)"> {{item.label}} </div> </ng-template> <ng-template [ngIf]="item.type !== null"> <phx-component-wrapper [type]="item.type" [data]="item.model" (click)="stepSelected(i)"></phx-component-wrapper> </ng-template> </div> </ng-template> </div> <div class="footer" [style.height]="getFooterHeight() + 'pt'"> <ng-template [ngIf]="getModel() !== null && getModel().footer !== null"> <ng-template [ngIf]="getModel().footer.type === null"> {{getModel().footer.label}} </ng-template> <ng-template [ngIf]="getModel().footer.type !== null"> <phx-component-wrapper [type]="getModel().footer.type" [data]="getModel().footer.model"></phx-component-wrapper> </ng-template> </ng-template> </div> </div> <div class="right"> <div class="scrollpage" [style.transform]="getSafeStyle()"> <div *ngFor="let item of getModel().steps; let i = index;" style="height: 100%;"> <phx-component-wrapper [class.active]="isStepSelected(i)" [type]="item.componentType" [data]="getData()" [model]="item.componentModel" [dataParent]="this" [handler]="getStepsComponentHandler()"> </phx-component-wrapper> </div> </div> </div> </div> `, },] }, ]; /** @nocollapse */ ScrollPaginationWizardPane.ctorParameters = () => [ { type: PhloxAppService, }, { type: DomSanitizer, }, { type: ElementRef, }, ]; ScrollPaginationWizardPane.propDecorators = { "help": [{ type: Input },], "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "field": [{ type: Input },], "model": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "onmousewheel": [{ type: HostListener, args: ['mousewheel', ['$event'],] },], }; tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], ScrollPaginationWizardPane.prototype, "help", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ScrollPaginationWizardPane.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ScrollPaginationWizardPane.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ScrollPaginationWizardPane.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ScrollPaginationWizardPane.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ScrollPaginationWizardPane.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ScrollPaginationWizardPane.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ScrollPaginationWizardPane.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ScrollPaginationWizardPane.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ScrollPaginationWizardPane.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], ScrollPaginationWizardPane.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ScrollPaginationWizardPane.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ScrollPaginationWizardPane.prototype, "field", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", WizardModel) ], ScrollPaginationWizardPane.prototype, "model", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], ScrollPaginationWizardPane.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], ScrollPaginationWizardPane.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], ScrollPaginationWizardPane.prototype, "beforeChangeEvent", void 0); function ScrollPaginationWizardPane_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ScrollPaginationWizardPane.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ScrollPaginationWizardPane.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ScrollPaginationWizardPane.propDecorators; /** @type {?} */ ScrollPaginationWizardPane.TYPE_NAME; /** @type {?} */ ScrollPaginationWizardPane.prototype.help; /** @type {?} */ ScrollPaginationWizardPane.prototype.dataParent; /** @type {?} */ ScrollPaginationWizardPane.prototype.ignoreParentData; /** @type {?} */ ScrollPaginationWizardPane.prototype.data; /** @type {?} */ ScrollPaginationWizardPane.prototype.ignoreParentDisabled; /** @type {?} */ ScrollPaginationWizardPane.prototype.delegateHistory; /** @type {?} */ ScrollPaginationWizardPane.prototype.onDisabled; /** @type {?} */ ScrollPaginationWizardPane.prototype.onEnabled; /** @type {?} */ ScrollPaginationWizardPane.prototype.loadingEnabled; /** @type {?} */ ScrollPaginationWizardPane.prototype.i18nKey; /** @type {?} */ ScrollPaginationWizardPane.prototype.bypass; /** @type {?} */ ScrollPaginationWizardPane.prototype.options; /** @type {?} */ ScrollPaginationWizardPane.prototype.disabled; /** @type {?} */ ScrollPaginationWizardPane.prototype.field; /** @type {?} */ ScrollPaginationWizardPane.prototype.model; /** @type {?} */ ScrollPaginationWizardPane.prototype.loadEvent; /** @type {?} */ ScrollPaginationWizardPane.prototype.changeEvent; /** @type {?} */ ScrollPaginationWizardPane.prototype.beforeChangeEvent; /** @type {?} */ ScrollPaginationWizardPane.prototype.delayMouseWheelTimer; /** @type {?} */ ScrollPaginationWizardPane.prototype.sanitizer; /** @type {?} */ ScrollPaginationWizardPane.prototype.safeStyle; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Nyb2xsUGFnaW5hdGlvbldpemFyZFBhbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2RhdGF2aWV3L1Njcm9sbFBhZ2luYXRpb25XaXphcmRQYW5lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFhLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSW5ELHVCQUFNLFNBQVMsR0FBVyxtQ0FBbUMsQ0FBQztBQUU5RCx1QkFBTSxTQUFTLEdBQVcsV0FBVyxDQUFDO0FBQ3RDLHVCQUFNLEVBQUUsR0FBUSxJQUFJLENBQUM7QUFDckIsdUJBQU0sSUFBSSxHQUFRLE1BQU0sQ0FBQztBQXlEekIsTUFBTSxpQ0FBa0MsU0FBUSxrQkFBa0I7Ozs7OztJQXdFaEUsWUFBWSxNQUF1QixFQUFFLFNBQXVCLEVBQUUsVUFBc0I7UUFDbEYsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztLQUM1Qjs7OztJQUVNLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Ozs7OztJQUlaLFlBQVksQ0FB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OztJQUdSLE1BQU0sRUFBRTs7OztJQUdSLE1BQU0sQ0FBQyxZQUFZLENBQUM7Ozs7SUFLcEIsTUFBTSxFQUFFOzs7O0lBSVIsTUFBTSxFQUFFOzs7O0lBSVIsTUFBTSxFQUFFO3NDQUNRLFdBQVc7OztJQUszQixNQUFNLENBQUMsTUFBTSxDQUFDO3NDQUNNLFlBQVk7OztJQUdoQyxNQUFNLENBQUMsUUFBUSxDQUFDO3NDQUNNLFlBQVk7OztJQUVsQyxNQUFNLENBQUMsY0FBYyxDQUFDO3NDQUNNLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlU3R5bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgUGhsb3hBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9QaGxveEFwcFNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IElIYXNNb2RlbCB9IGZyb20gJy4uL0lIYXNNb2RlbCc7XHJcbmltcG9ydCB7IEFic3RyYWN0V2l6YXJkUGFuZSB9IGZyb20gJy4vQWJzdHJhY3RXaXphcmRQYW5lJztcclxuaW1wb3J0IHsgSUNoYW5nZWFibGUgfSBmcm9tICcuLi9JQ2hhbmdlYWJsZSc7XHJcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcclxuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uLy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IElIYXNEYXRhIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50L0lIYXNEYXRhJztcclxuaW1wb3J0IHsgV2l6YXJkTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9XaXphcmRNb2RlbCc7XHJcblxyXG5kZWNsYXJlIHZhciAkOiBhbnk7XHJcblxyXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwicGh4LXNjcm9sbC1wYWdpbmF0aW9uLXdpemFyZC1wYW5lXCI7XHJcblxyXG5jb25zdCBJTkRFWF9ZXzA6IHN0cmluZyA9IFwiSU5ERVhfWV8wXCI7XHJcbmNvbnN0IFVQOiBhbnkgPSBcIlVQXCI7XHJcbmNvbnN0IERPV046IGFueSA9IFwiRE9XTlwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcclxuICBzZWxlY3RvcjogJ3BoeC1zY3JvbGwtcGFnaW5hdGlvbi13aXphcmQtcGFuZScsXHJcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwicGh4LXNjcm9sbC1wYWdpbmF0aW9uLXdpemFyZC1wYW5lXCI+XHJcblx0PGRpdiBjbGFzcz1cImxlZnRcIiBbc3R5bGUucGFkZGluZy10b3BdPVwiZ2V0SGVhZGVySGVpZ2h0KCkgKyAncHQnXCIgW3N0eWxlLnBhZGRpbmctYm90dG9tXT1cImdldEZvb3RlckhlaWdodCgpICsgJ3B0J1wiPlxyXG5cdFx0PGRpdiBjbGFzcz1cImhlYWRlclwiIFtzdHlsZS5oZWlnaHRdPVwiZ2V0SGVhZGVySGVpZ2h0KCkgKyAncHQnXCI+XHJcblx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJnZXRNb2RlbCgpICE9PSBudWxsICYmIGdldE1vZGVsKCkuaGVhZGVyICE9PSBudWxsXCI+XHJcblx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdldE1vZGVsKCkuaGVhZGVyLnR5cGUgPT09IG51bGxcIj5cclxuXHRcdFx0XHRcdDxkaXYgKm5nSWY9XCJnZXRNb2RlbCgpLmhlYWRlci5pbWFnZVVSTCAhPT0gbnVsbCAmJiBnZXRNb2RlbCgpLmhlYWRlci5pbWFnZVVSTCAhPT0gJydcIiBjbGFzcz1cImhlYWRlci1pbWFnZVwiPlxyXG5cdFx0XHRcdFx0XHQ8aW1nIHNyYz1cInt7Z2V0TW9kZWwoKS5oZWFkZXIuaW1hZ2VVUkx9fVwiPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaGVhZGVyLWxhYmVsXCI+e3tnZXRNb2RlbCgpLmhlYWRlci5sYWJlbH19PC9kaXY+XHJcblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgW25nSWZdPVwiZ2V0TW9kZWwoKS5oZWFkZXIudHlwZSAhPT0gbnVsbFwiPlxyXG5cdFx0XHRcdFx0PHBoeC1jb21wb25lbnQtd3JhcHBlciBbdHlwZV09XCJnZXRNb2RlbCgpLmhlYWRlci50eXBlXCIgW2RhdGFdPVwiZ2V0TW9kZWwoKS5oZWFkZXIubW9kZWxcIj48L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cclxuXHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2IGNsYXNzPVwiYm9keVwiPlxyXG5cdFx0XHQ8bmctdGVtcGxhdGUgW25nSWZdPVwiZ2V0TW9kZWwoKSAhPT0gbnVsbCAmJiBnZXRNb2RlbCgpLnN0ZXBzICE9PSBudWxsXCI+XHJcblx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRNb2RlbCgpLnN0ZXBzOyBsZXQgaSA9IGluZGV4O1wiIGNsYXNzPVwic3RlcFwiIFtjbGFzcy5hY3RpdmVdPVwiaXNTdGVwU2VsZWN0ZWQoaSlcIj5cclxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpdGVtLnR5cGUgPT09IG51bGxcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiAoY2xpY2spPVwic3RlcFNlbGVjdGVkKGkpXCI+IHt7aXRlbS5sYWJlbH19IDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpdGVtLnR5cGUgIT09IG51bGxcIj5cclxuXHRcdFx0XHRcdFx0PHBoeC1jb21wb25lbnQtd3JhcHBlciBbdHlwZV09XCJpdGVtLnR5cGVcIiBbZGF0YV09XCJpdGVtLm1vZGVsXCIgKGNsaWNrKT1cInN0ZXBTZWxlY3RlZChpKVwiPjwvcGh4LWNvbXBvbmVudC13cmFwcGVyPlxyXG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdDwvZGl2PlxyXG5cdFx0PGRpdiBjbGFzcz1cImZvb3RlclwiIFtzdHlsZS5oZWlnaHRdPVwiZ2V0Rm9vdGVySGVpZ2h0KCkgKyAncHQnXCI+XHJcblx0XHRcdDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJnZXRNb2RlbCgpICE9PSBudWxsICYmIGdldE1vZGVsKCkuZm9vdGVyICE9PSBudWxsXCI+XHJcblx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdldE1vZGVsKCkuZm9vdGVyLnR5cGUgPT09IG51bGxcIj5cclxuXHRcdFx0XHRcdHt7Z2V0TW9kZWwoKS5mb290ZXIubGFiZWx9fVxyXG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0PG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdldE1vZGVsKCkuZm9vdGVyLnR5cGUgIT09IG51bGxcIj5cclxuXHRcdFx0XHRcdDxwaHgtY29tcG9uZW50LXdyYXBwZXIgW3R5cGVdPVwiZ2V0TW9kZWwoKS5mb290ZXIudHlwZVwiIFtkYXRhXT1cImdldE1vZGVsKCkuZm9vdGVyLm1vZGVsXCI+PC9waHgtY29tcG9uZW50LXdyYXBwZXI+XHJcblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG5cdFx0PGRpdiBjbGFzcz1cInNjcm9sbHBhZ2VcIiBbc3R5bGUudHJhbnNmb3JtXT1cImdldFNhZmVTdHlsZSgpXCI+XHJcblx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0TW9kZWwoKS5zdGVwczsgbGV0IGkgPSBpbmRleDtcIiBzdHlsZT1cImhlaWdodDogMTAwJTtcIj5cclxuXHRcdFx0XHQ8cGh4LWNvbXBvbmVudC13cmFwcGVyIFtjbGFzcy5hY3RpdmVdPVwiaXNTdGVwU2VsZWN0ZWQoaSlcIiBbdHlwZV09XCJpdGVtLmNvbXBvbmVudFR5cGVcIlxyXG5cdFx0XHRcdFx0W2RhdGFdPVwiZ2V0RGF0YSgpXCIgW21vZGVsXT1cIml0ZW0uY29tcG9uZW50TW9kZWxcIiBbZGF0YVBhcmVudF09XCJ0aGlzXCIgW2hhbmRsZXJdPVwiZ2V0U3RlcHNDb21wb25lbnRIYW5kbGVyKClcIj5cclxuXHRcdFx0XHQ8L3BoeC1jb21wb25lbnQtd3JhcHBlcj5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbmAsXHJcbn0pXHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFNjcm9sbFBhZ2luYXRpb25XaXphcmRQYW5lIGV4dGVuZHMgQWJzdHJhY3RXaXphcmRQYW5lIGltcGxlbWVudHMgT25Jbml0LCBJSGFzTW9kZWwsIElDaGFuZ2VhYmxlIHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUWVBFX05BTUU6IHN0cmluZyA9IFRZUEVfTkFNRTtcclxuXHJcbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBJbnB1dC5cclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFIZWxwXHJcbiAgQElucHV0KClcclxuICBASTE4TigpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIGhlbHA6IGFueTtcclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgQE9wdGlvbigpXHJcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBsb2FkaW5nRW5hYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XHJcbiAgQElucHV0KCdpMThuQnlwYXNzJylcclxuICBAT3B0aW9uKCdpMThuQnlwYXNzJylcclxuICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBkaXNhYmxlZDogYm9vbGVhbjtcclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XHJcbiAgQElucHV0KClcclxuICBAT3B0aW9uKClcclxuICBwcm90ZWN0ZWQgZmllbGQ6IHN0cmluZztcclxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdFdpemFyZFBhbmVcclxuICBASW5wdXQoKVxyXG4gIEBPcHRpb24oKVxyXG4gIHByb3RlY3RlZCBtb2RlbDogV2l6YXJkTW9kZWw7XHJcblxyXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBAT3V0cHV0LlxyXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxyXG4gIEBPdXRwdXQoJ3BoeExvYWQnKVxyXG4gIEBPcHRpb24oJ2xvYWQnKVxyXG4gIHByb3RlY3RlZCBsb2FkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0V2l6YXJkUGFuZVxyXG4gIEBPdXRwdXQoJ3BoeENoYW5nZScpXHJcbiAgQE9wdGlvbignY2hhbmdlJylcclxuICBwcm90ZWN0ZWQgY2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYW5nZScpXHJcbiAgQE9wdGlvbignYmVmb3JlQ2hhbmdlJylcclxuICBwcm90ZWN0ZWQgYmVmb3JlQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG5cclxuICBwcml2YXRlIGRlbGF5TW91c2VXaGVlbFRpbWVyOiBhbnk7XHJcbiAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcjtcclxuICBwcml2YXRlIHNhZmVTdHlsZTogU2FmZVN0eWxlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihhcHBTdmM6IFBobG94QXBwU2VydmljZSwgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgIHN1cGVyKGFwcFN2YywgZWxlbWVudFJlZik7XHJcbiAgICB0aGlzLnNhbml0aXplciA9IHNhbml0aXplcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZXdoZWVsJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgb25tb3VzZXdoZWVsKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLmRlbGF5TW91c2VXaGVlbFRpbWVyKTtcclxuXHJcbiAgICB0aGlzLmRlbGF5TW91c2VXaGVlbFRpbWVyID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLmRlbGF5TW91c2VXaGVlbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICBldmVudCA9IHdpbmRvdy5ldmVudCB8fCBldmVudDtcclxuXHJcbiAgICAgIGxldCBkZWx0YTogbnVtYmVyID0gTWF0aC5tYXgoLTEsIE1hdGgubWluKDEsIChldmVudC53aGVlbERlbHRhIHx8IC1ldmVudC5kZXRhaWwpKSk7XHJcblxyXG4gICAgICBpZiAoZGVsdGEgPiAtMSkgeyAvLyBtb3VzZVdoZWVsIHVwXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFN0ZXAgIT09IDApIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAgLT0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA9PT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNhZmVTdHlsZUluZGV4WShJTkRFWF9ZXzApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTYWZlU3R5bGVJbmRleFkoVVApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHsgICAvLyBtb3VzZVdoZWVsIGRvd25cclxuICAgICAgICBpZiAodGhpcy5nZXRNb2RlbCgpLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGxldCBzdGVwc0luZGV4OiBudW1iZXIgPSB0aGlzLmdldE1vZGVsKCkuc3RlcHMubGVuZ3RoIC0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA8IHN0ZXBzSW5kZXgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3RlcCArPSAxO1xyXG4gICAgICAgICAgICB0aGlzLnNldFNhZmVTdHlsZUluZGV4WShET1dOKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9LCAyNTApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNhZmVTdHlsZUluZGV4WShtb3VzZVdoZWVsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCB5OiBhbnk7XHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLmN1cnJlbnRTdGVwO1xyXG5cclxuICAgIGlmIChtb3VzZVdoZWVsID09PSBET1dOIHx8IG1vdXNlV2hlZWwgPT09IFVQKSB7IC8vIHNldCBTdHlsZSB0cmFuc2xhdGUzZCA9ICAoMCwgLShpbmRleCAqIDEwMCksIDApO1xyXG4gICAgICB5ID0gLShpbmRleCAqIDEwMCk7XHJcbiAgICB9IGVsc2UgaWYgKG1vdXNlV2hlZWwgPT09IElOREVYX1lfMCkgeyAvLyBzZXQgU3R5bGUgdHJhbnNsYXRlM2QgPSAgKDAsIDAsIDApO1xyXG4gICAgICB5ID0gMDtcclxuICAgIH0gZWxzZSB7IC8vIGRlZmF1bHQgIHNldCBTdHlsZSB0cmFuc2xhdGUzZCA9ICAoMCwgMCwgMCk7XHJcbiAgICAgIHkgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2FmZVN0eWxlID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFwidHJhbnNsYXRlM2QoIDAsIFwiICsgeSArIFwiJSwgMCApXCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNhZmVTdHlsZSgpOiBTYWZlU3R5bGUge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FmZVN0eWxlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dTdGVwQ29udGVudChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgeTogYW55O1xyXG5cclxuICAgIGlmIChpbmRleCAhPT0gMCkgeyAvLyBzZXQgU3R5bGUgdHJhbnNsYXRlM2QgPSAgKDAsIC0oaW5kZXggKiAxMDApLCAwKTtcclxuICAgICAgeSA9IC0oaW5kZXggKiAxMDApO1xyXG4gICAgfSBlbHNlIGlmIChpbmRleCA9PT0gMCkgeyAvLyBzZXQgU3R5bGUgdHJhbnNsYXRlM2QgPSAgKDAsIDAsIDApO1xyXG4gICAgICB5ID0gMDtcclxuICAgIH0gZWxzZSB7IC8vIGRlZmF1bHQgIHNldCBTdHlsZSB0cmFuc2xhdGUzZCA9ICAoMCwgMCwgMCk7XHJcbiAgICAgIHkgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2FmZVN0eWxlID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFwidHJhbnNsYXRlM2QoIDAsIFwiICsgeSArIFwiJSwgMCApXCIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFN0ZXBJbnN0YW5jZShpbmRleDogbnVtYmVyKTogYW55IHsgfVxyXG59XHJcbiJdfQ==