@plait/core 0.51.1 → 0.51.3

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.
@@ -0,0 +1,209 @@
1
+ import { ACTIVE_STROKE_WIDTH } from '../constants';
2
+ import { PlaitBoard, SELECTION_BORDER_COLOR } from '../interfaces';
3
+ import { PlaitGroupElement } from '../interfaces/group';
4
+ import { Transforms } from '../transforms';
5
+ import { createG } from './dom';
6
+ import { drawRectangle } from './drawing/rectangle';
7
+ import { findElements, getRectangleByElements } from './element';
8
+ import { idCreator } from './id-creator';
9
+ import { getSelectedElements } from './selected-element';
10
+ import { isSelectionMoving } from './selection';
11
+ export const getElementsInGroup = (board, group, recursion, includeGroup) => {
12
+ let result = [];
13
+ const elements = board.children.filter(value => value.groupId === group.id);
14
+ if (recursion) {
15
+ elements.forEach(item => {
16
+ if (PlaitGroupElement.isGroup(item)) {
17
+ if (includeGroup) {
18
+ result.push(item);
19
+ }
20
+ result.push(...getElementsInGroup(board, item, recursion));
21
+ }
22
+ else {
23
+ result.push(item);
24
+ }
25
+ });
26
+ }
27
+ else {
28
+ result = includeGroup ? elements : elements.filter(item => !PlaitGroupElement.isGroup(item));
29
+ }
30
+ return result;
31
+ };
32
+ export const getRectangleByGroup = (board, group, recursion) => {
33
+ const elementsInGroup = getElementsInGroup(board, group, recursion);
34
+ return getRectangleByElements(board, elementsInGroup, false);
35
+ };
36
+ export const getGroupByElement = (board, element, recursion) => {
37
+ const group = board.children.find(item => item.id === element?.groupId);
38
+ if (!group) {
39
+ return recursion ? [] : null;
40
+ }
41
+ if (recursion) {
42
+ const groups = [group];
43
+ const grandGroups = getGroupByElement(board, group, recursion);
44
+ if (grandGroups.length) {
45
+ groups.push(...grandGroups);
46
+ }
47
+ return groups;
48
+ }
49
+ else {
50
+ return group;
51
+ }
52
+ };
53
+ export const getHighestGroup = (board, element) => {
54
+ const groups = getGroupByElement(board, element, true);
55
+ if (groups.length) {
56
+ return groups[groups.length - 1];
57
+ }
58
+ return null;
59
+ };
60
+ export const getElementsInGroupByElement = (board, element) => {
61
+ const highestGroup = getHighestGroup(board, element);
62
+ if (highestGroup) {
63
+ return getElementsInGroup(board, highestGroup, true);
64
+ }
65
+ else {
66
+ return [element];
67
+ }
68
+ };
69
+ export const isSelectedElementOrGroup = (board, element) => {
70
+ const selectedElements = getSelectedElements(board);
71
+ if (PlaitGroupElement.isGroup(element)) {
72
+ return isSelectedAllElementsInGroup(board, element);
73
+ }
74
+ return selectedElements.includes(element);
75
+ };
76
+ export const isSelectedAllElementsInGroup = (board, group) => {
77
+ const selectedElements = getSelectedElements(board);
78
+ const elementsInGroup = getElementsInGroup(board, group, true);
79
+ return elementsInGroup.every(item => selectedElements.includes(item));
80
+ };
81
+ export const getSelectedGroups = (board, groups) => {
82
+ const selectedGroups = [];
83
+ groups.forEach(item => {
84
+ if (isSelectedElementOrGroup(board, item)) {
85
+ selectedGroups.push(item);
86
+ }
87
+ });
88
+ return selectedGroups;
89
+ };
90
+ export const getHighestSelectedGroup = (board, element) => {
91
+ const groups = getGroupByElement(board, element, true);
92
+ const selectedGroups = getSelectedGroups(board, groups);
93
+ if (selectedGroups.length) {
94
+ return selectedGroups[selectedGroups.length - 1];
95
+ }
96
+ return null;
97
+ };
98
+ export const getHighestSelectedGroups = (board) => {
99
+ let result = [];
100
+ const selectedElements = getSelectedElements(board);
101
+ selectedElements.forEach(item => {
102
+ if (item.groupId) {
103
+ const group = getHighestSelectedGroup(board, item);
104
+ if (group && !result.includes(group)) {
105
+ result.push(group);
106
+ }
107
+ }
108
+ });
109
+ return result;
110
+ };
111
+ export const getSelectedIsolatedElements = (board) => {
112
+ let result = [];
113
+ const selectedElements = getSelectedElements(board);
114
+ selectedElements.forEach(item => {
115
+ if (!item.groupId) {
116
+ result.push(item);
117
+ }
118
+ else {
119
+ const group = getHighestSelectedGroup(board, item);
120
+ if (!group) {
121
+ result.push(item);
122
+ }
123
+ }
124
+ });
125
+ return result;
126
+ };
127
+ export const getHighestSelectedElements = (board) => {
128
+ return [...getHighestSelectedGroups(board), ...getSelectedIsolatedElements(board)];
129
+ };
130
+ export const createGroupRectangleG = (board, elements) => {
131
+ const selectedElements = getSelectedElements(board);
132
+ const groupRectangleG = createG();
133
+ const isMoving = isSelectionMoving(board);
134
+ elements.forEach(item => {
135
+ const isRender = (!selectedElements.includes(item) && !isMoving) || isMoving;
136
+ if (item.groupId && isRender) {
137
+ const elements = getElementsInGroupByElement(board, item);
138
+ const rectangle = getRectangleByElements(board, elements, false);
139
+ groupRectangleG.append(drawRectangle(board, rectangle, {
140
+ stroke: SELECTION_BORDER_COLOR,
141
+ strokeWidth: ACTIVE_STROKE_WIDTH,
142
+ strokeLineDash: [5]
143
+ }));
144
+ }
145
+ });
146
+ return groupRectangleG;
147
+ };
148
+ export const createGroup = () => {
149
+ return {
150
+ id: idCreator(),
151
+ type: 'group'
152
+ };
153
+ };
154
+ export const nonGroupInHighestSelectedElements = (elements) => {
155
+ return elements.every(item => !item.groupId);
156
+ };
157
+ export const hasSelectedElementsInSameGroup = (elements) => {
158
+ return elements.every(item => item.groupId && item.groupId === elements[0].groupId);
159
+ };
160
+ export const canAddGroup = (highestSelectedElements) => {
161
+ if (highestSelectedElements.length > 1) {
162
+ return nonGroupInHighestSelectedElements(highestSelectedElements) || hasSelectedElementsInSameGroup(highestSelectedElements);
163
+ }
164
+ return false;
165
+ };
166
+ export const addGroup = (board) => {
167
+ const selectedGroups = getHighestSelectedGroups(board);
168
+ const selectedIsolatedElements = getSelectedIsolatedElements(board);
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);
190
+ return selectedElements.length > 0 && selectedGroups.length > 0;
191
+ };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9ncm91cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLFVBQVUsRUFBZ0Isc0JBQXNCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFpQixFQUFFLFNBQW1CLEVBQUUsWUFBc0IsRUFBRSxFQUFFO0lBQ3BILElBQUksTUFBTSxHQUFtQixFQUFFLENBQUM7SUFDaEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBRSxLQUFzQixDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFtQixDQUFDO0lBQ2hILElBQUksU0FBUyxFQUFFO1FBQ1gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQixJQUFJLGlCQUFpQixDQUFDLE9B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Q29udGVudCI6WyJpbXBvcnQgeyBBQ1RJVkVfU1RST0tFX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUGxhaXRHcm91cCwgUGxhaXRHcm91cEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2dyb3VwJztcbmltcG9ydCB7IFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGNyZWF0ZUcgfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyBkcmF3UmVjdGFuZ2xlIH0gZnJvbSAnLi9kcmF3aW5nL3JlY3RhbmdsZSc7XG5pbXBvcnQgeyBmaW5kRWxlbWVudHMsIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgaWRDcmVhdG9yIH0gZnJvbSAnLi9pZC1jcmVhdG9yJztcbmltcG9ydCB7IGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tICcuL3NlbGVjdGVkLWVsZW1lbnQnO1xuaW1wb3J0IHsgaXNTZWxlY3Rpb25Nb3ZpbmcgfSBmcm9tICcuL3NlbGVjdGlvbic7XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50c0luR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdyb3VwOiBQbGFpdEdyb3VwLCByZWN1cnNpb24/OiBib29sZWFuLCBpbmNsdWRlR3JvdXA/OiBib29sZWFuKSA9PiB7XG4gICAgbGV0IHJlc3VsdDogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBjb25zdCBlbGVtZW50cyA9IGJvYXJkLmNoaWxkcmVuLmZpbHRlcih2YWx1ZSA9PiAodmFsdWUgYXMgUGxhaXRFbGVtZW50KS5ncm91cElkID09PSBncm91cC5pZCkgYXMgUGxhaXRFbGVtZW50W107XG4gICAgaWYgKHJlY3Vyc2lvbikge1xuICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKFBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZUdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5nZXRFbGVtZW50c0luR3JvdXAoYm9hcmQsIGl0ZW0sIHJlY3Vyc2lvbikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaW5jbHVkZUdyb3VwID8gZWxlbWVudHMgOiAoZWxlbWVudHMuZmlsdGVyKGl0ZW0gPT4gIVBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoaXRlbSkpIGFzIFBsYWl0RWxlbWVudFtdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWN0YW5nbGVCeUdyb3VwID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBncm91cDogUGxhaXRHcm91cCwgcmVjdXJzaW9uPzogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGdldEVsZW1lbnRzSW5Hcm91cChib2FyZCwgZ3JvdXAsIHJlY3Vyc2lvbikgYXMgUGxhaXRFbGVtZW50W107XG4gICAgcmV0dXJuIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzSW5Hcm91cCwgZmFsc2UpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwQnlFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQsIHJlY3Vyc2lvbj86IGJvb2xlYW4pOiBQbGFpdEdyb3VwIHwgUGxhaXRHcm91cFtdIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgZ3JvdXAgPSBib2FyZC5jaGlsZHJlbi5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZWxlbWVudD8uZ3JvdXBJZCk7XG4gICAgaWYgKCFncm91cCkge1xuICAgICAgICByZXR1cm4gcmVjdXJzaW9uID8gW10gOiBudWxsO1xuICAgIH1cbiAgICBpZiAocmVjdXJzaW9uKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IFtncm91cF07XG4gICAgICAgIGNvbnN0IGdyYW5kR3JvdXBzID0gZ2V0R3JvdXBCeUVsZW1lbnQoYm9hcmQsIGdyb3VwLCByZWN1cnNpb24pIGFzIFBsYWl0R3JvdXBbXTtcbiAgICAgICAgaWYgKGdyYW5kR3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgZ3JvdXBzLnB1c2goLi4uZ3JhbmRHcm91cHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncm91cHMgYXMgUGxhaXRHcm91cFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBncm91cCBhcyBQbGFpdEdyb3VwO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaWdoZXN0R3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB0cnVlKSBhcyBQbGFpdEdyb3VwW107XG4gICAgaWYgKGdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGdyb3Vwc1tncm91cHMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRzSW5Hcm91cEJ5RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaGlnaGVzdEdyb3VwID0gZ2V0SGlnaGVzdEdyb3VwKGJvYXJkLCBlbGVtZW50KTtcbiAgICBpZiAoaGlnaGVzdEdyb3VwKSB7XG4gICAgICAgIHJldHVybiBnZXRFbGVtZW50c0luR3JvdXAoYm9hcmQsIGhpZ2hlc3RHcm91cCwgdHJ1ZSkgYXMgUGxhaXRHcm91cFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbZWxlbWVudF07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VsZWN0ZWRFbGVtZW50T3JHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGlmIChQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc1NlbGVjdGVkQWxsRWxlbWVudHNJbkdyb3VwKGJvYXJkLCBlbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZWxlY3RlZEFsbEVsZW1lbnRzSW5Hcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZ3JvdXA6IFBsYWl0R3JvdXApID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY29uc3QgZWxlbWVudHNJbkdyb3VwID0gZ2V0RWxlbWVudHNJbkdyb3VwKGJvYXJkLCBncm91cCwgdHJ1ZSk7XG4gICAgcmV0dXJuIGVsZW1lbnRzSW5Hcm91cC5ldmVyeShpdGVtID0+IHNlbGVjdGVkRWxlbWVudHMuaW5jbHVkZXMoaXRlbSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkR3JvdXBzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBncm91cHM6IFBsYWl0R3JvdXBbXSk6IFBsYWl0R3JvdXBbXSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHM6IFBsYWl0R3JvdXBbXSA9IFtdO1xuICAgIGdyb3Vwcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXNTZWxlY3RlZEVsZW1lbnRPckdyb3VwKGJvYXJkLCBpdGVtKSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRHcm91cHMucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxlY3RlZEdyb3Vwcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KTogUGxhaXRHcm91cCB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB0cnVlKSBhcyBQbGFpdEdyb3VwW107XG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBnZXRTZWxlY3RlZEdyb3Vwcyhib2FyZCwgZ3JvdXBzKTtcbiAgICBpZiAoc2VsZWN0ZWRHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZEdyb3Vwc1tzZWxlY3RlZEdyb3Vwcy5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdFNlbGVjdGVkR3JvdXBzID0gKGJvYXJkOiBQbGFpdEJvYXJkKTogUGxhaXRHcm91cFtdID0+IHtcbiAgICBsZXQgcmVzdWx0OiBQbGFpdEdyb3VwW10gPSBbXTtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5ncm91cElkKSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3VwKGJvYXJkLCBpdGVtKTtcbiAgICAgICAgICAgIGlmIChncm91cCAmJiAhcmVzdWx0LmluY2x1ZGVzKGdyb3VwKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgbGV0IHJlc3VsdDogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoIWl0ZW0uZ3JvdXBJZCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBncm91cCA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3VwKGJvYXJkLCBpdGVtKTtcbiAgICAgICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGlnaGVzdFNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gWy4uLmdldEhpZ2hlc3RTZWxlY3RlZEdyb3Vwcyhib2FyZCksIC4uLmdldFNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyhib2FyZCldO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwUmVjdGFuZ2xlRyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKTogU1ZHR0VsZW1lbnQgfCBudWxsID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY29uc3QgZ3JvdXBSZWN0YW5nbGVHOiBTVkdHRWxlbWVudCA9IGNyZWF0ZUcoKTtcbiAgICBjb25zdCBpc01vdmluZyA9IGlzU2VsZWN0aW9uTW92aW5nKGJvYXJkKTtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGlzUmVuZGVyID0gKCFzZWxlY3RlZEVsZW1lbnRzLmluY2x1ZGVzKGl0ZW0pICYmICFpc01vdmluZykgfHwgaXNNb3Zpbmc7XG4gICAgICAgIGlmIChpdGVtLmdyb3VwSWQgJiYgaXNSZW5kZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0RWxlbWVudHNJbkdyb3VwQnlFbGVtZW50KGJvYXJkLCBpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgICAgICBncm91cFJlY3RhbmdsZUcuYXBwZW5kKFxuICAgICAgICAgICAgICAgIGRyYXdSZWN0YW5nbGUoYm9hcmQsIHJlY3RhbmdsZSwge1xuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBBQ1RJVkVfU1RST0tFX1dJRFRILFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VMaW5lRGFzaDogWzVdXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZ3JvdXBSZWN0YW5nbGVHO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyb3VwID0gKCk6IFBsYWl0R3JvdXAgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgdHlwZTogJ2dyb3VwJ1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3Qgbm9uR3JvdXBJbkhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzID0gKGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIHJldHVybiBlbGVtZW50cy5ldmVyeShpdGVtID0+ICFpdGVtLmdyb3VwSWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1NlbGVjdGVkRWxlbWVudHNJblNhbWVHcm91cCA9IChlbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gZWxlbWVudHMuZXZlcnkoaXRlbSA9PiBpdGVtLmdyb3VwSWQgJiYgaXRlbS5ncm91cElkID09PSBlbGVtZW50c1swXS5ncm91cElkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjYW5BZGRHcm91cCA9IChoaWdoZXN0U2VsZWN0ZWRFbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBpZiAoaGlnaGVzdFNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gbm9uR3JvdXBJbkhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzKGhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzKSB8fCBoYXNTZWxlY3RlZEVsZW1lbnRzSW5TYW1lR3JvdXAoaGlnaGVzdFNlbGVjdGVkRWxlbWVudHMpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwcyA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3Vwcyhib2FyZCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCBoaWdoZXN0U2VsZWN0ZWRFbGVtZW50cyA9IFsuLi5zZWxlY3RlZEdyb3VwcywgLi4uc2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzXTtcbiAgICBjb25zdCBncm91cCA9IGNyZWF0ZUdyb3VwKCk7XG4gICAgaWYgKGNhbkFkZEdyb3VwKGhpZ2hlc3RTZWxlY3RlZEVsZW1lbnRzKSkge1xuICAgICAgICBoaWdoZXN0U2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGl0ZW0pO1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IGdyb3VwSWQ6IGdyb3VwLmlkIH0sIHBhdGgpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhc1NlbGVjdGVkRWxlbWVudHNJblNhbWVHcm91cChoaWdoZXN0U2VsZWN0ZWRFbGVtZW50cykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0dyb3VwSWQgPSBzZWxlY3RlZElzb2xhdGVkRWxlbWVudHNbMF0uZ3JvdXBJZDtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShcbiAgICAgICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgICAgICAgICBncm91cElkOiBuZXdHcm91cElkXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbYm9hcmQuY2hpbGRyZW4ubGVuZ3RoXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgZ3JvdXAsIFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjYW5SZW1vdmVHcm91cCA9IChib2FyZDogUGxhaXRCb2FyZCwgc2VsZWN0ZWRHcm91cHM6IFBsYWl0R3JvdXBbXSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwICYmIHNlbGVjdGVkR3JvdXBzLmxlbmd0aCA+IDA7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlR3JvdXAgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEdyb3VwcyA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3Vwcyhib2FyZCk7XG4gICAgaWYgKGNhblJlbW92ZUdyb3VwKGJvYXJkLCBzZWxlY3RlZEdyb3VwcykpIHtcbiAgICAgICAgc2VsZWN0ZWRHcm91cHMubWFwKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzSW5Hcm91cCA9IGZpbmRFbGVtZW50cyhib2FyZCwge1xuICAgICAgICAgICAgICAgIG1hdGNoOiBpdGVtID0+IGl0ZW0uZ3JvdXBJZCA9PT0gZ3JvdXAuaWQsXG4gICAgICAgICAgICAgICAgcmVjdXJzaW9uOiAoKSA9PiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtZW50c0luR3JvdXAuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IGdyb3VwSWQ6IGdyb3VwLmdyb3VwSWQgfHwgdW5kZWZpbmVkIH0sIHBhdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBncm91cFBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBncm91cCk7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGUoYm9hcmQsIGdyb3VwUGF0aCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4iXX0=
@@ -25,4 +25,6 @@ export * from './clipboard';
25
25
  export * from './touch';
