UNPKG

ad-custom-lib

Version:

This is an UI custom library based on Adminlte library with purpose for personal use, if you need a full template of Primeng please visit https://github.com/mledour/angular-admin-lte

560 lines 40.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, Input, NgZone, Output, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren } from '@angular/core'; import { removeListeners, removeSubscriptions } from '../helpers'; import { AccordionToggleDirective } from './accordion.directive'; /* * */ 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>' }] } ]; AccordionHeaderComponent.propDecorators = { templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }] }; return AccordionHeaderComponent; }()); export { AccordionHeaderComponent }; if (false) { /** @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>' }] } ]; AccordionContentComponent.propDecorators = { templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }] }; return AccordionContentComponent; }()); export { AccordionContentComponent }; if (false) { /** @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>' }] } ]; 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, { static: true },] }], accordionContentComponent: [{ type: ContentChild, args: [AccordionContentComponent, { static: true },] }], templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }] }; return AccordionComponent; }()); export { AccordionComponent }; if (false) { /** @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]; // @TODO change types for listeners to all files this.listeners = []; // @TODO change types for subscriptions to all files 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] */ /** * [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] */ /** * [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((/** * @return {?} */ 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((/** * @return {?} */ 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] */ /** * [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(); /** @type {?} */ var 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] */ /** * [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] */ /** * [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 */ /** * [setAccordionsIndex description] * \@method setAccordionsIndex * @private * @return {?} */ AccordionGroupComponent.prototype.setAccordionsIndex = /** * [setAccordionsIndex description] * \@method setAccordionsIndex * @private * @return {?} */ function () { this.accordionComponents.forEach((/** * @param {?} accordion * @param {?} index * @return {?} */ function (accordion, index) { accordion.index = index; })); }; /** * [setAccordionsToggle description] * @method setAccordionsToggle */ /** * [setAccordionsToggle description] * \@method setAccordionsToggle * @private * @return {?} */ AccordionGroupComponent.prototype.setAccordionsToggle = /** * [setAccordionsToggle description] * \@method setAccordionsToggle * @private * @return {?} */ function () { var _this = this; this.listeners = removeListeners(this.listeners); this.ngZone.runOutsideAngular((/** * @return {?} */ function () { _this.accordionToggleDirectives.forEach((/** * @param {?} accordionToggle * @return {?} */ function (accordionToggle) { _this.listeners.push(_this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'click', (/** * @param {?} event * @return {?} */ function (event) { _this.toggleAccordion(event, accordionToggle.accordionComponent.index); _this.changeDetectorRef.detectChanges(); }))); _this.listeners.push(_this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'mouseenter', (/** * @return {?} */ function () { AccordionGroupComponent.headerMouseEnter(accordionToggle.accordionComponent); _this.changeDetectorRef.detectChanges(); }))); _this.listeners.push(_this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'mouseleave', (/** * @return {?} */ function () { AccordionGroupComponent.headerMouseLeave(accordionToggle.accordionComponent); _this.changeDetectorRef.detectChanges(); }))); })); })); }; /** * [updateAccordionIsCollapsed description] * @method updateAccordionIsCollapsed */ /** * [updateAccordionIsCollapsed description] * \@method updateAccordionIsCollapsed * @private * @return {?} */ AccordionGroupComponent.prototype.updateAccordionIsCollapsed = /** * [updateAccordionIsCollapsed description] * \@method updateAccordionIsCollapsed * @private * @return {?} */ function () { var _this = this; this.accordionComponents.forEach((/** * @param {?} accordion * @param {?} index * @return {?} */ function (accordion, index) { accordion.isCollapsed = _this.activeIndex.indexOf(index) === -1; })); }; AccordionGroupComponent.decorators = [ { type: Component, args: [{ selector: 'mk-accordion-group', template: "<div [ngClass]=\"styleClass\">\r\n <div *ngFor=\"let accordion of accordionComponents\" class=\"panel box\" [mkColor]=\"accordion.borderColor\"\r\n mkColorProperty=\"border-top-color\" mkColorPrefix=\"box\">\r\n <div [ngClass]=\"accordion.headerStyleClass\"\r\n [class.no-border]=\"accordion.isCollapsed && !accordion.isCollapsing\">\r\n <h4 class=\"box-title\">\r\n <a [mkAccordionToggle]=\"accordion\" href=\"#\" [mkFontColor]=\"accordion.headerStyleColor\"\r\n [class.collapsed]=\"accordion.isCollapsed\">\r\n {{accordion.header}}\r\n <ng-template *ngIf=\"!accordion.header\"\r\n [ngTemplateOutlet]=\"accordion.accordionHeaderComponent?.templateRef\"></ng-template>\r\n </a>\r\n </h4>\r\n </div>\r\n <div class=\"panel-collapse\" [mkCollapseAnimation]=\"accordion.isCollapsed\"\r\n (mkCollapseAnimation.start)=\"collapseStart($event, accordion)\"\r\n (mkCollapseAnimation.done)=\"collapseDone($event, accordion)\">\r\n <div [ngClass]=\"accordion.contentStyleClass\" [mkFontColor]=\"accordion.contentColor\">\r\n <ng-template [ngTemplateOutlet]=\"accordion.contentTemplateRef\"></ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }] } ]; /** @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 }; if (false) { /** * @type {?} * @private */ AccordionGroupComponent.prototype.activeIndex; /** * @type {?} * @private */ AccordionGroupComponent.prototype.listeners; /** * @type {?} * @private */ AccordionGroupComponent.prototype.subscriptions; /** @type {?} */ AccordionGroupComponent.prototype.isMultiple; /** @type {?} */ AccordionGroupComponent.prototype.styleClass; /** @type {?} */ AccordionGroupComponent.prototype.onCollapseStart; /** @type {?} */ AccordionGroupComponent.prototype.onCollapseDone; /** @type {?} */ AccordionGroupComponent.prototype.accordionComponents; /** * @type {?} * @private */ AccordionGroupComponent.prototype.accordionToggleDirectives; /** * @type {?} * @private */ AccordionGroupComponent.prototype.changeDetectorRef; /** * @type {?} * @private */ AccordionGroupComponent.prototype.ngZone; /** * @type {?} * @private */ AccordionGroupComponent.prototype.renderer2; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FkLWN1c3RvbS1saWIvIiwic291cmNlcyI6WyJsaWIvYWNjb3JkaW9uL2FjY29yZGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLE9BQU8sRUFDOEIsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQzVGLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFDeEUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQ3RELE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFLakU7SUFBQTtJQU1BLENBQUM7O2dCQU5BLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixRQUFRLEVBQUUsbUVBQW1FO2lCQUNoRjs7OzhCQUVJLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOztJQUM5QywrQkFBQztDQUFBLEFBTkQsSUFNQztTQUZZLHdCQUF3Qjs7O0lBQ2pDLCtDQUFpRjs7Ozs7QUFPckY7SUFBQTtJQU1BLENBQUM7O2dCQU5BLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxRQUFRLEVBQUUsbUVBQW1FO2lCQUNoRjs7OzhCQUVJLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOztJQUM5QyxnQ0FBQztDQUFBLEFBTkQsSUFNQztTQUZZLHlCQUF5Qjs7O0lBQ2xDLGdEQUFpRjs7Ozs7QUFPckY7SUFBQTtRQWFvQixzQkFBaUIsR0FBRyxVQUFVLENBQUM7UUFJL0IscUJBQWdCLEdBQUcsd0JBQXdCLENB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Q0FBQztvQkFDN0UsS0FBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMzQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQyxFQUFDLENBQUM7UUFDUCxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7O09BR0c7Ozs7Ozs7SUFDSyw0REFBMEI7Ozs7OztJQUFsQztRQUFBLGlCQUlDO1FBSEcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU87Ozs7O1FBQUMsVUFBQyxTQUE2QixFQUFFLEtBQWE7WUFDMUUsU0FBUyxDQUFDLFdBQVcsR0FBRyxLQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7O2dCQS9MSixTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsZzNDQUF5QztpQkFDNUM7Ozs7Z0JBckZvQyxpQkFBaUI7Z0JBQzdCLE1BQU07Z0JBQW1ELFNBQVM7OzsrQkE2RnRGLEtBQUssU0FBQyxhQUFhOzZCQUduQixLQUFLOzZCQUNMLEtBQUs7a0NBRUwsTUFBTTtpQ0FDTixNQUFNO3NDQUVOLGVBQWUsU0FBQyxrQkFBa0I7NENBRWxDLFlBQVksU0FBQyx3QkFBd0I7O0lBeUsxQyw4QkFBQztDQUFBLEFBaE1ELElBZ01DO1NBNUxZLHVCQUF1Qjs7Ozs7O0lBQ2hDLDhDQUErQjs7Ozs7SUFFL0IsNENBQXdDOzs7OztJQUV4QyxnREFBZ0Q7O0lBTWhELDZDQUFvQzs7SUFDcEMsNkNBQXlDOztJQUV6QyxrREFBc0Q7O0lBQ3RELGlEQUFxRDs7SUFFckQsc0RBQStGOzs7OztJQUUvRiw0REFBK0c7Ozs7O0lBUzNHLG9EQUE0Qzs7Ozs7SUFDNUMseUNBQXNCOzs7OztJQUN0Qiw0Q0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIENvbnRlbnRDaGlsZHJlbixcclxuICAgIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFJlbmRlcmVyMixcclxuICAgIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICcuLi9hbmltYXRpb25zL2FuaW1hdGlvbnMuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgcmVtb3ZlTGlzdGVuZXJzLCByZW1vdmVTdWJzY3JpcHRpb25zIH0gZnJvbSAnLi4vaGVscGVycyc7XHJcbmltcG9ydCB7IEFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4vYWNjb3JkaW9uLmRpcmVjdGl2ZSc7XHJcblxyXG4vKlxyXG4gKlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ21rLWFjY29yZGlvbi1oZWFkZXInLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPidcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY29yZGlvbkhlYWRlckNvbXBvbmVudCB7XHJcbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcclxufVxyXG5cclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbWstYWNjb3JkaW9uLWNvbnRlbnQnLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPidcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY29yZGlvbkNvbnRlbnRDb21wb25lbnQge1xyXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XHJcbn1cclxuXHJcblxyXG4vKlxyXG4gKlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ21rLWFjY29yZGlvbicsXHJcbiAgICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHB1YmxpYyBjb250ZW50VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPEFjY29yZGlvbkNvbnRlbnRDb21wb25lbnQ+O1xyXG4gICAgcHVibGljIGhlYWRlclN0eWxlQ29sb3I6IHN0cmluZztcclxuICAgIHB1YmxpYyBpc0NvbGxhcHNpbmc6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaXNDb2xsYXBzZWQ6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYm9yZGVyQ29sb3I6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjb250ZW50Q29sb3I6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjb250ZW50U3R5bGVDbGFzcyA9ICdib3gtYm9keSc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyQ29sb3I6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXJDb2xvckhvdmVyOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyU3R5bGVDbGFzcyA9ICdib3gtaGVhZGVyIHdpdGgtYm9yZGVyJztcclxuXHJcbiAgICBAQ29udGVudENoaWxkKEFjY29yZGlvbkhlYWRlckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIGFjY29yZGlvbkhlYWRlckNvbXBvbmVudDogQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50O1xyXG4gICAgQENvbnRlbnRDaGlsZChBY2NvcmRpb25Db250ZW50Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgYWNjb3JkaW9uQ29udGVudENvbXBvbmVudDogQWNjb3JkaW9uQ29udGVudENvbXBvbmVudDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgbmdPbkluaXRcclxuICAgICAqL1xyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJTdHlsZUNvbG9yID0gdGhpcy5oZWFkZXJDb2xvcjtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmhlYWRlciAmJiAhdGhpcy5hY2NvcmRpb25IZWFkZXJDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdHRyaWJ1dGUgXCJoZWFkZXJcIiBPUiBDb21wb25lbnQgXCJtay0rYWNjb3JkaW9uLWhlYWRlclwiIGlzIHJlcXVpcmVkIGZvciBjb21wb25lbnQgXCJtay0rYWNjb3JkaW9uXCInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjY29yZGlvbkNvbnRlbnRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLmFjY29yZGlvbkNvbnRlbnRDb21wb25lbnQudGVtcGxhdGVSZWY7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLnRlbXBsYXRlUmVmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbWstYWNjb3JkaW9uLWdyb3VwJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9hY2NvcmRpb24uY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25Hcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAgIHByaXZhdGUgYWN0aXZlSW5kZXg6IGFueSA9IFswXTtcclxuICAgIC8vIEBUT0RPIGNoYW5nZSB0eXBlcyBmb3IgbGlzdGVuZXJzIHRvIGFsbCBmaWxlc1xyXG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnM6IEFycmF5PEZ1bmN0aW9uPiA9IFtdO1xyXG4gICAgLy8gQFRPRE8gY2hhbmdlIHR5cGVzIGZvciBzdWJzY3JpcHRpb25zIHRvIGFsbCBmaWxlc1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcblxyXG5cclxuICAgIEBJbnB1dCgnYWN0aXZlSW5kZXgnKSBzZXQgX2FjdGl2ZUluZGV4KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgPyB2YWx1ZSA6IFt2YWx1ZV07XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNNdWx0aXBsZTogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzdHlsZUNsYXNzID0gJ2JveC1ncm91cCc7XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNvbGxhcHNlU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ29sbGFwc2VEb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oQWNjb3JkaW9uQ29tcG9uZW50KSBwdWJsaWMgYWNjb3JkaW9uQ29tcG9uZW50czogUXVlcnlMaXN0PEFjY29yZGlvbkNvbXBvbmVudD47XHJcblxyXG4gICAgQFZpZXdDaGlsZHJlbihBY2NvcmRpb25Ub2dnbGVEaXJlY3RpdmUpIHByaXZhdGUgYWNjb3JkaW9uVG9nZ2xlRGlyZWN0aXZlczogUXVlcnlMaXN0PEFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWV0aG9kIGNvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0gY2hhbmdlRGV0ZWN0b3JSZWYgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIG5nWm9uZSAgICAgICAgICAgIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSByZW5kZXJlcjIgICAgICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjI6IFJlbmRlcmVyMlxyXG4gICAgKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtoZWFkZXJNb3VzZUxlYXZlIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCBoZWFkZXJNb3VzZUxlYXZlXHJcbiAgICAgKiBAcGFyYW0gYWNjb3JkaW9uIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBoZWFkZXJNb3VzZUxlYXZlKGFjY29yZGlvbjogQWNjb3JkaW9uQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgYWNjb3JkaW9uLmhlYWRlclN0eWxlQ29sb3IgPSBhY2NvcmRpb24uaGVhZGVyQ29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbaGVhZGVyTW91c2VFbnRlciBkZXNjcmlwdGlvbl1cclxuICAgICAqIEBtZXRob2QgaGVhZGVyTW91c2VFbnRlclxyXG4gICAgICogQHBhcmFtIGFjY29yZGlvbiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgaGVhZGVyTW91c2VFbnRlcihhY2NvcmRpb246IEFjY29yZGlvbkNvbXBvbmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChhY2NvcmRpb24uaGVhZGVyQ29sb3JIb3Zlcikge1xyXG4gICAgICAgICAgICBhY2NvcmRpb24uaGVhZGVyU3R5bGVDb2xvciA9IGFjY29yZGlvbi5oZWFkZXJDb2xvckhvdmVyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgbmdBZnRlclZpZXdJbml0XHJcbiAgICAgKi9cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNldEFjY29yZGlvbnNJbmRleCgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQWNjb3JkaW9uSXNDb2xsYXBzZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hY2NvcmRpb25Db21wb25lbnRzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRBY2NvcmRpb25zSW5kZXgoKTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWV0aG9kIG5nQWZ0ZXJWaWV3SW5pdFxyXG4gICAgICovXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRBY2NvcmRpb25zVG9nZ2xlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYWNjb3JkaW9uVG9nZ2xlRGlyZWN0aXZlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QWNjb3JkaW9uc1RvZ2dsZSgpO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtuZ09uQ2hhbmdlcyBkZXNjcmlwdGlvbl1cclxuICAgICAqIEBtZXRob2QgbmdPbkNoYW5nZXNcclxuICAgICAqIEBwYXJhbSBjaGFuZ2VzIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEByZXR1cm4gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNoYW5nZXMuX2FjdGl2ZUluZGV4LmZpcnN0Q2hhbmdlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1ldGhvZCBuZ09uRGVzdHJveVxyXG4gICAgICovXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICByZW1vdmVMaXN0ZW5lcnModGhpcy5saXN0ZW5lcnMpO1xyXG4gICAgICAgIHJlbW92ZVN1YnNjcmlwdGlvbnModGhpcy5zdWJzY3JpcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFt0b2dnbGVBY2NvcmRpb24gZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIHRvZ2dsZUFjY29yZGlvblxyXG4gICAgICogQHBhcmFtIGV2ZW50ICAgICAgIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB0b2dnbGVJbmRleCBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0b2dnbGVBY2NvcmRpb24oZXZlbnQ6IEV2ZW50LCB0b2dnbGVJbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5kZXhPZiA9IHRoaXMuYWN0aXZlSW5kZXhbJ2luZGV4T2YnXSh0b2dnbGVJbmRleCk7XHJcbiAgICAgICAgaWYgKGluZGV4T2YgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXgucHVzaCh0b2dnbGVJbmRleCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gW3RvZ2dsZUluZGV4XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXguc3BsaWNlKGluZGV4T2YsIDEpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlQWNjb3JkaW9uSXNDb2xsYXBzZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtjb2xsYXBzZVN0YXJ0IGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCBjb2xsYXBzZVN0YXJ0XHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIGFjY29yZGlvbiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb2xsYXBzZVN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCwgYWNjb3JkaW9uOiBBY2NvcmRpb25Db21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICBhY2NvcmRpb24uaXNDb2xsYXBzaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uQ29sbGFwc2VTdGFydC5lbWl0KHsgYW5pbWF0aW9uRXZlbnQ6IGV2ZW50LCBpbmRleDogYWNjb3JkaW9uLmluZGV4IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2NvbGxhcHNlRG9uZSBkZXNjcmlwdGlvbl1cclxuICAgICAqIEBtZXRob2QgY29sbGFwc2VEb25lXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIGFjY29yZGlvbiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb2xsYXBzZURvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50LCBhY2NvcmRpb246IEFjY29yZGlvbkNvbXBvbmVudCk6IHZvaWQge1xyXG4gICAgICAgIGFjY29yZGlvbi5pc0NvbGxhcHNpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uQ29sbGFwc2VEb25lLmVtaXQoeyBhbmltYXRpb25FdmVudDogZXZlbnQsIGluZGV4OiBhY2NvcmRpb24uaW5kZXggfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbc2V0QWNjb3JkaW9uc0luZGV4IGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCBzZXRBY2NvcmRpb25zSW5kZXhcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRBY2NvcmRpb25zSW5kZXgoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hY2NvcmRpb25Db21wb25lbnRzLmZvckVhY2goKGFjY29yZGlvbjogQWNjb3JkaW9uQ29tcG9uZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGFjY29yZGlvbi5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW3NldEFjY29yZGlvbnNUb2dnbGUgZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIHNldEFjY29yZGlvbnNUb2dnbGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRBY2NvcmRpb25zVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0gcmVtb3ZlTGlzdGVuZXJzKHRoaXMubGlzdGVuZXJzKTtcclxuXHJcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZXMuZm9yRWFjaCgoYWNjb3JkaW9uVG9nZ2xlOiBBY2NvcmRpb25Ub2dnbGVEaXJlY3RpdmUpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlcjIubGlzdGVuKGFjY29yZGlvblRvZ2dsZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQWNjb3JkaW9uKGV2ZW50LCBhY2NvcmRpb25Ub2dnbGUuYWNjb3JkaW9uQ29tcG9uZW50LmluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlcjIubGlzdGVuKGFjY29yZGlvblRvZ2dsZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWVudGVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIEFjY29yZGlvbkdyb3VwQ29tcG9uZW50LmhlYWRlck1vdXNlRW50ZXIoYWNjb3JkaW9uVG9nZ2xlLmFjY29yZGlvbkNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIyLmxpc3RlbihhY2NvcmRpb25Ub2dnbGUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbW91c2VsZWF2ZScsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBBY2NvcmRpb25Hcm91cENvbXBvbmVudC5oZWFkZXJNb3VzZUxlYXZlKGFjY29yZGlvblRvZ2dsZS5hY2NvcmRpb25Db21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFt1cGRhdGVBY2NvcmRpb25Jc0NvbGxhcHNlZCBkZXNjcmlwdGlvbl1cclxuICAgICAqIEBtZXRob2QgdXBkYXRlQWNjb3JkaW9uSXNDb2xsYXBzZWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVBY2NvcmRpb25Jc0NvbGxhcHNlZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjY29yZGlvbkNvbXBvbmVudHMuZm9yRWFjaCgoYWNjb3JkaW9uOiBBY2NvcmRpb25Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgYWNjb3JkaW9uLmlzQ29sbGFwc2VkID0gdGhpcy5hY3RpdmVJbmRleC5pbmRleE9mKGluZGV4KSA9PT0gLTE7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19