io.parrots
Version:
Parrots.io App
502 lines (501 loc) • 50.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { EventEmitter } from '@angular/core';
import { Option, AbstractDataEditor, EventUtils, ComponentDialogModel } from 'com.phloxui';
import { DATA_DESTROY_EVENT, DATA_PROMOTE_EVENT, DATA_QUERY_EVENT } from 'com.phloxui';
import { ClassesResource } from '../../share/resource/ClassesResource';
import { VersionHistory } from './VersionHistory.component';
var /** @type {?} */ CONFIG_NAME = 'com.parrots.dataEditor';
/**
* @abstract
*/
var AbstractParrotsDataEditor = /** @class */ (function (_super) {
tslib_1.__extends(AbstractParrotsDataEditor, _super);
function AbstractParrotsDataEditor(actionProvider, viewProvider, dataFactory, settingServiceFactory, phloxAppService, dialogService, bgProcessMgr, dataClassName, configName, versionHistoryFactory, instConnectionMgr) {
var _this = _super.call(this, actionProvider, viewProvider, dataFactory, settingServiceFactory, phloxAppService, dialogService, bgProcessMgr) || this;
_this.dataClassName = dataClassName;
_this.setConfigName(configName);
_this.versionHistoryFactory = versionHistoryFactory;
_this.instConnectionMgr = instConnectionMgr;
_this.dataSchemaReloadEvent = new EventEmitter();
_this.dataDestroyEvent = new EventEmitter();
_this.dataPromoteEvent = new EventEmitter();
_this.classesResource = _this.instConnectionMgr.createResource(ClassesResource);
return _this;
}
// initPage with reloadDataSchema
/**
* @return {?}
*/
AbstractParrotsDataEditor.prototype.initPage = /**
* @return {?}
*/
function () {
var _this = this;
// create parrots DataService before call super
if (this.dataServiceFactory !== null && this.dataServiceFactory !== undefined) {
var /** @type {?} */ dfProm = this.dataServiceFactory.createDataService(this);
if (dfProm != null && dfProm !== undefined) {
dfProm.then(function (result) {
_this.dataService = result;
_this.reloadDataSchema();
});
}
}
_super.prototype.initPage.call(this);
};
/**
* @return {?}
*/
AbstractParrotsDataEditor.prototype.reloadDataSchema = /**
* @return {?}
*/
function () {
var _this = this;
return new Promise(function (resolve, reject) {
if (_this.dataService != null) {
_this.dataService.loadDataSchema().then(function (result) {
_this.dataSchema = result;
resolve(result);
_this.dataSchemaReloadEvent.emit(result);
}, function (error) {
reject(error);
});
}
else {
resolve(null);
_this.dataSchemaReloadEvent.emit(null);
}
}).catch(function (error) {
return Promise.reject(error);
});
};
/**
* @param {?} data
* @return {?}
*/
AbstractParrotsDataEditor.prototype.destroyData = /**
* @param {?} data
* @return {?}
*/
function (data) {
var _this = this;
if (this.dataService === null || typeof this.dataService === 'undefined') {
return Promise.resolve(null);
}
var /** @type {?} */ prom = this.dataService.destroyData(data);
if (prom !== null) {
prom.then(function (resolveData) {
var /** @type {?} */ result = [];
if (resolveData !== null && typeof resolveData !== 'undefined') {
if (Array.isArray(resolveData)) {
try {
for (var resolveData_1 = tslib_1.__values(resolveData), resolveData_1_1 = resolveData_1.next(); !resolveData_1_1.done; resolveData_1_1 = resolveData_1.next()) {
var item = resolveData_1_1.value;
_this.removeData(item);
result.push(item);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (resolveData_1_1 && !resolveData_1_1.done && (_a = resolveData_1.return)) _a.call(resolveData_1);
}
finally { if (e_1) throw e_1.error; }
}
}
else {
// delete from data
// delete from data
_this.removeData(resolveData);
result.push(resolveData);
}
}
var /** @type {?} */ data = resolveData;
var /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_DESTROY_EVENT, _this, data, null);
_this.dataDestroyEvent.emit(ev);
return Promise.resolve(resolveData);
var e_1, _a;
}, function (error) {
return Promise.reject(error);
});
}
return prom;
};
/**
* @param {?} data
* @return {?}
*/
AbstractParrotsDataEditor.prototype.promoteData = /**
* @param {?} data
* @return {?}
*/
function (data) {
var _this = this;
if (this.dataService === null || typeof this.dataService === 'undefined') {
return Promise.resolve(null);
}
var /** @type {?} */ dataTemp = [];
if (Array.isArray(data)) {
dataTemp = data;
}
else {
dataTemp.push(data);
}
var /** @type {?} */ prom = this.dataService.promoteData(data);
if (prom !== null) {
prom.then(function (resolveData) {
var /** @type {?} */ result = [];
if (resolveData !== null && typeof resolveData !== 'undefined') {
if (Array.isArray(resolveData)) {
try {
for (var resolveData_2 = tslib_1.__values(resolveData), resolveData_2_1 = resolveData_2.next(); !resolveData_2_1.done; resolveData_2_1 = resolveData_2.next()) {
var item = resolveData_2_1.value;
// this.removeData(item); //! do promote
result.push(item);
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (resolveData_2_1 && !resolveData_2_1.done && (_a = resolveData_2.return)) _a.call(resolveData_2);
}
finally { if (e_2) throw e_2.error; }
}
}
else {
// this.removeData(resolveData); //! do promote
result.push(resolveData);
}
}
var /** @type {?} */ data = {
data: result,
original: dataTemp
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_PROMOTE_EVENT, _this, data, null);
_this.dataPromoteEvent.emit(ev);
return Promise.resolve(resolveData);
var e_2, _a;
}, function (error) {
return Promise.reject(error);
});
}
return prom;
};
/**
* @param {?} data
* @param {?} startDateTime
* @param {?} endDateTime
* @return {?}
*/
AbstractParrotsDataEditor.prototype.getVersionHistory = /**
* @param {?} data
* @param {?} startDateTime
* @param {?} endDateTime
* @return {?}
*/
function (data, startDateTime, endDateTime) {
var _this = this;
var /** @type {?} */ dataTemp = [];
if (Array.isArray(data)) {
dataTemp = data;
}
else {
dataTemp.push(data);
}
var /** @type {?} */ uuid = data._uuid;
var /** @type {?} */ className = this.getDataClassName();
var /** @type {?} */ prom = this.classesResource.getVersions(uuid, className);
if (prom !== null) {
return new Promise(function (resolve, reject) {
prom.then(function (resolveData) {
try {
var /** @type {?} */ result = [];
if (resolveData !== null && typeof resolveData !== 'undefined') {
try {
for (var _a = tslib_1.__values(resolveData.items), _b = _a.next(); !_b.done; _b = _a.next()) {
var item = _b.value;
if (startDateTime !== null && startDateTime !== undefined && endDateTime !== null && endDateTime !== undefined) {
if ((startDateTime.isBefore(item._created) || startDateTime.equals(item._created)) &&
(endDateTime.isAfter(item._created) || endDateTime.equals(item._created))) {
result.push(item);
}
}
else if (startDateTime !== null && startDateTime !== undefined && (endDateTime === null || endDateTime === undefined)) {
if ((startDateTime.isBefore(item._created) || startDateTime.equals(item._created))) {
result.push(item);
}
}
else if ((startDateTime === null || startDateTime === undefined) && endDateTime !== null && endDateTime !== undefined) {
if ((endDateTime.isAfter(item._created) || endDateTime.equals(item._created))) {
result.push(item);
}
}
else {
result.push(item);
}
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
}
finally { if (e_3) throw e_3.error; }
}
}
var /** @type {?} */ data_1 = {
data: result,
original: dataTemp
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_QUERY_EVENT, _this, data_1, null);
_this.dataQueryEvent.emit(ev);
resolve(result);
}
catch (/** @type {?} */ err) {
reject(err);
}
var e_3, _c;
}, function (error) {
reject(error);
});
});
}
return prom;
};
/**
* @param {?} data
* @return {?}
*/
AbstractParrotsDataEditor.prototype.getLanguageList = /**
* @param {?} data
* @return {?}
*/
function (data) {
var _this = this;
if (this.dataService === null || typeof this.dataService === 'undefined') {
return Promise.resolve(null);
}
// let fData = data;
var /** @type {?} */ dataTemp = [];
if (Array.isArray(data)) {
dataTemp = data;
}
else {
dataTemp.push(data);
}
var /** @type {?} */ filterData = {
"filter": "this._lang != null && this._uuid == uuid",
"parameters": "java.lang.String uuid",
"executeMap": {
"uuid": data._uuid
}
};
var /** @type {?} */ prom = this.dataService.queryData(filterData);
if (prom !== null) {
return new Promise(function (resolve, reject) {
prom.then(function (resolveData) {
var /** @type {?} */ result = [];
if (resolveData !== null && typeof resolveData !== 'undefined') {
try {
for (var _a = tslib_1.__values(resolveData.items), _b = _a.next(); !_b.done; _b = _a.next()) {
var item = _b.value;
result.push(item);
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
}
finally { if (e_4) throw e_4.error; }
}
}
var /** @type {?} */ data = {
data: result,
original: dataTemp
};
var /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_QUERY_EVENT, _this, data, null);
_this.dataQueryEvent.emit(ev);
resolve(result);
var e_4, _c;
}, function (error) {
reject(error);
});
});
}
return prom;
};
/**
* @param {?} data
* @return {?}
*/
AbstractParrotsDataEditor.prototype.showVersionHistoryDialog = /**
* @param {?} data
* @return {?}
*/
function (data) {
var _this = this;
var /** @type {?} */ bodyStyle = ['grey', 'version-body'];
var /** @type {?} */ footerStyle = ['grey', 'right', 'version-footer'];
var /** @type {?} */ versionHistoryModel = null;
if (this.versionHistoryFactory !== null && typeof this.versionHistoryFactory !== 'undefined') {
versionHistoryModel = this.versionHistoryFactory.getVersionHistoryModel(data.data);
}
var /** @type {?} */ closeXHandler = function () { _this.dialogService.hideDialog(); };
var /** @type {?} */ closeHandler = function () { _this.dialogService.hideDialog(); };
var /** @type {?} */ confirmHandler = function () { _this.dialogService.hideDialog(); };
var /** @type {?} */ buttonSet = [new ComponentDialogModel.ButtonModel("CANCEL", null, closeHandler, ['dialog-btn', 'cancel']),
new ComponentDialogModel.ButtonModel("CONFIRM", null, confirmHandler, ['dialog-btn', 'confirm'])];
var /** @type {?} */ compoModel = new ComponentDialogModel('Version History', null, 'component', buttonSet, VersionHistory, versionHistoryModel, data, '560pt', '408pt', null, bodyStyle, footerStyle, closeXHandler);
return this.dialogService.showComponentDialog(compoModel);
};
/**
* @return {?}
*/
AbstractParrotsDataEditor.prototype.getDataClassName = /**
* @return {?}
*/
function () {
return this.dataClassName;
};
/**
* @param {?} dataClassName
* @return {?}
*/
AbstractParrotsDataEditor.prototype.setDataClassName = /**
* @param {?} dataClassName
* @return {?}
*/
function (dataClassName) {
this.dataClassName = dataClassName;
};
/**
* @return {?}
*/
AbstractParrotsDataEditor.prototype.getConfigName = /**
* @return {?}
*/
function () {
return this.configName;
};
/**
* @param {?} configName
* @return {?}
*/
AbstractParrotsDataEditor.prototype.setConfigName = /**
* @param {?} configName
* @return {?}
*/
function (configName) {
if (configName !== null && typeof configName !== 'undefined' && configName !== '') {
this.configName = CONFIG_NAME + "[" + configName + "]";
}
else {
this.configName = configName;
}
};
/**
* @return {?}
*/
AbstractParrotsDataEditor.prototype.getDataSchemaReloadEvent = /**
* @return {?}
*/
function () {
return this.dataSchemaReloadEvent;
};
/**
* @param {?} dataSchemaReloadEvent
* @return {?}
*/
AbstractParrotsDataEditor.prototype.setDataSchemaReloadEvent = /**
* @param {?} dataSchemaReloadEvent
* @return {?}
*/
function (dataSchemaReloadEvent) {
this.dataSchemaReloadEvent = dataSchemaReloadEvent;
};
/**
* @return {?}
*/
AbstractParrotsDataEditor.prototype.getDataDestroyEvent = /**
* @return {?}
*/
function () {
return this.dataDestroyEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractParrotsDataEditor.prototype.setDataDestroyEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.dataDestroyEvent = event;
};
/**
* @return {?}
*/
AbstractParrotsDataEditor.prototype.getDataPromoteEvent = /**
* @return {?}
*/
function () {
return this.dataPromoteEvent;
};
/**
* @param {?} event
* @return {?}
*/
AbstractParrotsDataEditor.prototype.setDataPromoteEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.dataPromoteEvent = event;
};
tslib_1.__decorate([
Option('dataSchemaReload'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractParrotsDataEditor.prototype, "dataSchemaReloadEvent", void 0);
tslib_1.__decorate([
Option('dataDestroy'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractParrotsDataEditor.prototype, "dataDestroyEvent", void 0);
tslib_1.__decorate([
Option('dataPromote'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractParrotsDataEditor.prototype, "dataPromoteEvent", void 0);
return AbstractParrotsDataEditor;
}(AbstractDataEditor));
export { AbstractParrotsDataEditor };
function AbstractParrotsDataEditor_tsickle_Closure_declarations() {
/** @type {?} */
AbstractParrotsDataEditor.prototype.dataSchemaReloadEvent;
/** @type {?} */
AbstractParrotsDataEditor.prototype.dataDestroyEvent;
/** @type {?} */
AbstractParrotsDataEditor.prototype.dataPromoteEvent;
/** @type {?} */
AbstractParrotsDataEditor.prototype.dataSchema;
/** @type {?} */
AbstractParrotsDataEditor.prototype.dataServiceFactory;
/** @type {?} */
AbstractParrotsDataEditor.prototype.dataService;
/** @type {?} */
AbstractParrotsDataEditor.prototype.versionHistoryFactory;
/** @type {?} */
AbstractParrotsDataEditor.prototype.dataClassName;
/** @type {?} */
AbstractParrotsDataEditor.prototype.configName;
/** @type {?} */
AbstractParrotsDataEditor.prototype.instConnectionMgr;
/** @type {?} */
AbstractParrotsDataEditor.prototype.classesResource;
}
export { DataLangSelectorPane } from './editor.internal/DataLangSelectorPane.component';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RQYXJyb3RzRGF0YUVkaXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lvLnBhcnJvdHMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2VkaXRvci9BYnN0cmFjdFBhcnJvdHNEYXRhRWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFpQixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUNMLE1BQU0sRUFBRSxrQkFBa0IsRUFFMUIsVUFBVSxFQUFFLG9CQUFvQixFQUNqQyxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFPdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUs1RCxxQkFBTSxXQUFXLEdBQVcsd0JBQXdCLENBQUM7Ozs7O0lBS0cscURBQWtCO0lBb0J4RSxtQ0FBWSxjQUErQyxFQUFFLFlBQTJDLEVBQUUsV0FBc0MsRUFDOUkscUJBQXlELEVBQUUsZUFBb0MsRUFBRSxhQUE0QixFQUM3SCxZQUFzQyxFQUFFLGFBQXFCLEVBQUUsVUFBa0IsRUFBRSxxQkFBa0QsRUFDckksaUJBQTRDO1FBSDlDLFlBSUUsa0JBQU0sY0FBYyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsU0FhdEg7UUFYQyxLQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxLQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9CLEtBQUksQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztRQUNuRCxLQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsS0FBSSxDQUFDLHFC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d0M7UUFDdEUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDOzs7OztJQUc5Qyx1REFBbUI7Ozs7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzs7Ozs7O0lBR3hCLHVEQUFtQjs7OztjQUFDLEtBQXdCO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Ozs7O0lBR3pCLHVEQUFtQjs7OztRQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDOzs7Ozs7SUFHeEIsdURBQW1COzs7O2NBQUMsS0FBd0I7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQzs7O1FBM1UvQixNQUFNLENBQUMsa0JBQWtCLENBQUM7MENBQ00sWUFBWTs7O1FBQzVDLE1BQU0sQ0FBQyxhQUFhLENBQUM7MENBQ00sWUFBWTs7O1FBQ3ZDLE1BQU0sQ0FBQyxhQUFhLENBQUM7MENBQ00sWUFBWTs7b0NBakMxQztFQXlCd0Qsa0JBQWtCO1NBQXBELHlCQUF5Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtWL0MscUNBQWMsa0RBQWtELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIElucHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcclxuICBPcHRpb24sIEFic3RyYWN0RGF0YUVkaXRvciwgSURhdGFFZGl0b3JBY3Rpb25Qcm92aWRlciwgSURhdGFTZXJ2aWNlRmFjdG9yeSxcbiAgSUVkaXRvclNldHRpbmdTZXJ2aWNlRmFjdG9yeSwgUGhsb3hBcHBJbmZvU2VydmljZSwgRGlhbG9nU2VydmljZSwgQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyLFxuICBFdmVudFV0aWxzLCBDb21wb25lbnREaWFsb2dNb2RlbFxyXG59IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IERBVEFfREVTVFJPWV9FVkVOVCwgREFUQV9QUk9NT1RFX0VWRU5ULCBEQVRBX1FVRVJZX0VWRU5UIH0gZnJvbSAnY29tLnBobG94dWknO1xuaW1wb3J0IHsgSVBhcnJvdHNEYXRhU2VydmljZSB9IGZyb20gJy4vSVBhcnJvdHNEYXRhU2VydmljZSc7XG5pbXBvcnQgeyBQYXJyb3RzRGF0YVNlcnZpY2VGYWN0b3J5IH0gZnJvbSAnLi4vLi4vc2VydmljZS9QYXJyb3RzRGF0YVNlcnZpY2VGYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFycm90c0RhdGFFZGl0b3JBY3Rpb25Qcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2UvUGFycm90c0RhdGFFZGl0b3JBY3Rpb25Qcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBhcnJvdHNEYXRhRWRpdG9yVmlld1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZS9QYXJyb3RzRGF0YUVkaXRvclZpZXdQcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBhcnJvdHNFZGl0b3JTZXR0aW5nU2VydmljZUZhY3RvcnkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL1BhcnJvdHNFZGl0b3JTZXR0aW5nU2VydmljZUZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBQYXJyb3RzRGF0YVNjaGVtYSB9IGZyb20gJy4uLy4uL3NoYXJlL21vZGVsL1BhcnJvdHNEYXRhU2NoZW1hJztcbmltcG9ydCB7IENsYXNzZXNSZXNvdXJjZSB9IGZyb20gJy4uLy4uL3NoYXJlL3Jlc291cmNlL0NsYXNzZXNSZXNvdXJjZSc7XG5pbXBvcnQgeyBWZXJzaW9uSGlzdG9yeSB9IGZyb20gJy4vVmVyc2lvbkhpc3RvcnkuY29tcG9uZW50JztcbmltcG9ydCB7IElWZXJzaW9uSGlzdG9yeU1vZGVsRmFjdG9yeSB9IGZyb20gJy4vSVZlcnNpb25IaXN0b3J5TW9kZWxGYWN0b3J5JztcbmltcG9ydCB7IEluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL0luc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIuc2VydmljZSc7XG5cblxuY29uc3QgQ09ORklHX05BTUU6IHN0cmluZyA9ICdjb20ucGFycm90cy5kYXRhRWRpdG9yJztcblxuLypcbiogIyMgQWJzdHJhY3RQYXJyb3RzRGF0YUVkaXRvciBjb250YWlucyBkYXRhQ2xhc3NOYW1lIGFuZCBjb25maWdOYW1lIHRoYXQgdXNlIGZvciBnZW5lcmF0ZSBzZXR0aW5nU2VydmljZSBvciBkYXRhU2VydmljZVxuKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFBhcnJvdHNEYXRhRWRpdG9yIGV4dGVuZHMgQWJzdHJhY3REYXRhRWRpdG9yIHtcblxuICAvLyAtLS0gc2VsZlxuICBAT3B0aW9uKCdkYXRhU2NoZW1hUmVsb2FkJylcbiAgcHJvdGVjdGVkIGRhdGFTY2hlbWFSZWxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPcHRpb24oJ2RhdGFEZXN0cm95JylcbiAgcHJvdGVjdGVkIGRhdGFEZXN0cm95RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3B0aW9uKCdkYXRhUHJvbW90ZScpXG4gIHByb3RlY3RlZCBkYXRhUHJvbW90ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBwcm90ZWN0ZWQgZGF0YVNjaGVtYTogUGFycm90c0RhdGFTY2hlbWE7XG4gIHByb3RlY3RlZCBkYXRhU2VydmljZUZhY3Rvcnk6IFBhcnJvdHNEYXRhU2VydmljZUZhY3Rvcnk7XG4gIHByb3RlY3RlZCBkYXRhU2VydmljZTogSVBhcnJvdHNEYXRhU2VydmljZTtcbiAgcHJvdGVjdGVkIHZlcnNpb25IaXN0b3J5RmFjdG9yeTogSVZlcnNpb25IaXN0b3J5TW9kZWxGYWN0b3J5O1xuICBwcm90ZWN0ZWQgZGF0YUNsYXNzTmFtZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgY29uZmlnTmFtZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgaW5zdENvbm5lY3Rpb25NZ3I6IEluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXI7XG4gIHByb3RlY3RlZCBjbGFzc2VzUmVzb3VyY2U6IENsYXNzZXNSZXNvdXJjZTtcblxuXG4gIGNvbnN0cnVjdG9yKGFjdGlvblByb3ZpZGVyOiBQYXJyb3RzRGF0YUVkaXRvckFjdGlvblByb3ZpZGVyLCB2aWV3UHJvdmlkZXI6IFBhcnJvdHNEYXRhRWRpdG9yVmlld1Byb3ZpZGVyLCBkYXRhRmFjdG9yeTogUGFycm90c0RhdGFTZXJ2aWNlRmFjdG9yeSxcbiAgICBzZXR0aW5nU2VydmljZUZhY3Rvcnk6IFBhcnJvdHNFZGl0b3JTZXR0aW5nU2VydmljZUZhY3RvcnksIHBobG94QXBwU2VydmljZTogUGhsb3hBcHBJbmZvU2VydmljZSwgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICBiZ1Byb2Nlc3NNZ3I6IEJhY2tncm91bmRQcm9jZXNzTWFuYWdlciwgZGF0YUNsYXNzTmFtZTogc3RyaW5nLCBjb25maWdOYW1lOiBzdHJpbmcsIHZlcnNpb25IaXN0b3J5RmFjdG9yeTogSVZlcnNpb25IaXN0b3J5TW9kZWxGYWN0b3J5LFxuICAgIGluc3RDb25uZWN0aW9uTWdyOiBJbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyKSB7XG4gICAgc3VwZXIoYWN0aW9uUHJvdmlkZXIsIHZpZXdQcm92aWRlciwgZGF0YUZhY3RvcnksIHNldHRpbmdTZXJ2aWNlRmFjdG9yeSwgcGhsb3hBcHBTZXJ2aWNlLCBkaWFsb2dTZXJ2aWNlLCBiZ1Byb2Nlc3NNZ3IpO1xuXG4gICAgdGhpcy5kYXRhQ2xhc3NOYW1lID0gZGF0YUNsYXNzTmFtZTtcbiAgICB0aGlzLnNldENvbmZpZ05hbWUoY29uZmlnTmFtZSk7XG5cbiAgICB0aGlzLnZlcnNpb25IaXN0b3J5RmFjdG9yeSA9IHZlcnNpb25IaXN0b3J5RmFjdG9yeTtcbiAgICB0aGlzLmluc3RDb25uZWN0aW9uTWdyID0gaW5zdENvbm5lY3Rpb25NZ3I7XG4gICAgdGhpcy5kYXRhU2NoZW1hUmVsb2FkRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdGhpcy5kYXRhRGVzdHJveUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIHRoaXMuZGF0YVByb21vdGVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHRoaXMuY2xhc3Nlc1Jlc291cmNlID0gdGhpcy5pbnN0Q29ubmVjdGlvbk1nci5jcmVhdGVSZXNvdXJjZShDbGFzc2VzUmVzb3VyY2UpO1xuXG4gIH1cblxuICAvLyBpbml0UGFnZSB3aXRoIHJlbG9hZERhdGFTY2hlbWFcbiAgcHJvdGVjdGVkIGluaXRQYWdlKCk6IHZvaWQge1xuICAgIC8vIGNyZWF0ZSBwYXJyb3RzIERhdGFTZXJ2aWNlIGJlZm9yZSBjYWxsIHN1cGVyXG4gICAgaWYgKHRoaXMuZGF0YVNlcnZpY2VGYWN0b3J5ICE9PSBudWxsICYmIHRoaXMuZGF0YVNlcnZpY2VGYWN0b3J5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCBkZlByb20gPSB0aGlzLmRhdGFTZXJ2aWNlRmFjdG9yeS5jcmVhdGVEYXRhU2VydmljZSh0aGlzKTtcblxuICAgICAgaWYgKGRmUHJvbSAhPSBudWxsICYmIGRmUHJvbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRmUHJvbS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlID0gcmVzdWx0O1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YVNjaGVtYSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlci5pbml0UGFnZSgpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZERhdGFTY2hlbWEoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YVNlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmxvYWREYXRhU2NoZW1hKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhU2NoZW1hID0gcmVzdWx0O1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB0aGlzLmRhdGFTY2hlbWFSZWxvYWRFdmVudC5lbWl0KHJlc3VsdCk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgdGhpcy5kYXRhU2NoZW1hUmVsb2FkRXZlbnQuZW1pdChudWxsKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95RGF0YShkYXRhOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuXG4gICAgaWYgKHRoaXMuZGF0YVNlcnZpY2UgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMuZGF0YVNlcnZpY2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgIH1cblxuICAgIGxldCBwcm9tID0gdGhpcy5kYXRhU2VydmljZS5kZXN0cm95RGF0YShkYXRhKTtcblxuICAgIGlmIChwcm9tICE9PSBudWxsKSB7XG4gICAgICBwcm9tLnRoZW4oKHJlc29sdmVEYXRhKSA9PiB7XG5cbiAgICAgICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgICAgaWYgKHJlc29sdmVEYXRhICE9PSBudWxsICYmIHR5cGVvZiByZXNvbHZlRGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlRGF0YSkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgcmVzb2x2ZURhdGEpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEYXRhKGl0ZW0pO1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZGVsZXRlIGZyb20gZGF0YVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVEYXRhKHJlc29sdmVEYXRhKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc29sdmVEYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0YTogYW55ID0gcmVzb2x2ZURhdGE7XG4gICAgICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoREFUQV9ERVNUUk9ZX0VWRU5ULCB0aGlzLCBkYXRhLCBudWxsKTtcblxuICAgICAgICB0aGlzLmRhdGFEZXN0cm95RXZlbnQuZW1pdChldik7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNvbHZlRGF0YSk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9tO1xuICB9XG5cbiAgcHVibGljIHByb21vdGVEYXRhKGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XG5cbiAgICBpZiAodGhpcy5kYXRhU2VydmljZSA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy5kYXRhU2VydmljZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuXG4gICAgbGV0IGRhdGFUZW1wOiBhbnlbXSA9IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBkYXRhVGVtcCA9IGRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFUZW1wLnB1c2goZGF0YSk7XG4gICAgfVxuICAgIGxldCBwcm9tID0gdGhpcy5kYXRhU2VydmljZS5wcm9tb3RlRGF0YShkYXRhKTtcblxuICAgIGlmIChwcm9tICE9PSBudWxsKSB7XG4gICAgICBwcm9tLnRoZW4oKHJlc29sdmVEYXRhKSA9PiB7XG4gICAgICAgIGxldCByZXN1bHQ6IGFueVtdID0gW107XG4gICAgICAgIGlmIChyZXNvbHZlRGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZURhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzb2x2ZURhdGEpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHJlc29sdmVEYXRhKSB7XG4gICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRGF0YShpdGVtKTsgLy8hIGRvIHByb21vdGVcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEYXRhKHJlc29sdmVEYXRhKTsgLy8hIGRvIHByb21vdGVcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc29sdmVEYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgICAgIGRhdGE6IHJlc3VsdCxcbiAgICAgICAgICBvcmlnaW5hbDogZGF0YVRlbXBcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXYgPSBFdmVudFV0aWxzLm5ld0N1c3RvbUV2ZW50KERBVEFfUFJPTU9URV9FVkVOVCwgdGhpcywgZGF0YSwgbnVsbCk7XG5cbiAgICAgICAgdGhpcy5kYXRhUHJvbW90ZUV2ZW50LmVtaXQoZXYpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzb2x2ZURhdGEpO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRWZXJzaW9uSGlzdG9yeShkYXRhOiBhbnksIHN0YXJ0RGF0ZVRpbWU6IERhdGUsIGVuZERhdGVUaW1lOiBEYXRlKTogUHJvbWlzZTxhbnk+IHtcblxuICAgIGxldCBkYXRhVGVtcDogYW55W10gPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgZGF0YVRlbXAgPSBkYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhVGVtcC5wdXNoKGRhdGEpO1xuICAgIH1cblxuICAgIGxldCB1dWlkOiBzdHJpbmcgPSBkYXRhLl91dWlkO1xuICAgIGxldCBjbGFzc05hbWU6IHN0cmluZyA9IHRoaXMuZ2V0RGF0YUNsYXNzTmFtZSgpO1xuXG4gICAgbGV0IHByb20gPSB0aGlzLmNsYXNzZXNSZXNvdXJjZS5nZXRWZXJzaW9ucyh1dWlkLCBjbGFzc05hbWUpO1xuXG4gICAgaWYgKHByb20gIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb20udGhlbigocmVzb2x2ZURhdGEpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgICAgICAgIGlmIChyZXNvbHZlRGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZURhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgcmVzb2x2ZURhdGEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZihzdGFydERhdGVUaW1lICE9PSBudWxsICYmIHN0YXJ0RGF0ZVRpbWUgIT09IHVuZGVmaW5lZCAmJiBlbmREYXRlVGltZSAhPT0gbnVsbCAmJiBlbmREYXRlVGltZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgIGlmKChzdGFydERhdGVUaW1lLmlzQmVmb3JlKGl0ZW0uX2NyZWF0ZWQpIHx8IHN0YXJ0RGF0ZVRpbWUuZXF1YWxzKGl0ZW0uX2NyZWF0ZWQpKSAmJlxuICAgICAgICAgICAgICAgICAgICAoZW5kRGF0ZVRpbWUuaXNBZnRlcihpdGVtLl9jcmVhdGVkKSB8fCBlbmREYXRlVGltZS5lcXVhbHMoaXRlbS5fY3JlYXRlZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHN0YXJ0RGF0ZVRpbWUgIT09IG51bGwgJiYgc3RhcnREYXRlVGltZSAhPT0gdW5kZWZpbmVkICYmIChlbmREYXRlVGltZSA9PT0gbnVsbCB8fCBlbmREYXRlVGltZSA9PT0gdW5kZWZpbmVkKSl7XG4gICAgICAgICAgICAgICAgICBpZigoc3RhcnREYXRlVGltZS5pc0JlZm9yZShpdGVtLl9jcmVhdGVkKSB8fCBzdGFydERhdGVUaW1lLmVxdWFscyhpdGVtLl9jcmVhdGVkKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYoKHN0YXJ0RGF0ZVRpbWUgPT09IG51bGwgfHwgc3RhcnREYXRlVGltZSA9PT0gdW5kZWZpbmVkKSAmJiBlbmREYXRlVGltZSAhPT0gbnVsbCAmJiBlbmREYXRlVGltZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgIGlmKChlbmREYXRlVGltZS5pc0FmdGVyKGl0ZW0uX2NyZWF0ZWQpIHx8IGVuZERhdGVUaW1lLmVxdWFscyhpdGVtLl9jcmVhdGVkKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRhdGE6IGFueSA9IHtcbiAgICAgICAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICAgICAgICBvcmlnaW5hbDogZGF0YVRlbXBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoREFUQV9RVUVSWV9FVkVOVCwgdGhpcywgZGF0YSwgbnVsbCk7XG5cbiAgICAgICAgICAgIHRoaXMuZGF0YVF1ZXJ5RXZlbnQuZW1pdChldik7XG5cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMYW5ndWFnZUxpc3QoZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAodGhpcy5kYXRhU2VydmljZSA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy5kYXRhU2VydmljZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gbGV0IGZEYXRhID0gZGF0YTtcbiAgICBsZXQgZGF0YVRlbXA6IGFueVtdID0gW107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIGRhdGFUZW1wID0gZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVRlbXAucHVzaChkYXRhKTtcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyRGF0YSA9IHtcbiAgICAgIFwiZmlsdGVyXCI6IFwidGhpcy5fbGFuZyAhPSBudWxsICYmIHRoaXMuX3V1aWQgPT0gdXVpZFwiLFxuICAgICAgXCJwYXJhbWV0ZXJzXCI6IFwiamF2YS5sYW5nLlN0cmluZyB1dWlkXCIsXG4gICAgICBcImV4ZWN1dGVNYXBcIjoge1xuICAgICAgICBcInV1aWRcIjogZGF0YS5fdXVpZFxuICAgICAgfVxuICAgIH07XG4gICAgbGV0IHByb20gPSB0aGlzLmRhdGFTZXJ2aWNlLnF1ZXJ5RGF0YShmaWx0ZXJEYXRhKTtcblxuICAgIGlmIChwcm9tICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9tLnRoZW4oKHJlc29sdmVEYXRhKSA9PiB7XG4gICAgICAgICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgICAgICBpZiAocmVzb2x2ZURhdGEgIT09IG51bGwgJiYgdHlwZW9mIHJlc29sdmVEYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiByZXNvbHZlRGF0YS5pdGVtcykge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgZGF0YTogYW55ID0ge1xuICAgICAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICAgICAgb3JpZ2luYWw6IGRhdGFUZW1wXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBldiA9IEV2ZW50VXRpbHMubmV3Q3VzdG9tRXZlbnQoREFUQV9RVUVSWV9FVkVOVCwgdGhpcywgZGF0YSwgbnVsbCk7XG5cbiAgICAgICAgICB0aGlzLmRhdGFRdWVyeUV2ZW50LmVtaXQoZXYpO1xuXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9tO1xuICB9XG5cbiAgcHVibGljIHNob3dWZXJzaW9uSGlzdG9yeURpYWxvZyhkYXRhOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGxldCBib2R5U3R5bGU6IHN0cmluZ1tdID0gWydncmV5JywgJ3ZlcnNpb24tYm9keSddO1xuICAgIGxldCBmb290ZXJTdHlsZTogc3RyaW5nW10gPSBbJ2dyZXknLCAncmlnaHQnLCAndmVyc2lvbi1mb290ZXInXTtcbiAgICBsZXQgdmVyc2lvbkhpc3RvcnlNb2RlbDogYW55ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnZlcnNpb25IaXN0b3J5RmFjdG9yeSAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy52ZXJzaW9uSGlzdG9yeUZhY3RvcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2ZXJzaW9uSGlzdG9yeU1vZGVsID0gdGhpcy52ZXJzaW9uSGlzdG9yeUZhY3RvcnkuZ2V0VmVyc2lvbkhpc3RvcnlNb2RlbChkYXRhLmRhdGEpO1xuICAgIH1cblxuICAgIGxldCBjbG9zZVhIYW5kbGVyOiBGdW5jdGlvbiA9ICgpID0+IHsgdGhpcy5kaWFsb2dTZXJ2aWNlLmhpZGVEaWFsb2coKTsgfTtcbiAgICBsZXQgY2xvc2VIYW5kbGVyOiBGdW5jdGlvbiA9ICgpID0+IHsgdGhpcy5kaWFsb2dTZXJ2aWNlLmhpZGVEaWFsb2coKTsgfTtcbiAgICBsZXQgY29uZmlybUhhbmRsZXI6IEZ1bmN0aW9uID0gKCkgPT4geyB0aGlzLmRpYWxvZ1NlcnZpY2UuaGlkZURpYWxvZygpOyB9O1xuICAgIGxldCBidXR0b25TZXQgPSBbbmV3IENvbXBvbmVudERpYWxvZ01vZGVsLkJ1dHRvbk1vZGVsKFwiQ0FOQ0VMXCIsIG51bGwsIGNsb3NlSGFuZGxlciwgWydkaWFsb2ctYnRuJywgJ2NhbmNlbCddKSxcbiAgICBuZXcgQ29tcG9uZW50RGlhbG9nTW9kZWwuQnV0dG9uTW9kZWwoXCJDT05GSVJNXCIsIG51bGwsIGNvbmZpcm1IYW5kbGVyLCBbJ2RpYWxvZy1idG4nLCAnY29uZmlybSddKV07XG5cbiAgICBsZXQgY29tcG9Nb2RlbCA9IG5ldyBDb21wb25lbnREaWFsb2dNb2RlbCgnVmVyc2lvbiBIaXN0b3J5JywgbnVsbCwgJ2NvbXBvbmVudCcsIGJ1dHRvblNldCwgVmVyc2lvbkhpc3RvcnksIHZlcnNpb25IaXN0b3J5TW9kZWwsIGRhdGEsXG4gICAgICAnNTYwcHQnLCAnNDA4cHQnLCBudWxsLCBib2R5U3R5bGUsIGZvb3RlclN0eWxlLCBjbG9zZVhIYW5kbGVyKTtcblxuICAgIHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NvbXBvbmVudERpYWxvZyhjb21wb01vZGVsKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRhQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUNsYXNzTmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREYXRhQ2xhc3NOYW1lKGRhdGFDbGFzc05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGF0YUNsYXNzTmFtZSA9IGRhdGFDbGFzc05hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ05hbWU7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29uZmlnTmFtZShjb25maWdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoY29uZmlnTmFtZSAhPT0gbnVsbCAmJiB0eXBlb2YgY29uZmlnTmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uZmlnTmFtZSAhPT0gJycpIHtcbiAgICAgIHRoaXMuY29uZmlnTmFtZSA9IENPTkZJR19OQU1FICsgXCJbXCIgKyBjb25maWdOYW1lICsgXCJdXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlnTmFtZSA9IGNvbmZpZ05hbWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldERhdGFTY2hlbWFSZWxvYWRFdmVudCgpOiBFdmVudEVtaXR0ZXI8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNjaGVtYVJlbG9hZEV2ZW50O1xuICB9XG5cbiAgcHVibGljIHNldERhdGFTY2hlbWFSZWxvYWRFdmVudChkYXRhU2NoZW1hUmVsb2FkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU2NoZW1hUmVsb2FkRXZlbnQgPSBkYXRhU2NoZW1hUmVsb2FkRXZlbnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0YURlc3Ryb3lF