@pie-lib/editable-html-tip-tap 1.0.1 → 1.0.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 (129) hide show
  1. package/lib/components/CharacterPicker.js +221 -0
  2. package/lib/components/EditableHtml.js +323 -0
  3. package/lib/components/MenuBar.js +693 -0
  4. package/lib/components/TiptapContainer.js +90 -0
  5. package/lib/components/buttons/done-button.js +53 -0
  6. package/lib/components/characters/characterUtils.js +112 -0
  7. package/lib/components/characters/custom-popper.js +73 -0
  8. package/lib/components/common/done-button.js +53 -0
  9. package/lib/components/icons/CssIcon.js +37 -0
  10. package/lib/components/icons/RespArea.js +95 -0
  11. package/lib/components/icons/TableIcons.js +69 -0
  12. package/lib/components/icons/TextAlign.js +194 -0
  13. package/lib/components/icons/index.js +194 -0
  14. package/lib/components/image/ImageToolbar.js +16 -0
  15. package/lib/components/image/InsertImageHandler.js +16 -0
  16. package/lib/components/media/MediaDialog.js +16 -0
  17. package/lib/components/media/MediaToolbar.js +16 -0
  18. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +94 -0
  19. package/lib/components/respArea/DragInTheBlank/choice.js +289 -0
  20. package/lib/components/respArea/DragInTheBlank.js +94 -0
  21. package/lib/components/respArea/ExplicitConstructedResponse.js +120 -0
  22. package/lib/components/respArea/InlineDropdown.js +126 -0
  23. package/lib/components/respArea/ToolbarIcon.js +105 -0
  24. package/lib/components/respArea/choice.js +2 -0
  25. package/lib/extensions/component.js +5 -5
  26. package/lib/extensions/custom-toolbar-wrapper.js +2 -4
  27. package/lib/extensions/extended-table.js +30 -0
  28. package/lib/extensions/index.js +52 -0
  29. package/lib/extensions/media.js +5 -5
  30. package/lib/extensions/responseArea.js +7 -7
  31. package/lib/index.js +16 -1454
  32. package/lib/plugins/index.js +10 -82
  33. package/lib/styles/editorContainerStyles.js +200 -0
  34. package/lib/utils/size.js +34 -0
  35. package/package.json +1 -1
  36. package/src/components/CharacterPicker.jsx +185 -0
  37. package/src/components/EditableHtml.jsx +306 -0
  38. package/src/components/MenuBar.jsx +630 -0
  39. package/src/components/TiptapContainer.jsx +96 -0
  40. package/src/components/characters/characterUtils.js +127 -0
  41. package/src/components/image/ImageToolbar.jsx +1 -0
  42. package/src/components/image/InsertImageHandler.js +1 -0
  43. package/src/components/media/MediaDialog.js +1 -0
  44. package/src/components/media/MediaToolbar.jsx +1 -0
  45. package/src/{plugins/respArea/drag-in-the-blank → components/respArea/DragInTheBlank}/choice.jsx +1 -1
  46. package/src/{plugins/respArea/inline-dropdown/index.jsx → components/respArea/InlineDropdown.jsx} +1 -1
  47. package/src/components/respArea/ToolbarIcon.jsx +68 -0
  48. package/src/extensions/component.jsx +2 -2
  49. package/src/extensions/custom-toolbar-wrapper.jsx +6 -7
  50. package/src/extensions/extended-table.js +27 -0
  51. package/src/extensions/index.js +76 -0
  52. package/src/extensions/media.js +10 -4
  53. package/src/extensions/responseArea.js +7 -7
  54. package/src/index.jsx +3 -1409
  55. package/src/styles/editorContainerStyles.js +203 -0
  56. package/src/utils/size.js +32 -0
  57. package/src/__tests__/editor.test.jsx +0 -363
  58. package/src/__tests__/serialization.test.js +0 -291
  59. package/src/block-tags.js +0 -17
  60. package/src/editor.jsx +0 -1197
  61. package/src/extensions/characters.js +0 -46
  62. package/src/old-index.jsx +0 -162
  63. package/src/parse-html.js +0 -8
  64. package/src/plugins/README.md +0 -27
  65. package/src/plugins/characters/index.jsx +0 -284
  66. package/src/plugins/characters/utils.js +0 -447
  67. package/src/plugins/css/index.jsx +0 -340
  68. package/src/plugins/customPlugin/index.jsx +0 -85
  69. package/src/plugins/html/icons/index.jsx +0 -19
  70. package/src/plugins/html/index.jsx +0 -72
  71. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +0 -51
  72. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +0 -27
  73. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +0 -44
  74. package/src/plugins/image/__tests__/component.test.jsx +0 -41
  75. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +0 -42
  76. package/src/plugins/image/__tests__/image-toolbar.test.jsx +0 -11
  77. package/src/plugins/image/__tests__/index.test.js +0 -95
  78. package/src/plugins/image/__tests__/insert-image-handler.test.js +0 -113
  79. package/src/plugins/image/__tests__/mock-change.js +0 -15
  80. package/src/plugins/image/alt-dialog.jsx +0 -82
  81. package/src/plugins/image/component.jsx +0 -343
  82. package/src/plugins/image/image-toolbar.jsx +0 -100
  83. package/src/plugins/image/index.jsx +0 -227
  84. package/src/plugins/image/insert-image-handler.js +0 -79
  85. package/src/plugins/index.jsx +0 -377
  86. package/src/plugins/list/__tests__/index.test.js +0 -54
  87. package/src/plugins/list/index.jsx +0 -305
  88. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +0 -48
  89. package/src/plugins/math/__tests__/index.test.jsx +0 -245
  90. package/src/plugins/math/index.jsx +0 -379
  91. package/src/plugins/media/__tests__/index.test.js +0 -75
  92. package/src/plugins/media/index.jsx +0 -325
  93. package/src/plugins/media/media-dialog.js +0 -624
  94. package/src/plugins/media/media-toolbar.jsx +0 -56
  95. package/src/plugins/media/media-wrapper.jsx +0 -43
  96. package/src/plugins/rendering/index.js +0 -31
  97. package/src/plugins/respArea/index.jsx +0 -299
  98. package/src/plugins/respArea/math-templated/index.jsx +0 -104
  99. package/src/plugins/respArea/utils.jsx +0 -90
  100. package/src/plugins/table/CustomTablePlugin.js +0 -113
  101. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +0 -44
  102. package/src/plugins/table/__tests__/index.test.jsx +0 -401
  103. package/src/plugins/table/__tests__/table-toolbar.test.jsx +0 -42
  104. package/src/plugins/table/index.jsx +0 -427
  105. package/src/plugins/table/table-toolbar.jsx +0 -136
  106. package/src/plugins/textAlign/index.jsx +0 -23
  107. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +0 -923
  108. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +0 -20
  109. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +0 -36
  110. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +0 -46
  111. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +0 -94
  112. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +0 -37
  113. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +0 -51
  114. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +0 -106
  115. package/src/plugins/toolbar/default-toolbar.jsx +0 -206
  116. package/src/plugins/toolbar/editor-and-toolbar.jsx +0 -257
  117. package/src/plugins/toolbar/index.jsx +0 -23
  118. package/src/plugins/toolbar/toolbar-buttons.jsx +0 -138
  119. package/src/plugins/toolbar/toolbar.jsx +0 -338
  120. package/src/plugins/utils.js +0 -31
  121. package/src/serialization.jsx +0 -621
  122. /package/src/{plugins → components}/characters/custom-popper.js +0 -0
  123. /package/src/{plugins/toolbar → components/common}/done-button.jsx +0 -0
  124. /package/src/{plugins/css/icons/index.jsx → components/icons/CssIcon.jsx} +0 -0
  125. /package/src/{plugins/respArea/icons/index.jsx → components/icons/RespArea.jsx} +0 -0
  126. /package/src/{plugins/table/icons/index.jsx → components/icons/TableIcons.jsx} +0 -0
  127. /package/src/{plugins/textAlign/icons/index.jsx → components/icons/TextAlign.jsx} +0 -0
  128. /package/src/{plugins/respArea/drag-in-the-blank/index.jsx → components/respArea/DragInTheBlank/DragInTheBlank.jsx} +0 -0
  129. /package/src/{plugins/respArea/explicit-constructed-response/index.jsx → components/respArea/ExplicitConstructedResponse.jsx} +0 -0
