@1money/component-ui 0.0.70 → 0.0.73

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 (247) hide show
  1. package/es/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +3 -2
  2. package/es/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +2 -2
  3. package/es/business/Select/Network/NetworkSelect.js +2 -2
  4. package/es/components/Accordion/Accordion.js +3 -2
  5. package/es/components/Calendar/Calendar.js +3 -2
  6. package/es/components/Carousel/Carousel.js +3 -2
  7. package/es/components/Checkbox/BaseCheckbox.js +3 -2
  8. package/es/components/Checkbox/Checkbox.js +2 -2
  9. package/es/components/Checkbox/CheckboxGroup.js +3 -2
  10. package/es/components/CoachMark/CoachMark.js +3 -2
  11. package/es/components/Copy/Copy.js +2 -2
  12. package/es/components/Dialog/Dialog.js +2 -2
  13. package/es/components/Drawer/Drawer.js +2 -2
  14. package/es/components/Input/Amount/Amount.js +2 -2
  15. package/es/components/Input/Input/Input.js +3 -2
  16. package/es/components/Input/Mask/Mask.js +3 -2
  17. package/es/components/Input/OTP/OTP.js +3 -2
  18. package/es/components/Input/Password/Password.js +3 -2
  19. package/es/components/Input/Search/Search.js +3 -2
  20. package/es/components/Input/TextArea/TextArea.js +3 -2
  21. package/es/components/Input/Trade/Trade.js +2 -2
  22. package/es/components/Input/useAmountInput.js +4 -2
  23. package/es/components/Input/useSyncRef.js +2 -2
  24. package/es/components/Navigation/Nav.js +2 -2
  25. package/es/components/Navigation/Navigation.js +5 -2
  26. package/es/components/Pagination/Pagination.js +2 -2
  27. package/es/components/Pagination/usePagination.js +3 -2
  28. package/es/components/Popconfirm/Popconfirm.js +2 -2
  29. package/es/components/Portal/Portal.js +2 -2
  30. package/es/components/ProForm/ProForm.d.ts +10 -2
  31. package/es/components/ProForm/ProForm.js +60 -24
  32. package/es/components/ProForm/ProFormDependency.js +4 -1
  33. package/es/components/ProForm/ProFormGroup.js +2 -2
  34. package/es/components/ProForm/ProFormItem.js +73 -36
  35. package/es/components/ProForm/ProFormList.js +3 -2
  36. package/es/components/ProForm/SchemaForm.d.ts +7 -0
  37. package/es/components/ProForm/SchemaForm.js +103 -0
  38. package/es/components/ProForm/Submitter.js +13 -3
  39. package/es/components/ProForm/context.d.ts +22 -3
  40. package/es/components/ProForm/context.js +49 -10
  41. package/es/components/ProForm/core/constants.d.ts +8 -1
  42. package/es/components/ProForm/core/constants.js +9 -6
  43. package/es/components/ProForm/core/hooks/useForm.js +174 -320
  44. package/es/components/ProForm/core/hooks/useFormCore.js +84 -178
  45. package/es/components/ProForm/core/interface.d.ts +33 -12
  46. package/es/components/ProForm/core/pathUtils.d.ts +6 -0
  47. package/es/components/ProForm/core/pathUtils.js +59 -0
  48. package/es/components/ProForm/core/runRules.d.ts +23 -0
  49. package/es/components/ProForm/core/runRules.js +233 -0
  50. package/es/components/ProForm/core/useFormItem.d.ts +10 -1
  51. package/es/components/ProForm/core/useFormItem.js +105 -61
  52. package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
  53. package/es/components/ProForm/fields/createProFormField.js +64 -59
  54. package/es/components/ProForm/hooks/useFieldRequest.js +7 -5
  55. package/es/components/ProForm/index.d.ts +11 -4
  56. package/es/components/ProForm/index.js +7 -2
  57. package/es/components/ProForm/interface.d.ts +89 -14
  58. package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
  59. package/es/components/ProForm/layouts/DialogForm.js +2 -1
  60. package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  61. package/es/components/ProForm/layouts/DrawerForm.js +2 -1
  62. package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  63. package/es/components/ProForm/layouts/QueryFilter.js +79 -13
  64. package/es/components/ProForm/layouts/useOverlayForm.js +23 -21
  65. package/es/components/ProForm/style/ProForm.css +6 -0
  66. package/es/components/ProForm/utils.d.ts +14 -3
  67. package/es/components/ProForm/utils.js +73 -70
  68. package/es/components/ProTable/ProTable.js +3 -2
  69. package/es/components/ProTable/core/useAwaitableReload.js +3 -2
  70. package/es/components/ProTable/useFetchData.js +4 -2
  71. package/es/components/Radio/Radio.js +3 -2
  72. package/es/components/Radio/RadioGroup.js +3 -2
  73. package/es/components/ResizeObserver/useResizeObserver.js +2 -2
  74. package/es/components/Segment/Segment.js +4 -2
  75. package/es/components/Select/Select.js +3 -2
  76. package/es/components/Select/SelectCustom.js +2 -2
  77. package/es/components/Select/useSelectShell.js +3 -2
  78. package/es/components/Slider/Slider.js +3 -2
  79. package/es/components/Switch/Switch.js +3 -2
  80. package/es/components/Table/Table.js +14 -28
  81. package/es/components/Table/VirtualTable.js +18 -28
  82. package/es/components/Table/core/columnUtil.d.ts +9 -0
  83. package/es/components/Table/core/columnUtil.js +34 -0
  84. package/es/components/Table/core/useTableColumns.d.ts +4 -13
  85. package/es/components/Table/core/useTableColumns.js +55 -24
  86. package/es/components/Table/core/useTableDataPipeline.d.ts +11 -16
  87. package/es/components/Table/core/useTableDataPipeline.js +66 -73
  88. package/es/components/Table/core/useTableExpand.js +3 -2
  89. package/es/components/Table/core/useTableSelection.js +7 -4
  90. package/es/components/Table/core/useTableSetup.js +4 -2
  91. package/es/components/Table/features/ExpandTrigger.d.ts +9 -3
  92. package/es/components/Table/features/ExpandTrigger.js +14 -8
  93. package/es/components/Table/features/FilterTrigger.js +21 -17
  94. package/es/components/Table/features/SelectionColumn.d.ts +11 -6
  95. package/es/components/Table/features/SelectionColumn.js +12 -5
  96. package/es/components/Table/features/SortTrigger.d.ts +4 -2
  97. package/es/components/Table/features/SortTrigger.js +8 -3
  98. package/es/components/Table/internal/kernel/Body/MeasureCell.js +2 -2
  99. package/es/components/Table/internal/kernel/Cell/index.js +2 -2
  100. package/es/components/Table/internal/kernel/Table.js +3 -3
  101. package/es/components/Table/internal/kernel/VirtualTable/index.js +2 -2
  102. package/es/components/Table/internal/kernel/hooks/useRowInfo.js +2 -2
  103. package/es/components/Table/internal/kernel/selector-context/context.js +3 -3
  104. package/es/components/Table/renderers/HeaderCell.js +3 -2
  105. package/es/components/Table/renderers/TableShell.d.ts +13 -0
  106. package/es/components/Table/renderers/TableShell.js +25 -0
  107. package/es/components/Table/style/Table.css +3 -0
  108. package/es/components/Tabs/Tabs.js +4 -2
  109. package/es/components/Tooltip/Tooltip.js +3 -2
  110. package/es/components/Tooltip/style/Tooltip.css +1 -0
  111. package/es/components/Tour/Tour.js +3 -2
  112. package/es/components/Trigger/Trigger.js +3 -2
  113. package/es/components/Typography/Typography.js +2 -2
  114. package/es/components/Typography/useTypographyEnhancements.js +3 -2
  115. package/es/components/Upload/Upload.js +2 -2
  116. package/es/components/Upload/UploadFileBar.js +2 -2
  117. package/es/components/VirtualList/VirtualList.js +3 -2
  118. package/es/components/VirtualList/hooks/useMobileTouchMove.js +2 -2
  119. package/es/components/VirtualList/hooks/useScrollTo.js +2 -2
  120. package/es/index.css +1 -1
  121. package/es/index.d.ts +2 -2
  122. package/es/index.js +2 -2
  123. package/lib/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +9 -8
  124. package/lib/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +3 -3
  125. package/lib/business/Select/Network/NetworkSelect.js +3 -3
  126. package/lib/components/Accordion/Accordion.js +5 -4
  127. package/lib/components/Calendar/Calendar.js +6 -5
  128. package/lib/components/Carousel/Carousel.js +5 -4
  129. package/lib/components/Checkbox/BaseCheckbox.js +5 -4
  130. package/lib/components/Checkbox/Checkbox.js +3 -3
  131. package/lib/components/Checkbox/CheckboxGroup.js +7 -6
  132. package/lib/components/CoachMark/CoachMark.js +7 -6
  133. package/lib/components/Copy/Copy.js +3 -3
  134. package/lib/components/Dialog/Dialog.js +6 -6
  135. package/lib/components/Drawer/Drawer.js +10 -10
  136. package/lib/components/Input/Amount/Amount.js +6 -5
  137. package/lib/components/Input/Input/Input.js +7 -6
  138. package/lib/components/Input/Mask/Mask.js +9 -8
  139. package/lib/components/Input/OTP/OTP.js +9 -8
  140. package/lib/components/Input/Password/Password.js +6 -5
  141. package/lib/components/Input/Search/Search.js +8 -7
  142. package/lib/components/Input/TextArea/TextArea.js +5 -4
  143. package/lib/components/Input/Trade/Trade.js +5 -4
  144. package/lib/components/Input/useAmountInput.js +13 -11
  145. package/lib/components/Input/useSyncRef.js +4 -3
  146. package/lib/components/Navigation/Nav.js +3 -3
  147. package/lib/components/Navigation/Navigation.js +10 -7
  148. package/lib/components/Pagination/Pagination.js +4 -3
  149. package/lib/components/Pagination/usePagination.js +7 -6
  150. package/lib/components/Popconfirm/Popconfirm.js +3 -3
  151. package/lib/components/Portal/Portal.js +4 -4
  152. package/lib/components/ProForm/ProForm.d.ts +10 -2
  153. package/lib/components/ProForm/ProForm.js +66 -30
  154. package/lib/components/ProForm/ProFormDependency.js +4 -1
  155. package/lib/components/ProForm/ProFormGroup.js +3 -3
  156. package/lib/components/ProForm/ProFormItem.js +72 -34
  157. package/lib/components/ProForm/ProFormList.js +10 -9
  158. package/lib/components/ProForm/SchemaForm.d.ts +7 -0
  159. package/lib/components/ProForm/SchemaForm.js +110 -0
  160. package/lib/components/ProForm/Submitter.js +15 -5
  161. package/lib/components/ProForm/context.d.ts +22 -3
  162. package/lib/components/ProForm/context.js +49 -10
  163. package/lib/components/ProForm/core/constants.d.ts +8 -1
  164. package/lib/components/ProForm/core/constants.js +10 -7
  165. package/lib/components/ProForm/core/hooks/useForm.js +181 -327
  166. package/lib/components/ProForm/core/hooks/useFormCore.js +96 -190
  167. package/lib/components/ProForm/core/interface.d.ts +33 -12
  168. package/lib/components/ProForm/core/pathUtils.d.ts +6 -0
  169. package/lib/components/ProForm/core/pathUtils.js +68 -0
  170. package/lib/components/ProForm/core/runRules.d.ts +23 -0
  171. package/lib/components/ProForm/core/runRules.js +242 -0
  172. package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
  173. package/lib/components/ProForm/core/useFormItem.js +106 -62
  174. package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
  175. package/lib/components/ProForm/fields/createProFormField.js +63 -58
  176. package/lib/components/ProForm/hooks/useFieldRequest.js +9 -7
  177. package/lib/components/ProForm/index.d.ts +11 -4
  178. package/lib/components/ProForm/index.js +16 -1
  179. package/lib/components/ProForm/interface.d.ts +89 -14
  180. package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
  181. package/lib/components/ProForm/layouts/DialogForm.js +2 -1
  182. package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  183. package/lib/components/ProForm/layouts/DrawerForm.js +2 -1
  184. package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  185. package/lib/components/ProForm/layouts/QueryFilter.js +84 -18
  186. package/lib/components/ProForm/layouts/useOverlayForm.js +27 -27
  187. package/lib/components/ProForm/style/ProForm.css +6 -0
  188. package/lib/components/ProForm/utils.d.ts +14 -3
  189. package/lib/components/ProForm/utils.js +91 -74
  190. package/lib/components/ProTable/ProTable.js +10 -9
  191. package/lib/components/ProTable/core/useAwaitableReload.js +6 -5
  192. package/lib/components/ProTable/useFetchData.js +15 -13
  193. package/lib/components/Radio/Radio.js +6 -5
  194. package/lib/components/Radio/RadioGroup.js +5 -4
  195. package/lib/components/ResizeObserver/useResizeObserver.js +4 -3
  196. package/lib/components/Segment/Segment.js +7 -5
  197. package/lib/components/Select/Select.js +23 -22
  198. package/lib/components/Select/SelectCustom.js +8 -8
  199. package/lib/components/Select/useSelectShell.js +5 -4
  200. package/lib/components/Slider/Slider.js +6 -5
  201. package/lib/components/Switch/Switch.js +5 -4
  202. package/lib/components/Table/Table.js +13 -27
  203. package/lib/components/Table/VirtualTable.js +17 -27
  204. package/lib/components/Table/core/columnUtil.d.ts +9 -0
  205. package/lib/components/Table/core/columnUtil.js +42 -0
  206. package/lib/components/Table/core/useTableColumns.d.ts +4 -13
  207. package/lib/components/Table/core/useTableColumns.js +57 -26
  208. package/lib/components/Table/core/useTableDataPipeline.d.ts +11 -16
  209. package/lib/components/Table/core/useTableDataPipeline.js +73 -80
  210. package/lib/components/Table/core/useTableExpand.js +6 -5
  211. package/lib/components/Table/core/useTableSelection.js +13 -10
  212. package/lib/components/Table/core/useTableSetup.js +8 -5
  213. package/lib/components/Table/features/ExpandTrigger.d.ts +9 -3
  214. package/lib/components/Table/features/ExpandTrigger.js +14 -8
  215. package/lib/components/Table/features/FilterTrigger.js +21 -17
  216. package/lib/components/Table/features/SelectionColumn.d.ts +11 -6
  217. package/lib/components/Table/features/SelectionColumn.js +12 -5
  218. package/lib/components/Table/features/SortTrigger.d.ts +4 -2
  219. package/lib/components/Table/features/SortTrigger.js +8 -3
  220. package/lib/components/Table/internal/kernel/Body/MeasureCell.js +3 -3
  221. package/lib/components/Table/internal/kernel/Cell/index.js +4 -4
  222. package/lib/components/Table/internal/kernel/Table.js +7 -6
  223. package/lib/components/Table/internal/kernel/VirtualTable/index.js +4 -4
  224. package/lib/components/Table/internal/kernel/hooks/useRowInfo.js +3 -3
  225. package/lib/components/Table/internal/kernel/selector-context/context.js +6 -5
  226. package/lib/components/Table/renderers/HeaderCell.js +3 -2
  227. package/lib/components/Table/renderers/TableShell.d.ts +13 -0
  228. package/lib/components/Table/renderers/TableShell.js +31 -0
  229. package/lib/components/Table/style/Table.css +3 -0
  230. package/lib/components/Tabs/Tabs.js +7 -5
  231. package/lib/components/Tooltip/Tooltip.js +5 -4
  232. package/lib/components/Tooltip/style/Tooltip.css +1 -0
  233. package/lib/components/Tour/Tour.js +7 -6
  234. package/lib/components/Trigger/Trigger.js +5 -4
  235. package/lib/components/Typography/Typography.js +5 -4
  236. package/lib/components/Typography/useTypographyEnhancements.js +8 -7
  237. package/lib/components/Upload/Upload.js +5 -4
  238. package/lib/components/Upload/UploadFileBar.js +4 -3
  239. package/lib/components/VirtualList/VirtualList.js +8 -7
  240. package/lib/components/VirtualList/hooks/useMobileTouchMove.js +4 -3
  241. package/lib/components/VirtualList/hooks/useScrollTo.js +3 -3
  242. package/lib/index.css +1 -1
  243. package/lib/index.d.ts +2 -2
  244. package/lib/index.js +13 -1
  245. package/package.json +2 -2
  246. package/scripts/mcp-server/examples.generated.json +54 -0
  247. package/scripts/mcp-server/index.generated.json +1212 -80
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -9,10 +8,10 @@ exports["default"] = void 0;
9
8
  exports.useOverlayForm = useOverlayForm;
