@1money/component-ui 0.0.67-alpha.1 → 0.0.67-alpha.3

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 (85) hide show
  1. package/es/business/Filter/Account/Account.d.ts +2 -0
  2. package/es/business/Filter/Account/Account.js +289 -0
  3. package/es/business/Filter/Account/index.d.ts +2 -0
  4. package/es/business/Filter/Account/index.js +3 -0
  5. package/es/business/Filter/Account/interface.d.ts +83 -0
  6. package/es/business/Filter/Account/interface.js +2 -0
  7. package/es/business/Filter/Account/style/Account.css +84 -0
  8. package/es/business/Filter/Account/style/css.js +2 -0
  9. package/es/business/Filter/Account/style/index.d.ts +1 -0
  10. package/es/business/Filter/Account/style/index.js +2 -0
  11. package/es/business/Filter/Asset/Asset.d.ts +2 -0
  12. package/es/business/Filter/Asset/Asset.js +306 -0
  13. package/es/business/Filter/Asset/index.d.ts +2 -0
  14. package/es/business/Filter/Asset/index.js +3 -0
  15. package/es/business/Filter/Asset/interface.d.ts +90 -0
  16. package/es/business/Filter/Asset/interface.js +2 -0
  17. package/es/business/Filter/{Dropdown/style/Dropdown.css → Asset/style/Asset.css} +20 -18
  18. package/es/business/Filter/Asset/style/css.js +2 -0
  19. package/es/business/Filter/Asset/style/index.d.ts +1 -0
  20. package/es/business/Filter/Asset/style/index.js +2 -0
  21. package/es/business/Filter/Option/Option.d.ts +2 -0
  22. package/es/business/Filter/Option/Option.js +264 -0
  23. package/es/business/Filter/Option/index.d.ts +2 -0
  24. package/es/business/Filter/Option/index.js +3 -0
  25. package/es/business/Filter/Option/interface.d.ts +81 -0
  26. package/es/business/Filter/Option/interface.js +2 -0
  27. package/es/business/Filter/Option/style/Option.css +72 -0
  28. package/es/business/Filter/Option/style/css.js +2 -0
  29. package/es/business/Filter/Option/style/index.d.ts +1 -0
  30. package/es/business/Filter/Option/style/index.js +2 -0
  31. package/es/business/Filter/index.d.ts +3 -1
  32. package/es/business/Filter/index.js +4 -2
  33. package/es/index.css +1 -1
  34. package/lib/business/Filter/Account/Account.d.ts +2 -0
  35. package/lib/business/Filter/Account/Account.js +296 -0
  36. package/lib/business/Filter/Account/index.d.ts +2 -0
  37. package/lib/business/Filter/Account/index.js +28 -0
  38. package/lib/business/Filter/Account/interface.d.ts +83 -0
  39. package/lib/business/Filter/Account/interface.js +6 -0
  40. package/lib/business/Filter/Account/style/Account.css +84 -0
  41. package/lib/business/Filter/Account/style/css.js +4 -0
  42. package/lib/business/Filter/Account/style/index.d.ts +1 -0
  43. package/lib/business/Filter/Account/style/index.js +4 -0
  44. package/lib/business/Filter/Asset/Asset.d.ts +2 -0
  45. package/lib/business/Filter/Asset/Asset.js +313 -0
  46. package/lib/business/Filter/Asset/index.d.ts +2 -0
  47. package/lib/business/Filter/Asset/index.js +28 -0
  48. package/lib/business/Filter/Asset/interface.d.ts +90 -0
  49. package/lib/business/Filter/Asset/interface.js +6 -0
  50. package/lib/business/Filter/{Dropdown/style/Dropdown.css → Asset/style/Asset.css} +20 -18
  51. package/lib/business/Filter/Asset/style/css.js +4 -0
  52. package/lib/business/Filter/Asset/style/index.d.ts +1 -0
  53. package/lib/business/Filter/Asset/style/index.js +4 -0
  54. package/lib/business/Filter/Option/Option.d.ts +2 -0
  55. package/lib/business/Filter/Option/Option.js +271 -0
  56. package/lib/business/Filter/Option/index.d.ts +2 -0
  57. package/lib/business/Filter/Option/index.js +28 -0
  58. package/lib/business/Filter/Option/interface.d.ts +81 -0
  59. package/lib/business/Filter/Option/interface.js +6 -0
  60. package/lib/business/Filter/Option/style/Option.css +72 -0
  61. package/lib/business/Filter/Option/style/css.js +4 -0
  62. package/lib/business/Filter/Option/style/index.d.ts +1 -0
  63. package/lib/business/Filter/Option/style/index.js +4 -0
  64. package/lib/business/Filter/index.d.ts +3 -1
  65. package/lib/business/Filter/index.js +27 -5
  66. package/lib/index.css +1 -1
  67. package/package.json +15 -5
  68. package/es/business/Filter/Dropdown/Dropdown.d.ts +0 -2
  69. package/es/business/Filter/Dropdown/Dropdown.js +0 -340
  70. package/es/business/Filter/Dropdown/index.d.ts +0 -2
  71. package/es/business/Filter/Dropdown/index.js +0 -3
  72. package/es/business/Filter/Dropdown/interface.d.ts +0 -136
  73. package/es/business/Filter/Dropdown/interface.js +0 -2
  74. package/es/business/Filter/Dropdown/style/css.js +0 -2
  75. package/es/business/Filter/Dropdown/style/index.d.ts +0 -1
  76. package/es/business/Filter/Dropdown/style/index.js +0 -2
  77. package/lib/business/Filter/Dropdown/Dropdown.d.ts +0 -2
  78. package/lib/business/Filter/Dropdown/Dropdown.js +0 -347
  79. package/lib/business/Filter/Dropdown/index.d.ts +0 -2
  80. package/lib/business/Filter/Dropdown/index.js +0 -28
  81. package/lib/business/Filter/Dropdown/interface.d.ts +0 -136
  82. package/lib/business/Filter/Dropdown/interface.js +0 -6
  83. package/lib/business/Filter/Dropdown/style/css.js +0 -4
  84. package/lib/business/Filter/Dropdown/style/index.d.ts +0 -1
  85. package/lib/business/Filter/Dropdown/style/index.js +0 -4
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.OptionFilter = void 0;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ var _react = require("react");
11
+ var _Button = require("../../../components/Button");
12
+ var _Checkbox = require("../../../components/Checkbox");
13
+ var _Empty = require("../../../components/Empty");
14
+ var _Flex = require("../../../components/Flex");
15
+ var _Icons = require("../../../components/Icons");
16
+ var _Select = require("../../../components/Select");
17
+ var _Typography = require("../../../components/Typography");
18
+ var _classnames = require("../../../utils/classnames");
19
+ var __rest = void 0 && (void 0).__rest || function (s, e) {
20
+ var t = {};
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
22
+ if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
23
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
24
+ }
25
+ return t;
26
+ };
27
+ var WRAP_CLS = 'om-option-filter';
28
+ // The panel is portaled to <body>, so panel-scoped overrides are keyed off this
29
+ // class (passed as `panelClassName`) rather than the trigger root.
30
+ var PANEL_CLS = "".concat(WRAP_CLS, "-panel");
31
+ var RESET_LABEL = 'Reset';
32
+ var APPLY_LABEL = 'Apply';
33
+ var DEFAULT_ALL_LABEL = 'All';
34
+ var DEFAULT_PLACEHOLDER = 'Select';
35
+ var DEFAULT_SEARCH_PLACEHOLDER = 'Search';
36
+ var DEFAULT_EMPTY = (0, _jsxRuntime.jsx)(_Empty.Empty, {
37
+ variant: 'fill',
38
+ icon: (0, _jsxRuntime.jsx)(_Icons.Icons, {
39
+ name: 'search',
40
+ size: 16,
41
+ color: 'currentColor'
42
+ }),
43
+ title: 'No results',
44
+ description: 'Try a different name or adjust your search filters.',
45
+ style: {
46
+ padding: 0
47
+ }
48
+ });
49
+ var MORE_SUFFIX = function MORE_SUFFIX(count) {
50
+ return "+ ".concat(count, " more");
51
+ };
52
+ var FULL_WIDTH_STYLE = {
53
+ flex: 1
54
+ };
55
+ var toOption = function toOption(raw) {
56
+ return {
57
+ label: raw.label,
58
+ value: raw.value,
59
+ searchText: raw.label
60
+ };
61
+ };
62
+ var OptionFilterBase = function OptionFilterBase(_a) {
63
+ var ref = _a.ref,
64
+ className = _a.className,
65
+ _a$size = _a.size,
66
+ size = _a$size === void 0 ? 'small' : _a$size,
67
+ label = _a.label,
68
+ _a$placeholder = _a.placeholder,
69
+ placeholder = _a$placeholder === void 0 ? DEFAULT_PLACEHOLDER : _a$placeholder,
70
+ options = _a.options,
71
+ _a$allLabel = _a.allLabel,
72
+ allLabel = _a$allLabel === void 0 ? DEFAULT_ALL_LABEL : _a$allLabel,
73
+ _a$search = _a.search,
74
+ search = _a$search === void 0 ? true : _a$search,
75
+ _a$searchPlaceholder = _a.searchPlaceholder,
76
+ searchPlaceholder = _a$searchPlaceholder === void 0 ? DEFAULT_SEARCH_PLACEHOLDER : _a$searchPlaceholder,
77
+ _a$emptyContent = _a.emptyContent,
78
+ emptyContent = _a$emptyContent === void 0 ? DEFAULT_EMPTY : _a$emptyContent,
79
+ onApply = _a.onApply,
80
+ onReset = _a.onReset,
81
+ rest = __rest(_a, ["ref", "className", "size", "label", "placeholder", "options", "allLabel", "search", "searchPlaceholder", "emptyContent", "onApply", "onReset"]);
82
+ var mapped = (0, _react.useMemo)(function () {
83
+ return options.map(toOption);
84
+ }, [options]);
85
+ var allValues = (0, _react.useMemo)(function () {
86
+ return options.map(function (option) {
87
+ return option.value;
88
+ });
89
+ }, [options]);
90
+ var optionByValue = (0, _react.useMemo)(function () {
91
+ var map = new Map();
92
+ mapped.forEach(function (option) {
93
+ return map.set(option.value, option);
94
+ });
95
+ return map;
96
+ }, [mapped]);
97
+ var _useState = (0, _react.useState)(false),
98
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
99
+ open = _useState2[0],
100
+ setOpen = _useState2[1];
101
+ var _useState3 = (0, _react.useState)(''),
102
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
103
+ keyword = _useState4[0],
104
+ setKeyword = _useState4[1];
105
+ // `temp` is the in-panel draft; `committed` is the last Applied selection.
106
+ // Only Apply promotes `temp` → `committed` and notifies the parent. With an
107
+ // "All" row, "all selected" is represented by an empty array.
108
+ var _useState5 = (0, _react.useState)([]),
109
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
110
+ temp = _useState6[0],
111
+ setTemp = _useState6[1];
112
+ var _useState7 = (0, _react.useState)([]),
113
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
114
+ committed = _useState8[0],
115
+ setCommitted = _useState8[1];
116
+ // The "All" row is checked exactly when nothing specific is selected.
117
+ var allChecked = temp.length === 0;
118
+ // While searching, the "All" row is meaningless — hide it so a no-match
119
+ // search shows the empty state instead of a lone "All" row.
120
+ var searching = search && keyword.trim().length > 0;
121
+ var filterOption = (0, _react.useCallback)(function (searchValue, option) {
122
+ var term = searchValue.trim().toLowerCase();
123
+ if (!term) return true;
124
+ var mapped = option;
125
+ return typeof mapped.searchText === 'string' ? mapped.searchText.toLowerCase().includes(term) : false;
126
+ }, []);
127
+ (0, _react.useImperativeHandle)(ref, function () {
128
+ return {
129
+ clear: function clear() {
130
+ setTemp([]);
131
+ setCommitted([]);
132
+ },
133
+ reset: function reset() {
134
+ setTemp([]);
135
+ setCommitted([]);
136
+ onReset === null || onReset === void 0 ? void 0 : onReset([]);
137
+ }
138
+ };
139
+ }, [onReset]);
140
+ var handleSelectChange = (0, _react.useCallback)(function (next) {
141
+ var nextValues = (Array.isArray(next) ? next : []).map(String);
142
+ // Selecting every concrete option collapses to "all" ([]), matching the
143
+ // backend convention that empty == no filter.
144
+ var collapse = nextValues.length === allValues.length;
145
+ setTemp(collapse ? [] : nextValues);
146
+ }, [allValues]);
147
+ var handleAllClick = (0, _react.useCallback)(function () {
148
+ // The "All" row is exclusive: turning it on clears specific picks.
149
+ setTemp([]);
150
+ }, []);
151
+ var handleApply = (0, _react.useCallback)(function () {
152
+ setCommitted(temp);
153
+ onApply(temp);
154
+ setOpen(false);
155
+ }, [temp, onApply]);
156
+ var handleReset = (0, _react.useCallback)(function () {
157
+ setTemp([]);
158
+ setCommitted([]);
159
+ onReset === null || onReset === void 0 ? void 0 : onReset([]);
160
+ }, [onReset]);
161
+ var handleOpenChange = (0, _react.useCallback)(function (nextOpen) {
162
+ setOpen(nextOpen);
163
+ if (nextOpen) return;
164
+ // Closing without Apply discards the draft.
165
+ setTemp(committed);
166
+ setKeyword('');
167
+ }, [committed]);
168
+ var renderRow = (0, _react.useCallback)(function (option, checked) {
169
+ return (0, _jsxRuntime.jsxs)(_Flex.Flex, {
170
+ align: 'center',
171
+ justify: 'space-between',
172
+ gap: 8,
173
+ className: "".concat(WRAP_CLS, "__row"),
174
+ children: [(0, _jsxRuntime.jsx)(_Typography.TypographyLabel, {
175
+ size: 'md',
176
+ className: "".concat(WRAP_CLS, "__row-name"),
177
+ children: option.label
178
+ }), (0, _jsxRuntime.jsx)(_Checkbox.Checkbox, {
179
+ checked: checked,
180
+ readOnly: true,
181
+ className: "".concat(WRAP_CLS, "__row-check")
182
+ })]
183
+ });
184
+ }, []);
185
+ // The trigger reflects the COMMITTED selection only — `temp` is the in-panel
186
+ // draft and must not leak into the trigger before Apply. An empty `committed`
187
+ // means "all" (the `allLabel`). `renderValue` short-circuits Select's own
188
+ // placeholder handling, so the empty state must return `allLabel` explicitly.
189
+ var renderValue = (0, _react.useCallback)(function () {
190
+ if (committed.length === 0) {
191
+ // The `allLabel` is the default filter value, not an empty placeholder.
192
+ // The trigger's empty `value` makes Select wrap this in its grey
193
+ // placeholder class, so force the default dark text to match DateRange.
194
+ return (0, _jsxRuntime.jsx)(_Typography.TypographyBody, {
195
+ size: 'md',
196
+ color: 'default',
197
+ className: "".concat(WRAP_CLS, "__value"),
198
+ children: allLabel
199
+ });
200
+ }
201
+ var first = optionByValue.get(committed[0]);
202
+ var firstLabel = first ? first.label : committed[0];
203
+ var extra = committed.length - 1;
204
+ return (0, _jsxRuntime.jsxs)(_Typography.TypographyBody, {
205
+ size: 'md',
206
+ className: "".concat(WRAP_CLS, "__value"),
207
+ children: [(0, _jsxRuntime.jsx)("span", {
208
+ className: "".concat(WRAP_CLS, "__value-label"),
209
+ children: firstLabel
210
+ }), extra > 0 && (0, _jsxRuntime.jsx)("span", {
211
+ className: "".concat(WRAP_CLS, "__value-more"),
212
+ children: MORE_SUFFIX(extra)
213
+ })]
214
+ });
215
+ }, [allLabel, committed, optionByValue]);
216
+ return (0, _jsxRuntime.jsx)(_Select.Select, Object.assign({}, rest, {
217
+ multiple: true,
218
+ size: size,
219
+ label: label,
220
+ placeholder: placeholder,
221
+ className: (0, _classnames.joinCls)(WRAP_CLS, className),
222
+ panelClassName: PANEL_CLS,
223
+ value: temp,
224
+ open: open,
225
+ onOpenChange: handleOpenChange,
226
+ onChange: handleSelectChange,
227
+ searchable: search,
228
+ searchPlaceholder: searchPlaceholder,
229
+ searchValue: keyword,
230
+ onSearchChange: setKeyword,
231
+ filterOption: filterOption,
232
+ options: mapped,
233
+ panelHeader: searching ? undefined : (0, _jsxRuntime.jsxs)("button", {
234
+ type: 'button',
235
+ className: (0, _classnames.joinCls)("".concat(WRAP_CLS, "__all"), allChecked && "".concat(WRAP_CLS, "__all--checked")),
236
+ onClick: handleAllClick,
237
+ children: [(0, _jsxRuntime.jsx)(_Typography.TypographyLabel, {
238
+ size: 'md',
239
+ children: allLabel
240
+ }), (0, _jsxRuntime.jsx)(_Checkbox.Checkbox, {
241
+ checked: allChecked,
242
+ readOnly: true,
243
+ className: "".concat(WRAP_CLS, "__row-check")
244
+ })]
245
+ }),
246
+ emptyContent: emptyContent,
247
+ renderValue: renderValue,
248
+ renderOption: function renderOption(option, meta) {
249
+ return renderRow(option, meta.selected);
250
+ },
251
+ panelFooter: (0, _jsxRuntime.jsxs)(_Flex.Flex, {
252
+ gap: 8,
253
+ className: "".concat(WRAP_CLS, "__footer"),
254
+ children: [(0, _jsxRuntime.jsx)(_Button.Button, {
255
+ color: 'grey',
256
+ size: 'small',
257
+ style: FULL_WIDTH_STYLE,
258
+ onClick: handleReset,
259
+ children: RESET_LABEL
260
+ }), (0, _jsxRuntime.jsx)(_Button.Button, {
261
+ color: 'primary',
262
+ size: 'small',
263
+ style: FULL_WIDTH_STYLE,
264
+ onClick: handleApply,
265
+ children: APPLY_LABEL
266
+ })]
267
+ })
268
+ }));
269
+ };
270
+ var OptionFilter = exports.OptionFilter = /*#__PURE__*/(0, _react.memo)(OptionFilterBase);
271
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbHRlci9PcHRpb24vT3B0aW9uLmpzIiwiYnVzaW5lc3MvRmlsdGVyL3NyYy9idXNpbmVzcy9GaWx0ZXIvT3B0aW9uL09wdGlvbi50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX0J1dHRvbiIsIl9DaGVja2JveCIsIl9FbXB0eSIsIl9GbGV4IiwiX0ljb25zIiwiX1NlbGVjdCIsIl9UeXBvZ3JhcGh5IiwiX2NsYXNzbmFtZXMiLCJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIldSQVBfQ0xTIiwiUEFORUxfQ0xTIiwiY29uY2F0IiwiUkVTRVRfTEFCRUwiLCJBUFBMWV9MQUJFTCIsIkRFRkFVTFRfQUxMX0xBQkVMIiwiREVGQVVMVF9QTEFDRUhPTERFUiIsIkRFRkFVTFRfU0VBUkNIX1BMQUNFSE9MREVSIiwiREVGQVVMVF9FTVBUWSIsIl9qc3giLCJFbXB0eSIsInZhcmlhbnQiLCJpY29uIiwiSWNvbnMiLCJuYW1lIiwic2l6ZSIsImNvbG9yIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsInN0eWxlIiwicGFkZGluZyIsIk1PUkVfU1VGRklYIiwiY291bnQiLCJGVUxMX1dJRFRIX1NUWUxFIiwiZmxleCIsInRvT3B0aW9uIiwicmF3IiwibGFiZWwiLCJ2YWx1ZSIsInNlYXJjaFRleHQiLCJPcHRpb25GaWx0ZXJCYXNlIiwiX2EiLCJyZWYiLCJjbGFzc05hbWUiLCJfYSRzaXplIiwiX2EkcGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciIsIm9wdGlvbnMiLCJfYSRhbGxMYWJlbCIsImFsbExhYmVsIiwiX2Ekc2VhcmNoIiwic2VhcmNoIiwiX2Ekc2VhcmNoUGxhY2Vob2xkZXIiLCJzZWFyY2hQbGFjZWhvbGRlciIsIl9hJGVtcHR5Q29udGVudCIsImVtcHR5Q29udGVudCIsIm9uQXBwbHkiLCJvblJlc2V0IiwicmVzdCIsIm1hcHBlZCIsInVzZU1lbW8iLCJtYXAiLCJhbGxWYWx1ZXMiLCJvcHRpb24iLCJvcHRpb25CeVZhbHVlIiwiTWFwIiwiZm9yRWFjaCIsInNldCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsIm9wZW4iLCJzZXRPcGVuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJrZXl3b3JkIiwic2V0S2V5d29yZCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwidGVtcCIsInNldFRlbXAiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImNvbW1pdHRlZCIsInNldENvbW1pdHRlZCIsImFsbENoZWNrZWQiLCJzZWFyY2hpbmciLCJ0cmltIiwiZmlsdGVyT3B0aW9uIiwidXNlQ2FsbGJhY2siLCJzZWFyY2hWYWx1ZSIsInRlcm0iLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsImNsZWFyIiwicmVzZXQiLCJoYW5kbGVTZWxlY3RDaGFuZ2UiLCJuZXh0IiwibmV4dFZhbHVlcyIsIkFycmF5IiwiaXNBcnJheSIsIlN0cmluZyIsImNvbGxhcHNlIiwiaGFuZGxlQWxsQ2xpY2siLCJoYW5kbGVBcHBseSIsImhhbmRsZVJlc2V0IiwiaGFuZGxlT3BlbkNoYW5nZSIsIm5leHRPcGVuIiwicmVuZGVyUm93IiwiY2hlY2tlZCIsIl9qc3hzIiwiRmxleCIsImFsaWduIiwianVzdGlmeSIsImdhcCIsImNoaWxkcmVuIiwiVHlwb2dyYXBoeUxhYmVsIiwiQ2hlY2tib3giLCJyZWFkT25seSIsInJlbmRlclZhbHVlIiwiVHlwb2dyYXBoeUJvZHkiLCJmaXJzdCIsImdldCIsImZpcnN0TGFiZWwiLCJleHRyYSIsIlNlbGVjdCIsImFzc2lnbiIsIm11bHRpcGxlIiwiam9pbkNscyIsInBhbmVsQ2xhc3NOYW1lIiwib25PcGVuQ2hhbmdlIiwib25DaGFuZ2UiLCJzZWFyY2hhYmxlIiwib25TZWFyY2hDaGFuZ2UiLCJwYW5lbEhlYWRlciIsInVuZGVmaW5lZCIsInR5cGUiLCJvbkNsaWNrIiwicmVuZGVyT3B0aW9uIiwibWV0YSIsInNlbGVjdGVkIiwicGFuZWxGb290ZXIiLCJCdXR0b24iLCJPcHRpb25GaWx0ZXIiLCJleHBvcnRzIiwibWVtbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFXQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUNYQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxTQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxNQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxXQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxXQUFBLEdBQUFULE9BQUE7QURSQSxJQUFJVSxNQUFNLEdBQUksVUFBUSxTQUFLQSxNQUFNLElBQUssVUFBVUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDbEQsSUFBSUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNWLEtBQUssSUFBSUMsQ0FBQyxJQUFJSCxDQUFDLEVBQUUsSUFBSUksTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDUCxDQUFDLEVBQUVHLENBQUMsQ0FBQyxJQUFJRixDQUFDLENBQUNPLE9BQU8sQ0FBQ0wsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMvRUQsQ0FBQyxDQUFDQyxDQUFDLENBQUMsR0FBR0gsQ0FBQyxDQUFDRyxDQUFDLENBQUM7RUFDZixJQUFJSCxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU9JLE1BQU0sQ0FBQ0sscUJBQXFCLEtBQUssVUFBVSxFQUMvRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVQLENBQUMsR0FBR0MsTUFBTSxDQUFDSyxxQkFBcUIsQ0FBQ1QsQ0FBQyxDQUFDLEVBQUVVLENBQUMsR0FBR1AsQ0FBQyxDQUFDUSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQ3BFLElBQUlULENBQUMsQ0FBQ08sT0FBTyxDQUFDTCxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJTixNQUFNLENBQUNDLFNBQVMsQ0FBQ08sb0JBQW9CLENBQUNMLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEVBQzFFUixDQUFDLENBQUNDLENBQUMsQ0FBQ08sQ0FBQyxDQUFDLENBQUMsR0FBR1YsQ0FBQyxDQUFDRyxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDO0VBQ3pCO0VBQ0osT0FBT1IsQ0FBQztBQUNaLENBQUM7QUNHRCxJQUFNVyxRQUFRLEdBQUcsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQSxJQUFNQyxTQUFTLE1BQUFDLE1BQUEsQ0FBTUYsUUFBUSxXQUFRO0FBQ3JDLElBQU1HLFdBQVcsR0FBRyxPQUFPO0FBQzNCLElBQU1DLFdBQVcsR0FBRyxPQUFPO0FBQzNCLElBQU1DLGlCQUFpQixHQUFHLEtBQUs7QUFDL0IsSUFBTUMsbUJBQW1CLEdBQUcsUUFBUTtBQUNwQyxJQUFNQywwQkFBMEIsR0FBRyxRQUFRO0FBQzNDLElBQU1DLGFBQWEsR0FDakIsSUFBQUMsZUFBQSxFQUFDQyxZQUFLLEVBQUE7RUFDSkMsT0FBTyxFQUFDLE1BQU07RUFDZEMsSUFBSSxFQUFFLElBQUFILGVBQUEsRUFBQ0ksWUFBSyxFQUFBO0lBQUNDLElBQUksRUFBQyxRQUFRO0lBQUNDLElBQUksRUFBRSxFQUFFO0lBQUVDLEtBQUssRUFBQztFQUFjLENBQUEsQ0FBRztFQUM1REMsS0FBSyxFQUFDLFlBQVk7RUFDbEJDLFdBQVcsRUFBQyxxREFBcUQ7RUFDakVDLEtBQUssRUFBRTtJQUFFQyxPQUFPLEVBQUU7RUFBQztBQUFFLENBQUEsQ0FFeEI7QUFDRCxJQUFNQyxXQUFXLEdBQUcsU0FBZEEsV0FBV0EsQ0FBSUMsS0FBYTtFQUFBLFlBQUFwQixNQUFBLENBQVVvQixLQUFLO0FBQUEsQ0FBTztBQUN4RCxJQUFNQyxnQkFBZ0IsR0FBRztFQUFFQyxJQUFJLEVBQUU7QUFBQyxDQUFXO0FBUTdDLElBQU1DLFFBQVEsR0FBRyxTQUFYQSxRQUFRQSxDQUFJQyxHQUF1QjtFQUFBLE9BQW9CO0lBQzNEQyxLQUFLLEVBQUVELEdBQUcsQ0FBQ0MsS0FBSztJQUNoQkMsS0FBSyxFQUFFRixHQUFHLENBQUNFLEtBQUs7SUFDaEJDLFVBQVUsRUFBRUgsR0FBRyxDQUFDQztFRE5sQixDQ09DO0FBQUEsQ0FBQztBQUVGLElBQU1HLGdCQUFnQixHQUEwQixTQUExQ0EsZ0JBQWdCQSxDQUEyQkMsRUFjaEQsRUFBSTtFRHJCRCxJQ1FGQyxHQUFHLEdBV0lELEVBRVIsQ0FiQ0MsR0FBRztJQUNIQyxTQUFTLEdBVUZGLEVBRVIsQ0FaQ0UsU0FBUztJQUFBQyxPQUFBLEdBVUZILEVBRVIsQ0FYQ2hCLElBQUk7SUFBSkEsSUFBSSxHQUFBbUIsT0FBQSxjQUFHLE9BQU8sR0FBQUEsT0FBQTtJQUNkUCxLQUFLLEdBUUVJLEVBRVIsQ0FWQ0osS0FBSztJQUFBUSxjQUFBLEdBUUVKLEVBRVIsQ0FUQ0ssV0FBVztJQUFYQSxXQUFXLEdBQUFELGNBQUEsY0FBRzdCLG1CQUFtQixHQUFBNkIsY0FBQTtJQUNqQ0UsT0FBTyxHQU1BTixFQUVSLENBUkNNLE9BQU87SUFBQUMsV0FBQSxHQU1BUCxFQUVSLENBUENRLFFBQVE7SUFBUkEsUUFBUSxHQUFBRCxXQUFBLGNBQUdqQyxpQkFBaUIsR0FBQWlDLFdBQUE7SUFBQUUsU0FBQSxHQUtyQlQsRUFFUixDQU5DVSxNQUFNO0lBQU5BLE1BQU0sR0FBQUQsU0FBQSxjQUFHLElBQUksR0FBQUEsU0FBQTtJQUFBRSxvQkFBQSxHQUlOWCxFQUVSLENBTENZLGlCQUFpQjtJQUFqQkEsaUJBQWlCLEdBQUFELG9CQUFBLGNBQUduQywwQkFBMEIsR0FBQW1DLG9CQUFBO0lBQUFFLGVBQUEsR0FHdkNiLEVBRVIsQ0FKQ2MsWUFBWTtJQUFaQSxZQUFZLEdBQUFELGVBQUEsY0FBR3BDLGFBQWEsR0FBQW9DLGVBQUE7SUFDNUJFLE9BQU8sR0FDQWYsRUFFUixDQUhDZSxPQUFPO0lBQ1BDLE9BQU8sR0FBQWhCLEVBRVIsQ0FGQ2dCLE9BQU87SUFDSkMsSUFBSSxHQUFBOUQsTUFBQSxDQUFBNkMsRUFBQSxFQWJ3QyxDQUFBLEtBQUEsRUFBQSxXQUFBLEVBQUEsTUFBQSxFQUFBLE9BQUEsRUFBQSxhQUFBLEVBQUEsU0FBQSxFQUFBLFVBQUEsRUFBQSxRQUFBLEVBQUEsbUJBQUEsRUFBQSxjQUFBLEVBQUEsU0FBQSxFQUFBLFNBQUEsQ0FjaEQsQ0FEUTtFQUVQLElBQU1rQixNQUFNLEdBQUcsSUFBQUMsY0FBTyxFQUFDO0lBQUEsT0FBTWIsT0FBTyxDQUFDYyxHQUFHLENBQUMxQixRQUFRLENBQUM7RUFBQSxHQUFFLENBQUNZLE9BQU8sQ0FBQyxDQUFDO0VBQzlELElBQU1lLFNBQVMsR0FBRyxJQUFBRixjQUFPLEVBQUM7SUFBQSxPQUFNYixPQUFPLENBQUNjLEdBQUcsQ0FBQyxVQUFDRSxNQUFNO01BQUEsT0FBS0EsTUFBTSxDQUFDekIsS0FBSztJQUFBLEVBQUM7RUFBQSxHQUFFLENBQUNTLE9BQU8sQ0FBQyxDQUFDO0VBQ2pGLElBQU1pQixhQUFhLEdBQUcsSUFBQUosY0FBTyxFQUFDLFlBQUs7SUFDakMsSUFBTUMsR0FBRyxHQUFHLElBQUlJLEdBQUcsQ0FBQSxDQUF3QjtJQUMzQ04sTUFBTSxDQUFDTyxPQUFPLENBQUMsVUFBQ0gsTUFBTTtNQUFBLE9BQUtGLEdBQUcsQ0FBQ00sR0FBRyxDQUFDSixNQUFNLENBQUN6QixLQUFLLEVBQUV5QixNQUFNLENBQUM7SUFBQSxFQUFDO0lBQ3pELE9BQU9GLEdBQUc7RUFDWixDQUFDLEVBQUUsQ0FBQ0YsTUFBTSxDQUFDLENBQUM7RUFFWixJQUFBUyxTQUFBLEdBQXdCLElBQUFDLGVBQVEsRUFBQyxLQUFLLENBQUM7SUFBQUMsVUFBQSxPQUFBQyxlQUFBLGFBQUFILFNBQUE7SUFBaENJLElBQUksR0FBQUYsVUFBQTtJQUFFRyxPQUFPLEdBQUFILFVBQUE7RUFDcEIsSUFBQUksVUFBQSxHQUE4QixJQUFBTCxlQUFRLEVBQUMsRUFBRSxDQUFDO0lBQUFNLFVBQUEsT0FBQUosZUFBQSxhQUFBRyxVQUFBO0lBQW5DRSxPQUFPLEdBQUFELFVBQUE7SUFBRUUsVUFBVSxHQUFBRixVQUFBO0VBQzFCO0VBQ0E7RUFDQTtFQUNBLElBQUFHLFVBQUEsR0FBd0IsSUFBQVQsZUFBUSxFQUFXLEVBQUUsQ0FBQztJQUFBVSxVQUFBLE9BQUFSLGVBQUEsYUFBQU8sVUFBQTtJQUF2Q0UsSUFBSSxHQUFBRCxVQUFBO0lBQUVFLE9BQU8sR0FBQUYsVUFBQTtFQUNwQixJQUFBRyxVQUFBLEdBQWtDLElBQUFiLGVBQVEsRUFBVyxFQUFFLENBQUM7SUFBQWMsVUFBQSxPQUFBWixlQUFBLGFBQUFXLFVBQUE7SUFBakRFLFNBQVMsR0FBQUQsVUFBQTtJQUFFRSxZQUFZLEdBQUFGLFVBQUE7RUFFOUI7RUFDQSxJQUFNRyxVQUFVLEdBQUdOLElBQUksQ0FBQ3hFLE1BQU0sS0FBSyxDQUFDO0VBQ3BDO0VBQ0E7RUFDQSxJQUFNK0UsU0FBUyxHQUFHcEMsTUFBTSxJQUFJeUIsT0FBTyxDQUFDWSxJQUFJLENBQUEsQ0FBRSxDQUFDaEYsTUFBTSxHQUFHLENBQUM7RUFFckQsSUFBTWlGLFlBQVksR0FBRyxJQUFBQyxrQkFBVyxFQUFDLFVBQUNDLFdBQW1CLEVBQUU1QixNQUFvQixFQUFJO0lBQzdFLElBQU02QixJQUFJLEdBQUdELFdBQVcsQ0FBQ0gsSUFBSSxDQUFBLENBQUUsQ0FBQ0ssV0FBVyxDQUFBLENBQUU7SUFDN0MsSUFBSSxDQUFDRCxJQUFJLEVBQUUsT0FBTyxJQUFJO0lBQ3RCLElBQU1qQyxNQUFNLEdBQUdJLE1BQXNCO0lBQ3JDLE9BQU8sT0FBT0osTUFBTSxDQUFDcEIsVUFBVSxLQUFLLFFBQVEsR0FDeENvQixNQUFNLENBQUNwQixVQUFVLENBQUNzRCxXQUFXLENBQUEsQ0FBRSxDQUFDQyxRQUFRLENBQUNGLElBQUksQ0FBQyxHQUM5QyxLQUFLO0VBQ1gsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQUFHLDBCQUFtQixFQUNqQnJELEdBQUcsRUFDSDtJQUFBLE9BQU87TUFDTHNELEtBQUssRUFBRSxTQUFQQSxLQUFLQSxDQUFBLEVBQU87UUFDVmYsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYSSxZQUFZLENBQUMsRUFBRSxDQUFDO01BQ2xCLENBQUM7TUFDRFksS0FBSyxFQUFFLFNBQVBBLEtBQUtBLENBQUEsRUFBTztRQUNWaEIsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYSSxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ2hCNUIsT0FBTyxLQUFBLElBQUEsSUFBUEEsT0FBTyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFQQSxPQUFPLENBQUcsRUFBRSxDQUFDO01BQ2Y7SUR6QkYsQ0MwQkM7RUFBQSxDQUFDLEVBQ0YsQ0FBQ0EsT0FBTyxDQUFDLENBQ1Y7RUFFRCxJQUFNeUMsa0JBQWtCLEdBQUcsSUFBQVIsa0JBQVcsRUFDcEMsVUFBQ1MsSUFBaUIsRUFBSTtJQUNwQixJQUFNQyxVQUFVLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDQyxPQUFPLENBQUNILElBQUksQ0FBQyxHQUFHQSxJQUFJLEdBQUcsRUFBRSxFQUFFdEMsR0FBRyxDQUFDMEMsTUFBTSxDQUFDO0lBQ2hFO0lBQ0E7SUFDQSxJQUFNQyxRQUFRLEdBQUdKLFVBQVUsQ0FBQzVGLE1BQU0sS0FBS3NELFNBQVMsQ0FBQ3RELE1BQU07SUFDdkR5RSxPQUFPLENBQUN1QixRQUFRLEdBQUcsRUFBRSxHQUFHSixVQUFVLENBQUM7RUFDckMsQ0FBQyxFQUNELENBQUN0QyxTQUFTLENBQUMsQ0FDWjtFQUVELElBQU0yQyxjQUFjLEdBQUcsSUFBQWYsa0JBQVcsRUFBQyxZQUFLO0lBQ3RDO0lBQ0FULE9BQU8sQ0FBQyxFQUFFLENBQUM7RUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTXlCLFdBQVcsR0FBRyxJQUFBaEIsa0JBQVcsRUFBQyxZQUFLO0lBQ25DTCxZQUFZLENBQUNMLElBQUksQ0FBQztJQUNsQnhCLE9BQU8sQ0FBQ3dCLElBQUksQ0FBQztJQUNiUCxPQUFPLENBQUMsS0FBSyxDQUFDO0VBQ2hCLENBQUMsRUFBRSxDQUFDTyxJQUFJLEVBQUV4QixPQUFPLENBQUMsQ0FBQztFQUVuQixJQUFNbUQsV0FBVyxHQUFHLElBQUFqQixrQkFBVyxFQUFDLFlBQUs7SUFDbkNULE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDWEksWUFBWSxDQUFDLEVBQUUsQ0FBQztJQUNoQjVCLE9BQU8sS0FBQSxJQUFBLElBQVBBLE9BQU8sS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBUEEsT0FBTyxDQUFHLEVBQUUsQ0FBQztFQUNmLENBQUMsRUFBRSxDQUFDQSxPQUFPLENBQUMsQ0FBQztFQUViLElBQU1tRCxnQkFBZ0IsR0FBRyxJQUFBbEIsa0JBQVcsRUFDbEMsVUFBQ21CLFFBQWlCLEVBQUk7SUFDcEJwQyxPQUFPLENBQUNvQyxRQUFRLENBQUM7SUFDakIsSUFBSUEsUUFBUSxFQUFFO0lBQ2Q7SUFDQTVCLE9BQU8sQ0FBQ0csU0FBUyxDQUFDO0lBQ2xCUCxVQUFVLENBQUMsRUFBRSxDQUFDO0VBQ2hCLENBQUMsRUFDRCxDQUFDTyxTQUFTLENBQUMsQ0FDWjtFQUVELElBQU0wQixTQUFTLEdBQUcsSUFBQXBCLGtCQUFXLEVBQUMsVUFBQzNCLE1BQW9CLEVBQUVnRCxPQUFnQixFQUFJO0lBQ3ZFLE9BQ0UsSUFBQUMsZ0JBQUEsRUFBQ0MsVUFBSSxFQUFBO01BQUNDLEtBQUssRUFBQyxRQUFRO01BQUNDLE9BQU8sRUFBQyxlQUFlO01BQUNDLEdBQUcsRUFBRSxDQUFDO01BQUV6RSxTQUFTLEtBQUEvQixNQUFBLENBQUtGLFFBQVEsVUFBTztNQUFBMkcsUUFBQSxFQUFBLENBQ2hGLElBQUFsRyxlQUFBLEVBQUNtRywyQkFBZSxFQUFBO1FBQUM3RixJQUFJLEVBQUMsSUFBSTtRQUFDa0IsU0FBUyxLQUFBL0IsTUFBQSxDQUFLRixRQUFRLGVBQVk7UUFBQTJHLFFBQUEsRUFDMUR0RCxNQUFNLENBQUMxQjtNQUFLLENBQUEsQ0FDRyxFQUNsQixJQUFBbEIsZUFBQSxFQUFDb0csa0JBQVEsRUFBQTtRQUFDUixPQUFPLEVBQUVBLE9BQU87UUFBRVMsUUFBUSxFQUFBLElBQUE7UUFBQzdFLFNBQVMsS0FBQS9CLE1BQUEsQ0FBS0YsUUFBUTtNQUFhLENBQUEsQ0FBSTtJQUFBLENBQUEsQ0FDdkU7RUFFWCxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU47RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNK0csV0FBVyxHQUFHLElBQUEvQixrQkFBVyxFQUFDLFlBQUs7SUFDbkMsSUFBSU4sU0FBUyxDQUFDNUUsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUMxQjtNQUNBO01BQ0E7TUFDQSxPQUNFLElBQUFXLGVBQUEsRUFBQ3VHLDBCQUFjLEVBQUE7UUFBQ2pHLElBQUksRUFBQyxJQUFJO1FBQUNDLEtBQUssRUFBQyxTQUFTO1FBQUNpQixTQUFTLEtBQUEvQixNQUFBLENBQUtGLFFBQVEsWUFBUztRQUFBMkcsUUFBQSxFQUN0RXBFO01BQVEsQ0FBQSxDQUNNO0lBRXJCO0lBQ0EsSUFBTTBFLEtBQUssR0FBRzNELGFBQWEsQ0FBQzRELEdBQUcsQ0FBQ3hDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxJQUFNeUMsVUFBVSxHQUFHRixLQUFLLEdBQUdBLEtBQUssQ0FBQ3RGLEtBQUssR0FBRytDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDckQsSUFBTTBDLEtBQUssR0FBRzFDLFNBQVMsQ0FBQzVFLE1BQU0sR0FBRyxDQUFDO0lBQ2xDLE9BQ0UsSUFBQXdHLGdCQUFBLEVBQUNVLDBCQUFjLEVBQUE7TUFBQ2pHLElBQUksRUFBQyxJQUFJO01BQUNrQixTQUFTLEtBQUEvQixNQUFBLENBQUtGLFFBQVEsWUFBUztNQUFBMkcsUUFBQSxFQUFBLENBQ3ZELElBQUFsRyxlQUFBLEVBQUEsTUFBQSxFQUFBO1FBQU13QixTQUFTLEtBQUEvQixNQUFBLENBQUtGLFFBQVEsa0JBQWU7UUFBQTJHLFFBQUEsRUFBR1E7TUFBVSxDQUFBLENBQVEsRUFDL0RDLEtBQUssR0FBRyxDQUFDLElBQUksSUFBQTNHLGVBQUEsRUFBQSxNQUFBLEVBQUE7UUFBTXdCLFNBQVMsS0FBQS9CLE1BQUEsQ0FBS0YsUUFBUSxpQkFBYztRQUFBMkcsUUFBQSxFQUFHdEYsV0FBVyxDQUFDK0YsS0FBSztNQUFDLENBQUEsQ0FBUTtJQUFBLENBQUEsQ0FDdEU7RUFFckIsQ0FBQyxFQUFFLENBQUM3RSxRQUFRLEVBQUVtQyxTQUFTLEVBQUVwQixhQUFhLENBQUMsQ0FBQztFQUV4QyxPQUNFLElBQUE3QyxlQUFBLEVBQUM0RyxjQUFNLEVBQUE5SCxNQUFBLENBQUErSCxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQ0R0RSxJQUFJLEVBQUE7SUFDUnVFLFFBQVEsRUFBQSxJQUFBO0lBQ1J4RyxJQUFJLEVBQUVBLElBQUk7SUFDVlksS0FBSyxFQUFFQSxLQUFLO0lBQ1pTLFdBQVcsRUFBRUEsV0FBVztJQUN4QkgsU0FBUyxFQUFFLElBQUF1RixtQkFBTyxFQUFDeEgsUUFBUSxFQUFFaUMsU0FBUyxDQUFDO0lBQ3ZDd0YsY0FBYyxFQUFFeEgsU0FBUztJQUN6QjJCLEtBQUssRUFBRTBDLElBQUk7SUFDWFIsSUFBSSxFQUFFQSxJQUFJO0lBQ1Y0RCxZQUFZLEVBQUV4QixnQkFBZ0I7SUFDOUJ5QixRQUFRLEVBQUVuQyxrQkFBa0I7SUFDNUJvQyxVQUFVLEVBQUVuRixNQUFNO0lBQ2xCRSxpQkFBaUIsRUFBRUEsaUJBQWlCO0lBQ3BDc0MsV0FBVyxFQUFFZixPQUFPO0lBQ3BCMkQsY0FBYyxFQUFFMUQsVUFBVTtJQUMxQlksWUFBWSxFQUFFQSxZQUFZO0lBQzFCMUMsT0FBTyxFQUFFWSxNQUFNO0lBQ2Y2RSxXQUFXLEVBQ1RqRCxTQUFTLEdBQUdrRCxTQUFTLEdBQ25CLElBQUF6QixnQkFBQSxFQUFBLFFBQUEsRUFBQTtNQUNFMEIsSUFBSSxFQUFDLFFBQVE7TUFDYi9GLFNBQVMsRUFBRSxJQUFBdUYsbUJBQU8sS0FBQXRILE1BQUEsQ0FBSUYsUUFBUSxZQUFTNEUsVUFBVSxPQUFBMUUsTUFBQSxDQUFPRixRQUFRLG1CQUFnQixDQUFDO01BQ2pGaUksT0FBTyxFQUFFbEMsY0FBYztNQUFBWSxRQUFBLEVBQUEsQ0FFdkIsSUFBQWxHLGVBQUEsRUFBQ21HLDJCQUFlLEVBQUE7UUFBQzdGLElBQUksRUFBQyxJQUFJO1FBQUE0RixRQUFBLEVBQUVwRTtNQUFRLENBQUEsQ0FBbUIsRUFDdkQsSUFBQTlCLGVBQUEsRUFBQ29HLGtCQUFRLEVBQUE7UUFBQ1IsT0FBTyxFQUFFekIsVUFBVTtRQUFFa0MsUUFBUSxFQUFBLElBQUE7UUFBQzdFLFNBQVMsS0FBQS9CLE1BQUEsQ0FBS0YsUUFBUTtNQUFhLENBQUEsQ0FBSTtJQUFBLENBQUEsQ0FFbEY7SUFFSDZDLFlBQVksRUFBRUEsWUFBWTtJQUMxQmtFLFdBQVcsRUFBRUEsV0FBVztJQUN4Qm1CLFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFHN0UsTUFBTSxFQUFFOEUsSUFBSTtNQUFBLE9BQUsvQixTQUFTLENBQUMvQyxNQUFzQixFQUFFOEUsSUFBSSxDQUFDQyxRQUFRLENBQUM7SUFBQTtJQUNoRkMsV0FBVyxFQUNULElBQUEvQixnQkFBQSxFQUFDQyxVQUFJLEVBQUE7TUFBQ0csR0FBRyxFQUFFLENBQUM7TUFBRXpFLFNBQVMsS0FBQS9CLE1BQUEsQ0FBS0YsUUFBUSxhQUFVO01BQUEyRyxRQUFBLEVBQUEsQ0FDNUMsSUFBQWxHLGVBQUEsRUFBQzZILGNBQU0sRUFBQTtRQUFDdEgsS0FBSyxFQUFDLE1BQU07UUFBQ0QsSUFBSSxFQUFDLE9BQU87UUFBQ0ksS0FBSyxFQUFFSSxnQkFBZ0I7UUFBRTBHLE9BQU8sRUFBRWhDLFdBQVc7UUFBQVUsUUFBQSxFQUM1RXhHO01BQVcsQ0FBQSxDQUNMLEVBQ1QsSUFBQU0sZUFBQSxFQUFDNkgsY0FBTSxFQUFBO1FBQUN0SCxLQUFLLEVBQUMsU0FBUztRQUFDRCxJQUFJLEVBQUMsT0FBTztRQUFDSSxLQUFLLEVBQUVJLGdCQUFnQjtRQUFFMEcsT0FBTyxFQUFFakMsV0FBVztRQUFBVyxRQUFBLEVBQy9Fdkc7TUFBVyxDQUFBLENBQ0w7SUFBQSxDQUFBO0VBQ0osQ0FBQSxDQUFBLENBRVQ7QUFFTixDQUFDO0FBRU0sSUFBTW1JLFlBQVksR0FBQUMsT0FBQSxDQUFBRCxZQUFBLGdCQUFHLElBQUFFLFdBQUksRUFBQzNHLGdCQUFnQixDQUFDIiwiZmlsZSI6ImJ1c2luZXNzL0ZpbHRlci9PcHRpb24vT3B0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IG1lbW8sIHVzZUNhbGxiYWNrLCB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvQnV0dG9uJztcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9DaGVja2JveCc7XG5pbXBvcnQgeyBFbXB0eSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvRW1wdHknO1xuaW1wb3J0IHsgRmxleCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvRmxleCc7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvSWNvbnMnO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9TZWxlY3QnO1xuaW1wb3J0IHsgVHlwb2dyYXBoeUJvZHksIFR5cG9ncmFwaHlMYWJlbCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvVHlwb2dyYXBoeSc7XG5pbXBvcnQgeyBqb2luQ2xzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5jb25zdCBXUkFQX0NMUyA9ICdvbS1vcHRpb24tZmlsdGVyJztcbi8vIFRoZSBwYW5lbCBpcyBwb3J0YWxlZCB0byA8Ym9keT4sIHNvIHBhbmVsLXNjb3BlZCBvdmVycmlkZXMgYXJlIGtleWVkIG9mZiB0aGlzXG4vLyBjbGFzcyAocGFzc2VkIGFzIGBwYW5lbENsYXNzTmFtZWApIHJhdGhlciB0aGFuIHRoZSB0cmlnZ2VyIHJvb3QuXG5jb25zdCBQQU5FTF9DTFMgPSBgJHtXUkFQX0NMU30tcGFuZWxgO1xuY29uc3QgUkVTRVRfTEFCRUwgPSAnUmVzZXQnO1xuY29uc3QgQVBQTFlfTEFCRUwgPSAnQXBwbHknO1xuY29uc3QgREVGQVVMVF9BTExfTEFCRUwgPSAnQWxsJztcbmNvbnN0IERFRkFVTFRfUExBQ0VIT0xERVIgPSAnU2VsZWN0JztcbmNvbnN0IERFRkFVTFRfU0VBUkNIX1BMQUNFSE9MREVSID0gJ1NlYXJjaCc7XG5jb25zdCBERUZBVUxUX0VNUFRZID0gKF9qc3goRW1wdHksIHsgdmFyaWFudDogJ2ZpbGwnLCBpY29uOiBfanN4KEljb25zLCB7IG5hbWU6ICdzZWFyY2gnLCBzaXplOiAxNiwgY29sb3I6ICdjdXJyZW50Q29sb3InIH0pLCB0aXRsZTogJ05vIHJlc3VsdHMnLCBkZXNjcmlwdGlvbjogJ1RyeSBhIGRpZmZlcmVudCBuYW1lIG9yIGFkanVzdCB5b3VyIHNlYXJjaCBmaWx0ZXJzLicsIHN0eWxlOiB7IHBhZGRpbmc6IDAgfSB9KSk7XG5jb25zdCBNT1JFX1NVRkZJWCA9IChjb3VudCkgPT4gYCsgJHtjb3VudH0gbW9yZWA7XG5jb25zdCBGVUxMX1dJRFRIX1NUWUxFID0geyBmbGV4OiAxIH07XG5jb25zdCB0b09wdGlvbiA9IChyYXcpID0+ICh7XG4gICAgbGFiZWw6IHJhdy5sYWJlbCxcbiAgICB2YWx1ZTogcmF3LnZhbHVlLFxuICAgIHNlYXJjaFRleHQ6IHJhdy5sYWJlbCxcbn0pO1xuY29uc3QgT3B0aW9uRmlsdGVyQmFzZSA9IChfYSkgPT4ge1xuICAgIHZhciB7IHJlZiwgY2xhc3NOYW1lLCBzaXplID0gJ3NtYWxsJywgbGFiZWwsIHBsYWNlaG9sZGVyID0gREVGQVVMVF9QTEFDRUhPTERFUiwgb3B0aW9ucywgYWxsTGFiZWwgPSBERUZBVUxUX0FMTF9MQUJFTCwgc2VhcmNoID0gdHJ1ZSwgc2VhcmNoUGxhY2Vob2xkZXIgPSBERUZBVUxUX1NFQVJDSF9QTEFDRUhPTERFUiwgZW1wdHlDb250ZW50ID0gREVGQVVMVF9FTVBUWSwgb25BcHBseSwgb25SZXNldCB9ID0gX2EsIHJlc3QgPSBfX3Jlc3QoX2EsIFtcInJlZlwiLCBcImNsYXNzTmFtZVwiLCBcInNpemVcIiwgXCJsYWJlbFwiLCBcInBsYWNlaG9sZGVyXCIsIFwib3B0aW9uc1wiLCBcImFsbExhYmVsXCIsIFwic2VhcmNoXCIsIFwic2VhcmNoUGxhY2Vob2xkZXJcIiwgXCJlbXB0eUNvbnRlbnRcIiwgXCJvbkFwcGx5XCIsIFwib25SZXNldFwiXSk7XG4gICAgY29uc3QgbWFwcGVkID0gdXNlTWVtbygoKSA9PiBvcHRpb25zLm1hcCh0b09wdGlvbiksIFtvcHRpb25zXSk7XG4gICAgY29uc3QgYWxsVmFsdWVzID0gdXNlTWVtbygoKSA9PiBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUpLCBbb3B0aW9uc10pO1xuICAgIGNvbnN0IG9wdGlvbkJ5VmFsdWUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBtYXBwZWQuZm9yRWFjaCgob3B0aW9uKSA9PiBtYXAuc2V0KG9wdGlvbi52YWx1ZSwgb3B0aW9uKSk7XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfSwgW21hcHBlZF0pO1xuICAgIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBba2V5d29yZCwgc2V0S2V5d29yZF0gPSB1c2VTdGF0ZSgnJyk7XG4gICAgLy8gYHRlbXBgIGlzIHRoZSBpbi1wYW5lbCBkcmFmdDsgYGNvbW1pdHRlZGAgaXMgdGhlIGxhc3QgQXBwbGllZCBzZWxlY3Rpb24uXG4gICAgLy8gT25seSBBcHBseSBwcm9tb3RlcyBgdGVtcGAg4oaSIGBjb21taXR0ZWRgIGFuZCBub3RpZmllcyB0aGUgcGFyZW50LiBXaXRoIGFuXG4gICAgLy8gXCJBbGxcIiByb3csIFwiYWxsIHNlbGVjdGVkXCIgaXMgcmVwcmVzZW50ZWQgYnkgYW4gZW1wdHkgYXJyYXkuXG4gICAgY29uc3QgW3RlbXAsIHNldFRlbXBdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtjb21taXR0ZWQsIHNldENvbW1pdHRlZF0gPSB1c2VTdGF0ZShbXSk7XG4gICAgLy8gVGhlIFwiQWxsXCIgcm93IGlzIGNoZWNrZWQgZXhhY3RseSB3aGVuIG5vdGhpbmcgc3BlY2lmaWMgaXMgc2VsZWN0ZWQuXG4gICAgY29uc3QgYWxsQ2hlY2tlZCA9IHRlbXAubGVuZ3RoID09PSAwO1xuICAgIC8vIFdoaWxlIHNlYXJjaGluZywgdGhlIFwiQWxsXCIgcm93IGlzIG1lYW5pbmdsZXNzIOKAlCBoaWRlIGl0IHNvIGEgbm8tbWF0Y2hcbiAgICAvLyBzZWFyY2ggc2hvd3MgdGhlIGVtcHR5IHN0YXRlIGluc3RlYWQgb2YgYSBsb25lIFwiQWxsXCIgcm93LlxuICAgIGNvbnN0IHNlYXJjaGluZyA9IHNlYXJjaCAmJiBrZXl3b3JkLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGZpbHRlck9wdGlvbiA9IHVzZUNhbGxiYWNrKChzZWFyY2hWYWx1ZSwgb3B0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSBzZWFyY2hWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0ZXJtKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IG1hcHBlZCA9IG9wdGlvbjtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBtYXBwZWQuc2VhcmNoVGV4dCA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gbWFwcGVkLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9LCBbXSk7XG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICAgICAgICBzZXRUZW1wKFtdKTtcbiAgICAgICAgICAgIHNldENvbW1pdHRlZChbXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlc2V0OiAoKSA9PiB7XG4gICAgICAgICAgICBzZXRUZW1wKFtdKTtcbiAgICAgICAgICAgIHNldENvbW1pdHRlZChbXSk7XG4gICAgICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoW10pO1xuICAgICAgICB9LFxuICAgIH0pLCBbb25SZXNldF0pO1xuICAgIGNvbnN0IGhhbmRsZVNlbGVjdENoYW5nZSA9IHVzZUNhbGxiYWNrKChuZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZXMgPSAoQXJyYXkuaXNBcnJheShuZXh0KSA/IG5leHQgOiBbXSkubWFwKFN0cmluZyk7XG4gICAgICAgIC8vIFNlbGVjdGluZyBldmVyeSBjb25jcmV0ZSBvcHRpb24gY29sbGFwc2VzIHRvIFwiYWxsXCIgKFtdKSwgbWF0Y2hpbmcgdGhlXG4gICAgICAgIC8vIGJhY2tlbmQgY29udmVudGlvbiB0aGF0IGVtcHR5ID09IG5vIGZpbHRlci5cbiAgICAgICAgY29uc3QgY29sbGFwc2UgPSBuZXh0VmFsdWVzLmxlbmd0aCA9PT0gYWxsVmFsdWVzLmxlbmd0aDtcbiAgICAgICAgc2V0VGVtcChjb2xsYXBzZSA/IFtdIDogbmV4dFZhbHVlcyk7XG4gICAgfSwgW2FsbFZhbHVlc10pO1xuICAgIGNvbnN0IGhhbmRsZUFsbENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAvLyBUaGUgXCJBbGxcIiByb3cgaXMgZXhjbHVzaXZlOiB0dXJuaW5nIGl0IG9uIGNsZWFycyBzcGVjaWZpYyBwaWNrcy5cbiAgICAgICAgc2V0VGVtcChbXSk7XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGhhbmRsZUFwcGx5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBzZXRDb21taXR0ZWQodGVtcCk7XG4gICAgICAgIG9uQXBwbHkodGVtcCk7XG4gICAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgIH0sIFt0ZW1wLCBvbkFwcGx5XSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHNldFRlbXAoW10pO1xuICAgICAgICBzZXRDb21taXR0ZWQoW10pO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoW10pO1xuICAgIH0sIFtvblJlc2V0XSk7XG4gICAgY29uc3QgaGFuZGxlT3BlbkNoYW5nZSA9IHVzZUNhbGxiYWNrKChuZXh0T3BlbikgPT4ge1xuICAgICAgICBzZXRPcGVuKG5leHRPcGVuKTtcbiAgICAgICAgaWYgKG5leHRPcGVuKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBDbG9zaW5nIHdpdGhvdXQgQXBwbHkgZGlzY2FyZHMgdGhlIGRyYWZ0LlxuICAgICAgICBzZXRUZW1wKGNvbW1pdHRlZCk7XG4gICAgICAgIHNldEtleXdvcmQoJycpO1xuICAgIH0sIFtjb21taXR0ZWRdKTtcbiAgICBjb25zdCByZW5kZXJSb3cgPSB1c2VDYWxsYmFjaygob3B0aW9uLCBjaGVja2VkKSA9PiB7XG4gICAgICAgIHJldHVybiAoX2pzeHMoRmxleCwgeyBhbGlnbjogJ2NlbnRlcicsIGp1c3RpZnk6ICdzcGFjZS1iZXR3ZWVuJywgZ2FwOiA4LCBjbGFzc05hbWU6IGAke1dSQVBfQ0xTfV9fcm93YCwgY2hpbGRyZW46IFtfanN4KFR5cG9ncmFwaHlMYWJlbCwgeyBzaXplOiAnbWQnLCBjbGFzc05hbWU6IGAke1dSQVBfQ0xTfV9fcm93LW5hbWVgLCBjaGlsZHJlbjogb3B0aW9uLmxhYmVsIH0pLCBfanN4KENoZWNrYm94LCB7IGNoZWNrZWQ6IGNoZWNrZWQsIHJlYWRPbmx5OiB0cnVlLCBjbGFzc05hbWU6IGAke1dSQVBfQ0xTfV9fcm93LWNoZWNrYCB9KV0gfSkpO1xuICAgIH0sIFtdKTtcbiAgICAvLyBUaGUgdHJpZ2dlciByZWZsZWN0cyB0aGUgQ09NTUlUVEVEIHNlbGVjdGlvbiBvbmx5IOKAlCBgdGVtcGAgaXMgdGhlIGluLXBhbmVsXG4gICAgLy8gZHJhZnQgYW5kIG11c3Qgbm90IGxlYWsgaW50byB0aGUgdHJpZ2dlciBiZWZvcmUgQXBwbHkuIEFuIGVtcHR5IGBjb21taXR0ZWRgXG4gICAgLy8gbWVhbnMgXCJhbGxcIiAodGhlIGBhbGxMYWJlbGApLiBgcmVuZGVyVmFsdWVgIHNob3J0LWNpcmN1aXRzIFNlbGVjdCdzIG93blxuICAgIC8vIHBsYWNlaG9sZGVyIGhhbmRsaW5nLCBzbyB0aGUgZW1wdHkgc3RhdGUgbXVzdCByZXR1cm4gYGFsbExhYmVsYCBleHBsaWNpdGx5LlxuICAgIGNvbnN0IHJlbmRlclZhbHVlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBpZiAoY29tbWl0dGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gVGhlIGBhbGxMYWJlbGAgaXMgdGhlIGRlZmF1bHQgZmlsdGVyIHZhbHVlLCBub3QgYW4gZW1wdHkgcGxhY2Vob2xkZXIuXG4gICAgICAgICAgICAvLyBUaGUgdHJpZ2dlcidzIGVtcHR5IGB2YWx1ZWAgbWFrZXMgU2VsZWN0IHdyYXAgdGhpcyBpbiBpdHMgZ3JleVxuICAgICAgICAgICAgLy8gcGxhY2Vob2xkZXIgY2xhc3MsIHNvIGZvcmNlIHRoZSBkZWZhdWx0IGRhcmsgdGV4dCB0byBtYXRjaCBEYXRlUmFuZ2UuXG4gICAgICAgICAgICByZXR1cm4gKF9qc3goVHlwb2dyYXBoeUJvZHksIHsgc2l6ZTogJ21kJywgY29sb3I6ICdkZWZhdWx0JywgY2xhc3NOYW1lOiBgJHtXUkFQX0NMU31fX3ZhbHVlYCwgY2hpbGRyZW46IGFsbExhYmVsIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdCA9IG9wdGlvbkJ5VmFsdWUuZ2V0KGNvbW1pdHRlZFswXSk7XG4gICAgICAgIGNvbnN0IGZpcnN0TGFiZWwgPSBmaXJzdCA/IGZpcnN0LmxhYmVsIDogY29tbWl0dGVkWzBdO1xuICAgICAgICBjb25zdCBleHRyYSA9IGNvbW1pdHRlZC5sZW5ndGggLSAxO1xuICAgICAgICByZXR1cm4gKF9qc3hzKFR5cG9ncmFwaHlCb2R5LCB7IHNpemU6ICdtZCcsIGNsYXNzTmFtZTogYCR7V1JBUF9DTFN9X192YWx1ZWAsIGNoaWxkcmVuOiBbX2pzeChcInNwYW5cIiwgeyBjbGFzc05hbWU6IGAke1dSQVBfQ0xTfV9fdmFsdWUtbGFiZWxgLCBjaGlsZHJlbjogZmlyc3RMYWJlbCB9KSwgZXh0cmEgPiAwICYmIF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBgJHtXUkFQX0NMU31fX3ZhbHVlLW1vcmVgLCBjaGlsZHJlbjogTU9SRV9TVUZGSVgoZXh0cmEpIH0pXSB9KSk7XG4gICAgfSwgW2FsbExhYmVsLCBjb21taXR0ZWQsIG9wdGlvbkJ5VmFsdWVdKTtcbiAgICByZXR1cm4gKF9qc3goU2VsZWN0LCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IG11bHRpcGxlOiB0cnVlLCBzaXplOiBzaXplLCBsYWJlbDogbGFiZWwsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgY2xhc3NOYW1lOiBqb2luQ2xzKFdSQVBfQ0xTLCBjbGFzc05hbWUpLCBwYW5lbENsYXNzTmFtZTogUEFORUxfQ0xTLCB2YWx1ZTogdGVtcCwgb3Blbjogb3Blbiwgb25PcGVuQ2hhbmdlOiBoYW5kbGVPcGVuQ2hhbmdlLCBvbkNoYW5nZTogaGFuZGxlU2VsZWN0Q2hhbmdlLCBzZWFyY2hhYmxlOiBzZWFyY2gsIHNlYXJjaFBsYWNlaG9sZGVyOiBzZWFyY2hQbGFjZWhvbGRlciwgc2VhcmNoVmFsdWU6IGtleXdvcmQsIG9uU2VhcmNoQ2hhbmdlOiBzZXRLZXl3b3JkLCBmaWx0ZXJPcHRpb246IGZpbHRlck9wdGlvbiwgb3B0aW9uczogbWFwcGVkLCBwYW5lbEhlYWRlcjogc2VhcmNoaW5nID8gdW5kZWZpbmVkIDogKF9qc3hzKFwiYnV0dG9uXCIsIHsgdHlwZTogJ2J1dHRvbicsIGNsYXNzTmFtZTogam9pbkNscyhgJHtXUkFQX0NMU31fX2FsbGAsIGFsbENoZWNrZWQgJiYgYCR7V1JBUF9DTFN9X19hbGwtLWNoZWNrZWRgKSwgb25DbGljazogaGFuZGxlQWxsQ2xpY2ssIGNoaWxkcmVuOiBbX2pzeChUeXBvZ3JhcGh5TGFiZWwsIHsgc2l6ZTogJ21kJywgY2hpbGRyZW46IGFsbExhYmVsIH0pLCBfanN4KENoZWNrYm94LCB7IGNoZWNrZWQ6IGFsbENoZWNrZWQsIHJlYWRPbmx5OiB0cnVlLCBjbGFzc05hbWU6IGAke1dSQVBfQ0xTfV9fcm93LWNoZWNrYCB9KV0gfSkpLCBlbXB0eUNvbnRlbnQ6IGVtcHR5Q29udGVudCwgcmVuZGVyVmFsdWU6IHJlbmRlclZhbHVlLCByZW5kZXJPcHRpb246IChvcHRpb24sIG1ldGEpID0+IHJlbmRlclJvdyhvcHRpb24sIG1ldGEuc2VsZWN0ZWQpLCBwYW5lbEZvb3RlcjogX2pzeHMoRmxleCwgeyBnYXA6IDgsIGNsYXNzTmFtZTogYCR7V1JBUF9DTFN9X19mb290ZXJgLCBjaGlsZHJlbjogW19qc3goQnV0dG9uLCB7IGNvbG9yOiAnZ3JleScsIHNpemU6ICdzbWFsbCcsIHN0eWxlOiBGVUxMX1dJRFRIX1NUWUxFLCBvbkNsaWNrOiBoYW5kbGVSZXNldCwgY2hpbGRyZW46IFJFU0VUX0xBQkVMIH0pLCBfanN4KEJ1dHRvbiwgeyBjb2xvcjogJ3ByaW1hcnknLCBzaXplOiAnc21hbGwnLCBzdHlsZTogRlVMTF9XSURUSF9TVFlMRSwgb25DbGljazogaGFuZGxlQXBwbHksIGNoaWxkcmVuOiBBUFBMWV9MQUJFTCB9KV0gfSkgfSkpKTtcbn07XG5leHBvcnQgY29uc3QgT3B0aW9uRmlsdGVyID0gbWVtbyhPcHRpb25GaWx0ZXJCYXNlKTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -0,0 +1,2 @@
1
+ export { OptionFilter } from './Option';
2
+ export * from './interface';
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ OptionFilter: true
8
+ };
9
+ Object.defineProperty(exports, "OptionFilter", {
10
+ enumerable: true,
11
+ get: function get() {
12
+ return _Option.OptionFilter;
13
+ }
14
+ });
15
+ var _Option = require("./Option");
16
+ var _interface = require("./interface");
17
+ Object.keys(_interface).forEach(function (key) {
18
+ if (key === "default" || key === "__esModule") return;
19
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
20
+ if (key in exports && exports[key] === _interface[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function get() {
24
+ return _interface[key];
25
+ }
26
+ });
27
+ });
28
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbHRlci9zcmMvYnVzaW5lc3MvRmlsdGVyL09wdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6WyJfT3B0aW9uIiwicmVxdWlyZSIsIl9pbnRlcmZhY2UiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9leHBvcnROYW1lcyIsImV4cG9ydHMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBQUFFLE1BQUEsQ0FBQUMsSUFBQSxDQUFBRixVQUFBLEVBQUFHLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBSCxNQUFBLENBQUFJLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFDLFlBQUEsRUFBQUosR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUssT0FBQSxJQUFBQSxPQUFBLENBQUFMLEdBQUEsTUFBQUosVUFBQSxDQUFBSSxHQUFBO0VBQUFILE1BQUEsQ0FBQVMsY0FBQSxDQUFBRCxPQUFBLEVBQUFMLEdBQUE7SUFBQU8sVUFBQTtJQUFBQyxHQUFBLFdBQUFBLElBQUE7TUFBQSxPQUFBWixVQUFBLENBQUFJLEdBQUE7SUFBQTtFQUFBO0FBQUEiLCJmaWxlIjoiYnVzaW5lc3MvRmlsdGVyL09wdGlvbi9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1,81 @@
1
+ import type { ReactNode, RefObject } from 'react';
2
+ import type { SelectProps, SelectSize } from "../../../components/Select";
3
+ /**
4
+ * A single selectable row. Consumers map their enum/list into this shape — the
5
+ * component renders a fixed single-line row (label + trailing checkbox) and
6
+ * never exposes a render slot.
7
+ */
8
+ export interface OptionFilterOption {
9
+ /** Row text, e.g. `"Sent"` / `"Completed"`. */
10
+ label: string;
11
+ /** Stable value echoed back through `onApply`, e.g. `"SENT"` / `"Completed"`. */
12
+ value: string;
13
+ }
14
+ /** Imperative handle exposed via `ref` for parent-driven reset/clear. */
15
+ export interface OptionFilterHandler {
16
+ /** Wipe the selection to empty (no rows checked) without firing callbacks. */
17
+ clear: () => void;
18
+ /** Restore the initial "all selected" state and fire `onReset`. */
19
+ reset: () => void;
20
+ }
21
+ export interface OptionFilterProps extends Omit<SelectProps, 'ref' | 'options' | 'multiple' | 'value' | 'defaultValue' | 'onChange' | 'searchable' | 'searchValue' | 'defaultSearchValue' | 'onSearchChange' | 'filterOption' | 'renderOption' | 'renderOptionContent' | 'renderValue' | 'panelHeader' | 'panelFooter' | 'emptyContent' | 'open' | 'defaultOpen' | 'onOpenChange' | 'allowDeselect' | 'maxVisibleValues' | 'size' | 'onReset'> {
22
+ ref?: RefObject<OptionFilterHandler | null>;
23
+ /**
24
+ * Trigger size. Mirrors the host filter row sizing.
25
+ * @default 'small'
26
+ */
27
+ size?: SelectSize;
28
+ /** Optional field label rendered above the trigger. */
29
+ label?: ReactNode;
30
+ /**
31
+ * Trigger placeholder shown before any selection. Usually unused since an
32
+ * empty selection renders {@link allLabel} instead.
33
+ * @default 'Select'
34
+ */
35
+ placeholder?: string;
36
+ /**
37
+ * The selectable rows. Map your enum/list into {@link OptionFilterOption}.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const TYPE_OPTIONS: OptionFilterOption[] = [
42
+ * { label: 'Sent', value: 'SENT' },
43
+ * { label: 'Received', value: 'RECEIVED' },
44
+ * ];
45
+ * <OptionFilter options={TYPE_OPTIONS} allLabel='All types' onApply={setTypes} />
46
+ * ```
47
+ */
48
+ options: OptionFilterOption[];
49
+ /**
50
+ * Text for the leading "select all" row, e.g. `"All types"`. Selecting it
51
+ * clears every specific pick; `onApply` then receives `[]` (translate to "no
52
+ * filter").
53
+ * @default 'All'
54
+ */
55
+ allLabel?: string;
56
+ /**
57
+ * Show a search box above the list (matches the option `label`). Pass
58
+ * `search={false}` for a short enum that needs no filtering.
59
+ * @default true
60
+ */
61
+ search?: boolean;
62
+ /**
63
+ * Placeholder for the search box.
64
+ * @default 'Search'
65
+ */
66
+ searchPlaceholder?: string;
67
+ /**
68
+ * Content shown when there are no options. Defaults to an
69
+ * `<Empty icon='search' title='No results' />`.
70
+ */
71
+ emptyContent?: ReactNode;
72
+ /**
73
+ * Fired when the user commits the selection via the panel's Apply button.
74
+ * Receives the selected values, or `[]` for "all" — the component never
75
+ * injects an `'all'` sentinel, so translate `[]` to whatever your API expects
76
+ * at the call site.
77
+ */
78
+ onApply: (values: string[]) => void;
79
+ /** Fired when the user clears the selection via the panel's Reset button. */
80
+ onReset?: (values: string[]) => void;
81
+ }
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzaW5lc3MvRmlsdGVyL09wdGlvbi9pbnRlcmZhY2UuanMiLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMiLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbHRlci9PcHRpb24vaW50ZXJmYWNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7fTsiXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Retrieves the spacing value for a given token key.
3
+ *
4
+ * @param {string} $key - The spacing token key (e.g., '100', '200').
5
+ * @return {length|null} The computed spacing value or null if the key is invalid.
6
+ * @example
7
+ * .element {
8
+ * padding: om-spacing-token('200'); // Returns 8px if $om-sys-spacing-unit is 4px
9
+ * }
10
+ */
11
+ /**
12
+ * Computes the spacing value based on a token key or a direct length value.
13
+ *
14
+ * @param {string|length} $value - The spacing token key (e.g., '100') or a direct length value (e.g., '16px').
15
+ * @return {length} The computed spacing value.
16
+ * @example
17
+ * .element {
18
+ * margin: om-spacing-value('300'); // Returns 12px if $om-sys-spacing-unit is 4px
19
+ * padding: om-spacing-value(16px); // Returns 16px
20
+ * gap: om-spacing-value(2); // Returns 8px if $om-sys-spacing-unit is 4px
21
+ * }
22
+ */
23
+ .om-option-filter__value {
24
+ display: inline-flex;
25
+ align-items: center;
26
+ width: 100%;
27
+ overflow: hidden;
28
+ line-height: 18px;
29
+ }
30
+ .om-option-filter__value-label {
31
+ flex: 0 1 auto;
32
+ min-width: 0;
33
+ overflow: hidden;
34
+ white-space: nowrap;
35
+ text-overflow: ellipsis;
36
+ }
37
+ .om-option-filter__value-more {
38
+ flex: 0 0 auto;
39
+ margin-left: var(--om-spacing-100, 4px);
40
+ color: var(--om-text-default-tertiary, #646465);
41
+ }
42
+
43
+ .om-option-filter-panel .om-component-ui-select-panel-header {
44
+ margin-bottom: var(--om-spacing-050, 2px);
45
+ }
46
+ .om-option-filter-panel .om-option-filter__row {
47
+ width: 100%;
48
+ }
49
+ .om-option-filter-panel .om-option-filter__row-name {
50
+ min-width: 0;
51
+ overflow: hidden;
52
+ white-space: nowrap;
53
+ text-overflow: ellipsis;
54
+ }
55
+ .om-option-filter-panel .om-option-filter__row-check {
56
+ flex: 0 0 auto;
57
+ pointer-events: none;
58
+ }
59
+ .om-option-filter-panel .om-option-filter__all {
60
+ display: flex;
61
+ align-items: center;
62
+ justify-content: space-between;
63
+ width: 100%;
64
+ padding: var(--om-spacing-200, 8px);
65
+ border: none;
66
+ background: transparent;
67
+ border-radius: var(--om-radius-200, 8px);
68
+ cursor: pointer;
69
+ }
70
+ .om-option-filter-panel .om-option-filter__all:hover, .om-option-filter-panel .om-option-filter__all--checked {
71
+ background: var(--om-bg-default-secondary, #f8f8f8);
72
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ require("./Option.css");
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbHRlci9PcHRpb24vc3JjL2J1c2luZXNzL0ZpbHRlci9PcHRpb24vc3R5bGUvaW5kZXgudHMiXSwibmFtZXMiOlsicmVxdWlyZSJdLCJtYXBwaW5ncyI6Ijs7QUFBQUEsT0FBQSIsImZpbGUiOiJidXNpbmVzcy9GaWx0ZXIvT3B0aW9uL3N0eWxlL2Nzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -0,0 +1 @@
1
+ import './Option.css';
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ require("./Option.css");
4
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL0ZpbHRlci9PcHRpb24vc3JjL2J1c2luZXNzL0ZpbHRlci9PcHRpb24vc3R5bGUvaW5kZXgudHMiXSwibmFtZXMiOlsicmVxdWlyZSJdLCJtYXBwaW5ncyI6Ijs7QUFBQUEsT0FBQSIsImZpbGUiOiJidXNpbmVzcy9GaWx0ZXIvT3B0aW9uL3N0eWxlL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -1,2 +1,4 @@
1
+ export * from './Account';
2
+ export * from './Asset';
1
3
  export * from './DateRange';
2
- export * from './Dropdown';
4
+ export * from './Option';
@@ -3,6 +3,28 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _Account = require("./Account");
7
+ Object.keys(_Account).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _Account[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function get() {
13
+ return _Account[key];
14
+ }
15
+ });
16
+ });
17
+ var _Asset = require("./Asset");
18
+ Object.keys(_Asset).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _Asset[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function get() {
24
+ return _Asset[key];
25
+ }
26
+ });
27
+ });
6
28
  var _DateRange = require("./DateRange");
