dbweb-common
Version:
用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上
480 lines • 34.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { HttpErrorResponse } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { MatSnackBar } from '@angular/material';
import { IsDuplicatePKError } from 'dbweb-core';
import { of, Subject } from 'rxjs';
import { catchError, map, tap } from 'rxjs/operators';
import { Label } from '../../../services/eleview/types/label';
import { NodeTypeEnum } from '../../../services/eleview/types/model';
import { Node } from '../../../services/eleview/types/node';
var EditLabel = /** @class */ (function () {
function EditLabel(svr, snackBar) {
this.svr = svr;
this.snackBar = snackBar;
this.titleInput = true;
this.isAdd = true;
this.modify = false;
}
/**
* @param {?} categoryID
* @return {?}
*/
EditLabel.prototype.add = /**
* @param {?} categoryID
* @return {?}
*/
function (categoryID) {
this.isAdd = true;
this.titleInput = true;
this.CategoryID = categoryID;
this.Name = '新的标签';
this.title = this.Name;
this.Conts = Node.fromInterface({ NodeType: NodeTypeEnum.unknow });
};
/**
* @return {?}
*/
EditLabel.prototype.done = /**
* @return {?}
*/
function () {
if (!this.title || this.title.length === 0) {
alert('不能输入空的名称');
return false;
}
if (!this.isAdd && this.title !== this.Name) {
this.modify = true;
}
this.Name = this.title;
this.titleInput = false;
return true;
};
/**
* @return {?}
*/
EditLabel.prototype.edit = /**
* @return {?}
*/
function () {
this.title = this.Name;
this.titleInput = true;
};
/**
* @return {?}
*/
EditLabel.prototype.editCancel = /**
* @return {?}
*/
function () {
this.titleInput = false;
};
/**
* @private
* @param {?} whereString
* @return {?}
*/
EditLabel.prototype.processSave = /**
* @private
* @param {?} whereString
* @return {?}
*/
function (whereString) {
var _this = this;
if (this.isAdd) {
return this.svr.backface
.addLabel({
CategoryID: this.CategoryID,
Name: this.Name,
Conts: whereString,
PlainText: this.PlainText
})
.pipe(map((/**
* @param {?} lbl
* @return {?}
*/
function (lbl) {
/** @type {?} */
var rev = Label.fromInterface(lbl);
/** @type {?} */
var category = _this.svr.categorys.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === lbl.CategoryID; }));
if (!category.Labels) {
category.Labels = [];
}
category.Labels.push(rev);
return true;
})), catchError((/**
* @param {?} err
* @param {?} caught
* @return {?}
*/
function (err, caught) {
if (err instanceof HttpErrorResponse) {
/** @type {?} */
var derr = IsDuplicatePKError(err.error);
if (derr.Yes) {
_this.snackBar.open('名称重复', '关闭', { duration: 5000 });
}
else {
_this.snackBar.open(err.error, '关闭', { duration: 5000 });
}
}
else {
_this.snackBar.open(err, '关闭', { duration: 5000 });
}
return of(false);
})));
}
else {
return this.svr.backface
.updateLabel({
CategoryID: this.CategoryID,
ID: this.LabelID,
Name: this.Name,
Conts: whereString,
PlainText: this.PlainText
})
.pipe(map((/**
* @param {?} lbl
* @return {?}
*/
function (lbl) {
/** @type {?} */
var rev = _this.svr.categorys
.find((/**
* @param {?} v
* @return {?}
*/
function (v) { return v.ID === lbl.CategoryID; }))
.Labels.find((/**
* @param {?} vv
* @return {?}
*/
function (vv) { return vv.ID === lbl.ID; }));
rev.Name = lbl.Name;
return true;
})));
}
};
/**
* @return {?}
*/
EditLabel.prototype.save = /**
* @return {?}
*/
function () {
var _this = this;
// 如果正在修改名称,则自动进行确认,如果确认失败,则退出处理
if (this.titleInput) {
if (!this.done()) {
return of(false);
}
}
/** @type {?} */
var rev = new Subject();
// 转换node-->string
if (this.Conts && this.Conts.NodeType !== NodeTypeEnum.unknow) {
this.svr.backface.nodeToString(this.Conts.toInterface()).subscribe((/**
* @param {?} whereString
* @return {?}
*/
function (whereString) {
_this.processSave(whereString).subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
rev.next(v);
}));
}));
}
else {
return this.processSave('');
}
return rev;
};
return EditLabel;
}());
export { EditLabel };
if (false) {
/** @type {?} */
EditLabel.prototype.CategoryID;
/** @type {?} */
EditLabel.prototype.LabelID;
/** @type {?} */
EditLabel.prototype.Name;
/** @type {?} */
EditLabel.prototype.Conts;
/** @type {?} */
EditLabel.prototype.PlainText;
/** @type {?} */
EditLabel.prototype.titleInput;
/** @type {?} */
EditLabel.prototype.isAdd;
/** @type {?} */
EditLabel.prototype.title;
/** @type {?} */
EditLabel.prototype.readonly;
/** @type {?} */
EditLabel.prototype.modify;
/**
* @type {?}
* @private
*/
EditLabel.prototype.svr;
/**
* @type {?}
* @private
*/
EditLabel.prototype.snackBar;
}
var LabelManagerService = /** @class */ (function () {
function LabelManagerService(snackBar) {
this.snackBar = snackBar;
this.editLabel = new EditLabel(this, this.snackBar);
}
/**
* @param {?} CategoryID
* @param {?} LabelID
* @return {?}
*/
LabelManagerService.prototype.removeLabel = /**
* @param {?} CategoryID
* @param {?} LabelID
* @return {?}
*/
function (CategoryID, LabelID) {
var _this = this;
return this.backface.removeLabel({ CategoryID: CategoryID, ID: LabelID }).pipe(tap((/**
* @param {?} v
* @return {?}
*/
function (v) {
if (v) {
/** @type {?} */
var labels = _this.categorys.find((/**
* @param {?} vv
* @return {?}
*/
function (vv) { return vv.ID === CategoryID; })).Labels;
labels.splice(labels.findIndex((/**
* @param {?} vv
* @return {?}
*/
function (vv) { return vv.ID === LabelID; })), 1);
}
})));
};
/**
* @param {?} id
* @return {?}
*/
LabelManagerService.prototype.removeCategory = /**
* @param {?} id
* @return {?}
*/
function (id) {
var _this = this;
return this.backface.removeCategory(id).pipe(tap((/**
* @param {?} v
* @return {?}
*/
function (v) {
if (v) {
_this.categorys.splice(_this.categorys.findIndex((/**
* @param {?} vv
* @return {?}
*/
function (vv) { return vv.ID === id; })), 1);
_this.categorys.forEach((/**
* @param {?} vv
* @param {?} idx
* @return {?}
*/
function (vv, idx) { return (vv.Position = idx + 1); }));
}
})));
};
/**
* @param {?} param
* @return {?}
*/
LabelManagerService.prototype.addCategory = /**
* @param {?} param
* @return {?}
*/
function (param) {
var _this = this;
return this.backface
.addCategory({
EleName: this.eleName,
Name: param.name,
OwnerBy: this.ownerBy,
BeforeAtID: param.beforeAtID
})
.pipe(tap((/**
* @param {?} v
* @return {?}
*/
function (v) {
// 调整位置并插入
if (param.beforeAtID) {
/** @type {?} */
var idx = _this.categorys.findIndex((/**
* @param {?} vv
* @return {?}
*/
function (vv) { return vv.ID === param.beforeAtID; }));
_this.categorys.splice(idx, 0, v);
}
else {
_this.categorys.push(v);
}
_this.categorys.forEach((/**
* @param {?} vv
* @param {?} idx
* @return {?}
*/
function (vv, idx) { return (vv.Position = idx + 1); }));
})));
};
/**
* @param {?} param
* @return {?}
*/
LabelManagerService.prototype.editCategory = /**
* @param {?} param
* @return {?}
*/
function (param) {
var _this = this;
return this.backface
.updateCategory({
ID: param.id,
Name: param.name,
OwnerBy: this.ownerBy
})
.pipe(tap((/**
* @param {?} v
* @return {?}
*/
function (v) {
_this.categorys.find((/**
* @param {?} vv
* @return {?}
*/
function (vv) { return vv.ID === param.id; })).Name = param.name;
})));
};
/**
* @return {?}
*/
LabelManagerService.prototype.fetchCategoryLabelHis = /**
* @return {?}
*/
function () {
return this.backface.fetchCategoryLabelHis({
EleName: this.eleName,
OwnerBy: this.ownerBy,
Owner: [this.owner]
});
};
/**
* @return {?}
*/
LabelManagerService.prototype.fetchCategories = /**
* @return {?}
*/
function () {
var _this = this;
this.backface
.fetchCategories({ EleName: this.eleName, OwnerBy: this.ownerBy, Owner: this.owner })
.subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
_this.categorys = v;
}));
};
/**
* @param {?} cate
* @param {?} idx
* @return {?}
*/
LabelManagerService.prototype.setCategoryPosition = /**
* @param {?} cate
* @param {?} idx
* @return {?}
*/
function (cate, idx) {
var _this = this;
this.backface.setCategoryPosition({ ID: cate.ID, Position: idx }).subscribe((/**
* @param {?} v
* @return {?}
*/
function (v) {
// 先赋值position
v.forEach((/**
* @param {?} vv
* @return {?}
*/
function (vv) {
/** @type {?} */
var findc = _this.categorys.find((/**
* @param {?} c
* @return {?}
*/
function (c) { return c.ID === vv.ID; }));
if (findc) {
findc.Position = vv.Position;
}
}));
// 再排序
_this.categorys.sort((/**
* @param {?} a
* @param {?} b
* @return {?}
*/
function (a, b) { return a.Position - b.Position; }));
}));
};
LabelManagerService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
LabelManagerService.ctorParameters = function () { return [
{ type: MatSnackBar }
]; };
return LabelManagerService;
}());
export { LabelManagerService };
if (false) {
/** @type {?} */
LabelManagerService.prototype.eleName;
/** @type {?} */
LabelManagerService.prototype.ownerBy;
/** @type {?} */
LabelManagerService.prototype.owner;
/** @type {?} */
LabelManagerService.prototype.categorys;
/** @type {?} */
LabelManagerService.prototype.editLabel;
/** @type {?} */
LabelManagerService.prototype.allColumnsWithLetter;
/** @type {?} */
LabelManagerService.prototype.backface;
/**
* @type {?}
* @private
*/
LabelManagerService.prototype.snackBar;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFiZWwtbWFuYWdlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvbGFiZWwtbWFuYWdlci9zZXJ2aWNlL2xhYmVsLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUQsT0FBTyxFQUFxQixZQUFZLEVBQWUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNyRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFHNUQ7SUFZQyxtQkFBb0IsR0FBd0IsRUFBVSxRQUFxQjtRQUF2RCxRQUFHLEdBQUgsR0FBRyxDQUFxQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQWE7UUFMM0UsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixVQUFLLEdBQUcsSUFBSSxDQUFDO1FBR2IsV0FBTSxHQUFHLEtBQUssQ0FBQztJQUMrRCxDQUFDOzs7OztJQUMvRSx1QkFBRzs7OztJQUFILFVBQUksVUFBa0I7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVB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O1lBQzVFLGNBQWM7WUFDZCxDQUFDLENBQUMsT0FBTzs7OztZQUFDLFVBQUEsRUFBRTs7b0JBQ0wsS0FBSyxHQUFHLEtBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTs7OztnQkFBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBZCxDQUFjLEVBQUM7Z0JBQ3RELElBQUksS0FBSyxFQUFFO29CQUNWLEtBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztpQkFDN0I7WUFDRixDQUFDLEVBQUMsQ0FBQztZQUNILE1BQU07WUFDTixLQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7Ozs7O1lBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUF2QixDQUF1QixFQUFDLENBQUM7UUFDeEQsQ0FBQyxFQUFDLENBQUM7SUFDSixDQUFDOztnQkE1RkQsVUFBVTs7OztnQkE5SEYsV0FBVzs7SUEyTnBCLDBCQUFDO0NBQUEsQUE3RkQsSUE2RkM7U0E1RlksbUJBQW1COzs7SUFFL0Isc0NBQWdCOztJQUNoQixzQ0FBcUI7O0lBQ3JCLG9DQUFjOztJQUVkLHdDQUFzQjs7SUFDdEIsd0NBQStDOztJQUMvQyxtREFBd0M7O0lBQ3hDLHVDQUFtQjs7Ozs7SUFDUCx1Q0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcclxuaW1wb3J0IHsgSXNEdXBsaWNhdGVQS0Vycm9yIH0gZnJvbSAnZGJ3ZWItY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFwLCBjb25jYXRNYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvY2F0ZWdvcnknO1xyXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvbGFiZWwnO1xyXG5pbXBvcnQgeyBDb2x1bW5zV2l0aExldHRlciwgTm9kZVR5cGVFbnVtLCBPd25lckJ5RW51bSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VsZXZpZXcvdHlwZXMvbW9kZWwnO1xyXG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9ub2RlJztcclxuaW1wb3J0IHsgQmFja0ZhY2UgfSBmcm9tICcuL2JhY2tmYWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0TGFiZWwge1xyXG5cdENhdGVnb3J5SUQ6IHN0cmluZztcclxuXHRMYWJlbElEOiBzdHJpbmc7XHJcblx0TmFtZTogc3RyaW5nO1xyXG5cdENvbnRzPzogTm9kZTtcclxuXHRQbGFpblRleHQ/OiBzdHJpbmc7XHJcblxyXG5cdHRpdGxlSW5wdXQgPSB0cnVlO1xyXG5cdGlzQWRkID0gdHJ1ZTtcclxuXHR0aXRsZT86IHN0cmluZztcclxuXHRyZWFkb25seT86IGJvb2xlYW47XHJcblx0bW9kaWZ5ID0gZmFsc2U7XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBzdnI6IExhYmVsTWFuYWdlclNlcnZpY2UsIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7fVxyXG5cdGFkZChjYXRlZ29yeUlEOiBzdHJpbmcpIHtcclxuXHRcdHRoaXMuaXNBZGQgPSB0cnVlO1xyXG5cdFx0dGhpcy50aXRsZUlucHV0ID0gdHJ1ZTtcclxuXHRcdHRoaXMuQ2F0ZWdvcnlJRCA9IGNhdGVnb3J5SUQ7XHJcblx0XHR0aGlzLk5hbWUgPSAn5paw55qE5qCH562+JztcclxuXHRcdHRoaXMudGl0bGUgPSB0aGlzLk5hbWU7XHJcblx0XHR0aGlzLkNvbnRzID0gTm9kZS5mcm9tSW50ZXJmYWNlKHsgTm9kZVR5cGU6IE5vZGVUeXBlRW51bS51bmtub3cgfSk7XHJcblx0fVxyXG5cdGRvbmUoKSB7XHJcblx0XHRpZiAoIXRoaXMudGl0bGUgfHwgdGhpcy50aXRsZS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0YWxlcnQoJ+S4jeiDvei+k+WFpeepuueahOWQjeensCcpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRpZiAoIXRoaXMuaXNBZGQgJiYgdGhpcy50aXRsZSAhPT0gdGhpcy5OYW1lKSB7XHJcblx0XHRcdHRoaXMubW9kaWZ5ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHRoaXMuTmFtZSA9IHRoaXMudGl0bGU7XHJcblx0XHR0aGlzLnRpdGxlSW5wdXQgPSBmYWxzZTtcclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHRlZGl0KCkge1xyXG5cdFx0dGhpcy50aXRsZSA9IHRoaXMuTmFtZTtcclxuXHRcdHRoaXMudGl0bGVJbnB1dCA9IHRydWU7XHJcblx0fVxyXG5cdGVkaXRDYW5jZWwoKSB7XHJcblx0XHR0aGlzLnRpdGxlSW5wdXQgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcHJvY2Vzc1NhdmUod2hlcmVTdHJpbmc6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG5cdFx0aWYgKHRoaXMuaXNBZGQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuc3ZyLmJhY2tmYWNlXHJcblx0XHRcdFx0LmFkZExhYmVsKHtcclxuXHRcdFx0XHRcdENhdGVnb3J5SUQ6IHRoaXMuQ2F0ZWdvcnlJRCxcclxuXHRcdFx0XHRcdE5hbWU6IHRoaXMuTmFtZSxcclxuXHRcdFx0XHRcdENvbnRzOiB3aGVyZVN0cmluZyxcclxuXHRcdFx0XHRcdFBsYWluVGV4dDogdGhpcy5QbGFpblRleHRcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFx0bWFwKGxibCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldiA9IExhYmVsLmZyb21JbnRlcmZhY2UobGJsKTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgY2F0ZWdvcnkgPSB0aGlzLnN2ci5jYXRlZ29yeXMuZmluZCh2ID0+IHYuSUQgPT09IGxibC5DYXRlZ29yeUlEKTtcclxuXHRcdFx0XHRcdFx0aWYgKCFjYXRlZ29yeS5MYWJlbHMpIHtcclxuXHRcdFx0XHRcdFx0XHRjYXRlZ29yeS5MYWJlbHMgPSBbXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRjYXRlZ29yeS5MYWJlbHMucHVzaChyZXYpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH0pLFxyXG5cdFx0XHRcdFx0Y2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGVyciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGVyciA9IElzRHVwbGljYXRlUEtFcnJvcihlcnIuZXJyb3IpO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChkZXJyLlllcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zbmFja0Jhci5vcGVuKCflkI3np7Dph43lpI0nLCAn5YWz6ZetJywgeyBkdXJhdGlvbjogNTAwMCB9KTtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zbmFja0Jhci5vcGVuKGVyci5lcnJvciwgJ+WFs+mXrScsIHsgZHVyYXRpb246IDUwMDAgfSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc25hY2tCYXIub3BlbihlcnIsICflhbPpl60nLCB7IGR1cmF0aW9uOiA1MDAwIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiBvZihmYWxzZSk7XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5zdnIuYmFja2ZhY2VcclxuXHRcdFx0XHQudXBkYXRlTGFiZWwoe1xyXG5cdFx0XHRcdFx0Q2F0ZWdvcnlJRDogdGhpcy5DYXRlZ29yeUlELFxyXG5cdFx0XHRcdFx0SUQ6IHRoaXMuTGFiZWxJRCxcclxuXHRcdFx0XHRcdE5hbWU6IHRoaXMuTmFtZSxcclxuXHRcdFx0XHRcdENvbnRzOiB3aGVyZVN0cmluZyxcclxuXHRcdFx0XHRcdFBsYWluVGV4dDogdGhpcy5QbGFpblRleHRcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFx0bWFwKGxibCA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHJldiA9IHRoaXMuc3ZyLmNhdGVnb3J5c1xyXG5cdFx0XHRcdFx0XHRcdC5maW5kKHYgPT4gdi5JRCA9PT0gbGJsLkNhdGVnb3J5SUQpXHJcblx0XHRcdFx0XHRcdFx0LkxhYmVscy5maW5kKHZ2ID0+IHZ2LklEID09PSBsYmwuSUQpO1xyXG5cdFx0XHRcdFx0XHRyZXYuTmFtZSA9IGxibC5OYW1lO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblx0c2F2ZSgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuXHRcdC8vIOWmguaenOato+WcqOS/ruaUueWQjeensO+8jOWImeiHquWKqOi/m+ihjOehruiupO+8jOWmguaenOehruiupOWksei0pe+8jOWImemAgOWHuuWkhOeQhlxyXG5cdFx0aWYgKHRoaXMudGl0bGVJbnB1dCkge1xyXG5cdFx0XHRpZiAoIXRoaXMuZG9uZSgpKSB7XHJcblx0XHRcdFx0cmV0dXJuIG9mKGZhbHNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Y29uc3QgcmV2ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcblx0XHQvLyDovazmjaJub2RlLS0+c3RyaW5nXHJcblx0XHRpZiAodGhpcy5Db250cyAmJiB0aGlzLkNvbnRzLk5vZGVUeXBlICE9PSBOb2RlVHlwZUVudW0udW5rbm93KSB7XHJcblx0XHRcdHRoaXMuc3ZyLmJhY2tmYWNlLm5vZGVUb1N0cmluZyh0aGlzLkNvbnRzLnRvSW50ZXJmYWNlKCkpLnN1YnNjcmliZSh3aGVyZVN0cmluZyA9PiB7XHJcblx0XHRcdFx0dGhpcy5wcm9jZXNzU2F2ZSh3aGVyZVN0cmluZykuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdFx0cmV2Lm5leHQodik7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMucHJvY2Vzc1NhdmUoJycpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJldjtcclxuXHR9XHJcbn1cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTGFiZWxNYW5hZ2VyU2VydmljZSB7XHJcblx0Ly8g5Yid5aeL5YyW5pe26K6+572uXHJcblx0ZWxlTmFtZTogc3RyaW5nO1xyXG5cdG93bmVyQnk6IE93bmVyQnlFbnVtO1xyXG5cdG93bmVyOiBzdHJpbmc7XHJcblx0Ly8g5omA5pyJ55qE5qCH562+5pWw5o2uXHJcblx0Y2F0ZWdvcnlzOiBDYXRlZ29yeVtdO1xyXG5cdGVkaXRMYWJlbCA9IG5ldyBFZGl0TGFiZWwodGhpcywgdGhpcy5zbmFja0Jhcik7XHJcblx0YWxsQ29sdW1uc1dpdGhMZXR0ZXI6IENvbHVtbnNXaXRoTGV0dGVyO1xyXG5cdGJhY2tmYWNlOiBCYWNrRmFjZTtcclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0Jhcikge31cclxuXHRyZW1vdmVMYWJlbChDYXRlZ29yeUlEOiBzdHJpbmcsIExhYmVsSUQ6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UucmVtb3ZlTGFiZWwoeyBDYXRlZ29yeUlEOiBDYXRlZ29yeUlELCBJRDogTGFiZWxJRCB9KS5waXBlKFxyXG5cdFx0XHR0YXAodiA9PiB7XHJcblx0XHRcdFx0aWYgKHYpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGxhYmVscyA9IHRoaXMuY2F0ZWdvcnlzLmZpbmQodnYgPT4gdnYuSUQgPT09IENhdGVnb3J5SUQpLkxhYmVscztcclxuXHRcdFx0XHRcdGxhYmVscy5zcGxpY2UobGFiZWxzLmZpbmRJbmRleCh2diA9PiB2di5JRCA9PT0gTGFiZWxJRCksIDEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG5cdHJlbW92ZUNhdGVnb3J5KGlkOiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmJhY2tmYWNlLnJlbW92ZUNhdGVnb3J5KGlkKS5waXBlKFxyXG5cdFx0XHR0YXAodiA9PiB7XHJcblx0XHRcdFx0aWYgKHYpIHtcclxuXHRcdFx0XHRcdHRoaXMuY2F0ZWdvcnlzLnNwbGljZSh0aGlzLmNhdGVnb3J5cy5maW5kSW5kZXgodnYgPT4gdnYuSUQgPT09IGlkKSwgMSk7XHJcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5mb3JFYWNoKCh2diwgaWR4KSA9PiAodnYuUG9zaXRpb24gPSBpZHggKyAxKSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblx0YWRkQ2F0ZWdvcnkocGFyYW06IHsgbmFtZTogc3RyaW5nOyBiZWZvcmVBdElEPzogc3RyaW5nIH0pIHtcclxuXHRcdHJldHVybiB0aGlzLmJhY2tmYWNlXHJcblx0XHRcdC5hZGRDYXRlZ29yeSh7XHJcblx0XHRcdFx0RWxlTmFtZTogdGhpcy5lbGVOYW1lLFxyXG5cdFx0XHRcdE5hbWU6IHBhcmFtLm5hbWUsXHJcblx0XHRcdFx0T3duZXJCeTogdGhpcy5vd25lckJ5LFxyXG5cdFx0XHRcdEJlZm9yZUF0SUQ6IHBhcmFtLmJlZm9yZUF0SURcclxuXHRcdFx0fSlcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0dGFwKHYgPT4ge1xyXG5cdFx0XHRcdFx0Ly8g6LCD5pW05L2N572u5bm25o+S5YWlXHJcblx0XHRcdFx0XHRpZiAocGFyYW0uYmVmb3JlQXRJRCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpZHggPSB0aGlzLmNhdGVnb3J5cy5maW5kSW5kZXgodnYgPT4gdnYuSUQgPT09IHBhcmFtLmJlZm9yZUF0SUQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5zcGxpY2UoaWR4LCAwLCB2KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY2F0ZWdvcnlzLnB1c2godik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5mb3JFYWNoKCh2diwgaWR4KSA9PiAodnYuUG9zaXRpb24gPSBpZHggKyAxKSk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHR9XHJcblx0ZWRpdENhdGVnb3J5KHBhcmFtOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9KSB7XHJcblx0XHRyZXR1cm4gdGhpcy5iYWNrZmFjZVxyXG5cdFx0XHQudXBkYXRlQ2F0ZWdvcnkoe1xyXG5cdFx0XHRcdElEOiBwYXJhbS5pZCxcclxuXHRcdFx0XHROYW1lOiBwYXJhbS5uYW1lLFxyXG5cdFx0XHRcdE93bmVyQnk6IHRoaXMub3duZXJCeVxyXG5cdFx0XHR9KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHR0YXAodiA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmNhdGVnb3J5cy5maW5kKHZ2ID0+IHZ2LklEID09PSBwYXJhbS5pZCkuTmFtZSA9IHBhcmFtLm5hbWU7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHR9XHJcblx0ZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYmFja2ZhY2UuZmV0Y2hDYXRlZ29yeUxhYmVsSGlzKHtcclxuXHRcdFx0RWxlTmFtZTogdGhpcy5lbGVOYW1lLFxyXG5cdFx0XHRPd25lckJ5OiB0aGlzLm93bmVyQnksXHJcblx0XHRcdE93bmVyOiBbdGhpcy5vd25lcl1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHRmZXRjaENhdGVnb3JpZXMoKSB7XHJcblx0XHR0aGlzLmJhY2tmYWNlXHJcblx0XHRcdC5mZXRjaENhdGVnb3JpZXMoeyBFbGVOYW1lOiB0aGlzLmVsZU5hbWUsIE93bmVyQnk6IHRoaXMub3duZXJCeSwgT3duZXI6IHRoaXMub3duZXIgfSlcclxuXHRcdFx0LnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0XHR0aGlzLmNhdGVnb3J5cyA9IHY7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHRzZXRDYXRlZ29yeVBvc2l0aW9uKGNhdGU6IENhdGVnb3J5LCBpZHg6IG51bWJlcikge1xyXG5cdFx0dGhpcy5iYWNrZmFjZS5zZXRDYXRlZ29yeVBvc2l0aW9uKHsgSUQ6IGNhdGUuSUQsIFBvc2l0aW9uOiBpZHggfSkuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHQvLyDlhYjotYvlgLxwb3NpdGlvblxyXG5cdFx0XHR2LmZvckVhY2godnYgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGZpbmRjID0gdGhpcy5jYXRlZ29yeXMuZmluZChjID0+IGMuSUQgPT09IHZ2LklEKTtcclxuXHRcdFx0XHRpZiAoZmluZGMpIHtcclxuXHRcdFx0XHRcdGZpbmRjLlBvc2l0aW9uID0gdnYuUG9zaXRpb247XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0Ly8g5YaN5o6S5bqPXHJcblx0XHRcdHRoaXMuY2F0ZWdvcnlzLnNvcnQoKGEsIGIpID0+IGEuUG9zaXRpb24gLSBiLlBvc2l0aW9uKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iXX0=