@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
921 lines • 63.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: tree-factory.class.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { forEach, isUndefined, map, omitBy, pickBy, reduce, trim, values } from 'lodash-es';
/**
* @record
*/
export function ITreeNodeData() { }
if (false) {
/** @type {?|undefined} */
ITreeNodeData.prototype.id;
/** @type {?|undefined} */
ITreeNodeData.prototype.parentId;
/** @type {?|undefined} */
ITreeNodeData.prototype.title;
/** @type {?|undefined} */
ITreeNodeData.prototype.isOpen;
/** @type {?|undefined} */
ITreeNodeData.prototype.data;
/** @type {?|undefined} */
ITreeNodeData.prototype.isParent;
/** @type {?|undefined} */
ITreeNodeData.prototype.loading;
/** @type {?|undefined} */
ITreeNodeData.prototype.isMatch;
/** @type {?|undefined} */
ITreeNodeData.prototype.isHide;
/** @type {?|undefined} */
ITreeNodeData.prototype.isActive;
/** @type {?|undefined} */
ITreeNodeData.prototype.isChecked;
/** @type {?|undefined} */
ITreeNodeData.prototype.disabled;
/** @type {?|undefined} */
ITreeNodeData.prototype.children;
/* Skipping unhandled member: [prop: string]: any;*/
}
/**
* @record
*/
export function ITreeMap() { }
/**
* @record
*/
export function ITreeItem() { }
if (false) {
/** @type {?} */
ITreeItem.prototype.title;
/** @type {?|undefined} */
ITreeItem.prototype.open;
/** @type {?|undefined} */
ITreeItem.prototype.loading;
/** @type {?|undefined} */
ITreeItem.prototype.isMatch;
/** @type {?|undefined} */
ITreeItem.prototype.items;
/** @type {?|undefined} */
ITreeItem.prototype.isParent;
/** @type {?|undefined} */
ITreeItem.prototype.data;
/** @type {?|undefined} */
ITreeItem.prototype.id;
/** @type {?|undefined} */
ITreeItem.prototype.isHide;
/** @type {?|undefined} */
ITreeItem.prototype.isActive;
/** @type {?|undefined} */
ITreeItem.prototype.isChecked;
/** @type {?|undefined} */
ITreeItem.prototype.halfChecked;
/** @type {?|undefined} */
ITreeItem.prototype.disabled;
/** @type {?|undefined} */
ITreeItem.prototype.disableAdd;
/** @type {?|undefined} */
ITreeItem.prototype.disableEdit;
/** @type {?|undefined} */
ITreeItem.prototype.disableDelete;
/* Skipping unhandled member: [prop: string]: any;*/
}
/**
* @record
*/
export function ITreeInput() { }
if (false) {
/** @type {?} */
ITreeInput.prototype.treeItems;
/** @type {?|undefined} */
ITreeInput.prototype.parentId;
/** @type {?|undefined} */
ITreeInput.prototype.treeNodeChildrenKey;
/** @type {?|undefined} */
ITreeInput.prototype.treeNodeIdKey;
/** @type {?|undefined} */
ITreeInput.prototype.checkboxDisabledKey;
/** @type {?|undefined} */
ITreeInput.prototype.treeNodeTitleKey;
}
var TreeNode = /** @class */ (function () {
function TreeNode(id, parentId, data) {
this.id = id;
this.parentId = parentId;
this.data = data;
}
return TreeNode;
}());
export { TreeNode };
if (false) {
/** @type {?} */
TreeNode.prototype.id;
/** @type {?} */
TreeNode.prototype.parentId;
/** @type {?} */
TreeNode.prototype.data;
}
var TreeFactory = /** @class */ (function () {
function TreeFactory() {
var _this = this;
this._checked = new Set();
this._treeRoot = [];
this.mapTreeItems = (/**
* @template THIS
* @this {THIS}
* @param {?} __0
* @return {THIS}
*/
function (_a) {
var treeItems = _a.treeItems, parentId = _a.parentId, _b = _a.treeNodeChildrenKey, treeNodeChildrenKey = _b === void 0 ? 'items' : _b, _c = _a.treeNodeIdKey, treeNodeIdKey = _c === void 0 ? 'id' : _c, _d = _a.checkboxDisabledKey, checkboxDisabledKey = _d === void 0 ? 'disabled' : _d, _e = _a.treeNodeTitleKey, treeNodeTitleKey = _e === void 0 ? 'title' : _e;
forEach(treeItems, (/**
* @param {?} item
* @return {?}
*/
function (item) {
/** @type {?} */
var node = _this.addNode({
id: item[treeNodeIdKey],
parentId: parentId,
title: item[treeNodeTitleKey],
isOpen: !!item.open,
data: item.data || {},
originItem: item,
isParent: !!item.isParent || !!(item[treeNodeChildrenKey] && item[treeNodeChildrenKey].length > 0),
loading: !!item.loading,
isMatch: !!item.isMatch,
isHide: !!item.isHide,
isChecked: !!item.isChecked,
halfChecked: !!item.halfChecked,
isActive: !!item.isActive,
disabled: !!item[checkboxDisabledKey],
disableAdd: !!item.disableAdd,
disableEdit: !!item.disableEdit,
disableDelete: !!item.disableDelete,
children: []
});
if (!!item.isChecked) {
_this._checked.add(node);
}
_this.mapTreeItems({
treeItems: item[treeNodeChildrenKey] || [], parentId: node.id, treeNodeChildrenKey: treeNodeChildrenKey, treeNodeIdKey: treeNodeIdKey,
checkboxDisabledKey: checkboxDisabledKey, treeNodeTitleKey: treeNodeTitleKey
});
}));
return _this;
});
this.idx = 0;
this.nodes = {};
}
/**
* @return {?}
*/
TreeFactory.create = /**
* @return {?}
*/
function () {
return new TreeFactory();
};
// tree model with items
// tree model with items
/**
* @param {?} __0
* @return {?}
*/
TreeFactory.fromTree =
// tree model with items
/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var treeItems = _a.treeItems, _b = _a.treeNodeChildrenKey, treeNodeChildrenKey = _b === void 0 ? 'items' : _b, _c = _a.treeNodeIdKey, treeNodeIdKey = _c === void 0 ? 'id' : _c, _d = _a.checkboxDisabledKey, checkboxDisabledKey = _d === void 0 ? 'disabled' : _d, _e = _a.treeNodeTitleKey, treeNodeTitleKey = _e === void 0 ? 'title' : _e;
/** @type {?} */
var treeFactory = TreeFactory.create();
treeFactory.mapTreeItems({ treeItems: treeItems, parentId: undefined, treeNodeChildrenKey: treeNodeChildrenKey, treeNodeIdKey: treeNodeIdKey, checkboxDisabledKey: checkboxDisabledKey, treeNodeTitleKey: treeNodeTitleKey });
return treeFactory;
};
/**
* @param {?} __0
* @return {?}
*/
TreeFactory.prototype.addNode = /**
* @param {?} __0
* @return {?}
*/
function (_a) {
var _b;
var id = _a.id, parentId = _a.parentId, data = tslib_1.__rest(_a, ["id", "parentId"]);
if (isUndefined(id)) {
this.idx++;
id = this.idx;
}
/** @type {?} */
var treeNode = new TreeNode(id, parentId, data);
if (this.nodes.hasOwnProperty(treeNode.id)) {
throw new Error("Duplicated id: " + treeNode.id + " detected, please specify unique ids in the tree.");
}
this.nodes = tslib_1.__assign({}, this.nodes, (_b = {}, _b[treeNode.id] = treeNode, _b));
this.addChildNode(this.nodes[parentId], treeNode);
return treeNode;
};
/**
* @param {?} id
* @return {?}
*/
TreeFactory.prototype.editNodeTitle = /**
* @param {?} id
* @return {?}
*/
function (id) {
this.nodes[id].data.editable = true;
};
/**
* @template THIS
* @this {THIS}
* @param {?} id
* @return {THIS}
*/
TreeFactory.prototype.deleteNodeById = /**
* @template THIS
* @this {THIS}
* @param {?} id
* @return {THIS}
*/
function (id) {
var _this = this;
/** @type {?} */
var node = (/** @type {?} */ (this)).nodes[id];
/** @type {?} */
var parentNode = (/** @type {?} */ (this)).nodes[node.parentId];
(/** @type {?} */ (this)).removeChildNode(parentNode, node);
/** @type {?} */
var deleteItems = (/**
* @param {?} nodeId
* @return {?}
*/
function (nodeId) {
/** @type {?} */
var children = (/** @type {?} */ (_this)).getChildrenById(nodeId);
(/** @type {?} */ (_this)).nodes = omitBy((/** @type {?} */ (_this)).nodes, (/**
* @param {?} _node
* @return {?}
*/
function (_node) {
return _node.id === id;
}));
forEach(children, (/**
* @param {?} child
* @return {?}
*/
function (child) {
deleteItems(child.id);
}));
});
deleteItems(id);
if (parentNode && (!parentNode.data.children || !parentNode.data.children.length)) {
parentNode.data.isParent = false;
}
return (/** @type {?} */ (this));
};
/**
* @template THIS
* @this {THIS}
* @param {?} id
* @return {THIS}
*/
TreeFactory.prototype.toggleNodeById = /**
* @template THIS
* @this {THIS}
* @param {?} id
* @return {THIS}
*/
function (id) {
(/** @type {?} */ (this)).nodes[id].data.isOpen = !(/** @type {?} */ (this)).nodes[id].data.isOpen;
return (/** @type {?} */ (this));
};
/**
* @template THIS
* @this {THIS}
* @param {?} id
* @return {THIS}
*/
TreeFactory.prototype.openNodesById = /**
* @template THIS
* @this {THIS}
* @param {?} id
* @return {THIS}
*/
function (id) {
(/** @type {?} */ (this)).nodes[id].data.isOpen = true;
if ((/** @type {?} */ (this)).nodes[id].parentId !== undefined) {
(/** @type {?} */ (this)).openNodesById((/** @type {?} */ (this)).nodes[id].parentId);
}
return (/** @type {?} */ (this));
};
/**
* @template THIS
* @this {THIS}
* @param {?} id
* @param {?=} closeChildren
* @return {THIS}
*/
TreeFactory.prototype.closeNodesById = /**
* @template THIS
* @this {THIS}
* @param {?} id
* @param {?=} closeChildren
* @return {THIS}
*/
function (id, closeChildren) {
var _this = this;
if (closeChildren === void 0) { closeChildren = false; }
(/** @type {?} */ (this)).nodes[id].data.isOpen = false;
if (closeChildren) {
if ((/** @type {?} */ (this)).nodes[id] && (/** @type {?} */ (this)).nodes[id].data.children) {
(/** @type {?} */ (this)).nodes[id].data.children.forEach((/**
* @param {?} node
* @return {?}
*/
function (node) {
(/** @type {?} */ (_this)).closeNodesById(node.id);
}));
}
}
return (/** @type {?} */ (this));
};
/**
* @template THIS
* @this {THIS}
* @param {?} id
* @return {THIS}
*/
TreeFactory.prototype.disabledNodesById = /**
* @template THIS
* @this {THIS}
* @param {?} id
* @return {THIS}
*/
function (id) {
var _this = this;
(/** @type {?} */ (this)).nodes[id].data.disabled = true;
/** @type {?} */
var parentId = (/** @type {?} */ (this)).nodes[id].parentId;
(/** @type {?} */ (this))._disabledParentNodes(parentId);
/** @type {?} */
var disabledNodes = (/**
* @param {?} nodeId
* @return {?}
*/
function (nodeId) {
/** @type {?} */
var children = (/** @type {?} */ (_this)).getChildrenById(nodeId);
if (children.length > 0) {
children.forEach((/**
* @param {?} child
* @return {?}
*/
function (child) {
(/** @type {?} */ (_this)).nodes[child.id].data.disabled = true;
disabledNodes(child.id);
}));
}
});
disabledNodes(id);
return (/** @type {?} */ (this));
};
/**
* @private
* @param {?} parentId
* @return {?}
*/
TreeFactory.prototype._disabledParentNodes = /**
* @private
* @param {?} parentId
* @return {?}
*/
function (parentId) {
/** @type {?} */
var children = this.getChildrenById(parentId);
if (children.length < 1) {
return;
}
/** @type {?} */
var result = reduce(children, (/**
* @param {?} status
* @param {?} child
* @return {?}
*/
function (status, child) {
return status && child.data.disabled;
}), true);
if (this.nodes[parentId]) {
this.nodes[parentId].data.disabled = result;
}
};
/**
* @param {?} id
* @param {?} checked
* @return {?}
*/
TreeFactory.prototype.checkNodesById = /**
* @param {?} id
* @param {?} checked
* @return {?}
*/
function (id, checked) {
this.nodes[id].data.halfChecked = false;
this.nodes[id].data.isChecked = checked;
this.checkParentNodes(this.nodes[id]);
this.checkChildNodes(this.nodes[id], checked);
this.maintainCheckedNodeList(this.nodes[id], checked);
return this.getCheckedNodes();
};
/**
* @private
* @param {?} node
* @return {?}
*/
TreeFactory.prototype.checkParentNodes = /**
* @private
* @param {?} node
* @return {?}
*/
function (node) {
var parentId = node.parentId;
/** @type {?} */
var parentNode = this.nodes[parentId];
if (parentNode) {
/** @type {?} */
var childrenNode = this.getChildrenById(parentId);
if (childrenNode.every((/**
* @param {?} childNode
* @return {?}
*/
function (childNode) { return childNode.data.isChecked && !childNode.data.halfChecked; }))) {
parentNode.data.isChecked = true;
parentNode.data.halfChecked = false;
}
else if (childrenNode.some((/**
* @param {?} childNode
* @return {?}
*/
function (childNode) { return childNode.data.halfChecked || childNode.data.isChecked; }))) {
parentNode.data.isChecked = true;
parentNode.data.halfChecked = true;
}
else {
parentNode.data.isChecked = false;
parentNode.data.halfChecked = false;
}
this.maintainCheckedNodeList(parentNode, parentNode.data.isChecked);
this.checkParentNodes(parentNode);
}
};
/**
* @private
* @param {?} node
* @param {?} checked
* @return {?}
*/
TreeFactory.prototype.checkChildNodes = /**
* @private
* @param {?} node
* @param {?} checked
* @return {?}
*/
function (node, checked) {
var _this = this;
var id = node.id;
/** @type {?} */
var childrenNode = this.getChildrenById(id);
if (childrenNode.length > 0) {
childrenNode.forEach((/**
* @param {?} childNode
* @return {?}
*/
function (childNode) {
var childId = childNode.id;
var nodeData = _this.nodes[childId].data;
if (!nodeData.disabled) {
nodeData.isChecked = checked;
nodeData.halfChecked = false;
_this.maintainCheckedNodeList(childNode, checked);
}
_this.checkChildNodes(childNode, checked);
}));
/** @type {?} */
var childrenFullCheckedCount = childrenNode.filter((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var nodeData = _a.data;
return nodeData.isChecked;
})).length;
/** @type {?} */
var childrenCheckedCount = childrenNode
.filter((/**
* @param {?} __0
* @return {?}
*/
function (_a) {
var nodeData = _a.data;
return nodeData.isChecked || nodeData.halfChecked;
})).length;
node.data.halfChecked = childrenCheckedCount > 0 && childrenNode.length > childrenFullCheckedCount;
}
};
/**
* @return {?}
*/
TreeFactory.prototype.getCheckedNodes = /**
* @return {?}
*/
function () {
return Array.from(this._checked);
};
/**
* @return {?}
*/
TreeFactory.prototype.getDisabledNodes = /**
* @return {?}
*/
function () {
/** @type {?} */
var results = pickBy(this.nodes, (/**
* @param {?} node
* @return {?}
*/
function (node) {
return node.data.disabled === true;
}));
return values(results);
};
/**
* @param {?} id
* @return {?}
*/
TreeFactory.prototype.activeNodeById = /**
* @param {?} id
* @return {?}
*/
function (id) {
this.deactivateAllNodes();
this.nodes[id].data.isActive = !this.nodes[id].data.isActive;
};
/**
* @param {?} id
* @return {?}
*/
TreeFactory.prototype.getChildrenById = /**
* @param {?} id
* @return {?}
*/
function (id) {
if (this.nodes[id]) {
return this.nodes[id].data.children || [];
}
else if (id === undefined) {
return this._treeRoot;
}
return [];
};
/*
* @deprecated
*
*/
/*
* @deprecated
*
*/
/**
* @private
* @return {?}
*/
TreeFactory.prototype.toTree = /*
* @deprecated
*
*/
/**
* @private
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var patchChildren = (/**
* @param {?} nodes
* @return {?}
*/
function (nodes) {
return map(nodes, (/**
* @param {?} node
* @return {?}
*/
function (node) {
return tslib_1.__assign({}, node, { children: patchChildren(_this.getChildrenById(node.id)) });
}));
});
return patchChildren(this.getChildrenById(undefined));
};
/**
* @param {?} id
* @return {?}
*/
TreeFactory.prototype.startLoading = /**
* @param {?} id
* @return {?}
*/
function (id) {
this.nodes[id].data.loading = true;
};
/**
* @param {?} id
* @return {?}
*/
TreeFactory.prototype.endLoading = /**
* @param {?} id
* @return {?}
*/
function (id) {
this.nodes[id].data.loading = false;
};
/*
* @deprecated
*/
/*
* @deprecated
*/
/**
* @private
* @param {?} inputValue
* @param {?=} hideUnmatched
* @return {?}
*/
TreeFactory.prototype.isMatchNode = /*
* @deprecated
*/
/**
* @private
* @param {?} inputValue
* @param {?=} hideUnmatched
* @return {?}
*/
function (inputValue, hideUnmatched) {
/** @type {?} */
var target = trim(inputValue);
this.resetSearchResults();
this.dfs(target.toLowerCase(), this._treeRoot, hideUnmatched);
};
/**
* @param {?} id
* @return {?}
*/
TreeFactory.prototype.getNodeById = /**
* @param {?} id
* @return {?}
*/
function (id) {
return this.nodes[id].data;
};
/**
* @template THIS
* @this {THIS}
* @param {?} id
* @param {?} hide
* @return {THIS}
*/
TreeFactory.prototype.hideNodeById = /**
* @template THIS
* @this {THIS}
* @param {?} id
* @param {?} hide
* @return {THIS}
*/
function (id, hide) {
(/** @type {?} */ (this)).nodes[id].data.isHide = hide;
return (/** @type {?} */ (this));
};
/**
* @private
* @param {?} node
* @param {?} checked
* @return {?}
*/
TreeFactory.prototype.maintainCheckedNodeList = /**
* @private
* @param {?} node
* @param {?} checked
* @return {?}
*/
function (node, checked) {
if (checked && !node.data.halfChecked) {
this._checked.add(node);
}
else {
this._checked.delete(node);
}
};
/**
* @private
* @param {?} target
* @param {?} tree
* @param {?=} hideUnmatched
* @return {?}
*/
TreeFactory.prototype.dfs = /**
* @private
* @param {?} target
* @param {?} tree
* @param {?=} hideUnmatched
* @return {?}
*/
function (target, tree, hideUnmatched) {
var _this = this;
if (!tree) {
return false;
}
if (!target) {
return false;
}
if (Array.isArray(tree)) {
return tree.map((/**
* @param {?} treeNode
* @return {?}
*/
function (treeNode) {
return _this.dfs(target, treeNode, hideUnmatched);
}));
}
else {
/** @type {?} */
var treeNode = tree;
/** @type {?} */
var treeChildren = this.getChildrenById(treeNode.id);
/** @type {?} */
var selfMatched = treeNode.data.title.toLowerCase().includes(target);
if (selfMatched) {
treeNode.data.isMatch = true;
}
// Test if children matches target recursively, do not hide children if parent is matched.
/** @type {?} */
var childrenMatched = this.dfs(target, treeChildren, hideUnmatched && !selfMatched).some((/**
* @param {?} _
* @return {?}
*/
function (_) { return !!_; }));
if (selfMatched || childrenMatched) {
if (treeChildren.length > 0) {
this.openNodesById(treeNode.id);
}
return true;
}
else {
treeNode.data.isHide = hideUnmatched;
return false;
}
}
};
/**
* @param {?} parentNode
* @param {?} childNode
* @return {?}
*/
TreeFactory.prototype.addChildNode = /**
* @param {?} parentNode
* @param {?} childNode
* @return {?}
*/
function (parentNode, childNode) {
if (parentNode) {
Array.isArray(parentNode.data.children) ?
parentNode.data.children.push(childNode) : parentNode.data.children = [childNode];
}
else {
this._treeRoot.push(childNode);
}
};
/**
* @private
* @param {?} parentNode
* @param {?} childNode
* @return {?}
*/
TreeFactory.prototype.removeChildNode = /**
* @private
* @param {?} parentNode
* @param {?} childNode
* @return {?}
*/
function (parentNode, childNode) {
if (parentNode) {
parentNode.data.children = parentNode.data.children.filter((/**
* @param {?} node
* @return {?}
*/
function (node) { return node.id !== childNode.id; }));
}
else {
this._treeRoot = this._treeRoot.filter((/**
* @param {?} node
* @return {?}
*/
function (node) { return node.id !== childNode.id; }));
}
};
/**
* @private
* @return {?}
*/
TreeFactory.prototype.resetSearchResults = /**
* @private
* @return {?}
*/
function () {
var _this = this;
Object.keys(this.nodes).forEach((/**
* @param {?} key
* @return {?}
*/
function (key) {
/** @type {?} */
var treeNode = _this.nodes[key];
treeNode.data.isMatch = false;
treeNode.data.isHide = false;
}));
};
/**
* @param {?} target
* @param {?=} hideUnmatched
* @return {?}
*/
TreeFactory.prototype.searchTree = /**
* @param {?} target
* @param {?=} hideUnmatched
* @return {?}
*/
function (target, hideUnmatched) {
if (hideUnmatched === void 0) { hideUnmatched = false; }
target = trim(target);
this.resetSearchResults();
return this.dfs(target.toLowerCase(), this._treeRoot, hideUnmatched);
};
Object.defineProperty(TreeFactory.prototype, "treeRoot", {
get: /**
* @return {?}
*/
function () {
return this._treeRoot;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
TreeFactory.prototype.deactivateAllNodes = /**
* @return {?}
*/
function () {
var e_1, _a;
try {
for (var _b = tslib_1.__values(Object.keys(this.nodes)), _c = _b.next(); !_c.done; _c = _b.next()) {
var id = _c.value;
this.nodes[id].data.isActive = false;
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
};
return TreeFactory;
}());
export { TreeFactory };
if (false) {
/** @type {?} */
TreeFactory.prototype.nodes;
/**
* @type {?}
* @private
*/
TreeFactory.prototype.idx;
/**
* @type {?}
* @private
*/
TreeFactory.prototype._checked;
/**
* @type {?}
* @private
*/
TreeFactory.prototype._treeRoot;
/** @type {?} */
TreeFactory.prototype.mapTreeItems;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1mYWN0b3J5LmNsYXNzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvdHJlZS8iLCJzb3VyY2VzIjpbInRyZWUtZmFjdG9yeS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBR0wsT0FBTyxFQUNQLFdBQVcsRUFDWCxHQUFHLEVBQ0gsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLE1BQU0sRUFDUCxNQUFNLFdBQVcsQ0FBQzs7OztBQUVuQixtQ0FpQkM7OztJQWhCQywyQkFBWTs7SUFDWixpQ0FBa0I7O0lBQ2xCLDhCQUFlOztJQUNmLCtCQUFpQjs7SUFDakIsNkJBQVc7O0lBQ1gsaUNBQW1COztJQUNuQixnQ0FBa0I7O0lBQ2xCLGdDQUFrQjs7SUFDbEIsK0JBQWlCOztJQUNqQixpQ0FBbUI7O0lBQ25CLGtDQUFvQjs7SUFDcEIsaUNBQW1COztJQUluQixpQ0FBYzs7Ozs7O0FBR2hCLDhCQUVDOzs7O0FBRUQsK0JBb0JDOzs7SUFuQkMsMEJBQWM7O0lBQ2QseUJBQWU7O0lBQ2YsNEJBQWtCOztJQUNsQiw0QkFBa0I7O0lBQ2xCLDBCQUFvQjs7SUFDcEIsNkJBQW1COztJQUNuQix5QkFBVzs7SUFDWCx1QkFBUzs7SUFDVCwyQkFBaUI7O0lBQ2pCLDZCQUFtQjs7SUFDbkIsOEJBQW9COztJQUNwQixnQ0FBc0I7O0lBQ3RCLDZCQUFtQjs7SUFJbkIsK0JBQXFCOztJQUNyQixnQ0FBc0I7O0lBQ3RCLGtDQUF3Qjs7Ozs7O0FBRzFCLGdDQU9DOzs7SUFOQywrQkFBNEI7O0lBQzVCLDhCQUFrQjs7SUFDbEIseUNBQTZCOztJQUM3QixtQ0FBdUI7O0lBQ3ZCLHlDQUE2Qjs7SUFDN0Isc0NBQTBCOztBQUc1QjtJQUNFLGtCQUFtQixFQUFFLEVBQ1osUUFBUSxFQUNSLElBQUk7UUFGTSxPQUFFLEdBQUYsRUFBRSxDQUFBO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBQTtRQUNSLFNBQUks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V0MsNEJBQTRCOzs7OztJQUM1QiwwQkFBb0I7Ozs7O0lBQ3BCLCtCQUFxQzs7Ozs7SUFDckMsZ0NBQW1DOztJQXdCbkMsbUNBd0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEaWN0aW9uYXJ5LFxyXG4gIGZpbHRlcixcclxuICBmb3JFYWNoLFxyXG4gIGlzVW5kZWZpbmVkLFxyXG4gIG1hcCxcclxuICBvbWl0QnksXHJcbiAgcGlja0J5LFxyXG4gIHJlZHVjZSxcclxuICB0cmltLFxyXG4gIHZhbHVlc1xyXG59IGZyb20gJ2xvZGFzaC1lcyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElUcmVlTm9kZURhdGEge1xyXG4gIGlkPzogbnVtYmVyO1xyXG4gIHBhcmVudElkPzogbnVtYmVyO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIGlzT3Blbj86IGJvb2xlYW47XHJcbiAgZGF0YT86IGFueTtcclxuICBpc1BhcmVudD86IGJvb2xlYW47XHJcbiAgbG9hZGluZz86IGJvb2xlYW47XHJcbiAgaXNNYXRjaD86IGJvb2xlYW47XHJcbiAgaXNIaWRlPzogYm9vbGVhbjtcclxuICBpc0FjdGl2ZT86IGJvb2xlYW47XHJcbiAgaXNDaGVja2VkPzogYm9vbGVhbjtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcblxyXG4gIFtwcm9wOiBzdHJpbmddOiBhbnk7XHJcblxyXG4gIGNoaWxkcmVuPzogW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVRyZWVNYXAge1xyXG4gIFtpbmRleDogbnVtYmVyXTogSVRyZWVOb2RlRGF0YTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVHJlZUl0ZW0ge1xyXG4gIHRpdGxlOiBzdHJpbmc7XHJcbiAgb3Blbj86IGJvb2xlYW47XHJcbiAgbG9hZGluZz86IGJvb2xlYW47XHJcbiAgaXNNYXRjaD86IGJvb2xlYW47XHJcbiAgaXRlbXM/OiBJVHJlZUl0ZW1bXTtcclxuICBpc1BhcmVudD86IGJvb2xlYW47XHJcbiAgZGF0YT86IGFueTtcclxuICBpZD86IGFueTtcclxuICBpc0hpZGU/OiBib29sZWFuO1xyXG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcclxuICBpc0NoZWNrZWQ/OiBib29sZWFuO1xyXG4gIGhhbGZDaGVja2VkPzogYm9vbGVhbjtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcblxyXG4gIFtwcm9wOiBzdHJpbmddOiBhbnk7XHJcblxyXG4gIGRpc2FibGVBZGQ/OiBib29sZWFuO1xyXG4gIGRpc2FibGVFZGl0PzogYm9vbGVhbjtcclxuICBkaXNhYmxlRGVsZXRlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJVHJlZUlucHV0IHtcclxuICB0cmVlSXRlbXM6IEFycmF5PElUcmVlSXRlbT47XHJcbiAgcGFyZW50SWQ/OiBudW1iZXI7XHJcbiAgdHJlZU5vZGVDaGlsZHJlbktleT86IHN0cmluZztcclxuICB0cmVlTm9kZUlkS2V5Pzogc3RyaW5nO1xyXG4gIGNoZWNrYm94RGlzYWJsZWRLZXk/OiBzdHJpbmc7XHJcbiAgdHJlZU5vZGVUaXRsZUtleT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlIGltcGxlbWVudHMgSVRyZWVOb2RlRGF0YSB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIGlkLFxyXG4gICAgcHVibGljIHBhcmVudElkLFxyXG4gICAgcHVibGljIGRhdGEpIHtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUcmVlRmFjdG9yeSB7XHJcbiAgbm9kZXM6IERpY3Rpb25hcnk8VHJlZU5vZGU+O1xyXG4gIHByaXZhdGUgaWR4OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfY2hlY2tlZCA9IG5ldyBTZXQ8T2JqZWN0PigpO1xyXG4gIHByaXZhdGUgX3RyZWVSb290OiBUcmVlTm9kZVtdID0gW107XHJcblxyXG4gIHN0YXRpYyBjcmVhdGUoKSB7XHJcbiAgICByZXR1cm4gbmV3IFRyZWVGYWN0b3J5KCk7XHJcbiAgfVxyXG5cclxuICAvLyB0cmVlIG1vZGVsIHdpdGggaXRlbXNcclxuICBzdGF0aWMgZnJvbVRyZWUoe1xyXG4gICAgdHJlZUl0ZW1zLFxyXG4gICAgdHJlZU5vZGVDaGlsZHJlbktleSA9ICdpdGVtcycsXHJcbiAgICB0cmVlTm9kZUlkS2V5ID0gJ2lkJyxcclxuICAgIGNoZWNrYm94RGlzYWJsZWRLZXkgPSAnZGlzYWJsZWQnLFxyXG4gICAgdHJlZU5vZGVUaXRsZUtleSA9ICd0aXRsZSdcclxuICB9OiBJVHJlZUlucHV0KTogVHJlZUZhY3Rvcnkge1xyXG4gICAgY29uc3QgdHJlZUZhY3RvcnkgPSBUcmVlRmFjdG9yeS5jcmVhdGUoKTtcclxuICAgIHRyZWVGYWN0b3J5Lm1hcFRyZWVJdGVtcyh7IHRyZWVJdGVtcywgcGFyZW50SWQ6IHVuZGVmaW5lZCwgdHJlZU5vZGVDaGlsZHJlbktleSwgdHJlZU5vZGVJZEtleSwgY2hlY2tib3hEaXNhYmxlZEtleSwgdHJlZU5vZGVUaXRsZUtleSB9KTtcclxuICAgIHJldHVybiB0cmVlRmFjdG9yeTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5pZHggPSAwO1xyXG4gICAgdGhpcy5ub2RlcyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgbWFwVHJlZUl0ZW1zID0gKHtcclxuICAgIHRyZWVJdGVtcyxcclxuICAgIHBhcmVudElkLFxyXG4gICAgdHJlZU5vZGVDaGlsZHJlbktleSA9ICdpdGVtcycsXHJcbiAgICB0cmVlTm9kZUlkS2V5ID0gJ2lkJyxcclxuICAgIGNoZWNrYm94RGlzYWJsZWRLZXkgPSAnZGlzYWJsZWQnLFxyXG4gICAgdHJlZU5vZGVUaXRsZUtleSA9ICd0aXRsZSdcclxuICB9OiBJVHJlZUlucHV0KSA9PiB7XHJcbiAgICBmb3JFYWNoKHRyZWVJdGVtcywgKGl0ZW06IElUcmVlSXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBub2RlID0gdGhpcy5hZGROb2RlKHtcclxuICAgICAgICBpZDogaXRlbVt0cmVlTm9kZUlkS2V5XSxcclxuICAgICAgICBwYXJlbnRJZCxcclxuICAgICAgICB0aXRsZTogaXRlbVt0cmVlTm9kZVRpdGxlS2V5XSxcclxuICAgICAgICBpc09wZW46ICEhaXRlbS5vcGVuLFxyXG4gICAgICAgIGRhdGE6IGl0ZW0uZGF0YSB8fCB7fSxcclxuICAgICAgICBvcmlnaW5JdGVtOiBpdGVtLFxyXG4gICAgICAgIGlzUGFyZW50OiAhIWl0ZW0uaXNQYXJlbnQgfHwgISEoaXRlbVt0cmVlTm9kZUNoaWxkcmVuS2V5XSAmJiBpdGVtW3RyZWVOb2RlQ2hpbGRyZW5LZXldLmxlbmd0aCA+IDApLFxyXG4gICAgICAgIGxvYWRpbmc6ICEhaXRlbS5sb2FkaW5nLFxyXG4gICAgICAgIGlzTWF0Y2g6ICEhaXRlbS5pc01hdGNoLFxyXG4gICAgICAgIGlzSGlkZTogISFpdGVtLmlzSGlkZSxcclxuICAgICAgICBpc0NoZWNrZWQ6ICEhaXRlbS5pc0NoZWNrZWQsXHJcbiAgICAgICAgaGFsZkNoZWNrZWQ6ICEhaXRlbS5oYWxmQ2hlY2tlZCxcclxuICAgICAgICBpc0FjdGl2ZTogISFpdGVtLmlzQWN0aXZlLFxyXG4gICAgICAgIGRpc2FibGVkOiAhIWl0ZW1bY2hlY2tib3hEaXNhYmxlZEtleV0sXHJcbiAgICAgICAgZGlzYWJsZUFkZDogISFpdGVtLmRpc2FibGVBZGQsXHJcbiAgICAgICAgZGlzYWJsZUVkaXQ6