7
29
  Object.keys(_DateRange).forEach(function (key) {
8
30
  if (key === "default" || key === "__esModule") return;
@@ -14,15 +36,15 @@ Object.keys(_DateRange).forEach(function (key) {
14
36
  }
15
37
  });
16
38
  });
17
- var _Dropdown = require("./Dropdown");
18
- Object.keys(_Dropdown).forEach(function (key) {
39
+ var _Option = require("./Option");
40
+ Object.keys(_Option).forEach(function (key) {
19
41
  if (key === "default" || key === "__esModule") return;
20
- if (key in exports && exports[key] === _Dropdown[key]) return;
42
+ if (key in exports && exports[key] === _Option[key]) return;
21
43
  Object.defineProperty(exports, key, {
22
44
  enumerable: true,
23
45
  get: function get() {
24
- return _Dropdown[key];
46
+ return _Option[key];
25
47
  }
26
48
  });
27
49
  });
28
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL3NyYy9idXNpbmVzcy9GaWx0ZXIvaW5kZXgudHMiXSwibmFtZXMiOlsiX0RhdGVSYW5nZSIsInJlcXVpcmUiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImV4cG9ydHMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJfRHJvcGRvd24iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSCxVQUFBLEVBQUFJLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBQSxHQUFBLElBQUFDLE9BQUEsSUFBQUEsT0FBQSxDQUFBRCxHQUFBLE1BQUFMLFVBQUEsQ0FBQUssR0FBQTtFQUFBSCxNQUFBLENBQUFLLGNBQUEsQ0FBQUQsT0FBQSxFQUFBRCxHQUFBO0lBQUFHLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQVQsVUFBQSxDQUFBSyxHQUFBO0lBQUE7RUFBQTtBQUFBO0FBQ0EsSUFBQUssU0FBQSxHQUFBVCxPQUFBO0FBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBTyxTQUFBLEVBQUFOLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBQSxHQUFBLElBQUFDLE9BQUEsSUFBQUEsT0FBQSxDQUFBRCxHQUFBLE1BQUFLLFNBQUEsQ0FBQUwsR0FBQTtFQUFBSCxNQUFBLENBQUFLLGNBQUEsQ0FBQUQsT0FBQSxFQUFBRCxHQUFBO0lBQUFHLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQUMsU0FBQSxDQUFBTCxHQUFBO0lBQUE7RUFBQTtBQUFBIiwiZmlsZSI6ImJ1c2luZXNzL0ZpbHRlci9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
50
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1c2luZXNzL3NyYy9idXNpbmVzcy9GaWx0ZXIvaW5kZXgudHMiXSwibmFtZXMiOlsiX0FjY291bnQiLCJyZXF1aXJlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJleHBvcnRzIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiX0Fzc2V0IiwiX0RhdGVSYW5nZSIsIl9PcHRpb24iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxPQUFBO0FBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSCxRQUFBLEVBQUFJLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBQSxHQUFBLElBQUFDLE9BQUEsSUFBQUEsT0FBQSxDQUFBRCxHQUFBLE1BQUFMLFFBQUEsQ0FBQUssR0FBQTtFQUFBSCxNQUFBLENBQUFLLGNBQUEsQ0FBQUQsT0FBQSxFQUFBRCxHQUFBO0lBQUFHLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQVQsUUFBQSxDQUFBSyxHQUFBO0lBQUE7RUFBQTtBQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBVCxPQUFBO0FBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBTyxNQUFBLEVBQUFOLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBQSxHQUFBLElBQUFDLE9BQUEsSUFBQUEsT0FBQSxDQUFBRCxHQUFBLE1BQUFLLE1BQUEsQ0FBQUwsR0FBQTtFQUFBSCxNQUFBLENBQUFLLGNBQUEsQ0FBQUQsT0FBQSxFQUFBRCxHQUFBO0lBQUFHLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQUMsTUFBQSxDQUFBTCxHQUFBO0lBQUE7RUFBQTtBQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBVixPQUFBO0FBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBUSxVQUFBLEVBQUFQLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBQSxHQUFBLElBQUFDLE9BQUEsSUFBQUEsT0FBQSxDQUFBRCxHQUFBLE1BQUFNLFVBQUEsQ0FBQU4sR0FBQTtFQUFBSCxNQUFBLENBQUFLLGNBQUEsQ0FBQUQsT0FBQSxFQUFBRCxHQUFBO0lBQUFHLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQUUsVUFBQSxDQUFBTixHQUFBO0lBQUE7RUFBQTtBQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBWCxPQUFBO0FBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBUyxPQUFBLEVBQUFSLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBQSxHQUFBLElBQUFDLE9BQUEsSUFBQUEsT0FBQSxDQUFBRCxHQUFBLE1BQUFPLE9BQUEsQ0FBQVAsR0FBQTtFQUFBSCxNQUFBLENBQUFLLGNBQUEsQ0FBQUQsT0FBQSxFQUFBRCxHQUFBO0lBQUFHLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQUcsT0FBQSxDQUFBUCxHQUFBO0lBQUE7RUFBQTtBQUFBIiwiZmlsZSI6ImJ1c2luZXNzL0ZpbHRlci9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==