@1money/component-ui 0.0.71 → 0.0.74

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 (103) hide show
  1. package/es/components/ProForm/ProForm.d.ts +10 -2
  2. package/es/components/ProForm/ProForm.js +241 -55
  3. package/es/components/ProForm/ProFormDependency.d.ts +11 -2
  4. package/es/components/ProForm/ProFormDependency.js +29 -133
  5. package/es/components/ProForm/ProFormItem.js +146 -52
  6. package/es/components/ProForm/ProFormList.js +114 -62
  7. package/es/components/ProForm/SchemaForm.d.ts +7 -0
  8. package/es/components/ProForm/SchemaForm.js +103 -0
  9. package/es/components/ProForm/Submitter.js +26 -5
  10. package/es/components/ProForm/context.d.ts +30 -3
  11. package/es/components/ProForm/context.js +69 -10
  12. package/es/components/ProForm/core/constants.d.ts +12 -3
  13. package/es/components/ProForm/core/constants.js +18 -7
  14. package/es/components/ProForm/core/formStore.d.ts +24 -0
  15. package/es/components/ProForm/core/formStore.js +101 -0
  16. package/es/components/ProForm/core/hooks/useForm.d.ts +4 -1
  17. package/es/components/ProForm/core/hooks/useForm.js +336 -212
  18. package/es/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  19. package/es/components/ProForm/core/hooks/useFormCore.js +151 -93
  20. package/es/components/ProForm/core/interface.d.ts +33 -12
  21. package/es/components/ProForm/core/runRules.d.ts +20 -8
  22. package/es/components/ProForm/core/runRules.js +105 -50
  23. package/es/components/ProForm/core/useFormItem.d.ts +10 -1
  24. package/es/components/ProForm/core/useFormItem.js +141 -56
  25. package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
  26. package/es/components/ProForm/fields/ProFormFieldSet.js +20 -7
  27. package/es/components/ProForm/fields/createProFormField.js +61 -32
  28. package/es/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  29. package/es/components/ProForm/hooks/useFieldRequest.js +54 -9
  30. package/es/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  31. package/es/components/ProForm/hooks/useUrlSync.js +170 -0
  32. package/es/components/ProForm/index.d.ts +12 -5
  33. package/es/components/ProForm/index.js +7 -2
  34. package/es/components/ProForm/interface.d.ts +185 -28
  35. package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
  36. package/es/components/ProForm/layouts/DialogForm.js +18 -7
  37. package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  38. package/es/components/ProForm/layouts/DrawerForm.js +17 -7
  39. package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  40. package/es/components/ProForm/layouts/QueryFilter.js +47 -71
  41. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  42. package/es/components/ProForm/layouts/useOverlayForm.js +27 -8
  43. package/es/components/ProForm/style/ProForm.css +4 -4
  44. package/es/components/ProForm/utils.d.ts +12 -1
  45. package/es/components/ProForm/utils.js +101 -28
  46. package/es/components/ProTable/ProTable.js +3 -3
  47. package/es/components/Tooltip/style/Tooltip.css +1 -0
  48. package/es/index.css +1 -1
  49. package/es/index.d.ts +2 -2
  50. package/es/index.js +2 -2
  51. package/lib/components/ProForm/ProForm.d.ts +10 -2
  52. package/lib/components/ProForm/ProForm.js +239 -53
  53. package/lib/components/ProForm/ProFormDependency.d.ts +11 -2
  54. package/lib/components/ProForm/ProFormDependency.js +30 -135
  55. package/lib/components/ProForm/ProFormItem.js +143 -48
  56. package/lib/components/ProForm/ProFormList.js +112 -60
  57. package/lib/components/ProForm/SchemaForm.d.ts +7 -0
  58. package/lib/components/ProForm/SchemaForm.js +110 -0
  59. package/lib/components/ProForm/Submitter.js +26 -5
  60. package/lib/components/ProForm/context.d.ts +30 -3
  61. package/lib/components/ProForm/context.js +69 -10
  62. package/lib/components/ProForm/core/constants.d.ts +12 -3
  63. package/lib/components/ProForm/core/constants.js +19 -8
  64. package/lib/components/ProForm/core/formStore.d.ts +24 -0
  65. package/lib/components/ProForm/core/formStore.js +110 -0
  66. package/lib/components/ProForm/core/hooks/useForm.d.ts +4 -1
  67. package/lib/components/ProForm/core/hooks/useForm.js +336 -212
  68. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  69. package/lib/components/ProForm/core/hooks/useFormCore.js +150 -92
  70. package/lib/components/ProForm/core/interface.d.ts +33 -12
  71. package/lib/components/ProForm/core/runRules.d.ts +20 -8
  72. package/lib/components/ProForm/core/runRules.js +106 -50
  73. package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
  74. package/lib/components/ProForm/core/useFormItem.js +138 -53
  75. package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
  76. package/lib/components/ProForm/fields/ProFormFieldSet.js +19 -6
  77. package/lib/components/ProForm/fields/createProFormField.js +61 -32
  78. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  79. package/lib/components/ProForm/hooks/useFieldRequest.js +53 -8
  80. package/lib/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  81. package/lib/components/ProForm/hooks/useUrlSync.js +178 -0
  82. package/lib/components/ProForm/index.d.ts +12 -5
  83. package/lib/components/ProForm/index.js +16 -1
  84. package/lib/components/ProForm/interface.d.ts +185 -28
  85. package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
  86. package/lib/components/ProForm/layouts/DialogForm.js +18 -7
  87. package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  88. package/lib/components/ProForm/layouts/DrawerForm.js +17 -7
  89. package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  90. package/lib/components/ProForm/layouts/QueryFilter.js +46 -70
  91. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  92. package/lib/components/ProForm/layouts/useOverlayForm.js +30 -8
  93. package/lib/components/ProForm/style/ProForm.css +4 -4
  94. package/lib/components/ProForm/utils.d.ts +12 -1
  95. package/lib/components/ProForm/utils.js +104 -28
  96. package/lib/components/ProTable/ProTable.js +3 -3
  97. package/lib/components/Tooltip/style/Tooltip.css +1 -0
  98. package/lib/index.css +1 -1
  99. package/lib/index.d.ts +2 -2
  100. package/lib/index.js +13 -1
  101. package/package.json +1 -1
  102. package/scripts/mcp-server/examples.generated.json +90 -0
  103. package/scripts/mcp-server/index.generated.json +1866 -212
