UNPKG

angular-admin-lte-teliqo

Version:
485 lines (484 loc) 38.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, Input, NgZone, Output, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren } from '@angular/core'; import { AccordionToggleDirective } from './accordion.directive'; import { removeListeners, removeSubscriptions } from '../helpers'; var AccordionHeaderComponent = /** @class */ (function () { function AccordionHeaderComponent() { } AccordionHeaderComponent.decorators = [ { type: Component, args: [{ selector: 'mk-accordion-header', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>' },] }, ]; /** @nocollapse */ AccordionHeaderComponent.propDecorators = { "templateRef": [{ type: ViewChild, args: ['templateRef',] },], }; return AccordionHeaderComponent; }()); export { AccordionHeaderComponent }; function AccordionHeaderComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ AccordionHeaderComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ AccordionHeaderComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ AccordionHeaderComponent.propDecorators; /** @type {?} */ AccordionHeaderComponent.prototype.templateRef; } var AccordionContentComponent = /** @class */ (function () { function AccordionContentComponent() { } AccordionContentComponent.decorators = [ { type: Component, args: [{ selector: 'mk-accordion-content', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>' },] }, ]; /** @nocollapse */ AccordionContentComponent.propDecorators = { "templateRef": [{ type: ViewChild, args: ['templateRef',] },], }; return AccordionContentComponent; }()); export { AccordionContentComponent }; function AccordionContentComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ AccordionContentComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ AccordionContentComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ AccordionContentComponent.propDecorators; /** @type {?} */ AccordionContentComponent.prototype.templateRef; } var AccordionComponent = /** @class */ (function () { function AccordionComponent() { this.contentStyleClass = 'box-body'; this.headerStyleClass = 'box-header with-border'; } /** * @method ngOnInit */ /** * \@method ngOnInit * @return {?} */ AccordionComponent.prototype.ngOnInit = /** * \@method ngOnInit * @return {?} */ function () { this.headerStyleColor = this.headerColor; if (!this.header && !this.accordionHeaderComponent) { throw new Error('Attribute "header" OR Component "mk-+accordion-header" is required for component "mk-+accordion"'); } if (this.accordionContentComponent) { this.contentTemplateRef = this.accordionContentComponent.templateRef; } else { this.contentTemplateRef = this.templateRef; } }; AccordionComponent.decorators = [ { type: Component, args: [{ selector: 'mk-accordion', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>' },] }, ]; /** @nocollapse */ AccordionComponent.propDecorators = { "borderColor": [{ type: Input },], "contentColor": [{ type: Input },], "contentStyleClass": [{ type: Input },], "header": [{ type: Input },], "headerColor": [{ type: Input },], "headerColorHover": [{ type: Input },], "headerStyleClass": [{ type: Input },], "accordionHeaderComponent": [{ type: ContentChild, args: [AccordionHeaderComponent,] },], "accordionContentComponent": [{ type: ContentChild, args: [AccordionContentComponent,] },], "templateRef": [{ type: ViewChild, args: ['templateRef',] },], }; return AccordionComponent; }()); export { AccordionComponent }; function AccordionComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ AccordionComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ AccordionComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ AccordionComponent.propDecorators; /** @type {?} */ AccordionComponent.prototype.contentTemplateRef; /** @type {?} */ AccordionComponent.prototype.headerStyleColor; /** @type {?} */ AccordionComponent.prototype.isCollapsing; /** @type {?} */ AccordionComponent.prototype.isCollapsed; /** @type {?} */ AccordionComponent.prototype.index; /** @type {?} */ AccordionComponent.prototype.borderColor; /** @type {?} */ AccordionComponent.prototype.contentColor; /** @type {?} */ AccordionComponent.prototype.contentStyleClass; /** @type {?} */ AccordionComponent.prototype.header; /** @type {?} */ AccordionComponent.prototype.headerColor; /** @type {?} */ AccordionComponent.prototype.headerColorHover; /** @type {?} */ AccordionComponent.prototype.headerStyleClass; /** @type {?} */ AccordionComponent.prototype.accordionHeaderComponent; /** @type {?} */ AccordionComponent.prototype.accordionContentComponent; /** @type {?} */ AccordionComponent.prototype.templateRef; } var AccordionGroupComponent = /** @class */ (function () { /** * @method constructor * @param changeDetectorRef [description] * @param ngZone [description] * @param renderer2 [description] */ function AccordionGroupComponent(changeDetectorRef, ngZone, renderer2) { this.changeDetectorRef = changeDetectorRef; this.ngZone = ngZone; this.renderer2 = renderer2; this.activeIndex = [0]; this.listeners = []; this.subscriptions = []; this.styleClass = 'box-group'; this.onCollapseStart = new EventEmitter(); this.onCollapseDone = new EventEmitter(); } Object.defineProperty(AccordionGroupComponent.prototype, "_activeIndex", { set: /** * @param {?} value * @return {?} */ function (value) { this.activeIndex = value instanceof Array ? value : [value]; }, enumerable: true, configurable: true }); /** * [headerMouseLeave description] * \@method headerMouseLeave * @param {?} accordion [description] * @return {?} */ AccordionGroupComponent.headerMouseLeave = /** * [headerMouseLeave description] * \@method headerMouseLeave * @param {?} accordion [description] * @return {?} */ function (accordion) { accordion.headerStyleColor = accordion.headerColor; }; /** * [headerMouseEnter description] * \@method headerMouseEnter * @param {?} accordion [description] * @return {?} */ AccordionGroupComponent.headerMouseEnter = /** * [headerMouseEnter description] * \@method headerMouseEnter * @param {?} accordion [description] * @return {?} */ function (accordion) { if (accordion.headerColorHover) { accordion.headerStyleColor = accordion.headerColorHover; } }; /** * @method ngAfterViewInit */ /** * \@method ngAfterViewInit * @return {?} */ AccordionGroupComponent.prototype.ngAfterContentInit = /** * \@method ngAfterViewInit * @return {?} */ function () { var _this = this; this.setAccordionsIndex(); this.updateAccordionIsCollapsed(); this.subscriptions.push(this.accordionComponents.changes.subscribe(function () { _this.setAccordionsIndex(); })); }; /** * @method ngAfterViewInit */ /** * \@method ngAfterViewInit * @return {?} */ AccordionGroupComponent.prototype.ngAfterViewInit = /** * \@method ngAfterViewInit * @return {?} */ function () { var _this = this; this.setAccordionsToggle(); this.subscriptions.push(this.accordionToggleDirectives.changes.subscribe(function () { _this.setAccordionsToggle(); })); }; /** * [ngOnChanges description] * @method ngOnChanges * @param changes [description] * @return [description] */ /** * [ngOnChanges description] * \@method ngOnChanges * @param {?} changes [description] * @return {?} [description] */ AccordionGroupComponent.prototype.ngOnChanges = /** * [ngOnChanges description] * \@method ngOnChanges * @param {?} changes [description] * @return {?} [description] */ function (changes) { if (changes["_activeIndex"].firstChange === false) { this.updateAccordionIsCollapsed(); } }; /** * @method ngOnDestroy */ /** * \@method ngOnDestroy * @return {?} */ AccordionGroupComponent.prototype.ngOnDestroy = /** * \@method ngOnDestroy * @return {?} */ function () { removeListeners(this.listeners); removeSubscriptions(this.subscriptions); }; /** * [toggleAccordion description] * \@method toggleAccordion * @param {?} event [description] * @param {?} toggleIndex [description] * @return {?} */ AccordionGroupComponent.prototype.toggleAccordion = /** * [toggleAccordion description] * \@method toggleAccordion * @param {?} event [description] * @param {?} toggleIndex [description] * @return {?} */ function (event, toggleIndex) { event.preventDefault(); var /** @type {?} */ indexOf = this.activeIndex['indexOf'](toggleIndex); if (indexOf === -1) { if (this.isMultiple) { this.activeIndex.push(toggleIndex); } else { this.activeIndex = [toggleIndex]; } } else { if (this.isMultiple) { this.activeIndex.splice(indexOf, 1); } else { this.activeIndex = []; } } this.updateAccordionIsCollapsed(); }; /** * [collapseStart description] * \@method collapseStart * @param {?} event [description] * @param {?} accordion [description] * @return {?} */ AccordionGroupComponent.prototype.collapseStart = /** * [collapseStart description] * \@method collapseStart * @param {?} event [description] * @param {?} accordion [description] * @return {?} */ function (event, accordion) { accordion.isCollapsing = true; this.onCollapseStart.emit({ animationEvent: event, index: accordion.index }); }; /** * [collapseDone description] * \@method collapseDone * @param {?} event [description] * @param {?} accordion [description] * @return {?} */ AccordionGroupComponent.prototype.collapseDone = /** * [collapseDone description] * \@method collapseDone * @param {?} event [description] * @param {?} accordion [description] * @return {?} */ function (event, accordion) { accordion.isCollapsing = false; this.onCollapseDone.emit({ animationEvent: event, index: accordion.index }); }; /** * [setAccordionsIndex description] * \@method setAccordionsIndex * @return {?} */ AccordionGroupComponent.prototype.setAccordionsIndex = /** * [setAccordionsIndex description] * \@method setAccordionsIndex * @return {?} */ function () { this.accordionComponents.forEach(function (accordion, index) { accordion.index = index; }); }; /** * [setAccordionsToggle description] * \@method setAccordionsToggle * @return {?} */ AccordionGroupComponent.prototype.setAccordionsToggle = /** * [setAccordionsToggle description] * \@method setAccordionsToggle * @return {?} */ function () { var _this = this; this.listeners = removeListeners(this.listeners); this.ngZone.runOutsideAngular(function () { _this.accordionToggleDirectives.forEach(function (accordionToggle) { _this.listeners.push(_this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'click', function (event) { _this.toggleAccordion(event, accordionToggle.accordionComponent.index); _this.changeDetectorRef.detectChanges(); })); _this.listeners.push(_this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'mouseenter', function () { AccordionGroupComponent.headerMouseEnter(accordionToggle.accordionComponent); _this.changeDetectorRef.detectChanges(); })); _this.listeners.push(_this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'mouseleave', function () { AccordionGroupComponent.headerMouseLeave(accordionToggle.accordionComponent); _this.changeDetectorRef.detectChanges(); })); }); }); }; /** * [updateAccordionIsCollapsed description] * \@method updateAccordionIsCollapsed * @return {?} */ AccordionGroupComponent.prototype.updateAccordionIsCollapsed = /** * [updateAccordionIsCollapsed description] * \@method updateAccordionIsCollapsed * @return {?} */ function () { var _this = this; this.accordionComponents.forEach(function (accordion, index) { accordion.isCollapsed = _this.activeIndex.indexOf(index) === -1; }); }; AccordionGroupComponent.decorators = [ { type: Component, args: [{ selector: 'mk-accordion-group', template: "<div [ngClass]=\"styleClass\">\n <div *ngFor=\"let accordion of accordionComponents\" class=\"panel box\" [mkColor]=\"accordion.borderColor\" mkColorProperty=\"border-top-color\" mkColorPrefix=\"box\">\n <div [ngClass]=\"accordion.headerStyleClass\" [class.no-border]=\"accordion.isCollapsed && !accordion.isCollapsing\">\n <h4 class=\"box-title\">\n <a [mkAccordionToggle]=\"accordion\" href=\"#\" [mkFontColor]=\"accordion.headerStyleColor\" [class.collapsed]=\"accordion.isCollapsed\">\n {{accordion.header}}\n <ng-template *ngIf=\"!accordion.header\" [ngTemplateOutlet]=\"accordion.accordionHeaderComponent?.templateRef\"></ng-template>\n </a>\n </h4>\n </div>\n <div class=\"panel-collapse\" [collapseAnimation]=\"accordion.isCollapsed\" (collapseAnimation.start)=\"collapseStart($event, accordion)\" (collapseAnimation.done)=\"collapseDone($event, accordion)\">\n <div [ngClass]=\"accordion.contentStyleClass\" [mkFontColor]=\"accordion.contentColor\">\n <ng-template [ngTemplateOutlet]=\"accordion.contentTemplateRef\"></ng-template>\n </div>\n </div>\n </div>\n</div>\n" },] }, ]; /** @nocollapse */ AccordionGroupComponent.ctorParameters = function () { return [ { type: ChangeDetectorRef, }, { type: NgZone, }, { type: Renderer2, }, ]; }; AccordionGroupComponent.propDecorators = { "_activeIndex": [{ type: Input, args: ['activeIndex',] },], "isMultiple": [{ type: Input },], "styleClass": [{ type: Input },], "onCollapseStart": [{ type: Output },], "onCollapseDone": [{ type: Output },], "accordionComponents": [{ type: ContentChildren, args: [AccordionComponent,] },], "accordionToggleDirectives": [{ type: ViewChildren, args: [AccordionToggleDirective,] },], }; return AccordionGroupComponent; }()); export { AccordionGroupComponent }; function AccordionGroupComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ AccordionGroupComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ AccordionGroupComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ AccordionGroupComponent.propDecorators; /** @type {?} */ AccordionGroupComponent.prototype.activeIndex; /** @type {?} */ AccordionGroupComponent.prototype.listeners; /** @type {?} */ AccordionGroupComponent.prototype.subscriptions; /** @type {?} */ AccordionGroupComponent.prototype.isMultiple; /** @type {?} */ AccordionGroupComponent.prototype.styleClass; /** @type {?} */ AccordionGroupComponent.prototype.onCollapseStart; /** @type {?} */ AccordionGroupComponent.prototype.onCollapseDone; /** @type {?} */ AccordionGroupComponent.prototype.accordionComponents; /** @type {?} */ AccordionGroupComponent.prototype.accordionToggleDirectives; /** @type {?} */ AccordionGroupComponent.prototype.changeDetectorRef; /** @type {?} */ AccordionGroupComponent.prototype.ngZone; /** @type {?} */ AccordionGroupComponent.prototype.renderer2; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItYWRtaW4tbHRlLXRlbGlxby8iLCJzb3VyY2VzIjpbImxpYi9hY2NvcmRpb24vYWNjb3JkaW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUdMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFJTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDOzs7OztnQkFNakUsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSxtRUFBbUU7aUJBQzlFOzs7O2dDQUVFLFNBQVMsU0FBQyxhQUFhOzttQ0FyQzFCOztTQW9DYSx3QkFBd0I7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQkFRcEMsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRSxtRUFBbUU7aUJBQzlFOzs7O2dDQUVFLFNBQVMsU0FBQyxhQUFhOztvQ0FqRDFCOztTQWdEYSx5QkFBeUI7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBcUJBLFVBQVU7Z0NBSVgsd0JBQXdCOztJQU8zRDs7T0FFRzs7Ozs7SUFDSCxxQ0FBUTs7OztJQUFSO1FBQ0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFekMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztZQUNuRCxN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QUFDO2lCQUN4QyxDQUFDLENBQUMsQ0FBQztnQkFDSixLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUU7b0JBQ2hHLHVCQUF1QixDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO29CQUM3RSxLQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ3hDLENBQUMsQ0FBQyxDQUFDO2FBQ0wsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDOzs7Ozs7O0lBT0csNERBQTBCOzs7Ozs7O1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsVUFBQyxTQUE2QixFQUFFLEtBQWE7WUFDNUUsU0FBUyxDQUFDLFdBQVcsR0FBRyxLQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNoRSxDQUFDLENBQUM7OztnQkEvTU4sU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFFBQVEsRUFBRSxnb0NBaUJYO2lCQUNBOzs7O2dCQXZIQyxpQkFBaUI7Z0JBTWpCLE1BQU07Z0JBTU4sU0FBUzs7O2lDQW9IUixLQUFLLFNBQUMsYUFBYTsrQkFHbkIsS0FBSzsrQkFDTCxLQUFLO29DQUVMLE1BQU07bUNBQ04sTUFBTTt3Q0FFTixlQUFlLFNBQUMsa0JBQWtCOzhDQUVsQyxZQUFZLFNBQUMsd0JBQXdCOztrQ0E5SXhDOztTQTJIYSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9hbmltYXRpb25zLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IEFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4vYWNjb3JkaW9uLmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7IHJlbW92ZUxpc3RlbmVycywgcmVtb3ZlU3Vic2NyaXB0aW9ucyB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbi8qXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtay1hY2NvcmRpb24taGVhZGVyJyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPidcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYnKSBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG59XG5cblxuLypcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21rLWFjY29yZGlvbi1jb250ZW50JyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPidcbn0pXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uQ29udGVudENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJykgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG5cbi8qXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtay1hY2NvcmRpb24nLFxuICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+J1xufSlcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgY29udGVudFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxBY2NvcmRpb25Db250ZW50Q29tcG9uZW50PjtcbiAgcHVibGljIGhlYWRlclN0eWxlQ29sb3I6IHN0cmluZztcbiAgcHVibGljIGlzQ29sbGFwc2luZzogYm9vbGVhbjtcbiAgcHVibGljIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcblxuICBASW5wdXQoKSBwdWJsaWMgYm9yZGVyQ29sb3I6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGNvbnRlbnRDb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgY29udGVudFN0eWxlQ2xhc3MgPSAnYm94LWJvZHknO1xuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXJDb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyQ29sb3JIb3Zlcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyU3R5bGVDbGFzcyA9ICdib3gtaGVhZGVyIHdpdGgtYm9yZGVyJztcblxuICBAQ29udGVudENoaWxkKEFjY29yZGlvbkhlYWRlckNvbXBvbmVudCkgcHVibGljIGFjY29yZGlvbkhlYWRlckNvbXBvbmVudDogQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50O1xuICBAQ29udGVudENoaWxkKEFjY29yZGlvbkNvbnRlbnRDb21wb25lbnQpIHB1YmxpYyBhY2NvcmRpb25Db250ZW50Q29tcG9uZW50OiBBY2NvcmRpb25Db250ZW50Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJykgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25Jbml0XG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmhlYWRlclN0eWxlQ29sb3IgPSB0aGlzLmhlYWRlckNvbG9yO1xuXG4gICAgaWYgKCF0aGlzLmhlYWRlciAmJiAhdGhpcy5hY2NvcmRpb25IZWFkZXJDb21wb25lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXR0cmlidXRlIFwiaGVhZGVyXCIgT1IgQ29tcG9uZW50IFwibWstK2FjY29yZGlvbi1oZWFkZXJcIiBpcyByZXF1aXJlZCBmb3IgY29tcG9uZW50IFwibWstK2FjY29yZGlvblwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWNjb3JkaW9uQ29udGVudENvbXBvbmVudCkge1xuICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLmFjY29yZGlvbkNvbnRlbnRDb21wb25lbnQudGVtcGxhdGVSZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudFRlbXBsYXRlUmVmID0gdGhpcy50ZW1wbGF0ZVJlZjtcbiAgICB9XG4gIH1cbn1cblxuXG4vKlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWstYWNjb3JkaW9uLWdyb3VwJyxcbiAgdGVtcGxhdGU6IGA8ZGl2IFtuZ0NsYXNzXT1cInN0eWxlQ2xhc3NcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgYWNjb3JkaW9uIG9mIGFjY29yZGlvbkNvbXBvbmVudHNcIiBjbGFzcz1cInBhbmVsIGJveFwiIFtta0NvbG9yXT1cImFjY29yZGlvbi5ib3JkZXJDb2xvclwiIG1rQ29sb3JQcm9wZXJ0eT1cImJvcmRlci10b3AtY29sb3JcIiBta0NvbG9yUHJlZml4PVwiYm94XCI+XG4gICAgPGRpdiBbbmdDbGFzc109XCJhY2NvcmRpb24uaGVhZGVyU3R5bGVDbGFzc1wiIFtjbGFzcy5uby1ib3JkZXJdPVwiYWNjb3JkaW9uLmlzQ29sbGFwc2VkICYmICFhY2NvcmRpb24uaXNDb2xsYXBzaW5nXCI+XG4gICAgICA8aDQgY2xhc3M9XCJib3gtdGl0bGVcIj5cbiAgICAgICAgPGEgW21rQWNjb3JkaW9uVG9nZ2xlXT1cImFjY29yZGlvblwiIGhyZWY9XCIjXCIgW21rRm9udENvbG9yXT1cImFjY29yZGlvbi5oZWFkZXJTdHlsZUNvbG9yXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJhY2NvcmRpb24uaXNDb2xsYXBzZWRcIj5cbiAgICAgICAgICB7e2FjY29yZGlvbi5oZWFkZXJ9fVxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiFhY2NvcmRpb24uaGVhZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWNjb3JkaW9uLmFjY29yZGlvbkhlYWRlckNvbXBvbmVudD8udGVtcGxhdGVSZWZcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2E+XG4gICAgICA8L2g0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1jb2xsYXBzZVwiIFtjb2xsYXBzZUFuaW1hdGlvbl09XCJhY2NvcmRpb24uaXNDb2xsYXBzZWRcIiAoY29sbGFwc2VBbmltYXRpb24uc3RhcnQpPVwiY29sbGFwc2VTdGFydCgkZXZlbnQsIGFjY29yZGlvbilcIiAoY29sbGFwc2VBbmltYXRpb24uZG9uZSk9XCJjb2xsYXBzZURvbmUoJGV2ZW50LCBhY2NvcmRpb24pXCI+XG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cImFjY29yZGlvbi5jb250ZW50U3R5bGVDbGFzc1wiIFtta0ZvbnRDb2xvcl09XCJhY2NvcmRpb24uY29udGVudENvbG9yXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJhY2NvcmRpb24uY29udGVudFRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25Hcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBhY3RpdmVJbmRleDogYW55ID0gWzBdO1xuICAvLyBAVE9ETyBjaGFuZ2UgdHlwZXMgZm9yIGxpc3RlbmVycyB0byBhbGwgZmlsZXNcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6IEFycmF5PEZ1bmN0aW9uPiA9IFtdO1xuICAvLyBAVE9ETyBjaGFuZ2UgdHlwZXMgZm9yIHN1YnNjcmlwdGlvbnMgdG8gYWxsIGZpbGVzXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuXG5cbiAgQElucHV0KCdhY3RpdmVJbmRleCcpIHNldCBfYWN0aXZlSW5kZXgodmFsdWUpIHtcbiAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdmFsdWUgaW5zdGFuY2VvZiBBcnJheSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgaXNNdWx0aXBsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIHN0eWxlQ2xhc3MgPSAnYm94LWdyb3VwJztcblxuICBAT3V0cHV0KCkgcHVibGljIG9uQ29sbGFwc2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvbkNvbGxhcHNlRG9uZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAQ29udGVudENoaWxkcmVuKEFjY29yZGlvbkNvbXBvbmVudCkgcHVibGljIGFjY29yZGlvbkNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxBY2NvcmRpb25Db21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGRyZW4oQWNjb3JkaW9uVG9nZ2xlRGlyZWN0aXZlKSBwcml2YXRlIGFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxBY2NvcmRpb25Ub2dnbGVEaXJlY3RpdmU+O1xuXG4gIC8qKlxuICAgKiBAbWV0aG9kIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSBuZ1pvbmUgICAgICAgICAgICBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSByZW5kZXJlcjIgICAgICAgICBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBbaGVhZGVyTW91c2VMZWF2ZSBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBoZWFkZXJNb3VzZUxlYXZlXG4gICAqIEBwYXJhbSBhY2NvcmRpb24gW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBoZWFkZXJNb3VzZUxlYXZlKGFjY29yZGlvbjogQWNjb3JkaW9uQ29tcG9uZW50KTogdm9pZCB7XG4gICAgYWNjb3JkaW9uLmhlYWRlclN0eWxlQ29sb3IgPSBhY2NvcmRpb24uaGVhZGVyQ29sb3I7XG4gIH1cblxuICAvKipcbiAgICogW2hlYWRlck1vdXNlRW50ZXIgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgaGVhZGVyTW91c2VFbnRlclxuICAgKiBAcGFyYW0gYWNjb3JkaW9uIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaGVhZGVyTW91c2VFbnRlcihhY2NvcmRpb246IEFjY29yZGlvbkNvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmIChhY2NvcmRpb24uaGVhZGVyQ29sb3JIb3Zlcikge1xuICAgICAgYWNjb3JkaW9uLmhlYWRlclN0eWxlQ29sb3IgPSBhY2NvcmRpb24uaGVhZGVyQ29sb3JIb3ZlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ0FmdGVyVmlld0luaXRcbiAgICovXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLnNldEFjY29yZGlvbnNJbmRleCgpO1xuICAgIHRoaXMudXBkYXRlQWNjb3JkaW9uSXNDb2xsYXBzZWQoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYWNjb3JkaW9uQ29tcG9uZW50cy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNldEFjY29yZGlvbnNJbmRleCgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nQWZ0ZXJWaWV3SW5pdFxuICAgKi9cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuc2V0QWNjb3JkaW9uc1RvZ2dsZSgpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hY2NvcmRpb25Ub2dnbGVEaXJlY3RpdmVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0QWNjb3JkaW9uc1RvZ2dsZSgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbbmdPbkNoYW5nZXMgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgbmdPbkNoYW5nZXNcbiAgICogQHBhcmFtIGNoYW5nZXMgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5fYWN0aXZlSW5kZXguZmlyc3RDaGFuZ2UgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgbmdPbkRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHJlbW92ZUxpc3RlbmVycyh0aGlzLmxpc3RlbmVycyk7XG4gICAgcmVtb3ZlU3Vic2NyaXB0aW9ucyh0aGlzLnN1YnNjcmlwdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFt0b2dnbGVBY2NvcmRpb24gZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgdG9nZ2xlQWNjb3JkaW9uXG4gICAqIEBwYXJhbSBldmVudCAgICAgICBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB0b2dnbGVJbmRleCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlQWNjb3JkaW9uKGV2ZW50OiBFdmVudCwgdG9nZ2xlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBpbmRleE9mID0gdGhpcy5hY3RpdmVJbmRleFsnaW5kZXhPZiddKHRvZ2dsZUluZGV4KTtcbiAgICBpZiAoaW5kZXhPZiA9PT0gLTEpIHtcbiAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleC5wdXNoKHRvZ2dsZUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBbdG9nZ2xlSW5kZXhdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXguc3BsaWNlKGluZGV4T2YsIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IFtdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkKCk7XG4gIH1cblxuICAvKipcbiAgICogW2NvbGxhcHNlU3RhcnQgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgY29sbGFwc2VTdGFydFxuICAgKiBAcGFyYW0gZXZlbnQgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gYWNjb3JkaW9uIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZVN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCwgYWNjb3JkaW9uOiBBY2NvcmRpb25Db21wb25lbnQpOiB2b2lkIHtcbiAgICBhY2NvcmRpb24uaXNDb2xsYXBzaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm9uQ29sbGFwc2VTdGFydC5lbWl0KHthbmltYXRpb25FdmVudDogZXZlbnQsIGluZGV4OiBhY2NvcmRpb24uaW5kZXh9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbY29sbGFwc2VEb25lIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIGNvbGxhcHNlRG9uZVxuICAgKiBAcGFyYW0gZXZlbnQgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0gYWNjb3JkaW9uIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIHB1YmxpYyBjb2xsYXBzZURvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50LCBhY2NvcmRpb246IEFjY29yZGlvbkNvbXBvbmVudCk6IHZvaWQge1xuICAgIGFjY29yZGlvbi5pc0NvbGxhcHNpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm9uQ29sbGFwc2VEb25lLmVtaXQoe2FuaW1hdGlvbkV2ZW50OiBldmVudCwgaW5kZXg6IGFjY29yZGlvbi5pbmRleH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFtzZXRBY2NvcmRpb25zSW5kZXggZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2Qgc2V0QWNjb3JkaW9uc0luZGV4XG4gICAqL1xuICBwcml2YXRlIHNldEFjY29yZGlvbnNJbmRleCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjY29yZGlvbkNvbXBvbmVudHMuZm9yRWFjaCgoYWNjb3JkaW9uOiBBY2NvcmRpb25Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGFjY29yZGlvbi5pbmRleCA9IGluZGV4O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFtzZXRBY2NvcmRpb25zVG9nZ2xlIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHNldEFjY29yZGlvbnNUb2dnbGVcbiAgICovXG4gIHByaXZhdGUgc2V0QWNjb3JkaW9uc1RvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbmVycyA9IHJlbW92ZUxpc3RlbmVycyh0aGlzLmxpc3RlbmVycyk7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZXMuZm9yRWFjaCgoYWNjb3JkaW9uVG9nZ2xlOiBBY2NvcmRpb25Ub2dnbGVEaXJlY3RpdmUpID0+IHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyMi5saXN0ZW4oYWNjb3JkaW9uVG9nZ2xlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy50b2dnbGVBY2NvcmRpb24oZXZlbnQsIGFjY29yZGlvblRvZ2dsZS5hY2NvcmRpb25Db21wb25lbnQuaW5kZXgpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlcjIubGlzdGVuKGFjY29yZGlvblRvZ2dsZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgICAgICAgIEFjY29yZGlvbkdyb3VwQ29tcG9uZW50LmhlYWRlck1vdXNlRW50ZXIoYWNjb3JkaW9uVG9nZ2xlLmFjY29yZGlvbkNvbXBvbmVudCk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyMi5saXN0ZW4oYWNjb3JkaW9uVG9nZ2xlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICAgICAgQWNjb3JkaW9uR3JvdXBDb21wb25lbnQuaGVhZGVyTW91c2VMZWF2ZShhY2NvcmRpb25Ub2dnbGUuYWNjb3JkaW9uQ29tcG9uZW50KTtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogW3VwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHVwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkKCk6IHZvaWQge1xuICAgIHRoaXMuYWNjb3JkaW9uQ29tcG9uZW50cy5mb3JFYWNoKChhY2NvcmRpb246IEFjY29yZGlvbkNvbXBvbmVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgYWNjb3JkaW9uLmlzQ29sbGFwc2VkID0gdGhpcy5hY3RpdmVJbmRleC5pbmRleE9mKGluZGV4KSA9PT0gLTE7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==