Repository URL to install this package:
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { SessionService } from './../Commons/session-service';
import { Component, Input } from '@angular/core';
import { AuthService, NGXLogger, EventBusService } from 'web-console-core';
/** @type {?} */
var LOG_TAG = '[TopMenuComponent]';
var TopMenuComponent = /** @class */ (function () {
function TopMenuComponent(logger, authService, eventBus, sessionService) {
this.logger = logger;
this.authService = authService;
this.eventBus = eventBus;
this.sessionService = sessionService;
}
/**
* @return {?}
*/
TopMenuComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.logger.debug(LOG_TAG, 'Initializing...');
this.eventBus.on('AuthService:LoginEvent').subscribe((/**
* @param {?} message
* @return {?}
*/
function (message) {
_this.logger.debug(LOG_TAG, 'on AuthService:LoginEvent received');
_this.updateInfo();
}));
// Fallback info
this.currentUserInfo = {
userName: 'N/A',
userAbbr: 'NA',
lastAccess: new Date()
};
this._mainMenuLabel = this.currentUserInfo.userAbbr;
this.items = [
{ label: this.getCurrentUserDesc(), disabled: true },
{ label: 'Last Login: ' + this.getLastAccessStr(), disabled: true },
{ separator: true },
{ label: 'Logout', icon: 'pi pi-fw pi-angle-right', command: (/**
* @param {?} event
* @return {?}
*/
function (event) { _this.onLogout(); }) }
];
// Retrieve from server
this.updateInfo();
};
/**
* @private
* @return {?}
*/
TopMenuComponent.prototype.updateInfo = /**
* @private
* @return {?}
*/
function () {
var _this = this;
this.sessionService.currentUser.subscribe((/**
* @param {?} currentUserInfo
* @return {?}
*/
function (currentUserInfo) {
_this.currentUserInfo = currentUserInfo;
_this._mainMenuLabel = currentUserInfo.userAbbr;
_this.items = [
{ label: _this.getCurrentUserDesc(), disabled: true },
{ label: 'Last Login: ' + _this.getLastAccessStr(), disabled: true },
{ separator: true },
{ label: 'Logout', icon: 'pi pi-fw pi-angle-right', command: (/**
* @param {?} event
* @return {?}
*/
function (event) { _this.onLogout(); }) }
];
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
_this.logger.warn('error while retrieving current user info from sessions service: ', error);
}));
};
/**
* @private
* @return {?}
*/
TopMenuComponent.prototype.getCurrentUserDesc = /**
* @private
* @return {?}
*/
function () {
this.logger.debug(LOG_TAG, 'getCurrentUserDesc for:', this.currentUserInfo);
return 'Current user: ' + this.currentUserInfo.userName;
};
/**
* @private
* @param {?} date
* @return {?}
*/
TopMenuComponent.prototype.formatDate = /**
* @private
* @param {?} date
* @return {?}
*/
function (date) {
/** @type {?} */
var monthNames = [
"January", "February", "March",
"April", "May", "June", "July",
"August", "September", "October",
"November", "December"
];
/** @type {?} */
var day = date.getDate();
/** @type {?} */
var monthIndex = date.getMonth();
/** @type {?} */
var year = date.getFullYear();
return day + ' ' + monthNames[monthIndex] + ' ' + year;
};
/**
* @private
* @return {?}
*/
TopMenuComponent.prototype.getLastAccessStr = /**
* @private
* @return {?}
*/
function () {
this.logger.debug(LOG_TAG, 'getLastAccessStr for:', this.currentUserInfo.lastAccess);
try {
//let now = moment().format('LLLL');
//moment("20111031", "YYYYMMDD").fromNow();// this.sessionService.currentUser.lastAccess);
//return myMoment.format('ddd, h:mm A');
//return moment(this.sessionService.currentUser.lastAccess).format('ddd, h:mm A');
return this.formatDate(new Date(this.currentUserInfo.lastAccess));
}
catch (err) {
this.logger.error(LOG_TAG, 'getLastAccessStr error:', err);
return 'n.a.';
}
};
/**
* @return {?}
*/
TopMenuComponent.prototype.onLogout = /**
* @return {?}
*/
function () {
var _this = this;
this.logger.debug(LOG_TAG, 'Logout invoked.');
this.authService.logout().subscribe((/**
* @param {?} resp
* @return {?}
*/
function (resp) {
}), (/**
* @param {?} err
* @return {?}
*/
function (err) {
_this.logger.warn('Logout revoke request failed');
}));
};
Object.defineProperty(TopMenuComponent.prototype, "mainMenuLabel", {
get: /**
* @return {?}
*/
function () {
return this._mainMenuLabel;
},
enumerable: true,
configurable: true
});
TopMenuComponent.decorators = [
{ type: Component, args: [{
selector: 'wc-top-menu-component',
template: "<p-menu #menu [popup]=\"true\" [model]=\"items\" [styleClass]=\"'top-menu'\"></p-menu>\n<button type=\"button\" pButton icon=\"pi pi-bars\" label=\"{{mainMenuLabel}}\" (click)=\"menu.toggle($event)\"></button>",
styles: [""]
}] }
];
/** @nocollapse */
TopMenuComponent.ctorParameters = function () { return [
{ type: NGXLogger },
{ type: AuthService },
{ type: EventBusService },
{ type: SessionService }
]; };
TopMenuComponent.propDecorators = {
visible: [{ type: Input }]
};
return TopMenuComponent;
}());
export { TopMenuComponent };
if (false) {
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype._mainMenuLabel;
/** @type {?} */
TopMenuComponent.prototype.items;
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype.currentUserInfo;
/** @type {?} */
TopMenuComponent.prototype.visible;
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype.logger;
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype.authService;
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype.eventBus;
/**
* @type {?}
* @private
*/
TopMenuComponent.prototype.sessionService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9wLW1lbnUtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW90aWYtd2ViLWFkbWluLWNvcmUvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9Ub3BNZW51L3RvcC1tZW51LWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztJQUdyRSxPQUFPLEdBQUcsb0JBQW9CO0FBRXBDO0lBYUksMEJBQW9CLE1BQWlCLEVBQ3pCLFdBQXdCLEVBQ3hCLFFBQXlCLEVBQ3pCLGNBQThCO1FBSHRCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBQ25DLENBQUM7Ozs7SUFFUixtQ0FBUTs7O0lBQVI7UUFBQSxpQkF3QkM7UUF2QkcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQyxPQUFPO1lBQ3pELEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ2pFLEtBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDLEVBQUMsQ0FBQztRQUVILGdCQUFnQjtRQUNoQixJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ25CLFFBQVEsRUFBRSxLQUFLO1lBQ2YsUUFBUSxFQUFFLElBQUk7WUFDZCxVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDekIsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDcEQsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNULEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDcEQsRUFBRSxLQUFLLEVBQUUsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7WUFDbkUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1lBQ25CLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsT0FBTzs7OztnQkFBRSxVQUFDLEtBQUssSUFBTyxLQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBRTtTQUNqRyxDQUFDO1FBRUYsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDOzs7OztJQUVPLHFDQUFVOzs7O0lBQWxCO1FBQUEsaUJBYUM7UUFaRyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQyxlQUFnQztZQUN2RSxLQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztZQUN2QyxLQUFJLENBQUMsY0FBYyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7WUFDL0MsS0FBSSxDQUFDLEtBQUssR0FBRztnQkFDVCxFQUFFLEtBQUssRUFBRSxLQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNwRCxFQUFFLEtBQUssRUFBRSxjQUFjLEdBQUcsS0FBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDbkUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO2dCQUNuQixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLE9BQU87Ozs7b0JBQUUsVUFBQyxLQUFLLElBQU8sS0FBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUU7YUFDakcsQ0FBQztRQUNOLENBQUM7Ozs7UUFBRSxVQUFDLEtBQUs7WUFDTCxLQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrRUFBa0UsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRyxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7Ozs7O0lBRU8sNkNBQWtCOzs7O0lBQTFCO1FBQ0ksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RSxPQUFPLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO0lBQzVELENBQUM7Ozs7OztJQUVPLHFDQUFVOzs7OztJQUFsQixVQUFtQixJQUFJOztZQUNmLFVBQVUsR0FBRztZQUNmLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTztZQUM5QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNO1lBQzlCLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUztZQUNoQyxVQUFVLEVBQUUsVUFBVTtTQUN2Qjs7WUFFRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTs7WUFDcEIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUU7O1lBQzVCLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFO1FBRTdCLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztJQUN6RCxDQUFDOzs7OztJQUdLLDJDQUFnQjs7OztJQUF4QjtRQUNJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JGLElBQUk7WUFDQSxvQ0FBb0M7WUFDcEMsMEZBQTBGO1lBQzFGLHdDQUF3QztZQUN4QyxrRkFBa0Y7WUFDbEYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUNyRTtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNELE9BQU8sTUFBTSxDQUFBO1NBQ2hCO0lBQ0wsQ0FBQzs7OztJQUVELG1DQUFROzs7SUFBUjtRQUFBLGlCQU1DO1FBTEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQyxJQUFJO1FBQ3pDLENBQUM7Ozs7UUFBRSxVQUFDLEdBQUc7WUFDSCxLQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3JELENBQUMsRUFBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHNCQUFXLDJDQUFhOzs7O1FBQXhCO1lBQ0ksT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQy9CLENBQUM7OztPQUFBOztnQkF6R0osU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSx1QkFBdUI7b0JBRWpDLDZOQUF3Qzs7aUJBQzNDOzs7O2dCQVRxQixTQUFTO2dCQUF0QixXQUFXO2dCQUFhLGVBQWU7Z0JBSHZDLGNBQWM7OzswQkFtQmxCLEtBQUs7O0lBZ0dWLHVCQUFDO0NBQUEsQUEzR0QsSUEyR0M7U0F0R1ksZ0JBQWdCOzs7Ozs7SUFFekIsMENBQStCOztJQUMvQixpQ0FBa0I7Ozs7O0lBQ2xCLDJDQUF5Qzs7SUFFekMsbUNBQWlDOzs7OztJQUVyQixrQ0FBeUI7Ozs7O0lBQ2pDLHVDQUFnQzs7Ozs7SUFDaEMsb0NBQWlDOzs7OztJQUNqQywwQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4vLi4vQ29tbW9ucy9zZXNzaW9uLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBOR1hMb2dnZXIsIEV2ZW50QnVzU2VydmljZSB9IGZyb20gJ3dlYi1jb25zb2xlLWNvcmUnO1xuaW1wb3J0IHsgQ3VycmVudFVzZXJJbmZvIH0gZnJvbSAnLi4vQ29tbW9ucy9zZXNzaW9uLXNlcnZpY2UnO1xuXG5jb25zdCBMT0dfVEFHID0gJ1tUb3BNZW51Q29tcG9uZW50XSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnd2MtdG9wLW1lbnUtY29tcG9uZW50JyxcbiAgICBzdHlsZVVybHM6IFsgJy4vdG9wLW1lbnUtY29tcG9uZW50LnNjc3MnIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RvcC1tZW51LWNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUb3BNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIHByaXZhdGUgX21haW5NZW51TGFiZWw6IHN0cmluZztcbiAgICBpdGVtczogTWVudUl0ZW1bXTtcbiAgICBwcml2YXRlIGN1cnJlbnRVc2VySW5mbzogQ3VycmVudFVzZXJJbmZvO1xuXG4gICAgQElucHV0KCkgcHVibGljIHZpc2libGU6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvZ2dlcjogTkdYTG9nZ2VyLFxuICAgICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBldmVudEJ1czogRXZlbnRCdXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlOiBTZXNzaW9uU2VydmljZVxuICAgICAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ0luaXRpYWxpemluZy4uLicpO1xuXG4gICAgICAgIHRoaXMuZXZlbnRCdXMub24oJ0F1dGhTZXJ2aWNlOkxvZ2luRXZlbnQnKS5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdvbiBBdXRoU2VydmljZTpMb2dpbkV2ZW50IHJlY2VpdmVkJyk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUluZm8oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRmFsbGJhY2sgaW5mb1xuICAgICAgICB0aGlzLmN1cnJlbnRVc2VySW5mbyA9IHtcbiAgICAgICAgICAgIHVzZXJOYW1lOiAnTi9BJyxcbiAgICAgICAgICAgIHVzZXJBYmJyOiAnTkEnLFxuICAgICAgICAgICAgbGFzdEFjY2VzczogbmV3IERhdGUoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9tYWluTWVudUxhYmVsID0gdGhpcy5jdXJyZW50VXNlckluZm8udXNlckFiYnI7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXG4gICAgICAgICAgICB7IGxhYmVsOiB0aGlzLmdldEN1cnJlbnRVc2VyRGVzYygpLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0xhc3QgTG9naW46ICcgKyB0aGlzLmdldExhc3RBY2Nlc3NTdHIoKSwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgIHsgc2VwYXJhdG9yOiB0cnVlIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnTG9nb3V0JywgaWNvbjogJ3BpIHBpLWZ3IHBpLWFuZ2xlLXJpZ2h0JywgY29tbWFuZDogKGV2ZW50KSA9PiB7IHRoaXMub25Mb2dvdXQoKTsgfSB9XG4gICAgICAgIF07XG5cbiAgICAgICAgLy8gUmV0cmlldmUgZnJvbSBzZXJ2ZXJcbiAgICAgICAgdGhpcy51cGRhdGVJbmZvKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVJbmZvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLmN1cnJlbnRVc2VyLnN1YnNjcmliZSgoY3VycmVudFVzZXJJbmZvOiBDdXJyZW50VXNlckluZm8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXJJbmZvID0gY3VycmVudFVzZXJJbmZvO1xuICAgICAgICAgICAgdGhpcy5fbWFpbk1lbnVMYWJlbCA9IGN1cnJlbnRVc2VySW5mby51c2VyQWJicjtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogdGhpcy5nZXRDdXJyZW50VXNlckRlc2MoKSwgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnTGFzdCBMb2dpbjogJyArIHRoaXMuZ2V0TGFzdEFjY2Vzc1N0cigpLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgc2VwYXJhdG9yOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0xvZ291dCcsIGljb246ICdwaSBwaS1mdyBwaS1hbmdsZS1yaWdodCcsIGNvbW1hbmQ6IChldmVudCkgPT4geyB0aGlzLm9uTG9nb3V0KCk7IH0gfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKCdlcnJvciB3aGlsZSByZXRyaWV2aW5nIGN1cnJlbnQgdXNlciBpbmZvIGZyb20gc2Vzc2lvbnMgc2VydmljZTogJywgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEN1cnJlbnRVc2VyRGVzYygpOiBzdHJpbmcge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHLCAnZ2V0Q3VycmVudFVzZXJEZXNjIGZvcjonLCB0aGlzLmN1cnJlbnRVc2VySW5mbyk7XG4gICAgICAgIHJldHVybiAnQ3VycmVudCB1c2VyOiAnICsgdGhpcy5jdXJyZW50VXNlckluZm8udXNlck5hbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXREYXRlKGRhdGUpIHtcbiAgICAgICAgdmFyIG1vbnRoTmFtZXMgPSBbXG4gICAgICAgICAgXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLFxuICAgICAgICAgIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLFxuICAgICAgICAgIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLFxuICAgICAgICAgIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXG4gICAgICAgIF07XG4gICAgICBcbiAgICAgICAgdmFyIGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICB2YXIgbW9udGhJbmRleCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICBcbiAgICAgICAgcmV0dXJuIGRheSArICcgJyArIG1vbnRoTmFtZXNbbW9udGhJbmRleF0gKyAnICcgKyB5ZWFyO1xuICAgICAgfVxuICAgICAgXG5cbiAgICBwcml2YXRlIGdldExhc3RBY2Nlc3NTdHIoKTogc3RyaW5nIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRywgJ2dldExhc3RBY2Nlc3NTdHIgZm9yOicsIHRoaXMuY3VycmVudFVzZXJJbmZvLmxhc3RBY2Nlc3MpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy9sZXQgbm93ID0gbW9tZW50KCkuZm9ybWF0KCdMTExMJyk7XG4gICAgICAgICAgICAvL21vbWVudChcIjIwMTExMDMxXCIsIFwiWVlZWU1NRERcIikuZnJvbU5vdygpOy8vIHRoaXMuc2Vzc2lvblNlcnZpY2UuY3VycmVudFVzZXIubGFzdEFjY2Vzcyk7XG4gICAgICAgICAgICAvL3JldHVybiBteU1vbWVudC5mb3JtYXQoJ2RkZCwgaDptbSBBJyk7XG4gICAgICAgICAgICAvL3JldHVybiBtb21lbnQodGhpcy5zZXNzaW9uU2VydmljZS5jdXJyZW50VXNlci5sYXN0QWNjZXNzKS5mb3JtYXQoJ2RkZCwgaDptbSBBJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRlKG5ldyBEYXRlKHRoaXMuY3VycmVudFVzZXJJbmZvLmxhc3RBY2Nlc3MpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihMT0dfVEFHLCAnZ2V0TGFzdEFjY2Vzc1N0ciBlcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuICduLmEuJ1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Mb2dvdXQoKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcsICdMb2dvdXQgaW52b2tlZC4nKTtcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5sb2dvdXQoKS5zdWJzY3JpYmUoKHJlc3ApID0+IHtcbiAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignTG9nb3V0IHJldm9rZSByZXF1ZXN0IGZhaWxlZCcpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1haW5NZW51TGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21haW5NZW51TGFiZWw7XG4gICAgfVxuXG59XG4iXX0=