package/lib/index.js CHANGED
@@ -1,1470 +1,32 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  var _typeof = require("@babel/runtime/helpers/typeof");
6
4
 
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
- exports.CharacterPicker = CharacterPicker;
11
- exports["default"] = exports.EditableHtml = void 0;
12
-
13
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
14
-
15
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
-
17
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
-
19
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
20
-
21
- var _react = _interopRequireWildcard(require("react"));
22
-
23
- var _reactDom = _interopRequireDefault(require("react-dom"));
24
-
25
- var _client = require("react-dom/client");
26
-
27
- var _prosemirrorState = require("prosemirror-state");
28
-
29
- var _extensionTextStyle = require("@tiptap/extension-text-style");
30
-
31
- var _react2 = require("@tiptap/react");
32
-
33
- var _starterKit = _interopRequireDefault(require("@tiptap/starter-kit"));
34
-
35
- var _extensionTable = require("@tiptap/extension-table");
36
-
37
- var _extensionTableRow = require("@tiptap/extension-table-row");
38
-
39
- var _extensionTableCell = require("@tiptap/extension-table-cell");
40
-
41
- var _extensionTableHeader = require("@tiptap/extension-table-header");
42
-
43
- var _extensionSuperscript = _interopRequireDefault(require("@tiptap/extension-superscript"));
44
-
45
- var _extensionSubscript = _interopRequireDefault(require("@tiptap/extension-subscript"));
46
-
47
- var _extensionTextAlign = _interopRequireDefault(require("@tiptap/extension-text-align"));
48
-
49
- var _extensionImage = _interopRequireDefault(require("@tiptap/extension-image"));
50
-
51
- var _styles = require("@material-ui/core/styles");
52
-
53
- var _responseArea = require("./extensions/responseArea");
54
-
55
- var _math = require("./extensions/math");
56
-
57
- var _classnames = _interopRequireDefault(require("classnames"));
58
-
59
- var _renderUi = require("@pie-lib/render-ui");
60
-
61
- var _theme = require("./theme");
62
-
63
- var _constants = require("./constants");
64
-
65
- var _doneButton = require("./plugins/toolbar/done-button");
66
-
67
- var _index = require("./plugins/index");
68
-
69
- var _FormatBold = _interopRequireDefault(require("@material-ui/icons/FormatBold"));
70
-
71
- var _FormatItalic = _interopRequireDefault(require("@material-ui/icons/FormatItalic"));
72
-
73
- var _FormatStrikethrough = _interopRequireDefault(require("@material-ui/icons/FormatStrikethrough"));
74
-
75
- var _Code = _interopRequireDefault(require("@material-ui/icons/Code"));
76
-
77
- var _GridOn = _interopRequireDefault(require("@material-ui/icons/GridOn"));
78
-
79
- var _FormatListBulleted = _interopRequireDefault(require("@material-ui/icons/FormatListBulleted"));
80
-
81
- var _FormatListNumbered = _interopRequireDefault(require("@material-ui/icons/FormatListNumbered"));
82
-
83
- var _FormatUnderlined = _interopRequireDefault(require("@material-ui/icons/FormatUnderlined"));
84
-
85
- var _Functions = _interopRequireDefault(require("@material-ui/icons/Functions"));
86
-
87
- var _Image = _interopRequireDefault(require("@material-ui/icons/Image"));
88
-
89
- var _icons = require("./plugins/respArea/icons");
90
-
91
- var _Redo = _interopRequireDefault(require("@material-ui/icons/Redo"));
92
-
93
- var _Undo = _interopRequireDefault(require("@material-ui/icons/Undo"));
94
-
95
- var _Theaters = _interopRequireDefault(require("@material-ui/icons/Theaters"));
96
-
97
- var _VolumeUp = _interopRequireDefault(require("@material-ui/icons/VolumeUp"));
98
-
99
- var _utils = require("./plugins/characters/utils");
100
-
101
- var _propTypes = _interopRequireDefault(require("prop-types"));
102
-
103
- var _mathToolbar = require("@pie-lib/math-toolbar");
104
-
105
- var _get = _interopRequireDefault(require("lodash/get"));
106
-
107
- var _customPopper = _interopRequireDefault(require("./plugins/characters/custom-popper"));
108
-
109
- var _icons2 = _interopRequireDefault(require("./plugins/textAlign/icons"));
110
-
111
- var _icons3 = _interopRequireDefault(require("./plugins/css/icons"));
112
-
113
- var _image = require("./extensions/image");
114
-
115
- var _media = require("./extensions/media");
116
-
117
- var _css = require("./extensions/css");
118
-
119
- var _icons4 = require("./plugins/table/icons");
120
-
121
- var _BorderAll = _interopRequireDefault(require("@material-ui/icons/BorderAll"));
122
-
123
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
124
-
125
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
126
-
127
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
128
-
129
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
130
-
131
- var CharacterIcon = function CharacterIcon(_ref) {
132
- var letter = _ref.letter;
133
- return /*#__PURE__*/_react["default"].createElement("div", {
134
- style: {
135
- fontSize: '24px',
136
- lineHeight: '24px'
137
- }
138
- }, letter);
139
- };
140
-
141
- CharacterIcon.propTypes = {
142
- letter: _propTypes["default"].string
143
- };
144
-
145
- function CharacterPicker(_ref2) {
146
- var _opts$characters;
147
-
148
- var editor = _ref2.editor,
149
- opts = _ref2.opts,
150
- onClose = _ref2.onClose;
151
-
152
- if (!(opts !== null && opts !== void 0 && (_opts$characters = opts.characters) !== null && _opts$characters !== void 0 && _opts$characters.length)) {
153
- return null;
154
- }
155
-
156
- var containerRef = (0, _react.useRef)(null);
157
-
158
- var _useState = (0, _react.useState)({
159
- top: 0,
160
- left: 0
161
- }),
162
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
163
- position = _useState2[0],
164
- setPosition = _useState2[1];
165
-
166
- var _useState3 = (0, _react.useState)(null),
167
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
168
- popover = _useState4[0],
169
- setPopover = _useState4[1];
170
-
171
- var configToUse;
172
-
173
- switch (true) {
174
- case opts.language === 'spanish':
175
- configToUse = _utils.spanishConfig;
176
- break;
177
-
178
- case opts.language === 'special':
179
- configToUse = _utils.specialConfig;
180
- break;
181
-
182
- default:
183
- configToUse = opts;
184
- }
185
-
186
- var layoutForCharacters = configToUse.characters.reduce(function (obj, arr) {
187
- if (arr.length >= obj.columns) {
188
- obj.columns = arr.length;
189
- }
190
-
191
- return obj;
192
- }, {
193
- rows: configToUse.characters.length,
194
- columns: 0
195
- });
196
- (0, _react.useEffect)(function () {
197
- return function () {
198
- closePopOver();
199
- };
200
- }, []);
201
- (0, _react.useEffect)(function () {
202
- if (!editor) return; // Calculate position relative to selection
203
-
204
- var bodyRect = document.body.getBoundingClientRect();
205
- var from = editor.state.selection.from;
206
- var start = editor.view.coordsAtPos(from);
207
- setPosition({
208
- top: start.top + Math.abs(bodyRect.top) + 40,
209
- // shift above
210
- left: start.left
211
- });
212
-
213
- var handleClickOutside = function handleClickOutside(e) {
214
- if (containerRef.current && !containerRef.current.contains(e.target) && !editor.view.dom.contains(e.target)) {
215
- onClose();
216
- }
217
- };
218
-
219
- document.addEventListener('mousedown', handleClickOutside);
220
- return function () {
221
- return document.removeEventListener('mousedown', handleClickOutside);
222
- };
223
- }, [editor]);
224
-
225
- var renderPopOver = function renderPopOver(event, el) {
226
- return setPopover({
227
- anchorEl: event.currentTarget,
228
- el: el
229
- });
230
- };
231
-
232
- var closePopOver = function closePopOver() {
233
- return setPopover(null);
234
- };
235
-
236
- var handleChange = function handleChange(val) {
237
- if (typeof val === 'string') {
238
- editor.chain().focus().insertContent(val).run();
239
- }
240
- };
241
-
242
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement("div", {
243
- ref: containerRef,
244
- className: "insert-character-dialog",
245
- style: {
246
- position: 'absolute',
247
- top: "".concat(position.top, "px"),
248
- left: "".concat(position.left, "px"),
249
- maxWidth: '500px'
250
- }
251
- }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_mathToolbar.PureToolbar, {
252
- keyPadCharacterRef: opts.keyPadCharacterRef,
253
- setKeypadInteraction: opts.setKeypadInteraction,
254
- autoFocus: true,
255
- noDecimal: true,
256
- hideInput: true,
257
- noLatexHandling: true,
258
- hideDoneButtonBackground: true,
259
- layoutForKeyPad: layoutForCharacters,
260
- additionalKeys: configToUse.characters.reduce(function (arr, n) {
261
- arr = [].concat((0, _toConsumableArray2["default"])(arr), (0, _toConsumableArray2["default"])(n.map(function (k) {
262
- return _objectSpread({
263
- name: (0, _get["default"])(k, 'name') || k,
264
- write: (0, _get["default"])(k, 'write') || k,
265
- label: (0, _get["default"])(k, 'label') || k,
266
- category: 'character',
267
- extraClass: 'character',
268
- extraProps: _objectSpread(_objectSpread({}, k.extraProps || {}), {}, {
269
- style: _objectSpread(_objectSpread({}, (k.extraProps || {}).style), {}, {
270
- border: '1px solid #000'
271
- })
272
- })
273
- }, configToUse.hasPreview ? {
274
- actions: {
275
- onMouseEnter: function onMouseEnter(ev) {
276
- return renderPopOver(ev, k);
277
- },
278
- onMouseLeave: closePopOver
279
- }
280
- } : {});
281
- })));
282
- return arr;
283
- }, []),
284
- keypadMode: "language",
285
- onChange: handleChange,
286
- onDone: onClose
287
- }))), document.body), popover && /*#__PURE__*/_reactDom["default"].createPortal( /*#__PURE__*/_react["default"].createElement(_customPopper["default"], {
288
- onClose: closePopOver,
289
- anchorEl: popover.anchorEl
290
- }, /*#__PURE__*/_react["default"].createElement("div", null, popover.el.label), /*#__PURE__*/_react["default"].createElement("div", {
291
- style: {
292
- fontSize: 20,
293
- lineHeight: '20px'
294
- }
295
- }, popover.el.description), /*#__PURE__*/_react["default"].createElement("div", {
296
- style: {
297
- fontSize: 20,
298
- lineHeight: '20px'
299
- }
300
- }, popover.el.unicode)), document.body));
301
- }
302
-
303
- var SuperscriptIcon = function SuperscriptIcon() {
304
- return /*#__PURE__*/_react["default"].createElement("svg", {
305
- xmlns: "http://www.w3.org/2000/svg",
306
- height: "24px",
307
- viewBox: "0 0 24 24",
308
- width: "24px",
309
- fill: "none"
310
- }, /*#__PURE__*/_react["default"].createElement("path", {
311
- d: "M22,7h-2v1h3v1h-4V7c0-0.55,0.45-1,1-1h2V5h-3V4h3c0.55,0,1,0.45,1,1v1C23,6.55,22.55,7,22,7z M5.88,20h2.66l3.4-5.42h0.12 l3.4,5.42h2.66l-4.65-7.27L17.81,6h-2.68l-3.07,4.99h-0.12L8.85,6H6.19l4.32,6.73L5.88,20z",
312
- fill: "currentColor"
313
- }));
314
- };
315
-
316
- var SubscriptIcon = function SubscriptIcon() {
317
- return /*#__PURE__*/_react["default"].createElement("svg", {
318
- xmlns: "http://www.w3.org/2000/svg",
319
- height: "24px",
320
- viewBox: "0 0 24 24",
321
- width: "24px",
322
- fill: "none"
323
- }, /*#__PURE__*/_react["default"].createElement("path", {
324
- d: "M22,18h-2v1h3v1h-4v-2c0-0.55,0.45-1,1-1h2v-1h-3v-1h3c0.55,0,1,0.45,1,1v1C23,17.55,22.55,18,22,18z M5.88,18h2.66 l3.4-5.42h0.12l3.4,5.42h2.66l-4.65-7.27L17.81,4h-2.68l-3.07,4.99h-0.12L8.85,4H6.19l4.32,6.73L5.88,18z",
325
- fill: "currentColor"
326
- }));
327
- };
328
-
329
- var HeadingIcon = function HeadingIcon() {
330
- return /*#__PURE__*/_react["default"].createElement("svg", {
331
- width: "30",
332
- height: "28",
333
- viewBox: "0 0 30 28",
334
- fill: "none",
335
- xmlns: "http://www.w3.org/2000/svg",
336
- style: {
337
- width: '20px',
338
- height: '18px'
339
- }
340
- }, /*#__PURE__*/_react["default"].createElement("path", {
341
- d: "M27 4V24H29C29.5 24 30 24.5 30 25V27C30 27.5625 29.5 28 29 28H19C18.4375 28 18 27.5625 18 27V25C18 24.5 18.4375 24 19 24H21V16H9V24H11C11.5 24 12 24.5 12 25V27C12 27.5625 11.5 28 11 28H1C0.4375 28 0 27.5625 0 27V25C0 24.5 0.4375 24 1 24H3V4H1C0.4375 4 0 3.5625 0 3V1C0 0.5 0.4375 0 1 0H11C11.5 0 12 0.5 12 1V3C12 3.5625 11.5 4 11 4H9V12H21V4H19C18.4375 4 18 3.5625 18 3V1C18 0.5 18.4375 0 19 0H29C29.5 0 30 0.5 30 1V3C30 3.5625 29.5 4 29 4H27Z",
342
- fill: "currentColor"
343
- }));
344
- };
345
-
346
- var ExtendedTable = _extensionTable.Table.extend({
347
- addAttributes: function addAttributes() {
348
- return {
349
- border: {
350
- "default": '1'
351
- }
352
- };
353
- },
354
- renderHTML: function renderHTML(props) {
355
- var originalTable = this.parent(props);
356
- var border = props.HTMLAttributes.border;
357
- var previousStyle = "".concat(originalTable[1].style).concat(originalTable[1].style.match(/.*; */) ? '' : ';');
358
- originalTable[1].style = "".concat(previousStyle, "\n width: 100%;\n color: var(--pie-text, black);\n table-layout: fixed;\n border-collapse: collapse;\n background-color: var(--pie-background, rgba(255, 255, 255))");
359
- originalTable[1].border = border ? border : '1';
360
- return originalTable;
8
+ Object.defineProperty(exports, "ALL_PLUGINS", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _extensions.ALL_PLUGINS;
361
12
  }
362
13
  });
363
-
364
- var styles = function styles(theme) {
365
- return {
366
- root: {
367
- position: 'relative',
368
- padding: '0px',
369
- border: '1px solid #ccc',
370
- borderRadius: '4px',
371
- cursor: 'text',
372
- '& [data-slate-editor="true"]': {
373
- wordBreak: 'break-word',
374
- overflow: 'visible',
375
- maxHeight: '500px',
376
- // needed in order to be able to put the focus before a void element when it is the first one in the editor
377
- padding: '5px'
378
- },
379
- '&:first-child': {
380
- marginTop: 0
381
- },
382
- '& ul, & ol': {
383
- padding: '0 1rem',
384
- margin: '1.25rem 1rem 1.25rem 0.4rem'
385
- },
386
- '& ul li p, & ol li p': {
387
- marginTop: '0.25em',
388
- marginBottom: '0.25em'
389
- },
390
- '& h1, & h2, & h3, & h4, & h5, & h6': {
391
- lineHeight: 1.1,
392
- marginTop: '2.5rem',
393
- textWrap: 'pretty'
394
- },
395
- '& h1, & h2': {
396
- marginTop: '3.5rem',
397
- marginBottom: '1.5rem'
398
- },
399
- '& h1': {
400
- fontSize: '1.4rem'
401
- },
402
- '& h2': {
403
- fontSize: '1.2rem'
404
- },
405
- '& h3': {
406
- fontSize: '1.1rem'
407
- },
408
- '& h4, & h5, & h6': {
409
- fontSize: '1rem'
410
- },
411
- '& code': {
412
- backgroundColor: 'var(--purple-light)',
413
- borderRadius: '0.4rem',
414
- color: 'var(--black)',
415
- fontSize: '0.85rem',
416
- padding: '0.25em 0.3em'
417
- },
418
- '& pre': {
419
- background: 'var(--black)',
420
- borderRadius: '0.5rem',
421
- color: 'var(--white)',
422
- fontFamily: "'JetBrainsMono', monospace",
423
- margin: '1.5rem 0',
424
- padding: '0.75rem 1rem',
425
- '& code': {
426
- background: 'none',
427
- color: 'inherit',
428
- fontSize: '0.8rem',
429
- padding: 0
430
- }
431
- },
432
- '& blockquote': {
433
- borderLeft: '3px solid var(--gray-3)',
434
- margin: '1.5rem 0',
435
- paddingLeft: '1rem'
436
- },
437
- '& hr': {
438
- border: 'none',
439
- borderTop: '1px solid var(--gray-2)',
440
- margin: '2rem 0'
441
- },
442
- '& table': {
443
- tableLayout: 'fixed',
444
- width: '100%',
445
- borderCollapse: 'collapse',
446
- color: _renderUi.color.text(),
447
- backgroundColor: _renderUi.color.background()
448
- },
449
- '& table:not([border="1"]) tr': {
450
- borderTop: '1px solid #dfe2e5'
451
- },
452
- '& td, th': {
453
- padding: '.6em 1em',
454
- textAlign: 'center'
455
- },
456
- '& table:not([border="1"]) td, th': {
457
- border: '1px solid #dfe2e5'
458
- }
459
- },
460
- children: {
461
- padding: '10px 16px'
462
- },
463
- editorHolder: {
464
- position: 'relative',
465
- padding: '0px',
466
- // overflowY: 'auto',
467
- overflow: 'visible',
468
- color: _renderUi.color.text(),
469
- backgroundColor: _renderUi.color.background(),
470
- '&::before': {
471
- left: '0',
472
- right: '0',
473
- bottom: '0',
474
- height: '1px',
475
- content: '""',
476
- position: 'absolute',
477
- transition: 'background-color 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms',
478
- pointerEvents: 'none',
479
- backgroundColor: 'rgba(0, 0, 0, 0.42)'
480
- },
481
- '&::after': {
482
- left: '0',
483
- right: '0',
484
- bottom: '0',
485
- height: '1px',
486
- content: '""',
487
- position: 'absolute',
488
- transform: 'scaleX(0)',
489
- transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 200ms linear',
490
- backgroundColor: 'rgba(0, 0, 0, 0.42)'
491
- },
492
- '&:focus': {
493
- '&::after': {
494
- transform: 'scaleX(1)',
495
- backgroundColor: _theme.primary,
496
- height: '2px'
497
- }
498
- },
499
- '&:hover': {
500
- '&::after': {
501
- transform: 'scaleX(1)',
502
- backgroundColor: theme.palette.common.black,
503
- height: '2px'
504
- }
505
- }
506
- },
507
- disabledUnderline: {
508
- '&::before': {
509
- display: 'none'
510
- },
511
- '&::after': {
512
- display: 'none'
513
- }
514
- },
515
- disabledScrollbar: {
516
- '&::-webkit-scrollbar': {
517
- display: 'none'
518
- },
519
- scrollbarWidth: 'none',
520
- '-ms-overflow-style': 'none'
521
- },
522
- readOnly: {
523
- '&::before': {
524
- background: 'transparent',
525
- backgroundSize: '5px 1px',
526
- backgroundImage: 'linear-gradient(to right, rgba(0, 0, 0, 0.42) 33%, transparent 0%)',
527
- backgroundRepeat: 'repeat-x',
528
- backgroundPosition: 'left top'
529
- },
530
- '&::after': {
531
- left: '0',
532
- right: '0',
533
- bottom: '0',
534
- height: '1px',
535
- content: '""',
536
- position: 'absolute',
537
- transform: 'scaleX(0)',
538
- transition: 'transform 200ms cubic-bezier(0.0, 0.0, 0.2, 1) 0ms, background-color 0ms linear',
539
- backgroundColor: 'rgba(0, 0, 0, 0)'
540
- },
541
- '&:hover': {
542
- '&::after': {
543
- transform: 'scaleX(0)',
544
- backgroundColor: theme.palette.common.black,
545
- height: '2px'
546
- }
547
- }
548
- },
549
- editorInFocus: {
550
- '&::after': {
551
- transform: 'scaleX(1)',
552
- backgroundColor: _theme.primary,
553
- height: '2px'
554
- },
555
- '&:hover': {
556
- '&::after': {
557
- backgroundColor: _theme.primary
558
- }
559
- }
560
- },
561
- error: {
562
- border: "2px solid ".concat(theme.palette.error.main, " !important")
563
- },
564
- noBorder: {
565
- border: 'none'
566
- },
567
- noPadding: {
568
- padding: 0
569
- },
570
- toolbarOnTop: {
571
- marginTop: '45px'
572
- }
573
- };
574
- };
575
-
576
- var defaultResponseAreaProps = {
577
- options: {},
578
- respAreaToolbar: function respAreaToolbar() {},
579
- onHandleAreaChange: function onHandleAreaChange() {}
580
- };
581
-
582
- var valueToSize = function valueToSize(v) {
583
- if (!v) {
584
- return;
14
+ Object.defineProperty(exports, "EditableHtml", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _EditableHtml.EditableHtml;
585
18
  }
19
+ });
20
+ exports["default"] = void 0;
586
21
 
587
- var calcRegex = /^calc\((.*)\)$/;
588
-
589
- if (typeof v === 'string') {
590
- if (v.endsWith('%')) {
591
- return undefined;
592
- } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw') || v.endsWith('ch') || v.endsWith('em') || v.match(calcRegex)) {
593
- return v;
594
- } else {
595
- var value = parseInt(v, 10);
596
- return isNaN(value) ? value : "".concat(value, "px");
597
- }
598
- }
599
-
600
- if (typeof v === 'number') {
601
- return "".concat(v, "px");
602
- }
603
- };
604
-
605
- function TiptapContainer(props) {
606
- var _classNames, _classNames2;
607
-
608
- var editor = props.editor,
609
- editorState = props.editorState,
610
- classes = props.classes,
611
- children = props.children,
612
- disableUnderline = props.disableUnderline,
613
- disableScrollbar = props.disableScrollbar,
614
- activePlugins = props.activePlugins,
615
- toolbarOpts = props.toolbarOpts,
616
- responseAreaProps = props.responseAreaProps,
617
- autoFocus = props.autoFocus,
618
- minWidth = props.minWidth,
619
- width = props.width,
620
- maxWidth = props.maxWidth,
621
- minHeight = props.minHeight,
622
- height = props.height,
623
- maxHeight = props.maxHeight;
624
- var holderNames = (0, _classnames["default"])(classes.editorHolder, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.editorInFocus, editorState.isFocused), (0, _defineProperty2["default"])(_classNames, classes.readOnly, editorState.readOnly), (0, _defineProperty2["default"])(_classNames, classes.disabledUnderline, disableUnderline), (0, _defineProperty2["default"])(_classNames, classes.disabledScrollbar, disableScrollbar), _classNames));
625
- (0, _react.useEffect)(function () {
626
- if (editor && autoFocus) {
627
- Promise.resolve().then(function () {
628
- editor.commands.focus('end');
629
- });
630
- }
631
- }, [editor, autoFocus]);
632
- var sizeStyle = (0, _react.useMemo)(function () {
633
- return {
634
- width: valueToSize(width),
635
- minWidth: valueToSize(minWidth),
636
- maxWidth: valueToSize(maxWidth),
637
- height: valueToSize(height),
638
- minHeight: valueToSize(minHeight),
639
- maxHeight: valueToSize(maxHeight)
640
- };
641
- }, [minWidth, width, maxWidth, minHeight, height, maxHeight]);
642
- return /*#__PURE__*/_react["default"].createElement("div", {
643
- className: (0, _classnames["default"])((_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, classes.noBorder, toolbarOpts && toolbarOpts.noBorder), (0, _defineProperty2["default"])(_classNames2, classes.error, toolbarOpts && toolbarOpts.error), _classNames2), classes.root, props.className),
644
- style: {
645
- width: sizeStyle.width,
646
- minWidth: sizeStyle.minWidth,
647
- maxWidth: sizeStyle.maxWidth
648
- }
649
- }, /*#__PURE__*/_react["default"].createElement("div", {
650
- className: holderNames
651
- }, /*#__PURE__*/_react["default"].createElement("div", {
652
- className: (0, _classnames["default"])((0, _defineProperty2["default"])({}, classes.noPadding, toolbarOpts && toolbarOpts.noPadding), classes.children)
653
- }, children)), editor && /*#__PURE__*/_react["default"].createElement(StyledMenuBar, {
654
- editor: editor,
655
- responseAreaProps: responseAreaProps,
656
- toolbarOpts: toolbarOpts,
657
- activePlugins: activePlugins,
658
- onChange: props.onChange
659
- }));
660
- }
661
-
662
- var EditorContainer = (0, _styles.withStyles)(styles)(TiptapContainer);
663
-
664
- function MenuBar(_ref3) {
665
- var _classNames4;
666
-
667
- var editor = _ref3.editor,
668
- classes = _ref3.classes,
669
- activePlugins = _ref3.activePlugins,
670
- toolOpts = _ref3.toolbarOpts,
671
- responseAreaProps = _ref3.responseAreaProps,
672
- onChange = _ref3.onChange;
673
-
674
- var _useState5 = (0, _react.useState)(false),
675
- _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
676
- showPicker = _useState6[0],
677
- setShowPicker = _useState6[1];
678
-
679
- var toolbarOpts = toolOpts !== null && toolOpts !== void 0 ? toolOpts : {}; // Read the current editor's state, and re-render the component when it changes
680
-
681
- var editorState = (0, _react2.useEditorState)({
682
- editor: editor,
683
- selector: function selector(ctx) {
684
- var _ctx$editor, _ctx$editor2, _ctx$editor3, _ctx$editor4, _ctx$editor5, _ctx$editor$isActive, _ctx$editor$can$chain, _ctx$editor$isActive2, _ref5, _ctx$editor$getAttrib, _ctx$editor$can$chain2, _ctx$editor$isActive3, _ctx$editor$can$chain3, _ctx$editor$isActive4, _ctx$editor$can$chain4, _ctx$editor$isActive5, _ctx$editor$can$chain5, _ctx$editor$can$chain6, _ctx$editor$isActive6, _ctx$editor$isActive7, _ctx$editor$isActive8, _ctx$editor$isActive9, _ctx$editor$isActive10, _ctx$editor$isActive11, _ctx$editor$isActive12, _ctx$editor$isActive13, _ctx$editor$isActive14, _ctx$editor$isActive15, _ctx$editor$isActive16, _ctx$editor$isActive17, _ctx$editor$isActive18, _ctx$editor$isActive19, _ctx$editor$can$chain7, _ctx$editor$can$chain8;
685
-
686
- var _ref4 = ((_ctx$editor = ctx.editor) === null || _ctx$editor === void 0 ? void 0 : _ctx$editor.state) || {},
687
- selection = _ref4.selection;
688
-
689
- var currentNode;
690
-
691
- if (selection instanceof _prosemirrorState.NodeSelection) {
692
- currentNode = selection.node; // the selected node
693
- }
694
-
695
- var hideDefaultToolbar = ((_ctx$editor2 = ctx.editor) === null || _ctx$editor2 === void 0 ? void 0 : _ctx$editor2.isActive('math')) || ((_ctx$editor3 = ctx.editor) === null || _ctx$editor3 === void 0 ? void 0 : _ctx$editor3.isActive('explicit_constructed_response')) || ((_ctx$editor4 = ctx.editor) === null || _ctx$editor4 === void 0 ? void 0 : _ctx$editor4.isActive('imageUploadNode'));
696
- return {
697
- currentNode: currentNode,
698
- hideDefaultToolbar: hideDefaultToolbar,
699
- isFocused: (_ctx$editor5 = ctx.editor) === null || _ctx$editor5 === void 0 ? void 0 : _ctx$editor5.isFocused,
700
- isBold: (_ctx$editor$isActive = ctx.editor.isActive('bold')) !== null && _ctx$editor$isActive !== void 0 ? _ctx$editor$isActive : false,
701
- canBold: (_ctx$editor$can$chain = ctx.editor.can().chain().toggleBold().run()) !== null && _ctx$editor$can$chain !== void 0 ? _ctx$editor$can$chain : false,
702
- isTable: (_ctx$editor$isActive2 = ctx.editor.isActive('table')) !== null && _ctx$editor$isActive2 !== void 0 ? _ctx$editor$isActive2 : false,
703
- tableHasBorder: (_ref5 = ((_ctx$editor$getAttrib = ctx.editor.getAttributes('table')) === null || _ctx$editor$getAttrib === void 0 ? void 0 : _ctx$editor$getAttrib.border) === '1') !== null && _ref5 !== void 0 ? _ref5 : false,
704
- canTable: (_ctx$editor$can$chain2 = ctx.editor.can().chain().insertTable().run()) !== null && _ctx$editor$can$chain2 !== void 0 ? _ctx$editor$can$chain2 : false,
705
- isItalic: (_ctx$editor$isActive3 = ctx.editor.isActive('italic')) !== null && _ctx$editor$isActive3 !== void 0 ? _ctx$editor$isActive3 : false,
706
- canItalic: (_ctx$editor$can$chain3 = ctx.editor.can().chain().toggleItalic().run()) !== null && _ctx$editor$can$chain3 !== void 0 ? _ctx$editor$can$chain3 : false,
707
- isStrike: (_ctx$editor$isActive4 = ctx.editor.isActive('strike')) !== null && _ctx$editor$isActive4 !== void 0 ? _ctx$editor$isActive4 : false,
708
- canStrike: (_ctx$editor$can$chain4 = ctx.editor.can().chain().toggleStrike().run()) !== null && _ctx$editor$can$chain4 !== void 0 ? _ctx$editor$can$chain4 : false,
709
- isCode: (_ctx$editor$isActive5 = ctx.editor.isActive('code')) !== null && _ctx$editor$isActive5 !== void 0 ? _ctx$editor$isActive5 : false,
710
- canCode: (_ctx$editor$can$chain5 = ctx.editor.can().chain().toggleCode().run()) !== null && _ctx$editor$can$chain5 !== void 0 ? _ctx$editor$can$chain5 : false,
711
- canClearMarks: (_ctx$editor$can$chain6 = ctx.editor.can().chain().unsetAllMarks().run()) !== null && _ctx$editor$can$chain6 !== void 0 ? _ctx$editor$can$chain6 : false,
712
- isUnderline: (_ctx$editor$isActive6 = ctx.editor.isActive('underline')) !== null && _ctx$editor$isActive6 !== void 0 ? _ctx$editor$isActive6 : false,
713
- isSubScript: (_ctx$editor$isActive7 = ctx.editor.isActive('subscript')) !== null && _ctx$editor$isActive7 !== void 0 ? _ctx$editor$isActive7 : false,
714
- isSuperScript: (_ctx$editor$isActive8 = ctx.editor.isActive('superscript')) !== null && _ctx$editor$isActive8 !== void 0 ? _ctx$editor$isActive8 : false,
715
- isParagraph: (_ctx$editor$isActive9 = ctx.editor.isActive('paragraph')) !== null && _ctx$editor$isActive9 !== void 0 ? _ctx$editor$isActive9 : false,
716
- isHeading1: (_ctx$editor$isActive10 = ctx.editor.isActive('heading', {
717
- level: 1
718
- })) !== null && _ctx$editor$isActive10 !== void 0 ? _ctx$editor$isActive10 : false,
719
- isHeading2: (_ctx$editor$isActive11 = ctx.editor.isActive('heading', {
720
- level: 2
721
- })) !== null && _ctx$editor$isActive11 !== void 0 ? _ctx$editor$isActive11 : false,
722
- isHeading3: (_ctx$editor$isActive12 = ctx.editor.isActive('heading', {
723
- level: 3
724
- })) !== null && _ctx$editor$isActive12 !== void 0 ? _ctx$editor$isActive12 : false,
725
- isHeading4: (_ctx$editor$isActive13 = ctx.editor.isActive('heading', {
726
- level: 4
727
- })) !== null && _ctx$editor$isActive13 !== void 0 ? _ctx$editor$isActive13 : false,
728
- isHeading5: (_ctx$editor$isActive14 = ctx.editor.isActive('heading', {
729
- level: 5
730
- })) !== null && _ctx$editor$isActive14 !== void 0 ? _ctx$editor$isActive14 : false,
731
- isHeading6: (_ctx$editor$isActive15 = ctx.editor.isActive('heading', {
732
- level: 6
733
- })) !== null && _ctx$editor$isActive15 !== void 0 ? _ctx$editor$isActive15 : false,
734
- isBulletList: (_ctx$editor$isActive16 = ctx.editor.isActive('bulletList')) !== null && _ctx$editor$isActive16 !== void 0 ? _ctx$editor$isActive16 : false,
735
- isOrderedList: (_ctx$editor$isActive17 = ctx.editor.isActive('orderedList')) !== null && _ctx$editor$isActive17 !== void 0 ? _ctx$editor$isActive17 : false,
736
- isCodeBlock: (_ctx$editor$isActive18 = ctx.editor.isActive('codeBlock')) !== null && _ctx$editor$isActive18 !== void 0 ? _ctx$editor$isActive18 : false,
737
- isBlockquote: (_ctx$editor$isActive19 = ctx.editor.isActive('blockquote')) !== null && _ctx$editor$isActive19 !== void 0 ? _ctx$editor$isActive19 : false,
738
- canUndo: (_ctx$editor$can$chain7 = ctx.editor.can().chain().undo().run()) !== null && _ctx$editor$can$chain7 !== void 0 ? _ctx$editor$can$chain7 : false,
739
- canRedo: (_ctx$editor$can$chain8 = ctx.editor.can().chain().redo().run()) !== null && _ctx$editor$can$chain8 !== void 0 ? _ctx$editor$can$chain8 : false
740
- };
741
- }
742
- });
743
- var hasDoneButton = false;
744
- var autoWidth = false;
745
- var names = (0, _classnames["default"])(classes.toolbar, _constants.PIE_TOOLBAR__CLASS, (_classNames4 = {}, (0, _defineProperty2["default"])(_classNames4, classes.toolbarWithNoDone, !hasDoneButton), (0, _defineProperty2["default"])(_classNames4, classes.toolbarTop, toolbarOpts.position === 'top'), (0, _defineProperty2["default"])(_classNames4, classes.toolbarRight, toolbarOpts.alignment === 'right'), (0, _defineProperty2["default"])(_classNames4, classes.focused, toolbarOpts.alwaysVisible || editorState.isFocused && !editor._toolbarOpened), (0, _defineProperty2["default"])(_classNames4, classes.autoWidth, autoWidth), (0, _defineProperty2["default"])(_classNames4, classes.fullWidth, !autoWidth), (0, _defineProperty2["default"])(_classNames4, classes.hidden, toolbarOpts.isHidden === true), _classNames4));
746
- var customStyles = toolbarOpts.minWidth !== undefined ? {
747
- minWidth: toolbarOpts.minWidth
748
- } : {};
749
-
750
- var handleMouseDown = function handleMouseDown(e) {
751
- e.preventDefault();
752
- };
753
-
754
- var toolbarButtons = (0, _react.useMemo)(function () {
755
- return [{
756
- icon: /*#__PURE__*/_react["default"].createElement(_GridOn["default"], null),
757
- onClick: function onClick(editor) {
758
- return editor.chain().focus().insertTable({
759
- rows: 2,
760
- cols: 2,
761
- withHeaderRow: false
762
- }).run();
763
- },
764
- hidden: function hidden(state) {
765
- return !(activePlugins !== null && activePlugins !== void 0 && activePlugins.includes('table')) || state.isTable;
766
- },
767
- isActive: function isActive(state) {
768
- return state.isTable;
769
- },
770
- isDisabled: function isDisabled(state) {
771
- return !state.canTable;
772
- }
773
- }, {
774
- icon: /*#__PURE__*/_react["default"].createElement(_icons4.AddRow, null),
775
- onClick: function onClick(editor) {
776
- return editor.chain().focus().addRowAfter().run();
777
- },
778
- hidden: function hidden(state) {
779
- return !state.isTable;
780
- },
781
- isActive: function isActive(state) {
782
- return state.isTable;
783
- },
784
- isDisabled: function isDisabled(state) {
785
- return !state.canTable;
786
- }
787
- }, {
788
- icon: /*#__PURE__*/_react["default"].createElement(_icons4.RemoveRow, null),
789
- onClick: function onClick(editor) {
790
- return editor.chain().focus().deleteRow().run();
791
- },
792
- hidden: function hidden(state) {
793
- return !state.isTable;
794
- },
795
- isActive: function isActive(state) {
796
- return state.isTable;
797
- },
798
- isDisabled: function isDisabled(state) {
799
- return !state.canTable;
800
- }
801
- }, {
802
- icon: /*#__PURE__*/_react["default"].createElement(_icons4.AddColumn, null),
803
- onClick: function onClick(editor) {
804
- return editor.chain().focus().addColumnAfter().run();
805
- },
806
- hidden: function hidden(state) {
807
- return !state.isTable;
808
- },
809
- isActive: function isActive(state) {
810
- return state.isTable;
811
- },
812
- isDisabled: function isDisabled(state) {
813
- return !state.canTable;
814
- }
815
- }, {
816
- icon: /*#__PURE__*/_react["default"].createElement(_icons4.RemoveColumn, null),
817
- onClick: function onClick(editor) {
818
- return editor.chain().focus().deleteColumn().run();
819
- },
820
- hidden: function hidden(state) {
821
- return !state.isTable;
822
- },
823
- isActive: function isActive(state) {
824
- return state.isTable;
825
- },
826
- isDisabled: function isDisabled(state) {
827
- return !state.canTable;
828
- }
829
- }, {
830
- icon: /*#__PURE__*/_react["default"].createElement(_icons4.RemoveTable, null),
831
- onClick: function onClick(editor) {
832
- return editor.chain().focus().deleteTable().run();
833
- },
834
- hidden: function hidden(state) {
835
- return !state.isTable;
836
- },
837
- isActive: function isActive(state) {
838
- return state.isTable;
839
- },
840
- isDisabled: function isDisabled(state) {
841
- return !state.canTable;
842
- }
843
- }, {
844
- icon: /*#__PURE__*/_react["default"].createElement(_BorderAll["default"], null),
845
- onClick: function onClick(editor) {
846
- var tableAttrs = editor.getAttributes('table');
847
-
848
- var update = _objectSpread(_objectSpread({}, tableAttrs), {}, {
849
- border: tableAttrs.border !== '0' ? '0' : '1'
850
- });
851
-
852
- editor.commands.updateAttributes('table', update);
853
- },
854
- hidden: function hidden(state) {
855
- return !state.isTable;
856
- },
857
- isActive: function isActive(state) {
858
- return state.tableHasBorder;
859
- },
860
- isDisabled: function isDisabled(state) {
861
- return !state.canTable;
862
- }
863
- }, {
864
- icon: /*#__PURE__*/_react["default"].createElement(_FormatBold["default"], null),
865
- onClick: function onClick(editor) {
866
- return editor.chain().focus().toggleBold().run();
867
- },
868
- hidden: function hidden(state) {
869
- return state.isTable;
870
- },
871
- isActive: function isActive(state) {
872
- return state.isBold;
873
- },
874
- isDisabled: function isDisabled(state) {
875
- return !state.canBold;
876
- }
877
- }, {
878
- icon: /*#__PURE__*/_react["default"].createElement(_FormatItalic["default"], null),
879
- onClick: function onClick(editor) {
880
- return editor.chain().focus().toggleItalic().run();
881
- },
882
- hidden: function hidden(state) {
883
- return state.isTable;
884
- },
885
- isActive: function isActive(state) {
886
- return state.isItalic;
887
- },
888
- isDisabled: function isDisabled(state) {
889
- return !state.canItalic;
890
- }
891
- }, {
892
- icon: /*#__PURE__*/_react["default"].createElement(_FormatStrikethrough["default"], null),
893
- onClick: function onClick(editor) {
894
- return editor.chain().focus().toggleStrike().run();
895
- },
896
- hidden: function hidden(state) {
897
- return state.isTable;
898
- },
899
- isActive: function isActive(state) {
900
- return state.isStrike;
901
- },
902
- isDisabled: function isDisabled(state) {
903
- return !state.canStrike;
904
- }
905
- }, {
906
- icon: /*#__PURE__*/_react["default"].createElement(_Code["default"], null),
907
- onClick: function onClick(editor) {
908
- return editor.chain().focus().toggleCode().run();
909
- },
910
- hidden: function hidden(state) {
911
- return state.isTable;
912
- },
913
- isActive: function isActive(state) {
914
- return state.isCode;
915
- },
916
- isDisabled: function isDisabled(state) {
917
- return !state.canCode;
918
- }
919
- }, {
920
- icon: /*#__PURE__*/_react["default"].createElement(_FormatUnderlined["default"], null),
921
- onClick: function onClick(editor) {
922
- return editor.chain().focus().toggleUnderline().run();
923
- },
924
- hidden: function hidden(state) {
925
- return state.isTable;
926
- },
927
- isActive: function isActive(state) {
928
- return state.isUnderline;
929
- }
930
- }, {
931
- icon: /*#__PURE__*/_react["default"].createElement(SubscriptIcon, null),
932
- onClick: function onClick(editor) {
933
- return editor.chain().focus().toggleSubscript().run();
934
- },
935
- hidden: function hidden(state) {
936
- return state.isTable;
937
- },
938
- isActive: function isActive(state) {
939
- return state.isSubScript;
940
- }
941
- }, {
942
- icon: /*#__PURE__*/_react["default"].createElement(SuperscriptIcon, null),
943
- onClick: function onClick(editor) {
944
- return editor.chain().focus().toggleSuperscript().run();
945
- },
946
- hidden: function hidden(state) {
947
- return state.isTable;
948
- },
949
- isActive: function isActive(state) {
950
- return state.isSuperScript;
951
- }
952
- }, {
953
- icon: /*#__PURE__*/_react["default"].createElement(_Image["default"], null),
954
- onClick: function onClick(editor) {
955
- return editor.chain().focus().setImageUploadNode().run();
956
- }
957
- }, {
958
- icon: /*#__PURE__*/_react["default"].createElement(_Theaters["default"], null),
959
- hidden: function hidden(state) {
960
- return state.isTable;
961
- },
962
- onClick: function onClick(editor) {
963
- return editor.chain().focus().insertMedia({
964
- tag: 'video'
965
- }).run();
966
- }
967
- }, {
968
- icon: /*#__PURE__*/_react["default"].createElement(_VolumeUp["default"], null),
969
- hidden: function hidden(state) {
970
- return state.isTable;
971
- },
972
- onClick: function onClick(editor) {
973
- return editor.chain().focus().insertMedia({
974
- tag: 'audio'
975
- }).run();
976
- }
977
- }, {
978
- icon: /*#__PURE__*/_react["default"].createElement(_icons3["default"], null),
979
- hidden: function hidden(state) {
980
- return state.isTable;
981
- },
982
- onClick: function onClick(editor) {
983
- return editor.commands.openCSSClassDialog();
984
- }
985
- }, {
986
- icon: /*#__PURE__*/_react["default"].createElement(HeadingIcon, null),
987
- hidden: function hidden(state) {
988
- return state.isTable;
989
- },
990
- onClick: function onClick(editor) {
991
- return editor.chain().focus().toggleHeading({
992
- level: 3
993
- }).run();
994
- },
995
- isActive: function isActive(state) {
996
- return state.isHeading3;
997
- }
998
- }, {
999
- icon: /*#__PURE__*/_react["default"].createElement(_Functions["default"], null),
1000
- onClick: function onClick(editor) {
1001
- return editor.chain().focus().insertMath('').run();
1002
- }
1003
- }, {
1004
- icon: /*#__PURE__*/_react["default"].createElement(CharacterIcon, {
1005
- letter: "\xF1"
1006
- }),
1007
- hidden: function hidden(state) {
1008
- return state.isTable;
1009
- },
1010
- onClick: function onClick() {
1011
- return setShowPicker(_utils.spanishConfig);
1012
- }
1013
- }, {
1014
- icon: /*#__PURE__*/_react["default"].createElement(CharacterIcon, {
1015
- letter: "\u20AC"
1016
- }),
1017
- hidden: function hidden(state) {
1018
- return state.isTable;
1019
- },
1020
- onClick: function onClick() {
1021
- return setShowPicker(_utils.specialConfig);
1022
- }
1023
- }, {
1024
- icon: /*#__PURE__*/_react["default"].createElement(_icons2["default"], {
1025
- editor: editor
1026
- }),
1027
- hidden: function hidden(state) {
1028
- return state.isTable;
1029
- },
1030
- onClick: function onClick() {}
1031
- }, {
1032
- icon: /*#__PURE__*/_react["default"].createElement(_FormatListBulleted["default"], null),
1033
- hidden: function hidden(state) {
1034
- return state.isTable;
1035
- },
1036
- onClick: function onClick(editor) {
1037
- return editor.chain().focus().toggleBulletList().run();
1038
- },
1039
- isActive: function isActive(state) {
1040
- return state.isBulletList;
1041
- }
1042
- }, {
1043
- icon: /*#__PURE__*/_react["default"].createElement(_FormatListNumbered["default"], null),
1044
- hidden: function hidden(state) {
1045
- return state.isTable;
1046
- },
1047
- onClick: function onClick(editor) {
1048
- return editor.chain().focus().toggleOrderedList().run();
1049
- },
1050
- isActive: function isActive(state) {
1051
- return state.isOrderedList;
1052
- }
1053
- }, {
1054
- icon: /*#__PURE__*/_react["default"].createElement(_Undo["default"], null),
1055
- hidden: function hidden(state) {
1056
- return state.isTable;
1057
- },
1058
- onClick: function onClick(editor) {
1059
- return editor.chain().focus().undo().run();
1060
- },
1061
- isDisabled: function isDisabled(state) {
1062
- return !state.canUndo;
1063
- }
1064
- }, {
1065
- icon: /*#__PURE__*/_react["default"].createElement(_Redo["default"], null),
1066
- hidden: function hidden(state) {
1067
- return state.isTable;
1068
- },
1069
- onClick: function onClick(editor) {
1070
- return editor.chain().focus().redo().run();
1071
- },
1072
- isDisabled: function isDisabled(state) {
1073
- return !state.canRedo;
1074
- }
1075
- }];
1076
- }, [activePlugins, editor, _utils.spanishConfig, _utils.specialConfig, setShowPicker]);
1077
- return /*#__PURE__*/_react["default"].createElement("div", {
1078
- className: names,
1079
- style: _objectSpread({}, customStyles),
1080
- onMouseDown: handleMouseDown
1081
- }, !editorState.hideDefaultToolbar && /*#__PURE__*/_react["default"].createElement("div", {
1082
- className: classes.defaultToolbar,
1083
- tabIndex: "1"
1084
- }, /*#__PURE__*/_react["default"].createElement("div", {
1085
- className: classes.buttonsContainer
1086
- }, toolbarButtons.filter(function (btn) {
1087
- var _btn$hidden;
1088
-
1089
- return !((_btn$hidden = btn.hidden) !== null && _btn$hidden !== void 0 && _btn$hidden.call(btn, editorState));
1090
- }).map(function (btn, index) {
1091
- var _btn$isDisabled, _btn$isActive;
1092
-
1093
- var disabled = (_btn$isDisabled = btn.isDisabled) === null || _btn$isDisabled === void 0 ? void 0 : _btn$isDisabled.call(btn, editorState);
1094
- var active = (_btn$isActive = btn.isActive) === null || _btn$isActive === void 0 ? void 0 : _btn$isActive.call(btn, editorState);
1095
- return /*#__PURE__*/_react["default"].createElement("button", {
1096
- key: index,
1097
- disabled: disabled,
1098
- onClick: function onClick(e) {
1099
- e.preventDefault();
1100
- btn.onClick(editor);
1101
- },
1102
- className: (0, _classnames["default"])(classes.button, (0, _defineProperty2["default"])({}, classes.active, active))
1103
- }, btn.icon);
1104
- })), /*#__PURE__*/_react["default"].createElement("button", {
1105
- onClick: function onClick() {
1106
- editor.chain().focus().insertResponseArea(responseAreaProps.type).run();
1107
- },
1108
- className: classes.button
1109
- }, /*#__PURE__*/_react["default"].createElement(_icons.ToolbarIcon, null)), /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
1110
- onClick: function onClick() {
1111
- onChange === null || onChange === void 0 ? void 0 : onChange(editor.getHTML());
1112
- editor.commands.blur();
1113
- }
1114
- })), showPicker && /*#__PURE__*/_react["default"].createElement(CharacterPicker, {
1115
- editor: editor,
1116
- opts: _objectSpread(_objectSpread({}, showPicker), {}, {
1117
- renderPopOver: function renderPopOver(ev, ch) {
1118
- return console.log('Show popover', ch);
1119
- },
1120
- closePopOver: function closePopOver() {
1121
- return console.log('Close popover');
1122
- }
1123
- }),
1124
- onClose: function onClose() {
1125
- return setShowPicker(false);
1126
- }
1127
- }));
1128
- }
1129
-
1130
- var style = function style(theme) {
1131
- return {
1132
- defaultToolbar: {
1133
- display: 'flex',
1134
- width: '100%',
1135
- justifyContent: 'space-between'
1136
- },
1137
- buttonsContainer: {
1138
- alignItems: 'center',
1139
- display: 'flex',
1140
- width: '100%'
1141
- },
1142
- button: {
1143
- color: 'grey',
1144
- display: 'inline-flex',
1145
- padding: '2px',
1146
- background: 'none',
1147
- border: 'none',
1148
- cursor: 'pointer',
1149
- '&:hover': {
1150
- color: 'black'
1151
- },
1152
- '&:focus': {
1153
- outline: "2px solid ".concat(theme.palette.grey[700])
1154
- }
1155
- },
1156
- active: {
1157
- color: 'black'
1158
- },
1159
- disabled: {
1160
- opacity: 0.7,
1161
- cursor: 'not-allowed',
1162
- '& :hover': {
1163
- color: 'grey'
1164
- }
1165
- },
1166
- isActive: {
1167
- background: 'var(--purple)',
1168
- color: 'var(--white)'
1169
- },
1170
- toolbar: {
1171
- position: 'absolute',
1172
- zIndex: 20,
1173
- cursor: 'pointer',
1174
- justifyContent: 'space-between',
1175
- background: 'var(--editable-html-toolbar-bg, #efefef)',
1176
- minWidth: '280px',
1177
- margin: '5px 0 0 0',
1178
- padding: '2px',
1179
- boxShadow: '0px 1px 5px 0px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 3px 1px -2px rgba(0, 0, 0, 0.12)',
1180
- boxSizing: 'border-box',
1181
- display: 'flex',
1182
- opacity: 0,
1183
- pointerEvents: 'none'
1184
- },
1185
- toolbarWithNoDone: {
1186
- minWidth: '265px'
1187
- },
1188
- toolbarTop: {
1189
- top: '-45px'
1190
- },
1191
- toolbarRight: {
1192
- right: 0
1193
- },
1194
- fullWidth: {
1195
- width: '100%'
1196
- },
1197
- hidden: {
1198
- visibility: 'hidden'
1199
- },
1200
- autoWidth: {
1201
- width: 'auto'
1202
- },
1203
- focused: {
1204
- opacity: 1,
1205
- pointerEvents: 'auto'
1206
- },
1207
- iconRoot: {
1208
- width: '28px',
1209
- height: '28px',
1210
- padding: '4px',
1211
- verticalAlign: 'top'
1212
- },
1213
- label: {
1214
- color: 'var(--editable-html-toolbar-check, #00bb00)'
1215
- },
1216
- shared: {
1217
- display: 'flex'
1218
- }
1219
- };
1220
- };
1221
-
1222
- var StyledMenuBar = (0, _styles.withStyles)(style, {
1223
- index: 1000
1224
- })(MenuBar);
1225
- var defaultToolbarOpts = {
1226
- position: 'bottom',
1227
- alignment: 'left',
1228
- alwaysVisible: false,
1229
- showDone: true,
1230
- doneOn: 'blur'
1231
- };
1232
-
1233
- var EditableHtml = function EditableHtml(props) {
1234
- var _useState7 = (0, _react.useState)([]),
1235
- _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
1236
- pendingImages = _useState8[0],
1237
- setPendingImages = _useState8[1];
1238
-
1239
- var _useState9 = (0, _react.useState)(false),
1240
- _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
1241
- scheduled = _useState10[0],
1242
- setScheduled = _useState10[1];
1243
-
1244
- var classes = props.classes,
1245
- toolbarOpts = props.toolbarOpts;
1246
-
1247
- var toolbarOptsToUse = _objectSpread(_objectSpread({}, defaultToolbarOpts), toolbarOpts);
1248
-
1249
- var activePluginsToUse = props.activePlugins || _index.DEFAULT_PLUGINS;
1250
- var extensions = [_extensionTextStyle.TextStyleKit, _starterKit["default"], ExtendedTable, _extensionTableRow.TableRow, _extensionTableHeader.TableHeader, _extensionTableCell.TableCell, _responseArea.ResponseAreaExtension, _responseArea.ExplicitConstructedResponseNode.configure(props.responseAreaProps), _responseArea.DragInTheBlankNode.configure(props.responseAreaProps), _responseArea.InlineDropdownNode.configure(props.responseAreaProps), _math.MathNode.configure({
1251
- toolbarOpts: toolbarOptsToUse
1252
- }), _extensionSubscript["default"], _extensionSuperscript["default"], _extensionTextAlign["default"].configure({
1253
- types: ['heading', 'paragraph'],
1254
- alignments: ['left', 'right', 'center']
1255
- }), _extensionImage["default"], _image.ImageUploadNode.configure({
1256
- toolbarOpts: toolbarOptsToUse,
1257
- imageHandling: {
1258
- disableImageAlignmentButtons: props.disableImageAlignmentButtons,
1259
- onDone: function onDone() {
1260
- var _props$onDone;
1261
-
1262
- return (_props$onDone = props.onDone) === null || _props$onDone === void 0 ? void 0 : _props$onDone.call(props, editor.getHTML());
1263
- },
1264
- onDelete: props.imageSupport && props.imageSupport["delete"] && function (node, done) {
1265
- var src = node.attrs.src;
1266
- props.imageSupport["delete"](src, function (e) {
1267
- var newPendingImages = pendingImages.filter(function (img) {
1268
- return img.key !== node.key;
1269
- });
1270
- var newState = {
1271
- pendingImages: newPendingImages,
1272
- scheduled: scheduled && newPendingImages.length === 0 ? false : scheduled
1273
- };
1274
- setPendingImages(newState.pendingImages);
1275
- setScheduled(newState.scheduled);
1276
- done();
1277
- });
1278
- },
1279
- insertImageRequested: props.imageSupport && function (addedImage, getHandler) {
1280
- var onFinish = function onFinish(result) {
1281
- var _cb;
1282
-
1283
- var cb;
1284
-
1285
- if (scheduled && result) {
1286
- // finish editing only on success
1287
- cb = props.onChange;
1288
- }
1289
-
1290
- var newPendingImages = pendingImages.filter(function (img) {
1291
- return img.key !== addedImage.key;
1292
- });
1293
- var newState = {
1294
- pendingImages: newPendingImages
1295
- };
1296
-
1297
- if (newPendingImages.length === 0) {
1298
- newState.scheduled = false;
1299
- }
1300
-
1301
- setPendingImages(newState.pendingImages);
1302
- setScheduled(newState.scheduled);
1303
- (_cb = cb) === null || _cb === void 0 ? void 0 : _cb(editor.getHTML());
1304
- };
1305
-
1306
- var callback = function callback() {
1307
- /**
1308
- * The handler is the object through which the outer context
1309
- * communicates file upload events like: fileChosen, cancel, progress
1310
- */
1311
- var handler = getHandler(onFinish);
1312
- props.imageSupport.add(handler);
1313
- };
1314
-
1315
- setPendingImages([].concat((0, _toConsumableArray2["default"])(pendingImages), [addedImage]));
1316
- callback();
1317
- },
1318
- maxImageWidth: props.maxImageWidth,
1319
- maxImageHeight: props.maxImageHeight
1320
- },
1321
- limit: 3
1322
- }), _media.Media.configure({
1323
- uploadSoundSupport: props.uploadSoundSupport
1324
- }), _css.CSSMark.configure({
1325
- extraCSSRules: props.extraCSSRules
1326
- })];
1327
- var editor = (0, _react2.useEditor)({
1328
- extensions: extensions,
1329
- immediatelyRender: false,
1330
- content: props.markup,
1331
- onUpdate: function onUpdate(_ref6) {
1332
- var _props$onChange;
1333
-
1334
- var editor = _ref6.editor,
1335
- transaction = _ref6.transaction;
1336
- return transaction.isDone && ((_props$onChange = props.onChange) === null || _props$onChange === void 0 ? void 0 : _props$onChange.call(props, editor.getHTML()));
1337
- },
1338
- onBlur: function onBlur(_ref7) {
1339
- var editor = _ref7.editor;
1340
-
1341
- if (toolbarOptsToUse.doneOn === 'blur') {
1342
- var _props$onChange2;
1343
-
1344
- (_props$onChange2 = props.onChange) === null || _props$onChange2 === void 0 ? void 0 : _props$onChange2.call(props, editor.getHTML());
1345
- } else {
1346
- var _props$onDone2;
1347
-
1348
- (_props$onDone2 = props.onDone) === null || _props$onDone2 === void 0 ? void 0 : _props$onDone2.call(props, editor.getHTML());
1349
- }
1350
- }
1351
- });
1352
- (0, _react.useEffect)(function () {
1353
- if (!editor) {
1354
- return;
1355
- }
1356
-
1357
- if (props.markup !== editor.getHTML()) {
1358
- editor.commands.setContent(props.markup, false); // false = don’t emit update
1359
- }
1360
- }, [props.markup, editor]);
1361
- (0, _react.useEffect)(function () {
1362
- // Define your variables in a JS object
1363
- var cssVariables = {
1364
- '--white': '#fff',
1365
- '--black': '#2e2b29',
1366
- '--black-contrast': '#110f0e',
1367
- '--gray-1': 'rgba(61, 37, 20, .05)',
1368
- '--gray-2': 'rgba(61, 37, 20, .08)',
1369
- '--gray-3': 'rgba(61, 37, 20, .12)',
1370
- '--gray-4': 'rgba(53, 38, 28, .3)',
1371
- '--gray-5': 'rgba(28, 25, 23, .6)',
1372
- '--green': '#22c55e',
1373
- '--purple': '#6a00f5',
1374
- '--purple-contrast': '#5800cc',
1375
- '--purple-light': 'rgba(88, 5, 255, .05)',
1376
- '--yellow-contrast': '#facc15',
1377
- '--yellow': 'rgba(250, 204, 21, .4)',
1378
- '--yellow-light': '#fffae5',
1379
- '--red': '#ff5c33',
1380
- '--red-light': '#ffebe5',
1381
- '--shadow': "0px 12px 33px 0px rgba(0, 0, 0, .06),\n 0px 3.618px 9.949px 0px rgba(0, 0, 0, .04)"
1382
- };
1383
- Object.entries(cssVariables).forEach(function (_ref8) {
1384
- var _ref9 = (0, _slicedToArray2["default"])(_ref8, 2),
1385
- key = _ref9[0],
1386
- value = _ref9[1];
1387
-
1388
- document.documentElement.style.setProperty(key, value);
1389
- });
1390
- }, []);
1391
- var editorState = (0, _react2.useEditorState)({
1392
- editor: editor,
1393
- selector: function selector(ctx) {
1394
- var _ctx$editor6;
1395
-
1396
- return {
1397
- isFocused: (_ctx$editor6 = ctx.editor) === null || _ctx$editor6 === void 0 ? void 0 : _ctx$editor6.isFocused
1398
- };
1399
- }
1400
- });
1401
-
1402
- var valueToSize = function valueToSize(v) {
1403
- if (!v) {
1404
- return;
1405
- }
1406
-
1407
- var calcRegex = /^calc\((.*)\)$/;
22
+ var _EditableHtml = _interopRequireWildcard(require("./components/EditableHtml"));
1408
23
 
1409
- if (typeof v === 'string') {
1410
- if (v.endsWith('%')) {
1411
- return undefined;
1412
- } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw') || v.endsWith('ch') || v.endsWith('em') || v.match(calcRegex)) {
1413
- return v;
1414
- } else {
1415
- var value = parseInt(v, 10);
1416
- return isNaN(value) ? value : "".concat(value, "px");
1417
- }
1418
- }
24
+ var _extensions = require("./extensions");
1419
25
 
1420
- if (typeof v === 'number') {
1421
- return "".concat(v, "px");
1422
- }
1423
- };
26
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1424
27
 
