[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/js/dist/ -> block-editor.js (source)

   1  this["wp"] = this["wp"] || {}; this["wp"]["blockEditor"] =
   2  /******/ (function(modules) { // webpackBootstrap
   3  /******/     // The module cache
   4  /******/     var installedModules = {};
   5  /******/
   6  /******/     // The require function
   7  /******/ 	function __webpack_require__(moduleId) {
   8  /******/
   9  /******/         // Check if module is in cache
  10  /******/         if(installedModules[moduleId]) {
  11  /******/             return installedModules[moduleId].exports;
  12  /******/         }
  13  /******/         // Create a new module (and put it into the cache)
  14  /******/         var module = installedModules[moduleId] = {
  15  /******/             i: moduleId,
  16  /******/             l: false,
  17  /******/             exports: {}
  18  /******/         };
  19  /******/
  20  /******/         // Execute the module function
  21  /******/         modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  22  /******/
  23  /******/         // Flag the module as loaded
  24  /******/         module.l = true;
  25  /******/
  26  /******/         // Return the exports of the module
  27  /******/         return module.exports;
  28  /******/     }
  29  /******/
  30  /******/
  31  /******/     // expose the modules object (__webpack_modules__)
  32  /******/     __webpack_require__.m = modules;
  33  /******/
  34  /******/     // expose the module cache
  35  /******/     __webpack_require__.c = installedModules;
  36  /******/
  37  /******/     // define getter function for harmony exports
  38  /******/     __webpack_require__.d = function(exports, name, getter) {
  39  /******/         if(!__webpack_require__.o(exports, name)) {
  40  /******/             Object.defineProperty(exports, name, { enumerable: true, get: getter });
  41  /******/         }
  42  /******/     };
  43  /******/
  44  /******/     // define __esModule on exports
  45  /******/     __webpack_require__.r = function(exports) {
  46  /******/         if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  47  /******/             Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  48  /******/         }
  49  /******/         Object.defineProperty(exports, '__esModule', { value: true });
  50  /******/     };
  51  /******/
  52  /******/     // create a fake namespace object
  53  /******/     // mode & 1: value is a module id, require it
  54  /******/     // mode & 2: merge all properties of value into the ns
  55  /******/     // mode & 4: return value when already ns object
  56  /******/     // mode & 8|1: behave like require
  57  /******/     __webpack_require__.t = function(value, mode) {
  58  /******/         if(mode & 1) value = __webpack_require__(value);
  59  /******/         if(mode & 8) return value;
  60  /******/         if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  61  /******/         var ns = Object.create(null);
  62  /******/         __webpack_require__.r(ns);
  63  /******/         Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  64  /******/         if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  65  /******/         return ns;
  66  /******/     };
  67  /******/
  68  /******/     // getDefaultExport function for compatibility with non-harmony modules
  69  /******/     __webpack_require__.n = function(module) {
  70  /******/         var getter = module && module.__esModule ?
  71  /******/ 			function getDefault() { return module['default']; } :
  72  /******/ 			function getModuleExports() { return module; };
  73  /******/         __webpack_require__.d(getter, 'a', getter);
  74  /******/         return getter;
  75  /******/     };
  76  /******/
  77  /******/     // Object.prototype.hasOwnProperty.call
  78  /******/     __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  79  /******/
  80  /******/     // __webpack_public_path__
  81  /******/     __webpack_require__.p = "";
  82  /******/
  83  /******/
  84  /******/     // Load entry module and return exports
  85  /******/     return __webpack_require__(__webpack_require__.s = 342);
  86  /******/ })
  87  /************************************************************************/
  88  /******/ ({
  89  
  90  /***/ 0:
  91  /***/ (function(module, exports) {
  92  
  93  (function() { module.exports = this["wp"]["element"]; }());
  94  
  95  /***/ }),
  96  
  97  /***/ 1:
  98  /***/ (function(module, exports) {
  99  
 100  (function() { module.exports = this["wp"]["i18n"]; }());
 101  
 102  /***/ }),
 103  
 104  /***/ 10:
 105  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 106  
 107  "use strict";
 108  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _defineProperty; });
 109  function _defineProperty(obj, key, value) {
 110    if (key in obj) {
 111      Object.defineProperty(obj, key, {
 112        value: value,
 113        enumerable: true,
 114        configurable: true,
 115        writable: true
 116      });
 117    } else {
 118      obj[key] = value;
 119    }
 120  
 121    return obj;
 122  }
 123  
 124  /***/ }),
 125  
 126  /***/ 11:
 127  /***/ (function(module, __webpack_exports__, __webpack_require__) {
 128  
 129  "use strict";
 130  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _createClass; });
 131  function _defineProperties(target, props) {
 132    for (var i = 0; i < props.length; i++) {
 133      var descriptor = props[i];
 134      descriptor.enumerable = descriptor.enumerable || false;
 135      descriptor.configurable = true;
 136      if ("value" in descriptor) descriptor.writable = true;
 137      Object.defineProperty(target, descriptor.key, descriptor);
 138    }
 139  }
 140  
 141  function _createClass(Constructor, protoProps, staticProps) {
 142    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
 143    if (staticProps) _defineProperties(Constructor, staticProps);
 144    return Constructor;
 145  }
 146  
 147  /***/ }),
 148  
 149  /***/ 112:
 150  /***/ (function(module, exports) {
 151  
 152  if (typeof Object.create === 'function') {
 153    // implementation from standard node.js 'util' module
 154    module.exports = function inherits(ctor, superCtor) {
 155      if (superCtor) {
 156        ctor.super_ = superCtor
 157        ctor.prototype = Object.create(superCtor.prototype, {
 158          constructor: {
 159            value: ctor,
 160            enumerable: false,
 161            writable: true,
 162            configurable: true
 163          }
 164        })
 165      }
 166    };
 167  } else {
 168    // old school shim for old browsers
 169    module.exports = function inherits(ctor, superCtor) {
 170      if (superCtor) {
 171        ctor.super_ = superCtor
 172        var TempCtor = function () {}
 173        TempCtor.prototype = superCtor.prototype
 174        ctor.prototype = new TempCtor()
 175        ctor.prototype.constructor = ctor
 176      }
 177    }
 178  }
 179  
 180  
 181  /***/ }),
 182  
 183  /***/ 113:
 184  /***/ (function(module, exports, __webpack_require__) {
 185  
 186  "use strict";
 187  
 188  
 189  var util = __webpack_require__(114);
 190  
 191  function scrollIntoView(elem, container, config) {
 192    config = config || {};
 193    // document 归一化到 window
 194    if (container.nodeType === 9) {
 195      container = util.getWindow(container);
 196    }
 197  
 198    var allowHorizontalScroll = config.allowHorizontalScroll;
 199    var onlyScrollIfNeeded = config.onlyScrollIfNeeded;
 200    var alignWithTop = config.alignWithTop;
 201    var alignWithLeft = config.alignWithLeft;
 202    var offsetTop = config.offsetTop || 0;
 203    var offsetLeft = config.offsetLeft || 0;
 204    var offsetBottom = config.offsetBottom || 0;
 205    var offsetRight = config.offsetRight || 0;
 206  
 207    allowHorizontalScroll = allowHorizontalScroll === undefined ? true : allowHorizontalScroll;
 208  
 209    var isWin = util.isWindow(container);
 210    var elemOffset = util.offset(elem);
 211    var eh = util.outerHeight(elem);
 212    var ew = util.outerWidth(elem);
 213    var containerOffset = undefined;
 214    var ch = undefined;
 215    var cw = undefined;
 216    var containerScroll = undefined;
 217    var diffTop = undefined;
 218    var diffBottom = undefined;
 219    var win = undefined;
 220    var winScroll = undefined;
 221    var ww = undefined;
 222    var wh = undefined;
 223  
 224    if (isWin) {
 225      win = container;
 226      wh = util.height(win);
 227      ww = util.width(win);
 228      winScroll = {
 229        left: util.scrollLeft(win),
 230        top: util.scrollTop(win)
 231      };
 232      // elem 相对 container 可视视窗的距离
 233      diffTop = {
 234        left: elemOffset.left - winScroll.left - offsetLeft,
 235        top: elemOffset.top - winScroll.top - offsetTop
 236      };
 237      diffBottom = {
 238        left: elemOffset.left + ew - (winScroll.left + ww) + offsetRight,
 239        top: elemOffset.top + eh - (winScroll.top + wh) + offsetBottom
 240      };
 241      containerScroll = winScroll;
 242    } else {
 243      containerOffset = util.offset(container);
 244      ch = container.clientHeight;
 245      cw = container.clientWidth;
 246      containerScroll = {
 247        left: container.scrollLeft,
 248        top: container.scrollTop
 249      };
 250      // elem 相对 container 可视视窗的距离
 251      // 注意边框, offset 是边框到根节点
 252      diffTop = {
 253        left: elemOffset.left - (containerOffset.left + (parseFloat(util.css(container, 'borderLeftWidth')) || 0)) - offsetLeft,
 254        top: elemOffset.top - (containerOffset.top + (parseFloat(util.css(container, 'borderTopWidth')) || 0)) - offsetTop
 255      };
 256      diffBottom = {
 257        left: elemOffset.left + ew - (containerOffset.left + cw + (parseFloat(util.css(container, 'borderRightWidth')) || 0)) + offsetRight,
 258        top: elemOffset.top + eh - (containerOffset.top + ch + (parseFloat(util.css(container, 'borderBottomWidth')) || 0)) + offsetBottom
 259      };
 260    }
 261  
 262    if (diffTop.top < 0 || diffBottom.top > 0) {
 263      // 强制向上
 264      if (alignWithTop === true) {
 265        util.scrollTop(container, containerScroll.top + diffTop.top);
 266      } else if (alignWithTop === false) {
 267        util.scrollTop(container, containerScroll.top + diffBottom.top);
 268      } else {
 269        // 自动调整
 270        if (diffTop.top < 0) {
 271          util.scrollTop(container, containerScroll.top + diffTop.top);
 272        } else {
 273          util.scrollTop(container, containerScroll.top + diffBottom.top);
 274        }
 275      }
 276    } else {
 277      if (!onlyScrollIfNeeded) {
 278        alignWithTop = alignWithTop === undefined ? true : !!alignWithTop;
 279        if (alignWithTop) {
 280          util.scrollTop(container, containerScroll.top + diffTop.top);
 281        } else {
 282          util.scrollTop(container, containerScroll.top + diffBottom.top);
 283        }
 284      }
 285    }
 286  
 287    if (allowHorizontalScroll) {
 288      if (diffTop.left < 0 || diffBottom.left > 0) {
 289        // 强制向上
 290        if (alignWithLeft === true) {
 291          util.scrollLeft(container, containerScroll.left + diffTop.left);
 292        } else if (alignWithLeft === false) {
 293          util.scrollLeft(container, containerScroll.left + diffBottom.left);
 294        } else {
 295          // 自动调整
 296          if (diffTop.left < 0) {
 297            util.scrollLeft(container, containerScroll.left + diffTop.left);
 298          } else {
 299            util.scrollLeft(container, containerScroll.left + diffBottom.left);
 300          }
 301        }
 302      } else {
 303        if (!onlyScrollIfNeeded) {
 304          alignWithLeft = alignWithLeft === undefined ? true : !!alignWithLeft;
 305          if (alignWithLeft) {
 306            util.scrollLeft(container, containerScroll.left + diffTop.left);
 307          } else {
 308            util.scrollLeft(container, containerScroll.left + diffBottom.left);
 309          }
 310        }
 311      }
 312    }
 313  }
 314  
 315  module.exports = scrollIntoView;
 316  
 317  /***/ }),
 318  
 319  /***/ 114:
 320  /***/ (function(module, exports, __webpack_require__) {
 321  
 322  "use strict";
 323  
 324  
 325  var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
 326  
 327  var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
 328  
 329  var RE_NUM = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source;
 330  
 331  function getClientPosition(elem) {
 332    var box = undefined;
 333    var x = undefined;
 334    var y = undefined;
 335    var doc = elem.ownerDocument;
 336    var body = doc.body;
 337    var docElem = doc && doc.documentElement;
 338    // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式
 339    box = elem.getBoundingClientRect();
 340  
 341    // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop
 342    // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确
 343    // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin
 344  
 345    x = box.left;
 346    y = box.top;
 347  
 348    // In IE, most of the time, 2 extra pixels are added to the top and left
 349    // due to the implicit 2-pixel inset border.  In IE6/7 quirks mode and
 350    // IE6 standards mode, this border can be overridden by setting the
 351    // document element's border to zero -- thus, we cannot rely on the
 352    // offset always being 2 pixels.
 353  
 354    // In quirks mode, the offset can be determined by querying the body's
 355    // clientLeft/clientTop, but in standards mode, it is found by querying
 356    // the document element's clientLeft/clientTop.  Since we already called
 357    // getClientBoundingRect we have already forced a reflow, so it is not
 358    // too expensive just to query them all.
 359  
 360    // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的
 361    // 窗口边框标准是设 documentElement ,quirks 时设置 body
 362    // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去
 363    // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置
 364    // 标准 ie 下 docElem.clientTop 就是 border-top
 365    // ie7 html 即窗口边框改变不了。永远为 2
 366    // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0
 367  
 368    x -= docElem.clientLeft || body.clientLeft || 0;
 369    y -= docElem.clientTop || body.clientTop || 0;
 370  
 371    return {
 372      left: x,
 373      top: y
 374    };
 375  }
 376  
 377  function getScroll(w, top) {
 378    var ret = w['page' + (top ? 'Y' : 'X') + 'Offset'];
 379    var method = 'scroll' + (top ? 'Top' : 'Left');
 380    if (typeof ret !== 'number') {
 381      var d = w.document;
 382      // ie6,7,8 standard mode
 383      ret = d.documentElement[method];
 384      if (typeof ret !== 'number') {
 385        // quirks mode
 386        ret = d.body[method];
 387      }
 388    }
 389    return ret;
 390  }
 391  
 392  function getScrollLeft(w) {
 393    return getScroll(w);
 394  }
 395  
 396  function getScrollTop(w) {
 397    return getScroll(w, true);
 398  }
 399  
 400  function getOffset(el) {
 401    var pos = getClientPosition(el);
 402    var doc = el.ownerDocument;
 403    var w = doc.defaultView || doc.parentWindow;
 404    pos.left += getScrollLeft(w);
 405    pos.top += getScrollTop(w);
 406    return pos;
 407  }
 408  function _getComputedStyle(elem, name, computedStyle_) {
 409    var val = '';
 410    var d = elem.ownerDocument;
 411    var computedStyle = computedStyle_ || d.defaultView.getComputedStyle(elem, null);
 412  
 413    // https://github.com/kissyteam/kissy/issues/61
 414    if (computedStyle) {
 415      val = computedStyle.getPropertyValue(name) || computedStyle[name];
 416    }
 417  
 418    return val;
 419  }
 420  
 421  var _RE_NUM_NO_PX = new RegExp('^(' + RE_NUM + ')(?!px)[a-z%]+$', 'i');
 422  var RE_POS = /^(top|right|bottom|left)$/;
 423  var CURRENT_STYLE = 'currentStyle';
 424  var RUNTIME_STYLE = 'runtimeStyle';
 425  var LEFT = 'left';
 426  var PX = 'px';
 427  
 428  function _getComputedStyleIE(elem, name) {
 429    // currentStyle maybe null
 430    // http://msdn.microsoft.com/en-us/library/ms535231.aspx
 431    var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];
 432  
 433    // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值
 434    // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19
 435    // 在 ie 下不对,需要直接用 offset 方式
 436    // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了
 437  
 438    // From the awesome hack by Dean Edwards
 439    // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
 440    // If we're not dealing with a regular pixel number
 441    // but a number that has a weird ending, we need to convert it to pixels
 442    // exclude left right for relativity
 443    if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {
 444      // Remember the original values
 445      var style = elem.style;
 446      var left = style[LEFT];
 447      var rsLeft = elem[RUNTIME_STYLE][LEFT];
 448  
 449      // prevent flashing of content
 450      elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];
 451  
 452      // Put in the new values to get a computed value out
 453      style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;
 454      ret = style.pixelLeft + PX;
 455  
 456      // Revert the changed values
 457      style[LEFT] = left;
 458  
 459      elem[RUNTIME_STYLE][LEFT] = rsLeft;
 460    }
 461    return ret === '' ? 'auto' : ret;
 462  }
 463  
 464  var getComputedStyleX = undefined;
 465  if (typeof window !== 'undefined') {
 466    getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;
 467  }
 468  
 469  function each(arr, fn) {
 470    for (var i = 0; i < arr.length; i++) {
 471      fn(arr[i]);
 472    }
 473  }
 474  
 475  function isBorderBoxFn(elem) {
 476    return getComputedStyleX(elem, 'boxSizing') === 'border-box';
 477  }
 478  
 479  var BOX_MODELS = ['margin', 'border', 'padding'];
 480  var CONTENT_INDEX = -1;
 481  var PADDING_INDEX = 2;
 482  var BORDER_INDEX = 1;
 483  var MARGIN_INDEX = 0;
 484  
 485  function swap(elem, options, callback) {
 486    var old = {};
 487    var style = elem.style;
 488    var name = undefined;
 489  
 490    // Remember the old values, and insert the new ones
 491    for (name in options) {
 492      if (options.hasOwnProperty(name)) {
 493        old[name] = style[name];
 494        style[name] = options[name];
 495      }
 496    }
 497  
 498    callback.call(elem);
 499  
 500    // Revert the old values
 501    for (name in options) {
 502      if (options.hasOwnProperty(name)) {
 503        style[name] = old[name];
 504      }
 505    }
 506  }
 507  
 508  function getPBMWidth(elem, props, which) {
 509    var value = 0;
 510    var prop = undefined;
 511    var j = undefined;
 512    var i = undefined;
 513    for (j = 0; j < props.length; j++) {
 514      prop = props[j];
 515      if (prop) {
 516        for (i = 0; i < which.length; i++) {
 517          var cssProp = undefined;
 518          if (prop === 'border') {
 519            cssProp = prop + which[i] + 'Width';
 520          } else {
 521            cssProp = prop + which[i];
 522          }
 523          value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;
 524        }
 525      }
 526    }
 527    return value;
 528  }
 529  
 530  /**
 531   * A crude way of determining if an object is a window
 532   * @member util
 533   */
 534  function isWindow(obj) {
 535    // must use == for ie8
 536    /* eslint eqeqeq:0 */
 537    return obj != null && obj == obj.window;
 538  }
 539  
 540  var domUtils = {};
 541  
 542  each(['Width', 'Height'], function (name) {
 543    domUtils['doc' + name] = function (refWin) {
 544      var d = refWin.document;
 545      return Math.max(
 546      // firefox chrome documentElement.scrollHeight< body.scrollHeight
 547      // ie standard mode : documentElement.scrollHeight> body.scrollHeight
 548      d.documentElement['scroll' + name],
 549      // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?
 550      d.body['scroll' + name], domUtils['viewport' + name](d));
 551    };
 552  
 553    domUtils['viewport' + name] = function (win) {
 554      // pc browser includes scrollbar in window.innerWidth
 555      var prop = 'client' + name;
 556      var doc = win.document;
 557      var body = doc.body;
 558      var documentElement = doc.documentElement;
 559      var documentElementProp = documentElement[prop];
 560      // 标准模式取 documentElement
 561      // backcompat 取 body
 562      return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;
 563    };
 564  });
 565  
 566  /*
 567   得到元素的大小信息
 568   @param elem
 569   @param name
 570   @param {String} [extra]  'padding' : (css width) + padding
 571   'border' : (css width) + padding + border
 572   'margin' : (css width) + padding + border + margin
 573   */
 574  function getWH(elem, name, extra) {
 575    if (isWindow(elem)) {
 576      return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);
 577    } else if (elem.nodeType === 9) {
 578      return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);
 579    }
 580    var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];
 581    var borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;
 582    var computedStyle = getComputedStyleX(elem);
 583    var isBorderBox = isBorderBoxFn(elem, computedStyle);
 584    var cssBoxValue = 0;
 585    if (borderBoxValue == null || borderBoxValue <= 0) {
 586      borderBoxValue = undefined;
 587      // Fall back to computed then un computed css if necessary
 588      cssBoxValue = getComputedStyleX(elem, name);
 589      if (cssBoxValue == null || Number(cssBoxValue) < 0) {
 590        cssBoxValue = elem.style[name] || 0;
 591      }
 592      // Normalize '', auto, and prepare for extra
 593      cssBoxValue = parseFloat(cssBoxValue) || 0;
 594    }
 595    if (extra === undefined) {
 596      extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;
 597    }
 598    var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;
 599    var val = borderBoxValue || cssBoxValue;
 600    if (extra === CONTENT_INDEX) {
 601      if (borderBoxValueOrIsBorderBox) {
 602        return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle);
 603      }
 604      return cssBoxValue;
 605    }
 606    if (borderBoxValueOrIsBorderBox) {
 607      var padding = extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which, computedStyle) : getPBMWidth(elem, ['margin'], which, computedStyle);
 608      return val + (extra === BORDER_INDEX ? 0 : padding);
 609    }
 610    return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle);
 611  }
 612  
 613  var cssShow = {
 614    position: 'absolute',
 615    visibility: 'hidden',
 616    display: 'block'
 617  };
 618  
 619  // fix #119 : https://github.com/kissyteam/kissy/issues/119
 620  function getWHIgnoreDisplay(elem) {
 621    var val = undefined;
 622    var args = arguments;
 623    // in case elem is window
 624    // elem.offsetWidth === undefined
 625    if (elem.offsetWidth !== 0) {
 626      val = getWH.apply(undefined, args);
 627    } else {
 628      swap(elem, cssShow, function () {
 629        val = getWH.apply(undefined, args);
 630      });
 631    }
 632    return val;
 633  }
 634  
 635  function css(el, name, v) {
 636    var value = v;
 637    if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {
 638      for (var i in name) {
 639        if (name.hasOwnProperty(i)) {
 640          css(el, i, name[i]);
 641        }
 642      }
 643      return undefined;
 644    }
 645    if (typeof value !== 'undefined') {
 646      if (typeof value === 'number') {
 647        value += 'px';
 648      }
 649      el.style[name] = value;
 650      return undefined;
 651    }
 652    return getComputedStyleX(el, name);
 653  }
 654  
 655  each(['width', 'height'], function (name) {
 656    var first = name.charAt(0).toUpperCase() + name.slice(1);
 657    domUtils['outer' + first] = function (el, includeMargin) {
 658      return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);
 659    };
 660    var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];
 661  
 662    domUtils[name] = function (elem, val) {
 663      if (val !== undefined) {
 664        if (elem) {
 665          var computedStyle = getComputedStyleX(elem);
 666          var isBorderBox = isBorderBoxFn(elem);
 667          if (isBorderBox) {
 668            val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);
 669          }
 670          return css(elem, name, val);
 671        }
 672        return undefined;
 673      }
 674      return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);
 675    };
 676  });
 677  
 678  // 设置 elem 相对 elem.ownerDocument 的坐标
 679  function setOffset(elem, offset) {
 680    // set position first, in-case top/left are set even on static elem
 681    if (css(elem, 'position') === 'static') {
 682      elem.style.position = 'relative';
 683    }
 684  
 685    var old = getOffset(elem);
 686    var ret = {};
 687    var current = undefined;
 688    var key = undefined;
 689  
 690    for (key in offset) {
 691      if (offset.hasOwnProperty(key)) {
 692        current = parseFloat(css(elem, key)) || 0;
 693        ret[key] = current + offset[key] - old[key];
 694      }
 695    }
 696    css(elem, ret);
 697  }
 698  
 699  module.exports = _extends({
 700    getWindow: function getWindow(node) {
 701      var doc = node.ownerDocument || node;
 702      return doc.defaultView || doc.parentWindow;
 703    },
 704    offset: function offset(el, value) {
 705      if (typeof value !== 'undefined') {
 706        setOffset(el, value);
 707      } else {
 708        return getOffset(el);
 709      }
 710    },
 711  
 712    isWindow: isWindow,
 713    each: each,
 714    css: css,
 715    clone: function clone(obj) {
 716      var ret = {};
 717      for (var i in obj) {
 718        if (obj.hasOwnProperty(i)) {
 719          ret[i] = obj[i];
 720        }
 721      }
 722      var overflow = obj.overflow;
 723      if (overflow) {
 724        for (var i in obj) {
 725          if (obj.hasOwnProperty(i)) {
 726            ret.overflow[i] = obj.overflow[i];
 727          }
 728        }
 729      }
 730      return ret;
 731    },
 732    scrollLeft: function scrollLeft(w, v) {
 733      if (isWindow(w)) {
 734        if (v === undefined) {
 735          return getScrollLeft(w);
 736        }
 737        window.scrollTo(v, getScrollTop(w));
 738      } else {
 739        if (v === undefined) {
 740          return w.scrollLeft;
 741        }
 742        w.scrollLeft = v;
 743      }
 744    },
 745    scrollTop: function scrollTop(w, v) {
 746      if (isWindow(w)) {
 747        if (v === undefined) {
 748          return getScrollTop(w);
 749        }
 750        window.scrollTo(getScrollLeft(w), v);
 751      } else {
 752        if (v === undefined) {
 753          return w.scrollTop;
 754        }
 755        w.scrollTop = v;
 756      }
 757    },
 758  
 759    viewportWidth: 0,
 760    viewportHeight: 0
 761  }, domUtils);
 762  
 763  /***/ }),
 764  
 765  /***/ 115:
 766  /***/ (function(module, exports, __webpack_require__) {
 767  
 768  "use strict";
 769  
 770  var __extends = (this && this.__extends) || (function () {
 771      var extendStatics = Object.setPrototypeOf ||
 772          ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
 773          function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
 774      return function (d, b) {
 775          extendStatics(d, b);
 776          function __() { this.constructor = d; }
 777          d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
 778      };
 779  })();
 780  var __assign = (this && this.__assign) || Object.assign || function(t) {
 781      for (var s, i = 1, n = arguments.length; i < n; i++) {
 782          s = arguments[i];
 783          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
 784              t[p] = s[p];
 785      }
 786      return t;
 787  };
 788  var __rest = (this && this.__rest) || function (s, e) {
 789      var t = {};
 790      for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
 791          t[p] = s[p];
 792      if (s != null && typeof Object.getOwnPropertySymbols === "function")
 793          for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
 794              t[p[i]] = s[p[i]];
 795      return t;
 796  };
 797  exports.__esModule = true;
 798  var React = __webpack_require__(28);
 799  var PropTypes = __webpack_require__(33);
 800  var autosize = __webpack_require__(116);
 801  var _getLineHeight = __webpack_require__(117);
 802  var getLineHeight = _getLineHeight;
 803  var UPDATE = 'autosize:update';
 804  var DESTROY = 'autosize:destroy';
 805  var RESIZED = 'autosize:resized';
 806  /**
 807   * A light replacement for built-in textarea component
 808   * which automaticaly adjusts its height to match the content
 809   */
 810  var TextareaAutosize = /** @class */ (function (_super) {
 811      __extends(TextareaAutosize, _super);
 812      function TextareaAutosize() {
 813          var _this = _super !== null && _super.apply(this, arguments) || this;
 814          _this.state = {
 815              lineHeight: null
 816          };
 817          _this.dispatchEvent = function (EVENT_TYPE) {
 818              var event = document.createEvent('Event');
 819              event.initEvent(EVENT_TYPE, true, false);
 820              _this.textarea.dispatchEvent(event);
 821          };
 822          _this.updateLineHeight = function () {
 823              _this.setState({
 824                  lineHeight: getLineHeight(_this.textarea)
 825              });
 826          };
 827          _this.onChange = function (e) {
 828              var onChange = _this.props.onChange;
 829              _this.currentValue = e.currentTarget.value;
 830              onChange && onChange(e);
 831          };
 832          _this.saveDOMNodeRef = function (ref) {
 833              var innerRef = _this.props.innerRef;
 834              if (innerRef) {
 835                  innerRef(ref);
 836              }
 837              _this.textarea = ref;
 838          };
 839          _this.getLocals = function () {
 840              var _a = _this, _b = _a.props, onResize = _b.onResize, maxRows = _b.maxRows, onChange = _b.onChange, style = _b.style, innerRef = _b.innerRef, props = __rest(_b, ["onResize", "maxRows", "onChange", "style", "innerRef"]), lineHeight = _a.state.lineHeight, saveDOMNodeRef = _a.saveDOMNodeRef;
 841              var maxHeight = maxRows && lineHeight ? lineHeight * maxRows : null;
 842              return __assign({}, props, { saveDOMNodeRef: saveDOMNodeRef, style: maxHeight ? __assign({}, style, { maxHeight: maxHeight }) : style, onChange: _this.onChange });
 843          };
 844          return _this;
 845      }
 846      TextareaAutosize.prototype.componentDidMount = function () {
 847          var _this = this;
 848          var _a = this.props, onResize = _a.onResize, maxRows = _a.maxRows;
 849          if (typeof maxRows === 'number') {
 850              this.updateLineHeight();
 851          }
 852          /*
 853            the defer is needed to:
 854              - force "autosize" to activate the scrollbar when this.props.maxRows is passed
 855              - support StyledComponents (see #71)
 856          */
 857          setTimeout(function () { return autosize(_this.textarea); });
 858          if (onResize) {
 859              this.textarea.addEventListener(RESIZED, onResize);
 860          }
 861      };
 862      TextareaAutosize.prototype.componentWillUnmount = function () {
 863          var onResize = this.props.onResize;
 864          if (onResize) {
 865              this.textarea.removeEventListener(RESIZED, onResize);
 866          }
 867          this.dispatchEvent(DESTROY);
 868      };
 869      TextareaAutosize.prototype.render = function () {
 870          var _a = this.getLocals(), children = _a.children, saveDOMNodeRef = _a.saveDOMNodeRef, locals = __rest(_a, ["children", "saveDOMNodeRef"]);
 871          return (React.createElement("textarea", __assign({}, locals, { ref: saveDOMNodeRef }), children));
 872      };
 873      TextareaAutosize.prototype.componentDidUpdate = function (prevProps) {
 874          if (this.props.value !== this.currentValue || this.props.rows !== prevProps.rows) {
 875              this.dispatchEvent(UPDATE);
 876          }
 877      };
 878      TextareaAutosize.defaultProps = {
 879          rows: 1
 880      };
 881      TextareaAutosize.propTypes = {
 882          rows: PropTypes.number,
 883          maxRows: PropTypes.number,
 884          onResize: PropTypes.func,
 885          innerRef: PropTypes.func
 886      };
 887      return TextareaAutosize;
 888  }(React.Component));
 889  exports["default"] = TextareaAutosize;
 890  
 891  
 892  /***/ }),
 893  
 894  /***/ 116:
 895  /***/ (function(module, exports, __webpack_require__) {
 896  
 897  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
 898      autosize 4.0.2
 899      license: MIT
 900      http://www.jacklmoore.com/autosize
 901  */
 902  (function (global, factory) {
 903      if (true) {
 904          !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
 905                  __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
 906                  (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
 907                  __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 908      } else { var mod; }
 909  })(this, function (module, exports) {
 910      'use strict';
 911  
 912      var map = typeof Map === "function" ? new Map() : function () {
 913          var keys = [];
 914          var values = [];
 915  
 916          return {
 917              has: function has(key) {
 918                  return keys.indexOf(key) > -1;
 919              },
 920              get: function get(key) {
 921                  return values[keys.indexOf(key)];
 922              },
 923              set: function set(key, value) {
 924                  if (keys.indexOf(key) === -1) {
 925                      keys.push(key);
 926                      values.push(value);
 927                  }
 928              },
 929              delete: function _delete(key) {
 930                  var index = keys.indexOf(key);
 931                  if (index > -1) {
 932                      keys.splice(index, 1);
 933                      values.splice(index, 1);
 934                  }
 935              }
 936          };
 937      }();
 938  
 939      var createEvent = function createEvent(name) {
 940          return new Event(name, { bubbles: true });
 941      };
 942      try {
 943          new Event('test');
 944      } catch (e) {
 945          // IE does not support `new Event()`
 946          createEvent = function createEvent(name) {
 947              var evt = document.createEvent('Event');
 948              evt.initEvent(name, true, false);
 949              return evt;
 950          };
 951      }
 952  
 953  	function assign(ta) {
 954          if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return;
 955  
 956          var heightOffset = null;
 957          var clientWidth = null;
 958          var cachedHeight = null;
 959  
 960  		function init() {
 961              var style = window.getComputedStyle(ta, null);
 962  
 963              if (style.resize === 'vertical') {
 964                  ta.style.resize = 'none';
 965              } else if (style.resize === 'both') {
 966                  ta.style.resize = 'horizontal';
 967              }
 968  
 969              if (style.boxSizing === 'content-box') {
 970                  heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
 971              } else {
 972                  heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
 973              }
 974              // Fix when a textarea is not on document body and heightOffset is Not a Number
 975              if (isNaN(heightOffset)) {
 976                  heightOffset = 0;
 977              }
 978  
 979              update();
 980          }
 981  
 982  		function changeOverflow(value) {
 983              {
 984                  // Chrome/Safari-specific fix:
 985                  // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
 986                  // made available by removing the scrollbar. The following forces the necessary text reflow.
 987                  var width = ta.style.width;
 988                  ta.style.width = '0px';
 989                  // Force reflow:
 990                  /* jshint ignore:start */
 991                  ta.offsetWidth;
 992                  /* jshint ignore:end */
 993                  ta.style.width = width;
 994              }
 995  
 996              ta.style.overflowY = value;
 997          }
 998  
 999  		function getParentOverflows(el) {
1000              var arr = [];
1001  
1002              while (el && el.parentNode && el.parentNode instanceof Element) {
1003                  if (el.parentNode.scrollTop) {
1004                      arr.push({
1005                          node: el.parentNode,
1006                          scrollTop: el.parentNode.scrollTop
1007                      });
1008                  }
1009                  el = el.parentNode;
1010              }
1011  
1012              return arr;
1013          }
1014  
1015  		function resize() {
1016              if (ta.scrollHeight === 0) {
1017                  // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
1018                  return;
1019              }
1020  
1021              var overflows = getParentOverflows(ta);
1022              var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
1023  
1024              ta.style.height = '';
1025              ta.style.height = ta.scrollHeight + heightOffset + 'px';
1026  
1027              // used to check if an update is actually necessary on window.resize
1028              clientWidth = ta.clientWidth;
1029  
1030              // prevents scroll-position jumping
1031              overflows.forEach(function (el) {
1032                  el.node.scrollTop = el.scrollTop;
1033              });
1034  
1035              if (docTop) {
1036                  document.documentElement.scrollTop = docTop;
1037              }
1038          }
1039  
1040  		function update() {
1041              resize();
1042  
1043              var styleHeight = Math.round(parseFloat(ta.style.height));
1044              var computed = window.getComputedStyle(ta, null);
1045  
1046              // Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
1047              var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight;
1048  
1049              // The actual height not matching the style height (set via the resize method) indicates that 
1050              // the max-height has been exceeded, in which case the overflow should be allowed.
1051              if (actualHeight < styleHeight) {
1052                  if (computed.overflowY === 'hidden') {
1053                      changeOverflow('scroll');
1054                      resize();
1055                      actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
1056                  }
1057              } else {
1058                  // Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
1059                  if (computed.overflowY !== 'hidden') {
1060                      changeOverflow('hidden');
1061                      resize();
1062                      actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight;
1063                  }
1064              }
1065  
1066              if (cachedHeight !== actualHeight) {
1067                  cachedHeight = actualHeight;
1068                  var evt = createEvent('autosize:resized');
1069                  try {
1070                      ta.dispatchEvent(evt);
1071                  } catch (err) {
1072                      // Firefox will throw an error on dispatchEvent for a detached element
1073                      // https://bugzilla.mozilla.org/show_bug.cgi?id=889376
1074                  }
1075              }
1076          }
1077  
1078          var pageResize = function pageResize() {
1079              if (ta.clientWidth !== clientWidth) {
1080                  update();
1081              }
1082          };
1083  
1084          var destroy = function (style) {
1085              window.removeEventListener('resize', pageResize, false);
1086              ta.removeEventListener('input', update, false);
1087              ta.removeEventListener('keyup', update, false);
1088              ta.removeEventListener('autosize:destroy', destroy, false);
1089              ta.removeEventListener('autosize:update', update, false);
1090  
1091              Object.keys(style).forEach(function (key) {
1092                  ta.style[key] = style[key];
1093              });
1094  
1095              map.delete(ta);
1096          }.bind(ta, {
1097              height: ta.style.height,
1098              resize: ta.style.resize,
1099              overflowY: ta.style.overflowY,
1100              overflowX: ta.style.overflowX,
1101              wordWrap: ta.style.wordWrap
1102          });
1103  
1104          ta.addEventListener('autosize:destroy', destroy, false);
1105  
1106          // IE9 does not fire onpropertychange or oninput for deletions,
1107          // so binding to onkeyup to catch most of those events.
1108          // There is no way that I know of to detect something like 'cut' in IE9.
1109          if ('onpropertychange' in ta && 'oninput' in ta) {
1110              ta.addEventListener('keyup', update, false);
1111          }
1112  
1113          window.addEventListener('resize', pageResize, false);
1114          ta.addEventListener('input', update, false);
1115          ta.addEventListener('autosize:update', update, false);
1116          ta.style.overflowX = 'hidden';
1117          ta.style.wordWrap = 'break-word';
1118  
1119          map.set(ta, {
1120              destroy: destroy,
1121              update: update
1122          });
1123  
1124          init();
1125      }
1126  
1127  	function destroy(ta) {
1128          var methods = map.get(ta);
1129          if (methods) {
1130              methods.destroy();
1131          }
1132      }
1133  
1134  	function update(ta) {
1135          var methods = map.get(ta);
1136          if (methods) {
1137              methods.update();
1138          }
1139      }
1140  
1141      var autosize = null;
1142  
1143      // Do nothing in Node.js environment and IE8 (or lower)
1144      if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
1145          autosize = function autosize(el) {
1146              return el;
1147          };
1148          autosize.destroy = function (el) {
1149              return el;
1150          };
1151          autosize.update = function (el) {
1152              return el;
1153          };
1154      } else {
1155          autosize = function autosize(el, options) {
1156              if (el) {
1157                  Array.prototype.forEach.call(el.length ? el : [el], function (x) {
1158                      return assign(x, options);
1159                  });
1160              }
1161              return el;
1162          };
1163          autosize.destroy = function (el) {
1164              if (el) {
1165                  Array.prototype.forEach.call(el.length ? el : [el], destroy);
1166              }
1167              return el;
1168          };
1169          autosize.update = function (el) {
1170              if (el) {
1171                  Array.prototype.forEach.call(el.length ? el : [el], update);
1172              }
1173              return el;
1174          };
1175      }
1176  
1177      exports.default = autosize;
1178      module.exports = exports['default'];
1179  });
1180  
1181  /***/ }),
1182  
1183  /***/ 117:
1184  /***/ (function(module, exports, __webpack_require__) {
1185  
1186  // Load in dependencies
1187  var computedStyle = __webpack_require__(118);
1188  
1189  /**
1190   * Calculate the `line-height` of a given node
1191   * @param {HTMLElement} node Element to calculate line height of. Must be in the DOM.
1192   * @returns {Number} `line-height` of the element in pixels
1193   */
1194  function lineHeight(node) {
1195    // Grab the line-height via style
1196    var lnHeightStr = computedStyle(node, 'line-height');
1197    var lnHeight = parseFloat(lnHeightStr, 10);
1198  
1199    // If the lineHeight did not contain a unit (i.e. it was numeric), convert it to ems (e.g. '2.3' === '2.3em')
1200    if (lnHeightStr === lnHeight + '') {
1201      // Save the old lineHeight style and update the em unit to the element
1202      var _lnHeightStyle = node.style.lineHeight;
1203      node.style.lineHeight = lnHeightStr + 'em';
1204  
1205      // Calculate the em based height
1206      lnHeightStr = computedStyle(node, 'line-height');
1207      lnHeight = parseFloat(lnHeightStr, 10);
1208  
1209      // Revert the lineHeight style
1210      if (_lnHeightStyle) {
1211        node.style.lineHeight = _lnHeightStyle;
1212      } else {
1213        delete node.style.lineHeight;
1214      }
1215    }
1216  
1217    // If the lineHeight is in `pt`, convert it to pixels (4px for 3pt)
1218    // DEV: `em` units are converted to `pt` in IE6
1219    // Conversion ratio from https://developer.mozilla.org/en-US/docs/Web/CSS/length
1220    if (lnHeightStr.indexOf('pt') !== -1) {
1221      lnHeight *= 4;
1222      lnHeight /= 3;
1223    // Otherwise, if the lineHeight is in `mm`, convert it to pixels (96px for 25.4mm)
1224    } else if (lnHeightStr.indexOf('mm') !== -1) {
1225      lnHeight *= 96;
1226      lnHeight /= 25.4;
1227    // Otherwise, if the lineHeight is in `cm`, convert it to pixels (96px for 2.54cm)
1228    } else if (lnHeightStr.indexOf('cm') !== -1) {
1229      lnHeight *= 96;
1230      lnHeight /= 2.54;
1231    // Otherwise, if the lineHeight is in `in`, convert it to pixels (96px for 1in)
1232    } else if (lnHeightStr.indexOf('in') !== -1) {
1233      lnHeight *= 96;
1234    // Otherwise, if the lineHeight is in `pc`, convert it to pixels (12pt for 1pc)
1235    } else if (lnHeightStr.indexOf('pc') !== -1) {
1236      lnHeight *= 16;
1237    }
1238  
1239    // Continue our computation
1240    lnHeight = Math.round(lnHeight);
1241  
1242    // If the line-height is "normal", calculate by font-size
1243    if (lnHeightStr === 'normal') {
1244      // Create a temporary node
1245      var nodeName = node.nodeName;
1246      var _node = document.createElement(nodeName);
1247      _node.innerHTML = '&nbsp;';
1248  
1249      // If we have a text area, reset it to only 1 row
1250      // https://github.com/twolfson/line-height/issues/4
1251      if (nodeName.toUpperCase() === 'TEXTAREA') {
1252        _node.setAttribute('rows', '1');
1253      }
1254  
1255      // Set the font-size of the element
1256      var fontSizeStr = computedStyle(node, 'font-size');
1257      _node.style.fontSize = fontSizeStr;
1258  
1259      // Remove default padding/border which can affect offset height
1260      // https://github.com/twolfson/line-height/issues/4
1261      // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight
1262      _node.style.padding = '0px';
1263      _node.style.border = '0px';
1264  
1265      // Append it to the body
1266      var body = document.body;
1267      body.appendChild(_node);
1268  
1269      // Assume the line height of the element is the height
1270      var height = _node.offsetHeight;
1271      lnHeight = height;
1272  
1273      // Remove our child from the DOM
1274      body.removeChild(_node);
1275    }
1276  
1277    // Return the calculated height
1278    return lnHeight;
1279  }
1280  
1281  // Export lineHeight
1282  module.exports = lineHeight;
1283  
1284  
1285  /***/ }),
1286  
1287  /***/ 118:
1288  /***/ (function(module, exports) {
1289  
1290  // This code has been refactored for 140 bytes
1291  // You can see the original here: https://github.com/twolfson/computedStyle/blob/04cd1da2e30fa45844f95f5cb1ac898e9b9ef050/lib/computedStyle.js
1292  var computedStyle = function (el, prop, getComputedStyle) {
1293    getComputedStyle = window.getComputedStyle;
1294  
1295    // In one fell swoop
1296    return (
1297      // If we have getComputedStyle
1298      getComputedStyle ?
1299        // Query it
1300        // TODO: From CSS-Query notes, we might need (node, null) for FF
1301        getComputedStyle(el) :
1302  
1303      // Otherwise, we are in IE and use currentStyle
1304        el.currentStyle
1305    )[
1306      // Switch to camelCase for CSSOM
1307      // DEV: Grabbed from jQuery
1308      // https://github.com/jquery/jquery/blob/1.9-stable/src/css.js#L191-L194
1309      // https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L593-L597
1310      prop.replace(/-(\w)/gi, function (word, letter) {
1311        return letter.toUpperCase();
1312      })
1313    ];
1314  };
1315  
1316  module.exports = computedStyle;
1317  
1318  
1319  /***/ }),
1320  
1321  /***/ 119:
1322  /***/ (function(module, exports) {
1323  
1324  function _extends() {
1325    module.exports = _extends = Object.assign || function (target) {
1326      for (var i = 1; i < arguments.length; i++) {
1327        var source = arguments[i];
1328  
1329        for (var key in source) {
1330          if (Object.prototype.hasOwnProperty.call(source, key)) {
1331            target[key] = source[key];
1332          }
1333        }
1334      }
1335  
1336      return target;
1337    };
1338  
1339    return _extends.apply(this, arguments);
1340  }
1341  
1342  module.exports = _extends;
1343  
1344  /***/ }),
1345  
1346  /***/ 12:
1347  /***/ (function(module, __webpack_exports__, __webpack_require__) {
1348  
1349  "use strict";
1350  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _classCallCheck; });
1351  function _classCallCheck(instance, Constructor) {
1352    if (!(instance instanceof Constructor)) {
1353      throw new TypeError("Cannot call a class as a function");
1354    }
1355  }
1356  
1357  /***/ }),
1358  
1359  /***/ 120:
1360  /***/ (function(module, exports) {
1361  
1362  function _objectWithoutPropertiesLoose(source, excluded) {
1363    if (source == null) return {};
1364    var target = {};
1365    var sourceKeys = Object.keys(source);
1366    var key, i;
1367  
1368    for (i = 0; i < sourceKeys.length; i++) {
1369      key = sourceKeys[i];
1370      if (excluded.indexOf(key) >= 0) continue;
1371      target[key] = source[key];
1372    }
1373  
1374    return target;
1375  }
1376  
1377  module.exports = _objectWithoutPropertiesLoose;
1378  
1379  /***/ }),
1380  
1381  /***/ 121:
1382  /***/ (function(module, exports) {
1383  
1384  function _inheritsLoose(subClass, superClass) {
1385    subClass.prototype = Object.create(superClass.prototype);
1386    subClass.prototype.constructor = subClass;
1387    subClass.__proto__ = superClass;
1388  }
1389  
1390  module.exports = _inheritsLoose;
1391  
1392  /***/ }),
1393  
1394  /***/ 122:
1395  /***/ (function(module, exports) {
1396  
1397  function _assertThisInitialized(self) {
1398    if (self === void 0) {
1399      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
1400    }
1401  
1402    return self;
1403  }
1404  
1405  module.exports = _assertThisInitialized;
1406  
1407  /***/ }),
1408  
1409  /***/ 123:
1410  /***/ (function(module, exports, __webpack_require__) {
1411  
1412  /* WEBPACK VAR INJECTION */(function(module, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/punycode v1.3.2 by @mathias */
1413  ;(function(root) {
1414  
1415      /** Detect free variables */
1416      var freeExports =  true && exports &&
1417          !exports.nodeType && exports;
1418      var freeModule =  true && module &&
1419          !module.nodeType && module;
1420      var freeGlobal = typeof global == 'object' && global;
1421      if (
1422          freeGlobal.global === freeGlobal ||
1423          freeGlobal.window === freeGlobal ||
1424          freeGlobal.self === freeGlobal
1425      ) {
1426          root = freeGlobal;
1427      }
1428  
1429      /**
1430       * The `punycode` object.
1431       * @name punycode
1432       * @type Object
1433       */
1434      var punycode,
1435  
1436      /** Highest positive signed 32-bit float value */
1437      maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
1438  
1439      /** Bootstring parameters */
1440      base = 36,
1441      tMin = 1,
1442      tMax = 26,
1443      skew = 38,
1444      damp = 700,
1445      initialBias = 72,
1446      initialN = 128, // 0x80
1447      delimiter = '-', // '\x2D'
1448  
1449      /** Regular expressions */
1450      regexPunycode = /^xn--/,
1451      regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
1452      regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
1453  
1454      /** Error messages */
1455      errors = {
1456          'overflow': 'Overflow: input needs wider integers to process',
1457          'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
1458          'invalid-input': 'Invalid input'
1459      },
1460  
1461      /** Convenience shortcuts */
1462      baseMinusTMin = base - tMin,
1463      floor = Math.floor,
1464      stringFromCharCode = String.fromCharCode,
1465  
1466      /** Temporary variable */
1467      key;
1468  
1469      /*--------------------------------------------------------------------------*/
1470  
1471      /**
1472       * A generic error utility function.
1473       * @private
1474       * @param {String} type The error type.
1475       * @returns {Error} Throws a `RangeError` with the applicable error message.
1476       */
1477  	function error(type) {
1478          throw RangeError(errors[type]);
1479      }
1480  
1481      /**
1482       * A generic `Array#map` utility function.
1483       * @private
1484       * @param {Array} array The array to iterate over.
1485       * @param {Function} callback The function that gets called for every array
1486       * item.
1487       * @returns {Array} A new array of values returned by the callback function.
1488       */
1489  	function map(array, fn) {
1490          var length = array.length;
1491          var result = [];
1492          while (length--) {
1493              result[length] = fn(array[length]);
1494          }
1495          return result;
1496      }
1497  
1498      /**
1499       * A simple `Array#map`-like wrapper to work with domain name strings or email
1500       * addresses.
1501       * @private
1502       * @param {String} domain The domain name or email address.
1503       * @param {Function} callback The function that gets called for every
1504       * character.
1505       * @returns {Array} A new string of characters returned by the callback
1506       * function.
1507       */
1508  	function mapDomain(string, fn) {
1509          var parts = string.split('@');
1510          var result = '';
1511          if (parts.length > 1) {
1512              // In email addresses, only the domain name should be punycoded. Leave
1513              // the local part (i.e. everything up to `@`) intact.
1514              result = parts[0] + '@';
1515              string = parts[1];
1516          }
1517          // Avoid `split(regex)` for IE8 compatibility. See #17.
1518          string = string.replace(regexSeparators, '\x2E');
1519          var labels = string.split('.');
1520          var encoded = map(labels, fn).join('.');
1521          return result + encoded;
1522      }
1523  
1524      /**
1525       * Creates an array containing the numeric code points of each Unicode
1526       * character in the string. While JavaScript uses UCS-2 internally,
1527       * this function will convert a pair of surrogate halves (each of which
1528       * UCS-2 exposes as separate characters) into a single code point,
1529       * matching UTF-16.
1530       * @see `punycode.ucs2.encode`
1531       * @see <https://mathiasbynens.be/notes/javascript-encoding>
1532       * @memberOf punycode.ucs2
1533       * @name decode
1534       * @param {String} string The Unicode input string (UCS-2).
1535       * @returns {Array} The new array of code points.
1536       */
1537  	function ucs2decode(string) {
1538          var output = [],
1539              counter = 0,
1540              length = string.length,
1541              value,
1542              extra;
1543          while (counter < length) {
1544              value = string.charCodeAt(counter++);
1545              if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
1546                  // high surrogate, and there is a next character
1547                  extra = string.charCodeAt(counter++);
1548                  if ((extra & 0xFC00) == 0xDC00) { // low surrogate
1549                      output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
1550                  } else {
1551                      // unmatched surrogate; only append this code unit, in case the next
1552                      // code unit is the high surrogate of a surrogate pair
1553                      output.push(value);
1554                      counter--;
1555                  }
1556              } else {
1557                  output.push(value);
1558              }
1559          }
1560          return output;
1561      }
1562  
1563      /**
1564       * Creates a string based on an array of numeric code points.
1565       * @see `punycode.ucs2.decode`
1566       * @memberOf punycode.ucs2
1567       * @name encode
1568       * @param {Array} codePoints The array of numeric code points.
1569       * @returns {String} The new Unicode string (UCS-2).
1570       */
1571  	function ucs2encode(array) {
1572          return map(array, function(value) {
1573              var output = '';
1574              if (value > 0xFFFF) {
1575                  value -= 0x10000;
1576                  output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
1577                  value = 0xDC00 | value & 0x3FF;
1578              }
1579              output += stringFromCharCode(value);
1580              return output;
1581          }).join('');
1582      }
1583  
1584      /**
1585       * Converts a basic code point into a digit/integer.
1586       * @see `digitToBasic()`
1587       * @private
1588       * @param {Number} codePoint The basic numeric code point value.
1589       * @returns {Number} The numeric value of a basic code point (for use in
1590       * representing integers) in the range `0` to `base - 1`, or `base` if
1591       * the code point does not represent a value.
1592       */
1593  	function basicToDigit(codePoint) {
1594          if (codePoint - 48 < 10) {
1595              return codePoint - 22;
1596          }
1597          if (codePoint - 65 < 26) {
1598              return codePoint - 65;
1599          }
1600          if (codePoint - 97 < 26) {
1601              return codePoint - 97;
1602          }
1603          return base;
1604      }
1605  
1606      /**
1607       * Converts a digit/integer into a basic code point.
1608       * @see `basicToDigit()`
1609       * @private
1610       * @param {Number} digit The numeric value of a basic code point.
1611       * @returns {Number} The basic code point whose value (when used for
1612       * representing integers) is `digit`, which needs to be in the range
1613       * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
1614       * used; else, the lowercase form is used. The behavior is undefined
1615       * if `flag` is non-zero and `digit` has no uppercase form.
1616       */
1617  	function digitToBasic(digit, flag) {
1618          //  0..25 map to ASCII a..z or A..Z
1619          // 26..35 map to ASCII 0..9
1620          return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
1621      }
1622  
1623      /**
1624       * Bias adaptation function as per section 3.4 of RFC 3492.
1625       * http://tools.ietf.org/html/rfc3492#section-3.4
1626       * @private
1627       */
1628  	function adapt(delta, numPoints, firstTime) {
1629          var k = 0;
1630          delta = firstTime ? floor(delta / damp) : delta >> 1;
1631          delta += floor(delta / numPoints);
1632          for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
1633              delta = floor(delta / baseMinusTMin);
1634          }
1635          return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
1636      }
1637  
1638      /**
1639       * Converts a Punycode string of ASCII-only symbols to a string of Unicode
1640       * symbols.
1641       * @memberOf punycode
1642       * @param {String} input The Punycode string of ASCII-only symbols.
1643       * @returns {String} The resulting string of Unicode symbols.
1644       */
1645  	function decode(input) {
1646          // Don't use UCS-2
1647          var output = [],
1648              inputLength = input.length,
1649              out,
1650              i = 0,
1651              n = initialN,
1652              bias = initialBias,
1653              basic,
1654              j,
1655              index,
1656              oldi,
1657              w,
1658              k,
1659              digit,
1660              t,
1661              /** Cached calculation results */
1662              baseMinusT;
1663  
1664          // Handle the basic code points: let `basic` be the number of input code
1665          // points before the last delimiter, or `0` if there is none, then copy
1666          // the first basic code points to the output.
1667  
1668          basic = input.lastIndexOf(delimiter);
1669          if (basic < 0) {
1670              basic = 0;
1671          }
1672  
1673          for (j = 0; j < basic; ++j) {
1674              // if it's not a basic code point
1675              if (input.charCodeAt(j) >= 0x80) {
1676                  error('not-basic');
1677              }
1678              output.push(input.charCodeAt(j));
1679          }
1680  
1681          // Main decoding loop: start just after the last delimiter if any basic code
1682          // points were copied; start at the beginning otherwise.
1683  
1684          for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
1685  
1686              // `index` is the index of the next character to be consumed.
1687              // Decode a generalized variable-length integer into `delta`,
1688              // which gets added to `i`. The overflow checking is easier
1689              // if we increase `i` as we go, then subtract off its starting
1690              // value at the end to obtain `delta`.
1691              for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
1692  
1693                  if (index >= inputLength) {
1694                      error('invalid-input');
1695                  }
1696  
1697                  digit = basicToDigit(input.charCodeAt(index++));
1698  
1699                  if (digit >= base || digit > floor((maxInt - i) / w)) {
1700                      error('overflow');
1701                  }
1702  
1703                  i += digit * w;
1704                  t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
1705  
1706                  if (digit < t) {
1707                      break;
1708                  }
1709  
1710                  baseMinusT = base - t;
1711                  if (w > floor(maxInt / baseMinusT)) {
1712                      error('overflow');
1713                  }
1714  
1715                  w *= baseMinusT;
1716  
1717              }
1718  
1719              out = output.length + 1;
1720              bias = adapt(i - oldi, out, oldi == 0);
1721  
1722              // `i` was supposed to wrap around from `out` to `0`,
1723              // incrementing `n` each time, so we'll fix that now:
1724              if (floor(i / out) > maxInt - n) {
1725                  error('overflow');
1726              }
1727  
1728              n += floor(i / out);
1729              i %= out;
1730  
1731              // Insert `n` at position `i` of the output
1732              output.splice(i++, 0, n);
1733  
1734          }
1735  
1736          return ucs2encode(output);
1737      }
1738  
1739      /**
1740       * Converts a string of Unicode symbols (e.g. a domain name label) to a
1741       * Punycode string of ASCII-only symbols.
1742       * @memberOf punycode
1743       * @param {String} input The string of Unicode symbols.
1744       * @returns {String} The resulting Punycode string of ASCII-only symbols.
1745       */
1746  	function encode(input) {
1747          var n,
1748              delta,
1749              handledCPCount,
1750              basicLength,
1751              bias,
1752              j,
1753              m,
1754              q,
1755              k,
1756              t,
1757              currentValue,
1758              output = [],
1759              /** `inputLength` will hold the number of code points in `input`. */
1760              inputLength,
1761              /** Cached calculation results */
1762              handledCPCountPlusOne,
1763              baseMinusT,
1764              qMinusT;
1765  
1766          // Convert the input in UCS-2 to Unicode
1767          input = ucs2decode(input);
1768  
1769          // Cache the length
1770          inputLength = input.length;
1771  
1772          // Initialize the state
1773          n = initialN;
1774          delta = 0;
1775          bias = initialBias;
1776  
1777          // Handle the basic code points
1778          for (j = 0; j < inputLength; ++j) {
1779              currentValue = input[j];
1780              if (currentValue < 0x80) {
1781                  output.push(stringFromCharCode(currentValue));
1782              }
1783          }
1784  
1785          handledCPCount = basicLength = output.length;
1786  
1787          // `handledCPCount` is the number of code points that have been handled;
1788          // `basicLength` is the number of basic code points.
1789  
1790          // Finish the basic string - if it is not empty - with a delimiter
1791          if (basicLength) {
1792              output.push(delimiter);
1793          }
1794  
1795          // Main encoding loop:
1796          while (handledCPCount < inputLength) {
1797  
1798              // All non-basic code points < n have been handled already. Find the next
1799              // larger one:
1800              for (m = maxInt, j = 0; j < inputLength; ++j) {
1801                  currentValue = input[j];
1802                  if (currentValue >= n && currentValue < m) {
1803                      m = currentValue;
1804                  }
1805              }
1806  
1807              // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
1808              // but guard against overflow
1809              handledCPCountPlusOne = handledCPCount + 1;
1810              if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
1811                  error('overflow');
1812              }
1813  
1814              delta += (m - n) * handledCPCountPlusOne;
1815              n = m;
1816  
1817              for (j = 0; j < inputLength; ++j) {
1818                  currentValue = input[j];
1819  
1820                  if (currentValue < n && ++delta > maxInt) {
1821                      error('overflow');
1822                  }
1823  
1824                  if (currentValue == n) {
1825                      // Represent delta as a generalized variable-length integer
1826                      for (q = delta, k = base; /* no condition */; k += base) {
1827                          t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
1828                          if (q < t) {
1829                              break;
1830                          }
1831                          qMinusT = q - t;
1832                          baseMinusT = base - t;
1833                          output.push(
1834                              stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
1835                          );
1836                          q = floor(qMinusT / baseMinusT);
1837                      }
1838  
1839                      output.push(stringFromCharCode(digitToBasic(q, 0)));
1840                      bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
1841                      delta = 0;
1842                      ++handledCPCount;
1843                  }
1844              }
1845  
1846              ++delta;
1847              ++n;
1848  
1849          }
1850          return output.join('');
1851      }
1852  
1853      /**
1854       * Converts a Punycode string representing a domain name or an email address
1855       * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
1856       * it doesn't matter if you call it on a string that has already been
1857       * converted to Unicode.
1858       * @memberOf punycode
1859       * @param {String} input The Punycoded domain name or email address to
1860       * convert to Unicode.
1861       * @returns {String} The Unicode representation of the given Punycode
1862       * string.
1863       */
1864  	function toUnicode(input) {
1865          return mapDomain(input, function(string) {
1866              return regexPunycode.test(string)
1867                  ? decode(string.slice(4).toLowerCase())
1868                  : string;
1869          });
1870      }
1871  
1872      /**
1873       * Converts a Unicode string representing a domain name or an email address to
1874       * Punycode. Only the non-ASCII parts of the domain name will be converted,
1875       * i.e. it doesn't matter if you call it with a domain that's already in
1876       * ASCII.
1877       * @memberOf punycode
1878       * @param {String} input The domain name or email address to convert, as a
1879       * Unicode string.
1880       * @returns {String} The Punycode representation of the given domain name or
1881       * email address.
1882       */
1883  	function toASCII(input) {
1884          return mapDomain(input, function(string) {
1885              return regexNonASCII.test(string)
1886                  ? 'xn--' + encode(string)
1887                  : string;
1888          });
1889      }
1890  
1891      /*--------------------------------------------------------------------------*/
1892  
1893      /** Define the public API */
1894      punycode = {
1895          /**
1896           * A string representing the current Punycode.js version number.
1897           * @memberOf punycode
1898           * @type String
1899           */
1900          'version': '1.3.2',
1901          /**
1902           * An object of methods to convert from JavaScript's internal character
1903           * representation (UCS-2) to Unicode code points, and back.
1904           * @see <https://mathiasbynens.be/notes/javascript-encoding>
1905           * @memberOf punycode
1906           * @type Object
1907           */
1908          'ucs2': {
1909              'decode': ucs2decode,
1910              'encode': ucs2encode
1911          },
1912          'decode': decode,
1913          'encode': encode,
1914          'toASCII': toASCII,
1915          'toUnicode': toUnicode
1916      };
1917  
1918      /** Expose `punycode` */
1919      // Some AMD build optimizers, like r.js, check for specific condition patterns
1920      // like the following:
1921      if (
1922          true
1923      ) {
1924          !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
1925              return punycode;
1926          }).call(exports, __webpack_require__, exports, module),
1927                  __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1928      } else {}
1929  
1930  }(this));
1931  
1932  /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(124)(module), __webpack_require__(65)))
1933  
1934  /***/ }),
1935  
1936  /***/ 124:
1937  /***/ (function(module, exports) {
1938  
1939  module.exports = function(module) {
1940      if (!module.webpackPolyfill) {
1941          module.deprecate = function() {};
1942          module.paths = [];
1943          // module.parent = undefined by default
1944          if (!module.children) module.children = [];
1945          Object.defineProperty(module, "loaded", {
1946              enumerable: true,
1947              get: function() {
1948                  return module.l;
1949              }
1950          });
1951          Object.defineProperty(module, "id", {
1952              enumerable: true,
1953              get: function() {
1954                  return module.i;
1955              }
1956          });
1957          module.webpackPolyfill = 1;
1958      }
1959      return module;
1960  };
1961  
1962  
1963  /***/ }),
1964  
1965  /***/ 125:
1966  /***/ (function(module, exports, __webpack_require__) {
1967  
1968  "use strict";
1969  
1970  
1971  module.exports = {
1972    isString: function(arg) {
1973      return typeof(arg) === 'string';
1974    },
1975    isObject: function(arg) {
1976      return typeof(arg) === 'object' && arg !== null;
1977    },
1978    isNull: function(arg) {
1979      return arg === null;
1980    },
1981    isNullOrUndefined: function(arg) {
1982      return arg == null;
1983    }
1984  };
1985  
1986  
1987  /***/ }),
1988  
1989  /***/ 126:
1990  /***/ (function(module, exports, __webpack_require__) {
1991  
1992  "use strict";
1993  
1994  
1995  exports.decode = exports.parse = __webpack_require__(127);
1996  exports.encode = exports.stringify = __webpack_require__(128);
1997  
1998  
1999  /***/ }),
2000  
2001  /***/ 127:
2002  /***/ (function(module, exports, __webpack_require__) {
2003  
2004  "use strict";
2005  // Copyright Joyent, Inc. and other Node contributors.
2006  //
2007  // Permission is hereby granted, free of charge, to any person obtaining a
2008  // copy of this software and associated documentation files (the
2009  // "Software"), to deal in the Software without restriction, including
2010  // without limitation the rights to use, copy, modify, merge, publish,
2011  // distribute, sublicense, and/or sell copies of the Software, and to permit
2012  // persons to whom the Software is furnished to do so, subject to the
2013  // following conditions:
2014  //
2015  // The above copyright notice and this permission notice shall be included
2016  // in all copies or substantial portions of the Software.
2017  //
2018  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2019  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2020  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2021  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2022  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2023  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2024  // USE OR OTHER DEALINGS IN THE SOFTWARE.
2025  
2026  
2027  
2028  // If obj.hasOwnProperty has been overridden, then calling
2029  // obj.hasOwnProperty(prop) will break.
2030  // See: https://github.com/joyent/node/issues/1707
2031  function hasOwnProperty(obj, prop) {
2032    return Object.prototype.hasOwnProperty.call(obj, prop);
2033  }
2034  
2035  module.exports = function(qs, sep, eq, options) {
2036    sep = sep || '&';
2037    eq = eq || '=';
2038    var obj = {};
2039  
2040    if (typeof qs !== 'string' || qs.length === 0) {
2041      return obj;
2042    }
2043  
2044    var regexp = /\+/g;
2045    qs = qs.split(sep);
2046  
2047    var maxKeys = 1000;
2048    if (options && typeof options.maxKeys === 'number') {
2049      maxKeys = options.maxKeys;
2050    }
2051  
2052    var len = qs.length;
2053    // maxKeys <= 0 means that we should not limit keys count
2054    if (maxKeys > 0 && len > maxKeys) {
2055      len = maxKeys;
2056    }
2057  
2058    for (var i = 0; i < len; ++i) {
2059      var x = qs[i].replace(regexp, '%20'),
2060          idx = x.indexOf(eq),
2061          kstr, vstr, k, v;
2062  
2063      if (idx >= 0) {
2064        kstr = x.substr(0, idx);
2065        vstr = x.substr(idx + 1);
2066      } else {
2067        kstr = x;
2068        vstr = '';
2069      }
2070  
2071      k = decodeURIComponent(kstr);
2072      v = decodeURIComponent(vstr);
2073  
2074      if (!hasOwnProperty(obj, k)) {
2075        obj[k] = v;
2076      } else if (isArray(obj[k])) {
2077        obj[k].push(v);
2078      } else {
2079        obj[k] = [obj[k], v];
2080      }
2081    }
2082  
2083    return obj;
2084  };
2085  
2086  var isArray = Array.isArray || function (xs) {
2087    return Object.prototype.toString.call(xs) === '[object Array]';
2088  };
2089  
2090  
2091  /***/ }),
2092  
2093  /***/ 128:
2094  /***/ (function(module, exports, __webpack_require__) {
2095  
2096  "use strict";
2097  // Copyright Joyent, Inc. and other Node contributors.
2098  //
2099  // Permission is hereby granted, free of charge, to any person obtaining a
2100  // copy of this software and associated documentation files (the
2101  // "Software"), to deal in the Software without restriction, including
2102  // without limitation the rights to use, copy, modify, merge, publish,
2103  // distribute, sublicense, and/or sell copies of the Software, and to permit
2104  // persons to whom the Software is furnished to do so, subject to the
2105  // following conditions:
2106  //
2107  // The above copyright notice and this permission notice shall be included
2108  // in all copies or substantial portions of the Software.
2109  //
2110  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2111  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2112  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
2113  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
2114  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
2115  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
2116  // USE OR OTHER DEALINGS IN THE SOFTWARE.
2117  
2118  
2119  
2120  var stringifyPrimitive = function(v) {
2121    switch (typeof v) {
2122      case 'string':
2123        return v;
2124  
2125      case 'boolean':
2126        return v ? 'true' : 'false';
2127  
2128      case 'number':
2129        return isFinite(v) ? v : '';
2130  
2131      default:
2132        return '';
2133    }
2134  };
2135  
2136  module.exports = function(obj, sep, eq, name) {
2137    sep = sep || '&';
2138    eq = eq || '=';
2139    if (obj === null) {
2140      obj = undefined;
2141    }
2142  
2143    if (typeof obj === 'object') {
2144      return map(objectKeys(obj), function(k) {
2145        var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
2146        if (isArray(obj[k])) {
2147          return map(obj[k], function(v) {
2148            return ks + encodeURIComponent(stringifyPrimitive(v));
2149          }).join(sep);
2150        } else {
2151          return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
2152        }
2153      }).join(sep);
2154  
2155    }
2156  
2157    if (!name) return '';
2158    return encodeURIComponent(stringifyPrimitive(name)) + eq +
2159           encodeURIComponent(stringifyPrimitive(obj));
2160  };
2161  
2162  var isArray = Array.isArray || function (xs) {
2163    return Object.prototype.toString.call(xs) === '[object Array]';
2164  };
2165  
2166  function map (xs, f) {
2167    if (xs.map) return xs.map(f);
2168    var res = [];
2169    for (var i = 0; i < xs.length; i++) {
2170      res.push(f(xs[i], i));
2171    }
2172    return res;
2173  }
2174  
2175  var objectKeys = Object.keys || function (obj) {
2176    var res = [];
2177    for (var key in obj) {
2178      if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
2179    }
2180    return res;
2181  };
2182  
2183  
2184  /***/ }),
2185  
2186  /***/ 13:
2187  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2188  
2189  "use strict";
2190  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _possibleConstructorReturn; });
2191  /* harmony import */ var _helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(31);
2192  /* harmony import */ var _assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);
2193  
2194  
2195  function _possibleConstructorReturn(self, call) {
2196    if (call && (Object(_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[/* default */ "a"])(call) === "object" || typeof call === "function")) {
2197      return call;
2198    }
2199  
2200    return Object(_assertThisInitialized__WEBPACK_IMPORTED_MODULE_1__[/* default */ "a"])(self);
2201  }
2202  
2203  /***/ }),
2204  
2205  /***/ 14:
2206  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2207  
2208  "use strict";
2209  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _getPrototypeOf; });
2210  function _getPrototypeOf(o) {
2211    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
2212      return o.__proto__ || Object.getPrototypeOf(o);
2213    };
2214    return _getPrototypeOf(o);
2215  }
2216  
2217  /***/ }),
2218  
2219  /***/ 143:
2220  /***/ (function(module, exports) {
2221  
2222  (function() { module.exports = this["wp"]["tokenList"]; }());
2223  
2224  /***/ }),
2225  
2226  /***/ 15:
2227  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2228  
2229  "use strict";
2230  
2231  // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js
2232  function _setPrototypeOf(o, p) {
2233    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
2234      o.__proto__ = p;
2235      return o;
2236    };
2237  
2238    return _setPrototypeOf(o, p);
2239  }
2240  // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/inherits.js
2241  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _inherits; });
2242  
2243  function _inherits(subClass, superClass) {
2244    if (typeof superClass !== "function" && superClass !== null) {
2245      throw new TypeError("Super expression must either be null or a function");
2246    }
2247  
2248    subClass.prototype = Object.create(superClass && superClass.prototype, {
2249      constructor: {
2250        value: subClass,
2251        writable: true,
2252        configurable: true
2253      }
2254    });
2255    if (superClass) _setPrototypeOf(subClass, superClass);
2256  }
2257  
2258  /***/ }),
2259  
2260  /***/ 16:
2261  /***/ (function(module, exports, __webpack_require__) {
2262  
2263  var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
2264    Copyright (c) 2017 Jed Watson.
2265    Licensed under the MIT License (MIT), see
2266    http://jedwatson.github.io/classnames
2267  */
2268  /* global define */
2269  
2270  (function () {
2271      'use strict';
2272  
2273      var hasOwn = {}.hasOwnProperty;
2274  
2275  	function classNames () {
2276          var classes = [];
2277  
2278          for (var i = 0; i < arguments.length; i++) {
2279              var arg = arguments[i];
2280              if (!arg) continue;
2281  
2282              var argType = typeof arg;
2283  
2284              if (argType === 'string' || argType === 'number') {
2285                  classes.push(arg);
2286              } else if (Array.isArray(arg) && arg.length) {
2287                  var inner = classNames.apply(null, arg);
2288                  if (inner) {
2289                      classes.push(inner);
2290                  }
2291              } else if (argType === 'object') {
2292                  for (var key in arg) {
2293                      if (hasOwn.call(arg, key) && arg[key]) {
2294                          classes.push(key);
2295                      }
2296                  }
2297              }
2298          }
2299  
2300          return classes.join(' ');
2301      }
2302  
2303      if ( true && module.exports) {
2304          classNames.default = classNames;
2305          module.exports = classNames;
2306      } else if (true) {
2307          // register as 'classnames', consistent with npm package name
2308          !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
2309              return classNames;
2310          }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
2311                  __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
2312      } else {}
2313  }());
2314  
2315  
2316  /***/ }),
2317  
2318  /***/ 17:
2319  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2320  
2321  "use strict";
2322  
2323  // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js
2324  function _arrayWithoutHoles(arr) {
2325    if (Array.isArray(arr)) {
2326      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
2327        arr2[i] = arr[i];
2328      }
2329  
2330      return arr2;
2331    }
2332  }
2333  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js
2334  var iterableToArray = __webpack_require__(30);
2335  
2336  // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js
2337  function _nonIterableSpread() {
2338    throw new TypeError("Invalid attempt to spread non-iterable instance");
2339  }
2340  // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js
2341  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _toConsumableArray; });
2342  
2343  
2344  
2345  function _toConsumableArray(arr) {
2346    return _arrayWithoutHoles(arr) || Object(iterableToArray["a" /* default */])(arr) || _nonIterableSpread();
2347  }
2348  
2349  /***/ }),
2350  
2351  /***/ 18:
2352  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2353  
2354  "use strict";
2355  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _extends; });
2356  function _extends() {
2357    _extends = Object.assign || function (target) {
2358      for (var i = 1; i < arguments.length; i++) {
2359        var source = arguments[i];
2360  
2361        for (var key in source) {
2362          if (Object.prototype.hasOwnProperty.call(source, key)) {
2363            target[key] = source[key];
2364          }
2365        }
2366      }
2367  
2368      return target;
2369    };
2370  
2371    return _extends.apply(this, arguments);
2372  }
2373  
2374  /***/ }),
2375  
2376  /***/ 19:
2377  /***/ (function(module, exports) {
2378  
2379  (function() { module.exports = this["wp"]["keycodes"]; }());
2380  
2381  /***/ }),
2382  
2383  /***/ 2:
2384  /***/ (function(module, exports) {
2385  
2386  (function() { module.exports = this["lodash"]; }());
2387  
2388  /***/ }),
2389  
2390  /***/ 20:
2391  /***/ (function(module, exports, __webpack_require__) {
2392  
2393  module.exports = __webpack_require__(47);
2394  
2395  
2396  /***/ }),
2397  
2398  /***/ 21:
2399  /***/ (function(module, __webpack_exports__, __webpack_require__) {
2400  
2401  "use strict";
2402  
2403  // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js
2404  function _objectWithoutPropertiesLoose(source, excluded) {
2405    if (source == null) return {};
2406    var target = {};
2407    var sourceKeys = Object.keys(source);
2408    var key, i;
2409  
2410    for (i = 0; i < sourceKeys.length; i++) {
2411      key = sourceKeys[i];
2412      if (excluded.indexOf(key) >= 0) continue;
2413      target[key] = source[key];
2414    }
2415  
2416    return target;
2417  }
2418  // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js
2419  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _objectWithoutProperties; });
2420  
2421  function _objectWithoutProperties(source, excluded) {
2422    if (source == null) return {};
2423    var target = _objectWithoutPropertiesLoose(source, excluded);
2424    var key, i;
2425  
2426    if (Object.getOwnPropertySymbols) {
2427      var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
2428  
2429      for (i = 0; i < sourceSymbolKeys.length; i++) {
2430        key = sourceSymbolKeys[i];
2431        if (excluded.indexOf(key) >= 0) continue;
2432        if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
2433        target[key] = source[key];
2434      }
2435    }
2436  
2437    return target;
2438  }
2439  
2440  /***/ }),
2441  
2442  /***/ 218:
2443  /***/ (function(module, exports, __webpack_require__) {
2444  
2445  "use strict";
2446  
2447  
2448  Object.defineProperty(exports, "__esModule", {
2449    value: true
2450  });
2451  /**
2452   * Redux dispatch multiple actions
2453   */
2454  
2455  function multi(_ref) {
2456    var dispatch = _ref.dispatch;
2457  
2458    return function (next) {
2459      return function (action) {
2460        return Array.isArray(action) ? action.filter(Boolean).map(dispatch) : next(action);
2461      };
2462    };
2463  }
2464  
2465  /**
2466   * Exports
2467   */
2468  
2469  exports.default = multi;
2470  
2471  /***/ }),
2472  
2473  /***/ 219:
2474  /***/ (function(module, exports, __webpack_require__) {
2475  
2476  /*!
2477  
2478   diff v3.5.0
2479  
2480  Software License Agreement (BSD License)
2481  
2482  Copyright (c) 2009-2015, Kevin Decker <kpdecker@gmail.com>
2483  
2484  All rights reserved.
2485  
2486  Redistribution and use of this software in source and binary forms, with or without modification,
2487  are permitted provided that the following conditions are met:
2488  
2489  * Redistributions of source code must retain the above
2490    copyright notice, this list of conditions and the
2491    following disclaimer.
2492  
2493  * Redistributions in binary form must reproduce the above
2494    copyright notice, this list of conditions and the
2495    following disclaimer in the documentation and/or other
2496    materials provided with the distribution.
2497  
2498  * Neither the name of Kevin Decker nor the names of its
2499    contributors may be used to endorse or promote products
2500    derived from this software without specific prior
2501    written permission.
2502  
2503  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
2504  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
2505  FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
2506  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2507  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2508  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
2509  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
2510  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2511  @license
2512  */
2513  (function webpackUniversalModuleDefinition(root, factory) {
2514      if(true)
2515          module.exports = factory();
2516      else {}
2517  })(this, function() {
2518  return /******/ (function(modules) { // webpackBootstrap
2519  /******/     // The module cache
2520  /******/     var installedModules = {};
2521  
2522  /******/     // The require function
2523  /******/ 	function __webpack_require__(moduleId) {
2524  
2525  /******/         // Check if module is in cache
2526  /******/         if(installedModules[moduleId])
2527  /******/             return installedModules[moduleId].exports;
2528  
2529  /******/         // Create a new module (and put it into the cache)
2530  /******/         var module = installedModules[moduleId] = {
2531  /******/             exports: {},
2532  /******/             id: moduleId,
2533  /******/             loaded: false
2534  /******/         };
2535  
2536  /******/         // Execute the module function
2537  /******/         modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
2538  
2539  /******/         // Flag the module as loaded
2540  /******/         module.loaded = true;
2541  
2542  /******/         // Return the exports of the module
2543  /******/         return module.exports;
2544  /******/     }
2545  
2546  
2547  /******/     // expose the modules object (__webpack_modules__)
2548  /******/     __webpack_require__.m = modules;
2549  
2550  /******/     // expose the module cache
2551  /******/     __webpack_require__.c = installedModules;
2552  
2553  /******/     // __webpack_public_path__
2554  /******/     __webpack_require__.p = "";
2555  
2556  /******/     // Load entry module and return exports
2557  /******/     return __webpack_require__(0);
2558  /******/ })
2559  /************************************************************************/
2560  /******/ ([
2561  /* 0 */
2562  /***/ (function(module, exports, __webpack_require__) {
2563  
2564      /*istanbul ignore start*/'use strict';
2565  
2566      exports.__esModule = true;
2567      exports.canonicalize = exports.convertChangesToXML = exports.convertChangesToDMP = exports.merge = exports.parsePatch = exports.applyPatches = exports.applyPatch = exports.createPatch = exports.createTwoFilesPatch = exports.structuredPatch = exports.diffArrays = exports.diffJson = exports.diffCss = exports.diffSentences = exports.diffTrimmedLines = exports.diffLines = exports.diffWordsWithSpace = exports.diffWords = exports.diffChars = exports.Diff = undefined;
2568  
2569      /*istanbul ignore end*/var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
2570  
2571      /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
2572  
2573      /*istanbul ignore end*/var /*istanbul ignore start*/_character = __webpack_require__(2) /*istanbul ignore end*/;
2574  
2575      var /*istanbul ignore start*/_word = __webpack_require__(3) /*istanbul ignore end*/;
2576  
2577      var /*istanbul ignore start*/_line = __webpack_require__(5) /*istanbul ignore end*/;
2578  
2579      var /*istanbul ignore start*/_sentence = __webpack_require__(6) /*istanbul ignore end*/;
2580  
2581      var /*istanbul ignore start*/_css = __webpack_require__(7) /*istanbul ignore end*/;
2582  
2583      var /*istanbul ignore start*/_json = __webpack_require__(8) /*istanbul ignore end*/;
2584  
2585      var /*istanbul ignore start*/_array = __webpack_require__(9) /*istanbul ignore end*/;
2586  
2587      var /*istanbul ignore start*/_apply = __webpack_require__(10) /*istanbul ignore end*/;
2588  
2589      var /*istanbul ignore start*/_parse = __webpack_require__(11) /*istanbul ignore end*/;
2590  
2591      var /*istanbul ignore start*/_merge = __webpack_require__(13) /*istanbul ignore end*/;
2592  
2593      var /*istanbul ignore start*/_create = __webpack_require__(14) /*istanbul ignore end*/;
2594  
2595      var /*istanbul ignore start*/_dmp = __webpack_require__(16) /*istanbul ignore end*/;
2596  
2597      var /*istanbul ignore start*/_xml = __webpack_require__(17) /*istanbul ignore end*/;
2598  
2599      /*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2600  
2601      /* See LICENSE file for terms of use */
2602  
2603      /*
2604       * Text diff implementation.
2605       *
2606       * This library supports the following APIS:
2607       * JsDiff.diffChars: Character by character diff
2608       * JsDiff.diffWords: Word (as defined by \b regex) diff which ignores whitespace
2609       * JsDiff.diffLines: Line based diff
2610       *
2611       * JsDiff.diffCss: Diff targeted at CSS content
2612       *
2613       * These methods are based on the implementation proposed in
2614       * "An O(ND) Difference Algorithm and its Variations" (Myers, 1986).
2615       * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927
2616       */
2617      exports. /*istanbul ignore end*/Diff = _base2['default'];
2618      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffChars = _character.diffChars;
2619      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffWords = _word.diffWords;
2620      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffWordsWithSpace = _word.diffWordsWithSpace;
2621      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffLines = _line.diffLines;
2622      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffTrimmedLines = _line.diffTrimmedLines;
2623      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffSentences = _sentence.diffSentences;
2624      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffCss = _css.diffCss;
2625      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffJson = _json.diffJson;
2626      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffArrays = _array.diffArrays;
2627      /*istanbul ignore start*/exports. /*istanbul ignore end*/structuredPatch = _create.structuredPatch;
2628      /*istanbul ignore start*/exports. /*istanbul ignore end*/createTwoFilesPatch = _create.createTwoFilesPatch;
2629      /*istanbul ignore start*/exports. /*istanbul ignore end*/createPatch = _create.createPatch;
2630      /*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatch = _apply.applyPatch;
2631      /*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatches = _apply.applyPatches;
2632      /*istanbul ignore start*/exports. /*istanbul ignore end*/parsePatch = _parse.parsePatch;
2633      /*istanbul ignore start*/exports. /*istanbul ignore end*/merge = _merge.merge;
2634      /*istanbul ignore start*/exports. /*istanbul ignore end*/convertChangesToDMP = _dmp.convertChangesToDMP;
2635      /*istanbul ignore start*/exports. /*istanbul ignore end*/convertChangesToXML = _xml.convertChangesToXML;
2636      /*istanbul ignore start*/exports. /*istanbul ignore end*/canonicalize = _json.canonicalize;
2637      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJEaWZmIiwiZGlmZkNoYXJzIiwiZGlmZldvcmRzIiwiZGlmZldvcmRzV2l0aFNwYWNlIiwiZGlmZkxpbmVzIiwiZGlmZlRyaW1tZWRMaW5lcyIsImRpZmZTZW50ZW5jZXMiLCJkaWZmQ3NzIiwiZGlmZkpzb24iLCJkaWZmQXJyYXlzIiwic3RydWN0dXJlZFBhdGNoIiwiY3JlYXRlVHdvRmlsZXNQYXRjaCIsImNyZWF0ZVBhdGNoIiwiYXBwbHlQYXRjaCIsImFwcGx5UGF0Y2hlcyIsInBhcnNlUGF0Y2giLCJtZXJnZSIsImNvbnZlcnRDaGFuZ2VzVG9ETVAiLCJjb252ZXJ0Q2hhbmdlc1RvWE1MIiwiY2Fub25pY2FsaXplIl0sIm1hcHBpbmdzIjoiOzs7Ozt1QkFnQkE7Ozs7dUJBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7QUFqQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7O2dDQWtDRUEsSTt5REFFQUMsUzt5REFDQUMsUzt5REFDQUMsa0I7eURBQ0FDLFM7eURBQ0FDLGdCO3lEQUNBQyxhO3lEQUVBQyxPO3lEQUNBQyxRO3lEQUVBQyxVO3lEQUVBQyxlO3lEQUNBQyxtQjt5REFDQUMsVzt5REFDQUMsVTt5REFDQUMsWTt5REFDQUMsVTt5REFDQUMsSzt5REFDQUMsbUI7eURBQ0FDLG1CO3lEQUNBQyxZIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogU2VlIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMgb2YgdXNlICovXG5cbi8qXG4gKiBUZXh0IGRpZmYgaW1wbGVtZW50YXRpb24uXG4gKlxuICogVGhpcyBsaWJyYXJ5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgQVBJUzpcbiAqIEpzRGlmZi5kaWZmQ2hhcnM6IENoYXJhY3RlciBieSBjaGFyYWN0ZXIgZGlmZlxuICogSnNEaWZmLmRpZmZXb3JkczogV29yZCAoYXMgZGVmaW5lZCBieSBcXGIgcmVnZXgpIGRpZmYgd2hpY2ggaWdub3JlcyB3aGl0ZXNwYWNlXG4gKiBKc0RpZmYuZGlmZkxpbmVzOiBMaW5lIGJhc2VkIGRpZmZcbiAqXG4gKiBKc0RpZmYuZGlmZkNzczogRGlmZiB0YXJnZXRlZCBhdCBDU1MgY29udGVudFxuICpcbiAqIFRoZXNlIG1ldGhvZHMgYXJlIGJhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBwcm9wb3NlZCBpblxuICogXCJBbiBPKE5EKSBEaWZmZXJlbmNlIEFsZ29yaXRobSBhbmQgaXRzIFZhcmlhdGlvbnNcIiAoTXllcnMsIDE5ODYpLlxuICogaHR0cDovL2NpdGVzZWVyeC5pc3QucHN1LmVkdS92aWV3ZG9jL3N1bW1hcnk/ZG9pPTEwLjEuMS40LjY5MjdcbiAqL1xuaW1wb3J0IERpZmYgZnJvbSAnLi9kaWZmL2Jhc2UnO1xuaW1wb3J0IHtkaWZmQ2hhcnN9IGZyb20gJy4vZGlmZi9jaGFyYWN0ZXInO1xuaW1wb3J0IHtkaWZmV29yZHMsIGRpZmZXb3Jkc1dpdGhTcGFjZX0gZnJvbSAnLi9kaWZmL3dvcmQnO1xuaW1wb3J0IHtkaWZmTGluZXMsIGRpZmZUcmltbWVkTGluZXN9IGZyb20gJy4vZGlmZi9saW5lJztcbmltcG9ydCB7ZGlmZlNlbnRlbmNlc30gZnJvbSAnLi9kaWZmL3NlbnRlbmNlJztcblxuaW1wb3J0IHtkaWZmQ3NzfSBmcm9tICcuL2RpZmYvY3NzJztcbmltcG9ydCB7ZGlmZkpzb24sIGNhbm9uaWNhbGl6ZX0gZnJvbSAnLi9kaWZmL2pzb24nO1xuXG5pbXBvcnQge2RpZmZBcnJheXN9IGZyb20gJy4vZGlmZi9hcnJheSc7XG5cbmltcG9ydCB7YXBwbHlQYXRjaCwgYXBwbHlQYXRjaGVzfSBmcm9tICcuL3BhdGNoL2FwcGx5JztcbmltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXRjaC9wYXJzZSc7XG5pbXBvcnQge21lcmdlfSBmcm9tICcuL3BhdGNoL21lcmdlJztcbmltcG9ydCB7c3RydWN0dXJlZFBhdGNoLCBjcmVhdGVUd29GaWxlc1BhdGNoLCBjcmVhdGVQYXRjaH0gZnJvbSAnLi9wYXRjaC9jcmVhdGUnO1xuXG5pbXBvcnQge2NvbnZlcnRDaGFuZ2VzVG9ETVB9IGZyb20gJy4vY29udmVydC9kbXAnO1xuaW1wb3J0IHtjb252ZXJ0Q2hhbmdlc1RvWE1MfSBmcm9tICcuL2NvbnZlcnQveG1sJztcblxuZXhwb3J0IHtcbiAgRGlmZixcblxuICBkaWZmQ2hhcnMsXG4gIGRpZmZXb3JkcyxcbiAgZGlmZldvcmRzV2l0aFNwYWNlLFxuICBkaWZmTGluZXMsXG4gIGRpZmZUcmltbWVkTGluZXMsXG4gIGRpZmZTZW50ZW5jZXMsXG5cbiAgZGlmZkNzcyxcbiAgZGlmZkpzb24sXG5cbiAgZGlmZkFycmF5cyxcblxuICBzdHJ1Y3R1cmVkUGF0Y2gsXG4gIGNyZWF0ZVR3b0ZpbGVzUGF0Y2gsXG4gIGNyZWF0ZVBhdGNoLFxuICBhcHBseVBhdGNoLFxuICBhcHBseVBhdGNoZXMsXG4gIHBhcnNlUGF0Y2gsXG4gIG1lcmdlLFxuICBjb252ZXJ0Q2hhbmdlc1RvRE1QLFxuICBjb252ZXJ0Q2hhbmdlc1RvWE1MLFxuICBjYW5vbmljYWxpemVcbn07XG4iXX0=
2638  
2639  
2640  /***/ }),
2641  /* 1 */
2642  /***/ (function(module, exports) {
2643  
2644      /*istanbul ignore start*/'use strict';
2645  
2646      exports.__esModule = true;
2647      exports['default'] = /*istanbul ignore end*/Diff;
2648  	function Diff() {}
2649  
2650      Diff.prototype = {
2651        /*istanbul ignore start*/ /*istanbul ignore end*/diff: function diff(oldString, newString) {
2652          /*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
2653  
2654          var callback = options.callback;
2655          if (typeof options === 'function') {
2656            callback = options;
2657            options = {};
2658          }
2659          this.options = options;
2660  
2661          var self = this;
2662  
2663  	    function done(value) {
2664            if (callback) {
2665              setTimeout(function () {
2666                callback(undefined, value);
2667              }, 0);
2668              return true;
2669            } else {
2670              return value;
2671            }
2672          }
2673  
2674          // Allow subclasses to massage the input prior to running
2675          oldString = this.castInput(oldString);
2676          newString = this.castInput(newString);
2677  
2678          oldString = this.removeEmpty(this.tokenize(oldString));
2679          newString = this.removeEmpty(this.tokenize(newString));
2680  
2681          var newLen = newString.length,
2682              oldLen = oldString.length;
2683          var editLength = 1;
2684          var maxEditLength = newLen + oldLen;
2685          var bestPath = [{ newPos: -1, components: [] }];
2686  
2687          // Seed editLength = 0, i.e. the content starts with the same values
2688          var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
2689          if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
2690            // Identity per the equality and tokenizer
2691            return done([{ value: this.join(newString), count: newString.length }]);
2692          }
2693  
2694          // Main worker method. checks all permutations of a given edit length for acceptance.
2695  	    function execEditLength() {
2696            for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
2697              var basePath = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
2698              var addPath = bestPath[diagonalPath - 1],
2699                  removePath = bestPath[diagonalPath + 1],
2700                  _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
2701              if (addPath) {
2702                // No one else is going to attempt to use this value, clear it
2703                bestPath[diagonalPath - 1] = undefined;
2704              }
2705  
2706              var canAdd = addPath && addPath.newPos + 1 < newLen,
2707                  canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
2708              if (!canAdd && !canRemove) {
2709                // If this path is a terminal then prune
2710                bestPath[diagonalPath] = undefined;
2711                continue;
2712              }
2713  
2714              // Select the diagonal that we want to branch from. We select the prior
2715              // path whose position in the new string is the farthest from the origin
2716              // and does not pass the bounds of the diff graph
2717              if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
2718                basePath = clonePath(removePath);
2719                self.pushComponent(basePath.components, undefined, true);
2720              } else {
2721                basePath = addPath; // No need to clone, we've pulled it from the list
2722                basePath.newPos++;
2723                self.pushComponent(basePath.components, true, undefined);
2724              }
2725  
2726              _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath);
2727  
2728              // If we have hit the end of both strings, then we are done
2729              if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
2730                return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
2731              } else {
2732                // Otherwise track this path as a potential candidate and continue.
2733                bestPath[diagonalPath] = basePath;
2734              }
2735            }
2736  
2737            editLength++;
2738          }
2739  
2740          // Performs the length of edit iteration. Is a bit fugly as this has to support the
2741          // sync and async mode which is never fun. Loops over execEditLength until a value
2742          // is produced.
2743          if (callback) {
2744            (function exec() {
2745              setTimeout(function () {
2746                // This should not happen, but we want to be safe.
2747                /* istanbul ignore next */
2748                if (editLength > maxEditLength) {
2749                  return callback();
2750                }
2751  
2752                if (!execEditLength()) {
2753                  exec();
2754                }
2755              }, 0);
2756            })();
2757          } else {
2758            while (editLength <= maxEditLength) {
2759              var ret = execEditLength();
2760              if (ret) {
2761                return ret;
2762              }
2763            }
2764          }
2765        },
2766        /*istanbul ignore start*/ /*istanbul ignore end*/pushComponent: function pushComponent(components, added, removed) {
2767          var last = components[components.length - 1];
2768          if (last && last.added === added && last.removed === removed) {
2769            // We need to clone here as the component clone operation is just
2770            // as shallow array clone
2771            components[components.length - 1] = { count: last.count + 1, added: added, removed: removed };
2772          } else {
2773            components.push({ count: 1, added: added, removed: removed });
2774          }
2775        },
2776        /*istanbul ignore start*/ /*istanbul ignore end*/extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
2777          var newLen = newString.length,
2778              oldLen = oldString.length,
2779              newPos = basePath.newPos,
2780              oldPos = newPos - diagonalPath,
2781              commonCount = 0;
2782          while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
2783            newPos++;
2784            oldPos++;
2785            commonCount++;
2786          }
2787  
2788          if (commonCount) {
2789            basePath.components.push({ count: commonCount });
2790          }
2791  
2792          basePath.newPos = newPos;
2793          return oldPos;
2794        },
2795        /*istanbul ignore start*/ /*istanbul ignore end*/equals: function equals(left, right) {
2796          if (this.options.comparator) {
2797            return this.options.comparator(left, right);
2798          } else {
2799            return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();
2800          }
2801        },
2802        /*istanbul ignore start*/ /*istanbul ignore end*/removeEmpty: function removeEmpty(array) {
2803          var ret = [];
2804          for (var i = 0; i < array.length; i++) {
2805            if (array[i]) {
2806              ret.push(array[i]);
2807            }
2808          }
2809          return ret;
2810        },
2811        /*istanbul ignore start*/ /*istanbul ignore end*/castInput: function castInput(value) {
2812          return value;
2813        },
2814        /*istanbul ignore start*/ /*istanbul ignore end*/tokenize: function tokenize(value) {
2815          return value.split('');
2816        },
2817        /*istanbul ignore start*/ /*istanbul ignore end*/join: function join(chars) {
2818          return chars.join('');
2819        }
2820      };
2821  
2822  	function buildValues(diff, components, newString, oldString, useLongestToken) {
2823        var componentPos = 0,
2824            componentLen = components.length,
2825            newPos = 0,
2826            oldPos = 0;
2827  
2828        for (; componentPos < componentLen; componentPos++) {
2829          var component = components[componentPos];
2830          if (!component.removed) {
2831            if (!component.added && useLongestToken) {
2832              var value = newString.slice(newPos, newPos + component.count);
2833              value = value.map(function (value, i) {
2834                var oldValue = oldString[oldPos + i];
2835                return oldValue.length > value.length ? oldValue : value;
2836              });
2837  
2838              component.value = diff.join(value);
2839            } else {
2840              component.value = diff.join(newString.slice(newPos, newPos + component.count));
2841            }
2842            newPos += component.count;
2843  
2844            // Common case
2845            if (!component.added) {
2846              oldPos += component.count;
2847            }
2848          } else {
2849            component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));
2850            oldPos += component.count;
2851  
2852            // Reverse add and remove so removes are output first to match common convention
2853            // The diffing algorithm is tied to add then remove output and this is the simplest
2854            // route to get the desired output with minimal overhead.
2855            if (componentPos && components[componentPos - 1].added) {
2856              var tmp = components[componentPos - 1];
2857              components[componentPos - 1] = components[componentPos];
2858              components[componentPos] = tmp;
2859            }
2860          }
2861        }
2862  
2863        // Special case handle for when one terminal is ignored (i.e. whitespace).
2864        // For this case we merge the terminal into the prior string and drop the change.
2865        // This is only available for string mode.
2866        var lastComponent = components[componentLen - 1];
2867        if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
2868          components[componentLen - 2].value += lastComponent.value;
2869          components.pop();
2870        }
2871  
2872        return components;
2873      }
2874  
2875  	function clonePath(path) {
2876        return { newPos: path.newPos, components: path.components.slice(0) };
2877      }
2878      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Jhc2UuanMiXSwibmFtZXMiOlsiRGlmZiIsInByb3RvdHlwZSIsImRpZmYiLCJvbGRTdHJpbmciLCJuZXdTdHJpbmciLCJvcHRpb25zIiwiY2FsbGJhY2siLCJzZWxmIiwiZG9uZSIsInZhbHVlIiwic2V0VGltZW91dCIsInVuZGVmaW5lZCIsImNhc3RJbnB1dCIsInJlbW92ZUVtcHR5IiwidG9rZW5pemUiLCJuZXdMZW4iLCJsZW5ndGgiLCJvbGRMZW4iLCJlZGl0TGVuZ3RoIiwibWF4RWRpdExlbmd0aCIsImJlc3RQYXRoIiwibmV3UG9zIiwiY29tcG9uZW50cyIsIm9sZFBvcyIsImV4dHJhY3RDb21tb24iLCJqb2luIiwiY291bnQiLCJleGVjRWRpdExlbmd0aCIsImRpYWdvbmFsUGF0aCIsImJhc2VQYXRoIiwiYWRkUGF0aCIsInJlbW92ZVBhdGgiLCJjYW5BZGQiLCJjYW5SZW1vdmUiLCJjbG9uZVBhdGgiLCJwdXNoQ29tcG9uZW50IiwiYnVpbGRWYWx1ZXMiLCJ1c2VMb25nZXN0VG9rZW4iLCJleGVjIiwicmV0IiwiYWRkZWQiLCJyZW1vdmVkIiwibGFzdCIsInB1c2giLCJjb21tb25Db3VudCIsImVxdWFscyIsImxlZnQiLCJyaWdodCIsImNvbXBhcmF0b3IiLCJpZ25vcmVDYXNlIiwidG9Mb3dlckNhc2UiLCJhcnJheSIsImkiLCJzcGxpdCIsImNoYXJzIiwiY29tcG9uZW50UG9zIiwiY29tcG9uZW50TGVuIiwiY29tcG9uZW50Iiwic2xpY2UiLCJtYXAiLCJvbGRWYWx1ZSIsInRtcCIsImxhc3RDb21wb25lbnQiLCJwb3AiLCJwYXRoIl0sIm1hcHBpbmdzIjoiOzs7NENBQXdCQSxJO0FBQVQsU0FBU0EsSUFBVCxHQUFnQixDQUFFOztBQUVqQ0EsS0FBS0MsU0FBTCxHQUFpQjtBQUFBLG1EQUNmQyxJQURlLGdCQUNWQyxTQURVLEVBQ0NDLFNBREQsRUFDMEI7QUFBQSx3REFBZEMsT0FBYyx1RUFBSixFQUFJOztBQUN2QyxRQUFJQyxXQUFXRCxRQUFRQyxRQUF2QjtBQUNBLFFBQUksT0FBT0QsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUNqQ0MsaUJBQVdELE9BQVg7QUFDQUEsZ0JBQVUsRUFBVjtBQUNEO0FBQ0QsU0FBS0EsT0FBTCxHQUFlQSxPQUFmOztBQUVBLFFBQUlFLE9BQU8sSUFBWDs7QUFFQSxhQUFTQyxJQUFULENBQWNDLEtBQWQsRUFBcUI7QUFDbkIsVUFBSUgsUUFBSixFQUFjO0FBQ1pJLG1CQUFXLFlBQVc7QUFBRUosbUJBQVNLLFNBQVQsRUFBb0JGLEtBQXBCO0FBQTZCLFNBQXJELEVBQXVELENBQXZEO0FBQ0EsZUFBTyxJQUFQO0FBQ0QsT0FIRCxNQUdPO0FBQ0wsZUFBT0EsS0FBUDtBQUNEO0FBQ0Y7O0FBRUQ7QUFDQU4sZ0JBQVksS0FBS1MsU0FBTCxDQUFlVCxTQUFmLENBQVo7QUFDQUMsZ0JBQVksS0FBS1EsU0FBTCxDQUFlUixTQUFmLENBQVo7O0FBRUFELGdCQUFZLEtBQUtVLFdBQUwsQ0FBaUIsS0FBS0MsUUFBTCxDQUFjWCxTQUFkLENBQWpCLENBQVo7QUFDQUMsZ0JBQVksS0FBS1MsV0FBTCxDQUFpQixLQUFLQyxRQUFMLENBQWNWLFNBQWQsQ0FBakIsQ0FBWjs7QUFFQSxRQUFJVyxTQUFTWCxVQUFVWSxNQUF2QjtBQUFBLFFBQStCQyxTQUFTZCxVQUFVYSxNQUFsRDtBQUNBLFFBQUlFLGFBQWEsQ0FBakI7QUFDQSxRQUFJQyxnQkFBZ0JKLFNBQVNFLE1BQTdCO0FBQ0EsUUFBSUcsV0FBVyxDQUFDLEVBQUVDLFFBQVEsQ0FBQyxDQUFYLEVBQWNDLFlBQVksRUFBMUIsRUFBRCxDQUFmOztBQUVBO0FBQ0EsUUFBSUMsU0FBUyxLQUFLQyxhQUFMLENBQW1CSixTQUFTLENBQVQsQ0FBbkIsRUFBZ0NoQixTQUFoQyxFQUEyQ0QsU0FBM0MsRUFBc0QsQ0FBdEQsQ0FBYjtBQUNBLFFBQUlpQixTQUFTLENBQVQsRUFBWUMsTUFBWixHQUFxQixDQUFyQixJQUEwQk4sTUFBMUIsSUFBb0NRLFNBQVMsQ0FBVCxJQUFjTixNQUF0RCxFQUE4RDtBQUM1RDtBQUNBLGFBQU9ULEtBQUssQ0FBQyxFQUFDQyxPQUFPLEtBQUtnQixJQUFMLENBQVVyQixTQUFWLENBQVIsRUFBOEJzQixPQUFPdEIsVUFBVVksTUFBL0MsRUFBRCxDQUFMLENBQVA7QUFDRDs7QUFFRDtBQUNBLGFBQVNXLGNBQVQsR0FBMEI7QUFDeEIsV0FBSyxJQUFJQyxlQUFlLENBQUMsQ0FBRCxHQUFLVixVQUE3QixFQUF5Q1UsZ0JBQWdCVixVQUF6RCxFQUFxRVUsZ0JBQWdCLENBQXJGLEVBQXdGO0FBQ3RGLFlBQUlDLDBDQUFKO0FBQ0EsWUFBSUMsVUFBVVYsU0FBU1EsZUFBZSxDQUF4QixDQUFkO0FBQUEsWUFDSUcsYUFBYVgsU0FBU1EsZUFBZSxDQUF4QixDQURqQjtBQUFBLFlBRUlMLFVBQVMsQ0FBQ1EsYUFBYUEsV0FBV1YsTUFBeEIsR0FBaUMsQ0FBbEMsSUFBdUNPLFlBRnBEO0FBR0EsWUFBSUUsT0FBSixFQUFhO0FBQ1g7QUFDQVYsbUJBQVNRLGVBQWUsQ0FBeEIsSUFBNkJqQixTQUE3QjtBQUNEOztBQUVELFlBQUlxQixTQUFTRixXQUFXQSxRQUFRVCxNQUFSLEdBQWlCLENBQWpCLEdBQXFCTixNQUE3QztBQUFBLFlBQ0lrQixZQUFZRixjQUFjLEtBQUtSLE9BQW5CLElBQTZCQSxVQUFTTixNQUR0RDtBQUVBLFlBQUksQ0FBQ2UsTUFBRCxJQUFXLENBQUNDLFNBQWhCLEVBQTJCO0FBQ3pCO0FBQ0FiLG1CQUFTUSxZQUFULElBQXlCakIsU0FBekI7QUFDQTtBQUNEOztBQUVEO0FBQ0E7QUFDQTtBQUNBLFlBQUksQ0FBQ3FCLE1BQUQsSUFBWUMsYUFBYUgsUUFBUVQsTUFBUixHQUFpQlUsV0FBV1YsTUFBekQsRUFBa0U7QUFDaEVRLHFCQUFXSyxVQUFVSCxVQUFWLENBQVg7QUFDQXhCLGVBQUs0QixhQUFMLENBQW1CTixTQUFTUCxVQUE1QixFQUF3Q1gsU0FBeEMsRUFBbUQsSUFBbkQ7QUFDRCxTQUhELE1BR087QUFDTGtCLHFCQUFXQyxPQUFYLENBREssQ0FDaUI7QUFDdEJELG1CQUFTUixNQUFUO0FBQ0FkLGVBQUs0QixhQUFMLENBQW1CTixTQUFTUCxVQUE1QixFQUF3QyxJQUF4QyxFQUE4Q1gsU0FBOUM7QUFDRDs7QUFFRFksa0JBQVNoQixLQUFLaUIsYUFBTCxDQUFtQkssUUFBbkIsRUFBNkJ6QixTQUE3QixFQUF3Q0QsU0FBeEMsRUFBbUR5QixZQUFuRCxDQUFUOztBQUVBO0FBQ0EsWUFBSUMsU0FBU1IsTUFBVCxHQUFrQixDQUFsQixJQUF1Qk4sTUFBdkIsSUFBaUNRLFVBQVMsQ0FBVCxJQUFjTixNQUFuRCxFQUEyRDtBQUN6RCxpQkFBT1QsS0FBSzRCLFlBQVk3QixJQUFaLEVBQWtCc0IsU0FBU1AsVUFBM0IsRUFBdUNsQixTQUF2QyxFQUFrREQsU0FBbEQsRUFBNkRJLEtBQUs4QixlQUFsRSxDQUFMLENBQVA7QUFDRCxTQUZELE1BRU87QUFDTDtBQUNBakIsbUJBQVNRLFlBQVQsSUFBeUJDLFFBQXpCO0FBQ0Q7QUFDRjs7QUFFRFg7QUFDRDs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxRQUFJWixRQUFKLEVBQWM7QUFDWCxnQkFBU2dDLElBQVQsR0FBZ0I7QUFDZjVCLG1CQUFXLFlBQVc7QUFDcEI7QUFDQTtBQUNBLGNBQUlRLGFBQWFDLGFBQWpCLEVBQWdDO0FBQzlCLG1CQUFPYixVQUFQO0FBQ0Q7O0FBRUQsY0FBSSxDQUFDcUIsZ0JBQUwsRUFBdUI7QUFDckJXO0FBQ0Q7QUFDRixTQVZELEVBVUcsQ0FWSDtBQVdELE9BWkEsR0FBRDtBQWFELEtBZEQsTUFjTztBQUNMLGFBQU9wQixjQUFjQyxhQUFyQixFQUFvQztBQUNsQyxZQUFJb0IsTUFBTVosZ0JBQVY7QUFDQSxZQUFJWSxHQUFKLEVBQVM7QUFDUCxpQkFBT0EsR0FBUDtBQUNEO0FBQ0Y7QUFDRjtBQUNGLEdBOUdjO0FBQUEsbURBZ0hmSixhQWhIZSx5QkFnSERiLFVBaEhDLEVBZ0hXa0IsS0FoSFgsRUFnSGtCQyxPQWhIbEIsRUFnSDJCO0FBQ3hDLFFBQUlDLE9BQU9wQixXQUFXQSxXQUFXTixNQUFYLEdBQW9CLENBQS9CLENBQVg7QUFDQSxRQUFJMEIsUUFBUUEsS0FBS0YsS0FBTCxLQUFlQSxLQUF2QixJQUFnQ0UsS0FBS0QsT0FBTCxLQUFpQkEsT0FBckQsRUFBOEQ7QUFDNUQ7QUFDQTtBQUNBbkIsaUJBQVdBLFdBQVdOLE1BQVgsR0FBb0IsQ0FBL0IsSUFBb0MsRUFBQ1UsT0FBT2dCLEtBQUtoQixLQUFMLEdBQWEsQ0FBckIsRUFBd0JjLE9BQU9BLEtBQS9CLEVBQXNDQyxTQUFTQSxPQUEvQyxFQUFwQztBQUNELEtBSkQsTUFJTztBQUNMbkIsaUJBQVdxQixJQUFYLENBQWdCLEVBQUNqQixPQUFPLENBQVIsRUFBV2MsT0FBT0EsS0FBbEIsRUFBeUJDLFNBQVNBLE9BQWxDLEVBQWhCO0FBQ0Q7QUFDRixHQXpIYztBQUFBLG1EQTBIZmpCLGFBMUhlLHlCQTBIREssUUExSEMsRUEwSFN6QixTQTFIVCxFQTBIb0JELFNBMUhwQixFQTBIK0J5QixZQTFIL0IsRUEwSDZDO0FBQzFELFFBQUliLFNBQVNYLFVBQVVZLE1BQXZCO0FBQUEsUUFDSUMsU0FBU2QsVUFBVWEsTUFEdkI7QUFBQSxRQUVJSyxTQUFTUSxTQUFTUixNQUZ0QjtBQUFBLFFBR0lFLFNBQVNGLFNBQVNPLFlBSHRCO0FBQUEsUUFLSWdCLGNBQWMsQ0FMbEI7QUFNQSxXQUFPdkIsU0FBUyxDQUFULEdBQWFOLE1BQWIsSUFBdUJRLFNBQVMsQ0FBVCxHQUFhTixNQUFwQyxJQUE4QyxLQUFLNEIsTUFBTCxDQUFZekMsVUFBVWlCLFNBQVMsQ0FBbkIsQ0FBWixFQUFtQ2xCLFVBQVVvQixTQUFTLENBQW5CLENBQW5DLENBQXJELEVBQWdIO0FBQzlHRjtBQUNBRTtBQUNBcUI7QUFDRDs7QUFFRCxRQUFJQSxXQUFKLEVBQWlCO0FBQ2ZmLGVBQVNQLFVBQVQsQ0FBb0JxQixJQUFwQixDQUF5QixFQUFDakIsT0FBT2tCLFdBQVIsRUFBekI7QUFDRDs7QUFFRGYsYUFBU1IsTUFBVCxHQUFrQkEsTUFBbEI7QUFDQSxXQUFPRSxNQUFQO0FBQ0QsR0E3SWM7QUFBQSxtREErSWZzQixNQS9JZSxrQkErSVJDLElBL0lRLEVBK0lGQyxLQS9JRSxFQStJSztBQUNsQixRQUFJLEtBQUsxQyxPQUFMLENBQWEyQyxVQUFqQixFQUE2QjtBQUMzQixhQUFPLEtBQUszQyxPQUFMLENBQWEyQyxVQUFiLENBQXdCRixJQUF4QixFQUE4QkMsS0FBOUIsQ0FBUDtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU9ELFNBQVNDLEtBQVQsSUFDRCxLQUFLMUMsT0FBTCxDQUFhNEMsVUFBYixJQUEyQkgsS0FBS0ksV0FBTCxPQUF1QkgsTUFBTUcsV0FBTixFQUR4RDtBQUVEO0FBQ0YsR0F0SmM7QUFBQSxtREF1SmZyQyxXQXZKZSx1QkF1SkhzQyxLQXZKRyxFQXVKSTtBQUNqQixRQUFJWixNQUFNLEVBQVY7QUFDQSxTQUFLLElBQUlhLElBQUksQ0FBYixFQUFnQkEsSUFBSUQsTUFBTW5DLE1BQTFCLEVBQWtDb0MsR0FBbEMsRUFBdUM7QUFDckMsVUFBSUQsTUFBTUMsQ0FBTixDQUFKLEVBQWM7QUFDWmIsWUFBSUksSUFBSixDQUFTUSxNQUFNQyxDQUFOLENBQVQ7QUFDRDtBQUNGO0FBQ0QsV0FBT2IsR0FBUDtBQUNELEdBL0pjO0FBQUEsbURBZ0tmM0IsU0FoS2UscUJBZ0tMSCxLQWhLSyxFQWdLRTtBQUNmLFdBQU9BLEtBQVA7QUFDRCxHQWxLYztBQUFBLG1EQW1LZkssUUFuS2Usb0JBbUtOTCxLQW5LTSxFQW1LQztBQUNkLFdBQU9BLE1BQU00QyxLQUFOLENBQVksRUFBWixDQUFQO0FBQ0QsR0FyS2M7QUFBQSxtREFzS2Y1QixJQXRLZSxnQkFzS1Y2QixLQXRLVSxFQXNLSDtBQUNWLFdBQU9BLE1BQU03QixJQUFOLENBQVcsRUFBWCxDQUFQO0FBQ0Q7QUF4S2MsQ0FBakI7O0FBMktBLFNBQVNXLFdBQVQsQ0FBcUJsQyxJQUFyQixFQUEyQm9CLFVBQTNCLEVBQXVDbEIsU0FBdkMsRUFBa0RELFNBQWxELEVBQTZEa0MsZUFBN0QsRUFBOEU7QUFDNUUsTUFBSWtCLGVBQWUsQ0FBbkI7QUFBQSxNQUNJQyxlQUFlbEMsV0FBV04sTUFEOUI7QUFBQSxNQUVJSyxTQUFTLENBRmI7QUFBQSxNQUdJRSxTQUFTLENBSGI7O0FBS0EsU0FBT2dDLGVBQWVDLFlBQXRCLEVBQW9DRCxjQUFwQyxFQUFvRDtBQUNsRCxRQUFJRSxZQUFZbkMsV0FBV2lDLFlBQVgsQ0FBaEI7QUFDQSxRQUFJLENBQUNFLFVBQVVoQixPQUFmLEVBQXdCO0FBQ3RCLFVBQUksQ0FBQ2dCLFVBQVVqQixLQUFYLElBQW9CSCxlQUF4QixFQUF5QztBQUN2QyxZQUFJNUIsUUFBUUwsVUFBVXNELEtBQVYsQ0FBZ0JyQyxNQUFoQixFQUF3QkEsU0FBU29DLFVBQVUvQixLQUEzQyxDQUFaO0FBQ0FqQixnQkFBUUEsTUFBTWtELEdBQU4sQ0FBVSxVQUFTbEQsS0FBVCxFQUFnQjJDLENBQWhCLEVBQW1CO0FBQ25DLGNBQUlRLFdBQVd6RCxVQUFVb0IsU0FBUzZCLENBQW5CLENBQWY7QUFDQSxpQkFBT1EsU0FBUzVDLE1BQVQsR0FBa0JQLE1BQU1PLE1BQXhCLEdBQWlDNEMsUUFBakMsR0FBNENuRCxLQUFuRDtBQUNELFNBSE8sQ0FBUjs7QUFLQWdELGtCQUFVaEQsS0FBVixHQUFrQlAsS0FBS3VCLElBQUwsQ0FBVWhCLEtBQVYsQ0FBbEI7QUFDRCxPQVJELE1BUU87QUFDTGdELGtCQUFVaEQsS0FBVixHQUFrQlAsS0FBS3VCLElBQUwsQ0FBVXJCLFVBQVVzRCxLQUFWLENBQWdCckMsTUFBaEIsRUFBd0JBLFNBQVNvQyxVQUFVL0IsS0FBM0MsQ0FBVixDQUFsQjtBQUNEO0FBQ0RMLGdCQUFVb0MsVUFBVS9CLEtBQXBCOztBQUVBO0FBQ0EsVUFBSSxDQUFDK0IsVUFBVWpCLEtBQWYsRUFBc0I7QUFDcEJqQixrQkFBVWtDLFVBQVUvQixLQUFwQjtBQUNEO0FBQ0YsS0FsQkQsTUFrQk87QUFDTCtCLGdCQUFVaEQsS0FBVixHQUFrQlAsS0FBS3VCLElBQUwsQ0FBVXRCLFVBQVV1RCxLQUFWLENBQWdCbkMsTUFBaEIsRUFBd0JBLFNBQVNrQyxVQUFVL0IsS0FBM0MsQ0FBVixDQUFsQjtBQUNBSCxnQkFBVWtDLFVBQVUvQixLQUFwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFJNkIsZ0JBQWdCakMsV0FBV2lDLGVBQWUsQ0FBMUIsRUFBNkJmLEtBQWpELEVBQXdEO0FBQ3RELFlBQUlxQixNQUFNdkMsV0FBV2lDLGVBQWUsQ0FBMUIsQ0FBVjtBQUNBakMsbUJBQVdpQyxlQUFlLENBQTFCLElBQStCakMsV0FBV2lDLFlBQVgsQ0FBL0I7QUFDQWpDLG1CQUFXaUMsWUFBWCxJQUEyQk0sR0FBM0I7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsTUFBSUMsZ0JBQWdCeEMsV0FBV2tDLGVBQWUsQ0FBMUIsQ0FBcEI7QUFDQSxNQUFJQSxlQUFlLENBQWYsSUFDRyxPQUFPTSxjQUFjckQsS0FBckIsS0FBK0IsUUFEbEMsS0FFSXFELGNBQWN0QixLQUFkLElBQXVCc0IsY0FBY3JCLE9BRnpDLEtBR0d2QyxLQUFLMkMsTUFBTCxDQUFZLEVBQVosRUFBZ0JpQixjQUFjckQsS0FBOUIsQ0FIUCxFQUc2QztBQUMzQ2EsZUFBV2tDLGVBQWUsQ0FBMUIsRUFBNkIvQyxLQUE3QixJQUFzQ3FELGNBQWNyRCxLQUFwRDtBQUNBYSxlQUFXeUMsR0FBWDtBQUNEOztBQUVELFNBQU96QyxVQUFQO0FBQ0Q7O0FBRUQsU0FBU1ksU0FBVCxDQUFtQjhCLElBQW5CLEVBQXlCO0FBQ3ZCLFNBQU8sRUFBRTNDLFFBQVEyQyxLQUFLM0MsTUFBZixFQUF1QkMsWUFBWTBDLEtBQUsxQyxVQUFMLENBQWdCb0MsS0FBaEIsQ0FBc0IsQ0FBdEIsQ0FBbkMsRUFBUDtBQUNEIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEaWZmKCkge31cblxuRGlmZi5wcm90b3R5cGUgPSB7XG4gIGRpZmYob2xkU3RyaW5nLCBuZXdTdHJpbmcsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBjYWxsYmFjayA9IG9wdGlvbnMuY2FsbGJhY2s7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBsZXQgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBkb25lKHZhbHVlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2FsbGJhY2sodW5kZWZpbmVkLCB2YWx1ZSk7IH0sIDApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBbGxvdyBzdWJjbGFzc2VzIHRvIG1hc3NhZ2UgdGhlIGlucHV0IHByaW9yIHRvIHJ1bm5pbmdcbiAgICBvbGRTdHJpbmcgPSB0aGlzLmNhc3RJbnB1dChvbGRTdHJpbmcpO1xuICAgIG5ld1N0cmluZyA9IHRoaXMuY2FzdElucHV0KG5ld1N0cmluZyk7XG5cbiAgICBvbGRTdHJpbmcgPSB0aGlzLnJlbW92ZUVtcHR5KHRoaXMudG9rZW5pemUob2xkU3RyaW5nKSk7XG4gICAgbmV3U3RyaW5nID0gdGhpcy5yZW1vdmVFbXB0eSh0aGlzLnRva2VuaXplKG5ld1N0cmluZykpO1xuXG4gICAgbGV0IG5ld0xlbiA9IG5ld1N0cmluZy5sZW5ndGgsIG9sZExlbiA9IG9sZFN0cmluZy5sZW5ndGg7XG4gICAgbGV0IGVkaXRMZW5ndGggPSAxO1xuICAgIGxldCBtYXhFZGl0TGVuZ3RoID0gbmV3TGVuICsgb2xkTGVuO1xuICAgIGxldCBiZXN0UGF0aCA9IFt7IG5ld1BvczogLTEsIGNvbXBvbmVudHM6IFtdIH1dO1xuXG4gICAgLy8gU2VlZCBlZGl0TGVuZ3RoID0gMCwgaS5lLiB0aGUgY29udGVudCBzdGFydHMgd2l0aCB0aGUgc2FtZSB2YWx1ZXNcbiAgICBsZXQgb2xkUG9zID0gdGhpcy5leHRyYWN0Q29tbW9uKGJlc3RQYXRoWzBdLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgMCk7XG4gICAgaWYgKGJlc3RQYXRoWzBdLm5ld1BvcyArIDEgPj0gbmV3TGVuICYmIG9sZFBvcyArIDEgPj0gb2xkTGVuKSB7XG4gICAgICAvLyBJZGVudGl0eSBwZXIgdGhlIGVxdWFsaXR5IGFuZCB0b2tlbml6ZXJcbiAgICAgIHJldHVybiBkb25lKFt7dmFsdWU6IHRoaXMuam9pbihuZXdTdHJpbmcpLCBjb3VudDogbmV3U3RyaW5nLmxlbmd0aH1dKTtcbiAgICB9XG5cbiAgICAvLyBNYWluIHdvcmtlciBtZXRob2QuIGNoZWNrcyBhbGwgcGVybXV0YXRpb25zIG9mIGEgZ2l2ZW4gZWRpdCBsZW5ndGggZm9yIGFjY2VwdGFuY2UuXG4gICAgZnVuY3Rpb24gZXhlY0VkaXRMZW5ndGgoKSB7XG4gICAgICBmb3IgKGxldCBkaWFnb25hbFBhdGggPSAtMSAqIGVkaXRMZW5ndGg7IGRpYWdvbmFsUGF0aCA8PSBlZGl0TGVuZ3RoOyBkaWFnb25hbFBhdGggKz0gMikge1xuICAgICAgICBsZXQgYmFzZVBhdGg7XG4gICAgICAgIGxldCBhZGRQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoIC0gMV0sXG4gICAgICAgICAgICByZW1vdmVQYXRoID0gYmVzdFBhdGhbZGlhZ29uYWxQYXRoICsgMV0sXG4gICAgICAgICAgICBvbGRQb3MgPSAocmVtb3ZlUGF0aCA/IHJlbW92ZVBhdGgubmV3UG9zIDogMCkgLSBkaWFnb25hbFBhdGg7XG4gICAgICAgIGlmIChhZGRQYXRoKSB7XG4gICAgICAgICAgLy8gTm8gb25lIGVsc2UgaXMgZ29pbmcgdG8gYXR0ZW1wdCB0byB1c2UgdGhpcyB2YWx1ZSwgY2xlYXIgaXRcbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGggLSAxXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjYW5BZGQgPSBhZGRQYXRoICYmIGFkZFBhdGgubmV3UG9zICsgMSA8IG5ld0xlbixcbiAgICAgICAgICAgIGNhblJlbW92ZSA9IHJlbW92ZVBhdGggJiYgMCA8PSBvbGRQb3MgJiYgb2xkUG9zIDwgb2xkTGVuO1xuICAgICAgICBpZiAoIWNhbkFkZCAmJiAhY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBwYXRoIGlzIGEgdGVybWluYWwgdGhlbiBwcnVuZVxuICAgICAgICAgIGJlc3RQYXRoW2RpYWdvbmFsUGF0aF0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZWxlY3QgdGhlIGRpYWdvbmFsIHRoYXQgd2Ugd2FudCB0byBicmFuY2ggZnJvbS4gV2Ugc2VsZWN0IHRoZSBwcmlvclxuICAgICAgICAvLyBwYXRoIHdob3NlIHBvc2l0aW9uIGluIHRoZSBuZXcgc3RyaW5nIGlzIHRoZSBmYXJ0aGVzdCBmcm9tIHRoZSBvcmlnaW5cbiAgICAgICAgLy8gYW5kIGRvZXMgbm90IHBhc3MgdGhlIGJvdW5kcyBvZiB0aGUgZGlmZiBncmFwaFxuICAgICAgICBpZiAoIWNhbkFkZCB8fCAoY2FuUmVtb3ZlICYmIGFkZFBhdGgubmV3UG9zIDwgcmVtb3ZlUGF0aC5uZXdQb3MpKSB7XG4gICAgICAgICAgYmFzZVBhdGggPSBjbG9uZVBhdGgocmVtb3ZlUGF0aCk7XG4gICAgICAgICAgc2VsZi5wdXNoQ29tcG9uZW50KGJhc2VQYXRoLmNvbXBvbmVudHMsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmFzZVBhdGggPSBhZGRQYXRoOyAgIC8vIE5vIG5lZWQgdG8gY2xvbmUsIHdlJ3ZlIHB1bGxlZCBpdCBmcm9tIHRoZSBsaXN0XG4gICAgICAgICAgYmFzZVBhdGgubmV3UG9zKys7XG4gICAgICAgICAgc2VsZi5wdXNoQ29tcG9uZW50KGJhc2VQYXRoLmNvbXBvbmVudHMsIHRydWUsIHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICBvbGRQb3MgPSBzZWxmLmV4dHJhY3RDb21tb24oYmFzZVBhdGgsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBkaWFnb25hbFBhdGgpO1xuXG4gICAgICAgIC8vIElmIHdlIGhhdmUgaGl0IHRoZSBlbmQgb2YgYm90aCBzdHJpbmdzLCB0aGVuIHdlIGFyZSBkb25lXG4gICAgICAgIGlmIChiYXNlUGF0aC5uZXdQb3MgKyAxID49IG5ld0xlbiAmJiBvbGRQb3MgKyAxID49IG9sZExlbikge1xuICAgICAgICAgIHJldHVybiBkb25lKGJ1aWxkVmFsdWVzKHNlbGYsIGJhc2VQYXRoLmNvbXBvbmVudHMsIG5ld1N0cmluZywgb2xkU3RyaW5nLCBzZWxmLnVzZUxvbmdlc3RUb2tlbikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSB0cmFjayB0aGlzIHBhdGggYXMgYSBwb3RlbnRpYWwgY2FuZGlkYXRlIGFuZCBjb250aW51ZS5cbiAgICAgICAgICBiZXN0UGF0aFtkaWFnb25hbFBhdGhdID0gYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWRpdExlbmd0aCsrO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm1zIHRoZSBsZW5ndGggb2YgZWRpdCBpdGVyYXRpb24uIElzIGEgYml0IGZ1Z2x5IGFzIHRoaXMgaGFzIHRvIHN1cHBvcnQgdGhlXG4gICAgLy8gc3luYyBhbmQgYXN5bmMgbW9kZSB3aGljaCBpcyBuZXZlciBmdW4uIExvb3BzIG92ZXIgZXhlY0VkaXRMZW5ndGggdW50aWwgYSB2YWx1ZVxuICAgIC8vIGlzIHByb2R1Y2VkLlxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgKGZ1bmN0aW9uIGV4ZWMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IHdlIHdhbnQgdG8gYmUgc2FmZS5cbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGlmIChlZGl0TGVuZ3RoID4gbWF4RWRpdExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFleGVjRWRpdExlbmd0aCgpKSB7XG4gICAgICAgICAgICBleGVjKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICAgIH0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlIChlZGl0TGVuZ3RoIDw9IG1heEVkaXRMZW5ndGgpIHtcbiAgICAgICAgbGV0IHJldCA9IGV4ZWNFZGl0TGVuZ3RoKCk7XG4gICAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHB1c2hDb21wb25lbnQoY29tcG9uZW50cywgYWRkZWQsIHJlbW92ZWQpIHtcbiAgICBsZXQgbGFzdCA9IGNvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXTtcbiAgICBpZiAobGFzdCAmJiBsYXN0LmFkZGVkID09PSBhZGRlZCAmJiBsYXN0LnJlbW92ZWQgPT09IHJlbW92ZWQpIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2xvbmUgaGVyZSBhcyB0aGUgY29tcG9uZW50IGNsb25lIG9wZXJhdGlvbiBpcyBqdXN0XG4gICAgICAvLyBhcyBzaGFsbG93IGFycmF5IGNsb25lXG4gICAgICBjb21wb25lbnRzW2NvbXBvbmVudHMubGVuZ3RoIC0gMV0gPSB7Y291bnQ6IGxhc3QuY291bnQgKyAxLCBhZGRlZDogYWRkZWQsIHJlbW92ZWQ6IHJlbW92ZWQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcG9uZW50cy5wdXNoKHtjb3VudDogMSwgYWRkZWQ6IGFkZGVkLCByZW1vdmVkOiByZW1vdmVkIH0pO1xuICAgIH1cbiAgfSxcbiAgZXh0cmFjdENvbW1vbihiYXNlUGF0aCwgbmV3U3RyaW5nLCBvbGRTdHJpbmcsIGRpYWdvbmFsUGF0aCkge1xuICAgIGxldCBuZXdMZW4gPSBuZXdTdHJpbmcubGVuZ3RoLFxuICAgICAgICBvbGRMZW4gPSBvbGRTdHJpbmcubGVuZ3RoLFxuICAgICAgICBuZXdQb3MgPSBiYXNlUGF0aC5uZXdQb3MsXG4gICAgICAgIG9sZFBvcyA9IG5ld1BvcyAtIGRpYWdvbmFsUGF0aCxcblxuICAgICAgICBjb21tb25Db3VudCA9IDA7XG4gICAgd2hpbGUgKG5ld1BvcyArIDEgPCBuZXdMZW4gJiYgb2xkUG9zICsgMSA8IG9sZExlbiAmJiB0aGlzLmVxdWFscyhuZXdTdHJpbmdbbmV3UG9zICsgMV0sIG9sZFN0cmluZ1tvbGRQb3MgKyAxXSkpIHtcbiAgICAgIG5ld1BvcysrO1xuICAgICAgb2xkUG9zKys7XG4gICAgICBjb21tb25Db3VudCsrO1xuICAgIH1cblxuICAgIGlmIChjb21tb25Db3VudCkge1xuICAgICAgYmFzZVBhdGguY29tcG9uZW50cy5wdXNoKHtjb3VudDogY29tbW9uQ291bnR9KTtcbiAgICB9XG5cbiAgICBiYXNlUGF0aC5uZXdQb3MgPSBuZXdQb3M7XG4gICAgcmV0dXJuIG9sZFBvcztcbiAgfSxcblxuICBlcXVhbHMobGVmdCwgcmlnaHQpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29tcGFyYXRvcihsZWZ0LCByaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBsZWZ0ID09PSByaWdodFxuICAgICAgICB8fCAodGhpcy5vcHRpb25zLmlnbm9yZUNhc2UgJiYgbGVmdC50b0xvd2VyQ2FzZSgpID09PSByaWdodC50b0xvd2VyQ2FzZSgpKTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZUVtcHR5KGFycmF5KSB7XG4gICAgbGV0IHJldCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcnJheVtpXSkge1xuICAgICAgICByZXQucHVzaChhcnJheVtpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sXG4gIGNhc3RJbnB1dCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgdG9rZW5pemUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJycpO1xuICB9LFxuICBqb2luKGNoYXJzKSB7XG4gICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBidWlsZFZhbHVlcyhkaWZmLCBjb21wb25lbnRzLCBuZXdTdHJpbmcsIG9sZFN0cmluZywgdXNlTG9uZ2VzdFRva2VuKSB7XG4gIGxldCBjb21wb25lbnRQb3MgPSAwLFxuICAgICAgY29tcG9uZW50TGVuID0gY29tcG9uZW50cy5sZW5ndGgsXG4gICAgICBuZXdQb3MgPSAwLFxuICAgICAgb2xkUG9zID0gMDtcblxuICBmb3IgKDsgY29tcG9uZW50UG9zIDwgY29tcG9uZW50TGVuOyBjb21wb25lbnRQb3MrKykge1xuICAgIGxldCBjb21wb25lbnQgPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG4gICAgaWYgKCFjb21wb25lbnQucmVtb3ZlZCkge1xuICAgICAgaWYgKCFjb21wb25lbnQuYWRkZWQgJiYgdXNlTG9uZ2VzdFRva2VuKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCk7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGZ1bmN0aW9uKHZhbHVlLCBpKSB7XG4gICAgICAgICAgbGV0IG9sZFZhbHVlID0gb2xkU3RyaW5nW29sZFBvcyArIGldO1xuICAgICAgICAgIHJldHVybiBvbGRWYWx1ZS5sZW5ndGggPiB2YWx1ZS5sZW5ndGggPyBvbGRWYWx1ZSA6IHZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb21wb25lbnQudmFsdWUgPSBkaWZmLmpvaW4odmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcG9uZW50LnZhbHVlID0gZGlmZi5qb2luKG5ld1N0cmluZy5zbGljZShuZXdQb3MsIG5ld1BvcyArIGNvbXBvbmVudC5jb3VudCkpO1xuICAgICAgfVxuICAgICAgbmV3UG9zICs9IGNvbXBvbmVudC5jb3VudDtcblxuICAgICAgLy8gQ29tbW9uIGNhc2VcbiAgICAgIGlmICghY29tcG9uZW50LmFkZGVkKSB7XG4gICAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBvbmVudC52YWx1ZSA9IGRpZmYuam9pbihvbGRTdHJpbmcuc2xpY2Uob2xkUG9zLCBvbGRQb3MgKyBjb21wb25lbnQuY291bnQpKTtcbiAgICAgIG9sZFBvcyArPSBjb21wb25lbnQuY291bnQ7XG5cbiAgICAgIC8vIFJldmVyc2UgYWRkIGFuZCByZW1vdmUgc28gcmVtb3ZlcyBhcmUgb3V0cHV0IGZpcnN0IHRvIG1hdGNoIGNvbW1vbiBjb252ZW50aW9uXG4gICAgICAvLyBUaGUgZGlmZmluZyBhbGdvcml0aG0gaXMgdGllZCB0byBhZGQgdGhlbiByZW1vdmUgb3V0cHV0IGFuZCB0aGlzIGlzIHRoZSBzaW1wbGVzdFxuICAgICAgLy8gcm91dGUgdG8gZ2V0IHRoZSBkZXNpcmVkIG91dHB1dCB3aXRoIG1pbmltYWwgb3ZlcmhlYWQuXG4gICAgICBpZiAoY29tcG9uZW50UG9zICYmIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0uYWRkZWQpIHtcbiAgICAgICAgbGV0IHRtcCA9IGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV07XG4gICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zIC0gMV0gPSBjb21wb25lbnRzW2NvbXBvbmVudFBvc107XG4gICAgICAgIGNvbXBvbmVudHNbY29tcG9uZW50UG9zXSA9IHRtcDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTcGVjaWFsIGNhc2UgaGFuZGxlIGZvciB3aGVuIG9uZSB0ZXJtaW5hbCBpcyBpZ25vcmVkIChpLmUuIHdoaXRlc3BhY2UpLlxuICAvLyBGb3IgdGhpcyBjYXNlIHdlIG1lcmdlIHRoZSB0ZXJtaW5hbCBpbnRvIHRoZSBwcmlvciBzdHJpbmcgYW5kIGRyb3AgdGhlIGNoYW5nZS5cbiAgLy8gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBmb3Igc3RyaW5nIG1vZGUuXG4gIGxldCBsYXN0Q29tcG9uZW50ID0gY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAxXTtcbiAgaWYgKGNvbXBvbmVudExlbiA+IDFcbiAgICAgICYmIHR5cGVvZiBsYXN0Q29tcG9uZW50LnZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgJiYgKGxhc3RDb21wb25lbnQuYWRkZWQgfHwgbGFzdENvbXBvbmVudC5yZW1vdmVkKVxuICAgICAgJiYgZGlmZi5lcXVhbHMoJycsIGxhc3RDb21wb25lbnQudmFsdWUpKSB7XG4gICAgY29tcG9uZW50c1tjb21wb25lbnRMZW4gLSAyXS52YWx1ZSArPSBsYXN0Q29tcG9uZW50LnZhbHVlO1xuICAgIGNvbXBvbmVudHMucG9wKCk7XG4gIH1cblxuICByZXR1cm4gY29tcG9uZW50cztcbn1cblxuZnVuY3Rpb24gY2xvbmVQYXRoKHBhdGgpIHtcbiAgcmV0dXJuIHsgbmV3UG9zOiBwYXRoLm5ld1BvcywgY29tcG9uZW50czogcGF0aC5jb21wb25lbnRzLnNsaWNlKDApIH07XG59XG4iXX0=
2879  
2880  
2881  /***/ }),
2882  /* 2 */
2883  /***/ (function(module, exports, __webpack_require__) {
2884  
2885      /*istanbul ignore start*/'use strict';
2886  
2887      exports.__esModule = true;
2888      exports.characterDiff = undefined;
2889      exports. /*istanbul ignore end*/diffChars = diffChars;
2890  
2891      var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
2892  
2893      /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
2894  
2895  	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2896  
2897      /*istanbul ignore end*/var characterDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/characterDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
2898  	function diffChars(oldStr, newStr, options) {
2899        return characterDiff.diff(oldStr, newStr, options);
2900      }
2901      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2NoYXJhY3Rlci5qcyJdLCJuYW1lcyI6WyJkaWZmQ2hhcnMiLCJjaGFyYWN0ZXJEaWZmIiwib2xkU3RyIiwibmV3U3RyIiwib3B0aW9ucyIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Z0NBR2dCQSxTLEdBQUFBLFM7O0FBSGhCOzs7Ozs7dUJBRU8sSUFBTUMseUZBQWdCLHdFQUF0QjtBQUNBLFNBQVNELFNBQVQsQ0FBbUJFLE1BQW5CLEVBQTJCQyxNQUEzQixFQUFtQ0MsT0FBbkMsRUFBNEM7QUFBRSxTQUFPSCxjQUFjSSxJQUFkLENBQW1CSCxNQUFuQixFQUEyQkMsTUFBM0IsRUFBbUNDLE9BQW5DLENBQVA7QUFBcUQiLCJmaWxlIjoiY2hhcmFjdGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGNvbnN0IGNoYXJhY3RlckRpZmYgPSBuZXcgRGlmZigpO1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZDaGFycyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykgeyByZXR1cm4gY2hhcmFjdGVyRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTsgfVxuIl19
2902  
2903  
2904  /***/ }),
2905  /* 3 */
2906  /***/ (function(module, exports, __webpack_require__) {
2907  
2908      /*istanbul ignore start*/'use strict';
2909  
2910      exports.__esModule = true;
2911      exports.wordDiff = undefined;
2912      exports. /*istanbul ignore end*/diffWords = diffWords;
2913      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffWordsWithSpace = diffWordsWithSpace;
2914  
2915      var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
2916  
2917      /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
2918  
2919      /*istanbul ignore end*/var /*istanbul ignore start*/_params = __webpack_require__(4) /*istanbul ignore end*/;
2920  
2921      /*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
2922  
2923      /*istanbul ignore end*/ // Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode
2924      //
2925      // Ranges and exceptions:
2926      // Latin-1 Supplement, 0080–00FF
2927      //  - U+00D7  × Multiplication sign
2928      //  - U+00F7  ÷ Division sign
2929      // Latin Extended-A, 0100–017F
2930      // Latin Extended-B, 0180–024F
2931      // IPA Extensions, 0250–02AF
2932      // Spacing Modifier Letters, 02B0–02FF
2933      //  - U+02C7  ˇ &#711;  Caron
2934      //  - U+02D8  ˘ &#728;  Breve
2935      //  - U+02D9  ˙ &#729;  Dot Above
2936      //  - U+02DA  ˚ &#730;  Ring Above
2937      //  - U+02DB  ˛ &#731;  Ogonek
2938      //  - U+02DC  ˜ &#732;  Small Tilde
2939      //  - U+02DD  ˝ &#733;  Double Acute Accent
2940      // Latin Extended Additional, 1E00–1EFF
2941      var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/;
2942  
2943      var reWhitespace = /\S/;
2944  
2945      var wordDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/wordDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
2946      wordDiff.equals = function (left, right) {
2947        if (this.options.ignoreCase) {
2948          left = left.toLowerCase();
2949          right = right.toLowerCase();
2950        }
2951        return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);
2952      };
2953      wordDiff.tokenize = function (value) {
2954        var tokens = value.split(/(\s+|\b)/);
2955  
2956        // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.
2957        for (var i = 0; i < tokens.length - 1; i++) {
2958          // If we have an empty string in the next field and we have only word chars before and after, merge
2959          if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {
2960            tokens[i] += tokens[i + 2];
2961            tokens.splice(i + 1, 2);
2962            i--;
2963          }
2964        }
2965  
2966        return tokens;
2967      };
2968  
2969  	function diffWords(oldStr, newStr, options) {
2970        options = /*istanbul ignore start*/(0, _params.generateOptions) /*istanbul ignore end*/(options, { ignoreWhitespace: true });
2971        return wordDiff.diff(oldStr, newStr, options);
2972      }
2973  
2974  	function diffWordsWithSpace(oldStr, newStr, options) {
2975        return wordDiff.diff(oldStr, newStr, options);
2976      }
2977      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3dvcmQuanMiXSwibmFtZXMiOlsiZGlmZldvcmRzIiwiZGlmZldvcmRzV2l0aFNwYWNlIiwiZXh0ZW5kZWRXb3JkQ2hhcnMiLCJyZVdoaXRlc3BhY2UiLCJ3b3JkRGlmZiIsImVxdWFscyIsImxlZnQiLCJyaWdodCIsIm9wdGlvbnMiLCJpZ25vcmVDYXNlIiwidG9Mb3dlckNhc2UiLCJpZ25vcmVXaGl0ZXNwYWNlIiwidGVzdCIsInRva2VuaXplIiwidmFsdWUiLCJ0b2tlbnMiLCJzcGxpdCIsImkiLCJsZW5ndGgiLCJzcGxpY2UiLCJvbGRTdHIiLCJuZXdTdHIiLCJkaWZmIl0sIm1hcHBpbmdzIjoiOzs7O2dDQW1EZ0JBLFMsR0FBQUEsUzt5REFLQUMsa0IsR0FBQUEsa0I7O0FBeERoQjs7Ozt1QkFDQTs7Ozt3QkFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFNQyxvQkFBb0IsK0RBQTFCOztBQUVBLElBQU1DLGVBQWUsSUFBckI7O0FBRU8sSUFBTUMsK0VBQVcsd0VBQWpCO0FBQ1BBLFNBQVNDLE1BQVQsR0FBa0IsVUFBU0MsSUFBVCxFQUFlQyxLQUFmLEVBQXNCO0FBQ3RDLE1BQUksS0FBS0MsT0FBTCxDQUFhQyxVQUFqQixFQUE2QjtBQUMzQkgsV0FBT0EsS0FBS0ksV0FBTCxFQUFQO0FBQ0FILFlBQVFBLE1BQU1HLFdBQU4sRUFBUjtBQUNEO0FBQ0QsU0FBT0osU0FBU0MsS0FBVCxJQUFtQixLQUFLQyxPQUFMLENBQWFHLGdCQUFiLElBQWlDLENBQUNSLGFBQWFTLElBQWIsQ0FBa0JOLElBQWxCLENBQWxDLElBQTZELENBQUNILGFBQWFTLElBQWIsQ0FBa0JMLEtBQWxCLENBQXhGO0FBQ0QsQ0FORDtBQU9BSCxTQUFTUyxRQUFULEdBQW9CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDbEMsTUFBSUMsU0FBU0QsTUFBTUUsS0FBTixDQUFZLFVBQVosQ0FBYjs7QUFFQTtBQUNBLE9BQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJRixPQUFPRyxNQUFQLEdBQWdCLENBQXBDLEVBQXVDRCxHQUF2QyxFQUE0QztBQUMxQztBQUNBLFFBQUksQ0FBQ0YsT0FBT0UsSUFBSSxDQUFYLENBQUQsSUFBa0JGLE9BQU9FLElBQUksQ0FBWCxDQUFsQixJQUNLZixrQkFBa0JVLElBQWxCLENBQXVCRyxPQUFPRSxDQUFQLENBQXZCLENBREwsSUFFS2Ysa0JBQWtCVSxJQUFsQixDQUF1QkcsT0FBT0UsSUFBSSxDQUFYLENBQXZCLENBRlQsRUFFZ0Q7QUFDOUNGLGFBQU9FLENBQVAsS0FBYUYsT0FBT0UsSUFBSSxDQUFYLENBQWI7QUFDQUYsYUFBT0ksTUFBUCxDQUFjRixJQUFJLENBQWxCLEVBQXFCLENBQXJCO0FBQ0FBO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPRixNQUFQO0FBQ0QsQ0FoQkQ7O0FBa0JPLFNBQVNmLFNBQVQsQ0FBbUJvQixNQUFuQixFQUEyQkMsTUFBM0IsRUFBbUNiLE9BQW5DLEVBQTRDO0FBQ2pEQSxZQUFVLDhFQUFnQkEsT0FBaEIsRUFBeUIsRUFBQ0csa0JBQWtCLElBQW5CLEVBQXpCLENBQVY7QUFDQSxTQUFPUCxTQUFTa0IsSUFBVCxDQUFjRixNQUFkLEVBQXNCQyxNQUF0QixFQUE4QmIsT0FBOUIsQ0FBUDtBQUNEOztBQUVNLFNBQVNQLGtCQUFULENBQTRCbUIsTUFBNUIsRUFBb0NDLE1BQXBDLEVBQTRDYixPQUE1QyxFQUFxRDtBQUMxRCxTQUFPSixTQUFTa0IsSUFBVCxDQUFjRixNQUFkLEVBQXNCQyxNQUF0QixFQUE4QmIsT0FBOUIsQ0FBUDtBQUNEIiwiZmlsZSI6IndvcmQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGlmZiBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHtnZW5lcmF0ZU9wdGlvbnN9IGZyb20gJy4uL3V0aWwvcGFyYW1zJztcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGF0aW5fc2NyaXB0X2luX1VuaWNvZGVcbi8vXG4vLyBSYW5nZXMgYW5kIGV4Y2VwdGlvbnM6XG4vLyBMYXRpbi0xIFN1cHBsZW1lbnQsIDAwODDigJMwMEZGXG4vLyAgLSBVKzAwRDcgIMOXIE11bHRpcGxpY2F0aW9uIHNpZ25cbi8vICAtIFUrMDBGNyAgw7cgRGl2aXNpb24gc2lnblxuLy8gTGF0aW4gRXh0ZW5kZWQtQSwgMDEwMOKAkzAxN0Zcbi8vIExhdGluIEV4dGVuZGVkLUIsIDAxODDigJMwMjRGXG4vLyBJUEEgRXh0ZW5zaW9ucywgMDI1MOKAkzAyQUZcbi8vIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycywgMDJCMOKAkzAyRkZcbi8vICAtIFUrMDJDNyAgy4cgJiM3MTE7ICBDYXJvblxuLy8gIC0gVSswMkQ4ICDLmCAmIzcyODsgIEJyZXZlXG4vLyAgLSBVKzAyRDkgIMuZICYjNzI5OyAgRG90IEFib3ZlXG4vLyAgLSBVKzAyREEgIMuaICYjNzMwOyAgUmluZyBBYm92ZVxuLy8gIC0gVSswMkRCICDLmyAmIzczMTsgIE9nb25la1xuLy8gIC0gVSswMkRDICDLnCAmIzczMjsgIFNtYWxsIFRpbGRlXG4vLyAgLSBVKzAyREQgIMudICYjNzMzOyAgRG91YmxlIEFjdXRlIEFjY2VudFxuLy8gTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCwgMUUwMOKAkzFFRkZcbmNvbnN0IGV4dGVuZGVkV29yZENoYXJzID0gL15bYS16QS1aXFx1e0MwfS1cXHV7RkZ9XFx1e0Q4fS1cXHV7RjZ9XFx1e0Y4fS1cXHV7MkM2fVxcdXsyQzh9LVxcdXsyRDd9XFx1ezJERX0tXFx1ezJGRn1cXHV7MUUwMH0tXFx1ezFFRkZ9XSskL3U7XG5cbmNvbnN0IHJlV2hpdGVzcGFjZSA9IC9cXFMvO1xuXG5leHBvcnQgY29uc3Qgd29yZERpZmYgPSBuZXcgRGlmZigpO1xud29yZERpZmYuZXF1YWxzID0gZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVDYXNlKSB7XG4gICAgbGVmdCA9IGxlZnQudG9Mb3dlckNhc2UoKTtcbiAgICByaWdodCA9IHJpZ2h0LnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8ICh0aGlzLm9wdGlvbnMuaWdub3JlV2hpdGVzcGFjZSAmJiAhcmVXaGl0ZXNwYWNlLnRlc3QobGVmdCkgJiYgIXJlV2hpdGVzcGFjZS50ZXN0KHJpZ2h0KSk7XG59O1xud29yZERpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICBsZXQgdG9rZW5zID0gdmFsdWUuc3BsaXQoLyhcXHMrfFxcYikvKTtcblxuICAvLyBKb2luIHRoZSBib3VuZGFyeSBzcGxpdHMgdGhhdCB3ZSBkbyBub3QgY29uc2lkZXIgdG8gYmUgYm91bmRhcmllcy4gVGhpcyBpcyBwcmltYXJpbHkgdGhlIGV4dGVuZGVkIExhdGluIGNoYXJhY3RlciBzZXQuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gZW1wdHkgc3RyaW5nIGluIHRoZSBuZXh0IGZpZWxkIGFuZCB3ZSBoYXZlIG9ubHkgd29yZCBjaGFycyBiZWZvcmUgYW5kIGFmdGVyLCBtZXJnZVxuICAgIGlmICghdG9rZW5zW2kgKyAxXSAmJiB0b2tlbnNbaSArIDJdXG4gICAgICAgICAgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaV0pXG4gICAgICAgICAgJiYgZXh0ZW5kZWRXb3JkQ2hhcnMudGVzdCh0b2tlbnNbaSArIDJdKSkge1xuICAgICAgdG9rZW5zW2ldICs9IHRva2Vuc1tpICsgMl07XG4gICAgICB0b2tlbnMuc3BsaWNlKGkgKyAxLCAyKTtcbiAgICAgIGktLTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZXb3JkcyhvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICBvcHRpb25zID0gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIHtpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlfSk7XG4gIHJldHVybiB3b3JkRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpZmZXb3Jkc1dpdGhTcGFjZShvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucykge1xuICByZXR1cm4gd29yZERpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgb3B0aW9ucyk7XG59XG4iXX0=
2978  
2979  
2980  /***/ }),
2981  /* 4 */
2982  /***/ (function(module, exports) {
2983  
2984      /*istanbul ignore start*/'use strict';
2985  
2986      exports.__esModule = true;
2987      exports. /*istanbul ignore end*/generateOptions = generateOptions;
2988  	function generateOptions(options, defaults) {
2989        if (typeof options === 'function') {
2990          defaults.callback = options;
2991        } else if (options) {
2992          for (var name in options) {
2993            /* istanbul ignore else */
2994            if (options.hasOwnProperty(name)) {
2995              defaults[name] = options[name];
2996            }
2997          }
2998        }
2999        return defaults;
3000      }
3001      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3BhcmFtcy5qcyJdLCJuYW1lcyI6WyJnZW5lcmF0ZU9wdGlvbnMiLCJvcHRpb25zIiwiZGVmYXVsdHMiLCJjYWxsYmFjayIsIm5hbWUiLCJoYXNPd25Qcm9wZXJ0eSJdLCJtYXBwaW5ncyI6Ijs7O2dDQUFnQkEsZSxHQUFBQSxlO0FBQVQsU0FBU0EsZUFBVCxDQUF5QkMsT0FBekIsRUFBa0NDLFFBQWxDLEVBQTRDO0FBQ2pELE1BQUksT0FBT0QsT0FBUCxLQUFtQixVQUF2QixFQUFtQztBQUNqQ0MsYUFBU0MsUUFBVCxHQUFvQkYsT0FBcEI7QUFDRCxHQUZELE1BRU8sSUFBSUEsT0FBSixFQUFhO0FBQ2xCLFNBQUssSUFBSUcsSUFBVCxJQUFpQkgsT0FBakIsRUFBMEI7QUFDeEI7QUFDQSxVQUFJQSxRQUFRSSxjQUFSLENBQXVCRCxJQUF2QixDQUFKLEVBQWtDO0FBQ2hDRixpQkFBU0UsSUFBVCxJQUFpQkgsUUFBUUcsSUFBUixDQUFqQjtBQUNEO0FBQ0Y7QUFDRjtBQUNELFNBQU9GLFFBQVA7QUFDRCIsImZpbGUiOiJwYXJhbXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVPcHRpb25zKG9wdGlvbnMsIGRlZmF1bHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGRlZmF1bHRzLmNhbGxiYWNrID0gb3B0aW9ucztcbiAgfSBlbHNlIGlmIChvcHRpb25zKSB7XG4gICAgZm9yIChsZXQgbmFtZSBpbiBvcHRpb25zKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgZGVmYXVsdHNbbmFtZV0gPSBvcHRpb25zW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmYXVsdHM7XG59XG4iXX0=
3002  
3003  
3004  /***/ }),
3005  /* 5 */
3006  /***/ (function(module, exports, __webpack_require__) {
3007  
3008      /*istanbul ignore start*/'use strict';
3009  
3010      exports.__esModule = true;
3011      exports.lineDiff = undefined;
3012      exports. /*istanbul ignore end*/diffLines = diffLines;
3013      /*istanbul ignore start*/exports. /*istanbul ignore end*/diffTrimmedLines = diffTrimmedLines;
3014  
3015      var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
3016  
3017      /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
3018  
3019      /*istanbul ignore end*/var /*istanbul ignore start*/_params = __webpack_require__(4) /*istanbul ignore end*/;
3020  
3021      /*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
3022  
3023      /*istanbul ignore end*/var lineDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/lineDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
3024      lineDiff.tokenize = function (value) {
3025        var retLines = [],
3026            linesAndNewlines = value.split(/(\n|\r\n)/);
3027  
3028        // Ignore the final empty token that occurs if the string ends with a new line
3029        if (!linesAndNewlines[linesAndNewlines.length - 1]) {
3030          linesAndNewlines.pop();
3031        }
3032  
3033        // Merge the content and line separators into single tokens
3034        for (var i = 0; i < linesAndNewlines.length; i++) {
3035          var line = linesAndNewlines[i];
3036  
3037          if (i % 2 && !this.options.newlineIsToken) {
3038            retLines[retLines.length - 1] += line;
3039          } else {
3040            if (this.options.ignoreWhitespace) {
3041              line = line.trim();
3042            }
3043            retLines.push(line);
3044          }
3045        }
3046  
3047        return retLines;
3048      };
3049  
3050  	function diffLines(oldStr, newStr, callback) {
3051        return lineDiff.diff(oldStr, newStr, callback);
3052      }
3053  	function diffTrimmedLines(oldStr, newStr, callback) {
3054        var options = /*istanbul ignore start*/(0, _params.generateOptions) /*istanbul ignore end*/(callback, { ignoreWhitespace: true });
3055        return lineDiff.diff(oldStr, newStr, options);
3056      }
3057      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2xpbmUuanMiXSwibmFtZXMiOlsiZGlmZkxpbmVzIiwiZGlmZlRyaW1tZWRMaW5lcyIsImxpbmVEaWZmIiwidG9rZW5pemUiLCJ2YWx1ZSIsInJldExpbmVzIiwibGluZXNBbmROZXdsaW5lcyIsInNwbGl0IiwibGVuZ3RoIiwicG9wIiwiaSIsImxpbmUiLCJvcHRpb25zIiwibmV3bGluZUlzVG9rZW4iLCJpZ25vcmVXaGl0ZXNwYWNlIiwidHJpbSIsInB1c2giLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Z0NBOEJnQkEsUyxHQUFBQSxTO3lEQUNBQyxnQixHQUFBQSxnQjs7QUEvQmhCOzs7O3VCQUNBOzs7O3VCQUVPLElBQU1DLCtFQUFXLHdFQUFqQjtBQUNQQSxTQUFTQyxRQUFULEdBQW9CLFVBQVNDLEtBQVQsRUFBZ0I7QUFDbEMsTUFBSUMsV0FBVyxFQUFmO0FBQUEsTUFDSUMsbUJBQW1CRixNQUFNRyxLQUFOLENBQVksV0FBWixDQUR2Qjs7QUFHQTtBQUNBLE1BQUksQ0FBQ0QsaUJBQWlCQSxpQkFBaUJFLE1BQWpCLEdBQTBCLENBQTNDLENBQUwsRUFBb0Q7QUFDbERGLHFCQUFpQkcsR0FBakI7QUFDRDs7QUFFRDtBQUNBLE9BQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJSixpQkFBaUJFLE1BQXJDLEVBQTZDRSxHQUE3QyxFQUFrRDtBQUNoRCxRQUFJQyxPQUFPTCxpQkFBaUJJLENBQWpCLENBQVg7O0FBRUEsUUFBSUEsSUFBSSxDQUFKLElBQVMsQ0FBQyxLQUFLRSxPQUFMLENBQWFDLGNBQTNCLEVBQTJDO0FBQ3pDUixlQUFTQSxTQUFTRyxNQUFULEdBQWtCLENBQTNCLEtBQWlDRyxJQUFqQztBQUNELEtBRkQsTUFFTztBQUNMLFVBQUksS0FBS0MsT0FBTCxDQUFhRSxnQkFBakIsRUFBbUM7QUFDakNILGVBQU9BLEtBQUtJLElBQUwsRUFBUDtBQUNEO0FBQ0RWLGVBQVNXLElBQVQsQ0FBY0wsSUFBZDtBQUNEO0FBQ0Y7O0FBRUQsU0FBT04sUUFBUDtBQUNELENBeEJEOztBQTBCTyxTQUFTTCxTQUFULENBQW1CaUIsTUFBbkIsRUFBMkJDLE1BQTNCLEVBQW1DQyxRQUFuQyxFQUE2QztBQUFFLFNBQU9qQixTQUFTa0IsSUFBVCxDQUFjSCxNQUFkLEVBQXNCQyxNQUF0QixFQUE4QkMsUUFBOUIsQ0FBUDtBQUFpRDtBQUNoRyxTQUFTbEIsZ0JBQVQsQ0FBMEJnQixNQUExQixFQUFrQ0MsTUFBbEMsRUFBMENDLFFBQTFDLEVBQW9EO0FBQ3pELE1BQUlQLFVBQVUsOEVBQWdCTyxRQUFoQixFQUEwQixFQUFDTCxrQkFBa0IsSUFBbkIsRUFBMUIsQ0FBZDtBQUNBLFNBQU9aLFNBQVNrQixJQUFULENBQWNILE1BQWQsRUFBc0JDLE1BQXRCLEVBQThCTixPQUE5QixDQUFQO0FBQ0QiLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5pbXBvcnQge2dlbmVyYXRlT3B0aW9uc30gZnJvbSAnLi4vdXRpbC9wYXJhbXMnO1xuXG5leHBvcnQgY29uc3QgbGluZURpZmYgPSBuZXcgRGlmZigpO1xubGluZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICBsZXQgcmV0TGluZXMgPSBbXSxcbiAgICAgIGxpbmVzQW5kTmV3bGluZXMgPSB2YWx1ZS5zcGxpdCgvKFxcbnxcXHJcXG4pLyk7XG5cbiAgLy8gSWdub3JlIHRoZSBmaW5hbCBlbXB0eSB0b2tlbiB0aGF0IG9jY3VycyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBhIG5ldyBsaW5lXG4gIGlmICghbGluZXNBbmROZXdsaW5lc1tsaW5lc0FuZE5ld2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgbGluZXNBbmROZXdsaW5lcy5wb3AoKTtcbiAgfVxuXG4gIC8vIE1lcmdlIHRoZSBjb250ZW50IGFuZCBsaW5lIHNlcGFyYXRvcnMgaW50byBzaW5nbGUgdG9rZW5zXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXNBbmROZXdsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBsaW5lID0gbGluZXNBbmROZXdsaW5lc1tpXTtcblxuICAgIGlmIChpICUgMiAmJiAhdGhpcy5vcHRpb25zLm5ld2xpbmVJc1Rva2VuKSB7XG4gICAgICByZXRMaW5lc1tyZXRMaW5lcy5sZW5ndGggLSAxXSArPSBsaW5lO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZVdoaXRlc3BhY2UpIHtcbiAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgfVxuICAgICAgcmV0TGluZXMucHVzaChsaW5lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0TGluZXM7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjaykgeyByZXR1cm4gbGluZURpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spOyB9XG5leHBvcnQgZnVuY3Rpb24gZGlmZlRyaW1tZWRMaW5lcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHtcbiAgbGV0IG9wdGlvbnMgPSBnZW5lcmF0ZU9wdGlvbnMoY2FsbGJhY2ssIHtpZ25vcmVXaGl0ZXNwYWNlOiB0cnVlfSk7XG4gIHJldHVybiBsaW5lRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbn1cbiJdfQ==
3058  
3059  
3060  /***/ }),
3061  /* 6 */
3062  /***/ (function(module, exports, __webpack_require__) {
3063  
3064      /*istanbul ignore start*/'use strict';
3065  
3066      exports.__esModule = true;
3067      exports.sentenceDiff = undefined;
3068      exports. /*istanbul ignore end*/diffSentences = diffSentences;
3069  
3070      var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
3071  
3072      /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
3073  
3074  	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
3075  
3076      /*istanbul ignore end*/var sentenceDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/sentenceDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
3077      sentenceDiff.tokenize = function (value) {
3078        return value.split(/(\S.+?[.!?])(?=\s+|$)/);
3079      };
3080  
3081  	function diffSentences(oldStr, newStr, callback) {
3082        return sentenceDiff.diff(oldStr, newStr, callback);
3083      }
3084      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL3NlbnRlbmNlLmpzIl0sIm5hbWVzIjpbImRpZmZTZW50ZW5jZXMiLCJzZW50ZW5jZURpZmYiLCJ0b2tlbml6ZSIsInZhbHVlIiwic3BsaXQiLCJvbGRTdHIiLCJuZXdTdHIiLCJjYWxsYmFjayIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Z0NBUWdCQSxhLEdBQUFBLGE7O0FBUmhCOzs7Ozs7dUJBR08sSUFBTUMsdUZBQWUsd0VBQXJCO0FBQ1BBLGFBQWFDLFFBQWIsR0FBd0IsVUFBU0MsS0FBVCxFQUFnQjtBQUN0QyxTQUFPQSxNQUFNQyxLQUFOLENBQVksdUJBQVosQ0FBUDtBQUNELENBRkQ7O0FBSU8sU0FBU0osYUFBVCxDQUF1QkssTUFBdkIsRUFBK0JDLE1BQS9CLEVBQXVDQyxRQUF2QyxFQUFpRDtBQUFFLFNBQU9OLGFBQWFPLElBQWIsQ0FBa0JILE1BQWxCLEVBQTBCQyxNQUExQixFQUFrQ0MsUUFBbEMsQ0FBUDtBQUFxRCIsImZpbGUiOiJzZW50ZW5jZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cblxuZXhwb3J0IGNvbnN0IHNlbnRlbmNlRGlmZiA9IG5ldyBEaWZmKCk7XG5zZW50ZW5jZURpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoLyhcXFMuKz9bLiE/XSkoPz1cXHMrfCQpLyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZlNlbnRlbmNlcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHsgcmV0dXJuIHNlbnRlbmNlRGlmZi5kaWZmKG9sZFN0ciwgbmV3U3RyLCBjYWxsYmFjayk7IH1cbiJdfQ==
3085  
3086  
3087  /***/ }),
3088  /* 7 */
3089  /***/ (function(module, exports, __webpack_require__) {
3090  
3091      /*istanbul ignore start*/'use strict';
3092  
3093      exports.__esModule = true;
3094      exports.cssDiff = undefined;
3095      exports. /*istanbul ignore end*/diffCss = diffCss;
3096  
3097      var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
3098  
3099      /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
3100  
3101  	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
3102  
3103      /*istanbul ignore end*/var cssDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/cssDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
3104      cssDiff.tokenize = function (value) {
3105        return value.split(/([{}:;,]|\s+)/);
3106      };
3107  
3108  	function diffCss(oldStr, newStr, callback) {
3109        return cssDiff.diff(oldStr, newStr, callback);
3110      }
3111      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2Nzcy5qcyJdLCJuYW1lcyI6WyJkaWZmQ3NzIiwiY3NzRGlmZiIsInRva2VuaXplIiwidmFsdWUiLCJzcGxpdCIsIm9sZFN0ciIsIm5ld1N0ciIsImNhbGxiYWNrIiwiZGlmZiJdLCJtYXBwaW5ncyI6Ijs7OztnQ0FPZ0JBLE8sR0FBQUEsTzs7QUFQaEI7Ozs7Ozt1QkFFTyxJQUFNQyw2RUFBVSx3RUFBaEI7QUFDUEEsUUFBUUMsUUFBUixHQUFtQixVQUFTQyxLQUFULEVBQWdCO0FBQ2pDLFNBQU9BLE1BQU1DLEtBQU4sQ0FBWSxlQUFaLENBQVA7QUFDRCxDQUZEOztBQUlPLFNBQVNKLE9BQVQsQ0FBaUJLLE1BQWpCLEVBQXlCQyxNQUF6QixFQUFpQ0MsUUFBakMsRUFBMkM7QUFBRSxTQUFPTixRQUFRTyxJQUFSLENBQWFILE1BQWIsRUFBcUJDLE1BQXJCLEVBQTZCQyxRQUE3QixDQUFQO0FBQWdEIiwiZmlsZSI6ImNzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBjc3NEaWZmID0gbmV3IERpZmYoKTtcbmNzc0RpZmYudG9rZW5pemUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUuc3BsaXQoLyhbe306OyxdfFxccyspLyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZkNzcyhvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spIHsgcmV0dXJuIGNzc0RpZmYuZGlmZihvbGRTdHIsIG5ld1N0ciwgY2FsbGJhY2spOyB9XG4iXX0=
3112  
3113  
3114  /***/ }),
3115  /* 8 */
3116  /***/ (function(module, exports, __webpack_require__) {
3117  
3118      /*istanbul ignore start*/'use strict';
3119  
3120      exports.__esModule = true;
3121      exports.jsonDiff = undefined;
3122  
3123      var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
3124  
3125      exports. /*istanbul ignore end*/diffJson = diffJson;
3126      /*istanbul ignore start*/exports. /*istanbul ignore end*/canonicalize = canonicalize;
3127  
3128      var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
3129  
3130      /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
3131  
3132      /*istanbul ignore end*/var /*istanbul ignore start*/_line = __webpack_require__(5) /*istanbul ignore end*/;
3133  
3134      /*istanbul ignore start*/function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
3135  
3136      /*istanbul ignore end*/var objectPrototypeToString = Object.prototype.toString;
3137  
3138      var jsonDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/jsonDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
3139      // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a
3140      // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:
3141      jsonDiff.useLongestToken = true;
3142  
3143      jsonDiff.tokenize = /*istanbul ignore start*/_line.lineDiff /*istanbul ignore end*/.tokenize;
3144      jsonDiff.castInput = function (value) {
3145        /*istanbul ignore start*/var _options = /*istanbul ignore end*/this.options,
3146            undefinedReplacement = _options.undefinedReplacement,
3147            _options$stringifyRep = _options.stringifyReplacer,
3148            stringifyReplacer = _options$stringifyRep === undefined ? function (k, v) /*istanbul ignore start*/{
3149          return (/*istanbul ignore end*/typeof v === 'undefined' ? undefinedReplacement : v
3150          );
3151        } : _options$stringifyRep;
3152  
3153  
3154        return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, '  ');
3155      };
3156      jsonDiff.equals = function (left, right) {
3157        return (/*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'))
3158        );
3159      };
3160  
3161  	function diffJson(oldObj, newObj, options) {
3162        return jsonDiff.diff(oldObj, newObj, options);
3163      }
3164  
3165      // This function handles the presence of circular references by bailing out when encountering an
3166      // object that is already on the "stack" of items being processed. Accepts an optional replacer
3167  	function canonicalize(obj, stack, replacementStack, replacer, key) {
3168        stack = stack || [];
3169        replacementStack = replacementStack || [];
3170  
3171        if (replacer) {
3172          obj = replacer(key, obj);
3173        }
3174  
3175        var i = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
3176  
3177        for (i = 0; i < stack.length; i += 1) {
3178          if (stack[i] === obj) {
3179            return replacementStack[i];
3180          }
3181        }
3182  
3183        var canonicalizedObj = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
3184  
3185        if ('[object Array]' === objectPrototypeToString.call(obj)) {
3186          stack.push(obj);
3187          canonicalizedObj = new Array(obj.length);
3188          replacementStack.push(canonicalizedObj);
3189          for (i = 0; i < obj.length; i += 1) {
3190            canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);
3191          }
3192          stack.pop();
3193          replacementStack.pop();
3194          return canonicalizedObj;
3195        }
3196  
3197        if (obj && obj.toJSON) {
3198          obj = obj.toJSON();
3199        }
3200  
3201        if ( /*istanbul ignore start*/(typeof /*istanbul ignore end*/obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj !== null) {
3202          stack.push(obj);
3203          canonicalizedObj = {};
3204          replacementStack.push(canonicalizedObj);
3205          var sortedKeys = [],
3206              _key = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
3207          for (_key in obj) {
3208            /* istanbul ignore else */
3209            if (obj.hasOwnProperty(_key)) {
3210              sortedKeys.push(_key);
3211            }
3212          }
3213          sortedKeys.sort();
3214          for (i = 0; i < sortedKeys.length; i += 1) {
3215            _key = sortedKeys[i];
3216            canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);
3217          }
3218          stack.pop();
3219          replacementStack.pop();
3220        } else {
3221          canonicalizedObj = obj;
3222        }
3223        return canonicalizedObj;
3224      }
3225      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2pzb24uanMiXSwibmFtZXMiOlsiZGlmZkpzb24iLCJjYW5vbmljYWxpemUiLCJvYmplY3RQcm90b3R5cGVUb1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwianNvbkRpZmYiLCJ1c2VMb25nZXN0VG9rZW4iLCJ0b2tlbml6ZSIsImNhc3RJbnB1dCIsInZhbHVlIiwib3B0aW9ucyIsInVuZGVmaW5lZFJlcGxhY2VtZW50Iiwic3RyaW5naWZ5UmVwbGFjZXIiLCJrIiwidiIsIkpTT04iLCJzdHJpbmdpZnkiLCJlcXVhbHMiLCJsZWZ0IiwicmlnaHQiLCJjYWxsIiwicmVwbGFjZSIsIm9sZE9iaiIsIm5ld09iaiIsImRpZmYiLCJvYmoiLCJzdGFjayIsInJlcGxhY2VtZW50U3RhY2siLCJyZXBsYWNlciIsImtleSIsImkiLCJsZW5ndGgiLCJjYW5vbmljYWxpemVkT2JqIiwicHVzaCIsIkFycmF5IiwicG9wIiwidG9KU09OIiwic29ydGVkS2V5cyIsImhhc093blByb3BlcnR5Iiwic29ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztnQ0FxQmdCQSxRLEdBQUFBLFE7eURBSUFDLFksR0FBQUEsWTs7QUF6QmhCOzs7O3VCQUNBOzs7O3VCQUVBLElBQU1DLDBCQUEwQkMsT0FBT0MsU0FBUCxDQUFpQkMsUUFBakQ7O0FBR08sSUFBTUMsK0VBQVcsd0VBQWpCO0FBQ1A7QUFDQTtBQUNBQSxTQUFTQyxlQUFULEdBQTJCLElBQTNCOztBQUVBRCxTQUFTRSxRQUFULEdBQW9CLGdFQUFTQSxRQUE3QjtBQUNBRixTQUFTRyxTQUFULEdBQXFCLFVBQVNDLEtBQVQsRUFBZ0I7QUFBQSxpRUFDK0UsS0FBS0MsT0FEcEY7QUFBQSxNQUM1QkMsb0JBRDRCLFlBQzVCQSxvQkFENEI7QUFBQSx1Q0FDTkMsaUJBRE07QUFBQSxNQUNOQSxpQkFETSx5Q0FDYyxVQUFDQyxDQUFELEVBQUlDLENBQUo7QUFBQSxtQ0FBVSxPQUFPQSxDQUFQ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QUFLVCxJQUFJLENBQVQsRUFBWUEsSUFBSU8sV0FBV04sTUFBM0IsRUFBbUNELEtBQUssQ0FBeEMsRUFBMkM7QUFDekNELGFBQU1RLFdBQVdQLENBQVgsQ0FBTjtBQUNBRSx1QkFBaUJILElBQWpCLElBQXdCN0IsYUFBYXlCLElBQUlJLElBQUosQ0FBYixFQUF1QkgsS0FBdkIsRUFBOEJDLGdCQUE5QixFQUFnREMsUUFBaEQsRUFBMERDLElBQTFELENBQXhCO0FBQ0Q7QUFDREgsVUFBTVMsR0FBTjtBQUNBUixxQkFBaUJRLEdBQWpCO0FBQ0QsR0FuQkQsTUFtQk87QUFDTEgsdUJBQW1CUCxHQUFuQjtBQUNEO0FBQ0QsU0FBT08sZ0JBQVA7QUFDRCIsImZpbGUiOiJqc29uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERpZmYgZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7bGluZURpZmZ9IGZyb20gJy4vbGluZSc7XG5cbmNvbnN0IG9iamVjdFByb3RvdHlwZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuXG5leHBvcnQgY29uc3QganNvbkRpZmYgPSBuZXcgRGlmZigpO1xuLy8gRGlzY3JpbWluYXRlIGJldHdlZW4gdHdvIGxpbmVzIG9mIHByZXR0eS1wcmludGVkLCBzZXJpYWxpemVkIEpTT04gd2hlcmUgb25lIG9mIHRoZW0gaGFzIGFcbi8vIGRhbmdsaW5nIGNvbW1hIGFuZCB0aGUgb3RoZXIgZG9lc24ndC4gVHVybnMgb3V0IGluY2x1ZGluZyB0aGUgZGFuZ2xpbmcgY29tbWEgeWllbGRzIHRoZSBuaWNlc3Qgb3V0cHV0OlxuanNvbkRpZmYudXNlTG9uZ2VzdFRva2VuID0gdHJ1ZTtcblxuanNvbkRpZmYudG9rZW5pemUgPSBsaW5lRGlmZi50b2tlbml6ZTtcbmpzb25EaWZmLmNhc3RJbnB1dCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IHt1bmRlZmluZWRSZXBsYWNlbWVudCwgc3RyaW5naWZ5UmVwbGFjZXIgPSAoaywgdikgPT4gdHlwZW9mIHYgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkUmVwbGFjZW1lbnQgOiB2fSA9IHRoaXMub3B0aW9ucztcblxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogSlNPTi5zdHJpbmdpZnkoY2Fub25pY2FsaXplKHZhbHVlLCBudWxsLCBudWxsLCBzdHJpbmdpZnlSZXBsYWNlciksIHN0cmluZ2lmeVJlcGxhY2VyLCAnICAnKTtcbn07XG5qc29uRGlmZi5lcXVhbHMgPSBmdW5jdGlvbihsZWZ0LCByaWdodCkge1xuICByZXR1cm4gRGlmZi5wcm90b3R5cGUuZXF1YWxzLmNhbGwoanNvbkRpZmYsIGxlZnQucmVwbGFjZSgvLChbXFxyXFxuXSkvZywgJyQxJyksIHJpZ2h0LnJlcGxhY2UoLywoW1xcclxcbl0pL2csICckMScpKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaWZmSnNvbihvbGRPYmosIG5ld09iaiwgb3B0aW9ucykgeyByZXR1cm4ganNvbkRpZmYuZGlmZihvbGRPYmosIG5ld09iaiwgb3B0aW9ucyk7IH1cblxuLy8gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBwcmVzZW5jZSBvZiBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGJhaWxpbmcgb3V0IHdoZW4gZW5jb3VudGVyaW5nIGFuXG4vLyBvYmplY3QgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBcInN0YWNrXCIgb2YgaXRlbXMgYmVpbmcgcHJvY2Vzc2VkLiBBY2NlcHRzIGFuIG9wdGlvbmFsIHJlcGxhY2VyXG5leHBvcnQgZnVuY3Rpb24gY2Fub25pY2FsaXplKG9iaiwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpIHtcbiAgc3RhY2sgPSBzdGFjayB8fCBbXTtcbiAgcmVwbGFjZW1lbnRTdGFjayA9IHJlcGxhY2VtZW50U3RhY2sgfHwgW107XG5cbiAgaWYgKHJlcGxhY2VyKSB7XG4gICAgb2JqID0gcmVwbGFjZXIoa2V5LCBvYmopO1xuICB9XG5cbiAgbGV0IGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHN0YWNrW2ldID09PSBvYmopIHtcbiAgICAgIHJldHVybiByZXBsYWNlbWVudFN0YWNrW2ldO1xuICAgIH1cbiAgfVxuXG4gIGxldCBjYW5vbmljYWxpemVkT2JqO1xuXG4gIGlmICgnW29iamVjdCBBcnJheV0nID09PSBvYmplY3RQcm90b3R5cGVUb1N0cmluZy5jYWxsKG9iaikpIHtcbiAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IG5ldyBBcnJheShvYmoubGVuZ3RoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnB1c2goY2Fub25pY2FsaXplZE9iaik7XG4gICAgZm9yIChpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY2Fub25pY2FsaXplZE9ialtpXSA9IGNhbm9uaWNhbGl6ZShvYmpbaV0sIHN0YWNrLCByZXBsYWNlbWVudFN0YWNrLCByZXBsYWNlciwga2V5KTtcbiAgICB9XG4gICAgc3RhY2sucG9wKCk7XG4gICAgcmVwbGFjZW1lbnRTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gY2Fub25pY2FsaXplZE9iajtcbiAgfVxuXG4gIGlmIChvYmogJiYgb2JqLnRvSlNPTikge1xuICAgIG9iaiA9IG9iai50b0pTT04oKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogIT09IG51bGwpIHtcbiAgICBzdGFjay5wdXNoKG9iaik7XG4gICAgY2Fub25pY2FsaXplZE9iaiA9IHt9O1xuICAgIHJlcGxhY2VtZW50U3RhY2sucHVzaChjYW5vbmljYWxpemVkT2JqKTtcbiAgICBsZXQgc29ydGVkS2V5cyA9IFtdLFxuICAgICAgICBrZXk7XG4gICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHNvcnRlZEtleXMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0ZWRLZXlzLnNvcnQoKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgc29ydGVkS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAga2V5ID0gc29ydGVkS2V5c1tpXTtcbiAgICAgIGNhbm9uaWNhbGl6ZWRPYmpba2V5XSA9IGNhbm9uaWNhbGl6ZShvYmpba2V5XSwgc3RhY2ssIHJlcGxhY2VtZW50U3RhY2ssIHJlcGxhY2VyLCBrZXkpO1xuICAgIH1cbiAgICBzdGFjay5wb3AoKTtcbiAgICByZXBsYWNlbWVudFN0YWNrLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIGNhbm9uaWNhbGl6ZWRPYmogPSBvYmo7XG4gIH1cbiAgcmV0dXJuIGNhbm9uaWNhbGl6ZWRPYmo7XG59XG4iXX0=
3226  
3227  
3228  /***/ }),
3229  /* 9 */
3230  /***/ (function(module, exports, __webpack_require__) {
3231  
3232      /*istanbul ignore start*/'use strict';
3233  
3234      exports.__esModule = true;
3235      exports.arrayDiff = undefined;
3236      exports. /*istanbul ignore end*/diffArrays = diffArrays;
3237  
3238      var /*istanbul ignore start*/_base = __webpack_require__(1) /*istanbul ignore end*/;
3239  
3240      /*istanbul ignore start*/var _base2 = _interopRequireDefault(_base);
3241  
3242  	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
3243  
3244      /*istanbul ignore end*/var arrayDiff = /*istanbul ignore start*/exports. /*istanbul ignore end*/arrayDiff = new /*istanbul ignore start*/_base2['default'] /*istanbul ignore end*/();
3245      arrayDiff.tokenize = function (value) {
3246        return value.slice();
3247      };
3248      arrayDiff.join = arrayDiff.removeEmpty = function (value) {
3249        return value;
3250      };
3251  
3252  	function diffArrays(oldArr, newArr, callback) {
3253        return arrayDiff.diff(oldArr, newArr, callback);
3254      }
3255      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWZmL2FycmF5LmpzIl0sIm5hbWVzIjpbImRpZmZBcnJheXMiLCJhcnJheURpZmYiLCJ0b2tlbml6ZSIsInZhbHVlIiwic2xpY2UiLCJqb2luIiwicmVtb3ZlRW1wdHkiLCJvbGRBcnIiLCJuZXdBcnIiLCJjYWxsYmFjayIsImRpZmYiXSwibWFwcGluZ3MiOiI7Ozs7Z0NBVWdCQSxVLEdBQUFBLFU7O0FBVmhCOzs7Ozs7dUJBRU8sSUFBTUMsaUZBQVksd0VBQWxCO0FBQ1BBLFVBQVVDLFFBQVYsR0FBcUIsVUFBU0MsS0FBVCxFQUFnQjtBQUNuQyxTQUFPQSxNQUFNQyxLQUFOLEVBQVA7QUFDRCxDQUZEO0FBR0FILFVBQVVJLElBQVYsR0FBaUJKLFVBQVVLLFdBQVYsR0FBd0IsVUFBU0gsS0FBVCxFQUFnQjtBQUN2RCxTQUFPQSxLQUFQO0FBQ0QsQ0FGRDs7QUFJTyxTQUFTSCxVQUFULENBQW9CTyxNQUFwQixFQUE0QkMsTUFBNUIsRUFBb0NDLFFBQXBDLEVBQThDO0FBQUUsU0FBT1IsVUFBVVMsSUFBVixDQUFlSCxNQUFmLEVBQXVCQyxNQUF2QixFQUErQkMsUUFBL0IsQ0FBUDtBQUFrRCIsImZpbGUiOiJhcnJheS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaWZmIGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBjb25zdCBhcnJheURpZmYgPSBuZXcgRGlmZigpO1xuYXJyYXlEaWZmLnRva2VuaXplID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnNsaWNlKCk7XG59O1xuYXJyYXlEaWZmLmpvaW4gPSBhcnJheURpZmYucmVtb3ZlRW1wdHkgPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZGlmZkFycmF5cyhvbGRBcnIsIG5ld0FyciwgY2FsbGJhY2spIHsgcmV0dXJuIGFycmF5RGlmZi5kaWZmKG9sZEFyciwgbmV3QXJyLCBjYWxsYmFjayk7IH1cbiJdfQ==
3256  
3257  
3258  /***/ }),
3259  /* 10 */
3260  /***/ (function(module, exports, __webpack_require__) {
3261  
3262      /*istanbul ignore start*/'use strict';
3263  
3264      exports.__esModule = true;
3265      exports. /*istanbul ignore end*/applyPatch = applyPatch;
3266      /*istanbul ignore start*/exports. /*istanbul ignore end*/applyPatches = applyPatches;
3267  
3268      var /*istanbul ignore start*/_parse = __webpack_require__(11) /*istanbul ignore end*/;
3269  
3270      var /*istanbul ignore start*/_distanceIterator = __webpack_require__(12) /*istanbul ignore end*/;
3271  
3272      /*istanbul ignore start*/var _distanceIterator2 = _interopRequireDefault(_distanceIterator);
3273  
3274  	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
3275  
3276      /*istanbul ignore end*/function applyPatch(source, uniDiff) {
3277        /*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
3278  
3279        if (typeof uniDiff === 'string') {
3280          uniDiff = /*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(uniDiff);
3281        }
3282  
3283        if (Array.isArray(uniDiff)) {
3284          if (uniDiff.length > 1) {
3285            throw new Error('applyPatch only works with a single input.');
3286          }
3287  
3288          uniDiff = uniDiff[0];
3289        }
3290  
3291        // Apply the diff to the input
3292        var lines = source.split(/\r\n|[\n\v\f\r\x85]/),
3293            delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [],
3294            hunks = uniDiff.hunks,
3295            compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) /*istanbul ignore start*/{
3296          return (/*istanbul ignore end*/line === patchContent
3297          );
3298        },
3299            errorCount = 0,
3300            fuzzFactor = options.fuzzFactor || 0,
3301            minLine = 0,
3302            offset = 0,
3303            removeEOFNL = /*istanbul ignore start*/void 0 /*istanbul ignore end*/,
3304            addEOFNL = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
3305  
3306        /**
3307         * Checks if the hunk exactly fits on the provided location
3308         */
3309  	  function hunkFits(hunk, toPos) {
3310          for (var j = 0; j < hunk.lines.length; j++) {
3311            var line = hunk.lines[j],
3312                operation = line.length > 0 ? line[0] : ' ',
3313                content = line.length > 0 ? line.substr(1) : line;
3314  
3315            if (operation === ' ' || operation === '-') {
3316              // Context sanity check
3317              if (!compareLine(toPos + 1, lines[toPos], operation, content)) {
3318                errorCount++;
3319  
3320                if (errorCount > fuzzFactor) {
3321                  return false;
3322                }
3323              }
3324              toPos++;
3325            }
3326          }
3327  
3328          return true;
3329        }
3330  
3331        // Search best fit offsets for each hunk based on the previous ones
3332        for (var i = 0; i < hunks.length; i++) {
3333          var hunk = hunks[i],
3334              maxLine = lines.length - hunk.oldLines,
3335              localOffset = 0,
3336              toPos = offset + hunk.oldStart - 1;
3337  
3338          var iterator = /*istanbul ignore start*/(0, _distanceIterator2['default']) /*istanbul ignore end*/(toPos, minLine, maxLine);
3339  
3340          for (; localOffset !== undefined; localOffset = iterator()) {
3341            if (hunkFits(hunk, toPos + localOffset)) {
3342              hunk.offset = offset += localOffset;
3343              break;
3344            }
3345          }
3346  
3347          if (localOffset === undefined) {
3348            return false;
3349          }
3350  
3351          // Set lower text limit to end of the current hunk, so next ones don't try
3352          // to fit over already patched text
3353          minLine = hunk.offset + hunk.oldStart + hunk.oldLines;
3354        }
3355  
3356        // Apply patch hunks
3357        var diffOffset = 0;
3358        for (var _i = 0; _i < hunks.length; _i++) {
3359          var _hunk = hunks[_i],
3360              _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;
3361          diffOffset += _hunk.newLines - _hunk.oldLines;
3362  
3363          if (_toPos < 0) {
3364            // Creating a new file
3365            _toPos = 0;
3366          }
3367  
3368          for (var j = 0; j < _hunk.lines.length; j++) {
3369            var line = _hunk.lines[j],
3370                operation = line.length > 0 ? line[0] : ' ',
3371                content = line.length > 0 ? line.substr(1) : line,
3372                delimiter = _hunk.linedelimiters[j];
3373  
3374            if (operation === ' ') {
3375              _toPos++;
3376            } else if (operation === '-') {
3377              lines.splice(_toPos, 1);
3378              delimiters.splice(_toPos, 1);
3379              /* istanbul ignore else */
3380            } else if (operation === '+') {
3381              lines.splice(_toPos, 0, content);
3382              delimiters.splice(_toPos, 0, delimiter);
3383              _toPos++;
3384            } else if (operation === '\\') {
3385              var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;
3386              if (previousOperation === '+') {
3387                removeEOFNL = true;
3388              } else if (previousOperation === '-') {
3389                addEOFNL = true;
3390              }
3391            }
3392          }
3393        }
3394  
3395        // Handle EOFNL insertion/removal
3396        if (removeEOFNL) {
3397          while (!lines[lines.length - 1]) {
3398            lines.pop();
3399            delimiters.pop();
3400          }
3401        } else if (addEOFNL) {
3402          lines.push('');
3403          delimiters.push('\n');
3404        }
3405        for (var _k = 0; _k < lines.length - 1; _k++) {
3406          lines[_k] = lines[_k] + delimiters[_k];
3407        }
3408        return lines.join('');
3409      }
3410  
3411      // Wrapper that supports multiple file patches via callbacks.
3412  	function applyPatches(uniDiff, options) {
3413        if (typeof uniDiff === 'string') {
3414          uniDiff = /*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(uniDiff);
3415        }
3416  
3417        var currentIndex = 0;
3418  	  function processIndex() {
3419          var index = uniDiff[currentIndex++];
3420          if (!index) {
3421            return options.complete();
3422          }
3423  
3424          options.loadFile(index, function (err, data) {
3425            if (err) {
3426              return options.complete(err);
3427            }
3428  
3429            var updatedContent = applyPatch(data, index, options);
3430            options.patched(index, updatedContent, function (err) {
3431              if (err) {
3432                return options.complete(err);
3433              }
3434  
3435              processIndex();
3436            });
3437          });
3438        }
3439        processIndex();
3440      }
3441      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9hcHBseS5qcyJdLCJuYW1lcyI6WyJhcHBseVBhdGNoIiwiYXBwbHlQYXRjaGVzIiwic291cmNlIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJFcnJvciIsImxpbmVzIiwic3BsaXQiLCJkZWxpbWl0ZXJzIiwibWF0Y2giLCJodW5rcyIsImNvbXBhcmVMaW5lIiwibGluZU51bWJlciIsImxpbmUiLCJvcGVyYXRpb24iLCJwYXRjaENvbnRlbnQiLCJlcnJvckNvdW50IiwiZnV6ekZhY3RvciIsIm1pbkxpbmUiLCJvZmZzZXQiLCJyZW1vdmVFT0ZOTCIsImFkZEVPRk5MIiwiaHVua0ZpdHMiLCJodW5rIiwidG9Qb3MiLCJqIiwiY29udGVudCIsInN1YnN0ciIsImkiLCJtYXhMaW5lIiwib2xkTGluZXMiLCJsb2NhbE9mZnNldCIsIm9sZFN0YXJ0IiwiaXRlcmF0b3IiLCJ1bmRlZmluZWQiLCJkaWZmT2Zmc2V0IiwibmV3TGluZXMiLCJkZWxpbWl0ZXIiLCJsaW5lZGVsaW1pdGVycyIsInNwbGljZSIsInByZXZpb3VzT3BlcmF0aW9uIiwicG9wIiwicHVzaCIsIl9rIiwiam9pbiIsImN1cnJlbnRJbmRleCIsInByb2Nlc3NJbmRleCIsImluZGV4IiwiY29tcGxldGUiLCJsb2FkRmlsZSIsImVyciIsImRhdGEiLCJ1cGRhdGVkQ29udGVudCIsInBhdGNoZWQiXSwibWFwcGluZ3MiOiI7OztnQ0FHZ0JBLFUsR0FBQUEsVTt5REFvSUFDLFksR0FBQUEsWTs7QUF2SWhCOztBQUNBOzs7Ozs7dUJBRU8sU0FBU0QsVUFBVCxDQUFvQkUsTUFBcEIsRUFBNEJDLE9BQTVCLEVBQW1EO0FBQUEsc0RBQWRDLE9BQWMsdUVBQUosRUFBSTs7QUFDeEQsTUFBSSxPQUFPRCxPQUFQLEtBQW1CLFFBQXZCLEVBQWlDO0FBQy9CQSxjQUFVLHdFQUFXQSxPQUFYLENBQVY7QUFDRDs7QUFFRCxNQUFJRSxNQUFNQyxP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QUFZO0FBQ1YsYUFBTzlDLFFBQVErQyxRQUFSLEVBQVA7QUFDRDs7QUFFRC9DLFlBQVFnRCxRQUFSLENBQWlCRixLQUFqQixFQUF3QixVQUFTRyxHQUFULEVBQWNDLElBQWQsRUFBb0I7QUFDMUMsVUFBSUQsR0FBSixFQUFTO0FBQ1AsZUFBT2pELFFBQVErQyxRQUFSLENBQWlCRSxHQUFqQixDQUFQO0FBQ0Q7O0FBRUQsVUFBSUUsaUJBQWlCdkQsV0FBV3NELElBQVgsRUFBaUJKLEtBQWpCLEVBQXdCOUMsT0FBeEIsQ0FBckI7QUFDQUEsY0FBUW9ELE9BQVIsQ0FBZ0JOLEtBQWhCLEVBQXVCSyxjQUF2QixFQUF1QyxVQUFTRixHQUFULEVBQWM7QUFDbkQsWUFBSUEsR0FBSixFQUFTO0FBQ1AsaUJBQU9qRCxRQUFRK0MsUUFBUixDQUFpQkUsR0FBakIsQ0FBUDtBQUNEOztBQUVESjtBQUNELE9BTkQ7QUFPRCxLQWJEO0FBY0Q7QUFDREE7QUFDRCIsImZpbGUiOiJhcHBseS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFyc2VQYXRjaH0gZnJvbSAnLi9wYXJzZSc7XG5pbXBvcnQgZGlzdGFuY2VJdGVyYXRvciBmcm9tICcuLi91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2goc291cmNlLCB1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgaWYgKHR5cGVvZiB1bmlEaWZmID09PSAnc3RyaW5nJykge1xuICAgIHVuaURpZmYgPSBwYXJzZVBhdGNoKHVuaURpZmYpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodW5pRGlmZikpIHtcbiAgICBpZiAodW5pRGlmZi5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5UGF0Y2ggb25seSB3b3JrcyB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgIH1cblxuICAgIHVuaURpZmYgPSB1bmlEaWZmWzBdO1xuICB9XG5cbiAgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIGlucHV0XG4gIGxldCBsaW5lcyA9IHNvdXJjZS5zcGxpdCgvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NV0vKSxcbiAgICAgIGRlbGltaXRlcnMgPSBzb3VyY2UubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgaHVua3MgPSB1bmlEaWZmLmh1bmtzLFxuXG4gICAgICBjb21wYXJlTGluZSA9IG9wdGlvbnMuY29tcGFyZUxpbmUgfHwgKChsaW5lTnVtYmVyLCBsaW5lLCBvcGVyYXRpb24sIHBhdGNoQ29udGVudCkgPT4gbGluZSA9PT0gcGF0Y2hDb250ZW50KSxcbiAgICAgIGVycm9yQ291bnQgPSAwLFxuICAgICAgZnV6ekZhY3RvciA9IG9wdGlvbnMuZnV6ekZhY3RvciB8fCAwLFxuICAgICAgbWluTGluZSA9IDAsXG4gICAgICBvZmZzZXQgPSAwLFxuXG4gICAgICByZW1vdmVFT0ZOTCxcbiAgICAgIGFkZEVPRk5MO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGh1bmsgZXhhY3RseSBmaXRzIG9uIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgZnVuY3Rpb24gaHVua0ZpdHMoaHVuaywgdG9Qb3MpIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGh1bmsubGluZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGxldCBsaW5lID0gaHVuay5saW5lc1tqXSxcbiAgICAgICAgICBvcGVyYXRpb24gPSAobGluZS5sZW5ndGggPiAwID8gbGluZVswXSA6ICcgJyksXG4gICAgICAgICAgY29udGVudCA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lLnN1YnN0cigxKSA6IGxpbmUpO1xuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnLScpIHtcbiAgICAgICAgLy8gQ29udGV4dCBzYW5pdHkgY2hlY2tcbiAgICAgICAgaWYgKCFjb21wYXJlTGluZSh0b1BvcyArIDEsIGxpbmVzW3RvUG9zXSwgb3BlcmF0aW9uLCBjb250ZW50KSkge1xuICAgICAgICAgIGVycm9yQ291bnQrKztcblxuICAgICAgICAgIGlmIChlcnJvckNvdW50ID4gZnV6ekZhY3Rvcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0b1BvcysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gU2VhcmNoIGJlc3QgZml0IG9mZnNldHMgZm9yIGVhY2ggaHVuayBiYXNlZCBvbiB0aGUgcHJldmlvdXMgb25lc1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGh1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IGh1bmsgPSBodW5rc1tpXSxcbiAgICAgICAgbWF4TGluZSA9IGxpbmVzLmxlbmd0aCAtIGh1bmsub2xkTGluZXMsXG4gICAgICAgIGxvY2FsT2Zmc2V0ID0gMCxcbiAgICAgICAgdG9Qb3MgPSBvZmZzZXQgKyBodW5rLm9sZFN0YXJ0IC0gMTtcblxuICAgIGxldCBpdGVyYXRvciA9IGRpc3RhbmNlSXRlcmF0b3IodG9Qb3MsIG1pbkxpbmUsIG1heExpbmUpO1xuXG4gICAgZm9yICg7IGxvY2FsT2Zmc2V0ICE9PSB1bmRlZmluZWQ7IGxvY2FsT2Zmc2V0ID0gaXRlcmF0b3IoKSkge1xuICAgICAgaWYgKGh1bmtGaXRzKGh1bmssIHRvUG9zICsgbG9jYWxPZmZzZXQpKSB7XG4gICAgICAgIGh1bmsub2Zmc2V0ID0gb2Zmc2V0ICs9IGxvY2FsT2Zmc2V0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobG9jYWxPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNldCBsb3dlciB0ZXh0IGxpbWl0IHRvIGVuZCBvZiB0aGUgY3VycmVudCBodW5rLCBzbyBuZXh0IG9uZXMgZG9uJ3QgdHJ5XG4gICAgLy8gdG8gZml0IG92ZXIgYWxyZWFkeSBwYXRjaGVkIHRleHRcbiAgICBtaW5MaW5lID0gaHVuay5vZmZzZXQgKyBodW5rLm9sZFN0YXJ0ICsgaHVuay5vbGRMaW5lcztcbiAgfVxuXG4gIC8vIEFwcGx5IHBhdGNoIGh1bmtzXG4gIGxldCBkaWZmT2Zmc2V0ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBodW5rcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBodW5rID0gaHVua3NbaV0sXG4gICAgICAgIHRvUG9zID0gaHVuay5vbGRTdGFydCArIGh1bmsub2Zmc2V0ICsgZGlmZk9mZnNldCAtIDE7XG4gICAgZGlmZk9mZnNldCArPSBodW5rLm5ld0xpbmVzIC0gaHVuay5vbGRMaW5lcztcblxuICAgIGlmICh0b1BvcyA8IDApIHsgLy8gQ3JlYXRpbmcgYSBuZXcgZmlsZVxuICAgICAgdG9Qb3MgPSAwO1xuICAgIH1cblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgaHVuay5saW5lcy5sZW5ndGg7IGorKykge1xuICAgICAgbGV0IGxpbmUgPSBodW5rLmxpbmVzW2pdLFxuICAgICAgICAgIG9wZXJhdGlvbiA9IChsaW5lLmxlbmd0aCA+IDAgPyBsaW5lWzBdIDogJyAnKSxcbiAgICAgICAgICBjb250ZW50ID0gKGxpbmUubGVuZ3RoID4gMCA/IGxpbmUuc3Vic3RyKDEpIDogbGluZSksXG4gICAgICAgICAgZGVsaW1pdGVyID0gaHVuay5saW5lZGVsaW1pdGVyc1tqXTtcblxuICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJyAnKSB7XG4gICAgICAgIHRvUG9zKys7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJy0nKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMSk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAxKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgIGxpbmVzLnNwbGljZSh0b1BvcywgMCwgY29udGVudCk7XG4gICAgICAgIGRlbGltaXRlcnMuc3BsaWNlKHRvUG9zLCAwLCBkZWxpbWl0ZXIpO1xuICAgICAgICB0b1BvcysrO1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICdcXFxcJykge1xuICAgICAgICBsZXQgcHJldmlvdXNPcGVyYXRpb24gPSBodW5rLmxpbmVzW2ogLSAxXSA/IGh1bmsubGluZXNbaiAtIDFdWzBdIDogbnVsbDtcbiAgICAgICAgaWYgKHByZXZpb3VzT3BlcmF0aW9uID09PSAnKycpIHtcbiAgICAgICAgICByZW1vdmVFT0ZOTCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNPcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIGFkZEVPRk5MID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBFT0ZOTCBpbnNlcnRpb24vcmVtb3ZhbFxuICBpZiAocmVtb3ZlRU9GTkwpIHtcbiAgICB3aGlsZSAoIWxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdKSB7XG4gICAgICBsaW5lcy5wb3AoKTtcbiAgICAgIGRlbGltaXRlcnMucG9wKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGFkZEVPRk5MKSB7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgZGVsaW1pdGVycy5wdXNoKCdcXG4nKTtcbiAgfVxuICBmb3IgKGxldCBfayA9IDA7IF9rIDwgbGluZXMubGVuZ3RoIC0gMTsgX2srKykge1xuICAgIGxpbmVzW19rXSA9IGxpbmVzW19rXSArIGRlbGltaXRlcnNbX2tdO1xuICB9XG4gIHJldHVybiBsaW5lcy5qb2luKCcnKTtcbn1cblxuLy8gV3JhcHBlciB0aGF0IHN1cHBvcnRzIG11bHRpcGxlIGZpbGUgcGF0Y2hlcyB2aWEgY2FsbGJhY2tzLlxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UGF0Y2hlcyh1bmlEaWZmLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgdW5pRGlmZiA9PT0gJ3N0cmluZycpIHtcbiAgICB1bmlEaWZmID0gcGFyc2VQYXRjaCh1bmlEaWZmKTtcbiAgfVxuXG4gIGxldCBjdXJyZW50SW5kZXggPSAwO1xuICBmdW5jdGlvbiBwcm9jZXNzSW5kZXgoKSB7XG4gICAgbGV0IGluZGV4ID0gdW5pRGlmZltjdXJyZW50SW5kZXgrK107XG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zLmxvYWRGaWxlKGluZGV4LCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29tcGxldGUoZXJyKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVwZGF0ZWRDb250ZW50ID0gYXBwbHlQYXRjaChkYXRhLCBpbmRleCwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLnBhdGNoZWQoaW5kZXgsIHVwZGF0ZWRDb250ZW50LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLmNvbXBsZXRlKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzSW5kZXgoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHByb2Nlc3NJbmRleCgpO1xufVxuIl19
3442  
3443  
3444  /***/ }),
3445  /* 11 */
3446  /***/ (function(module, exports) {
3447  
3448      /*istanbul ignore start*/'use strict';
3449  
3450      exports.__esModule = true;
3451      exports. /*istanbul ignore end*/parsePatch = parsePatch;
3452  	function parsePatch(uniDiff) {
3453        /*istanbul ignore start*/var /*istanbul ignore end*/options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3454  
3455        var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/),
3456            delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [],
3457            list = [],
3458            i = 0;
3459  
3460  	  function parseIndex() {
3461          var index = {};
3462          list.push(index);
3463  
3464          // Parse diff metadata
3465          while (i < diffstr.length) {
3466            var line = diffstr[i];
3467  
3468            // File header found, end parsing diff metadata
3469            if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) {
3470              break;
3471            }
3472  
3473            // Diff index
3474            var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line);
3475            if (header) {
3476              index.index = header[1];
3477            }
3478  
3479            i++;
3480          }
3481  
3482          // Parse file headers if they are defined. Unified diff requires them, but
3483          // there's no technical issues to have an isolated hunk without file header
3484          parseFileHeader(index);
3485          parseFileHeader(index);
3486  
3487          // Parse hunks
3488          index.hunks = [];
3489  
3490          while (i < diffstr.length) {
3491            var _line = diffstr[i];
3492  
3493            if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) {
3494              break;
3495            } else if (/^@@/.test(_line)) {
3496              index.hunks.push(parseHunk());
3497            } else if (_line && options.strict) {
3498              // Ignore unexpected content unless in strict mode
3499              throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));
3500            } else {
3501              i++;
3502            }
3503          }
3504        }
3505  
3506        // Parses the --- and +++ headers, if none are found, no lines
3507        // are consumed.
3508  	  function parseFileHeader(index) {
3509          var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]);
3510          if (fileHeader) {
3511            var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';
3512            var data = fileHeader[2].split('\t', 2);
3513            var fileName = data[0].replace(/\\\\/g, '\\');
3514            if (/^".*"$/.test(fileName)) {
3515              fileName = fileName.substr(1, fileName.length - 2);
3516            }
3517            index[keyPrefix + 'FileName'] = fileName;
3518            index[keyPrefix + 'Header'] = (data[1] || '').trim();
3519  
3520            i++;
3521          }
3522        }
3523  
3524        // Parses a hunk
3525        // This assumes that we are at the start of a hunk.
3526  	  function parseHunk() {
3527          var chunkHeaderIndex = i,
3528              chunkHeaderLine = diffstr[i++],
3529              chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
3530  
3531          var hunk = {
3532            oldStart: +chunkHeader[1],
3533            oldLines: +chunkHeader[2] || 1,
3534            newStart: +chunkHeader[3],
3535            newLines: +chunkHeader[4] || 1,
3536            lines: [],
3537            linedelimiters: []
3538          };
3539  
3540          var addCount = 0,
3541              removeCount = 0;
3542          for (; i < diffstr.length; i++) {
3543            // Lines starting with '---' could be mistaken for the "remove line" operation
3544            // But they could be the header for the next file. Therefore prune such cases out.
3545            if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {
3546              break;
3547            }
3548            var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];
3549  
3550            if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') {
3551              hunk.lines.push(diffstr[i]);
3552              hunk.linedelimiters.push(delimiters[i] || '\n');
3553  
3554              if (operation === '+') {
3555                addCount++;
3556              } else if (operation === '-') {
3557                removeCount++;
3558              } else if (operation === ' ') {
3559                addCount++;
3560                removeCount++;
3561              }
3562            } else {
3563              break;
3564            }
3565          }
3566  
3567          // Handle the empty block count case
3568          if (!addCount && hunk.newLines === 1) {
3569            hunk.newLines = 0;
3570          }
3571          if (!removeCount && hunk.oldLines === 1) {
3572            hunk.oldLines = 0;
3573          }
3574  
3575          // Perform optional sanity checking
3576          if (options.strict) {
3577            if (addCount !== hunk.newLines) {
3578              throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
3579            }
3580            if (removeCount !== hunk.oldLines) {
3581              throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
3582            }
3583          }
3584  
3585          return hunk;
3586        }
3587  
3588        while (i < diffstr.length) {
3589          parseIndex();
3590        }
3591  
3592        return list;
3593      }
3594      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9wYXJzZS5qcyJdLCJuYW1lcyI6WyJwYXJzZVBhdGNoIiwidW5pRGlmZiIsIm9wdGlvbnMiLCJkaWZmc3RyIiwic3BsaXQiLCJkZWxpbWl0ZXJzIiwibWF0Y2giLCJsaXN0IiwiaSIsInBhcnNlSW5kZXgiLCJpbmRleCIsInB1c2giLCJsZW5ndGgiLCJsaW5lIiwidGVzdCIsImhlYWRlciIsImV4ZWMiLCJwYXJzZUZpbGVIZWFkZXIiLCJodW5rcyIsInBhcnNlSHVuayIsInN0cmljdCIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImZpbGVIZWFkZXIiLCJrZXlQcmVmaXgiLCJkYXRhIiwiZmlsZU5hbWUiLCJyZXBsYWNlIiwic3Vic3RyIiwidHJpbSIsImNodW5rSGVhZGVySW5kZXgiLCJjaHVua0hlYWRlckxpbmUiLCJjaHVua0hlYWRlciIsImh1bmsiLCJvbGRTdGFydCIsIm9sZExpbmVzIiwibmV3U3RhcnQiLCJuZXdMaW5lcyIsImxpbmVzIiwibGluZWRlbGltaXRlcnMiLCJhZGRDb3VudCIsInJlbW92ZUNvdW50IiwiaW5kZXhPZiIsIm9wZXJhdGlvbiJdLCJtYXBwaW5ncyI6Ijs7O2dDQUFnQkEsVSxHQUFBQSxVO0FBQVQsU0FBU0EsVUFBVCxDQUFvQkMsT0FBcEIsRUFBMkM7QUFBQSxzREFBZEMsT0FBYyx1RUFBSixFQUFJOztBQUNoRCxNQUFJQyxVQUFVRixRQUFRRyxLQUFSLENBQWMscUJBQWQsQ0FBZDtBQUFBLE1BQ0lDLGFBQWFKLFFBQVFLLEtBQVIsQ0FBYyxzQkFBZCxLQUF5QyxFQUQxRDtBQUFBLE1BRUlDLE9BQU8sRUFGWDtBQUFBLE1BR0lDLElBQUksQ0FIUjs7QUFLQSxXQUFTQyxVQUFULEdBQXNCO0FBQ3BCLFFBQUlDLFFBQVEsRUFBWjtBQUNBSCxTQUFLSSxJQUFMLENBQVVELEtBQVY7O0FBRUE7QUFDQSxXQUFPRixJQUFJTCxRQUFRUyxNQUFuQixFQUEyQjtBQUN6QixVQUFJQyxPQUFPVixRQUFR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QW9CO0FBQ2xCLFVBQUlxQixhQUFhUCxLQUFLSSxRQUF0QixFQUFnQztBQUM5QixjQUFNLElBQUlqQixLQUFKLENBQVUsc0RBQXNEVSxtQkFBbUIsQ0FBekUsQ0FBVixDQUFOO0FBQ0Q7QUFDRCxVQUFJVyxnQkFBZ0JSLEtBQUtFLFFBQXpCLEVBQW1DO0FBQ2pDLGNBQU0sSUFBSWYsS0FBSixDQUFVLHdEQUF3RFUsbUJBQW1CLENBQTNFLENBQVYsQ0FBTjtBQUNEO0FBQ0Y7O0FBRUQsV0FBT0csSUFBUDtBQUNEOztBQUVELFNBQU8xQixJQUFJTCxRQUFRUyxNQUFuQixFQUEyQjtBQUN6Qkg7QUFDRDs7QUFFRCxTQUFPRixJQUFQO0FBQ0QiLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcGFyc2VQYXRjaCh1bmlEaWZmLCBvcHRpb25zID0ge30pIHtcbiAgbGV0IGRpZmZzdHIgPSB1bmlEaWZmLnNwbGl0KC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XS8pLFxuICAgICAgZGVsaW1pdGVycyA9IHVuaURpZmYubWF0Y2goL1xcclxcbnxbXFxuXFx2XFxmXFxyXFx4ODVdL2cpIHx8IFtdLFxuICAgICAgbGlzdCA9IFtdLFxuICAgICAgaSA9IDA7XG5cbiAgZnVuY3Rpb24gcGFyc2VJbmRleCgpIHtcbiAgICBsZXQgaW5kZXggPSB7fTtcbiAgICBsaXN0LnB1c2goaW5kZXgpO1xuXG4gICAgLy8gUGFyc2UgZGlmZiBtZXRhZGF0YVxuICAgIHdoaWxlIChpIDwgZGlmZnN0ci5sZW5ndGgpIHtcbiAgICAgIGxldCBsaW5lID0gZGlmZnN0cltpXTtcblxuICAgICAgLy8gRmlsZSBoZWFkZXIgZm91bmQsIGVuZCBwYXJzaW5nIGRpZmYgbWV0YWRhdGFcbiAgICAgIGlmICgvXihcXC1cXC1cXC18XFwrXFwrXFwrfEBAKVxccy8udGVzdChsaW5lKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gRGlmZiBpbmRleFxuICAgICAgbGV0IGhlYWRlciA9ICgvXig/OkluZGV4OnxkaWZmKD86IC1yIFxcdyspKylcXHMrKC4rPylcXHMqJC8pLmV4ZWMobGluZSk7XG4gICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgIGluZGV4LmluZGV4ID0gaGVhZGVyWzFdO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgZmlsZSBoZWFkZXJzIGlmIHRoZXkgYXJlIGRlZmluZWQuIFVuaWZpZWQgZGlmZiByZXF1aXJlcyB0aGVtLCBidXRcbiAgICAvLyB0aGVyZSdzIG5vIHRlY2huaWNhbCBpc3N1ZXMgdG8gaGF2ZSBhbiBpc29sYXRlZCBodW5rIHdpdGhvdXQgZmlsZSBoZWFkZXJcbiAgICBwYXJzZUZpbGVIZWFkZXIoaW5kZXgpO1xuICAgIHBhcnNlRmlsZUhlYWRlcihpbmRleCk7XG5cbiAgICAvLyBQYXJzZSBodW5rc1xuICAgIGluZGV4Lmh1bmtzID0gW107XG5cbiAgICB3aGlsZSAoaSA8IGRpZmZzdHIubGVuZ3RoKSB7XG4gICAgICBsZXQgbGluZSA9IGRpZmZzdHJbaV07XG5cbiAgICAgIGlmICgvXihJbmRleDp8ZGlmZnxcXC1cXC1cXC18XFwrXFwrXFwrKVxccy8udGVzdChsaW5lKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSBpZiAoL15AQC8udGVzdChsaW5lKSkge1xuICAgICAgICBpbmRleC5odW5rcy5wdXNoKHBhcnNlSHVuaygpKTtcbiAgICAgIH0gZWxzZSBpZiAobGluZSAmJiBvcHRpb25zLnN0cmljdCkge1xuICAgICAgICAvLyBJZ25vcmUgdW5leHBlY3RlZCBjb250ZW50IHVubGVzcyBpbiBzdHJpY3QgbW9kZVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbGluZSAnICsgKGkgKyAxKSArICcgJyArIEpTT04uc3RyaW5naWZ5KGxpbmUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQYXJzZXMgdGhlIC0tLSBhbmQgKysrIGhlYWRlcnMsIGlmIG5vbmUgYXJlIGZvdW5kLCBubyBsaW5lc1xuICAvLyBhcmUgY29uc3VtZWQuXG4gIGZ1bmN0aW9uIHBhcnNlRmlsZUhlYWRlcihpbmRleCkge1xuICAgIGNvbnN0IGZpbGVIZWFkZXIgPSAoL14oLS0tfFxcK1xcK1xcKylcXHMrKC4qKSQvKS5leGVjKGRpZmZzdHJbaV0pO1xuICAgIGlmIChmaWxlSGVhZGVyKSB7XG4gICAgICBsZXQga2V5UHJlZml4ID0gZmlsZUhlYWRlclsxXSA9PT0gJy0tLScgPyAnb2xkJyA6ICduZXcnO1xuICAgICAgY29uc3QgZGF0YSA9IGZpbGVIZWFkZXJbMl0uc3BsaXQoJ1xcdCcsIDIpO1xuICAgICAgbGV0IGZpbGVOYW1lID0gZGF0YVswXS5yZXBsYWNlKC9cXFxcXFxcXC9nLCAnXFxcXCcpO1xuICAgICAgaWYgKC9eXCIuKlwiJC8udGVzdChmaWxlTmFtZSkpIHtcbiAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zdWJzdHIoMSwgZmlsZU5hbWUubGVuZ3RoIC0gMik7XG4gICAgICB9XG4gICAgICBpbmRleFtrZXlQcmVmaXggKyAnRmlsZU5hbWUnXSA9IGZpbGVOYW1lO1xuICAgICAgaW5kZXhba2V5UHJlZml4ICsgJ0hlYWRlciddID0gKGRhdGFbMV0gfHwgJycpLnRyaW0oKTtcblxuICAgICAgaSsrO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBhcnNlcyBhIGh1bmtcbiAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBhIGh1bmsuXG4gIGZ1bmN0aW9uIHBhcnNlSHVuaygpIHtcbiAgICBsZXQgY2h1bmtIZWFkZXJJbmRleCA9IGksXG4gICAgICAgIGNodW5rSGVhZGVyTGluZSA9IGRpZmZzdHJbaSsrXSxcbiAgICAgICAgY2h1bmtIZWFkZXIgPSBjaHVua0hlYWRlckxpbmUuc3BsaXQoL0BAIC0oXFxkKykoPzosKFxcZCspKT8gXFwrKFxcZCspKD86LChcXGQrKSk/IEBALyk7XG5cbiAgICBsZXQgaHVuayA9IHtcbiAgICAgIG9sZFN0YXJ0OiArY2h1bmtIZWFkZXJbMV0sXG4gICAgICBvbGRMaW5lczogK2NodW5rSGVhZGVyWzJdIHx8IDEsXG4gICAgICBuZXdTdGFydDogK2NodW5rSGVhZGVyWzNdLFxuICAgICAgbmV3TGluZXM6ICtjaHVua0hlYWRlcls0XSB8fCAxLFxuICAgICAgbGluZXM6IFtdLFxuICAgICAgbGluZWRlbGltaXRlcnM6IFtdXG4gICAgfTtcblxuICAgIGxldCBhZGRDb3VudCA9IDAsXG4gICAgICAgIHJlbW92ZUNvdW50ID0gMDtcbiAgICBmb3IgKDsgaSA8IGRpZmZzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIExpbmVzIHN0YXJ0aW5nIHdpdGggJy0tLScgY291bGQgYmUgbWlzdGFrZW4gZm9yIHRoZSBcInJlbW92ZSBsaW5lXCIgb3BlcmF0aW9uXG4gICAgICAvLyBCdXQgdGhleSBjb3VsZCBiZSB0aGUgaGVhZGVyIGZvciB0aGUgbmV4dCBmaWxlLiBUaGVyZWZvcmUgcHJ1bmUgc3VjaCBjYXNlcyBvdXQuXG4gICAgICBpZiAoZGlmZnN0cltpXS5pbmRleE9mKCctLS0gJykgPT09IDBcbiAgICAgICAgICAgICYmIChpICsgMiA8IGRpZmZzdHIubGVuZ3RoKVxuICAgICAgICAgICAgJiYgZGlmZnN0cltpICsgMV0uaW5kZXhPZignKysrICcpID09PSAwXG4gICAgICAgICAgICAmJiBkaWZmc3RyW2kgKyAyXS5pbmRleE9mKCdAQCcpID09PSAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBsZXQgb3BlcmF0aW9uID0gKGRpZmZzdHJbaV0ubGVuZ3RoID09IDAgJiYgaSAhPSAoZGlmZnN0ci5sZW5ndGggLSAxKSkgPyAnICcgOiBkaWZmc3RyW2ldWzBdO1xuXG4gICAgICBpZiAob3BlcmF0aW9uID09PSAnKycgfHwgb3BlcmF0aW9uID09PSAnLScgfHwgb3BlcmF0aW9uID09PSAnICcgfHwgb3BlcmF0aW9uID09PSAnXFxcXCcpIHtcbiAgICAgICAgaHVuay5saW5lcy5wdXNoKGRpZmZzdHJbaV0pO1xuICAgICAgICBodW5rLmxpbmVkZWxpbWl0ZXJzLnB1c2goZGVsaW1pdGVyc1tpXSB8fCAnXFxuJyk7XG5cbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gJysnKSB7XG4gICAgICAgICAgYWRkQ291bnQrKztcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09ICctJykge1xuICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09PSAnICcpIHtcbiAgICAgICAgICBhZGRDb3VudCsrO1xuICAgICAgICAgIHJlbW92ZUNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgZW1wdHkgYmxvY2sgY291bnQgY2FzZVxuICAgIGlmICghYWRkQ291bnQgJiYgaHVuay5uZXdMaW5lcyA9PT0gMSkge1xuICAgICAgaHVuay5uZXdMaW5lcyA9IDA7XG4gICAgfVxuICAgIGlmICghcmVtb3ZlQ291bnQgJiYgaHVuay5vbGRMaW5lcyA9PT0gMSkge1xuICAgICAgaHVuay5vbGRMaW5lcyA9IDA7XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybSBvcHRpb25hbCBzYW5pdHkgY2hlY2tpbmdcbiAgICBpZiAob3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIGlmIChhZGRDb3VudCAhPT0gaHVuay5uZXdMaW5lcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FkZGVkIGxpbmUgY291bnQgZGlkIG5vdCBtYXRjaCBmb3IgaHVuayBhdCBsaW5lICcgKyAoY2h1bmtIZWFkZXJJbmRleCArIDEpKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZW1vdmVDb3VudCAhPT0gaHVuay5vbGRMaW5lcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlbW92ZWQgbGluZSBjb3VudCBkaWQgbm90IG1hdGNoIGZvciBodW5rIGF0IGxpbmUgJyArIChjaHVua0hlYWRlckluZGV4ICsgMSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBodW5rO1xuICB9XG5cbiAgd2hpbGUgKGkgPCBkaWZmc3RyLmxlbmd0aCkge1xuICAgIHBhcnNlSW5kZXgoKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuIl19
3595  
3596  
3597  /***/ }),
3598  /* 12 */
3599  /***/ (function(module, exports) {
3600  
3601      /*istanbul ignore start*/"use strict";
3602  
3603      exports.__esModule = true;
3604  
3605      exports["default"] = /*istanbul ignore end*/function (start, minLine, maxLine) {
3606        var wantForward = true,
3607            backwardExhausted = false,
3608            forwardExhausted = false,
3609            localOffset = 1;
3610  
3611        return function iterator() {
3612          if (wantForward && !forwardExhausted) {
3613            if (backwardExhausted) {
3614              localOffset++;
3615            } else {
3616              wantForward = false;
3617            }
3618  
3619            // Check if trying to fit beyond text length, and if not, check it fits
3620            // after offset location (or desired location on first iteration)
3621            if (start + localOffset <= maxLine) {
3622              return localOffset;
3623            }
3624  
3625            forwardExhausted = true;
3626          }
3627  
3628          if (!backwardExhausted) {
3629            if (!forwardExhausted) {
3630              wantForward = true;
3631            }
3632  
3633            // Check if trying to fit before text beginning, and if not, check it fits
3634            // before offset location
3635            if (minLine <= start - localOffset) {
3636              return -localOffset++;
3637            }
3638  
3639            backwardExhausted = true;
3640            return iterator();
3641          }
3642  
3643          // We tried to fit hunk before text beginning and beyond text length, then
3644          // hunk can't fit on the text. Return undefined
3645        };
3646      };
3647      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2Rpc3RhbmNlLWl0ZXJhdG9yLmpzIl0sIm5hbWVzIjpbInN0YXJ0IiwibWluTGluZSIsIm1heExpbmUiLCJ3YW50Rm9yd2FyZCIsImJhY2t3YXJkRXhoYXVzdGVkIiwiZm9yd2FyZEV4aGF1c3RlZCIsImxvY2FsT2Zmc2V0IiwiaXRlcmF0b3IiXSwibWFwcGluZ3MiOiI7Ozs7NENBR2UsVUFBU0EsS0FBVCxFQUFnQkMsT0FBaEIsRUFBeUJDLE9BQXpCLEVBQWtDO0FBQy9DLE1BQUlDLGNBQWMsSUFBbEI7QUFBQSxNQUNJQyxvQkFBb0IsS0FEeEI7QUFBQSxNQUVJQyxtQkFBbUIsS0FGdkI7QUFBQSxNQUdJQyxjQUFjLENBSGxCOztBQUtBLFNBQU8sU0FBU0MsUUFBVCxHQUFvQjtBQUN6QixRQUFJSixlQUFlLENBQUNFLGdCQUFwQixFQUFzQztBQUNwQyxVQUFJRCxpQkFBSixFQUF1QjtBQUNyQkU7QUFDRCxPQUZELE1BRU87QUFDTEgsc0JBQWMsS0FBZDtBQUNEOztBQUVEO0FBQ0E7QUFDQSxVQUFJSCxRQUFRTSxXQUFSLElBQXVCSixPQUEzQixFQUFvQztBQUNsQyxlQUFPSSxXQUFQO0FBQ0Q7O0FBRURELHlCQUFtQixJQUFuQjtBQUNEOztBQUVELFFBQUksQ0FBQ0QsaUJBQUwsRUFBd0I7QUFDdEIsVUFBSSxDQUFDQyxnQkFBTCxFQUF1QjtBQUNyQkYsc0JBQWMsSUFBZDtBQUNEOztBQUVEO0FBQ0E7QUFDQSxVQUFJRixXQUFXRCxRQUFRTSxXQUF2QixFQUFvQztBQUNsQyxlQUFPLENBQUNBLGFBQVI7QUFDRDs7QUFFREYsMEJBQW9CLElBQXBCO0FBQ0EsYUFBT0csVUFBUDtBQUNEOztBQUVEO0FBQ0E7QUFDRCxHQWxDRDtBQW1DRCxDIiwiZmlsZSI6ImRpc3RhbmNlLWl0ZXJhdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSXRlcmF0b3IgdGhhdCB0cmF2ZXJzZXMgaW4gdGhlIHJhbmdlIG9mIFttaW4sIG1heF0sIHN0ZXBwaW5nXG4vLyBieSBkaXN0YW5jZSBmcm9tIGEgZ2l2ZW4gc3RhcnQgcG9zaXRpb24uIEkuZS4gZm9yIFswLCA0XSwgd2l0aFxuLy8gc3RhcnQgb2YgMiwgdGhpcyB3aWxsIGl0ZXJhdGUgMiwgMywgMSwgNCwgMC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBtaW5MaW5lLCBtYXhMaW5lKSB7XG4gIGxldCB3YW50Rm9yd2FyZCA9IHRydWUsXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IGZhbHNlLFxuICAgICAgbG9jYWxPZmZzZXQgPSAxO1xuXG4gIHJldHVybiBmdW5jdGlvbiBpdGVyYXRvcigpIHtcbiAgICBpZiAod2FudEZvcndhcmQgJiYgIWZvcndhcmRFeGhhdXN0ZWQpIHtcbiAgICAgIGlmIChiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgICBsb2NhbE9mZnNldCsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2FudEZvcndhcmQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZXlvbmQgdGV4dCBsZW5ndGgsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGFmdGVyIG9mZnNldCBsb2NhdGlvbiAob3IgZGVzaXJlZCBsb2NhdGlvbiBvbiBmaXJzdCBpdGVyYXRpb24pXG4gICAgICBpZiAoc3RhcnQgKyBsb2NhbE9mZnNldCA8PSBtYXhMaW5lKSB7XG4gICAgICAgIHJldHVybiBsb2NhbE9mZnNldDtcbiAgICAgIH1cblxuICAgICAgZm9yd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFiYWNrd2FyZEV4aGF1c3RlZCkge1xuICAgICAgaWYgKCFmb3J3YXJkRXhoYXVzdGVkKSB7XG4gICAgICAgIHdhbnRGb3J3YXJkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdHJ5aW5nIHRvIGZpdCBiZWZvcmUgdGV4dCBiZWdpbm5pbmcsIGFuZCBpZiBub3QsIGNoZWNrIGl0IGZpdHNcbiAgICAgIC8vIGJlZm9yZSBvZmZzZXQgbG9jYXRpb25cbiAgICAgIGlmIChtaW5MaW5lIDw9IHN0YXJ0IC0gbG9jYWxPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIC1sb2NhbE9mZnNldCsrO1xuICAgICAgfVxuXG4gICAgICBiYWNrd2FyZEV4aGF1c3RlZCA9IHRydWU7XG4gICAgICByZXR1cm4gaXRlcmF0b3IoKTtcbiAgICB9XG5cbiAgICAvLyBXZSB0cmllZCB0byBmaXQgaHVuayBiZWZvcmUgdGV4dCBiZWdpbm5pbmcgYW5kIGJleW9uZCB0ZXh0IGxlbmd0aCwgdGhlblxuICAgIC8vIGh1bmsgY2FuJ3QgZml0IG9uIHRoZSB0ZXh0LiBSZXR1cm4gdW5kZWZpbmVkXG4gIH07XG59XG4iXX0=
3648  
3649  
3650  /***/ }),
3651  /* 13 */
3652  /***/ (function(module, exports, __webpack_require__) {
3653  
3654      /*istanbul ignore start*/'use strict';
3655  
3656      exports.__esModule = true;
3657      exports. /*istanbul ignore end*/calcLineCount = calcLineCount;
3658      /*istanbul ignore start*/exports. /*istanbul ignore end*/merge = merge;
3659  
3660      var /*istanbul ignore start*/_create = __webpack_require__(14) /*istanbul ignore end*/;
3661  
3662      var /*istanbul ignore start*/_parse = __webpack_require__(11) /*istanbul ignore end*/;
3663  
3664      var /*istanbul ignore start*/_array = __webpack_require__(15) /*istanbul ignore end*/;
3665  
3666      /*istanbul ignore start*/function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
3667  
3668      /*istanbul ignore end*/function calcLineCount(hunk) {
3669        /*istanbul ignore start*/var _calcOldNewLineCount = /*istanbul ignore end*/calcOldNewLineCount(hunk.lines),
3670            oldLines = _calcOldNewLineCount.oldLines,
3671            newLines = _calcOldNewLineCount.newLines;
3672  
3673        if (oldLines !== undefined) {
3674          hunk.oldLines = oldLines;
3675        } else {
3676          delete hunk.oldLines;
3677        }
3678  
3679        if (newLines !== undefined) {
3680          hunk.newLines = newLines;
3681        } else {
3682          delete hunk.newLines;
3683        }
3684      }
3685  
3686  	function merge(mine, theirs, base) {
3687        mine = loadPatch(mine, base);
3688        theirs = loadPatch(theirs, base);
3689  
3690        var ret = {};
3691  
3692        // For index we just let it pass through as it doesn't have any necessary meaning.
3693        // Leaving sanity checks on this to the API consumer that may know more about the
3694        // meaning in their own context.
3695        if (mine.index || theirs.index) {
3696          ret.index = mine.index || theirs.index;
3697        }
3698  
3699        if (mine.newFileName || theirs.newFileName) {
3700          if (!fileNameChanged(mine)) {
3701            // No header or no change in ours, use theirs (and ours if theirs does not exist)
3702            ret.oldFileName = theirs.oldFileName || mine.oldFileName;
3703            ret.newFileName = theirs.newFileName || mine.newFileName;
3704            ret.oldHeader = theirs.oldHeader || mine.oldHeader;
3705            ret.newHeader = theirs.newHeader || mine.newHeader;
3706          } else if (!fileNameChanged(theirs)) {
3707            // No header or no change in theirs, use ours
3708            ret.oldFileName = mine.oldFileName;
3709            ret.newFileName = mine.newFileName;
3710            ret.oldHeader = mine.oldHeader;
3711            ret.newHeader = mine.newHeader;
3712          } else {
3713            // Both changed... figure it out
3714            ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);
3715            ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);
3716            ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);
3717            ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);
3718          }
3719        }
3720  
3721        ret.hunks = [];
3722  
3723        var mineIndex = 0,
3724            theirsIndex = 0,
3725            mineOffset = 0,
3726            theirsOffset = 0;
3727  
3728        while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {
3729          var mineCurrent = mine.hunks[mineIndex] || { oldStart: Infinity },
3730              theirsCurrent = theirs.hunks[theirsIndex] || { oldStart: Infinity };
3731  
3732          if (hunkBefore(mineCurrent, theirsCurrent)) {
3733            // This patch does not overlap with any of the others, yay.
3734            ret.hunks.push(cloneHunk(mineCurrent, mineOffset));
3735            mineIndex++;
3736            theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;
3737          } else if (hunkBefore(theirsCurrent, mineCurrent)) {
3738            // This patch does not overlap with any of the others, yay.
3739            ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));
3740            theirsIndex++;
3741            mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;
3742          } else {
3743            // Overlap, merge as best we can
3744            var mergedHunk = {
3745              oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),
3746              oldLines: 0,
3747              newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),
3748              newLines: 0,
3749              lines: []
3750            };
3751            mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);
3752            theirsIndex++;
3753            mineIndex++;
3754  
3755            ret.hunks.push(mergedHunk);
3756          }
3757        }
3758  
3759        return ret;
3760      }
3761  
3762  	function loadPatch(param, base) {
3763        if (typeof param === 'string') {
3764          if (/^@@/m.test(param) || /^Index:/m.test(param)) {
3765            return (/*istanbul ignore start*/(0, _parse.parsePatch) /*istanbul ignore end*/(param)[0]
3766            );
3767          }
3768  
3769          if (!base) {
3770            throw new Error('Must provide a base reference or pass in a patch');
3771          }
3772          return (/*istanbul ignore start*/(0, _create.structuredPatch) /*istanbul ignore end*/(undefined, undefined, base, param)
3773          );
3774        }
3775  
3776        return param;
3777      }
3778  
3779  	function fileNameChanged(patch) {
3780        return patch.newFileName && patch.newFileName !== patch.oldFileName;
3781      }
3782  
3783  	function selectField(index, mine, theirs) {
3784        if (mine === theirs) {
3785          return mine;
3786        } else {
3787          index.conflict = true;
3788          return { mine: mine, theirs: theirs };
3789        }
3790      }
3791  
3792  	function hunkBefore(test, check) {
3793        return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;
3794      }
3795  
3796  	function cloneHunk(hunk, offset) {
3797        return {
3798          oldStart: hunk.oldStart, oldLines: hunk.oldLines,
3799          newStart: hunk.newStart + offset, newLines: hunk.newLines,
3800          lines: hunk.lines
3801        };
3802      }
3803  
3804  	function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {
3805        // This will generally result in a conflicted hunk, but there are cases where the context
3806        // is the only overlap where we can successfully merge the content here.
3807        var mine = { offset: mineOffset, lines: mineLines, index: 0 },
3808            their = { offset: theirOffset, lines: theirLines, index: 0 };
3809  
3810        // Handle any leading content
3811        insertLeading(hunk, mine, their);
3812        insertLeading(hunk, their, mine);
3813  
3814        // Now in the overlap content. Scan through and select the best changes from each.
3815        while (mine.index < mine.lines.length && their.index < their.lines.length) {
3816          var mineCurrent = mine.lines[mine.index],
3817              theirCurrent = their.lines[their.index];
3818  
3819          if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {
3820            // Both modified ...
3821            mutualChange(hunk, mine, their);
3822          } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {
3823            /*istanbul ignore start*/var _hunk$lines;
3824  
3825            /*istanbul ignore end*/ // Mine inserted
3826            /*istanbul ignore start*/(_hunk$lines = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/collectChange(mine)));
3827          } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {
3828            /*istanbul ignore start*/var _hunk$lines2;
3829  
3830            /*istanbul ignore end*/ // Theirs inserted
3831            /*istanbul ignore start*/(_hunk$lines2 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines2 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/collectChange(their)));
3832          } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {
3833            // Mine removed or edited
3834            removal(hunk, mine, their);
3835          } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {
3836            // Their removed or edited
3837            removal(hunk, their, mine, true);
3838          } else if (mineCurrent === theirCurrent) {
3839            // Context identity
3840            hunk.lines.push(mineCurrent);
3841            mine.index++;
3842            their.index++;
3843          } else {
3844            // Context mismatch
3845            conflict(hunk, collectChange(mine), collectChange(their));
3846          }
3847        }
3848  
3849        // Now push anything that may be remaining
3850        insertTrailing(hunk, mine);
3851        insertTrailing(hunk, their);
3852  
3853        calcLineCount(hunk);
3854      }
3855  
3856  	function mutualChange(hunk, mine, their) {
3857        var myChanges = collectChange(mine),
3858            theirChanges = collectChange(their);
3859  
3860        if (allRemoves(myChanges) && allRemoves(theirChanges)) {
3861          // Special case for remove changes that are supersets of one another
3862          if ( /*istanbul ignore start*/(0, _array.arrayStartsWith) /*istanbul ignore end*/(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {
3863            /*istanbul ignore start*/var _hunk$lines3;
3864  
3865            /*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines3 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines3 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/myChanges));
3866            return;
3867          } else if ( /*istanbul ignore start*/(0, _array.arrayStartsWith) /*istanbul ignore end*/(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {
3868            /*istanbul ignore start*/var _hunk$lines4;
3869  
3870            /*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines4 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines4 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/theirChanges));
3871            return;
3872          }
3873        } else if ( /*istanbul ignore start*/(0, _array.arrayEqual) /*istanbul ignore end*/(myChanges, theirChanges)) {
3874          /*istanbul ignore start*/var _hunk$lines5;
3875  
3876          /*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines5 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines5 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/myChanges));
3877          return;
3878        }
3879  
3880        conflict(hunk, myChanges, theirChanges);
3881      }
3882  
3883  	function removal(hunk, mine, their, swap) {
3884        var myChanges = collectChange(mine),
3885            theirChanges = collectContext(their, myChanges);
3886        if (theirChanges.merged) {
3887          /*istanbul ignore start*/var _hunk$lines6;
3888  
3889          /*istanbul ignore end*/ /*istanbul ignore start*/(_hunk$lines6 = /*istanbul ignore end*/hunk.lines).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_hunk$lines6 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/theirChanges.merged));
3890        } else {
3891          conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);
3892        }
3893      }
3894  
3895  	function conflict(hunk, mine, their) {
3896        hunk.conflict = true;
3897        hunk.lines.push({
3898          conflict: true,
3899          mine: mine,
3900          theirs: their
3901        });
3902      }
3903  
3904  	function insertLeading(hunk, insert, their) {
3905        while (insert.offset < their.offset && insert.index < insert.lines.length) {
3906          var line = insert.lines[insert.index++];
3907          hunk.lines.push(line);
3908          insert.offset++;
3909        }
3910      }
3911  	function insertTrailing(hunk, insert) {
3912        while (insert.index < insert.lines.length) {
3913          var line = insert.lines[insert.index++];
3914          hunk.lines.push(line);
3915        }
3916      }
3917  
3918  	function collectChange(state) {
3919        var ret = [],
3920            operation = state.lines[state.index][0];
3921        while (state.index < state.lines.length) {
3922          var line = state.lines[state.index];
3923  
3924          // Group additions that are immediately after subtractions and treat them as one "atomic" modify change.
3925          if (operation === '-' && line[0] === '+') {
3926            operation = '+';
3927          }
3928  
3929          if (operation === line[0]) {
3930            ret.push(line);
3931            state.index++;
3932          } else {
3933            break;
3934          }
3935        }
3936  
3937        return ret;
3938      }
3939  	function collectContext(state, matchChanges) {
3940        var changes = [],
3941            merged = [],
3942            matchIndex = 0,
3943            contextChanges = false,
3944            conflicted = false;
3945        while (matchIndex < matchChanges.length && state.index < state.lines.length) {
3946          var change = state.lines[state.index],
3947              match = matchChanges[matchIndex];
3948  
3949          // Once we've hit our add, then we are done
3950          if (match[0] === '+') {
3951            break;
3952          }
3953  
3954          contextChanges = contextChanges || change[0] !== ' ';
3955  
3956          merged.push(match);
3957          matchIndex++;
3958  
3959          // Consume any additions in the other block as a conflict to attempt
3960          // to pull in the remaining context after this
3961          if (change[0] === '+') {
3962            conflicted = true;
3963  
3964            while (change[0] === '+') {
3965              changes.push(change);
3966              change = state.lines[++state.index];
3967            }
3968          }
3969  
3970          if (match.substr(1) === change.substr(1)) {
3971            changes.push(change);
3972            state.index++;
3973          } else {
3974            conflicted = true;
3975          }
3976        }
3977  
3978        if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {
3979          conflicted = true;
3980        }
3981  
3982        if (conflicted) {
3983          return changes;
3984        }
3985  
3986        while (matchIndex < matchChanges.length) {
3987          merged.push(matchChanges[matchIndex++]);
3988        }
3989  
3990        return {
3991          merged: merged,
3992          changes: changes
3993        };
3994      }
3995  
3996  	function allRemoves(changes) {
3997        return changes.reduce(function (prev, change) {
3998          return prev && change[0] === '-';
3999        }, true);
4000      }
4001  	function skipRemoveSuperset(state, removeChanges, delta) {
4002        for (var i = 0; i < delta; i++) {
4003          var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);
4004          if (state.lines[state.index + i] !== ' ' + changeContent) {
4005            return false;
4006          }
4007        }
4008  
4009        state.index += delta;
4010        return true;
4011      }
4012  
4013  	function calcOldNewLineCount(lines) {
4014        var oldLines = 0;
4015        var newLines = 0;
4016  
4017        lines.forEach(function (line) {
4018          if (typeof line !== 'string') {
4019            var myCount = calcOldNewLineCount(line.mine);
4020            var theirCount = calcOldNewLineCount(line.theirs);
4021  
4022            if (oldLines !== undefined) {
4023              if (myCount.oldLines === theirCount.oldLines) {
4024                oldLines += myCount.oldLines;
4025              } else {
4026                oldLines = undefined;
4027              }
4028            }
4029  
4030            if (newLines !== undefined) {
4031              if (myCount.newLines === theirCount.newLines) {
4032                newLines += myCount.newLines;
4033              } else {
4034                newLines = undefined;
4035              }
4036            }
4037          } else {
4038            if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {
4039              newLines++;
4040            }
4041            if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {
4042              oldLines++;
4043            }
4044          }
4045        });
4046  
4047        return { oldLines: oldLines, newLines: newLines };
4048      }
4049      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9tZXJnZS5qcyJdLCJuYW1lcyI6WyJjYWxjTGluZUNvdW50IiwibWVyZ2UiLCJodW5rIiwiY2FsY09sZE5ld0xpbmVDb3VudCIsImxpbmVzIiwib2xkTGluZXMiLCJuZXdMaW5lcyIsInVuZGVmaW5lZCIsIm1pbmUiLCJ0aGVpcnMiLCJiYXNlIiwibG9hZFBhdGNoIiwicmV0IiwiaW5kZXgiLCJuZXdGaWxlTmFtZSIsImZpbGVOYW1lQ2hhbmdlZCIsIm9sZEZpbGVOYW1lIiwib2xkSGVhZGVyIiwibmV3SGVhZGVyIiwic2VsZWN0RmllbGQiLCJodW5rcyIsIm1pbmVJbmRleCIsInRoZWlyc0luZGV4IiwibWluZU9mZnNldCIsInRoZWlyc09mZnNldCIsImxlbmd0aCIsIm1pbmVDdXJyZW50Iiwib2xkU3RhcnQiLCJJbmZpbml0eSIsInRoZWlyc0N1cnJlbnQiLCJodW5rQmVmb3JlIiwicHVzaCIsImNsb25lSHVuayIsIm1lcmdlZEh1bmsiLCJNYXRoIiwibWluIiwibmV3U3RhcnQiLCJtZXJnZUxpbmVzIiwicGFyYW0iLCJ0ZXN0IiwiRXJyb3IiLCJwYXRjaCIsImNvbmZsaWN0IiwiY2hlY2siLCJvZmZzZXQiLCJtaW5lTGluZXMiLCJ0aGVpck9mZnNldCIsInRoZWlyTGluZXMiLCJ0aGVpciIsImluc2VydExlYWRpbmciLCJ0aGVpckN1cnJlbnQiLCJtdXR1YWxDaGFuZ2UiLCJjb2xsZWN0Q2hhbmdlIiwicmVtb3ZhbCIsImluc2VydFRyYWlsaW5nIiwibXlDaGFuZ2VzIiwidGhlaXJDaGFuZ2VzIiwiYWxsUmVtb3ZlcyIsInNraXBSZW1vdmVTdXBlcnNldCIsInN3YXAiLCJjb2xsZWN0Q29udGV4dCIsIm1lcmdlZCIsImluc2VydCIsImxpbmUiLCJzdGF0ZSIsIm9wZXJhdGlvbiIsIm1hdGNoQ2hhbmdlcyIsImNoYW5nZXMiLCJtYXRjaEluZGV4IiwiY29udGV4dENoYW5nZXMiLCJjb25mbGljdGVkIiwiY2hhbmdlIiwibWF0Y2giLCJzdWJzdHIiLCJyZWR1Y2UiLCJwcmV2IiwicmVtb3ZlQ2hhbmdlcyIsImRlbHRhIiwiaSIsImNoYW5nZUNvbnRlbnQiLCJmb3JFYWNoIiwibXlDb3VudCIsInRoZWlyQ291bnQiXSwibWFwcGluZ3MiOiI7OztnQ0FLZ0JBLGEsR0FBQUEsYTt5REFnQkFDLEssR0FBQUEsSzs7QUFyQmhCOztBQUNBOztBQUVBOzs7O3VCQUVPLFNBQVNELGFBQVQsQ0FBdUJFLElBQXZCLEVBQTZCO0FBQUEsNkVBQ0xDLG9CQUFvQkQsS0FBS0UsS0FBekIsQ0FESztBQUFBLE1BQzNCQyxRQUQyQix3QkFDM0JBLFFBRDJCO0FBQUEsTUFDakJDLFFBRGlCLHdCQUNqQkEsUUFEaUI7O0FBR2xDLE1BQUlELGFBQWFFLFNBQWpCLEVBQTRCO0FBQzFCTCxTQUFLRyxRQUFMLEdBQWdCQSxRQUFoQjtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU9ILEtBQUtHLFFBQVo7QUFDRDs7QUFFRCxNQUFJQyxhQUFhQyxTQUFqQixFQUE0QjtBQUMxQkwsU0FBS0ksUUFBTCxHQUFnQkEsUUFBaEI7QUFDRCxHQUZELE1BRU87QUFDTCxXQUFPSixLQUFLSSxRQUFaO0FBQ0Q7QUFDRjs7QUFFTSxTQUFTTCxLQUFULENBQWVPLElBQWYsRUFBcUJDLE1BQXJCLEVBQTZCQyxJQUE3QixFQUFtQztBQUN4Q0YsU0FBT0csVUFBVUgsSUFBVixFQUFnQkUsSUFBaEIsQ0FBUDtBQUNBRCxXQUFTRSxVQUFVRixNQUFWLEVBQWtCQyxJQUFsQixDQUFUOztBQUVBLE1BQUlFLE1BQU0sRUFBVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFJSixLQUFLSyxLQUFMLElBQWNKLE9BQU9JLEtBQXpCLEVBQWdDO0FBQzlCRCxRQUFJQyxLQUFKLEdBQVlMLEtBQUtLLEtBQUwsSUFBY0osT0FBT0ksS0FBakM7QUFDRDs7QUFFRCxNQUFJTCxLQUFLTSxXQUFMLElBQW9CTCxPQUFPSyxXQUEvQixFQUE0QztBQUMxQyxRQUFJLENBQUNDLGdCQUFnQlAsSUFBaEIsQ0FBTCxF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Q0Q7QUFDRjs7QUFFRCxVQUFJRCxhQUFhQyxTQUFqQixFQUE0QjtBQUMxQixZQUFJMEUsUUFBUTNFLFFBQVIsS0FBcUI0RSxXQUFXNUUsUUFBcEMsRUFBOEM7QUFDNUNBLHNCQUFZMkUsUUFBUTNFLFFBQXBCO0FBQ0QsU0FGRCxNQUVPO0FBQ0xBLHFCQUFXQyxTQUFYO0FBQ0Q7QUFDRjtBQUNGLEtBbkJELE1BbUJPO0FBQ0wsVUFBSUQsYUFBYUMsU0FBYixLQUEyQndELEtBQUssQ0FBTCxNQUFZLEdBQVosSUFBbUJBLEtBQUssQ0FBTCxNQUFZLEdBQTFELENBQUosRUFBb0U7QUFDbEV6RDtBQUNEO0FBQ0QsVUFBSUQsYUFBYUUsU0FBYixLQUEyQndELEtBQUssQ0FBTCxNQUFZLEdBQVosSUFBbUJBLEtBQUssQ0FBTCxNQUFZLEdBQTFELENBQUosRUFBb0U7QUFDbEUxRDtBQUNEO0FBQ0Y7QUFDRixHQTVCRDs7QUE4QkEsU0FBTyxFQUFDQSxrQkFBRCxFQUFXQyxrQkFBWCxFQUFQO0FBQ0QiLCJmaWxlIjoibWVyZ2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3N0cnVjdHVyZWRQYXRjaH0gZnJvbSAnLi9jcmVhdGUnO1xuaW1wb3J0IHtwYXJzZVBhdGNofSBmcm9tICcuL3BhcnNlJztcblxuaW1wb3J0IHthcnJheUVxdWFsLCBhcnJheVN0YXJ0c1dpdGh9IGZyb20gJy4uL3V0aWwvYXJyYXknO1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsY0xpbmVDb3VudChodW5rKSB7XG4gIGNvbnN0IHtvbGRMaW5lcywgbmV3TGluZXN9ID0gY2FsY09sZE5ld0xpbmVDb3VudChodW5rLmxpbmVzKTtcblxuICBpZiAob2xkTGluZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIGh1bmsub2xkTGluZXMgPSBvbGRMaW5lcztcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgaHVuay5vbGRMaW5lcztcbiAgfVxuXG4gIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaHVuay5uZXdMaW5lcyA9IG5ld0xpbmVzO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSBodW5rLm5ld0xpbmVzO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShtaW5lLCB0aGVpcnMsIGJhc2UpIHtcbiAgbWluZSA9IGxvYWRQYXRjaChtaW5lLCBiYXNlKTtcbiAgdGhlaXJzID0gbG9hZFBhdGNoKHRoZWlycywgYmFzZSk7XG5cbiAgbGV0IHJldCA9IHt9O1xuXG4gIC8vIEZvciBpbmRleCB3ZSBqdXN0IGxldCBpdCBwYXNzIHRocm91Z2ggYXMgaXQgZG9lc24ndCBoYXZlIGFueSBuZWNlc3NhcnkgbWVhbmluZy5cbiAgLy8gTGVhdmluZyBzYW5pdHkgY2hlY2tzIG9uIHRoaXMgdG8gdGhlIEFQSSBjb25zdW1lciB0aGF0IG1heSBrbm93IG1vcmUgYWJvdXQgdGhlXG4gIC8vIG1lYW5pbmcgaW4gdGhlaXIgb3duIGNvbnRleHQuXG4gIGlmIChtaW5lLmluZGV4IHx8IHRoZWlycy5pbmRleCkge1xuICAgIHJldC5pbmRleCA9IG1pbmUuaW5kZXggfHwgdGhlaXJzLmluZGV4O1xuICB9XG5cbiAgaWYgKG1pbmUubmV3RmlsZU5hbWUgfHwgdGhlaXJzLm5ld0ZpbGVOYW1lKSB7XG4gICAgaWYgKCFmaWxlTmFtZUNoYW5nZWQobWluZSkpIHtcbiAgICAgIC8vIE5vIGhlYWRlciBvciBubyBjaGFuZ2UgaW4gb3VycywgdXNlIHRoZWlycyAoYW5kIG91cnMgaWYgdGhlaXJzIGRvZXMgbm90IGV4aXN0KVxuICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gdGhlaXJzLm9sZEZpbGVOYW1lIHx8IG1pbmUub2xkRmlsZU5hbWU7XG4gICAgICByZXQubmV3RmlsZU5hbWUgPSB0aGVpcnMubmV3RmlsZU5hbWUgfHwgbWluZS5uZXdGaWxlTmFtZTtcbiAgICAgIHJldC5vbGRIZWFkZXIgPSB0aGVpcnMub2xkSGVhZGVyIHx8IG1pbmUub2xkSGVhZGVyO1xuICAgICAgcmV0Lm5ld0hlYWRlciA9IHRoZWlycy5uZXdIZWFkZXIgfHwgbWluZS5uZXdIZWFkZXI7XG4gICAgfSBlbHNlIGlmICghZmlsZU5hbWVDaGFuZ2VkKHRoZWlycykpIHtcbiAgICAgIC8vIE5vIGhlYWRlciBvciBubyBjaGFuZ2UgaW4gdGhlaXJzLCB1c2Ugb3Vyc1xuICAgICAgcmV0Lm9sZEZpbGVOYW1lID0gbWluZS5vbGRGaWxlTmFtZTtcbiAgICAgIHJldC5uZXdGaWxlTmFtZSA9IG1pbmUubmV3RmlsZU5hbWU7XG4gICAgICByZXQub2xkSGVhZGVyID0gbWluZS5vbGRIZWFkZXI7XG4gICAgICByZXQubmV3SGVhZGVyID0gbWluZS5uZXdIZWFkZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEJvdGggY2hhbmdlZC4uLiBmaWd1cmUgaXQgb3V0XG4gICAgICByZXQub2xkRmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUub2xkRmlsZU5hbWUsIHRoZWlycy5vbGRGaWxlTmFtZSk7XG4gICAgICByZXQubmV3RmlsZU5hbWUgPSBzZWxlY3RGaWVsZChyZXQsIG1pbmUubmV3RmlsZU5hbWUsIHRoZWlycy5uZXdGaWxlTmFtZSk7XG4gICAgICByZXQub2xkSGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm9sZEhlYWRlciwgdGhlaXJzLm9sZEhlYWRlcik7XG4gICAgICByZXQubmV3SGVhZGVyID0gc2VsZWN0RmllbGQocmV0LCBtaW5lLm5ld0hlYWRlciwgdGhlaXJzLm5ld0hlYWRlcik7XG4gICAgfVxuICB9XG5cbiAgcmV0Lmh1bmtzID0gW107XG5cbiAgbGV0IG1pbmVJbmRleCA9IDAsXG4gICAgICB0aGVpcnNJbmRleCA9IDAsXG4gICAgICBtaW5lT2Zmc2V0ID0gMCxcbiAgICAgIHRoZWlyc09mZnNldCA9IDA7XG5cbiAgd2hpbGUgKG1pbmVJbmRleCA8IG1pbmUuaHVua3MubGVuZ3RoIHx8IHRoZWlyc0luZGV4IDwgdGhlaXJzLmh1bmtzLmxlbmd0aCkge1xuICAgIGxldCBtaW5lQ3VycmVudCA9IG1pbmUuaHVua3NbbWluZUluZGV4XSB8fCB7b2xkU3RhcnQ6IEluZmluaXR5fSxcbiAgICAgICAgdGhlaXJzQ3VycmVudCA9IHRoZWlycy5odW5rc1t0aGVpcnNJbmRleF0gfHwge29sZFN0YXJ0OiBJbmZpbml0eX07XG5cbiAgICBpZiAoaHVua0JlZm9yZShtaW5lQ3VycmVudCwgdGhlaXJzQ3VycmVudCkpIHtcbiAgICAgIC8vIFRoaXMgcGF0Y2ggZG9lcyBub3Qgb3ZlcmxhcCB3aXRoIGFueSBvZiB0aGUgb3RoZXJzLCB5YXkuXG4gICAgICByZXQuaHVua3MucHVzaChjbG9uZUh1bmsobWluZUN1cnJlbnQsIG1pbmVPZmZzZXQpKTtcbiAgICAgIG1pbmVJbmRleCsrO1xuICAgICAgdGhlaXJzT2Zmc2V0ICs9IG1pbmVDdXJyZW50Lm5ld0xpbmVzIC0gbWluZUN1cnJlbnQub2xkTGluZXM7XG4gICAgfSBlbHNlIGlmIChodW5rQmVmb3JlKHRoZWlyc0N1cnJlbnQsIG1pbmVDdXJyZW50KSkge1xuICAgICAgLy8gVGhpcyBwYXRjaCBkb2VzIG5vdCBvdmVybGFwIHdpdGggYW55IG9mIHRoZSBvdGhlcnMsIHlheS5cbiAgICAgIHJldC5odW5rcy5wdXNoKGNsb25lSHVuayh0aGVpcnNDdXJyZW50LCB0aGVpcnNPZmZzZXQpKTtcbiAgICAgIHRoZWlyc0luZGV4Kys7XG4gICAgICBtaW5lT2Zmc2V0ICs9IHRoZWlyc0N1cnJlbnQubmV3TGluZXMgLSB0aGVpcnNDdXJyZW50Lm9sZExpbmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdmVybGFwLCBtZXJnZSBhcyBiZXN0IHdlIGNhblxuICAgICAgbGV0IG1lcmdlZEh1bmsgPSB7XG4gICAgICAgIG9sZFN0YXJ0OiBNYXRoLm1pbihtaW5lQ3VycmVudC5vbGRTdGFydCwgdGhlaXJzQ3VycmVudC5vbGRTdGFydCksXG4gICAgICAgIG9sZExpbmVzOiAwLFxuICAgICAgICBuZXdTdGFydDogTWF0aC5taW4obWluZUN1cnJlbnQubmV3U3RhcnQgKyBtaW5lT2Zmc2V0LCB0aGVpcnNDdXJyZW50Lm9sZFN0YXJ0ICsgdGhlaXJzT2Zmc2V0KSxcbiAgICAgICAgbmV3TGluZXM6IDAsXG4gICAgICAgIGxpbmVzOiBbXVxuICAgICAgfTtcbiAgICAgIG1lcmdlTGluZXMobWVyZ2VkSHVuaywgbWluZUN1cnJlbnQub2xkU3RhcnQsIG1pbmVDdXJyZW50LmxpbmVzLCB0aGVpcnNDdXJyZW50Lm9sZFN0YXJ0LCB0aGVpcnNDdXJyZW50LmxpbmVzKTtcbiAgICAgIHRoZWlyc0luZGV4Kys7XG4gICAgICBtaW5lSW5kZXgrKztcblxuICAgICAgcmV0Lmh1bmtzLnB1c2gobWVyZ2VkSHVuayk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gbG9hZFBhdGNoKHBhcmFtLCBiYXNlKSB7XG4gIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKC9eQEAvbS50ZXN0KHBhcmFtKSB8fCAoL15JbmRleDovbS50ZXN0KHBhcmFtKSkpIHtcbiAgICAgIHJldHVybiBwYXJzZVBhdGNoKHBhcmFtKVswXTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGEgYmFzZSByZWZlcmVuY2Ugb3IgcGFzcyBpbiBhIHBhdGNoJyk7XG4gICAgfVxuICAgIHJldHVybiBzdHJ1Y3R1cmVkUGF0Y2godW5kZWZpbmVkLCB1bmRlZmluZWQsIGJhc2UsIHBhcmFtKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbTtcbn1cblxuZnVuY3Rpb24gZmlsZU5hbWVDaGFuZ2VkKHBhdGNoKSB7XG4gIHJldHVybiBwYXRjaC5uZXdGaWxlTmFtZSAmJiBwYXRjaC5uZXdGaWxlTmFtZSAhPT0gcGF0Y2gub2xkRmlsZU5hbWU7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZpZWxkKGluZGV4LCBtaW5lLCB0aGVpcnMpIHtcbiAgaWYgKG1pbmUgPT09IHRoZWlycykge1xuICAgIHJldHVybiBtaW5lO1xuICB9IGVsc2Uge1xuICAgIGluZGV4LmNvbmZsaWN0ID0gdHJ1ZTtcbiAgICByZXR1cm4ge21pbmUsIHRoZWlyc307XG4gIH1cbn1cblxuZnVuY3Rpb24gaHVua0JlZm9yZSh0ZXN0LCBjaGVjaykge1xuICByZXR1cm4gdGVzdC5vbGRTdGFydCA8IGNoZWNrLm9sZFN0YXJ0XG4gICAgJiYgKHRlc3Qub2xkU3RhcnQgKyB0ZXN0Lm9sZExpbmVzKSA8IGNoZWNrLm9sZFN0YXJ0O1xufVxuXG5mdW5jdGlvbiBjbG9uZUh1bmsoaHVuaywgb2Zmc2V0KSB7XG4gIHJldHVybiB7XG4gICAgb2xkU3RhcnQ6IGh1bmsub2xkU3RhcnQsIG9sZExpbmVzOiBodW5rLm9sZExpbmVzLFxuICAgIG5ld1N0YXJ0OiBodW5rLm5ld1N0YXJ0ICsgb2Zmc2V0LCBuZXdMaW5lczogaHVuay5uZXdMaW5lcyxcbiAgICBsaW5lczogaHVuay5saW5lc1xuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZUxpbmVzKGh1bmssIG1pbmVPZmZzZXQsIG1pbmVMaW5lcywgdGhlaXJPZmZzZXQsIHRoZWlyTGluZXMpIHtcbiAgLy8gVGhpcyB3aWxsIGdlbmVyYWxseSByZXN1bHQgaW4gYSBjb25mbGljdGVkIGh1bmssIGJ1dCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIGNvbnRleHRcbiAgLy8gaXMgdGhlIG9ubHkgb3ZlcmxhcCB3aGVyZSB3ZSBjYW4gc3VjY2Vzc2Z1bGx5IG1lcmdlIHRoZSBjb250ZW50IGhlcmUuXG4gIGxldCBtaW5lID0ge29mZnNldDogbWluZU9mZnNldCwgbGluZXM6IG1pbmVMaW5lcywgaW5kZXg6IDB9LFxuICAgICAgdGhlaXIgPSB7b2Zmc2V0OiB0aGVpck9mZnNldCwgbGluZXM6IHRoZWlyTGluZXMsIGluZGV4OiAwfTtcblxuICAvLyBIYW5kbGUgYW55IGxlYWRpbmcgY29udGVudFxuICBpbnNlcnRMZWFkaW5nKGh1bmssIG1pbmUsIHRoZWlyKTtcbiAgaW5zZXJ0TGVhZGluZyhodW5rLCB0aGVpciwgbWluZSk7XG5cbiAgLy8gTm93IGluIHRoZSBvdmVybGFwIGNvbnRlbnQuIFNjYW4gdGhyb3VnaCBhbmQgc2VsZWN0IHRoZSBiZXN0IGNoYW5nZXMgZnJvbSBlYWNoLlxuICB3aGlsZSAobWluZS5pbmRleCA8IG1pbmUubGluZXMubGVuZ3RoICYmIHRoZWlyLmluZGV4IDwgdGhlaXIubGluZXMubGVuZ3RoKSB7XG4gICAgbGV0IG1pbmVDdXJyZW50ID0gbWluZS5saW5lc1ttaW5lLmluZGV4XSxcbiAgICAgICAgdGhlaXJDdXJyZW50ID0gdGhlaXIubGluZXNbdGhlaXIuaW5kZXhdO1xuXG4gICAgaWYgKChtaW5lQ3VycmVudFswXSA9PT0gJy0nIHx8IG1pbmVDdXJyZW50WzBdID09PSAnKycpXG4gICAgICAgICYmICh0aGVpckN1cnJlbnRbMF0gPT09ICctJyB8fCB0aGVpckN1cnJlbnRbMF0gPT09ICcrJykpIHtcbiAgICAgIC8vIEJvdGggbW9kaWZpZWQgLi4uXG4gICAgICBtdXR1YWxDaGFuZ2UoaHVuaywgbWluZSwgdGhlaXIpO1xuICAgIH0gZWxzZSBpZiAobWluZUN1cnJlbnRbMF0gPT09ICcrJyAmJiB0aGVpckN1cnJlbnRbMF0gPT09ICcgJykge1xuICAgICAgLy8gTWluZSBpbnNlcnRlZFxuICAgICAgaHVuay5saW5lcy5wdXNoKC4uLiBjb2xsZWN0Q2hhbmdlKG1pbmUpKTtcbiAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJysnICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgIC8vIFRoZWlycyBpbnNlcnRlZFxuICAgICAgaHVuay5saW5lcy5wdXNoKC4uLiBjb2xsZWN0Q2hhbmdlKHRoZWlyKSk7XG4gICAgfSBlbHNlIGlmIChtaW5lQ3VycmVudFswXSA9PT0gJy0nICYmIHRoZWlyQ3VycmVudFswXSA9PT0gJyAnKSB7XG4gICAgICAvLyBNaW5lIHJlbW92ZWQgb3IgZWRpdGVkXG4gICAgICByZW1vdmFsKGh1bmssIG1pbmUsIHRoZWlyKTtcbiAgICB9IGVsc2UgaWYgKHRoZWlyQ3VycmVudFswXSA9PT0gJy0nICYmIG1pbmVDdXJyZW50WzBdID09PSAnICcpIHtcbiAgICAgIC8vIFRoZWlyIHJlbW92ZWQgb3IgZWRpdGVkXG4gICAgICByZW1vdmFsKGh1bmssIHRoZWlyLCBtaW5lLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKG1pbmVDdXJyZW50ID09PSB0aGVpckN1cnJlbnQpIHtcbiAgICAgIC8vIENvbnRleHQgaWRlbnRpdHlcbiAgICAgIGh1bmsubGluZXMucHVzaChtaW5lQ3VycmVudCk7XG4gICAgICBtaW5lLmluZGV4Kys7XG4gICAgICB0aGVpci5pbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb250ZXh0IG1pc21hdGNoXG4gICAgICBjb25mbGljdChodW5rLCBjb2xsZWN0Q2hhbmdlKG1pbmUpLCBjb2xsZWN0Q2hhbmdlKHRoZWlyKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTm93IHB1c2ggYW55dGhpbmcgdGhhdCBtYXkgYmUgcmVtYWluaW5nXG4gIGluc2VydFRyYWlsaW5nKGh1bmssIG1pbmUpO1xuICBpbnNlcnRUcmFpbGluZyhodW5rLCB0aGVpcik7XG5cbiAgY2FsY0xpbmVDb3VudChodW5rKTtcbn1cblxuZnVuY3Rpb24gbXV0dWFsQ2hhbmdlKGh1bmssIG1pbmUsIHRoZWlyKSB7XG4gIGxldCBteUNoYW5nZXMgPSBjb2xsZWN0Q2hhbmdlKG1pbmUpLFxuICAgICAgdGhlaXJDaGFuZ2VzID0gY29sbGVjdENoYW5nZSh0aGVpcik7XG5cbiAgaWYgKGFsbFJlbW92ZXMobXlDaGFuZ2VzKSAmJiBhbGxSZW1vdmVzKHRoZWlyQ2hhbmdlcykpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHJlbW92ZSBjaGFuZ2VzIHRoYXQgYXJlIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlclxuICAgIGlmIChhcnJheVN0YXJ0c1dpdGgobXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpXG4gICAgICAgICYmIHNraXBSZW1vdmVTdXBlcnNldCh0aGVpciwgbXlDaGFuZ2VzLCBteUNoYW5nZXMubGVuZ3RoIC0gdGhlaXJDaGFuZ2VzLmxlbmd0aCkpIHtcbiAgICAgIGh1bmsubGluZXMucHVzaCguLi4gbXlDaGFuZ2VzKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGFycmF5U3RhcnRzV2l0aCh0aGVpckNoYW5nZXMsIG15Q2hhbmdlcylcbiAgICAgICAgJiYgc2tpcFJlbW92ZVN1cGVyc2V0KG1pbmUsIHRoZWlyQ2hhbmdlcywgdGhlaXJDaGFuZ2VzLmxlbmd0aCAtIG15Q2hhbmdlcy5sZW5ndGgpKSB7XG4gICAgICBodW5rLmxpbmVzLnB1c2goLi4uIHRoZWlyQ2hhbmdlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IGVsc2UgaWYgKGFycmF5RXF1YWwobXlDaGFuZ2VzLCB0aGVpckNoYW5nZXMpKSB7XG4gICAgaHVuay5saW5lcy5wdXNoKC4uLiBteUNoYW5nZXMpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbmZsaWN0KGh1bmssIG15Q2hhbmdlcywgdGhlaXJDaGFuZ2VzKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZhbChodW5rLCBtaW5lLCB0aGVpciwgc3dhcCkge1xuICBsZXQgbXlDaGFuZ2VzID0gY29sbGVjdENoYW5nZShtaW5lKSxcbiAgICAgIHRoZWlyQ2hhbmdlcyA9IGNvbGxlY3RDb250ZXh0KHRoZWlyLCBteUNoYW5nZXMpO1xuICBpZiAodGhlaXJDaGFuZ2VzLm1lcmdlZCkge1xuICAgIGh1bmsubGluZXMucHVzaCguLi4gdGhlaXJDaGFuZ2VzLm1lcmdlZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmxpY3QoaHVuaywgc3dhcCA/IHRoZWlyQ2hhbmdlcyA6IG15Q2hhbmdlcywgc3dhcCA/IG15Q2hhbmdlcyA6IHRoZWlyQ2hhbmdlcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uZmxpY3QoaHVuaywgbWluZSwgdGhlaXIpIHtcbiAgaHVuay5jb25mbGljdCA9IHRydWU7XG4gIGh1bmsubGluZXMucHVzaCh7XG4gICAgY29uZmxpY3Q6IHRydWUsXG4gICAgbWluZTogbWluZSxcbiAgICB0aGVpcnM6IHRoZWlyXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRMZWFkaW5nKGh1bmssIGluc2VydCwgdGhlaXIpIHtcbiAgd2hpbGUgKGluc2VydC5vZmZzZXQgPCB0aGVpci5vZmZzZXQgJiYgaW5zZXJ0LmluZGV4IDwgaW5zZXJ0LmxpbmVzLmxlbmd0aCkge1xuICAgIGxldCBsaW5lID0gaW5zZXJ0LmxpbmVzW2luc2VydC5pbmRleCsrXTtcbiAgICBodW5rLmxpbmVzLnB1c2gobGluZSk7XG4gICAgaW5zZXJ0Lm9mZnNldCsrO1xuICB9XG59XG5mdW5jdGlvbiBpbnNlcnRUcmFpbGluZyhodW5rLCBpbnNlcnQpIHtcbiAgd2hpbGUgKGluc2VydC5pbmRleCA8IGluc2VydC5saW5lcy5sZW5ndGgpIHtcbiAgICBsZXQgbGluZSA9IGluc2VydC5saW5lc1tpbnNlcnQuaW5kZXgrK107XG4gICAgaHVuay5saW5lcy5wdXNoKGxpbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RDaGFuZ2Uoc3RhdGUpIHtcbiAgbGV0IHJldCA9IFtdLFxuICAgICAgb3BlcmF0aW9uID0gc3RhdGUubGluZXNbc3RhdGUuaW5kZXhdWzBdO1xuICB3aGlsZSAoc3RhdGUuaW5kZXggPCBzdGF0ZS5saW5lcy5sZW5ndGgpIHtcbiAgICBsZXQgbGluZSA9IHN0YXRlLmxpbmVzW3N0YXRlLmluZGV4XTtcblxuICAgIC8vIEdyb3VwIGFkZGl0aW9ucyB0aGF0IGFyZSBpbW1lZGlhdGVseSBhZnRlciBzdWJ0cmFjdGlvbnMgYW5kIHRyZWF0IHRoZW0gYXMgb25lIFwiYXRvbWljXCIgbW9kaWZ5IGNoYW5nZS5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnLScgJiYgbGluZVswXSA9PT0gJysnKSB7XG4gICAgICBvcGVyYXRpb24gPSAnKyc7XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gbGluZVswXSkge1xuICAgICAgcmV0LnB1c2gobGluZSk7XG4gICAgICBzdGF0ZS5pbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuZnVuY3Rpb24gY29sbGVjdENvbnRleHQoc3RhdGUsIG1hdGNoQ2hhbmdlcykge1xuICBsZXQgY2hhbmdlcyA9IFtdLFxuICAgICAgbWVyZ2VkID0gW10sXG4gICAgICBtYXRjaEluZGV4ID0gMCxcbiAgICAgIGNvbnRleHRDaGFuZ2VzID0gZmFsc2UsXG4gICAgICBjb25mbGljdGVkID0gZmFsc2U7XG4gIHdoaWxlIChtYXRjaEluZGV4IDwgbWF0Y2hDaGFuZ2VzLmxlbmd0aFxuICAgICAgICAmJiBzdGF0ZS5pbmRleCA8IHN0YXRlLmxpbmVzLmxlbmd0aCkge1xuICAgIGxldCBjaGFuZ2UgPSBzdGF0ZS5saW5lc1tzdGF0ZS5pbmRleF0sXG4gICAgICAgIG1hdGNoID0gbWF0Y2hDaGFuZ2VzW21hdGNoSW5kZXhdO1xuXG4gICAgLy8gT25jZSB3ZSd2ZSBoaXQgb3VyIGFkZCwgdGhlbiB3ZSBhcmUgZG9uZVxuICAgIGlmIChtYXRjaFswXSA9PT0gJysnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb250ZXh0Q2hhbmdlcyA9IGNvbnRleHRDaGFuZ2VzIHx8IGNoYW5nZVswXSAhPT0gJyAnO1xuXG4gICAgbWVyZ2VkLnB1c2gobWF0Y2gpO1xuICAgIG1hdGNoSW5kZXgrKztcblxuICAgIC8vIENvbnN1bWUgYW55IGFkZGl0aW9ucyBpbiB0aGUgb3RoZXIgYmxvY2sgYXMgYSBjb25mbGljdCB0byBhdHRlbXB0XG4gICAgLy8gdG8gcHVsbCBpbiB0aGUgcmVtYWluaW5nIGNvbnRleHQgYWZ0ZXIgdGhpc1xuICAgIGlmIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgY29uZmxpY3RlZCA9IHRydWU7XG5cbiAgICAgIHdoaWxlIChjaGFuZ2VbMF0gPT09ICcrJykge1xuICAgICAgICBjaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICAgICAgY2hhbmdlID0gc3RhdGUubGluZXNbKytzdGF0ZS5pbmRleF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoLnN1YnN0cigxKSA9PT0gY2hhbmdlLnN1YnN0cigxKSkge1xuICAgICAgY2hhbmdlcy5wdXNoKGNoYW5nZSk7XG4gICAgICBzdGF0ZS5pbmRleCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25mbGljdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoKG1hdGNoQ2hhbmdlc1ttYXRjaEluZGV4XSB8fCAnJylbMF0gPT09ICcrJ1xuICAgICAgJiYgY29udGV4dENoYW5nZXMpIHtcbiAgICBjb25mbGljdGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChjb25mbGljdGVkKSB7XG4gICAgcmV0dXJuIGNoYW5nZXM7XG4gIH1cblxuICB3aGlsZSAobWF0Y2hJbmRleCA8IG1hdGNoQ2hhbmdlcy5sZW5ndGgpIHtcbiAgICBtZXJnZWQucHVzaChtYXRjaENoYW5nZXNbbWF0Y2hJbmRleCsrXSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1lcmdlZCxcbiAgICBjaGFuZ2VzXG4gIH07XG59XG5cbmZ1bmN0aW9uIGFsbFJlbW92ZXMoY2hhbmdlcykge1xuICByZXR1cm4gY2hhbmdlcy5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY2hhbmdlKSB7XG4gICAgcmV0dXJuIHByZXYgJiYgY2hhbmdlWzBdID09PSAnLSc7XG4gIH0sIHRydWUpO1xufVxuZnVuY3Rpb24gc2tpcFJlbW92ZVN1cGVyc2V0KHN0YXRlLCByZW1vdmVDaGFuZ2VzLCBkZWx0YSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHtcbiAgICBsZXQgY2hhbmdlQ29udGVudCA9IHJlbW92ZUNoYW5nZXNbcmVtb3ZlQ2hhbmdlcy5sZW5ndGggLSBkZWx0YSArIGldLnN1YnN0cigxKTtcbiAgICBpZiAoc3RhdGUubGluZXNbc3RhdGUuaW5kZXggKyBpXSAhPT0gJyAnICsgY2hhbmdlQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLmluZGV4ICs9IGRlbHRhO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lcykge1xuICBsZXQgb2xkTGluZXMgPSAwO1xuICBsZXQgbmV3TGluZXMgPSAwO1xuXG4gIGxpbmVzLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgIGlmICh0eXBlb2YgbGluZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBteUNvdW50ID0gY2FsY09sZE5ld0xpbmVDb3VudChsaW5lLm1pbmUpO1xuICAgICAgbGV0IHRoZWlyQ291bnQgPSBjYWxjT2xkTmV3TGluZUNvdW50KGxpbmUudGhlaXJzKTtcblxuICAgICAgaWYgKG9sZExpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG15Q291bnQub2xkTGluZXMgPT09IHRoZWlyQ291bnQub2xkTGluZXMpIHtcbiAgICAgICAgICBvbGRMaW5lcyArPSBteUNvdW50Lm9sZExpbmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9sZExpbmVzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXdMaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChteUNvdW50Lm5ld0xpbmVzID09PSB0aGVpckNvdW50Lm5ld0xpbmVzKSB7XG4gICAgICAgICAgbmV3TGluZXMgKz0gbXlDb3VudC5uZXdMaW5lcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMaW5lcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobmV3TGluZXMgIT09IHVuZGVmaW5lZCAmJiAobGluZVswXSA9PT0gJysnIHx8IGxpbmVbMF0gPT09ICcgJykpIHtcbiAgICAgICAgbmV3TGluZXMrKztcbiAgICAgIH1cbiAgICAgIGlmIChvbGRMaW5lcyAhPT0gdW5kZWZpbmVkICYmIChsaW5lWzBdID09PSAnLScgfHwgbGluZVswXSA9PT0gJyAnKSkge1xuICAgICAgICBvbGRMaW5lcysrO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtvbGRMaW5lcywgbmV3TGluZXN9O1xufVxuIl19
4050  
4051  
4052  /***/ }),
4053  /* 14 */
4054  /***/ (function(module, exports, __webpack_require__) {
4055  
4056      /*istanbul ignore start*/'use strict';
4057  
4058      exports.__esModule = true;
4059      exports. /*istanbul ignore end*/structuredPatch = structuredPatch;
4060      /*istanbul ignore start*/exports. /*istanbul ignore end*/createTwoFilesPatch = createTwoFilesPatch;
4061      /*istanbul ignore start*/exports. /*istanbul ignore end*/createPatch = createPatch;
4062  
4063      var /*istanbul ignore start*/_line = __webpack_require__(5) /*istanbul ignore end*/;
4064  
4065      /*istanbul ignore start*/function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
4066  
4067      /*istanbul ignore end*/function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
4068        if (!options) {
4069          options = {};
4070        }
4071        if (typeof options.context === 'undefined') {
4072          options.context = 4;
4073        }
4074  
4075        var diff = /*istanbul ignore start*/(0, _line.diffLines) /*istanbul ignore end*/(oldStr, newStr, options);
4076        diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier
4077  
4078  	  function contextLines(lines) {
4079          return lines.map(function (entry) {
4080            return ' ' + entry;
4081          });
4082        }
4083  
4084        var hunks = [];
4085        var oldRangeStart = 0,
4086            newRangeStart = 0,
4087            curRange = [],
4088            oldLine = 1,
4089            newLine = 1;
4090  
4091        /*istanbul ignore start*/var _loop = function _loop( /*istanbul ignore end*/i) {
4092          var current = diff[i],
4093              lines = current.lines || current.value.replace(/\n$/, '').split('\n');
4094          current.lines = lines;
4095  
4096          if (current.added || current.removed) {
4097            /*istanbul ignore start*/var _curRange;
4098  
4099            /*istanbul ignore end*/ // If we have previous context, start with that
4100            if (!oldRangeStart) {
4101              var prev = diff[i - 1];
4102              oldRangeStart = oldLine;
4103              newRangeStart = newLine;
4104  
4105              if (prev) {
4106                curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];
4107                oldRangeStart -= curRange.length;
4108                newRangeStart -= curRange.length;
4109              }
4110            }
4111  
4112            // Output our changes
4113            /*istanbul ignore start*/(_curRange = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/lines.map(function (entry) {
4114              return (current.added ? '+' : '-') + entry;
4115            })));
4116  
4117            // Track the updated file position
4118            if (current.added) {
4119              newLine += lines.length;
4120            } else {
4121              oldLine += lines.length;
4122            }
4123          } else {
4124            // Identical context lines. Track line changes
4125            if (oldRangeStart) {
4126              // Close out any changes that have been output (or join overlapping)
4127              if (lines.length <= options.context * 2 && i < diff.length - 2) {
4128                /*istanbul ignore start*/var _curRange2;
4129  
4130                /*istanbul ignore end*/ // Overlapping
4131                /*istanbul ignore start*/(_curRange2 = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange2 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/contextLines(lines)));
4132              } else {
4133                /*istanbul ignore start*/var _curRange3;
4134  
4135                /*istanbul ignore end*/ // end the range and output
4136                var contextSize = Math.min(lines.length, options.context);
4137                /*istanbul ignore start*/(_curRange3 = /*istanbul ignore end*/curRange).push. /*istanbul ignore start*/apply /*istanbul ignore end*/( /*istanbul ignore start*/_curRange3 /*istanbul ignore end*/, /*istanbul ignore start*/_toConsumableArray( /*istanbul ignore end*/contextLines(lines.slice(0, contextSize))));
4138  
4139                var hunk = {
4140                  oldStart: oldRangeStart,
4141                  oldLines: oldLine - oldRangeStart + contextSize,
4142                  newStart: newRangeStart,
4143                  newLines: newLine - newRangeStart + contextSize,
4144                  lines: curRange
4145                };
4146                if (i >= diff.length - 2 && lines.length <= options.context) {
4147                  // EOF is inside this hunk
4148                  var oldEOFNewline = /\n$/.test(oldStr);
4149                  var newEOFNewline = /\n$/.test(newStr);
4150                  if (lines.length == 0 && !oldEOFNewline) {
4151                    // special case: old has no eol and no trailing context; no-nl can end up before adds
4152                    curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file');
4153                  } else if (!oldEOFNewline || !newEOFNewline) {
4154                    curRange.push('\\ No newline at end of file');
4155                  }
4156                }
4157                hunks.push(hunk);
4158  
4159                oldRangeStart = 0;
4160                newRangeStart = 0;
4161                curRange = [];
4162              }
4163            }
4164            oldLine += lines.length;
4165            newLine += lines.length;
4166          }
4167        };
4168  
4169        for (var i = 0; i < diff.length; i++) {
4170          /*istanbul ignore start*/_loop( /*istanbul ignore end*/i);
4171        }
4172  
4173        return {
4174          oldFileName: oldFileName, newFileName: newFileName,
4175          oldHeader: oldHeader, newHeader: newHeader,
4176          hunks: hunks
4177        };
4178      }
4179  
4180  	function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
4181        var diff = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);
4182  
4183        var ret = [];
4184        if (oldFileName == newFileName) {
4185          ret.push('Index: ' + oldFileName);
4186        }
4187        ret.push('===================================================================');
4188        ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader));
4189        ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader));
4190  
4191        for (var i = 0; i < diff.hunks.length; i++) {
4192          var hunk = diff.hunks[i];
4193          ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');
4194          ret.push.apply(ret, hunk.lines);
4195        }
4196  
4197        return ret.join('\n') + '\n';
4198      }
4199  
4200  	function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {
4201        return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);
4202      }
4203      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOlsic3RydWN0dXJlZFBhdGNoIiwiY3JlYXRlVHdvRmlsZXNQYXRjaCIsImNyZWF0ZVBhdGNoIiwib2xkRmlsZU5hbWUiLCJuZXdGaWxlTmFtZSIsIm9sZFN0ciIsIm5ld1N0ciIsIm9sZEhlYWRlciIsIm5ld0hlYWRlciIsIm9wdGlvbnMiLCJjb250ZXh0IiwiZGlmZiIsInB1c2giLCJ2YWx1ZSIsImxpbmVzIiwiY29udGV4dExpbmVzIiwibWFwIiwiZW50cnkiLCJodW5rcyIsIm9sZFJhbmdlU3RhcnQiLCJuZXdSYW5nZVN0YXJ0IiwiY3VyUmFuZ2UiLCJvbGRMaW5lIiwibmV3TGluZSIsImkiLCJjdXJyZW50IiwicmVwbGFjZSIsInNwbGl0IiwiYWRkZWQiLCJyZW1vdmVkIiwicHJldiIsInNsaWNlIiwibGVuZ3RoIiwiY29udGV4dFNpemUiLCJNYXRoIiwibWluIiwiaHVuayIsIm9sZFN0YXJ0Iiwib2xkTGluZXMiLCJuZXdTdGFydCIsIm5ld0xpbmVzIiwib2xkRU9GTmV3bGluZSIsInRlc3QiLCJuZXdFT0ZOZXdsaW5lIiwic3BsaWNlIiwicmV0IiwiYXBwbHkiLCJqb2luIiwiZmlsZU5hbWUiXSwibWFwcGluZ3MiOiI7OztnQ0FFZ0JBLGUsR0FBQUEsZTt5REFpR0FDLG1CLEdBQUFBLG1CO3lEQXdCQUMsVyxHQUFBQSxXOztBQTNIaEI7Ozs7dUJBRU8sU0FBU0YsZUFBVCxDQUF5QkcsV0FBekIsRUFBc0NDLFdBQXRDLEVBQW1EQyxNQUFuRCxFQUEyREMsTUFBM0QsRUFBbUVDLFNBQW5FLEVBQThFQyxTQUE5RSxFQUF5RkMsT0FBekYsRUFBa0c7QUFDdkcsTUFBSSxDQUFDQSxPQUFMLEVBQWM7QUFDWkEsY0FBVSxFQUFWO0FBQ0Q7QUFDRCxNQUFJLE9BQU9BLFFBQVFDLE9BQWYsS0FBMkIsV0FBL0IsRUFBNEM7QUFDMUNELFlBQVFDLE9BQVIsR0FBa0IsQ0FBbEI7QUFDRDs7QUFFRCxN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QUEvQyxFQUEwREMsU0FBMUQsRUFBcUVDLE9BQXJFLEVBQThFO0FBQ25GLFNBQU9SLG9CQUFvQitDLFFBQXBCLEVBQThCQSxRQUE5QixFQUF3QzNDLE1BQXhDLEVBQWdEQyxNQUFoRCxFQUF3REMsU0FBeEQsRUFBbUVDLFNBQW5FLEVBQThFQyxPQUE5RSxDQUFQO0FBQ0QiLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtkaWZmTGluZXN9IGZyb20gJy4uL2RpZmYvbGluZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJ1Y3R1cmVkUGF0Y2gob2xkRmlsZU5hbWUsIG5ld0ZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdGlvbnMuY29udGV4dCA9IDQ7XG4gIH1cblxuICBjb25zdCBkaWZmID0gZGlmZkxpbmVzKG9sZFN0ciwgbmV3U3RyLCBvcHRpb25zKTtcbiAgZGlmZi5wdXNoKHt2YWx1ZTogJycsIGxpbmVzOiBbXX0pOyAgIC8vIEFwcGVuZCBhbiBlbXB0eSB2YWx1ZSB0byBtYWtlIGNsZWFudXAgZWFzaWVyXG5cbiAgZnVuY3Rpb24gY29udGV4dExpbmVzKGxpbmVzKSB7XG4gICAgcmV0dXJuIGxpbmVzLm1hcChmdW5jdGlvbihlbnRyeSkgeyByZXR1cm4gJyAnICsgZW50cnk7IH0pO1xuICB9XG5cbiAgbGV0IGh1bmtzID0gW107XG4gIGxldCBvbGRSYW5nZVN0YXJ0ID0gMCwgbmV3UmFuZ2VTdGFydCA9IDAsIGN1clJhbmdlID0gW10sXG4gICAgICBvbGRMaW5lID0gMSwgbmV3TGluZSA9IDE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJlbnQgPSBkaWZmW2ldLFxuICAgICAgICAgIGxpbmVzID0gY3VycmVudC5saW5lcyB8fCBjdXJyZW50LnZhbHVlLnJlcGxhY2UoL1xcbiQvLCAnJykuc3BsaXQoJ1xcbicpO1xuICAgIGN1cnJlbnQubGluZXMgPSBsaW5lcztcblxuICAgIGlmIChjdXJyZW50LmFkZGVkIHx8IGN1cnJlbnQucmVtb3ZlZCkge1xuICAgICAgLy8gSWYgd2UgaGF2ZSBwcmV2aW91cyBjb250ZXh0LCBzdGFydCB3aXRoIHRoYXRcbiAgICAgIGlmICghb2xkUmFuZ2VTdGFydCkge1xuICAgICAgICBjb25zdCBwcmV2ID0gZGlmZltpIC0gMV07XG4gICAgICAgIG9sZFJhbmdlU3RhcnQgPSBvbGRMaW5lO1xuICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gbmV3TGluZTtcblxuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgIGN1clJhbmdlID0gb3B0aW9ucy5jb250ZXh0ID4gMCA/IGNvbnRleHRMaW5lcyhwcmV2LmxpbmVzLnNsaWNlKC1vcHRpb25zLmNvbnRleHQpKSA6IFtdO1xuICAgICAgICAgIG9sZFJhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICAgIG5ld1JhbmdlU3RhcnQgLT0gY3VyUmFuZ2UubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE91dHB1dCBvdXIgY2hhbmdlc1xuICAgICAgY3VyUmFuZ2UucHVzaCguLi4gbGluZXMubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAoY3VycmVudC5hZGRlZCA/ICcrJyA6ICctJykgKyBlbnRyeTtcbiAgICAgIH0pKTtcblxuICAgICAgLy8gVHJhY2sgdGhlIHVwZGF0ZWQgZmlsZSBwb3NpdGlvblxuICAgICAgaWYgKGN1cnJlbnQuYWRkZWQpIHtcbiAgICAgICAgbmV3TGluZSArPSBsaW5lcy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWRlbnRpY2FsIGNvbnRleHQgbGluZXMuIFRyYWNrIGxpbmUgY2hhbmdlc1xuICAgICAgaWYgKG9sZFJhbmdlU3RhcnQpIHtcbiAgICAgICAgLy8gQ2xvc2Ugb3V0IGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG91dHB1dCAob3Igam9pbiBvdmVybGFwcGluZylcbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQgKiAyICYmIGkgPCBkaWZmLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAvLyBPdmVybGFwcGluZ1xuICAgICAgICAgIGN1clJhbmdlLnB1c2goLi4uIGNvbnRleHRMaW5lcyhsaW5lcykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVuZCB0aGUgcmFuZ2UgYW5kIG91dHB1dFxuICAgICAgICAgIGxldCBjb250ZXh0U2l6ZSA9IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgb3B0aW9ucy5jb250ZXh0KTtcbiAgICAgICAgICBjdXJSYW5nZS5wdXNoKC4uLiBjb250ZXh0TGluZXMobGluZXMuc2xpY2UoMCwgY29udGV4dFNpemUpKSk7XG5cbiAgICAgICAgICBsZXQgaHVuayA9IHtcbiAgICAgICAgICAgIG9sZFN0YXJ0OiBvbGRSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgb2xkTGluZXM6IChvbGRMaW5lIC0gb2xkUmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIG5ld1N0YXJ0OiBuZXdSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgbmV3TGluZXM6IChuZXdMaW5lIC0gbmV3UmFuZ2VTdGFydCArIGNvbnRleHRTaXplKSxcbiAgICAgICAgICAgIGxpbmVzOiBjdXJSYW5nZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGkgPj0gZGlmZi5sZW5ndGggLSAyICYmIGxpbmVzLmxlbmd0aCA8PSBvcHRpb25zLmNvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIEVPRiBpcyBpbnNpZGUgdGhpcyBodW5rXG4gICAgICAgICAgICBsZXQgb2xkRU9GTmV3bGluZSA9ICgvXFxuJC8udGVzdChvbGRTdHIpKTtcbiAgICAgICAgICAgIGxldCBuZXdFT0ZOZXdsaW5lID0gKC9cXG4kLy50ZXN0KG5ld1N0cikpO1xuICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PSAwICYmICFvbGRFT0ZOZXdsaW5lKSB7XG4gICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogb2xkIGhhcyBubyBlb2wgYW5kIG5vIHRyYWlsaW5nIGNvbnRleHQ7IG5vLW5sIGNhbiBlbmQgdXAgYmVmb3JlIGFkZHNcbiAgICAgICAgICAgICAgY3VyUmFuZ2Uuc3BsaWNlKGh1bmsub2xkTGluZXMsIDAsICdcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW9sZEVPRk5ld2xpbmUgfHwgIW5ld0VPRk5ld2xpbmUpIHtcbiAgICAgICAgICAgICAgY3VyUmFuZ2UucHVzaCgnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGh1bmtzLnB1c2goaHVuayk7XG5cbiAgICAgICAgICBvbGRSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICBuZXdSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICBjdXJSYW5nZSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvbGRMaW5lICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgIG5ld0xpbmUgKz0gbGluZXMubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgb2xkRmlsZU5hbWU6IG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZTogbmV3RmlsZU5hbWUsXG4gICAgb2xkSGVhZGVyOiBvbGRIZWFkZXIsIG5ld0hlYWRlcjogbmV3SGVhZGVyLFxuICAgIGh1bmtzOiBodW5rc1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHdvRmlsZXNQYXRjaChvbGRGaWxlTmFtZSwgbmV3RmlsZU5hbWUsIG9sZFN0ciwgbmV3U3RyLCBvbGRIZWFkZXIsIG5ld0hlYWRlciwgb3B0aW9ucykge1xuICBjb25zdCBkaWZmID0gc3RydWN0dXJlZFBhdGNoKG9sZEZpbGVOYW1lLCBuZXdGaWxlTmFtZSwgb2xkU3RyLCBuZXdTdHIsIG9sZEhlYWRlciwgbmV3SGVhZGVyLCBvcHRpb25zKTtcblxuICBjb25zdCByZXQgPSBbXTtcbiAgaWYgKG9sZEZpbGVOYW1lID09IG5ld0ZpbGVOYW1lKSB7XG4gICAgcmV0LnB1c2goJ0luZGV4OiAnICsgb2xkRmlsZU5hbWUpO1xuICB9XG4gIHJldC5wdXNoKCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jyk7XG4gIHJldC5wdXNoKCctLS0gJyArIGRpZmYub2xkRmlsZU5hbWUgKyAodHlwZW9mIGRpZmYub2xkSGVhZGVyID09PSAndW5kZWZpbmVkJyA/ICcnIDogJ1xcdCcgKyBkaWZmLm9sZEhlYWRlcikpO1xuICByZXQucHVzaCgnKysrICcgKyBkaWZmLm5ld0ZpbGVOYW1lICsgKHR5cGVvZiBkaWZmLm5ld0hlYWRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICdcXHQnICsgZGlmZi5uZXdIZWFkZXIpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZmYuaHVua3MubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBodW5rID0gZGlmZi5odW5rc1tpXTtcbiAgICByZXQucHVzaChcbiAgICAgICdAQCAtJyArIGh1bmsub2xkU3RhcnQgKyAnLCcgKyBodW5rLm9sZExpbmVzXG4gICAgICArICcgKycgKyBodW5rLm5ld1N0YXJ0ICsgJywnICsgaHVuay5uZXdMaW5lc1xuICAgICAgKyAnIEBAJ1xuICAgICk7XG4gICAgcmV0LnB1c2guYXBwbHkocmV0LCBodW5rLmxpbmVzKTtcbiAgfVxuXG4gIHJldHVybiByZXQuam9pbignXFxuJykgKyAnXFxuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGNoKGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGNyZWF0ZVR3b0ZpbGVzUGF0Y2goZmlsZU5hbWUsIGZpbGVOYW1lLCBvbGRTdHIsIG5ld1N0ciwgb2xkSGVhZGVyLCBuZXdIZWFkZXIsIG9wdGlvbnMpO1xufVxuIl19
4204  
4205  
4206  /***/ }),
4207  /* 15 */
4208  /***/ (function(module, exports) {
4209  
4210      /*istanbul ignore start*/"use strict";
4211  
4212      exports.__esModule = true;
4213      exports. /*istanbul ignore end*/arrayEqual = arrayEqual;
4214      /*istanbul ignore start*/exports. /*istanbul ignore end*/arrayStartsWith = arrayStartsWith;
4215  	function arrayEqual(a, b) {
4216        if (a.length !== b.length) {
4217          return false;
4218        }
4219  
4220        return arrayStartsWith(a, b);
4221      }
4222  
4223  	function arrayStartsWith(array, start) {
4224        if (start.length > array.length) {
4225          return false;
4226        }
4227  
4228        for (var i = 0; i < start.length; i++) {
4229          if (start[i] !== array[i]) {
4230            return false;
4231          }
4232        }
4233  
4234        return true;
4235      }
4236      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2FycmF5LmpzIl0sIm5hbWVzIjpbImFycmF5RXF1YWwiLCJhcnJheVN0YXJ0c1dpdGgiLCJhIiwiYiIsImxlbmd0aCIsImFycmF5Iiwic3RhcnQiLCJpIl0sIm1hcHBpbmdzIjoiOzs7Z0NBQWdCQSxVLEdBQUFBLFU7eURBUUFDLGUsR0FBQUEsZTtBQVJULFNBQVNELFVBQVQsQ0FBb0JFLENBQXBCLEVBQXVCQyxDQUF2QixFQUEwQjtBQUMvQixNQUFJRCxFQUFFRSxNQUFGLEtBQWFELEVBQUVDLE1BQW5CLEVBQTJCO0FBQ3pCLFdBQU8sS0FBUDtBQUNEOztBQUVELFNBQU9ILGdCQUFnQkMsQ0FBaEIsRUFBbUJDLENBQW5CLENBQVA7QUFDRDs7QUFFTSxTQUFTRixlQUFULENBQXlCSSxLQUF6QixFQUFnQ0MsS0FBaEMsRUFBdUM7QUFDNUMsTUFBSUEsTUFBTUYsTUFBTixHQUFlQyxNQUFNRCxNQUF6QixFQUFpQztBQUMvQixXQUFPLEtBQVA7QUFDRDs7QUFFRCxPQUFLLElBQUlHLElBQUksQ0FBYixFQUFnQkEsSUFBSUQsTUFBTUYsTUFBMUIsRUFBa0NHLEdBQWxDLEVBQXVDO0FBQ3JDLFFBQUlELE1BQU1DLENBQU4sTUFBYUYsTUFBTUUsQ0FBTixDQUFqQixFQUEyQjtBQUN6QixhQUFPLEtBQVA7QUFDRDtBQUNGOztBQUVELFNBQU8sSUFBUDtBQUNEIiwiZmlsZSI6ImFycmF5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGFycmF5RXF1YWwoYSwgYikge1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5U3RhcnRzV2l0aChhLCBiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFycmF5U3RhcnRzV2l0aChhcnJheSwgc3RhcnQpIHtcbiAgaWYgKHN0YXJ0Lmxlbmd0aCA+IGFycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhcnQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3RhcnRbaV0gIT09IGFycmF5W2ldKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
4237  
4238  
4239  /***/ }),
4240  /* 16 */
4241  /***/ (function(module, exports) {
4242  
4243      /*istanbul ignore start*/"use strict";
4244  
4245      exports.__esModule = true;
4246      exports. /*istanbul ignore end*/convertChangesToDMP = convertChangesToDMP;
4247      // See: http://code.google.com/p/google-diff-match-patch/wiki/API
4248  	function convertChangesToDMP(changes) {
4249        var ret = [],
4250            change = /*istanbul ignore start*/void 0 /*istanbul ignore end*/,
4251            operation = /*istanbul ignore start*/void 0 /*istanbul ignore end*/;
4252        for (var i = 0; i < changes.length; i++) {
4253          change = changes[i];
4254          if (change.added) {
4255            operation = 1;
4256          } else if (change.removed) {
4257            operation = -1;
4258          } else {
4259            operation = 0;
4260          }
4261  
4262          ret.push([operation, change.value]);
4263        }
4264        return ret;
4265      }
4266      //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb252ZXJ0L2RtcC5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0Q2hhbmdlc1RvRE1QIiwiY2hhbmdlcyIsInJldCIsImNoYW5nZSIsIm9wZXJhdGlvbiIsImkiLCJsZW5ndGgiLCJhZGRlZCIsInJlbW92ZWQiLCJwdXNoIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7OztnQ0FDZ0JBLG1CLEdBQUFBLG1CO0FBRGhCO0FBQ08sU0FBU0EsbUJBQVQsQ0FBNkJDLE9BQTdCLEVBQXNDO0FBQzNDLE1BQUlDLE1BQU0sRUFBVjtBQUFBLE1BQ0lDLHdDQURKO0FBQUEsTUFFSUMsMkNBRko7QUFHQSxPQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSUosUUFBUUssTUFBNUIsRUFBb0NELEdBQXBDLEVBQXlDO0FBQ3ZDRixhQUFTRixRQUFRSSxDQUFSLENBQVQ7QUFDQSxRQUFJRixPQUFPSSxLQUFYLEVBQWtCO0FBQ2hCSCxrQkFBWSxDQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUlELE9BQU9LLE9BQVgsRUFBb0I7QUFDekJKLGtCQUFZLENBQUMsQ0FBYjtBQUNELEtBRk0sTUFFQTtBQUNMQSxrQkFBWSxDQUFaO0FBQ0Q7O0FBRURGLFFBQUlPLElBQUosQ0FBUyxDQUFDTCxTQUFELEVBQVlELE9BQU9PLEtBQW5CLENBQVQ7QUFDRDtBQUNELFNBQU9SLEdBQVA7QUFDRCIsImZpbGUiOiJkbXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTZWU6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtZGlmZi1tYXRjaC1wYXRjaC93aWtpL0FQSVxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRDaGFuZ2VzVG9ETVAoY2hhbmdlcykge1xuICBsZXQgcmV0ID0gW10sXG4gICAgICBjaGFuZ2UsXG4gICAgICBvcGVyYXRpb247XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgaWYgKGNoYW5nZS5hZGRlZCkge1xuICAgICAgb3BlcmF0aW9uID0gMTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICBvcGVyYXRpb24gPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3BlcmF0aW9uID0gMDtcbiAgICB9XG5cbiAgICByZXQucHVzaChbb3BlcmF0aW9uLCBjaGFuZ2UudmFsdWVdKTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIl19
4267  
4268  
4269  /***/ }),
4270  /* 17 */
4271  /***/ (function(module, exports) {
4272  
4273      /*istanbul ignore start*/'use strict';
4274  
4275      exports.__esModule = true;
4276      exports. /*istanbul ignore end*/convertChangesToXML = convertChangesToXML;
4277  	function convertChangesToXML(changes) {
4278        var ret = [];
4279        for (var i = 0; i < changes.length; i++) {
4280          var change = changes[i];
4281          if (change.added) {
4282            ret.push('<ins>');
4283          } else if (change.removed) {
4284            ret.push('<del>');
4285          }
4286  
4287          ret.push(escapeHTML(change.value));
4288  
4289          if (change.added) {
4290            ret.push('</ins>');
4291          } else if (change.removed) {
4292            ret.push('</del>');
4293          }
4294        }
4295        return ret.join('');
4296      }
4297  
4298  	function escapeHTML(s) {
4299        var n = s;
4300        n = n.replace(/&/g, '&amp;');
4301        n = n.replace(/</g, '&lt;');
4302        n = n.replace(/>/g, '&gt;');
4303        n = n.replace(/"/g, '&quot;');
4304  
4305        return n;
4306      }
4307      
4308  
4309  /***/ })
4310  /******/ ])
4311  });
4312  ;
4313  
4314  /***/ }),
4315  
4316  /***/ 22:
4317  /***/ (function(module, exports) {
4318  
4319  (function() { module.exports = this["wp"]["richText"]; }());
4320  
4321  /***/ }),
4322  
4323  /***/ 220:
4324  /***/ (function(module, exports) {
4325  
4326  var traverse = module.exports = function (obj) {
4327      return new Traverse(obj);
4328  };
4329  
4330  function Traverse (obj) {
4331      this.value = obj;
4332  }
4333  
4334  Traverse.prototype.get = function (ps) {
4335      var node = this.value;
4336      for (var i = 0; i < ps.length; i ++) {
4337          var key = ps[i];
4338          if (!node || !hasOwnProperty.call(node, key)) {
4339              node = undefined;
4340              break;
4341          }
4342          node = node[key];
4343      }
4344      return node;
4345  };
4346  
4347  Traverse.prototype.has = function (ps) {
4348      var node = this.value;
4349      for (var i = 0; i < ps.length; i ++) {
4350          var key = ps[i];
4351          if (!node || !hasOwnProperty.call(node, key)) {
4352              return false;
4353          }
4354          node = node[key];
4355      }
4356      return true;
4357  };
4358  
4359  Traverse.prototype.set = function (ps, value) {
4360      var node = this.value;
4361      for (var i = 0; i < ps.length - 1; i ++) {
4362          var key = ps[i];
4363          if (!hasOwnProperty.call(node, key)) node[key] = {};
4364          node = node[key];
4365      }
4366      node[ps[i]] = value;
4367      return value;
4368  };
4369  
4370  Traverse.prototype.map = function (cb) {
4371      return walk(this.value, cb, true);
4372  };
4373  
4374  Traverse.prototype.forEach = function (cb) {
4375      this.value = walk(this.value, cb, false);
4376      return this.value;
4377  };
4378  
4379  Traverse.prototype.reduce = function (cb, init) {
4380      var skip = arguments.length === 1;
4381      var acc = skip ? this.value : init;
4382      this.forEach(function (x) {
4383          if (!this.isRoot || !skip) {
4384              acc = cb.call(this, acc, x);
4385          }
4386      });
4387      return acc;
4388  };
4389  
4390  Traverse.prototype.paths = function () {
4391      var acc = [];
4392      this.forEach(function (x) {
4393          acc.push(this.path); 
4394      });
4395      return acc;
4396  };
4397  
4398  Traverse.prototype.nodes = function () {
4399      var acc = [];
4400      this.forEach(function (x) {
4401          acc.push(this.node);
4402      });
4403      return acc;
4404  };
4405  
4406  Traverse.prototype.clone = function () {
4407      var parents = [], nodes = [];
4408      
4409      return (function clone (src) {
4410          for (var i = 0; i < parents.length; i++) {
4411              if (parents[i] === src) {
4412                  return nodes[i];
4413              }
4414          }
4415          
4416          if (typeof src === 'object' && src !== null) {
4417              var dst = copy(src);
4418              
4419              parents.push(src);
4420              nodes.push(dst);
4421              
4422              forEach(objectKeys(src), function (key) {
4423                  dst[key] = clone(src[key]);
4424              });
4425              
4426              parents.pop();
4427              nodes.pop();
4428              return dst;
4429          }
4430          else {
4431              return src;
4432          }
4433      })(this.value);
4434  };
4435  
4436  function walk (root, cb, immutable) {
4437      var path = [];
4438      var parents = [];
4439      var alive = true;
4440      
4441      return (function walker (node_) {
4442          var node = immutable ? copy(node_) : node_;
4443          var modifiers = {};
4444          
4445          var keepGoing = true;
4446          
4447          var state = {
4448              node : node,
4449              node_ : node_,
4450              path : [].concat(path),
4451              parent : parents[parents.length - 1],
4452              parents : parents,
4453              key : path.slice(-1)[0],
4454              isRoot : path.length === 0,
4455              level : path.length,
4456              circular : null,
4457              update : function (x, stopHere) {
4458                  if (!state.isRoot) {
4459                      state.parent.node[state.key] = x;
4460                  }
4461                  state.node = x;
4462                  if (stopHere) keepGoing = false;
4463              },
4464              'delete' : function (stopHere) {
4465                  delete state.parent.node[state.key];
4466                  if (stopHere) keepGoing = false;
4467              },
4468              remove : function (stopHere) {
4469                  if (isArray(state.parent.node)) {
4470                      state.parent.node.splice(state.key, 1);
4471                  }
4472                  else {
4473                      delete state.parent.node[state.key];
4474                  }
4475                  if (stopHere) keepGoing = false;
4476              },
4477              keys : null,
4478              before : function (f) { modifiers.before = f },
4479              after : function (f) { modifiers.after = f },
4480              pre : function (f) { modifiers.pre = f },
4481              post : function (f) { modifiers.post = f },
4482              stop : function () { alive = false },
4483              block : function () { keepGoing = false }
4484          };
4485          
4486          if (!alive) return state;
4487          
4488          function updateState() {
4489              if (typeof state.node === 'object' && state.node !== null) {
4490                  if (!state.keys || state.node_ !== state.node) {
4491                      state.keys = objectKeys(state.node)
4492                  }
4493                  
4494                  state.isLeaf = state.keys.length == 0;
4495                  
4496                  for (var i = 0; i < parents.length; i++) {
4497                      if (parents[i].node_ === node_) {
4498                          state.circular = parents[i];
4499                          break;
4500                      }
4501                  }
4502              }
4503              else {
4504                  state.isLeaf = true;
4505                  state.keys = null;
4506              }
4507              
4508              state.notLeaf = !state.isLeaf;
4509              state.notRoot = !state.isRoot;
4510          }
4511          
4512          updateState();
4513          
4514          // use return values to update if defined
4515          var ret = cb.call(state, state.node);
4516          if (ret !== undefined && state.update) state.update(ret);
4517          
4518          if (modifiers.before) modifiers.before.call(state, state.node);
4519          
4520          if (!keepGoing) return state;
4521          
4522          if (typeof state.node == 'object'
4523          && state.node !== null && !state.circular) {
4524              parents.push(state);
4525              
4526              updateState();
4527              
4528              forEach(state.keys, function (key, i) {
4529                  path.push(key);
4530                  
4531                  if (modifiers.pre) modifiers.pre.call(state, state.node[key], key);
4532                  
4533                  var child = walker(state.node[key]);
4534                  if (immutable && hasOwnProperty.call(state.node, key)) {
4535                      state.node[key] = child.node;
4536                  }
4537                  
4538                  child.isLast = i == state.keys.length - 1;
4539                  child.isFirst = i == 0;
4540                  
4541                  if (modifiers.post) modifiers.post.call(state, child);
4542                  
4543                  path.pop();
4544              });
4545              parents.pop();
4546          }
4547          
4548          if (modifiers.after) modifiers.after.call(state, state.node);
4549          
4550          return state;
4551      })(root).node;
4552  }
4553  
4554  function copy (src) {
4555      if (typeof src === 'object' && src !== null) {
4556          var dst;
4557          
4558          if (isArray(src)) {
4559              dst = [];
4560          }
4561          else if (isDate(src)) {
4562              dst = new Date(src.getTime ? src.getTime() : src);
4563          }
4564          else if (isRegExp(src)) {
4565              dst = new RegExp(src);
4566          }
4567          else if (isError(src)) {
4568              dst = { message: src.message };
4569          }
4570          else if (isBoolean(src)) {
4571              dst = new Boolean(src);
4572          }
4573          else if (isNumber(src)) {
4574              dst = new Number(src);
4575          }
4576          else if (isString(src)) {
4577              dst = new String(src);
4578          }
4579          else if (Object.create && Object.getPrototypeOf) {
4580              dst = Object.create(Object.getPrototypeOf(src));
4581          }
4582          else if (src.constructor === Object) {
4583              dst = {};
4584          }
4585          else {
4586              var proto =
4587                  (src.constructor && src.constructor.prototype)
4588                  || src.__proto__
4589                  || {}
4590              ;
4591              var T = function () {};
4592              T.prototype = proto;
4593              dst = new T;
4594          }
4595          
4596          forEach(objectKeys(src), function (key) {
4597              dst[key] = src[key];
4598          });
4599          return dst;
4600      }
4601      else return src;
4602  }
4603  
4604  var objectKeys = Object.keys || function keys (obj) {
4605      var res = [];
4606      for (var key in obj) res.push(key)
4607      return res;
4608  };
4609  
4610  function toS (obj) { return Object.prototype.toString.call(obj) }
4611  function isDate (obj) { return toS(obj) === '[object Date]' }
4612  function isRegExp (obj) { return toS(obj) === '[object RegExp]' }
4613  function isError (obj) { return toS(obj) === '[object Error]' }
4614  function isBoolean (obj) { return toS(obj) === '[object Boolean]' }
4615  function isNumber (obj) { return toS(obj) === '[object Number]' }
4616  function isString (obj) { return toS(obj) === '[object String]' }
4617  
4618  var isArray = Array.isArray || function isArray (xs) {
4619      return Object.prototype.toString.call(xs) === '[object Array]';
4620  };
4621  
4622  var forEach = function (xs, fn) {
4623      if (xs.forEach) return xs.forEach(fn)
4624      else for (var i = 0; i < xs.length; i++) {
4625          fn(xs[i], i, xs);
4626      }
4627  };
4628  
4629  forEach(objectKeys(Traverse.prototype), function (key) {
4630      traverse[key] = function (obj) {
4631          var args = [].slice.call(arguments, 1);
4632          var t = new Traverse(obj);
4633          return t[key].apply(t, args);
4634      };
4635  });
4636  
4637  var hasOwnProperty = Object.hasOwnProperty || function (obj, key) {
4638      return key in obj;
4639  };
4640  
4641  
4642  /***/ }),
4643  
4644  /***/ 23:
4645  /***/ (function(module, __webpack_exports__, __webpack_require__) {
4646  
4647  "use strict";
4648  
4649  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js
4650  var arrayWithHoles = __webpack_require__(38);
4651  
4652  // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js
4653  function _iterableToArrayLimit(arr, i) {
4654    var _arr = [];
4655    var _n = true;
4656    var _d = false;
4657    var _e = undefined;
4658  
4659    try {
4660      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
4661        _arr.push(_s.value);
4662  
4663        if (i && _arr.length === i) break;
4664      }
4665    } catch (err) {
4666      _d = true;
4667      _e = err;
4668    } finally {
4669      try {
4670        if (!_n && _i["return"] != null) _i["return"]();
4671      } finally {
4672        if (_d) throw _e;
4673      }
4674    }
4675  
4676    return _arr;
4677  }
4678  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js
4679  var nonIterableRest = __webpack_require__(39);
4680  
4681  // CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js
4682  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _slicedToArray; });
4683  
4684  
4685  
4686  function _slicedToArray(arr, i) {
4687    return Object(arrayWithHoles["a" /* default */])(arr) || _iterableToArrayLimit(arr, i) || Object(nonIterableRest["a" /* default */])();
4688  }
4689  
4690  /***/ }),
4691  
4692  /***/ 25:
4693  /***/ (function(module, exports) {
4694  
4695  (function() { module.exports = this["wp"]["dom"]; }());
4696  
4697  /***/ }),
4698  
4699  /***/ 26:
4700  /***/ (function(module, exports) {
4701  
4702  (function() { module.exports = this["wp"]["url"]; }());
4703  
4704  /***/ }),
4705  
4706  /***/ 27:
4707  /***/ (function(module, exports) {
4708  
4709  (function() { module.exports = this["wp"]["hooks"]; }());
4710  
4711  /***/ }),
4712  
4713  /***/ 28:
4714  /***/ (function(module, exports) {
4715  
4716  (function() { module.exports = this["React"]; }());
4717  
4718  /***/ }),
4719  
4720  /***/ 3:
4721  /***/ (function(module, exports) {
4722  
4723  (function() { module.exports = this["wp"]["components"]; }());
4724  
4725  /***/ }),
4726  
4727  /***/ 30:
4728  /***/ (function(module, __webpack_exports__, __webpack_require__) {
4729  
4730  "use strict";
4731  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _iterableToArray; });
4732  function _iterableToArray(iter) {
4733    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
4734  }
4735  
4736  /***/ }),
4737  
4738  /***/ 31:
4739  /***/ (function(module, __webpack_exports__, __webpack_require__) {
4740  
4741  "use strict";
4742  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return _typeof; });
4743  function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }
4744  
4745  function _typeof(obj) {
4746    if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") {
4747      _typeof = function _typeof(obj) {
4748        return _typeof2(obj);
4749      };
4750    } else {
4751      _typeof = function _typeof(obj) {
4752        return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj);
4753      };
4754    }
4755  
4756    return _typeof(obj);
4757  }
4758  
4759  /***/ }),
4760  
4761  /***/ 33:
4762  /***/ (function(module, exports, __webpack_require__) {
4763  
4764  /**
4765   * Copyright (c) 2013-present, Facebook, Inc.
4766   *
4767   * This source code is licensed under the MIT license found in the
4768   * LICENSE file in the root directory of this source tree.
4769   */
4770  
4771  if (false) { var throwOnDirectAccess, ReactIs; } else {
4772    // By explicitly using `prop-types` you are opting into new production behavior.
4773    // http://fb.me/prop-types-in-prod
4774    module.exports = __webpack_require__(87)();
4775  }
4776  
4777  
4778  /***/ }),
4779  
4780  /***/ 342:
4781  /***/ (function(module, __webpack_exports__, __webpack_require__) {
4782  
4783  "use strict";
4784  __webpack_require__.r(__webpack_exports__);
4785  var actions_namespaceObject = {};
4786  __webpack_require__.r(actions_namespaceObject);
4787  __webpack_require__.d(actions_namespaceObject, "resetBlocks", function() { return resetBlocks; });
4788  __webpack_require__.d(actions_namespaceObject, "receiveBlocks", function() { return receiveBlocks; });
4789  __webpack_require__.d(actions_namespaceObject, "updateBlockAttributes", function() { return actions_updateBlockAttributes; });
4790  __webpack_require__.d(actions_namespaceObject, "updateBlock", function() { return updateBlock; });
4791  __webpack_require__.d(actions_namespaceObject, "selectBlock", function() { return actions_selectBlock; });
4792  __webpack_require__.d(actions_namespaceObject, "selectPreviousBlock", function() { return selectPreviousBlock; });
4793  __webpack_require__.d(actions_namespaceObject, "selectNextBlock", function() { return selectNextBlock; });
4794  __webpack_require__.d(actions_namespaceObject, "startMultiSelect", function() { return startMultiSelect; });
4795  __webpack_require__.d(actions_namespaceObject, "stopMultiSelect", function() { return stopMultiSelect; });
4796  __webpack_require__.d(actions_namespaceObject, "multiSelect", function() { return actions_multiSelect; });
4797  __webpack_require__.d(actions_namespaceObject, "clearSelectedBlock", function() { return clearSelectedBlock; });
4798  __webpack_require__.d(actions_namespaceObject, "toggleSelection", function() { return actions_toggleSelection; });
4799  __webpack_require__.d(actions_namespaceObject, "replaceBlocks", function() { return actions_replaceBlocks; });
4800  __webpack_require__.d(actions_namespaceObject, "replaceBlock", function() { return replaceBlock; });
4801  __webpack_require__.d(actions_namespaceObject, "moveBlocksDown", function() { return actions_moveBlocksDown; });
4802  __webpack_require__.d(actions_namespaceObject, "moveBlocksUp", function() { return actions_moveBlocksUp; });
4803  __webpack_require__.d(actions_namespaceObject, "moveBlockToPosition", function() { return moveBlockToPosition; });
4804  __webpack_require__.d(actions_namespaceObject, "insertBlock", function() { return actions_insertBlock; });
4805  __webpack_require__.d(actions_namespaceObject, "insertBlocks", function() { return actions_insertBlocks; });
4806  __webpack_require__.d(actions_namespaceObject, "showInsertionPoint", function() { return actions_showInsertionPoint; });
4807  __webpack_require__.d(actions_namespaceObject, "hideInsertionPoint", function() { return actions_hideInsertionPoint; });
4808  __webpack_require__.d(actions_namespaceObject, "setTemplateValidity", function() { return setTemplateValidity; });
4809  __webpack_require__.d(actions_namespaceObject, "synchronizeTemplate", function() { return synchronizeTemplate; });
4810  __webpack_require__.d(actions_namespaceObject, "mergeBlocks", function() { return actions_mergeBlocks; });
4811  __webpack_require__.d(actions_namespaceObject, "removeBlocks", function() { return actions_removeBlocks; });
4812  __webpack_require__.d(actions_namespaceObject, "removeBlock", function() { return actions_removeBlock; });
4813  __webpack_require__.d(actions_namespaceObject, "replaceInnerBlocks", function() { return actions_replaceInnerBlocks; });
4814  __webpack_require__.d(actions_namespaceObject, "toggleBlockMode", function() { return toggleBlockMode; });
4815  __webpack_require__.d(actions_namespaceObject, "startTyping", function() { return startTyping; });
4816  __webpack_require__.d(actions_namespaceObject, "stopTyping", function() { return stopTyping; });
4817  __webpack_require__.d(actions_namespaceObject, "enterFormattedText", function() { return enterFormattedText; });
4818  __webpack_require__.d(actions_namespaceObject, "exitFormattedText", function() { return exitFormattedText; });
4819  __webpack_require__.d(actions_namespaceObject, "selectionChange", function() { return selectionChange; });
4820  __webpack_require__.d(actions_namespaceObject, "insertDefaultBlock", function() { return actions_insertDefaultBlock; });
4821  __webpack_require__.d(actions_namespaceObject, "updateBlockListSettings", function() { return updateBlockListSettings; });
4822  __webpack_require__.d(actions_namespaceObject, "updateSettings", function() { return updateSettings; });
4823  __webpack_require__.d(actions_namespaceObject, "__unstableSaveReusableBlock", function() { return __unstableSaveReusableBlock; });
4824  __webpack_require__.d(actions_namespaceObject, "__unstableMarkLastChangeAsPersistent", function() { return actions_unstableMarkLastChangeAsPersistent; });
4825  __webpack_require__.d(actions_namespaceObject, "__unstableMarkAutomaticChange", function() { return __unstableMarkAutomaticChange; });
4826  __webpack_require__.d(actions_namespaceObject, "setNavigationMode", function() { return actions_setNavigationMode; });
4827  var selectors_namespaceObject = {};
4828  __webpack_require__.r(selectors_namespaceObject);
4829  __webpack_require__.d(selectors_namespaceObject, "INSERTER_UTILITY_HIGH", function() { return INSERTER_UTILITY_HIGH; });
4830  __webpack_require__.d(selectors_namespaceObject, "INSERTER_UTILITY_MEDIUM", function() { return INSERTER_UTILITY_MEDIUM; });
4831  __webpack_require__.d(selectors_namespaceObject, "INSERTER_UTILITY_LOW", function() { return INSERTER_UTILITY_LOW; });
4832  __webpack_require__.d(selectors_namespaceObject, "INSERTER_UTILITY_NONE", function() { return INSERTER_UTILITY_NONE; });
4833  __webpack_require__.d(selectors_namespaceObject, "getBlockName", function() { return selectors_getBlockName; });
4834  __webpack_require__.d(selectors_namespaceObject, "isBlockValid", function() { return selectors_isBlockValid; });
4835  __webpack_require__.d(selectors_namespaceObject, "getBlockAttributes", function() { return getBlockAttributes; });
4836  __webpack_require__.d(selectors_namespaceObject, "getBlock", function() { return selectors_getBlock; });
4837  __webpack_require__.d(selectors_namespaceObject, "__unstableGetBlockWithoutInnerBlocks", function() { return selectors_unstableGetBlockWithoutInnerBlocks; });
4838  __webpack_require__.d(selectors_namespaceObject, "getBlocks", function() { return selectors_getBlocks; });
4839  __webpack_require__.d(selectors_namespaceObject, "getClientIdsOfDescendants", function() { return selectors_getClientIdsOfDescendants; });
4840  __webpack_require__.d(selectors_namespaceObject, "getClientIdsWithDescendants", function() { return getClientIdsWithDescendants; });
4841  __webpack_require__.d(selectors_namespaceObject, "getGlobalBlockCount", function() { return getGlobalBlockCount; });
4842  __webpack_require__.d(selectors_namespaceObject, "getBlocksByClientId", function() { return selectors_getBlocksByClientId; });
4843  __webpack_require__.d(selectors_namespaceObject, "getBlockCount", function() { return selectors_getBlockCount; });
4844  __webpack_require__.d(selectors_namespaceObject, "getSelectionStart", function() { return getSelectionStart; });
4845  __webpack_require__.d(selectors_namespaceObject, "getSelectionEnd", function() { return getSelectionEnd; });
4846  __webpack_require__.d(selectors_namespaceObject, "getBlockSelectionStart", function() { return getBlockSelectionStart; });
4847  __webpack_require__.d(selectors_namespaceObject, "getBlockSelectionEnd", function() { return getBlockSelectionEnd; });
4848  __webpack_require__.d(selectors_namespaceObject, "getSelectedBlockCount", function() { return selectors_getSelectedBlockCount; });
4849  __webpack_require__.d(selectors_namespaceObject, "hasSelectedBlock", function() { return hasSelectedBlock; });
4850  __webpack_require__.d(selectors_namespaceObject, "getSelectedBlockClientId", function() { return selectors_getSelectedBlockClientId; });
4851  __webpack_require__.d(selectors_namespaceObject, "getSelectedBlock", function() { return selectors_getSelectedBlock; });
4852  __webpack_require__.d(selectors_namespaceObject, "getBlockRootClientId", function() { return selectors_getBlockRootClientId; });
4853  __webpack_require__.d(selectors_namespaceObject, "getBlockHierarchyRootClientId", function() { return getBlockHierarchyRootClientId; });
4854  __webpack_require__.d(selectors_namespaceObject, "getAdjacentBlockClientId", function() { return getAdjacentBlockClientId; });
4855  __webpack_require__.d(selectors_namespaceObject, "getPreviousBlockClientId", function() { return getPreviousBlockClientId; });
4856  __webpack_require__.d(selectors_namespaceObject, "getNextBlockClientId", function() { return getNextBlockClientId; });
4857  __webpack_require__.d(selectors_namespaceObject, "getSelectedBlocksInitialCaretPosition", function() { return selectors_getSelectedBlocksInitialCaretPosition; });
4858  __webpack_require__.d(selectors_namespaceObject, "getSelectedBlockClientIds", function() { return selectors_getSelectedBlockClientIds; });
4859  __webpack_require__.d(selectors_namespaceObject, "getMultiSelectedBlockClientIds", function() { return getMultiSelectedBlockClientIds; });
4860  __webpack_require__.d(selectors_namespaceObject, "getMultiSelectedBlocks", function() { return getMultiSelectedBlocks; });
4861  __webpack_require__.d(selectors_namespaceObject, "getFirstMultiSelectedBlockClientId", function() { return getFirstMultiSelectedBlockClientId; });
4862  __webpack_require__.d(selectors_namespaceObject, "getLastMultiSelectedBlockClientId", function() { return getLastMultiSelectedBlockClientId; });
4863  __webpack_require__.d(selectors_namespaceObject, "isFirstMultiSelectedBlock", function() { return selectors_isFirstMultiSelectedBlock; });
4864  __webpack_require__.d(selectors_namespaceObject, "isBlockMultiSelected", function() { return selectors_isBlockMultiSelected; });
4865  __webpack_require__.d(selectors_namespaceObject, "isAncestorMultiSelected", function() { return selectors_isAncestorMultiSelected; });
4866  __webpack_require__.d(selectors_namespaceObject, "getMultiSelectedBlocksStartClientId", function() { return getMultiSelectedBlocksStartClientId; });
4867  __webpack_require__.d(selectors_namespaceObject, "getMultiSelectedBlocksEndClientId", function() { return getMultiSelectedBlocksEndClientId; });
4868  __webpack_require__.d(selectors_namespaceObject, "getBlockOrder", function() { return selectors_getBlockOrder; });
4869  __webpack_require__.d(selectors_namespaceObject, "getBlockIndex", function() { return selectors_getBlockIndex; });
4870  __webpack_require__.d(selectors_namespaceObject, "isBlockSelected", function() { return selectors_isBlockSelected; });
4871  __webpack_require__.d(selectors_namespaceObject, "hasSelectedInnerBlock", function() { return selectors_hasSelectedInnerBlock; });
4872  __webpack_require__.d(selectors_namespaceObject, "isBlockWithinSelection", function() { return isBlockWithinSelection; });
4873  __webpack_require__.d(selectors_namespaceObject, "hasMultiSelection", function() { return selectors_hasMultiSelection; });
4874  __webpack_require__.d(selectors_namespaceObject, "isMultiSelecting", function() { return isMultiSelecting; });
4875  __webpack_require__.d(selectors_namespaceObject, "isSelectionEnabled", function() { return selectors_isSelectionEnabled; });
4876  __webpack_require__.d(selectors_namespaceObject, "getBlockMode", function() { return selectors_getBlockMode; });
4877  __webpack_require__.d(selectors_namespaceObject, "isTyping", function() { return selectors_isTyping; });
4878  __webpack_require__.d(selectors_namespaceObject, "isCaretWithinFormattedText", function() { return selectors_isCaretWithinFormattedText; });
4879  __webpack_require__.d(selectors_namespaceObject, "getBlockInsertionPoint", function() { return getBlockInsertionPoint; });
4880  __webpack_require__.d(selectors_namespaceObject, "isBlockInsertionPointVisible", function() { return isBlockInsertionPointVisible; });
4881  __webpack_require__.d(selectors_namespaceObject, "isValidTemplate", function() { return isValidTemplate; });
4882  __webpack_require__.d(selectors_namespaceObject, "getTemplate", function() { return getTemplate; });
4883  __webpack_require__.d(selectors_namespaceObject, "getTemplateLock", function() { return selectors_getTemplateLock; });
4884  __webpack_require__.d(selectors_namespaceObject, "canInsertBlockType", function() { return selectors_canInsertBlockType; });
4885  __webpack_require__.d(selectors_namespaceObject, "getInserterItems", function() { return selectors_getInserterItems; });
4886  __webpack_require__.d(selectors_namespaceObject, "hasInserterItems", function() { return hasInserterItems; });
4887  __webpack_require__.d(selectors_namespaceObject, "getBlockListSettings", function() { return getBlockListSettings; });
4888  __webpack_require__.d(selectors_namespaceObject, "getSettings", function() { return selectors_getSettings; });
4889  __webpack_require__.d(selectors_namespaceObject, "isLastBlockChangePersistent", function() { return selectors_isLastBlockChangePersistent; });
4890  __webpack_require__.d(selectors_namespaceObject, "__experimentalGetParsedReusableBlock", function() { return __experimentalGetParsedReusableBlock; });
4891  __webpack_require__.d(selectors_namespaceObject, "__unstableIsLastBlockChangeIgnored", function() { return selectors_unstableIsLastBlockChangeIgnored; });
4892  __webpack_require__.d(selectors_namespaceObject, "__experimentalGetLastBlockAttributeChanges", function() { return __experimentalGetLastBlockAttributeChanges; });
4893  __webpack_require__.d(selectors_namespaceObject, "isNavigationMode", function() { return selectors_isNavigationMode; });
4894  __webpack_require__.d(selectors_namespaceObject, "didAutomaticChange", function() { return selectors_didAutomaticChange; });
4895  
4896  // EXTERNAL MODULE: external {"this":["wp","blocks"]}
4897  var external_this_wp_blocks_ = __webpack_require__(9);
4898  
4899  // EXTERNAL MODULE: external {"this":["wp","richText"]}
4900  var external_this_wp_richText_ = __webpack_require__(22);
4901  
4902  // EXTERNAL MODULE: external {"this":["wp","viewport"]}
4903  var external_this_wp_viewport_ = __webpack_require__(42);
4904  
4905  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectSpread.js
4906  var objectSpread = __webpack_require__(7);
4907  
4908  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
4909  var esm_extends = __webpack_require__(18);
4910  
4911  // EXTERNAL MODULE: external {"this":["wp","element"]}
4912  var external_this_wp_element_ = __webpack_require__(0);
4913  
4914  // EXTERNAL MODULE: ./node_modules/classnames/index.js
4915  var classnames = __webpack_require__(16);
4916  var classnames_default = /*#__PURE__*/__webpack_require__.n(classnames);
4917  
4918  // EXTERNAL MODULE: external "lodash"
4919  var external_lodash_ = __webpack_require__(2);
4920  
4921  // EXTERNAL MODULE: external {"this":["wp","compose"]}
4922  var external_this_wp_compose_ = __webpack_require__(8);
4923  
4924  // EXTERNAL MODULE: external {"this":["wp","hooks"]}
4925  var external_this_wp_hooks_ = __webpack_require__(27);
4926  
4927  // EXTERNAL MODULE: external {"this":["wp","data"]}
4928  var external_this_wp_data_ = __webpack_require__(4);
4929  
4930  // EXTERNAL MODULE: ./node_modules/tinycolor2/tinycolor.js
4931  var tinycolor = __webpack_require__(48);
4932  var tinycolor_default = /*#__PURE__*/__webpack_require__.n(tinycolor);
4933  
4934  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors/utils.js
4935  /**
4936   * External dependencies
4937   */
4938  
4939  
4940  /**
4941   * Provided an array of color objects as set by the theme or by the editor defaults,
4942   * and the values of the defined color or custom color returns a color object describing the color.
4943   *
4944   * @param {Array}   colors       Array of color objects as set by the theme or by the editor defaults.
4945   * @param {?string} definedColor A string containing the color slug.
4946   * @param {?string} customColor  A string containing the customColor value.
4947   *
4948   * @return {?Object} If definedColor is passed and the name is found in colors,
4949   *                   the color object exactly as set by the theme or editor defaults is returned.
4950   *                   Otherwise, an object that just sets the color is defined.
4951   */
4952  
4953  var utils_getColorObjectByAttributeValues = function getColorObjectByAttributeValues(colors, definedColor, customColor) {
4954    if (definedColor) {
4955      var colorObj = Object(external_lodash_["find"])(colors, {
4956        slug: definedColor
4957      });
4958  
4959      if (colorObj) {
4960        return colorObj;
4961      }
4962    }
4963  
4964    return {
4965      color: customColor
4966    };
4967  };
4968  /**
4969   * Provided an array of color objects as set by the theme or by the editor defaults, and a color value returns the color object matching that value or undefined.
4970   *
4971   * @param {Array}   colors      Array of color objects as set by the theme or by the editor defaults.
4972   * @param {?string} colorValue  A string containing the color value.
4973   *
4974   * @return {?Object} Color object included in the colors array whose color property equals colorValue.
4975   *                   Returns undefined if no color object matches this requirement.
4976   */
4977  
4978  var utils_getColorObjectByColorValue = function getColorObjectByColorValue(colors, colorValue) {
4979    return Object(external_lodash_["find"])(colors, {
4980      color: colorValue
4981    });
4982  };
4983  /**
4984   * Returns a class based on the context a color is being used and its slug.
4985   *
4986   * @param {string} colorContextName Context/place where color is being used e.g: background, text etc...
4987   * @param {string} colorSlug        Slug of the color.
4988   *
4989   * @return {?string} String with the class corresponding to the color in the provided context.
4990   *                   Returns undefined if either colorContextName or colorSlug are not provided.
4991   */
4992  
4993  function getColorClassName(colorContextName, colorSlug) {
4994    if (!colorContextName || !colorSlug) {
4995      return undefined;
4996    }
4997  
4998    return "has-".concat(Object(external_lodash_["kebabCase"])(colorSlug), "-").concat(colorContextName);
4999  }
5000  /**
5001   * Given an array of color objects and a color value returns the color value of the most readable color in the array.
5002   *
5003   * @param {Array}   colors     Array of color objects as set by the theme or by the editor defaults.
5004   * @param {?string} colorValue A string containing the color value.
5005   *
5006   * @return {string} String with the color value of the most readable color.
5007   */
5008  
5009  function utils_getMostReadableColor(colors, colorValue) {
5010    return tinycolor_default.a.mostReadable(colorValue, Object(external_lodash_["map"])(colors, 'color')).toHexString();
5011  }
5012  
5013  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js
5014  var classCallCheck = __webpack_require__(12);
5015  
5016  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/createClass.js
5017  var createClass = __webpack_require__(11);
5018  
5019  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js
5020  var possibleConstructorReturn = __webpack_require__(13);
5021  
5022  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js
5023  var getPrototypeOf = __webpack_require__(14);
5024  
5025  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js
5026  var assertThisInitialized = __webpack_require__(5);
5027  
5028  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inherits.js + 1 modules
5029  var inherits = __webpack_require__(15);
5030  
5031  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/defineProperty.js
5032  var defineProperty = __webpack_require__(10);
5033  
5034  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors/with-colors.js
5035  
5036  
5037  
5038  
5039  
5040  
5041  
5042  
5043  
5044  
5045  
5046  /**
5047   * External dependencies
5048   */
5049  
5050  /**
5051   * WordPress dependencies
5052   */
5053  
5054  
5055  
5056  
5057  /**
5058   * Internal dependencies
5059   */
5060  
5061  
5062  var DEFAULT_COLORS = [];
5063  /**
5064   * Higher order component factory for injecting the `colorsArray` argument as
5065   * the colors prop in the `withCustomColors` HOC.
5066   *
5067   * @param {Array} colorsArray An array of color objects.
5068   *
5069   * @return {Function} The higher order component.
5070   */
5071  
5072  var with_colors_withCustomColorPalette = function withCustomColorPalette(colorsArray) {
5073    return Object(external_this_wp_compose_["createHigherOrderComponent"])(function (WrappedComponent) {
5074      return function (props) {
5075        return Object(external_this_wp_element_["createElement"])(WrappedComponent, Object(esm_extends["a" /* default */])({}, props, {
5076          colors: colorsArray
5077        }));
5078      };
5079    }, 'withCustomColorPalette');
5080  };
5081  /**
5082   * Higher order component factory for injecting the editor colors as the
5083   * `colors` prop in the `withColors` HOC.
5084   *
5085   * @return {Function} The higher order component.
5086   */
5087  
5088  
5089  var with_colors_withEditorColorPalette = function withEditorColorPalette() {
5090    return Object(external_this_wp_data_["withSelect"])(function (select) {
5091      var settings = select('core/block-editor').getSettings();
5092      return {
5093        colors: Object(external_lodash_["get"])(settings, ['colors'], DEFAULT_COLORS)
5094      };
5095    });
5096  };
5097  /**
5098   * Helper function used with `createHigherOrderComponent` to create
5099   * higher order components for managing color logic.
5100   *
5101   * @param {Array}    colorTypes       An array of color types (e.g. 'backgroundColor, borderColor).
5102   * @param {Function} withColorPalette A HOC for injecting the 'colors' prop into the WrappedComponent.
5103   *
5104   * @return {Component} The component that can be used as a HOC.
5105   */
5106  
5107  
5108  function createColorHOC(colorTypes, withColorPalette) {
5109    var colorMap = Object(external_lodash_["reduce"])(colorTypes, function (colorObject, colorType) {
5110      return Object(objectSpread["a" /* default */])({}, colorObject, Object(external_lodash_["isString"])(colorType) ? Object(defineProperty["a" /* default */])({}, colorType, Object(external_lodash_["kebabCase"])(colorType)) : colorType);
5111    }, {});
5112    return Object(external_this_wp_compose_["compose"])([withColorPalette, function (WrappedComponent) {
5113      return (
5114        /*#__PURE__*/
5115        function (_Component) {
5116          Object(inherits["a" /* default */])(_class, _Component);
5117  
5118          function _class(props) {
5119            var _this;
5120  
5121            Object(classCallCheck["a" /* default */])(this, _class);
5122  
5123            _this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(_class).call(this, props));
5124            _this.setters = _this.createSetters();
5125            _this.colorUtils = {
5126              getMostReadableColor: _this.getMostReadableColor.bind(Object(assertThisInitialized["a" /* default */])(_this))
5127            };
5128            _this.state = {};
5129            return _this;
5130          }
5131  
5132          Object(createClass["a" /* default */])(_class, [{
5133            key: "getMostReadableColor",
5134            value: function getMostReadableColor(colorValue) {
5135              var colors = this.props.colors;
5136              return utils_getMostReadableColor(colors, colorValue);
5137            }
5138          }, {
5139            key: "createSetters",
5140            value: function createSetters() {
5141              var _this2 = this;
5142  
5143              return Object(external_lodash_["reduce"])(colorMap, function (settersAccumulator, colorContext, colorAttributeName) {
5144                var upperFirstColorAttributeName = Object(external_lodash_["upperFirst"])(colorAttributeName);
5145                var customColorAttributeName = "custom".concat(upperFirstColorAttributeName);
5146                settersAccumulator["set".concat(upperFirstColorAttributeName)] = _this2.createSetColor(colorAttributeName, customColorAttributeName);
5147                return settersAccumulator;
5148              }, {});
5149            }
5150          }, {
5151            key: "createSetColor",
5152            value: function createSetColor(colorAttributeName, customColorAttributeName) {
5153              var _this3 = this;
5154  
5155              return function (colorValue) {
5156                var _this3$props$setAttri;
5157  
5158                var colorObject = utils_getColorObjectByColorValue(_this3.props.colors, colorValue);
5159  
5160                _this3.props.setAttributes((_this3$props$setAttri = {}, Object(defineProperty["a" /* default */])(_this3$props$setAttri, colorAttributeName, colorObject && colorObject.slug ? colorObject.slug : undefined), Object(defineProperty["a" /* default */])(_this3$props$setAttri, customColorAttributeName, colorObject && colorObject.slug ? undefined : colorValue), _this3$props$setAttri));
5161              };
5162            }
5163          }, {
5164            key: "render",
5165            value: function render() {
5166              return Object(external_this_wp_element_["createElement"])(WrappedComponent, Object(objectSpread["a" /* default */])({}, this.props, {
5167                colors: undefined
5168              }, this.state, this.setters, {
5169                colorUtils: this.colorUtils
5170              }));
5171            }
5172          }], [{
5173            key: "getDerivedStateFromProps",
5174            value: function getDerivedStateFromProps(_ref2, previousState) {
5175              var attributes = _ref2.attributes,
5176                  colors = _ref2.colors;
5177              return Object(external_lodash_["reduce"])(colorMap, function (newState, colorContext, colorAttributeName) {
5178                var colorObject = utils_getColorObjectByAttributeValues(colors, attributes[colorAttributeName], attributes["custom".concat(Object(external_lodash_["upperFirst"])(colorAttributeName))]);
5179                var previousColorObject = previousState[colorAttributeName];
5180                var previousColor = Object(external_lodash_["get"])(previousColorObject, ['color']);
5181                /**
5182                 * The "and previousColorObject" condition checks that a previous color object was already computed.
5183                 * At the start previousColorObject and colorValue are both equal to undefined
5184                 * bus as previousColorObject does not exist we should compute the object.
5185                 */
5186  
5187                if (previousColor === colorObject.color && previousColorObject) {
5188                  newState[colorAttributeName] = previousColorObject;
5189                } else {
5190                  newState[colorAttributeName] = Object(objectSpread["a" /* default */])({}, colorObject, {
5191                    class: getColorClassName(colorContext, colorObject.slug)
5192                  });
5193                }
5194  
5195                return newState;
5196              }, {});
5197            }
5198          }]);
5199  
5200          return _class;
5201        }(external_this_wp_element_["Component"])
5202      );
5203    }]);
5204  }
5205  /**
5206   * A higher-order component factory for creating a 'withCustomColors' HOC, which handles color logic
5207   * for class generation color value, retrieval and color attribute setting.
5208   *
5209   * Use this higher-order component to work with a custom set of colors.
5210   *
5211   * @example
5212   *
5213   * ```jsx
5214   * const CUSTOM_COLORS = [ { name: 'Red', slug: 'red', color: '#ff0000' }, { name: 'Blue', slug: 'blue', color: '#0000ff' } ];
5215   * const withCustomColors = createCustomColorsHOC( CUSTOM_COLORS );
5216   * // ...
5217   * export default compose(
5218   *     withCustomColors( 'backgroundColor', 'borderColor' ),
5219   *     MyColorfulComponent,
5220   * );
5221   * ```
5222   *
5223   * @param {Array} colorsArray The array of color objects (name, slug, color, etc... ).
5224   *
5225   * @return {Function} Higher-order component.
5226   */
5227  
5228  
5229  function createCustomColorsHOC(colorsArray) {
5230    return function () {
5231      var withColorPalette = with_colors_withCustomColorPalette(colorsArray);
5232  
5233      for (var _len = arguments.length, colorTypes = new Array(_len), _key = 0; _key < _len; _key++) {
5234        colorTypes[_key] = arguments[_key];
5235      }
5236  
5237      return Object(external_this_wp_compose_["createHigherOrderComponent"])(createColorHOC(colorTypes, withColorPalette), 'withCustomColors');
5238    };
5239  }
5240  /**
5241   * A higher-order component, which handles color logic for class generation color value, retrieval and color attribute setting.
5242   *
5243   * For use with the default editor/theme color palette.
5244   *
5245   * @example
5246   *
5247   * ```jsx
5248   * export default compose(
5249   *     withColors( 'backgroundColor', { textColor: 'color' } ),
5250   *     MyColorfulComponent,
5251   * );
5252   * ```
5253   *
5254   * @param {...(Object|string)} colorTypes The arguments can be strings or objects. If the argument is an object,
5255   *                                        it should contain the color attribute name as key and the color context as value.
5256   *                                        If the argument is a string the value should be the color attribute name,
5257   *                                        the color context is computed by applying a kebab case transform to the value.
5258   *                                        Color context represents the context/place where the color is going to be used.
5259   *                                        The class name of the color is generated using 'has' followed by the color name
5260   *                                        and ending with the color context all in kebab case e.g: has-green-background-color.
5261   *
5262   * @return {Function} Higher-order component.
5263   */
5264  
5265  function withColors() {
5266    var withColorPalette = with_colors_withEditorColorPalette();
5267  
5268    for (var _len2 = arguments.length, colorTypes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
5269      colorTypes[_key2] = arguments[_key2];
5270    }
5271  
5272    return Object(external_this_wp_compose_["createHigherOrderComponent"])(createColorHOC(colorTypes, withColorPalette), 'withColors');
5273  }
5274  
5275  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/colors/index.js
5276  
5277  
5278  
5279  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/utils.js
5280  /**
5281   * External dependencies
5282   */
5283  
5284  /**
5285   *  Returns the font size object based on an array of named font sizes and the namedFontSize and customFontSize values.
5286   *     If namedFontSize is undefined or not found in fontSizes an object with just the size value based on customFontSize is returned.
5287   *
5288   * @param {Array}   fontSizes               Array of font size objects containing at least the "name" and "size" values as properties.
5289   * @param {?string} fontSizeAttribute       Content of the font size attribute (slug).
5290   * @param {?number} customFontSizeAttribute Contents of the custom font size attribute (value).
5291   *
5292   * @return {?string} If fontSizeAttribute is set and an equal slug is found in fontSizes it returns the font size object for that slug.
5293   *                      Otherwise, an object with just the size value based on customFontSize is returned.
5294   */
5295  
5296  var utils_getFontSize = function getFontSize(fontSizes, fontSizeAttribute, customFontSizeAttribute) {
5297    if (fontSizeAttribute) {
5298      var fontSizeObject = Object(external_lodash_["find"])(fontSizes, {
5299        slug: fontSizeAttribute
5300      });
5301  
5302      if (fontSizeObject) {
5303        return fontSizeObject;
5304      }
5305    }
5306  
5307    return {
5308      size: customFontSizeAttribute
5309    };
5310  };
5311  /**
5312   * Returns a class based on fontSizeName.
5313   *
5314   * @param {string} fontSizeSlug    Slug of the fontSize.
5315   *
5316   * @return {string} String with the class corresponding to the fontSize passed.
5317   *                  The class is generated by appending 'has-' followed by fontSizeSlug in kebabCase and ending with '-font-size'.
5318   */
5319  
5320  function getFontSizeClass(fontSizeSlug) {
5321    if (!fontSizeSlug) {
5322      return;
5323    }
5324  
5325    return "has-".concat(Object(external_lodash_["kebabCase"])(fontSizeSlug), "-font-size");
5326  }
5327  
5328  // EXTERNAL MODULE: external {"this":["wp","components"]}
5329  var external_this_wp_components_ = __webpack_require__(3);
5330  
5331  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/font-size-picker.js
5332  /**
5333   * WordPress dependencies
5334   */
5335  
5336  
5337  /* harmony default export */ var font_size_picker = (Object(external_this_wp_data_["withSelect"])(function (select) {
5338    var _select$getSettings = select('core/block-editor').getSettings(),
5339        disableCustomFontSizes = _select$getSettings.disableCustomFontSizes,
5340        fontSizes = _select$getSettings.fontSizes;
5341  
5342    return {
5343      disableCustomFontSizes: disableCustomFontSizes,
5344      fontSizes: fontSizes
5345    };
5346  })(external_this_wp_components_["FontSizePicker"]));
5347  
5348  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/with-font-sizes.js
5349  
5350  
5351  
5352  
5353  
5354  
5355  
5356  
5357  
5358  /**
5359   * External dependencies
5360   */
5361  
5362  /**
5363   * WordPress dependencies
5364   */
5365  
5366  
5367  
5368  
5369  /**
5370   * Internal dependencies
5371   */
5372  
5373  
5374  /**
5375   * Higher-order component, which handles font size logic for class generation,
5376   * font size value retrieval, and font size change handling.
5377   *
5378   * @param {...(Object|string)} fontSizeNames The arguments should all be strings.
5379   *                                           Each string contains the font size
5380   *                                           attribute name e.g: 'fontSize'.
5381   *
5382   * @return {Function} Higher-order component.
5383   */
5384  
5385  /* harmony default export */ var with_font_sizes = (function () {
5386    for (var _len = arguments.length, fontSizeNames = new Array(_len), _key = 0; _key < _len; _key++) {
5387      fontSizeNames[_key] = arguments[_key];
5388    }
5389  
5390    /*
5391    * Computes an object whose key is the font size attribute name as passed in the array,
5392    * and the value is the custom font size attribute name.
5393    * Custom font size is automatically compted by appending custom followed by the font size attribute name in with the first letter capitalized.
5394    */
5395    var fontSizeAttributeNames = Object(external_lodash_["reduce"])(fontSizeNames, function (fontSizeAttributeNamesAccumulator, fontSizeAttributeName) {
5396      fontSizeAttributeNamesAccumulator[fontSizeAttributeName] = "custom".concat(Object(external_lodash_["upperFirst"])(fontSizeAttributeName));
5397      return fontSizeAttributeNamesAccumulator;
5398    }, {});
5399    return Object(external_this_wp_compose_["createHigherOrderComponent"])(Object(external_this_wp_compose_["compose"])([Object(external_this_wp_data_["withSelect"])(function (select) {
5400      var _select$getSettings = select('core/block-editor').getSettings(),
5401          fontSizes = _select$getSettings.fontSizes;
5402  
5403      return {
5404        fontSizes: fontSizes
5405      };
5406    }), function (WrappedComponent) {
5407      return (
5408        /*#__PURE__*/
5409        function (_Component) {
5410          Object(inherits["a" /* default */])(_class, _Component);
5411  
5412          function _class(props) {
5413            var _this;
5414  
5415            Object(classCallCheck["a" /* default */])(this, _class);
5416  
5417            _this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(_class).call(this, props));
5418            _this.setters = _this.createSetters();
5419            _this.state = {};
5420            return _this;
5421          }
5422  
5423          Object(createClass["a" /* default */])(_class, [{
5424            key: "createSetters",
5425            value: function createSetters() {
5426              var _this2 = this;
5427  
5428              return Object(external_lodash_["reduce"])(fontSizeAttributeNames, function (settersAccumulator, customFontSizeAttributeName, fontSizeAttributeName) {
5429                var upperFirstFontSizeAttributeName = Object(external_lodash_["upperFirst"])(fontSizeAttributeName);
5430                settersAccumulator["set".concat(upperFirstFontSizeAttributeName)] = _this2.createSetFontSize(fontSizeAttributeName, customFontSizeAttributeName);
5431                return settersAccumulator;
5432              }, {});
5433            }
5434          }, {
5435            key: "createSetFontSize",
5436            value: function createSetFontSize(fontSizeAttributeName, customFontSizeAttributeName) {
5437              var _this3 = this;
5438  
5439              return function (fontSizeValue) {
5440                var _this3$props$setAttri;
5441  
5442                var fontSizeObject = Object(external_lodash_["find"])(_this3.props.fontSizes, {
5443                  size: Number(fontSizeValue)
5444                });
5445  
5446                _this3.props.setAttributes((_this3$props$setAttri = {}, Object(defineProperty["a" /* default */])(_this3$props$setAttri, fontSizeAttributeName, fontSizeObject && fontSizeObject.slug ? fontSizeObject.slug : undefined), Object(defineProperty["a" /* default */])(_this3$props$setAttri, customFontSizeAttributeName, fontSizeObject && fontSizeObject.slug ? undefined : fontSizeValue), _this3$props$setAttri));
5447              };
5448            }
5449          }, {
5450            key: "render",
5451            value: function render() {
5452              return Object(external_this_wp_element_["createElement"])(WrappedComponent, Object(objectSpread["a" /* default */])({}, this.props, {
5453                fontSizes: undefined
5454              }, this.state, this.setters));
5455            }
5456          }], [{
5457            key: "getDerivedStateFromProps",
5458            value: function getDerivedStateFromProps(_ref, previousState) {
5459              var attributes = _ref.attributes,
5460                  fontSizes = _ref.fontSizes;
5461  
5462              var didAttributesChange = function didAttributesChange(customFontSizeAttributeName, fontSizeAttributeName) {
5463                if (previousState[fontSizeAttributeName]) {
5464                  // if new font size is name compare with the previous slug
5465                  if (attributes[fontSizeAttributeName]) {
5466                    return attributes[fontSizeAttributeName] !== previousState[fontSizeAttributeName].slug;
5467                  } // if font size is not named, update when the font size value changes.
5468  
5469  
5470                  return previousState[fontSizeAttributeName].size !== attributes[customFontSizeAttributeName];
5471                } // in this case we need to build the font size object
5472  
5473  
5474                return true;
5475              };
5476  
5477              if (!Object(external_lodash_["some"])(fontSizeAttributeNames, didAttributesChange)) {
5478                return null;
5479              }
5480  
5481              var newState = Object(external_lodash_["reduce"])(Object(external_lodash_["pickBy"])(fontSizeAttributeNames, didAttributesChange), function (newStateAccumulator, customFontSizeAttributeName, fontSizeAttributeName) {
5482                var fontSizeAttributeValue = attributes[fontSizeAttributeName];
5483                var fontSizeObject = utils_getFontSize(fontSizes, fontSizeAttributeValue, attributes[customFontSizeAttributeName]);
5484                newStateAccumulator[fontSizeAttributeName] = Object(objectSpread["a" /* default */])({}, fontSizeObject, {
5485                  class: getFontSizeClass(fontSizeAttributeValue)
5486                });
5487                return newStateAccumulator;
5488              }, {});
5489              return Object(objectSpread["a" /* default */])({}, previousState, newState);
5490            }
5491          }]);
5492  
5493          return _class;
5494        }(external_this_wp_element_["Component"])
5495      );
5496    }]), 'withFontSizes');
5497  });
5498  
5499  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/font-sizes/index.js
5500  
5501  
5502  
5503  
5504  // EXTERNAL MODULE: external {"this":["wp","i18n"]}
5505  var external_this_wp_i18n_ = __webpack_require__(1);
5506  
5507  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/alignment-toolbar/index.js
5508  
5509  
5510  
5511  /**
5512   * External dependencies
5513   */
5514  
5515  /**
5516   * WordPress dependencies
5517   */
5518  
5519  
5520  
5521  var DEFAULT_ALIGNMENT_CONTROLS = [{
5522    icon: 'editor-alignleft',
5523    title: Object(external_this_wp_i18n_["__"])('Align Text Left'),
5524    align: 'left'
5525  }, {
5526    icon: 'editor-aligncenter',
5527    title: Object(external_this_wp_i18n_["__"])('Align Text Center'),
5528    align: 'center'
5529  }, {
5530    icon: 'editor-alignright',
5531    title: Object(external_this_wp_i18n_["__"])('Align Text Right'),
5532    align: 'right'
5533  }];
5534  function AlignmentToolbar(props) {
5535    var value = props.value,
5536        onChange = props.onChange,
5537        _props$alignmentContr = props.alignmentControls,
5538        alignmentControls = _props$alignmentContr === void 0 ? DEFAULT_ALIGNMENT_CONTROLS : _props$alignmentContr,
5539        _props$label = props.label,
5540        label = _props$label === void 0 ? Object(external_this_wp_i18n_["__"])('Change text alignment') : _props$label,
5541        _props$isCollapsed = props.isCollapsed,
5542        isCollapsed = _props$isCollapsed === void 0 ? true : _props$isCollapsed;
5543  
5544    function applyOrUnset(align) {
5545      return function () {
5546        return onChange(value === align ? undefined : align);
5547      };
5548    }
5549  
5550    var activeAlignment = Object(external_lodash_["find"])(alignmentControls, function (control) {
5551      return control.align === value;
5552    });
5553    return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], {
5554      isCollapsed: isCollapsed,
5555      icon: activeAlignment ? activeAlignment.icon : 'editor-alignleft',
5556      label: label,
5557      controls: alignmentControls.map(function (control) {
5558        var align = control.align;
5559        var isActive = value === align;
5560        return Object(objectSpread["a" /* default */])({}, control, {
5561          isActive: isActive,
5562          onClick: applyOrUnset(align)
5563        });
5564      })
5565    });
5566  }
5567  /* harmony default export */ var alignment_toolbar = (AlignmentToolbar);
5568  
5569  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit/context.js
5570  
5571  
5572  
5573  /**
5574   * External dependencies
5575   */
5576  
5577  /**
5578   * WordPress dependencies
5579   */
5580  
5581  
5582  
5583  
5584  var _createContext = Object(external_this_wp_element_["createContext"])({
5585    name: '',
5586    isSelected: false,
5587    focusedElement: null,
5588    setFocusedElement: external_lodash_["noop"],
5589    clientId: null
5590  }),
5591      Consumer = _createContext.Consumer,
5592      Provider = _createContext.Provider;
5593  
5594  
5595  /**
5596   * A Higher Order Component used to inject BlockEdit context to the
5597   * wrapped component.
5598   *
5599   * @param {Function} mapContextToProps Function called on every context change,
5600   *                                     expected to return object of props to
5601   *                                     merge with the component's own props.
5602   *
5603   * @return {Component} Enhanced component with injected context as props.
5604   */
5605  
5606  var context_withBlockEditContext = function withBlockEditContext(mapContextToProps) {
5607    return Object(external_this_wp_compose_["createHigherOrderComponent"])(function (OriginalComponent) {
5608      return function (props) {
5609        return Object(external_this_wp_element_["createElement"])(Consumer, null, function (context) {
5610          return Object(external_this_wp_element_["createElement"])(OriginalComponent, Object(esm_extends["a" /* default */])({}, props, mapContextToProps(context, props)));
5611        });
5612      };
5613    }, 'withBlockEditContext');
5614  };
5615  /**
5616   * A Higher Order Component used to render conditionally the wrapped
5617   * component only when the BlockEdit has selected state set.
5618   *
5619   * @param {Component} OriginalComponent Component to wrap.
5620   *
5621   * @return {Component} Component which renders only when the BlockEdit is selected.
5622   */
5623  
5624  var ifBlockEditSelected = Object(external_this_wp_compose_["createHigherOrderComponent"])(function (OriginalComponent) {
5625    return function (props) {
5626      return Object(external_this_wp_element_["createElement"])(Consumer, null, function (_ref) {
5627        var isSelected = _ref.isSelected;
5628        return isSelected && Object(external_this_wp_element_["createElement"])(OriginalComponent, props);
5629      });
5630    };
5631  }, 'ifBlockEditSelected');
5632  
5633  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/autocomplete/index.js
5634  
5635  
5636  
5637  /**
5638   * External dependencies
5639   */
5640  
5641  /**
5642   * WordPress dependencies
5643   */
5644  
5645  
5646  
5647  
5648  /**
5649   * Internal dependencies
5650   */
5651  
5652  
5653  /**
5654   * Wrap the default Autocomplete component with one that
5655   * supports a filter hook for customizing its list of autocompleters.
5656   *
5657   * This function is exported for unit test.
5658   *
5659   * @param  {Function} Autocomplete Original component.
5660   * @return {Function}              Wrapped component
5661   */
5662  
5663  function withFilteredAutocompleters(Autocomplete) {
5664    return function (props) {
5665      var _props$completers = props.completers,
5666          completers = _props$completers === void 0 ? [] : _props$completers;
5667  
5668      if (Object(external_this_wp_hooks_["hasFilter"])('editor.Autocomplete.completers')) {
5669        completers = Object(external_this_wp_hooks_["applyFilters"])('editor.Autocomplete.completers', // Provide copies so filters may directly modify them.
5670        completers.map(external_lodash_["clone"]), props.blockName);
5671      }
5672  
5673      return Object(external_this_wp_element_["createElement"])(Autocomplete, Object(esm_extends["a" /* default */])({}, props, {
5674        completers: completers
5675      }));
5676    };
5677  }
5678  /**
5679   * @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/autocomplete/README.md
5680   */
5681  
5682  /* harmony default export */ var autocomplete = (Object(external_this_wp_compose_["compose"])([context_withBlockEditContext(function (_ref) {
5683    var name = _ref.name;
5684    return {
5685      blockName: name
5686    };
5687  }), withFilteredAutocompleters])(external_this_wp_components_["Autocomplete"]));
5688  
5689  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-alignment-toolbar/index.js
5690  
5691  
5692  
5693  /**
5694   * WordPress dependencies
5695   */
5696  
5697  
5698  
5699  
5700  /**
5701   * Internal dependencies
5702   */
5703  
5704  
5705  var BLOCK_ALIGNMENTS_CONTROLS = {
5706    left: {
5707      icon: 'align-left',
5708      title: Object(external_this_wp_i18n_["__"])('Align Left')
5709    },
5710    center: {
5711      icon: 'align-center',
5712      title: Object(external_this_wp_i18n_["__"])('Align Center')
5713    },
5714    right: {
5715      icon: 'align-right',
5716      title: Object(external_this_wp_i18n_["__"])('Align Right')
5717    },
5718    wide: {
5719      icon: 'align-wide',
5720      title: Object(external_this_wp_i18n_["__"])('Wide Width')
5721    },
5722    full: {
5723      icon: 'align-full-width',
5724      title: Object(external_this_wp_i18n_["__"])('Full Width')
5725    }
5726  };
5727  var DEFAULT_CONTROLS = ['left', 'center', 'right', 'wide', 'full'];
5728  var DEFAULT_CONTROL = 'center';
5729  var WIDE_CONTROLS = ['wide', 'full'];
5730  function BlockAlignmentToolbar(_ref) {
5731    var value = _ref.value,
5732        onChange = _ref.onChange,
5733        _ref$controls = _ref.controls,
5734        controls = _ref$controls === void 0 ? DEFAULT_CONTROLS : _ref$controls,
5735        _ref$isCollapsed = _ref.isCollapsed,
5736        isCollapsed = _ref$isCollapsed === void 0 ? true : _ref$isCollapsed,
5737        _ref$wideControlsEnab = _ref.wideControlsEnabled,
5738        wideControlsEnabled = _ref$wideControlsEnab === void 0 ? false : _ref$wideControlsEnab;
5739  
5740    function applyOrUnset(align) {
5741      return function () {
5742        return onChange(value === align ? undefined : align);
5743      };
5744    }
5745  
5746    var enabledControls = wideControlsEnabled ? controls : controls.filter(function (control) {
5747      return WIDE_CONTROLS.indexOf(control) === -1;
5748    });
5749    var activeAlignmentControl = BLOCK_ALIGNMENTS_CONTROLS[value];
5750    var defaultAlignmentControl = BLOCK_ALIGNMENTS_CONTROLS[DEFAULT_CONTROL];
5751    return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], {
5752      isCollapsed: isCollapsed,
5753      icon: activeAlignmentControl ? activeAlignmentControl.icon : defaultAlignmentControl.icon,
5754      label: Object(external_this_wp_i18n_["__"])('Change alignment'),
5755      controls: enabledControls.map(function (control) {
5756        return Object(objectSpread["a" /* default */])({}, BLOCK_ALIGNMENTS_CONTROLS[control], {
5757          isActive: value === control,
5758          onClick: applyOrUnset(control)
5759        });
5760      })
5761    });
5762  }
5763  /* harmony default export */ var block_alignment_toolbar = (Object(external_this_wp_compose_["compose"])(context_withBlockEditContext(function (_ref2) {
5764    var clientId = _ref2.clientId;
5765    return {
5766      clientId: clientId
5767    };
5768  }), Object(external_this_wp_data_["withSelect"])(function (select) {
5769    var _select = select('core/block-editor'),
5770        getSettings = _select.getSettings;
5771  
5772    var settings = getSettings();
5773    return {
5774      wideControlsEnabled: settings.alignWide
5775    };
5776  }))(BlockAlignmentToolbar));
5777  
5778  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-controls/index.js
5779  
5780  
5781  /**
5782   * WordPress dependencies
5783   */
5784  
5785  /**
5786   * Internal dependencies
5787   */
5788  
5789  
5790  
5791  var _createSlotFill = Object(external_this_wp_components_["createSlotFill"])('BlockControls'),
5792      Fill = _createSlotFill.Fill,
5793      Slot = _createSlotFill.Slot;
5794  
5795  var block_controls_BlockControlsFill = function BlockControlsFill(_ref) {
5796    var controls = _ref.controls,
5797        children = _ref.children;
5798    return Object(external_this_wp_element_["createElement"])(Fill, null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], {
5799      controls: controls
5800    }), children);
5801  };
5802  
5803  var BlockControls = ifBlockEditSelected(block_controls_BlockControlsFill);
5804  BlockControls.Slot = Slot;
5805  /* harmony default export */ var block_controls = (BlockControls);
5806  
5807  // EXTERNAL MODULE: ./node_modules/memize/index.js
5808  var memize = __webpack_require__(44);
5809  var memize_default = /*#__PURE__*/__webpack_require__.n(memize);
5810  
5811  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit/edit.js
5812  
5813  
5814  
5815  /**
5816   * External dependencies
5817   */
5818  
5819  /**
5820   * WordPress dependencies
5821   */
5822  
5823  
5824  
5825  var edit_Edit = function Edit(props) {
5826    var _props$attributes = props.attributes,
5827        attributes = _props$attributes === void 0 ? {} : _props$attributes,
5828        name = props.name;
5829    var blockType = Object(external_this_wp_blocks_["getBlockType"])(name);
5830  
5831    if (!blockType) {
5832      return null;
5833    } // Generate a class name for the block's editable form
5834  
5835  
5836    var generatedClassName = Object(external_this_wp_blocks_["hasBlockSupport"])(blockType, 'className', true) ? Object(external_this_wp_blocks_["getBlockDefaultClassName"])(name) : null;
5837    var className = classnames_default()(generatedClassName, attributes.className); // `edit` and `save` are functions or components describing the markup
5838    // with which a block is displayed. If `blockType` is valid, assign
5839    // them preferentially as the render value for the block.
5840  
5841    var Component = blockType.edit || blockType.save;
5842    return Object(external_this_wp_element_["createElement"])(Component, Object(esm_extends["a" /* default */])({}, props, {
5843      className: className
5844    }));
5845  };
5846  /* harmony default export */ var edit = (Object(external_this_wp_components_["withFilters"])('editor.BlockEdit')(edit_Edit));
5847  
5848  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-edit/index.js
5849  
5850  
5851  
5852  
5853  
5854  
5855  
5856  
5857  /**
5858   * External dependencies
5859   */
5860  
5861  /**
5862   * WordPress dependencies
5863   */
5864  
5865  
5866  /**
5867   * Internal dependencies
5868   */
5869  
5870  
5871  
5872  
5873  var block_edit_BlockEdit =
5874  /*#__PURE__*/
5875  function (_Component) {
5876    Object(inherits["a" /* default */])(BlockEdit, _Component);
5877  
5878    function BlockEdit() {
5879      var _this;
5880  
5881      Object(classCallCheck["a" /* default */])(this, BlockEdit);
5882  
5883      _this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockEdit).apply(this, arguments)); // It is important to return the same object if props haven't changed
5884      // to avoid  unnecessary rerenders.
5885      // See https://reactjs.org/docs/context.html#caveats.
5886  
5887      _this.propsToContext = memize_default()(_this.propsToContext.bind(Object(assertThisInitialized["a" /* default */])(_this)), {
5888        maxSize: 1
5889      });
5890      return _this;
5891    }
5892  
5893    Object(createClass["a" /* default */])(BlockEdit, [{
5894      key: "propsToContext",
5895      value: function propsToContext(name, isSelected, clientId, onFocus, onCaretVerticalPositionChange) {
5896        return {
5897          name: name,
5898          isSelected: isSelected,
5899          clientId: clientId,
5900          onFocus: onFocus,
5901          onCaretVerticalPositionChange: onCaretVerticalPositionChange
5902        };
5903      }
5904    }, {
5905      key: "render",
5906      value: function render() {
5907        var _this$props = this.props,
5908            name = _this$props.name,
5909            isSelected = _this$props.isSelected,
5910            clientId = _this$props.clientId,
5911            onFocus = _this$props.onFocus,
5912            onCaretVerticalPositionChange = _this$props.onCaretVerticalPositionChange;
5913        var value = this.propsToContext(name, isSelected, clientId, onFocus, onCaretVerticalPositionChange);
5914        return Object(external_this_wp_element_["createElement"])(Provider, {
5915          value: value
5916        }, Object(external_this_wp_element_["createElement"])(edit, this.props));
5917      }
5918    }]);
5919  
5920    return BlockEdit;
5921  }(external_this_wp_element_["Component"]);
5922  
5923  /* harmony default export */ var block_edit = (block_edit_BlockEdit);
5924  
5925  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-format-controls/index.js
5926  /**
5927   * WordPress dependencies
5928   */
5929  
5930  /**
5931   * Internal dependencies
5932   */
5933  
5934  
5935  
5936  var block_format_controls_createSlotFill = Object(external_this_wp_components_["createSlotFill"])('BlockFormatControls'),
5937      block_format_controls_Fill = block_format_controls_createSlotFill.Fill,
5938      block_format_controls_Slot = block_format_controls_createSlotFill.Slot;
5939  
5940  var BlockFormatControls = ifBlockEditSelected(block_format_controls_Fill);
5941  BlockFormatControls.Slot = block_format_controls_Slot;
5942  /* harmony default export */ var block_format_controls = (BlockFormatControls);
5943  
5944  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-icon/index.js
5945  
5946  
5947  /**
5948   * External dependencies
5949   */
5950  
5951  
5952  /**
5953   * WordPress dependencies
5954   */
5955  
5956  
5957  function BlockIcon(_ref) {
5958    var icon = _ref.icon,
5959        _ref$showColors = _ref.showColors,
5960        showColors = _ref$showColors === void 0 ? false : _ref$showColors,
5961        className = _ref.className;
5962  
5963    if (Object(external_lodash_["get"])(icon, ['src']) === 'block-default') {
5964      icon = {
5965        src: Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
5966          xmlns: "http://www.w3.org/2000/svg",
5967          viewBox: "0 0 24 24"
5968        }, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
5969          d: "M19 7h-1V5h-4v2h-4V5H6v2H5c-1.1 0-2 .9-2 2v10h18V9c0-1.1-.9-2-2-2zm0 10H5V9h14v8z"
5970        }))
5971      };
5972    }
5973  
5974    var renderedIcon = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Icon"], {
5975      icon: icon && icon.src ? icon.src : icon
5976    });
5977    var style = showColors ? {
5978      backgroundColor: icon && icon.background,
5979      color: icon && icon.foreground
5980    } : {};
5981    return Object(external_this_wp_element_["createElement"])("span", {
5982      style: style,
5983      className: classnames_default()('editor-block-icon block-editor-block-icon', className, {
5984        'has-colors': showColors
5985      })
5986    }, renderedIcon);
5987  }
5988  
5989  // EXTERNAL MODULE: external {"this":["wp","keycodes"]}
5990  var external_this_wp_keycodes_ = __webpack_require__(19);
5991  
5992  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-navigation/list.js
5993  
5994  
5995  /**
5996   * External dependencies
5997   */
5998  
5999  
6000  /**
6001   * WordPress dependencies
6002   */
6003  
6004  
6005  
6006  
6007  /**
6008   * Internal dependencies
6009   */
6010  
6011  
6012  function BlockNavigationList(_ref) {
6013    var blocks = _ref.blocks,
6014        selectedBlockClientId = _ref.selectedBlockClientId,
6015        selectBlock = _ref.selectBlock,
6016        showNestedBlocks = _ref.showNestedBlocks;
6017    return (
6018      /*
6019       * Disable reason: The `list` ARIA role is redundant but
6020       * Safari+VoiceOver won't announce the list otherwise.
6021       */
6022  
6023      /* eslint-disable jsx-a11y/no-redundant-roles */
6024      Object(external_this_wp_element_["createElement"])("ul", {
6025        className: "editor-block-navigation__list block-editor-block-navigation__list",
6026        role: "list"
6027      }, Object(external_lodash_["map"])(blocks, function (block) {
6028        var blockType = Object(external_this_wp_blocks_["getBlockType"])(block.name);
6029        var isSelected = block.clientId === selectedBlockClientId;
6030        return Object(external_this_wp_element_["createElement"])("li", {
6031          key: block.clientId
6032        }, Object(external_this_wp_element_["createElement"])("div", {
6033          className: "editor-block-navigation__item block-editor-block-navigation__item"
6034        }, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Button"], {
6035          className: classnames_default()('editor-block-navigation__item-button block-editor-block-navigation__item-button', {
6036            'is-selected': isSelected
6037          }),
6038          onClick: function onClick() {
6039            return selectBlock(block.clientId);
6040          }
6041        }, Object(external_this_wp_element_["createElement"])(BlockIcon, {
6042          icon: blockType.icon,
6043          showColors: true
6044        }), blockType.title, isSelected && Object(external_this_wp_element_["createElement"])("span", {
6045          className: "screen-reader-text"
6046        }, Object(external_this_wp_i18n_["__"])('(selected block)')))), showNestedBlocks && !!block.innerBlocks && !!block.innerBlocks.length && Object(external_this_wp_element_["createElement"])(BlockNavigationList, {
6047          blocks: block.innerBlocks,
6048          selectedBlockClientId: selectedBlockClientId,
6049          selectBlock: selectBlock,
6050          showNestedBlocks: true
6051        }));
6052      }))
6053      /* eslint-enable jsx-a11y/no-redundant-roles */
6054  
6055    );
6056  }
6057  
6058  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-navigation/index.js
6059  
6060  
6061  /**
6062   * External dependencies
6063   */
6064  
6065  /**
6066   * WordPress dependencies
6067   */
6068  
6069  
6070  
6071  
6072  
6073  /**
6074   * Internal dependencies
6075   */
6076  
6077  
6078  
6079  function BlockNavigation(_ref) {
6080    var rootBlock = _ref.rootBlock,
6081        rootBlocks = _ref.rootBlocks,
6082        selectedBlockClientId = _ref.selectedBlockClientId,
6083        selectBlock = _ref.selectBlock;
6084  
6085    if (!rootBlocks || rootBlocks.length === 0) {
6086      return null;
6087    }
6088  
6089    var hasHierarchy = rootBlock && (rootBlock.clientId !== selectedBlockClientId || rootBlock.innerBlocks && rootBlock.innerBlocks.length !== 0);
6090    return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["NavigableMenu"], {
6091      role: "presentation",
6092      className: "editor-block-navigation__container block-editor-block-navigation__container"
6093    }, Object(external_this_wp_element_["createElement"])("p", {
6094      className: "editor-block-navigation__label block-editor-block-navigation__label"
6095    }, Object(external_this_wp_i18n_["__"])('Block navigation')), hasHierarchy && Object(external_this_wp_element_["createElement"])(BlockNavigationList, {
6096      blocks: [rootBlock],
6097      selectedBlockClientId: selectedBlockClientId,
6098      selectBlock: selectBlock,
6099      showNestedBlocks: true
6100    }), !hasHierarchy && Object(external_this_wp_element_["createElement"])(BlockNavigationList, {
6101      blocks: rootBlocks,
6102      selectedBlockClientId: selectedBlockClientId,
6103      selectBlock: selectBlock
6104    }));
6105  }
6106  
6107  /* harmony default export */ var block_navigation = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_data_["withSelect"])(function (select) {
6108    var _select = select('core/block-editor'),
6109        getSelectedBlockClientId = _select.getSelectedBlockClientId,
6110        getBlockHierarchyRootClientId = _select.getBlockHierarchyRootClientId,
6111        getBlock = _select.getBlock,
6112        getBlocks = _select.getBlocks;
6113  
6114    var selectedBlockClientId = getSelectedBlockClientId();
6115    return {
6116      rootBlocks: getBlocks(),
6117      rootBlock: selectedBlockClientId ? getBlock(getBlockHierarchyRootClientId(selectedBlockClientId)) : null,
6118      selectedBlockClientId: selectedBlockClientId
6119    };
6120  }), Object(external_this_wp_data_["withDispatch"])(function (dispatch, _ref2) {
6121    var _ref2$onSelect = _ref2.onSelect,
6122        onSelect = _ref2$onSelect === void 0 ? external_lodash_["noop"] : _ref2$onSelect;
6123    return {
6124      selectBlock: function selectBlock(clientId) {
6125        dispatch('core/block-editor').selectBlock(clientId);
6126        onSelect(clientId);
6127      }
6128    };
6129  }))(BlockNavigation));
6130  
6131  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-navigation/dropdown.js
6132  
6133  
6134  
6135  /**
6136   * WordPress dependencies
6137   */
6138  
6139  
6140  
6141  
6142  /**
6143   * Internal dependencies
6144   */
6145  
6146  
6147  var MenuIcon = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
6148    xmlns: "http://www.w3.org/2000/svg",
6149    viewBox: "0 0 24 24",
6150    width: "20",
6151    height: "20"
6152  }, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
6153    d: "M5 5H3v2h2V5zm3 8h11v-2H8v2zm9-8H6v2h11V5zM7 11H5v2h2v-2zm0 8h2v-2H7v2zm3-2v2h11v-2H10z"
6154  }));
6155  
6156  function BlockNavigationDropdown(_ref) {
6157    var hasBlocks = _ref.hasBlocks,
6158        isDisabled = _ref.isDisabled;
6159    var isEnabled = hasBlocks && !isDisabled;
6160    return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Dropdown"], {
6161      contentClassName: "editor-block-navigation__popover block-editor-block-navigation__popover",
6162      renderToggle: function renderToggle(_ref2) {
6163        var isOpen = _ref2.isOpen,
6164            onToggle = _ref2.onToggle;
6165        return Object(external_this_wp_element_["createElement"])(external_this_wp_element_["Fragment"], null, isEnabled && Object(external_this_wp_element_["createElement"])(external_this_wp_components_["KeyboardShortcuts"], {
6166          bindGlobal: true,
6167          shortcuts: Object(defineProperty["a" /* default */])({}, external_this_wp_keycodes_["rawShortcut"].access('o'), onToggle)
6168        }), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["IconButton"], {
6169          icon: MenuIcon,
6170          "aria-expanded": isOpen,
6171          onClick: isEnabled ? onToggle : undefined,
6172          label: Object(external_this_wp_i18n_["__"])('Block navigation'),
6173          className: "editor-block-navigation block-editor-block-navigation",
6174          shortcut: external_this_wp_keycodes_["displayShortcut"].access('o'),
6175          "aria-disabled": !isEnabled
6176        }));
6177      },
6178      renderContent: function renderContent(_ref4) {
6179        var onClose = _ref4.onClose;
6180        return Object(external_this_wp_element_["createElement"])(block_navigation, {
6181          onSelect: onClose
6182        });
6183      }
6184    });
6185  }
6186  
6187  /* harmony default export */ var dropdown = (Object(external_this_wp_data_["withSelect"])(function (select) {
6188    return {
6189      hasBlocks: !!select('core/block-editor').getBlockCount()
6190    };
6191  })(BlockNavigationDropdown));
6192  
6193  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-vertical-alignment-toolbar/icons.js
6194  
6195  
6196  /**
6197   * WordPress dependencies
6198   */
6199  
6200  var alignBottom = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
6201    xmlns: "http://www.w3.org/2000/svg",
6202    width: "20",
6203    height: "20",
6204    viewBox: "0 0 24 24"
6205  }, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
6206    fill: "none",
6207    d: "M0 0h24v24H0V0z"
6208  }), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
6209    d: "M16 13h-3V3h-2v10H8l4 4 4-4zM4 19v2h16v-2H4z"
6210  }));
6211  var alignCenter = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
6212    xmlns: "http://www.w3.org/2000/svg",
6213    width: "20",
6214    height: "20",
6215    viewBox: "0 0 24 24"
6216  }, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
6217    fill: "none",
6218    d: "M0 0h24v24H0V0z"
6219  }), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
6220    d: "M8 19h3v4h2v-4h3l-4-4-4 4zm8-14h-3V1h-2v4H8l4 4 4-4zM4 11v2h16v-2H4z"
6221  }));
6222  var alignTop = Object(external_this_wp_element_["createElement"])(external_this_wp_components_["SVG"], {
6223    xmlns: "http://www.w3.org/2000/svg",
6224    width: "20",
6225    height: "20",
6226    viewBox: "0 0 24 24"
6227  }, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
6228    fill: "none",
6229    d: "M0 0h24v24H0V0z"
6230  }), Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Path"], {
6231    d: "M8 11h3v10h2V11h3l-4-4-4 4zM4 3v2h16V3H4z"
6232  }));
6233  
6234  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-vertical-alignment-toolbar/index.js
6235  
6236  
6237  
6238  /**
6239   * WordPress dependencies
6240   */
6241  
6242  
6243  /**
6244   * Internal dependencies
6245   */
6246  
6247  
6248  var block_vertical_alignment_toolbar_BLOCK_ALIGNMENTS_CONTROLS = {
6249    top: {
6250      icon: alignTop,
6251      title: Object(external_this_wp_i18n_["_x"])('Vertically Align Top', 'Block vertical alignment setting')
6252    },
6253    center: {
6254      icon: alignCenter,
6255      title: Object(external_this_wp_i18n_["_x"])('Vertically Align Middle', 'Block vertical alignment setting')
6256    },
6257    bottom: {
6258      icon: alignBottom,
6259      title: Object(external_this_wp_i18n_["_x"])('Vertically Align Bottom', 'Block vertical alignment setting')
6260    }
6261  };
6262  var block_vertical_alignment_toolbar_DEFAULT_CONTROLS = ['top', 'center', 'bottom'];
6263  var block_vertical_alignment_toolbar_DEFAULT_CONTROL = 'top';
6264  function BlockVerticalAlignmentToolbar(_ref) {
6265    var value = _ref.value,
6266        onChange = _ref.onChange,
6267        _ref$controls = _ref.controls,
6268        controls = _ref$controls === void 0 ? block_vertical_alignment_toolbar_DEFAULT_CONTROLS : _ref$controls,
6269        _ref$isCollapsed = _ref.isCollapsed,
6270        isCollapsed = _ref$isCollapsed === void 0 ? true : _ref$isCollapsed;
6271  
6272    function applyOrUnset(align) {
6273      return function () {
6274        return onChange(value === align ? undefined : align);
6275      };
6276    }
6277  
6278    var activeAlignment = block_vertical_alignment_toolbar_BLOCK_ALIGNMENTS_CONTROLS[value];
6279    var defaultAlignmentControl = block_vertical_alignment_toolbar_BLOCK_ALIGNMENTS_CONTROLS[block_vertical_alignment_toolbar_DEFAULT_CONTROL];
6280    return Object(external_this_wp_element_["createElement"])(external_this_wp_components_["Toolbar"], {
6281      isCollapsed: isCollapsed,
6282      icon: activeAlignment ? activeAlignment.icon : defaultAlignmentControl.icon,
6283      label: Object(external_this_wp_i18n_["_x"])('Change vertical alignment', 'Block vertical alignment setting label'),
6284      controls: controls.map(function (control) {
6285        return Object(objectSpread["a" /* default */])({}, block_vertical_alignment_toolbar_BLOCK_ALIGNMENTS_CONTROLS[control], {
6286          isActive: value === control,
6287          onClick: applyOrUnset(control)
6288        });
6289      })
6290    });
6291  }
6292  /**
6293   * @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/block-vertical-alignment-toolbar/README.md
6294   */
6295  
6296  /* harmony default export */ var block_vertical_alignment_toolbar = (BlockVerticalAlignmentToolbar);
6297  
6298  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/media-upload/check.js
6299  /**
6300   * WordPress dependencies
6301   */
6302  
6303  function MediaUploadCheck(_ref) {
6304    var hasUploadPermissions = _ref.hasUploadPermissions,
6305        _ref$fallback = _ref.fallback,
6306        fallback = _ref$fallback === void 0 ? null : _ref$fallback,
6307        children = _ref.children;
6308    return hasUploadPermissions ? children : fallback;
6309  }
6310  /**
6311   * @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/media-upload/README.md
6312   */
6313  
6314  /* harmony default export */ var check = (Object(external_this_wp_data_["withSelect"])(function (select) {
6315    var _select = select('core/block-editor'),
6316        getSettings = _select.getSettings;
6317  
6318    return {
6319      hasUploadPermissions: !!getSettings().__experimentalMediaUpload
6320    };
6321  })(MediaUploadCheck));
6322  
6323  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/components/block-drop-zone/index.js
6324  
6325  
6326  
6327  
6328  
6329  
6330  
6331  
6332  /**
6333   * External dependencies
6334   */
6335  
6336  /**
6337   * WordPress dependencies
6338   */
6339  
6340  
6341  
6342  
6343  
6344  
6345  /**
6346   * Internal dependencies
6347   */
6348  
6349  
6350  
6351  var parseDropEvent = function parseDropEvent(event) {
6352    var result = {
6353      srcRootClientId: null,
6354      srcClientId: null,
6355      srcIndex: null,
6356      type: null
6357    };
6358  
6359    if (!event.dataTransfer) {
6360      return result;
6361    }
6362  
6363    try {
6364      result = Object.assign(result, JSON.parse(event.dataTransfer.getData('text')));
6365    } catch (err) {
6366      return result;
6367    }
6368  
6369    return result;
6370  };
6371  
6372  var block_drop_zone_BlockDropZone =
6373  /*#__PURE__*/
6374  function (_Component) {
6375    Object(inherits["a" /* default */])(BlockDropZone, _Component);
6376  
6377    function BlockDropZone() {
6378      var _this;
6379  
6380      Object(classCallCheck["a" /* default */])(this, BlockDropZone);
6381  
6382      _this = Object(possibleConstructorReturn["a" /* default */])(this, Object(getPrototypeOf["a" /* default */])(BlockDropZone).apply(this, arguments));
6383      _this.onFilesDrop = _this.onFilesDrop.bind(Object(assertThisInitialized["a" /* default */])(_this));
6384      _this.onHTMLDrop = _this.onHTMLDrop.bind(Object(assertThisInitialized["a" /* default */])(_this));
6385      _this.onDrop = _this.onDrop.bind(Object(assertThisInitialized["a" /* default */])(_this));
6386      return _this;
6387    }
6388  
6389    Object(createClass["a" /* default */])(BlockDropZone, [{
6390      key: "getInsertIndex",
6391      value: function getInsertIndex(position) {
6392        var _this$props = this.props,
6393            clientId = _this$props.clientId,
6394            rootClientId = _this$props.rootClientId,
6395            getBlockIndex = _this$props.getBlockIndex;
6396  
6397        if (clientId !== undefined) {
6398          var index = getBlockIndex(clientId, rootClientId);
6399          return position && position.y === 'top' ? index : index + 1;
6400        }
6401      }
6402    }, {
6403      key: "onFilesDrop",
6404      value: function onFilesDrop(files, position) {
6405        var transformation = Object(external_this_wp_blocks_["findTransform"])(Object(external_this_wp_blocks_["getBlockTransforms"])('from'), function (transform) {
6406          return transform.type === 'files' && transform.isMatch(files);
6407        });
6408  
6409        if (transformation) {
6410          var insertIndex = this.getInsertIndex(position);
6411          var blocks = transformation.transform(files, this.props.updateBlockAttributes);
6412          this.props.insertBlocks(blocks, insertIndex);
6413        }
6414      }
6415    }, {
6416      key: "onHTMLDrop",
6417      value: function onHTMLDrop(HTML, position) {
6418        var blocks = Object(external_this_wp_blocks_["pasteHandler"])({
6419          HTML: HTML,
6420          mode: 'BLOCKS'
6421        });
6422  
6423        if (blocks.length) {
6424          this.props.insertBlocks(blocks, this.getInsertIndex(position));
6425        }
6426      }
6427    }, {
6428      key: "onDrop",
6429      value: function onDrop(event, position) {
6430        var _this$props2 = this.props,
6431            dstRootClientId = _this$props2.rootClientId,
6432            dstClientId = _this$props2.clientId,
6433            getClientIdsOfDescendants = _this$props2.getClientIdsOfDescendants,
6434            getBlockIndex = _this$props2.getBlockIndex;
6435  
6436        var _parseDropEvent = parseDropEvent(event),
6437            srcRootClientId = _parseDropEvent.srcRootClientId,
6438            srcClientId = _parseDropEvent.srcClientId,
6439            srcIndex = _parseDropEvent.srcIndex,
6440            type = _parseDropEvent.type;
6441  
6442        var isBlockDropType = function isBlockDropType(dropType) {
6443          return dropType === 'block';
6444        };
6445  
6446        var isSameLevel = function isSameLevel(srcRoot, dstRoot) {
6447          // Note that rootClientId of top-level blocks will be undefined OR a void string,
6448          // so we also need to account for that case separately.
6449          return srcRoot === dstRoot || !srcRoot === true && !dstRoot === true;
6450        };
6451  
6452        var isSameBlock = function isSameBlock(src, dst) {
6453          return src === dst;
6454        };
6455  
6456        var isSrcBlockAnAncestorOfDstBlock = function isSrcBlockAnAncestorOfDstBlock(src, dst) {
6457          return getClientIdsOfDescendants([src]).some(function (id) {
6458            return id === dst;
6459          });
6460        };
6461  
6462        if (!isBlockDropType(type) || isSameBlock(srcClientId, dstClientId) || isSrcBlockAnAncestorOfDstBlock(srcClientId, dstClientId || dstRootClientId)) {
6463          return;
6464        }
6465  
6466        var dstIndex = dstClientId ? getBlockIndex(dstClientId, dstRootClientId) : undefined;
6467        var positionIndex = this.getInsertIndex(position); // If the block is kept at the same level and moved downwards,
6468        // subtract to account for blocks shifting upward to occupy its old position.
6469  
6470        var insertIndex = dstIndex && srcIndex < dstIndex && isSameLevel(srcRootClientId, dstRootClientId) ? positionIndex - 1 : positionIndex;
6471        this.props.moveBlockToPosition(srcClientId, srcRootClientId, insertIndex);
6472      }
6473    }, {
6474      key: "render",
6475      value: function render() {
6476        var isLockedAll = this.props.isLockedAll;
6477  
6478        if (isLockedAll) {
6479          return null;
6480        }
6481  
6482        var index = this.getInsertIndex();
6483        var isAppender = index === undefined;
6484        return Object(external_this_wp_element_["createElement"])(check, null, Object(external_this_wp_element_["createElement"])(external_this_wp_components_["DropZone"], {
6485          className: classnames_default()('editor-block-drop-zone block-editor-block-drop-zone', {
6486            'is-appender': isAppender
6487          }),
6488          onFilesDrop: this.onFilesDrop,
6489          onHTMLDrop: this.onHTMLDrop,
6490          onDrop: this.onDrop
6491        }));
6492      }
6493    }]);
6494  
6495    return BlockDropZone;
6496  }(external_this_wp_element_["Component"]);
6497  
6498  /* harmony default export */ var block_drop_zone = (Object(external_this_wp_compose_["compose"])(Object(external_this_wp_data_["withDispatch"])(function (dispatch, ownProps) {
6499    var _dispatch = dispatch('core/block-editor'),
6500        _insertBlocks = _dispatch.insertBlocks,
6501        _updateBlockAttributes = _dispatch.updateBlockAttributes,
6502        _moveBlockToPosition = _dispatch.moveBlockToPosition;
6503  
6504    return {
6505      insertBlocks: function insertBlocks(blocks, index) {
6506        var rootClientId = ownProps.rootClientId;
6507  
6508        _insertBlocks(blocks, index, rootClientId);
6509      },
6510      updateBlockAttributes: function updateBlockAttributes() {
6511        _updateBlockAttributes.apply(void 0, arguments);
6512      },
6513      moveBlockToPosition: function moveBlockToPosition(srcClientId, srcRootClientId, dstIndex) {
6514        var dstRootClientId = ownProps.rootClientId;
6515  
6516        _moveBlockToPosition(srcClientId, srcRootClientId, dstRootClientId, dstIndex);
6517      }
6518    };
6519  }), Object(external_this_wp_data_["withSelect"])(function (select, _ref) {
6520    var rootClientId = _ref.rootClientId;
6521  
6522    var _select = select('core/block-editor'),
6523        getClientIdsOfDescendants = _select.getClientIdsOfDescendants,
6524        getTemplateLock = _select.getTemplateLock,
6525        getBlockIndex = _select.getBlockIndex;
6526  
6527    return {
6528      isLockedAll: getTemplateLock(rootClientId) === 'all',
6529      getClientIdsOfDescendants: getClientIdsOfDescendants,
6530      getBlockIndex: getBlockIndex
6531    };
6532  }), Object(external_this_wp_components_["withFilters"])('editor.BlockDropZone'))(block_drop_zone_BlockDropZone));
6533  
6534  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js + 2 modules
6535  var toConsumableArray = __webpack_require__(17);
6536  
6537  // EXTERNAL MODULE: ./node_modules/dom-scroll-into-view/lib/index.js
6538  var lib = __webpack_require__(68);
6539  var lib_default = /*#__PURE__*/__webpack_require__.n(lib);
6540  
6541  // EXTERNAL MODULE: external {"this":["wp","url"]}
6542  var external_this_wp_url_ = __webpack_require__(26);
6543  
6544  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 1 modules
6545  var slicedToArray = __webpack_require__(23);
6546  
6547  // EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js + 1 modules
6548  var objectWithoutProperties = __webpack_require__(21);
6549  
6550  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/defaults.js
6551  /**
6552   * WordPress dependencies
6553   */
6554  
6555  var PREFERENCES_DEFAULTS = {
6556    insertUsage: {}
6557  };
6558  /**
6559   * The default editor settings
6560   *
6561   *  alignWide                              boolean       Enable/Disable Wide/Full Alignments
6562   *  availableLegacyWidgets                 Array         Array of objects representing the legacy widgets available.
6563   *  colors                                 Array         Palette colors
6564   *  disableCustomColors                    boolean       Whether or not the custom colors are disabled
6565   *  fontSizes                              Array         Available font sizes
6566   *  disableCustomFontSizes                 boolean       Whether or not the custom font sizes are disabled
6567   *  imageSizes                             Array         Available image sizes
6568   *  maxWidth                               number        Max width to constraint resizing
6569   *  allowedBlockTypes                      boolean|Array Allowed block types
6570   *  hasFixedToolbar                        boolean       Whether or not the editor toolbar is fixed
6571   *  hasPermissionsToManageWidgets          boolean       Whether or not the user is able to manage widgets.
6572   *  focusMode                              boolean       Whether the focus mode is enabled or not
6573   *  styles                                 Array         Editor Styles
6574   *  isRTL                                  boolean       Whether the editor is in RTL mode
6575   *  bodyPlaceholder                        string        Empty post placeholder
6576   *  titlePlaceholder                       string        Empty title placeholder
6577   *  codeEditingEnabled                     string        Whether or not the user can switch to the code editor
6578   *  showInserterHelpPanel                  boolean       Whether or not the inserter help panel is shown
6579   *  __experimentalCanUserUseUnfilteredHTML string        Whether the user should be able to use unfiltered HTML or the HTML should be filtered e.g., to remove elements considered insecure like iframes.
6580   *  __experimentalEnableLegacyWidgetBlock  boolean       Whether the user has enabled the Legacy Widget Block
6581   *  __experimentalEnableMenuBlock          boolean       Whether the user has enabled the Menu Block
6582   *  __experimentalBlockDirectory           boolean       Whether the user has enabled the Block Directory
6583   */
6584  
6585  var SETTINGS_DEFAULTS = {
6586    alignWide: false,
6587    colors: [{
6588      name: Object(external_this_wp_i18n_["__"])('Pale pink'),
6589      slug: 'pale-pink',
6590      color: '#f78da7'
6591    }, {
6592      name: Object(external_this_wp_i18n_["__"])('Vivid red'),
6593      slug: 'vivid-red',
6594      color: '#cf2e2e'
6595    }, {
6596      name: Object(external_this_wp_i18n_["__"])('Luminous vivid orange'),
6597      slug: 'luminous-vivid-orange',
6598      color: '#ff6900'
6599    }, {
6600      name: Object(external_this_wp_i18n_["__"])('Luminous vivid amber'),
6601      slug: 'luminous-vivid-amber',
6602      color: '#fcb900'
6603    }, {
6604      name: Object(external_this_wp_i18n_["__"])('Light green cyan'),
6605      slug: 'light-green-cyan',
6606      color: '#7bdcb5'
6607    }, {
6608      name: Object(external_this_wp_i18n_["__"])('Vivid green cyan'),
6609      slug: 'vivid-green-cyan',
6610      color: '#00d084'
6611    }, {
6612      name: Object(external_this_wp_i18n_["__"])('Pale cyan blue'),
6613      slug: 'pale-cyan-blue',
6614      color: '#8ed1fc'
6615    }, {
6616      name: Object(external_this_wp_i18n_["__"])('Vivid cyan blue'),
6617      slug: 'vivid-cyan-blue',
6618      color: '#0693e3'
6619    }, {
6620      name: Object(external_this_wp_i18n_["__"])('Vivid purple'),
6621      slug: 'vivid-purple',
6622      color: '#9b51e0'
6623    }, {
6624      name: Object(external_this_wp_i18n_["__"])('Very light gray'),
6625      slug: 'very-light-gray',
6626      color: '#eeeeee'
6627    }, {
6628      name: Object(external_this_wp_i18n_["__"])('Cyan bluish gray'),
6629      slug: 'cyan-bluish-gray',
6630      color: '#abb8c3'
6631    }, {
6632      name: Object(external_this_wp_i18n_["__"])('Very dark gray'),
6633      slug: 'very-dark-gray',
6634      color: '#313131'
6635    }],
6636    fontSizes: [{
6637      name: Object(external_this_wp_i18n_["_x"])('Small', 'font size name'),
6638      size: 13,
6639      slug: 'small'
6640    }, {
6641      name: Object(external_this_wp_i18n_["_x"])('Normal', 'font size name'),
6642      size: 16,
6643      slug: 'normal'
6644    }, {
6645      name: Object(external_this_wp_i18n_["_x"])('Medium', 'font size name'),
6646      size: 20,
6647      slug: 'medium'
6648    }, {
6649      name: Object(external_this_wp_i18n_["_x"])('Large', 'font size name'),
6650      size: 36,
6651      slug: 'large'
6652    }, {
6653      name: Object(external_this_wp_i18n_["_x"])('Huge', 'font size name'),
6654      size: 48,
6655      slug: 'huge'
6656    }],
6657    imageSizes: [{
6658      slug: 'thumbnail',
6659      label: Object(external_this_wp_i18n_["__"])('Thumbnail')
6660    }, {
6661      slug: 'medium',
6662      label: Object(external_this_wp_i18n_["__"])('Medium')
6663    }, {
6664      slug: 'large',
6665      label: Object(external_this_wp_i18n_["__"])('Large')
6666    }, {
6667      slug: 'full',
6668      label: Object(external_this_wp_i18n_["__"])('Full Size')
6669    }],
6670    // This is current max width of the block inner area
6671    // It's used to constraint image resizing and this value could be overridden later by themes
6672    maxWidth: 580,
6673    // Allowed block types for the editor, defaulting to true (all supported).
6674    allowedBlockTypes: true,
6675    // Maximum upload size in bytes allowed for the site.
6676    maxUploadFileSize: 0,
6677    // List of allowed mime types and file extensions.
6678    allowedMimeTypes: null,
6679    availableLegacyWidgets: {},
6680    hasPermissionsToManageWidgets: false,
6681    showInserterHelpPanel: true,
6682    __experimentalCanUserUseUnfilteredHTML: false,
6683    __experimentalEnableLegacyWidgetBlock: false,
6684    __experimentalEnableMenuBlock: false,
6685    __experimentalBlockDirectory: false
6686  };
6687  
6688  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/array.js
6689  
6690  
6691  /**
6692   * External dependencies
6693   */
6694  
6695  /**
6696   * Insert one or multiple elements into a given position of an array.
6697   *
6698   * @param {Array}  array    Source array.
6699   * @param {*}      elements Elements to insert.
6700   * @param {number} index    Insert Position.
6701   *
6702   * @return {Array}          Result.
6703   */
6704  
6705  function insertAt(array, elements, index) {
6706    return [].concat(Object(toConsumableArray["a" /* default */])(array.slice(0, index)), Object(toConsumableArray["a" /* default */])(Object(external_lodash_["castArray"])(elements)), Object(toConsumableArray["a" /* default */])(array.slice(index)));
6707  }
6708  /**
6709   * Moves an element in an array.
6710   *
6711   * @param {Array}  array Source array.
6712   * @param {number} from  Source index.
6713   * @param {number} to    Destination index.
6714   * @param {number} count Number of elements to move.
6715   *
6716   * @return {Array}       Result.
6717   */
6718  
6719  function moveTo(array, from, to) {
6720    var count = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
6721  
6722    var withoutMovedElements = Object(toConsumableArray["a" /* default */])(array);
6723  
6724    withoutMovedElements.splice(from, count);
6725    return insertAt(withoutMovedElements, array.slice(from, from + count), to);
6726  }
6727  
6728  // CONCATENATED MODULE: ./node_modules/@wordpress/block-editor/build-module/store/reducer.js
6729  
6730  
6731  
6732  
6733  
6734  /**
6735   * External dependencies
6736   */
6737  
6738  /**
6739   * WordPress dependencies
6740   */
6741  
6742  
6743  
6744  /**
6745   * Internal dependencies
6746   */
6747  
6748  
6749  
6750  /**
6751   * Given an array of blocks, returns an object where each key is a nesting
6752   * context, the value of which is an array of block client IDs existing within
6753   * that nesting context.
6754   *
6755   * @param {Array}   blocks       Blocks to map.
6756   * @param {?string} rootClientId Assumed root client ID.
6757   *
6758   * @return {Object} Block order map object.
6759   */
6760  
6761  function mapBlockOrder(blocks) {
6762    var rootClientId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
6763  
6764    var result = Object(defineProperty["a" /* default */])({}, rootClientId, []);
6765  
6766    blocks.forEach(function (block) {
6767      var clientId = block.clientId,
6768          innerBlocks = block.innerBlocks;
6769      result[rootClientId].push(clientId);
6770      Object.assign(result, mapBlockOrder(innerBlocks, clientId));
6771    });
6772    return result;
6773  }
6774  /**
6775   * Given an array of blocks, returns an object where each key contains
6776   * the clientId of the block and the value is the parent of the block.
6777   *
6778   * @param {Array}   blocks       Blocks to map.
6779   * @param {?string} rootClientId Assumed root client ID.
6780   *
6781   * @return {Object} Block order map object.
6782   */
6783  
6784  
6785  function mapBlockParents(blocks) {
6786    var rootClientId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
6787    return blocks.reduce(function (result, block) {
6788      return Object.assign(result, Object(defineProperty["a" /* default */])({}, block.clientId, rootClientId), mapBlockParents(block.innerBlocks, block.clientId));
6789    }, {});
6790  }
6791  /**
6792   * Helper method to iterate through all blocks, recursing into inner blocks,
6793   * applying a transformation function to each one.
6794   * Returns a flattened object with the transformed blocks.
6795   *
6796   * @param {Array} blocks Blocks to flatten.
6797   * @param {Function} transform Transforming function to be applied to each block.
6798   *
6799   * @return {Object} Flattened object.
6800   */
6801  
6802  
6803  function flattenBlocks(blocks) {
6804    var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : external_lodash_["identity"];
6805    var result = {};
6806  
6807    var stack = Object(toConsumableArray["a" /* default */])(blocks);
6808  
6809    while (stack.length) {
6810      var _stack$shift = stack.shift(),
6811          innerBlocks = _stack$shift.innerBlocks,
6812          block = Object(objectWithoutProperties["a" /* default */])(_stack$shift, ["innerBlocks"]);
6813  
6814      stack.push.apply(stack, Object(toConsumableArray["a" /* default */])(innerBlocks));
6815      result[block.clientId] = transform(block);
6816    }
6817  
6818    return result;
6819  }
6820  /**
6821   * Given an array of blocks, returns an object containing all blocks, without
6822   * attributes, recursing into inner blocks. Keys correspond to the block client
6823   * ID, the value of which is the attributes object.
6824   *
6825   * @param {Array} blocks Blocks to flatten.
6826   *
6827   * @return {Object} Flattened block attributes object.
6828   */
6829  
6830  
6831  function getFlattenedBlocksWithoutAttributes(blocks) {
6832    return flattenBlocks(blocks, function (block) {
6833      return Object(external_lodash_["omit"])(block, 'attributes');
6834    });
6835  }
6836  /**
6837   * Given an array of blocks, returns an object containing all block attributes,
6838   * recursing into inner blocks. Keys correspond to the block client ID, the
6839   * value of which is the attributes object.
6840   *
6841   * @param {Array} blocks Blocks to flatten.
6842   *
6843   * @return {Object} Flattened block attributes object.
6844   */
6845  
6846  
6847  function getFlattenedBlockAttributes(blocks) {
6848    return flattenBlocks(blocks, function (block) {
6849      return block.attributes;
6850    });
6851  }
6852  /**
6853   * Given a block order map object, returns *all* of the block client IDs that are
6854   * a descendant of the given root client ID.
6855   *
6856   * Calling this with `rootClientId` set to `''` results in a list of client IDs
6857   * that are in the post. That is, it excludes blocks like fetched reusable
6858   * blocks which are stored into state but not visible.
6859   *
6860   * @param {Object}  blocksOrder  Object that maps block client IDs to a list of
6861   *                               nested block client IDs.
6862   * @param {?string} rootClientId The root client ID to search. Defaults to ''.
6863   *
6864   * @return {Array} List of descendant client IDs.
6865   */
6866  
6867  
6868  function getNestedBlockClientIds(blocksOrder) {
6869    var rootClientId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
6870    return Object(external_lodash_["reduce"])(blocksOrder[rootClientId], function (result, clientId) {
6871      return [].concat(Object(toConsumableArray["a" /* default */])(result), [clientId], Object(toConsumableArray["a" /* default */])(getNestedBlockClientIds(blocksOrder, clientId)));
6872    }, []);
6873  }
6874  /**
6875   * Returns an object against which it is safe to perform mutating operations,
6876   * given the original object and its current working copy.
6877   *
6878   * @param {Object} original Original object.
6879   * @param {Object} working  Working object.
6880   *
6881   * @return {Object} Mutation-safe object.
6882   */
6883  
6884  
6885  function getMutateSafeObject(original, working) {
6886    if (original === working) {
6887      return Object(objectSpread["a" /* default */])({}, original);
6888    }
6889  
6890    return working;
6891  }
6892  /**
6893   * Returns true if the two object arguments have the same keys, or false
6894   * otherwise.
6895   *
6896   * @param {Object} a First object.
6897   * @param {Object} b Second object.
6898   *
6899   * @return {boolean} Whether the two objects have the same keys.
6900   */
6901  
6902  
6903  function hasSameKeys(a, b) {
6904    return Object(external_lodash_["isEqual"])(Object(external_lodash_["keys"])(a), Object(external_lodash_["keys"])(b));
6905  }
6906  /**
6907   * Returns true if, given the currently dispatching action and the previously
6908   * dispatched action, the two actions are updating the same block attribute, or
6909   * false otherwise.
6910   *
6911   * @param {Object} action     Currently dispatching action.
6912   * @param {Object} lastAction Previously dispatched action.
6913   *
6914   * @return {boolean} Whether actions are updating the same block attribute.
6915   */
6916  
6917  function isUpdatingSameBlockAttribute(action, lastAction) {
6918    return action.type === 'UPDATE_BLOCK_ATTRIBUTES' && lastAction !== undefined && lastAction.type === 'UPDATE_BLOCK_ATTRIBUTES' && action.clientId === lastAction.clientId && hasSameKeys(action.attributes, lastAction.attributes);
6919  }
6920  /**
6921   * Utility returning an object with an empty object value for each key.
6922   *
6923   * @param {Array} objectKeys Keys to fill.
6924   * @return {Object} Object filled with empty object as values for each clientId.
6925   */
6926  
6927  var fillKeysWithEmptyObject = function fillKeysWithEmptyObject(objectKeys) {
6928    return objectKeys.reduce(function (result, key) {
6929      result[key] = {};
6930      return result;
6931    }, {});
6932  };
6933  /**
6934   * Higher-order reducer intended to compute a cache key for each block in the post.
6935   * A new instance of the cache key (empty object) is created each time the block object
6936   * needs to be refreshed (for any change in the block or its children).
6937   *
6938   * @param {Function} reducer Original reducer function.
6939   *
6940   * @return {Function} Enhanced reducer function.
6941   */
6942  
6943  
6944  var reducer_withBlockCache = function withBlockCache(reducer) {
6945    return function () {
6946      var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
6947      var action = arguments.length > 1 ? arguments[1] : undefined;
6948      var newState = reducer(state, action);
6949  
6950      if (newState === state) {
6951        return state;
6952      }
6953  
6954      newState.cache = state.cache ? state.cache : {};
6955      /**
6956       * For each clientId provided, traverses up parents, adding the provided clientIds
6957       * and each parent's clientId to the returned array.
6958       *
6959       * When calling this function consider that it uses the old state, so any state
6960       * modifications made by the `reducer` will not be present.
6961       *
6962       * @param {Array} clientIds an Array of block clientIds.
6963       *
6964       * @return {Array} The provided clientIds and all of their parent clientIds.
6965       */
6966  
6967      var getBlocksWithParentsClientIds = function getBlocksWithParentsClientIds(clientIds) {
6968        return clientIds.reduce(function (result, clientId) {
6969          var current = clientId;
6970  
6971          do {
6972            result.push(current);
6973            current = state.parents[current];
6974          } while (current);
6975  
6976          return result;
6977        }, []);
6978      };
6979  
6980      switch (action.type) {
6981        case 'RESET_BLOCKS':
6982          newState.cache = Object(external_lodash_["mapValues"])(flattenBlocks(action.blocks), function () {
6983            return {};
6984          });
6985          break;
6986  
6987        case 'RECEIVE_BLOCKS':
6988        case 'INSERT_BLOCKS':
6989          {
6990            var updatedBlockUids = Object(external_lodash_["keys"])(flattenBlocks(action.blocks));
6991  
6992            if (action.rootClientId) {
6993              updatedBlockUids.push(action.rootClientId);
6994            }
6995  
6996            newState.cache = Object(objectSpread["a" /* default */])({}, newState.cache, fillKeysWithEmptyObject(getBlocksWithParentsClientIds(updatedBlockUids)));
6997            break;
6998          }
6999  
7000        case 'UPDATE_BLOCK':
7001        case 'UPDATE_BLOCK_ATTRIBUTES':
7002          newState.cache = Object(objectSpread["a" /* default */])({}, newState.cache, fillKeysWithEmptyObject(getBlocksWithParentsClientIds([action.clientId])));
7003          break;
7004  
7005        case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
7006          var parentClientIds = fillKeysWithEmptyObject(getBlocksWithParentsClientIds(action.replacedClientIds));
7007          newState.cache = Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(newState.cache, action.replacedClientIds), Object(external_lodash_["omit"])(parentClientIds, action.replacedClientIds), fillKeysWithEmptyObject(Object(external_lodash_["keys"])(flattenBlocks(action.blocks))));
7008          break;
7009  
7010        case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
7011          newState.cache = Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(newState.cache, action.removedClientIds), fillKeysWithEmptyObject(Object(external_lodash_["difference"])(getBlocksWithParentsClientIds(action.clientIds), action.clientIds)));
7012          break;
7013  
7014        case 'MOVE_BLOCK_TO_POSITION':
7015          {
7016            var _updatedBlockUids = [action.clientId];
7017  
7018            if (action.fromRootClientId) {
7019              _updatedBlockUids.push(action.fromRootClientId);
7020            }
7021  
7022            if (action.toRootClientId) {
7023              _updatedBlockUids.push(action.toRootClientId);
7024            }
7025  
7026            newState.cache = Object(objectSpread["a" /* default */])({}, newState.cache, fillKeysWithEmptyObject(getBlocksWithParentsClientIds(_updatedBlockUids)));
7027            break;
7028          }
7029  
7030        case 'MOVE_BLOCKS_UP':
7031        case 'MOVE_BLOCKS_DOWN':
7032          {
7033            var _updatedBlockUids2 = [];
7034  
7035            if (action.rootClientId) {
7036              _updatedBlockUids2.push(action.rootClientId);
7037            }
7038  
7039            newState.cache = Object(objectSpread["a" /* default */])({}, newState.cache, fillKeysWithEmptyObject(getBlocksWithParentsClientIds(_updatedBlockUids2)));
7040            break;
7041          }
7042  
7043        case 'SAVE_REUSABLE_BLOCK_SUCCESS':
7044          {
7045            var _updatedBlockUids3 = Object(external_lodash_["keys"])(Object(external_lodash_["omitBy"])(newState.attributes, function (attributes, clientId) {
7046              return newState.byClientId[clientId].name !== 'core/block' || attributes.ref !== action.updatedId;
7047            }));
7048  
7049            newState.cache = Object(objectSpread["a" /* default */])({}, newState.cache, fillKeysWithEmptyObject(getBlocksWithParentsClientIds(_updatedBlockUids3)));
7050          }
7051      }
7052  
7053      return newState;
7054    };
7055  };
7056  /**
7057   * Higher-order reducer intended to augment the blocks reducer, assigning an
7058   * `isPersistentChange` property value corresponding to whether a change in
7059   * state can be considered as persistent. All changes are considered persistent
7060   * except when updating the same block attribute as in the previous action.
7061   *
7062   * @param {Function} reducer Original reducer function.
7063   *
7064   * @return {Function} Enhanced reducer function.
7065   */
7066  
7067  
7068  function withPersistentBlockChange(reducer) {
7069    var lastAction;
7070    return function (state, action) {
7071      var nextState = reducer(state, action);
7072      var isExplicitPersistentChange = action.type === 'MARK_LAST_CHANGE_AS_PERSISTENT'; // Defer to previous state value (or default) unless changing or
7073      // explicitly marking as persistent.
7074  
7075      if (state === nextState && !isExplicitPersistentChange) {
7076        var nextIsPersistentChange = Object(external_lodash_["get"])(state, ['isPersistentChange'], true);
7077  
7078        if (state.isPersistentChange === nextIsPersistentChange) {
7079          return state;
7080        }
7081  
7082        return Object(objectSpread["a" /* default */])({}, nextState, {
7083          isPersistentChange: nextIsPersistentChange
7084        });
7085      }
7086  
7087      nextState = Object(objectSpread["a" /* default */])({}, nextState, {
7088        isPersistentChange: isExplicitPersistentChange || !isUpdatingSameBlockAttribute(action, lastAction)
7089      }); // In comparing against the previous action, consider only those which
7090      // would have qualified as one which would have been ignored or not
7091      // have resulted in a changed state.
7092  
7093      lastAction = action;
7094      return nextState;
7095    };
7096  }
7097  /**
7098   * Higher-order reducer intended to augment the blocks reducer, assigning an
7099   * `isIgnoredChange` property value corresponding to whether a change in state
7100   * can be considered as ignored. A change is considered ignored when the result
7101   * of an action not incurred by direct user interaction.
7102   *
7103   * @param {Function} reducer Original reducer function.
7104   *
7105   * @return {Function} Enhanced reducer function.
7106   */
7107  
7108  
7109  function withIgnoredBlockChange(reducer) {
7110    /**
7111     * Set of action types for which a blocks state change should be ignored.
7112     *
7113     * @type {Set}
7114     */
7115    var IGNORED_ACTION_TYPES = new Set(['RECEIVE_BLOCKS']);
7116    return function (state, action) {
7117      var nextState = reducer(state, action);
7118  
7119      if (nextState !== state) {
7120        nextState.isIgnoredChange = IGNORED_ACTION_TYPES.has(action.type);
7121      }
7122  
7123      return nextState;
7124    };
7125  }
7126  /**
7127   * Higher-order reducer targeting the combined blocks reducer, augmenting
7128   * block client IDs in remove action to include cascade of inner blocks.
7129   *
7130   * @param {Function} reducer Original reducer function.
7131   *
7132   * @return {Function} Enhanced reducer function.
7133   */
7134  
7135  
7136  var reducer_withInnerBlocksRemoveCascade = function withInnerBlocksRemoveCascade(reducer) {
7137    return function (state, action) {
7138      var getAllChildren = function getAllChildren(clientIds) {
7139        var result = clientIds;
7140  
7141        for (var i = 0; i < result.length; i++) {
7142          var _result2;
7143  
7144          if (!state.order[result[i]]) {
7145            continue;
7146          }
7147  
7148          if (result === clientIds) {
7149            result = Object(toConsumableArray["a" /* default */])(result);
7150          }
7151  
7152          (_result2 = result).push.apply(_result2, Object(toConsumableArray["a" /* default */])(state.order[result[i]]));
7153        }
7154  
7155        return result;
7156      };
7157  
7158      if (state) {
7159        switch (action.type) {
7160          case 'REMOVE_BLOCKS':
7161            action = Object(objectSpread["a" /* default */])({}, action, {
7162              type: 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN',
7163              removedClientIds: getAllChildren(action.clientIds)
7164            });
7165            break;
7166  
7167          case 'REPLACE_BLOCKS':
7168            action = Object(objectSpread["a" /* default */])({}, action, {
7169              type: 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN',
7170              replacedClientIds: getAllChildren(action.clientIds)
7171            });
7172            break;
7173        }
7174      }
7175  
7176      return reducer(state, action);
7177    };
7178  };
7179  /**
7180   * Higher-order reducer which targets the combined blocks reducer and handles
7181   * the `RESET_BLOCKS` action. When dispatched, this action will replace all
7182   * blocks that exist in the post, leaving blocks that exist only in state (e.g.
7183   * reusable blocks) alone.
7184   *
7185   * @param {Function} reducer Original reducer function.
7186   *
7187   * @return {Function} Enhanced reducer function.
7188   */
7189  
7190  
7191  var reducer_withBlockReset = function withBlockReset(reducer) {
7192    return function (state, action) {
7193      if (state && action.type === 'RESET_BLOCKS') {
7194        var visibleClientIds = getNestedBlockClientIds(state.order);
7195        return Object(objectSpread["a" /* default */])({}, state, {
7196          byClientId: Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state.byClientId, visibleClientIds), getFlattenedBlocksWithoutAttributes(action.blocks)),
7197          attributes: Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state.attributes, visibleClientIds), getFlattenedBlockAttributes(action.blocks)),
7198          order: Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state.order, visibleClientIds), mapBlockOrder(action.blocks)),
7199          parents: Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state.parents, visibleClientIds), mapBlockParents(action.blocks)),
7200          cache: Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state.cache, visibleClientIds), Object(external_lodash_["mapValues"])(flattenBlocks(action.blocks), function () {
7201            return {};
7202          }))
7203        });
7204      }
7205  
7206      return reducer(state, action);
7207    };
7208  };
7209  /**
7210   * Higher-order reducer which targets the combined blocks reducer and handles
7211   * the `REPLACE_INNER_BLOCKS` action. When dispatched, this action the state should become equivalent
7212   * to the execution of a `REMOVE_BLOCKS` action containing all the child's of the root block followed by
7213   * the execution of `INSERT_BLOCKS` with the new blocks.
7214   *
7215   * @param {Function} reducer Original reducer function.
7216   *
7217   * @return {Function} Enhanced reducer function.
7218   */
7219  
7220  
7221  var reducer_withReplaceInnerBlocks = function withReplaceInnerBlocks(reducer) {
7222    return function (state, action) {
7223      if (action.type !== 'REPLACE_INNER_BLOCKS') {
7224        return reducer(state, action);
7225      }
7226  
7227      var stateAfterBlocksRemoval = state;
7228  
7229      if (state.order[action.rootClientId]) {
7230        stateAfterBlocksRemoval = reducer(stateAfterBlocksRemoval, {
7231          type: 'REMOVE_BLOCKS',
7232          clientIds: state.order[action.rootClientId]
7233        });
7234      }
7235  
7236      var stateAfterInsert = stateAfterBlocksRemoval;
7237  
7238      if (action.blocks.length) {
7239        stateAfterInsert = reducer(stateAfterInsert, Object(objectSpread["a" /* default */])({}, action, {
7240          type: 'INSERT_BLOCKS',
7241          index: 0
7242        }));
7243      }
7244  
7245      return stateAfterInsert;
7246    };
7247  };
7248  /**
7249   * Higher-order reducer which targets the combined blocks reducer and handles
7250   * the `SAVE_REUSABLE_BLOCK_SUCCESS` action. This action can't be handled by
7251   * regular reducers and needs a higher-order reducer since it needs access to
7252   * both `byClientId` and `attributes` simultaneously.
7253   *
7254   * @param {Function} reducer Original reducer function.
7255   *
7256   * @return {Function} Enhanced reducer function.
7257   */
7258  
7259  
7260  var reducer_withSaveReusableBlock = function withSaveReusableBlock(reducer) {
7261    return function (state, action) {
7262      if (state && action.type === 'SAVE_REUSABLE_BLOCK_SUCCESS') {
7263        var id = action.id,
7264            updatedId = action.updatedId; // If a temporary reusable block is saved, we swap the temporary id with the final one
7265  
7266        if (id === updatedId) {
7267          return state;
7268        }
7269  
7270        state = Object(objectSpread["a" /* default */])({}, state);
7271        state.attributes = Object(external_lodash_["mapValues"])(state.attributes, function (attributes, clientId) {
7272          var name = state.byClientId[clientId].name;
7273  
7274          if (name === 'core/block' && attributes.ref === id) {
7275            return Object(objectSpread["a" /* default */])({}, attributes, {
7276              ref: updatedId
7277            });
7278          }
7279  
7280          return attributes;
7281        });
7282      }
7283  
7284      return reducer(state, action);
7285    };
7286  };
7287  /**
7288   * Reducer returning the blocks state.
7289   *
7290   * @param {Object} state  Current state.
7291   * @param {Object} action Dispatched action.
7292   *
7293   * @return {Object} Updated state.
7294   */
7295  
7296  
7297  var reducer_blocks = Object(external_lodash_["flow"])(external_this_wp_data_["combineReducers"], reducer_withSaveReusableBlock, // needs to be before withBlockCache
7298  reducer_withBlockCache, // needs to be before withInnerBlocksRemoveCascade
7299  reducer_withInnerBlocksRemoveCascade, reducer_withReplaceInnerBlocks, // needs to be after withInnerBlocksRemoveCascade
7300  reducer_withBlockReset, withPersistentBlockChange, withIgnoredBlockChange)({
7301    byClientId: function byClientId() {
7302      var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7303      var action = arguments.length > 1 ? arguments[1] : undefined;
7304  
7305      switch (action.type) {
7306        case 'RESET_BLOCKS':
7307          return getFlattenedBlocksWithoutAttributes(action.blocks);
7308  
7309        case 'RECEIVE_BLOCKS':
7310        case 'INSERT_BLOCKS':
7311          return Object(objectSpread["a" /* default */])({}, state, getFlattenedBlocksWithoutAttributes(action.blocks));
7312  
7313        case 'UPDATE_BLOCK':
7314          // Ignore updates if block isn't known
7315          if (!state[action.clientId]) {
7316            return state;
7317          } // Do nothing if only attributes change.
7318  
7319  
7320          var changes = Object(external_lodash_["omit"])(action.updates, 'attributes');
7321  
7322          if (Object(external_lodash_["isEmpty"])(changes)) {
7323            return state;
7324          }
7325  
7326          return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, action.clientId, Object(objectSpread["a" /* default */])({}, state[action.clientId], changes)));
7327  
7328        case 'REPLACE_BLOCKS_AUGMENTED_WITH_CHILDREN':
7329          if (!action.blocks) {
7330            return state;
7331          }
7332  
7333          return Object(objectSpread["a" /* default */])({}, Object(external_lodash_["omit"])(state, action.replacedClientIds), getFlattenedBlocksWithoutAttributes(action.blocks));
7334  
7335        case 'REMOVE_BLOCKS_AUGMENTED_WITH_CHILDREN':
7336          return Object(external_lodash_["omit"])(state, action.removedClientIds);
7337      }
7338  
7339      return state;
7340    },
7341    attributes: function attributes() {
7342      var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7343      var action = arguments.length > 1 ? arguments[1] : undefined;
7344  
7345      switch (action.type) {
7346        case 'RESET_BLOCKS':
7347          return getFlattenedBlockAttributes(action.blocks);
7348  
7349        case 'RECEIVE_BLOCKS':
7350        case 'INSERT_BLOCKS':
7351          return Object(objectSpread["a" /* default */])({}, state, getFlattenedBlockAttributes(action.blocks));
7352  
7353        case 'UPDATE_BLOCK':
7354          // Ignore updates if block isn't known or there are no attribute changes.
7355          if (!state[action.clientId] || !action.updates.attributes) {
7356            return state;
7357          }
7358  
7359          return Object(objectSpread["a" /* default */])({}, state, Object(defineProperty["a" /* default */])({}, action.clientId, Object(objectSpread["a" /* default */])({}, state[action.clientId], action.updates.attributes)));
7360  
7361        case 'UPDATE_BLOCK_ATTRIBUTES':
7362          // Ignore updates if block isn't known
7363          if (!state[action.clientId]) {
7364            return state;
7365          } // Consider as updates only changed values
7366  
7367  
7368          var nextAttributes = Object(external_lodash_["reduce"])(action.attributes, function (result, value, key) {
7369            if (value !== result[key]) {
7370              result =