@pie-lib/graphing 2.34.3-next.2 → 2.34.4-next.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.
Files changed (252) hide show
  1. package/CHANGELOG.md +6 -76
  2. package/lib/__tests__/graph-with-controls.test.js +226 -0
  3. package/lib/__tests__/graph.test.js +187 -0
  4. package/lib/__tests__/grid.test.js +29 -0
  5. package/lib/__tests__/labels.test.js +61 -0
  6. package/lib/__tests__/mark-label.test.js +133 -0
  7. package/lib/__tests__/toggle-bar.test.js +150 -0
  8. package/lib/__tests__/tool-menu.test.js +101 -0
  9. package/lib/__tests__/undo-redo.test.js +31 -0
  10. package/lib/__tests__/use-debounce.test.js +24 -0
  11. package/lib/__tests__/utils.js +70 -0
  12. package/lib/__tests__/utils.test.js +123 -0
  13. package/lib/axis/__tests__/arrow.test.js +60 -0
  14. package/lib/axis/__tests__/axes.test.js +195 -0
  15. package/lib/axis/arrow.js +20 -56
  16. package/lib/axis/arrow.js.map +1 -1
  17. package/lib/axis/axes.js +107 -195
  18. package/lib/axis/axes.js.map +1 -1
  19. package/lib/axis/index.js +2 -7
  20. package/lib/axis/index.js.map +1 -1
  21. package/lib/bg.js +22 -50
  22. package/lib/bg.js.map +1 -1
  23. package/lib/container/actions.js +3 -9
  24. package/lib/container/actions.js.map +1 -1
  25. package/lib/container/index.js +15 -60
  26. package/lib/container/index.js.map +1 -1
  27. package/lib/container/marks.js +2 -7
  28. package/lib/container/marks.js.map +1 -1
  29. package/lib/container/middleware.js +3 -9
  30. package/lib/container/middleware.js.map +1 -1
  31. package/lib/container/reducer.js +2 -9
  32. package/lib/container/reducer.js.map +1 -1
  33. package/lib/coordinates-label.js +25 -55
  34. package/lib/coordinates-label.js.map +1 -1
  35. package/lib/graph-with-controls.js +121 -185
  36. package/lib/graph-with-controls.js.map +1 -1
  37. package/lib/graph.js +60 -117
  38. package/lib/graph.js.map +1 -1
  39. package/lib/grid-setup.js +169 -225
  40. package/lib/grid-setup.js.map +1 -1
  41. package/lib/grid.js +30 -75
  42. package/lib/grid.js.map +1 -1
  43. package/lib/index.js +2 -14
  44. package/lib/index.js.map +1 -1
  45. package/lib/key-legend.js +41 -86
  46. package/lib/key-legend.js.map +1 -1
  47. package/lib/label-svg-icon.js +2 -8
  48. package/lib/label-svg-icon.js.map +1 -1
  49. package/lib/labels.js +66 -122
  50. package/lib/labels.js.map +1 -1
  51. package/lib/mark-label.js +121 -164
  52. package/lib/mark-label.js.map +1 -1
  53. package/lib/toggle-bar.js +156 -244
  54. package/lib/toggle-bar.js.map +1 -1
  55. package/lib/tool-menu.js +17 -51
  56. package/lib/tool-menu.js.map +1 -1
  57. package/lib/tools/absolute/__tests__/component.test.js +67 -0
  58. package/lib/tools/absolute/component.js +5 -11
  59. package/lib/tools/absolute/component.js.map +1 -1
  60. package/lib/tools/absolute/index.js +4 -17
  61. package/lib/tools/absolute/index.js.map +1 -1
  62. package/lib/tools/circle/__tests__/bg-circle.test.js +33 -0
  63. package/lib/tools/circle/__tests__/component.test.js +68 -0
  64. package/lib/tools/circle/bg-circle.js +43 -93
  65. package/lib/tools/circle/bg-circle.js.map +1 -1
  66. package/lib/tools/circle/component.js +79 -166
  67. package/lib/tools/circle/component.js.map +1 -1
  68. package/lib/tools/circle/index.js +4 -14
  69. package/lib/tools/circle/index.js.map +1 -1
  70. package/lib/tools/exponential/__tests__/component.test.js +66 -0
  71. package/lib/tools/exponential/component.js +5 -11
  72. package/lib/tools/exponential/component.js.map +1 -1
  73. package/lib/tools/exponential/index.js +4 -19
  74. package/lib/tools/exponential/index.js.map +1 -1
  75. package/lib/tools/index.js +4 -17
  76. package/lib/tools/index.js.map +1 -1
  77. package/lib/tools/line/__tests__/component.test.js +45 -0
  78. package/lib/tools/line/component.js +28 -49
  79. package/lib/tools/line/component.js.map +1 -1
  80. package/lib/tools/line/index.js +2 -7
  81. package/lib/tools/line/index.js.map +1 -1
  82. package/lib/tools/parabola/__tests__/component.test.js +66 -0
  83. package/lib/tools/parabola/component.js +5 -11
  84. package/lib/tools/parabola/component.js.map +1 -1
  85. package/lib/tools/parabola/index.js +4 -17
  86. package/lib/tools/parabola/index.js.map +1 -1
  87. package/lib/tools/point/__tests__/component.test.js +50 -0
  88. package/lib/tools/point/component.js +25 -72
  89. package/lib/tools/point/component.js.map +1 -1
  90. package/lib/tools/point/index.js +4 -12
  91. package/lib/tools/point/index.js.map +1 -1
  92. package/lib/tools/polygon/__tests__/component.test.js +85 -0
  93. package/lib/tools/polygon/__tests__/index.test.js +92 -0
  94. package/lib/tools/polygon/__tests__/line.test.js +29 -0
  95. package/lib/tools/polygon/__tests__/polygon.test.js +59 -0
  96. package/lib/tools/polygon/component.js +84 -185
  97. package/lib/tools/polygon/component.js.map +1 -1
  98. package/lib/tools/polygon/index.js +7 -24
  99. package/lib/tools/polygon/index.js.map +1 -1
  100. package/lib/tools/polygon/line.js +49 -92
  101. package/lib/tools/polygon/line.js.map +1 -1
  102. package/lib/tools/polygon/polygon.js +66 -99
  103. package/lib/tools/polygon/polygon.js.map +1 -1
  104. package/lib/tools/ray/__tests__/component.test.js +35 -0
  105. package/lib/tools/ray/component.js +42 -61
  106. package/lib/tools/ray/component.js.map +1 -1
  107. package/lib/tools/ray/index.js +2 -7
  108. package/lib/tools/ray/index.js.map +1 -1
  109. package/lib/tools/segment/__tests__/component.test.js +35 -0
  110. package/lib/tools/segment/component.js +26 -44
  111. package/lib/tools/segment/component.js.map +1 -1
  112. package/lib/tools/segment/index.js +2 -7
  113. package/lib/tools/segment/index.js.map +1 -1
  114. package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
  115. package/lib/tools/shared/arrow-head.js +70 -29
  116. package/lib/tools/shared/arrow-head.js.map +1 -1
  117. package/lib/tools/shared/icons/CorrectSVG.js +13 -9
  118. package/lib/tools/shared/icons/CorrectSVG.js.map +1 -1
  119. package/lib/tools/shared/icons/IncorrectSVG.js +13 -9
  120. package/lib/tools/shared/icons/IncorrectSVG.js.map +1 -1
  121. package/lib/tools/shared/icons/MissingSVG.js +13 -9
  122. package/lib/tools/shared/icons/MissingSVG.js.map +1 -1
  123. package/lib/tools/shared/line/__tests__/index.test.js +124 -0
  124. package/lib/tools/shared/line/__tests__/line-path.test.js +62 -0
  125. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +91 -0
  126. package/lib/tools/shared/line/index.js +141 -194
  127. package/lib/tools/shared/line/index.js.map +1 -1
  128. package/lib/tools/shared/line/line-path.js +71 -102
  129. package/lib/tools/shared/line/line-path.js.map +1 -1
  130. package/lib/tools/shared/line/with-root-edge.js +23 -57
  131. package/lib/tools/shared/line/with-root-edge.js.map +1 -1
  132. package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
  133. package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
  134. package/lib/tools/shared/point/arrow-point.js +22 -63
  135. package/lib/tools/shared/point/arrow-point.js.map +1 -1
  136. package/lib/tools/shared/point/arrow.js +24 -53
  137. package/lib/tools/shared/point/arrow.js.map +1 -1
  138. package/lib/tools/shared/point/base-point.js +55 -73
  139. package/lib/tools/shared/point/base-point.js.map +1 -1
  140. package/lib/tools/shared/point/index.js +23 -58
  141. package/lib/tools/shared/point/index.js.map +1 -1
  142. package/lib/tools/shared/styles.js +11 -39
  143. package/lib/tools/shared/styles.js.map +1 -1
  144. package/lib/tools/shared/types.js +3 -10
  145. package/lib/tools/shared/types.js.map +1 -1
  146. package/lib/tools/sine/__tests__/component.test.js +72 -0
  147. package/lib/tools/sine/component.js +9 -20
  148. package/lib/tools/sine/component.js.map +1 -1
  149. package/lib/tools/sine/index.js +4 -17
  150. package/lib/tools/sine/index.js.map +1 -1
  151. package/lib/tools/vector/__tests__/component.test.js +32 -0
  152. package/lib/tools/vector/component.js +25 -45
  153. package/lib/tools/vector/component.js.map +1 -1
  154. package/lib/tools/vector/index.js +2 -7
  155. package/lib/tools/vector/index.js.map +1 -1
  156. package/lib/undo-redo.js +30 -70
  157. package/lib/undo-redo.js.map +1 -1
  158. package/lib/use-debounce.js +5 -12
  159. package/lib/use-debounce.js.map +1 -1
  160. package/lib/utils.js +52 -129
  161. package/lib/utils.js.map +1 -1
  162. package/package.json +25 -29
  163. package/src/__tests__/graph-with-controls.test.jsx +28 -11
  164. package/src/__tests__/graph.test.jsx +104 -168
  165. package/src/__tests__/grid.test.jsx +8 -6
  166. package/src/__tests__/labels.test.jsx +25 -8
  167. package/src/__tests__/mark-label.test.jsx +12 -17
  168. package/src/__tests__/toggle-bar.test.jsx +92 -17
  169. package/src/__tests__/tool-menu.test.jsx +61 -12
  170. package/src/__tests__/undo-redo.test.jsx +7 -8
  171. package/src/__tests__/utils.js +3 -0
  172. package/src/axis/__tests__/arrow.test.jsx +16 -17
  173. package/src/axis/__tests__/axes.test.jsx +118 -122
  174. package/src/axis/arrow.jsx +7 -12
  175. package/src/axis/axes.jsx +45 -55
  176. package/src/coordinates-label.jsx +14 -18
  177. package/src/graph-with-controls.jsx +52 -59
  178. package/src/grid-setup.jsx +210 -206
  179. package/src/grid.jsx +2 -4
  180. package/src/key-legend.jsx +52 -56
  181. package/src/labels.jsx +23 -30
  182. package/src/mark-label.jsx +92 -81
  183. package/src/toggle-bar.jsx +135 -164
  184. package/src/tool-menu.jsx +1 -1
  185. package/src/tools/circle/__tests__/bg-circle.test.jsx +7 -9
  186. package/src/tools/circle/__tests__/component.test.jsx +17 -189
  187. package/src/tools/circle/bg-circle.jsx +20 -28
  188. package/src/tools/circle/component.jsx +28 -63
  189. package/src/tools/line/__tests__/component.test.jsx +7 -7
  190. package/src/tools/line/component.jsx +22 -15
  191. package/src/tools/point/__tests__/component.test.jsx +18 -43
  192. package/src/tools/point/component.jsx +1 -1
  193. package/src/tools/polygon/__tests__/component.test.jsx +18 -162
  194. package/src/tools/polygon/__tests__/line.test.jsx +7 -10
  195. package/src/tools/polygon/__tests__/polygon.test.jsx +7 -8
  196. package/src/tools/polygon/component.jsx +3 -4
  197. package/src/tools/polygon/line.jsx +30 -33
  198. package/src/tools/polygon/polygon.jsx +52 -45
  199. package/src/tools/ray/__tests__/component.test.jsx +7 -8
  200. package/src/tools/ray/component.jsx +38 -25
  201. package/src/tools/segment/__tests__/component.test.jsx +7 -8
  202. package/src/tools/segment/component.jsx +19 -18
  203. package/src/tools/shared/__tests__/arrow-head.test.jsx +14 -17
  204. package/src/tools/shared/arrow-head.jsx +60 -7
  205. package/src/tools/shared/icons/CorrectSVG.jsx +10 -0
  206. package/src/tools/shared/icons/IncorrectSVG.jsx +10 -0
  207. package/src/tools/shared/icons/MissingSVG.jsx +10 -0
  208. package/src/tools/shared/line/__tests__/index.test.jsx +19 -165
  209. package/src/tools/shared/line/__tests__/line-path.test.jsx +8 -8
  210. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +22 -22
  211. package/src/tools/shared/line/index.jsx +52 -7
  212. package/src/tools/shared/line/line-path.jsx +55 -59
  213. package/src/tools/shared/line/with-root-edge.jsx +1 -1
  214. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +15 -11
  215. package/src/tools/shared/point/__tests__/base-point.test.jsx +14 -11
  216. package/src/tools/shared/point/arrow-point.jsx +10 -24
  217. package/src/tools/shared/point/arrow.jsx +5 -11
  218. package/src/tools/shared/point/base-point.jsx +42 -19
  219. package/src/tools/shared/point/index.jsx +27 -44
  220. package/src/tools/vector/__tests__/component.test.jsx +7 -8
  221. package/src/tools/vector/component.jsx +11 -16
  222. package/src/undo-redo.jsx +19 -21
  223. package/esm/index.css +0 -847
  224. package/esm/index.js +0 -239949
  225. package/esm/index.js.map +0 -1
  226. package/esm/package.json +0 -3
  227. package/src/__tests__/__snapshots__/graph-with-controls.test.jsx.snap +0 -237
  228. package/src/__tests__/__snapshots__/graph.test.jsx.snap +0 -211
  229. package/src/__tests__/__snapshots__/grid.test.jsx.snap +0 -54
  230. package/src/__tests__/__snapshots__/labels.test.jsx.snap +0 -30
  231. package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +0 -45
  232. package/src/__tests__/__snapshots__/toggle-bar.test.jsx.snap +0 -7
  233. package/src/__tests__/__snapshots__/tool-menu.test.jsx.snap +0 -13
  234. package/src/__tests__/__snapshots__/undo-redo.test.jsx.snap +0 -14
  235. package/src/axis/__tests__/__snapshots__/arrow.test.jsx.snap +0 -33
  236. package/src/axis/__tests__/__snapshots__/axes.test.jsx.snap +0 -122
  237. package/src/tools/circle/__tests__/__snapshots__/bg-circle.test.jsx.snap +0 -46
  238. package/src/tools/circle/__tests__/__snapshots__/component.test.jsx.snap +0 -293
  239. package/src/tools/line/__tests__/__snapshots__/component.test.jsx.snap +0 -20
  240. package/src/tools/point/__tests__/__snapshots__/component.test.jsx.snap +0 -40
  241. package/src/tools/polygon/__tests__/__snapshots__/component.test.jsx.snap +0 -415
  242. package/src/tools/polygon/__tests__/__snapshots__/line.test.jsx.snap +0 -45
  243. package/src/tools/polygon/__tests__/__snapshots__/polygon.test.jsx.snap +0 -52
  244. package/src/tools/ray/__tests__/__snapshots__/component.test.jsx.snap +0 -23
  245. package/src/tools/segment/__tests__/__snapshots__/component.test.jsx.snap +0 -14
  246. package/src/tools/shared/__tests__/__snapshots__/arrow-head.test.jsx.snap +0 -27
  247. package/src/tools/shared/line/__tests__/__snapshots__/index.test.jsx.snap +0 -360
  248. package/src/tools/shared/line/__tests__/__snapshots__/line-path.test.jsx.snap +0 -58
  249. package/src/tools/shared/line/__tests__/__snapshots__/with-root-edge.test.jsx.snap +0 -63
  250. package/src/tools/shared/point/__tests__/__snapshots__/arrow-point.test.jsx.snap +0 -56
  251. package/src/tools/shared/point/__tests__/__snapshots__/base-point.test.jsx.snap +0 -44
  252. package/src/tools/vector/__tests__/__snapshots__/component.test.jsx.snap +0 -12
