angular-admin-lte-teliqo
Version:
npm# angular-admin-lte
445 lines (444 loc) • 33.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, Input, NgZone, Output, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren } from '@angular/core';
import { TabToggleDirective } from './tabs.directive';
import { removeListeners, removeSubscriptions } from '../helpers';
var TabHeaderComponent = /** @class */ (function () {
function TabHeaderComponent() {
}
TabHeaderComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-tab-header',
template: '<ng-template #templateRef><ng-content></ng-content></ng-template>',
changeDetection: ChangeDetectionStrategy.OnPush
},] },
];
/** @nocollapse */
TabHeaderComponent.propDecorators = {
"templateRef": [{ type: ViewChild, args: ['templateRef',] },],
};
return TabHeaderComponent;
}());
export { TabHeaderComponent };
function TabHeaderComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
TabHeaderComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
TabHeaderComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
TabHeaderComponent.propDecorators;
/** @type {?} */
TabHeaderComponent.prototype.templateRef;
}
var TabContentComponent = /** @class */ (function () {
function TabContentComponent() {
}
TabContentComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-tab-content',
template: '<ng-template #templateRef><ng-content></ng-content></ng-template>',
changeDetection: ChangeDetectionStrategy.OnPush
},] },
];
/** @nocollapse */
TabContentComponent.propDecorators = {
"templateRef": [{ type: ViewChild, args: ['templateRef',] },],
};
return TabContentComponent;
}());
export { TabContentComponent };
function TabContentComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
TabContentComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
TabContentComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
TabContentComponent.propDecorators;
/** @type {?} */
TabContentComponent.prototype.templateRef;
}
var TabComponent = /** @class */ (function () {
function TabComponent() {
this.isActive = false;
}
/**
* @method ngOnInit
*/
/**
* \@method ngOnInit
* @return {?}
*/
TabComponent.prototype.ngOnInit = /**
* \@method ngOnInit
* @return {?}
*/
function () {
if (this.tabContentComponent) {
this.contentTemplateRef = this.tabContentComponent.templateRef;
}
else {
this.contentTemplateRef = this.templateRef;
}
};
TabComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-tab',
template: '<ng-template #templateRef><ng-content></ng-content></ng-template>',
changeDetection: ChangeDetectionStrategy.OnPush
},] },
];
/** @nocollapse */
TabComponent.propDecorators = {
"header": [{ type: Input },],
"isDisabled": [{ type: Input },],
"tabColor": [{ type: Input },],
"templateRef": [{ type: ViewChild, args: ['templateRef',] },],
"tabHeaderComponent": [{ type: ContentChild, args: [TabHeaderComponent,] },],
"tabContentComponent": [{ type: ContentChild, args: [TabContentComponent,] },],
};
return TabComponent;
}());
export { TabComponent };
function TabComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
TabComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
TabComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
TabComponent.propDecorators;
/** @type {?} */
TabComponent.prototype.index;
/** @type {?} */
TabComponent.prototype.isActive;
/** @type {?} */
TabComponent.prototype.contentTemplateRef;
/** @type {?} */
TabComponent.prototype.header;
/** @type {?} */
TabComponent.prototype.isDisabled;
/** @type {?} */
TabComponent.prototype.tabColor;
/** @type {?} */
TabComponent.prototype.templateRef;
/** @type {?} */
TabComponent.prototype.tabHeaderComponent;
/** @type {?} */
TabComponent.prototype.tabContentComponent;
}
var TabsHeaderComponent = /** @class */ (function () {
function TabsHeaderComponent() {
}
TabsHeaderComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-tabs-header',
template: '<ng-template #templateRef><ng-content></ng-content></ng-template>',
changeDetection: ChangeDetectionStrategy.OnPush
},] },
];
/** @nocollapse */
TabsHeaderComponent.propDecorators = {
"templateRef": [{ type: ViewChild, args: ['templateRef',] },],
};
return TabsHeaderComponent;
}());
export { TabsHeaderComponent };
function TabsHeaderComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
TabsHeaderComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
TabsHeaderComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
TabsHeaderComponent.propDecorators;
/** @type {?} */
TabsHeaderComponent.prototype.templateRef;
}
var TabsComponent = /** @class */ (function () {
/**
* @method constructor
* @param changeDetectorRef [description]
* @param ngZone [description]
* @param renderer2 [description]
*/
function TabsComponent(changeDetectorRef, ngZone, renderer2) {
this.changeDetectorRef = changeDetectorRef;
this.ngZone = ngZone;
this.renderer2 = renderer2;
this.listeners = [];
this.subscriptions = [];
this.headerStyleClass = 'header pull-left';
this.navStyleClass = 'nav nav-tabs';
this.contentStyleClass = 'tab-content';
this.styleClass = 'nav-tabs-custom';
this.onClose = new EventEmitter();
this.onOpen = new EventEmitter();
}
Object.defineProperty(TabsComponent.prototype, "activeTabIndex", {
set: /**
* @param {?} index
* @return {?}
*/
function (index) {
this.activatedTabIndex = index;
this.changeDetectorRef.detectChanges();
},
enumerable: true,
configurable: true
});
/**
* @method ngAfterViewInit
*/
/**
* \@method ngAfterViewInit
* @return {?}
*/
TabsComponent.prototype.ngAfterContentInit = /**
* \@method ngAfterViewInit
* @return {?}
*/
function () {
var _this = this;
// Set tab index on load.
this.setTabIndex();
// Update tab index if tabs is updated.
this.subscriptions.push(this.tabs.changes.subscribe(function () {
_this.setTabIndex();
}));
// Open tab on load.
this.openTabIndex();
};
/**
* @method ngAfterViewInit
*/
/**
* \@method ngAfterViewInit
* @return {?}
*/
TabsComponent.prototype.ngAfterViewInit = /**
* \@method ngAfterViewInit
* @return {?}
*/
function () {
var _this = this;
// Set tab toggles on load.
this.setTabsToggle();
// Update tab toggles if tabs is updated.
this.subscriptions.push(this.tabToggleDirectives.changes.subscribe(function () {
_this.setTabsToggle();
}));
};
/**
* @method ngOnChanges
* @param changes [description]
*/
/**
* \@method ngOnChanges
* @param {?} changes [description]
* @return {?}
*/
TabsComponent.prototype.ngOnChanges = /**
* \@method ngOnChanges
* @param {?} changes [description]
* @return {?}
*/
function (changes) {
if (changes["activeTabIndex"]) {
this.openTabIndex();
}
};
/**
* @method ngOnDestroy
*/
/**
* \@method ngOnDestroy
* @return {?}
*/
TabsComponent.prototype.ngOnDestroy = /**
* \@method ngOnDestroy
* @return {?}
*/
function () {
removeListeners(this.listeners);
removeSubscriptions(this.subscriptions);
};
/**
* [toggleTab description]
* \@method toggleTab
* @return {?}
*/
TabsComponent.prototype.openTabIndex = /**
* [toggleTab description]
* \@method toggleTab
* @return {?}
*/
function () {
var _this = this;
if (this.tabs) {
this.tabs.forEach(function (tab) {
if (_this.activatedTabIndex === tab.index || (_this.activatedTabIndex === undefined && tab.index === 0)) {
tab.isActive = true;
_this.onOpen.emit({ index: tab.index });
_this.changeDetectorRef.detectChanges();
}
else if (tab.isActive) {
tab.isActive = false;
_this.onClose.emit({ index: tab.index });
_this.changeDetectorRef.detectChanges();
}
});
}
};
/**
* [openTab description]
* \@method openTab
* @param {?} event [description]
* @param {?} tabToOpen [description]
* @return {?}
*/
TabsComponent.prototype.openTab = /**
* [openTab description]
* \@method openTab
* @param {?} event [description]
* @param {?} tabToOpen [description]
* @return {?}
*/
function (event, tabToOpen) {
var _this = this;
event.preventDefault();
tabToOpen.isActive = true;
this.onOpen.emit({ event: event, index: tabToOpen.index });
this.tabs.forEach(function (tab) {
if (tab.isActive && tabToOpen !== tab) {
tab.isActive = false;
_this.onClose.emit({ event: event, index: tab.index });
}
});
};
/**
* [setTabIndex description]
* \@method setTabIndex
* @return {?}
*/
TabsComponent.prototype.setTabIndex = /**
* [setTabIndex description]
* \@method setTabIndex
* @return {?}
*/
function () {
this.tabs.forEach(function (tab, index) {
tab.index = index;
});
this.changeDetectorRef.detectChanges();
};
/**
* [setTabsToggle description]
* \@method setTabsToggle
* @return {?}
*/
TabsComponent.prototype.setTabsToggle = /**
* [setTabsToggle description]
* \@method setTabsToggle
* @return {?}
*/
function () {
var _this = this;
this.listeners = removeListeners(this.listeners);
this.ngZone.runOutsideAngular(function () {
_this.tabToggleDirectives.forEach(function (tabToggle) {
_this.listeners.push(_this.renderer2.listen(tabToggle.elementRef.nativeElement, 'click', function (event) {
_this.openTab(event, tabToggle.tabComponent);
_this.changeDetectorRef.detectChanges();
}));
});
});
};
TabsComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-tabs',
template: "<div [ngClass]=\"styleClass\">\n <ul [ngClass]=\"navStyleClass\" [class.pull-right]=\"header || tabsHeaderComponent\">\n <li *ngFor=\"let tab of tabs\" [class.active]=\"tab.isActive\" [mkColor]=\"tab.tabColor || tabsColor\" mkColorProperty=\"border-top-color\">\n <a *ngIf=\"!tab.isDisabled\" [mkTabToggle]=\"tab\" href=\"#\">\n {{tab.header}}\n <ng-template *ngIf=\"!tab.header\" [ngTemplateOutlet]=\"tab.tabHeaderComponent?.templateRef\"></ng-template>\n </a>\n <ng-template [ngIf]=\"tab.isDisabled\">\n {{tab.header}}\n <ng-template *ngIf=\"!tab.header\" [ngTemplateOutlet]=\"tab.tabHeaderComponent.templateRef\"></ng-template>\n </ng-template>\n </li>\n <li *ngIf=\"tabsHeaderComponent || header\" [ngClass]=\"headerStyleClass\">\n {{header}}\n <ng-template *ngIf=\"!header\" [ngTemplateOutlet]=\"tabsHeaderComponent.templateRef\"></ng-template>\n </li>\n </ul>\n <div [ngClass]=\"contentStyleClass\">\n <div *ngFor=\"let tab of tabs\" class=\"tab-pane\" [class.active]=\"tab.isActive\">\n <ng-template [ngTemplateOutlet]=\"tab.contentTemplateRef\"></ng-template>\n </div>\n </div>\n</div>\n",
styles: [".nav-tabs-custom>.nav-tabs>li{border-top-width:0}.nav-tabs-custom>.nav-tabs>li.active{border-top-width:3px}"],
changeDetection: ChangeDetectionStrategy.OnPush
},] },
];
/** @nocollapse */
TabsComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef, },
{ type: NgZone, },
{ type: Renderer2, },
]; };
TabsComponent.propDecorators = {
"activeTabIndex": [{ type: Input },],
"header": [{ type: Input },],
"headerStyleClass": [{ type: Input },],
"navStyleClass": [{ type: Input },],
"contentStyleClass": [{ type: Input },],
"styleClass": [{ type: Input },],
"tabsColor": [{ type: Input },],
"onClose": [{ type: Output },],
"onOpen": [{ type: Output },],
"tabsHeaderComponent": [{ type: ContentChild, args: [TabsHeaderComponent,] },],
"tabs": [{ type: ContentChildren, args: [TabComponent,] },],
"tabToggleDirectives": [{ type: ViewChildren, args: [TabToggleDirective,] },],
};
return TabsComponent;
}());
export { TabsComponent };
function TabsComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
TabsComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
TabsComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
TabsComponent.propDecorators;
/** @type {?} */
TabsComponent.prototype.activatedTabIndex;
/** @type {?} */
TabsComponent.prototype.listeners;
/** @type {?} */
TabsComponent.prototype.subscriptions;
/** @type {?} */
TabsComponent.prototype.header;
/** @type {?} */
TabsComponent.prototype.headerStyleClass;
/** @type {?} */
TabsComponent.prototype.navStyleClass;
/** @type {?} */
TabsComponent.prototype.contentStyleClass;
/** @type {?} */
TabsComponent.prototype.styleClass;
/** @type {?} */
TabsComponent.prototype.tabsColor;
/** @type {?} */
TabsComponent.prototype.onClose;
/** @type {?} */
TabsComponent.prototype.onOpen;
/** @type {?} */
TabsComponent.prototype.tabsHeaderComponent;
/** @type {?} */
TabsComponent.prototype.tabs;
/** @type {?} */
TabsComponent.prototype.tabToggleDirectives;
/** @type {?} */
TabsComponent.prototype.changeDetectorRef;
/** @type {?} */
TabsComponent.prototype.ngZone;
/** @type {?} */
TabsComponent.prototype.renderer2;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLWFkbWluLWx0ZS10ZWxpcW8vIiwic291cmNlcyI6WyJsaWIvdGFicy90YWJzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBSU4sTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQzs7Ozs7Z0JBT2pFLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsUUFBUSxFQUFFLG1FQUFtRTtvQkFDN0UsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzs7O2dDQUVFLFNBQVMsU0FBQyxhQUFhOzs2QkF0QzFCOztTQXFDYSxrQkFBa0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQkFROUIsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRSxtRUFBbUU7b0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7OztnQ0FFRSxTQUFTLFNBQUMsYUFBYTs7OEJBbkQxQjs7U0FrRGEsbUJBQW1COzs7Ozs7Ozs7Ozs7Ozs7O3dCQWNaLEtBQUs7O0lBYXZCOztPQUVHOzs7OztJQUNILCtCQUFROzs7O0lBQVI7UUFDRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDO1NBQ2hFO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDTixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUM1QztLQUNGOztnQkE3QkYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxRQUFRO29CQUNsQixRQUFRLEVBQUUsbUVBQW1FO29CQUM3RSxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7Ozs7MkJBT0UsS0FBSzsrQkFDTCxLQUFLOzZCQUNMLEtBQUs7Z0NBRUwsU0FBUyxTQUFDLGFBQWE7dUNBRXZCLFlBQVksU0FBQyxrQkFBa0I7d0NBQy9CLFlBQVksU0FBQyxtQkFBbUI7O3VCQTNFbkM7O1NBOERhLFlBQVk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JBOEJ4QixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFLG1FQUFtRTtvQkFDN0UsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzs7O2dDQUVFLFNBQVMsU0FBQyxhQUFhOzs4QkFsRzFCOztTQWlHYSxtQkFBbUI7Ozs7Ozs7Ozs7Ozs7OztJQTZEOUI7Ozs7O09BS0c7SUFDSCx1QkFDVSxtQkFDQSxRQUNBO1FBRkEsc0JBQWlCLEdBQWpCLGlCQUFpQjtRQUNqQixXQUFNLEdBQU4sTUFBTTtRQUNOLGNBQVMsR0FBVCxTQUFTO3lCQWhDQyxFQUFFOzZCQUNFLEVBQUU7Z0NBT1Msa0JBQWtCOzZCQUNyQixjQUFjO2lDQUNWLGFBQWE7MEJBQ3BCLGlCQUFpQjt1QkFHbkIsSUFBSSxZQUFZLEVBQUU7c0JBQ25CLElBQUksWUFBWSxFQUFFO0tBa0J4QzswQkE5QmdCLHlDQUFjOzs7OztrQkFBQyxLQUFhO1lBQzlDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDOzs7OztJQThCekM7O09BRUc7Ozs7O0lBQ0gsMENBQWtCOzs7O0lBQWxCO1FBQUEsaUJBV0M7O1FBVEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOztRQUduQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDbEQsS0FBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BCLENBQUMsQ0FBQyxDQUFDOztRQUdKLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQUNyQjtJQUVEOztPQUVHOzs7OztJQUNILHVDQUFlOzs7O0lBQWY7UUFBQSxpQkFRQzs7UUFOQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7O1FBR3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ2pFLEtBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QixDQUFDLENBQUMsQ0FBQztLQUNMO0lBRUQ7OztPQUdHOzs7Ozs7SUFDSCxtQ0FBVzs7Ozs7SUFBWCxVQUFZLE9BQTBDO1FBQ3BELEVBQUUsQ0FBQyxDQUFDLE9BQU8sb0JBQWlCLENBQUM7WUFDM0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO0tBQ0Y7SUFFRDs7T0FFRzs7Ozs7SUFDSCxtQ0FBVzs7OztJQUFYO1FBQ0UsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDekM7Ozs7OztJQU1NLG9DQUFZOzs7Ozs7O1FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFpQjtnQkFDbEMsRUFBRSxDQUFDLENBQUMsS0FBSSxDQUFDLGlCQUFpQixLQUFLLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFJLENBQUMsaUJBQWlCLEtBQUssU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0RyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDcEIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7b0JBQ3JDLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDeEM7Z0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUN4QixHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDckIsS0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7b0JBQ3RDLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDeEM7YUFDRixDQUFDLENBQUM7U0FDSjs7Ozs7Ozs7O0lBU0ksK0JBQU87Ozs7Ozs7Y0FBQyxLQUFZLEVBQUUsU0FBdUI7O1FBQ2xELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssT0FBQSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFDLEdBQWlCO1lBQ2xDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksU0FBUyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixLQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFDLEtBQUssT0FBQSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQzthQUM5QztTQUNGLENBQUMsQ0FBQzs7Ozs7OztJQU9HLG1DQUFXOzs7Ozs7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFpQixFQUFFLEtBQWE7WUFDakQsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDOzs7Ozs7O0lBT2pDLHFDQUFhOzs7Ozs7O1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1lBQzVCLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsVUFBQyxTQUE2QjtnQkFDN0QsS0FBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLFVBQUMsS0FBSztvQkFDM0YsS0FBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUM1QyxLQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3hDLENBQUMsQ0FBQyxDQUFDO2FBQ0wsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDOzs7Z0JBL0tOLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsU0FBUztvQkFDbkIsUUFBUSxFQUFFLDhwQ0F1Qlg7b0JBQ0MsTUFBTSxFQUFFLENBQUMsNkdBQTZHLENBQUM7b0JBQ3ZILGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7OztnQkFoSUMsaUJBQWlCO2dCQU1qQixNQUFNO2dCQU1OLFNBQVM7OzttQ0EwSFIsS0FBSzsyQkFJTCxLQUFLO3FDQUNMLEtBQUs7a0NBQ0wsS0FBSztzQ0FDTCxLQUFLOytCQUNMLEtBQUs7OEJBQ0wsS0FBSzs0QkFFTCxNQUFNOzJCQUNOLE1BQU07d0NBRU4sWUFBWSxTQUFDLG1CQUFtQjt5QkFFaEMsZUFBZSxTQUFDLFlBQVk7d0NBRTVCLFlBQVksU0FBQyxrQkFBa0I7O3dCQTVKbEM7O1NBcUlhLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFRhYlRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4vdGFicy5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgeyByZW1vdmVMaXN0ZW5lcnMsIHJlbW92ZVN1YnNjcmlwdGlvbnMgfSBmcm9tICcuLi9oZWxwZXJzJztcblxuLy8gQFRPRE8gVmVydGljYWwgdGFic1xuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstdGFiLWhlYWRlcicsXG4gIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVJlZj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT4nLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUYWJIZWFkZXJDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicpIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pjtcbn1cblxuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstdGFiLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFiQ29udGVudENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJykgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstdGFiJyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBpbmRleDogbnVtYmVyO1xuICBwdWJsaWMgaXNBY3RpdmUgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnRlbnRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgdGFiQ29sb3I6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicpIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKFRhYkhlYWRlckNvbXBvbmVudCkgcHVibGljIHRhYkhlYWRlckNvbXBvbmVudDogVGFiSGVhZGVyQ29tcG9uZW50O1xuICBAQ29udGVudENoaWxkKFRhYkNvbnRlbnRDb21wb25lbnQpIHB1YmxpYyB0YWJDb250ZW50Q29tcG9uZW50OiBUYWJDb250ZW50Q29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25Jbml0XG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy50YWJDb250ZW50Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZVJlZiA9IHRoaXMudGFiQ29udGVudENvbXBvbmVudC50ZW1wbGF0ZVJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLnRlbXBsYXRlUmVmO1xuICAgIH1cbiAgfVxufVxuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstdGFicy1oZWFkZXInLFxuICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFic0hlYWRlckNvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJykgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstdGFicycsXG4gIHRlbXBsYXRlOiBgPGRpdiBbbmdDbGFzc109XCJzdHlsZUNsYXNzXCI+XG4gIDx1bCBbbmdDbGFzc109XCJuYXZTdHlsZUNsYXNzXCIgW2NsYXNzLnB1bGwtcmlnaHRdPVwiaGVhZGVyIHx8IHRhYnNIZWFkZXJDb21wb25lbnRcIj5cbiAgICA8bGkgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YWIuaXNBY3RpdmVcIiBbbWtDb2xvcl09XCJ0YWIudGFiQ29sb3IgfHwgdGFic0NvbG9yXCIgbWtDb2xvclByb3BlcnR5PVwiYm9yZGVyLXRvcC1jb2xvclwiPlxuICAgICAgPGEgKm5nSWY9XCIhdGFiLmlzRGlzYWJsZWRcIiBbbWtUYWJUb2dnbGVdPVwidGFiXCIgaHJlZj1cIiNcIj5cbiAgICAgICAge3t0YWIuaGVhZGVyfX1cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXRhYi5oZWFkZXJcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWIudGFiSGVhZGVyQ29tcG9uZW50Py50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2E+XG4gICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidGFiLmlzRGlzYWJsZWRcIj5cbiAgICAgICAge3t0YWIuaGVhZGVyfX1cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXRhYi5oZWFkZXJcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWIudGFiSGVhZGVyQ29tcG9uZW50LnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgICA8bGkgKm5nSWY9XCJ0YWJzSGVhZGVyQ29tcG9uZW50IHx8IGhlYWRlclwiIFtuZ0NsYXNzXT1cImhlYWRlclN0eWxlQ2xhc3NcIj5cbiAgICAgIHt7aGVhZGVyfX1cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiFoZWFkZXJcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWJzSGVhZGVyQ29tcG9uZW50LnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2xpPlxuICA8L3VsPlxuICA8ZGl2IFtuZ0NsYXNzXT1cImNvbnRlbnRTdHlsZUNsYXNzXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIiBjbGFzcz1cInRhYi1wYW5lXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YWIuaXNBY3RpdmVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWIuY29udGVudFRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2AubmF2LXRhYnMtY3VzdG9tPi5uYXYtdGFicz5saXtib3JkZXItdG9wLXdpZHRoOjB9Lm5hdi10YWJzLWN1c3RvbT4ubmF2LXRhYnM+bGkuYWN0aXZle2JvcmRlci10b3Atd2lkdGg6M3B4fWBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUYWJzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGFjdGl2YXRlZFRhYkluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgbGlzdGVuZXJzID0gW107XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IFtdO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgYWN0aXZlVGFiSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZhdGVkVGFiSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXJTdHlsZUNsYXNzID0gJ2hlYWRlciBwdWxsLWxlZnQnO1xuICBASW5wdXQoKSBwdWJsaWMgbmF2U3R5bGVDbGFzcyA9ICduYXYgbmF2LXRhYnMnO1xuICBASW5wdXQoKSBwdWJsaWMgY29udGVudFN0eWxlQ2xhc3MgPSAndGFiLWNvbnRlbnQnO1xuICBASW5wdXQoKSBwdWJsaWMgc3R5bGVDbGFzcyA9ICduYXYtdGFicy1jdXN0b20nO1xuICBASW5wdXQoKSBwdWJsaWMgdGFic0NvbG9yOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9uT3BlbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAQ29udGVudENoaWxkKFRhYnNIZWFkZXJDb21wb25lbnQpIHB1YmxpYyB0YWJzSGVhZGVyQ29tcG9uZW50OiBUYWJzSGVhZGVyQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFiQ29tcG9uZW50KSBwdWJsaWMgdGFiczogUXVlcnlMaXN0PFRhYkNvbXBvbmVudD47XG5cbiAgQFZpZXdDaGlsZHJlbihUYWJUb2dnbGVEaXJlY3RpdmUpIHB1YmxpYyB0YWJUb2dnbGVEaXJlY3RpdmVzOiBRdWVyeUxpc3Q8VGFiVG9nZ2xlRGlyZWN0aXZlPjtcblxuICAvKipcbiAgICogQG1ldGhvZCBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0gY2hhbmdlRGV0ZWN0b3JSZWYgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gbmdab25lICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gcmVuZGVyZXIyICAgICAgICAgW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyXG4gICkge31cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ0FmdGVyVmlld0luaXRcbiAgICovXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAvLyBTZXQgdGFiIGluZGV4IG9uIGxvYWQuXG4gICAgdGhpcy5zZXRUYWJJbmRleCgpO1xuXG4gICAgLy8gVXBkYXRlIHRhYiBpbmRleCBpZiB0YWJzIGlzIHVwZGF0ZWQuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50YWJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0VGFiSW5kZXgoKTtcbiAgICB9KSk7XG5cbiAgICAvLyBPcGVuIHRhYiBvbiBsb2FkLlxuICAgIHRoaXMub3BlblRhYkluZGV4KCk7XG4gIH1cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ0FmdGVyVmlld0luaXRcbiAgICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBTZXQgdGFiIHRvZ2dsZXMgb24gbG9hZC5cbiAgICB0aGlzLnNldFRhYnNUb2dnbGUoKTtcblxuICAgIC8vIFVwZGF0ZSB0YWIgdG9nZ2xlcyBpZiB0YWJzIGlzIHVwZGF0ZWQuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50YWJUb2dnbGVEaXJlY3RpdmVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0VGFic1RvZ2dsZSgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25DaGFuZ2VzXG4gICAqIEBwYXJhbSBjaGFuZ2VzIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHtbcHJvcEtleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlfSkge1xuICAgIGlmIChjaGFuZ2VzLmFjdGl2ZVRhYkluZGV4KSB7XG4gICAgICB0aGlzLm9wZW5UYWJJbmRleCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25EZXN0cm95XG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICByZW1vdmVMaXN0ZW5lcnModGhpcy5saXN0ZW5lcnMpO1xuICAgIHJlbW92ZVN1YnNjcmlwdGlvbnModGhpcy5zdWJzY3JpcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbdG9nZ2xlVGFiIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHRvZ2dsZVRhYlxuICAgKi9cbiAgcHVibGljIG9wZW5UYWJJbmRleCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICB0aGlzLnRhYnMuZm9yRWFjaCgodGFiOiBUYWJDb21wb25lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGVkVGFiSW5kZXggPT09IHRhYi5pbmRleCB8fCAodGhpcy5hY3RpdmF0ZWRUYWJJbmRleCA9PT0gdW5kZWZpbmVkICYmIHRhYi5pbmRleCA9PT0gMCkpIHtcbiAgICAgICAgICB0YWIuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMub25PcGVuLmVtaXQoe2luZGV4OiB0YWIuaW5kZXh9KTtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YWIuaXNBY3RpdmUpIHtcbiAgICAgICAgICB0YWIuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh7aW5kZXg6IHRhYi5pbmRleH0pO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogW29wZW5UYWIgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2Qgb3BlblRhYlxuICAgKiBAcGFyYW0gZXZlbnQgICAgIFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHRhYlRvT3BlbiBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwdWJsaWMgb3BlblRhYihldmVudDogRXZlbnQsIHRhYlRvT3BlbjogVGFiQ29tcG9uZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0YWJUb09wZW4uaXNBY3RpdmUgPSB0cnVlO1xuICAgIHRoaXMub25PcGVuLmVtaXQoe2V2ZW50LCBpbmRleDogdGFiVG9PcGVuLmluZGV4fSk7XG4gICAgdGhpcy50YWJzLmZvckVhY2goKHRhYjogVGFiQ29tcG9uZW50KSA9PiB7XG4gICAgICBpZiAodGFiLmlzQWN0aXZlICYmIHRhYlRvT3BlbiAhPT0gdGFiKSB7XG4gICAgICAgIHRhYi5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh7ZXZlbnQsIGluZGV4OiB0YWIuaW5kZXh9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbc2V0VGFiSW5kZXggZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2Qgc2V0VGFiSW5kZXhcbiAgICovXG4gIHByaXZhdGUgc2V0VGFiSW5kZXgoKTogdm9pZCB7XG4gICAgdGhpcy50YWJzLmZvckVhY2goKHRhYjogVGFiQ29tcG9uZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICB0YWIuaW5kZXggPSBpbmRleDtcbiAgICB9KTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbc2V0VGFic1RvZ2dsZSBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBzZXRUYWJzVG9nZ2xlXG4gICAqL1xuICBwcml2YXRlIHNldFRhYnNUb2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSByZW1vdmVMaXN0ZW5lcnModGhpcy5saXN0ZW5lcnMpO1xuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMudGFiVG9nZ2xlRGlyZWN0aXZlcy5mb3JFYWNoKCh0YWJUb2dnbGU6IFRhYlRvZ2dsZURpcmVjdGl2ZSkgPT4ge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0YWJUb2dnbGUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLm9wZW5UYWIoZXZlbnQsIHRhYlRvZ2dsZS50YWJDb21wb25lbnQpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19