easy-richtextarea 4.0.15 → 4.0.16

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.
@@ -170,7 +170,8 @@ var DeleteOperation = /*#__PURE__*/ function() {
170
170
  var offset1 = startPosition - selectionStartPosition, endOffset = selectionStartPosition - endPosition;
171
171
  transformedSelection = selection.shifted(offset1).endPositionShifted(endOffset);
172
172
  } else {
173
- transformedSelection = selection.emptied();
173
+ var offset2 = startPosition - selectionStartPosition;
174
+ transformedSelection = selection.emptied().shifted(offset2);
174
175
  }
175
176
  } else if (selectionEndPosition > endPosition) {
176
177
  var endOffset1 = -contentLength;
@@ -286,4 +287,4 @@ var DeleteOperation = /*#__PURE__*/ function() {
286
287
  return DeleteOperation;
287
288
  }();
288
289
 
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVyYXRpb24vZGVsZXRlLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IEVtcHR5T3BlcmF0aW9uIGZyb20gXCIuLi9vcGVyYXRpb24vZW1wdHlcIjtcclxuXHJcbmltcG9ydCB7IElOU0VSVF9UWVBFLCBERUxFVEVfVFlQRSwgRU1QVFlfVFlQRSB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlT3BlcmF0aW9uIHtcclxuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBwb3NpdGlvbikge1xyXG5cdCAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHlwZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybU9wZXJhdGlvbihvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHR5cGUgPSBvcGVyYXRpb24uZ2V0VHlwZSgpO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIElOU0VSVF9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8PSByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uIDwgcmhvLmNvbnRlbnQubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFt0YXUubGVmdChyaG8pLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uID49IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcblxyXG4gICAgICBjYXNlIERFTEVURV9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbdGF1LmNsb25lKCldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnRha2VuRnJvbSh0YXUpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhdS5jb250ZW50Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA+IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNwbGl0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA9PT0gcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXUuY29udGVudC5sZW5ndGggKyB0YXUucG9zaXRpb24gPD0gcmhvLmNvbnRlbnQubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtFbXB0eU9wZXJhdGlvbi5mcm9tTm90aGluZygpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhdS5jb250ZW50Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA+IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHJoby50YWtlbkZyb20odGF1KSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+PSByaG8uY29udGVudC5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtyaG8uc2hpZnQodGF1KV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbRW1wdHlPcGVyYXRpb24uZnJvbU5vdGhpbmcoKV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXUuY29udGVudC5sZW5ndGggKyB0YXUucG9zaXRpb24gPiByaG8uY29udGVudC5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gW3Joby5zaGlmdChyaG8udGFrZW5Gcm9tKHRhdSkpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KShvcGVyYXRpb24sIHRoaXMpO1xyXG5cclxuICAgICAgY2FzZSBFTVBUWV9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQpIHtcclxuICAgIGxldCBzdGFydCwgZW5kO1xyXG5cclxuICAgIHN0YXJ0ID0gMDtcclxuXHJcbiAgICBlbmQgPSB0aGlzLnBvc2l0aW9uO1xyXG5cclxuICAgIGNvbnN0IGxlZnRDb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCksXHJcbiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gdGhpcy5jb250ZW50Lmxlbmd0aDtcclxuXHJcbiAgICBzdGFydCA9IHRoaXMucG9zaXRpb24gKyBjb250ZW50TGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KSxcclxuICAgICAgICAgIHRyYW5zZm9ybWVkQ29udGVudCA9IGxlZnRDb250ZW50ICsgcmlnaHRDb250ZW50O1xyXG5cclxuICAgIHJldHVybiB0cmFuc2Zvcm1lZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKSB7XHJcbiAgICBsZXQgdHJhbnNmb3JtZWRTZWxlY3Rpb247XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGgsXHJcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiwgLy8vXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBjb250ZW50TGVuZ3RoO1xyXG5cclxuICAgIGlmIChmYWxzZSkge1xyXG4gICAgICAvLy9cclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikge1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSAtY29udGVudExlbmd0aDtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLnNoaWZ0ZWQob2Zmc2V0KTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBzdGFydFBvc2l0aW9uKSB7XHJcbiAgICAgIGlmIChzZWxlY3Rpb25FbmRQb3NpdGlvbiA+IGVuZFBvc2l0aW9uKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRQb3NpdGlvbiAtIHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiAtIGVuZFBvc2l0aW9uO1xyXG5cclxuICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zaGlmdGVkKG9mZnNldCkuZW5kUG9zaXRpb25TaGlmdGVkKGVuZE9mZnNldCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZW1wdGllZCgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbkVuZFBvc2l0aW9uID4gZW5kUG9zaXRpb24pIHtcclxuICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gLWNvbnRlbnRMZW5ndGg7XHJcblxyXG4gICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5lbmRQb3NpdGlvblNoaWZ0ZWQoZW5kT2Zmc2V0KTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uRW5kUG9zaXRpb24gPiBzdGFydFBvc2l0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGVuZE9mZnNldCA9IHN0YXJ0UG9zaXRpb24gLSBzZWxlY3Rpb25FbmRQb3NpdGlvbjtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmVuZFBvc2l0aW9uU2hpZnRlZChlbmRPZmZzZXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uY2xvbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJhbnNmb3JtZWRTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzaGlmdGVkKG9mZnNldCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudCxcclxuICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiArIG9mZnNldCxcclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2hpZnQob3BlcmF0aW9uKSB7XHJcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpcy5jb250ZW50Lmxlbmd0aCxcclxuICAgICAgICAgIG9mZnNldCA9IC1jb250ZW50TGVuZ3RoLFxyXG4gICAgICAgICAgc2hpZnRlZE9wZXJhdGlvbiA9IG9wZXJhdGlvbi5zaGlmdGVkKG9mZnNldCk7XHJcblxyXG4gICAgcmV0dXJuIHNoaWZ0ZWRPcGVyYXRpb25cclxuICB9XHJcblxyXG4gIHRha2VuRnJvbShkZWxldGVPcGVyYXRpb24pIHtcclxuICAgIGxldCBjb250ZW50ID0gZGVsZXRlT3BlcmF0aW9uLmdldENvbnRlbnQoKSxcclxuICAgICAgICBwb3NpdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbi5nZXRQb3NpdGlvbigpO1xyXG5cclxuICAgIGxldCBjb250ZW50TGVuZ3RoID0gY29udGVudC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKCh0aGlzLnBvc2l0aW9uID4gcG9zaXRpb24pICYmICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCA+PSBwb3NpdGlvbiArIGNvbnRlbnRMZW5ndGgpKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzLnBvc2l0aW9uIC0gcG9zaXRpb24sXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gMCxcclxuICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBjb250ZW50TGVuZ3RoOyAgLy8vXHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XHJcblxyXG4gICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRQb3NpdGlvbihjb250ZW50LCBwb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCh0aGlzLnBvc2l0aW9uIDw9IHBvc2l0aW9uKSAmJiAodGhpcy5wb3NpdGlvbiArIHRoaXMuY29udGVudC5sZW5ndGggPCBwb3NpdGlvbiArIGNvbnRlbnRMZW5ndGgpKSB7XHJcbiAgICAgIGNvbnRlbnRMZW5ndGggPSAocG9zaXRpb24gKyBjb250ZW50TGVuZ3RoKSAtICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCk7XHJcblxyXG4gICAgICBjb25zdCBzdGFydCA9ICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCkgLSBwb3NpdGlvbixcclxuICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBjb250ZW50TGVuZ3RoOyAgLy8vXHJcblxyXG4gICAgICBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoO1xyXG5cclxuICAgICAgY29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kUG9zaXRpb24oY29udGVudCwgcG9zaXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBzcGxpdChkZWxldGVPcGVyYXRpb24pIHtcclxuICAgIGxldCBjb250ZW50ID0gZGVsZXRlT3BlcmF0aW9uLmdldENvbnRlbnQoKSxcclxuICAgICAgICBwb3NpdGlvbiA9IGRlbGV0ZU9wZXJhdGlvbi5nZXRQb3NpdGlvbigpO1xyXG5cclxuICAgIGxldCBzdGFydCxcclxuICAgICAgICBlbmQ7XHJcblxyXG4gICAgc3RhcnQgPSAwO1xyXG5cclxuICAgIGVuZCA9IHRoaXMucG9zaXRpb24gLSBwb3NpdGlvbjtcclxuXHJcbiAgICBjb25zdCBsZWZ0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgIHN0YXJ0ID0gdGhpcy5wb3NpdGlvbiAtIHBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aDtcclxuXHJcbiAgICBjb25zdCByaWdodENvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCk7XHJcblxyXG4gICAgY29udGVudCA9IGxlZnRDb250ZW50ICsgcmlnaHRDb250ZW50O1xyXG5cclxuICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgaW52ZXJ0KEluc2VydE9wZXJhdGlvbiwgRGVsZXRlT3BlcmF0aW9uKSB7XHJcbiAgICBjb25zdCBpbnNlcnRPcGVyYXRpb24gPSBJbnNlcnRPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRQb3NpdGlvbih0aGlzLmNvbnRlbnQsIHRoaXMucG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBpbnNlcnRPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBjbG9uZSgpIHtcclxuICAgIGNvbnN0IGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKHRoaXMuY29udGVudCwgdGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIGRlbGV0ZU9wZXJhdGlvbjtcclxuICB9XHJcblxyXG4gIHRvSlNPTigpIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGUsXHJcbiAgICAgICAgICBjb250ZW50ID0gdGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uLFxyXG4gICAgICAgICAganNvbiA9IHtcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgIHJldHVybiBqc29uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21KU09OKGpzb24pIHtcclxuICAgIGNvbnN0IHsgdHlwZSwgY29udGVudCwgcG9zaXRpb24gfSA9IGpzb24sXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBuZXcgRGVsZXRlT3BlcmF0aW9uKHR5cGUsIGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Db250ZW50QW5kUG9zaXRpb24oY29udGVudCwgcG9zaXRpb24pIHtcclxuICAgIGNvbnN0IHR5cGUgPSBERUxFVEVfVFlQRSwgLy8vXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBuZXcgRGVsZXRlT3BlcmF0aW9uKHR5cGUsIGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbikge1xyXG4gICAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgYmVnaW4gPSBzdGFydFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBlbmQgPSBlbmRQb3NpdGlvbjsgIC8vL1xyXG5cclxuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKGJlZ2luLCBlbmQpOyAgLy8vXHJcblxyXG4gICAgY29uc3QgdHlwZSA9IERFTEVURV9UWVBFLCAvLy9cclxuICAgICAgICAgIHBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiwgLy8vXHJcbiAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBuZXcgRGVsZXRlT3BlcmF0aW9uKHR5cGUsIGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxufVxyXG4iLCJSZWFjdC5jcmVhdGVFbGVtZW50Il0sIm5hbWVzIjpbIkRlbGV0ZU9wZXJhdGlvbiIsInR5cGUiLCJjb250ZW50IiwicG9zaXRpb24iLCJnZXRUeXBlIiwiZ2V0Q29udGVudCIsImdldFBvc2l0aW9uIiwidHJhbnNmb3JtT3BlcmF0aW9uIiwib3BlcmF0aW9uIiwiSU5TRVJUX1RZUEUiLCJ0YXUiLCJyaG8iLCJjbG9uZSIsImxlbmd0aCIsImxlZnQiLCJzaGlmdCIsIkRFTEVURV9UWVBFIiwidGFrZW5Gcm9tIiwic3BsaXQiLCJFbXB0eU9wZXJhdGlvbiIsImZyb21Ob3RoaW5nIiwiRU1QVFlfVFlQRSIsInRyYW5zZm9ybUNvbnRlbnQiLCJzdGFydCIsImVuZCIsImxlZnRDb250ZW50Iiwic3Vic3RyaW5nIiwiY29udGVudExlbmd0aCIsInJpZ2h0Q29udGVudCIsInRyYW5zZm9ybWVkQ29udGVudCIsInRyYW5zZm9ybVNlbGVjdGlvbiIsInNlbGVjdGlvbiIsInRyYW5zZm9ybWVkU2VsZWN0aW9uIiwic2VsZWN0aW9uU3RhcnRQb3NpdGlvbiIsImdldFN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIsImVuZFBvc2l0aW9uIiwib2Zmc2V0Iiwic2hpZnRlZCIsImVuZE9mZnNldCIsImVuZFBvc2l0aW9uU2hpZnRlZCIsImVtcHRpZWQiLCJkZWxldGVPcGVyYXRpb24iLCJmcm9tQ29udGVudEFuZFBvc2l0aW9uIiwic2hpZnRlZE9wZXJhdGlvbiIsImludmVydCIsIkluc2VydE9wZXJhdGlvbiIsImluc2VydE9wZXJhdGlvbiIsInRvSlNPTiIsImpzb24iLCJmcm9tSlNPTiIsImZyb21Db250ZW50QW5kU2VsZWN0aW9uIiwiYmVnaW4iLCJzbGljZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFNcUJBOzs7MERBSk07cUJBRTBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXRDLElBQUEsQUFBTUEsZ0NBQU47YUFBTUEsZ0JBQ1BDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxRQUFROzhCQURoQkg7UUFFbEIsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1gsSUFBSSxDQUFDQyxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxRQUFRLEdBQUdBOztpQkFKQ0g7O1lBT25CSSxLQUFBQTttQkFBQUEsU0FBQUEsVUFBVTtnQkFDUixPQUFPLElBQUksQ0FBQ0gsSUFBSTtZQUNsQjs7O1lBRUFJLEtBQUFBO21CQUFBQSxTQUFBQSxhQUFhO2dCQUNYLE9BQU8sSUFBSSxDQUFDSCxPQUFPO1lBQ3JCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWM7Z0JBQ1osT0FBTyxJQUFJLENBQUNILFFBQVE7WUFDdEI7OztZQUVBSSxLQUFBQTttQkFBQUEsU0FBQUEsbUJBQW1CQyxTQUFTLEVBQUU7Z0JBQzVCLElBQU1QLE9BQU9PLFVBQVVKLE9BQU87Z0JBRTlCLE9BQVFIO29CQUNOLEtBQUtRLGtCQUFXO3dCQUNkLE9BQU8sQUFBQyxTQUFDQyxLQUFLQyxLQUFROzRCQUVwQixJQUFJRCxJQUFJUCxRQUFRLElBQUlRLElBQUlSLFFBQVEsRUFBRTtnQ0FDaEMsT0FBTztvQ0FBQ08sSUFBSUUsS0FBSztpQ0FBRzs0QkFDdEIsQ0FBQzs0QkFFRCxJQUFJRixJQUFJUCxRQUFRLEdBQUdRLElBQUlSLFFBQVEsRUFBRTtnQ0FDL0IsSUFBSU8sSUFBSVAsUUFBUSxHQUFHUSxJQUFJVCxPQUFPLENBQUNXLE1BQU0sR0FBR0YsSUFBSVIsUUFBUSxFQUFFO29DQUNwRCxPQUFPO3dDQUFDTyxJQUFJSSxJQUFJLENBQUNILEtBQUtJLEtBQUssQ0FBQ0w7cUNBQUs7Z0NBQ25DLENBQUM7Z0NBRUQsSUFBSUEsSUFBSVAsUUFBUSxJQUFJUSxJQUFJVCxPQUFPLENBQUNXLE1BQU0sR0FBR0YsSUFBSVIsUUFBUSxFQUFFO29DQUNyRCxPQUFPO3dDQUFDUSxJQUFJSSxLQUFLLENBQUNMO3FDQUFLO2dDQUN6QixDQUFDOzRCQUNILENBQUM7d0JBRUgsRUFBR0YsV0FBVyxJQUFJO29CQUVwQixLQUFLUSxrQkFBVzt3QkFDZCxPQUFPLEFBQUMsU0FBQ04sS0FBS0MsS0FBUTs0QkFFcEIsSUFBSUQsSUFBSVAsUUFBUSxHQUFHUSxJQUFJUixRQUFRLEVBQUU7Z0NBQy9CLElBQUlPLElBQUlSLE9BQU8sQ0FBQ1csTUFBTSxHQUFHSCxJQUFJUCxRQUFRLElBQUlRLElBQUlSLFFBQVEsRUFBRTtvQ0FDckQsT0FBTzt3Q0FBQ08sSUFBSUUsS0FBSztxQ0FBRztnQ0FDdEIsQ0FBQztnQ0FFRCxJQUFJRixJQUFJUixPQUFPLENBQUNXLE1BQU0sR0FBR0gsSUFBSVAsUUFBUSxJQUFJUSxJQUFJVCxPQUFPLENBQUNXLE1BQU0sR0FBR0YsSUFBSVIsUUFBUSxFQUFFO29DQUMxRSxPQUFPO3dDQUFDUSxJQUFJTSxTQUFTLENBQUNQO3FDQUFLO2dDQUM3QixDQUFDO2dDQUVELElBQUlBLElBQUlSLE9BQU8sQ0FBQ1csTUFBTSxHQUFHSCxJQUFJUCxRQUFRLEdBQUdRLElBQUlULE9BQU8sQ0FBQ1csTUFBTSxHQUFHRixJQUFJUixRQUFRLEVBQUU7b0NBQ3pFLE9BQU87d0NBQUNRLElBQUlPLEtBQUssQ0FBQ1I7cUNBQUs7Z0NBQ3pCLENBQUM7NEJBQ0gsQ0FBQzs0QkFFRCxJQUFJQSxJQUFJUCxRQUFRLEtBQUtRLElBQUlSLFFBQVEsRUFBRTtnQ0FDakMsSUFBSU8sSUFBSVIsT0FBTyxDQUFDVyxNQUFNLEdBQUdILElBQUlQLFFBQVEsSUFBSVEsSUFBSVQsT0FBTyxDQUFDVyxNQUFNLEdBQUdGLElBQUlSLFFBQVEsRUFBRTtvQ0FDMUUsT0FBTzt3Q0FBQ2dCLGNBQWMsQ0FBQ0MsV0FBVztxQ0FBRztnQ0FDdkMsQ0FBQztnQ0FFRCxJQUFJVixJQUFJUixPQUFPLENBQUNXLE1BQU0sR0FBR0gsSUFBSVAsUUFBUSxHQUFHUSxJQUFJVCxPQUFPLENBQUNXLE1BQU0sR0FBR0YsSUFBSVIsUUFBUSxFQUFFO29DQUN6RSxPQUFPO3dDQUFDUSxJQUFJSSxLQUFLLENBQUNKLElBQUlNLFNBQVMsQ0FBQ1A7cUNBQU07Z0NBQ3hDLENBQUM7NEJBQ0gsQ0FBQzs0QkFFRCxJQUFJQSxJQUFJUCxRQUFRLElBQUlRLElBQUlULE9BQU8sQ0FBQ1csTUFBTSxHQUFHRixJQUFJUixRQUFRLEVBQUU7Z0NBQ3JELE9BQU87b0NBQUNRLElBQUlJLEtBQUssQ0FBQ0w7aUNBQUs7NEJBQ3pCLENBQUM7NEJBRUQsSUFBSUEsSUFBSVAsUUFBUSxHQUFHUSxJQUFJUixRQUFRLEVBQUU7Z0NBQy9CLElBQUlPLElBQUlSLE9BQU8sQ0FBQ1csTUFBTSxHQUFHSCxJQUFJUCxRQUFRLElBQUlRLElBQUlULE9BQU8sQ0FBQ1csTUFBTSxHQUFHRixJQUFJUixRQUFRLEVBQUU7b0NBQzFFLE9BQU87d0NBQUNnQixjQUFjLENBQUNDLFdBQVc7cUNBQUc7Z0NBQ3ZDLENBQUM7Z0NBRUQsSUFBSVYsSUFBSVIsT0FBTyxDQUFDVyxNQUFNLEdBQUdILElBQUlQLFFBQVEsR0FBR1EsSUFBSVQsT0FBTyxDQUFDVyxNQUFNLEdBQUdGLElBQUlSLFFBQVEsRUFBRTtvQ0FDekUsT0FBTzt3Q0FBQ1EsSUFBSUksS0FBSyxDQUFDSixJQUFJTSxTQUFTLENBQUNQO3FDQUFNO2dDQUN4QyxDQUFDOzRCQUNILENBQUM7d0JBRUgsRUFBR0YsV0FBVyxJQUFJO29CQUVwQixLQUFLYSxpQkFBVTt3QkFDYixPQUFPLEFBQUMsU0FBQ1gsS0FBS0MsS0FBUTs0QkFFcEIsT0FBTztnQ0FBQ0QsSUFBSUUsS0FBSzs2QkFBRzt3QkFFdEIsRUFBR0osV0FBVyxJQUFJO2dCQUN0QjtZQUNGOzs7WUFFQWMsS0FBQUE7bUJBQUFBLFNBQUFBLGlCQUFpQnBCLE9BQU8sRUFBRTtnQkFDeEIsSUFBSXFCLE9BQU9DO2dCQUVYRCxRQUFRO2dCQUVSQyxNQUFNLElBQUksQ0FBQ3JCLFFBQVE7Z0JBRW5CLElBQU1zQixjQUFjdkIsUUFBUXdCLFNBQVMsQ0FBQ0gsT0FBT0MsTUFDdkNHLGdCQUFnQixJQUFJLENBQUN6QixPQUFPLENBQUNXLE1BQU07Z0JBRXpDVSxRQUFRLElBQUksQ0FBQ3BCLFFBQVEsR0FBR3dCO2dCQUV4QixJQUFNQyxlQUFlMUIsUUFBUXdCLFNBQVMsQ0FBQ0gsUUFDakNNLHFCQUFxQkosY0FBY0c7Z0JBRXpDLE9BQU9DO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsbUJBQW1CQyxTQUFTLEVBQUU7Z0JBQzVCLElBQUlDO2dCQUVKLElBQU1DLHlCQUF5QkYsVUFBVUcsZ0JBQWdCLElBQ25EQyx1QkFBdUJKLFVBQVVLLGNBQWMsSUFDL0NULGdCQUFnQixJQUFJLENBQUN6QixPQUFPLENBQUNXLE1BQU0sRUFDbkN3QixnQkFBZ0IsSUFBSSxDQUFDbEMsUUFBUSxFQUM3Qm1DLGNBQWNELGdCQUFnQlY7Z0JBRXBDLElBQUksS0FBSyxFQUFFO2dCQUNULEdBQUc7Z0JBQ0wsT0FBTyxJQUFJTSwwQkFBMEJLLGFBQWE7b0JBQ2hELElBQU1DLFNBQVMsQ0FBQ1o7b0JBRWhCSyx1QkFBdUJELFVBQVVTLE9BQU8sQ0FBQ0Q7Z0JBQzNDLE9BQU8sSUFBSU4sMEJBQTBCSSxlQUFlO29CQUNsRCxJQUFJRix1QkFBdUJHLGFBQWE7d0JBQ3RDLElBQU1DLFVBQVNGLGdCQUFnQkosd0JBQ3pCUSxZQUFZUix5QkFBeUJLO3dCQUUzQ04sdUJBQXVCRCxVQUFVUyxPQUFPLENBQUNELFNBQVFHLGtCQUFrQixDQUFDRDtvQkFDdEUsT0FBTzt3QkFDTFQsdUJBQXVCRCxVQUFVWSxPQUFPO29CQUMxQyxDQUFDO2dCQUNILE9BQU8sSUFBSVIsdUJBQXVCRyxhQUFhO29CQUM3QyxJQUFNRyxhQUFZLENBQUNkO29CQUVuQkssdUJBQXVCRCxVQUFVVyxrQkFBa0IsQ0FBQ0Q7Z0JBQ3RELE9BQU8sSUFBSU4sdUJBQXVCRSxlQUFlO29CQUMvQyxJQUFNSSxhQUFZSixnQkFBZ0JGO29CQUVsQ0gsdUJBQXVCRCxVQUFVVyxrQkFBa0IsQ0FBQ0Q7Z0JBQ3RELE9BQU87b0JBQ0xULHVCQUF1QkQsVUFBVW5CLEtBQUs7Z0JBQ3hDLENBQUM7Z0JBRUQsT0FBT29CO1lBQ1Q7OztZQUVBUSxLQUFBQTttQkFBQUEsU0FBQUEsUUFBUUQsTUFBTSxFQUFFO2dCQUNkLElBQU1yQyxVQUFVLElBQUksQ0FBQ0EsT0FBTyxFQUN0QkMsV0FBVyxJQUFJLENBQUNBLFFBQVEsR0FBR29DLFFBQzNCSyxrQkFBa0I1QyxBQTFKUEEsZ0JBMEp1QjZDLHNCQUFzQixDQUFDM0MsU0FBU0M7Z0JBRXhFLE9BQU95QztZQUNUOzs7WUFFQTdCLEtBQUFBO21CQUFBQSxTQUFBQSxNQUFNUCxTQUFTLEVBQUU7Z0JBQ2YsSUFBTW1CLGdCQUFnQixJQUFJLENBQUN6QixPQUFPLENBQUNXLE1BQU0sRUFDbkMwQixTQUFTLENBQUNaLGVBQ1ZtQixtQkFBbUJ0QyxVQUFVZ0MsT0FBTyxDQUFDRDtnQkFFM0MsT0FBT087WUFDVDs7O1lBRUE3QixLQUFBQTttQkFBQUEsU0FBQUEsVUFBVTJCLGVBQWUsRUFBRTtnQkFDekIsSUFBSTFDLFVBQVUwQyxnQkFBZ0J2QyxVQUFVLElBQ3BDRixXQUFXeUMsZ0JBQWdCdEMsV0FBVztnQkFFMUMsSUFBSXFCLGdCQUFnQnpCLFFBQVFXLE1BQU07Z0JBRWxDLElBQUksQUFBQyxJQUFJLENBQUNWLFFBQVEsR0FBR0EsWUFBYyxJQUFJLENBQUNBLFFBQVEsR0FBRyxJQUFJLENBQUNELE9BQU8sQ0FBQ1csTUFBTSxJQUFJVixXQUFXd0IsZUFBZ0I7b0JBQ25HLElBQU1BLGlCQUFnQixJQUFJLENBQUN4QixRQUFRLEdBQUdBLFVBQ2hDb0IsUUFBUSxHQUNSQyxNQUFNRCxRQUFRSSxnQkFBZ0IsR0FBRztvQkFFdkN6QixVQUFVQSxRQUFRd0IsU0FBUyxDQUFDSCxPQUFPQztvQkFFbkNvQixrQkFBa0I1QyxBQXBMSEEsZ0JBb0xtQjZDLHNCQUFzQixDQUFDM0MsU0FBU0M7Z0JBQ3BFLENBQUM7Z0JBRUQsSUFBSSxBQUFDLElBQUksQ0FBQ0EsUUFBUSxJQUFJQSxZQUFjLElBQUksQ0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQ0QsT0FBTyxDQUFDVyxNQUFNLEdBQUdWLFdBQVd3QixlQUFnQjtvQkFDbkdBLGdCQUFnQixBQUFDeEIsV0FBV3dCLGdCQUFrQixDQUFBLElBQUksQ0FBQ3hCLFFBQVEsR0FBRyxJQUFJLENBQUNELE9BQU8sQ0FBQ1csTUFBTSxBQUFEO29CQUVoRixJQUFNVSxTQUFRLEFBQUMsSUFBSSxDQUFDcEIsUUFBUSxHQUFHLElBQUksQ0FBQ0QsT0FBTyxDQUFDVyxNQUFNLEdBQUlWLFVBQ2hEcUIsT0FBTUQsU0FBUUksZUFBZ0IsR0FBRztvQkFFdkN4QixXQUFXLElBQUksQ0FBQ0EsUUFBUSxHQUFHLElBQUksQ0FBQ0QsT0FBTyxDQUFDVyxNQUFNO29CQUU5Q1gsVUFBVUEsUUFBUXdCLFNBQVMsQ0FBQ0gsUUFBT0M7b0JBRW5Db0Isa0JBQWtCNUMsQUFqTUhBLGdCQWlNbUI2QyxzQkFBc0IsQ0FBQzNDLFNBQVNDO2dCQUNwRSxDQUFDO2dCQUVELE9BQU95QztZQUNUOzs7WUFFQTFCLEtBQUFBO21CQUFBQSxTQUFBQSxNQUFNMEIsZUFBZSxFQUFFO2dCQUNyQixJQUFJMUMsVUFBVTBDLGdCQUFnQnZDLFVBQVUsSUFDcENGLFdBQVd5QyxnQkFBZ0J0QyxXQUFXO2dCQUUxQyxJQUFJaUIsT0FDQUM7Z0JBRUpELFFBQVE7Z0JBRVJDLE1BQU0sSUFBSSxDQUFDckIsUUFBUSxHQUFHQTtnQkFFdEIsSUFBTXNCLGNBQWN2QixRQUFRd0IsU0FBUyxDQUFDSCxPQUFPQztnQkFFN0NELFFBQVEsSUFBSSxDQUFDcEIsUUFBUSxHQUFHQSxXQUFXLElBQUksQ0FBQ0QsT0FBTyxDQUFDVyxNQUFNO2dCQUV0RCxJQUFNZSxlQUFlMUIsUUFBUXdCLFNBQVMsQ0FBQ0g7Z0JBRXZDckIsVUFBVXVCLGNBQWNHO2dCQUV4QmdCLGtCQUFrQjVDLEFBMU5EQSxnQkEwTmlCNkMsc0JBQXNCLENBQUMzQyxTQUFTQztnQkFFbEUsT0FBT3lDO1lBQ1Q7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsT0FBT0MsZUFBZSxFQUFFaEQsZUFBZSxFQUFFO2dCQUN2QyxJQUFNaUQsa0JBQWtCRCxnQkFBZ0JILHNCQUFzQixDQUFDLElBQUksQ0FBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUNDLFFBQVE7Z0JBRTFGLE9BQU84QztZQUNUOzs7WUFFQXJDLEtBQUFBO21CQUFBQSxTQUFBQSxRQUFRO2dCQUNOLElBQU1nQyxrQkFBa0I1QyxBQXRPUEEsZ0JBc091QjZDLHNCQUFzQixDQUFDLElBQUksQ0FBQzNDLE9BQU8sRUFBRSxJQUFJLENBQUNDLFFBQVE7Z0JBRTFGLE9BQU95QztZQUNUOzs7WUFFQU0sS0FBQUE7bUJBQUFBLFNBQUFBLFNBQVM7Z0JBQ1AsSUFBTWpELE9BQU8sSUFBSSxDQUFDQSxJQUFJLEVBQ2hCQyxVQUFVLElBQUksQ0FBQ0EsT0FBTyxFQUN0QkMsV0FBVyxJQUFJLENBQUNBLFFBQVEsRUFDeEJnRCxPQUFPO29CQUNMbEQsTUFBQUE7b0JBQ0FDLFNBQUFBO29CQUNBQyxVQUFBQTtnQkFDRjtnQkFFTixPQUFPZ0Q7WUFDVDs7OztZQUVPQyxLQUFBQTttQkFBUCxTQUFPQSxTQUFTRCxJQUFJLEVBQUU7Z0JBQ3BCLElBQVFsRCxPQUE0QmtELEtBQTVCbEQsTUFBTUMsVUFBc0JpRCxLQUF0QmpELFNBQVNDLFdBQWFnRCxLQUFiaEQsVUFDakJ5QyxrQkFBa0IsSUExUFA1QyxnQkEwUDJCQyxNQUFNQyxTQUFTQztnQkFFM0QsT0FBT3lDO1lBQ1Q7OztZQUVPQyxLQUFBQTttQkFBUCxTQUFPQSx1QkFBdUIzQyxPQUFPLEVBQUVDLFFBQVEsRUFBRTtnQkFDL0MsSUFBTUYsT0FBT2Usa0JBQVcsRUFDbEI0QixrQkFBa0IsSUFqUVA1QyxnQkFpUTJCQyxNQUFNQyxTQUFTQztnQkFFM0QsT0FBT3lDO1lBQ1Q7OztZQUVPUyxLQUFBQTttQkFBUCxTQUFPQSx3QkFBd0JuRCxPQUFPLEVBQUU2QixTQUFTLEVBQUU7Z0JBQ2pELElBQU1NLGdCQUFnQk4sVUFBVUcsZ0JBQWdCLElBQzFDSSxjQUFjUCxVQUFVSyxjQUFjLElBQ3RDa0IsUUFBUWpCLGVBQ1JiLE1BQU1jLGFBQWMsR0FBRztnQkFFN0JwQyxVQUFVQSxRQUFRcUQsS0FBSyxDQUFDRCxPQUFPOUIsTUFBTyxHQUFHO2dCQUV6QyxJQUFNdkIsT0FBT2Usa0JBQVcsRUFDbEJiLFdBQVdrQyxlQUNYTyxrQkFBa0IsSUFoUlA1QyxnQkFnUjJCQyxNQUFNQyxTQUFTQztnQkFFM0QsT0FBT3lDO1lBQ1Q7OztXQW5SbUI1QyJ9
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vcGVyYXRpb24vZGVsZXRlLmpzIiwiPDxqc3gtY29uZmlnLXByYWdtYS5qcz4+Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IEVtcHR5T3BlcmF0aW9uIGZyb20gXCIuLi9vcGVyYXRpb24vZW1wdHlcIjtcclxuXHJcbmltcG9ydCB7IElOU0VSVF9UWVBFLCBERUxFVEVfVFlQRSwgRU1QVFlfVFlQRSB9IGZyb20gXCIuLi90eXBlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGVsZXRlT3BlcmF0aW9uIHtcclxuICBjb25zdHJ1Y3Rvcih0eXBlLCBjb250ZW50LCBwb3NpdGlvbikge1xyXG5cdCAgdGhpcy50eXBlID0gdHlwZTtcclxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBnZXRUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHlwZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9zaXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybU9wZXJhdGlvbihvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHR5cGUgPSBvcGVyYXRpb24uZ2V0VHlwZSgpO1xyXG5cclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIElOU0VSVF9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8PSByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uIDwgcmhvLmNvbnRlbnQubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFt0YXUubGVmdChyaG8pLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGF1LnBvc2l0aW9uID49IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcblxyXG4gICAgICBjYXNlIERFTEVURV9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA8IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbdGF1LmNsb25lKCldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnRha2VuRnJvbSh0YXUpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhdS5jb250ZW50Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA+IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNwbGl0KHRhdSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA9PT0gcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXUuY29udGVudC5sZW5ndGggKyB0YXUucG9zaXRpb24gPD0gcmhvLmNvbnRlbnQubGVuZ3RoICsgcmhvLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtFbXB0eU9wZXJhdGlvbi5mcm9tTm90aGluZygpXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhdS5jb250ZW50Lmxlbmd0aCArIHRhdS5wb3NpdGlvbiA+IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbcmhvLnNoaWZ0KHJoby50YWtlbkZyb20odGF1KSldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+PSByaG8uY29udGVudC5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtyaG8uc2hpZnQodGF1KV07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRhdS5wb3NpdGlvbiA+IHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGF1LmNvbnRlbnQubGVuZ3RoICsgdGF1LnBvc2l0aW9uIDw9IHJoby5jb250ZW50Lmxlbmd0aCArIHJoby5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHJldHVybiBbRW1wdHlPcGVyYXRpb24uZnJvbU5vdGhpbmcoKV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0YXUuY29udGVudC5sZW5ndGggKyB0YXUucG9zaXRpb24gPiByaG8uY29udGVudC5sZW5ndGggKyByaG8ucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gW3Joby5zaGlmdChyaG8udGFrZW5Gcm9tKHRhdSkpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KShvcGVyYXRpb24sIHRoaXMpO1xyXG5cclxuICAgICAgY2FzZSBFTVBUWV9UWVBFOlxyXG4gICAgICAgIHJldHVybiAoKHRhdSwgcmhvKSA9PiB7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIFt0YXUuY2xvbmUoKV07XHJcblxyXG4gICAgICAgIH0pKG9wZXJhdGlvbiwgdGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQpIHtcclxuICAgIGxldCBzdGFydCwgZW5kO1xyXG5cclxuICAgIHN0YXJ0ID0gMDtcclxuXHJcbiAgICBlbmQgPSB0aGlzLnBvc2l0aW9uO1xyXG5cclxuICAgIGNvbnN0IGxlZnRDb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCksXHJcbiAgICAgICAgICBjb250ZW50TGVuZ3RoID0gdGhpcy5jb250ZW50Lmxlbmd0aDtcclxuXHJcbiAgICBzdGFydCA9IHRoaXMucG9zaXRpb24gKyBjb250ZW50TGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KSxcclxuICAgICAgICAgIHRyYW5zZm9ybWVkQ29udGVudCA9IGxlZnRDb250ZW50ICsgcmlnaHRDb250ZW50O1xyXG5cclxuICAgIHJldHVybiB0cmFuc2Zvcm1lZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKSB7XHJcbiAgICBsZXQgdHJhbnNmb3JtZWRTZWxlY3Rpb247XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgY29udGVudExlbmd0aCA9IHRoaXMuY29udGVudC5sZW5ndGgsXHJcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiwgLy8vXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBjb250ZW50TGVuZ3RoO1xyXG5cclxuICAgIGlmIChmYWxzZSkge1xyXG4gICAgICAvLy9cclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikge1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSAtY29udGVudExlbmd0aDtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLnNoaWZ0ZWQob2Zmc2V0KTtcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiA+PSBzdGFydFBvc2l0aW9uKSB7XHJcbiAgICAgIGlmIChzZWxlY3Rpb25FbmRQb3NpdGlvbiA+IGVuZFBvc2l0aW9uKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRQb3NpdGlvbiAtIHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiAtIGVuZFBvc2l0aW9uO1xyXG5cclxuICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zaGlmdGVkKG9mZnNldCkuZW5kUG9zaXRpb25TaGlmdGVkKGVuZE9mZnNldCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRQb3NpdGlvbiAtIHNlbGVjdGlvblN0YXJ0UG9zaXRpb247XHJcblxyXG4gICAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmVtcHRpZWQoKS5zaGlmdGVkKG9mZnNldCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uRW5kUG9zaXRpb24gPiBlbmRQb3NpdGlvbikge1xyXG4gICAgICBjb25zdCBlbmRPZmZzZXQgPSAtY29udGVudExlbmd0aDtcclxuXHJcbiAgICAgIHRyYW5zZm9ybWVkU2VsZWN0aW9uID0gc2VsZWN0aW9uLmVuZFBvc2l0aW9uU2hpZnRlZChlbmRPZmZzZXQpO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb25FbmRQb3NpdGlvbiA+IHN0YXJ0UG9zaXRpb24pIHtcclxuICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gc3RhcnRQb3NpdGlvbiAtIHNlbGVjdGlvbkVuZFBvc2l0aW9uO1xyXG5cclxuICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZW5kUG9zaXRpb25TaGlmdGVkKGVuZE9mZnNldCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5jbG9uZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cmFuc2Zvcm1lZFNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHNoaWZ0ZWQob2Zmc2V0KSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50LFxyXG4gICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uICsgb2Zmc2V0LFxyXG4gICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kUG9zaXRpb24oY29udGVudCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBzaGlmdChvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSB0aGlzLmNvbnRlbnQubGVuZ3RoLFxyXG4gICAgICAgICAgb2Zmc2V0ID0gLWNvbnRlbnRMZW5ndGgsXHJcbiAgICAgICAgICBzaGlmdGVkT3BlcmF0aW9uID0gb3BlcmF0aW9uLnNoaWZ0ZWQob2Zmc2V0KTtcclxuXHJcbiAgICByZXR1cm4gc2hpZnRlZE9wZXJhdGlvblxyXG4gIH1cclxuXHJcbiAgdGFrZW5Gcm9tKGRlbGV0ZU9wZXJhdGlvbikge1xyXG4gICAgbGV0IGNvbnRlbnQgPSBkZWxldGVPcGVyYXRpb24uZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHBvc2l0aW9uID0gZGVsZXRlT3BlcmF0aW9uLmdldFBvc2l0aW9uKCk7XHJcblxyXG4gICAgbGV0IGNvbnRlbnRMZW5ndGggPSBjb250ZW50Lmxlbmd0aDtcclxuXHJcbiAgICBpZiAoKHRoaXMucG9zaXRpb24gPiBwb3NpdGlvbikgJiYgKHRoaXMucG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoID49IHBvc2l0aW9uICsgY29udGVudExlbmd0aCkpIHtcclxuICAgICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXMucG9zaXRpb24gLSBwb3NpdGlvbixcclxuICAgICAgICAgICAgc3RhcnQgPSAwLFxyXG4gICAgICAgICAgICBlbmQgPSBzdGFydCArIGNvbnRlbnRMZW5ndGg7ICAvLy9cclxuXHJcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhzdGFydCwgZW5kKTtcclxuXHJcbiAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKGNvbnRlbnQsIHBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoKHRoaXMucG9zaXRpb24gPD0gcG9zaXRpb24pICYmICh0aGlzLnBvc2l0aW9uICsgdGhpcy5jb250ZW50Lmxlbmd0aCA8IHBvc2l0aW9uICsgY29udGVudExlbmd0aCkpIHtcclxuICAgICAgY29udGVudExlbmd0aCA9IChwb3NpdGlvbiArIGNvbnRlbnRMZW5ndGgpIC0gKHRoaXMucG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoKTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMucG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoKSAtIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICBlbmQgPSBzdGFydCArIGNvbnRlbnRMZW5ndGg7ICAvLy9cclxuXHJcbiAgICAgIHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbiArIHRoaXMuY29udGVudC5sZW5ndGg7XHJcblxyXG4gICAgICBjb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XHJcblxyXG4gICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRQb3NpdGlvbihjb250ZW50LCBwb3NpdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlbGV0ZU9wZXJhdGlvbjtcclxuICB9XHJcblxyXG4gIHNwbGl0KGRlbGV0ZU9wZXJhdGlvbikge1xyXG4gICAgbGV0IGNvbnRlbnQgPSBkZWxldGVPcGVyYXRpb24uZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHBvc2l0aW9uID0gZGVsZXRlT3BlcmF0aW9uLmdldFBvc2l0aW9uKCk7XHJcblxyXG4gICAgbGV0IHN0YXJ0LFxyXG4gICAgICAgIGVuZDtcclxuXHJcbiAgICBzdGFydCA9IDA7XHJcblxyXG4gICAgZW5kID0gdGhpcy5wb3NpdGlvbiAtIHBvc2l0aW9uO1xyXG5cclxuICAgIGNvbnN0IGxlZnRDb250ZW50ID0gY29udGVudC5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XHJcblxyXG4gICAgc3RhcnQgPSB0aGlzLnBvc2l0aW9uIC0gcG9zaXRpb24gKyB0aGlzLmNvbnRlbnQubGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHJpZ2h0Q29udGVudCA9IGNvbnRlbnQuc3Vic3RyaW5nKHN0YXJ0KTtcclxuXHJcbiAgICBjb250ZW50ID0gbGVmdENvbnRlbnQgKyByaWdodENvbnRlbnQ7XHJcblxyXG4gICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kUG9zaXRpb24oY29udGVudCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBpbnZlcnQoSW5zZXJ0T3BlcmF0aW9uLCBEZWxldGVPcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IGluc2VydE9wZXJhdGlvbiA9IEluc2VydE9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFBvc2l0aW9uKHRoaXMuY29udGVudCwgdGhpcy5wb3NpdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIGluc2VydE9wZXJhdGlvbjtcclxuICB9XHJcblxyXG4gIGNsb25lKCkge1xyXG4gICAgY29uc3QgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kUG9zaXRpb24odGhpcy5jb250ZW50LCB0aGlzLnBvc2l0aW9uKTtcclxuXHJcbiAgICByZXR1cm4gZGVsZXRlT3BlcmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgdG9KU09OKCkge1xyXG4gICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZSxcclxuICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQsXHJcbiAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb24sXHJcbiAgICAgICAgICBqc29uID0ge1xyXG4gICAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgcmV0dXJuIGpzb247XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbikge1xyXG4gICAgY29uc3QgeyB0eXBlLCBjb250ZW50LCBwb3NpdGlvbiB9ID0ganNvbixcclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IG5ldyBEZWxldGVPcGVyYXRpb24odHlwZSwgY29udGVudCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRQb3NpdGlvbihjb250ZW50LCBwb3NpdGlvbikge1xyXG4gICAgY29uc3QgdHlwZSA9IERFTEVURV9UWVBFLCAvLy9cclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IG5ldyBEZWxldGVPcGVyYXRpb24odHlwZSwgY29udGVudCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSB7XHJcbiAgICBjb25zdCBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBiZWdpbiA9IHN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uOyAgLy8vXHJcblxyXG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoYmVnaW4sIGVuZCk7ICAvLy9cclxuXHJcbiAgICBjb25zdCB0eXBlID0gREVMRVRFX1RZUEUsIC8vL1xyXG4gICAgICAgICAgcG9zaXRpb24gPSBzdGFydFBvc2l0aW9uLCAvLy9cclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IG5ldyBEZWxldGVPcGVyYXRpb24odHlwZSwgY29udGVudCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBkZWxldGVPcGVyYXRpb247XHJcbiAgfVxyXG59XHJcbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiRGVsZXRlT3BlcmF0aW9uIiwidHlwZSIsImNvbnRlbnQiLCJwb3NpdGlvbiIsImdldFR5cGUiLCJnZXRDb250ZW50IiwiZ2V0UG9zaXRpb24iLCJ0cmFuc2Zvcm1PcGVyYXRpb24iLCJvcGVyYXRpb24iLCJJTlNFUlRfVFlQRSIsInRhdSIsInJobyIsImNsb25lIiwibGVuZ3RoIiwibGVmdCIsInNoaWZ0IiwiREVMRVRFX1RZUEUiLCJ0YWtlbkZyb20iLCJzcGxpdCIsIkVtcHR5T3BlcmF0aW9uIiwiZnJvbU5vdGhpbmciLCJFTVBUWV9UWVBFIiwidHJhbnNmb3JtQ29udGVudCIsInN0YXJ0IiwiZW5kIiwibGVmdENvbnRlbnQiLCJzdWJzdHJpbmciLCJjb250ZW50TGVuZ3RoIiwicmlnaHRDb250ZW50IiwidHJhbnNmb3JtZWRDb250ZW50IiwidHJhbnNmb3JtU2VsZWN0aW9uIiwic2VsZWN0aW9uIiwidHJhbnNmb3JtZWRTZWxlY3Rpb24iLCJzZWxlY3Rpb25TdGFydFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsInNlbGVjdGlvbkVuZFBvc2l0aW9uIiwiZ2V0RW5kUG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiwiZW5kUG9zaXRpb24iLCJvZmZzZXQiLCJzaGlmdGVkIiwiZW5kT2Zmc2V0IiwiZW5kUG9zaXRpb25TaGlmdGVkIiwiZW1wdGllZCIsImRlbGV0ZU9wZXJhdGlvbiIsImZyb21Db250ZW50QW5kUG9zaXRpb24iLCJzaGlmdGVkT3BlcmF0aW9uIiwiaW52ZXJ0IiwiSW5zZXJ0T3BlcmF0aW9uIiwiaW5zZXJ0T3BlcmF0aW9uIiwidG9KU09OIiwianNvbiIsImZyb21KU09OIiwiZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24iLCJiZWdpbiIsInNsaWNlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQU1xQkE7OzswREFKTTtxQkFFMEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEMsSUFBQSxBQUFNQSxnQ0FBTjthQUFNQSxnQkFDUEMsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLFFBQVE7OEJBRGhCSDtRQUVsQixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWCxJQUFJLENBQUNDLE9BQU8sR0FBR0E7UUFDZixJQUFJLENBQUNDLFFBQVEsR0FBR0E7O2lCQUpDSDs7WUFPbkJJLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVO2dCQUNSLE9BQU8sSUFBSSxDQUFDSCxJQUFJO1lBQ2xCOzs7WUFFQUksS0FBQUE7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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": "4.0.15",
4
+ "version": "4.0.16",
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.",
@@ -138,7 +138,9 @@ export default class DeleteOperation {
138
138
 
139
139
  transformedSelection = selection.shifted(offset).endPositionShifted(endOffset);
140
140
  } else {
141
- transformedSelection = selection.emptied();
141
+ const offset = startPosition - selectionStartPosition;
142
+
143
+ transformedSelection = selection.emptied().shifted(offset);
142
144
  }
143
145
  } else if (selectionEndPosition > endPosition) {
144
146
  const endOffset = -contentLength;
@@ -2,7 +2,7 @@
2
2
 
3
3
  const { assert } = require("chai"),
4
4
  { arrayUtilities } = require("necessary"),
5
- { EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
5
+ { Selection, EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
6
6
 
7
7
  const { first } = arrayUtilities;
8
8
 
@@ -270,8 +270,113 @@ describe("DeleteOperation", () => {
270
270
  });
271
271
  });
272
272
 
273
+ describe("#transformSelection", () => {
274
+ let deleteOperation;
275
+
276
+ beforeEach(() => {
277
+ const content = "jUb",
278
+ position = 4;
279
+
280
+ deleteOperation = DeleteOperation.fromContentAndPosition(content, position);
281
+ });
282
+
283
+ describe("the selection is to its left", () => {
284
+ it("leaves the selection intact", () => {
285
+ const startPosition = 1,
286
+ endPosition = 2,
287
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
288
+ transformedSelection = deleteOperation.transformSelection(selection),
289
+ expectedSelection = selection,
290
+ transformedSelectionJSON = transformedSelection.toJSON(),
291
+ expectedSelectionJSON = expectedSelection.toJSON();
292
+
293
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
294
+ });
295
+ });
296
+
297
+ describe("the selection overlaps its left", () => {
298
+ it("trims the selection's right", () => {
299
+ const startPosition = 1,
300
+ endPosition = 5,
301
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
302
+ transformedSelection = deleteOperation.transformSelection(selection),
303
+ expectedStartPosition = 1,
304
+ expectedEndPosition = 4,
305
+ expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
306
+ transformedSelectionJSON = transformedSelection.toJSON(),
307
+ expectedSelectionJSON = expectedSelection.toJSON();
308
+
309
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
310
+ });
311
+ });
312
+
313
+ describe("the selection overlaps it completely", () => {
314
+ it("trims the selections's right by its length", () => {
315
+ const startPosition = 1,
316
+ endPosition = 10,
317
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
318
+ transformedSelection = deleteOperation.transformSelection(selection),
319
+ expectedStartPosition = 1,
320
+ expectedEndPosition = 7,
321
+ expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
322
+ transformedSelectionJSON = transformedSelection.toJSON(),
323
+ expectedSelectionJSON = expectedSelection.toJSON();
324
+
325
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
326
+ });
327
+ });
328
+
329
+ describe("the selection overlaps its right", () => {
330
+ it("trims the selections's left and moves the selection left by its length", () => {
331
+ const startPosition = 5,
332
+ endPosition = 8,
333
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
334
+ transformedSelection = deleteOperation.transformSelection(selection),
335
+ expectedStartPosition = 4,
336
+ expectedEndPosition = 5,
337
+ expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
338
+ transformedSelectionJSON = transformedSelection.toJSON(),
339
+ expectedSelectionJSON = expectedSelection.toJSON();
340
+
341
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
342
+ });
343
+ });
344
+
345
+ describe("the selection is completely to its right", () => {
346
+ it("moves the selection left by its length", () => {
347
+ const startPosition = 8,
348
+ endPosition = 10,
349
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
350
+ transformedSelection = deleteOperation.transformSelection(selection),
351
+ expectedStartPosition = 5,
352
+ expectedEndPosition = 7,
353
+ expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
354
+ transformedSelectionJSON = transformedSelection.toJSON(),
355
+ expectedSelectionJSON = expectedSelection.toJSON();
356
+
357
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
358
+ });
359
+ });
360
+
361
+ describe("the selection is completely overlapped", () => {
362
+ it("moves both the selection's start and end points to its left edge", () => {
363
+ const startPosition = 5,
364
+ endPosition = 6,
365
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
366
+ transformedSelection = deleteOperation.transformSelection(selection),
367
+ expectedStartPosition = 4,
368
+ expectedEndPosition = 4,
369
+ expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
370
+ transformedSelectionJSON = transformedSelection.toJSON(),
371
+ expectedSelectionJSON = expectedSelection.toJSON();
372
+
373
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
374
+ });
375
+ });
376
+ });
377
+
273
378
  describe("fromJSON, toJSON", () => {
274
- it("transforms from and to JSON, leaving the operation unchanged", () => {
379
+ it("transforms from and to JSON, leaving the operation intact", () => {
275
380
  const expectedJSON = {
276
381
  "type": "delete",
277
382
  "content": "bcd",
@@ -2,7 +2,7 @@
2
2
 
3
3
  const { assert } = require("chai"),
4
4
  { arrayUtilities } = require("necessary"),
5
- { EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
5
+ { Selection, EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
6
6
 
7
7
  const { first } = arrayUtilities;
8
8
 
@@ -68,8 +68,28 @@ describe("EmptyOperation", () => {
68
68
  });
69
69
  });
70
70
 
71
+ describe("#transformSelection", () => {
72
+ let emptyOperation;
73
+
74
+ beforeEach(() => {
75
+ emptyOperation = EmptyOperation.fromNothing();
76
+ });
77
+
78
+ it("leaves the selection intact", () => {
79
+ const startPosition = 3,
80
+ endPosition = 6,
81
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
82
+ transformedSelection = emptyOperation.transformSelection(selection),
83
+ expectedSelection = selection, ///
84
+ transformedSelectionJSON = transformedSelection.toJSON(),
85
+ expectedSelectionJSON = expectedSelection.toJSON();
86
+
87
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
88
+ });
89
+ });
90
+
71
91
  describe("fromJSON, toJSON", () => {
72
- it("transforms from and to JSON, leaving the operation unchanged", () => {
92
+ it("transforms from and to JSON, leaving the operation intact", () => {
73
93
  const expectedJSON = {
74
94
  "type": "empty"
75
95
  },
@@ -2,7 +2,7 @@
2
2
 
3
3
  const { assert } = require("chai"),
4
4
  { arrayUtilities } = require("necessary"),
5
- { EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
5
+ { Selection, EmptyOperation, DeleteOperation, InsertOperation } = require("../../lib/browser"); ///
6
6
 
7
7
  const { first, second } = arrayUtilities;
8
8
 
@@ -202,8 +202,97 @@ describe("InsertOperation", () => {
202
202
  });
203
203
  });
204
204
 
205
+ describe("#transformSelection", () => {
206
+ let insertOperation;
207
+
208
+ beforeEach(() => {
209
+ const content = "JHg",
210
+ position = 4;
211
+
212
+ insertOperation = InsertOperation.fromContentAndPosition(content, position);
213
+ });
214
+
215
+ describe("the selection is to its left", () => {
216
+ it("leaves the selection intact", () => {
217
+ const startPosition = 1,
218
+ endPosition = 2,
219
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
220
+ transformedSelection = insertOperation.transformSelection(selection),
221
+ expectedSelection = selection, ///
222
+ transformedSelectionJSON = transformedSelection.toJSON(),
223
+ expectedSelectionJSON = expectedSelection.toJSON();
224
+
225
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
226
+ });
227
+ });
228
+
229
+ describe("the selection overlaps its left", () => {
230
+ it("moves the selections's right by its length", () => {
231
+ const startPosition = 1,
232
+ endPosition = 5,
233
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
234
+ transformedSelection = insertOperation.transformSelection(selection),
235
+ expectedStartPosition = 1,
236
+ expectedEndPosition = 8,
237
+ expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
238
+ transformedSelectionJSON = transformedSelection.toJSON(),
239
+ expectedSelectionJSON = expectedSelection.toJSON();
240
+
241
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
242
+ });
243
+ });
244
+
245
+ describe("the selection overlaps it completely, moves the selections's right by its length", () => {
246
+ it("the selection overlaps it completely, moves the selections's right by its length", () => {
247
+ const startPosition = 1,
248
+ endPosition = 10,
249
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
250
+ transformedSelection = insertOperation.transformSelection(selection),
251
+ expectedStartPosition = 1,
252
+ expectedEndPosition = 13,
253
+ expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
254
+ transformedSelectionJSON = transformedSelection.toJSON(),
255
+ expectedSelectionJSON = expectedSelection.toJSON();
256
+
257
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
258
+ });
259
+ });
260
+
261
+ describe("the selection overlaps its right", () => {
262
+ it("moves the selection right by its length", () => {
263
+ const startPosition = 5,
264
+ endPosition = 8,
265
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
266
+ transformedSelection = insertOperation.transformSelection(selection),
267
+ expectedStartPosition = 8,
268
+ expectedEndPosition = 11,
269
+ expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
270
+ transformedSelectionJSON = transformedSelection.toJSON(),
271
+ expectedSelectionJSON = expectedSelection.toJSON();
272
+
273
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
274
+ });
275
+ });
276
+
277
+ describe("the selection is completely to its right", () => {
278
+ it("moves the selection right by its length", () => {
279
+ const startPosition = 8,
280
+ endPosition = 10,
281
+ selection = Selection.fromStartPositionAndEndPosition(startPosition, endPosition),
282
+ transformedSelection = insertOperation.transformSelection(selection),
283
+ expectedStartPosition = 11,
284
+ expectedEndPosition = 13,
285
+ expectedSelection = Selection.fromStartPositionAndEndPosition(expectedStartPosition, expectedEndPosition),
286
+ transformedSelectionJSON = transformedSelection.toJSON(),
287
+ expectedSelectionJSON = expectedSelection.toJSON();
288
+
289
+ assert.deepEqual(transformedSelectionJSON, expectedSelectionJSON);
290
+ });
291
+ });
292
+ });
293
+
205
294
  describe("fromJSON, toJSON", () => {
206
- it("transforms from and to JSON, leaving the operation unchanged", () => {
295
+ it("transforms from and to JSON, leaving the operation intact", () => {
207
296
  const expectedJSON = {
208
297
  "type": "insert",
209
298
  "content": "a",