26
26
  export * from './dnd';
27
27
  export * from './to-point';
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb20nO1xuZXhwb3J0ICogZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2hpc3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9ob3RrZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vaWQtY3JlYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL21hdGgnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWFrLW1hcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhd2luZy9yZWN0YW5nbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3aW5nL2Fycm93JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhd2luZy9jaXJjbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3aW5nL2xpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi90cmVlJztcbmV4cG9ydCAqIGZyb20gJy4vZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbW92aW5nLWVsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1pbWFnZSc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC9jbGlwYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGlwYm9hcmQvY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY2xpcGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vdG91Y2gnO1xuZXhwb3J0ICogZnJvbSAnLi9kbmQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1wb2ludCc7XG4iXX0=
28
+ export * from './group';
29
+ export * from './selection';
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb20nO1xuZXhwb3J0ICogZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2hpc3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9ob3RrZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vaWQtY3JlYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL21hdGgnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWFrLW1hcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhd2luZy9yZWN0YW5nbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3aW5nL2Fycm93JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhd2luZy9jaXJjbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3aW5nL2xpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi90cmVlJztcbmV4cG9ydCAqIGZyb20gJy4vZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbW92aW5nLWVsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1pbWFnZSc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC9jbGlwYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGlwYm9hcmQvY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY2xpcGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vdG91Y2gnO1xuZXhwb3J0ICogZnJvbSAnLi9kbmQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1wb2ludCc7XG5leHBvcnQgKiBmcm9tICcuL2dyb3VwJztcbmV4cG9ydCAqIGZyb20gJy4vc2VsZWN0aW9uJzsiXX0=
@@ -114,14 +114,19 @@ export const isLineHitLine = (a, b, c, d) => {
114
114
  const cd = [d[0] - c[0], d[1] - c[1]];
115
115
  return crossProduct(ab, ac) * crossProduct(ab, ad) <= 0 && crossProduct(cd, ca) * crossProduct(cd, cb) <= 0;
116
116
  };
