Repository URL to install this package:
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, Renderer } from '@angular/core';
import { PluginView } from 'web-console-core';
import { NGXLogger } from 'web-console-core';
import { LicenseService } from '@wa-motif-open-api/license-management-service';
import * as _ from 'lodash';
import { faFileImport, faDownload } from '@fortawesome/free-solid-svg-icons';
import { WCNotificationCenter, NotificationType } from 'web-console-ui-kit';
import { WCSubscriptionHandler } from '../../../components/Commons/wc-subscription-handler';
/** @type {?} */
var LOG_TAG = '[LicenseManagerSection]';
var LicenseManagerSectionComponent = /** @class */ (function () {
function LicenseManagerSectionComponent(logger, licenseManager, renderer, notificationCenter) {
this.logger = logger;
this.licenseManager = licenseManager;
this.renderer = renderer;
this.notificationCenter = notificationCenter;
this.faFileImport = faFileImport;
this.faDownload = faDownload;
this._licenses = [];
this._subHandler = new WCSubscriptionHandler();
this.logger.debug(LOG_TAG, 'Opening...');
}
/**
* Angular ngOnInit
*/
/**
* Angular ngOnInit
* @return {?}
*/
LicenseManagerSectionComponent.prototype.ngOnInit = /**
* Angular ngOnInit
* @return {?}
*/
function () {
this.logger.debug(LOG_TAG, 'Initializing...');
this.refreshData();
};
/**
* @return {?}
*/
LicenseManagerSectionComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.logger.debug(LOG_TAG, 'ngOnDestroy ');
this.freeMem();
};
/**
* @return {?}
*/
LicenseManagerSectionComponent.prototype.freeMem = /**
* @return {?}
*/
function () {
this._licenses = null;
this._subHandler.unsubscribe();
this._subHandler = null;
};
/**
* @param {?} event
* @return {?}
*/
LicenseManagerSectionComponent.prototype.onSelectionChange = /**
* @param {?} event
* @return {?}
*/
function (event) {
console.log(">>>>>>>>>>> onSelectionChange");
};
/**
* @return {?}
*/
LicenseManagerSectionComponent.prototype.refreshData = /**
* @return {?}
*/
function () {
var _this = this;
this.loading = true;
this._subHandler.add(this.licenseManager.listLicenses().subscribe((/**
* @param {?} data
* @return {?}
*/
function (data) {
_this._licenses = data;
_this._licenses = _.forEach(data, (/**
* @param {?} element
* @return {?}
*/
function (element) {
element.issueDate = new Date(element.issueDate);
element.expiryDate = new Date(element.expiryDate);
}));
_this.logger.debug(LOG_TAG, 'Licenses: ', data);
_this.loading = false;
}), ((/**
* @param {?} error
* @return {?}
*/
function (error) {
_this.logger.error(LOG_TAG, 'Licenses error: ', error);
_this.loading = false;
_this.notificationCenter.post({
name: 'LoadLicenseError',
title: 'Load Licenses',
message: 'Error loading licenses:',
type: NotificationType.Error,
error: error,
closable: true
});
}))));
};
/**
* @return {?}
*/
LicenseManagerSectionComponent.prototype.onRefreshClicked = /**
* @return {?}
*/
function () {
this.refreshData();
};
/**
* @param {?} license
* @return {?}
*/
LicenseManagerSectionComponent.prototype.onDeleteOKPressed = /**
* @param {?} license
* @return {?}
*/
function (license) {
this.deleteLicense(license);
};
/**
* @private
* @param {?} license
* @return {?}
*/
LicenseManagerSectionComponent.prototype.deleteLicense = /**
* @private
* @param {?} license
* @return {?}
*/
function (license) {
var _this = this;
this.logger.debug(LOG_TAG, 'Revoking license: ', license);
this._subHandler.add(this.licenseManager.deleteLicense(license.productName, license.productVersion).subscribe((/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.logger.info(LOG_TAG, 'License revoke success:', data);
_this.notificationCenter.post({
name: 'RevokeLicenseSuccess',
title: 'Revoke License',
message: 'The license has been successfully revoked',
type: NotificationType.Success
});
_this.refreshData();
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
_this.logger.error(LOG_TAG, 'Revoking license error:', error);
_this.notificationCenter.post({
name: 'RevokeLicenseError',
title: 'Revoke License',
message: 'Error revoking license:',
type: NotificationType.Error,
error: error,
closable: true
});
})));
};
/**
* @param {?} error
* @return {?}
*/
LicenseManagerSectionComponent.prototype.onUploadError = /**
* @param {?} error
* @return {?}
*/
function (error) {
this.notificationCenter.post({
name: 'UploadLicenseError',
title: 'License Upload',
message: 'Error uploading license:',
type: NotificationType.Error,
error: error,
closable: true
});
};
/**
* Upload the blob file to server
* @param blob
*/
/**
* Upload the blob file to server
* @param {?} event
* @return {?}
*/
LicenseManagerSectionComponent.prototype.uploadLicense = /**
* Upload the blob file to server
* @param {?} event
* @return {?}
*/
function (event) {
var _this = this;
this.logger.debug(LOG_TAG, 'uploadLicense called');
this.notificationCenter.post({
name: 'UploadLicense',
title: 'License Upload',
message: 'Uploading license...',
type: NotificationType.Info
});
this._subHandler.add(this.licenseManager.uploadLicense(event.file).subscribe((/**
* @param {?} data
* @return {?}
*/
function (data) {
_this.logger.info(LOG_TAG, 'Import license done:', data);
_this.notificationCenter.post({
name: 'UploadLicense',
title: 'License Upload',
message: 'License Uploaded successfully.',
type: NotificationType.Success
});
_this.refreshData();
}), (/**
* @param {?} error
* @return {?}
*/
function (error) {
_this.logger.error(LOG_TAG, 'Import license error:', error);
_this.notificationCenter.post({
name: 'UploadLicenseError',
title: 'License Upload',
message: 'Error uploading licenses:',
type: NotificationType.Error,
error: error,
closable: true
});
})));
};
LicenseManagerSectionComponent.decorators = [
{ type: Component, args: [{
selector: 'wa-license-manager-section',
template: "<wc-loading-overlay [visible]='loading'></wc-loading-overlay>\n<wc-dashboard-header [title]=\"'License Manager'\"></wc-dashboard-header>\n\n<div class=\"row spread\">\n\n <div class=\"flex-toolbar\" style=\"display:flex;align-items: center;\">\n <div>\n <label> </label>\n <kendo-buttongroup look=\"flat\">\n <button kendoButton \n motif-acl=\"com.vipera.osgi.foundation.license.api.rest.LicensesApi:UPDATE:uploadLicense\"\n [toggleable]=\"false\" (click)=\"uploadSlideDownPanelEx.toggle()\" ><fa-icon [icon]=\"faFileImport\"></fa-icon>Import License</button>\n </kendo-buttongroup>\n </div>\n </div>\n\n <div class=\"flex-cmd\">\n <kendo-buttongroup look=\"flat\">\n <button kendoButton [toggleable]=\"false\" [icon]=\"'refresh'\" (click)=\"onRefreshClicked()\">Refresh</button>\n </kendo-buttongroup>\n </div>\n\n</div>\n\n<div class=\"row fill\">\n\n <div style=\"height: 100%;\">\n\n <wc-upload-panel #uploadSlideDownPanelEx (upload)=\"uploadLicense($event)\" (uploadError)=\"onUploadError($event)\"></wc-upload-panel>\n\n <kendo-grid #datagrid [data]=\"_licenses\" \n [navigable]=\"false\"\n [selectable]=\"true\"\n (selectionChange)=\"onSelectionChange($event)\"> \n\n <kendo-grid-column\n field=\"productName\" title=\"Product Name\" >\n </kendo-grid-column>\n\n <kendo-grid-column\n field=\"productVersion\" title=\"Product Version\">\n </kendo-grid-column>\n\n <kendo-grid-column\n field=\"issueDate\" title=\"Issue Date\" format=\"{0:dd/MM/yyyy HH:mm:ss}\">\n </kendo-grid-column>\n\n <kendo-grid-column\n field=\"expiryDate\" title=\"Expiry Date\" format=\"{0:dd/MM/yyyy HH:mm:ss}\">\n </kendo-grid-column>\n\n <kendo-grid-column title=\"\" width=\"150\" minResizableWidth=\"140\">\n <ng-template kendoGridCellTemplate let-dataItem let-columnIndex=\"columnIndex\" let-rowIndex=\"rowIndex\" let-column=\"column\">\n <wc-grid-editor-command\n motif-acl=\"com.vipera.osgi.foundation.license.api.rest.LicensesApi:DELETE:deleteLicense\"\n motif-acl-hidden=\"true\" \n [cssClass]=\"'k-icon'\"\n [stopPropagation]=\"true\"\n [alignMode]=\"'end'\"\n [hasConfirmation]=\"true\"\n [confirmationTitle]=\"'Delete ?'\"\n [rowIndex]=\"rowIndex\" \n [columnIndex]=\"columnIndex\" \n [column]=\"column\" \n [commandIcon]=\"'wa-ico-no'\"\n [dataItem]=\"dataItem\"\n (commandConfirm)=\"onDeleteOKPressed(dataItem)\" \n >\n </wc-grid-editor-command>\n </ng-template>\n </kendo-grid-column>\n\n <div *kendoGridDetailTemplate=\"let dataItem\">\n <wa-license-details [licenseItem]=\"dataItem\"></wa-license-details>\n </div>\n \n </kendo-grid>\n\n </div>\n\n </div>\n",
styles: [":host{display:flex;flex:1;flex-direction:column}:host ::ng-deep tr.k-grid-norecords.ng-star-inserted{text-align:left;display:contents}"]
}] }
];
/** @nocollapse */
LicenseManagerSectionComponent.ctorParameters = function () { return [
{ type: NGXLogger },
{ type: LicenseService },
{ type: Renderer },
{ type: WCNotificationCenter }
]; };
LicenseManagerSectionComponent = tslib_1.__decorate([
PluginView('License Manager', {
iconName: 'wa-ico-key',
userData: {
acl: {
permissions: ['com.vipera.osgi.foundation.license.api.rest.LicensesApi:READ:listLicenses']
}
}
}),
tslib_1.__metadata("design:paramtypes", [NGXLogger,
LicenseService,
Renderer,
WCNotificationCenter])
], LicenseManagerSectionComponent);
return LicenseManagerSectionComponent;
}());
export { LicenseManagerSectionComponent };
if (false) {
/** @type {?} */
LicenseManagerSectionComponent.prototype.faFileImport;
/** @type {?} */
LicenseManagerSectionComponent.prototype.faDownload;
/** @type {?} */
LicenseManagerSectionComponent.prototype._licenses;
/** @type {?} */
LicenseManagerSectionComponent.prototype.loading;
/**
* @type {?}
* @private
*/
LicenseManagerSectionComponent.prototype._subHandler;
/**
* @type {?}
* @private
*/
LicenseManagerSectionComponent.prototype.logger;
/**
* @type {?}
* @private
*/
LicenseManagerSectionComponent.prototype.licenseManager;
/**
* @type {?}
* @private
*/
LicenseManagerSectionComponent.prototype.renderer;
/**
* @type {?}
* @private
*/
LicenseManagerSectionComponent.prototype.notificationCenter;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS1tYW5hZ2VyLXNlY3Rpb24tY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbW90aWYtd2ViLWFkbWluLWNvcmUvIiwic291cmNlcyI6WyJsaWIvc2VjdGlvbnMvTGljZW5zZU1hbmFnZW1lbnQvY29tcG9uZW50cy9saWNlbnNlLW1hbmFnZXItc2VjdGlvbi1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixRQUFRLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBVyxNQUFNLCtDQUErQyxDQUFDO0FBQ3hGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scURBQXFELENBQUM7O0lBR3RGLE9BQU8sR0FBRyx5QkFBeUI7O0lBeUJyQyx3Q0FBb0IsTUFBaUIsRUFDekIsY0FBOEIsRUFDOUIsUUFBa0IsRUFDbEIsa0JBQXdDO1FBSGhDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDekIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFzQjtRQVhwRCxpQkFBWSxHQUFHLFlBQVksQ0FBQztRQUM1QixlQUFVLEdBQUcsVUFBVSxDQUFDO1FBRWpCLGNBQVMsR0FBbUIsRUFBRSxDQUFDO1FBRzlCLGdCQUFXLEdBQTBCLElBQUkscUJBQXFCLEVB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MkI7Z0JBQ3BDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO2dCQUM1QixLQUFLLEVBQUUsS0FBSztnQkFDWixRQUFRLEVBQUUsSUFBSTthQUNqQixDQUFDLENBQUM7UUFDUCxDQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQzs7Z0JBOUpKLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsNEJBQTRCO29CQUV0Qyw4Z0hBQXVEOztpQkFDeEQ7Ozs7Z0JBZE0sU0FBUztnQkFDVCxjQUFjO2dCQUhnQixRQUFRO2dCQU10QyxvQkFBb0I7O0lBbUJoQiw4QkFBOEI7UUFSeEMsVUFBVSxDQUFDLGlCQUFpQixFQUFFO1lBQzdCLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLFFBQVEsRUFBRTtnQkFDTixHQUFHLEVBQUU7b0JBQ0QsV0FBVyxFQUFFLENBQUMsMkVBQTJFLENBQUM7aUJBQzdGO2FBQ0o7U0FDSixDQUFDO2lEQVc4QixTQUFTO1lBQ1QsY0FBYztZQUNwQixRQUFRO1lBQ0Usb0JBQW9CO09BYjNDLDhCQUE4QixDQW1KMUM7SUFBRCxxQ0FBQztDQUFBLElBQUE7U0FuSlksOEJBQThCOzs7SUFFdkMsc0RBQTRCOztJQUM1QixvREFBd0I7O0lBRXhCLG1EQUFzQzs7SUFDdEMsaURBQXdCOzs7OztJQUV4QixxREFBeUU7Ozs7O0lBRTdELGdEQUF5Qjs7Ozs7SUFDakMsd0RBQXNDOzs7OztJQUN0QyxrREFBMEI7Ozs7O0lBQzFCLDREQUFnRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIFJlbmRlcmVyLCBFbGVtZW50UmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsdWdpblZpZXcgfSBmcm9tICd3ZWItY29uc29sZS1jb3JlJztcbmltcG9ydCB7IE5HWExvZ2dlcn0gZnJvbSAnd2ViLWNvbnNvbGUtY29yZSc7XG5pbXBvcnQgeyBMaWNlbnNlU2VydmljZSwgTGljZW5zZSB9IGZyb20gJ0B3YS1tb3RpZi1vcGVuLWFwaS9saWNlbnNlLW1hbmFnZW1lbnQtc2VydmljZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmYUZpbGVJbXBvcnQsIGZhRG93bmxvYWQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuaW1wb3J0IHsgV0NOb3RpZmljYXRpb25DZW50ZXIsIE5vdGlmaWNhdGlvblR5cGUgfSBmcm9tICd3ZWItY29uc29sZS11aS1raXQnO1xuaW1wb3J0IHsgV0NTdWJzY3JpcHRpb25IYW5kbGVyIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9Db21tb25zL3djLXN1YnNjcmlwdGlvbi1oYW5kbGVyJztcbmltcG9ydCB7IFdDVXBsb2FkUGFuZWxFdmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvVUkvd2MtdXBsb2FkLXBhbmVsLWNvbXBvbmVudC93Yy11cGxvYWQtcGFuZWwtY29tcG9uZW50JztcblxuY29uc3QgTE9HX1RBRyA9ICdbTGljZW5zZU1hbmFnZXJTZWN0aW9uXSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnd2EtbGljZW5zZS1tYW5hZ2VyLXNlY3Rpb24nLFxuICAgIHN0eWxlVXJsczogWyAnLi9saWNlbnNlLW1hbmFnZXItc2VjdGlvbi1jb21wb25lbnQuc2NzcycgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGljZW5zZS1tYW5hZ2VyLXNlY3Rpb24tY29tcG9uZW50Lmh0bWwnXG4gIH0pXG4gIEBQbHVnaW5WaWV3KCdMaWNlbnNlIE1hbmFnZXInLCB7XG4gICAgaWNvbk5hbWU6ICd3YS1pY28ta2V5JyxcbiAgICB1c2VyRGF0YToge1xuICAgICAgICBhY2w6IHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zOiBbJ2NvbS52aXBlcmEub3NnaS5mb3VuZGF0aW9uLmxpY2Vuc2UuYXBpLnJlc3QuTGljZW5zZXNBcGk6UkVBRDpsaXN0TGljZW5zZXMnXVxuICAgICAgICB9XG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBMaWNlbnNlTWFuYWdlclNlY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBmYUZpbGVJbXBvcnQgPSBmYUZpbGVJbXBvcnQ7XG4gICAgZmFEb3dubG9hZCA9IGZhRG93bmxvYWQ7XG5cbiAgICBwdWJsaWMgX2xpY2Vuc2VzOiBBcnJheTxMaWNlbnNlPiA9IFtdO1xuICAgIHB1YmxpYyBsb2FkaW5nOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBfc3ViSGFuZGxlcjogV0NTdWJzY3JpcHRpb25IYW5kbGVyID0gbmV3IFdDU3Vic2NyaXB0aW9uSGFuZGxlcigpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2dnZXI6IE5HWExvZ2dlcixcbiAgICAgICAgcHJpdmF0ZSBsaWNlbnNlTWFuYWdlcjogTGljZW5zZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLFxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvbkNlbnRlcjogV0NOb3RpZmljYXRpb25DZW50ZXIpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRyAsICdPcGVuaW5nLi4uJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBuZ09uSW5pdFxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHICwgJ0luaXRpYWxpemluZy4uLicpO1xuICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhMT0dfVEFHICwgJ25nT25EZXN0cm95ICcpO1xuICAgICAgICB0aGlzLmZyZWVNZW0oKTtcbiAgICB9XG5cbiAgICBmcmVlTWVtKCkge1xuICAgICAgICB0aGlzLl9saWNlbnNlcyA9IG51bGw7XG4gICAgICAgIHRoaXMuX3N1YkhhbmRsZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fc3ViSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQpe1xuICAgICAgICBjb25zb2xlLmxvZyhcIj4+Pj4+Pj4+Pj4+IG9uU2VsZWN0aW9uQ2hhbmdlXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWZyZXNoRGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc3ViSGFuZGxlci5hZGQodGhpcy5saWNlbnNlTWFuYWdlci5saXN0TGljZW5zZXMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xpY2Vuc2VzID0gZGF0YTtcblxuICAgICAgICAgICAgdGhpcy5fbGljZW5zZXMgPSBfLmZvckVhY2goZGF0YSwgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNzdWVEYXRlID0gbmV3IERhdGUoZWxlbWVudC5pc3N1ZURhdGUpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwaXJ5RGF0ZSA9IG5ldyBEYXRlKGVsZW1lbnQuZXhwaXJ5RGF0ZSk7XG4gICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcgLCAnTGljZW5zZXM6ICcsIGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgfSwgKGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKExPR19UQUcgLCAnTGljZW5zZXMgZXJyb3I6ICcsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXIucG9zdCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0xvYWRMaWNlbnNlRXJyb3InLFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnTG9hZCBMaWNlbnNlcycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIGxvYWRpbmcgbGljZW5zZXM6JyxcbiAgICAgICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVmcmVzaENsaWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVmcmVzaERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZWxldGVPS1ByZXNzZWQobGljZW5zZTogTGljZW5zZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlbGV0ZUxpY2Vuc2UobGljZW5zZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGVMaWNlbnNlKGxpY2Vuc2U6IExpY2Vuc2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoTE9HX1RBRyAsICdSZXZva2luZyBsaWNlbnNlOiAnLCBsaWNlbnNlKTtcbiAgICAgICAgdGhpcy5fc3ViSGFuZGxlci5hZGQodGhpcy5saWNlbnNlTWFuYWdlci5kZWxldGVMaWNlbnNlKGxpY2Vuc2UucHJvZHVjdE5hbWUsIGxpY2Vuc2UucHJvZHVjdFZlcnNpb24pLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhMT0dfVEFHICwgJ0xpY2Vuc2UgcmV2b2tlIHN1Y2Nlc3M6JywgZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5wb3N0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUmV2b2tlTGljZW5zZVN1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnUmV2b2tlIExpY2Vuc2UnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGUgbGljZW5zZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmV2b2tlZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoRGF0YSgpO1xuICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoTE9HX1RBRywgJ1Jldm9raW5nIGxpY2Vuc2UgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXIucG9zdCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1Jldm9rZUxpY2Vuc2VFcnJvcicsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdSZXZva2UgTGljZW5zZScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIHJldm9raW5nIGxpY2Vuc2U6JyxcbiAgICAgICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkVycm9yLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIG9uVXBsb2FkRXJyb3IoZXJyb3Ipe1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNlbnRlci5wb3N0KHtcbiAgICAgICAgICAgIG5hbWU6ICdVcGxvYWRMaWNlbnNlRXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdMaWNlbnNlIFVwbG9hZCcsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRXJyb3IgdXBsb2FkaW5nIGxpY2Vuc2U6JyxcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3IsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFVwbG9hZCB0aGUgYmxvYiBmaWxlIHRvIHNlcnZlclxuICAgICAqIEBwYXJhbSBibG9iXG4gICAgICovXG4gICAgdXBsb2FkTGljZW5zZShldmVudDogV0NVcGxvYWRQYW5lbEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKExPR19UQUcgLCAndXBsb2FkTGljZW5zZSBjYWxsZWQnKTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXIucG9zdCh7XG4gICAgICAgICAgICBuYW1lOiAnVXBsb2FkTGljZW5zZScsXG4gICAgICAgICAgICB0aXRsZTogJ0xpY2Vuc2UgVXBsb2FkJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdVcGxvYWRpbmcgbGljZW5zZS4uLicsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkluZm9cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3N1YkhhbmRsZXIuYWRkKHRoaXMubGljZW5zZU1hbmFnZXIudXBsb2FkTGljZW5zZShldmVudC5maWxlKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oTE9HX1RBRyAsICdJbXBvcnQgbGljZW5zZSBkb25lOicsIGRhdGEpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXIucG9zdCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1VwbG9hZExpY2Vuc2UnLFxuICAgICAgICAgICAgICAgIHRpdGxlOiAnTGljZW5zZSBVcGxvYWQnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdMaWNlbnNlIFVwbG9hZGVkIHN1Y2Nlc3NmdWxseS4nLFxuICAgICAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihMT0dfVEFHLCAnSW1wb3J0IGxpY2Vuc2UgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DZW50ZXIucG9zdCh7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1VwbG9hZExpY2Vuc2VFcnJvcicsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdMaWNlbnNlIFVwbG9hZCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Vycm9yIHVwbG9hZGluZyBsaWNlbnNlczonLFxuICAgICAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3IsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIGNsb3NhYmxlOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cblxufVxuIl19