@@ -1,81 +1,42 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports.swap = exports["default"] = exports.buildLines = exports.RawBaseComponent = exports.BaseComponent = void 0;
11
-
12
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
19
-
20
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
-
22
12
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
-
24
13
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
-
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
26
15
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
27
-
28
16
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
29
-
30
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
31
-
32
18
  var _react = _interopRequireDefault(require("react"));
33
-
34
19
  var _propTypes = _interopRequireDefault(require("prop-types"));
35
-
36
- var _styles = require("@material-ui/core/styles");
37
-
38
20
  var _types = require("../shared/types");
39
-
40
21
  var _point = require("../shared/point");
41
-
42
22
  var _chunk = _interopRequireDefault(require("lodash/chunk"));
43
-
44
23
  var _initial = _interopRequireDefault(require("lodash/initial"));
45
-
46
24
  var _debug = _interopRequireDefault(require("debug"));
47
-
48
25
  var _line = _interopRequireDefault(require("./line"));
49
-
50
26
  var _polygon = _interopRequireWildcard(require("./polygon"));
51
-
52
27
  var _plot = require("@pie-lib/plot");
53
-
54
28
  var _invariant = _interopRequireDefault(require("invariant"));
55
-
56
29
  var _reactDom = _interopRequireDefault(require("react-dom"));
57
-
58
30
  var _markLabel = _interopRequireDefault(require("../../mark-label"));
59
-
60
31
  var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
61
-
62
32
  var _utils = require("../../utils");
63
-
64
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
65
-
66
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
67
-
68
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
69
-
70
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
71
-
72
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
73
-
74
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
75
-
33
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
34
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
35
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
36
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
37
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
76
38
  var log = (0, _debug["default"])('pie-lib:graphing:polygon');