117
- export const isPolylineHitRectangle = (points, rectangle) => {
117
+ export const isPolylineHitRectangle = (points, rectangle, isClose = true) => {
118
118
  const rectanglePoints = RectangleClient.getCornerPoints(rectangle);
119
- for (let i = 1; i < points.length; i++) {
120
- const isIntersect = isLineHitLine(points[i], points[i - 1], rectanglePoints[0], rectanglePoints[1]) ||
121
- isLineHitLine(points[i], points[i - 1], rectanglePoints[1], rectanglePoints[2]) ||
122
- isLineHitLine(points[i], points[i - 1], rectanglePoints[2], rectanglePoints[3]) ||
123
- isLineHitLine(points[i], points[i - 1], rectanglePoints[3], rectanglePoints[0]);
124
- if (isIntersect) {
119
+ const len = points.length;
120
+ for (let i = 0; i < len; i++) {
121
+ if (i === len - 1 && !isClose)
122
+ continue;
123
+ const p1 = points[i];
124
+ const p2 = points[(i + 1) % len];
125
+ const isHit = isLineHitLine(p1, p2, rectanglePoints[0], rectanglePoints[1]) ||
126
+ isLineHitLine(p1, p2, rectanglePoints[1], rectanglePoints[2]) ||
127
+ isLineHitLine(p1, p2, rectanglePoints[2], rectanglePoints[3]) ||
128
+ isLineHitLine(p1, p2, rectanglePoints[3], rectanglePoints[0]);
129
+ if (isHit || isPointInPolygon(p1, rectanglePoints) || isPointInPolygon(p2, rectanglePoints)) {
125
130
  return true;
126
131
  }
127
132
  }
@@ -142,14 +147,14 @@ export const isPointInPolygon = (point, points) => {
142
147
  }
143
148
  return inside;
144
149
  };
145
- export const isPointInEllipse = (point, center, rx, ry, rotation = 0) => {
146
- const cosAngle = Math.cos(rotation);
147
- const sinAngle = Math.sin(rotation);
150
+ export const isPointInEllipse = (point, center, rx, ry, angle = 0) => {
151
+ const cosAngle = Math.cos(angle);
152
+ const sinAngle = Math.sin(angle);
148
153
  const x1 = (point[0] - center[0]) * cosAngle + (point[1] - center[1]) * sinAngle;
149
154
  const y1 = (point[1] - center[1]) * cosAngle - (point[0] - center[0]) * sinAngle;
150
155
  return (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry) <= 1;
151
156
  };
152
- export const isPointInRoundRectangle = (point, rectangle, radius) => {
157
+ export const isPointInRoundRectangle = (point, rectangle, radius, angle = 0) => {
153
158
  const { x: rectX, y: rectY, width, height } = rectangle;
154
159
  const isInRectangle = point[0] >= rectX && point[0] <= rectX + width && point[1] >= rectY && point[1] <= rectY + height;
155
160
  const handleLeftTop = point[0] >= rectX &&
@@ -262,4 +267,4 @@ export function toDomPrecision(v) {
262
267
  export function toFixed(v) {
263
268
  return +v.toFixed(2);
264
269
  }
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLDZDQUE2QztBQUM3QyxNQUFNLFVBQVUsOEJBQThCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO0lBQy9HLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtRQUNqQiwyQkFBMkI7UUFDM0IsS0FBSyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUM7S0FDM0I7SUFFRCxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDWCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7UUFDWCxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztLQUNYO1NBQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDUixFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQ1g7U0FBTTtRQUNILEVBQUUsR0FBRyxFQUFFLEdB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R0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBUSxFQUFFLENBQVEsRUFBRSxDQUFRLEVBQUUsQ0FBUSxFQUFXLEVBQUU7SUFDN0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFTLEVBQUUsRUFBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0UsTUFBTSxFQUFFLEdBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLEVBQUUsR0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxHQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0MsTUFBTSxFQUFFLEdBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FB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QyxDQUFDLElBQUksS0FBSyxHQUFHLE1BQU07UUFDMUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxNQUFNO1FBQzFCLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU07UUFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMzRixNQUFNLGNBQWMsR0FDaEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTTtRQUNsQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLEtBQUs7UUFDekIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUs7UUFDakIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxNQUFNO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUYsTUFBTSxpQkFBaUIsR0FDbkIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTTtRQUNsQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLEtBQUs7UUFDekIsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTTtRQUNuQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLE1BQU07UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDbkcsTUFBTSxVQUFVLEdBQUcsYUFBYSxJQUFJLGdCQUFnQixJQUFJLGNBQWMsSUFBSSxpQkFBaUIsQ0FBQztJQUU1RixPQUFPLGFBQWEsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRiw0REFBNEQ7QUFDNUQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsVUFBUyxNQUFlO0lBQ3JELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNsQixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRCxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ3RELE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXpDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxD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QUMsQ0FBQTtBQUNyQixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxDQUFTO0lBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZWN0YW5nbGUtY2xpZW50JztcblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzY4NTM5MjYvMjMyMTIyXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHg6IG51bWJlciwgeTogbnVtYmVyLCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgY29uc3QgQSA9IHggLSB4MTtcbiAgICBjb25zdCBCID0geSAtIHkxO1xuICAgIGNvbnN0IEMgPSB4MiAtIHgxO1xuICAgIGNvbnN0IEQgPSB5MiAtIHkxO1xuXG4gICAgY29uc3QgZG90ID0gQSAqIEMgKyBCICogRDtcbiAgICBjb25zdCBsZW5TcXVhcmUgPSBDICogQyArIEQgKiBEO1xuICAgIGxldCBwYXJhbSA9IC0xO1xuICAgIGlmIChsZW5TcXVhcmUgIT09IDApIHtcbiAgICAgICAgLy8gaW4gY2FzZSBvZiAwIGxlbmd0aCBsaW5lXG4gICAgICAgIHBhcmFtID0gZG90IC8gbGVuU3F1YXJlO1xuICAgIH1cblxuICAgIGxldCB4eCwgeXk7XG4gICAgaWYgKHBhcmFtIDwgMCkge1xuICAgICAgICB4eCA9IHgxO1xuICAgICAgICB5eSA9IHkxO1xuICAgIH0gZWxzZSBpZiAocGFyYW0gPiAxKSB7XG4gICAgICAgIHh4ID0geDI7XG4gICAgICAgIHl5ID0geTI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgeHggPSB4MSArIHBhcmFtICogQztcbiAgICAgICAgeXkgPSB5MSArIHBhcmFtICogRDtcbiAgICB9XG5cbiAgICBjb25zdCBkeCA9IHggLSB4eDtcbiAgICBjb25zdCBkeSA9IHkgLSB5eTtcbiAgICByZXR1cm4gTWF0aC5oeXBvdChkeCwgZHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudChwb2ludDogUG9pbnQsIGxpbmVQb2ludHM6IFtQb2ludCwgUG9pbnRdKSB7XG4gICAgY29uc3QgeCA9IHBvaW50WzBdLFxuICAgICAgICB5ID0gcG9pbnRbMV0sXG4gICAgICAgIHgxID0gbGluZVBvaW50c1swXVswXSxcbiAgICAgICAgeTEgPSBsaW5lUG9pbnRzWzBdWzFdLFxuICAgICAgICB4MiA9IGxpbmVQb2ludHNbMV1bMF0sXG4gICAgICAgIHkyID0gbGluZVBvaW50c1sxXVsxXTtcbiAgICBjb25zdCBBID0geCAtIHgxO1xuICAgIGNvbnN0IEIgPSB5IC0geTE7XG4gICAgY29uc3QgQyA9IHgyIC0geDE7XG4gICAgY29uc3QgRCA9IHkyIC0geTE7XG5cbiAgICBjb25zdCBkb3QgPSBBICogQyArIEIgKiBEO1xuICAgIGNvbnN0IGxlblNxdWFyZSA9IEMgKiBDICsgRCAqIEQ7XG4gICAgbGV0IHBhcmFtID0gLTE7XG4gICAgaWYgKGxlblNxdWFyZSAhPT0gMCkge1xuICAgICAgICAvLyBpbiBjYXNlIG9mIDAgbGVuZ3RoIGxpbmVcbiAgICAgICAgcGFyYW0gPSBkb3QgLyBsZW5TcXVhcmU7XG4gICAgfVxuXG4gICAgbGV0IHh4LCB5eTtcbiAgICBpZiAocGFyYW0gPCAwKSB7XG4gICAgICAgIHh4ID0geDE7XG4gICAgICAgIHl5ID0geTE7XG4gICAgfSBlbHNlIGlmIChwYXJhbSA+IDEpIHtcbiAgICAgICAgeHggPSB4MjtcbiAgICAgICAgeXkgPSB5MjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB4eCA9IHgxICsgcGFyYW0gKiBDO1xuICAgICAgICB5eSA9IHkxICsgcGFyYW0gKiBEO1xuICAgIH1cblxuICAgIHJldHVybiBbeHgsIHl5XSBhcyBQb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnRzOiBQb2ludFtdLCBwb2ludDogUG9pbnQpIHtcbiAgICBjb25zdCBsZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCBkaXN0YW5jZSA9IEluZmluaXR5O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAgPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IHAyID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudERpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHBvaW50WzBdLCBwb2ludFsxXSwgcFswXSwgcFsxXSwgcDJbMF0sIHAyWzFdKTtcbiAgICAgICAgaWYgKGN1cnJlbnREaXN0YW5jZSA8IGRpc3RhbmNlKSB7XG4gICAgICAgICAgICBkaXN0YW5jZSA9IGN1cnJlbnREaXN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlzdGFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludDogUG9pbnQsIHBvaW50czogUG9pbnRbXSwgaXNDbG9zZTogQm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBsZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCBkaXN0YW5jZSA9IEluZmluaXR5O1xuICAgIGxldCByZXN1bHQ6IFBvaW50ID0gcG9pbnQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAgPSBwb2ludHNbaV07XG4gICAgICAgIGlmIChpID09PSBsZW4gLSAxICYmICFpc0Nsb3NlKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgcDIgPSBpID09PSBsZW4gLSAxID8gcG9pbnRzWzBdIDogcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudERpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHBvaW50WzBdLCBwb2ludFsxXSwgcFswXSwgcFsxXSwgcDJbMF0sIHAyWzFdKTtcbiAgICAgICAgaWYgKGN1cnJlbnREaXN0YW5jZSA8IGRpc3RhbmNlKSB7XG4gICAgICAgICAgICBkaXN0YW5jZSA9IGN1cnJlbnREaXN0YW5jZTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnQocG9pbnQsIFtwLCBwMl0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgYW5nbGU6IG51bWJlcikge1xuICAgIC8vIPCdkY7igLLwnZGlPSjwnZGO8J2RpeKIkvCdkZDwnZGlKWNvc/CdnIPiiJIo8J2RjvCdkabiiJLwnZGQ8J2RpilzaW7wnZyDK/CdkZDwnZGlXG4gICAgLy8g8J2RjuKAsvCdkaY9KPCdkY7wnZGl4oiS8J2RkPCdkaUpc2lu8J2cgyso8J2RjvCdkabiiJLwnZGQ8J2Rpiljb3PwnZyDK/CdkZDwnZGmLlxuICAgIC8vIGh0dHBzOi8vbWF0aC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMjIwNDUyMC9ob3ctZG8taS1yb3RhdGUtYS1saW5lLXNlZ21lbnQtaW4tYS1zcGVjaWZpYy1wb2ludC1vbi10aGUtbGluZVxuICAgIHJldHVybiBbKHgxIC0geDIpICogTWF0aC5jb3MoYW5nbGUpIC0gKHkxIC0geTIpICogTWF0aC5zaW4oYW5nbGUpICsgeDIsICh4MSAtIHgyKSAqIE1hdGguc2luKGFuZ2xlKSArICh5MSAtIHkyKSAqIE1hdGguY29zKGFuZ2xlKSArIHkyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgIGNvbnN0IGR4ID0geDEgLSB4MjtcbiAgICBjb25zdCBkeSA9IHkxIC0geTI7XG4gICAgcmV0dXJuIE1hdGguaHlwb3QoZHgsIGR5KTtcbn1cblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTI1NDgzOC9jYWxjdWxhdGluZy1kaXN0YW5jZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtcmVjdGFuZ3VsYXItYm94LW5lYXJlc3QtcG9pbnRcbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFJlY3RhbmdsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmVjdDogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgdmFyIGR4ID0gTWF0aC5tYXgocmVjdC54IC0geCwgMCwgeCAtIChyZWN0LnggKyByZWN0LndpZHRoKSk7XG4gICAgdmFyIGR5ID0gTWF0aC5tYXgocmVjdC55IC0geSwgMCwgeSAtIChyZWN0LnkgKyByZWN0LmhlaWdodCkpO1xuICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xufVxuXG5leHBvcnQgY29uc3QgaXNMaW5lSGl0TGluZSA9IChhOiBQb2ludCwgYjogUG9pbnQsIGM6IFBvaW50LCBkOiBQb2ludCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGNyb3NzUHJvZHVjdCA9ICh2MTogUG9pbnQsIHYyOiBQb2ludCkgPT4gdjFbMF0gKiB2MlsxXSAtIHYxWzFdICogdjJbMF07XG5cbiAgICBjb25zdCBhYjogUG9pbnQgPSBbYlswXSAtIGFbMF0sIGJbMV0gLSBhWzFdXTtcbiAgICBjb25zdCBhYzogUG9pbnQgPSBbY1swXSAtIGFbMF0sIGNbMV0gLSBhWzFdXTtcbiAgICBjb25zdCBhZDogUG9pbnQgPSBbZFswXSAtIGFbMF0sIGRbMV0gLSBhWzFdXTtcblxuICAgIGNvbnN0IGNhOiBQb2ludCA9IFthWzBdIC0gY1swXSwgYVsxXSAtIGNbMV1dO1xuICAgIGNvbnN0IGNiOiBQb2ludCA9IFtiWzBdIC0gY1swXSwgYlsxXSAtIGNbMV1dO1xuICAgIGNvbnN0IGNkOiBQb2ludCA9IFtkWzBdIC0gY1swXSwgZFsxXSAtIGNbMV1dO1xuXG4gICAgcmV0dXJuIGNyb3NzUHJvZHVjdChhYiwgYWMpICogY3Jvc3NQcm9kdWN0KGFiLCBhZCkgPD0gMCAmJiBjcm9zc1Byb2R1Y3QoY2QsIGNhKSAqIGNyb3NzUHJvZHVjdChjZCwgY2IpIDw9IDA7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQb2x5bGluZUhpdFJlY3RhbmdsZSA9IChwb2ludHM6IFBvaW50W10sIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXNJbnRlcnNlY3QgPVxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwb2ludHNbaV0sIHBvaW50c1tpIC0gMV0sIHJlY3RhbmdsZVBvaW50c1swXSwgcmVjdGFuZ2xlUG9pbnRzWzFdKSB8fFxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwb2ludHNbaV0sIHBvaW50c1tpIC0gMV0sIHJlY3RhbmdsZVBvaW50c1sxXSwgcmVjdGFuZ2xlUG9pbnRzWzJdKSB8fFxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwb2ludHNbaV0sIHBvaW50c1tpIC0gMV0sIHJlY3RhbmdsZVBvaW50c1syXSwgcmVjdGFuZ2xlUG9pbnRzWzNdKSB8fFxuICAgICAgICAgICAgaXNMaW5lSGl0TGluZShwb2ludHNbaV0sIHBvaW50c1tpIC0gMV0sIHJlY3RhbmdsZVBvaW50c1szXSwgcmVjdGFuZ2xlUG9pbnRzWzBdKTtcbiAgICAgICAgaWYgKGlzSW50ZXJzZWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjI1MjE5ODIvY2hlY2staWYtcG9pbnQtaXMtaW5zaWRlLWEtcG9seWdvblxuZXhwb3J0IGNvbnN0IGlzUG9pbnRJblBvbHlnb24gPSAocG9pbnQ6IFBvaW50LCBwb2ludHM6IFBvaW50W10pID0+IHtcbiAgICAvLyByYXktY2FzdGluZyBhbGdvcml0aG0gYmFzZWQgb25cbiAgICAvLyBodHRwczovL3dyZi5lY3NlLnJwaS5lZHUvUmVzZWFyY2gvU2hvcnRfTm90ZXMvcG5wb2x5Lmh0bWxcblxuICAgIGNvbnN0IHggPSBwb2ludFswXSxcbiAgICAgICAgeSA9IHBvaW50WzFdO1xuXG4gICAgbGV0IGluc2lkZSA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gcG9pbnRzLmxlbmd0aCAtIDE7IGkgPCBwb2ludHMubGVuZ3RoOyBqID0gaSsrKSB7XG4gICAgICAgIGxldCB4aSA9IHBvaW50c1tpXVswXSxcbiAgICAgICAgICAgIHlpID0gcG9pbnRzW2ldWzFdO1xuICAgICAgICBsZXQgeGogPSBwb2ludHNbal1bMF0sXG4gICAgICAgICAgICB5aiA9IHBvaW50c1tqXVsxXTtcblxuICAgICAgICBsZXQgaW50ZXJzZWN0ID0geWkgPiB5ICE9IHlqID4geSAmJiB4IDwgKCh4aiAtIHhpKSAqICh5IC0geWkpKSAvICh5aiAtIHlpKSArIHhpO1xuICAgICAgICBpZiAoaW50ZXJzZWN0KSBpbnNpZGUgPSAhaW5zaWRlO1xuICAgIH1cbiAgICByZXR1cm4gaW5zaWRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUG9pbnRJbkVsbGlwc2UgPSAocG9pbnQ6IFBvaW50LCBjZW50ZXI6IFBvaW50LCByeDogbnVtYmVyLCByeTogbnVtYmVyLCByb3RhdGlvbiA9IDApID0+IHtcbiAgICBjb25zdCBjb3NBbmdsZSA9IE1hdGguY29zKHJvdGF0aW9uKTtcbiAgICBjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKHJvdGF0aW9uKTtcbiAgICBjb25zdCB4MSA9IChwb2ludFswXSAtIGNlbnRlclswXSkgKiBjb3NBbmdsZSArIChwb2ludFsxXSAtIGNlbnRlclsxXSkgKiBzaW5BbmdsZTtcbiAgICBjb25zdCB5MSA9IChwb2ludFsxXSAtIGNlbnRlclsxXSkgKiBjb3NBbmdsZSAtIChwb2ludFswXSAtIGNlbnRlclswXSkgKiBzaW5BbmdsZTtcblxuICAgIHJldHVybiAoeDEgKiB4MSkgLyAocnggKiByeCkgKyAoeTEgKiB5MSkgLyAocnkgKiByeSkgPD0gMTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1BvaW50SW5Sb3VuZFJlY3RhbmdsZSA9IChwb2ludDogUG9pbnQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCByYWRpdXM6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHsgeDogcmVjdFgsIHk6IHJlY3RZLCB3aWR0aCwgaGVpZ2h0IH0gPSByZWN0YW5nbGU7XG4gICAgY29uc3QgaXNJblJlY3RhbmdsZSA9IHBvaW50WzBdID49IHJlY3RYICYmIHBvaW50WzBdIDw9IHJlY3RYICsgd2lkdGggJiYgcG9pbnRbMV0gPj0gcmVjdFkgJiYgcG9pbnRbMV0gPD0gcmVjdFkgKyBoZWlnaHQ7XG4gICAgY29uc3QgaGFuZGxlTGVmdFRvcCA9XG4gICAgICAgIHBvaW50WzBdID49IHJlY3RYICYmXG4gICAgICAgIHBvaW50WzBdIDw9IHJlY3RYICsgcmFkaXVzICYmXG4gICAgICAgIHBvaW50WzFdID49IHJlY3RZICYmXG4gICAgICAgIHBvaW50WzFdIDw9IHJlY3RZICsgcmFkaXVzICYmXG4gICAgICAgIE1hdGguaHlwb3QocG9pbnRbMF0gLSAocmVjdFggKyByYWRpdXMpLCBwb2ludFsxXSAtIChyZWN0WSArIHJhZGl1cykpID4gcmFkaXVzO1xuICAgIGNvbnN0IGhhbmRsZUxlZnRCb3R0b20gPVxuICAgICAgICBwb2ludFswXSA+PSByZWN0WCAmJlxuICAgICAgICBwb2ludFswXSA8PSByZWN0WCArIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFsxXSA+PSByZWN0WSArIGhlaWdodCAmJlxuICAgICAgICBwb2ludFsxXSA8PSByZWN0WSArIGhlaWdodCAtIHJhZGl1cyAmJlxuICAgICAgICBNYXRoLmh5cG90KHBvaW50WzBdIC0gKHJlY3RYICsgcmFkaXVzKSwgcG9pbnRbMV0gLSAocmVjdFkgKyBoZWlnaHQgLSByYWRpdXMpKSA+IHJhZGl1cztcbiAgICBjb25zdCBoYW5kbGVSaWdodFRvcCA9XG4gICAgICAgIHBvaW50WzBdID49IHJlY3RYICsgd2lkdGggLSByYWRpdXMgJiZcbiAgICAgICAgcG9pbnRbMF0gPD0gcmVjdFggKyB3aWR0aCAmJlxuICAgICAgICBwb2ludFsxXSA+PSByZWN0WSAmJlxuICAgICAgICBwb2ludFsxXSA8PSByZWN0WSArIHJhZGl1cyAmJlxuICAgICAgICBNYXRoLmh5cG90KHBvaW50WzBdIC0gKHJlY3RYICsgd2lkdGggLSByYWRpdXMpLCBwb2ludFsxXSAtIChyZWN0WSArIHJhZGl1cykpID4gcmFkaXVzO1xuICAgIGNvbnN0IGhhbmRsZVJpZ2h0Qm90dG9tID1cbiAgICAgICAgcG9pbnRbMF0gPj0gcmVjdFggKyB3aWR0aCAtIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFswXSA8PSByZWN0WCArIHdpZHRoICYmXG4gICAgICAgIHBvaW50WzFdID49IHJlY3RZICsgaGVpZ2h0IC0gcmFkaXVzICYmXG4gICAgICAgIHBvaW50WzFdIDw9IHJlY3RZICsgaGVpZ2h0ICYmXG4gICAgICAgIE1hdGguaHlwb3QocG9pbnRbMF0gLSAocmVjdFggKyB3aWR0aCAtIHJhZGl1cyksIHBvaW50WzFdIC0gKHJlY3RZICsgaGVpZ2h0IC0gcmFkaXVzKSkgPiByYWRpdXM7XG4gICAgY29uc3QgaXNJbkNvcm5lciA9IGhhbmRsZUxlZnRUb3AgfHwgaGFuZGxlTGVmdEJvdHRvbSB8fCBoYW5kbGVSaWdodFRvcCB8fCBoYW5kbGVSaWdodEJvdHRvbTtcblxuICAgIHJldHVybiBpc0luUmVjdGFuZ2xlICYmICFpc0luQ29ybmVyO1xufTtcblxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vbmljaG9sYXN3bWluL2MyNjYxZWIxMWNhZDU2NzFkODE2XG5leHBvcnQgY29uc3QgY2F0bXVsbFJvbUZpdHRpbmcgPSBmdW5jdGlvbihwb2ludHM6IFBvaW50W10pIHtcbiAgICBjb25zdCBhbHBoYSA9IDAuNTtcbiAgICBsZXQgcDAsIHAxLCBwMiwgcDMsIGJwMSwgYnAyLCBkMSwgZDIsIGQzLCBBLCBCLCBOLCBNO1xuICAgIHZhciBkM3Bvd0EsIGQycG93QSwgZDNwb3cyQSwgZDJwb3cyQSwgZDFwb3cyQSwgZDFwb3dBO1xuICAgIGNvbnN0IHJlc3VsdDogUG9pbnRbXSA9IFtdO1xuICAgIHJlc3VsdC5wdXNoKFtNYXRoLnJvdW5kKHBvaW50c1swXVswXSksIE1hdGgucm91bmQocG9pbnRzWzBdWzFdKV0pO1xuICAgIHZhciBsZW5ndGggPSBwb2ludHMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIHAwID0gaSA9PSAwID8gcG9pbnRzWzBdIDogcG9pbnRzW2kgLSAxXTtcbiAgICAgICAgcDEgPSBwb2ludHNbaV07XG4gICAgICAgIHAyID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgcDMgPSBpICsgMiA8IGxlbmd0aCA/IHBvaW50c1tpICsgMl0gOiBwMjtcblxuICAgICAgICBkMSA9IE1hdGguc3FydChNYXRoLnBvdyhwMFswXSAtIHAxWzBdLCAyKSArIE1hdGgucG93KHAwWzFdIC0gcDFbMV0sIDIpKTtcbiAgICAgICAgZDIgPSBNYXRoLnNxcnQoTWF0aC5wb3cocDFbMF0gLSBwMlswXSwgMikgKyBNYXRoLnBvdyhwMVsxXSAtIHAyWzFdLCAyKSk7XG4gICAgICAgIGQzID0gTWF0aC5zcXJ0KE1hdGgucG93KHAyWzBdIC0gcDNbMF0sIDIpICsgTWF0aC5wb3cocDJbMV0gLSBwM1sxXSwgMikpO1xuXG4gICAgICAgIC8vIENhdG11bGwtUm9tIHRvIEN1YmljIEJlemllciBjb252ZXJzaW9uIG1hdHJpeFxuICAgICAgICAvLyBBID0gMmQxXjJhICsgM2QxXmEgKiBkMl5hICsgZDNeMmFcbiAgICAgICAgLy8gQiA9IDJkM14yYSArIDNkM15hICogZDJeYSArIGQyXjJhXG4gICAgICAgIC8vIFsgICAwICAgICAgICAgICAgIDEgICAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgXVxuICAgICAgICAvLyBbICAgLWQyXjJhIC9OICAgICBBL04gICAgICAgICAgZDFeMmEgL04gICAwICAgICAgICAgIF1cbiAgICAgICAgLy8gWyAgIDAgICAgICAgICAgICAgZDNeMmEgL00gICAgIEIvTSAgICAgICAgLWQyXjJhIC9NICBdXG4gICAgICAgIC8vIFsgICAwICAgICAgICAgICAgIDAgICAgICAgICAgICAxICAgICAgICAgIDAgICAgICAgICAgXVxuXG4gICAgICAgIGQzcG93QSA9IE1hdGgucG93KGQzLCBhbHBoYSk7XG4gICAgICAgIGQzcG93MkEgPSBNYXRoLnBvdyhkMywgMiAqIGFscGhhKTtcbiAgICAgICAgZDJwb3dBID0gTWF0aC5wb3coZDIsIGFscGhhKTtcbiAgICAgICAgZDJwb3cyQSA9IE1hdGgucG93KGQyLCAyICogYWxwaGEpO1xuICAgICAgICBkMXBvd0EgPSBNYXRoLnBvdyhkMSwgYWxwaGEpO1xuICAgICAgICBkMXBvdzJBID0gTWF0aC5wb3coZDEsIDIgKiBhbHBoYSk7XG5cbiAgICAgICAgQSA9IDIgKiBkMXBvdzJBICsgMyAqIGQxcG93QSAqIGQycG93QSArIGQycG93MkE7XG4gICAgICAgIEIgPSAyICogZDNwb3cyQSArIDMgKiBkM3Bvd0EgKiBkMnBvd0EgKyBkMnBvdzJBO1xuICAgICAgICBOID0gMyAqIGQxcG93QSAqIChkMXBvd0EgKyBkMnBvd0EpO1xuICAgICAgICBpZiAoTiA+IDApIHtcbiAgICAgICAgICAgIE4gPSAxIC8gTjtcbiAgICAgICAgfVxuICAgICAgICBNID0gMyAqIGQzcG93QSAqIChkM3Bvd0EgKyBkMnBvd0EpO1xuICAgICAgICBpZiAoTSA+IDApIHtcbiAgICAgICAgICAgIE0gPSAxIC8gTTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJwMSA9IFsoLWQycG93MkEgKiBwMFswXSArIEEgKiBwMVswXSArIGQxcG93MkEgKiBwMlswXSkgKiBOLCAoLWQycG93MkEgKiBwMFsxXSArIEEgKiBwMVsxXSArIGQxcG93MkEgKiBwMlsxXSkgKiBOXTtcbiAgICAgICAgYnAyID0gWyhkM3BvdzJBICogcDFbMF0gKyBCICogcDJbMF0gLSBkMnBvdzJBICogcDNbMF0pICogTSwgKGQzcG93MkEgKiBwMVsxXSArIEIgKiBwMlsxXSAtIGQycG93MkEgKiBwM1sxXSkgKiBNXTtcblxuICAgICAgICBpZiAoYnAxWzBdID09IDAgJiYgYnAxWzFdID09IDApIHtcbiAgICAgICAgICAgIGJwMSA9IHAxO1xuICAgICAgICB9XG4gICAgICAgIGlmIChicDJbMF0gPT0gMCAmJiBicDJbMV0gPT0gMCkge1xuICAgICAgICAgICAgYnAyID0gcDI7XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQucHVzaChicDEgYXMgUG9pbnQsIGJwMiBhcyBQb2ludCwgcDIgYXMgUG9pbnQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIHRoZSByZXN1bHQgb2Ygc2xvcGUgaXMgYmFzZWQgb24gQ2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtXG4gKiB4LCB5IGFyZSBiYXNlZCBvbiB0aGUgcG9zaXRpb24gaW4gdGhlIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxsaXBzZVRhbmdlbnRTbG9wZSh4OiBudW1iZXIsIHk6IG51bWJlciwgYTogbnVtYmVyLCBiOiBudW1iZXIpIHtcbiAgICBpZiAoTWF0aC5hYnMoeSkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHggPiAwID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gICAgfVxuICAgIGNvbnN0IGsgPSAoLWIgKiBiICogeCkgLyAoYSAqIGEgKiB5KTtcbiAgICByZXR1cm4gaztcbn1cblxuLyoqXG4gKiB4LCB5IGFyZSBiYXNlZCBvbiB0aGUgcG9zaXRpb24gaW4gdGhlIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVjdG9yRnJvbVBvaW50QW5kU2xvcGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHNsb3BlOiBudW1iZXIpIHtcbiAgICBpZiAoc2xvcGUgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiBbMCwgLTFdIGFzIFBvaW50O1xuICAgIH0gZWxzZSBpZiAoc2xvcGUgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gWzAsIDFdIGFzIFBvaW50O1xuICAgIH1cbiAgICBsZXQgdmVjdG9yID0gWzEsIC1zbG9wZV0gYXMgUG9pbnQ7XG4gICAgaWYgKHkgPCAwKSB7XG4gICAgICAgIHZlY3RvciA9IFstdmVjdG9yWzBdLCAtdmVjdG9yWzFdXTtcbiAgICB9XG4gICAgcmV0dXJuIHZlY3RvciBhcyBQb2ludDtcbn1cblxuLyoqXG4gKiBUaGUgRE9NIGxpa2VzIHZhbHVlcyB0byBiZSBmaXhlZCB0byAzIGRlY2ltYWwgcGxhY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0RvbVByZWNpc2lvbih2OiBudW1iZXIpIHtcblx0cmV0dXJuICt2LnRvRml4ZWQoNClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvRml4ZWQodjogbnVtYmVyKSB7XG5cdHJldHVybiArdi50b0ZpeGVkKDIpXG59Il19
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWpFLDZDQUE2QztBQUM3QyxNQUFNLFVBQVUsOEJBQThCLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVO0lBQy9HLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNmLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtRQUNqQiwyQkFBMkI7UUFDM0IsS0FBSyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUM7S0FDM0I7SUFFRCxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDWCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7UUFDWCxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1IsRUFBRSxHQUFHLEVBQUUsQ0FBQztLQUNYO1NBQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1FBQ2xCLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDUixFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQ1g7U0FBTTtRQUNILEVBQUUsR0FBRyxFQUFFLEdB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R0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBUSxFQUFFLENBQVEsRUFBRSxDQUFRLEVBQUUsQ0FBUSxFQUFXLEVBQUU7SUFDN0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFTLEVBQUUsRUFBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0UsTUFBTSxFQUFFLEdBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxNQUFNLEVBQUUsR0FBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sRUFBRSxHQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0MsTUFBTSxFQUFFLEdBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FB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LENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXpDLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhFLGdEQUFnRDtRQUNoRCxvQ0FBb0M7UUFDcEMsb0NBQW9DO1FBQ3BDLHlEQUF5RDtRQUN6RCx5REFBeUQ7UUFDekQseURBQXlEO1FBQ3pELHlEQUF5RDtRQUV6RCxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0IsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUVsQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDaEQsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO1FBQ2hELENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNQLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2I7UUFDRCxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDUCxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNiO1FBRUQsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25ILEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWpILElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLEdBQUcsR0FBRyxFQUFFLENBQUM7U0FDWjtRQUNELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLEdBQUcsR0FBRyxFQUFFLENBQUM7U0FDWjtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBWSxFQUFFLEdBQVksRUFBRSxFQUFXLENBQUMsQ0FBQztLQUN4RDtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTO0lBQzdFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0tBQ3ZDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsS0FBYTtJQUMxRSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDcEIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBVSxDQUFDO0tBQzNCO1NBQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUU7UUFDNUIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQVUsQ0FBQztLQUMxQjtJQUNELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFVLENBQUM7SUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ1AsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQztJQUNELE9BQU8sTUFBZSxDQUFDO0FBQzNCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBUztJQUNwQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxDQUFTO0lBQzdCLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZWN0YW5nbGUtY2xpZW50JztcblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzY4NTM5MjYvMjMyMTIyXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHg6IG51bWJlciwgeTogbnVtYmVyLCB4MTogbnVtYmVyLCB5MTogbnVtYmVyLCB4MjogbnVtYmVyLCB5MjogbnVtYmVyKSB7XG4gICAgY29uc3QgQSA9IHggLSB4MTtcbiAgICBjb25zdCBCID0geSAtIHkxO1xuICAgIGNvbnN0IEMgPSB4MiAtIHgxO1xuICAgIGNvbnN0IEQgPSB5MiAtIHkxO1xuXG4gICAgY29uc3QgZG90ID0gQSAqIEMgKyBCICogRDtcbiAgICBjb25zdCBsZW5TcXVhcmUgPSBDICogQyArIEQgKiBEO1xuICAgIGxldCBwYXJhbSA9IC0xO1xuICAgIGlmIChsZW5TcXVhcmUgIT09IDApIHtcbiAgICAgICAgLy8gaW4gY2FzZSBvZiAwIGxlbmd0aCBsaW5lXG4gICAgICAgIHBhcmFtID0gZG90IC8gbGVuU3F1YXJlO1xuICAgIH1cblxuICAgIGxldCB4eCwgeXk7XG4gICAgaWYgKHBhcmFtIDwgMCkge1xuICAgICAgICB4eCA9IHgxO1xuICAgICAgICB5eSA9IHkxO1xuICAgIH0gZWxzZSBpZiAocGFyYW0gPiAxKSB7XG4gICAgICAgIHh4ID0geDI7XG4gICAgICAgIHl5ID0geTI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgeHggPSB4MSArIHBhcmFtICogQztcbiAgICAgICAgeXkgPSB5MSArIHBhcmFtICogRDtcbiAgICB9XG5cbiAgICBjb25zdCBkeCA9IHggLSB4eDtcbiAgICBjb25zdCBkeSA9IHkgLSB5eTtcbiAgICByZXR1cm4gTWF0aC5oeXBvdChkeCwgZHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudChwb2ludDogUG9pbnQsIGxpbmVQb2ludHM6IFtQb2ludCwgUG9pbnRdKSB7XG4gICAgY29uc3QgeCA9IHBvaW50WzBdLFxuICAgICAgICB5ID0gcG9pbnRbMV0sXG4gICAgICAgIHgxID0gbGluZVBvaW50c1swXVswXSxcbiAgICAgICAgeTEgPSBsaW5lUG9pbnRzWzBdWzFdLFxuICAgICAgICB4MiA9IGxpbmVQb2ludHNbMV1bMF0sXG4gICAgICAgIHkyID0gbGluZVBvaW50c1sxXVsxXTtcbiAgICBjb25zdCBBID0geCAtIHgxO1xuICAgIGNvbnN0IEIgPSB5IC0geTE7XG4gICAgY29uc3QgQyA9IHgyIC0geDE7XG4gICAgY29uc3QgRCA9IHkyIC0geTE7XG5cbiAgICBjb25zdCBkb3QgPSBBICogQyArIEIgKiBEO1xuICAgIGNvbnN0IGxlblNxdWFyZSA9IEMgKiBDICsgRCAqIEQ7XG4gICAgbGV0IHBhcmFtID0gLTE7XG4gICAgaWYgKGxlblNxdWFyZSAhPT0gMCkge1xuICAgICAgICAvLyBpbiBjYXNlIG9mIDAgbGVuZ3RoIGxpbmVcbiAgICAgICAgcGFyYW0gPSBkb3QgLyBsZW5TcXVhcmU7XG4gICAgfVxuXG4gICAgbGV0IHh4LCB5eTtcbiAgICBpZiAocGFyYW0gPCAwKSB7XG4gICAgICAgIHh4ID0geDE7XG4gICAgICAgIHl5ID0geTE7XG4gICAgfSBlbHNlIGlmIChwYXJhbSA+IDEpIHtcbiAgICAgICAgeHggPSB4MjtcbiAgICAgICAgeXkgPSB5MjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB4eCA9IHgxICsgcGFyYW0gKiBDO1xuICAgICAgICB5eSA9IHkxICsgcGFyYW0gKiBEO1xuICAgIH1cblxuICAgIHJldHVybiBbeHgsIHl5XSBhcyBQb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnRzOiBQb2ludFtdLCBwb2ludDogUG9pbnQpIHtcbiAgICBjb25zdCBsZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCBkaXN0YW5jZSA9IEluZmluaXR5O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAgPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IHAyID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudERpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHBvaW50WzBdLCBwb2ludFsxXSwgcFswXSwgcFsxXSwgcDJbMF0sIHAyWzFdKTtcbiAgICAgICAgaWYgKGN1cnJlbnREaXN0YW5jZSA8IGRpc3RhbmNlKSB7XG4gICAgICAgICAgICBkaXN0YW5jZSA9IGN1cnJlbnREaXN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlzdGFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludDogUG9pbnQsIHBvaW50czogUG9pbnRbXSwgaXNDbG9zZTogQm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBsZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGxldCBkaXN0YW5jZSA9IEluZmluaXR5O1xuICAgIGxldCByZXN1bHQ6IFBvaW50ID0gcG9pbnQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHAgPSBwb2ludHNbaV07XG4gICAgICAgIGlmIChpID09PSBsZW4gLSAxICYmICFpc0Nsb3NlKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgcDIgPSBpID09PSBsZW4gLSAxID8gcG9pbnRzWzBdIDogcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudERpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50KHBvaW50WzBdLCBwb2ludFsxXSwgcFswXSwgcFsxXSwgcDJbMF0sIHAyWzFdKTtcbiAgICAgICAgaWYgKGN1cnJlbnREaXN0YW5jZSA8IGRpc3RhbmNlKSB7XG4gICAgICAgICAgICBkaXN0YW5jZSA9IGN1cnJlbnREaXN0YW5jZTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnQocG9pbnQsIFtwLCBwMl0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGUoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlciwgYW5nbGU6IG51bWJlcikge1xuICAgIC8vIPCdkY7igLLwnZGlPSjwnZGO8J2RpeKIkvCdkZDwnZGlKWNvc/CdnIPiiJIo8J2RjvCdkabiiJLwnZGQ8J2RpilzaW7wnZyDK/CdkZDwnZGlXG4gICAgLy8g8J2RjuKAsvCdkaY9KPCdkY7wnZGl4oiS8J2RkPCdkaUpc2lu8J2cgyso8J2RjvCdkabiiJLwnZGQ8J2Rpiljb3PwnZyDK/CdkZDwnZGmLlxuICAgIC8vIGh0dHBzOi8vbWF0aC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMjIwNDUyMC9ob3ctZG8taS1yb3RhdGUtYS1saW5lLXNlZ21lbnQtaW4tYS1zcGVjaWZpYy1wb2ludC1vbi10aGUtbGluZVxuICAgIHJldHVybiBbKHgxIC0geDIpICogTWF0aC5jb3MoYW5nbGUpIC0gKHkxIC0geTIpICogTWF0aC5zaW4oYW5nbGUpICsgeDIsICh4MSAtIHgyKSAqIE1hdGguc2luKGFuZ2xlKSArICh5MSAtIHkyKSAqIE1hdGguY29zKGFuZ2xlKSArIHkyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoeDE6IG51bWJlciwgeTE6IG51bWJlciwgeDI6IG51bWJlciwgeTI6IG51bWJlcikge1xuICAgIGNvbnN0IGR4ID0geDEgLSB4MjtcbiAgICBjb25zdCBkeSA9IHkxIC0geTI7XG4gICAgcmV0dXJuIE1hdGguaHlwb3QoZHgsIGR5KTtcbn1cblxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTI1NDgzOC9jYWxjdWxhdGluZy1kaXN0YW5jZS1iZXR3ZWVuLWEtcG9pbnQtYW5kLWEtcmVjdGFuZ3VsYXItYm94LW5lYXJlc3QtcG9pbnRcbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFJlY3RhbmdsZSh4OiBudW1iZXIsIHk6IG51bWJlciwgcmVjdDogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgdmFyIGR4ID0gTWF0aC5tYXgocmVjdC54IC0geCwgMCwgeCAtIChyZWN0LnggKyByZWN0LndpZHRoKSk7XG4gICAgdmFyIGR5ID0gTWF0aC5tYXgocmVjdC55IC0geSwgMCwgeSAtIChyZWN0LnkgKyByZWN0LmhlaWdodCkpO1xuICAgIHJldHVybiBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xufVxuXG5leHBvcnQgY29uc3QgaXNMaW5lSGl0TGluZSA9IChhOiBQb2ludCwgYjogUG9pbnQsIGM6IFBvaW50LCBkOiBQb2ludCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGNyb3NzUHJvZHVjdCA9ICh2MTogUG9pbnQsIHYyOiBQb2ludCkgPT4gdjFbMF0gKiB2MlsxXSAtIHYxWzFdICogdjJbMF07XG5cbiAgICBjb25zdCBhYjogUG9pbnQgPSBbYlswXSAtIGFbMF0sIGJbMV0gLSBhWzFdXTtcbiAgICBjb25zdCBhYzogUG9pbnQgPSBbY1swXSAtIGFbMF0sIGNbMV0gLSBhWzFdXTtcbiAgICBjb25zdCBhZDogUG9pbnQgPSBbZFswXSAtIGFbMF0sIGRbMV0gLSBhWzFdXTtcblxuICAgIGNvbnN0IGNhOiBQb2ludCA9IFthWzBdIC0gY1swXSwgYVsxXSAtIGNbMV1dO1xuICAgIGNvbnN0IGNiOiBQb2ludCA9IFtiWzBdIC0gY1swXSwgYlsxXSAtIGNbMV1dO1xuICAgIGNvbnN0IGNkOiBQb2ludCA9IFtkWzBdIC0gY1swXSwgZFsxXSAtIGNbMV1dO1xuXG4gICAgcmV0dXJuIGNyb3NzUHJvZHVjdChhYiwgYWMpICogY3Jvc3NQcm9kdWN0KGFiLCBhZCkgPD0gMCAmJiBjcm9zc1Byb2R1Y3QoY2QsIGNhKSAqIGNyb3NzUHJvZHVjdChjZCwgY2IpIDw9IDA7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQb2x5bGluZUhpdFJlY3RhbmdsZSA9IChwb2ludHM6IFBvaW50W10sIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBpc0Nsb3NlOiBib29sZWFuID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IHJlY3RhbmdsZVBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICBjb25zdCBsZW4gPSBwb2ludHMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPT09IGxlbiAtIDEgJiYgIWlzQ2xvc2UpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBwMSA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgcDIgPSBwb2ludHNbKGkgKyAxKSAlIGxlbl07XG4gICAgICAgIGNvbnN0IGlzSGl0ID1cbiAgICAgICAgICAgIGlzTGluZUhpdExpbmUocDEsIHAyLCByZWN0YW5nbGVQb2ludHNbMF0sIHJlY3RhbmdsZVBvaW50c1sxXSkgfHxcbiAgICAgICAgICAgIGlzTGluZUhpdExpbmUocDEsIHAyLCByZWN0YW5nbGVQb2ludHNbMV0sIHJlY3RhbmdsZVBvaW50c1syXSkgfHxcbiAgICAgICAgICAgIGlzTGluZUhpdExpbmUocDEsIHAyLCByZWN0YW5nbGVQb2ludHNbMl0sIHJlY3RhbmdsZVBvaW50c1szXSkgfHxcbiAgICAgICAgICAgIGlzTGluZUhpdExpbmUocDEsIHAyLCByZWN0YW5nbGVQb2ludHNbM10sIHJlY3RhbmdsZVBvaW50c1swXSk7XG4gICAgICAgIGlmIChpc0hpdCB8fCBpc1BvaW50SW5Qb2x5Z29uKHAxLCByZWN0YW5nbGVQb2ludHMpIHx8IGlzUG9pbnRJblBvbHlnb24ocDIsIHJlY3RhbmdsZVBvaW50cykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy9odHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMjUyMTk4Mi9jaGVjay1pZi1wb2ludC1pcy1pbnNpZGUtYS1wb2x5Z29uXG5leHBvcnQgY29uc3QgaXNQb2ludEluUG9seWdvbiA9IChwb2ludDogUG9pbnQsIHBvaW50czogUG9pbnRbXSkgPT4ge1xuICAgIC8vIHJheS1jYXN0aW5nIGFsZ29yaXRobSBiYXNlZCBvblxuICAgIC8vIGh0dHBzOi8vd3JmLmVjc2UucnBpLmVkdS9SZXNlYXJjaC9TaG9ydF9Ob3Rlcy9wbnBvbHkuaHRtbFxuXG4gICAgY29uc3QgeCA9IHBvaW50WzBdLFxuICAgICAgICB5ID0gcG9pbnRbMV07XG5cbiAgICBsZXQgaW5zaWRlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBwb2ludHMubGVuZ3RoIC0gMTsgaSA8IHBvaW50cy5sZW5ndGg7IGogPSBpKyspIHtcbiAgICAgICAgbGV0IHhpID0gcG9pbnRzW2ldWzBdLFxuICAgICAgICAgICAgeWkgPSBwb2ludHNbaV1bMV07XG4gICAgICAgIGxldCB4aiA9IHBvaW50c1tqXVswXSxcbiAgICAgICAgICAgIHlqID0gcG9pbnRzW2pdWzFdO1xuXG4gICAgICAgIGxldCBpbnRlcnNlY3QgPSB5aSA+IHkgIT0geWogPiB5ICYmIHggPCAoKHhqIC0geGkpICogKHkgLSB5aSkpIC8gKHlqIC0geWkpICsgeGk7XG4gICAgICAgIGlmIChpbnRlcnNlY3QpIGluc2lkZSA9ICFpbnNpZGU7XG4gICAgfVxuICAgIHJldHVybiBpbnNpZGU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNQb2ludEluRWxsaXBzZSA9IChwb2ludDogUG9pbnQsIGNlbnRlcjogUG9pbnQsIHJ4OiBudW1iZXIsIHJ5OiBudW1iZXIsIGFuZ2xlID0gMCkgPT4ge1xuICAgIGNvbnN0IGNvc0FuZ2xlID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIGNvbnN0IHNpbkFuZ2xlID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgIGNvbnN0IHgxID0gKHBvaW50WzBdIC0gY2VudGVyWzBdKSAqIGNvc0FuZ2xlICsgKHBvaW50WzFdIC0gY2VudGVyWzFdKSAqIHNpbkFuZ2xlO1xuICAgIGNvbnN0IHkxID0gKHBvaW50WzFdIC0gY2VudGVyWzFdKSAqIGNvc0FuZ2xlIC0gKHBvaW50WzBdIC0gY2VudGVyWzBdKSAqIHNpbkFuZ2xlO1xuXG4gICAgcmV0dXJuICh4MSAqIHgxKSAvIChyeCAqIHJ4KSArICh5MSAqIHkxKSAvIChyeSAqIHJ5KSA8PSAxO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUG9pbnRJblJvdW5kUmVjdGFuZ2xlID0gKHBvaW50OiBQb2ludCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJhZGl1czogbnVtYmVyLCBhbmdsZSA9IDApID0+IHtcbiAgICBjb25zdCB7IHg6IHJlY3RYLCB5OiByZWN0WSwgd2lkdGgsIGhlaWdodCB9ID0gcmVjdGFuZ2xlO1xuICAgIGNvbnN0IGlzSW5SZWN0YW5nbGUgPSBwb2ludFswXSA+PSByZWN0WCAmJiBwb2ludFswXSA8PSByZWN0WCArIHdpZHRoICYmIHBvaW50WzFdID49IHJlY3RZICYmIHBvaW50WzFdIDw9IHJlY3RZICsgaGVpZ2h0O1xuICAgIGNvbnN0IGhhbmRsZUxlZnRUb3AgPVxuICAgICAgICBwb2ludFswXSA+PSByZWN0WCAmJlxuICAgICAgICBwb2ludFswXSA8PSByZWN0WCArIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFsxXSA+PSByZWN0WSAmJlxuICAgICAgICBwb2ludFsxXSA8PSByZWN0WSArIHJhZGl1cyAmJlxuICAgICAgICBNYXRoLmh5cG90KHBvaW50WzBdIC0gKHJlY3RYICsgcmFkaXVzKSwgcG9pbnRbMV0gLSAocmVjdFkgKyByYWRpdXMpKSA+IHJhZGl1cztcbiAgICBjb25zdCBoYW5kbGVMZWZ0Qm90dG9tID1cbiAgICAgICAgcG9pbnRbMF0gPj0gcmVjdFggJiZcbiAgICAgICAgcG9pbnRbMF0gPD0gcmVjdFggKyByYWRpdXMgJiZcbiAgICAgICAgcG9pbnRbMV0gPj0gcmVjdFkgKyBoZWlnaHQgJiZcbiAgICAgICAgcG9pbnRbMV0gPD0gcmVjdFkgKyBoZWlnaHQgLSByYWRpdXMgJiZcbiAgICAgICAgTWF0aC5oeXBvdChwb2ludFswXSAtIChyZWN0WCArIHJhZGl1cyksIHBvaW50WzFdIC0gKHJlY3RZICsgaGVpZ2h0IC0gcmFkaXVzKSkgPiByYWRpdXM7XG4gICAgY29uc3QgaGFuZGxlUmlnaHRUb3AgPVxuICAgICAgICBwb2ludFswXSA+PSByZWN0WCArIHdpZHRoIC0gcmFkaXVzICYmXG4gICAgICAgIHBvaW50WzBdIDw9IHJlY3RYICsgd2lkdGggJiZcbiAgICAgICAgcG9pbnRbMV0gPj0gcmVjdFkgJiZcbiAgICAgICAgcG9pbnRbMV0gPD0gcmVjdFkgKyByYWRpdXMgJiZcbiAgICAgICAgTWF0aC5oeXBvdChwb2ludFswXSAtIChyZWN0WCArIHdpZHRoIC0gcmFkaXVzKSwgcG9pbnRbMV0gLSAocmVjdFkgKyByYWRpdXMpKSA+IHJhZGl1cztcbiAgICBjb25zdCBoYW5kbGVSaWdodEJvdHRvbSA9XG4gICAgICAgIHBvaW50WzBdID49IHJlY3RYICsgd2lkdGggLSByYWRpdXMgJiZcbiAgICAgICAgcG9pbnRbMF0gPD0gcmVjdFggKyB3aWR0aCAmJlxuICAgICAgICBwb2ludFsxXSA+PSByZWN0WSArIGhlaWdodCAtIHJhZGl1cyAmJlxuICAgICAgICBwb2ludFsxXSA8PSByZWN0WSArIGhlaWdodCAmJlxuICAgICAgICBNYXRoLmh5cG90KHBvaW50WzBdIC0gKHJlY3RYICsgd2lkdGggLSByYWRpdXMpLCBwb2ludFsxXSAtIChyZWN0WSArIGhlaWdodCAtIHJhZGl1cykpID4gcmFkaXVzO1xuICAgIGNvbnN0IGlzSW5Db3JuZXIgPSBoYW5kbGVMZWZ0VG9wIHx8IGhhbmRsZUxlZnRCb3R0b20gfHwgaGFuZGxlUmlnaHRUb3AgfHwgaGFuZGxlUmlnaHRCb3R0b207XG5cbiAgICByZXR1cm4gaXNJblJlY3RhbmdsZSAmJiAhaXNJbkNvcm5lcjtcbn07XG5cbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL25pY2hvbGFzd21pbi9jMjY2MWViMTFjYWQ1NjcxZDgxNlxuZXhwb3J0IGNvbnN0IGNhdG11bGxSb21GaXR0aW5nID0gZnVuY3Rpb24ocG9pbnRzOiBQb2ludFtdKSB7XG4gICAgY29uc3QgYWxwaGEgPSAwLjU7XG4gICAgbGV0IHAwLCBwMSwgcDIsIHAzLCBicDEsIGJwMiwgZDEsIGQyLCBkMywgQSwgQiwgTiwgTTtcbiAgICB2YXIgZDNwb3dBLCBkMnBvd0EsIGQzcG93MkEsIGQycG93MkEsIGQxcG93MkEsIGQxcG93QTtcbiAgICBjb25zdCByZXN1bHQ6IFBvaW50W10gPSBbXTtcbiAgICByZXN1bHQucHVzaChbTWF0aC5yb3VuZChwb2ludHNbMF1bMF0pLCBNYXRoLnJvdW5kKHBvaW50c1swXVsxXSldKTtcbiAgICB2YXIgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBwMCA9IGkgPT0gMCA/IHBvaW50c1swXSA6IHBvaW50c1tpIC0gMV07XG4gICAgICAgIHAxID0gcG9pbnRzW2ldO1xuICAgICAgICBwMiA9IHBvaW50c1tpICsgMV07XG4gICAgICAgIHAzID0gaSArIDIgPCBsZW5ndGggPyBwb2ludHNbaSArIDJdIDogcDI7XG5cbiAgICAgICAgZDEgPSBNYXRoLnNxcnQoTWF0aC5wb3cocDBbMF0gLSBwMVswXSwgMikgKyBNYXRoLnBvdyhwMFsxXSAtIHAxWzFdLCAyKSk7XG4gICAgICAgIGQyID0gTWF0aC5zcXJ0KE1hdGgucG93KHAxWzBdIC0gcDJbMF0sIDIpICsgTWF0aC5wb3cocDFbMV0gLSBwMlsxXSwgMikpO1xuICAgICAgICBkMyA9IE1hdGguc3FydChNYXRoLnBvdyhwMlswXSAtIHAzWzBdLCAyKSArIE1hdGgucG93KHAyWzFdIC0gcDNbMV0sIDIpKTtcblxuICAgICAgICAvLyBDYXRtdWxsLVJvbSB0byBDdWJpYyBCZXppZXIgY29udmVyc2lvbiBtYXRyaXhcbiAgICAgICAgLy8gQSA9IDJkMV4yYSArIDNkMV5hICogZDJeYSArIGQzXjJhXG4gICAgICAgIC8vIEIgPSAyZDNeMmEgKyAzZDNeYSAqIGQyXmEgKyBkMl4yYVxuICAgICAgICAvLyBbICAgMCAgICAgICAgICAgICAxICAgICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAgIF1cbiAgICAgICAgLy8gWyAgIC1kMl4yYSAvTiAgICAgQS9OICAgICAgICAgIGQxXjJhIC9OICAgMCAgICAgICAgICBdXG4gICAgICAgIC8vIFsgICAwICAgICAgICAgICAgIGQzXjJhIC9NICAgICBCL00gICAgICAgIC1kMl4yYSAvTSAgXVxuICAgICAgICAvLyBbICAgMCAgICAgICAgICAgICAwICAgICAgICAgICAgMSAgICAgICAgICAwICAgICAgICAgIF1cblxuICAgICAgICBkM3Bvd0EgPSBNYXRoLnBvdyhkMywgYWxwaGEpO1xuICAgICAgICBkM3BvdzJBID0gTWF0aC5wb3coZDMsIDIgKiBhbHBoYSk7XG4gICAgICAgIGQycG93QSA9IE1hdGgucG93KGQyLCBhbHBoYSk7XG4gICAgICAgIGQycG93MkEgPSBNYXRoLnBvdyhkMiwgMiAqIGFscGhhKTtcbiAgICAgICAgZDFwb3dBID0gTWF0aC5wb3coZDEsIGFscGhhKTtcbiAgICAgICAgZDFwb3cyQSA9IE1hdGgucG93KGQxLCAyICogYWxwaGEpO1xuXG4gICAgICAgIEEgPSAyICogZDFwb3cyQSArIDMgKiBkMXBvd0EgKiBkMnBvd0EgKyBkMnBvdzJBO1xuICAgICAgICBCID0gMiAqIGQzcG93MkEgKyAzICogZDNwb3dBICogZDJwb3dBICsgZDJwb3cyQTtcbiAgICAgICAgTiA9IDMgKiBkMXBvd0EgKiAoZDFwb3dBICsgZDJwb3dBKTtcbiAgICAgICAgaWYgKE4gPiAwKSB7XG4gICAgICAgICAgICBOID0gMSAvIE47XG4gICAgICAgIH1cbiAgICAgICAgTSA9IDMgKiBkM3Bvd0EgKiAoZDNwb3dBICsgZDJwb3dBKTtcbiAgICAgICAgaWYgKE0gPiAwKSB7XG4gICAgICAgICAgICBNID0gMSAvIE07XG4gICAgICAgIH1cblxuICAgICAgICBicDEgPSBbKC1kMnBvdzJBICogcDBbMF0gKyBBICogcDFbMF0gKyBkMXBvdzJBICogcDJbMF0pICogTiwgKC1kMnBvdzJBICogcDBbMV0gKyBBICogcDFbMV0gKyBkMXBvdzJBICogcDJbMV0pICogTl07XG4gICAgICAgIGJwMiA9IFsoZDNwb3cyQSAqIHAxWzBdICsgQiAqIHAyWzBdIC0gZDJwb3cyQSAqIHAzWzBdKSAqIE0sIChkM3BvdzJBICogcDFbMV0gKyBCICogcDJbMV0gLSBkMnBvdzJBICogcDNbMV0pICogTV07XG5cbiAgICAgICAgaWYgKGJwMVswXSA9PSAwICYmIGJwMVsxXSA9PSAwKSB7XG4gICAgICAgICAgICBicDEgPSBwMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnAyWzBdID09IDAgJiYgYnAyWzFdID09IDApIHtcbiAgICAgICAgICAgIGJwMiA9IHAyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnB1c2goYnAxIGFzIFBvaW50LCBicDIgYXMgUG9pbnQsIHAyIGFzIFBvaW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiB0aGUgcmVzdWx0IG9mIHNsb3BlIGlzIGJhc2VkIG9uIENhcnRlc2lhbiBjb29yZGluYXRlIHN5c3RlbVxuICogeCwgeSBhcmUgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGluIHRoZSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVsbGlwc2VUYW5nZW50U2xvcGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIGE6IG51bWJlciwgYjogbnVtYmVyKSB7XG4gICAgaWYgKE1hdGguYWJzKHkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiB4ID4gMCA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICAgIH1cbiAgICBjb25zdCBrID0gKC1iICogYiAqIHgpIC8gKGEgKiBhICogeSk7XG4gICAgcmV0dXJuIGs7XG59XG5cbi8qKlxuICogeCwgeSBhcmUgYmFzZWQgb24gdGhlIHBvc2l0aW9uIGluIHRoZSBDYXJ0ZXNpYW4gY29vcmRpbmF0ZSBzeXN0ZW1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZlY3RvckZyb21Qb2ludEFuZFNsb3BlKHg6IG51bWJlciwgeTogbnVtYmVyLCBzbG9wZTogbnVtYmVyKSB7XG4gICAgaWYgKHNsb3BlID09PSBJbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gWzAsIC0xXSBhcyBQb2ludDtcbiAgICB9IGVsc2UgaWYgKHNsb3BlID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgcmV0dXJuIFswLCAxXSBhcyBQb2ludDtcbiAgICB9XG4gICAgbGV0IHZlY3RvciA9IFsxLCAtc2xvcGVdIGFzIFBvaW50O1xuICAgIGlmICh5IDwgMCkge1xuICAgICAgICB2ZWN0b3IgPSBbLXZlY3RvclswXSwgLXZlY3RvclsxXV07XG4gICAgfVxuICAgIHJldHVybiB2ZWN0b3IgYXMgUG9pbnQ7XG59XG5cbi8qKlxuICogVGhlIERPTSBsaWtlcyB2YWx1ZXMgdG8gYmUgZml4ZWQgdG8gMyBkZWNpbWFsIHBsYWNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Eb21QcmVjaXNpb24odjogbnVtYmVyKSB7XG4gICAgcmV0dXJuICt2LnRvRml4ZWQoNCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0ZpeGVkKHY6IG51bWJlcikge1xuICAgIHJldHVybiArdi50b0ZpeGVkKDIpO1xufVxuIl19
@@ -30,8 +30,8 @@ export const getHitElementsBySelection = (board, selection, match = () => true)
30
30
  return rectangleHitElements;
31
31
  };
32
32
  export const getHitElementByPoint = (board, point, match = () => true) => {
33
- let rectangleHitElement = undefined;
34
33
  let hitElement = undefined;
34
+ let hitInsideElement = undefined;
35
35
  depthFirstRecursion(board, node => {
36
36
  if (hitElement) {
37
37
  return;
@@ -43,11 +43,18 @@ export const getHitElementByPoint = (board, point, match = () => true) => {
43
43
  hitElement = node;
44
44
  return;
45
45
  }
46
- if (!rectangleHitElement && board.isRectangleHit(node, { anchor: point, focus: point })) {
47
- rectangleHitElement = node;
46
+ /**
47
+ * 需要增加场景测试
48
+ * hitInsideElement 存的是第一个符合 isInsidePoint 的元素
49
+ * 当有元素符合 isHit 时结束遍历,并返回 hitElement
50
+ * 当所有元素都不符合 isHit ,则返回第一个符合 isInsidePoint 的元素
51
+ * 这样保证最上面的元素优先被探测到;
52
+ */
53
+ if (!hitInsideElement && board.isInsidePoint(node, point)) {
54
+ hitInsideElement = node;
48
55
  }
49
56
  }, getIsRecursionFunc(board), true);
50
- return hitElement || rectangleHitElement;
57
+ return hitElement || hitInsideElement;
51
58
  };
52
59
  export const getHitSelectedElements = (board, point) => {
53
60
  const selectedElements = getSelectedElements(board);
@@ -110,4 +117,4 @@ export const temporaryDisableSelection = (board) => {
110
117
  board.setPluginOptions(PlaitPluginKey.withSelection, { ...currentOptions });
111
118
  }, 0);
112
119
  };
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0ZWQtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3NlbGVjdGVkLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHMUQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FDckMsS0FBaUIsRUFDakIsU0FBcUIsRUFDckIsUUFBNEMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUN4RCxFQUFFO0lBQ0EsTUFBTSxZQUFZLEdBQUcsU0FBUyxJQUFLLEtBQUssQ0FBQyxTQUF1QixDQUFDO0lBQ2pFLE1BQU0sb0JBQW9CLEdBQW1CLEVBQUUsQ0FBQztJQUNoRCxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2YsT0FBTyxFQUFFLENBQUM7S0FDYjtJQUNELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEQsSUFBSSxXQUFXLEVBQUU7UUFDYixNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRSxJ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QUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5RixxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztLQUNyRDtBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3RELHFCQUFxQixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBcUIsRUFBRSxFQUFFO0lBQzFFLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBd0IsRUFBRSxFQUFFO0lBQ2xFLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUUsS0FBSyxDQUFDLGdCQUFnQixDQUFvQixjQUFjLENBQUMsYUFBYSxFQUFFO1FBQ3BFLGdCQUFnQixFQUFFLElBQUk7S0FDekIsQ0FBQyxDQUFDO0lBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNaLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBb0IsY0FBYyxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBBbmNlc3RvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uLCBnZXRJc1JlY3Vyc2lvbkZ1bmMgfSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0IHsgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVCB9IGZyb20gJy4vd2Vhay1tYXBzJztcbmltcG9ydCB7IFNlbGVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0aW9uJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQnO1xuaW1wb3J0IHsgc29ydEVsZW1lbnRzIH0gZnJvbSAnLi9wb3NpdGlvbic7XG5pbXBvcnQgeyBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlY3RhbmdsZS1jbGllbnQnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdE9wdGlvbnNCb2FyZCB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1vcHRpb25zJztcbmltcG9ydCB7IFBsYWl0UGx1Z2luS2V5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wbHVnaW4ta2V5JztcbmltcG9ydCB7IFdpdGhQbHVnaW5PcHRpb25zIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLXNlbGVjdGlvbic7XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRFbGVtZW50c0J5U2VsZWN0aW9uID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIHNlbGVjdGlvbj86IFNlbGVjdGlvbixcbiAgICBtYXRjaDogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWVcbikgPT4ge1xuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHNlbGVjdGlvbiB8fCAoYm9hcmQuc2VsZWN0aW9uIGFzIFNlbGVjdGlvbik7XG4gICAgY29uc3QgcmVjdGFuZ2xlSGl0RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgaWYgKCFuZXdTZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBpc0NvbGxhcHNlZCA9IFNlbGVjdGlvbi5pc0NvbGxhcHNlZChuZXdTZWxlY3Rpb24pO1xuICAgIGlmIChpc0NvbGxhcHNlZCkge1xuICAgICAgICBjb25zdCBoaXRFbGVtZW50ID0gZ2V0SGl0RWxlbWVudEJ5UG9pbnQoYm9hcmQsIG5ld1NlbGVjdGlvbi5hbmNob3IsIG1hdGNoKTtcbiAgICAgICAgaWYgKGhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBbaGl0RWxlbWVudF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpICYmIG1hdGNoKG5vZGUpICYmIGJvYXJkLmlzUmVjdGFuZ2xlSGl0KG5vZGUsIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGVIaXRFbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRJc1JlY3Vyc2lvbkZ1bmMoYm9hcmQpLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICByZXR1cm4gcmVjdGFuZ2xlSGl0RWxlbWVudHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0RWxlbWVudEJ5UG9pbnQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcG9pbnQ6IFBvaW50LFxuICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKTogdW5kZWZpbmVkIHwgUGxhaXRFbGVtZW50ID0+IHtcbiAgICBsZXQgcmVjdGFuZ2xlSGl0RWxlbWVudDogUGxhaXRFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBoaXRFbGVtZW50OiBQbGFpdEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChoaXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCAhbWF0Y2gobm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYm9hcmQuaXNIaXQobm9kZSwgcG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgaGl0RWxlbWVudCA9IG5vZGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZWN0YW5nbGVIaXRFbGVtZW50ICYmIGJvYXJkLmlzUmVjdGFuZ2xlSGl0KG5vZGUsIHsgYW5jaG9yOiBwb2ludCwgZm9jdXM6IHBvaW50IH0pKSB7XG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlSGl0RWxlbWVudCA9IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCksXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIHJldHVybiBoaXRFbGVtZW50IHx8IHJlY3RhbmdsZUhpdEVsZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0U2VsZWN0ZWRFbGVtZW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNvbnN0IHRhcmdldFJlY3RhbmdsZSA9IHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMCAmJiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzLCBmYWxzZSk7XG4gICAgY29uc3QgaXNJblRhcmdldFJlY3RhbmdsZSA9IHRhcmdldFJlY3RhbmdsZSAmJiBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRhcmdldFJlY3RhbmdsZSwgcG9pbnQpO1xuICAgIGlmIChpc0luVGFyZ2V0UmVjdGFuZ2xlKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZEVsZW1lbnRzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2FjaGVTZWxlY3RlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHNvcnRlZEVsZW1lbnRzID0gc29ydEVsZW1lbnRzKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzKTtcbiAgICBCT0FSRF9UT19TRUxFQ1RFRF9FTEVNRU5ULnNldChib2FyZCwgc29ydGVkRWxlbWVudHMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVC5nZXQoYm9hcmQpIHx8IFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFNlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50IHwgUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBsZXQgZWxlbWVudHMgPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKC4uLmVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIFsuLi5zZWxlY3RlZEVsZW1lbnRzLCAuLi5lbGVtZW50c10pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZVNlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBpc1JlbW92ZUNoaWxkcmVuID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgaWYgKHNlbGVjdGVkRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgICAgIGlmIChib2FyZC5pc1JlY3Vyc2lvbihlbGVtZW50KSAmJiBpc1JlbW92ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBkZXB0aEZpcnN0UmVjdXJzaW9uKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBub2RlID0+IGJvYXJkLmlzUmVjdXJzaW9uKG5vZGUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdTZWxlY3RlZEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gIXRhcmdldEVsZW1lbnRzLmluY2x1ZGVzKHZhbHVlKSk7XG4gICAgICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgbmV3U2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZEVsZW1lbnRzLmZpbmQodmFsdWUgPT4gdmFsdWUgPT09IGVsZW1lbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRlbXBvcmFyeURpc2FibGVTZWxlY3Rpb24gPSAoYm9hcmQ6IFBsYWl0T3B0aW9uc0JvYXJkKSA9PiB7XG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSBib2FyZC5nZXRQbHVnaW5PcHRpb25zKFBsYWl0UGx1Z2luS2V5LndpdGhTZWxlY3Rpb24pO1xuICAgIGJvYXJkLnNldFBsdWdpbk9wdGlvbnM8V2l0aFBsdWdpbk9wdGlvbnM+KFBsYWl0UGx1Z2luS2V5LndpdGhTZWxlY3Rpb24sIHtcbiAgICAgICAgaXNEaXNhYmxlZFNlbGVjdDogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBib2FyZC5zZXRQbHVnaW5PcHRpb25zPFdpdGhQbHVnaW5PcHRpb25zPihQbGFpdFBsdWdpbktleS53aXRoU2VsZWN0aW9uLCB7IC4uLmN1cnJlbnRPcHRpb25zIH0pO1xuICAgIH0sIDApO1xufTtcbiJdfQ==
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0ZWQtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3NlbGVjdGVkLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHMUQsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FDckMsS0FBaUIsRUFDakIsU0FBcUIsRUFDckIsUUFBNEMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUN4RCxFQUFFO0lBQ0EsTUFBTSxZQUFZLEdBQUcsU0FBUyxJQUFLLEtBQUssQ0FBQyxTQUF1QixDQUFDO0lBQ2pFLE1BQU0sb0JBQW9CLEdBQW1CLEVBQUUsQ0FBQztJQUNoRCxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2YsT0FBTyxFQUFFLENBQUM7S0FDYjtJQUNELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEQsSUFBSSxXQUFXLEVBQUU7UUFDYixNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRSxJ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QUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlGLHFCQUFxQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0tBQ3JEO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDdEQscUJBQXFCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFxQixFQUFFLEVBQUU7SUFDMUUsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxLQUF3QixFQUFFLEVBQUU7SUFDbEUsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1RSxLQUFLLENBQUMsZ0JBQWdCLENBQW9CLGNBQWMsQ0FBQyxhQUFhLEVBQUU7UUFDcEUsZ0JBQWdCLEVBQUUsSUFBSTtLQUN6QixDQUFDLENBQUM7SUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ1osS0FBSyxDQUFDLGdCQUFnQixDQUFvQixjQUFjLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IEFuY2VzdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IGRlcHRoRmlyc3RSZWN1cnNpb24sIGdldElzUmVjdXJzaW9uRnVuYyB9IGZyb20gJy4vdHJlZSc7XG5pbXBvcnQgeyBCT0FSRF9UT19TRUxFQ1RFRF9FTEVNRU5UIH0gZnJvbSAnLi93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wb2ludCc7XG5pbXBvcnQgeyBzb3J0RWxlbWVudHMgfSBmcm9tICcuL3Bvc2l0aW9uJztcbmltcG9ydCB7IFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVjdGFuZ2xlLWNsaWVudCc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzIH0gZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCB7IFBsYWl0T3B0aW9uc0JvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLW9wdGlvbnMnO1xuaW1wb3J0IHsgUGxhaXRQbHVnaW5LZXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BsdWdpbi1rZXknO1xuaW1wb3J0IHsgV2l0aFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtc2VsZWN0aW9uJztcblxuZXhwb3J0IGNvbnN0IGdldEhpdEVsZW1lbnRzQnlTZWxlY3Rpb24gPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgc2VsZWN0aW9uPzogU2VsZWN0aW9uLFxuICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKSA9PiB7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gc2VsZWN0aW9uIHx8IChib2FyZC5zZWxlY3Rpb24gYXMgU2VsZWN0aW9uKTtcbiAgICBjb25zdCByZWN0YW5nbGVIaXRFbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBpZiAoIW5ld1NlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gU2VsZWN0aW9uLmlzQ29sbGFwc2VkKG5ld1NlbGVjdGlvbik7XG4gICAgaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRIaXRFbGVtZW50QnlQb2ludChib2FyZCwgbmV3U2VsZWN0aW9uLmFuY2hvciwgbWF0Y2gpO1xuICAgICAgICBpZiAoaGl0RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtoaXRFbGVtZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgJiYgbWF0Y2gobm9kZSkgJiYgYm9hcmQuaXNSZWN0YW5nbGVIaXQobm9kZSwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZUhpdEVsZW1lbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCksXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIHJldHVybiByZWN0YW5nbGVIaXRFbGVtZW50cztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRFbGVtZW50QnlQb2ludCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBwb2ludDogUG9pbnQsXG4gICAgbWF0Y2g6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlXG4pOiB1bmRlZmluZWQgfCBQbGFpdEVsZW1lbnQgPT4ge1xuICAgIGxldCBoaXRFbGVtZW50OiBQbGFpdEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGhpdEluc2lkZUVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKGhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpIHx8ICFtYXRjaChub2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChib2FyZC5pc0hpdChub2RlLCBwb2ludCkpIHtcbiAgICAgICAgICAgICAgICBoaXRFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICog6ZyA6KaB5aKe5Yqg5Zy65pmv5rWL6K+VXG4gICAgICAgICAgICAgKiBoaXRJbnNpZGVFbGVtZW50IOWtmOeahOaYr+esrOS4gOS4quespuWQiCBpc0luc2lkZVBvaW50IOeahOWFg+e0oFxuICAgICAgICAgICAgICog5b2T5pyJ5YWD57Sg56ym5ZCIIGlzSGl0IOaXtue7k+adn+mBjeWOhu+8jOW5tui/lOWbniBoaXRFbGVtZW50XG4gICAgICAgICAgICAgKiDlvZPmiYDmnInlhYPntKDpg73kuI3nrKblkIggaXNIaXQg77yM5YiZ6L+U5Zue56ys5LiA5Liq56ym5ZCIIGlzSW5zaWRlUG9pbnQg55qE5YWD57SgXG4gICAgICAgICAgICAgKiDov5nmoLfkv53or4HmnIDkuIrpnaLnmoTlhYPntKDkvJjlhYjooqvmjqLmtYvliLDvvJtcbiAgICAgICAgICAgICAqL1xuXG4gICAgICAgICAgICBpZiAoIWhpdEluc2lkZUVsZW1lbnQgJiYgYm9hcmQuaXNJbnNpZGVQb2ludChub2RlLCBwb2ludCkpIHtcbiAgICAgICAgICAgICAgICBoaXRJbnNpZGVFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SXNSZWN1cnNpb25GdW5jKGJvYXJkKSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgcmV0dXJuIGhpdEVsZW1lbnQgfHwgaGl0SW5zaWRlRWxlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRTZWxlY3RlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY29uc3QgdGFyZ2V0UmVjdGFuZ2xlID0gc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwICYmIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMsIGZhbHNlKTtcbiAgICBjb25zdCBpc0luVGFyZ2V0UmVjdGFuZ2xlID0gdGFyZ2V0UmVjdGFuZ2xlICYmIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGFyZ2V0UmVjdGFuZ2xlLCBwb2ludCk7XG4gICAgaWYgKGlzSW5UYXJnZXRSZWN0YW5nbGUpIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudHM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjYWNoZVNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc29ydGVkRWxlbWVudHMgPSBzb3J0RWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xuICAgIEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQuc2V0KGJvYXJkLCBzb3J0ZWRFbGVtZW50cyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRFbGVtZW50cyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiBCT0FSRF9UT19TRUxFQ1RFRF9FTEVNRU5ULmdldChib2FyZCkgfHwgW107XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQgfCBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGxldCBlbGVtZW50cyA9IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQpKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goLi4uZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgWy4uLnNlbGVjdGVkRWxlbWVudHMsIC4uLmVsZW1lbnRzXSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQsIGlzUmVtb3ZlQ2hpbGRyZW4gPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSkge1xuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICAgICAgaWYgKGJvYXJkLmlzUmVjdXJzaW9uKGVsZW1lbnQpICYmIGlzUmVtb3ZlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oXG4gICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudHMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5vZGUgPT4gYm9hcmQuaXNSZWN1cnNpb24obm9kZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkRWxlbWVudHMgPSBzZWxlY3RlZEVsZW1lbnRzLmZpbHRlcih2YWx1ZSA9PiAhdGFyZ2V0RWxlbWVudHMuaW5jbHVkZXModmFsdWUpKTtcbiAgICAgICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBuZXdTZWxlY3RlZEVsZW1lbnRzKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIFtdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHJldHVybiAhIXNlbGVjdGVkRWxlbWVudHMuZmluZCh2YWx1ZSA9PiB2YWx1ZSA9PT0gZWxlbWVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgdGVtcG9yYXJ5RGlzYWJsZVNlbGVjdGlvbiA9IChib2FyZDogUGxhaXRPcHRpb25zQm9hcmQpID0+IHtcbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IGJvYXJkLmdldFBsdWdpbk9wdGlvbnMoUGxhaXRQbHVnaW5LZXkud2l0aFNlbGVjdGlvbik7XG4gICAgYm9hcmQuc2V0UGx1Z2luT3B0aW9uczxXaXRoUGx1Z2luT3B0aW9ucz4oUGxhaXRQbHVnaW5LZXkud2l0aFNlbGVjdGlvbiwge1xuICAgICAgICBpc0Rpc2FibGVkU2VsZWN0OiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGJvYXJkLnNldFBsdWdpbk9wdGlvbnM8V2l0aFBsdWdpbk9wdGlvbnM+KFBsYWl0UGx1Z2luS2V5LndpdGhTZWxlY3Rpb24sIHsgLi4uY3VycmVudE9wdGlvbnMgfSk7XG4gICAgfSwgMCk7XG59O1xuIl19