@@ -1,4 +1,13 @@
1
- import React from 'react';
1
+ import type { ReactElement } from 'react';
2
2
  import type { ProFormDependencyProps } from './interface';
3
- export declare const ProFormDependency: React.NamedExoticComponent<ProFormDependencyProps>;
3
+ /**
4
+ * Generic-aware component type — `memo()` erases generics, so the export is
5
+ * re-asserted to keep `<ProForm.Dependency<MyValues> name={['a']}>` fully
6
+ * typed (autocompleted `name`, typed `form` in children).
7
+ */
8
+ export interface ProFormDependencyComponent {
9
+ <Values = Record<string, unknown>>(props: ProFormDependencyProps<Values>): ReactElement | null;
10
+ displayName?: string;
11
+ }
12
+ export declare const ProFormDependency: ProFormDependencyComponent;
4
13
  export default ProFormDependency;
@@ -1,53 +1,25 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports["default"] = exports.ProFormDependency = void 0;
9
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
8
  var _jsxRuntime = require("react/jsx-runtime");
11
9
  var _react = _interopRequireWildcard(require("react"));
12
- var _context5 = require("./context");
10
+ var _context = require("./context");
11
+ var _formStore = require("./core/formStore");
13
12
  var _utils = require("./utils");
14
13
  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
14
  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; }
16
- var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
17
- function adopt(value) {
18
- return value instanceof P ? value : new P(function (resolve) {
19
- resolve(value);
20
- });
21
- }
22
- return new (P || (P = Promise))(function (resolve, reject) {
23
- function fulfilled(value) {
24
- try {
25
- step(generator.next(value));
26
- } catch (e) {
27
- reject(e);
28
- }
29
- }
30
- function rejected(value) {
31
- try {
32
- step(generator["throw"](value));
33
- } catch (e) {
34
- reject(e);
35
- }
36
- }
37
- function step(result) {
38
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
39
- }
40
- step((generator = generator.apply(thisArg, _arguments || [])).next());
41
- });
42
- };
43
15
  var ProFormDependencyBase = function ProFormDependencyBase(_ref) {
44
16
  var name = _ref.name,
45
17
  ignoreFormListField = _ref.ignoreFormListField,
46
18
  children = _ref.children;
47
- var _useProFormContext = (0, _context5.useProFormContext)(),
48
- values = _useProFormContext.values,
49
- formInstance = _useProFormContext.formInstance;
50
- var formListCtx = (0, _context5.useFormListContext)();
19
+ var _useProFormStable = (0, _context.useProFormStable)(),
20
+ formInstance = _useProFormStable.formInstance;
21
+ var store = (0, _context.useProFormStore)();
22
+ var formListCtx = (0, _context.useFormListContext)();
51
23
  // Resolve the actual paths to watch, considering FormList scope
52
24
  var resolvedPaths = (0, _react.useMemo)(function () {
53
25
  var shouldPrefix = !ignoreFormListField && formListCtx.listName !== undefined;
@@ -55,116 +27,39 @@ var ProFormDependencyBase = function ProFormDependencyBase(_ref) {
55
27
  return shouldPrefix ? "".concat(formListCtx.listName, ".").concat(fieldName) : fieldName;
56
28
  });
57
29
  }, [name, ignoreFormListField, formListCtx.listName]);
