@plait/core 0.52.0 → 0.53.1
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/board/board.component.d.ts +1 -1
- package/constants/cursor.d.ts +1 -0
- package/esm2022/board/board.component.mjs +3 -3
- package/esm2022/constants/cursor.mjs +2 -1
- package/esm2022/interfaces/board.mjs +1 -1
- package/esm2022/interfaces/path.mjs +2 -2
- package/esm2022/plugins/create-board.mjs +3 -2
- package/esm2022/plugins/with-moving.mjs +36 -17
- package/esm2022/plugins/with-related-fragment.mjs +20 -0
- package/esm2022/plugins/with-selection.mjs +32 -98
- package/esm2022/public-api.mjs +2 -1
- package/esm2022/transforms/group.mjs +47 -0
- package/esm2022/transforms/index.mjs +2 -1
- package/esm2022/utils/angle.mjs +75 -0
- package/esm2022/utils/debug.mjs +76 -0
- package/esm2022/utils/element.mjs +17 -5
- package/esm2022/utils/group.mjs +79 -84
- package/esm2022/utils/helper.mjs +10 -1
- package/esm2022/utils/index.mjs +2 -1
- package/esm2022/utils/math.mjs +11 -1
- package/esm2022/utils/selection.mjs +89 -3
- package/esm2022/utils/touch.mjs +15 -4
- package/fesm2022/plait-core.mjs +1332 -1073
- package/fesm2022/plait-core.mjs.map +1 -1
- package/interfaces/board.d.ts +1 -0
- package/package.json +1 -1
- package/plugins/with-moving.d.ts +1 -1
- package/plugins/with-related-fragment.d.ts +2 -0
- package/public-api.d.ts +1 -0
- package/transforms/group.d.ts +7 -0
- package/transforms/index.d.ts +1 -0
- package/utils/angle.d.ts +13 -0
- package/utils/debug.d.ts +13 -0
- package/utils/group.d.ts +15 -15
- package/utils/helper.d.ts +2 -0
- package/utils/index.d.ts +1 -0
- package/utils/math.d.ts +8 -0
- package/utils/selection.d.ts +6 -3
- package/utils/touch.d.ts +1 -1
- package/esm2022/plugins/with-group.mjs +0 -27
- package/plugins/with-group.d.ts +0 -2
package/esm2022/utils/group.mjs
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { ACTIVE_STROKE_WIDTH } from '../constants';
|
|
2
|
-
import {
|
|
3
|
-
import { PlaitGroupElement } from '../interfaces/group';
|
|
4
|
-
import { Transforms } from '../transforms';
|
|
2
|
+
import { PlaitGroupElement, SELECTION_BORDER_COLOR } from '../interfaces';
|
|
5
3
|
import { createG } from './dom';
|
|
6
4
|
import { drawRectangle } from './drawing/rectangle';
|
|
7
|
-
import {
|
|
5
|
+
import { getRectangleByElements } from './element';
|
|
8
6
|
import { idCreator } from './id-creator';
|
|
9
7
|
import { getSelectedElements } from './selected-element';
|
|
10
8
|
import { isSelectionMoving } from './selection';
|
|
9
|
+
import { depthFirstRecursion } from './tree';
|
|
11
10
|
export const getElementsInGroup = (board, group, recursion, includeGroup) => {
|
|
12
11
|
let result = [];
|
|
13
12
|
const elements = board.children.filter(value => value.groupId === group.id);
|
|
@@ -17,7 +16,7 @@ export const getElementsInGroup = (board, group, recursion, includeGroup) => {
|
|
|
17
16
|
if (includeGroup) {
|
|
18
17
|
result.push(item);
|
|
19
18
|
}
|
|
20
|
-
result.push(...getElementsInGroup(board, item, recursion));
|
|
19
|
+
result.push(...getElementsInGroup(board, item, recursion, includeGroup));
|
|
21
20
|
}
|
|
22
21
|
else {
|
|
23
22
|
result.push(item);
|
|
@@ -29,18 +28,28 @@ export const getElementsInGroup = (board, group, recursion, includeGroup) => {
|
|
|
29
28
|
}
|
|
30
29
|
return result;
|
|
31
30
|
};
|
|
31
|
+
export const getAllElementsInGroup = (board, group, recursion, includeGroup) => {
|
|
32
|
+
const elementsInGroup = getElementsInGroup(board, group, recursion, includeGroup);
|
|
33
|
+
const result = [];
|
|
34
|
+
elementsInGroup.forEach(element => {
|
|
35
|
+
depthFirstRecursion(element, node => {
|
|
36
|
+
result.push(node);
|
|
37
|
+
}, () => true);
|
|
38
|
+
});
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
32
41
|
export const getRectangleByGroup = (board, group, recursion) => {
|
|
33
|
-
const elementsInGroup =
|
|
42
|
+
const elementsInGroup = getAllElementsInGroup(board, group, recursion);
|
|
34
43
|
return getRectangleByElements(board, elementsInGroup, false);
|
|
35
44
|
};
|
|
36
|
-
export const getGroupByElement = (board, element, recursion) => {
|
|
37
|
-
const group = board.children.find(item => item.id === element?.groupId);
|
|
45
|
+
export const getGroupByElement = (board, element, recursion, source) => {
|
|
46
|
+
const group = (source || board.children).find(item => item.id === element?.groupId);
|
|
38
47
|
if (!group) {
|
|
39
48
|
return recursion ? [] : null;
|
|
40
49
|
}
|
|
41
50
|
if (recursion) {
|
|
42
51
|
const groups = [group];
|
|
43
|
-
const grandGroups = getGroupByElement(board, group, recursion);
|
|
52
|
+
const grandGroups = getGroupByElement(board, group, recursion, source);
|
|
44
53
|
if (grandGroups.length) {
|
|
45
54
|
groups.push(...grandGroups);
|
|
46
55
|
}
|
|
@@ -51,56 +60,66 @@ export const getGroupByElement = (board, element, recursion) => {
|
|
|
51
60
|
}
|
|
52
61
|
};
|
|
53
62
|
export const getHighestGroup = (board, element) => {
|
|
54
|
-
const
|
|
55
|
-
if (
|
|
56
|
-
return
|
|
63
|
+
const hitElementGroups = getGroupByElement(board, element, true);
|
|
64
|
+
if (hitElementGroups.length) {
|
|
65
|
+
return hitElementGroups[hitElementGroups.length - 1];
|
|
57
66
|
}
|
|
58
67
|
return null;
|
|
59
68
|
};
|
|
60
69
|
export const getElementsInGroupByElement = (board, element) => {
|
|
61
70
|
const highestGroup = getHighestGroup(board, element);
|
|
62
71
|
if (highestGroup) {
|
|
63
|
-
return
|
|
72
|
+
return getAllElementsInGroup(board, highestGroup, true);
|
|
64
73
|
}
|
|
65
74
|
else {
|
|
66
75
|
return [element];
|
|
67
76
|
}
|
|
68
77
|
};
|
|
69
|
-
export const isSelectedElementOrGroup = (board, element) => {
|
|
70
|
-
const selectedElements = getSelectedElements(board);
|
|
78
|
+
export const isSelectedElementOrGroup = (board, element, elements) => {
|
|
79
|
+
const selectedElements = elements || getSelectedElements(board);
|
|
71
80
|
if (PlaitGroupElement.isGroup(element)) {
|
|
72
|
-
return isSelectedAllElementsInGroup(board, element);
|
|
81
|
+
return isSelectedAllElementsInGroup(board, element, elements);
|
|
73
82
|
}
|
|
74
|
-
return selectedElements.includes(element);
|
|
83
|
+
return selectedElements.map(item => item.id).includes(element.id);
|
|
75
84
|
};
|
|
76
|
-
export const isSelectedAllElementsInGroup = (board, group) => {
|
|
77
|
-
const selectedElements = getSelectedElements(board);
|
|
85
|
+
export const isSelectedAllElementsInGroup = (board, group, elements) => {
|
|
86
|
+
const selectedElements = elements || getSelectedElements(board);
|
|
78
87
|
const elementsInGroup = getElementsInGroup(board, group, true);
|
|
79
|
-
return elementsInGroup.every(item => selectedElements.includes(item));
|
|
88
|
+
return elementsInGroup.every(item => selectedElements.map(element => element.id).includes(item.id));
|
|
80
89
|
};
|
|
81
|
-
export const
|
|
90
|
+
export const filterSelectedGroups = (board, groups, elements) => {
|
|
82
91
|
const selectedGroups = [];
|
|
83
92
|
groups.forEach(item => {
|
|
84
|
-
if (isSelectedElementOrGroup(board, item)) {
|
|
93
|
+
if (isSelectedElementOrGroup(board, item, elements)) {
|
|
85
94
|
selectedGroups.push(item);
|
|
86
95
|
}
|
|
87
96
|
});
|
|
88
97
|
return selectedGroups;
|
|
89
98
|
};
|
|
90
|
-
export const
|
|
91
|
-
const
|
|
92
|
-
const
|
|
99
|
+
export const getSelectedGroups = (board, elements) => {
|
|
100
|
+
const highestSelectedGroups = getHighestSelectedGroups(board, elements);
|
|
101
|
+
const groups = [];
|
|
102
|
+
highestSelectedGroups.forEach(item => {
|
|
103
|
+
groups.push(item);
|
|
104
|
+
const elementsInGroup = getElementsInGroup(board, item, true, true);
|
|
105
|
+
groups.push(...elementsInGroup.filter(item => PlaitGroupElement.isGroup(item)));
|
|
106
|
+
});
|
|
107
|
+
return groups;
|
|
108
|
+
};
|
|
109
|
+
export const getHighestSelectedGroup = (board, element, elements) => {
|
|
110
|
+
const hitElementGroups = getGroupByElement(board, element, true, elements);
|
|
111
|
+
const selectedGroups = filterSelectedGroups(board, hitElementGroups, elements);
|
|
93
112
|
if (selectedGroups.length) {
|
|
94
113
|
return selectedGroups[selectedGroups.length - 1];
|
|
95
114
|
}
|
|
96
115
|
return null;
|
|
97
116
|
};
|
|
98
|
-
export const getHighestSelectedGroups = (board) => {
|
|
117
|
+
export const getHighestSelectedGroups = (board, elements) => {
|
|
99
118
|
let result = [];
|
|
100
|
-
const selectedElements = getSelectedElements(board);
|
|
119
|
+
const selectedElements = elements || getSelectedElements(board);
|
|
101
120
|
selectedElements.forEach(item => {
|
|
102
121
|
if (item.groupId) {
|
|
103
|
-
const group = getHighestSelectedGroup(board, item);
|
|
122
|
+
const group = getHighestSelectedGroup(board, item, elements);
|
|
104
123
|
if (group && !result.includes(group)) {
|
|
105
124
|
result.push(group);
|
|
106
125
|
}
|
|
@@ -108,15 +127,17 @@ export const getHighestSelectedGroups = (board) => {
|
|
|
108
127
|
});
|
|
109
128
|
return result;
|
|
110
129
|
};
|
|
111
|
-
export const getSelectedIsolatedElements = (board) => {
|
|
130
|
+
export const getSelectedIsolatedElements = (board, elements) => {
|
|
112
131
|
let result = [];
|
|
113
|
-
const selectedElements = getSelectedElements(board);
|
|
114
|
-
selectedElements
|
|
132
|
+
const selectedElements = elements || getSelectedElements(board);
|
|
133
|
+
selectedElements
|
|
134
|
+
.filter(item => !PlaitGroupElement.isGroup(item))
|
|
135
|
+
.forEach(item => {
|
|
115
136
|
if (!item.groupId) {
|
|
116
137
|
result.push(item);
|
|
117
138
|
}
|
|
118
139
|
else {
|
|
119
|
-
const group = getHighestSelectedGroup(board, item);
|
|
140
|
+
const group = getHighestSelectedGroup(board, item, elements);
|
|
120
141
|
if (!group) {
|
|
121
142
|
result.push(item);
|
|
122
143
|
}
|
|
@@ -124,8 +145,12 @@ export const getSelectedIsolatedElements = (board) => {
|
|
|
124
145
|
});
|
|
125
146
|
return result;
|
|
126
147
|
};
|
|
127
|
-
export const
|
|
128
|
-
|
|
148
|
+
export const getSelectedIsolatedElementsCanAddToGroup = (board, elements) => {
|
|
149
|
+
const selectedIsolatedElements = getSelectedIsolatedElements(board, elements);
|
|
150
|
+
return selectedIsolatedElements.filter(item => board.canAddToGroup(item));
|
|
151
|
+
};
|
|
152
|
+
export const getHighestSelectedElements = (board, elements) => {
|
|
153
|
+
return [...getHighestSelectedGroups(board, elements), ...getSelectedIsolatedElements(board, elements)];
|
|
129
154
|
};
|
|
130
155
|
export const createGroupRectangleG = (board, elements) => {
|
|
131
156
|
const selectedElements = getSelectedElements(board);
|
|
@@ -145,11 +170,17 @@ export const createGroupRectangleG = (board, elements) => {
|
|
|
145
170
|
});
|
|
146
171
|
return groupRectangleG;
|
|
147
172
|
};
|
|
148
|
-
export const createGroup = () => {
|
|
149
|
-
return
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
173
|
+
export const createGroup = (groupId) => {
|
|
174
|
+
return groupId
|
|
175
|
+
? {
|
|
176
|
+
id: idCreator(),
|
|
177
|
+
type: 'group',
|
|
178
|
+
groupId
|
|
179
|
+
}
|
|
180
|
+
: {
|
|
181
|
+
id: idCreator(),
|
|
182
|
+
type: 'group'
|
|
183
|
+
};
|
|
153
184
|
};
|
|
154
185
|
export const nonGroupInHighestSelectedElements = (elements) => {
|
|
155
186
|
return elements.every(item => !item.groupId);
|
|
@@ -157,53 +188,17 @@ export const nonGroupInHighestSelectedElements = (elements) => {
|
|
|
157
188
|
export const hasSelectedElementsInSameGroup = (elements) => {
|
|
158
189
|
return elements.every(item => item.groupId && item.groupId === elements[0].groupId);
|
|
159
190
|
};
|
|
160
|
-
export const canAddGroup = (
|
|
161
|
-
|
|
162
|
-
|
|
191
|
+
export const canAddGroup = (board, elements) => {
|
|
192
|
+
const highestSelectedElements = getHighestSelectedElements(board, elements);
|
|
193
|
+
const rootElements = highestSelectedElements.filter(item => board.canAddToGroup(item));
|
|
194
|
+
if (rootElements.length > 1) {
|
|
195
|
+
return nonGroupInHighestSelectedElements(rootElements) || hasSelectedElementsInSameGroup(rootElements);
|
|
163
196
|
}
|
|
164
197
|
return false;
|
|
165
198
|
};
|
|
166
|
-
export const
|
|
167
|
-
const selectedGroups = getHighestSelectedGroups(board);
|
|
168
|
-
const
|
|
169
|
-
const highestSelectedElements = [...selectedGroups, ...selectedIsolatedElements];
|
|
170
|
-
const group = createGroup();
|
|
171
|
-
if (canAddGroup(highestSelectedElements)) {
|
|
172
|
-
highestSelectedElements.forEach(item => {
|
|
173
|
-
const path = PlaitBoard.findPath(board, item);
|
|
174
|
-
Transforms.setNode(board, { groupId: group.id }, path);
|
|
175
|
-
});
|
|
176
|
-
if (hasSelectedElementsInSameGroup(highestSelectedElements)) {
|
|
177
|
-
const newGroupId = selectedIsolatedElements[0].groupId;
|
|
178
|
-
Transforms.insertNode(board, {
|
|
179
|
-
...group,
|
|
180
|
-
groupId: newGroupId
|
|
181
|
-
}, [board.children.length]);
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
Transforms.insertNode(board, group, [board.children.length]);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
export const canRemoveGroup = (board, selectedGroups) => {
|
|
189
|
-
const selectedElements = getSelectedElements(board);
|
|
199
|
+
export const canRemoveGroup = (board, elements) => {
|
|
200
|
+
const selectedGroups = getHighestSelectedGroups(board, elements);
|
|
201
|
+
const selectedElements = elements || getSelectedElements(board);
|
|
190
202
|
return selectedElements.length > 0 && selectedGroups.length > 0;
|
|
191
203
|
};
|
|
192
|
-
export const removeGroup = (board) => {
|
|
193
|
-
const selectedGroups = getHighestSelectedGroups(board);
|
|
194
|
-
if (canRemoveGroup(board, selectedGroups)) {
|
|
195
|
-
selectedGroups.map(group => {
|
|
196
|
-
const elementsInGroup = findElements(board, {
|
|
197
|
-
match: item => item.groupId === group.id,
|
|
198
|
-
recursion: () => false
|
|
199
|
-
});
|
|
200
|
-
elementsInGroup.forEach(item => {
|
|
201
|
-
const path = PlaitBoard.findPath(board, item);
|
|
202
|
-
Transforms.setNode(board, { groupId: group.groupId || undefined }, path);
|
|
203
|
-
});
|
|
204
|
-
const groupPath = PlaitBoard.findPath(board, group);
|
|
205
|
-
Transforms.removeNode(board, groupPath);
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
};
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBZ0Isc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFpQixFQUFFLFNBQW1CLEVBQUUsWUFBc0IsRUFBRSxFQUFFO0lBQ3BILElBQUksTUFBTSxHQUFtQixFQUFFLENBQUM7SUFDaEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBRSxLQUFzQixDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFtQixDQUFDO0lBQ2hILElBQUksU0FBUyxFQUFFLENBQUM7UUFDWixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BCLElBQUksaUJBQWlCLENB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RUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQUNUSVZFX1NUUk9LRV9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFNFTEVDVElPTl9CT1JERVJfQ09MT1IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFBsYWl0R3JvdXAsIFBsYWl0R3JvdXBFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ncm91cCc7XG5pbXBvcnQgeyBUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBjcmVhdGVHIH0gZnJvbSAnLi9kb20nO1xuaW1wb3J0IHsgZHJhd1JlY3RhbmdsZSB9IGZyb20gJy4vZHJhd2luZy9yZWN0YW5nbGUnO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRzLCBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzIH0gZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCB7IGlkQ3JlYXRvciB9IGZyb20gJy4vaWQtY3JlYXRvcic7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcbmltcG9ydCB7IGlzU2VsZWN0aW9uTW92aW5nIH0gZnJvbSAnLi9zZWxlY3Rpb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudHNJbkdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBncm91cDogUGxhaXRHcm91cCwgcmVjdXJzaW9uPzogYm9vbGVhbiwgaW5jbHVkZUdyb3VwPzogYm9vbGVhbikgPT4ge1xuICAgIGxldCByZXN1bHQ6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgY29uc3QgZWxlbWVudHMgPSBib2FyZC5jaGlsZHJlbi5maWx0ZXIodmFsdWUgPT4gKHZhbHVlIGFzIFBsYWl0RWxlbWVudCkuZ3JvdXBJZCA9PT0gZ3JvdXAuaWQpIGFzIFBsYWl0RWxlbWVudFtdO1xuICAgIGlmIChyZWN1cnNpb24pIHtcbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uZ2V0RWxlbWVudHNJbkdyb3VwKGJvYXJkLCBpdGVtLCByZWN1cnNpb24pKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGluY2x1ZGVHcm91cCA/IGVsZW1lbnRzIDogKGVsZW1lbnRzLmZpbHRlcihpdGVtID0+ICFQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGl0ZW0pKSBhcyBQbGFpdEVsZW1lbnRbXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjdGFuZ2xlQnlHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZ3JvdXA6IFBsYWl0R3JvdXAsIHJlY3Vyc2lvbj86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBlbGVtZW50c0luR3JvdXAgPSBnZXRFbGVtZW50c0luR3JvdXAoYm9hcmQsIGdyb3VwLCByZWN1cnNpb24pIGFzIFBsYWl0RWxlbWVudFtdO1xuICAgIHJldHVybiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBlbGVtZW50c0luR3JvdXAsIGZhbHNlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cEJ5RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCByZWN1cnNpb24/OiBib29sZWFuKTogUGxhaXRHcm91cCB8IFBsYWl0R3JvdXBbXSB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGdyb3VwID0gYm9hcmQuY2hpbGRyZW4uZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGVsZW1lbnQ/Lmdyb3VwSWQpO1xuICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgcmV0dXJuIHJlY3Vyc2lvbiA/IFtdIDogbnVsbDtcbiAgICB9XG4gICAgaWYgKHJlY3Vyc2lvbikge1xuICAgICAgICBjb25zdCBncm91cHMgPSBbZ3JvdXBdO1xuICAgICAgICBjb25zdCBncmFuZEdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBncm91cCwgcmVjdXJzaW9uKSBhcyBQbGFpdEdyb3VwW107XG4gICAgICAgIGlmIChncmFuZEdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGdyb3Vwcy5wdXNoKC4uLmdyYW5kR3JvdXBzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ3JvdXBzIGFzIFBsYWl0R3JvdXBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ3JvdXAgYXMgUGxhaXRHcm91cDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdEdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBncm91cHMgPSBnZXRHcm91cEJ5RWxlbWVudChib2FyZCwgZWxlbWVudCwgdHJ1ZSkgYXMgUGxhaXRHcm91cFtdO1xuICAgIGlmIChncm91cHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGhpZ2hlc3RHcm91cCA9IGdldEhpZ2hlc3RHcm91cChib2FyZCwgZWxlbWVudCk7XG4gICAgaWYgKGhpZ2hlc3RHcm91cCkge1xuICAgICAgICByZXR1cm4gZ2V0RWxlbWVudHNJbkdyb3VwKGJvYXJkLCBoaWdoZXN0R3JvdXAsIHRydWUpIGFzIFBsYWl0R3JvdXBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW2VsZW1lbnRdO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlbGVjdGVkRWxlbWVudE9yR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBpZiAoUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNTZWxlY3RlZEFsbEVsZW1lbnRzSW5Hcm91cChib2FyZCwgZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RlZEVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VsZWN0ZWRBbGxFbGVtZW50c0luR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdyb3VwOiBQbGFpdEdyb3VwKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGdldEVsZW1lbnRzSW5Hcm91cChib2FyZCwgZ3JvdXAsIHRydWUpO1xuICAgIHJldHVybiBlbGVtZW50c0luR3JvdXAuZXZlcnkoaXRlbSA9PiBzZWxlY3RlZEVsZW1lbnRzLmluY2x1ZGVzKGl0ZW0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZEdyb3VwcyA9IChib2FyZDogUGxhaXRCb2FyZCwgZ3JvdXBzOiBQbGFpdEdyb3VwW10pOiBQbGFpdEdyb3VwW10gPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzOiBQbGFpdEdyb3VwW10gPSBbXTtcbiAgICBncm91cHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGlzU2VsZWN0ZWRFbGVtZW50T3JHcm91cChib2FyZCwgaXRlbSkpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZWN0ZWRHcm91cHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdFNlbGVjdGVkR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCk6IFBsYWl0R3JvdXAgfCBudWxsID0+IHtcbiAgICBjb25zdCBncm91cHMgPSBnZXRHcm91cEJ5RWxlbWVudChib2FyZCwgZWxlbWVudCwgdHJ1ZSkgYXMgUGxhaXRHcm91cFtdO1xuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gZ2V0U2VsZWN0ZWRHcm91cHMoYm9hcmQsIGdyb3Vwcyk7XG4gICAgaWYgKHNlbGVjdGVkR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRHcm91cHNbc2VsZWN0ZWRHcm91cHMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3VwcyA9IChib2FyZDogUGxhaXRCb2FyZCk6IFBsYWl0R3JvdXBbXSA9PiB7XG4gICAgbGV0IHJlc3VsdDogUGxhaXRHcm91cFtdID0gW107XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uZ3JvdXBJZCkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cChib2FyZCwgaXRlbSk7XG4gICAgICAgICAgICBpZiAoZ3JvdXAgJiYgIXJlc3VsdC5pbmNsdWRlcyhncm91cCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGxldCByZXN1bHQ6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKCFpdGVtLmdyb3VwSWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cChib2FyZCwgaXRlbSk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIFsuLi5nZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQpLCAuLi5nZXRTZWxlY3RlZElzb2xhdGVkRWxlbWVudHMoYm9hcmQpXTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHcm91cFJlY3RhbmdsZUcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSk6IFNWR0dFbGVtZW50IHwgbnVsbCA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNvbnN0IGdyb3VwUmVjdGFuZ2xlRzogU1ZHR0VsZW1lbnQgPSBjcmVhdGVHKCk7XG4gICAgY29uc3QgaXNNb3ZpbmcgPSBpc1NlbGVjdGlvbk1vdmluZyhib2FyZCk7XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBpc1JlbmRlciA9ICghc2VsZWN0ZWRFbGVtZW50cy5pbmNsdWRlcyhpdGVtKSAmJiAhaXNNb3ZpbmcpIHx8IGlzTW92aW5nO1xuICAgICAgICBpZiAoaXRlbS5ncm91cElkICYmIGlzUmVuZGVyKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldEVsZW1lbnRzSW5Hcm91cEJ5RWxlbWVudChib2FyZCwgaXRlbSk7XG4gICAgICAgICAgICBjb25zdCByZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cywgZmFsc2UpO1xuICAgICAgICAgICAgZ3JvdXBSZWN0YW5nbGVHLmFwcGVuZChcbiAgICAgICAgICAgICAgICBkcmF3UmVjdGFuZ2xlKGJvYXJkLCByZWN0YW5nbGUsIHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogQUNUSVZFX1NUUk9LRV9XSURUSCxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTGluZURhc2g6IFs1XVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdyb3VwUmVjdGFuZ2xlRztcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHcm91cCA9ICgpOiBQbGFpdEdyb3VwID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgIHR5cGU6ICdncm91cCdcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG5vbkdyb3VwSW5IaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyA9IChlbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gZWxlbWVudHMuZXZlcnkoaXRlbSA9PiAhaXRlbS5ncm91cElkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5ncm91cElkICYmIGl0ZW0uZ3JvdXBJZCA9PT0gZWxlbWVudHNbMF0uZ3JvdXBJZCk7XG59O1xuXG5leHBvcnQgY29uc3QgY2FuQWRkR3JvdXAgPSAoaGlnaGVzdFNlbGVjdGVkRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgaWYgKGhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcmV0dXJuIG5vbkdyb3VwSW5IaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyhoaWdoZXN0U2VsZWN0ZWRFbGVtZW50cykgfHwgaGFzU2VsZWN0ZWRFbGVtZW50c0luU2FtZUdyb3VwKGhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY29uc3QgaGlnaGVzdFNlbGVjdGVkRWxlbWVudHMgPSBbLi4uc2VsZWN0ZWRHcm91cHMsIC4uLnNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50c107XG4gICAgY29uc3QgZ3JvdXAgPSBjcmVhdGVHcm91cCgpO1xuICAgIGlmIChjYW5BZGRHcm91cChoaWdoZXN0U2VsZWN0ZWRFbGVtZW50cykpIHtcbiAgICAgICAgaGlnaGVzdFNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBpdGVtKTtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBncm91cElkOiBncm91cC5pZCB9LCBwYXRoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAoaGlnaGVzdFNlbGVjdGVkRWxlbWVudHMpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdHcm91cElkID0gc2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzWzBdLmdyb3VwSWQ7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoXG4gICAgICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJZDogbmV3R3JvdXBJZFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW2JvYXJkLmNoaWxkcmVuLmxlbmd0aF1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIGdyb3VwLCBbYm9hcmQuY2hpbGRyZW4ubGVuZ3RoXSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2FuUmVtb3ZlR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkR3JvdXBzOiBQbGFpdEdyb3VwW10pID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZEdyb3Vwcy5sZW5ndGggPiAwO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQpO1xuICAgIGlmIChjYW5SZW1vdmVHcm91cChib2FyZCwgc2VsZWN0ZWRHcm91cHMpKSB7XG4gICAgICAgIHNlbGVjdGVkR3JvdXBzLm1hcChncm91cCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c0luR3JvdXAgPSBmaW5kRWxlbWVudHMoYm9hcmQsIHtcbiAgICAgICAgICAgICAgICBtYXRjaDogaXRlbSA9PiBpdGVtLmdyb3VwSWQgPT09IGdyb3VwLmlkLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2lvbjogKCkgPT4gZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxlbWVudHNJbkdyb3VwLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBncm91cElkOiBncm91cC5ncm91cElkIHx8IHVuZGVmaW5lZCB9LCBwYXRoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBQYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgZ3JvdXApO1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5yZW1vdmVOb2RlKGJvYXJkLCBncm91cFBhdGgpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuIl19
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUF3QyxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTdDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFpQixFQUFFLFNBQW1CLEVBQUUsWUFBc0IsRUFBRSxFQUFFO0lBQ3BILElBQUksTUFBTSxHQUFtQixFQUFFLENBQUM7SUFDaEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBRSxLQUFzQixDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFtQixDQUFDO0lBQ2hILElBQUksU0FBUyxFQUFFLENBQUM7UUFDWixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BCLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksWUFBWSxF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TSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLGlDQUFpQyxDQUFDLFlBQVksQ0FBQyxJQUFJLDhCQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFFBQXlCLEVBQUUsRUFBRTtJQUMzRSxNQUFNLGNBQWMsR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLElBQUksbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEUsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFDVElWRV9TVFJPS0VfV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBQbGFpdEdyb3VwLCBQbGFpdEdyb3VwRWxlbWVudCwgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY3JlYXRlRyB9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7IGRyYXdSZWN0YW5nbGUgfSBmcm9tICcuL2RyYXdpbmcvcmVjdGFuZ2xlJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgaWRDcmVhdG9yIH0gZnJvbSAnLi9pZC1jcmVhdG9yJztcbmltcG9ydCB7IGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tICcuL3NlbGVjdGVkLWVsZW1lbnQnO1xuaW1wb3J0IHsgaXNTZWxlY3Rpb25Nb3ZpbmcgfSBmcm9tICcuL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uIH0gZnJvbSAnLi90cmVlJztcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRzSW5Hcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZ3JvdXA6IFBsYWl0R3JvdXAsIHJlY3Vyc2lvbj86IGJvb2xlYW4sIGluY2x1ZGVHcm91cD86IGJvb2xlYW4pID0+IHtcbiAgICBsZXQgcmVzdWx0OiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnN0IGVsZW1lbnRzID0gYm9hcmQuY2hpbGRyZW4uZmlsdGVyKHZhbHVlID0+ICh2YWx1ZSBhcyBQbGFpdEVsZW1lbnQpLmdyb3VwSWQgPT09IGdyb3VwLmlkKSBhcyBQbGFpdEVsZW1lbnRbXTtcbiAgICBpZiAocmVjdXJzaW9uKSB7XG4gICAgICAgIGVsZW1lbnRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChpdGVtKSkge1xuICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmdldEVsZW1lbnRzSW5Hcm91cChib2FyZCwgaXRlbSwgcmVjdXJzaW9uLCBpbmNsdWRlR3JvdXApKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGluY2x1ZGVHcm91cCA/IGVsZW1lbnRzIDogKGVsZW1lbnRzLmZpbHRlcihpdGVtID0+ICFQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGl0ZW0pKSBhcyBQbGFpdEVsZW1lbnRbXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsRWxlbWVudHNJbkdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBncm91cDogUGxhaXRHcm91cCwgcmVjdXJzaW9uPzogYm9vbGVhbiwgaW5jbHVkZUdyb3VwPzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGdldEVsZW1lbnRzSW5Hcm91cChib2FyZCwgZ3JvdXAsIHJlY3Vyc2lvbiwgaW5jbHVkZUdyb3VwKTtcbiAgICBjb25zdCByZXN1bHQ6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgZWxlbWVudHNJbkdyb3VwLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4gdHJ1ZVxuICAgICAgICApO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjdGFuZ2xlQnlHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZ3JvdXA6IFBsYWl0R3JvdXAsIHJlY3Vyc2lvbj86IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBlbGVtZW50c0luR3JvdXAgPSBnZXRBbGxFbGVtZW50c0luR3JvdXAoYm9hcmQsIGdyb3VwLCByZWN1cnNpb24pIGFzIFBsYWl0RWxlbWVudFtdO1xuICAgIHJldHVybiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBlbGVtZW50c0luR3JvdXAsIGZhbHNlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcm91cEJ5RWxlbWVudCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBlbGVtZW50OiBQbGFpdEVsZW1lbnQsXG4gICAgcmVjdXJzaW9uPzogYm9vbGVhbixcbiAgICBzb3VyY2U/OiBQbGFpdEVsZW1lbnRbXVxuKTogUGxhaXRHcm91cCB8IFBsYWl0R3JvdXBbXSB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGdyb3VwID0gKHNvdXJjZSB8fCBib2FyZC5jaGlsZHJlbikuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGVsZW1lbnQ/Lmdyb3VwSWQpO1xuICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgcmV0dXJuIHJlY3Vyc2lvbiA/IFtdIDogbnVsbDtcbiAgICB9XG4gICAgaWYgKHJlY3Vyc2lvbikge1xuICAgICAgICBjb25zdCBncm91cHMgPSBbZ3JvdXBdO1xuICAgICAgICBjb25zdCBncmFuZEdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBncm91cCwgcmVjdXJzaW9uLCBzb3VyY2UpIGFzIFBsYWl0R3JvdXBbXTtcbiAgICAgICAgaWYgKGdyYW5kR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgZ3JvdXBzLnB1c2goLi4uZ3JhbmRHcm91cHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncm91cHMgYXMgUGxhaXRHcm91cFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBncm91cCBhcyBQbGFpdEdyb3VwO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaWdoZXN0R3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGhpdEVsZW1lbnRHcm91cHMgPSBnZXRHcm91cEJ5RWxlbWVudChib2FyZCwgZWxlbWVudCwgdHJ1ZSkgYXMgUGxhaXRHcm91cFtdO1xuICAgIGlmIChoaXRFbGVtZW50R3JvdXBzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gaGl0RWxlbWVudEdyb3Vwc1toaXRFbGVtZW50R3JvdXBzLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGhpZ2hlc3RHcm91cCA9IGdldEhpZ2hlc3RHcm91cChib2FyZCwgZWxlbWVudCk7XG4gICAgaWYgKGhpZ2hlc3RHcm91cCkge1xuICAgICAgICByZXR1cm4gZ2V0QWxsRWxlbWVudHNJbkdyb3VwKGJvYXJkLCBoaWdoZXN0R3JvdXAsIHRydWUpIGFzIFBsYWl0R3JvdXBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW2VsZW1lbnRdO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlbGVjdGVkRWxlbWVudE9yR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBlbGVtZW50cyB8fCBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBpZiAoUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNTZWxlY3RlZEFsbEVsZW1lbnRzSW5Hcm91cChib2FyZCwgZWxlbWVudCwgZWxlbWVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50cy5tYXAoaXRlbSA9PiBpdGVtLmlkKS5pbmNsdWRlcyhlbGVtZW50LmlkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlbGVjdGVkQWxsRWxlbWVudHNJbkdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBncm91cDogUGxhaXRHcm91cCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBlbGVtZW50cyB8fCBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCBlbGVtZW50c0luR3JvdXAgPSBnZXRFbGVtZW50c0luR3JvdXAoYm9hcmQsIGdyb3VwLCB0cnVlKTtcbiAgICByZXR1cm4gZWxlbWVudHNJbkdyb3VwLmV2ZXJ5KGl0ZW0gPT4gc2VsZWN0ZWRFbGVtZW50cy5tYXAoZWxlbWVudCA9PiBlbGVtZW50LmlkKS5pbmNsdWRlcyhpdGVtLmlkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyU2VsZWN0ZWRHcm91cHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdyb3VwczogUGxhaXRHcm91cFtdLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKTogUGxhaXRHcm91cFtdID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwczogUGxhaXRHcm91cFtdID0gW107XG4gICAgZ3JvdXBzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkRWxlbWVudE9yR3JvdXAoYm9hcmQsIGl0ZW0sIGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRHcm91cHMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxlY3RlZEdyb3Vwcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZEdyb3VwcyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSk6IFBsYWl0R3JvdXBbXSA9PiB7XG4gICAgY29uc3QgaGlnaGVzdFNlbGVjdGVkR3JvdXBzID0gZ2V0SGlnaGVzdFNlbGVjdGVkR3JvdXBzKGJvYXJkLCBlbGVtZW50cyk7XG4gICAgY29uc3QgZ3JvdXBzOiBQbGFpdEdyb3VwW10gPSBbXTtcbiAgICBoaWdoZXN0U2VsZWN0ZWRHcm91cHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgZ3JvdXBzLnB1c2goaXRlbSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGdldEVsZW1lbnRzSW5Hcm91cChib2FyZCwgaXRlbSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGdyb3Vwcy5wdXNoKC4uLihlbGVtZW50c0luR3JvdXAuZmlsdGVyKGl0ZW0gPT4gUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChpdGVtKSkgYXMgUGxhaXRHcm91cFtdKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGdyb3Vwcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKTogUGxhaXRHcm91cCB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGhpdEVsZW1lbnRHcm91cHMgPSBnZXRHcm91cEJ5RWxlbWVudChib2FyZCwgZWxlbWVudCwgdHJ1ZSwgZWxlbWVudHMpIGFzIFBsYWl0R3JvdXBbXTtcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwcyA9IGZpbHRlclNlbGVjdGVkR3JvdXBzKGJvYXJkLCBoaXRFbGVtZW50R3JvdXBzLCBlbGVtZW50cyk7XG4gICAgaWYgKHNlbGVjdGVkR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRHcm91cHNbc2VsZWN0ZWRHcm91cHMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3VwcyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSk6IFBsYWl0R3JvdXBbXSA9PiB7XG4gICAgbGV0IHJlc3VsdDogUGxhaXRHcm91cFtdID0gW107XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGVsZW1lbnRzIHx8IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uZ3JvdXBJZCkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cChib2FyZCwgaXRlbSwgZWxlbWVudHMpO1xuICAgICAgICAgICAgaWYgKGdyb3VwICYmICFyZXN1bHQuaW5jbHVkZXMoZ3JvdXApKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZElzb2xhdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBsZXQgcmVzdWx0OiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBlbGVtZW50cyB8fCBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBzZWxlY3RlZEVsZW1lbnRzXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChpdGVtKSlcbiAgICAgICAgLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoIWl0ZW0uZ3JvdXBJZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3VwKGJvYXJkLCBpdGVtLCBlbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKCFncm91cCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzQ2FuQWRkVG9Hcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyhib2FyZCwgZWxlbWVudHMpO1xuICAgIHJldHVybiBzZWxlY3RlZElzb2xhdGVkRWxlbWVudHMuZmlsdGVyKGl0ZW0gPT4gYm9hcmQuY2FuQWRkVG9Hcm91cChpdGVtKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdFNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gWy4uLmdldEhpZ2hlc3RTZWxlY3RlZEdyb3Vwcyhib2FyZCwgZWxlbWVudHMpLCAuLi5nZXRTZWxlY3RlZElzb2xhdGVkRWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzKV07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR3JvdXBSZWN0YW5nbGVHID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogUGxhaXRFbGVtZW50W10pOiBTVkdHRWxlbWVudCB8IG51bGwgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCBncm91cFJlY3RhbmdsZUc6IFNWR0dFbGVtZW50ID0gY3JlYXRlRygpO1xuICAgIGNvbnN0IGlzTW92aW5nID0gaXNTZWxlY3Rpb25Nb3ZpbmcoYm9hcmQpO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgaXNSZW5kZXIgPSAoIXNlbGVjdGVkRWxlbWVudHMuaW5jbHVkZXMoaXRlbSkgJiYgIWlzTW92aW5nKSB8fCBpc01vdmluZztcbiAgICAgICAgaWYgKGl0ZW0uZ3JvdXBJZCAmJiBpc1JlbmRlcikge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQoYm9hcmQsIGl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGdyb3VwUmVjdGFuZ2xlRy5hcHBlbmQoXG4gICAgICAgICAgICAgICAgZHJhd1JlY3RhbmdsZShib2FyZCwgcmVjdGFuZ2xlLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IEFDVElWRV9TVFJPS0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVEYXNoOiBbNV1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBncm91cFJlY3RhbmdsZUc7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR3JvdXAgPSAoZ3JvdXBJZD86IHN0cmluZyk6IFBsYWl0R3JvdXAgPT4ge1xuICAgIHJldHVybiBncm91cElkXG4gICAgICAgID8ge1xuICAgICAgICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgICAgICAgIHR5cGU6ICdncm91cCcsXG4gICAgICAgICAgICAgIGdyb3VwSWRcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgICAgICAgIHR5cGU6ICdncm91cCdcbiAgICAgICAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG5vbkdyb3VwSW5IaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyA9IChlbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gZWxlbWVudHMuZXZlcnkoaXRlbSA9PiAhaXRlbS5ncm91cElkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnRzLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5ncm91cElkICYmIGl0ZW0uZ3JvdXBJZCA9PT0gZWxlbWVudHNbMF0uZ3JvdXBJZCk7XG59O1xuXG5leHBvcnQgY29uc3QgY2FuQWRkR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBoaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyA9IGdldEhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cyk7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gaGlnaGVzdFNlbGVjdGVkRWxlbWVudHMuZmlsdGVyKGl0ZW0gPT4gYm9hcmQuY2FuQWRkVG9Hcm91cChpdGVtKSk7XG4gICAgaWYgKHJvb3RFbGVtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiBub25Hcm91cEluSGlnaGVzdFNlbGVjdGVkRWxlbWVudHMocm9vdEVsZW1lbnRzKSB8fCBoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAocm9vdEVsZW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhblJlbW92ZUdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQsIGVsZW1lbnRzKTtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZWxlbWVudHMgfHwgZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMCAmJiBzZWxlY3RlZEdyb3Vwcy5sZW5ndGggPiAwO1xufTtcbiJdfQ==
|
package/esm2022/utils/helper.mjs
CHANGED
|
@@ -20,4 +20,13 @@ export const RgbaToHEX = (Rgb, opacity) => {
|
|
|
20
20
|
export function isContextmenu(event) {
|
|
21
21
|
return event.button === 2;
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
export function uniqueById(elements) {
|
|
24
|
+
const uniqueMap = new Map();
|
|
25
|
+
elements.forEach(item => {
|
|
26
|
+
if (!uniqueMap.has(item.id)) {
|
|
27
|
+
uniqueMap.set(item.id, item);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return Array.from(uniqueMap.values());
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFVO0lBQ3hDLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFlO0lBQzFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUFDO1lBQ0ksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNkO1FBQ0gsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBRSxFQUFFO0lBQ3RELE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWlCO0lBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBd0I7SUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUU1QixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogZ2V0IHt4LHl9IHBvaW50XG4gKiBAcGFyYW0gcG9pbnRcbiAqIEByZXR1cm5zIHBvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQb2ludChwb2ludDogbnVtYmVyW10pIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwb2ludClcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHg6IHBvaW50WzBdLFxuICAgICAgICAgICAgICB5OiBwb2ludFsxXVxuICAgICAgICAgIH1cbiAgICAgICAgOiBwb2ludDtcbn1cblxuZXhwb3J0IGNvbnN0IFJnYmFUb0hFWCA9IChSZ2I6IHN0cmluZywgb3BhY2l0eTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIFJnYiArIE1hdGguZmxvb3Iob3BhY2l0eSAqIDI1NSkudG9TdHJpbmcoMTYpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGV4dG1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQuYnV0dG9uID09PSAyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlQnlJZChlbGVtZW50czogUGxhaXRFbGVtZW50W10pIHtcbiAgICBjb25zdCB1bmlxdWVNYXAgPSBuZXcgTWFwKCk7XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoIXVuaXF1ZU1hcC5oYXMoaXRlbS5pZCkpIHtcbiAgICAgICAgICAgIHVuaXF1ZU1hcC5zZXQoaXRlbS5pZCwgaXRlbSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKHVuaXF1ZU1hcC52YWx1ZXMoKSk7XG59XG4iXX0=
|
package/esm2022/utils/index.mjs
CHANGED
|
@@ -27,4 +27,5 @@ export * from './dnd';
|
|
|
27
27
|
export * from './to-point';
|
|
28
28
|
export * from './group';
|
|
29
29
|
export * from './selection';
|
|
30
|
-
|
|
30
|
+
export * from './angle';
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb20nO1xuZXhwb3J0ICogZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2hpc3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9ob3RrZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vaWQtY3JlYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL21hdGgnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWFrLW1hcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhd2luZy9yZWN0YW5nbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3aW5nL2Fycm93JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhd2luZy9jaXJjbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3aW5nL2xpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi90cmVlJztcbmV4cG9ydCAqIGZyb20gJy4vZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbW92aW5nLWVsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1pbWFnZSc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC9jbGlwYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGlwYm9hcmQvY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY2xpcGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vdG91Y2gnO1xuZXhwb3J0ICogZnJvbSAnLi9kbmQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1wb2ludCc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3VwJztcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vYW5nbGUnO1xuIl19
|
package/esm2022/utils/math.mjs
CHANGED
|
@@ -267,4 +267,14 @@ export function toDomPrecision(v) {
|
|
|
267
267
|
export function toFixed(v) {
|
|
268
268
|
return +v.toFixed(2);
|
|
269
269
|
}
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLDZDQUE2QztBQUM3QyxNQUFNLFVBQVUsOEJBQThCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO0lBQy9HLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xCLDJCQUEyQjtRQUMzQixLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDWixFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNaLENBQUM7U0FBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNaLENB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QUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1RCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBUSxFQUFFLENBQVEsRUFBRSxDQUFRLEVBQUUsQ0FBUSxFQUFXLEVBQUU7SUFDN0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFTLEVBQUUsRUFBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0UsTUFBTSxFQUFFLEdBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLEVBQUUsR0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxHQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFD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LENBQUM7SUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2xDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXpDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxD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O0lBQzVCLENBQUM7U0FBTSxJQUFJLEtBQUssS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFVLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFVLENBQUM7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDUixNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFPLE1BQWUsQ0FBQztBQUMzQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLENBQVM7SUFDcEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsQ0FBUztJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVjdGFuZ2xlLWNsaWVudCc7XG5cbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82ODUzOTI2LzIzMjEyMlxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kU2VnbWVudCh4OiBudW1iZXIsIHk6IG51bWJlciwgeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgIGNvbnN0IEEgPSB4IC0geDE7XG4gICAgY29uc3QgQiA9IHkgLSB5MTtcbiAgICBjb25zdCBDID0geDIgLSB4MTtcbiAgICBjb25zdCBEID0geTIgLSB5MTtcblxuICAgIGNvbnN0IGRvdCA9IEEgKiBDICsgQiAqIEQ7XG4gICAgY29uc3QgbGVuU3F1YXJlID0gQyAqIEMgKyBEICogRDtcbiAgICBsZXQgcGFyYW0gPSAtMTtcbiAgICBpZiAobGVuU3F1YXJlICE9PSAwKSB7XG4gICAgICAgIC8vIGluIGNhc2Ugb2YgMCBsZW5ndGggbGluZVxuICAgICAgICBwYXJhbSA9IGRvdCAvIGxlblNxdWFyZTtcbiAgICB9XG5cbiAgICBsZXQgeHgsIHl5O1xuICAgIGlmIChwYXJhbSA8IDApIHtcbiAgICAgICAgeHggPSB4MTtcbiAgICAgICAgeXkgPSB5MTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtID4gMSkge1xuICAgICAgICB4eCA9IHgyO1xuICAgICAgICB5eSA9IHkyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHh4ID0geDEgKyBwYXJhbSAqIEM7XG4gICAgICAgIHl5ID0geTEgKyBwYXJhbSAqIEQ7XG4gICAgfVxuXG4gICAgY29uc3QgZHggPSB4IC0geHg7XG4gICAgY29uc3QgZHkgPSB5IC0geXk7XG4gICAgcmV0dXJuIE1hdGguaHlwb3QoZHgsIGR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnQocG9pbnQ6IFBvaW50LCBsaW5lUG9pbnRzOiBbUG9pbnQsIFBvaW50XSkge1xuICAgIGNvbnN0IHggPSBwb2ludFswXSxcbiAgICAgICAgeSA9IHBvaW50WzFdLFxuICAgICAgICB4MSA9IGxpbmVQb2ludHNbMF1bMF0sXG4gICAgICAgIHkxID0gbGluZVBvaW50c1swXVsxXSxcbiAgICAgICAgeDIgPSBsaW5lUG9pbnRzWzFdWzBdLFxuICAgICAgICB5MiA9IGxpbmVQb2ludHNbMV1bMV07XG4gICAgY29uc3QgQSA9IHggLSB4MTtcbiAgICBjb25zdCBCID0geSAtIHkxO1xuICAgIGNvbnN0IEMgPSB4MiAtIHgxO1xuICAgIGNvbnN0IEQgPSB5MiAtIHkxO1xuXG4gICAgY29uc3QgZG90ID0gQSAqIEMgKyBCICogRDtcbiAgICBjb25zdCBsZW5TcXVhcmUgPSBDICogQyArIEQgKiBEO1xuICAgIGxldCBwYXJhbSA9IC0xO1xuICAgIGlmIChsZW5TcXVhcmUgIT09IDApIHtcbiAgICAgICAgLy8gaW4gY2FzZSBvZiAwIGxlbmd0aCBsaW5lXG4gICAgICAgIHBhcmFtID0gZG90IC8gbGVuU3F1YXJlO1xuICAgIH1cblxuICAgIGxldCB4eCwgeXk7XG4gICAgaWYgKHBhcmFtIDwgMCkge1xuICAgICAgICB4eCA9IHgxO1xuICAgICAgICB5eSA9IHkxO1xuICAgIH0gZWxzZSBpZiAocGFyYW0gPiAxKSB7XG4gICAgICAgIHh4ID0geDI7XG4gICAgICAgIHl5ID0geTI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgeHggPSB4MSArIHBhcmFtICogQztcbiAgICAgICAgeXkgPSB5MSArIHBhcmFtICogRDtcbiAgICB9XG5cbiAgICByZXR1cm4gW3h4LCB5eV0gYXMgUG9pbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50czogUG9pbnRbXSwgcG9pbnQ6IFBvaW50KSB7XG4gICAgY29uc3QgbGVuID0gcG9pbnRzLmxlbmd0aDtcbiAgICBsZXQgZGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBwMiA9IHBvaW50c1tpICsgMV07XG4gICAgICAgIGNvbnN0IGN1cnJlbnREaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kU2VnbWVudChwb2ludFswXSwgcG9pbnRbMV0sIHBbMF0sIHBbMV0sIHAyWzBdLCBwMlsxXSk7XG4gICAgICAgIGlmIChjdXJyZW50RGlzdGFuY2UgPCBkaXN0YW5jZSkge1xuICAgICAgICAgICAgZGlzdGFuY2UgPSBjdXJyZW50RGlzdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpc3RhbmNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnQ6IFBvaW50LCBwb2ludHM6IFBvaW50W10sIGlzQ2xvc2U6IEJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3QgbGVuID0gcG9pbnRzLmxlbmd0aDtcbiAgICBsZXQgZGlzdGFuY2UgPSBJbmZpbml0eTtcbiAgICBsZXQgcmVzdWx0OiBQb2ludCA9IHBvaW50O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBwID0gcG9pbnRzW2ldO1xuICAgICAgICBpZiAoaSA9PT0gbGVuIC0gMSAmJiAhaXNDbG9zZSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IHAyID0gaSA9PT0gbGVuIC0gMSA/IHBvaW50c1swXSA6IHBvaW50c1tpICsgMV07XG4gICAgICAgIGNvbnN0IGN1cnJlbnREaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kU2VnbWVudChwb2ludFswXSwgcG9pbnRbMV0sIHBbMF0sIHBbMV0sIHAyWzBdLCBwMlsxXSk7XG4gICAgICAgIGlmIChjdXJyZW50RGlzdGFuY2UgPCBkaXN0YW5jZSkge1xuICAgICAgICAgICAgZGlzdGFuY2UgPSBjdXJyZW50RGlzdGFuY2U7XG4gICAgICAgICAgICByZXN1bHQgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHBvaW50LCBbcCwgcDJdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlKHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIsIGFuZ2xlOiBudW1iZXIpIHtcbiAgICAvLyDwnZGO4oCy8J2RpT0o8J2RjvCdkaXiiJLwnZGQ8J2RpSljb3PwnZyD4oiSKPCdkY7wnZGm4oiS8J2RkPCdkaYpc2lu8J2cgyvwnZGQ8J2RpVxuICAgIC8vIPCdkY7igLLwnZGmPSjwnZGO8J2RpeKIkvCdkZDwnZGlKXNpbvCdnIMrKPCdkY7wnZGm4oiS8J2RkPCdkaYpY29z8J2cgyvwnZGQ8J2Rpi5cbiAgICAvLyBodHRwczovL21hdGguc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzIyMDQ1MjAvaG93LWRvLWktcm90YXRlLWEtbGluZS1zZWdtZW50LWluLWEtc3BlY2lmaWMtcG9pbnQtb24tdGhlLWxpbmVcbiAgICByZXR1cm4gWyh4MSAtIHgyKSAqIE1hdGguY29zKGFuZ2xlKSAtICh5MSAtIHkyKSAqIE1hdGguc2luKGFuZ2xlKSArIHgyLCAoeDEgLSB4MikgKiBNYXRoLnNpbihhbmdsZSkgKyAoeTEgLSB5MikgKiBNYXRoLmNvcyhhbmdsZSkgKyB5Ml07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHgxOiBudW1iZXIsIHkxOiBudW1iZXIsIHgyOiBudW1iZXIsIHkyOiBudW1iZXIpIHtcbiAgICBjb25zdCBkeCA9IHgxIC0geDI7XG4gICAgY29uc3QgZHkgPSB5MSAtIHkyO1xuICAgIHJldHVybiBNYXRoLmh5cG90KGR4LCBkeSk7XG59XG5cbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUyNTQ4MzgvY2FsY3VsYXRpbmctZGlzdGFuY2UtYmV0d2Vlbi1hLXBvaW50LWFuZC1hLXJlY3Rhbmd1bGFyLWJveC1uZWFyZXN0LXBvaW50XG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRSZWN0YW5nbGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHJlY3Q6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgIHZhciBkeCA9IE1hdGgubWF4KHJlY3QueCAtIHgsIDAsIHggLSAocmVjdC54ICsgcmVjdC53aWR0aCkpO1xuICAgIHZhciBkeSA9IE1hdGgubWF4KHJlY3QueSAtIHksIDAsIHkgLSAocmVjdC55ICsgcmVjdC5oZWlnaHQpKTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzTGluZUhpdExpbmUgPSAoYTogUG9pbnQsIGI6IFBvaW50LCBjOiBQb2ludCwgZDogUG9pbnQpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBjcm9zc1Byb2R1Y3QgPSAodjE6IFBvaW50LCB2MjogUG9pbnQpID0+IHYxWzBdICogdjJbMV0gLSB2MVsxXSAqIHYyWzBdO1xuXG4gICAgY29uc3QgYWI6IFBvaW50ID0gW2JbMF0gLSBhWzBdLCBiWzFdIC0gYVsxXV07XG4gICAgY29uc3QgYWM6IFBvaW50ID0gW2NbMF0gLSBhWzBdLCBjWzFdIC0gYVsxXV07XG4gICAgY29uc3QgYWQ6IFBvaW50ID0gW2RbMF0gLSBhWzBdLCBkWzFdIC0gYVsxXV07XG5cbiAgICBjb25zdCBjYTogUG9pbnQgPSBbYVswXSAtIGNbMF0sIGFbMV0gLSBjWzFdXTtcbiAgICBjb25zdCBjYjogUG9pbnQgPSBbYlswXSAtIGNbMF0sIGJbMV0gLSBjWzFdXTtcbiAgICBjb25zdCBjZDogUG9pbnQgPSBbZFswXSAtIGNbMF0sIGRbMV0gLSBjWzFdXTtcblxuICAgIHJldHVybiBjcm9zc1Byb2R1Y3QoYWIsIGFjKSAqIGNyb3NzUHJvZHVjdChhYiwgYWQpIDw9IDAgJiYgY3Jvc3NQcm9kdWN0KGNkLCBjYSkgKiBjcm9zc1Byb2R1Y3QoY2QsIGNiKSA8PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUG9seWxpbmVIaXRSZWN0YW5nbGUgPSAocG9pbnRzOiBQb2ludFtdLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgaXNDbG9zZTogYm9vbGVhbiA9IHRydWUpID0+IHtcbiAgICBjb25zdCByZWN0YW5nbGVQb2ludHMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgY29uc3QgbGVuID0gcG9pbnRzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChpID09PSBsZW4gLSAxICYmICFpc0Nsb3NlKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgcDEgPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IHAyID0gcG9pbnRzWyhpICsgMSkgJSBsZW5dO1xuICAgICAgICBjb25zdCBpc0hpdCA9XG4gICAgICAgICAgICBpc0xpbmVIaXRMaW5lKHAxLCBwMiwgcmVjdGFuZ2xlUG9pbnRzWzBdLCByZWN0YW5nbGVQb2ludHNbMV0pIHx8XG4gICAgICAgICAgICBpc0xpbmVIaXRMaW5lKHAxLCBwMiwgcmVjdGFuZ2xlUG9pbnRzWzFdLCByZWN0YW5nbGVQb2ludHNbMl0pIHx8XG4gICAgICAgICAgICBpc0xpbmVIaXRMaW5lKHAxLCBwMiwgcmVjdGFuZ2xlUG9pbnRzWzJdLCByZWN0YW5nbGVQb2ludHNbM10pIHx8XG4gICAgICAgICAgICBpc0xpbmVIaXRMaW5lKHAxLCBwMiwgcmVjdGFuZ2xlUG9pbnRzWzNdLCByZWN0YW5nbGVQb2ludHNbMF0pO1xuICAgICAgICBpZiAoaXNIaXQgfHwgaXNQb2ludEluUG9seWdvbihwMSwgcmVjdGFuZ2xlUG9pbnRzKSB8fCBpc1BvaW50SW5Qb2x5Z29uKHAyLCByZWN0YW5nbGVQb2ludHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjI1MjE5ODIvY2hlY2staWYtcG9pbnQtaXMtaW5zaWRlLWEtcG9seWdvblxuZXhwb3J0IGNvbnN0IGlzUG9pbnRJblBvbHlnb24gPSAocG9pbnQ6IFBvaW50LCBwb2ludHM6IFBvaW50W10pID0+IHtcbiAgICAvLyByYXktY2FzdGluZyBhbGdvcml0aG0gYmFzZWQgb25cbiAgICAvLyBodHRwczovL3dyZi5lY3NlLnJwaS5lZHUvUmVzZWFyY2gvU2hvcnRfTm90ZXMvcG5wb2x5Lmh0bWxcblxuICAgIGNvbnN0IHggPSBwb2ludFswXSxcbiAgICAgICAgeSA9IHBvaW50WzFdO1xuXG4gICAgbGV0IGluc2lkZSA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gcG9pbnRzLmxlbmd0aCAtIDE7IGkgPCBwb2ludHMubGVuZ3RoOyBqID0gaSsrKSB7XG4gICAgICAgIGxldCB4aSA9IHBvaW50c1tpXVswXSxcbiAgICAgICAgICAgIHlpID0gcG9pbnRzW2ldWzFdO1xuICAgICAgICBsZXQgeGogPSBwb2ludHNbal1bMF0sXG4gICAgICAgICAgICB5aiA9IHBvaW50c1tqXVsxXTtcblxuICAgICAgICBsZXQgaW50ZXJzZWN0ID0geWkgPiB5ICE9IHlqID4geSAmJiB4IDwgKCh4aiAtIHhpKSAqICh5IC0geWkpKSAvICh5aiAtIHlpKSArIHhpO1xuICAgICAgICBpZiAoaW50ZXJzZWN0KSBpbnNpZGUgPSAhaW5zaWRlO1xuICAgIH1cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUG9pbnRJbkVsbGlwc2UgPSAocG9pbnQ6IFBvaW50LCBjZW50ZXI6IFBvaW50LCByeDogbnVtYmVyLCByeTogbnVtYmVyLCBhbmdsZSA9IDApID0+IHtcbiAgICBjb25zdCBjb3NBbmdsZSA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICBjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICBjb25zdCB4MSA9IChwb2ludFswXSAtIGNlbnRlclswXSkgKiBjb3NBbmdsZSArIChwb2ludFsxXSAtIGNlbnRlclsxXSkgKiBzaW5BbmdsZTtcbiAgICBjb25zdCB5MSA9IChwb2ludFsxXSAtIGNlbnRlclsxXSkgKiBjb3NBbmdsZSAtIChwb2ludFswXSAtIGNlbnRlclswXSkgKiBzaW5BbmdsZTtcblxuICAgIHJldHVybiAoeDEgKiB4MSkgLyAocnggKiByeCkgKyAoeTEgKiB5MSkgLyAocnkgKiByeSkgPD0gMTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BvaW50SW5Sb3VuZFJlY3RhbmdsZSA9IChwb2ludDogUG9pbnQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCByYWRpdXM6IG51bWJlciwgYW5nbGUgPSAwKSA9PiB7XG4gICAgY29uc3QgeyB4OiByZWN0WCwgeTogcmVjdFksIHdpZHRoLCBoZWlnaHQgfSA9IHJlY3RhbmdsZTtcbiAgICBjb25zdCBpc0luUmVjdGFuZ2xlID0gcG9pbnRbMF0gPj0gcmVjdFggJiYgcG9pbnRbMF0gPD0gcmVjdFggKyB3aWR0aCAmJiBwb2ludFsxXSA+PSByZWN0WSAmJiBwb2ludFsxXSA8PSByZWN0WSArIGhlaWdodDtcbiAgICBjb25zdCBoYW5kbGVMZWZ0VG9wID1cbiAgICAgICAgcG9pbnRbMF0gPj0gcmVjdFggJiZcbiAgICAgICAgcG9pbnRbMF0gPD0gcmVjdFggKyByYWRpdXMgJiZcbiAgICAgICAgcG9pbnRbMV0gPj0gcmVjdFkgJiZcbiAgICAgICAgcG9pbnRbMV0gPD0gcmVjdFkgKyByYWRpdXMgJiZcbiAgICAgICAgTWF0aC5oeXBvdChwb2ludFswXSAtIChyZWN0WCArIHJhZGl1cyksIHBvaW50WzFdIC0gKHJlY3RZICsgcmFkaXVzKSkgPiByYWRpdXM7XG4gICAgY29uc3QgaGFuZGxlTGVmdEJvdHRvbSA9XG4gICAgICAgIHBvaW50WzBdID49IHJlY3RYICYmXG4gICAgICAgIHBvaW50WzBdIDw9IHJlY3RYICsgcmFkaXVzICYmXG4gICAgICAgIHBvaW50WzFdID49IHJlY3RZICsgaGVpZ2h0ICYmXG4gICAgICAgIHBvaW50WzFdIDw9IHJlY3RZICsgaGVpZ2h0IC0gcmFkaXVzICYmXG4gICAgICAgIE1hdGguaHlwb3QocG9pbnRbMF0gLSAocmVjdFggKyByYWRpdXMpLCBwb2ludFsxXSAtIChyZWN0WSArIGhlaWdodCAtIHJhZGl1cykpID4gcmFkaXVzO1xuICAgIGNvbnN0IGhhbmRsZVJpZ2h0VG9wID1cbiAgICAgICAgcG9pbnRbMF0gPj0gcmVjdFggKyB3aWR0aCAtIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFswXSA8PSByZWN0WCArIHdpZHRoICYmXG4gICAgICAgIHBvaW50WzFdID49IHJlY3RZICYmXG4gICAgICAgIHBvaW50WzFdIDw9IHJlY3RZICsgcmFkaXVzICYmXG4gICAgICAgIE1hdGguaHlwb3QocG9pbnRbMF0gLSAocmVjdFggKyB3aWR0aCAtIHJhZGl1cyksIHBvaW50WzFdIC0gKHJlY3RZICsgcmFkaXVzKSkgPiByYWRpdXM7XG4gICAgY29uc3QgaGFuZGxlUmlnaHRCb3R0b20gPVxuICAgICAgICBwb2ludFswXSA+PSByZWN0WCArIHdpZHRoIC0gcmFkaXVzICYmXG4gICAgICAgIHBvaW50WzBdIDw9IHJlY3RYICsgd2lkdGggJiZcbiAgICAgICAgcG9pbnRbMV0gPj0gcmVjdFkgKyBoZWlnaHQgLSByYWRpdXMgJiZcbiAgICAgICAgcG9pbnRbMV0gPD0gcmVjdFkgKyBoZWlnaHQgJiZcbiAgICAgICAgTWF0aC5oeXBvdChwb2ludFswXSAtIChyZWN0WCArIHdpZHRoIC0gcmFkaXVzKSwgcG9pbnRbMV0gLSAocmVjdFkgKyBoZWlnaHQgLSByYWRpdXMpKSA+IHJhZGl1cztcbiAgICBjb25zdCBpc0luQ29ybmVyID0gaGFuZGxlTGVmdFRvcCB8fCBoYW5kbGVMZWZ0Qm90dG9tIHx8IGhhbmRsZVJpZ2h0VG9wIHx8IGhhbmRsZVJpZ2h0Qm90dG9tO1xuXG4gICAgcmV0dXJuIGlzSW5SZWN0YW5nbGUgJiYgIWlzSW5Db3JuZXI7XG59O1xuXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9uaWNob2xhc3dtaW4vYzI2NjFlYjExY2FkNTY3MWQ4MTZcbmV4cG9ydCBjb25zdCBjYXRtdWxsUm9tRml0dGluZyA9IGZ1bmN0aW9uKHBvaW50czogUG9pbnRbXSkge1xuICAgIGNvbnN0IGFscGhhID0gMC41O1xuICAgIGxldCBwMCwgcDEsIHAyLCBwMywgYnAxLCBicDIsIGQxLCBkMiwgZDMsIEEsIEIsIE4sIE07XG4gICAgdmFyIGQzcG93QSwgZDJwb3dBLCBkM3BvdzJBLCBkMnBvdzJBLCBkMXBvdzJBLCBkMXBvd0E7XG4gICAgY29uc3QgcmVzdWx0OiBQb2ludFtdID0gW107XG4gICAgcmVzdWx0LnB1c2goW01hdGgucm91bmQocG9pbnRzWzBdWzBdKSwgTWF0aC5yb3VuZChwb2ludHNbMF1bMV0pXSk7XG4gICAgdmFyIGxlbmd0aCA9IHBvaW50cy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgcDAgPSBpID09IDAgPyBwb2ludHNbMF0gOiBwb2ludHNbaSAtIDFdO1xuICAgICAgICBwMSA9IHBvaW50c1tpXTtcbiAgICAgICAgcDIgPSBwb2ludHNbaSArIDFdO1xuICAgICAgICBwMyA9IGkgKyAyIDwgbGVuZ3RoID8gcG9pbnRzW2kgKyAyXSA6IHAyO1xuXG4gICAgICAgIGQxID0gTWF0aC5zcXJ0KE1hdGgucG93KHAwWzBdIC0gcDFbMF0sIDIpICsgTWF0aC5wb3cocDBbMV0gLSBwMVsxXSwgMikpO1xuICAgICAgICBkMiA9IE1hdGguc3FydChNYXRoLnBvdyhwMVswXSAtIHAyWzBdLCAyKSArIE1hdGgucG93KHAxWzFdIC0gcDJbMV0sIDIpKTtcbiAgICAgICAgZDMgPSBNYXRoLnNxcnQoTWF0aC5wb3cocDJbMF0gLSBwM1swXSwgMikgKyBNYXRoLnBvdyhwMlsxXSAtIHAzWzFdLCAyKSk7XG5cbiAgICAgICAgLy8gQ2F0bXVsbC1Sb20gdG8gQ3ViaWMgQmV6aWVyIGNvbnZlcnNpb24gbWF0cml4XG4gICAgICAgIC8vIEEgPSAyZDFeMmEgKyAzZDFeYSAqIGQyXmEgKyBkM14yYVxuICAgICAgICAvLyBCID0gMmQzXjJhICsgM2QzXmEgKiBkMl5hICsgZDJeMmFcbiAgICAgICAgLy8gWyAgIDAgICAgICAgICAgICAgMSAgICAgICAgICAgIDAgICAgICAgICAgMCAgICAgICAgICBdXG4gICAgICAgIC8vIFsgICAtZDJeMmEgL04gICAgIEEvTiAgICAgICAgICBkMV4yYSAvTiAgIDAgICAgICAgICAgXVxuICAgICAgICAvLyBbICAgMCAgICAgICAgICAgICBkM14yYSAvTSAgICAgQi9NICAgICAgICAtZDJeMmEgL00gIF1cbiAgICAgICAgLy8gWyAgIDAgICAgICAgICAgICAgMCAgICAgICAgICAgIDEgICAgICAgICAgMCAgICAgICAgICBdXG5cbiAgICAgICAgZDNwb3dBID0gTWF0aC5wb3coZDMsIGFscGhhKTtcbiAgICAgICAgZDNwb3cyQSA9IE1hdGgucG93KGQzLCAyICogYWxwaGEpO1xuICAgICAgICBkMnBvd0EgPSBNYXRoLnBvdyhkMiwgYWxwaGEpO1xuICAgICAgICBkMnBvdzJBID0gTWF0aC5wb3coZDIsIDIgKiBhbHBoYSk7XG4gICAgICAgIGQxcG93QSA9IE1hdGgucG93KGQxLCBhbHBoYSk7XG4gICAgICAgIGQxcG93MkEgPSBNYXRoLnBvdyhkMSwgMiAqIGFscGhhKTtcblxuICAgICAgICBBID0gMiAqIGQxcG93MkEgKyAzICogZDFwb3dBICogZDJwb3dBICsgZDJwb3cyQTtcbiAgICAgICAgQiA9IDIgKiBkM3BvdzJBICsgMyAqIGQzcG93QSAqIGQycG93QSArIGQycG93MkE7XG4gICAgICAgIE4gPSAzICogZDFwb3dBICogKGQxcG93QSArIGQycG93QSk7XG4gICAgICAgIGlmIChOID4gMCkge1xuICAgICAgICAgICAgTiA9IDEgLyBOO1xuICAgICAgICB9XG4gICAgICAgIE0gPSAzICogZDNwb3dBICogKGQzcG93QSArIGQycG93QSk7XG4gICAgICAgIGlmIChNID4gMCkge1xuICAgICAgICAgICAgTSA9IDEgLyBNO1xuICAgICAgICB9XG5cbiAgICAgICAgYnAxID0gWygtZDJwb3cyQSAqIHAwWzBdICsgQSAqIHAxWzBdICsgZDFwb3cyQSAqIHAyWzBdKSAqIE4sICgtZDJwb3cyQSAqIHAwWzFdICsgQSAqIHAxWzFdICsgZDFwb3cyQSAqIHAyWzFdKSAqIE5dO1xuICAgICAgICBicDIgPSBbKGQzcG93MkEgKiBwMVswXSArIEIgKiBwMlswXSAtIGQycG93MkEgKiBwM1swXSkgKiBNLCAoZDNwb3cyQSAqIHAxWzFdICsgQiAqIHAyWzFdIC0gZDJwb3cyQSAqIHAzWzFdKSAqIE1dO1xuXG4gICAgICAgIGlmIChicDFbMF0gPT0gMCAmJiBicDFbMV0gPT0gMCkge1xuICAgICAgICAgICAgYnAxID0gcDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJwMlswXSA9PSAwICYmIGJwMlsxXSA9PSAwKSB7XG4gICAgICAgICAgICBicDIgPSBwMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5wdXNoKGJwMSBhcyBQb2ludCwgYnAyIGFzIFBvaW50LCBwMiBhcyBQb2ludCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogdGhlIHJlc3VsdCBvZiBzbG9wZSBpcyBiYXNlZCBvbiBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW1cbiAqIHgsIHkgYXJlIGJhc2VkIG9uIHRoZSBwb3NpdGlvbiBpbiB0aGUgQ2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGxpcHNlVGFuZ2VudFNsb3BlKHg6IG51bWJlciwgeTogbnVtYmVyLCBhOiBudW1iZXIsIGI6IG51bWJlcikge1xuICAgIGlmIChNYXRoLmFicyh5KSA9PT0gMCkge1xuICAgICAgICByZXR1cm4geCA+IDAgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgICB9XG4gICAgY29uc3QgayA9ICgtYiAqIGIgKiB4KSAvIChhICogYSAqIHkpO1xuICAgIHJldHVybiBrO1xufVxuXG4vKipcbiAqIHgsIHkgYXJlIGJhc2VkIG9uIHRoZSBwb3NpdGlvbiBpbiB0aGUgQ2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZWN0b3JGcm9tUG9pbnRBbmRTbG9wZSh4OiBudW1iZXIsIHk6IG51bWJlciwgc2xvcGU6IG51bWJlcikge1xuICAgIGlmIChzbG9wZSA9PT0gSW5maW5pdHkpIHtcbiAgICAgICAgcmV0dXJuIFswLCAtMV0gYXMgUG9pbnQ7XG4gICAgfSBlbHNlIGlmIChzbG9wZSA9PT0gLUluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBbMCwgMV0gYXMgUG9pbnQ7XG4gICAgfVxuICAgIGxldCB2ZWN0b3IgPSBbMSwgLXNsb3BlXSBhcyBQb2ludDtcbiAgICBpZiAoeSA8IDApIHtcbiAgICAgICAgdmVjdG9yID0gWy12ZWN0b3JbMF0sIC12ZWN0b3JbMV1dO1xuICAgIH1cbiAgICByZXR1cm4gdmVjdG9yIGFzIFBvaW50O1xufVxuXG4vKipcbiAqIFRoZSBET00gbGlrZXMgdmFsdWVzIHRvIGJlIGZpeGVkIHRvIDMgZGVjaW1hbCBwbGFjZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRG9tUHJlY2lzaW9uKHY6IG51bWJlcikge1xuICAgIHJldHVybiArdi50b0ZpeGVkKDQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9GaXhlZCh2OiBudW1iZXIpIHtcbiAgICByZXR1cm4gK3YudG9GaXhlZCgyKTtcbn1cbiJdfQ==
|
|
270
|
+
/**
|
|
271
|
+
* Whether two numbers numbers a and b are approximately equal.
|
|
272
|
+
*
|
|
273
|
+
* @param a - The first point.
|
|
274
|
+
* @param b - The second point.
|
|
275
|
+
* @public
|
|
276
|
+
*/
|
|
277
|
+
export function approximately(a, b, precision = 0.000001) {
|
|
278
|
+
return Math.abs(a - b) <= precision;
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLDZDQUE2QztBQUM3QyxNQUFNLFVBQVUsOEJBQThCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO0lBQy9HLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xCLDJCQUEyQjtRQUMzQixLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ1gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDWixFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNaLENBQUM7U0FBTSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNaLENB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QUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1RCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBUSxFQUFFLENBQVEsRUFBRSxDQUFRLEVBQUUsQ0FBUSxFQUFXLEVBQUU7SUFDN0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFTLEVBQUUsRUFBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0UsTUFBTSxFQUFFLEdBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLEVBQUUsR0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxHQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFD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LENBQUM7SUFDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2xDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXpDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxD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O0lBQzVCLENBQUM7U0FBTSxJQUFJLEtBQUssS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFVLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFVLENBQUM7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDUixNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxPQUFPLE1BQWUsQ0FBQztBQUMzQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLENBQVM7SUFDcEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsQ0FBUztJQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLFNBQVMsR0FBRyxRQUFRO0lBQ3BFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZWN0YW5nbGUtY2xpZW50JztcblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzY4NTM5MjYvMjMyMTIyXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHg6IG51bWJlciwgeTogbnVtYmVyLCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgY29uc3QgQSA9IHggLSB4MTtcbiAgICBjb25zdCBCID0geSAtIHkxO1xuICAgIGNvbnN0IEMgPSB4MiAtIHgxO1xuICAgIGNvbnN0IEQgPSB5MiAtIHkxO1xuXG4gICAgY29uc3QgZG90ID0gQSAqIEMgKyBCICogRDtcbiAgICBjb25zdCBsZW5TcXVhcmUgPSBDICogQyArIEQgKiBEO1xuICAgIGxldCBwYXJhbSA9IC0xO1xuICAgIGlmIChsZW5TcXVhcmUgIT09IDApIHtcbiAgICAgICAgLy8gaW4gY2FzZSBvZiAwIGxlbmd0aCBsaW5lXG4gICAgICAgIHBhcmFtID0gZG90IC8gbGVuU3F1YXJlO1xuICAgIH1cblxuICAgIGxldCB4eCwgeXk7XG4gICAgaWYgKHBhcmFtIDwgMCkge1xuICAgICAgICB4eCA9IHgxO1xuICAgICAgICB5eSA9IHkxO1xuICAgIH0gZWxzZSBpZiAocGFyYW0gPiAxKSB7XG4gICAgICAgIHh4ID0geDI7XG4gICAgICAgIHl5ID0geTI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgeHggPSB4MSArIHBhcmFtICogQztcbiAgICAgICAgeXkgPSB5MSArIHBhcmFtICogRDtcbiAgICB9XG5cbiAgICBjb25zdCBkeCA9IHggLSB4eDtcbiAgICBjb25zdCBkeSA9IHkgLSB5eTtcbiAgICByZXR1cm4gTWF0aC5oeXBvdChkeCwgZHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudChwb2ludDogUG9pbnQsIGxpbmVQb2ludHM6IFtQb2ludCwgUG9pbnRdKSB7XG4gICAgY29uc3QgeCA9IHBvaW50WzBdLFxuICAgICAgICB5ID0gcG9pbnRbMV0sXG4gICAgICAgIHgxID0gbGluZVBvaW50c1swXVswXSxcbiAgICAgICAgeTEgPSBsaW5lUG9pbnRzWzBdWzFdLFxuICAgICAgICB4MiA9IGxpbmVQb2ludHNbMV1bMF0sXG4gICAgICAgIHkyID0gbGluZVBvaW50c1sxXVsxXTtcbiAgICBjb25zdCBBID0geCAtIHgxO1xuICAgIGNvbnN0IEIgPSB5IC0geTE7XG4gICAgY29uc3QgQyA9IHgyIC0geDE7XG4gICAgY29uc3QgRCA9IHkyIC0geTE7XG5cbiAgICBjb25zdCBkb3QgPSBBICogQyArIEIgKiBEO1xuICAgIGNvbnN0IGxlblNxdWFyZSA9IEMgKiBDICsgRCAqIEQ7XG4gICAgbGV0IHBhcmFtID0gLTE7XG4gICAgaWYgKGxlblNxdWFyZSAhPT0gMCkge1xuICAgICAgICAvLyBpbiBjYXNlIG9mIDAgbGVuZ3RoIGxpbmVcbiAgICAgICAgcGFyYW0gPSBkb3QgLyBsZW5TcXVhcmU7XG4gICAgfVxuXG4gICAgbGV0IHh4LCB5eTtcbiAgICBpZiAocGFyYW0gPCAwKSB7XG4gICAgICAgIHh4ID0geDE7XG4gICAgICAgIHl5ID0geTE7XG4gICAgfSBlbHNlIGlmIChwYXJhbSA+IDEpIHtcbiAgICAgICAgeHggPSB4MjtcbiAgICAgICAgeXkgPSB5MjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB4eCA9IHgxICsgcGFyYW0gKiBDO1xuICAgICAgICB5eSA9IHkxICsgcGFyYW0gKiBEO1xuICAgIH1cblxuICAgIHJldHVybiBbeHgsIHl5XSBhcyBQb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnRzOiBQb2ludFtdLCBwb2ludDogUG9pbnQpIHtcbiAgICBjb25zdCBsZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCBkaXN0YW5jZSA9IEluZmluaXR5O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAgPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IHAyID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudERpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHBvaW50WzBdLCBwb2ludFsxXSwgcFswXSwgcFsxXSwgcDJbMF0sIHAyWzFdKTtcbiAgICAgICAgaWYgKGN1cnJlbnREaXN0YW5jZSA8IGRpc3RhbmNlKSB7XG4gICAgICAgICAgICBkaXN0YW5jZSA9IGN1cnJlbnREaXN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlzdGFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludDogUG9pbnQsIHBvaW50czogUG9pbnRbXSwgaXNDbG9zZTogQm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBsZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCBkaXN0YW5jZSA9IEluZmluaXR5O1xuICAgIGxldCByZXN1bHQ6IFBvaW50ID0gcG9pbnQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAgPSBwb2ludHNbaV07XG4gICAgICAgIGlmIChpID09PSBsZW4gLSAxICYmICFpc0Nsb3NlKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgcDIgPSBpID09PSBsZW4gLSAxID8gcG9pbnRzWzBdIDogcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudERpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHBvaW50WzBdLCBwb2ludFsxXSwgcFswXSwgcFsxXSwgcDJbMF0sIHAyWzFdKTtcbiAgICAgICAgaWYgKGN1cnJlbnREaXN0YW5jZSA8IGRpc3RhbmNlKSB7XG4gICAgICAgICAgICBkaXN0YW5jZSA9IGN1cnJlbnREaXN0YW5jZTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnQocG9pbnQsIFtwLCBwMl0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgYW5nbGU6IG51bWJlcikge1xuICAgIC8vIPCdkY7igLLwnZGlPSjwnZGO8J2RpeKIkvCdkZDwnZGlKWNvc/CdnIPiiJIo8J2RjvCdkabiiJLwnZGQ8J2RpilzaW7wnZyDK/CdkZDwnZGlXG4gICAgLy8g8J2RjuKAsvCdkaY9KPCdkY7wnZGl4oiS8J2RkPCdkaUpc2lu8J2cgyso8J2RjvCdkabiiJLwnZGQ8J2Rpiljb3PwnZyDK/CdkZDwnZGmLlxuICAgIC8vIGh0dHBzOi8vbWF0aC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMjIwNDUyMC9ob3ctZG8taS1yb3RhdGUtYS1saW5lLXNlZ21lbnQtaW4tYS1zcGVjaWZpYy1wb2ludC1vbi10aGUtbGluZVxuICAgIHJldHVybiBbKHgxIC0geDIpICogTWF0aC5jb3MoYW5nbGUpIC0gKHkxIC0geTIpICogTWF0aC5zaW4oYW5nbGUpICsgeDIsICh4MSAtIHgyKSAqIE1hdGguc2luKGFuZ2xlKSArICh5MSAtIHkyKSAqIE1hdGguY29zKGFuZ2xlKSArIHkyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgIGNvbnN0IGR4ID0geDEgLSB4MjtcbiAgICBjb25zdCBkeSA9IHkxIC0geTI7XG4gICAgcmV0dXJuIE1hdGguaHlwb3QoZHgsIGR5KTtcbn1cblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTI1NDgzOC9jYWxjdWxhdGluZy1kaXN0YW5jZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtcmVjdGFuZ3VsYXItYm94LW5lYXJlc3QtcG9pbnRcbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFJlY3RhbmdsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmVjdDogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgdmFyIGR4ID0gTWF0aC5tYXgocmVjdC54IC0geCwgMCwgeCAtIChyZWN0LnggKyByZWN0LndpZHRoKSk7XG4gICAgdmFyIGR5ID0gTWF0aC5tYXgocmVjdC55IC0geSwgMCwgeSAtIChyZWN0LnkgKyByZWN0LmhlaWdodCkpO1xuICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xufVxuXG5leHBvcnQgY29uc3QgaXNMaW5lSGl0TGluZSA9IChhOiBQb2ludCwgYjogUG9pbnQsIGM6IFBvaW50LCBkOiBQb2ludCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGNyb3NzUHJvZHVjdCA9ICh2MTogUG9pbnQsIHYyOiBQb2ludCkgPT4gdjFbMF0gKiB2MlsxXSAtIHYxWzFdICogdjJbMF07XG5cbiAgICBjb25zdCBhYjogUG9pbnQgPSBbYlswXSAtIGFbMF0sIGJbMV0gLSBhWzFdXTtcbiAgICBjb25zdCBhYzogUG9pbnQgPSBbY1swXSAtIGFbMF0sIGNbMV0gLSBhWzFdXTtcbiAgICBjb25zdCBhZDogUG9pbnQgPSBbZFswXSAtIGFbMF0sIGRbMV0gLSBhWzFdXTtcblxuICAgIGNvbnN0IGNhOiBQb2ludCA9IFthWzBdIC0gY1swXSwgYVsxXSAtIGNbMV1dO1xuICAgIGNvbnN0IGNiOiBQb2ludCA9IFtiWzBdIC0gY1swXSwgYlsxXSAtIGNbMV1dO1xuICAgIGNvbnN0IGNkOiBQb2ludCA9IFtkWzBdIC0gY1swXSwgZFsxXSAtIGNbMV1dO1xuXG4gICAgcmV0dXJuIGNyb3NzUHJvZHVjdChhYiwgYWMpICogY3Jvc3NQcm9kdWN0KGFiLCBhZCkgPD0gMCAmJiBjcm9zc1Byb2R1Y3QoY2QsIGNhKSAqIGNyb3NzUHJvZHVjdChjZCwgY2IpIDw9IDA7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQb2x5bGluZUhpdFJlY3RhbmdsZSA9IChwb2ludHM6IFBvaW50W10sIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBpc0Nsb3NlOiBib29sZWFuID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IHJlY3RhbmdsZVBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICBjb25zdCBsZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPT09IGxlbiAtIDEgJiYgIWlzQ2xvc2UpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBwMSA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgcDIgPSBwb2ludHNbKGkgKyAxKSAlIGxlbl07XG4gICAgICAgIGNvbnN0IGlzSGl0ID1cbiAgICAgICAgICAgIGlzTGluZUhpdExpbmUocDEsIHAyLCByZWN0YW5nbGVQb2ludHNbMF0sIHJlY3RhbmdsZVBvaW50c1sxXSkgfHxcbiAgICAgICAgICAgIGlzTGluZUhpdExpbmUocDEsIHAyLCByZWN0YW5nbGVQb2ludHNbMV0sIHJlY3RhbmdsZVBvaW50c1syXSkgfHxcbiAgICAgICAgICAgIGlzTGluZUhpdExpbmUocDEsIHAyLCByZWN0YW5nbGVQb2ludHNbMl0sIHJlY3RhbmdsZVBvaW50c1szXSkgfHxcbiAgICAgICAgICAgIGlzTGluZUhpdExpbmUocDEsIHAyLCByZWN0YW5nbGVQb2ludHNbM10sIHJlY3RhbmdsZVBvaW50c1swXSk7XG4gICAgICAgIGlmIChpc0hpdCB8fCBpc1BvaW50SW5Qb2x5Z29uKHAxLCByZWN0YW5nbGVQb2ludHMpIHx8IGlzUG9pbnRJblBvbHlnb24ocDIsIHJlY3RhbmdsZVBvaW50cykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy9odHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMjUyMTk4Mi9jaGVjay1pZi1wb2ludC1pcy1pbnNpZGUtYS1wb2x5Z29uXG5leHBvcnQgY29uc3QgaXNQb2ludEluUG9seWdvbiA9IChwb2ludDogUG9pbnQsIHBvaW50czogUG9pbnRbXSkgPT4ge1xuICAgIC8vIHJheS1jYXN0aW5nIGFsZ29yaXRobSBiYXNlZCBvblxuICAgIC8vIGh0dHBzOi8vd3JmLmVjc2UucnBpLmVkdS9SZXNlYXJjaC9TaG9ydF9Ob3Rlcy9wbnBvbHkuaHRtbFxuXG4gICAgY29uc3QgeCA9IHBvaW50WzBdLFxuICAgICAgICB5ID0gcG9pbnRbMV07XG5cbiAgICBsZXQgaW5zaWRlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBwb2ludHMubGVuZ3RoIC0gMTsgaSA8IHBvaW50cy5sZW5ndGg7IGogPSBpKyspIHtcbiAgICAgICAgbGV0IHhpID0gcG9pbnRzW2ldWzBdLFxuICAgICAgICAgICAgeWkgPSBwb2ludHNbaV1bMV07XG4gICAgICAgIGxldCB4aiA9IHBvaW50c1tqXVswXSxcbiAgICAgICAgICAgIHlqID0gcG9pbnRzW2pdWzFdO1xuXG4gICAgICAgIGxldCBpbnRlcnNlY3QgPSB5aSA+IHkgIT0geWogPiB5ICYmIHggPCAoKHhqIC0geGkpICogKHkgLSB5aSkpIC8gKHlqIC0geWkpICsgeGk7XG4gICAgICAgIGlmIChpbnRlcnNlY3QpIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgfVxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQb2ludEluRWxsaXBzZSA9IChwb2ludDogUG9pbnQsIGNlbnRlcjogUG9pbnQsIHJ4OiBudW1iZXIsIHJ5OiBudW1iZXIsIGFuZ2xlID0gMCkgPT4ge1xuICAgIGNvbnN0IGNvc0FuZ2xlID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIGNvbnN0IHNpbkFuZ2xlID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgIGNvbnN0IHgxID0gKHBvaW50WzBdIC0gY2VudGVyWzBdKSAqIGNvc0FuZ2xlICsgKHBvaW50WzFdIC0gY2VudGVyWzFdKSAqIHNpbkFuZ2xlO1xuICAgIGNvbnN0IHkxID0gKHBvaW50WzFdIC0gY2VudGVyWzFdKSAqIGNvc0FuZ2xlIC0gKHBvaW50WzBdIC0gY2VudGVyWzBdKSAqIHNpbkFuZ2xlO1xuXG4gICAgcmV0dXJuICh4MSAqIHgxKSAvIChyeCAqIHJ4KSArICh5MSAqIHkxKSAvIChyeSAqIHJ5KSA8PSAxO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUG9pbnRJblJvdW5kUmVjdGFuZ2xlID0gKHBvaW50OiBQb2ludCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJhZGl1czogbnVtYmVyLCBhbmdsZSA9IDApID0+IHtcbiAgICBjb25zdCB7IHg6IHJlY3RYLCB5OiByZWN0WSwgd2lkdGgsIGhlaWdodCB9ID0gcmVjdGFuZ2xlO1xuICAgIGNvbnN0IGlzSW5SZWN0YW5nbGUgPSBwb2ludFswXSA+PSByZWN0WCAmJiBwb2ludFswXSA8PSByZWN0WCArIHdpZHRoICYmIHBvaW50WzFdID49IHJlY3RZICYmIHBvaW50WzFdIDw9IHJlY3RZICsgaGVpZ2h0O1xuICAgIGNvbnN0IGhhbmRsZUxlZnRUb3AgPVxuICAgICAgICBwb2ludFswXSA+PSByZWN0WCAmJlxuICAgICAgICBwb2ludFswXSA8PSByZWN0WCArIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFsxXSA+PSByZWN0WSAmJlxuICAgICAgICBwb2ludFsxXSA8PSByZWN0WSArIHJhZGl1cyAmJlxuICAgICAgICBNYXRoLmh5cG90KHBvaW50WzBdIC0gKHJlY3RYICsgcmFkaXVzKSwgcG9pbnRbMV0gLSAocmVjdFkgKyByYWRpdXMpKSA+IHJhZGl1cztcbiAgICBjb25zdCBoYW5kbGVMZWZ0Qm90dG9tID1cbiAgICAgICAgcG9pbnRbMF0gPj0gcmVjdFggJiZcbiAgICAgICAgcG9pbnRbMF0gPD0gcmVjdFggKyByYWRpdXMgJiZcbiAgICAgICAgcG9pbnRbMV0gPj0gcmVjdFkgKyBoZWlnaHQgJiZcbiAgICAgICAgcG9pbnRbMV0gPD0gcmVjdFkgKyBoZWlnaHQgLSByYWRpdXMgJiZcbiAgICAgICAgTWF0aC5oeXBvdChwb2ludFswXSAtIChyZWN0WCArIHJhZGl1cyksIHBvaW50WzFdIC0gKHJlY3RZICsgaGVpZ2h0IC0gcmFkaXVzKSkgPiByYWRpdXM7XG4gICAgY29uc3QgaGFuZGxlUmlnaHRUb3AgPVxuICAgICAgICBwb2ludFswXSA+PSByZWN0WCArIHdpZHRoIC0gcmFkaXVzICYmXG4gICAgICAgIHBvaW50WzBdIDw9IHJlY3RYICsgd2lkdGggJiZcbiAgICAgICAgcG9pbnRbMV0gPj0gcmVjdFkgJiZcbiAgICAgICAgcG9pbnRbMV0gPD0gcmVjdFkgKyByYWRpdXMgJiZcbiAgICAgICAgTWF0aC5oeXBvdChwb2ludFswXSAtIChyZWN0WCArIHdpZHRoIC0gcmFkaXVzKSwgcG9pbnRbMV0gLSAocmVjdFkgKyByYWRpdXMpKSA+IHJhZGl1cztcbiAgICBjb25zdCBoYW5kbGVSaWdodEJvdHRvbSA9XG4gICAgICAgIHBvaW50WzBdID49IHJlY3RYICsgd2lkdGggLSByYWRpdXMgJiZcbiAgICAgICAgcG9pbnRbMF0gPD0gcmVjdFggKyB3aWR0aCAmJlxuICAgICAgICBwb2ludFsxXSA+PSByZWN0WSArIGhlaWdodCAtIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFsxXSA8PSByZWN0WSArIGhlaWdodCAmJlxuICAgICAgICBNYXRoLmh5cG90KHBvaW50WzBdIC0gKHJlY3RYICsgd2lkdGggLSByYWRpdXMpLCBwb2ludFsxXSAtIChyZWN0WSArIGhlaWdodCAtIHJhZGl1cykpID4gcmFkaXVzO1xuICAgIGNvbnN0IGlzSW5Db3JuZXIgPSBoYW5kbGVMZWZ0VG9wIHx8IGhhbmRsZUxlZnRCb3R0b20gfHwgaGFuZGxlUmlnaHRUb3AgfHwgaGFuZGxlUmlnaHRCb3R0b207XG5cbiAgICByZXR1cm4gaXNJblJlY3RhbmdsZSAmJiAhaXNJbkNvcm5lcjtcbn07XG5cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL25pY2hvbGFzd21pbi9jMjY2MWViMTFjYWQ1NjcxZDgxNlxuZXhwb3J0IGNvbnN0IGNhdG11bGxSb21GaXR0aW5nID0gZnVuY3Rpb24ocG9pbnRzOiBQb2ludFtdKSB7XG4gICAgY29uc3QgYWxwaGEgPSAwLjU7XG4gICAgbGV0IHAwLCBwMSwgcDIsIHAzLCBicDEsIGJwMiwgZDEsIGQyLCBkMywgQSwgQiwgTiwgTTtcbiAgICB2YXIgZDNwb3dBLCBkMnBvd0EsIGQzcG93MkEsIGQycG93MkEsIGQxcG93MkEsIGQxcG93QTtcbiAgICBjb25zdCByZXN1bHQ6IFBvaW50W10gPSBbXTtcbiAgICByZXN1bHQucHVzaChbTWF0aC5yb3VuZChwb2ludHNbMF1bMF0pLCBNYXRoLnJvdW5kKHBvaW50c1swXVsxXSldKTtcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBwMCA9IGkgPT0gMCA/IHBvaW50c1swXSA6IHBvaW50c1tpIC0gMV07XG4gICAgICAgIHAxID0gcG9pbnRzW2ldO1xuICAgICAgICBwMiA9IHBvaW50c1tpICsgMV07XG4gICAgICAgIHAzID0gaSArIDIgPCBsZW5ndGggPyBwb2ludHNbaSArIDJdIDogcDI7XG5cbiAgICAgICAgZDEgPSBNYXRoLnNxcnQoTWF0aC5wb3cocDBbMF0gLSBwMVswXSwgMikgKyBNYXRoLnBvdyhwMFsxXSAtIHAxWzFdLCAyKSk7XG4gICAgICAgIGQyID0gTWF0aC5zcXJ0KE1hdGgucG93KHAxWzBdIC0gcDJbMF0sIDIpICsgTWF0aC5wb3cocDFbMV0gLSBwMlsxXSwgMikpO1xuICAgICAgICBkMyA9IE1hdGguc3FydChNYXRoLnBvdyhwMlswXSAtIHAzWzBdLCAyKSArIE1hdGgucG93KHAyWzFdIC0gcDNbMV0sIDIpKTtcblxuICAgICAgICAvLyBDYXRtdWxsLVJvbSB0byBDdWJpYyBCZXppZXIgY29udmVyc2lvbiBtYXRyaXhcbiAgICAgICAgLy8gQSA9IDJkMV4yYSArIDNkMV5hICogZDJeYSArIGQzXjJhXG4gICAgICAgIC8vIEIgPSAyZDNeMmEgKyAzZDNeYSAqIGQyXmEgKyBkMl4yYVxuICAgICAgICAvLyBbICAgMCAgICAgICAgICAgICAxICAgICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAgIF1cbiAgICAgICAgLy8gWyAgIC1kMl4yYSAvTiAgICAgQS9OICAgICAgICAgIGQxXjJhIC9OICAgMCAgICAgICAgICBdXG4gICAgICAgIC8vIFsgICAwICAgICAgICAgICAgIGQzXjJhIC9NICAgICBCL00gICAgICAgIC1kMl4yYSAvTSAgXVxuICAgICAgICAvLyBbICAgMCAgICAgICAgICAgICAwICAgICAgICAgICAgMSAgICAgICAgICAwICAgICAgICAgIF1cblxuICAgICAgICBkM3Bvd0EgPSBNYXRoLnBvdyhkMywgYWxwaGEpO1xuICAgICAgICBkM3BvdzJBID0gTWF0aC5wb3coZDMsIDIgKiBhbHBoYSk7XG4gICAgICAgIGQycG93QSA9IE1hdGgucG93KGQyLCBhbHBoYSk7XG4gICAgICAgIGQycG93MkEgPSBNYXRoLnBvdyhkMiwgMiAqIGFscGhhKTtcbiAgICAgICAgZDFwb3dBID0gTWF0aC5wb3coZDEsIGFscGhhKTtcbiAgICAgICAgZDFwb3cyQSA9IE1hdGgucG93KGQxLCAyICogYWxwaGEpO1xuXG4gICAgICAgIEEgPSAyICogZDFwb3cyQSArIDMgKiBkMXBvd0EgKiBkMnBvd0EgKyBkMnBvdzJBO1xuICAgICAgICBCID0gMiAqIGQzcG93MkEgKyAzICogZDNwb3dBICogZDJwb3dBICsgZDJwb3cyQTtcbiAgICAgICAgTiA9IDMgKiBkMXBvd0EgKiAoZDFwb3dBICsgZDJwb3dBKTtcbiAgICAgICAgaWYgKE4gPiAwKSB7XG4gICAgICAgICAgICBOID0gMSAvIE47XG4gICAgICAgIH1cbiAgICAgICAgTSA9IDMgKiBkM3Bvd0EgKiAoZDNwb3dBICsgZDJwb3dBKTtcbiAgICAgICAgaWYgKE0gPiAwKSB7XG4gICAgICAgICAgICBNID0gMSAvIE07XG4gICAgICAgIH1cblxuICAgICAgICBicDEgPSBbKC1kMnBvdzJBICogcDBbMF0gKyBBICogcDFbMF0gKyBkMXBvdzJBICogcDJbMF0pICogTiwgKC1kMnBvdzJBICogcDBbMV0gKyBBICogcDFbMV0gKyBkMXBvdzJBICogcDJbMV0pICogTl07XG4gICAgICAgIGJwMiA9IFsoZDNwb3cyQSAqIHAxWzBdICsgQiAqIHAyWzBdIC0gZDJwb3cyQSAqIHAzWzBdKSAqIE0sIChkM3BvdzJBICogcDFbMV0gKyBCICogcDJbMV0gLSBkMnBvdzJBICogcDNbMV0pICogTV07XG5cbiAgICAgICAgaWYgKGJwMVswXSA9PSAwICYmIGJwMVsxXSA9PSAwKSB7XG4gICAgICAgICAgICBicDEgPSBwMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnAyWzBdID09IDAgJiYgYnAyWzFdID09IDApIHtcbiAgICAgICAgICAgIGJwMiA9IHAyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnB1c2goYnAxIGFzIFBvaW50LCBicDIgYXMgUG9pbnQsIHAyIGFzIFBvaW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiB0aGUgcmVzdWx0IG9mIHNsb3BlIGlzIGJhc2VkIG9uIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbVxuICogeCwgeSBhcmUgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGluIHRoZSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsbGlwc2VUYW5nZW50U2xvcGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIGE6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgaWYgKE1hdGguYWJzKHkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiB4ID4gMCA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICAgIH1cbiAgICBjb25zdCBrID0gKC1iICogYiAqIHgpIC8gKGEgKiBhICogeSk7XG4gICAgcmV0dXJuIGs7XG59XG5cbi8qKlxuICogeCwgeSBhcmUgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGluIHRoZSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZlY3RvckZyb21Qb2ludEFuZFNsb3BlKHg6IG51bWJlciwgeTogbnVtYmVyLCBzbG9wZTogbnVtYmVyKSB7XG4gICAgaWYgKHNsb3BlID09PSBJbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gWzAsIC0xXSBhcyBQb2ludDtcbiAgICB9IGVsc2UgaWYgKHNsb3BlID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgcmV0dXJuIFswLCAxXSBhcyBQb2ludDtcbiAgICB9XG4gICAgbGV0IHZlY3RvciA9IFsxLCAtc2xvcGVdIGFzIFBvaW50O1xuICAgIGlmICh5IDwgMCkge1xuICAgICAgICB2ZWN0b3IgPSBbLXZlY3RvclswXSwgLXZlY3RvclsxXV07XG4gICAgfVxuICAgIHJldHVybiB2ZWN0b3IgYXMgUG9pbnQ7XG59XG5cbi8qKlxuICogVGhlIERPTSBsaWtlcyB2YWx1ZXMgdG8gYmUgZml4ZWQgdG8gMyBkZWNpbWFsIHBsYWNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Eb21QcmVjaXNpb24odjogbnVtYmVyKSB7XG4gICAgcmV0dXJuICt2LnRvRml4ZWQoNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0ZpeGVkKHY6IG51bWJlcikge1xuICAgIHJldHVybiArdi50b0ZpeGVkKDIpO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdHdvIG51bWJlcnMgbnVtYmVycyBhIGFuZCBiIGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLlxuICpcbiAqIEBwYXJhbSBhIC0gVGhlIGZpcnN0IHBvaW50LlxuICogQHBhcmFtIGIgLSBUaGUgc2Vjb25kIHBvaW50LlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwcm94aW1hdGVseShhOiBudW1iZXIsIGI6IG51bWJlciwgcHJlY2lzaW9uID0gMC4wMDAwMDEpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDw9IHByZWNpc2lvbjtcbn1cbiJdfQ==
|