dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
572 lines • 44.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { EventEmitter, Injectable } from '@angular/core';
import { BehaviorSubject, forkJoin } from 'rxjs';
import { startWith, tap } from 'rxjs/operators';
import { map2WithLetter } from '../../services/eleview/mapletter';
import { ElementBackFace } from './back-face';
import { FillAt } from './bill-param';
import { ImportStyle } from './import-param';
/**
* @record
*/
function IElementData() { }
if (false) {
/** @type {?} */
IElementData.prototype.Tabs;
/** @type {?} */
IElementData.prototype.parent;
}
/**
* @record
*/
export function IProcess() { }
if (false) {
/** @type {?} */
IProcess.prototype.Name;
/** @type {?|undefined} */
IProcess.prototype.Icon;
/** @type {?|undefined} */
IProcess.prototype.Color;
/** @type {?|undefined} */
IProcess.prototype.ElementName;
/** @type {?} */
IProcess.prototype.BindRecord;
/** @type {?|undefined} */
IProcess.prototype.TransPath;
/** @type {?|undefined} */
IProcess.prototype.TransQuery;
/** @type {?|undefined} */
IProcess.prototype.WithSql;
/** @type {?|undefined} */
IProcess.prototype.Visable;
/** @type {?|undefined} */
IProcess.prototype.MoreStr;
}
export class ElementDataRecordView {
/**
* @param {?} parent
*/
constructor(parent) {
this.parent = parent;
this.Tabs = ['取数SQL', '默认显示列', '处理列表', '标签', '条件模板'];
this.inited = new EventEmitter();
this.currentProcess = new BehaviorSubject(null);
}
/**
* @return {?}
*/
get Params() {
return (/** @type {?} */ (this.parent.Params));
}
/**
* @return {?}
*/
init() {
forkJoin([
this.parent.back.fetchDB(),
this.parent.back.fetchElementNames(),
this.parent.back.fetchTables(this.Params.DB)
]).subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
this.DBList = v[0];
this.allElementNames = v[1];
this.Tables = v[2];
this.refreshProcesses();
if (this.bindRecordProcesses && this.bindRecordProcesses.length > 0) {
this.currentProcess.next(this.bindRecordProcesses[0]);
}
else if (this.notBindRecordProcesses && this.notBindRecordProcesses.length > 0) {
this.currentProcess.next(this.notBindRecordProcesses[0]);
}
if (this.Params.ConditionalTemplates && this.Params.ConditionalTemplates.length > 0) {
this.currentConditionTemplate = this.Params.ConditionalTemplates[0];
}
this.checkSQL().subscribe();
this.inited.emit();
}));
}
/**
* @return {?}
*/
refreshTables() {
this.parent.back.fetchTables(this.Params.DB).subscribe((/**
* @param {?} v
* @return {?}
*/
v => (this.Tables = v)));
}
/**
* @return {?}
*/
refreshProcesses() {
this.bindRecordProcesses = (this.Params.Processes || []).filter((/**
* @param {?} v
* @return {?}
*/
v => v.BindRecord));
this.notBindRecordProcesses = (this.Params.Processes || []).filter((/**
* @param {?} v
* @return {?}
*/
v => !v.BindRecord));
}
// 将分开的处理列表合并成一个
/**
* @return {?}
*/
collectionProcesses() {
this.Params.Processes = [...this.bindRecordProcesses, ...this.notBindRecordProcesses];
}
/**
* @return {?}
*/
checkSQL() {
return this.parent.back
.checkSQL({
DB: this.Params.DB,
Table: this.Params.TableName,
ManualPage: this.Params.ManualPage,
SQL: this.Params.Sql
})
.pipe(tap((/**
* @param {?} v
* @return {?}
*/
v => {
this.SQLCheckError = v.Error;
if (!this.SQLCheckError) {
// 要把旧的类型复制过来
this.Params.AllColumns = v.Columns.map((/**
* @param {?} col
* @return {?}
*/
col => {
/** @type {?} */
let t = col.Type;
if (this.Params.AllColumns) {
/** @type {?} */
const oldCol = this.Params.AllColumns.find((/**
* @param {?} fv
* @return {?}
*/
fv => fv.Name === col.Name));
if (oldCol) {
t = oldCol.Type;
}
}
return {
Name: col.Name,
Type: t
};
}));
this.allColumnNames = this.Params.AllColumns.map((/**
* @param {?} vv
* @return {?}
*/
vv => vv.Name));
this.allColumnWithLetter = map2WithLetter(this.allColumnNames);
// 删除不存在的列
if (this.Params.Columns) {
this.Params.Columns = this.Params.Columns.filter((/**
* @param {?} col
* @return {?}
*/
col => this.allColumnNames.includes(col.Name)));
}
}
})));
}
}
if (false) {
/** @type {?} */
ElementDataRecordView.prototype.labelCategories;
/** @type {?} */
ElementDataRecordView.prototype.Tabs;
/** @type {?} */
ElementDataRecordView.prototype.DBList;
/** @type {?} */
ElementDataRecordView.prototype.Tables;
/** @type {?} */
ElementDataRecordView.prototype.allElementNames;
/** @type {?} */
ElementDataRecordView.prototype.SQLCheckError;
/** @type {?} */
ElementDataRecordView.prototype.allColumnNames;
/** @type {?} */
ElementDataRecordView.prototype.allColumnWithLetter;
/** @type {?} */
ElementDataRecordView.prototype.bindRecordProcesses;
/** @type {?} */
ElementDataRecordView.prototype.notBindRecordProcesses;
/** @type {?} */
ElementDataRecordView.prototype.inited;
/** @type {?} */
ElementDataRecordView.prototype.currentProcess;
/** @type {?} */
ElementDataRecordView.prototype.currentConditionTemplate;
/** @type {?} */
ElementDataRecordView.prototype.parent;
}
export class ElementDataImport {
/**
* @param {?} parent
*/
constructor(parent) {
this.parent = parent;
this.Tabs = ['字段设置', '属性'];
}
/**
* @return {?}
*/
get Params() {
return (/** @type {?} */ (this.parent.Params));
}
/**
* @return {?}
*/
init() {
return forkJoin([this.parent.back.fetchDB(), this.parent.back.fetchTables(this.Params.DB)]).pipe(tap((/**
* @param {?} v
* @return {?}
*/
v => {
this.DBList = v[0];
this.Tables = v[1];
this.syncTableColumn();
})));
}
// 根据表名,同步最新的字段清单
/**
* @return {?}
*/
syncTableColumn() {
this.parent.back.fetchTableColumns(this.Params.Table).subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
this.Params.Fields = v.map((/**
* @param {?} one
* @return {?}
*/
one => {
/** @type {?} */
const found = this.Params.Fields.find((/**
* @param {?} sv
* @return {?}
*/
sv => sv.Name === one));
if (found) {
return found;
}
return (/** @type {?} */ ({
Name: one,
Style: ImportStyle.Normal
}));
}));
}));
}
/**
* @return {?}
*/
refreshTables() {
this.parent.back.fetchTables(this.Params.DB).subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
this.Tables = v;
}));
}
}
if (false) {
/** @type {?} */
ElementDataImport.prototype.Tabs;
/** @type {?} */
ElementDataImport.prototype.DBList;
/** @type {?} */
ElementDataImport.prototype.Tables;
/** @type {?} */
ElementDataImport.prototype.parent;
}
export class ElementDataUpdate {
/**
* @param {?} parent
*/
constructor(parent) {
this.parent = parent;
this.Tabs = ['设置'];
}
/**
* @return {?}
*/
get Params() {
return (/** @type {?} */ (this.parent.Params));
}
/**
* @return {?}
*/
isAllSelected() {
return this.Params.Fields && this.Params.Fields.find((/**
* @param {?} v
* @return {?}
*/
v => !v.selected)) === undefined;
}
/**
* @return {?}
*/
hasSelected() {
return this.Params.Fields && this.Params.Fields.find((/**
* @param {?} v
* @return {?}
*/
v => v.selected)) !== undefined;
}
/**
* @return {?}
*/
init() {
this.parent.back.fetchDB().subscribe((/**
* @param {?} v
* @return {?}
*/
v => (this.DBList = v)));
this.refreshTables();
}
/**
* @return {?}
*/
refreshTables() {
this.parent.back.fetchTables(this.Params.DB).subscribe((/**
* @param {?} v
* @return {?}
*/
v => (this.Tables = v)));
}
}
if (false) {
/** @type {?} */
ElementDataUpdate.prototype.Tabs;
/** @type {?} */
ElementDataUpdate.prototype.DBList;
/** @type {?} */
ElementDataUpdate.prototype.Tables;
/** @type {?} */
ElementDataUpdate.prototype.parent;
}
export class ElementDataBill {
/**
* @param {?} parent
*/
constructor(parent) {
this.parent = parent;
this.Tabs = ['设置'];
this.parent.init.subscribe((/**
* @return {?}
*/
() => {
this.parent.bill.formGroup
.get('Controller')
.valueChanges.pipe(startWith(this.parent.bill.formGroup.get('Controller').value))
.subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
// 如果是单据,则需要修复填充列的设置
/** @type {?} */
const ctrl = this.parent.Controllers.find((/**
* @param {?} c
* @return {?}
*/
c => c.Name === v));
if (ctrl && ctrl.Bill) {
this.parent.back.fetchBillMainColumns(v).subscribe((/**
* @param {?} cols
* @return {?}
*/
cols => {
this.MainColumns = cols;
this.fixFieldSettings(cols.map((/**
* @param {?} c
* @return {?}
*/
c => c.Name)));
this.fixCloneSettings();
}));
}
}));
}));
}
/**
* @return {?}
*/
get Param() {
return (/** @type {?} */ (this.parent.Params));
}
/**
* @param {?} cols
* @return {?}
*/
fixFieldSettings(cols) {
this.Param.FieldSettings = cols.map((/**
* @param {?} col
* @return {?}
*/
col => {
/** @type {?} */
let foundField;
if (this.Param && this.Param.FieldSettings) {
foundField = this.Param.FieldSettings.find((/**
* @param {?} fld
* @return {?}
*/
fld => fld.Name === col));
}
if (foundField) {
return foundField;
}
return (/** @type {?} */ ({
Name: col,
Fill: '',
FillAt: FillAt.SkipFill,
Visibility: ''
}));
}));
}
/**
* @return {?}
*/
fixCloneSettings() {
/** @type {?} */
const old = [...(this.Param.ClonePrimaryKeySettings || [])];
if (this.Param.AllowClone) {
this.Param.ClonePrimaryKeySettings = this.MainColumns.filter((/**
* @param {?} v
* @return {?}
*/
v => v.PrimaryKey)).map((/**
* @param {?} v
* @return {?}
*/
v => {
/** @type {?} */
const oldField = old.find((/**
* @param {?} o
* @return {?}
*/
o => o.Name === v.Name));
return (/** @type {?} */ ({
Name: v.Name,
Fill: oldField ? oldField.Fill : '{{.SRC}}',
Visibility: oldField ? oldField.Visibility : ''
}));
}));
console.log(this.Param.ClonePrimaryKeySettings);
}
else {
this.Param.ClonePrimaryKeySettings = null;
}
}
}
if (false) {
/** @type {?} */
ElementDataBill.prototype.Tabs;
/** @type {?} */
ElementDataBill.prototype.MainColumns;
/** @type {?} */
ElementDataBill.prototype.parent;
}
export class ElementService {
/**
* @param {?} back
*/
constructor(back) {
this.back = back;
this.init = new EventEmitter();
this.BaseActive = true;
this.data = {
recordview: new ElementDataRecordView(this),
import: new ElementDataImport(this),
update: new ElementDataUpdate(this),
bill: new ElementDataBill(this)
};
}
/**
* @param {?} ele
* @return {?}
*/
onInit(ele) {
this.back.element = ele;
this.back.fetchElementInitData(this.bill.typeRecord.Name).subscribe((/**
* @param {?} v
* @return {?}
*/
v => {
this.Controllers = v.Controllers;
this.Categories = v.Categories;
this.CategoriesEN = v.CategoriesEN;
if (v.CanSelectRoles) {
this.Roles = v.CanSelectRoles.map((/**
* @param {?} sv
* @return {?}
*/
sv => ({
Name: sv,
OldChecked: v.Roles && v.Roles.find((/**
* @param {?} vv
* @return {?}
*/
vv => vv === sv)) !== undefined,
Checked: false,
Modify: false
})));
this.Roles.forEach((/**
* @param {?} role
* @return {?}
*/
role => (role.Checked = role.OldChecked)));
}
this.init.emit();
}));
}
}
ElementService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
ElementService.ctorParameters = () => [
{ type: ElementBackFace }
];
if (false) {
/** @type {?} */
ElementService.prototype.bill;
/** @type {?} */
ElementService.prototype.init;
/** @type {?} */
ElementService.prototype.Controllers;
/** @type {?} */
ElementService.prototype.Categories;
/** @type {?} */
ElementService.prototype.CategoriesEN;
/** @type {?} */
ElementService.prototype.BaseActive;
/** @type {?} */
ElementService.prototype.ActiveTab;
/** @type {?} */
ElementService.prototype.Roles;
/** @type {?} */
ElementService.prototype.Params;
/** @type {?} */
ElementService.prototype.data;
/** @type {?} */
ElementService.prototype.back;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2VsZW1lbnQvc2VydmljZS9lbGVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWxFLE9BQU8sRUFBYyxlQUFlLEVBQWMsTUFBTSxhQUFhLENBQUM7QUFDdEUsT0FBTyxFQUEyQixNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0QsT0FBTyxFQUE0QixXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUl2RSwyQkFHQzs7O0lBRkEsNEJBQWU7O0lBQ2YsOEJBQXVCOzs7OztBQUV4Qiw4QkFXQzs7O0lBVkEsd0JBQWE7O0lBQ2Isd0JBQWM7O0lBQ2QseUJBQWU7O0lBQ2YsK0JBQXFCOztJQUNyQiw4QkFBb0I7O0lBQ3BCLDZCQUFxQjs7SUFDckIsOEJBQW9COztJQUNwQiwyQkFBa0I7O0lBQ2xCLDJCQUFpQjs7SUFDakIsMkJBQWlCOztBQUdsQixNQUFNLE9BQU8scUJBQXFCOzs7O0lBa0JqQyxZQUFtQixNQUFzQjtRQUF0QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQWhCekMsU0FBSSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBVWhELFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSTVCLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVcsSUFBSSxDQUFDLENB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O0lBQzFCLHFDQUEwQjs7SUFDMUIsb0NBQXFCOztJQUNyQixzQ0FBdUI7O0lBQ3ZCLG9DQUFrQjs7SUFDbEIsbUNBQWtCOztJQUNsQiwrQkFJSTs7SUFDSixnQ0FBWTs7SUFDWiw4QkFLRTs7SUFDVSw4QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRWxlbWVudFJvdXRlLCBQcmltYXJ5S2V5U2V0dGluZyB9IGZyb20gJ2Rid2ViLWNvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCaWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmlsbC9iaWxsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1vZGVsRWxlbWVudENhdGVnb3J5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxldmlldy9lbGV2aWV3LWJhY2tmYWNlJztcclxuaW1wb3J0IHsgbWFwMldpdGhMZXR0ZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGV2aWV3L21hcGxldHRlcic7XHJcbmltcG9ydCB7IENvbHVtbnNXaXRoTGV0dGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9tb2RlbCc7XHJcbmltcG9ydCB7IENvbnRyb2xsZXIsIEVsZW1lbnRCYWNrRmFjZSwgTWFpbkNvbHVtbiB9IGZyb20gJy4vYmFjay1mYWNlJztcclxuaW1wb3J0IHsgQmlsbFBhcmFtLCBGaWVsZFNldHRpbmcsIEZpbGxBdCB9IGZyb20gJy4vYmlsbC1wYXJhbSc7XHJcbmltcG9ydCB7IEltcG9ydFBhcmFtLCBJbXBvcnRGaWVsZCwgSW1wb3J0U3R5bGUgfSBmcm9tICcuL2ltcG9ydC1wYXJhbSc7XHJcbmltcG9ydCB7IENvbmRpdGlvbmFsVGVtcGxhdGUsIFJlY29yZFZpZXdQYXJhbSB9IGZyb20gJy4vcmVjb3Jkdmlldy1wYXJhbSc7XHJcbmltcG9ydCB7IFVwZGF0ZVBhcmFtIH0gZnJvbSAnLi91cGRhdGUucGFyYW0nO1xyXG5cclxuaW50ZXJmYWNlIElFbGVtZW50RGF0YSB7XHJcblx0VGFiczogc3RyaW5nW107XHJcblx0cGFyZW50OiBFbGVtZW50U2VydmljZTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9jZXNzIHtcclxuXHROYW1lOiBzdHJpbmc7XHJcblx0SWNvbj86IHN0cmluZzsgLy8gW25hbWVzcGFjZV06W25hbWVdIOeahOaWueW8j1xyXG5cdENvbG9yPzogc3RyaW5nOyAvLyDosIPoibLmnb/oibLlj7flkI3np7DvvIzpu5jorqTkuLrnqbpcclxuXHRFbGVtZW50TmFtZT86IHN0cmluZztcclxuXHRCaW5kUmVjb3JkOiBib29sZWFuOyAvLyDkvKDpgJLliLDkuIvkuIDkuKrlt6XkvZzlhYPntKDnmoTot6/lvoTkuIrvvIzkuIDoiKznlKjmnaXkvKDpgJLkuLvplK7vvIzlpoLmnpzkuLrnqbrliJnoh6rliqjkvKDpgJLooajnmoTkuLvplK5cclxuXHRUcmFuc1BhdGg/OiBzdHJpbmdbXTsgLy8g5Lyg6YCS5Yiw5LiL5LiA5Liq5bel5L2c5YWD57Sg55qE5Y+C5pWw77yM55So5qih5p2/5p2l5a6M5oiQLFxyXG5cdFRyYW5zUXVlcnk/OiBzdHJpbmc7IC8vIOS4gOiIrOaYr+eUqOadpeS8oOmAkuWIsOWPpuS4gOS4qlJlY29yZFZpZXfnmoTpmYTliqDmnaHku7blj4rmoIfpophcclxuXHRXaXRoU3FsPzogYm9vbGVhbjsgLy8g5piv5ZCm5Lyg6YCSc3FsXHJcblx0VmlzYWJsZT86IHN0cmluZzsgLy8g6Z2e56m655qE6K+d6K6h566X5Y+v6KeB5oCn77yM55SodGVtcGxhdGVy55qE6K+t5rOVXHJcblx0TW9yZVN0cj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVsZW1lbnREYXRhUmVjb3JkVmlldyBpbXBsZW1lbnRzIElFbGVtZW50RGF0YSB7XHJcblx0bGFiZWxDYXRlZ29yaWVzOiBNb2RlbEVsZW1lbnRDYXRlZ29yeVtdO1xyXG5cdFRhYnMgPSBbJ+WPluaVsFNRTCcsICfpu5jorqTmmL7npLrliJcnLCAn5aSE55CG5YiX6KGoJywgJ+agh+etvicsICfmnaHku7bmqKHmnb8nXTtcclxuXHREQkxpc3Q6IHN0cmluZ1tdO1xyXG5cdFRhYmxlczogc3RyaW5nW107XHJcblx0YWxsRWxlbWVudE5hbWVzOiBzdHJpbmdbXTtcclxuXHRTUUxDaGVja0Vycm9yOiBzdHJpbmc7XHJcblx0YWxsQ29sdW1uTmFtZXM6IHN0cmluZ1tdO1xyXG5cdGFsbENvbHVtbldpdGhMZXR0ZXI6IENvbHVtbnNXaXRoTGV0dGVyW107XHJcblx0Ly8g5LuOcGFyYW1zLnByb2Nlc3Nlc+S4rei9rOaNouiAjOadpVxyXG5cdGJpbmRSZWNvcmRQcm9jZXNzZXM6IElQcm9jZXNzW107XHJcblx0bm90QmluZFJlY29yZFByb2Nlc3NlczogSVByb2Nlc3NbXTtcclxuXHRpbml0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0Z2V0IFBhcmFtcygpIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcmVudC5QYXJhbXMgYXMgUmVjb3JkVmlld1BhcmFtO1xyXG5cdH1cclxuXHRjdXJyZW50UHJvY2VzcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVByb2Nlc3M+KG51bGwpO1xyXG5cdGN1cnJlbnRDb25kaXRpb25UZW1wbGF0ZTogQ29uZGl0aW9uYWxUZW1wbGF0ZTtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgcGFyZW50OiBFbGVtZW50U2VydmljZSkge31cclxuXHRpbml0KCkge1xyXG5cdFx0Zm9ya0pvaW4oW1xyXG5cdFx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoREIoKSxcclxuXHRcdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaEVsZW1lbnROYW1lcygpLFxyXG5cdFx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVzKHRoaXMuUGFyYW1zLkRCKVxyXG5cdFx0XSkuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHR0aGlzLkRCTGlzdCA9IHZbMF07XHJcblx0XHRcdHRoaXMuYWxsRWxlbWVudE5hbWVzID0gdlsxXTtcclxuXHRcdFx0dGhpcy5UYWJsZXMgPSB2WzJdO1xyXG5cclxuXHRcdFx0dGhpcy5yZWZyZXNoUHJvY2Vzc2VzKCk7XHJcblx0XHRcdGlmICh0aGlzLmJpbmRSZWNvcmRQcm9jZXNzZXMgJiYgdGhpcy5iaW5kUmVjb3JkUHJvY2Vzc2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRQcm9jZXNzLm5leHQodGhpcy5iaW5kUmVjb3JkUHJvY2Vzc2VzWzBdKTtcclxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLm5vdEJpbmRSZWNvcmRQcm9jZXNzZXMgJiYgdGhpcy5ub3RCaW5kUmVjb3JkUHJvY2Vzc2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRQcm9jZXNzLm5leHQodGhpcy5ub3RCaW5kUmVjb3JkUHJvY2Vzc2VzWzBdKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5QYXJhbXMuQ29uZGl0aW9uYWxUZW1wbGF0ZXMgJiYgdGhpcy5QYXJhbXMuQ29uZGl0aW9uYWxUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMuY3VycmVudENvbmRpdGlvblRlbXBsYXRlID0gdGhpcy5QYXJhbXMuQ29uZGl0aW9uYWxUZW1wbGF0ZXNbMF07XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5jaGVja1NRTCgpLnN1YnNjcmliZSgpO1xyXG5cclxuXHRcdFx0dGhpcy5pbml0ZWQuZW1pdCgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHB1YmxpYyByZWZyZXNoVGFibGVzKCkge1xyXG5cdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaFRhYmxlcyh0aGlzLlBhcmFtcy5EQikuc3Vic2NyaWJlKHYgPT4gKHRoaXMuVGFibGVzID0gdikpO1xyXG5cdH1cclxuXHRwdWJsaWMgcmVmcmVzaFByb2Nlc3NlcygpIHtcclxuXHRcdHRoaXMuYmluZFJlY29yZFByb2Nlc3NlcyA9ICh0aGlzLlBhcmFtcy5Qcm9jZXNzZXMgfHwgW10pLmZpbHRlcih2ID0+IHYuQmluZFJlY29yZCk7XHJcblx0XHR0aGlzLm5vdEJpbmRSZWNvcmRQcm9jZXNzZXMgPSAodGhpcy5QYXJhbXMuUHJvY2Vzc2VzIHx8IFtdKS5maWx0ZXIodiA9PiAhdi5CaW5kUmVjb3JkKTtcclxuXHR9XHJcblxyXG5cdC8vIOWwhuWIhuW8gOeahOWkhOeQhuWIl+ihqOWQiOW5tuaIkOS4gOS4qlxyXG5cdGNvbGxlY3Rpb25Qcm9jZXNzZXMoKSB7XHJcblx0XHR0aGlzLlBhcmFtcy5Qcm9jZXNzZXMgPSBbLi4udGhpcy5iaW5kUmVjb3JkUHJvY2Vzc2VzLCAuLi50aGlzLm5vdEJpbmRSZWNvcmRQcm9jZXNzZXNdO1xyXG5cdH1cclxuXHJcblx0Y2hlY2tTUUwoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQuYmFja1xyXG5cdFx0XHQuY2hlY2tTUUwoe1xyXG5cdFx0XHRcdERCOiB0aGlzLlBhcmFtcy5EQixcclxuXHRcdFx0XHRUYWJsZTogdGhpcy5QYXJhbXMuVGFibGVOYW1lLFxyXG5cdFx0XHRcdE1hbnVhbFBhZ2U6IHRoaXMuUGFyYW1zLk1hbnVhbFBhZ2UsXHJcblx0XHRcdFx0U1FMOiB0aGlzLlBhcmFtcy5TcWxcclxuXHRcdFx0fSlcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0dGFwKHYgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5TUUxDaGVja0Vycm9yID0gdi5FcnJvcjtcclxuXHRcdFx0XHRcdGlmICghdGhpcy5TUUxDaGVja0Vycm9yKSB7XHJcblx0XHRcdFx0XHRcdC8vIOimgeaKiuaXp+eahOexu+Wei+WkjeWItui/h+adpVxyXG5cdFx0XHRcdFx0XHR0aGlzLlBhcmFtcy5BbGxDb2x1bW5zID0gdi5Db2x1bW5zLm1hcChjb2wgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGxldCB0ID0gY29sLlR5cGU7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuUGFyYW1zLkFsbENvbHVtbnMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9sZENvbCA9IHRoaXMuUGFyYW1zLkFsbENvbHVtbnMuZmluZChmdiA9PiBmdi5OYW1lID09PSBjb2wuTmFtZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAob2xkQ29sKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHQgPSBvbGRDb2wuVHlwZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRcdE5hbWU6IGNvbC5OYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0VHlwZTogdFxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbENvbHVtbk5hbWVzID0gdGhpcy5QYXJhbXMuQWxsQ29sdW1ucy5tYXAodnYgPT4gdnYuTmFtZSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuYWxsQ29sdW1uV2l0aExldHRlciA9IG1hcDJXaXRoTGV0dGVyKHRoaXMuYWxsQ29sdW1uTmFtZXMpO1xyXG5cdFx0XHRcdFx0XHQvLyDliKDpmaTkuI3lrZjlnKjnmoTliJdcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuUGFyYW1zLkNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBhcmFtcy5Db2x1bW5zID0gdGhpcy5QYXJhbXMuQ29sdW1ucy5maWx0ZXIoY29sID0+XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbENvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbC5OYW1lKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVsZW1lbnREYXRhSW1wb3J0IGltcGxlbWVudHMgSUVsZW1lbnREYXRhIHtcclxuXHRUYWJzOiBzdHJpbmdbXSA9IFsn5a2X5q616K6+572uJywgJ+WxnuaApyddO1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJlbnQ6IEVsZW1lbnRTZXJ2aWNlKSB7fVxyXG5cdERCTGlzdDogc3RyaW5nW107XHJcblx0VGFibGVzOiBzdHJpbmdbXTtcclxuXHRnZXQgUGFyYW1zKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMucGFyZW50LlBhcmFtcyBhcyBJbXBvcnRQYXJhbTtcclxuXHR9XHJcblxyXG5cdGluaXQoKSB7XHJcblx0XHRyZXR1cm4gZm9ya0pvaW4oW3RoaXMucGFyZW50LmJhY2suZmV0Y2hEQigpLCB0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVzKHRoaXMuUGFyYW1zLkRCKV0pLnBpcGUoXHJcblx0XHRcdHRhcCh2ID0+IHtcclxuXHRcdFx0XHR0aGlzLkRCTGlzdCA9IHZbMF07XHJcblx0XHRcdFx0dGhpcy5UYWJsZXMgPSB2WzFdO1xyXG5cdFx0XHRcdHRoaXMuc3luY1RhYmxlQ29sdW1uKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHQvLyDmoLnmja7ooajlkI3vvIzlkIzmraXmnIDmlrDnmoTlrZfmrrXmuIXljZVcclxuXHRzeW5jVGFibGVDb2x1bW4oKSB7XHJcblx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVDb2x1bW5zKHRoaXMuUGFyYW1zLlRhYmxlKS5zdWJzY3JpYmUodiA9PiB7XHJcblx0XHRcdHRoaXMuUGFyYW1zLkZpZWxkcyA9IHYubWFwKG9uZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZm91bmQgPSB0aGlzLlBhcmFtcy5GaWVsZHMuZmluZChzdiA9PiBzdi5OYW1lID09PSBvbmUpO1xyXG5cdFx0XHRcdGlmIChmb3VuZCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZvdW5kO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0TmFtZTogb25lLFxyXG5cdFx0XHRcdFx0U3R5bGU6IEltcG9ydFN0eWxlLk5vcm1hbFxyXG5cdFx0XHRcdH0gYXMgSW1wb3J0RmllbGQ7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHJlZnJlc2hUYWJsZXMoKSB7XHJcblx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVzKHRoaXMuUGFyYW1zLkRCKS5zdWJzY3JpYmUodiA9PiB7XHJcblx0XHRcdHRoaXMuVGFibGVzID0gdjtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVsZW1lbnREYXRhVXBkYXRlIGltcGxlbWVudHMgSUVsZW1lbnREYXRhIHtcclxuXHRUYWJzOiBzdHJpbmdbXSA9IFsn6K6+572uJ107XHJcblx0REJMaXN0OiBzdHJpbmdbXTtcclxuXHRUYWJsZXM6IHN0cmluZ1tdO1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJlbnQ6IEVsZW1lbnRTZXJ2aWNlKSB7fVxyXG5cdGdldCBQYXJhbXMoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQuUGFyYW1zIGFzIFVwZGF0ZVBhcmFtO1xyXG5cdH1cclxuXHRpc0FsbFNlbGVjdGVkKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuUGFyYW1zLkZpZWxkcyAmJiB0aGlzLlBhcmFtcy5GaWVsZHMuZmluZCh2ID0+ICF2LnNlbGVjdGVkKSA9PT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHRoYXNTZWxlY3RlZCgpIHtcclxuXHRcdHJldHVybiB0aGlzLlBhcmFtcy5GaWVsZHMgJiYgdGhpcy5QYXJhbXMuRmllbGRzLmZpbmQodiA9PiB2LnNlbGVjdGVkKSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0aW5pdCgpIHtcclxuXHRcdHRoaXMucGFyZW50LmJhY2suZmV0Y2hEQigpLnN1YnNjcmliZSh2ID0+ICh0aGlzLkRCTGlzdCA9IHYpKTtcclxuXHRcdHRoaXMucmVmcmVzaFRhYmxlcygpO1xyXG5cdH1cclxuXHRyZWZyZXNoVGFibGVzKCkge1xyXG5cdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaFRhYmxlcyh0aGlzLlBhcmFtcy5EQikuc3Vic2NyaWJlKHYgPT4gKHRoaXMuVGFibGVzID0gdikpO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgRWxlbWVudERhdGFCaWxsIGltcGxlbWVudHMgSUVsZW1lbnREYXRhIHtcclxuXHRUYWJzID0gWyforr7nva4nXTtcclxuXHRNYWluQ29sdW1uczogTWFpbkNvbHVtbltdO1xyXG5cdGdldCBQYXJhbSgpIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcmVudC5QYXJhbXMgYXMgQmlsbFBhcmFtO1xyXG5cdH1cclxuXHRmaXhGaWVsZFNldHRpbmdzKGNvbHM6IHN0cmluZ1tdKSB7XHJcblx0XHR0aGlzLlBhcmFtLkZpZWxkU2V0dGluZ3MgPSBjb2xzLm1hcChjb2wgPT4ge1xyXG5cdFx0XHRsZXQgZm91bmRGaWVsZDogRmllbGRTZXR0aW5nO1xyXG5cdFx0XHRpZiAodGhpcy5QYXJhbSAmJiB0aGlzLlBhcmFtLkZpZWxkU2V0dGluZ3MpIHtcclxuXHRcdFx0XHRmb3VuZEZpZWxkID0gdGhpcy5QYXJhbS5GaWVsZFNldHRpbmdzLmZpbmQoZmxkID0+IGZsZC5OYW1lID09PSBjb2wpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChmb3VuZEZpZWxkKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZvdW5kRmllbGQ7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHROYW1lOiBjb2wsXHJcblx0XHRcdFx0RmlsbDogJycsXHJcblx0XHRcdFx0RmlsbEF0OiBGaWxsQXQuU2tpcEZpbGwsXHJcblx0XHRcdFx0VmlzaWJpbGl0eTogJydcclxuXHRcdFx0fSBhcyBGaWVsZFNldHRpbmc7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0Zml4Q2xvbmVTZXR0aW5ncygpIHtcclxuXHRcdGNvbnN0IG9sZCA9IFsuLi4odGhpcy5QYXJhbS5DbG9uZVByaW1hcnlLZXlTZXR0aW5ncyB8fCBbXSldO1xyXG5cdFx0aWYgKHRoaXMuUGFyYW0uQWxsb3dDbG9uZSkge1xyXG5cdFx0XHR0aGlzLlBhcmFtLkNsb25lUHJpbWFyeUtleVNldHRpbmdzID0gdGhpcy5NYWluQ29sdW1ucy5maWx0ZXIodiA9PiB2LlByaW1hcnlLZXkpLm1hcCh2ID0+IHtcclxuXHRcdFx0XHRjb25zdCBvbGRGaWVsZCA9IG9sZC5maW5kKG8gPT4gby5OYW1lID09PSB2Lk5hbWUpO1xyXG5cdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHROYW1lOiB2Lk5hbWUsXHJcblx0XHRcdFx0XHRGaWxsOiBvbGRGaWVsZCA/IG9sZEZpZWxkLkZpbGwgOiAne3suU1JDfX0nLFxyXG5cdFx0XHRcdFx0VmlzaWJpbGl0eTogb2xkRmllbGQgPyBvbGRGaWVsZC5WaXNpYmlsaXR5IDogJydcclxuXHRcdFx0XHR9IGFzIFByaW1hcnlLZXlTZXR0aW5nO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Y29uc29sZS5sb2codGhpcy5QYXJhbS5DbG9uZVByaW1hcnlLZXlTZXR0aW5ncyk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLlBhcmFtLkNsb25lUHJpbWFyeUtleVNldHRpbmdzID0gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblx0Y29uc3RydWN0b3IocHVibGljIHBhcmVudDogRWxlbWVudFNlcnZpY2UpIHtcclxuXHRcdHRoaXMucGFyZW50LmluaXQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0dGhpcy5wYXJlbnQuYmlsbC5mb3JtR3JvdXBcclxuXHRcdFx0XHQuZ2V0KCdDb250cm9sbGVyJylcclxuXHRcdFx0XHQudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMucGFyZW50LmJpbGwuZm9ybUdyb3VwLmdldCgnQ29udHJvbGxlcicpLnZhbHVlKSlcclxuXHRcdFx0XHQuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdFx0Ly8g5aaC5p6c5piv5Y2V5o2u77yM5YiZ6ZyA6KaB5L+u5aSN5aGr5YWF5YiX55qE6K6+572uXHJcblx0XHRcdFx0XHRjb25zdCBjdHJsID0gdGhpcy5wYXJlbnQuQ29udHJvbGxlcnMuZmluZChjID0+IGMuTmFtZSA9PT0gdik7XHJcblx0XHRcdFx0XHRpZiAoY3RybCAmJiBjdHJsLkJpbGwpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaEJpbGxNYWluQ29sdW1ucyh2KS5zdWJzY3JpYmUoY29scyA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5NYWluQ29sdW1ucyA9IGNvbHM7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maXhGaWVsZFNldHRpbmdzKGNvbHMubWFwKGMgPT4gYy5OYW1lKSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maXhDbG9uZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVsZW1lbnRTZXJ2aWNlIHtcclxuXHRiaWxsOiBCaWxsQ29tcG9uZW50O1xyXG5cdGluaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0Q29udHJvbGxlcnM6IENvbnRyb2xsZXJbXTtcclxuXHRDYXRlZ29yaWVzOiBzdHJpbmdbXTtcclxuXHRDYXRlZ29yaWVzRU46IHN0cmluZ1tdO1xyXG5cdEJhc2VBY3RpdmUgPSB0cnVlO1xyXG5cdEFjdGl2ZVRhYjogc3RyaW5nO1xyXG5cdFJvbGVzOiB7XHJcblx0XHROYW1lOiBzdHJpbmc7XHJcblx0XHRDaGVja2VkOiBib29sZWFuO1xyXG5cdFx0T2xkQ2hlY2tlZDogYm9vbGVhbjtcclxuXHR9W107XHJcblx0UGFyYW1zOiBhbnk7XHJcblx0ZGF0YTogeyBba2V5OiBzdHJpbmddOiBJRWxlbWVudERhdGEgfSA9IHtcclxuXHRcdHJlY29yZHZpZXc6IG5ldyBFbGVtZW50RGF0YVJlY29yZFZpZXcodGhpcyksXHJcblx0XHRpbXBvcnQ6IG5ldyBFbGVtZW50RGF0YUltcG9ydCh0aGlzKSxcclxuXHRcdHVwZGF0ZTogbmV3IEVsZW1lbnREYXRhVXBkYXRlKHRoaXMpLFxyXG5cdFx0YmlsbDogbmV3IEVsZW1lbnREYXRhQmlsbCh0aGlzKVxyXG5cdH07XHJcblx0Y29uc3RydWN0b3IocHVibGljIGJhY2s6IEVsZW1lbnRCYWNrRmFjZSkge31cclxuXHRvbkluaXQoZWxlOiBFbGVtZW50Um91dGUpIHtcclxuXHRcdHRoaXMuYmFjay5lbGVtZW50ID0gZWxlO1xyXG5cdFx0dGhpcy5iYWNrLmZldGNoRWxlbWVudEluaXREYXRhKHRoaXMuYmlsbC50eXBlUmVjb3JkLk5hbWUpLnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0dGhpcy5Db250cm9sbGVycyA9IHYuQ29udHJvbGxlcnM7XHJcblx0XHRcdHRoaXMuQ2F0ZWdvcmllcyA9IHYuQ2F0ZWdvcmllcztcclxuXHRcdFx0dGhpcy5DYXRlZ29yaWVzRU4gPSB2LkNhdGVnb3JpZXNFTjtcclxuXHRcdFx0aWYgKHYuQ2FuU2VsZWN0Um9sZXMpIHtcclxuXHRcdFx0XHR0aGlzLlJvbGVzID0gdi5DYW5TZWxlY3RSb2xlcy5tYXAoc3YgPT4gKHtcclxuXHRcdFx0XHRcdE5hbWU6IHN2LFxyXG5cdFx0XHRcdFx0T2xkQ2hlY2tlZDogdi5Sb2xlcyAmJiB2LlJvbGVzLmZpbmQodnYgPT4gdnYgPT09IHN2KSAhPT0gdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0Q2hlY2tlZDogZmFsc2UsXHJcblx0XHRcdFx0XHRNb2RpZnk6IGZhbHNlXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdHRoaXMuUm9sZXMuZm9yRWFjaChyb2xlID0+IChyb2xlLkNoZWNrZWQgPSByb2xlLk9sZENoZWNrZWQpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmluaXQuZW1pdCgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiJdfQ==