dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
528 lines • 45.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms';
import { MatDialog, MatSnackBar } from '@angular/material';
import { BillBackfaceService, BillOperate, RouteElementService, BillFieldDataType } from 'dbweb-core';
import { TabsService } from '../home/tabs.service';
import { BillCloneBackfaceService } from './bill-clone-backface.service';
import { CloneComponent } from './clone/clone.component';
import { ErrorMessageComponent } from './error-message/error-message.component';
/**
* @record
*/
function Record() { }
if (false) {
/** @type {?} */
Record.prototype.Main;
/** @type {?|undefined} */
Record.prototype.Child;
}
/**
* @record
*/
export function BeforeSaveParam() { }
if (false) {
/** @type {?} */
BeforeSaveParam.prototype.record;
/** @type {?|undefined} */
BeforeSaveParam.prototype.tag;
}
var BillComponent = /** @class */ (function () {
function BillComponent(rele, billBackface, tabs, dialog, billCloneService, snackBar) {
var _this = this;
this.rele = rele;
this.billBackface = billBackface;
this.tabs = tabs;
this.dialog = dialog;
this.billCloneService = billCloneService;
this.snackBar = snackBar;
this.init = new EventEmitter();
// 这里的Name依据typestruct来
this.useTypeRecord = false;
this.typeRecord = {};
this.rele.currentElement.subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
_this.element = v;
_this.billBackface.get(v).subscribe((/**
* @param {?} vv
* @return {?}
*/
function (vv) {
_this.checkResults = vv.CheckResults;
_this.oldData = vv.EncodeData;
_this.operate = vv.Operate;
_this.allowClone = vv.AllowClone;
_this.fields = vv.Fields;
_this.typeRecord = vv.TypeRecord;
_this.record = vv.Record;
_this.signKeyValues = vv.SignKeyValues;
_this.useTypeRecord = vv.TypeRecord !== undefined && vv.TypeRecord !== null;
// 对主表字段的映射
_this.fieldMap = vv.Fields.reduce((/**
* @param {?} result
* @param {?} item
* @return {?}
*/
function (result, item) {
result[item.Name] = item;
return result;
}), {});
// 只建立主表的formgroup
if (_this.useTypeRecord) {
_this.formGroup = new FormGroup(_this.fields.reduce((/**
* @param {?} result
* @param {?} fld
* @return {?}
*/
function (result, fld) {
if (fld.Type === BillFieldDataType.DATE && _this.typeRecord[fld.Name]) {
result[fld.Name] = new FormControl({
value: _this.fixShowDate((/** @type {?} */ (_this.typeRecord[fld.Name]))),
// 去掉时区
disabled: fld.Readonly
});
}
else {
result[fld.Name] = new FormControl({
value: _this.typeRecord[fld.Name],
disabled: fld.Readonly
});
}
return result;
}), {}));
}
else {
_this.formGroup = new FormGroup(_this.fields.reduce((/**
* @param {?} result
* @param {?} fld
* @return {?}
*/
function (result, fld) {
if (fld.Type === BillFieldDataType.DATE && _this.record.Main[fld.Name]) {
result[fld.Name] = new FormControl({
value: _this.fixShowDate((/** @type {?} */ (_this.record.Main[fld.Name]))),
// 去掉时区
disabled: fld.Readonly
});
}
else {
result[fld.Name] = new FormControl({
value: _this.record.Main[fld.Name],
disabled: fld.Readonly
});
}
return result;
}), {}));
}
_this.init.emit();
}), (/**
* @param {?} err
* @return {?}
*/
function (err) {
_this.error = err.error.Error;
}));
}));
}
/**
* @private
* @param {?} d
* @return {?}
*/
BillComponent.prototype.fixShowDate = /**
* @private
* @param {?} d
* @return {?}
*/
function (d) {
if (d) {
return d.substr(0, 16);
}
return d;
};
/**
* @return {?}
*/
BillComponent.prototype.ngAfterContentInit = /**
* @return {?}
*/
function () { };
/**
* @param {?} mes
* @return {?}
*/
BillComponent.prototype.showErrorMessage = /**
* @param {?} mes
* @return {?}
*/
function (mes) {
this.dialog.open(ErrorMessageComponent, {
// width: '450px',
data: { message: mes },
autoFocus: false
});
// dialogRef.afterClosed().subscribe(result => {
// console.log('The dialog was closed');
// });
};
/**
* @return {?}
*/
BillComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () { };
/**
* @return {?}
*/
BillComponent.prototype.isAdd = /**
* @return {?}
*/
function () {
return this.operate === BillOperate.Add;
};
/**
* @return {?}
*/
BillComponent.prototype.isEdit = /**
* @return {?}
*/
function () {
return this.operate === BillOperate.Edit;
};
/**
* @return {?}
*/
BillComponent.prototype.isDelete = /**
* @return {?}
*/
function () {
return this.operate === BillOperate.Delete;
};
/**
* @return {?}
*/
BillComponent.prototype.isBrowse = /**
* @return {?}
*/
function () {
return this.operate === BillOperate.Browse;
};
/**
* @return {?}
*/
BillComponent.prototype.close = /**
* @return {?}
*/
function () {
this.tabs.close();
};
/**
* @private
* @param {?} d
* @return {?}
*/
BillComponent.prototype.fixDate = /**
* @private
* @param {?} d
* @return {?}
*/
function (d) {
/** @type {?} */
var timezoneOffsetInHours = -(d.getTimezoneOffset() / 60);
// UTC minus local time
/** @type {?} */
var sign = timezoneOffsetInHours >= 0 ? '+' : '-';
/** @type {?} */
var leadingZero = Math.abs(timezoneOffsetInHours) < 10 ? '0' : '';
// It's a bit unfortunate that we need to construct a new Date instance
// (we don't want _this_ Date instance to be modified)
/** @type {?} */
var correctedDate = new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());
correctedDate.setHours(d.getHours() + timezoneOffsetInHours);
/** @type {?} */
var iso = correctedDate.toISOString().replace('Z', '');
return iso + sign + leadingZero + Math.abs(timezoneOffsetInHours).toString() + ':00';
};
// 返回formgroup的转换好类型的值
// 返回formgroup的转换好类型的值
/**
* @return {?}
*/
BillComponent.prototype.getFormGroupValueAsType =
// 返回formgroup的转换好类型的值
/**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var rev = {};
this.fields.forEach((/**
* @param {?} fld
* @return {?}
*/
function (fld) {
switch (fld.Type) {
case BillFieldDataType.FLOAT:
rev[fld.Name] = parseFloat(_this.formGroup.get(fld.Name).value);
break;
case BillFieldDataType.INT:
rev[fld.Name] = parseInt(_this.formGroup.get(fld.Name).value, 10);
break;
case BillFieldDataType.DATE:
if (_this.formGroup.get(fld.Name).value) {
rev[fld.Name] = _this.fixDate(new Date(_this.formGroup.get(fld.Name).value));
}
else {
rev[fld.Name] = null;
}
break;
default:
rev[fld.Name] = _this.formGroup.get(fld.Name).value;
break;
}
}));
return rev;
};
/**
* @return {?}
*/
BillComponent.prototype.save = /**
* @return {?}
*/
function () {
var _this = this;
// 合并修改的数据
if (this.useTypeRecord) {
this.typeRecord = tslib_1.__assign({}, this.typeRecord, this.getFormGroupValueAsType());
}
else {
this.record = {
Main: tslib_1.__assign({}, this.record.Main, this.getFormGroupValueAsType()),
Child: tslib_1.__assign({}, this.record.Child)
};
}
/** @type {?} */
var process = (/**
* @param {?} data
* @return {?}
*/
function (data) {
// 合并修改的数据
if (_this.useTypeRecord) {
_this.typeRecord = tslib_1.__assign({}, _this.typeRecord, data ? data.record : null);
}
else {
if (data && data.record) {
_this.record.Main = tslib_1.__assign({}, _this.record.Main, data.record.Main);
_this.record.Child = data.record.Child;
}
}
_this.billBackface
.post(_this.element, (/** @type {?} */ ({
CheckOnly: false,
OldData: _this.oldData,
Tag: data ? data.tag : null,
NewTypeRecord: _this.typeRecord,
NewRecord: _this.record
})))
.subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
if (v.Ok) {
_this.tabs.close();
return;
}
_this.showErrorMessage(v.Error);
}));
});
if (this.onBeforeSave) {
this.onBeforeSave(this).subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
process(v);
}));
}
else {
process(null);
}
};
/**
* @return {?}
*/
BillComponent.prototype.delete = /**
* @return {?}
*/
function () {
var _this = this;
return this.billBackface.delete(this.element, this.oldData).subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
if (v.Ok) {
_this.tabs.close();
return;
}
_this.showErrorMessage(v.Error);
}));
};
/**
* @return {?}
*/
BillComponent.prototype.clone = /**
* @return {?}
*/
function () {
var _this = this;
this.billCloneService
.getClonePK({ OldSignPK: this.signKeyValues, EleName: this.element.element.Name })
.subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
/** @type {?} */
var dialogRef = _this.dialog.open(CloneComponent, {
// width: '450px',
data: v
});
dialogRef.afterClosed().subscribe((/**
* @param {?} result
* @return {?}
*/
function (result) {
if (result) {
_this.billCloneService
.billClone({
EleName: _this.element.element.Name,
OldSignPK: _this.signKeyValues,
NewPK: result
})
.subscribe((/**
* @param {?} apirev
* @return {?}
*/
function (apirev) {
if (apirev.Ok) {
_this.snackBar.open('成功完成克隆', '关闭', {
horizontalPosition: 'right',
verticalPosition: 'bottom',
duration: 5000
});
}
else {
_this.snackBar.open(apirev.Error, '关闭', {
horizontalPosition: 'right',
verticalPosition: 'bottom'
});
}
}));
}
}));
}));
};
BillComponent.decorators = [
{ type: Component, args: [{
selector: 'common-bill',
template: "<div *ngIf=\"error;else noErr\">{{error}}</div>\r\n<ng-template #noErr>\r\n\t<div class=\"bill\">\r\n\t\t<div class=\"content\">\r\n\t\t\t<ng-content></ng-content>\r\n\t\t</div>\r\n\t\t<div class=\"footer\">\r\n\t\t\t<div class=\"clone\">\r\n\t\t\t\t<button mat-button class=\"\u529F\u80FD\u6309\u94AE\" (click)=\"clone()\"\r\n\t\t\t\t\t*ngIf=\"allowClone\">\r\n\t\t\t\t\t<mat-icon svgIcon=\"compare_arrows\"></mat-icon>\u514B\u9686\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\t\t\t<button mat-button class=\"\u529F\u80FD\u6309\u94AE\"\r\n\t\t\t\t*ngIf=\"checkResults&&checkResults.length>0\">\r\n\t\t\t\t<mat-icon svgIcon=\"spellcheck\"></mat-icon>\u5BA1\u6838\u5907\u6CE8\r\n\t\t\t</button>\r\n\t\t\t<div class=\"\u5206\u5272\u7EBF\"\r\n\t\t\t\t*ngIf=\"allowClone || (checkResults && checkResults.length>0)\">\r\n\t\t\t</div>\r\n\t\t\t<!-- <button mat-button class=\"\u529F\u80FD\u6309\u94AE\" (click)=\"close()\">\r\n\t\t\t\t<mat-icon svgIcon=\"outlined:book\"></mat-icon>\u65E5\u5FD7\r\n\t\t\t</button> -->\r\n\t\t\t<button mat-button class=\"\u529F\u80FD\u6309\u94AE\" (click)=\"close()\"\r\n\t\t\t\t*ngIf=\"isAdd() || isEdit() || isDelete()\">\r\n\t\t\t\t<mat-icon svgIcon=\"close\"></mat-icon>\u53D6\u6D88\r\n\t\t\t</button>\r\n\t\t\t<button mat-button class=\"\u529F\u80FD\u6309\u94AE\" (click)=\"close()\"\r\n\t\t\t\t*ngIf=\"isBrowse()\">\r\n\t\t\t\t<mat-icon svgIcon=\"close\"></mat-icon>\u5173\u95ED\r\n\t\t\t</button>\r\n\t\t\t<button mat-button class=\"\u529F\u80FD\u6309\u94AE\" (click)=\"save()\" *ngIf=\"isAdd()\">\r\n\t\t\t\t<mat-icon svgIcon=\"add\"></mat-icon>\u65B0\u589E\r\n\t\t\t</button>\r\n\t\t\t<button mat-button class=\"\u529F\u80FD\u6309\u94AE \u4FDD\u5B58\u6309\u94AE\" (click)=\"save()\"\r\n\t\t\t\t*ngIf=\"isEdit()\">\r\n\t\t\t\t<mat-icon svgIcon=\"outlined:save\"></mat-icon>\u4FDD\u5B58\r\n\t\t\t</button>\r\n\t\t\t<button mat-button class=\"\u529F\u80FD\u6309\u94AE\" (click)=\"delete()\"\r\n\t\t\t\t*ngIf=\"isDelete()\">\r\n\t\t\t\t<mat-icon svgIcon=\"delete\"></mat-icon>\u5220\u9664\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t</div>\r\n</ng-template>",
styles: ["@charset \"UTF-8\";.bill{width:100%;height:100%;display:flex;flex-direction:column;align-items:stretch}.content{width:100%;flex:1;overflow:auto;padding:16px 8px;box-sizing:border-box}.footer{width:100%;height:48px;display:flex;justify-content:flex-end;align-items:center;padding-right:16px;box-sizing:border-box}.clone{text-align:left}.\u529F\u80FD\u6309\u94AE{height:32px;text-align:center;max-height:32px;line-height:32px;font-size:14px;cursor:pointer}.\u529F\u80FD\u6309\u94AE .mat-icon{width:16px;height:16px;line-height:16px;margin-right:4px;vertical-align:middle}.\u4FDD\u5B58\u6309\u94AE{display:inline-block;margin-left:8px}.\u5206\u5272\u7EBF{width:1px;height:50%;margin:0 24px}"]
}] }
];
/** @nocollapse */
BillComponent.ctorParameters = function () { return [
{ type: RouteElementService },
{ type: BillBackfaceService },
{ type: TabsService },
{ type: MatDialog },
{ type: BillCloneBackfaceService },
{ type: MatSnackBar }
]; };
BillComponent.propDecorators = {
onBeforeSave: [{ type: Input }],
init: [{ type: Output }]
};
return BillComponent;
}());
export { BillComponent };
if (false) {
/** @type {?} */
BillComponent.prototype.onBeforeSave;
/** @type {?} */
BillComponent.prototype.init;
/** @type {?} */
BillComponent.prototype.element;
/**
* @type {?}
* @private
*/
BillComponent.prototype.oldData;
/**
* @type {?}
* @private
*/
BillComponent.prototype.operate;
/** @type {?} */
BillComponent.prototype.allowClone;
/** @type {?} */
BillComponent.prototype.checkResults;
/** @type {?} */
BillComponent.prototype.fieldMap;
/** @type {?} */
BillComponent.prototype.fields;
/**
* @type {?}
* @private
*/
BillComponent.prototype.useTypeRecord;
/**
* @type {?}
* @private
*/
BillComponent.prototype.signKeyValues;
/** @type {?} */
BillComponent.prototype.formGroup;
/** @type {?} */
BillComponent.prototype.typeRecord;
/** @type {?} */
BillComponent.prototype.record;
/** @type {?} */
BillComponent.prototype.error;
/** @type {?} */
BillComponent.prototype.rele;
/**
* @type {?}
* @private
*/
BillComponent.prototype.billBackface;
/**
* @type {?}
* @private
*/
BillComponent.prototype.tabs;
/** @type {?} */
BillComponent.prototype.dialog;
/**
* @type {?}
* @private
*/
BillComponent.prototype.billCloneService;
/**
* @type {?}
* @private
*/
BillComponent.prototype.snackBar;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kYndlYi1jb21tb24vIiwic291cmNlcyI6WyJsaWIvYmlsbC9iaWxsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBb0IsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzRCxPQUFPLEVBQ04sbUJBQW1CLEVBQ25CLFdBQVcsRUFJWCxtQkFBbUIsRUFFbkIsaUJBQWlCLEVBQ2pCLE1BQU0sWUFBWSxDQUFDO0FBR3BCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7QUFDaEYscUJBR0M7OztJQUZBLHNCQUE2Qjs7SUFDN0IsdUJBQW9EOzs7OztBQUVyRCxxQ0FHQzs7O0lBRkEsaUNBQXdDOztJQUN4Qyw4QkFBVTs7QUFFWDtJQXFCQyx1QkFDUSxJQUF5QixFQUN4QixZQUFpQyxFQUNqQyxJQUFpQixFQUNsQixNQUFpQixFQUNoQixnQkFBMEMsRUFDMUMsUUFBcUI7UUFOOUIsaUJBcUVDO1FBcEVPLFNBQUksR0FBSixJQUFJLENBQXFCO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQjtRQUMxQyxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBcEJwQixTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7UUFRNUIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFHdkIsZUFBVSxHQUEyQixFQUFFLENBQUM7UUFXOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUzs7OztRQUFDLFVBQUEsQ0FBQztZQUNuQyxLQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNqQixLQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTOzs7O1lBQ2pDLFVBQUEsRUFBRTtnQkFDRCxLQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQ3BDLEtBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQztnQkFDN0IsS0FBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDO2dCQUMxQixLQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7Z0JBQ2hDLEtBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsS0FBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDO2dCQUNoQyxLQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3hCLEtBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztnQkFDdEMsS0FBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxFQUFFLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQztnQkFDM0UsV0FBVztnQkFDWCxLQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTTs7Ozs7Z0JBQUMsVUFBQyxNQUFNLEVBQUUsSUFBSTtvQkFDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ3pCLE9BQU8sTUFBTSxDQUFDO2dCQUNmLENBQUMsR0FBRSxFQUFFLENBQUMsQ0FBQztnQkFDUCxrQkFBa0I7Z0JBQ2xCLElBQUksS0FBSSxDQUFDLGFBQWEsRUFBRTtvQkFDdkIsS0FBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FDN0IsS0FBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNOzs7OztvQkFBQyxVQUFDLE1BQU0sRUFBRSxHQUFHO3dCQUM5QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsSUFBSSxJQUFJLEtBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFOzRCQUNyRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDO2dDQUNsQyxLQUFLLEVBQUUsS0FBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBQSxLQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBVSxDQUFDOztnQ0FDNUQsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFROzZCQUN0QixDQUFDLENBQUM7eUJBQ0g7NkJBQU07NEJBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQztnQ0FDbEMsS0FBSyxFQUFFLEtBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQ0FDaEMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFROzZCQUN0QixDQUFDLENBQUM7eUJBQ0g7d0JBQ0QsT0FBTyxNQUFNLENBQUM7b0JBQ2YsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxDQUNOLENBQUM7aUJBQ0Y7cUJBQU07b0JBQ04sS0FBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FDN0IsS0FBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNOzs7OztvQkFBQyxVQUFDLE1BQU0sRUFBRSxHQUFHO3dCQUM5QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsSUFBSSxJQUFJLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDdEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQztnQ0FDbEMsS0FBSyxFQUFFLEtBQUksQ0FBQyxXQUFXLENBQUMsbUJBQUEsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFVLENBQUM7O2dDQUM3RCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7NkJBQ3RCLENBQUMsQ0FBQzt5QkFDSDs2QkFBTTs0QkFDTixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDO2dDQUNsQyxLQUFLLEVBQUUsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztnQ0FDakMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFROzZCQUN0QixDQUFDLENBQUM7eUJBQ0g7d0JBQ0QsT0FBTyxNQUFNLENBQUM7b0JBQ2YsQ0FBQyxHQUFFLEVBQUUsQ0FBQyxDQUNOLENBQUM7aUJBQ0Y7Z0JBQ0QsS0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixDQUFDOzs7O1lBQ0QsVUFBQyxHQUFzQjtnQkFDdEIsS0FBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM5QixDQUFDLEVBQ0QsQ0FBQztRQUNILENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQzs7Ozs7O0lBQ08sbUNBQVc7Ozs7O0lBQW5CLFVBQW9CLENBQVM7UUFDNUIsSUFBSSxDQUFDLEVBQUU7WUFDTixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDOzs7O0lBQ0QsMENBQWtCOzs7SUFBbEIsY0FBNEIsQ0FBQzs7Ozs7SUFDN0Isd0NBQWdCOzs7O0lBQWhCLFVBQWlCLEdBQVc7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7O1lBRXZDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDdEIsU0FBUyxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsZ0RBQWdEO1FBQ2hELHlDQUF5QztRQUN6QyxNQUFNO0lBQ1AsQ0FBQzs7OztJQUNELGdDQUFROzs7SUFBUixjQUFZLENBQUM7Ozs7SUFDYiw2QkFBSzs7O0lBQUw7UUFDQyxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUN6QyxDQUFDOzs7O0lBQ0QsOEJBQU07OztJQUFOO1FBQ0MsT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDMUMsQ0FBQzs7OztJQUNELGdDQUFROzs7SUFBUjtRQUNDLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUM7Ozs7SUFDRCxnQ0FBUTs7O0lBQVI7UUFDQyxPQUFPLElBQUksQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxDQUFDOzs7O0lBQ0QsNkJBQUs7OztJQUFMO1FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNuQixDQUFDOzs7Ozs7SUFDTywrQkFBTzs7Ozs7SUFBZixVQUFnQixDQUFPOztZQUNoQixxQkFBcUIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxDQUFDOzs7WUFDckQsSUFBSSxHQUFHLHFCQUFxQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHOztZQUM3QyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7O1lBSTdELGFBQWEsR0FBRyxJQUFJLElBQUksQ0FDN0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUNmLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFDWixDQUFDLENBQUMsT0FBTyxFQUFFLEVBQ1gsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUNaLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFDZCxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQ2QsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUNuQjtRQUNELGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLHFCQUFxQixDQUFDLENBQUM7O1lBQ3ZELEdBQUcsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFFeEQsT0FBTyxHQUFHLEdBQUcsSUFBSSxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ3RGLENBQUM7SUFDRCxzQkFBc0I7Ozs7O0lBQ3RCLCtDQUF1Qjs7Ozs7SUFBdkI7UUFBQSxpQkF1QkM7O1lBdEJNLEdBQUcsR0FBMkIsRUFBRTtRQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Ozs7UUFBQyxVQUFBLEdBQUc7WUFDdEIsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNqQixLQUFLLGlCQUFpQixDQUFDLEtBQUs7b0JBQzNCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDL0QsTUFBTTtnQkFDUCxLQUFLLGlCQUFpQixDQUFDLEdBQUc7b0JBQ3pCLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2pFLE1BQU07Z0JBQ1AsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJO29CQUMxQixJQUFJLEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7d0JBQ3ZDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDM0U7eUJBQU07d0JBQ04sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7cUJBQ3JCO29CQUNELE1BQU07Z0JBQ1A7b0JBQ0MsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUNuRCxNQUFNO2FBQ1A7UUFDRixDQUFDLEVBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQzs7OztJQUNELDRCQUFJOzs7SUFBSjtRQUFBLGlCQTJDQztRQTFDQSxVQUFVO1FBQ1YsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLHdCQUFRLElBQUksQ0FBQyxVQUFVLEVBQUssSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUUsQ0FBQztTQUM1RTthQUFNO1lBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRztnQkFDYixJQUFJLHVCQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFLLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFFO2dCQUNoRSxLQUFLLHVCQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFFO2FBQy9CLENBQUM7U0FDRjs7WUFDSyxPQUFPOzs7O1FBQUcsVUFBQyxJQUFxQjtZQUNyQyxVQUFVO1lBQ1YsSUFBSSxLQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN2QixLQUFJLENBQUMsVUFBVSx3QkFBUSxLQUFJLENBQUMsVUFBVSxFQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFFLENBQUM7YUFDdkU7aUJBQU07Z0JBQ04sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDeEIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLHdCQUFRLEtBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFFLENBQUM7b0JBQ2hFLEtBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2lCQUN0QzthQUNEO1lBQ0QsS0FBSSxDQUFDLFlBQVk7aUJBQ2YsSUFBSSxDQUFDLEtBQUksQ0FBQyxPQUFPLEVBQUUsbUJBQUE7Z0JBQ25CLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixPQUFPLEVBQUUsS0FBSSxDQUFDLE9BQU87Z0JBQ3JCLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQzNCLGFBQWEsRUFBRSxLQUFJLENBQUMsVUFBVTtnQkFDOUIsU0FBUyxFQUFFLEtBQUksQ0FBQyxNQUFNO2FBQ3RCLEVBQXNCLENBQUM7aUJBQ3ZCLFNBQVM7Ozs7WUFBQyxVQUFBLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNULEtBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2xCLE9BQU87aUJBQ1A7Z0JBQ0QsS0FBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxDQUFDLEVBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVM7Ozs7WUFBQyxVQUFBLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUMsRUFBQyxDQUFDO1NBQ0g7YUFBTTtZQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNkO0lBQ0YsQ0FBQzs7OztJQUNELDhCQUFNOzs7SUFBTjtRQUFBLGlCQVFDO1FBUEEsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsVUFBQSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDVCxLQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQixPQUFPO2FBQ1A7WUFDRCxLQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQzs7OztJQUNELDZCQUFLOzs7SUFBTDtRQUFBLGlCQWtDQztRQWpDQSxJQUFJLENBQUMsZ0JBQWdCO2FBQ25CLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNqRixTQUFTOzs7O1FBQUMsVUFBQSxDQUFDOztnQkFDTCxTQUFTLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFOztnQkFFbEQsSUFBSSxFQUFFLENBQUM7YUFDUCxDQUFDO1lBRUYsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVM7Ozs7WUFBQyxVQUFDLE1BQWlDO2dCQUNuRSxJQUFJLE1BQU0sRUFBRTtvQkFDWCxLQUFJLENBQUMsZ0JBQWdCO3lCQUNuQixTQUFTLENBQUM7d0JBQ1YsT0FBTyxFQUFFLEtBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUk7d0JBQ2xDLFNBQVMsRUFBRSxLQUFJLENBQUMsYUFBYTt3QkFDN0IsS0FBSyxFQUFFLE1BQU07cUJBQ2IsQ0FBQzt5QkFDRCxTQUFTOzs7O29CQUFDLFVBQUEsTUFBTTt3QkFDaEIsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFOzRCQUNkLEtBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0NBQ2xDLGtCQUFrQixFQUFFLE9BQU87Z0NBQzNCLGdCQUFnQixFQUFFLFFBQVE7Z0NBQzFCLFFBQVEsRUFBRSxJQUFJOzZCQUNkLENBQUMsQ0FBQzt5QkFDSDs2QkFBTTs0QkFDTixLQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtnQ0FDdEMsa0JBQWtCLEVBQUUsT0FBTztnQ0FDM0IsZ0JBQWdCLEVBQUUsUUFBUTs2QkFDMUIsQ0FBQyxDQUFDO3lCQUNIO29CQUNGLENBQUMsRUFBQyxDQUFDO2lCQUNKO1lBQ0YsQ0FBQyxFQUFDLENBQUM7UUFDSixDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7O2dCQWxRRCxTQUFTLFNBQUM7b0JBQ1YsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLDJpRUFBb0M7O2lCQUVwQzs7OztnQkF0QkEsbUJBQW1CO2dCQUxuQixtQkFBbUI7Z0JBV1gsV0FBVztnQkFiWCxTQUFTO2dCQWNULHdCQUF3QjtnQkFkYixXQUFXOzs7K0JBK0I3QixLQUFLO3VCQUNMLE1BQU07O0lBNFBSLG9CQUFDO0NBQUEsQUFuUUQsSUFtUUM7U0E5UFksYUFBYTs7O0lBQ3pCLHFDQUE2RTs7SUFDN0UsNkJBQW9DOztJQUNwQyxnQ0FBNkI7Ozs7O0lBQzdCLGdDQUF3Qjs7Ozs7SUFDeEIsZ0NBQTZCOztJQUM3QixtQ0FBMkI7O0lBQzNCLHFDQUF5Qzs7SUFDekMsaUNBQTJDOztJQUMzQywrQkFBd0I7Ozs7O0lBQ3hCLHNDQUE4Qjs7Ozs7SUFDOUIsc0NBQThCOztJQUM5QixrQ0FBNkI7O0lBQzdCLG1DQUErQzs7SUFDL0MsK0JBQXNCOztJQUN0Qiw4QkFBcUI7O0lBRXBCLDZCQUFnQzs7Ozs7SUFDaEMscUNBQXlDOzs7OztJQUN6Qyw2QkFBeUI7O0lBQ3pCLCtCQUF3Qjs7Ozs7SUFDeEIseUNBQWtEOzs7OztJQUNsRCxpQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnO1xyXG5pbXBvcnQge1xyXG5cdEJpbGxCYWNrZmFjZVNlcnZpY2UsXHJcblx0QmlsbE9wZXJhdGUsXHJcblx0RWxlbWVudFJvdXRlLFxyXG5cdElCaWxsUG9zdEV2ZW50Qm9keSxcclxuXHRJRmllbGQsXHJcblx0Um91dGVFbGVtZW50U2VydmljZSxcclxuXHRJVGFibGVDaGVja1Jlc3VsdCxcclxuXHRCaWxsRmllbGREYXRhVHlwZVxyXG59IGZyb20gJ2Rid2ViLWNvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRhYnNTZXJ2aWNlIH0gZnJvbSAnLi4vaG9tZS90YWJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCaWxsQ2xvbmVCYWNrZmFjZVNlcnZpY2UgfSBmcm9tICcuL2JpbGwtY2xvbmUtYmFja2ZhY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENsb25lQ29tcG9uZW50IH0gZnJvbSAnLi9jbG9uZS9jbG9uZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFcnJvck1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL2Vycm9yLW1lc3NhZ2UvZXJyb3ItbWVzc2FnZS5jb21wb25lbnQnO1xyXG5pbnRlcmZhY2UgUmVjb3JkIHtcclxuXHRNYWluOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG5cdENoaWxkPzogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10gfTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEJlZm9yZVNhdmVQYXJhbSB7XHJcblx0cmVjb3JkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgUmVjb3JkO1xyXG5cdHRhZz86IGFueTtcclxufVxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2NvbW1vbi1iaWxsJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vYmlsbC5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vYmlsbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCaWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcclxuXHRASW5wdXQoKSBvbkJlZm9yZVNhdmU6IChzZWxmdDogQmlsbENvbXBvbmVudCkgPT4gT2JzZXJ2YWJsZTxCZWZvcmVTYXZlUGFyYW0+O1xyXG5cdEBPdXRwdXQoKSBpbml0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cdHB1YmxpYyBlbGVtZW50OiBFbGVtZW50Um91dGU7XHJcblx0cHJpdmF0ZSBvbGREYXRhOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBvcGVyYXRlOiBCaWxsT3BlcmF0ZTtcclxuXHRwdWJsaWMgYWxsb3dDbG9uZTogYm9vbGVhbjtcclxuXHRwdWJsaWMgY2hlY2tSZXN1bHRzOiBJVGFibGVDaGVja1Jlc3VsdFtdO1xyXG5cdHB1YmxpYyBmaWVsZE1hcDogeyBba2V5OiBzdHJpbmddOiBJRmllbGQgfTtcclxuXHRwdWJsaWMgZmllbGRzOiBJRmllbGRbXTsgLy8g6L+Z6YeM55qETmFtZeS+neaNrnR5cGVzdHJ1Y3TmnaVcclxuXHRwcml2YXRlIHVzZVR5cGVSZWNvcmQgPSBmYWxzZTtcclxuXHRwcml2YXRlIHNpZ25LZXlWYWx1ZXM6IHN0cmluZztcclxuXHRwdWJsaWMgZm9ybUdyb3VwPzogRm9ybUdyb3VwO1xyXG5cdHB1YmxpYyB0eXBlUmVjb3JkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcblx0cHVibGljIHJlY29yZDogUmVjb3JkO1xyXG5cdHB1YmxpYyBlcnJvcjogc3RyaW5nO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIHJlbGU6IFJvdXRlRWxlbWVudFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGJpbGxCYWNrZmFjZTogQmlsbEJhY2tmYWNlU2VydmljZSxcclxuXHRcdHByaXZhdGUgdGFiczogVGFic1NlcnZpY2UsXHJcblx0XHRwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcblx0XHRwcml2YXRlIGJpbGxDbG9uZVNlcnZpY2U6IEJpbGxDbG9uZUJhY2tmYWNlU2VydmljZSxcclxuXHRcdHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyXHJcblx0KSB7XHJcblx0XHR0aGlzLnJlbGUuY3VycmVudEVsZW1lbnQuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHR0aGlzLmVsZW1lbnQgPSB2O1xyXG5cdFx0XHR0aGlzLmJpbGxCYWNrZmFjZS5nZXQodikuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdHZ2ID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuY2hlY2tSZXN1bHRzID0gdnYuQ2hlY2tSZXN1bHRzO1xyXG5cdFx0XHRcdFx0dGhpcy5vbGREYXRhID0gdnYuRW5jb2RlRGF0YTtcclxuXHRcdFx0XHRcdHRoaXMub3BlcmF0ZSA9IHZ2Lk9wZXJhdGU7XHJcblx0XHRcdFx0XHR0aGlzLmFsbG93Q2xvbmUgPSB2di5BbGxvd0Nsb25lO1xyXG5cdFx0XHRcdFx0dGhpcy5maWVsZHMgPSB2di5GaWVsZHM7XHJcblx0XHRcdFx0XHR0aGlzLnR5cGVSZWNvcmQgPSB2di5UeXBlUmVjb3JkO1xyXG5cdFx0XHRcdFx0dGhpcy5yZWNvcmQgPSB2di5SZWNvcmQ7XHJcblx0XHRcdFx0XHR0aGlzLnNpZ25LZXlWYWx1ZXMgPSB2di5TaWduS2V5VmFsdWVzO1xyXG5cdFx0XHRcdFx0dGhpcy51c2VUeXBlUmVjb3JkID0gdnYuVHlwZVJlY29yZCAhPT0gdW5kZWZpbmVkICYmIHZ2LlR5cGVSZWNvcmQgIT09IG51bGw7XHJcblx0XHRcdFx0XHQvLyDlr7nkuLvooajlrZfmrrXnmoTmmKDlsIRcclxuXHRcdFx0XHRcdHRoaXMuZmllbGRNYXAgPSB2di5GaWVsZHMucmVkdWNlKChyZXN1bHQsIGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmVzdWx0W2l0ZW0uTmFtZV0gPSBpdGVtO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHRcdFx0fSwge30pO1xyXG5cdFx0XHRcdFx0Ly8g5Y+q5bu656uL5Li76KGo55qEZm9ybWdyb3VwXHJcblx0XHRcdFx0XHRpZiAodGhpcy51c2VUeXBlUmVjb3JkKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZpZWxkcy5yZWR1Y2UoKHJlc3VsdCwgZmxkKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZmxkLlR5cGUgPT09IEJpbGxGaWVsZERhdGFUeXBlLkRBVEUgJiYgdGhpcy50eXBlUmVjb3JkW2ZsZC5OYW1lXSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRbZmxkLk5hbWVdID0gbmV3IEZvcm1Db250cm9sKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdGhpcy5maXhTaG93RGF0ZSh0aGlzLnR5cGVSZWNvcmRbZmxkLk5hbWVdIGFzIHN0cmluZyksIC8vIOWOu+aOieaXtuWMulxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkOiBmbGQuUmVhZG9ubHlcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHRbZmxkLk5hbWVdID0gbmV3IEZvcm1Db250cm9sKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogdGhpcy50eXBlUmVjb3JkW2ZsZC5OYW1lXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZDogZmxkLlJlYWRvbmx5XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHR9LCB7fSlcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZpZWxkcy5yZWR1Y2UoKHJlc3VsdCwgZmxkKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoZmxkLlR5cGUgPT09IEJpbGxGaWVsZERhdGFUeXBlLkRBVEUgJiYgdGhpcy5yZWNvcmQuTWFpbltmbGQuTmFtZV0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzdWx0W2ZsZC5OYW1lXSA9IG5ldyBGb3JtQ29udHJvbCh7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHRoaXMuZml4U2hvd0RhdGUodGhpcy5yZWNvcmQuTWFpbltmbGQuTmFtZV0gYXMgc3RyaW5nKSwgLy8g5Y675o6J5pe25Yy6XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ6IGZsZC5SZWFkb25seVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdFtmbGQuTmFtZV0gPSBuZXcgRm9ybUNvbnRyb2woe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiB0aGlzLnJlY29yZC5NYWluW2ZsZC5OYW1lXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkaXNhYmxlZDogZmxkLlJlYWRvbmx5XHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0XHRcdFx0XHR9LCB7fSlcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuaW5pdC5lbWl0KCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5lcnJvciA9IGVyci5lcnJvci5FcnJvcjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBmaXhTaG93RGF0ZShkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0aWYgKGQpIHtcclxuXHRcdFx0cmV0dXJuIGQuc3Vic3RyKDAsIDE2KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBkO1xyXG5cdH1cclxuXHRuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7fVxyXG5cdHNob3dFcnJvck1lc3NhZ2UobWVzOiBzdHJpbmcpOiB2b2lkIHtcclxuXHRcdHRoaXMuZGlhbG9nLm9wZW4oRXJyb3JNZXNzYWdlQ29tcG9uZW50LCB7XHJcblx0XHRcdC8vIHdpZHRoOiAnNDUwcHgnLFxyXG5cdFx0XHRkYXRhOiB7IG1lc3NhZ2U6IG1lcyB9LFxyXG5cdFx0XHRhdXRvRm9jdXM6IGZhbHNlXHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuXHRcdC8vIFx0Y29uc29sZS5sb2coJ1RoZSBkaWFsb2cgd2FzIGNsb3NlZCcpO1xyXG5cdFx0Ly8gfSk7XHJcblx0fVxyXG5cdG5nT25Jbml0KCkge31cclxuXHRpc0FkZCgpIHtcclxuXHRcdHJldHVybiB0aGlzLm9wZXJhdGUgPT09IEJpbGxPcGVyYXRlLkFkZDtcclxuXHR9XHJcblx0aXNFZGl0KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMub3BlcmF0ZSA9PT0gQmlsbE9wZXJhdGUuRWRpdDtcclxuXHR9XHJcblx0aXNEZWxldGUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcGVyYXRlID09PSBCaWxsT3BlcmF0ZS5EZWxldGU7XHJcblx0fVxyXG5cdGlzQnJvd3NlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMub3BlcmF0ZSA9PT0gQmlsbE9wZXJhdGUuQnJvd3NlO1xyXG5cdH1cclxuXHRjbG9zZSgpIHtcclxuXHRcdHRoaXMudGFicy5jbG9zZSgpO1xyXG5cdH1cclxuXHRwcml2YXRlIGZpeERhdGUoZDogRGF0ZSkge1xyXG5cdFx0Y29uc3QgdGltZXpvbmVPZmZzZXRJbkhvdXJzID0gLShkLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MCk7IC8vIFVUQyBtaW51cyBsb2NhbCB0aW1lXHJcblx0XHRjb25zdCBzaWduID0gdGltZXpvbmVPZmZzZXRJbkhvdXJzID49IDAgPyAnKycgOiAnLSc7XHJcblx0XHRjb25zdCBsZWFkaW5nWmVybyA9IE1hdGguYWJzKHRpbWV6b25lT2Zmc2V0SW5Ib3VycykgPCAxMCA/ICcwJyA6ICcnO1xyXG5cclxuXHRcdC8vIEl0J3MgYSBiaXQgdW5mb3J0dW5hdGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnN0cnVjdCBhIG5ldyBEYXRlIGluc3RhbmNlXHJcblx0XHQvLyAod2UgZG9uJ3Qgd2FudCBfdGhpc18gRGF0ZSBpbnN0YW5jZSB0byBiZSBtb2RpZmllZClcclxuXHRcdGNvbnN0IGNvcnJlY3RlZERhdGUgPSBuZXcgRGF0ZShcclxuXHRcdFx0ZC5nZXRGdWxsWWVhcigpLFxyXG5cdFx0XHRkLmdldE1vbnRoKCksXHJcblx0XHRcdGQuZ2V0RGF0ZSgpLFxyXG5cdFx0XHRkLmdldEhvdXJzKCksXHJcblx0XHRcdGQuZ2V0TWludXRlcygpLFxyXG5cdFx0XHRkLmdldFNlY29uZHMoKSxcclxuXHRcdFx0ZC5nZXRNaWxsaXNlY29uZHMoKVxyXG5cdFx0KTtcclxuXHRcdGNvcnJlY3RlZERhdGUuc2V0SG91cnMoZC5nZXRIb3VycygpICsgdGltZXpvbmVPZmZzZXRJbkhvdXJzKTtcclxuXHRcdGNvbnN0IGlzbyA9IGNvcnJlY3RlZERhdGUudG9JU09TdHJpbmcoKS5yZXBsYWNlKCdaJywgJycpO1xyXG5cclxuXHRcdHJldHVybiBpc28gKyBzaWduICsgbGVhZGluZ1plcm8gKyBNYXRoLmFicyh0aW1lem9uZU9mZnNldEluSG91cnMpLnRvU3RyaW5nKCkgKyAnOjAwJztcclxuXHR9XHJcblx0Ly8g6L+U5ZueZm9ybWdyb3Vw55qE6L2s5o2i5aW957G75Z6L55qE5YC8XHJcblx0Z2V0Rm9ybUdyb3VwVmFsdWVBc1R5cGUoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XHJcblx0XHRjb25zdCByZXY6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHRcdHRoaXMuZmllbGRzLmZvckVhY2goZmxkID0+IHtcclxuXHRcdFx0c3dpdGNoIChmbGQuVHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgQmlsbEZpZWxkRGF0YVR5cGUuRkxPQVQ6XHJcblx0XHRcdFx0XHRyZXZbZmxkLk5hbWVdID0gcGFyc2VGbG9hdCh0aGlzLmZvcm1Hcm91cC5nZXQoZmxkLk5hbWUpLnZhbHVlKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgQmlsbEZpZWxkRGF0YVR5cGUuSU5UOlxyXG5cdFx0XHRcdFx0cmV2W2ZsZC5OYW1lXSA9IHBhcnNlSW50KHRoaXMuZm9ybUdyb3VwLmdldChmbGQuTmFtZSkudmFsdWUsIDEwKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgQmlsbEZpZWxkRGF0YVR5cGUuREFURTpcclxuXHRcdFx0XHRcdGlmICh0aGlzLmZvcm1Hcm91cC5nZXQoZmxkLk5hbWUpLnZhbHVlKSB7XHJcblx0XHRcdFx0XHRcdHJldltmbGQuTmFtZV0gPSB0aGlzLmZpeERhdGUobmV3IERhdGUodGhpcy5mb3JtR3JvdXAuZ2V0KGZsZC5OYW1lKS52YWx1ZSkpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0cmV2W2ZsZC5OYW1lXSA9IG51bGw7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0cmV2W2ZsZC5OYW1lXSA9IHRoaXMuZm9ybUdyb3VwLmdldChmbGQuTmFtZSkudmFsdWU7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gcmV2O1xyXG5cdH1cclxuXHRzYXZlKCkge1xyXG5cdFx0Ly8g5ZCI5bm25L+u5pS555qE5pWw5o2uXHJcblx0XHRpZiAodGhpcy51c2VUeXBlUmVjb3JkKSB7XHJcblx0XHRcdHRoaXMudHlwZVJlY29yZCA9IHsgLi4udGhpcy50eXBlUmVjb3JkLCAuLi50aGlzLmdldEZvcm1Hcm91cFZhbHVlQXNUeXBlKCkgfTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMucmVjb3JkID0ge1xyXG5cdFx0XHRcdE1haW46IHsgLi4udGhpcy5yZWNvcmQuTWFpbiwgLi4udGhpcy5nZXRGb3JtR3JvdXBWYWx1ZUFzVHlwZSgpIH0sXHJcblx0XHRcdFx0Q2hpbGQ6IHsgLi4udGhpcy5yZWNvcmQuQ2hpbGQgfVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcHJvY2VzcyA9IChkYXRhOiBCZWZvcmVTYXZlUGFyYW0pID0+IHtcclxuXHRcdFx0Ly8g5ZCI5bm25L+u5pS555qE5pWw5o2uXHJcblx0XHRcdGlmICh0aGlzLnVzZVR5cGVSZWNvcmQpIHtcclxuXHRcdFx0XHR0aGlzLnR5cGVSZWNvcmQgPSB7IC4uLnRoaXMudHlwZVJlY29yZCwgLi4uZGF0YSA/IGRhdGEucmVjb3JkIDogbnVsbCB9O1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmIChkYXRhICYmIGRhdGEucmVjb3JkKSB7XHJcblx0XHRcdFx0XHR0aGlzLnJlY29yZC5NYWluID0geyAuLi50aGlzLnJlY29yZC5NYWluLCAuLi5kYXRhLnJlY29yZC5NYWluIH07XHJcblx0XHRcdFx0XHR0aGlzLnJlY29yZC5DaGlsZCA9IGRhdGEucmVjb3JkLkNoaWxkO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmJpbGxCYWNrZmFjZVxyXG5cdFx0XHRcdC5wb3N0KHRoaXMuZWxlbWVudCwge1xyXG5cdFx0XHRcdFx0Q2hlY2tPbmx5OiBmYWxzZSxcclxuXHRcdFx0XHRcdE9sZERhdGE6IHRoaXMub2xkRGF0YSxcclxuXHRcdFx0XHRcdFRhZzogZGF0YSA/IGRhdGEudGFnIDogbnVsbCxcclxuXHRcdFx0XHRcdE5ld1R5cGVSZWNvcmQ6IHRoaXMudHlwZVJlY29yZCxcclxuXHRcdFx0XHRcdE5ld1JlY29yZDogdGhpcy5yZWNvcmRcclxuXHRcdFx0XHR9IGFzIElCaWxsUG9zdEV2ZW50Qm9keSlcclxuXHRcdFx0XHQuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHYuT2spIHtcclxuXHRcdFx0XHRcdFx0dGhpcy50YWJzLmNsb3NlKCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuc2hvd0Vycm9yTWVzc2FnZSh2LkVycm9yKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH07XHJcblx0XHRpZiAodGhpcy5vbkJlZm9yZVNhdmUpIHtcclxuXHRcdFx0dGhpcy5vbkJlZm9yZVNhdmUodGhpcykuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdHByb2Nlc3Modik7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cHJvY2VzcyhudWxsKTtcclxuXHRcdH1cclxuXHR9XHJcblx0ZGVsZXRlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmlsbEJhY2tmYWNlLmRlbGV0ZSh0aGlzLmVsZW1lbnQsIHRoaXMub2xkRGF0YSkuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRpZiAodi5Paykge1xyXG5cdFx0XHRcdHRoaXMudGFicy5jbG9zZSgpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnNob3dFcnJvck1lc3NhZ2Uodi5FcnJvcik7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0Y2xvbmUoKSB7XHJcblx0XHR0aGlzLmJpbGxDbG9uZVNlcnZpY2VcclxuXHRcdFx0LmdldENsb25lUEsoeyBPbGRTaWduUEs6IHRoaXMuc2lnbktleVZhbHVlcywgRWxlTmFtZTogdGhpcy5lbGVtZW50LmVsZW1lbnQuTmFtZSB9KVxyXG5cdFx0XHQuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ2xvbmVDb21wb25lbnQsIHtcclxuXHRcdFx0XHRcdC8vIHdpZHRoOiAnNDUwcHgnLFxyXG5cdFx0XHRcdFx0ZGF0YTogdlxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHJlc3VsdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmJpbGxDbG9uZVNlcnZpY2VcclxuXHRcdFx0XHRcdFx0XHQuYmlsbENsb25lKHtcclxuXHRcdFx0XHRcdFx0XHRcdEVsZU5hbWU6IHRoaXMuZWxlbWVudC5lbGVtZW50Lk5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRPbGRTaWduUEs6IHRoaXMuc2lnbktleVZhbHVlcyxcclxuXHRcdFx0XHRcdFx0XHRcdE5ld1BLOiByZXN1bHRcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdC5zdWJzY3JpYmUoYXBpcmV2ID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChhcGlyZXYuT2spIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zbmFja0Jhci5vcGVuKCfmiJDlip/lrozmiJDlhYvpmoYnLCAn5YWz6ZetJywge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGhvcml6b250YWxQb3NpdGlvbjogJ3JpZ2h0JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2ZXJ0aWNhbFBvc2l0aW9uOiAnYm90dG9tJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogNTAwMFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc25hY2tCYXIub3BlbihhcGlyZXYuRXJyb3IsICflhbPpl60nLCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aG9yaXpvbnRhbFBvc2l0aW9uOiAncmlnaHQnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZlcnRpY2FsUG9zaXRpb246ICdib3R0b20nXHJcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19