@plait/draw 0.75.0-next.8 → 0.75.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.
@@ -1,24 +1,70 @@
1
- import { PlaitBoard, RectangleClient, getEllipseTangentSlope, getNearestPointBetweenPointAndEllipse, getNearestPointBetweenPointAndSegments, getVectorFromPointAndSlope, setStrokeLinecap } from '@plait/core';
2
- import { RectangleEngine } from '../basic-shapes/rectangle';
1
+ import { PlaitBoard, RectangleClient, distanceBetweenPointAndPoint, getEllipseTangentSlope, getNearestPointBetweenPointAndDiscreteSegments, getNearestPointBetweenPointAndEllipse, getVectorFromPointAndSlope, setStrokeLinecap } from '@plait/core';
3
2
  import { getUnitVectorByPointAndPoint, rotateVector } from '@plait/common';
3
+ function generateActorPath(rectangle) {
4
+ const centerX = rectangle.x + rectangle.width / 2;
5
+ const headRadius = { width: rectangle.width / 3 / 2, height: rectangle.height / 4 / 2 };
6
+ const centerY = rectangle.y + rectangle.height / 4 / 2;
7
+ return {
8
+ headArcCommand: {
9
+ rx: headRadius.width,
10
+ ry: headRadius.height,
11
+ xAxisRotation: 0,
12
+ largeArcFlag: 0,
13
+ sweepFlag: 1,
14
+ endX: centerX,
15
+ endY: rectangle.y
16
+ },
17
+ bodyLine: [
18
+ [centerX, rectangle.y + rectangle.height / 4],
19
+ [centerX, rectangle.y + (rectangle.height / 4) * 3]
20
+ ],
21
+ armsLine: [
22
+ [rectangle.x, rectangle.y + rectangle.height / 2],
23
+ [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]
24
+ ],
25
+ leftLegLine: [
26
+ [centerX, rectangle.y + (rectangle.height / 4) * 3],
27
+ [rectangle.x + rectangle.width / 12, rectangle.y + rectangle.height]
28
+ ],
29
+ rightLegLine: [
30
+ [centerX, rectangle.y + (rectangle.height / 4) * 3],
31
+ [rectangle.x + (rectangle.width / 12) * 11, rectangle.y + rectangle.height]
32
+ ]
33
+ };
34
+ }
4
35
  export const ActorEngine = {
5
36
  draw(board, rectangle, options) {
6
37
  const rs = PlaitBoard.getRoughSVG(board);
7
- const shape = rs.path(`M${rectangle.x + rectangle.width / 2} ${rectangle.y + rectangle.height / 4}
8
- A${rectangle.width / 3 / 2} ${rectangle.height / 4 / 2}, 0, 0, 1, ${rectangle.x + rectangle.width / 2} ${rectangle.y}
9
- A${rectangle.width / 3 / 2} ${rectangle.height / 4 / 2}, 0, 0, 1, ${rectangle.x + rectangle.width / 2} ${rectangle.y +
10
- rectangle.height / 4}
11
- V${rectangle.y + (rectangle.height / 4) * 3}
12
- M${rectangle.x + rectangle.width / 2} ${rectangle.y + rectangle.height / 2} H${rectangle.x}
13
- M${rectangle.x + rectangle.width / 2} ${rectangle.y + rectangle.height / 2} H${rectangle.x + rectangle.width}
14
- M${rectangle.x + rectangle.width / 2} ${rectangle.y + (rectangle.height / 4) * 3}
15
- L${rectangle.x + rectangle.width / 12} ${rectangle.y + rectangle.height}
16
- M${rectangle.x + rectangle.width / 2} ${rectangle.y + (rectangle.height / 4) * 3}
17
- L${rectangle.x + (rectangle.width / 12) * 11} ${rectangle.y + rectangle.height}
18
- `, { ...options, fillStyle: 'solid' });
38
+ const { headArcCommand, bodyLine, armsLine, leftLegLine, rightLegLine } = generateActorPath(rectangle);
39
+ const pathData = [
40
+ // 头部(从中间开始画)
41
+ `M${bodyLine[0][0]} ${bodyLine[0][1]}`,
42
+ `A${headArcCommand.rx} ${headArcCommand.ry} ${headArcCommand.xAxisRotation} ${headArcCommand.largeArcFlag} ${headArcCommand.sweepFlag} ${headArcCommand.endX} ${headArcCommand.endY}`,
43
+ `A${headArcCommand.rx} ${headArcCommand.ry} ${headArcCommand.xAxisRotation} ${headArcCommand.largeArcFlag} ${headArcCommand.sweepFlag} ${bodyLine[0][0]} ${bodyLine[0][1]}`,
44
+ // 身体
45
+ `V${bodyLine[1][1]}`,
46
+ // 手臂
47
+ `M${armsLine[0][0]} ${armsLine[0][1]} H${armsLine[1][0]}`,
48
+ //
49
+ `M${leftLegLine[0][0]} ${leftLegLine[0][1]} L${leftLegLine[1][0]} ${leftLegLine[1][1]}`,
50
+ `M${rightLegLine[0][0]} ${rightLegLine[0][1]} L${rightLegLine[1][0]} ${rightLegLine[1][1]}`
51
+ ].join(' ');
52
+ const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });
19
53
  setStrokeLinecap(shape, 'round');
20
54
  return shape;
21
55
  },
56
+ getNearestPoint(rectangle, point) {
57
+ const { headArcCommand, bodyLine, armsLine, leftLegLine, rightLegLine } = generateActorPath(rectangle);
58
+ // 检查头部椭圆
59
+ const headCenter = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4 / 2];
60
+ const nearestPointForHead = getNearestPointBetweenPointAndEllipse(point, headCenter, headArcCommand.rx, headArcCommand.ry);
61
+ const distanceForHead = distanceBetweenPointAndPoint(...point, ...nearestPointForHead);
62
+ // 检查所有线段
63
+ const allSegments = [bodyLine, armsLine, leftLegLine, rightLegLine];
64
+ const nearestPointForLines = getNearestPointBetweenPointAndDiscreteSegments(point, allSegments);
65
+ const distanceForLines = distanceBetweenPointAndPoint(...point, ...nearestPointForLines);
66
+ return distanceForHead < distanceForLines ? nearestPointForHead : nearestPointForLines;
67
+ },
22
68
  isInsidePoint(rectangle, point) {
23
69
  const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);
24
70
  return RectangleClient.isHit(rectangle, rangeRectangle);
@@ -26,35 +72,6 @@ export const ActorEngine = {
26
72
  getCornerPoints(rectangle) {
27
73
  return RectangleClient.getCornerPoints(rectangle);
28
74
  },
29
- getNearestPoint(rectangle, point) {
30
- let nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
31
- if (nearestPoint[1] >= rectangle.y && nearestPoint[1] <= rectangle.y + rectangle.height / 4) {
32
- const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4 / 2];
33
- nearestPoint = getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 3 / 2, rectangle.height / 4 / 2);
34
- return nearestPoint;
35
- }
36
- if (nearestPoint[1] >= rectangle.y + rectangle.height / 4 && nearestPoint[1] < rectangle.y + (rectangle.height / 4) * 3) {
37
- if (nearestPoint[1] === rectangle.x + rectangle.width / 2) {
38
- nearestPoint = getNearestPointBetweenPointAndSegments(point, [
39
- [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 4],
40
- [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height / 4) * 3]
41
- ]);
42
- }
43
- else {
44
- nearestPoint = getNearestPointBetweenPointAndSegments(point, [
45
- [rectangle.x, rectangle.y + rectangle.height / 2],
46
- [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2]
47
- ]);
48
- }
49
- return nearestPoint;
50
- }
51
- nearestPoint = getNearestPointBetweenPointAndSegments(point, [
52
- [rectangle.x + rectangle.width / 12, rectangle.y + rectangle.height],
53
- [rectangle.x + rectangle.width / 2, rectangle.y + (rectangle.height / 4) * 3],
54
- [rectangle.x + (rectangle.width / 12) * 11, rectangle.y + rectangle.height]
55
- ]);
56
- return nearestPoint;
57
- },
58
75
  getConnectorPoints(rectangle) {
59
76
  return RectangleClient.getEdgeCenterPoints(rectangle);
60
77
  },
@@ -99,4 +116,4 @@ export const ActorEngine = {
99
116
  };
100
117
  }
