client-core-services 1.0.0
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.
- package/README.md +24 -0
- package/esm2020/client-core-services.mjs +5 -0
- package/esm2020/lib/my-lib.module.mjs +98 -0
- package/esm2020/lib/services/api/api-call/api-call.service.mjs +766 -0
- package/esm2020/lib/services/api/api-call-responce/api-call-responce.service.mjs +191 -0
- package/esm2020/lib/services/api/api.service.mjs +611 -0
- package/esm2020/lib/services/api/auth/auth-guard.service.mjs +37 -0
- package/esm2020/lib/services/api/auth/auth.service.mjs +500 -0
- package/esm2020/lib/services/api/aws-secret-manager/aws-secret-manager.service.mjs +78 -0
- package/esm2020/lib/services/api/common-api/common-api.service.mjs +97 -0
- package/esm2020/lib/services/api/doc-api/doc-api.service.mjs +221 -0
- package/esm2020/lib/services/api/public-api/public-api.service.mjs +37 -0
- package/esm2020/lib/services/chart/chart.service.mjs +166 -0
- package/esm2020/lib/services/check-if/check-if.service.mjs +830 -0
- package/esm2020/lib/services/common-utils/common-function.service.mjs +1277 -0
- package/esm2020/lib/services/common-utils/core-function/core-function.service.mjs +283 -0
- package/esm2020/lib/services/customvalidation/customvalidation.service.mjs +202 -0
- package/esm2020/lib/services/data-share/auth-data-share/auth-data-share.service.mjs +70 -0
- package/esm2020/lib/services/data-share/common-app-data-share/common-app-data-share.service.mjs +82 -0
- package/esm2020/lib/services/data-share/data-share.service.mjs +370 -0
- package/esm2020/lib/services/data-share/doc-data-share/doc-data-share.service.mjs +81 -0
- package/esm2020/lib/services/data-share/public-data-share/public-data-share.service.mjs +25 -0
- package/esm2020/lib/services/download/download.service.mjs +151 -0
- package/esm2020/lib/services/encryption/encryption.service.mjs +20 -0
- package/esm2020/lib/services/env/env.service.mjs +232 -0
- package/esm2020/lib/services/env/serverHostList.mjs +56 -0
- package/esm2020/lib/services/fileHandler/file-handler.service.mjs +136 -0
- package/esm2020/lib/services/form/form-control/form-control.service.mjs +654 -0
- package/esm2020/lib/services/form/form-creation/form-creation.service.mjs +880 -0
- package/esm2020/lib/services/form/form-value/form-value.service.mjs +464 -0
- package/esm2020/lib/services/form/multiple-form/multiple-form.service.mjs +346 -0
- package/esm2020/lib/services/grid/grid-common-function/grid-common-function.service.mjs +875 -0
- package/esm2020/lib/services/grid/grid-selection/grid-selection.service.mjs +84 -0
- package/esm2020/lib/services/lims-calculations/lims-calculations.service.mjs +2304 -0
- package/esm2020/lib/services/loader/loader.service.mjs +17 -0
- package/esm2020/lib/services/menu-or-module-common/menu-or-module-common.service.mjs +558 -0
- package/esm2020/lib/services/model/model.service.mjs +30 -0
- package/esm2020/lib/services/notify/notification.service.mjs +84 -0
- package/esm2020/lib/services/operator/operator.service.mjs +58 -0
- package/esm2020/lib/services/permission/permission.service.mjs +88 -0
- package/esm2020/lib/services/router/router.service.mjs +78 -0
- package/esm2020/lib/services/storage/cookies.service.mjs +56 -0
- package/esm2020/lib/services/storage/storage.service.mjs +749 -0
- package/esm2020/lib/services/tree-component/interface.mjs +6 -0
- package/esm2020/lib/services/tree-component/tree-component.service.mjs +394 -0
- package/esm2020/lib/services/userPrefrence/user-prefrence.service.mjs +767 -0
- package/esm2020/lib/services/voice-recognition/voice-recognition.service.mjs +97 -0
- package/esm2020/lib/shared/configuration/config.mjs +76 -0
- package/esm2020/lib/shared/configuration/editor-config.mjs +121 -0
- package/esm2020/lib/shared/enums/common.enum.mjs +18 -0
- package/esm2020/lib/shared/enums/config.enum.mjs +56 -0
- package/esm2020/lib/shared/enums/end-point.enum.mjs +69 -0
- package/esm2020/lib/shared/enums/flags.enum.mjs +20 -0
- package/esm2020/lib/shared/enums/keycodes.enum.mjs +122 -0
- package/esm2020/lib/shared/enums/operator_type.enum.mjs +13 -0
- package/esm2020/lib/shared/enums/storage-token-status.enum.mjs +10 -0
- package/esm2020/lib/shared/platform.mjs +2 -0
- package/esm2020/public-api.mjs +53 -0
- package/fesm2015/client-core-services.mjs +15487 -0
- package/fesm2015/client-core-services.mjs.map +1 -0
- package/fesm2020/client-core-services.mjs +15482 -0
- package/fesm2020/client-core-services.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/my-lib.module.d.ts +18 -0
- package/lib/services/api/api-call/api-call.service.d.ts +60 -0
- package/lib/services/api/api-call-responce/api-call-responce.service.d.ts +43 -0
- package/lib/services/api/api.service.d.ts +88 -0
- package/lib/services/api/auth/auth-guard.service.d.ts +13 -0
- package/lib/services/api/auth/auth.service.d.ts +50 -0
- package/lib/services/api/aws-secret-manager/aws-secret-manager.service.d.ts +22 -0
- package/lib/services/api/common-api/common-api.service.d.ts +22 -0
- package/lib/services/api/doc-api/doc-api.service.d.ts +35 -0
- package/lib/services/api/public-api/public-api.service.d.ts +14 -0
- package/lib/services/chart/chart.service.d.ts +21 -0
- package/lib/services/check-if/check-if.service.d.ts +50 -0
- package/lib/services/common-utils/common-function.service.d.ts +84 -0
- package/lib/services/common-utils/core-function/core-function.service.d.ts +21 -0
- package/lib/services/customvalidation/customvalidation.service.d.ts +21 -0
- package/lib/services/data-share/auth-data-share/auth-data-share.service.d.ts +33 -0
- package/lib/services/data-share/common-app-data-share/common-app-data-share.service.d.ts +36 -0
- package/lib/services/data-share/data-share.service.d.ts +174 -0
- package/lib/services/data-share/doc-data-share/doc-data-share.service.d.ts +33 -0
- package/lib/services/data-share/public-data-share/public-data-share.service.d.ts +12 -0
- package/lib/services/download/download.service.d.ts +35 -0
- package/lib/services/encryption/encryption.service.d.ts +8 -0
- package/lib/services/env/env.service.d.ts +44 -0
- package/lib/services/env/serverHostList.d.ts +9 -0
- package/lib/services/fileHandler/file-handler.service.d.ts +17 -0
- package/lib/services/form/form-control/form-control.service.d.ts +44 -0
- package/lib/services/form/form-creation/form-creation.service.d.ts +41 -0
- package/lib/services/form/form-value/form-value.service.d.ts +32 -0
- package/lib/services/form/multiple-form/multiple-form.service.d.ts +54 -0
- package/lib/services/grid/grid-common-function/grid-common-function.service.d.ts +74 -0
- package/lib/services/grid/grid-selection/grid-selection.service.d.ts +16 -0
- package/lib/services/lims-calculations/lims-calculations.service.d.ts +87 -0
- package/lib/services/loader/loader.service.d.ts +8 -0
- package/lib/services/menu-or-module-common/menu-or-module-common.service.d.ts +59 -0
- package/lib/services/model/model.service.d.ts +11 -0
- package/lib/services/notify/notification.service.d.ts +22 -0
- package/lib/services/operator/operator.service.d.ts +27 -0
- package/lib/services/permission/permission.service.d.ts +18 -0
- package/lib/services/router/router.service.d.ts +14 -0
- package/lib/services/storage/cookies.service.d.ts +11 -0
- package/lib/services/storage/storage.service.d.ts +132 -0
- package/lib/services/tree-component/interface.d.ts +13 -0
- package/lib/services/tree-component/tree-component.service.d.ts +38 -0
- package/lib/services/userPrefrence/user-prefrence.service.d.ts +75 -0
- package/lib/services/voice-recognition/voice-recognition.service.d.ts +36 -0
- package/lib/shared/configuration/config.d.ts +144 -0
- package/lib/shared/configuration/editor-config.d.ts +72 -0
- package/lib/shared/enums/common.enum.d.ts +16 -0
- package/lib/shared/enums/config.enum.d.ts +54 -0
- package/lib/shared/enums/end-point.enum.d.ts +66 -0
- package/lib/shared/enums/flags.enum.d.ts +18 -0
- package/lib/shared/enums/keycodes.enum.d.ts +120 -0
- package/lib/shared/enums/operator_type.enum.d.ts +9 -0
- package/lib/shared/enums/storage-token-status.enum.d.ts +8 -0
- package/lib/shared/platform.d.ts +1 -0
- package/package.json +40 -0
- package/public-api.d.ts +49 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node for to-do item
|
|
3
|
+
*/
|
|
4
|
+
export class TodoItemNode {
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy90cmVlLWNvbXBvbmVudC9pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDRixNQUFNLE9BQU8sWUFBWTtDQVN2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBOb2RlIGZvciB0by1kbyBpdGVtXHJcbiAqL1xyXG4gZXhwb3J0IGNsYXNzIFRvZG9JdGVtTm9kZSB7XHJcbiAgICBcImNoaWxkcmVuXCI6IFRvZG9JdGVtTm9kZVtdO1xyXG4gICAgXCJpdGVtXCI6IHN0cmluZztcclxuICAgIFwicmVmZXJlbmNlXCI6YW55O1xyXG4gICAgXCJjcml0ZXJpYVwiOmFueTtcclxuICAgIFwicElkXCI6c3RyaW5nO1xyXG4gICAgXCJwSW5kZXhcIjpzdHJpbmc7XHJcbiAgICBcIl9pZFwiOnN0cmluZztcclxuICAgIFwiYWN0aW9uXCI6YW55O1xyXG4gIH1cclxuIl19
|
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { TodoItemNode } from './interface';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../common-utils/common-function.service";
|
|
6
|
+
import * as i2 from "./../check-if/check-if.service";
|
|
7
|
+
export class TreeComponentService {
|
|
8
|
+
get data() {
|
|
9
|
+
return this.dataChange.value;
|
|
10
|
+
}
|
|
11
|
+
constructor(commonfunctionService, checkIfService) {
|
|
12
|
+
this.commonfunctionService = commonfunctionService;
|
|
13
|
+
this.checkIfService = checkIfService;
|
|
14
|
+
this.dataChange = new BehaviorSubject([]);
|
|
15
|
+
this.applyRelationships = (data) => {
|
|
16
|
+
let levelStack = [], lastNode = null;
|
|
17
|
+
return data.map((curr, index) => {
|
|
18
|
+
const node = { ...curr, id: index + 1 };
|
|
19
|
+
if (levelStack.length === 0) {
|
|
20
|
+
levelStack.push({ level: node.level, parent: 0 });
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const last = levelStack[levelStack.length - 1];
|
|
24
|
+
if (node.level > last.level) {
|
|
25
|
+
levelStack.push({ level: node.level, parent: lastNode.id });
|
|
26
|
+
}
|
|
27
|
+
else if (node.level < last.level) {
|
|
28
|
+
const levelDiff = last.level - node.level - 1, lastIndex = levelStack.length - 1;
|
|
29
|
+
levelStack.splice(lastIndex - levelDiff, lastIndex);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
node.parentId = levelStack[levelStack.length - 1].parent;
|
|
33
|
+
lastNode = node;
|
|
34
|
+
return node;
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
this.listToTree = (arr = []) => {
|
|
38
|
+
let indexMap = new Map();
|
|
39
|
+
arr.forEach((node, index) => {
|
|
40
|
+
indexMap.set(node.id, index);
|
|
41
|
+
node.children = [];
|
|
42
|
+
});
|
|
43
|
+
return arr.reduce((res, node, index, all) => {
|
|
44
|
+
if (node.parentId === 0)
|
|
45
|
+
return [...res, node];
|
|
46
|
+
all[indexMap.get(node.parentId)].children.push(node);
|
|
47
|
+
return res;
|
|
48
|
+
}, []);
|
|
49
|
+
};
|
|
50
|
+
this.treeToObject = (tree = [], result = {}) => {
|
|
51
|
+
tree.forEach((child) => {
|
|
52
|
+
let modifyObj = {};
|
|
53
|
+
modifyObj['reference'] = child.reference;
|
|
54
|
+
if (child && child.criteria) {
|
|
55
|
+
modifyObj['criteria'] = child.criteria;
|
|
56
|
+
}
|
|
57
|
+
if (child.allSelected) {
|
|
58
|
+
modifyObj['reference']['allSelected'] = child.allSelected;
|
|
59
|
+
}
|
|
60
|
+
if (child.select) {
|
|
61
|
+
modifyObj['reference']['select'] = child.select;
|
|
62
|
+
}
|
|
63
|
+
if (child.level == 0) {
|
|
64
|
+
result[child.item] = modifyObj;
|
|
65
|
+
}
|
|
66
|
+
else if (child.expandable) {
|
|
67
|
+
if (!result[child.type])
|
|
68
|
+
result[child.type] = {};
|
|
69
|
+
result[child.type][child.item] = modifyObj;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
if (!result[child.type])
|
|
73
|
+
result[child.type] = {};
|
|
74
|
+
result[child.type][child.item] = modifyObj;
|
|
75
|
+
}
|
|
76
|
+
if (child.children && child.children.length > 0) {
|
|
77
|
+
this.treeToObject(child.children, child.level == 0 ? result[child.item] : result[child.type][child.item]);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
return result;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Build the file structure tree. The `value` is the Json object, or a sub-tree of a Json object.
|
|
85
|
+
* The return value is the list of `TodoItemNode`.
|
|
86
|
+
*/
|
|
87
|
+
buildFileTree(obj, level, keys) {
|
|
88
|
+
return Object.keys(obj).reduce((accumulator, key, i) => {
|
|
89
|
+
const value = obj[key];
|
|
90
|
+
const pId = value['reference']['_id'];
|
|
91
|
+
const node = new TodoItemNode();
|
|
92
|
+
node.item = key;
|
|
93
|
+
node.reference = value['reference'];
|
|
94
|
+
if (value && value.criteria) {
|
|
95
|
+
node['criteria'] = value.criteria;
|
|
96
|
+
}
|
|
97
|
+
node._id = pId;
|
|
98
|
+
if (value['pId']) {
|
|
99
|
+
node.pId = value['pId'];
|
|
100
|
+
}
|
|
101
|
+
if (level == 0) {
|
|
102
|
+
let index = i + 1;
|
|
103
|
+
node.pIndex = '' + index;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
node.pIndex = value.pIndex;
|
|
107
|
+
}
|
|
108
|
+
if (value != null) {
|
|
109
|
+
let nextKey = keys[level];
|
|
110
|
+
let next = value[nextKey];
|
|
111
|
+
if (next == null) {
|
|
112
|
+
nextKey = keys[level + 1];
|
|
113
|
+
next = value[nextKey];
|
|
114
|
+
}
|
|
115
|
+
if (next && typeof next === 'object') {
|
|
116
|
+
Object.keys(next).forEach((childKey, i) => {
|
|
117
|
+
next[childKey].pIndex = node.pIndex + '.' + (i + 1);
|
|
118
|
+
next[childKey].pId = pId;
|
|
119
|
+
});
|
|
120
|
+
node.children = this.buildFileTree(next, level + 1, keys);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
node.item = key;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return accumulator.concat(node);
|
|
127
|
+
}, []);
|
|
128
|
+
}
|
|
129
|
+
convertParentNodeToChildNodeList(list, fields) {
|
|
130
|
+
let parentGroup = [];
|
|
131
|
+
let childList = [];
|
|
132
|
+
let previousIndex = -1;
|
|
133
|
+
let resultList = [];
|
|
134
|
+
for (let i = 0; i < list.length; i++) {
|
|
135
|
+
const node = list[i];
|
|
136
|
+
const pIndex = node.pIndex;
|
|
137
|
+
if (pIndex && pIndex != '') {
|
|
138
|
+
const indexlist = pIndex.split('.');
|
|
139
|
+
if (indexlist && indexlist.length == 3) {
|
|
140
|
+
if (previousIndex != -1) {
|
|
141
|
+
if (previousIndex == indexlist.length) {
|
|
142
|
+
if (parentGroup.length == 3) {
|
|
143
|
+
parentGroup.splice((parentGroup.length - 1), 1);
|
|
144
|
+
}
|
|
145
|
+
childList.push(node);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
if (parentGroup.length > 0 && childList.length > 0) {
|
|
149
|
+
this.addChildParentList(parentGroup, childList, fields, resultList);
|
|
150
|
+
childList = [];
|
|
151
|
+
parentGroup.splice((parentGroup.length - 1), 1);
|
|
152
|
+
parentGroup.push(node);
|
|
153
|
+
previousIndex = indexlist.length;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
parentGroup.push(node);
|
|
159
|
+
childList.push(node);
|
|
160
|
+
}
|
|
161
|
+
previousIndex = indexlist.length;
|
|
162
|
+
}
|
|
163
|
+
else if (indexlist && indexlist.length == 4) {
|
|
164
|
+
if (previousIndex == 3) {
|
|
165
|
+
childList = [];
|
|
166
|
+
childList.push(node);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
childList.push(node);
|
|
170
|
+
}
|
|
171
|
+
previousIndex = indexlist.length;
|
|
172
|
+
}
|
|
173
|
+
else if (indexlist && indexlist.length == 2) {
|
|
174
|
+
if (parentGroup.length > 0 && childList.length > 0) {
|
|
175
|
+
this.addChildParentList(parentGroup, childList, fields, resultList);
|
|
176
|
+
childList = [];
|
|
177
|
+
const firstParent = [];
|
|
178
|
+
firstParent.push(parentGroup[0]);
|
|
179
|
+
parentGroup = [];
|
|
180
|
+
parentGroup.push(firstParent[0]);
|
|
181
|
+
parentGroup.push(node);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
parentGroup.push(node);
|
|
185
|
+
}
|
|
186
|
+
previousIndex = -1;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
if (childList.length > 0) {
|
|
190
|
+
this.addChildParentList(parentGroup, childList, fields, resultList);
|
|
191
|
+
childList = [];
|
|
192
|
+
}
|
|
193
|
+
parentGroup = [];
|
|
194
|
+
parentGroup.push(node);
|
|
195
|
+
previousIndex = -1;
|
|
196
|
+
}
|
|
197
|
+
if (list.length == i + 1) {
|
|
198
|
+
if (parentGroup.length > 0 && childList.length > 0) {
|
|
199
|
+
this.addChildParentList(parentGroup, childList, fields, resultList);
|
|
200
|
+
childList = [];
|
|
201
|
+
parentGroup = [];
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return resultList;
|
|
207
|
+
}
|
|
208
|
+
addChildParentList(parentList, ChildList, fields, result) {
|
|
209
|
+
ChildList.forEach((child) => {
|
|
210
|
+
let obj = {};
|
|
211
|
+
if (parentList.length == 2) {
|
|
212
|
+
fields.forEach((field, i) => {
|
|
213
|
+
if (i == 2) {
|
|
214
|
+
obj[field.field_name] = null;
|
|
215
|
+
}
|
|
216
|
+
else if (i == 3) {
|
|
217
|
+
obj[field.field_name] = child.reference;
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
obj[field.field_name] = parentList[i].reference;
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
else if (parentList.length == 3) {
|
|
225
|
+
fields.forEach((field, i) => {
|
|
226
|
+
if (i == 3) {
|
|
227
|
+
obj[field.field_name] = child.reference;
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
obj[field.field_name] = parentList[i].reference;
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
result.push(obj);
|
|
235
|
+
});
|
|
236
|
+
// if(list && fields && list.length == fields.length){
|
|
237
|
+
// checkSubMenu = false;
|
|
238
|
+
// }
|
|
239
|
+
// let object = {};
|
|
240
|
+
// for (let i = 0; i < list.length; i++) {
|
|
241
|
+
// const element = list[i];
|
|
242
|
+
// let field = fields[i];
|
|
243
|
+
// let fieldName = field.field_name;
|
|
244
|
+
// if(i == 2){
|
|
245
|
+
// if(list && list.length == 3){
|
|
246
|
+
// }
|
|
247
|
+
// }else{
|
|
248
|
+
// object[fieldName] = element.reference;
|
|
249
|
+
// }
|
|
250
|
+
// if(list && list.length == (i+1)){
|
|
251
|
+
// result.push(object);
|
|
252
|
+
// }
|
|
253
|
+
// }
|
|
254
|
+
}
|
|
255
|
+
//this function for get selected node tree
|
|
256
|
+
getSelectedNodeWithParent(allNodes, selectedNodes, keys) {
|
|
257
|
+
let selectedNodesWithParent = [];
|
|
258
|
+
if (allNodes && allNodes.length > 0 && selectedNodes && selectedNodes.length > 0) {
|
|
259
|
+
selectedNodes.forEach((selectNode) => {
|
|
260
|
+
if (selectNode) {
|
|
261
|
+
if ((keys.includes(selectNode.type) || selectNode.level == 0) && selectNode.expandable) {
|
|
262
|
+
selectNode.allSelected = true;
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
selectNode.allSelected = false;
|
|
266
|
+
}
|
|
267
|
+
selectNode.select = true;
|
|
268
|
+
let groupList = [];
|
|
269
|
+
let check = this.checkIfService.checkDataAlreadyAddedInListOrNot({ "field_name": '_id' }, selectNode._id, groupList);
|
|
270
|
+
if (!check.status) {
|
|
271
|
+
groupList.push(selectNode);
|
|
272
|
+
}
|
|
273
|
+
this.findChildToParentNode(allNodes, selectNode, groupList, selectedNodesWithParent);
|
|
274
|
+
}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
return selectedNodesWithParent;
|
|
278
|
+
}
|
|
279
|
+
findChildToParentNode(allNodes, selectNode, groupList, selectedNodesWithParent) {
|
|
280
|
+
if (selectNode && selectNode.pId) {
|
|
281
|
+
let parentIndex = this.commonfunctionService.getIndexInArrayById(allNodes, selectNode.pId, 'reference._id');
|
|
282
|
+
if (parentIndex != -1) {
|
|
283
|
+
let parentNode = allNodes[parentIndex];
|
|
284
|
+
let check = this.checkIfService.checkDataAlreadyAddedInListOrNot({ "field_name": '_id' }, parentNode._id, groupList);
|
|
285
|
+
if (!check.status) {
|
|
286
|
+
groupList.push(parentNode);
|
|
287
|
+
}
|
|
288
|
+
this.findChildToParentNode(allNodes, parentNode, groupList, selectedNodesWithParent);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
let check = this.checkIfService.checkDataAlreadyAddedInListOrNot({ "field_name": '_id' }, selectNode._id, groupList);
|
|
293
|
+
if (!check.status) {
|
|
294
|
+
groupList.push(selectNode);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return this.modifyParentChild(selectedNodesWithParent, groupList);
|
|
298
|
+
}
|
|
299
|
+
modifyParentChild(selectedNodesWithParent, groupList) {
|
|
300
|
+
let sortedData = groupList.sort((a, b) => a.level - b.level);
|
|
301
|
+
if (sortedData && sortedData.length > 0) {
|
|
302
|
+
sortedData.forEach((data) => {
|
|
303
|
+
let check = this.checkIfService.checkDataAlreadyAddedInListOrNot({ "field_name": '_id' }, data._id, selectedNodesWithParent);
|
|
304
|
+
if (check.status) {
|
|
305
|
+
let existDataIndex = this.commonfunctionService.getIndexInArrayById(selectedNodesWithParent, data._id);
|
|
306
|
+
let object = selectedNodesWithParent[existDataIndex];
|
|
307
|
+
if (object.pIndex != data.pIndex) {
|
|
308
|
+
check.status = false;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if (!check.status) {
|
|
312
|
+
selectedNodesWithParent.push(data);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
return selectedNodesWithParent;
|
|
317
|
+
}
|
|
318
|
+
modifySelectedDataWithParentId(selectedData) {
|
|
319
|
+
let modifyList = selectedData.sort((a, b) => a.pIndex.localeCompare(b.pIndex, undefined, { numeric: true }));
|
|
320
|
+
//arr.sort( (a, b) => a.localeCompare(b, undefined, { numeric:true }) );
|
|
321
|
+
return modifyList;
|
|
322
|
+
}
|
|
323
|
+
//this function for get selected node tree
|
|
324
|
+
//This function for convet list to tree map
|
|
325
|
+
convertTreeToList(list, result) {
|
|
326
|
+
if (list && list.length > 0) {
|
|
327
|
+
list.forEach((child) => {
|
|
328
|
+
let childrenList = [];
|
|
329
|
+
if (child && child.children && child.children != null) {
|
|
330
|
+
childrenList = JSON.parse(JSON.stringify(child.children));
|
|
331
|
+
}
|
|
332
|
+
delete child.children;
|
|
333
|
+
result.push(child);
|
|
334
|
+
if (childrenList && childrenList.length > 0) {
|
|
335
|
+
this.convertTreeToList(childrenList, result);
|
|
336
|
+
}
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
return result;
|
|
340
|
+
}
|
|
341
|
+
buildTreeObject(arr = []) {
|
|
342
|
+
let relationShip = this.applyRelationships(arr);
|
|
343
|
+
let list = this.listToTree(relationShip);
|
|
344
|
+
let tree = this.treeToObject(list);
|
|
345
|
+
return tree;
|
|
346
|
+
}
|
|
347
|
+
//This function for convet list to tree map
|
|
348
|
+
/** Add an item to to-do list */
|
|
349
|
+
insertItem(parent, name) {
|
|
350
|
+
if (parent.children) {
|
|
351
|
+
parent.children.push({ item: name });
|
|
352
|
+
this.dataChange.next(this.data);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
updateItem(node, name) {
|
|
356
|
+
node.item = name;
|
|
357
|
+
this.dataChange.next(this.data);
|
|
358
|
+
}
|
|
359
|
+
updateTreeViewData(responce, field, treeViewData) {
|
|
360
|
+
let result = {
|
|
361
|
+
treeViewData: treeViewData
|
|
362
|
+
};
|
|
363
|
+
const fieldName = field.field_name;
|
|
364
|
+
let keys = [];
|
|
365
|
+
let fields = [];
|
|
366
|
+
if (field && field.treeViewKeys) {
|
|
367
|
+
keys = field.treeViewKeys;
|
|
368
|
+
}
|
|
369
|
+
if (field && field.fields && field.fields.length > 0) {
|
|
370
|
+
fields = field.fields;
|
|
371
|
+
}
|
|
372
|
+
const treeData = this.buildFileTree(responce, 0, keys);
|
|
373
|
+
//console.log(treeData);
|
|
374
|
+
let selectedNodeList = this.convertTreeToList(JSON.parse(JSON.stringify(treeData)), []);
|
|
375
|
+
let childList = [];
|
|
376
|
+
if (fields && fields.length > 0) {
|
|
377
|
+
childList = this.convertParentNodeToChildNodeList(selectedNodeList, fields);
|
|
378
|
+
}
|
|
379
|
+
//console.log(selectedNodeList);
|
|
380
|
+
//console.log(childList);
|
|
381
|
+
//this.dataSource[fieldName].data = treeData;
|
|
382
|
+
result.treeViewData[fieldName] = childList;
|
|
383
|
+
return result;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
TreeComponentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TreeComponentService, deps: [{ token: i1.CommonFunctionService }, { token: i2.CheckIfService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
387
|
+
TreeComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TreeComponentService, providedIn: 'root' });
|
|
388
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: TreeComponentService, decorators: [{
|
|
389
|
+
type: Injectable,
|
|
390
|
+
args: [{
|
|
391
|
+
providedIn: 'root'
|
|
392
|
+
}]
|
|
393
|
+
}], ctorParameters: function () { return [{ type: i1.CommonFunctionService }, { type: i2.CheckIfService }]; } });
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb21wb25lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1jb3JlL3NyYy9saWIvc2VydmljZXMvdHJlZS1jb21wb25lbnQvdHJlZS1jb21wb25lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQzs7OztBQUt6QyxNQUFNLE9BQU8sb0JBQW9CO0lBRy9CLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDL0IsQ0FBQztJQUVELFlBQ1UscUJBQTJDLEVBQzNDLGNBQTZCO1FBRDdCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDM0MsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFSdkMsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFpQixFQUFFLENBQUMsQ0FBQztRQXdRckQsdUJBQWtCLEdBQUcsQ0FBQyxJQUFRLEVBQUUsRUFBRTtZQUNoQyxJQUFJLFVBQVUsR0FBTyxFQUFFLEVBQUUsUUFBUSxHQUFPLElBQUksQ0FBQztZQUM3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFRLEVBQUUsS0FBWSxFQUFFLEVBQUU7Z0JBQ3pDLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDM0IsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUs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LENBQUMsQ0FBQztTQUM1RTtRQUNELGdDQUFnQztRQUNoQyx5QkFBeUI7UUFDekIsNkNBQTZDO1FBQzdDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDO1FBQzNDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O2tIQXRYVSxvQkFBb0I7c0hBQXBCLG9CQUFvQixjQUZuQixNQUFNOzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGVja0lmU2VydmljZSB9IGZyb20gJy4vLi4vY2hlY2staWYvY2hlY2staWYuc2VydmljZSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21tb25GdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24tdXRpbHMvY29tbW9uLWZ1bmN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RvZG9JdGVtTm9kZX0gZnJvbSAnLi9pbnRlcmZhY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudFNlcnZpY2Uge1xyXG4gIGRhdGFDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRvZG9JdGVtTm9kZVtdPihbXSk7XHJcblxyXG4gIGdldCBkYXRhKCk6IFRvZG9JdGVtTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFDaGFuZ2UudmFsdWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tbW9uZnVuY3Rpb25TZXJ2aWNlOkNvbW1vbkZ1bmN0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hlY2tJZlNlcnZpY2U6Q2hlY2tJZlNlcnZpY2VcclxuICApIHtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQnVpbGQgdGhlIGZpbGUgc3RydWN0dXJlIHRyZWUuIFRoZSBgdmFsdWVgIGlzIHRoZSBKc29uIG9iamVjdCwgb3IgYSBzdWItdHJlZSBvZiBhIEpzb24gb2JqZWN0LlxyXG4gICAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGxpc3Qgb2YgYFRvZG9JdGVtTm9kZWAuXHJcbiAgICovXHJcbiAgYnVpbGRGaWxlVHJlZShvYmo6IHtba2V5OiBzdHJpbmddOiBhbnl9LCBsZXZlbDogbnVtYmVyLGtleXM6YW55KTogVG9kb0l0ZW1Ob2RlW10ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikucmVkdWNlPFRvZG9JdGVtTm9kZVtdPigoYWNjdW11bGF0b3IsIGtleSxpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XHJcbiAgICAgIGNvbnN0IHBJZDphbnkgPSB2YWx1ZVsncmVmZXJlbmNlJ11bJ19pZCddO1xyXG4gICAgICBjb25zdCBub2RlID0gbmV3IFRvZG9JdGVtTm9kZSgpO1xyXG4gICAgICBub2RlLml0ZW0gPSBrZXk7XHJcbiAgICAgIG5vZGUucmVmZXJlbmNlID0gdmFsdWVbJ3JlZmVyZW5jZSddO1xyXG4gICAgICBpZih2YWx1ZSAmJiB2YWx1ZS5jcml0ZXJpYSl7XHJcbiAgICAgICAgbm9kZVsnY3JpdGVyaWEnXSA9IHZhbHVlLmNyaXRlcmlhO1xyXG4gICAgICB9XHJcbiAgICAgIG5vZGUuX2lkID0gcElkO1xyXG4gICAgICBpZih2YWx1ZVsncElkJ10pe1xyXG4gICAgICAgIG5vZGUucElkID0gdmFsdWVbJ3BJZCddO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGxldmVsID09IDApe1xyXG4gICAgICAgIGxldCBpbmRleCA9IGkrMTtcclxuICAgICAgICBub2RlLnBJbmRleCA9ICcnK2luZGV4O1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBub2RlLnBJbmRleCA9IHZhbHVlLnBJbmRleDtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IG5leHRLZXkgPSBrZXlzW2xldmVsXTtcclxuICAgICAgICBsZXQgbmV4dCA9IHZhbHVlW25leHRLZXldO1xyXG4gICAgICAgIGlmKG5leHQgPT0gbnVsbCl7XHJcbiAgICAgICAgICBuZXh0S2V5ID0ga2V5c1tsZXZlbCArIDFdO1xyXG4gICAgICAgICAgbmV4dCA9IHZhbHVlW25leHRLZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobmV4dCAmJiB0eXBlb2YgbmV4dCA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIE9iamVjdC5rZXlzKG5leHQpLmZvckVhY2goKGNoaWxkS2V5LGkpID0+IHtcclxuICAgICAgICAgICAgbmV4dFtjaGlsZEtleV0ucEluZGV4ID0gbm9kZS5wSW5kZXgrJy4nKyhpKzEpO1xyXG4gICAgICAgICAgICBuZXh0W2NoaWxkS2V5XS5wSWQgPSBwSWQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSB0aGlzLmJ1aWxkRmlsZVRyZWUobmV4dCwgbGV2ZWwgKyAxLGtleXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBub2RlLml0ZW0gPSBrZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYWNjdW11bGF0b3IuY29uY2F0KG5vZGUpO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFBhcmVudE5vZGVUb0NoaWxkTm9kZUxpc3QobGlzdDphbnksZmllbGRzOmFueSl7XHJcbiAgICBsZXQgcGFyZW50R3JvdXA6YW55ID0gW107XHJcbiAgICBsZXQgY2hpbGRMaXN0OmFueSA9IFtdO1xyXG4gICAgbGV0IHByZXZpb3VzSW5kZXg6bnVtYmVyID0gLTE7XHJcbiAgICBsZXQgcmVzdWx0TGlzdDphbnkgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBub2RlID0gbGlzdFtpXTtcclxuICAgICAgY29uc3QgcEluZGV4ID0gbm9kZS5wSW5kZXg7XHJcbiAgICAgIGlmKHBJbmRleCAmJiBwSW5kZXggIT0gJycpe1xyXG4gICAgICAgIGNvbnN0IGluZGV4bGlzdCA9IHBJbmRleC5zcGxpdCgnLicpO1xyXG4gICAgICAgIGlmKGluZGV4bGlzdCAmJiBpbmRleGxpc3QubGVuZ3RoID09IDMpe1xyXG4gICAgICAgICAgaWYocHJldmlvdXNJbmRleCAhPSAtMSl7XHJcbiAgICAgICAgICAgIGlmKHByZXZpb3VzSW5kZXggPT0gaW5kZXhsaXN0Lmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgaWYocGFyZW50R3JvdXAubGVuZ3RoID09IDMpe1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXAuc3BsaWNlKChwYXJlbnRHcm91cC5sZW5ndGgtMSksMSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNoaWxkTGlzdC5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICBpZihwYXJlbnRHcm91cC5sZW5ndGggPiAwICYmIGNoaWxkTGlzdC5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYXJlbnRMaXN0KHBhcmVudEdyb3VwLGNoaWxkTGlzdCxmaWVsZHMscmVzdWx0TGlzdCk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZExpc3QgPSBbXTtcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwLnNwbGljZSgocGFyZW50R3JvdXAubGVuZ3RoLTEpLDEpO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXAucHVzaChub2RlKTtcclxuICAgICAgICAgICAgICAgIHByZXZpb3VzSW5kZXggPSBpbmRleGxpc3QubGVuZ3RoO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHBhcmVudEdyb3VwLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdC5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcHJldmlvdXNJbmRleCA9IGluZGV4bGlzdC5sZW5ndGg7XHJcbiAgICAgICAgfWVsc2UgaWYoaW5kZXhsaXN0ICYmIGluZGV4bGlzdC5sZW5ndGggPT0gNCl7XHJcbiAgICAgICAgICBpZihwcmV2aW91c0luZGV4ID09IDMpe1xyXG4gICAgICAgICAgICBjaGlsZExpc3QgPSBbXTtcclxuICAgICAgICAgICAgY2hpbGRMaXN0LnB1c2gobm9kZSk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY2hpbGRMaXN0LnB1c2gobm9kZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwcmV2aW91c0luZGV4ID0gaW5kZXhsaXN0Lmxlbmd0aDtcclxuICAgICAgICB9ZWxzZSBpZihpbmRleGxpc3QgJiYgaW5kZXhsaXN0Lmxlbmd0aCA9PSAyKXtcclxuICAgICAgICAgIGlmKHBhcmVudEdyb3VwLmxlbmd0aCA+IDAgJiYgY2hpbGRMaXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICB0aGlzLmFkZENoaWxkUGFyZW50TGlzdChwYXJlbnRHcm91cCxjaGlsZExpc3QsZmllbGRzLHJlc3VsdExpc3QpO1xyXG4gICAgICAgICAgICBjaGlsZExpc3QgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3RQYXJlbnQgPSBbXTtcclxuICAgICAgICAgICAgZmlyc3RQYXJlbnQucHVzaChwYXJlbnRHcm91cFswXSk7XHJcbiAgICAgICAgICAgIHBhcmVudEdyb3VwID0gW107XHJcbiAgICAgICAgICAgIHBhcmVudEdyb3VwLnB1c2goZmlyc3RQYXJlbnRbMF0pO1xyXG4gICAgICAgICAgICBwYXJlbnRHcm91cC5wdXNoKG5vZGUpO1xyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHBhcmVudEdyb3VwLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwcmV2aW91c0luZGV4ID0gLTE7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBpZihjaGlsZExpc3QubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkQ2hpbGRQYXJlbnRMaXN0KHBhcmVudEdyb3VwLGNoaWxkTGlzdCxmaWVsZHMscmVzdWx0TGlzdCk7XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdCA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcGFyZW50R3JvdXAgPSBbXTtcclxuICAgICAgICAgIHBhcmVudEdyb3VwLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICBwcmV2aW91c0luZGV4ID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGxpc3QubGVuZ3RoID09IGkrMSl7XHJcbiAgICAgICAgICBpZihwYXJlbnRHcm91cC5sZW5ndGggPiAwICYmIGNoaWxkTGlzdC5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgdGhpcy5hZGRDaGlsZFBhcmVudExpc3QocGFyZW50R3JvdXAsY2hpbGRMaXN0LGZpZWxkcyxyZXN1bHRMaXN0KTtcclxuICAgICAgICAgICAgY2hpbGRMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHBhcmVudEdyb3VwID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdExpc3Q7XHJcbiAgfVxyXG4gIGFkZENoaWxkUGFyZW50TGlzdChwYXJlbnRMaXN0OmFueSxDaGlsZExpc3Q6YW55LGZpZWxkczphbnkscmVzdWx0OmFueSl7XHJcbiAgICBDaGlsZExpc3QuZm9yRWFjaCgoY2hpbGQ6YW55KSA9PiB7XHJcbiAgICAgIGxldCBvYmo6YW55ID0ge307XHJcbiAgICAgIGlmKHBhcmVudExpc3QubGVuZ3RoID09IDIpe1xyXG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZDphbnksaTpudW1iZXIpID0+IHtcclxuICAgICAgICAgIGlmKGkgPT0gMil7XHJcbiAgICAgICAgICAgIG9ialtmaWVsZC5maWVsZF9uYW1lXSA9IG51bGw7XHJcbiAgICAgICAgICB9ZWxzZSBpZihpID09IDMpe1xyXG4gICAgICAgICAgICBvYmpbZmllbGQuZmllbGRfbmFtZV0gPSBjaGlsZC5yZWZlcmVuY2U7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgb2JqW2ZpZWxkLmZpZWxkX25hbWVdID0gcGFyZW50TGlzdFtpXS5yZWZlcmVuY2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1lbHNlIGlmKHBhcmVudExpc3QubGVuZ3RoID09IDMpe1xyXG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZDphbnksaTpudW1iZXIpID0+IHtcclxuICAgICAgICAgIGlmKGkgPT0gMyl7XHJcbiAgICAgICAgICAgIG9ialtmaWVsZC5maWVsZF9uYW1lXSA9IGNoaWxkLnJlZmVyZW5jZTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBvYmpbZmllbGQuZmllbGRfbmFtZV0gPSBwYXJlbnRMaXN0W2ldLnJlZmVyZW5jZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXN1bHQucHVzaChvYmopO1xyXG4gICAgfSk7XHJcbiAgICAvLyBpZihsaXN0ICYmIGZpZWxkcyAmJiBsaXN0Lmxlbmd0aCA9PSBmaWVsZHMubGVuZ3RoKXtcclxuICAgIC8vICAgY2hlY2tTdWJNZW51ID0gZmFsc2U7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBsZXQgb2JqZWN0ID0ge307XHJcbiAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgY29uc3QgZWxlbWVudCA9IGxpc3RbaV07XHJcbiAgICAvLyAgIGxldCBmaWVsZCA9IGZpZWxkc1tpXTtcclxuICAgIC8vICAgbGV0IGZpZWxkTmFtZSA9IGZpZWxkLmZpZWxkX25hbWU7XHJcbiAgICAvLyAgIGlmKGkgPT0gMil7XHJcbiAgICAvLyAgICAgaWYobGlzdCAmJiBsaXN0Lmxlbmd0aCA9PSAzKXtcclxuXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9ZWxzZXtcclxuICAgIC8vICAgICBvYmplY3RbZmllbGROYW1lXSA9IGVsZW1lbnQucmVmZXJlbmNlO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGlmKGxpc3QgJiYgbGlzdC5sZW5ndGggPT0gKGkrMSkpe1xyXG4gICAgLy8gICAgIHJlc3VsdC5wdXNoKG9iamVjdCk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIC8vdGhpcyBmdW5jdGlvbiBmb3IgZ2V0IHNlbGVjdGVkIG5vZGUgdHJlZVxyXG4gIGdldFNlbGVjdGVkTm9kZVdpdGhQYXJlbnQoYWxsTm9kZXM6YW55LHNlbGVjdGVkTm9kZXM6YW55LGtleXM6YW55KXtcclxuICAgIGxldCBzZWxlY3RlZE5vZGVzV2l0aFBhcmVudDphbnkgPSBbXTtcclxuICAgIGlmKGFsbE5vZGVzICYmIGFsbE5vZGVzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWROb2RlcyAmJiBzZWxlY3RlZE5vZGVzLmxlbmd0aCA+IDApe1xyXG4gICAgICBzZWxlY3RlZE5vZGVzLmZvckVhY2goKHNlbGVjdE5vZGU6YW55KSA9PiB7XHJcbiAgICAgICAgaWYoc2VsZWN0Tm9kZSl7XHJcbiAgICAgICAgICBpZigoa2V5cy5pbmNsdWRlcyhzZWxlY3ROb2RlLnR5cGUpIHx8IHNlbGVjdE5vZGUubGV2ZWwgPT0gMCkmJiBzZWxlY3ROb2RlLmV4cGFuZGFibGUpe1xyXG4gICAgICAgICAgICBzZWxlY3ROb2RlLmFsbFNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBzZWxlY3ROb2RlLmFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzZWxlY3ROb2RlLnNlbGVjdCA9IHRydWU7XHJcbiAgICAgICAgICBsZXQgZ3JvdXBMaXN0OmFueSA9IFtdO1xyXG4gICAgICAgICAgbGV0IGNoZWNrID0gdGhpcy5jaGVja0lmU2VydmljZS5jaGVja0RhdGFBbHJlYWR5QWRkZWRJbkxpc3RPck5vdCh7XCJmaWVsZF9uYW1lXCI6J19pZCd9LHNlbGVjdE5vZGUuX2lkLGdyb3VwTGlzdCk7XHJcbiAgICAgICAgICBpZighY2hlY2suc3RhdHVzKXtcclxuICAgICAgICAgICAgZ3JvdXBMaXN0LnB1c2goc2VsZWN0Tm9kZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpbmRDaGlsZFRvUGFyZW50Tm9kZShhbGxOb2RlcyxzZWxlY3ROb2RlLGdyb3VwTGlzdCxzZWxlY3RlZE5vZGVzV2l0aFBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBzZWxlY3RlZE5vZGVzV2l0aFBhcmVudDtcclxuICB9XHJcblxyXG4gIGZpbmRDaGlsZFRvUGFyZW50Tm9kZShhbGxOb2Rlczphbnksc2VsZWN0Tm9kZTphbnksZ3JvdXBMaXN0OmFueSxzZWxlY3RlZE5vZGVzV2l0aFBhcmVudDphbnkpe1xyXG4gICAgaWYoc2VsZWN0Tm9kZSAmJiBzZWxlY3ROb2RlLnBJZCl7XHJcbiAgICAgIGxldCBwYXJlbnRJbmRleCA9IHRoaXMuY29tbW9uZnVuY3Rpb25TZXJ2aWNlLmdldEluZGV4SW5BcnJheUJ5SWQoYWxsTm9kZXMsc2VsZWN0Tm9kZS5wSWQsJ3JlZmVyZW5jZS5faWQnKTtcclxuICAgICAgaWYocGFyZW50SW5kZXggIT0gLTEpe1xyXG4gICAgICAgIGxldCBwYXJlbnROb2RlID0gYWxsTm9kZXNbcGFyZW50SW5kZXhdO1xyXG4gICAgICAgIGxldCBjaGVjayA9IHRoaXMuY2hlY2tJZlNlcnZpY2UuY2hlY2tEYXRhQWxyZWFkeUFkZGVkSW5MaXN0T3JOb3Qoe1wiZmllbGRfbmFtZVwiOidfaWQnfSxwYXJlbnROb2RlLl9pZCxncm91cExpc3QpO1xyXG4gICAgICAgIGlmKCFjaGVjay5zdGF0dXMpe1xyXG4gICAgICAgICAgZ3JvdXBMaXN0LnB1c2gocGFyZW50Tm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmluZENoaWxkVG9QYXJlbnROb2RlKGFsbE5vZGVzLHBhcmVudE5vZGUsZ3JvdXBMaXN0LHNlbGVjdGVkTm9kZXNXaXRoUGFyZW50KTtcclxuICAgICAgfVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIGxldCBjaGVjayA9IHRoaXMuY2hlY2tJZlNlcnZpY2UuY2hlY2tEYXRhQWxyZWFkeUFkZGVkSW5MaXN0T3JOb3Qoe1wiZmllbGRfbmFtZVwiOidfaWQnfSxzZWxlY3ROb2RlLl9pZCxncm91cExpc3QpO1xyXG4gICAgICBpZighY2hlY2suc3RhdHVzKXtcclxuICAgICAgICBncm91cExpc3QucHVzaChzZWxlY3ROb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMubW9kaWZ5UGFyZW50Q2hpbGQoc2VsZWN0ZWROb2Rlc1dpdGhQYXJlbnQsZ3JvdXBMaXN0KTtcclxuICB9XHJcbiAgbW9kaWZ5UGFyZW50Q2hpbGQoc2VsZWN0ZWROb2Rlc1dpdGhQYXJlbnQ6YW55LGdyb3VwTGlzdDphbnkpe1xyXG4gICAgbGV0IHNvcnRlZERhdGEgPSBncm91cExpc3Quc29ydCgoYTphbnksYjphbnkpID0+ICBhLmxldmVsIC0gYi5sZXZlbCk7XHJcbiAgICBpZihzb3J0ZWREYXRhICYmIHNvcnRlZERhdGEubGVuZ3RoID4gMCl7XHJcbiAgICAgIHNvcnRlZERhdGEuZm9yRWFjaCgoZGF0YTphbnkpID0+IHtcclxuICAgICAgICBsZXQgY2hlY2sgPSB0aGlzLmNoZWNrSWZTZXJ2aWNlLmNoZWNrRGF0YUFscmVhZHlBZGRlZEluTGlzdE9yTm90KHtcImZpZWxkX25hbWVcIjonX2lkJ30sZGF0YS5faWQsc2VsZWN0ZWROb2Rlc1dpdGhQYXJlbnQpO1xyXG4gICAgICAgIGlmKGNoZWNrLnN0YXR1cyl7XHJcbiAgICAgICAgICBsZXQgZXhpc3REYXRhSW5kZXggPSB0aGlzLmNvbW1vbmZ1bmN0aW9uU2VydmljZS5nZXRJbmRleEluQXJyYXlCeUlkKHNlbGVjdGVkTm9kZXNXaXRoUGFyZW50LGRhdGEuX2lkKTtcclxuICAgICAgICAgIGxldCBvYmplY3QgPSBzZWxlY3RlZE5vZGVzV2l0aFBhcmVudFtleGlzdERhdGFJbmRleF07XHJcbiAgICAgICAgICBpZihvYmplY3QucEluZGV4ICE9IGRhdGEucEluZGV4KXtcclxuICAgICAgICAgICAgY2hlY2suc3RhdHVzID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCFjaGVjay5zdGF0dXMpe1xyXG4gICAgICAgICAgc2VsZWN0ZWROb2Rlc1dpdGhQYXJlbnQucHVzaChkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdGVkTm9kZXNXaXRoUGFyZW50O1xyXG4gIH1cclxuICBtb2RpZnlTZWxlY3RlZERhdGFXaXRoUGFyZW50SWQoc2VsZWN0ZWREYXRhOmFueSl7XHJcbiAgICBsZXQgbW9kaWZ5TGlzdD1zZWxlY3RlZERhdGEuc29ydCgoYTphbnksYjphbnkpID0+IGEucEluZGV4LmxvY2FsZUNvbXBhcmUoYi5wSW5kZXgsIHVuZGVmaW5lZCwgeyBudW1lcmljOnRydWUgfSkpO1xyXG4gICAgLy9hcnIuc29ydCggKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiLCB1bmRlZmluZWQsIHsgbnVtZXJpYzp0cnVlIH0pICk7XHJcbiAgICByZXR1cm4gIG1vZGlmeUxpc3Q7XHJcbiAgfVxyXG5cclxuICAvL3RoaXMgZnVuY3Rpb24gZm9yIGdldCBzZWxlY3RlZCBub2RlIHRyZWVcclxuXHJcbiAgLy9UaGlzIGZ1bmN0aW9uIGZvciBjb252ZXQgbGlzdCB0byB0cmVlIG1hcFxyXG4gIGNvbnZlcnRUcmVlVG9MaXN0KGxpc3Q6YW55LHJlc3VsdDphbnkpIHtcclxuICAgIGlmKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKXtcclxuICAgICAgbGlzdC5mb3JFYWNoKChjaGlsZDphbnkpID0+IHtcclxuICAgICAgICBsZXQgY2hpbGRyZW5MaXN0ID0gW107XHJcbiAgICAgICAgaWYoY2hpbGQgJiYgY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4gIT0gbnVsbCl7XHJcbiAgICAgICAgICBjaGlsZHJlbkxpc3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNoaWxkLmNoaWxkcmVuKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZSBjaGlsZC5jaGlsZHJlbjtcclxuICAgICAgICByZXN1bHQucHVzaChjaGlsZCk7XHJcbiAgICAgICAgaWYoY2hpbGRyZW5MaXN0ICYmIGNoaWxkcmVuTGlzdC5sZW5ndGggPiAwKXtcclxuICAgICAgICAgIHRoaXMuY29udmVydFRyZWVUb0xpc3QoY2hpbGRyZW5MaXN0LHJlc3VsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG4gIGFwcGx5UmVsYXRpb25zaGlwcyA9IChkYXRhOmFueSkgPT4ge1xyXG4gICAgbGV0IGxldmVsU3RhY2s6YW55ID0gW10sIGxhc3ROb2RlOmFueSA9IG51bGw7XHJcbiAgICByZXR1cm4gZGF0YS5tYXAoKGN1cnI6YW55LCBpbmRleDpudW1iZXIpID0+IHtcclxuICAgICAgY29uc3Qgbm9kZSA9IHsgLi4uY3VyciwgaWQ6IGluZGV4ICsgMSB9O1xyXG4gICAgICBpZiAobGV2ZWxTdGFjay5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBsZXZlbFN0YWNrLnB1c2goeyBsZXZlbDogbm9kZS5sZXZlbCwgcGFyZW50OiAwIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGxhc3QgPSBsZXZlbFN0YWNrW2xldmVsU3RhY2subGVuZ3RoIC0gMV07XHJcbiAgICAgICAgaWYgKG5vZGUubGV2ZWwgPiBsYXN0LmxldmVsKSB7XHJcbiAgICAgICAgICBsZXZlbFN0YWNrLnB1c2goeyBsZXZlbDogbm9kZS5sZXZlbCwgcGFyZW50OiBsYXN0Tm9kZS5pZCB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKG5vZGUubGV2ZWwgPCBsYXN0LmxldmVsKSB7XHJcbiAgICAgICAgICBjb25zdFxyXG4gICAgICAgICAgICBsZXZlbERpZmYgPSBsYXN0LmxldmVsIC0gbm9kZS5sZXZlbCAtIDEsXHJcbiAgICAgICAgICAgIGxhc3RJbmRleCA9IGxldmVsU3RhY2subGVuZ3RoIC0gMTtcclxuICAgICAgICAgIGxldmVsU3RhY2suc3BsaWNlKGxhc3RJbmRleCAtIGxldmVsRGlmZiwgbGFzdEluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgbm9kZS5wYXJlbnRJZCA9IGxldmVsU3RhY2tbbGV2ZWxTdGFjay5sZW5ndGggLSAxXS5wYXJlbnQ7XHJcbiAgICAgIGxhc3ROb2RlID0gbm9kZTtcclxuICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBsaXN0VG9UcmVlID0gKGFyciA9IFtdKSA9PiB7XHJcbiAgICAgbGV0IGluZGV4TWFwID0gbmV3IE1hcCgpO1xyXG4gICAgIGFyci5mb3JFYWNoKChub2RlOmFueSwgaW5kZXg6bnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaW5kZXhNYXAuc2V0KG5vZGUuaWQsIGluZGV4KVxyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXTtcclxuICAgICB9KTtcclxuICAgICByZXR1cm4gYXJyLnJlZHVjZSgocmVzOmFueSwgbm9kZTphbnksIGluZGV4Om51bWJlciwgYWxsOmFueSkgPT4ge1xyXG4gICAgICAgIGlmIChub2RlLnBhcmVudElkID09PSAwKSByZXR1cm4gWy4uLnJlcywgbm9kZV07XHJcbiAgICAgICAgYWxsW2luZGV4TWFwLmdldChub2RlLnBhcmVudElkKV0uY2hpbGRyZW4ucHVzaChub2RlKTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgIH0sIFtdKTtcclxuICB9O1xyXG5cclxuICB0cmVlVG9PYmplY3QgPSAodHJlZTphbnkgPSBbXSwgcmVzdWx0OmFueSA9IHt9KSA9PiB7XHJcbiAgICB0cmVlLmZvckVhY2goKGNoaWxkOmFueSkgPT4ge1xyXG4gICAgICAgIGxldCBtb2RpZnlPYmo6YW55ID0ge307XHJcbiAgICAgICAgbW9kaWZ5T2JqWydyZWZlcmVuY2UnXSA9IGNoaWxkLnJlZmVyZW5jZTtcclxuICAgICAgICBpZihjaGlsZCAmJiBjaGlsZC5jcml0ZXJpYSl7XHJcbiAgICAgICAgICBtb2RpZnlPYmpbJ2NyaXRlcmlhJ10gPSBjaGlsZC5jcml0ZXJpYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoY2hpbGQuYWxsU2VsZWN0ZWQpe1xyXG4gICAgICAgICAgbW9kaWZ5T2JqWydyZWZlcmVuY2UnXVsnYWxsU2VsZWN0ZWQnXSA9IGNoaWxkLmFsbFNlbGVjdGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihjaGlsZC5zZWxlY3Qpe1xyXG4gICAgICAgICAgbW9kaWZ5T2JqWydyZWZlcmVuY2UnXVsnc2VsZWN0J10gPSBjaGlsZC5zZWxlY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGNoaWxkLmxldmVsID09IDApe1xyXG4gICAgICAgICAgcmVzdWx0W2NoaWxkLml0ZW1dID0gbW9kaWZ5T2JqO1xyXG4gICAgICAgIH1lbHNlIGlmKGNoaWxkLmV4cGFuZGFibGUpe1xyXG4gICAgICAgICAgaWYoIXJlc3VsdFtjaGlsZC50eXBlXSkgcmVzdWx0W2NoaWxkLnR5cGVdID0ge31cclxuICAgICAgICAgIHJlc3VsdFtjaGlsZC50eXBlXVtjaGlsZC5pdGVtXSA9IG1vZGlmeU9iajtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGlmKCFyZXN1bHRbY2hpbGQudHlwZV0pIHJlc3VsdFtjaGlsZC50eXBlXSA9IHt9XHJcbiAgICAgICAgICByZXN1bHRbY2hpbGQudHlwZV1bY2hpbGQuaXRlbV0gPSBtb2RpZnlPYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGNoaWxkLmNoaWxkcmVuICYmIGNoaWxkLmNoaWxkcmVuLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgdGhpcy50cmVlVG9PYmplY3QoY2hpbGQuY2hpbGRyZW4sIGNoaWxkLmxldmVsID09IDAgPyByZXN1bHRbY2hpbGQuaXRlbV0gOiByZXN1bHRbY2hpbGQudHlwZV1bY2hpbGQuaXRlbV0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9O1xyXG4gIGJ1aWxkVHJlZU9iamVjdChhcnIgPSBbXSkge1xyXG4gICAgbGV0IHJlbGF0aW9uU2hpcCA9IHRoaXMuYXBwbHlSZWxhdGlvbnNoaXBzKGFycik7XHJcbiAgICBsZXQgbGlzdCA9IHRoaXMubGlzdFRvVHJlZShyZWxhdGlvblNoaXApO1xyXG4gICAgbGV0IHRyZWUgPSB0aGlzLnRyZWVUb09iamVjdChsaXN0KTtcclxuICAgIHJldHVybiB0cmVlO1xyXG4gIH1cclxuICAvL1RoaXMgZnVuY3Rpb24gZm9yIGNvbnZldCBsaXN0IHRvIHRyZWUgbWFwXHJcblxyXG4gIC8qKiBBZGQgYW4gaXRlbSB0byB0by1kbyBsaXN0ICovXHJcbiAgaW5zZXJ0SXRlbShwYXJlbnQ6IFRvZG9JdGVtTm9kZSwgbmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAocGFyZW50LmNoaWxkcmVuKSB7XHJcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKHtpdGVtOiBuYW1lfSBhcyBUb2RvSXRlbU5vZGUpO1xyXG4gICAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlSXRlbShub2RlOiBUb2RvSXRlbU5vZGUsIG5hbWU6IHN0cmluZykge1xyXG4gICAgbm9kZS5pdGVtID0gbmFtZTtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgfVxyXG4gIHVwZGF0ZVRyZWVWaWV3RGF0YShyZXNwb25jZTphbnksZmllbGQ6YW55LHRyZWVWaWV3RGF0YTphbnkpe1xyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgdHJlZVZpZXdEYXRhOnRyZWVWaWV3RGF0YVxyXG4gICAgfVxyXG4gICAgY29uc3QgZmllbGROYW1lID0gZmllbGQuZmllbGRfbmFtZTtcclxuICAgIGxldCBrZXlzID0gW107XHJcbiAgICBsZXQgZmllbGRzID0gW107XHJcbiAgICBpZihmaWVsZCAmJiBmaWVsZC50cmVlVmlld0tleXMpe1xyXG4gICAgICBrZXlzID0gZmllbGQudHJlZVZpZXdLZXlzO1xyXG4gICAgfVxyXG4gICAgaWYoZmllbGQgJiYgZmllbGQuZmllbGRzICYmIGZpZWxkLmZpZWxkcy5sZW5ndGggPiAwKXtcclxuICAgICAgZmllbGRzID0gZmllbGQuZmllbGRzO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdHJlZURhdGEgPSB0aGlzLmJ1aWxkRmlsZVRyZWUocmVzcG9uY2UsMCxrZXlzKTtcclxuICAgIC8vY29uc29sZS5sb2codHJlZURhdGEpO1xyXG4gICAgbGV0IHNlbGVjdGVkTm9kZUxpc3QgPSB0aGlzLmNvbnZlcnRUcmVlVG9MaXN0KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodHJlZURhdGEpKSxbXSk7XHJcbiAgICBsZXQgY2hpbGRMaXN0ID0gW107XHJcbiAgICBpZihmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApe1xyXG4gICAgICBjaGlsZExpc3QgPSB0aGlzLmNvbnZlcnRQYXJlbnROb2RlVG9DaGlsZE5vZGVMaXN0KHNlbGVjdGVkTm9kZUxpc3QsZmllbGRzKTtcclxuICAgIH1cclxuICAgIC8vY29uc29sZS5sb2coc2VsZWN0ZWROb2RlTGlzdCk7XHJcbiAgICAvL2NvbnNvbGUubG9nKGNoaWxkTGlzdCk7XHJcbiAgICAvL3RoaXMuZGF0YVNvdXJjZVtmaWVsZE5hbWVdLmRhdGEgPSB0cmVlRGF0YTtcclxuICAgIHJlc3VsdC50cmVlVmlld0RhdGFbZmllbGROYW1lXSA9IGNoaWxkTGlzdDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|