77
-
78
- var buildLines = function buildLines(points, closed) {
39
+ var buildLines = exports.buildLines = function buildLines(points, closed) {
79
40
  var expanded = points.reduce(function (acc, p, index) {
80
41
  acc.push(_objectSpread(_objectSpread({}, p), {}, {
81
42
  index: index
@@ -89,9 +50,8 @@ var buildLines = function buildLines(points, closed) {
89
50
  }, []);
90
51
  var all = (0, _chunk["default"])(expanded, 2).map(function (_ref) {
91
52
  var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
92
- from = _ref2[0],
93
- to = _ref2[1];
94
-
53
+ from = _ref2[0],
54
+ to = _ref2[1];
95
55
  return {
96
56
  from: from,
97
57
  to: to
@@ -99,23 +59,19 @@ var buildLines = function buildLines(points, closed) {
99
59
  });
100
60
  return closed ? all : (0, _initial["default"])(all);
101
61
  };
102
-
103
- exports.buildLines = buildLines;
104
-
105
- var swap = function swap(arr) {
62
+ var swap = exports.swap = function swap(arr) {
106
63
  for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
107
64
  rest[_key - 1] = arguments[_key];
108
65
  }
109
-
110
66
  var pairs = (0, _chunk["default"])(rest, 2);
111
67
  return pairs.reduce(function (acc, pr) {
112
68
  if (pr.length === 2) {
113
69
  var _pr = (0, _slicedToArray2["default"])(pr, 2),
114
- e = _pr[0],
115
- replacement = _pr[1];
116
-
70
+ e = _pr[0],
71
+ replacement = _pr[1];
117
72
  (0, _invariant["default"])(Number.isFinite(e.index), 'Index must be defined');
118
- var index = e.index; // const i = acc.findIndex(pt => pt.x === e.x && pt.y === e.y);
73
+ var index = e.index;
74
+ // const i = acc.findIndex(pt => pt.x === e.x && pt.y === e.y);
119
75
 
120
76
  if (index >= 0) {
121
77
  acc.splice(index, 1, replacement);
@@ -128,61 +84,45 @@ var swap = function swap(arr) {
128
84
  }
129
85
  }, (0, _toConsumableArray2["default"])(arr));
130
86
  };
131
-
132
- exports.swap = swap;
133
-
134
- var RawBaseComponent = /*#__PURE__*/function (_React$Component) {
135
- (0, _inherits2["default"])(RawBaseComponent, _React$Component);
136
-
137
- var _super = _createSuper(RawBaseComponent);
138
-
87
+ var RawBaseComponent = exports.RawBaseComponent = /*#__PURE__*/function (_React$Component) {
139
88
  function RawBaseComponent() {
140
89
  var _this;
141
-
142
90
  (0, _classCallCheck2["default"])(this, RawBaseComponent);
143
-
144
91
  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
145
92
  args[_key2] = arguments[_key2];
146
93
  }
147
-
148
- _this = _super.call.apply(_super, [this].concat(args));
149
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragPoint", function (index, from, to) {
94
+ _this = _callSuper(this, RawBaseComponent, [].concat(args));
95
+ (0, _defineProperty2["default"])(_this, "dragPoint", function (index, from, to) {
150
96
  log('[dragPoint] from, to:', from, to);
151
97
  var _this$props = _this.props,
152
- onChange = _this$props.onChange,
153
- points = _this$props.points;
98
+ onChange = _this$props.onChange,
99
+ points = _this$props.points;
154
100
  var update = (0, _toConsumableArray2["default"])(points);
155
101
  var overlapPoint = !!(points || []).find(function (p) {
156
102
  return (0, _utils.equalPoints)(p, to);
157
103
  });
158
-
159
104
  if ((0, _utils.equalPoints)(from, to) || overlapPoint) {
160
105
  return;
161
106
  }
162
-
163
107
  if (points[index].label) {
164
108
  to.label = points[index].label;
165
109
  }
166
-
167
110
  update.splice(index, 1, to);
168
111
  onChange(update);
169
112
  });
170
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragLine", function (existing, next) {
113
+ (0, _defineProperty2["default"])(_this, "dragLine", function (existing, next) {
171
114
  log('[dragLine]: ', existing, next);
172
115
  var onChange = _this.props.onChange;
173
-
174
116
  if (existing.from.label) {
175
117
  next.from.label = existing.from.label;
176
118
  }
177
-
178
119
  if (existing.to.label) {
179
120
  next.to.label = existing.to.label;
180
121
  }
181
-
182
122
  var points = swap(_this.props.points, existing.from, next.from, existing.to, next.to);
183
123
  onChange(points);
184
124
  });
185
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragPoly", function (existing, next) {
125
+ (0, _defineProperty2["default"])(_this, "dragPoly", function (existing, next) {
186
126
  log('[dragPoly] ', existing, next);
187
127
  var onChange = _this.props.onChange;
188
128
  next.forEach(function (point, index) {
@@ -192,60 +132,52 @@ var RawBaseComponent = /*#__PURE__*/function (_React$Component) {
192
132
  });
193
133
  onChange(next);
194
134
  });
195
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "close", function () {
135
+ (0, _defineProperty2["default"])(_this, "close", function () {
196
136
  var _this$props2 = _this.props,
197
- points = _this$props2.points,
198
- onClosePolygon = _this$props2.onClosePolygon;
137
+ points = _this$props2.points,
138
+ onClosePolygon = _this$props2.onClosePolygon;
199
139
  log('[close] ...');
200
-
201
140
  if (points.length >= 3) {
202
141
  onClosePolygon();
203
142
  } else {
204
143
  log('[close] - nope');
205
144
  }
206
145
  });
207
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "labelChange", function (point, index) {
146
+ (0, _defineProperty2["default"])(_this, "labelChange", function (point, index) {
208
147
  var _this$props3 = _this.props,
209
- points = _this$props3.points,
210
- onChangeProps = _this$props3.onChangeProps;
211
-
148
+ points = _this$props3.points,
149
+ onChangeProps = _this$props3.onChangeProps;
212
150
  var updatedPoint = _objectSpread({}, point);
213
-
214
151
  if (!point.label || (0, _isEmpty["default"])(point.label)) {
215
152
  delete updatedPoint.label;
216
153
  }
217
-
218
154
  var update = (0, _toConsumableArray2["default"])(points);
219
155
  update.splice(index, 1, updatedPoint);
220
156
  onChangeProps(update);
221
157
  });
222
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "clickPoint", function (point, index, data) {
158
+ (0, _defineProperty2["default"])(_this, "clickPoint", function (point, index, data) {
223
159
  var _this$props4 = _this.props,
224
- closed = _this$props4.closed,
225
- disabled = _this$props4.disabled,
226
- onClick = _this$props4.onClick,
227
- isToolActive = _this$props4.isToolActive,
228
- labelModeEnabled = _this$props4.labelModeEnabled,
229
- limitLabeling = _this$props4.limitLabeling,
230
- onChangeProps = _this$props4.onChangeProps,
231
- onChangeLabelProps = _this$props4.onChangeLabelProps,
232
- points = _this$props4.points;
233
-
160
+ closed = _this$props4.closed,
161
+ disabled = _this$props4.disabled,
162
+ onClick = _this$props4.onClick,
163
+ isToolActive = _this$props4.isToolActive,
164
+ labelModeEnabled = _this$props4.labelModeEnabled,
165
+ limitLabeling = _this$props4.limitLabeling,
166
+ onChangeProps = _this$props4.onChangeProps,
167
+ onChangeLabelProps = _this$props4.onChangeLabelProps,
168
+ points = _this$props4.points;
234
169
  if (labelModeEnabled) {
235
170
  // limit labeling the points of the polygon
236
171
  if (disabled || limitLabeling) {
237
172
  return;
238
173
  }
239
-
240
174
  if (points && index === points.length) {
241
175
  var _getRightestPoints = (0, _utils.getRightestPoints)(points),
242
- a = _getRightestPoints.a,
243
- b = _getRightestPoints.b;
244
-
176
+ a = _getRightestPoints.a,
177
+ b = _getRightestPoints.b;
245
178
  var middle = _objectSpread(_objectSpread({
246
179
  label: ''
247
180
  }, point), (0, _utils.getMiddleOfTwoPoints)(a, b));
248
-
249
181
  onChangeLabelProps(middle);
250
182
  } else {
251
183
  var update = (0, _toConsumableArray2["default"])(points);
@@ -254,44 +186,39 @@ var RawBaseComponent = /*#__PURE__*/function (_React$Component) {
254
186
  }, point));
255
187
  onChangeProps(update);
256
188
  }
257
-
258
189
  if (_this.input[index]) {
259
190
  _this.input[index].focus();
260
191
  }
261
-
262
192
  return;
263
193
  }
264
-
265
194
  if (isToolActive && !closed && index === 0) {
266
195
  _this.close();
267
-
268
196
  return;
269
197
  }
270
-
271
198
  onClick(point || data);
272
199
  });
273
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "input", {});
200
+ // IMPORTANT, do not remove
201
+ (0, _defineProperty2["default"])(_this, "input", {});
274
202
  return _this;
275
203
  }
276
-
277
- (0, _createClass2["default"])(RawBaseComponent, [{
204
+ (0, _inherits2["default"])(RawBaseComponent, _React$Component);
205
+ return (0, _createClass2["default"])(RawBaseComponent, [{
278
206
  key: "render",
279
207
  value: function render() {
280
208
  var _this2 = this;
281
-
282
209
  var _this$props5 = this.props,
283
- closed = _this$props5.closed,
284
- coordinatesOnHover = _this$props5.coordinatesOnHover,
285
- correctness = _this$props5.correctness,
286
- disabled = _this$props5.disabled,
287
- graphProps = _this$props5.graphProps,
288
- onChangeLabelProps = _this$props5.onChangeLabelProps,
289
- onDragStart = _this$props5.onDragStart,
290
- onDragStop = _this$props5.onDragStop,
291
- points = _this$props5.points,
292
- middle = _this$props5.middle,
293
- labelNode = _this$props5.labelNode,
294
- labelModeEnabled = _this$props5.labelModeEnabled;
210
+ closed = _this$props5.closed,
211
+ coordinatesOnHover = _this$props5.coordinatesOnHover,
212
+ correctness = _this$props5.correctness,
213
+ disabled = _this$props5.disabled,
214
+ graphProps = _this$props5.graphProps,
215
+ onChangeLabelProps = _this$props5.onChangeLabelProps,
216
+ onDragStart = _this$props5.onDragStart,
217
+ onDragStop = _this$props5.onDragStop,
218
+ points = _this$props5.points,
219
+ middle = _this$props5.middle,
220
+ labelNode = _this$props5.labelNode,
221
+ labelModeEnabled = _this$props5.labelModeEnabled;
295
222
  var lines = buildLines(points, closed);
296
223
  var common = {
297
224
  onDragStart: onDragStart,
@@ -302,9 +229,8 @@ var RawBaseComponent = /*#__PURE__*/function (_React$Component) {
302
229
  };
303
230
  var polygonLabelIndex = points && points.length || 0;
304
231
  var polygonLabelNode = null;
305
-
306
- if (labelNode && middle && middle.hasOwnProperty('label')) {
307
- polygonLabelNode = /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
232
+ if (labelNode && middle && Object.prototype.hasOwnProperty.call(middle, 'label')) {
233
+ polygonLabelNode = /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
308
234
  inputRef: function inputRef(r) {
309
235
  return _this2.input[polygonLabelIndex] = r;
310
236
  },
@@ -318,7 +244,6 @@ var RawBaseComponent = /*#__PURE__*/function (_React$Component) {
318
244
  }
319
245
  }), labelNode);
320
246
  }
321
-
322
247
  return /*#__PURE__*/_react["default"].createElement("g", null, closed ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_polygon["default"], (0, _extends2["default"])({
323
248
  points: points,
324
249
  onDrag: this.dragPoly.bind(this, points),
@@ -348,7 +273,7 @@ var RawBaseComponent = /*#__PURE__*/function (_React$Component) {
348
273
  onDrag: _this2.dragPoint.bind(_this2, index, p)
349
274
  }, common, {
350
275
  onClick: _this2.clickPoint.bind(_this2, p, index)
351
- })), labelNode && p.hasOwnProperty('label') ? /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
276
+ })), labelNode && Object.prototype.hasOwnProperty.call(p, 'label') ? /*#__PURE__*/_reactDom["default"].createPortal(/*#__PURE__*/_react["default"].createElement(_markLabel["default"], {
352
277
  inputRef: function inputRef(r) {
353
278
  return _this2.input[index] = r;
354
279
  },
@@ -364,10 +289,7 @@ var RawBaseComponent = /*#__PURE__*/function (_React$Component) {
364
289
  }));
365
290
  }
366
291
  }]);
367
- return RawBaseComponent;
368
292
  }(_react["default"].Component);
369
-
370
- exports.RawBaseComponent = RawBaseComponent;
371
293
  (0, _defineProperty2["default"])(RawBaseComponent, "propTypes", {
372
294
  classes: _propTypes["default"].object,
373
295
  className: _propTypes["default"].string,
@@ -393,80 +315,60 @@ exports.RawBaseComponent = RawBaseComponent;
393
315
  (0, _defineProperty2["default"])(RawBaseComponent, "defaultProps", {
394
316
  points: []
395
317
  });
396
- var BaseComponent = (0, _styles.withStyles)(function () {
397
- return {};
398
- })(RawBaseComponent);
399
- exports.BaseComponent = BaseComponent;
400
-
401
- var Component = /*#__PURE__*/function (_React$Component2) {
402
- (0, _inherits2["default"])(Component, _React$Component2);
403
-
404
- var _super2 = _createSuper(Component);
405
-
318
+ var BaseComponent = exports.BaseComponent = RawBaseComponent;
319
+ var Component = exports["default"] = /*#__PURE__*/function (_React$Component2) {
406
320
  function Component(props) {
407
321
  var _this3;
408
-
409
322
  (0, _classCallCheck2["default"])(this, Component);
410
- _this3 = _super2.call(this, props);
411
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "change", function (points) {
323
+ _this3 = _callSuper(this, Component, [props]);
324
+ (0, _defineProperty2["default"])(_this3, "change", function (points) {
412
325
  var middle = _this3.props.mark.middle;
413
-
414
326
  var mark = _objectSpread(_objectSpread({}, _this3.state.mark), {}, {
415
327
  points: points
416
328
  });
417
-
418
329
  if (middle) {
419
330
  var _getRightestPoints2 = (0, _utils.getRightestPoints)(points),
420
- a = _getRightestPoints2.a,
421
- b = _getRightestPoints2.b;
422
-
331
+ a = _getRightestPoints2.a,
332
+ b = _getRightestPoints2.b;
423
333
  mark.middle = _objectSpread(_objectSpread({}, middle), (0, _utils.getMiddleOfTwoPoints)(a, b));
424
334
  }
425
-
426
335
  _this3.setState({
427
336
  mark: mark
428
337
  });
429
338
  });
430
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "changeProps", function (points) {
339
+ (0, _defineProperty2["default"])(_this3, "changeProps", function (points) {
431
340
  var mark = _objectSpread(_objectSpread({}, _this3.props.mark), {}, {
432
341
  points: points
433
342
  });
434
-
435
343
  _this3.props.onChange(_this3.props.mark, mark);
436
344
  });
437
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "changeLabelProps", function (point) {
345
+ (0, _defineProperty2["default"])(_this3, "changeLabelProps", function (point) {
438
346
  var _this3$props = _this3.props,
439
- mark = _this3$props.mark,
440
- onChange = _this3$props.onChange;
441
-
347
+ mark = _this3$props.mark,
348
+ onChange = _this3$props.onChange;
442
349
  var middle = _objectSpread(_objectSpread({}, mark.middle), point);
443
-
444
350
  onChange(mark, _objectSpread(_objectSpread({}, mark), {}, {
445
351
  middle: middle
446
352
  }));
447
353
  });
448
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "closePolygon", function () {
354
+ (0, _defineProperty2["default"])(_this3, "closePolygon", function () {
449
355
  log('[closePolygon] ...');
450
356
  var _this3$props2 = _this3.props,
451
- onComplete = _this3$props2.onComplete,
452
- mark = _this3$props2.mark;
453
-
357
+ onComplete = _this3$props2.onComplete,
358
+ mark = _this3$props2.mark;
454
359
  var update = _objectSpread(_objectSpread({}, mark), {}, {
455
360
  closed: true
456
361
  });
457
-
458
362
  onComplete(mark, update);
459
363
  });
460
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "dragStart", function () {
364
+ (0, _defineProperty2["default"])(_this3, "dragStart", function () {
461
365
  return _this3.setState({
462
366
  mark: _this3.props.mark
463
367
  });
464
368
  });
465
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this3), "dragStop", function () {
369
+ (0, _defineProperty2["default"])(_this3, "dragStop", function () {
466
370
  var onChange = _this3.props.onChange;
467
-
468
371
  var m = _objectSpread({}, _this3.state.mark);
469
-
470
372
  _this3.setState({
471
373
  mark: undefined
472
374
  }, function () {
@@ -476,19 +378,19 @@ var Component = /*#__PURE__*/function (_React$Component2) {
476
378
  _this3.state = {};
477
379
  return _this3;
478
380
  }
479
-
480
- (0, _createClass2["default"])(Component, [{
381
+ (0, _inherits2["default"])(Component, _React$Component2);
382
+ return (0, _createClass2["default"])(Component, [{
481
383
  key: "render",
482
384
  value: function render() {
483
385
  var _this$props6 = this.props,
484
- coordinatesOnHover = _this$props6.coordinatesOnHover,
485
- mark = _this$props6.mark,
486
- graphProps = _this$props6.graphProps,
487
- onClick = _this$props6.onClick,
488
- isToolActive = _this$props6.isToolActive,
489
- labelNode = _this$props6.labelNode,
490
- labelModeEnabled = _this$props6.labelModeEnabled,
491
- limitLabeling = _this$props6.limitLabeling;
386
+ coordinatesOnHover = _this$props6.coordinatesOnHover,
387
+ mark = _this$props6.mark,
388
+ graphProps = _this$props6.graphProps,
389
+ onClick = _this$props6.onClick,
390
+ isToolActive = _this$props6.isToolActive,
391
+ labelNode = _this$props6.labelNode,
392
+ labelModeEnabled = _this$props6.labelModeEnabled,
393
+ limitLabeling = _this$props6.limitLabeling;
492
394
  var stateMark = this.state.mark;
493
395
  return /*#__PURE__*/_react["default"].createElement(BaseComponent, (0, _extends2["default"])({}, stateMark || mark, {
494
396
  coordinatesOnHover: coordinatesOnHover,
@@ -507,12 +409,9 @@ var Component = /*#__PURE__*/function (_React$Component2) {
507
409
  }));
508
410
  }
509
411
  }]);
510
- return Component;
511
412
  }(_react["default"].Component);
512
-
513
- exports["default"] = Component;
514
413
  (0, _defineProperty2["default"])(Component, "propTypes", _objectSpread(_objectSpread({}, _types.ToolPropTypeFields), {}, {
515
414
  graphProps: _plot.types.GraphPropsType.isRequired
516
415
  }));
517
416
  (0, _defineProperty2["default"])(Component, "defaultProps", {});
518
- //# sourceMappingURL=component.js.map
417
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfdHlwZXMiLCJfcG9pbnQiLCJfY2h1bmsiLCJfaW5pdGlhbCIsIl9kZWJ1ZyIsIl9saW5lIiwiX3BvbHlnb24iLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9wbG90IiwiX2ludmFyaWFudCIsIl9yZWFjdERvbSIsIl9tYXJrTGFiZWwiLCJfaXNFbXB0eSIsIl91dGlscyIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImxvZyIsImRlYnVnIiwiYnVpbGRMaW5lcyIsImV4cG9ydHMiLCJwb2ludHMiLCJjbG9zZWQiLCJleHBhbmRlZCIsInJlZHVjZSIsImFjYyIsInAiLCJpbmRleCIsImlzTGFzdCIsIm5leHQiLCJhbGwiLCJjaHVuayIsIm1hcCIsIl9yZWYiLCJfcmVmMiIsIl9zbGljZWRUb0FycmF5MiIsImZyb20iLCJ0byIsImluaXRpYWwiLCJzd2FwIiwiYXJyIiwiX2xlbiIsInJlc3QiLCJBcnJheSIsIl9rZXkiLCJwYWlycyIsInByIiwiX3ByIiwicmVwbGFjZW1lbnQiLCJpbnZhcmlhbnQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInNwbGljZSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJSYXdCYXNlQ29tcG9uZW50IiwiX1JlYWN0JENvbXBvbmVudCIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4yIiwiYXJncyIsIl9rZXkyIiwiY29uY2F0IiwiX3RoaXMkcHJvcHMiLCJwcm9wcyIsIm9uQ2hhbmdlIiwidXBkYXRlIiwib3ZlcmxhcFBvaW50IiwiZmluZCIsImVxdWFsUG9pbnRzIiwibGFiZWwiLCJleGlzdGluZyIsInBvaW50IiwiX3RoaXMkcHJvcHMyIiwib25DbG9zZVBvbHlnb24iLCJfdGhpcyRwcm9wczMiLCJvbkNoYW5nZVByb3BzIiwidXBkYXRlZFBvaW50IiwiaXNFbXB0eSIsImRhdGEiLCJfdGhpcyRwcm9wczQiLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJpc1Rvb2xBY3RpdmUiLCJsYWJlbE1vZGVFbmFibGVkIiwibGltaXRMYWJlbGluZyIsIm9uQ2hhbmdlTGFiZWxQcm9wcyIsIl9nZXRSaWdodGVzdFBvaW50cyIsImdldFJpZ2h0ZXN0UG9pbnRzIiwiYSIsImIiLCJtaWRkbGUiLCJnZXRNaWRkbGVPZlR3b1BvaW50cyIsImlucHV0IiwiZm9jdXMiLCJjbG9zZSIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJyZW5kZXIiLCJfdGhpczIiLCJfdGhpcyRwcm9wczUiLCJjb29yZGluYXRlc09uSG92ZXIiLCJjb3JyZWN0bmVzcyIsImdyYXBoUHJvcHMiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ1N0b3AiLCJsYWJlbE5vZGUiLCJsaW5lcyIsImNvbW1vbiIsInBvbHlnb25MYWJlbEluZGV4IiwicG9seWdvbkxhYmVsTm9kZSIsIlJlYWN0RE9NIiwiY3JlYXRlUG9ydGFsIiwiY3JlYXRlRWxlbWVudCIsImlucHV0UmVmIiwibWFyayIsIkZyYWdtZW50IiwiX2V4dGVuZHMyIiwib25EcmFnIiwiZHJhZ1BvbHkiLCJiaW5kIiwiY2xpY2tQb2ludCIsIlBvbHlnb24iLCJsIiwiZHJhZ0xpbmUiLCJCYXNlUG9pbnQiLCJ4IiwieSIsImRyYWdQb2ludCIsImxhYmVsQ2hhbmdlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjbGFzc2VzIiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiY2xhc3NOYW1lIiwic3RyaW5nIiwiYm9vbCIsImFycmF5T2YiLCJ0eXBlcyIsIlBvaW50VHlwZSIsImZ1bmMiLCJpc1JlcXVpcmVkIiwiR3JhcGhQcm9wc1R5cGUiLCJCYXNlQ29tcG9uZW50IiwiX1JlYWN0JENvbXBvbmVudDIiLCJfdGhpczMiLCJzdGF0ZSIsIl9nZXRSaWdodGVzdFBvaW50czIiLCJzZXRTdGF0ZSIsIl90aGlzMyRwcm9wcyIsIl90aGlzMyRwcm9wczIiLCJvbkNvbXBsZXRlIiwibSIsInVuZGVmaW5lZCIsIl90aGlzJHByb3BzNiIsInN0YXRlTWFyayIsImNoYW5nZSIsImNoYW5nZUxhYmVsUHJvcHMiLCJjaGFuZ2VQcm9wcyIsImNsb3NlUG9seWdvbiIsImRyYWdTdGFydCIsImRyYWdTdG9wIiwiVG9vbFByb3BUeXBlRmllbGRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xzL3BvbHlnb24vY29tcG9uZW50LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRvb2xQcm9wVHlwZUZpZWxkcyB9IGZyb20gJy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBCYXNlUG9pbnQgfSBmcm9tICcuLi9zaGFyZWQvcG9pbnQnO1xuaW1wb3J0IGNodW5rIGZyb20gJ2xvZGFzaC9jaHVuayc7XG5pbXBvcnQgaW5pdGlhbCBmcm9tICdsb2Rhc2gvaW5pdGlhbCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IExpbmUgZnJvbSAnLi9saW5lJztcbmltcG9ydCBEcmFnZ2FibGVQb2x5Z29uLCB7IFBvbHlnb24gfSBmcm9tICcuL3BvbHlnb24nO1xuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdAcGllLWxpYi9wbG90JztcbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IE1hcmtMYWJlbCBmcm9tICcuLi8uLi9tYXJrLWxhYmVsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB7IGdldE1pZGRsZU9mVHdvUG9pbnRzLCBnZXRSaWdodGVzdFBvaW50cywgZXF1YWxQb2ludHMgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOmdyYXBoaW5nOnBvbHlnb24nKTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkTGluZXMgPSAocG9pbnRzLCBjbG9zZWQpID0+IHtcbiAgY29uc3QgZXhwYW5kZWQgPSBwb2ludHMucmVkdWNlKChhY2MsIHAsIGluZGV4KSA9PiB7XG4gICAgYWNjLnB1c2goeyAuLi5wLCBpbmRleCB9KTtcblxuICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBwb2ludHMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBuZXh0ID0gaXNMYXN0ID8gMCA6IGluZGV4ICsgMTtcblxuICAgIGFjYy5wdXNoKHsgLi4ucG9pbnRzW25leHRdLCBpbmRleDogbmV4dCB9KTtcblxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcblxuICBjb25zdCBhbGwgPSBjaHVuayhleHBhbmRlZCwgMikubWFwKChbZnJvbSwgdG9dKSA9PiB7XG4gICAgcmV0dXJuIHsgZnJvbSwgdG8gfTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNsb3NlZCA/IGFsbCA6IGluaXRpYWwoYWxsKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzd2FwID0gKGFyciwgLi4ucmVzdCkgPT4ge1xuICBjb25zdCBwYWlycyA9IGNodW5rKHJlc3QsIDIpO1xuXG4gIHJldHVybiBwYWlycy5yZWR1Y2UoXG4gICAgKGFjYywgcHIpID0+IHtcbiAgICAgIGlmIChwci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgbGV0IFtlLCByZXBsYWNlbWVudF0gPSBwcjtcblxuICAgICAgICBpbnZhcmlhbnQoTnVtYmVyLmlzRmluaXRlKGUuaW5kZXgpLCAnSW5kZXggbXVzdCBiZSBkZWZpbmVkJyk7XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBlLmluZGV4O1xuICAgICAgICAvLyBjb25zdCBpID0gYWNjLmZpbmRJbmRleChwdCA9PiBwdC54ID09PSBlLnggJiYgcHQueSA9PT0gZS55KTtcblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGFjYy5zcGxpY2UoaW5kZXgsIDEsIHJlcGxhY2VtZW50KTtcblxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH1cbiAgICB9LFxuICAgIFsuLi5hcnJdLFxuICApO1xufTtcblxuZXhwb3J0IGNsYXNzIFJhd0Jhc2VDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb3JyZWN0bmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwb2ludHM6IFByb3BUeXBlcy5hcnJheU9mKHR5cGVzLlBvaW50VHlwZSksXG4gICAgY2xvc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb29yZGluYXRlc09uSG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2xvc2VQb2x5Z29uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uRHJhZ1N0YXJ0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkRyYWdTdG9wOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBncmFwaFByb3BzOiB0eXBlcy5HcmFwaFByb3BzVHlwZS5pc1JlcXVpcmVkLFxuICAgIGlzVG9vbEFjdGl2ZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgbWlkZGxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGxhYmVsTm9kZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBsYWJlbE1vZGVFbmFibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBsaW1pdExhYmVsaW5nOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkNoYW5nZUxhYmVsUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uQ2hhbmdlUHJvcHM6IFByb3BUeXBlcy5mdW5jLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgcG9pbnRzOiBbXSxcbiAgfTtcblxuICBkcmFnUG9pbnQgPSAoaW5kZXgsIGZyb20sIHRvKSA9PiB7XG4gICAgbG9nKCdbZHJhZ1BvaW50XSBmcm9tLCB0bzonLCBmcm9tLCB0byk7XG4gICAgY29uc3QgeyBvbkNoYW5nZSwgcG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHVwZGF0ZSA9IFsuLi5wb2ludHNdO1xuICAgIGNvbnN0IG92ZXJsYXBQb2ludCA9ICEhKHBvaW50cyB8fCBbXSkuZmluZCgocCkgPT4gZXF1YWxQb2ludHMocCwgdG8pKTtcblxuICAgIGlmIChlcXVhbFBvaW50cyhmcm9tLCB0bykgfHwgb3ZlcmxhcFBvaW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBvaW50c1tpbmRleF0ubGFiZWwpIHtcbiAgICAgIHRvLmxhYmVsID0gcG9pbnRzW2luZGV4XS5sYWJlbDtcbiAgICB9XG5cbiAgICB1cGRhdGUuc3BsaWNlKGluZGV4LCAxLCB0byk7XG4gICAgb25DaGFuZ2UodXBkYXRlKTtcbiAgfTtcblxuICBkcmFnTGluZSA9IChleGlzdGluZywgbmV4dCkgPT4ge1xuICAgIGxvZygnW2RyYWdMaW5lXTogJywgZXhpc3RpbmcsIG5leHQpO1xuICAgIGNvbnN0IHsgb25DaGFuZ2UgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoZXhpc3RpbmcuZnJvbS5sYWJlbCkge1xuICAgICAgbmV4dC5mcm9tLmxhYmVsID0gZXhpc3RpbmcuZnJvbS5sYWJlbDtcbiAgICB9XG5cbiAgICBpZiAoZXhpc3RpbmcudG8ubGFiZWwpIHtcbiAgICAgIG5leHQudG8ubGFiZWwgPSBleGlzdGluZy50by5sYWJlbDtcbiAgICB9XG5cbiAgICBjb25zdCBwb2ludHMgPSBzd2FwKHRoaXMucHJvcHMucG9pbnRzLCBleGlzdGluZy5mcm9tLCBuZXh0LmZyb20sIGV4aXN0aW5nLnRvLCBuZXh0LnRvKTtcbiAgICBvbkNoYW5nZShwb2ludHMpO1xuICB9O1xuXG4gIGRyYWdQb2x5ID0gKGV4aXN0aW5nLCBuZXh0KSA9PiB7XG4gICAgbG9nKCdbZHJhZ1BvbHldICcsIGV4aXN0aW5nLCBuZXh0KTtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgbmV4dC5mb3JFYWNoKChwb2ludCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChleGlzdGluZ1tpbmRleF0ubGFiZWwpIHtcbiAgICAgICAgbmV4dFtpbmRleF0ubGFiZWwgPSBleGlzdGluZ1tpbmRleF0ubGFiZWw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBvbkNoYW5nZShuZXh0KTtcbiAgfTtcblxuICBjbG9zZSA9ICgpID0+IHtcbiAgICBjb25zdCB7IHBvaW50cywgb25DbG9zZVBvbHlnb24gfSA9IHRoaXMucHJvcHM7XG4gICAgbG9nKCdbY2xvc2VdIC4uLicpO1xuXG4gICAgaWYgKHBvaW50cy5sZW5ndGggPj0gMykge1xuICAgICAgb25DbG9zZVBvbHlnb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKCdbY2xvc2VdIC0gbm9wZScpO1xuICAgIH1cbiAgfTtcblxuICBsYWJlbENoYW5nZSA9IChwb2ludCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7IHBvaW50cywgb25DaGFuZ2VQcm9wcyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB1cGRhdGVkUG9pbnQgPSB7IC4uLnBvaW50IH07XG5cbiAgICBpZiAoIXBvaW50LmxhYmVsIHx8IGlzRW1wdHkocG9pbnQubGFiZWwpKSB7XG4gICAgICBkZWxldGUgdXBkYXRlZFBvaW50LmxhYmVsO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZSA9IFsuLi5wb2ludHNdO1xuXG4gICAgdXBkYXRlLnNwbGljZShpbmRleCwgMSwgdXBkYXRlZFBvaW50KTtcbiAgICBvbkNoYW5nZVByb3BzKHVwZGF0ZSk7XG4gIH07XG5cbiAgY2xpY2tQb2ludCA9IChwb2ludCwgaW5kZXgsIGRhdGEpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjbG9zZWQsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBpc1Rvb2xBY3RpdmUsXG4gICAgICBsYWJlbE1vZGVFbmFibGVkLFxuICAgICAgbGltaXRMYWJlbGluZyxcbiAgICAgIG9uQ2hhbmdlUHJvcHMsXG4gICAgICBvbkNoYW5nZUxhYmVsUHJvcHMsXG4gICAgICBwb2ludHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAobGFiZWxNb2RlRW5hYmxlZCkge1xuICAgICAgLy8gbGltaXQgbGFiZWxpbmcgdGhlIHBvaW50cyBvZiB0aGUgcG9seWdvblxuICAgICAgaWYgKGRpc2FibGVkIHx8IGxpbWl0TGFiZWxpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocG9pbnRzICYmIGluZGV4ID09PSBwb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgYSwgYiB9ID0gZ2V0UmlnaHRlc3RQb2ludHMocG9pbnRzKTtcbiAgICAgICAgY29uc3QgbWlkZGxlID0geyBsYWJlbDogJycsIC4uLnBvaW50LCAuLi5nZXRNaWRkbGVPZlR3b1BvaW50cyhhLCBiKSB9O1xuXG4gICAgICAgIG9uQ2hhbmdlTGFiZWxQcm9wcyhtaWRkbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gWy4uLnBvaW50c107XG5cbiAgICAgICAgdXBkYXRlLnNwbGljZShpbmRleCwgMSwgeyBsYWJlbDogJycsIC4uLnBvaW50IH0pO1xuICAgICAgICBvbkNoYW5nZVByb3BzKHVwZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlucHV0W2luZGV4XSkge1xuICAgICAgICB0aGlzLmlucHV0W2luZGV4XS5mb2N1cygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGlzVG9vbEFjdGl2ZSAmJiAhY2xvc2VkICYmIGluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb25DbGljayhwb2ludCB8fCBkYXRhKTtcbiAgfTtcblxuICAvLyBJTVBPUlRBTlQsIGRvIG5vdCByZW1vdmVcbiAgaW5wdXQgPSB7fTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2xvc2VkLFxuICAgICAgY29vcmRpbmF0ZXNPbkhvdmVyLFxuICAgICAgY29ycmVjdG5lc3MsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGdyYXBoUHJvcHMsXG4gICAgICBvbkNoYW5nZUxhYmVsUHJvcHMsXG4gICAgICBvbkRyYWdTdGFydCxcbiAgICAgIG9uRHJhZ1N0b3AsXG4gICAgICBwb2ludHMsXG4gICAgICBtaWRkbGUsXG4gICAgICBsYWJlbE5vZGUsXG4gICAgICBsYWJlbE1vZGVFbmFibGVkLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGxpbmVzID0gYnVpbGRMaW5lcyhwb2ludHMsIGNsb3NlZCk7XG4gICAgY29uc3QgY29tbW9uID0geyBvbkRyYWdTdGFydCwgb25EcmFnU3RvcCwgZ3JhcGhQcm9wcywgZGlzYWJsZWQsIGNvcnJlY3RuZXNzIH07XG4gICAgY29uc3QgcG9seWdvbkxhYmVsSW5kZXggPSAocG9pbnRzICYmIHBvaW50cy5sZW5ndGgpIHx8IDA7XG4gICAgbGV0IHBvbHlnb25MYWJlbE5vZGUgPSBudWxsO1xuXG4gICAgaWYgKGxhYmVsTm9kZSAmJiBtaWRkbGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1pZGRsZSwgJ2xhYmVsJykpIHtcbiAgICAgIHBvbHlnb25MYWJlbE5vZGUgPSBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICAgIDxNYXJrTGFiZWxcbiAgICAgICAgICBpbnB1dFJlZj17KHIpID0+ICh0aGlzLmlucHV0W3BvbHlnb25MYWJlbEluZGV4XSA9IHIpfVxuICAgICAgICAgIGRpc2FibGVkPXshbGFiZWxNb2RlRW5hYmxlZH1cbiAgICAgICAgICBtYXJrPXttaWRkbGV9XG4gICAgICAgICAgZ3JhcGhQcm9wcz17Z3JhcGhQcm9wc31cbiAgICAgICAgICBvbkNoYW5nZT17KGxhYmVsKSA9PiBvbkNoYW5nZUxhYmVsUHJvcHMoeyAuLi5taWRkbGUsIGxhYmVsIH0pfVxuICAgICAgICAvPixcbiAgICAgICAgbGFiZWxOb2RlLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGc+XG4gICAgICAgIHtjbG9zZWQgPyAoXG4gICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgPERyYWdnYWJsZVBvbHlnb25cbiAgICAgICAgICAgICAgcG9pbnRzPXtwb2ludHN9XG4gICAgICAgICAgICAgIG9uRHJhZz17dGhpcy5kcmFnUG9seS5iaW5kKHRoaXMsIHBvaW50cyl9XG4gICAgICAgICAgICAgIGNsb3NlZD17Y2xvc2VkfVxuICAgICAgICAgICAgICB7Li4uY29tbW9ufVxuICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmNsaWNrUG9pbnQuYmluZCh0aGlzLCBtaWRkbGUsIHBvbHlnb25MYWJlbEluZGV4KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7cG9seWdvbkxhYmVsTm9kZX1cbiAgICAgICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxQb2x5Z29uIHBvaW50cz17cG9pbnRzfSBncmFwaFByb3BzPXtncmFwaFByb3BzfSBjbG9zZWQ9e2Nsb3NlZH0gLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyhsaW5lcyB8fCBbXSkubWFwKChsLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxMaW5lXG4gICAgICAgICAgICBrZXk9e2BsaW5lLSR7aW5kZXh9YH1cbiAgICAgICAgICAgIGZyb209e2wuZnJvbX1cbiAgICAgICAgICAgIHRvPXtsLnRvfVxuICAgICAgICAgICAgb25EcmFnPXt0aGlzLmRyYWdMaW5lLmJpbmQodGhpcywgbCl9XG4gICAgICAgICAgICB7Li4uY29tbW9ufVxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5jbGlja1BvaW50LmJpbmQodGhpcywgbWlkZGxlLCBwb2x5Z29uTGFiZWxJbmRleCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG5cbiAgICAgICAgeyhwb2ludHMgfHwgW10pLm1hcCgocCwgaW5kZXgpID0+IHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgPEJhc2VQb2ludFxuICAgICAgICAgICAgICBrZXk9e2Bwb2ludC0ke2luZGV4fWB9XG4gICAgICAgICAgICAgIGNvb3JkaW5hdGVzT25Ib3Zlcj17Y29vcmRpbmF0ZXNPbkhvdmVyfVxuICAgICAgICAgICAgICBsYWJlbE5vZGU9e2xhYmVsTm9kZX1cbiAgICAgICAgICAgICAgeD17cC54fVxuICAgICAgICAgICAgICB5PXtwLnl9XG4gICAgICAgICAgICAgIG9uRHJhZz17dGhpcy5kcmFnUG9pbnQuYmluZCh0aGlzLCBpbmRleCwgcCl9XG4gICAgICAgICAgICAgIHsuLi5jb21tb259XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xpY2tQb2ludC5iaW5kKHRoaXMsIHAsIGluZGV4KX1cbiAgICAgICAgICAgIC8+LFxuICAgICAgICAgICAgbGFiZWxOb2RlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwLCAnbGFiZWwnKVxuICAgICAgICAgICAgICA/IFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgICAgICAgIDxNYXJrTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRSZWY9eyhyKSA9PiAodGhpcy5pbnB1dFtpbmRleF0gPSByKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFsYWJlbE1vZGVFbmFibGVkfVxuICAgICAgICAgICAgICAgICAgICBtYXJrPXtwfVxuICAgICAgICAgICAgICAgICAgICBncmFwaFByb3BzPXtncmFwaFByb3BzfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGxhYmVsKSA9PiB0aGlzLmxhYmVsQ2hhbmdlKHsgLi4ucCwgbGFiZWwgfSwgaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgLz4sXG4gICAgICAgICAgICAgICAgICBsYWJlbE5vZGUsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgXTtcbiAgICAgICAgfSl9XG4gICAgICA8L2c+XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQmFzZUNvbXBvbmVudCA9IFJhd0Jhc2VDb21wb25lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLi4uVG9vbFByb3BUeXBlRmllbGRzLFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgfVxuXG4gIGNoYW5nZSA9IChwb2ludHMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBtYXJrOiB7IG1pZGRsZSB9LFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG1hcmsgPSB7IC4uLnRoaXMuc3RhdGUubWFyaywgcG9pbnRzIH07XG5cbiAgICBpZiAobWlkZGxlKSB7XG4gICAgICBjb25zdCB7IGEsIGIgfSA9IGdldFJpZ2h0ZXN0UG9pbnRzKHBvaW50cyk7XG5cbiAgICAgIG1hcmsubWlkZGxlID0geyAuLi5taWRkbGUsIC4uLmdldE1pZGRsZU9mVHdvUG9pbnRzKGEsIGIpIH07XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IG1hcmsgfSk7XG4gIH07XG5cbiAgY2hhbmdlUHJvcHMgPSAocG9pbnRzKSA9PiB7XG4gICAgY29uc3QgbWFyayA9IHsgLi4udGhpcy5wcm9wcy5tYXJrLCBwb2ludHMgfTtcblxuICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5wcm9wcy5tYXJrLCBtYXJrKTtcbiAgfTtcblxuICBjaGFuZ2VMYWJlbFByb3BzID0gKHBvaW50KSA9PiB7XG4gICAgY29uc3QgeyBtYXJrLCBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBtaWRkbGUgPSB7IC4uLm1hcmsubWlkZGxlLCAuLi5wb2ludCB9O1xuXG4gICAgb25DaGFuZ2UobWFyaywgeyAuLi5tYXJrLCBtaWRkbGUgfSk7XG4gIH07XG5cbiAgY2xvc2VQb2x5Z29uID0gKCkgPT4ge1xuICAgIGxvZygnW2Nsb3NlUG9seWdvbl0gLi4uJyk7XG4gICAgY29uc3QgeyBvbkNvbXBsZXRlLCBtYXJrIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHVwZGF0ZSA9IHsgLi4ubWFyaywgY2xvc2VkOiB0cnVlIH07XG5cbiAgICBvbkNvbXBsZXRlKG1hcmssIHVwZGF0ZSk7XG4gIH07XG5cbiAgZHJhZ1N0YXJ0ID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IG1hcms6IHRoaXMucHJvcHMubWFyayB9KTtcblxuICBkcmFnU3RvcCA9ICgpID0+IHtcbiAgICBjb25zdCB7IG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IG0gPSB7IC4uLnRoaXMuc3RhdGUubWFyayB9O1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IG1hcms6IHVuZGVmaW5lZCB9LCAoKSA9PiB7XG4gICAgICBvbkNoYW5nZSh0aGlzLnByb3BzLm1hcmssIG0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb29yZGluYXRlc09uSG92ZXIsXG4gICAgICBtYXJrLFxuICAgICAgZ3JhcGhQcm9wcyxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBpc1Rvb2xBY3RpdmUsXG4gICAgICBsYWJlbE5vZGUsXG4gICAgICBsYWJlbE1vZGVFbmFibGVkLFxuICAgICAgbGltaXRMYWJlbGluZyxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IG1hcms6IHN0YXRlTWFyayB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8QmFzZUNvbXBvbmVudFxuICAgICAgICB7Li4uKHN0YXRlTWFyayB8fCBtYXJrKX1cbiAgICAgICAgY29vcmRpbmF0ZXNPbkhvdmVyPXtjb29yZGluYXRlc09uSG92ZXJ9XG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLmNoYW5nZX1cbiAgICAgICAgb25DaGFuZ2VMYWJlbFByb3BzPXt0aGlzLmNoYW5nZUxhYmVsUHJvcHN9XG4gICAgICAgIG9uQ2hhbmdlUHJvcHM9e3RoaXMuY2hhbmdlUHJvcHN9XG4gICAgICAgIG9uQ2xvc2VQb2x5Z29uPXt0aGlzLmNsb3NlUG9seWdvbn1cbiAgICAgICAgb25EcmFnU3RhcnQ9e3RoaXMuZHJhZ1N0YXJ0fVxuICAgICAgICBvbkRyYWdTdG9wPXt0aGlzLmRyYWdTdG9wfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBncmFwaFByb3BzPXtncmFwaFByb3BzfVxuICAgICAgICBpc1Rvb2xBY3RpdmU9e2lzVG9vbEFjdGl2ZX1cbiAgICAgICAgbGFiZWxOb2RlPXtsYWJlbE5vZGV9XG4gICAgICAgIGxhYmVsTW9kZUVuYWJsZWQ9e2xhYmVsTW9kZUVuYWJsZWR9XG4gICAgICAgIGxpbWl0TGFiZWxpbmc9e2xpbWl0TGFiZWxpbmd9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxNQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxLQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSxRQUFBLEdBQUFDLHVCQUFBLENBQUFULE9BQUE7QUFDQSxJQUFBVSxLQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxVQUFBLEdBQUFaLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBWSxTQUFBLEdBQUFiLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBYSxVQUFBLEdBQUFkLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBYyxRQUFBLEdBQUFmLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBZSxNQUFBLEdBQUFmLE9BQUE7QUFBbUYsU0FBQVMsd0JBQUFPLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFULHVCQUFBLFlBQUFBLHdCQUFBTyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEsaUJBQUFBLENBQUEsZ0JBQUFVLE9BQUEsQ0FBQVYsQ0FBQSwwQkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxDQUFBSyxHQUFBLENBQUFYLENBQUEsVUFBQU0sQ0FBQSxDQUFBTSxHQUFBLENBQUFaLENBQUEsR0FBQU0sQ0FBQSxDQUFBTyxHQUFBLENBQUFiLENBQUEsRUFBQVEsQ0FBQSxjQUFBTSxFQUFBLElBQUFkLENBQUEsZ0JBQUFjLEVBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLEVBQUEsT0FBQVAsQ0FBQSxJQUFBRCxDQUFBLEdBQUFXLE1BQUEsQ0FBQUMsY0FBQSxLQUFBRCxNQUFBLENBQUFFLHdCQUFBLENBQUFuQixDQUFBLEVBQUFjLEVBQUEsT0FBQVAsQ0FBQSxDQUFBSyxHQUFBLElBQUFMLENBQUEsQ0FBQU0sR0FBQSxJQUFBUCxDQUFBLENBQUFFLENBQUEsRUFBQU0sRUFBQSxFQUFBUCxDQUFBLElBQUFDLENBQUEsQ0FBQU0sRUFBQSxJQUFBZCxDQUFBLENBQUFjLEVBQUEsV0FBQU4sQ0FBQSxLQUFBUixDQUFBLEVBQUFDLENBQUE7QUFBQSxTQUFBbUIsV0FBQW5CLENBQUEsRUFBQUssQ0FBQSxFQUFBTixDQUFBLFdBQUFNLENBQUEsT0FBQWUsZ0JBQUEsYUFBQWYsQ0FBQSxPQUFBZ0IsMkJBQUEsYUFBQXJCLENBQUEsRUFBQXNCLHlCQUFBLEtBQUFDLE9BQUEsQ0FBQUMsU0FBQSxDQUFBbkIsQ0FBQSxFQUFBTixDQUFBLFlBQUFxQixnQkFBQSxhQUFBcEIsQ0FBQSxFQUFBeUIsV0FBQSxJQUFBcEIsQ0FBQSxDQUFBcUIsS0FBQSxDQUFBMUIsQ0FBQSxFQUFBRCxDQUFBO0FBQUEsU0FBQXVCLDBCQUFBLGNBQUF0QixDQUFBLElBQUEyQixPQUFBLENBQUFDLFNBQUEsQ0FBQUMsT0FBQSxDQUFBZCxJQUFBLENBQUFRLE9BQUEsQ0FBQUMsU0FBQSxDQUFBRyxPQUFBLGlDQUFBM0IsQ0FBQSxhQUFBc0IseUJBQUEsWUFBQUEsMEJBQUEsYUFBQXRCLENBQUE7QUFBQSxTQUFBOEIsUUFBQS9CLENBQUEsRUFBQUcsQ0FBQSxRQUFBRixDQUFBLEdBQUFnQixNQUFBLENBQUFlLElBQUEsQ0FBQWhDLENBQUEsT0FBQWlCLE1BQUEsQ0FBQWdCLHFCQUFBLFFBQUEzQixDQUFBLEdBQUFXLE1BQUEsQ0FBQWdCLHFCQUFBLENBQUFqQyxDQUFBLEdBQUFHLENBQUEsS0FBQUcsQ0FBQSxHQUFBQSxDQUFBLENBQUE0QixNQUFBLFdBQUEvQixDQUFBLFdBQUFjLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQW5CLENBQUEsRUFBQUcsQ0FBQSxFQUFBZ0MsVUFBQSxPQUFBbEMsQ0FBQSxDQUFBbUMsSUFBQSxDQUFBVCxLQUFBLENBQUExQixDQUFBLEVBQUFLLENBQUEsWUFBQUwsQ0FBQTtBQUFBLFNBQUFvQyxjQUFBckMsQ0FBQSxhQUFBRyxDQUFBLE1BQUFBLENBQUEsR0FBQW1DLFNBQUEsQ0FBQUMsTUFBQSxFQUFBcEMsQ0FBQSxVQUFBRixDQUFBLFdBQUFxQyxTQUFBLENBQUFuQyxDQUFBLElBQUFtQyxTQUFBLENBQUFuQyxDQUFBLFFBQUFBLENBQUEsT0FBQTRCLE9BQUEsQ0FBQWQsTUFBQSxDQUFBaEIsQ0FBQSxPQUFBdUMsT0FBQSxXQUFBckMsQ0FBQSxRQUFBc0MsZ0JBQUEsYUFBQXpDLENBQUEsRUFBQUcsQ0FBQSxFQUFBRixDQUFBLENBQUFFLENBQUEsU0FBQWMsTUFBQSxDQUFBeUIseUJBQUEsR0FBQXpCLE1BQUEsQ0FBQTBCLGdCQUFBLENBQUEzQyxDQUFBLEVBQUFpQixNQUFBLENBQUF5Qix5QkFBQSxDQUFBekMsQ0FBQSxLQUFBOEIsT0FBQSxDQUFBZCxNQUFBLENBQUFoQixDQUFBLEdBQUF1QyxPQUFBLFdBQUFyQyxDQUFBLElBQUFjLE1BQUEsQ0FBQUMsY0FBQSxDQUFBbEIsQ0FBQSxFQUFBRyxDQUFBLEVBQUFjLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWxCLENBQUEsRUFBQUUsQ0FBQSxpQkFBQUgsQ0FBQTtBQUVuRixJQUFNNEMsR0FBRyxHQUFHLElBQUFDLGlCQUFLLEVBQUMsMEJBQTBCLENBQUM7QUFFdEMsSUFBTUMsVUFBVSxHQUFBQyxPQUFBLENBQUFELFVBQUEsR0FBRyxTQUFiQSxVQUFVQSxDQUFJRSxNQUFNLEVBQUVDLE1BQU0sRUFBSztFQUM1QyxJQUFNQyxRQUFRLEdBQUdGLE1BQU0sQ0FBQ0csTUFBTSxDQUFDLFVBQUNDLEdBQUcsRUFBRUMsQ0FBQyxFQUFFQyxLQUFLLEVBQUs7SUFDaERGLEdBQUcsQ0FBQ2hCLElBQUksQ0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQU1nQixDQUFDO01BQUVDLEtBQUssRUFBTEE7SUFBSyxFQUFFLENBQUM7SUFFekIsSUFBTUMsTUFBTSxHQUFHRCxLQUFLLEtBQUtOLE1BQU0sQ0FBQ1QsTUFBTSxHQUFHLENBQUM7SUFDMUMsSUFBTWlCLElBQUksR0FBR0QsTUFBTSxHQUFHLENBQUMsR0FBR0QsS0FBSyxHQUFHLENBQUM7SUFFbkNGLEdBQUcsQ0FBQ2hCLElBQUksQ0FBQUMsYUFBQSxDQUFBQSxhQUFBLEtBQU1XLE1BQU0sQ0FBQ1EsSUFBSSxDQUFDO01BQUVGLEtBQUssRUFBRUU7SUFBSSxFQUFFLENBQUM7SUFFMUMsT0FBT0osR0FBRztFQUNaLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNSyxHQUFHLEdBQUcsSUFBQUMsaUJBQUssRUFBQ1IsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDUyxHQUFHLENBQUMsVUFBQUMsSUFBQSxFQUFnQjtJQUFBLElBQUFDLEtBQUEsT0FBQUMsZUFBQSxhQUFBRixJQUFBO01BQWRHLElBQUksR0FBQUYsS0FBQTtNQUFFRyxFQUFFLEdBQUFILEtBQUE7SUFDM0MsT0FBTztNQUFFRSxJQUFJLEVBQUpBLElBQUk7TUFBRUMsRUFBRSxFQUFGQTtJQUFHLENBQUM7RUFDckIsQ0FBQyxDQUFDO0VBRUYsT0FBT2YsTUFBTSxHQUFHUSxHQUFHLEdBQUcsSUFBQVEsbUJBQU8sRUFBQ1IsR0FBRyxDQUFDO0FBQ3BDLENBQUM7QUFFTSxJQUFNUyxJQUFJLEdBQUFuQixPQUFBLENBQUFtQixJQUFBLEdBQUcsU0FBUEEsSUFBSUEsQ0FBSUMsR0FBRyxFQUFjO0VBQUEsU0FBQUMsSUFBQSxHQUFBOUIsU0FBQSxDQUFBQyxNQUFBLEVBQVQ4QixJQUFJLE9BQUFDLEtBQUEsQ0FBQUYsSUFBQSxPQUFBQSxJQUFBLFdBQUFHLElBQUEsTUFBQUEsSUFBQSxHQUFBSCxJQUFBLEVBQUFHLElBQUE7SUFBSkYsSUFBSSxDQUFBRSxJQUFBLFFBQUFqQyxTQUFBLENBQUFpQyxJQUFBO0VBQUE7RUFDL0IsSUFBTUMsS0FBSyxHQUFHLElBQUFkLGlCQUFLLEVBQUNXLElBQUksRUFBRSxDQUFDLENBQUM7RUFFNUIsT0FBT0csS0FBSyxDQUFDckIsTUFBTSxDQUNqQixVQUFDQyxHQUFHLEVBQUVxQixFQUFFLEVBQUs7SUFDWCxJQUFJQSxFQUFFLENBQUNsQyxNQUFNLEtBQUssQ0FBQyxFQUFFO01BQ25CLElBQUFtQyxHQUFBLE9BQUFaLGVBQUEsYUFBdUJXLEVBQUU7UUFBcEJ6RSxDQUFDLEdBQUEwRSxHQUFBO1FBQUVDLFdBQVcsR0FBQUQsR0FBQTtNQUVuQixJQUFBRSxxQkFBUyxFQUFDQyxNQUFNLENBQUNDLFFBQVEsQ0FBQzlFLENBQUMsQ0FBQ3NELEtBQUssQ0FBQyxFQUFFLHVCQUF1QixDQUFDO01BRTVELElBQU1BLEtBQUssR0FBR3RELENBQUMsQ0FBQ3NELEtBQUs7TUFDckI7O01BRUEsSUFBSUEsS0FBSyxJQUFJLENBQUMsRUFBRTtRQUNkRixHQUFHLENBQUMyQixNQUFNLENBQUN6QixLQUFLLEVBQUUsQ0FBQyxFQUFFcUIsV0FBVyxDQUFDO1FBRWpDLE9BQU92QixHQUFHO01BQ1osQ0FBQyxNQUFNO1FBQ0wsT0FBT0EsR0FBRztNQUNaO0lBQ0YsQ0FBQyxNQUFNO01BQ0wsT0FBT0EsR0FBRztJQUNaO0VBQ0YsQ0FBQyxNQUFBNEIsbUJBQUEsYUFDR2IsR0FBRyxDQUNULENBQUM7QUFDSCxDQUFDO0FBQUMsSUFFV2MsZ0JBQWdCLEdBQUFsQyxPQUFBLENBQUFrQyxnQkFBQSwwQkFBQUMsZ0JBQUE7RUFBQSxTQUFBRCxpQkFBQTtJQUFBLElBQUFFLEtBQUE7SUFBQSxJQUFBQyxnQkFBQSxtQkFBQUgsZ0JBQUE7SUFBQSxTQUFBSSxLQUFBLEdBQUEvQyxTQUFBLENBQUFDLE1BQUEsRUFBQStDLElBQUEsT0FBQWhCLEtBQUEsQ0FBQWUsS0FBQSxHQUFBRSxLQUFBLE1BQUFBLEtBQUEsR0FBQUYsS0FBQSxFQUFBRSxLQUFBO01BQUFELElBQUEsQ0FBQUMsS0FBQSxJQUFBakQsU0FBQSxDQUFBaUQsS0FBQTtJQUFBO0lBQUFKLEtBQUEsR0FBQS9ELFVBQUEsT0FBQTZELGdCQUFBLEtBQUFPLE1BQUEsQ0FBQUYsSUFBQTtJQUFBLElBQUE3QyxnQkFBQSxhQUFBMEMsS0FBQSxlQTRCZixVQUFDN0IsS0FBSyxFQUFFUyxJQUFJLEVBQUVDLEVBQUUsRUFBSztNQUMvQnBCLEdBQUcsQ0FBQyx1QkFBdUIsRUFBRW1CLElBQUksRUFBRUMsRUFBRSxDQUFDO01BQ3RDLElBQUF5QixXQUFBLEdBQTZCTixLQUFBLENBQUtPLEtBQUs7UUFBL0JDLFFBQVEsR0FBQUYsV0FBQSxDQUFSRSxRQUFRO1FBQUUzQyxNQUFNLEdBQUF5QyxXQUFBLENBQU56QyxNQUFNO01BQ3hCLElBQU00QyxNQUFNLE9BQUFaLG1CQUFBLGFBQU9oQyxNQUFNLENBQUM7TUFDMUIsSUFBTTZDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQzdDLE1BQU0sSUFBSSxFQUFFLEVBQUU4QyxJQUFJLENBQUMsVUFBQ3pDLENBQUM7UUFBQSxPQUFLLElBQUEwQyxrQkFBVyxFQUFDMUMsQ0FBQyxFQUFFVyxFQUFFLENBQUM7TUFBQSxFQUFDO01BRXJFLElBQUksSUFBQStCLGtCQUFXLEVBQUNoQyxJQUFJLEVBQUVDLEVBQUUsQ0FBQyxJQUFJNkIsWUFBWSxFQUFFO1FBQ3pDO01BQ0Y7TUFFQSxJQUFJN0MsTUFBTSxDQUFDTSxLQUFLLENBQUMsQ0FBQzBDLEtBQUssRUFBRTtRQUN2QmhDLEVBQUUsQ0FBQ2dDLEtBQUssR0FBR2hELE1BQU0sQ0FBQ00sS0FBSyxDQUFDLENBQUMwQyxLQUFLO01BQ2hDO01BRUFKLE1BQU0sQ0FBQ2IsTUFBTSxDQUFDekIsS0FBSyxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDO01BQzNCMkIsUUFBUSxDQUFDQyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUFBLElBQUFuRCxnQkFBQSxhQUFBMEMsS0FBQSxjQUVVLFVBQUNjLFFBQVEsRUFBRXpDLElBQUksRUFBSztNQUM3QlosR0FBRyxDQUFDLGNBQWMsRUFBRXFELFFBQVEsRUFBRXpDLElBQUksQ0FBQztNQUNuQyxJQUFRbUMsUUFBUSxHQUFLUixLQUFBLENBQUtPLEtBQUssQ0FBdkJDLFFBQVE7TUFFaEIsSUFBSU0sUUFBUSxDQUFDbEMsSUFBSSxDQUFDaUMsS0FBSyxFQUFFO1FBQ3ZCeEMsSUFBSSxDQUFDTyxJQUFJLENBQUNpQyxLQUFLLEdBQUdDLFFBQVEsQ0FBQ2xDLElBQUksQ0FBQ2lDLEtBQUs7TUFDdkM7TUFFQSxJQUFJQyxRQUFRLENBQUNqQyxFQUFFLENBQUNnQyxLQUFLLEVBQUU7UUFDckJ4QyxJQUFJLENBQUNRLEVBQUUsQ0FBQ2dDLEtBQUssR0FBR0MsUUFBUSxDQUFDakMsRUFBRSxDQUFDZ0MsS0FBSztNQUNuQztNQUVBLElBQU1oRCxNQUFNLEdBQUdrQixJQUFJLENBQUNpQixLQUFBLENBQUtPLEtBQUssQ0FBQzFDLE1BQU0sRUFBRWlELFFBQVEsQ0FBQ2xDLElBQUksRUFBRVAsSUFBSSxDQUFDTyxJQUFJLEVBQUVrQyxRQUFRLENBQUNqQyxFQUFFLEVBQUVSLElBQUksQ0FBQ1EsRUFBRSxDQUFDO01BQ3RGMkIsUUFBUSxDQUFDM0MsTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFBQSxJQUFBUCxnQkFBQSxhQUFBMEMsS0FBQSxjQUVVLFVBQUNjLFFBQVEsRUFBRXpDLElBQUksRUFBSztNQUM3QlosR0FBRyxDQUFDLGFBQWEsRUFBRXFELFFBQVEsRUFBRXpDLElBQUksQ0FBQztNQUNsQyxJQUFRbUMsUUFBUSxHQUFLUixLQUFBLENBQUtPLEtBQUssQ0FBdkJDLFFBQVE7TUFFaEJuQyxJQUFJLENBQUNoQixPQUFPLENBQUMsVUFBQzBELEtBQUssRUFBRTVDLEtBQUssRUFBSztRQUM3QixJQUFJMkMsUUFBUSxDQUFDM0MsS0FBSyxDQUFDLENBQUMwQyxLQUFLLEVBQUU7VUFDekJ4QyxJQUFJLENBQUNGLEtBQUssQ0FBQyxDQUFDMEMsS0FBSyxHQUFHQyxRQUFRLENBQUMzQyxLQUFLLENBQUMsQ0FBQzBDLEtBQUs7UUFDM0M7TUFDRixDQUFDLENBQUM7TUFFRkwsUUFBUSxDQUFDbkMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFBQSxJQUFBZixnQkFBQSxhQUFBMEMsS0FBQSxXQUVPLFlBQU07TUFDWixJQUFBZ0IsWUFBQSxHQUFtQ2hCLEtBQUEsQ0FBS08sS0FBSztRQUFyQzFDLE1BQU0sR0FBQW1ELFlBQUEsQ0FBTm5ELE1BQU07UUFBRW9ELGNBQWMsR0FBQUQsWUFBQSxDQUFkQyxjQUFjO01BQzlCeEQsR0FBRyxDQUFDLGFBQWEsQ0FBQztNQUVsQixJQUFJSSxNQUFNLENBQUNULE1BQU0sSUFBSSxDQUFDLEVBQUU7UUFDdEI2RCxjQUFjLENBQUMsQ0FBQztNQUNsQixDQUFDLE1BQU07UUFDTHhELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztNQUN2QjtJQUNGLENBQUM7SUFBQSxJQUFBSCxnQkFBQSxhQUFBMEMsS0FBQSxpQkFFYSxVQUFDZSxLQUFLLEVBQUU1QyxLQUFLLEVBQUs7TUFDOUIsSUFBQStDLFlBQUEsR0FBa0NsQixLQUFBLENBQUtPLEtBQUs7UUFBcEMxQyxNQUFNLEdBQUFxRCxZQUFBLENBQU5yRCxNQUFNO1FBQUVzRCxhQUFhLEdBQUFELFlBQUEsQ0FBYkMsYUFBYTtNQUM3QixJQUFNQyxZQUFZLEdBQUFsRSxhQUFBLEtBQVE2RCxLQUFLLENBQUU7TUFFakMsSUFBSSxDQUFDQSxLQUFLLENBQUNGLEtBQUssSUFBSSxJQUFBUSxtQkFBTyxFQUFDTixLQUFLLENBQUNGLEtBQUssQ0FBQyxFQUFFO1FBQ3hDLE9BQU9PLFlBQVksQ0FBQ1AsS0FBSztNQUMzQjtNQUVBLElBQU1KLE1BQU0sT0FBQVosbUJBQUEsYUFBT2hDLE1BQU0sQ0FBQztNQUUxQjRDLE1BQU0sQ0FBQ2IsTUFBTSxDQUFDekIsS0FBSyxFQUFFLENBQUMsRUFBRWlELFlBQVksQ0FBQztNQUNyQ0QsYUFBYSxDQUFDVixNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUFBLElBQUFuRCxnQkFBQSxhQUFBMEMsS0FBQSxnQkFFWSxVQUFDZSxLQUFLLEVBQUU1QyxLQUFLLEVBQUVtRCxJQUFJLEVBQUs7TUFDbkMsSUFBQUMsWUFBQSxHQVVJdkIsS0FBQSxDQUFLTyxLQUFLO1FBVFp6QyxNQUFNLEdBQUF5RCxZQUFBLENBQU56RCxNQUFNO1FBQ04wRCxRQUFRLEdBQUFELFlBQUEsQ0FBUkMsUUFBUTtRQUNSQyxPQUFPLEdBQUFGLFlBQUEsQ0FBUEUsT0FBTztRQUNQQyxZQUFZLEdBQUFILFlBQUEsQ0FBWkcsWUFBWTtRQUNaQyxnQkFBZ0IsR0FBQUosWUFBQSxDQUFoQkksZ0JBQWdCO1FBQ2hCQyxhQUFhLEdBQUFMLFlBQUEsQ0FBYkssYUFBYTtRQUNiVCxhQUFhLEdBQUFJLFlBQUEsQ0FBYkosYUFBYTtRQUNiVSxrQkFBa0IsR0FBQU4sWUFBQSxDQUFsQk0sa0JBQWtCO1FBQ2xCaEUsTUFBTSxHQUFBMEQsWUFBQSxDQUFOMUQsTUFBTTtNQUdSLElBQUk4RCxnQkFBZ0IsRUFBRTtRQUNwQjtRQUNBLElBQUlILFFBQVEsSUFBSUksYUFBYSxFQUFFO1VBQzdCO1FBQ0Y7UUFFQSxJQUFJL0QsTUFBTSxJQUFJTSxLQUFLLEtBQUtOLE1BQU0sQ0FBQ1QsTUFBTSxFQUFFO1VBQ3JDLElBQUEwRSxrQkFBQSxHQUFpQixJQUFBQyx3QkFBaUIsRUFBQ2xFLE1BQU0sQ0FBQztZQUFsQ21FLENBQUMsR0FBQUYsa0JBQUEsQ0FBREUsQ0FBQztZQUFFQyxDQUFDLEdBQUFILGtCQUFBLENBQURHLENBQUM7VUFDWixJQUFNQyxNQUFNLEdBQUFoRixhQUFBLENBQUFBLGFBQUE7WUFBSzJELEtBQUssRUFBRTtVQUFFLEdBQUtFLEtBQUssR0FBSyxJQUFBb0IsMkJBQW9CLEVBQUNILENBQUMsRUFBRUMsQ0FBQyxDQUFDLENBQUU7VUFFckVKLGtCQUFrQixDQUFDSyxNQUFNLENBQUM7UUFDNUIsQ0FBQyxNQUFNO1VBQ0wsSUFBTXpCLE1BQU0sT0FBQVosbUJBQUEsYUFBT2hDLE1BQU0sQ0FBQztVQUUxQjRDLE1BQU0sQ0FBQ2IsTUFBTSxDQUFDekIsS0FBSyxFQUFFLENBQUMsRUFBQWpCLGFBQUE7WUFBSTJELEtBQUssRUFBRTtVQUFFLEdBQUtFLEtBQUssQ0FBRSxDQUFDO1VBQ2hESSxhQUFhLENBQUNWLE1BQU0sQ0FBQztRQUN2QjtRQUVBLElBQUlULEtBQUEsQ0FBS29DLEtBQUssQ0FBQ2pFLEtBQUssQ0FBQyxFQUFFO1VBQ3JCNkIsS0FBQSxDQUFLb0MsS0FBSyxDQUFDakUsS0FBSyxDQUFDLENBQUNrRSxLQUFLLENBQUMsQ0FBQztRQUMzQjtRQUVBO01BQ0Y7TUFFQSxJQUFJWCxZQUFZLElBQUksQ0FBQzVELE1BQU0sSUFBSUssS0FBSyxLQUFLLENBQUMsRUFBRTtRQUMxQzZCLEtBQUEsQ0FBS3NDLEtBQUssQ0FBQyxDQUFDO1FBQ1o7TUFDRjtNQUVBYixPQUFPLENBQUNWLEtBQUssSUFBSU8sSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRDtJQUFBLElBQUFoRSxnQkFBQSxhQUFBMEMsS0FBQSxXQUNRLENBQUMsQ0FBQztJQUFBLE9BQUFBLEtBQUE7RUFBQTtFQUFBLElBQUF1QyxVQUFBLGFBQUF6QyxnQkFBQSxFQUFBQyxnQkFBQTtFQUFBLFdBQUF5QyxhQUFBLGFBQUExQyxnQkFBQTtJQUFBMkMsR0FBQTtJQUFBQyxLQUFBLEVBRVYsU0FBQUMsTUFBTUEsQ0FBQSxFQUFHO01BQUEsSUFBQUMsTUFBQTtNQUNQLElBQUFDLFlBQUEsR0FhSSxJQUFJLENBQUN0QyxLQUFLO1FBWlp6QyxNQUFNLEdBQUErRSxZQUFBLENBQU4vRSxNQUFNO1FBQ05nRixrQkFBa0IsR0FBQUQsWUFBQSxDQUFsQkMsa0JBQWtCO1FBQ2xCQyxXQUFXLEdBQUFGLFlBQUEsQ0FBWEUsV0FBVztRQUNYdkIsUUFBUSxHQUFBcUIsWUFBQSxDQUFSckIsUUFBUTtRQUNSd0IsVUFBVSxHQUFBSCxZQUFBLENBQVZHLFVBQVU7UUFDVm5CLGtCQUFrQixHQUFBZ0IsWUFBQSxDQUFsQmhCLGtCQUFrQjtRQUNsQm9CLFdBQVcsR0FBQUosWUFBQSxDQUFYSSxXQUFXO1FBQ1hDLFVBQVUsR0FBQUwsWUFBQSxDQUFWSyxVQUFVO1FBQ1ZyRixNQUFNLEdBQUFnRixZQUFBLENBQU5oRixNQUFNO1FBQ05xRSxNQUFNLEdBQUFXLFlBQUEsQ0FBTlgsTUFBTTtRQUNOaUIsU0FBUyxHQUFBTixZQUFBLENBQVRNLFNBQVM7UUFDVHhCLGdCQUFnQixHQUFBa0IsWUFBQSxDQUFoQmxCLGdCQUFnQjtNQUVsQixJQUFNeUIsS0FBSyxHQUFHekYsVUFBVSxDQUFDRSxNQUFNLEVBQUVDLE1BQU0sQ0FBQztNQUN4QyxJQUFNdUYsTUFBTSxHQUFHO1FBQUVKLFdBQVcsRUFBWEEsV0FBVztRQUFFQyxVQUFVLEVBQVZBLFVBQVU7UUFBRUYsVUFBVSxFQUFWQSxVQUFVO1FBQUV4QixRQUFRLEVBQVJBLFFBQVE7UUFBRXVCLFdBQVcsRUFBWEE7TUFBWSxDQUFDO01BQzdFLElBQU1PLGlCQUFpQixHQUFJekYsTUFBTSxJQUFJQSxNQUFNLENBQUNULE1BQU0sSUFBSyxDQUFDO01BQ3hELElBQUltRyxnQkFBZ0IsR0FBRyxJQUFJO01BRTNCLElBQUlKLFNBQVMsSUFBSWpCLE1BQU0sSUFBSXBHLE1BQU0sQ0FBQ1ksU0FBUyxDQUFDZCxjQUFjLENBQUNDLElBQUksQ0FBQ3FHLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRTtRQUNoRnFCLGdCQUFnQixnQkFBR0Msb0JBQVEsQ0FBQ0MsWUFBWSxjQUN0QzlKLE1BQUEsWUFBQStKLGFBQUEsQ0FBQ2hKLFVBQUEsV0FBUztVQUNSaUosUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUczSSxDQUFDO1lBQUEsT0FBTTRILE1BQUksQ0FBQ1IsS0FBSyxDQUFDa0IsaUJBQWlCLENBQUMsR0FBR3RJLENBQUM7VUFBQSxDQUFFO1VBQ3JEd0csUUFBUSxFQUFFLENBQUNHLGdCQUFpQjtVQUM1QmlDLElBQUksRUFBRTFCLE1BQU87VUFDYmMsVUFBVSxFQUFFQSxVQUFXO1VBQ3ZCeEMsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUdLLEtBQUs7WUFBQSxPQUFLZ0Isa0JBQWtCLENBQUEzRSxhQUFBLENBQUFBLGFBQUEsS0FBTWdGLE1BQU07Y0FBRXJCLEtBQUssRUFBTEE7WUFBSyxFQUFFLENBQUM7VUFBQTtRQUFDLENBQy9ELENBQUMsRUFDRnNDLFNBQ0YsQ0FBQztNQUNIO01BRUEsb0JBQ0V4SixNQUFBLFlBQUErSixhQUFBLFlBQ0c1RixNQUFNLGdCQUNMbkUsTUFBQSxZQUFBK0osYUFBQSxDQUFDL0osTUFBQSxXQUFLLENBQUNrSyxRQUFRLHFCQUNibEssTUFBQSxZQUFBK0osYUFBQSxDQUFDckosUUFBQSxXQUFnQixNQUFBeUosU0FBQTtRQUNmakcsTUFBTSxFQUFFQSxNQUFPO1FBQ2ZrRyxNQUFNLEVBQUUsSUFBSSxDQUFDQyxRQUFRLENBQUNDLElBQUksQ0FBQyxJQUFJLEVBQUVwRyxNQUFNLENBQUU7UUFDekNDLE1BQU0sRUFBRUE7TUFBTyxHQUNYdUYsTUFBTTtRQUNWNUIsT0FBTyxFQUFFLElBQUksQ0FBQ3lDLFVBQVUsQ0FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRS9CLE1BQU0sRUFBRW9CLGlCQUFpQjtNQUFFLEVBQ2hFLENBQUMsRUFDREMsZ0JBQ2EsQ0FBQyxnQkFFakI1SixNQUFBLFlBQUErSixhQUFBLENBQUNySixRQUFBLENBQUE4SixPQUFPO1FBQUN0RyxNQUFNLEVBQUVBLE1BQU87UUFBQ21GLFVBQVUsRUFBRUEsVUFBVztRQUFDbEYsTUFBTSxFQUFFQTtNQUFPLENBQUUsQ0FDbkUsRUFDQSxDQUFDc0YsS0FBSyxJQUFJLEVBQUUsRUFBRTVFLEdBQUcsQ0FBQyxVQUFDNEYsQ0FBQyxFQUFFakcsS0FBSztRQUFBLG9CQUMxQnhFLE1BQUEsWUFBQStKLGFBQUEsQ0FBQ3RKLEtBQUEsV0FBSSxNQUFBMEosU0FBQTtVQUNIckIsR0FBRyxVQUFBcEMsTUFBQSxDQUFVbEMsS0FBSyxDQUFHO1VBQ3JCUyxJQUFJLEVBQUV3RixDQUFDLENBQUN4RixJQUFLO1VBQ2JDLEVBQUUsRUFBRXVGLENBQUMsQ0FBQ3ZGLEVBQUc7VUFDVGtGLE1BQU0sRUFBRW5CLE1BQUksQ0FBQ3lCLFFBQVEsQ0FBQ0osSUFBSSxDQUFDckIsTUFBSSxFQUFFd0IsQ0FBQztRQUFFLEdBQ2hDZixNQUFNO1VBQ1Y1QixPQUFPLEVBQUVtQixNQUFJLENBQUNzQixVQUFVLENBQUNELElBQUksQ0FBQ3JCLE1BQUksRUFBRVYsTUFBTSxFQUFFb0IsaUJBQWlCO1FBQUUsRUFDaEUsQ0FBQztNQUFBLENBQ0gsQ0FBQyxFQUVELENBQUN6RixNQUFNLElBQUksRUFBRSxFQUFFVyxHQUFHLENBQUMsVUFBQ04sQ0FBQyxFQUFFQyxLQUFLLEVBQUs7UUFDaEMsT0FBTyxjQUNMeEUsTUFBQSxZQUFBK0osYUFBQSxDQUFDMUosTUFBQSxDQUFBc0ssU0FBUyxNQUFBUixTQUFBO1VBQ1JyQixHQUFHLFdBQUFwQyxNQUFBLENBQVdsQyxLQUFLLENBQUc7VUFDdEIyRSxrQkFBa0IsRUFBRUEsa0JBQW1CO1VBQ3ZDSyxTQUFTLEVBQUVBLFNBQVU7VUFDckJvQixDQUFDLEVBQUVyRyxDQUFDLENBQUNxRyxDQUFFO1VBQ1BDLENBQUMsRUFBRXRHLENBQUMsQ0FBQ3NHLENBQUU7VUFDUFQsTUFBTSxFQUFFbkIsTUFBSSxDQUFDNkIsU0FBUyxDQUFDUixJQUFJLENBQUNyQixNQUFJLEVBQUV6RSxLQUFLLEVBQUVELENBQUM7UUFBRSxHQUN4Q21GLE1BQU07VUFDVjVCLE9BQU8sRUFBRW1CLE1BQUksQ0FBQ3NCLFVBQVUsQ0FBQ0QsSUFBSSxDQUFDckIsTUFBSSxFQUFFMUUsQ0FBQyxFQUFFQyxLQUFLO1FBQUUsRUFDL0MsQ0FBQyxFQUNGZ0YsU0FBUyxJQUFJckgsTUFBTSxDQUFDWSxTQUFTLENBQUNkLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDcUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxnQkFDekRzRixvQkFBUSxDQUFDQyxZQUFZLGNBQ25COUosTUFBQSxZQUFBK0osYUFBQSxDQUFDaEosVUFBQSxXQUFTO1VBQ1JpSixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRzNJLENBQUM7WUFBQSxPQUFNNEgsTUFBSSxDQUFDUixLQUFLLENBQUNqRSxLQUFLLENBQUMsR0FBR25ELENBQUM7VUFBQSxDQUFFO1VBQ3pDd0csUUFBUSxFQUFFLENBQUNHLGdCQUFpQjtVQUM1QmlDLElBQUksRUFBRTFGLENBQUU7VUFDUjhFLFVBQVUsRUFBRUEsVUFBVztVQUN2QnhDLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHSyxLQUFLO1lBQUEsT0FBSytCLE1BQUksQ0FBQzhCLFdBQVcsQ0FBQXhILGFBQUEsQ0FBQUEsYUFBQSxLQUFNZ0IsQ0FBQztjQUFFMkMsS0FBSyxFQUFMQTtZQUFLLElBQUkxQyxLQUFLLENBQUM7VUFBQTtRQUFDLENBQy9ELENBQUMsRUFDRmdGLFNBQ0YsQ0FBQyxHQUNELElBQUksQ0FDVDtNQUNILENBQUMsQ0FDQSxDQUFDO0lBRVI7RUFBQztBQUFBLEVBN09tQ3dCLGlCQUFLLENBQUNDLFNBQVM7QUFBQSxJQUFBdEgsZ0JBQUEsYUFBeEN3QyxnQkFBZ0IsZUFDUjtFQUNqQitFLE9BQU8sRUFBRUMscUJBQVMsQ0FBQ0MsTUFBTTtFQUN6QkMsU0FBUyxFQUFFRixxQkFBUyxDQUFDRyxNQUFNO0VBQzNCekQsUUFBUSxFQUFFc0QscUJBQVMsQ0FBQ0ksSUFBSTtFQUN4Qm5DLFdBQVcsRUFBRStCLHFCQUFTLENBQUNHLE1BQU07RUFDN0JwSCxNQUFNLEVBQUVpSCxxQkFBUyxDQUFDSyxPQUFPLENBQUNDLFdBQUssQ0FBQ0MsU0FBUyxDQUFDO0VBQzFDdkgsTUFBTSxFQUFFZ0gscUJBQVMsQ0FBQ0ksSUFBSTtFQUN0QnBDLGtCQUFrQixFQUFFZ0MscUJBQVMsQ0FBQ0ksSUFBSTtFQUNsQzFFLFFBQVEsRUFBRXNFLHFCQUFTLENBQUNRLElBQUksQ0FBQ0MsVUFBVTtFQUNuQ3RFLGNBQWMsRUFBRTZELHFCQUFTLENBQUNRLElBQUksQ0FBQ0MsVUFBVTtFQUN6Q3RDLFdBQVcsRUFBRTZCLHFCQUFTLENBQUNRLElBQUk7RUFDM0JwQyxVQUFVLEVBQUU0QixxQkFBUyxDQUFDUSxJQUFJO0VBQzFCN0QsT0FBTyxFQUFFcUQscUJBQVMsQ0FBQ1EsSUFBSTtFQUN2QnRDLFVBQVUsRUFBRW9DLFdBQUssQ0FBQ0ksY0FBYyxDQUFDRCxVQUFVO0VBQzNDN0QsWUFBWSxFQUFFb0QscUJBQVMsQ0FBQ0ksSUFBSTtFQUM1QmhELE1BQU0sRUFBRTRDLHFCQUFTLENBQUNDLE1BQU07RUFDeEI1QixTQUFTLEVBQUUyQixxQkFBUyxDQUFDQyxNQUFNO0VBQzNCcEQsZ0JBQWdCLEVBQUVtRCxxQkFBUyxDQUFDSSxJQUFJO0VBQ2hDdEQsYUFBYSxFQUFFa0QscUJBQVMsQ0FBQ0ksSUFBSTtFQUM3QnJELGtCQUFrQixFQUFFaUQscUJBQVMsQ0FBQ1EsSUFBSTtFQUNsQ25FLGFBQWEsRUFBRTJELHFCQUFTLENBQUNRO0FBQzNCLENBQUM7QUFBQSxJQUFBaEksZ0JBQUEsYUF0QlV3QyxnQkFBZ0Isa0JBd0JMO0VBQ3BCakMsTUFBTSxFQUFFO0FBQ1YsQ0FBQztBQXNOSSxJQUFNNEgsYUFBYSxHQUFBN0gsT0FBQSxDQUFBNkgsYUFBQSxHQUFHM0YsZ0JBQWdCO0FBQUMsSUFFekI4RSxTQUFTLEdBQUFoSCxPQUFBLHFDQUFBOEgsaUJBQUE7RUFRNUIsU0FBQWQsVUFBWXJFLEtBQUssRUFBRTtJQUFBLElBQUFvRixNQUFBO0lBQUEsSUFBQTFGLGdCQUFBLG1CQUFBMkUsU0FBQTtJQUNqQmUsTUFBQSxHQUFBMUosVUFBQSxPQUFBMkksU0FBQSxHQUFNckUsS0FBSztJQUFFLElBQUFqRCxnQkFBQSxhQUFBcUksTUFBQSxZQUlOLFVBQUM5SCxNQUFNLEVBQUs7TUFDbkIsSUFDVXFFLE1BQU0sR0FDWnlELE1BQUEsQ0FBS3BGLEtBQUssQ0FEWnFELElBQUksQ0FBSTFCLE1BQU07TUFFaEIsSUFBTTBCLElBQUksR0FBQTFHLGFBQUEsQ0FBQUEsYUFBQSxLQUFReUksTUFBQSxDQUFLQyxLQUFLLENBQUNoQyxJQUFJO1FBQUUvRixNQUFNLEVBQU5BO01BQU0sRUFBRTtNQUUzQyxJQUFJcUUsTUFBTSxFQUFFO1FBQ1YsSUFBQTJELG1CQUFBLEdBQWlCLElBQUE5RCx3QkFBaUIsRUFBQ2xFLE1BQU0sQ0FBQztVQUFsQ21FLENBQUMsR0FBQTZELG1CQUFBLENBQUQ3RCxDQUFDO1VBQUVDLENBQUMsR0FBQTRELG1CQUFBLENBQUQ1RCxDQUFDO1FBRVoyQixJQUFJLENBQUMxQixNQUFNLEdBQUFoRixhQUFBLENBQUFBLGFBQUEsS0FBUWdGLE1BQU0sR0FBSyxJQUFBQywyQkFBb0IsRUFBQ0gsQ0FBQyxFQUFFQyxDQUFDLENBQUMsQ0FBRTtNQUM1RDtNQUVBMEQsTUFBQSxDQUFLRyxRQUFRLENBQUM7UUFBRWxDLElBQUksRUFBSkE7TUFBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUFBLElBQUF0RyxnQkFBQSxhQUFBcUksTUFBQSxpQkFFYSxVQUFDOUgsTUFBTSxFQUFLO01BQ3hCLElBQU0rRixJQUFJLEdBQUExRyxhQUFBLENBQUFBLGFBQUEsS0FBUXlJLE1BQUEsQ0FBS3BGLEtBQUssQ0FBQ3FELElBQUk7UUFBRS9GLE1BQU0sRUFBTkE7TUFBTSxFQUFFO01BRTNDOEgsTUFBQSxDQUFLcEYsS0FBSyxDQUFDQyxRQUFRLENBQUNtRixNQUFBLENBQUtwRixLQUFLLENBQUNxRCxJQUFJLEVBQUVBLElBQUksQ0FBQztJQUM1QyxDQUFDO0lBQUEsSUFBQXRHLGdCQUFBLGFBQUFxSSxNQUFBLHNCQUVrQixVQUFDNUUsS0FBSyxFQUFLO01BQzVCLElBQUFnRixZQUFBLEdBQTJCSixNQUFBLENBQUtwRixLQUFLO1FBQTdCcUQsSUFBSSxHQUFBbUMsWUFBQSxDQUFKbkMsSUFBSTtRQUFFcEQsUUFBUSxHQUFBdUYsWUFBQSxDQUFSdkYsUUFBUTtNQUN0QixJQUFNMEIsTUFBTSxHQUFBaEYsYUFBQSxDQUFBQSxhQUFBLEtBQVEwRyxJQUFJLENBQUMxQixNQUFNLEdBQUtuQixLQUFLLENBQUU7TUFFM0NQLFFBQVEsQ0FBQ29ELElBQUksRUFBQTFHLGFBQUEsQ0FBQUEsYUFBQSxLQUFPMEcsSUFBSTtRQUFFMUIsTUFBTSxFQUFOQTtNQUFNLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBQUEsSUFBQTVFLGdCQUFBLGFBQUFxSSxNQUFBLGtCQUVjLFlBQU07TUFDbkJsSSxHQUFHLENBQUMsb0JBQW9CLENBQUM7TUFDekIsSUFBQXVJLGFBQUEsR0FBNkJMLE1BQUEsQ0FBS3BGLEtBQUs7UUFBL0IwRixVQUFVLEdBQUFELGFBQUEsQ0FBVkMsVUFBVTtRQUFFckMsSUFBSSxHQUFBb0MsYUFBQSxDQUFKcEMsSUFBSTtNQUN4QixJQUFNbkQsTUFBTSxHQUFBdkQsYUFBQSxDQUFBQSxhQUFBLEtBQVEwRyxJQUFJO1FBQUU5RixNQUFNLEVBQUU7TUFBSSxFQUFFO01BRXhDbUksVUFBVSxDQUFDckMsSUFBSSxFQUFFbkQsTUFBTSxDQUFDO0lBQzFCLENBQUM7SUFBQSxJQUFBbkQsZ0JBQUEsYUFBQXFJLE1BQUEsZUFFVztNQUFBLE9BQU1BLE1BQUEsQ0FBS0csUUFBUSxDQUFDO1FBQUVsQyxJQUFJLEVBQUUrQixNQUFBLENBQUtwRixLQUFLLENBQUNxRDtNQUFLLENBQUMsQ0FBQztJQUFBO0lBQUEsSUFBQXRHLGdCQUFBLGFBQUFxSSxNQUFBLGNBRS9DLFlBQU07TUFDZixJQUFRbkYsUUFBUSxHQUFLbUYsTUFBQSxDQUFLcEYsS0FBSyxDQUF2QkMsUUFBUTtNQUNoQixJQUFNMEYsQ0FBQyxHQUFBaEosYUFBQSxLQUFReUksTUFBQSxDQUFLQyxLQUFLLENBQUNoQyxJQUFJLENBQUU7TUFFaEMrQixNQUFBLENBQUtHLFFBQVEsQ0FBQztRQUFFbEMsSUFBSSxFQUFFdUM7TUFBVSxDQUFDLEVBQUUsWUFBTTtRQUN2QzNGLFFBQVEsQ0FBQ21GLE1BQUEsQ0FBS3BGLEtBQUssQ0FBQ3FELElBQUksRUFBRXNDLENBQUMsQ0FBQztNQUM5QixDQUFDLENBQUM7SUFDSixDQUFDO0lBaERDUCxNQUFBLENBQUtDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFBQyxPQUFBRCxNQUFBO0VBQ2xCO0VBQUMsSUFBQXBELFVBQUEsYUFBQXFDLFNBQUEsRUFBQWMsaUJBQUE7RUFBQSxXQUFBbEQsYUFBQSxhQUFBb0MsU0FBQTtJQUFBbkMsR0FBQTtJQUFBQyxLQUFBLEVBaURELFNBQUFDLE1BQU1BLENBQUEsRUFBRztNQUNQLElBQUF5RCxZQUFBLEdBU0ksSUFBSSxDQUFDN0YsS0FBSztRQVJadUMsa0JBQWtCLEdBQUFzRCxZQUFBLENBQWxCdEQsa0JBQWtCO1FBQ2xCYyxJQUFJLEdBQUF3QyxZQUFBLENBQUp4QyxJQUFJO1FBQ0paLFVBQVUsR0FBQW9ELFlBQUEsQ0FBVnBELFVBQVU7UUFDVnZCLE9BQU8sR0FBQTJFLFlBQUEsQ0FBUDNFLE9BQU87UUFDUEMsWUFBWSxHQUFBMEUsWUFBQSxDQUFaMUUsWUFBWTtRQUNaeUIsU0FBUyxHQUFBaUQsWUFBQSxDQUFUakQsU0FBUztRQUNUeEIsZ0JBQWdCLEdBQUF5RSxZQUFBLENBQWhCekUsZ0JBQWdCO1FBQ2hCQyxhQUFhLEdBQUF3RSxZQUFBLENBQWJ4RSxhQUFhO01BRWYsSUFBY3lFLFNBQVMsR0FBSyxJQUFJLENBQUNULEtBQUssQ0FBOUJoQyxJQUFJO01BRVosb0JBQ0VqSyxNQUFBLFlBQUErSixhQUFBLENBQUMrQixhQUFhLE1BQUEzQixTQUFBLGlCQUNQdUMsU0FBUyxJQUFJekMsSUFBSTtRQUN0QmQsa0JBQWtCLEVBQUVBLGtCQUFtQjtRQUN2Q3RDLFFBQVEsRUFBRSxJQUFJLENBQUM4RixNQUFPO1FBQ3RCekUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDMEUsZ0JBQWlCO1FBQzFDcEYsYUFBYSxFQUFFLElBQUksQ0FBQ3FGLFdBQVk7UUFDaEN2RixjQUFjLEVBQUUsSUFBSSxDQUFDd0YsWUFBYTtRQUNsQ3hELFdBQVcsRUFBRSxJQUFJLENBQUN5RCxTQUFVO1FBQzVCeEQsVUFBVSxFQUFFLElBQUksQ0FBQ3lELFFBQVM7UUFDMUJsRixPQUFPLEVBQUVBLE9BQVE7UUFDakJ1QixVQUFVLEVBQUVBLFVBQVc7UUFDdkJ0QixZQUFZLEVBQUVBLFlBQWE7UUFDM0J5QixTQUFTLEVBQUVBLFNBQVU7UUFDckJ4QixnQkFBZ0IsRUFBRUEsZ0JBQWlCO1FBQ25DQyxhQUFhLEVBQUVBO01BQWMsRUFDOUIsQ0FBQztJQUVOO0VBQUM7QUFBQSxFQTNGb0MrQyxpQkFBSyxDQUFDQyxTQUFTO0FBQUEsSUFBQXRILGdCQUFBLGFBQWpDc0gsU0FBUyxlQUFBMUgsYUFBQSxDQUFBQSxhQUFBLEtBRXZCMEoseUJBQWtCO0VBQ3JCNUQsVUFBVSxFQUFFb0MsV0FBSyxDQUFDSSxjQUFjLENBQUNEO0FBQVU7QUFBQSxJQUFBakksZ0JBQUEsYUFIMUJzSCxTQUFTLGtCQU1OLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==