101
118
  };
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9lbmdpbmVzL3VtbC9hY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsVUFBVSxFQUdWLGVBQWUsRUFFZixzQkFBc0IsRUFDdEIscUNBQXFDLEVBQ3JDLHNDQUFzQyxFQUN0QywwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBQ25CLE1BQU0sYUFBYSxDQUFDO0FBSXJCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBZ0I7SUFDcEMsSUFBSSxDQUFDLEtBQWlCLEVBQUUsU0FBMEIsRUFBRSxPQUFnQjtRQUNoRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQ2pCLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztlQUN4RSxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUM7ZUFDakgsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO1lBQ2hILFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztlQUNyQixTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO2VBQ3hDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztlQUN2RixTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSztlQUN6RyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7ZUFDN0UsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLEVBQUUsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNO2VBQ3BFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztlQUM3RSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTTthQUM3RSxFQUNELEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUNyQyxDQUFDO1FBQ0Ys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LE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDOUgsQ0FBQztJQUNELGdCQUFnQixFQUFFLENBQUMsT0FBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFPLENBQUMsQ0FBQztRQUMvRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVyxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDMUMsT0FBTztZQUNILE1BQU07WUFDTixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRTtZQUMxQixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDO1NBQ3RELENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQb2ludCxcbiAgICBQb2ludE9mUmVjdGFuZ2xlLFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBXLFxuICAgIGdldEVsbGlwc2VUYW5nZW50U2xvcGUsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kRWxsaXBzZSxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICBnZXRWZWN0b3JGcm9tUG9pbnRBbmRTbG9wZSxcbiAgICBzZXRTdHJva2VMaW5lY2FwXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0R2VvbWV0cnksIFNoYXBlRW5naW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBnZXRQb2x5Z29uRWRnZUJ5Q29ubmVjdGlvblBvaW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvcG9seWdvbic7XG5pbXBvcnQgeyBSZWN0YW5nbGVFbmdpbmUgfSBmcm9tICcuLi9iYXNpYy1zaGFwZXMvcmVjdGFuZ2xlJztcbmltcG9ydCB7IGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQsIHJvdGF0ZVZlY3RvciB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgQWN0b3JFbmdpbmU6IFNoYXBlRW5naW5lID0ge1xuICAgIGRyYXcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJzID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gcnMucGF0aChcbiAgICAgICAgICAgIGBNJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDJ9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gNH0gIFxuICAgICAgICAgICAgQSR7cmVjdGFuZ2xlLndpZHRoIC8gMyAvIDJ9ICR7cmVjdGFuZ2xlLmhlaWdodCAvIDQgLyAyfSwgMCwgMCwgMSwgJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDJ9ICR7cmVjdGFuZ2xlLnl9IFxuICAgICAgICAgICAgQSR7cmVjdGFuZ2xlLndpZHRoIC8gMyAvIDJ9ICR7cmVjdGFuZ2xlLmhlaWdodCAvIDQgLyAyfSwgMCwgMCwgMSwgJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDJ9ICR7cmVjdGFuZ2xlLnkgK1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgLyA0fVxuICAgICAgICAgICAgViR7cmVjdGFuZ2xlLnkgKyAocmVjdGFuZ2xlLmhlaWdodCAvIDQpICogM31cbiAgICAgICAgICAgIE0ke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMn0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyfSBIJHtyZWN0YW5nbGUueH1cbiAgICAgICAgICAgIE0ke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMn0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyfSBIJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aH1cbiAgICAgICAgICAgIE0ke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMn0gJHtyZWN0YW5nbGUueSArIChyZWN0YW5nbGUuaGVpZ2h0IC8gNCkgKiAzfVxuICAgICAgICAgICAgTCR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAxMn0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHR9XG4gICAgICAgICAgICBNJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDJ9ICR7cmVjdGFuZ2xlLnkgKyAocmVjdGFuZ2xlLmhlaWdodCAvIDQpICogM31cbiAgICAgICAgICAgIEwke3JlY3RhbmdsZS54ICsgKHJlY3RhbmdsZS53aWR0aCAvIDEyKSAqIDExfSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodH1cbiAgICAgICAgICAgIGAsXG4gICAgICAgICAgICB7IC4uLm9wdGlvbnMsIGZpbGxTdHlsZTogJ3NvbGlkJyB9XG4gICAgICAgICk7XG4gICAgICAgIHNldFN0cm9rZUxpbmVjYXAoc2hhcGUsICdyb3VuZCcpO1xuICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSxcbiAgICBpc0luc2lkZVBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3BvaW50LCBwb2ludF0pO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBsZXQgbmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnQsIFJlY3RhbmdsZUVuZ2luZS5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKSk7XG5cbiAgICAgICAgaWYgKG5lYXJlc3RQb2ludFsxXSA+PSByZWN0YW5nbGUueSAmJiBuZWFyZXN0UG9pbnRbMV0gPD0gcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gNCkge1xuICAgICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQ6IFBvaW50ID0gW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gNCAvIDJdO1xuICAgICAgICAgICAgbmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kRWxsaXBzZShwb2ludCwgY2VudGVyUG9pbnQsIHJlY3RhbmdsZS53aWR0aCAvIDMgLyAyLCByZWN0YW5nbGUuaGVpZ2h0IC8gNCAvIDIpO1xuICAgICAgICAgICAgcmV0dXJuIG5lYXJlc3RQb2ludDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmVhcmVzdFBvaW50WzFdID49IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDQgJiYgbmVhcmVzdFBvaW50WzFdIDwgcmVjdGFuZ2xlLnkgKyAocmVjdGFuZ2xlLmhlaWdodCAvIDQpICogMykge1xuICAgICAgICAgICAgaWYgKG5lYXJlc3RQb2ludFsxXSA9PT0gcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgbmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnQsIFtcbiAgICAgICAgICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gNF0sXG4gICAgICAgICAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS55ICsgKHJlY3RhbmdsZS5oZWlnaHQgLyA0KSAqIDNdXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5lYXJlc3RQb2ludCA9IGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBbXG4gICAgICAgICAgICAgICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0sXG4gICAgICAgICAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl1cbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZWFyZXN0UG9pbnQ7XG4gICAgICAgIH1cbiAgICAgICAgbmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnQsIFtcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDEyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnkgKyAocmVjdGFuZ2xlLmhlaWdodCAvIDQpICogM10sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyAocmVjdGFuZ2xlLndpZHRoIC8gMTIpICogMTEsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF1cbiAgICAgICAgXSk7XG4gICAgICAgIHJldHVybiBuZWFyZXN0UG9pbnQ7XG4gICAgfSxcbiAgICBnZXRDb25uZWN0b3JQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcblxuICAgIGdldFRhbmdlbnRWZWN0b3JCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnRPZlJlY3RhbmdsZTogUG9pbnRPZlJlY3RhbmdsZSkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgcG9pbnRPZlJlY3RhbmdsZSk7XG4gICAgICAgIGlmIChjb25uZWN0aW9uUG9pbnRbMV0gPj0gcmVjdGFuZ2xlLnkgJiYgY29ubmVjdGlvblBvaW50WzFdIDw9IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclBvaW50OiBQb2ludCA9IFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDQgLyAyXTtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gW2Nvbm5lY3Rpb25Qb2ludFswXSAtIGNlbnRlclBvaW50WzBdLCAtKGNvbm5lY3Rpb25Qb2ludFsxXSAtIGNlbnRlclBvaW50WzFdKV07XG4gICAgICAgICAgICBjb25zdCBhID0gcmVjdGFuZ2xlLndpZHRoIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IGIgPSByZWN0YW5nbGUuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGNvbnN0IHNsb3BlID0gZ2V0RWxsaXBzZVRhbmdlbnRTbG9wZShwb2ludFswXSwgcG9pbnRbMV0sIGEsIGIpIGFzIGFueTtcbiAgICAgICAgICAgIGNvbnN0IHZlY3RvciA9IGdldFZlY3RvckZyb21Qb2ludEFuZFNsb3BlKHBvaW50WzBdLCBwb2ludFsxXSwgc2xvcGUpO1xuICAgICAgICAgICAgcmV0dXJuIHZlY3RvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25uZWN0aW9uUG9pbnRbMV0gPj0gcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gNCAmJiBjb25uZWN0aW9uUG9pbnRbMV0gPCByZWN0YW5nbGUueSArIChyZWN0YW5nbGUuaGVpZ2h0IC8gNCkgKiAzKSB7XG4gICAgICAgICAgICBpZiAoY29ubmVjdGlvblBvaW50WzBdIDwgcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvdGF0ZVZlY3RvcihcbiAgICAgICAgICAgICAgICAgICAgZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdLCBjb25uZWN0aW9uUG9pbnQpLFxuICAgICAgICAgICAgICAgICAgICAtKE1hdGguUEkgLyAyKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByb3RhdGVWZWN0b3IoXG4gICAgICAgICAgICAgICAgICAgIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXSwgY29ubmVjdGlvblBvaW50KSxcbiAgICAgICAgICAgICAgICAgICAgLShNYXRoLlBJIC8gMilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbm5lY3Rpb25Qb2ludFsxXSA+PSByZWN0YW5nbGUueSArIChyZWN0YW5nbGUuaGVpZ2h0IC8gNCkgKiAzKSB7XG4gICAgICAgICAgICBpZiAoY29ubmVjdGlvblBvaW50WzBdIDwgcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoY29ubmVjdGlvblBvaW50LCBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAxMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50KFxuICAgICAgICAgICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyAocmVjdGFuZ2xlLndpZHRoIC8gMTIpICogMTEsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF0sXG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25Qb2ludFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChjb25uZWN0aW9uUG9pbnQsIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDQsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF0pO1xuICAgIH0sXG4gICAgZ2V0VGV4dFJlY3RhbmdsZTogKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyEpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBlbGVtZW50LnRleHRIZWlnaHQhO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnRSZWN0YW5nbGUud2lkdGggKyA0MDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCA+IDAgPyB3aWR0aCA6IDAsXG4gICAgICAgICAgICB4OiBlbGVtZW50UmVjdGFuZ2xlLnggLSAyMCxcbiAgICAgICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIGVsZW1lbnRSZWN0YW5nbGUuaGVpZ2h0ICsgNFxuICAgICAgICB9O1xuICAgIH1cbn07XG4iXX0=
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9lbmdpbmVzL3VtbC9hY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsVUFBVSxFQUdWLGVBQWUsRUFHZiw0QkFBNEIsRUFDNUIsc0JBQXNCLEVBQ3RCLDhDQUE4QyxFQUM5QyxxQ0FBcUMsRUFHckMsMEJBQTBCLEVBQzFCLGdCQUFnQixFQUNuQixNQUFNLGFBQWEsQ0FBQztBQUtyQixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBVTNFLFNBQVMsaUJBQWlCLENBQUMsU0FBMEI7SUFDakQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNsRCxNQUFNLFVBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ3hGLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXZELE9BQU87UUFDSCxjQUFjLEVBQUU7WUFDWixFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDcEIsRUFBRSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQ3JCLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLFlBQVksRUFBRSxDQUFDO1lBQ2YsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNwQjtRQUNELFFBQVEsRUFBRTtZQUNOLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFD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LGVBQWUsQ0FDbEIsQ0FBQztZQUNOLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyw0QkFBNEIsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDOUgsQ0FBQztJQUNELGdCQUFnQixFQUFFLENBQUMsT0FBc0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFPLENBQUMsQ0FBQztRQUMvRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVyxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDMUMsT0FBTztZQUNILE1BQU07WUFDTixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsRUFBRTtZQUMxQixDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDO1NBQ3RELENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQb2ludCxcbiAgICBQb2ludE9mUmVjdGFuZ2xlLFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBTVkdBcmNDb21tYW5kLFxuICAgIFcsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCxcbiAgICBnZXRFbGxpcHNlVGFuZ2VudFNsb3BlLFxuICAgIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZERpc2NyZXRlU2VnbWVudHMsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kRWxsaXBzZSxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50LFxuICAgIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLFxuICAgIGdldFZlY3RvckZyb21Qb2ludEFuZFNsb3BlLFxuICAgIHNldFN0cm9rZUxpbmVjYXBcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRHZW9tZXRyeSwgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IGdldFBvbHlnb25FZGdlQnlDb25uZWN0aW9uUG9pbnQgfSBmcm9tICcuLi8uLi91dGlscy9wb2x5Z29uJztcbmltcG9ydCB7IFJlY3RhbmdsZUVuZ2luZSB9IGZyb20gJy4uL2Jhc2ljLXNoYXBlcy9yZWN0YW5nbGUnO1xuaW1wb3J0IHsgZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludCwgcm90YXRlVmVjdG9yIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5cbmludGVyZmFjZSBBY3RvclBhdGhEYXRhIHtcbiAgICBoZWFkQXJjQ29tbWFuZDogU1ZHQXJjQ29tbWFuZDtcbiAgICBib2R5TGluZTogW1BvaW50LCBQb2ludF07XG4gICAgYXJtc0xpbmU6IFtQb2ludCwgUG9pbnRdO1xuICAgIGxlZnRMZWdMaW5lOiBbUG9pbnQsIFBvaW50XTtcbiAgICByaWdodExlZ0xpbmU6IFtQb2ludCwgUG9pbnRdO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUFjdG9yUGF0aChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCk6IEFjdG9yUGF0aERhdGEge1xuICAgIGNvbnN0IGNlbnRlclggPSByZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDI7XG4gICAgY29uc3QgaGVhZFJhZGl1cyA9IHsgd2lkdGg6IHJlY3RhbmdsZS53aWR0aCAvIDMgLyAyLCBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHQgLyA0IC8gMiB9O1xuICAgIGNvbnN0IGNlbnRlclkgPSByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyA0IC8gMjtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGhlYWRBcmNDb21tYW5kOiB7XG4gICAgICAgICAgICByeDogaGVhZFJhZGl1cy53aWR0aCxcbiAgICAgICAgICAgIHJ5OiBoZWFkUmFkaXVzLmhlaWdodCxcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb246IDAsXG4gICAgICAgICAgICBsYXJnZUFyY0ZsYWc6IDAsXG4gICAgICAgICAgICBzd2VlcEZsYWc6IDEsXG4gICAgICAgICAgICBlbmRYOiBjZW50ZXJYLFxuICAgICAgICAgICAgZW5kWTogcmVjdGFuZ2xlLnlcbiAgICAgICAgfSxcbiAgICAgICAgYm9keUxpbmU6IFtcbiAgICAgICAgICAgIFtjZW50ZXJYLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyA0XSxcbiAgICAgICAgICAgIFtjZW50ZXJYLCByZWN0YW5nbGUueSArIChyZWN0YW5nbGUuaGVpZ2h0IC8gNCkgKiAzXVxuICAgICAgICBdLFxuICAgICAgICBhcm1zTGluZTogW1xuICAgICAgICAgICAgW3JlY3RhbmdsZS54LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl1cbiAgICAgICAgXSxcbiAgICAgICAgbGVmdExlZ0xpbmU6IFtcbiAgICAgICAgICAgIFtjZW50ZXJYLCByZWN0YW5nbGUueSArIChyZWN0YW5nbGUuaGVpZ2h0IC8gNCkgKiAzXSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDEyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdXG4gICAgICAgIF0sXG4gICAgICAgIHJpZ2h0TGVnTGluZTogW1xuICAgICAgICAgICAgW2NlbnRlclgsIHJlY3RhbmdsZS55ICsgKHJlY3RhbmdsZS5oZWlnaHQgLyA0KSAqIDNdLFxuICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgKHJlY3RhbmdsZS53aWR0aCAvIDEyKSAqIDExLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdXG4gICAgICAgIF1cbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgQWN0b3JFbmdpbmU6IFNoYXBlRW5naW5lID0ge1xuICAgIGRyYXcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJzID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgIGNvbnN0IHsgaGVhZEFyY0NvbW1hbmQsIGJvZHlMaW5lLCBhcm1zTGluZSwgbGVmdExlZ0xpbmUsIHJpZ2h0TGVnTGluZSB9ID0gZ2VuZXJhdGVBY3RvclBhdGgocmVjdGFuZ2xlKTtcblxuICAgICAgICBjb25zdCBwYXRoRGF0YSA9IFtcbiAgICAgICAgICAgIC8vIOWktOmDqO+8iOS7juS4remXtOW8gOWni+eUu++8iVxuICAgICAgICAgICAgYE0ke2JvZHlMaW5lWzBdWzBdfSAke2JvZHlMaW5lWzBdWzFdfWAsXG4gICAgICAgICAgICBgQSR7aGVhZEFyY0NvbW1hbmQucnh9ICR7aGVhZEFyY0NvbW1hbmQucnl9ICR7aGVhZEFyY0NvbW1hbmQueEF4aXNSb3RhdGlvbn0gJHtoZWFkQXJjQ29tbWFuZC5sYXJnZUFyY0ZsYWd9ICR7aGVhZEFyY0NvbW1hbmQuc3dlZXBGbGFnfSAke2hlYWRBcmNDb21tYW5kLmVuZFh9ICR7aGVhZEFyY0NvbW1hbmQuZW5kWX1gLFxuICAgICAgICAgICAgYEEke2hlYWRBcmNDb21tYW5kLnJ4fSAke2hlYWRBcmNDb21tYW5kLnJ5fSAke2hlYWRBcmNDb21tYW5kLnhBeGlzUm90YXRpb259ICR7aGVhZEFyY0NvbW1hbmQubGFyZ2VBcmNGbGFnfSAke2hlYWRBcmNDb21tYW5kLnN3ZWVwRmxhZ30gJHtib2R5TGluZVswXVswXX0gJHtib2R5TGluZVswXVsxXX1gLFxuICAgICAgICAgICAgLy8g6Lqr5L2TXG4gICAgICAgICAgICBgViR7Ym9keUxpbmVbMV1bMV19YCxcbiAgICAgICAgICAgIC8vIOaJi+iHglxuICAgICAgICAgICAgYE0ke2FybXNMaW5lWzBdWzBdfSAke2FybXNMaW5lWzBdWzFdfSBIJHthcm1zTGluZVsxXVswXX1gLFxuICAgICAgICAgICAgLy8g6IW/XG4gICAgICAgICAgICBgTSR7bGVmdExlZ0xpbmVbMF1bMF19ICR7bGVmdExlZ0xpbmVbMF1bMV19IEwke2xlZnRMZWdMaW5lWzFdWzBdfSAke2xlZnRMZWdMaW5lWzFdWzFdfWAsXG4gICAgICAgICAgICBgTSR7cmlnaHRMZWdMaW5lWzBdWzBdfSAke3JpZ2h0TGVnTGluZVswXVsxXX0gTCR7cmlnaHRMZWdMaW5lWzFdWzBdfSAke3JpZ2h0TGVnTGluZVsxXVsxXX1gXG4gICAgICAgIF0uam9pbignICcpO1xuXG4gICAgICAgIGNvbnN0IHNoYXBlID0gcnMucGF0aChwYXRoRGF0YSwgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSk7XG4gICAgICAgIHNldFN0cm9rZUxpbmVjYXAoc2hhcGUsICdyb3VuZCcpO1xuICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSxcblxuICAgIGdldE5lYXJlc3RQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHsgaGVhZEFyY0NvbW1hbmQsIGJvZHlMaW5lLCBhcm1zTGluZSwgbGVmdExlZ0xpbmUsIHJpZ2h0TGVnTGluZSB9ID0gZ2VuZXJhdGVBY3RvclBhdGgocmVjdGFuZ2xlKTtcblxuICAgICAgICAvLyDmo4Dmn6XlpLTpg6jmpK3lnIZcbiAgICAgICAgY29uc3QgaGVhZENlbnRlcjogUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyA0IC8gMl07XG4gICAgICAgIGNvbnN0IG5lYXJlc3RQb2ludEZvckhlYWQgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRFbGxpcHNlKHBvaW50LCBoZWFkQ2VudGVyLCBoZWFkQXJjQ29tbWFuZC5yeCwgaGVhZEFyY0NvbW1hbmQucnkpO1xuICAgICAgICBjb25zdCBkaXN0YW5jZUZvckhlYWQgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLnBvaW50LCAuLi5uZWFyZXN0UG9pbnRGb3JIZWFkKTtcblxuICAgICAgICAvLyDmo4Dmn6XmiYDmnInnur/mrrVcbiAgICAgICAgY29uc3QgYWxsU2VnbWVudHMgPSBbYm9keUxpbmUsIGFybXNMaW5lLCBsZWZ0TGVnTGluZSwgcmlnaHRMZWdMaW5lXTtcbiAgICAgICAgY29uc3QgbmVhcmVzdFBvaW50Rm9yTGluZXMgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmREaXNjcmV0ZVNlZ21lbnRzKHBvaW50LCBhbGxTZWdtZW50cyk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlRm9yTGluZXMgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLnBvaW50LCAuLi5uZWFyZXN0UG9pbnRGb3JMaW5lcyk7XG5cbiAgICAgICAgcmV0dXJuIGRpc3RhbmNlRm9ySGVhZCA8IGRpc3RhbmNlRm9yTGluZXMgPyBuZWFyZXN0UG9pbnRGb3JIZWFkIDogbmVhcmVzdFBvaW50Rm9yTGluZXM7XG4gICAgfSxcbiAgICBpc0luc2lkZVBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3BvaW50LCBwb2ludF0pO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXRDb25uZWN0b3JQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXRUYW5nZW50VmVjdG9yQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50T2ZSZWN0YW5nbGU6IFBvaW50T2ZSZWN0YW5nbGUpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGUsIHBvaW50T2ZSZWN0YW5nbGUpO1xuICAgICAgICBpZiAoY29ubmVjdGlvblBvaW50WzFdID49IHJlY3RhbmdsZS55ICYmIGNvbm5lY3Rpb25Qb2ludFsxXSA8PSByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyA0KSB7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXJQb2ludDogUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyA0IC8gMl07XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IFtjb25uZWN0aW9uUG9pbnRbMF0gLSBjZW50ZXJQb2ludFswXSwgLShjb25uZWN0aW9uUG9pbnRbMV0gLSBjZW50ZXJQb2ludFsxXSldO1xuICAgICAgICAgICAgY29uc3QgYSA9IHJlY3RhbmdsZS53aWR0aCAvIDI7XG4gICAgICAgICAgICBjb25zdCBiID0gcmVjdGFuZ2xlLmhlaWdodCAvIDI7XG4gICAgICAgICAgICBjb25zdCBzbG9wZSA9IGdldEVsbGlwc2VUYW5nZW50U2xvcGUocG9pbnRbMF0sIHBvaW50WzFdLCBhLCBiKSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCB2ZWN0b3IgPSBnZXRWZWN0b3JGcm9tUG9pbnRBbmRTbG9wZShwb2ludFswXSwgcG9pbnRbMV0sIHNsb3BlKTtcbiAgICAgICAgICAgIHJldHVybiB2ZWN0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29ubmVjdGlvblBvaW50WzFdID49IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDQgJiYgY29ubmVjdGlvblBvaW50WzFdIDwgcmVjdGFuZ2xlLnkgKyAocmVjdGFuZ2xlLmhlaWdodCAvIDQpICogMykge1xuICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25Qb2ludFswXSA8IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiByb3RhdGVWZWN0b3IoXG4gICAgICAgICAgICAgICAgICAgIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoW3JlY3RhbmdsZS54LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXSwgY29ubmVjdGlvblBvaW50KSxcbiAgICAgICAgICAgICAgICAgICAgLShNYXRoLlBJIC8gMilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm90YXRlVmVjdG9yKFxuICAgICAgICAgICAgICAgICAgICBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50KFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0sIGNvbm5lY3Rpb25Qb2ludCksXG4gICAgICAgICAgICAgICAgICAgIC0oTWF0aC5QSSAvIDIpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25uZWN0aW9uUG9pbnRbMV0gPj0gcmVjdGFuZ2xlLnkgKyAocmVjdGFuZ2xlLmhlaWdodCAvIDQpICogMykge1xuICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb25Qb2ludFswXSA8IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50KGNvbm5lY3Rpb25Qb2ludCwgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMTIsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChcbiAgICAgICAgICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgKHJlY3RhbmdsZS53aWR0aCAvIDEyKSAqIDExLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uUG9pbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoY29ubmVjdGlvblBvaW50LCBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyA0LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdKTtcbiAgICB9LFxuICAgIGdldFRleHRSZWN0YW5nbGU6IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0ITtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoICsgNDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGggPiAwID8gd2lkdGggOiAwLFxuICAgICAgICAgICAgeDogZWxlbWVudFJlY3RhbmdsZS54IC0gMjAsXG4gICAgICAgICAgICB5OiBlbGVtZW50UmVjdGFuZ2xlLnkgKyBlbGVtZW50UmVjdGFuZ2xlLmhlaWdodCArIDRcbiAgICAgICAgfTtcbiAgICB9XG59O1xuIl19
@@ -1,24 +1,59 @@
1
- import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndEllipse, getNearestPointBetweenPointAndSegments, setStrokeLinecap } from '@plait/core';
2
- import { RectangleEngine } from '../basic-shapes/rectangle';
1
+ import { PlaitBoard, RectangleClient, distanceBetweenPointAndPoint, getNearestPointBetweenPointAndArc, getNearestPointBetweenPointAndEllipse, getNearestPointBetweenPointAndSegments, setStrokeLinecap } from '@plait/core';
3
2
  import { getUnitVectorByPointAndPoint, rotateVector } from '@plait/common';