10
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
- var _react = _interopRequireWildcard(require("react"));
13
- var _hooks = require("@1money/hooks");
14
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
15
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
11
+ var _react = _interopRequireDefault(require("react"));
12
+ var _useControlledState3 = _interopRequireDefault(require("@1money/hooks/useControlledState"));
13
+ var _useDebouncedCallback2 = _interopRequireDefault(require("@1money/hooks/useDebouncedCallback"));
14
+ var _useEventCallback = _interopRequireDefault(require("@1money/hooks/useEventCallback"));
16
15
  var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
17
16
  function adopt(value) {
18
17
  return value instanceof P ? value : new P(function (resolve) {
@@ -48,29 +47,32 @@ function useOverlayForm(options, onFinish) {
48
47
  _options$autoClose = options.autoClose,
49
48
  autoClose = _options$autoClose === void 0 ? true : _options$autoClose,
50
49
  submitTimeout = options.submitTimeout;
51
- var isControlled = controlledOpen !== undefined;
52
- var _useState = (0, _react.useState)(false),
53
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
54
- internalOpen = _useState2[0],
55
- setInternalOpen = _useState2[1];
56
- var mergedOpen = isControlled ? controlledOpen : internalOpen;
57
- var timeoutRef = (0, _react.useRef)(null);
58
- var setOpen = (0, _react.useCallback)(function (nextOpen) {
59
- if (!isControlled) {
60
- setInternalOpen(nextOpen);
61
- }
50
+ // Controlled when `controlledOpen` is passed, internal otherwise — and always
51
+ // forward the change to `onOpenChange`.
52
+ var _useControlledState = (0, _useControlledState3["default"])(false, controlledOpen),
53
+ _useControlledState2 = (0, _slicedToArray2["default"])(_useControlledState, 2),
54
+ mergedOpen = _useControlledState2[0],
55
+ setMergedOpen = _useControlledState2[1];
56
+ var setOpen = (0, _useEventCallback["default"])(function (nextOpen) {
57
+ setMergedOpen(nextOpen);
62
58
  onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(nextOpen);
63
- }, [isControlled, onOpenChange]);
64
- var handleShow = (0, _hooks.useEventCallback)(function () {
59
+ });
60
+ // Deferred auto-close after submit. `cancel` clears any pending close (e.g.
61
+ // when the overlay is hidden first); the timer is also auto-cancelled on
62
+ // unmount.
63
+ var _useDebouncedCallback = (0, _useDebouncedCallback2["default"])(function () {
64
+ return setOpen(false);
65
+ }, submitTimeout),
66
+ scheduleClose = _useDebouncedCallback.run,
67
+ cancelScheduledClose = _useDebouncedCallback.cancel;
68
+ var handleShow = (0, _useEventCallback["default"])(function () {
65
69
  setOpen(true);
66
70
  });
67
- var handleHide = (0, _hooks.useEventCallback)(function () {
68
- if (timeoutRef.current) {
69
- clearTimeout(timeoutRef.current);
70
- }
71
+ var handleHide = (0, _useEventCallback["default"])(function () {
72
+ cancelScheduledClose();
71
73
  setOpen(false);
72
74
  });
73
- var handleFinish = (0, _hooks.useEventCallback)(function (values) {
75
+ var handleFinish = (0, _useEventCallback["default"])(function (values) {
74
76
  return __awaiter(_this, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
75
77
  return _regenerator["default"].wrap(function (_context) {
76
78
  while (1) switch (_context.prev = _context.next) {
@@ -80,9 +82,7 @@ function useOverlayForm(options, onFinish) {
80
82
  case 1:
81
83
  if (autoClose) {
82
84
  if (submitTimeout && submitTimeout > 0) {
83
- timeoutRef.current = setTimeout(function () {
84
- setOpen(false);
85
- }, submitTimeout);
85
+ scheduleClose();
86
86
  } else {
87
87
  setOpen(false);
88
88
  }
@@ -114,4 +114,4 @@ function useOverlayForm(options, onFinish) {
114
114
  };
115
115
  }
116
116
  var _default = exports["default"] = useOverlayForm;
117
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2xheW91dHMvdXNlT3ZlcmxheUZvcm0udHMiLCJjb21wb25lbnRzL1Byb0Zvcm0vbGF5b3V0cy91c2VPdmVybGF5Rm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfaG9va3MiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsInVzZU92ZXJsYXlGb3JtIiwib3B0aW9ucyIsIm9uRmluaXNoIiwiX3RoaXMiLCJjb250cm9sbGVkT3BlbiIsIm9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJ0cmlnZ2VyIiwiX29wdGlvbnMkYXV0b0Nsb3NlIiwiYXV0b0Nsb3NlIiwic3VibWl0VGltZW91dCIsImlzQ29udHJvbGxlZCIsInVuZGVmaW5lZCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsImludGVybmFsT3BlbiIsInNldEludGVybmFsT3BlbiIsIm1lcmdlZE9wZW4iLCJ0aW1lb3V0UmVmIiwidXNlUmVmIiwic2V0T3BlbiIsInVzZUNhbGxiYWNrIiwibmV4dE9wZW4iLCJoYW5kbGVTaG93IiwidXNlRXZlbnRDYWxsYmFjayIsImhhbmRsZUhpZGUiLCJjdXJyZW50IiwiY2xlYXJUaW1lb3V0IiwiaGFuZGxlRmluaXNoIiwidmFsdWVzIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2Iiwic2V0VGltZW91dCIsInN0b3AiLCJ0cmlnZ2VyTm9kZSIsIlJlYWN0IiwiY2xvbmVFbGVtZW50Iiwib25DbGljayIsIl9hIiwib3JpZ2luYWxPbkNsaWNrIiwicHJvcHMiLCJhcmd1bWVudHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBR0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQWlELFNBQUFFLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBSix3QkFBQUksQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMsQ0FBQSxJQUFBZCxDQUFBLG9CQUFBYyxDQUFBLE9BQUFDLGNBQUEs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O0FBQUMsSUFBQXVCLFFBQUEsR0FBQUMsT0FBQSxjQUVjakQsY0FBYyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vbGF5b3V0cy91c2VPdmVybGF5Rm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnQDFtb25leS9ob29rcyc7XG5leHBvcnQgZnVuY3Rpb24gdXNlT3ZlcmxheUZvcm0ob3B0aW9ucywgb25GaW5pc2gpIHtcbiAgICBjb25zdCB7IG9wZW46IGNvbnRyb2xsZWRPcGVuLCBvbk9wZW5DaGFuZ2UsIHRyaWdnZXIsIGF1dG9DbG9zZSA9IHRydWUsIHN1Ym1pdFRpbWVvdXQsIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGlzQ29udHJvbGxlZCA9IGNvbnRyb2xsZWRPcGVuICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgW2ludGVybmFsT3Blbiwgc2V0SW50ZXJuYWxPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBtZXJnZWRPcGVuID0gaXNDb250cm9sbGVkID8gY29udHJvbGxlZE9wZW4gOiBpbnRlcm5hbE9wZW47XG4gICAgY29uc3QgdGltZW91dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBzZXRPcGVuID0gdXNlQ2FsbGJhY2soKG5leHRPcGVuKSA9PiB7XG4gICAgICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICAgICAgICBzZXRJbnRlcm5hbE9wZW4obmV4dE9wZW4pO1xuICAgICAgICB9XG4gICAgICAgIG9uT3BlbkNoYW5nZSA9PT0gbnVsbCB8fCBvbk9wZW5DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uT3BlbkNoYW5nZShuZXh0T3Blbik7XG4gICAgfSwgW2lzQ29udHJvbGxlZCwgb25PcGVuQ2hhbmdlXSk7XG4gICAgY29uc3QgaGFuZGxlU2hvdyA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBzZXRPcGVuKHRydWUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZUhpZGUgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgaWYgKHRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlRmluaXNoID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIChvbkZpbmlzaCA9PT0gbnVsbCB8fCBvbkZpbmlzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2godmFsdWVzKSk7XG4gICAgICAgIGlmIChhdXRvQ2xvc2UpIHtcbiAgICAgICAgICAgIGlmIChzdWJtaXRUaW1lb3V0ICYmIHN1Ym1pdFRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0sIHN1Ym1pdFRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gQ2xvbmUgdHJpZ2dlciB3aXRoIG9uQ2xpY2sgaGFuZGxlclxuICAgIGNvbnN0IHRyaWdnZXJOb2RlID0gdHJpZ2dlclxuICAgICAgICA/IFJlYWN0LmNsb25lRWxlbWVudCh0cmlnZ2VyLCB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVTaG93KCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxPbkNsaWNrID0gKF9hID0gdHJpZ2dlci5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQ2xpY2s7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbE9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxPbkNsaWNrKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIDogbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBtZXJnZWRPcGVuLFxuICAgICAgICB0cmlnZ2VyTm9kZSxcbiAgICAgICAgaGFuZGxlRmluaXNoLFxuICAgICAgICBoYW5kbGVIaWRlLFxuICAgICAgICBoYW5kbGVTaG93LFxuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCB1c2VPdmVybGF5Rm9ybTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
117
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2xheW91dHMvdXNlT3ZlcmxheUZvcm0udHMiLCJjb21wb25lbnRzL1Byb0Zvcm0vbGF5b3V0cy91c2VPdmVybGF5Rm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl91c2VDb250cm9sbGVkU3RhdGUzIiwiX3VzZURlYm91bmNlZENhbGxiYWNrMiIsIl91c2VFdmVudENhbGxiYWNrIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJ2YWx1ZSIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwidXNlT3ZlcmxheUZvcm0iLCJvcHRpb25zIiwib25GaW5pc2giLCJfdGhpcyIsImNvbnRyb2xsZWRPcGVuIiwib3BlbiIsIm9uT3BlbkNoYW5nZSIsInRyaWdnZXIiLCJfb3B0aW9ucyRhdXRvQ2xvc2UiLCJhdXRvQ2xvc2UiLCJzdWJtaXRUaW1lb3V0IiwiX3VzZUNvbnRyb2xsZWRTdGF0ZSIsInVzZUNvbnRyb2xsZWRTdGF0ZSIsIl91c2VDb250cm9sbGVkU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwibWVyZ2VkT3BlbiIsInNldE1lcmdlZE9wZW4iLCJzZXRPcGVuIiwidXNlRXZlbnRDYWxsYmFjayIsIm5leHRPcGVuIiwiX3VzZURlYm91bmNlZENhbGxiYWNrIiwidXNlRGVib3VuY2VkQ2FsbGJhY2siLCJzY2hlZHVsZUNsb3NlIiwicnVuIiwiY2FuY2VsU2NoZWR1bGVkQ2xvc2UiLCJjYW5jZWwiLCJoYW5kbGVTaG93IiwiaGFuZGxlSGlkZSIsImhhbmRsZUZpbmlzaCIsInZhbHVlcyIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsInN0b3AiLCJ0cmlnZ2VyTm9kZSIsIlJlYWN0IiwiY2xvbmVFbGVtZW50Iiwib25DbGljayIsIl9hIiwib3JpZ2luYWxPbkNsaWNrIiwicHJvcHMiLCJhcmd1bWVudHMiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxvQkFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsc0JBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLGlCQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUNKQSxJQUFJSSxTQUFTLEdBQUksVUFBUSxTQUFLQSxTQUFTLElBQUssVUFBVUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLENBQUMsRUFBRUMsU0FBUyxFQUFFO0VBQ3JGLFNBQVNDLEtBQUtBLENBQUNDLEtBQUssRUFBRTtJQUFFLE9BQU9BLEtBQUssWUFBWUgsQ0FBQyxHQUFHRyxLQUFLLEdBQUcsSUFBSUgsQ0FBQyxDQUFDLFVBQVVJLE9BQU8sRUFBRTtNQUFFQSxPQUFPLENBQUNELEtBQUssQ0FBQztJQUFFLENBQUMsQ0FBQztFQUFFO0VBQzNHLE9BQU8sS0FBS0gsQ0FBQyxLQUFLQSxDQUFDLEdBQUdLLE9BQU8sQ0FBQyxFQUFFLFVBQVVELE9BQU8sRUFBRUUsTUFBTSxFQUFFO0lBQ3ZELFNBQVNDLFNBQVNBLENBQUNKLEtBQUssRUFBRTtNQUFFLElBQUk7UUFBRUssSUFBSSxDQUFDUCxTQUFTLENBQUNRLElBQUksQ0FBQ04sS0FBSyxDQUFDLENBQUM7TUFBRSxDQUFDLENBQUMsT0FBT08sQ0FBQyxFQUFFO1FBQUVKLE1BQU0sQ0FBQ0ksQ0FBQyxDQUFDO01BQUU7SUFBRTtJQUMxRixTQUFTQyxRQUFRQSxDQUFDUixLQUFLLEVBQUU7TUFBRSxJQUFJO1FBQUVLLElBQUksQ0FBQ1AsU0FBUyxDQUFD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QUlwQixTQUFTLEVBQUU7Y0FDYixJQUFJQyxhQUFhLElBQUlBLGFBQWEsR0FBRyxDQUFDLEVBQUU7Z0JBQ3RDWSxhQUFhLENBQUEsQ0FBRTtjQUNqQixDQUFDLE1BQU07Z0JBQ0xMLE9BQU8sQ0FBQyxLQUFLLENBQUM7Y0FDaEI7WUFDRjtVQUFDO1VBQUE7WUFBQSxPQUFBaUIsUUFBQSxDQUFBRSxJQUFBO1FBQUE7TUFBQSxHQUFBSixPQUFBO0lBQUEsQ0FDRixFQUFBO0VBQUEsRUFBQztFQUVGO0VBQ0EsSUFBTUssV0FBVyxHQUFHOUIsT0FBTyxnQkFDdkIrQixpQkFBSyxDQUFDQyxZQUFZLENBQUNoQyxPQUFzRCxFQUFFO0lBQ3pFaUMsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBeUI7TUMzQnhCLElBQUlDLEVBQUU7TUQ0QlpmLFVBQVUsQ0FBQSxDQUFFO01BQ1osSUFBTWdCLGVBQWUsR0FBRyxDQUFBRCxFQUFBLEdBQUNsQyxPQUFPLENBQUNvQyxLQUFpQyxNQUFBLElBQUEsSUFBQUYsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVELE9BQU87TUFDM0UsSUFBSSxPQUFPRSxlQUFlLEtBQUssVUFBVSxFQUFFO1FBQ3hDQSxlQUE2QyxDQUFBM0MsS0FBQSxTQUFBNkMsU0FBUSxDQUFDO01BQ3pEO0lBQ0Y7RUMxQkEsQ0QyQkQsQ0FBQyxHQUNGLElBQUk7RUFFUixPQUFPO0lBQ0w3QixVQUFVLEVBQVZBLFVBQVU7SUFDVnNCLFdBQVcsRUFBWEEsV0FBVztJQUNYVCxZQUFZLEVBQVpBLFlBQVk7SUFDWkQsVUFBVSxFQUFWQSxVQUFVO0lBQ1ZELFVBQVUsRUFBVkE7RUMzQkEsQ0Q0QkQ7QUFDSDtBQUFDLElBQUFtQixRQUFBLEdBQUFDLE9BQUEsY0FFYzlDLGNBQWMiLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2xheW91dHMvdXNlT3ZlcmxheUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VDb250cm9sbGVkU3RhdGUgZnJvbSAnQDFtb25leS9ob29rcy91c2VDb250cm9sbGVkU3RhdGUnO1xuaW1wb3J0IHVzZURlYm91bmNlZENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRGVib3VuY2VkQ2FsbGJhY2snO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmV4cG9ydCBmdW5jdGlvbiB1c2VPdmVybGF5Rm9ybShvcHRpb25zLCBvbkZpbmlzaCkge1xuICAgIGNvbnN0IHsgb3BlbjogY29udHJvbGxlZE9wZW4sIG9uT3BlbkNoYW5nZSwgdHJpZ2dlciwgYXV0b0Nsb3NlID0gdHJ1ZSwgc3VibWl0VGltZW91dCwgfSA9IG9wdGlvbnM7XG4gICAgLy8gQ29udHJvbGxlZCB3aGVuIGBjb250cm9sbGVkT3BlbmAgaXMgcGFzc2VkLCBpbnRlcm5hbCBvdGhlcndpc2Ug4oCUIGFuZCBhbHdheXNcbiAgICAvLyBmb3J3YXJkIHRoZSBjaGFuZ2UgdG8gYG9uT3BlbkNoYW5nZWAuXG4gICAgY29uc3QgW21lcmdlZE9wZW4sIHNldE1lcmdlZE9wZW5dID0gdXNlQ29udHJvbGxlZFN0YXRlKGZhbHNlLCBjb250cm9sbGVkT3Blbik7XG4gICAgY29uc3Qgc2V0T3BlbiA9IHVzZUV2ZW50Q2FsbGJhY2soKG5leHRPcGVuKSA9PiB7XG4gICAgICAgIHNldE1lcmdlZE9wZW4obmV4dE9wZW4pO1xuICAgICAgICBvbk9wZW5DaGFuZ2UgPT09IG51bGwgfHwgb25PcGVuQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbk9wZW5DaGFuZ2UobmV4dE9wZW4pO1xuICAgIH0pO1xuICAgIC8vIERlZmVycmVkIGF1dG8tY2xvc2UgYWZ0ZXIgc3VibWl0LiBgY2FuY2VsYCBjbGVhcnMgYW55IHBlbmRpbmcgY2xvc2UgKGUuZy5cbiAgICAvLyB3aGVuIHRoZSBvdmVybGF5IGlzIGhpZGRlbiBmaXJzdCk7IHRoZSB0aW1lciBpcyBhbHNvIGF1dG8tY2FuY2VsbGVkIG9uXG4gICAgLy8gdW5tb3VudC5cbiAgICBjb25zdCB7IHJ1bjogc2NoZWR1bGVDbG9zZSwgY2FuY2VsOiBjYW5jZWxTY2hlZHVsZWRDbG9zZSB9ID0gdXNlRGVib3VuY2VkQ2FsbGJhY2soKCkgPT4gc2V0T3BlbihmYWxzZSksIHN1Ym1pdFRpbWVvdXQpO1xuICAgIGNvbnN0IGhhbmRsZVNob3cgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgc2V0T3Blbih0cnVlKTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVIaWRlID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGNhbmNlbFNjaGVkdWxlZENsb3NlKCk7XG4gICAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZUZpbmlzaCA9IHVzZUV2ZW50Q2FsbGJhY2soKHZhbHVlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCAob25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbHVlcykpO1xuICAgICAgICBpZiAoYXV0b0Nsb3NlKSB7XG4gICAgICAgICAgICBpZiAoc3VibWl0VGltZW91dCAmJiBzdWJtaXRUaW1lb3V0ID4gMCkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlQ2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIENsb25lIHRyaWdnZXIgd2l0aCBvbkNsaWNrIGhhbmRsZXJcbiAgICBjb25zdCB0cmlnZ2VyTm9kZSA9IHRyaWdnZXJcbiAgICAgICAgPyBSZWFjdC5jbG9uZUVsZW1lbnQodHJpZ2dlciwge1xuICAgICAgICAgICAgb25DbGljazogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaGFuZGxlU2hvdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsT25DbGljayA9IChfYSA9IHRyaWdnZXIucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNsaWNrO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxPbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsT25DbGljayguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICA6IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWVyZ2VkT3BlbixcbiAgICAgICAgdHJpZ2dlck5vZGUsXG4gICAgICAgIGhhbmRsZUZpbmlzaCxcbiAgICAgICAgaGFuZGxlSGlkZSxcbiAgICAgICAgaGFuZGxlU2hvdyxcbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlT3ZlcmxheUZvcm07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -27,6 +27,9 @@
27
27
  .om-component-ui-form-item {
28
28
  margin-bottom: var(--om-spacing-300, 12px);
29
29
  }
30
+ .om-component-ui-form-item-large {
31
+ margin-bottom: var(--om-spacing-600, 24px);
32
+ }
30
33
  .om-component-ui-form-item-small {
31
34
  margin-bottom: var(--om-spacing-200, 8px);
32
35
  }
@@ -54,6 +57,9 @@
54
57
  .om-component-ui-form-item .om-component-ui-form-item-error {
55
58
  margin-top: 8px;
56
59
  }
60
+ .om-component-ui-form-item .om-component-ui-form-item-warning {
61
+ margin-top: 8px;
62
+ }
57
63
  .om-component-ui-form-item .om-component-ui-form-item-feedback {
58
64
  margin-top: 8px;
59
65
  }
@@ -1,18 +1,29 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { ButtonProps } from "../Button";
3
- import type { ProFormFieldTransformFn, ProFormValueEnumObj } from './interface';
3
+ import { getNestedValue, setNestedValue } from './core/pathUtils';
4
+ import type { ProFormDateFormatter, ProFormFieldTransformFn, ProFormValueEnumObj, ProFormValueType } from './interface';
5
+ export { getNestedValue, setNestedValue };
4
6
  export declare function stableSerialize(value: unknown): string;
5
7
  export declare function renderTextReadonly(value: unknown): ReactNode;
6
8
  export declare function renderBooleanReadonly(value: unknown): ReactNode;
7
9
  export declare function renderNumericReadonly(value: unknown): ReactNode;
8
- export declare function getNestedValue(obj: Record<string, unknown>, path: string): unknown;
9
- export declare function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): Record<string, unknown>;
10
10
  export declare function resolveWidth(width: 'sm' | 'md' | 'lg' | 'xl' | number): number;
11
11
  export declare function extractButtonProps(config: false | Partial<ButtonProps> | undefined): {
12
12
  disabled: boolean;
13
13
  rest: Partial<ButtonProps>;
14
14
  };
15
15
  export declare function transformSubmitValues(values: Record<string, unknown>, transforms: Record<string, ProFormFieldTransformFn>): Record<string, unknown>;
16
+ export declare const DATE_FORMAT = "YYYY-MM-DD";
17
+ export declare const DATE_TIME_FORMAT = "YYYY-MM-DD HH:mm:ss";
18
+ /** Minimal pattern formatter supporting YYYY / MM / DD / HH / mm / ss tokens. */
19
+ export declare function formatDateByPattern(date: Date, pattern: string): string;
20
+ /**
21
+ * Recursively serialize every `Date` in `values` according to `dateFormatter`.
22
+ * With `'string'`, fields registered as `valueType: 'dateTime'` use
23
+ * `YYYY-MM-DD HH:mm:ss`, everything else `YYYY-MM-DD`. Untouched when the
24
+ * formatter is `false`. Non-Date values pass through unchanged.
25
+ */
26
+ export declare function formatDateValues(values: Record<string, unknown>, dateFormatter: ProFormDateFormatter, valueTypes: Record<string, ProFormValueType>): Record<string, unknown>;
16
27
  export declare function omitNilValues(values: Record<string, unknown>): Record<string, unknown>;
17
28
  export interface ValueEnumOption {
18
29
  label: string;
@@ -4,25 +4,35 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
+ exports.DATE_TIME_FORMAT = exports.DATE_FORMAT = void 0;
7
8
  exports.extractButtonProps = extractButtonProps;
8
- exports.getNestedValue = getNestedValue;
9
+ exports.formatDateByPattern = formatDateByPattern;
10
+ exports.formatDateValues = formatDateValues;
11
+ Object.defineProperty(exports, "getNestedValue", {
12
+ enumerable: true,
13
+ get: function get() {
14
+ return _pathUtils.getNestedValue;
15
+ }
16
+ });
9
17
  exports.omitNilValues = omitNilValues;
10
18
  exports.renderBooleanReadonly = renderBooleanReadonly;
11
19
  exports.renderNumericReadonly = renderNumericReadonly;
12
20
  exports.renderTextReadonly = renderTextReadonly;
13
21
  exports.resolveWidth = resolveWidth;
14
- exports.setNestedValue = setNestedValue;
22
+ Object.defineProperty(exports, "setNestedValue", {
23
+ enumerable: true,
24
+ get: function get() {
25
+ return _pathUtils.setNestedValue;
26
+ }
27
+ });
15
28
  exports.stableSerialize = stableSerialize;
16
29
  exports.transformSubmitValues = transformSubmitValues;
17
30
  exports.valueEnumToOptions = valueEnumToOptions;
18
31
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
19
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
20
32
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
21
33
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
22
34
  var _constants = require("./constants");
23
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
24
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
25
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
35
+ var _pathUtils = require("./core/pathUtils");
26
36
  var __rest = void 0 && (void 0).__rest || function (s, e) {
27
37
  var t = {};
28
38
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
@@ -31,6 +41,10 @@ var __rest = void 0 && (void 0).__rest || function (s, e) {
31
41
  }
32
42
  return t;
33
43
  };
44
+
45
+ // Re-exported for consumers that import the nested-path helpers from `./utils`
46
+ // (ProFormDependency, ProFormList). Canonical definitions live in core/pathUtils.
47
+
34
48
  // ---------------------------------------------------------------------------
35
49
  // stableSerialize — deterministic deep serialization for params comparison
36
50
  // ---------------------------------------------------------------------------
@@ -64,51 +78,6 @@ function renderNumericReadonly(value) {
64
78
  return String(num);
65
79
  }
66
80
  // ---------------------------------------------------------------------------
67
- // Nested path utilities
68
- // ---------------------------------------------------------------------------
69
- function getNestedValue(obj, path) {
70
- var keys = path.split('.');
71
- var current = obj;
72
- var _iterator = _createForOfIteratorHelper(keys),
73
- _step;
74
- try {
75
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
76
- var key = _step.value;
77
- if (current === null || current === undefined || (0, _typeof2["default"])(current) !== 'object') {
78
- return undefined;
79
- }
80
- current = current[key];
81
- }
82
- } catch (err) {
83
- _iterator.e(err);
84
- } finally {
85
- _iterator.f();
86
- }
87
- return current;
88
- }
89
- function setNestedValue(obj, path, value) {
90
- var keys = path.split('.');
91
- if (keys.length === 1) return Object.assign(Object.assign({}, obj), (0, _defineProperty2["default"])({}, path, value));
92
- var result = Object.assign({}, obj);
93
- var current = result;
94
- for (var i = 0; i < keys.length - 1; i++) {
95
- var key = keys[i];
96
- var nextKey = keys[i + 1];
97
- var isNextArray = /^\d+$/.test(nextKey);
98
- if (current[key] === undefined || current[key] === null) {
99
- current[key] = isNextArray ? [] : {};
100
- }
101
- if (Array.isArray(current[key])) {
102
- current[key] = (0, _toConsumableArray2["default"])(current[key]);
103
- } else {
104
- current[key] = Object.assign({}, current[key]);
105
- }
106
- current = current[key];
107
- }
108
- current[keys[keys.length - 1]] = value;
109
- return result;
110
- }
111
- // ---------------------------------------------------------------------------
112
81
  // resolveWidth — convert named width to px or pass through number
113
82
  // ---------------------------------------------------------------------------
114
83
  function resolveWidth(width) {
@@ -143,12 +112,15 @@ function isPlainObject(value) {
143
112
  function transformSubmitValues(values, transforms) {
144
113
  var keys = Object.keys(transforms);
145
114
  if (keys.length === 0) return values;
115
+ // All nested writes go through setNestedValue (clones every object/array on
116
+ // the path) — `values` is the live form state and must never be mutated;
117
+ // only `result` itself (our own shallow copy) may be written directly.
146
118
  var result = Object.assign({}, values);
147
119
  // Process transforms in sorted key order for determinism
148
120
  keys.sort().forEach(function (name) {
149
121
  var transformFn = transforms[name];
150
122
  if (typeof transformFn !== 'function') return;
151
- var rawValue = getNestedValue(result, name);
123
+ var rawValue = (0, _pathUtils.getNestedValue)(result, name);
152
124
  var transformed = transformFn(rawValue, name, result);
153
125
  if (isPlainObject(transformed)) {
154
126
  // If transform returns an object, delete original key and merge to parent
@@ -158,42 +130,87 @@ function transformSubmitValues(values, transforms) {
158
130
  delete result[name];
159
131
  Object.assign(result, transformed);
160
132
  } else {
161
- // Nested field — delete original and merge into parent object
133
+ // Nested field — rebuild the parent without the original key, merged
162
134
  var parentPath = name.slice(0, dotIndex);
163
- var parent = getNestedValue(result, parentPath);
135
+ var parent = (0, _pathUtils.getNestedValue)(result, parentPath);
164
136
  if (isPlainObject(parent)) {
165
137
  var childKey = name.slice(dotIndex + 1);
166
- delete parent[childKey];
167
- Object.assign(parent, transformed);
138
+ var newParent = Object.assign({}, parent);
139
+ delete newParent[childKey];
140
+ Object.assign(newParent, transformed);
141
+ result = (0, _pathUtils.setNestedValue)(result, parentPath, newParent);
168
142
  }
169
143
  }
170
144
  } else {
171
- // Primitive value — replace in-place
172
- var _keys = name.split('.');
173
- if (_keys.length === 1) {
174
- result[name] = transformed;
175
- } else {
176
- var current = result;
177
- for (var i = 0; i < _keys.length - 1; i++) {
178
- var key = _keys[i];
179
- if (!isPlainObject(current[key]) && !Array.isArray(current[key])) {
180
- current[key] = {};
181
- }
182
- current = current[key];
183
- }
184
- current[_keys[_keys.length - 1]] = transformed;
185
- }
145
+ // Primitive value — replace at the (possibly nested) path
146
+ result = name.includes('.') ? (0, _pathUtils.setNestedValue)(result, name, transformed) : Object.assign(Object.assign({}, result), (0, _defineProperty2["default"])({}, name, transformed));
186
147
  }
187
148
  });
188
149
  return result;
189
150
  }
190
151
  // ---------------------------------------------------------------------------
152
+ // Date formatting (form-level dateFormatter, dependency-free)
153
+ // ---------------------------------------------------------------------------
154
+ var DATE_FORMAT = exports.DATE_FORMAT = 'YYYY-MM-DD';
155
+ var DATE_TIME_FORMAT = exports.DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
156
+ /** Minimal pattern formatter supporting YYYY / MM / DD / HH / mm / ss tokens. */
157
+ function formatDateByPattern(date, pattern) {
158
+ var pad = function pad(n) {
159
+ return String(n).padStart(2, '0');
160
+ };
161
+ return pattern.replace(/YYYY/g, String(date.getFullYear())).replace(/MM/g, pad(date.getMonth() + 1)).replace(/DD/g, pad(date.getDate())).replace(/HH/g, pad(date.getHours())).replace(/mm/g, pad(date.getMinutes())).replace(/ss/g, pad(date.getSeconds()));
162
+ }
163
+ /**
164
+ * Recursively serialize every `Date` in `values` according to `dateFormatter`.
165
+ * With `'string'`, fields registered as `valueType: 'dateTime'` use
166
+ * `YYYY-MM-DD HH:mm:ss`, everything else `YYYY-MM-DD`. Untouched when the
167
+ * formatter is `false`. Non-Date values pass through unchanged.
168
+ */
169
+ function formatDateValues(values, dateFormatter, valueTypes) {
170
+ if (dateFormatter === false) return values;
171
+ var formatOne = function formatOne(date, path) {
172
+ if (typeof dateFormatter === 'function') return dateFormatter(date, path);
173
+ if (dateFormatter === 'number') return date.getTime();
174
+ if (dateFormatter === 'string') {
175
+ var pattern = valueTypes[path] === 'dateTime' ? DATE_TIME_FORMAT : DATE_FORMAT;
176
+ return formatDateByPattern(date, pattern);
177
+ }
178
+ return formatDateByPattern(date, dateFormatter);
179
+ };
180
+ var _walk = function walk(value, path) {
181
+ if (value instanceof Date) return formatOne(value, path);
182
+ if (Array.isArray(value)) {
183
+ var changed = false;
184
+ var next = value.map(function (item, index) {
185
+ var walked = _walk(item, path ? "".concat(path, ".").concat(index) : String(index));
186
+ if (walked !== item) changed = true;
187
+ return walked;
188
+ });
189
+ return changed ? next : value;
190
+ }
191
+ if (isPlainObject(value)) {
192
+ var _changed = false;
193
+ var _next = {};
194
+ for (var _i = 0, _Object$keys = Object.keys(value); _i < _Object$keys.length; _i++) {
195
+ var key = _Object$keys[_i];
196
+ var child = value[key];
197
+ var walked = _walk(child, path ? "".concat(path, ".").concat(key) : key);
198
+ if (walked !== child) _changed = true;
199
+ _next[key] = walked;
200
+ }
201
+ return _changed ? _next : value;
202
+ }
203
+ return value;
204
+ };
205
+ return _walk(values, '');
206
+ }
207
+ // ---------------------------------------------------------------------------
191
208
  // omitNilValues — recursively remove null / undefined / '' from object
192
209
  // ---------------------------------------------------------------------------
193
210
  function omitNilValues(values) {
194
211
  var result = {};
195
- for (var _i = 0, _Object$keys = Object.keys(values); _i < _Object$keys.length; _i++) {
196
- var key = _Object$keys[_i];
212
+ for (var _i2 = 0, _Object$keys2 = Object.keys(values); _i2 < _Object$keys2.length; _i2++) {
213
+ var key = _Object$keys2[_i2];
197
214
  var v = values[key];
198
215
  if (v === null || v === undefined || v === '') continue;
199
216
  if (isPlainObject(v)) {
@@ -225,4 +242,4 @@ function valueEnumToOptions(valueEnum) {
225
242
  };
226
243
  });
227
244
  }
228
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS91dGlscy50cyIsImNvbXBvbmVudHMvUHJvRm9ybS91dGlscy5qcyJdLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsImUiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX19yZXN0IiwicCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInN0YWJsZVNlcmlhbGl6ZSIsInVuZGVmaW5lZCIsIlN0cmluZyIsIl90eXBlb2YyIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1hcCIsImpvaW4iLCJrZXlzIiwic29ydCIsImsiLCJyZW5kZXJUZXh0UmVhZG9ubHkiLCJyZW5kZXJCb29sZWFuUmVhZG9ubHkiLCJyZW5kZXJOdW1lcmljUmVhZG9ubHkiLCJudW0iLCJOdW1iZXIiLCJpc05hTiIsImdldE5lc3RlZFZhbHVlIiwib2JqIiwicGF0aCIsInNwbGl0IiwiY3VycmVudCIsIl9pdGVyYXRvciIsIl9zdGVwIiwia2V5IiwiZXJyIiwic2V0TmVzdGVkVmFsdWUiLCJhc3NpZ24iLCJfZGVmaW5lUHJvcGVydHkyIiwicmVzdWx0IiwibmV4dEtleSIsImlzTmV4dEFycmF5IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInJlc29sdmVXaWR0aCIsIndpZHRoIiwiX2EiLCJXSURUSF9TSVpFX01BUCIsIm1kIiwiZXh0cmFjdEJ1dHRvblByb3BzIiwiY29uZmlnIiwiZGlzYWJsZWQiLCJyZXN0IiwiX2NvbmZpZyRkaXNhYmxlZCIsImlzUGxhaW5PYmplY3QiLCJ0cmFuc2Zvcm1TdWJtaXRWYWx1ZXMiLCJ2YWx1ZXMiLCJ0cmFuc2Zvcm1zIiwiZm9yRWFjaCIsInRyYW5zZm9ybUZuIiwicmF3VmFsdWUiLCJ0cmFuc2Zvcm1lZCIsImRvdEluZGV4IiwibGFzdEluZGV4T2YiLCJwYXJlbnRQYXRoIiwicGFyZW50IiwiY2hpbGRLZXkiLCJvbWl0TmlsVmFsdWVzIiwiX2kiLCJfT2JqZWN0JGtleXMiLCJ2IiwiY2xlYW5lZCIsInZhbHVlRW51bVRvT3B0aW9ucyIsInZhbHVlRW51bSIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJfc2xpY2VkVG9BcnJheTIiLCJsYWJlbCIsInRleHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUE2QyxTQUFBQywyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUFRLE1BQUEsSUFBQU4sQ0FBQSxLQUFBRixDQUFBLEdBQUFFLENBQUEsT0FBQU8sRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUEsRUFBQSxXQUFBSCxFQUFBLElBQUFULENBQUEsQ0FBQVEsTUFBQSxLQUFBSyxJQUFBLFdBQUFBLElBQUEsTUFBQUMsS0FBQSxFQUFBZCxDQUFBLENBQUFTLEVBQUEsVUFBQVIsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLFVBQUFBLENBQUEsS0FBQWUsQ0FBQSxFQUFBTCxDQUFBLGdCQUFBTSxTQUFBLGlKQUFBQyxDQUFBLEVBQUFDLENBQUEsT0FBQUMsQ0FBQSxnQkFBQVIsQ0FBQSxXQUFBQSxFQUFBLElBQUFULENBQUEsR0FBQUEsQ0FBQSxDQUFBa0IsSUFBQSxDQUFBcEIsQ0FBQSxNQUFBWSxDQUFBLFdBQUFBLEVBQUEsUUFBQVosQ0FBQSxHQUFBRSxDQUFBLENBQUFtQixJQUFBLFdBQUFILENBQUEsR0FBQWxCLENBQUEsQ0FBQWEsSUFBQSxFQUFBYixDQUFBLEtBQUFDLENBQUEsV0FBQUEsRUFBQUQsQ0FBQSxJQUFBbUIsQ0FBQSxPQUFBRixDQUFBLEdBQUFqQixDQUFBLEtBQUFlLENBQUEsV0FBQUEsRUFBQSxVQUFBRyxDQUFBLFlBQUFoQixDQUFBLGNBQUFBLENBQUEsOEJBQUFpQixDQUFBLFFBQUFGLENBQUE7QUFBQSxTQUFBViw0QkFBQVAsQ0FBQSxFQUFBa0IsQ0FBQSxRQUFBbEIsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBc0IsaUJBQUEsQ0FBQXRCLENBQUEsRUFBQWtCLENBQUEsT0FBQWhCLENBQUEsTUFBQXFCLFFBQUEsQ0FBQUgsSUFBQSxDQUFBcEIsQ0FBQSxFQUFBd0IsS0FBQSw2QkFBQXRCLENBQUEsSUFBQUYsQ0FBQSxDQUFBeUIsV0FBQSxLQUFBdkIsQ0FBQSxHQUFBRixDQUFBLENBQUF5QixXQUFBLENBQUFDLElBQUEsYUFBQXhCLENBQUEsY0FBQUEsQ0FBQSxHQUFBRyxLQUFBLENBQUFzQixJQUFBLENBQUEzQixDQUFBLG9CQUFBRSxDQUFBLCtDQUFBMEIsSUFBQSxDQUFBMUIsQ0FBQSxJQUFBb0IsaUJBQUEsQ0FBQXRCLENBQUEsRUFBQWtCLENBQUE7QUFBQSxTQUFBSSxrQkFBQXRCLENBQUEsRUFBQWtCLENBQUEsYUFBQUEsQ0FBQSxJQUFBQSxDQUFBLEdBQUFsQixDQUFBLENBQUFRLE1BQUEsTUFBQVUsQ0FBQSxHQUFBbEIsQ0FBQSxDQUFBUSxNQUFBLFlBQUFQLENBQUEsTUFBQVcsQ0FBQSxHQUFBUCxLQUFBLENBQUFhLENBQUEsR0FBQWpCLENBQUEsR0FBQWlCLENBQUEsRUFBQWpCLENBQUEsSUFBQVcsQ0FBQSxDQUFBWCxDQUFBLElBQUFELENBQUEsQ0FBQUMsQ0FBQSxVQUFBVyxDQUFBO0FDRjdDLElBQUlpQixNQUFNLEdBQUksVUFBUSxTQUFLQSxNQUFNLElBQUssVUFBVWxCLENBQUMsRUFBRVYsQ0FBQyxFQUFFO0VBQ2xELElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUk0QixDQUFDLElBQUluQixDQUFDLEVBQUUsSUFBSW9CLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNiLElBQUksQ0FBQ1QsQ0FBQyxFQUFFbUIsQ0FBQyxDQUFDLElBQUk3QixDQUFDLENBQUNpQyxPQUFPLENBQUNKLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0U1QixDQUFDLENBQUM0QixDQUFDLENBQUMsR0FBR25CLENBQUMsQ0FBQ21CLENBQUMsQ0FBQztFQUNmLElBQUluQixDQUFDLElBQUksSUFBSSxJQUFJLE9BQU9vQixNQUFNLENBQUNJLHFCQUFxQixLQUFLLFVBQVUsRUFDL0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFTixDQUFDLEdBQUdDLE1BQU0sQ0FBQ0kscUJBQXFCLENBQUN4QixDQUFDLENBQUMsRUFBRXlCLENBQUMsR0FBR04sQ0FBQyxDQUFDdEIsTUFBTSxFQUFFNEIsQ0FBQyxFQUFFLEVBQUU7SUFDcEUsSUFBSW5DLENBQUMsQ0FBQ2lDLE9BQU8sQ0FBQ0osQ0FBQyxDQUFDTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSUwsTUFBTSxDQUFDQyxTQUFTLENBQUNLLG9CQUFvQixDQUFDakIsSUFBSSxDQUFDVCxDQUFDLEVBQUVtQixDQUFDLENBQUNNLENBQUMsQ0FBQyxDQUFDLEVBQzFFbEMsQ0FBQyxDQUFDNEIsQ0FBQyxDQUFDTSxDQUFDLENBQUMsQ0FBQyxHQUFHekIsQ0FBQyxDQUFDbUIsQ0FBQyxDQUFDTSxDQUFDLENBQUMsQ0FBQztFQUN6QjtFQUNKLE9BQU9sQyxDQUFDO0FBQ1osQ0FBQztBRExEO0FBQ0E7QUFDQTtBQUNNLFNBQVVvQyxlQUFlQSxDQUFDeEIsS0FBYyxFQUFBO0VBQzVDLElBQUlBLEtBQUssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS3lCLFNBQVMsRUFBRSxPQUFPQyxNQUFNLENBQUMxQixLQUFLLENBQUM7RUFDL0QsSUFBSSxJQUFBMkIsUUFBQSxhQUFPM0IsS0FBSyxNQUFLLFFBQVEsRUFBRSxPQUFPNEIsSUFBSSxDQUFDQyxTQUFTLENBQUM3QixLQUFLLENBQUM7RUFFM0QsSUFBSVQsS0FBSyxDQUFDQyxPQUFPLENBQUNRLEtBQUssQ0FBQyxFQUFFO0lBQ3hCLE9BQU8sR0FBRyxHQUFHQSxLQUFLLENBQUM4QixHQUFHLENBQUNOLGVBQWUsQ0FBQyxDQUFDTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRztFQUN6RDtFQUVBLElBQU1DLElBQUksR0FBR2YsTUFBTSxDQUFDZSxJQUFJLENBQUNoQyxLQUFnQyxDQUFDLENBQUNpQyxJQUFJLENBQUEsQ0FBRTtFQUNqRSxPQUNFLEdBQUcsR0FDSEQsSUFBSSxDQUNERixHQUFHLENBQ0YsVUFBQ0ksQ0FBQztJQUFBLE9BQ0FOLElBQUksQ0FBQ0MsU0FBUyxDQUFDSyxDQUFDLENBQUMsR0FDakIsR0FBRyxHQUNIVixlQUFlLENBQUV4QixLQUFpQyxDQUFDa0MsQ0FBQyxDQUFDLENBQUM7RUFBQSxFQUN6RCxDQUNBSCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQ1osR0FBRztBQUVQO0FBRUE7QUFDQTtBQUNBO0FBQ00sU0FBVUksa0JBQWtCQSxDQUFDbkMsS0FBYyxFQUFBO0VBQy9DLElBQUlBLEtBQUssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS3lCLFNBQVMsSUFBSXpCLEtBQUssS0FBSyxFQUFFLEVBQUUsT0FBTyxHQUFHO0VBQ3JFLE9BQU8wQixNQUFNLENBQUMxQixLQUFLLENBQUM7QUFDdEI7QUFFTSxTQUFVb0MscUJBQXFCQSxDQUFDcEMsS0FBYyxFQUFBO0VBQ2xELElBQUlBLEtBQUssS0FBSyxJQUFJLElBQUlBLEtBQUssS0FBS3lCLFNBQVMsRUFBRSxPQUFPLEdBQUc7RUFDckQsT0FBT3pCLEtBQUssR0FBRyxLQUFLLEdBQUcsSUFBSTtBQUM3QjtBQUVNLFNBQVVxQyxxQkFBcUJBLENBQUNyQyxLQUFjLEVBQUE7RUFDbEQsSUFBSUEsS0FBSyxLQUFLLElBQUksSUFBSUEsS0FBSyxLQUFLeUIsU0FBUyxJQUFJekIsS0FBSyxLQUFLLEVBQUUsRUFBRSxPQUFPLEdBQUc7RUFDckUsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFLE9BQU8wQixNQUFNLENBQUMxQixLQUFLLENBQUM7RUFDbkQsSUFBTXNDLEdBQUcsR0FBR0MsTUFBTSxDQUFDdkMsS0FBSyxDQUFDO0VBQ3pCLElBQUl1QyxNQUFNLENBQUNDLEtBQUssQ0FBQ0YsR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHO0VBQ2pDLE9BQU9aLE1BQU0sQ0FBQ1ksR0FBRyxDQUFDO0FBQ3BCO0FBRUE7QUFDQTtBQUNBO0FBQ00sU0FBVUcsY0FBY0EsQ0FDNUJDLEdBQTRCLEVBQzVCQyxJQUFZLEVBQUE7RUFFWixJQUFNWCxJQUFJLEdBQUdXLElBQUksQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQztFQUM1QixJQUFJQyxPQUFPLEdBQVlILEdBQUc7RUFBQyxJQUFBSSxTQUFBLEdBQUE3RCwwQkFBQSxDQUNUK0MsSUFBSTtJQUFBZSxLQUFBO0VBQUE7SUFBdEIsS0FBQUQsU0FBQSxDQUFBakQsQ0FBQSxNQUFBa0QsS0FBQSxHQUFBRCxTQUFBLENBQUFoRCxDQUFBLElBQUFDLElBQUEsR0FBd0I7TUFBQSxJQUFiaUQsR0FBRyxHQUFBRCxLQUFBLENBQUEvQyxLQUFBO01BQ1osSUFBSTZDLE9BQU8sS0FBSyxJQUFJLElBQUlBLE9BQU8sS0FBS3BCLFNBQVMsSUFBSSxJQUFBRSxRQUFBLGFBQU9rQixPQUFPLE1BQUssUUFBUSxFQUFFO1FBQzVFLE9BQU9wQixTQUFTO01BQ2xCO01BQ0FvQixPQUFPLEdBQUlBLE9BQW1DLENBQUNHLEdBQUcsQ0FBQztJQUNyRDtFQUFDLFNBQUFDLEdBQUE7SUFBQUgsU0FBQSxDQUFBM0QsQ0FBQSxDQUFBOEQsR0FBQTtFQUFBO0lBQUFILFNBQUEsQ0FBQTdDLENBQUE7RUFBQTtFQUNELE9BQU80QyxPQUFPO0FBQ2hCO0FBRU0sU0FBVUssY0FBY0EsQ0FDNUJSLEdBQTRCLEVBQzVCQyxJQUFZLEVBQ1ozQyxLQUFjLEVBQUE7RUFFZCxJQUFNZ0MsSUFBSSxHQUFHVyxJQUFJLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDNUIsSUFBSVosSUFBSSxDQUFDdEMsTUFBTSxLQUFLLENBQUMsRUFBRSxPQUFBdUIsTUFBQSxDQUFBa0MsTUFBQSxDQUFBbEMsTUFBQSxDQUFBa0MsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFZVCxHQUFHLENBQUEsTUFBQVUsZ0JBQUEsaUJBQUdULElBQUksRUFBRzNDLEtBQUssQ0FBQSxDQUFBO0VBRXJELElBQU1xRCxNQUFNLEdBQUFwQyxNQUFBLENBQUFrQyxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVFULEdBQUcsQ0FBRTtFQUN6QixJQUFJRyxPQUFPLEdBQTRCUSxNQUFNO0VBQzdDLEtBQUssSUFBSS9CLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR1UsSUFBSSxDQUFDdEMsTUFBTSxHQUFHLENBQUMsRUFBRTRCLENBQUMsRUFBRSxFQUFFO0lBQ3hDLElBQU0wQixHQUFHLEdBQUdoQixJQUFJLENBQUNWLENBQUMsQ0FBQztJQUNuQixJQUFNZ0MsT0FBTyxHQUFHdEIsSUFBSSxDQUFDVixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLElBQU1pQyxXQUFXLEdBQUcsT0FBTyxDQUFDekMsSUFBSSxDQUFDd0MsT0FBTyxDQUFDO0lBQ3pDLElBQUlULE9BQU8sQ0FBQ0csR0FBRyxDQUFDLEtBQUt2QixTQUFTLElBQUlvQixPQUFPLENBQUNHLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRTtNQUN2REgsT0FBTyxDQUFDRyxHQUFHLENBQUMsR0FBR08sV0FBVyxHQUFHLEVBQUUsR0FBRyxDQUFBLENBQUU7SUFDdEM7SUFDQSxJQUFJaEUsS0FBSyxDQUFDQyxPQUFPLENBQUNxRCxPQUFPLENBQUNHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7TUFDL0JILE9BQU8sQ0FBQ0csR0FBRyxDQUFDLE9BQUFRLG1CQUFBLGFBQVFYLE9BQU8sQ0FBQ0csR0FBRyxDQUFlLENBQUM7SUFDakQsQ0FBQyxNQUFNO01BQ0xILE9BQU8sQ0FBQ0csR0FBRyxDQUFDLEdBQUEvQixNQUFBLENBQUFrQyxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVNOLE9BQU8sQ0FBQ0csR0FBRyxDQUE2QixDQUFFO0lBQ2pFO0lBQ0FILE9BQU8sR0FBR0EsT0FBTyxDQUFDRyxHQUFHLENBQTRCO0VBQ25EO0VBQ0FILE9BQU8sQ0FBQ2IsSUFBSSxDQUFDQSxJQUFJLENBQUN0QyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR00sS0FBSztFQUN0QyxPQUFPcUQsTUFBTTtBQUNmO0FBRUE7QUFDQTtBQUNBO0FBQ00sU0FBVUksWUFBWUEsQ0FBQ0MsS0FBeUMsRUFBQTtFQ0psRSxJQUFJQyxFQUFFO0VES1IsSUFBSSxPQUFPRCxLQUFLLEtBQUssUUFBUSxFQUFFLE9BQU9BLEtBQUs7RUFDM0MsT0FBTyxDQUFBQyxFQUFBLEdBQUFDLHlCQUFjLENBQUNGLEtBQUssQ0FBQyxNQUFBLElBQUEsSUFBQUMsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUlDLHlCQUFjLENBQUNDLEVBQUU7QUFDbkQ7QUFFQTtBQUNBO0FBQ0E7QUFDTSxTQUFVQyxrQkFBa0JBLENBQ2hDQyxNQUFnRCxFQUFBO0VBRWhELElBQUlBLE1BQU0sS0FBSyxLQUFLLElBQUlBLE1BQU0sS0FBS3RDLFNBQVMsRUFBRTtJQUM1QyxPQUFPO01BQUV1QyxRQUFRLEVBQUUsS0FBSztNQUFFQyxJQUFJLEVBQUUsQ0FBQTtJQUFFLENBQUU7RUFDdEM7RUFDQSxJQUFBQyxnQkFBQSxHQUFzQ0gsTUFBTSxDQUFwQ0MsUUFBUTtJQUFSQSxRQUFRLEdBQUFFLGdCQUFBLGNBQUcsS0FBSyxHQUFBQSxnQkFBQTtJQUFLRCxJQUFJLEdBQUFsRCxNQUFBLENBQUtnRCxNQUFNLEVBQXRDLENBQUEsVUFBQSxDQUE2QixDQUFTO0VBQzVDLE9BQU87SUFBRUMsUUFBUSxFQUFSQSxRQUFRO0lBQUVDLElBQUksRUFBSkE7RUFBSSxDQUFFO0FBQzNCO0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBU0UsYUFBYUEsQ0FBQ25FLEtBQWMsRUFBQTtFQUNuQyxPQUFPQSxLQUFLLEtBQUssSUFBSSxJQUFJLElBQUEyQixRQUFBLGFBQU8zQixLQUFLLE1BQUssUUFBUSxJQUFJLENBQUNULEtBQUssQ0FBQ0MsT0FBTyxDQUFDUSxLQUFLLENBQUM7QUFDN0U7QUFFTSxTQUFVb0UscUJBQXFCQSxDQUNuQ0MsTUFBK0IsRUFDL0JDLFVBQW1ELEVBQUE7RUFFbkQsSUFBTXRDLElBQUksR0FBR2YsTUFBTSxDQUFDZSxJQUFJLENBQUNzQyxVQUFVLENBQUM7RUFDcEMsSUFBSXRDLElBQUksQ0FBQ3RDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTzJFLE1BQU07RUFFcEMsSUFBTWhCLE1BQU0sR0FBQXBDLE1BQUEsQ0FBQWtDLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBUWtCLE1BQU0sQ0FBRTtFQUU1QjtFQUNBckMsSUFBSSxDQUFDQyxJQUFJLENBQUEsQ0FBRSxDQUFDc0MsT0FBTyxDQUFDLFVBQUMzRCxJQUFJLEVBQUk7SUFDM0IsSUFBTTRELFdBQVcsR0FBR0YsVUFBVSxDQUFDMUQsSUFBSSxDQUFDO0lBQ3BDLElBQUksT0FBTzRELFdBQVcsS0FBSyxVQUFVLEVBQUU7SUFFdkMsSUFBTUMsUUFBUSxHQUFHaEMsY0FBYyxDQUFDWSxNQUFNLEVBQUV6QyxJQUFJLENBQUM7SUFDN0MsSUFBTThELFdBQVcsR0FBR0YsV0FBVyxDQUFDQyxRQUFRLEVBQUU3RCxJQUFJLEVBQUV5QyxNQUFNLENBQUM7SUFFdkQsSUFBSWMsYUFBYSxDQUFDTyxXQUFXLENBQUMsRUFBRTtNQUM5QjtNQUNBLElBQU1DLFFBQVEsR0FBRy9ELElBQUksQ0FBQ2dFLFdBQVcsQ0FBQyxHQUFHLENBQUM7TUFDdEMsSUFBSUQsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ25CO1FBQ0EsT0FBT3RCLE1BQU0sQ0FBQ3pDLElBQUksQ0FBQztRQUNuQkssTUFBTSxDQUFDa0MsTUFBTSxDQUFDRSxNQUFNLEVBQUVxQixXQUFXLENBQUM7TUFDcEMsQ0FBQyxNQUFNO1FBQ0w7UUFDQSxJQUFNRyxVQUFVLEdBQUdqRSxJQUFJLENBQUNGLEtBQUssQ0FBQyxDQUFDLEVBQUVpRSxRQUFRLENBQUM7UUFDMUMsSUFBTUcsTUFBTSxHQUFHckMsY0FBYyxDQUFDWSxNQUFNLEVBQUV3QixVQUFVLENBQUM7UUFDakQsSUFBSVYsYUFBYSxDQUFDVyxNQUFNLENBQUMsRUFBRTtVQUN6QixJQUFNQyxRQUFRLEdBQUduRSxJQUFJLENBQUNGLEtBQUssQ0FBQ2lFLFFBQVEsR0FBRyxDQUFDLENBQUM7VUFDekMsT0FBT0csTUFBTSxDQUFDQyxRQUFRLENBQUM7VUFDdkI5RCxNQUFNLENBQUNrQyxNQUFNLENBQUMyQixNQUFNLEVBQUVKLFdBQVcsQ0FBQztRQUNwQztNQUNGO0lBQ0YsQ0FBQyxNQUFNO01BQ0w7TUFDQSxJQUFNMUMsS0FBSSxHQUFHcEIsSUFBSSxDQUFDZ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQztNQUM1QixJQUFJWixLQUFJLENBQUN0QyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCMkQsTUFBTSxDQUFDekMsSUFBSSxDQUFDLEdBQUc4RCxXQUFXO01BQzVCLENBQUMsTUFBTTtRQUNMLElBQUk3QixPQUFPLEdBQTRCUSxNQUFNO1FBQzdDLEtBQUssSUFBSS9CLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR1UsS0FBSSxDQUFDdEMsTUFBTSxHQUFHLENBQUMsRUFBRTRCLENBQUMsRUFBRSxFQUFFO1VBQ3hDLElBQU0wQixHQUFHLEdBQUdoQixLQUFJLENBQUNWLENBQUMsQ0FBQztVQUNuQixJQUFJLENBQUM2QyxhQUFhLENBQUN0QixPQUFPLENBQUNHLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQ3pELEtBQUssQ0FBQ0MsT0FBTyxDQUFDcUQsT0FBTyxDQUFDRyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2hFSCxPQUFPLENBQUNHLEdBQUcsQ0FBQyxHQUFHLENBQUEsQ0FBRTtVQUNuQjtVQUNBSCxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0csR0FBRyxDQUE0QjtRQUNuRDtRQUNBSCxPQUFPLENBQUNiLEtBQUksQ0FBQ0EsS0FBSSxDQUFDdEMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdnRixXQUFXO01BQzlDO0lBQ0Y7RUFDRixDQUFDLENBQUM7RUFFRixPQUFPckIsTUFBTTtBQUNmO0FBRUE7QUFDQTtBQUNBO0FBQ00sU0FBVTJCLGFBQWFBLENBQzNCWCxNQUErQixFQUFBO0VBRS9CLElBQU1oQixNQUFNLEdBQTRCLENBQUEsQ0FBRTtFQUMxQyxTQUFBNEIsRUFBQSxNQUFBQyxZQUFBLEdBQWtCakUsTUFBTSxDQUFDZSxJQUFJLENBQUNxQyxNQUFNLENBQUMsRUFBQVksRUFBQSxHQUFBQyxZQUFBLENBQUF4RixNQUFBLEVBQUF1RixFQUFBLElBQUU7SUFBbEMsSUFBTWpDLEdBQUcsR0FBQWtDLFlBQUEsQ0FBQUQsRUFBQTtJQUNaLElBQU1FLENBQUMsR0FBR2QsTUFBTSxDQUFDckIsR0FBRyxDQUFDO0lBQ3JCLElBQUltQyxDQUFDLEtBQUssSUFBSSxJQUFJQSxDQUFDLEtBQUsxRCxTQUFTLElBQUkwRCxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQy9DLElBQUloQixhQUFhLENBQUNnQixDQUFDLENBQUMsRUFBRTtNQUNwQixJQUFNQyxPQUFPLEdBQUdKLGFBQWEsQ0FBQ0csQ0FBQyxDQUFDO01BQ2hDLElBQUlsRSxNQUFNLENBQUNlLElBQUksQ0FBQ29ELE9BQU8sQ0FBQyxDQUFDMUYsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQzJELE1BQU0sQ0FBQ0wsR0FBRyxDQUFDLEdBQUdvQyxPQUFPO01BQ3ZCO0lBQ0YsQ0FBQyxNQUFNO01BQ0wvQixNQUFNLENBQUNMLEdBQUcsQ0FBQyxHQUFHbUMsQ0FBQztJQUNqQjtFQUNGO0VBQ0EsT0FBTzlCLE1BQU07QUFDZjtBQVdNLFNBQVVnQyxrQkFBa0JBLENBQ2hDQyxTQUE4QixFQUFBO0VBRTlCLE9BQU9yRSxNQUFNLENBQUNzRSxPQUFPLENBQUNELFNBQVMsQ0FBQyxDQUFDeEQsR0FBRyxDQUFDLFVBQUEwRCxJQUFBLEVBQWtCO0lBQUEsSUFBQUMsS0FBQSxPQUFBQyxlQUFBLGFBQUFGLElBQUE7TUFBaEJ4QyxHQUFHLEdBQUF5QyxLQUFBO01BQUUxQixNQUFNLEdBQUEwQixLQUFBO0lBQ2hELElBQUksT0FBTzFCLE1BQU0sS0FBSyxRQUFRLEVBQUU7TUFDOUIsT0FBTztRQUFFNEIsS0FBSyxFQUFFNUIsTUFBTTtRQUFFL0QsS0FBSyxFQUFFZ0Q7TUFBRyxDQUFFO0lBQ3RDO0lBQ0EsT0FBTztNQUFFMkMsS0FBSyxFQUFFNUIsTUFBTSxDQUFDNkIsSUFBSTtNQUFFNUYsS0FBSyxFQUFFZ0QsR0FBRztNQUFFZ0IsUUFBUSxFQUFFRCxNQUFNLENBQUNDO0lBQVEsQ0FBRTtFQUN0RSxDQUFDLENBQUM7QUFDSiIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IFdJRFRIX1NJWkVfTUFQIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBzdGFibGVTZXJpYWxpemUg4oCUIGRldGVybWluaXN0aWMgZGVlcCBzZXJpYWxpemF0aW9uIGZvciBwYXJhbXMgY29tcGFyaXNvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gc3RhYmxlU2VyaWFsaXplKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJ1snICsgdmFsdWUubWFwKHN0YWJsZVNlcmlhbGl6ZSkuam9pbignLCcpICsgJ10nO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpLnNvcnQoKTtcbiAgICByZXR1cm4gKCd7JyArXG4gICAgICAgIGtleXNcbiAgICAgICAgICAgIC5tYXAoKGspID0+IEpTT04uc3RyaW5naWZ5KGspICtcbiAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICBzdGFibGVTZXJpYWxpemUodmFsdWVba10pKVxuICAgICAgICAgICAgLmpvaW4oJywnKSArXG4gICAgICAgICd9Jyk7XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlYWRvbmx5IHJlbmRlcmVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVGV4dFJlYWRvbmx5KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKVxuICAgICAgICByZXR1cm4gJy0nO1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckJvb2xlYW5SZWFkb25seSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gJy0nO1xuICAgIHJldHVybiB2YWx1ZSA/ICdZZXMnIDogJ05vJztcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJOdW1lcmljUmVhZG9ubHkodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpXG4gICAgICAgIHJldHVybiAnLSc7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTihudW0pKVxuICAgICAgICByZXR1cm4gJy0nO1xuICAgIHJldHVybiBTdHJpbmcobnVtKTtcbn1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTmVzdGVkIHBhdGggdXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIHBhdGgpIHtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gb2JqO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXROZXN0ZWRWYWx1ZShvYmosIHBhdGgsIHZhbHVlKSB7XG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9iaiksIHsgW3BhdGhdOiB2YWx1ZSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgIGxldCBjdXJyZW50ID0gcmVzdWx0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgY29uc3QgbmV4dEtleSA9IGtleXNbaSArIDFdO1xuICAgICAgICBjb25zdCBpc05leHRBcnJheSA9IC9eXFxkKyQvLnRlc3QobmV4dEtleSk7XG4gICAgICAgIGlmIChjdXJyZW50W2tleV0gPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50W2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IGlzTmV4dEFycmF5ID8gW10gOiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pKSB7XG4gICAgICAgICAgICBjdXJyZW50W2tleV0gPSBbLi4uY3VycmVudFtrZXldXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgICB9XG4gICAgY3VycmVudFtrZXlzW2tleXMubGVuZ3RoIC0gMV1dID0gdmFsdWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcmVzb2x2ZVdpZHRoIOKAlCBjb252ZXJ0IG5hbWVkIHdpZHRoIHRvIHB4IG9yIHBhc3MgdGhyb3VnaCBudW1iZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXaWR0aCh3aWR0aCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIHJldHVybiAoX2EgPSBXSURUSF9TSVpFX01BUFt3aWR0aF0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFdJRFRIX1NJWkVfTUFQLm1kO1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBleHRyYWN0QnV0dG9uUHJvcHMg4oCUIHNhZmVseSBleHRyYWN0IHByb3BzIGZyb20gYnV0dG9uIGNvbmZpZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEJ1dHRvblByb3BzKGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IGZhbHNlIHx8IGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7IGRpc2FibGVkOiBmYWxzZSwgcmVzdDoge30gfTtcbiAgICB9XG4gICAgY29uc3QgeyBkaXNhYmxlZCA9IGZhbHNlIH0gPSBjb25maWcsIHJlc3QgPSBfX3Jlc3QoY29uZmlnLCBbXCJkaXNhYmxlZFwiXSk7XG4gICAgcmV0dXJuIHsgZGlzYWJsZWQsIHJlc3QgfTtcbn1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdHJhbnNmb3JtU3VibWl0VmFsdWVzIOKAlCBhcHBseSByZWdpc3RlcmVkIGZpZWxkIHRyYW5zZm9ybXMgdG8gZm9ybSB2YWx1ZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1TdWJtaXRWYWx1ZXModmFsdWVzLCB0cmFuc2Zvcm1zKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRyYW5zZm9ybXMpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCB2YWx1ZXMpO1xuICAgIC8vIFByb2Nlc3MgdHJhbnNmb3JtcyBpbiBzb3J0ZWQga2V5IG9yZGVyIGZvciBkZXRlcm1pbmlzbVxuICAgIGtleXMuc29ydCgpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtRm4gPSB0cmFuc2Zvcm1zW25hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybUZuICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IGdldE5lc3RlZFZhbHVlKHJlc3VsdCwgbmFtZSk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtRm4ocmF3VmFsdWUsIG5hbWUsIHJlc3VsdCk7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHRyYW5zZm9ybWVkKSkge1xuICAgICAgICAgICAgLy8gSWYgdHJhbnNmb3JtIHJldHVybnMgYW4gb2JqZWN0LCBkZWxldGUgb3JpZ2luYWwga2V5IGFuZCBtZXJnZSB0byBwYXJlbnRcbiAgICAgICAgICAgIGNvbnN0IGRvdEluZGV4ID0gbmFtZS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICAgICAgaWYgKGRvdEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIFRvcC1sZXZlbCBmaWVsZCDigJQgZGVsZXRlIG9yaWdpbmFsIGFuZCBtZXJnZSBhdCByb290XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFtuYW1lXTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgdHJhbnNmb3JtZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTmVzdGVkIGZpZWxkIOKAlCBkZWxldGUgb3JpZ2luYWwgYW5kIG1lcmdlIGludG8gcGFyZW50IG9iamVjdFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBuYW1lLnNsaWNlKDAsIGRvdEluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXROZXN0ZWRWYWx1ZShyZXN1bHQsIHBhcmVudFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRLZXkgPSBuYW1lLnNsaWNlKGRvdEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJlbnRbY2hpbGRLZXldO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcmVudCwgdHJhbnNmb3JtZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFByaW1pdGl2ZSB2YWx1ZSDigJQgcmVwbGFjZSBpbi1wbGFjZVxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHRyYW5zZm9ybWVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUGxhaW5PYmplY3QoY3VycmVudFtrZXldKSAmJiAhQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2tleV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50W2tleXNba2V5cy5sZW5ndGggLSAxXV0gPSB0cmFuc2Zvcm1lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIG9taXROaWxWYWx1ZXMg4oCUIHJlY3Vyc2l2ZWx5IHJlbW92ZSBudWxsIC8gdW5kZWZpbmVkIC8gJycgZnJvbSBvYmplY3Rcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIG9taXROaWxWYWx1ZXModmFsdWVzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWVzKSkge1xuICAgICAgICBjb25zdCB2ID0gdmFsdWVzW2tleV07XG4gICAgICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSAnJylcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdCh2KSkge1xuICAgICAgICAgICAgY29uc3QgY2xlYW5lZCA9IG9taXROaWxWYWx1ZXModik7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY2xlYW5lZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gY2xlYW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRW51bVRvT3B0aW9ucyh2YWx1ZUVudW0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWVFbnVtKS5tYXAoKFtrZXksIGNvbmZpZ10pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogY29uZmlnLCB2YWx1ZToga2V5IH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbGFiZWw6IGNvbmZpZy50ZXh0LCB2YWx1ZToga2V5LCBkaXNhYmxlZDogY29uZmlnLmRpc2FibGVkIH07XG4gICAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
245
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS91dGlscy50cyIsImNvbXBvbmVudHMvUHJvRm9ybS91dGlscy5qcyJdLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9wYXRoVXRpbHMiLCJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInN0YWJsZVNlcmlhbGl6ZSIsInZhbHVlIiwidW5kZWZpbmVkIiwiU3RyaW5nIiwiX3R5cGVvZjIiLCJKU09OIiwic3RyaW5naWZ5IiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiam9pbiIsImtleXMiLCJzb3J0IiwiayIsInJlbmRlclRleHRSZWFkb25seSIsInJlbmRlckJvb2xlYW5SZWFkb25seSIsInJlbmRlck51bWVyaWNSZWFkb25seSIsIm51bSIsIk51bWJlciIsImlzTmFOIiwicmVzb2x2ZVdpZHRoIiwid2lkdGgiLCJfYSIsIldJRFRIX1NJWkVfTUFQIiwibWQiLCJleHRyYWN0QnV0dG9uUHJvcHMiLCJjb25maWciLCJkaXNhYmxlZCIsInJlc3QiLCJfY29uZmlnJGRpc2FibGVkIiwiaXNQbGFpbk9iamVjdCIsInRyYW5zZm9ybVN1Ym1pdFZhbHVlcyIsInZhbHVlcyIsInRyYW5zZm9ybXMiLCJyZXN1bHQiLCJhc3NpZ24iLCJmb3JFYWNoIiwibmFtZSIsInRyYW5zZm9ybUZuIiwicmF3VmFsdWUiLCJnZXROZXN0ZWRWYWx1ZSIsInRyYW5zZm9ybWVkIiwiZG90SW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudFBhdGgiLCJzbGljZSIsInBhcmVudCIsImNoaWxkS2V5IiwibmV3UGFyZW50Iiwic2V0TmVzdGVkVmFsdWUiLCJpbmNsdWRlcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJEQVRFX0ZPUk1BVCIsImV4cG9ydHMiLCJEQVRFX1RJTUVfRk9STUFUIiwiZm9ybWF0RGF0ZUJ5UGF0dGVybiIsImRhdGUiLCJwYXR0ZXJuIiwicGFkIiwibiIsInBhZFN0YXJ0IiwicmVwbGFjZSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImZvcm1hdERhdGVWYWx1ZXMiLCJkYXRlRm9ybWF0dGVyIiwidmFsdWVUeXBlcyIsImZvcm1hdE9uZSIsInBhdGgiLCJnZXRUaW1lIiwid2FsayIsIkRhdGUiLCJjaGFuZ2VkIiwibmV4dCIsIml0ZW0iLCJpbmRleCIsIndhbGtlZCIsImNvbmNhdCIsIl9pIiwiX09iamVjdCRrZXlzIiwia2V5IiwiY2hpbGQiLCJvbWl0TmlsVmFsdWVzIiwiX2kyIiwiX09iamVjdCRrZXlzMiIsInYiLCJjbGVhbmVkIiwidmFsdWVFbnVtVG9PcHRpb25zIiwidmFsdWVFbnVtIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsIl9zbGljZWRUb0FycmF5MiIsImxhYmVsIiwidGV4dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FDSEEsSUFBSUUsTUFBTSxHQUFJLFVBQVEsU0FBS0EsTUFBTSxJQUFLLFVBQVVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQ2xELElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUlDLENBQUMsSUFBSUgsQ0FBQyxFQUFFLElBQUlJLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUMsSUFBSUYsQ0FBQyxDQUFDTyxPQUFPLENBQUNMLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0VELENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLEdBQUdILENBQUMsQ0FB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O0lBQ0YsQ0FBQyxNQUFNO01BQ0x4RCxNQUFNLENBQUNrRCxHQUFHLENBQUMsR0FBR0ssQ0FBQztJQUNqQjtFQUNGO0VBQ0EsT0FBT3ZELE1BQU07QUFDZjtBQVdNLFNBQVV5RCxrQkFBa0JBLENBQ2hDQyxTQUE4QixFQUFBO0VBRTlCLE9BQU9yRyxNQUFNLENBQUNzRyxPQUFPLENBQUNELFNBQVMsQ0FBQyxDQUFDbkYsR0FBRyxDQUFDLFVBQUFxRixJQUFBLEVBQWtCO0lBQUEsSUFBQUMsS0FBQSxPQUFBQyxlQUFBLGFBQUFGLElBQUE7TUFBaEJWLEdBQUcsR0FBQVcsS0FBQTtNQUFFckUsTUFBTSxHQUFBcUUsS0FBQTtJQUNoRCxJQUFJLE9BQU9yRSxNQUFNLEtBQUssUUFBUSxFQUFFO01BQzlCLE9BQU87UUFBRXVFLEtBQUssRUFBRXZFLE1BQU07UUFBRXpCLEtBQUssRUFBRW1GO01BQUcsQ0FBRTtJQUN0QztJQUNBLE9BQU87TUFBRWEsS0FBSyxFQUFFdkUsTUFBTSxDQUFDd0UsSUFBSTtNQUFFakcsS0FBSyxFQUFFbUYsR0FBRztNQUFFekQsUUFBUSxFQUFFRCxNQUFNLENBQUNDO0lBQVEsQ0FBRTtFQUN0RSxDQUFDLENBQUM7QUFDSiIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vdXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IFdJRFRIX1NJWkVfTUFQIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0TmVzdGVkVmFsdWUsIHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi9jb3JlL3BhdGhVdGlscyc7XG4vLyBSZS1leHBvcnRlZCBmb3IgY29uc3VtZXJzIHRoYXQgaW1wb3J0IHRoZSBuZXN0ZWQtcGF0aCBoZWxwZXJzIGZyb20gYC4vdXRpbHNgXG4vLyAoUHJvRm9ybURlcGVuZGVuY3ksIFByb0Zvcm1MaXN0KS4gQ2Fub25pY2FsIGRlZmluaXRpb25zIGxpdmUgaW4gY29yZS9wYXRoVXRpbHMuXG5leHBvcnQgeyBnZXROZXN0ZWRWYWx1ZSwgc2V0TmVzdGVkVmFsdWUgfTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gc3RhYmxlU2VyaWFsaXplIOKAlCBkZXRlcm1pbmlzdGljIGRlZXAgc2VyaWFsaXphdGlvbiBmb3IgcGFyYW1zIGNvbXBhcmlzb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIHN0YWJsZVNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JylcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICdbJyArIHZhbHVlLm1hcChzdGFibGVTZXJpYWxpemUpLmpvaW4oJywnKSArICddJztcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCk7XG4gICAgcmV0dXJuICgneycgK1xuICAgICAgICBrZXlzXG4gICAgICAgICAgICAubWFwKChrKSA9PiBKU09OLnN0cmluZ2lmeShrKSArXG4gICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgc3RhYmxlU2VyaWFsaXplKHZhbHVlW2tdKSlcbiAgICAgICAgICAgIC5qb2luKCcsJykgK1xuICAgICAgICAnfScpO1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWFkb25seSByZW5kZXJlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRleHRSZWFkb25seSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJylcbiAgICAgICAgcmV0dXJuICctJztcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJCb29sZWFuUmVhZG9ubHkodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuICctJztcbiAgICByZXR1cm4gdmFsdWUgPyAnWWVzJyA6ICdObyc7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTnVtZXJpY1JlYWRvbmx5KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKVxuICAgICAgICByZXR1cm4gJy0nO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4obnVtKSlcbiAgICAgICAgcmV0dXJuICctJztcbiAgICByZXR1cm4gU3RyaW5nKG51bSk7XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHJlc29sdmVXaWR0aCDigJQgY29udmVydCBuYW1lZCB3aWR0aCB0byBweCBvciBwYXNzIHRocm91Z2ggbnVtYmVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlV2lkdGgod2lkdGgpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHR5cGVvZiB3aWR0aCA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICByZXR1cm4gKF9hID0gV0lEVEhfU0laRV9NQVBbd2lkdGhdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBXSURUSF9TSVpFX01BUC5tZDtcbn1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gZXh0cmFjdEJ1dHRvblByb3BzIOKAlCBzYWZlbHkgZXh0cmFjdCBwcm9wcyBmcm9tIGJ1dHRvbiBjb25maWdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RCdXR0b25Qcm9wcyhjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSBmYWxzZSB8fCBjb25maWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geyBkaXNhYmxlZDogZmFsc2UsIHJlc3Q6IHt9IH07XG4gICAgfVxuICAgIGNvbnN0IHsgZGlzYWJsZWQgPSBmYWxzZSB9ID0gY29uZmlnLCByZXN0ID0gX19yZXN0KGNvbmZpZywgW1wiZGlzYWJsZWRcIl0pO1xuICAgIHJldHVybiB7IGRpc2FibGVkLCByZXN0IH07XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHRyYW5zZm9ybVN1Ym1pdFZhbHVlcyDigJQgYXBwbHkgcmVnaXN0ZXJlZCBmaWVsZCB0cmFuc2Zvcm1zIHRvIGZvcm0gdmFsdWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtU3VibWl0VmFsdWVzKHZhbHVlcywgdHJhbnNmb3Jtcykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0cmFuc2Zvcm1zKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgLy8gQWxsIG5lc3RlZCB3cml0ZXMgZ28gdGhyb3VnaCBzZXROZXN0ZWRWYWx1ZSAoY2xvbmVzIGV2ZXJ5IG9iamVjdC9hcnJheSBvblxuICAgIC8vIHRoZSBwYXRoKSDigJQgYHZhbHVlc2AgaXMgdGhlIGxpdmUgZm9ybSBzdGF0ZSBhbmQgbXVzdCBuZXZlciBiZSBtdXRhdGVkO1xuICAgIC8vIG9ubHkgYHJlc3VsdGAgaXRzZWxmIChvdXIgb3duIHNoYWxsb3cgY29weSkgbWF5IGJlIHdyaXR0ZW4gZGlyZWN0bHkuXG4gICAgbGV0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIHZhbHVlcyk7XG4gICAgLy8gUHJvY2VzcyB0cmFuc2Zvcm1zIGluIHNvcnRlZCBrZXkgb3JkZXIgZm9yIGRldGVybWluaXNtXG4gICAga2V5cy5zb3J0KCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1GbiA9IHRyYW5zZm9ybXNbbmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtRm4gIT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gZ2V0TmVzdGVkVmFsdWUocmVzdWx0LCBuYW1lKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1GbihyYXdWYWx1ZSwgbmFtZSwgcmVzdWx0KTtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodHJhbnNmb3JtZWQpKSB7XG4gICAgICAgICAgICAvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhbiBvYmplY3QsIGRlbGV0ZSBvcmlnaW5hbCBrZXkgYW5kIG1lcmdlIHRvIHBhcmVudFxuICAgICAgICAgICAgY29uc3QgZG90SW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgICAgICBpZiAoZG90SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8gVG9wLWxldmVsIGZpZWxkIOKAlCBkZWxldGUgb3JpZ2luYWwgYW5kIG1lcmdlIGF0IHJvb3RcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W25hbWVdO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB0cmFuc2Zvcm1lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBOZXN0ZWQgZmllbGQg4oCUIHJlYnVpbGQgdGhlIHBhcmVudCB3aXRob3V0IHRoZSBvcmlnaW5hbCBrZXksIG1lcmdlZFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBuYW1lLnNsaWNlKDAsIGRvdEluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXROZXN0ZWRWYWx1ZShyZXN1bHQsIHBhcmVudFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRLZXkgPSBuYW1lLnNsaWNlKGRvdEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhcmVudCA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdQYXJlbnRbY2hpbGRLZXldO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld1BhcmVudCwgdHJhbnNmb3JtZWQpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZXROZXN0ZWRWYWx1ZShyZXN1bHQsIHBhcmVudFBhdGgsIG5ld1BhcmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUHJpbWl0aXZlIHZhbHVlIOKAlCByZXBsYWNlIGF0IHRoZSAocG9zc2libHkgbmVzdGVkKSBwYXRoXG4gICAgICAgICAgICByZXN1bHQgPSBuYW1lLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHJlc3VsdCwgbmFtZSwgdHJhbnNmb3JtZWQpXG4gICAgICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3VsdCksIHsgW25hbWVdOiB0cmFuc2Zvcm1lZCB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERhdGUgZm9ybWF0dGluZyAoZm9ybS1sZXZlbCBkYXRlRm9ybWF0dGVyLCBkZXBlbmRlbmN5LWZyZWUpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCBEQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcbmV4cG9ydCBjb25zdCBEQVRFX1RJTUVfRk9STUFUID0gJ1lZWVktTU0tREQgSEg6bW06c3MnO1xuLyoqIE1pbmltYWwgcGF0dGVybiBmb3JtYXR0ZXIgc3VwcG9ydGluZyBZWVlZIC8gTU0gLyBERCAvIEhIIC8gbW0gLyBzcyB0b2tlbnMuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGF0ZUJ5UGF0dGVybihkYXRlLCBwYXR0ZXJuKSB7XG4gICAgY29uc3QgcGFkID0gKG4pID0+IFN0cmluZyhuKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBwYXR0ZXJuXG4gICAgICAgIC5yZXBsYWNlKC9ZWVlZL2csIFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpKVxuICAgICAgICAucmVwbGFjZSgvTU0vZywgcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpKVxuICAgICAgICAucmVwbGFjZSgvREQvZywgcGFkKGRhdGUuZ2V0RGF0ZSgpKSlcbiAgICAgICAgLnJlcGxhY2UoL0hIL2csIHBhZChkYXRlLmdldEhvdXJzKCkpKVxuICAgICAgICAucmVwbGFjZSgvbW0vZywgcGFkKGRhdGUuZ2V0TWludXRlcygpKSlcbiAgICAgICAgLnJlcGxhY2UoL3NzL2csIHBhZChkYXRlLmdldFNlY29uZHMoKSkpO1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZXJpYWxpemUgZXZlcnkgYERhdGVgIGluIGB2YWx1ZXNgIGFjY29yZGluZyB0byBgZGF0ZUZvcm1hdHRlcmAuXG4gKiBXaXRoIGAnc3RyaW5nJ2AsIGZpZWxkcyByZWdpc3RlcmVkIGFzIGB2YWx1ZVR5cGU6ICdkYXRlVGltZSdgIHVzZVxuICogYFlZWVktTU0tREQgSEg6bW06c3NgLCBldmVyeXRoaW5nIGVsc2UgYFlZWVktTU0tRERgLiBVbnRvdWNoZWQgd2hlbiB0aGVcbiAqIGZvcm1hdHRlciBpcyBgZmFsc2VgLiBOb24tRGF0ZSB2YWx1ZXMgcGFzcyB0aHJvdWdoIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERhdGVWYWx1ZXModmFsdWVzLCBkYXRlRm9ybWF0dGVyLCB2YWx1ZVR5cGVzKSB7XG4gICAgaWYgKGRhdGVGb3JtYXR0ZXIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIGNvbnN0IGZvcm1hdE9uZSA9IChkYXRlLCBwYXRoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZUZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHJldHVybiBkYXRlRm9ybWF0dGVyKGRhdGUsIHBhdGgpO1xuICAgICAgICBpZiAoZGF0ZUZvcm1hdHRlciA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIGlmIChkYXRlRm9ybWF0dGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IHZhbHVlVHlwZXNbcGF0aF0gPT09ICdkYXRlVGltZScgPyBEQVRFX1RJTUVfRk9STUFUIDogREFURV9GT1JNQVQ7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZUJ5UGF0dGVybihkYXRlLCBwYXR0ZXJuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZUJ5UGF0dGVybihkYXRlLCBkYXRlRm9ybWF0dGVyKTtcbiAgICB9O1xuICAgIGNvbnN0IHdhbGsgPSAodmFsdWUsIHBhdGgpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPbmUodmFsdWUsIHBhdGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdmFsdWUubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdhbGtlZCA9IHdhbGsoaXRlbSwgcGF0aCA/IGAke3BhdGh9LiR7aW5kZXh9YCA6IFN0cmluZyhpbmRleCkpO1xuICAgICAgICAgICAgICAgIGlmICh3YWxrZWQgIT09IGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB3YWxrZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkID8gbmV4dCA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCB3YWxrZWQgPSB3YWxrKGNoaWxkLCBwYXRoID8gYCR7cGF0aH0uJHtrZXl9YCA6IGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHdhbGtlZCAhPT0gY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG5leHRba2V5XSA9IHdhbGtlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkID8gbmV4dCA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIHJldHVybiB3YWxrKHZhbHVlcywgJycpO1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBvbWl0TmlsVmFsdWVzIOKAlCByZWN1cnNpdmVseSByZW1vdmUgbnVsbCAvIHVuZGVmaW5lZCAvICcnIGZyb20gb2JqZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBvbWl0TmlsVmFsdWVzKHZhbHVlcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgdiA9IHZhbHVlc1trZXldO1xuICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gJycpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsZWFuZWQgPSBvbWl0TmlsVmFsdWVzKHYpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNsZWFuZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGNsZWFuZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUVudW1Ub09wdGlvbnModmFsdWVFbnVtKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlRW51bSkubWFwKChba2V5LCBjb25maWddKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IGNvbmZpZywgdmFsdWU6IGtleSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGxhYmVsOiBjb25maWcudGV4dCwgdmFsdWU6IGtleSwgZGlzYWJsZWQ6IGNvbmZpZy5kaXNhYmxlZCB9O1xuICAgIH0pO1xufSJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=