@plait/draw 0.31.0 → 0.32.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.
@@ -2,3 +2,4 @@ export declare const DefaultLineStyle: {
2
2
  strokeWidth: number;
3
3
  strokeColor: string;
4
4
  };
5
+ export declare const LINE_TEXT_SPACE = 4;
@@ -2,4 +2,5 @@ export const DefaultLineStyle = {
2
2
  strokeWidth: 2,
3
3
  strokeColor: '#000'
4
4
  };
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL2NvbnN0YW50cy9saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzVCLFdBQVcsRUFBRSxDQUFDO0lBQ2QsV0FBVyxFQUFFLE1BQU07Q0FDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBEZWZhdWx0TGluZVN0eWxlID0ge1xuICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgIHN0cm9rZUNvbG9yOiAnIzAwMCdcbn07XG5cbiJdfQ==
5
+ export const LINE_TEXT_SPACE = 4;
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL2NvbnN0YW50cy9saW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzVCLFdBQVcsRUFBRSxDQUFDO0lBQ2QsV0FBVyxFQUFFLE1BQU07Q0FDdEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgRGVmYXVsdExpbmVTdHlsZSA9IHtcbiAgICBzdHJva2VXaWR0aDogMixcbiAgICBzdHJva2VDb2xvcjogJyMwMDAnXG59O1xuXG5leHBvcnQgY29uc3QgTElORV9URVhUX1NQQUNFID0gNDtcbiJdfQ==
@@ -7,11 +7,18 @@ import { getFillByElement, getStrokeWidthByElement } from './style/stroke';
7
7
  import { DefaultGeometryStyle } from '../constants/geometry';
8
8
  import { getEngine } from '../engines';
9
9
  import { getShape } from './shape';