30
+ // Subscribe ONLY to the watched paths: a commit that leaves every watched
31
+ // value Object.is-equal short-circuits, so children are NOT re-invoked when
32
+ // unrelated fields change. Reactivity tracks the RAW values; the payload
33
+ // below is derived from the FORMATTED values.
34
+ var watchedArray = (0, _formStore.useStoreSelector)(store, function (state) {
35
+ return resolvedPaths.map(function (path) {
36
+ return path.includes('.') ? (0, _utils.getNestedValue)(state.values, path) : state.values[path];
37
+ });
38
+ }, _formStore.shallowEqualArrays);
58
39
  var watchedValues = (0, _react.useMemo)(function () {
40
+ // Children receive FORMATTED values (dateFormatter + transform applied),
41
+ // matching what onFinish would submit for those fields. A transform that
42
+ // RENAMES its key deletes the original path from the formatted object —
43
+ // fall back to the raw value so the watcher still sees the field.
44
+ var formatted = formInstance.getFieldFormatValueObject();
59
45
  var result = {};
60
46
  for (var i = 0; i < name.length; i++) {
61
- var originalName = name[i];
62
- var resolvedPath = resolvedPaths[i];
63
47
  // Use the original name as key so children get clean keys
64
- result[originalName] = resolvedPath.includes('.') ? (0, _utils.getNestedValue)(values, resolvedPath) : values[resolvedPath];
48
+ var path = resolvedPaths[i];
49
+ var value = watchedArray[i];
50
+ var formattedValue = path.includes('.') ? (0, _utils.getNestedValue)(formatted, path) : path in formatted ? formatted[path] : undefined;
51
+ if (formattedValue !== undefined) {
52
+ value = formattedValue;
53
+ }
54
+ result[name[i]] = value;
65
55
  }
66
56
  return result;
67
- }, [name, resolvedPaths, values]);
68
- // Fallback form instance for standalone usage (outside ProForm)
69
- var fallbackInstance = (0, _react.useMemo)(function () {
70
- return {
71
- submit: function submit() {
72
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
73
- return _regenerator["default"].wrap(function (_context) {
74
- while (1) switch (_context.prev = _context.next) {
75
- case 0:
76
- return _context.abrupt("return", undefined);
77
- case 1:
78
- case "end":
79
- return _context.stop();
80
- }
81
- }, _callee);
82
- }));
83
- },
84
- resetFields: function resetFields() {},
85
- getFieldValue: function getFieldValue(n) {
86
- return n.includes('.') ? (0, _utils.getNestedValue)(values, n) : values[n];
87
- },
88
- getFieldsValue: function getFieldsValue() {
89
- return values;
90
- },
91
- setFieldsValue: function setFieldsValue() {},
92
- setFieldValue: function setFieldValue() {},
93
- validateFields: function validateFields() {
94
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
95
- return _regenerator["default"].wrap(function (_context2) {
96
- while (1) switch (_context2.prev = _context2.next) {
97
- case 0:
98
- return _context2.abrupt("return", values);
99
- case 1:
100
- case "end":
101
- return _context2.stop();
102
- }
103
- }, _callee2);
104
- }));
105
- },
106
- getFieldError: function getFieldError() {
107
- return undefined;
108
- },
109
- getFieldsError: function getFieldsError() {
110
- return {};
111
- },
112
- isFieldTouched: function isFieldTouched() {
113
- return false;
114
- },
115
- isFieldsTouched: function isFieldsTouched() {
116
- return false;
117
- },
118
- isFieldValidating: function isFieldValidating() {
119
- return false;
120
- },
121
- setFieldError: function setFieldError() {},
122
- setFieldsError: function setFieldsError() {},
123
- setFieldTouched: function setFieldTouched() {},
124
- setFieldsTouched: function setFieldsTouched() {},
125
- defineField: function defineField() {
126
- return function () {
127
- return null;
128
- };
129
- },
130
- registerField: function registerField() {},
131
- unregisterField: function unregisterField() {},
132
- getFieldsFormatValue: function getFieldsFormatValue() {
133
- return values;
134
- },
135
- validateFieldsReturnFormatValue: function validateFieldsReturnFormatValue() {
136
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
137
- return _regenerator["default"].wrap(function (_context3) {
138
- while (1) switch (_context3.prev = _context3.next) {
139
- case 0:
140
- return _context3.abrupt("return", {
141
- success: false
142
- });
143
- case 1:
144
- case "end":
145
- return _context3.stop();
146
- }
147
- }, _callee3);
148
- }));
149
- },
150
- submitForm: function submitForm() {
151
- return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
152
- return _regenerator["default"].wrap(function (_context4) {
153
- while (1) switch (_context4.prev = _context4.next) {
154
- case 0:
155
- case "end":
156
- return _context4.stop();
157
- }
158
- }, _callee4);
159
- }));
160
- }
161
- };
162
- }, [values]);
57
+ }, [name, resolvedPaths, watchedArray, formInstance]);
163
58
  return (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
164
- children: children(watchedValues, formInstance !== null && formInstance !== void 0 ? formInstance : fallbackInstance)
59
+ children: children(watchedValues, formInstance)
165
60
  });
