@plait/draw 0.52.0-next.0 → 0.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/interfaces/line.mjs +20 -8
- package/esm2022/line.component.mjs +5 -17
- package/esm2022/plugins/with-draw-fragment.mjs +1 -1
- package/esm2022/plugins/with-draw-hotkey.mjs +9 -7
- package/esm2022/plugins/with-draw-resize.mjs +63 -9
- package/esm2022/plugins/with-draw.mjs +2 -9
- package/esm2022/plugins/with-geometry-resize.mjs +14 -4
- package/esm2022/plugins/with-line-auto-complete-reaction.mjs +6 -3
- package/esm2022/plugins/with-line-auto-complete.mjs +5 -5
- package/esm2022/plugins/with-line-bound-reaction.mjs +7 -4
- package/esm2022/plugins/with-line-resize.mjs +3 -3
- package/esm2022/utils/hit.mjs +7 -5
- package/esm2022/utils/line/elbow.mjs +12 -4
- package/esm2022/utils/line/line-basic.mjs +9 -5
- package/esm2022/utils/line/line-common.mjs +25 -13
- package/esm2022/utils/line/line-resize.mjs +6 -10
- package/esm2022/utils/position/geometry.mjs +8 -6
- package/fesm2022/plait-draw.mjs +167 -136
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/package.json +1 -1
- package/plugins/with-draw-resize.d.ts +6 -0
- package/utils/line/elbow.d.ts +3 -13
- package/utils/line/line-common.d.ts +3 -13
- package/utils/position/geometry.d.ts +2 -3
- package/esm2022/generators/group.generator.mjs +0 -20
- package/esm2022/group.component.mjs +0 -47
- package/generators/group.generator.d.ts +0 -6
- package/group.component.d.ts +0 -17
package/esm2022/utils/hit.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { RectangleClient, isPolylineHitRectangle, distanceBetweenPointAndSegments, distanceBetweenPointAndPoint, HIT_DISTANCE_BUFFER, rotate } from '@plait/core';
|
|
1
|
+
import { RectangleClient, isPolylineHitRectangle, distanceBetweenPointAndSegments, distanceBetweenPointAndPoint, HIT_DISTANCE_BUFFER, rotate, rotatePoints, isPointInPolygon } from '@plait/core';
|
|
2
2
|
import { PlaitDrawElement } from '../interfaces';
|
|
3
|
-
import { TRANSPARENT
|
|
3
|
+
import { TRANSPARENT } from '@plait/common';
|
|
4
4
|
import { getTextRectangle } from './geometry';
|
|
5
5
|
import { getLinePoints } from './line/line-basic';
|
|
6
6
|
import { getFillByElement } from './style/stroke';
|
|
@@ -42,7 +42,7 @@ export const isRectangleHitDrawElement = (board, element, selection) => {
|
|
|
42
42
|
if (PlaitDrawElement.isImage(element)) {
|
|
43
43
|
const client = RectangleClient.getRectangleByPoints(element.points);
|
|
44
44
|
const rotatedCornerPoints = rotatePoints(RectangleClient.getCornerPoints(client), RectangleClient.getCenterPoint(client), element.angle);
|
|
45
|
-
return isPolylineHitRectangle(rotatedCornerPoints,
|
|
45
|
+
return isPolylineHitRectangle(rotatedCornerPoints, rangeRectangle);
|
|
46
46
|
}
|
|
47
47
|
if (PlaitDrawElement.isLine(element)) {
|
|
48
48
|
const points = getLinePoints(board, element);
|
|
@@ -88,7 +88,9 @@ export const isHitDrawElement = (board, element, point) => {
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
if (PlaitDrawElement.isImage(element)) {
|
|
91
|
-
|
|
91
|
+
const client = RectangleClient.getRectangleByPoints(element.points);
|
|
92
|
+
const rotatedCornerPoints = rotatePoints(RectangleClient.getCornerPoints(client), RectangleClient.getCenterPoint(client), element.angle);
|
|
93
|
+
return isPointInPolygon(point, rotatedCornerPoints);
|
|
92
94
|
}
|
|
93
95
|
if (PlaitDrawElement.isLine(element)) {
|
|
94
96
|
return isHitLine(board, element, point);
|
|
@@ -123,4 +125,4 @@ export const isHitElementInside = (board, element, point) => {
|
|
|
123
125
|
}
|
|
124
126
|
return null;
|
|
125
127
|
};
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvaGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxlQUFlLEVBR2Ysc0JBQXNCLEVBRXRCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsbUJBQW1CLEVBQ25CLE1BQU0sRUFDVCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZ0JBQWdCLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsUUFBdUIsRUFBRSxFQUFFO0lBQzdELE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckUsSUFBSSxRQUFRLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFH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a0JBQWtCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pGLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxrQkFBa0IsQ0FBQztZQUM5QixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE9BQU8seUJBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFNlbGVjdGlvbixcbiAgICBQbGFpdEJvYXJkLFxuICAgIGlzUG9seWxpbmVIaXRSZWN0YW5nbGUsXG4gICAgUG9pbnQsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50LFxuICAgIEhJVF9ESVNUQU5DRV9CVUZGRVIsXG4gICAgcm90YXRlXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0R2VvbWV0cnksIFBsYWl0TGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVFJBTlNQQVJFTlQsIHJvdGF0ZVBvaW50cyB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgZ2V0VGV4dFJlY3RhbmdsZSB9IGZyb20gJy4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0TGluZVBvaW50cyB9IGZyb20gJy4vbGluZS9saW5lLWJhc2ljJztcbmltcG9ydCB7IGdldEZpbGxCeUVsZW1lbnQgfSBmcm9tICcuL3N0eWxlL3N0cm9rZSc7XG5pbXBvcnQgeyBEZWZhdWx0R2VvbWV0cnlTdHlsZSB9IGZyb20gJy4uL2NvbnN0YW50cy9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmVzJztcbmltcG9ydCB7IGdldFNoYXBlIH0gZnJvbSAnLi9zaGFwZSc7XG5pbXBvcnQgeyBnZXRIaXRMaW5lVGV4dEluZGV4IH0gZnJvbSAnLi9wb3NpdGlvbi9saW5lJztcblxuZXhwb3J0IGNvbnN0IGlzVGV4dEV4Y2VlZGluZ0JvdW5kcyA9IChnZW9tZXRyeTogUGxhaXRHZW9tZXRyeSkgPT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhnZW9tZXRyeS5wb2ludHMpO1xuICAgIGlmIChnZW9tZXRyeS50ZXh0SGVpZ2h0ID4gY2xpZW50LmhlaWdodCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0TGluZVRleHQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgcmV0dXJuIGdldEhpdExpbmVUZXh0SW5kZXgoYm9hcmQsIGVsZW1lbnQsIHBvaW50KSAhPT0gLTE7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIaXRQb2x5TGluZSA9IChwYXRoUG9pbnRzOiBQb2ludFtdLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kU2VnbWVudHMocGF0aFBvaW50cywgcG9pbnQpO1xuICAgIHJldHVybiBkaXN0YW5jZSA8PSBISVRfRElTVEFOQ0VfQlVGRkVSO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0TGluZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBwb2ludHMgPSBnZXRMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCBpc0hpdFRleHQgPSBpc0hpdExpbmVUZXh0KGJvYXJkLCBlbGVtZW50LCBwb2ludCk7XG4gICAgcmV0dXJuIGlzSGl0VGV4dCB8fCBpc0hpdFBvbHlMaW5lKHBvaW50cywgcG9pbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUmVjdGFuZ2xlSGl0RHJhd0VsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgc2VsZWN0aW9uOiBTZWxlY3Rpb24pID0+IHtcbiAgICBjb25zdCByYW5nZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhbc2VsZWN0aW9uLmFuY2hvciwgc2VsZWN0aW9uLmZvY3VzXSk7XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChjbGllbnQpO1xuICAgICAgICBsZXQgcm90YXRlZENvcm5lclBvaW50cyA9IHJvdGF0ZVBvaW50cyhSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKGNsaWVudCksIGNlbnRlclBvaW50LCBlbGVtZW50LmFuZ2xlKTtcbiAgICAgICAgaWYgKGlzVGV4dEV4Y2VlZGluZ0JvdW5kcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGdldFRleHRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgICAgICAgICByb3RhdGVkQ29ybmVyUG9pbnRzID0gcm90YXRlUG9pbnRzKFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHModGV4dENsaWVudCksIGNlbnRlclBvaW50LCBlbGVtZW50LmFuZ2xlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNQb2x5bGluZUhpdFJlY3RhbmdsZShyb3RhdGVkQ29ybmVyUG9pbnRzLCByYW5nZVJlY3RhbmdsZSk7XG4gICAgfVxuXG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICBjb25zdCByb3RhdGVkQ29ybmVyUG9pbnRzID0gcm90YXRlUG9pbnRzKFxuICAgICAgICAgICAgUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhjbGllbnQpLFxuICAgICAgICAgICAgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KGNsaWVudCksXG4gICAgICAgICAgICBlbGVtZW50LmFuZ2xlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBpc1BvbHlsaW5lSGl0UmVjdGFuZ2xlKHJvdGF0ZWRDb3JuZXJQb2ludHMsIGNsaWVudCk7XG4gICAgfVxuXG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IGdldExpbmVQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gaXNQb2x5bGluZUhpdFJlY3RhbmdsZShwb2ludHMsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9XG4gICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChyZWN0YW5nbGUhKTtcbiAgICBpZiAoZWxlbWVudC5hbmdsZSkge1xuICAgICAgICBwb2ludCA9IHJvdGF0ZShwb2ludFswXSwgcG9pbnRbMV0sIGNlbnRlclBvaW50WzBdLCBjZW50ZXJQb2ludFsxXSwgLWVsZW1lbnQuYW5nbGUpIGFzIFBvaW50O1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGZpbGwgPSBnZXRGaWxsQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lKGdldFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbmVhcmVzdFBvaW50ID0gZW5naW5lLmdldE5lYXJlc3RQb2ludChyZWN0YW5nbGUhLCBwb2ludCk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChuZWFyZXN0UG9pbnRbMF0sIG5lYXJlc3RQb2ludFsxXSwgcG9pbnRbMF0sIHBvaW50WzFdKTtcbiAgICAgICAgY29uc3QgaXNIaXRFZGdlID0gZGlzdGFuY2UgPD0gSElUX0RJU1RBTkNFX0JVRkZFUjtcbiAgICAgICAgaWYgKGlzSGl0RWRnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzSGl0RWRnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB3aGVuIHNoYXBlIGVxdWFscyB0ZXh0LCBmaWxsIGlzIG5vdCBhbGxvd2VkXG4gICAgICAgIGlmIChmaWxsICE9PSBEZWZhdWx0R2VvbWV0cnlTdHlsZS5maWxsICYmIGZpbGwgIT09IFRSQU5TUEFSRU5UICYmICFQbGFpdERyYXdFbGVtZW50LmlzVGV4dChlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgaXNIaXRJbnNpZGUgPSBlbmdpbmUuaXNJbnNpZGVQb2ludChyZWN0YW5nbGUhLCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaXNIaXRJbnNpZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNIaXRJbnNpZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiBzaGFwZSBlcXVhbHMgdGV4dCwgb25seSBjaGVjayB0ZXh0IHJlY3RhbmdsZVxuICAgICAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGdldFRleHRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgbGV0IGlzSGl0VGV4dCA9IFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGV4dENsaWVudCwgcG9pbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0hpdFRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNoZWNrIHRleHRSZWN0YW5nbGUgb2YgZWxlbWVudFxuICAgICAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlID8gZW5naW5lLmdldFRleHRSZWN0YW5nbGUoZWxlbWVudCkgOiBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaXNIaXRUZXh0UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0ZXh0Q2xpZW50LCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaXNIaXRUZXh0UmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzSGl0VGV4dFJlY3RhbmdsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdERyYXdFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB7IGFuY2hvcjogcG9pbnQsIGZvY3VzOiBwb2ludCB9KTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzSGl0TGluZShib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEVsZW1lbnRJbnNpZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gYm9hcmQuZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgIGNvbnN0IGNlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSEpO1xuICAgIGlmIChlbGVtZW50LmFuZ2xlKSB7XG4gICAgICAgIHBvaW50ID0gcm90YXRlKHBvaW50WzBdLCBwb2ludFsxXSwgY2VudGVyUG9pbnRbMF0sIGNlbnRlclBvaW50WzFdLCAtZWxlbWVudC5hbmdsZSkgYXMgUG9pbnQ7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lKGdldFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgY29uc3QgaXNIaXRJbnNpZGUgPSBlbmdpbmUuaXNJbnNpZGVQb2ludChyZWN0YW5nbGUhLCBwb2ludCk7XG4gICAgICAgIGlmIChpc0hpdEluc2lkZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzSGl0SW5zaWRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q2xpZW50ID0gZW5naW5lLmdldFRleHRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBpc0hpdFRleHRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRleHRDbGllbnQsIHBvaW50KTtcbiAgICAgICAgICAgIGlmIChpc0hpdFRleHRSZWN0YW5nbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNIaXRUZXh0UmVjdGFuZ2xlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzUmVjdGFuZ2xlSGl0RHJhd0VsZW1lbnQoYm9hcmQsIGVsZW1lbnQsIHsgYW5jaG9yOiBwb2ludCwgZm9jdXM6IHBvaW50IH0pO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzTGluZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNIaXRMaW5lKGJvYXJkLCBlbGVtZW50LCBwb2ludCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuIl19
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvaGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxlQUFlLEVBR2Ysc0JBQXNCLEVBRXRCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsbUJBQW1CLEVBQ25CLE1BQU0sRUFDTixZQUFZLEVBQ1osZ0JBQWdCLEVBQ25CLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFFBQXVCLEVBQUUsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JFLElBQUksUUFBUSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxN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LENBQUM7WUFDZCxPQUFPLFdBQVcsQ0FBQztRQUN2QixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEQsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pGLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxrQkFBa0IsQ0FBQztZQUM5QixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE9BQU8seUJBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFNlbGVjdGlvbixcbiAgICBQbGFpdEJvYXJkLFxuICAgIGlzUG9seWxpbmVIaXRSZWN0YW5nbGUsXG4gICAgUG9pbnQsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50LFxuICAgIEhJVF9ESVNUQU5DRV9CVUZGRVIsXG4gICAgcm90YXRlLFxuICAgIHJvdGF0ZVBvaW50cyxcbiAgICBpc1BvaW50SW5Qb2x5Z29uXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0R2VvbWV0cnksIFBsYWl0TGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVFJBTlNQQVJFTlQgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IGdldFRleHRSZWN0YW5nbGUgfSBmcm9tICcuL2dlb21ldHJ5JztcbmltcG9ydCB7IGdldExpbmVQb2ludHMgfSBmcm9tICcuL2xpbmUvbGluZS1iYXNpYyc7XG5pbXBvcnQgeyBnZXRGaWxsQnlFbGVtZW50IH0gZnJvbSAnLi9zdHlsZS9zdHJva2UnO1xuaW1wb3J0IHsgRGVmYXVsdEdlb21ldHJ5U3R5bGUgfSBmcm9tICcuLi9jb25zdGFudHMvZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBnZXRTaGFwZSB9IGZyb20gJy4vc2hhcGUnO1xuaW1wb3J0IHsgZ2V0SGl0TGluZVRleHRJbmRleCB9IGZyb20gJy4vcG9zaXRpb24vbGluZSc7XG5cbmV4cG9ydCBjb25zdCBpc1RleHRFeGNlZWRpbmdCb3VuZHMgPSAoZ2VvbWV0cnk6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICBjb25zdCBjbGllbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZ2VvbWV0cnkucG9pbnRzKTtcbiAgICBpZiAoZ2VvbWV0cnkudGV4dEhlaWdodCA+IGNsaWVudC5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdExpbmVUZXh0ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdExpbmUsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIHJldHVybiBnZXRIaXRMaW5lVGV4dEluZGV4KGJvYXJkLCBlbGVtZW50LCBwb2ludCkgIT09IC0xO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0UG9seUxpbmUgPSAocGF0aFBvaW50czogUG9pbnRbXSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBhdGhQb2ludHMsIHBvaW50KTtcbiAgICByZXR1cm4gZGlzdGFuY2UgPD0gSElUX0RJU1RBTkNFX0JVRkZFUjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdExpbmUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcG9pbnRzID0gZ2V0TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRMaW5lVGV4dChib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgIHJldHVybiBpc0hpdFRleHQgfHwgaXNIaXRQb2x5TGluZShwb2ludHMsIHBvaW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1JlY3RhbmdsZUhpdERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQsIHNlbGVjdGlvbjogU2VsZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3NlbGVjdGlvbi5hbmNob3IsIHNlbGVjdGlvbi5mb2N1c10pO1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoY2xpZW50KTtcbiAgICAgICAgbGV0IHJvdGF0ZWRDb3JuZXJQb2ludHMgPSByb3RhdGVQb2ludHMoUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhjbGllbnQpLCBjZW50ZXJQb2ludCwgZWxlbWVudC5hbmdsZSk7XG4gICAgICAgIGlmIChpc1RleHRFeGNlZWRpbmdCb3VuZHMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICAgICAgcm90YXRlZENvcm5lclBvaW50cyA9IHJvdGF0ZVBvaW50cyhSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHRleHRDbGllbnQpLCBjZW50ZXJQb2ludCwgZWxlbWVudC5hbmdsZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzUG9seWxpbmVIaXRSZWN0YW5nbGUocm90YXRlZENvcm5lclBvaW50cywgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICAgICAgY29uc3Qgcm90YXRlZENvcm5lclBvaW50cyA9IHJvdGF0ZVBvaW50cyhcbiAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMoY2xpZW50KSxcbiAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChjbGllbnQpLFxuICAgICAgICAgICAgZWxlbWVudC5hbmdsZVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gaXNQb2x5bGluZUhpdFJlY3RhbmdsZShyb3RhdGVkQ29ybmVyUG9pbnRzLCByYW5nZVJlY3RhbmdsZSk7XG4gICAgfVxuXG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IGdldExpbmVQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gaXNQb2x5bGluZUhpdFJlY3RhbmdsZShwb2ludHMsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIaXREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCByZWN0YW5nbGUgPSBib2FyZC5nZXRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQocmVjdGFuZ2xlISk7XG4gICAgaWYgKGVsZW1lbnQuYW5nbGUpIHtcbiAgICAgICAgcG9pbnQgPSByb3RhdGUocG9pbnRbMF0sIHBvaW50WzFdLCBjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0sIC1lbGVtZW50LmFuZ2xlKSBhcyBQb2ludDtcbiAgICB9XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBmaWxsID0gZ2V0RmlsbEJ5RWxlbWVudChib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVuZ2luZSA9IGdldEVuZ2luZShnZXRTaGFwZShlbGVtZW50KSk7XG4gICAgICAgIGNvbnN0IG5lYXJlc3RQb2ludCA9IGVuZ2luZS5nZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlISwgcG9pbnQpO1xuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQobmVhcmVzdFBvaW50WzBdLCBuZWFyZXN0UG9pbnRbMV0sIHBvaW50WzBdLCBwb2ludFsxXSk7XG4gICAgICAgIGNvbnN0IGlzSGl0RWRnZSA9IGRpc3RhbmNlIDw9IEhJVF9ESVNUQU5DRV9CVUZGRVI7XG4gICAgICAgIGlmIChpc0hpdEVkZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0hpdEVkZ2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2hlbiBzaGFwZSBlcXVhbHMgdGV4dCwgZmlsbCBpcyBub3QgYWxsb3dlZFxuICAgICAgICBpZiAoZmlsbCAhPT0gRGVmYXVsdEdlb21ldHJ5U3R5bGUuZmlsbCAmJiBmaWxsICE9PSBUUkFOU1BBUkVOVCAmJiAhUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzSGl0SW5zaWRlID0gZW5naW5lLmlzSW5zaWRlUG9pbnQocmVjdGFuZ2xlISwgcG9pbnQpO1xuICAgICAgICAgICAgaWYgKGlzSGl0SW5zaWRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzSGl0SW5zaWRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgc2hhcGUgZXF1YWxzIHRleHQsIG9ubHkgY2hlY2sgdGV4dCByZWN0YW5nbGVcbiAgICAgICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVGV4dChlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGxldCBpc0hpdFRleHQgPSBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRleHRDbGllbnQsIHBvaW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNIaXRUZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayB0ZXh0UmVjdGFuZ2xlIG9mIGVsZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBlbmdpbmUuZ2V0VGV4dFJlY3RhbmdsZSA/IGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpIDogZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGlzSGl0VGV4dFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGV4dENsaWVudCwgcG9pbnQpO1xuICAgICAgICAgICAgaWYgKGlzSGl0VGV4dFJlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0hpdFRleHRSZWN0YW5nbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICBjb25zdCByb3RhdGVkQ29ybmVyUG9pbnRzID0gcm90YXRlUG9pbnRzKFxuICAgICAgICAgICAgUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhjbGllbnQpLFxuICAgICAgICAgICAgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KGNsaWVudCksXG4gICAgICAgICAgICBlbGVtZW50LmFuZ2xlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBpc1BvaW50SW5Qb2x5Z29uKHBvaW50LCByb3RhdGVkQ29ybmVyUG9pbnRzKTtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzSGl0TGluZShib2FyZCwgZWxlbWVudCwgcG9pbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEVsZW1lbnRJbnNpZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gYm9hcmQuZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgIGNvbnN0IGNlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSEpO1xuICAgIGlmIChlbGVtZW50LmFuZ2xlKSB7XG4gICAgICAgIHBvaW50ID0gcm90YXRlKHBvaW50WzBdLCBwb2ludFsxXSwgY2VudGVyUG9pbnRbMF0sIGNlbnRlclBvaW50WzFdLCAtZWxlbWVudC5hbmdsZSkgYXMgUG9pbnQ7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lKGdldFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgY29uc3QgaXNIaXRJbnNpZGUgPSBlbmdpbmUuaXNJbnNpZGVQb2ludChyZWN0YW5nbGUhLCBwb2ludCk7XG4gICAgICAgIGlmIChpc0hpdEluc2lkZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzSGl0SW5zaWRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q2xpZW50ID0gZW5naW5lLmdldFRleHRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBpc0hpdFRleHRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRleHRDbGllbnQsIHBvaW50KTtcbiAgICAgICAgICAgIGlmIChpc0hpdFRleHRSZWN0YW5nbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNIaXRUZXh0UmVjdGFuZ2xlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzUmVjdGFuZ2xlSGl0RHJhd0VsZW1lbnQoYm9hcmQsIGVsZW1lbnQsIHsgYW5jaG9yOiBwb2ludCwgZm9jdXM6IHBvaW50IH0pO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzTGluZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNIaXRMaW5lKGJvYXJkLCBlbGVtZW50LCBwb2ludCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Point, getElementById, RectangleClient } from '@plait/core';
|
|
1
|
+
import { Point, getElementById, RectangleClient, rotatePointsByElement } from '@plait/core';
|
|
2
2
|
import { getPoints, getPointByVectorComponent, removeDuplicatePoints, generateElbowLineRoute, simplifyOrthogonalPoints, isSourceAndTargetIntersect } from '@plait/common';
|
|
3
3
|
import { BasicShapes, PlaitLine } from '../../interfaces';
|
|
4
4
|
import { createGeometryElement } from '../geometry';
|
|
@@ -79,8 +79,16 @@ export const getSourceAndTargetRectangle = (board, element, handleRefPair) => {
|
|
|
79
79
|
const target = handleRefPair.target;
|
|
80
80
|
targetElement = createFakeElement(target.point, target.vector);
|
|
81
81
|
}
|
|
82
|
-
|
|
83
|
-
const
|
|
82
|
+
let sourceRectangle = RectangleClient.getRectangleByPoints(sourceElement.points);
|
|
83
|
+
const rotatedSourceCornerPoints = rotatePointsByElement(RectangleClient.getCornerPoints(sourceRectangle), sourceElement) ||
|
|
84
|
+
RectangleClient.getCornerPoints(sourceRectangle);
|
|
85
|
+
sourceRectangle = RectangleClient.getRectangleByPoints(rotatedSourceCornerPoints);
|
|
86
|
+
sourceRectangle = RectangleClient.inflate(sourceRectangle, getStrokeWidthByElement(sourceElement) * 2);
|
|
87
|
+
let targetRectangle = RectangleClient.getRectangleByPoints(targetElement.points);
|
|
88
|
+
const rotatedTargetCornerPoints = rotatePointsByElement(RectangleClient.getCornerPoints(targetRectangle), targetElement) ||
|
|
89
|
+
RectangleClient.getCornerPoints(targetRectangle);
|
|
90
|
+
targetRectangle = RectangleClient.getRectangleByPoints(rotatedTargetCornerPoints);
|
|
91
|
+
targetRectangle = RectangleClient.inflate(targetRectangle, getStrokeWidthByElement(targetElement) * 2);
|
|
84
92
|
return {
|
|
85
93
|
sourceRectangle,
|
|
86
94
|
targetRectangle
|
|
@@ -98,4 +106,4 @@ export function getNextRenderPoints(board, element, renderPoints) {
|
|
|
98
106
|
newRenderKeyPoints.splice(-1, 1, nextTargetPoint);
|
|
99
107
|
return removeDuplicatePoints(newRenderKeyPoints);
|
|
100
108
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxib3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9saW5lL2VsYm93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsY0FBYyxFQUFFLGVBQWUsRUFBVSxNQUFNLGFBQWEsQ0FBQztBQUN6RixPQUFPLEVBQ0gsU0FBUyxFQUNULHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4QiwwQkFBMEIsRUFDN0IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBb0MsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBa0IsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzRCxNQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZFLGlDQUFpQztJQUNqQyxNQUFNLFdBQVcsR0FBRywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2QsT0FBTyx3QkFBd0IsQ0FDM0IsU0FBUyxDQUNMLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxF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SSxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLEdBQUcsNEJBQTRCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hGLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDbEQsT0FBTyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3JELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2ludCwgUGxhaXRCb2FyZCwgZ2V0RWxlbWVudEJ5SWQsIFJlY3RhbmdsZUNsaWVudCwgVmVjdG9yIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBnZXRQb2ludHMsXG4gICAgZ2V0UG9pbnRCeVZlY3RvckNvbXBvbmVudCxcbiAgICByZW1vdmVEdXBsaWNhdGVQb2ludHMsXG4gICAgZ2VuZXJhdGVFbGJvd0xpbmVSb3V0ZSxcbiAgICBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMsXG4gICAgaXNTb3VyY2VBbmRUYXJnZXRJbnRlcnNlY3Rcbn0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBCYXNpY1NoYXBlcywgTGluZUhhbmRsZVJlZlBhaXIsIFBsYWl0R2VvbWV0cnksIFBsYWl0TGluZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY3JlYXRlR2VvbWV0cnlFbGVtZW50IH0gZnJvbSAnLi4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQgfSBmcm9tICcuLi9zdHlsZS9zdHJva2UnO1xuaW1wb3J0IHsgZ2V0RWxib3dMaW5lUm91dGVPcHRpb25zLCBnZXRMaW5lSGFuZGxlUmVmUGFpciB9IGZyb20gJy4vbGluZS1jb21tb24nO1xuaW1wb3J0IHsgZ2V0TWlkS2V5UG9pbnRzLCBnZXRNaXJyb3JEYXRhUG9pbnRzLCBoYXNJbGxlZ2FsRWxib3dQb2ludCB9IGZyb20gJy4vbGluZS1yZXNpemUnO1xuXG5leHBvcnQgY29uc3QgZ2V0RWxib3dQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlZlBhaXIgPSBnZXRMaW5lSGFuZGxlUmVmUGFpcihib2FyZCwgZWxlbWVudCk7XG4gICAgY29uc3QgcGFyYW1zID0gZ2V0RWxib3dMaW5lUm91dGVPcHRpb25zKGJvYXJkLCBlbGVtZW50LCBoYW5kbGVSZWZQYWlyKTtcbiAgICAvLyBjb25zb2xlLmxvZyhwYXJhbXMsICdwYXJhbXMnKTtcbiAgICBjb25zdCBpc0ludGVyc2VjdCA9IGlzU291cmNlQW5kVGFyZ2V0SW50ZXJzZWN0KHBhcmFtcyk7XG4gICAgaWYgKGlzSW50ZXJzZWN0KSB7XG4gICAgICAgIHJldHVybiBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMoXG4gICAgICAgICAgICBnZXRQb2ludHMoXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVmUGFpci5zb3VyY2UucG9pbnQsXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVmUGFpci5zb3VyY2UuZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIGhhbmRsZVJlZlBhaXIudGFyZ2V0LnBvaW50LFxuICAgICAgICAgICAgICAgIGhhbmRsZVJlZlBhaXIudGFyZ2V0LmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGtleVBvaW50cyA9IHJlbW92ZUR1cGxpY2F0ZVBvaW50cyhnZW5lcmF0ZUVsYm93TGluZVJvdXRlKHBhcmFtcykpO1xuICAgIGNvbnN0IG5leHRLZXlQb2ludHMgPSBrZXlQb2ludHMuc2xpY2UoMSwga2V5UG9pbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChlbGVtZW50LnBvaW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIHNpbXBsaWZ5T3J0aG9nb25hbFBvaW50cyhrZXlQb2ludHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNpbXBsaWZpZWROZXh0S2V5UG9pbnRzID0gc2ltcGxpZnlPcnRob2dvbmFsUG9pbnRzKG5leHRLZXlQb2ludHMpO1xuICAgICAgICBjb25zdCBkYXRhUG9pbnRzID0gcmVtb3ZlRHVwbGljYXRlUG9pbnRzKFBsYWl0TGluZS5nZXRQb2ludHMoYm9hcmQsIGVsZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbWlkRGF0YVBvaW50cyA9IGRhdGFQb2ludHMuc2xpY2UoMSwgLTEpO1xuICAgICAgICBpZiAoaGFzSWxsZWdhbEVsYm93UG9pbnQobWlkRGF0YVBvaW50cykpIHtcbiAgICAgICAgICAgIHJldHVybiBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMoa2V5UG9pbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgbmV4dERhdGFQb2ludHMgPSBbc2ltcGxpZmllZE5leHRLZXlQb2ludHNbMF0sIC4uLm1pZERhdGFQb2ludHMsIHNpbXBsaWZpZWROZXh0S2V5UG9pbnRzW3NpbXBsaWZpZWROZXh0S2V5UG9pbnRzLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgY29uc3QgbWlycm9yRGF0YVBvaW50cyA9IGdldE1pcnJvckRhdGFQb2ludHMoYm9hcmQsIG5leHREYXRhUG9pbnRzLCBzaW1wbGlmaWVkTmV4dEtleVBvaW50cywgcGFyYW1zKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobWlycm9yRGF0YVBvaW50cywgJ21pcnJvckRhdGFQb2ludHMnKTtcbiAgICAgICAgY29uc3QgcmVuZGVyUG9pbnRzOiBQb2ludFtdID0gW2tleVBvaW50c1swXV07XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtaXJyb3JEYXRhUG9pbnRzLmxlbmd0aCAtIDE7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UG9pbnQgPSBtaXJyb3JEYXRhUG9pbnRzW2luZGV4XTtcbiAgICAgICAgICAgIGxldCBuZXh0UG9pbnQgPSBtaXJyb3JEYXRhUG9pbnRzW2luZGV4ICsgMV07XG4gICAgICAgICAgICBjb25zdCBpc1N0cmFpZ2h0ID0gUG9pbnQuaXNBbGlnbihbY3VycmVudFBvaW50LCBuZXh0UG9pbnRdKTtcbiAgICAgICAgICAgIGlmICghaXNTdHJhaWdodCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZEtleVBvaW50cyA9IGdldE1pZEtleVBvaW50cyhzaW1wbGlmaWVkTmV4dEtleVBvaW50cywgY3VycmVudFBvaW50LCBuZXh0UG9pbnQpO1xuICAgICAgICAgICAgICAgIGlmIChtaWRLZXlQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclBvaW50cy5wdXNoKGN1cnJlbnRQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclBvaW50cy5wdXNoKC4uLm1pZEtleVBvaW50cyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyUG9pbnRzLnB1c2goY3VycmVudFBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3Vua25vd24gZGF0YSBwb2ludHMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlbmRlclBvaW50cy5wdXNoKGN1cnJlbnRQb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyUG9pbnRzLnB1c2goa2V5UG9pbnRzW2tleVBvaW50cy5sZW5ndGggLSAyXSwga2V5UG9pbnRzW2tleVBvaW50cy5sZW5ndGggLSAxXSk7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgbWlkZGxlIHBvaW50IHRvIGF2b2lkIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIHN0YXJ0aW5nIGFuZCBlbmRpbmcgcG9zaXRpb25zIGFyZSBkcmF3biBiYWNrLCBzdWNoIGFzIHdoZW4gc291cmNlUG9pbnQgaXMgYmV0d2VlbiBuZXh0U291cmNlUG9pbnQgYW5kIHRoZSBmaXJzdCBrZXkgcG9pbnQuXG4gICAgICAgIC8vIElzc3VlXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5UG9pbnQyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgIC8vIG5leHRQb2ludC0tLXNvdXJjZVBvaW50LS0ta2V5UG9pbnQxXG4gICAgICAgIC8vIFRoZSBjb3JyZWN0IHJlbmRlcmluZyBzaG91bGQgYmUgKG5leHRQb2ludCBzaG91bGQgYmUgZmlsdGVyZWQgb3V0KTpcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlQb2ludDJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgICAgLy8gICAgICAgICAgICAgc291cmNlUG9pbnQtLS1rZXlQb2ludDFcbiAgICAgICAgY29uc3QgcmV0ID0gc2ltcGxpZnlPcnRob2dvbmFsUG9pbnRzKHJlbmRlclBvaW50cyk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldE5leHRTb3VyY2VBbmRUYXJnZXRQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRFbGJvd0xpbmVSb3V0ZU9wdGlvbnMoYm9hcmQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBbb3B0aW9ucy5uZXh0U291cmNlUG9pbnQsIG9wdGlvbnMubmV4dFRhcmdldFBvaW50XTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTb3VyY2VBbmRUYXJnZXRSZWN0YW5nbGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSwgaGFuZGxlUmVmUGFpcjogTGluZUhhbmRsZVJlZlBhaXIpID0+IHtcbiAgICBsZXQgc291cmNlRWxlbWVudCA9IGVsZW1lbnQuc291cmNlLmJvdW5kSWQgPyBnZXRFbGVtZW50QnlJZDxQbGFpdEdlb21ldHJ5Pihib2FyZCwgZWxlbWVudC5zb3VyY2UuYm91bmRJZCkgOiB1bmRlZmluZWQ7XG4gICAgbGV0IHRhcmdldEVsZW1lbnQgPSBlbGVtZW50LnRhcmdldC5ib3VuZElkID8gZ2V0RWxlbWVudEJ5SWQ8UGxhaXRHZW9tZXRyeT4oYm9hcmQsIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIDogdW5kZWZpbmVkO1xuICAgIGlmICghc291cmNlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBoYW5kbGVSZWZQYWlyLnNvdXJjZTtcbiAgICAgICAgc291cmNlRWxlbWVudCA9IGNyZWF0ZUZha2VFbGVtZW50KHNvdXJjZS5wb2ludCwgc291cmNlLnZlY3Rvcik7XG4gICAgfVxuICAgIGlmICghdGFyZ2V0RWxlbWVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBoYW5kbGVSZWZQYWlyLnRhcmdldDtcbiAgICAgICAgdGFyZ2V0RWxlbWVudCA9IGNyZWF0ZUZha2VFbGVtZW50KHRhcmdldC5wb2ludCwgdGFyZ2V0LnZlY3Rvcik7XG4gICAgfVxuICAgIGNvbnN0IHNvdXJjZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKFxuICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoc291cmNlRWxlbWVudC5wb2ludHMpLFxuICAgICAgICBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChzb3VyY2VFbGVtZW50KSAqIDJcbiAgICApO1xuICAgIGNvbnN0IHRhcmdldFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKFxuICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHModGFyZ2V0RWxlbWVudC5wb2ludHMpLFxuICAgICAgICBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCh0YXJnZXRFbGVtZW50KSAqIDJcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZVJlY3RhbmdsZSxcbiAgICAgICAgdGFyZ2V0UmVjdGFuZ2xlXG4gICAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZUZha2VFbGVtZW50ID0gKHN0YXJ0UG9pbnQ6IFBvaW50LCB2ZWN0b3I6IFZlY3RvcikgPT4ge1xuICAgIGNvbnN0IHBvaW50ID0gZ2V0UG9pbnRCeVZlY3RvckNvbXBvbmVudChzdGFydFBvaW50LCB2ZWN0b3IsIC0yNSk7XG4gICAgY29uc3QgcG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldFBvaW50cyhSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlDZW50ZXJQb2ludChwb2ludCwgNTAsIDUwKSk7XG4gICAgcmV0dXJuIGNyZWF0ZUdlb21ldHJ5RWxlbWVudChCYXNpY1NoYXBlcy5yZWN0YW5nbGUsIHBvaW50cywgJycpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRSZW5kZXJQb2ludHMoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSwgcmVuZGVyUG9pbnRzPzogUG9pbnRbXSkge1xuICAgIGxldCBuZXdSZW5kZXJLZXlQb2ludHMgPSByZW5kZXJQb2ludHMgPz8gZ2V0RWxib3dQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgIGNvbnN0IFtuZXh0U291cmNlUG9pbnQsIG5leHRUYXJnZXRQb2ludF0gPSBnZXROZXh0U291cmNlQW5kVGFyZ2V0UG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICBuZXdSZW5kZXJLZXlQb2ludHMuc3BsaWNlKDAsIDEsIG5leHRTb3VyY2VQb2ludCk7XG4gICAgbmV3UmVuZGVyS2V5UG9pbnRzLnNwbGljZSgtMSwgMSwgbmV4dFRhcmdldFBvaW50KTtcbiAgICByZXR1cm4gcmVtb3ZlRHVwbGljYXRlUG9pbnRzKG5ld1JlbmRlcktleVBvaW50cyk7XG59XG4iXX0=
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxib3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9saW5lL2VsYm93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQWMsY0FBYyxFQUFFLGVBQWUsRUFBd0IscUJBQXFCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUgsT0FBTyxFQUNILFNBQVMsRUFDVCx5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzdCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQW9DLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQWtCLEVBQUUsRUFBRTtJQUNwRSxNQUFNLGFBQWEsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0QsTUFBTSxNQUFNLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN2RSxpQ0FBaUM7SUFDakMsTUFBTSxXQUFXLEdBQUcsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkQsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNkLE9BQU8sd0JBQXdCLENBQzNCLFNBQVMsQ0FDTCxhQUFhLENBQUMsTUFB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O0FBQ04sQ0FBQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFVBQWlCLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDNUQsTUFBTSxLQUFLLEdBQUcseUJBQXlCLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRyxPQUFPLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFpQixFQUFFLE9BQWtCLEVBQUUsWUFBc0I7SUFDN0YsSUFBSSxrQkFBa0IsR0FBRyxZQUFZLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxHQUFHLDRCQUE0QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RixrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNqRCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2xELE9BQU8scUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNyRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQsIFBsYWl0Qm9hcmQsIGdldEVsZW1lbnRCeUlkLCBSZWN0YW5nbGVDbGllbnQsIFZlY3Rvciwgcm90YXRlUG9pbnRzLCByb3RhdGVQb2ludHNCeUVsZW1lbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQge1xuICAgIGdldFBvaW50cyxcbiAgICBnZXRQb2ludEJ5VmVjdG9yQ29tcG9uZW50LFxuICAgIHJlbW92ZUR1cGxpY2F0ZVBvaW50cyxcbiAgICBnZW5lcmF0ZUVsYm93TGluZVJvdXRlLFxuICAgIHNpbXBsaWZ5T3J0aG9nb25hbFBvaW50cyxcbiAgICBpc1NvdXJjZUFuZFRhcmdldEludGVyc2VjdFxufSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IEJhc2ljU2hhcGVzLCBMaW5lSGFuZGxlUmVmUGFpciwgUGxhaXRHZW9tZXRyeSwgUGxhaXRMaW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjcmVhdGVHZW9tZXRyeUVsZW1lbnQgfSBmcm9tICcuLi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4uL3N0eWxlL3N0cm9rZSc7XG5pbXBvcnQgeyBnZXRFbGJvd0xpbmVSb3V0ZU9wdGlvbnMsIGdldExpbmVIYW5kbGVSZWZQYWlyIH0gZnJvbSAnLi9saW5lLWNvbW1vbic7XG5pbXBvcnQgeyBnZXRNaWRLZXlQb2ludHMsIGdldE1pcnJvckRhdGFQb2ludHMsIGhhc0lsbGVnYWxFbGJvd1BvaW50IH0gZnJvbSAnLi9saW5lLXJlc2l6ZSc7XG5cbmV4cG9ydCBjb25zdCBnZXRFbGJvd1BvaW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlUmVmUGFpciA9IGdldExpbmVIYW5kbGVSZWZQYWlyKGJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCBwYXJhbXMgPSBnZXRFbGJvd0xpbmVSb3V0ZU9wdGlvbnMoYm9hcmQsIGVsZW1lbnQsIGhhbmRsZVJlZlBhaXIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHBhcmFtcywgJ3BhcmFtcycpO1xuICAgIGNvbnN0IGlzSW50ZXJzZWN0ID0gaXNTb3VyY2VBbmRUYXJnZXRJbnRlcnNlY3QocGFyYW1zKTtcbiAgICBpZiAoaXNJbnRlcnNlY3QpIHtcbiAgICAgICAgcmV0dXJuIHNpbXBsaWZ5T3J0aG9nb25hbFBvaW50cyhcbiAgICAgICAgICAgIGdldFBvaW50cyhcbiAgICAgICAgICAgICAgICBoYW5kbGVSZWZQYWlyLnNvdXJjZS5wb2ludCxcbiAgICAgICAgICAgICAgICBoYW5kbGVSZWZQYWlyLnNvdXJjZS5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVmUGFpci50YXJnZXQucG9pbnQsXG4gICAgICAgICAgICAgICAgaGFuZGxlUmVmUGFpci50YXJnZXQuZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qga2V5UG9pbnRzID0gcmVtb3ZlRHVwbGljYXRlUG9pbnRzKGdlbmVyYXRlRWxib3dMaW5lUm91dGUocGFyYW1zKSk7XG4gICAgY29uc3QgbmV4dEtleVBvaW50cyA9IGtleVBvaW50cy5zbGljZSgxLCBrZXlQb2ludHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGVsZW1lbnQucG9pbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4gc2ltcGxpZnlPcnRob2dvbmFsUG9pbnRzKGtleVBvaW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2ltcGxpZmllZE5leHRLZXlQb2ludHMgPSBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMobmV4dEtleVBvaW50cyk7XG4gICAgICAgIGNvbnN0IGRhdGFQb2ludHMgPSByZW1vdmVEdXBsaWNhdGVQb2ludHMoUGxhaXRMaW5lLmdldFBvaW50cyhib2FyZCwgZWxlbWVudCkpO1xuICAgICAgICBjb25zdCBtaWREYXRhUG9pbnRzID0gZGF0YVBvaW50cy5zbGljZSgxLCAtMSk7XG4gICAgICAgIGlmIChoYXNJbGxlZ2FsRWxib3dQb2ludChtaWREYXRhUG9pbnRzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNpbXBsaWZ5T3J0aG9nb25hbFBvaW50cyhrZXlQb2ludHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5leHREYXRhUG9pbnRzID0gW3NpbXBsaWZpZWROZXh0S2V5UG9pbnRzWzBdLCAuLi5taWREYXRhUG9pbnRzLCBzaW1wbGlmaWVkTmV4dEtleVBvaW50c1tzaW1wbGlmaWVkTmV4dEtleVBvaW50cy5sZW5ndGggLSAxXV07XG4gICAgICAgIGNvbnN0IG1pcnJvckRhdGFQb2ludHMgPSBnZXRNaXJyb3JEYXRhUG9pbnRzKGJvYXJkLCBuZXh0RGF0YVBvaW50cywgc2ltcGxpZmllZE5leHRLZXlQb2ludHMsIHBhcmFtcyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1pcnJvckRhdGFQb2ludHMsICdtaXJyb3JEYXRhUG9pbnRzJyk7XG4gICAgICAgIGNvbnN0IHJlbmRlclBvaW50czogUG9pbnRbXSA9IFtrZXlQb2ludHNbMF1dO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbWlycm9yRGF0YVBvaW50cy5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudFBvaW50ID0gbWlycm9yRGF0YVBvaW50c1tpbmRleF07XG4gICAgICAgICAgICBsZXQgbmV4dFBvaW50ID0gbWlycm9yRGF0YVBvaW50c1tpbmRleCArIDFdO1xuICAgICAgICAgICAgY29uc3QgaXNTdHJhaWdodCA9IFBvaW50LmlzQWxpZ24oW2N1cnJlbnRQb2ludCwgbmV4dFBvaW50XSk7XG4gICAgICAgICAgICBpZiAoIWlzU3RyYWlnaHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtaWRLZXlQb2ludHMgPSBnZXRNaWRLZXlQb2ludHMoc2ltcGxpZmllZE5leHRLZXlQb2ludHMsIGN1cnJlbnRQb2ludCwgbmV4dFBvaW50KTtcbiAgICAgICAgICAgICAgICBpZiAobWlkS2V5UG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJQb2ludHMucHVzaChjdXJyZW50UG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICByZW5kZXJQb2ludHMucHVzaCguLi5taWRLZXlQb2ludHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbmRlclBvaW50cy5wdXNoKGN1cnJlbnRQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1bmtub3duIGRhdGEgcG9pbnRzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZW5kZXJQb2ludHMucHVzaChjdXJyZW50UG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlclBvaW50cy5wdXNoKGtleVBvaW50c1trZXlQb2ludHMubGVuZ3RoIC0gMl0sIGtleVBvaW50c1trZXlQb2ludHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAvLyBSZW1vdmUgdGhlIG1pZGRsZSBwb2ludCB0byBhdm9pZCB0aGUgc2l0dWF0aW9uIHdoZXJlIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHBvc2l0aW9ucyBhcmUgZHJhd24gYmFjaywgc3VjaCBhcyB3aGVuIHNvdXJjZVBvaW50IGlzIGJldHdlZW4gbmV4dFNvdXJjZVBvaW50IGFuZCB0aGUgZmlyc3Qga2V5IHBvaW50LlxuICAgICAgICAvLyBJc3N1ZVxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVBvaW50MlxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAgICAvLyBuZXh0UG9pbnQtLS1zb3VyY2VQb2ludC0tLWtleVBvaW50MVxuICAgICAgICAvLyBUaGUgY29ycmVjdCByZW5kZXJpbmcgc2hvdWxkIGJlIChuZXh0UG9pbnQgc2hvdWxkIGJlIGZpbHRlcmVkIG91dCk6XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5UG9pbnQyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICAgIC8vICAgICAgICAgICAgIHNvdXJjZVBvaW50LS0ta2V5UG9pbnQxXG4gICAgICAgIGNvbnN0IHJldCA9IHNpbXBsaWZ5T3J0aG9nb25hbFBvaW50cyhyZW5kZXJQb2ludHMpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXh0U291cmNlQW5kVGFyZ2V0UG9pbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdExpbmUpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0gZ2V0RWxib3dMaW5lUm91dGVPcHRpb25zKGJvYXJkLCBlbGVtZW50KTtcbiAgICByZXR1cm4gW29wdGlvbnMubmV4dFNvdXJjZVBvaW50LCBvcHRpb25zLm5leHRUYXJnZXRQb2ludF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U291cmNlQW5kVGFyZ2V0UmVjdGFuZ2xlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdExpbmUsIGhhbmRsZVJlZlBhaXI6IExpbmVIYW5kbGVSZWZQYWlyKSA9PiB7XG4gICAgbGV0IHNvdXJjZUVsZW1lbnQgPSBlbGVtZW50LnNvdXJjZS5ib3VuZElkID8gZ2V0RWxlbWVudEJ5SWQ8UGxhaXRHZW9tZXRyeT4oYm9hcmQsIGVsZW1lbnQuc291cmNlLmJvdW5kSWQpIDogdW5kZWZpbmVkO1xuICAgIGxldCB0YXJnZXRFbGVtZW50ID0gZWxlbWVudC50YXJnZXQuYm91bmRJZCA/IGdldEVsZW1lbnRCeUlkPFBsYWl0R2VvbWV0cnk+KGJvYXJkLCBlbGVtZW50LnRhcmdldC5ib3VuZElkKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoIXNvdXJjZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gaGFuZGxlUmVmUGFpci5zb3VyY2U7XG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBjcmVhdGVGYWtlRWxlbWVudChzb3VyY2UucG9pbnQsIHNvdXJjZS52ZWN0b3IpO1xuICAgIH1cbiAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaGFuZGxlUmVmUGFpci50YXJnZXQ7XG4gICAgICAgIHRhcmdldEVsZW1lbnQgPSBjcmVhdGVGYWtlRWxlbWVudCh0YXJnZXQucG9pbnQsIHRhcmdldC52ZWN0b3IpO1xuICAgIH1cblxuICAgIGxldCBzb3VyY2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoc291cmNlRWxlbWVudC5wb2ludHMpO1xuICAgIGNvbnN0IHJvdGF0ZWRTb3VyY2VDb3JuZXJQb2ludHMgPVxuICAgICAgICByb3RhdGVQb2ludHNCeUVsZW1lbnQoUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhzb3VyY2VSZWN0YW5nbGUpLCBzb3VyY2VFbGVtZW50KSB8fFxuICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHNvdXJjZVJlY3RhbmdsZSk7XG4gICAgc291cmNlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJvdGF0ZWRTb3VyY2VDb3JuZXJQb2ludHMpO1xuICAgIHNvdXJjZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHNvdXJjZVJlY3RhbmdsZSwgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoc291cmNlRWxlbWVudCkgKiAyKTtcblxuICAgIGxldCB0YXJnZXRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHModGFyZ2V0RWxlbWVudC5wb2ludHMpO1xuICAgIGNvbnN0IHJvdGF0ZWRUYXJnZXRDb3JuZXJQb2ludHMgPVxuICAgICAgICByb3RhdGVQb2ludHNCeUVsZW1lbnQoUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyh0YXJnZXRSZWN0YW5nbGUpLCB0YXJnZXRFbGVtZW50KSB8fFxuICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHRhcmdldFJlY3RhbmdsZSk7XG4gICAgdGFyZ2V0UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJvdGF0ZWRUYXJnZXRDb3JuZXJQb2ludHMpO1xuICAgIHRhcmdldFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHRhcmdldFJlY3RhbmdsZSwgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQodGFyZ2V0RWxlbWVudCkgKiAyKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZVJlY3RhbmdsZSxcbiAgICAgICAgdGFyZ2V0UmVjdGFuZ2xlXG4gICAgfTtcbn07XG5cbmNvbnN0IGNyZWF0ZUZha2VFbGVtZW50ID0gKHN0YXJ0UG9pbnQ6IFBvaW50LCB2ZWN0b3I6IFZlY3RvcikgPT4ge1xuICAgIGNvbnN0IHBvaW50ID0gZ2V0UG9pbnRCeVZlY3RvckNvbXBvbmVudChzdGFydFBvaW50LCB2ZWN0b3IsIC0yNSk7XG4gICAgY29uc3QgcG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldFBvaW50cyhSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlDZW50ZXJQb2ludChwb2ludCwgNTAsIDUwKSk7XG4gICAgcmV0dXJuIGNyZWF0ZUdlb21ldHJ5RWxlbWVudChCYXNpY1NoYXBlcy5yZWN0YW5nbGUsIHBvaW50cywgJycpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRSZW5kZXJQb2ludHMoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSwgcmVuZGVyUG9pbnRzPzogUG9pbnRbXSkge1xuICAgIGxldCBuZXdSZW5kZXJLZXlQb2ludHMgPSByZW5kZXJQb2ludHMgPz8gZ2V0RWxib3dQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgIGNvbnN0IFtuZXh0U291cmNlUG9pbnQsIG5leHRUYXJnZXRQb2ludF0gPSBnZXROZXh0U291cmNlQW5kVGFyZ2V0UG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICBuZXdSZW5kZXJLZXlQb2ludHMuc3BsaWNlKDAsIDEsIG5leHRTb3VyY2VQb2ludCk7XG4gICAgbmV3UmVuZGVyS2V5UG9pbnRzLnNwbGljZSgtMSwgMSwgbmV4dFRhcmdldFBvaW50KTtcbiAgICByZXR1cm4gcmVtb3ZlRHVwbGljYXRlUG9pbnRzKG5ld1JlbmRlcktleVBvaW50cyk7XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Point, idCreator, PlaitBoard, createG, RectangleClient, findElements, drawLinearPath, createMask, createRect, distanceBetweenPointAndPoint, catmullRomFitting } from '@plait/core';
|
|
1
|
+
import { Point, idCreator, PlaitBoard, createG, RectangleClient, findElements, drawLinearPath, createMask, createRect, distanceBetweenPointAndPoint, catmullRomFitting, rotateAntiPointsByElement } from '@plait/core';
|
|
2
2
|
import { pointsOnBezierCurves } from 'points-on-curve';
|
|
3
3
|
import { getPointOnPolyline, getPointByVectorComponent, removeDuplicatePoints, getExtendPoint, isSourceAndTargetIntersect } from '@plait/common';
|
|
4
4
|
import { LineMarkerType, LineShape, PlaitDrawElement, PlaitLine } from '../../interfaces';
|
|
@@ -209,8 +209,12 @@ export const Q2C = (points) => {
|
|
|
209
209
|
};
|
|
210
210
|
export const handleLineCreating = (board, lineShape, sourcePoint, movingPoint, sourceElement, lineShapeG) => {
|
|
211
211
|
const hitElement = getHitOutlineGeometry(board, movingPoint, REACTION_MARGIN);
|
|
212
|
-
const targetConnection = hitElement
|
|
213
|
-
|
|
212
|
+
const targetConnection = hitElement
|
|
213
|
+
? getConnectionByNearestPoint(board, rotateAntiPointsByElement(movingPoint, hitElement) || movingPoint, hitElement)
|
|
214
|
+
: undefined;
|
|
215
|
+
const sourceConnection = sourceElement
|
|
216
|
+
? getConnectionByNearestPoint(board, rotateAntiPointsByElement(sourcePoint, sourceElement) || sourcePoint, sourceElement)
|
|
217
|
+
: undefined;
|
|
214
218
|
const targetBoundId = hitElement ? hitElement.id : undefined;
|
|
215
219
|
const lineGenerator = new LineShapeGenerator(board);
|
|
216
220
|
const memorizedLatest = getLineMemorizedLatest();
|
|
@@ -219,7 +223,7 @@ export const handleLineCreating = (board, lineShape, sourcePoint, movingPoint, s
|
|
|
219
223
|
targetMarker = memorizedLatest.target;
|
|
220
224
|
sourceMarker && delete memorizedLatest.source;
|
|
221
225
|
targetMarker && delete memorizedLatest.target;
|
|
222
|
-
const temporaryLineElement = createLineElement(lineShape, [sourcePoint, movingPoint], { marker: sourceMarker || LineMarkerType.none, connection:
|
|
226
|
+
const temporaryLineElement = createLineElement(lineShape, [sourcePoint, movingPoint], { marker: sourceMarker || LineMarkerType.none, connection: sourceConnection, boundId: sourceElement?.id }, { marker: targetMarker || LineMarkerType.arrow, connection: targetConnection, boundId: targetBoundId }, [], {
|
|
223
227
|
strokeWidth: DefaultLineStyle.strokeWidth,
|
|
224
228
|
...memorizedLatest
|
|
225
229
|
});
|
|
@@ -255,4 +259,4 @@ function drawMask(board, element, id) {
|
|
|
255
259
|
maskTargetFillRect.setAttribute('fill', 'none');
|
|
256
260
|
return { mask, maskTargetFillRect };
|
|
257
261
|
}
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1iYXNpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2xpbmUvbGluZS1iYXNpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsS0FBSyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGVBQWUsRUFDZixZQUFZLEVBRVosY0FBYyxFQUNkLFVBQVUsRUFDVixVQUFVLEVBQ1YsNEJBQTRCLEVBQzVCLGlCQUFpQixFQUNwQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pKLE9BQU8sRUFBYyxjQUFjLEVBQUUsU0FBUyxFQUFZLGdCQUFnQixFQUFFLFNBQVMsRUFBYyxNQUFNLGtCQUFrQixDQUFDO0FBQzVILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNC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QUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRSxhQUFhLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxhQUFhLEVBQUU7WUFDbkMsSUFBSSxFQUFFLE9BQU87U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUNILFlBQVk7SUFDWixNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELGtCQUFrQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBvaW50LFxuICAgIGlkQ3JlYXRvcixcbiAgICBQbGFpdEJvYXJkLFxuICAgIGNyZWF0ZUcsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGZpbmRFbGVtZW50cyxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgZHJhd0xpbmVhclBhdGgsXG4gICAgY3JlYXRlTWFzayxcbiAgICBjcmVhdGVSZWN0LFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgY2F0bXVsbFJvbUZpdHRpbmdcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgcG9pbnRzT25CZXppZXJDdXJ2ZXMgfSBmcm9tICdwb2ludHMtb24tY3VydmUnO1xuaW1wb3J0IHsgZ2V0UG9pbnRPblBvbHlsaW5lLCBnZXRQb2ludEJ5VmVjdG9yQ29tcG9uZW50LCByZW1vdmVEdXBsaWNhdGVQb2ludHMsIGdldEV4dGVuZFBvaW50LCBpc1NvdXJjZUFuZFRhcmdldEludGVyc2VjdCB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgTGluZUhhbmRsZSwgTGluZU1hcmtlclR5cGUsIExpbmVTaGFwZSwgTGluZVRleHQsIFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0TGluZSwgUGxhaXRTaGFwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0TmVhcmVzdFBvaW50IH0gZnJvbSAnLi4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0TGluZURhc2hCeUVsZW1lbnQsIGdldFN0cm9rZUNvbG9yQnlFbGVtZW50LCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4uL3N0eWxlL3N0cm9rZSc7XG5pbXBvcnQgeyBnZXRFbmdpbmUgfSBmcm9tICcuLi8uLi9lbmdpbmVzJztcbmltcG9ydCB7IGdldFNoYXBlIH0gZnJvbSAnLi4vc2hhcGUnO1xuaW1wb3J0IHsgRGVmYXVsdExpbmVTdHlsZSwgTElORV9URVhUX1NQQUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2xpbmUnO1xuaW1wb3J0IHsgTGluZVNoYXBlR2VuZXJhdG9yIH0gZnJvbSAnLi4vLi4vZ2VuZXJhdG9ycy9saW5lLmdlbmVyYXRvcic7XG5pbXBvcnQgeyBSRUFDVElPTl9NQVJHSU4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0SGl0T3V0bGluZUdlb21ldHJ5IH0gZnJvbSAnLi4vcG9zaXRpb24vZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0TGluZU1lbW9yaXplZExhdGVzdCB9IGZyb20gJy4uL21lbW9yaXplJztcbmltcG9ydCB7IGFsaWduUG9pbnRzIH0gZnJvbSAnLi9saW5lLXJlc2l6ZSc7XG5pbXBvcnQgeyBnZXRFbGJvd0xpbmVSb3V0ZU9wdGlvbnMsIGdldExpbmVIYW5kbGVSZWZQYWlyIH0gZnJvbSAnLi9saW5lLWNvbW1vbic7XG5pbXBvcnQgeyBnZXRFbGJvd1BvaW50cywgZ2V0TmV4dFNvdXJjZUFuZFRhcmdldFBvaW50cyB9IGZyb20gJy4vZWxib3cnO1xuaW1wb3J0IHsgZHJhd0xpbmVBcnJvdyB9IGZyb20gJy4vbGluZS1hcnJvdyc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVMaW5lRWxlbWVudCA9IChcbiAgICBzaGFwZTogTGluZVNoYXBlLFxuICAgIHBvaW50czogW1BvaW50LCBQb2ludF0sXG4gICAgc291cmNlOiBMaW5lSGFuZGxlLFxuICAgIHRhcmdldDogTGluZUhhbmRsZSxcbiAgICB0ZXh0cz86IExpbmVUZXh0W10sXG4gICAgb3B0aW9ucz86IFBpY2s8UGxhaXRMaW5lLCAnc3Ryb2tlQ29sb3InIHwgJ3N0cm9rZVdpZHRoJz5cbik6IFBsYWl0TGluZSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkQ3JlYXRvcigpLFxuICAgICAgICB0eXBlOiAnbGluZScsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHRleHRzOiB0ZXh0cyA/IHRleHRzIDogW10sXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgcG9pbnRzLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMaW5lUG9pbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdExpbmUpID0+IHtcbiAgICBzd2l0Y2ggKGVsZW1lbnQuc2hhcGUpIHtcbiAgICAgICAgY2FzZSBMaW5lU2hhcGUuZWxib3c6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRFbGJvd1BvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMaW5lU2hhcGUuY3VydmU6IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDdXJ2ZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gUGxhaXRMaW5lLmdldFBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVSZWZQYWlyID0gZ2V0TGluZUhhbmRsZVJlZlBhaXIoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgcG9pbnRzWzBdID0gaGFuZGxlUmVmUGFpci5zb3VyY2UucG9pbnQ7XG4gICAgICAgICAgICBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdID0gaGFuZGxlUmVmUGFpci50YXJnZXQucG9pbnQ7XG4gICAgICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnZlUG9pbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdExpbmUpID0+IHtcbiAgICBpZiAoZWxlbWVudC5wb2ludHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVJlZlBhaXIgPSBnZXRMaW5lSGFuZGxlUmVmUGFpcihib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHsgc291cmNlLCB0YXJnZXQgfSA9IGhhbmRsZVJlZlBhaXI7XG4gICAgICAgIGNvbnN0IHNvdXJjZUJvdW5kRWxlbWVudCA9IGhhbmRsZVJlZlBhaXIuc291cmNlLmJvdW5kRWxlbWVudDtcbiAgICAgICAgY29uc3QgdGFyZ2V0Qm91bmRFbGVtZW50ID0gaGFuZGxlUmVmUGFpci50YXJnZXQuYm91bmRFbGVtZW50O1xuICAgICAgICBsZXQgY3VydmVQb2ludHM6IFBvaW50W10gPSBbc291cmNlLnBvaW50XTtcbiAgICAgICAgY29uc3Qgc3VtRGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLnNvdXJjZS5wb2ludCwgLi4udGFyZ2V0LnBvaW50KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTIgKyBzdW1EaXN0YW5jZSAvIDM7XG4gICAgICAgIGlmIChzb3VyY2VCb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGN1cnZlUG9pbnRzLnB1c2goZ2V0UG9pbnRCeVZlY3RvckNvbXBvbmVudChzb3VyY2UucG9pbnQsIHNvdXJjZS52ZWN0b3IsIG9mZnNldCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0YXJnZXRCb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGN1cnZlUG9pbnRzLnB1c2goZ2V0UG9pbnRCeVZlY3RvckNvbXBvbmVudCh0YXJnZXQucG9pbnQsIHRhcmdldC52ZWN0b3IsIG9mZnNldCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzU2luZ2xlQm91bmQgPSAoc291cmNlQm91bmRFbGVtZW50ICYmICF0YXJnZXRCb3VuZEVsZW1lbnQpIHx8ICghc291cmNlQm91bmRFbGVtZW50ICYmIHRhcmdldEJvdW5kRWxlbWVudCk7XG4gICAgICAgIGlmIChpc1NpbmdsZUJvdW5kKSB7XG4gICAgICAgICAgICBjdXJ2ZVBvaW50cy5wdXNoKHRhcmdldC5wb2ludCk7XG4gICAgICAgICAgICBjb25zdCBwb2ludHMgPSBRMkMoY3VydmVQb2ludHMpO1xuICAgICAgICAgICAgcmV0dXJuIHBvaW50c09uQmV6aWVyQ3VydmVzKHBvaW50cykgYXMgUG9pbnRbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNvdXJjZUJvdW5kRWxlbWVudCAmJiAhdGFyZ2V0Qm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICBjdXJ2ZVBvaW50cy5wdXNoKGdldFBvaW50QnlWZWN0b3JDb21wb25lbnQoc291cmNlLnBvaW50LCBzb3VyY2UudmVjdG9yLCBvZmZzZXQpKTtcbiAgICAgICAgICAgIGN1cnZlUG9pbnRzLnB1c2goZ2V0UG9pbnRCeVZlY3RvckNvbXBvbmVudCh0YXJnZXQucG9pbnQsIHRhcmdldC52ZWN0b3IsIG9mZnNldCkpO1xuICAgICAgICB9XG4gICAgICAgIGN1cnZlUG9pbnRzLnB1c2godGFyZ2V0LnBvaW50KTtcbiAgICAgICAgcmV0dXJuIHBvaW50c09uQmV6aWVyQ3VydmVzKGN1cnZlUG9pbnRzKSBhcyBQb2ludFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBkYXRhUG9pbnRzID0gUGxhaXRMaW5lLmdldFBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGRhdGFQb2ludHMgPSByZW1vdmVEdXBsaWNhdGVQb2ludHMoZGF0YVBvaW50cyk7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IGNhdG11bGxSb21GaXR0aW5nKGRhdGFQb2ludHMpO1xuICAgICAgICByZXR1cm4gcG9pbnRzT25CZXppZXJDdXJ2ZXMocG9pbnRzKSBhcyBQb2ludFtdO1xuICAgIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaWRkbGVQb2ludHMoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkge1xuICAgIGNvbnN0IHJlc3VsdDogUG9pbnRbXSA9IFtdO1xuICAgIGNvbnN0IHNoYXBlID0gZWxlbWVudC5zaGFwZTtcbiAgICBjb25zdCBoaWRlQnVmZmVyID0gMTA7XG4gICAgaWYgKHNoYXBlID09PSBMaW5lU2hhcGUuc3RyYWlnaHQpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gUGxhaXRMaW5lLmdldFBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLnBvaW50c1tpXSwgLi4ucG9pbnRzW2kgKyAxXSk7XG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBoaWRlQnVmZmVyKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFsocG9pbnRzW2ldWzBdICsgcG9pbnRzW2kgKyAxXVswXSkgLyAyLCAocG9pbnRzW2ldWzFdICsgcG9pbnRzW2kgKyAxXVsxXSkgLyAyXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNoYXBlID09PSBMaW5lU2hhcGUuY3VydmUpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gUGxhaXRMaW5lLmdldFBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHBvaW50c09uQmV6aWVyID0gZ2V0Q3VydmVQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSAwO1xuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSBwb2ludHNPbkJlemllci5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29uc3QgbWlkZGxlSW5kZXggPSBNYXRoLnJvdW5kKChzdGFydCArIGVuZEluZGV4KSAvIDIpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocG9pbnRzT25CZXppZXJbbWlkZGxlSW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwb2ludHNPbkJlemllci5maW5kSW5kZXgocG9pbnQgPT4gcG9pbnRbMF0gPT09IHBvaW50c1tpXVswXSAmJiBwb2ludFsxXSA9PT0gcG9pbnRzW2ldWzFdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHBvaW50c09uQmV6aWVyLmZpbmRJbmRleChwb2ludCA9PiBwb2ludFswXSA9PT0gcG9pbnRzW2kgKyAxXVswXSAmJiBwb2ludFsxXSA9PT0gcG9pbnRzW2kgKyAxXVsxXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlSW5kZXggPSBNYXRoLnJvdW5kKChzdGFydEluZGV4ICsgZW5kSW5kZXgpIC8gMik7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLnBvaW50c1tpXSwgLi4ucG9pbnRzW2kgKyAxXSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgaGlkZUJ1ZmZlcikgY29udGludWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocG9pbnRzT25CZXppZXJbbWlkZGxlSW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2hhcGUgPT09IExpbmVTaGFwZS5lbGJvdykge1xuICAgICAgICBjb25zdCByZW5kZXJQb2ludHMgPSBnZXRFbGJvd1BvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRFbGJvd0xpbmVSb3V0ZU9wdGlvbnMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBpc0ludGVyc2VjdCA9IGlzU291cmNlQW5kVGFyZ2V0SW50ZXJzZWN0KG9wdGlvbnMpO1xuICAgICAgICBpZiAoIWlzSW50ZXJzZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBbbmV4dFNvdXJjZVBvaW50LCBuZXh0VGFyZ2V0UG9pbnRdID0gZ2V0TmV4dFNvdXJjZUFuZFRhcmdldFBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlclBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChpID09IDAgJiYgUG9pbnQuaXNFcXVhbHMocmVuZGVyUG9pbnRzW2kgKyAxXSwgbmV4dFNvdXJjZVBvaW50KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGkgPT09IHJlbmRlclBvaW50cy5sZW5ndGggLSAyICYmIFBvaW50LmlzRXF1YWxzKHJlbmRlclBvaW50c1tyZW5kZXJQb2ludHMubGVuZ3RoIC0gMl0sIG5leHRUYXJnZXRQb2ludCkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBbY3VycmVudFgsIGN1cnJlbnRZXSA9IHJlbmRlclBvaW50c1tpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBbbmV4dFgsIG5leHRZXSA9IHJlbmRlclBvaW50c1tpICsgMV07XG4gICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlUG9pbnQgPSBbKGN1cnJlbnRYICsgbmV4dFgpIC8gMiwgKGN1cnJlbnRZICsgbmV4dFkpIC8gMl0gYXMgUG9pbnQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobWlkZGxlUG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBjb25zdCBkcmF3TGluZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lKSA9PiB7XG4gICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IGdldFN0cm9rZUNvbG9yQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCBzdHJva2VMaW5lRGFzaCA9IGdldExpbmVEYXNoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IHN0cm9rZTogc3Ryb2tlQ29sb3IsIHN0cm9rZVdpZHRoLCBzdHJva2VMaW5lRGFzaCB9O1xuICAgIGNvbnN0IGxpbmVHID0gY3JlYXRlRygpO1xuICAgIGxldCBwb2ludHMgPSBnZXRMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICBsZXQgbGluZTtcbiAgICBpZiAoZWxlbWVudC5zaGFwZSA9PT0gTGluZVNoYXBlLmN1cnZlKSB7XG4gICAgICAgIGxpbmUgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKS5jdXJ2ZShwb2ludHMsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxpbmUgPSBkcmF3TGluZWFyUGF0aChwb2ludHMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGlkQ3JlYXRvcigpO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKCdtYXNrJywgYHVybCgjJHtpZH0pYCk7XG4gICAgbGluZUcuYXBwZW5kQ2hpbGQobGluZSk7XG4gICAgY29uc3QgeyBtYXNrLCBtYXNrVGFyZ2V0RmlsbFJlY3QgfSA9IGRyYXdNYXNrKGJvYXJkLCBlbGVtZW50LCBpZCk7XG4gICAgbGluZUcuYXBwZW5kQ2hpbGQobWFzayk7XG4gICAgbGluZS5hcHBlbmRDaGlsZChtYXNrVGFyZ2V0RmlsbFJlY3QpO1xuICAgIGNvbnN0IGFycm93ID0gZHJhd0xpbmVBcnJvdyhlbGVtZW50LCBwb2ludHMsIHsgc3Ryb2tlOiBzdHJva2VDb2xvciwgc3Ryb2tlV2lkdGggfSk7XG4gICAgYXJyb3cgJiYgbGluZUcuYXBwZW5kQ2hpbGQoYXJyb3cpO1xuICAgIHJldHVybiBsaW5lRztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb25uZWN0aW9uQnlOZWFyZXN0UG9pbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50OiBQb2ludCwgaGl0RWxlbWVudDogUGxhaXRTaGFwZSk6IFBvaW50ID0+IHtcbiAgICBsZXQgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGhpdEVsZW1lbnQucG9pbnRzKTtcbiAgICBsZXQgbmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50KGhpdEVsZW1lbnQsIHBvaW50KTtcbiAgICBjb25zdCBoaXRDb25uZWN0b3IgPSBnZXRIaXRDb25uZWN0b3JQb2ludChuZWFyZXN0UG9pbnQsIGhpdEVsZW1lbnQsIHJlY3RhbmdsZSk7XG4gICAgbmVhcmVzdFBvaW50ID0gaGl0Q29ubmVjdG9yID8gaGl0Q29ubmVjdG9yIDogbmVhcmVzdFBvaW50O1xuICAgIHJldHVybiBbKG5lYXJlc3RQb2ludFswXSAtIHJlY3RhbmdsZS54KSAvIHJlY3RhbmdsZS53aWR0aCwgKG5lYXJlc3RQb2ludFsxXSAtIHJlY3RhbmdsZS55KSAvIHJlY3RhbmdsZS5oZWlnaHRdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdENvbm5lY3RvclBvaW50ID0gKHBvaW50OiBQb2ludCwgaGl0RWxlbWVudDogUGxhaXRTaGFwZSwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICBjb25zdCBzaGFwZSA9IGdldFNoYXBlKGhpdEVsZW1lbnQpO1xuICAgIGNvbnN0IGNvbm5lY3RvciA9IGdldEVuZ2luZShzaGFwZSkuZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgY29uc3QgcG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldFBvaW50cyhSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlDZW50ZXJQb2ludChwb2ludCwgMTAsIDEwKSk7XG4gICAgY29uc3QgcG9pbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocG9pbnRzKTtcbiAgICByZXR1cm4gY29ubmVjdG9yLmZpbmQocG9pbnQgPT4ge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHBvaW50UmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3BvaW50LCBwb2ludF0pKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMaW5lVGV4dFJlY3RhbmdsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBpbmRleDogbnVtYmVyKTogUmVjdGFuZ2xlQ2xpZW50ID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gZWxlbWVudC50ZXh0c1tpbmRleF07XG4gICAgY29uc3QgZWxib3dQb2ludHMgPSBnZXRMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCBwb2ludCA9IGdldFBvaW50T25Qb2x5bGluZShlbGJvd1BvaW50cywgdGV4dC5wb3NpdGlvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcG9pbnRbMF0gLSB0ZXh0LndpZHRoISAvIDIsXG4gICAgICAgIHk6IHBvaW50WzFdIC0gdGV4dC5oZWlnaHQhIC8gMixcbiAgICAgICAgd2lkdGg6IHRleHQud2lkdGghLFxuICAgICAgICBoZWlnaHQ6IHRleHQuaGVpZ2h0IVxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGluZXMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gZmluZEVsZW1lbnRzKGJvYXJkLCB7XG4gICAgICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBQbGFpdERyYXdFbGVtZW50LmlzTGluZShlbGVtZW50KSxcbiAgICAgICAgcmVjdXJzaW9uOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBQbGFpdERyYXdFbGVtZW50LmlzRHJhd0VsZW1lbnQoZWxlbWVudClcbiAgICB9KSBhcyBQbGFpdExpbmVbXTtcbn07XG5cbi8vIHF1YWRyYXRpYyBCZXppZXIgdG8gY3ViaWMgQmV6aWVyXG5leHBvcnQgY29uc3QgUTJDID0gKHBvaW50czogUG9pbnRbXSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IG51bVNlZ21lbnRzID0gcG9pbnRzLmxlbmd0aCAvIDM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1TZWdtZW50czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcG9pbnRzW2ldO1xuICAgICAgICBjb25zdCBxQ29udHJvbCA9IHBvaW50c1tpICsgMV07XG4gICAgICAgIGNvbnN0IGVuZCA9IHBvaW50c1tpICsgMl07XG4gICAgICAgIGNvbnN0IHN0YXJ0RGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLnN0YXJ0LCAuLi5xQ29udHJvbCk7XG4gICAgICAgIGNvbnN0IGVuZERpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5lbmQsIC4uLnFDb250cm9sKTtcbiAgICAgICAgY29uc3QgY0NvbnRyb2wxID0gZ2V0RXh0ZW5kUG9pbnQoc3RhcnQsIHFDb250cm9sLCAoc3RhcnREaXN0YW5jZSAqIDIpIC8gMyk7XG4gICAgICAgIGNvbnN0IGNDb250cm9sMiA9IGdldEV4dGVuZFBvaW50KGVuZCwgcUNvbnRyb2wsIChlbmREaXN0YW5jZSAqIDIpIC8gMyk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHN0YXJ0LCBjQ29udHJvbDEsIGNDb250cm9sMiwgZW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVMaW5lQ3JlYXRpbmcgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgbGluZVNoYXBlOiBMaW5lU2hhcGUsXG4gICAgc291cmNlUG9pbnQ6IFBvaW50LFxuICAgIG1vdmluZ1BvaW50OiBQb2ludCxcbiAgICBzb3VyY2VFbGVtZW50OiBQbGFpdFNoYXBlIHwgbnVsbCxcbiAgICBsaW5lU2hhcGVHOiBTVkdHRWxlbWVudFxuKSA9PiB7XG4gICAgY29uc3QgaGl0RWxlbWVudCA9IGdldEhpdE91dGxpbmVHZW9tZXRyeShib2FyZCwgbW92aW5nUG9pbnQsIFJFQUNUSU9OX01BUkdJTik7XG4gICAgY29uc3QgdGFyZ2V0Q29ubmVjdGlvbiA9IGhpdEVsZW1lbnQgPyBnZXRDb25uZWN0aW9uQnlOZWFyZXN0UG9pbnQoYm9hcmQsIG1vdmluZ1BvaW50LCBoaXRFbGVtZW50KSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gc291cmNlRWxlbWVudCA/IGdldENvbm5lY3Rpb25CeU5lYXJlc3RQb2ludChib2FyZCwgc291cmNlUG9pbnQsIHNvdXJjZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRhcmdldEJvdW5kSWQgPSBoaXRFbGVtZW50ID8gaGl0RWxlbWVudC5pZCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsaW5lR2VuZXJhdG9yID0gbmV3IExpbmVTaGFwZUdlbmVyYXRvcihib2FyZCk7XG4gICAgY29uc3QgbWVtb3JpemVkTGF0ZXN0ID0gZ2V0TGluZU1lbW9yaXplZExhdGVzdCgpO1xuICAgIGxldCBzb3VyY2VNYXJrZXIsIHRhcmdldE1hcmtlcjtcbiAgICBzb3VyY2VNYXJrZXIgPSBtZW1vcml6ZWRMYXRlc3Quc291cmNlO1xuICAgIHRhcmdldE1hcmtlciA9IG1lbW9yaXplZExhdGVzdC50YXJnZXQ7XG4gICAgc291cmNlTWFya2VyICYmIGRlbGV0ZSBtZW1vcml6ZWRMYXRlc3Quc291cmNlO1xuICAgIHRhcmdldE1hcmtlciAmJiBkZWxldGUgbWVtb3JpemVkTGF0ZXN0LnRhcmdldDtcbiAgICBjb25zdCB0ZW1wb3JhcnlMaW5lRWxlbWVudCA9IGNyZWF0ZUxpbmVFbGVtZW50KFxuICAgICAgICBsaW5lU2hhcGUsXG4gICAgICAgIFtzb3VyY2VQb2ludCwgbW92aW5nUG9pbnRdLFxuICAgICAgICB7IG1hcmtlcjogc291cmNlTWFya2VyIHx8IExpbmVNYXJrZXJUeXBlLm5vbmUsIGNvbm5lY3Rpb246IGNvbm5lY3Rpb24sIGJvdW5kSWQ6IHNvdXJjZUVsZW1lbnQ/LmlkIH0sXG4gICAgICAgIHsgbWFya2VyOiB0YXJnZXRNYXJrZXIgfHwgTGluZU1hcmtlclR5cGUuYXJyb3csIGNvbm5lY3Rpb246IHRhcmdldENvbm5lY3Rpb24sIGJvdW5kSWQ6IHRhcmdldEJvdW5kSWQgfSxcbiAgICAgICAgW10sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBEZWZhdWx0TGluZVN0eWxlLnN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgLi4ubWVtb3JpemVkTGF0ZXN0XG4gICAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IGxpbmVQb2ludHMgPSBnZXRMaW5lUG9pbnRzKGJvYXJkLCB0ZW1wb3JhcnlMaW5lRWxlbWVudCk7XG4gICAgY29uc3Qgb3RoZXJQb2ludCA9IGxpbmVQb2ludHNbMF07XG4gICAgdGVtcG9yYXJ5TGluZUVsZW1lbnQucG9pbnRzWzFdID0gYWxpZ25Qb2ludHMob3RoZXJQb2ludCwgbW92aW5nUG9pbnQpO1xuICAgIGxpbmVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodGVtcG9yYXJ5TGluZUVsZW1lbnQsIGxpbmVTaGFwZUcpO1xuICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChsaW5lU2hhcGVHKTtcbiAgICByZXR1cm4gdGVtcG9yYXJ5TGluZUVsZW1lbnQ7XG59O1xuXG5mdW5jdGlvbiBkcmF3TWFzayhib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWFzayA9IGNyZWF0ZU1hc2soKTtcbiAgICBtYXNrLnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7XG4gICAgY29uc3QgcG9pbnRzID0gZ2V0TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgbGV0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhwb2ludHMpO1xuICAgIHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRPdXRsaW5lUmVjdGFuZ2xlKHJlY3RhbmdsZSwgLTMwKTtcbiAgICBjb25zdCBtYXNrRmlsbFJlY3QgPSBjcmVhdGVSZWN0KHJlY3RhbmdsZSwge1xuICAgICAgICBmaWxsOiAnd2hpdGUnXG4gICAgfSk7XG4gICAgbWFzay5hcHBlbmRDaGlsZChtYXNrRmlsbFJlY3QpO1xuXG4gICAgY29uc3QgdGV4dHMgPSBlbGVtZW50LnRleHRzO1xuICAgIHRleHRzLmZvckVhY2goKHRleHQsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCB0ZXh0UmVjdGFuZ2xlID0gZ2V0TGluZVRleHRSZWN0YW5nbGUoYm9hcmQsIGVsZW1lbnQsIGluZGV4KTtcbiAgICAgICAgdGV4dFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHRleHRSZWN0YW5nbGUsIExJTkVfVEVYVF9TUEFDRSAqIDIpO1xuICAgICAgICBjb25zdCByZWN0ID0gY3JlYXRlUmVjdCh0ZXh0UmVjdGFuZ2xlLCB7XG4gICAgICAgICAgICBmaWxsOiAnYmxhY2snXG4gICAgICAgIH0pO1xuICAgICAgICBtYXNrLmFwcGVuZENoaWxkKHJlY3QpO1xuICAgIH0pO1xuICAgIC8vIG9wZW4gbGluZVxuICAgIGNvbnN0IG1hc2tUYXJnZXRGaWxsUmVjdCA9IGNyZWF0ZVJlY3QocmVjdGFuZ2xlKTtcbiAgICBtYXNrVGFyZ2V0RmlsbFJlY3Quc2V0QXR0cmlidXRlKCdvcGFjaXR5JywgJzAnKTtcbiAgICBtYXNrVGFyZ2V0RmlsbFJlY3Quc2V0QXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgICByZXR1cm4geyBtYXNrLCBtYXNrVGFyZ2V0RmlsbFJlY3QgfTtcbn1cbiJdfQ==
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1iYXNpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2xpbmUvbGluZS1iYXNpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsS0FBSyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGVBQWUsRUFDZixZQUFZLEVBRVosY0FBYyxFQUNkLFVBQVUsRUFDVixVQUFVLEVBQ1YsNEJBQTRCLEVBQzVCLGlCQUFpQixFQUdqQix5QkFBeUIsRUFDNUIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUNILGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLGNBQWMsRUFDZCwwQkFBMEIsRUFDN0IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLGNBQWMsRUFBRSxTQUFTLEVBQVksZ0JBQWdCLEVBQUUsU0FBUyxFQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDNUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztB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QUMsS0FBSyxDQUFDO0lBQzVCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDMUIsSUFBSSxhQUFhLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRSxhQUFhLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxhQUFhLEVBQUU7WUFDbkMsSUFBSSxFQUFFLE9BQU87U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUNILFlBQVk7SUFDWixNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELGtCQUFrQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBvaW50LFxuICAgIGlkQ3JlYXRvcixcbiAgICBQbGFpdEJvYXJkLFxuICAgIGNyZWF0ZUcsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGZpbmRFbGVtZW50cyxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgZHJhd0xpbmVhclBhdGgsXG4gICAgY3JlYXRlTWFzayxcbiAgICBjcmVhdGVSZWN0LFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgY2F0bXVsbFJvbUZpdHRpbmcsXG4gICAgcm90YXRlUG9pbnRzLFxuICAgIGhhc1ZhbGlkQW5nbGUsXG4gICAgcm90YXRlQW50aVBvaW50c0J5RWxlbWVudFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBwb2ludHNPbkJlemllckN1cnZlcyB9IGZyb20gJ3BvaW50cy1vbi1jdXJ2ZSc7XG5pbXBvcnQge1xuICAgIGdldFBvaW50T25Qb2x5bGluZSxcbiAgICBnZXRQb2ludEJ5VmVjdG9yQ29tcG9uZW50LFxuICAgIHJlbW92ZUR1cGxpY2F0ZVBvaW50cyxcbiAgICBnZXRFeHRlbmRQb2ludCxcbiAgICBpc1NvdXJjZUFuZFRhcmdldEludGVyc2VjdFxufSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IExpbmVIYW5kbGUsIExpbmVNYXJrZXJUeXBlLCBMaW5lU2hhcGUsIExpbmVUZXh0LCBQbGFpdERyYXdFbGVtZW50LCBQbGFpdExpbmUsIFBsYWl0U2hhcGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldE5lYXJlc3RQb2ludCB9IGZyb20gJy4uL2dlb21ldHJ5JztcbmltcG9ydCB7IGdldExpbmVEYXNoQnlFbGVtZW50LCBnZXRTdHJva2VDb2xvckJ5RWxlbWVudCwgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQgfSBmcm9tICcuLi9zdHlsZS9zdHJva2UnO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBnZXRTaGFwZSB9IGZyb20gJy4uL3NoYXBlJztcbmltcG9ydCB7IERlZmF1bHRMaW5lU3R5bGUsIExJTkVfVEVYVF9TUEFDRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9saW5lJztcbmltcG9ydCB7IExpbmVTaGFwZUdlbmVyYXRvciB9IGZyb20gJy4uLy4uL2dlbmVyYXRvcnMvbGluZS5nZW5lcmF0b3InO1xuaW1wb3J0IHsgUkVBQ1RJT05fTUFSR0lOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldEhpdE91dGxpbmVHZW9tZXRyeSB9IGZyb20gJy4uL3Bvc2l0aW9uL2dlb21ldHJ5JztcbmltcG9ydCB7IGdldExpbmVNZW1vcml6ZWRMYXRlc3QgfSBmcm9tICcuLi9tZW1vcml6ZSc7XG5pbXBvcnQgeyBhbGlnblBvaW50cyB9IGZyb20gJy4vbGluZS1yZXNpemUnO1xuaW1wb3J0IHsgZ2V0RWxib3dMaW5lUm91dGVPcHRpb25zLCBnZXRMaW5lSGFuZGxlUmVmUGFpciB9IGZyb20gJy4vbGluZS1jb21tb24nO1xuaW1wb3J0IHsgZ2V0RWxib3dQb2ludHMsIGdldE5leHRTb3VyY2VBbmRUYXJnZXRQb2ludHMgfSBmcm9tICcuL2VsYm93JztcbmltcG9ydCB7IGRyYXdMaW5lQXJyb3cgfSBmcm9tICcuL2xpbmUtYXJyb3cnO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTGluZUVsZW1lbnQgPSAoXG4gICAgc2hhcGU6IExpbmVTaGFwZSxcbiAgICBwb2ludHM6IFtQb2ludCwgUG9pbnRdLFxuICAgIHNvdXJjZTogTGluZUhhbmRsZSxcbiAgICB0YXJnZXQ6IExpbmVIYW5kbGUsXG4gICAgdGV4dHM/OiBMaW5lVGV4dFtdLFxuICAgIG9wdGlvbnM/OiBQaWNrPFBsYWl0TGluZSwgJ3N0cm9rZUNvbG9yJyB8ICdzdHJva2VXaWR0aCc+XG4pOiBQbGFpdExpbmUgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgdHlwZTogJ2xpbmUnLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICB0ZXh0czogdGV4dHMgPyB0ZXh0cyA6IFtdLFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGluZVBvaW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lKSA9PiB7XG4gICAgc3dpdGNoIChlbGVtZW50LnNoYXBlKSB7XG4gICAgICAgIGNhc2UgTGluZVNoYXBlLmVsYm93OiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0RWxib3dQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTGluZVNoYXBlLmN1cnZlOiB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0Q3VydmVQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IFBsYWl0TGluZS5nZXRQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlUmVmUGFpciA9IGdldExpbmVIYW5kbGVSZWZQYWlyKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgICAgIHBvaW50c1swXSA9IGhhbmRsZVJlZlBhaXIuc291cmNlLnBvaW50O1xuICAgICAgICAgICAgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSA9IGhhbmRsZVJlZlBhaXIudGFyZ2V0LnBvaW50O1xuICAgICAgICAgICAgcmV0dXJuIHBvaW50cztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJ2ZVBvaW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQucG9pbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBjb25zdCBoYW5kbGVSZWZQYWlyID0gZ2V0TGluZUhhbmRsZVJlZlBhaXIoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCB7IHNvdXJjZSwgdGFyZ2V0IH0gPSBoYW5kbGVSZWZQYWlyO1xuICAgICAgICBjb25zdCBzb3VyY2VCb3VuZEVsZW1lbnQgPSBoYW5kbGVSZWZQYWlyLnNvdXJjZS5ib3VuZEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRhcmdldEJvdW5kRWxlbWVudCA9IGhhbmRsZVJlZlBhaXIudGFyZ2V0LmJvdW5kRWxlbWVudDtcbiAgICAgICAgbGV0IGN1cnZlUG9pbnRzOiBQb2ludFtdID0gW3NvdXJjZS5wb2ludF07XG4gICAgICAgIGNvbnN0IHN1bURpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5zb3VyY2UucG9pbnQsIC4uLnRhcmdldC5wb2ludCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDEyICsgc3VtRGlzdGFuY2UgLyAzO1xuICAgICAgICBpZiAoc291cmNlQm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICBjdXJ2ZVBvaW50cy5wdXNoKGdldFBvaW50QnlWZWN0b3JDb21wb25lbnQoc291cmNlLnBvaW50LCBzb3VyY2UudmVjdG9yLCBvZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGFyZ2V0Qm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICBjdXJ2ZVBvaW50cy5wdXNoKGdldFBvaW50QnlWZWN0b3JDb21wb25lbnQodGFyZ2V0LnBvaW50LCB0YXJnZXQudmVjdG9yLCBvZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1NpbmdsZUJvdW5kID0gKHNvdXJjZUJvdW5kRWxlbWVudCAmJiAhdGFyZ2V0Qm91bmRFbGVtZW50KSB8fCAoIXNvdXJjZUJvdW5kRWxlbWVudCAmJiB0YXJnZXRCb3VuZEVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNTaW5nbGVCb3VuZCkge1xuICAgICAgICAgICAgY3VydmVQb2ludHMucHVzaCh0YXJnZXQucG9pbnQpO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gUTJDKGN1cnZlUG9pbnRzKTtcbiAgICAgICAgICAgIHJldHVybiBwb2ludHNPbkJlemllckN1cnZlcyhwb2ludHMpIGFzIFBvaW50W107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzb3VyY2VCb3VuZEVsZW1lbnQgJiYgIXRhcmdldEJvdW5kRWxlbWVudCkge1xuICAgICAgICAgICAgY3VydmVQb2ludHMucHVzaChnZXRQb2ludEJ5VmVjdG9yQ29tcG9uZW50KHNvdXJjZS5wb2ludCwgc291cmNlLnZlY3Rvciwgb2Zmc2V0KSk7XG4gICAgICAgICAgICBjdXJ2ZVBvaW50cy5wdXNoKGdldFBvaW50QnlWZWN0b3JDb21wb25lbnQodGFyZ2V0LnBvaW50LCB0YXJnZXQudmVjdG9yLCBvZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJ2ZVBvaW50cy5wdXNoKHRhcmdldC5wb2ludCk7XG4gICAgICAgIHJldHVybiBwb2ludHNPbkJlemllckN1cnZlcyhjdXJ2ZVBvaW50cykgYXMgUG9pbnRbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZGF0YVBvaW50cyA9IFBsYWl0TGluZS5nZXRQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBkYXRhUG9pbnRzID0gcmVtb3ZlRHVwbGljYXRlUG9pbnRzKGRhdGFQb2ludHMpO1xuICAgICAgICBjb25zdCBwb2ludHMgPSBjYXRtdWxsUm9tRml0dGluZyhkYXRhUG9pbnRzKTtcbiAgICAgICAgcmV0dXJuIHBvaW50c09uQmV6aWVyQ3VydmVzKHBvaW50cykgYXMgUG9pbnRbXTtcbiAgICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlkZGxlUG9pbnRzKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdExpbmUpIHtcbiAgICBjb25zdCByZXN1bHQ6IFBvaW50W10gPSBbXTtcbiAgICBjb25zdCBzaGFwZSA9IGVsZW1lbnQuc2hhcGU7XG4gICAgY29uc3QgaGlkZUJ1ZmZlciA9IDEwO1xuICAgIGlmIChzaGFwZSA9PT0gTGluZVNoYXBlLnN0cmFpZ2h0KSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IFBsYWl0TGluZS5nZXRQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5wb2ludHNbaV0sIC4uLnBvaW50c1tpICsgMV0pO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgaGlkZUJ1ZmZlcikgY29udGludWU7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbKHBvaW50c1tpXVswXSArIHBvaW50c1tpICsgMV1bMF0pIC8gMiwgKHBvaW50c1tpXVsxXSArIHBvaW50c1tpICsgMV1bMV0pIC8gMl0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChzaGFwZSA9PT0gTGluZVNoYXBlLmN1cnZlKSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IFBsYWl0TGluZS5nZXRQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBwb2ludHNPbkJlemllciA9IGdldEN1cnZlUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgaWYgKHBvaW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gcG9pbnRzT25CZXppZXIubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IG1pZGRsZUluZGV4ID0gTWF0aC5yb3VuZCgoc3RhcnQgKyBlbmRJbmRleCkgLyAyKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBvaW50c09uQmV6aWVyW21pZGRsZUluZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gcG9pbnRzT25CZXppZXIuZmluZEluZGV4KHBvaW50ID0+IHBvaW50WzBdID09PSBwb2ludHNbaV1bMF0gJiYgcG9pbnRbMV0gPT09IHBvaW50c1tpXVsxXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSBwb2ludHNPbkJlemllci5maW5kSW5kZXgocG9pbnQgPT4gcG9pbnRbMF0gPT09IHBvaW50c1tpICsgMV1bMF0gJiYgcG9pbnRbMV0gPT09IHBvaW50c1tpICsgMV1bMV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZUluZGV4ID0gTWF0aC5yb3VuZCgoc3RhcnRJbmRleCArIGVuZEluZGV4KSAvIDIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5wb2ludHNbaV0sIC4uLnBvaW50c1tpICsgMV0pO1xuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8IGhpZGVCdWZmZXIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBvaW50c09uQmV6aWVyW21pZGRsZUluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNoYXBlID09PSBMaW5lU2hhcGUuZWxib3cpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyUG9pbnRzID0gZ2V0RWxib3dQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZ2V0RWxib3dMaW5lUm91dGVPcHRpb25zKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNJbnRlcnNlY3QgPSBpc1NvdXJjZUFuZFRhcmdldEludGVyc2VjdChvcHRpb25zKTtcbiAgICAgICAgaWYgKCFpc0ludGVyc2VjdCkge1xuICAgICAgICAgICAgY29uc3QgW25leHRTb3VyY2VQb2ludCwgbmV4dFRhcmdldFBvaW50XSA9IGdldE5leHRTb3VyY2VBbmRUYXJnZXRQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZW5kZXJQb2ludHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoaSA9PSAwICYmIFBvaW50LmlzRXF1YWxzKHJlbmRlclBvaW50c1tpICsgMV0sIG5leHRTb3VyY2VQb2ludCkpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpID09PSByZW5kZXJQb2ludHMubGVuZ3RoIC0gMiAmJiBQb2ludC5pc0VxdWFscyhyZW5kZXJQb2ludHNbcmVuZGVyUG9pbnRzLmxlbmd0aCAtIDJdLCBuZXh0VGFyZ2V0UG9pbnQpKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgW2N1cnJlbnRYLCBjdXJyZW50WV0gPSByZW5kZXJQb2ludHNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgW25leHRYLCBuZXh0WV0gPSByZW5kZXJQb2ludHNbaSArIDFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZVBvaW50ID0gWyhjdXJyZW50WCArIG5leHRYKSAvIDIsIChjdXJyZW50WSArIG5leHRZKSAvIDJdIGFzIFBvaW50O1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG1pZGRsZVBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY29uc3QgZHJhd0xpbmUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSBnZXRTdHJva2VDb2xvckJ5RWxlbWVudChib2FyZCwgZWxlbWVudCk7XG4gICAgY29uc3Qgc3Ryb2tlTGluZURhc2ggPSBnZXRMaW5lRGFzaEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICBjb25zdCBvcHRpb25zID0geyBzdHJva2U6IHN0cm9rZUNvbG9yLCBzdHJva2VXaWR0aCwgc3Ryb2tlTGluZURhc2ggfTtcbiAgICBjb25zdCBsaW5lRyA9IGNyZWF0ZUcoKTtcbiAgICBsZXQgcG9pbnRzID0gZ2V0TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgbGV0IGxpbmU7XG4gICAgaWYgKGVsZW1lbnQuc2hhcGUgPT09IExpbmVTaGFwZS5jdXJ2ZSkge1xuICAgICAgICBsaW5lID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCkuY3VydmUocG9pbnRzLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lID0gZHJhd0xpbmVhclBhdGgocG9pbnRzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSBpZENyZWF0b3IoKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZSgnbWFzaycsIGB1cmwoIyR7aWR9KWApO1xuICAgIGxpbmVHLmFwcGVuZENoaWxkKGxpbmUpO1xuICAgIGNvbnN0IHsgbWFzaywgbWFza1RhcmdldEZpbGxSZWN0IH0gPSBkcmF3TWFzayhib2FyZCwgZWxlbWVudCwgaWQpO1xuICAgIGxpbmVHLmFwcGVuZENoaWxkKG1hc2spO1xuICAgIGxpbmUuYXBwZW5kQ2hpbGQobWFza1RhcmdldEZpbGxSZWN0KTtcbiAgICBjb25zdCBhcnJvdyA9IGRyYXdMaW5lQXJyb3coZWxlbWVudCwgcG9pbnRzLCB7IHN0cm9rZTogc3Ryb2tlQ29sb3IsIHN0cm9rZVdpZHRoIH0pO1xuICAgIGFycm93ICYmIGxpbmVHLmFwcGVuZENoaWxkKGFycm93KTtcbiAgICByZXR1cm4gbGluZUc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvbkJ5TmVhcmVzdFBvaW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQsIGhpdEVsZW1lbnQ6IFBsYWl0U2hhcGUpOiBQb2ludCA9PiB7XG4gICAgbGV0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhoaXRFbGVtZW50LnBvaW50cyk7XG4gICAgbGV0IG5lYXJlc3RQb2ludCA9IGdldE5lYXJlc3RQb2ludChoaXRFbGVtZW50LCBwb2ludCk7XG4gICAgY29uc3QgaGl0Q29ubmVjdG9yID0gZ2V0SGl0Q29ubmVjdG9yUG9pbnQobmVhcmVzdFBvaW50LCBoaXRFbGVtZW50LCByZWN0YW5nbGUpO1xuICAgIG5lYXJlc3RQb2ludCA9IGhpdENvbm5lY3RvciA/IGhpdENvbm5lY3RvciA6IG5lYXJlc3RQb2ludDtcbiAgICByZXR1cm4gWyhuZWFyZXN0UG9pbnRbMF0gLSByZWN0YW5nbGUueCkgLyByZWN0YW5nbGUud2lkdGgsIChuZWFyZXN0UG9pbnRbMV0gLSByZWN0YW5nbGUueSkgLyByZWN0YW5nbGUuaGVpZ2h0XTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRDb25uZWN0b3JQb2ludCA9IChwb2ludDogUG9pbnQsIGhpdEVsZW1lbnQ6IFBsYWl0U2hhcGUsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3Qgc2hhcGUgPSBnZXRTaGFwZShoaXRFbGVtZW50KTtcbiAgICBjb25zdCBjb25uZWN0b3IgPSBnZXRFbmdpbmUoc2hhcGUpLmdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIGNvbnN0IHBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5Q2VudGVyUG9pbnQocG9pbnQsIDEwLCAxMCkpO1xuICAgIGNvbnN0IHBvaW50UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyk7XG4gICAgcmV0dXJuIGNvbm5lY3Rvci5maW5kKHBvaW50ID0+IHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChwb2ludFJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGluZVRleHRSZWN0YW5nbGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSwgaW5kZXg6IG51bWJlcik6IFJlY3RhbmdsZUNsaWVudCA9PiB7XG4gICAgY29uc3QgdGV4dCA9IGVsZW1lbnQudGV4dHNbaW5kZXhdO1xuICAgIGNvbnN0IGVsYm93UG9pbnRzID0gZ2V0TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgY29uc3QgcG9pbnQgPSBnZXRQb2ludE9uUG9seWxpbmUoZWxib3dQb2ludHMsIHRleHQucG9zaXRpb24pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHBvaW50WzBdIC0gdGV4dC53aWR0aCEgLyAyLFxuICAgICAgICB5OiBwb2ludFsxXSAtIHRleHQuaGVpZ2h0ISAvIDIsXG4gICAgICAgIHdpZHRoOiB0ZXh0LndpZHRoISxcbiAgICAgICAgaGVpZ2h0OiB0ZXh0LmhlaWdodCFcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExpbmVzID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIGZpbmRFbGVtZW50cyhib2FyZCwge1xuICAgICAgICBtYXRjaDogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gUGxhaXREcmF3RWxlbWVudC5pc0xpbmUoZWxlbWVudCksXG4gICAgICAgIHJlY3Vyc2lvbjogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gUGxhaXREcmF3RWxlbWVudC5pc0RyYXdFbGVtZW50KGVsZW1lbnQpXG4gICAgfSkgYXMgUGxhaXRMaW5lW107XG59O1xuXG4vLyBxdWFkcmF0aWMgQmV6aWVyIHRvIGN1YmljIEJlemllclxuZXhwb3J0IGNvbnN0IFEyQyA9IChwb2ludHM6IFBvaW50W10pID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBjb25zdCBudW1TZWdtZW50cyA9IHBvaW50cy5sZW5ndGggLyAzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtU2VnbWVudHM7IGkrKykge1xuICAgICAgICBjb25zdCBzdGFydCA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgcUNvbnRyb2wgPSBwb2ludHNbaSArIDFdO1xuICAgICAgICBjb25zdCBlbmQgPSBwb2ludHNbaSArIDJdO1xuICAgICAgICBjb25zdCBzdGFydERpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5zdGFydCwgLi4ucUNvbnRyb2wpO1xuICAgICAgICBjb25zdCBlbmREaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4uZW5kLCAuLi5xQ29udHJvbCk7XG4gICAgICAgIGNvbnN0IGNDb250cm9sMSA9IGdldEV4dGVuZFBvaW50KHN0YXJ0LCBxQ29udHJvbCwgKHN0YXJ0RGlzdGFuY2UgKiAyKSAvIDMpO1xuICAgICAgICBjb25zdCBjQ29udHJvbDIgPSBnZXRFeHRlbmRQb2ludChlbmQsIHFDb250cm9sLCAoZW5kRGlzdGFuY2UgKiAyKSAvIDMpO1xuICAgICAgICByZXN1bHQucHVzaChzdGFydCwgY0NvbnRyb2wxLCBjQ29udHJvbDIsIGVuZCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgaGFuZGxlTGluZUNyZWF0aW5nID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIGxpbmVTaGFwZTogTGluZVNoYXBlLFxuICAgIHNvdXJjZVBvaW50OiBQb2ludCxcbiAgICBtb3ZpbmdQb2ludDogUG9pbnQsXG4gICAgc291cmNlRWxlbWVudDogUGxhaXRTaGFwZSB8IG51bGwsXG4gICAgbGluZVNoYXBlRzogU1ZHR0VsZW1lbnRcbikgPT4ge1xuICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRIaXRPdXRsaW5lR2VvbWV0cnkoYm9hcmQsIG1vdmluZ1BvaW50LCBSRUFDVElPTl9NQVJHSU4pO1xuICAgIGNvbnN0IHRhcmdldENvbm5lY3Rpb24gPSBoaXRFbGVtZW50XG4gICAgICAgID8gZ2V0Q29ubmVjdGlvbkJ5TmVhcmVzdFBvaW50KGJvYXJkLCByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50KG1vdmluZ1BvaW50LCBoaXRFbGVtZW50KSB8fCBtb3ZpbmdQb2ludCwgaGl0RWxlbWVudClcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc291cmNlQ29ubmVjdGlvbiA9IHNvdXJjZUVsZW1lbnRcbiAgICAgICAgPyBnZXRDb25uZWN0aW9uQnlOZWFyZXN0UG9pbnQoYm9hcmQsIHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnQoc291cmNlUG9pbnQsIHNvdXJjZUVsZW1lbnQpIHx8IHNvdXJjZVBvaW50LCBzb3VyY2VFbGVtZW50KVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHRhcmdldEJvdW5kSWQgPSBoaXRFbGVtZW50ID8gaGl0RWxlbWVudC5pZCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsaW5lR2VuZXJhdG9yID0gbmV3IExpbmVTaGFwZUdlbmVyYXRvcihib2FyZCk7XG4gICAgY29uc3QgbWVtb3JpemVkTGF0ZXN0ID0gZ2V0TGluZU1lbW9yaXplZExhdGVzdCgpO1xuICAgIGxldCBzb3VyY2VNYXJrZXIsIHRhcmdldE1hcmtlcjtcbiAgICBzb3VyY2VNYXJrZXIgPSBtZW1vcml6ZWRMYXRlc3Quc291cmNlO1xuICAgIHRhcmdldE1hcmtlciA9IG1lbW9yaXplZExhdGVzdC50YXJnZXQ7XG4gICAgc291cmNlTWFya2VyICYmIGRlbGV0ZSBtZW1vcml6ZWRMYXRlc3Quc291cmNlO1xuICAgIHRhcmdldE1hcmtlciAmJiBkZWxldGUgbWVtb3JpemVkTGF0ZXN0LnRhcmdldDtcbiAgICBjb25zdCB0ZW1wb3JhcnlMaW5lRWxlbWVudCA9IGNyZWF0ZUxpbmVFbGVtZW50KFxuICAgICAgICBsaW5lU2hhcGUsXG4gICAgICAgIFtzb3VyY2VQb2ludCwgbW92aW5nUG9pbnRdLFxuICAgICAgICB7IG1hcmtlcjogc291cmNlTWFya2VyIHx8IExpbmVNYXJrZXJUeXBlLm5vbmUsIGNvbm5lY3Rpb246IHNvdXJjZUNvbm5lY3Rpb24sIGJvdW5kSWQ6IHNvdXJjZUVsZW1lbnQ/LmlkIH0sXG4gICAgICAgIHsgbWFya2VyOiB0YXJnZXRNYXJrZXIgfHwgTGluZU1hcmtlclR5cGUuYXJyb3csIGNvbm5lY3Rpb246IHRhcmdldENvbm5lY3Rpb24sIGJvdW5kSWQ6IHRhcmdldEJvdW5kSWQgfSxcbiAgICAgICAgW10sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBEZWZhdWx0TGluZVN0eWxlLnN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgLi4ubWVtb3JpemVkTGF0ZXN0XG4gICAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IGxpbmVQb2ludHMgPSBnZXRMaW5lUG9pbnRzKGJvYXJkLCB0ZW1wb3JhcnlMaW5lRWxlbWVudCk7XG4gICAgY29uc3Qgb3RoZXJQb2ludCA9IGxpbmVQb2ludHNbMF07XG4gICAgdGVtcG9yYXJ5TGluZUVsZW1lbnQucG9pbnRzWzFdID0gYWxpZ25Qb2ludHMob3RoZXJQb2ludCwgbW92aW5nUG9pbnQpO1xuICAgIGxpbmVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodGVtcG9yYXJ5TGluZUVsZW1lbnQsIGxpbmVTaGFwZUcpO1xuICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChsaW5lU2hhcGVHKTtcbiAgICByZXR1cm4gdGVtcG9yYXJ5TGluZUVsZW1lbnQ7XG59O1xuXG5mdW5jdGlvbiBkcmF3TWFzayhib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWFzayA9IGNyZWF0ZU1hc2soKTtcbiAgICBtYXNrLnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7XG4gICAgY29uc3QgcG9pbnRzID0gZ2V0TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgbGV0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhwb2ludHMpO1xuICAgIHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRPdXRsaW5lUmVjdGFuZ2xlKHJlY3RhbmdsZSwgLTMwKTtcbiAgICBjb25zdCBtYXNrRmlsbFJlY3QgPSBjcmVhdGVSZWN0KHJlY3RhbmdsZSwge1xuICAgICAgICBmaWxsOiAnd2hpdGUnXG4gICAgfSk7XG4gICAgbWFzay5hcHBlbmRDaGlsZChtYXNrRmlsbFJlY3QpO1xuXG4gICAgY29uc3QgdGV4dHMgPSBlbGVtZW50LnRleHRzO1xuICAgIHRleHRzLmZvckVhY2goKHRleHQsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCB0ZXh0UmVjdGFuZ2xlID0gZ2V0TGluZVRleHRSZWN0YW5nbGUoYm9hcmQsIGVsZW1lbnQsIGluZGV4KTtcbiAgICAgICAgdGV4dFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHRleHRSZWN0YW5nbGUsIExJTkVfVEVYVF9TUEFDRSAqIDIpO1xuICAgICAgICBjb25zdCByZWN0ID0gY3JlYXRlUmVjdCh0ZXh0UmVjdGFuZ2xlLCB7XG4gICAgICAgICAgICBmaWxsOiAnYmxhY2snXG4gICAgICAgIH0pO1xuICAgICAgICBtYXNrLmFwcGVuZENoaWxkKHJlY3QpO1xuICAgIH0pO1xuICAgIC8vIG9wZW4gbGluZVxuICAgIGNvbnN0IG1hc2tUYXJnZXRGaWxsUmVjdCA9IGNyZWF0ZVJlY3QocmVjdGFuZ2xlKTtcbiAgICBtYXNrVGFyZ2V0RmlsbFJlY3Quc2V0QXR0cmlidXRlKCdvcGFjaXR5JywgJzAnKTtcbiAgICBtYXNrVGFyZ2V0RmlsbFJlY3Quc2V0QXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgICByZXR1cm4geyBtYXNrLCBtYXNrVGFyZ2V0RmlsbFJlY3QgfTtcbn1cbiJdfQ==
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getElementById, RectangleClient, Direction } from '@plait/core';
|
|
2
|
-
import { getDirectionFactor, rotateVectorAnti90, getDirectionByVector, getOppositeDirection, getDirectionByPointOfRectangle, getSourceAndTargetOuterRectangle, getNextPoint } from '@plait/common';
|
|
1
|
+
import { getElementById, RectangleClient, Direction, hasValidAngle, rotatePointsByElement } from '@plait/core';
|
|
2
|
+
import { getDirectionFactor, rotateVectorAnti90, getDirectionByVector, getOppositeDirection, getDirectionByPointOfRectangle, getSourceAndTargetOuterRectangle, getNextPoint, rotateVector } from '@plait/common';
|
|
3
3
|
import { BasicShapes, LineHandleKey, LineMarkerType, PlaitLine } from '../../interfaces';
|
|
4
4
|
import { getStrokeWidthByElement } from '../style/stroke';
|
|
5
5
|
import { getEngine } from '../../engines';
|
|
@@ -32,24 +32,36 @@ export const getLineHandleRefPair = (board, element) => {
|
|
|
32
32
|
if (sourceBoundElement) {
|
|
33
33
|
const connectionOffset = PlaitLine.isSourceMarkOrTargetMark(element, LineMarkerType.none, LineHandleKey.source) ? 0 : strokeWidth;
|
|
34
34
|
const sourceVector = getVectorByConnection(sourceBoundElement, element.source.connection);
|
|
35
|
-
|
|
36
|
-
sourceDirection = direction ? direction : sourceDirection;
|
|
37
|
-
sourcePoint = getConnectionPoint(sourceBoundElement, element.source.connection, sourceDirection, connectionOffset);
|
|
35
|
+
sourceHandleRef.vector = sourceVector;
|
|
38
36
|
sourceHandleRef.boundElement = sourceBoundElement;
|
|
37
|
+
if (hasValidAngle(sourceBoundElement)) {
|
|
38
|
+
const direction = getDirectionByVector(rotateVector(sourceVector, sourceBoundElement.angle));
|
|
39
|
+
sourceDirection = direction ? direction : sourceDirection;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const direction = getDirectionByVector(sourceVector);
|
|
43
|
+
sourceDirection = direction ? direction : sourceDirection;
|
|
44
|
+
}
|
|
39
45
|
sourceHandleRef.direction = sourceDirection;
|
|
40
|
-
|
|
41
|
-
sourceHandleRef.
|
|
46
|
+
sourcePoint = getConnectionPoint(sourceBoundElement, element.source.connection, sourceDirection, connectionOffset);
|
|
47
|
+
sourceHandleRef.point = rotatePointsByElement(sourcePoint, sourceBoundElement) || sourcePoint;
|
|
42
48
|
}
|
|
43
49
|
if (targetBoundElement) {
|
|
44
50
|
const connectionOffset = PlaitLine.isSourceMarkOrTargetMark(element, LineMarkerType.none, LineHandleKey.target) ? 0 : strokeWidth;
|
|
45
51
|
const targetVector = getVectorByConnection(targetBoundElement, element.target.connection);
|
|
46
|
-
|
|
47
|
-
targetDirection = direction ? direction : targetDirection;
|
|
48
|
-
targetPoint = getConnectionPoint(targetBoundElement, element.target.connection, targetDirection, connectionOffset);
|
|
52
|
+
targetHandleRef.vector = targetVector;
|
|
49
53
|
targetHandleRef.boundElement = targetBoundElement;
|
|
54
|
+
if (hasValidAngle(targetBoundElement)) {
|
|
55
|
+
const direction = getDirectionByVector(rotateVector(targetVector, targetBoundElement.angle));
|
|
56
|
+
targetDirection = direction ? direction : targetDirection;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
const direction = getDirectionByVector(targetVector);
|
|
60
|
+
targetDirection = direction ? direction : targetDirection;
|
|
61
|
+
}
|
|
50
62
|
targetHandleRef.direction = targetDirection;
|
|
51
|
-
|
|
52
|
-
targetHandleRef.
|
|
63
|
+
targetPoint = getConnectionPoint(targetBoundElement, element.target.connection, targetDirection, connectionOffset);
|
|
64
|
+
targetHandleRef.point = rotatePointsByElement(targetPoint, targetBoundElement) || targetPoint;
|
|
53
65
|
}
|
|
54
66
|
return { source: sourceHandleRef, target: targetHandleRef };
|
|
55
67
|
};
|
|
@@ -108,4 +120,4 @@ export const getElbowLineRouteOptions = (board, element, handleRefPair) => {
|
|
|
108
120
|
targetOuterRectangle
|
|
109
121
|
};
|
|
110
122
|
};
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jb21tb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9saW5lL2xpbmUtY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsY0FBYyxFQUFFLGVBQWUsRUFBb0IsU0FBUyxFQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3RILE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsOEJBQThCLEVBQzlCLGdDQUFnQyxFQUNoQyxZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQW9DLGNBQWMsRUFBaUIsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUksT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBa0IsRUFBcUIsRUFBRTtJQUM3RixNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQWdCLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDN0gsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFn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RyxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEcsT0FBTztRQUNILFdBQVc7UUFDWCxlQUFlO1FBQ2YsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixXQUFXO1FBQ1gsZUFBZTtRQUNmLGVBQWU7UUFDZixvQkFBb0I7S0FDdkIsQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50LCBQbGFpdEJvYXJkLCBnZXRFbGVtZW50QnlJZCwgUmVjdGFuZ2xlQ2xpZW50LCBQb2ludE9mUmVjdGFuZ2xlLCBEaXJlY3Rpb24sIFZlY3RvciB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7XG4gICAgZ2V0RGlyZWN0aW9uRmFjdG9yLFxuICAgIHJvdGF0ZVZlY3RvckFudGk5MCxcbiAgICBnZXREaXJlY3Rpb25CeVZlY3RvcixcbiAgICBnZXRPcHBvc2l0ZURpcmVjdGlvbixcbiAgICBnZXREaXJlY3Rpb25CeVBvaW50T2ZSZWN0YW5nbGUsXG4gICAgZ2V0U291cmNlQW5kVGFyZ2V0T3V0ZXJSZWN0YW5nbGUsXG4gICAgZ2V0TmV4dFBvaW50XG59IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgQmFzaWNTaGFwZXMsIExpbmVIYW5kbGVLZXksIExpbmVIYW5kbGVSZWYsIExpbmVIYW5kbGVSZWZQYWlyLCBMaW5lTWFya2VyVHlwZSwgUGxhaXRHZW9tZXRyeSwgUGxhaXRMaW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4uL3N0eWxlL3N0cm9rZSc7XG5pbXBvcnQgeyBnZXRFbmdpbmUgfSBmcm9tICcuLi8uLi9lbmdpbmVzJztcbmltcG9ydCB7IGdldFNoYXBlIH0gZnJvbSAnLi4vc2hhcGUnO1xuaW1wb3J0IHsgZ2V0U291cmNlQW5kVGFyZ2V0UmVjdGFuZ2xlIH0gZnJvbSAnLi9lbGJvdyc7XG5cbmV4cG9ydCBjb25zdCBnZXRMaW5lSGFuZGxlUmVmUGFpciA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lKTogTGluZUhhbmRsZVJlZlBhaXIgPT4ge1xuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgc291cmNlQm91bmRFbGVtZW50ID0gZWxlbWVudC5zb3VyY2UuYm91bmRJZCA/IGdldEVsZW1lbnRCeUlkPFBsYWl0R2VvbWV0cnk+KGJvYXJkLCBlbGVtZW50LnNvdXJjZS5ib3VuZElkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YXJnZXRCb3VuZEVsZW1lbnQgPSBlbGVtZW50LnRhcmdldC5ib3VuZElkID8gZ2V0RWxlbWVudEJ5SWQ8UGxhaXRHZW9tZXRyeT4oYm9hcmQsIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIDogdW5kZWZpbmVkO1xuICAgIGxldCBzb3VyY2VQb2ludCA9IHNvdXJjZUJvdW5kRWxlbWVudCA/IGdldENvbm5lY3Rpb25Qb2ludChzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hKSA6IGVsZW1lbnQucG9pbnRzWzBdO1xuICAgIGxldCB0YXJnZXRQb2ludCA9IHRhcmdldEJvdW5kRWxlbWVudFxuICAgICAgICA/IGdldENvbm5lY3Rpb25Qb2ludCh0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hKVxuICAgICAgICA6IGVsZW1lbnQucG9pbnRzW2VsZW1lbnQucG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgIGxldCBzb3VyY2VEaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVZlY3RvcihbdGFyZ2V0UG9pbnRbMF0gLSBzb3VyY2VQb2ludFswXSwgdGFyZ2V0UG9pbnRbMV0gLSBzb3VyY2VQb2ludFsxXV0pIHx8IERpcmVjdGlvbi5yaWdodDtcbiAgICBsZXQgdGFyZ2V0RGlyZWN0aW9uID0gZ2V0T3Bwb3NpdGVEaXJlY3Rpb24oc291cmNlRGlyZWN0aW9uKTtcbiAgICBjb25zdCBzb3VyY2VGYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3Ioc291cmNlRGlyZWN0aW9uKTtcbiAgICBjb25zdCB0YXJnZXRGYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IodGFyZ2V0RGlyZWN0aW9uKTtcbiAgICBjb25zdCBzb3VyY2VIYW5kbGVSZWY6IExpbmVIYW5kbGVSZWYgPSB7XG4gICAgICAgIGtleTogTGluZUhhbmRsZUtleS5zb3VyY2UsXG4gICAgICAgIHBvaW50OiBzb3VyY2VQb2ludCxcbiAgICAgICAgZGlyZWN0aW9uOiBzb3VyY2VEaXJlY3Rpb24sXG4gICAgICAgIHZlY3RvcjogW3NvdXJjZUZhY3Rvci54LCBzb3VyY2VGYWN0b3IueV1cbiAgICB9O1xuICAgIGNvbnN0IHRhcmdldEhhbmRsZVJlZjogTGluZUhhbmRsZVJlZiA9IHtcbiAgICAgICAga2V5OiBMaW5lSGFuZGxlS2V5LnRhcmdldCxcbiAgICAgICAgcG9pbnQ6IHRhcmdldFBvaW50LFxuICAgICAgICBkaXJlY3Rpb246IHRhcmdldERpcmVjdGlvbixcbiAgICAgICAgdmVjdG9yOiBbdGFyZ2V0RmFjdG9yLngsIHRhcmdldEZhY3Rvci55XVxuICAgIH07XG4gICAgaWYgKHNvdXJjZUJvdW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uT2Zmc2V0ID0gUGxhaXRMaW5lLmlzU291cmNlTWFya09yVGFyZ2V0TWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lLCBMaW5lSGFuZGxlS2V5LnNvdXJjZSkgPyAwIDogc3Ryb2tlV2lkdGg7XG4gICAgICAgIGNvbnN0IHNvdXJjZVZlY3RvciA9IGdldFZlY3RvckJ5Q29ubmVjdGlvbihzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hKTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uQnlWZWN0b3Ioc291cmNlVmVjdG9yKTtcbiAgICAgICAgc291cmNlRGlyZWN0aW9uID0gZGlyZWN0aW9uID8gZGlyZWN0aW9uIDogc291cmNlRGlyZWN0aW9uO1xuICAgICAgICBzb3VyY2VQb2ludCA9IGdldENvbm5lY3Rpb25Qb2ludChzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hLCBzb3VyY2VEaXJlY3Rpb24sIGNvbm5lY3Rpb25PZmZzZXQpO1xuICAgICAgICBzb3VyY2VIYW5kbGVSZWYuYm91bmRFbGVtZW50ID0gc291cmNlQm91bmRFbGVtZW50O1xuICAgICAgICBzb3VyY2VIYW5kbGVSZWYuZGlyZWN0aW9uID0gc291cmNlRGlyZWN0aW9uO1xuICAgICAgICBzb3VyY2VIYW5kbGVSZWYucG9pbnQgPSBzb3VyY2VQb2ludDtcbiAgICAgICAgc291cmNlSGFuZGxlUmVmLnZlY3RvciA9IHNvdXJjZVZlY3RvcjtcbiAgICB9XG4gICAgaWYgKHRhcmdldEJvdW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uT2Zmc2V0ID0gUGxhaXRMaW5lLmlzU291cmNlTWFya09yVGFyZ2V0TWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lLCBMaW5lSGFuZGxlS2V5LnRhcmdldCkgPyAwIDogc3Ryb2tlV2lkdGg7XG4gICAgICAgIGNvbnN0IHRhcmdldFZlY3RvciA9IGdldFZlY3RvckJ5Q29ubmVjdGlvbih0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hKTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uQnlWZWN0b3IodGFyZ2V0VmVjdG9yKTtcbiAgICAgICAgdGFyZ2V0RGlyZWN0aW9uID0gZGlyZWN0aW9uID8gZGlyZWN0aW9uIDogdGFyZ2V0RGlyZWN0aW9uO1xuICAgICAgICB0YXJnZXRQb2ludCA9IGdldENvbm5lY3Rpb25Qb2ludCh0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hLCB0YXJnZXREaXJlY3Rpb24sIGNvbm5lY3Rpb25PZmZzZXQpO1xuICAgICAgICB0YXJnZXRIYW5kbGVSZWYuYm91bmRFbGVtZW50ID0gdGFyZ2V0Qm91bmRFbGVtZW50O1xuICAgICAgICB0YXJnZXRIYW5kbGVSZWYuZGlyZWN0aW9uID0gdGFyZ2V0RGlyZWN0aW9uO1xuICAgICAgICB0YXJnZXRIYW5kbGVSZWYucG9pbnQgPSB0YXJnZXRQb2ludDtcbiAgICAgICAgdGFyZ2V0SGFuZGxlUmVmLnZlY3RvciA9IHRhcmdldFZlY3RvcjtcbiAgICB9XG4gICAgcmV0dXJuIHsgc291cmNlOiBzb3VyY2VIYW5kbGVSZWYsIHRhcmdldDogdGFyZ2V0SGFuZGxlUmVmIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblBvaW50ID0gKGdlb21ldHJ5OiBQbGFpdEdlb21ldHJ5LCBjb25uZWN0aW9uOiBQb2ludCwgZGlyZWN0aW9uPzogRGlyZWN0aW9uLCBkZWx0YT86IG51bWJlcik6IFBvaW50ID0+IHtcbiAgICBjb25zdCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZ2VvbWV0cnkucG9pbnRzKTtcbiAgICBpZiAoZGlyZWN0aW9uICYmIGRlbHRhKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbkZhY3RvciA9IGdldERpcmVjdGlvbkZhY3RvcihkaXJlY3Rpb24pO1xuICAgICAgICBjb25zdCBwb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtwb2ludFswXSArIGRpcmVjdGlvbkZhY3Rvci54ICogZGVsdGEsIHBvaW50WzFdICsgZGlyZWN0aW9uRmFjdG9yLnkgKiBkZWx0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmVjdG9yQnlDb25uZWN0aW9uID0gKGJvdW5kRWxlbWVudDogUGxhaXRHZW9tZXRyeSwgY29ubmVjdGlvbjogUG9pbnRPZlJlY3RhbmdsZSk6IFZlY3RvciA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGJvdW5kRWxlbWVudC5wb2ludHMpO1xuICAgIGNvbnN0IHNoYXBlID0gZ2V0U2hhcGUoYm91bmRFbGVtZW50KTtcbiAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUoc2hhcGUpO1xuICAgIGxldCB2ZWN0b3I6IFZlY3RvciA9IFswLCAwXTtcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVBvaW50T2ZSZWN0YW5nbGUoY29ubmVjdGlvbik7XG4gICAgaWYgKGRpcmVjdGlvbiAmJiBib3VuZEVsZW1lbnQuc2hhcGUgIT09IEJhc2ljU2hhcGVzLmVsbGlwc2UpIHtcbiAgICAgICAgY29uc3QgZmFjdG9yID0gZ2V0RGlyZWN0aW9uRmFjdG9yKGRpcmVjdGlvbik7XG4gICAgICAgIHJldHVybiBbZmFjdG9yLngsIGZhY3Rvci55XTtcbiAgICB9XG4gICAgaWYgKGVuZ2luZS5nZXRFZGdlQnlDb25uZWN0aW9uUG9pbnQpIHtcbiAgICAgICAgY29uc3QgZWRnZSA9IGVuZ2luZS5nZXRFZGdlQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICAgICAgaWYgKGVkZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVWZWN0b3IgPSBbZWRnZVsxXVswXSAtIGVkZ2VbMF1bMF0sIGVkZ2VbMV1bMV0gLSBlZGdlWzBdWzFdXSBhcyBWZWN0b3I7XG4gICAgICAgICAgICByZXR1cm4gcm90YXRlVmVjdG9yQW50aTkwKGxpbmVWZWN0b3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbmdpbmUuZ2V0VGFuZ2VudFZlY3RvckJ5Q29ubmVjdGlvblBvaW50KSB7XG4gICAgICAgIGNvbnN0IGxpbmVWZWN0b3IgPSBlbmdpbmUuZ2V0VGFuZ2VudFZlY3RvckJ5Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgY29ubmVjdGlvbik7XG4gICAgICAgIGlmIChsaW5lVmVjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gcm90YXRlVmVjdG9yQW50aTkwKGxpbmVWZWN0b3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2ZWN0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxib3dMaW5lUm91dGVPcHRpb25zID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdExpbmUsIGhhbmRsZVJlZlBhaXI/OiBMaW5lSGFuZGxlUmVmUGFpcikgPT4ge1xuICAgIGhhbmRsZVJlZlBhaXIgPSBoYW5kbGVSZWZQYWlyID8/IGdldExpbmVIYW5kbGVSZWZQYWlyKGJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCB7IHNvdXJjZVJlY3RhbmdsZSwgdGFyZ2V0UmVjdGFuZ2xlIH0gPSBnZXRTb3VyY2VBbmRUYXJnZXRSZWN0YW5nbGUoYm9hcmQsIGVsZW1lbnQsIGhhbmRsZVJlZlBhaXIpO1xuICAgIGNvbnN0IHsgc291cmNlT3V0ZXJSZWN0YW5nbGUsIHRhcmdldE91dGVyUmVjdGFuZ2xlIH0gPSBnZXRTb3VyY2VBbmRUYXJnZXRPdXRlclJlY3RhbmdsZShzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSk7XG4gICAgY29uc3Qgc291cmNlUG9pbnQgPSBoYW5kbGVSZWZQYWlyLnNvdXJjZS5wb2ludDtcbiAgICBjb25zdCB0YXJnZXRQb2ludCA9IGhhbmRsZVJlZlBhaXIudGFyZ2V0LnBvaW50O1xuICAgIGNvbnN0IG5leHRTb3VyY2VQb2ludCA9IGdldE5leHRQb2ludChzb3VyY2VQb2ludCwgc291cmNlT3V0ZXJSZWN0YW5nbGUsIGhhbmRsZVJlZlBhaXIuc291cmNlLmRpcmVjdGlvbik7XG4gICAgY29uc3QgbmV4dFRhcmdldFBvaW50ID0gZ2V0TmV4dFBvaW50KHRhcmdldFBvaW50LCB0YXJnZXRPdXRlclJlY3RhbmdsZSwgaGFuZGxlUmVmUGFpci50YXJnZXQuZGlyZWN0aW9uKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2VQb2ludCxcbiAgICAgICAgbmV4dFNvdXJjZVBvaW50LFxuICAgICAgICBzb3VyY2VSZWN0YW5nbGUsXG4gICAgICAgIHNvdXJjZU91dGVyUmVjdGFuZ2xlLFxuICAgICAgICB0YXJnZXRQb2ludCxcbiAgICAgICAgbmV4dFRhcmdldFBvaW50LFxuICAgICAgICB0YXJnZXRSZWN0YW5nbGUsXG4gICAgICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlXG4gICAgfTtcbn07XG4iXX0=
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jb21tb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9saW5lL2xpbmUtY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxjQUFjLEVBQ2QsZUFBZSxFQUVmLFNBQVMsRUFFVCxhQUFhLEVBQ2IscUJBQXFCLEVBQ3hCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsOEJBQThCLEVBQzlCLGdDQUFnQyxFQUNoQyxZQUFZLEVBQ1osWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFvQyxjQUFjLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFJLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQWtCLEVBQXFCLEVBQUU7SUFDN0YsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFnQixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzdILE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FB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QzFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQWtCLEVBQUUsYUFBaUMsRUFBRSxFQUFFO0lBQ2pILGFBQWEsR0FBRyxhQUFhLElBQUksb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEdBQUcsMkJBQTJCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN4RyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxnQ0FBZ0MsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDMUgsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDL0MsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hHLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4RyxPQUFPO1FBQ0gsV0FBVztRQUNYLGVBQWU7UUFDZixlQUFlO1FBQ2Ysb0JBQW9CO1FBQ3BCLFdBQVc7UUFDWCxlQUFlO1FBQ2YsZUFBZTtRQUNmLG9CQUFvQjtLQUN2QixDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQb2ludCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIGdldEVsZW1lbnRCeUlkLFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBQb2ludE9mUmVjdGFuZ2xlLFxuICAgIERpcmVjdGlvbixcbiAgICBWZWN0b3IsXG4gICAgaGFzVmFsaWRBbmdsZSxcbiAgICByb3RhdGVQb2ludHNCeUVsZW1lbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBnZXREaXJlY3Rpb25GYWN0b3IsXG4gICAgcm90YXRlVmVjdG9yQW50aTkwLFxuICAgIGdldERpcmVjdGlvbkJ5VmVjdG9yLFxuICAgIGdldE9wcG9zaXRlRGlyZWN0aW9uLFxuICAgIGdldERpcmVjdGlvbkJ5UG9pbnRPZlJlY3RhbmdsZSxcbiAgICBnZXRTb3VyY2VBbmRUYXJnZXRPdXRlclJlY3RhbmdsZSxcbiAgICBnZXROZXh0UG9pbnQsXG4gICAgcm90YXRlVmVjdG9yXG59IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgQmFzaWNTaGFwZXMsIExpbmVIYW5kbGVLZXksIExpbmVIYW5kbGVSZWYsIExpbmVIYW5kbGVSZWZQYWlyLCBMaW5lTWFya2VyVHlwZSwgUGxhaXRHZW9tZXRyeSwgUGxhaXRMaW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4uL3N0eWxlL3N0cm9rZSc7XG5pbXBvcnQgeyBnZXRFbmdpbmUgfSBmcm9tICcuLi8uLi9lbmdpbmVzJztcbmltcG9ydCB7IGdldFNoYXBlIH0gZnJvbSAnLi4vc2hhcGUnO1xuaW1wb3J0IHsgZ2V0U291cmNlQW5kVGFyZ2V0UmVjdGFuZ2xlIH0gZnJvbSAnLi9lbGJvdyc7XG5cbmV4cG9ydCBjb25zdCBnZXRMaW5lSGFuZGxlUmVmUGFpciA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lKTogTGluZUhhbmRsZVJlZlBhaXIgPT4ge1xuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgc291cmNlQm91bmRFbGVtZW50ID0gZWxlbWVudC5zb3VyY2UuYm91bmRJZCA/IGdldEVsZW1lbnRCeUlkPFBsYWl0R2VvbWV0cnk+KGJvYXJkLCBlbGVtZW50LnNvdXJjZS5ib3VuZElkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YXJnZXRCb3VuZEVsZW1lbnQgPSBlbGVtZW50LnRhcmdldC5ib3VuZElkID8gZ2V0RWxlbWVudEJ5SWQ8UGxhaXRHZW9tZXRyeT4oYm9hcmQsIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIDogdW5kZWZpbmVkO1xuICAgIGxldCBzb3VyY2VQb2ludCA9IHNvdXJjZUJvdW5kRWxlbWVudCA/IGdldENvbm5lY3Rpb25Qb2ludChzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hKSA6IGVsZW1lbnQucG9pbnRzWzBdO1xuICAgIGxldCB0YXJnZXRQb2ludCA9IHRhcmdldEJvdW5kRWxlbWVudFxuICAgICAgICA/IGdldENvbm5lY3Rpb25Qb2ludCh0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hKVxuICAgICAgICA6IGVsZW1lbnQucG9pbnRzW2VsZW1lbnQucG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgIGxldCBzb3VyY2VEaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVZlY3RvcihbdGFyZ2V0UG9pbnRbMF0gLSBzb3VyY2VQb2ludFswXSwgdGFyZ2V0UG9pbnRbMV0gLSBzb3VyY2VQb2ludFsxXV0pIHx8IERpcmVjdGlvbi5yaWdodDtcbiAgICBsZXQgdGFyZ2V0RGlyZWN0aW9uID0gZ2V0T3Bwb3NpdGVEaXJlY3Rpb24oc291cmNlRGlyZWN0aW9uKTtcbiAgICBjb25zdCBzb3VyY2VGYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3Ioc291cmNlRGlyZWN0aW9uKTtcbiAgICBjb25zdCB0YXJnZXRGYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IodGFyZ2V0RGlyZWN0aW9uKTtcbiAgICBjb25zdCBzb3VyY2VIYW5kbGVSZWY6IExpbmVIYW5kbGVSZWYgPSB7XG4gICAgICAgIGtleTogTGluZUhhbmRsZUtleS5zb3VyY2UsXG4gICAgICAgIHBvaW50OiBzb3VyY2VQb2ludCxcbiAgICAgICAgZGlyZWN0aW9uOiBzb3VyY2VEaXJlY3Rpb24sXG4gICAgICAgIHZlY3RvcjogW3NvdXJjZUZhY3Rvci54LCBzb3VyY2VGYWN0b3IueV1cbiAgICB9O1xuICAgIGNvbnN0IHRhcmdldEhhbmRsZVJlZjogTGluZUhhbmRsZVJlZiA9IHtcbiAgICAgICAga2V5OiBMaW5lSGFuZGxlS2V5LnRhcmdldCxcbiAgICAgICAgcG9pbnQ6IHRhcmdldFBvaW50LFxuICAgICAgICBkaXJlY3Rpb246IHRhcmdldERpcmVjdGlvbixcbiAgICAgICAgdmVjdG9yOiBbdGFyZ2V0RmFjdG9yLngsIHRhcmdldEZhY3Rvci55XVxuICAgIH07XG4gICAgaWYgKHNvdXJjZUJvdW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uT2Zmc2V0ID0gUGxhaXRMaW5lLmlzU291cmNlTWFya09yVGFyZ2V0TWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lLCBMaW5lSGFuZGxlS2V5LnNvdXJjZSkgPyAwIDogc3Ryb2tlV2lkdGg7XG4gICAgICAgIGNvbnN0IHNvdXJjZVZlY3RvciA9IGdldFZlY3RvckJ5Q29ubmVjdGlvbihzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hKTtcbiAgICAgICAgc291cmNlSGFuZGxlUmVmLnZlY3RvciA9IHNvdXJjZVZlY3RvcjtcbiAgICAgICAgc291cmNlSGFuZGxlUmVmLmJvdW5kRWxlbWVudCA9IHNvdXJjZUJvdW5kRWxlbWVudDtcbiAgICAgICAgaWYgKGhhc1ZhbGlkQW5nbGUoc291cmNlQm91bmRFbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uQnlWZWN0b3Iocm90YXRlVmVjdG9yKHNvdXJjZVZlY3Rvciwgc291cmNlQm91bmRFbGVtZW50LmFuZ2xlKSk7XG4gICAgICAgICAgICBzb3VyY2VEaXJlY3Rpb24gPSBkaXJlY3Rpb24gPyBkaXJlY3Rpb24gOiBzb3VyY2VEaXJlY3Rpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVZlY3Rvcihzb3VyY2VWZWN0b3IpO1xuICAgICAgICAgICAgc291cmNlRGlyZWN0aW9uID0gZGlyZWN0aW9uID8gZGlyZWN0aW9uIDogc291cmNlRGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHNvdXJjZUhhbmRsZVJlZi5kaXJlY3Rpb24gPSBzb3VyY2VEaXJlY3Rpb247XG4gICAgICAgIHNvdXJjZVBvaW50ID0gZ2V0Q29ubmVjdGlvblBvaW50KHNvdXJjZUJvdW5kRWxlbWVudCwgZWxlbWVudC5zb3VyY2UuY29ubmVjdGlvbiEsIHNvdXJjZURpcmVjdGlvbiwgY29ubmVjdGlvbk9mZnNldCk7XG4gICAgICAgIHNvdXJjZUhhbmRsZVJlZi5wb2ludCA9IHJvdGF0ZVBvaW50c0J5RWxlbWVudChzb3VyY2VQb2ludCwgc291cmNlQm91bmRFbGVtZW50KSB8fCBzb3VyY2VQb2ludDtcbiAgICB9XG4gICAgaWYgKHRhcmdldEJvdW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uT2Zmc2V0ID0gUGxhaXRMaW5lLmlzU291cmNlTWFya09yVGFyZ2V0TWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lLCBMaW5lSGFuZGxlS2V5LnRhcmdldCkgPyAwIDogc3Ryb2tlV2lkdGg7XG4gICAgICAgIGNvbnN0IHRhcmdldFZlY3RvciA9IGdldFZlY3RvckJ5Q29ubmVjdGlvbih0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hKTtcbiAgICAgICAgdGFyZ2V0SGFuZGxlUmVmLnZlY3RvciA9IHRhcmdldFZlY3RvcjtcbiAgICAgICAgdGFyZ2V0SGFuZGxlUmVmLmJvdW5kRWxlbWVudCA9IHRhcmdldEJvdW5kRWxlbWVudDtcbiAgICAgICAgaWYgKGhhc1ZhbGlkQW5nbGUodGFyZ2V0Qm91bmRFbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uQnlWZWN0b3Iocm90YXRlVmVjdG9yKHRhcmdldFZlY3RvciwgdGFyZ2V0Qm91bmRFbGVtZW50LmFuZ2xlKSk7XG4gICAgICAgICAgICB0YXJnZXREaXJlY3Rpb24gPSBkaXJlY3Rpb24gPyBkaXJlY3Rpb24gOiB0YXJnZXREaXJlY3Rpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVZlY3Rvcih0YXJnZXRWZWN0b3IpO1xuICAgICAgICAgICAgdGFyZ2V0RGlyZWN0aW9uID0gZGlyZWN0aW9uID8gZGlyZWN0aW9uIDogdGFyZ2V0RGlyZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldEhhbmRsZVJlZi5kaXJlY3Rpb24gPSB0YXJnZXREaXJlY3Rpb247XG4gICAgICAgIHRhcmdldFBvaW50ID0gZ2V0Q29ubmVjdGlvblBvaW50KHRhcmdldEJvdW5kRWxlbWVudCwgZWxlbWVudC50YXJnZXQuY29ubmVjdGlvbiEsIHRhcmdldERpcmVjdGlvbiwgY29ubmVjdGlvbk9mZnNldCk7XG4gICAgICAgIHRhcmdldEhhbmRsZVJlZi5wb2ludCA9IHJvdGF0ZVBvaW50c0J5RWxlbWVudCh0YXJnZXRQb2ludCwgdGFyZ2V0Qm91bmRFbGVtZW50KSB8fCB0YXJnZXRQb2ludDtcbiAgICB9XG4gICAgcmV0dXJuIHsgc291cmNlOiBzb3VyY2VIYW5kbGVSZWYsIHRhcmdldDogdGFyZ2V0SGFuZGxlUmVmIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblBvaW50ID0gKGdlb21ldHJ5OiBQbGFpdEdlb21ldHJ5LCBjb25uZWN0aW9uOiBQb2ludCwgZGlyZWN0aW9uPzogRGlyZWN0aW9uLCBkZWx0YT86IG51bWJlcik6IFBvaW50ID0+IHtcbiAgICBjb25zdCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZ2VvbWV0cnkucG9pbnRzKTtcbiAgICBpZiAoZGlyZWN0aW9uICYmIGRlbHRhKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbkZhY3RvciA9IGdldERpcmVjdGlvbkZhY3RvcihkaXJlY3Rpb24pO1xuICAgICAgICBjb25zdCBwb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtwb2ludFswXSArIGRpcmVjdGlvbkZhY3Rvci54ICogZGVsdGEsIHBvaW50WzFdICsgZGlyZWN0aW9uRmFjdG9yLnkgKiBkZWx0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmVjdG9yQnlDb25uZWN0aW9uID0gKGJvdW5kRWxlbWVudDogUGxhaXRHZW9tZXRyeSwgY29ubmVjdGlvbjogUG9pbnRPZlJlY3RhbmdsZSk6IFZlY3RvciA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGJvdW5kRWxlbWVudC5wb2ludHMpO1xuICAgIGNvbnN0IHNoYXBlID0gZ2V0U2hhcGUoYm91bmRFbGVtZW50KTtcbiAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUoc2hhcGUpO1xuICAgIGxldCB2ZWN0b3I6IFZlY3RvciA9IFswLCAwXTtcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVBvaW50T2ZSZWN0YW5nbGUoY29ubmVjdGlvbik7XG4gICAgaWYgKGRpcmVjdGlvbiAmJiBib3VuZEVsZW1lbnQuc2hhcGUgIT09IEJhc2ljU2hhcGVzLmVsbGlwc2UpIHtcbiAgICAgICAgY29uc3QgZmFjdG9yID0gZ2V0RGlyZWN0aW9uRmFjdG9yKGRpcmVjdGlvbik7XG4gICAgICAgIHJldHVybiBbZmFjdG9yLngsIGZhY3Rvci55XTtcbiAgICB9XG4gICAgaWYgKGVuZ2luZS5nZXRFZGdlQnlDb25uZWN0aW9uUG9pbnQpIHtcbiAgICAgICAgY29uc3QgZWRnZSA9IGVuZ2luZS5nZXRFZGdlQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICAgICAgaWYgKGVkZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVWZWN0b3IgPSBbZWRnZVsxXVswXSAtIGVkZ2VbMF1bMF0sIGVkZ2VbMV1bMV0gLSBlZGdlWzBdWzFdXSBhcyBWZWN0b3I7XG4gICAgICAgICAgICByZXR1cm4gcm90YXRlVmVjdG9yQW50aTkwKGxpbmVWZWN0b3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChlbmdpbmUuZ2V0VGFuZ2VudFZlY3RvckJ5Q29ubmVjdGlvblBvaW50KSB7XG4gICAgICAgIGNvbnN0IGxpbmVWZWN0b3IgPSBlbmdpbmUuZ2V0VGFuZ2VudFZlY3RvckJ5Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgY29ubmVjdGlvbik7XG4gICAgICAgIGlmIChsaW5lVmVjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gcm90YXRlVmVjdG9yQW50aTkwKGxpbmVWZWN0b3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2ZWN0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxib3dMaW5lUm91dGVPcHRpb25zID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdExpbmUsIGhhbmRsZVJlZlBhaXI/OiBMaW5lSGFuZGxlUmVmUGFpcikgPT4ge1xuICAgIGhhbmRsZVJlZlBhaXIgPSBoYW5kbGVSZWZQYWlyID8/IGdldExpbmVIYW5kbGVSZWZQYWlyKGJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCB7IHNvdXJjZVJlY3RhbmdsZSwgdGFyZ2V0UmVjdGFuZ2xlIH0gPSBnZXRTb3VyY2VBbmRUYXJnZXRSZWN0YW5nbGUoYm9hcmQsIGVsZW1lbnQsIGhhbmRsZVJlZlBhaXIpO1xuICAgIGNvbnN0IHsgc291cmNlT3V0ZXJSZWN0YW5nbGUsIHRhcmdldE91dGVyUmVjdGFuZ2xlIH0gPSBnZXRTb3VyY2VBbmRUYXJnZXRPdXRlclJlY3RhbmdsZShzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSk7XG4gICAgY29uc3Qgc291cmNlUG9pbnQgPSBoYW5kbGVSZWZQYWlyLnNvdXJjZS5wb2ludDtcbiAgICBjb25zdCB0YXJnZXRQb2ludCA9IGhhbmRsZVJlZlBhaXIudGFyZ2V0LnBvaW50O1xuICAgIGNvbnN0IG5leHRTb3VyY2VQb2ludCA9IGdldE5leHRQb2ludChzb3VyY2VQb2ludCwgc291cmNlT3V0ZXJSZWN0YW5nbGUsIGhhbmRsZVJlZlBhaXIuc291cmNlLmRpcmVjdGlvbik7XG4gICAgY29uc3QgbmV4dFRhcmdldFBvaW50ID0gZ2V0TmV4dFBvaW50KHRhcmdldFBvaW50LCB0YXJnZXRPdXRlclJlY3RhbmdsZSwgaGFuZGxlUmVmUGFpci50YXJnZXQuZGlyZWN0aW9uKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzb3VyY2VQb2ludCxcbiAgICAgICAgbmV4dFNvdXJjZVBvaW50LFxuICAgICAgICBzb3VyY2VSZWN0YW5nbGUsXG4gICAgICAgIHNvdXJjZU91dGVyUmVjdGFuZ2xlLFxuICAgICAgICB0YXJnZXRQb2ludCxcbiAgICAgICAgbmV4dFRhcmdldFBvaW50LFxuICAgICAgICB0YXJnZXRSZWN0YW5nbGUsXG4gICAgICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlXG4gICAgfTtcbn07XG4iXX0=
|