easy-richtextarea 3.0.146 → 3.0.148
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.
- package/example.js +60 -47
- package/lib/example/richTextarea.js +2 -2
- package/lib/example/view.js +11 -8
- package/lib/richTextarea.js +47 -39
- package/package.json +1 -1
- package/src/example/richTextarea.js +6 -0
- package/src/example/view.js +16 -6
- package/src/richTextarea.js +62 -47
|
@@ -27,7 +27,7 @@ function _taggedTemplateLiteral(strings, raw) {
|
|
|
27
27
|
}
|
|
28
28
|
function _templateObject() {
|
|
29
29
|
var data = _taggedTemplateLiteral([
|
|
30
|
-
"\n\n border: 1px solid black;\n width: 32rem;\n height: 32rem;\n padding: 0.25rem;\n font-size: 1.2rem;\n font-family: monospace;\n\n"
|
|
30
|
+
"\n\n border: 1px solid black;\n width: 32rem;\n height: 32rem;\n padding: 0.25rem;\n font-size: 1.2rem;\n font-family: monospace;\n \n display: none;\n \n .active {\n display: block;\n }\n\n"
|
|
31
31
|
]);
|
|
32
32
|
_templateObject = function _templateObject() {
|
|
33
33
|
return data;
|
|
@@ -36,4 +36,4 @@ function _templateObject() {
|
|
|
36
36
|
}
|
|
37
37
|
var _default = (0, _easyWithStyle.default)(_browser.RichTextarea)(_templateObject());
|
|
38
38
|
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3JpY2hUZXh0YXJlYS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHdpdGhTdHlsZSBmcm9tIFwiZWFzeS13aXRoLXN0eWxlXCI7XG5cbmltcG9ydCB7IFJpY2hUZXh0YXJlYSB9IGZyb20gXCIuLi9icm93c2VyXCI7ICAvLy9cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlKFJpY2hUZXh0YXJlYSlgXG5cbiAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XG4gIHdpZHRoOiAzMnJlbTtcbiAgaGVpZ2h0OiAzMnJlbTtcbiAgcGFkZGluZzogMC4yNXJlbTtcbiAgZm9udC1zaXplOiAxLjJyZW07XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gIFxuICBkaXNwbGF5OiBub25lO1xuICBcbiAgLmFjdGl2ZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cblxuYDtcbiJdLCJuYW1lcyI6WyJ3aXRoU3R5bGUiLCJSaWNoVGV4dGFyZWEiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU1BOzs7ZUFBQTs7O2tFQUpzQjt1QkFFTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUU3QixXQUFlQSxJQUFBQSxzQkFBUyxFQUFDQyxxQkFBWSJ9
|
package/lib/example/view.js
CHANGED
|
@@ -14,16 +14,19 @@ function _interopRequireDefault(obj) {
|
|
|
14
14
|
default: obj
|
|
15
15
|
};
|
|
16
16
|
}
|
|
17
|
+
var content = "Rule (blah)\n Conclusion\n A", readOnly = true, richTextarea = /*#__PURE__*/ React.createElement(_richTextarea.default, {
|
|
18
|
+
onChange: changeHandler,
|
|
19
|
+
onScroll: scrollHandler,
|
|
20
|
+
onFocus: focusHandler,
|
|
21
|
+
onBlur: blurHandler
|
|
22
|
+
});
|
|
23
|
+
richTextarea.setContent(content);
|
|
24
|
+
richTextarea.setReadOnly(readOnly);
|
|
25
|
+
richTextarea.activate();
|
|
17
26
|
var View = function(properties) {
|
|
18
27
|
return /*#__PURE__*/ React.createElement("div", {
|
|
19
28
|
className: "view"
|
|
20
|
-
},
|
|
21
|
-
onChange: changeHandler,
|
|
22
|
-
onScroll: scrollHandler,
|
|
23
|
-
onFocus: focusHandler,
|
|
24
|
-
onBlur: blurHandler,
|
|
25
|
-
active: true
|
|
26
|
-
}));
|
|
29
|
+
}, richTextarea);
|
|
27
30
|
};
|
|
28
31
|
var _default = View;
|
|
29
32
|
function changeHandler(event, element) {
|
|
@@ -41,4 +44,4 @@ function blurHandler(event, element) {
|
|
|
41
44
|
console.log("blur");
|
|
42
45
|
}
|
|
43
46
|
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSaWNoVGV4dGFyZWEgZnJvbSBcIi4vcmljaFRleHRhcmVhXCI7XG5cbmNvbnN0IGNvbnRlbnQgPSBgUnVsZSAoYmxhaClcbiAgQ29uY2x1c2lvblxuICAgIEFgLFxuICAgICAgcmVhZE9ubHkgPSB0cnVlLFxuICAgICAgcmljaFRleHRhcmVhID1cblxuICAgICAgICA8UmljaFRleHRhcmVhIG9uQ2hhbmdlPXtjaGFuZ2VIYW5kbGVyfSBvblNjcm9sbD17c2Nyb2xsSGFuZGxlcn0gb25Gb2N1cz17Zm9jdXNIYW5kbGVyfSBvbkJsdXI9e2JsdXJIYW5kbGVyfSAvPlxuXG4gICAgICA7XG5cbnJpY2hUZXh0YXJlYS5zZXRDb250ZW50KGNvbnRlbnQpO1xucmljaFRleHRhcmVhLnNldFJlYWRPbmx5KHJlYWRPbmx5KTtcblxucmljaFRleHRhcmVhLmFjdGl2YXRlKCk7XG5cbmNvbnN0IFZpZXcgPSAocHJvcGVydGllcykgPT5cblxuICA8ZGl2IGNsYXNzTmFtZT1cInZpZXdcIj5cbiAgICB7cmljaFRleHRhcmVhfVxuICA8L2Rpdj5cblxuO1xuXG5leHBvcnQgZGVmYXVsdCBWaWV3O1xuXG5mdW5jdGlvbiBjaGFuZ2VIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IGNvbnRlbnRDaGFuZ2VkID0gZWxlbWVudC5oYXNDb250ZW50Q2hhbmdlZCgpLFxuICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gZWxlbWVudC5oYXNTZWxlY3Rpb25DaGFuZ2VkKCk7XG5cbiAgY29uc29sZS5sb2coY29udGVudENoYW5nZWQsIHNlbGVjdGlvbkNoYW5nZWQpXG59XG5cbmZ1bmN0aW9uIHNjcm9sbEhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3Qgc2Nyb2xsVG9wID0gZWxlbWVudC5nZXRTY3JvbGxUb3AoKSxcbiAgICAgICAgc2Nyb2xsTGVmdCA9IGVsZW1lbnQuZ2V0U2Nyb2xsTGVmdCgpO1xuXG4gIGNvbnNvbGUubG9nKHNjcm9sbFRvcCwgc2Nyb2xsTGVmdClcbn1cblxuZnVuY3Rpb24gZm9jdXNIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnNvbGUubG9nKFwiZm9jdXNcIilcbn1cblxuZnVuY3Rpb24gYmx1ckhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc29sZS5sb2coXCJibHVyXCIpXG59XG4iXSwibmFtZXMiOlsiY29udGVudCIsInJlYWRPbmx5IiwicmljaFRleHRhcmVhIiwiUmljaFRleHRhcmVhIiwib25DaGFuZ2UiLCJjaGFuZ2VIYW5kbGVyIiwib25TY3JvbGwiLCJzY3JvbGxIYW5kbGVyIiwib25Gb2N1cyIsImZvY3VzSGFuZGxlciIsIm9uQmx1ciIsImJsdXJIYW5kbGVyIiwic2V0Q29udGVudCIsInNldFJlYWRPbmx5IiwiYWN0aXZhdGUiLCJWaWV3IiwicHJvcGVydGllcyIsImRpdiIsImNsYXNzTmFtZSIsImV2ZW50IiwiZWxlbWVudCIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJzZWxlY3Rpb25DaGFuZ2VkIiwiaGFzU2VsZWN0aW9uQ2hhbmdlZCIsImNvbnNvbGUiLCJsb2ciLCJzY3JvbGxUb3AiLCJnZXRTY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZ2V0U2Nyb2xsTGVmdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBMkJBOzs7ZUFBQTs7O2lFQXpCeUI7Ozs7OztBQUV6QixJQUFNQSxVQUFXLG9DQUdYQyxXQUFXLElBQUksRUFDZkMsNkJBRUUsb0JBQUNDLHFCQUFZO0lBQUNDLFVBQVVDO0lBQWVDLFVBQVVDO0lBQWVDLFNBQVNDO0lBQWNDLFFBQVFDOztBQUl2R1QsYUFBYVUsVUFBVSxDQUFDWjtBQUN4QkUsYUFBYVcsV0FBVyxDQUFDWjtBQUV6QkMsYUFBYVksUUFBUTtBQUVyQixJQUFNQyxPQUFPLFNBQUNDO3lCQUVaLG9CQUFDQztRQUFJQyxXQUFVO09BQ1poQjs7SUFLTCxXQUFlYTtBQUVmLFNBQVNWLGNBQWNjLEtBQUssRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQU1DLGlCQUFpQkQsUUFBUUUsaUJBQWlCLElBQzFDQyxtQkFBbUJILFFBQVFJLG1CQUFtQjtJQUVwREMsUUFBUUMsR0FBRyxDQUFDTCxnQkFBZ0JFO0FBQzlCO0FBRUEsU0FBU2hCLGNBQWNZLEtBQUssRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQU1PLFlBQVlQLFFBQVFRLFlBQVksSUFDaENDLGFBQWFULFFBQVFVLGFBQWE7SUFFeENMLFFBQVFDLEdBQUcsQ0FBQ0MsV0FBV0U7QUFDekI7QUFFQSxTQUFTcEIsYUFBYVUsS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDcENLLFFBQVFDLEdBQUcsQ0FBQztBQUNkO0FBRUEsU0FBU2YsWUFBWVEsS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDbkNLLFFBQVFDLEdBQUcsQ0FBQztBQUNkIn0=
|
package/lib/richTextarea.js
CHANGED
|
@@ -207,18 +207,19 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
207
207
|
var _this;
|
|
208
208
|
_this = _super.apply(this, arguments);
|
|
209
209
|
_defineProperty(_assertThisInitialized(_this), "intermediateHandler", function(event, element, eventType, forced) {
|
|
210
|
+
var readOnly = _this.isReadOnly();
|
|
211
|
+
if (readOnly) {
|
|
212
|
+
var previousContent = _this.getPreviousContent(), content = previousContent; ///
|
|
213
|
+
_this.setContent(content);
|
|
214
|
+
}
|
|
210
215
|
var changed = _this.hasChanged();
|
|
211
216
|
if (changed || forced) {
|
|
212
217
|
_this.callHandlers(eventType, event, element);
|
|
213
218
|
}
|
|
214
|
-
var
|
|
215
|
-
_this.setPreviousContent(
|
|
219
|
+
var content1 = _this.getContent(), selection = _this.getSelection(), previousContent1 = content1, previousSelection = selection; ///
|
|
220
|
+
_this.setPreviousContent(previousContent1);
|
|
216
221
|
_this.setPreviousSelection(previousSelection);
|
|
217
222
|
});
|
|
218
|
-
_defineProperty(_assertThisInitialized(_this), "mouseUpHandler", function(event, element) {
|
|
219
|
-
var mouseDown = false;
|
|
220
|
-
_this.setMouseDown(mouseDown);
|
|
221
|
-
});
|
|
222
223
|
_defineProperty(_assertThisInitialized(_this), "mouseDownHandler", function(event, element) {
|
|
223
224
|
var forced = false, mouseDown = true, eventType = CHANGE_EVENT_TYPE;
|
|
224
225
|
_this.setMouseDown(mouseDown);
|
|
@@ -232,6 +233,10 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
232
233
|
_this.intermediateHandler(event, element, eventTYpe, forced);
|
|
233
234
|
}
|
|
234
235
|
});
|
|
236
|
+
_defineProperty(_assertThisInitialized(_this), "mouseUpHandler", function(event, element) {
|
|
237
|
+
var mouseDown = false;
|
|
238
|
+
_this.setMouseDown(mouseDown);
|
|
239
|
+
});
|
|
235
240
|
_defineProperty(_assertThisInitialized(_this), "keyDownHandler", function(event, element) {
|
|
236
241
|
var forced = false, eventType = CHANGE_EVENT_TYPE;
|
|
237
242
|
defer(function() {
|
|
@@ -266,13 +271,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
266
271
|
return active;
|
|
267
272
|
}
|
|
268
273
|
},
|
|
269
|
-
{
|
|
270
|
-
key: "isReadOnly",
|
|
271
|
-
value: function isReadOnly() {
|
|
272
|
-
var domElement = this.getDOMElement(), readOnly = domElement.readOnly;
|
|
273
|
-
return readOnly;
|
|
274
|
-
}
|
|
275
|
-
},
|
|
276
274
|
{
|
|
277
275
|
key: "getContent",
|
|
278
276
|
value: function getContent() {
|
|
@@ -287,15 +285,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
287
285
|
return selection;
|
|
288
286
|
}
|
|
289
287
|
},
|
|
290
|
-
{
|
|
291
|
-
key: "setReadOnly",
|
|
292
|
-
value: function setReadOnly(readOnly) {
|
|
293
|
-
var domElement = this.getDOMElement();
|
|
294
|
-
Object.assign(domElement, {
|
|
295
|
-
readOnly: readOnly
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
},
|
|
299
288
|
{
|
|
300
289
|
key: "setContent",
|
|
301
290
|
value: function setContent(content) {
|
|
@@ -317,13 +306,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
317
306
|
this.setPreviousSelection(previousSelection);
|
|
318
307
|
}
|
|
319
308
|
},
|
|
320
|
-
{
|
|
321
|
-
key: "isMouseDown",
|
|
322
|
-
value: function isMouseDown() {
|
|
323
|
-
var state = this.getState(), mouseDown = state.mouseDown;
|
|
324
|
-
return mouseDown;
|
|
325
|
-
}
|
|
326
|
-
},
|
|
327
309
|
{
|
|
328
310
|
key: "hasChanged",
|
|
329
311
|
value: function hasChanged() {
|
|
@@ -454,20 +436,42 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
454
436
|
});
|
|
455
437
|
}
|
|
456
438
|
},
|
|
439
|
+
{
|
|
440
|
+
key: "isReadOnly",
|
|
441
|
+
value: function isReadOnly() {
|
|
442
|
+
var readOnly = this.getState().readOnly;
|
|
443
|
+
return readOnly;
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
key: "isMouseDown",
|
|
448
|
+
value: function isMouseDown() {
|
|
449
|
+
var mouseDown = this.getState().mouseDown;
|
|
450
|
+
return mouseDown;
|
|
451
|
+
}
|
|
452
|
+
},
|
|
457
453
|
{
|
|
458
454
|
key: "getPreviousContent",
|
|
459
455
|
value: function getPreviousContent() {
|
|
460
|
-
var
|
|
456
|
+
var previousContent = this.getState().previousContent;
|
|
461
457
|
return previousContent;
|
|
462
458
|
}
|
|
463
459
|
},
|
|
464
460
|
{
|
|
465
461
|
key: "getPreviousSelection",
|
|
466
462
|
value: function getPreviousSelection() {
|
|
467
|
-
var
|
|
463
|
+
var previousSelection = this.getState().previousSelection;
|
|
468
464
|
return previousSelection;
|
|
469
465
|
}
|
|
470
466
|
},
|
|
467
|
+
{
|
|
468
|
+
key: "setReadOnly",
|
|
469
|
+
value: function setReadOnly(readOnly) {
|
|
470
|
+
this.updateState({
|
|
471
|
+
readOnly: readOnly
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
},
|
|
471
475
|
{
|
|
472
476
|
key: "setMouseDown",
|
|
473
477
|
value: function setMouseDown(mouseDown) {
|
|
@@ -495,8 +499,9 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
495
499
|
{
|
|
496
500
|
key: "setInitialState",
|
|
497
501
|
value: function setInitialState() {
|
|
498
|
-
var mouseDown = false, previousContent = null, previousSelection = null;
|
|
502
|
+
var readOnly = false, mouseDown = false, previousContent = null, previousSelection = null;
|
|
499
503
|
this.setState({
|
|
504
|
+
readOnly: readOnly,
|
|
500
505
|
mouseDown: mouseDown,
|
|
501
506
|
previousContent: previousContent,
|
|
502
507
|
previousSelection: previousSelection
|
|
@@ -506,14 +511,14 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
506
511
|
{
|
|
507
512
|
key: "didMount",
|
|
508
513
|
value: function didMount() {
|
|
509
|
-
var _this_properties = this.properties,
|
|
514
|
+
var _this_properties = this.properties, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, onFocus = _this_properties.onFocus, onBlur = _this_properties.onBlur, changeHandler = onChange, scrollHandler = onScroll, focusHandler = onFocus, blurHandler = onBlur; ///
|
|
510
515
|
changeHandler && this.onChange(changeHandler, this);
|
|
511
516
|
scrollHandler && this.onScroll(scrollHandler, this);
|
|
512
517
|
focusHandler && this.onFocus(focusHandler, this);
|
|
513
518
|
blurHandler && this.onBlur(blurHandler, this);
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
519
|
+
var content = this.getContent(), selection = this.getSelection(), previousContent = content, previousSelection = selection; ///
|
|
520
|
+
this.setPreviousSelection(previousSelection);
|
|
521
|
+
this.setPreviousContent(previousContent);
|
|
517
522
|
}
|
|
518
523
|
},
|
|
519
524
|
{
|
|
@@ -524,6 +529,10 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
|
|
|
524
529
|
scrollHandler && this.offScroll(scrollHandler, this);
|
|
525
530
|
focusHandler && this.offFocus(focusHandler, this);
|
|
526
531
|
blurHandler && this.offBlur(blurHandler, this);
|
|
532
|
+
var active = this.isActive();
|
|
533
|
+
if (active) {
|
|
534
|
+
this.deactivate();
|
|
535
|
+
}
|
|
527
536
|
}
|
|
528
537
|
},
|
|
529
538
|
{
|
|
@@ -540,11 +549,10 @@ _defineProperty(RichTextarea, "ignoredProperties", [
|
|
|
540
549
|
"onChange",
|
|
541
550
|
"onScroll",
|
|
542
551
|
"onFocus",
|
|
543
|
-
"onBlur"
|
|
544
|
-
"active"
|
|
552
|
+
"onBlur"
|
|
545
553
|
]);
|
|
546
554
|
_defineProperty(RichTextarea, "defaultProperties", {
|
|
547
555
|
className: "rich"
|
|
548
556
|
});
|
|
549
557
|
|
|
550
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyB3aW5kb3csIEVsZW1lbnQsIGV2ZW50VHlwZXMgfSBmcm9tIFwiZWFzeVwiO1xyXG5cclxuaW1wb3J0IFNlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb25cIlxyXG5cclxuY29uc3QgeyBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIElOUFVUX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBNT1VTRVVQX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSB9ID0gZXZlbnRUeXBlcztcclxuXHJcbmNvbnN0IGRlZmVyID0gKGZ1bmMpID0+IHNldFRpbWVvdXQoZnVuYywgMSk7IC8vL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmljaFRleHRhcmVhIGV4dGVuZHMgRWxlbWVudCB7XHJcbiAgaW50ZXJtZWRpYXRlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpID0+IHtcclxuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLmhhc0NoYW5nZWQoKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCB8fCBmb3JjZWQpIHtcclxuICAgICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KTtcclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgbW91c2VVcEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IG1vdXNlRG93biA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0TW91c2VEb3duKG1vdXNlRG93bik7XHJcbiAgfTtcclxuXHJcbiAgbW91c2VEb3duSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gZmFsc2UsXHJcbiAgICAgICAgbW91c2VEb3duID0gdHJ1ZSxcclxuICAgICAgICBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpKTtcclxuICB9XHJcblxyXG4gIG1vdXNlTW92ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgIG1vdXNlRG93biA9IHRoaXMuaXNNb3VzZURvd24oKSxcclxuICAgICAgICBldmVudFRZcGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICBpZiAobW91c2VEb3duKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUWXBlLCBmb3JjZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpKTtcclxuICB9XHJcblxyXG4gIGlucHV0SGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gZmFsc2UsXHJcbiAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGZvY3VzSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gdHJ1ZSxcclxuICAgICAgICBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpKTtcclxuICB9XHJcblxyXG4gIGJsdXJIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSB0cnVlLFxyXG4gICAgICAgIGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIGV2ZW50VHlwZSwgZm9yY2VkKTtcclxuICB9XHJcblxyXG4gIGlzQWN0aXZlKCkge1xyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5oYXNDbGFzcyhcImFjdGl2ZVwiKTtcclxuXHJcbiAgICByZXR1cm4gYWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgaXNSZWFkT25seSgpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKSxcclxuICAgICAgICAgIHsgcmVhZE9ubHkgfSA9IGRvbUVsZW1lbnQ7XHJcbiAgICBcclxuICAgIHJldHVybiByZWFkT25seTsgXHJcbiAgfVxyXG5cclxuICBnZXRDb250ZW50KCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgeyB2YWx1ZSB9ID0gZG9tRWxlbWVudCxcclxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgIC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21ET01FbGVtZW50KGRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzZXRSZWFkT25seShyZWFkT25seSkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xyXG4gICAgICByZWFkT25seVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRDb250ZW50KGNvbnRlbnQpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xyXG4gICAgICB2YWx1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KTtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvblN0YXJ0LFxyXG4gICAgICBzZWxlY3Rpb25FbmRcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgaXNNb3VzZURvd24oKSB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcclxuICAgICAgICAgIHsgbW91c2VEb3duIH0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gbW91c2VEb3duO1xyXG4gIH1cclxuXHJcbiAgaGFzQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRoaXMuaGFzU2VsZWN0aW9uQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICByZXR1cm4gY2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGhhc0NvbnRlbnRDaGFuZ2VkKCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gdGhpcy5nZXRQcmV2aW91c0NvbnRlbnQoKSxcclxuICAgICAgICAgIGNvbnRlbnREaWZmZXJlbnRUb1ByZXZpb3VzQ29udGVudCA9IChjb250ZW50ICE9PSBwcmV2aW91c0NvbnRlbnQpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSBjb250ZW50RGlmZmVyZW50VG9QcmV2aW91c0NvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50Q2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGhhc1NlbGVjdGlvbkNoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSB0aGlzLmdldFByZXZpb3VzU2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25EaWZmZXJlbnRUb1ByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLmlzRGlmZmVyZW50VG8ocHJldmlvdXNTZWxlY3Rpb24pLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHNlbGVjdGlvbkRpZmZlcmVudFRvUHJldmlvdXNTZWxlY3Rpb247IC8vL1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG5cclxuICAgIHdpbmRvdy5vbihgJHtCTFVSX0VWRU5UX1RZUEV9ICR7TU9VU0VVUF9FVkVOVF9UWVBFfSAke0NPTlRFWFRNRU5VX0VWRU5UX1RZUEV9YCwgdGhpcy5tb3VzZVVwSGFuZGxlciwgdGhpcyk7IC8vL1xyXG5cclxuICAgIHRoaXMub24oTU9VU0VET1dOX0VWRU5UX1RZUEUsIHRoaXMubW91c2VEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgdGhpcy5tb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG5cclxuICAgIHdpbmRvdy5vZmYoYCR7QkxVUl9FVkVOVF9UWVBFfSAke01PVVNFVVBfRVZFTlRfVFlQRX0gJHtDT05URVhUTUVOVV9FVkVOVF9UWVBFfWAsIHRoaXMubW91c2VVcEhhbmRsZXIsIHRoaXMpOyAvLy9cclxuXHJcbiAgICB0aGlzLm9mZihNT1VTRURPV05fRVZFTlRfVFlQRSwgdGhpcy5tb3VzZURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgdGhpcy5tb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IHByZXZpb3VzQ29udGVudCB9ID0gc3RhdGU7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzQ29udGVudDtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IHByZXZpb3VzU2VsZWN0aW9uIH0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gcHJldmlvdXNTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZURvd24obW91c2VEb3duKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgbW91c2VEb3duXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBwcmV2aW91c0NvbnRlbnRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IG51bGwsXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIG1vdXNlRG93bixcclxuICAgICAgcHJldmlvdXNDb250ZW50LFxyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgYWN0aXZlLCBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2UsIC8vL1xyXG4gICAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGwsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXI7IC8vL1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9uRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyOyAvLy9cclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9mZkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcbiAgICBibHVySGFuZGxlciAmJiB0aGlzLm9mZkJsdXIoYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGlzZSgpIHtcclxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcclxuXHJcbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xyXG4gICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gICAgXCJvbkZvY3VzXCIsXHJcbiAgICBcIm9uQmx1clwiLFxyXG4gICAgXCJhY3RpdmVcIlxyXG4gIF07XHJcblxyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcclxuICAgIGNsYXNzTmFtZTogXCJyaWNoXCJcclxuICB9O1xyXG59XHJcbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiUmljaFRleHRhcmVhIiwiQkxVUl9FVkVOVF9UWVBFIiwiZXZlbnRUeXBlcyIsIklOUFVUX0VWRU5UX1RZUEUiLCJGT0NVU19FVkVOVF9UWVBFIiwiQ0hBTkdFX0VWRU5UX1RZUEUiLCJTQ1JPTExfRVZFTlRfVFlQRSIsIktFWURPV05fRVZFTlRfVFlQRSIsIk1PVVNFVVBfRVZFTlRfVFlQRSIsIk1PVVNFRE9XTl9FVkVOVF9UWVBFIiwiTU9VU0VNT1ZFX0VWRU5UX1RZUEUiLCJDT05URVhUTUVOVV9FVkVOVF9UWVBFIiwiZGVmZXIiLCJmdW5jIiwic2V0VGltZW91dCIsImludGVybWVkaWF0ZUhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJldmVudFR5cGUiLCJmb3JjZWQiLCJjaGFuZ2VkIiwiaGFzQ2hhbmdlZCIsImNhbGxIYW5kbGVycyIsImNvbnRlbnQiLCJnZXRDb250ZW50Iiwic2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwicHJldmlvdXNDb250ZW50IiwicHJldmlvdXNTZWxlY3Rpb24iLCJzZXRQcmV2aW91c0NvbnRlbnQiLCJzZXRQcmV2aW91c1NlbGVjdGlvbiIsIm1vdXNlVXBIYW5kbGVyIiwibW91c2VEb3duIiwic2V0TW91c2VEb3duIiwibW91c2VEb3duSGFuZGxlciIsIm1vdXNlTW92ZUhhbmRsZXIiLCJpc01vdXNlRG93biIsImV2ZW50VFlwZSIsImtleURvd25IYW5kbGVyIiwiaW5wdXRIYW5kbGVyIiwic2Nyb2xsSGFuZGxlciIsImZvY3VzSGFuZGxlciIsImJsdXJIYW5kbGVyIiwiaXNBY3RpdmUiLCJhY3RpdmUiLCJoYXNDbGFzcyIsImlzUmVhZE9ubHkiLCJkb21FbGVtZW50IiwiZ2V0RE9NRWxlbWVudCIsInJlYWRPbmx5IiwidmFsdWUiLCJTZWxlY3Rpb24iLCJmcm9tRE9NRWxlbWVudCIsInNldFJlYWRPbmx5IiwiT2JqZWN0IiwiYXNzaWduIiwic2V0Q29udGVudCIsInNldFNlbGVjdGlvbiIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJnZXRTdGFydFBvc2l0aW9uIiwic2VsZWN0aW9uRW5kUG9zaXRpb24iLCJnZXRFbmRQb3NpdGlvbiIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwic3RhdGUiLCJnZXRTdGF0ZSIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJzZWxlY3Rpb25DaGFuZ2VkIiwiaGFzU2VsZWN0aW9uQ2hhbmdlZCIsImdldFByZXZpb3VzQ29udGVudCIsImNvbnRlbnREaWZmZXJlbnRUb1ByZXZpb3VzQ29udGVudCIsImdldFByZXZpb3VzU2VsZWN0aW9uIiwic2VsZWN0aW9uRGlmZmVyZW50VG9QcmV2aW91c1NlbGVjdGlvbiIsImlzRGlmZmVyZW50VG8iLCJhY3RpdmF0ZSIsIndpbmRvdyIsIm9uIiwiYWRkQ2xhc3MiLCJkZWFjdGl2YXRlIiwib2ZmIiwicmVtb3ZlQ2xhc3MiLCJvbkJsdXIiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9mZkJsdXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25Gb2N1cyIsIm9mZkZvY3VzIiwib25TY3JvbGwiLCJvZmZTY3JvbGwiLCJvbkNoYW5nZSIsImNoYW5nZUhhbmRsZXIiLCJvZmZDaGFuZ2UiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJldmVudExpc3RlbmVycyIsImZpbmRFdmVudExpc3RlbmVycyIsImZvckVhY2giLCJldmVudExpc3RlbmVyIiwiaGFuZGxlckVsZW1lbnQiLCJjYWxsIiwidXBkYXRlU3RhdGUiLCJzZXRJbml0aWFsU3RhdGUiLCJzZXRTdGF0ZSIsImRpZE1vdW50IiwicHJvcGVydGllcyIsIndpbGxVbm1vdW50IiwiaW5pdGlhbGlzZSIsIkVsZW1lbnQiLCJ0YWdOYW1lIiwiaWdub3JlZFByb3BlcnRpZXMiLCJkZWZhdWx0UHJvcGVydGllcyIsImNsYXNzTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFtQnFCQTs7O29CQWpCdUI7OERBRXRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEIsSUFBUUMsa0JBUzRCQyxnQkFBVSxDQVR0Q0QsaUJBQ0NFLG1CQVEyQkQsZ0JBQVUsQ0FSckNDLGtCQUNBQyxtQkFPMkJGLGdCQUFVLENBUHJDRSxrQkFDQUMsb0JBTTJCSCxnQkFBVSxDQU5yQ0csbUJBQ0FDLG9CQUsyQkosZ0JBQVUsQ0FMckNJLG1CQUNBQyxxQkFJMkJMLGdCQUFVLENBSnJDSyxvQkFD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
|
|
558
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyB3aW5kb3csIEVsZW1lbnQsIGV2ZW50VHlwZXMgfSBmcm9tIFwiZWFzeVwiO1xyXG5cclxuaW1wb3J0IFNlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb25cIlxyXG5cclxuY29uc3QgeyBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIElOUFVUX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBNT1VTRVVQX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSB9ID0gZXZlbnRUeXBlcztcclxuXHJcbmNvbnN0IGRlZmVyID0gKGZ1bmMpID0+IHNldFRpbWVvdXQoZnVuYywgMSk7IC8vL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmljaFRleHRhcmVhIGV4dGVuZHMgRWxlbWVudCB7XHJcbiAgaW50ZXJtZWRpYXRlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpID0+IHtcclxuICAgIGNvbnN0IHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5KCk7XHJcblxyXG4gICAgaWYgKHJlYWRPbmx5KSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29udGVudCA9IHRoaXMuZ2V0UHJldmlvdXNDb250ZW50KCksXHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBwcmV2aW91c0NvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5oYXNDaGFuZ2VkKCk7XHJcblxyXG4gICAgaWYgKGNoYW5nZWQgfHwgZm9yY2VkKSB7XHJcbiAgICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcbiAgICB0aGlzLnNldFByZXZpb3VzU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIG1vdXNlRG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgbW91c2VEb3duID0gdHJ1ZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuc2V0TW91c2VEb3duKG1vdXNlRG93bik7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4gdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCkpO1xyXG4gIH1cclxuXHJcbiAgbW91c2VNb3ZlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gZmFsc2UsXHJcbiAgICAgICAgICBtb3VzZURvd24gPSB0aGlzLmlzTW91c2VEb3duKCksXHJcbiAgICAgICAgICBldmVudFRZcGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICBpZiAobW91c2VEb3duKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUWXBlLCBmb3JjZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VVcEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IG1vdXNlRG93biA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0TW91c2VEb3duKG1vdXNlRG93bik7XHJcbiAgfTtcclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4gdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCkpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0hhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IHRydWUsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpKTtcclxuICB9XHJcblxyXG4gIGJsdXJIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSB0cnVlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmhhc0NsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgIHJldHVybiBhY3RpdmU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZW50KCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgeyB2YWx1ZSB9ID0gZG9tRWxlbWVudCxcclxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgIC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21ET01FbGVtZW50KGRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzZXRDb250ZW50KGNvbnRlbnQpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xyXG4gICAgICB2YWx1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KTtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvblN0YXJ0LFxyXG4gICAgICBzZWxlY3Rpb25FbmRcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgaGFzQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRoaXMuaGFzU2VsZWN0aW9uQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICByZXR1cm4gY2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGhhc0NvbnRlbnRDaGFuZ2VkKCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gdGhpcy5nZXRQcmV2aW91c0NvbnRlbnQoKSxcclxuICAgICAgICAgIGNvbnRlbnREaWZmZXJlbnRUb1ByZXZpb3VzQ29udGVudCA9IChjb250ZW50ICE9PSBwcmV2aW91c0NvbnRlbnQpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSBjb250ZW50RGlmZmVyZW50VG9QcmV2aW91c0NvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50Q2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGhhc1NlbGVjdGlvbkNoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSB0aGlzLmdldFByZXZpb3VzU2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25EaWZmZXJlbnRUb1ByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLmlzRGlmZmVyZW50VG8ocHJldmlvdXNTZWxlY3Rpb24pLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHNlbGVjdGlvbkRpZmZlcmVudFRvUHJldmlvdXNTZWxlY3Rpb247IC8vL1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG5cclxuICAgIHdpbmRvdy5vbihgJHtCTFVSX0VWRU5UX1RZUEV9ICR7TU9VU0VVUF9FVkVOVF9UWVBFfSAke0NPTlRFWFRNRU5VX0VWRU5UX1RZUEV9YCwgdGhpcy5tb3VzZVVwSGFuZGxlciwgdGhpcyk7IC8vL1xyXG5cclxuICAgIHRoaXMub24oTU9VU0VET1dOX0VWRU5UX1RZUEUsIHRoaXMubW91c2VEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgdGhpcy5tb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG5cclxuICAgIHdpbmRvdy5vZmYoYCR7QkxVUl9FVkVOVF9UWVBFfSAke01PVVNFVVBfRVZFTlRfVFlQRX0gJHtDT05URVhUTUVOVV9FVkVOVF9UWVBFfWAsIHRoaXMubW91c2VVcEhhbmRsZXIsIHRoaXMpOyAvLy9cclxuXHJcbiAgICB0aGlzLm9mZihNT1VTRURPV05fRVZFTlRfVFlQRSwgdGhpcy5tb3VzZURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgdGhpcy5tb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNSZWFkT25seSgpIHtcclxuICAgIGNvbnN0IHsgcmVhZE9ubHkgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gcmVhZE9ubHk7XHJcbiAgfVxyXG5cclxuICBpc01vdXNlRG93bigpIHtcclxuICAgIGNvbnN0IHsgbW91c2VEb3duIH0gPSB0aGlzLmdldFN0YXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIG1vdXNlRG93bjtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzQ29udGVudCgpIHtcclxuICAgIGNvbnN0IHsgcHJldmlvdXNDb250ZW50IH0gPSB0aGlzLmdldFN0YXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzQ29udGVudDtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgeyBwcmV2aW91c1NlbGVjdGlvbiB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBwcmV2aW91c1NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5KSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgcmVhZE9ubHlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2VEb3duKG1vdXNlRG93bikge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIG1vdXNlRG93blxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgcHJldmlvdXNDb250ZW50XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgcHJldmlvdXNTZWxlY3Rpb25cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgY29uc3QgcmVhZE9ubHkgPSBmYWxzZSxcclxuICAgICAgICAgIG1vdXNlRG93biA9IGZhbHNlLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gbnVsbCxcclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgcmVhZE9ubHksXHJcbiAgICAgIG1vdXNlRG93bixcclxuICAgICAgcHJldmlvdXNDb250ZW50LFxyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgb25DaGFuZ2UsIG9uU2Nyb2xsLCBvbkZvY3VzLCBvbkJsdXIgfSA9IHRoaXMucHJvcGVydGllcyxcclxuICAgICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsLCAvLy9cclxuICAgICAgICAgICAgZm9jdXNIYW5kbGVyID0gb25Gb2N1cywgLy8vXHJcbiAgICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyOyAvLy9cclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub25DaGFuZ2UoY2hhbmdlSGFuZGxlciwgdGhpcyk7XHJcbiAgICBzY3JvbGxIYW5kbGVyICYmIHRoaXMub25TY3JvbGwoc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vbkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcbiAgICBibHVySGFuZGxlciAmJiB0aGlzLm9uQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KTtcclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyOyAvLy9cclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9mZkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcbiAgICBibHVySGFuZGxlciAmJiB0aGlzLm9mZkJsdXIoYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaXNBY3RpdmUoKTtcclxuXHJcbiAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGlzZSgpIHtcclxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcclxuXHJcbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xyXG4gICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gICAgXCJvbkZvY3VzXCIsXHJcbiAgICBcIm9uQmx1clwiXHJcbiAgXTtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcInJpY2hcIlxyXG4gIH07XHJcbn1cclxuIiwiUmVhY3QuY3JlYXRlRWxlbWVudCJdLCJuYW1lcyI6WyJSaWNoVGV4dGFyZWEiLCJCTFVSX0VWRU5UX1RZUEUiLCJldmVudFR5cGVzIiwiSU5QVVRfRVZFTlRfVFlQRSIsIkZPQ1VTX0VWRU5UX1RZUEUiLCJDSEFOR0VfRVZFTlRfVFlQRSIsIlNDUk9MTF9FVkVOVF9UWVBFIiwiS0VZRE9XTl9FVkVOVF9UWVBFIiwiTU9VU0VVUF9FVkVOVF9UWVBFIiwiTU9VU0VET1dOX0VWRU5UX1RZUEUiLCJNT1VTRU1PVkVfRVZFTlRfVFlQRSIsIkNPTlRFWFRNRU5VX0VWRU5UX1RZUEUiLCJkZWZlciIsImZ1bmMiLCJzZXRUaW1lb3V0IiwiaW50ZXJtZWRpYXRlSGFuZGxlciIsImV2ZW50IiwiZWxlbWVudCIsImV2ZW50VHlwZSIsImZvcmNlZCIsInJlYWRPbmx5IiwiaXNSZWFkT25seSIsInByZXZpb3VzQ29udGVudCIsImdldFByZXZpb3VzQ29udGVudCIsImNvbnRlbnQiLCJzZXRDb250ZW50IiwiY2hhbmdlZCIsImhhc0NoYW5nZWQiLCJjYWxsSGFuZGxlcnMiLCJnZXRDb250ZW50Iiwic2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwicHJldmlvdXNTZWxlY3Rpb24iLCJzZXRQcmV2aW91c0NvbnRlbnQiLCJzZXRQcmV2aW91c1NlbGVjdGlvbiIsIm1vdXNlRG93bkhhbmRsZXIiLCJtb3VzZURvd24iLCJzZXRNb3VzZURvd24iLCJtb3VzZU1vdmVIYW5kbGVyIiwiaXNNb3VzZURvd24iLCJldmVudFRZcGUiLCJtb3VzZVVwSGFuZGxlciIsImtleURvd25IYW5kbGVyIiwiaW5wdXRIYW5kbGVyIiwic2Nyb2xsSGFuZGxlciIsImZvY3VzSGFuZGxlciIsImJsdXJIYW5kbGVyIiwiaXNBY3RpdmUiLCJhY3RpdmUiLCJoYXNDbGFzcyIsImRvbUVsZW1lbnQiLCJnZXRET01FbGVtZW50IiwidmFsdWUiLCJTZWxlY3Rpb24iLCJmcm9tRE9NRWxlbWVudCIsIk9iamVjdCIsImFzc2lnbiIsInNldFNlbGVjdGlvbiIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJnZXRTdGFydFBvc2l0aW9uIiwic2VsZWN0aW9uRW5kUG9zaXRpb24iLCJnZXRFbmRQb3NpdGlvbiIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwiY29udGVudENoYW5nZWQiLCJoYXNDb250ZW50Q2hhbmdlZCIsInNlbGVjdGlvbkNoYW5nZWQiLCJoYXNTZWxlY3Rpb25DaGFuZ2VkIiwiY29udGVudERpZmZlcmVudFRvUHJldmlvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNTZWxlY3Rpb24iLCJzZWxlY3Rpb25EaWZmZXJlbnRUb1ByZXZpb3VzU2VsZWN0aW9uIiwiaXNEaWZmZXJlbnRUbyIsImFjdGl2YXRlIiwid2luZG93Iiwib24iLCJhZGRDbGFzcyIsImRlYWN0aXZhdGUiLCJvZmYiLCJyZW1vdmVDbGFzcyIsIm9uQmx1ciIsImhhbmRsZXIiLCJhZGRFdmVudExpc3RlbmVyIiwib2ZmQmx1ciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbkZvY3VzIiwib2ZmRm9jdXMiLCJvblNjcm9sbCIsIm9mZlNjcm9sbCIsIm9uQ2hhbmdlIiwiY2hhbmdlSGFuZGxlciIsIm9mZkNoYW5nZSIsInJlbWFpbmluZ0FyZ3VtZW50cyIsImV2ZW50TGlzdGVuZXJzIiwiZmluZEV2ZW50TGlzdGVuZXJzIiwiZm9yRWFjaCIsImV2ZW50TGlzdGVuZXIiLCJoYW5kbGVyRWxlbWVudCIsImNhbGwiLCJnZXRTdGF0ZSIsInNldFJlYWRPbmx5IiwidXBkYXRlU3RhdGUiLCJzZXRJbml0aWFsU3RhdGUiLCJzZXRTdGF0ZSIsImRpZE1vdW50IiwicHJvcGVydGllcyIsIndpbGxVbm1vdW50IiwiaW5pdGlhbGlzZSIsIkVsZW1lbnQiLCJ0YWdOYW1lIiwiaWdub3JlZFByb3BlcnRpZXMiLCJkZWZhdWx0UHJvcGVydGllcyIsImNsYXNzTmFtZSJdLCJt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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "easy-richtextarea",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.148",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/easy-richtextarea",
|
|
7
7
|
"description": "A textarea element that handles and hands off events well.",
|
package/src/example/view.js
CHANGED
|
@@ -2,15 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
import RichTextarea from "./richTextarea";
|
|
4
4
|
|
|
5
|
+
const content = `Rule (blah)
|
|
6
|
+
Conclusion
|
|
7
|
+
A`,
|
|
8
|
+
readOnly = true,
|
|
9
|
+
richTextarea =
|
|
10
|
+
|
|
11
|
+
<RichTextarea onChange={changeHandler} onScroll={scrollHandler} onFocus={focusHandler} onBlur={blurHandler} />
|
|
12
|
+
|
|
13
|
+
;
|
|
14
|
+
|
|
15
|
+
richTextarea.setContent(content);
|
|
16
|
+
richTextarea.setReadOnly(readOnly);
|
|
17
|
+
|
|
18
|
+
richTextarea.activate();
|
|
19
|
+
|
|
5
20
|
const View = (properties) =>
|
|
6
21
|
|
|
7
22
|
<div className="view">
|
|
8
|
-
|
|
9
|
-
onScroll={scrollHandler}
|
|
10
|
-
onFocus={focusHandler}
|
|
11
|
-
onBlur={blurHandler}
|
|
12
|
-
active
|
|
13
|
-
/>
|
|
23
|
+
{richTextarea}
|
|
14
24
|
</div>
|
|
15
25
|
|
|
16
26
|
;
|
package/src/richTextarea.js
CHANGED
|
@@ -19,6 +19,15 @@ const defer = (func) => setTimeout(func, 1); ///
|
|
|
19
19
|
|
|
20
20
|
export default class RichTextarea extends Element {
|
|
21
21
|
intermediateHandler = (event, element, eventType, forced) => {
|
|
22
|
+
const readOnly = this.isReadOnly();
|
|
23
|
+
|
|
24
|
+
if (readOnly) {
|
|
25
|
+
const previousContent = this.getPreviousContent(),
|
|
26
|
+
content = previousContent; ///
|
|
27
|
+
|
|
28
|
+
this.setContent(content);
|
|
29
|
+
}
|
|
30
|
+
|
|
22
31
|
const changed = this.hasChanged();
|
|
23
32
|
|
|
24
33
|
if (changed || forced) {
|
|
@@ -34,16 +43,10 @@ export default class RichTextarea extends Element {
|
|
|
34
43
|
this.setPreviousSelection(previousSelection);
|
|
35
44
|
}
|
|
36
45
|
|
|
37
|
-
mouseUpHandler = (event, element) => {
|
|
38
|
-
const mouseDown = false;
|
|
39
|
-
|
|
40
|
-
this.setMouseDown(mouseDown);
|
|
41
|
-
};
|
|
42
|
-
|
|
43
46
|
mouseDownHandler = (event, element) => {
|
|
44
47
|
const forced = false,
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
mouseDown = true,
|
|
49
|
+
eventType = CHANGE_EVENT_TYPE;
|
|
47
50
|
|
|
48
51
|
this.setMouseDown(mouseDown);
|
|
49
52
|
|
|
@@ -52,24 +55,30 @@ export default class RichTextarea extends Element {
|
|
|
52
55
|
|
|
53
56
|
mouseMoveHandler = (event, element) => {
|
|
54
57
|
const forced = false,
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
mouseDown = this.isMouseDown(),
|
|
59
|
+
eventTYpe = CHANGE_EVENT_TYPE;
|
|
57
60
|
|
|
58
61
|
if (mouseDown) {
|
|
59
62
|
this.intermediateHandler(event, element, eventTYpe, forced);
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
|
|
66
|
+
mouseUpHandler = (event, element) => {
|
|
67
|
+
const mouseDown = false;
|
|
68
|
+
|
|
69
|
+
this.setMouseDown(mouseDown);
|
|
70
|
+
};
|
|
71
|
+
|
|
63
72
|
keyDownHandler = (event, element) => {
|
|
64
73
|
const forced = false,
|
|
65
|
-
|
|
74
|
+
eventType = CHANGE_EVENT_TYPE;
|
|
66
75
|
|
|
67
76
|
defer(() => this.intermediateHandler(event, element, eventType, forced));
|
|
68
77
|
}
|
|
69
78
|
|
|
70
79
|
inputHandler = (event, element) => {
|
|
71
80
|
const forced = false,
|
|
72
|
-
|
|
81
|
+
eventType = CHANGE_EVENT_TYPE;
|
|
73
82
|
|
|
74
83
|
this.intermediateHandler(event, element, eventType, forced);
|
|
75
84
|
}
|
|
@@ -82,14 +91,14 @@ export default class RichTextarea extends Element {
|
|
|
82
91
|
|
|
83
92
|
focusHandler = (event, element) => {
|
|
84
93
|
const forced = true,
|
|
85
|
-
|
|
94
|
+
eventType = FOCUS_EVENT_TYPE;
|
|
86
95
|
|
|
87
96
|
defer(() => this.intermediateHandler(event, element, eventType, forced));
|
|
88
97
|
}
|
|
89
98
|
|
|
90
99
|
blurHandler = (event, element) => {
|
|
91
100
|
const forced = true,
|
|
92
|
-
|
|
101
|
+
eventType = BLUR_EVENT_TYPE;
|
|
93
102
|
|
|
94
103
|
this.intermediateHandler(event, element, eventType, forced);
|
|
95
104
|
}
|
|
@@ -100,13 +109,6 @@ export default class RichTextarea extends Element {
|
|
|
100
109
|
return active;
|
|
101
110
|
}
|
|
102
111
|
|
|
103
|
-
isReadOnly() {
|
|
104
|
-
const domElement = this.getDOMElement(),
|
|
105
|
-
{ readOnly } = domElement;
|
|
106
|
-
|
|
107
|
-
return readOnly;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
112
|
getContent() {
|
|
111
113
|
const domElement = this.getDOMElement(),
|
|
112
114
|
{ value } = domElement,
|
|
@@ -122,14 +124,6 @@ export default class RichTextarea extends Element {
|
|
|
122
124
|
return selection;
|
|
123
125
|
}
|
|
124
126
|
|
|
125
|
-
setReadOnly(readOnly) {
|
|
126
|
-
const domElement = this.getDOMElement();
|
|
127
|
-
|
|
128
|
-
Object.assign(domElement, {
|
|
129
|
-
readOnly
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
|
|
133
127
|
setContent(content) {
|
|
134
128
|
const value = content, ///
|
|
135
129
|
previousContent = content, ///
|
|
@@ -158,13 +152,6 @@ export default class RichTextarea extends Element {
|
|
|
158
152
|
this.setPreviousSelection(previousSelection);
|
|
159
153
|
}
|
|
160
154
|
|
|
161
|
-
isMouseDown() {
|
|
162
|
-
const state = this.getState(),
|
|
163
|
-
{ mouseDown } = state;
|
|
164
|
-
|
|
165
|
-
return mouseDown;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
155
|
hasChanged() {
|
|
169
156
|
const contentChanged = this.hasContentChanged(),
|
|
170
157
|
selectionChanged = this.hasSelectionChanged(),
|
|
@@ -308,20 +295,36 @@ export default class RichTextarea extends Element {
|
|
|
308
295
|
});
|
|
309
296
|
}
|
|
310
297
|
|
|
298
|
+
isReadOnly() {
|
|
299
|
+
const { readOnly } = this.getState();
|
|
300
|
+
|
|
301
|
+
return readOnly;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
isMouseDown() {
|
|
305
|
+
const { mouseDown } = this.getState();
|
|
306
|
+
|
|
307
|
+
return mouseDown;
|
|
308
|
+
}
|
|
309
|
+
|
|
311
310
|
getPreviousContent() {
|
|
312
|
-
const
|
|
313
|
-
{ previousContent } = state;
|
|
311
|
+
const { previousContent } = this.getState();
|
|
314
312
|
|
|
315
313
|
return previousContent;
|
|
316
314
|
}
|
|
317
315
|
|
|
318
316
|
getPreviousSelection() {
|
|
319
|
-
const
|
|
320
|
-
{ previousSelection } = state;
|
|
317
|
+
const { previousSelection } = this.getState();
|
|
321
318
|
|
|
322
319
|
return previousSelection;
|
|
323
320
|
}
|
|
324
321
|
|
|
322
|
+
setReadOnly(readOnly) {
|
|
323
|
+
this.updateState({
|
|
324
|
+
readOnly
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
|
|
325
328
|
setMouseDown(mouseDown) {
|
|
326
329
|
this.updateState({
|
|
327
330
|
mouseDown
|
|
@@ -341,11 +344,13 @@ export default class RichTextarea extends Element {
|
|
|
341
344
|
}
|
|
342
345
|
|
|
343
346
|
setInitialState() {
|
|
344
|
-
const
|
|
347
|
+
const readOnly = false,
|
|
348
|
+
mouseDown = false,
|
|
345
349
|
previousContent = null,
|
|
346
350
|
previousSelection = null;
|
|
347
351
|
|
|
348
352
|
this.setState({
|
|
353
|
+
readOnly,
|
|
349
354
|
mouseDown,
|
|
350
355
|
previousContent,
|
|
351
356
|
previousSelection
|
|
@@ -353,7 +358,7 @@ export default class RichTextarea extends Element {
|
|
|
353
358
|
}
|
|
354
359
|
|
|
355
360
|
didMount() {
|
|
356
|
-
const {
|
|
361
|
+
const { onChange, onScroll, onFocus, onBlur } = this.properties,
|
|
357
362
|
changeHandler = onChange, ///
|
|
358
363
|
scrollHandler = onScroll, ///
|
|
359
364
|
focusHandler = onFocus, ///
|
|
@@ -364,9 +369,14 @@ export default class RichTextarea extends Element {
|
|
|
364
369
|
focusHandler && this.onFocus(focusHandler, this);
|
|
365
370
|
blurHandler && this.onBlur(blurHandler, this);
|
|
366
371
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
372
|
+
const content = this.getContent(),
|
|
373
|
+
selection = this.getSelection(),
|
|
374
|
+
previousContent = content, ///
|
|
375
|
+
previousSelection = selection; ///
|
|
376
|
+
|
|
377
|
+
this.setPreviousSelection(previousSelection);
|
|
378
|
+
|
|
379
|
+
this.setPreviousContent(previousContent);
|
|
370
380
|
}
|
|
371
381
|
|
|
372
382
|
willUnmount() {
|
|
@@ -380,6 +390,12 @@ export default class RichTextarea extends Element {
|
|
|
380
390
|
scrollHandler && this.offScroll(scrollHandler, this);
|
|
381
391
|
focusHandler && this.offFocus(focusHandler, this);
|
|
382
392
|
blurHandler && this.offBlur(blurHandler, this);
|
|
393
|
+
|
|
394
|
+
const active = this.isActive();
|
|
395
|
+
|
|
396
|
+
if (active) {
|
|
397
|
+
this.deactivate();
|
|
398
|
+
}
|
|
383
399
|
}
|
|
384
400
|
|
|
385
401
|
initialise() {
|
|
@@ -392,8 +408,7 @@ export default class RichTextarea extends Element {
|
|
|
392
408
|
"onChange",
|
|
393
409
|
"onScroll",
|
|
394
410
|
"onFocus",
|
|
395
|
-
"onBlur"
|
|
396
|
-
"active"
|
|
411
|
+
"onBlur"
|
|
397
412
|
];
|
|
398
413
|
|
|
399
414
|
static defaultProperties = {
|