@wavemaker/app-ng-runtime 11.5.0-next.40002 → 11.5.0-next.40301
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- app-ng-runtime/components/basic/search/bundles/index.umd.js +7 -0
- app-ng-runtime/components/basic/search/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/basic/search/esm2015/search.component.js +7 -1
- app-ng-runtime/components/basic/search/fesm2015/index.js +6 -0
- app-ng-runtime/components/basic/search/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/basic/tree/bundles/index.umd.js +236 -132
- app-ng-runtime/components/basic/tree/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/basic/tree/esm2015/tree.component.js +208 -135
- app-ng-runtime/components/basic/tree/fesm2015/index.js +207 -134
- app-ng-runtime/components/basic/tree/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/basic/tree/index.metadata.json +1 -1
- app-ng-runtime/components/basic/tree/tree.component.d.ts +21 -25
- app-ng-runtime/components/chart/bundles/index.umd.js +1 -7
- app-ng-runtime/components/chart/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/chart/esm2015/chart.component.js +2 -8
- app-ng-runtime/components/chart/fesm2015/index.js +1 -7
- app-ng-runtime/components/chart/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/chart/index.metadata.json +1 -1
- app-ng-runtime/components/containers/tabs/bundles/index.umd.js +0 -6
- app-ng-runtime/components/containers/tabs/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/containers/tabs/esm2015/tab-pane/tab-pane.component.js +1 -7
- app-ng-runtime/components/containers/tabs/fesm2015/index.js +0 -6
- app-ng-runtime/components/containers/tabs/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/containers/tabs/index.metadata.json +1 -1
- app-ng-runtime/components/containers/tabs/tab-pane/tab-pane.component.d.ts +0 -2
- app-ng-runtime/components/data/form/bundles/index.umd.js +3 -9
- app-ng-runtime/components/data/form/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/data/form/esm2015/form.component.js +5 -11
- app-ng-runtime/components/data/form/fesm2015/index.js +4 -10
- app-ng-runtime/components/data/form/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/data/form/index.metadata.json +1 -1
- app-ng-runtime/components/input/calendar/bundles/index.umd.js +1 -11
- app-ng-runtime/components/input/calendar/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/input/calendar/calendar.component.d.ts +2 -4
- app-ng-runtime/components/input/calendar/esm2015/calendar.component.js +2 -12
- app-ng-runtime/components/input/calendar/fesm2015/index.js +1 -11
- app-ng-runtime/components/input/calendar/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/input/calendar/index.metadata.json +1 -1
- app-ng-runtime/components/input/default/bundles/index.umd.js +3 -9
- app-ng-runtime/components/input/default/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +2 -4
- app-ng-runtime/components/input/default/esm2015/base-form-custom.component.js +4 -2
- app-ng-runtime/components/input/default/esm2015/dataset-aware-form.component.js +1 -9
- app-ng-runtime/components/input/default/fesm2015/index.js +3 -9
- app-ng-runtime/components/input/default/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/input/default/index.metadata.json +1 -1
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +0 -1
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +24 -25
- app-ng-runtime/components/input/epoch/bundles/index.umd.js.map +1 -1
- app-ng-runtime/components/input/epoch/esm2015/base-date-time.component.js +19 -17
- app-ng-runtime/components/input/epoch/esm2015/date/date.component.js +3 -5
- app-ng-runtime/components/input/epoch/esm2015/date-time/date-time-picker.component.js +10 -10
- app-ng-runtime/components/input/epoch/esm2015/date-time/date-time.component.js +2 -2
- app-ng-runtime/components/input/epoch/esm2015/time/time.component.js +2 -2
- app-ng-runtime/components/input/epoch/fesm2015/index.js +31 -31
- app-ng-runtime/components/input/epoch/fesm2015/index.js.map +1 -1
- app-ng-runtime/components/input/epoch/index.metadata.json +1 -1
- app-ng-runtime/core/bundles/index.umd.js +8 -12
- app-ng-runtime/core/bundles/index.umd.js.map +1 -1
- app-ng-runtime/core/esm2015/services/state-persistence.service.js +2 -4
- app-ng-runtime/core/esm2015/services/viewport.service.js +7 -9
- app-ng-runtime/core/esm2015/utils/utils.js +2 -2
- app-ng-runtime/core/fesm2015/index.js +8 -12
- app-ng-runtime/core/fesm2015/index.js.map +1 -1
- app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +1 -1
- app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js.map +1 -1
- app-ng-runtime/mobile/components/basic/default/esm2015/image-cache/image-cache.directive.js +2 -2
- app-ng-runtime/mobile/components/basic/default/fesm2015/index.js +1 -1
- app-ng-runtime/mobile/components/basic/default/fesm2015/index.js.map +1 -1
- app-ng-runtime/mobile/components/basic/default/index.metadata.json +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/runtime/base/bundles/index.umd.js +2 -35
- app-ng-runtime/runtime/base/bundles/index.umd.js.map +1 -1
- app-ng-runtime/runtime/base/esm2015/services/i18n.service.js +3 -35
- app-ng-runtime/runtime/base/fesm2015/index.js +2 -34
- app-ng-runtime/runtime/base/fesm2015/index.js.map +1 -1
- app-ng-runtime/runtime/base/index.metadata.json +1 -1
- app-ng-runtime/runtime/base/services/i18n.service.d.ts +0 -2
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { APPLY_STYLES_TYPE,
|
|
1
|
+
import { Component, Injector, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { APPLY_STYLES_TYPE, getOrderedDataset, provideAsWidgetRef, StylableComponent, styler } from '@wm/components/base';
|
|
3
3
|
import { registerProps } from './tree.props';
|
|
4
|
-
import {
|
|
4
|
+
import { getClonedObject } from "@wm/core";
|
|
5
5
|
const WIDGET_INFO = { widgetType: 'wm-tree', hostClass: 'app-tree' };
|
|
6
6
|
const defaultTreeIconClass = 'plus-minus';
|
|
7
7
|
export class TreeComponent extends StylableComponent {
|
|
8
|
-
constructor(inj
|
|
8
|
+
constructor(inj) {
|
|
9
9
|
super(inj, WIDGET_INFO);
|
|
10
|
-
this.binddatavalue = binddatavalue;
|
|
11
|
-
this.bindnodelabel = bindnodelabel;
|
|
12
|
-
this.bindnodeicon = bindnodeicon;
|
|
13
|
-
this.bindnodechildren = bindnodechildren;
|
|
14
|
-
this.bindnodeid = bindnodeid;
|
|
15
10
|
this.setting = {
|
|
16
11
|
data: {
|
|
17
12
|
simpleData: {
|
|
18
13
|
enable: false
|
|
14
|
+
},
|
|
15
|
+
key: {
|
|
16
|
+
children: 'children',
|
|
17
|
+
name: 'label'
|
|
19
18
|
}
|
|
20
19
|
},
|
|
21
20
|
view: {
|
|
@@ -29,45 +28,45 @@ export class TreeComponent extends StylableComponent {
|
|
|
29
28
|
callback: {}
|
|
30
29
|
};
|
|
31
30
|
styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER);
|
|
32
|
-
this.setting.view['nodeClasses'] = this.setNodeClasses;
|
|
33
|
-
this.setting.callback["onClick"] = this.onClick.bind(this);
|
|
34
|
-
this.setting.callback["onExpand"] = this.onExpand.bind(this);
|
|
35
|
-
this.setting.callback["onCollapse"] = this.onCollapse.bind(this);
|
|
36
31
|
}
|
|
37
32
|
onPropertyChange(key, nv, ov) {
|
|
38
33
|
switch (key) {
|
|
39
34
|
case 'dataset':
|
|
40
35
|
this.nodes = this.getNodes(nv);
|
|
36
|
+
if (this.level > 0) {
|
|
37
|
+
this.expandTree(this.level, this.nodes, 0);
|
|
38
|
+
}
|
|
41
39
|
this.renderTree();
|
|
42
40
|
break;
|
|
43
41
|
case 'levels':
|
|
44
|
-
|
|
42
|
+
if (nv > 0) {
|
|
43
|
+
this.level = nv;
|
|
44
|
+
}
|
|
45
45
|
this.renderTree();
|
|
46
46
|
break;
|
|
47
|
-
case '
|
|
48
|
-
this.
|
|
47
|
+
case 'treeicons':
|
|
48
|
+
this.treeicon = nv;
|
|
49
49
|
this.renderTree();
|
|
50
50
|
break;
|
|
51
51
|
case 'nodelabel':
|
|
52
|
-
this.
|
|
52
|
+
this.setting.data.key.name = this.labelKey;
|
|
53
53
|
this.renderTree();
|
|
54
54
|
break;
|
|
55
55
|
case 'nodechildren':
|
|
56
|
-
this.
|
|
56
|
+
this.setting.data.key.children = this.childrenKey;
|
|
57
57
|
this.renderTree();
|
|
58
58
|
break;
|
|
59
|
-
case '
|
|
60
|
-
this.
|
|
59
|
+
case 'nodeicon':
|
|
60
|
+
this.nodeicon = this.iconKey;
|
|
61
61
|
this.renderTree();
|
|
62
62
|
break;
|
|
63
|
-
case '
|
|
64
|
-
this.treeicons = nv;
|
|
63
|
+
case 'orderby':
|
|
65
64
|
this.renderTree();
|
|
66
65
|
break;
|
|
67
66
|
case 'class':
|
|
68
67
|
this.treeClass = nv;
|
|
69
|
-
this.setTreeTemplate(this.treeClass);
|
|
70
68
|
this.renderTree();
|
|
69
|
+
break;
|
|
71
70
|
default:
|
|
72
71
|
super.onPropertyChange(key, nv, ov);
|
|
73
72
|
break;
|
|
@@ -76,9 +75,9 @@ export class TreeComponent extends StylableComponent {
|
|
|
76
75
|
// expands the tree nodes if the property is selected.
|
|
77
76
|
expandTree(level, node, childLevel) {
|
|
78
77
|
node.map(childNode => {
|
|
79
|
-
const children = childNode
|
|
80
|
-
if (children && childLevel < level) {
|
|
81
|
-
childNode
|
|
78
|
+
const children = this.getChildren(childNode);
|
|
79
|
+
if (children && !("open" in childNode) && childLevel < level) {
|
|
80
|
+
childNode["open"] = true;
|
|
82
81
|
this.expandTree(level, children, childLevel + 1);
|
|
83
82
|
}
|
|
84
83
|
else {
|
|
@@ -89,15 +88,14 @@ export class TreeComponent extends StylableComponent {
|
|
|
89
88
|
}
|
|
90
89
|
// sets the template for the tree based on the property selected.
|
|
91
90
|
setTreeTemplate(value) {
|
|
92
|
-
|
|
93
|
-
if (classList.includes('Classic')) {
|
|
91
|
+
if (value === 'Classic') {
|
|
94
92
|
this.setting.check["enable"] = false;
|
|
95
93
|
}
|
|
96
|
-
else if (
|
|
94
|
+
else if (value === 'Checkbox') {
|
|
97
95
|
this.setting.check["enable"] = true;
|
|
98
96
|
this.setting.check["chkStyle"] = 'checkbox';
|
|
99
97
|
}
|
|
100
|
-
else if (
|
|
98
|
+
else if (value === 'Radio') {
|
|
101
99
|
this.setting.check["enable"] = true;
|
|
102
100
|
this.setting.check["chkStyle"] = 'radio';
|
|
103
101
|
this.setting.check["radioType"] = "all";
|
|
@@ -129,10 +127,52 @@ export class TreeComponent extends StylableComponent {
|
|
|
129
127
|
return nodes;
|
|
130
128
|
}
|
|
131
129
|
// adds class to the nodes inorder to add icons to respective node.
|
|
132
|
-
|
|
130
|
+
setNodeclasses(treeId, treeNode) {
|
|
133
131
|
return treeNode.icon ? { add: [`${treeNode.icon}`] } : '';
|
|
134
132
|
}
|
|
135
133
|
;
|
|
134
|
+
// Sets the node label with any icon if bound to
|
|
135
|
+
setNodeData(nodes, depth, level, parentNode, type) {
|
|
136
|
+
if (depth === 0) {
|
|
137
|
+
nodes.map(node => {
|
|
138
|
+
const children = this.getChildren(node);
|
|
139
|
+
if (children) {
|
|
140
|
+
this.setNodeData(children, depth, level, parentNode, type);
|
|
141
|
+
}
|
|
142
|
+
if (node.icon && this.nodelabel == 'icon') {
|
|
143
|
+
node[type] = node.icon;
|
|
144
|
+
}
|
|
145
|
+
else if (node.name && this.nodelabel == 'name') {
|
|
146
|
+
node[type] = node.name;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
nodes.map(node => {
|
|
155
|
+
const children = this.getChildren(node);
|
|
156
|
+
if (children && level > 1) {
|
|
157
|
+
if (depth === level) {
|
|
158
|
+
parentNode = node;
|
|
159
|
+
}
|
|
160
|
+
this.setNodeData(children, depth, level - 1, parentNode, type);
|
|
161
|
+
}
|
|
162
|
+
if (level === 1 && (type === "name" ? this.nodelabel.includes("label") || this.nodelabel.includes("name") : this.nodeicon.includes("label") || this.nodeicon.includes("name"))) {
|
|
163
|
+
parentNode[type] = node.name || node.label;
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
else if (level === 1 && (node.icon !== undefined) && (type === "name" ? this.nodelabel.includes("icon") : this.nodeicon.includes("icon"))) {
|
|
167
|
+
parentNode[type] = node.icon;
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
136
176
|
// adds tree icons to the nodes on load of the tree
|
|
137
177
|
changeTreeIcons(nv) {
|
|
138
178
|
let eleClose = $('ul[name="' + this.name + '"] li span.button.switch');
|
|
@@ -145,25 +185,31 @@ export class TreeComponent extends StylableComponent {
|
|
|
145
185
|
});
|
|
146
186
|
});
|
|
147
187
|
}
|
|
148
|
-
// Returns the node path
|
|
149
188
|
getPath(treeNode, path) {
|
|
150
189
|
if (treeNode.getParentNode() === null) {
|
|
151
|
-
path = "/" + treeNode.
|
|
190
|
+
path = "/" + treeNode[this.labelKey] + path;
|
|
152
191
|
}
|
|
153
192
|
else {
|
|
154
|
-
path = this.getPath(treeNode.getParentNode(), path) + "/" + treeNode.
|
|
193
|
+
path = this.getPath(treeNode.getParentNode(), path) + "/" + treeNode[this.labelKey];
|
|
155
194
|
}
|
|
156
195
|
return path;
|
|
157
196
|
}
|
|
158
197
|
// binds the click event to all nodes to open the child nodes
|
|
159
198
|
onClick(event, treeId, treeNode, clickFlag) {
|
|
160
199
|
if (this.nodeclick === "expand") {
|
|
161
|
-
var nodes = this.
|
|
200
|
+
var nodes = this.treeObj.getSelectedNodes();
|
|
162
201
|
if (nodes.length > 0) {
|
|
163
202
|
this.expandNode(nodes[0], !nodes[0].open, true);
|
|
164
203
|
}
|
|
165
204
|
}
|
|
166
|
-
this.
|
|
205
|
+
let path = this.getPath(treeNode, "");
|
|
206
|
+
const eventParams = {
|
|
207
|
+
'$event': event,
|
|
208
|
+
"$item": treeNode,
|
|
209
|
+
"$path": path
|
|
210
|
+
};
|
|
211
|
+
this.setSelectedItem(treeNode);
|
|
212
|
+
this.invokeEventCallback('select', eventParams);
|
|
167
213
|
}
|
|
168
214
|
// Adds tree icon classes to child nodes when expanded
|
|
169
215
|
onExpand(event, treeId, treeNode) {
|
|
@@ -171,18 +217,18 @@ export class TreeComponent extends StylableComponent {
|
|
|
171
217
|
let path = this.getPath(treeNode, "");
|
|
172
218
|
const eventParams = {
|
|
173
219
|
'$event': event,
|
|
174
|
-
"$item":
|
|
220
|
+
"$item": treeNode,
|
|
175
221
|
"$path": path
|
|
176
222
|
};
|
|
177
223
|
this.invokeEventCallback('expand', eventParams);
|
|
178
|
-
const children = treeNode
|
|
224
|
+
const children = this.getChildren(treeNode);
|
|
179
225
|
children === null || children === void 0 ? void 0 : children.map((el) => {
|
|
180
226
|
if (el.isParent) {
|
|
181
227
|
let ele = $(`#${el.tId}_switch`);
|
|
182
|
-
$(ele).addClass(self.
|
|
228
|
+
$(ele).addClass(self.treeicon || defaultTreeIconClass);
|
|
183
229
|
$(ele).on("click", function (e) {
|
|
184
230
|
setTimeout(() => {
|
|
185
|
-
$(ele).addClass(self.
|
|
231
|
+
$(ele).addClass(self.treeicon || defaultTreeIconClass);
|
|
186
232
|
}, 0);
|
|
187
233
|
});
|
|
188
234
|
}
|
|
@@ -192,121 +238,153 @@ export class TreeComponent extends StylableComponent {
|
|
|
192
238
|
let path = this.getPath(treeNode, "");
|
|
193
239
|
const eventParams = {
|
|
194
240
|
'$event': event,
|
|
195
|
-
"$item":
|
|
241
|
+
"$item": treeNode,
|
|
196
242
|
"$path": path
|
|
197
243
|
};
|
|
198
244
|
this.invokeEventCallback('collapse', eventParams);
|
|
199
245
|
}
|
|
246
|
+
getChildren(node) {
|
|
247
|
+
return node[this.childrenKey];
|
|
248
|
+
}
|
|
249
|
+
get childrenKey() {
|
|
250
|
+
if (!this.nodechildren) {
|
|
251
|
+
return 'children';
|
|
252
|
+
}
|
|
253
|
+
const depth = this.countDepth(this.nodechildren);
|
|
254
|
+
return depth ? this.nodechildren.split('.').pop() : this.nodechildren;
|
|
255
|
+
}
|
|
256
|
+
get labelKey() {
|
|
257
|
+
if (!this.nodelabel) {
|
|
258
|
+
return 'label';
|
|
259
|
+
}
|
|
260
|
+
const depth = this.countDepth(this.nodelabel);
|
|
261
|
+
return depth ? this.nodelabel.split('.').pop() : this.nodelabel;
|
|
262
|
+
}
|
|
263
|
+
get iconKey() {
|
|
264
|
+
if (!this.nodeicon) {
|
|
265
|
+
return 'icon';
|
|
266
|
+
}
|
|
267
|
+
const depth = this.countDepth(this.nodeicon);
|
|
268
|
+
return depth ? this.nodeicon.split('.').pop() : this.nodeicon;
|
|
269
|
+
}
|
|
270
|
+
get treeObj() {
|
|
271
|
+
return $.fn.zTree.getZTreeObj(`${this.name}`);
|
|
272
|
+
}
|
|
200
273
|
// function to support backward compatibility of objects
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
const children = getEvaluatedData(node, { field: this.nodechildren, bindExpression: this.bindnodechildren }, this.viewParent) || node.children;
|
|
208
|
-
zNode['name'] = name;
|
|
209
|
-
zNode['icon'] = icon;
|
|
210
|
-
zNode['nodeId'] = nodeId;
|
|
211
|
-
zNode['data'] = getClonedObject(node);
|
|
212
|
-
if (_.isArray(children) && children.length) {
|
|
213
|
-
zNode['children'] = [];
|
|
214
|
-
this.constructZTreeData(children, zNode['children']);
|
|
274
|
+
modifyObjects(array) {
|
|
275
|
+
array.forEach(obj => {
|
|
276
|
+
obj.icon = obj[this.nodeicon];
|
|
277
|
+
const children = this.getChildren(obj);
|
|
278
|
+
if (children === null || children === void 0 ? void 0 : children.length) {
|
|
279
|
+
this.modifyObjects(children);
|
|
215
280
|
}
|
|
216
|
-
zTreeData.push(zNode);
|
|
217
281
|
});
|
|
218
282
|
}
|
|
283
|
+
// sets the node children property to parent nodes
|
|
284
|
+
setNodeChildren(nodes, depth, level, parentNode) {
|
|
285
|
+
if (depth <= 0) {
|
|
286
|
+
return nodes;
|
|
287
|
+
}
|
|
288
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
289
|
+
const node = nodes[i];
|
|
290
|
+
if (depth === level) {
|
|
291
|
+
parentNode = nodes[i];
|
|
292
|
+
}
|
|
293
|
+
const children = this.getChildren(node);
|
|
294
|
+
if (children === null || children === void 0 ? void 0 : children.length) {
|
|
295
|
+
if (level === 1) {
|
|
296
|
+
parentNode[this.childrenKey] = children.map(child => ({ [this.labelKey]: child[this.labelKey], [this.childrenKey]: this.getChildren(child), icon: child[this.iconKey] }));
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
this.setNodeChildren(children, depth, level - 1, parentNode);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return nodes;
|
|
305
|
+
}
|
|
306
|
+
countDepth(str) {
|
|
307
|
+
const regex = /\[.*?\]/g;
|
|
308
|
+
let matches = str.match(regex);
|
|
309
|
+
let count = 1;
|
|
310
|
+
if (matches === null)
|
|
311
|
+
return count;
|
|
312
|
+
for (let match of matches) {
|
|
313
|
+
count++;
|
|
314
|
+
}
|
|
315
|
+
return count;
|
|
316
|
+
}
|
|
219
317
|
// Renders the tree on to the dom
|
|
220
318
|
renderTree() {
|
|
221
|
-
|
|
222
|
-
this.zTreeNodes = [];
|
|
223
|
-
if ((_a = this.nodes) === null || _a === void 0 ? void 0 : _a.length) {
|
|
319
|
+
if (this.nodes) {
|
|
224
320
|
this.nativeElement.setAttribute('id', this.name);
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
321
|
+
if (this.nodeicon && this.nodeicon !== 'icon') {
|
|
322
|
+
this.modifyObjects(this.nodes);
|
|
323
|
+
}
|
|
324
|
+
this.setTreeTemplate(this.treeClass);
|
|
325
|
+
if (this.nodelabel) {
|
|
326
|
+
let depth = 0;
|
|
327
|
+
if (this.nodelabel.includes("children")) {
|
|
328
|
+
depth = this.countDepth(this.nodelabel);
|
|
329
|
+
}
|
|
330
|
+
this.setNodeData(this.nodes, depth, depth, null, "name");
|
|
331
|
+
}
|
|
332
|
+
if (this.nodeicon) {
|
|
333
|
+
let depth = 0;
|
|
334
|
+
if (this.nodeicon.includes("children")) {
|
|
335
|
+
depth = this.countDepth(this.nodeicon);
|
|
336
|
+
}
|
|
337
|
+
this.setNodeData(this.nodes, depth, depth, null, "icon");
|
|
338
|
+
}
|
|
339
|
+
if (this.nodechildren) {
|
|
340
|
+
let depth = this.countDepth(this.nodechildren);
|
|
341
|
+
if (depth > 1) {
|
|
342
|
+
this.nodes = this.setNodeChildren(this.nodes, depth, depth, null);
|
|
343
|
+
}
|
|
228
344
|
}
|
|
229
345
|
}
|
|
230
|
-
this.
|
|
231
|
-
|
|
232
|
-
this.
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
const children = getEvaluatedData(node, { field: this.nodechildren, bindExpression: this.bindnodechildren }, this.viewParent) || node.children;
|
|
237
|
-
if (children === null || children === void 0 ? void 0 : children.length) {
|
|
238
|
-
children.forEach((node, index) => {
|
|
239
|
-
this.setChecked(zNode.children[index], node);
|
|
240
|
-
});
|
|
241
|
-
}
|
|
346
|
+
this.setting.view['nodeClasses'] = this.setNodeclasses;
|
|
347
|
+
this.setting.callback["onClick"] = this.onClick.bind(this);
|
|
348
|
+
this.setting.callback["onExpand"] = this.onExpand.bind(this);
|
|
349
|
+
this.setting.callback["onCollapse"] = this.onCollapse.bind(this);
|
|
350
|
+
let zTree = $.fn.zTree.init($('ul[name="' + this.name + '"]'), this.setting, this.nodes);
|
|
351
|
+
$.fn.zTreeKeyboardNavigation(zTree, $('ul[name="' + this.name + '"]'), null, this.treeicon || defaultTreeIconClass);
|
|
242
352
|
}
|
|
243
|
-
|
|
244
|
-
|
|
353
|
+
setSelectedItem(treeNode) {
|
|
354
|
+
this.selecteditem = getClonedObject(treeNode) || {};
|
|
355
|
+
this.selecteditem.path = this.getPath(treeNode, "");
|
|
356
|
+
const deSelectElm = $(`li[treenode].selected`);
|
|
245
357
|
deSelectElm.removeClass('selected');
|
|
246
|
-
|
|
247
|
-
return;
|
|
248
|
-
}
|
|
249
|
-
const selectElm = $(`#${node.tId}:has(.curSelectedNode)`);
|
|
358
|
+
const selectElm = $(`#${treeNode.tId}:has(.curSelectedNode)`);
|
|
250
359
|
selectElm.addClass('selected');
|
|
251
|
-
const classList = (this.treeClass || "").split(" ");
|
|
252
|
-
if (classList.includes('Checkbox') || classList.includes('Radio')) {
|
|
253
|
-
this.setChecked(node, node.data);
|
|
254
|
-
}
|
|
255
|
-
const path = this.getPath(node, "");
|
|
256
|
-
this.selecteditem = getClonedObject(node.data) || {};
|
|
257
|
-
this.selecteditem.path = path;
|
|
258
|
-
const eventParams = {
|
|
259
|
-
'$event': event,
|
|
260
|
-
"$item": getClonedObject(node.data),
|
|
261
|
-
"$path": path
|
|
262
|
-
};
|
|
263
|
-
//[Todo-CSP]: this data will be dynamic, can not generate function upfront
|
|
264
|
-
const nodeAction = node.data[this.nodeaction || 'action'];
|
|
265
|
-
if (nodeAction) {
|
|
266
|
-
$parseEvent(nodeAction)(this);
|
|
267
|
-
}
|
|
268
|
-
this.invokeEventCallback('select', eventParams);
|
|
269
360
|
}
|
|
270
361
|
expandNode(node, expand, eventFlag) {
|
|
271
|
-
this.
|
|
362
|
+
this.treeObj.expandNode(node, expand, false, false, eventFlag);
|
|
272
363
|
const el = $(`#${node.tId}_switch`);
|
|
273
|
-
$(el).addClass(this.
|
|
364
|
+
$(el).addClass(this.treeicon || defaultTreeIconClass);
|
|
274
365
|
}
|
|
275
|
-
|
|
366
|
+
ngAfterViewInit() {
|
|
276
367
|
setTimeout(() => {
|
|
277
|
-
this.changeTreeIcons(this.
|
|
278
|
-
if (this.datavalue
|
|
279
|
-
const nodes = this.
|
|
280
|
-
let
|
|
281
|
-
if (
|
|
282
|
-
if (
|
|
283
|
-
|
|
284
|
-
}
|
|
285
|
-
if (this.datavalue === 'LastNode') {
|
|
286
|
-
node = nodes[nodes.length - 1];
|
|
368
|
+
this.changeTreeIcons(this.treeicon || defaultTreeIconClass);
|
|
369
|
+
if (this.datavalue) {
|
|
370
|
+
const nodes = this.treeObj.getNodes();
|
|
371
|
+
let selectNode;
|
|
372
|
+
if (this.datavalue === 'FirstNode') {
|
|
373
|
+
if (nodes.length) {
|
|
374
|
+
selectNode = nodes[0];
|
|
287
375
|
}
|
|
288
376
|
}
|
|
289
|
-
if (
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
377
|
+
if (this.datavalue === 'LastNode') {
|
|
378
|
+
if (nodes.length) {
|
|
379
|
+
selectNode = nodes[nodes.length - 1];
|
|
380
|
+
}
|
|
293
381
|
}
|
|
382
|
+
this.treeObj.selectNode(selectNode, false);
|
|
383
|
+
this.setSelectedItem(selectNode);
|
|
384
|
+
this.expandNode(selectNode, true, false);
|
|
294
385
|
}
|
|
295
386
|
}, 200);
|
|
296
387
|
}
|
|
297
|
-
selectById(value) {
|
|
298
|
-
var _a;
|
|
299
|
-
const simpleNodes = (_a = this.zTree) === null || _a === void 0 ? void 0 : _a.transformToArray(this.zTree.getNodes());
|
|
300
|
-
const node = simpleNodes === null || simpleNodes === void 0 ? void 0 : simpleNodes.find(node => value === node.nodeId);
|
|
301
|
-
if (node) {
|
|
302
|
-
this.zTree.selectNode(node, false);
|
|
303
|
-
this.selectNode(undefined, node);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
deselectById(value) {
|
|
307
|
-
this.selecteditem = {};
|
|
308
|
-
this.selectById();
|
|
309
|
-
}
|
|
310
388
|
}
|
|
311
389
|
TreeComponent.initializeProps = registerProps();
|
|
312
390
|
TreeComponent.decorators = [
|
|
@@ -320,11 +398,6 @@ TreeComponent.decorators = [
|
|
|
320
398
|
},] }
|
|
321
399
|
];
|
|
322
400
|
TreeComponent.ctorParameters = () => [
|
|
323
|
-
{ type: Injector }
|
|
324
|
-
{ type: undefined, decorators: [{ type: Attribute, args: ['datavalue.bind',] }] },
|
|
325
|
-
{ type: undefined, decorators: [{ type: Attribute, args: ['nodelabel.bind',] }] },
|
|
326
|
-
{ type: undefined, decorators: [{ type: Attribute, args: ['nodeicon.bind',] }] },
|
|
327
|
-
{ type: undefined, decorators: [{ type: Attribute, args: ['nodechildren.bind',] }] },
|
|
328
|
-
{ type: undefined, decorators: [{ type: Attribute, args: ['nodeid.bind',] }] }
|
|
401
|
+
{ type: Injector }
|
|
329
402
|
];
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvdHJlZS9zcmMvdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1SSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBSXhELE1BQU0sV0FBVyxHQUFHLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDLENBQUM7QUFDbkUsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUM7QUFVMUMsTUFBTSxPQUFPLGFBQWMsU0FBUSxpQkFBaUI7SUFzQ2hELFlBQ0ksR0FBYSxFQUN3QixhQUFhLEVBQ2IsYUFBYSxFQUNkLFlBQVksRUFDUixnQkFBZ0IsRUFDdEIsVUFBVTtRQUU1QyxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBTmEsa0JBQWEsR0FBYixhQUFhLENBQUE7UUFDYixrQkFBYSxHQUFiLGFBQWEsQ0FBQTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFBO1FBQ1IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFBO1FBQ3RCLGVBQVUsR0FBVixVQUFVLENBQUE7UUF2QnhDLFlBQU8sR0FBRztZQUNkLElBQUksRUFBRTtnQkFDRixVQUFVLEVBQUU7b0JBQ1IsTUFBTSxFQUFFLEtBQUs7aUJBQ2hCO2FBQ0o7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O2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3hDOzs7WUFqQjhCLFFBQVE7NENBMEQ5QixTQUFTLFNBQUMsZ0JBQWdCOzRDQUMxQixTQUFTLFNBQUMsZ0JBQWdCOzRDQUMxQixTQUFTLFNBQUMsZUFBZTs0Q0FDekIsU0FBUyxTQUFDLG1CQUFtQjs0Q0FDN0IsU0FBUyxTQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGUsIENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFQUExZX1NUWUxFU19UWVBFLCBnZXRFdmFsdWF0ZWREYXRhLCBnZXRPcmRlcmVkRGF0YXNldCwgcHJvdmlkZUFzV2lkZ2V0UmVmLCBTdHlsYWJsZUNvbXBvbmVudCwgc3R5bGVyIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi90cmVlLnByb3BzJztcbmltcG9ydCB7ICRwYXJzZUV2ZW50LCBnZXRDbG9uZWRPYmplY3QgfSBmcm9tIFwiQHdtL2NvcmVcIjtcblxuZGVjbGFyZSBjb25zdCBfLCAkO1xuXG5jb25zdCBXSURHRVRfSU5GTyA9IHt3aWRnZXRUeXBlOiAnd20tdHJlZScsIGhvc3RDbGFzczogJ2FwcC10cmVlJ307XG5jb25zdCBkZWZhdWx0VHJlZUljb25DbGFzcyA9ICdwbHVzLW1pbnVzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1bFt3bVRyZWVdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihUcmVlQ29tcG9uZW50KVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG5cbiAgICBwcml2YXRlIG5vZGVzOiBBcnJheTxhbnk+O1xuICAgIHByaXZhdGUgelRyZWVOb2RlczogQXJyYXk8YW55PjtcbiAgICBwcml2YXRlIGxldmVsO1xuICAgIHByaXZhdGUgdHJlZUNsYXNzO1xuICAgIHByaXZhdGUgbmFtZTtcbiAgICBwcml2YXRlIHpUcmVlO1xuXG4gICAgcHVibGljIGRhdGF2YWx1ZTogc3RyaW5nO1xuICAgIHB1YmxpYyB0cmVlaWNvbnM6IHN0cmluZztcbiAgICBwdWJsaWMgc2VsZWN0ZWRpdGVtOiBhbnk7XG4gICAgcHVibGljIG5vZGVpZDogc3RyaW5nO1xuICAgIHB1YmxpYyBub2RlYWN0aW9uOiBzdHJpbmc7XG4gICAgcHVibGljIG5vZGVjbGljazogc3RyaW5nO1xuICAgIHB1YmxpYyBub2RlbGFiZWw6IHN0cmluZztcbiAgICBwdWJsaWMgbm9kZWljb246IHN0cmluZztcbiAgICBwdWJsaWMgbm9kZWNoaWxkcmVuOiBzdHJpbmc7XG4gICAgcHVibGljIG9yZGVyYnk6IHN0cmluZztcblxuICAgIHByaXZhdGUgc2V0dGluZyA9IHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgc2ltcGxlRGF0YToge1xuICAgICAgICAgICAgICAgIGVuYWJsZTogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdmlldzoge1xuICAgICAgICAgICAgZGJsQ2xpY2tFeHBhbmQ6IGZhbHNlLFxuICAgICAgICAgICAgZm9udENzczoge1xuICAgICAgICAgICAgICAgICdmb250LWF3ZXNvbWUnOiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzd2l0Y2hJY29uOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgY2hlY2s6IHt9LFxuICAgICAgICBjYWxsYmFjazoge31cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGF2YWx1ZS5iaW5kJykgcHJpdmF0ZSBiaW5kZGF0YXZhbHVlLFxuICAgICAgICBAQXR0cmlidXRlKCdub2RlbGFiZWwuYmluZCcpIHByaXZhdGUgYmluZG5vZGVsYWJlbCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbm9kZWljb24uYmluZCcpIHByaXZhdGUgYmluZG5vZGVpY29uLFxuICAgICAgICBAQXR0cmlidXRlKCdub2RlY2hpbGRyZW4uYmluZCcpIHByaXZhdGUgYmluZG5vZGVjaGlsZHJlbixcbiAgICAgICAgQEF0dHJpYnV0ZSgnbm9kZWlkLmJpbmQnKSBwcml2YXRlIGJpbmRub2RlaWRcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfSU5GTyk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMsIEFQUExZX1NUWUxFU19UWVBFLkNPTlRBSU5FUik7XG5cbiAgICAgICAgdGhpcy5zZXR0aW5nLnZpZXdbJ25vZGVDbGFzc2VzJ10gICAgPSB0aGlzLnNldE5vZGVDbGFzc2VzO1xuICAgICAgICB0aGlzLnNldHRpbmcuY2FsbGJhY2tbXCJvbkNsaWNrXCJdICAgID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jYWxsYmFja1tcIm9uRXhwYW5kXCJdICAgPSB0aGlzLm9uRXhwYW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jYWxsYmFja1tcIm9uQ29sbGFwc2VcIl0gPSB0aGlzLm9uQ29sbGFwc2UuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzZXQnOlxuICAgICAgICAgICAgICAgIHRoaXMubm9kZXMgPSB0aGlzLmdldE5vZGVzKG52KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xldmVscyc6XG4gICAgICAgICAgICAgICAgdGhpcy5sZXZlbCA9IG52O1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9kZWljb24nOlxuICAgICAgICAgICAgICAgIHRoaXMubm9kZWljb24gPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vZGVsYWJlbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlbGFiZWwgPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vZGVjaGlsZHJlbic6XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlY2hpbGRyZW4gPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29yZGVyYnknOlxuICAgICAgICAgICAgICAgIHRoaXMub3JkZXJieSA9IG52O1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndHJlZWljb25zJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVpY29ucyA9IG52O1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY2xhc3MnOlxuICAgICAgICAgICAgICAgIHRoaXMudHJlZUNsYXNzID0gbnY7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUcmVlVGVtcGxhdGUodGhpcy50cmVlQ2xhc3MpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGV4cGFuZHMgdGhlIHRyZWUgbm9kZXMgaWYgdGhlIHByb3BlcnR5IGlzIHNlbGVjdGVkLlxuICAgIHByaXZhdGUgZXhwYW5kVHJlZShsZXZlbCwgbm9kZSwgY2hpbGRMZXZlbCkge1xuICAgICAgICBub2RlLm1hcChjaGlsZE5vZGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZE5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRMZXZlbCA8IGxldmVsKSB7XG4gICAgICAgICAgICAgICAgY2hpbGROb2RlLm9wZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZShsZXZlbCwgY2hpbGRyZW4sIGNoaWxkTGV2ZWwrMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoaWxkTGV2ZWwgPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2V0cyB0aGUgdGVtcGxhdGUgZm9yIHRoZSB0cmVlIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eSBzZWxlY3RlZC5cbiAgICBwcml2YXRlIHNldFRyZWVUZW1wbGF0ZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgIGlmIChjbGFzc0xpc3QuaW5jbHVkZXMoJ0NsYXNzaWMnKSkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrW1wiZW5hYmxlXCJdID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZihjbGFzc0xpc3QuaW5jbHVkZXMoJ0NoZWNrYm94JykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImVuYWJsZVwiXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tbXCJjaGtTdHlsZVwiXSA9ICdjaGVja2JveCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmluY2x1ZGVzKCdSYWRpbycpKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY2hlY2tbXCJlbmFibGVcIl0gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrW1wiY2hrU3R5bGVcIl0gPSAncmFkaW8nO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrW1wicmFkaW9UeXBlXCJdID0gXCJhbGxcIjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGV4dHJhY3RzIG5vZGVzIGZyb20gc3RyaW5nIGZvcm1hdFxuICAgIHByaXZhdGUgZ2V0Tm9kZXNGcm9tU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnLCcpLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAnbGFiZWwnOiBpdGVtICYmIGl0ZW0udHJpbSgpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBnZXRzIHRoZSBub2RlcyBhbmQgb3JkZXJzIHRoZSBub2RlcyBpZiByZXF1aXJlZFxuICAgIHByaXZhdGUgZ2V0Tm9kZXMobmV3VmFsKSB7XG4gICAgICAgIGxldCBub2RlcztcbiAgICAgICAgaWYgKF8uaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgICAgICBub2RlcyA9IGdldE9yZGVyZWREYXRhc2V0KG5ld1ZhbCwgdGhpcy5vcmRlcmJ5KTtcbiAgICAgICAgfSBlbHNlIGlmIChfLmlzT2JqZWN0KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIG5vZGVzID0gW25ld1ZhbF07XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhuZXdWYWwpICYmICFfLmlzRW1wdHkobmV3VmFsKSkge1xuICAgICAgICAgICAgbmV3VmFsID0gbmV3VmFsLnRyaW0oKTtcbiAgICAgICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICBub2RlcyA9IHRoaXMuZ2V0Tm9kZXNGcm9tU3RyaW5nKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgIH1cblxuXG4gICAgLy8gYWRkcyBjbGFzcyB0byB0aGUgbm9kZXMgaW5vcmRlciB0byBhZGQgaWNvbnMgdG8gcmVzcGVjdGl2ZSBub2RlLlxuICAgIHByaXZhdGUgc2V0Tm9kZUNsYXNzZXModHJlZUlkLCB0cmVlTm9kZSkge1xuICAgICAgICByZXR1cm4gdHJlZU5vZGUuaWNvbiA/IHthZGQ6IFtgJHt0cmVlTm9kZS5pY29ufWBdfSA6ICcnO1xuICAgIH07XG5cbiAgICAvLyBhZGRzIHRyZWUgaWNvbnMgdG8gdGhlIG5vZGVzIG9uIGxvYWQgb2YgdGhlIHRyZWVcbiAgICBwcml2YXRlIGNoYW5nZVRyZWVJY29ucyhudikge1xuICAgICAgICBsZXQgZWxlQ2xvc2UgPSAkKCd1bFtuYW1lPVwiJyArIHRoaXMubmFtZSArICdcIl0gbGkgc3Bhbi5idXR0b24uc3dpdGNoJyk7XG5cbiAgICAgICAgJChlbGVDbG9zZSkubWFwKChpZHgsIGVsZSkgPT4ge1xuICAgICAgICAgICAgJChlbGUpLmFkZENsYXNzKG52KTtcbiAgICAgICAgICAgICQoZWxlKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAkKGVsZSkuYWRkQ2xhc3MobnYpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyB0aGUgbm9kZSBwYXRoXG4gICAgcHJpdmF0ZSBnZXRQYXRoKHRyZWVOb2RlLCBwYXRoKSB7XG4gICAgICAgIGlmKHRyZWVOb2RlLmdldFBhcmVudE5vZGUoKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGF0aCA9IFwiL1wiICsgdHJlZU5vZGUubmFtZSArIHBhdGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXRoID0gdGhpcy5nZXRQYXRoKHRyZWVOb2RlLmdldFBhcmVudE5vZGUoKSwgcGF0aCkgKyBcIi9cIiArIHRyZWVOb2RlLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgLy8gYmluZHMgdGhlIGNsaWNrIGV2ZW50IHRvIGFsbCBub2RlcyB0byBvcGVuIHRoZSBjaGlsZCBub2Rlc1xuICAgIHB1YmxpYyBvbkNsaWNrKGV2ZW50LCB0cmVlSWQsIHRyZWVOb2RlLCBjbGlja0ZsYWcpIHtcbiAgICAgICAgaWYodGhpcy5ub2RlY2xpY2sgPT09IFwiZXhwYW5kXCIpIHtcbiAgICAgICAgICAgIHZhciBub2RlcyA9IHRoaXMuelRyZWUuZ2V0U2VsZWN0ZWROb2RlcygpO1xuICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aD4wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmROb2RlKG5vZGVzWzBdLCAhbm9kZXNbMF0ub3BlbiwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3ROb2RlKGV2ZW50LCB0cmVlTm9kZSk7XG4gICAgfVxuXG4gICAgLy8gQWRkcyB0cmVlIGljb24gY2xhc3NlcyB0byBjaGlsZCBub2RlcyB3aGVuIGV4cGFuZGVkXG4gICAgcHVibGljIG9uRXhwYW5kKGV2ZW50LCB0cmVlSWQsIHRyZWVOb2RlKSB7XG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IHBhdGggPSB0aGlzLmdldFBhdGgodHJlZU5vZGUsIFwiXCIpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50UGFyYW1zID0ge1xuICAgICAgICAgICAgJyRldmVudCcgIDogZXZlbnQsXG4gICAgICAgICAgICBcIiRpdGVtXCIgICA6IGdldENsb25lZE9iamVjdCh0cmVlTm9kZS5kYXRhKSxcbiAgICAgICAgICAgIFwiJHBhdGhcIiA6IHBhdGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdleHBhbmQnLCBldmVudFBhcmFtcyk7XG5cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0cmVlTm9kZS5jaGlsZHJlbjtcbiAgICAgICAgY2hpbGRyZW4/Lm1hcCgoZWwpID0+IHtcbiAgICAgICAgICAgIGlmIChlbC5pc1BhcmVudCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGUgPSAkKGAjJHtlbC50SWR9X3N3aXRjaGApO1xuICAgICAgICAgICAgICAgICQoZWxlKS5hZGRDbGFzcyhzZWxmLnRyZWVpY29ucyB8fCBkZWZhdWx0VHJlZUljb25DbGFzcyk7XG4gICAgICAgICAgICAgICAgJChlbGUpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoZWxlKS5hZGRDbGFzcyhzZWxmLnRyZWVpY29ucyB8fCBkZWZhdWx0VHJlZUljb25DbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db2xsYXBzZShldmVudCwgdHJlZUlkLCB0cmVlTm9kZSkge1xuICAgICAgICBsZXQgcGF0aCA9IHRoaXMuZ2V0UGF0aCh0cmVlTm9kZSwgXCJcIik7XG4gICAgICAgIGNvbnN0IGV2ZW50UGFyYW1zID0ge1xuICAgICAgICAgICAgJyRldmVudCcgIDogZXZlbnQsXG4gICAgICAgICAgICBcIiRpdGVtXCIgICA6IGdldENsb25lZE9iamVjdCh0cmVlTm9kZS5kYXRhKSxcbiAgICAgICAgICAgIFwiJHBhdGhcIiA6IHBhdGhcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjb2xsYXBzZScsIGV2ZW50UGFyYW1zKTtcbiAgICB9XG5cbiAgICAvLyBmdW5jdGlvbiB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb2Ygb2JqZWN0c1xuICAgIHByaXZhdGUgY29uc3RydWN0WlRyZWVEYXRhKGRhdGEsIHpUcmVlRGF0YSkge1xuICAgICAgICBkYXRhLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB6Tm9kZSA9IHt9O1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGdldEV2YWx1YXRlZERhdGEobm9kZSwge2ZpZWxkOiB0aGlzLm5vZGVsYWJlbCwgYmluZEV4cHJlc3Npb246IHRoaXMuYmluZG5vZGVsYWJlbH0sIHRoaXMudmlld1BhcmVudCkgfHwgbm9kZS5sYWJlbDtcbiAgICAgICAgICAgIGNvbnN0IGljb24gPSBnZXRFdmFsdWF0ZWREYXRhKG5vZGUsIHtmaWVsZDogdGhpcy5ub2RlaWNvbiwgYmluZEV4cHJlc3Npb246IHRoaXMuYmluZG5vZGVpY29ufSwgdGhpcy52aWV3UGFyZW50KSB8fCBub2RlLmljb247XG4gICAgICAgICAgICBjb25zdCBub2RlSWQgPSBnZXRFdmFsdWF0ZWREYXRhKG5vZGUsIHtmaWVsZDogdGhpcy5ub2RlaWQsIGJpbmRFeHByZXNzaW9uOiB0aGlzLmJpbmRub2RlaWR9LCB0aGlzLnZpZXdQYXJlbnQpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBnZXRFdmFsdWF0ZWREYXRhKG5vZGUsIHtmaWVsZDogdGhpcy5ub2RlY2hpbGRyZW4sIGJpbmRFeHByZXNzaW9uOiB0aGlzLmJpbmRub2RlY2hpbGRyZW59LCB0aGlzLnZpZXdQYXJlbnQpIHx8IG5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgICB6Tm9kZVsnbmFtZSddID0gbmFtZTtcbiAgICAgICAgICAgIHpOb2RlWydpY29uJ10gPSBpY29uO1xuICAgICAgICAgICAgek5vZGVbJ25vZGVJZCddID0gbm9kZUlkO1xuICAgICAgICAgICAgek5vZGVbJ2RhdGEnXSA9IGdldENsb25lZE9iamVjdChub2RlKTtcbiAgICAgICAgICAgIGlmIChfLmlzQXJyYXkoY2hpbGRyZW4pICYmIGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHpOb2RlWydjaGlsZHJlbiddID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RaVHJlZURhdGEoY2hpbGRyZW4sIHpOb2RlWydjaGlsZHJlbiddKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpUcmVlRGF0YS5wdXNoKHpOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVycyB0aGUgdHJlZSBvbiB0byB0aGUgZG9tXG4gICAgcHVibGljIHJlbmRlclRyZWUoKSB7XG4gICAgICAgIHRoaXMuelRyZWVOb2RlcyA9IFtdO1xuICAgICAgICBpZih0aGlzLm5vZGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5uYW1lKTtcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0WlRyZWVEYXRhKHRoaXMubm9kZXMsIHRoaXMuelRyZWVOb2Rlcyk7XG4gICAgICAgICAgICBpZih0aGlzLmxldmVsID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZSh0aGlzLmxldmVsLCB0aGlzLnpUcmVlTm9kZXMsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuelRyZWUgPSAkLmZuLnpUcmVlLmluaXQoJCgndWxbbmFtZT1cIicgKyB0aGlzLm5hbWUgKyAnXCJdJyksIHRoaXMuc2V0dGluZywgdGhpcy56VHJlZU5vZGVzKTtcbiAgICAgICAgJC5mbi56VHJlZUtleWJvYXJkTmF2aWdhdGlvbih0aGlzLnpUcmVlLCAkKCd1bFtuYW1lPVwiJyArIHRoaXMubmFtZSArICdcIl0nKSwgbnVsbCwgdGhpcy50cmVlaWNvbnMgfHwgZGVmYXVsdFRyZWVJY29uQ2xhc3MpO1xuICAgICAgICB0aGlzLnBvc3RSZW5kZXJUcmVlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRDaGVja2VkKHpOb2RlLCBub2RlKSB7XG4gICAgICAgIG5vZGUuY2hlY2tlZCA9IHpOb2RlLmNoZWNrZWQ7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gZ2V0RXZhbHVhdGVkRGF0YShub2RlLCB7ZmllbGQ6IHRoaXMubm9kZWNoaWxkcmVuLCBiaW5kRXhwcmVzc2lvbjogdGhpcy5iaW5kbm9kZWNoaWxkcmVufSwgdGhpcy52aWV3UGFyZW50KSB8fCBub2RlLmNoaWxkcmVuO1xuICAgICAgICBpZihjaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZCh6Tm9kZS5jaGlsZHJlbltpbmRleF0sIG5vZGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdE5vZGUoZXZlbnQsIG5vZGUpIHtcbiAgICAgICAgY29uc3QgZGVTZWxlY3RFbG0gPSAkKGAuYXBwLXRyZWVbbmFtZT0ke3RoaXMubmFtZX1dIGxpW3RyZWVub2RlXS5zZWxlY3RlZGApO1xuICAgICAgICBkZVNlbGVjdEVsbS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcblxuICAgICAgICBpZighbm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdEVsbSA9ICQoYCMke25vZGUudElkfTpoYXMoLmN1clNlbGVjdGVkTm9kZSlgKTtcbiAgICAgICAgc2VsZWN0RWxtLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xuXG5cbiAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gKHRoaXMudHJlZUNsYXNzIHx8IFwiXCIpLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgaWYgKGNsYXNzTGlzdC5pbmNsdWRlcygnQ2hlY2tib3gnKSB8fCBjbGFzc0xpc3QuaW5jbHVkZXMoJ1JhZGlvJykpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZChub2RlLCBub2RlLmRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UGF0aChub2RlLCBcIlwiKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gPSBnZXRDbG9uZWRPYmplY3Qobm9kZS5kYXRhKSB8fCB7fTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0ucGF0aCA9IHBhdGg7XG5cbiAgICAgICAgY29uc3QgZXZlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICAnJGV2ZW50JyAgOiBldmVudCxcbiAgICAgICAgICAgIFwiJGl0ZW1cIiAgIDogZ2V0Q2xvbmVkT2JqZWN0KG5vZGUuZGF0YSksXG4gICAgICAgICAgICBcIiRwYXRoXCIgOiBwYXRoXG4gICAgICAgIH07XG5cbiAgICAgICAgLy9bVG9kby1DU1BdOiB0aGlzIGRhdGEgd2lsbCBiZSBkeW5hbWljLCBjYW4gbm90IGdlbmVyYXRlIGZ1bmN0aW9uIHVwZnJvbnRcbiAgICAgICAgY29uc3Qgbm9kZUFjdGlvbiA9IG5vZGUuZGF0YVt0aGlzLm5vZGVhY3Rpb24gfHwgJ2FjdGlvbiddO1xuICAgICAgICBpZiAobm9kZUFjdGlvbikge1xuICAgICAgICAgICAgJHBhcnNlRXZlbnQobm9kZUFjdGlvbikodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCBldmVudFBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHBhbmROb2RlKG5vZGUsIGV4cGFuZCwgZXZlbnRGbGFnKSB7XG4gICAgICAgIHRoaXMuelRyZWUuZXhwYW5kTm9kZShub2RlLCBleHBhbmQsIGZhbHNlLCBmYWxzZSwgZXZlbnRGbGFnKTtcbiAgICAgICAgY29uc3QgZWwgPSAkKGAjJHtub2RlLnRJZH1fc3dpdGNoYCk7XG4gICAgICAgICQoZWwpLmFkZENsYXNzKHRoaXMudHJlZWljb25zIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvc3RSZW5kZXJUcmVlKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVHJlZUljb25zKHRoaXMudHJlZWljb25zIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YXZhbHVlICYmICF0aGlzLnNlbGVjdGVkaXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy56VHJlZS5nZXROb2RlcygpO1xuICAgICAgICAgICAgICAgIGxldCBub2RlO1xuICAgICAgICAgICAgICAgIGlmKG5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhdmFsdWUgPT09ICdGaXJzdE5vZGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kYXRhdmFsdWUgPT09ICdMYXN0Tm9kZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy56VHJlZS5zZWxlY3ROb2RlKG5vZGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3ROb2RlKHVuZGVmaW5lZCwgbm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kTm9kZShub2RlLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCAyMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0QnlJZCh2YWx1ZT8pIHtcbiAgICAgICAgY29uc3Qgc2ltcGxlTm9kZXMgPSB0aGlzLnpUcmVlPy50cmFuc2Zvcm1Ub0FycmF5KHRoaXMuelRyZWUuZ2V0Tm9kZXMoKSk7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBzaW1wbGVOb2Rlcz8uZmluZChub2RlID0+IHZhbHVlID09PSBub2RlLm5vZGVJZCk7XG4gICAgICAgIGlmKG5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuelRyZWUuc2VsZWN0Tm9kZShub2RlLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGUodW5kZWZpbmVkLCBub2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcml2YXRlIGRlc2VsZWN0QnlJZCh2YWx1ZT8pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gPSB7fTtcbiAgICAgICAgdGhpcy5zZWxlY3RCeUlkKCk7XG4gICAgfVxufVxuIl19
|
|
403
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvdHJlZS9zcmMvdHJlZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUl6QyxNQUFNLFdBQVcsR0FBRyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxDQUFDO0FBQ25FLE1BQU0sb0JBQW9CLEdBQUcsWUFBWSxDQUFDO0FBVTFDLE1BQU0sT0FBTyxhQUFjLFNBQVEsaUJBQWlCO0lBeUNoRCxZQUNJLEdBQWE7UUFFYixLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBNUJwQixZQUFPLEdBQUc7WUFDZCxJQUFJLEVBQUU7Z0JBQ0YsVUFBVSxFQUFFO29CQUNSLE1BQU0sRUFBRSxLQUFLO2lCQUNoQjtnQkFDRCxHQUFHLEVBQUU7b0JBQ0QsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLElBQUksRUFBRSxPQUFPO2lCQUNoQjthQUNKO1lBQ0QsSUFBSSxFQUFFO2dCQUNGLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixPQUFPLEVBQUU7b0JBQ0wsY0FBYyxFQUFFLElBQUk7aUJBQ3JCO2dCQUNILFVBQVUsRUFBRSxFQUVYO2FBQ0o7WUFDRCxLQUFLLEVBQUUsRUFDTjtZQUNELFFBQVEsRUFBRSxFQUNUO1NBQ0osQ0FB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LENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzVDO1FBRUwsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQzs7QUE3YU0sNkJBQWUsR0FBRyxhQUFhLEVBQUUsQ0FBQzs7WUFUNUMsU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxZQUFZO2dCQUN0Qiw0REFBb0M7Z0JBQ3BDLFNBQVMsRUFBRTtvQkFDUCxrQkFBa0IsQ0FBQyxhQUFhLENBQUM7aUJBQ3BDO2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3hDOzs7WUFuQmtCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5pbXBvcnQgeyBBUFBMWV9TVFlMRVNfVFlQRSwgZ2V0T3JkZXJlZERhdGFzZXQsIHByb3ZpZGVBc1dpZGdldFJlZiwgU3R5bGFibGVDb21wb25lbnQsIHN0eWxlciB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuaW1wb3J0IHsgcmVnaXN0ZXJQcm9wcyB9IGZyb20gJy4vdHJlZS5wcm9wcyc7XG5pbXBvcnQge2dldENsb25lZE9iamVjdH0gZnJvbSBcIkB3bS9jb3JlXCI7XG5cbmRlY2xhcmUgY29uc3QgXywgJDtcblxuY29uc3QgV0lER0VUX0lORk8gPSB7d2lkZ2V0VHlwZTogJ3dtLXRyZWUnLCBob3N0Q2xhc3M6ICdhcHAtdHJlZSd9O1xuY29uc3QgZGVmYXVsdFRyZWVJY29uQ2xhc3MgPSAncGx1cy1taW51cyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndWxbd21UcmVlXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RyZWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoVHJlZUNvbXBvbmVudClcbiAgICBdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuXG4gICAgcHVibGljIHNlbGVjdGVkaXRlbTtcbiAgICBwcml2YXRlIG5vZGVzO1xuICAgIHByaXZhdGUgbGV2ZWw7XG4gICAgcHJpdmF0ZSBvcmRlcmJ5O1xuICAgIHByaXZhdGUgbm9kZWxhYmVsO1xuICAgIHByaXZhdGUgdHJlZWljb247XG4gICAgcHJpdmF0ZSBub2RlY2hpbGRyZW47XG4gICAgcHJpdmF0ZSBub2RlY2xpY2s7XG4gICAgcHJpdmF0ZSB0cmVlQ2xhc3M7XG4gICAgcHJpdmF0ZSBub2RlaWNvbjtcbiAgICBwcml2YXRlIG5hbWU7XG4gICAgcHJpdmF0ZSBkYXRhdmFsdWU7XG5cbiAgICBwcml2YXRlIHNldHRpbmcgPSB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHNpbXBsZURhdGE6IHtcbiAgICAgICAgICAgICAgICBlbmFibGU6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2xhYmVsJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2aWV3OiB7XG4gICAgICAgICAgICBkYmxDbGlja0V4cGFuZDogZmFsc2UsXG4gICAgICAgICAgICBmb250Q3NzOiB7XG4gICAgICAgICAgICAgICAgJ2ZvbnQtYXdlc29tZSc6IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN3aXRjaEljb246IHtcblxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY2hlY2s6IHtcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2s6IHtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvclxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9JTkZPKTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcywgQVBQTFlfU1RZTEVTX1RZUEUuQ09OVEFJTkVSKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RhdGFzZXQnOlxuICAgICAgICAgICAgICAgIHRoaXMubm9kZXMgPSB0aGlzLmdldE5vZGVzKG52KTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmxldmVsID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZFRyZWUodGhpcy5sZXZlbCwgdGhpcy5ub2RlcywgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGV2ZWxzJzpcbiAgICAgICAgICAgICAgICBpZiAobnYgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGV2ZWwgPSBudjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0cmVlaWNvbnMnOlxuICAgICAgICAgICAgICAgIHRoaXMudHJlZWljb24gPSBudjtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vZGVsYWJlbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmRhdGEua2V5Lm5hbWUgPSB0aGlzLmxhYmVsS2V5O1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9kZWNoaWxkcmVuJzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZGF0YS5rZXkuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuS2V5O1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbm9kZWljb24nOlxuICAgICAgICAgICAgICAgIHRoaXMubm9kZWljb24gPSB0aGlzLmljb25LZXk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUcmVlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvcmRlcmJ5JzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclRyZWUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NsYXNzJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDbGFzcyA9IG52O1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGV4cGFuZHMgdGhlIHRyZWUgbm9kZXMgaWYgdGhlIHByb3BlcnR5IGlzIHNlbGVjdGVkLlxuICAgIHByaXZhdGUgZXhwYW5kVHJlZShsZXZlbCwgbm9kZSwgY2hpbGRMZXZlbCkge1xuICAgICAgICBub2RlLm1hcChjaGlsZE5vZGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgIShcIm9wZW5cIiBpbiBjaGlsZE5vZGUpICYmIGNoaWxkTGV2ZWwgPCBsZXZlbCkge1xuICAgICAgICAgICAgICAgIGNoaWxkTm9kZVtcIm9wZW5cIl0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kVHJlZShsZXZlbCwgY2hpbGRyZW4sIGNoaWxkTGV2ZWwrMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoaWxkTGV2ZWwgPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc2V0cyB0aGUgdGVtcGxhdGUgZm9yIHRoZSB0cmVlIGJhc2VkIG9uIHRoZSBwcm9wZXJ0eSBzZWxlY3RlZC5cbiAgICBwcml2YXRlIHNldFRyZWVUZW1wbGF0ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICdDbGFzc2ljJykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrW1wiZW5hYmxlXCJdID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZih2YWx1ZSA9PT0gJ0NoZWNrYm94Jykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrW1wiZW5hYmxlXCJdID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImNoa1N0eWxlXCJdID0gJ2NoZWNrYm94JztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ1JhZGlvJykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrW1wiZW5hYmxlXCJdID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcImNoa1N0eWxlXCJdID0gJ3JhZGlvJztcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jaGVja1tcInJhZGlvVHlwZVwiXSA9IFwiYWxsXCI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBleHRyYWN0cyBub2RlcyBmcm9tIHN0cmluZyBmb3JtYXRcbiAgICBwcml2YXRlIGdldE5vZGVzRnJvbVN0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ2xhYmVsJzogaXRlbSAmJiBpdGVtLnRyaW0oKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gZ2V0cyB0aGUgbm9kZXMgYW5kIG9yZGVycyB0aGUgbm9kZXMgaWYgcmVxdWlyZWRcbiAgICBwcml2YXRlIGdldE5vZGVzKG5ld1ZhbCkge1xuICAgICAgICBsZXQgbm9kZXM7XG4gICAgICAgIGlmIChfLmlzQXJyYXkobmV3VmFsKSkge1xuICAgICAgICAgICAgbm9kZXMgPSBnZXRPcmRlcmVkRGF0YXNldChuZXdWYWwsIHRoaXMub3JkZXJieSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc09iamVjdChuZXdWYWwpKSB7XG4gICAgICAgICAgICBub2RlcyA9IFtuZXdWYWxdO1xuICAgICAgICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcobmV3VmFsKSAmJiAhXy5pc0VtcHR5KG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIG5ld1ZhbCA9IG5ld1ZhbC50cmltKCk7XG4gICAgICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgbm9kZXMgPSB0aGlzLmdldE5vZGVzRnJvbVN0cmluZyhuZXdWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlcztcbiAgICB9XG5cblxuICAgIC8vIGFkZHMgY2xhc3MgdG8gdGhlIG5vZGVzIGlub3JkZXIgdG8gYWRkIGljb25zIHRvIHJlc3BlY3RpdmUgbm9kZS5cbiAgICBwcml2YXRlIHNldE5vZGVjbGFzc2VzKHRyZWVJZCwgdHJlZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRyZWVOb2RlLmljb24gPyB7YWRkOiBbYCR7dHJlZU5vZGUuaWNvbn1gXX0gOiAnJztcbiAgICB9O1xuXG4gICAgLy8gU2V0cyB0aGUgbm9kZSBsYWJlbCB3aXRoIGFueSBpY29uIGlmIGJvdW5kIHRvXG4gICAgcHJpdmF0ZSBzZXROb2RlRGF0YShub2RlcywgZGVwdGgsIGxldmVsLCBwYXJlbnROb2RlLCB0eXBlKSB7XG4gICAgICAgIGlmKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgICBub2Rlcy5tYXAobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVEYXRhKGNoaWxkcmVuLCBkZXB0aCwgbGV2ZWwgLCBwYXJlbnROb2RlLCB0eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuaWNvbiAmJiB0aGlzLm5vZGVsYWJlbCA9PSAnaWNvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVt0eXBlXSA9IG5vZGUuaWNvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYobm9kZS5uYW1lICYmIHRoaXMubm9kZWxhYmVsID09ICduYW1lJykge1xuICAgICAgICAgICAgICAgICAgICBub2RlW3R5cGVdID0gbm9kZS5uYW1lO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZXMubWFwKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbihub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgbGV2ZWwgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRlcHRoID09PSBsZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb2RlRGF0YShjaGlsZHJlbiwgZGVwdGgsIGxldmVsIC0gMSwgcGFyZW50Tm9kZSwgdHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gMSAmJiAodHlwZSA9PT0gXCJuYW1lXCIgPyB0aGlzLm5vZGVsYWJlbC5pbmNsdWRlcyhcImxhYmVsXCIpIHx8IHRoaXMubm9kZWxhYmVsLmluY2x1ZGVzKFwibmFtZVwiKTogdGhpcy5ub2RlaWNvbi5pbmNsdWRlcyhcImxhYmVsXCIpIHx8IHRoaXMubm9kZWljb24uaW5jbHVkZXMoXCJuYW1lXCIpICkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZVt0eXBlXSA9IG5vZGUubmFtZSB8fCBub2RlLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYobGV2ZWwgPT09IDEgJiYgKG5vZGUuaWNvbiAhPT0gdW5kZWZpbmVkKSAmJiAodHlwZSA9PT0gXCJuYW1lXCIgPyB0aGlzLm5vZGVsYWJlbC5pbmNsdWRlcyhcImljb25cIikgOiB0aGlzLm5vZGVpY29uLmluY2x1ZGVzKFwiaWNvblwiKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZVt0eXBlXSA9IG5vZGUuaWNvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkcyB0cmVlIGljb25zIHRvIHRoZSBub2RlcyBvbiBsb2FkIG9mIHRoZSB0cmVlXG4gICAgcHJpdmF0ZSBjaGFuZ2VUcmVlSWNvbnMobnYpIHtcbiAgICAgICAgbGV0IGVsZUNsb3NlID0gJCgndWxbbmFtZT1cIicgKyB0aGlzLm5hbWUgKyAnXCJdIGxpIHNwYW4uYnV0dG9uLnN3aXRjaCcpO1xuXG4gICAgICAgICQoZWxlQ2xvc2UpLm1hcCgoaWR4LCBlbGUpID0+IHtcbiAgICAgICAgICAgICQoZWxlKS5hZGRDbGFzcyhudik7XG4gICAgICAgICAgICAkKGVsZSkub24oXCJjbGlja1wiLGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgJChlbGUpLmFkZENsYXNzKG52KTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGF0aCh0cmVlTm9kZSwgcGF0aCkge1xuICAgICAgICBpZih0cmVlTm9kZS5nZXRQYXJlbnROb2RlKCkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHBhdGggPSBcIi9cIiArIHRyZWVOb2RlW3RoaXMubGFiZWxLZXldICsgcGF0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhdGggPSB0aGlzLmdldFBhdGgodHJlZU5vZGUuZ2V0UGFyZW50Tm9kZSgpLCBwYXRoKSArIFwiL1wiICsgdHJlZU5vZGVbdGhpcy5sYWJlbEtleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgLy8gYmluZHMgdGhlIGNsaWNrIGV2ZW50IHRvIGFsbCBub2RlcyB0byBvcGVuIHRoZSBjaGlsZCBub2Rlc1xuICAgIHB1YmxpYyBvbkNsaWNrKGV2ZW50LCB0cmVlSWQsIHRyZWVOb2RlLCBjbGlja0ZsYWcpIHtcbiAgICAgICAgaWYodGhpcy5ub2RlY2xpY2sgPT09IFwiZXhwYW5kXCIpIHtcbiAgICAgICAgICAgIHZhciBub2RlcyA9IHRoaXMudHJlZU9iai5nZXRTZWxlY3RlZE5vZGVzKCk7XG4gICAgICAgICAgICBpZiAobm9kZXMubGVuZ3RoPjApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZE5vZGUobm9kZXNbMF0sICFub2Rlc1swXS5vcGVuLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcGF0aCA9IHRoaXMuZ2V0UGF0aCh0cmVlTm9kZSwgXCJcIik7XG5cbiAgICAgICAgY29uc3QgZXZlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICAnJGV2ZW50JyAgOiBldmVudCxcbiAgICAgICAgICAgIFwiJGl0ZW1cIiAgIDogdHJlZU5vZGUsXG4gICAgICAgICAgICBcIiRwYXRoXCIgOiBwYXRoXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW0odHJlZU5vZGUpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIGV2ZW50UGFyYW1zKTtcbiAgICB9XG5cbiAgICAvLyBBZGRzIHRyZWUgaWNvbiBjbGFzc2VzIHRvIGNoaWxkIG5vZGVzIHdoZW4gZXhwYW5kZWRcbiAgICBwdWJsaWMgb25FeHBhbmQoZXZlbnQsIHRyZWVJZCwgdHJlZU5vZGUpIHtcbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgcGF0aCA9IHRoaXMuZ2V0UGF0aCh0cmVlTm9kZSwgXCJcIik7XG5cbiAgICAgICAgY29uc3QgZXZlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICAnJGV2ZW50JyAgOiBldmVudCxcbiAgICAgICAgICAgIFwiJGl0ZW1cIiAgIDogdHJlZU5vZGUsXG4gICAgICAgICAgICBcIiRwYXRoXCIgOiBwYXRoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnZXhwYW5kJywgZXZlbnRQYXJhbXMpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbih0cmVlTm9kZSk7XG4gICAgICAgIGNoaWxkcmVuPy5tYXAoKGVsKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWwuaXNQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlID0gJChgIyR7ZWwudElkfV9zd2l0Y2hgKTtcbiAgICAgICAgICAgICAgICAkKGVsZSkuYWRkQ2xhc3Moc2VsZi50cmVlaWNvbiB8fCBkZWZhdWx0VHJlZUljb25DbGFzcyk7XG4gICAgICAgICAgICAgICAgJChlbGUpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoZWxlKS5hZGRDbGFzcyhzZWxmLnRyZWVpY29uIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNvbGxhcHNlKGV2ZW50LCB0cmVlSWQsIHRyZWVOb2RlKSB7XG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5nZXRQYXRoKHRyZWVOb2RlLCBcIlwiKTtcbiAgICAgICAgY29uc3QgZXZlbnRQYXJhbXMgPSB7XG4gICAgICAgICAgICAnJGV2ZW50JyAgOiBldmVudCxcbiAgICAgICAgICAgIFwiJGl0ZW1cIiAgIDogdHJlZU5vZGUsXG4gICAgICAgICAgICBcIiRwYXRoXCIgOiBwYXRoXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY29sbGFwc2UnLCBldmVudFBhcmFtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDaGlsZHJlbihub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlW3RoaXMuY2hpbGRyZW5LZXldO1xuICAgIH1cbiAgICBnZXQgY2hpbGRyZW5LZXkoKSB7XG4gICAgICAgIGlmKCF0aGlzLm5vZGVjaGlsZHJlbikge1xuICAgICAgICAgICAgcmV0dXJuICdjaGlsZHJlbic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlY2hpbGRyZW4pO1xuICAgICAgICByZXR1cm4gZGVwdGggPyB0aGlzLm5vZGVjaGlsZHJlbi5zcGxpdCgnLicpLnBvcCgpIDogdGhpcy5ub2RlY2hpbGRyZW47XG4gICAgfVxuICAgIGdldCBsYWJlbEtleSgpIHtcbiAgICAgICAgaWYoIXRoaXMubm9kZWxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2xhYmVsJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXB0aCA9IHRoaXMuY291bnREZXB0aCh0aGlzLm5vZGVsYWJlbCk7XG4gICAgICAgIHJldHVybiBkZXB0aCA/IHRoaXMubm9kZWxhYmVsLnNwbGl0KCcuJykucG9wKCkgOiB0aGlzLm5vZGVsYWJlbDtcbiAgICB9XG4gICAgZ2V0IGljb25LZXkoKSB7XG4gICAgICAgIGlmKCF0aGlzLm5vZGVpY29uKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2ljb24nO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlcHRoID0gdGhpcy5jb3VudERlcHRoKHRoaXMubm9kZWljb24pO1xuICAgICAgICByZXR1cm4gZGVwdGggPyB0aGlzLm5vZGVpY29uLnNwbGl0KCcuJykucG9wKCkgOiB0aGlzLm5vZGVpY29uO1xuICAgIH1cblxuICAgIGdldCB0cmVlT2JqKCl7XG4gICAgICAgIHJldHVybiAkLmZuLnpUcmVlLmdldFpUcmVlT2JqKGAke3RoaXMubmFtZX1gKVxuICAgIH1cblxuICAgIC8vIGZ1bmN0aW9uIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiBvYmplY3RzXG4gICAgcHJpdmF0ZSBtb2RpZnlPYmplY3RzKGFycmF5KSB7XG4gICAgICAgIGFycmF5LmZvckVhY2gob2JqID0+IHtcbiAgICAgICAgICBvYmouaWNvbiA9IG9ialt0aGlzLm5vZGVpY29uXTtcbiAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4ob2JqKTtcbiAgICAgICAgICBpZiAoY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5tb2RpZnlPYmplY3RzKGNoaWxkcmVuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgLy8gc2V0cyB0aGUgbm9kZSBjaGlsZHJlbiBwcm9wZXJ0eSB0byBwYXJlbnQgbm9kZXNcbiAgICBwcml2YXRlIHNldE5vZGVDaGlsZHJlbihub2RlcywgZGVwdGgsIGxldmVsLCBwYXJlbnROb2RlKSB7XG4gICAgICAgIGlmIChkZXB0aCA8PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbaV07XG5cbiAgICAgICAgICBpZihkZXB0aCA9PT0gbGV2ZWwpIHtcbiAgICAgICAgICAgIHBhcmVudE5vZGUgID0gbm9kZXNbaV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5nZXRDaGlsZHJlbihub2RlKTtcbiAgICAgICAgICBpZiAoY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGxldmVsID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZVt0aGlzLmNoaWxkcmVuS2V5XSA9IGNoaWxkcmVuLm1hcChjaGlsZCA9PiAoeyBbdGhpcy5sYWJlbEtleV06IGNoaWxkW3RoaXMubGFiZWxLZXldLCBbdGhpcy5jaGlsZHJlbktleV06IHRoaXMuZ2V0Q2hpbGRyZW4oY2hpbGQpLCBpY29uOiBjaGlsZFt0aGlzLmljb25LZXldIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNldE5vZGVDaGlsZHJlbihjaGlsZHJlbiwgZGVwdGggLGxldmVsIC0gMSwgcGFyZW50Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgfVxuXG4gICAgcHJpdmF0ZSBjb3VudERlcHRoKHN0cikge1xuICAgICAgICBjb25zdCByZWdleCA9IC9cXFsuKj9cXF0vZztcbiAgICAgICAgbGV0IG1hdGNoZXMgPSBzdHIubWF0Y2gocmVnZXgpO1xuICAgICAgICBsZXQgY291bnQgPSAxO1xuXG4gICAgICAgIGlmKG1hdGNoZXMgPT09IG51bGwpIHJldHVybiBjb3VudDtcblxuICAgICAgICBmb3IgKGxldCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICAgICAgY291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb3VudDtcbiAgICAgIH1cblxuXG4gICAgLy8gUmVuZGVycyB0aGUgdHJlZSBvbiB0byB0aGUgZG9tXG4gICAgcHVibGljIHJlbmRlclRyZWUoKSB7XG4gICAgICAgIGlmKHRoaXMubm9kZXMpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5uYW1lKTtcbiAgICAgICAgICAgICBpZih0aGlzLm5vZGVpY29uICYmIHRoaXMubm9kZWljb24gIT09ICdpY29uJykge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kaWZ5T2JqZWN0cyh0aGlzLm5vZGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0VHJlZVRlbXBsYXRlKHRoaXMudHJlZUNsYXNzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubm9kZWxhYmVsKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlcHRoID0wO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMubm9kZWxhYmVsLmluY2x1ZGVzKFwiY2hpbGRyZW5cIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlbGFiZWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVEYXRhKHRoaXMubm9kZXMsIGRlcHRoLCBkZXB0aCwgbnVsbCwgXCJuYW1lXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5ub2RlaWNvbikgIHtcbiAgICAgICAgICAgICAgICBsZXQgZGVwdGggPTA7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5ub2RlaWNvbi5pbmNsdWRlcyhcImNoaWxkcmVuXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcHRoID0gdGhpcy5jb3VudERlcHRoKHRoaXMubm9kZWljb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVEYXRhKHRoaXMubm9kZXMsIGRlcHRoLCBkZXB0aCwgbnVsbCwgXCJpY29uXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5ub2RlY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBsZXQgZGVwdGggPSB0aGlzLmNvdW50RGVwdGgodGhpcy5ub2RlY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIGlmKGRlcHRoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzID0gdGhpcy5zZXROb2RlQ2hpbGRyZW4odGhpcy5ub2RlcywgZGVwdGgsIGRlcHRoLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMuc2V0dGluZy52aWV3Wydub2RlQ2xhc3NlcyddID0gdGhpcy5zZXROb2RlY2xhc3NlcztcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNhbGxiYWNrW1wib25DbGlja1wiXSA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNldHRpbmcuY2FsbGJhY2tbXCJvbkV4cGFuZFwiXSA9IHRoaXMub25FeHBhbmQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNhbGxiYWNrW1wib25Db2xsYXBzZVwiXSA9IHRoaXMub25Db2xsYXBzZS5iaW5kKHRoaXMpO1xuXG4gICAgICAgIGxldCB6VHJlZSA9ICQuZm4uelRyZWUuaW5pdCgkKCd1bFtuYW1lPVwiJyArIHRoaXMubmFtZSArICdcIl0nKSwgdGhpcy5zZXR0aW5nLCB0aGlzLm5vZGVzKTtcblxuICAgICAgICAkLmZuLnpUcmVlS2V5Ym9hcmROYXZpZ2F0aW9uKHpUcmVlLCAkKCd1bFtuYW1lPVwiJyArIHRoaXMubmFtZSArICdcIl0nKSwgbnVsbCwgdGhpcy50cmVlaWNvbiB8fCBkZWZhdWx0VHJlZUljb25DbGFzcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3RlZEl0ZW0odHJlZU5vZGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZGl0ZW0gPSBnZXRDbG9uZWRPYmplY3QodHJlZU5vZGUpIHx8IHt9O1xuICAgICAgICB0aGlzLnNlbGVjdGVkaXRlbS5wYXRoID0gdGhpcy5nZXRQYXRoKHRyZWVOb2RlLCBcIlwiKTtcbiAgICAgICAgY29uc3QgZGVTZWxlY3RFbG0gPSAkKGBsaVt0cmVlbm9kZV0uc2VsZWN0ZWRgKTtcbiAgICAgICAgZGVTZWxlY3RFbG0ucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgIGNvbnN0IHNlbGVjdEVsbSA9ICQoYCMke3RyZWVOb2RlLnRJZH06aGFzKC5jdXJTZWxlY3RlZE5vZGUpYCk7XG4gICAgICAgIHNlbGVjdEVsbS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGV4cGFuZE5vZGUobm9kZSwgZXhwYW5kLCBldmVudEZsYWcpIHtcbiAgICAgICAgdGhpcy50cmVlT2JqLmV4cGFuZE5vZGUobm9kZSwgZXhwYW5kLCBmYWxzZSwgZmFsc2UsIGV2ZW50RmxhZyk7XG4gICAgICAgIGNvbnN0IGVsID0gJChgIyR7bm9kZS50SWR9X3N3aXRjaGApO1xuICAgICAgICAkKGVsKS5hZGRDbGFzcyh0aGlzLnRyZWVpY29uIHx8IGRlZmF1bHRUcmVlSWNvbkNsYXNzKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VUcmVlSWNvbnModGhpcy50cmVlaWNvbiB8fCBkZWZhdWx0VHJlZUljb25DbGFzcyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlT2JqLmdldE5vZGVzKCk7XG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdE5vZGU7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhdmFsdWUgPT09ICdGaXJzdE5vZGUnKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Tm9kZSA9IG5vZGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGF0YXZhbHVlID09PSAnTGFzdE5vZGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdE5vZGUgPSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudHJlZU9iai5zZWxlY3ROb2RlKHNlbGVjdE5vZGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbShzZWxlY3ROb2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZE5vZGUoc2VsZWN0Tm9kZSwgdHJ1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0sIDIwMCk7XG4gICAgfVxufVxuIl19
|