1425
- var sizeStyle = (0, _react.useMemo)(function () {
1426
- var minWidth = props.minWidth,
1427
- width = props.width,
1428
- maxWidth = props.maxWidth,
1429
- minHeight = props.minHeight,
1430
- height = props.height,
1431
- maxHeight = props.maxHeight;
1432
- return {
1433
- width: valueToSize(width),
1434
- minWidth: valueToSize(minWidth),
1435
- maxWidth: valueToSize(maxWidth),
1436
- height: valueToSize(height),
1437
- minHeight: valueToSize(minHeight),
1438
- maxHeight: valueToSize(maxHeight)
1439
- };
1440
- }, [props]);
1441
- return /*#__PURE__*/_react["default"].createElement(EditorContainer, (0, _extends2["default"])({}, _objectSpread(_objectSpread({}, props), {}, {
1442
- activePlugins: activePluginsToUse,
1443
- toolbarOpts: toolbarOptsToUse
1444
- }), {
1445
- editorState: editorState,
1446
- editor: editor
1447
- }), editor && /*#__PURE__*/_react["default"].createElement(_react2.EditorContent, {
1448
- style: {
1449
- minHeight: sizeStyle.minHeight,
1450
- height: sizeStyle.height,
1451
- maxHeight: sizeStyle.maxHeight
1452
- },
1453
- className: classes.root,
1454
- editor: editor
1455
- }));
1456
- };
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1457
29
 