3
+ function generateAssemblyPath(rectangle) {
4
+ const centerY = rectangle.y + rectangle.height / 2;
5
+ const firstLineEndX = rectangle.x + rectangle.width * 0.3;
6
+ const circleWidth = rectangle.width * 0.13;
7
+ const circleHeight = rectangle.height * 0.285;
8
+ const verticalX = firstLineEndX + circleWidth;
9
+ const verticalRadius = rectangle.width * 0.233;
10
+ return {
11
+ startPoint: [rectangle.x, centerY],
12
+ line1: [
13
+ [rectangle.x, centerY],
14
+ [firstLineEndX, centerY]
15
+ ],
16
+ circleArcCommand: {
17
+ rx: circleWidth,
18
+ ry: circleHeight,
19
+ xAxisRotation: 0,
20
+ largeArcFlag: 1,
21
+ sweepFlag: 1,
22
+ endX: firstLineEndX,
23
+ endY: centerY
24
+ },
25
+ verticalArcCommand: {
26
+ rx: verticalRadius,
27
+ ry: rectangle.height / 2,
28
+ xAxisRotation: 0,
29
+ largeArcFlag: 0,
30
+ sweepFlag: 1,
31
+ endX: verticalX,
32
+ endY: rectangle.y + rectangle.height
33
+ },
34
+ line2: [
35
+ [verticalX + verticalRadius, centerY],
36
+ [rectangle.x + rectangle.width, centerY]
37
+ ]
38
+ };
39
+ }
4
40
  export const AssemblyEngine = {
5
41
  draw(board, rectangle, options) {
6
42
  const rs = PlaitBoard.getRoughSVG(board);
7
- const shape = rs.path(`
8
- M${rectangle.x} ${rectangle.y + rectangle.height / 2}
9
- H${rectangle.x + rectangle.width * 0.3}
10
- A${rectangle.width * 0.13} ${rectangle.height * 0.285}, 0, 1, 1 ${rectangle.x +
11
- rectangle.width * 0.3 +
12
- rectangle.width * 0.26} ${rectangle.y + rectangle.height / 2}
13
- A${rectangle.width * 0.13} ${rectangle.height * 0.285}, 0, 1, 1 ${rectangle.x + rectangle.width * 0.3} ${rectangle.y +
14
- rectangle.height / 2}
15
- M${rectangle.x + rectangle.width * 0.3 + rectangle.width * 0.13} ${rectangle.y}
16
- A${rectangle.width * 0.233} ${rectangle.height / 2}, 0, 0, 1 ${rectangle.x +
17
- rectangle.width * 0.3 +
18
- rectangle.width * 0.13} ${rectangle.y + rectangle.height}
19
- M${rectangle.x + rectangle.width * 0.3 + rectangle.width * 0.13 + rectangle.width * 0.233} ${rectangle.y +
20
- rectangle.height / 2} H${rectangle.x + rectangle.width}
21
- `, {
43
+ const { startPoint, line1, circleArcCommand, verticalArcCommand, line2 } = generateAssemblyPath(rectangle);
44
+ const pathData = [
45
+ `M${startPoint[0]} ${startPoint[1]}`,
46
+ `H${line1[1][0]}`,
47
+ // 画完整的圆形:先画一个半圆,再画另一个半圆
48
+ `A${circleArcCommand.rx} ${circleArcCommand.ry} ${circleArcCommand.xAxisRotation} ${circleArcCommand.largeArcFlag} ${circleArcCommand.sweepFlag} ${line1[1][0] + circleArcCommand.rx * 2} ${circleArcCommand.endY}`,
49
+ `A${circleArcCommand.rx} ${circleArcCommand.ry} ${circleArcCommand.xAxisRotation} ${circleArcCommand.largeArcFlag} ${circleArcCommand.sweepFlag} ${circleArcCommand.endX} ${circleArcCommand.endY}`,
50
+ // 垂直椭圆
51
+ `M${verticalArcCommand.endX} ${rectangle.y}`,
52
+ `A${verticalArcCommand.rx} ${verticalArcCommand.ry} ${verticalArcCommand.xAxisRotation} ${verticalArcCommand.largeArcFlag} ${verticalArcCommand.sweepFlag} ${verticalArcCommand.endX} ${verticalArcCommand.endY}`,
53
+ // 最后一条线
54
+ `M${line2[0][0]} ${line2[0][1]} H${line2[1][0]}`
55
+ ].join(' ');
56
+ const shape = rs.path(pathData, {
22
57
  ...options,
23
58
  fillStyle: 'solid'
24
59
  });
@@ -36,11 +71,25 @@ export const AssemblyEngine = {
36
71
  return RectangleClient.getEdgeCenterPoints(rectangle);
37
72
  },
38
73
  getNearestPoint(rectangle, point) {
39
- const nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
40
- if (nearestPoint[0] === rectangle.x + rectangle.width / 2) {
41
- return getNearestPointBetweenPointAndEllipse(point, [rectangle.x + rectangle.width * 0.43, rectangle.y + rectangle.height / 2], rectangle.width * 0.223, rectangle.height / 2);
42
- }
43
- return nearestPoint;
74
+ const { line1, line2, circleArcCommand, verticalArcCommand } = generateAssemblyPath(rectangle);
75
+ // 检查直线段
76
+ const nearestPointForLines = getNearestPointBetweenPointAndSegments(point, [...line1, ...line2]);
77
+ const distanceForLines = distanceBetweenPointAndPoint(...point, ...nearestPointForLines);
78
+ // 检查中间圆形
79
+ const circleCenter = [line1[1][0] + circleArcCommand.rx, line1[1][1]];
80
+ const nearestPointForCircle = getNearestPointBetweenPointAndEllipse(point, circleCenter, circleArcCommand.rx, circleArcCommand.ry);
81
+ const distanceForCircle = distanceBetweenPointAndPoint(...point, ...nearestPointForCircle);
82
+ // 检查垂直椭圆(使用 getNearestPointBetweenPointAndArc 处理半圆弧)
83
+ const arcStartPoint = [verticalArcCommand.endX, rectangle.y];
84
+ const nearestPointForEllipse = getNearestPointBetweenPointAndArc(point, arcStartPoint, verticalArcCommand);
85
+ const distanceForEllipse = distanceBetweenPointAndPoint(...point, ...nearestPointForEllipse);
86
+ // 返回最近的点
87
+ const minDistance = Math.min(distanceForLines, distanceForCircle, distanceForEllipse);
88
+ if (minDistance === distanceForLines)
89
+ return nearestPointForLines;
90
+ if (minDistance === distanceForCircle)
91
+ return nearestPointForCircle;
92
+ return nearestPointForEllipse;
44
93
  },
45
94
  getTangentVectorByConnectionPoint(rectangle, pointOfRectangle) {
46
95
  const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
@@ -53,4 +102,4 @@ export const AssemblyEngine = {
53
102
  return getUnitVectorByPointAndPoint(connectionPoint, [rectangle.x, rectangle.y + rectangle.height / 2]);
54
103
  }
55
104
  };
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZW1ibHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9lbmdpbmVzL3VtbC9hc3NlbWJseS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsVUFBVSxFQUdWLGVBQWUsRUFDZixxQ0FBcUMsRUFDckMsc0NBQXNDLEVBQ3RDLGdCQUFnQixFQUNuQixNQUFNLGFBQWEsQ0FBQztBQUdyQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQWdCO0lBQ3ZDLElBQUksQ0FBQyxLQUFpQixFQUFFLFNBQTBCLEVBQUUsT0FBZ0I7UUFDaEUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUNqQjtXQUNELFNBQVMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7V0FDakQsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLEdBQUc7V0FDbkMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLGFBQWEsU0FBUyxDQUFDLENBQUM7WUFDckUsU0FBUyxDQUFDLEtBQUssR0FBRyxHQUFHO1lBQ3JCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDO1dBQ2pFLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxhQUFhLFNBQVMsQ0FBQyxDQUFDLEdB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QUFlLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BJLENBQUM7UUFDRCxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkgsT0FBTyw0QkFBNEIsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVHLENBQUM7UUFDRCxPQUFPLDRCQUE0QixDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kRWxsaXBzZSxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICBzZXRTdHJva2VMaW5lY2FwXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFNoYXBlRW5naW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBSZWN0YW5nbGVFbmdpbmUgfSBmcm9tICcuLi9iYXNpYy1zaGFwZXMvcmVjdGFuZ2xlJztcbmltcG9ydCB7IGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQsIHJvdGF0ZVZlY3RvciB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgQXNzZW1ibHlFbmdpbmU6IFNoYXBlRW5naW5lID0ge1xuICAgIGRyYXcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJzID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgIGNvbnN0IHNoYXBlID0gcnMucGF0aChcbiAgICAgICAgICAgIGBcbiAgICAgICAgTSR7cmVjdGFuZ2xlLnh9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMn0gXG4gICAgICAgIEgke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC4zfVxuICAgICAgICBBJHtyZWN0YW5nbGUud2lkdGggKiAwLjEzfSAke3JlY3RhbmdsZS5oZWlnaHQgKiAwLjI4NX0sIDAsIDEsIDEgJHtyZWN0YW5nbGUueCArXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLndpZHRoICogMC4zICtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUud2lkdGggKiAwLjI2fSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJ9XG4gICAgICAgIEEke3JlY3RhbmdsZS53aWR0aCAqIDAuMTN9ICR7cmVjdGFuZ2xlLmhlaWdodCAqIDAuMjg1fSwgMCwgMSwgMSAke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC4zfSAke3JlY3RhbmdsZS55ICtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUuaGVpZ2h0IC8gMn1cbiAgICAgICAgTSR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiAwLjMgKyByZWN0YW5nbGUud2lkdGggKiAwLjEzfSAke3JlY3RhbmdsZS55fVxuICAgICAgICBBJHtyZWN0YW5nbGUud2lkdGggKiAwLjIzM30gJHtyZWN0YW5nbGUuaGVpZ2h0IC8gMn0sIDAsIDAsIDEgJHtyZWN0YW5nbGUueCArXG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLndpZHRoICogMC4zICtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUud2lkdGggKiAwLjEzfSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodH1cbiAgICAgICAgTSR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiAwLjMgKyByZWN0YW5nbGUud2lkdGggKiAwLjEzICsgcmVjdGFuZ2xlLndpZHRoICogMC4yMzN9ICR7cmVjdGFuZ2xlLnkgK1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZS5oZWlnaHQgLyAyfSBIJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aH1cbiAgICAgICAgYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBzZXRTdHJva2VMaW5lY2FwKHNoYXBlLCAncm91bmQnKTtcblxuICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSxcbiAgICBpc0luc2lkZVBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3BvaW50LCBwb2ludF0pO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXRDb25uZWN0b3JQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBuZWFyZXN0UG9pbnQgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludCwgUmVjdGFuZ2xlRW5naW5lLmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpKTtcbiAgICAgICAgaWYgKG5lYXJlc3RQb2ludFswXSA9PT0gcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kRWxsaXBzZShcbiAgICAgICAgICAgICAgICBwb2ludCxcbiAgICAgICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiAwLjQzLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXSxcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUud2lkdGggKiAwLjIyMyxcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUuaGVpZ2h0IC8gMlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmVhcmVzdFBvaW50O1xuICAgIH0sXG4gICAgZ2V0VGFuZ2VudFZlY3RvckJ5Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludE9mUmVjdGFuZ2xlOiBQb2ludE9mUmVjdGFuZ2xlKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Qb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBwb2ludE9mUmVjdGFuZ2xlKTtcbiAgICAgICAgaWYgKGNvbm5lY3Rpb25Qb2ludFswXSA+IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC40MyAmJiBjb25uZWN0aW9uUG9pbnRbMV0gPCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyKSB7XG4gICAgICAgICAgICByZXR1cm4gcm90YXRlVmVjdG9yKGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoY29ubmVjdGlvblBvaW50LCBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdKSwgLU1hdGguUEkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25uZWN0aW9uUG9pbnRbMF0gPiByZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAqIDAuNDMgJiYgY29ubmVjdGlvblBvaW50WzFdID4gcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMikge1xuICAgICAgICAgICAgcmV0dXJuIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoY29ubmVjdGlvblBvaW50LCBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChjb25uZWN0aW9uUG9pbnQsIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0pO1xuICAgIH1cbn07XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZW1ibHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9lbmdpbmVzL3VtbC9hc3NlbWJseS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsVUFBVSxFQUdWLGVBQWUsRUFFZiw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2pDLHFDQUFxQyxFQUNyQyxzQ0FBc0MsRUFDdEMsZ0JBQWdCLEVBQ25CLE1BQU0sYUFBYSxDQUFDO0FBSXJCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFVM0UsU0FBUyxvQkFBb0IsQ0FBQyxTQUEwQjtJQUNwRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDMUQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDM0MsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDOUMsTUFBTSxTQUFTLEdBQUcsYUFBYSxHQUFHLFdBQVcsQ0FBQztJQUM5QyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUUvQyxPQUFPO1FBQ0gsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDbEMsS0FBSyxFQUFFO1lBQ0gsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztZQUN0QixDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUM7U0FDM0I7UUFDRCxnQkFBZ0IsRUFBRTtZQUNkLEVBQUUsRUFBRSxXQUFXO1lBQ2YsRUFBRSxFQUFFLFlBQVk7WUFDaEIsYUFBYSxF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QUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEksQ0FBQztRQUNELElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2SCxPQUFPLDRCQUE0QixDQUFDLGVBQWUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUcsQ0FBQztRQUNELE9BQU8sNEJBQTRCLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQb2ludCxcbiAgICBQb2ludE9mUmVjdGFuZ2xlLFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBTVkdBcmNDb21tYW5kLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kQXJjLFxuICAgIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZEVsbGlwc2UsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMsXG4gICAgc2V0U3Ryb2tlTGluZWNhcFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlRW5naW5lIH0gZnJvbSAnLi4vYmFzaWMtc2hhcGVzL3JlY3RhbmdsZSc7XG5pbXBvcnQgeyBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50LCByb3RhdGVWZWN0b3IgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcblxuaW50ZXJmYWNlIEFzc2VtYmx5UGF0aERhdGEge1xuICAgIHN0YXJ0UG9pbnQ6IFBvaW50O1xuICAgIGxpbmUxOiBbUG9pbnQsIFBvaW50XTtcbiAgICBjaXJjbGVBcmNDb21tYW5kOiBTVkdBcmNDb21tYW5kO1xuICAgIHZlcnRpY2FsQXJjQ29tbWFuZDogU1ZHQXJjQ29tbWFuZDtcbiAgICBsaW5lMjogW1BvaW50LCBQb2ludF07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQXNzZW1ibHlQYXRoKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KTogQXNzZW1ibHlQYXRoRGF0YSB7XG4gICAgY29uc3QgY2VudGVyWSA9IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDI7XG4gICAgY29uc3QgZmlyc3RMaW5lRW5kWCA9IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC4zO1xuICAgIGNvbnN0IGNpcmNsZVdpZHRoID0gcmVjdGFuZ2xlLndpZHRoICogMC4xMztcbiAgICBjb25zdCBjaXJjbGVIZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0ICogMC4yODU7XG4gICAgY29uc3QgdmVydGljYWxYID0gZmlyc3RMaW5lRW5kWCArIGNpcmNsZVdpZHRoO1xuICAgIGNvbnN0IHZlcnRpY2FsUmFkaXVzID0gcmVjdGFuZ2xlLndpZHRoICogMC4yMzM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydFBvaW50OiBbcmVjdGFuZ2xlLngsIGNlbnRlclldLFxuICAgICAgICBsaW5lMTogW1xuICAgICAgICAgICAgW3JlY3RhbmdsZS54LCBjZW50ZXJZXSxcbiAgICAgICAgICAgIFtmaXJzdExpbmVFbmRYLCBjZW50ZXJZXVxuICAgICAgICBdLFxuICAgICAgICBjaXJjbGVBcmNDb21tYW5kOiB7XG4gICAgICAgICAgICByeDogY2lyY2xlV2lkdGgsXG4gICAgICAgICAgICByeTogY2lyY2xlSGVpZ2h0LFxuICAgICAgICAgICAgeEF4aXNSb3RhdGlvbjogMCxcbiAgICAgICAgICAgIGxhcmdlQXJjRmxhZzogMSxcbiAgICAgICAgICAgIHN3ZWVwRmxhZzogMSxcbiAgICAgICAgICAgIGVuZFg6IGZpcnN0TGluZUVuZFgsXG4gICAgICAgICAgICBlbmRZOiBjZW50ZXJZXG4gICAgICAgIH0sXG4gICAgICAgIHZlcnRpY2FsQXJjQ29tbWFuZDoge1xuICAgICAgICAgICAgcng6IHZlcnRpY2FsUmFkaXVzLFxuICAgICAgICAgICAgcnk6IHJlY3RhbmdsZS5oZWlnaHQgLyAyLFxuICAgICAgICAgICAgeEF4aXNSb3RhdGlvbjogMCxcbiAgICAgICAgICAgIGxhcmdlQXJjRmxhZzogMCxcbiAgICAgICAgICAgIHN3ZWVwRmxhZzogMSxcbiAgICAgICAgICAgIGVuZFg6IHZlcnRpY2FsWCxcbiAgICAgICAgICAgIGVuZFk6IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICB9LFxuICAgICAgICBsaW5lMjogW1xuICAgICAgICAgICAgW3ZlcnRpY2FsWCArIHZlcnRpY2FsUmFkaXVzLCBjZW50ZXJZXSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgY2VudGVyWV1cbiAgICAgICAgXVxuICAgIH07XG59XG5cbmV4cG9ydCBjb25zdCBBc3NlbWJseUVuZ2luZTogU2hhcGVFbmdpbmUgPSB7XG4gICAgZHJhdyhib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcnMgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICAgICAgY29uc3QgeyBzdGFydFBvaW50LCBsaW5lMSwgY2lyY2xlQXJjQ29tbWFuZCwgdmVydGljYWxBcmNDb21tYW5kLCBsaW5lMiB9ID0gZ2VuZXJhdGVBc3NlbWJseVBhdGgocmVjdGFuZ2xlKTtcblxuICAgICAgICBjb25zdCBwYXRoRGF0YSA9IFtcbiAgICAgICAgICAgIGBNJHtzdGFydFBvaW50WzBdfSAke3N0YXJ0UG9pbnRbMV19YCxcbiAgICAgICAgICAgIGBIJHtsaW5lMVsxXVswXX1gLFxuICAgICAgICAgICAgLy8g55S75a6M5pW055qE5ZyG5b2i77ya5YWI55S75LiA5Liq5Y2K5ZyG77yM5YaN55S75Y+m5LiA5Liq5Y2K5ZyGXG4gICAgICAgICAgICBgQSR7Y2lyY2xlQXJjQ29tbWFuZC5yeH0gJHtjaXJjbGVBcmNDb21tYW5kLnJ5fSAke2NpcmNsZUFyY0NvbW1hbmQueEF4aXNSb3RhdGlvbn0gJHtjaXJjbGVBcmNDb21tYW5kLmxhcmdlQXJjRmxhZ30gJHtjaXJjbGVBcmNDb21tYW5kLnN3ZWVwRmxhZ30gJHtsaW5lMVsxXVswXSArIGNpcmNsZUFyY0NvbW1hbmQucnggKiAyfSAke2NpcmNsZUFyY0NvbW1hbmQuZW5kWX1gLFxuICAgICAgICAgICAgYEEke2NpcmNsZUFyY0NvbW1hbmQucnh9ICR7Y2lyY2xlQXJjQ29tbWFuZC5yeX0gJHtjaXJjbGVBcmNDb21tYW5kLnhBeGlzUm90YXRpb259ICR7Y2lyY2xlQXJjQ29tbWFuZC5sYXJnZUFyY0ZsYWd9ICR7Y2lyY2xlQXJjQ29tbWFuZC5zd2VlcEZsYWd9ICR7Y2lyY2xlQXJjQ29tbWFuZC5lbmRYfSAke2NpcmNsZUFyY0NvbW1hbmQuZW5kWX1gLFxuICAgICAgICAgICAgLy8g5Z6C55u05qSt5ZyGXG4gICAgICAgICAgICBgTSR7dmVydGljYWxBcmNDb21tYW5kLmVuZFh9ICR7cmVjdGFuZ2xlLnl9YCxcbiAgICAgICAgICAgIGBBJHt2ZXJ0aWNhbEFyY0NvbW1hbmQucnh9ICR7dmVydGljYWxBcmNDb21tYW5kLnJ5fSAke3ZlcnRpY2FsQXJjQ29tbWFuZC54QXhpc1JvdGF0aW9ufSAke3ZlcnRpY2FsQXJjQ29tbWFuZC5sYXJnZUFyY0ZsYWd9ICR7dmVydGljYWxBcmNDb21tYW5kLnN3ZWVwRmxhZ30gJHt2ZXJ0aWNhbEFyY0NvbW1hbmQuZW5kWH0gJHt2ZXJ0aWNhbEFyY0NvbW1hbmQuZW5kWX1gLFxuICAgICAgICAgICAgLy8g5pyA5ZCO5LiA5p2h57q/XG4gICAgICAgICAgICBgTSR7bGluZTJbMF1bMF19ICR7bGluZTJbMF1bMV19IEgke2xpbmUyWzFdWzBdfWBcbiAgICAgICAgXS5qb2luKCcgJyk7XG5cbiAgICAgICAgY29uc3Qgc2hhcGUgPSBycy5wYXRoKHBhdGhEYXRhLCB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgZmlsbFN0eWxlOiAnc29saWQnXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRTdHJva2VMaW5lY2FwKHNoYXBlLCAncm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgIH0sXG4gICAgaXNJbnNpZGVQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyZWN0YW5nbGUsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldENvcm5lclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgeyBsaW5lMSwgbGluZTIsIGNpcmNsZUFyY0NvbW1hbmQsIHZlcnRpY2FsQXJjQ29tbWFuZCB9ID0gZ2VuZXJhdGVBc3NlbWJseVBhdGgocmVjdGFuZ2xlKTtcblxuICAgICAgICAvLyDmo4Dmn6Xnm7Tnur/mrrVcbiAgICAgICAgY29uc3QgbmVhcmVzdFBvaW50Rm9yTGluZXMgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludCwgWy4uLmxpbmUxLCAuLi5saW5lMl0pO1xuICAgICAgICBjb25zdCBkaXN0YW5jZUZvckxpbmVzID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5wb2ludCwgLi4ubmVhcmVzdFBvaW50Rm9yTGluZXMpO1xuXG4gICAgICAgIC8vIOajgOafpeS4remXtOWchuW9olxuICAgICAgICBjb25zdCBjaXJjbGVDZW50ZXIgPSBbbGluZTFbMV1bMF0gKyBjaXJjbGVBcmNDb21tYW5kLnJ4LCBsaW5lMVsxXVsxXV0gYXMgUG9pbnQ7XG4gICAgICAgIGNvbnN0IG5lYXJlc3RQb2ludEZvckNpcmNsZSA9IGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZEVsbGlwc2UoXG4gICAgICAgICAgICBwb2ludCxcbiAgICAgICAgICAgIGNpcmNsZUNlbnRlcixcbiAgICAgICAgICAgIGNpcmNsZUFyY0NvbW1hbmQucngsXG4gICAgICAgICAgICBjaXJjbGVBcmNDb21tYW5kLnJ5XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlRm9yQ2lyY2xlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5wb2ludCwgLi4ubmVhcmVzdFBvaW50Rm9yQ2lyY2xlKTtcblxuICAgICAgICAvLyDmo4Dmn6XlnoLnm7TmpK3lnIbvvIjkvb/nlKggZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kQXJjIOWkhOeQhuWNiuWchuW8p++8iVxuICAgICAgICBjb25zdCBhcmNTdGFydFBvaW50OiBQb2ludCA9IFt2ZXJ0aWNhbEFyY0NvbW1hbmQuZW5kWCwgcmVjdGFuZ2xlLnldO1xuICAgICAgICBjb25zdCBuZWFyZXN0UG9pbnRGb3JFbGxpcHNlID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kQXJjKFxuICAgICAgICAgICAgcG9pbnQsXG4gICAgICAgICAgICBhcmNTdGFydFBvaW50LFxuICAgICAgICAgICAgdmVydGljYWxBcmNDb21tYW5kXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlRm9yRWxsaXBzZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4ucG9pbnQsIC4uLm5lYXJlc3RQb2ludEZvckVsbGlwc2UpO1xuXG4gICAgICAgIC8vIOi/lOWbnuacgOi/keeahOeCuVxuICAgICAgICBjb25zdCBtaW5EaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlRm9yTGluZXMsIGRpc3RhbmNlRm9yQ2lyY2xlLCBkaXN0YW5jZUZvckVsbGlwc2UpO1xuICAgICAgICBpZiAobWluRGlzdGFuY2UgPT09IGRpc3RhbmNlRm9yTGluZXMpIHJldHVybiBuZWFyZXN0UG9pbnRGb3JMaW5lcztcbiAgICAgICAgaWYgKG1pbkRpc3RhbmNlID09PSBkaXN0YW5jZUZvckNpcmNsZSkgcmV0dXJuIG5lYXJlc3RQb2ludEZvckNpcmNsZTtcbiAgICAgICAgcmV0dXJuIG5lYXJlc3RQb2ludEZvckVsbGlwc2U7XG4gICAgfSxcbiAgICBnZXRUYW5nZW50VmVjdG9yQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50T2ZSZWN0YW5nbGU6IFBvaW50T2ZSZWN0YW5nbGUpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGUsIHBvaW50T2ZSZWN0YW5nbGUpO1xuICAgICAgICBpZiAoY29ubmVjdGlvblBvaW50WzBdID4gcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiAwLjQzICYmIGNvbm5lY3Rpb25Qb2ludFsxXSA8IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDIpIHtcbiAgICAgICAgICAgIHJldHVybiByb3RhdGVWZWN0b3IoZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChjb25uZWN0aW9uUG9pbnQsIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0pLCAtTWF0aC5QSSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbm5lY3Rpb25Qb2ludFswXSA+IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoICogMC40MyAmJiBjb25uZWN0aW9uUG9pbnRbMV0gPiByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChjb25uZWN0aW9uUG9pbnQsIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50KGNvbm5lY3Rpb25Qb2ludCwgW3JlY3RhbmdsZS54LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXSk7XG4gICAgfVxufTtcbiJdfQ==
@@ -1,32 +1,85 @@
1
- import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, setStrokeLinecap } from '@plait/core';
2
- import { RectangleEngine } from '../basic-shapes/rectangle';
1
+ import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndDiscreteSegments, setStrokeLinecap } from '@plait/core';
3
2
  import { getStrokeWidthByElement } from '../../utils';
4
3
  import { ShapeDefaultSpace } from '../../constants';
5
4
  import { getUnitVectorByPointAndPoint } from '@plait/common';
5
+ function generateComponentPath(rectangle) {
6
+ const mainLineX = rectangle.x + 12;
7
+ const boxWidth = rectangle.width > 70 ? 24 : rectangle.width * 0.2;
8
+ const boxHeight = rectangle.height - 28 - rectangle.height * 0.35 > 1 ? 14 : rectangle.height * 0.175;
9
+ const topBoxY = rectangle.y + rectangle.height * 0.175;
10
+ const bottomBoxY = rectangle.y + rectangle.height - rectangle.height * 0.175 - boxHeight;
11
+ return {
12
+ boxSize: {
13
+ width: boxWidth,
14
+ height: boxHeight
15
+ },
16
+ points: {
17
+ mainStart: [mainLineX, rectangle.y],
18
+ topBoxStart: [mainLineX, topBoxY],
19
+ topBoxEnd: [mainLineX, topBoxY + boxHeight],
20
+ bottomBoxStart: [mainLineX, bottomBoxY],
21
+ bottomBoxEnd: [mainLineX, bottomBoxY + boxHeight],
22
+ mainEnd: [mainLineX, rectangle.y + rectangle.height],
23
+ rightTop: [rectangle.x + rectangle.width, rectangle.y],
24
+ rightBottom: [rectangle.x + rectangle.width, rectangle.y + rectangle.height]
25
+ }
26
+ };
27
+ }
6
28
  export const ComponentEngine = {
7
29
  draw(board, rectangle, options) {
8
30
  const rs = PlaitBoard.getRoughSVG(board);
9
- const boxSize = {
10
- with: rectangle.width > 70 ? 24 : rectangle.width * 0.2,
11
- height: rectangle.height - 28 - rectangle.height * 0.35 > 1 ? 14 : rectangle.height * 0.175
12
- };
13
- const shape = rs.path(`M${rectangle.x + 12} ${rectangle.y}
14
- v${rectangle.height * 0.175}
15
- h${boxSize.with / 2} v${boxSize.height} h${-boxSize.with} v${-boxSize.height} h${boxSize.with / 2}
16
-
17
- M${rectangle.x + 12} ${rectangle.y + rectangle.height * 0.175 + boxSize.height}
18
-
19
- v${rectangle.height - rectangle.height * 0.35 - boxSize.height * 2}
20
- h${boxSize.with / 2} v${boxSize.height} h${-boxSize.with} v${-boxSize.height} h${boxSize.with / 2}
21
- M${rectangle.x + 12} ${rectangle.y + rectangle.height - rectangle.height * 0.175}
22
- V${rectangle.y + rectangle.height}
23
- H${rectangle.x + rectangle.width}
24
- v${-rectangle.height}
25
- h${-(rectangle.width - 12)}
26
- `, { ...options, fillStyle: 'solid' });
31
+ const { boxSize, points } = generateComponentPath(rectangle);
32
+ const pathData = [
33
+ // 主矩形轮廓
34
+ `M${points.mainStart[0]} ${points.mainStart[1]}`,
35
+ `H${points.rightTop[0]}`,
36
+ `V${points.rightBottom[1]}`,
37
+ `H${points.mainEnd[0]}`,
38
+ // 上方小矩形
39
+ `M${points.topBoxStart[0]} ${points.topBoxStart[1]}`,
40
+ `h${boxSize.width / 2} v${boxSize.height} h${-boxSize.width} v${-boxSize.height} h${boxSize.width / 2}`,
41
+ // 下方小矩形
42
+ `M${points.bottomBoxStart[0]} ${points.bottomBoxStart[1]}`,
43
+ `h${boxSize.width / 2} v${boxSize.height} h${-boxSize.width} v${-boxSize.height} h${boxSize.width / 2}`,
44
+ // 连接线
45
+ `M${points.mainStart[0]} ${points.mainStart[1]}`,
46
+ `V${points.topBoxStart[1]}`,
47
+ `M${points.topBoxEnd[0]} ${points.topBoxEnd[1]}`,
48
+ `V${points.bottomBoxStart[1]}`,
49
+ `M${points.bottomBoxEnd[0]} ${points.bottomBoxEnd[1]}`,
50
+ `V${points.mainEnd[1]}`
51
+ ].join(' ');
52
+ const shape = rs.path(pathData, { ...options, fillStyle: 'solid' });
27
53
  setStrokeLinecap(shape, 'round');
28
54
  return shape;
29
55
  },
56
+ getNearestPoint(rectangle, point) {
57
+ const { boxSize, points } = generateComponentPath(rectangle);
58
+ const segments = [
59
+ // 主矩形轮廓
60
+ [points.mainStart, [points.rightTop[0], points.mainStart[1]]],
61
+ [[points.rightTop[0], points.mainStart[1]], points.rightBottom],
62
+ [points.rightBottom, [points.mainEnd[0], points.rightBottom[1]]],
63
+ [[points.mainEnd[0], points.rightBottom[1]], points.mainStart],
64
+ // 上方小矩形
65
+ [points.topBoxStart, [points.topBoxStart[0] + boxSize.width / 2, points.topBoxStart[1]]],
66
+ [[points.topBoxStart[0] + boxSize.width / 2, points.topBoxStart[1]], [points.topBoxStart[0] + boxSize.width / 2, points.topBoxEnd[1]]],
67
+ [[points.topBoxStart[0] + boxSize.width / 2, points.topBoxEnd[1]], [points.topBoxStart[0] - boxSize.width / 2, points.topBoxEnd[1]]],
68
+ [[points.topBoxStart[0] - boxSize.width / 2, points.topBoxEnd[1]], [points.topBoxStart[0] - boxSize.width / 2, points.topBoxStart[1]]],
69
+ [[points.topBoxStart[0] - boxSize.width / 2, points.topBoxStart[1]], points.topBoxStart],
70
+ // 下方小矩形
71
+ [points.bottomBoxStart, [points.bottomBoxStart[0] + boxSize.width / 2, points.bottomBoxStart[1]]],
72
+ [[points.bottomBoxStart[0] + boxSize.width / 2, points.bottomBoxStart[1]], [points.bottomBoxStart[0] + boxSize.width / 2, points.bottomBoxEnd[1]]],
73
+ [[points.bottomBoxStart[0] + boxSize.width / 2, points.bottomBoxEnd[1]], [points.bottomBoxStart[0] - boxSize.width / 2, points.bottomBoxEnd[1]]],
74
+ [[points.bottomBoxStart[0] - boxSize.width / 2, points.bottomBoxEnd[1]], [points.bottomBoxStart[0] - boxSize.width / 2, points.bottomBoxStart[1]]],
75
+ [[points.bottomBoxStart[0] - boxSize.width / 2, points.bottomBoxStart[1]], points.bottomBoxStart],
76
+ // 连接线
77
+ [points.mainStart, points.topBoxStart],
78
+ [points.topBoxEnd, points.bottomBoxStart],
79
+ [points.bottomBoxEnd, points.mainEnd]
80
+ ];
81
+ return getNearestPointBetweenPointAndDiscreteSegments(point, segments);
82
+ },
30
83
  isInsidePoint(rectangle, point) {
31
84
  const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);
32
85
  return RectangleClient.isHit(rectangle, rangeRectangle);
@@ -34,26 +87,18 @@ export const ComponentEngine = {
34
87
  getCornerPoints(rectangle) {
35
88
  return RectangleClient.getCornerPoints(rectangle);
36
89
  },
37
- getNearestPoint(rectangle, point) {
38
- let nearestPoint = getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
39
- if (nearestPoint[1] === rectangle.y + rectangle.height / 2) {
40
- nearestPoint = getNearestPointBetweenPointAndSegments(point, [
41
- [rectangle.x + 12, rectangle.y + rectangle.height * 0.175 + 14],
42
- [rectangle.x + 12, rectangle.y + rectangle.height - rectangle.height * 0.175 - 14]
43
- ], false);
44
- }
45
- return nearestPoint;
46
- },
47
90
  getTangentVectorByConnectionPoint(rectangle, pointOfRectangle) {
91
+ const { points } = generateComponentPath(rectangle);
48
92
  const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
49
- return getUnitVectorByPointAndPoint([rectangle.x + 12, rectangle.y + rectangle.height - rectangle.height * 0.175 - 14], connectionPoint);
93
+ return getUnitVectorByPointAndPoint(points.mainStart, connectionPoint);
50
94
  },
51
95
  getConnectorPoints(rectangle) {
96
+ const { points } = generateComponentPath(rectangle);
52
97
  return [
53
98
  [rectangle.x + rectangle.width / 2, rectangle.y],
54
99
  [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],
55
100
  [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],
56
- [rectangle.x + 12, rectangle.y + rectangle.height / 2]
101
+ [points.mainStart[0], rectangle.y + rectangle.height / 2]
57
102
  ];
58
103
  },
59
104
  getTextRectangle(element) {
@@ -69,4 +114,4 @@ export const ComponentEngine = {
69
114
  };
70
115
  }
71
116
  };
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvZW5naW5lcy91bWwvY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsZUFBZSxFQUNmLHNDQUFzQyxFQUN0QyxnQkFBZ0IsRUFDbkIsTUFBTSxhQUFhLENBQUM7QUFHckIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFnQjtJQUN4QyxJQUFJLENBQUMsS0FBaUIsRUFBRSxTQUEwQixFQUFFLE9BQWdCO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUc7WUFDWixJQUFJLEVBQUUsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxHQUFHO1lBQ3ZELE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLO1NBQzlGLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUNqQixJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO2VBQ2hDLFNB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QUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVztZQUM3RSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDakUsQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBvaW50LFxuICAgIFBvaW50T2ZSZWN0YW5nbGUsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLFxuICAgIHNldFN0cm9rZUxpbmVjYXBcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRHZW9tZXRyeSwgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IFJlY3RhbmdsZUVuZ2luZSB9IGZyb20gJy4uL2Jhc2ljLXNoYXBlcy9yZWN0YW5nbGUnO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBTaGFwZURlZmF1bHRTcGFjZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5cbmV4cG9ydCBjb25zdCBDb21wb25lbnRFbmdpbmU6IFNoYXBlRW5naW5lID0ge1xuICAgIGRyYXcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJzID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgIGNvbnN0IGJveFNpemUgPSB7XG4gICAgICAgICAgICB3aXRoOiByZWN0YW5nbGUud2lkdGggPiA3MCA/IDI0IDogcmVjdGFuZ2xlLndpZHRoICogMC4yLFxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0YW5nbGUuaGVpZ2h0IC0gMjggLSByZWN0YW5nbGUuaGVpZ2h0ICogMC4zNSA+IDEgPyAxNCA6IHJlY3RhbmdsZS5oZWlnaHQgKiAwLjE3NVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzaGFwZSA9IHJzLnBhdGgoXG4gICAgICAgICAgICBgTSR7cmVjdGFuZ2xlLnggKyAxMn0gJHtyZWN0YW5nbGUueX0gXG4gICAgICAgICAgICB2JHtyZWN0YW5nbGUuaGVpZ2h0ICogMC4xNzV9IFxuICAgICAgICAgICAgaCR7Ym94U2l6ZS53aXRoIC8gMn0gdiR7Ym94U2l6ZS5oZWlnaHR9IGgkey1ib3hTaXplLndpdGh9IHYkey1ib3hTaXplLmhlaWdodH0gaCR7Ym94U2l6ZS53aXRoIC8gMn1cblxuICAgICAgICAgICAgTSR7cmVjdGFuZ2xlLnggKyAxMn0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgKiAwLjE3NSArIGJveFNpemUuaGVpZ2h0fSBcblxuICAgICAgICAgICAgdiR7cmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgKiAwLjM1IC0gYm94U2l6ZS5oZWlnaHQgKiAyfVxuICAgICAgICAgICAgaCR7Ym94U2l6ZS53aXRoIC8gMn0gdiR7Ym94U2l6ZS5oZWlnaHR9IGgkey1ib3hTaXplLndpdGh9IHYkey1ib3hTaXplLmhlaWdodH0gaCR7Ym94U2l6ZS53aXRoIC8gMn1cbiAgICAgICAgICAgIE0ke3JlY3RhbmdsZS54ICsgMTJ9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAqIDAuMTc1fSBcbiAgICAgICAgICAgIFYke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodH1cbiAgICAgICAgICAgIEgke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRofVxuICAgICAgICAgICAgdiR7LXJlY3RhbmdsZS5oZWlnaHR9XG4gICAgICAgICAgICBoJHstKHJlY3RhbmdsZS53aWR0aCAtIDEyKX1cbiAgICAgICAgICAgICBgLFxuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfVxuICAgICAgICApO1xuICAgICAgICBzZXRTdHJva2VMaW5lY2FwKHNoYXBlLCAncm91bmQnKTtcblxuICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSxcbiAgICBpc0luc2lkZVBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3BvaW50LCBwb2ludF0pO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBsZXQgbmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnQsIFJlY3RhbmdsZUVuZ2luZS5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKSk7XG4gICAgICAgIGlmIChuZWFyZXN0UG9pbnRbMV0gPT09IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDIpIHtcbiAgICAgICAgICAgIG5lYXJlc3RQb2ludCA9IGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKFxuICAgICAgICAgICAgICAgIHBvaW50LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgMTIsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAqIDAuMTc1ICsgMTRdLFxuICAgICAgICAgICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyAxMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC0gcmVjdGFuZ2xlLmhlaWdodCAqIDAuMTc1IC0gMTRdXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmVhcmVzdFBvaW50O1xuICAgIH0sXG5cbiAgICBnZXRUYW5nZW50VmVjdG9yQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50T2ZSZWN0YW5nbGU6IFBvaW50T2ZSZWN0YW5nbGUpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGUsIHBvaW50T2ZSZWN0YW5nbGUpO1xuICAgICAgICByZXR1cm4gZ2V0VW5pdFZlY3RvckJ5UG9pbnRBbmRQb2ludChcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIDEyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLSByZWN0YW5nbGUuaGVpZ2h0ICogMC4xNzUgLSAxNF0sXG4gICAgICAgICAgICBjb25uZWN0aW9uUG9pbnRcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnldLFxuICAgICAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyAxMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl1cbiAgICAgICAgXSBhcyBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdO1xuICAgIH0sXG4gICAgZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0ITtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoIC0gMjQgLSBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICogMiAtIHN0cm9rZVdpZHRoICogMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCA+IDAgPyB3aWR0aCA6IDAsXG4gICAgICAgICAgICB4OiBlbGVtZW50UmVjdGFuZ2xlLnggKyAyNCArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKyBzdHJva2VXaWR0aCxcbiAgICAgICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIChlbGVtZW50UmVjdGFuZ2xlLmhlaWdodCAtIGhlaWdodCkgLyAyXG4gICAgICAgIH07XG4gICAgfVxufTtcbiJdfQ==
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvZW5naW5lcy91bWwvY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsZUFBZSxFQUNmLDhDQUE4QyxFQUM5QyxnQkFBZ0IsRUFDbkIsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQW1CN0QsU0FBUyxxQkFBcUIsQ0FBQyxTQUEwQjtJQUNyRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNuQyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNuRSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEcsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN2RCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO0lBRXpGLE9BQU87UUFDSCxPQUFPLEVBQUU7WUFDTCxL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QUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEYsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFFdEYsUUFBUTtZQUNSLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9GLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlJLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVJLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlJLENBQUMsQ0FB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Q0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ2pFLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQb2ludCxcbiAgICBQb2ludE9mUmVjdGFuZ2xlLFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmREaXNjcmV0ZVNlZ21lbnRzLFxuICAgIHNldFN0cm9rZUxpbmVjYXBcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRHZW9tZXRyeSwgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IFJlY3RhbmdsZUVuZ2luZSB9IGZyb20gJy4uL2Jhc2ljLXNoYXBlcy9yZWN0YW5nbGUnO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBTaGFwZURlZmF1bHRTcGFjZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5cbmludGVyZmFjZSBDb21wb25lbnRQYXRoRGF0YSB7XG4gICAgYm94U2l6ZToge1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICB9O1xuICAgIHBvaW50czoge1xuICAgICAgICBtYWluU3RhcnQ6IFBvaW50O1xuICAgICAgICB0b3BCb3hTdGFydDogUG9pbnQ7XG4gICAgICAgIHRvcEJveEVuZDogUG9pbnQ7XG4gICAgICAgIGJvdHRvbUJveFN0YXJ0OiBQb2ludDtcbiAgICAgICAgYm90dG9tQm94RW5kOiBQb2ludDtcbiAgICAgICAgbWFpbkVuZDogUG9pbnQ7XG4gICAgICAgIHJpZ2h0VG9wOiBQb2ludDtcbiAgICAgICAgcmlnaHRCb3R0b206IFBvaW50O1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlQ29tcG9uZW50UGF0aChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCk6IENvbXBvbmVudFBhdGhEYXRhIHtcbiAgICBjb25zdCBtYWluTGluZVggPSByZWN0YW5nbGUueCArIDEyO1xuICAgIGNvbnN0IGJveFdpZHRoID0gcmVjdGFuZ2xlLndpZHRoID4gNzAgPyAyNCA6IHJlY3RhbmdsZS53aWR0aCAqIDAuMjtcbiAgICBjb25zdCBib3hIZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0IC0gMjggLSByZWN0YW5nbGUuaGVpZ2h0ICogMC4zNSA+IDEgPyAxNCA6IHJlY3RhbmdsZS5oZWlnaHQgKiAwLjE3NTtcbiAgICBjb25zdCB0b3BCb3hZID0gcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0ICogMC4xNzU7XG4gICAgY29uc3QgYm90dG9tQm94WSA9IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAtIHJlY3RhbmdsZS5oZWlnaHQgKiAwLjE3NSAtIGJveEhlaWdodDtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgICBib3hTaXplOiB7XG4gICAgICAgICAgICB3aWR0aDogYm94V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodFxuICAgICAgICB9LFxuICAgICAgICBwb2ludHM6IHtcbiAgICAgICAgICAgIG1haW5TdGFydDogW21haW5MaW5lWCwgcmVjdGFuZ2xlLnldLFxuICAgICAgICAgICAgdG9wQm94U3RhcnQ6IFttYWluTGluZVgsIHRvcEJveFldLFxuICAgICAgICAgICAgdG9wQm94RW5kOiBbbWFpbkxpbmVYLCB0b3BCb3hZICsgYm94SGVpZ2h0XSxcbiAgICAgICAgICAgIGJvdHRvbUJveFN0YXJ0OiBbbWFpbkxpbmVYLCBib3R0b21Cb3hZXSxcbiAgICAgICAgICAgIGJvdHRvbUJveEVuZDogW21haW5MaW5lWCwgYm90dG9tQm94WSArIGJveEhlaWdodF0sXG4gICAgICAgICAgICBtYWluRW5kOiBbbWFpbkxpbmVYLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICAgICAgcmlnaHRUb3A6IFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnldLFxuICAgICAgICAgICAgcmlnaHRCb3R0b206IFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XVxuICAgICAgICB9XG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbXBvbmVudEVuZ2luZTogU2hhcGVFbmdpbmUgPSB7XG4gICAgZHJhdyhib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcnMgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICAgICAgY29uc3QgeyBib3hTaXplLCBwb2ludHMgfSA9IGdlbmVyYXRlQ29tcG9uZW50UGF0aChyZWN0YW5nbGUpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgcGF0aERhdGEgPSBbXG4gICAgICAgICAgICAvLyDkuLvnn6nlvaLova7lu5NcbiAgICAgICAgICAgIGBNJHtwb2ludHMubWFpblN0YXJ0WzBdfSAke3BvaW50cy5tYWluU3RhcnRbMV19YCxcbiAgICAgICAgICAgIGBIJHtwb2ludHMucmlnaHRUb3BbMF19YCxcbiAgICAgICAgICAgIGBWJHtwb2ludHMucmlnaHRCb3R0b21bMV19YCxcbiAgICAgICAgICAgIGBIJHtwb2ludHMubWFpbkVuZFswXX1gLFxuXG4gICAgICAgICAgICAvLyDkuIrmlrnlsI/nn6nlvaJcbiAgICAgICAgICAgIGBNJHtwb2ludHMudG9wQm94U3RhcnRbMF19ICR7cG9pbnRzLnRvcEJveFN0YXJ0WzFdfWAsXG4gICAgICAgICAgICBgaCR7Ym94U2l6ZS53aWR0aCAvIDJ9IHYke2JveFNpemUuaGVpZ2h0fSBoJHstYm94U2l6ZS53aWR0aH0gdiR7LWJveFNpemUuaGVpZ2h0fSBoJHtib3hTaXplLndpZHRoIC8gMn1gLFxuXG4gICAgICAgICAgICAvLyDkuIvmlrnlsI/nn6nlvaJcbiAgICAgICAgICAgIGBNJHtwb2ludHMuYm90dG9tQm94U3RhcnRbMF19ICR7cG9pbnRzLmJvdHRvbUJveFN0YXJ0WzFdfWAsXG4gICAgICAgICAgICBgaCR7Ym94U2l6ZS53aWR0aCAvIDJ9IHYke2JveFNpemUuaGVpZ2h0fSBoJHstYm94U2l6ZS53aWR0aH0gdiR7LWJveFNpemUuaGVpZ2h0fSBoJHtib3hTaXplLndpZHRoIC8gMn1gLFxuXG4gICAgICAgICAgICAvLyDov57mjqXnur9cbiAgICAgICAgICAgIGBNJHtwb2ludHMubWFpblN0YXJ0WzBdfSAke3BvaW50cy5tYWluU3RhcnRbMV19YCxcbiAgICAgICAgICAgIGBWJHtwb2ludHMudG9wQm94U3RhcnRbMV19YCxcbiAgICAgICAgICAgIGBNJHtwb2ludHMudG9wQm94RW5kWzBdfSAke3BvaW50cy50b3BCb3hFbmRbMV19YCxcbiAgICAgICAgICAgIGBWJHtwb2ludHMuYm90dG9tQm94U3RhcnRbMV19YCxcbiAgICAgICAgICAgIGBNJHtwb2ludHMuYm90dG9tQm94RW5kWzBdfSAke3BvaW50cy5ib3R0b21Cb3hFbmRbMV19YCxcbiAgICAgICAgICAgIGBWJHtwb2ludHMubWFpbkVuZFsxXX1gXG4gICAgICAgIF0uam9pbignICcpO1xuXG4gICAgICAgIGNvbnN0IHNoYXBlID0gcnMucGF0aChwYXRoRGF0YSwgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSk7XG4gICAgICAgIHNldFN0cm9rZUxpbmVjYXAoc2hhcGUsICdyb3VuZCcpO1xuICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSxcblxuICAgIGdldE5lYXJlc3RQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHsgYm94U2l6ZSwgcG9pbnRzIH0gPSBnZW5lcmF0ZUNvbXBvbmVudFBhdGgocmVjdGFuZ2xlKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHNlZ21lbnRzOiBbUG9pbnQsIFBvaW50XVtdID0gW1xuICAgICAgICAgICAgLy8g5Li755+p5b2i6L2u5buTXG4gICAgICAgICAgICBbcG9pbnRzLm1haW5TdGFydCwgW3BvaW50cy5yaWdodFRvcFswXSwgcG9pbnRzLm1haW5TdGFydFsxXV1dLFxuICAgICAgICAgICAgW1twb2ludHMucmlnaHRUb3BbMF0sIHBvaW50cy5tYWluU3RhcnRbMV1dLCBwb2ludHMucmlnaHRCb3R0b21dLFxuICAgICAgICAgICAgW3BvaW50cy5yaWdodEJvdHRvbSwgW3BvaW50cy5tYWluRW5kWzBdLCBwb2ludHMucmlnaHRCb3R0b21bMV1dXSxcbiAgICAgICAgICAgIFtbcG9pbnRzLm1haW5FbmRbMF0sIHBvaW50cy5yaWdodEJvdHRvbVsxXV0sIHBvaW50cy5tYWluU3RhcnRdLFxuXG4gICAgICAgICAgICAvLyDkuIrmlrnlsI/nn6nlvaJcbiAgICAgICAgICAgIFtwb2ludHMudG9wQm94U3RhcnQsIFtwb2ludHMudG9wQm94U3RhcnRbMF0gKyBib3hTaXplLndpZHRoLzIsIHBvaW50cy50b3BCb3hTdGFydFsxXV1dLFxuICAgICAgICAgICAgW1twb2ludHMudG9wQm94U3RhcnRbMF0gKyBib3hTaXplLndpZHRoLzIsIHBvaW50cy50b3BCb3hTdGFydFsxXV0sIFtwb2ludHMudG9wQm94U3RhcnRbMF0gKyBib3hTaXplLndpZHRoLzIsIHBvaW50cy50b3BCb3hFbmRbMV1dXSxcbiAgICAgICAgICAgIFtbcG9pbnRzLnRvcEJveFN0YXJ0WzBdICsgYm94U2l6ZS53aWR0aC8yLCBwb2ludHMudG9wQm94RW5kWzFdXSwgW3BvaW50cy50b3BCb3hTdGFydFswXSAtIGJveFNpemUud2lkdGgvMiwgcG9pbnRzLnRvcEJveEVuZFsxXV1dLFxuICAgICAgICAgICAgW1twb2ludHMudG9wQm94U3RhcnRbMF0gLSBib3hTaXplLndpZHRoLzIsIHBvaW50cy50b3BCb3hFbmRbMV1dLCBbcG9pbnRzLnRvcEJveFN0YXJ0WzBdIC0gYm94U2l6ZS53aWR0aC8yLCBwb2ludHMudG9wQm94U3RhcnRbMV1dXSxcbiAgICAgICAgICAgIFtbcG9pbnRzLnRvcEJveFN0YXJ0WzBdIC0gYm94U2l6ZS53aWR0aC8yLCBwb2ludHMudG9wQm94U3RhcnRbMV1dLCBwb2ludHMudG9wQm94U3RhcnRdLFxuXG4gICAgICAgICAgICAvLyDkuIvmlrnlsI/nn6nlvaJcbiAgICAgICAgICAgIFtwb2ludHMuYm90dG9tQm94U3RhcnQsIFtwb2ludHMuYm90dG9tQm94U3RhcnRbMF0gKyBib3hTaXplLndpZHRoLzIsIHBvaW50cy5ib3R0b21Cb3hTdGFydFsxXV1dLFxuICAgICAgICAgICAgW1twb2ludHMuYm90dG9tQm94U3RhcnRbMF0gKyBib3hTaXplLndpZHRoLzIsIHBvaW50cy5ib3R0b21Cb3hTdGFydFsxXV0sIFtwb2ludHMuYm90dG9tQm94U3RhcnRbMF0gKyBib3hTaXplLndpZHRoLzIsIHBvaW50cy5ib3R0b21Cb3hFbmRbMV1dXSxcbiAgICAgICAgICAgIFtbcG9pbnRzLmJvdHRvbUJveFN0YXJ0WzBdICsgYm94U2l6ZS53aWR0aC8yLCBwb2ludHMuYm90dG9tQm94RW5kWzFdXSwgW3BvaW50cy5ib3R0b21Cb3hTdGFydFswXSAtIGJveFNpemUud2lkdGgvMiwgcG9pbnRzLmJvdHRvbUJveEVuZFsxXV1dLFxuICAgICAgICAgICAgW1twb2ludHMuYm90dG9tQm94U3RhcnRbMF0gLSBib3hTaXplLndpZHRoLzIsIHBvaW50cy5ib3R0b21Cb3hFbmRbMV1dLCBbcG9pbnRzLmJvdHRvbUJveFN0YXJ0WzBdIC0gYm94U2l6ZS53aWR0aC8yLCBwb2ludHMuYm90dG9tQm94U3RhcnRbMV1dXSxcbiAgICAgICAgICAgIFtbcG9pbnRzLmJvdHRvbUJveFN0YXJ0WzBdIC0gYm94U2l6ZS53aWR0aC8yLCBwb2ludHMuYm90dG9tQm94U3RhcnRbMV1dLCBwb2ludHMuYm90dG9tQm94U3RhcnRdLFxuXG4gICAgICAgICAgICAvLyDov57mjqXnur9cbiAgICAgICAgICAgIFtwb2ludHMubWFpblN0YXJ0LCBwb2ludHMudG9wQm94U3RhcnRdLFxuICAgICAgICAgICAgW3BvaW50cy50b3BCb3hFbmQsIHBvaW50cy5ib3R0b21Cb3hTdGFydF0sXG4gICAgICAgICAgICBbcG9pbnRzLmJvdHRvbUJveEVuZCwgcG9pbnRzLm1haW5FbmRdXG4gICAgICAgIF07XG5cbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZERpc2NyZXRlU2VnbWVudHMocG9pbnQsIHNlZ21lbnRzKTtcbiAgICB9LFxuXG4gICAgaXNJbnNpZGVQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyZWN0YW5nbGUsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9LFxuXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcblxuICAgIGdldFRhbmdlbnRWZWN0b3JCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnRPZlJlY3RhbmdsZTogUG9pbnRPZlJlY3RhbmdsZSkge1xuICAgICAgICBjb25zdCB7IHBvaW50cyB9ID0gZ2VuZXJhdGVDb21wb25lbnRQYXRoKHJlY3RhbmdsZSk7XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb25Qb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBwb2ludE9mUmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQocG9pbnRzLm1haW5TdGFydCwgY29ubmVjdGlvblBvaW50KTtcbiAgICB9LFxuXG4gICAgZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIGNvbnN0IHsgcG9pbnRzIH0gPSBnZW5lcmF0ZUNvbXBvbmVudFBhdGgocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS55XSxcbiAgICAgICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl0sXG4gICAgICAgICAgICBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICAgICAgW3BvaW50cy5tYWluU3RhcnRbMF0sIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdXG4gICAgICAgIF0gYXMgW1BvaW50LCBQb2ludCwgUG9pbnQsIFBvaW50XTtcbiAgICB9LFxuXG4gICAgZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0ITtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoIC0gMjQgLSBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICogMiAtIHN0cm9rZVdpZHRoICogMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCA+IDAgPyB3aWR0aCA6IDAsXG4gICAgICAgICAgICB4OiBlbGVtZW50UmVjdGFuZ2xlLnggKyAyNCArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKyBzdHJva2VXaWR0aCxcbiAgICAgICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIChlbGVtZW50UmVjdGFuZ2xlLmhlaWdodCAtIGhlaWdodCkgLyAyXG4gICAgICAgIH07XG4gICAgfVxufTtcbiJdfQ==