166
61
  };
167
62
  ProFormDependencyBase.displayName = 'ProFormDependency';
168
63
  var ProFormDependency = exports.ProFormDependency = /*#__PURE__*/(0, _react.memo)(ProFormDependencyBase);
169
64
  var _default = exports["default"] = ProFormDependency;
170
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtRGVwZW5kZW5jeS5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtRGVwZW5kZW5jeS50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfY29udGV4dDUiLCJfdXRpbHMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIlByb0Zvcm1EZXBlbmRlbmN5QmFzZSIsIl9yZWYiLCJuYW1lIiwiaWdub3JlRm9ybUxpc3RGaWVsZCIsImNoaWxkcmVuIiwiX3VzZVByb0Zvcm1Db250ZXh0IiwidXNlUHJvRm9ybUNvbnRleHQiLCJ2YWx1ZXMiLCJmb3JtSW5zdGFuY2UiLCJmb3JtTGlzdEN0eCIsInVzZUZvcm1MaXN0Q29udGV4dCIsInJlc29sdmVkUGF0aHMiLCJ1c2VNZW1vIiwic2hvdWxkUHJlZml4IiwibGlzdE5hbWUiLCJ1bmRlZmluZWQiLCJtYXAiLCJmaWVsZE5hbWUiLCJjb25jYXQiLCJ3YXRjaGVkVmFsdWVzIiwibGVuZ3RoIiwib3JpZ2luYWxOYW1lIiwicmVzb2x2ZWRQYXRoIiwiaW5jbHVkZXMiLCJnZXROZXN0ZWRWYWx1ZSIsImZhbGxiYWNrSW5zdGFuY2UiLCJzdWJtaXQiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJzdG9wIiwicmVzZXRGaWVsZHMiLCJnZXRGaWVsZFZhbHVlIiwiZ2V0RmllbGRzVmFsdWUiLCJzZXRGaWVsZHNWYWx1ZSIsInNldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkcyIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkc0Vycm9yIiwiaXNGaWVsZFRvdWNoZWQiLCJpc0ZpZWxkc1RvdWNoZWQiLCJpc0ZpZWxkVmFsaWRhdGluZyIsInNldEZpZWxkRXJyb3IiLCJzZXRGaWVsZHNFcnJvciIsInNldEZpZWxkVG91Y2hlZCIsInNldEZpZWxkc1RvdWNoZWQiLCJkZWZpbmVGaWVsZCIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJnZXRGaWVsZHNGb3JtYXRWYWx1ZSIsInZhbGlkYXRlRmllbGRzUmV0dXJuRm9ybWF0VmFsdWUiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsInN1Y2Nlc3MiLCJzdWJtaXRGb3JtIiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJfanN4IiwiX0ZyYWdtZW50IiwiZGlzcGxheU5hbWUiLCJQcm9Gb3JtRGVwZW5kZW5jeSIsImV4cG9ydHMiLCJtZW1vIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVNBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ1RBLElBQUFDLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUF5QyxTQUFBSyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMs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Q0FBQTVCLElBQUE7WUFBQTtVQUFBLEdBQUEyQixRQUFBO1FBQUEsQ0FBRyxFQUFBO01BQUE7SURMNUIsQ0NNQztFQUFBLENBQUMsRUFDRixDQUFDdEQsTUFBTSxDQUFDLENBQ1Q7RUFFRCxPQUFPLElBQUF3RCxlQUFBLEVBQUFDLG9CQUFBLEVBQUE7SUFBQTVELFFBQUEsRUFBR0EsUUFBUSxDQUFDZSxhQUFhLEVBQUVYLFlBQVksS0FBQSxJQUFBLElBQVpBLFlBQVksS0FBQSxLQUFBLENBQUEsR0FBWkEsWUFBWSxHQUFJaUIsZ0JBQWdCO0VBQUMsQ0FBQSxDQUFJO0FBQ3pFLENBQUM7QUFFRHpCLHFCQUFxQixDQUFDaUUsV0FBVyxHQUFHLG1CQUFtQjtBQUVoRCxJQUFNQyxpQkFBaUIsR0FBQUMsT0FBQSxDQUFBRCxpQkFBQSxnQkFBRyxJQUFBRSxXQUFJLEVBQUNwRSxxQkFBcUIsQ0FBQztBQUFDLElBQUFxRSxRQUFBLEdBQUFGLE9BQUEsY0FFOUNELGlCQUFpQiIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vUHJvRm9ybURlcGVuZGVuY3kuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCB7IEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUHJvRm9ybUNvbnRleHQsIHVzZUZvcm1MaXN0Q29udGV4dCB9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQgeyBnZXROZXN0ZWRWYWx1ZSB9IGZyb20gJy4vdXRpbHMnO1xuY29uc3QgUHJvRm9ybURlcGVuZGVuY3lCYXNlID0gKHsgbmFtZSwgaWdub3JlRm9ybUxpc3RGaWVsZCwgY2hpbGRyZW4sIH0pID0+IHtcbiAgICBjb25zdCB7IHZhbHVlcywgZm9ybUluc3RhbmNlIH0gPSB1c2VQcm9Gb3JtQ29udGV4dCgpO1xuICAgIGNvbnN0IGZvcm1MaXN0Q3R4ID0gdXNlRm9ybUxpc3RDb250ZXh0KCk7XG4gICAgLy8gUmVzb2x2ZSB0aGUgYWN0dWFsIHBhdGhzIHRvIHdhdGNoLCBjb25zaWRlcmluZyBGb3JtTGlzdCBzY29wZVxuICAgIGNvbnN0IHJlc29sdmVkUGF0aHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2hvdWxkUHJlZml4ID0gIWlnbm9yZUZvcm1MaXN0RmllbGQgJiYgZm9ybUxpc3RDdHgubGlzdE5hbWUgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIG5hbWUubWFwKChmaWVsZE5hbWUpID0+IHNob3VsZFByZWZpeCA/IGAke2Zvcm1MaXN0Q3R4Lmxpc3ROYW1lfS4ke2ZpZWxkTmFtZX1gIDogZmllbGROYW1lKTtcbiAgICB9LCBbbmFtZSwgaWdub3JlRm9ybUxpc3RGaWVsZCwgZm9ybUxpc3RDdHgubGlzdE5hbWVdKTtcbiAgICBjb25zdCB3YXRjaGVkVmFsdWVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsTmFtZSA9IG5hbWVbaV07XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlZFBhdGhzW2ldO1xuICAgICAgICAgICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBuYW1lIGFzIGtleSBzbyBjaGlsZHJlbiBnZXQgY2xlYW4ga2V5c1xuICAgICAgICAgICAgcmVzdWx0W29yaWdpbmFsTmFtZV0gPSByZXNvbHZlZFBhdGguaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgID8gZ2V0TmVzdGVkVmFsdWUodmFsdWVzLCByZXNvbHZlZFBhdGgpXG4gICAgICAgICAgICAgICAgOiB2YWx1ZXNbcmVzb2x2ZWRQYXRoXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtuYW1lLCByZXNvbHZlZFBhdGhzLCB2YWx1ZXNdKTtcbiAgICAvLyBGYWxsYmFjayBmb3JtIGluc3RhbmNlIGZvciBzdGFuZGFsb25lIHVzYWdlIChvdXRzaWRlIFByb0Zvcm0pXG4gICAgY29uc3QgZmFsbGJhY2tJbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgc3VibWl0OiAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfSksXG4gICAgICAgIHJlc2V0RmllbGRzOiAoKSA9PiB7IH0sXG4gICAgICAgIGdldEZpZWxkVmFsdWU6IChuKSA9PiBuLmluY2x1ZGVzKCcuJykgPyBnZXROZXN0ZWRWYWx1ZSh2YWx1ZXMsIG4pIDogdmFsdWVzW25dLFxuICAgICAgICBnZXRGaWVsZHNWYWx1ZTogKCkgPT4gdmFsdWVzLFxuICAgICAgICBzZXRGaWVsZHNWYWx1ZTogKCkgPT4geyB9LFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiAoKSA9PiB7IH0sXG4gICAgICAgIHZhbGlkYXRlRmllbGRzOiAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgcmV0dXJuIHZhbHVlczsgfSksXG4gICAgICAgIGdldEZpZWxkRXJyb3I6ICgpID0+IHVuZGVmaW5lZCxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3I6ICgpID0+ICh7fSksXG4gICAgICAgIGlzRmllbGRUb3VjaGVkOiAoKSA9PiBmYWxzZSxcbiAgICAgICAgaXNGaWVsZHNUb3VjaGVkOiAoKSA9PiBmYWxzZSxcbiAgICAgICAgaXNGaWVsZFZhbGlkYXRpbmc6ICgpID0+IGZhbHNlLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiAoKSA9PiB7IH0sXG4gICAgICAgIHNldEZpZWxkc0Vycm9yOiAoKSA9PiB7IH0sXG4gICAgICAgIHNldEZpZWxkVG91Y2hlZDogKCkgPT4geyB9LFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkOiAoKSA9PiB7IH0sXG4gICAgICAgIGRlZmluZUZpZWxkOiAoKSA9PiAoKCkgPT4gbnVsbCksXG4gICAgICAgIHJlZ2lzdGVyRmllbGQ6ICgpID0+IHsgfSxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkOiAoKSA9PiB7IH0sXG4gICAgICAgIGdldEZpZWxkc0Zvcm1hdFZhbHVlOiAoKSA9PiB2YWx1ZXMsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzUmV0dXJuRm9ybWF0VmFsdWU6ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyByZXR1cm4gKHsgc3VjY2VzczogZmFsc2UgfSk7IH0pLFxuICAgICAgICBzdWJtaXRGb3JtOiAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgfSksXG4gICAgfSksIFt2YWx1ZXNdKTtcbiAgICByZXR1cm4gX2pzeChfRnJhZ21lbnQsIHsgY2hpbGRyZW46IGNoaWxkcmVuKHdhdGNoZWRWYWx1ZXMsIGZvcm1JbnN0YW5jZSAhPT0gbnVsbCAmJiBmb3JtSW5zdGFuY2UgIT09IHZvaWQgMCA/IGZvcm1JbnN0YW5jZSA6IGZhbGxiYWNrSW5zdGFuY2UpIH0pO1xufTtcblByb0Zvcm1EZXBlbmRlbmN5QmFzZS5kaXNwbGF5TmFtZSA9ICdQcm9Gb3JtRGVwZW5kZW5jeSc7XG5leHBvcnQgY29uc3QgUHJvRm9ybURlcGVuZGVuY3kgPSBtZW1vKFByb0Zvcm1EZXBlbmRlbmN5QmFzZSk7XG5leHBvcnQgZGVmYXVsdCBQcm9Gb3JtRGVwZW5kZW5jeTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
65
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtRGVwZW5kZW5jeS5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtRGVwZW5kZW5jeS50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfY29udGV4dCIsIl9mb3JtU3RvcmUiLCJfdXRpbHMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJQcm9Gb3JtRGVwZW5kZW5jeUJhc2UiLCJfcmVmIiwibmFtZSIsImlnbm9yZUZvcm1MaXN0RmllbGQiLCJjaGlsZHJlbiIsIl91c2VQcm9Gb3JtU3RhYmxlIiwidXNlUHJvRm9ybVN0YWJsZSIsImZvcm1JbnN0YW5jZSIsInN0b3JlIiwidXNlUHJvRm9ybVN0b3JlIiwiZm9ybUxpc3RDdHgiLCJ1c2VGb3JtTGlzdENvbnRleHQiLCJyZXNvbHZlZFBhdGhzIiwidXNlTWVtbyIsInNob3VsZFByZWZpeCIsImxpc3ROYW1lIiwidW5kZWZpbmVkIiwibWFwIiwiZmllbGROYW1lIiwiY29uY2F0Iiwid2F0Y2hlZEFycmF5IiwidXNlU3RvcmVTZWxlY3RvciIsInN0YXRlIiwicGF0aCIsImluY2x1ZGVzIiwiZ2V0TmVzdGVkVmFsdWUiLCJ2YWx1ZXMiLCJzaGFsbG93RXF1YWxBcnJheXMiLCJ3YXRjaGVkVmFsdWVzIiwiZm9ybWF0dGVkIiwiZ2V0RmllbGRGb3JtYXRWYWx1ZU9iamVjdCIsInJlc3VsdCIsImxlbmd0aCIsInZhbHVlIiwiZm9ybWF0dGVkVmFsdWUiLCJfanN4IiwiX0ZyYWdtZW50IiwiZGlzcGxheU5hbWUiLCJQcm9Gb3JtRGVwZW5kZW5jeSIsImV4cG9ydHMiLCJtZW1vIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUNBQSxJQUFBQyxNQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFBeUMsU0FBQU0seUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFMLHdCQUFBSyxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEsZ0JBQUFLLE9BQUEsQ0FBQUwsQ0FBQSwwQkFBQUEsQ0FBQSxzQkFBQUEsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEs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R21DLEtBQUs7SUFDekI7SUFDQSxPQUFPRixNQUFNO0VBQ2YsQ0FBQyxFQUFFLENBQUM3QixJQUFJLEVBQUVVLGFBQWEsRUFBRVEsWUFBWSxFQUFFYixZQUFZLENBQUMsQ0FBQztFQUVyRCxPQUFPLElBQUE0QixlQUFBLEVBQUFDLG9CQUFBLEVBQUE7SUFBQWhDLFFBQUEsRUFBR0EsUUFBUSxDQUFDd0IsYUFBYSxFQUFFckIsWUFBWTtFQUFDLENBQUEsQ0FBSTtBQUNyRCxDQUFDO0FBRURQLHFCQUFxQixDQUFDcUMsV0FBVyxHQUFHLG1CQUFtQjtBQWNoRCxJQUFNQyxpQkFBaUIsR0FBQUMsT0FBQSxDQUFBRCxpQkFBQSxnQkFBRyxJQUFBRSxXQUFJLEVBQ25DeEMscUJBQXFCLENBQ21CO0FBQUMsSUFBQXlDLFFBQUEsR0FBQUYsT0FBQSxjQUU1QkQsaUJBQWlCIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtRGVwZW5kZW5jeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUHJvRm9ybVN0YWJsZSwgdXNlUHJvRm9ybVN0b3JlLCB1c2VGb3JtTGlzdENvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgdXNlU3RvcmVTZWxlY3Rvciwgc2hhbGxvd0VxdWFsQXJyYXlzIH0gZnJvbSAnLi9jb3JlL2Zvcm1TdG9yZSc7XG5pbXBvcnQgeyBnZXROZXN0ZWRWYWx1ZSB9IGZyb20gJy4vdXRpbHMnO1xuY29uc3QgUHJvRm9ybURlcGVuZGVuY3lCYXNlID0gKHsgbmFtZSwgaWdub3JlRm9ybUxpc3RGaWVsZCwgY2hpbGRyZW4sIH0pID0+IHtcbiAgICBjb25zdCB7IGZvcm1JbnN0YW5jZSB9ID0gdXNlUHJvRm9ybVN0YWJsZSgpO1xuICAgIGNvbnN0IHN0b3JlID0gdXNlUHJvRm9ybVN0b3JlKCk7XG4gICAgY29uc3QgZm9ybUxpc3RDdHggPSB1c2VGb3JtTGlzdENvbnRleHQoKTtcbiAgICAvLyBSZXNvbHZlIHRoZSBhY3R1YWwgcGF0aHMgdG8gd2F0Y2gsIGNvbnNpZGVyaW5nIEZvcm1MaXN0IHNjb3BlXG4gICAgY29uc3QgcmVzb2x2ZWRQYXRocyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBzaG91bGRQcmVmaXggPSAhaWdub3JlRm9ybUxpc3RGaWVsZCAmJiBmb3JtTGlzdEN0eC5saXN0TmFtZSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbmFtZS5tYXAoKGZpZWxkTmFtZSkgPT4gc2hvdWxkUHJlZml4ID8gYCR7Zm9ybUxpc3RDdHgubGlzdE5hbWV9LiR7ZmllbGROYW1lfWAgOiBmaWVsZE5hbWUpO1xuICAgIH0sIFtuYW1lLCBpZ25vcmVGb3JtTGlzdEZpZWxkLCBmb3JtTGlzdEN0eC5saXN0TmFtZV0pO1xuICAgIC8vIFN1YnNjcmliZSBPTkxZIHRvIHRoZSB3YXRjaGVkIHBhdGhzOiBhIGNvbW1pdCB0aGF0IGxlYXZlcyBldmVyeSB3YXRjaGVkXG4gICAgLy8gdmFsdWUgT2JqZWN0LmlzLWVxdWFsIHNob3J0LWNpcmN1aXRzLCBzbyBjaGlsZHJlbiBhcmUgTk9UIHJlLWludm9rZWQgd2hlblxuICAgIC8vIHVucmVsYXRlZCBmaWVsZHMgY2hhbmdlLiBSZWFjdGl2aXR5IHRyYWNrcyB0aGUgUkFXIHZhbHVlczsgdGhlIHBheWxvYWRcbiAgICAvLyBiZWxvdyBpcyBkZXJpdmVkIGZyb20gdGhlIEZPUk1BVFRFRCB2YWx1ZXMuXG4gICAgY29uc3Qgd2F0Y2hlZEFycmF5ID0gdXNlU3RvcmVTZWxlY3RvcihzdG9yZSwgKHN0YXRlKSA9PiByZXNvbHZlZFBhdGhzLm1hcCgocGF0aCkgPT4gcGF0aC5pbmNsdWRlcygnLicpID8gZ2V0TmVzdGVkVmFsdWUoc3RhdGUudmFsdWVzLCBwYXRoKSA6IHN0YXRlLnZhbHVlc1twYXRoXSksIHNoYWxsb3dFcXVhbEFycmF5cyk7XG4gICAgY29uc3Qgd2F0Y2hlZFZhbHVlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBDaGlsZHJlbiByZWNlaXZlIEZPUk1BVFRFRCB2YWx1ZXMgKGRhdGVGb3JtYXR0ZXIgKyB0cmFuc2Zvcm0gYXBwbGllZCksXG4gICAgICAgIC8vIG1hdGNoaW5nIHdoYXQgb25GaW5pc2ggd291bGQgc3VibWl0IGZvciB0aG9zZSBmaWVsZHMuIEEgdHJhbnNmb3JtIHRoYXRcbiAgICAgICAgLy8gUkVOQU1FUyBpdHMga2V5IGRlbGV0ZXMgdGhlIG9yaWdpbmFsIHBhdGggZnJvbSB0aGUgZm9ybWF0dGVkIG9iamVjdCDigJRcbiAgICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSByYXcgdmFsdWUgc28gdGhlIHdhdGNoZXIgc3RpbGwgc2VlcyB0aGUgZmllbGQuXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1JbnN0YW5jZS5nZXRGaWVsZEZvcm1hdFZhbHVlT2JqZWN0KCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgbmFtZSBhcyBrZXkgc28gY2hpbGRyZW4gZ2V0IGNsZWFuIGtleXNcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSByZXNvbHZlZFBhdGhzW2ldO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gd2F0Y2hlZEFycmF5W2ldO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSBwYXRoLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IGdldE5lc3RlZFZhbHVlKGZvcm1hdHRlZCwgcGF0aClcbiAgICAgICAgICAgICAgICA6IChwYXRoIGluIGZvcm1hdHRlZCA/IGZvcm1hdHRlZFtwYXRoXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbbmFtZVtpXV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtuYW1lLCByZXNvbHZlZFBhdGhzLCB3YXRjaGVkQXJyYXksIGZvcm1JbnN0YW5jZV0pO1xuICAgIHJldHVybiBfanN4KF9GcmFnbWVudCwgeyBjaGlsZHJlbjogY2hpbGRyZW4od2F0Y2hlZFZhbHVlcywgZm9ybUluc3RhbmNlKSB9KTtcbn07XG5Qcm9Gb3JtRGVwZW5kZW5jeUJhc2UuZGlzcGxheU5hbWUgPSAnUHJvRm9ybURlcGVuZGVuY3knO1xuZXhwb3J0IGNvbnN0IFByb0Zvcm1EZXBlbmRlbmN5ID0gbWVtbyhQcm9Gb3JtRGVwZW5kZW5jeUJhc2UpO1xuZXhwb3J0IGRlZmF1bHQgUHJvRm9ybURlcGVuZGVuY3k7IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9