1458
- exports.EditableHtml = EditableHtml;
1459
- var StyledEditor = (0, _styles.withStyles)({
1460
- root: {
1461
- outline: 'none !important',
1462
- '& .ProseMirror': {
1463
- outline: 'none !important',
1464
- position: 'initial'
1465
- }
1466
- }
1467
- })(EditableHtml);
1468
- var _default = StyledEditor;
30
+ var _default = _EditableHtml["default"];
1469
31
  exports["default"] = _default;
1470
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qc3giXSwibmFtZXMiOlsiQ2hhcmFjdGVySWNvbiIsImxldHRlciIsImZvbnRTaXplIiwibGluZUhlaWdodCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIkNoYXJhY3RlclBpY2tlciIsImVkaXRvciIsIm9wdHMiLCJvbkNsb3NlIiwiY2hhcmFjdGVycyIsImxlbmd0aCIsImNvbnRhaW5lclJlZiIsInRvcCIsImxlZnQiLCJwb3NpdGlvbiIsInNldFBvc2l0aW9uIiwicG9wb3ZlciIsInNldFBvcG92ZXIiLCJjb25maWdUb1VzZSIsImxhbmd1YWdlIiwic3BhbmlzaENvbmZpZyIsInNwZWNpYWxDb25maWciLCJsYXlvdXRGb3JDaGFyYWN0ZXJzIiwicmVkdWNlIiwib2JqIiwiYXJyIiwiY29sdW1ucyIsInJvd3MiLCJjbG9zZVBvcE92ZXIiLCJib2R5UmVjdCIsImRvY3VtZW50IiwiYm9keSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImZyb20iLCJzdGF0ZSIsInNlbGVjdGlvbiIsInN0YXJ0IiwidmlldyIsImNvb3Jkc0F0UG9zIiwiTWF0aCIsImFicyIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImUiLCJjdXJyZW50IiwiY29udGFpbnMiLCJ0YXJnZXQiLCJkb20iLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlclBvcE92ZXIiLCJldmVudCIsImVsIiwiYW5jaG9yRWwiLCJjdXJyZW50VGFyZ2V0IiwiaGFuZGxlQ2hhbmdlIiwidmFsIiwiY2hhaW4iLCJmb2N1cyIsImluc2VydENvbnRlbnQiLCJydW4iLCJSZWFjdERPTSIsImNyZWF0ZVBvcnRhbCIsIm1heFdpZHRoIiwia2V5UGFkQ2hhcmFjdGVyUmVmIiwic2V0S2V5cGFkSW50ZXJhY3Rpb24iLCJuIiwibWFwIiwiayIsIm5hbWUiLCJ3cml0ZSIsImxhYmVsIiwiY2F0ZWdvcnkiLCJleHRyYUNsYXNzIiwiZXh0cmFQcm9wcyIsInN0eWxlIiwiYm9yZGVyIiwiaGFzUHJldmlldyIsImFjdGlvbnMiLCJvbk1vdXNlRW50ZXIiLCJldiIsIm9uTW91c2VMZWF2ZSIsImRlc2NyaXB0aW9uIiwidW5pY29kZSIsIlN1cGVyc2NyaXB0SWNvbiIsIlN1YnNjcmlwdEljb24iLCJIZWFkaW5nSWNvbiIsIndpZHRoIiwiaGVpZ2h0IiwiRXh0ZW5kZWRUYWJsZSIsIlRhYmxlIiwiZXh0ZW5kIiwiYWRkQXR0cmlidXRlcyIsInJlbmRlckhUTUwiLCJwcm9wcyIsIm9yaWdpbmFsVGFibGUiLCJwYXJlbnQiLCJIVE1MQXR0cmlidXRlcyIsInByZXZpb3VzU3R5bGUiLCJtYXRjaCIsInN0eWxlcyIsInRoZW1lIiwicm9vdCIsInBhZGRpbmciLCJib3JkZXJSYWRpdXMiLCJjdXJzb3IiLCJ3b3JkQnJlYWsiLCJvdmVyZmxvdyIsIm1heEhlaWdodCIsIm1hcmdpblRvcCIsIm1hcmdpbiIsIm1hcmdpbkJvdHRvbSIsInRleHRXcmFwIiwiYmFja2dyb3VuZENvbG9yIiwiY29sb3IiLCJiYWNrZ3JvdW5kIiwiZm9udEZhbWlseSIsImJvcmRlckxlZnQiLCJwYWRkaW5nTGVmdCIsImJvcmRlclRvcCIsInRhYmxlTGF5b3V0IiwiYm9yZGVyQ29sbGFwc2UiLCJ0ZXh0IiwidGV4dEFsaWduIiwiY2hpbGRyZW4iLCJlZGl0b3JIb2xkZXIiLCJyaWdodCIsImJvdHRvbSIsImNvbnRlbnQiLCJ0cmFuc2l0aW9uIiwicG9pbnRlckV2ZW50cyIsInRyYW5zZm9ybSIsInByaW1hcnkiLCJwYWxldHRlIiwiY29tbW9uIiwiYmxhY2siLCJkaXNhYmxlZFVuZGVybGluZSIsImRpc3BsYXkiLCJkaXNhYmxlZFNjcm9sbGJhciIsInNjcm9sbGJhcldpZHRoIiwicmVhZE9ubHkiLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJlZGl0b3JJbkZvY3VzIiwiZXJyb3IiLCJtYWluIiwibm9Cb3JkZXIiLCJub1BhZGRpbmciLCJ0b29sYmFyT25Ub3AiLCJkZWZhdWx0UmVzcG9uc2VBcmVhUHJvcHMiLCJvcHRpb25zIiwicmVzcEFyZWFUb29sYmFyIiwib25IYW5kbGVBcmVhQ2hhbmdlIiwidmFsdWVUb1NpemUiLCJ2IiwiY2FsY1JlZ2V4IiwiZW5kc1dpdGgiLCJ1bmRlZmluZWQiLCJ2YWx1ZSIsInBhcnNlSW50IiwiaXNOYU4iLCJUaXB0YXBDb250YWluZXIiLCJlZGl0b3JTdGF0ZSIsImNsYXNzZXMiLCJkaXNhYmxlVW5kZXJsaW5lIiwiZGlzYWJsZVNjcm9sbGJhciIsImFjdGl2ZVBsdWdpbnMiLCJ0b29sYmFyT3B0cyIsInJlc3BvbnNlQXJlYVByb3BzIiwiYXV0b0ZvY3VzIiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJob2xkZXJOYW1lcyIsImlzRm9jdXNlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsImNvbW1hbmRzIiwic2l6ZVN0eWxlIiwiY2xhc3NOYW1lIiwib25DaGFuZ2UiLCJFZGl0b3JDb250YWluZXIiLCJNZW51QmFyIiwidG9vbE9wdHMiLCJzaG93UGlja2VyIiwic2V0U2hvd1BpY2tlciIsInNlbGVjdG9yIiwiY3R4IiwiY3VycmVudE5vZGUiLCJOb2RlU2VsZWN0aW9uIiwibm9kZSIsImhpZGVEZWZhdWx0VG9vbGJhciIsImlzQWN0aXZlIiwiaXNCb2xkIiwiY2FuQm9sZCIsImNhbiIsInRvZ2dsZUJvbGQiLCJpc1RhYmxlIiwidGFibGVIYXNCb3JkZXIiLCJnZXRBdHRyaWJ1dGVzIiwiY2FuVGFibGUiLCJpbnNlcnRUYWJsZSIsImlzSXRhbGljIiwiY2FuSXRhbGljIiwidG9nZ2xlSXRhbGljIiwiaXNTdHJpa2UiLCJjYW5TdHJpa2UiLCJ0b2dnbGVTdHJpa2UiLCJpc0NvZGUiLCJjYW5Db2RlIiwidG9nZ2xlQ29kZSIsImNhbkNsZWFyTWFya3MiLCJ1bnNldEFsbE1hcmtzIiwiaXNVbmRlcmxpbmUiLCJpc1N1YlNjcmlwdCIsImlzU3VwZXJTY3JpcHQiLCJpc1BhcmFncmFwaCIsImlzSGVhZGluZzEiLCJsZXZlbCIsImlzSGVhZGluZzIiLCJpc0hlYWRpbmczIiwiaXNIZWFkaW5nNCIsImlzSGVhZGluZzUiLCJpc0hlYWRpbmc2IiwiaXNCdWxsZXRMaXN0IiwiaXNPcmRlcmVkTGlzdCIsImlzQ29kZUJsb2NrIiwiaXNCbG9ja3F1b3RlIiwiY2FuVW5kbyIsInVuZG8iLCJjYW5SZWRvIiwicmVkbyIsImhhc0RvbmVCdXR0b24iLCJhdXRvV2lkdGgiLCJuYW1lcyIsInRvb2xiYXIiLCJQSUVfVE9PTEJBUl9fQ0xBU1MiLCJ0b29sYmFyV2l0aE5vRG9uZSIsInRvb2xiYXJUb3AiLCJ0b29sYmFyUmlnaHQiLCJhbGlnbm1lbnQiLCJmb2N1c2VkIiwiYWx3YXlzVmlzaWJsZSIsIl90b29sYmFyT3BlbmVkIiwiZnVsbFdpZHRoIiwiaGlkZGVuIiwiaXNIaWRkZW4iLCJjdXN0b21TdHlsZXMiLCJoYW5kbGVNb3VzZURvd24iLCJwcmV2ZW50RGVmYXVsdCIsInRvb2xiYXJCdXR0b25zIiwiaWNvbiIsIm9uQ2xpY2siLCJjb2xzIiwid2l0aEhlYWRlclJvdyIsImluY2x1ZGVzIiwiaXNEaXNhYmxlZCIsImFkZFJvd0FmdGVyIiwiZGVsZXRlUm93IiwiYWRkQ29sdW1uQWZ0ZXIiLCJkZWxldGVDb2x1bW4iLCJkZWxldGVUYWJsZSIsInRhYmxlQXR0cnMiLCJ1cGRhdGUiLCJ1cGRhdGVBdHRyaWJ1dGVzIiwidG9nZ2xlVW5kZXJsaW5lIiwidG9nZ2xlU3Vic2NyaXB0IiwidG9nZ2xlU3VwZXJzY3JpcHQiLCJzZXRJbWFnZVVwbG9hZE5vZGUiLCJpbnNlcnRNZWRpYSIsInRhZyIsIm9wZW5DU1NDbGFzc0RpYWxvZyIsInRvZ2dsZUhlYWRpbmciLCJpbnNlcnRNYXRoIiwidG9nZ2xlQnVsbGV0TGlzdCIsInRvZ2dsZU9yZGVyZWRMaXN0IiwiZGVmYXVsdFRvb2xiYXIiLCJidXR0b25zQ29udGFpbmVyIiwiZmlsdGVyIiwiYnRuIiwiaW5kZXgiLCJkaXNhYmxlZCIsImFjdGl2ZSIsImJ1dHRvbiIsImluc2VydFJlc3BvbnNlQXJlYSIsInR5cGUiLCJnZXRIVE1MIiwiYmx1ciIsImNoIiwiY29uc29sZSIsImxvZyIsImp1c3RpZnlDb250ZW50IiwiYWxpZ25JdGVtcyIsIm91dGxpbmUiLCJncmV5Iiwib3BhY2l0eSIsInpJbmRleCIsImJveFNoYWRvdyIsImJveFNpemluZyIsInZpc2liaWxpdHkiLCJpY29uUm9vdCIsInZlcnRpY2FsQWxpZ24iLCJzaGFyZWQiLCJTdHlsZWRNZW51QmFyIiwiZGVmYXVsdFRvb2xiYXJPcHRzIiwic2hvd0RvbmUiLCJkb25lT24iLCJFZGl0YWJsZUh0bWwiLCJwZW5kaW5nSW1hZ2VzIiwic2V0UGVuZGluZ0ltYWdlcyIsInNjaGVkdWxlZCIsInNldFNjaGVkdWxlZCIsInRvb2xiYXJPcHRzVG9Vc2UiLCJhY3RpdmVQbHVnaW5zVG9Vc2UiLCJERUZBVUxUX1BMVUdJTlMiLCJleHRlbnNpb25zIiwiVGV4dFN0eWxlS2l0IiwiU3RhcnRlcktpdCIsIlRhYmxlUm93IiwiVGFibGVIZWFkZXIiLCJUYWJsZUNlbGwiLCJSZXNwb25zZUFyZWFFeHRlbnNpb24iLCJFeHBsaWNpdENvbnN0cnVjdGVkUmVzcG9uc2VOb2RlIiwiY29uZmlndXJlIiwiRHJhZ0luVGhlQmxhbmtOb2RlIiwiSW5saW5lRHJvcGRvd25Ob2RlIiwiTWF0aE5vZGUiLCJTdWJTY3JpcHQiLCJTdXBlclNjcmlwdCIsIlRleHRBbGlnbiIsInR5cGVzIiwiYWxpZ25tZW50cyIsIkltYWdlIiwiSW1hZ2VVcGxvYWROb2RlIiwiaW1hZ2VIYW5kbGluZyIsImRpc2FibGVJbWFnZUFsaWdubWVudEJ1dHRvbnMiLCJvbkRvbmUiLCJvbkRlbGV0ZSIsImltYWdlU3VwcG9ydCIsImRvbmUiLCJzcmMiLCJhdHRycyIsIm5ld1BlbmRpbmdJbWFnZXMiLCJpbWciLCJrZXkiLCJuZXdTdGF0ZSIsImluc2VydEltYWdlUmVxdWVzdGVkIiwiYWRkZWRJbWFnZSIsImdldEhhbmRsZXIiLCJvbkZpbmlzaCIsInJlc3VsdCIsImNiIiwiY2FsbGJhY2siLCJoYW5kbGVyIiwiYWRkIiwibWF4SW1hZ2VXaWR0aCIsIm1heEltYWdlSGVpZ2h0IiwibGltaXQiLCJNZWRpYSIsInVwbG9hZFNvdW5kU3VwcG9ydCIsIkNTU01hcmsiLCJleHRyYUNTU1J1bGVzIiwiaW1tZWRpYXRlbHlSZW5kZXIiLCJtYXJrdXAiLCJvblVwZGF0ZSIsInRyYW5zYWN0aW9uIiwiaXNEb25lIiwib25CbHVyIiwic2V0Q29udGVudCIsImNzc1ZhcmlhYmxlcyIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwiZG9jdW1lbnRFbGVtZW50Iiwic2V0UHJvcGVydHkiLCJTdHlsZWRFZGl0b3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBTUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxhQUFhLEdBQUcsU0FBaEJBLGFBQWdCO0FBQUEsTUFBR0MsTUFBSCxRQUFHQSxNQUFIO0FBQUEsc0JBQ3BCO0FBQ0UsSUFBQSxLQUFLLEVBQUU7QUFDTEMsTUFBQUEsUUFBUSxFQUFFLE1BREw7QUFFTEMsTUFBQUEsVUFBVSxFQUFFO0FBRlA7QUFEVCxLQU1HRixNQU5ILENBRG9CO0FBQUEsQ0FBdEI7O0FBV0FELGFBQWEsQ0FBQ0ksU0FBZCxHQUEwQjtBQUN4QkgsRUFBQUEsTUFBTSxFQUFFSSxzQkFB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LHNCQUFrQjtBQUNoQkEsTUFBQUEsT0FBTyxFQUFFLGlCQURPO0FBRWhCeFIsTUFBQUEsUUFBUSxFQUFFO0FBRk07QUFGZDtBQUR3QixDQUFYLEVBUWxCc1MsWUFSa0IsQ0FBckI7ZUFVZW9FLFkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBjcmVhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCc7XG5pbXBvcnQgeyBOb2RlU2VsZWN0aW9uIH0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xuaW1wb3J0IHsgVGV4dFN0eWxlS2l0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dC1zdHlsZSc7XG5pbXBvcnQgeyBFZGl0b3JDb250ZW50LCB1c2VFZGl0b3IsIHVzZUVkaXRvclN0YXRlIH0gZnJvbSAnQHRpcHRhcC9yZWFjdCc7XG5pbXBvcnQgU3RhcnRlcktpdCBmcm9tICdAdGlwdGFwL3N0YXJ0ZXIta2l0JztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1yb3cnO1xuaW1wb3J0IHsgVGFibGVDZWxsIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtY2VsbCc7XG5pbXBvcnQgeyBUYWJsZUhlYWRlciB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWhlYWRlcic7XG5pbXBvcnQgU3VwZXJTY3JpcHQgZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3VwZXJzY3JpcHQnO1xuaW1wb3J0IFN1YlNjcmlwdCBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1zdWJzY3JpcHQnO1xuaW1wb3J0IFRleHRBbGlnbiBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10ZXh0LWFsaWduJztcbmltcG9ydCBJbWFnZSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pbWFnZSc7XG5cbmltcG9ydCB7IHdpdGhTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnO1xuaW1wb3J0IHtcbiAgRXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlTm9kZSxcbiAgRHJhZ0luVGhlQmxhbmtOb2RlLFxuICBJbmxpbmVEcm9wZG93bk5vZGUsXG4gIFJlc3BvbnNlQXJlYUV4dGVuc2lvbixcbn0gZnJvbSAnLi9leHRlbnNpb25zL3Jlc3BvbnNlQXJlYSc7XG5pbXBvcnQgeyBNYXRoTm9kZSB9IGZyb20gJy4vZXh0ZW5zaW9ucy9tYXRoJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgY29sb3IgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuaW1wb3J0IHsgcHJpbWFyeSB9IGZyb20gJy4vdGhlbWUnO1xuaW1wb3J0IHsgUElFX1RPT0xCQVJfX0NMQVNTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRG9uZUJ1dHRvbiB9IGZyb20gJy4vcGx1Z2lucy90b29sYmFyL2RvbmUtYnV0dG9uJztcbmltcG9ydCB7IERFRkFVTFRfUExVR0lOUyB9IGZyb20gJy4vcGx1Z2lucy9pbmRleCc7XG5pbXBvcnQgQm9sZCBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRm9ybWF0Qm9sZCc7XG5pbXBvcnQgSXRhbGljIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRJdGFsaWMnO1xuaW1wb3J0IFN0cmlrZXRocm91Z2ggZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Zvcm1hdFN0cmlrZXRocm91Z2gnO1xuaW1wb3J0IENvZGUgZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0NvZGUnO1xuaW1wb3J0IEdyaWRPbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvR3JpZE9uJztcbmltcG9ydCBCdWxsZXRlZExpc3RJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRMaXN0QnVsbGV0ZWQnO1xuaW1wb3J0IE51bWJlcmVkTGlzdEljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Zvcm1hdExpc3ROdW1iZXJlZCc7XG5pbXBvcnQgVW5kZXJsaW5lIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Gb3JtYXRVbmRlcmxpbmVkJztcbmltcG9ydCBGdW5jdGlvbnMgZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Z1bmN0aW9ucyc7XG5pbXBvcnQgSW1hZ2VJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9JbWFnZSc7XG5pbXBvcnQgeyBUb29sYmFySWNvbiB9IGZyb20gJy4vcGx1Z2lucy9yZXNwQXJlYS9pY29ucyc7XG5pbXBvcnQgUmVkbyBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvUmVkbyc7XG5pbXBvcnQgVW5kbyBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvVW5kbyc7XG5pbXBvcnQgVGhlYXRlcnNJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9UaGVhdGVycyc7XG5pbXBvcnQgVm9sdW1lVXBJY29uIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9Wb2x1bWVVcCc7XG5pbXBvcnQgeyBjaGFyYWN0ZXJJY29ucywgc3BhbmlzaENvbmZpZywgc3BlY2lhbENvbmZpZyB9IGZyb20gJy4vcGx1Z2lucy9jaGFyYWN0ZXJzL3V0aWxzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBNYXRoVG9vbGJhciwgUHVyZVRvb2xiYXIgfSBmcm9tICdAcGllLWxpYi9tYXRoLXRvb2xiYXInO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcbmltcG9ydCBDdXN0b21Qb3BwZXIgZnJvbSAnLi9wbHVnaW5zL2NoYXJhY3RlcnMvY3VzdG9tLXBvcHBlcic7XG5pbXBvcnQgVGV4dEFsaWduSWNvbiBmcm9tICcuL3BsdWdpbnMvdGV4dEFsaWduL2ljb25zJztcbmltcG9ydCBDU1NJY29uIGZyb20gJy4vcGx1Z2lucy9jc3MvaWNvbnMnO1xuXG5pbXBvcnQgeyBJbWFnZVVwbG9hZE5vZGUgfSBmcm9tICcuL2V4dGVuc2lvbnMvaW1hZ2UnO1xuaW1wb3J0IHsgTWVkaWEgfSBmcm9tICcuL2V4dGVuc2lvbnMvbWVkaWEnO1xuaW1wb3J0IHsgQ1NTTWFyayB9IGZyb20gJy4vZXh0ZW5zaW9ucy9jc3MnO1xuaW1wb3J0IHsgQWRkQ29sdW1uLCBBZGRSb3csIFJlbW92ZUNvbHVtbiwgUmVtb3ZlUm93LCBSZW1vdmVUYWJsZSB9IGZyb20gXCIuL3BsdWdpbnMvdGFibGUvaWNvbnNcIjtcbmltcG9ydCBCb3JkZXJBbGwgZnJvbSBcIkBtYXRlcmlhbC11aS9pY29ucy9Cb3JkZXJBbGxcIjtcblxuY29uc3QgQ2hhcmFjdGVySWNvbiA9ICh7IGxldHRlciB9KSA9PiAoXG4gIDxkaXZcbiAgICBzdHlsZT17e1xuICAgICAgZm9udFNpemU6ICcyNHB4JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICcyNHB4JyxcbiAgICB9fVxuICA+XG4gICAge2xldHRlcn1cbiAgPC9kaXY+XG4pO1xuXG5DaGFyYWN0ZXJJY29uLnByb3BUeXBlcyA9IHtcbiAgbGV0dGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENoYXJhY3RlclBpY2tlcih7IGVkaXRvciwgb3B0cywgb25DbG9zZSB9KSB7XG4gIGlmICghb3B0cz8uY2hhcmFjdGVycz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IFtwb3NpdGlvbiwgc2V0UG9zaXRpb25dID0gdXNlU3RhdGUoeyB0b3A6IDAsIGxlZnQ6IDAgfSk7XG4gIGNvbnN0IFtwb3BvdmVyLCBzZXRQb3BvdmVyXSA9IHVzZVN0YXRlKG51bGwpO1xuXG4gIGxldCBjb25maWdUb1VzZTtcblxuICBzd2l0Y2ggKHRydWUpIHtcbiAgICBjYXNlIG9wdHMubGFuZ3VhZ2UgPT09ICdzcGFuaXNoJzpcbiAgICAgIGNvbmZpZ1RvVXNlID0gc3BhbmlzaENvbmZpZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugb3B0cy5sYW5ndWFnZSA9PT0gJ3NwZWNpYWwnOlxuICAgICAgY29uZmlnVG9Vc2UgPSBzcGVjaWFsQ29uZmlnO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbmZpZ1RvVXNlID0gb3B0cztcbiAgfVxuXG4gIGNvbnN0IGxheW91dEZvckNoYXJhY3RlcnMgPSBjb25maWdUb1VzZS5jaGFyYWN0ZXJzLnJlZHVjZShcbiAgICAob2JqLCBhcnIpID0+IHtcbiAgICAgIGlmIChhcnIubGVuZ3RoID49IG9iai5jb2x1bW5zKSB7XG4gICAgICAgIG9iai5jb2x1bW5zID0gYXJyLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIHsgcm93czogY29uZmlnVG9Vc2UuY2hhcmFjdGVycy5sZW5ndGgsIGNvbHVtbnM6IDAgfSxcbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbG9zZVBvcE92ZXIoKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHNlbGVjdGlvblxuICAgIGNvbnN0IGJvZHlSZWN0ID0gZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7IGZyb20gfSA9IGVkaXRvci5zdGF0ZS5zZWxlY3Rpb247XG4gICAgY29uc3Qgc3RhcnQgPSBlZGl0b3Iudmlldy5jb29yZHNBdFBvcyhmcm9tKTtcbiAgICBzZXRQb3NpdGlvbih7XG4gICAgICB0b3A6IHN0YXJ0LnRvcCArIE1hdGguYWJzKGJvZHlSZWN0LnRvcCkgKyA0MCwgLy8gc2hpZnQgYWJvdmVcbiAgICAgIGxlZnQ6IHN0YXJ0LmxlZnQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZSkgPT4ge1xuICAgICAgaWYgKGNvbnRhaW5lclJlZi5jdXJyZW50ICYmICFjb250YWluZXJSZWYuY3VycmVudC5jb250YWlucyhlLnRhcmdldCkgJiYgIWVkaXRvci52aWV3LmRvbS5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgICAgb25DbG9zZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpO1xuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpO1xuICB9LCBbZWRpdG9yXSk7XG5cbiAgY29uc3QgcmVuZGVyUG9wT3ZlciA9IChldmVudCwgZWwpID0+IHNldFBvcG92ZXIoeyBhbmNob3JFbDogZXZlbnQuY3VycmVudFRhcmdldCwgZWwgfSk7XG4gIGNvbnN0IGNsb3NlUG9wT3ZlciA9ICgpID0+IHNldFBvcG92ZXIobnVsbCk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKHZhbCkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgZWRpdG9yXG4gICAgICAgIC5jaGFpbigpXG4gICAgICAgIC5mb2N1cygpXG4gICAgICAgIC5pbnNlcnRDb250ZW50KHZhbClcbiAgICAgICAgLnJ1bigpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgIHtSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJpbnNlcnQtY2hhcmFjdGVyLWRpYWxvZ1wiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgdG9wOiBgJHtwb3NpdGlvbi50b3B9cHhgLFxuICAgICAgICAgICAgbGVmdDogYCR7cG9zaXRpb24ubGVmdH1weGAsXG4gICAgICAgICAgICBtYXhXaWR0aDogJzUwMHB4JyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxQdXJlVG9vbGJhclxuICAgICAgICAgICAgICBrZXlQYWRDaGFyYWN0ZXJSZWY9e29wdHMua2V5UGFkQ2hhcmFjdGVyUmVmfVxuICAgICAgICAgICAgICBzZXRLZXlwYWRJbnRlcmFjdGlvbj17b3B0cy5zZXRLZXlwYWRJbnRlcmFjdGlvbn1cbiAgICAgICAgICAgICAgYXV0b0ZvY3VzXG4gICAgICAgICAgICAgIG5vRGVjaW1hbFxuICAgICAgICAgICAgICBoaWRlSW5wdXRcbiAgICAgICAgICAgICAgbm9MYXRleEhhbmRsaW5nXG4gICAgICAgICAgICAgIGhpZGVEb25lQnV0dG9uQmFja2dyb3VuZFxuICAgICAgICAgICAgICBsYXlvdXRGb3JLZXlQYWQ9e2xheW91dEZvckNoYXJhY3RlcnN9XG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxLZXlzPXtjb25maWdUb1VzZS5jaGFyYWN0ZXJzLnJlZHVjZSgoYXJyLCBuKSA9PiB7XG4gICAgICAgICAgICAgICAgYXJyID0gW1xuICAgICAgICAgICAgICAgICAgLi4uYXJyLFxuICAgICAgICAgICAgICAgICAgLi4ubi5tYXAoKGspID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGdldChrLCAnbmFtZScpIHx8IGssXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlOiBnZXQoaywgJ3dyaXRlJykgfHwgayxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldChrLCAnbGFiZWwnKSB8fCBrLFxuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeTogJ2NoYXJhY3RlcicsXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhQ2xhc3M6ICdjaGFyYWN0ZXInLFxuICAgICAgICAgICAgICAgICAgICBleHRyYVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgLi4uKGsuZXh0cmFQcm9wcyB8fCB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihrLmV4dHJhUHJvcHMgfHwge30pLnN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICMwMDAnLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC4uLihjb25maWdUb1VzZS5oYXNQcmV2aWV3XG4gICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbnM6IHsgb25Nb3VzZUVudGVyOiAoZXYpID0+IHJlbmRlclBvcE92ZXIoZXYsIGspLCBvbk1vdXNlTGVhdmU6IGNsb3NlUG9wT3ZlciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICAgICAgICB9LCBbXSl9XG4gICAgICAgICAgICAgIGtleXBhZE1vZGU9XCJsYW5ndWFnZVwiXG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgIG9uRG9uZT17b25DbG9zZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PixcbiAgICAgICAgZG9jdW1lbnQuYm9keSxcbiAgICAgICl9XG4gICAgICB7cG9wb3ZlciAmJlxuICAgICAgICBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgICAgICAgPEN1c3RvbVBvcHBlciBvbkNsb3NlPXtjbG9zZVBvcE92ZXJ9IGFuY2hvckVsPXtwb3BvdmVyLmFuY2hvckVsfT5cbiAgICAgICAgICAgIDxkaXY+e3BvcG92ZXIuZWwubGFiZWx9PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAyMCwgbGluZUhlaWdodDogJzIwcHgnIH19Pntwb3BvdmVyLmVsLmRlc2NyaXB0aW9ufTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMjAsIGxpbmVIZWlnaHQ6ICcyMHB4JyB9fT57cG9wb3Zlci5lbC51bmljb2RlfTwvZGl2PlxuICAgICAgICAgIDwvQ3VzdG9tUG9wcGVyPixcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LFxuICAgICAgICApfVxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59XG5cbmNvbnN0IFN1cGVyc2NyaXB0SWNvbiA9ICgpID0+IChcbiAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB3aWR0aD1cIjI0cHhcIiBmaWxsPVwibm9uZVwiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTIyLDdoLTJ2MWgzdjFoLTRWN2MwLTAuNTUsMC40NS0xLDEtMWgyVjVoLTNWNGgzYzAuNTUsMCwxLDAuNDUsMSwxdjFDMjMsNi41NSwyMi41NSw3LDIyLDd6IE01Ljg4LDIwaDIuNjZsMy40LTUuNDJoMC4xMiBsMy40LDUuNDJoMi42NmwtNC42NS03LjI3TDE3LjgxLDZoLTIuNjhsLTMuMDcsNC45OWgtMC4xMkw4Ljg1LDZINi4xOWw0LjMyLDYuNzNMNS44OCwyMHpcIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgLz5cbiAgPC9zdmc+XG4pO1xuXG5jb25zdCBTdWJzY3JpcHRJY29uID0gKCkgPT4gKFxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCJub25lXCI+XG4gICAgPHBhdGhcbiAgICAgIGQ9XCJNMjIsMThoLTJ2MWgzdjFoLTR2LTJjMC0wLjU1LDAuNDUtMSwxLTFoMnYtMWgtM3YtMWgzYzAuNTUsMCwxLDAuNDUsMSwxdjFDMjMsMTcuNTUsMjIuNTUsMTgsMjIsMTh6IE01Ljg4LDE4aDIuNjYgbDMuNC01LjQyaDAuMTJsMy40LDUuNDJoMi42NmwtNC42NS03LjI3TDE3LjgxLDRoLTIuNjhsLTMuMDcsNC45OWgtMC4xMkw4Ljg1LDRINi4xOWw0LjMyLDYuNzNMNS44OCwxOHpcIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgLz5cbiAgPC9zdmc+XG4pO1xuXG5jb25zdCBIZWFkaW5nSWNvbiA9ICgpID0+IChcbiAgPHN2Z1xuICAgIHdpZHRoPVwiMzBcIlxuICAgIGhlaWdodD1cIjI4XCJcbiAgICB2aWV3Qm94PVwiMCAwIDMwIDI4XCJcbiAgICBmaWxsPVwibm9uZVwiXG4gICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgc3R5bGU9e3sgd2lkdGg6ICcyMHB4JywgaGVpZ2h0OiAnMThweCcgfX1cbiAgPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTI3IDRWMjRIMjlDMjkuNSAyNCAzMCAyNC41IDMwIDI1VjI3QzMwIDI3LjU2MjUgMjkuNSAyOCAyOSAyOEgxOUMxOC40Mzc1IDI4IDE4IDI3LjU2MjUgMTggMjdWMjVDMTggMjQuNSAxOC40Mzc1IDI0IDE5IDI0SDIxVjE2SDlWMjRIMTFDMTEuNSAyNCAxMiAyNC41IDEyIDI1VjI3QzEyIDI3LjU2MjUgMTEuNSAyOCAxMSAyOEgxQzAuNDM3NSAyOCAwIDI3LjU2MjUgMCAyN1YyNUMwIDI0LjUgMC40Mzc1IDI0IDEgMjRIM1Y0SDFDMC40Mzc1IDQgMCAzLjU2MjUgMCAzVjFDMCAwLjUgMC40Mzc1IDAgMSAwSDExQzExLjUgMCAxMiAwLjUgMTIgMVYzQzEyIDMuNTYyNSAxMS41IDQgMTEgNEg5VjEySDIxVjRIMTlDMTguNDM3NSA0IDE4IDMuNTYyNSAxOCAzVjFDMTggMC41IDE4LjQzNzUgMCAxOSAwSDI5QzI5LjUgMCAzMCAwLjUgMzAgMVYzQzMwIDMuNTYyNSAyOS41IDQgMjkgNEgyN1pcIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgLz5cbiAgPC9zdmc+XG4pO1xuXG5jb25zdCBFeHRlbmRlZFRhYmxlID0gVGFibGUuZXh0ZW5kKHtcbiAgYWRkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiB7IGRlZmF1bHQ6ICcxJyB9LFxuICAgIH07XG4gIH0sXG4gIHJlbmRlckhUTUwocHJvcHMpIHtcbiAgICBjb25zdCBvcmlnaW5hbFRhYmxlID0gdGhpcy5wYXJlbnQocHJvcHMpO1xuICAgIGNvbnN0IHsgYm9yZGVyIH0gPSBwcm9wcy5IVE1MQXR0cmlidXRlcztcblxuICAgIGNvbnN0IHByZXZpb3VzU3R5bGUgPSBgJHtvcmlnaW5hbFRhYmxlWzFdLnN0eWxlfSR7b3JpZ2luYWxUYWJsZVsxXS5zdHlsZS5tYXRjaCgvLio7ICovKSA/ICcnIDogJzsnfWA7XG5cbiAgICBvcmlnaW5hbFRhYmxlWzFdLnN0eWxlID0gYCR7cHJldmlvdXNTdHlsZX1cbiAgICB3aWR0aDogMTAwJTtcbiAgICBjb2xvcjogdmFyKC0tcGllLXRleHQsIGJsYWNrKTtcbiAgICB0YWJsZS1sYXlvdXQ6IGZpeGVkO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGllLWJhY2tncm91bmQsIHJnYmEoMjU1LCAyNTUsIDI1NSkpYDtcbiAgICBvcmlnaW5hbFRhYmxlWzFdLmJvcmRlciA9IGJvcmRlciA/IGJvcmRlciA6ICcxJztcblxuICAgIHJldHVybiBvcmlnaW5hbFRhYmxlO1xuICB9LFxufSk7XG5cbmNvbnN0IHN0eWxlcyA9ICh0aGVtZSkgPT4gKHtcbiAgcm9vdDoge1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHBhZGRpbmc6ICcwcHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjY2NjJyxcbiAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgIGN1cnNvcjogJ3RleHQnLFxuICAgICcmIFtkYXRhLXNsYXRlLWVkaXRvcj1cInRydWVcIl0nOiB7XG4gICAgICB3b3JkQnJlYWs6ICdicmVhay13b3JkJyxcbiAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICBtYXhIZWlnaHQ6ICc1MDBweCcsXG4gICAgICAvLyBuZWVkZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwdXQgdGhlIGZvY3VzIGJlZm9yZSBhIHZvaWQgZWxlbWVudCB3aGVuIGl0IGlzIHRoZSBmaXJzdCBvbmUgaW4gdGhlIGVkaXRvclxuICAgICAgcGFkZGluZzogJzVweCcsXG4gICAgfSxcblxuICAgICcmOmZpcnN0LWNoaWxkJzoge1xuICAgICAgbWFyZ2luVG9wOiAwLFxuICAgIH0sXG5cbiAgICAnJiB1bCwgJiBvbCc6IHtcbiAgICAgIHBhZGRpbmc6ICcwIDFyZW0nLFxuICAgICAgbWFyZ2luOiAnMS4yNXJlbSAxcmVtIDEuMjVyZW0gMC40cmVtJyxcbiAgICB9LFxuXG4gICAgJyYgdWwgbGkgcCwgJiBvbCBsaSBwJzoge1xuICAgICAgbWFyZ2luVG9wOiAnMC4yNWVtJyxcbiAgICAgIG1hcmdpbkJvdHRvbTogJzAuMjVlbScsXG4gICAgfSxcblxuICAgICcmIGgxLCAmIGgyLCAmIGgzLCAmIGg0LCAmIGg1LCAmIGg2Jzoge1xuICAgICAgbGluZUhlaWdodDogMS4xLFxuICAgICAgbWFyZ2luVG9wOiAnMi41cmVtJyxcbiAgICAgIHRleHRXcmFwOiAncHJldHR5JyxcbiAgICB9LFxuXG4gICAgJyYgaDEsICYgaDInOiB7XG4gICAgICBtYXJnaW5Ub3A6ICczLjVyZW0nLFxuICAgICAgbWFyZ2luQm90dG9tOiAnMS41cmVtJyxcbiAgICB9LFxuXG4gICAgJyYgaDEnOiB7XG4gICAgICBmb250U2l6ZTogJzEuNHJlbScsXG4gICAgfSxcblxuICAgICcmIGgyJzoge1xuICAgICAgZm9udFNpemU6ICcxLjJyZW0nLFxuICAgIH0sXG5cbiAgICAnJiBoMyc6IHtcbiAgICAgIGZvbnRTaXplOiAnMS4xcmVtJyxcbiAgICB9LFxuXG4gICAgJyYgaDQsICYgaDUsICYgaDYnOiB7XG4gICAgICBmb250U2l6ZTogJzFyZW0nLFxuICAgIH0sXG5cbiAgICAnJiBjb2RlJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tcHVycGxlLWxpZ2h0KScsXG4gICAgICBib3JkZXJSYWRpdXM6ICcwLjRyZW0nLFxuICAgICAgY29sb3I6ICd2YXIoLS1ibGFjayknLFxuICAgICAgZm9udFNpemU6ICcwLjg1cmVtJyxcbiAgICAgIHBhZGRpbmc6ICcwLjI1ZW0gMC4zZW0nLFxuICAgIH0sXG5cbiAgICAnJiBwcmUnOiB7XG4gICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tYmxhY2spJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzAuNXJlbScsXG4gICAgICBjb2xvcjogJ3ZhcigtLXdoaXRlKScsXG4gICAgICBmb250RmFtaWx5OiBcIidKZXRCcmFpbnNNb25vJywgbW9ub3NwYWNlXCIsXG4gICAgICBtYXJnaW46ICcxLjVyZW0gMCcsXG4gICAgICBwYWRkaW5nOiAnMC43NXJlbSAxcmVtJyxcblxuICAgICAgJyYgY29kZSc6IHtcbiAgICAgICAgYmFja2dyb3VuZDogJ25vbmUnLFxuICAgICAgICBjb2xvcjogJ2luaGVyaXQnLFxuICAgICAgICBmb250U2l6ZTogJzAuOHJlbScsXG4gICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICAnJiBibG9ja3F1b3RlJzoge1xuICAgICAgYm9yZGVyTGVmdDogJzNweCBzb2xpZCB2YXIoLS1ncmF5LTMpJyxcbiAgICAgIG1hcmdpbjogJzEuNXJlbSAwJyxcbiAgICAgIHBhZGRpbmdMZWZ0OiAnMXJlbScsXG4gICAgfSxcblxuICAgICcmIGhyJzoge1xuICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICBib3JkZXJUb3A6ICcxcHggc29saWQgdmFyKC0tZ3JheS0yKScsXG4gICAgICBtYXJnaW46ICcycmVtIDAnLFxuICAgIH0sXG5cbiAgICAnJiB0YWJsZSc6IHtcbiAgICAgIHRhYmxlTGF5b3V0OiAnZml4ZWQnLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGJvcmRlckNvbGxhcHNlOiAnY29sbGFwc2UnLFxuICAgICAgY29sb3I6IGNvbG9yLnRleHQoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuYmFja2dyb3VuZCgpLFxuICAgIH0sXG4gICAgJyYgdGFibGU6bm90KFtib3JkZXI9XCIxXCJdKSB0cic6IHtcbiAgICAgIGJvcmRlclRvcDogJzFweCBzb2xpZCAjZGZlMmU1JyxcbiAgICB9LFxuICAgICcmIHRkLCB0aCc6IHtcbiAgICAgIHBhZGRpbmc6ICcuNmVtIDFlbScsXG4gICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIH0sXG4gICAgJyYgdGFibGU6bm90KFtib3JkZXI9XCIxXCJdKSB0ZCwgdGgnOiB7XG4gICAgICBib3JkZXI6ICcxcHggc29saWQgI2RmZTJlNScsXG4gICAgfSxcbiAgfSxcbiAgY2hpbGRyZW46IHtcbiAgICBwYWRkaW5nOiAnMTBweCAxNnB4JyxcbiAgfSxcbiAgZWRpdG9ySG9sZGVyOiB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgcGFkZGluZzogJzBweCcsXG4gICAgLy8gb3ZlcmZsb3dZOiAnYXV0bycsXG4gICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICBjb2xvcjogY29sb3IudGV4dCgpLFxuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuYmFja2dyb3VuZCgpLFxuICAgICcmOjpiZWZvcmUnOiB7XG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICByaWdodDogJzAnLFxuICAgICAgYm90dG9tOiAnMCcsXG4gICAgICBoZWlnaHQ6ICcxcHgnLFxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB0cmFuc2l0aW9uOiAnYmFja2dyb3VuZC1jb2xvciAyMDBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIDBtcycsXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyxcbiAgICB9LFxuICAgICcmOjphZnRlcic6IHtcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHJpZ2h0OiAnMCcsXG4gICAgICBib3R0b206ICcwJyxcbiAgICAgIGhlaWdodDogJzFweCcsXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgwKScsXG4gICAgICB0cmFuc2l0aW9uOiAndHJhbnNmb3JtIDIwMG1zIGN1YmljLWJlemllcigwLjAsIDAuMCwgMC4yLCAxKSAwbXMsIGJhY2tncm91bmQtY29sb3IgMjAwbXMgbGluZWFyJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC40MiknLFxuICAgIH0sXG4gICAgJyY6Zm9jdXMnOiB7XG4gICAgICAnJjo6YWZ0ZXInOiB7XG4gICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKScsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeSxcbiAgICAgICAgaGVpZ2h0OiAnMnB4JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgICcmOjphZnRlcic6IHtcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDEpJyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS5wYWxldHRlLmNvbW1vbi5ibGFjayxcbiAgICAgICAgaGVpZ2h0OiAnMnB4JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgZGlzYWJsZWRVbmRlcmxpbmU6IHtcbiAgICAnJjo6YmVmb3JlJzoge1xuICAgICAgZGlzcGxheTogJ25vbmUnLFxuICAgIH0sXG4gICAgJyY6OmFmdGVyJzoge1xuICAgICAgZGlzcGxheTogJ25vbmUnLFxuICAgIH0sXG4gIH0sXG4gIGRpc2FibGVkU2Nyb2xsYmFyOiB7XG4gICAgJyY6Oi13ZWJraXQtc2Nyb2xsYmFyJzoge1xuICAgICAgZGlzcGxheTogJ25vbmUnLFxuICAgIH0sXG4gICAgc2Nyb2xsYmFyV2lkdGg6ICdub25lJyxcbiAgICAnLW1zLW92ZXJmbG93LXN0eWxlJzogJ25vbmUnLFxuICB9LFxuICByZWFkT25seToge1xuICAgICcmOjpiZWZvcmUnOiB7XG4gICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgYmFja2dyb3VuZFNpemU6ICc1cHggMXB4JyxcbiAgICAgIGJhY2tncm91bmRJbWFnZTogJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAzMyUsIHRyYW5zcGFyZW50IDAlKScsXG4gICAgICBiYWNrZ3JvdW5kUmVwZWF0OiAncmVwZWF0LXgnLFxuICAgICAgYmFja2dyb3VuZFBvc2l0aW9uOiAnbGVmdCB0b3AnLFxuICAgIH0sXG4gICAgJyY6OmFmdGVyJzoge1xuICAgICAgbGVmdDogJzAnLFxuICAgICAgcmlnaHQ6ICcwJyxcbiAgICAgIGJvdHRvbTogJzAnLFxuICAgICAgaGVpZ2h0OiAnMXB4JyxcbiAgICAgIGNvbnRlbnQ6ICdcIlwiJyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246ICd0cmFuc2Zvcm0gMjAwbXMgY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpIDBtcywgYmFja2dyb3VuZC1jb2xvciAwbXMgbGluZWFyJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMCknLFxuICAgIH0sXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICAnJjo6YWZ0ZXInOiB7XG4gICAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgwKScsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUucGFsZXR0ZS5jb21tb24uYmxhY2ssXG4gICAgICAgIGhlaWdodDogJzJweCcsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIGVkaXRvckluRm9jdXM6IHtcbiAgICAnJjo6YWZ0ZXInOiB7XG4gICAgICB0cmFuc2Zvcm06ICdzY2FsZVgoMSknLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBwcmltYXJ5LFxuICAgICAgaGVpZ2h0OiAnMnB4JyxcbiAgICB9LFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgJyY6OmFmdGVyJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnksXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgYm9yZGVyOiBgMnB4IHNvbGlkICR7dGhlbWUucGFsZXR0ZS5lcnJvci5tYWlufSAhaW1wb3J0YW50YCxcbiAgfSxcbiAgbm9Cb3JkZXI6IHtcbiAgICBib3JkZXI6ICdub25lJyxcbiAgfSxcbiAgbm9QYWRkaW5nOiB7XG4gICAgcGFkZGluZzogMCxcbiAgfSxcbiAgdG9vbGJhck9uVG9wOiB7XG4gICAgbWFyZ2luVG9wOiAnNDVweCcsXG4gIH0sXG59KTtcblxuY29uc3QgZGVmYXVsdFJlc3BvbnNlQXJlYVByb3BzID0ge1xuICBvcHRpb25zOiB7fSxcbiAgcmVzcEFyZWFUb29sYmFyOiAoKSA9PiB7fSxcbiAgb25IYW5kbGVBcmVhQ2hhbmdlOiAoKSA9PiB7fSxcbn07XG5cbmNvbnN0IHZhbHVlVG9TaXplID0gKHYpID0+IHtcbiAgaWYgKCF2KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNhbGNSZWdleCA9IC9eY2FsY1xcKCguKilcXCkkLztcblxuICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHYuZW5kc1dpdGgoJyUnKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdi5lbmRzV2l0aCgncHgnKSB8fFxuICAgICAgdi5lbmRzV2l0aCgndmgnKSB8fFxuICAgICAgdi5lbmRzV2l0aCgndncnKSB8fFxuICAgICAgdi5lbmRzV2l0aCgnY2gnKSB8fFxuICAgICAgdi5lbmRzV2l0aCgnZW0nKSB8fFxuICAgICAgdi5tYXRjaChjYWxjUmVnZXgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh2LCAxMCk7XG4gICAgICByZXR1cm4gaXNOYU4odmFsdWUpID8gdmFsdWUgOiBgJHt2YWx1ZX1weGA7XG4gICAgfVxuICB9XG4gIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gYCR7dn1weGA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpcHRhcENvbnRhaW5lcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgZWRpdG9yLFxuICAgIGVkaXRvclN0YXRlLFxuICAgIGNsYXNzZXMsXG4gICAgY2hpbGRyZW4sXG4gICAgZGlzYWJsZVVuZGVybGluZSxcbiAgICBkaXNhYmxlU2Nyb2xsYmFyLFxuICAgIGFjdGl2ZVBsdWdpbnMsXG4gICAgdG9vbGJhck9wdHMsXG4gICAgcmVzcG9uc2VBcmVhUHJvcHMsXG4gICAgYXV0b0ZvY3VzLFxuICAgIG1pbldpZHRoLFxuICAgIHdpZHRoLFxuICAgIG1heFdpZHRoLFxuICAgIG1pbkhlaWdodCxcbiAgICBoZWlnaHQsXG4gICAgbWF4SGVpZ2h0LFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGhvbGRlck5hbWVzID0gY2xhc3NOYW1lcyhjbGFzc2VzLmVkaXRvckhvbGRlciwge1xuICAgIFtjbGFzc2VzLmVkaXRvckluRm9jdXNdOiBlZGl0b3JTdGF0ZS5pc0ZvY3VzZWQsXG4gICAgW2NsYXNzZXMucmVhZE9ubHldOiBlZGl0b3JTdGF0ZS5yZWFkT25seSxcbiAgICBbY2xhc3Nlcy5kaXNhYmxlZFVuZGVybGluZV06IGRpc2FibGVVbmRlcmxpbmUsXG4gICAgW2NsYXNzZXMuZGlzYWJsZWRTY3JvbGxiYXJdOiBkaXNhYmxlU2Nyb2xsYmFyLFxuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChlZGl0b3IgJiYgYXV0b0ZvY3VzKSB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLmZvY3VzKCdlbmQnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2VkaXRvciwgYXV0b0ZvY3VzXSk7XG5cbiAgY29uc3Qgc2l6ZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB2YWx1ZVRvU2l6ZSh3aWR0aCksXG4gICAgICBtaW5XaWR0aDogdmFsdWVUb1NpemUobWluV2lkdGgpLFxuICAgICAgbWF4V2lkdGg6IHZhbHVlVG9TaXplKG1heFdpZHRoKSxcbiAgICAgIGhlaWdodDogdmFsdWVUb1NpemUoaGVpZ2h0KSxcbiAgICAgIG1pbkhlaWdodDogdmFsdWVUb1NpemUobWluSGVpZ2h0KSxcbiAgICAgIG1heEhlaWdodDogdmFsdWVUb1NpemUobWF4SGVpZ2h0KSxcbiAgICB9O1xuICB9LCBbbWluV2lkdGgsIHdpZHRoLCBtYXhXaWR0aCwgbWluSGVpZ2h0LCBoZWlnaHQsIG1heEhlaWdodF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICB7XG4gICAgICAgICAgW2NsYXNzZXMubm9Cb3JkZXJdOiB0b29sYmFyT3B0cyAmJiB0b29sYmFyT3B0cy5ub0JvcmRlcixcbiAgICAgICAgICBbY2xhc3Nlcy5lcnJvcl06IHRvb2xiYXJPcHRzICYmIHRvb2xiYXJPcHRzLmVycm9yLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc2VzLnJvb3QsXG4gICAgICAgIHByb3BzLmNsYXNzTmFtZSxcbiAgICAgICl9XG4gICAgICBzdHlsZT17eyB3aWR0aDogc2l6ZVN0eWxlLndpZHRoLCBtaW5XaWR0aDogc2l6ZVN0eWxlLm1pbldpZHRoLCBtYXhXaWR0aDogc2l6ZVN0eWxlLm1heFdpZHRoIH19XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2hvbGRlck5hbWVzfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW2NsYXNzZXMubm9QYWRkaW5nXTogdG9vbGJhck9wdHMgJiYgdG9vbGJhck9wdHMubm9QYWRkaW5nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsYXNzZXMuY2hpbGRyZW4sXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qe2VkaXRvclN0YXRlLmlzRm9jdXNlZCAmJiA8TWVudUJhciBlZGl0b3I9e2VkaXRvcn0gLz59Ki99XG4gICAgICB7Lyo8VG9vbGJhciBlZGl0b3I9e2VkaXRvcn0gZWRpdG9yU3RhdGU9e2VkaXRvclN0YXRlfSBwbHVnaW5zPXtwbHVnaW5zfSB0b29sYmFyT3B0cz17dG9vbGJhck9wdHN9IGlzRm9jdXNlZD17ZWRpdG9yU3RhdGUuaXNGb2N1c2VkfSAvPiovfVxuICAgICAge2VkaXRvciAmJiAoXG4gICAgICAgIDxTdHlsZWRNZW51QmFyXG4gICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgcmVzcG9uc2VBcmVhUHJvcHM9e3Jlc3BvbnNlQXJlYVByb3BzfVxuICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICBhY3RpdmVQbHVnaW5zPXthY3RpdmVQbHVnaW5zfVxuICAgICAgICAgIG9uQ2hhbmdlPXtwcm9wcy5vbkNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmNvbnN0IEVkaXRvckNvbnRhaW5lciA9IHdpdGhTdHlsZXMoc3R5bGVzKShUaXB0YXBDb250YWluZXIpO1xuXG5mdW5jdGlvbiBNZW51QmFyKHsgZWRpdG9yLCBjbGFzc2VzLCBhY3RpdmVQbHVnaW5zLCB0b29sYmFyT3B0czogdG9vbE9wdHMsIHJlc3BvbnNlQXJlYVByb3BzLCBvbkNoYW5nZSB9KSB7XG4gIGNvbnN0IFtzaG93UGlja2VyLCBzZXRTaG93UGlja2VyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgdG9vbGJhck9wdHMgPSB0b29sT3B0cyA/PyB7fTtcbiAgLy8gUmVhZCB0aGUgY3VycmVudCBlZGl0b3IncyBzdGF0ZSwgYW5kIHJlLXJlbmRlciB0aGUgY29tcG9uZW50IHdoZW4gaXQgY2hhbmdlc1xuICBjb25zdCBlZGl0b3JTdGF0ZSA9IHVzZUVkaXRvclN0YXRlKHtcbiAgICBlZGl0b3IsXG4gICAgc2VsZWN0b3I6IChjdHgpID0+IHtcbiAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSBjdHguZWRpdG9yPy5zdGF0ZSB8fCB7fTtcblxuICAgICAgbGV0IGN1cnJlbnROb2RlO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgTm9kZVNlbGVjdGlvbikge1xuICAgICAgICBjdXJyZW50Tm9kZSA9IHNlbGVjdGlvbi5ub2RlOyAvLyB0aGUgc2VsZWN0ZWQgbm9kZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaWRlRGVmYXVsdFRvb2xiYXIgPVxuICAgICAgICBjdHguZWRpdG9yPy5pc0FjdGl2ZSgnbWF0aCcpIHx8XG4gICAgICAgIGN0eC5lZGl0b3I/LmlzQWN0aXZlKCdleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZScpIHx8XG4gICAgICAgIGN0eC5lZGl0b3I/LmlzQWN0aXZlKCdpbWFnZVVwbG9hZE5vZGUnKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudE5vZGUsXG4gICAgICAgIGhpZGVEZWZhdWx0VG9vbGJhcixcbiAgICAgICAgaXNGb2N1c2VkOiBjdHguZWRpdG9yPy5pc0ZvY3VzZWQsXG4gICAgICAgIGlzQm9sZDogY3R4LmVkaXRvci5pc0FjdGl2ZSgnYm9sZCcpID8/IGZhbHNlLFxuICAgICAgICBjYW5Cb2xkOlxuICAgICAgICAgIGN0eC5lZGl0b3JcbiAgICAgICAgICAgIC5jYW4oKVxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC50b2dnbGVCb2xkKClcbiAgICAgICAgICAgIC5ydW4oKSA/PyBmYWxzZSxcbiAgICAgICAgaXNUYWJsZTogY3R4LmVkaXRvci5pc0FjdGl2ZSgndGFibGUnKSA/PyBmYWxzZSxcbiAgICAgICAgdGFibGVIYXNCb3JkZXI6IGN0eC5lZGl0b3IuZ2V0QXR0cmlidXRlcygndGFibGUnKT8uYm9yZGVyID09PSAnMScgPz8gZmFsc2UsXG4gICAgICAgIGNhblRhYmxlOlxuICAgICAgICAgIGN0eC5lZGl0b3JcbiAgICAgICAgICAgIC5jYW4oKVxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5pbnNlcnRUYWJsZSgpXG4gICAgICAgICAgICAucnVuKCkgPz8gZmFsc2UsXG4gICAgICAgIGlzSXRhbGljOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdpdGFsaWMnKSA/PyBmYWxzZSxcbiAgICAgICAgY2FuSXRhbGljOlxuICAgICAgICAgIGN0eC5lZGl0b3JcbiAgICAgICAgICAgIC5jYW4oKVxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC50b2dnbGVJdGFsaWMoKVxuICAgICAgICAgICAgLnJ1bigpID8/IGZhbHNlLFxuICAgICAgICBpc1N0cmlrZTogY3R4LmVkaXRvci5pc0FjdGl2ZSgnc3RyaWtlJykgPz8gZmFsc2UsXG4gICAgICAgIGNhblN0cmlrZTpcbiAgICAgICAgICBjdHguZWRpdG9yXG4gICAgICAgICAgICAuY2FuKClcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAudG9nZ2xlU3RyaWtlKClcbiAgICAgICAgICAgIC5ydW4oKSA/PyBmYWxzZSxcbiAgICAgICAgaXNDb2RlOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdjb2RlJykgPz8gZmFsc2UsXG4gICAgICAgIGNhbkNvZGU6XG4gICAgICAgICAgY3R4LmVkaXRvclxuICAgICAgICAgICAgLmNhbigpXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLnRvZ2dsZUNvZGUoKVxuICAgICAgICAgICAgLnJ1bigpID8/IGZhbHNlLFxuICAgICAgICBjYW5DbGVhck1hcmtzOlxuICAgICAgICAgIGN0eC5lZGl0b3JcbiAgICAgICAgICAgIC5jYW4oKVxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC51bnNldEFsbE1hcmtzKClcbiAgICAgICAgICAgIC5ydW4oKSA/PyBmYWxzZSxcbiAgICAgICAgaXNVbmRlcmxpbmU6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ3VuZGVybGluZScpID8/IGZhbHNlLFxuICAgICAgICBpc1N1YlNjcmlwdDogY3R4LmVkaXRvci5pc0FjdGl2ZSgnc3Vic2NyaXB0JykgPz8gZmFsc2UsXG4gICAgICAgIGlzU3VwZXJTY3JpcHQ6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ3N1cGVyc2NyaXB0JykgPz8gZmFsc2UsXG4gICAgICAgIGlzUGFyYWdyYXBoOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdwYXJhZ3JhcGgnKSA/PyBmYWxzZSxcbiAgICAgICAgaXNIZWFkaW5nMTogY3R4LmVkaXRvci5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWw6IDEgfSkgPz8gZmFsc2UsXG4gICAgICAgIGlzSGVhZGluZzI6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2hlYWRpbmcnLCB7IGxldmVsOiAyIH0pID8/IGZhbHNlLFxuICAgICAgICBpc0hlYWRpbmczOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdoZWFkaW5nJywgeyBsZXZlbDogMyB9KSA/PyBmYWxzZSxcbiAgICAgICAgaXNIZWFkaW5nNDogY3R4LmVkaXRvci5pc0FjdGl2ZSgnaGVhZGluZycsIHsgbGV2ZWw6IDQgfSkgPz8gZmFsc2UsXG4gICAgICAgIGlzSGVhZGluZzU6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ2hlYWRpbmcnLCB7IGxldmVsOiA1IH0pID8/IGZhbHNlLFxuICAgICAgICBpc0hlYWRpbmc2OiBjdHguZWRpdG9yLmlzQWN0aXZlKCdoZWFkaW5nJywgeyBsZXZlbDogNiB9KSA/PyBmYWxzZSxcbiAgICAgICAgaXNCdWxsZXRMaXN0OiBjdHguZWRpdG9yLmlzQWN0aXZlKCdidWxsZXRMaXN0JykgPz8gZmFsc2UsXG4gICAgICAgIGlzT3JkZXJlZExpc3Q6IGN0eC5lZGl0b3IuaXNBY3RpdmUoJ29yZGVyZWRMaXN0JykgPz8gZmFsc2UsXG4gICAgICAgIGlzQ29kZUJsb2NrOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdjb2RlQmxvY2snKSA/PyBmYWxzZSxcbiAgICAgICAgaXNCbG9ja3F1b3RlOiBjdHguZWRpdG9yLmlzQWN0aXZlKCdibG9ja3F1b3RlJykgPz8gZmFsc2UsXG4gICAgICAgIGNhblVuZG86XG4gICAgICAgICAgY3R4LmVkaXRvclxuICAgICAgICAgICAgLmNhbigpXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLnVuZG8oKVxuICAgICAgICAgICAgLnJ1bigpID8/IGZhbHNlLFxuICAgICAgICBjYW5SZWRvOlxuICAgICAgICAgIGN0eC5lZGl0b3JcbiAgICAgICAgICAgIC5jYW4oKVxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5yZWRvKClcbiAgICAgICAgICAgIC5ydW4oKSA/PyBmYWxzZSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGhhc0RvbmVCdXR0b24gPSBmYWxzZTtcbiAgY29uc3QgYXV0b1dpZHRoID0gZmFsc2U7XG5cbiAgY29uc3QgbmFtZXMgPSBjbGFzc05hbWVzKGNsYXNzZXMudG9vbGJhciwgUElFX1RPT0xCQVJfX0NMQVNTLCB7XG4gICAgW2NsYXNzZXMudG9vbGJhcldpdGhOb0RvbmVdOiAhaGFzRG9uZUJ1dHRvbixcbiAgICBbY2xhc3Nlcy50b29sYmFyVG9wXTogdG9vbGJhck9wdHMucG9zaXRpb24gPT09ICd0b3AnLFxuICAgIFtjbGFzc2VzLnRvb2xiYXJSaWdodF06IHRvb2xiYXJPcHRzLmFsaWdubWVudCA9PT0gJ3JpZ2h0JyxcbiAgICBbY2xhc3Nlcy5mb2N1c2VkXTogdG9vbGJhck9wdHMuYWx3YXlzVmlzaWJsZSB8fCAoZWRpdG9yU3RhdGUuaXNGb2N1c2VkICYmICFlZGl0b3IuX3Rvb2xiYXJPcGVuZWQpLFxuICAgIFtjbGFzc2VzLmF1dG9XaWR0aF06IGF1dG9XaWR0aCxcbiAgICBbY2xhc3Nlcy5mdWxsV2lkdGhdOiAhYXV0b1dpZHRoLFxuICAgIFtjbGFzc2VzLmhpZGRlbl06IHRvb2xiYXJPcHRzLmlzSGlkZGVuID09PSB0cnVlLFxuICB9KTtcbiAgY29uc3QgY3VzdG9tU3R5bGVzID0gdG9vbGJhck9wdHMubWluV2lkdGggIT09IHVuZGVmaW5lZCA/IHsgbWluV2lkdGg6IHRvb2xiYXJPcHRzLm1pbldpZHRoIH0gOiB7fTtcbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH07XG4gIGNvbnN0IHRvb2xiYXJCdXR0b25zID0gdXNlTWVtbyhcbiAgICAoKSA9PiBbXG4gICAgICB7XG4gICAgICAgIGljb246IDxHcmlkT24gLz4sXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5pbnNlcnRUYWJsZSh7IHJvd3M6IDIsIGNvbHM6IDIsIHdpdGhIZWFkZXJSb3c6IGZhbHNlIH0pLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIWFjdGl2ZVBsdWdpbnM/LmluY2x1ZGVzKCd0YWJsZScpIHx8IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblRhYmxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEFkZFJvdyAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLmFkZFJvd0FmdGVyKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0FjdGl2ZTogKHN0YXRlKSA9PiBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0Rpc2FibGVkOiAoc3RhdGUpID0+ICFzdGF0ZS5jYW5UYWJsZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxSZW1vdmVSb3cgLz4sXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC5kZWxldGVSb3coKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIXN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblRhYmxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEFkZENvbHVtbiAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLmFkZENvbHVtbkFmdGVyKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+ICFzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0FjdGl2ZTogKHN0YXRlKSA9PiBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0Rpc2FibGVkOiAoc3RhdGUpID0+ICFzdGF0ZS5jYW5UYWJsZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxSZW1vdmVDb2x1bW4gLz4sXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC5kZWxldGVDb2x1bW4oKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIXN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblRhYmxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPFJlbW92ZVRhYmxlIC8+LFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAuZGVsZXRlVGFibGUoKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gIXN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblRhYmxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEJvcmRlckFsbCAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhYmxlQXR0cnMgPSBlZGl0b3IuZ2V0QXR0cmlidXRlcygndGFibGUnKTtcblxuICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICAgIC4uLnRhYmxlQXR0cnMsXG4gICAgICAgICAgICBib3JkZXI6IHRhYmxlQXR0cnMuYm9yZGVyICE9PSAnMCcgPyAnMCcgOiAnMScsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGVkaXRvci5jb21tYW5kcy51cGRhdGVBdHRyaWJ1dGVzKCd0YWJsZScsIHVwZGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiAhc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgaXNBY3RpdmU6IChzdGF0ZSkgPT4gc3RhdGUudGFibGVIYXNCb3JkZXIsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblRhYmxlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEJvbGQgLz4sXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC50b2dnbGVCb2xkKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzQm9sZCxcbiAgICAgICAgaXNEaXNhYmxlZDogKHN0YXRlKSA9PiAhc3RhdGUuY2FuQm9sZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxJdGFsaWMgLz4sXG4gICAgICAgIG9uQ2xpY2s6IChlZGl0b3IpID0+XG4gICAgICAgICAgZWRpdG9yXG4gICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgLmZvY3VzKClcbiAgICAgICAgICAgIC50b2dnbGVJdGFsaWMoKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgaXNBY3RpdmU6IChzdGF0ZSkgPT4gc3RhdGUuaXNJdGFsaWMsXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhbkl0YWxpYyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxTdHJpa2V0aHJvdWdoIC8+LFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudG9nZ2xlU3RyaWtlKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzU3RyaWtlLFxuICAgICAgICBpc0Rpc2FibGVkOiAoc3RhdGUpID0+ICFzdGF0ZS5jYW5TdHJpa2UsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpY29uOiA8Q29kZSAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLnRvZ2dsZUNvZGUoKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgaXNBY3RpdmU6IChzdGF0ZSkgPT4gc3RhdGUuaXNDb2RlLFxuICAgICAgICBpc0Rpc2FibGVkOiAoc3RhdGUpID0+ICFzdGF0ZS5jYW5Db2RlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPFVuZGVybGluZSAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLnRvZ2dsZVVuZGVybGluZSgpXG4gICAgICAgICAgICAucnVuKCksXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBpc0FjdGl2ZTogKHN0YXRlKSA9PiBzdGF0ZS5pc1VuZGVybGluZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxTdWJzY3JpcHRJY29uIC8+LFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudG9nZ2xlU3Vic2NyaXB0KClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzU3ViU2NyaXB0LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPFN1cGVyc2NyaXB0SWNvbiAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLnRvZ2dsZVN1cGVyc2NyaXB0KClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzU3VwZXJTY3JpcHQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpY29uOiA8SW1hZ2VJY29uIC8+LFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAuc2V0SW1hZ2VVcGxvYWROb2RlKClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxUaGVhdGVyc0ljb24gLz4sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAuaW5zZXJ0TWVkaWEoeyB0YWc6ICd2aWRlbycgfSlcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxWb2x1bWVVcEljb24gLz4sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAuaW5zZXJ0TWVkaWEoeyB0YWc6ICdhdWRpbycgfSlcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxDU1NJY29uIC8+LFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT4gZWRpdG9yLmNvbW1hbmRzLm9wZW5DU1NDbGFzc0RpYWxvZygpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEhlYWRpbmdJY29uIC8+LFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMyB9KVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBpc0FjdGl2ZTogKHN0YXRlKSA9PiBzdGF0ZS5pc0hlYWRpbmczLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEZ1bmN0aW9ucyAvPixcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLmluc2VydE1hdGgoJycpXG4gICAgICAgICAgICAucnVuKCksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpY29uOiA8Q2hhcmFjdGVySWNvbiBsZXR0ZXI9XCLDsVwiIC8+LFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgb25DbGljazogKCkgPT4gc2V0U2hvd1BpY2tlcihzcGFuaXNoQ29uZmlnKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxDaGFyYWN0ZXJJY29uIGxldHRlcj1cIuKCrFwiIC8+LFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgb25DbGljazogKCkgPT4gc2V0U2hvd1BpY2tlcihzcGVjaWFsQ29uZmlnKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxUZXh0QWxpZ25JY29uIGVkaXRvcj17ZWRpdG9yfSAvPixcbiAgICAgICAgaGlkZGVuOiAoc3RhdGUpID0+IHN0YXRlLmlzVGFibGUsXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPEJ1bGxldGVkTGlzdEljb24gLz4sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAudG9nZ2xlQnVsbGV0TGlzdCgpXG4gICAgICAgICAgICAucnVuKCksXG4gICAgICAgIGlzQWN0aXZlOiAoc3RhdGUpID0+IHN0YXRlLmlzQnVsbGV0TGlzdCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxOdW1iZXJlZExpc3RJY29uIC8+LFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLnRvZ2dsZU9yZGVyZWRMaXN0KClcbiAgICAgICAgICAgIC5ydW4oKSxcbiAgICAgICAgaXNBY3RpdmU6IChzdGF0ZSkgPT4gc3RhdGUuaXNPcmRlcmVkTGlzdCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGljb246IDxVbmRvIC8+LFxuICAgICAgICBoaWRkZW46IChzdGF0ZSkgPT4gc3RhdGUuaXNUYWJsZSxcbiAgICAgICAgb25DbGljazogKGVkaXRvcikgPT5cbiAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgIC5jaGFpbigpXG4gICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgLnVuZG8oKVxuICAgICAgICAgICAgLnJ1bigpLFxuICAgICAgICBpc0Rpc2FibGVkOiAoc3RhdGUpID0+ICFzdGF0ZS5jYW5VbmRvLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWNvbjogPFJlZG8gLz4sXG4gICAgICAgIGhpZGRlbjogKHN0YXRlKSA9PiBzdGF0ZS5pc1RhYmxlLFxuICAgICAgICBvbkNsaWNrOiAoZWRpdG9yKSA9PlxuICAgICAgICAgIGVkaXRvclxuICAgICAgICAgICAgLmNoYWluKClcbiAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAucmVkbygpXG4gICAgICAgICAgICAucnVuKCksXG4gICAgICAgIGlzRGlzYWJsZWQ6IChzdGF0ZSkgPT4gIXN0YXRlLmNhblJlZG8sXG4gICAgICB9LFxuICAgIF0sXG4gICAgW2FjdGl2ZVBsdWdpbnMsIGVkaXRvciwgc3BhbmlzaENvbmZpZywgc3BlY2lhbENvbmZpZywgc2V0U2hvd1BpY2tlcl0sXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17bmFtZXN9IHN0eWxlPXt7IC4uLmN1c3RvbVN0eWxlcyB9fSBvbk1vdXNlRG93bj17aGFuZGxlTW91c2VEb3dufT5cbiAgICAgIHshZWRpdG9yU3RhdGUuaGlkZURlZmF1bHRUb29sYmFyICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuZGVmYXVsdFRvb2xiYXJ9IHRhYkluZGV4PVwiMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgICAge3Rvb2xiYXJCdXR0b25zXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGJ0bikgPT4gIWJ0bi5oaWRkZW4/LihlZGl0b3JTdGF0ZSkpXG4gICAgICAgICAgICAgIC5tYXAoKGJ0biwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNhYmxlZCA9IGJ0bi5pc0Rpc2FibGVkPy4oZWRpdG9yU3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGJ0bi5pc0FjdGl2ZT8uKGVkaXRvclN0YXRlKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgYnRuLm9uQ2xpY2soZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKGNsYXNzZXMuYnV0dG9uLCB7IFtjbGFzc2VzLmFjdGl2ZV06IGFjdGl2ZSB9KX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2J0bi5pY29ufVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICBlZGl0b3JcbiAgICAgICAgICAgICAgICAuY2hhaW4oKVxuICAgICAgICAgICAgICAgIC5mb2N1cygpXG4gICAgICAgICAgICAgICAgLmluc2VydFJlc3BvbnNlQXJlYShyZXNwb25zZUFyZWFQcm9wcy50eXBlKVxuICAgICAgICAgICAgICAgIC5ydW4oKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMuYnV0dG9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUb29sYmFySWNvbiAvPlxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPERvbmVCdXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgb25DaGFuZ2U/LihlZGl0b3IuZ2V0SFRNTCgpKTtcbiAgICAgICAgICAgICAgZWRpdG9yLmNvbW1hbmRzLmJsdXIoKTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAge3Nob3dQaWNrZXIgJiYgKFxuICAgICAgICA8Q2hhcmFjdGVyUGlja2VyXG4gICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgb3B0cz17e1xuICAgICAgICAgICAgLi4uc2hvd1BpY2tlcixcbiAgICAgICAgICAgIHJlbmRlclBvcE92ZXI6IChldiwgY2gpID0+IGNvbnNvbGUubG9nKCdTaG93IHBvcG92ZXInLCBjaCksXG4gICAgICAgICAgICBjbG9zZVBvcE92ZXI6ICgpID0+IGNvbnNvbGUubG9nKCdDbG9zZSBwb3BvdmVyJyksXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UGlja2VyKGZhbHNlKX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmNvbnN0IHN0eWxlID0gKHRoZW1lKSA9PiAoe1xuICBkZWZhdWx0VG9vbGJhcjoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gIH0sXG4gIGJ1dHRvbnNDb250YWluZXI6IHtcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgY29sb3I6ICdncmV5JyxcbiAgICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICAgIHBhZGRpbmc6ICcycHgnLFxuICAgIGJhY2tncm91bmQ6ICdub25lJyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIGNvbG9yOiAnYmxhY2snLFxuICAgIH0sXG4gICAgJyY6Zm9jdXMnOiB7XG4gICAgICBvdXRsaW5lOiBgMnB4IHNvbGlkICR7dGhlbWUucGFsZXR0ZS5ncmV5WzcwMF19YCxcbiAgICB9LFxuICB9LFxuICBhY3RpdmU6IHtcbiAgICBjb2xvcjogJ2JsYWNrJyxcbiAgfSxcbiAgZGlzYWJsZWQ6IHtcbiAgICBvcGFjaXR5OiAwLjcsXG4gICAgY3Vyc29yOiAnbm90LWFsbG93ZWQnLFxuICAgICcmIDpob3Zlcic6IHtcbiAgICAgIGNvbG9yOiAnZ3JleScsXG4gICAgfSxcbiAgfSxcbiAgaXNBY3RpdmU6IHtcbiAgICBiYWNrZ3JvdW5kOiAndmFyKC0tcHVycGxlKScsXG4gICAgY29sb3I6ICd2YXIoLS13aGl0ZSknLFxuICB9LFxuICB0b29sYmFyOiB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgekluZGV4OiAyMCxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGJhY2tncm91bmQ6ICd2YXIoLS1lZGl0YWJsZS1odG1sLXRvb2xiYXItYmcsICNlZmVmZWYpJyxcbiAgICBtaW5XaWR0aDogJzI4MHB4JyxcbiAgICBtYXJnaW46ICc1cHggMCAwIDAnLFxuICAgIHBhZGRpbmc6ICcycHgnLFxuICAgIGJveFNoYWRvdzpcbiAgICAgICcwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLCAwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwgMHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMTIpJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgb3BhY2l0eTogMCxcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIH0sXG4gIHRvb2xiYXJXaXRoTm9Eb25lOiB7XG4gICAgbWluV2lkdGg6ICcyNjVweCcsXG4gIH0sXG4gIHRvb2xiYXJUb3A6IHtcbiAgICB0b3A6ICctNDVweCcsXG4gIH0sXG4gIHRvb2xiYXJSaWdodDoge1xuICAgIHJpZ2h0OiAwLFxuICB9LFxuICBmdWxsV2lkdGg6IHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICB9LFxuICBoaWRkZW46IHtcbiAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgfSxcbiAgYXV0b1dpZHRoOiB7XG4gICAgd2lkdGg6ICdhdXRvJyxcbiAgfSxcbiAgZm9jdXNlZDoge1xuICAgIG9wYWNpdHk6IDEsXG4gICAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICB9LFxuICBpY29uUm9vdDoge1xuICAgIHdpZHRoOiAnMjhweCcsXG4gICAgaGVpZ2h0OiAnMjhweCcsXG4gICAgcGFkZGluZzogJzRweCcsXG4gICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gIH0sXG4gIGxhYmVsOiB7XG4gICAgY29sb3I6ICd2YXIoLS1lZGl0YWJsZS1odG1sLXRvb2xiYXItY2hlY2ssICMwMGJiMDApJyxcbiAgfSxcbiAgc2hhcmVkOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICB9LFxufSk7XG5jb25zdCBTdHlsZWRNZW51QmFyID0gd2l0aFN0eWxlcyhzdHlsZSwgeyBpbmRleDogMTAwMCB9KShNZW51QmFyKTtcblxuY29uc3QgZGVmYXVsdFRvb2xiYXJPcHRzID0ge1xuICBwb3NpdGlvbjogJ2JvdHRvbScsXG4gIGFsaWdubWVudDogJ2xlZnQnLFxuICBhbHdheXNWaXNpYmxlOiBmYWxzZSxcbiAgc2hvd0RvbmU6IHRydWUsXG4gIGRvbmVPbjogJ2JsdXInLFxufTtcblxuZXhwb3J0IGNvbnN0IEVkaXRhYmxlSHRtbCA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbcGVuZGluZ0ltYWdlcywgc2V0UGVuZGluZ0ltYWdlc10gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtzY2hlZHVsZWQsIHNldFNjaGVkdWxlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgY2xhc3NlcywgdG9vbGJhck9wdHMgfSA9IHByb3BzO1xuICBjb25zdCB0b29sYmFyT3B0c1RvVXNlID0ge1xuICAgIC4uLmRlZmF1bHRUb29sYmFyT3B0cyxcbiAgICAuLi50b29sYmFyT3B0cyxcbiAgfTtcbiAgY29uc3QgYWN0aXZlUGx1Z2luc1RvVXNlID0gcHJvcHMuYWN0aXZlUGx1Z2lucyB8fCBERUZBVUxUX1BMVUdJTlM7XG4gIGNvbnN0IGV4dGVuc2lvbnMgPSBbXG4gICAgVGV4dFN0eWxlS2l0LFxuICAgIFN0YXJ0ZXJLaXQsXG4gICAgRXh0ZW5kZWRUYWJsZSxcbiAgICBUYWJsZVJvdyxcbiAgICBUYWJsZUhlYWRlcixcbiAgICBUYWJsZUNlbGwsXG4gICAgUmVzcG9uc2VBcmVhRXh0ZW5zaW9uLFxuICAgIEV4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZU5vZGUuY29uZmlndXJlKHByb3BzLnJlc3BvbnNlQXJlYVByb3BzKSxcbiAgICBEcmFnSW5UaGVCbGFua05vZGUuY29uZmlndXJlKHByb3BzLnJlc3BvbnNlQXJlYVByb3BzKSxcbiAgICBJbmxpbmVEcm9wZG93bk5vZGUuY29uZmlndXJlKHByb3BzLnJlc3BvbnNlQXJlYVByb3BzKSxcbiAgICBNYXRoTm9kZS5jb25maWd1cmUoe1xuICAgICAgdG9vbGJhck9wdHM6IHRvb2xiYXJPcHRzVG9Vc2UsXG4gICAgfSksXG4gICAgU3ViU2NyaXB0LFxuICAgIFN1cGVyU2NyaXB0LFxuICAgIFRleHRBbGlnbi5jb25maWd1cmUoe1xuICAgICAgdHlwZXM6IFsnaGVhZGluZycsICdwYXJhZ3JhcGgnXSxcbiAgICAgIGFsaWdubWVudHM6IFsnbGVmdCcsICdyaWdodCcsICdjZW50ZXInXSxcbiAgICB9KSxcbiAgICBJbWFnZSxcbiAgICBJbWFnZVVwbG9hZE5vZGUuY29uZmlndXJlKHtcbiAgICAgIHRvb2xiYXJPcHRzOiB0b29sYmFyT3B0c1RvVXNlLFxuICAgICAgaW1hZ2VIYW5kbGluZzoge1xuICAgICAgICBkaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zOiBwcm9wcy5kaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zLFxuICAgICAgICBvbkRvbmU6ICgpID0+IHByb3BzLm9uRG9uZT8uKGVkaXRvci5nZXRIVE1MKCkpLFxuICAgICAgICBvbkRlbGV0ZTpcbiAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQgJiZcbiAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQuZGVsZXRlICYmXG4gICAgICAgICAgKChub2RlLCBkb25lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNyYyB9ID0gbm9kZS5hdHRycztcblxuICAgICAgICAgICAgcHJvcHMuaW1hZ2VTdXBwb3J0LmRlbGV0ZShzcmMsIChlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld1BlbmRpbmdJbWFnZXMgPSBwZW5kaW5nSW1hZ2VzLmZpbHRlcigoaW1nKSA9PiBpbWcua2V5ICE9PSBub2RlLmtleSk7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICAgICAgICAgIHBlbmRpbmdJbWFnZXM6IG5ld1BlbmRpbmdJbWFnZXMsXG4gICAgICAgICAgICAgICAgc2NoZWR1bGVkOiBzY2hlZHVsZWQgJiYgbmV3UGVuZGluZ0ltYWdlcy5sZW5ndGggPT09IDAgPyBmYWxzZSA6IHNjaGVkdWxlZCxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBzZXRQZW5kaW5nSW1hZ2VzKG5ld1N0YXRlLnBlbmRpbmdJbWFnZXMpO1xuICAgICAgICAgICAgICBzZXRTY2hlZHVsZWQobmV3U3RhdGUuc2NoZWR1bGVkKTtcbiAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIGluc2VydEltYWdlUmVxdWVzdGVkOlxuICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydCAmJlxuICAgICAgICAgICgoYWRkZWRJbWFnZSwgZ2V0SGFuZGxlcikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb25GaW5pc2ggPSAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBjYjtcblxuICAgICAgICAgICAgICBpZiAoc2NoZWR1bGVkICYmIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIC8vIGZpbmlzaCBlZGl0aW5nIG9ubHkgb24gc3VjY2Vzc1xuICAgICAgICAgICAgICAgIGNiID0gcHJvcHMub25DaGFuZ2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBuZXdQZW5kaW5nSW1hZ2VzID0gcGVuZGluZ0ltYWdlcy5maWx0ZXIoKGltZykgPT4gaW1nLmtleSAhPT0gYWRkZWRJbWFnZS5rZXkpO1xuICAgICAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nSW1hZ2VzOiBuZXdQZW5kaW5nSW1hZ2VzLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGlmIChuZXdQZW5kaW5nSW1hZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIG5ld1N0YXRlLnNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc2V0UGVuZGluZ0ltYWdlcyhuZXdTdGF0ZS5wZW5kaW5nSW1hZ2VzKTtcbiAgICAgICAgICAgICAgc2V0U2NoZWR1bGVkKG5ld1N0YXRlLnNjaGVkdWxlZCk7XG4gICAgICAgICAgICAgIGNiPy4oZWRpdG9yLmdldEhUTUwoKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgKiBUaGUgaGFuZGxlciBpcyB0aGUgb2JqZWN0IHRocm91Z2ggd2hpY2ggdGhlIG91dGVyIGNvbnRleHRcbiAgICAgICAgICAgICAgICogY29tbXVuaWNhdGVzIGZpbGUgdXBsb2FkIGV2ZW50cyBsaWtlOiBmaWxlQ2hvc2VuLCBjYW5jZWwsIHByb2dyZXNzXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gZ2V0SGFuZGxlcihvbkZpbmlzaCk7XG4gICAgICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydC5hZGQoaGFuZGxlcik7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBzZXRQZW5kaW5nSW1hZ2VzKFsuLi5wZW5kaW5nSW1hZ2VzLCBhZGRlZEltYWdlXSk7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgIH0pLFxuICAgICAgICBtYXhJbWFnZVdpZHRoOiBwcm9wcy5tYXhJbWFnZVdpZHRoLFxuICAgICAgICBtYXhJbWFnZUhlaWdodDogcHJvcHMubWF4SW1hZ2VIZWlnaHQsXG4gICAgICB9LFxuICAgICAgbGltaXQ6IDMsXG4gICAgfSksXG4gICAgTWVkaWEuY29uZmlndXJlKHtcbiAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydDogcHJvcHMudXBsb2FkU291bmRTdXBwb3J0LFxuICAgIH0pLFxuICAgIENTU01hcmsuY29uZmlndXJlKHtcbiAgICAgIGV4dHJhQ1NTUnVsZXM6IHByb3BzLmV4dHJhQ1NTUnVsZXMsXG4gICAgfSksXG4gIF07XG4gIGNvbnN0IGVkaXRvciA9IHVzZUVkaXRvcih7XG4gICAgZXh0ZW5zaW9ucyxcbiAgICBpbW1lZGlhdGVseVJlbmRlcjogZmFsc2UsXG4gICAgY29udGVudDogcHJvcHMubWFya3VwLFxuICAgIG9uVXBkYXRlOiAoeyBlZGl0b3IsIHRyYW5zYWN0aW9uIH0pID0+IHRyYW5zYWN0aW9uLmlzRG9uZSAmJiBwcm9wcy5vbkNoYW5nZT8uKGVkaXRvci5nZXRIVE1MKCkpLFxuICAgIG9uQmx1cjogKHsgZWRpdG9yIH0pID0+IHtcbiAgICAgIGlmICh0b29sYmFyT3B0c1RvVXNlLmRvbmVPbiA9PT0gJ2JsdXInKSB7XG4gICAgICAgIHByb3BzLm9uQ2hhbmdlPy4oZWRpdG9yLmdldEhUTUwoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wcy5vbkRvbmU/LihlZGl0b3IuZ2V0SFRNTCgpKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLm1hcmt1cCAhPT0gZWRpdG9yLmdldEhUTUwoKSkge1xuICAgICAgZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQocHJvcHMubWFya3VwLCBmYWxzZSk7IC8vIGZhbHNlID0gZG9u4oCZdCBlbWl0IHVwZGF0ZVxuICAgIH1cbiAgfSwgW3Byb3BzLm1hcmt1cCwgZWRpdG9yXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBEZWZpbmUgeW91ciB2YXJpYWJsZXMgaW4gYSBKUyBvYmplY3RcbiAgICBjb25zdCBjc3NWYXJpYWJsZXMgPSB7XG4gICAgICAnLS13aGl0ZSc6ICcjZmZmJyxcbiAgICAgICctLWJsYWNrJzogJyMyZTJiMjknLFxuICAgICAgJy0tYmxhY2stY29udHJhc3QnOiAnIzExMGYwZScsXG4gICAgICAnLS1ncmF5LTEnOiAncmdiYSg2MSwgMzcsIDIwLCAuMDUpJyxcbiAgICAgICctLWdyYXktMic6ICdyZ2JhKDYxLCAzNywgMjAsIC4wOCknLFxuICAgICAgJy0tZ3JheS0zJzogJ3JnYmEoNjEsIDM3LCAyMCwgLjEyKScsXG4gICAgICAnLS1ncmF5LTQnOiAncmdiYSg1MywgMzgsIDI4LCAuMyknLFxuICAgICAgJy0tZ3JheS01JzogJ3JnYmEoMjgsIDI1LCAyMywgLjYpJyxcbiAgICAgICctLWdyZWVuJzogJyMyMmM1NWUnLFxuICAgICAgJy0tcHVycGxlJzogJyM2YTAwZjUnLFxuICAgICAgJy0tcHVycGxlLWNvbnRyYXN0JzogJyM1ODAwY2MnLFxuICAgICAgJy0tcHVycGxlLWxpZ2h0JzogJ3JnYmEoODgsIDUsIDI1NSwgLjA1KScsXG4gICAgICAnLS15ZWxsb3ctY29udHJhc3QnOiAnI2ZhY2MxNScsXG4gICAgICAnLS15ZWxsb3cnOiAncmdiYSgyNTAsIDIwNCwgMjEsIC40KScsXG4gICAgICAnLS15ZWxsb3ctbGlnaHQnOiAnI2ZmZmFlNScsXG4gICAgICAnLS1yZWQnOiAnI2ZmNWMzMycsXG4gICAgICAnLS1yZWQtbGlnaHQnOiAnI2ZmZWJlNScsXG4gICAgICAnLS1zaGFkb3cnOiBgMHB4IDEycHggMzNweCAwcHggcmdiYSgwLCAwLCAwLCAuMDYpLFxuICAgICAgICAgICAgICAgMHB4IDMuNjE4cHggOS45NDlweCAwcHggcmdiYSgwLCAwLCAwLCAuMDQpYCxcbiAgICB9O1xuXG4gICAgT2JqZWN0LmVudHJpZXMoY3NzVmFyaWFibGVzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgICB9KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGVkaXRvclN0YXRlID0gdXNlRWRpdG9yU3RhdGUoe1xuICAgIGVkaXRvcixcbiAgICBzZWxlY3RvcjogKGN0eCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNGb2N1c2VkOiBjdHguZWRpdG9yPy5pc0ZvY3VzZWQsXG4gICAgICB9O1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHZhbHVlVG9TaXplID0gKHYpID0+IHtcbiAgICBpZiAoIXYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2FsY1JlZ2V4ID0gL15jYWxjXFwoKC4qKVxcKSQvO1xuXG4gICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHYuZW5kc1dpdGgoJyUnKSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdi5lbmRzV2l0aCgncHgnKSB8fFxuICAgICAgICB2LmVuZHNXaXRoKCd2aCcpIHx8XG4gICAgICAgIHYuZW5kc1dpdGgoJ3Z3JykgfHxcbiAgICAgICAgdi5lbmRzV2l0aCgnY2gnKSB8fFxuICAgICAgICB2LmVuZHNXaXRoKCdlbScpIHx8XG4gICAgICAgIHYubWF0Y2goY2FsY1JlZ2V4KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh2LCAxMCk7XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSkgPyB2YWx1ZSA6IGAke3ZhbHVlfXB4YDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGAke3Z9cHhgO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBzaXplU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB7IG1pbldpZHRoLCB3aWR0aCwgbWF4V2lkdGgsIG1pbkhlaWdodCwgaGVpZ2h0LCBtYXhIZWlnaHQgfSA9IHByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB2YWx1ZVRvU2l6ZSh3aWR0aCksXG4gICAgICBtaW5XaWR0aDogdmFsdWVUb1NpemUobWluV2lkdGgpLFxuICAgICAgbWF4V2lkdGg6IHZhbHVlVG9TaXplKG1heFdpZHRoKSxcbiAgICAgIGhlaWdodDogdmFsdWVUb1NpemUoaGVpZ2h0KSxcbiAgICAgIG1pbkhlaWdodDogdmFsdWVUb1NpemUobWluSGVpZ2h0KSxcbiAgICAgIG1heEhlaWdodDogdmFsdWVUb1NpemUobWF4SGVpZ2h0KSxcbiAgICB9O1xuICB9LCBbcHJvcHNdKTtcblxuICByZXR1cm4gKFxuICAgIDxFZGl0b3JDb250YWluZXIgey4uLnsgLi4ucHJvcHMsIGFjdGl2ZVBsdWdpbnM6IGFjdGl2ZVBsdWdpbnNUb1VzZSwgdG9vbGJhck9wdHM6IHRvb2xiYXJPcHRzVG9Vc2UgfX0gZWRpdG9yU3RhdGU9e2VkaXRvclN0YXRlfSBlZGl0b3I9e2VkaXRvcn0+XG4gICAgICB7ZWRpdG9yICYmIChcbiAgICAgICAgPEVkaXRvckNvbnRlbnRcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgbWluSGVpZ2h0OiBzaXplU3R5bGUubWluSGVpZ2h0LFxuICAgICAgICAgICAgaGVpZ2h0OiBzaXplU3R5bGUuaGVpZ2h0LFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBzaXplU3R5bGUubWF4SGVpZ2h0LFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLnJvb3R9XG4gICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvRWRpdG9yQ29udGFpbmVyPlxuICApO1xufTtcblxuY29uc3QgU3R5bGVkRWRpdG9yID0gd2l0aFN0eWxlcyh7XG4gIHJvb3Q6IHtcbiAgICBvdXRsaW5lOiAnbm9uZSAhaW1wb3J0YW50JyxcbiAgICAnJiAuUHJvc2VNaXJyb3InOiB7XG4gICAgICBvdXRsaW5lOiAnbm9uZSAhaW1wb3J0YW50JyxcbiAgICAgIHBvc2l0aW9uOiAnaW5pdGlhbCcsXG4gICAgfSxcbiAgfSxcbn0pKEVkaXRhYmxlSHRtbCk7XG5cbmV4cG9ydCBkZWZhdWx0IFN0eWxlZEVkaXRvcjtcbiJdfQ==
32
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qc3giXSwibmFtZXMiOlsiU3R5bGVkRWRpdG9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7Ozs7O2VBR2VBLHdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN0eWxlZEVkaXRvciwgeyBFZGl0YWJsZUh0bWwgfSBmcm9tICcuL2NvbXBvbmVudHMvRWRpdGFibGVIdG1sJztcbmltcG9ydCB7IEFMTF9QTFVHSU5TIH0gZnJvbSAnLi9leHRlbnNpb25zJztcblxuZXhwb3J0IHsgRWRpdGFibGVIdG1sLCBBTExfUExVR0lOUyB9O1xuZXhwb3J0IGRlZmF1bHQgU3R5bGVkRWRpdG9yO1xuIl19