10
+ export const isTextExceedingBounds = (geometry) => {
11
+ const client = getRectangleByPoints(geometry.points);
12
+ if (geometry.textHeight > client.height) {
13
+ return true;
14
+ }
15
+ return false;
16
+ };
10
17
  export const isRectangleHitDrawElement = (board, element, selection) => {
18
+ const rangeRectangle = RectangleClient.toRectangleClient([selection.anchor, selection.focus]);
11
19
  if (PlaitDrawElement.isGeometry(element)) {
12
20
  const client = getRectangleByPoints(element.points);
13
- const rangeRectangle = RectangleClient.toRectangleClient([selection.anchor, selection.focus]);
14
- if (element.textHeight > client.height) {
21
+ if (isTextExceedingBounds(element)) {
15
22
  const textClient = getTextRectangle(element);
16
23
  return RectangleClient.isHit(rangeRectangle, client) || RectangleClient.isHit(rangeRectangle, textClient);
17
24
  }
@@ -19,7 +26,6 @@ export const isRectangleHitDrawElement = (board, element, selection) => {
19
26
  }
20
27
  if (PlaitDrawElement.isImage(element)) {
21
28
  const client = getRectangleByPoints(element.points);
22
- const rangeRectangle = RectangleClient.toRectangleClient([selection.anchor, selection.focus]);
23
29
  return RectangleClient.isHit(rangeRectangle, client);
24
30
  }
25
31
  if (PlaitDrawElement.isLine(element)) {
@@ -27,7 +33,6 @@ export const isRectangleHitDrawElement = (board, element, selection) => {
27
33
  const strokeWidth = getStrokeWidthByElement(element);
28
34
  const isHitText = isHitLineText(board, element, selection.focus);
29
35
  const isHit = isHitPolyLine(points, selection.focus, strokeWidth, 3) || isHitText;
30
- const rangeRectangle = RectangleClient.toRectangleClient([selection.anchor, selection.focus]);
31
36
  const isContainPolyLinePoint = points.some(point => {
32
37
  return RectangleClient.isHit(rangeRectangle, RectangleClient.toRectangleClient([point, point]));
33
38
  });
@@ -39,15 +44,24 @@ export const isRectangleHitDrawElement = (board, element, selection) => {
39
44
  export const isHitDrawElement = (board, element, point) => {
40
45
  if (PlaitDrawElement.isGeometry(element)) {
41
46
  const fill = getFillByElement(element);
42
- if (fill !== DefaultGeometryStyle.fill && fill !== TRANSPARENT) {
47
+ // when shape equals text, fill is not allowed
48
+ if (fill !== DefaultGeometryStyle.fill && fill !== TRANSPARENT && !PlaitDrawElement.isText(element)) {
43
49
  return isRectangleHitDrawElement(board, element, { anchor: point, focus: point });
44
50
  }
45
51
  else {
52
+ // if shape equals text, only check text rectangle
53
+ if (PlaitDrawElement.isText(element)) {
54
+ const textClient = getTextRectangle(element);
55
+ let isHitText = RectangleClient.isPointInRectangle(textClient, point);
56
+ return isHitText;
57
+ }
46
58
  const strokeWidth = getStrokeWidthByElement(element);
47
59
  const engine = getEngine(getShape(element));
48
60
  const corners = engine.getCornerPoints(getRectangleByPoints(element.points));
49
61
  const isHit = isHitPolyLine(corners, point, strokeWidth, 3);
50
- return isHit;
62
+ const textClient = getTextRectangle(element);
63
+ let isHitText = RectangleClient.isPointInRectangle(textClient, point);
64
+ return isHit || isHitText;
51
65
  }
52
66
  }
53
67
  if (PlaitDrawElement.isImage(element) || PlaitDrawElement.isLine(element)) {
@@ -55,4 +69,4 @@ export const isHitDrawElement = (board, element, point) => {
55
69
  }
56
70
  return null;
57
71
  };
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvaGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsZUFBZSxFQUF5QixzQkFBc0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQXFCLEVBQUUsU0FBb0IsRUFBRSxFQUFFO0lBQ3hHLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlGLElBQUksT0FBTyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxF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LENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDN0UsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzVELE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0tBQ0o7SUFDRCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdkUsT0FBTyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztLQUNyRjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RWxlbWVudCwgUmVjdGFuZ2xlQ2xpZW50LCBTZWxlY3Rpb24sIFBsYWl0Qm9hcmQsIGlzUG9seWxpbmVIaXRSZWN0YW5nbGUsIFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgVFJBTlNQQVJFTlQsIGdldFJlY3RhbmdsZUJ5UG9pbnRzIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBnZXRUZXh0UmVjdGFuZ2xlIH0gZnJvbSAnLi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRMaW5lUG9pbnRzLCBpc0hpdExpbmVUZXh0LCBpc0hpdFBvbHlMaW5lIH0gZnJvbSAnLi9saW5lJztcbmltcG9ydCB7IGdldEZpbGxCeUVsZW1lbnQsIGdldFN0cm9rZVdpZHRoQnlFbGVtZW50IH0gZnJvbSAnLi9zdHlsZS9zdHJva2UnO1xuaW1wb3J0IHsgRGVmYXVsdEdlb21ldHJ5U3R5bGUgfSBmcm9tICcuLi9jb25zdGFudHMvZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBnZXRTaGFwZSB9IGZyb20gJy4vc2hhcGUnO1xuXG5leHBvcnQgY29uc3QgaXNSZWN0YW5nbGVIaXREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4ge1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICBjb25zdCByYW5nZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC50b1JlY3RhbmdsZUNsaWVudChbc2VsZWN0aW9uLmFuY2hvciwgc2VsZWN0aW9uLmZvY3VzXSk7XG4gICAgICAgIGlmIChlbGVtZW50LnRleHRIZWlnaHQgPiBjbGllbnQuaGVpZ2h0KSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0Q2xpZW50ID0gZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNIaXQocmFuZ2VSZWN0YW5nbGUsIGNsaWVudCkgfHwgUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJhbmdlUmVjdGFuZ2xlLCB0ZXh0Q2xpZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJhbmdlUmVjdGFuZ2xlLCBjbGllbnQpO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQudG9SZWN0YW5nbGVDbGllbnQoW3NlbGVjdGlvbi5hbmNob3IsIHNlbGVjdGlvbi5mb2N1c10pO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJhbmdlUmVjdGFuZ2xlLCBjbGllbnQpO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZ2V0TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGlzSGl0VGV4dCA9IGlzSGl0TGluZVRleHQoYm9hcmQsIGVsZW1lbnQsIHNlbGVjdGlvbi5mb2N1cyk7XG4gICAgICAgIGNvbnN0IGlzSGl0ID0gaXNIaXRQb2x5TGluZShwb2ludHMsIHNlbGVjdGlvbi5mb2N1cywgc3Ryb2tlV2lkdGgsIDMpIHx8IGlzSGl0VGV4dDtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQudG9SZWN0YW5nbGVDbGllbnQoW3NlbGVjdGlvbi5hbmNob3IsIHNlbGVjdGlvbi5mb2N1c10pO1xuICAgICAgICBjb25zdCBpc0NvbnRhaW5Qb2x5TGluZVBvaW50ID0gcG9pbnRzLnNvbWUocG9pbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyYW5nZVJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtwb2ludCwgcG9pbnRdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpc0ludGVyc2VjdCA9IFBvaW50LmlzRXF1YWxzKHNlbGVjdGlvbi5hbmNob3IsIHNlbGVjdGlvbi5mb2N1cykgPyBpc0hpdCA6IGlzUG9seWxpbmVIaXRSZWN0YW5nbGUocG9pbnRzLCByYW5nZVJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBpc0NvbnRhaW5Qb2x5TGluZVBvaW50IHx8IGlzSW50ZXJzZWN0O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgZmlsbCA9IGdldEZpbGxCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmIChmaWxsICE9PSBEZWZhdWx0R2VvbWV0cnlTdHlsZS5maWxsICYmIGZpbGwgIT09IFRSQU5TUEFSRU5UKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNSZWN0YW5nbGVIaXREcmF3RWxlbWVudChib2FyZCwgZWxlbWVudCwgeyBhbmNob3I6IHBvaW50LCBmb2N1czogcG9pbnQgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lKGdldFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvcm5lcnMgPSBlbmdpbmUuZ2V0Q29ybmVyUG9pbnRzKGdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKSk7XG4gICAgICAgICAgICBjb25zdCBpc0hpdCA9IGlzSGl0UG9seUxpbmUoY29ybmVycywgcG9pbnQsIHN0cm9rZVdpZHRoLCAzKTtcbiAgICAgICAgICAgIHJldHVybiBpc0hpdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpIHx8IFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdERyYXdFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB7IGFuY2hvcjogcG9pbnQsIGZvY3VzOiBwb2ludCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvaGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsZUFBZSxFQUF5QixzQkFBc0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEgsT0FBTyxFQUFFLGdCQUFnQixFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRW5DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsUUFBdUIsRUFBRSxFQUFFO0lBQzdELE1BQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRTtRQUNyQyxPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQXFCLEVBQUUsU0FBb0IsRUFBRSxFQUFFO0lBQ3hHLE1BQU0sY0FBYyxHQUFHLGVBQWUs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VUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN0RSxPQUFPLFNBQVMsQ0FBQzthQUNwQjtZQUNELE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM1QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzdFLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sS0FBSyxJQUFJLFNBQVMsQ0FBQztTQUM3QjtLQUNKO0lBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZFLE9BQU8seUJBQXlCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDckY7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEVsZW1lbnQsIFJlY3RhbmdsZUNsaWVudCwgU2VsZWN0aW9uLCBQbGFpdEJvYXJkLCBpc1BvbHlsaW5lSGl0UmVjdGFuZ2xlLCBQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0R2VvbWV0cnkgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRSQU5TUEFSRU5ULCBnZXRSZWN0YW5nbGVCeVBvaW50cyB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgZ2V0VGV4dFJlY3RhbmdsZSB9IGZyb20gJy4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0TGluZVBvaW50cywgaXNIaXRMaW5lVGV4dCwgaXNIaXRQb2x5TGluZSB9IGZyb20gJy4vbGluZSc7XG5pbXBvcnQgeyBnZXRGaWxsQnlFbGVtZW50LCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4vc3R5bGUvc3Ryb2tlJztcbmltcG9ydCB7IERlZmF1bHRHZW9tZXRyeVN0eWxlIH0gZnJvbSAnLi4vY29uc3RhbnRzL2dlb21ldHJ5JztcbmltcG9ydCB7IGdldEVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZXMnO1xuaW1wb3J0IHsgZ2V0U2hhcGUgfSBmcm9tICcuL3NoYXBlJztcblxuZXhwb3J0IGNvbnN0IGlzVGV4dEV4Y2VlZGluZ0JvdW5kcyA9IChnZW9tZXRyeTogUGxhaXRHZW9tZXRyeSkgPT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IGdldFJlY3RhbmdsZUJ5UG9pbnRzKGdlb21ldHJ5LnBvaW50cyk7XG4gICAgaWYgKGdlb21ldHJ5LnRleHRIZWlnaHQgPiBjbGllbnQuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgaXNSZWN0YW5nbGVIaXREcmF3RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4ge1xuICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtzZWxlY3Rpb24uYW5jaG9yLCBzZWxlY3Rpb24uZm9jdXNdKTtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICAgICAgaWYgKGlzVGV4dEV4Y2VlZGluZ0JvdW5kcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGdldFRleHRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJhbmdlUmVjdGFuZ2xlLCBjbGllbnQpIHx8IFJlY3RhbmdsZUNsaWVudC5pc0hpdChyYW5nZVJlY3RhbmdsZSwgdGV4dENsaWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyYW5nZVJlY3RhbmdsZSwgY2xpZW50KTtcbiAgICB9XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBnZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNIaXQocmFuZ2VSZWN0YW5nbGUsIGNsaWVudCk7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzTGluZShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBwb2ludHMgPSBnZXRMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRMaW5lVGV4dChib2FyZCwgZWxlbWVudCwgc2VsZWN0aW9uLmZvY3VzKTtcbiAgICAgICAgY29uc3QgaXNIaXQgPSBpc0hpdFBvbHlMaW5lKHBvaW50cywgc2VsZWN0aW9uLmZvY3VzLCBzdHJva2VXaWR0aCwgMykgfHwgaXNIaXRUZXh0O1xuICAgICAgICBjb25zdCBpc0NvbnRhaW5Qb2x5TGluZVBvaW50ID0gcG9pbnRzLnNvbWUocG9pbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyYW5nZVJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtwb2ludCwgcG9pbnRdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBpc0ludGVyc2VjdCA9IFBvaW50LmlzRXF1YWxzKHNlbGVjdGlvbi5hbmNob3IsIHNlbGVjdGlvbi5mb2N1cykgPyBpc0hpdCA6IGlzUG9seWxpbmVIaXRSZWN0YW5nbGUocG9pbnRzLCByYW5nZVJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBpc0NvbnRhaW5Qb2x5TGluZVBvaW50IHx8IGlzSW50ZXJzZWN0O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdERyYXdFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgZmlsbCA9IGdldEZpbGxCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIC8vIHdoZW4gc2hhcGUgZXF1YWxzIHRleHQsIGZpbGwgaXMgbm90IGFsbG93ZWRcbiAgICAgICAgaWYgKGZpbGwgIT09IERlZmF1bHRHZW9tZXRyeVN0eWxlLmZpbGwgJiYgZmlsbCAhPT0gVFJBTlNQQVJFTlQgJiYgIVBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNSZWN0YW5nbGVIaXREcmF3RWxlbWVudChib2FyZCwgZWxlbWVudCwgeyBhbmNob3I6IHBvaW50LCBmb2N1czogcG9pbnQgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpZiBzaGFwZSBlcXVhbHMgdGV4dCwgb25seSBjaGVjayB0ZXh0IHJlY3RhbmdsZVxuICAgICAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dENsaWVudCA9IGdldFRleHRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgbGV0IGlzSGl0VGV4dCA9IFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGV4dENsaWVudCwgcG9pbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0hpdFRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lKGdldFNoYXBlKGVsZW1lbnQpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvcm5lcnMgPSBlbmdpbmUuZ2V0Q29ybmVyUG9pbnRzKGdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKSk7XG4gICAgICAgICAgICBjb25zdCBpc0hpdCA9IGlzSGl0UG9seUxpbmUoY29ybmVycywgcG9pbnQsIHN0cm9rZVdpZHRoLCAzKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRDbGllbnQgPSBnZXRUZXh0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICAgICAgbGV0IGlzSGl0VGV4dCA9IFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGV4dENsaWVudCwgcG9pbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGlzSGl0IHx8IGlzSGl0VGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpIHx8IFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc1JlY3RhbmdsZUhpdERyYXdFbGVtZW50KGJvYXJkLCBlbGVtZW50LCB7IGFuY2hvcjogcG9pbnQsIGZvY3VzOiBwb2ludCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuIl19
@@ -1,27 +1,29 @@
1
- import { arrowPoints, createG, createPath, drawLinearPath, rotate } from '@plait/core';
1
+ import { arrowPoints, createG, createPath, distanceBetweenPointAndPoint, drawLinearPath, rotate } from '@plait/core';
2
2
  import { LineMarkerType, PlaitLine } from '../interfaces';
3
- import { getFactorByPoints } from '@plait/common';
3
+ import { getFactorByPoints, getExtendPoint } from '@plait/common';
4
4
  import { getStrokeWidthByElement } from './style';
5
- import { getExtendPoint } from './line';
5
+ const MAX_LENGTH = 100;
6
6
  export const drawLineArrow = (element, points, options) => {
7
7
  const arrowG = createG();
8
8
  if (PlaitLine.isSourceMark(element, LineMarkerType.none) && PlaitLine.isTargetMark(element, LineMarkerType.none)) {
9
9
  return null;
10
10
  }
11
+ const strokeWidth = getStrokeWidthByElement(element);
12
+ const offset = (strokeWidth * strokeWidth) / 3;
11
13
  if (!PlaitLine.isSourceMark(element, LineMarkerType.none)) {
12
- const source = getExtendPoint(points[0], points[1], 24);
14
+ const source = getExtendPoint(points[0], points[1], 24 + offset);
13
15
  const sourceArrow = getArrow(element, { marker: element.source.marker, source, target: points[0], isSource: true }, options);
14
16
  sourceArrow && arrowG.appendChild(sourceArrow);
15
17
  }
16
18
  if (!PlaitLine.isTargetMark(element, LineMarkerType.none)) {
17
- const source = getExtendPoint(points[points.length - 1], points[points.length - 2], 24);
19
+ const source = getExtendPoint(points[points.length - 1], points[points.length - 2], 24 + offset);
18
20
  const arrow = getArrow(element, { marker: element.target.marker, source, target: points[points.length - 1], isSource: false }, options);
19
21
  arrow && arrowG.appendChild(arrow);
20
22
  }
21
23
  return arrowG;
22
24
  };
23
25
  const getArrow = (element, arrowOptions, options) => {
24
- const { marker, source, target, isSource } = arrowOptions;
26
+ const { marker, target, source, isSource } = arrowOptions;
25
27
  let targetArrow;
26
28
  switch (marker) {
27
29
  case LineMarkerType.openTriangle: {
@@ -61,10 +63,10 @@ const getArrow = (element, arrowOptions, options) => {
61
63
  };
62
64
  const drawSharpArrow = (source, target, options) => {
63
65
  const startPoint = target;
64
- const { pointLeft, pointRight } = arrowPoints(source, target, 12, 20);
66
+ const { pointLeft, pointRight } = arrowPoints(source, target, 20);
65
67
  const g = createG();
66
68
  const path = createPath();
67
- let polylinePath = `M${pointRight[0]},${pointRight[1]}A8,8,20,0,1,${pointLeft[0]},${pointLeft[1]}L${startPoint[0]},${startPoint[1]}Z`;
69
+ let polylinePath = `M${pointRight[0]},${pointRight[1]}A25,25,20,0,1,${pointLeft[0]},${pointLeft[1]}L${startPoint[0]},${startPoint[1]}Z`;
68
70
  path.setAttribute('d', polylinePath);
69
71
  path.setAttribute('stroke', `${options?.stroke}`);
70
72
  path.setAttribute('stroke-width', `${options?.strokeWidth}`);
@@ -76,8 +78,11 @@ const drawArrow = (element, source, target, options) => {
76
78
  const directionFactor = getFactorByPoints(source, target);
77
79
  const strokeWidth = getStrokeWidthByElement(element);
78
80
  const endPoint = [target[0] + (strokeWidth * directionFactor.x) / 2, target[1] + (strokeWidth * directionFactor.y) / 2];
79
- const middlePoint = [endPoint[0] - 8 * directionFactor.x, endPoint[1] - 8 * directionFactor.y];
80
- const { pointLeft, pointRight } = arrowPoints(source, endPoint, 12, 30);
81
+ const middlePoint = [
82
+ endPoint[0] - (8 + strokeWidth / 2) * directionFactor.x,
83
+ endPoint[1] - (8 + strokeWidth / 2) * directionFactor.y
84
+ ];
85
+ const { pointLeft, pointRight } = arrowPoints(source, endPoint, 30);
81
86
  const arrowG = drawLinearPath([pointLeft, endPoint, pointRight, middlePoint], { ...options, fill: options.stroke }, true);
82
87
  const path = arrowG.querySelector('path');
83
88
  path.setAttribute('stroke-linejoin', 'round');
@@ -85,30 +90,30 @@ const drawArrow = (element, source, target, options) => {
85
90
  };
86
91
  const drawSolidTriangle = (source, target, options) => {
87
92
  const endPoint = target;
88
- const { pointLeft, pointRight } = arrowPoints(source, endPoint, 12, 30);
93
+ const { pointLeft, pointRight } = arrowPoints(source, endPoint, 30);
89
94
  return drawLinearPath([pointLeft, endPoint, pointRight], { ...options, fill: options.stroke }, true);
90
95
  };
91
96
  const drawOpenTriangle = (element, source, target, options) => {
92
97
  const directionFactor = getFactorByPoints(source, target);
93
98
  const strokeWidth = getStrokeWidthByElement(element);
94
99
  const endPoint = [target[0] + (strokeWidth * directionFactor.x) / 2, target[1] + (strokeWidth * directionFactor.y) / 2];
95
- const { pointLeft, pointRight } = arrowPoints(source, endPoint, 12, 40);
100
+ const { pointLeft, pointRight } = arrowPoints(source, endPoint, 40);
96
101
  return drawLinearPath([pointLeft, endPoint, pointRight], options);
97
102
  };
98
103
  const drawOneSideArrow = (source, target, side, options) => {
99
- const { pointLeft, pointRight } = arrowPoints(source, target, 12, 40);
104
+ const { pointLeft, pointRight } = arrowPoints(source, target, 40);
100
105
  return drawLinearPath([side === 'up' ? pointRight : pointLeft, target], options);
101
106
  };
102
107
  const drawSingleSlash = (source, target, isSource, options) => {
103
- source = getExtendPoint(target, source, 12);
104
- const middlePoint = getExtendPoint(target, source, 6);
108
+ const length = distanceBetweenPointAndPoint(...source, ...target);
109
+ const middlePoint = getExtendPoint(target, source, length / 2);
105
110
  const angle = isSource ? 120 : 60;
106
111
  const start = rotate(...source, ...middlePoint, (angle * Math.PI) / 180);
107
112
  const end = rotate(...target, ...middlePoint, (angle * Math.PI) / 180);
108
113
  return drawLinearPath([start, end], options);
109
114
  };
110
115
  const drawHollowTriangleArrow = (source, target, options) => {
111
- const { pointLeft, pointRight } = arrowPoints(source, target, 12, 30);
116
+ const { pointLeft, pointRight } = arrowPoints(source, target, 30);
112
117
  return drawLinearPath([pointLeft, pointRight, target], { ...options, fill: 'white' }, true);
113
118
  };
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1hcnJvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2xpbmUtYXJyb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBU3hDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQWtCLEVBQUUsTUFBZSxFQUFFLE9BQWdCLEVBQUUsRUFBRTtJQUNuRixNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUN6QixJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDOUcsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdkQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0s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SUFDL0UsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEUsT0FBTyxjQUFjLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50LCBhcnJvd1BvaW50cywgY3JlYXRlRywgY3JlYXRlUGF0aCwgZHJhd0xpbmVhclBhdGgsIHJvdGF0ZSB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IExpbmVNYXJrZXJUeXBlLCBQbGFpdExpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IGdldEZhY3RvckJ5UG9pbnRzIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IHsgZ2V0RXh0ZW5kUG9pbnQgfSBmcm9tICcuL2xpbmUnO1xuXG5pbnRlcmZhY2UgQXJyb3dPcHRpb25zIHtcbiAgICBtYXJrZXI6IExpbmVNYXJrZXJUeXBlO1xuICAgIHNvdXJjZTogUG9pbnQ7XG4gICAgdGFyZ2V0OiBQb2ludDtcbiAgICBpc1NvdXJjZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGRyYXdMaW5lQXJyb3cgPSAoZWxlbWVudDogUGxhaXRMaW5lLCBwb2ludHM6IFBvaW50W10sIG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBhcnJvd0cgPSBjcmVhdGVHKCk7XG4gICAgaWYgKFBsYWl0TGluZS5pc1NvdXJjZU1hcmsoZWxlbWVudCwgTGluZU1hcmtlclR5cGUubm9uZSkgJiYgUGxhaXRMaW5lLmlzVGFyZ2V0TWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCFQbGFpdExpbmUuaXNTb3VyY2VNYXJrKGVsZW1lbnQsIExpbmVNYXJrZXJUeXBlLm5vbmUpKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGdldEV4dGVuZFBvaW50KHBvaW50c1swXSwgcG9pbnRzWzFdLCAyNCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZUFycm93ID0gZ2V0QXJyb3coZWxlbWVudCwgeyBtYXJrZXI6IGVsZW1lbnQuc291cmNlLm1hcmtlciwgc291cmNlLCB0YXJnZXQ6IHBvaW50c1swXSwgaXNTb3VyY2U6IHRydWUgfSwgb3B0aW9ucyk7XG4gICAgICAgIHNvdXJjZUFycm93ICYmIGFycm93Ry5hcHBlbmRDaGlsZChzb3VyY2VBcnJvdyk7XG4gICAgfVxuICAgIGlmICghUGxhaXRMaW5lLmlzVGFyZ2V0TWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lKSkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBnZXRFeHRlbmRQb2ludChwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdLCBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDJdLCAyNCk7XG4gICAgICAgIGNvbnN0IGFycm93ID0gZ2V0QXJyb3coXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgeyBtYXJrZXI6IGVsZW1lbnQudGFyZ2V0Lm1hcmtlciwgc291cmNlLCB0YXJnZXQ6IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0sIGlzU291cmNlOiBmYWxzZSB9LFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIGFycm93ICYmIGFycm93Ry5hcHBlbmRDaGlsZChhcnJvdyk7XG4gICAgfVxuICAgIHJldHVybiBhcnJvd0c7XG59O1xuXG5jb25zdCBnZXRBcnJvdyA9IChlbGVtZW50OiBQbGFpdExpbmUsIGFycm93T3B0aW9uczogQXJyb3dPcHRpb25zLCBvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBtYXJrZXIsIHNvdXJjZSwgdGFyZ2V0LCBpc1NvdXJjZSB9ID0gYXJyb3dPcHRpb25zO1xuICAgIGxldCB0YXJnZXRBcnJvdztcbiAgICBzd2l0Y2ggKG1hcmtlcikge1xuICAgICAgICBjYXNlIExpbmVNYXJrZXJUeXBlLm9wZW5UcmlhbmdsZToge1xuICAgICAgICAgICAgdGFyZ2V0QXJyb3cgPSBkcmF3T3BlblRyaWFuZ2xlKGVsZW1lbnQsIHNvdXJjZSwgdGFyZ2V0LCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTGluZU1hcmtlclR5cGUuc29saWRUcmlhbmdsZToge1xuICAgICAgICAgICAgdGFyZ2V0QXJyb3cgPSBkcmF3U29saWRUcmlhbmdsZShzb3VyY2UsIHRhcmdldCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExpbmVNYXJrZXJUeXBlLmFycm93OiB7XG4gICAgICAgICAgICB0YXJnZXRBcnJvdyA9IGRyYXdBcnJvdyhlbGVtZW50LCBzb3VyY2UsIHRhcmdldCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExpbmVNYXJrZXJUeXBlLnNoYXJwQXJyb3c6IHtcbiAgICAgICAgICAgIHRhcmdldEFycm93ID0gZHJhd1NoYXJwQXJyb3coc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMaW5lTWFya2VyVHlwZS5vbmVTaWRlVXA6IHtcbiAgICAgICAgICAgIHRhcmdldEFycm93ID0gZHJhd09uZVNpZGVBcnJvdyhzb3VyY2UsIHRhcmdldCwgaXNTb3VyY2UgPyAnZG93bicgOiAndXAnLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTGluZU1hcmtlclR5cGUub25lU2lkZURvd246IHtcbiAgICAgICAgICAgIHRhcmdldEFycm93ID0gZHJhd09uZVNpZGVBcnJvdyhzb3VyY2UsIHRhcmdldCwgaXNTb3VyY2UgPyAndXAnIDogJ2Rvd24nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTGluZU1hcmtlclR5cGUuaG9sbG93VHJpYW5nbGU6IHtcbiAgICAgICAgICAgIHRhcmdldEFycm93ID0gZHJhd0hvbGxvd1RyaWFuZ2xlQXJyb3coc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMaW5lTWFya2VyVHlwZS5zaW5nbGVTbGFzaDoge1xuICAgICAgICAgICAgdGFyZ2V0QXJyb3cgPSBkcmF3U2luZ2xlU2xhc2goc291cmNlLCB0YXJnZXQsIGlzU291cmNlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRBcnJvdztcbn07XG5cbmNvbnN0IGRyYXdTaGFycEFycm93ID0gKHNvdXJjZTogUG9pbnQsIHRhcmdldDogUG9pbnQsIG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBzdGFydFBvaW50OiBQb2ludCA9IHRhcmdldDtcbiAgICBjb25zdCB7IHBvaW50TGVmdCwgcG9pbnRSaWdodCB9ID0gYXJyb3dQb2ludHMoc291cmNlLCB0YXJnZXQsIDEyLCAyMCk7XG4gICAgY29uc3QgZyA9IGNyZWF0ZUcoKTtcbiAgICBjb25zdCBwYXRoID0gY3JlYXRlUGF0aCgpO1xuICAgIGxldCBwb2x5bGluZVBhdGggPSBgTSR7cG9pbnRSaWdodFswXX0sJHtwb2ludFJpZ2h0WzFdfUE4LDgsMjAsMCwxLCR7cG9pbnRMZWZ0WzBdfSwke3BvaW50TGVmdFsxXX1MJHtzdGFydFBvaW50WzBdfSwke3N0YXJ0UG9pbnRbMV19WmA7XG4gICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ2QnLCBwb2x5bGluZVBhdGgpO1xuICAgIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UnLCBgJHtvcHRpb25zPy5zdHJva2V9YCk7XG4gICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsIGAke29wdGlvbnM/LnN0cm9rZVdpZHRofWApO1xuICAgIHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgYCR7b3B0aW9ucz8uc3Ryb2tlfWApO1xuICAgIGcuYXBwZW5kQ2hpbGQocGF0aCk7XG4gICAgcmV0dXJuIGc7XG59O1xuXG5jb25zdCBkcmF3QXJyb3cgPSAoZWxlbWVudDogUGxhaXRMaW5lLCBzb3VyY2U6IFBvaW50LCB0YXJnZXQ6IFBvaW50LCBvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgZGlyZWN0aW9uRmFjdG9yID0gZ2V0RmFjdG9yQnlQb2ludHMoc291cmNlLCB0YXJnZXQpO1xuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3QgZW5kUG9pbnQ6IFBvaW50ID0gW3RhcmdldFswXSArIChzdHJva2VXaWR0aCAqIGRpcmVjdGlvbkZhY3Rvci54KSAvIDIsIHRhcmdldFsxXSArIChzdHJva2VXaWR0aCAqIGRpcmVjdGlvbkZhY3Rvci55KSAvIDJdO1xuICAgIGNvbnN0IG1pZGRsZVBvaW50OiBQb2ludCA9IFtlbmRQb2ludFswXSAtIDggKiBkaXJlY3Rpb25GYWN0b3IueCwgZW5kUG9pbnRbMV0gLSA4ICogZGlyZWN0aW9uRmFjdG9yLnldO1xuICAgIGNvbnN0IHsgcG9pbnRMZWZ0LCBwb2ludFJpZ2h0IH0gPSBhcnJvd1BvaW50cyhzb3VyY2UsIGVuZFBvaW50LCAxMiwgMzApO1xuICAgIGNvbnN0IGFycm93RyA9IGRyYXdMaW5lYXJQYXRoKFtwb2ludExlZnQsIGVuZFBvaW50LCBwb2ludFJpZ2h0LCBtaWRkbGVQb2ludF0sIHsgLi4ub3B0aW9ucywgZmlsbDogb3B0aW9ucy5zdHJva2UgfSwgdHJ1ZSk7XG4gICAgY29uc3QgcGF0aCA9IGFycm93Ry5xdWVyeVNlbGVjdG9yKCdwYXRoJyk7XG4gICAgcGF0aCEuc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWpvaW4nLCAncm91bmQnKTtcbiAgICByZXR1cm4gYXJyb3dHO1xufTtcblxuY29uc3QgZHJhd1NvbGlkVHJpYW5nbGUgPSAoc291cmNlOiBQb2ludCwgdGFyZ2V0OiBQb2ludCwgb3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGVuZFBvaW50OiBQb2ludCA9IHRhcmdldDtcbiAgICBjb25zdCB7IHBvaW50TGVmdCwgcG9pbnRSaWdodCB9ID0gYXJyb3dQb2ludHMoc291cmNlLCBlbmRQb2ludCwgMTIsIDMwKTtcbiAgICByZXR1cm4gZHJhd0xpbmVhclBhdGgoW3BvaW50TGVmdCwgZW5kUG9pbnQsIHBvaW50UmlnaHRdLCB7IC4uLm9wdGlvbnMsIGZpbGw6IG9wdGlvbnMuc3Ryb2tlIH0sIHRydWUpO1xufTtcblxuY29uc3QgZHJhd09wZW5UcmlhbmdsZSA9IChlbGVtZW50OiBQbGFpdExpbmUsIHNvdXJjZTogUG9pbnQsIHRhcmdldDogUG9pbnQsIG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBkaXJlY3Rpb25GYWN0b3IgPSBnZXRGYWN0b3JCeVBvaW50cyhzb3VyY2UsIHRhcmdldCk7XG4gICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICBjb25zdCBlbmRQb2ludDogUG9pbnQgPSBbdGFyZ2V0WzBdICsgKHN0cm9rZVdpZHRoICogZGlyZWN0aW9uRmFjdG9yLngpIC8gMiwgdGFyZ2V0WzFdICsgKHN0cm9rZVdpZHRoICogZGlyZWN0aW9uRmFjdG9yLnkpIC8gMl07XG4gICAgY29uc3QgeyBwb2ludExlZnQsIHBvaW50UmlnaHQgfSA9IGFycm93UG9pbnRzKHNvdXJjZSwgZW5kUG9pbnQsIDEyLCA0MCk7XG4gICAgcmV0dXJuIGRyYXdMaW5lYXJQYXRoKFtwb2ludExlZnQsIGVuZFBvaW50LCBwb2ludFJpZ2h0XSwgb3B0aW9ucyk7XG59O1xuXG5jb25zdCBkcmF3T25lU2lkZUFycm93ID0gKHNvdXJjZTogUG9pbnQsIHRhcmdldDogUG9pbnQsIHNpZGU6IHN0cmluZywgb3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgcG9pbnRMZWZ0LCBwb2ludFJpZ2h0IH0gPSBhcnJvd1BvaW50cyhzb3VyY2UsIHRhcmdldCwgMTIsIDQwKTtcbiAgICByZXR1cm4gZHJhd0xpbmVhclBhdGgoW3NpZGUgPT09ICd1cCcgPyBwb2ludFJpZ2h0IDogcG9pbnRMZWZ0LCB0YXJnZXRdLCBvcHRpb25zKTtcbn07XG5cbmNvbnN0IGRyYXdTaW5nbGVTbGFzaCA9IChzb3VyY2U6IFBvaW50LCB0YXJnZXQ6IFBvaW50LCBpc1NvdXJjZTogYm9vbGVhbiwgb3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAgIHNvdXJjZSA9IGdldEV4dGVuZFBvaW50KHRhcmdldCwgc291cmNlLCAxMik7XG4gICAgY29uc3QgbWlkZGxlUG9pbnQgPSBnZXRFeHRlbmRQb2ludCh0YXJnZXQsIHNvdXJjZSwgNik7XG4gICAgY29uc3QgYW5nbGUgPSBpc1NvdXJjZSA/IDEyMCA6IDYwO1xuICAgIGNvbnN0IHN0YXJ0ID0gcm90YXRlKC4uLnNvdXJjZSwgLi4ubWlkZGxlUG9pbnQsIChhbmdsZSAqIE1hdGguUEkpIC8gMTgwKSBhcyBQb2ludDtcbiAgICBjb25zdCBlbmQgPSByb3RhdGUoLi4udGFyZ2V0LCAuLi5taWRkbGVQb2ludCwgKGFuZ2xlICogTWF0aC5QSSkgLyAxODApIGFzIFBvaW50O1xuICAgIHJldHVybiBkcmF3TGluZWFyUGF0aChbc3RhcnQsIGVuZF0sIG9wdGlvbnMpO1xufTtcblxuY29uc3QgZHJhd0hvbGxvd1RyaWFuZ2xlQXJyb3cgPSAoc291cmNlOiBQb2ludCwgdGFyZ2V0OiBQb2ludCwgb3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgcG9pbnRMZWZ0LCBwb2ludFJpZ2h0IH0gPSBhcnJvd1BvaW50cyhzb3VyY2UsIHRhcmdldCwgMTIsIDMwKTtcbiAgICByZXR1cm4gZHJhd0xpbmVhclBhdGgoW3BvaW50TGVmdCwgcG9pbnRSaWdodCwgdGFyZ2V0XSwgeyAuLi5vcHRpb25zLCBmaWxsOiAnd2hpdGUnIH0sIHRydWUpO1xufTtcbiJdfQ==
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1hcnJvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2xpbmUtYXJyb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFTLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLDRCQUE0QixFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFTbEQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBRXZCLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQWtCLEVBQUUsTUFBZSxFQUFFLE9BQWdCLEVBQUUsRUFBRTtJQUNuRixNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUN6QixJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDOUcsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sTUFBTSxHQUFHLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUvQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUs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RSxDQUFDLEdBQUcsR0FBRyxDQUFVLENBQUM7SUFDaEYsT0FBTyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakQsQ0FBQyxDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLE1BQWEsRUFBRSxNQUFhLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO0lBQy9FLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEUsT0FBTyxjQUFjLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvaW50LCBhcnJvd1BvaW50cywgY3JlYXRlRywgY3JlYXRlUGF0aCwgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCwgZHJhd0xpbmVhclBhdGgsIHJvdGF0ZSB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IExpbmVNYXJrZXJUeXBlLCBQbGFpdExpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IGdldEZhY3RvckJ5UG9pbnRzLCBnZXRFeHRlbmRQb2ludCB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQgfSBmcm9tICcuL3N0eWxlJztcblxuaW50ZXJmYWNlIEFycm93T3B0aW9ucyB7XG4gICAgbWFya2VyOiBMaW5lTWFya2VyVHlwZTtcbiAgICBzb3VyY2U6IFBvaW50O1xuICAgIHRhcmdldDogUG9pbnQ7XG4gICAgaXNTb3VyY2U6IGJvb2xlYW47XG59XG5cbmNvbnN0IE1BWF9MRU5HVEggPSAxMDA7XG5cbmV4cG9ydCBjb25zdCBkcmF3TGluZUFycm93ID0gKGVsZW1lbnQ6IFBsYWl0TGluZSwgcG9pbnRzOiBQb2ludFtdLCBvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgYXJyb3dHID0gY3JlYXRlRygpO1xuICAgIGlmIChQbGFpdExpbmUuaXNTb3VyY2VNYXJrKGVsZW1lbnQsIExpbmVNYXJrZXJUeXBlLm5vbmUpICYmIFBsYWl0TGluZS5pc1RhcmdldE1hcmsoZWxlbWVudCwgTGluZU1hcmtlclR5cGUubm9uZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gKHN0cm9rZVdpZHRoICogc3Ryb2tlV2lkdGgpIC8gMztcblxuICAgIGlmICghUGxhaXRMaW5lLmlzU291cmNlTWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lKSkge1xuICAgICAgICBjb25zdCBzb3VyY2UgPSBnZXRFeHRlbmRQb2ludChwb2ludHNbMF0sIHBvaW50c1sxXSwgMjQgKyBvZmZzZXQpO1xuICAgICAgICBjb25zdCBzb3VyY2VBcnJvdyA9IGdldEFycm93KGVsZW1lbnQsIHsgbWFya2VyOiBlbGVtZW50LnNvdXJjZS5tYXJrZXIsIHNvdXJjZSwgdGFyZ2V0OiBwb2ludHNbMF0sIGlzU291cmNlOiB0cnVlIH0sIG9wdGlvbnMpO1xuICAgICAgICBzb3VyY2VBcnJvdyAmJiBhcnJvd0cuYXBwZW5kQ2hpbGQoc291cmNlQXJyb3cpO1xuICAgIH1cbiAgICBpZiAoIVBsYWl0TGluZS5pc1RhcmdldE1hcmsoZWxlbWVudCwgTGluZU1hcmtlclR5cGUubm9uZSkpIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gZ2V0RXh0ZW5kUG9pbnQocG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSwgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAyXSwgMjQgKyBvZmZzZXQpO1xuICAgICAgICBjb25zdCBhcnJvdyA9IGdldEFycm93KFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIHsgbWFya2VyOiBlbGVtZW50LnRhcmdldC5tYXJrZXIsIHNvdXJjZSwgdGFyZ2V0OiBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdLCBpc1NvdXJjZTogZmFsc2UgfSxcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgKTtcblxuICAgICAgICBhcnJvdyAmJiBhcnJvd0cuYXBwZW5kQ2hpbGQoYXJyb3cpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyb3dHO1xufTtcblxuY29uc3QgZ2V0QXJyb3cgPSAoZWxlbWVudDogUGxhaXRMaW5lLCBhcnJvd09wdGlvbnM6IEFycm93T3B0aW9ucywgb3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgbWFya2VyLCB0YXJnZXQsIHNvdXJjZSwgaXNTb3VyY2UgfSA9IGFycm93T3B0aW9ucztcbiAgICBsZXQgdGFyZ2V0QXJyb3c7XG4gICAgc3dpdGNoIChtYXJrZXIpIHtcbiAgICAgICAgY2FzZSBMaW5lTWFya2VyVHlwZS5vcGVuVHJpYW5nbGU6IHtcbiAgICAgICAgICAgIHRhcmdldEFycm93ID0gZHJhd09wZW5UcmlhbmdsZShlbGVtZW50LCBzb3VyY2UsIHRhcmdldCwgb3B0aW9ucyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExpbmVNYXJrZXJUeXBlLnNvbGlkVHJpYW5nbGU6IHtcbiAgICAgICAgICAgIHRhcmdldEFycm93ID0gZHJhd1NvbGlkVHJpYW5nbGUoc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMaW5lTWFya2VyVHlwZS5hcnJvdzoge1xuICAgICAgICAgICAgdGFyZ2V0QXJyb3cgPSBkcmF3QXJyb3coZWxlbWVudCwgc291cmNlLCB0YXJnZXQsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBMaW5lTWFya2VyVHlwZS5zaGFycEFycm93OiB7XG4gICAgICAgICAgICB0YXJnZXRBcnJvdyA9IGRyYXdTaGFycEFycm93KHNvdXJjZSwgdGFyZ2V0LCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTGluZU1hcmtlclR5cGUub25lU2lkZVVwOiB7XG4gICAgICAgICAgICB0YXJnZXRBcnJvdyA9IGRyYXdPbmVTaWRlQXJyb3coc291cmNlLCB0YXJnZXQsIGlzU291cmNlID8gJ2Rvd24nIDogJ3VwJywgb3B0aW9ucyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExpbmVNYXJrZXJUeXBlLm9uZVNpZGVEb3duOiB7XG4gICAgICAgICAgICB0YXJnZXRBcnJvdyA9IGRyYXdPbmVTaWRlQXJyb3coc291cmNlLCB0YXJnZXQsIGlzU291cmNlID8gJ3VwJyA6ICdkb3duJywgb3B0aW9ucyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExpbmVNYXJrZXJUeXBlLmhvbGxvd1RyaWFuZ2xlOiB7XG4gICAgICAgICAgICB0YXJnZXRBcnJvdyA9IGRyYXdIb2xsb3dUcmlhbmdsZUFycm93KHNvdXJjZSwgdGFyZ2V0LCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTGluZU1hcmtlclR5cGUuc2luZ2xlU2xhc2g6IHtcbiAgICAgICAgICAgIHRhcmdldEFycm93ID0gZHJhd1NpbmdsZVNsYXNoKHNvdXJjZSwgdGFyZ2V0LCBpc1NvdXJjZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0QXJyb3c7XG59O1xuXG5jb25zdCBkcmF3U2hhcnBBcnJvdyA9IChzb3VyY2U6IFBvaW50LCB0YXJnZXQ6IFBvaW50LCBvcHRpb25zOiBPcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRQb2ludDogUG9pbnQgPSB0YXJnZXQ7XG4gICAgY29uc3QgeyBwb2ludExlZnQsIHBvaW50UmlnaHQgfSA9IGFycm93UG9pbnRzKHNvdXJjZSwgdGFyZ2V0LCAyMCk7XG4gICAgY29uc3QgZyA9IGNyZWF0ZUcoKTtcbiAgICBjb25zdCBwYXRoID0gY3JlYXRlUGF0aCgpO1xuICAgIGxldCBwb2x5bGluZVBhdGggPSBgTSR7cG9pbnRSaWdodFswXX0sJHtwb2ludFJpZ2h0WzFdfUEyNSwyNSwyMCwwLDEsJHtwb2ludExlZnRbMF19LCR7cG9pbnRMZWZ0WzFdfUwke3N0YXJ0UG9pbnRbMF19LCR7c3RhcnRQb2ludFsxXX1aYDtcbiAgICBwYXRoLnNldEF0dHJpYnV0ZSgnZCcsIHBvbHlsaW5lUGF0aCk7XG4gICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsIGAke29wdGlvbnM/LnN0cm9rZX1gKTtcbiAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgYCR7b3B0aW9ucz8uc3Ryb2tlV2lkdGh9YCk7XG4gICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCBgJHtvcHRpb25zPy5zdHJva2V9YCk7XG4gICAgZy5hcHBlbmRDaGlsZChwYXRoKTtcbiAgICByZXR1cm4gZztcbn07XG5cbmNvbnN0IGRyYXdBcnJvdyA9IChlbGVtZW50OiBQbGFpdExpbmUsIHNvdXJjZTogUG9pbnQsIHRhcmdldDogUG9pbnQsIG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBkaXJlY3Rpb25GYWN0b3IgPSBnZXRGYWN0b3JCeVBvaW50cyhzb3VyY2UsIHRhcmdldCk7XG4gICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICBjb25zdCBlbmRQb2ludDogUG9pbnQgPSBbdGFyZ2V0WzBdICsgKHN0cm9rZVdpZHRoICogZGlyZWN0aW9uRmFjdG9yLngpIC8gMiwgdGFyZ2V0WzFdICsgKHN0cm9rZVdpZHRoICogZGlyZWN0aW9uRmFjdG9yLnkpIC8gMl07XG4gICAgY29uc3QgbWlkZGxlUG9pbnQ6IFBvaW50ID0gW1xuICAgICAgICBlbmRQb2ludFswXSAtICg4ICsgc3Ryb2tlV2lkdGggLyAyKSAqIGRpcmVjdGlvbkZhY3Rvci54LFxuICAgICAgICBlbmRQb2ludFsxXSAtICg4ICsgc3Ryb2tlV2lkdGggLyAyKSAqIGRpcmVjdGlvbkZhY3Rvci55XG4gICAgXTtcbiAgICBjb25zdCB7IHBvaW50TGVmdCwgcG9pbnRSaWdodCB9ID0gYXJyb3dQb2ludHMoc291cmNlLCBlbmRQb2ludCwgMzApO1xuICAgIGNvbnN0IGFycm93RyA9IGRyYXdMaW5lYXJQYXRoKFtwb2ludExlZnQsIGVuZFBvaW50LCBwb2ludFJpZ2h0LCBtaWRkbGVQb2ludF0sIHsgLi4ub3B0aW9ucywgZmlsbDogb3B0aW9ucy5zdHJva2UgfSwgdHJ1ZSk7XG4gICAgY29uc3QgcGF0aCA9IGFycm93Ry5xdWVyeVNlbGVjdG9yKCdwYXRoJyk7XG4gICAgcGF0aCEuc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWpvaW4nLCAncm91bmQnKTtcbiAgICByZXR1cm4gYXJyb3dHO1xufTtcblxuY29uc3QgZHJhd1NvbGlkVHJpYW5nbGUgPSAoc291cmNlOiBQb2ludCwgdGFyZ2V0OiBQb2ludCwgb3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGVuZFBvaW50OiBQb2ludCA9IHRhcmdldDtcbiAgICBjb25zdCB7IHBvaW50TGVmdCwgcG9pbnRSaWdodCB9ID0gYXJyb3dQb2ludHMoc291cmNlLCBlbmRQb2ludCwgMzApO1xuICAgIHJldHVybiBkcmF3TGluZWFyUGF0aChbcG9pbnRMZWZ0LCBlbmRQb2ludCwgcG9pbnRSaWdodF0sIHsgLi4ub3B0aW9ucywgZmlsbDogb3B0aW9ucy5zdHJva2UgfSwgdHJ1ZSk7XG59O1xuXG5jb25zdCBkcmF3T3BlblRyaWFuZ2xlID0gKGVsZW1lbnQ6IFBsYWl0TGluZSwgc291cmNlOiBQb2ludCwgdGFyZ2V0OiBQb2ludCwgb3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGRpcmVjdGlvbkZhY3RvciA9IGdldEZhY3RvckJ5UG9pbnRzKHNvdXJjZSwgdGFyZ2V0KTtcbiAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IGVuZFBvaW50OiBQb2ludCA9IFt0YXJnZXRbMF0gKyAoc3Ryb2tlV2lkdGggKiBkaXJlY3Rpb25GYWN0b3IueCkgLyAyLCB0YXJnZXRbMV0gKyAoc3Ryb2tlV2lkdGggKiBkaXJlY3Rpb25GYWN0b3IueSkgLyAyXTtcbiAgICBjb25zdCB7IHBvaW50TGVmdCwgcG9pbnRSaWdodCB9ID0gYXJyb3dQb2ludHMoc291cmNlLCBlbmRQb2ludCwgNDApO1xuICAgIHJldHVybiBkcmF3TGluZWFyUGF0aChbcG9pbnRMZWZ0LCBlbmRQb2ludCwgcG9pbnRSaWdodF0sIG9wdGlvbnMpO1xufTtcblxuY29uc3QgZHJhd09uZVNpZGVBcnJvdyA9IChzb3VyY2U6IFBvaW50LCB0YXJnZXQ6IFBvaW50LCBzaWRlOiBzdHJpbmcsIG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IHBvaW50TGVmdCwgcG9pbnRSaWdodCB9ID0gYXJyb3dQb2ludHMoc291cmNlLCB0YXJnZXQsIDQwKTtcbiAgICByZXR1cm4gZHJhd0xpbmVhclBhdGgoW3NpZGUgPT09ICd1cCcgPyBwb2ludFJpZ2h0IDogcG9pbnRMZWZ0LCB0YXJnZXRdLCBvcHRpb25zKTtcbn07XG5cbmNvbnN0IGRyYXdTaW5nbGVTbGFzaCA9IChzb3VyY2U6IFBvaW50LCB0YXJnZXQ6IFBvaW50LCBpc1NvdXJjZTogYm9vbGVhbiwgb3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IGxlbmd0aCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4uc291cmNlLCAuLi50YXJnZXQpO1xuICAgIGNvbnN0IG1pZGRsZVBvaW50ID0gZ2V0RXh0ZW5kUG9pbnQodGFyZ2V0LCBzb3VyY2UsIGxlbmd0aCAvIDIpO1xuICAgIGNvbnN0IGFuZ2xlID0gaXNTb3VyY2UgPyAxMjAgOiA2MDtcbiAgICBjb25zdCBzdGFydCA9IHJvdGF0ZSguLi5zb3VyY2UsIC4uLm1pZGRsZVBvaW50LCAoYW5nbGUgKiBNYXRoLlBJKSAvIDE4MCkgYXMgUG9pbnQ7XG4gICAgY29uc3QgZW5kID0gcm90YXRlKC4uLnRhcmdldCwgLi4ubWlkZGxlUG9pbnQsIChhbmdsZSAqIE1hdGguUEkpIC8gMTgwKSBhcyBQb2ludDtcbiAgICByZXR1cm4gZHJhd0xpbmVhclBhdGgoW3N0YXJ0LCBlbmRdLCBvcHRpb25zKTtcbn07XG5cbmNvbnN0IGRyYXdIb2xsb3dUcmlhbmdsZUFycm93ID0gKHNvdXJjZTogUG9pbnQsIHRhcmdldDogUG9pbnQsIG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IHBvaW50TGVmdCwgcG9pbnRSaWdodCB9ID0gYXJyb3dQb2ludHMoc291cmNlLCB0YXJnZXQsIDMwKTtcbiAgICByZXR1cm4gZHJhd0xpbmVhclBhdGgoW3BvaW50TGVmdCwgcG9pbnRSaWdodCwgdGFyZ2V0XSwgeyAuLi5vcHRpb25zLCBmaWxsOiAnd2hpdGUnIH0sIHRydWUpO1xufTtcbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { idCreator, distanceBetweenPointAndSegments, PlaitBoard, createG, getElementById, RectangleClient, findElements, drawLinearPath, createMask, createRect, ACTIVE_STROKE_WIDTH, distanceBetweenPointAndPoint } from '@plait/core';
2
- import { getPoints, getRectangleByPoints, getPointOnPolyline, getDirectionFactor, rotateVectorAnti90, getDirectionByVector, getOppositeDirection, getDirectionByPointOfRectangle, getPointByVector, removeDuplicatePoints, reduceRouteMargin, generateElbowLineRoute, getNextPoint, DEFAULT_ROUTE_MARGIN } from '@plait/common';
2
+ import { getPoints, getRectangleByPoints, getPointOnPolyline, getDirectionFactor, rotateVectorAnti90, getDirectionByVector, getOppositeDirection, getDirectionByPointOfRectangle, getPointByVector, removeDuplicatePoints, reduceRouteMargin, generateElbowLineRoute, getNextPoint, DEFAULT_ROUTE_MARGIN, getExtendPoint } from '@plait/common';
3
3
  import { LineHandleKey, LineMarkerType, LineShape, PlaitDrawElement, PlaitLine } from '../interfaces';
4
4
  import { getPointsByCenterPoint, getNearestPoint } from './geometry';
5
5
  import { getLineDashByElement, getStrokeColorByElement, getStrokeWidthByElement } from './style/stroke';
@@ -7,6 +7,7 @@ import { getEngine } from '../engines';
7
7
  import { drawLineArrow } from './line-arrow';
8
8
  import { pointsOnBezierCurves } from 'points-on-curve';
9
9
  import { getShape } from './shape';
10
+ import { LINE_TEXT_SPACE } from '../constants/line';
10
11
  export const createLineElement = (shape, points, source, target, texts, options) => {
11
12
  return {
12
13
  id: idCreator(),
@@ -235,7 +236,8 @@ function drawMask(board, element, id) {
235
236
  mask.appendChild(maskFillRect);
236
237
  const texts = element.texts;
237
238
  texts.forEach((text, index) => {
238
- const textRectangle = getLineTextRectangle(board, element, index);
239
+ let textRectangle = getLineTextRectangle(board, element, index);
240
+ textRectangle = RectangleClient.inflate(textRectangle, LINE_TEXT_SPACE * 2);
239
241
  const rect = createRect(textRectangle, {
240
242
  fill: 'black'
241
243
  });
@@ -244,6 +246,7 @@ function drawMask(board, element, id) {
244
246
  //撑开 line
245
247
  const maskTargetFillRect = createRect(rectangle);
246
248
  maskTargetFillRect.setAttribute('opacity', '0');
249
+ maskTargetFillRect.setAttribute('fill', 'none');
247
250
  return { mask, maskTargetFillRect };
248
251
  }
249
252
  export const getConnectionPoint = (geometry, connection, direction, delta) => {
@@ -291,12 +294,6 @@ export const getBoardLines = (board) => {
291
294
  recursion: (element) => PlaitDrawElement.isDrawElement(element)
292
295
  });
293
296
  };
294
- export const getExtendPoint = (source, target, extendDistance) => {
295
- const distance = distanceBetweenPointAndPoint(...source, ...target);
296
- const sin = (target[1] - source[1]) / distance;
297
- const cos = (target[0] - source[0]) / distance;
298
- return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];
299
- };
300
297
  // quadratic Bezier to cubic Bezier
301
298
  export const Q2C = (points) => {
302
299
  const result = [];
@@ -338,4 +335,4 @@ export const getVectorByConnection = (boundElement, connection) => {
338
335
  }
339
336
  return vector;
340
337
  };
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2xpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCwrQkFBK0IsRUFDL0IsVUFBVSxFQUNWLE9BQU8sRUFDUCxjQUFjLEVBQ2QsZUFBZSxFQUNmLFlBQVksRUFFWixjQUFjLEVBQ2QsVUFBVSxFQUNWLFVBQVUsRUFDVixtQkFBbUIsRUFJbkIsNEJBQTRCLEVBQy9CLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDSCxTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsOEJBQThCLEVBQzlCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osb0JBQW9CLEVBQ3ZCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFSCxhQUFhLEVBRWIsY0FBYyxFQUNkLFNBQVMsRUFFVCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcs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Q0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVcsQ0FBQztZQUNoRixPQUFPLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3pDO0tBQ0o7SUFDRCxJQUFJLE1BQU0sQ0FBQyxpQ0FBaUMsRUFBRTtRQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsaUNBQWlDLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25GLElBQUksVUFBVSxFQUFFO1lBQ1osT0FBTyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN6QztLQUNKO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQb2ludCxcbiAgICBpZENyZWF0b3IsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICBQbGFpdEJvYXJkLFxuICAgIGNyZWF0ZUcsXG4gICAgZ2V0RWxlbWVudEJ5SWQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGZpbmRFbGVtZW50cyxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgZHJhd0xpbmVhclBhdGgsXG4gICAgY3JlYXRlTWFzayxcbiAgICBjcmVhdGVSZWN0LFxuICAgIEFDVElWRV9TVFJPS0VfV0lEVEgsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBEaXJlY3Rpb24sXG4gICAgVmVjdG9yLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBnZXRQb2ludHMsXG4gICAgZ2V0UmVjdGFuZ2xlQnlQb2ludHMsXG4gICAgZ2V0UG9pbnRPblBvbHlsaW5lLFxuICAgIGdldERpcmVjdGlvbkZhY3RvcixcbiAgICByb3RhdGVWZWN0b3JBbnRpOTAsXG4gICAgZ2V0RGlyZWN0aW9uQnlWZWN0b3IsXG4gICAgZ2V0T3Bwb3NpdGVEaXJlY3Rpb24sXG4gICAgZ2V0RGlyZWN0aW9uQnlQb2ludE9mUmVjdGFuZ2xlLFxuICAgIGdldFBvaW50QnlWZWN0b3IsXG4gICAgcmVtb3ZlRHVwbGljYXRlUG9pbnRzLFxuICAgIHJlZHVjZVJvdXRlTWFyZ2luLFxuICAgIGdlbmVyYXRlRWxib3dMaW5lUm91dGUsXG4gICAgZ2V0TmV4dFBvaW50LFxuICAgIERFRkFVTFRfUk9VVEVfTUFSR0lOXG59IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBMaW5lSGFuZGxlLFxuICAgIExpbmVIYW5kbGVLZXksXG4gICAgTGluZUhhbmRsZVJlZixcbiAgICBMaW5lTWFya2VyVHlwZSxcbiAgICBMaW5lU2hhcGUsXG4gICAgTGluZVRleHQsXG4gICAgUGxhaXREcmF3RWxlbWVudCxcbiAgICBQbGFpdEdlb21ldHJ5LFxuICAgIFBsYWl0TGluZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldFBvaW50c0J5Q2VudGVyUG9pbnQsIGdldE5lYXJlc3RQb2ludCB9IGZyb20gJy4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0TGluZURhc2hCeUVsZW1lbnQsIGdldFN0cm9rZUNvbG9yQnlFbGVtZW50LCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4vc3R5bGUvc3Ryb2tlJztcbmltcG9ydCB7IGdldEVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZXMnO1xuaW1wb3J0IHsgZHJhd0xpbmVBcnJvdyB9IGZyb20gJy4vbGluZS1hcnJvdyc7XG5pbXBvcnQgeyBwb2ludHNPbkJlemllckN1cnZlcyB9IGZyb20gJ3BvaW50cy1vbi1jdXJ2ZSc7XG5pbXBvcnQgeyBPcCB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgZ2V0U2hhcGUgfSBmcm9tICcuL3NoYXBlJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUxpbmVFbGVtZW50ID0gKFxuICAgIHNoYXBlOiBMaW5lU2hhcGUsXG4gICAgcG9pbnRzOiBbUG9pbnQsIFBvaW50XSxcbiAgICBzb3VyY2U6IExpbmVIYW5kbGUsXG4gICAgdGFyZ2V0OiBMaW5lSGFuZGxlLFxuICAgIHRleHRzPzogTGluZVRleHRbXSxcbiAgICBvcHRpb25zPzogUGljazxQbGFpdExpbmUsICdzdHJva2VDb2xvcicgfCAnc3Ryb2tlV2lkdGgnPlxuKTogUGxhaXRMaW5lID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgIHR5cGU6ICdsaW5lJyxcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgdGV4dHM6IHRleHRzID8gdGV4dHMgOiBbXSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICBwb2ludHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExpbmVQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIHN3aXRjaCAoZWxlbWVudC5zaGFwZSkge1xuICAgICAgICBjYXNlIExpbmVTaGFwZS5lbGJvdzoge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVsYm93UG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExpbmVTaGFwZS5jdXJ2ZToge1xuICAgICAgICAgICAgcmV0dXJuIGdldEN1cnZlUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gUGxhaXRMaW5lLmdldFBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGluZUhhbmRsZVJlZlBhaXIgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgc291cmNlQm91bmRFbGVtZW50ID0gZWxlbWVudC5zb3VyY2UuYm91bmRJZCA/IGdldEVsZW1lbnRCeUlkPFBsYWl0R2VvbWV0cnk+KGJvYXJkLCBlbGVtZW50LnNvdXJjZS5ib3VuZElkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YXJnZXRCb3VuZEVsZW1lbnQgPSBlbGVtZW50LnRhcmdldC5ib3VuZElkID8gZ2V0RWxlbWVudEJ5SWQ8UGxhaXRHZW9tZXRyeT4oYm9hcmQsIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIDogdW5kZWZpbmVkO1xuICAgIGxldCBzb3VyY2VQb2ludCA9IHNvdXJjZUJvdW5kRWxlbWVudCA/IGdldENvbm5lY3Rpb25Qb2ludChzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hKSA6IGVsZW1lbnQucG9pbnRzWzBdO1xuICAgIGxldCB0YXJnZXRQb2ludCA9IHRhcmdldEJvdW5kRWxlbWVudFxuICAgICAgICA/IGdldENvbm5lY3Rpb25Qb2ludCh0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hKVxuICAgICAgICA6IGVsZW1lbnQucG9pbnRzW2VsZW1lbnQucG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgIGxldCBzb3VyY2VEaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVZlY3RvcihbdGFyZ2V0UG9pbnRbMF0gLSBzb3VyY2VQb2ludFswXSwgdGFyZ2V0UG9pbnRbMV0gLSBzb3VyY2VQb2ludFsxXV0pITtcbiAgICBsZXQgdGFyZ2V0RGlyZWN0aW9uID0gZ2V0T3Bwb3NpdGVEaXJlY3Rpb24oc291cmNlRGlyZWN0aW9uKTtcbiAgICBjb25zdCBzb3VyY2VGYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3Ioc291cmNlRGlyZWN0aW9uKTtcbiAgICBjb25zdCB0YXJnZXRGYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IodGFyZ2V0RGlyZWN0aW9uKTtcbiAgICBjb25zdCBzb3VyY2VIYW5kbGVSZWY6IExpbmVIYW5kbGVSZWYgPSB7XG4gICAgICAgIGtleTogTGluZUhhbmRsZUtleS5zb3VyY2UsXG4gICAgICAgIHBvaW50OiBzb3VyY2VQb2ludCxcbiAgICAgICAgZGlyZWN0aW9uOiBzb3VyY2VEaXJlY3Rpb24sXG4gICAgICAgIHZlY3RvcjogW3NvdXJjZUZhY3Rvci54LCBzb3VyY2VGYWN0b3IueV1cbiAgICB9O1xuICAgIGNvbnN0IHRhcmdldEhhbmRsZVJlZjogTGluZUhhbmRsZVJlZiA9IHtcbiAgICAgICAga2V5OiBMaW5lSGFuZGxlS2V5LnRhcmdldCxcbiAgICAgICAgcG9pbnQ6IHRhcmdldFBvaW50LFxuICAgICAgICBkaXJlY3Rpb246IHRhcmdldERpcmVjdGlvbixcbiAgICAgICAgdmVjdG9yOiBbdGFyZ2V0RmFjdG9yLngsIHRhcmdldEZhY3Rvci55XVxuICAgIH07XG4gICAgaWYgKHNvdXJjZUJvdW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uT2Zmc2V0ID0gUGxhaXRMaW5lLmlzU291cmNlTWFya09yVGFyZ2V0TWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lLCBMaW5lSGFuZGxlS2V5LnNvdXJjZSkgPyAwIDogc3Ryb2tlV2lkdGg7XG4gICAgICAgIGNvbnN0IHNvdXJjZVZlY3RvciA9IGdldFZlY3RvckJ5Q29ubmVjdGlvbihzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hKTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uQnlWZWN0b3Ioc291cmNlVmVjdG9yKTtcbiAgICAgICAgc291cmNlRGlyZWN0aW9uID0gZGlyZWN0aW9uID8gZGlyZWN0aW9uIDogc291cmNlRGlyZWN0aW9uO1xuICAgICAgICBzb3VyY2VQb2ludCA9IGdldENvbm5lY3Rpb25Qb2ludChzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hLCBzb3VyY2VEaXJlY3Rpb24sIGNvbm5lY3Rpb25PZmZzZXQpO1xuICAgICAgICBzb3VyY2VIYW5kbGVSZWYuYm91bmRFbGVtZW50ID0gc291cmNlQm91bmRFbGVtZW50O1xuICAgICAgICBzb3VyY2VIYW5kbGVSZWYuZGlyZWN0aW9uID0gc291cmNlRGlyZWN0aW9uO1xuICAgICAgICBzb3VyY2VIYW5kbGVSZWYucG9pbnQgPSBzb3VyY2VQb2ludDtcbiAgICAgICAgc291cmNlSGFuZGxlUmVmLnZlY3RvciA9IHNvdXJjZVZlY3RvcjtcbiAgICB9XG4gICAgaWYgKHRhcmdldEJvdW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uT2Zmc2V0ID0gUGxhaXRMaW5lLmlzU291cmNlTWFya09yVGFyZ2V0TWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lLCBMaW5lSGFuZGxlS2V5LnRhcmdldCkgPyAwIDogc3Ryb2tlV2lkdGg7XG4gICAgICAgIGNvbnN0IHRhcmdldFZlY3RvciA9IGdldFZlY3RvckJ5Q29ubmVjdGlvbih0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hKTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uQnlWZWN0b3IodGFyZ2V0VmVjdG9yKTtcbiAgICAgICAgdGFyZ2V0RGlyZWN0aW9uID0gZGlyZWN0aW9uID8gZGlyZWN0aW9uIDogdGFyZ2V0RGlyZWN0aW9uO1xuICAgICAgICB0YXJnZXRQb2ludCA9IGdldENvbm5lY3Rpb25Qb2ludCh0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hLCB0YXJnZXREaXJlY3Rpb24sIGNvbm5lY3Rpb25PZmZzZXQpO1xuICAgICAgICB0YXJnZXRIYW5kbGVSZWYuYm91bmRFbGVtZW50ID0gdGFyZ2V0Qm91bmRFbGVtZW50O1xuICAgICAgICB0YXJnZXRIYW5kbGVSZWYuZGlyZWN0aW9uID0gdGFyZ2V0RGlyZWN0aW9uO1xuICAgICAgICB0YXJnZXRIYW5kbGVSZWYucG9pbnQgPSB0YXJnZXRQb2ludDtcbiAgICAgICAgdGFyZ2V0SGFuZGxlUmVmLnZlY3RvciA9IHRhcmdldFZlY3RvcjtcbiAgICB9XG4gICAgcmV0dXJuIHsgc291cmNlOiBzb3VyY2VIYW5kbGVSZWYsIHRhcmdldDogdGFyZ2V0SGFuZGxlUmVmIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxib3dQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIGlmIChlbGVtZW50LnBvaW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlUmVmUGFpciA9IGdldExpbmVIYW5kbGVSZWZQYWlyKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZWxlbWVudC5zb3VyY2UuYm91bmRJZCB8fCBlbGVtZW50LnRhcmdldC5ib3VuZElkID8gREVGQVVMVF9ST1VURV9NQVJHSU4gOiAwO1xuICAgICAgICBjb25zdCBzb3VyY2VFbGVtZW50ID0gZWxlbWVudC5zb3VyY2UuYm91bmRJZCAmJiBnZXRFbGVtZW50QnlJZDxQbGFpdEdlb21ldHJ5Pihib2FyZCwgZWxlbWVudC5zb3VyY2UuYm91bmRJZCk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbGVtZW50LnRhcmdldC5ib3VuZElkICYmIGdldEVsZW1lbnRCeUlkPFBsYWl0R2VvbWV0cnk+KGJvYXJkLCBlbGVtZW50LnRhcmdldC5ib3VuZElkKTtcbiAgICAgICAgY29uc3QgaXNCb3VuZCA9IHNvdXJjZUVsZW1lbnQgJiYgdGFyZ2V0RWxlbWVudDtcblxuICAgICAgICBsZXQgcG9pbnRzOiBQb2ludFtdID0gW107XG4gICAgICAgIGlmIChpc0JvdW5kKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShcbiAgICAgICAgICAgICAgICBnZXRSZWN0YW5nbGVCeVBvaW50cyh0YXJnZXRFbGVtZW50LnBvaW50cyksXG4gICAgICAgICAgICAgICAgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQodGFyZ2V0RWxlbWVudCkgKiAyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUoXG4gICAgICAgICAgICAgICAgZ2V0UmVjdGFuZ2xlQnlQb2ludHMoc291cmNlRWxlbWVudC5wb2ludHMpLFxuICAgICAgICAgICAgICAgIGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KHNvdXJjZUVsZW1lbnQpICogMlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gaGFuZGxlUmVmUGFpci5zb3VyY2UucG9pbnQ7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IGhhbmRsZVJlZlBhaXIudGFyZ2V0LnBvaW50O1xuICAgICAgICAgICAgY29uc3QgeyBzb3VyY2VPZmZzZXQsIHRhcmdldE9mZnNldCB9ID0gcmVkdWNlUm91dGVNYXJnaW4oc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUpO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlT3V0ZXJSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZXhwYW5kKFxuICAgICAgICAgICAgICAgIHNvdXJjZVJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXRbM10sXG4gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0WzBdLFxuICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNldFsxXSxcbiAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXRbMl1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRPdXRlclJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5leHBhbmQoXG4gICAgICAgICAgICAgICAgdGFyZ2V0UmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgIHRhcmdldE9mZnNldFszXSxcbiAgICAgICAgICAgICAgICB0YXJnZXRPZmZzZXRbMF0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0WzFdLFxuICAgICAgICAgICAgICAgIHRhcmdldE9mZnNldFsyXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRTb3VyY2VQb2ludCA9IGdldE5leHRQb2ludChzb3VyY2VQb2ludCwgc291cmNlT3V0ZXJSZWN0YW5nbGUsIGhhbmRsZVJlZlBhaXIuc291cmNlLmRpcmVjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0UG9pbnQgPSBnZXROZXh0UG9pbnQodGFyZ2V0UG9pbnQsIHRhcmdldE91dGVyUmVjdGFuZ2xlLCBoYW5kbGVSZWZQYWlyLnRhcmdldC5kaXJlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgaXNJbnRlcnNlY3QgPVxuICAgICAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGFyZ2V0UmVjdGFuZ2xlLCBzb3VyY2VQb2ludCkgfHxcbiAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRhcmdldE91dGVyUmVjdGFuZ2xlLCBuZXh0U291cmNlUG9pbnQpIHx8XG4gICAgICAgICAgICAgICAgUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZShzb3VyY2VPdXRlclJlY3RhbmdsZSwgbmV4dFRhcmdldFBvaW50KSB8fFxuICAgICAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUoc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRQb2ludCk7XG4gICAgICAgICAgICBpZiAoIWlzSW50ZXJzZWN0KSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzID0gZ2VuZXJhdGVFbGJvd0xpbmVSb3V0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVBvaW50LFxuICAgICAgICAgICAgICAgICAgICBuZXh0U291cmNlUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlT3V0ZXJSZWN0YW5nbGUsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFBvaW50LFxuICAgICAgICAgICAgICAgICAgICBuZXh0VGFyZ2V0UG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0T3V0ZXJSZWN0YW5nbGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcG9pbnRzID0gZ2V0UG9pbnRzKFxuICAgICAgICAgICAgICAgIGhhbmRsZVJlZlBhaXIuc291cmNlLnBvaW50LFxuICAgICAgICAgICAgICAgIGhhbmRsZVJlZlBhaXIuc291cmNlLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICBoYW5kbGVSZWZQYWlyLnRhcmdldC5wb2ludCxcbiAgICAgICAgICAgICAgICBoYW5kbGVSZWZQYWlyLnRhcmdldC5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgb2Zmc2V0XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50cyA9IHJlbW92ZUR1cGxpY2F0ZVBvaW50cyhwb2ludHMpO1xuICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudC5wb2ludHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VydmVQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIGlmIChlbGVtZW50LnBvaW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlUmVmUGFpciA9IGdldExpbmVIYW5kbGVSZWZQYWlyKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3QgeyBzb3VyY2UsIHRhcmdldCB9ID0gaGFuZGxlUmVmUGFpcjtcbiAgICAgICAgY29uc3Qgc291cmNlQm91bmRFbGVtZW50ID0gaGFuZGxlUmVmUGFpci5zb3VyY2UuYm91bmRFbGVtZW50O1xuICAgICAgICBjb25zdCB0YXJnZXRCb3VuZEVsZW1lbnQgPSBoYW5kbGVSZWZQYWlyLnRhcmdldC5ib3VuZEVsZW1lbnQ7XG4gICAgICAgIGxldCBjdXJ2ZVBvaW50czogUG9pbnRbXSA9IFtzb3VyY2UucG9pbnRdO1xuICAgICAgICBjb25zdCBzdW1EaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4uc291cmNlLnBvaW50LCAuLi50YXJnZXQucG9pbnQpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSAxMiArIHN1bURpc3RhbmNlIC8gMztcbiAgICAgICAgaWYgKHNvdXJjZUJvdW5kRWxlbWVudCkge1xuICAgICAgICAgICAgY3VydmVQb2ludHMucHVzaChnZXRQb2ludEJ5VmVjdG9yKHNvdXJjZS5wb2ludCwgc291cmNlLnZlY3Rvciwgb2Zmc2V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldEJvdW5kRWxlbWVudCkge1xuICAgICAgICAgICAgY3VydmVQb2ludHMucHVzaChnZXRQb2ludEJ5VmVjdG9yKHRhcmdldC5wb2ludCwgdGFyZ2V0LnZlY3Rvciwgb2Zmc2V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNTaW5nbGVCb3VuZCA9IChzb3VyY2VCb3VuZEVsZW1lbnQgJiYgIXRhcmdldEJvdW5kRWxlbWVudCkgfHwgKCFzb3VyY2VCb3VuZEVsZW1lbnQgJiYgdGFyZ2V0Qm91bmRFbGVtZW50KTtcbiAgICAgICAgaWYgKGlzU2luZ2xlQm91bmQpIHtcbiAgICAgICAgICAgIGN1cnZlUG9pbnRzLnB1c2godGFyZ2V0LnBvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IFEyQyhjdXJ2ZVBvaW50cyk7XG4gICAgICAgICAgICByZXR1cm4gcG9pbnRzT25CZXppZXJDdXJ2ZXMocG9pbnRzKSBhcyBQb2ludFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc291cmNlQm91bmRFbGVtZW50ICYmICF0YXJnZXRCb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGN1cnZlUG9pbnRzLnB1c2goZ2V0UG9pbnRCeVZlY3Rvcihzb3VyY2UucG9pbnQsIHNvdXJjZS52ZWN0b3IsIG9mZnNldCkpO1xuICAgICAgICAgICAgY3VydmVQb2ludHMucHVzaChnZXRQb2ludEJ5VmVjdG9yKHRhcmdldC5wb2ludCwgdGFyZ2V0LnZlY3Rvciwgb2Zmc2V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VydmVQb2ludHMucHVzaCh0YXJnZXQucG9pbnQpO1xuICAgICAgICByZXR1cm4gcG9pbnRzT25CZXppZXJDdXJ2ZXMoY3VydmVQb2ludHMpIGFzIFBvaW50W107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy9UT0RPIOebtOaOpeiOt+WPlui0neWhnuWwlOabsue6v+S4iumrmOWvhuW6pueCuVxuICAgICAgICBjb25zdCBwb2ludHMgPSBQbGFpdExpbmUuZ2V0UG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3QgZHJhdyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpLmdlbmVyYXRvci5jdXJ2ZShwb2ludHMpO1xuICAgICAgICBsZXQgYmV6aWVyUG9pbnRzID0gdHJhbnNmb3JtT3BzVG9Qb2ludHMoZHJhdy5zZXRzWzBdLm9wcykgYXMgUG9pbnRbXTtcbiAgICAgICAgYmV6aWVyUG9pbnRzID0gcmVtb3ZlRHVwbGljYXRlUG9pbnRzKGJlemllclBvaW50cyk7XG4gICAgICAgIHJldHVybiBwb2ludHNPbkJlemllckN1cnZlcyhiZXppZXJQb2ludHMpIGFzIFBvaW50W107XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU9wc1RvUG9pbnRzID0gKG9wczogT3BbXSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGl0ZW0gb2Ygb3BzKSB7XG4gICAgICAgIGlmIChpdGVtLm9wID09PSAnbW92ZScpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFtpdGVtLmRhdGFbMF0sIGl0ZW0uZGF0YVsxXV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goW2l0ZW0uZGF0YVswXSwgaXRlbS5kYXRhWzFdXSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbaXRlbS5kYXRhWzJdLCBpdGVtLmRhdGFbM11dKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFtpdGVtLmRhdGFbNF0sIGl0ZW0uZGF0YVs1XV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIaXRQb2x5TGluZSA9IChwYXRoUG9pbnRzOiBQb2ludFtdLCBwb2ludDogUG9pbnQsIHN0cm9rZVdpZHRoOiBudW1iZXIsIGV4cGFuZDogbnVtYmVyID0gMCkgPT4ge1xuICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwYXRoUG9pbnRzLCBwb2ludCk7XG4gICAgcmV0dXJuIGRpc3RhbmNlIDw9IHN0cm9rZVdpZHRoICsgZXhwYW5kO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdExpbmVUZXh0SW5kZXggPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgdGV4dHMgPSBlbGVtZW50LnRleHRzO1xuICAgIGlmICghdGV4dHMubGVuZ3RoKSByZXR1cm4gLTE7XG5cbiAgICBjb25zdCBwb2ludHMgPSBnZXRFbGJvd1BvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgcmV0dXJuIHRleHRzLmZpbmRJbmRleCh0ZXh0ID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gZ2V0UG9pbnRPblBvbHlsaW5lKHBvaW50cywgdGV4dC5wb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IHtcbiAgICAgICAgICAgIHg6IGNlbnRlclswXSAtIHRleHQud2lkdGghIC8gMixcbiAgICAgICAgICAgIHk6IGNlbnRlclsxXSAtIHRleHQuaGVpZ2h0ISAvIDIsXG4gICAgICAgICAgICB3aWR0aDogdGV4dC53aWR0aCEsXG4gICAgICAgICAgICBoZWlnaHQ6IHRleHQuaGVpZ2h0IVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtwb2ludCwgcG9pbnRdKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIaXRMaW5lVGV4dCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICByZXR1cm4gZ2V0SGl0TGluZVRleHRJbmRleChib2FyZCwgZWxlbWVudCwgcG9pbnQpICE9PSAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBkcmF3TGluZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lKSA9PiB7XG4gICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IGdldFN0cm9rZUNvbG9yQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IHN0cm9rZUxpbmVEYXNoID0gZ2V0TGluZURhc2hCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgc3Ryb2tlOiBzdHJva2VDb2xvciwgc3Ryb2tlV2lkdGgsIHN0cm9rZUxpbmVEYXNoIH07XG4gICAgY29uc3QgbGluZUcgPSBjcmVhdGVHKCk7XG4gICAgbGV0IHBvaW50cyA9IGdldExpbmVQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgIGxldCBsaW5lO1xuICAgIGlmIChlbGVtZW50LnNoYXBlID09PSBMaW5lU2hhcGUuY3VydmUpIHtcbiAgICAgICAgLy9UT0RPIGVsZW1lbnQucG9pbnRzIOW6lOS4uuabsue6v+aLkOeCuVxuICAgICAgICBsaW5lID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCkuY3VydmUocG9pbnRzLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lID0gZHJhd0xpbmVhclBhdGgocG9pbnRzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSBpZENyZWF0b3IoKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZSgnbWFzaycsIGB1cmwoIyR7aWR9KWApO1xuICAgIGxpbmVHLmFwcGVuZENoaWxkKGxpbmUpO1xuICAgIGNvbnN0IHsgbWFzaywgbWFza1RhcmdldEZpbGxSZWN0IH0gPSBkcmF3TWFzayhib2FyZCwgZWxlbWVudCwgaWQpO1xuICAgIGxpbmVHLmFwcGVuZENoaWxkKG1hc2spO1xuICAgIGxpbmUuYXBwZW5kQ2hpbGQobWFza1RhcmdldEZpbGxSZWN0KTtcbiAgICBjb25zdCBhcnJvdyA9IGRyYXdMaW5lQXJyb3coZWxlbWVudCwgcG9pbnRzLCB7IHN0cm9rZTogc3Ryb2tlQ29sb3IsIHN0cm9rZVdpZHRoIH0pO1xuICAgIGFycm93ICYmIGxpbmVHLmFwcGVuZENoaWxkKGFycm93KTtcbiAgICByZXR1cm4gbGluZUc7XG59O1xuXG5mdW5jdGlvbiBkcmF3TWFzayhib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWFzayA9IGNyZWF0ZU1hc2soKTtcbiAgICBtYXNrLnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7XG4gICAgY29uc3QgcG9pbnRzID0gZ2V0TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgbGV0IHJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyk7XG4gICAgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldE91dGxpbmVSZWN0YW5nbGUocmVjdGFuZ2xlLCAtMzApO1xuICAgIGNvbnN0IG1hc2tGaWxsUmVjdCA9IGNyZWF0ZVJlY3QocmVjdGFuZ2xlLCB7XG4gICAgICAgIGZpbGw6ICd3aGl0ZSdcbiAgICB9KTtcbiAgICBtYXNrLmFwcGVuZENoaWxkKG1hc2tGaWxsUmVjdCk7XG5cbiAgICBjb25zdCB0ZXh0cyA9IGVsZW1lbnQudGV4dHM7XG4gICAgdGV4dHMuZm9yRWFjaCgodGV4dCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdGV4dFJlY3RhbmdsZSA9IGdldExpbmVUZXh0UmVjdGFuZ2xlKGJvYXJkLCBlbGVtZW50LCBpbmRleCk7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBjcmVhdGVSZWN0KHRleHRSZWN0YW5nbGUsIHtcbiAgICAgICAgICAgIGZpbGw6ICdibGFjaydcbiAgICAgICAgfSk7XG4gICAgICAgIG1hc2suYXBwZW5kQ2hpbGQocmVjdCk7XG4gICAgfSk7XG4gICAgLy/mkpHlvIAgbGluZVxuICAgIGNvbnN0IG1hc2tUYXJnZXRGaWxsUmVjdCA9IGNyZWF0ZVJlY3QocmVjdGFuZ2xlKTtcbiAgICBtYXNrVGFyZ2V0RmlsbFJlY3Quc2V0QXR0cmlidXRlKCdvcGFjaXR5JywgJzAnKTtcbiAgICByZXR1cm4geyBtYXNrLCBtYXNrVGFyZ2V0RmlsbFJlY3QgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25Qb2ludCA9IChnZW9tZXRyeTogUGxhaXRHZW9tZXRyeSwgY29ubmVjdGlvbjogUG9pbnQsIGRpcmVjdGlvbj86IERpcmVjdGlvbiwgZGVsdGE/OiBudW1iZXIpOiBQb2ludCA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZ2VvbWV0cnkucG9pbnRzKTtcbiAgICBpZiAoZGlyZWN0aW9uICYmIGRlbHRhKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbkZhY3RvciA9IGdldERpcmVjdGlvbkZhY3RvcihkaXJlY3Rpb24pO1xuICAgICAgICBjb25zdCBwb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtwb2ludFswXSArIGRpcmVjdGlvbkZhY3Rvci54ICogZGVsdGEsIHBvaW50WzFdICsgZGlyZWN0aW9uRmFjdG9yLnkgKiBkZWx0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtUG9pbnRUb0Nvbm5lY3Rpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50OiBQb2ludCwgaGl0RWxlbWVudDogUGxhaXRHZW9tZXRyeSk6IFBvaW50ID0+IHtcbiAgICBsZXQgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlQb2ludHMoaGl0RWxlbWVudC5wb2ludHMpO1xuICAgIHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHJlY3RhbmdsZSwgQUNUSVZFX1NUUk9LRV9XSURUSCk7XG4gICAgbGV0IG5lYXJlc3RQb2ludCA9IGdldE5lYXJlc3RQb2ludChoaXRFbGVtZW50LCBwb2ludCwgQUNUSVZFX1NUUk9LRV9XSURUSCk7XG4gICAgY29uc3QgaGl0Q29ubmVjdG9yID0gZ2V0SGl0Q29ubmVjdG9yUG9pbnQobmVhcmVzdFBvaW50LCBoaXRFbGVtZW50LCByZWN0YW5nbGUpO1xuICAgIG5lYXJlc3RQb2ludCA9IGhpdENvbm5lY3RvciA/IGhpdENvbm5lY3RvciA6IG5lYXJlc3RQb2ludDtcbiAgICByZXR1cm4gWyhuZWFyZXN0UG9pbnRbMF0gLSByZWN0YW5nbGUueCkgLyByZWN0YW5nbGUud2lkdGgsIChuZWFyZXN0UG9pbnRbMV0gLSByZWN0YW5nbGUueSkgLyByZWN0YW5nbGUuaGVpZ2h0XTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRDb25uZWN0b3JQb2ludCA9IChtb3ZpbmdQb2ludDogUG9pbnQsIGhpdEVsZW1lbnQ6IFBsYWl0R2VvbWV0cnksIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3Qgc2hhcGUgPSBnZXRTaGFwZShoaXRFbGVtZW50KTtcbiAgICBjb25zdCBjb25uZWN0b3IgPSBnZXRFbmdpbmUoc2hhcGUpLmdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIGNvbnN0IHBvaW50cyA9IGdldFBvaW50c0J5Q2VudGVyUG9pbnQobW92aW5nUG9pbnQsIDUsIDUpO1xuICAgIGNvbnN0IHBvaW50UmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlQb2ludHMocG9pbnRzKTtcbiAgICByZXR1cm4gY29ubmVjdG9yLmZpbmQocG9pbnQgPT4ge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHBvaW50UmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQudG9SZWN0YW5nbGVDbGllbnQoW3BvaW50LCBwb2ludF0pKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMaW5lVGV4dFJlY3RhbmdsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBpbmRleDogbnVtYmVyKTogUmVjdGFuZ2xlQ2xpZW50ID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gZWxlbWVudC50ZXh0c1tpbmRleF07XG4gICAgY29uc3QgZWxib3dQb2ludHMgPSBnZXRMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCBwb2ludCA9IGdldFBvaW50T25Qb2x5bGluZShlbGJvd1BvaW50cywgdGV4dC5wb3NpdGlvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcG9pbnRbMF0gLSB0ZXh0LndpZHRoISAvIDIsXG4gICAgICAgIHk6IHBvaW50WzFdIC0gdGV4dC5oZWlnaHQhIC8gMixcbiAgICAgICAgd2lkdGg6IHRleHQud2lkdGghLFxuICAgICAgICBoZWlnaHQ6IHRleHQuaGVpZ2h0IVxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Qm9hcmRMaW5lcyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiBmaW5kRWxlbWVudHMoYm9hcmQsIHtcbiAgICAgICAgbWF0Y2g6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKGVsZW1lbnQpLFxuICAgICAgICByZWN1cnNpb246IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudChlbGVtZW50KVxuICAgIH0pIGFzIFBsYWl0TGluZVtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV4dGVuZFBvaW50ID0gKHNvdXJjZTogUG9pbnQsIHRhcmdldDogUG9pbnQsIGV4dGVuZERpc3RhbmNlOiBudW1iZXIpOiBQb2ludCA9PiB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLnNvdXJjZSwgLi4udGFyZ2V0KTtcbiAgICBjb25zdCBzaW4gPSAodGFyZ2V0WzFdIC0gc291cmNlWzFdKSAvIGRpc3RhbmNlO1xuICAgIGNvbnN0IGNvcyA9ICh0YXJnZXRbMF0gLSBzb3VyY2VbMF0pIC8gZGlzdGFuY2U7XG4gICAgcmV0dXJuIFtzb3VyY2VbMF0gKyBleHRlbmREaXN0YW5jZSAqIGNvcywgc291cmNlWzFdICsgZXh0ZW5kRGlzdGFuY2UgKiBzaW5dO1xufTtcblxuLy8gcXVhZHJhdGljIEJlemllciB0byBjdWJpYyBCZXppZXJcbmV4cG9ydCBjb25zdCBRMkMgPSAocG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3QgbnVtU2VnbWVudHMgPSBwb2ludHMubGVuZ3RoIC8gMztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVNlZ21lbnRzOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IHFDb250cm9sID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgZW5kID0gcG9pbnRzW2kgKyAyXTtcbiAgICAgICAgY29uc3Qgc3RhcnREaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4uc3RhcnQsIC4uLnFDb250cm9sKTtcbiAgICAgICAgY29uc3QgZW5kRGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLmVuZCwgLi4ucUNvbnRyb2wpO1xuICAgICAgICBjb25zdCBjQ29udHJvbDEgPSBnZXRFeHRlbmRQb2ludChzdGFydCwgcUNvbnRyb2wsIChzdGFydERpc3RhbmNlICogMikgLyAzKTtcbiAgICAgICAgY29uc3QgY0NvbnRyb2wyID0gZ2V0RXh0ZW5kUG9pbnQoZW5kLCBxQ29udHJvbCwgKGVuZERpc3RhbmNlICogMikgLyAzKTtcbiAgICAgICAgcmVzdWx0LnB1c2goc3RhcnQsIGNDb250cm9sMSwgY0NvbnRyb2wyLCBlbmQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZlY3RvckJ5Q29ubmVjdGlvbiA9IChib3VuZEVsZW1lbnQ6IFBsYWl0R2VvbWV0cnksIGNvbm5lY3Rpb246IFBvaW50T2ZSZWN0YW5nbGUpOiBWZWN0b3IgPT4ge1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5UG9pbnRzKGJvdW5kRWxlbWVudC5wb2ludHMpO1xuICAgIGNvbnN0IHNoYXBlID0gZ2V0U2hhcGUoYm91bmRFbGVtZW50KTtcbiAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUoc2hhcGUpO1xuICAgIGxldCB2ZWN0b3I6IFZlY3RvciA9IFswLCAwXTtcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVBvaW50T2ZSZWN0YW5nbGUoY29ubmVjdGlvbik7XG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgICBjb25zdCBmYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IoZGlyZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtmYWN0b3IueCwgZmFjdG9yLnldO1xuICAgIH1cbiAgICBpZiAoZW5naW5lLmdldEVkZ2VCeUNvbm5lY3Rpb25Qb2ludCkge1xuICAgICAgICBjb25zdCBlZGdlID0gZW5naW5lLmdldEVkZ2VCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGUsIGNvbm5lY3Rpb24pO1xuICAgICAgICBpZiAoZWRnZSkge1xuICAgICAgICAgICAgY29uc3QgbGluZVZlY3RvciA9IFtlZGdlWzFdWzBdIC0gZWRnZVswXVswXSwgZWRnZVsxXVsxXSAtIGVkZ2VbMF1bMV1dIGFzIFZlY3RvcjtcbiAgICAgICAgICAgIHJldHVybiByb3RhdGVWZWN0b3JBbnRpOTAobGluZVZlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuZ2luZS5nZXRUYW5nZW50VmVjdG9yQnlDb25uZWN0aW9uUG9pbnQpIHtcbiAgICAgICAgY29uc3QgbGluZVZlY3RvciA9IGVuZ2luZS5nZXRUYW5nZW50VmVjdG9yQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICAgICAgaWYgKGxpbmVWZWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiByb3RhdGVWZWN0b3JBbnRpOTAobGluZVZlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZlY3Rvcjtcbn07XG4iXX0=
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2xpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCwrQkFBK0IsRUFDL0IsVUFBVSxFQUNWLE9BQU8sRUFDUCxjQUFjLEVBQ2QsZUFBZSxFQUNmLFlBQVksRUFFWixjQUFjLEVBQ2QsVUFBVSxFQUNWLFVBQVUsRUFDVixtQkFBbUIsRUFJbkIsNEJBQTRCLEVBQy9CLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDSCxTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsOEJBQThCLEVBQzlCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLGNBQWMsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILGFBQWEsRUFFYixjQUFjLEVBQ2QsU0FBUyxFQUVULGdCQUFnQixFQUVoQixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDN0IsS0FBZ0IsRUFDaEIsTUFBc0IsRUFDdEIsTUFBa0IsRUFDbEIsTUFBa0IsRUFDbEIsS0FBa0IsRUFDbEIsT0FBd0QsRUFDL0MsRUFBRTtJQUNYLE9BQU87UUFDSCxFQUFFLEVBQUUsU0FBUyxFQUFFO1FBQ2YsSUFBSSxFQUFFLE1BQU07UUFDWixLQUFLO1FBQ0wsTUFBTTtRQUNOLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN6QixNQUFNO1FBQ04sT0FBTyxFQUFFLENBQUM7UUFDVixNQUFNO1FBQ04sR0FBRyxPQUFPO0tBQ2IsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBa0IsRUFBRSxFQUFFO0lBQ25FLFFBQVEsT0FBTyxDQUFDLEtBQUssRUFBRTtRQUNuQixLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQixPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDekM7UUFDRCxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQixPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDekM7UUFDRCxPQUFPLENBQUMsQ0FBQztZQUNMLE9BQU8sU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDOUM7S0FDSjtBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDMUUsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFnQixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzdILE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBZ0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM3SCxJQUFJLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5SCxJQUFJLFdBQVcsR0FBRyxrQkFBa0I7UUFDaEMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hELElBQUksZUFBZSxHQUFHLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQztJQUNoSCxJQUFJLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM1RCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RCxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RCxNQUFNLGVBQWUsR0FBa0I7UUFDbkMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxNQUFNO1FBQ3pCLEtBQUssRUFBRSxXQUFXO1FBQ2xCLFNBQVMsRUFBRSxlQUFlO1FBQzFCLE1BQU0sRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztLQUMzQyxDQUFDO0lBQ0YsTUFBTSxlQUFlLEdBQWtCO1FBQ25DLEdBQUcsRUFBRSxhQUFhLENBQUMsTUFBTTtRQUN6QixLQUFLLEVBQUUsV0FBVztRQUNsQixTQUFTLEVBQUUsZUFBZTtRQUMxQixNQUFNLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7S0FDM0MsQ0FBQztJQUNGLElBQUksa0JBQWtCLEVBQUU7UUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNsSSxNQUFNLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVcsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JELGVBQWUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQzFELFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVcsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNwSCxlQUFlLENBQUMsWUFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ2xELGVBQWUsQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDO1FBQzVDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO0tBQ3pDO0lBQ0QsSUFBSSxrQkFBa0IsRUFBRTtRQUNwQixNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ2xJLE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVyxDQUFDLENBQUM7UUFDM0YsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckQsZUFBZSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7UUFDMUQsV0FBVyxHQUFHLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BILGVBQWUsQ0FBQyxZQUFZLEdBQUcsa0JBQWtCLENBQUM7UUFDbEQsZUFBZSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7UUFDNUMsZUFBZSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7UUFDcEMsZUFBZSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7S0FDekM7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFDaEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDcEUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0IsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBZ0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0csTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksY0FBYyxDQUFnQixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3RyxNQUFNLE9BQU8sR0FBRyxhQUFhLElBQUksYUFBYSxDQUFDO1FBRS9DLElBQUksTUFBTSxHQUFZLEVBQUUsQ0FBQztRQUN6QixJQUFJLE9BQU8sRUFBRTtZQUNULE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQzNDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFDMUMsdUJBQXVCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUM3QyxDQUFDO1lBQ0YsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FDM0Msb0JBQW9CLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUMxQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQzdDLENBQUM7WUFDRixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUMvQyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUMvQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxHQUFHLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUMzRixNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQy9DLGVBQWUsRUFDZixZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQ2xCLENBQUM7WUFDRixNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQy9DLGVBQWUsRUFDZixZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDZixZQUFZLENBQUMsQ0FBQyxDQUFDLENBQ2xCLENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEcsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hHLE1BQU0sV0FBVyxHQUNiLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDO2dCQUNoRSxlQUFlLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxDQUFDO2dCQUN6RSxlQUFlLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLEVBQUUsZUFBZSxDQUFDO2dCQUN6RSxlQUFlLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsTUFBTSxHQUFHLHNCQUFzQixDQUFDO29CQUM1QixXQUFXO29CQUNYLGVBQWU7b0JBQ2YsZUFBZTtvQkFDZixvQkFBb0I7b0JBQ3BCLFdBQVc7b0JBQ1gsZUFBZTtvQkFDZixlQUFlO29CQUNmLG9CQUFvQjtpQkFDdkIsQ0FBQyxDQUFDO2FBQ047U0FDSjtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE1BQU0sR0FBRyxTQUFTLENBQ2QsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQzFCLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUM5QixhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFDMUIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQzlCLE1BQU0sQ0FDVCxDQUFDO1NBQ0w7UUFDRCxNQUFNLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFDRCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDMUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFrQixFQUFFLEVBQUU7SUFDcEUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDN0IsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNELE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUM3RCxJQUFJLFdBQVcsR0FBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkYsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxrQkFBa0IsRUFBRTtZQUNwQixXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsSUFBSSxrQkFBa0IsRUFBRTtZQUNwQixXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsTUFBTSxhQUFhLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLGtCQUFrQixJQUFJLGtCQUFrQixDQUFDLENBQUM7UUFDakgsSUFBSSxhQUFhLEVBQUU7WUFDZixXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEMsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLENBQVksQ0FBQztTQUNsRDtRQUNELElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEUsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMzRTtRQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE9BQU8sb0JBQW9CLENBQUMsV0FBVyxDQUFZLENBQUM7S0FDdkQ7U0FBTTtRQUNILHFCQUFxQjtRQUNyQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkUsSUFBSSxZQUFZLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQVksQ0FBQztRQUNyRSxZQUFZLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkQsT0FBTyxvQkFBb0IsQ0FBQyxZQUFZLENBQVksQ0FBQztLQUN4RDtBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBUyxFQUFFLEVBQUU7SUFDOUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO1FBQ2xCLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxNQUFNLEVBQUU7WUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0M7YUFBTTtZQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDO0tBQ0o7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFtQixFQUFFLEtBQVksRUFBRSxXQUFtQixFQUFFLFNBQWlCLENBQUMsRUFBRSxFQUFFO0lBQ3hHLE1BQU0sUUFBUSxHQUFHLCtCQUErQixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwRSxPQUFPLFFBQVEsSUFBSSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBQzVDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFrQixFQUFFLEtBQVksRUFBRSxFQUFFO0lBQ3ZGLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUU3QixNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMxQixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHO1lBQ2QsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBTSxHQUFHLENBQUM7WUFDOUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTyxHQUFHLENBQUM7WUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFNO1lBQ2xCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTztTQUN2QixDQUFDO1FBQ0YsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9GLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFrQixFQUFFLEtBQVksRUFBRSxFQUFFO0lBQ2pGLE9BQU8sbUJBQW1CLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQWtCLEVBQUUsRUFBRTtJQUM5RCxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3JFLE1BQU0sS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0MsSUFBSSxJQUFJLENBQUM7SUFDVCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssRUFBRTtRQUNuQyw0QkFBNEI7UUFDNUIsSUFBSSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUMvRDtTQUFNO1FBQ0gsSUFBSSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDMUM7SUFDRCxNQUFNLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixNQUFNLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDckMsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbkYsS0FBSyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsU0FBUyxRQUFRLENBQUMsS0FBaUIsRUFBRSxPQUFrQixFQUFFLEVBQVU7SUFDL0QsTUFBTSxJQUFJLEdBQUcsVUFBVSxFQUFFLENBQUM7SUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUIsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxJQUFJLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxTQUFTLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUU7UUFDdkMsSUFBSSxFQUFFLE9BQU87S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUUvQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDMUIsSUFBSSxhQUFhLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRSxhQUFhLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxhQUFhLEVBQUU7WUFDbkMsSUFBSSxFQUFFLE9BQU87U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUMsQ0FBQztJQUNILFNBQVM7SUFDVCxNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELGtCQUFrQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFFBQXVCLEVBQUUsVUFBaUIsRUFBRSxTQUFxQixFQUFFLEtBQWMsRUFBUyxFQUFFO0lBQzNILE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxJQUFJLFNBQVMsSUFBSSxLQUFLLEVBQUU7UUFDcEIsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEQsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN4RSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0tBQ3ZGO1NBQU07UUFDSCxPQUFPLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDcEU7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsS0FBWSxFQUFFLFVBQXlCLEVBQVMsRUFBRTtJQUM1RyxJQUFJLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsU0FBUyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDcEUsSUFBSSxZQUFZLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUMzRSxNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9FLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQzFELE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25ILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsV0FBa0IsRUFBRSxVQUF5QixFQUFFLFNBQTBCLEVBQUUsRUFBRTtJQUM5RyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzFCLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFrQixFQUFFLEtBQWEsRUFBbUIsRUFBRTtJQUMxRyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3RCxPQUFPO1FBQ0gsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBTSxHQUFHLENBQUM7UUFDN0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTyxHQUFHLENBQUM7UUFDOUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTztLQUN2QixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQy9DLE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRTtRQUN2QixLQUFLLEVBQUUsQ0FBQyxPQUFxQixFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ2xFLFNBQVMsRUFBRSxDQUFDLE9BQXFCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7S0FDaEYsQ0FBZ0IsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRixtQ0FBbUM7QUFDbkMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7SUFDbkMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQixNQUFNLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sV0FBVyxHQUFHLDRCQUE0QixDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDdEUsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNqRDtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsWUFBMkIsRUFBRSxVQUE0QixFQUFVLEVBQUU7SUFDdkcsTUFBTSxTQUFTLEdBQUcsb0JBQW9CLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsSUFBSSxNQUFNLEdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUIsTUFBTSxTQUFTLEdBQUcsOEJBQThCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsSUFBSSxTQUFTLEVBQUU7UUFDWCxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0I7SUFDRCxJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRTtRQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksSUFBSSxFQUFFO1lBQ04sTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVcsQ0FBQztZQUNoRixPQUFPLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3pDO0tBQ0o7SUFDRCxJQUFJLE1BQU0sQ0FBQyxpQ0FBaUMsRUFBRTtRQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsaUNBQWlDLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25GLElBQUksVUFBVSxFQUFFO1lBQ1osT0FBTyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN6QztLQUNKO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQb2ludCxcbiAgICBpZENyZWF0b3IsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICBQbGFpdEJvYXJkLFxuICAgIGNyZWF0ZUcsXG4gICAgZ2V0RWxlbWVudEJ5SWQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGZpbmRFbGVtZW50cyxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgZHJhd0xpbmVhclBhdGgsXG4gICAgY3JlYXRlTWFzayxcbiAgICBjcmVhdGVSZWN0LFxuICAgIEFDVElWRV9TVFJPS0VfV0lEVEgsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBEaXJlY3Rpb24sXG4gICAgVmVjdG9yLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBnZXRQb2ludHMsXG4gICAgZ2V0UmVjdGFuZ2xlQnlQb2ludHMsXG4gICAgZ2V0UG9pbnRPblBvbHlsaW5lLFxuICAgIGdldERpcmVjdGlvbkZhY3RvcixcbiAgICByb3RhdGVWZWN0b3JBbnRpOTAsXG4gICAgZ2V0RGlyZWN0aW9uQnlWZWN0b3IsXG4gICAgZ2V0T3Bwb3NpdGVEaXJlY3Rpb24sXG4gICAgZ2V0RGlyZWN0aW9uQnlQb2ludE9mUmVjdGFuZ2xlLFxuICAgIGdldFBvaW50QnlWZWN0b3IsXG4gICAgcmVtb3ZlRHVwbGljYXRlUG9pbnRzLFxuICAgIHJlZHVjZVJvdXRlTWFyZ2luLFxuICAgIGdlbmVyYXRlRWxib3dMaW5lUm91dGUsXG4gICAgZ2V0TmV4dFBvaW50LFxuICAgIERFRkFVTFRfUk9VVEVfTUFSR0lOLFxuICAgIGdldEV4dGVuZFBvaW50XG59IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBMaW5lSGFuZGxlLFxuICAgIExpbmVIYW5kbGVLZXksXG4gICAgTGluZUhhbmRsZVJlZixcbiAgICBMaW5lTWFya2VyVHlwZSxcbiAgICBMaW5lU2hhcGUsXG4gICAgTGluZVRleHQsXG4gICAgUGxhaXREcmF3RWxlbWVudCxcbiAgICBQbGFpdEdlb21ldHJ5LFxuICAgIFBsYWl0TGluZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldFBvaW50c0J5Q2VudGVyUG9pbnQsIGdldE5lYXJlc3RQb2ludCB9IGZyb20gJy4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgZ2V0TGluZURhc2hCeUVsZW1lbnQsIGdldFN0cm9rZUNvbG9yQnlFbGVtZW50LCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4vc3R5bGUvc3Ryb2tlJztcbmltcG9ydCB7IGdldEVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZXMnO1xuaW1wb3J0IHsgZHJhd0xpbmVBcnJvdyB9IGZyb20gJy4vbGluZS1hcnJvdyc7XG5pbXBvcnQgeyBwb2ludHNPbkJlemllckN1cnZlcyB9IGZyb20gJ3BvaW50cy1vbi1jdXJ2ZSc7XG5pbXBvcnQgeyBPcCB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgZ2V0U2hhcGUgfSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCB7IExJTkVfVEVYVF9TUEFDRSB9IGZyb20gJy4uL2NvbnN0YW50cy9saW5lJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUxpbmVFbGVtZW50ID0gKFxuICAgIHNoYXBlOiBMaW5lU2hhcGUsXG4gICAgcG9pbnRzOiBbUG9pbnQsIFBvaW50XSxcbiAgICBzb3VyY2U6IExpbmVIYW5kbGUsXG4gICAgdGFyZ2V0OiBMaW5lSGFuZGxlLFxuICAgIHRleHRzPzogTGluZVRleHRbXSxcbiAgICBvcHRpb25zPzogUGljazxQbGFpdExpbmUsICdzdHJva2VDb2xvcicgfCAnc3Ryb2tlV2lkdGgnPlxuKTogUGxhaXRMaW5lID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgIHR5cGU6ICdsaW5lJyxcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgdGV4dHM6IHRleHRzID8gdGV4dHMgOiBbXSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICBwb2ludHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExpbmVQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIHN3aXRjaCAoZWxlbWVudC5zaGFwZSkge1xuICAgICAgICBjYXNlIExpbmVTaGFwZS5lbGJvdzoge1xuICAgICAgICAgICAgcmV0dXJuIGdldEVsYm93UG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIExpbmVTaGFwZS5jdXJ2ZToge1xuICAgICAgICAgICAgcmV0dXJuIGdldEN1cnZlUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gUGxhaXRMaW5lLmdldFBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGluZUhhbmRsZVJlZlBhaXIgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgc291cmNlQm91bmRFbGVtZW50ID0gZWxlbWVudC5zb3VyY2UuYm91bmRJZCA/IGdldEVsZW1lbnRCeUlkPFBsYWl0R2VvbWV0cnk+KGJvYXJkLCBlbGVtZW50LnNvdXJjZS5ib3VuZElkKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YXJnZXRCb3VuZEVsZW1lbnQgPSBlbGVtZW50LnRhcmdldC5ib3VuZElkID8gZ2V0RWxlbWVudEJ5SWQ8UGxhaXRHZW9tZXRyeT4oYm9hcmQsIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIDogdW5kZWZpbmVkO1xuICAgIGxldCBzb3VyY2VQb2ludCA9IHNvdXJjZUJvdW5kRWxlbWVudCA/IGdldENvbm5lY3Rpb25Qb2ludChzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hKSA6IGVsZW1lbnQucG9pbnRzWzBdO1xuICAgIGxldCB0YXJnZXRQb2ludCA9IHRhcmdldEJvdW5kRWxlbWVudFxuICAgICAgICA/IGdldENvbm5lY3Rpb25Qb2ludCh0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hKVxuICAgICAgICA6IGVsZW1lbnQucG9pbnRzW2VsZW1lbnQucG9pbnRzLmxlbmd0aCAtIDFdO1xuICAgIGxldCBzb3VyY2VEaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVZlY3RvcihbdGFyZ2V0UG9pbnRbMF0gLSBzb3VyY2VQb2ludFswXSwgdGFyZ2V0UG9pbnRbMV0gLSBzb3VyY2VQb2ludFsxXV0pITtcbiAgICBsZXQgdGFyZ2V0RGlyZWN0aW9uID0gZ2V0T3Bwb3NpdGVEaXJlY3Rpb24oc291cmNlRGlyZWN0aW9uKTtcbiAgICBjb25zdCBzb3VyY2VGYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3Ioc291cmNlRGlyZWN0aW9uKTtcbiAgICBjb25zdCB0YXJnZXRGYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IodGFyZ2V0RGlyZWN0aW9uKTtcbiAgICBjb25zdCBzb3VyY2VIYW5kbGVSZWY6IExpbmVIYW5kbGVSZWYgPSB7XG4gICAgICAgIGtleTogTGluZUhhbmRsZUtleS5zb3VyY2UsXG4gICAgICAgIHBvaW50OiBzb3VyY2VQb2ludCxcbiAgICAgICAgZGlyZWN0aW9uOiBzb3VyY2VEaXJlY3Rpb24sXG4gICAgICAgIHZlY3RvcjogW3NvdXJjZUZhY3Rvci54LCBzb3VyY2VGYWN0b3IueV1cbiAgICB9O1xuICAgIGNvbnN0IHRhcmdldEhhbmRsZVJlZjogTGluZUhhbmRsZVJlZiA9IHtcbiAgICAgICAga2V5OiBMaW5lSGFuZGxlS2V5LnRhcmdldCxcbiAgICAgICAgcG9pbnQ6IHRhcmdldFBvaW50LFxuICAgICAgICBkaXJlY3Rpb246IHRhcmdldERpcmVjdGlvbixcbiAgICAgICAgdmVjdG9yOiBbdGFyZ2V0RmFjdG9yLngsIHRhcmdldEZhY3Rvci55XVxuICAgIH07XG4gICAgaWYgKHNvdXJjZUJvdW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uT2Zmc2V0ID0gUGxhaXRMaW5lLmlzU291cmNlTWFya09yVGFyZ2V0TWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lLCBMaW5lSGFuZGxlS2V5LnNvdXJjZSkgPyAwIDogc3Ryb2tlV2lkdGg7XG4gICAgICAgIGNvbnN0IHNvdXJjZVZlY3RvciA9IGdldFZlY3RvckJ5Q29ubmVjdGlvbihzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hKTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uQnlWZWN0b3Ioc291cmNlVmVjdG9yKTtcbiAgICAgICAgc291cmNlRGlyZWN0aW9uID0gZGlyZWN0aW9uID8gZGlyZWN0aW9uIDogc291cmNlRGlyZWN0aW9uO1xuICAgICAgICBzb3VyY2VQb2ludCA9IGdldENvbm5lY3Rpb25Qb2ludChzb3VyY2VCb3VuZEVsZW1lbnQsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hLCBzb3VyY2VEaXJlY3Rpb24sIGNvbm5lY3Rpb25PZmZzZXQpO1xuICAgICAgICBzb3VyY2VIYW5kbGVSZWYuYm91bmRFbGVtZW50ID0gc291cmNlQm91bmRFbGVtZW50O1xuICAgICAgICBzb3VyY2VIYW5kbGVSZWYuZGlyZWN0aW9uID0gc291cmNlRGlyZWN0aW9uO1xuICAgICAgICBzb3VyY2VIYW5kbGVSZWYucG9pbnQgPSBzb3VyY2VQb2ludDtcbiAgICAgICAgc291cmNlSGFuZGxlUmVmLnZlY3RvciA9IHNvdXJjZVZlY3RvcjtcbiAgICB9XG4gICAgaWYgKHRhcmdldEJvdW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uT2Zmc2V0ID0gUGxhaXRMaW5lLmlzU291cmNlTWFya09yVGFyZ2V0TWFyayhlbGVtZW50LCBMaW5lTWFya2VyVHlwZS5ub25lLCBMaW5lSGFuZGxlS2V5LnRhcmdldCkgPyAwIDogc3Ryb2tlV2lkdGg7XG4gICAgICAgIGNvbnN0IHRhcmdldFZlY3RvciA9IGdldFZlY3RvckJ5Q29ubmVjdGlvbih0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hKTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gZ2V0RGlyZWN0aW9uQnlWZWN0b3IodGFyZ2V0VmVjdG9yKTtcbiAgICAgICAgdGFyZ2V0RGlyZWN0aW9uID0gZGlyZWN0aW9uID8gZGlyZWN0aW9uIDogdGFyZ2V0RGlyZWN0aW9uO1xuICAgICAgICB0YXJnZXRQb2ludCA9IGdldENvbm5lY3Rpb25Qb2ludCh0YXJnZXRCb3VuZEVsZW1lbnQsIGVsZW1lbnQudGFyZ2V0LmNvbm5lY3Rpb24hLCB0YXJnZXREaXJlY3Rpb24sIGNvbm5lY3Rpb25PZmZzZXQpO1xuICAgICAgICB0YXJnZXRIYW5kbGVSZWYuYm91bmRFbGVtZW50ID0gdGFyZ2V0Qm91bmRFbGVtZW50O1xuICAgICAgICB0YXJnZXRIYW5kbGVSZWYuZGlyZWN0aW9uID0gdGFyZ2V0RGlyZWN0aW9uO1xuICAgICAgICB0YXJnZXRIYW5kbGVSZWYucG9pbnQgPSB0YXJnZXRQb2ludDtcbiAgICAgICAgdGFyZ2V0SGFuZGxlUmVmLnZlY3RvciA9IHRhcmdldFZlY3RvcjtcbiAgICB9XG4gICAgcmV0dXJuIHsgc291cmNlOiBzb3VyY2VIYW5kbGVSZWYsIHRhcmdldDogdGFyZ2V0SGFuZGxlUmVmIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxib3dQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIGlmIChlbGVtZW50LnBvaW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlUmVmUGFpciA9IGdldExpbmVIYW5kbGVSZWZQYWlyKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZWxlbWVudC5zb3VyY2UuYm91bmRJZCB8fCBlbGVtZW50LnRhcmdldC5ib3VuZElkID8gREVGQVVMVF9ST1VURV9NQVJHSU4gOiAwO1xuICAgICAgICBjb25zdCBzb3VyY2VFbGVtZW50ID0gZWxlbWVudC5zb3VyY2UuYm91bmRJZCAmJiBnZXRFbGVtZW50QnlJZDxQbGFpdEdlb21ldHJ5Pihib2FyZCwgZWxlbWVudC5zb3VyY2UuYm91bmRJZCk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbGVtZW50LnRhcmdldC5ib3VuZElkICYmIGdldEVsZW1lbnRCeUlkPFBsYWl0R2VvbWV0cnk+KGJvYXJkLCBlbGVtZW50LnRhcmdldC5ib3VuZElkKTtcbiAgICAgICAgY29uc3QgaXNCb3VuZCA9IHNvdXJjZUVsZW1lbnQgJiYgdGFyZ2V0RWxlbWVudDtcblxuICAgICAgICBsZXQgcG9pbnRzOiBQb2ludFtdID0gW107XG4gICAgICAgIGlmIChpc0JvdW5kKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShcbiAgICAgICAgICAgICAgICBnZXRSZWN0YW5nbGVCeVBvaW50cyh0YXJnZXRFbGVtZW50LnBvaW50cyksXG4gICAgICAgICAgICAgICAgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQodGFyZ2V0RWxlbWVudCkgKiAyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUoXG4gICAgICAgICAgICAgICAgZ2V0UmVjdGFuZ2xlQnlQb2ludHMoc291cmNlRWxlbWVudC5wb2ludHMpLFxuICAgICAgICAgICAgICAgIGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KHNvdXJjZUVsZW1lbnQpICogMlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gaGFuZGxlUmVmUGFpci5zb3VyY2UucG9pbnQ7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IGhhbmRsZVJlZlBhaXIudGFyZ2V0LnBvaW50O1xuICAgICAgICAgICAgY29uc3QgeyBzb3VyY2VPZmZzZXQsIHRhcmdldE9mZnNldCB9ID0gcmVkdWNlUm91dGVNYXJnaW4oc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUpO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlT3V0ZXJSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZXhwYW5kKFxuICAgICAgICAgICAgICAgIHNvdXJjZVJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXRbM10sXG4gICAgICAgICAgICAgICAgc291cmNlT2Zmc2V0WzBdLFxuICAgICAgICAgICAgICAgIHNvdXJjZU9mZnNldFsxXSxcbiAgICAgICAgICAgICAgICBzb3VyY2VPZmZzZXRbMl1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRPdXRlclJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5leHBhbmQoXG4gICAgICAgICAgICAgICAgdGFyZ2V0UmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgIHRhcmdldE9mZnNldFszXSxcbiAgICAgICAgICAgICAgICB0YXJnZXRPZmZzZXRbMF0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0WzFdLFxuICAgICAgICAgICAgICAgIHRhcmdldE9mZnNldFsyXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRTb3VyY2VQb2ludCA9IGdldE5leHRQb2ludChzb3VyY2VQb2ludCwgc291cmNlT3V0ZXJSZWN0YW5nbGUsIGhhbmRsZVJlZlBhaXIuc291cmNlLmRpcmVjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0UG9pbnQgPSBnZXROZXh0UG9pbnQodGFyZ2V0UG9pbnQsIHRhcmdldE91dGVyUmVjdGFuZ2xlLCBoYW5kbGVSZWZQYWlyLnRhcmdldC5kaXJlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgaXNJbnRlcnNlY3QgPVxuICAgICAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGFyZ2V0UmVjdGFuZ2xlLCBzb3VyY2VQb2ludCkgfHxcbiAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRhcmdldE91dGVyUmVjdGFuZ2xlLCBuZXh0U291cmNlUG9pbnQpIHx8XG4gICAgICAgICAgICAgICAgUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZShzb3VyY2VPdXRlclJlY3RhbmdsZSwgbmV4dFRhcmdldFBvaW50KSB8fFxuICAgICAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUoc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRQb2ludCk7XG4gICAgICAgICAgICBpZiAoIWlzSW50ZXJzZWN0KSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzID0gZ2VuZXJhdGVFbGJvd0xpbmVSb3V0ZSh7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVBvaW50LFxuICAgICAgICAgICAgICAgICAgICBuZXh0U291cmNlUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlT3V0ZXJSZWN0YW5nbGUsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFBvaW50LFxuICAgICAgICAgICAgICAgICAgICBuZXh0VGFyZ2V0UG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0T3V0ZXJSZWN0YW5nbGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcG9pbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcG9pbnRzID0gZ2V0UG9pbnRzKFxuICAgICAgICAgICAgICAgIGhhbmRsZVJlZlBhaXIuc291cmNlLnBvaW50LFxuICAgICAgICAgICAgICAgIGhhbmRsZVJlZlBhaXIuc291cmNlLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICBoYW5kbGVSZWZQYWlyLnRhcmdldC5wb2ludCxcbiAgICAgICAgICAgICAgICBoYW5kbGVSZWZQYWlyLnRhcmdldC5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgb2Zmc2V0XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50cyA9IHJlbW92ZUR1cGxpY2F0ZVBvaW50cyhwb2ludHMpO1xuICAgICAgICByZXR1cm4gcG9pbnRzO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudC5wb2ludHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VydmVQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge1xuICAgIGlmIChlbGVtZW50LnBvaW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlUmVmUGFpciA9IGdldExpbmVIYW5kbGVSZWZQYWlyKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3QgeyBzb3VyY2UsIHRhcmdldCB9ID0gaGFuZGxlUmVmUGFpcjtcbiAgICAgICAgY29uc3Qgc291cmNlQm91bmRFbGVtZW50ID0gaGFuZGxlUmVmUGFpci5zb3VyY2UuYm91bmRFbGVtZW50O1xuICAgICAgICBjb25zdCB0YXJnZXRCb3VuZEVsZW1lbnQgPSBoYW5kbGVSZWZQYWlyLnRhcmdldC5ib3VuZEVsZW1lbnQ7XG4gICAgICAgIGxldCBjdXJ2ZVBvaW50czogUG9pbnRbXSA9IFtzb3VyY2UucG9pbnRdO1xuICAgICAgICBjb25zdCBzdW1EaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4uc291cmNlLnBvaW50LCAuLi50YXJnZXQucG9pbnQpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSAxMiArIHN1bURpc3RhbmNlIC8gMztcbiAgICAgICAgaWYgKHNvdXJjZUJvdW5kRWxlbWVudCkge1xuICAgICAgICAgICAgY3VydmVQb2ludHMucHVzaChnZXRQb2ludEJ5VmVjdG9yKHNvdXJjZS5wb2ludCwgc291cmNlLnZlY3Rvciwgb2Zmc2V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldEJvdW5kRWxlbWVudCkge1xuICAgICAgICAgICAgY3VydmVQb2ludHMucHVzaChnZXRQb2ludEJ5VmVjdG9yKHRhcmdldC5wb2ludCwgdGFyZ2V0LnZlY3Rvciwgb2Zmc2V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNTaW5nbGVCb3VuZCA9IChzb3VyY2VCb3VuZEVsZW1lbnQgJiYgIXRhcmdldEJvdW5kRWxlbWVudCkgfHwgKCFzb3VyY2VCb3VuZEVsZW1lbnQgJiYgdGFyZ2V0Qm91bmRFbGVtZW50KTtcbiAgICAgICAgaWYgKGlzU2luZ2xlQm91bmQpIHtcbiAgICAgICAgICAgIGN1cnZlUG9pbnRzLnB1c2godGFyZ2V0LnBvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IFEyQyhjdXJ2ZVBvaW50cyk7XG4gICAgICAgICAgICByZXR1cm4gcG9pbnRzT25CZXppZXJDdXJ2ZXMocG9pbnRzKSBhcyBQb2ludFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc291cmNlQm91bmRFbGVtZW50ICYmICF0YXJnZXRCb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGN1cnZlUG9pbnRzLnB1c2goZ2V0UG9pbnRCeVZlY3Rvcihzb3VyY2UucG9pbnQsIHNvdXJjZS52ZWN0b3IsIG9mZnNldCkpO1xuICAgICAgICAgICAgY3VydmVQb2ludHMucHVzaChnZXRQb2ludEJ5VmVjdG9yKHRhcmdldC5wb2ludCwgdGFyZ2V0LnZlY3Rvciwgb2Zmc2V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VydmVQb2ludHMucHVzaCh0YXJnZXQucG9pbnQpO1xuICAgICAgICByZXR1cm4gcG9pbnRzT25CZXppZXJDdXJ2ZXMoY3VydmVQb2ludHMpIGFzIFBvaW50W107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy9UT0RPIOebtOaOpeiOt+WPlui0neWhnuWwlOabsue6v+S4iumrmOWvhuW6pueCuVxuICAgICAgICBjb25zdCBwb2ludHMgPSBQbGFpdExpbmUuZ2V0UG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3QgZHJhdyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpLmdlbmVyYXRvci5jdXJ2ZShwb2ludHMpO1xuICAgICAgICBsZXQgYmV6aWVyUG9pbnRzID0gdHJhbnNmb3JtT3BzVG9Qb2ludHMoZHJhdy5zZXRzWzBdLm9wcykgYXMgUG9pbnRbXTtcbiAgICAgICAgYmV6aWVyUG9pbnRzID0gcmVtb3ZlRHVwbGljYXRlUG9pbnRzKGJlemllclBvaW50cyk7XG4gICAgICAgIHJldHVybiBwb2ludHNPbkJlemllckN1cnZlcyhiZXppZXJQb2ludHMpIGFzIFBvaW50W107XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU9wc1RvUG9pbnRzID0gKG9wczogT3BbXSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGl0ZW0gb2Ygb3BzKSB7XG4gICAgICAgIGlmIChpdGVtLm9wID09PSAnbW92ZScpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFtpdGVtLmRhdGFbMF0sIGl0ZW0uZGF0YVsxXV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goW2l0ZW0uZGF0YVswXSwgaXRlbS5kYXRhWzFdXSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbaXRlbS5kYXRhWzJdLCBpdGVtLmRhdGFbM11dKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFtpdGVtLmRhdGFbNF0sIGl0ZW0uZGF0YVs1XV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIaXRQb2x5TGluZSA9IChwYXRoUG9pbnRzOiBQb2ludFtdLCBwb2ludDogUG9pbnQsIHN0cm9rZVdpZHRoOiBudW1iZXIsIGV4cGFuZDogbnVtYmVyID0gMCkgPT4ge1xuICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwYXRoUG9pbnRzLCBwb2ludCk7XG4gICAgcmV0dXJuIGRpc3RhbmNlIDw9IHN0cm9rZVdpZHRoICsgZXhwYW5kO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdExpbmVUZXh0SW5kZXggPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgdGV4dHMgPSBlbGVtZW50LnRleHRzO1xuICAgIGlmICghdGV4dHMubGVuZ3RoKSByZXR1cm4gLTE7XG5cbiAgICBjb25zdCBwb2ludHMgPSBnZXRFbGJvd1BvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgcmV0dXJuIHRleHRzLmZpbmRJbmRleCh0ZXh0ID0+IHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gZ2V0UG9pbnRPblBvbHlsaW5lKHBvaW50cywgdGV4dC5wb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IHtcbiAgICAgICAgICAgIHg6IGNlbnRlclswXSAtIHRleHQud2lkdGghIC8gMixcbiAgICAgICAgICAgIHk6IGNlbnRlclsxXSAtIHRleHQuaGVpZ2h0ISAvIDIsXG4gICAgICAgICAgICB3aWR0aDogdGV4dC53aWR0aCEsXG4gICAgICAgICAgICBoZWlnaHQ6IHRleHQuaGVpZ2h0IVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtwb2ludCwgcG9pbnRdKSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIaXRMaW5lVGV4dCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICByZXR1cm4gZ2V0SGl0TGluZVRleHRJbmRleChib2FyZCwgZWxlbWVudCwgcG9pbnQpICE9PSAtMTtcbn07XG5cbmV4cG9ydCBjb25zdCBkcmF3TGluZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lKSA9PiB7XG4gICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IGdldFN0cm9rZUNvbG9yQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IHN0cm9rZUxpbmVEYXNoID0gZ2V0TGluZURhc2hCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgc3Ryb2tlOiBzdHJva2VDb2xvciwgc3Ryb2tlV2lkdGgsIHN0cm9rZUxpbmVEYXNoIH07XG4gICAgY29uc3QgbGluZUcgPSBjcmVhdGVHKCk7XG4gICAgbGV0IHBvaW50cyA9IGdldExpbmVQb2ludHMoYm9hcmQsIGVsZW1lbnQpO1xuICAgIGxldCBsaW5lO1xuICAgIGlmIChlbGVtZW50LnNoYXBlID09PSBMaW5lU2hhcGUuY3VydmUpIHtcbiAgICAgICAgLy9UT0RPIGVsZW1lbnQucG9pbnRzIOW6lOS4uuabsue6v+aLkOeCuVxuICAgICAgICBsaW5lID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCkuY3VydmUocG9pbnRzLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lID0gZHJhd0xpbmVhclBhdGgocG9pbnRzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSBpZENyZWF0b3IoKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZSgnbWFzaycsIGB1cmwoIyR7aWR9KWApO1xuICAgIGxpbmVHLmFwcGVuZENoaWxkKGxpbmUpO1xuICAgIGNvbnN0IHsgbWFzaywgbWFza1RhcmdldEZpbGxSZWN0IH0gPSBkcmF3TWFzayhib2FyZCwgZWxlbWVudCwgaWQpO1xuICAgIGxpbmVHLmFwcGVuZENoaWxkKG1hc2spO1xuICAgIGxpbmUuYXBwZW5kQ2hpbGQobWFza1RhcmdldEZpbGxSZWN0KTtcbiAgICBjb25zdCBhcnJvdyA9IGRyYXdMaW5lQXJyb3coZWxlbWVudCwgcG9pbnRzLCB7IHN0cm9rZTogc3Ryb2tlQ29sb3IsIHN0cm9rZVdpZHRoIH0pO1xuICAgIGFycm93ICYmIGxpbmVHLmFwcGVuZENoaWxkKGFycm93KTtcbiAgICByZXR1cm4gbGluZUc7XG59O1xuXG5mdW5jdGlvbiBkcmF3TWFzayhib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWFzayA9IGNyZWF0ZU1hc2soKTtcbiAgICBtYXNrLnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7XG4gICAgY29uc3QgcG9pbnRzID0gZ2V0TGluZVBvaW50cyhib2FyZCwgZWxlbWVudCk7XG4gICAgbGV0IHJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cyk7XG4gICAgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldE91dGxpbmVSZWN0YW5nbGUocmVjdGFuZ2xlLCAtMzApO1xuICAgIGNvbnN0IG1hc2tGaWxsUmVjdCA9IGNyZWF0ZVJlY3QocmVjdGFuZ2xlLCB7XG4gICAgICAgIGZpbGw6ICd3aGl0ZSdcbiAgICB9KTtcbiAgICBtYXNrLmFwcGVuZENoaWxkKG1hc2tGaWxsUmVjdCk7XG5cbiAgICBjb25zdCB0ZXh0cyA9IGVsZW1lbnQudGV4dHM7XG4gICAgdGV4dHMuZm9yRWFjaCgodGV4dCwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IHRleHRSZWN0YW5nbGUgPSBnZXRMaW5lVGV4dFJlY3RhbmdsZShib2FyZCwgZWxlbWVudCwgaW5kZXgpO1xuICAgICAgICB0ZXh0UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUodGV4dFJlY3RhbmdsZSwgTElORV9URVhUX1NQQUNFICogMik7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBjcmVhdGVSZWN0KHRleHRSZWN0YW5nbGUsIHtcbiAgICAgICAgICAgIGZpbGw6ICdibGFjaydcbiAgICAgICAgfSk7XG4gICAgICAgIG1hc2suYXBwZW5kQ2hpbGQocmVjdCk7XG4gICAgfSk7XG4gICAgLy/mkpHlvIAgbGluZVxuICAgIGNvbnN0IG1hc2tUYXJnZXRGaWxsUmVjdCA9IGNyZWF0ZVJlY3QocmVjdGFuZ2xlKTtcbiAgICBtYXNrVGFyZ2V0RmlsbFJlY3Quc2V0QXR0cmlidXRlKCdvcGFjaXR5JywgJzAnKTtcbiAgICBtYXNrVGFyZ2V0RmlsbFJlY3Quc2V0QXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgICByZXR1cm4geyBtYXNrLCBtYXNrVGFyZ2V0RmlsbFJlY3QgfTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25Qb2ludCA9IChnZW9tZXRyeTogUGxhaXRHZW9tZXRyeSwgY29ubmVjdGlvbjogUG9pbnQsIGRpcmVjdGlvbj86IERpcmVjdGlvbiwgZGVsdGE/OiBudW1iZXIpOiBQb2ludCA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZ2VvbWV0cnkucG9pbnRzKTtcbiAgICBpZiAoZGlyZWN0aW9uICYmIGRlbHRhKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbkZhY3RvciA9IGdldERpcmVjdGlvbkZhY3RvcihkaXJlY3Rpb24pO1xuICAgICAgICBjb25zdCBwb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtwb2ludFswXSArIGRpcmVjdGlvbkZhY3Rvci54ICogZGVsdGEsIHBvaW50WzFdICsgZGlyZWN0aW9uRmFjdG9yLnkgKiBkZWx0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtUG9pbnRUb0Nvbm5lY3Rpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50OiBQb2ludCwgaGl0RWxlbWVudDogUGxhaXRHZW9tZXRyeSk6IFBvaW50ID0+IHtcbiAgICBsZXQgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlQb2ludHMoaGl0RWxlbWVudC5wb2ludHMpO1xuICAgIHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHJlY3RhbmdsZSwgQUNUSVZFX1NUUk9LRV9XSURUSCk7XG4gICAgbGV0IG5lYXJlc3RQb2ludCA9IGdldE5lYXJlc3RQb2ludChoaXRFbGVtZW50LCBwb2ludCwgQUNUSVZFX1NUUk9LRV9XSURUSCk7XG4gICAgY29uc3QgaGl0Q29ubmVjdG9yID0gZ2V0SGl0Q29ubmVjdG9yUG9pbnQobmVhcmVzdFBvaW50LCBoaXRFbGVtZW50LCByZWN0YW5nbGUpO1xuICAgIG5lYXJlc3RQb2ludCA9IGhpdENvbm5lY3RvciA/IGhpdENvbm5lY3RvciA6IG5lYXJlc3RQb2ludDtcbiAgICByZXR1cm4gWyhuZWFyZXN0UG9pbnRbMF0gLSByZWN0YW5nbGUueCkgLyByZWN0YW5nbGUud2lkdGgsIChuZWFyZXN0UG9pbnRbMV0gLSByZWN0YW5nbGUueSkgLyByZWN0YW5nbGUuaGVpZ2h0XTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRDb25uZWN0b3JQb2ludCA9IChtb3ZpbmdQb2ludDogUG9pbnQsIGhpdEVsZW1lbnQ6IFBsYWl0R2VvbWV0cnksIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3Qgc2hhcGUgPSBnZXRTaGFwZShoaXRFbGVtZW50KTtcbiAgICBjb25zdCBjb25uZWN0b3IgPSBnZXRFbmdpbmUoc2hhcGUpLmdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIGNvbnN0IHBvaW50cyA9IGdldFBvaW50c0J5Q2VudGVyUG9pbnQobW92aW5nUG9pbnQsIDUsIDUpO1xuICAgIGNvbnN0IHBvaW50UmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlQb2ludHMocG9pbnRzKTtcbiAgICByZXR1cm4gY29ubmVjdG9yLmZpbmQocG9pbnQgPT4ge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHBvaW50UmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQudG9SZWN0YW5nbGVDbGllbnQoW3BvaW50LCBwb2ludF0pKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMaW5lVGV4dFJlY3RhbmdsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBpbmRleDogbnVtYmVyKTogUmVjdGFuZ2xlQ2xpZW50ID0+IHtcbiAgICBjb25zdCB0ZXh0ID0gZWxlbWVudC50ZXh0c1tpbmRleF07XG4gICAgY29uc3QgZWxib3dQb2ludHMgPSBnZXRMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCBwb2ludCA9IGdldFBvaW50T25Qb2x5bGluZShlbGJvd1BvaW50cywgdGV4dC5wb3NpdGlvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcG9pbnRbMF0gLSB0ZXh0LndpZHRoISAvIDIsXG4gICAgICAgIHk6IHBvaW50WzFdIC0gdGV4dC5oZWlnaHQhIC8gMixcbiAgICAgICAgd2lkdGg6IHRleHQud2lkdGghLFxuICAgICAgICBoZWlnaHQ6IHRleHQuaGVpZ2h0IVxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Qm9hcmRMaW5lcyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiBmaW5kRWxlbWVudHMoYm9hcmQsIHtcbiAgICAgICAgbWF0Y2g6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKGVsZW1lbnQpLFxuICAgICAgICByZWN1cnNpb246IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudChlbGVtZW50KVxuICAgIH0pIGFzIFBsYWl0TGluZVtdO1xufTtcblxuLy8gcXVhZHJhdGljIEJlemllciB0byBjdWJpYyBCZXppZXJcbmV4cG9ydCBjb25zdCBRMkMgPSAocG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3QgbnVtU2VnbWVudHMgPSBwb2ludHMubGVuZ3RoIC8gMztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVNlZ21lbnRzOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IHFDb250cm9sID0gcG9pbnRzW2kgKyAxXTtcbiAgICAgICAgY29uc3QgZW5kID0gcG9pbnRzW2kgKyAyXTtcbiAgICAgICAgY29uc3Qgc3RhcnREaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4uc3RhcnQsIC4uLnFDb250cm9sKTtcbiAgICAgICAgY29uc3QgZW5kRGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLmVuZCwgLi4ucUNvbnRyb2wpO1xuICAgICAgICBjb25zdCBjQ29udHJvbDEgPSBnZXRFeHRlbmRQb2ludChzdGFydCwgcUNvbnRyb2wsIChzdGFydERpc3RhbmNlICogMikgLyAzKTtcbiAgICAgICAgY29uc3QgY0NvbnRyb2wyID0gZ2V0RXh0ZW5kUG9pbnQoZW5kLCBxQ29udHJvbCwgKGVuZERpc3RhbmNlICogMikgLyAzKTtcbiAgICAgICAgcmVzdWx0LnB1c2goc3RhcnQsIGNDb250cm9sMSwgY0NvbnRyb2wyLCBlbmQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZlY3RvckJ5Q29ubmVjdGlvbiA9IChib3VuZEVsZW1lbnQ6IFBsYWl0R2VvbWV0cnksIGNvbm5lY3Rpb246IFBvaW50T2ZSZWN0YW5nbGUpOiBWZWN0b3IgPT4ge1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5UG9pbnRzKGJvdW5kRWxlbWVudC5wb2ludHMpO1xuICAgIGNvbnN0IHNoYXBlID0gZ2V0U2hhcGUoYm91bmRFbGVtZW50KTtcbiAgICBjb25zdCBlbmdpbmUgPSBnZXRFbmdpbmUoc2hhcGUpO1xuICAgIGxldCB2ZWN0b3I6IFZlY3RvciA9IFswLCAwXTtcbiAgICBjb25zdCBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb25CeVBvaW50T2ZSZWN0YW5nbGUoY29ubmVjdGlvbik7XG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgICBjb25zdCBmYWN0b3IgPSBnZXREaXJlY3Rpb25GYWN0b3IoZGlyZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIFtmYWN0b3IueCwgZmFjdG9yLnldO1xuICAgIH1cbiAgICBpZiAoZW5naW5lLmdldEVkZ2VCeUNvbm5lY3Rpb25Qb2ludCkge1xuICAgICAgICBjb25zdCBlZGdlID0gZW5naW5lLmdldEVkZ2VCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGUsIGNvbm5lY3Rpb24pO1xuICAgICAgICBpZiAoZWRnZSkge1xuICAgICAgICAgICAgY29uc3QgbGluZVZlY3RvciA9IFtlZGdlWzFdWzBdIC0gZWRnZVswXVswXSwgZWRnZVsxXVsxXSAtIGVkZ2VbMF1bMV1dIGFzIFZlY3RvcjtcbiAgICAgICAgICAgIHJldHVybiByb3RhdGVWZWN0b3JBbnRpOTAobGluZVZlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuZ2luZS5nZXRUYW5nZW50VmVjdG9yQnlDb25uZWN0aW9uUG9pbnQpIHtcbiAgICAgICAgY29uc3QgbGluZVZlY3RvciA9IGVuZ2luZS5nZXRUYW5nZW50VmVjdG9yQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBjb25uZWN0aW9uKTtcbiAgICAgICAgaWYgKGxpbmVWZWN0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiByb3RhdGVWZWN0b3JBbnRpOTAobGluZVZlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZlY3Rvcjtcbn07XG4iXX0=