PageSourceSearch

https://www.koolibri.ee/FlipBook/3d-flip-book/js/dist/3dflipbook.js

js koolibri.ee collected 2026-10-02 11:48:28 UTC 1,354,958 bytes, 13,345 lines download raw bytes

1/******/ (function(modules) { // webpackBootstrap
2/******/ 	// The module cache
3/******/ 	var installedModules = {};
4/******/
5/******/ 	// The require function
6/******/ 	function __webpack_require__(moduleId) {
7/******/
8/******/ 		// Check if module is in cache
9/******/ 		if(installedModules[moduleId]) {
10/******/ 			return installedModules[moduleId].exports;
11/******/ 		}
12/******/ 		// Create a new module (and put it into the cache)
13/******/ 		var module = installedModules[moduleId] = {
14/******/ 			i: moduleId,
15/******/ 			l: false,
16/******/ 			exports: {}
17/******/ 		};
18/******/
19/******/ 		// Execute the module function
20/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21/******/
22/******/ 		// Flag the module as loaded
23/******/ 		module.l = true;
24/******/
25/******/ 		// Return the exports of the module
26/******/ 		return module.exports;
27/******/ 	}
28/******/
29/******/
30/******/ 	// expose the modules object (__webpack_modules__)
31/******/ 	__webpack_require__.m = modules;
32/******/
33/******/ 	// expose the module cache
34/******/ 	__webpack_require__.c = installedModules;
35/******/
36/******/ 	// identity function for calling harmony imports with the correct context
37/******/ 	__webpack_require__.i = function(value) { return value; };
38/******/
39/******/ 	// define getter function for harmony exports
40/******/ 	__webpack_require__.d = function(exports, name, getter) {
41/******/ 		if(!__webpack_require__.o(exports, name)) {
42/******/ 			Object.defineProperty(exports, name, {
43/******/ 				configurable: false,
44/******/ 				enumerable: true,
45/******/ 				get: getter
46/******/ 			});
47/******/ 		}
48/******/ 	};
49/******/
50/******/ 	// getDefaultExport function for compatibility with non-harmony modules
51/******/ 	__webpack_require__.n = function(module) {
52/******/ 		var getter = module && module.__esModule ?
53/******/ 			function getDefault() { return module['default']; } :
54/******/ 			function getModuleExports() { return module; };
55/******/ 		__webpack_require__.d(getter, 'a', getter);
56/******/ 		return getter;
57/******/ 	};
58/******/
59/******/ 	// Object.prototype.hasOwnProperty.call
60/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
61/******/
62/******/ 	// __webpack_public_path__
63/******/ 	__webpack_require__.p = "";
64/******/
65/******/ 	// Load entry module and return exports
66/******/ 	return __webpack_require__(__webpack_require__.s = 72);
67/******/ })
68/************************************************************************/
69/******/ ([
70/* 0 */
71/***/ (function(module, exports, __webpack_require__) {
72
73"use strict";
74
75
76exports.__esModule = true;
77var _$ =  true ? window.jQuery : require('jquery'),
78    _html2canvas =  true ? window.html2canvas : require('html2canvas'),
79    _THREE =  true ? window.THREE : require('three'),
80    _React =  true ? window.React : require('react'),
81    _ReactDOM =  true ? window.ReactDOM : require('react-dom'),
82    _PDFJS =  true ? window.PDFJS : require('pdfjs'),
83    _tr = function _tr(s) {
84  return (window.iberezansky || {}).tr && window.iberezansky.tr(s) || s;
85};
86
87exports.$ = _$;
88exports.html2canvas = _html2canvas;
89exports.THREE = _THREE;
90exports.React = _React;
91exports.ReactDOM = _ReactDOM;
92exports.PDFJS = _PDFJS;
93exports.tr = _tr;
94
95/***/ }),
96/* 1 */
97/***/ (function(module, exports, __webpack_require__) {
98
99"use strict";
100
101
102exports.__esModule = true;
103
104var _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; };
105
106var _$ =  true ? window.jQuery : require('jquery'),
107    _html2canvas =  true ? window.html2canvas : require('html2canvas'),
108    _THREE =  true ? window.THREE : require('three'),
109    _PDFJS =  true ? window.PDFJS : require('pdfjs'),
110    _tr = function _tr(s) {
111  return (window.iberezansky || {}).tr && window.iberezansky.tr(s) || s;
112};
113
114if (window.FB3D_LOCALE) {
115  window.iberezansky = _extends({}, window.iberezansky, {
116    tr: function tr(s) {
117      return (FB3D_LOCALE.dictionary || {})[s] || s;
118    }
119  });
120}
121
122exports.$ = _$;
123exports.html2canvas = _html2canvas;
124exports.THREE = _THREE;
125exports.PDFJS = _PDFJS;
126exports.tr = _tr;
127
128/***/ }),
129/* 2 */
130/***/ (function(module, exports, __webpack_require__) {
131
132"use strict";
133
134
135exports.__esModule = true;
136
137function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
138
139var BaseMathUtils = function () {
140  function BaseMathUtils() {
141    _classCallCheck(this, BaseMathUtils);
142  }
143
144  BaseMathUtils.sum1 = function sum1(ka, a, kb, b) {
145    return [ka * a[0] + kb * b[0]];
146  };
147
148  BaseMathUtils.sum2 = function sum2(ka, a, kb, b) {
149    return [ka * a[0] + kb * b[0], ka * a[1] + kb * b[1]];
150  };
151
152  BaseMathUtils.sum3 = function sum3(ka, a, kb, b) {
153    return [ka * a[0] + kb * b[0], ka * a[1] + kb * b[1], ka * a[2] + kb * b[2]];
154  };
155
156  BaseMathUtils.sum4 = function sum4(ka, a, kb, b) {
157    return [ka * a[0] + kb * b[0], ka * a[1] + kb * b[1], ka * a[2] + kb * b[2], ka * a[3] + kb * b[3]];
158  };
159
160  BaseMathUtils.rk4 = function rk4(dy, t, dt, y) {
161    var sum = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : BaseMathUtils.sum[y.length - 1];
162
163    var k1 = dy(t, y),
164        k2 = dy(t + dt / 2, sum(1, y, dt / 2, k1)),
165        k3 = dy(t + dt / 2, sum(1, y, dt / 2, k2)),
166        k4 = dy(t + dt, sum(1, y, dt, k3));
167    return sum(1, y, dt / 6, sum(1, sum(1, k1, 2, k2), 1, sum(2, k3, 1, k4)));
168  };
169
170  BaseMathUtils.extrapolateLinear = function extrapolateLinear(x, y, xi) {
171    return y[0] + (y[1] - y[0]) / (x[1] - x[0]) * (xi - x[0]);
172  };
173
174  BaseMathUtils.interpolateLinear = function interpolateLinear(x, y, xi) {
175    var yi = void 0;
176    if (x[0] > x[1]) {
177      x = x.reverse();
178      y = y.reverse();
179    }
180    if (xi < x[0]) {
181      yi = y[0];
182    } else if (xi > x[1]) {
183      yi = y[1];
184    } else {
185      yi = BaseMathUtils.extrapolateLinear(x, y, xi);
186    }
187    return yi;
188  };
189
190  BaseMathUtils.calcScale = function calcScale(srcW, srcH, dstW, dstH) {
191    return Math.min(dstW / srcW, dstH / srcH);
192  };
193
194  BaseMathUtils.mulM = function mulM(a, b) {
195    var r = [];
196    for (var i = 0; i < a.length; ++i) {
197      r.push([]);
198      for (var j = 0; j < b[0].length; ++j) {
199        r[i][j] = 0;
200        for (var k = 0; k < b.length; ++k) {
201          r[i][j] += a[i][k] * b[k][j];
202        }
203      }
204    }
205    return r;
206  };
207
208  BaseMathUtils.transM = function transM(m) {
209    var r = [];
210    for (var i = 0; i < m.length; ++i) {
211      for (var j = 0; j < m[0].length; ++j) {
212        if (!r[j]) {
213          r[j] = [];
214        }
215        r[j][i] = m[i][j];
216      }
217    }
218    return r;
219  };
220
221  BaseMathUtils.mat = function mat(data) {
222    var s = 0;
223    for (var _iterator = data, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
224      var _ref;
225
226      if (_isArray) {
227        if (_i >= _iterator.length) break;
228        _ref = _iterator[_i++];
229      } else {
230        _i = _iterator.next();
231        if (_i.done) break;
232        _ref = _i.value;
233      }
234
235      var x = _ref;
236
237      s += x;
238    }
239    return s / data.length;
240  };
241
242  BaseMathUtils.disp = function disp(data) {
243    var M = BaseMathUtils.mat(data);
244    var s = 0;
245    for (var _iterator2 = data, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
246      var _ref2;
247
248      if (_isArray2) {
249        if (_i2 >= _iterator2.length) break;
250        _ref2 = _iterator2[_i2++];
251      } else {
252        _i2 = _iterator2.next();
253        if (_i2.done) break;
254        _ref2 = _i2.value;
255      }
256
257      var x = _ref2;
258
259      s += (x - M) * (x - M);
260    }
261    return s / data.length;
262  };
263
264  BaseMathUtils.predict = function predict(data, num) {
265    var r = [],
266        l = data.length,
267        D = BaseMathUtils.disp(data);
268    if (D < l && l > 1) {
269      var am = [],
270          bm = [];
271      for (var i = 0; i < l; ++i) {
272        am.push([i, 1]);
273        bm.push([data[i]]);
274      }
275      var ta = BaseMathUtils.transM(am),
276          a = BaseMathUtils.mulM(ta, am),
277          b = BaseMathUtils.mulM(ta, bm),
278          d = a[0][0] * a[1][1] - a[1][0] * a[0][1],
279          p = [-(a[0][1] * b[1][0] - b[0][0] * a[1][1]) / d, (a[0][0] * b[1][0] - a[1][0] * b[0][0]) / d];
280      for (var _i3 = 0; _i3 < num; ++_i3) {
281        var v = Math.round(p[0] * (_i3 + l) + p[1]);
282        if (r.indexOf(v) === -1) {
283          r.push(v);
284        }
285      }
286    }
287    return r;
288  };
289
290  BaseMathUtils.getUnique = function getUnique() {
291    return Math.ceil(1e9 * Math.random());
292  };
293
294  BaseMathUtils.setSplinePoints = function setSplinePoints(spline, ps) {
295    if (spline.points.length !== ps.x.length) {
296      console.warn('setSplinePoints: bad points');
297    }
298    for (var i = 0; i < spline.points.length; ++i) {
299      spline.points[i].set(ps.x[i], ps.y[i], ps.z ? ps.z[i] : 0);
300    }
301  };
302
303  BaseMathUtils.mapl2L = function mapl2L(ls, len, n, f) {
304    var dL = len / (n - 1);
305    var L = 0;
306    for (var i = 0, d = ls[0]; i < ls.length - 1 && L < len + 0.1 * dL; ++i, d += ls[i]) {
307      if (Math.abs(L - d) < Math.abs(L - d - ls[i + 1])) {
308        f(i, L);
309        L += dL;
310      }
311    }
312    if (L < len + 0.1 * dL) {
313      console.warn('mapl2L: ls is not enought');
314    }
315  };
316
317  BaseMathUtils.det2 = function det2(a, b, c, d) {
318    return a * d - b * c;
319  };
320
321  BaseMathUtils.solve2Lin = function solve2Lin(a1, b1, a2, b2) {
322    var res = void 0;
323    var d = BaseMathUtils.det2(a1[0], a1[1], a2[0], a2[1]);
324    if (Math.abs(d) > BaseMathUtils.eps) {
325      var dx = BaseMathUtils.det2(b1, a1[1], b2, a2[1]),
326          dy = BaseMathUtils.det2(a1[0], b1, a2[0], b2);
327      res = {
328        x: dx / d,
329        y: dy / d
330      };
331    }
332    return res;
333  };
334
335  BaseMathUtils.isInsidePoly = function isInsidePoly(ps, p) {
336    var done = false,
337        ct = void 0;
338    for (var i = 0; i < ps.length; ++i) {
339      if (BaseMathUtils.v2dist(p, ps[i]) < BaseMathUtils.eps) {
340        ct = 1;
341        done = true;
342        break;
343      }
344    }
345    while (!done) {
346      done = true;
347      ct = 0;
348      var np = { x: p.x + Math.random() - 0.5, y: p.y + Math.random() - 0.5 },
349          rn = { x: np.x - p.x, y: np.y - p.y },
350          a1 = [rn.y, -rn.x],
351          b1 = p.x * rn.y - p.y * rn.x;
352      for (var _i4 = 0; _i4 < ps.length; ++_i4) {
353        var p0 = ps[_i4],
354            p1 = ps[(_i4 + 1) % ps.length],
355            n = { x: p1.x - p0.x, y: p1.y - p0.y },
356            a2 = [n.y, -n.x],
357            b2 = p0.x * n.y - p0.y * n.x,
358            ip = BaseMathUtils.solve2Lin(a1, b1, a2, b2);
359        if (ip) {
360          if (BaseMathUtils.v2dist(ip, p0) < BaseMathUtils.eps || BaseMathUtils.v2dist(ip, p1) < BaseMathUtils.eps) {
361            done = false;
362            break;
363          } else if (ip.x > Math.min(p0.x, p1.x) - BaseMathUtils.eps && ip.x < Math.max(p0.x, p1.x) + BaseMathUtils.eps && ip.y > Math.min(p0.y, p1.y) - BaseMathUtils.eps && ip.y < Math.max(p0.y, p1.y) + BaseMathUtils.eps) {
364            if (BaseMathUtils.v2dist(ip, p) < BaseMathUtils.eps) {
365              ct = 1;
366              break;
367            } else {
368              var tn = { x: ip.x - p.x, y: ip.y - p.y };
369              ct += tn.x * rn.x + tn.y * rn.y > 0;
370            }
371          }
372        }
373      }
374    }
375    return ct % 2;
376  };
377
378  BaseMathUtils.isInsideConvPoly = function isInsideConvPoly(ps, p) {
379    var sg = [0, 0];
380    for (var i = 0; i < ps.length; ++i) {
381      var p0 = ps[i],
382          p1 = ps[(i + 1) % ps.length],
383          a = { x: p0.x - p.x, y: p0.y - p.y },
384          b = { x: p1.x - p.x, y: p1.y - p.y };
385      ++sg[(a.x * b.y - a.y * b.x < 0) + 0];
386    }
387    return ~sg.indexOf(ps.length);
388  };
389
390  BaseMathUtils.v2len = function v2len(v2) {
391    return Math.sqrt(v2.x * v2.x + v2.y * v2.y);
392  };
393
394  BaseMathUtils.v2dist = function v2dist(v21, v22) {
395    return BaseMathUtils.v2len({
396      x: v22.x - v21.x,
397      y: v22.y - v21.y
398    });
399  };
400
401  BaseMathUtils.computeSquare = function computeSquare(ps) {
402    var a = [];
403    var p = 0;
404    for (var i = 0; i < ps.length; ++i) {
405      a.push(BaseMathUtils.v2dist(ps[i], ps[(i + 1) % ps.length]));
406      p += 0.5 * a[i];
407    }
408    return Math.sqrt(p * (p - a[0]) * (p - a[1]) * (p - a[2]));
409  };
410
411  BaseMathUtils.computeInterpCoefs = function computeInterpCoefs(tri, p) {
412    var s = BaseMathUtils.computeSquare(tri),
413        coefs = [],
414        l = tri.length;
415    for (var i = 0; i < l; ++i) {
416      coefs[i] = BaseMathUtils.computeSquare([p, tri[(i + 1) % l], tri[(i + 2) % l]]) / s;
417    }
418    return coefs;
419  };
420
421  return BaseMathUtils;
422}();
423
424BaseMathUtils.sum = [BaseMathUtils.sum1, BaseMathUtils.sum2, BaseMathUtils.sum3, BaseMathUtils.sum4];
425BaseMathUtils.eps = 1e-4;
426exports.default = BaseMathUtils;
427
428/***/ }),
429/* 3 */
430/***/ (function(module, exports, __webpack_require__) {
431
432"use strict";
433
434
435exports.__esModule = true;
436
437var _libs = __webpack_require__(0);
438
439var _BaseMathUtils2 = __webpack_require__(2);
440
441var _BaseMathUtils3 = _interopRequireDefault(_BaseMathUtils2);
442
443function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
444
445function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
446
447function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
448
449function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
449onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
450
451var MathUtils = function (_BaseMathUtils) {
452  _inherits(MathUtils, _BaseMathUtils);
453
454  function MathUtils() {
455    _classCallCheck(this, MathUtils);
456
457    return _possibleConstructorReturn(this, _BaseMathUtils.apply(this, arguments));
458  }
459
460  MathUtils.splitSpline = function splitSpline(spline, N) {
461    var o = { len: 0, ls: [0] },
462        dl = 1 / N;
463    for (var i = 0; i <= N; ++i) {
464      var p = spline.getPoint(i * dl);
465      if (i) {
466        var d = MathUtils.v1.distanceTo(p);
467        o.len += d;
468        o.ls.push(d);
469      }
470      MathUtils.v1.copy(p);
471    }
472    return o;
473  };
474
475  MathUtils.getLinearIndeces = function getLinearIndeces(spline, n) {
476    var del = 5000,
477        dDel = 1 / del;
478    var ls = [0];
479    var l = 0;
480    for (var i = 0; i <= del; ++i) {
481      var p = spline.getPoint(i * dDel);
482      if (i) {
483        var d = MathUtils.v1.distanceTo(p);
484        l += d;
485        ls.push(d);
486      }
487      MathUtils.v1.copy(p);
488    }
489    ls.push(1e7);
490
491    var res = [],
492        dl = l / (n - 1);
493    for (var _i = 0, L = 0, _d = ls[0]; _i < ls.length - 1; ++_i, _d += ls[_i]) {
494      if (Math.abs(L - _d) < Math.abs(L - _d - ls[_i + 1])) {
495        res.push(_i * dDel);
496        L += dl;
497      }
498    }
499
500    return res;
501  };
502
503  MathUtils.refinePoly = function refinePoly(poly, maxDl) {
504    var res = [];
505    for (var i = 0; i < poly.length; ++i) {
506      var p0 = poly[i],
507          p1 = poly[(i + 1) % poly.length],
508          l = _BaseMathUtils3.default.v2dist(p0, p1),
509          n = Math.ceil(l / maxDl),
510          dl = l / n;
511      res.push(p0);
512      for (var j = 1; j < n; ++j) {
513        res.push(new _libs.THREE.Vector2(p0.x + j * dl * (p1.x - p0.x) / l, p0.y + j * dl * (p1.y - p0.y) / l));
514      }
515    }
516    return res;
517  };
518
519  return MathUtils;
520}(_BaseMathUtils3.default);
521
522MathUtils.v1 = new _libs.THREE.Vector3();
523exports.default = MathUtils;
524
525/***/ }),
526/* 4 */
527/***/ (function(module, exports, __webpack_require__) {
528
529"use strict";
530
531
532exports.__esModule = true;
533
534function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
535
536var Utils = function () {
537  function Utils() {
538    _classCallCheck(this, Utils);
539  }
540
541  Utils.normalizeUrl = function normalizeUrl(url) {
542    function split(s) {
543      return s.replace(/\\/g, '/').split('/');
544    }
545    var base = split(window.location.href);
546    url = split(url);
547    if (base[2] === url[2]) {
548      url[0] = base[0];
549    }
550    return url.join('/');
551  };
552
553  Utils.extends = function _extends(der, base) {
554    for (var name in base) {
555      if (!der.hasOwnProperty(name)) {
556        der[name] = base[name];
557      }
558    }
559  };
560
561  Utils.defaultCmp = function defaultCmp(a, b) {
562    return a - b;
563  };
564
565  Utils.lowerBound = function lowerBound(a, x, cmp) {
566    cmp = cmp || Utils.defaultCmp;
567    var l = 0,
568        h = a.length - 1;
569    while (h - l > 1) {
570      var mid = Math.floor((l + h) / 2);
571      if (cmp(x, a[mid]) < 0) {
572        h = mid;
573      } else {
574        l = mid;
575      }
576    }
577    return cmp(x, a[h]) >= 0 ? h : l;
578  };
579
580  return Utils;
581}();
582
583exports.default = Utils;
584
585/***/ }),
586/* 5 */
587/***/ (function(module, exports, __webpack_require__) {
588
589"use strict";
590
591
592exports.__esModule = true;
593
594var _libs = __webpack_require__(0);
595
596var _GraphUtils = __webpack_require__(7);
597
598var _GraphUtils2 = _interopRequireDefault(_GraphUtils);
599
600function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
601
602function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
603
604var ImageBase = function () {
605  function ImageBase(context, width, height, color) {
606    _classCallCheck(this, ImageBase);
607
608    this.context = context;
609    this.wnd = context.wnd;
610    this.doc = context.doc;
611    this.element = context.element || context.doc.body;
612    this.c = context.renderCanvas || ImageBase.renderCanvas;
613    this.ctx = context.renderCanvasCtx || ImageBase.renderCanvasCtx;
614    this.resW = this.width = width;
615    this.resH = this.height = height;
616    this.color = color;
617  }
618
619  ImageBase.prototype.setResolution = function setResolution(res) {
620    this.resW = res.width;
621    this.resH = res.height;
622  };
623
624  ImageBase.prototype.dispose = function dispose() {};
625
626  ImageBase.prototype.renderBlankPage = function renderBlankPage() {
627    this.ctx.beginPath();
628    this.ctx.fillStyle = _GraphUtils2.default.color2Rgba(this.color, 1);
629    this.ctx.rect(0, 0, this.c.width, this.c.height);
630    this.ctx.fill();
631  };
632
633  ImageBase.prototype.renderImage = function renderImage(image) {
634    this.pushCtx();
635    this.ctx.drawImage(image, 0, 0);
636    this.popCtx();
637  };
638
639  ImageBase.prototype.normToConv = function normToConv(p) {
640    return {
641      x: p.x * this.c.width,
642      y: (1 - p.y) * this.c.height
643    };
644  };
645
646  ImageBase.prototype.renderHit = function renderHit(poly) {
647    var ctx = this.ctx;
648    ctx.fillStyle = 'rgba(255,255,0,0.4)';
649    ctx.beginPath();
650    var p = this.normToConv(poly[0]);
651    ctx.moveTo(p.x, p.y);
652    for (var i = 1; i < poly.length; ++i) {
653      p = this.normToConv(poly[i]);
654      ctx.lineTo(p.x, p.y);
655    }
656    ctx.closePath();
657    ctx.fill();
658  };
659
660  ImageBase.prototype.pushCtx = function pushCtx() {
661    if (this.resW != this.c.width) {
662      this.c.width = this.resW;
663    }
664    if (this.resH != this.c.height) {
665      this.c.height = this.resH;
666    }
667    this.ctx.save();
668    this.ctx.scale(this.c.width / this.width, this.c.height / this.height);
669    return this.ctx;
670  };
671
672  ImageBase.prototype.popCtx = function popCtx() {
673    this.ctx.restore();
674  };
675
676  ImageBase.prototype.renderNotFoundPage = function renderNotFoundPage() {
677    this.renderBlankPage();
678  };
679
680  ImageBase.prototype.finishRender = function finishRender() {
681    if (this.onChange) {
682      this.onChange(this.c);
683    }
684  };
685
686  ImageBase.prototype.finishLoad = function finishLoad() {
687    if (this.onLoad) {
688      this.onLoad();
689    } else {
690      this.startRender();
691    }
692  };
693
694  ImageBase.prototype.getSimulatedDoc = function getSimulatedDoc() {
695    return undefined;
696  };
697
698  return ImageBase;
699}();
700
701ImageBase.renderCanvas = (0, _libs.$)('<canvas>')[0];
702ImageBase.renderCanvasCtx = ImageBase.renderCanvas.getContext('2d');
703exports.default = ImageBase;
704
705/***/ }),
706/* 6 */
707/***/ (function(module, exports, __webpack_require__) {
708
709"use strict";
710
711
712exports.__esModule = true;
713
714var _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; };
715
716var _libs = __webpack_require__(0);
717
718function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
719
720var EventConverter = function () {
721
722  // virtuals
723  // getObject(e, data);
724  // getCallback(object);
725  // test(object1, object1);
726
727  function EventConverter(wnd, doc) {
728    _classCallCheck(this, EventConverter);
729
730    this.wnd = wnd;
731    this.doc = doc;
732    this.enabled = true;
733  }
734
735  EventConverter.prototype.setEnable = function setEnable(vl) {
736    if (!vl) {
737      if (this.mCapObject) {
738        this.notify(this.mCapObject, _libs.$.Event('mouseup'), 'mouseup');
739        this.mCapObject = undefined;
740      }
741      if (this.mHovObject) {
742        this.notify(this.mHovObject, _libs.$.Event('mouseout'), 'mouseout');
743        this.mHovObject = undefined;
744      }
745    }
746    this.enabled = vl;
747  };
748
749  EventConverter.prototype.getCallback = function getCallback(object) {
750    return undefined;
751  };
752
753  EventConverter.prototype.notify = function notify(object, e, type) {
754    var callback = this.getCallback(object);
755    if (callback) {
756      var props = _extends({}, e, {
757        type: type,
758        view: this.wnd
759      });
760      var jE = _libs.$.Event(type, props);
761      callback(jE, object);
762    }
763  };
764
765  EventConverter.prototype.convert = function convert(e, data) {
766    if (!this.enabled) return;
767
768    if (this.filter) {
769      e = this.filter(this.element, e);
770    }
771
772    var object = this.getObject(e, data),
773        notify = ~e.type.indexOf('touch') ? this.convertTouch(e, data, object) : this.convertMouse(e, data, object);
774    if (notify && object) {
775      this.notify(object, e, e.type);
776    }
777  };
778
779  EventConverter.prototype.convertTouch = function convertTouch(e, data, object) {
780    var notify = true;
781    switch (e.type) {
782      case 'touchstart':
783        {
784          if (this.tCapObject) {
785            this.notify(this.tCapObject, e, 'touchend');
786          }
787          this.tCapObject = object;
788          break;
789        }
790      case 'touchend':
791        {
792          if (this.tCapObject && !this.test(this.tCapObject, object)) {
793            this.notify(this.tCapObject, e, 'touchend');
794            notify = false;
795          } else if (object && this.test(this.tCapObject, object)) {
796            this.notify(object, e, 'touchtap');
797          }
798          this.tCapObject = undefined;
799          break;
800        }
801      case 'touchtap':
802        {
803          notify = false;
804          break;
805        }
806    }
807    return notify;
808  };
809
810  EventConverter.prototype.convertMouse = function convertMouse(e, data, object) {
811    var notify = true;
812    switch (e.type) {
813      case 'mousedown':
814        {
815          if (this.mCapObject) {
816            this.notify(this.mCapObject, e, 'mouseup');
817          }
818          this.mCapObject = object;
819          break;
820        }
821      case 'mouseup':
822        {
823          if (this.mCapObject && !this.test(this.mCapObject, object)) {
824            this.notify(this.mCapObject, e, 'mouseup');
825            notify = false;
826          }
827          break;
828        }
829      case 'click':
830        {
831          notify = this.test(this.mCapObject, object);
832          this.mCapObject = undefined;
833          break;
834        }
835      case 'mouseenter':
836      case 'mouseover':
837      case 'mousemove':
838        {
839          if (!this.test(this.mHovObject, object) && this.mHovObject) {
840            this.notify(this.mHovObject, e, 'mouseout');
841            this.mHovObject = undefined;
842          }
843          if (!this.mHovObject && object) {
844            this.notify(object, e, 'mouseover');
845            this.mHovObject = object;
846          }
847          notify = e.type === 'mousemove';
848          break;
849        }
850      case 'mouseleave':
851      case 'mouseout':
852        {
853          if (this.mHovObject) {
854            this.notify(this.mHovObject, e, 'mouseout');
855            this.mHovObject = undefined;
856          }
857          notify = false;
858          break;
859        }
860    }
861    return notify;
862  };
863
864  return EventConverter;
865}();
866
867exports.default = EventConverter;
868
869/***/ }),
870/* 7 */
871/***/ (function(module, exports, __webpack_require__) {
872
873"use strict";
874
875
876exports.__esModule = true;
877
878function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
879
880var GraphUtils = function () {
881  function GraphUtils() {
882    _classCallCheck(this, GraphUtils);
883  }
884
885  GraphUtils.extrapolateLinear = function extrapolateLinear(x, y, xi) {
886    return y[0] + (y[1] - y[0]) / (x[1] - x[0]) * (xi - x[0]);
887  };
888
889  GraphUtils.interpolate01 = function interpolate01(y1, y2, t) {
890    return GraphUtils.extrapolateLinear([0, 1], [y1, y2], t);
891  };
892
893  GraphUtils.getColorBytes = function getColorBytes(color) {
894    return [color >> 16 & 0xFF, color >> 8 & 0xFF, color & 0xFF];
895  };
896
897  GraphUtils.inverseColor = function inverseColor(color) {
898    var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
899
900    var bs = GraphUtils.getColorBytes(color),
901        ibs = [0xFF - bs[0], 0xFF - bs[1], 0xFF - bs[2]],
902        nbs = [Math.round(GraphUtils.interpolate01(bs[0], ibs[0], t)), Math.round(GraphUtils.interpolate01(bs[1], ibs[1], t)), Math.round(GraphUtils.interpolate01(bs[2], ibs[2], t))];
903    return GraphUtils.bytes2Color(nbs);
904  };
905
906  GraphUtils.color2Rgba = function color2Rgba(color, a) {
907    return GraphUtils.bytes2Rgba(GraphUtils.getColorBytes(color), a);
908  };
909
910  GraphUtils.bytes2Rgba = function bytes2Rgba(bs, a) {
911    return 'rgba(' + bs.join(',') + ',' + a + ')';
912  };
913
914  GraphUtils.bytes2Color = function bytes2Color(bs) {
915    return bs[2] | bs[1] << 8 | bs[0] << 16;
916  };
917
918  return GraphUtils;
919}();
920
921exports.default = GraphUtils;
922
923/***/ }),
924/* 8 */
925/***/ (function(module, exports, __webpack_require__) {
926
927"use strict";
928
929
930exports.__esModule = true;
931
932var _Cache = __webpack_require__(14);
933
934var _Cache2 = _interopRequireDefault(_Cache);
935
936var _BlankImage = __webpack_require__(43);
937
938var _BlankImage2 = _interopRequireDefault(_BlankImage);
939
940var _StaticImage = __webpack_require__(59);
941
942var _StaticImage2 = _interopRequireDefault(_StaticImage);
943
944var _PdfImage = __webpack_require__(57);
945
946var _PdfImage2 = _interopRequireDefault(_PdfImage);
947
948var _InteractiveImage = __webpack_require__(51);
949
950var _InteractiveImage2 = _interopRequireDefault(_InteractiveImage);
951
952function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
953
954function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
955
956var ImageFactory = function () {
957  function ImageFactory(context, cache) {
958    _classCallCheck(this, ImageFactory);
959
960    this.context = context;
961    this.cache = cache || new _Cache2.default();
962  }
963
964  ImageFactory.prototype.build = function build(info) {
965    var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
966    var widthTexels = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 210;
967    var heightTexels = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 297;
968    var color = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0xFFFFFF;
969    var injector = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined;
970
971    var image = void 0;
972    switch (info.type) {
973      case 'html':
974        {
975          image = new _InteractiveImage2.default(this.context, widthTexels, heightTexels, color, info.src, this.cache, injector);
976          break;
977        }
978      case 'image':
979        {
980          image = new _StaticImage2.default(this.context, widthTexels, heightTexels, color, info.src);
981          break;
982        }
983      case 'pdf':
984        {
985          image = new _PdfImage2.default(this.context, widthTexels, heightTexels, color, info.src, n);
986          break;
987        }
988      case 'blank':
989      default:
990        {
991          image = new _BlankImage2.default(this.context, widthTexels, heightTexels, color);
992          break;
993        }
994    }
995    return image;
996  };
997
998  return ImageFactory;
999}();
1000
1001exports.default = ImageFactory;
1002
1003/***/ }),
1004/* 9 */
1005/***/ (function(module, exports, __webpack_require__) {
1006
1007"use strict";
1008
1009
1010exports.__esModule = true;
1011
1012var _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; };
1013
1014var _book = __webpack_require__(11);
1015
1016var _BaseMathUtils = __webpack_require__(2);
1017
1018var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);
1019
1020function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1021
1022function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1023
1024var BookPropsBuilder = function () {
1025  function BookPropsBuilder(onReady) {
1026    _classCallCheck(this, BookPropsBuilder);
1027
1028    this.onReady = onReady;
1029    this.defaults = (0, _book.props)();
1030  }
1031
1032  BookPropsBuilder.prototype.dispose = function dispose() {};
1033
1034  BookPropsBuilder.prototype.calcSize = function calcSize(width, height) {
1035    var scale = _BaseMathUtils2.default.calcScale(width, height, this.defaults.width, this.defaults.height);
1036    return {
1037      width: scale * width,
1038      height: scale * height
1039    };
1040  };
1041
1042  BookPropsBuilder.prototype.calcTexels = function calcTexels(width, height) {
1043    var sheet = this.defaults.sheet,
1044        scale = _BaseMathUtils2.default.calcScale(width, height, sheet.widthTexels, sheet.heightTexels);
1045    return {
1046      widthTexels: scale * width,
1047      heightTexels: scale * height
1048    };
1049  };
1050
1051  BookPropsBuilder.prototype.calcProps = function calcProps(width, height) {
1052    this.props = _extends({}, this.defaults, this.calcSize(width, height), {
1053      sheet: _extends({}, this.defaults.sheet, this.calcTexels(width, height)),
1054      cover: _extends({}, this.defaults.cover),
1055      page: _extends({}, this.defaults.page)
1056    });
1057  };
1058
1059  BookPropsBuilder.prototype.calcSheets = function calcSheets(pages) {
1060    return this.sheets = Math.ceil(Math.max(0, pages - 4) / 2);
1061  };
1062
1063  BookPropsBuilder.prototype.getSheets = function getSheets() {
1064    return this.sheets;
1065  };
1066
1067  BookPropsBuilder.prototype.getProps = function getProps() {
1068    return this.props;
1069  };
1070
1071  BookPropsBuilder.prototype.getPageCallback = function getPageCallback() {
1072    return this.binds.pageCallback;
1073  };
1074
1075  BookPropsBuilder.prototype.ready = function ready() {
1076    if (this.onReady) {
1077      this.onReady(this.getProps(), this.getSheets(), this.getPageCallback());
1078    }
1079  };
1080
1081  return BookPropsBuilder;
1082}();
1083
1084exports.default = BookPropsBuilder;
1085
1086/***/ }),
1087/* 10 */
1088/***/ (function(module, exports, __webpack_require__) {
1089
1090"use strict";
1091
1092
1093exports.__esModule = true;
1094
1095var _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; };
1096
1097var _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; };
1098
1099var _libs = __webpack_require__(1);
1100
1101var _sheetBlock = __webpack_require__(41);
1102
1103var _sheetBlock2 = _interopRequireDefault(_sheetBlock);
1104
1105var _MathUtils = __webpack_require__(3);
1106
1107var _MathUtils2 = _interopRequireDefault(_MathUtils);
1108
1109var _ThreeUtils = __webpack_require__(20);
1110
1111var _ThreeUtils2 = _interopRequireDefault(_ThreeUtils);
1112
1113function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1114
1115function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1116
1117// import ThreeMarkup from './ThreeMarkup';
1118
1119var SheetBlock = function () {
1120  function SheetBlock(visual, p, first, last) {
1121    var angle = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
1122
1123    var _this = this;
1124
1125    var state = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'closed';
1126    var height = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
1127
1128    _classCallCheck(this, SheetBlock);
1129
1130    this.visual = visual;
1131    this.p = _extends({}, p, {
1132      first: first,
1133      last: last
1134    });
1135    var props = this.getProps();
1136
1137    var loadedPoints = this.loadPoints();
1138    Object.keys(loadedPoints).map(function (k) {
1139      _this[k] = loadedPoints[k][props.shape] || loadedPoints[k][0];
1140    });
1141
1142    this.pSpline = new _libs.THREE.Spline([]);
1143    for (var i = 0; i < this.interpolationPoints.x[0].length; ++i) {
1144      this.pSpline.points.push(new _libs.THREE.Vector3());
1145    }
1146
1147    this.iSpline = new _libs.THREE.Spline([]);
1148    for (var _i = 0; _i < _sheetBlock2.default.resX; ++_i) {
1149      this.iSpline.points.push(new _libs.THREE.Vector3());
1150    }
1151
1152    this.aSplines = [];
1153
1154    //this.three = new THREE.Object3D();
1155
1156    this.geometry = _sheetBlock2.default.geometry.clone();
1157
1158    this.p.sideFaces = [{
1159      first: 0,
1160      last: _sheetBlock2.default.faces[0]
1161    }, {
1162      first: _sheetBlock2.default.faces[0],
1163      last: _sheetBlock2.default.faces[1]
1164    }];
1165
1166    this.sideTexture = new _libs.THREE.Texture();
1167    this.sideTexture.wrapT = _libs.THREE.RepeatWrapping;
1168    this.sideTexture.repeat.set(0, last - first);
1169    this.sideTexture.image = props.sideTexture;
1170    this.sideTexture.needsUpdate = true;
1171
1172    this.materials = [new _libs.THREE.MeshPhongMaterial(), new _libs.THREE.MeshPhongMaterial(), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture }), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture }), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture }), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture })];
1173
1174    this.p.setTexture(this.materials[0], 2 * first);
1175    this.p.setTexture(this.materials[1], 2 * last - 1);
1176
1177    this.mesh = new _libs.THREE.Mesh(this.geometry, new _libs.THREE.MeshFaceMaterial(this.materials));
1178    this.mesh.castShadow = false;
1179    this.mesh.receiveShadow = false;
1180    // this.mesh.frustumCulled = true;
1181
1182    //this.three.add(this.mesh);
1183    this.three = this.mesh;
1184    this.three.userData.self = this;
1185
1186    this.markers = [];
1187    if (this.p.marker.use) {
1188      var l = this.geometry.vertices.length;
1189      var is = void 0;
1190      // is = [0, sheetBlock.resX-1, (sheetBlock.resZ-1)*sheetBlock.resX, sheetBlock.resZ*sheetBlock.resX-1];
1191      is = Array.apply(0, Array(l)).map(function (_, i) {
1192        return i;
1193      });
1194
1195      for (var _iterator = is, _isArray = Array.isArray(_iterator), _i2 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
1196        var _ref;
1197
1198        if (_isArray) {
1199          if (_i2 >= _iterator.length) break;
1200          _ref = _iterator[_i2++];
1201        } else {
1202          _i2 = _iterator.next();
1203          if (_i2.done) break;
1204          _ref = _i2.value;
1205        }
1206
1207        var _i3 = _ref;
1208
1209        var marker = _ThreeUtils2.default.createMarker(this.geometry.vertices[_i3], _i3 < l / 2 ? 0xFF0000 : 0x00FF00, this.p.marker.size);
1210        this.markers.push({
1211          marker: marker,
1212          vertex: _i3
1213        });
1214        this.three.add(marker);
1215      }
1216    }
1217
1218    this.corner = {
1219      use: true,
1220      height: 0,
1221      maxDistance: 0,
1222      points: [],
1223      OZ: new _libs.THREE.Vector3(0, 0, 1),
1224      axis: new _libs.THREE.Vector3()
1225    };
1226    this.set(0, 'closed', height, first, last); // calculate corner points
1227
1228    this.set(angle, state, height, first, last); // init position
1229
1230    // if(!SheetBlock.markup) {
1231    //   SheetBlock.markup=true;
1232    //   this.markup = new ThreeMarkup(this, 0, [{
1233    //     x: 0,
1234    //     y: 0,
1235    //   }, {
1236    //     x: 0.5,
1237    //     y: 1
1238    //   }, {
1239    //     x: 1,
1240    //     y: 0
1241    //   }].map((p)=>new THREE.Vector2(p.x, p.y)), {});
1242    // }
1243  }
1244
1245  SheetBlock.prototype.dispose = function dispose() {
1246    for (var _iterator2 = this.materials, _isArray2 = Array.isArray(_iterator2), _i4 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
1247      var _ref2;
1248
1249      if (_isArray2) {
1250        if (_i4 >= _iterator2.length) break;
1251        _ref2 = _iterator2[_i4++];
1252      } else {
1253        _i4 = _iterator2.next();
1254        if (_i4.done) break;
1255        _ref2 = _i4.value;
1256      }
1257
1258      var m = _ref2;
1259
1260      if (m.map) {
1261        m.map = null;
1262        m.needsUpdate = true;
1263      }
1264      m.dispose();
1265    }
1266    delete this.materials;
1267    this.geometry.dispose();
1268  };
1269
1270  SheetBlock.prototype.getSize = function getSize() {
1271    return this.p.last - this.p.first;
1272  };
1273
1274  SheetBlock.prototype.getProps = function getProps() {
1275    return _extends({}, this.p.page, {
1276      sheets: this.p.sheets
1277    });
1278  };
1279
1280  SheetBlock.prototype.getTopCerners = function getTopCerners() {
1281    var off = this.angle > Math.PI / 2 ? this.geometry.vertices.length / 2 : 0;
1282    return [this.geometry.vertices[off], this.geometry.vertices[_sheetBlock2.default.resX - 1 + off], this.geometry.vertices[(_sheetBlock2.default.resZ - 1) * _sheetBlock2.default.resX + off], this.geometry.vertices[_sheetBlock2.default.resZ * _sheetBlock2.default.resX - 1 + off]];
1283  };
1284
1285  SheetBlock.prototype.getTopSize = function getTopSize() {
1286    // const l=this.geometry.vertices.length, off = this.angle>Math.PI/2? l/2: 0,
1287    //   v0 = this.geometry.vertices[off], v1 = this.geometry.vertices[sheetBlock.resZ*sheetBlock.resX-1+off];
1288    // // is = [0, sheetBlock.resX-1, (sheetBlock.resZ-1)*sheetBlock.resX, sheetBlock.resZ*sheetBlock.resX-1];
1289    // return {
1290    //   width: Math.abs(v1.x-v0.x),
1291    //   height: Math.abs(v1.z-v0.z)
1292    // };
1293    var vs = this.getTopCerners();
1294    return {
1295      width: vs[0].distanceTo(vs[1]),
1296      height: vs[0].distanceTo(vs[2])
1297    };
1298  };
1299
1300  SheetBlock.prototype.getTopWorldRotation = function getTopWorldRotation(q) {
1301    q.x = -Math.PI / 2;
1302    return q;
1303  };
1304
1305  SheetBlock.prototype.getTopWorldPosition = function getTopWorldPosition(v) {
1306    var l = this.geometry.vertices.length,
1307        off = this.angle > Math.PI / 2 ? l / 2 : 0,
1308        vs = [this.geometry.vertices[off], this.geometry.vertices[_sheetBlock2.default.resX - 1 + off], this.geometry.vertices[(_sheetBlock2.default.resZ - 1) * _sheetBlock2.default.resX + off], this.geometry.vertices[_sheetBlock2.default.resZ * _sheetBlock2.default.resX - 1 + off]];
1309    v.set(0, 0, 0);
1310    for (var _iterator3 = vs, _isArray3 = Array.isArray(_iterator3), _i5 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
1311      var _ref3;
1312
1313      if (_isArray3) {
1314        if (_i5 >= _iterator3.length) break;
1315        _ref3 = _iterator3[_i5++];
1316      } else {
1317        _i5 = _iterator3.next();
1318        if (_i5.done) break;
1319        _ref3 = _i5.value;
1320      }
1321
1322      var vi = _ref3;
1323
1324      v.x += 0.25 * vi.x;
1325      v.y += 0.25 * vi.y;
1326      v.z += 0.25 * vi.z;
1327    }
1328    this.three.localToWorld(v);
1329    return v;
1330  };
1331
1332  SheetBlock.prototype.getInterpolationPoints = function getInterpolationPoints(inds, mod) {
1333    var ps = { x: [], y: [] },
1334        K = this.getProps().wave;
1335    for (var _iterator4 = inds, _isArray4 = Array.isArray(_iterator4), _i6 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
1336      var _ref4;
1337
1338      if (_isArray4) {
1339        if (_i6 >= _iterator4.length) break;
1340        _ref4 = _iterator4[_i6++];
1341      } else {
1342        _i6 = _iterator4.next();
1343        if (_i6.done) break;
1344        _ref4 = _i6.value;
1345      }
1346
1347      var i = _ref4;
1348
1349      ps.x.push([].concat(this.interpolationPoints.x[i]));
1350      ps.y.push(~mod.indexOf(i) ? this.interpolationPoints.y[i].map(function (n) {
1351        return K * n;
1352      }) : [].concat(this.interpolationPoints.y[i]));
1353    }
1354    return ps;
1355  };
1356
1357  SheetBlock.prototype.set = function set(angle) {
1358    var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;
1359    var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.corner.height;
1360    var first = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.p.first;
1361    var last = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.p.last;
1362
1363    var PI = Math.PI;
1364    this.state = state;
1365    var closedAngle = void 0,
1366        binderTurn = void 0;
1367    if ((typeof angle === 'undefined' ? 'undefined' : _typeof(angle)) === 'object') {
1368      this.angle = angle.openedAngle;
1369      closedAngle = angle.closedAngle;
1370      binderTurn = angle.binderTurn > PI / 2 ? PI - angle.binderTurn : angle.binderTurn;
1371    } else {
1372      this.angle = angle;
1373    }
1374    this.corner.height = height;
1375    if (this.p.first !== first || this.p.last !== last) {
1376      this.sideTexture.repeat.set(0, last - first);
1377      this.sideTexture.needsUpdate = true;
1378      if (this.p.first !== first) {
1379        this.p.setTexture(this.materials[0], 2 * first);
1380      }
1381      if (this.p.last !== last) {
1382        this.p.setTexture(this.materials[1], 2 * last - 1);
1383      }
1384    }
1385    this.p.first = first;
1386    this.p.last = last;
1387    var points = void 0;
1388    var props = this.getProps();
1389    if (this.state === 'closed') {
1390      points = this.getInterpolationPoints(this.closedInterpolationIndeces, this.closedInterpolationIndeces);
1391    } else if (this.state === 'opened') {
1392      if (closedAngle !== undefined && Math.abs(closedAngle - PI / 2) > 1e-2) {
1393        points = this.getInterpolationPoints(this.flatInterpolationIndeces, []);
1394        var ps = this.getPointsAtAngle(this.getInterpolationPoints(this.closedInterpolationIndeces, this.closedInterpolationIndeces), closedAngle > PI / 2 ? PI - closedAngle : closedAngle);
1395        points.x = [ps.x].concat(points.x);
1396        points.y = [ps.y].concat(points.y);
1397        // console.log(ps);
1398      } else {
1399        points = this.getInterpolationPoints(this.openedInterpolationIndeces, this.closedInterpolationIndeces);
1400      }
1401    }
1402    var hl = void 0,
1403        hr = void 0,
1404        offset = 0.5 * props.sheets * props.depth;
1405    if (this.state === 'closed') {
1406      offset -= 7e-6 * this.p.scale;
1407    }
1408    if (this.angle <= PI / 2) {
1409      hl = (props.sheets - first) * props.depth;
1410      hr = (props.sheets - last) * props.depth;
1411    } else {
1412      hl = first * props.depth;
1413      hr = last * props.depth;
1414    }
1415
1416    var inAngle = this.angle > PI / 2 ? PI - this.angle : this.angle,
1417        hAngle = this.state === 'closed' ? inAngle : binderTurn === undefined ? PI / 2 : binderTurn;
1418
1419    var _getPointsAtAngleAndH = this.getPointsAtAngleAndHs(points, inAngle, hAngle, [hl / props.width, hr / props.width]),
1420        left = _getPointsAtAngleAndH[0],
1421        right = _getPointsAtAngleAndH[1];
1422
1423    if (this.angle > PI / 2) {
1424      this.inverse(left);
1425      this.inverse(right);
1426      offset = -offset;
1427    }
1428    this.setPoints(left, right, offset);
1429  };
1430
1431  SheetBlock.prototype.setPoints = function setPoints(left, right, offset) {
1432    var _this2 = this;
1433
1434    var p = this.getProps();
1435    var i = 0;
1436
1437    var ys = [right, left];
1438    for (var y = 0; y < _sheetBlock2.default.resY; ++y) {
1439      for (var z = 0; z < _sheetBlock2.default.resZ; ++z) {
1440        for (var x = 0; x < _sheetBlock2.default.resX; ++x) {
1441          this.geometry.vertices[i++].set(ys[y].x[x] * p.width + offset, ys[y].y[x] * p.width, z * p.height / (_sheetBlock2.default.resZ - 1) - 0.5 * p.height);
1442        }
1443      }
1444    }
1445    if (i !== this.geometry.vertices.length) {
1446      console.warn('setPoints: bad mapping!');
1447    }
1448
1449    if (this.corner.use && !this.corner.points.length) {
1450      var plane = new _libs.THREE.Plane(),
1451          normal = plane.normal,
1452          planeOffset = (1 - this.getProps().flexibleCorner) * Math.min(p.width, p.height),
1453          proj = new _libs.THREE.Vector3();
1454      plane.setFromNormalAndCoplanarPoint(new _libs.THREE.Vector3(-1, 0, -1).normalize(), new _libs.THREE.Vector3(planeOffset + offset, 0, 0.5 * p.height));
1455      for (var _i7 = 0, l = this.geometry.vertices.length; _i7 < l; ++_i7) {
1456        plane.projectPoint(this.geometry.vertices[_i7], proj);
1457        proj.sub(this.geometry.vertices[_i7]);
1458        if (proj.x * normal.x + proj.y * normal.y + proj.z * normal.z > 0) {
1459          var d = proj.length() / planeOffset;
1460          this.corner.maxDistance = Math.max(this.corner.maxDistance, d);
1461          this.corner.points.push({ vertex: _i7, distance: d });
1462        }
1463      }
1464    }
1465
1466    if (this.corner.use && Math.abs(this.corner.height) > 1e-3) {
1467      var d2Angle = function d2Angle(d) {
1468        return p.cornerDeviation * _this2.corner.height / (1 + Math.exp(-p.bending * (d - 0.5 * _this2.corner.maxDistance)));
1469      };
1470      this.corner.axis.set(-1, 0, 1).normalize();
1471      this.corner.axis.applyAxisAngle(this.corner.OZ, this.angle);
1472      for (var _iterator5 = this.corner.points, _isArray5 = Array.isArray(_iterator5), _i8 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
1473        var _ref5;
1474
1475        if (_isArray5) {
1476          if (_i8 >= _iterator5.length) break;
1477          _ref5 = _iterator5[_i8++];
1478        } else {
1479          _i8 = _iterator5.next();
1480          if (_i8.done) break;
1481          _ref5 = _i8.value;
1482        }
1483
1484        var point = _ref5;
1485
1486        this.geometry.vertices[point.vertex].applyAxisAngle(this.corner.axis, d2Angle(point.distance));
1487      }
1488    }
1489
1490    for (var _iterator6 = this.markers, _isArray6 = Array.isArray(_iterator6), _i9 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
1491      var _ref6;
1492
1493      if (_isArray6) {
1494        if (_i9 >= _iterator6.length) break;
1495        _ref6 = _iterator6[_i9++];
1496      } else {
1497        _i9 = _iterator6.next();
1498        if (_i9.done) break;
1499        _ref6 = _i9.value;
1500      }
1501
1502      var m = _ref6;
1503
1504      m.marker.position.copy(this.geometry.vertices[m.vertex]);
1505    }
1506
1507    this.geometry.computeVertexNormals();
1508    //this.geometry.computeFaceNormals();
1509    this.geometry.computeBoundingSphere();
1510    //this.geometry.computeBoundingBox();
1511    this.geometry.verticesNeedUpdate = true;
1512
1513    if (this.markup) {
1514      this.markup.computeVertices();
1515    }
1516  };
1517
1518  SheetBlock.prototype.inverse = function inverse(ps) {
1519    for (var i = 0; i < ps.x.length; ++i) {
1520      ps.x[i] = -ps.x[i];
1521    }
1522    return ps;
1523  };
1524
1525  SheetBlock.prototype.getPointsAtHs = function getPointsAtHs(ps, angle, hs) {
1526    var _this3 = this;
1527
1528    var N = 1000;
1529    _MathUtils2.default.setSplinePoints(this.pSpline, ps);
1530    var bl = _MathUtils2.default.splitSpline(this.pSpline, N),
1531        r = [];
1532    {
1533      var p1 = _extends({}, this.pSpline.getPoint((N - 1) / N)),
1534          p2 = _extends({}, this.pSpline.getPoint(1)),
1535          dp = { x: p2.x - p1.x, y: p2.y - p1.y },
1536          ln = Math.sqrt(dp.x * dp.x + dp.y * dp.y),
1537          sp = this.pSpline.points[this.pSpline.points.length - 1];
1538      sp.set(sp.x + 0.1 * dp.x / ln, sp.y + 0.1 * dp.y / ln, 0);
1539      bl = _MathUtils2.default.splitSpline(this.pSpline, N);
1540    }
1541    bl.ls.push(1e7);
1542    _MathUtils2.default.mapl2L(bl.ls, bl.len, _sheetBlock2.default.resX, function (i) {
1543      for (var j = 0; j < hs.length; ++j) {
1544        if (!i) {
1545          r[j] = { x: [-hs[j] * Math.sin(angle)], y: [hs[j] * Math.cos(angle)] };
1546        } else {
1547          var p0 = _extends({}, _this3.pSpline.getPoint((i - 1) / N)),
1548              _p = _this3.pSpline.getPoint(i / N),
1549              x = -(_p.y - p0.y),
1550              y = _p.x - p0.x,
1551              l = Math.sqrt(x * x + y * y);
1552          r[j].x.push(_p.x + x / l * hs[j]);
1553          r[j].y.push(_p.y + y / l * hs[j]);
1554        }
1555      }
1556    });
1557
1558    var nps = [];
1559
1560    var _loop = function _loop(j) {
1561      nps[j] = { x: [], y: [] };
1562      _MathUtils2.default.setSplinePoints(_this3.iSpline, r[j]);
1563      var l = _MathUtils2.default.splitSpline(_this3.iSpline, N);
1564      l.ls.push(1e7);
1565      _MathUtils2.default.mapl2L(l.ls, 1, _sheetBlock2.default.resX, function (i) {
1566        var p = _this3.iSpline.getPoint(i / N);
1567        nps[j].x.push(p.x);
1568        nps[j].y.push(p.y);
1569      });
1570    };
1571
1572    for (var j = 0; j < hs.length; ++j) {
1573      _loop(j);
1574    }
1575    return nps;
1576  };
1577
1578  SheetBlock.prototype.getPointsAtAngleAndHs = function getPointsAtAngleAndHs(points, angle, hAngle, hs) {
1579    var ps = this.getPointsAtAngle(points, angle);
1580    return this.getPointsAtHs(ps, hAngle, hs);
1581  };
1582
1583  SheetBlock.prototype.getPointsAtAngle = function getPointsAtAngle(points, angle) {
1584    var ps = { x: [], y: [] },
1585        angles = [];
1586    angle /= Math.PI / 2;
1587    for (var j = 0; j < points.x.length; ++j) {
1588      angles.push(j / (points.x.length - 1));
1589    }
1590    for (var i = 0; i < points.x[0].length; ++i) {
1591      var xps = [],
1592          yps = [];
1593      for (var _j = 0; _j < points.x.length; ++_j) {
1594        xps.push(points.x[_j][i]);
1595        yps.push(points.y[_j][i]);
1596      }
1597      ps.x.push(this.interpolate(angles, xps, angle));
1598      ps.y.push(this.interpolate(angles, yps, angle));
1599    }
1600    return ps;
1601  };
1602
1603  SheetBlock.prototype.interpolate = function interpolate(x, y, xi) {
1604    if (!this.aSplines[x.length]) {
1605      this.aSplines[x.length] = new _libs.THREE.Spline([]);
1606      var ps = this.aSplines[x.length].points;
1607      for (var i = 0; i < x.length; ++i) {
1608        ps.push(new _libs.THREE.Vector3());
1609      }
1610    }
1611    var spline = this.aSplines[x.length];
1612    for (var _i10 = 0; _i10 < x.length; ++_i10) {
1613      spline.points[_i10].set(x[_i10], y[_i10], 0);
1614    }
1615    return spline.getPoint(Math.min(1, Math.max(xi, 0))).y;
1616  };
1617
1618  SheetBlock.prototype.loadPoints = function loadPoints() {
1619    var x = [],
1620        y = [];
1621    var _arr = [0, 0.2877, 0.6347, 0.8174, 1.0000];
1622    for (var _i11 = 0; _i11 < _arr.length; _i11++) {
1623      var r = _arr[_i11];
1624      x.push(r * Math.cos(0.9 * Math.PI / 4));
1625      y.push(r * Math.sin(0.9 * Math.PI / 4));
1626    }
1627
1628    var openedInterpolationIndeces = [[2, 3, 4], [2, 3, 4, 5, 6]],
1629        closedInterpolationIndeces = [[0, 1, 2], [0, 1, 2]],
1630        flatInterpolationIndeces = [[5, 4], [7, 6]],
1631        interpolationPoints = [{
1632      x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0.000, 0.286, 0.632, 0.815, 0.997], [0.000, 0.279, 0.623, 0.806, 0.988], [0.000, 0.126, 0.411, 0.593, 0.774], [0, 0, 0, 0, 0], x],
1633      y: [[0, 0, 0, 0, 0], [0.000, 0.030, 0.010, 0.002, 0.000], [0.000, 0.060, 0.017, 0.004, 0.000], [0.000, 0.259, 0.440, 0.446, 0.429], [0, 0.2877, 0.6347, 0.8174, 1.0000], y]
1634    }, {
1635      x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0.000, 0.286, 0.632, 0.815, 0.997], [0.000, 0.279, 0.623, 0.806, 0.988], [0.000, 0.233, 0.563, 0.746, 0.927], [0.000, 0.144, 0.433, 0.613, 0.796], [0.000, 0.070, 0.288, 0.455, 0.626], [0, 0, 0, 0, 0], x],
1636      y: [[0, 0, 0, 0, 0], [0.000, 0.030, 0.010, 0.002, 0.000], [0.000, 0.060, 0.01
16367, 0.004, 0.000], [0.000, 0.168, 0.269, 0.270, 0.255], [0.000, 0.245, 0.435, 0.458, 0.460], [0.000, 0.278, 0.544, 0.614, 0.673], [0, 0.2877, 0.6347, 0.8174, 1.0000], y]
1637    }];
1638
1639    return {
1640      interpolationPoints: interpolationPoints,
1641      openedInterpolationIndeces: openedInterpolationIndeces,
1642      closedInterpolationIndeces: closedInterpolationIndeces,
1643      flatInterpolationIndeces: flatInterpolationIndeces
1644    };
1645  };
1646
1647  return SheetBlock;
1648}();
1649
1650exports.default = SheetBlock;
1651
1652/***/ }),
1653/* 11 */
1654/***/ (function(module, exports, __webpack_require__) {
1655
1656"use strict";
1657
1658
1659exports.__esModule = true;
1660exports.props = props;
1661function props() {
1662  // const props = {
1663  //   height,
1664  //   width,
1665  //   gravity,
1666  //   injector,
1667  //   cachedPages,
1668  //   renderInactivePages,
1669  //   renderWhileFlipping,
1670  //   pagesForPredicting,
1671  //   preloadPages,
1672  //   sheet: {
1673  //     startVelocity,
1674  //     cornerDeviation,
1675  //     flexibility,
1676  //     flexibleCorner,
1677  //     bending,
1678  //     wave,
1679  //     shape,
1680  //     widthTexels,
1681  //     heightTexels,
1682  //     color,
1683  //     sideTexture
1684  //   },
1685  //   cover: {
1686  //     ...sheet,
1687  //     padding,
1688  //     binderTexture,
1689  //     depth,
1690  //     mass
1691  //   },
1692  //   page: {
1693  //     ...sheet,
1694  //     depth,
1695  //     mass
1696  //   }
1697  // };
1698
1699  return {
1700    height: 0.297,
1701    width: 0.21,
1702    gravity: 1,
1703    cachedPages: 50,
1704    renderInactivePages: true,
1705    renderInactivePagesOnMobile: false,
1706    renderWhileFlipping: false,
1707    pagesForPredicting: 5,
1708    preloadPages: 5,
1709    rtl: false,
1710    sheet: {
1711      startVelocity: 0.9,
1712      cornerDeviation: 0.25,
1713      flexibility: 10,
1714      flexibleCorner: 0.5,
1715      bending: 11,
1716      wave: 0.5,
1717      shape: 0,
1718      widthTexels: 5 * 210,
1719      heightTexels: 5 * 297,
1720      color: 0xFFFFFF
1721    },
1722    cover: {
1723      binderTexture: '',
1724      depth: 0.0003,
1725      padding: 0,
1726      mass: 0.003
1727    },
1728    page: {
1729      depth: 0.0001,
1730      mass: 0.001
1731    },
1732    cssLayerProps: {
1733      width: 1024
1734    }
1735  };
1736};
1737
1738/***/ }),
1739/* 12 */
1740/***/ (function(module, exports, __webpack_require__) {
1741
1742"use strict";
1743
1744
1745exports.__esModule = true;
1746exports.CSS3DSprite = exports.CSS3DObject = undefined;
1747
1748var _libs = __webpack_require__(0);
1749
1750function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1751
1752function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
1753
1754function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
1755
1756_libs.THREE.CSS3DObject = function (_THREE$Object3D) {
1757  _inherits(CSS3DObject, _THREE$Object3D);
1758
1759  function CSS3DObject() {
1760    var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
1761
1762    _classCallCheck(this, CSS3DObject);
1763
1764    var _this = _possibleConstructorReturn(this, _THREE$Object3D.call(this));
1765
1766    if (element) {
1767      _this.set(element);
1768    }
1769    return _this;
1770  }
1771
1772  CSS3DObject.prototype.set = function set(element) {
1773    this.element = element;
1774    this.element.style.position = 'absolute';
1775
1776    this.addEventListener('removed', function () {
1777      if (this.element.parentNode !== null) {
1778        this.element.parentNode.removeChild(this.element);
1779      }
1780    });
1781  };
1782
1783  return CSS3DObject;
1784}(_libs.THREE.Object3D);
1785
1786_libs.THREE.CSS3DSprite = function (_THREE$CSS3DObject) {
1787  _inherits(CSS3DSprite, _THREE$CSS3DObject);
1788
1789  function CSS3DSprite(element) {
1790    _classCallCheck(this, CSS3DSprite);
1791
1792    return _possibleConstructorReturn(this, _THREE$CSS3DObject.call(this, element));
1793  }
1794
1795  return CSS3DSprite;
1796}(_libs.THREE.CSS3DObject);
1797
1798_libs.THREE.CSS3DRenderer = function CSS3DRenderer() {
1799  _classCallCheck(this, CSS3DRenderer);
1800
1801  var _width, _height;
1802  var _widthHalf, _heightHalf;
1803
1804  var matrix = new _libs.THREE.Matrix4();
1805
1806  var cache = {
1807    camera: { fov: 0, style: '' },
1808    objects: {}
1809  };
1810
1811  var domElement = document.createElement('div');
1812  domElement.style.overflow = 'hidden';
1813
1814  this.domElement = domElement;
1815
1816  var cameraElement = document.createElement('div');
1817
1818  cameraElement.style.WebkitTransformStyle = 'preserve-3d';
1819  cameraElement.style.MozTransformStyle = 'preserve-3d';
1820  cameraElement.style.transformStyle = 'preserve-3d';
1821
1822  domElement.appendChild(cameraElement);
1823
1824  var isIE = /Trident/i.test(navigator.userAgent);
1825
1826  this.setClearColor = function () {};
1827
1828  this.getSize = function () {
1829
1830    return {
1831      width: _width,
1832      height: _height
1833    };
1834  };
1835
1836  this.setSize = function (width, height) {
1837
1838    _width = width;
1839    _height = height;
1840    _widthHalf = _width / 2;
1841    _heightHalf = _height / 2;
1842
1843    domElement.style.width = width + 'px';
1844    domElement.style.height = height + 'px';
1845
1846    cameraElement.style.width = width + 'px';
1847    cameraElement.style.height = height + 'px';
1848  };
1849
1850  function epsilon(value) {
1851
1852    return Math.abs(value) < 1e-10 ? 0 : value;
1853  }
1854
1855  function getCameraCSSMatrix(matrix) {
1856
1857    var elements = matrix.elements;
1858
1859    return 'matrix3d(' + epsilon(elements[0]) + ',' + epsilon(-elements[1]) + ',' + epsilon(elements[2]) + ',' + epsilon(elements[3]) + ',' + epsilon(elements[4]) + ',' + epsilon(-elements[5]) + ',' + epsilon(elements[6]) + ',' + epsilon(elements[7]) + ',' + epsilon(elements[8]) + ',' + epsilon(-elements[9]) + ',' + epsilon(elements[10]) + ',' + epsilon(elements[11]) + ',' + epsilon(elements[12]) + ',' + epsilon(-elements[13]) + ',' + epsilon(elements[14]) + ',' + epsilon(elements[15]) + ')';
1860  }
1861
1862  function getObjectCSSMatrix(matrix, cameraCSSMatrix) {
1863
1864    var elements = matrix.elements;
1865    var matrix3d = 'matrix3d(' + epsilon(elements[0]) + ',' + epsilon(elements[1]) + ',' + epsilon(elements[2]) + ',' + epsilon(elements[3]) + ',' + epsilon(-elements[4]) + ',' + epsilon(-elements[5]) + ',' + epsilon(-elements[6]) + ',' + epsilon(-elements[7]) + ',' + epsilon(elements[8]) + ',' + epsilon(elements[9]) + ',' + epsilon(elements[10]) + ',' + epsilon(elements[11]) + ',' + epsilon(elements[12]) + ',' + epsilon(elements[13]) + ',' + epsilon(elements[14]) + ',' + epsilon(elements[15]) + ')';
1866
1867    if (isIE) {
1868
1869      return 'translate(-50%,-50%)' + 'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)' + cameraCSSMatrix + matrix3d;
1870    }
1871
1872    return 'translate(-50%,-50%)' + matrix3d;
1873  }
1874
1875  function renderObject(object, camera, cameraCSSMatrix) {
1876
1877    if (object instanceof _libs.THREE.CSS3DObject) {
1878
1879      var style;
1880
1881      if (object instanceof _libs.THREE.CSS3DSprite) {
1882        matrix.copy(camera.matrixWorldInverse);
1883        matrix.transpose();
1884        matrix.copyPosition(object.matrixWorld);
1885        matrix.scale(object.scale);
1886
1887        matrix.elements[3] = 0;
1888        matrix.elements[7] = 0;
1889        matrix.elements[11] = 0;
1890        matrix.elements[15] = 1;
1891
1892        style = getObjectCSSMatrix(matrix, cameraCSSMatrix);
1893      } else {
1894
1895        style = getObjectCSSMatrix(object.matrixWorld, cameraCSSMatrix);
1896      }
1897
1898      var element = object.element;
1899      var cachedStyle = cache.objects[object.id] && cache.objects[object.id].style;
1900
1901      if (cachedStyle === undefined || cachedStyle !== style) {
1902        element.style.WebkitTransform = style;
1903        element.style.MozTransform = style;
1904        element.style.transform = style;
1905
1906        cache.objects[object.id] = { style: style };
1907        if (isIE) {
1908          cache.objects[object.id].distanceToCameraSquared = getDistanceToSquared(camera, object);
1909        }
1910      }
1911
1912      if (element.parentNode !== cameraElement) {
1913        cameraElement.appendChild(element);
1914      }
1915    }
1916
1917    for (var i = 0, l = object.children.length; i < l; i++) {
1918
1919      renderObject(object.children[i], camera, cameraCSSMatrix);
1920    }
1921  }
1922
1923  var getDistanceToSquared = function () {
1924
1925    var a = new _libs.THREE.Vector3();
1926    var b = new _libs.THREE.Vector3();
1927
1928    return function (object1, object2) {
1929
1930      a.setFromMatrixPosition(object1.matrixWorld);
1931      b.setFromMatrixPosition(object2.matrixWorld);
1932
1933      return a.distanceToSquared(b);
1934    };
1935  }();
1936
1937  function zOrder(scene) {
1938
1939    var order = Object.keys(cache.objects).sort(function (a, b) {
1940
1941      return cache.objects[a].distanceToCameraSquared - cache.objects[b].distanceToCameraSquared;
1942    });
1943    var zMax = order.length;
1944
1945    scene.traverse(function (object) {
1946
1947      var index = order.indexOf(object.id + '');
1948
1949      if (index !== -1) {
1950
1951        object.element.style.zIndex = zMax - index;
1952      }
1953    });
1954  }
1955
1956  this.render = function (scene, camera) {
1957
1958    var fov = camera.projectionMatrix.elements[5] * _heightHalf;
1959
1960    if (cache.camera.fov !== fov) {
1961
1962      domElement.style.WebkitPerspective = fov + 'px';
1963      domElement.style.MozPerspective = fov + 'px';
1964      domElement.style.perspective = fov + 'px';
1965
1966      cache.camera.fov = fov;
1967    }
1968
1969    scene.updateMatrixWorld();
1970
1971    if (camera.parent === null) camera.updateMatrixWorld();
1972
1973    var cameraCSSMatrix = 'translateZ(' + fov + 'px)' + getCameraCSSMatrix(camera.matrixWorldInverse);
1974
1975    var style = cameraCSSMatrix + 'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)';
1976
1977    if (cache.camera.style !== style && !isIE) {
1978
1979      cameraElement.style.WebkitTransform = style;
1980      cameraElement.style.MozTransform = style;
1981      cameraElement.style.transform = style;
1982
1983      cache.camera.style = style;
1984    }
1985
1986    renderObject(scene, camera, cameraCSSMatrix);
1987
1988    if (isIE) {
1989
1990      // IE10 and 11 does not support 'preserve-3d'.
1991      // Thus, z-order in 3D will not work.
1992      // We have to calc z-order manually and set CSS z-index for IE.
1993      // FYI: z-index can't handle object intersection
1994      zOrder(scene);
1995    }
1996  };
1997};
1998
1999exports.default = _libs.THREE.CSS3DRenderer;
2000
2001
2002var _CSS3DObject = _libs.THREE.CSS3DObject,
2003    _CSS3DSprite = _libs.THREE.CSS3DSprite;
2004exports.CSS3DObject = _CSS3DObject;
2005exports.CSS3DSprite = _CSS3DSprite;
2006
2007/***/ }),
2008/* 13 */
2009/***/ (function(module, exports, __webpack_require__) {
2010
2011"use strict";
2012
2013
2014exports.__esModule = true;
2015
2016var _libs = __webpack_require__(0);
2017
2018var _CSS3DRenderer = __webpack_require__(12);
2019
2020function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2021
2022function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
2023
2024function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
2025
2026var CSSLayer = function (_CSS3DObject) {
2027  _inherits(CSSLayer, _CSS3DObject);
2028
2029  CSSLayer.init = function init(doc) {
2030    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 150;
2031
2032    CSSLayer.delay = delay;
2033    CSSLayer.style = (0, _libs.$)('<style type=text/css>\n      .css-layer {\n    \t\topacity: 1;\n    \t\ttransition: opacity ' + delay + 'ms ease-out;\n        visibility: visible;\n        overflow: hidden;\n    \t}\n    \t.css-layer.hidden {\n    \t\ttransition: opacity ' + delay + 'ms ease-in, visibility ' + delay + 'ms step-end;\n    \t\topacity: 0;\n        visibility: hidden;\n      }\n    </style>').appendTo(doc.head);
2034  };
2035
2036  CSSLayer.dispose = function dispose() {
2037    CSSLayer.style.remove();
2038  };
2039
2040  function CSSLayer(width, height, props) {
2041    _classCallCheck(this, CSSLayer);
2042
2043    var _this = _possibleConstructorReturn(this, _CSS3DObject.call(this));
2044
2045    _this.props = props;
2046    _this.jContainer = (0, _libs.$)('<div class="hidden css-layer"></div>');
2047    var widthPxs = props.width,
2048        heightPxs = height / width * widthPxs;
2049    _this.jContainer.width(widthPxs).height(heightPxs);
2050    _this.scale.x /= widthPxs / width;
2051    _this.scale.y /= widthPxs / width;
2052
2053    _this.setData();
2054    _this.set(_this.jContainer[0]);
2055    return _this;
2056  }
2057
2058  CSSLayer.prototype.callInternal = function callInternal(name) {
2059    if (this.object && this.object[name]) {
2060      try {
2061        this.object[name]();
2062      } catch (e) {
2063        console.error(e);
2064      }
2065    }
2066  };
2067
2068  CSSLayer.prototype.dispose = function dispose() {
2069    this.clearInternals();
2070  };
2071
2072  CSSLayer.prototype.clearInternals = function clearInternals() {
2073    this.callInternal('dispose');
2074    !this.css || this.css.remove();
2075    !this.html || this.html.remove();
2076  };
2077
2078  CSSLayer.prototype.setData = function setData() {
2079    var css = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
2080    var html = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
2081    var js = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
2082
2083    this.clearInternals();
2084
2085    this.css = (0, _libs.$)('<style type="text/css">' + css + '</style>').appendTo(this.jContainer);
2086    this.html = (0, _libs.$)(html).appendTo(this.jContainer);
2087    var init = eval(js);
2088    if (init) {
2089      this.object = init(this.jContainer, this.props) || {};
2090    }
2091  };
2092
2093  CSSLayer.prototype.pendedCall = function pendedCall(clb) {
2094    var _this2 = this;
2095
2096    var timestamp = this.timestamp = Date.now();
2097    setTimeout(function () {
2098      if (timestamp === _this2.timestamp) {
2099        clb();
2100      }
2101    }, CSSLayer.delay);
2102  };
2103
2104  CSSLayer.prototype.isHidden = function isHidden() {
2105    return this.jContainer.hasClass('hidden');
2106  };
2107
2108  CSSLayer.prototype.hide = function hide() {
2109    var _this3 = this;
2110
2111    var res = void 0;
2112    if (!this.isHidden()) {
2113      this.jContainer.addClass('hidden');
2114      this.callInternal('hide');
2115      res = new Promise(function (resolve) {
2116        _this3.pendedCall(function () {
2117          _this3.callInternal('hidden');
2118          resolve();
2119        });
2120      });
2121    } else {
2122      res = Promise.resolve();
2123    }
2124    return res;
2125  };
2126
2127  CSSLayer.prototype.show = function show() {
2128    var _this4 = this;
2129
2130    var res = void 0;
2131    if (this.isHidden()) {
2132      this.jContainer.removeClass('hidden');
2133      this.callInternal('show');
2134      res = new Promise(function (resolve) {
2135        _this4.pendedCall(function () {
2136          _this4.callInternal('shown');
2137          resolve();
2138        });
2139      });
2140    } else {
2141      res = Promise.resolve();
2142    }
2143    return res;
2144  };
2145
2146  return CSSLayer;
2147}(_CSS3DRenderer.CSS3DObject);
2148
2149exports.default = CSSLayer;
2150
2151/***/ }),
2152/* 14 */
2153/***/ (function(module, exports, __webpack_require__) {
2154
2155"use strict";
2156
2157
2158exports.__esModule = true;
2159
2160function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2161
2162var Cache = function () {
2163  function Cache() {
2164    var maxSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Infinity;
2165    var sizeof = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Cache.countSizeof;
2166
2167    _classCallCheck(this, Cache);
2168
2169    this.os = new Map();
2170    this.sizeof = sizeof;
2171    this.maxSize = maxSize;
2172    this.size = 0;
2173  }
2174
2175  Cache.prototype.forEach = function forEach(clb) {
2176    this.os.forEach(function (v, k) {
2177      return clb([k, v]);
2178    });
2179  };
2180
2181  Cache.countSizeof = function countSizeof(value) {
2182    return 1;
2183  };
2184
2185  Cache.prototype.remove = function remove(k) {
2186    var res = false;
2187    var v = this.os.get(k);
2188    if (!v.locked || !v.locked(k)) {
2189      this.size -= this.sizeof(v);
2190      if (v.dispose) {
2191        v.dispose();
2192      }
2193      this.os.delete(k);
2194      res = true;
2195    }
2196    return res;
2197  };
2198
2199  Cache.prototype.freeSpace = function freeSpace() {
2200    var arr = [];
2201    for (var _iterator = this.os, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
2202      var _ref;
2203
2204      if (_isArray) {
2205        if (_i >= _iterator.length) break;
2206        _ref = _iterator[_i++];
2207      } else {
2208        _i = _iterator.next();
2209        if (_i.done) break;
2210        _ref = _i.value;
2211      }
2212
2213      var p = _ref;
2214
2215      arr.push({ timestamp: p[1].timestamp, key: p[0] });
2216    }
2217    arr.sort(function (a, b) {
2218      return a.timestamp - b.timestamp;
2219    });
2220    for (var i = 0; i < arr.length && this.size > 3 * this.maxSize / 4; ++i) {
2221      this.remove(arr[i].key);
2222    }
2223  };
2224
2225  Cache.prototype.dispose = function dispose() {
2226    var arr = [];
2227    for (var _iterator2 = this.os, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
2228      var _ref2;
2229
2230      if (_isArray2) {
2231        if (_i2 >= _iterator2.length) break;
2232        _ref2 = _iterator2[_i2++];
2233      } else {
2234        _i2 = _iterator2.next();
2235        if (_i2.done) break;
2236        _ref2 = _i2.value;
2237      }
2238
2239      var p = _ref2;
2240
2241      arr.push({ v: p[1], k: p[0] });
2242    }
2243    for (var _iterator3 = arr, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
2244      var _ref3;
2245
2246      if (_isArray3) {
2247        if (_i3 >= _iterator3.length) break;
2248        _ref3 = _iterator3[_i3++];
2249      } else {
2250        _i3 = _iterator3.next();
2251        if (_i3.done) break;
2252        _ref3 = _i3.value;
2253      }
2254
2255      var o = _ref3;
2256
2257      if (o.v.dispose) {
2258        o.v.dispose();
2259      }
2260      this.os.delete(o.k);
2261    }
2262  };
2263
2264  Cache.recursionSizeof = function recursionSizeof(value) {
2265    var size = 0;
2266    if (value) {
2267      ++size;
2268      var len = value.length;
2269      if (len === undefined) {
2270        for (var p in value) {
2271          if (value.hasOwnProperty(p)) {
2272            size += Cache.recursionSizeof(value[p]);
2273          }
2274        }
2275      } else {
2276        size += len;
2277      }
2278    }
2279    return size;
2280  };
2281
2282  Cache.prototype.getTimestamp = function getTimestamp() {
2283    return Date.now();
2284  };
2285
2286  Cache.prototype.get = function get(key) {
2287    var value = this.os.get(key);
2288    if (value) {
2289      value.timestamp = this.getTimestamp();
2290    }
2291    return value;
2292  };
2293
2294  Cache.prototype.put = function put(key, value) {
2295    value.timestamp = this.getTimestamp();
2296    this.os.set(key, value);
2297    this.size += this.sizeof(value);
2298    if (this.size > this.maxSize) {
2299      this.freeSpace();
2300    }
2301    return value;
2302  };
2303
2304  return Cache;
2305}();
2306
2307exports.default = Cache;
2308
2309/***/ }),
2310/* 15 */
2311/***/ (function(module, exports, __webpack_require__) {
2312
2313"use strict";
2314
2315
2316exports.__esModule = true;
2317
2318var _libs = __webpack_require__(0);
2319
2320function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2321
2322function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
2323
2324function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
2325
2326var Controller = function (_THREE$EventDispatche) {
2327  _inherits(Controller, _THREE$EventDispatche);
2328
2329  function Controller() {
2330    _classCallCheck(this, Controller);
2331
2332    return _possibleConstructorReturn(this, _THREE$EventDispatche.apply(this, arguments));
2333  }
2334
2335  Controller.prototype.handleDefault = function handleDefault(id, e, data) {
2336    //console.log(id+'-'+e.type+'-'+data);
2337  };
2338
2339  Controller.prototype.dispatchAsync = function dispatchAsync(e) {
2340    var _this2 = this;
2341
2342    Promise.resolve().then(function () {
2343      return _this2.dispatchEvent(e);
2344    });
2345  };
2346
2347  Controller.prototype.dispose = function dispose() {};
2348
2349  return Controller;
2350}(_libs.THREE.EventDispatcher);
2351
2352exports.default = Controller;
2353
2354/***/ }),
2355/* 16 */
2356/***/ (function(module, exports, __webpack_require__) {
2357
2358"use strict";
2359
2360
2361exports.__esModule = true;
2362
2363var _EventConverter2 = __webpack_require__(6);
2364
2365var _EventConverter3 = _interopRequireDefault(_EventConverter2);
2366
2367function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2368
2369function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2370
2371function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
2372
2373function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
2374
2375var CustomEventConverter = function (_EventConverter) {
2376  _inherits(CustomEventConverter, _EventConverter);
2377
2378  // custom
2379  // testIntersection(e, data);
2380  // custom.object
2381  // test(object);
2382
2383  function CustomEventConverter(wnd, doc) {
2384    var customTest = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {
2385      return false;
2386    };
2387    var eDoc = arguments[3];
2388
2389    _classCallCheck(this, CustomEventConverter);
2390
2391    var _this = _possibleConstructorReturn(this, _EventConverter.call(this, wnd, doc));
2392
2393    _this.eDoc = eDoc;
2394    _this.customTest = customTest;
2395    _this.customs = [];
2396    return _this;
2397  }
2398
2399  CustomEventConverter.prototype.test = function test(object1, object2) {
2400    return object1 && object2 ? this.customTest(object1, object2) : false;
2401  };
2402
2403  CustomEventConverter.prototype.getCallback = function getCallback(object) {
2404    return object.target.callback;
2405  };
2406
2407  CustomEventConverter.prototype.addCustom = function addCustom(custom) {
2408    this.customs.push(custom);
2409  };
2410
2411  CustomEventConverter.prototype.getObject = function getObject(e, data) {
2412    var object = void 0;
2413    if (data.doc === this.eDoc) {
2414      for (var _iterator = this.customs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
2415        var _ref;
2416
2417        if (_isArray) {
2418          if (_i >= _iterator.length) break;
2419          _ref = _iterator[_i++];
2420        } else {
2421          _i = _iterator.next();
2422          if (_i.done) break;
2423          _ref = _i.value;
2424        }
2425
2426        var custom = _ref;
2427
2428        object = custom.testIntersection(e, data);
2429        if (object) {
2430          break;
2431        }
2432      }
2433    }
2434    return object;
2435  };
2436
2437  return CustomEventConverter;
2438}(_EventConverter3.default);
2439
2440exports.default = CustomEventConverter;
2441
2442/***/ }),
2443/* 17 */
2444/***/ (function(module, exports, __webpack_require__) {
2445
2446"use strict";
2447
2448
2449exports.__esModule = true;
2450
2451var _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; };
2452
2453var _Utils = __webpack_require__(4);
2454
2455var _Utils2 = _interopRequireDefault(_Utils);
2456
2457function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2458
2459function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2460
2461var Finder = function () {
2462  Finder.isDelimetr = function isDelimetr(s) {
2463    return s === Finder.DELIMITER;
2464  };
2465
2466  Finder.prototype.merge = function merge() {
2467    var as = [],
2468        map = [],
2469        strs = this.strs;
2470    var p = 0;
2471    for (var i = 0; i < strs.length; ++i) {
2472      if (strs[i].length) {
2473        map.push({
2474          base: i,
2475          offset: p
2476        });
2477        as.push(strs[i]);
2478        p += strs[i].length;
2479        if (i < strs.length - 1 && !Finder.isDelimetr(strs[i].charAt(strs[i].length - 1)) && !Finder.isDelimetr(strs[i + 1].charAt(0))) {
2480          as.push(Finder.DELIMITER);
2481          ++p;
2482        }
2483      }
2484    }
2485    this.map = map;
2486    this.str = as.join('');
2487  };
2488
2489  Finder.prototype.addHits = function addHits(p) {
2490    var info = this.map[_Utils2.default.lowerBound(this.map, { offset: p }, function (a, b) {
2491      return a.offset - b.offset;
2492    })];
2493    var chars = this.pattern.length,
2494        i = info.base;
2495    p -= info.offset;
2496    while (chars) {
2497      if (this.strs[i].length) {
2498        var delimeter = i < this.strs.length - 1 && !Finder.isDelimetr(this.strs[i].charAt(this.strs[i].length - 1)) && !Finder.isDelimetr(this.strs[i + 1].charAt(0)),
2499            length = Math.min(this.strs[i].length + (delimeter ? 1 : 0) - p, chars);
2500        if (p < this.strs[i].length) {
2501          this.hits.push({
2502            index: i,
2503            offset: p,
2504            length: Math.min(length, this.strs[i].length - p)
2505          });
2506        }
2507        chars -= length;
2508        ++i;
2509        p = 0;
2510      }
2511    }
2512  };
2513
2514  Finder.prototype.addContext = function addContext(p) {
2515    var f = p,
2516        l = p + this.pattern.length - 1,
2517        dels = this.props.contextLength,
2518        prevDels = dels + 1;
2519    while (dels && prevDels - dels) {
2520      prevDels = dels;
2521      if (dels % 2) {
2522        for (var i = f - 2; i >= 0; --i) {
2523          if (Finder.isDelimetr(this.str[i]) || i === 0) {
2524            f = i === 0 ? 0 : i + 1;
2525            --dels;
2526            break;
2527          }
2528        }
2529      } else {
2530        for (var _i = l + 2; _i < this.str.length; ++_i) {
2531          if (Finder.isDelimetr(this.str[_i]) || _i === this.str.length - 1) {
2532            l = _i === this.str.length - 1 ? _i === this.str.length - 1 : _i - 1;
2533            --dels;
2534            break;
2535          }
2536        }
2537      }
2538    }
2539    this.contexts.push(this.str.substr(f, l - f + 1));
2540  };
2541
2542  Finder.prototype.getHits = function getHits() {
2543    return this.hits;
2544  };
2545
2546  Finder.prototype.getContexts = function getContexts() {
2547    return this.contexts;
2548  };
2549
2550  function Finder(strs, pattern, props) {
2551    _classCallCheck(this, Finder);
2552
2553    this.props = _extends({}, Finder.defaults, props);
2554    this.strs = strs;
2555    var data = this.merge(strs);
2556    this.hits = [];
2557    this.contexts = [];
2558    this.pattern = pattern.toLowerCase();
2559    this.lstr = this.str.toLowerCase();
2560    var p = 0;
2561    while (true) {
2562      p = this.lstr.indexOf(this.pattern, p);
2563      if (p === -1) {
2564        break;
2565      } else {
2566        this.addHits(p);
2567        this.addContext(p);
2568        p += this.pattern.length;
2569      }
2570    }
2571  }
2572
2573  return Finder;
2574}();
2575
2576Finder.DELIMITER = ' ';
2577Finder.defaults = {
2578  contextLength: 7,
2579  hits: true,
2580  contexts: true
2581};
2582exports.default = Finder;
2583
2584/***/ }),
2585/* 18 */
2586/***/ (function(module, exports, __webpack_require__) {
2587
2588"use strict";
2589
2590
2591exports.__esModule = true;
2592
2593var _libs = __webpack_require__(0);
2594
2595var _Utils = __webpack_require__(4);
2596
2597var _Utils2 = _interopRequireDefault(_Utils);
2598
2599function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2600
2601function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2602
2603_libs.PDFJS.workerSrc = (window.PDFJS_LOCALE ? PDFJS_LOCALE : __webpack_require__.i({"pdfJsWorker":"/FlipBook/3d-flip-book/js/pdf.worker.js","pdfJsCMapUrl":"cmaps/"})).pdfJsWorker;
2604_libs.PDFJS.cMapUrl = (window.PDFJS_LOCALE ? PDFJS_LOCALE : __webpack_require__.i({"pdfJsWorker":"/FlipBook/3d-flip-book/js/pdf.worker.js","pdfJsCMapUrl":"cmaps/"})).pdfJsCMapUrl;
2605_libs.PDFJS.cMapPacked = true;
2606_libs.PDFJS.disableAutoFetch = true;
2607_libs.PDFJS.disableStream = true;
2608_libs.PDFJS.imageResourcesPath = 'images/pdfjs/';
2609_libs.PDFJS.externalLinkTarget = _libs.PDFJS.LinkTarget.BLANK;
2610
2611var Pdf = function () {
2612  function Pdf(src, loadingProgress) {
2613    var _this = this;
2614
2615    _classCallCheck(this, Pdf);
2616
2617    this.src = _Utils2.default.normalizeUrl(src);
2618    this.handlerQueue = [];
2619    this.progresData = { loaded: -1, total: 1 };
2620    this.loadingProgress = loadingProgress;
2621
2622    this.task = _libs.PDFJS.getDocument({
2623      url: this.src,
2624      rangeChunkSize: 512 * 1024
2625    });
2626    this.task.onProgress = function (data) {
2627      if (_this.loadingProgress) {
2628        var cur = Math.floor(100 * data.loaded / data.total),
2629            old = Math.floor(100 * _this.progresData.loaded / _this.progresData.total);
2630        if (cur !== old) {
2631          cur = isNaN(cur) ? 0 : cur;
2632          cur = cur > 100 ? 100 : cur;
2633          Promise.resolve().then(function () {
2634            _this.loadingProgress(cur);
2635          });
2636        }
2637      }
2638      _this.progresData = data;
2639    };
2640    this.task.then(function (handler) {
2641      if (handler.numPages > 1) {
2642        Promise.all([handler.getPage(1), handler.getPage(2)]).then(function (pages) {
2643          _this.init(handler, pages);
2644        });
2645      } else {
2646        _this.init(handler);
2647      }
2648    }).catch(function (e) {
2649      return console.error(e);
2650    });
2651  }
2652
2653  Pdf.prototype.init = function init(handler, pages) {
2654    this.handler = handler;
2655    this.doubledPages = pages ? Math.abs(2 * Pdf.getPageSize(pages[0]).width - Pdf.getPageSize(pages[1]).width) / Pdf.getPageSize(pages[0]).width < 0.01 : false;
2656    var done = Promise.resolve(handler);
2657
2658    var _loop = function _loop() {
2659      if (_isArray) {
2660        if (_i >= _iterator.length) return 'break';
2661        _ref = _iterator[_i++];
2662      } else {
2663        _i = _iterator.next();
2664        if (_i.done) return 'break';
2665        _ref = _i.value;
2666      }
2667
2668      var clb = _ref;
2669
2670      done = done.then(function (handler) {
2671        clb(handler);
2672        return handler;
2673      });
2674    };
2675
2676    for (var _iterator = this.handlerQueue.reverse(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
2677      var _ref;
2678
2679      var _ret = _loop();
2680
2681      if (_ret === 'break') break;
2682    }
2683  };
2684
2685  Pdf.prototype.getPageType = function getPageType(n) {
2686    return !this.doubledPages || n === 0 || n === this.getPagesNum() - 1 ? 'full' : n & 1 ? 'left' : 'right';
2687  };
2688
2689  Pdf.prototype.getPage = function getPage(n) {
2690    return this.handler.getPage(this.doubledPages ? Math.ceil(n / 2) + 1 : n + 1);
2691  };
2692
2693  Pdf.prototype.dispose = function dispose() {
2694    this.handlerQueue.splice(0, this.handlerQueue.length);
2695    delete this.handler;
2696  };
2697
2698  Pdf.prototype.setLoadingProgressClb = function setLoadingProgressClb(clb) {
2699    this.loadingProgress = clb;
2700  };
2701
2702  Pdf.prototype.getPagesNum = function getPagesNum() {
2703    return this.handler ? this.doubledPages ? 2 * (this.handler.numPages - 1) : this.handler.numPages : undefined;
2704  };
2705
2706  Pdf.getPageSize = function getPageSize(page) {
2707    return {
2708      width: page.view[2] - page.view[0],
2709      height: page.view[3] - page.view[1]
2710    };
2711  };
2712
2713  //   if(pages>1) {
2714  //   handler.getPage(2).
2715  //   then((page)=> {
2716  //     const size1 = Pdf.getPageSize(page);
2717  //     this.props.doubledPages = 2*size0.width===size1.width;
2718  //     this.ready();
2719  //   }).
2720  //   catch(()=> this.ready());
2721  // }
2722  // else {
2723
2724  Pdf.prototype.getHandler = function getHandler(clb) {
2725    if (this.handler) {
2726      clb(this.handler);
2727    } else {
2728      this.handlerQueue.push(clb);
2729    }
2730  };
2731
2732  return Pdf;
2733}();
2734
2735exports.default = Pdf;
2736
2737/***/ }),
2738/* 19 */
2739/***/ (function(module, exports, __webpack_require__) {
2740
2741"use strict";
2742
2743
2744exports.__esModule = true;
2745
2746var _libs = __webpack_require__(0);
2747
2748function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2749
2750var ThreeEventConverterFs = function () {
2751  ThreeEventConverterFs.objectsTest = function objectsTest(object1, object2) {
2752    return object1 && object2 ? object1.object === object2.object : false;
2753  };
2754
2755  ThreeEventConverterFs.objectsAndFacesTest = function objectsAndFacesTest(object1, object2) {
2756    return object1 && object2 ? object1.object === object2.object && object1.face.materialIndex === object2.face.materialIndex : false;
2757  };
2758
2759  function ThreeEventConverterFs(visualWorld) {
2760    var test = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ThreeEventConverterFs.objectsAndFacesTest;
2761
2762    _classCallCheck(this, ThreeEventConverterFs);
2763
2764    this.visual = visualWorld;
2765    this.coords = new _libs.THREE.Vector2();
2766    this.raycaster = this.visual.raycaster;
2767    this.camera = this.visual.camera;
2768    this.threes = [];
2769    this.test = test;
2770  }
2771
2772  ThreeEventConverterFs.prototype.addThree = function addThree(three) {
2773    this.threes.push(three);
2774  };
2775
2776  ThreeEventConverterFs.prototype.removeThree = function removeThree(three) {
2777    var i = this.threes.indexOf(three);
2778    if (~i) {
2779      this.threes.splice(i, 1);
2780    }
2781  };
2782
2783  ThreeEventConverterFs.prototype.getObject = function getObject(e) {
2784    this.setCoordsFromEvent(e);
2785    this.raycaster.setFromCamera(this.coords, this.camera);
2786    var intersects = this.raycaster.intersectObjects(this.threes);
2787    return intersects[0];
2788  };
2789
2790  return ThreeEventConverterFs;
2791}();
2792
2793exports.default = ThreeEventConverterFs;
2794
2795/***/ }),
2796/* 20 */
2797/***/ (function(module, exports, __webpack_require__) {
2798
2799"use strict";
2800
2801
2802exports.__esModule = true;
2803
2804var _BaseMathUtils = __webpack_require__(2);
2805
2806var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);
2807
2808function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2809
2810function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2811
2812var ThreeUtils = function () {
2813  function ThreeUtils() {
2814    _classCallCheck(this, ThreeUtils);
2815  }
2816
2817  ThreeUtils.vertices2UVs = function vertices2UVs(vertices, indeces, first, last, converClb) {
2818    var r = [];
2819    for (var i = first; i < last; ++i) {
2820      var vis = [indeces[i].a, indeces[i].b, indeces[i].c];
2821      for (var j = 0; j < vis.length; ++j) {
2822        if (!r[vis[j]]) {
2823          r[vis[j]] = converClb(vertices[vis[j]]);
2824        }
2825      }
2826    }
2827    return r;
2828  };
2829
2830  ThreeUtils.computeFaceVertexUvs = function computeFaceVertexUvs(geometry, faces) {
2831    var uvs = [ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, 0, faces[0], function (p) {
2832      return new THREE.Vector2(p.x, 1 - p.z);
2833    }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[0], faces[1], function (p) {
2834      return new THREE.Vector2(1 - p.x, 1 - p.z);
2835    }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[1], faces[2], function (p) {
2836      return new THREE.Vector2(p.x, p.y);
2837    }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[2], faces[3], function (p) {
2838      return new THREE.Vector2(1 - p.x, p.y);
2839    }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[3], faces[4], function (p) {
2840      return new THREE.Vector2(p.z, p.y);
2841    }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[4], geometry.faces.length, function (p) {
2842      return new THREE.Vector2(1 - p.z, p.y);
2843    })];
2844
2845    var uvsi = 0;
2846    for (var i = 0; i < geometry.faces.length; ++i) {
2847      uvsi += faces[uvsi] === i;
2848      var f = geometry.faces[i];
2849      f.materialIndex = uvsi;
2850      geometry.faceVertexUvs[0][i] = [uvs[uvsi][f.a], uvs[uvsi][f.b], uvs[uvsi][f.c]];
2851    }
2852  };
2853
2854  ThreeUtils.createMarker = function createMarker(p, c, size) {
2855    var marker = new THREE.Mesh(new THREE.SphereGeometry(size), new THREE.MeshPhongMaterial({ color: c }));
2856    marker.position.set(p.x, p.y, p.z);
2857    return marker;
2858  };
2859
2860  ThreeUtils.findUvTris = function findUvTris(geometry, ps, first, last) {
2861    var res = [];
2862    for (var _iterator = ps, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
2863      var _ref;
2864
2865      if (_isArray) {
2866        if (_i >= _iterator.length) break;
2867        _ref = _iterator[_i++];
2868      } else {
2869        _i = _iterator.next();
2870        if (_i.done) break;
2871        _ref = _i.value;
2872      }
2873
2874      var p = _ref;
2875
2876      var found = false;
2877      for (var i = first; i < last && !found; ++i) {
2878        var tri = geometry.faceVertexUvs[0][i];
2879        if (_BaseMathUtils2.default.isInsideConvPoly(tri, p)) {
2880          res.push({
2881            coefs: _BaseMathUtils2.default.computeInterpCoefs(tri, p),
2882            i: i
2883          });
2884          found = true;
2885        }
2886      }
2887      if (!found) {
2888        console.error('Bad point');
2889        res.push(undefined);
2890      }
2891    }
2892    return res;
2893  };
2894
2895  ThreeUtils.findInternalVertices = function findInternalVertices(geometry, ps, first, last) {
2896    var res = {};
2897    for (var i = first; i < last; ++i) {
2898      var tri = geometry.faceVertexUvs[0][i],
2899          f = geometry.faces[i],
2900          vs = [f.a, f.b, f.c];
2901      for (var j = 0; j < tri.length; ++j) {
2902        if (res[vs[j]] === undefined && _BaseMathUtils2.default.isInsidePoly(ps, tri[j])) {
2903          res[vs[j]] = {
2904            p: tri[j],
2905            i: vs[j],
2906            n: f.vertexNormals[j]
2907          };
2908        }
2909      }
2910    }
2911    return Object.values(res);
2912  };
2913
2914  return ThreeUtils;
2915}();
2916
2917exports.default = ThreeUtils;
2918
2919/***/ }),
2920/* 21 */
2921/***/ (function(module, exports, __webpack_require__) {
2922
2923"use strict";
2924
2925
2926exports.__esModule = true;
2927
2928function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2929
2930var Target = function () {
2931  function Target() {
2932    _classCallCheck(this, Target);
2933  }
2934
2935  Target.test = function test(object1, object2) {
2936    return object1.target === object2.target;
2937  };
2938
2939  return Target;
2940}();
2941
2942exports.default = Target;
2943
2944/***/ }),
2945/* 22 */
2946/***/ (function(module, exports, __webpack_require__) {
2947
2948"use strict";
2949
2950
2951var _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; };
2952
2953var _libs = __webpack_require__(1);
2954
2955var _Detector = __webpack_require__(45);
2956
2957var _Detector2 = _interopRequireDefault(_Detector);
2958
2959var _VisualWorld = __webpack_require__(66);
2960
2961var _VisualWorld2 = _interopRequireDefault(_VisualWorld);
2962
2963var _PdfLinksHandler = __webpack_require__(35);
2964
2965var _PdfLinksHandler2 = _interopRequireDefault(_PdfLinksHandler);
2966
2967var _Book = __webpack_require__(26);
2968
2969var _Book2 = _interopRequireDefault(_Book);
2970
2971var _BookView = __webpack_require__(29);
2972
2973var _BookView2 = _interopRequireDefault(_BookView);
2974
2975var _BookController = __webpack_require__(27);
2976
2977var _BookController2 = _interopRequireDefault(_BookController);
2978
2979var _PdfBookPropsBuilder = __webpack_require__(34);
2980
2981var _PdfBookPropsBuilder2 = _interopRequireDefault(_PdfBookPropsBuilder);
2982
2983var _ClbBookPropsBuilder = __webpack_require__(30);
2984
2985var _ClbBookPropsBuilder2 = _interopRequireDefault(_ClbBookPropsBuilder);
2986
2987var _LoadingController = __webpack_require__(53);
2988
2989var _LoadingController2 = _interopRequireDefault(_LoadingController);
2990
2991var _Search = __webpack_require__(58);
2992
2993var _Search2 = _interopRequireDefault(_Search);
2994
2995var _Bookmarks = __webpack_require__(44);
2996
2997var _Bookmarks2 = _interopRequireDefault(_Bookmarks);
2998
2999var _Thumbnails = __webpack_require__(63);
3000
3001var _Thumbnails2 = _interopRequireDefault(_Thumbnails);
3002
3003var _TocController = __webpack_require__(40);
3004
3005var _TocController2 = _interopRequireDefault(_TocController);
3006
3007var _BookPrinter = __webpack_require__(28);
3008
3009var _BookPrinter2 = _interopRequireDefault(_BookPrinter);
3010
3011var _AutoNavigator = __webpack_require__(24);
3012
3013var _AutoNavigator2 = _interopRequireDefault(_AutoNavigator);
3014
3015var _SoundsEnviroment = __webpack_require__(39);
3016
3017var _SoundsEnviroment2 = _interopRequireDefault(_SoundsEnviroment);
3018
3019function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3020
3021_libs.$.fn.FlipBook = function (options) {
3022  var scene = {
3023    dispose: function dispose() {
3024      if (this.ready) {
3025        !scene.pdfLinksHandler || scene.pdfLinksHandler.dispose();
3026        delete scene.pdfLinksHandler;
3027        scene.sounds.dispose();
3028        delete scene.sounds;
3029        scene.tocCtrl.dispose();
3030        delete scene.tocCtrl;
3031        scene.thumbnails.dispose();
3032        delete scene.thumbnails;
3033        !scene.bookmarks || scene.bookmarks.dispose();
3034        delete scene.bookmarks;
3035        scene.ctrl.dispose();
3036        delete scene.ctrl;
3037        scene.bookPrinter.dispose();
3038        delete scene.bookPrinter;
3039        scene.book.dispose();
3040        delete scene.book;
3041        scene.propsBuilder.dispose();
3042        delete scene.propsBuilder;
3043        delete scene.bookBuilder;
3044        scene.visual.dispose();
3045        delete scene.visual;
3046        scene.view.dispose();
3047        delete scene.view;
3048        delete scene.dispose;
3049      } else {
3050        this.pendingDispose = true;
3051      }
3052    }
3053  };
3054  options = _extends({}, options);
3055  scene.view = new _BookView2.default(this.length ? this[0] : (0, _libs.$)('<div>').appendTo('body'), function () {
3056    if (!_Detector2.default.webgl) {
3057      _Detector2.default.addGetWebGLMessage({ parent: scene.view.getView() });
3058    } else {
3059      scene.loadingCtrl = new _LoadingController2.default(scene.view, true, function (progress) {
3060        return progress === 0 ? (0, _libs.tr)('Please wait... the Application is Loading') : (0, _libs.tr)('PDF is Loading:') + ' ' + progress + '%';
3061      });
3062      scene.visual = new _VisualWorld2.default(scene.view.getContainer().ownerDocument.defaultView, scene.view.getContainer().ownerDocument, scene.view.getView());
3063      scene.bookBuilder = function (props, sheets, pageCallback) {
3064        props.cssLayerProps = _extends({}, props.cssLayerProps, {
3065          scene: scene
3066        });
3067        if (options.propertiesCallback) {
3068          props = options.propertiesCallback(props);
3069        }
3070        scene.book = new _Book2.default(scene.visual, sheets, pageCallback, props);
3071        scene.bookPrinter = new _BookPrinter2.default(scene.visual, scene.book, (options.template || {}).printStyle);
3072        scene.loadingCtrl.dispose();
3073        delete scene.loadingCtrl;
3074        scene.ctrl = new _BookController2.default(scene.book, scene.view, options.controlsProps);
3075        scene.book.setInjector(function (w) {
3076          w.jQuery = w.$ = _libs.$;
3077          w.book = scene.book;
3078          w.bookCtrl = scene.ctrl;
3079          if (props.injector) {
3080            props.injector(w);
3081          }
3082        });
3083        scene.view.addHandler(scene.ctrl);
3084        scene.ctrl.setPrinter(scene.bookPrinter);
3085        var test = pageCallback(0);
3086
3087        scene.search = new _Search2.default(scene.view.getSearchView(), scene.book.getPages());
3088        scene.search.onQuery = scene.book.setQuery.bind(scene.book);
3089        scene.book.addEventListener('searchResults', function (e) {
3090          scene.search.setResults(e.results, e.lastPage);
3091        });
3092
3093        scene.thumbnails = new _Thumbnails2.default(scene.visual, scene.view.getThumbnailsView(), pageCallback, 2 * (sheets + 2), { kWtoH: props.width / props.height });
3094        scene.tocCtrl = new _TocController2.default(scene.view, scene.ctrl);
3095        scene.tocCtrl.setThumbnails(scene.thumbnails);
3096        scene.tocCtrl.setSearch(scene.search);
3097        scene.ctrl.setTocCtrl(scene.tocCtrl);
3098        scene.view.addHandler(scene.tocCtrl);
3099
3100        if (test.type === 'pdf') {
3101          scene.pdfLinksHandler = new _PdfLinksHandler2.default(test.src, scene.ctrl, scene.visual.element);
3102          scene.book.addEventListener('pdfAnnotation', scene.pdfLinksHandler.handleEvent.bind(scene.pdfLinksHandler));
3103          test.src.getHandler(function (handler) {
3104            handler.getOutline().then(function (outline) {
3105              scene.bookmarks = new _Bookmarks2.default(scene.view.getBookmarksView(), outline);
3106              scene.tocCtrl.setBookmarks(scene.bookmarks, test.src);
3107            });
3108          });
3109          if (options.pdfLinks && options.pdfLinks.handler) {
3110            scene.pdfLinksHandler.setHandler(options.pdfLinks.handler);
3111          }
3112        }
3113
3114        scene.sounds = new _SoundsEnviroment2.default(options.template);
3115        scene.ctrl.setSounds(scene.sounds);
3116        scene.sounds.subscribeFlips(scene.ctrl);
3117
3118        scene.ready = true;
3119        new _AutoNavigator2.default(scene.visual, scene.ctrl, options.autoNavigation).dispose();
3120        if (options.ready) {
3121          options.ready(scene);
3122        }
3123        if (scene.pendingDispose) {
3124          scene.dispose();
3125        }
3126      };
3127      if (options.pdf) {
3128        scene.propsBuilder = new _PdfBookPropsBuilder2.default(options.pdf, scene.bookBuilder);
3129        scene.propsBuilder.pdf.setLoadingProgressClb(scene.loadingCtrl.setProgress.bind(scene.loadingCtrl));
3130      } else if (options.pageCallback) {
3131        scene.propsBuilder = new _ClbBookPropsBuilder2.default(scene.visual, options.pageCallback, options.pages, scene.bookBuilder);
3132      } else {
3133        scene.propsBuilder = new _ClbBookPropsBuilder2.default(scene.visual, _Book2.default.pageCallback, 6, scene.bookBuilder);
3134      }
3135    }
3136  }, options.template);
3137  return scene;
3138};
3139
3140(0, _libs.$)(function () {
3141  var containers = (0, _libs.$)('.flip-book-container');
3142  for (var i = 0; i < containers.length; ++i) {
3143    var jContainer = (0, _libs.$)(containers[i]),
3144        src = jContainer.attr('src');
3145    if (!!src) {
3146      jContainer.FlipBook({ pdf: src });
3147    }
3148  }
3149});
3150
3151window.jQuery = window.$ = _libs.$;
3152
3153/***/ }),
3154/* 23 */
3155/***/ (function(module, exports, __webpack_require__) {
3156
3157"use strict";
3158
3159
3160if (!Array.prototype.fill) {
3161  Array.prototype.fill = function (value) {
3162
3163    // Шаги 1-2.
3164    if (this == null) {
3165      throw new TypeError('this is null or not defined');
3166    }
3167
3168    var O = Object(this);
3169
3170    // Шаги 3-5.
3171    var len = O.length >>> 0;
3172
3173    // Шаги 6-7.
3174    var start = arguments[1];
3175    var relativeStart = start >> 0;
3176
3177    // Шаг 8.
3178    var k = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len);
3179
3180    // Шаги 9-10.
3181    var end = arguments[2];
3182    var relativeEnd = end === undefined ? len : end >> 0;
3183
3184    // Шаг 11.
3185    var final = relativeEnd < 0 ? Math.max(len + relativeEnd, 0) : Math.min(relativeEnd, len);
3186
3187    // Шаг 12.
3188    while (k < final) {
3189      O[k] = value;
3190      k++;
3191    }
3192
3193    // Шаг 13.
3194    return O;
3195  };
3196}
3197
3198if (!Array.prototype.find) {
3199  Object.defineProperty(Array.prototype, 'find', {
3200    value: function value(predicate) {
3201      'use strict';
3202
3203      if (this == null) {
3204        throw new TypeError('Array.prototype.find called on null or undefined');
3205      }
3206      if (typeof predicate !== 'function') {
3207        throw new TypeError('predicate must be a function');
3208      }
3209      var list = Object(this);
3210      var length = list.length >>> 0;
3211      var thisArg = arguments[1];
3212      var value;
3213
3214      for (var i = 0; i < length; i++) {
3215        value = list[i];
3216        if (predicate.call(thisArg, value, i, list)) {
3217          return value;
3218        }
3219      }
3220      return undefined;
3221    }
3222  });
3223}
3224
3225if (!Array.prototype.findIndex) {
3226  Array.prototype.findIndex = function (predicate) {
3227    if (this == null) {
3228      throw new TypeError('Array.prototype.findIndex called on null or undefined');
3229    }
3230    if (typeof predicate !== 'function') {
3231      throw new TypeError('predicate must be a function');
3232    }
3233    var list = Object(this);
3234    var length = list.length >>> 0;
3235    var thisArg = arguments[1];
3236    var value;
3237
3238    for (var i = 0; i < length; i++) {
3239      value = list[i];
3240      if (predicate.call(thisArg, value, i, list)) {
3241        return i;
3242      }
3243    }
3244    return -1;
3245  };
3246}
3247
3248if (!Object.values) {
3249  Object.values = function values(O) {
3250    return Object.keys(O).map(function (name) {
3251      return O[name];
3252    }) || [];
3253  };
3254}
3255
3256if (!RegExp.escape) {
3257  RegExp.escape = function (s) {
3258    return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
3259  };
3260}
3261
3262if (!String.prototype.replaceAll) {
3263  String.prototype.replaceAll = function (search, replace) {
3264    return this.replace(new RegExp(RegExp.escape(search), 'g'), replace);
3265  };
3266}
3267
3268/***/ }),
3269/* 24 */
3270/***/ (function(module, exports, __webpack_require__) {
3271
3272"use strict";
3273
3274
3275exports.__esModule = true;
3276
3277var _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; };
3278
3279function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3280
3281var AutoNavigator = function () {
3282  function AutoNavigator(context, bookCtrl) {
3283    var props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
3284
3285    _classCallCheck(this, AutoNavigator);
3286
3287    props = _extends({}, props, {
3288      urlParam: props.urlParam || 'fb3d-page',
3289      navigates: props.navigates === undefined ? 1 : props.navigates,
3290      pageN: props.pageN || 0
3291    });
3292    this.props = props;
3293    this.context = context;
3294    this.bookCtrl = bookCtrl;
3295    this.urlParam = props.urlParam;
3296    this.pageN = props.pageN;
3297    this.wnd = context.wnd;
3298
3299    this.wnd.fb3d = _extends({}, this.wnd.fb3d);
3300    this.wnd.fb3d.navigator = _extends({}, this.wnd.fb3d.navigator);
3301    this.navigator = this.wnd.fb3d.navigator[this.urlParam] = _extends({}, this.wnd.fb3d.navigator[this.urlParam]);
3302    this.navigator.instances = (this.navigator.instances || 0) + 1;
3303
3304    if (this.navigator.instances <= this.props.navigates) {
3305      this.bookCtrl.goToPage(this.getPageNumber());
3306    }
3307  }
3308
3309  AutoNavigator.prototype.dispose = function dispose() {};
3310
3311  AutoNavigator.prototype.getParameterByName = function getParameterByName(name, url) {
3312    if (!url) {
3313      url = window.location.href;
3314    }
3315    name = name.replace(/[\[\]]/g, '\\$&');
3316    var regex = new RegExp('[?&]' + name + '(=([^]*)|&|#|$)'),
3317        results = regex.exec(url);
3318    if (!results) return null;
3319    if (!results[2]) return '';
3320    return decodeURIComponent(results[2].replace(/\+/g, ' '));
3321  };
3322
3323  AutoNavigator.prototype.getPageNumber = function getPageNumber() {
3324    var number = parseInt(this.pageN);
3325    if (isNaN(number) || number === 0) {
3326      number = this.getParameterByName(this.urlParam);
3327      number = parseInt(number);
3328      if (isNaN(number)) {
3329        number = 1;
3330      }
3331    }
3332    return number - 1;
3333  };
3334
3335  return AutoNavigator;
3336}();
3337
3338exports.default = AutoNavigator;
3339
3340/***/ }),
3341/* 25 */
3342/***/ (function(module, exports, __webpack_require__) {
3343
3344"use strict";
3345
3346
3347exports.__esModule = true;
3348
3349var _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; };
3350
3351var _libs = __webpack_require__(1);
3352
3353var _MathUtils = __webpack_require__(3);
3354
3355var _MathUtils2 = _interopRequireDefault(_MathUtils);
3356
3357function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3358
3359function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3360
3361var Binder = function () {
3362  function Binder(visual, p) {
3363    var _this = this;
3364
3365    _classCallCheck(this, Binder);
3366
3367    this.visual = visual;
3368    this.p = _extends({}, p, {
3369      backSize: 2 * p.cover.depth + p.sheets * p.page.depth
3370    });
3371    this.OZ = new _libs.THREE.Vector3(0, 0, 1);
3372
3373    this.backG = new _libs.THREE.BoxGeometry(p.cover.depth, this.p.backSize, p.cover.height);
3374
3375    this.materials = [new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color })];
3376
3377    var backM = new _libs.THREE.Mesh(this.backG, new _libs.THREE.MeshFaceMaterial(this.materials));
3378
3379    if (p.cover.binderTexture !== '') {
3380      this.visual.textureLoader.load(p.cover.binderTexture, function (texture) {
3381        _this.materials[1].color.setHex(0xFFFFFF);
3382        _this.materials[1].map = texture;
3383        texture.minFilter = _libs.THREE.LinearFilter;
3384        texture.needsUpdate = true;
3385        _this.materials[1].needsUpdate = true;
3386      });
3387    }
3388
3389    this.three = new _libs.THREE.Object3D();
3390    this.back = new _libs.THREE.Object3D();
3391    this.backRT = new _libs.THREE.Object3D();
3392    this.backRR = new _libs.THREE.Object3D();
3393    this.backLT = new _libs.THREE.Object3D();
3394    this.backLR = new _libs.THREE.Object3D();
3395    this.leftPivot = new _libs.THREE.Object3D();
3396    this.rightPivot = new _libs.THREE.Object3D();
3397
3398    this.back.add(backM);
3399    this.back.add(this.leftPivot);
3400    this.back.add(this.rightPivot);
3401    this.backRT.add(this.back);
3402    this.backRR.add(this.backRT);
3403    this.backLT.add(this.backRR);
3404    this.backLR.add(this.backLT);
3405    this.three.add(this.backLR);
3406  }
3407
3408  Binder.prototype.dispose = function dispose() {
3409    for (var _iterator = this.materials, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
3410      var _ref;
3411
3412      if (_isArray) {
3413        if (_i >= _iterator.length) break;
3414        _ref = _iterator[_i++];
3415      } else {
3416        _i = _iterator.next();
3417        if (_i.done) break;
3418        _ref = _i.value;
3419      }
3420
3421      var m = _ref;
3422
3423      if (m.map) {
3424        m.map = null;
3425        m.needsUpdate = true;
3426      }
3427      m.dispose();
3428    }
3429    delete this.materials;
3430    this.backG.dispose();
3431  };
3432
3433  Binder.prototype.set = function set(angle) {
3434    var right = void 0,
3435        left = void 0;
3436    if (angle > Math.PI / 2) {
3437      right = Math.PI / 2;
3438      left = angle - Math.PI / 2;
3439    } else {
3440      right = angle;
3441      left = 0;
3442    }
3443    var p = this.p,
3444        tr1 = { x: -0.5 * p.cover.depth, y: 0.5 * p.backSize - p.cover.depth };
3445    this.backRT.position.set(tr1.x, tr1.y, 0);
3446    this.backRR.position.set(-tr1.x, -tr1.y, 0);
3447    this.backRR.quaternion.setFromAxisAngle(this.OZ, right);
3448
3449    var tr2 = { x: p.backSize - 2 * p.cover.depth - 0.5 * p.cover.depth, y: 0.5 * p.backSize - p.cover.depth };
3450    this.backLT.position.set(tr2.x, tr2.y, 0);
3451    this.backLR.position.set(-tr2.x, -tr2.y, 0);
3452    this.backLR.quaternion.setFromAxisAngle(this.OZ, left);
3453  };
3454
3455  Binder.prototype.setLeft = function setLeft(angle) {
3456    var PI = Math.PI;
3457    this.leftPivot.position.set(_MathUtils2.default.interpolateLinear([-PI, -PI / 2], [0, this.p.cover.depth], angle), 0.5 * this.p.backSize - 0.5 * this.p.cover.depth, 0);
3458    this.leftPivot.quaternion.setFromAxisAngle(this.OZ, angle);
3459  };
3460
3461  Binder.prototype.setRight = function setRight(angle) {
3462    var PI = Math.PI;
3463    this.rightPivot.position.set(_MathUtils2.default.interpolateLinear([-PI / 2, 0], [this.p.cover.depth, 0], angle), -0.5 * this.p.backSize + 0.5 * this.p.cover.depth, 0);
3464    this.rightPivot.quaternion.setFromAxisAngle(this.OZ, angle);
3465  };
3466
3467  Binder.prototype.joinLeftCover = function joinLeftCover(cover) {
3468    cover.three.position.set(0, -0.5 * this.p.cover.depth, 0);
3469    this.leftPivot.add(cover.three);
3470  };
3471
3472  Binder.prototype.disconnectLeftCover = function disconnectLeftCover(cover) {
3473    this.leftPivot.remove(cover.three);
3474  };
3475
3476  Binder.prototype.joinRightCover = function joinRightCover(cover) {
3477    cover.three.position.set(0, -0.5 * this.p.cover.depth, 0);
3478    this.rightPivot.add(cover.three);
3479  };
3480
3481  Binder.prototype.disconnectRightCover = function disconnectRightCover(cover) {
3482    this.rightPivot.remove(cover.three);
3483  };
3484
3485  return Binder;
3486}();
3487
3488exports.default = Binder;
3489
3490/***/ }),
3491/* 26 */
3492/***/ (function(module, exports, __webpack_require__) {
3493
3494"use strict";
3495
3496
3497exports.__esModule = true;
3498
3499var _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; };
3500
3501var _libs = __webpack_require__(1);
3502
3503var _book = __webpack_require__(11);
3504
3505var _GraphUtils = __webpack_require__(7);
3506
3507var _GraphUtils2 = _interopRequireDefault(_GraphUtils);
3508
3509var _Binder = __webpack_require__(25);
3510
3511var _Binder2 = _interopRequireDefault(_Binder);
3512
3513var _Cover = __webpack_require__(31);
3514
3515var _Cover2 = _interopRequireDefault(_Cover);
3516
3517var _SheetBlock = __webpack_require__(10);
3518
3519var _SheetBlock2 = _interopRequireDefault(_SheetBlock);
3520
3521var _SheetPhysics = __webpack_require__(38);
3522
3523var _SheetPhysics2 = _interopRequireDefault(_SheetPhysics);
3524
3525var _PageManager = __webpack_require__(33);
3526
3527var _PageManager2 = _interopRequireDefault(_PageManager);
3528
3529var _CSSLayer = __webpack_require__(13);
3530
3531var _CSSLayer2 = _interopRequireDefault(_CSSLayer);
3532
3533var _CssLayersManager = __webpack_require__(32);
3534
3535var _CssLayersManager2 = _interopRequireDefault(_CssLayersManager);
3536
3537var _SearchEngine = __webpack_require__(36);
3538
3539var _SearchEngine2 = _interopRequireDefault(_SearchEngine);
3540
3541var _CustomEventConverter = __webpack_require__(16);
3542
3543var _CustomEventConverter2 = _interopRequireDefault(_CustomEventConverter);
3544
3545var _CircleTarget = __webpack_require__(68);
3546
3547var _CircleTarget2 = _interopRequireDefault(_CircleTarget);
3548
3549function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3550
3551function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
3552
3553function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
3554
3555function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
3555onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
3556
3557var Book = function (_THREE$EventDispatche) {
3558  _inherits(Book, _THREE$EventDispatche);
3559
3560  // pageCallback samples
3561
3562  // (n)=> ({
3563  //   type: 'image',
3564  //   src: 'sample.png',
3565  //   interactive: false
3566  // });
3567  //
3568  // (n)=> ({
3569  //   type: 'html',
3570  //   src: 'sample.html',
3571  //   interactive: true
3572  // });
3573  //
3574  // const pdf = new Pdf('sample.pdf');
3575  // (n)=> ({
3576  //   type: 'pdf',
3577  //   src: pdf,
3578  //   interactive: false
3579  // });
3580
3581  function Book(visual, sheets, pageCallback, props) {
3582    _classCallCheck(this, Book);
3583
3584    var _this = _possibleConstructorReturn(this, _THREE$EventDispatche.call(this));
3585
3586    _this.visual = visual;
3587    _this.mouseController = true;
3588    _this.p = _extends({}, Book.prepareProps(props), {
3589      sheets: sheets,
3590      pageCallback: pageCallback,
3591      zoom: 1,
3592      singlePage: false,
3593      autoResolution: {
3594        enable: false,
3595        k: 1.5
3596      }
3597    });
3598    _this.pageManager = new _PageManager2.default(visual, _this, _this.p);
3599    _CSSLayer2.default.init(visual.doc);
3600    _this.layerManager = new _CssLayersManager2.default(_this);
3601    _this.searchEngine = new _SearchEngine2.default(pageCallback, 2 * (sheets + 2));
3602    _this.searchEngine.onPageHitsChanged = function (page, query) {
3603      _this.pageManager.refreshPageQuery(page, query);
3604      _this.dispatchEvent({
3605        type: 'searchResults',
3606        results: _this.searchEngine.results,
3607        lastPage: page,
3608        query: query
3609      });
3610    };
3611
3612    _this.three = new _libs.THREE.Object3D();
3613
3614    _this.binder = new _Binder2.default(visual, _this.p);
3615    _this.three.add(_this.binder.three);
3616
3617    _this.leftCover = new _Cover2.default(visual, _extends({}, _this.p, { setTexture: _this.setLeftCoverTexture.bind(_this) }), Math.PI / 2, 'opened');
3618    _this.binder.joinLeftCover(_this.leftCover);
3619    _this.subscribeSheetBlock(_this.leftCover, 0);
3620    _this.rightCover = new _Cover2.default(visual, _extends({}, _this.p, { setTexture: _this.setRightCoverTexture.bind(_this) }), 0, 'closed');
3621    _this.binder.joinRightCover(_this.rightCover);
3622    _this.subscribeSheetBlock(_this.rightCover, 2 * (_this.p.sheets + 1));
3623
3624    _this.threeSheetBlocks = new _libs.THREE.Object3D();
3625    _this.three.add(_this.threeSheetBlocks);
3626    _this.threeSheetBlocks.position.set(0.5 * _this.p.cover.depth - 0.5 * sheets * _this.p.page.depth, -0.5 * sheets * _this.p.page.depth, 0);
3627
3628    _this.sheetBlocks = [];
3629    if (sheets > 0) {
3630      _this.addSheetBlock(0, new _SheetBlock2.default(visual, _extends({}, _this.p, { setTexture: _this.setPageTexture.bind(_this) }), 0, sheets, 0, 'closed'));
3631    }
3632
3633    _this.angle = _this.p.rtl ? Math.PI : 0;
3634    _this.closedAngle = 0;
3635    _this.set(_this.angle, 0);
3636    _this.lastMousePos = {
3637      t: 0
3638    };
3639
3640    _this.three.position.set(-0.5 * _this.p.cover.depth + 0.5 * sheets * _this.p.page.depth, 0, 0);
3641    _this.sheetPhysics = new _SheetPhysics2.default(_this.p.page.width / _this.p.scale, _this.p.gravity, _this.p.page.cornerDeviation);
3642
3643    _this.binds = {
3644      update: _this.update.bind(_this),
3645      lastMousePos: function lastMousePos(e) {
3646        _this.lastMousePos = _extends({}, _this.lastMousePos, {
3647          pageX: e.pageX,
3648          pageY: e.pageY
3649        });
3650      }
3651    };
3652    _this.visual.addRenderCallback(_this.binds.update);
3653    (0, _libs.$)(_this.visual.element).on('mousemove', _this.binds.lastMousePos);
3654
3655    _this.binds.onPickCallback = _this.onPickCallback.bind(_this);
3656    _this.visual.drag.onPickCallback = _this.binds.onPickCallback;
3657    _this.binds.onDragCallback = _this.onDragCallback.bind(_this);
3658    _this.visual.drag.onDragCallback = _this.binds.onDragCallback;
3659    _this.binds.onReleaseCallback = _this.onReleaseCallback.bind(_this);
3660    _this.visual.drag.onReleaseCallback = _this.binds.onReleaseCallback;
3661
3662    _this.dragAngle = 0.05;
3663    _this.tmp = {
3664      boxs: [new _libs.THREE.Box3(), new _libs.THREE.Box3()]
3665    };
3666
3667    _this.visual.addObject(_this.three);
3668    _this.visual.addEventListener('resize', _this.pageManager.refreshZoom.bind(_this.pageManager));
3669
3670    setTimeout(function () {
3671      _this.notifyBeforeAnimation();
3672      _this.notifyAfterAnimation();
3673    }, 100);
3674    return _this;
3675  }
3676
3677  Book.prototype.dispose = function dispose() {
3678    this.visual.removeObject(this.three);
3679    this.sheetPhysics.dispose();
3680    delete this.visual.drag.onPickCallback;
3681    delete this.visual.drag.onDragCallback;
3682    delete this.visual.drag.onReleaseCallback;
3683    (0, _libs.$)(this.visual.element).off('mousemove', this.binds.lastMousePos);
3684    this.visual.removeRenderCallback(this.binds.update);
3685    this.removeSheetBlocks(0, this.sheetBlocks.length);
3686    this.binder.disconnectLeftCover(this.leftCover);
3687    this.removeSheetBlock(this.leftCover);
3688    this.binder.disconnectRightCover(this.rightCover);
3689    this.removeSheetBlock(this.rightCover);
3690    this.binder.dispose();
3691    this.layerManager.dispose();
3692    _CSSLayer2.default.dispose();
3693    this.pageManager.dispose();
3694  };
3695
3696  // publics {
3697
3698  Book.prototype.setAutoResolution = function setAutoResolution(enable) {
3699    var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.5;
3700
3701    this.p.autoResolution = _extends({}, this.p.autoResolution, {
3702      enable: enable,
3703      k: k
3704    });
3705  };
3706
3707  Book.prototype.setZoom = function setZoom(zoom, singlePage) {
3708    if (Math.abs(this.p.zoom - zoom) > 1e-3 || singlePage !== this.p.singlePage) {
3709      this.p.zoom = zoom;
3710      this.p.singlePage = singlePage;
3711      this.pageManager.refreshZoom();
3712    }
3713  };
3714
3715  Book.prototype.getPageCallback = function getPageCallback() {
3716    return this.p.pageCallback;
3717  };
3718
3719  Book.prototype.setQuery = function setQuery(query) {
3720    this.searchEngine.setQuery(query);
3721  };
3722
3723  Book.prototype.isProcessing = function isProcessing() {
3724    return this.sheetPhysics.getSize() !== 0;
3725  };
3726
3727  Book.prototype.getPages = function getPages() {
3728    return 4 + 2 * this.p.sheets;
3729  };
3730
3731  Book.prototype.setFlipProgressClb = function setFlipProgressClb(clb) {
3732    this.p.flipProgressClb = clb;
3733  };
3734
3735  Book.prototype.setInjector = function setInjector(injector) {
3736    this.p.injector = injector;
3737  };
3738
3739  Book.prototype.isActivePage = function isActivePage(n) {
3740    var res = true;
3741    if (n > 1 && n < this.getPages() - 2) {
3742      for (var _iterator = this.sheetBlocks, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
3743        var _ref;
3744
3745        if (_isArray) {
3746          if (_i >= _iterator.length) break;
3747          _ref = _iterator[_i++];
3748        } else {
3749          _i = _iterator.next();
3750          if (_i.done) break;
3751          _ref = _i.value;
3752        }
3753
3754        var b = _ref;
3755
3756        if (n - 2 > 2 * b.p.first && n - 2 < 2 * b.p.last - 1) {
3757          res = false;
3758          break;
3759        }
3760      }
3761    }
3762    return res;
3763  };
3764
3765  Book.prototype.getBlockByPage = function getBlockByPage(n) {
3766    var block = void 0;
3767    if (n < 2) {
3768      block = this.leftCover;
3769    } else if (n < 2 * (this.p.sheets + 1)) {
3770      for (var _iterator2 = this.sheetBlocks, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
3771        var _ref2;
3772
3773        if (_isArray2) {
3774          if (_i2 >= _iterator2.length) break;
3775          _ref2 = _iterator2[_i2++];
3776        } else {
3777          _i2 = _iterator2.next();
3778          if (_i2.done) break;
3779          _ref2 = _i2.value;
3780        }
3781
3782        var b = _ref2;
3783
3784        if (n - 2 >= 2 * b.p.first && n - 2 < 2 * b.p.last) {
3785          block = b;
3786          break;
3787        }
3788      }
3789    } else {
3790      block = this.rightCover;
3791    }
3792    return block;
3793  };
3794
3795  Book.prototype.getBlockPages = function getBlockPages(block) {
3796    var range = void 0;
3797    switch (block) {
3798      case this.leftCover:
3799        {
3800          range = [0, 1];
3801          break;
3802        }
3803      case this.rightCover:
3804        {
3805          range = [2 * (this.p.sheets + 1), 2 * (this.p.sheets + 1) + 1];
3806          break;
3807        }
3808      default:
3809        {
3810          range = block ? [2 * (block.p.first + 1), 2 * (block.p.last + 1) - 1] : undefined;
3811        }
3812    }
3813    return range;
3814  };
3815
3816  Book.prototype.getPage = function getPage() {
3817    var PI = Math.PI;
3818    var p = void 0;
3819    if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {
3820      for (var _iterator3 = this.sheetBlocks, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
3821        var _ref3;
3822
3823        if (_isArray3) {
3824          if (_i3 >= _iterator3.length) break;
3825          _ref3 = _iterator3[_i3++];
3826        } else {
3827          _i3 = _iterator3.next();
3828          if (_i3.done) break;
3829          _ref3 = _i3.value;
3830        }
3831
3832        var block = _ref3;
3833
3834        if (block.angle <= PI / 2) {
3835          p = this.getBlockPages(block)[0] - 1;
3836          break;
3837        }
3838      }
3839      if (!p) {
3840        p = this.getPages() - 3;
3841      }
3842    } else if (this.angle < PI / 2) {
3843      p = 0;
3844    } else if (this.angle > 3 * PI / 2) {
3845      p = 1;
3846    } else if (this.angle < PI) {
3847      p = this.getPages() - 3;
3848    } else if (this.angle >= PI) {
3849      p = this.getPages() - 1;
3850    }
3851    return p;
3852  };
3853
3854  Book.prototype.getTopPages = function getTopPages() {
3855    var p = this.getPage();
3856    return p === 0 || p === this.getPages() - 1 ? [p] : [p, p + 1];
3857  };
3858
3859  Book.prototype.getPageState = function getPageState(n) {
3860    return this.pageManager.getPageState(n);
3861  };
3862
3863  Book.prototype.enableLoadingAnimation = function enableLoadingAnimation(enable) {
3864    this.pageManager.enableLoadingAnimation(enable);
3865  };
3866
3867  Book.prototype.getLeftFlipping = function getLeftFlipping() {
3868    var block = void 0;
3869    var left = this.sheetBlocks[0],
3870        PI = Math.PI;
3871    if (this.angle === PI) {
3872      block = this.rightCover;
3873    } else {
3874      if (left && left.state === 'closed' && left.angle > PI / 2) {
3875        block = left;
3876      } else if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {
3877        block = this.leftCover;
3878      }
3879    }
3880    return block;
3881  };
3882
3883  Book.prototype.getRightFlipping = function getRightFlipping() {
3884    var block = void 0;
3885    var right = this.sheetBlocks[this.sheetBlocks.length - 1],
3886        PI = Math.PI;
3887    if (this.angle === 0) {
3888      block = this.leftCover;
3889    } else {
3890      if (right && right.state === 'closed' && right.angle <= PI / 2) {
3891        block = right;
3892      } else if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {
3893        block = this.rightCover;
3894      }
3895    }
3896    return block;
3897  };
3898
3899  Book.prototype.getClosedBlockAngle = function getClosedBlockAngle(angle) {
3900    var closedAngle = void 0,
3901        PI = Math.PI;
3902
3903    if (this.leftCover.physicId) {
3904      var test = void 0;
3905      try {
3906        test = Math.abs(this.sheetPhysics.getParametr(this.leftCover.physicId, 'angle') - angle);
3907      } catch (e) {
3908        test = 0;
3909      }
3910      closedAngle = angle > PI / 2 || test > PI / 6 ? PI / 2 : this.closedAngle;
3911    } else if (this.rightCover.physicId) {
3912      var _test = void 0;
3913      try {
3914        _test = Math.abs(this.sheetPhysics.getParametr(this.rightCover.physicId, 'angle') - angle);
3915      } catch (e) {
3916        _test = 0;
3917      }
3918      closedAngle = angle < PI / 2 || _test > PI / 6 ? PI / 2 + 1e-7 : this.closedAngle;
3919    } else {
3920      closedAngle = PI / 2 + (angle !== 0) * 1e-7;
3921    }
3922
3923    return {
3924      openedAngle: angle,
3925      closedAngle: closedAngle,
3926      binderTurn: this.closedAngle
3927    };
3928  };
3929
3930  Book.prototype.flipLeft = function flipLeft() {
3931    var _this2 = this;
3932
3933    var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
3934    var progressClb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.p.flipProgressClb;
3935
3936    var block = void 0,
3937        res = void 0;
3938    if (this.sheetPhysics.getSize() < 25) {
3939      var left = this.sheetBlocks[0],
3940          PI = Math.PI;
3941      if (this.angle === PI) {
3942        res = this.connectPhysics(block = this.rightCover, this.p.cover.mass, PI, -this.p.cover.startVelocity, this.p.cover.flexibility, 0, function (angle, height) {
3943          return _this2.set(3 * PI / 2 - angle / 2, height);
3944        }, function (angle, height) {
3945          _this2.set(3 * PI / 2 - angle / 2, 0);
3946          _this2.setSheetBlocks(angle ? PI : PI / 2 + 1e-7, 'closed');
3947        }, progressClb);
3948      } else {
3949        if (left && left.state === 'closed' && left.angle > PI / 2) {
3950          block = size < left.getSize() ? this.splitSheetBlock(0, left.getSize() - size)[1] : left;
3951          res = this.connectPhysics(block, this.p.page.mass * block.getSize(), PI, -this.p.page.startVelocity, this.p.page.flexibility, 0, function (angle, height) {
3952            return block.set(_this2.getClosedBlockAngle(angle), 'opened', height);
3953          }, Book.finishAnimationClb.bind({ book: this, block: block }), progressClb);
3954        } else if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {
3955          res = this.connectPhysics(block = this.leftCover, this.p.cover.mass, PI, -this.p.cover.startVelocity, this.p.cover.flexibility, 0, function (angle, height) {
3956            _this2.set(2 * PI - angle / 2, height);
3957            if (angle > PI / 2) {
3958              _this2.setSheetBlocks(angle ? PI / 2 : 0, 'closed');
3959            }
3960          }, function (angle, height) {
3961            return _this2.set(angle === 0 ? 0 : 2 * PI - angle / 2, 0);
3962          }, progressClb);
3963        }
3964      }
3965    }
3966    return res;
3967  };
3968
3969  Book.prototype.flipRight = function flipRight() {
3970    var _this3 = this;
3971
3972    var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
3973    var progressClb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.p.flipProgressClb;
3974
3975    var block = void 0,
3976        res = void 0;
3977    if (this.sheetPhysics.getSize() < 25) {
3978      var right = this.sheetBlocks[this.sheetBlocks.length - 1],
3979          PI = Math.PI;
3980      if (this.angle === 0) {
3981        res = this.connectPhysics(block = this.leftCover, this.p.cover.mass, 0, this.p.cover.startVelocity, this.p.cover.flexibility, 0, function (angle, height) {
3982          return _this3.set(angle / 2, height);
3983        }, function (angle, height) {
3984          _this3.set(angle / 2, 0);
3985          _this3.setSheetBlocks(angle ? PI / 2 : 0, 'closed');
3986        }, progressClb);
3987      } else {
3988        if (right && right.state === 'closed' && right.angle <= PI / 2) {
3989          block = size < right.getSize() ? this.splitSheetBlock(this.sheetBlocks.length - 1, size)[0] : right;
3990          res = this.connectPhysics(block, this.p.page.mass * block.getSize(), 0, this.p.page.startVelocity, this.p.page.flexibility, 0, function (angle, height) {
3991            return block.set(_this3.getClosedBlockAngle(angle), 'opened', height);
3992          }, Book.finishAnimationClb.bind({ book: this, block: block }), progressClb);
3993        } else if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {
3994          res = this.connectPhysics(block = this.rightCover, this.p.cover.mass, 0, this.p.cover.startVelocity, this.p.cover.flexibility, 0, function (angle, height) {
3995            _this3.set(PI / 2 + angle / 2, height);
3996            if (angle < PI / 2) {
3997              _this3.setSheetBlocks(PI / 2 + 1e-7, 'closed');
3998            }
3999          }, function (angle, height) {
4000            return _this3.set(PI / 2 + angle / 2, 0);
4001          }, progressClb);
4002        }
4003      }
4004    }
4005    return res;
4006  };
4007
4008  // }
4009
4010  Book.prototype.clearHoverInfo = function clearHoverInfo() {
4011    this.pageManager.turnOnEvents();
4012    delete this.hoverInfo.block.force;
4013    delete this.hoverInfo.block.cornerForce;
4014    delete this.hoverInfo;
4015  };
4016
4017  Book.prototype.xSegment = function xSegment() {
4018    var boxs = this.tmp.boxs,
4019        res = {};
4020    if (this.leftCover.physicId) {
4021      boxs[0].setFromObject(this.rightCover.three);
4022      res.min = -(res.max = boxs[0].max.x);
4023    } else if (this.rightCover.physicId) {
4024      boxs[0].setFromObject(this.leftCover.three);
4025      res.max = -(res.min = boxs[0].min.x);
4026    } else {
4027      boxs[0].setFromObject(this.leftCover.three);
4028      boxs[1].setFromObject(this.rightCover.three);
4029      boxs[0].union(boxs[1]);
4030      res.min = boxs[0].min.x;
4031      res.max = boxs[0].max.x;
4032    }
4033    return res;
4034  };
4035
4036  Book.prototype.computeTarget = function computeTarget(point) {
4037    var x = point.x,
4038        y = point.y,
4039        seg = this.xSegment(),
4040        angle = void 0;
4041
4042    angle = (seg.max - x) / (seg.max - seg.min) * Math.PI;
4043    // angle = Math.acos(x/Math.sqrt(x*x+y*y));
4044    return Math.max(this.dragAngle, Math.min(Math.PI - this.dragAngle, angle));
4045  };
4046
4047  Book.prototype.onPickCallback = function onPickCallback(object) {
4048    var res = false;
4049    var block = object.object.userData.self,
4050        p = _extends({}, object.uv),
4051        i = object.face.materialIndex;
4052    if (i < 2) {
4053      p.x = i === 0 ? p.x : 1 - p.x;
4054      if (block.cornerTarget.testIntersection(null, p) && block.physicId) {
4055        if (this.hoverInfo) {
4056          this.clearHoverInfo();
4057        }
4058        block.force = _SheetPhysics2.default.dragForceClb;
4059        block.cornerForce = _SheetPhysics2.default.getDragCornerForceClb(this.computeTarget(object.point));
4060        this.dragInfo = {
4061          object: object,
4062          block: block
4063        };
4064        res = true;
4065        this.pageManager.turnOffEvents();
4066      }
4067    }
4068    return res;
4069  };
4070
4071  Book.prototype.onDragCallback = function onDragCallback(point) {
4072    var block = this.dragInfo.block,
4073        p = block.getProps();
4074    block.force = _SheetPhysics2.default.dragForceClb;
4075    block.cornerForce = _SheetPhysics2.default.getDragCornerForceClb(this.computeTarget(point));
4076    return true;
4077  };
4078
4079  Book.prototype.onReleaseCallback = function onReleaseCallback() {
4080    delete this.dragInfo.block.force;
4081    delete this.dragInfo.block.cornerForce;
4082    delete this.dragInfo;
4083    this.pageManager.turnOnEvents();
4084  };
4085
4086  Book.prototype.getFlipping = function getFlipping(i) {
4087    return i ? this.getLeftFlipping() : this.getRightFlipping();
4088  };
4089
4090  Book.prototype.flip = function flip(i) {
4091    var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
4092
4093    return i ? this.flipLeft(size) : this.flipRight(size);
4094  };
4095
4096  Book.prototype.enableMouse = function enableMouse(enable) {
4097    this.mouseController = enable;
4098  };
4099
4100  Book.prototype.cornerCallback = function cornerCallback(e, data) {
4101    var _this4 = this;
4102
4103    if (this.mouseController) {
4104      var _data$data = data.data,
4105          i = _data$data.i,
4106          n = _data$data.n;
4107
4108      if (e.type === 'mouseover') {
4109        if (this.hoverInfo && this.hoverInfo.pendings !== undefined) {
4110          ++this.hoverInfo.pendings;
4111        } else {
4112          if (this.hoverInfo) {
4113            console.warn('Wrong state: element is already hover');
4114            if (this.hoverInfo.n !== n) {
4115              this.clearHoverInfo();
4116            }
4117          }
4118          if (!this.hoverInfo && !this.dragInfo) {
4119            var res = Promise.resolve(undefined);
4120            var hoverAngle = 0.02,
4121                hover = this.getBlockByPage(n),
4122                possible = this.getFlipping(i);
4123            if (n > 1 && n < 2 * (this.p.sheets + 1) && hover.physicId && (hover.angle < hoverAngle || hover.angle > Math.PI - hoverAngle)) {
4124              res = Promise.resolve(hover);
4125            } else if (hover === possible) {
4126              var sheetBlocks = [this.leftCover].concat(this.sheetBlocks, [this.rightCover]);
4127              var j = sheetBlocks.indexOf(hover),
4128                  nextBlock = ~j ? sheetBlocks[j + 2 * i - 1] : undefined;
4129              if (!nextBlock || !nextBlock.physicId || nextBlock.angle > hoverAngle && nextBlock.angle < Math.PI - hoverAngle) {
4130                res = this.flip(i, 1).then(function (block) {
4131                  if (!block) {
4132                    delete _this4.hoverInfo;
4133                  } else {
4134                    _this4.sheetPhysics.setParametr(block.physicId, 'velocity', 0);
4135                  }
4136                  return block;
4137                });
4138                this.hoverInfo = {
4139                  pendings: 1
4140                };
4141              }
4142            }
4143            res.then(function (block) {
4144              if (_this4.hoverInfo && _this4.hoverInfo.pendings < 1) {
4145                block = undefined;
4146                delete _this4.hoverInfo;
4147              }
4148              if (block) {
4149                _this4.pageManager.turnOffEvents();
4150                var p = block.getProps();
4151                block.force = _this4.sheetPhysics.getTargetForceClb(p.mass * block.getSize(), i ? Math.PI - hoverAngle : hoverAngle);
4152                block.cornerForce = function () {
4153                  return (i ? -1 : 1) * _SheetPhysics2.default.hoverCornerForceClb();
4154                };
4155                _this4.sheetPhysics.setParametr(block.physicId, 'angle', i ? Math.PI - 0.5 * hoverAngle : 0.5 * hoverAngle);
4156                _this4.hoverInfo = {
4157                  n: n,
4158                  block: block
4159                };
4160                _this4.update(1 / 30);
4161              }
4162            });
4163          }
4164        }
4165      } else if (this.hoverInfo && e.type === 'mouseout') {
4166        if (this.hoverInfo.pendings !== undefined) {
4167          --this.hoverInfo.pendings;
4168        } else if (n === this.hoverInfo.n) {
4169          this.clearHoverInfo();
4170        }
4171      } else if (e.type === 'mousedown') {
4172        this.cornerClickData = {
4173          x: e.pageX,
4174          y: e.pageY
4175        };
4176      } else if (e.type === 'click') {
4177        if (Math.sqrt(Math.pow(this.cornerClickData.x - e.pageX, 2) + Math.pow(this.cornerClickData.y - e.pageY, 2)) < 5) {
4178          var _hover = this.getBlockByPage(n);
4179          if (_hover.physicId) {
4180            var id = _hover.physicId,
4181                props = _hover.getProps();
4182            this.sheetPhysics.setParametr(id, 'velocity', (i ? -1 : 1) * props.startVelocity);
4183          }
4184        }
4185        delete this.cornerClickData;
4186      }
4187    }
4188  };
4189
4190  Book.prototype.addSheetBlock = function addSheetBlock(p, block) {
4191    this.sheetBlocks.splice(p, 0, block);
4192    this.subscribeSheetBlock(block, 2);
4193    this.threeSheetBlocks.add(block.three);
4194  };
4195
4196  Book.prototype.subscribeSheetBlock = function subscribeSheetBlock(block, offset) {
4197    var _this5 = this;
4198
4199    var eventConverter = new _CustomEventConverter2.default(this.visual.wnd, this.visual.doc, _CircleTarget2.default.test),
4200        r = 0.15,
4201        target = new _CircleTarget2.default(1 - 0.5 * r, 0.5 * r, r);
4202    target.block = block;
4203    target.callback = this.cornerCallback.bind(this);
4204    eventConverter.addCustom(target);
4205    block.cornerTarget = target;
4206    block.three.userData.mouseCallback = function (e, data) {
4207      var i = data.face.materialIndex;
4208      if (i < 2) {
4209        var n = i === 0 ? offset + 2 * block.p.first : offset + 2 * block.p.last - 1;
4210        eventConverter.convert(e, { x: i === 0 ? data.uv.x : 1 - data.uv.x, y: data.uv.y, i: i, n: n });
4211        _this5.pageManager.transferEventToTexture(n, e, data);
4212      }
4213    };
4214    block.three.userData.touchCallback = function (e, data) {
4215      var i = data.face.materialIndex;
4216      if (i < 2) {
4217        var n = i === 0 ? offset + 2 * block.p.first : offset + 2 * block.p.last - 1;
4218        _this5.pageManager.transferEventToTexture(n, e, data);
4219      }
4220    };
4221    this.visual.drag.addThree(block.three);
4222    this.visual.mouseEvents.addThree(block.three);
4223    this.visual.touchEvents.addThree(block.three);
4224  };
4225
4226  Book.prototype.removeSheetBlock = function removeSheetBlock(block) {
4227    this.visual.mouseEvents.removeThree(block.three);
4228    this.visual.touchEvents.removeThree(block.three);
4229    this.visual.drag.removeThree(block.three);
4230    this.threeSheetBlocks.remove(block.three);
4231    block.dispose();
4232  };
4233
4234  Book.prototype.removeSheetBlocks = function removeSheetBlocks(first, size) {
4235    var blocks = this.sheetBlocks.splice(first, size);
4236    for (var _iterator4 = blocks, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
4237      var _ref4;
4238
4239      if (_isArray4) {
4240        if (_i4 >= _iterator4.length) break;
4241        _ref4 = _iterator4[_i4++];
4242      } else {
4243        _i4 = _iterator4.next();
4244        if (_i4.done) break;
4245        _ref4 = _i4.value;
4246      }
4247
4248      var block = _ref4;
4249
4250      this.removeSheetBlock(block);
4251    }
4252  };
4253
4254  Book.prototype.setTexture = function setTexture(material, n) {
4255    this.pageManager.setTexture(material, n);
4256  };
4257
4258  Book.prototype.setPageTexture = function setPageTexture(material, n) {
4259    this.setTexture(material, n + 2);
4260  };
4261
4262  Book.prototype.setLeftCoverTexture = function setLeftCoverTexture(material, n) {
4263    this.setTexture(material, n);
4264  };
4265
4266  Book.prototype.setRightCoverTexture = function setRightCoverTexture(material, n) {
4267    this.setTexture(material, n + 2 * (this.p.sheets + 1));
4268  };
4269
4270  Book.finishAnimationClb = function finishAnimationClb(angle) {
4271    this.block.set(this.book.getClosedBlockAngle(angle).closedAngle, 'closed', 0);
4272    var i = this.book.sheetBlocks.indexOf(this.block);
4273    if (~i) {
4274      if (angle === 0) {
4275        this.book.mergeSheetBlocks(i, this.book.sheetBlocks.length - i);
4276      } else {
4277        this.book.mergeSheetBlocks(0, i + 1);
4278      }
4279    }
4280  };
4281
4282  Book.prototype.calcBlockForce = function calcBlockForce(block, object, angle, velocity, cornerHeight) {
4283    return block.force ? block.force(object, angle, velocity, cornerHeight) : 0;
4284  };
4285
4286  Book.prototype.calcBlockCornerForce = function calcBlockCornerForce(block, object, angle, velocity, cornerHeight) {
4287    return block.cornerForce ? block.cornerForce(object, angle, velocity, cornerHeight) : 0;
4288  };
4289
4290  Book.prototype.notifyBeforeAnimation = function notifyBeforeAnimation() {
4291    var res = void 0;
4292    if (this.animationNotification) {
4293      res = Promise.reject();
4294    } else {
4295      this.animationNotification = true;
4296      this.dispatchEvent({
4297        type: 'beforeAnimation'
4298      });
4299      res = this.layerManager.hide();
4300    }
4301    return res;
4302  };
4303
4304  Book.prototype.notifyAfterAnimation = function notifyAfterAnimation() {
4305    if (this.animationNotification) {
4306      delete this.animationNotification;
4307      this.layerManager.show();
4308      this.dispatchEvent({
4309        type: 'afterAnimation'
4310      });
4311    }
4312  };
4313
4314  Book.prototype.connectPhysics = function connectPhysics(block, mass, angle, velocity, flexibility, coverHeight, simulateClb, removeClb, progressClb) {
4315    var _this6 = this;
4316
4317    var type = function type() {
4318      return _this6.hoverInfo ? 'hover' : _this6.dragInfo ? 'drag' : 'free';
4319    },
4320        res = this.sheetPhysics.getSize() ? Promise.resolve() : this.notifyBeforeAnimation();
4321    return res.then(function () {
4322      block.physicId = _this6.sheetPhysics.addObject(mass, angle, velocity, flexibility, coverHeight, function (angl, ch) {
4323        simulateClb(angl, ch);
4324        progressClb(block, Math.abs(angle - angl) / Math.PI, 'process', type());
4325      }, function (angl, ch) {
4326        removeClb(angl, ch);
4327        delete block.physicId;
4328        progressClb(block, Math.abs(angle - angl) / Math.PI, 'finish', type());
4329        Promise.resolve().then(function () {
4330          if (!_this6.sheetPhysics.getSize()) {
4331            _this6.notifyAfterAnimation();
4332          }
4333        });
4334      }, function (object, angle, velocity, cornerHeight) {
4335        return _this6.calcBlockForce(block, object, angle, velocity, cornerHeight);
4336      }, function (object, angle, velocity, cornerHeight) {
4337        return _this6.calcBlockCornerForce(block, object, angle, velocity, cornerHeight);
4338      });
4339      progressClb(block, 0, 'init', type());
4340      return block;
4341    }).catch(function () {
4342      return undefined;
4343    });
4344  };
4345
4346  Book.prototype.update = function update(dt) {
4347    var _this7 = this;
4348
4349    this.lastMousePos.t += dt;
4350    if (this.isProcessing() && this.lastMousePos.pageX !== undefined && this.lastMousePos.t - (this.lastMousePos.lastT || 0) > 0.25 && !this.hoverInfo && !this.dragInfo) {
4351      this.lastMousePos.lastT = this.lastMousePos.t;
4352      Promise.resolve().then(function () {
4353        (0, _libs.$)(_this7.visual.element).trigger(_libs.$.Event('mousemove', _this7.lastMousePos));
4354      });
4355    }
4356    this.sheetPhysics.simulate(dt);
4357  };
4358
4359  Book.prototype.splitSheetBlock = function splitSheetBlock(i, leftSize) {
4360    var block = this.sheetBlocks[i];
4361    if (block && leftSize < block.getSize()) {
4362      var newBlock = new _SheetBlock2.default(this.visual, _extends({}, this.p, { setTexture: this.setPageTexture.bind(this) }), block.p.first, block.p.first + leftSize, block.angle, block.state);
4363      block.set(block.angle, block.state, block.corner.height, block.p.first + leftSize, block.p.last);
4364      this.addSheetBlock(i, newBlock);
4365      return [newBlock, block];
4366    }
4367  };
4368
4369  Book.prototype.mergeSheetBlocks = function mergeSheetBlocks(first, size) {
4370    if (first < this.sheetBlocks.length) {
4371      size = Math.min(this.sheetBlocks.length - first, size);
4372      var firstBlock = this.sheetBlocks[first],
4373          lastBlock = this.sheetBlocks[first + size - 1];
4374      firstBlock.set(firstBlock.angle, firstBlock.state, firstBlock.corner.height, firstBlock.p.first, lastBlock.p.last);
4375      this.removeSheetBlocks(first + 1, size - 1);
4376    }
4377  };
4378
4379  Book.prototype.setSheetBlocks = function setSheetBlocks(angle, state) {
4380    if (state === 'closed') {
4381      this.closedAngle = angle;
4382    }
4383    this.sheetBlocks.forEach(function (s) {
4384      if (!s.physicId) {
4385        s.set(angle, state);
4386      }
4387    });
4388  };
4389
4390  Book.prototype.set = function set(angle) {
4391    var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
4392
4393    this.angle = angle;
4394    var PI = Math.PI;
4395    if (angle < PI / 4) {
4396      this.binder.set(0);
4397
4398      this.binder.setLeft(-PI / 2 + 2 * angle);
4399      this.leftCover.set(PI / 2, 'opened', height);
4400
4401      this.setSheetBlocks(0, 'closed');
4402
4403      this.binder.setRight(0);
4404      this.rightCover.set(0, 'closed', 0);
4405    } else if (angle < 2 * PI / 4) {
4406      var a = 2 * (angle - PI / 4);
4407      this.binder.set(a);
4408
4409      this.binder.setLeft(-a);
4410      this.leftCover.set(PI / 2 + a, 'opened', height);
4411
4412      this.setSheetBlocks(a, 'closed');
4413
4414      this.binder.setRight(-a);
4415      this.rightCover.set(a, 'closed', 0);
4416    } else if (angle < 3 * PI / 4) {
4417      var _a = 2 * (angle - PI / 2);
4418      this.binder.set(PI / 2);
4419
4420      this.binder.setLeft(-PI / 2);
4421      this.leftCover.set(PI, 'opened', 0);
4422
4423      this.binder.setRight(-PI / 2);
4424      this.rightCover.set(_a, 'opened', height);
4425    } else if (angle < 4 * PI / 4) {
4426      var _a2 = 2 * (angle - 3 * PI / 4) + PI / 2;
4427      this.binder.set(_a2);
4428
4429      this.binder.setLeft(-_a2);
4430      this.leftCover.set(_a2, 'closed', 0);
4431
4432      this.setSheetBlocks(_a2, 'closed');
4433
4434      this.binder.setRight(-PI / 2);
4435      this.rightCover.set(PI / 2, 'opened', height);
4436    } else if (angle < 5 * PI / 4) {
4437      this.binder.set(PI);
4438
4439      this.binder.setLeft(-PI);
4440      this.leftCover.set(PI, 'closed', 0);
4441
4442      this.setSheetBlocks(PI, 'closed');
4443
4444      this.binder.setRight(-PI / 2 - 2 * (angle - PI));
4445      this.rightCover.set(PI / 2, 'opened', height);
4446    } else if (angle < 6 * PI / 4) {
4447      var _a3 = 2 * (angle - 5 * PI / 4);
4448      this.binder.set(PI - _a3);
4449
4450      this.binder.setLeft(-PI + _a3);
4451      this.leftCover.set(PI - _a3, 'closed', 0);
4452
4453      this.setSheetBlocks(PI - _a3, 'closed');
4454
4455      this.binder.setRight(-PI + _a3);
4456      this.rightCover.set(PI / 2 - _a3, 'opened', height);
4457    } else if (angle < 7 * PI / 4) {
4458      var _a4 = 2 * (angle - 6 * PI / 4);
4459      this.binder.set(PI / 2);
4460
4461      this.binder.setLeft(-PI / 2);
4462      this.leftCover.set(PI - _a4, 'opened', height);
4463
4464      this.binder.setRight(-PI / 2);
4465      this.rightCover.set(0, 'opened', 0);
4466    } else if (angle < 8 * PI / 4) {
4467      var _a5 = 2 * (angle - 7 * PI / 4);
4468      this.binder.set(PI / 2 - _a5);
4469
4470      this.binder.setLeft(-PI / 2);
4471      this.leftCover.set(PI / 2, 'opened', height);
4472
4473      this.setSheetBlocks(PI / 2 - _a5, 'closed');
4474
4475      this.binder.setRight(-PI / 2 + _a5);
4476      this.rightCover.set(PI / 2 - _a5, 'closed', 0);
4477    }
4478  };
4479
4480  Book.createSideTexture = function createSideTexture(color) {
4481    var jC = (0, _libs.$)('<canvas width="8" height="8"></canvas>');
4482    var ctx = jC[0].getContext('2d');
4483    ctx.beginPath();
4484    ctx.fillStyle = _GraphUtils2.default.color2Rgba(color, 1);
4485    ctx.rect(0, 0, 8, 7);
4486    ctx.fill();
4487    ctx.beginPath();
4488    ctx.fillStyle = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(color, 0.5), 1);
4489    ctx.rect(0, 7, 8, 1);
4490    ctx.fill();
4491    return jC[0];
4492  };
4493
4494  Book.prepareProps = function prepareProps(props) {
4495    return Book.calcProps(Book.mergeProps((0, _book.props)(), props));
4496  };
4497
4498  Book.mergeProps = function mergeProps(first, second) {
4499    second = second || {};
4500    return _extends({}, first, second, {
4501      sheet: _extends({}, first.sheet, second.sheet),
4502      cover: _extends({}, first.cover, second.cover),
4503      page: _extends({}, first.page, second.page),
4504      cssLayerProps: _extends({}, first.cssLayerProps, second.cssLayerProps)
4505    });
4506  };
4507
4508  Book.calcProps = function calcProps(props) {
4509    var p = _extends({}, props, {
4510      sheet: _extends({}, props.sheet),
4511      cover: _extends({}, props.sheet, props.cover),
4512      page: _extends({}, props.sheet, props.page),
4513      cssLayerProps: _extends({}, props.cssLayerProps, {
4514        $: _libs.$
4515      })
4516    }),
4517        scale = 50,
4518        height = scale * p.height,
4519        width = scale * p.width,
4520        flipProgressClb = function flipProgressClb() {
4521      return undefined;
4522    },
4523        sheet = {
4524      sideTexture: p.sheet.sideTexture || Book.createSideTexture(p.sheet.color)
4525    },
4526        cover = _extends({}, sheet, p.cover, {
4527      depth: scale * p.cover.depth,
4528      width: width,
4529      height: height,
4530      padding: scale * p.cover.padding
4531    }),
4532        page = _extends({}, sheet, p.page, {
4533      depth: scale * p.page.depth,
4534      width: cover.width - cover.padding,
4535      height: cover.height - 2 * cover.padding
4536    }),
4537        marker = {
4538      use: false,
4539      color: 0XFF0000,
4540      size: scale * 0.001
4541    };
4542    if (cover.color !== sheet.color && !p.cover.sideTexture) {
4543      cover.sideTexture = Book.createSideTexture(cover.color);
4544    }
4545    if (page.color !== sheet.color && !p.page.sideTexture) {
4546      page.sideTexture = Book.createSideTexture(page.color);
4547    }
4548    return _extends({}, p, { scale: scale, height: height, width: width, flipProgressClb: flipProgressClb, cover: cover, page: page, marker: marker });
4549  };
4550
4551  return Book;
4552}(_libs.THREE.EventDispatcher);
4553
4554exports.default = Book;
4555
4556/***/ }),
4557/* 27 */
4558/***/ (function(module, exports, __webpack_require__) {
4559
4560"use strict";
4561
4562
4563exports.__esModule = true;
4564
4565var _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; };
4566
4567var _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; };
4568
4569var _libs = __webpack_require__(1);
4570
4571var _Controller2 = __webpack_require__(15);
4572
4573var _Controller3 = _interopRequireDefault(_Controller2);
4574
4575var _bookController = __webpack_require__(42);
4576
4577var _EventsToActions = __webpack_require__(49);
4578
4579var _EventsToActions2 = _interopRequireDefault(_EventsToActions);
4580
4581var _stats = __webpack_require__(71);
4582
4583var _stats2 = _interopRequireDefault(_stats);
4584
4585var _Object3DWatcher = __webpack_require__(55);
4586
4587var _Object3DWatcher2 = _interopRequireDefault(_Object3DWatcher);
4588
4589var _FullScreen = __webpack_require__(50);
4590
4591var _FullScreen2 = _interopRequireDefault(_FullScreen);
4592
4593function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4594
4595function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
4596
4597function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
4598
4599function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
4599onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
4600
4601var BookController = function (_Controller) {
4602  _inherits(BookController, _Controller);
4603
4604  function BookController(book, view, props) {
4605    _classCallCheck(this, BookController);
4606
4607    var _this = _possibleConstructorReturn(this, _Controller.call(this));
4608
4609    _this.navigationControls = true;
4610    _this.book = book;
4611    _this.visual = book.visual;
4612    _this.p = BookController.prepareProps(props);
4613    _this.p.rtl = book.p.rtl;
4614    _this.devicePixelRatio = _this.visual.wnd.devicePixelRatio || 1;
4615
4616    _this.orbit = book.visual.getOrbit();
4617    book.setFlipProgressClb(_this.updateViewIfState.bind(_this));
4618    _this.view = view;
4619    _this.bindActions();
4620
4621    _this.state = {
4622      smartPan: !_this.actions['cmdSmartPan'].active,
4623      singlePage: _this.actions['cmdSinglePage'].active || _this.actions['cmdSinglePage'].activeForMobile && _this.devicePixelRatio > 1,
4624      stats: _this.actions['cmdStats'].active,
4625      lighting: _this.p.lighting.default,
4626      activeSide: 1
4627    };
4628
4629    _this.boxs = [new _libs.THREE.Box3(), new _libs.THREE.Box3()];
4630    _this.bookWatcher = new _Object3DWatcher2.default(_this.visual, function () {
4631      if (_this.state.singlePage) {
4632        if (_this.state.activeSide) {
4633          _this.boxs[0].setFromObject(book.rightCover.three);
4634        } else {
4635          _this.boxs[0].setFromObject(book.leftCover.three);
4636        }
4637      } else {
4638        _this.boxs[0].setFromObject(book.leftCover.three);
4639        _this.boxs[1].setFromObject(book.rightCover.three);
4640        _this.boxs[0].union(_this.boxs[1]);
4641      }
4642      return _this.boxs[0];
4643    });
4644    _this.bookWatcher.scale = _this.p.scale.default;
4645    _this.book.setZoom(_this.bookWatcher.scale, _this.state.singlePage);
4646
4647    _this.Stats = new _stats2.default();
4648    _this.Stats.domElement.style.position = 'absolute';
4649    _this.Stats.domElement.style.top = '0px';
4650
4651    _this.visual.setExtraLighting(_this.state.lighting);
4652    _this.binds = {
4653      onScreenModeChanged: _this.onScreenModeChanged.bind(_this),
4654      stats: _this.Stats.update.bind(_this.Stats),
4655      onUpdateView: _this.updateView.bind(_this)
4656    };
4657    _FullScreen2.default.addEventListener(_this.view.getParentContainer().ownerDocument, _this.binds.onScreenModeChanged);
4658
4659    _this.cmdSmartPan();
4660
4661    if (_this.view.templateObject.appLoaded) {
4662      Promise.resolve().then(_this.view.templateObject.appLoaded);
4663    }
4664
4665    _this.book.enableLoadingAnimation(_this.p.loadingAnimation.book);
4666    if (_this.p.loadingAnimation.skin) {
4667      _this.initLoadingAnimation();
4668    }
4669
4670    _this.book.enableLoadingAnimation(_this.p.loadingAnimation.book);
4671    _this.book.setAutoResolution(_this.p.autoResolution.enabled, _this.p.autoResolution.coefficient);
4672
4673    _this.visual.addEventListener('resize', _this.updateView.bind(_this));
4674    return _this;
4675  }
4676
4677  BookController.prototype.dispose = function dispose() {
4678    _FullScreen2.default.removeEventListener(this.view.getParentContainer().ownerDocument, this.binds.onScreenModeChanged);
4679    delete this.book;
4680    delete this.view;
4681    delete this.visual;
4682  };
4683
4684  BookController.prototype.initLoadingAnimation = function initLoadingAnimation() {
4685    var _this2 = this;
4686
4687    var handler = function handler() {
4688      var pages = _this2.book.getTopPages();
4689      var visible = false;
4690      for (var _iterator = pages, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
4691        var _ref;
4692
4693        if (_isArray) {
4694          if (_i >= _iterator.length) break;
4695          _ref = _iterator[_i++];
4696        } else {
4697          _i = _iterator.next();
4698          if (_i.done) break;
4699          _ref = _i.value;
4700        }
4701
4702        var n = _ref;
4703
4704        var state = _this2.book.getPageState(n);
4705        visible = state === undefined || state === 'loading';
4706        if (visible) {
4707          break;
4708        }
4709      }
4710      _this2.view.setState('widLoading', {
4711        visible: visible
4712      });
4713    };
4714    this.book.addEventListener('beforeAnimation', handler);
4715    this.book.addEventListener('afterAnimation', handler);
4716    this.book.addEventListener('loadPage', handler);
4717    this.book.addEventListener('loadedPage', handler);
4718  };
4719
4720  BookController.prototype.enableNavigation = function enableNavigation(enable) {
4721    this.navigationControls = enable;
4722  };
4723
4724  BookController.prototype.setTocCtrl = function setTocCtrl(tocCtrl) {
4725    this.tocCtrl = tocCtrl;
4726    this.tocCtrl.onChange = this.updateView.bind(this);
4727    this.updateView();
4728  };
4729
4730  BookController.prototype.setPrinter = function setPrinter(printer) {
4731    this.printer = printer;
4732    this.updateView();
4733  };
4734
4735  BookController.prototype.setSounds = function setSounds(sounds) {
4736    this.sounds = sounds;
4737    sounds.setEnabled(this.actions['cmdSounds'].active);
4738    this.updateView();
4739  };
4740
4741  BookController.prototype.onScreenModeChanged = function onScreenModeChanged(e) {
4742    this.updateView();
4743  };
4744
4745  BookController.prototype.canZoomIn = function canZoomIn() {
4746    return !this.state.smartPan || Math.abs(this.bookWatcher.scale - this.p.scale.max) > this.p.eps;
4747  };
4748
4749  BookController.prototype.canZoomOut = function canZoomOut() {
4750    return !this.state.smartPan || Math.abs(this.bookWatcher.scale - this.p.scale.min) > this.p.eps;
4751  };
4752
4753  BookController.prototype.canDefaultZoom = function canDefaultZoom() {
4754    return this.state.smartPan;
4755  };
4756
4757  BookController.prototype.setBookZoom = function setBookZoom(scale) {
4758    var _this3 = this;
4759
4760    setTimeout(function () {
4761      if (_this3.bookWatcher.scale === scale) {
4762        _this3.book.setZoom(scale, _this3.state.singlePage);
4763      }
4764    }, 1000);
4765  };
4766
4767  BookController.prototype.cmdZoomIn = function cmdZoomIn() {
4768    if (this.state.smartPan) {
4769      this.bookWatcher.scale = Math.min(this.p.scale.max, this.bookWatcher.scale + this.p.scale.delta);
4770      this.setBookZoom(this.bookWatcher.scale);
4771    } else {
4772      this.orbit.zoomIn(6.6 * this.p.scale.delta / 0.32);
4773    }
4774    this.updateView();
4775  };
4776
4777  BookController.prototype.cmdZoomOut = function cmdZoomOut() {
4778    if (this.state.smartPan) {
4779      this.bookWatcher.scale = Math.max(this.p.scale.min, this.bookWatcher.scale - this.p.scale.delta);
4780      this.setBookZoom(this.bookWatcher.scale);
4781    } else {
4782      this.orbit.zoomOut(6.6 * this.p.scale.delta / 0.32);
4783    }
4784    this.updateView();
4785  };
4786
4787  BookController.prototype.cmdDefaultZoom = function cmdDefaultZoom() {
4788    if (this.state.smartPan) {
4789      this.bookWatcher.scale = this.p.scale.default;
4790      this.setBookZoom(this.bookWatcher.scale);
4791      this.updateView();
4792    }
4793  };
4794
4795  BookController.prototype.cmdToc = function cmdToc() {
4796    if (this.tocCtrl) {
4797      this.tocCtrl.togle();
4798    }
4799  };
4800
4801  BookController.prototype.cmdFastBackward = function cmdFastBackward() {
4802    this.startFlip(this.book.flipLeft(5));
4803  };
4804
4805  BookController.prototype.cmdBackward = function cmdBackward() {
4806    var _this4 = this;
4807
4808    if (this.state.singlePage) {
4809      this.state.activeSide = (this.getPage() + 1) % 2;
4810      if (this.state.activeSide) {
4811        this.state.activeSide = 0;
4812        this.updateView();
4813      } else {
4814        this.startFlip(this.book.flipLeft(1)).then(function (block) {
4815          if (block) {
4816            _this4.state.activeSide = 1;
4817          }
4818        });
4819      }
4820    } else {
4821      this.startFlip(this.book.flipLeft(1));
4822    }
4823  };
4824
4825  BookController.prototype.cmdBigBackward = function cmdBigBackward() {
4826    this.cmdBackward();
4827  };
4828
4829  BookController.prototype.cmdForward = function cmdForward() {
4830    var _this5 = this;
4831
4832    if (this.state.singlePage) {
4833      this.state.activeSide = (this.getPage() + 1) % 2;
4834      if (!this.state.activeSide) {
4835        this.state.activeSide = 1;
4836        this.updateView();
4837      } else {
4838        this.startFlip(this.book.flipRight(1)).then(function (block) {
4839          if (block) {
4840            _this5.state.activeSide = 0;
4841          }
4842        });
4843      }
4844    } else {
4845      this.startFlip(this.book.flipRight(1));
4846    }
4847  };
4848
4849  BookController.prototype.cmdBigForward = function cmdBigForward() {
4850    this.cmdForward();
4851  };
4852
4853  BookController.prototype.cmdFastForward = function cmdFastForward() {
4854    this.startFlip(this.book.flipRight(5));
4855  };
4856
4857  BookController.prototype.cmdSave = function cmdSave() {
4858    window.open(this.p.downloadURL, '_blank');
4859  };
4860
4861  BookController.prototype.cmdPrint = function cmdPrint() {
4862    this.printer.print();
4863  };
4864
4865  BookController.prototype.cmdFullScreen = function cmdFullScreen() {
4866    if (!_FullScreen2.default.activated()) {
4867      _FullScreen2.default.request(this.view.getParentContainer());
4868    } else {
4869      _FullScreen2.default.cancel();
4870    }
4871  };
4872
4873  BookController.prototype.cmdSmartPan = function cmdSmartPan() {
4874    this.state.smartPan = !this.state.smartPan;
4875    if (this.state.smartPan) {
4876      this.orbit.minAzimuthAngle = 0;
4877      this.orbit.maxAzimuthAngle = 0;
4878      this.orbit.minPolarAngle = 0;
4879      this.orbit.maxPolarAngle = Math.PI / 4;
4880      this.bookWatcher.enabled = true;
4881    } else {
4882      this.orbit.minAzimuthAngle = -Infinity;
4883      this.orbit.maxAzimuthAngle = Infinity;
4884      this.orbit.minPolarAngle = 0;
4885      this.orbit.maxPolarAngle = Math.PI;
4886      this.bookWatcher.enabled = false;
4887    }
4888    this.updateView();
4889  };
4890
4891  BookController.prototype.cmdSinglePage = function cmdSinglePage() {
4892    this.state.singlePage = !this.state.singlePage;
4893    this.setBookZoom(this.bookWatcher.scale);
4894    this.updateView();
4895  };
4896
4897  BookController.prototype.cmdSounds = function cmdSounds() {
4898    if (this.sounds) {
4899      this.sounds.togle();
4900    }
4901    this.updateView();
4902  };
4903
4904  BookController.prototype.cmdStats = function cmdStats() {
4905    this.state.stats = !this.state.stats;
4906    if (this.state.stats) {
4907      (0, _libs.$)(this.view.getContainer()).append(this.Stats.domElement);
4908      this.visual.addRenderCallback(this.binds.stats);
4909    } else {
4910      (0, _libs.$)(this.view.getContainer()).find(this.Stats.domElement).remove();
4911      this.visual.removeRenderCallback(this.binds.stats);
4912    }
4913    this.updateView();
4914  };
4915
4916  BookController.prototype.cmdLightingUp = function cmdLightingUp() {
4917    this.state.lighting = Math.min(this.state.lighting + this.p.lighting.delta, this.p.lighting.max);
4918    this.visual.setExtraLighting(this.state.lighting);
4919    this.updateView();
4920  };
4921
4922  BookController.prototype.cmdLightingDown = function cmdLightingDown() {
4923    this.state.lighting = Math.max(this.state.lighting - this.p.lighting.delta, this.p.lighting.min);
4924    this.visual.setExtraLighting(this.state.lighting);
4925    this.updateView();
4926  };
4927
4928  BookController.prototype.goToPage = function goToPage(page) {
4929    var _this6 = this;
4930
4931    if (this.p.rtl) {
4932      page = this.book.getPages() - 1 - page;
4933    }
4934    var pageNum = Math.max(Math.min(page, this.book.getPages() - 1), 0);
4935    this.state.activeSide = (pageNum + 1) % 2;
4936    var target = Math.max(Math.min(page - 1 + page % 2, this.book.getPages() - 1), 0),
4937        current = this.book.getPage(),
4938        flips = [],
4939        covs = 0;;
4940    if (target != current) {
4941      if (current === 0) {
4942        flips.push(1);
4943        current += 1;
4944        ++covs;
4945      } else if (current === this.book.getPages() - 1) {
4946        flips.push(-1);
4947        current -= 2;
4948        ++covs;
4949      }
4950      var cv = 0;
4951      if (target === 0) {
4952        cv = -1;
4953        target += 1;
4954        ++covs;
4955      } else if (target === this.book.getPages() - 1) {
4956        cv = 1;
4957        target -= 2;
4958        ++covs;
4959      }
4960      if (target - current) {
4961        flips.push(Math.ceil((target - current) / 2));
4962      }
4963      if (cv) {
4964        flips.push(cv);
4965      }
4966    }
4967
4968    var setClb = function setClb(fl, time, clb) {
4969      setTimeout(function () {
4970        if (fl < 0) {
4971          _this6.startFlip(_this6.book.flipLeft(-fl, clb));
4972        } else {
4973          _this6.startFlip(_this6.book.flipRight(fl, clb));
4974        }
4975      }, time);
4976    };
4977
4978    if (covs === 2) {
4979      setClb(flips[0], 0, function (block, progress, state) {
4980        if (state == 'finish' && progress == 1) {
4981          setClb(flips[flips.length - 1], 0);
4982        }
4983      });
4984      setClb(flips[1], 500);
4985    } else {
4986      var time = 0;
4987      for (var _iterator2 = flips, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
4988        var _ref2;
4989
4990        if (_isArray2) {
4991          if (_i2 >= _iterator2.length) break;
4992          _ref2 = _iterator2[_i2++];
4993        } else {
4994          _i2 = _iterator2.next();
4995          if (_i2.done) break;
4996          _ref2 = _i2.value;
4997        }
4998
4999        var fl = _ref2;
5000
5001        setClb(fl, time);
5002        time += 400;
5003      }
5004    }
5005  };
5006
5007  BookController.prototype.startFlip = function startFlip(flipRes) {
5008    var _this7 = this;
5009
5010    return flipRes ? flipRes.then(function (block) {
5011      if (block) {
5012        _this7.dispatchAsync({
5013          type: 'startFlip'
5014        });
5015      }
5016      return block;
5017    }) : Promise.resolve(undefined);
5018  };
5019
5020  BookController.prototype.endFlip = function endFlip(block) {
5021    this.dispatchAsync({
5022      type: 'endFlip'
5023    });
5024    return block;
5025  };
5026
5027  BookController.prototype.getPage = function getPage() {
5028    var page = this.book.getPage();
5029    return page ? Math.min(this.book.getPage() + this.state.activeSide, this.book.getPages() - 1) : 0;
5030  };
5031
5032  BookController.prototype.getPageForGUI = function getPageForGUI() {
5033    var n = (this.state.singlePage ? this.getPage() : this.book.getPage()) + 1;
5034    if (this.p.rtl) {
5035      n = this.book.getPages() - n + 1;
5036    }
5037    return n;
5038  };
5039
5040  BookController.prototype.inpPage = function inpPage(e, data) {
5041    this.goToPage(data - 1);
5042  };
5043
5044  BookController.prototype.updateViewIfState = function updateViewIfState(block, progress, state, type) {
5045    if (state === 'init' || state === 'finish') {
5046      setTimeout(this.updateView.bind(this), 100);
5047    }
5048    if (state === 'finish') {
5049      this.endFlip(block);
5050    }
5051  };
5052
5053  BookController.prototype.isCmdVisible = function isCmdVisible(name) {
5054    return (0, _libs.$)(this.visual.element).width() < this.p.narrowView.width ? this.actions[name].enabledInNarrow === undefined ? this.actions[name].enabled : this.actions[name].enabledInNarrow : this.actions[name].enabled;
5055  };
5056
5057  BookController.prototype.updateViewState = function updateViewState() {
5058    this.viewState = {
5059      'cmdZoomIn': {
5060        enable: this.canZoomIn(),
5061        visible: this.isCmdVisible('cmdZoomIn'),
5062        active: false
5063      },
5064      'cmdZoomOut': {
5065        enable: this.canZoomOut(),
5066        visible: this.isCmdVisible('cmdZoomOut'),
5067        active: false
5068      },
5069      'cmdDefaultZoom': {
5070        enable: this.canDefaultZoom(),
5071        visible: this.isCmdVisible('cmdDefaultZoom'),
5072        active: this.canDefaultZoom() && Math.abs(this.bookWatcher.scale - this.p.scale.default) < this.p.eps
5073      },
5074      'cmdToc': {
5075        enable: !!this.tocCtrl,
5076        visible: this.isCmdVisible('cmdToc') && this.tocCtrl,
5077        active: this.tocCtrl && this.tocCtrl.visible
5078      },
5079      'inpPages': {
5080        visible: true,
5081        value: this.book.getPages()
5082      },
5083      'inpPage': {
5084        visible: true,
5085        enable: !this.book.isProcessing() && this.navigationControls,
5086        value: this.getPageForGUI()
5087      },
5088      'cmdSave': {
5089        enable: true,
5090        visible: this.isCmdVisible('cmdSave') && !!this.p.downloadURL,
5091        active: false
5092      },
5093      'cmdPrint': {
5094        enable: true,
5095        visible: this.isCmdVisible('cmdPrint') && !!this.printer,
5096        active: false
5097      },
5098      'cmdFullScreen': {
5099        enable: _FullScreen2.default.available(),
5100        visible: this.isCmdVisible('cmdFullScreen'),
5101        active: _FullScreen2.default.available() && _FullScreen2.default.activated()
5102      },
5103      'widSettings': {
5104        enable: true,
5105        visible: this.isCmdVisible('widSettings'),
5106        active: false
5107      },
5108      'cmdSmartPan': {
5109        enable: true,
5110        visible: this.isCmdVisible('cmdSmartPan'),
5111        active: this.state.smartPan
5112      },
5113      'cmdSinglePage': {
5114        enable: true,
5115        visible: this.isCmdVisible('cmdSinglePage'),
5116        active: this.state.singlePage
5117      },
5118      'cmdSounds': {
5119        enable: true,
5120        visible: this.isCmdVisible('cmdSounds') && !!this.sounds,
5121        active: !!this.sounds && this.sounds.enabled
5122      },
5123      'cmdStats': {
5124        enable: true,
5125        visible: this.isCmdVisible('cmdStats'),
5126        active: this.state.stats
5127      },
5128      'cmdLightingUp': {
5129        enable: Math.abs(this.state.lighting - this.p.lighting.max) > this.p.eps,
5130        visible: this.isCmdVisible('cmdLightingUp'),
5131        active: false
5132      },
5133      'cmdLightingDown': {
5134        enable: Math.abs(this.state.lighting - this.p.lighting.min) > this.p.eps,
5135        visible: this.isCmdVisible('cmdLightingDown'),
5136        active: false
5137      }
5138    };
5139
5140    var left = this.book.getLeftFlipping(),
5141        right = this.book.getRightFlipping();
5142    var flippersEnable = {
5143      cmdFastBackward: !!left && this.navigationControls,
5144      cmdBackward: !!left && this.navigationControls,
5145      cmdBigBackward: !!left && this.navigationControls,
5146      cmdForward: !!right && this.navigationControls,
5147      cmdBigForward: !!right && this.navigationControls,
5148      cmdFastForward: !!right && this.navigationControls
5149    };
5150    for (var _iterator3 = Object.keys(flippersEnable), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
5151      var _ref3;
5152
5153      if (_isArray3) {
5154        if (_i3 >= _iterator3.length) break;
5155        _ref3 = _iterator3[_i3++];
5156      } else {
5157        _i3 = _iterator3.next();
5158        if (_i3.done) break;
5159        _ref3 = _i3.value;
5160      }
5161
5162      var name = _ref3;
5163
5164      this.viewState[name] = {
5165        enable: flippersEnable[name],
5166        visible: this.isCmdVisible(name),
5167        active: false
5168      };
5169    };
5170  };
5171
5172  BookController.prototype.updateView = function updateView() {
5173    if (this.view) {
5174      this.updateViewState();
5175      for (var _iterator4 = Object.keys(this.viewState), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
5176        var _ref4;
5177
5178        if (_isArray4) {
5179          if (_i4 >= _iterator4.length) break;
5180          _ref4 = _iterator4[_i4++];
5181        } else {
5182          _i4 = _iterator4.next();
5183          if (_i4.done) break;
5184          _ref4 = _i4.value;
5185        }
5186
5187        var name = _ref4;
5188
5189        this.view.setState(name, this.viewState[name]);
5190      }
5191    }
5192  };
5193
5194  BookController.prototype.getActions = function getActions() {
5195    var _this8 = this;
5196
5197    var isSwipping = function isSwipping(name) {
5198      return _this8.actions.touchCmdSwipe.enabled && _this8.actions.touchCmdSwipe.code === _this8.actions[name].code && _this8.state.smartPan && _this8.bookWatcher.scale <= 1;
5199    },
5200        cmds = {};
5201
5202    var _loop = function _loop(name) {
5203      if (name.indexOf('cmd') === 0) {
5204        cmds[name] = {
5205          activate: function activate() {
5206            if (_this8.viewState && _this8.viewState[name].enable) {
5207              _this8[name].apply(_this8, arguments);
5208            }
5209          }
5210        };
5211      }
5212    };
5213
5214    for (var name in this) {
5215      _loop(name);
5216    }
5217
5218    return _extends({}, cmds, {
5219      cmdPanLeft: {
5220        activate: function activate(e) {
5221          return _this8.orbit.actions.pan(e, {
5222            state: 'move',
5223            dx: -_this8.p.pan.speed,
5224            dy: 0
5225          });
5226        }
5227      },
5228      cmdPanRight: {
5229        activate: function activate(e) {
5230          return _this8.orbit.actions.pan(e, {
5231            state: 'move',
5232            dx: _this8.p.pan.speed,
5233            dy: 0
5234          });
5235        }
5236      },
5237      cmdPanUp: {
5238        activate: function activate(e) {
5239          return _this8.orbit.actions.pan(e, {
5240            state: 'move',
5241            dx: 0,
5242            dy: -_this8.p.pan.speed
5243          });
5244        }
5245      },
5246      cmdPanDown: {
5247        activate: function activate(e) {
5248          return _this8.orbit.actions.pan(e, {
5249            state: 'move',
5250            dx: 0,
5251            dy: _this8.p.pan.speed
5252          });
5253        }
5254      },
5255      mouseCmdRotate: {
5256        activate: this.orbit.actions.rotate
5257      },
5258      mouseCmdDragZoom: {
5259        activate: function activate(e, data) {
5260          if (data.dy > 0) {
5261            _this8.cmdZoomOut();
5262          } else if (data.dy < 0) {
5263            _this8.cmdZoomIn();
5264          }
5265        }
5266      },
5267      mouseCmdPan: {
5268        activate: this.orbit.actions.pan
5269      },
5270      mouseCmdWheelZoom: {
5271        activate: function activate(e) {
5272          e.preventDefault();
5273          if (e.deltaY < 0) {
5274            _this8.cmdZoomOut();
5275          } else if (e.deltaY > 0) {
5276            _this8.cmdZoomIn();
5277          }
5278        }
5279      },
5280      touchCmdRotate: {
5281        activate: function activate(e, data) {
5282          if (!isSwipping('touchCmdRotate')) {
5283            e.preventDefault();
5284            _this8.orbit.actions.rotate(e, data);
5285          }
5286        }
5287      },
5288      touchCmdZoom: {
5289        activate: function activate(e, data) {
5290          if (!isSwipping('touchCmdZoom')) {
5291            e.preventDefault();
5292            if (data.dy > 0) {
5293              _this8.cmdZoomOut();
5294            } else if (data.dy < 0) {
5295              _this8.cmdZoomIn();
5296            }
5297          }
5298        }
5299      },
5300      touchCmdPan: {
5301        activate: function activate(e, data) {
5302          if (!isSwipping('touchCmdPan')) {
5303            e.preventDefault();
5304            _this8.orbit.actions.pan(e, data);
5305          }
5306        }
5307      },
5308      touchCmdSwipe: {
5309        activate: function activate(e, data) {
5310          if (isSwipping('touchCmdSwipe')) {
5311            e.preventDefault();
5312            if (data.state === 'start') {
5313              var touch = (e.touches || e.originalEvent.touches)[_this8.actions.touchCmdSwipe.code - 1];
5314              _this8.swipeData = {
5315                handled: false,
5316                x0: touch.pageX,
5317                y0: touch.pageY,
5318                x: touch.pageX,
5319                y: touch.pageY
5320              };
5321            } else if (data.state === 'move') {
5322              if (!_this8.swipeData.handled) {
5323                _this8.swipeData = _extends({}, _this8.swipeData, {
5324                  x: _this8.swipeData.x + data.dx,
5325                  y: _this8.swipeData.y + data.dy
5326                });
5327                if (Math.abs(_this8.swipeData.x0 - _this8.swipeData.x) > 100) {
5328                  _this8.swipeData.x0 > _this8.swipeData.x ? _this8.cmdForward() : _this8.cmdBackward();
5329                  _this8.swipeData.handled = true;
5330                }
5331              }
5332            } else {
5333              delete _this8.swipeData;
5334            }
5335          }
5336        }
5337      },
5338      widSettings: {
5339        activate: function activate() {
5340          return undefined;
5341        }
5342      }
5343    });
5344  };
5345
5346  BookController.prototype.bindActions = function bindActions() {
5347    this.eToA = new _EventsToActions2.default((0, _libs.$)(this.visual.element));
5348    this.eToA.addAction(function (e) {
5349      return e.preventDefault();
5350    }, 'contextmenu', _EventsToActions2.default.mouseButtons.Right, 0);
5351
5352    this.actions = this.getActions();
5353    for (var _iterator5 = Object.keys(this.actions), _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
5354      var _ref5;
5355
5356      if (_isArray5) {
5357        if (_i5 >= _iterator5.length) break;
5358        _ref5 = _iterator5[_i5++];
5359      } else {
5360        _i5 = _iterator5.next();
5361        if (_i5.done) break;
5362        _ref5 = _i5.value;
5363      }
5364
5365      var name = _ref5;
5366
5367      var action = _extends({}, this.actions[name], this.p.actions[name]);
5368      this.actions[name] = action;
5369      if (action.enabled) {
5370        var flags = action.flags || 0;
5371        if (action.type) {
5372          this.eToA.addAction(action.activate, action.type, action.code, flags);
5373        } else if (action.code !== undefined) {
5374          this.eToA.addAction(action.activate, 'keydown', action.code, flags);
5375        }
5376      }
5377    }
5378  };
5379
5380  BookController.prepareProps = function prepareProps(props) {
5381    return BookController.calcProps(BookController.mergeProps((0, _bookController.props)(), props));
5382  };
5383
5384  BookController.setActions = function setActions(props, actions) {
5385    for (var _iterator6 = Object.keys(actions || {}), _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
5386      var _ref6;
5387
5388      if (_isArray6) {
5389        if (_i6 >= _iterator6.length) break;
5390        _ref6 = _iterator6[_i6++];
5391      } else {
5392        _i6 = _iterator6.next();
5393        if (_i6.done) break;
5394        _ref6 = _i6.value;
5395      }
5396
5397      var name = _ref6;
5398
5399      props.actions[name] = _extends({}, props.actions[name], actions[name]);
5400    }
5401  };
5402
5403  BookController.mergeProps = function mergeProps(first, second) {
5404    second = second || {};
5405    function merge(first, second) {
5406      second = second || {};
5407      var props = _extends({}, first, second);
5408      for (var _iterator7 = Object.keys(first), _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {
5409        var _ref7;
5410
5411        if (_isArray7) {
5412          if (_i7 >= _iterator7.length) break;
5413          _ref7 = _iterator7[_i7++];
5414        } else {
5415          _i7 = _iterator7.next();
5416          if (_i7.done) break;
5417          _ref7 = _i7.value;
5418        }
5419
5420        var name = _ref7;
5421
5422        if (_typeof(first[name]) === 'object') {
5423          props[name] = merge(first[name], second[name]);
5424        }
5425      }
5426      return props;
5427    }
5428    var props = merge(first, second);
5429    BookController.setActions(props, first.actions);
5430    BookController.setActions(props, second.actions);
5431    return props;
5432  };
5433
5434  BookController.calcProps = function calcProps(props) {
5435    props.scale.delta = (props.scale.max - props.scale.min) / props.scale.levels;
5436    props.lighting.delta = (props.lighting.max - props.lighting.min) / props.lighting.levels;
5437    return props;
5438  };
5439
5440  return BookController;
5441}(_Controller3.default);
5442
5443exports.default = BookController;
5444
5445/***/ }),
5446/* 28 */
5447/***/ (function(module, exports, __webpack_require__) {
5448
5449"use strict";
5450
5451
5452exports.__esModule = true;
5453
5454var _libs = __webpack_require__(1);
5455
5456function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5457
5458var BookPrinter = function () {
5459  function BookPrinter(context, book, styleSheet) {
5460    _classCallCheck(this, BookPrinter);
5461
5462    this.book = book;
5463    this.styleSheet = styleSheet;
5464    this.wnd = context.wnd;
5465    this.doc = context.doc;
5466    this.pageCallback = book.getPageCallback();
5467    var test = this.pageCallback(0);
5468    this.type = test.type;
5469    if (this.type === 'pdf') {
5470      this.pdfSrc = test.src.src;
5471    }
5472  }
5473
5474  BookPrinter.prototype.cancel = function cancel() {
5475    this.canceled = true;
5476  };
5477
5478  BookPrinter.prototype.dispose = function dispose() {
5479    if (this.frame) {
5480      this.frame.remove();
5481      delete this.frame;
5482    }
5483  };
5484
5485  BookPrinter.prototype.print = function print() {
5486    var _this = this;
5487
5488    delete this.canceled;
5489    if (this.type === 'pdf') {
5490      var printWnd = void 0,
5491          callManually = false;
5492      if (this.useIFrame()) {
5493        callManually = !!this.frame;
5494        if (!this.frame) {
5495          this.frame = (0, _libs.$)('<iframe src="' + this.pdfSrc + '" style="display: none;"></iframe>').appendTo(this.doc.body);
5496        }
5497        printWnd = this.frame[0].contentWindow;
5498      } else {
5499        printWnd = this.wnd.open(this.pdfSrc);
5500      }
5501      if (callManually) {
5502        printWnd.print();
5503      } else {
5504        (0, _libs.$)(printWnd).on('load', function () {
5505          try {
5506            printWnd.print();
5507          } catch (e) {
5508            console.error(e);
5509          }
5510        });
5511      }
5512    } else {
5513      this.renderContent().then(function (content) {
5514        var printWnd = _this.wnd.open(),
5515            printDoc = printWnd.document,
5516            html = '\n            <!DOCTYPE html>\n            <html>\n              <head>\n                <meta charset="utf-8">\n                <title>3D FlipBook - Printing</title>\n                ' + content.head + '\n                <script type="text/javascript">\n                  function printDocument() {\n                    window.print();\n                    window.close();\n                  }\n                  function init() {\n                    setTimeout(printDocument, 100);\n                  }\n                </script>\n              </head>\n              <body onload="init()">\n                ' + content.body + '\n              </body>\n            </html>\n          ';
5517        printDoc.open();
5518        printDoc.write(html);
5519        printDoc.close();
5520      }).catch(function (e) {
5521        return console.warn('3D FlipBook - Printing was canceled');
5522      });
5523    }
5524  };
5525
5526  BookPrinter.prototype.progress = function progress(v) {
5527    if (this.canceled) {
5528      throw 'Cancel Printing';
5529    }
5530    if (this.onProgress) {
5531      this.onProgress(Math.floor(v * 100));
5532    }
5533  };
5534
5535  BookPrinter.prototype.renderContent = function renderContent() {
5536    var _this2 = this;
5537
5538    var pages = this.book.getPages(),
5539        head = new Set(),
5540        body = [];
5541    var done = Promise.resolve();
5542
5543    var _loop = function _loop(page) {
5544      var info = _this2.pageCallback(page);
5545      if (info.type === 'image') {
5546        done = done.then(function () {
5547          _this2.progress(page / pages);
5548          return _this2.renderImage(head, body, info.src);
5549        });
5550      } else if (info.type === 'html') {
5551        done = done.then(function () {
5552          _this2.progress(page / pages);
5553          return _this2.renderHtml(head, body, info.src);
5554        });
5555      }
5556    };
5557
5558    for (var page = 0; page < pages; ++page) {
5559      _loop(page);
5560    }
5561    return done.then(function () {
5562      _this2.progress(1);
5563      return { head: _this2.renderHead(head), body: body.join('\n') };
5564    });
5565  };
5566
5567  BookPrinter.wrap = function wrap(content) {
5568    return '<div class="fb3d-printer-page">' + content + '</div>';
5569  };
5570
5571  BookPrinter.prototype.renderImage = function renderImage(head, body, src) {
5572    body.push(BookPrinter.wrap('<img src="' + src + '" />'));
5573  };
5574
5575  BookPrinter.prototype.renderHtml = function renderHtml(head, body, src) {
5576    return new Promise(function (resolve, reject) {
5577      _libs.$.get(src, function (html) {
5578        var links = html.match(/<link.*?>/ig) || [];
5579        for (var _iterator = links, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
5580          var _ref;
5581
5582          if (_isArray) {
5583            if (_i >= _iterator.length) break;
5584            _ref = _iterator[_i++];
5585          } else {
5586            _i = _iterator.next();
5587            if (_i.done) break;
5588            _ref = _i.value;
5589          }
5590
5591          var link = _ref;
5592
5593          if (link.match(/stylesheet/i)) {
5594            var href = link.match(/href\s*=\s*['"](.*)['"]/i);
5595            if (href) {
5596              head.add(href[1]);
5597            }
5598          }
5599        }
5600        var content = html.match(/<body.*?>([\S\s]*)<\/body>/i);
5601        if (content) {
5602          body.push(BookPrinter.wrap(content[1]));
5603        }
5604        resolve();
5605      }).fail(function (e) {
5606        console.error(e.responseText);
5607        reject();
5608      });
5609    });
5610  };
5611
5612  BookPrinter.prototype.renderHead = function renderHead(head) {
5613    var content = [];
5614    head.forEach(function (k) {
5615      return content.push('<link rel="stylesheet" href="' + k + '">');
5616    });
5617    content.push(this.styleSheet ? '<link rel="stylesheet" href="' + this.styleSheet + '">' : BookPrinter.defaultStyleSheet());
5618    return content.join('\n');
5619  };
5620
5621  BookPrinter.prototype.useIFrame = function useIFrame() {
5622    var isChromium = this.wnd.chrome,
5623        winNav = this.wnd.navigator,
5624        vendorName = winNav.vendor,
5625        isIEedge = winNav.userAgent.indexOf("Edge") > -1,
5626        isIOSChrome = winNav.userAgent.match("CriOS");
5627    var use = void 0;
5628    if (isIOSChrome) {
5629      use = true;
5630    } else if (isChromium && vendorName === 'Google Inc.' && !isIEedge) {
5631      use = true;
5632    } else {
5633      use = false;
5634    }
5635    return use;
5636  };
5637
5638  BookPrinter.defaultStyleSheet = function defaultStyleSheet() {
5639    return '\n      <style type="text/css">\n        body {\n          margin: 0;\n          padding: 0;\n        }\n        .fb3d-printer-page {\n          page-break-after: always;\n        }\n      </style>\n    ';
5640  };
5641
5642  return BookPrinter;
5643}();
5644
5645exports.default = BookPrinter;
5646
5647/***/ }),
5648/* 29 */
5649/***/ (function(module, exports, __webpack_require__) {
5650
5651"use strict";
5652
5653
5654exports.__esModule = true;
5655
5656var _libs = __webpack_require__(1);
5657
5658var _View2 = __webpack_require__(65);
5659
5660var _View3 = _interopRequireDefault(_View2);
5661
5662function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5663
5664function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5665
5666function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
5667
5668function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
5669
5670var BookView = function (_View) {
5671  _inherits(BookView, _View);
5672
5673  function BookView(container, onLoad, template, handler) {
5674    _classCallCheck(this, BookView);
5675
5676    return _possibleConstructorReturn(this, _View.call(this, container, onLoad, template, handler));
5677  }
5678
5679  BookView.prototype.initView = function initView() {
5680    this.view = this.container.find('.view');
5681    this.bookmarksView = this.container.find('.widBookmarks');
5682    this.thumbnailsView = this.container.find('.widThumbnails');
5683    this.searchView = this.container.find('.widSearch');
5684  };
5685
5686  BookView.prototype.getHandlers = function getHandlers(id) {
5687    var _this2 = this;
5688
5689    var handlers = void 0;
5690    if (id === 'inpPage') {
5691      handlers = [{
5692        inpPage: function inpPage(e, data) {
5693          return _this2.callLater(_View.prototype.getHandlers.call(_this2, id), id, e, data, BookView.PAGE_HANDLER_DELAY);
5694        }
5695      }];
5696    } else {
5697      handlers = _View.prototype.getHandlers.call(this, id);
5698    }
5699    return handlers;
5700  };
5701
5702  BookView.prototype.onItemStateChanged = function onItemStateChanged(id, state) {
5703    if (id === 'cmdFullScreen') {
5704      if (state.active) {
5705        this.parentContainer.addClass('fullscreen');
5706      } else {
5707        this.parentContainer.removeClass('fullscreen');
5708      }
5709    }
5710  };
5711
5712  BookView.prototype.getView = function getView() {
5713    return this.view;
5714  };
5715
5716  BookView.prototype.getBookmarksView = function getBookmarksView() {
5717    return this.bookmarksView;
5718  };
5719
5720  BookView.prototype.getThumbnailsView = function getThumbnailsView() {
5721    return this.thumbnailsView;
5722  };
5723
5724  BookView.prototype.getSearchView = function getSearchView() {
5725    return this.searchView;
5726  };
5727
5728  BookView.prototype.getForms = function getForms() {
5729    return [];
5730  };
5731
5732  BookView.prototype.getLinks = function getLinks() {
5733    return ['cmdZoomIn', 'cmdZoomOut', 'cmdDefaultZoom', 'cmdToc', 'cmdFastBackward', 'cmdBackward', 'cmdBigBackward', 'cmdForward', 'cmdBigForward', 'cmdFastForward', 'cmdSave', 'cmdPrint', 'cmdFullScreen', 'cmdSmartPan', 'cmdSinglePage', 'cmdSounds', 'cmdStats', 'cmdLightingUp', 'cmdLightingDown', 'cmdCloseToc', 'cmdBookmarks', 'cmdSearch', 'cmdThumbnails'];
5734  };
5735
5736  BookView.prototype.getWidgets = function getWidgets() {
5737    return ['widLoadingProgress', 'widFloatWnd', 'widTocMenu', 'widBookmarks', 'widThumbnails', 'widSearch', 'widSettings', 'widLoading'];
5738  };
5739
5740  BookView.prototype.getInputs = function getInputs() {
5741    return ['inpPage', 'inpPages'];
5742  };
5743
5744  BookView.prototype.getTexts = function getTexts() {
5745    return ['txtLoadingProgress'];
5746  };
5747
5748  BookView.prototype.getTemplate = function getTemplate() {
5749    return {
5750      html: 'templates/default-book-view.html',
5751      styles: ['css/black-book-view.css'],
5752      links: [{
5753        rel: 'stylesheet',
5754        href: 'css/font-awesome.min.css'
5755      }],
5756      script: 'js/default-book-view.js'
5757    };
5758  };
5759
5760  return BookView;
5761}(_View3.default);
5762
5763BookView.PAGE_HANDLER_DELAY = 1000;
5764exports.default = BookView;
5765
5766/***/ }),
5767/* 30 */
5768/***/ (function(module, exports, __webpack_require__) {
5769
5770"use strict";
5771
5772
5773exports.__esModule = true;
5774
5775var _BookPropsBuilder2 = __webpack_require__(9);
5776
5777var _BookPropsBuilder3 = _interopRequireDefault(_BookPropsBuilder2);
5778
5779var _ImageFactory = __webpack_require__(8);
5780
5781var _ImageFactory2 = _interopRequireDefault(_ImageFactory);
5782
5783function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5784
5785function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5786
5787function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
5788
5789function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
5790
5791var ClbBookPropsBuilder = function (_BookPropsBuilder) {
5792  _inherits(ClbBookPropsBuilder, _BookPropsBuilder);
5793
5794  function ClbBookPropsBuilder(context, pageCallback, pages, onReady) {
5795    _classCallCheck(this, ClbBookPropsBuilder);
5796
5797    var _this = _possibleConstructorReturn(this, _BookPropsBuilder.call(this, onReady));
5798
5799    _this.calcSheets(pages);
5800    _this.pageCallback = pageCallback;
5801    _this.binds = {
5802      pageCallback: pageCallback.bind(_this)
5803    };
5804    _this.imageFactory = new _ImageFactory2.default(context);
5805
5806    if (pages > 0) {
5807      var test = _this.imageFactory.build(pageCallback(0), 0, _this.defaults.sheet.widthTexels, _this.defaults.sheet.heightTexels, _this.defaults.sheet.color);
5808      test.onLoad = function () {
5809        _this.calcProps(test.width, test.height);
5810        test.dispose();
5811        _this.ready();
5812      };
5813    } else {
5814      _this.props = _this.defaults;
5815      _this.ready();
5816    }
5817    return _this;
5818  }
5819
5820  return ClbBookPropsBuilder;
5821}(_BookPropsBuilder3.default);
5822
5823exports.default = ClbBookPropsBuilder;
5824
5825/***/ }),
5826/* 31 */
5827/***/ (function(module, exports, __webpack_require__) {
5828
5829"use strict";
5830
5831
5832exports.__esModule = true;
5833
5834var _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; };
5835
5836var _SheetBlock2 = __webpack_require__(10);
5837
5838var _SheetBlock3 = _interopRequireDefault(_SheetBlock2);
5839
5840function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5841
5842function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5843
5844function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
5845
5846function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
5847
5848var Cover = function (_SheetBlock) {
5849  _inherits(Cover, _SheetBlock);
5850
5851  function Cover(visual, p, angle, state) {
5852    _classCallCheck(this, Cover);
5853
5854    return _possibleConstructorReturn(this, _SheetBlock.call(this, visual, p, 0, 1, angle, state));
5855  }
5856
5857  Cover.prototype.getProps = function getProps() {
5858    return _extends({}, this.p.cover, {
5859      sheets: 1
5860    });
5861  };
5862
5863  Cover.prototype.loadPoints = function loadPoints() {
5864    var openedInterpolationIndeces = [[2, 3, 4], [2, 3, 4, 5, 6]],
5865        closedInterpolationIndeces = [[0, 1, 2], [0, 1, 2]],
5866        interpolationPoints = [{
5867      x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0, 0.2831, 0.6256, 0.8082, 0.9909], [0, 0.2603, 0.5936, 0.7763, 0.9589], [0, 0.1370, 0.3881, 0.5342, 0.6758], [0, 0, 0, 0, 0]],
5868      y: [[0, 0, 0, 0, 0], [0, 0.02, 0.005, -0.001, -0.0025], [0, 0.04, 0.01, -0.002, -0.005], [0, 0.2466, 0.4795, 0.5708, 0.6758], [0, 0.2877, 0.6347, 0.8174, 1.0000]]
5869    }, {
5870      x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0, 0.2831, 0.6256, 0.8082, 0.9909], [0, 0.2603, 0.5936, 0.7763, 0.9589], [0.000, 0.233, 0.563, 0.746, 0.927], [0.000, 0.144, 0.433, 0.613, 0.796], [0.000, 0.070, 0.288, 0.455, 0.626], [0, 0, 0, 0, 0]],
5871      y: [[0, 0, 0, 0, 0], [0, 0.02, 0.005, -0.001, -0.0025], [0, 0.04, 0.01, -0.002, -0.005], [0.000, 0.168, 0.269, 0.270, 0.255], [0.000, 0.245, 0.435, 0.458, 0.460], [0.000, 0.278, 0.544, 0.614, 0.673], [0, 0.2877, 0.6347, 0.8174, 1.0000]]
5872    }];
5873    return {
5874      interpolationPoints: interpolationPoints,
5875      openedInterpolationIndeces: openedInterpolationIndeces,
5876      closedInterpolationIndeces: closedInterpolationIndeces
5877    };
5878  };
5879
5880  return Cover;
5881}(_SheetBlock3.default);
5882
5883exports.default = Cover;
5884
5885/***/ }),
5886/* 32 */
5887/***/ (function(module, exports, __webpack_require__) {
5888
5889"use strict";
5890
5891
5892exports.__esModule = true;
5893
5894var _SheetCssLayer = __webpack_require__(37);
5895
5896var _SheetCssLayer2 = _interopRequireDefault(_SheetCssLayer);
5897
5898function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5899
5900function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5901
5902var CssLayersManager = function () {
5903  function CssLayersManager(book) {
5904    _classCallCheck(this, CssLayersManager);
5905
5906    this.book = book;
5907    this.props = book.p.cssLayerProps;
5908    this.visual = book.visual;
5909    this.pageManager = book.pageManager;
5910    this.wrappers = {};
5911  }
5912
5913  CssLayersManager.prototype.getActives = function getActives() {
5914    var page = this.book.getPage(),
5915        pages = this.book.getPages();
5916    return page === 0 || page === pages - 1 ? [page] : [page, page + 1];
5917  };
5918
5919  CssLayersManager.prototype.dispose = function dispose() {
5920    for (var _iterator = Object.values(this.wrappers), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
5921      var _ref;
5922
5923      if (_isArray) {
5924        if (_i >= _iterator.length) break;
5925        _ref = _iterator[_i++];
5926      } else {
5927        _i = _iterator.next();
5928        if (_i.done) break;
5929        _ref = _i.value;
5930      }
5931
5932      var w = _ref;
5933
5934      w.layers.forEach(function (l) {
5935        return l.dispose();
5936      });
5937    }
5938    delete this.wrappers;
5939  };
5940
5941  CssLayersManager.prototype.show = function show() {
5942    var _this = this;
5943
5944    this.hidden = false;
5945
5946    var _loop = function _loop() {
5947      if (_isArray2) {
5948        if (_i2 >= _iterator2.length) return 'break';
5949        _ref2 = _iterator2[_i2++];
5950      } else {
5951        _i2 = _iterator2.next();
5952        if (_i2.done) return 'break';
5953        _ref2 = _i2.value;
5954      }
5955
5956      var n = _ref2;
5957
5958      var w = _this.wrappers[n];
5959      if (w) {
5960        if (w.state === 'ready' && w.layers.length) {
5961          var block = _this.book.getBlockByPage(n);
5962          w.layers.forEach(function (l) {
5963            if (l.isHidden()) {
5964              l.update(block);
5965              l.show();
5966            }
5967          });
5968        }
5969      } else {
5970        var _w = _this.wrappers[n] = {
5971          state: 'loading',
5972          layers: []
5973        };
5974        Promise.resolve().then(function () {
5975          _this.pageManager.getLayers(n, function (layers) {
5976            if (layers.length && _this.wrappers) {
5977              var _block = _this.book.getBlockByPage(n);
5978              for (var _iterator3 = layers, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
5979                var _ref3;
5980
5981                if (_isArray3) {
5982                  if (_i3 >= _iterator3.length) break;
5983                  _ref3 = _iterator3[_i3++];
5984                } else {
5985                  _i3 = _iterator3.next();
5986                  if (_i3.done) break;
5987                  _ref3 = _i3.value;
5988                }
5989
5990                var l = _ref3;
5991
5992                var sl = new _SheetCssLayer2.default(_this.visual, _block, _this.props);
5993                _w.layers.push(sl);
5994                sl.set(l.css, l.html, l.js);
5995              }
5996              setTimeout(function () {
5997                if (!_this.hidden && ~_this.getActives().indexOf(n)) {
5998                  _w.layers.forEach(function (l) {
5999                    return l.show();
6000                  });
6001                }
6002              }, 10);
6003            }
6004            _w.state = 'ready';
6005          });
6006        });
6007      }
6008    };
6009
6010    for (var _iterator2 = this.getActives(), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
6011      var _ref2;
6012
6013      var _ret = _loop();
6014
6015      if (_ret === 'break') break;
6016    }
6017  };
6018
6019  CssLayersManager.prototype.hide = function hide() {
6020    this.hidden = true;
6021    var wait = [];
6022    for (var _iterator4 = Object.values(this.wrappers), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
6023      var _ref4;
6024
6025      if (_isArray4) {
6026        if (_i4 >= _iterator4.length) break;
6027        _ref4 = _iterator4[_i4++];
6028      } else {
6029        _i4 = _iterator4.next();
6030        if (_i4.done) break;
6031        _ref4 = _i4.value;
6032      }
6033
6034      var _w2 = _ref4;
6035
6036      _w2.layers.forEach(function (l) {
6037        return wait.push(l.hide());
6038      });
6039    }
6040    return Promise.all(wait);
6041  };
6042
6043  return CssLayersManager;
6044}();
6045
6046exports.default = CssLayersManager;
6047
6048/***/ }),
6049/* 33 */
6050/***/ (function(module, exports, __webpack_require__) {
6051
6052"use strict";
6053
6054
6055exports.__esModule = true;
6056
6057var _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; };
6058
6059var _libs = __webpack_require__(1);
6060
6061var _Cache = __webpack_require__(14);
6062
6063var _Cache2 = _interopRequireDefault(_Cache);
6064
6065var _LoadingAnimation = __webpack_require__(52);
6066
6067var _LoadingAnimation2 = _interopRequireDefault(_LoadingAnimation);
6068
6069var _ImageFactory = __webpack_require__(8);
6070
6071var _ImageFactory2 = _interopRequireDefault(_ImageFactory);
6072
6073var _BaseMathUtils = __webpack_require__(2);
6074
6075var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);
6076
6077var _TextureAnimator = __webpack_require__(60);
6078
6079var _TextureAnimator2 = _interopRequireDefault(_TextureAnimator);
6080
6081function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6082
6083function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6084
6085var PageManager = function () {
6086  function PageManager(visual, book, p) {
6087    _classCallCheck(this, PageManager);
6088
6089    this.visual = visual;
6090    this.book = book;
6091    this.pageQuery = '';
6092    this.p = p;
6093    this.pageCache = new _Cache2.default(p.cachedPages);
6094    this.resourcesCache = new _Cache2.default();
6095    this.canvas = (0, _libs.$)('<canvas>')[0];
6096    this.imageFactory = new _ImageFactory2.default(_extends({}, visual, { dispatchEvent: book.dispatchEvent.bind(book), renderCanvas: this.canvas, renderCanvasCtx: this.canvas.getContext('2d') }), this.resourcesCache);
6097
6098    this.loadings = [];
6099    this.renderQueue = [];
6100    this.pageRequests = [];
6101    this.predictedRequests = [];
6102
6103    this.tmpMaterial = new _libs.THREE.MeshBasicMaterial();
6104    visual.addObject(new _libs.THREE.Mesh(new _libs.THREE.PlaneGeometry(0, 0), this.tmpMaterial));
6105
6106    this.loadingAnimation = true;
6107    this.loading = {};
6108    this.loading[p.cover.color] = this.createLoadingTexture(p.cover);
6109    if (p.page.color !== p.cover.color) {
6110      this.loading[p.page.color] = this.createLoadingTexture(p.page);
6111    }
6112
6113    this.turnOnEvents();
6114
6115    visual.addRenderCallback(this.update.bind(this));
6116
6117    setTimeout(this.updateRenderQueue.bind(this), 250);
6118  }
6119
6120  PageManager.prototype.createLoadingTexture = function createLoadingTexture(p) {
6121    var spriteTiles = 6,
6122        scale = Math.sqrt(4.5 * 210 * 4.5 * 297 / (p.widthTexels * p.heightTexels)),
6123        animation = new _LoadingAnimation2.default(scale * p.widthTexels, scale * p.heightTexels, p.color),
6124        animator = new _TextureAnimator2.default(animation.createSprite(spriteTiles), spriteTiles, 1, spriteTiles, 0.2);
6125    animation.dispose();
6126    return animator;
6127  };
6128
6129  PageManager.prototype.dispose = function dispose() {
6130    this.turnOffEvents();
6131    for (var _iterator = Object.keys(this.loading), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
6132      var _ref;
6133
6134      if (_isArray) {
6135        if (_i >= _iterator.length) break;
6136        _ref = _iterator[_i++];
6137      } else {
6138        _i = _iterator.next();
6139        if (_i.done) break;
6140        _ref = _i.value;
6141      }
6142
6143      var color = _ref;
6144
6145      this.loading[color].dispose();
6146    }
6147    delete this.loading;
6148    this.resourcesCache.dispose();
6149    this.pageCache.dispose();
6150    this.canvas.height = this.canvas.width = 0;
6151    delete this.canvas;
6152  };
6153
6154  PageManager.prototype.isCover = function isCover(n) {
6155    return n < 2 || n >= 2 * (this.p.sheets + 1);
6156  };
6157
6158  PageManager.prototype.isMobile = function isMobile() {
6159    return (this.visual.wnd.devicePixelRatio || 1) > 1;
6160  };
6161
6162  PageManager.prototype.getPageState = function getPageState(n) {
6163    var object = this.pageCache.get(n);
6164    return object ? object.state : undefined;
6165  };
6166
6167  PageManager.prototype.enableLoadingAnimation = function enableLoadingAnimation(enable) {
6168    this.loadingAnimation = enable;
6169    for (var _iterator2 = this.loadings, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
6170      var _ref2;
6171
6172      if (_isArray2) {
6173        if (_i2 >= _iterator2.length) break;
6174        _ref2 = _iterator2[_i2++];
6175      } else {
6176        _i2 = _iterator2.next();
6177        if (_i2.done) break;
6178        _ref2 = _i2.value;
6179      }
6180
6181      var o = _ref2;
6182
6183      this.setupMaterial(o);
6184    }
6185  };
6186
6187  PageManager.prototype.update = function update(dt) {
6188    if (this.loadingAnimation) {
6189      var loading = {};
6190      for (var _iterator3 = this.loadings, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
6191        var _ref3;
6192
6193        if (_isArray3) {
6194          if (_i3 >= _iterator3.length) break;
6195          _ref3 = _iterator3[_i3++];
6196        } else {
6197          _i3 = _iterator3.next();
6198          if (_i3.done) break;
6199          _ref3 = _i3.value;
6200        }
6201
6202        var o = _ref3;
6203
6204        if (o.isActive()) {
6205          loading[o.color] = true;;
6206        }
6207      }
6208      for (var _iterator4 = Object.keys(loading), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
6209        var _ref4;
6210
6211        if (_isArray4) {
6212          if (_i4 >= _iterator4.length) break;
6213          _ref4 = _iterator4[_i4++];
6214        } else {
6215          _i4 = _iterator4.next();
6216          if (_i4.done) break;
6217          _ref4 = _i4.value;
6218        }
6219
6220        var color = _ref4;
6221
6222        this.loading[color].update(dt);
6223      }
6224    }
6225  };
6226
6227  PageManager.prototype.removeFromLoadings = function removeFromLoadings(o) {
6228    var i = this.loadings.indexOf(o);
6229    if (~i) {
6230      this.loadings.splice(i, 1);
6231    }
6232  };
6233
6234  PageManager.prototype.removeFromRenderQueue = function removeFromRenderQueue(o) {
6235    var i = this.renderQueue.indexOf(o);
6236    if (~i) {
6237      this.renderQueue.splice(i, 1);
6238    }
6239  };
6240
6241  PageManager.prototype.refreshPageQuery = function refreshPageQuery(n) {
6242    var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
6243
6244    this.pageQuery = query;
6245    var object = this.pageCache.get(n);
6246    if (object && object.wrapper && object.wrapper.setQuery) {
6247      if (!this.pageCache.remove(n)) {
6248        object.wrapper.setQuery(query);
6249        this.pushInRenderQueue(object);
6250      }
6251    }
6252  };
6253
6254  PageManager.prototype.refreshZoom = function refreshZoom() {
6255    var _this = this;
6256
6257    if (this.p.autoResolution.enable) {
6258      var es = [];
6259      this.pageCache.forEach(function (e) {
6260        es.push(e);
6261      });
6262      es.forEach(function (e) {
6263        var object = e[1];
6264        if (object && object.wrapper) {
6265          if (!_this.pageCache.remove(e[0])) {
6266            _this.pushInRenderQueue(object);
6267          }
6268        }
6269      });
6270    }
6271  };
6272
6273  PageManager.prototype.getLayers = function getLayers(n, clb) {
6274    var _this2 = this;
6275
6276    if (this.p.cssLayersLoader) {
6277      this.p.cssLayersLoader(n, function () {
6278        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
6279          args[_key] = arguments[_key];
6280        }
6281
6282        var object = _this2.pageCache.get(n);
6283        if (object) {
6284          if (object.state !== 'active') {
6285            object.pendings.push({ clb: clb, args: args });
6286          } else {
6287            clb.apply(undefined, args);
6288          }
6289        }
6290      });
6291    } else {
6292      clb([]);
6293    }
6294  };
6295
6296  PageManager.prototype.resolvePendings = function resolvePendings(pendings) {
6297    for (var _iterator5 = pendings, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
6298      var _ref5;
6299
6300      if (_isArray5) {
6301        if (_i5 >= _iterator5.length) break;
6302        _ref5 = _iterator5[_i5++];
6303      } else {
6304        _i5 = _iterator5.next();
6305        if (_i5.done) break;
6306        _ref5 = _i5.value;
6307      }
6308
6309      var p = _ref5;
6310
6311      try {
6312        p.clb.apply(p, p.args);
6313      } catch (e) {
6314        console.error(e);
6315      }
6316    }
6317    pendings.splice(0, pendings.length);
6318  };
6319
6320  PageManager.prototype.rtlPageN = function rtlPageN(n) {
6321    return this.p.rtl ? 2 * (this.p.sheets + 2) - 1 - n : n;
6322  };
6323
6324  PageManager.prototype.load = function load(material, n) {
6325    var _this3 = this;
6326
6327    var pi = this.p.pageCallback(this.rtlPageN(n)),
6328        p = this.isCover(n) ? this.p.cover : this.p.page;
6329    var o = {
6330      n: n,
6331      texture: new _libs.THREE.Texture(),
6332      wrapper: null,
6333      state: 'loading',
6334      locked: function locked(n) {
6335        return o.state === 'loading' || o.state === 'rendering' || _this3.book.isActivePage(n);
6336      },
6337      color: p.color,
6338      isActive: function isActive() {
6339        return _this3.book.isActivePage(n);
6340      },
6341      isTop: function isTop() {
6342        return ~_this3.book.getTopPages().indexOf(n);
6343      },
6344      dispose: function dispose() {
6345        _this3.removeFromLoadings(o);
6346        _this3.removeFromRenderQueue(o);
6347        if (o.wrapper && o.wrapper.dispose) {
6348          o.wrapper.dispose();
6349        }
6350        o.texture.dispose();
6351        delete o.texture;
6352        delete o.wrapper;
6353      },
6354      pendings: []
6355    };
6356    o.texture.minFilter = _libs.THREE.LinearFilter;
6357    this.loadings.push(o);
6358    this.setMaterial(o, material);
6359
6360    Promise.resolve().then(function () {
6361      if (o.texture) {
6362        o.widthTexels = pi.widthTexels || p.widthTexels;
6363        o.heightTexels = pi.heightTexels || p.heightTexels;
6364        var res = _this3.calcResolution(o);
6365        o.wrapper = _this3.imageFactory.build(pi, pi.number === undefined ? _this3.rtlPageN(n) : pi.number, res.width, res.height, p.color, _this3.p.injector);
6366        if (o.wrapper.setQuery) {
6367          o.wrapper.setQuery(_this3.pageQuery);
6368        }
6369        o.simulate = pi.interactive ? (o.wrapper.simulate || function () {
6370          return undefined;
6371        }).bind(o.wrapper) : undefined;
6372        o.wrapper.onLoad = function () {
6373          _this3.pushInRenderQueue(o);
6374          _this3.book.dispatchEvent({
6375            type: 'loadedPage',
6376            page: n
6377          });
6378        };
6379        o.wrapper.onChange = function (image) {
6380          if (o.texture) {
6381            _this3.removeFromLoadings(o);
6382            if (o.material) {
6383              o.material.map = o.texture;
6384              o.material.color = new _libs.THREE.Color(0xFFFFFF);
6385              o.material.needsUpdate = true;
6386            }
6387            o.texture.image = image;
6388            o.texture.needsUpdate = true;
6389            o.texture.onUpdate = function () {
6390              if (o.state !== 'queuedForRender') {
6391                o.state = 'active';
6392                _this3.resolvePendings(o.pendings);
6393              }
6394              delete _this3.rendering;
6395              //this.updateRenderQueue();
6396            };
6397            _this3.tmpMaterial.map = o.texture;
6398            _this3.tmpMaterial.needsUpdate = true;
6399          }
6400        };
6401      }
6402    });
6403    this.book.dispatchEvent({
6404      type: 'loadPage',
6405      page: n
6406    });
6407    return this.pageCache.put(n, o);
6408  };
6409
6410  PageManager.prototype.isSinglePage = function isSinglePage(o) {
6411    return this.p.singlePage || !o.n || o.n === this.book.getPages() - 1;
6412  };
6413
6414  PageManager.prototype.calcResolution = function calcResolution(o) {
6415    var res = void 0;
6416    if (this.p.autoResolution.enable) {
6417      var k = Math.min((this.isSinglePage(o) ? 1 : 0.5) * this.visual.width() / o.widthTexels, this.visual.height() / o.heightTexels);
6418      res = {
6419        width: this.p.autoResolution.k * this.p.zoom * k * o.widthTexels,
6420        height: this.p.autoResolution.k * this.p.zoom * k * o.heightTexels
6421      };
6422    } else {
6423      res = {
6424        width: o.widthTexels,
6425        height: o.heightTexels
6426      };
6427    }
6428    return res;
6429  };
6430
6431  PageManager.prototype.pushInRenderQueue = function pushInRenderQueue(o) {
6432    if (o.state !== 'queuedForRender') {
6433      o.state = 'queuedForRender';
6434      this.renderQueue.push(o);
6435      // this.updateRenderQueue();
6436    }
6437  };
6438
6439  PageManager.prototype.updateRenderQueue = function updateRenderQueue() {
6440    if (this.canvas) {
6441      var p = this.p;
6442      if (!this.rendering && (p.renderWhileFlipping || !this.book.isProcessing())) {
6443        var active = void 0,
6444            top = void 0;
6445        for (var _iterator6 = this.renderQueue, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
6446          var _ref6;
6447
6448          if (_isArray6) {
6449            if (_i6 >= _iterator6.length) break;
6450            _ref6 = _iterator6[_i6++];
6451          } else {
6452            _i6 = _iterator6.next();
6453            if (_i6.done) break;
6454            _ref6 = _i6.value;
6455          }
6456
6457          var o = _ref6;
6458
6459          if (!active && o.isActive()) {
6460            active = o;
6461          }
6462          if (o.isTop()) {
6463            top = o;
6464            break;
6465          }
6466        }
6467        this.rendering = top || active;
6468        if (this.isMobile() && p.renderInactivePagesOnMobile || !this.isMobile() && p.renderInactivePages) {
6469          this.rendering = this.rendering || this.renderQueue[0];
6470        }
6471        if (this.rendering) {
6472          if (this.rendering.wrapper.startRender) {
6473            this.removeFromRenderQueue(this.rendering);
6474            this.rendering.state = 'rendering';
6475            this.rendering.wrapper.setResolution(this.calcResolution(this.rendering));
6476            this.rendering.wrapper.startRender();
6477          } else {
6478            delete this.rendering;
6479          }
6480        }
6481      }
6482      setTimeout(this.updateRenderQueue.bind(this), 250);
6483    }
6484  };
6485
6486  PageManager.prototype.turnOnEvents = function turnOnEvents() {
6487    this.transferEvents = true;
6488  };
6489
6490  PageManager.prototype.turnOffEvents = function turnOffEvents() {
6491    var mouseup = _libs.$.Event('mouseup'),
6492        mouseout = _libs.$.Event('mouseout');
6493    this.pageCache.forEach(function (ent) {
6494      var object = ent[1];
6495      if (object.simulate) {
6496        object.simulate(mouseup, undefined, 0, 0);
6497        object.simulate(mouseout, undefined, 0, 0);
6498      }
6499    });
6500    this.transferEvents = false;
6501  };
6502
6503  PageManager.prototype.transferEventToTexture = function transferEventToTexture(n, e, data) {
6504    if (this.transferEvents) {
6505      var toObject = this.getOrLoadTextureObject(undefined, n);
6506      if (toObject.wrapper) {
6507        var uv = data.uv,
6508            toDoc = toObject.wrapper.getSimulatedDoc();
6509        this.pageCache.forEach(function (ent) {
6510          var object = ent[1];
6511          if (object.simulate) {
6512            object.simulate(e, toDoc, uv.x, uv.y);
6513          }
6514        });
6515      }
6516    }
6517  };
6518
6519  PageManager.prototype.loadPredictedPages = function loadPredictedPages() {
6520    this.predictedRequests = _BaseMathUtils2.default.predict(this.pageRequests, this.p.preloadPages);
6521    for (var _iterator7 = this.predictedRequests, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {
6522      var _ref7;
6523
6524      if (_isArray7) {
6525        if (_i7 >= _iterator7.length) break;
6526        _ref7 = _iterator7[_i7++];
6527      } else {
6528        _i7 = _iterator7.next();
6529        if (_i7.done) break;
6530        _ref7 = _i7.value;
6531      }
6532
6533      var p = _ref7;
6534
6535      if (p < this.book.getPages() && !this.pageCache.get(p)) {
6536        this.load(undefined, p);
6537      }
6538    }
6539  };
6540
6541  PageManager.prototype.addPageRequest = function addPageRequest(n) {
6542    this.pageRequests.push(n);
6543    if (this.pageRequests.length > this.p.pagesForPredicting) {
6544      this.pageRequests.shift();
6545    }
6546    Promise.resolve().then(this.loadPredictedPages.bind(this));
6547  };
6548
6549  PageManager.prototype.setMaterial = function setMaterial(o, material) {
6550    this.pageCache.forEach(function (e) {
6551      var ob = e[1];
6552      if (o !== ob && ob.material === material) {
6553        delete ob.material;
6554      }
6555    });
6556    if (material && material !== o.material) {
6557      o.material = material;
6558      this.setupMaterial(o);
6559    }
6560  };
6561
6562  PageManager.prototype.setupMaterial = function setupMaterial(o) {
6563    o.material.map = o.texture.image ? o.texture : this.loadingAnimation ? this.loading[o.color].texture : null;
6564    if (!o.material.map) {
6565      o.material.color = new _libs.THREE.Color(o.color);
6566    }
6567    o.material.needsUpdate = true;
6568  };
6569
6570  PageManager.prototype.getOrLoadTextureObject = function getOrLoadTextureObject(material, n) {
6571    var object = this.pageCache.get(n);
6572    if (!object) {
6573      object = this.load(material, n);
6574      this.addPageRequest(n);
6575    } else {
6576      this.setMaterial(object, material);
6577    }
6578
6579    return object;
6580  };
6581
6582  PageManager.prototype.setTexture = function setTexture(material, n) {
6583    if (~this.predictedRequests.indexOf(n)) {
6584      this.addPageRequest(n);
6585    }
6586    this.getOrLoadTextureObject(material, n);
6587  };
6588
6589  return PageManager;
6590}();
6591
6592exports.default = PageManager;
6593
6594/***/ }),
6595/* 34 */
6596/***/ (function(module, exports, __webpack_require__) {
6597
6598"use strict";
6599
6600
6601exports.__esModule = true;
6602
6603var _BookPropsBuilder2 = __webpack_require__(9);
6604
6605var _BookPropsBuilder3 = _interopRequireDefault(_BookPropsBuilder2);
6606
6607var _Pdf = __webpack_require__(18);
6608
6609var _Pdf2 = _interopRequireDefault(_Pdf);
6610
6611function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6612
6613function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6614
6615function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
6616
6617function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
6617onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
6618
6619var PdfBookPropsBuilder = function (_BookPropsBuilder) {
6620  _inherits(PdfBookPropsBuilder, _BookPropsBuilder);
6621
6622  function PdfBookPropsBuilder(src, onReady) {
6623    _classCallCheck(this, PdfBookPropsBuilder);
6624
6625    var _this = _possibleConstructorReturn(this, _BookPropsBuilder.call(this, onReady));
6626
6627    _this.pdf = new _Pdf2.default(src);
6628    _this.pageDescription = {
6629      type: 'pdf',
6630      src: _this.pdf,
6631      interactive: true
6632    };
6633    _this.binds = {
6634      pageCallback: _this.pageCallback.bind(_this)
6635    };
6636    _this.pdf.getHandler(_this.init.bind(_this));
6637    return _this;
6638  }
6639
6640  PdfBookPropsBuilder.prototype.dispose = function dispose() {
6641    this.pdf.dispose();
6642    _BookPropsBuilder.prototype.dispose.call(this);
6643  };
6644
6645  PdfBookPropsBuilder.prototype.init = function init(handler) {
6646    var _this2 = this;
6647
6648    var pages = this.pdf.getPagesNum();
6649    this.calcSheets(pages);
6650    if (pages > 0) {
6651      handler.getPage(1).then(function (page) {
6652        var viewport = page.getViewport(1),
6653            size = { width: viewport.width, height: viewport.height };
6654        _this2.calcProps(size.width, size.height);
6655        _this2.ready();
6656      }).catch(function (e) {
6657        console.error(e);
6658      });
6659    } else {
6660      this.props = this.defaults;
6661      this.ready();
6662    }
6663  };
6664
6665  PdfBookPropsBuilder.prototype.pageCallback = function pageCallback(n) {
6666    return this.pageDescription;
6667  };
6668
6669  return PdfBookPropsBuilder;
6670}(_BookPropsBuilder3.default);
6671
6672exports.default = PdfBookPropsBuilder;
6673
6674/***/ }),
6675/* 35 */
6676/***/ (function(module, exports, __webpack_require__) {
6677
6678"use strict";
6679
6680
6681exports.__esModule = true;
6682
6683var _libs = __webpack_require__(1);
6684
6685function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6686
6687var PdfLinksHandler = function () {
6688  function PdfLinksHandler(pdf, ctrl, element) {
6689    _classCallCheck(this, PdfLinksHandler);
6690
6691    this.pdf = pdf;
6692    this.ctrl = ctrl;
6693    this.element = (0, _libs.$)(element);
6694    this.cursors = [];
6695  }
6696
6697  PdfLinksHandler.prototype.dispose = function dispose() {};
6698
6699  PdfLinksHandler.prototype.setHandler = function setHandler(handler) {
6700    this.handler = handler;
6701  };
6702
6703  PdfLinksHandler.prototype.defaultHandler = function defaultHandler(type, destination) {
6704    if (type === 'internal') {
6705      this.ctrl.goToPage(destination);
6706    } else if (type === 'external') {
6707      window.open(destination, '_blank');
6708    }
6709  };
6710
6711  PdfLinksHandler.prototype.callHandlers = function callHandlers(type, destination) {
6712    if (!this.handler || !this.handler(type, destination)) {
6713      this.defaultHandler(type, destination);
6714    }
6715  };
6716
6717  PdfLinksHandler.prototype.handleEvent = function handleEvent(data) {
6718    var _this = this;
6719
6720    var e = data.event,
6721        anno = data.annotation;
6722    switch (e.type) {
6723      case 'mouseover':
6724        {
6725          this.cursors.push(this.element.css('cursor'));
6726          this.element.css('cursor', 'pointer');
6727          break;
6728        }
6729      case 'mouseout':
6730        {
6731          this.element.css('cursor', this.cursors.pop() || '');
6732          break;
6733        }
6734      case 'touchtap':
6735      case 'click':
6736        {
6737          if (anno.url) {
6738            this.callHandlers('external', anno.url);
6739          } else if (anno.dest) {
6740            var destPromise = void 0;
6741            if (typeof anno.dest === 'string') {
6742              destPromise = this.pdf.handler.getDestination(anno.dest);
6743            } else {
6744              destPromise = Promise.resolve(anno.dest);
6745            }
6746            destPromise.then(function (dest) {
6747              return typeof dest[0] === 'number' ? dest[0] : _this.pdf.handler.getPageIndex(dest[0]);
6748            }).then(function (number) {
6749              return _this.callHandlers('internal', number);
6750            }).catch(function () {
6751              return console.error('Bad link');
6752            });
6753          }
6754          break;
6755        }
6756    }
6757  };
6758
6759  return PdfLinksHandler;
6760}();
6761
6762exports.default = PdfLinksHandler;
6763
6764/***/ }),
6765/* 36 */
6766/***/ (function(module, exports, __webpack_require__) {
6767
6768"use strict";
6769
6770
6771exports.__esModule = true;
6772
6773var _Finder = __webpack_require__(17);
6774
6775var _Finder2 = _interopRequireDefault(_Finder);
6776
6777function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6778
6779function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6780
6781var SearchEngine = function () {
6782  function SearchEngine(pageCallback, pages) {
6783    _classCallCheck(this, SearchEngine);
6784
6785    this.pageCallback = pageCallback;
6786    this.pages = pages;
6787    this.results = [];
6788  }
6789
6790  SearchEngine.prototype.setQuery = function setQuery(query) {
6791    this.query = query;
6792    this.update = true;
6793    this.process();
6794  };
6795
6796  SearchEngine.prototype.process = function process() {
6797    var _this = this;
6798
6799    if (this.update) {
6800      var results = this.results;
6801      this.results = [];
6802      if (this.onPageHitsChanged) {
6803        for (var _iterator = results, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
6804          var _ref;
6805
6806          if (_isArray) {
6807            if (_i >= _iterator.length) break;
6808            _ref = _iterator[_i++];
6809          } else {
6810            _i = _iterator.next();
6811            if (_i.done) break;
6812            _ref = _i.value;
6813          }
6814
6815          var res = _ref;
6816
6817          this.onPageHitsChanged(undefined, '');
6818        }
6819      }
6820      this.update = false;
6821      this.page = 0;
6822      this.stamp = Date.now();
6823      if (this.query.length > 1) {
6824        this.process();
6825      }
6826    } else {
6827      if (this.page < this.pages) {
6828        var stamp = this.stamp;
6829        this.find(this.pageCallback(this.page)).then(function (contexts) {
6830          if (stamp === _this.stamp) {
6831            if (contexts.length) {
6832              _this.results.push({
6833                page: _this.page,
6834                contexts: contexts
6835              });
6836            }
6837            if (_this.onPageHitsChanged) {
6838              _this.onPageHitsChanged(_this.page, _this.query);
6839            }
6840            ++_this.page;
6841            _this.process();
6842          }
6843        });
6844      }
6845    }
6846  };
6847
6848  SearchEngine.prototype.find = function find(pi) {
6849    var _this2 = this;
6850
6851    var next = void 0;
6852    if (pi.type === 'pdf') {
6853      next = new Promise(function (resolve) {
6854        pi.src.getHandler(function () {
6855          var n = pi.number === undefined ? _this2.page : pi.number;
6856          if (pi.src.getPageType(n) === 'right') {
6857            resolve([]);
6858          } else {
6859            pi.src.getPage(n).then(function (page) {
6860              page.getTextContent().then(function (textContent) {
6861                resolve(new _Finder2.default(textContent.items.map(function (item) {
6862                  return item.str;
6863                }), _this2.query, { hits: false }).getContexts());
6864              });
6865            }).catch(function () {
6866              return resolve([]);
6867            });
6868          }
6869        });
6870      });
6871    } else {
6872      next = Promise.resolve([]);
6873    }
6874    return next;
6875  };
6876
6877  return SearchEngine;
6878}();
6879
6880exports.default = SearchEngine;
6881
6882/***/ }),
6883/* 37 */
6884/***/ (function(module, exports, __webpack_require__) {
6885
6886"use strict";
6887
6888
6889exports.__esModule = true;
6890
6891var _CSSLayer = __webpack_require__(13);
6892
6893var _CSSLayer2 = _interopRequireDefault(_CSSLayer);
6894
6895function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6896
6897function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6898
6899var SheetCssLayer = function () {
6900  function SheetCssLayer(visual, block, props) {
6901    _classCallCheck(this, SheetCssLayer);
6902
6903    this.visual = visual;
6904    var size = block.getTopSize();
6905    this.layer = new _CSSLayer2.default(size.width, size.height, props);
6906
6907    this.update(block);
6908    this.visual.addCssObject(this.layer);
6909  }
6910
6911  SheetCssLayer.prototype.dispose = function dispose() {
6912    this.layer.dispose();
6913    this.visual.removeCssObject(this.layer);
6914  };
6915
6916  SheetCssLayer.prototype.isHidden = function isHidden() {
6917    return this.layer.isHidden();
6918  };
6919
6920  SheetCssLayer.prototype.hide = function hide() {
6921    return this.layer.hide();
6922  };
6923
6924  SheetCssLayer.prototype.show = function show() {
6925    return this.layer.show();
6926  };
6927
6928  SheetCssLayer.prototype.set = function set(css, html, js) {
6929    this.layer.setData(css, html, js);
6930  };
6931
6932  SheetCssLayer.prototype.update = function update(block) {
6933    this.block = block;
6934    this.block.getTopWorldRotation(this.layer.rotation);
6935    this.block.getTopWorldPosition(this.layer.position);
6936  };
6937
6938  return SheetCssLayer;
6939}();
6940
6941exports.default = SheetCssLayer;
6942
6943/***/ }),
6944/* 38 */
6945/***/ (function(module, exports, __webpack_require__) {
6946
6947"use strict";
6948
6949
6950exports.__esModule = true;
6951
6952var _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; };
6953
6954var _MathUtils = __webpack_require__(3);
6955
6956var _MathUtils2 = _interopRequireDefault(_MathUtils);
6957
6958function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6959
6960function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
6961
6962var SheetPhysics = function () {
6963  SheetPhysics.targetForceClb = function targetForceClb(o, a, v, ch) {
6964    var l = a * this.r;
6965    return 100 * this.m * this.g * (2 / (1 + Math.exp(10 * (l - this.tl))) - 1) - this.m * 40 * v;
6966  };
6967
6968  SheetPhysics.hoverCornerForceClb = function hoverCornerForceClb(o, v, l, ch) {
6969    return 5;
6970  };
6971
6972  SheetPhysics.prototype.getTargetForceClb = function getTargetForceClb(mass, targetAngle) {
6973    return SheetPhysics.targetForceClb.bind({
6974      g: this.p.gravity,
6975      m: mass,
6976      tl: targetAngle * this.p.r,
6977      r: this.p.r
6978    });
6979  };
6980
6981  SheetPhysics.dragForceClb = function dragForceClb(o, a, v, ch) {
6982    return o.flbt * o.m * (10 * o.g * ch - 50 * v / (1 + Math.exp(3.5 * Math.abs(ch))));
6983  };
6984
6985  SheetPhysics.dragCornerForceClb = function dragCornerForceClb(o, a, v, ch) {
6986    return 15 * (2 / (1 + Math.exp(10 * (a - this.ta) * o.r)) - 1);
6987  };
6988
6989  SheetPhysics.getDragCornerForceClb = function getDragCornerForceClb(targetAngle) {
6990    return SheetPhysics.dragCornerForceClb.bind({
6991      ta: targetAngle
6992    });
6993  };
6994
6995  function SheetPhysics() {
6996    var r = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
6997    var gravity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
6998    var cornerDeviation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.15;
6999    var fps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 240;
7000
7001    _classCallCheck(this, SheetPhysics);
7002
7003    this.p = {
7004      r: r,
7005      cornerDeviation: cornerDeviation,
7006      l: Math.PI * r,
7007      startDt: 1 / fps,
7008      gravity: gravity,
7009      margin: 0.002 * r,
7010      infM: 1e4,
7011      attempts: 16,
7012      maxIterations: 100
7013    };
7014    this.os = [];
7015  }
7016
7017  SheetPhysics.prototype.dispose = function dispose() {
7018    this.os = [];
7019  };
7020
7021  SheetPhysics.prototype.getSize = function getSize() {
7022    return this.os.length;
7023  };
7024
7025  SheetPhysics.prototype.addObject = function addObject(mass, angle, velocity, flexibility, cornerHeight, simulateClb, removeClb) {
7026    var forceClb = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : function () {
7027      return 0;
7028    };
7029    var cornerForceClb = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : function () {
7030      return 0;
7031    };
7032
7033    var no = {
7034      id: _MathUtils2.default.getUnique(),
7035      m: mass,
7036      v: velocity,
7037      l: angle * this.p.r,
7038      f: forceClb,
7039      cf: cornerForceClb,
7040      ch: cornerHeight,
7041      flbt: flexibility,
7042      simulateClb: simulateClb,
7043      removeClb: removeClb
7044    };
7045    var i = this.os.findIndex(function (o) {
7046      return no.l <= o.l;
7047    });
7048    i = ~i ? i : this.os.length;
7049    this.os.splice(i, 0, no);
7050    return no.id;
7051  };
7052
7053  SheetPhysics.prototype.getParametrMap = function getParametrMap(name) {
7054    var map = {
7055      mass: 'm',
7056      velocity: 'v',
7057      flexibility: 'flbt',
7058      cornerHeight: 'ch',
7059      simulateClb: 'simulateClb',
7060      removeClb: 'removeClb',
7061      forceClb: 'f',
7062      cornerForceClb: 'cf'
7063    };
7064    return map[name];
7065  };
7066
7067  SheetPhysics.prototype.setParametr = function setParametr(id, name, value) {
7068    var o = this.os.find(function (o) {
7069      return o.id === id;
7070    });
7071    if (name === 'angle') {
7072      o.l = value * this.p.r;
7073    } else {
7074      o[this.getParametrMap(name)] = value;
7075    }
7076  };
7077
7078  SheetPhysics.prototype.getParametr = function getParametr(id, name) {
7079    var o = this.os.find(function (o) {
7080      return o.id === id;
7081    });
7082    var value = void 0;
7083    if (name === 'angle') {
7084      value = o.l / this.p.r;
7085    } else {
7086      value = o[this.getParametrMap(name)];
7087    }
7088    return value;
7089  };
7090
7091  SheetPhysics.prototype.simulate = function simulate(T) {
7092    var t = 0,
7093        dt = this.p.startDt,
7094        attempt = 0,
7095        it = 0;
7096
7097    while (t < T && it < this.p.maxIterations) {
7098      if (dt > T - t) {
7099        dt = T - t;
7100      }
7101      var nos = this.integrate(this.os, dt),
7102          ci = this.findCollisions(nos);
7103      if (ci.num > 1 && attempt < this.p.attempts) {
7104        dt /= 2;
7105        ++attempt;
7106      } else {
7107        if (ci.num === 1) {
7108          var scos = this.solveCollision(nos[ci.last - 1], nos[ci.last]);
7109          nos[ci.last - 1] = scos[0];
7110          nos[ci.last] = scos[1];
7111        } else if (ci.num > 1) {
7112          var gs = [];
7113          var last = -2;
7114          for (var _iterator = ci.all, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
7115            var _ref;
7116
7117            if (_isArray) {
7118              if (_i >= _iterator.length) break;
7119              _ref = _iterator[_i++];
7120            } else {
7121              _i = _iterator.next();
7122              if (_i.done) break;
7123              _ref = _i.value;
7124            }
7125
7126            var i = _ref;
7127
7128            if (i - last > 1) {
7129              gs.push([]);
7130            }
7131            gs[gs.length - 1].push(i);
7132            last = i;
7133          }
7134          for (var _iterator2 = gs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
7135            var _ref2;
7136
7137            if (_isArray2) {
7138              if (_i2 >= _iterator2.length) break;
7139              _ref2 = _iterator2[_i2++];
7140            } else {
7141              _i2 = _iterator2.next();
7142              if (_i2.done) break;
7143              _ref2 = _i2.value;
7144            }
7145
7146            var g = _ref2;
7147
7148            var sg = void 0,
7149                i0 = void 0;
7150            if (nos[g[0]].l > Math.PI / 2 * this.p.r) {
7151              sg = -1;
7152              i0 = g[g.length - 1];
7153            } else {
7154              sg = 1;
7155              i0 = g[0];
7156            }
7157            for (var _i3 = i0; _i3 < nos.length && _i3 > -1; _i3 += sg) {
7158              var o = nos[_i3 + sg];
7159              if (o && sg * (o.l - nos[_i3].l) <= this.p.margin) {
7160                o.l = nos[_i3].l + sg * 2 * this.p.margin;
7161                if (o.l > this.p.l || o.l < 0) {
7162                  o.l = o.l > this.p.l ? this.p.l : 0;
7163                  o.ch = 0;
7164                  o.v = 0;
7165                  console.error('Bad collision');
7166                }
7167              } else {
7168                break;
7169              }
7170            }
7171          }
7172        }
7173        this.os = nos;
7174        this.findAndSolveCornerCollisions();
7175        t += dt;
7176        dt = this.p.startDt;
7177        attempt = 0;
7178      }
7179      ++it;
7180    }
7181
7182    this.removeStatics();
7183  };
7184
7185  SheetPhysics.prototype.removeStatics = function removeStatics() {
7186    var nos = [],
7187        notify = [[], []];
7188    for (var _iterator3 = this.os, _isArray3 = Array.isArray(_iterator3), _i4 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
7189      var _ref3;
7190
7191      if (_isArray3) {
7192        if (_i4 >= _iterator3.length) break;
7193        _ref3 = _iterator3[_i4++];
7194      } else {
7195        _i4 = _iterator3.next();
7196        if (_i4.done) break;
7197        _ref3 = _i4.value;
7198      }
7199
7200      var o = _ref3;
7201
7202      if (o.simulateClb) {
7203        o.simulateClb(o.l / this.p.r, o.ch);
7204      }
7205      if ((o.l === this.p.l || o.l === 0) && o.v === 0) {
7206        if (o.removeClb !== undefined) {
7207          notify[(o.l !== this.p.l) + 0].push(o);
7208        }
7209      } else {
7210        nos.push(o);
7211      }
7212    }
7213    this.os = nos;
7214    for (var _iterator4 = notify[0].reverse(), _isArray4 = Array.isArray(_iterator4), _i5 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
7215      var _ref4;
7216
7217      if (_isArray4) {
7218        if (_i5 >= _iterator4.length) break;
7219        _ref4 = _iterator4[_i5++];
7220      } else {
7221        _i5 = _iterator4.next();
7222        if (_i5.done) break;
7223        _ref4 = _i5.value;
7224      }
7225
7226      var _o = _ref4;
7227
7228      _o.removeClb(Math.PI, _o.ch);
7229    }
7230    for (var _iterator5 = notify[1], _isArray5 = Array.isArray(_iterator5), _i6 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
7231      var _ref5;
7232
7233      if (_isArray5) {
7234        if (_i6 >= _iterator5.length) break;
7235        _ref5 = _iterator5[_i6++];
7236      } else {
7237        _i6 = _iterator5.next();
7238        if (_i6.done) break;
7239        _ref5 = _i6.value;
7240      }
7241
7242      var _o2 = _ref5;
7243
7244      _o2.removeClb(0, _o2.ch);
7245    }
7246  };
7247
7248  SheetPhysics.prototype.findAndSolveCornerCollisions = function findAndSolveCornerCollisions() {
7249    if (this.os.length) {
7250      var os = [_extends({}, this.os[0], {
7251        l: 0,
7252        m: this.p.infM,
7253        ch: 0
7254      })].concat(this.os, [_extends({}, this.os[0], {
7255        l: 1.05 * this.p.l,
7256        m: this.p.infM,
7257        ch: 0
7258      })]);
7259
7260      for (var i = 1; i < os.length; ++i) {
7261        var a = os[i - 1],
7262            b = os[i],
7263            al = a.l + this.p.cornerDeviation * a.ch * this.p.r,
7264            bl = b.l + this.p.cornerDeviation * b.ch * this.p.r;
7265        if (1.05 * al > bl && a.ch > b.ch) {
7266          var dCh = a.ch - b.ch,
7267              dv = a.m / a.flbt + b.m / b.flbt,
7268              ka = a.m / a.flbt / dv,
7269              kb = b.m / b.flbt / dv;
7270          a.ch = a.ch - kb * dCh;
7271          b.ch = b.ch + ka * dCh;
7272        }
7273      }
7274    }
7275  };
7276
7277  SheetPhysics.prototype.solveCollision = function solveCollision(a, b) {
7278    var mm = b.m + a.m,
7279        av = (-a.v * b.m + a.m * a.v + 2 * b.m * b.v) / mm,
7280        bv = (b.m * b.v - b.v * a.m + 2 * a.m * a.v) / mm;
7281    return [_extends({}, a, { v: av }), _extends({}, b, { v: bv })];
7282  };
7283
7284  SheetPhysics.prototype.findCollisions = function findCollisions(os) {
7285    var ci = {
7286      num: 0,
7287      last: 0,
7288      all: []
7289    };
7290    for (var i = 1; i < os.length && ci.num < 2; ++i) {
7291      if (os[i - 1].l > os[i].l || this.isCollision(os[i - 1], os[i])) {
7292        if (os[i - 1].l > os[i].l) {
7293          ++ci.num;
7294        }
7295        ++ci.num;
7296        ci.last = i;
7297        if (ci.all.indexOf(i - 1) === -1) {
7298          ci.all.push(i - 1);
7299        }
7300        if (ci.all.indexOf(i) === -1) {
7301          ci.all.push(i);
7302        }
7303      }
7304    }
7305    return ci;
7306  };
7307
7308  SheetPhysics.prototype.isCollision = function isCollision(a, b) {
7309    return Math.abs(a.l - b.l) < this.p.margin && a.v > b.v;
7310  };
7311
7312  SheetPhysics.prototype.integrate = function integrate(os, dt) {
7313    var nos = [];
7314    for (var _iterator6 = os, _isArray6 = Array.isArray(_iterator6), _i7 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
7315      var _ref6;
7316
7317      if (_isArray6) {
7318        if (_i7 >= _iterator6.length) break;
7319        _ref6 = _iterator6[_i7++];
7320      } else {
7321        _i7 = _iterator6.next();
7322        if (_i7.done) break;
7323        _ref6 = _i7.value;
7324      }
7325
7326      var o = _ref6;
7327
7328      var vl = _MathUtils2.default.rk4(this.dy.bind({
7329        g: this.p.gravity,
7330        r: this.p.r,
7331        m: o.m,
7332        f: o.f,
7333        cf: o.cf,
7334        ch: o.ch,
7335        flbt: o.flbt
7336      }), 0, dt, [o.v, o.l, o.ch]);
7337      var no = _extends({}, o, {
7338        v: vl[0],
7339        l: vl[1],
7340        ch: vl[2]
7341      });
7342      if (no.l <= 0 || no.l >= this.p.l) {
7343        no.l = no.l <= 0 ? 0 : this.p.l;
7344        no.v = 0;
7345        no.ch = 0;
7346      }
7347      nos.push(no);
7348    }
7349    return nos;
7350  };
7351
7352  SheetPhysics.prototype.dy = function dy(t, y) {
7353    var v = y[0],
7354        l = y[1],
7355        ch = y[2],
7356        f = this.f(this, l / this.r, v, ch),
7357        cf = this.cf(this, l / this.r, v, ch);
7358    return [(-this.g * Math.cos(l / this.r) * this.m + f) / this.m, v + 0.01 * (Math.random() - 0.5), this.flbt * ((2 / (1 + Math.exp(-0.2 * cf)) - 1) * (1 - 2 / (1 + Math.exp(-5 * (Math.abs(ch) - 2)))) - ch)];
7359  };
7360
7361  return SheetPhysics;
7362}();
7363
7364exports.default = SheetPhysics;
7365
7366/***/ }),
7367/* 39 */
7368/***/ (function(module, exports, __webpack_require__) {
7369
7370"use strict";
7371
7372
7373exports.__esModule = true;
7374
7375function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
7376
7377var SoundsEnviroment = function () {
7378  function SoundsEnviroment() {
7379    var template = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7380
7381    _classCallCheck(this, SoundsEnviroment);
7382
7383    this.sounds = template.sounds || {};
7384    this.audio = {};
7385    if (this.sounds.startFlip) {
7386      this.audio.startFlip = new Audio(this.sounds.startFlip);
7387    }
7388    if (this.sounds.endFlip) {
7389      this.audio.endFlip = new Audio(this.sounds.endFlip);
7390    }
7391  }
7392
7393  SoundsEnviroment.prototype.setEnabled = function setEnabled(enabled) {
7394    this.enabled = enabled;
7395  };
7396
7397  SoundsEnviroment.prototype.togle = function togle() {
7398    this.enabled = !this.enabled;
7399  };
7400
7401  SoundsEnviroment.prototype.dispose = function dispose() {
7402    delete this.audio.startFlip;
7403    delete this.audio.endFlip;
7404  };
7405
7406  SoundsEnviroment.prototype.startFlip = function startFlip() {
7407    if (this.enabled && this.audio.startFlip) {
7408      this.audio.startFlip.play();
7409    }
7410  };
7411
7412  SoundsEnviroment.prototype.endFlip = function endFlip() {
7413    if (this.enabled && this.audio.startFlip) {
7414      this.audio.startFlip.pause();
7415      this.audio.startFlip.currentTime = 0;
7416    }
7417    if (this.enabled && this.audio.endFlip) {
7418      this.audio.endFlip.play();
7419    }
7420  };
7421
7422  SoundsEnviroment.prototype.subscribeFlips = function subscribeFlips(emitter) {
7423    emitter.addEventListener('startFlip', this.startFlip.bind(this));
7424    emitter.addEventListener('endFlip', this.endFlip.bind(this));
7425  };
7426
7427  return SoundsEnviroment;
7428}();
7429
7430exports.default = SoundsEnviroment;
7431
7432/***/ }),
7433/* 40 */
7434/***/ (function(module, exports, __webpack_require__) {
7435
7436"use strict";
7437
7438
7439exports.__esModule = true;
7440
7441var _WidgetController2 = __webpack_require__(67);
7442
7443var _WidgetController3 = _interopRequireDefault(_WidgetController2);
7444
7445function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7446
7447function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
7448
7449function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
7450
7451function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
7452
7453var TocController = function (_WidgetController) {
7454  _inherits(TocController, _WidgetController);
7455
7456  function TocController(view, bookCtrl) {
7457    _classCallCheck(this, TocController);
7458
7459    var _this = _possibleConstructorReturn(this, _WidgetController.call(this, view));
7460
7461    _this.bookCtrl = bookCtrl;
7462    _this.tab = 'none';
7463    return _this;
7464  }
7465
7466  TocController.prototype.setThumbnails = function setThumbnails(thumbnails) {
7467    this.thumbnails = thumbnails;
7468    thumbnails.onNavigate = this.navigateThumbnails.bind(this);
7469    if (this.tab === 'none') {
7470      this.tab = 'thumbnails';
7471    }
7472    this.fireChange();
7473  };
7474
7475  TocController.prototype.setSearch = function setSearch(search) {
7476    this.search = search;
7477    search.onNavigate = this.navigateSearch.bind(this);
7478    this.fireChange();
7479  };
7480
7481  TocController.prototype.setBookmarks = function setBookmarks(bookmarks, pdf) {
7482    this.bookmarks = bookmarks;
7483    this.pdf = pdf;
7484    bookmarks.onNavigate = this.navigateBookmarks.bind(this);
7485    if (bookmarks.getSize()) {
7486      this.tab = 'bookmarks';
7487      this.isBookmarks = true;
7488    }
7489    this.fireChange();
7490  };
7491
7492  TocController.prototype.cmdBookmarks = function cmdBookmarks() {
7493    this.tab = 'bookmarks';
7494    this.fireChange();
7495  };
7496
7497  TocController.prototype.cmdThumbnails = function cmdThumbnails() {
7498    this.tab = 'thumbnails';
7499    this.fireChange();
7500  };
7501
7502  TocController.prototype.cmdSearch = function cmdSearch() {
7503    this.tab = 'search';
7504    this.fireChange();
7505  };
7506
7507  TocController.prototype.cmdCloseToc = function cmdCloseToc() {
7508    this.hide();
7509  };
7510
7511  TocController.prototype.navigateThumbnails = function navigateThumbnails(number) {
7512    this.bookCtrl.goToPage(number);
7513  };
7514
7515  TocController.prototype.navigateSearch = function navigateSearch(number) {
7516    this.bookCtrl.goToPage(number);
7517  };
7518
7519  TocController.prototype.navigateBookmarks = function navigateBookmarks(item) {
7520    var _this2 = this;
7521
7522    if (item.url) {
7523      window.open(item.url, '_blank');
7524    } else if (item.dest) {
7525      var destPromise = void 0;
7526      if (typeof item.dest === 'string') {
7527        destPromise = this.pdf.handler.getDestination(item.dest);
7528      } else {
7529        destPromise = Promise.resolve(item.dest);
7530      }
7531      destPromise.then(function (dest) {
7532        return _this2.pdf.handler.getPageIndex(dest[0]);
7533      }).then(function (number) {
7534        return _this2.bookCtrl.goToPage(number);
7535      }).catch(function () {
7536        return console.error('Bad bookmark');
7537      });
7538    }
7539  };
7540
7541  TocController.prototype.updateView = function updateView() {
7542    var _this3 = this;
7543
7544    if (this.view) {
7545      this.view.setState('widTocMenu', {
7546        enable: true,
7547        visible: true,
7548        active: false
7549      });
7550      this.view.setState('widThumbnails', {
7551        enable: true,
7552        visible: this.tab === 'thumbnails',
7553        active: false
7554      });
7555      this.view.setState('widSearch', {
7556        enable: true,
7557        visible: this.tab === 'search',
7558        active: false
7559      });
7560      this.view.setState('widBookmarks', {
7561        enable: true,
7562        visible: this.tab === 'bookmarks',
7563        active: false
7564      });
7565      this.view.setState('cmdBookmarks', {
7566        enable: true,
7567        visible: true,
7568        active: this.tab === 'bookmarks'
7569      });
7570      this.view.setState('cmdCloseToc', {
7571        enable: true,
7572        visible: true,
7573        active: false
7574      });
7575      this.view.setState('cmdThumbnails', {
7576        enable: true,
7577        visible: true,
7578        active: this.tab === 'thumbnails'
7579      });
7580      this.view.setState('cmdSearch', {
7581        enable: true,
7582        visible: true,
7583        active: this.tab === 'search'
7584      });
7585      Promise.resolve().then(function () {
7586        return _this3.thumbnails.setEnable(_this3.visible && _this3.tab === 'thumbnails');
7587      });
7588      _WidgetController.prototype.updateView.call(this);
7589    }
7590  };
7591
7592  return TocController;
7593}(_WidgetController3.default);
7594
7595exports.default = TocController;
7596
7597/***/ }),
7598/* 41 */
7599/***/ (function(module, exports, __webpack_require__) {
7600
7601"use strict";
7602
7603
7604exports.__esModule = true;
7605
7606var _libs = __webpack_require__(1);
7607
7608var _ThreeUtils = __webpack_require__(20);
7609
7610var _ThreeUtils2 = _interopRequireDefault(_ThreeUtils);
7611
7612function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7613
7614var resX = 11,
7615    resY = 2,
7616    resZ = 15,
7617    scale = 1,
7618    faces = [];
7619
7620var frontGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resX - 1, resY - 1);
7621frontGeometry.translate(0.5 * scale, 0.5 * scale, scale);
7622var backGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resX - 1, resY - 1);
7623backGeometry.rotateY(Math.PI);
7624backGeometry.translate(0.5 * scale, 0.5 * scale, 0);
7625var leftGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resZ - 1, resY - 1);
7626leftGeometry.rotateY(-Math.PI / 2);
7627leftGeometry.translate(0, 0.5 * scale, 0.5 * scale);
7628var rightGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resZ - 1, resY - 1);
7629rightGeometry.rotateY(Math.PI / 2);
7630rightGeometry.translate(scale, 0.5 * scale, 0.5 * scale);
7631var topGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resX - 1, resZ - 1);
7632topGeometry.rotateX(-Math.PI / 2);
7633topGeometry.translate(0.5 * scale, scale, 0.5 * scale);
7634var bottomGeometry = topGeometry.clone();
7635bottomGeometry.translate(0, -scale, 0);
7636for (var _iterator = bottomGeometry.faces, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
7637  var _ref;
7638
7639  if (_isArray) {
7640    if (_i >= _iterator.length) break;
7641    _ref = _iterator[_i++];
7642  } else {
7643    _i = _iterator.next();
7644    if (_i.done) break;
7645    _ref = _i.value;
7646  }
7647
7648  var f = _ref;
7649  var _ref3 = [f.b, f.a];
7650  f.a = _ref3[0];
7651  f.b = _ref3[1];
7652}
7653
7654var geometry = new _libs.THREE.Geometry();
7655geometry.vertices = [].concat(bottomGeometry.vertices, topGeometry.vertices);
7656
7657var addFaces = function addFaces(fs, map) {
7658  for (var _iterator2 = fs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
7659    var _ref2;
7660
7661    if (_isArray2) {
7662      if (_i2 >= _iterator2.length) break;
7663      _ref2 = _iterator2[_i2++];
7664    } else {
7665      _i2 = _iterator2.next();
7666      if (_i2.done) break;
7667      _ref2 = _i2.value;
7668    }
7669
7670    var f = _ref2;
7671
7672    geometry.faces.push(new _libs.THREE.Face3(map(f.a), map(f.b), map(f.c)));
7673  }
7674  faces.push(geometry.faces.length);
7675};
7676
7677var mapVertices = function mapVertices(src, dst) {
7678  var map = [];
7679  var eq = function eq(a, b) {
7680    return Math.abs(a.x - b.x) + Math.abs(a.y - b.y) + Math.abs(a.z - b.z) < 1e-4;
7681  };
7682  for (var i = 0; i < src.length; ++i) {
7683    for (var j = 0; j < dst.length; ++j) {
7684      if (eq(src[i], dst[j])) {
7685        map[i] = j;
7686        break;
7687      }
7688    }
7689  }
7690  return map;
7691};
7692
7693var frontMap = mapVertices(frontGeometry.vertices, geometry.vertices);
7694var backMap = mapVertices(backGeometry.vertices, geometry.vertices);
7695var leftMap = mapVertices(leftGeometry.vertices, geometry.vertices);
7696var rightMap = mapVertices(rightGeometry.vertices, geometry.vertices);
7697
7698addFaces(topGeometry.faces, function (i) {
7699  return i + bottomGeometry.vertices.length;
7700});
7701addFaces(bottomGeometry.faces, function (i) {
7702  return i;
7703});
7704addFaces(frontGeometry.faces, function (i) {
7705  return frontMap[i];
7706});
7707addFaces(backGeometry.faces, function (i) {
7708  return backMap[i];
7709});
7710addFaces(leftGeometry.faces, function (i) {
7711  return leftMap[i];
7712});
7713addFaces(rightGeometry.faces, function (i) {
7714  return rightMap[i];
7715});
7716faces.pop();
7717
7718_ThreeUtils2.default.computeFaceVertexUvs(geometry, faces);
7719
7720geometry.computeVertexNormals();
7721//geometry.computeFaceNormals();
7722geometry.computeBoundingSphere();
7723//geometry.computeBoundingBox();
7724geometry.verticesNeedUpdate = true;
7725
7726exports.default = {
7727  resX: resX,
7728  resY: resY,
7729  resZ: resZ,
7730  faces: faces,
7731  geometry: geometry
7732};
7733
7734/***/ }),
7735/* 42 */
7736/***/ (function(module, exports, __webpack_require__) {
7737
7738"use strict";
7739
7740
7741exports.__esModule = true;
7742exports.props = props;
7743var mouseButtons = {
7744  Left: 0,
7745  Middle: 1,
7746  Right: 2
7747};
7748
7749function props() {
7750  return {
7751    eps: 1e-4,
7752    skin: {
7753      default: 'short-white-book-view'
7754    },
7755    scale: {
7756      default: 0.9,
7757      min: 0.9,
7758      max: 2.5,
7759      levels: 7
7760    },
7761    lighting: {
7762      default: 0.7,
7763      min: 0,
7764      max: 1,
7765      levels: 7
7766    },
7767    pan: {
7768      speed: 50
7769    },
7770    loadingAnimation: {
7771      skin: false,
7772      book: true
7773    },
7774    autoResolution: {
7775      enabled: true,
7776      coefficient: 1.5
7777    },
7778    narrowView: {
7779      width: 500
7780    },
7781    actions: {
7782      cmdZoomIn: {
7783        enabled: true,
7784        enabledInNarrow: true
7785      },
7786      cmdZoomOut: {
7787        enabled: true,
7788        enabledInNarrow: true
7789      },
7790      cmdDefaultZoom: {
7791        enabled: true,
7792        enabledInNarrow: false,
7793        type: 'dblclick',
7794        code: 0
7795      },
7796      cmdToc: {
7797        enabled: true,
7798        enabledInNarrow: true
7799      },
7800      cmdFastBackward: {
7801        enabled: false,
7802        enabledInNarrow: false
7803      },
7804      cmdBackward: {
7805        enabled: true,
7806        enabledInNarrow: false
7807      },
7808      cmdBigBackward: {
7809        enabled: true,
7810        enabledInNarrow: true
7811      },
7812      cmdForward: {
7813        enabled: true,
7814        enabledInNarrow: false
7815      },
7816      cmdBigForward: {
7817        enabled: true,
7818        enabledInNarrow: true
7819      },
7820      cmdFastForward: {
7821        enabled: false,
7822        enabledInNarrow: false
7823      },
7824      cmdSave: {
7825        enabled: true,
7826        enabledInNarrow: true
7827      },
7828      cmdPrint: {
7829        enabled: true,
7830        enabledInNarrow: false
7831      },
7832      cmdFullScreen: {
7833        enabled: true,
7834        enabledInNarrow: true
7835      },
7836      widSettings: {
7837        enabled: true,
7838        enabledInNarrow: true
7839      },
7840      cmdSmartPan: {
7841        enabled: true,
7842        enabledInNarrow: true,
7843        active: true
7844      },
7845      cmdSinglePage: {
7846        enabled: true,
7847        enabledInNarrow: true,
7848        active: false,
7849        activeForMobile: false
7850      },
7851      cmdSounds: {
7852        enabled: true,
7853        enabledInNarrow: true,
7854        active: true
7855      },
7856      cmdStats: {
7857        enabled: true,
7858        enabledInNarrow: true,
7859        active: false
7860      },
7861      cmdLightingUp: {
7862        enabled: true,
7863        enabledInNarrow: true
7864      },
7865      cmdLightingDown: {
7866        enabled: true,
7867        enabledInNarrow: true
7868      },
7869      cmdPanLeft: {
7870        enabled: false
7871      },
7872      cmdPanRight: {
7873        enabled: false
7874      },
7875      cmdPanUp: {
7876        enabled: false
7877      },
7878      cmdPanDown: {
7879        enabled: false
7880      },
7881      mouseCmdRotate: {
7882        enabled: true,
7883        type: 'mousedrag',
7884        code: mouseButtons.Right
7885      },
7886      mouseCmdDragZoom: {
7887        enabled: true,
7888        type: 'mousedrag',
7889        code: mouseButtons.Middle
7890      },
7891      mouseCmdPan: {
7892        enabled: true,
7893        type: 'mousedrag',
7894        code: mouseButtons.Left
7895      },
7896      mouseCmdWheelZoom: {
7897        enabled: true,
7898        type: 'mousewheel',
7899        code: 0
7900      },
7901      touchCmdRotate: {
7902        enabled: true,
7903        type: 'touchdrag',
7904        code: 3
7905      },
7906      touchCmdZoom: {
7907        enabled: true,
7908        type: 'touchdrag',
7909        code: 2
7910      },
7911      touchCmdPan: {
7912        enabled: true,
7913        type: 'touchdrag',
7914        code: 1
7915      },
7916      touchCmdSwipe: {
7917        enabled: true,
7918        type: 'touchdrag',
7919        code: 1
7920      }
7921    }
7922  };
7923};
7924
7925/***/ }),
7926/* 43 */
7927/***/ (function(module, exports, __webpack_require__) {
7928
7929"use strict";
7930
7931
7932exports.__esModule = true;
7933
7934var _libs = __webpack_require__(0);
7935
7936var _ImageBase2 = __webpack_require__(5);
7937
7938var _ImageBase3 = _interopRequireDefault(_ImageBase2);
7939
7940function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7941
7942function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
7943
7944function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
7945
7946function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
7947
7948var BlankImage = function (_ImageBase) {
7949  _inherits(BlankImage, _ImageBase);
7950
7951  function BlankImage(context, width, height, color) {
7952    _classCallCheck(this, BlankImage);
7953
7954    var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));
7955
7956    Promise.resolve().then(function () {
7957      _this.startRender = function () {
7958        _this.renderBlankPage();
7959        _this.finishRender();
7960      };
7961      _this.finishLoad();
7962    });
7963    return _this;
7964  }
7965
7966  return BlankImage;
7967}(_ImageBase3.default);
7968
7969exports.default = BlankImage;
7970
7971/***/ }),
7972/* 44 */
7973/***/ (function(module, exports, __webpack_require__) {
7974
7975"use strict";
7976
7977
7978exports.__esModule = true;
7979
7980var _libs = __webpack_require__(0);
7981
7982function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
7983
7984var Bookmarks = function () {
7985  function Bookmarks(container, items) {
7986    var _this = this;
7987
7988    var getTitle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (i) {
7989      return i.title;
7990    };
7991    var getItems = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function (i) {
7992      return i.items;
7993    };
7994
7995    _classCallCheck(this, Bookmarks);
7996
7997    this.container = container;
7998    this.map = [];
7999    this.getTitle = getTitle;
8000    this.getItems = getItems;
8001    this.nodes = this.mapNodes(items, this.map);
8002
8003    this.binds = {
8004      togle: function togle(e) {
8005        e.preventDefault();
8006        var li = (0, _libs.$)(e.target);
8007        while (li[0] && li[0] !== container[0] && !li.hasClass('item')) {
8008          li = (0, _libs.$)(li[0].parentNode);
8009        }
8010        if (li.hasClass('item')) {
8011          var cmd = (0, _libs.$)(e.target);
8012          while (cmd[0] && cmd[0] !== li[0] && !cmd.hasClass('cmd')) {
8013            cmd = (0, _libs.$)(cmd[0].parentNode);
8014          }
8015          if (cmd.hasClass('cmd')) {
8016            var node = _this.map[li.attr('data-id')];
8017            if (cmd.hasClass('togle')) {
8018              node.minimized = !node.minimized;
8019              if (node.minimized) {
8020                li.find('ul').remove();
8021                li.find('.togle').addClass('minimized');
8022              } else {
8023                li.find('.togle').removeClass('minimized');
8024                li.append((_this.renderNode(node).match(/<ul.*<\/ul>/) || [''])[0]);
8025              }
8026            } else {
8027              if (_this.onNavigate) {
8028                _this.onNavigate(node.item);
8029              }
8030            }
8031          }
8032        }
8033      }
8034    };
8035
8036    container.on('click', this.binds.togle);
8037    this.update();
8038  }
8039
8040  Bookmarks.prototype.getSize = function getSize() {
8041    return this.map.length;
8042  };
8043
8044  Bookmarks.prototype.dispose = function dispose() {
8045    this.container.off('click', this.binds.togle);
8046    this.container.html('');
8047  };
8048
8049  Bookmarks.prototype.update = function update() {
8050    this.container.html(this.renderNodes(this.nodes));
8051  };
8052
8053  Bookmarks.prototype.forEach = function forEach(f) {
8054    var nodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.nodes;
8055
8056    for (var _iterator = nodes || [], _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
8057      var _ref;
8058
8059      if (_isArray) {
8060        if (_i >= _iterator.length) break;
8061        _ref = _iterator[_i++];
8062      } else {
8063        _i = _iterator.next();
8064        if (_i.done) break;
8065        _ref = _i.value;
8066      }
8067
8068      var node = _ref;
8069
8070      f(node);
8071      this.forEach(f, node.children);
8072    }
8073  };
8074
8075  Bookmarks.prototype.expand = function expand() {
8076    this.forEach(function (n) {
8077      return n.minimized = false;
8078    });
8079    this.update();
8080  };
8081
8082  Bookmarks.prototype.minimize = function minimize() {
8083    this.forEach(function (n) {
8084      return n.minimized = true;
8085    });
8086    this.update();
8087  };
8088
8089  Bookmarks.prototype.renderNode = function renderNode(node) {
8090    return ['<div class="area">', node.children ? '<a href="#" class="cmd togle' + (node.minimized ? ' minimized' : '') + '"><i class="fa fa-angle-right"></i></a> ' : '<i class="white-space"></i> ', '<a class="cmd" title="', node.title, '" href="#">', node.title, '</a></div>', node.minimized ? '' : this.renderNodes(node.children)].join('');
8091  };
8092
8093  Bookmarks.prototype.renderNodes = function renderNodes(nodes) {
8094    var res = ['<div class="bookmarks">'];
8095    if (nodes && nodes.length) {
8096      res.push('<ul class="level-', nodes[0].level, '">');
8097      for (var _iterator2 = nodes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
8098        var _ref2;
8099
8100        if (_isArray2) {
8101          if (_i2 >= _iterator2.length) break;
8102          _ref2 = _iterator2[_i2++];
8103        } else {
8104          _i2 = _iterator2.next();
8105          if (_i2.done) break;
8106          _ref2 = _i2.value;
8107        }
8108
8109        var node = _ref2;
8110
8111        res.push(['<li class="item" data-id="', node.id, '">', this.renderNode(node), '</li>'].join(''));
8112      }
8113      res.push('</ul>');
8114    }
8115    res.push('</div>');
8116    return res.join('');
8117  };
8118
8119  Bookmarks.prototype.mapNodes = function mapNodes(items) {
8120    var map = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
8121    var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
8122
8123    var nodes = null;
8124    if (items && items.length) {
8125      nodes = [];
8126      for (var _iterator3 = items, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
8127        var _ref3;
8128
8129        if (_isArray3) {
8130          if (_i3 >= _iterator3.length) break;
8131          _ref3 = _iterator3[_i3++];
8132        } else {
8133          _i3 = _iterator3.next();
8134          if (_i3.done) break;
8135          _ref3 = _i3.value;
8136        }
8137
8138        var item = _ref3;
8139
8140        var id = map.length;
8141        map.push(undefined);
8142        var node = {
8143          id: id,
8144          title: this.getTitle(item),
8145          level: level,
8146          item: item,
8147          minimized: true,
8148          children: this.mapNodes(this.getItems(item), map, level + 1)
8149        };
8150        nodes.push(node);
8151        map[id] = node;
8152      }
8153    }
8154    return nodes;
8155  };
8156
8157  return Bookmarks;
8158}();
8159
8160exports.default = Bookmarks;
8161
8162/***/ }),
8163/* 45 */
8164/***/ (function(module, exports, __webpack_require__) {
8165
8166"use strict";
8167
8168
8169exports.__esModule = true;
8170
8171var _libs = __webpack_require__(0);
8172
8173function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8174
8175var Detector = function () {
8176	function Detector() {
8177		_classCallCheck(this, Detector);
8178	}
8179
8180	Detector.getWebGLErrorMessage = function getWebGLErrorMessage() {
8181		var element = document.createElement('div');
8182		element.id = 'webgl-error-message';
8183		element.style.fontFamily = 'monospace';
8184		element.style.fontSize = '13px';
8185		element.style.fontWeight = 'normal';
8186		element.style.textAlign = 'center';
8187		element.style.background = '#fff';
8188		element.style.color = '#000';
8189		element.style.padding = '1.5em';
8190		element.style.width = '400px';
8191		element.style.margin = '5em auto 0';
8192
8193		if (!Detector.webgl) {
8194			element.innerHTML = window.WebGLRenderingContext ? ['Your graphics card does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#000">WebGL</a>.<br />', 'Find out how to get it <a href="http://get.webgl.org/" style="color:#000">here</a>.'].join('\n') : ['Your browser does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#000">WebGL</a>.<br/>', 'Find out how to get it <a href="http://get.webgl.org/" style="color:#000">here</a>.'].join('\n');
8195		}
8196		return element;
8197	};
8198
8199	Detector.addGetWebGLMessage = function addGetWebGLMessage(parameters) {
8200		var parent = void 0,
8201		    id = void 0,
8202		    element = void 0;
8203		parameters = parameters || {};
8204
8205		parent = parameters.parent || (0, _libs.$)(document.body);
8206		id = parameters.id || 'oldie';
8207
8208		element = Detector.getWebGLErrorMessage();
8209		//element.id = id;
8210
8211		parent.append(element);
8212	};
8213
8214	return Detector;
8215}();
8216
8217Detector.canvas = !!window.CanvasRenderingContext2D;
8218
8219Detector.webgl = function () {
8220	try {
8221		var canvas = document.createElement('canvas');
8222		return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));
8223	} catch (e) {
8224		return false;
8225	}
8226}();
8227
8228Detector.workers = !!window.Worker;
8229Detector.fileapi = window.File && window.FileReader && window.FileList && window.Blob;
8230exports.default = Detector;
8231
8232/***/ }),
8233/* 46 */
8234/***/ (function(module, exports, __webpack_require__) {
8235
8236"use strict";
8237
8238
8239exports.__esModule = true;
8240
8241var _libs = __webpack_require__(0);
8242
8243function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8244
8245var DocMouseSimulator = function () {
8246  function DocMouseSimulator(jFrame, element) {
8247    var bElement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document.body;
8248
8249    _classCallCheck(this, DocMouseSimulator);
8250
8251    this.jFrame = jFrame;
8252    this.wnd = jFrame[0].contentWindow;
8253    this.doc = jFrame[0].contentDocument;
8254    this.element = element || doc.body;
8255    this.bElement = bElement;
8256    this.resendProperties = this.getDefaultResendProperties();
8257    this.undefinedProperties = this.getDefaultUndefinedProperties();
8258    this.cursors = [];
8259    this.onDocChangeClbs = [];
8260    var terms = [{
8261      find: ':hover',
8262      replace: '.' + DocMouseSimulator.HOVER
8263    }, {
8264      find: ':active',
8265      replace: '.' + DocMouseSimulator.ACTIVE
8266    }];
8267    var style = ['<style type="text/css">'];
8268    for (var i = 0; i < this.doc.styleSheets.length; ++i) {
8269      var ss = this.doc.styleSheets[i];
8270      for (var j = 0; j < ss.cssRules.length; ++j) {
8271        var r = ss.cssRules[j],
8272            cssText = void 0;
8273        for (var _iterator = terms, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
8274          var _ref;
8275
8276          if (_isArray) {
8277            if (_i >= _iterator.length) break;
8278            _ref = _iterator[_i++];
8279          } else {
8280            _i = _iterator.next();
8281            if (_i.done) break;
8282            _ref = _i.value;
8283          }
8284
8285          var term = _ref;
8286
8287          if (~r.selectorText.indexOf(term.find)) {
8288            cssText = (cssText || r.cssText).replace(new RegExp(term.find, 'g'), term.replace);
8289          }
8290        }
8291        if (cssText) {
8292          style.push(cssText);
8293        }
8294      }
8295    }
8296    style.push('</style>');
8297    (0, _libs.$)(this.doc.head).append((0, _libs.$)(style.join('')));
8298  }
8299
8300  DocMouseSimulator.prototype.convertCoords = function convertCoords(x, y) {
8301    var jElement = (0, _libs.$)(this.element);
8302    var offset = jElement.offset();
8303    return {
8304      x: offset.left + jElement.width() * x,
8305      y: offset.top + jElement.height() * (1 - y)
8306    };
8307  };
8308
8309  DocMouseSimulator.prototype.triggerEvent = function triggerEvent(element, e, p, type, advancedProps) {
8310    var props = {};
8311    for (var _iterator2 = this.resendProperties, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
8312      var _ref2;
8313
8314      if (_isArray2) {
8315        if (_i2 >= _iterator2.length) break;
8316        _ref2 = _iterator2[_i2++];
8317      } else {
8318        _i2 = _iterator2.next();
8319        if (_i2.done) break;
8320        _ref2 = _i2.value;
8321      }
8322
8323      var _n = _ref2;
8324
8325      props[_n] = e[_n];
8326    }
8327    for (var _iterator3 = this.undefinedProperties, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
8328      var _ref3;
8329
8330      if (_isArray3) {
8331        if (_i3 >= _iterator3.length) break;
8332        _ref3 = _iterator3[_i3++];
8333      } else {
8334        _i3 = _iterator3.next();
8335        if (_i3.done) break;
8336        _ref3 = _i3.value;
8337      }
8338
8339      var _n2 = _ref3;
8340
8341      props[_n2] = undefined;
8342    }
8343    for (var n in advancedProps) {
8344      if (advancedProps.hasOwnProperty(n)) {
8345        props[n] = advancedProps[n];
8346      }
8347    }
8348    props.view = this.wnd;
8349    props.pageX = p.x;
8350    props.pageY = p.y;
8351    var jE = _libs.$.Event(type, props);
8352    jE.timeStamp = e.timeStamp;
8353    (0, _libs.$)(element).trigger(jE);
8354  };
8355
8356  DocMouseSimulator.prototype.addClass = function addClass(element, name) {
8357    (0, _libs.$)(element).addClass(name);
8358    var style = this.wnd.getComputedStyle(element);
8359    this.cursors.push((0, _libs.$)(this.bElement).css('cursor'));
8360    (0, _libs.$)(this.bElement).css('cursor', style.getPropertyValue('cursor'));
8361  };
8362
8363  DocMouseSimulator.prototype.removeClass = function removeClass(element, name) {
8364    (0, _libs.$)(element).removeClass(name);
8365    (0, _libs.$)(this.bElement).css('cursor', this.cursors.pop());
8366  };
8367
8368  DocMouseSimulator.prototype.enterElement = function enterElement(element) {
8369    this.addClass(element, DocMouseSimulator.HOVER);
8370  };
8371
8372  DocMouseSimulator.prototype.leaveElement = function leaveElement(element) {
8373    this.removeClass(element, DocMouseSimulator.HOVER);
8374  };
8375
8376  DocMouseSimulator.prototype.activateElement = function activateElement(element) {
8377    this.addClass(element, DocMouseSimulator.ACTIVE);
8378  };
8379
8380  DocMouseSimulator.prototype.deactivateElement = function deactivateElement(element) {
8381    this.removeClass(element, DocMouseSimulator.ACTIVE);
8382  };
8383
8384  DocMouseSimulator.prototype.addDocChangeClb = function addDocChangeClb(clb) {
8385    this.onDocChangeClbs.push(clb);
8386  };
8387
8388  DocMouseSimulator.prototype.notify = function notify() {
8389    for (var _iterator4 = this.onDocChangeClbs, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
8390      var _ref4;
8391
8392      if (_isArray4) {
8393        if (_i4 >= _iterator4.length) break;
8394        _ref4 = _iterator4[_i4++];
8395      } else {
8396        _i4 = _iterator4.next();
8397        if (_i4.done) break;
8398        _ref4 = _i4.value;
8399      }
8400
8401      var clb = _ref4;
8402
8403      clb(this.wnd, this.doc);
8404    }
8405  };
8406
8407  DocMouseSimulator.prototype.elementFromPoint = function elementFromPoint(p) {
8408    var node = this.doc.body,
8409        next = true;
8410    while (next) {
8411      next = false;
8412      for (var i = 0; i < node.childNodes.length; ++i) {
8413        var child = node.childNodes[i];
8414        if (child instanceof this.wnd.Element) {
8415          var jC = (0, _libs.$)(child),
8416              offset = jC.offset(),
8417              height = jC.height(),
8418              width = jC.width();
8419          if (p.x > offset.left && p.x < offset.left + width && p.y > offset.top && p.y < offset.top + height) {
8420            node = child;
8421            next = true;
8422            break;
8423          }
8424        }
8425      }
8426    }
8427    return node;
8428  };
8429
8430  DocMouseSimulator.prototype.getElement = function getElement(p) {
8431    var off0 = this.jFrame.offset();
8432    this.jFrame.offset({ left: 0.5 * window.innerWidth - p.x, top: 0.5 * window.innerHeight - p.y });
8433    var element = this.doc.elementFromPoint(p.x, p.y);
8434    if (!element) {
8435      // it isn't a joke it's IE
8436      element = this.doc.elementFromPoint(p.x, p.y);
8437    }
8438    this.jFrame.offset(off0);
8439    return element ? element : this.elementFromPoint(p);
8440  };
8441
8442  DocMouseSimulator.prototype.simulate = function simulate(e, doc, x, y) {
8443    var p = this.convertCoords(x, y),
8444        element = doc === this.doc ? this.getElement(p) : undefined;
8445    var trigger = element !== undefined,
8446        notify = false;
8447
8448    switch (e.type) {
8449      case 'mousedown':
8450        {
8451          if (this.capElement) {
8452            this.deactivateElement(this.capElement);
8453            notify = true;
8454          }
8455          this.capElement = element;
8456          if (this.capElement) {
8457            this.activateElement(this.capElement);
8458            notify = true;
8459          }
8460          break;
8461        }
8462      case 'mouseup':
8463        {
8464          if (this.capElement) {
8465            this.deactivateElement(this.capElement);
8466            notify = true;
8467          }
8468          this.timeStamp = e.timeStamp;
8469          break;
8470        }
8471      case 'click':
8472        {
8473          trigger = element && this.capElement === element; // && e.timeStamp === this.timeStamp;
8474          this.capElement = undefined;
8475          break;
8476        }
8477      case 'mouseenter':
8478      case 'mouseover':
8479      case 'mousemove':
8480        {
8481          var leaved = null;
8482          if (this.hovElement !== element && this.hovElement) {
8483            this.triggerEvent(this.hovElement, e, p, 'mouseout', { relatedTarget: element ? element : null });
8484            this.leaveElement(this.hovElement);
8485            leaved = this.hovElement;
8486            this.hovElement = undefined;
8487            notify = true;
8488          }
8489          if (!this.hovElement && element) {
8490            this.triggerEvent(element, e, p, 'mouseover', { relatedTarget: leaved });
8491            this.enterElement(element);
8492            this.hovElement = element;
8493            notify = true;
8494          }
8495          trigger = element && e.type === 'mousemove';
8496          break;
8497        }
8498      case 'mouseleave':
8499      case 'mouseout':
8500        {
8501          if (this.hovElement) {
8502            this.triggerEvent(this.hovElement, e, p, 'mouseout', { relatedTarget: e.relatedTarget });
8503            this.leaveElement(this.hovElement);
8504            this.hovElement = undefined;
8505            notify = true;
8506          }
8507          trigger = false;
8508          break;
8509        }
8510    }
8511    if (trigger) {
8512      this.triggerEvent(element, e, p, e.type);
8513    }
8514    if (notify) {
8515      this.notify();
8516    }
8517  };
8518
8519  DocMouseSimulator.prototype.getDefaultUndefinedProperties = function getDefaultUndefinedProperties() {
8520    return ['clientX', 'clientY', 'offsetX', 'offsetY', 'screenX', 'screenY'];
8521  };
8522
8523  DocMouseSimulator.prototype.getDefaultResendProperties = function getDefaultResendProperties() {
8524    return ['altKey', 'bubbles', 'button', 'buttons', 'cancelable', 'changedTouches', 'char', 'charCode', 'ctrlKey', 'data', 'detail', 'eventPhase', 'isDefaultPrevented', 'key', 'keyCode', 'metaKey', 'pointerId', 'pointerType', 'shiftKey', 'targetTouches', 'touches', 'which'];
8525  };
8526
8527  return DocMouseSimulator;
8528}();
8529
8530/*
8531altKey,
8532bubbles,
8533button,
8534buttons,
8535cancelable,
8536changedTouches,
8537char,
8538charCode,
8539clientX,
8540clientY,
8541ctrlKey,
8542currentTarget,
8543data,
8544delegateTarget,
8545detail,
8546eventPhase,
8547handleObj,
8548isDefaultPrevented,
8549key,
8550keyCode,
8551metaKey,
8552offsetX,
8553offsetY,
8554originalEvent,
8555pageX,
8556pageY,
8557pointerId,
8558pointerType,
8559relatedTarget,
8560screenX,
8561screenY,
8562shiftKey,
8563target,
8564targetTouches,
8565timeStamp,
8566toElement,
8567touches,
8568type,
8569view,
8570which
8571*/
8572
8573
8574DocMouseSimulator.HOVER = 'SIMULATED-HOVER';
8575DocMouseSimulator.ACTIVE = 'SIMULATED-ACTIVE';
8576exports.default = DocMouseSimulator;
8577
8578/***/ }),
8579/* 47 */
8580/***/ (function(module, exports, __webpack_require__) {
8581
8582"use strict";
8583
8584
8585exports.__esModule = true;
8586
8587function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8588
8589var Dom2Image = function Dom2Image(wnd, doc, cache) {
8590    _classCallCheck(this, Dom2Image);
8591
8592    var self = this;
8593    this.window = wnd;
8594    this.document = doc;
8595    this.cache = cache;
8596
8597    var util = newUtil();
8598    var inliner = newInliner();
8599    var fontFaces = newFontFaces();
8600    var images = newImages();
8601
8602    this.toSvg = toSvg;
8603    this.toPng = toPng;
8604    this.toJpeg = toJpeg;
8605    this.toBlob = toBlob;
8606    this.toPixelData = toPixelData;
8607    this.impl = {
8608        fontFaces: fontFaces,
8609        images: images,
8610        util: util,
8611        inliner: inliner
8612    };
8613
8614    /**
8615     * @param {Node} node - The DOM Node object to render
8616     * @param {Object} options - Rendering options
8617     * @param {Function} options.filter - Should return true if passed node should be included in the output
8618     *          (excluding node means excluding it's children as well). Not called on the root node.
8619     * @param {String} options.bgcolor - color for the background, any valid CSS color value.
8620     * @param {Number} options.width - width to be applied to node before rendering.
8621     * @param {Number} options.height - height to be applied to node before rendering.
8622     * @param {Object} options.style - an object whose properties to be copied to node's style before rendering.
8623     * @param {Number} options.quality - a Number between 0 and 1 indicating image quality (applicable to JPEG only),
8624                defaults to 1.0.
8625     * @return {Promise} - A promise that is fulfilled with a SVG image data URL
8626     * */
8627
8628    function toSvg(node, options) {
8629        options = options || {};
8630        return Promise.resolve(node).then(function (node) {
8631            return cloneNode(node, options.filter, true);
8632        }).then(embedFonts).then(inlineImages).then(applyOptions).then(function (clone) {
8633            return makeSvgDataUri(clone, options.width || util.width(node), options.height || util.height(node));
8634        });
8635
8636        function applyOptions(clone) {
8637            if (options.bgcolor) clone.style.backgroundColor = options.bgcolor;
8638
8639            if (options.width) clone.style.width = options.width + 'px';
8640            if (options.height) clone.style.height = options.height + 'px';
8641
8642            if (options.style) self.window.Object.keys(options.style).forEach(function (property) {
8643                clone.style[property] = options.style[property];
8644            });
8645
8646            return clone;
8647        }
8648    }
8649
8650    /**
8651     * @param {Node} node - The DOM Node object to render
8652     * @param {Object} options - Rendering options, @see {@link toSvg}
8653     * @return {Promise} - A promise that is fulfilled with a Uint8Array containing RGBA pixel data.
8654     * */
8655    function toPixelData(node, options) {
8656        return draw(node, options || {}).then(function (canvas) {
8657            return canvas.getContext('2d').getImageData(0, 0, util.width(node), util.height(node)).data;
8658        });
8659    }
8660
8661    /**
8662     * @param {Node} node - The DOM Node object to render
8663     * @param {Object} options - Rendering options, @see {@link toSvg}
8664     * @return {Promise} - A promise that is fulfilled with a PNG image data URL
8665     * */
8666    function toPng(node, options) {
8667        return draw(node, options || {}).then(function (canvas) {
8668            return canvas.toDataURL();
8669        });
8670    }
8671
8672    /**
8673     * @param {Node} node - The DOM Node object to render
8674     * @param {Object} options - Rendering options, @see {@link toSvg}
8675     * @return {Promise} - A promise that is fulfilled with a JPEG image data URL
8676     * */
8677    function toJpeg(node, options) {
8678        options = options || {};
8679        return draw(node, options).then(function (canvas) {
8680            return canvas.toDataURL('image/jpeg', options.quality || 1.0);
8681        });
8682    }
8683
8684    /**
8685     * @param {Node} node - The DOM Node object to render
8686     * @param {Object} options - Rendering options, @see {@link toSvg}
8687     * @return {Promise} - A promise that is fulfilled with a PNG image blob
8688     * */
8689    function toBlob(node, options) {
8690        return draw(node, options || {}).then(util.canvasToBlob);
8691    }
8692
8693    function draw(domNode, options) {
8694        return toSvg(domNode, options).then(util.makeImage).then(util.delay(100)).then(function (image) {
8695            var canvas = newCanvas(domNode);
8696            canvas.getContext('2d').drawImage(image, 0, 0);
8697            return canvas;
8698        });
8699
8700        function newCanvas(domNode) {
8701            var canvas = self.document.createElement('canvas');
8702            canvas.width = options.width || util.width(domNode);
8703            canvas.height = options.height || util.height(domNode);
8704
8705            if (options.bgcolor) {
8706                var ctx = canvas.getContext('2d');
8707                ctx.fillStyle = options.bgcolor;
8708                ctx.fillRect(0, 0, canvas.width, canvas.height);
8709            }
8710
8711            return canvas;
8712        }
8713    }
8714
8715    function cloneNode(node, filter, root) {
8716        if (!root && filter && !filter(node)) return Promise.resolve();
8717
8718        return Promise.resolve(node).then(makeNodeCopy).then(function (clone) {
8719            return cloneChildren(node, clone, filter);
8720        }).then(function (clone) {
8721            return processClone(node, clone);
8722        });
8723
8724        function makeNodeCopy(node) {
8725            if (util.isCanvas(node)) return util.makeImage(node.toDataURL());
8726            return node.cloneNode(false);
8727        }
8728
8729        function cloneChildren(original, clone, filter) {
8730            var children = original.childNodes;
8731            if (children.length === 0) return Promise.resolve(clone);
8732
8733            return cloneChildrenInOrder(clone, util.asArray(children), filter).then(function () {
8734                return clone;
8735            });
8736
8737            function cloneChildrenInOrder(parent, children, filter) {
8738                var done = Promise.resolve();
8739                children.forEach(function (child) {
8740                    done = done.then(function () {
8741                        return cloneNode(child, filter);
8742                    }).then(function (childClone) {
8743                        if (childClone) parent.appendChild(childClone);
8744                    });
8745                });
8746                return done;
8747            }
8748        }
8749
8750        function processClone(original, clone) {
8751            if (!util.isElement(clone)) return clone;
8752
8753            return Promise.resolve().then(cloneStyle).then(clonePseudoElements).then(copyUserInput).then(fixSvg).then(function () {
8754                return clone;
8755            });
8756
8757            function cloneStyle() {
8758                copyStyle(self.window.getComputedStyle(original), clone.style);
8759
8760                function copyStyle(source, target) {
8761                    if (source.cssText) target.cssText = source.cssText;else copyProperties(source, target);
8762
8763                    function copyProperties(source, target) {
8764                        util.asArray(source).forEach(function (name) {
8765                            target.setProperty(name, source.getPropertyValue(name), source.getPropertyPriority(name));
8766                        });
8767                    }
8768                }
8769            }
8770
8771            function clonePseudoElements() {
8772                [':before', ':after'].forEach(function (element) {
8773                    clonePseudoElement(element);
8774                });
8775
8776                function clonePseudoElement(element) {
8777                    var style = self.window.getComputedStyle(original, element);
8778                    var content = style.getPropertyValue('content');
8779
8780                    if (content === '' || content === 'none') return;
8781
8782                    var className = util.uid();
8783                    clone.className = clone.className + ' ' + className;
8784                    var styleElement = self.document.createElement('style');
8785                    styleElement.appendChild(formatPseudoElementStyle(className, element, style));
8786                    clone.appendChild(styleElement);
8787
8788                    function formatPseudoElementStyle(className, element, style) {
8789                        var selector = '.' + className + ':' + element;
8790                        var cssText = style.cssText ? formatCssText(style) : formatCssProperties(style);
8791                        return self.document.createTextNode(selector + '{' + cssText + '}');
8792
8793                        function formatCssText(style) {
8794                            var content = style.getPropertyValue('content');
8795                            return style.cssText + ' content: ' + content + ';';
8796                        }
8797
8798                        function formatCssProperties(style) {
8799
8800                            return util.asArray(style).map(formatProperty).join('; ') + ';';
8801
8802                            function formatProperty(name) {
8803                                return name + ': ' + style.getPropertyValue(name) + (style.getPropertyPriority(name) ? ' !important' : '');
8804                            }
8805                        }
8806                    }
8807                }
8808            }
8809
8810            function copyUserInput() {
8811                if (util.isTextArea(original)) clone.innerHTML = original.value;
8812                if (util.isInput(original)) clone.setAttribute("value", original.value);
8813            }
8814
8815            function fixSvg() {
8816                if (!util.isSVG(clone)) return;
8817                clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
8818
8819                if (!util.isSVGRect(clone)) return;
8820                ['width', 'height'].forEach(function (attribute) {
8821                    var value = clone.getAttribute(attribute);
8822                    if (!value) return;
8823
8824                    clone.style.setProperty(attribute, value);
8825                });
8826            }
8827        }
8828    }
8829
8830    function embedFonts(node) {
8831        return fontFaces.resolveAll().then(function (cssText) {
8832            var styleNode = self.document.createElement('style');
8833            node.appendChild(styleNode);
8834            styleNode.appendChild(self.document.createTextNode(cssText));
8835            return node;
8836        });
8837    }
8838
8839    function inlineImages(node) {
8840        return images.inlineAll(node).then(function () {
8841            return node;
8842        });
8843    }
8844
8845    function makeSvgDataUri(node, width, height) {
8846        return Promise.resolve(node).then(function (node) {
8847            node.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
8848            return new self.window.XMLSerializer().serializeToString(node);
8849        }).then(util.escapeXhtml).then(function (xhtml) {
8850            return ['data:image/svg+xml;charset=utf-8,', '<svg xmlns="http://www.w3.org/2000/svg" width="', width, '" height="', height, '">', '<foreignObject x="0" y="0" width="100%" height="100%">', xhtml, '</foreignObject>', '</svg>'].join('');
8851        });
8852    }
8853
8854    function newUtil() {
8855        return {
8856            escape: escape,
8857            parseExtension: parseExtension,
8858            mimeType: mimeType,
8859            dataAsUrl: dataAsUrl,
8860            isDataUrl: isDataUrl,
8861            canvasToBlob: canvasToBlob,
8862            resolveUrl: resolveUrl,
8863            getAndEncode: getAndEncode,
8864            uid: uid(),
8865            delay: delay,
8866            asArray: asArray,
8867            escapeXhtml: escapeXhtml,
8868            makeImage: makeImage,
8869            width: width,
8870            height: height,
8871
8872            isElement: isElement,
8873            isCanvas: isCanvas,
8874            isTextArea: isTextArea,
8875            isInput: isInput,
8876            isSVG: isSVG,
8877            isSVGRect: isSVGRect,
8878            isImage: isImage
8879        };
8880
8881        function mimes() {
8882            /*
8883             * Only WOFF and EOT mime types for fonts are 'real'
8884             * see http://www.iana.org/assignments/media-types/media-types.xhtml
8885             */
8886            var WOFF = 'application/font-woff';
8887            var JPEG = 'image/jpeg';
8888
8889            return {
8890                'woff': WOFF,
8891                'woff2': WOFF,
8892                'ttf': 'application/font-truetype',
8893                'eot': 'application/vnd.ms-fontobject',
8894                'png': 'image/png',
8895                'jpg': JPEG,
8896                'jpeg': JPEG,
8897                'gif': 'image/gif',
8898                'tiff': 'image/tiff',
8899                'svg': 'image/svg+xml'
8900            };
8901        }
8902
8903        function parseExtension(url) {
8904            var match = /\.([^\.\/]*?)$/g.exec(url);
8905            if (match) return match[1];else return '';
8906        }
8907
8908        function mimeType(url) {
8909            var extension = parseExtension(url).toLowerCase();
8910            return mimes()[extension] || '';
8911        }
8912
8913        function isDataUrl(url) {
8914            return url.search(/^(data:)/) !== -1;
8915        }
8916
8917        function toBlob(canvas) {
8918            return new Promise(function (resolve) {
8919                var binaryString = self.window.atob(canvas.toDataURL().split(',')[1]);
8920                var length = binaryString.length;
8921                var binaryArray = new self.window.Uint8Array(length);
8922
8923                for (var i = 0; i < length; i++) {
8924                    binaryArray[i] = binaryString.charCodeAt(i);
8925                }resolve(new self.window.Blob([binaryArray], {
8926                    type: 'image/png'
8927                }));
8928            });
8929        }
8930
8931        function canvasToBlob(canvas) {
8932            if (canvas.toBlob) return new Promise(function (resolve) {
8933                canvas.toBlob(resolve);
8934            });
8935
8936            return toBlob(canvas);
8937        }
8938
8939        function resolveUrl(url, baseUrl) {
8940            var doc = self.document.implementation.createHTMLDocument();
8941            var base = doc.createElement('base');
8942            doc.head.appendChild(base);
8943            var a = doc.createElement('a');
8944            doc.body.appendChild(a);
8945            base.href = baseUrl;
8946            a.href = url;
8947            return a.href;
8948        }
8949
8950        function uid() {
8951            var index = 0;
8952
8953            return function () {
8954                return 'u' + fourRandomChars() + index++;
8955
8956                function fourRandomChars() {
8957                    /* see http://stackoverflow.com/a/6248722/2519373 */
8958                    return ('0000' + (self.window.Math.random() * self.window.Math.pow(36, 4) << 0).toString(36)).slice(-4);
8959                }
8960            };
8961        }
8962
8963        function makeImage(uri) {
8964            return new Promise(function (resolve, reject) {
8965                var image = new self.window.Image();
8966                image.onload = function () {
8967                    resolve(image);
8968                };
8969                image.onerror = reject;
8970                image.src = uri;
8971            });
8972        }
8973
8974        function getAndEncode(url) {
8975            var data = self.cache.get(url);
8976            if (data) {
8977                if (data.content) {
8978                    return data.content;
8979                } else {
8980                    return new Promise(function (resolve) {
8981                        if (data.content) {
8982                            resolve(data.content);
8983                        } else {
8984                            data.pendings.push(resolve);
8985                        }
8986                    });
8987                }
8988            } else {
8989                data = self.cache.put(url, { pendings: [] });
8990
8991                var TIMEOUT = 30000;
8992
8993                return new Promise(function (resolve) {
8994                    var request = new self.window.XMLHttpRequest();
8995
8996                    request.onreadystatechange = done;
8997                    request.ontimeout = timeout;
8998                    request.responseType = 'blob';
8999                    request.timeout = TIMEOUT;
9000                    request.open('GET', url, true);
9001                    request.send();
9002
9003                    function done() {
9004                        if (request.readyState !== 4) return;
9005
9006                        if (request.status !== 200) {
9007                            fail('cannot fetch resource: ' + url + ', status: ' + request.status);
9008                            return;
9009                        }
9010
9011                        var encoder = new self.window.FileReader();
9012                        encoder.onloadend = function () {
9013                            data.content = encoder.result.split(/,/)[1];
9014                            for (var _iterator = data.pendings, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
9015                                var _ref;
9016
9017                                if (_isArray) {
9018                                    if (_i >= _iterator.length) break;
9019                                    _ref = _iterator[_i++];
9020                                } else {
9021                                    _i = _iterator.next();
9022                                    if (_i.done) break;
9023                                    _ref = _i.value;
9024                                }
9025
9026                                var _resolve = _ref;
9027
9028                                _resolve(data.content);
9029                            }
9030                            data.pendings = [];
9031                            resolve(data.content);
9032                        };
9033                        encoder.readAsDataURL(request.response);
9034                    }
9035
9036                    function timeout() {
9037                        fail('timeout of ' + TIMEOUT + 'ms occured while fetching resource: ' + url);
9038                    }
9039
9040                    function fail(message) {
9041                        console.error(message);
9042                        resolve('');
9043                    }
9044                });
9045            }
9046        }
9047
9048        function dataAsUrl(content, type) {
9049            return ['data:', type, ';base64,', content].join('');
9050        }
9051
9052        function escape(string) {
9053            return string.replace(/([.*+?^${}()|\[\]\/\\])/g, '\\$1');
9054        }
9055
9056        function delay(ms) {
9057            return function (arg) {
9058                return new Promise(function (resolve) {
9059                    setTimeout(function () {
9060                        resolve(arg);
9061                    }, ms);
9062                });
9063            };
9064        }
9065
9066        function asArray(arrayLike) {
9067            var array = [];
9068            var length = arrayLike.length;
9069            for (var i = 0; i < length; i++) {
9070                array.push(arrayLike[i]);
9071            }return array;
9072        }
9073
9074        function escapeXhtml(string) {
9075            return string.replace(/(#|\n)/g, function (c) {
9076                return c === '#' ? '%23' : '%0A';
9077            });
9078        }
9079
9080        function width(node) {
9081            var leftBorder = px(node, 'border-left-width');
9082            var rightBorder = px(node, 'border-right-width');
9083            return node.scrollWidth + leftBorder + rightBorder;
9084        }
9085
9086        function height(node) {
9087            var topBorder = px(node, 'border-top-width');
9088            var bottomBorder = px(node, 'border-bottom-width');
9089            return node.scrollHeight + topBorder + bottomBorder;
9090        }
9091
9092        function px(node, styleProperty) {
9093            var value = self.window.getComputedStyle(node).getPropertyValue(styleProperty);
9094            return parseFloat(value.replace('px', ''));
9095        }
9096
9097        function isElement(node) {
9098            return node instanceof self.window.Element;
9099        }
9100
9101        function isCanvas(node) {
9102            return node instanceof self.window.HTMLCanvasElement;
9103        }
9104
9105        function isTextArea(node) {
9106            return node instanceof self.window.HTMLTextAreaElement;
9107        }
9108
9109        function isInput(node) {
9110            return node instanceof self.window.HTMLInputElement;
9111        }
9112
9113        function isSVG(node) {
9114            return node instanceof self.window.SVGElement;
9115        }
9116
9117        function isSVGRect(node) {
9118            return node instanceof self.window.SVGRectElement;
9119        }
9120
9121        function isImage(node) {
9122            return node instanceof self.window.HTMLImageElement;
9123        }
9124    }
9125
9126    function newInliner() {
9127        var URL_REGEX = /url\(['"]?([^'"]+?)['"]?\)/g;
9128
9129        return {
9130            inlineAll: inlineAll,
9131            shouldProcess: shouldProcess,
9132            impl: {
9133                readUrls: readUrls,
9134                inline: inline
9135            }
9136        };
9137
9138        function shouldProcess(string) {
9139            return string.search(URL_REGEX) !== -1;
9140        }
9141
9142        function readUrls(string) {
9143            var result = [];
9144            var match = void 0;
9145            while ((match = URL_REGEX.exec(string)) !== null) {
9146                result.push(match[1]);
9147            }
9148            return result.filter(function (url) {
9149                return !util.isDataUrl(url);
9150            });
9151        }
9152
9153        function inline(string, url, baseUrl, get) {
9154            return Promise.resolve(url).then(function (url) {
9155                return baseUrl ? util.resolveUrl(url, baseUrl) : url;
9156            }).then(get || util.getAndEncode).then(function (data) {
9157                return util.dataAsUrl(data, util.mimeType(url));
9158            }).then(function (dataUrl) {
9159                return string.replace(urlAsRegex(url), ['$1', dataUrl, '$3'].join(''));
9160            });
9161
9162            function urlAsRegex(url) {
9163                return new self.window.RegExp(['(url\\([\'"]?)(', util.escape(url), ')([\'"]?\\))'].join(''), 'g');
9164            }
9165        }
9166
9167        function inlineAll(string, baseUrl, get) {
9168            if (nothingToInline()) return Promise.resolve(string);
9169
9170            return Promise.resolve(string).then(readUrls).then(function (urls) {
9171                var done = Promise.resolve(string);
9172                urls.forEach(function (url) {
9173                    done = done.then(function (string) {
9174                        return inline(string, url, baseUrl, get);
9175                    });
9176                });
9177                return done;
9178            });
9179
9180            function nothingToInline() {
9181                return !shouldProcess(string);
9182            }
9183        }
9184    }
9185
9186    function newFontFaces() {
9187        return {
9188            resolveAll: resolveAll,
9189            impl: {
9190                readAll: readAll
9191            }
9192        };
9193
9194        function resolveAll() {
9195            return readAll(self.document).then(function (webFonts) {
9196                return Promise.all(webFonts.map(function (webFont) {
9197                    return webFont.resolve();
9198                }));
9199            }).then(function (cssStrings) {
9200                return cssStrings.join('\n');
9201            });
9202        }
9203
9204        function readAll() {
9205            return Promise.resolve(util.asArray(self.document.styleSheets)).then(getCssRules).then(selectWebFontRules).then(function (rules) {
9206                return rules.map(newWebFont);
9207            });
9208
9209            function selectWebFontRules(cssRules) {
9210                return cssRules.filter(function (rule) {
9211                    return rule.type === CSSRule.FONT_FACE_RULE;
9212                }).filter(function (rule) {
9213                    return inliner.shouldProcess(rule.style.getPropertyValue('src'));
9214                });
9215            }
9216
9217            function getCssRules(styleSheets) {
9218                var cssRules = [];
9219                styleSheets.forEach(function (sheet) {
9220                    try {
9221                        util.asArray(sheet.cssRules || []).forEach(cssRules.push.bind(cssRules));
9222                    } catch (e) {
9223                        console.log('Error while reading CSS rules from ' + sheet.href, e.toString());
9224                    }
9225                });
9226                return cssRules;
9227            }
9228
9229            function newWebFont(webFontRule) {
9230                return {
9231                    resolve: function resolve() {
9232                        var baseUrl = (webFontRule.parentStyleSheet || {}).href;
9233                        return inliner.inlineAll(webFontRule.cssText, baseUrl);
9234                    },
9235                    src: function src() {
9236                        return webFontRule.style.getPropertyValue('src');
9237                    }
9238                };
9239            }
9240        }
9241    }
9242
9243    function newImages() {
9244        return {
9245            inlineAll: inlineAll,
9246            impl: {
9247                newImage: newImage
9248            }
9249        };
9250
9251        function newImage(element) {
9252            return {
9253                inline: inline
9254            };
9255
9256            function inline(get) {
9257                if (util.isDataUrl(element.src)) return Promise.resolve();
9258
9259                return Promise.resolve(element.src).then(get || util.getAndEncode).then(function (data) {
9260                    return util.dataAsUrl(data, util.mimeType(element.src));
9261                }).then(function (dataUrl) {
9262                    return new Promise(function (resolve, reject) {
9263                        element.onload = resolve;
9264                        element.onerror = reject;
9265                        element.src = dataUrl;
9266                    });
9267                });
9268            }
9269        }
9270
9271        function inlineAll(node) {
9272            if (!util.isElement(node)) return Promise.resolve(node);
9273
9274            return inlineBackground(node).then(function () {
9275                if (util.isImage(node)) return newImage(node).inline();else return Promise.all(util.asArray(node.childNodes).map(function (child) {
9276                    return inlineAll(child);
9277                }));
9278            });
9279
9280            function inlineBackground(node) {
9281                var background = node.style.getPropertyValue('background');
9282
9283                if (!background) return Promise.resolve(node);
9284
9285                return inliner.inlineAll(background).then(function (inlined) {
9286                    node.style.setProperty('background', inlined, node.style.getPropertyPriority('background'));
9287                }).then(function () {
9288                    return node;
9289                });
9290            }
9291        }
9292    }
9293};
9294
9295exports.default = Dom2Image;
9296
9297/***/ }),
9298/* 48 */
9299/***/ (function(module, exports, __webpack_require__) {
9300
9301"use strict";
9302
9303
9304exports.__esModule = true;
9305
9306var _libs = __webpack_require__(0);
9307
9308function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
9309
9310var Drag = function () {
9311  function Drag(wnd, doc, visualWorld) {
9312    _classCallCheck(this, Drag);
9313
9314    this.wnd = wnd;
9315    this.doc = doc;
9316    this.visual = visualWorld;
9317    this.coords = new _libs.THREE.Vector2();
9318    this.intersection = new _libs.THREE.Vector3();
9319    this.raycaster = this.visual.raycaster;
9320    this.camera = this.visual.camera;
9321    this.plane = new _libs.THREE.Plane();
9322    this.threes = [];
9323    this.selected = null;
9324    this.enabled = true;
9325    this.controlsState = this.visual.getControlsState();
9326
9327    this.element = this.visual.element;
9328    this.binds = {
9329      onMouseMove: this.onMouseMove.bind(this),
9330      onMouseDown: this.onMouseDown.bind(this),
9331      onMouseUp: this.onMouseUp.bind(this)
9332    };
9333    (0, _libs.$)(this.element).on('mousemove', this.binds.onMouseMove);
9334    (0, _libs.$)(this.element).on('mousedown', this.binds.onMouseDown);
9335    (0, _libs.$)(this.doc).on('mouseup', this.binds.onMouseUp);
9336  }
9337
9338  Drag.prototype.addThree = function addThree(three) {
9339    this.threes.push(three);
9340  };
9341
9342  Drag.prototype.removeThree = function removeThree(three) {
9343    var i = this.threes.indexOf(three);
9344    if (~i) {
9345      this.threes.splice(i, 1);
9346    }
9347  };
9348
9349  Drag.prototype.onPickCallback = function onPickCallback() {
9350    return true;
9351  };
9352
9353  Drag.prototype.onDragCallback = function onDragCallback() {
9354    return true;
9355  };
9356
9357  Drag.prototype.onReleaseCallback = function onReleaseCallback() {};
9358
9359  Drag.prototype.dispose = function dispose() {
9360    (0, _libs.$)(this.element).off('mousemove', this.binds.onMouseMove);
9361    (0, _libs.$)(this.element).off('mousedown', this.binds.onMouseDown);
9362    (0, _libs.$)(this.doc).off('mouseup', this.binds.onMouseUp);
9363  };
9364
9365  Drag.prototype.setCoordsFromEvent = function setCoordsFromEvent(e) {
9366    var jElement = (0, _libs.$)(this.element);
9367    var offset = jElement.offset();
9368    this.coords.x = (e.pageX - offset.left) / jElement.width() * 2 - 1;
9369    this.coords.y = -((e.pageY - offset.top) / jElement.height()) * 2 + 1;
9370    return this.coords;
9371  };
9372
9373  Drag.prototype.onMouseDown = function onMouseDown(e) {
9374    if (!this.enabled) return;
9375
9376    if (this.selected) this.onMouseUp(e);
9377
9378    this.setCoordsFromEvent(e);
9379    this.raycaster.setFromCamera(this.coords, this.camera);
9380
9381    var intersects = this.raycaster.intersectObjects(this.threes);
9382    if (intersects.length > 0) {
9383      var selected = intersects[0].object;
9384      if (!this.onPickCallback(intersects[0])) return;
9385      var v = intersects[0].point.clone();
9386      this.distance = v.sub(this.raycaster.ray.origin).length();;
9387      this.controlsState = this.visual.getControlsState();
9388      this.visual.setControlsState(false);
9389      this.plane.setFromNormalAndCoplanarPoint(this.visual.camera.getWorldDirection(this.plane.normal), intersects[0].point);
9390      //this.plane.setFromNormalAndCoplanarPoint(this.plane.normal.set(0,0,1), new THREE.Vector3(0,0,0));
9391      this.selected = selected;
9392    }
9393  };
9394
9395  Drag.prototype.onMouseMove = function onMouseMove(e) {
9396    if (!this.enabled) return;
9397    e.preventDefault();
9398
9399    if (this.selected) {
9400      this.setCoordsFromEvent(e);
9401      this.raycaster.setFromCamera(this.coords, this.camera);
9402      if (this.raycaster.ray.intersectPlane(this.plane, this.intersection)) {
9403        if (!this.onDragCallback(this.intersection)) this.onMouseUp(e);
9404      } /**/
9405      //this.intersection.copy(this.raycaster.ray.direction).normalize().multiplyScalar(this.distance).add(this.raycaster.ray.origin);/**/
9406      //if(!this.onDragCallback(this.selected, this.intersection)) this.onMouseUp(e);
9407    }
9408  };
9409
9410  Drag.prototype.onMouseUp = function onMouseUp(e) {
9411    if (this.selected) {
9412      this.onReleaseCallback();
9413      this.selected = null;
9414      this.visual.setControlsState(this.controlsState);
9415    }
9416    if (!this.enabled) return;
9417    e.preventDefault();
9418  };
9419
9420  return Drag;
9421}();
9422
9423exports.default = Drag;
9424
9425/***/ }),
9426/* 49 */
9427/***/ (function(module, exports, __webpack_require__) {
9428
9429"use strict";
9430
9431
9432exports.__esModule = true;
9433
9434var _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; };
9435
9436var _libs = __webpack_require__(0);
9437
9438function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
9439
9440__webpack_require__(70)(_libs.$);
9441
9442var EventsToActions = function () {
9443  EventsToActions.getEventFlags = function getEventFlags(e) {
9444    return e.ctrlKey << 0 | e.shiftKey << 1 | e.altKey << 2;
9445  };
9446
9447  EventsToActions.getPosition = function getPosition(touches) {
9448    var x = void 0,
9449        y = void 0;
9450    if (touches.length === 2) {
9451      x = touches[1].pageX - touches[0].pageX;
9452      y = touches[1].pageY - touches[0].pageY;
9453      y = -Math.sqrt(x * x + y * y);
9454      x = 0;
9455    } else {
9456      x = touches[0].pageX;
9457      y = touches[0].pageY;
9458    }
9459    return {
9460      x: x,
9461      y: y
9462    };
9463  };
9464
9465  function EventsToActions(element, actions) {
9466    _classCallCheck(this, EventsToActions);
9467
9468    this.actions = actions || {};
9469    this.element = element;
9470    this.doc = element[0].ownerDocument;
9471    this.wnd = this.doc.defaultView;
9472    this.enabled = true;
9473
9474    this.binds = {
9475      contextMenu: this.contextMenu.bind(this),
9476
9477      mouseDown: this.mouseDown.bind(this),
9478      mouseMove: this.mouseMove.bind(this),
9479      mouseUp: this.mouseUp.bind(this),
9480      mouseWheel: this.mouseWheel.bind(this),
9481
9482      mouseMoveDoc: this.mouseMoveDoc.bind(this),
9483      mouseUpDoc: this.mouseUpDoc.bind(this),
9484
9485      click: this.click.bind(this),
9486      dblclick: this.dblclick.bind(this),
9487
9488      touchStart: this.touchStart.bind(this),
9489      touchMove: this.touchMove.bind(this),
9490      touchEnd: this.touchEnd.bind(this),
9491
9492      keyDown: this.keyDown.bind(this),
9493      keyPress: this.keyPress.bind(this),
9494      keyUp: this.keyUp.bind(this)
9495    };
9496
9497    this.element.on('contextmenu', this.binds.contextMenu);
9498
9499    this.element.on('mousedown', this.binds.mouseDown);
9500    this.element.on('mousemove', this.binds.mouseMove);
9501    this.element.on('mouseup', this.binds.mouseUp);
9502    this.element.on('mousewheel', this.binds.mouseWheel);
9503
9504    (0, _libs.$)(this.doc).on('mousemove', this.binds.mouseMoveDoc);
9505    (0, _libs.$)(this.doc).on('mouseup', this.binds.mouseUpDoc);
9506
9507    this.element.on('click', this.binds.click);
9508    this.element.on('dblclick', this.binds.dblclick);
9509
9510    this.element.on('touchstart', this.binds.touchStart);
9511    this.element.on('touchmove', this.binds.touchMove);
9512    this.element.on('touchend', this.binds.touchEnd);
9513
9514    (0, _libs.$)(this.wnd).on('keydown', this.binds.keyDown);
9515    (0, _libs.$)(this.wnd).on('keypress', this.binds.keyPress);
9516    (0, _libs.$)(this.wnd).on('keyup', this.binds.keyUp);
9517  }
9518
9519  EventsToActions.prototype.addAction = function addAction(action, type, code, flags) {
9520    type = type.toLowerCase();
9521    if (!this.actions[type]) {
9522      this.actions[type] = {};
9523    }
9524    if (!this.actions[type][code]) {
9525      this.actions[type][code] = {};
9526    }
9527    if (!this.actions[type][code][flags]) {
9528      this.actions[type][code][flags] = [];
9529    }
9530    this.actions[type][code][flags].push(action);
9531  };
9532
9533  EventsToActions.prototype.getActions = function getActions(type, code, flags) {
9534    return ((this.actions[type] || {})[code] || {})[flags] || [];
9535  };
9536
9537  EventsToActions.prototype.fireActions = function fireActions(actions, e, data) {
9538    for (var _iterator = actions, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
9539      var _ref;
9540
9541      if (_isArray) {
9542        if (_i >= _iterator.length) break;
9543        _ref = _iterator[_i++];
9544      } else {
9545        _i = _iterator.next();
9546        if (_i.done) break;
9547        _ref = _i.value;
9548      }
9549
9550      var action = _ref;
9551
9552      action(e, data);
9553    }
9554  };
9555
9556  EventsToActions.prototype.contextMenu = function contextMenu(e) {
9557    if (this.enabled) {
9558      var flags = EventsToActions.getEventFlags(e);
9559      this.fireActions(this.getActions('contextmenu', e.button, flags), e);
9560    }
9561  };
9562
9563  EventsToActions.prototype.mouseDown = function mouseDown(e) {
9564    if (this.picked) {
9565      this.mouseUpDoc();
9566    }
9567    if (this.enabled) {
9568      var flags = EventsToActions.getEventFlags(e);
9569      this.fireActions(this.getActions('mousedown', e.button, flags), e);
9570      this.picked = {
9571        x: e.pageX,
9572        y: e.pageY,
9573        actions: this.getActions('mousedrag', e.button, flags)
9574      };
9575      this.fireActions(this.picked.actions, e, {
9576        state: 'start'
9577      });
9578    }
9579  };
9580
9581  EventsToActions.prototype.mouseMove = function mouseMove(e) {
9582    if (this.enabled) {
9583      var flags = EventsToActions.getEventFlags(e);
9584      this.fireActions(this.getActions('mousemove', e.button, flags), e);
9585    }
9586  };
9587
9588  EventsToActions.prototype.mouseMoveDoc = function mouseMoveDoc(e) {
9589    if (this.enabled && this.picked) {
9590      this.fireActions(this.picked.actions, e, {
9591        state: 'move',
9592        dx: e.pageX - this.picked.x,
9593        dy: e.pageY - this.picked.y
9594      });
9595      this.picked = {
9596        x: e.pageX,
9597        y: e.pageY,
9598        actions: this.picked.actions
9599      };
9600    }
9601  };
9602
9603  EventsToActions.prototype.mouseUp = function mouseUp(e) {
9604    if (this.enabled) {
9605      var flags = EventsToActions.getEventFlags(e);
9606      this.fireActions(this.getActions('mouseup', e.button, flags), e);
9607    }
9608  };
9609
9610  EventsToActions.prototype.mouseUpDoc = function mouseUpDoc(e) {
9611    if (this.picked) {
9612      this.fireActions(this.picked.actions, e, {
9613        state: 'end'
9614      });
9615      delete this.picked;
9616    }
9617  };
9618
9619  EventsToActions.prototype.mouseWheel = function mouseWheel(e) {
9620    if (this.enabled) {
9621      var flags = EventsToActions.getEventFlags(e);
9622      this.fireActions(this.getActions('mousewheel', 0, flags), e);
9623    }
9624  };
9625
9626  EventsToActions.prototype.clicks = function clicks(e, type) {
9627    if (this.enabled) {
9628      var flags = EventsToActions.getEventFlags(e);
9629      this.fireActions(this.getActions(type, e.button, flags), e);
9630    }
9631  };
9632
9633  EventsToActions.prototype.click = function click(e) {
9634    this.clicks(e, 'click');
9635  };
9636
9637  EventsToActions.prototype.dblclick = function dblclick(e) {
9638    this.clicks(e, 'dblclick');
9639  };
9640
9641  EventsToActions.prototype.touchPick = function touchPick(e, flags, touches) {
9642    this.touchPicked = _extends({}, EventsToActions.getPosition(touches), {
9643      actions: this.getActions('touchdrag', touches.length, flags),
9644      code: touches.length,
9645      flags: flags
9646    });
9647    this.fireActions(this.touchPicked.actions, e, {
9648      state: 'start'
9649    });
9650  };
9651
9652  EventsToActions.prototype.touchStart = function touchStart(e) {
9653    if (this.touchPicked) {
9654      this.touchEnd(e);
9655    }
9656    if (this.enabled) {
9657      var flags = EventsToActions.getEventFlags(e),
9658          touches = e.touches || e.originalEvent.touches;
9659      this.fireActions(this.getActions('touchstart', touches.length, flags), e);
9660      this.touchPick(e, flags, touches);
9661    }
9662  };
9663
9664  EventsToActions.prototype.touchMove = function touchMove(e) {
9665    if (this.enabled) {
9666      var flags = EventsToActions.getEventFlags(e),
9667          touches = e.touches || e.originalEvent.touches;
9668      this.fireActions(this.getActions('touchmove', touches.length, flags), e);
9669      if (this.touchPicked) {
9670        if (this.touchPicked.code === touches.length && this.touchPicked.flags === flags) {
9671          var pos = EventsToActions.getPosition(touches);
9672          this.fireActions(this.touchPicked.actions, e, {
9673            state: 'move',
9674            dx: pos.x - this.touchPicked.x,
9675            dy: pos.y - this.touchPicked.y
9676          });
9677          this.touchPicked = _extends({}, this.touchPicked, pos);
9678        } else {
9679          this.touchEnd(e);
9680          this.touchPick(e, flags, touches);
9681        }
9682      }
9683    }
9684  };
9685
9686  EventsToActions.prototype.touchEnd = function touchEnd(e) {
9687    if (this.touchPicked) {
9688      this.fireActions(this.touchPicked.actions, e, {
9689        state: 'end'
9690      });
9691      delete this.touchPicked;
9692    }
9693  };
9694
9695  EventsToActions.prototype.key = function key(e, type) {
9696    if (this.enabled) {
9697      var flags = EventsToActions.getEventFlags(e);
9698      this.fireActions(this.getActions(type, e.keyCode, flags), e);
9699    }
9700  };
9701
9702  EventsToActions.prototype.keyDown = function keyDown(e) {
9703    this.key(e, 'keydown');
9704  };
9705
9706  EventsToActions.prototype.keyPress = function keyPress(e) {
9707    this.key(e, 'keypress');
9708  };
9709
9710  EventsToActions.prototype.keyUp = function keyUp(e) {
9711    this.key(e, 'keyup');
9712  };
9713
9714  EventsToActions.prototype.dispose = function dispose() {
9715    this.element.off('contextmenu', this.binds.contextMenu);
9716
9717    this.element.off('mousedown', this.binds.mouseDown);
9718    this.element.off('mousemove', this.binds.mouseMove);
9719    this.element.off('mouseup', this.binds.mouseUp);
9720    this.element.off('mousewheel', this.binds.mouseWheel);
9721
9722    (0, _libs.$)(this.doc).off('mousemove', this.binds.mouseMoveDoc);
9723    (0, _libs.$)(this.doc).off('mouseup', this.binds.mouseUpDoc);
9724
9725    this.element.off('click', this.binds.click);
9726    this.element.off('dblclick', this.binds.dblclick);
9727
9728    this.element.off('touchstart', this.binds.touchStart);
9729    this.element.off('touchmove', this.binds.touchMove);
9730    this.element.off('touchend', this.binds.touchEnd);
9731
9732    (0, _libs.$)(this.wnd).off('keydown', this.binds.keyDown);
9733    (0, _libs.$)(this.wnd).off('keypress', this.binds.keyPress);
9734    (0, _libs.$)(this.wnd).off('keyup', this.binds.keyUp);
9735  };
9736
9737  return EventsToActions;
9738}();
9739
9740EventsToActions.modKeys = {
9741  Ctrl: 1,
9742  Shift: 2,
9743  Alt: 4
9744};
9745EventsToActions.mouseButtons = {
9746  Left: 0,
9747  Middle: 1,
9748  Right: 2
9749};
9750exports.default = EventsToActions;
9751
9752/***/ }),
9753/* 50 */
9754/***/ (function(module, exports, __webpack_require__) {
9755
9756"use strict";
9757
9758
9759exports.__esModule = true;
9760
9761function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
9762
9763var FullScreen = function () {
9764	function FullScreen() {
9765		_classCallCheck(this, FullScreen);
9766	}
9767
9768	FullScreen.available = function available() {
9769		return FullScreen._hasWebkitFullScreen || FullScreen._hasMozFullScreen || FullScreen._hasMsFullscreen;
9770	};
9771
9772	FullScreen.activated = function activated() {
9773		if (FullScreen._hasWebkitFullScreen) {
9774			return document.webkitIsFullScreen;
9775		} else if (FullScreen._hasMozFullScreen) {
9776			return document.mozFullScreen;
9777		} else if (FullScreen._hasMsFullscreen) {
9778			return !!document.msFullscreenElement;
9779		} else {
9780			console.assert(false);
9781		}
9782	};
9783
9784	FullScreen.addEventListener = function addEventListener(element, handler) {
9785		if (element.addEventListener) {
9786			element.addEventListener('webkitfullscreenchange', handler, false);
9787			element.addEventListener('mozfullscreenchange', handler, false);
9788			element.addEventListener('fullscreenchange', handler, false);
9789			element.addEventListener('MSFullscreenChange', handler, false);
9790		}
9791	};
9792
9793	FullScreen.removeEventListener = function removeEventListener(element, handler) {
9794		if (element.removeEventListener) {
9795			element.removeEventListener('webkitfullscreenchange', handler, false);
9796			element.removeEventListener('mozfullscreenchange', handler, false);
9797			element.removeEventListener('fullscreenchange', handler, false);
9798			element.removeEventListener('MSFullscreenChange', handler, false);
9799		}
9800	};
9801
9802	FullScreen.request = function request(element) {
9803		element = element || document.body;
9804		if (FullScreen._hasWebkitFullScreen) {
9805			element.webkitRequestFullScreen();
9806		} else if (FullScreen._hasMozFullScreen) {
9807			element.mozRequestFullScreen();
9808		} else if (FullScreen._hasMsFullscreen) {
9809			element.msRequestFullscreen();
9810		} else {
9811			console.assert(false);
9812		}
9813	};
9814
9815	FullScreen.cancel = function cancel() {
9816		if (FullScreen._hasWebkitFullScreen) {
9817			document.webkitCancelFullScreen();
9818		} else if (FullScreen._hasMozFullScreen) {
9819			document.mozCancelFullScreen();
9820		} else if (FullScreen._hasMsFullscreen) {
9821			document.msExitFullscreen();
9822		} else {
9823			console.assert(false);
9824		}
9825	};
9826
9827	return FullScreen;
9828}();
9829
9830FullScreen._hasWebkitFullScreen = !!document.webkitCancelFullScreen;
9831FullScreen._hasMozFullScreen = !!document.mozCancelFullScreen;
9832FullScreen._hasMsFullscreen = !!document.documentElement.msRequestFullscreen;
9833exports.default = FullScreen;
9834
9835/***/ }),
9836/* 51 */
9837/***/ (function(module, exports, __webpack_require__) {
9838
9839"use strict";
9840
9841
9842exports.__esModule = true;
9843
9844var _libs = __webpack_require__(0);
9845
9846var _ImageBase2 = __webpack_require__(5);
9847
9848var _ImageBase3 = _interopRequireDefault(_ImageBase2);
9849
9850var _BaseMathUtils = __webpack_require__(2);
9851
9852var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);
9853
9854var _Dom2Image = __webpack_require__(47);
9855
9856var _Dom2Image2 = _interopRequireDefault(_Dom2Image);
9857
9858var _DocMouseSimulator = __webpack_require__(46);
9859
9860var _DocMouseSimulator2 = _interopRequireDefault(_DocMouseSimulator);
9861
9862function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9863
9864function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
9865
9866function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
9867
9868function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
9868onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
9869
9870var InteractiveImage = function (_ImageBase) {
9871  _inherits(InteractiveImage, _ImageBase);
9872
9873  function InteractiveImage(context, width, height, color, src, cache, injector) {
9874    _classCallCheck(this, InteractiveImage);
9875
9876    var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));
9877
9878    _this.iId = 'i' + _BaseMathUtils2.default.getUnique();
9879    var jFrame = (0, _libs.$)('<iframe id="' + _this.iId + '" src="' + src + '" style="position: fixed; left: -1000px;"></iframe>');
9880    (0, _libs.$)(_this.doc.body).append(jFrame);
9881    _this.frame = jFrame[0];
9882
9883    _this.binds = {};
9884
9885    if (injector) {
9886      injector(_this.frame.contentWindow);
9887    }
9888
9889    if (_this.doc.implementation.hasFeature('www.http://w3.org/TR/SVG11/feature#Extensibility', '1.1')) {
9890      // svg foreignObject renderer
9891      _this.image = new Image();
9892      _this.binds.imageLoad = function () {
9893        _this.renderImage(_this.image);
9894        _this.finishRender();
9895      };
9896      (0, _libs.$)(_this.image).on('load', _this.binds.imageLoad);
9897      _this.svgRender = new _Dom2Image2.default(_this.frame.contentWindow, _this.frame.contentDocument, cache);
9898    } // otherwise - html2canvas
9899
9900    _this.binds.frameLoad = function () {
9901      if (~_this.frame.contentDocument.title.indexOf('404')) {
9902        _this.startRender = function () {
9903          _this.renderNotFoundPage();
9904          _this.finishRender();
9905        };
9906        _this.finishLoad();
9907      } else {
9908        setTimeout(function () {
9909          if (_this.frame) {
9910            _this.width = (0, _libs.$)(_this.frame.contentDocument.body).width();
9911            _this.height = (0, _libs.$)(_this.frame.contentDocument.body).height();
9912            jFrame.css('width', _this.width + 'px').css('height', _this.height + 'px');
9913            jFrame.offset({ left: -_this.width - 100, top: 0 });
9914            if (_this.svgRender) {
9915              _this.simulator = new _DocMouseSimulator2.default(jFrame, _this.frame.contentDocument.body, _this.element);
9916              _this.simulator.addDocChangeClb(_this.finishLoad.bind(_this));
9917            }
9918            _this.startRender = function () {
9919              _this.render();
9920            };
9921            _this.finishLoad();
9922          }
9923        }, 500);
9924      }
9925    };
9926    (0, _libs.$)(_this.frame.contentWindow).on('load', _this.binds.frameLoad);
9927    return _this;
9928  }
9929
9930  InteractiveImage.prototype.getSimulatedDoc = function getSimulatedDoc() {
9931    return this.frame.contentDocument;
9932  };
9933
9934  InteractiveImage.prototype.render = function render() {
9935    var _this2 = this;
9936
9937    if (this.svgRender) {
9938      this.svgRender.toSvg(this.simulator.element, { height: this.height + 'px', width: this.width + 'px' }).then(function (dataUrl) {
9939        _this2.image.src = dataUrl;
9940      }).catch(function (error) {
9941        console.error('Dom2Image: ', error);
9942        _this2.renderBlankPage();
9943        _this2.finishRender();
9944      });
9945    } else {
9946      (0, _libs.html2canvas)(this.frame.contentDocument.body, { timeout: 30000 }).then(function (canvas) {
9947        _this2.renderImage(canvas);
9948        _this2.finishRender();
9949      });
9950    }
9951  };
9952
9953  InteractiveImage.prototype.dispose = function dispose() {
9954    (0, _libs.$)(this.image).off('load', this.binds.imageLoad);
9955    (0, _libs.$)(this.frame.contentWindow).off('load', this.binds.frameLoad);
9956    (0, _libs.$)(this.doc.body).find('#' + this.iId).remove();
9957    if (this.image) {
9958      this.image.src = '';
9959      delete this.image;
9960    }
9961    this.frame.src = '';
9962    delete this.frame;
9963    _ImageBase.prototype.dispose.call(this);
9964  };
9965
9966  InteractiveImage.prototype.simulate = function simulate(e, doc, x, y) {
9967    if (this.simulator) {
9968      this.simulator.simulate(e, doc, x, y);
9969    }
9970  };
9971
9972  return InteractiveImage;
9973}(_ImageBase3.default);
9974
9975exports.default = InteractiveImage;
9976
9977/***/ }),
9978/* 52 */
9979/***/ (function(module, exports, __webpack_require__) {
9980
9981"use strict";
9982
9983
9984exports.__esModule = true;
9985
9986var _libs = __webpack_require__(0);
9987
9988var _GraphUtils = __webpack_require__(7);
9989
9990var _GraphUtils2 = _interopRequireDefault(_GraphUtils);
9991
9992var _MathUtils = __webpack_require__(3);
9993
9994var _MathUtils2 = _interopRequireDefault(_MathUtils);
9995
9996function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9997
9998function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
9999
10000var LoadingAnimation = function () {
10001  LoadingAnimation.prototype.dy = function dy(t, y) {
10002    var w = y[0],
10003        a = y[1];
10004    return [-this.g * Math.cos(a), w];
10005  };
10006
10007  LoadingAnimation.prototype.integrate = function integrate(T) {
10008    var t = 0,
10009        dt = this.p.dt,
10010        os = this.os;
10011    while (t < T) {
10012      if (t + dt > T) {
10013        dt = T - t;
10014      }
10015      os = _MathUtils2.default.rk4(this.dy.bind({ g: this.p.g }), 0, dt, os);
10016      t += dt;
10017    }
10018    return os;
10019  };
10020
10021  LoadingAnimation.prototype.calcTimeTo = function calcTimeTo(target) {
10022    var t = 0,
10023        dt = this.p.dt,
10024        os = this.os;
10025    while (Math.abs(os[1] - target) > 1e-4) {
10026      var nos = _MathUtils2.default.rk4(this.dy.bind({ g: this.p.g }), 0, dt, os);
10027      if (nos[0] < 0 && nos[1] < target || nos[0] > 0 && nos[1] > target) {
10028        dt /= 2;
10029      } else {
10030        os = nos;
10031        t += dt;
10032      }
10033    }
10034    return t;
10035  };
10036
10037  LoadingAnimation.prototype.update = function update(T) {
10038    this.os = this.integrate(T);
10039
10040    this.t += T;
10041    if (this.t >= this.p.updateInterval) {
10042      this.t = 0;
10043      var r = 0.06 * Math.min(this.c.width, this.c.height),
10044          a = this.os[1],
10045          x0 = 0.5 * this.c.width,
10046          y0 = 0.5 * this.c.height,
10047          ctx = this.ctx;
10048
10049      ctx.clearRect(0, 0, this.c.width, this.c.height);
10050      ctx.beginPath();
10051      ctx.fillStyle = _GraphUtils2.default.color2Rgba(this.p.color, 1);
10052      ctx.rect(0, 0, this.c.width, this.c.height);
10053      ctx.fill();
10054
10055      ctx.beginPath();
10056      ctx.shadowBlur = 50;
10057      ctx.fillStyle = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, 0.9), Math.abs(this.os[0] / 6.36));
10058      ctx.shadowColor = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, 1), 0.9);
10059      ctx.shadowOffsetX = 0;
10060      ctx.shadowOffsetY = 0;
10061      ctx.font = 'bold ' + Math.round(0.25 * r) + 'px Arial';
10062      ctx.textAlign = 'center';
10063      ctx.textBaseline = 'middle';
10064      ctx.fillText((0, _libs.tr)('Loading...'), x0, y0);
10065
10066      var ps = 10,
10067          da = 2 * Math.PI / ps; //2.5*_r/r
10068      ctx.shadowColor = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, 1), 0.7);
10069      for (var i = 0, _a = a, _r = 0.2 * r; i < ps; ++i, _r *= 0.9, _a += da) {
10070        ctx.beginPath();
10071        ctx.fillStyle = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, (ps - i) / ps), 0.7 * (ps - i) / ps);
10072        var cx = x0 + r * Math.cos(_a),
10073            cy = y0 - r * Math.sin(_a),
10074            nx = x0 + r * Math.cos(_a + da),
10075            ny = y0 - r * Math.sin(_a + da);
10076        ctx.shadowOffsetX = 0.2 * (nx - cx);
10077        ctx.shadowOffsetY = 0.2 * (ny - cy);
10078        ctx.arc(cx, cy, _r, 0, Math.PI * 2, 1);
10079        ctx.fill();
10080      }
10081      if (this.onChange) {
10082        this.onChange(this.c, this.p.color);
10083      }
10084    }
10085  };
10086
10087  LoadingAnimation.prototype.getImage = function getImage() {
10088    return this.c;
10089  };
10090
10091  LoadingAnimation.prototype.dispose = function dispose() {
10092    this.c.width = 0;
10093    this.c.height = 0;
10094    delete this.ctx;
10095    delete this.c;
10096  };
10097
10098  LoadingAnimation.prototype.createSprite = function createSprite(n) {
10099    var c = (0, _libs.$)('<canvas width="' + this.c.width * n + '" height="' + this.c.height + '"></canvas>')[0],
10100        ctx = c.getContext('2d'),
10101        t = this.calcTimeTo(this.os[1] + Math.sign(this.os[0]) * 2 * Math.PI),
10102        dt = t / (n + 1);
10103    var updateInterval = this.p.updateInterval;
10104
10105    this.p.updateInterval = 0;
10106    for (var i = 0; i < n; ++i) {
10107      this.update(dt);
10108      ctx.drawImage(this.c, i * this.c.width, 0);
10109    }
10110    this.p.updateInterval = updateInterval;
10111    return c;
10112  };
10113
10114  function LoadingAnimation(width, height, color) {
10115    _classCallCheck(this, LoadingAnimation);
10116
10117    var jC = (0, _libs.$)('<canvas width="' + width + '" height="' + height + '"></canvas>');
10118    this.c = jC[0];
10119    this.p = {
10120      g: 9.8,
10121      dt: 1 / 60,
10122      color: color,
10123      updateInterval: 0.25
10124    };
10125    this.ctx = this.c.getContext('2d');
10126    this.os = [-2, Math.PI / 2];
10127    this.t = this.p.updateInterval;
10128  }
10129
10130  return LoadingAnimation;
10131}();
10132
10133exports.default = LoadingAnimation;
10134
10135/***/ }),
10136/* 53 */
10137/***/ (function(module, exports, __webpack_require__) {
10138
10139"use strict";
10140
10141
10142exports.__esModule = true;
10143
10144var _libs = __webpack_require__(0);
10145
10146function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10147
10148var LoadingController = function () {
10149  function LoadingController(view) {
10150    var showProgress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
10151    var loadingMsg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
10152
10153    _classCallCheck(this, LoadingController);
10154
10155    this.view = view;
10156    this.progress = 0;
10157    this.showProgress = showProgress;
10158    this.getLoadingMsg = loadingMsg || LoadingController.defaultLoadingMsg;
10159    this.updateView();
10160  }
10161
10162  LoadingController.defaultLoadingMsg = function defaultLoadingMsg(progress) {
10163    return ['Please wait... the Application is Loading: ', progress, '%'].join('');
10164  };
10165
10166  LoadingController.prototype.dispose = function dispose() {
10167    this.showProgress = false;
10168    this.updateView();
10169    delete this.view;
10170  };
10171
10172  LoadingController.prototype.setProgress = function setProgress(v) {
10173    this.progress = v;
10174    this.updateView();
10175  };
10176
10177  LoadingController.prototype.updateView = function updateView() {
10178    if (this.view) {
10179
10180      this.view.setState('widLoadingProgress', {
10181        enable: true,
10182        visible: this.showProgress,
10183        active: false
10184      });
10185
10186      this.view.setState('txtLoadingProgress', {
10187        value: this.getLoadingMsg(this.progress),
10188        visible: true
10189      });
10190
10191      for (var _iterator = this.view.getLinks(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
10192        var _ref;
10193
10194        if (_isArray) {
10195          if (_i >= _iterator.length) break;
10196          _ref = _iterator[_i++];
10197        } else {
10198          _i = _iterator.next();
10199          if (_i.done) break;
10200          _ref = _i.value;
10201        }
10202
10203        var name = _ref;
10204
10205        this.view.setState(name, {
10206          enable: false,
10207          visible: true,
10208          active: false
10209        });
10210      }
10211
10212      this.view.setState('inpPages', {
10213        visible: true,
10214        value: ''
10215      });
10216
10217      this.view.setState('inpPage', {
10218        visible: true,
10219        enable: false,
10220        value: ''
10221      });
10222    }
10223  };
10224
10225  return LoadingController;
10226}();
10227
10228exports.default = LoadingController;
10229
10230/***/ }),
10231/* 54 */
10232/***/ (function(module, exports, __webpack_require__) {
10233
10234"use strict";
10235
10236
10237exports.__esModule = true;
10238
10239var _libs = __webpack_require__(0);
10240
10241var _EventConverter2 = __webpack_require__(6);
10242
10243var _EventConverter3 = _interopRequireDefault(_EventConverter2);
10244
10245function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10246
10247function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10248
10249function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
10250
10251function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
10252
10253var MouseEventConverter = function (_EventConverter) {
10254  _inherits(MouseEventConverter, _EventConverter);
10255
10256  function MouseEventConverter(wnd, doc, element) {
10257    _classCallCheck(this, MouseEventConverter);
10258
10259    var _this = _possibleConstructorReturn(this, _EventConverter.call(this, wnd, doc));
10260
10261    _this.element = element;
10262    _this.binds = {
10263      convert: _this.convert.bind(_this)
10264    };
10265    (0, _libs.$)(_this.element).on('mousemove mousedown mouseover mouseout click', _this.binds.convert);
10266    (0, _libs.$)(_this.doc).on('mouseup', _this.binds.convert);
10267    return _this;
10268  }
10269
10270  MouseEventConverter.prototype.dispose = function dispose() {
10271    (0, _libs.$)(this.element).off('mousemove mousedown mouseover mouseout click', this.binds.convert);
10272    (0, _libs.$)(this.doc).off('mouseup', this.binds.convert);
10273  };
10274
10275  return MouseEventConverter;
10276}(_EventConverter3.default);
10277
10278exports.default = MouseEventConverter;
10279
10280/***/ }),
10281/* 55 */
10282/***/ (function(module, exports, __webpack_require__) {
10283
10284"use strict";
10285
10286
10287exports.__esModule = true;
10288
10289var _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; };
10290
10291var _libs = __webpack_require__(0);
10292
10293var _MathUtils = __webpack_require__(3);
10294
10295var _MathUtils2 = _interopRequireDefault(_MathUtils);
10296
10297function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10298
10299function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10300
10301var Object3DWatcher = function () {
10302  function Object3DWatcher(visual, boundBoxClb) {
10303    var testScale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.testScale;
10304
10305    _classCallCheck(this, Object3DWatcher);
10306
10307    this.visual = visual;
10308    this.boundBoxClb = boundBoxClb;
10309    this.testScale = testScale;
10310    this.camera = visual.camera;
10311    this.element = this.visual.element;
10312    this.elementSize = { w: 1, h: 1 };
10313    this.devicePixelRatio = this.visual.wnd.devicePixelRatio || 1;
10314    this.orbit = visual.getOrbit();
10315    this.scale = 1;
10316
10317    this.eps = 1e-4;
10318    this.v = new _libs.THREE.Vector3();
10319    this.dv = new _libs.THREE.Vector2();
10320
10321    this.enabled = false;
10322
10323    visual.addRenderCallback(this.update.bind(this));
10324
10325    this.os = {
10326      vx: 0,
10327      vy: 0,
10328      x: 0,
10329      y: 0
10330    };
10331    this.orbit.update();
10332    this.camera.updateMatrixWorld();
10333    var box = this.computeClientBoundBox(),
10334        k = 1.11;
10335    this.movePan({ x: -k * box.mid.x, y: -k * box.mid.y });
10336  }
10337
10338  Object3DWatcher.prototype.movePan = function movePan(dv) {
10339    this.orbit.pan(dv.x * this.visual.width(), -dv.y * this.visual.height());
10340  };
10341
10342  Object3DWatcher.prototype.vToCamera = function vToCamera(v) {
10343    v.project(this.camera);
10344    return {
10345      x: 0.5 * v.x,
10346      y: 0.5 * v.y
10347    };
10348  };
10349
10350  Object3DWatcher.prototype.computeClientBoundBox = function computeClientBoundBox() {
10351    var box = this.boundBoxClb(),
10352        xs = [box.min.x, box.max.x],
10353        ys = [0, 0],
10354        zs = [box.min.z, box.max.z];
10355
10356    var ps = [],
10357        res = { max: {}, min: {} };
10358    for (var _iterator = xs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
10359      var _ref;
10360
10361      if (_isArray) {
10362        if (_i >= _iterator.length) break;
10363        _ref = _iterator[_i++];
10364      } else {
10365        _i = _iterator.next();
10366        if (_i.done) break;
10367        _ref = _i.value;
10368      }
10369
10370      var x = _ref;
10371
10372      for (var _iterator2 = ys, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
10373        var _ref2;
10374
10375        if (_isArray2) {
10376          if (_i2 >= _iterator2.length) break;
10377          _ref2 = _iterator2[_i2++];
10378        } else {
10379          _i2 = _iterator2.next();
10380          if (_i2.done) break;
10381          _ref2 = _i2.value;
10382        }
10383
10384        var y = _ref2;
10385
10386        for (var _iterator3 = zs, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
10387          var _ref3;
10388
10389          if (_isArray3) {
10390            if (_i3 >= _iterator3.length) break;
10391            _ref3 = _iterator3[_i3++];
10392          } else {
10393            _i3 = _iterator3.next();
10394            if (_i3.done) break;
10395            _ref3 = _i3.value;
10396          }
10397
10398          var z = _ref3;
10399
10400          ps.push(this.vToCamera(this.v.set(x, y, z)));
10401        }
10402      }
10403    }
10404
10405    ps.sort(function (p1, p2) {
10406      return p1.x - p2.x;
10407    });
10408    res.min.x = ps[0].x;
10409    res.max.x = ps[ps.length - 1].x;
10410    ps.sort(function (p1, p2) {
10411      return p1.y - p2.y;
10412    });
10413    res.min.y = ps[0].y;
10414    res.max.y = ps[ps.length - 1].y;
10415
10416    res.width = res.max.x - res.min.x;
10417    res.height = res.max.y - res.min.y;
10418
10419    res.mid = {
10420      x: 0.5 * (res.max.x + res.min.x),
10421      y: 0.5 * (res.max.y + res.min.y)
10422    };
10423
10424    return res;
10425  };
10426
10427  Object3DWatcher.prototype.setObject = function setObject(boundBoxClb) {
10428    this.boundBoxClb = boundBoxClb;
10429  };
10430
10431  Object3DWatcher.prototype.testScale = function testScale() {
10432    return true;
10433  };
10434
10435  Object3DWatcher.prototype.computeCorr = function computeCorr(K, min, max) {
10436    var corr = 0;
10437    if (K < 1) {
10438      if (min > -0.5) {
10439        corr = -0.5 - min;
10440      } else if (max < 0.5) {
10441        corr = 0.5 - max;
10442      }
10443    } else {
10444      if (min < -0.5) {
10445        corr = -0.5 - min;
10446      } else if (max > 0.5) {
10447        corr = 0.5 - max;
10448      }
10449    }
10450    return corr;
10451  };
10452
10453  Object3DWatcher.prototype.getScale = function getScale() {
10454    var box = this.computeClientBoundBox(),
10455        Kx = this.elementSize.w / box.width,
10456        Ky = this.elementSize.h / box.height;
10457    return 1 / Math.min(Kx, Ky);
10458  };
10459
10460  Object3DWatcher.prototype.centerView = function centerView(T) {
10461    var _this = this;
10462
10463    var box = this.computeClientBoundBox(),
10464        Kx = this.elementSize.w / box.width,
10465        Ky = this.elementSize.h / box.height,
10466        K = Math.min(Kx, Ky);
10467
10468    if (this.testScale() && Math.abs(1 / K - this.scale) > this.eps) {
10469      var scale = 1 / K + 0.2 * (this.scale - 1 / K);
10470      this.orbit.setScale(this.orbit.getScale() / (K * scale));
10471      this.orbit.update();
10472      this.camera.updateMatrixWorld();
10473      box = this.computeClientBoundBox();
10474      Kx = this.elementSize.w / box.width;
10475      Ky = this.elementSize.h / box.height;
10476      K = Math.min(Kx, Ky);
10477    }
10478
10479    var dv = this.dv;
10480    if (K > 1 - this.eps) {
10481      dv.set(-box.mid.x, -box.mid.y);
10482    } else {
10483      dv.set(this.computeCorr(Kx, box.min.x, box.max.x), this.computeCorr(Ky, box.min.y, box.max.y));
10484    }
10485
10486    if (Math.sqrt(this.os.vx * this.os.vx + this.os.vy * this.os.vy) > 0.003 || dv.length() > 0.003) {
10487      var dt = 1 / 60,
10488          t = 0,
10489          os = _extends({}, this.os, {
10490        x: 0,
10491        y: 0
10492      });
10493      os.tf = function (vx, vy, x, y) {
10494        return {
10495          x: 75 * (dv.x - x) / Math.pow(_this.devicePixelRatio, 1.0),
10496          y: 75 * (dv.y - y) / Math.pow(_this.devicePixelRatio, 1.0)
10497        };
10498      };
10499      while (t < T) {
10500        if (t + dt > T) {
10501          dt = T - t;
10502        }
10503        os = this.integrate(os, dt);
10504        t += dt;
10505      }
10506      this.movePan(os);
10507      this.os = os;
10508    }
10509  };
10510
10511  Object3DWatcher.prototype.integrate = function integrate(os, dt) {
10512    var _MathUtils$rk = _MathUtils2.default.rk4(this.dy.bind(os), 0, dt, [os.vx, os.vy, os.x, os.y]),
10513        vx = _MathUtils$rk[0],
10514        vy = _MathUtils$rk[1],
10515        x = _MathUtils$rk[2],
10516        y = _MathUtils$rk[3];
10517
10518    return _extends({}, os, {
10519      vx: vx, vy: vy, x: x, y: y
10520    });
10521  };
10522
10523  Object3DWatcher.prototype.dy = function dy(t, Y) {
10524    var vx = Y[0],
10525        vy = Y[1],
10526        x = Y[2],
10527        y = Y[3],
10528        vd = 15,
10529        tf = this.tf(vx, vy, x, y);
10530
10531    return [tf.x - vd * vx, tf.y - vd * vy, vx, vy];
10532  };
10533
10534  Object3DWatcher.prototype.update = function update(dt) {
10535    if (this.enabled && this.boundBoxClb) {
10536      this.centerView(dt);
10537    }
10538  };
10539
10540  return Object3DWatcher;
10541}();
10542
10543exports.default = Object3DWatcher;
10544
10545/***/ }),
10546/* 56 */
10547/***/ (function(module, exports, __webpack_require__) {
10548
10549"use strict";
10550
10551
10552exports.__esModule = true;
10553
10554var _libs = __webpack_require__(0);
10555
10556function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10557
10558function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
10559
10560function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
10560onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
10561
10562var Orbit = function (_THREE$EventDispatche) {
10563  _inherits(Orbit, _THREE$EventDispatche);
10564
10565  function Orbit(object, domElement) {
10566    _classCallCheck(this, Orbit);
10567
10568    var _this = _possibleConstructorReturn(this, _THREE$EventDispatche.call(this));
10569
10570    _this.object = object;
10571    _this.domElement = domElement || document.body;
10572
10573    // Set to false to disable this control
10574    _this.enabled = true;
10575
10576    // "target" sets the location of focus, where the object orbits around
10577    _this.target = new _libs.THREE.Vector3();
10578
10579    // How far you can dolly in and out(PerspectiveCamera only)
10580    _this.minDistance = 0;
10581    _this.maxDistance = Infinity;
10582
10583    // How far you can zoom in and out(OrthographicCamera only)
10584    _this.minZoom = 0;
10585    _this.maxZoom = Infinity;
10586
10587    // How far you can orbit vertically, upper and lower limits.
10588    // Range is 0 to Math.PI radians.
10589    _this.minPolarAngle = 0; // radians
10590    _this.maxPolarAngle = Math.PI; // radians
10591
10592    // How far you can orbit horizontally, upper and lower limits.
10593    // If set, must be a sub-interval of the interval [-Math.PI, Math.PI ].
10594    _this.minAzimuthAngle = -Infinity; // radians
10595    _this.maxAzimuthAngle = Infinity; // radians
10596
10597    // Set to true to enable damping (inertia)
10598    // If damping is enabled, you must call controls.update() in your animation loop
10599    _this.enableDamping = false;
10600    _this.dampingFactor = 0.25;
10601
10602    // This option actually enables dollying in and out; left as "zoom" for backwards compatibility.
10603    // Set to false to disable zooming
10604    _this.enableZoom = true;
10605    _this.zoomSpeed = 1.0;
10606
10607    // Set to false to disable rotating
10608    _this.enableRotate = true;
10609    _this.rotateSpeed = 1.0;
10610
10611    // Set to false to disable panning
10612    _this.enablePan = true;
10613
10614    // Set to true to automatically rotate around the target
10615    // If auto-rotate is enabled, you must call controls.update() in your animation loop
10616    _this.autoRotate = false;
10617    _this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60
10618
10619    // for reset
10620    _this.target0 = _this.target.clone();
10621    _this.position0 = _this.object.position.clone();
10622    _this.zoom0 = _this.object.zoom;
10623
10624    //
10625    // public methods
10626    //
10627    _this.getPolarAngle = function () {
10628      return spherical.phi;
10629    };
10630
10631    _this.getAzimuthalAngle = function () {
10632      return spherical.theta;
10633    };
10634
10635    _this.reset = function () {
10636      scope.target.copy(scope.target0);
10637      scope.object.position.copy(scope.position0);
10638      scope.object.zoom = scope.zoom0;
10639
10640      scope.object.updateProjectionMatrix();
10641      scope.dispatchEvent(changeEvent);
10642
10643      scope.update();
10644    };
10645
10646    _this.zoomOut = function () {
10647      var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.zoomSpeed;
10648
10649      var _speed = this.zoomSpeed;
10650      this.zoomSpeed = speed;
10651      dollyIn(getZoomScale());
10652      this.zoomSpeed = _speed;
10653    };
10654
10655    _this.zoomIn = function () {
10656      var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.zoomSpeed;
10657
10658      var _speed = this.zoomSpeed;
10659      this.zoomSpeed = speed;
10660      dollyOut(getZoomScale());
10661      this.zoomSpeed = _speed;
10662    };
10663
10664    _this.getScale = function () {
10665      return scale;
10666    };
10667
10668    _this.setScale = function (newScale) {
10669      scale = newScale;
10670    };
10671
10672    // this method is exposed, but perhaps it would be better if we can make it private...
10673    _this.update = function () {
10674      var offset = new _libs.THREE.Vector3();
10675      // so camera.up is the orbit axis
10676      var quat = new _libs.THREE.Quaternion().setFromUnitVectors(object.up, new _libs.THREE.Vector3(0, 1, 0));
10677      var quatInverse = quat.clone().inverse();
10678      var lastPosition = new _libs.THREE.Vector3();
10679      var lastQuaternion = new _libs.THREE.Quaternion();
10680
10681      return function update() {
10682        var position = scope.object.position;
10683        offset.copy(position).sub(scope.target);
10684        // rotate offset to "y-axis-is-up" space
10685        offset.applyQuaternion(quat);
10686        // angle from z-axis around y-axis
10687        spherical.setFromVector3(offset);
10688        if (scope.autoRotate) {
10689          rotateLeft(getAutoRotationAngle());
10690        }
10691        spherical.theta += sphericalDelta.theta;
10692        spherical.phi += sphericalDelta.phi;
10693        // restrict theta to be between desired limits
10694        spherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta));
10695        // restrict phi to be between desired limits
10696        spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));
10697        spherical.makeSafe();
10698        spherical.radius *= scale;
10699        // restrict radius to be between desired limits
10700        spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));
10701        // move target to panned location
10702        scope.target.add(panOffset);
10703        offset.setFromSpherical(spherical);
10704        // rotate offset back to "camera-up-vector-is-up" space
10705        offset.applyQuaternion(quatInverse);
10706        position.copy(scope.target).add(offset);
10707        scope.object.lookAt(scope.target);
10708
10709        if (scope.enableDamping === true) {
10710          sphericalDelta.theta *= 1 - scope.dampingFactor;
10711          sphericalDelta.phi *= 1 - scope.dampingFactor;
10712        } else {
10713          sphericalDelta.set(0, 0, 0);
10714        }
10715
10716        scale = 1;
10717        panOffset.set(0, 0, 0);
10718
10719        // update condition is:
10720        // min(camera displacement, camera rotation in radians)^2 > EPS
10721        // using small-angle approximation cos(x/2) = 1-x^2 / 8
10722
10723        if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {
10724
10725          scope.dispatchEvent(changeEvent);
10726
10727          lastPosition.copy(scope.object.position);
10728          lastQuaternion.copy(scope.object.quaternion);
10729          zoomChanged = false;
10730
10731          return true;
10732        }
10733        return false;
10734      };
10735    }();
10736
10737    _this.dispose = function () {};
10738
10739    //
10740    // internals
10741    //
10742    var scope = _this;
10743    var changeEvent = { type: 'change' };
10744    var EPS = 1e-6;
10745    // current position in spherical coordinates
10746    var spherical = new _libs.THREE.Spherical();
10747    var sphericalDelta = new _libs.THREE.Spherical();
10748
10749    var scale = 1;
10750    var panOffset = new _libs.THREE.Vector3();
10751    var zoomChanged = false;
10752
10753    function getAutoRotationAngle() {
10754      return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;
10755    }
10756
10757    function getZoomScale() {
10758      return Math.pow(0.95, scope.zoomSpeed);
10759    }
10760
10761    function rotateLeft(angle) {
10762      sphericalDelta.theta -= angle;
10763    }
10764
10765    function rotateUp(angle) {
10766      sphericalDelta.phi -= angle;
10767    }
10768
10769    var panLeft = function () {
10770      var v = new _libs.THREE.Vector3();
10771      return function panLeft(distance, objectMatrix) {
10772        v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix
10773        v.multiplyScalar(-distance);
10774        panOffset.add(v);
10775      };
10776    }();
10777
10778    var panUp = function () {
10779      var v = new _libs.THREE.Vector3();
10780      return function panUp(distance, objectMatrix) {
10781        v.setFromMatrixColumn(objectMatrix, 1); // get Y column of objectMatrix
10782        v.multiplyScalar(distance);
10783        panOffset.add(v);
10784      };
10785    }();
10786
10787    // deltaX and deltaY are in pixels; right and down are positive
10788    scope.pan = function () {
10789      var offset = new _libs.THREE.Vector3();
10790      return function pan(deltaX, deltaY) {
10791        var element = scope.domElement;
10792        if (scope.object instanceof _libs.THREE.PerspectiveCamera) {
10793          // perspective
10794          var position = scope.object.position;
10795          offset.copy(position).sub(scope.target);
10796          var targetDistance = offset.length();
10797          // half of the fov is center to top of screen
10798          targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180.0);
10799          // we actually don't use screenWidth, since perspective camera is fixed to screen height
10800          panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);
10801          panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);
10802        }
10802 else if (scope.object instanceof _libs.THREE.OrthographicCamera) {
10803          // orthographic
10804          panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);
10805          panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);
10806        } else {
10807          // camera neither orthographic nor perspective
10808          console.warn('WARNING: OrbitControls.js encountered an unknown camera type-pan disabled.');
10809          scope.enablePan = false;
10810        }
10811      };
10812    }();
10813
10814    function dollyIn(dollyScale) {
10815      if (scope.object instanceof _libs.THREE.PerspectiveCamera) {
10816        scale /= dollyScale;
10817      } else if (scope.object instanceof _libs.THREE.OrthographicCamera) {
10818        scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));
10819        scope.object.updateProjectionMatrix();
10820        zoomChanged = true;
10821      } else {
10822        console.warn('WARNING: OrbitControls.js encountered an unknown camera type-dolly/zoom disabled.');
10823        scope.enableZoom = false;
10824      }
10825    }
10826
10827    function dollyOut(dollyScale) {
10828      if (scope.object instanceof _libs.THREE.PerspectiveCamera) {
10829        scale *= dollyScale;
10830      } else if (scope.object instanceof _libs.THREE.OrthographicCamera) {
10831        scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));
10832        scope.object.updateProjectionMatrix();
10833        zoomChanged = true;
10834      } else {
10835        console.warn('WARNING: OrbitControls.js encountered an unknown camera type-dolly/zoom disabled.');
10836        scope.enableZoom = false;
10837      }
10838    }
10839
10840    /* Actions */
10841
10842    function rotate(event, data) {
10843      if (scope.enabled && scope.enableRotate && data.state === 'move') {
10844        var element = scope.domElement;
10845        // rotating across whole screen goes 360 degrees around
10846        rotateLeft(2 * Math.PI * data.dx / element.clientWidth * scope.rotateSpeed);
10847        // rotating up and down along whole screen attempts to go 360, but limited to 180
10848        rotateUp(2 * Math.PI * data.dy / element.clientHeight * scope.rotateSpeed);
10849        scope.update();
10850      }
10851    }
10852
10853    function pan(event, data) {
10854      if (scope.enabled && scope.enablePan && data.state === 'move') {
10855        scope.pan(data.dx, data.dy);
10856        scope.update();
10857      }
10858    }
10859
10860    function offsetDolly(event, data) {
10861      if (scope.enabled && scope.enableZoom && data.state === 'move') {
10862        if (data.dy > 0) {
10863          dollyIn(getZoomScale());
10864        } else if (data.dy < 0) {
10865          dollyOut(getZoomScale());
10866        }
10867        scope.update();
10868      }
10869    }
10870
10871    function wheelDolly(event) {
10872      if (scope.enabled && scope.enableZoom) {
10873        if (event.deltaY > 0) {
10874          dollyOut(getZoomScale());
10875        } else if (event.deltaY < 0) {
10876          dollyIn(getZoomScale());
10877        }
10878        scope.update();
10879      }
10880    }
10881
10882    _this.actions = {
10883      rotate: rotate,
10884      pan: pan,
10885      offsetDolly: offsetDolly,
10886      wheelDolly: wheelDolly
10887
10888      // force an update at start
10889    };_this.update();
10890    return _this;
10891  }
10892
10893  return Orbit;
10894}(_libs.THREE.EventDispatcher);
10895
10896exports.default = Orbit;
10897
10898/***/ }),
10899/* 57 */
10900/***/ (function(module, exports, __webpack_require__) {
10901
10902"use strict";
10903
10904
10905exports.__esModule = true;
10906
10907var _libs = __webpack_require__(0);
10908
10909var _ImageBase2 = __webpack_require__(5);
10910
10911var _ImageBase3 = _interopRequireDefault(_ImageBase2);
10912
10913var _Pdf = __webpack_require__(18);
10914
10915var _Pdf2 = _interopRequireDefault(_Pdf);
10916
10917var _BaseMathUtils = __webpack_require__(2);
10918
10919var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);
10920
10921var _CustomEventConverter = __webpack_require__(16);
10922
10923var _CustomEventConverter2 = _interopRequireDefault(_CustomEventConverter);
10924
10925var _PolyTarget = __webpack_require__(69);
10926
10927var _PolyTarget2 = _interopRequireDefault(_PolyTarget);
10928
10929var _Finder = __webpack_require__(17);
10930
10931var _Finder2 = _interopRequireDefault(_Finder);
10932
10933function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10934
10935function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10936
10937function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
10938
10939function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
10939onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
10940
10941var PdfImage = function (_ImageBase) {
10942  _inherits(PdfImage, _ImageBase);
10943
10944  function PdfImage(context, width, height, color, pdf, n) {
10945    _classCallCheck(this, PdfImage);
10946
10947    var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));
10948
10949    _this.query = '';
10950    _this.n = n;
10951    _this.pdf = pdf;
10952    _this.v = { x: 0, y: 0, z: 0, set: function set(x, y, z) {
10953        this.x = x;this.y = y;this.z = z;
10954        return this;
10955      }, transform: function transform(m) {
10956        var x = m.m[0][0] * this.x + m.m[1][0] * this.y + m.m[2][0] * this.z,
10957            y = m.m[0][1] * this.x + m.m[1][1] * this.y + m.m[2][1] * this.z,
10958            z = m.m[0][2] * this.x + m.m[0][2] * this.y + m.m[2][0] * this.z;
10959        this.x = x;
10960        this.y = y;
10961        this.z = z;
10962        return this;
10963      } };
10964    _this.m = { m: [[1, 0, 0], [0, 1, 0], [0, 0, 1]], set: function set(m00, m01, m02, m10, m11, m12, m20, m21, m22) {
10965        this.m = [[m00, m01, m02], [m10, m11, m12], [m20, m21, m22]];
10966        return this;
10967      } };
10968
10969    _this.startRender = function () {
10970      _this.pdf.getHandler(_this.render.bind(_this));
10971    };
10972    Promise.resolve().then(function () {
10973      return _this.pdf.getHandler(_this.init.bind(_this));
10974    });
10975    return _this;
10976  }
10977
10978  PdfImage.prototype.setQuery = function setQuery(query) {
10979    this.query = query.trim();
10980    if (this.textContent) {
10981      this.setHits(this.textContent);
10982      // this.finishLoad();
10983    }
10984  };
10985
10986  PdfImage.prototype.rectSize = function rectSize(r) {
10987    return {
10988      width: r[2] - r[0],
10989      height: r[3] - r[1]
10990    };
10991  };
10992
10993  PdfImage.prototype.createPoly = function createPoly(m, p, s) {
10994    var poly = [],
10995        v = this.v;
10996    v.set(p.x, p.y, 1).transform(m);
10997    poly.push({ x: v.x, y: v.y });
10998    v.set(p.x, p.y + s.height, 1).transform(m);
10999    poly.push({ x: v.x, y: v.y });
11000    v.set(p.x + s.width, p.y + s.height, 1).transform(m);
11001    poly.push({ x: v.x, y: v.y });
11002    v.set(p.x + s.width, p.y, 1).transform(m);
11003    poly.push({ x: v.x, y: v.y });
11004    return poly;
11005  };
11006
11007  PdfImage.prototype.getSimulatedDoc = function getSimulatedDoc() {
11008    return this;
11009  };
11010
11011  PdfImage.prototype.simulate = function simulate(e, doc, x, y) {
11012    if (this.eventConverter) {
11013      this.eventConverter.convert(e, { doc: doc, x: x, y: y });
11014    }
11015  };
11016
11017  PdfImage.prototype.setAnnotations = function setAnnotations(annos) {
11018    var _this2 = this;
11019
11020    var t = this.viewport.transform,
11021        targets = [];
11022    this.m.set(t[0], t[1], 0, t[2], t[3], 0, t[4], t[5], 1);
11023
11024    for (var _iterator = annos, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
11025      var _ref;
11026
11027      if (_isArray) {
11028        if (_i >= _iterator.length) break;
11029        _ref = _iterator[_i++];
11030      } else {
11031        _i = _iterator.next();
11032        if (_i.done) break;
11033        _ref = _i.value;
11034      }
11035
11036      var anno = _ref;
11037
11038      if (anno.subtype === 'Link') {
11039        var rect = anno.rect,
11040            aPos = {
11041          x: rect[0],
11042          y: rect[1]
11043        },
11044            aSz = this.rectSize(rect);
11045        var _target = new _PolyTarget2.default(this.createPoly(this.m, aPos, aSz).map(function (p) {
11046          return { x: p.x / _this2.viewport.width, y: 1 - p.y / _this2.viewport.height };
11047        }));
11048        _target.anno = anno;
11049        _target.callback = this.annoClb.bind(this);
11050        targets.push(_target);
11051      }
11052    }
11053    if (targets.length) {
11054      this.eventConverter = new _CustomEventConverter2.default(this.wnd, this.doc, _PolyTarget2.default.test, this.getSimulatedDoc());
11055      for (var _iterator2 = targets, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
11056        var _ref2;
11057
11058        if (_isArray2) {
11059          if (_i2 >= _iterator2.length) break;
11060          _ref2 = _iterator2[_i2++];
11061        } else {
11062          _i2 = _iterator2.next();
11063          if (_i2.done) break;
11064          _ref2 = _i2.value;
11065        }
11066
11067        var target = _ref2;
11068
11069        this.eventConverter.addCustom(target);
11070      }
11071    }
11072  };
11073
11074  PdfImage.prototype.setHits = function setHits(textContent) {
11075    this.textContent = textContent;
11076    if (this.query !== '') {
11077      this.finder = new _Finder2.default(textContent.items.map(function (item) {
11078        return item.str;
11079      }), this.query, { contexts: false });
11080    }
11081  };
11082
11083  PdfImage.prototype.renderHits = function renderHits() {
11084    var _this3 = this;
11085
11086    if (this.finder) {
11087      var view = this.page.view,
11088          testSz = (0, _libs.$)('<div style="position: absolute; visibility: hidden;"></div>').appendTo('body'),
11089          textDiv = testSz[0],
11090          baseOffset = testSz.offset().left;
11091      for (var _iterator3 = this.finder.getHits(), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
11092        var _ref3;
11093
11094        if (_isArray3) {
11095          if (_i3 >= _iterator3.length) break;
11096          _ref3 = _iterator3[_i3++];
11097        } else {
11098          _i3 = _iterator3.next();
11099          if (_i3.done) break;
11100          _ref3 = _i3.value;
11101        }
11102
11103        var hit = _ref3;
11104
11105        var item = this.textContent.items[hit.index],
11106            t = PDFJS.Util.transform(this.viewport.transform, item.transform),
11107            style = this.textContent.styles[item.fontName],
11108            angle = Math.atan2(t[1], t[0]) + (style.vertical ? Math.PI / 2 : 0),
11109            fontHeight = Math.sqrt(t[2] * t[2] + t[3] * t[3]),
11110            fontAscent = style.ascent ? style.ascent * fontHeight : style.descent ? (1 + style.descent) * fontHeight : fontHeight;
11111        testSz.html(item.str.substr(0, hit.offset) + '<span>' + item.str.substr(hit.offset, hit.length) + '</span>' + item.str.substr(hit.offset + hit.length));
11112
11113        textDiv.style.fontSize = fontHeight + 'px';
11114        textDiv.style.fontFamily = style.fontFamily;
11115
11116        var testSpan = testSz.find('span'),
11117            iwidth = style.vertical ? item.height * this.viewport.scale : item.width * this.viewport.scale,
11118            width = testSz.width(),
11119            relativeOffset = (testSpan.offset().left - baseOffset) / width;
11120        this.m.set(1, 0, 0, 0, 1, 0, t[4] + fontAscent * Math.sin(angle), t[5] - fontAscent * Math.cos(angle), 1);
11121        var poly = this.createPoly(this.m, { x: relativeOffset * iwidth, y: 0 }, { width: iwidth * testSpan.width() / width, height: testSpan.height() });
11122        poly = poly.map(function (p) {
11123          return { x: p.x / _this3.viewport.width, y: 1 - p.y / _this3.viewport.height };
11124        });
11125        this.renderHit(poly);
11126      }
11127      testSz.remove();
11128    }
11129  };
11130
11131  PdfImage.prototype.annoClb = function annoClb(e, data) {
11132    if (this.context.dispatchEvent) {
11133      this.context.dispatchEvent({
11134        type: 'pdfAnnotation',
11135        event: e,
11136        annotation: data.target.anno
11137      });
11138    }
11139  };
11140
11141  PdfImage.prototype.calcViewport = function calcViewport() {
11142    var scale = _BaseMathUtils2.default.calcScale(this.size.width, this.size.height, this.resW, this.resH);
11143    if (!this.viewport || Math.abs(this.viewport.scale - scale) > 1e-4) {
11144      this.viewport = this.page.getViewport(scale);
11145      if (this.type !== 'full') {
11146        if (this.type === 'right') {
11147          this.viewport.offsetX += 0.5 * this.viewport.width;
11148          this.viewport.transform[4] -= 0.5 * this.viewport.width;
11149        }
11150        this.viewport.width /= 2;
11151      }
11152      this.resW = this.width = this.viewport.width;
11153      this.resH = this.height = this.viewport.height;
11154    }
11155  };
11156
11157  PdfImage.prototype.init = function init() {
11158    var _this4 = this;
11159
11160    this.type = this.pdf.getPageType(this.n);
11161    this.pdf.getPage(this.n).then(function (page) {
11162      _this4.page = page;
11163      _this4.size = _Pdf2.default.getPageSize(page);
11164      if (_this4.type !== 'full') {
11165        _this4.size.width /= 2;
11166      }
11167      page.getAnnotations().then(_this4.setAnnotations.bind(_this4));
11168      page.getTextContent().then(_this4.setHits.bind(_this4));
11169      _this4.calcViewport();
11170      _this4.finishLoad();
11171    }).catch(function (e) {
11172      console.error('Cannot load PDF page: ' + (_this4.n + 1));
11173      _this4.finishLoad();
11174    });
11175  };
11176
11177  PdfImage.prototype.setResolution = function setResolution(res) {
11178    _ImageBase.prototype.setResolution.call(this, res);
11179    if (this.page) {
11180      this.calcViewport();
11181    }
11182  };
11183
11184  PdfImage.prototype.render = function render(handler) {
11185    var _this5 = this;
11186
11187    if (this.page) {
11188      this.page.render({
11189        canvasContext: this.pushCtx(),
11190        viewport: this.viewport
11191      }).then(function () {
11192        _this5.renderHits();
11193        _this5.popCtx();
11194        _this5.finishRender();
11195      });
11196    } else {
11197      this.renderBlankPage();
11198      this.finishRender();
11199    }
11200  };
11201
11202  return PdfImage;
11203}(_ImageBase3.default);
11204
11205exports.default = PdfImage;
11206
11207/***/ }),
11208/* 58 */
11209/***/ (function(module, exports, __webpack_require__) {
11210
11211"use strict";
11212
11213
11214exports.__esModule = true;
11215
11216var _libs = __webpack_require__(0);
11217
11218function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11219
11220var Search = function () {
11221  function Search(container, pages) {
11222    _classCallCheck(this, Search);
11223
11224    this.container = container;
11225    this.pages = pages;
11226    this.prevResults = [];
11227    container.html('\n      <div class="search">\n        <div class="query">\n          <input class="inpQuery" type="text" maxlength="30" value="" />\n        </div>\n        <div class="results">\n        </div>\n        <div class="status">\n\n        </div>\n      </div>\n    ');
11228    this.query = container.find('.query input');
11229    this.results = container.find('.results');
11230    this.status = container.find('.status');
11231
11232    this.binds = {
11233      navigate: this.navigate.bind(this),
11234      doQuery: this.doQuery.bind(this)
11235    };
11236
11237    this.query.on('keydown', this.binds.doQuery);
11238    this.results.on('click', this.binds.navigate);
11239  }
11240
11241  Search.prototype.dispose = function dispose() {
11242    this.results.off('click', this.binds.navigate);
11243    this.query.off('keydown', this.binds.doQuery);
11244  };
11245
11246  Search.prototype.navigate = function navigate(e) {
11247    e.preventDefault();
11248    if (this.onNavigate !== undefined) {
11249      var target = (0, _libs.$)(e.target);
11250      if (!target.hasClass('result')) {
11251        var t = target.find('.result');
11252        if (t.length) {
11253          target = t;
11254        } else {
11255          while (target.length && !target.hasClass('result')) {
11256            target = (0, _libs.$)(target[0].parentNode);
11257          }
11258        }
11259      }
11260      var page = target.attr('data');
11261      if (page !== undefined) {
11262        this.onNavigate(parseInt(page));
11263      }
11264    }
11265  };
11266
11267  Search.prototype.doQuery = function doQuery() {
11268    var _this = this;
11269
11270    if (this.onQuery) {
11271      var queryStamp = this.queryStamp = Date.now();
11272      setTimeout(function () {
11273        if (queryStamp === _this.queryStamp) {
11274          _this.onQuery(_this.query[0].value.trim());
11275        }
11276      }, 1000);
11277    }
11278  };
11279
11280  Search.prototype.setResults = function setResults(results, lastPage) {
11281    if (this.prevResults.length && results[0] !== this.prevResults[0]) {
11282      this.prevResults = [];
11283      this.results.html('');
11284    }
11285    var htmls = [];
11286    for (var i = this.prevResults.length; i < results.length; ++i) {
11287      var result = results[i];
11288      htmls.push('<div class="result" data="' + result.page + '">');
11289      htmls.push('<a href="#">');
11290      htmls.push('<div>' + result.contexts.join('</div><div>') + '</div>');
11291      htmls.push('</a>');
11292      htmls.push('</div>');
11293    }
11294    (0, _libs.$)(htmls.join('')).appendTo(this.results);
11295    this.prevResults = [].concat(results);
11296    if (lastPage === undefined) {
11297      this.status.html('');
11298    } else {
11299      this.status.html(lastPage + ' of ' + this.pages);
11300    }
11301  };
11302
11303  return Search;
11304}();
11305
11306exports.default = Search;
11307
11308/***/ }),
11309/* 59 */
11310/***/ (function(module, exports, __webpack_require__) {
11311
11312"use strict";
11313
11314
11315exports.__esModule = true;
11316
11317var _libs = __webpack_require__(0);
11318
11319var _ImageBase2 = __webpack_require__(5);
11320
11321var _ImageBase3 = _interopRequireDefault(_ImageBase2);
11322
11323var _Utils = __webpack_require__(4);
11324
11325var _Utils2 = _interopRequireDefault(_Utils);
11326
11327function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11328
11329function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11330
11331function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
11332
11333function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
11334
11335var StaticImage = function (_ImageBase) {
11336  _inherits(StaticImage, _ImageBase);
11337
11338  function StaticImage(context, width, height, color, src) {
11339    _classCallCheck(this, StaticImage);
11340
11341    var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));
11342
11343    _this.binds = {};
11344    _this.image = new Image();
11345    _this.image.crossOrigin = 'Anonymous';
11346    _this.binds.imageLoad = function () {
11347      _this.width = _this.image.width;
11348      _this.height = _this.image.height;
11349      _this.startRender = function () {
11350        _this.renderImage(_this.image);
11351        _this.finishRender();
11352      };
11353      _this.finishLoad();
11354    };
11355    _this.binds.imageError = function () {
11356      _this.startRender = function () {
11357        _this.renderNotFoundPage();
11358        _this.finishRender();
11359      };
11360      _this.finishLoad();
11361    };
11362    (0, _libs.$)(_this.image).on('load', _this.binds.imageLoad).on('error', _this.binds.imageError);
11363    _this.image.src = _Utils2.default.normalizeUrl(src);
11364    return _this;
11365  }
11366
11367  StaticImage.prototype.dispose = function dispose() {
11368    (0, _libs.$)(this.image).off('load', this.binds.imageLoad).off('error', this.binds.imageError);
11369    this.image.src = '';
11370    delete this.image;
11371    _ImageBase.prototype.dispose.call(this);
11372  };
11373
11374  return StaticImage;
11375}(_ImageBase3.default);
11376
11377exports.default = StaticImage;
11378
11379/***/ }),
11380/* 60 */
11381/***/ (function(module, exports, __webpack_require__) {
11382
11383"use strict";
11384
11385
11386exports.__esModule = true;
11387
11388var _libs = __webpack_require__(0);
11389
11390function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11391
11392var TextureAnimator = function () {
11393  function TextureAnimator(img, tilesHoriz, tilesVert, numTiles, tileDispDuration) {
11394    _classCallCheck(this, TextureAnimator);
11395
11396    var texture = new _libs.THREE.Texture();
11397    texture.minFilter = _libs.THREE.LinearFilter;
11398    texture.image = img;
11399    texture.needsUpdate = true;
11400
11401    // note: texture passed by reference, will be updated by the update function.
11402    this.texture = texture;
11403    this.tilesHorizontal = tilesHoriz;
11404    this.tilesVertical = tilesVert;
11405    // how many images does this spritesheet contain?
11406    //  usually equals tilesHoriz * tilesVert, but not necessarily,
11407    //  if there at blank tiles at the bottom of the spritesheet.
11408    this.numberOfTiles = numTiles;
11409    texture.repeat.set(1 / this.tilesHorizontal, 1 / this.tilesVertical);
11410
11411    // how long should each image be displayed?
11412    this.tileDisplayDuration = tileDispDuration;
11413
11414    // how long has the current image been displayed?
11415    this.currentDisplayTime = 0;
11416
11417    // which image is currently being displayed?
11418    this.currentTile = 0;
11419  }
11420
11421  TextureAnimator.prototype.update = function update(milliSec) {
11422    this.currentDisplayTime += milliSec;
11423    while (this.currentDisplayTime > this.tileDisplayDuration) {
11424      this.currentDisplayTime -= this.tileDisplayDuration;
11425      ++this.currentTile;
11426      if (this.currentTile == this.numberOfTiles) this.currentTile = 0;
11427      var currentColumn = this.currentTile % this.tilesHorizontal;
11428      this.texture.offset.x = currentColumn / this.tilesHorizontal;
11429      var currentRow = Math.floor(this.currentTile / this.tilesHorizontal);
11430      this.texture.offset.y = currentRow / this.tilesVertical;
11431    }
11432  };
11433
11434  TextureAnimator.prototype.dispose = function dispose() {
11435    var img = this.texture.image;
11436    img.height = img.width = 0;
11437    this.texture.dispose();
11438  };
11439
11440  return TextureAnimator;
11441}();
11442
11443exports.default = TextureAnimator;
11444
11445/***/ }),
11446/* 61 */
11447/***/ (function(module, exports, __webpack_require__) {
11448
11449"use strict";
11450
11451
11452exports.__esModule = true;
11453
11454var _libs = __webpack_require__(0);
11455
11456var _Utils = __webpack_require__(4);
11457
11458var _Utils2 = _interopRequireDefault(_Utils);
11459
11460var _MouseEventConverter2 = __webpack_require__(54);
11461
11462var _MouseEventConverter3 = _interopRequireDefault(_MouseEventConverter2);
11463
11464var _ThreeEventConverter = __webpack_require__(19);
11465
11466var _ThreeEventConverter2 = _interopRequireDefault(_ThreeEventConverter);
11467
11468function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11469
11470function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11471
11472function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
11473
11474function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
11475
11476var ThreeMouseEventConverter = function (_MouseEventConverter) {
11477  _inherits(ThreeMouseEventConverter, _MouseEventConverter);
11478
11479  function ThreeMouseEventConverter(wnd, doc, visualWorld, test) {
11480    _classCallCheck(this, ThreeMouseEventConverter);
11481
11482    var _this = _possibleConstructorReturn(this, _MouseEventConverter.call(this, wnd, doc, visualWorld.element));
11483
11484    _Utils2.default.extends(_this, new _ThreeEventConverter2.default(visualWorld, test));
11485    return _this;
11486  }
11487
11488  ThreeMouseEventConverter.prototype.getCallback = function getCallback(object) {
11489    return object.object.userData.mouseCallback;
11490  };
11491
11492  ThreeMouseEventConverter.prototype.setCoordsFromEvent = function setCoordsFromEvent(e) {
11493    var jElement = (0, _libs.$)(this.element);
11494    var offset = jElement.offset();
11495    this.coords.x = (e.pageX - offset.left) / jElement.width() * 2 - 1;
11496    this.coords.y = -((e.pageY - offset.top) / jElement.height()) * 2 + 1;
11497    return this.coords;
11498  };
11499
11500  return ThreeMouseEventConverter;
11501}(_MouseEventConverter3.default);
11502
11503exports.default = ThreeMouseEventConverter;
11504
11505/***/ }),
11506/* 62 */
11507/***/ (function(module, exports, __webpack_require__) {
11508
11509"use strict";
11510
11511
11512exports.__esModule = true;
11513
11514var _libs = __webpack_require__(0);
11515
11516var _Utils = __webpack_require__(4);
11517
11518var _Utils2 = _interopRequireDefault(_Utils);
11519
11520var _TouchEventConverter2 = __webpack_require__(64);
11521
11522var _TouchEventConverter3 = _interopRequireDefault(_TouchEventConverter2);
11523
11524var _ThreeEventConverter = __webpack_require__(19);
11525
11526var _ThreeEventConverter2 = _interopRequireDefault(_ThreeEventConverter);
11527
11528function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11529
11530function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11531
11532function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
11533
11534function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
11534onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
11535
11536var ThreeTouchEventConverter = function (_TouchEventConverter) {
11537  _inherits(ThreeTouchEventConverter, _TouchEventConverter);
11538
11539  function ThreeTouchEventConverter(wnd, doc, visualWorld, test) {
11540    _classCallCheck(this, ThreeTouchEventConverter);
11541
11542    var _this = _possibleConstructorReturn(this, _TouchEventConverter.call(this, wnd, doc, visualWorld.element));
11543
11544    _Utils2.default.extends(_this, new _ThreeEventConverter2.default(visualWorld, test));
11545    return _this;
11546  }
11547
11548  ThreeTouchEventConverter.prototype.getCallback = function getCallback(object) {
11549    return object.object.userData.touchCallback;
11550  };
11551
11552  ThreeTouchEventConverter.prototype.setCoordsFromEvent = function setCoordsFromEvent(e) {
11553    var jElement = (0, _libs.$)(this.element),
11554        offset = jElement.offset(),
11555        touches = e.touches || e.originalEvent.touches,
11556        touch = touches.length ? touches[0] : (this.lastTouches || [{ pageX: 0, pageY: 0 }])[0],
11557        pageX = touch.pageX,
11558        pageY = touch.pageY;
11559    this.lastTouches = touches.length ? touches : this.lastTouches;
11560    this.coords.x = (pageX - offset.left) / jElement.width() * 2 - 1;
11561    this.coords.y = -((pageY - offset.top) / jElement.height()) * 2 + 1;
11562    return this.coords;
11563  };
11564
11565  return ThreeTouchEventConverter;
11566}(_TouchEventConverter3.default);
11567
11568exports.default = ThreeTouchEventConverter;
11569
11570/***/ }),
11571/* 63 */
11572/***/ (function(module, exports, __webpack_require__) {
11573
11574"use strict";
11575
11576
11577exports.__esModule = true;
11578
11579var _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; };
11580
11581var _libs = __webpack_require__(0);
11582
11583var _ImageFactory = __webpack_require__(8);
11584
11585var _ImageFactory2 = _interopRequireDefault(_ImageFactory);
11586
11587function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11588
11589function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11590
11591var Thumbnails = function () {
11592  function Thumbnails(context, container, thumbnailsClb, size) {
11593    var _this = this;
11594
11595    var props = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { kWtoH: 210 / 297 };
11596
11597    _classCallCheck(this, Thumbnails);
11598
11599    this.container = container;
11600    this.p = props;
11601    this.thumbnailsClb = thumbnailsClb;
11602    this.size = size;
11603    this.canvas = (0, _libs.$)('<canvas>')[0];
11604    this.imageFactory = new _ImageFactory2.default(_extends({}, context, {
11605      renderCanvas: this.canvas,
11606      renderCanvasCtx: this.canvas.getContext('2d')
11607    }));
11608    this.thumbnails = [];
11609    for (var i = 0; i < size; ++i) {
11610      var info = this.thumbnailsClb(i);
11611      this.thumbnails.push(_extends({}, info, {
11612        index: i,
11613        loaded: info.type === 'thumbnail-image',
11614        heading: null,
11615        thumbnail: null,
11616        title: info.title || i
11617      }));
11618    }
11619
11620    this.binds = {
11621      update: this.update.bind(this),
11622      navigate: function navigate(e) {
11623        e.preventDefault();
11624        if (_this.onNavigate) {
11625          var node = e.target;
11626          while (node && !node.dataThumbnail) {
11627            node = node.parentNode;
11628          }
11629          _this.onNavigate(node.dataThumbnail.index);
11630        }
11631      }
11632    };
11633    this.container.on('scroll', this.binds.update);
11634  }
11635
11636  Thumbnails.prototype.getSize = function getSize() {
11637    return this.size;
11638  };
11639
11640  Thumbnails.prototype.setEnable = function setEnable(enable) {
11641    this.enable = enable;
11642    this.update();
11643  };
11644
11645  Thumbnails.prototype.dispose = function dispose() {
11646    this.container.find('a').off('click', this.binds.navigate);
11647    this.container.off('scroll', this.binds.update);
11648    this.container.html('');
11649    this.canvas.height = this.canvas.width = 0;
11650    delete this.canvas;
11651  };
11652
11653  Thumbnails.prototype.load = function load(thumbnail) {
11654    var _this2 = this;
11655
11656    this.loading = true;
11657    var wrapper = this.imageFactory.build(thumbnail, thumbnail.number === undefined ? thumbnail.index : thumbnail.number, this.p.kWtoH * 300, 300);
11658    wrapper.onChange = function (canvas) {
11659      _this2.setImage(thumbnail, canvas.toDataURL('image/png'));
11660      thumbnail.loaded = true;
11661      wrapper.dispose();
11662      _this2.loading = false;
11663      Promise.resolve().then(function () {
11664        return _this2.update();
11665      });
11666    };
11667  };
11668
11669  Thumbnails.prototype.getActive = function getActive() {
11670    var first = this.container.scrollTop(),
11671        last = first + this.container.height(),
11672        res = [];
11673    for (var _iterator = this.thumbnails, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
11674      var _ref;
11675
11676      if (_isArray) {
11677        if (_i >= _iterator.length) break;
11678        _ref = _iterator[_i++];
11679      } else {
11680        _i = _iterator.next();
11681        if (_i.done) break;
11682        _ref = _i.value;
11683      }
11684
11685      var thumbnail = _ref;
11686
11687      if (Math.max(thumbnail.first, first) < Math.min(thumbnail.last, last)) {
11688        res.push(thumbnail);
11689      }
11690    }
11691    return res;
11692  };
11693
11694  Thumbnails.prototype.update = function update() {
11695    if (!this.loading && this.canvas && this.enable) {
11696      if (!this.built) {
11697        this.render();
11698      }
11699      var active = this.getActive();
11700      for (var _iterator2 = active, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
11701        var _ref2;
11702
11703        if (_isArray2) {
11704          if (_i2 >= _iterator2.length) break;
11705          _ref2 = _iterator2[_i2++];
11706        } else {
11707          _i2 = _iterator2.next();
11708          if (_i2.done) break;
11709          _ref2 = _i2.value;
11710        }
11711
11712        var thumbnail = _ref2;
11713
11714        if (!thumbnail.loaded) {
11715          this.load(thumbnail);
11716          break;
11717        }
11718      }
11719    }
11720  };
11721
11722  Thumbnails.prototype.setImage = function setImage(thumbnail, img) {
11723    thumbnail.img = img;
11724    thumbnail.thumbnail.css('background-image', ['url(\'', img, '\')'].join(''));
11725    thumbnail.thumbnail.removeClass('loading');
11726  };
11727
11728  Thumbnails.prototype.render = function render() {
11729    var elements = ['<div class="thumbnails">'];
11730    for (var i = 0; i < this.size; ++i) {
11731      elements.push(['<div class="item"><a href="#"><div class="thumbnail loading"></div></a><div class="heading"><a href="#" title="', i + 1, '">', i + 1, '</a></div></div>'].join(''));
11732    }
11733    elements.push('</div>');
11734    this.container.append(elements.join(''));
11735    var items = this.container.find('.item'),
11736        base = this.container.find('.thumbnails').offset().top;
11737    for (var _i3 = 0; _i3 < items.length; ++_i3) {
11738      var item = (0, _libs.$)(items[_i3]);
11739      this.thumbnails[_i3].heading = item.find('.heading');
11740      this.thumbnails[_i3].thumbnail = item.find('.thumbnail');
11741      this.thumbnails[_i3].first = item.offset().top - base;
11742      this.thumbnails[_i3].last = this.thumbnails[_i3].first + item.height();
11743      if (this.thumbnails[_i3].loaded) {
11744        this.setImage(this.thumbnails[_i3], this.thumbnails[_i3].src);
11745      }
11746      var as = item.find('a');
11747      for (var j = 0; j < as.length; ++j) {
11748        var a = as[j];
11749        a.dataThumbnail = this.thumbnails[_i3];
11750      }
11751    }
11752    this.container.find('a').on('click', this.binds.navigate);
11753    this.built = true;
11754  };
11755
11756  return Thumbnails;
11757}();
11758
11759exports.default = Thumbnails;
11760
11761/***/ }),
11762/* 64 */
11763/***/ (function(module, exports, __webpack_require__) {
11764
11765"use strict";
11766
11767
11768exports.__esModule = true;
11769
11770var _libs = __webpack_require__(0);
11771
11772var _EventConverter2 = __webpack_require__(6);
11773
11774var _EventConverter3 = _interopRequireDefault(_EventConverter2);
11775
11776function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11777
11778function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11779
11780function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
11781
11782function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
11782onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
11783
11784var TouchConverter = function (_EventConverter) {
11785  _inherits(TouchConverter, _EventConverter);
11786
11787  function TouchConverter(wnd, doc, element) {
11788    _classCallCheck(this, TouchConverter);
11789
11790    var _this = _possibleConstructorReturn(this, _EventConverter.call(this, wnd, doc));
11791
11792    _this.element = element;
11793    _this.binds = {
11794      convert: _this.convert.bind(_this)
11795    };
11796    (0, _libs.$)(_this.element).on('touchstart touchmove', _this.binds.convert);
11797    (0, _libs.$)(_this.doc).on('touchend', _this.binds.convert);
11798    return _this;
11799  }
11800
11801  TouchConverter.prototype.dispose = function dispose() {
11802    (0, _libs.$)(this.element).off('touchstart touchmove', this.binds.convert);
11803    (0, _libs.$)(this.doc).off('touchend', this.binds.convert);
11804  };
11805
11806  return TouchConverter;
11807}(_EventConverter3.default);
11808
11809exports.default = TouchConverter;
11810
11811/***/ }),
11812/* 65 */
11813/***/ (function(module, exports, __webpack_require__) {
11814
11815"use strict";
11816
11817
11818exports.__esModule = true;
11819
11820var _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; };
11821
11822var _libs = __webpack_require__(0);
11823
11824function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
11825
11826var View = function () {
11827  View.classProperty = function classProperty(ctrl, className, value) {
11828    if (value) {
11829      ctrl.addClass(className);
11830    } else {
11831      ctrl.removeClass(className);
11832    }
11833  };
11834
11835  View.attributeProperty = function attributeProperty(ctrl, attributeName, value) {
11836    if (value) {
11837      ctrl.attr(attributeName, value);
11838    } else {
11839      ctrl.removeAttr(attributeName);
11840    }
11841  };
11842
11843  View.callHandlers = function callHandlers(handlers, id, e, data) {
11844    for (var _iterator = handlers, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
11845      var _ref;
11846
11847      if (_isArray) {
11848        if (_i >= _iterator.length) break;
11849        _ref = _iterator[_i++];
11850      } else {
11851        _i = _iterator.next();
11852        if (_i.done) break;
11853        _ref = _i.value;
11854      }
11855
11856      var handler = _ref;
11857
11858      if (handler[id]) {
11859        handler[id](e, data);
11860      } else if (handler.handleDefault) {
11861        handler.handleDefault(id, e, data);
11862      }
11863    }
11864  };
11865
11866  View.handleEvent = function handleEvent(id, getHandlers, e, data) {
11867    View.callHandlers(getHandlers(id), id, e, data);
11868  };
11869
11870  View.handleLinkEvent = function handleLinkEvent(e) {
11871    e.preventDefault();
11872    if (!this.ctrl.hasClass('disabled')) {
11873      View.handleEvent(this.id, this.getHandlers, e);
11874    }
11875  };
11876
11877  View.handleInputEvent = function handleInputEvent(e) {
11878    View.handleEvent(this.id, this.getHandlers, e, e.target.value);
11879  };
11880
11881  View.handleFormEvent = function handleFormEvent(e) {
11882    e.preventDefault();
11883    View.handleEvent(this.id, this.getHandlers, e);
11884  };
11885
11886  // virtual functions {
11887
11888
11889  View.prototype.getLinks = function getLinks() {
11890    return null;
11891  };
11892
11893  View.prototype.getWidgets = function getWidgets() {
11894    return null;
11895  };
11896
11897  View.prototype.getInputs = function getInputs() {
11898    return null;
11899  };
11900
11901  View.prototype.getTexts = function getTexts() {
11902    return null;
11903  };
11904
11905  View.prototype.getTemplate = function getTemplate() {
11906    return {};
11907  };
11908
11909  View.prototype.getHandlers = function getHandlers(id) {
11910    return this.handlers;
11911  };
11912  // }
11913
11914  View.prototype.callLater = function callLater(handlers, id, e, data, ms) {
11915    var _this = this;
11916
11917    this.pendings[id] = {
11918      timestamp: new Date().getTime()
11919    };
11920    setTimeout(function () {
11921      var timestamp = new Date().getTime(),
11922          pending = _this.pendings[id];
11923      if (pending && timestamp - pending.timestamp >= ms) {
11924        View.callHandlers(handlers, id, e, data);
11925        delete _this.pendings[id];
11926      }
11927    }, ms);
11928  };
11929
11930  // loadFiles(urls, ready, failure) {
11931  //   let done = Promise.resolve();
11932  //   for(let url of urls) {
11933  //     done = done.then(()=> {
11934  //       return new Promise((resolve, reject)=> {
11935  //         $.get(url, (res)=> {
11936  //           ready(res, url);
11937  //           resolve();
11938  //         }).fail((res)=> {
11939  //           if(failure && failure(res, url)) {
11940  //             resolve();
11941  //           }
11942  //           else {
11943  //             reject(res);
11944  //           }
11945  //         });
11946  //       });
11947  //     });
11948  //   }
11949  //   return done;
11950  // }
11951
11952  View.prototype.loadFiles = function loadFiles(urls, files) {
11953    var tasks = [];
11954
11955    var _loop = function _loop() {
11956      if (_isArray2) {
11957        if (_i2 >= _iterator2.length) return 'break';
11958        _ref2 = _iterator2[_i2++];
11959      } else {
11960        _i2 = _iterator2.next();
11961        if (_i2.done) return 'break';
11962        _ref2 = _i2.value;
11963      }
11964
11965      var name = _ref2;
11966
11967      files[name] = [];
11968
11969      var _loop2 = function _loop2() {
11970        if (_isArray3) {
11971          if (_i3 >= _iterator3.length) return 'break';
11972          _ref3 = _iterator3[_i3++];
11973        } else {
11974          _i3 = _iterator3.next();
11975          if (_i3.done) return 'break';
11976          _ref3 = _i3.value;
11977        }
11978
11979        var url = _ref3;
11980
11981        tasks.push(new Promise(function (resolve, reject) {
11982          _libs.$.get(url, function (data) {
11983            files[name].push({ url: url, data: data });
11984            resolve();
11985          }).fail(function (res) {
11986            reject(res);
11987          });
11988        }));
11989      };
11990
11991      for (var _iterator3 = urls[name], _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
11992        var _ref3;
11993
11994        var _ret2 = _loop2();
11995
11996        if (_ret2 === 'break') break;
11997      }
11998    };
11999
12000    for (var _iterator2 = Object.keys(urls), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
12001      var _ref2;
12002
12003      var _ret = _loop();
12004
12005      if (_ret === 'break') break;
12006    }
12007    return Promise.all(tasks);
12008  };
12009
12010  View.prototype.urlResolver = function urlResolver(baseUrl, url) {
12011    url = url.replace(/\\/g, '/');
12012    if (url.charAt(0) !== '/') {
12013      baseUrl = baseUrl.replace(/\\/g, '/');
12014      var p = baseUrl.lastIndexOf('/');
12015      url = (~p ? baseUrl.substr(0, p + 1) : '') + url;
12016
12017      var parts = url.split('/');
12018      url = [];
12019      for (var _iterator4 = parts, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
12020        var _ref4;
12021
12022        if (_isArray4) {
12023          if (_i4 >= _iterator4.length) break;
12024          _ref4 = _iterator4[_i4++];
12025        } else {
12026          _i4 = _iterator4.next();
12027          if (_i4.done) break;
12028          _ref4 = _i4.value;
12029        }
12030
12031        var part = _ref4;
12032
12033        if (part === '.') {} else if (part === '..') {
12034          if (url.length && !(url.length === 1 && url[0] === '')) {
12035            url.pop();
12036          }
12037        } else {
12038          url.push(part);
12039        }
12040      }
12041      url = url.join('/');
12042    }
12043
12044    return url;
12045  };
12046
12047  View.prototype.objToAttrsStr = function objToAttrsStr(o) {
12048    var res = [];
12049    for (var _iterator5 = Object.keys(o), _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
12050      var _ref5;
12051
12052      if (_isArray5) {
12053        if (_i5 >= _iterator5.length) break;
12054        _ref5 = _iterator5[_i5++];
12055      } else {
12056        _i5 = _iterator5.next();
12057        if (_i5.done) break;
12058        _ref5 = _i5.value;
12059      }
12060
12061      var _name = _ref5;
12062
12063      res.push([_name, '="', o[_name], '"'].join(''));
12064    }
12065    return res.join(' ');
12066  };
12067
12068  View.prototype.checkIframeSize = function checkIframeSize() {
12069    if (this.frame) {
12070      if (Math.abs(this.frame.width - this.parentContainer.width()) > 1 || Math.abs(this.frame.height - this.parentContainer.height()) > 1) {
12071        this.onResize();
12072      }
12073      setTimeout(this.checkIframeSize.bind(this), 250);
12074    }
12075  };
12076
12077  View.prototype.onResize = function onResize() {
12078    this.frame.width = this.parentContainer.width();
12079    this.frame.height = this.parentContainer.height();
12080  };
12081
12082  View.prototype.translate = function translate(html) {
12083    return html.replace(/<\$tr>(.*)<\/\$tr>/gi, function (s0, s1) {
12084      return (0, _libs.tr)(s1);
12085    });
12086  };
12087
12088  View.prototype.fireLinksOnLoadEvent = function fireLinksOnLoadEvent() {
12089    var _this2 = this;
12090
12091    if (this.templateObject && this.templateObject.linkLoaded) {
12092      var loaded = true;
12093
12094      var _loop3 = function _loop3() {
12095        if (_isArray6) {
12096          if (_i6 >= _iterator6.length) return 'break';
12097          _ref6 = _iterator6[_i6++];
12098        } else {
12099          _i6 = _iterator6.next();
12100          if (_i6.done) return 'break';
12101          _ref6 = _i6.value;
12102        }
12103
12104        var jLink = _ref6;
12105
12106        var link = jLink[0];
12107        var img = new Image();
12108        img.onerror = function () {
12109          return _this2.templateObject.linkLoaded(link);
12110        };
12111        img.src = link.href;
12112      };
12113
12114      for (var _iterator6 = this.jLinks, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
12115        var _ref6;
12116
12117        var _ret3 = _loop3();
12118
12119        if (_ret3 === 'break') break;
12120      }
12121    }
12122  };
12123
12124  function View(parentContainer, onLoad) {
12125    var _this3 = this;
12126
12127    var template = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
12128
12129    _classCallCheck(this, View);
12130
12131    this.pendings = {};
12132    this.binds = {
12133      onResize: this.onResize.bind(this)
12134    };
12135    this.parentContainer = (0, _libs.$)(parentContainer);
12136    this.isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
12137    this.parentContainer.html('<iframe style="border: 0;' + (this.isIOS ? '' : ' width: 100%; height: 100%') + '" scrolling="no"></iframe>');
12138
12139    this.frame = this.parentContainer.find('iframe')[0];
12140    if (this.frame.contentWindow.stop) {
12141      this.frame.contentWindow.stop();
12142    }
12143    if (this.isIOS) {
12144      (0, _libs.$)(this.parentContainer[0].ownerDocument.defaultView).on('resize', this.binds.onResize);
12145      this.onResize();
12146      setTimeout(this.checkIframeSize.bind(this), 250);
12147    }
12148
12149    this.container = (0, _libs.$)(this.frame.contentDocument.body);
12150    this.container.css('margin', '0');
12151    this.head = (0, _libs.$)(this.frame.contentDocument.head);
12152    this.onLoad = onLoad;
12153    this.handlers = [];
12154
12155    var script = template.html ? template.script : this.getTemplate().script;
12156    var urls = {
12157      styles: template.styles || this.getTemplate().styles,
12158      html: [template.html || this.getTemplate().html],
12159      script: script ? [script] : []
12160    },
12161        files = {},
12162        links = template.links || this.getTemplate().links;
12163
12164    this.loadFiles(urls, files).then(function () {
12165      var _loop4 = function _loop4() {
12166        if (_isArray7) {
12167          if (_i7 >= _iterator7.length) return 'break';
12168          _ref7 = _iterator7[_i7++];
12169        } else {
12170          _i7 = _iterator7.next();
12171          if (_i7.done) return 'break';
12172          _ref7 = _i7.value;
12173        }
12174
12175        var style = _ref7;
12176
12177        var textCss = style.data,
12178            url = style.url;
12179        textCss = textCss.replace(/url\(['"](.*?)["']\)/g, function (r, r1) {
12180          return ['url(', _this3.urlResolver(url, r1), ')'].join('');
12181        });
12182        (0, _libs.$)('<style type="text/css">' + textCss + '</style>').appendTo(_this3.head);
12183      };
12184
12185      for (var _iterator7 = files.styles, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {
12186        var _ref7;
12187
12188        var _ret4 = _loop4();
12189
12190        if (_ret4 === 'break') break;
12191      }
12192
12193      _this3.container.html(_this3.translate(files.html[0].data));
12194
12195      _this3.jLinks = [];
12196      for (var _iterator8 = links, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {
12197        var _ref8;
12198
12199        if (_isArray8) {
12200          if (_i8 >= _iterator8.length) break;
12201          _ref8 = _iterator8[_i8++];
12202        } else {
12203          _i8 = _iterator8.next();
12204          if (_i8.done) break;
12205          _ref8 = _i8.value;
12206        }
12207
12208        var _link = _ref8;
12209
12210        _this3.jLinks.push((0, _libs.$)(['<link ', _this3.objToAttrsStr(_link), '>'].join('')).appendTo(_this3.head));
12211      }
12212
12213      if (files.script[0]) {
12214        var init = eval(files.script[0].data);
12215        _this3.templateObject = init(_this3.container);
12216      } else {
12217        _this3.templateObject = {};
12218      }
12219
12220      _this3.linkControls = {};
12221      for (var _iterator9 = _this3.getLinks(), _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {
12222        var _ref9;
12223
12224        if (_isArray9) {
12225          if (_i9 >= _iterator9.length) break;
12226          _ref9 = _iterator9[_i9++];
12227        } else {
12228          _i9 = _iterator9.next();
12229          if (_i9.done) break;
12230          _ref9 = _i9.value;
12231        }
12232
12233        var id = _ref9;
12234
12235        _this3.linkControls[id] = _this3.container.find('.' + id);
12236        _this3.binds[id] = View.handleLinkEvent.bind({ getHandlers: _this3.getHandlers.bind(_this3), id: id, ctrl: _this3.linkControls[id] });
12237        _this3.linkControls[id].on('click', _this3.binds[id]);
12238      }
12239
12240      _this3.widgetControls = {};
12241      for (var _iterator10 = _this3.getWidgets(), _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) {
12242        var _ref10;
12243
12244        if (_isArray10) {
12245          if (_i10 >= _iterator10.length) break;
12246          _ref10 = _iterator10[_i10++];
12247        } else {
12248          _i10 = _iterator10.next();
12249          if (_i10.done) break;
12250          _ref10 = _i10.value;
12251        }
12252
12253        var _id = _ref10;
12254
12255        _this3.widgetControls[_id] = _this3.container.find('.' + _id);
12256      }
12257
12258      _this3.inputControls = {};
12259      for (var _iterator11 = _this3.getInputs(), _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) {
12260        var _ref11;
12261
12262        if (_isArray11) {
12263          if (_i11 >= _iterator11.length) break;
12264          _ref11 = _iterator11[_i11++];
12265        } else {
12266          _i11 = _iterator11.next();
12267          if (_i11.done) break;
12268          _ref11 = _i11.value;
12269        }
12270
12271        var _id2 = _ref11;
12272
12273        _this3.inputControls[_id2] = _this3.container.find('.' + _id2);
12274        _this3.binds[_id2] = View.handleInputEvent.bind({ getHandlers: _this3.getHandlers.bind(_this3), id: _id2, ctrl: _this3.inputControls[_id2] });
12275        _this3.inputControls[_id2].on('keyup', _this3.binds[_id2]);
12276      }
12277
12278      _this3.formControls = {};
12279      for (var _iterator12 = _this3.getForms(), _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) {
12280        var _ref12;
12281
12282        if (_isArray12) {
12283          if (_i12 >= _iterator12.length) break;
12284          _ref12 = _iterator12[_i12++];
12285        } else {
12286          _i12 = _iterator12.next();
12287          if (_i12.done) break;
12288          _ref12 = _i12.value;
12289        }
12290
12291        var _id3 = _ref12;
12292
12293        _this3.formControls[_id3] = _this3.container.find('.' + _id3);
12294        _this3.binds[_id3] = View.handleFormEvent.bind({ getHandlers: _this3.getHandlers.bind(_this3), id: _id3, ctrl: _this3.formControls[_id3] });
12295        _this3.formControls[_id3].on('submit', _this3.binds[_id3]);
12296      }
12297
12298      _this3.textControls = {};
12299      for (var _iterator13 = _this3.getTexts(), _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) {
12300        var _ref13;
12301
12302        if (_isArray13) {
12303          if (_i13 >= _iterator13.length) break;
12304          _ref13 = _iterator13[_i13++];
12305        } else {
12306          _i13 = _iterator13.next();
12307          if (_i13.done) break;
12308          _ref13 = _i13.value;
12309        }
12310
12311        var _id4 = _ref13;
12312
12313        _this3.textControls[_id4] = _this3.container.find('.' + _id4);
12314      }
12315
12316      _this3.stateSetters = [{
12317        map: _this3.linkControls,
12318        setter: _this3.setLinkControlState.bind(_this3)
12319      }, {
12320        map: _this3.widgetControls,
12321        setter: _this3.setWidgetControlState.bind(_this3)
12322      }, {
12323        map: _this3.inputControls,
12324        setter: _this3.setInputControlState.bind(_this3)
12325      }, {
12326        map: _this3.textControls,
12327        setter: _this3.setTextControlState.bind(_this3)
12328      }];
12329
12330      _this3.initView();
12331
12332      if (_this3.onLoad) {
12333        _this3.onLoad();
12334      }
12335
12336      _this3.fireLinksOnLoadEvent();
12337    }).catch(function (res) {
12338      return console.error(res);
12339    });
12340  }
12341
12342  View.prototype.dispose = function dispose() {
12343    delete this.textControls;
12344    for (var _iterator14 = this.getLinks(), _isArray14 = Array.isArray(_iterator14), _i14 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) {
12345      var _ref14;
12346
12347      if (_isArray14) {
12348        if (_i14 >= _iterator14.length) break;
12349        _ref14 = _iterator14[_i14++];
12350      } else {
12351        _i14 = _iterator14.next();
12352        if (_i14.done) break;
12353        _ref14 = _i14.value;
12354      }
12355
12356      var id = _ref14;
12357
12358      this.linkControls[id].off('click', this.binds[id]);
12359    }
12360    delete this.linkControls;
12361    delete this.widgetControls;
12362    for (var _iterator15 = this.getInputs(), _isArray15 = Array.isArray(_iterator15), _i15 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) {
12363      var _ref15;
12364
12365      if (_isArray15) {
12366        if (_i15 >= _iterator15.length) break;
12367        _ref15 = _iterator15[_i15++];
12368      } else {
12369        _i15 = _iterator15.next();
12370        if (_i15.done) break;
12371        _ref15 = _i15.value;
12372      }
12373
12374      var _id5 = _ref15;
12375
12376      this.inputControls[_id5].off('keyup', this.binds[_id5]);
12377    }
12378    delete this.inputControls;
12379    for (var _iterator16 = this.getForms(), _isArray16 = Array.isArray(_iterator16), _i16 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) {
12380      var _ref16;
12381
12382      if (_isArray16) {
12383        if (_i16 >= _iterator16.length) break;
12384        _ref16 = _iterator16[_i16++];
12385      } else {
12386        _i16 = _iterator16.next();
12387        if (_i16.done) break;
12388        _ref16 = _i16.value;
12389      }
12390
12391      var _id6 = _ref16;
12392
12393      this.formControls[_id6].off('submit', this.binds[_id6]);
12394    }
12395    delete this.formControls;
12396
12397    !this.templateObject.dispose || this.templateObject.dispose();
12398    delete this.templateObject;
12399
12400    if (this.isIOS) {
12401      (0, _libs.$)(this.parentContainer[0].ownerDocument.defaultView).off('resize', this.binds.onResize);
12402    }
12403    this.parentContainer.html('');
12404    delete this.frame;
12405  };
12406
12407  View.prototype.getContainer = function getContainer() {
12408    return this.container[0];
12409  };
12410
12411  View.prototype.getParentContainer = function getParentContainer() {
12412    return this.parentContainer[0];
12413  };
12414
12415  View.prototype.addHandler = function addHandler(handler) {
12416    this.handlers.push(handler);
12417  };
12418
12419  View.prototype.initView = function initView() {};
12420
12421  View.setControlState = function setControlState(ctrl, defaults, state, stateHandlers) {
12422    if (ctrl) {
12423      var st = _extends({}, defaults, state);
12424      for (var _name2 in st) {
12425        if (st.hasOwnProperty(_name2) && stateHandlers[_name2]) {
12426          stateHandlers[_name2](ctrl, st[_name2]);
12427        }
12428      }
12429    }
12430  };
12431
12432  View.prototype.setLinkControlState = function setLinkControlState(id, state) {
12433    View.setControlState(this.linkControls[id], {
12434      visible: true,
12435      active: false,
12436      enable: true
12437    }, state, View.linkStateHandlers);
12438  };
12439
12440  View.prototype.setWidgetControlState = function setWidgetControlState(id, state) {
12441    View.setControlState(this.widgetControls[id], {
12442      visible: true,
12443      active: false,
12444      enable: true
12445    }, state, View.widgetStateHandlers);
12446  };
12447
12448  View.prototype.setInputControlState = function setInputControlState(id, state) {
12449    View.setControlState(this.inputControls[id], {
12450      visible: true,
12451      enable: true,
12452      value: ''
12453    }, state, View.inputStateHandlers);
12454  };
12455
12456  View.prototype.setTextControlState = function setTextControlState(id, state) {
12457    View.setControlState(this.textControls[id], {
12458      visible: true,
12459      value: ''
12460    }, state, View.textStateHandlers);
12461  };
12462
12463  View.prototype.onItemStateChanged = function onItemStateChanged() {};
12464
12465  View.prototype.setState = function setState(id, state) {
12466    for (var _iterator17 = this.stateSetters, _isArray17 = Array.isArray(_iterator17), _i17 = 0, _iterator17 = _isArray17 ? _iterator17 : _iterator17[Symbol.iterator]();;) {
12467      var _ref17;
12468
12469      if (_isArray17) {
12470        if (_i17 >= _iterator17.length) break;
12471        _ref17 = _iterator17[_i17++];
12472      } else {
12473        _i17 = _iterator17.next();
12474        if (_i17.done) break;
12475        _ref17 = _i17.value;
12476      }
12477
12478      var item = _ref17;
12479
12480      if (item.map[id]) {
12481        item.setter(id, state);
12482        this.onItemStateChanged(id, state);
12483        break;
12484      }
12485    }
12486  };
12487
12488  return View;
12489}();
12490
12491View.linkStateHandlers = {
12492  visible: function visible(ctrl, value) {
12493    return View.classProperty(ctrl, 'hidden', !value);
12494  },
12495  active: function active(ctrl, value) {
12496    return View.classProperty(ctrl, 'active', value);
12497  },
12498  enable: function enable(ctrl, value) {
12499    return View.classProperty(ctrl, 'disabled', !value);
12500  }
12501};
12502View.widgetStateHandlers = {
12503  visible: function visible(ctrl, value) {
12504    return View.classProperty(ctrl, 'hidden', !value);
12505  },
12506  active: function active(ctrl, value) {
12507    return View.classProperty(ctrl, 'active', value);
12508  },
12509  enable: function enable(ctrl, value) {
12510    return View.classProperty(ctrl, 'disabled', !value);
12511  }
12512};
12513View.inputStateHandlers = {
12514  visible: function visible(ctrl, value) {
12515    return View.classProperty(ctrl, 'hidden', !value);
12516  },
12517  value: function value(ctrl, _value) {
12518    return ctrl[0].value = _value;
12519  },
12520  enable: function enable(ctrl, value) {
12521    return View.attributeProperty(ctrl, 'disabled', !value);
12522  }
12523};
12524View.textStateHandlers = {
12525  visible: function visible(ctrl, value) {
12526    return View.classProperty(ctrl, 'hidden', !value);
12527  },
12528  value: function value(ctrl, _value2) {
12529    return ctrl.text(_value2);
12530  }
12531};
12532exports.default = View;
12533
12534/***/ }),
12535/* 66 */
12536/***/ (function(module, exports, __webpack_require__) {
12537
12538"use strict";
12539
12540
12541exports.__esModule = true;
12542
12543var _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; };
12544
12545var _libs = __webpack_require__(0);
12546
12547var _Orbit = __webpack_require__(56);
12548
12549var _Orbit2 = _interopRequireDefault(_Orbit);
12550
12551var _ThreeMouseEventConverter = __webpack_require__(61);
12552
12553var _ThreeMouseEventConverter2 = _interopRequireDefault(_ThreeMouseEventConverter);
12554
12555var _ThreeTouchEventConverter = __webpack_require__(62);
12556
12557var _ThreeTouchEventConverter2 = _interopRequireDefault(_ThreeTouchEventConverter);
12558
12559var _Drag = __webpack_require__(48);
12560
12561var _Drag2 = _interopRequireDefault(_Drag);
12562
12563var _CSS3DRenderer = __webpack_require__(12);
12564
12565var _CSS3DRenderer2 = _interopRequireDefault(_CSS3DRenderer);
12566
12567function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12568
12569function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
12570
12571function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
12572
12573function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
12574
12575var VisualWorld = function (_THREE$EventDispatche) {
12576  _inherits(VisualWorld, _THREE$EventDispatche);
12577
12578  function VisualWorld(wnd, doc, container) {
12579    var useHelpers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
12580
12581    _classCallCheck(this, VisualWorld);
12582
12583    var _this = _possibleConstructorReturn(this, _THREE$EventDispatche.call(this));
12584
12585    _this.wnd = wnd;
12586    _this.doc = doc;
12587    _this.jContainer = container;
12588    _this.renderCallbacks = [];
12589
12590    _this.clock = new _libs.THREE.Clock();
12591
12592    _this.raycaster = new _libs.THREE.Raycaster();
12593
12594    _this.scene = new _libs.THREE.Scene();
12595    _this.cssScene = new _libs.THREE.Scene();
12596
12597    _this.camera = new _libs.THREE.PerspectiveCamera(30, _this.width() / _this.height(), 0.2, 2000);
12598    var scale = 5;
12599
12600    _this.camera.position.x = 0;
12601    _this.camera.position.y = 5.5 * scale;
12602    _this.camera.position.z = 0;
12603
12604    _this.renderer = new _libs.THREE.WebGLRenderer({ alpha: true, antialias: true });
12605    _this.renderer.setClearColor(0x000000, 0);
12606    _this.renderer.setPixelRatio(_this.wnd.devicePixelRatio);
12607    _this.renderer.setSize(_this.width(), _this.height());
12608
12609    _this.jContainer.append(_this.renderer.domElement);
12610
12611    _this.cssRenderer = new _CSS3DRenderer2.default();
12612    _this.cssRenderer.setSize(_this.width(), _this.height());
12613    (0, _libs.$)(_this.cssRenderer.domElement).css({
12614      position: 'absolute',
12615      top: 0,
12616      margin: 0,
12617      padding: 0
12618    });
12619    _this.jContainer.append(_this.cssRenderer.domElement);
12620
12621    _this.element = _this.cssRenderer.domElement;
12622
12623    _this.controls = new _Orbit2.default(_this.camera, _this.element);
12624    _this.controls.target.y = 0.5;
12625
12626    var cssScene = (0, _libs.$)(_this.cssRenderer.domElement).find('div'),
12627        tmpVector = new _libs.THREE.Vector3();
12628    _this.controls.addEventListener('change', function () {
12629      _this.camera.getWorldDirection(tmpVector);
12630      cssScene.css('display', tmpVector.y - _this.camera.position.y > 0 ? 'none' : 'block');
12631    });
12632
12633    _this.textureLoader = new _libs.THREE.TextureLoader();
12634
12635    _this.scene.add(new _libs.THREE.AmbientLight(0xD0D0D0)); //0xC0C0C0
12636
12637    _this.light = new _libs.THREE.DirectionalLight(0x404040, 1);
12638    _this.light.position.set(0, 6 * scale, 0);
12639    _this.light.castShadow = false;
12640    // const d = 20*scale;
12641    // this.light.shadow.camera.left = -d;
12642    // this.light.shadow.camera.right = d;
12643    // this.light.shadow.camera.top = d;
12644    // this.light.shadow.camera.bottom = -d;
12645    // this.light.shadow.camera.near = 1*scale;
12646    // this.light.shadow.camera.far = 25*scale;
12647    // this.light.shadow.mapSize.x = 1024;
12648    // this.light.shadow.mapSize.y = 1024;
12649    _this.scene.add(_this.light);
12650
12651    if (useHelpers) {
12652      _this.scene.add(new _libs.THREE.AxisHelper(5));
12653    }
12654
12655    _this.binds = {
12656      onWindowResize: _this.onWindowResize.bind(_this),
12657      animate: _this.animate.bind(_this)
12658    };
12659
12660    (0, _libs.$)(_this.wnd).on('resize', _this.binds.onWindowResize);
12661
12662    _this.mouseEvents = new _ThreeMouseEventConverter2.default(_this.wnd, _this.doc, _this);
12663    _this.touchEvents = new _ThreeTouchEventConverter2.default(_this.wnd, _this.doc, _this);
12664    var filterData = { type: 'mousemove' };
12665    _this.mouseEvents.filter = function (element, e) {
12666      var types = ['mouseenter', 'mouseover', 'mouseleave', 'mouseout'],
12667          contains = function contains(p, c) {
12668        return p === c || _libs.$.contains(p, c);
12669      };
12670      if (e.type === 'mousemove') {
12671        filterData.pageX = e.pageX;
12672        filterData.pageY = e.pageY;
12673      }
12674      return e.relatedTarget && ~types.indexOf(e.type) && contains(element, e.target) && contains(element, e.relatedTarget) ? _extends({}, e, filterData) : e;
12675    };
12676    _this.drag = new _Drag2.default(_this.wnd, _this.doc, _this);
12677
12678    _this.onWindowResize();
12679    _this.animate();
12680    return _this;
12681  }
12682
12683  VisualWorld.prototype.dispose = function dispose() {
12684    delete this.binds.animate;
12685    (0, _libs.$)(this.wnd).off('resize', this.binds.onWindowResize);
12686    this.mouseEvents.dispose();
12687    this.touchEvents.dispose();
12688    this.drag.dispose();
12689    this.controls.dispose();
12690  };
12691
12692  VisualWorld.prototype.width = function width() {
12693    return this.jContainer.width();
12694  };
12695
12696  VisualWorld.prototype.height = function height() {
12697    return this.jContainer.height();
12698  };
12699
12700  VisualWorld.prototype.setExtraLighting = function setExtraLighting(v) {
12701    this.light.intensity = v;
12702  };
12703
12704  VisualWorld.prototype.getOrbit = function getOrbit() {
12705    return this.controls;
12706  };
12707
12708  VisualWorld.prototype.setControlsState = function setControlsState(state) {
12709    this.controls.enabled = state;
12710  };
12711
12712  VisualWorld.prototype.getControlsState = function getControlsState() {
12713    return this.controls.enabled;
12714  };
12715
12716  VisualWorld.prototype.onWindowResize = function onWindowResize() {
12717    var _this2 = this;
12718
12719    if (this.width() > 1 && this.height() > 1) {
12720      var updateCamera = function updateCamera(camera) {
12721        camera.aspect = _this2.width() / _this2.height();
12722        camera.updateProjectionMatrix();
12723      },
12724          updateRenderer = function updateRenderer(renderer) {
12725        renderer.setSize(_this2.width(), _this2.height());
12726      };
12727
12728      updateCamera(this.camera);
12729      updateRenderer(this.renderer);
12730      updateRenderer(this.cssRenderer);
12731
12732      this.dispatchEvent({ type: 'resize' });
12733    } else {
12734      setTimeout(function () {
12735        _this2.onWindowResize();
12736      }, 250);
12737    }
12738  };
12739
12740  VisualWorld.prototype.addObject = function addObject(object) {
12741    this.scene.add(object);
12742  };
12743
12744  VisualWorld.prototype.addCssObject = function addCssObject(object) {
12745    this.cssScene.add(object);
12746  };
12747
12748  VisualWorld.prototype.removeCssObject = function removeCssObject(object) {
12749    this.cssScene.remove(object);
12750  };
12751
12752  VisualWorld.prototype.removeObject = function removeObject(object) {
12753    this.scene.remove(object);
12754  };
12755
12756  VisualWorld.prototype.animate = function animate() {
12757    if (this.binds.animate) {
12758      requestAnimationFrame(this.binds.animate);
12759    }
12760    this.render();
12761  };
12762
12763  VisualWorld.prototype.addRenderCallback = function addRenderCallback(clb) {
12764    this.renderCallbacks.push(clb);
12765  };
12766
12767  VisualWorld.prototype.removeRenderCallback = function removeRenderCallback(clb) {
12768    var i = this.renderCallbacks.indexOf(clb);
12769    if (~i) {
12770      this.renderCallbacks.splice(i, 1);
12771    }
12772  };
12773
12774  VisualWorld.prototype.render = function render() {
12775    var deltaTime = this.clock.getDelta();
12776    this.controls.update(deltaTime);
12777    for (var _iterator = this.renderCallbacks, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
12778      var _ref;
12779
12780      if (_isArray) {
12781        if (_i >= _iterator.length) break;
12782        _ref = _iterator[_i++];
12783      } else {
12784        _i = _iterator.next();
12785        if (_i.done) break;
12786        _ref = _i.value;
12787      }
12788
12789      var clb = _ref;
12790
12791      clb(deltaTime);
12792    }
12793    this.cssRenderer.render(this.cssScene, this.camera);
12794    this.renderer.render(this.scene, this.camera);
12795  };
12796
12797  VisualWorld.prototype.processGeometry = function processGeometry(bufGeometry, mesh) {
12798    mesh.geometry = bufGeometry;
12799    // Obtain a Geometry
12800    var geometry = new _libs.THREE.Geometry().fromBufferGeometry(bufGeometry);
12801    // Merge the vertices so the triangle soup is converted to indexed triangles
12802    geometry.mergeVertices();
12803    // Convert again to BufferGeometry, indexed
12804    var indexedBufferGeom = this.createIndexedBufferGeometryFromGeometry(geometry);
12805    // Create index arrays mapping the indexed vertices to bufGeometry vertices
12806    return this.mapIndices(bufGeometry, indexedBufferGeom);
12807  };
12808
12809  VisualWorld.prototype.createIndexedBufferGeometryFromGeometry = function createIndexedBufferGeometryFromGeometry(geometry) {
12810    var numVertices = geometry.vertices.length;
12811    var numFaces = geometry.faces.length;
12812
12813    var bufferGeom = new _libs.THREE.BufferGeometry();
12814    var vertices = new Float32Array(numVertices * 3);
12815    var indices = new (numFaces * 3 > 65535 ? Uint32Array : Uint16Array)(numFaces * 3);
12816
12817    for (var i = 0; i < numVertices; i++) {
12818      var p = geometry.vertices[i];
12819      var i3 = i * 3;
12820      vertices[i3] = p.x;
12821      vertices[i3 + 1] = p.y;
12822      vertices[i3 + 2] = p.z;
12823    }
12824
12825    for (var _i2 = 0; _i2 < numFaces; _i2++) {
12826      var f = geometry.faces[_i2];
12827      var _i3 = _i2 * 3;
12828      indices[_i3] = f.a;
12829      indices[_i3 + 1] = f.b;
12830      indices[_i3 + 2] = f.c;
12831    }
12832
12833    bufferGeom.setIndex(new _libs.THREE.BufferAttribute(indices, 1));
12834    bufferGeom.addAttribute('position', new _libs.THREE.BufferAttribute(vertices, 3));
12835
12836    return bufferGeom;
12837  };
12838
12839  VisualWorld.prototype.isEqual = function isEqual(x1, y1, z1, x2, y2, z2) {
12840    var delta = 0.000001;
12841    return Math.abs(x2 - x1) < delta && Math.abs(y2 - y1) < delta && Math.abs(z2 - z1) < delta;
12842  };
12843
12844  VisualWorld.prototype.mapIndices = function mapIndices(bufGeometry, indexedBufferGeom) {
12845    // Creates mappedVertices, mappedIndices and mappedAssociation in bufGeometry
12846    var vertices = bufGeometry.attributes.position.array;
12847    var idxVertices = indexedBufferGeom.attributes.position.array;
12848    var indices = indexedBufferGeom.index.array;
12849
12850    var numIdxVertices = idxVertices.length / 3;
12851    var numVertices = vertices.length / 3;
12852
12853    bufGeometry.mappedVertices = idxVertices;
12854    bufGeometry.mappedIndices = indices;
12855    bufGeometry.mappedAssociation = [];
12856
12857    for (var i = 0; i < numIdxVertices; i++) {
12858      var association = [];
12859      bufGeometry.mappedAssociation.push(association);
12860      var i3 = i * 3;
12861      for (var j = 0; j < numVertices; j++) {
12862        var j3 = j * 3;
12863        if (this.isEqual(idxVertices[i3], idxVertices[i3 + 1], idxVertices[i3 + 2], vertices[j3], vertices[j3 + 1], vertices[j3 + 2])) {
12864          association.push(j3);
12865        }
12866      }
12867    }
12868    return { vertices: bufGeometry.mappedVertices, indices: bufGeometry.mappedIndices };
12869  };
12870
12871  VisualWorld.prototype.oneNodePositionCallback = function oneNodePositionCallback(p, q) {
12872    this.position.set(p.x, p.y, p.z);
12873    this.quaternion.set(q.x, q.y, q.z, q.w);
12874  };
12875
12876  VisualWorld.prototype.multyNodePositionCallback = function multyNodePositionCallback(node, p, n) {
12877    var geometry = this.geometry;
12878    var volumePositions = geometry.attributes.position.array;
12879    var volumeNormals = geometry.attributes.normal.array;
12880    var assocVertex = geometry.mappedAssociation[node];
12881
12882    for (var k = 0; k < assocVertex.length; k++) {
12883      var indexVertex = assocVertex[k];
12884      volumePositions[indexVertex] = p.x;
12885      volumeNormals[indexVertex] = n.x;
12886      ++indexVertex;
12887      volumePositions[indexVertex] = p.y;
12888      volumeNormals[indexVertex] = n.y;
12889      ++indexVertex;
12890      volumePositions[indexVertex] = p.z;
12891      volumeNormals[indexVertex] = n.z;
12892    }
12893  };
12894
12895  VisualWorld.prototype.multyNodePositionPostCallback = function multyNodePositionPostCallback() {
12896    var geometry = this.geometry;
12897    geometry.attributes.position.needsUpdate = true;
12898    geometry.attributes.normal.needsUpdate = true;
12899  };
12900
12901  VisualWorld.prototype.pathPositionCallback = function pathPositionCallback(node, p) {
12902    var positions = this.geometry.attributes.position.array;
12903    var i = 3 * node;
12904    positions[i++] = p.x;
12905    positions[i++] = p.y;
12906    positions[i] = p.z;
12907  };
12908
12909  VisualWorld.prototype.pathPositionPostCallback = function pathPositionPostCallback() {
12910    var geometry = this.geometry;
12911    geometry.computeVertexNormals();
12912    geometry.attributes.position.needsUpdate = true;
12913    geometry.attributes.normal.needsUpdate = true;
12914  };
12915
12916  return VisualWorld;
12917}(_libs.THREE.EventDispatcher);
12918
12919exports.default = VisualWorld;
12920
12921/***/ }),
12922/* 67 */
12923/***/ (function(module, exports, __webpack_require__) {
12924
12925"use strict";
12926
12927
12928exports.__esModule = true;
12929
12930var _Controller2 = __webpack_require__(15);
12931
12932var _Controller3 = _interopRequireDefault(_Controller2);
12933
12934function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12935
12936function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
12937
12938function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
12939
12940function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { c
12940onstructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
12941
12942var WidgetController = function (_Controller) {
12943  _inherits(WidgetController, _Controller);
12944
12945  function WidgetController(view) {
12946    _classCallCheck(this, WidgetController);
12947
12948    var _this = _possibleConstructorReturn(this, _Controller.call(this));
12949
12950    _this.view = view;
12951    _this.visible = false;
12952    return _this;
12953  }
12954
12955  WidgetController.prototype.togle = function togle() {
12956    this.visible = !this.visible;
12957    this.fireChange();
12958  };
12959
12960  WidgetController.prototype.hide = function hide() {
12961    this.visible = false;
12962    this.fireChange();
12963  };
12964
12965  WidgetController.prototype.fireChange = function fireChange() {
12966    if (this.onChange) {
12967      this.onChange();
12968    }
12969    this.updateView();
12970  };
12971
12972  WidgetController.prototype.updateView = function updateView() {
12973    if (this.view) {
12974      this.view.setState('widFloatWnd', {
12975        enable: true,
12976        visible: this.visible,
12977        active: false
12978      });
12979    }
12980  };
12981
12982  return WidgetController;
12983}(_Controller3.default);
12984
12985exports.default = WidgetController;
12986
12987/***/ }),
12988/* 68 */
12989/***/ (function(module, exports, __webpack_require__) {
12990
12991"use strict";
12992
12993
12994exports.__esModule = true;
12995
12996var _Target2 = __webpack_require__(21);
12997
12998var _Target3 = _interopRequireDefault(_Target2);
12999
13000function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13001
13002function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
13003
13004function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
13005
13006function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
13007
13008var CircleTarget = function (_Target) {
13009  _inherits(CircleTarget, _Target);
13010
13011  function CircleTarget(x, y, r) {
13012    _classCallCheck(this, CircleTarget);
13013
13014    var _this = _possibleConstructorReturn(this, _Target.call(this));
13015
13016    _this.p = {
13017      x: x,
13018      y: y,
13019      r: r
13020    };
13021    return _this;
13022  }
13023
13024  CircleTarget.prototype.testIntersection = function testIntersection(e, data) {
13025    var res = void 0;
13026    var x = data.x,
13027        y = data.y,
13028        p = this.p;
13029
13030    if ((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y) <= p.r * p.r) {
13031      res = {
13032        target: this,
13033        data: data
13034      };
13035    }
13036    return res;
13037  };
13038
13039  return CircleTarget;
13040}(_Target3.default);
13041
13042exports.default = CircleTarget;
13043
13044/***/ }),
13045/* 69 */
13046/***/ (function(module, exports, __webpack_require__) {
13047
13048"use strict";
13049
13050
13051exports.__esModule = true;
13052
13053var _Target2 = __webpack_require__(21);
13054
13055var _Target3 = _interopRequireDefault(_Target2);
13056
13057var _BaseMathUtils = __webpack_require__(2);
13058
13059var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);
13060
13061function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13062
13063function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
13064
13065function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
13066
13067function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
13068
13069var PolyTarget = function (_Target) {
13070  _inherits(PolyTarget, _Target);
13071
13072  function PolyTarget(poly) {
13073    _classCallCheck(this, PolyTarget);
13074
13075    var _this = _possibleConstructorReturn(this, _Target.call(this));
13076
13077    _this.poly = poly;
13078    return _this;
13079  }
13080
13081  PolyTarget.prototype.testIntersection = function testIntersection(e, p) {
13082    return _BaseMathUtils2.default.isInsidePoly(this.poly, p) ? {
13083      target: this,
13084      data: p
13085    } : undefined;
13086  };
13087
13088  return PolyTarget;
13089}(_Target3.default);
13090
13091exports.default = PolyTarget;
13092
13093/***/ }),
13094/* 70 */
13095/***/ (function(module, exports, __webpack_require__) {
13096
13097/*** IMPORTS FROM imports-loader ***/
13098var define = false;
13099
13100/*!
13101 * jQuery Mousewheel 3.1.13
13102 *
13103 * Copyright jQuery Foundation and other contributors
13104 * Released under the MIT license
13105 * http://jquery.org/license
13106 */
13107
13108(function (factory) {
13109    if ( typeof define === 'function' && define.amd ) {
13110        // AMD. Register as an anonymous module.
13111        define(['jquery'], factory);
13112    } else if (true) {
13113        // Node/CommonJS style for Browserify
13114        module.exports = factory;
13115    } else {
13116        // Browser globals
13117        factory(jQuery);
13118    }
13119}(function ($) {
13120
13121    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
13122        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
13123                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
13124        slice  = Array.prototype.slice,
vendor: 6,625 bytes, lines 13125-13298
13125        nullLowestDeltaTimeout, lowestDelta;
13126
13127    if ( $.event.fixHooks ) {
13128        for ( var i = toFix.length; i; ) {
13129            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
13130        }
13131    }
13132
13133    var special = $.event.special.mousewheel = {
13134        version: '3.1.12',
13135
13136        setup: function() {
13137            if ( this.addEventListener ) {
13138                for ( var i = toBind.length; i; ) {
13139                    this.addEventListener( toBind[--i], handler, false );
13140                }
13141            } else {
13142                this.onmousewheel = handler;
13143            }
13144            // Store the line height and page height for this particular element
13145            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));
13146            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));
13147        },
13148
13149        teardown: function() {
13150            if ( this.removeEventListener ) {
13151                for ( var i = toBind.length; i; ) {
13152                    this.removeEventListener( toBind[--i], handler, false );
13153                }
13154            } else {
13155                this.onmousewheel = null;
13156            }
13157            // Clean up the data we added to the element
13158            $.removeData(this, 'mousewheel-line-height');
13159            $.removeData(this, 'mousewheel-page-height');
13160        },
13161
13162        getLineHeight: function(elem) {
13163            var $elem = $(elem),
13164                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
13165            if (!$parent.length) {
13166                $parent = $('body');
13167            }
13168            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
13169        },
13170
13171        getPageHeight: function(elem) {
13172            return $(elem).height();
13173        },
13174
13175        settings: {
13176            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
13177            normalizeOffset: true  // calls getBoundingClientRect for each event
13178        }
13179    };
13180
13181    $.fn.extend({
13182        mousewheel: function(fn) {
13183            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
13184        },
13185
13186        unmousewheel: function(fn) {
13187            return this.unbind('mousewheel', fn);
13188        }
13189    });
13190
13191
13192    function handler(event) {
13193        var orgEvent   = event || window.event,
13194            args       = slice.call(arguments, 1),
13195            delta      = 0,
13196            deltaX     = 0,
13197            deltaY     = 0,
13198            absDelta   = 0,
13199            offsetX    = 0,
13200            offsetY    = 0;
13201        event = $.event.fix(orgEvent);
13202        event.type = 'mousewheel';
13203
13204        // Old school scrollwheel delta
13205        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }
13206        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }
13207        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }
13208        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
13209
13210        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
13211        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
13212            deltaX = deltaY * -1;
13213            deltaY = 0;
13214        }
13215
13216        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
13217        delta = deltaY === 0 ? deltaX : deltaY;
13218
13219        // New school wheel delta (wheel event)
13220        if ( 'deltaY' in orgEvent ) {
13221            deltaY = orgEvent.deltaY * -1;
13222            delta  = deltaY;
13223        }
13224        if ( 'deltaX' in orgEvent ) {
13225            deltaX = orgEvent.deltaX;
13226            if ( deltaY === 0 ) { delta  = deltaX * -1; }
13227        }
13228
13229        // No change actually happened, no reason to go any further
13230        if ( deltaY === 0 && deltaX === 0 ) { return; }
13231
13232        // Need to convert lines and pages to pixels if we aren't already in pixels
13233        // There are three delta modes:
13234        //   * deltaMode 0 is by pixels, nothing to do
13235        //   * deltaMode 1 is by lines
13236        //   * deltaMode 2 is by pages
13237        if ( orgEvent.deltaMode === 1 ) {
13238            var lineHeight = $.data(this, 'mousewheel-line-height');
13239            delta  *= lineHeight;
13240            deltaY *= lineHeight;
13241            deltaX *= lineHeight;
13242        } else if ( orgEvent.deltaMode === 2 ) {
13243            var pageHeight = $.data(this, 'mousewheel-page-height');
13244            delta  *= pageHeight;
13245            deltaY *= pageHeight;
13246            deltaX *= pageHeight;
13247        }
13248
13249        // Store lowest absolute delta to normalize the delta values
13250        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
13251
13252        if ( !lowestDelta || absDelta < lowestDelta ) {
13253            lowestDelta = absDelta;
13254
13255            // Adjust older deltas if necessary
13256            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
13257                lowestDelta /= 40;
13258            }
13259        }
13260
13261        // Adjust older deltas if necessary
13262        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
13263            // Divide all the things by 40!
13264            delta  /= 40;
13265            deltaX /= 40;
13266            deltaY /= 40;
13267        }
13268
13269        // Get a whole, normalized value for the deltas
13270        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);
13271        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
13272        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
13273
13274        // Normalise offsetX and offsetY properties
13275        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
13276            var boundingRect = this.getBoundingClientRect();
13277            offsetX = event.clientX - boundingRect.left;
13278            offsetY = event.clientY - boundingRect.top;
13279        }
13280
13281        // Add information to the event object
13282        event.deltaX = deltaX;
13283        event.deltaY = deltaY;
13284        event.deltaFactor = lowestDelta;
13285        event.offsetX = offsetX;
13286        event.offsetY = offsetY;
13287        // Go ahead and set deltaMode to 0 since we converted to pixels
13288        // Although this is a little odd since we overwrite the deltaX/Y
13289        // properties with normalized deltas.
13290        event.deltaMode = 0;
13291
13292        // Add event and delta to the front of the arguments
13293        args.unshift(event, delta, deltaX, deltaY);
13294
13295        // Clearout lowestDelta after sometime to better
13296        // handle multiple device types that give different
13297        // a different lowestDelta
13298        // Ex: trackpad = 3 and mouse wheel = 120
vendor: 5,812 bytes, lines 13299-13345
13299        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
13300        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
13301
13302        return ($.event.dispatch || $.event.handle).apply(this, args);
13303    }
13304
13305    function nullLowestDelta() {
13306        lowestDelta = null;
13307    }
13308
13309    function shouldAdjustOldDeltas(orgEvent, absDelta) {
13310        // If this is an older event and the delta is divisable by 120,
13311        // then we are assuming that the browser is treating this as an
13312        // older mouse wheel event and that we should divide the deltas
13313        // by 40 to try and get a more usable deltaFactor.
13314        // Side note, this actually impacts the reported scroll distance
13315        // in older browsers and can cause scrolling to be slower than native.
13316        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
13317        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
13318    }
13319
13320}));
13321
13322
13323
13324/***/ }),
13325/* 71 */
13326/***/ (function(module, exports, __webpack_require__) {
13327
13328// stats.js - http://github.com/mrdoob/stats.js
13329(function(f,e){ true?module.exports=e():"function"===typeof define&&define.amd?define(e):f.Stats=e()})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?"block":"none";l=a}var l=0,c=document.createElement("div");c.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000";c.addEventListener("click",function(a){a.preventDefault();
13330u(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel("FPS","#0ff","#002")),h=e(new f.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var t=e(new f.Panel("MB","#f08","#201"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/
133311048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement("canvas");q.width=r;q.height=h;q.style.cssText="width:80px;height:48px";var b=q.getContext("2d");b.font="bold "+9*a+"px Helvetica,Arial,sans-serif";b.textBaseline="top";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);
13332b.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+" "+e+" ("+g(c)+"-"+g(k)+")",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});
13333
13334
13335/***/ }),
13336/* 72 */
13337/***/ (function(module, exports, __webpack_require__) {
13338
13339__webpack_require__(23);
13340module.exports = __webpack_require__(22);
13341
13342
13343/***/ })
13344/******/ ]);
13345//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgYjJiNmFmNDM0NTMzODlmMmE2YjgiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2xpYnMuanMiLCJ3ZWJwYWNrOi8vLy4vanMvbGlicy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9CYXNlTWF0aFV0aWxzLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL01hdGhVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9VdGlscy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9JbWFnZUJhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvRXZlbnRDb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvR3JhcGhVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9JbWFnZUZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9Cb29rUHJvcHNCdWlsZGVyLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvU2hlZXRCbG9jay5qcyIsIndlYnBhY2s6Ly8vLi9qcy9wcm9wcy9ib29rLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL0NTUzNEUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvQ1NTTGF5ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvQ2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvQ29udHJvbGxlci5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9DdXN0b21FdmVudENvbnZlcnRlci5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9GaW5kZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvUGRmLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL1RocmVlRXZlbnRDb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy90YXJnZXRzL1RhcmdldC5qcyIsIndlYnBhY2s6Ly8vLi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9BdXRvTmF2aWdhdG9yLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvQmluZGVyLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvQm9vay5qcyIsIndlYnBhY2s6Ly8vLi9qcy9jbGFzc2VzL0Jvb2tDb250cm9sbGVyLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvQm9va1ByaW50ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9Cb29rVmlldy5qcyIsIndlYnBhY2s6Ly8vLi9qcy9jbGFzc2VzL0NsYkJvb2tQcm9wc0J1aWxkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9Db3Zlci5qcyIsIndlYnBhY2s6Ly8vLi9qcy9jbGFzc2VzL0Nzc0xheWVyc01hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9QYWdlTWFuYWdlci5qcyIsIndlYnBhY2s6Ly8vLi9qcy9jbGFzc2VzL1BkZkJvb2tQcm9wc0J1aWxkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9QZGZMaW5rc0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9TZWFyY2hFbmdpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9TaGVldENzc0xheWVyLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvU2hlZXRQaHlzaWNzLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvU291bmRzRW52aXJvbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9qcy9jbGFzc2VzL1RvY0NvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kZWxzL3NoZWV0QmxvY2suanMiLCJ3ZWJwYWNrOi8vLy4vanMvcHJvcHMvYm9va0Nvb
13345nRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvQmxhbmtJbWFnZS5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9Cb29rbWFya3MuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvRGV0ZWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvRG9jTW91c2VTaW11bGF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvRG9tMkltYWdlLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL0RyYWcuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvRXZlbnRzVG9BY3Rpb25zLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL0Z1bGxTY3JlZW4uanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvSW50ZXJhY3RpdmVJbWFnZS5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9Mb2FkaW5nQW5pbWF0aW9uLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL0xvYWRpbmdDb250cm9sbGVyLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL01vdXNlRXZlbnRDb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvT2JqZWN0M0RXYXRjaGVyLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL09yYml0LmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL1BkZkltYWdlLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL1NlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9TdGF0aWNJbWFnZS5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9UZXh0dXJlQW5pbWF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVNb3VzZUV2ZW50Q29udmVydGVyLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL1RocmVlVG91Y2hFdmVudENvbnZlcnRlci5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9UaHVtYm5haWxzLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL1RvdWNoRXZlbnRDb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvVmlldy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9WaXN1YWxXb3JsZC5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9XaWRnZXRDb250cm9sbGVyLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL3RhcmdldHMvQ2lyY2xlVGFyZ2V0LmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL3RhcmdldHMvUG9seVRhcmdldC5qcyIsIndlYnBhY2s6Ly8vLi4vfi9qcXVlcnktbW91c2V3aGVlbC9qcXVlcnkubW91c2V3aGVlbC5qcyIsIndlYnBhY2s6Ly8vLi4vfi9zdGF0cy5qcy9idWlsZC9zdGF0cy5taW4uanMiXSwibmFtZXMiOlsiXyQiLCJHTE9CQUxfTElCUyIsIndpbmRvdyIsImpRdWVyeSIsInJlcXVpcmUiLCJfaHRtbDJjYW52YXMiLCJodG1sMmNhbnZhcyIsIl9USFJFRSIsIlRIUkVFIiwiX1JlYWN0IiwiUmVhY3QiLCJfUmVhY3RET00iLCJSZWFjdERPTSIsIl9QREZKUyIsIlBERkpTIiwiX3RyIiwicyIsImliZXJlemFuc2t5IiwidHIiLCIkIiwiRkIzRF9MT0NBTEUiLCJkaWN0aW9uYXJ5IiwiQmFzZU1hdGhVdGlscyIsInN1bTEiLCJrYSIsImEiLCJrYiIsImIiLCJzdW0yIiwic3VtMyIsInN1bTQiLCJyazQiLCJkeSIsInQiLCJkdCIsInkiLCJzdW0iLCJsZW5ndGgiLCJrMSIsImsyIiwiazMiLCJrNCIsImV4dHJhcG9sYXRlTGluZWFyIiwieCIsInhpIiwiaW50ZXJwb2xhdGVMaW5lYXIiLCJ5aSIsInJldmVyc2UiLCJjYWxjU2NhbGUiLCJzcmNXIiwic3JjSCIsImRzdFciLCJkc3RIIiwiTWF0aCIsIm1pbiIsIm11bE0iLCJyIiwiaSIsInB1c2giLCJqIiwiayIsInRyYW5zTSIsIm0iLCJtYXQiLCJkYXRhIiwiZGlzcCIsIk0iLCJwcmVkaWN0IiwibnVtIiwibCIsIkQiLCJhbSIsImJtIiwidGEiLCJkIiwicCIsInYiLCJyb3VuZCIsImluZGV4T2YiLCJnZXRVbmlxdWUiLCJjZWlsIiwicmFuZG9tIiwic2V0U3BsaW5lUG9pbnRzIiwic3BsaW5lIiwicHMiLCJwb2ludHMiLCJjb25zb2xlIiwid2FybiIsInNldCIsInoiLCJtYXBsMkwiLCJscyIsImxlbiIsIm4iLCJmIiwiZEwiLCJMIiwiYWJzIiwiZGV0MiIsImMiLCJzb2x2ZTJMaW4iLCJhMSIsImIxIiwiYTIiLCJiMiIsInJlcyIsImVwcyIsImR4IiwiaXNJbnNpZGVQb2x5IiwiZG9uZSIsImN0IiwidjJkaXN0IiwibnAiLCJybiIsInAwIiwicDEiLCJpcCIsIm1heCIsInRuIiwiaXNJbnNpZGVDb252UG9seSIsInNnIiwidjJsZW4iLCJ2MiIsInNxcnQiLCJ2MjEiLCJ2MjIiLCJjb21wdXRlU3F1YXJlIiwiY29tcHV0ZUludGVycENvZWZzIiwidHJpIiwiY29lZnMiLCJNYXRoVXRpbHMiLCJzcGxpdFNwbGluZSIsIk4iLCJvIiwiZGwiLCJnZXRQb2ludCIsInYxIiwiZGlzdGFuY2VUbyIsImNvcHkiLCJnZXRMaW5lYXJJbmRlY2VzIiwiZGVsIiwiZERlbCIsInJlZmluZVBvbHkiLCJwb2x5IiwibWF4RGwiLCJWZWN0b3IyIiwiVmVjdG9yMyIsIlV0aWxzIiwibm9ybWFsaXplVXJsIiwidXJsIiwic3BsaXQiLCJyZXBsYWNlIiwiYmFzZSIsImxvY2F0aW9uIiwiaHJlZiIsImpvaW4iLCJleHRlbmRzIiwiZGVyIiwibmFtZSIsImhhc093blByb3BlcnR5IiwiZGVmYXVsdENtcCIsImxvd2VyQm91bmQiLCJjbXAiLCJoIiwibWlkIiwiZmxvb3IiLCJJbWFnZUJhc2UiLCJjb250ZXh0Iiwid2lkdGgiLCJoZWlnaHQiLCJjb2xvciIsInduZCIsImRvYyIsImVsZW1lbnQiLCJib2R5IiwicmVuZGVyQ2FudmFzIiwiY3R4IiwicmVuZGVyQ2FudmFzQ3R4IiwicmVzVyIsInJlc0giLCJzZXRSZXNvbHV0aW9uIiwiZGlzcG9zZSIsInJlbmRlckJsYW5rUGFnZSIsImJlZ2luUGF0aCIsImZpbGxTdHlsZSIsIkdyYXBoVXRpbHMiLCJjb2xvcjJSZ2JhIiwicmVjdCIsImZpbGwiLCJyZW5kZXJJbWFnZSIsImltYWdlIiwicHVzaEN0eCIsImRyYXdJbWFnZSIsInBvcEN0eCIsIm5vcm1Ub0NvbnYiLCJyZW5kZXJIaXQiLCJtb3ZlVG8iLCJsaW5lVG8iLCJjbG9zZVBhdGgiLCJzYXZlIiwic2NhbGUiLCJyZXN0b3JlIiwicmVuZGVyTm90Rm91bmRQYWdlIiwiZmluaXNoUmVuZGVyIiwib25DaGFuZ2UiLCJmaW5pc2hMb2FkIiwib25Mb2FkIiwic3RhcnRSZW5kZXIiLCJnZXRTaW11bGF0ZWREb2MiLCJ1bmRlZmluZWQiLCJnZXRDb250ZXh0IiwiRXZlbnRDb252ZXJ0ZXIiLCJlbmFibGVkIiwic2V0RW5hYmxlIiwidmwiLCJtQ2FwT2JqZWN0Iiwibm90aWZ5IiwiRXZlbnQiLCJtSG92T2JqZWN0IiwiZ2V0Q2FsbGJhY2siLCJvYmplY3QiLCJlIiwidHlwZSIsImNhbGxiYWNrIiwicHJvcHMiLCJ2aWV3IiwiakUiLCJjb252ZXJ0IiwiZmlsdGVyIiwi
13345Z2V0T2JqZWN0IiwiY29udmVydFRvdWNoIiwiY29udmVydE1vdXNlIiwidENhcE9iamVjdCIsInRlc3QiLCJpbnRlcnBvbGF0ZTAxIiwieTEiLCJ5MiIsImdldENvbG9yQnl0ZXMiLCJpbnZlcnNlQ29sb3IiLCJicyIsImlicyIsIm5icyIsImJ5dGVzMkNvbG9yIiwiYnl0ZXMyUmdiYSIsIkltYWdlRmFjdG9yeSIsImNhY2hlIiwiQ2FjaGUiLCJidWlsZCIsImluZm8iLCJ3aWR0aFRleGVscyIsImhlaWdodFRleGVscyIsImluamVjdG9yIiwiSW50ZXJhY3RpdmVJbWFnZSIsInNyYyIsIlN0YXRpY0ltYWdlIiwiUGRmSW1hZ2UiLCJCbGFua0ltYWdlIiwiQm9va1Byb3BzQnVpbGRlciIsIm9uUmVhZHkiLCJkZWZhdWx0cyIsImNhbGNTaXplIiwiY2FsY1RleGVscyIsInNoZWV0IiwiY2FsY1Byb3BzIiwiY292ZXIiLCJwYWdlIiwiY2FsY1NoZWV0cyIsInBhZ2VzIiwic2hlZXRzIiwiZ2V0U2hlZXRzIiwiZ2V0UHJvcHMiLCJnZXRQYWdlQ2FsbGJhY2siLCJiaW5kcyIsInBhZ2VDYWxsYmFjayIsInJlYWR5IiwiU2hlZXRCbG9jayIsInZpc3VhbCIsImZpcnN0IiwibGFzdCIsImFuZ2xlIiwic3RhdGUiLCJsb2FkZWRQb2ludHMiLCJsb2FkUG9pbnRzIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsInNoYXBlIiwicFNwbGluZSIsIlNwbGluZSIsImludGVycG9sYXRpb25Qb2ludHMiLCJpU3BsaW5lIiwic2hlZXRCbG9jayIsInJlc1giLCJhU3BsaW5lcyIsImdlb21ldHJ5IiwiY2xvbmUiLCJzaWRlRmFjZXMiLCJmYWNlcyIsInNpZGVUZXh0dXJlIiwiVGV4dHVyZSIsIndyYXBUIiwiUmVwZWF0V3JhcHBpbmciLCJyZXBlYXQiLCJuZWVkc1VwZGF0ZSIsIm1hdGVyaWFscyIsIk1lc2hQaG9uZ01hdGVyaWFsIiwic2V0VGV4dHVyZSIsIm1lc2giLCJNZXNoIiwiTWVzaEZhY2VNYXRlcmlhbCIsImNhc3RTaGFkb3ciLCJyZWNlaXZlU2hhZG93IiwidGhyZWUiLCJ1c2VyRGF0YSIsInNlbGYiLCJtYXJrZXJzIiwibWFya2VyIiwidXNlIiwidmVydGljZXMiLCJpcyIsIkFycmF5IiwiYXBwbHkiLCJfIiwiVGhyZWVVdGlscyIsImNyZWF0ZU1hcmtlciIsInNpemUiLCJ2ZXJ0ZXgiLCJhZGQiLCJjb3JuZXIiLCJtYXhEaXN0YW5jZSIsIk9aIiwiYXhpcyIsImdldFNpemUiLCJnZXRUb3BDZXJuZXJzIiwib2ZmIiwiUEkiLCJyZXNaIiwiZ2V0VG9wU2l6ZSIsInZzIiwiZ2V0VG9wV29ybGRSb3RhdGlvbiIsInEiLCJnZXRUb3BXb3JsZFBvc2l0aW9uIiwidmkiLCJsb2NhbFRvV29ybGQiLCJnZXRJbnRlcnBvbGF0aW9uUG9pbnRzIiwiaW5kcyIsIm1vZCIsIksiLCJ3YXZlIiwiY2xvc2VkQW5nbGUiLCJiaW5kZXJUdXJuIiwib3BlbmVkQW5nbGUiLCJjbG9zZWRJbnRlcnBvbGF0aW9uSW5kZWNlcyIsImZsYXRJbnRlcnBvbGF0aW9uSW5kZWNlcyIsImdldFBvaW50c0F0QW5nbGUiLCJvcGVuZWRJbnRlcnBvbGF0aW9uSW5kZWNlcyIsImhsIiwiaHIiLCJvZmZzZXQiLCJkZXB0aCIsImluQW5nbGUiLCJoQW5nbGUiLCJnZXRQb2ludHNBdEFuZ2xlQW5kSHMiLCJsZWZ0IiwicmlnaHQiLCJpbnZlcnNlIiwic2V0UG9pbnRzIiwieXMiLCJyZXNZIiwicGxhbmUiLCJQbGFuZSIsIm5vcm1hbCIsInBsYW5lT2Zmc2V0IiwiZmxleGlibGVDb3JuZXIiLCJwcm9qIiwic2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQiLCJub3JtYWxpemUiLCJwcm9qZWN0UG9pbnQiLCJzdWIiLCJkaXN0YW5jZSIsImQyQW5nbGUiLCJjb3JuZXJEZXZpYXRpb24iLCJleHAiLCJiZW5kaW5nIiwiYXBwbHlBeGlzQW5nbGUiLCJwb2ludCIsInBvc2l0aW9uIiwiY29tcHV0ZVZlcnRleE5vcm1hbHMiLCJjb21wdXRlQm91bmRpbmdTcGhlcmUiLCJ2ZXJ0aWNlc05lZWRVcGRhdGUiLCJtYXJrdXAiLCJjb21wdXRlVmVydGljZXMiLCJnZXRQb2ludHNBdEhzIiwiaHMiLCJibCIsInAyIiwiZHAiLCJsbiIsInNwIiwic2luIiwiY29zIiwibnBzIiwiYW5nbGVzIiwieHBzIiwieXBzIiwiaW50ZXJwb2xhdGUiLCJncmF2aXR5IiwiY2FjaGVkUGFnZXMiLCJyZW5kZXJJbmFjdGl2ZVBhZ2VzIiwicmVuZGVySW5hY3RpdmVQYWdlc09uTW9iaWxlIiwicmVuZGVyV2hpbGVGbGlwcGluZyIsInBhZ2VzRm9yUHJlZGljdGluZyIsInByZWxvYWRQYWdlcyIsInJ0bCIsInN0YXJ0VmVsb2NpdHkiLCJmbGV4aWJpbGl0eSIsImJpbmRlclRleHR1cmUiLCJwYWRkaW5nIiwibWFzcyIsImNzc0xheWVyUHJvcHMiLCJDU1MzRE9iamVjdCIsInN0eWxlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsIk9iamVjdDNEIiwiQ1NTM0RTcHJpdGUiLCJDU1MzRFJlbmRlcmVyIiwiX3dpZHRoIiwiX2hlaWdodCIsIl93aWR0aEhhbGYiLCJfaGVpZ2h0SGFsZiIsIm1hdHJpeCIsIk1hdHJpeDQiLCJjYW1lcmEiLCJmb3YiLCJvYmplY3RzIiwiZG9tRWxlbWVudCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm92ZXJmbG93IiwiY2FtZXJhRWxlbWVudCIsIldlYmtpdFRyYW5zZm9ybVN0eWxlIiwiTW96VHJhbnNmb3JtU3R5bGUiLCJ0cmFuc2Zvcm1TdHlsZSIsImFwcGVuZENoaWxkIiwiaXNJRSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInNldENsZWFyQ29sb3IiLCJzZXRTaXplIiwiZXBzaWxvbiIsInZhbHVlIiwiZ2V0Q2FtZXJhQ1NTTWF0cml4IiwiZWxlbWVudHMiLCJnZXRPYmplY3RDU1NNYXRyaXgiLCJjYW1lcmFDU1NNYXRyaXgiLCJtYXRyaXgzZCIsInJlbmRlck9iamVjdCIsIm1hdHJpeFdvcmxkSW52ZXJzZSIsInRyYW5zcG9zZSIsImNvcHlQb3NpdGlvbiIsIm1hdHJpeFdvcmxkIiwiY2FjaGVkU3R5bGUiLCJpZCIsIldlYmtpdFRyYW5zZm9ybSIsIk1velRyYW5zZm9ybSIsInRyYW5zZm9ybSIsImRpc3RhbmNlVG9DYW1lcmFTcXVhcmVkIiwiZ2V0RGlzdGFuY2VUb1NxdWFyZWQiLCJjaGlsZHJlbiIsIm9iamVjdDEiLCJvYmplY3QyIiwic2V0RnJvbU1hdHJpeFBvc2l0aW9uIiwiZGlzdGFuY2VUb1NxdWFyZWQiLCJ6T3JkZXIiLCJzY2VuZSIsIm9yZGVyIiwic29ydCIsInpNYXgiLCJ0cmF2ZXJzZSIsImluZGV4IiwiekluZGV4IiwicmVuZGVyIiwicHJvamVjdGlvbk1hdHJpeCIsIldlYmtpdFBlcnNwZWN0aXZlIiwiTW96UGVyc3BlY3RpdmUiLCJwZXJzcGVjdGl2ZSIsInVwZGF0ZU1hdHJpeFdvcmxkIiwicGFyZW50IiwiX0NTUzNET2JqZWN0IiwiX0NTUzNEU3ByaXRlIiwiQ1NTTGF5ZXIiLCJpbml0IiwiZGVsYXkiLCJhcHBlbmRUbyIsImhlYWQiLCJyZW1vdmUiLCJqQ29udGFpbmVyIiwid2lkdGhQeHMiLCJoZWlnaHRQeHMiLCJzZXREYXRhIiwiY2FsbEludGVybmFsIiwiZXJyb3IiLCJjbGVhckludGVybmFscyIsIm
13345NzcyIsImh0bWwiLCJqcyIsImV2YWwiLCJwZW5kZWRDYWxsIiwiY2xiIiwidGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsInNldFRpbWVvdXQiLCJpc0hpZGRlbiIsImhhc0NsYXNzIiwiaGlkZSIsImFkZENsYXNzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzaG93IiwicmVtb3ZlQ2xhc3MiLCJtYXhTaXplIiwiSW5maW5pdHkiLCJzaXplb2YiLCJjb3VudFNpemVvZiIsIm9zIiwiTWFwIiwiZm9yRWFjaCIsImdldCIsImxvY2tlZCIsImRlbGV0ZSIsImZyZWVTcGFjZSIsImFyciIsImtleSIsInJlY3Vyc2lvblNpemVvZiIsImdldFRpbWVzdGFtcCIsInB1dCIsIkNvbnRyb2xsZXIiLCJoYW5kbGVEZWZhdWx0IiwiZGlzcGF0Y2hBc3luYyIsInRoZW4iLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnREaXNwYXRjaGVyIiwiQ3VzdG9tRXZlbnRDb252ZXJ0ZXIiLCJjdXN0b21UZXN0IiwiZURvYyIsImN1c3RvbXMiLCJ0YXJnZXQiLCJhZGRDdXN0b20iLCJjdXN0b20iLCJ0ZXN0SW50ZXJzZWN0aW9uIiwiRmluZGVyIiwiaXNEZWxpbWV0ciIsIkRFTElNSVRFUiIsIm1lcmdlIiwiYXMiLCJzdHJzIiwiY2hhckF0Iiwic3RyIiwiYWRkSGl0cyIsImNoYXJzIiwicGF0dGVybiIsImRlbGltZXRlciIsImhpdHMiLCJhZGRDb250ZXh0IiwiZGVscyIsImNvbnRleHRMZW5ndGgiLCJwcmV2RGVscyIsImNvbnRleHRzIiwic3Vic3RyIiwiZ2V0SGl0cyIsImdldENvbnRleHRzIiwidG9Mb3dlckNhc2UiLCJsc3RyIiwid29ya2VyU3JjIiwiUERGSlNfTE9DQUxFIiwiR0xPQkFMX1BBVEhTIiwicGRmSnNXb3JrZXIiLCJjTWFwVXJsIiwicGRmSnNDTWFwVXJsIiwiY01hcFBhY2tlZCIsImRpc2FibGVBdXRvRmV0Y2giLCJkaXNhYmxlU3RyZWFtIiwiaW1hZ2VSZXNvdXJjZXNQYXRoIiwiZXh0ZXJuYWxMaW5rVGFyZ2V0IiwiTGlua1RhcmdldCIsIkJMQU5LIiwiUGRmIiwibG9hZGluZ1Byb2dyZXNzIiwiaGFuZGxlclF1ZXVlIiwicHJvZ3Jlc0RhdGEiLCJsb2FkZWQiLCJ0b3RhbCIsInRhc2siLCJnZXREb2N1bWVudCIsInJhbmdlQ2h1bmtTaXplIiwib25Qcm9ncmVzcyIsImN1ciIsIm9sZCIsImlzTmFOIiwiaGFuZGxlciIsIm51bVBhZ2VzIiwiYWxsIiwiZ2V0UGFnZSIsImNhdGNoIiwiZG91YmxlZFBhZ2VzIiwiZ2V0UGFnZVNpemUiLCJnZXRQYWdlVHlwZSIsImdldFBhZ2VzTnVtIiwic3BsaWNlIiwic2V0TG9hZGluZ1Byb2dyZXNzQ2xiIiwiZ2V0SGFuZGxlciIsIlRocmVlRXZlbnRDb252ZXJ0ZXJGcyIsIm9iamVjdHNUZXN0Iiwib2JqZWN0c0FuZEZhY2VzVGVzdCIsImZhY2UiLCJtYXRlcmlhbEluZGV4IiwidmlzdWFsV29ybGQiLCJjb29yZHMiLCJyYXljYXN0ZXIiLCJ0aHJlZXMiLCJhZGRUaHJlZSIsInJlbW92ZVRocmVlIiwic2V0Q29vcmRzRnJvbUV2ZW50Iiwic2V0RnJvbUNhbWVyYSIsImludGVyc2VjdHMiLCJpbnRlcnNlY3RPYmplY3RzIiwidmVydGljZXMyVVZzIiwiaW5kZWNlcyIsImNvbnZlckNsYiIsInZpcyIsImNvbXB1dGVGYWNlVmVydGV4VXZzIiwidXZzIiwidXZzaSIsImZhY2VWZXJ0ZXhVdnMiLCJTcGhlcmVHZW9tZXRyeSIsImZpbmRVdlRyaXMiLCJmb3VuZCIsImZpbmRJbnRlcm5hbFZlcnRpY2VzIiwidmVydGV4Tm9ybWFscyIsInZhbHVlcyIsIlRhcmdldCIsImZuIiwiRmxpcEJvb2siLCJvcHRpb25zIiwicGRmTGlua3NIYW5kbGVyIiwic291bmRzIiwidG9jQ3RybCIsInRodW1ibmFpbHMiLCJib29rbWFya3MiLCJjdHJsIiwiYm9va1ByaW50ZXIiLCJib29rIiwicHJvcHNCdWlsZGVyIiwiYm9va0J1aWxkZXIiLCJwZW5kaW5nRGlzcG9zZSIsIkJvb2tWaWV3IiwiRGV0ZWN0b3IiLCJ3ZWJnbCIsImFkZEdldFdlYkdMTWVzc2FnZSIsImdldFZpZXciLCJsb2FkaW5nQ3RybCIsIkxvYWRpbmdDb250cm9sbGVyIiwicHJvZ3Jlc3MiLCJWaXN1YWxXb3JsZCIsImdldENvbnRhaW5lciIsIm93bmVyRG9jdW1lbnQiLCJkZWZhdWx0VmlldyIsInByb3BlcnRpZXNDYWxsYmFjayIsIkJvb2siLCJCb29rUHJpbnRlciIsInRlbXBsYXRlIiwicHJpbnRTdHlsZSIsIkJvb2tDb250cm9sbGVyIiwiY29udHJvbHNQcm9wcyIsInNldEluamVjdG9yIiwidyIsImJvb2tDdHJsIiwiYWRkSGFuZGxlciIsInNldFByaW50ZXIiLCJzZWFyY2giLCJTZWFyY2giLCJnZXRTZWFyY2hWaWV3IiwiZ2V0UGFnZXMiLCJvblF1ZXJ5Iiwic2V0UXVlcnkiLCJiaW5kIiwic2V0UmVzdWx0cyIsInJlc3VsdHMiLCJsYXN0UGFnZSIsIlRodW1ibmFpbHMiLCJnZXRUaHVtYm5haWxzVmlldyIsImtXdG9IIiwiVG9jQ29udHJvbGxlciIsInNldFRodW1ibmFpbHMiLCJzZXRTZWFyY2giLCJzZXRUb2NDdHJsIiwiUGRmTGlua3NIYW5kbGVyIiwiaGFuZGxlRXZlbnQiLCJnZXRPdXRsaW5lIiwib3V0bGluZSIsIkJvb2ttYXJrcyIsImdldEJvb2ttYXJrc1ZpZXciLCJzZXRCb29rbWFya3MiLCJwZGZMaW5rcyIsInNldEhhbmRsZXIiLCJTb3VuZHNFbnZpcm9tZW50Iiwic2V0U291bmRzIiwic3Vic2NyaWJlRmxpcHMiLCJBdXRvTmF2aWdhdG9yIiwiYXV0b05hdmlnYXRpb24iLCJwZGYiLCJQZGZCb29rUHJvcHNCdWlsZGVyIiwic2V0UHJvZ3Jlc3MiLCJDbGJCb29rUHJvcHNCdWlsZGVyIiwiY29udGFpbmVycyIsImF0dHIiLCJwcm90b3R5cGUiLCJUeXBlRXJyb3IiLCJPIiwic3RhcnQiLCJhcmd1bWVudHMiLCJyZWxhdGl2ZVN0YXJ0IiwiZW5kIiwicmVsYXRpdmVFbmQiLCJmaW5hbCIsImZpbmQiLCJkZWZpbmVQcm9wZXJ0eSIsInByZWRpY2F0ZSIsImxpc3QiLCJ0aGlzQXJnIiwiY2FsbCIsImZpbmRJbmRleCIsIlJlZ0V4cCIsImVzY2FwZSIsIlN0cmluZyIsInJlcGxhY2VBbGwiLCJ1cmxQYXJhbSIsIm5hdmlnYXRlcyIsInBhZ2VOIiwiZmIzZCIsImluc3RhbmNlcyIsImdvVG9QYWdlIiwiZ2V0UGFnZU51bWJlciIsImdldFBhcmFtZXRlckJ5TmFtZSIsInJlZ2V4IiwiZXhlYyIsImRlY29kZVVSSUNvbXBvbmVudCIsIm51bWJlciIsInBhcnNlSW50IiwiQmluZGVyIiwiYmFja1NpemUiLCJiYWNrRyIsIkJveEdlb21ldHJ5IiwiYmFja00iLCJ0ZXh0dXJlTG9hZGVyIiwibG9hZCIsInRleHR1cmUiLCJzZXRIZXgiLCJtaW5GaWx0ZXIiLCJMaW5lYXJGaWx0ZXIiLCJiYWNrIiwiYmFja1JUIiwiYmFja1JSIiwiYmFja0xUIiwiYmFja0xSIiwibGVmdFBpdm90IiwicmlnaHRQaXZvdCIsInRyMSIsInF1YXRlcm5pb24iLCJzZXRGcm9tQXhpc0FuZ2xlIiwidHIyIiwic2V0TGVmdCIsInNldFJpZ2h0Iiwiam9pbkxlZnRDb3ZlciIsImRpc2Nvbm5lY3RMZWZ0Q292ZXIiLCJqb2luUmlnaHRDb3ZlciIsImRpc2Nvbm5lY3RSaWdodENvdmVyIiwibW91c2VDb250cm9sbGVyIiwicHJlcGFyZVByb3BzIiwiem9vbSIsInNpbmdsZVBhZ2UiLCJhdXRvUmVzb2x1dGlvbiIsImVuYWJsZSIsInBhZ2VNYW5hZ2VyIiwiUGFnZU1hbmFnZXIiLCJsYXllck1hbmFnZXIiLCJDc3NMYXllcnNNYW5hZ2VyIiwic2VhcmNoRW5naW5lIiwiU2VhcmNoRW5naW5lIiwib25QYWdlSGl0c0NoYW5nZWQiLCJxdWVyeSIsInJlZnJlc2hQYWdlUXVlcnkiLCJiaW5kZXIiLCJsZWZ0Q292ZXIiLCJDb3ZlciIsInNldExlZnRDb3ZlclRleHR1cmUiLCJzdWJzY3JpYmVTaGVldEJsb2NrIiwicmlnaHRDb3ZlciIsInNldFJpZ2h0Q292ZXJUZXh0dXJlIiwidGhyZWVTaGVldEJsb2NrcyIsInNoZWV0QmxvY2tzIiwiYWRkU2hlZXRCbG9jayIsInNldFBhZ2VUZXh0dXJlIiwibGFzdE1vdXNlUG9zIiwic2hlZXRQaHlzaWNzIiwiU2hlZXRQaHlzaWNzIiwidXBkYXRlIiwicGFnZVgiLCJwYWdlWSIsImFkZFJlbmRlckNhbGxiYWNrIiwib24iLCJvblBpY2tDYWxsYmFjayIsImRyYWciLCJvbkRyYWdDYWxsYmFjayIsIm9uUmVsZWFzZUNhbGxiYWNrIiwiZHJhZ0FuZ2xlIiwidG1wIiwiYm94cyIsIkJveDMiLCJhZGRPYmplY3QiLCJyZWZyZXNoWm9vbSIsIm5vdGlmeUJlZm9yZUFuaW1hdGlvbiIsIm5vdGlmeUFmdGVyQW5pbWF0aW9uIiwicmVtb3ZlT2JqZWN0IiwicmVtb3ZlUmVuZGVyQ2FsbGJhY2siLCJyZW1vdmVTaGVldEJsb2NrcyIsInJlbW92ZVNoZWV0QmxvY2siLCJzZXRBdXRvUmVzb2x1dGlvbiIsInNldFpvb20iLCJpc1Byb2Nlc3NpbmciLCJzZXRGbGlwUHJvZ3Jlc3NDbGIiLCJmbGlwUHJvZ3Jlc3NDbGIiLCJpc0FjdGl2ZVBhZ2UiLCJnZXRCbG9ja0J5UGFnZSIsImJsb2NrIiwiZ2V0QmxvY2tQYWdlcyIsInJhbmdlIiwiZ2V0VG9wUGFnZXMiLCJnZXRQYWdlU3RhdGUiLCJlbmFibGVMb2FkaW5nQW5pbWF0aW9uIiwiZ2V0TGVmdEZsaXBwaW5nIiwiZ2V0UmlnaHRGbGlwcGluZyIsImdldENsb3NlZEJsb2NrQW5nbGUiLCJwaHlzaWNJZCIsImdldFBhcmFtZXRyIiwiZmxpcExlZnQiLCJwcm9ncmVzc0NsYiIsImNvbm5lY3RQaHlzaWNzIiwic2V0U2hlZXRCbG9ja3MiLCJzcGxpdFNoZWV0QmxvY2siLCJmaW5pc2hBbmltYXRpb25DbGIiLCJmbGlwUmlnaHQiLCJjbGVhckhvdmVySW5mbyIsInR1cm5PbkV2ZW50cyIsImhvdmVySW5mbyIsImZvcmNlIiwiY29ybmVyRm9yY2UiLCJ4U2VnbWVudCIsInNldEZyb21PYmplY3QiLCJ1bmlvbiIsImNvbXB1dGVUYXJnZXQiLCJzZWciLCJ1diIsImNvcm5lclRhcmdldCIsImRyYWdGb3JjZUNsYiIsImdldERyYWdDb3JuZXJGb3JjZUNsYiIsImRyYWdJbmZvIiwidHVybk9mZkV2ZW50cyIsImdldEZsaXBwaW5nIiwiZmxpcCIsImVuYWJsZU1vdXNlIiwiY29ybmVyQ2FsbGJhY2siLCJwZW5kaW5ncyIsImhvdmVyQW5nbGUiLCJob3ZlciIsInBvc3NpYmxlIiwibmV4dEJsb2NrIiwic2V0UGFyYW1ldHIiLCJ
13345nZXRUYXJnZXRGb3JjZUNsYiIsImhvdmVyQ29ybmVyRm9yY2VDbGIiLCJjb3JuZXJDbGlja0RhdGEiLCJwb3ciLCJldmVudENvbnZlcnRlciIsIkNpcmNsZVRhcmdldCIsIm1vdXNlQ2FsbGJhY2siLCJ0cmFuc2ZlckV2ZW50VG9UZXh0dXJlIiwidG91Y2hDYWxsYmFjayIsIm1vdXNlRXZlbnRzIiwidG91Y2hFdmVudHMiLCJibG9ja3MiLCJtYXRlcmlhbCIsIm1lcmdlU2hlZXRCbG9ja3MiLCJjYWxjQmxvY2tGb3JjZSIsInZlbG9jaXR5IiwiY29ybmVySGVpZ2h0IiwiY2FsY0Jsb2NrQ29ybmVyRm9yY2UiLCJhbmltYXRpb25Ob3RpZmljYXRpb24iLCJyZWplY3QiLCJjb3ZlckhlaWdodCIsInNpbXVsYXRlQ2xiIiwicmVtb3ZlQ2xiIiwiYW5nbCIsImNoIiwibGFzdFQiLCJ0cmlnZ2VyIiwic2ltdWxhdGUiLCJsZWZ0U2l6ZSIsIm5ld0Jsb2NrIiwiZmlyc3RCbG9jayIsImxhc3RCbG9jayIsImNyZWF0ZVNpZGVUZXh0dXJlIiwiakMiLCJtZXJnZVByb3BzIiwic2Vjb25kIiwibmF2aWdhdGlvbkNvbnRyb2xzIiwiZGV2aWNlUGl4ZWxSYXRpbyIsIm9yYml0IiwiZ2V0T3JiaXQiLCJ1cGRhdGVWaWV3SWZTdGF0ZSIsImJpbmRBY3Rpb25zIiwic21hcnRQYW4iLCJhY3Rpb25zIiwiYWN0aXZlIiwiYWN0aXZlRm9yTW9iaWxlIiwic3RhdHMiLCJsaWdodGluZyIsImRlZmF1bHQiLCJhY3RpdmVTaWRlIiwiYm9va1dhdGNoZXIiLCJPYmplY3QzRFdhdGNoZXIiLCJTdGF0cyIsInRvcCIsInNldEV4dHJhTGlnaHRpbmciLCJvblNjcmVlbk1vZGVDaGFuZ2VkIiwib25VcGRhdGVWaWV3IiwidXBkYXRlVmlldyIsIkZ1bGxTY3JlZW4iLCJnZXRQYXJlbnRDb250YWluZXIiLCJjbWRTbWFydFBhbiIsInRlbXBsYXRlT2JqZWN0IiwiYXBwTG9hZGVkIiwibG9hZGluZ0FuaW1hdGlvbiIsInNraW4iLCJpbml0TG9hZGluZ0FuaW1hdGlvbiIsImNvZWZmaWNpZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInZpc2libGUiLCJzZXRTdGF0ZSIsImVuYWJsZU5hdmlnYXRpb24iLCJwcmludGVyIiwic2V0RW5hYmxlZCIsImNhblpvb21JbiIsImNhblpvb21PdXQiLCJjYW5EZWZhdWx0Wm9vbSIsInNldEJvb2tab29tIiwiY21kWm9vbUluIiwiZGVsdGEiLCJ6b29tSW4iLCJjbWRab29tT3V0Iiwiem9vbU91dCIsImNtZERlZmF1bHRab29tIiwiY21kVG9jIiwidG9nbGUiLCJjbWRGYXN0QmFja3dhcmQiLCJzdGFydEZsaXAiLCJjbWRCYWNrd2FyZCIsImNtZEJpZ0JhY2t3YXJkIiwiY21kRm9yd2FyZCIsImNtZEJpZ0ZvcndhcmQiLCJjbWRGYXN0Rm9yd2FyZCIsImNtZFNhdmUiLCJvcGVuIiwiZG93bmxvYWRVUkwiLCJjbWRQcmludCIsInByaW50IiwiY21kRnVsbFNjcmVlbiIsImFjdGl2YXRlZCIsInJlcXVlc3QiLCJjYW5jZWwiLCJtaW5BemltdXRoQW5nbGUiLCJtYXhBemltdXRoQW5nbGUiLCJtaW5Qb2xhckFuZ2xlIiwibWF4UG9sYXJBbmdsZSIsImNtZFNpbmdsZVBhZ2UiLCJjbWRTb3VuZHMiLCJjbWRTdGF0cyIsImFwcGVuZCIsImNtZExpZ2h0aW5nVXAiLCJjbWRMaWdodGluZ0Rvd24iLCJwYWdlTnVtIiwiY3VycmVudCIsImZsaXBzIiwiY292cyIsImN2Iiwic2V0Q2xiIiwiZmwiLCJ0aW1lIiwiZmxpcFJlcyIsImVuZEZsaXAiLCJnZXRQYWdlRm9yR1VJIiwiaW5wUGFnZSIsImlzQ21kVmlzaWJsZSIsIm5hcnJvd1ZpZXciLCJlbmFibGVkSW5OYXJyb3ciLCJ1cGRhdGVWaWV3U3RhdGUiLCJ2aWV3U3RhdGUiLCJhdmFpbGFibGUiLCJmbGlwcGVyc0VuYWJsZSIsImdldEFjdGlvbnMiLCJpc1N3aXBwaW5nIiwidG91Y2hDbWRTd2lwZSIsImNvZGUiLCJjbWRzIiwiYWN0aXZhdGUiLCJjbWRQYW5MZWZ0IiwicGFuIiwic3BlZWQiLCJjbWRQYW5SaWdodCIsImNtZFBhblVwIiwiY21kUGFuRG93biIsIm1vdXNlQ21kUm90YXRlIiwicm90YXRlIiwibW91c2VDbWREcmFnWm9vbSIsIm1vdXNlQ21kUGFuIiwibW91c2VDbWRXaGVlbFpvb20iLCJwcmV2ZW50RGVmYXVsdCIsImRlbHRhWSIsInRvdWNoQ21kUm90YXRlIiwidG91Y2hDbWRab29tIiwidG91Y2hDbWRQYW4iLCJ0b3VjaCIsInRvdWNoZXMiLCJvcmlnaW5hbEV2ZW50Iiwic3dpcGVEYXRhIiwiaGFuZGxlZCIsIngwIiwieTAiLCJ3aWRTZXR0aW5ncyIsImVUb0EiLCJFdmVudHNUb0FjdGlvbnMiLCJhZGRBY3Rpb24iLCJtb3VzZUJ1dHRvbnMiLCJSaWdodCIsImFjdGlvbiIsImZsYWdzIiwic2V0QWN0aW9ucyIsImxldmVscyIsInN0eWxlU2hlZXQiLCJwZGZTcmMiLCJjYW5jZWxlZCIsImZyYW1lIiwicHJpbnRXbmQiLCJjYWxsTWFudWFsbHkiLCJ1c2VJRnJhbWUiLCJjb250ZW50V2luZG93IiwicmVuZGVyQ29udGVudCIsImNvbnRlbnQiLCJwcmludERvYyIsIndyaXRlIiwiY2xvc2UiLCJTZXQiLCJyZW5kZXJIdG1sIiwicmVuZGVySGVhZCIsIndyYXAiLCJsaW5rcyIsIm1hdGNoIiwibGluayIsImZhaWwiLCJyZXNwb25zZVRleHQiLCJkZWZhdWx0U3R5bGVTaGVldCIsImlzQ2hyb21pdW0iLCJjaHJvbWUiLCJ3aW5OYXYiLCJ2ZW5kb3JOYW1lIiwidmVuZG9yIiwiaXNJRWVkZ2UiLCJpc0lPU0Nocm9tZSIsImNvbnRhaW5lciIsImluaXRWaWV3IiwiYm9va21hcmtzVmlldyIsInRodW1ibmFpbHNWaWV3Iiwic2VhcmNoVmlldyIsImdldEhhbmRsZXJzIiwiaGFuZGxlcnMiLCJjYWxsTGF0ZXIiLCJQQUdFX0hBTkRMRVJfREVMQVkiLCJvbkl0ZW1TdGF0ZUNoYW5nZWQiLCJwYXJlbnRDb250YWluZXIiLCJnZXRGb3JtcyIsImdldExpbmtzIiwiZ2V0V2lkZ2V0cyIsImdldElucHV0cyIsImdldFRleHRzIiwiZ2V0VGVtcGxhdGUiLCJzdHlsZXMiLCJyZWwiLCJzY3JpcHQiLCJWaWV3IiwiaW1hZ2VGYWN0b3J5Iiwid3JhcHBlcnMiLCJnZXRBY3RpdmVzIiwibGF5ZXJzIiwiaGlkZGVuIiwiZ2V0TGF5ZXJzIiwic2wiLCJTaGVldENzc0xheWVyIiwid2FpdCIsInBhZ2VRdWVyeSIsInBhZ2VDYWNoZSIsInJlc291cmNlc0NhY2hlIiwiY2FudmFzIiwibG9hZGluZ3MiLCJyZW5kZXJRdWV1ZSIsInBhZ2VSZXF1ZXN0cyIsInByZWRpY3RlZFJlcXVlc3RzIiwidG1wTWF0ZXJpYWwiLCJNZXNoQmFzaWNNYXRlcmlhbCIsIlBsYW5lR2VvbWV0cnkiLCJsb2FkaW5nIiwiY3JlYXRlTG9hZGluZ1RleHR1cmUiLCJ1cGRhdGVSZW5kZXJRdWV1ZSIsInNwcml0ZVRpbGVzIiwiYW5pbWF0aW9uIiwiTG9hZGluZ0FuaW1hdGlvbiIsImFuaW1hdG9yIiwiVGV4dHVyZUFuaW1hdG9yIiwiY3JlYXRlU3ByaXRlIiwiaXNDb3ZlciIsImlzTW9iaWxlIiwic2V0dXBNYXRlcmlhbCIsImlzQWN0aXZlIiwicmVtb3ZlRnJvbUxvYWRpbmdzIiwicmVtb3ZlRnJvbVJlbmRlclF1ZXVlIiwid3JhcHBlciIsInB1c2hJblJlbmRlclF1ZXVlIiwiZXMiLCJjc3NMYXllcnNMb2FkZXIiLCJhcmdzIiwicmVzb2x2ZVBlbmRpbmdzIiwicnRsUGFnZU4iLCJwaSIsImlzVG9wIiwic2V0TWF0ZXJpYWwiLCJjYWxjUmVzb2x1dGlvbiIsImludGVyYWN0aXZlIiwiQ29sb3IiLCJvblVwZGF0ZSIsInJlbmRlcmluZyIsImlzU2luZ2xlUGFnZSIsInRyYW5zZmVyRXZlbnRzIiwibW91c2V1cCIsIm1vdXNlb3V0IiwiZW50IiwidG9PYmplY3QiLCJnZXRPckxvYWRUZXh0dXJlT2JqZWN0IiwidG9Eb2MiLCJsb2FkUHJlZGljdGVkUGFnZXMiLCJhZGRQYWdlUmVxdWVzdCIsInNoaWZ0Iiwib2IiLCJwYWdlRGVzY3JpcHRpb24iLCJ2aWV3cG9ydCIsImdldFZpZXdwb3J0IiwiY3Vyc29ycyIsImRlZmF1bHRIYW5kbGVyIiwiZGVzdGluYXRpb24iLCJjYWxsSGFuZGxlcnMiLCJldmVudCIsImFubm8iLCJhbm5vdGF0aW9uIiwicG9wIiwiZGVzdCIsImRlc3RQcm9taXNlIiwiZ2V0RGVzdGluYXRpb24iLCJnZXRQYWdlSW5kZXgiLCJwcm9jZXNzIiwic3RhbXAiLCJuZXh0IiwiZ2V0VGV4dENvbnRlbnQiLCJ0ZXh0Q29udGVudCIsIml0ZW1zIiwiaXRlbSIsImxheWVyIiwiYWRkQ3NzT2JqZWN0IiwicmVtb3ZlQ3NzT2JqZWN0Iiwicm90YXRpb24iLCJ0YXJnZXRGb3JjZUNsYiIsImciLCJ0bCIsInRhcmdldEFuZ2xlIiwiZmxidCIsImRyYWdDb3JuZXJGb3JjZUNsYiIsImZwcyIsInN0YXJ0RHQiLCJtYXJnaW4iLCJpbmZNIiwiYXR0ZW1wdHMiLCJtYXhJdGVyYXRpb25zIiwiZm9yY2VDbGIiLCJjb3JuZXJGb3JjZUNsYiIsIm5vIiwiY2YiLCJnZXRQYXJhbWV0ck1hcCIsIlQiLCJhdHRlbXB0IiwiaXQiLCJub3MiLCJpbnRlZ3JhdGUiLCJjaSIsImZpbmRDb2xsaXNpb25zIiwic2NvcyIsInNvbHZlQ29sbGlzaW9uIiwiZ3MiLCJpMCIsImZpbmRBbmRTb2x2ZUNvcm5lckNvbGxpc2lvbnMiLCJyZW1vdmVTdGF0aWNzIiwiYWwiLCJkQ2giLCJkdiIsIm1tIiwiYXYiLCJidiIsImlzQ29sbGlzaW9uIiwiYXVkaW8iLCJBdWRpbyIsInBsYXkiLCJwYXVzZSIsImN1cnJlbnRUaW1lIiwiZW1pdHRlciIsInRhYiIsIm9uTmF2aWdhdGUiLCJuYXZpZ2F0ZVRodW1ibmFpbHMiLCJmaXJlQ2hhbmdlIiwibmF2aWdhdGVTZWFyY2giLCJuYXZpZ2F0ZUJvb2ttYXJrcyIsImlzQm9va21hcmtzIiwiY21kQm9va21hcmtzIiwiY21kVGh1bWJuYWlscyIsImNtZFNlYXJjaCIsImNtZENsb3NlVG9jIiwiV2lkZ2V0Q29udHJvbGxlciIsImZyb250R2VvbWV0cnkiLCJ0cmFuc2xhdGUiLCJiYWNrR2VvbWV0cnkiLCJyb3RhdGVZIiwibGVmdEdlb21ldHJ5IiwicmlnaHRHZW9tZXRyeSIsInRvcEdlb21ldHJ5Iiwicm90YXRlWCIsImJvdHRvbUdlb21ldHJ5IiwiR2VvbWV0cnkiLCJhZGRGYWNlcyIsImZzIiwiRmFjZTMiLCJtYXBWZXJ0aWNlcyIsImRzdCIsImVxIiwiZnJvbnRNYXAiLCJiYWNrTWFwIiwibGVmdE1hcCIsInJpZ2h0TWFwIiwiTGVmdCIsIk1pZGRsZSIsImdldFRpdGxlIiwidGl0bGUiLCJnZXRJdGVtcyIsIm5vZGVzIiwibWFwTm9kZXMiLCJsaSIsImNtZCIsIm5vZGUiLCJtaW5pbWl6ZWQiLCJyZW5kZXJOb2RlIiwicmVuZGVyTm9kZXMiLCJleHBhbmQiLCJtaW5pbWl6ZSIsImxldmVsIiwiZ2V0V2ViR0xFcnJvck1lc3NhZ2UiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwidGV4dEFsaWduIiwiYmFja2dyb3VuZCIsImlubmVySFRNTCIsIldlYkdMUmVuZGVyaW5nQ29udGV4dCIsInBhcmFtZXRlcnMiLCJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiLCJ3b3JrZXJzIiwiV29ya2VyIiwi
13345ZmlsZWFwaSIsIkZpbGUiLCJGaWxlUmVhZGVyIiwiRmlsZUxpc3QiLCJCbG9iIiwiRG9jTW91c2VTaW11bGF0b3IiLCJqRnJhbWUiLCJiRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsInJlc2VuZFByb3BlcnRpZXMiLCJnZXREZWZhdWx0UmVzZW5kUHJvcGVydGllcyIsInVuZGVmaW5lZFByb3BlcnRpZXMiLCJnZXREZWZhdWx0VW5kZWZpbmVkUHJvcGVydGllcyIsIm9uRG9jQ2hhbmdlQ2xicyIsInRlcm1zIiwiSE9WRVIiLCJBQ1RJVkUiLCJzdHlsZVNoZWV0cyIsInNzIiwiY3NzUnVsZXMiLCJjc3NUZXh0IiwidGVybSIsInNlbGVjdG9yVGV4dCIsImNvbnZlcnRDb29yZHMiLCJqRWxlbWVudCIsInRyaWdnZXJFdmVudCIsImFkdmFuY2VkUHJvcHMiLCJ0aW1lU3RhbXAiLCJnZXRDb21wdXRlZFN0eWxlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImVudGVyRWxlbWVudCIsImxlYXZlRWxlbWVudCIsImFjdGl2YXRlRWxlbWVudCIsImRlYWN0aXZhdGVFbGVtZW50IiwiYWRkRG9jQ2hhbmdlQ2xiIiwiZWxlbWVudEZyb21Qb2ludCIsImNoaWxkTm9kZXMiLCJjaGlsZCIsIkVsZW1lbnQiLCJnZXRFbGVtZW50Iiwib2ZmMCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsImNhcEVsZW1lbnQiLCJsZWF2ZWQiLCJob3ZFbGVtZW50IiwicmVsYXRlZFRhcmdldCIsIkRvbTJJbWFnZSIsInV0aWwiLCJuZXdVdGlsIiwiaW5saW5lciIsIm5ld0lubGluZXIiLCJmb250RmFjZXMiLCJuZXdGb250RmFjZXMiLCJpbWFnZXMiLCJuZXdJbWFnZXMiLCJ0b1N2ZyIsInRvUG5nIiwidG9KcGVnIiwidG9CbG9iIiwidG9QaXhlbERhdGEiLCJpbXBsIiwiY2xvbmVOb2RlIiwiZW1iZWRGb250cyIsImlubGluZUltYWdlcyIsImFwcGx5T3B0aW9ucyIsIm1ha2VTdmdEYXRhVXJpIiwiYmdjb2xvciIsImJhY2tncm91bmRDb2xvciIsInByb3BlcnR5IiwiZHJhdyIsImdldEltYWdlRGF0YSIsInRvRGF0YVVSTCIsInF1YWxpdHkiLCJjYW52YXNUb0Jsb2IiLCJkb21Ob2RlIiwibWFrZUltYWdlIiwibmV3Q2FudmFzIiwiZmlsbFJlY3QiLCJyb290IiwibWFrZU5vZGVDb3B5IiwiY2xvbmVDaGlsZHJlbiIsInByb2Nlc3NDbG9uZSIsImlzQ2FudmFzIiwib3JpZ2luYWwiLCJjbG9uZUNoaWxkcmVuSW5PcmRlciIsImFzQXJyYXkiLCJjaGlsZENsb25lIiwiaXNFbGVtZW50IiwiY2xvbmVTdHlsZSIsImNsb25lUHNldWRvRWxlbWVudHMiLCJjb3B5VXNlcklucHV0IiwiZml4U3ZnIiwiY29weVN0eWxlIiwic291cmNlIiwiY29weVByb3BlcnRpZXMiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5UHJpb3JpdHkiLCJjbG9uZVBzZXVkb0VsZW1lbnQiLCJjbGFzc05hbWUiLCJ1aWQiLCJzdHlsZUVsZW1lbnQiLCJmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUiLCJzZWxlY3RvciIsImZvcm1hdENzc1RleHQiLCJmb3JtYXRDc3NQcm9wZXJ0aWVzIiwiY3JlYXRlVGV4dE5vZGUiLCJmb3JtYXRQcm9wZXJ0eSIsImlzVGV4dEFyZWEiLCJpc0lucHV0Iiwic2V0QXR0cmlidXRlIiwiaXNTVkciLCJpc1NWR1JlY3QiLCJhdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJyZXNvbHZlQWxsIiwic3R5bGVOb2RlIiwiaW5saW5lQWxsIiwiWE1MU2VyaWFsaXplciIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiZXNjYXBlWGh0bWwiLCJ4aHRtbCIsInBhcnNlRXh0ZW5zaW9uIiwibWltZVR5cGUiLCJkYXRhQXNVcmwiLCJpc0RhdGFVcmwiLCJyZXNvbHZlVXJsIiwiZ2V0QW5kRW5jb2RlIiwiaXNJbWFnZSIsIm1pbWVzIiwiV09GRiIsIkpQRUciLCJleHRlbnNpb24iLCJiaW5hcnlTdHJpbmciLCJhdG9iIiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsImJhc2VVcmwiLCJpbXBsZW1lbnRhdGlvbiIsImNyZWF0ZUhUTUxEb2N1bWVudCIsImZvdXJSYW5kb21DaGFycyIsInRvU3RyaW5nIiwic2xpY2UiLCJ1cmkiLCJJbWFnZSIsIm9ubG9hZCIsIm9uZXJyb3IiLCJUSU1FT1VUIiwiWE1MSHR0cFJlcXVlc3QiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0IiwicmVzcG9uc2VUeXBlIiwic2VuZCIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJlbmNvZGVyIiwib25sb2FkZW5kIiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsInJlc3BvbnNlIiwibWVzc2FnZSIsInN0cmluZyIsIm1zIiwiYXJnIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZWZ0Qm9yZGVyIiwicHgiLCJyaWdodEJvcmRlciIsInNjcm9sbFdpZHR
13345oIiwidG9wQm9yZGVyIiwiYm90dG9tQm9yZGVyIiwic2Nyb2xsSGVpZ2h0Iiwic3R5bGVQcm9wZXJ0eSIsInBhcnNlRmxvYXQiLCJIVE1MQ2FudmFzRWxlbWVudCIsIkhUTUxUZXh0QXJlYUVsZW1lbnQiLCJIVE1MSW5wdXRFbGVtZW50IiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiSFRNTEltYWdlRWxlbWVudCIsIlVSTF9SRUdFWCIsInNob3VsZFByb2Nlc3MiLCJyZWFkVXJscyIsImlubGluZSIsImRhdGFVcmwiLCJ1cmxBc1JlZ2V4Iiwibm90aGluZ1RvSW5saW5lIiwidXJscyIsInJlYWRBbGwiLCJ3ZWJGb250cyIsIndlYkZvbnQiLCJjc3NTdHJpbmdzIiwiZ2V0Q3NzUnVsZXMiLCJzZWxlY3RXZWJGb250UnVsZXMiLCJydWxlcyIsIm5ld1dlYkZvbnQiLCJydWxlIiwiQ1NTUnVsZSIsIkZPTlRfRkFDRV9SVUxFIiwibG9nIiwid2ViRm9udFJ1bGUiLCJwYXJlbnRTdHlsZVNoZWV0IiwibmV3SW1hZ2UiLCJpbmxpbmVCYWNrZ3JvdW5kIiwiaW5saW5lZCIsIkRyYWciLCJpbnRlcnNlY3Rpb24iLCJzZWxlY3RlZCIsImNvbnRyb2xzU3RhdGUiLCJnZXRDb250cm9sc1N0YXRlIiwib25Nb3VzZU1vdmUiLCJvbk1vdXNlRG93biIsIm9uTW91c2VVcCIsInJheSIsIm9yaWdpbiIsInNldENvbnRyb2xzU3RhdGUiLCJnZXRXb3JsZERpcmVjdGlvbiIsImludGVyc2VjdFBsYW5lIiwiZ2V0RXZlbnRGbGFncyIsImN0cmxLZXkiLCJzaGlmdEtleSIsImFsdEtleSIsImdldFBvc2l0aW9uIiwiY29udGV4dE1lbnUiLCJtb3VzZURvd24iLCJtb3VzZU1vdmUiLCJtb3VzZVVwIiwibW91c2VXaGVlbCIsIm1vdXNlTW92ZURvYyIsIm1vdXNlVXBEb2MiLCJjbGljayIsImRibGNsaWNrIiwidG91Y2hTdGFydCIsInRvdWNoTW92ZSIsInRvdWNoRW5kIiwia2V5RG93biIsImtleVByZXNzIiwia2V5VXAiLCJmaXJlQWN0aW9ucyIsImJ1dHRvbiIsInBpY2tlZCIsImNsaWNrcyIsInRvdWNoUGljayIsInRvdWNoUGlja2VkIiwicG9zIiwia2V5Q29kZSIsIm1vZEtleXMiLCJDdHJsIiwiU2hpZnQiLCJBbHQiLCJfaGFzV2Via2l0RnVsbFNjcmVlbiIsIl9oYXNNb3pGdWxsU2NyZWVuIiwiX2hhc01zRnVsbHNjcmVlbiIsIndlYmtpdElzRnVsbFNjcmVlbiIsIm1vekZ1bGxTY3JlZW4iLCJtc0Z1bGxzY3JlZW5FbGVtZW50IiwiYXNzZXJ0Iiwid2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4iLCJtb3pSZXF1ZXN0RnVsbFNjcmVlbiIsIm1zUmVxdWVzdEZ1bGxzY3JlZW4iLCJ3ZWJraXRDYW5jZWxGdWxsU2NyZWVuIiwibW96Q2FuY2VsRnVsbFNjcmVlbiIsIm1zRXhpdEZ1bGxzY3JlZW4iLCJkb2N1bWVudEVsZW1lbnQiLCJpSWQiLCJoYXNGZWF0dXJlIiwiaW1hZ2VMb2FkIiwic3ZnUmVuZGVyIiwiZnJhbWVMb2FkIiwic2ltdWxhdG9yIiwiY2FsY1RpbWVUbyIsInVwZGF0ZUludGVydmFsIiwiY2xlYXJSZWN0Iiwic2hhZG93Qmx1ciIsInNoYWRvd0NvbG9yIiwic2hhZG93T2Zmc2V0WCIsInNoYWRvd09mZnNldFkiLCJmb250IiwidGV4dEJhc2VsaW5lIiwiZmlsbFRleHQiLCJkYSIsIl9hIiwiX3IiLCJjeCIsImN5IiwibngiLCJueSIsImFyYyIsImdldEltYWdlIiwic2lnbiIsInNob3dQcm9ncmVzcyIsImxvYWRpbmdNc2ciLCJnZXRMb2FkaW5nTXNnIiwiZGVmYXVsdExvYWRpbmdNc2ciLCJNb3VzZUV2ZW50Q29udmVydGVyIiwiYm91bmRCb3hDbGIiLCJ0ZXN0U2NhbGUiLCJlbGVtZW50U2l6ZSIsInZ4IiwidnkiLCJib3giLCJjb21wdXRlQ2xpZW50Qm91bmRCb3giLCJtb3ZlUGFuIiwidlRvQ2FtZXJhIiwicHJvamVjdCIsInhzIiwienMiLCJzZXRPYmplY3QiLCJjb21wdXRlQ29yciIsImNvcnIiLCJnZXRTY2FsZSIsIkt4IiwiS3kiLCJjZW50ZXJWaWV3Iiwic2V0U2NhbGUiLCJ0ZiIsIlkiLCJ2ZCIsIk9yYml0IiwibWluRGlzdGFuY2UiLCJtaW5ab29tIiwibWF4Wm9vbSIsImVuYWJsZURhbXBpbmciLCJkYW1waW5nRmFjdG9yIiwiZW5hYmxlWm9vbSIsInpvb21TcGVlZCIsImVuYWJsZVJvdGF0ZSIsInJvdGF0ZVNwZWVkIiwiZW5hYmxlUGFuIiwiYXV0b1JvdGF0ZSIsImF1dG9Sb3RhdGVTcGVlZCIsInRhcmdldDAiLCJwb3NpdGlvbjAiLCJ6b29tMCIsImdldFBvbGFyQW5nbGUiLCJzcGhlcmljYWwiLCJwaGkiLCJnZXRBemltdXRoYWxBbmdsZSIsInRoZXRhIiwicmVzZXQiLCJzY29wZSIsInVwZGF0ZVByb2plY3Rpb25NYXRyaXgiLCJjaGFuZ2VFdmVudCIsIl9zcGVlZCIsImRvbGx5SW4iLCJnZXRab29tU2NhbGUiLCJkb2xseU91dCIsIm5ld1NjYWxlIiwicXVhdCIsIlF1YXRlcm5pb24iLCJzZXRGcm9tVW5pdFZlY3RvcnMiLCJ1cCIsInF1YXRJbnZlcnNlIiwibGFzdFBvc2l0aW9uIiwibGFzdFF1YXRlcm5pb24iLCJhcHBseVF1YXRlcm5pb24iLCJzZXRGcm9tVmVjdG9yMyIsInJvdGF0ZUxlZnQiLCJnZXRBdXRvUm90YXRpb25BbmdsZSIsInNwaGVyaWNhbERlbHRhIiwibWFrZVNhZmUiLCJyYWRpdXMiLCJwYW5PZmZzZXQiLCJzZXRGcm9tU3BoZXJpY2FsIiwibG9va0F0Iiwiem9vbUNoYW5nZWQiLCJFUFMiLCJkb3QiLCJTcGhlcmljYWwiLCJyb3RhdGVVcCIsInBhbkxlZnQiLCJvYmplY3RNYXRyaXgiLCJzZXRGcm9tTWF0cml4Q29sdW1uIiwibXVsdGlwbHlTY2FsYXIiLCJwYW5VcCIsImRlbHRhWCIsIlBlcnNwZWN0aXZlQ2FtZXJhIiwidGFyZ2V0RGlzdGFuY2UiLCJ0YW4iLCJjbGllbnRIZWlnaHQiLCJPcnRob2dyYXBoaWNDYW1lcmEiLCJjbGllbnRXaWR0aCIsImJvdHRvbSIsImRvbGx5U2NhbGUiLCJvZmZzZXREb2xseSIsIndoZWVsRG9sbHkiLCJtMDAiLCJtMDEiLCJtMDIiLCJtMTAiLCJtMTEiLCJtMTIiLCJtMjAiLCJtMjEiLCJtMjIiLCJ0cmltIiwic2V0SGl0cyIsInJlY3RTaXplIiwiY3JlYXRlUG9seSIsInNldEFubm90YXRpb25zIiwiYW5ub3MiLCJ0YXJnZXRzIiwic3VidHlwZSIsImFQb3MiLCJhU3oiLCJQb2x5VGFyZ2V0IiwiYW5ub0NsYiIsImZpbmRlciIsInJlbmRlckhpdHMiLCJ0ZXN0U3oiLCJ0ZXh0RGl2IiwiYmFzZU9mZnNldCIsImhpdCIsIlV0aWwiLCJmb250TmFtZSIsImF0YW4yIiwidmVydGljYWwiLCJmb250SGVpZ2h0IiwiZm9udEFzY2VudCIsImFzY2VudCIsImRlc2NlbnQiLCJ0ZXN0U3BhbiIsIml3aWR0aCIsInJlbGF0aXZlT2Zmc2V0IiwiY2FsY1ZpZXdwb3J0Iiwib2Zmc2V0WCIsImdldEFubm90YXRpb25zIiwiY2FudmFzQ29udGV4dCIsInByZXZSZXN1bHRzIiwibmF2aWdhdGUiLCJkb1F1ZXJ5IiwicXVlcnlTdGFtcCIsImh0bWxzIiwiY3Jvc3NPcmlnaW4iLCJpbWFnZUVycm9yIiwiaW1nIiwidGlsZXNIb3JpeiIsInRpbGVzVmVydCIsIm51bVRpbGVzIiwidGlsZURpc3BEdXJhdGlvbiIsInRpbGVzSG9yaXpvbn
13345RhbCIsInRpbGVzVmVydGljYWwiLCJudW1iZXJPZlRpbGVzIiwidGlsZURpc3BsYXlEdXJhdGlvbiIsImN1cnJlbnREaXNwbGF5VGltZSIsImN1cnJlbnRUaWxlIiwibWlsbGlTZWMiLCJjdXJyZW50Q29sdW1uIiwiY3VycmVudFJvdyIsIlRocmVlTW91c2VFdmVudENvbnZlcnRlciIsIlRocmVlRXZlbnRDb252ZXJ0ZXIiLCJUaHJlZVRvdWNoRXZlbnRDb252ZXJ0ZXIiLCJsYXN0VG91Y2hlcyIsIlRvdWNoRXZlbnRDb252ZXJ0ZXIiLCJ0aHVtYm5haWxzQ2xiIiwiaGVhZGluZyIsInRodW1ibmFpbCIsImRhdGFUaHVtYm5haWwiLCJzZXRJbWFnZSIsImdldEFjdGl2ZSIsInNjcm9sbFRvcCIsImJ1aWx0IiwiVG91Y2hDb252ZXJ0ZXIiLCJjbGFzc1Byb3BlcnR5IiwiYXR0cmlidXRlUHJvcGVydHkiLCJhdHRyaWJ1dGVOYW1lIiwicmVtb3ZlQXR0ciIsImhhbmRsZUxpbmtFdmVudCIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVGb3JtRXZlbnQiLCJnZXRUaW1lIiwicGVuZGluZyIsImxvYWRGaWxlcyIsImZpbGVzIiwidGFza3MiLCJ1cmxSZXNvbHZlciIsImxhc3RJbmRleE9mIiwicGFydHMiLCJwYXJ0Iiwib2JqVG9BdHRyc1N0ciIsImNoZWNrSWZyYW1lU2l6ZSIsIm9uUmVzaXplIiwiczAiLCJzMSIsImZpcmVMaW5rc09uTG9hZEV2ZW50IiwibGlua0xvYWRlZCIsImpMaW5rIiwiakxpbmtzIiwiaXNJT1MiLCJNU1N0cmVhbSIsInN0b3AiLCJ0ZXh0Q3NzIiwicjEiLCJsaW5rQ29udHJvbHMiLCJ3aWRnZXRDb250cm9scyIsImlucHV0Q29udHJvbHMiLCJmb3JtQ29udHJvbHMiLCJ0ZXh0Q29udHJvbHMiLCJzdGF0ZVNldHRlcnMiLCJzZXR0ZXIiLCJzZXRMaW5rQ29udHJvbFN0YXRlIiwic2V0V2lkZ2V0Q29udHJvbFN0YXRlIiwic2V0SW5wdXRDb250cm9sU3RhdGUiLCJzZXRUZXh0Q29udHJvbFN0YXRlIiwic2V0Q29udHJvbFN0YXRlIiwic3RhdGVIYW5kbGVycyIsInN0IiwibGlua1N0YXRlSGFuZGxlcnMiLCJ3aWRnZXRTdGF0ZUhhbmRsZXJzIiwiaW5wdXRTdGF0ZUhhbmRsZXJzIiwidGV4dFN0YXRlSGFuZGxlcnMiLCJ0ZXh0IiwidXNlSGVscGVycyIsInJlbmRlckNhbGxiYWNrcyIsImNsb2NrIiwiQ2xvY2siLCJSYXljYXN0ZXIiLCJTY2VuZSIsImNzc1NjZW5lIiwicmVuZGVyZXIiLCJXZWJHTFJlbmRlcmVyIiwiYWxwaGEiLCJhbnRpYWxpYXMiLCJzZXRQaXhlbFJhdGlvIiwiY3NzUmVuZGVyZXIiLCJjb250cm9scyIsInRtcFZlY3RvciIsIlRleHR1cmVMb2FkZXIiLCJBbWJpZW50TGlnaHQiLCJsaWdodCIsIkRpcmVjdGlvbmFsTGlnaHQiLCJBeGlzSGVscGVyIiwib25XaW5kb3dSZXNpemUiLCJhbmltYXRlIiwiZmlsdGVyRGF0YSIsInR5cGVzIiwiY29udGFpbnMiLCJpbnRlbnNpdHkiLCJ1cGRhdGVDYW1lcmEiLCJhc3BlY3QiLCJ1cGRhdGVSZW5kZXJlciIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImRlbHRhVGltZSIsImdldERlbHRhIiwicHJvY2Vzc0dlb21ldHJ5IiwiYnVmR2VvbWV0cnkiLCJmcm9tQnVmZmVyR2VvbWV0cnkiLCJtZXJnZVZlcnRpY2VzIiwiaW5kZXhlZEJ1ZmZlckdlb20iLCJjcmVhdGVJbmRleGVkQnVmZmVyR2VvbWV0cnlGcm9tR2VvbWV0cnkiLCJtYXBJbmRpY2VzIiwibnVtVmVydGljZXMiLCJudW1GYWNlcyIsImJ1ZmZlckdlb20iLCJCdWZmZXJHZW9tZXRyeSIsIkZsb2F0MzJBcnJheSIsImluZGljZXMiLCJVaW50MzJBcnJheSIsIlVpbnQxNkFycmF
133455IiwiaTMiLCJzZXRJbmRleCIsIkJ1ZmZlckF0dHJpYnV0ZSIsImFkZEF0dHJpYnV0ZSIsImlzRXF1YWwiLCJ4MSIsInoxIiwieDIiLCJ6MiIsImF0dHJpYnV0ZXMiLCJpZHhWZXJ0aWNlcyIsIm51bUlkeFZlcnRpY2VzIiwibWFwcGVkVmVydGljZXMiLCJtYXBwZWRJbmRpY2VzIiwibWFwcGVkQXNzb2NpYXRpb24iLCJhc3NvY2lhdGlvbiIsImozIiwib25lTm9kZVBvc2l0aW9uQ2FsbGJhY2siLCJtdWx0eU5vZGVQb3NpdGlvbkNhbGxiYWNrIiwidm9sdW1lUG9zaXRpb25zIiwidm9sdW1lTm9ybWFscyIsImFzc29jVmVydGV4IiwiaW5kZXhWZXJ0ZXgiLCJtdWx0eU5vZGVQb3NpdGlvblBvc3RDYWxsYmFjayIsInBhdGhQb3NpdGlvbkNhbGxiYWNrIiwicG9zaXRpb25zIiwicGF0aFBvc2l0aW9uUG9zdENhbGxiYWNrIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7O0FDaEVBLElBQU1BLEtBQUtDLEtBQUEsR0FBb0JDLE9BQU9DLE1BQTNCLEdBQW1DQyxRQUFRLFFBQVIsQ0FBOUM7QUFBQSxJQUNNQyxlQUFlSixLQUFBLEdBQXlCQyxPQUFPSSxXQUFoQyxHQUE2Q0YsUUFBUSxhQUFSLENBRGxFO0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FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDLHNDQUFzQztBQUMzRTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFDOzs7Ozs7OztBQy9ORDtBQUNBLGVBQWUsS0FBc0QsaUZBQWlGLGtCQUFrQixpQkFBaUIsY0FBYyxxQkFBcUIsU0FBUyxjQUFjLFlBQVksb0JBQW9CLHFEQUFxRCxJQUFJLHdDQUF3QyxnQ0FBZ0MsTUFBTSxPQUFPLGVBQWUsWUFBWSxlQUFlLHVDQUF1QztBQUNsZix5QkFBeUIsS0FBSyxtSEFBbUgsc0ZBQXNGLEtBQUssT0FBTywwREFBMEQsNEJBQTRCLGdCQUFnQixJQUFJLGdDQUFnQyxrQkFBa0IsbURBQW1ELHlCQUF5QjtBQUMzZCxtQ0FBbUMsU0FBUyxtQkFBbUIsYUFBYSwwQkFBMEIsd0JBQXdCLHdKQUF3SixVQUFVLFdBQVcsNEJBQTRCLGFBQWEseUJBQXlCLG1EQUFtRCxxQkFBcUIsY0FBYyxvQkFBb0IsY0FBYztBQUNyZSxvQkFBb0IsY0FBYyxpQkFBaUIsb0JBQW9CLE9BQU8sMkJBQTJCLGdCQUFnQixnQkFBZ0IsY0FBYyxnQkFBZ0Isb0JBQW9CLGNBQWMsa0RBQWtELHFDQUFxQyx3QkFBd0IsY0FBYyxpQkFBaUIsc0NBQXNDLFNBQVMiLCJmaWxlIjoianMvZGlzdC8zZGZsaXBib29rLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbW
13345UsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA3Mik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgYjJiNmFmNDM0NTMzODlmMmE2YjgiLCJjb25zdCBfJCA9IEdMT0JBTF9MSUJTLmpRdWVyeT8gd2luZG93LmpRdWVyeTogcmVxdWlyZSgnanF1ZXJ5JyksXHJcbiAgICAgIF9odG1sMmNhbnZhcyA9IEdMT0JBTF9MSUJTLmh0bWwyY2FudmFzPyB3aW5kb3cuaHRtbDJjYW52YXM6IHJlcXVpcmUoJ2h0bWwyY2FudmFzJyksXHJcbiAgICAgIF9USFJFRSA9IEdMT0JBTF9MSUJTLlRIUkVFPyB3aW5kb3cuVEhSRUU6IHJlcXVpcmUoJ3RocmVlJyksXHJcbiAgICAgIF9SZWFjdCA9IEdMT0JBTF9MSUJTLlJlYWN0PyB3aW5kb3cuUmVhY3Q6IHJlcXVpcmUoJ3JlYWN0JyksXHJcbiAgICAgIF9SZWFjdERPTSA9IEdMT0JBTF9MSUJTLlJlYWN0PyB3aW5kb3cuUmVhY3RET006IHJlcXVpcmUoJ3JlYWN0LWRvbScpLFxyXG4gICAgICBfUERGSlMgPSBHTE9CQUxfTElCUy5QREZKUz8gd2luZG93LlBERkpTOiByZXF1aXJlKCdwZGZqcycpLFxyXG4gICAgICBfdHIgPSAocyk9PiAod2luZG93LmliZXJlemFuc2t5IHx8IHt9KS50ciAmJiB3aW5kb3cuaWJlcmV6YW5za3kudHIocykgfHwgcztcclxuXHJcbmV4cG9ydCB7XHJcbiAgXyQgYXMgJCxcclxuICBfaHRtbDJjYW52YXMgYXMgaHRtbDJjYW52YXMsXHJcbiAgX1RIUkVFIGFzIFRIUkVFLFxyXG4gIF9SZWFjdCBhcyBSZWFjdCxcclxuICBfUmVhY3RET00gYXMgUmVhY3RET00sXHJcbiAgX1BERkpTIGFzIFBERkpTLFxyXG4gIF90ciBhcyB0clxyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vbGlicy5qcyIsImNvbnN0IF8kID0gR0xPQkFMX0xJQlMualF1ZXJ5PyB3aW5kb3cualF1ZXJ5OiByZXF1aXJlKCdqcXVlcnknKSxcclxuICAgICAgX2h0bWwyY2FudmFzID0gR0xPQkFMX0xJQlMuaHRtbDJjYW52YXM/IHdpbmRvdy5odG1sMmNhbnZhczogcmVxdWlyZSgnaHRtbDJjYW52YXMnKSxcclxuICAgICAgX1RIUkVFID0gR0xPQkFMX0xJQlMuVEhSRUU/IHdpbmRvdy5USFJFRTogcmVxdWlyZSgndGhyZWUnKSxcclxuICAgICAgX1BERkpTID0gR0xPQkFMX0xJQlMuUERGSlM/IHdpbmRvdy5QREZKUzogcmVxdWlyZSgncGRmanMnKSxcclxuICAgICAgX3RyID0gKHMpPT4gKHdpbmRvdy5pYmVyZXphbnNreSB8fCB7fSkudHIgJiYgd2luZG93LmliZXJlemFuc2t5LnRyKHMpIHx8IHM7XHJcblxyXG5pZih3aW5kb3cuRkIzRF9MT0NBTEUpIHtcclxuICB3aW5kb3cuaWJlcmV6YW5za3kgPSB7XHJcbiAgICAuLi53aW5kb3cuaWJlcmV6YW5za3ksXHJcbiAgICB0cjogKHMpPT4gKEZCM0RfTE9DQUxFLmRpY3Rpb25hcnkgfHwge30pW3NdIHx8IHNcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIF8kIGFzICQsXHJcbiAgX2h0bWwyY2FudmFzIGFzIGh0bWwyY2FudmFzLFxyXG4gIF9USFJFRSBhcyBUSFJFRSxcclxuICBfUERGSlMgYXMgUERGSlMsXHJcbiAgX3RyIGFzIHRyXHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2xpYnMuanMiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlTWF0aFV0aWxzIHtcclxuICBzdGF0aWMgc3VtID0gW0Jhc2VNYXRoVXRpbHMuc3VtMSwgQmFzZU1hdGhVdGlscy5zdW0yLCBCYXNlTWF0aFV0aWxzLnN1bTMsIEJhc2VNYXRoVXRpbHMuc3VtNF07XHJcbiAgc3RhdGljIGVwcyA9IDFlLTQ7XHJcblxyXG4gIHN0YXRpYyBzdW0xKGthLGEsa2IsYikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAga2EqYVswXStrYipiWzBdXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHN1bTIoa2EsYSxrYixiKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBrYSphWzBdK2tiKmJbMF0sXHJcbiAgICAgIGthKmFbMV0ra2IqYlsxXVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzdW0zKGthLGEsa2IsYikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAga2EqYVswXStrYipiWzBdLFxyXG4gICAgICBrYSphWzFdK2tiKmJbMV0sXHJcbiAgICAgIGthKmFbMl0ra2IqYlsyXVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzdW00KGthLGEsa2IsYikge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAga2EqYVswXStrYipiWzBdLFxyXG4gICAgICBrYSphWzFdK2tiKmJbMV0sXHJcbiAgICAgIGthKmFbMl0ra2IqYlsyXSxcclxuICAgICAga2EqYVszXStrYipiWzNdXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJrNChkeSwgdCwgZHQsIHksIHN1bT1CYXNlTWF0aFV0aWxzLnN1bVt5Lmxlbmd0aC0xXSkge1xyXG4gICAgY29uc3QgazE9ZHkodCx5KSxcclxuICAgICAgICAgIGsyPWR5KHQrZHQvMixzdW0oMSx5LGR0LzIsazEpKSxcclxuICAgICAgICAgIGszPWR5KHQrZHQvMixzdW0oMSx5LGR0LzIsazIpKSxcclxuICAgICAgICAgIGs0PWR5KHQrZHQsc3VtKDEseSxkdCxrMykpO1xyXG4gICAgcmV0dXJuIHN1bSgxLHksZHQvNixzdW0oMSxzdW0oMSxrMSwyLGsyKSwxLHN1bSgyLGszLDEsazQpKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXh0cmFwb2xhdGVMaW5lYXIoeCx5LHhpKSB7XHJcbiAgICByZXR1cm4geVswXSsoeVsxXS15WzBdKS8oeFsxXS14WzBdKSooeGkteFswXSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaW50ZXJwb2xhdGVMaW5lYXIoeCx5LHhpKSB7XHJcbiAgICBsZXQgeWk7XHJcbiAgICBpZih4WzBdPnhbMV0pIHtcclxuICAgICAgeD14LnJldmVyc2UoKTtcclxuICAgICAgeT15LnJldmVyc2UoKTtcclxuICAgIH1cclxuICAgIGlmKHhpPHhbMF0pIHtcclxuICAgICAgeWk9eVswXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYoeGk+eFsxXSkge1xyXG4gICAgICB5aT15WzFdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHlpPUJhc2VNYXRoVXRpbHMuZXh0cmFwb2xhdGVMaW5lYXIoeCx5LHhpKTtcclxuICAgIH1cclxuICAgIHJldHVybi
13345B5aTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjYWxjU2NhbGUoc3JjVywgc3JjSCwgZHN0VywgZHN0SCkge1xyXG4gICAgcmV0dXJuIE1hdGgubWluKGRzdFcvc3JjVywgZHN0SC9zcmNIKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtdWxNKGEsIGIpIHtcclxuICAgIGNvbnN0IHI9W107XHJcbiAgICBmb3IobGV0IGk9MDtpPGEubGVuZ3RoOysraSkge1xyXG4gICAgICByLnB1c2goW10pO1xyXG4gICAgICBmb3IobGV0IGo9MDtqPGJbMF0ubGVuZ3RoOysraikge1xyXG4gICAgICAgIHJbaV1bal0gPSAwO1xyXG4gICAgICAgIGZvcihsZXQgaz0wO2s8Yi5sZW5ndGg7KytrKSB7XHJcbiAgICAgICAgICByW2ldW2pdKz1hW2ldW2tdKmJba11bal07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0cmFuc00obSkge1xyXG4gICAgY29uc3Qgcj1bXTtcclxuICAgIGZvcihsZXQgaT0wO2k8bS5sZW5ndGg7KytpKSB7XHJcbiAgICAgIGZvcihsZXQgaj0wO2o8bVswXS5sZW5ndGg7KytqKSB7XHJcbiAgICAgICAgaWYoIXJbal0pIHtcclxuICAgICAgICAgIHJbal09W107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJbal1baV09bVtpXVtqXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbWF0KGRhdGEpIHtcclxuICAgIGxldCBzPTA7XHJcbiAgICBmb3IobGV0IHggb2YgZGF0YSkge1xyXG4gICAgICBzKz14O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHMvZGF0YS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGlzcChkYXRhKSB7XHJcbiAgICBjb25zdCBNPUJhc2VNYXRoVXRpbHMubWF0KGRhdGEpO1xyXG4gICAgbGV0IHM9MDtcclxuICAgIGZvcihsZXQgeCBvZiBkYXRhKSB7XHJcbiAgICAgIHMrPSh4LU0pKih4LU0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHMvZGF0YS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcHJlZGljdChkYXRhLCBudW0pIHtcclxuICAgIGNvbnN0IHI9W10sIGw9ZGF0YS5sZW5ndGgsIEQ9QmFzZU1hdGhVdGlscy5kaXNwKGRhdGEpO1xyXG4gICAgaWYoRDxsICYmIGw+MSkge1xyXG4gICAgICBjb25zdCBhbT1bXSwgYm09W107XHJcbiAgICAgIGZvcihsZXQgaT0wO2k8bDsrK2kpIHtcclxuICAgICAgICBhbS5wdXNoKFtpLDFdKTtcclxuICAgICAgICBibS5wdXNoKFtkYXRhW2ldXSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdGE9QmFzZU1hdGhVdGlscy50cmFuc00oYW0pLCBhPUJhc2VNYXRoVXRpbHMubXVsTSh0YSxhbSksIGI9QmFzZU1hdGhVdGlscy5tdWxNKHRhLGJtKSxcclxuICAgICAgZD0oYVswXVswXSphWzFdWzFdLWFbMV1bMF0qYVswXVsxXSksXHJcbiAgICAgIHA9W1xyXG4gICAgICAgIC0oYVswXVsxXSpiWzFdWzBdLWJbMF1bMF0qYVsxXVsxXSkvZCxcclxuICAgICAgICAoYVswXVswXSpiWzFdWzBdLWFbMV1bMF0qYlswXVswXSkvZFxyXG4gICAgICBdO1xyXG4gICAgICBmb3IobGV0IGk9MDtpPG51bTsrK2kpIHtcclxuICAgICAgICBjb25zdCB2ID0gTWF0aC5yb3VuZChwWzBdKihpK2wpK3BbMV0pO1xyXG4gICAgICAgIGlmKHIuaW5kZXhPZih2KT09PS0xKSB7XHJcbiAgICAgICAgICByLnB1c2godik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRVbmlxdWUoKSB7XHJcbiAgICByZXR1cm4gTWF0aC5jZWlsKDFlOSpNYXRoLnJhbmRvbSgpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXRTcGxpbmVQb2ludHMoc3BsaW5lLCBwcykge1xyXG4gICAgaWYoc3BsaW5lLnBvaW50cy5sZW5ndGghPT1wcy54Lmxlbmd0aCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3NldFNwbGluZVBvaW50czogYmFkIHBvaW50cycpO1xyXG4gICAgfVxyXG4gICAgZm9yKGxldCBpPTA7IGk8c3BsaW5lLnBvaW50cy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBzcGxpbmUucG9pbnRzW2ldLnNldChwcy54W2ldLCBwcy55W2ldLCBwcy56PyBwcy56W2ldOiAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBtYXBsMkwobHMsIGxlbiwgbiwgZikge1xyXG4gICAgY29uc3QgZEwgPSBsZW4vKG4tMSk7XHJcbiAgICBsZXQgTD0wO1xyXG4gICAgZm9yKGxldCBpPTAsIGQ9bHNbMF07IGk8bHMubGVuZ3RoLTEgJiYgTDxsZW4rMC4xKmRMOyArK2ksIGQrPWxzW2ldKSB7XHJcbiAgICAgIGlmKE1hdGguYWJzKEwtZCk8TWF0aC5hYnMoTC1kLWxzW2krMV0pKSB7XHJcbiAgICAgICAgZihpLCBMKTtcclxuICAgICAgICBMKz1kTDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoTDxsZW4rMC4xKmRMKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignbWFwbDJMOiBscyBpcyBub3QgZW5vdWdodCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRldDIoYSxiLGMsZCkge1xyXG4gICAgcmV0dXJuIGEqZC1iKmM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc29sdmUyTGluKGExLGIxLGEyLGIyKSB7XHJcbiAgICBsZXQgcmVzO1xyXG4gICAgY29uc3QgZD1CYXNlTWF0aFV0aWxzLmRldDIoYTFbMF0sYTFbMV0sYTJbMF0sYTJbMV0pO1xyXG4gICAgaWYoTWF0aC5hYnMoZCk+QmFzZU1hdGhVdGlscy5lcHMpIHtcclxuICAgICAgY29uc3QgZHg9QmFzZU1hdGhVdGlscy5kZXQyKGIxLGExWzFdLGIyLGEyWzFdKSwgZHk9QmFzZU1hdGhVdGlscy5kZXQyKGExWzBdLGIxLGEyWzBdLGIyKTtcclxuICAgICAgcmVzID0ge1xyXG4gICAgICAgIHg6IGR4L2QsXHJcbiAgICAgICAgeTogZHkvZFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc0luc2lkZVBvbHkocHMsIHApIHtcclxuICAgIGxldCBkb25lID0gZmFsc2UsIGN0O1xyXG4gICAgZm9yKGxldCBpPTA7IGk8cHMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgaWYoQmFzZU1hdGhVdGlscy52MmRpc3QocCwgcHNbaV0pPEJhc2VNYXRoVXRpbHMuZXBzKSB7XHJcbiAgICAgICAgY3Q9MTtcclxuICAgICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd2hpbGUoIWRvbmUpIHtcclxuICAgICAgZG9uZSA9IHRydWU7XHJcbiAgICAgIGN0ID0gMDtcclxuICAgICAgbGV0IG5wID0ge3g6IHAueCtNYXRoLnJhbmRvbSgpLTAuNSwgeTogcC55K01hdGgucmFuZG9tKCktMC41fSwgcm4gPSB7eDogbnAueC1wLngsIHk6IG5wLnktcC55fSwgYTE9W3JuLnksIC1ybi54XSwgYjE9cC54KnJuLnktcC55KnJuLng7XHJcbiAgICAgIGZvcihsZXQgaT0wOyBpPHBzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgY29uc3QgcDA9cHNbaV0sIHAxPXBzWyhpKzEpJXBzLmxlbmd0aF0sIG4gPSB7eDogcDEueC1wMC54LCB5Oi
13345BwMS55LXAwLnl9LCBhMj1bbi55LCAtbi54XSwgYjI9cDAueCpuLnktcDAueSpuLngsXHJcbiAgICAgICAgICBpcCA9IEJhc2VNYXRoVXRpbHMuc29sdmUyTGluKGExLGIxLGEyLGIyKTtcclxuICAgICAgICBpZihpcCkge1xyXG4gICAgICAgICAgaWYoQmFzZU1hdGhVdGlscy52MmRpc3QoaXAsIHAwKTxCYXNlTWF0aFV0aWxzLmVwcyB8fCBCYXNlTWF0aFV0aWxzLnYyZGlzdChpcCwgcDEpPEJhc2VNYXRoVXRpbHMuZXBzKSB7XHJcbiAgICAgICAgICAgIGRvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmKGlwLng+TWF0aC5taW4ocDAueCxwMS54KS1CYXNlTWF0aFV0aWxzLmVwcyYmaXAueDxNYXRoLm1heChwMC54LHAxLngpK0Jhc2VNYXRoVXRpbHMuZXBzICYmXHJcbiAgICAgICAgICAgICAgICAgIGlwLnk+TWF0aC5taW4ocDAueSxwMS55KS1CYXNlTWF0aFV0aWxzLmVwcyYmaXAueTxNYXRoLm1heChwMC55LHAxLnkpK0Jhc2VNYXRoVXRpbHMuZXBzKSB7XHJcbiAgICAgICAgICAgIGlmKEJhc2VNYXRoVXRpbHMudjJkaXN0KGlwLCBwKTxCYXNlTWF0aFV0aWxzLmVwcykge1xyXG4gICAgICAgICAgICAgIGN0PTE7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdG49e3g6IGlwLngtcC54LCB5OiBpcC55LXAueX07XHJcbiAgICAgICAgICAgICAgY3QgKz0gdG4ueCpybi54K3RuLnkqcm4ueT4wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3QlMjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpc0luc2lkZUNvbnZQb2x5KHBzLCBwKSB7XHJcbiAgICBsZXQgc2cgPSBbMCwgMF07XHJcbiAgICBmb3IobGV0IGk9MDsgaTxwcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBjb25zdCBwMD1wc1tpXSwgcDE9cHNbKGkrMSklcHMubGVuZ3RoXSwgYT17eDogcDAueC1wLngsIHk6IHAwLnktcC55fSwgYj17eDogcDEueC1wLngsIHk6IHAxLnktcC55fTtcclxuICAgICAgKytzZ1soYS54KmIueS1hLnkqYi54PDApKzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIH5zZy5pbmRleE9mKHBzLmxlbmd0aCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdjJsZW4odjIpIHtcclxuICAgIHJldHVybiBNYXRoLnNxcnQodjIueCp2Mi54K3YyLnkqdjIueSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdjJkaXN0KHYyMSwgdjIyKSB7XHJcbiAgICByZXR1cm4gQmFzZU1hdGhVdGlscy52Mmxlbih7XHJcbiAgICAgIHg6IHYyMi54LXYyMS54LFxyXG4gICAgICB5OiB2MjIueS12MjEueVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29tcHV0ZVNxdWFyZShwcykge1xyXG4gICAgY29uc3QgYSA9IFtdO1xyXG4gICAgbGV0IHAgPSAwO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8cHMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgYS5wdXNoKEJhc2VNYXRoVXRpbHMudjJkaXN0KHBzW2ldLCBwc1soaSsxKSVwcy5sZW5ndGhdKSk7XHJcbiAgICAgIHAgKz0gMC41KmFbaV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHAqKHAtYVswXSkqKHAtYVsxXSkqKHAtYVsyXSkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNvbXB1dGVJbnRlcnBDb2Vmcyh0cmksIHApIHtcclxuICAgIGNvbnN0IHMgPSBCYXNlTWF0aFV0aWxzLmNvbXB1dGVTcXVhcmUodHJpKSwgY29lZnM9W10sIGwgPSB0cmkubGVuZ3RoO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8bDsgKytpKSB7XHJcbiAgICAgIGNvZWZzW2ldID0gQmFzZU1hdGhVdGlscy5jb21wdXRlU3F1YXJlKFtwLCB0cmlbKGkrMSklbF0sIHRyaVsoaSsyKSVsXV0pL3M7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29lZnM7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9CYXNlTWF0aFV0aWxzLmpzIiwiaW1wb3J0IHtUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBCYXNlTWF0aFV0aWxzIGZyb20gJy4vQmFzZU1hdGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXRoVXRpbHMgZXh0ZW5kcyBCYXNlTWF0aFV0aWxzIHtcclxuICBzdGF0aWMgdjEgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG5cclxuICBzdGF0aWMgc3BsaXRTcGxpbmUoc3BsaW5lLCBOKSB7XHJcbiAgICBjb25zdCBvID0ge2xlbjogMCwgbHM6IFswXX0sIGRsPTEvTjtcclxuICAgIGZvcihsZXQgaT0wOyBpPD1OOyArK2kpIHtcclxuICAgICAgY29uc3QgcCA9IHNwbGluZS5nZXRQb2ludChpKmRsKTtcclxuICAgICAgaWYoaSkge1xyXG4gICAgICAgIGNvbnN0IGQgPSBNYXRoVXRpbHMudjEuZGlzdGFuY2VUbyhwKTtcclxuICAgICAgICBvLmxlbiArPSBkO1xyXG4gICAgICAgIG8ubHMucHVzaChkKTtcclxuICAgICAgfVxyXG4gICAgICBNYXRoVXRpbHMudjEuY29weShwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBvO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldExpbmVhckluZGVjZXMoc3BsaW5lLCBuKSB7XHJcbiAgICBjb25zdCBkZWwgPSA1MDAwLCBkRGVsID0gMS9kZWw7XHJcbiAgICBjb25zdCBscz1bMF07XHJcbiAgICBsZXQgbCA9IDA7XHJcbiAgICBmb3IobGV0IGk9MDsgaTw9ZGVsOyArK2kpIHtcclxuICAgICAgY29uc3QgcCA9IHNwbGluZS5nZXRQb2ludChpKmREZWwpO1xyXG4gICAgICBpZihpKSB7XHJcbiAgICAgICAgY29uc3QgZD1NYXRoVXRpbHMudjEuZGlzdGFuY2VUbyhwKTtcclxuICAgICAgICBsICs9IGQ7XHJcbiAgICAgICAgbHMucHVzaChkKTtcclxuICAgICAgfVxyXG4gICAgICBNYXRoVXRpbHMudjEuY29weShwKTtcclxuICAgIH1cclxuICAgIGxzLnB1c2goMWU3KTtcclxuXHJcbiAgICBjb25zdCByZXMgPSBbXSwgZGwgPSBsLyhuLTEpO1xyXG4gICAgZm9yKGxldCBpPTAsIEw9MCwgZD1sc1swXTsgaTxscy5sZW5ndGgtMTsgKytpLCBkKz1sc1tpXSkge1xyXG4gICAgICBpZihNYXRoLmFicyhMLWQpPE1hdGguYWJzKEwtZC1sc1tpKzFdKSkge1xyXG4gICAgICAgI
13345HJlcy5wdXNoKGkqZERlbCk7XHJcbiAgICAgICAgTCs9ZGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlZmluZVBvbHkocG9seSwgbWF4RGwpIHtcclxuICAgIGNvbnN0IHJlcyA9IFtdO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8cG9seS5sZW5ndGg7ICsraSkge1xyXG4gICAgICBjb25zdCBwMCA9IHBvbHlbaV0sIHAxID0gcG9seVsoaSsxKSVwb2x5Lmxlbmd0aF0sIGwgPSBCYXNlTWF0aFV0aWxzLnYyZGlzdChwMCwgcDEpLCBuID0gTWF0aC5jZWlsKGwvbWF4RGwpLCBkbCA9IGwvbjtcclxuICAgICAgcmVzLnB1c2gocDApO1xyXG4gICAgICBmb3IobGV0IGo9MTsgajxuOyArK2opIHtcclxuICAgICAgICByZXMucHVzaChuZXcgVEhSRUUuVmVjdG9yMihcclxuICAgICAgICAgIHAwLngraipkbCoocDEueC1wMC54KS9sLFxyXG4gICAgICAgICAgcDAueStqKmRsKihwMS55LXAwLnkpL2xcclxuICAgICAgICApKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL01hdGhVdGlscy5qcyIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxzIHtcclxuXHJcbiAgc3RhdGljIG5vcm1hbGl6ZVVybCh1cmwpIHtcclxuICAgIGZ1bmN0aW9uIHNwbGl0KHMpIHtcclxuICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXFxcXC9nLCAnLycpLnNwbGl0KCcvJyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBiYXNlID0gc3BsaXQod2luZG93LmxvY2F0aW9uLmhyZWYpO1xyXG4gICAgdXJsID0gc3BsaXQodXJsKTtcclxuICAgIGlmKGJhc2VbMl09PT11cmxbMl0pIHtcclxuICAgICAgdXJsWzBdID0gYmFzZVswXTtcclxuICAgIH1cclxuICAgIHJldHVybiB1cmwuam9pbignLycpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV4dGVuZHMoZGVyLCBiYXNlKSB7XHJcbiAgICBmb3IobGV0IG5hbWUgaW4gYmFzZSkge1xyXG4gICAgICBpZighZGVyLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgZGVyW25hbWVdID0gYmFzZVtuYW1lXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRlZmF1bHRDbXAoYSwgYikge1xyXG4gICAgcmV0dXJuIGEtYjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBsb3dlckJvdW5kKGEsIHgsIGNtcCkge1xyXG4gICAgY21wID0gY21wIHx8IFV0aWxzLmRlZmF1bHRDbXA7XHJcbiAgICBsZXQgbCA9IDAsIGggPSBhLmxlbmd0aC0xO1xyXG4gICAgd2hpbGUoaC1sPjEpIHtcclxuICAgICAgbGV0IG1pZCA9IE1hdGguZmxvb3IoKGwgKyBoKSAvIDIpO1xyXG4gICAgICBpZihjbXAoeCwgYVttaWRdKTwwKSB7XHJcbiAgICAgICAgaCA9IG1pZDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsID0gbWlkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY21wKHgsIGFbaF0pPj0wPyBoOiBsO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVXRpbHMuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgR3JhcGhVdGlscyBmcm9tICcuL0dyYXBoVXRpbHMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW1hZ2VCYXNlIHtcclxuXHJcbiAgc3RhdGljIHJlbmRlckNhbnZhcyA9ICAkKCc8Y2FudmFzPicpWzBdO1xyXG4gIHN0YXRpYyByZW5kZXJDYW52YXNDdHggPSBJbWFnZUJhc2UucmVuZGVyQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKSB7XHJcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgdGhpcy53bmQgPSBjb250ZXh0LnduZDtcclxuICAgIHRoaXMuZG9jID0gY29udGV4dC5kb2M7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQgfHwgY29udGV4dC5kb2MuYm9keTtcclxuICAgIHRoaXMuYyA9IGNvbnRleHQucmVuZGVyQ2FudmFzIHx8IEltYWdlQmFzZS5yZW5kZXJDYW52YXM7XHJcbiAgICB0aGlzLmN0eCA9IGNvbnRleHQucmVuZGVyQ2FudmFzQ3R4IHx8IEltYWdlQmFzZS5yZW5kZXJDYW52YXNDdHg7XHJcbiAgICB0aGlzLnJlc1cgPSB0aGlzLndpZHRoID0gd2lkdGg7XHJcbiAgICB0aGlzLnJlc0ggPSB0aGlzLmhlaWdodCA9IGhlaWdodDtcclxuICAgIHRoaXMuY29sb3IgPSBjb2xvcjtcclxuICB9XHJcblxyXG4gIHNldFJlc29sdXRpb24ocmVzKSB7XHJcbiAgICB0aGlzLnJlc1cgPSByZXMud2lkdGg7XHJcbiAgICB0aGlzLnJlc0ggPSByZXMuaGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuXHJcbiAgfVxyXG5cclxuICByZW5kZXJCbGFua1BhZ2UoKSB7XHJcbiAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcclxuICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IEdyYXBoVXRpbHMuY29sb3IyUmdiYSh0aGlzLmNvbG9yLCAxKTtcclxuICAgIHRoaXMuY3R4LnJlY3QoMCwgMCwgdGhpcy5jLndpZHRoLCB0aGlzLmMuaGVpZ2h0KTtcclxuICAgIHRoaXMuY3R4LmZpbGwoKTtcclxuICB9XHJcblxyXG4gIHJlbmRlckltYWdlKGltYWdlKSB7XHJcbiAgICB0aGlzLnB1c2hDdHgoKTtcclxuICAgIHRoaXMuY3R4LmRyYXdJbWFnZShpbWFnZSwgMCwgMCk7XHJcbiAgICB0aGlzLnBvcEN0eCgpO1xyXG4gIH1cclxuXHJcbiAgbm9ybVRvQ29udihwKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB4OiBwLngqdGhpcy5jLndpZHRoLFxyXG4gICAgICB5OiAoMS1wLnkpKnRoaXMuYy5oZWlnaHRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICByZW5kZXJIaXQocG9seSkge1xyXG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XHJcbiAgICBjdHguZmlsbFN0eWxlID0gJ3JnYmEoMjU1LDI1NSwwLDAuNCknO1xyXG4gICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgbGV0IHAgPSB0aGlzLm5vcm1Ub0NvbnYocG9seVswXSk7XHJcbiAgICBjdHgubW92ZVRvKHAueCwgcC55KTtcclxuICAgIGZvcihsZXQgaT0xOyBpPHBvbHkubGVuZ3RoOyArK2kpIHtcclxuICAgICAgcCA9IHRoaXMubm9ybVRvQ29udihwb2x5W2ldKTtcclxuICAgICAgY3R4LmxpbmVUbyhwLngsIHAueSk7XHJcbiAgICB9XHJcbiAgICBjdHguY2xvc2VQYXR
13345oKCk7XHJcbiAgICBjdHguZmlsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHVzaEN0eCgpIHtcclxuICAgIGlmKHRoaXMucmVzVyE9dGhpcy5jLndpZHRoKSB7XHJcbiAgICAgIHRoaXMuYy53aWR0aCA9IHRoaXMucmVzVztcclxuICAgIH1cclxuICAgIGlmKHRoaXMucmVzSCE9dGhpcy5jLmhlaWdodCkge1xyXG4gICAgICB0aGlzLmMuaGVpZ2h0ID0gdGhpcy5yZXNIO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdHguc2F2ZSgpO1xyXG4gICAgdGhpcy5jdHguc2NhbGUodGhpcy5jLndpZHRoL3RoaXMud2lkdGgsIHRoaXMuYy5oZWlnaHQvdGhpcy5oZWlnaHQpO1xyXG4gICAgcmV0dXJuIHRoaXMuY3R4O1xyXG4gIH1cclxuXHJcbiAgcG9wQ3R4KCkge1xyXG4gICAgdGhpcy5jdHgucmVzdG9yZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyTm90Rm91bmRQYWdlKCkge1xyXG4gICAgdGhpcy5yZW5kZXJCbGFua1BhZ2UoKTtcclxuICB9XHJcblxyXG4gIGZpbmlzaFJlbmRlcigpIHtcclxuICAgIGlmKHRoaXMub25DaGFuZ2UpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluaXNoTG9hZCgpIHtcclxuICAgIGlmKHRoaXMub25Mb2FkKSB7XHJcbiAgICAgIHRoaXMub25Mb2FkKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zdGFydFJlbmRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U2ltdWxhdGVkRG9jKCkge1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0ltYWdlQmFzZS5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudENvbnZlcnRlciB7XHJcblxyXG4gIC8vIHZpcnR1YWxzXHJcbiAgLy8gZ2V0T2JqZWN0KGUsIGRhdGEpO1xyXG4gIC8vIGdldENhbGxiYWNrKG9iamVjdCk7XHJcbiAgLy8gdGVzdChvYmplY3QxLCBvYmplY3QxKTtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MpIHtcclxuICAgIHRoaXMud25kID0gd25kO1xyXG4gICAgdGhpcy5kb2MgPSBkb2M7XHJcbiAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2V0RW5hYmxlKHZsKSB7XHJcbiAgICBpZighdmwpIHtcclxuICAgICAgaWYodGhpcy5tQ2FwT2JqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnkodGhpcy5tQ2FwT2JqZWN0LCAkLkV2ZW50KCdtb3VzZXVwJyksICdtb3VzZXVwJyk7XHJcbiAgICAgICAgdGhpcy5tQ2FwT2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMubUhvdk9iamVjdCkge1xyXG4gICAgICAgIHRoaXMubm90aWZ5KHRoaXMubUhvdk9iamVjdCwgJC5FdmVudCgnbW91c2VvdXQnKSwgJ21vdXNlb3V0Jyk7XHJcbiAgICAgICAgdGhpcy5tSG92T2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuYWJsZWQgPSB2bDtcclxuICB9XHJcblxyXG4gIGdldENhbGxiYWNrKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIG5vdGlmeShvYmplY3QsIGUsIHR5cGUpIHtcclxuICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRDYWxsYmFjayhvYmplY3QpO1xyXG4gICAgaWYoY2FsbGJhY2spIHtcclxuICAgICAgY29uc3QgcHJvcHMgPSB7XHJcbiAgICAgICAgLi4uZSxcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIHZpZXc6IHRoaXMud25kXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGpFID0gJC5FdmVudCh0eXBlLCBwcm9wcyk7XHJcbiAgICAgIGNhbGxiYWNrKGpFLCBvYmplY3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydChlLCBkYXRhKSB7XHJcbiAgICBpZighdGhpcy5lbmFibGVkKSByZXR1cm47XHJcblxyXG4gICAgaWYodGhpcy5maWx0ZXIpIHtcclxuICAgICAgZSA9IHRoaXMuZmlsdGVyKHRoaXMuZWxlbWVudCwgZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5nZXRPYmplY3QoZSwgZGF0YSksXHJcbiAgICAgIG5vdGlmeSA9IH5lLnR5cGUuaW5kZXhPZigndG91Y2gnKT8gdGhpcy5jb252ZXJ0VG91Y2goZSwgZGF0YSwgb2JqZWN0KTogdGhpcy5jb252ZXJ0TW91c2UoZSwgZGF0YSwgb2JqZWN0KTtcclxuICAgIGlmKG5vdGlmeSAmJiBvYmplY3QpIHtcclxuICAgICAgdGhpcy5ub3RpZnkob2JqZWN0LCBlLCBlLnR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydFRvdWNoKGUsIGRhdGEsIG9iamVjdCkge1xyXG4gICAgbGV0IG5vdGlmeSA9IHRydWU7XHJcbiAgICBzd2l0Y2goZS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3RvdWNoc3RhcnQnOiB7XHJcbiAgICAgICAgaWYodGhpcy50Q2FwT2JqZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeSh0aGlzLnRDYXBPYmplY3QsIGUsICd0b3VjaGVuZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRDYXBPYmplY3QgPSBvYmplY3Q7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAndG91Y2hlbmQnOiB7XHJcbiAgICAgICAgaWYodGhpcy50Q2FwT2JqZWN0ICYmICF0aGlzLnRlc3QodGhpcy50Q2FwT2JqZWN0LCBvYmplY3QpKSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeSh0aGlzLnRDYXBPYmplY3QsIGUsICd0b3VjaGVuZCcpO1xyXG4gICAgICAgICAgbm90aWZ5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYob2JqZWN0ICYmIHRoaXMudGVzdCh0aGlzLnRDYXBPYmplY3QsIG9iamVjdCkpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5KG9iamVjdCwgZSwgJ3RvdWNodGFwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudENhcE9iamVjdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICd0b3VjaHRhcCc6IHtcclxuICAgICAgICBub3RpZnkgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vdGlmeTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRNb3VzZShlLCBkYXRhLCBvYmplY3QpIHtcclxuICAgIGxldCBub3RpZnkgPSB0cnVlO1xyXG4gICAgc3dpdGNoKGUudHlwZSkge1xyXG4gICAgICBjYXNlICdtb3VzZWRvd24nOiB7XHJcbiAgICAgICAgaWYodGhpcy5tQ2FwT2JqZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeSh0aGlzLm1DYXBPYmplY3QsIGUsICdtb3VzZXVwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgI
13345HRoaXMubUNhcE9iamVjdCA9IG9iamVjdDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdtb3VzZXVwJzoge1xyXG4gICAgICAgIGlmKHRoaXMubUNhcE9iamVjdCAmJiAhdGhpcy50ZXN0KHRoaXMubUNhcE9iamVjdCwgb2JqZWN0KSkge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZnkodGhpcy5tQ2FwT2JqZWN0LCBlLCAnbW91c2V1cCcpO1xyXG4gICAgICAgICAgbm90aWZ5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2NsaWNrJzoge1xyXG4gICAgICAgIG5vdGlmeSA9IHRoaXMudGVzdCh0aGlzLm1DYXBPYmplY3QsIG9iamVjdCk7XHJcbiAgICAgICAgdGhpcy5tQ2FwT2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ21vdXNlZW50ZXInOlxyXG4gICAgICBjYXNlICdtb3VzZW92ZXInOlxyXG4gICAgICBjYXNlICdtb3VzZW1vdmUnOiB7XHJcbiAgICAgICAgaWYoIXRoaXMudGVzdCh0aGlzLm1Ib3ZPYmplY3QsIG9iamVjdCkgJiYgdGhpcy5tSG92T2JqZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeSh0aGlzLm1Ib3ZPYmplY3QsIGUsICdtb3VzZW91dCcpO1xyXG4gICAgICAgICAgdGhpcy5tSG92T2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5tSG92T2JqZWN0ICYmIG9iamVjdCkge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZnkob2JqZWN0LCBlLCAnbW91c2VvdmVyJyk7XHJcbiAgICAgICAgICB0aGlzLm1Ib3ZPYmplY3QgPSBvYmplY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5vdGlmeSA9IGUudHlwZSA9PT0gJ21vdXNlbW92ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnbW91c2VsZWF2ZSc6XHJcbiAgICAgIGNhc2UgJ21vdXNlb3V0Jzoge1xyXG4gICAgICAgIGlmKHRoaXMubUhvdk9iamVjdCkge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZnkodGhpcy5tSG92T2JqZWN0LCBlLCAnbW91c2VvdXQnKTtcclxuICAgICAgICAgIHRoaXMubUhvdk9iamVjdCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm90aWZ5ID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBub3RpZnk7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9FdmVudENvbnZlcnRlci5qcyIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyYXBoVXRpbHMge1xyXG5cclxuICBzdGF0aWMgZXh0cmFwb2xhdGVMaW5lYXIoeCx5LHhpKSB7XHJcbiAgICByZXR1cm4geVswXSsoeVsxXS15WzBdKS8oeFsxXS14WzBdKSooeGkteFswXSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaW50ZXJwb2xhdGUwMSh5MSx5Mix0KSB7XHJcbiAgICByZXR1cm4gR3JhcGhVdGlscy5leHRyYXBvbGF0ZUxpbmVhcihbMCwxXSxbeTEseTJdLHQpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldENvbG9yQnl0ZXMoY29sb3IpIHtcclxuICAgIHJldHVybiBbKGNvbG9yPj4xNikmMHhGRiwgKGNvbG9yPj44KSYweEZGLCBjb2xvciYweEZGXTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpbnZlcnNlQ29sb3IoY29sb3IsIHQ9MSkge1xyXG4gICAgY29uc3QgYnM9R3JhcGhVdGlscy5nZXRDb2xvckJ5dGVzKGNvbG9yKSxcclxuICAgICAgICAgIGlicz1bMHhGRi1ic1swXSwweEZGLWJzWzFdLDB4RkYtYnNbMl1dLFxyXG4gICAgICAgICAgbmJzPVtNYXRoLnJvdW5kKEdyYXBoVXRpbHMuaW50ZXJwb2xhdGUwMShic1swXSxpYnNbMF0sdCkpLE1hdGgucm91bmQoR3JhcGhVdGlscy5pbnRlcnBvbGF0ZTAxKGJzWzFdLGlic1sxXSx0KSksTWF0aC5yb3VuZChHcmFwaFV0aWxzLmludGVycG9sYXRlMDEoYnNbMl0saWJzWzJdLHQpKV07XHJcbiAgICByZXR1cm4gR3JhcGhVdGlscy5ieXRlczJDb2xvcihuYnMpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNvbG9yMlJnYmEoY29sb3IsIGEpIHtcclxuICAgIHJldHVybiBHcmFwaFV0aWxzLmJ5dGVzMlJnYmEoR3JhcGhVdGlscy5nZXRDb2xvckJ5dGVzKGNvbG9yKSwgYSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYnl0ZXMyUmdiYShicywgYSkge1xyXG4gICAgcmV0dXJuICdyZ2JhKCcrYnMuam9pbignLCcpKycsJythKycpJztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBieXRlczJDb2xvcihicykge1xyXG4gICAgcmV0dXJuIGJzWzJdfChic1sxXTw8OCl8KGJzWzBdPDwxNilcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvR3JhcGhVdGlscy5qcyIsImltcG9ydCBDYWNoZSBmcm9tICcuL0NhY2hlJztcclxuaW1wb3J0IEJsYW5rSW1hZ2UgZnJvbSAnLi9CbGFua0ltYWdlJztcclxuaW1wb3J0IFN0YXRpY0ltYWdlIGZyb20gJy4vU3RhdGljSW1hZ2UnO1xyXG5pbXBvcnQgUGRmSW1hZ2UgZnJvbSAnLi9QZGZJbWFnZSc7XHJcbmltcG9ydCBJbnRlcmFjdGl2ZUltYWdlIGZyb20gJy4vSW50ZXJhY3RpdmVJbWFnZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZUZhY3Rvcnkge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBjYWNoZSkge1xyXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgIHRoaXMuY2FjaGUgPSBjYWNoZSB8fCBuZXcgQ2FjaGUoKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkKGluZm8sIG49MCwgd2lkdGhUZXhlbHM9MjEwLCBoZWlnaHRUZXhlbHM9Mjk3LCBjb2xvcj0weEZGRkZGRiwgaW5qZWN0b3I9dW5kZWZpbmVkKSB7XHJcbiAgICBsZXQgaW1hZ2U7XHJcbiAgICBzd2l0Y2goaW5mby50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2h0bWwnOiB7XHJcbiAgICAgICAgaW1hZ2UgPSBuZXcgSW50ZXJhY3RpdmVJbWFnZSh0aGlzLmNvbnRleHQsIHdpZHRoVGV4ZWxzLCBoZWlnaHRUZXhlbHMsIGNvbG9yLCBpbmZvLnNyYywgdGhpcy5jYWNoZSwgaW5qZWN0b3IpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2ltYWdlJzoge1xyXG4gICAgICAgIGltYWdlID0gbmV3IFN0YXRpY0ltYWdlKHRoaXMuY29udGV4dCwgd2lkdGhUZXhlbHMsIGhlaWdodFRleGVscywgY29sb3IsIGluZm8uc3JjKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdwZGYnOi
13345B7XHJcbiAgICAgICAgaW1hZ2UgPSBuZXcgUGRmSW1hZ2UodGhpcy5jb250ZXh0LCB3aWR0aFRleGVscywgaGVpZ2h0VGV4ZWxzLCBjb2xvciwgaW5mby5zcmMsIG4pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2JsYW5rJzpcclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIGltYWdlID0gbmV3IEJsYW5rSW1hZ2UodGhpcy5jb250ZXh0LCB3aWR0aFRleGVscywgaGVpZ2h0VGV4ZWxzLCBjb2xvcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpbWFnZTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvSW1hZ2VGYWN0b3J5LmpzIiwiaW1wb3J0IHtwcm9wcyBhcyAgYm9va1Byb3BzfSBmcm9tICcuLi9wcm9wcy9ib29rJztcclxuaW1wb3J0IEJhc2VNYXRoVXRpbHMgZnJvbSAnQmFzZU1hdGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb29rUHJvcHNCdWlsZGVyIHtcclxuICBjb25zdHJ1Y3RvcihvblJlYWR5KSB7XHJcbiAgICB0aGlzLm9uUmVhZHkgPSBvblJlYWR5O1xyXG4gICAgdGhpcy5kZWZhdWx0cyA9IGJvb2tQcm9wcygpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuXHJcbiAgfVxyXG5cclxuICBjYWxjU2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICBjb25zdCBzY2FsZSA9IEJhc2VNYXRoVXRpbHMuY2FsY1NjYWxlKHdpZHRoLCBoZWlnaHQsIHRoaXMuZGVmYXVsdHMud2lkdGgsIHRoaXMuZGVmYXVsdHMuaGVpZ2h0KTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHdpZHRoOiBzY2FsZSp3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBzY2FsZSpoZWlnaHRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjYWxjVGV4ZWxzKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIGNvbnN0IHNoZWV0ID0gdGhpcy5kZWZhdWx0cy5zaGVldCwgc2NhbGUgPSBCYXNlTWF0aFV0aWxzLmNhbGNTY2FsZSh3aWR0aCwgaGVpZ2h0LCBzaGVldC53aWR0aFRleGVscywgc2hlZXQuaGVpZ2h0VGV4ZWxzKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHdpZHRoVGV4ZWxzOiBzY2FsZSp3aWR0aCxcclxuICAgICAgaGVpZ2h0VGV4ZWxzOiBzY2FsZSpoZWlnaHRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjYWxjUHJvcHMod2lkdGgsIGhlaWdodCkge1xyXG4gICAgdGhpcy5wcm9wcyA9IHtcclxuICAgICAgLi4udGhpcy5kZWZhdWx0cyxcclxuICAgICAgLi4udGhpcy5jYWxjU2l6ZSh3aWR0aCwgaGVpZ2h0KSxcclxuICAgICAgc2hlZXQ6IHtcclxuICAgICAgICAuLi50aGlzLmRlZmF1bHRzLnNoZWV0LFxyXG4gICAgICAgIC4uLnRoaXMuY2FsY1RleGVscyh3aWR0aCwgaGVpZ2h0KVxyXG4gICAgICB9LFxyXG4gICAgICBjb3Zlcjoge1xyXG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdHMuY292ZXIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBhZ2U6IHtcclxuICAgICAgICAuLi50aGlzLmRlZmF1bHRzLnBhZ2UsXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjYWxjU2hlZXRzKHBhZ2VzKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaGVldHMgPSBNYXRoLmNlaWwoTWF0aC5tYXgoMCwgcGFnZXMtNCkvMik7XHJcbiAgfVxyXG5cclxuICBnZXRTaGVldHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaGVldHM7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wcygpIHtcclxuICAgIHJldHVybiB0aGlzLnByb3BzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZUNhbGxiYWNrKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYmluZHMucGFnZUNhbGxiYWNrO1xyXG4gIH1cclxuXHJcbiAgcmVhZHkoKSB7XHJcbiAgICBpZih0aGlzLm9uUmVhZHkpIHtcclxuICAgICAgdGhpcy5vblJlYWR5KHRoaXMuZ2V0UHJvcHMoKSwgdGhpcy5nZXRTaGVldHMoKSwgdGhpcy5nZXRQYWdlQ2FsbGJhY2soKSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQm9va1Byb3BzQnVpbGRlci5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgc2hlZXRCbG9jayBmcm9tICcuLi9tb2RlbHMvc2hlZXRCbG9jayc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnTWF0aFV0aWxzJztcclxuaW1wb3J0IFRocmVlVXRpbHMgZnJvbSAnVGhyZWVVdGlscyc7XHJcbi8vIGltcG9ydCBUaHJlZU1hcmt1cCBmcm9tICcuL1RocmVlTWFya3VwJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoZWV0QmxvY2sge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih2aXN1YWwsIHAsIGZpcnN0LCBsYXN0LCBhbmdsZT0wLCBzdGF0ZT0nY2xvc2VkJywgaGVpZ2h0PTApIHtcclxuICAgIHRoaXMudmlzdWFsID0gdmlzdWFsO1xyXG4gICAgdGhpcy5wID0ge1xyXG4gICAgICAuLi5wLFxyXG4gICAgICBmaXJzdCxcclxuICAgICAgbGFzdFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcygpO1xyXG5cclxuICAgIGNvbnN0IGxvYWRlZFBvaW50cyA9IHRoaXMubG9hZFBvaW50cygpO1xyXG4gICAgT2JqZWN0LmtleXMobG9hZGVkUG9pbnRzKS5tYXAoKGspPT4ge1xyXG4gICAgICB0aGlzW2tdID0gbG9hZGVkUG9pbnRzW2tdW3Byb3BzLnNoYXBlXSB8fCBsb2FkZWRQb2ludHNba11bMF07XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnBTcGxpbmUgPSBuZXcgVEhSRUUuU3BsaW5lKFtdKTtcclxuICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuaW50ZXJwb2xhdGlvblBvaW50cy54WzBdLmxlbmd0aDsgKytpKSB7XHJcbiAgICBcdHRoaXMucFNwbGluZS5wb2ludHMucHVzaChuZXcgVEhSRUUuVmVjdG9yMygpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlTcGxpbmUgPSBuZXcgVEhSRUUuU3BsaW5lKFtdKTtcclxuICAgIGZvcihsZXQgaT0wOyBpPHNoZWV0QmxvY2sucmVzWDsgKytpKSB7XHJcbiAgICBcdHRoaXMuaVNwbGluZS5wb2ludHMucHVzaChuZXcgVEhSRUUuVmVjdG9yMygpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFTcGxpbmVzID0gW107XHJcblxyXG4gICAgLy90aGlzLnRocmVlID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcblxyXG4gICAgdGhpcy5nZW9tZXRyeSA9IHNoZWV0QmxvY2suZ2VvbWV0cnkuY2xvbmUoKTtcclxuXHJcbiAgICB0aGlzLnAuc2lkZUZhY2VzID0gW3tcclxuICAgICAgICBmaXJzdDogMCxcclxuICAgICAgICBsYXN0OiBzaGVldEJsb2NrLmZhY2VzWzBdX
13345HJcbiAgICAgIH0sIHtcclxuICAgICAgICBmaXJzdDogc2hlZXRCbG9jay5mYWNlc1swXSxcclxuICAgICAgICBsYXN0OiBzaGVldEJsb2NrLmZhY2VzWzFdXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5zaWRlVGV4dHVyZSA9IG5ldyBUSFJFRS5UZXh0dXJlKCk7XHJcbiAgICB0aGlzLnNpZGVUZXh0dXJlLndyYXBUID0gVEhSRUUuUmVwZWF0V3JhcHBpbmc7XHJcbiAgICB0aGlzLnNpZGVUZXh0dXJlLnJlcGVhdC5zZXQoMCwgbGFzdC1maXJzdCk7XHJcbiAgICB0aGlzLnNpZGVUZXh0dXJlLmltYWdlID0gcHJvcHMuc2lkZVRleHR1cmU7XHJcbiAgICB0aGlzLnNpZGVUZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm1hdGVyaWFscyA9IFtcclxuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoKSxcclxuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoKSxcclxuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe21hcDogdGhpcy5zaWRlVGV4dHVyZX0pLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7bWFwOiB0aGlzLnNpZGVUZXh0dXJlfSksXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHttYXA6IHRoaXMuc2lkZVRleHR1cmV9KSxcclxuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe21hcDogdGhpcy5zaWRlVGV4dHVyZX0pXHJcbiAgICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgdGhpcy5wLnNldFRleHR1cmUodGhpcy5tYXRlcmlhbHNbMF0sIDIqZmlyc3QpO1xyXG4gICAgdGhpcy5wLnNldFRleHR1cmUodGhpcy5tYXRlcmlhbHNbMV0sIDIqbGFzdC0xKTtcclxuXHJcbiAgICB0aGlzLm1lc2ggPSBuZXcgVEhSRUUuTWVzaCh0aGlzLmdlb21ldHJ5LCBuZXcgVEhSRUUuTWVzaEZhY2VNYXRlcmlhbCh0aGlzLm1hdGVyaWFscykpO1xyXG4gICAgdGhpcy5tZXNoLmNhc3RTaGFkb3cgPSBmYWxzZTtcclxuICAgIHRoaXMubWVzaC5yZWNlaXZlU2hhZG93ID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLm1lc2guZnJ1c3R1bUN1bGxlZCA9IHRydWU7XHJcblxyXG4gICAgLy90aGlzLnRocmVlLmFkZCh0aGlzLm1lc2gpO1xyXG4gICAgdGhpcy50aHJlZSA9IHRoaXMubWVzaDtcclxuICAgIHRoaXMudGhyZWUudXNlckRhdGEuc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgdGhpcy5tYXJrZXJzID0gW107XHJcbiAgICBpZih0aGlzLnAubWFya2VyLnVzZSkge1xyXG4gICAgICBjb25zdCBsPXRoaXMuZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoO1xyXG4gICAgICBsZXQgaXM7XHJcbiAgICAgIC8vIGlzID0gWzAsIHNoZWV0QmxvY2sucmVzWC0xLCAoc2hlZXRCbG9jay5yZXNaLTEpKnNoZWV0QmxvY2sucmVzWCwgc2hlZXRCbG9jay5yZXNaKnNoZWV0QmxvY2sucmVzWC0xXTtcclxuICAgICAgaXMgPSBBcnJheS5hcHBseSgwLCBBcnJheShsKSkubWFwKChfLCBpKT0+IGkpO1xyXG5cclxuICAgICAgZm9yKGxldCBpIG9mIGlzKSB7XHJcbiAgICAgICAgY29uc3QgbWFya2VyID0gVGhyZWVVdGlscy5jcmVhdGVNYXJrZXIodGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tpXSwgaTxsLzI/MHhGRjAwMDA6MHgwMEZGMDAsIHRoaXMucC5tYXJrZXIuc2l6ZSk7XHJcbiAgICAgICAgdGhpcy5tYXJrZXJzLnB1c2goe1xyXG4gICAgICAgICAgbWFya2VyLFxyXG4gICAgICAgICAgdmVydGV4OiBpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50aHJlZS5hZGQobWFya2VyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29ybmVyID0ge1xyXG4gICAgICB1c2U6IHRydWUsXHJcbiAgICAgIGhlaWdodDogMCxcclxuICAgICAgbWF4RGlzdGFuY2U6IDAsXHJcbiAgICAgIHBvaW50czogW10sXHJcbiAgICAgIE9aOiBuZXcgVEhSRUUuVmVjdG9yMygwLDAsMSksXHJcbiAgICAgIGF4aXM6IG5ldyBUSFJFRS5WZWN0b3IzKClcclxuICAgIH07XHJcbiAgICB0aGlzLnNldCgwLCAnY2xvc2VkJywgaGVpZ2h0LCBmaXJzdCwgbGFzdCk7IC8vIGNhbGN1bGF0ZSBjb3JuZXIgcG9pbnRzXHJcblxyXG4gICAgdGhpcy5zZXQoYW5nbGUsIHN0YXRlLCBoZWlnaHQsIGZpcnN0LCBsYXN0KTsgLy8gaW5pdCBwb3NpdGlvblxyXG5cclxuICAgIC8vIGlmKCFTaGVldEJsb2NrLm1hcmt1cCkge1xyXG4gICAgLy8gICBTaGVldEJsb2NrLm1hcmt1cD10cnVlO1xyXG4gICAgLy8gICB0aGlzLm1hcmt1cCA9IG5ldyBUaHJlZU1hcmt1cCh0aGlzLCAwLCBbe1xyXG4gICAgLy8gICAgIHg6IDAsXHJcbiAgICAvLyAgICAgeTogMCxcclxuICAgIC8vICAgfSwge1xyXG4gICAgLy8gICAgIHg6IDAuNSxcclxuICAgIC8vICAgICB5OiAxXHJcbiAgICAvLyAgIH0sIHtcclxuICAgIC8vICAgICB4OiAxLFxyXG4gICAgLy8gICAgIHk6IDBcclxuICAgIC8vICAgfV0ubWFwKChwKT0+bmV3IFRIUkVFLlZlY3RvcjIocC54LCBwLnkpKSwge30pO1xyXG4gICAgLy8gfVxyXG5cclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBmb3IobGV0IG0gb2YgdGhpcy5tYXRlcmlhbHMpIHtcclxuICAgICAgaWYobS5tYXApIHtcclxuICAgICAgICBtLm1hcCA9IG51bGw7XHJcbiAgICAgICAgbS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgbS5kaXNwb3NlKCk7XHJcbiAgICB9XHJcbiAgICBkZWxldGUgdGhpcy5tYXRlcmlhbHM7XHJcbiAgICB0aGlzLmdlb21ldHJ5LmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIGdldFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wLmxhc3QtdGhpcy5wLmZpcnN0O1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvcHMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi50aGlzLnAucGFnZSxcclxuICAgICAgc2hlZXRzOiB0aGlzLnAuc2hlZXRzXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0VG9wQ2VybmVycygpIHtcclxuICAgIGNvbnN0IG9mZiA9IHRoaXMuYW5nbGU+TWF0aC5QSS8yPyB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aC8yOiAwO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW29mZl0sXHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tzaGVldEJsb2NrLnJlc1gtMStvZmZdLFxyXG4gICAgICAgI
13345HRoaXMuZ2VvbWV0cnkudmVydGljZXNbKHNoZWV0QmxvY2sucmVzWi0xKSpzaGVldEJsb2NrLnJlc1grb2ZmXSxcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW3NoZWV0QmxvY2sucmVzWipzaGVldEJsb2NrLnJlc1gtMStvZmZdXHJcbiAgICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXRUb3BTaXplKCkge1xyXG4gICAgLy8gY29uc3QgbD10aGlzLmdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCwgb2ZmID0gdGhpcy5hbmdsZT5NYXRoLlBJLzI/IGwvMjogMCxcclxuICAgIC8vICAgdjAgPSB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW29mZl0sIHYxID0gdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tzaGVldEJsb2NrLnJlc1oqc2hlZXRCbG9jay5yZXNYLTErb2ZmXTtcclxuICAgIC8vIC8vIGlzID0gWzAsIHNoZWV0QmxvY2sucmVzWC0xLCAoc2hlZXRCbG9jay5yZXNaLTEpKnNoZWV0QmxvY2sucmVzWCwgc2hlZXRCbG9jay5yZXNaKnNoZWV0QmxvY2sucmVzWC0xXTtcclxuICAgIC8vIHJldHVybiB7XHJcbiAgICAvLyAgIHdpZHRoOiBNYXRoLmFicyh2MS54LXYwLngpLFxyXG4gICAgLy8gICBoZWlnaHQ6IE1hdGguYWJzKHYxLnotdjAueilcclxuICAgIC8vIH07XHJcbiAgICBjb25zdCB2cyA9IHRoaXMuZ2V0VG9wQ2VybmVycygpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2lkdGg6IHZzWzBdLmRpc3RhbmNlVG8odnNbMV0pLFxyXG4gICAgICBoZWlnaHQ6IHZzWzBdLmRpc3RhbmNlVG8odnNbMl0pXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0VG9wV29ybGRSb3RhdGlvbihxKSB7XHJcbiAgICBxLnggPSAtTWF0aC5QSS8yO1xyXG4gICAgcmV0dXJuIHE7XHJcbiAgfVxyXG5cclxuICBnZXRUb3BXb3JsZFBvc2l0aW9uKHYpIHtcclxuICAgIGNvbnN0IGw9dGhpcy5nZW9tZXRyeS52ZXJ0aWNlcy5sZW5ndGgsIG9mZiA9IHRoaXMuYW5nbGU+TWF0aC5QSS8yPyBsLzI6IDAsIHZzID0gW1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkudmVydGljZXNbb2ZmXSxcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW3NoZWV0QmxvY2sucmVzWC0xK29mZl0sXHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1soc2hlZXRCbG9jay5yZXNaLTEpKnNoZWV0QmxvY2sucmVzWCtvZmZdLFxyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkudmVydGljZXNbc2hlZXRCbG9jay5yZXNaKnNoZWV0QmxvY2sucmVzWC0xK29mZl1cclxuICAgICAgXTtcclxuICAgIHYuc2V0KDAsIDAsIDApO1xyXG4gICAgZm9yKGxldCB2aSBvZiB2cykge1xyXG4gICAgICB2LnggKz0gMC4yNSp2aS54O1xyXG4gICAgICB2LnkgKz0gMC4yNSp2aS55O1xyXG4gICAgICB2LnogKz0gMC4yNSp2aS56O1xyXG4gICAgfVxyXG4gICAgdGhpcy50aHJlZS5sb2NhbFRvV29ybGQodik7XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcblxyXG4gIGdldEludGVycG9sYXRpb25Qb2ludHMoaW5kcywgbW9kKSB7XHJcbiAgICBjb25zdCBwcyA9IHt4OiBbXSwgeTogW119LCBLID0gdGhpcy5nZXRQcm9wcygpLndhdmU7XHJcbiAgICBmb3IobGV0IGkgb2YgaW5kcykge1xyXG4gICAgICBwcy54LnB1c2goWy4uLnRoaXMuaW50ZXJwb2xhdGlvblBvaW50cy54W2ldXSk7XHJcbiAgICAgIHBzLnkucHVzaCh+bW9kLmluZGV4T2YoaSk/IHRoaXMuaW50ZXJwb2xhdGlvblBvaW50cy55W2ldLm1hcCgobik9PiBLKm4pOiBbLi4udGhpcy5pbnRlcnBvbGF0aW9uUG9pbnRzLnlbaV1dKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcztcclxuICB9XHJcblxyXG4gIHNldChhbmdsZSwgc3RhdGU9dGhpcy5zdGF0ZSwgaGVpZ2h0PXRoaXMuY29ybmVyLmhlaWdodCwgZmlyc3Q9dGhpcy5wLmZpcnN0LCBsYXN0PXRoaXMucC5sYXN0KSB7XHJcbiAgICBjb25zdCBQSSA9IE1hdGguUEk7XHJcbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XHJcbiAgICBsZXQgY2xvc2VkQW5nbGUsIGJpbmRlclR1cm47XHJcbiAgICBpZih0eXBlb2YgYW5nbGU9PT0nb2JqZWN0Jykge1xyXG4gICAgICB0aGlzLmFuZ2xlID0gYW5nbGUub3BlbmVkQW5nbGU7XHJcbiAgICAgIGNsb3NlZEFuZ2xlID0gYW5nbGUuY2xvc2VkQW5nbGU7XHJcbiAgICAgIGJpbmRlclR1cm4gPSBhbmdsZS5iaW5kZXJUdXJuPlBJLzI/UEktYW5nbGUuYmluZGVyVHVybjphbmdsZS5iaW5kZXJUdXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYW5nbGUgPSBhbmdsZTtcclxuICAgIH1cclxuICAgIHRoaXMuY29ybmVyLmhlaWdodCA9IGhlaWdodDtcclxuICAgIGlmKHRoaXMucC5maXJzdCE9PWZpcnN0IHx8IHRoaXMucC5sYXN0IT09bGFzdCkge1xyXG4gICAgICB0aGlzLnNpZGVUZXh0dXJlLnJlcGVhdC5zZXQoMCwgbGFzdC1maXJzdCk7XHJcbiAgICAgIHRoaXMuc2lkZVRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICBpZih0aGlzLnAuZmlyc3QhPT1maXJzdCkge1xyXG4gICAgICAgIHRoaXMucC5zZXRUZXh0dXJlKHRoaXMubWF0ZXJpYWxzWzBdLCAyKmZpcnN0KTtcclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLnAubGFzdCE9PWxhc3QpIHtcclxuICAgICAgICB0aGlzLnAuc2V0VGV4dHVyZSh0aGlzLm1hdGVyaWFsc1sxXSwgMipsYXN0LTEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnAuZmlyc3QgPSBmaXJzdDtcclxuICAgIHRoaXMucC5sYXN0ID0gbGFzdDtcclxuICAgIGxldCBwb2ludHM7XHJcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuZ2V0UHJvcHMoKTtcclxuICAgIGlmKHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnKSB7XHJcbiAgICAgIHBvaW50cyA9IHRoaXMuZ2V0SW50ZXJwb2xhdGlvblBvaW50cyh0aGlzLmNsb3NlZEludGVycG9sYXRpb25JbmRlY2VzLCB0aGlzLmNsb3NlZEludGVycG9sYXRpb25JbmRlY2VzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpIHtcclxuICAgICAgaWYoY2xvc2VkQW5nbGUhPT11bmRlZmluZWQgJiYgTWF0aC5hYnMoY2xvc2VkQW5nbGUtUEkvMik+MWUtMikge1xyXG4gICAgICAgIHBvaW50cyA9IHRoaXMuZ2V0SW50ZXJwb2xhdGlvblBvaW50cyh0aGlzLmZsYXRJbnRlcnBvbGF0aW9uSW5kZWNlcywgW10pO1xyXG4gICAgICAgIGNvbnN0IHBzID0gdGhpcy5nZXRQb2ludHNBdEFuZ2xlKHRoaXMuZ2V0SW50ZXJwb2xhdGlvblBvaW50cyh0aGlzLmNsb3NlZEludGVycG9sYXRpb25JbmRlY2VzLCB0aGlzLmNsb3NlZEludGVycG9sYXRpb25JbmRlY2VzKSwgY2xvc2VkQW5nbGU+UEkvMj9QSS1jbG9zZWRBbmdsZTpjbG9zZWRBbmdsZSk7XHJcbiAgICAgICAgcG9pbnRzLnggPSBbcHMueCwuLi5wb2ludHMueF07XHJcbiAgICAgICAgcG9pbnRzLnkgPSBbcHMueSwuLi5wb2ludHMueV07XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocHMpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgI
13345HBvaW50cyA9IHRoaXMuZ2V0SW50ZXJwb2xhdGlvblBvaW50cyh0aGlzLm9wZW5lZEludGVycG9sYXRpb25JbmRlY2VzLCB0aGlzLmNsb3NlZEludGVycG9sYXRpb25JbmRlY2VzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGhsLCBociwgb2Zmc2V0ID0gMC41KnByb3BzLnNoZWV0cypwcm9wcy5kZXB0aDtcclxuICAgIGlmKHRoaXMuc3RhdGU9PT0nY2xvc2VkJykge1xyXG4gICAgICBvZmZzZXQgLT0gN2UtNip0aGlzLnAuc2NhbGU7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmFuZ2xlPD1QSS8yKSB7XHJcbiAgICAgIGhsID0gKHByb3BzLnNoZWV0cy1maXJzdCkqcHJvcHMuZGVwdGg7XHJcbiAgICAgIGhyID0gKHByb3BzLnNoZWV0cy1sYXN0KSpwcm9wcy5kZXB0aDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBobCA9IGZpcnN0KnByb3BzLmRlcHRoO1xyXG4gICAgICBociA9IGxhc3QqcHJvcHMuZGVwdGg7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5BbmdsZSA9IHRoaXMuYW5nbGU+UEkvMj9QSS10aGlzLmFuZ2xlOnRoaXMuYW5nbGUsIGhBbmdsZSA9IHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnPyBpbkFuZ2xlOiAoYmluZGVyVHVybj09PXVuZGVmaW5lZD8gUEkvMjogYmluZGVyVHVybik7XHJcbiAgICBjb25zdCBbbGVmdCwgcmlnaHRdID0gdGhpcy5nZXRQb2ludHNBdEFuZ2xlQW5kSHMocG9pbnRzLCBpbkFuZ2xlLCBoQW5nbGUsIFtobC9wcm9wcy53aWR0aCwgaHIvcHJvcHMud2lkdGhdKTtcclxuICAgIGlmKHRoaXMuYW5nbGU+UEkvMikge1xyXG4gICAgICB0aGlzLmludmVyc2UobGVmdCk7XHJcbiAgICAgIHRoaXMuaW52ZXJzZShyaWdodCk7XHJcbiAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFBvaW50cyhsZWZ0LCByaWdodCwgb2Zmc2V0KTtcclxuICB9XHJcblxyXG4gIHNldFBvaW50cyhsZWZ0LCByaWdodCwgb2Zmc2V0KSB7XHJcbiAgICBjb25zdCBwID0gdGhpcy5nZXRQcm9wcygpO1xyXG4gICAgbGV0IGkgPSAwO1xyXG5cclxuICAgIGNvbnN0IHlzID0gW3JpZ2h0LCBsZWZ0XTtcclxuICAgIGZvcihsZXQgeSA9IDA7IHk8c2hlZXRCbG9jay5yZXNZOyArK3kpIHtcclxuICAgICAgZm9yKGxldCB6ID0gMDsgejxzaGVldEJsb2NrLnJlc1o7ICsreikge1xyXG4gICAgICAgIGZvcihsZXQgeCA9IDA7IHg8c2hlZXRCbG9jay5yZXNYOyArK3gpIHtcclxuICAgICAgICAgIHRoaXMuZ2VvbWV0cnkudmVydGljZXNbaSsrXS5zZXQoXHJcbiAgICAgICAgICAgIHlzW3ldLnhbeF0qcC53aWR0aCtvZmZzZXQsXHJcbiAgICAgICAgICAgIHlzW3ldLnlbeF0qcC53aWR0aCxcclxuICAgICAgICAgICAgeipwLmhlaWdodC8oc2hlZXRCbG9jay5yZXNaLTEpLTAuNSpwLmhlaWdodFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKGkhPT10aGlzLmdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ3NldFBvaW50czogYmFkIG1hcHBpbmchJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5jb3JuZXIudXNlICYmICF0aGlzLmNvcm5lci5wb2ludHMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHBsYW5lID0gbmV3IFRIUkVFLlBsYW5lKCksIG5vcm1hbCA9IHBsYW5lLm5vcm1hbCwgcGxhbmVPZmZzZXQgPSAoMS10aGlzLmdldFByb3BzKCkuZmxleGlibGVDb3JuZXIpKk1hdGgubWluKHAud2lkdGgsIHAuaGVpZ2h0KSwgcHJvaiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgICAgIHBsYW5lLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KG5ldyBUSFJFRS5WZWN0b3IzKC0xLDAsLTEpLm5vcm1hbGl6ZSgpLCBuZXcgVEhSRUUuVmVjdG9yMyhwbGFuZU9mZnNldCtvZmZzZXQsIDAsIDAuNSpwLmhlaWdodCkpO1xyXG4gICAgICBmb3IobGV0IGk9MCwgbD10aGlzLmdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aDtpPGw7KytpKSB7XHJcbiAgICAgICAgcGxhbmUucHJvamVjdFBvaW50KHRoaXMuZ2VvbWV0cnkudmVydGljZXNbaV0sIHByb2opO1xyXG4gICAgICAgIHByb2ouc3ViKHRoaXMuZ2VvbWV0cnkudmVydGljZXNbaV0pO1xyXG4gICAgICAgIGlmKHByb2oueCpub3JtYWwueCtwcm9qLnkqbm9ybWFsLnkrcHJvai56Km5vcm1hbC56PjApIHtcclxuICAgICAgICAgIGNvbnN0IGQgPSBwcm9qLmxlbmd0aCgpL3BsYW5lT2Zmc2V0O1xyXG4gICAgICAgICAgdGhpcy5jb3JuZXIubWF4RGlzdGFuY2UgPSBNYXRoLm1heCh0aGlzLmNvcm5lci5tYXhEaXN0YW5jZSwgZCk7XHJcbiAgICAgICAgICB0aGlzLmNvcm5lci5wb2ludHMucHVzaCh7dmVydGV4OiBpLCBkaXN0YW5jZTogZH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMuY29ybmVyLnVzZSAmJiBNYXRoLmFicyh0aGlzLmNvcm5lci5oZWlnaHQpPjFlLTMpIHtcclxuICAgICAgY29uc3QgZDJBbmdsZSA9IChkKT0+IHAuY29ybmVyRGV2aWF0aW9uKnRoaXMuY29ybmVyLmhlaWdodC8oMStNYXRoLmV4cCgtcC5iZW5kaW5nKihkLTAuNSp0aGlzLmNvcm5lci5tYXhEaXN0YW5jZSkpKTtcclxuICAgICAgdGhpcy5jb3JuZXIuYXhpcy5zZXQoLTEsMCwxKS5ub3JtYWxpemUoKTtcclxuICAgICAgdGhpcy5jb3JuZXIuYXhpcy5hcHBseUF4aXNBbmdsZSh0aGlzLmNvcm5lci5PWiwgdGhpcy5hbmdsZSk7XHJcbiAgICAgIGZvcihsZXQgcG9pbnQgb2YgdGhpcy5jb3JuZXIucG9pbnRzKSB7XHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1twb2ludC52ZXJ0ZXhdLmFwcGx5QXhpc0FuZ2xlKHRoaXMuY29ybmVyLmF4aXMsIGQyQW5nbGUocG9pbnQuZGlzdGFuY2UpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yKGxldCBtIG9mIHRoaXMubWFya2Vycykge1xyXG4gICAgICBtLm1hcmtlci5wb3NpdGlvbi5jb3B5KHRoaXMuZ2VvbWV0cnkudmVydGljZXNbbS52ZXJ0ZXhdKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdlb21ldHJ5LmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7XHJcbiAgICAvL3RoaXMuZ2VvbWV0cnkuY29tcHV0ZUZhY2VOb3JtYWxzKCk7XHJcbiAgICB0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaG
13345VyZSgpO1xyXG4gICAgLy90aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG4gICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc05lZWRVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgIGlmKHRoaXMubWFya3VwKSB7XHJcbiAgICAgIHRoaXMubWFya3VwLmNvbXB1dGVWZXJ0aWNlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW52ZXJzZShwcykge1xyXG4gICAgZm9yKGxldCBpID0gMDtpPHBzLngubGVuZ3RoOyArK2kpIHtcclxuICAgICAgcHMueFtpXT0tcHMueFtpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcztcclxuICB9XHJcblxyXG4gIGdldFBvaW50c0F0SHMocHMsIGFuZ2xlLCBocykge1xyXG4gICAgY29uc3QgTiA9IDEwMDA7XHJcbiAgICBNYXRoVXRpbHMuc2V0U3BsaW5lUG9pbnRzKHRoaXMucFNwbGluZSwgcHMpO1xyXG4gICAgbGV0IGJsID0gTWF0aFV0aWxzLnNwbGl0U3BsaW5lKHRoaXMucFNwbGluZSwgTiksIHI9W107XHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHAxID0gey4uLnRoaXMucFNwbGluZS5nZXRQb2ludCgoTi0xKS9OKX0sIHAyID0gey4uLnRoaXMucFNwbGluZS5nZXRQb2ludCgxKX0sXHJcbiAgICAgICAgZHAgPSB7eDogcDIueC1wMS54LCB5OiBwMi55LXAxLnl9LCBsbiA9IE1hdGguc3FydChkcC54KmRwLngrZHAueSpkcC55KSxcclxuICAgICAgICBzcCA9IHRoaXMucFNwbGluZS5wb2ludHNbdGhpcy5wU3BsaW5lLnBvaW50cy5sZW5ndGgtMV07XHJcbiAgICAgIHNwLnNldChzcC54KzAuMSpkcC54L2xuLCBzcC55KzAuMSpkcC55L2xuLCAwKTtcclxuICAgICAgYmwgPSBNYXRoVXRpbHMuc3BsaXRTcGxpbmUodGhpcy5wU3BsaW5lLCBOKTtcclxuICAgIH1cclxuICAgIGJsLmxzLnB1c2goMWU3KTtcclxuICAgIE1hdGhVdGlscy5tYXBsMkwoYmwubHMsIGJsLmxlbiwgc2hlZXRCbG9jay5yZXNYLCAoaSk9PiB7XHJcbiAgICAgIGZvcihsZXQgaj0wOyBqPGhzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgaWYoIWkpIHtcclxuICAgICAgICAgIHJbal0gPSB7eDogWy1oc1tqXSpNYXRoLnNpbihhbmdsZSldLCB5OiBbaHNbal0qTWF0aC5jb3MoYW5nbGUpXX07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcDAgPSB7Li4udGhpcy5wU3BsaW5lLmdldFBvaW50KChpLTEpL04pfSxcclxuICAgICAgICAgICAgICAgIHAxID0gdGhpcy5wU3BsaW5lLmdldFBvaW50KGkvTiksXHJcbiAgICAgICAgICAgICAgICB4PS0ocDEueS1wMC55KSwgeT0ocDEueC1wMC54KSwgbD1NYXRoLnNxcnQoeCp4K3kqeSk7XHJcbiAgICAgICAgICByW2pdLngucHVzaChwMS54K3gvbCpoc1tqXSk7XHJcbiAgICAgICAgICByW2pdLnkucHVzaChwMS55K3kvbCpoc1tqXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBucHM9W107XHJcbiAgICBmb3IobGV0IGo9MDsgajxocy5sZW5ndGg7ICsraikge1xyXG4gICAgICBucHNbal09e3g6W10seTpbXX07XHJcbiAgICAgIE1hdGhVdGlscy5zZXRTcGxpbmVQb2ludHModGhpcy5pU3BsaW5lLCByW2pdKTtcclxuICAgICAgY29uc3QgbCA9IE1hdGhVdGlscy5zcGxpdFNwbGluZSh0aGlzLmlTcGxpbmUsIE4pO1xyXG4gICAgICBsLmxzLnB1c2goMWU3KTtcclxuICAgICAgTWF0aFV0aWxzLm1hcGwyTChsLmxzLCAxLCBzaGVldEJsb2NrLnJlc1gsIChpKT0+IHtcclxuICAgICAgICBjb25zdCBwID0gdGhpcy5pU3BsaW5lLmdldFBvaW50KGkvTik7XHJcbiAgICAgICAgbnBzW2pdLngucHVzaChwLngpO1xyXG4gICAgICAgIG5wc1tqXS55LnB1c2gocC55KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnBzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9pbnRzQXRBbmdsZUFuZEhzKHBvaW50cywgYW5nbGUsIGhBbmdsZSwgaHMpIHtcclxuICAgIGNvbnN0IHBzID0gdGhpcy5nZXRQb2ludHNBdEFuZ2xlKHBvaW50cywgYW5nbGUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UG9pbnRzQXRIcyhwcywgaEFuZ2xlLCBocyk7XHJcbiAgfVxyXG5cclxuICBnZXRQb2ludHNBdEFuZ2xlKHBvaW50cywgYW5nbGUpIHtcclxuICAgIGNvbnN0IHBzPXt4OiBbXSwgeTpbXX0sIGFuZ2xlcz1bXTtcclxuICAgIGFuZ2xlLz1NYXRoLlBJLzI7XHJcbiAgICBmb3IobGV0IGogPSAwOyBqPHBvaW50cy54Lmxlbmd0aDsgKytqKSB7XHJcbiAgICAgIGFuZ2xlcy5wdXNoKGovKHBvaW50cy54Lmxlbmd0aC0xKSk7XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IGkgPSAwOyBpPHBvaW50cy54WzBdLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IHhwcyA9IFtdLCB5cHMgPSBbXTtcclxuICAgICAgZm9yKGxldCBqID0gMDsgajxwb2ludHMueC5sZW5ndGg7ICsraikge1xyXG4gICAgICAgIHhwcy5wdXNoKHBvaW50cy54W2pdW2ldKTtcclxuICAgICAgICB5cHMucHVzaChwb2ludHMueVtqXVtpXSk7XHJcbiAgICAgIH1cclxuICAgICAgcHMueC5wdXNoKHRoaXMuaW50ZXJwb2xhdGUoYW5nbGVzLHhwcyxhbmdsZSkpO1xyXG4gICAgICBwcy55LnB1c2godGhpcy5pbnRlcnBvbGF0ZShhbmdsZXMseXBzLGFuZ2xlKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHM7XHJcbiAgfVxyXG5cclxuICBpbnRlcnBvbGF0ZSh4LHkseGkpIHtcclxuICAgIGlmKCF0aGlzLmFTcGxpbmVzW3gubGVuZ3RoXSkge1xyXG4gICAgICB0aGlzLmFTcGxpbmVzW3gubGVuZ3RoXSA9IG5ldyBUSFJFRS5TcGxpbmUoW10pO1xyXG4gICAgICBjb25zdCBwcyA9IHRoaXMuYVNwbGluZXNbeC5sZW5ndGhdLnBvaW50cztcclxuICAgICAgZm9yKGxldCBpPTA7aTx4Lmxlbmd0aDsrK2kpIHtcclxuICAgICAgICBwcy5wdXNoKG5ldyBUSFJFRS5WZWN0b3IzKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBzcGxpbmUgPSB0aGlzLmFTcGxpbmVzW3gubGVuZ3RoXTtcclxuICAgIGZvcihsZXQgaT0wO2k8eC5sZW5ndGg7KytpKSB7XHJcbiAgICAgIHNwbGluZS5wb2ludHNbaV0uc2V0KHhbaV0sIHlbaV0sIDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNwbGluZS5nZXRQb2ludChNYXRoLm1pbigxLCBNYXRoLm1heCh4aSwgMCkpKS55O1xyXG4gIH1cclxuXHJcbiAgbG9hZFBvaW50cygpIHtcclxuICAgIGNvbnN0IHg9W10seT1bXTtcclxuICAgIGZvcihsZXQgciBvZiBbMCwgMC4yODc3LCAwLjYzNDcsIDAuODE3NCwgMS4wMDAwXSkge1xyXG4gICAgICB4LnB1c2gocipNYXRoLmNvcygwLjkqTWF0aC5QSS80KSk7XHJcbiAgICAgIHkucHVzaChyKk1hdGguc2luKDAuOSpNYXRoLlBJLzQpKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9wZW5lZEludGVycG9sYXRpb25JbmRlY2VzID0gW1xyXG4gICAgICBbMiwzLDRdLFxyXG4gICAgICBbMiwzLDQsNSw2XVxyXG4gICAgXSxcclxuICAgIGNsb3NlZEludGVycG9sYXRpb25JbmRlY2VzID0gW1xyXG4gICAgICBbMCwxLDJdLFxyXG4gICAgICBbMCwxLDJdXHJcbiAgICBdLFxyXG4gICAgZmxh
13345dEludGVycG9sYXRpb25JbmRlY2VzID0gW1xyXG4gICAgICBbNSw0XSxcclxuICAgICAgWzcsNl1cclxuICAgIF0sXHJcbiAgICBpbnRlcnBvbGF0aW9uUG9pbnRzID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgeDogW1xyXG4gICAgICAgICAgWzAsMC4yODc3LDAuNjM0NywwLjgxNzQsMS4wMDAwXSxcclxuICAgICAgICAgIFswLjAwMCwwLjI4NiwwLjYzMiwwLjgxNSwwLjk5N10sXHJcbiAgICAgICAgICBbMC4wMDAsMC4yNzksMC42MjMsMC44MDYsMC45ODhdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMTI2LDAuNDExLDAuNTkzLDAuNzc0XSxcclxuICAgICAgICAgIFswLDAsMCwwLDBdLFxyXG4gICAgICAgICAgeFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgeTogW1xyXG4gICAgICAgICAgWzAsMCwwLDAsMF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4wMzAsMC4wMTAsMC4wMDIsMC4wMDBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMDYwLDAuMDE3LDAuMDA0LDAuMDAwXSxcclxuICAgICAgICAgIFswLjAwMCwwLjI1OSwwLjQ0MCwwLjQ0NiwwLjQyOV0sXHJcbiAgICAgICAgICBbMCwgMC4yODc3LCAwLjYzNDcsIDAuODE3NCwgMS4wMDAwXSxcclxuICAgICAgICAgIHlcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB4OiBbXHJcbiAgICAgICAgICBbMCwwLjI4NzcsMC42MzQ3LDAuODE3NCwxLjAwMDBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMjg2LDAuNjMyLDAuODE1LDAuOTk3XSxcclxuICAgICAgICAgIFswLjAwMCwwLjI3OSwwLjYyMywwLjgwNiwwLjk4OF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4yMzMsMC41NjMsMC43NDYsMC45MjddLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMTQ0LDAuNDMzLDAuNjEzLDAuNzk2XSxcclxuICAgICAgICAgIFswLjAwMCwwLjA3MCwwLjI4OCwwLjQ1NSwwLjYyNl0sXHJcbiAgICAgICAgICBbMCwwLDAsMCwwXSxcclxuICAgICAgICAgIHhcclxuICAgICAgICBdLFxyXG4gICAgICAgIHk6IFtcclxuICAgICAgICAgIFswLDAsMCwwLDBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMDMwLDAuMDEwLDAuMDAyLDAuMDAwXSxcclxuICAgICAgICAgIFswLjAwMCwwLjA2MCwwLjAxNywwLjAwNCwwLjAwMF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4xNjgsMC4yNjksMC4yNzAsMC4yNTVdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMjQ1LDAuNDM1LDAuNDU4LDAuNDYwXSxcclxuICAgICAgICAgIFswLjAwMCwwLjI3OCwwLjU0NCwwLjYxNCwwLjY3M10sXHJcbiAgICAgICAgICBbMCwgMC4yODc3LCAwLjYzNDcsIDAuODE3NCwgMS4wMDAwXSxcclxuICAgICAgICAgIHlcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaW50ZXJwb2xhdGlvblBvaW50cyxcclxuICAgICAgb3BlbmVkSW50ZXJwb2xhdGlvbkluZGVjZXMsXHJcbiAgICAgIGNsb3NlZEludGVycG9sYXRpb25JbmRlY2VzLFxyXG4gICAgICBmbGF0SW50ZXJwb2xhdGlvbkluZGVjZXNcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvU2hlZXRCbG9jay5qcyIsIlxyXG5leHBvcnQgZnVuY3Rpb24gcHJvcHMoKSB7XHJcbiAgLy8gY29uc3QgcHJvcHMgPSB7XHJcbiAgLy8gICBoZWlnaHQsXHJcbiAgLy8gICB3aWR0aCxcclxuICAvLyAgIGdyYXZpdHksXHJcbiAgLy8gICBpbmplY3RvcixcclxuICAvLyAgIGNhY2hlZFBhZ2VzLFxyXG4gIC8vICAgcmVuZGVySW5hY3RpdmVQYWdlcyxcclxuICAvLyAgIHJlbmRlcldoaWxlRmxpcHBpbmcsXHJcbiAgLy8gICBwYWdlc0ZvclByZWRpY3RpbmcsXHJcbiAgLy8gICBwcmVsb2FkUGFnZXMsXHJcbiAgLy8gICBzaGVldDoge1xyXG4gIC8vICAgICBzdGFydFZlbG9jaXR5LFxyXG4gIC8vICAgICBjb3JuZXJEZXZpYXRpb24sXHJcbiAgLy8gICAgIGZsZXhpYmlsaXR5LFxyXG4gIC8vICAgICBmbGV4aWJsZUNvcm5lcixcclxuICAvLyAgICAgYmVuZGluZyxcclxuICAvLyAgICAgd2F2ZSxcclxuICAvLyAgICAgc2hhcGUsXHJcbiAgLy8gICAgIHdpZHRoVGV4ZWxzLFxyXG4gIC8vICAgICBoZWlnaHRUZXhlbHMsXHJcbiAgLy8gICAgIGNvbG9yLFxyXG4gIC8vICAgICBzaWRlVGV4dHVyZVxyXG4gIC8vICAgfSxcclxuICAvLyAgIGNvdmVyOiB7XHJcbiAgLy8gICAgIC4uLnNoZWV0LFxyXG4gIC8vICAgICBwYWRkaW5nLFxyXG4gIC8vICAgICBiaW5kZXJUZXh0dXJlLFxyXG4gIC8vICAgICBkZXB0aCxcclxuICAvLyAgICAgbWFzc1xyXG4gIC8vICAgfSxcclxuICAvLyAgIHBhZ2U6IHtcclxuICAvLyAgICAgLi4uc2hlZXQsXHJcbiAgLy8gICAgIGRlcHRoLFxyXG4gIC8vICAgICBtYXNzXHJcbiAgLy8gICB9XHJcbiAgLy8gfTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGhlaWdodDogMC4yOTcsXHJcbiAgICB3aWR0aDogMC4yMSxcclxuICAgIGdyYXZpdHk6IDEsXHJcbiAgICBjYWNoZWRQYWdlczogNTAsXHJcbiAgICByZW5kZXJJbmFjdGl2ZVBhZ2VzOiB0cnVlLFxyXG4gICAgcmVuZGVySW5hY3RpdmVQYWdlc09uTW9iaWxlOiBmYWxzZSxcclxuICAgIHJlbmRlcldoaWxlRmxpcHBpbmc6IGZhbHNlLFxyXG4gICAgcGFnZXNGb3JQcmVkaWN0aW5nOiA1LFxyXG4gICAgcHJlbG9hZFBhZ2VzOiA1LFxyXG4gICAgcnRsOiBmYWxzZSxcclxuICAgIHNoZWV0OiB7XHJcbiAgICAgIHN0YXJ0VmVsb2NpdHk6IDAuOSxcclxuICAgICAgY29ybmVyRGV2aWF0aW9uOiAwLjI1LFxyXG4gICAgICBmbGV4aWJpbGl0eTogMTAsXHJcbiAgICAgIGZsZXhpYmxlQ29ybmVyOiAwLjUsXHJcbiAgICAgIGJlbmRpbmc6IDExLFxyXG4gICAgICB3YXZlOiAwLjUsXHJcbiAgICAgIHNoYXBlOiAwLFxyXG4gICAgICB3aWR0aFRleGVsczogNSoyMTAsXHJcbiAgICAgIGhlaWdodFRleGVsczogNSoyOTcsXHJcbiAgICAgIGNvbG9yOiAweEZGRkZGRlxyXG4gICAgfSxcclxuICAgIGNvdmVyOiB7XHJcbiAgICAgIGJpbmRlclRleHR1cmU6ICcnLFxyXG4gICAgICBkZXB0aDogMC4wMDAzLFxyXG4gICAgICBwYWRkaW5nOiAwLFxyXG4gICAgICBtYXNzOiAwLjAwM1xyXG4gICAgfSxcclxuICAgIHBhZ2U6IHtcclxuICAgICAgZGVwdGg6IDAuMDAwMSxcclxuICAgICAgbWFzczogMC4wMDFcclxuICAgIH0sXHJcbiAgICBjc3NMYXllclByb3BzOiB7XHJcbiAgICAgIHdpZHRoOiAxMDI0XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvcHJvcHMvYm9vay5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuVEhSRUUuQ1NTM0RPYmplY3QgPSBjbGFzcyBDU1MzRE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEIHtcclxuICBjb25zdHJ1Y3RvcihlbGVtZW50PXVuZGVmaW5lZCkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICBpZihlbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuc2V0KGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0KGVsZW1lbnQpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgXHR0aGlzLmVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG5cclxuICBcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncmVtb3ZlZCcsIGZ1bmN0aW9uKCkge1xyXG4gIFx0XHRpZiAodGhpcy5lbGVtZW50LnBhcmVudE5vZGUgIT09IG51bGwpIHtcclxuICBcdFx0XHR0aGlzLmVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpO1xyXG4gIFx0XHR9XHJcbiAgXHR9KTtcclxuICB9XHJcbn07XHJcblxyXG5USFJFRS5DU1MzRFNwcml0ZSA9IGNsYXNzIENTUzNEU3ByaXRlIGV4dGVuZHMgVEhSRUUuQ1NTM0RPYmplY3Qge1xyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcclxuICAgIHN1cGVyKGVsZW1lbnQpO1xyXG4gIH1cclxufTtcclxuXHJcblRIUkVFLkNTUzNEUmVuZGVyZXIgPSBjbGFzcyBDU1MzRFJlbmRlcmVyIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuXHJcbiAgXHR2YXIgX3dpZHRoLCBfaGVpZ2h0O1xyXG4gIFx0dmFyIF93aWR0aEhhbGYsIF9oZWlnaHRIYWxmO1xyXG5cclxuICBcdHZhciBtYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xyXG5cclxuICBcdHZhciBjYWNoZSA9IHtcclxuICBcdFx0Y2FtZXJhOiB7IGZvdjogMCwgc3R5bGU6ICcnIH0sXHJcbiAgXHRcdG9iamVjdHM6IHt9XHJcbiAgXHR9O1xyXG5cclxuICBcdHZhciBkb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicpO1xyXG4gIFx0ZG9tRWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG5cclxuICBcdHRoaXMuZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQ7XHJcblxyXG4gIFx0dmFyIGNhbWVyYUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2Jyk7XHJcblxyXG4gIFx0Y2FtZXJhRWxlbWVudC5zdHlsZS5XZWJraXRUcmFuc2Zvcm1TdHlsZSA9ICdwcmVzZXJ2ZS0zZCc7XHJcbiAgXHRjYW1lcmFFbGVtZW50LnN0eWxlLk1velRyYW5zZm9ybVN0eWxlID0gJ3ByZXNlcnZlLTNkJztcclxuICBcdGNhbWVyYUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtU3R5bGUgPSAncHJlc2VydmUtM2QnO1xyXG5cclxuICBcdGRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNhbWVyYUVsZW1lbnQpO1xyXG5cclxuICBcdHZhciBpc0lFID0gL1RyaWRlbnQvaS50ZXN0KCBuYXZpZ2F0b3IudXNlckFnZW50KTtcclxuXHJcbiAgXHR0aGlzLnNldENsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7fTtcclxuXHJcbiAgXHR0aGlzLmdldFNpemUgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIFx0XHRyZXR1cm4ge1xyXG4gIFx0XHRcdHdpZHRoOiBfd2lkdGgsXHJcbiAgXHRcdFx0aG
13345VpZ2h0OiBfaGVpZ2h0XHJcbiAgXHRcdH07XHJcblxyXG4gIFx0fTtcclxuXHJcbiAgXHR0aGlzLnNldFNpemUgPSBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7XHJcblxyXG4gIFx0XHRfd2lkdGggPSB3aWR0aDtcclxuICBcdFx0X2hlaWdodCA9IGhlaWdodDtcclxuICBcdFx0X3dpZHRoSGFsZiA9IF93aWR0aCAvIDI7XHJcbiAgXHRcdF9oZWlnaHRIYWxmID0gX2hlaWdodCAvIDI7XHJcblxyXG4gIFx0XHRkb21FbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xyXG4gIFx0XHRkb21FbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcblxyXG4gIFx0XHRjYW1lcmFFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xyXG4gIFx0XHRjYW1lcmFFbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcblxyXG4gIFx0fTtcclxuXHJcbiAgXHRmdW5jdGlvbiBlcHNpbG9uKCB2YWx1ZSkge1xyXG5cclxuICBcdFx0cmV0dXJuIE1hdGguYWJzKCB2YWx1ZSkgPCAxZS0xMCA/IDAgOiB2YWx1ZTtcclxuXHJcbiAgXHR9XHJcblxyXG4gIFx0ZnVuY3Rpb24gZ2V0Q2FtZXJhQ1NTTWF0cml4KCBtYXRyaXgpIHtcclxuXHJcbiAgXHRcdHZhciBlbGVtZW50cyA9IG1hdHJpeC5lbGVtZW50cztcclxuXHJcbiAgXHRcdHJldHVybiAnbWF0cml4M2QoJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDAgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDEgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAyIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMyBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDQgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDUgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyA2IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgNyBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDggXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDkgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxMCBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDExIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTIgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDEzIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTQgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxNSBdKSArXHJcbiAgXHRcdCcpJztcclxuXHJcbiAgXHR9XHJcblxyXG4gIFx0ZnVuY3Rpb24gZ2V0T2JqZWN0Q1NTTWF0cml4KCBtYXRyaXgsIGNhbWVyYUNTU01hdHJpeCkge1xyXG5cclxuICBcdFx0dmFyIGVsZW1lbnRzID0gbWF0cml4LmVsZW1lbnRzO1xyXG4gIFx0XHR2YXIgbWF0cml4M2QgPSAnbWF0cml4M2QoJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDAgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMiBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDMgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDQgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDUgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDYgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDcgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyA4IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgOSBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDEwIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTEgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxMiBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDEzIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTQgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxNSBdKSArXHJcbiAgXHRcdCcpJztcclxuXHJcbiAgXHRcdGlmKGlzSUUpIHtcclxuXHJcbiAgXHRcdFx0cmV0dXJuICd0cmFuc2xhdGUoLTUwJSwtNTAlKScgK1xyXG4gIFx0XHRcdFx0J3RyYW5zbGF0ZSgnICsgX3dpZHRoSGFsZiArICdweCwnICsgX2hlaWdodEhhbGYgKyAncHgpJyArXHJcbiAgXHRcdFx0XHRjYW1lcmFDU1NNYXRyaXggK1xyXG4gIFx0XHRcdFx0bWF0cml4M2Q7XHJcblxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gJ3RyYW5zbGF0ZSgtNTAlLC01MCUpJyArIG1hdHJpeDNkO1xyXG5cclxuICBcdH1cclxuXHJcbiAgXHRmdW5jdGlvbiByZW5kZXJPYmplY3QoIG9iamVjdCwgY2FtZXJhLCBjYW1lcmFDU1NNYXRyaXgpIHtcclxuXHJcbiAgXHRcdGlmKG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkNTUzNET2JqZWN0KSB7XHJcblxyXG4gIFx0XHRcdHZhciBzdHlsZTtcclxuXHJcbiAgXHRcdFx0aWYob2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuQ1NTM0RTcHJpdGUpIHtcclxuICBcdFx0XHRcdG1hdHJpeC5jb3B5KCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcclxuICBcdFx0XHRcdG1hdHJpeC50cmFuc3Bvc2UoKTtcclxuICBcdFx0XHRcdG1hdHJpeC5jb3B5UG9zaXRpb24oIG9iamVjdC5tYXRyaXhXb3JsZCk7XHJcbiAgXHRcdFx0XHRtYXRyaXguc2NhbGUoIG9iamVjdC5zY2FsZSk7XHJcblxyXG4gIFx0XHRcdFx0bWF0cml4LmVsZW1lbnRzWyAzIF0gPSAwO1xyXG4gIFx0XHRcdFx0bWF0cml4LmVsZW1lbnRzWyA3IF0gPSAwO1xyXG4gIFx0XHRcdFx0bWF0cml4LmVsZW1lbnRzWyAxMSBdID0gMDtcclxuICBcdFx0XHRcdG1hdHJpeC5lbGVtZW50c1sgMTUgXSA9IDE7XHJcblxyXG4gIFx0XHRcdFx0c3R5bGUgPSBnZXRPYmplY3RDU1NNYXRyaXgoIG1hdHJpeCwgY2FtZXJhQ1NTTWF0cml4KTtcclxuXHJcbiAgXHRcdFx0fSBlbHNlIHtcclxuXHJcbiAgXHRcdFx0XHRzdHlsZSA9IGdldE9iamVjdENTU01hdHJpeCggb2JqZWN0Lm1hdHJpeFdvcmxkLCBjYW1lcmFDU1NNYXRyaXgpO1xyXG5cclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHZhciBlbGVtZW50ID0gb2JqZWN0LmVsZW1lbnQ7XHJcbiAgXHRcdFx0dmFyIGNhY2hlZFN0eWxlID0gY2FjaGUub2JqZWN0c1sgb2JqZWN0LmlkIF0gJiYgY2FjaGUub2JqZWN0c1sgb2JqZWN0LmlkIF0uc3R5bGU7XHJcblxyXG4gIFx0XHRcdGlmKGNhY2hlZFN0eWxlID09PSB1bmRlZmluZWQgfHwgY2FjaGVkU3R5bGUgIT09IHN0eWxlKSB7XHJcbiAgXHRcdFx0XHRlbGVtZW50LnN0eWxlLldlYmtpdFRyYW5zZm9ybSA9IHN0eWxlO1xyXG4gIFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5Nb3pUcmFuc2Zvcm0gPSBzdHlsZTtcclxuICBcdFx0XHRcdGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gc3R5bGU7XHJcblxyXG4gIFx0XHRcdFx0Y2FjaGUub2JqZWN0c1sgb2JqZWN0LmlkIF0gPSB7IHN0eWxlOiBzdHlsZSB9O1xyXG4gIFx0XHRcdFx0aWYoaXNJRSkge1xyXG4gIFx0XHRcdFx0XHRjYWNoZS5vYmplY3RzWyBvYmplY3QuaWQgXS5kaXN0YW5jZVRvQ2FtZXJhU3F1YXJlZCA9IGdldERpc3RhbmNlVG9TcXVhcmVkKCBjYW1lcmEsIG9iamVjdCk7XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRpZihlbGVtZW50LnBhcmVudE5vZGUgIT09IGNhbWVyYUVsZW1lbnQpIHtcclxuICBcdFx0XHRcdGNhbWVyYUVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsZW1lbnQpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0Zm9yKHZhciBpID0gMCwgbCA9IG9iamVjdC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrKSB7XHJcblxyXG4gIFx0XHRcdHJlbmRlck9iamVjdCggb2JqZWN0LmNoaWxkcmVuWyBpIF0sIGNhbWVyYSwgY2FtZXJhQ1NTTWF0cml4KTtcclxuXHJcbiAgXHRcdH1cclxuXHJcbiAgXHR9XHJcblxyXG4gIFx0dmFyIGdldERpc3RhbmNlVG9TcXVhcmVkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICBcdFx0dmFyIGEgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gIFx0XHR2YXIgYiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gZnVuY3Rpb24ob2JqZWN0MSwgb2JqZWN0Mikge1xyXG5cclxuICBcdFx0XHRhLnNldEZyb21NYXRyaXhQb3NpdGlvbiggb2JqZWN0MS5tYXRyaXhXb3JsZCk7XHJcbiAgXHRcdFx0Yi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG9iamVjdDIubWF0cml4V29ybGQpO1xyXG5cclxuICBcdFx0XHRyZXR1cm4gYS5kaXN0YW5jZVRvU3F1YXJlZCggYik7XHJcblxyXG4gIFx0XHR9O1xyXG5cclxuICBcdH0oKTtcclxuXHJcbiAgXHRmdW5jdGlvbiB6T3JkZXIoIHNjZW5lKSB7XHJcblxyXG4gIFx0XHR2YXIgb3JkZXIgPSBPYmplY3Qua2V5cyggY2FjaGUub2JqZWN0cykuc29ydCggZnVuY3Rpb24oYSwgYikge1xyXG5cclxuICBcdFx0XHRyZXR1cm4gY2FjaGUub2JqZWN0c1sgYSBdLmRpc3RhbmNlVG9DYW1lcmFTcXVhcmVkIC0gY2FjaGUub2JqZWN0c1sgYiBdLmRpc3RhbmNlVG9DYW1lcmFTcXVhcmVkO1xyXG5cclxuICBcdFx0fSk7XHJcbiAgXHRcdHZhciB6TWF4ID0gb3JkZXIubGVuZ3RoO1xyXG5cclxuICBcdFx0c2NlbmUudHJhdmVyc2UoIGZ1bmN0aW9uKG9iamVjdCkge1xyXG5cclxuICBcdFx0XHR2YXIgaW5kZXggPSBvcmRlci5pbmRleE9mKCBvYmplY3QuaWQgKyAnJyk7XHJcblxyXG4gIFx0XHRcdGlmKGluZGV4ICE9PSAtIDEpIHtcclxuXHJcbiAgXHRcdFx0XHRvYmplY3QuZWxlbWVudC5zdHlsZS56SW5kZXggPSB6TWF4IC0gaW5kZXg7XHJcblxyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdH1cclxuXHJcbiAgXHR0aGlzLnJlbmRlciA9IGZ1bmN0aW9uKHNjZW5lLCBjYW1lcmEpIHtcclxuXHJcbiAgXHRcdHZhciBmb3YgPSBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sgNSBdICogX2hlaWdodEhhbGY7XHJcblxyXG4gIFx0XHRpZihjYWNoZS5jYW1lcmEuZm92ICE9PSBmb3YpIHtcclxuXHJcbiAgXHRcdFx0ZG9tRWxlbWVudC5zdHlsZS5XZWJraXRQZXJzcG
13345VjdGl2ZSA9IGZvdiArICdweCc7XHJcbiAgXHRcdFx0ZG9tRWxlbWVudC5zdHlsZS5Nb3pQZXJzcGVjdGl2ZSA9IGZvdiArICdweCc7XHJcbiAgXHRcdFx0ZG9tRWxlbWVudC5zdHlsZS5wZXJzcGVjdGl2ZSA9IGZvdiArICdweCc7XHJcblxyXG4gIFx0XHRcdGNhY2hlLmNhbWVyYS5mb3YgPSBmb3Y7XHJcblxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRzY2VuZS51cGRhdGVNYXRyaXhXb3JsZCgpO1xyXG5cclxuICBcdFx0aWYoY2FtZXJhLnBhcmVudCA9PT0gbnVsbCkgY2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XHJcblxyXG4gIFx0XHR2YXIgY2FtZXJhQ1NTTWF0cml4ID0gJ3RyYW5zbGF0ZVooJyArIGZvdiArICdweCknICtcclxuICBcdFx0XHRnZXRDYW1lcmFDU1NNYXRyaXgoIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xyXG5cclxuICBcdFx0dmFyIHN0eWxlID0gY2FtZXJhQ1NTTWF0cml4ICtcclxuICBcdFx0XHQndHJhbnNsYXRlKCcgKyBfd2lkdGhIYWxmICsgJ3B4LCcgKyBfaGVpZ2h0SGFsZiArICdweCknO1xyXG5cclxuICBcdFx0aWYoY2FjaGUuY2FtZXJhLnN0eWxlICE9PSBzdHlsZSAmJiAhIGlzSUUpIHtcclxuXHJcbiAgXHRcdFx0Y2FtZXJhRWxlbWVudC5zdHlsZS5XZWJraXRUcmFuc2Zvcm0gPSBzdHlsZTtcclxuICBcdFx0XHRjYW1lcmFFbGVtZW50LnN0eWxlLk1velRyYW5zZm9ybSA9IHN0eWxlO1xyXG4gIFx0XHRcdGNhbWVyYUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gc3R5bGU7XHJcblxyXG4gIFx0XHRcdGNhY2hlLmNhbWVyYS5zdHlsZSA9IHN0eWxlO1xyXG5cclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmVuZGVyT2JqZWN0KCBzY2VuZSwgY2FtZXJhLCBjYW1lcmFDU1NNYXRyaXgpO1xyXG5cclxuICBcdFx0aWYoaXNJRSkge1xyXG5cclxuICBcdFx0XHQvLyBJRTEwIGFuZCAxMSBkb2VzIG5vdCBzdXBwb3J0ICdwcmVzZXJ2ZS0zZCcuXHJcbiAgXHRcdFx0Ly8gVGh1cywgei1vcmRlciBpbiAzRCB3aWxsIG5vdCB3b3JrLlxyXG4gIFx0XHRcdC8vIFdlIGhhdmUgdG8gY2FsYyB6LW9yZGVyIG1hbnVhbGx5IGFuZCBzZXQgQ1NTIHotaW5kZXggZm9yIElFLlxyXG4gIFx0XHRcdC8vIEZZSTogei1pbmRleCBjYW4ndCBoYW5kbGUgb2JqZWN0IGludGVyc2VjdGlvblxyXG4gIFx0XHRcdHpPcmRlciggc2NlbmUpO1xyXG5cclxuICBcdFx0fVxyXG5cclxuICBcdH07XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVEhSRUUuQ1NTM0RSZW5kZXJlcjtcclxuXHJcbmNvbnN0IF9DU1MzRE9iamVjdCA9IFRIUkVFLkNTUzNET2JqZWN0LCBfQ1NTM0RTcHJpdGUgPSBUSFJFRS5DU1MzRFNwcml0ZTtcclxuZXhwb3J0IHtcclxuICBfQ1NTM0RPYmplY3QgYXMgQ1NTM0RPYmplY3QsXHJcbiAgX0NTUzNEU3ByaXRlIGFzIENTUzNEU3ByaXRlXHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0NTUzNEUmVuZGVyZXIuanMiLCJpbXBvcnQge1RIUkVFLCAkfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IHtDU1MzRE9iamVjdH0gZnJvbSAnLi9DU1MzRFJlbmRlcmVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU0xheWVyIGV4dGVuZHMgQ1NTM0RPYmplY3Qge1xyXG5cclxuICBzdGF0aWMgZGVsYXk7XHJcbiAgc3RhdGljIHN0eWxlO1xyXG4gIHN0YXRpYyBpbml0KGRvYywgZGVsYXk9MTUwKSB7XHJcbiAgICBDU1NMYXllci5kZWxheSA9IGRlbGF5O1xyXG4gICAgQ1NTTGF5ZXIuc3R5bGUgPSAkKGA8c3R5bGUgdHlwZT10ZXh0L2Nzcz5cclxuICAgICAgLmNzcy1sYXllciB7XHJcbiAgICBcdFx0b3BhY2l0eTogMTtcclxuICAgIFx0XHR0cmFuc2l0aW9uOiBvcGFjaXR5ICR7ZGVsYXl9bXMgZWFzZS1vdXQ7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcclxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgXHR9XHJcbiAgICBcdC5jc3MtbGF5ZXIuaGlkZGVuIHtcclxuICAgIFx0XHR0cmFuc2l0aW9uOiBvcGFjaXR5ICR7ZGVsYXl9bXMgZWFzZS1pbiwgdmlzaWJpbGl0eSAke2RlbGF5fW1zIHN0ZXAtZW5kO1xyXG4gICAgXHRcdG9wYWNpdHk6IDA7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgICB9XHJcbiAgICA8L3N0eWxlPmApLmFwcGVuZFRvKGRvYy5oZWFkKTtcclxuICB9XHJcbiAgc3RhdGljIGRpc3Bvc2UoKSB7XHJcbiAgICBDU1NMYXllci5zdHlsZS5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIHByb3BzKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xyXG4gICAgdGhpcy5qQ29udGFpbmVyID0gJCgnPGRpdiBjbGFzcz1cImhpZGRlbiBjc3MtbGF5ZXJcIj48L2Rpdj4nKTtcclxuICBcdGNvbnN0IHdpZHRoUHhzID0gcHJvcHMud2lkdGgsIGhlaWdodFB4cyA9IGhlaWdodC93aWR0aC
13345p3aWR0aFB4cztcclxuICAgIHRoaXMuakNvbnRhaW5lci53aWR0aCh3aWR0aFB4cykuaGVpZ2h0KGhlaWdodFB4cyk7XHJcbiAgXHR0aGlzLnNjYWxlLnggLz0gd2lkdGhQeHMvd2lkdGg7XHJcbiAgXHR0aGlzLnNjYWxlLnkgLz0gd2lkdGhQeHMvd2lkdGg7XHJcblxyXG4gICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICB0aGlzLnNldCh0aGlzLmpDb250YWluZXJbMF0pO1xyXG4gIH1cclxuXHJcbiAgY2FsbEludGVybmFsKG5hbWUpIHtcclxuICAgIGlmKHRoaXMub2JqZWN0ICYmIHRoaXMub2JqZWN0W25hbWVdKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5vYmplY3RbbmFtZV0oKTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY2xlYXJJbnRlcm5hbHMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFySW50ZXJuYWxzKCkge1xyXG4gICAgdGhpcy5jYWxsSW50ZXJuYWwoJ2Rpc3Bvc2UnKTtcclxuICAgICF0aGlzLmNzcyB8fCB0aGlzLmNzcy5yZW1vdmUoKTtcclxuICAgICF0aGlzLmh0bWwgfHwgdGhpcy5odG1sLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0YShjc3M9JycsIGh0bWw9JycsIGpzPScnKSB7XHJcbiAgICB0aGlzLmNsZWFySW50ZXJuYWxzKCk7XHJcblxyXG4gICAgdGhpcy5jc3MgPSAkKGA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+JHtjc3N9PC9zdHlsZT5gKS5hcHBlbmRUbyh0aGlzLmpDb250YWluZXIpO1xyXG4gICAgdGhpcy5odG1sID0gJChodG1sKS5hcHBlbmRUbyh0aGlzLmpDb250YWluZXIpO1xyXG4gICAgY29uc3QgaW5pdCA9IGV2YWwoanMpO1xyXG4gICAgaWYoaW5pdCkge1xyXG4gICAgICB0aGlzLm9iamVjdCA9IGluaXQodGhpcy5qQ29udGFpbmVyLCB0aGlzLnByb3BzKSB8fCB7fTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBlbmRlZENhbGwoY2xiKSB7XHJcbiAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLnRpbWVzdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICBpZih0aW1lc3RhbXA9PT10aGlzLnRpbWVzdGFtcCkge1xyXG4gICAgICAgIGNsYigpO1xyXG4gICAgICB9XHJcbiAgICB9LCBDU1NMYXllci5kZWxheSk7XHJcbiAgfVxyXG5cclxuICBpc0hpZGRlbigpIHtcclxuICAgIHJldHVybiB0aGlzLmpDb250YWluZXIuaGFzQ2xhc3MoJ2hpZGRlbicpO1xyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIGxldCByZXM7XHJcbiAgICBpZighdGhpcy5pc0hpZGRlbigpKSB7XHJcbiAgICAgIHRoaXMuakNvbnRhaW5lci5hZGRDbGFzcygnaGlkZGVuJyk7XHJcbiAgICAgIHRoaXMuY2FsbEludGVybmFsKCdoaWRlJyk7XHJcbiAgICAgIHJlcyA9IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+IHtcclxuICAgICAgICB0aGlzLnBlbmRlZENhbGwoKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGxJbnRlcm5hbCgnaGlkZGVuJyk7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlcyA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHNob3coKSB7XHJcbiAgICBsZXQgcmVzO1xyXG4gICAgaWYodGhpcy5pc0hpZGRlbigpKSB7XHJcbiAgICAgIHRoaXMuakNvbnRhaW5lci5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XHJcbiAgICAgIHRoaXMuY2FsbEludGVybmFsKCdzaG93Jyk7XHJcbiAgICAgIHJlcyA9IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+IHtcclxuICAgICAgICB0aGlzLnBlbmRlZENhbGwoKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGxJbnRlcm5hbCgnc2hvd24nKTtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvQ1NTTGF5ZXIuanMiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBDYWNoZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG1heFNpemU9SW5maW5pdHksIHNpemVvZj1DYWNoZS5jb3VudFNpemVvZikge1xyXG4gICAgdGhpcy5vcyA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMuc2l6ZW9mID0gc2l6ZW9mO1xyXG4gICAgdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcclxuICAgIHRoaXMuc2l6ZSA9IDA7XHJcbiAgfVxyXG5cclxuICBmb3JFYWNoKGNsYikge1xyXG4gICAgdGhpcy5vcy5mb3JFYWNoKCh2LCBrKT0+IGNsYihbayx2XSkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNvdW50U2l6ZW9mKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIHJlbW92ZShrKSB7XHJcbiAgICBsZXQgcmVzID0gZmFsc2U7XHJcbiAgICBjb25zdCB2ID0gdGhpcy5vcy5nZXQoayk7XHJcbiAgICBpZighdi5sb2NrZWQgfHwgIXYubG9ja2VkKGspKSB7XHJcbiAgICAgIHRoaXMuc2l6ZSAtPSB0aGlzLnNpemVvZih2KTtcclxuICAgICAgaWYodi5kaXNwb3NlKSB7XHJcbiAgICAgICAgdi5kaXNwb3NlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcy5kZWxldGUoayk7XHJcbiAgICAgIHJlcyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgZnJlZVNwYWNlKCkge1xyXG4gICAgY29uc3QgYXJyID0gW107XHJcbiAgICBmb3IobGV0IHAgb2YgdGhpcy5vcykge1xyXG4gICAgICBhcnIucHVzaCh7dGltZXN0YW1wOiBwWzFdLnRpbWVzdGFtcCwga2V5OiBwWzBdfSk7XHJcbiAgICB9XHJcbiAgICBhcnIuc29ydCgoYSwgYik9PiBhLnRpbWVzdGFtcC1iLnRpbWVzdGFtcCk7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxhcnIubGVuZ3RoICYmIHRoaXMuc2l6ZT4zKnRoaXMubWF4U2l6ZS80OyArK2kpIHtcclxuICAgICAgdGhpcy5yZW1vdmUoYXJyW2ldLmtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgY29uc3QgYXJyID0gW107XHJcbiAgICBmb3IobGV0IHAgb2YgdGhpcy5vcykge1xyXG4gICAgICBhcnIucHVzaCh7djogcFsxXSwgazogcFswXX0pO1xyXG4gICAgfVxyXG4gICAgZm9yKGxldCBvIG9mIGFycikge1xyXG4gICAgICBpZihvLnYuZGlzcG9zZSkge1xyXG4gICAgICAgIG8udi5kaXNwb3NlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcy5kZWxldGUoby5rKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyByZWN1cnNpb25TaXplb2YodmFsdWUpIHtcclxuICAgIGxldCBzaXplID0gMDtcclxuICAgIGlmKHZhbHVlKSB7XHJcbiAgICAgICsrc2l6ZTtcclxuICAgICAgY29uc3QgbGVuID0gdmFsdWUubGVuZ3RoO1xyXG4gICAgICBpZihsZW49PT11bmRlZmluZWQpIHtcclxuICAgICAgICBmb3IgKGxldCBwIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICBpZih2YWx1ZS
133455oYXNPd25Qcm9wZXJ0eShwKSkge1xyXG4gICAgICAgICAgICBzaXplKz1DYWNoZS5yZWN1cnNpb25TaXplb2YodmFsdWVbcF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzaXplKz1sZW5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNpemU7XHJcbiAgfVxyXG5cclxuICBnZXRUaW1lc3RhbXAoKSB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcclxuICB9XHJcblxyXG5cclxuICBnZXQoa2V5KSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMub3MuZ2V0KGtleSk7XHJcbiAgICBpZih2YWx1ZSkge1xyXG4gICAgICB2YWx1ZS50aW1lc3RhbXAgPSB0aGlzLmdldFRpbWVzdGFtcCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHV0KGtleSwgdmFsdWUpIHtcclxuICAgIHZhbHVlLnRpbWVzdGFtcCA9IHRoaXMuZ2V0VGltZXN0YW1wKCk7XHJcbiAgICB0aGlzLm9zLnNldChrZXksIHZhbHVlKTtcclxuICAgIHRoaXMuc2l6ZSs9dGhpcy5zaXplb2YodmFsdWUpO1xyXG4gICAgaWYodGhpcy5zaXplPnRoaXMubWF4U2l6ZSkge1xyXG4gICAgICB0aGlzLmZyZWVTcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9DYWNoZS5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udHJvbGxlciBleHRlbmRzIFRIUkVFLkV2ZW50RGlzcGF0Y2hlciB7XHJcblxyXG4gIGhhbmRsZURlZmF1bHQoaWQsIGUsIGRhdGEpIHtcclxuICAgIC8vY29uc29sZS5sb2coaWQrJy0nK2UudHlwZSsnLScrZGF0YSk7XHJcbiAgfVxyXG5cclxuICBkaXNwYXRjaEFzeW5jKGUpIHtcclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB0aGlzLmRpc3BhdGNoRXZlbnQoZSkpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuXHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Db250cm9sbGVyLmpzIiwiaW1wb3J0IEV2ZW50Q29udmVydGVyIGZyb20gJy4vRXZlbnRDb252ZXJ0ZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tRXZlbnRDb252ZXJ0ZXIgZXh0ZW5kcyBFdmVudENvbnZlcnRlciB7XHJcblxyXG4gIC8vIGN1c3RvbVxyXG4gIC8vIHRlc3RJbnRlcnNlY3Rpb24oZSwgZGF0YSk7XHJcbiAgLy8gY3VzdG9tLm9iamVjdFxyXG4gIC8vIHRlc3Qob2JqZWN0KTtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIGN1c3RvbVRlc3Q9KCk9PiBmYWxzZSwgZURvYykge1xyXG4gICAgc3VwZXIod25kLCBkb2MpO1xyXG5cclxuICAgIHRoaXMuZURvYyA9IGVEb2M7XHJcbiAgICB0aGlzLmN1c3RvbVRlc3QgPSBjdXN0b21UZXN0O1xyXG4gICAgdGhpcy5jdXN0b21zID0gW107XHJcbiAgfVxyXG5cclxuICB0ZXN0KG9iamVjdDEsIG9iamVjdDIpIHtcclxuICAgIHJldHVybiBvYmplY3QxICYmIG9iamVjdDI/IHRoaXMuY3VzdG9tVGVzdChvYmplY3QxLCBvYmplY3QyKTogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRDYWxsYmFjayhvYmplY3QpIHtcclxuICAgIHJldHVybiBvYmplY3QudGFyZ2V0LmNhbGxiYWNrO1xyXG4gIH1cclxuXHJcbiAgYWRkQ3VzdG9tKGN1c3RvbSkge1xyXG4gICAgdGhpcy5jdXN0b21zLnB1c2goY3VzdG9tKTtcclxuICB9XHJcblxyXG4gIGdldE9iamVjdChlLCBkYXRhKSB7XHJcbiAgICBsZXQgb2JqZWN0O1xyXG4gICAgaWYoZGF0YS5kb2M9PT10aGlzLmVEb2MpIHtcclxuICAgICAgZm9yKGxldCBjdXN0b20gb2YgdGhpcy5jdXN0b21zKSB7XHJcbiAgICAgICAgb2JqZWN0ID0gY3VzdG9tLnRlc3RJbnRlcnNlY3Rpb24oZSwgZGF0YSk7XHJcbiAgICAgICAgaWYob2JqZWN0KSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvYmplY3Q7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9DdXN0b21FdmVudENvbnZlcnRlci5qcyIsImltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbmRlciB7XHJcblxyXG4gIHN0YXRpYyBERUxJTUlURVIgPSAnICc7XHJcblxyXG4gIHN0YXRpYyBpc0RlbGltZXRyKHMpIHtcclxuICAgIHJldHVybiBzPT09RmluZGVyLkRFTElNSVRFUjtcclxuICB9XHJcblxyXG4gIG1lcmdlKCkge1xyXG4gICAgY29uc3QgYXMgPSBbXSwgbWFwID0gW10sIHN0cnMgPSB0aGlzLnN0cnM7XHJcbiAgICBsZXQgcCA9IDA7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxzdHJzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGlmKHN0cnNbaV0ubGVuZ3RoKSB7XHJcbiAgICAgICAgbWFwLnB1c2goe1xyXG4gICAgICAgICAgYmFzZTogaSxcclxuICAgICAgICAgIG9mZnNldDogcFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFzLnB1c2goc3Ryc1tpXSk7XHJcbiAgICAgICAgcCArPSBzdHJzW2ldLmxlbmd0aDtcclxuICAgICAgICBpZihpPHN0cnMubGVuZ3RoLTEgJiYgIUZpbmRlci5pc0RlbGltZXRyKHN0cnNbaV0uY2hhckF0KHN0cnNbaV0ubGVuZ3RoLTEpKSAmJiAhRmluZGVyLmlzRGVsaW1ldHIoc3Ryc1tpKzFdLmNoYXJBdCgwKSkpIHtcclxuICAgICAgICAgIGFzLnB1c2goRmluZGVyLkRFTElNSVRFUik7XHJcbiAgICAgICAgICArK3A7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm1hcCA9IG1hcDtcclxuICAgIHRoaXMuc3RyID0gYXMuam9pbignJyk7XHJcbiAgfVxyXG5cclxuICBhZGRIaXRzKHApIHtcclxuICAgIGNvbnN0IGluZm8gPSB0aGlzLm1hcFtVdGlscy5sb3dlckJvdW5kKHRoaXMubWFwLCB7b2Zmc2V0OiBwfSwgKGEsIGIpPT4gYS5vZmZzZXQtYi5vZmZzZXQpXTtcclxuICAgIGxldCBjaGFycyA9IHRoaXMucGF0dGVybi5sZW5ndGgsIGkgPSBpbmZvLmJhc2U7XHJcbiAgICBwIC09IGluZm8ub2Zmc2V0O1xyXG4gICAgd2hpbGUoY2hhcnMpIHtcclxuICAgICAgaWYodGhpcy5zdHJzW2ldLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGRlbGltZXRlciA9IGk8dGhpcy5zdHJzLmxlbmd0aC0xICYmICFGaW5kZXIuaXNEZWxpbWV0cih0aGlzLnN0cnNbaV0uY2hhckF0KHRoaXMuc3Ryc1tpXS5sZW5ndGgtMSkpICYmICFGaW5kZXIuaXNEZWxpbWV0cih0aGlzLnN0cnNbaSsxXS5jaGFyQXQoMCkpLFxyXG4gICAgICAgICAgICAgIGxlbmd0aCA9IE1hdGgubWluKHRoaXMuc3Ryc1tpXS5sZW5ndGgrKGRlbGltZXRlcj8gMTogMCktcCwgY2hhcnMpO1xyXG4gICAgICAgIGlmKHA8dGhpcy5zdHJzW2ldLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5oaXRzLnB1c2goe1xyXG4gICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgb2Zmc2V0OiBwLFxyXG4gICAgICAgICAgICBsZW5ndGg6IE1hdGgubWluKGxlbmd0aCwgdGhpcy5zdHJzW2ldLmxlbmd0aC1wKSxcclxuICAgICAgICAgI
13345H0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjaGFycyAtPSBsZW5ndGg7XHJcbiAgICAgICAgKytpO1xyXG4gICAgICAgIHAgPSAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRDb250ZXh0KHApIHtcclxuICAgIGxldCBmID0gcCwgbCA9IHArdGhpcy5wYXR0ZXJuLmxlbmd0aC0xLCBkZWxzID0gdGhpcy5wcm9wcy5jb250ZXh0TGVuZ3RoLCBwcmV2RGVscyA9IGRlbHMrMTtcclxuICAgIHdoaWxlKGRlbHMgJiYgcHJldkRlbHMtZGVscykge1xyXG4gICAgICBwcmV2RGVscyA9IGRlbHM7XHJcbiAgICAgIGlmKGRlbHMlMikge1xyXG4gICAgICAgIGZvcihsZXQgaT1mLTI7IGk+PTA7IC0taSkge1xyXG4gICAgICAgICAgaWYoRmluZGVyLmlzRGVsaW1ldHIodGhpcy5zdHJbaV0pIHx8IGk9PT0wKSB7XHJcbiAgICAgICAgICAgIGYgPSBpPT09MD8gMDogaSsxO1xyXG4gICAgICAgICAgICAtLWRlbHM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmb3IobGV0IGk9bCsyOyBpPHRoaXMuc3RyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICBpZihGaW5kZXIuaXNEZWxpbWV0cih0aGlzLnN0cltpXSkgfHwgaT09PXRoaXMuc3RyLmxlbmd0aC0xKSB7XHJcbiAgICAgICAgICAgIGwgPSBpPT09dGhpcy5zdHIubGVuZ3RoLTE/IGk9PT10aGlzLnN0ci5sZW5ndGgtMTogaS0xO1xyXG4gICAgICAgICAgICAtLWRlbHM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb250ZXh0cy5wdXNoKHRoaXMuc3RyLnN1YnN0cihmLCBsLWYrMSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGl0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmhpdHM7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRleHRzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRlZmF1bHRzID0ge1xyXG4gICAgY29udGV4dExlbmd0aDogNyxcclxuICAgIGhpdHM6IHRydWUsXHJcbiAgICBjb250ZXh0czogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHN0cnMsIHBhdHRlcm4sIHByb3BzKSB7XHJcbiAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAuLi5GaW5kZXIuZGVmYXVsdHMsXHJcbiAgICAgIC4uLnByb3BzXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zdHJzID0gc3RycztcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLm1lcmdlKHN0cnMpO1xyXG4gICAgdGhpcy5oaXRzID0gW107XHJcbiAgICB0aGlzLmNvbnRleHRzID0gW107XHJcbiAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmxzdHIgPSB0aGlzLnN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgbGV0IHAgPSAwO1xyXG4gICAgd2hpbGUodHJ1ZSkge1xyXG4gICAgICBwID0gdGhpcy5sc3RyLmluZGV4T2YodGhpcy5wYXR0ZXJuLCBwKTtcclxuICAgICAgaWYocD09PS0xKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hZGRIaXRzKHApO1xyXG4gICAgICAgIHRoaXMuYWRkQ29udGV4dChwKTtcclxuICAgICAgICBwICs9IHRoaXMucGF0dGVybi5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvRmluZGVyLmpzIiwiaW1wb3J0IHtQREZKU30gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcblBERkpTLndvcmtlclNyYyA9ICh3aW5kb3cuUERGSlNfTE9DQUxFPyBQREZKU19MT0NBTEU6IEdMT0JBTF9QQVRIUykucGRmSnNXb3JrZXI7XHJcblBERkpTLmNNYXBVcmwgPSAod2luZG93LlBERkpTX0xPQ0FMRT8gUERGSlNfTE9DQUxFOiBHTE9CQUxfUEFUSFMpLnBkZkpzQ01hcFVybDtcclxuUERGSlMuY01hcFBhY2tlZCA9IHRydWU7XHJcblBERkpTLmRpc2FibGVBdXRvRmV0Y2ggPSB0cnVlO1xyXG5QREZKUy5kaXNhYmxlU3RyZWFtID0gdHJ1ZTtcclxuUERGSlMuaW1hZ2VSZXNvdXJjZXNQYXRoID0gJ2ltYWdlcy9wZGZqcy8nO1xyXG5QREZKUy5leHRlcm5hbExpbmtUYXJnZXQgPSBQREZKUy5MaW5rVGFyZ2V0LkJMQU5LO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGRmIHtcclxuXHJcbiAgY29uc3RydWN0b3Ioc3JjLCBsb2FkaW5nUHJvZ3Jlc3MpIHtcclxuICAgIHRoaXMuc3JjID0gVXRpbHMubm9ybWFsaXplVXJsKHNyYyk7XHJcbiAgICB0aGlzLmhhbmRsZXJRdWV1ZSA9IFtdO1xyXG4gICAgdGhpcy5wcm9ncmVzRGF0YSA9IHtsb2FkZWQ6IC0xLCB0b3RhbDogMX07XHJcbiAgICB0aGlzLmxvYWRpbmdQcm9ncmVzcyA9IGxvYWRpbmdQcm9ncmVzcztcclxuXHJcbiAgICB0aGlzLnRhc2sgPSBQREZKUy5nZXREb2N1bWVudCh7XHJcbiAgICAgIHVybDogdGhpcy5zcmMsXHJcbiAgICAgIHJhbmdlQ2h1bmtTaXplOiA1MTIqMTAyNFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRhc2sub25Qcm9ncmVzcyA9IChkYXRhKT0+IHtcclxuICAgICAgaWYodGhpcy5sb2FkaW5nUHJvZ3Jlc3MpIHtcclxuICAgICAgICBsZXQgY3VyID0gTWF0aC5mbG9vcigxMDAqZGF0YS5sb2FkZWQvZGF0YS50b3RhbCksXHJcbiAgICAgICAgICAgICAgb2xkID0gTWF0aC5mbG9vcigxMDAqdGhpcy5wcm9ncmVzRGF0YS5sb2FkZWQvdGhpcy5wcm9ncmVzRGF0YS50b3RhbCk7XHJcbiAgICAgICAgaWYoY3VyIT09b2xkKSB7XHJcbiAgICAgICAgICBjdXIgPSBpc05hTihjdXIpPyAwOiBjdXI7XHJcbiAgICAgICAgICBjdXIgPSBjdXI+MTAwPyAxMDA6IGN1cjtcclxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1Byb2dyZXNzKGN1cik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcm9ncmVzRGF0YSA9IGRhdGE7XHJcbiAgICB9O1xyXG4gICAgdGhpcy50YXNrLnRoZW4oKGhhbmRsZXIpPT4ge1xyXG4gICAgICBpZihoYW5kbGVyLm51bVBhZ2VzPjEpIHtcclxuICAgICAgICBQcm9taXNlLmFsbChbaGFuZGxlci5nZXRQYWdlKDEpLCBoYW5kbGVyLmdldFBhZ2UoMildKS5cclxuICAgICAgICB0aGVuKChwYWdlcyk9PiB7XHJcbiAgICAgICAgICB0aGlzLmluaXQoaGFuZGxlciwgcGFnZXMpO1xyXG4gICAgICAgI
13345H0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaW5pdChoYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfSkuXHJcbiAgICBjYXRjaCgoZSk9PiBjb25zb2xlLmVycm9yKGUpKTtcclxuICB9XHJcblxyXG4gIGluaXQoaGFuZGxlciwgcGFnZXMpIHtcclxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XHJcbiAgICB0aGlzLmRvdWJsZWRQYWdlcyA9IHBhZ2VzPyAoTWF0aC5hYnMoMipQZGYuZ2V0UGFnZVNpemUocGFnZXNbMF0pLndpZHRoLVBkZi5nZXRQYWdlU2l6ZShwYWdlc1sxXSkud2lkdGgpL1BkZi5nZXRQYWdlU2l6ZShwYWdlc1swXSkud2lkdGg8MC4wMSk6IGZhbHNlO1xyXG4gICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoaGFuZGxlcik7XHJcbiAgICBmb3IobGV0IGNsYiBvZiB0aGlzLmhhbmRsZXJRdWV1ZS5yZXZlcnNlKCkpIHtcclxuICAgICAgZG9uZSA9IGRvbmUudGhlbigoaGFuZGxlcik9PiB7XHJcbiAgICAgICAgY2xiKGhhbmRsZXIpO1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFBhZ2VUeXBlKG4pIHtcclxuICAgIHJldHVybiAhdGhpcy5kb3VibGVkUGFnZXMgfHwgbj09PTAgfHwgbj09PXRoaXMuZ2V0UGFnZXNOdW0oKS0xPyAnZnVsbCc6IChuJjE/ICdsZWZ0JzogJ3JpZ2h0Jyk7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlKG4pIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIuZ2V0UGFnZSh0aGlzLmRvdWJsZWRQYWdlcz8gTWF0aC5jZWlsKG4vMikrMTogbisxKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmhhbmRsZXJRdWV1ZS5zcGxpY2UoMCwgdGhpcy5oYW5kbGVyUXVldWUubGVuZ3RoKTtcclxuICAgIGRlbGV0ZSB0aGlzLmhhbmRsZXI7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nUHJvZ3Jlc3NDbGIoY2xiKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdQcm9ncmVzcyA9IGNsYjtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VzTnVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcj8gKHRoaXMuZG91YmxlZFBhZ2VzPyAyKih0aGlzLmhhbmRsZXIubnVtUGFnZXMtMSk6IHRoaXMuaGFuZGxlci5udW1QYWdlcyk6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRQYWdlU2l6ZShwYWdlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogcGFnZS52aWV3WzJdLXBhZ2Uudmlld1swXSxcclxuICAgICAgaGVpZ2h0OiBwYWdlLnZpZXdbM10tcGFnZS52aWV3WzFdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbi8vICAgaWYocGFnZXM+MSkge1xyXG4vLyAgIGhhbmRsZXIuZ2V0UGFnZSgyKS5cclxuLy8gICB0aGVuKChwYWdlKT0+IHtcclxuLy8gICAgIGNvbnN0IHNpemUxID0gUGRmLmdldFBhZ2VTaXplKHBhZ2UpO1xyXG4vLyAgICAgdGhpcy5wcm9wcy5kb3VibGVkUGFnZXMgPSAyKnNpemUwLndpZHRoPT09c2l6ZTEud2lkdGg7XHJcbi8vICAgICB0aGlzLnJlYWR5KCk7XHJcbi8vICAgfSkuXHJcbi8vICAgY2F0Y2goKCk9PiB0aGlzLnJlYWR5KCkpO1xyXG4vLyB9XHJcbi8vIGVsc2Uge1xyXG5cclxuICBnZXRIYW5kbGVyKGNsYikge1xyXG4gICAgaWYodGhpcy5oYW5kbGVyKSB7XHJcbiAgICAgIGNsYih0aGlzLmhhbmRsZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlclF1ZXVlLnB1c2goY2xiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1BkZi5qcyIsImltcG9ydCB7VEhSRUUsICR9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGhyZWVFdmVudENvbnZlcnRlckZzIHtcclxuXHJcbiAgc3RhdGljIG9iamVjdHNUZXN0KG9iamVjdDEsIG9iamVjdDIpIHtcclxuICAgIHJldHVybiBvYmplY3QxICYmIG9iamVjdDI/IG9iamVjdDEub2JqZWN0PT09b2JqZWN0Mi5vYmplY3Q6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG9iamVjdHNBbmRGYWNlc1Rlc3Qob2JqZWN0MSwgb2JqZWN0Mikge1xyXG4gICAgcmV0dXJuIG9iamVjdDEgJiYgb2JqZWN0Mj8gb2JqZWN0MS5vYmplY3Q9PT1vYmplY3QyLm9iamVjdCAmJi
13345BvYmplY3QxLmZhY2UubWF0ZXJpYWxJbmRleD09PW9iamVjdDIuZmFjZS5tYXRlcmlhbEluZGV4OiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbFdvcmxkLCB0ZXN0PVRocmVlRXZlbnRDb252ZXJ0ZXJGcy5vYmplY3RzQW5kRmFjZXNUZXN0KSB7XHJcbiAgICB0aGlzLnZpc3VhbCA9IHZpc3VhbFdvcmxkO1xyXG4gICAgdGhpcy5jb29yZHMgPSBuZXcgVEhSRUUuVmVjdG9yMigpO1xyXG4gICAgdGhpcy5yYXljYXN0ZXIgPSB0aGlzLnZpc3VhbC5yYXljYXN0ZXI7XHJcbiAgICB0aGlzLmNhbWVyYSA9IHRoaXMudmlzdWFsLmNhbWVyYTtcclxuICAgIHRoaXMudGhyZWVzID0gW107XHJcbiAgICB0aGlzLnRlc3QgPSB0ZXN0O1xyXG4gIH1cclxuXHJcbiAgYWRkVGhyZWUodGhyZWUpIHtcclxuICAgIHRoaXMudGhyZWVzLnB1c2godGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVGhyZWUodGhyZWUpIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnRocmVlcy5pbmRleE9mKHRocmVlKTtcclxuICAgIGlmKH5pKSB7XHJcbiAgICAgIHRoaXMudGhyZWVzLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE9iamVjdChlKSB7XHJcbiAgICB0aGlzLnNldENvb3Jkc0Zyb21FdmVudChlKTtcclxuICAgIHRoaXMucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEodGhpcy5jb29yZHMsIHRoaXMuY2FtZXJhKTtcclxuICAgIGNvbnN0IGludGVyc2VjdHMgPSB0aGlzLnJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3RzKHRoaXMudGhyZWVzKTtcclxuICAgIHJldHVybiBpbnRlcnNlY3RzWzBdO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVFdmVudENvbnZlcnRlci5qcyIsImltcG9ydCBCYXNlTWF0aFV0aWxzIGZyb20gJy4vQmFzZU1hdGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaHJlZVV0aWxzIHtcclxuXHJcbiAgc3RhdGljIHZlcnRpY2VzMlVWcyh2ZXJ0aWNlcywgaW5kZWNlcywgZmlyc3QsIGxhc3QsIGNvbnZlckNsYikge1xyXG4gICAgY29uc3QgciA9IFtdO1xyXG4gICAgZm9yKGxldCBpID0gZmlyc3Q7IGk8bGFzdDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IHZpcyA9IFtpbmRlY2VzW2ldLmEsaW5kZWNlc1tpXS5iLGluZGVjZXNbaV0uY107XHJcbiAgICAgIGZvcihsZXQgaiA9IDA7IGo8dmlzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgaWYoIXJbdmlzW2pdXSkge1xyXG4gICAgICAgICAgclt2aXNbal1dID0gY29udmVyQ2xiKHZlcnRpY2VzW3Zpc1tqXV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29tcHV0ZUZhY2VWZXJ0ZXhVdnMoZ2VvbWV0cnksIGZhY2VzKSB7XHJcbiAgICBjb25zdCB1dnMgPSBbXHJcbiAgICAgICAgICAgICAgICBUaHJlZVV0aWxzLnZlcnRpY2VzMlVWcyhnZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkuZmFjZXMsIDAsIGZhY2VzWzBdLCAocCk9Pm5ldyBUSFJFRS5WZWN0b3IyKHAueCwgMS1wLnopKSxcclxuICAgICAgICAgICAgICAgIFRocmVlVXRpbHMudmVydGljZXMyVVZzKGdlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS5mYWNlcywgZmFjZXNbMF0sIGZhY2VzWzFdLCAocCk9Pm5ldyBUSFJFRS5WZWN0b3IyKDEtcC54LCAxLXAueikpLFxyXG4gICAgICAgICAgICAgICAgVGhyZWVVdGlscy52ZXJ0aWNlczJVVnMoZ2VvbWV0cnkudmVydGljZXMsIGdlb21ldHJ5LmZhY2VzLCBmYWNlc1sxXSwgZmFjZXNbMl0sIChwKT0+bmV3IFRIUkVFLlZlY3RvcjIocC54LCBwLnkpKSxcclxuICAgICAgICAgICAgICAgIFRocmVlVXRpbHMudmVydGljZXMyVVZzKGdlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS5mYWNlcywgZmFjZXNbMl0sIGZhY2VzWzNdLCAocCk9Pm5ldyBUSFJFRS5WZWN0b3IyKDEtcC54LCBwLnkpKSxcclxuICAgICAgICAgICAgICAgIFRocmVlVXRpbHMudmVydGljZXMyVVZzKGdlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS5mYWNlcywgZmFjZXNbM10sIGZhY2VzWzRdLCAocCk9Pm5ldyBUSFJFRS5WZWN0b3IyKHAueiwgcC55KSksXHJcbiAgICAgICAgICAgICAgICBUaHJlZVV0aWxzLnZlcnRpY2VzMlVWcyhnZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkuZmFjZXMsIGZhY2VzWzRdLCBnZW9tZXRyeS5mYWNlcy5sZW5ndGgsIChwKT0+bmV3IFRIUkVFLlZlY3RvcjIoMS1wLnosIHAueSkpXHJcbiAgICBdO1xyXG5cclxuICAgIGxldCB1dnNpID0gMDtcclxuICAgIGZvcihsZXQgaSA9IDA7IGk8Z2VvbWV0cnkuZmFjZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgdXZzaSArPSBmYWNlc1t1dnNpXSA9PT0gaTtcclxuICAgICAgY29uc3QgZiA9IGdlb21ldHJ5LmZhY2VzW2ldO1xyXG4gICAgICBmLm1hdGVyaWFsSW5kZXggPSB1dnNpO1xyXG4gICAgICBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWzBdW2ldID0gW3V2c1t1dnNpXVtmLmFdLCB1dnNbdXZzaV1bZi5iXSwgdXZzW3V2c2ldW2YuY11dO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZU1hcmtlcihwLCBjLCBzaXplKSB7XHJcbiAgICBjb25zdCBtYXJrZXIgPSBuZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuU3BoZXJlR2VvbWV0cnkoc2l6ZSksIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7IGNvbG9yOiBjIH0pKTtcclxuICAgIG1hcmtlci5wb3NpdGlvbi5zZXQocC54LHAueSxwLnopO1xyXG4gICAgcmV0dXJuIG1hcmtlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmaW5kVXZUcmlzKGdlb21ldHJ5LCBwcywgZmlyc3QsIGxhc3QpIHtcclxuICAgIGNvbnN0IHJlcyA9IFtdO1xyXG4gICAgZm9yKGxldCBwIG9mIHBzKSB7XHJcbiAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICBmb3IobGV0IGk9Zmlyc3Q7IGk8bGFzdCAmJiAhZm91bmQ7ICsraSkge1xyXG4gICAgICAgIGNvbnN0IHRyaSA9IGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbMF1baV07XHJcbiAgICAgICAgaWYoQmFzZU1hdGhVdGlscy5pc0luc2lkZUNvbnZQb2x5KHRyaSwgcCkpIHtcclxuICAgICAgICAgI
13345HJlcy5wdXNoKHtcclxuICAgICAgICAgICAgY29lZnM6IEJhc2VNYXRoVXRpbHMuY29tcHV0ZUludGVycENvZWZzKHRyaSwgcCksXHJcbiAgICAgICAgICAgIGlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZighZm91bmQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdCYWQgcG9pbnQnKTtcclxuICAgICAgICByZXMucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZpbmRJbnRlcm5hbFZlcnRpY2VzKGdlb21ldHJ5LCBwcywgZmlyc3QsIGxhc3QpIHtcclxuICAgIGNvbnN0IHJlcyA9IHt9O1xyXG4gICAgZm9yKGxldCBpPWZpcnN0OyBpPGxhc3Q7ICsraSkge1xyXG4gICAgICBjb25zdCB0cmkgPSBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWzBdW2ldLCBmID0gZ2VvbWV0cnkuZmFjZXNbaV0sIHZzID0gW2YuYSwgZi5iLCBmLmNdO1xyXG4gICAgICBmb3IobGV0IGo9MDsgajx0cmkubGVuZ3RoOyArK2opIHtcclxuICAgICAgICBpZihyZXNbdnNbal1dPT09dW5kZWZpbmVkICYmIEJhc2VNYXRoVXRpbHMuaXNJbnNpZGVQb2x5KHBzLCB0cmlbal0pKSB7XHJcbiAgICAgICAgICByZXNbdnNbal1dID0ge1xyXG4gICAgICAgICAgICBwOiB0cmlbal0sXHJcbiAgICAgICAgICAgIGk6IHZzW2pdLFxyXG4gICAgICAgICAgICBuOiBmLnZlcnRleE5vcm1hbHNbal1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXMpO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVVdGlscy5qcyIsIlxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYXJnZXQge1xyXG5cclxuICBzdGF0aWMgdGVzdChvYmplY3QxLCBvYmplY3QyKSB7XHJcbiAgICByZXR1cm4gb2JqZWN0MS50YXJnZXQ9PT1vYmplY3QyLnRhcmdldDtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL3RhcmdldHMvVGFyZ2V0LmpzIiwiaW1wb3J0IHskLCB0cn0gZnJvbSAnLi9qcy9saWJzJztcclxuaW1wb3J0IERldGVjdG9yIGZyb20gJ0RldGVjdG9yJztcclxuaW1wb3J0IFZpc3VhbFdvcmxkIGZyb20gJ1Zpc3VhbFdvcmxkJztcclxuaW1wb3J0IFBkZkxpbmtzSGFuZGxlciBmcm9tICcuL2pzL2NsYXNzZXMvUGRmTGlua3NIYW5kbGVyJztcclxuaW1wb3J0IEJvb2sgZnJvbSAnLi9qcy9jbGFzc2VzL0Jvb2snO1xyXG5pbXBvcnQgQm9va1ZpZXcgZnJvbSAnLi9qcy9jbGFzc2VzL0Jvb2tWaWV3JztcclxuaW1wb3J0IEJvb2tDb250cm9sbGVyIGZyb20gJy4vanMvY2xhc3Nlcy9Cb29rQ29udHJvbGxlcic7XHJcbmltcG9ydCBQZGZCb29rUHJvcHNCdWlsZGVyIGZyb20gJy4vanMvY2xhc3Nlcy9QZGZCb29rUHJvcHNCdWlsZGVyJztcclxuaW1wb3J0IENsYkJvb2tQcm9wc0J1aWxkZXIgZnJvbSAnLi9qcy9jbGFzc2VzL0NsYkJvb2tQcm9wc0J1aWxkZXInO1xyXG5pbXBvcnQgTG9h
13345ZGluZ0NvbnRyb2xsZXIgZnJvbSAnTG9hZGluZ0NvbnRyb2xsZXInO1xyXG5pbXBvcnQgU2VhcmNoIGZyb20gJ1NlYXJjaCc7XHJcbmltcG9ydCBCb29rbWFya3MgZnJvbSAnQm9va21hcmtzJztcclxuaW1wb3J0IFRodW1ibmFpbHMgZnJvbSAnVGh1bWJuYWlscyc7XHJcbmltcG9ydCBUb2NDb250cm9sbGVyIGZyb20gJy4vanMvY2xhc3Nlcy9Ub2NDb250cm9sbGVyJztcclxuaW1wb3J0IEJvb2tQcmludGVyIGZyb20gJy4vanMvY2xhc3Nlcy9Cb29rUHJpbnRlcic7XHJcbmltcG9ydCBBdXRvTmF2aWdhdG9yIGZyb20gJy4vanMvY2xhc3Nlcy9BdXRvTmF2aWdhdG9yJztcclxuaW1wb3J0IFNvdW5kc0Vudmlyb21lbnQgZnJvbSAnLi9qcy9jbGFzc2VzL1NvdW5kc0Vudmlyb21lbnQnO1xyXG5cclxuJC5mbi5GbGlwQm9vayA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICBjb25zdCBzY2VuZSA9IHtcclxuICAgIGRpc3Bvc2UoKSB7XHJcbiAgICAgIGlmKHRoaXMucmVhZHkpIHtcclxuICAgICAgICAhc2NlbmUucGRmTGlua3NIYW5kbGVyIHx8IHNjZW5lLnBkZkxpbmtzSGFuZGxlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLnBkZkxpbmtzSGFuZGxlcjtcclxuICAgICAgICBzY2VuZS5zb3VuZHMuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5zb3VuZHM7XHJcbiAgICAgICAgc2NlbmUudG9jQ3RybC5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLnRvY0N0cmw7XHJcbiAgICAgICAgc2NlbmUudGh1bWJuYWlscy5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLnRodW1ibmFpbHM7XHJcbiAgICAgICAgIXNjZW5lLmJvb2ttYXJrcyB8fCBzY2VuZS5ib29rbWFya3MuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5ib29rbWFya3M7XHJcbiAgICAgICAgc2NlbmUuY3RybC5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLmN0cmw7XHJcbiAgICAgICAgc2NlbmUuYm9va1ByaW50ZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5ib29rUHJpbnRlcjtcclxuICAgICAgICBzY2VuZS5ib29rLmRpc3Bvc2UoKTtcclxuICAgICAgICBkZWxldGUgc2NlbmUuYm9vaztcclxuICAgICAgICBzY2VuZS5wcm9wc0J1aWxkZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5wcm9wc0J1aWxkZXI7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLmJvb2tCdWlsZGVyO1xyXG4gICAgICAgIHNjZW5lLnZpc3VhbC5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLnZpc3VhbDtcclxuICAgICAgICBzY2VuZS52aWV3LmRpc3Bvc2UoKTtcclxuICAgICAgICBkZWxldGUgc2NlbmUudmlldztcclxuICAgICAgICBkZWxldGUgc2NlbmUuZGlzcG9zZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmdEaXNwb3NlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbiAgb3B0aW9ucyA9IHsuLi5vcHRpb25zfTtcclxuICBzY2VuZS52aWV3ID0gbmV3IEJvb2tWaWV3KHRoaXMubGVuZ3RoPyB0aGlzWzBdOiAkKCc8ZGl2PicpLmFwcGVuZFRvKCdib2R5JyksICgpPT4ge1xyXG4gICAgaWYoIURldGVjdG9yLndlYmdsKSB7XHJcbiAgICAgIERldGVjdG9yLmFkZEdldFdlYkdMTWVzc2FnZSh7cGFyZW50OiBzY2VuZS52aWV3LmdldFZpZXcoKX0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNjZW5lLmxvYWRpbmdDdHJsID0gbmV3IExvYWRpbmdDb250cm9sbGVyKHNjZW5lLnZpZXcsIHRydWUsIChwcm9ncmVzcyk9PiBwcm9ncmVzcz09PTA/IHRyKCdQbGVhc2Ugd2FpdC4uLiB0aGUgQXBwbGljYXRpb24gaXMgTG9hZGluZycpOiB0cignUERGIGlzIExvYWRpbmc6JykrJyAnK3Byb2dyZXNzKyclJyk7XHJcbiAgICAgIHNjZW5lLnZpc3VhbCA9IG5ldyBWaXN1YWxXb3JsZChzY2VuZS52aWV3LmdldENvbnRhaW5lcigpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsIHNjZW5lLnZpZXcuZ2V0Q29udGFpbmVyKCkub3duZXJEb2N1bWVudCwgc2NlbmUudmlldy5nZXRWaWV3KCkpO1xyXG4gICAgICBzY2VuZS5ib29rQnVpbGRlciA9IChwcm9wcywgc2hlZXRzLCBwYWdlQ2FsbGJhY2spPT4ge1xyXG4gICAgICAgIHByb3BzLmNzc0xheWVyUHJvcHMgPSB7XHJcbiAgICAgICAgICAuLi5wcm9wcy5jc3NMYXllclByb3BzLFxyXG4gICAgICAgICAgc2NlbmVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmKG9wdGlvbnMucHJvcGVydGllc0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICBwcm9wcyA9IG9wdGlvbnMucHJvcGVydGllc0NhbGxiYWNrKHByb3BzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NlbmUuYm9vayA9IG5ldyBCb29rKHNjZW5lLnZpc3VhbCwgc2hlZXRzLCBwYWdlQ2FsbGJhY2ssIHByb3BzKTtcclxuICAgICAgICBzY2VuZS5ib29rUHJpbnRlciA9IG5ldyBCb29rUHJpbnRlcihzY2VuZS52aXN1YWwsIHNjZW5lLmJvb2ssIChvcHRpb25zLnRlbXBsYXRlIHx8IHt9KS5wcmludFN0eWxlKTtcclxuICAgICAgICBzY2VuZS5sb2FkaW5nQ3RybC5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLmxvYWRpbmdDdHJsO1xyXG4gICAgICAgIHNjZW5lLmN0cmwgPSBuZXcgQm9va0NvbnRyb2xsZXIoc2NlbmUuYm9vaywgc2NlbmUudmlldywgb3B0aW9ucy5jb250cm9sc1Byb3BzKTtcclxuICAgICAgICBzY2VuZS5ib29rLnNldEluamVjdG9yKCh3KT0+IHtcclxuICAgICAgICAgIHcualF1ZXJ5ID0gdy4kID0gJDtcclxuICAgICAgICAgIHcuYm9vayA9IHNjZW5lLmJvb2s7XHJcbiAgICAgICAgICB3LmJvb2tDdHJsID0gc2NlbmUuY3RybDtcclxuICAgICAgICAgIGlmKHByb3BzLmluamVjdG9yKSB7XHJcbiAgICAgICAgICAgIHByb3BzLmluamVjdG9yKHcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNjZW5lLnZpZXcuYWRkSGFuZGxlcihzY2VuZS5jdHJsKTtcclxuICAgICAgICBzY2VuZS5jdHJsLnNldFByaW50ZXIoc2NlbmUuYm9va1ByaW50ZXIpO1xyXG4gICAgICAgIGNvbnN0IHRlc3QgPSBwYWdlQ2FsbGJhY2soMCk7XHJcblxyXG4gICAgICAgI
13345HNjZW5lLnNlYXJjaCA9IG5ldyBTZWFyY2goc2NlbmUudmlldy5nZXRTZWFyY2hWaWV3KCksIHNjZW5lLmJvb2suZ2V0UGFnZXMoKSk7XHJcbiAgICAgICAgc2NlbmUuc2VhcmNoLm9uUXVlcnkgPSBzY2VuZS5ib29rLnNldFF1ZXJ5LmJpbmQoc2NlbmUuYm9vayk7XHJcbiAgICAgICAgc2NlbmUuYm9vay5hZGRFdmVudExpc3RlbmVyKCdzZWFyY2hSZXN1bHRzJywgKGUpPT4ge1xyXG4gICAgICAgICAgc2NlbmUuc2VhcmNoLnNldFJlc3VsdHMoZS5yZXN1bHRzLCBlLmxhc3RQYWdlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2NlbmUudGh1bWJuYWlscyA9IG5ldyBUaHVtYm5haWxzKHNjZW5lLnZpc3VhbCwgc2NlbmUudmlldy5nZXRUaHVtYm5haWxzVmlldygpLCBwYWdlQ2FsbGJhY2ssIDIqKHNoZWV0cysyKSwge2tXdG9IOiBwcm9wcy53aWR0aC9wcm9wcy5oZWlnaHR9KTtcclxuICAgICAgICBzY2VuZS50b2NDdHJsID0gbmV3IFRvY0NvbnRyb2xsZXIoc2NlbmUudmlldywgc2NlbmUuY3RybCk7XHJcbiAgICAgICAgc2NlbmUudG9jQ3RybC5zZXRUaHVtYm5haWxzKHNjZW5lLnRodW1ibmFpbHMpO1xyXG4gICAgICAgIHNjZW5lLnRvY0N0cmwuc2V0U2VhcmNoKHNjZW5lLnNlYXJjaCk7XHJcbiAgICAgICAgc2NlbmUuY3RybC5zZXRUb2NDdHJsKHNjZW5lLnRvY0N0cmwpO1xyXG4gICAgICAgIHNjZW5lLnZpZXcuYWRkSGFuZGxlcihzY2VuZS50b2NDdHJsKTtcclxuXHJcbiAgICAgICAgaWYodGVzdC50eXBlPT09J3BkZicpIHtcclxuICAgICAgICAgIHNjZW5lLnBkZkxpbmtzSGFuZGxlciA9IG5ldyBQZGZMaW5rc0hhbmRsZXIodGVzdC5zcmMsIHNjZW5lLmN0cmwsIHNjZW5lLnZpc3VhbC5lbGVtZW50KTtcclxuICAgICAgICAgIHNjZW5lLmJvb2suYWRkRXZlbnRMaXN0ZW5lcigncGRmQW5ub3RhdGlvbicsIHNjZW5lLnBkZkxpbmtzSGFuZGxlci5oYW5kbGVFdmVudC5iaW5kKHNjZW5lLnBkZkxpbmtzSGFuZGxlcikpO1xyXG4gICAgICAgICAgdGVzdC5zcmMuZ2V0SGFuZGxlcigoaGFuZGxlcik9PiB7XHJcbiAgICAgICAgICAgIGhhbmRsZXIuZ2V0T3V0bGluZSgpLlxyXG4gICAgICAgICAgICAgIHRoZW4oKG91dGxpbmUpPT4ge1xyXG4gICAgICAgICAgICAgICAgc2NlbmUuYm9va21hcmtzID0gbmV3IEJvb2ttYXJrcyhzY2VuZS52aWV3LmdldEJvb2ttYXJrc1ZpZXcoKSwgb3V0bGluZSk7XHJcbiAgICAgICAgICAgICAgICBzY2VuZS50b2NDdHJsLnNldEJvb2ttYXJrcyhzY2VuZS5ib29rbWFya3MsIHRlc3Quc3JjKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYob3B0aW9ucy5wZGZMaW5rcyAmJiBvcHRpb25zLnBkZkxpbmtzLmhhbmRsZXIpIHtcclxuICAgICAgICAgICAgc2NlbmUucGRmTGlua3NIYW5kbGVyLnNldEhhbmRsZXIob3B0aW9ucy5wZGZMaW5rcy5oYW5kbGVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjZW5lLnNvdW5kcyA9IG5ldyBTb3VuZHNFbnZpcm9tZW50KG9wdGlvbnMudGVtcGxhdGUpO1xyXG4gICAgICAgIHNjZW5lLmN0cmwuc2V0U291bmRzKHNjZW5lLnNvdW5kcyk7XHJcbiAgICAgICAgc2NlbmUuc291bmRzLnN1YnNjcmliZUZsaXBzKHNjZW5lLmN0cmwpO1xyXG5cclxuICAgICAgICBzY2VuZS5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgbmV3IEF1dG9OYXZpZ2F0b3Ioc2NlbmUudmlzdWFsLCBzY2VuZS5jdHJsLCBvcHRpb25zLmF1dG9OYXZpZ2F0aW9uKS5kaXNwb3NlKCk7XHJcbiAgICAgICAgaWYob3B0aW9ucy5yZWFkeSkge1xyXG4gICAgICAgICAgb3B0aW9ucy5yZWFkeShzY2VuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHNjZW5lLnBlbmRpbmdEaXNwb3NlKSB7XHJcbiAgICAgICAgICBzY2VuZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICBpZihvcHRpb25zLnBkZikge1xyXG4gICAgICAgIHNjZW5lLnByb3BzQnVpbGRlciA9IG5ldyBQZGZCb29rUHJvcHNCdWlsZGVyKG9wdGlvbnMucGRmLCBzY2VuZS5ib29rQnVpbGRlcik7XHJcbiAgICAgICAgc2NlbmUucHJvcHNCdWlsZGVyLnBkZi5zZXRMb2FkaW5nUHJvZ3Jlc3NDbGIoc2NlbmUubG9hZGluZ0N0cmwuc2V0UHJvZ3Jlc3MuYmluZChzY2VuZS5sb2FkaW5nQ3RybCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYob3B0aW9ucy5wYWdlQ2FsbGJhY2spIHtcclxuICAgICAgICBzY2VuZS5wcm9wc0J1aWxkZXIgPSBuZXcgQ2xiQm9va1Byb3BzQnVpbGRlcihzY2VuZS52aXN1YWwsIG9wdGlvbnMucGFnZUNhbGxiYWNrLCBvcHRpb25zLnBhZ2VzLCBzY2VuZS5ib29rQnVpbGRlcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc2NlbmUucHJvcHNCdWlsZGVyID0gbmV3IENsYkJvb2tQcm9wc0J1aWxkZXIoc2NlbmUudmlzdWFsLCBCb29rLnBhZ2VDYWxsYmFjaywgNiwgc2NlbmUuYm9va0J1aWxkZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSwgb3B0aW9ucy50ZW1wbGF0ZSk7XHJcbiAgcmV0dXJuIHNjZW5lO1xyXG59XHJcblxyXG4kKCgpPT4ge1xyXG4gIGxldCBjb250YWluZXJzID0gJCgnLmZsaXAtYm9vay1jb250YWluZXInKTtcclxuICBmb3IobGV0IGkgPSAwOyBpPGNvbnRhaW5lcnMubGVuZ3RoOyArK2kpIHtcclxuICAgIGNvbnN0IGpDb250YWluZXIgPSAkKGNvbnRhaW5lcnNbaV0pLCBzcmMgPSBqQ29udGFpbmVyLmF0dHIoJ3NyYycpO1xyXG4gICAgaWYoISFzcmMpIHtcclxuICAgICAgakNvbnRhaW5lci5GbGlwQm9vayh7cGRmOiBzcmN9KTtcclxuICAgIH1cclxuICB9XHJcbn0pO1xyXG5cclxud2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0gJDtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vaW5kZXguanMiLCJpZiAoIUFycmF5LnByb3RvdHlwZS5maWxsKSB7XHJcbiAgQXJyYXkucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG5cclxuICAgIC8vINCo0LDQs9C4IDEtMi5cclxuICAgIGlmICh0aGlzID09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIE8gPSBPYmplY3QodGhpcyk7XHJcblxyXG4gICAgLy8g0KjQsNCz0LggMy01LlxyXG4gICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xyXG5cclxuICAgIC8vINCo0LDQs9C4IDYtNy5cclxuICAgIHZhciBzdGFydCA9IGFyZ3VtZW50c1sxXTtcclxuICAgIHZhciByZWxhdGl2ZVN0YXJ0ID0gc3RhcnQgPj4gMDtcclxuXHJcbiAgICAvLyDQqNCw0LMgOC5cclxuICAgIHZhciBrID0gcmVsYXRpdmVTdGFydCA8IDAgP1xyXG4gICAgICBNYXRoLm1heChsZW4gKyByZWxhdGl2ZVN0YXJ0LCAwKSA6XHJcbiAgICAgIE1hdGgubWluKHJlbGF0aXZlU3RhcnQsIGxlbik7XHJcblxyXG4gICAgLy8g0KjQsNCz0LggOS0xMC5cclxuICAgIHZhciBlbmQgPSBhcmd1bWVudHNbMl07XHJcbiAgICB2YXIgcmVsYXRpdmVFbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/XHJcbiAgICAgIGxlbiA6IGVuZCA+PiAwO1xyXG5cclxuICAgIC8vINCo0LDQsyAxMS5cclxuICAgIHZhciBmaW5hbCA9IHJlbGF0aXZlRW5kIDwgMCA/XHJcbiAgICAgIE1hdGgubWF4KGxlbiArIHJlbGF0aXZlRW5kLCAwKSA6XHJcbiAgICAgIE1hdGgubWluKHJlbGF0aXZlRW5kLCBsZW4pO1xyXG5cclxuICAgIC8vINCo0LDQsyAxMi5cclxuICAgIHdoaWxlIChrIDwgZmluYWwpIHtcclxuICAgICAgT1trXSA9IHZhbHVlO1xyXG4gICAgICBrKys7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g0KjQsNCzIDEzLlxyXG4gICAgcmV0dXJuIE87XHJcbiAgfTtcclxufVxyXG5cclxuaWYgKCFBcnJheS5wcm90b3R5cGUuZmluZCkge1xyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICdmaW5kJywge1xyXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xyXG4gICAgICd1c2Ugc3RyaWN0JztcclxuICAgICBpZiAodGhpcyA9PSBudWxsKSB7XHJcbiAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheS5wcm90b3R5cGUuZmluZCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcclxuICAgICB9XHJcbiAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgI
13345HRocm93IG5ldyBUeXBlRXJyb3IoJ3ByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgICB9XHJcbiAgICAgdmFyIGxpc3QgPSBPYmplY3QodGhpcyk7XHJcbiAgICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoID4+PiAwO1xyXG4gICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzWzFdO1xyXG4gICAgIHZhciB2YWx1ZTtcclxuXHJcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgdmFsdWUgPSBsaXN0W2ldO1xyXG4gICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpLCBsaXN0KSkge1xyXG4gICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmlmICghQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xyXG4gIEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXggPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcclxuICAgIGlmICh0aGlzID09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcHJlZGljYXRlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIHZhciBsaXN0ID0gT2JqZWN0KHRoaXMpO1xyXG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoID4+PiAwO1xyXG4gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHNbMV07XHJcbiAgICB2YXIgdmFsdWU7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICB2YWx1ZSA9IGxpc3RbaV07XHJcbiAgICAgIGlmIChwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaSwgbGlzdCkpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH07XHJcbn1cclxuXHJcbmlmICghT2JqZWN0LnZhbHVlcykge1xyXG5cdE9iamVjdC52YWx1ZXMgPSBmdW5jdGlvbiB2YWx1ZXMoTykge1xyXG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKE8pLm1hcCgobmFtZSk9Pk9bbmFtZV0pIHx8IFtdO1xyXG5cdH07XHJcbn1cclxuXHJcbmlmKCFSZWdFeHAuZXNjYXBlKSB7XHJcbiAgUmVnRXhwLmVzY2FwZSA9IGZ1bmN0aW9uKHMpIHtcclxuICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xyXG4gIH07XHJcbn1cclxuXHJcbmlmKCFTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGwpIHtcclxuICBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VBbGwgPSBmdW5jdGlvbihzZWFyY2gsIHJlcGxhY2UpIHtcclxuICAgIHJldHVybiB0aGlzLnJlcGxhY2UobmV3IFJlZ0V4cChSZWdFeHAuZXNjYXBlKHNlYXJjaCksICdnJyksIHJlcGxhY2UpO1xyXG4gIH07XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL3BvbHlmaWxsLmpzIiwiXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dG9OYXZpZ2F0b3Ige1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBib29rQ3RybCwgcHJvcHM9e30pIHtcclxuICAgIHByb3BzID0ge1xyXG4gICAgICAuLi5wcm9wcyxcclxuICAgICAgdXJsUGFyYW06IHByb3BzLnVybFBhcmFtIHx8ICdmYjNkLXBhZ2UnLFxyXG4gICAgICBuYXZpZ2F0ZXM6IHByb3BzLm5hdmlnYXRlcz09PXVuZGVmaW5lZD8gMTogcHJvcHMubmF2aWdhdGVzLFxyXG4gICAgICBwYWdlTjogcHJvcHMucGFnZU4gfHwgMFxyXG4gICAgfTtcclxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcclxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICB0aGlzLmJvb2tDdHJsID0gYm9va0N0cmw7XHJcbiAgICB0aGlzLnVybFBhcmFtID0gcHJvcHMudXJsUGFyYW07XHJcbiAgICB0aGlzLnBhZ2VOID0gcHJvcHMucGFnZU47XHJcbiAgICB0aGlzLnduZCA9IGNvbnRleHQud25kO1xyXG5cclxuICAgIHRoaXMud25kLmZiM2QgPSB7XHJcbiAgICAgIC4uLnRoaXMud25kLmZiM2RcclxuICAgIH07XHJcbiAgICB0aGlzLnduZC5mYjNkLm5hdmlnYXRvciA9IHtcclxuICAgICAgLi4udGhpcy53bmQuZmIzZC5uYXZpZ2F0b3JcclxuICAgIH07XHJcbiAgICB0aGlzLm5hdmlnYXRvciA9IHRoaXMud25kLmZiM2QubmF2aWdhdG9yW3RoaXMudXJsUGFyYW1dID0ge1xyXG4gICAgICAuLi50aGlzLnduZC5mYjNkLm5hdmlnYXRvclt0aGlzLnVybFBhcmFtXVxyXG4gICAgfTtcclxuICAgIHRoaXMubmF2aWdhdG9yLmluc3RhbmNlcyA9ICh0aGlzLm5hdmlnYXRvci5pbnN0YW5jZXMgfHwgMCkrMTtcclxuXHJcbiAgICBpZih0aGlzLm5hdmlnYXRvci5pbnN0YW5jZXM8PXRoaXMucHJvcHMubmF2aWdhdGVzKSB7XHJcbiAgICAgIHRoaXMuYm9va0N0cmwuZ29Ub1BhZ2UodGhpcy5nZXRQYWdlTnVtYmVyKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRQYXJhbWV0ZXJCeU5hbWUobmFtZSwgdXJsKSB7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIH1cclxuICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoL1tcXFtcXF1dL2csICdcXFxcJCYnKTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgnWz8mXScgKyBuYW1lICsgJyg9KFteXSopfCZ8I3wkKScpLFxyXG4gICAgcmVzdWx0cyA9IHJlZ2V4LmV4ZWModXJsKTtcclxuICAgIGlmICghcmVzdWx0cykgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAoIXJlc3VsdHNbMl0pIHJldHVybiAnJztcclxuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0c1syXS5yZXBsYWNlKC9cXCsvZywgJyAnKSk7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlTnVtYmVyKCkge1xyXG4gICAgbGV0IG51bWJlciA9IHBhcnNlSW50KHRoaXMucGFnZU4pO1xyXG4gICAgaWYoaXNOYU4obnVtYmVyKXx8bnVtYmVyPT09MCkge1xyXG4gICAgICBudW1iZXIgPSB0aGlzLmdldFBhcmFtZXRlckJ5TmFtZSh0aGlzLnVybFBhcmFtKTtcclxuICAgICAgbnVtYmVyID0gcGFyc2VJbnQobnVtYmVyKTtcclxuICAgICAgaWYoaXNOYU4obnVtYmVyKSkge1xyXG4gICAgICAgIG51bWJlciA9IDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybi
13345BudW1iZXItMTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQXV0b05hdmlnYXRvci5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJ01hdGhVdGlscydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpbmRlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbCwgcCkge1xyXG4gICAgdGhpcy52aXN1YWwgPSB2aXN1YWw7XHJcbiAgICB0aGlzLnAgPSB7XHJcbiAgICAgIC4uLnAsXHJcbiAgICAgIGJhY2tTaXplOiAyKnAuY292ZXIuZGVwdGgrcC5zaGVldHMqcC5wYWdlLmRlcHRoXHJcbiAgICB9O1xyXG4gICAgdGhpcy5PWiA9IG5ldyBUSFJFRS5WZWN0b3IzKDAsMCwxKTtcclxuXHJcbiAgICB0aGlzLmJhY2tHID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KHAuY292ZXIuZGVwdGgsIHRoaXMucC5iYWNrU2l6ZSwgcC5jb3Zlci5oZWlnaHQpO1xyXG5cclxuICAgIHRoaXMubWF0ZXJpYWxzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtjb2xvcjogcC5jb3Zlci5jb2xvcn0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtjb2xvcjogcC5jb3Zlci5jb2xvcn0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtjb2xvcjogcC5jb3Zlci5jb2xvcn0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtjb2xvcjogcC5jb3Zlci5jb2xvcn0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtjb2xvcjogcC5jb3Zlci5jb2xvcn0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtjb2xvcjogcC5jb3Zlci5jb2xvcn0pXHJcbiAgICAgICAgICAgICAgICAgICAgIF07XHJcblxyXG4gICAgY29uc3QgYmFja00gPSBuZXcgVEhSRUUuTWVzaCh0aGlzLmJhY2tHLCBuZXcgVEhSRUUuTWVzaEZhY2VNYXRlcmlhbCh0aGlzLm1hdGVyaWFscykpO1xyXG5cclxuICAgIGlmKHAuY292ZXIuYmluZGVyVGV4dHVyZSE9PScnKSB7XHJcbiAgICAgIHRoaXMudmlzdWFsLnRleHR1cmVMb2FkZXIubG9hZChwLmNvdmVyLmJpbmRlclRleHR1cmUsICh0ZXh0dXJlKT0+IHtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc1sxXS5jb2xvci5zZXRIZXgoMHhGRkZGRkYpO1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzWzFdLm1hcCA9IHRleHR1cmU7XHJcbiAgICAgICAgdGV4dHVyZS5taW5GaWx0ZXIgPSBUSFJFRS5MaW5lYXJGaWx0ZXI7XHJcbiAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNbMV0ubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRocmVlID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLmJhY2sgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgIHRoaXMuYmFja1JUID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLmJhY2tSUiA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgdGhpcy5iYWNrTFQgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgIHRoaXMuYmFja0xSID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLmxlZnRQaXZvdCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgdGhpcy5yaWdodFBpdm90ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcblxyXG4gICAgdGhpcy5iYWNrLmFkZChiYWNrTSk7XHJcbiAgICB0aGlzLmJhY2suYWRkKHRoaXMubGVmdFBpdm90KTtcclxuICAgIHRoaXMuYmFjay5hZGQodGhpcy5yaWdodFBpdm90KTtcclxuICAgIHRoaXMuYmFja1JULmFkZCh0aGlzLmJhY2spO1xyXG4gICAgdGhpcy5iYWNrUlIuYWRkKHRoaXMuYmFja1JUKTtcclxuICAgIHRoaXMuYmFja0xULmFkZCh0aGlzLmJhY2tSUik7XHJcbiAgICB0aGlzLmJhY2tMUi5hZGQodGhpcy5iYWNrTFQpO1xyXG4gICAgdGhpcy50aHJlZS5hZGQodGhpcy5iYWNrTFIpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGZvcihsZXQgbSBvZiB0aGlzLm1hdGVyaWFscykge1xyXG4gICAgICBpZihtLm1hcCkge1xyXG4gICAgICAgIG0ubWFwID0gbnVsbDtcclxuICAgICAgICBtLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIGRlbGV0ZSB0aGlzLm1hdGVyaWFscztcclxuICAgIHRoaXMuYmFja0cuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0KGFuZ2xlKSB7XHJcbiAgICBsZXQgcmlnaHQsIGxlZnQ7XHJcbiAgICBpZihhbmdsZT5NYXRoLlBJLzIpIHtcclxuICAgICAgcmlnaHQgPSBNYXRoLlBJLzI7XHJcbiAgICAgIGxlZnQgPSBhbmdsZS1NYXRoLlBJLzI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmlnaHQgPSBhbmdsZTtcclxuICAgICAgbGVmdCA9IDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwID0gdGhpcy5wLHRyMT17eDotMC41KnAuY292ZXIuZGVwdGgseTowLjUqcC5iYWNrU2l6ZS1wLmNvdmVyLmRlcHRofTtcclxuICAgIHRoaXMuYmFja1JULnBvc2l0aW9uLnNldCh0cjEueCx0cjEueSwwKTtcclxuICAgIHRoaXMuYmFja1JSLnBvc2l0aW9uLnNldCgtdHIxLngsLXRyMS55LDApO1xyXG4gICAgdGhpcy5iYWNrUlIucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHRoaXMuT1osIHJpZ2h0KTtcclxuXHJcbiAgICBjb25zdCB0cjI9e3g6cC5iYWNrU2l6ZS0yKnAuY292ZXIuZGVwdGgtMC41KnAuY292ZXIuZGVwdGgseTowLjUqcC5iYWNrU2l6ZS1wLmNvdmVyLmRlcHRofTtcclxuICAgIHRoaXMuYmFja0xULnBvc2l0aW9uLnNldCh0cjIueCx0cjIueSwwKTtcclxuICAgIHRoaXMuYmFja0xSLnBvc2l0aW9uLnNldCgtdHIyLngsLXRyMi55LDApO1xyXG4gICAgdGhpcy5iYWNrTFIucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHRoaXMuT1osIGxlZnQpO1xyXG4gIH1cclxuXHJcbiAgc2V0TGVmdChhbmdsZSkge1xyXG4gICAgY29uc3QgUEkgPSBNYXRoLlBJO1xyXG4gICAgdGhpcy5sZWZ0UGl2b3QucG9zaXRpb24uc2V0KE1hdGhVdGlscy5pbnRlcnBvbGF0ZUxpbmVhcihbLVBJLC1QSS8yXSxbMCx0aGlzLnAuY292ZXIuZGVwdGhdLGFuZ2xlKSwwLjUqdGhpcy5wLmJhY2tTaXplLTAuNSp0aGlzLnAuY292ZXIuZGVwdGgsMCk7XHJcbiAgICB0aGlzLmxlZnRQaXZvdC5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodGhpcy5PWiwgYW5nbG
13345UpO1xyXG4gIH1cclxuXHJcbiAgc2V0UmlnaHQoYW5nbGUpIHtcclxuICAgIGNvbnN0IFBJID0gTWF0aC5QSTtcclxuICAgICAgdGhpcy5yaWdodFBpdm90LnBvc2l0aW9uLnNldChNYXRoVXRpbHMuaW50ZXJwb2xhdGVMaW5lYXIoWy1QSS8yLDBdLFt0aGlzLnAuY292ZXIuZGVwdGgsMF0sYW5nbGUpLC0wLjUqdGhpcy5wLmJhY2tTaXplKzAuNSp0aGlzLnAuY292ZXIuZGVwdGgsMCk7XHJcbiAgICAgIHRoaXMucmlnaHRQaXZvdC5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodGhpcy5PWiwgYW5nbGUpO1xyXG4gIH1cclxuXHJcbiAgam9pbkxlZnRDb3Zlcihjb3Zlcikge1xyXG4gICAgY292ZXIudGhyZWUucG9zaXRpb24uc2V0KDAsLTAuNSp0aGlzLnAuY292ZXIuZGVwdGgsMCk7XHJcbiAgICB0aGlzLmxlZnRQaXZvdC5hZGQoY292ZXIudGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgZGlzY29ubmVjdExlZnRDb3Zlcihjb3Zlcikge1xyXG4gICAgdGhpcy5sZWZ0UGl2b3QucmVtb3ZlKGNvdmVyLnRocmVlKTtcclxuICB9XHJcblxyXG4gIGpvaW5SaWdodENvdmVyKGNvdmVyKSB7XHJcbiAgICBjb3Zlci50aHJlZS5wb3NpdGlvbi5zZXQoMCwtMC41KnRoaXMucC5jb3Zlci5kZXB0aCwwKTtcclxuICAgIHRoaXMucmlnaHRQaXZvdC5hZGQoY292ZXIudGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgZGlzY29ubmVjdFJpZ2h0Q292ZXIoY292ZXIpIHtcclxuICAgIHRoaXMucmlnaHRQaXZvdC5yZW1vdmUoY292ZXIudGhyZWUpO1xyXG4gIH1cclxuXHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQmluZGVyLmpzIiwiaW1wb3J0IHskLCBUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCB7cHJvcHMgYXMgIGJvb2tQcm9wc30gZnJvbSAnLi4vcHJvcHMvYm9vayc7XHJcbmltcG9ydCBHcmFwaFV0aWxzIGZyb20gJ0dyYXBoVXRpbHMnO1xyXG5pbXBvcnQgQmluZGVyIGZyb20gJy4vQmluZGVyJztcclxuaW1wb3J0IENvdmVyIGZyb20gJy4vQ292ZXInO1xyXG5pbXBvcnQgU2hlZXRCbG9jayBmcm9tICcuL1NoZWV0QmxvY2snO1xyXG5pbXBvcnQgU2hlZXRQaHlzaWNzIGZyb20gJy4vU2hlZXRQaHlzaWNzJztcclxuaW1wb3J0IFBhZ2VNYW5hZ2VyIGZyb20gJy4vUGFnZU1hbmFnZXInO1xyXG5pbXBvcnQgQ1NTTGF5ZXIgZnJvbSAnQ1NTTGF5ZXInO1xyXG5pbXBvcnQgQ3NzTGF5ZXJzTWFuYWdlciBmcm9tICcuL0Nzc0xheWVyc01hbmFnZXInO1xyXG5pbXBvcnQgU2VhcmNoRW5naW5lIGZyb20gJy4vU2VhcmNoRW5naW5lJztcclxuaW1wb3J0IEN1c3RvbUV2ZW50Q29udmVydGVyIGZyb20gJ0N1c3RvbUV2ZW50Q29udmVydGVyJztcclxuaW1wb3J0IENpcmNsZVRhcmdldCBmcm9tICd0YXJnZXRzL0NpcmNsZVRhcmdldCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb29rIGV4dGVuZHMgVEhSRUUuRXZlbnREaXNwYXRjaGVyIHtcclxuICAvLyBwYWdlQ2FsbGJhY2sgc2FtcGxlc1xyXG5cclxuICAvLyAobik9PiAoe1xyXG4gIC8vICAgdHlwZTogJ2ltYWdlJyxcclxuICAvLyAgIHNyYzogJ3NhbXBsZS5wbmcnLFxyXG4gIC8vICAgaW50ZXJhY3RpdmU6IGZhbHNlXHJcbiAgLy8gfSk7XHJcbiAgLy9cclxuICAvLyAobik9PiAoe1xyXG4gIC8vICAgdHlwZTogJ2h0bWwnLFxyXG4gIC8vICAgc3JjOiAnc2FtcGxlLmh0bWwnLFxyXG4gIC8vICAgaW50ZXJhY3RpdmU6IHRydWVcclxuICAvLyB9KTtcclxuICAvL1xyXG4gIC8vIGNvbnN0IHBkZiA9IG5ldyBQZGYoJ3NhbXBsZS5wZGYnKTtcclxuICAvLyAobik9PiAoe1xyXG4gIC8vICAgdHlwZTogJ3BkZicsXHJcbiAgLy8gICBzcmM6IHBkZixcclxuICAvLyAgIGludGVyYWN0aXZlOiBmYWxzZVxyXG4gIC8vIH0pO1xyXG5cclxuICBjb25zdHJ1Y3Rvcih2aXN1YWwsIHNoZWV0cywgcGFnZUNhbGxiYWNrLCBwcm9wcykge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMudmlzdWFsID0gdmlzdWFsO1xyXG4gICAgdGhpcy5tb3VzZUNvbnRyb2xsZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wID0ge1xyXG4gICAgICAuLi5Cb29rLnByZXBhcmVQcm9wcyhwcm9wcyksXHJcbiAgICAgIHNoZWV0cyxcclxuICAgICAgcGFnZUNhbGxiYWNrLFxyXG4gICAgICB6b29tOiAxLFxyXG4gICAgICBzaW5nbGVQYWdlOiBmYWxzZSxcclxuICAgICAgYXV0b1Jlc29sdXRpb246IHtcclxuICAgICAgICBlbmFibGU6IGZhbHNlLFxyXG4gICAgICAgIGs6IDEuNVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5wYWdlTWFuYWdlciA9IG5ldyBQYWdlTWFuYWdlcih2aXN1YWwsIHRoaXMsIHRoaXMucCk7XHJcbiAgICBDU1NMYXllci5pbml0KHZpc3VhbC5kb2MpO1xyXG4gICAgdGhpcy5sYXllck1hbmFnZXIgPSBuZXcgQ3NzTGF5ZXJzTWFuYWdlcih0aGlzKTtcclxuICAgIHRoaXMuc2VhcmNoRW5naW5lID0gbmV3IFNlYXJjaEVuZ2luZShwYWdlQ2FsbGJhY2ssIDIqKHNoZWV0cysyKSk7XHJcbiAgICB0aGlzLnNlYXJjaEVuZ2luZS5vblBhZ2VIaXRzQ2hhbmdlZCA9IChwYWdlLCBxdWVyeSk9PiB7XHJcbiAgICAgIHRoaXMucGFnZU1hbmFnZXIucmVmcmVzaFBhZ2VRdWVyeShwYWdlLCBxdWVyeSk7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCh7XHJcbiAgICAgICAgdHlwZTogJ3NlYXJjaFJlc3VsdHMnLFxyXG4gICAgICAgIHJlc3VsdHM6IHRoaXMuc2VhcmNoRW5naW5lLnJlc3VsdHMsXHJcbiAgICAgICAgbGFzdFBhZ2U6IHBhZ2UsXHJcbiAgICAgICAgcXVlcnlcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudGhyZWUgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuXHJcbiAgICB0aGlzLmJpbmRlciA9IG5ldyBCaW5kZXIodmlzdWFsLCB0aGlzLnApO1xyXG4gICAgdGhpcy50aHJlZS5hZGQodGhpcy5iaW5kZXIudGhyZWUpO1xyXG5cclxuICAgIHRoaXMubGVmdENvdmVyID0gbmV3IENvdmVyKHZpc3VhbCwgey4uLnRoaXMucCwgc2V0VGV4dHVyZTogdGhpcy5zZXRMZWZ0Q292ZXJUZXh0dXJlLmJpbmQodGhpcyl9LCBNYXRoLlBJLzIsICdvcGVuZWQnKTtcclxuICAgIHRoaXMuYmluZGVyLmpvaW5MZWZ0Q292ZXIodGhpcy5sZWZ0Q292ZXIpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVTaGVldEJsb2NrKHRoaXMubGVmdENvdmVyLCAwKTtcclxuICAgIHRoaXMucmlnaHRDb3ZlciA9IG5ldyBDb3Zlcih2aXN1YWwsIHsuLi50aGlzLnAsIHNldFRleHR1cmU6IHRoaXMuc2V0UmlnaHRDb3ZlclRleHR1cmUuYmluZCh0aGlzKX0sIDAsICdjbG9zZWQnKTtcclxuICAgIHRoaXMuYmluZGVyLmpvaW5SaWdodENvdmVyKHRoaXMucmlnaHRDb3Zlcik7XHJcbiAgICB0aGlzLnN1YnNjcmliZVNoZWV0QmxvY2sodGhpcy5yaWdodENvdmVyLCAyKih0aGlzLnAuc2hlZXRzKzEpKTtcclxuXHJcbiAgICB0aGlzLnRocmVlU2hlZXRCbG9ja3MgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgIHRoaXMudGhyZWUuYWRkKHRoaXMudGhyZWVTaGVldEJsb2Nrcyk7XHJcbiAgICB0aGlzLnRocmVlU2hlZXRCbG9ja3MucG9zaXRpb24uc2V0KDAuNSp0aGlzLnAuY292ZXIuZGVwdGgtMC41KnNoZWV0cyp0aGlzLnAucGFnZS5kZXB0aCwtMC41KnNoZWV0cyp0aGlzLnAucGFnZS5kZXB0aCwwKTtcclxuXHJcbiAgICB0aGlzLnNoZWV0QmxvY2tzID0gW107XHJcbiAgICBpZihzaGVldHM+MCkge1xyXG4gICAgICB0aGlzLmFkZFNoZWV0QmxvY2soMCwgbmV3IFNoZWV0QmxvY2sodmlzdWFsLCB7Li4udGhpcy5wLCBzZXRUZX
13345h0dXJlOiB0aGlzLnNldFBhZ2VUZXh0dXJlLmJpbmQodGhpcyl9LCAwLCBzaGVldHMsIDAsICdjbG9zZWQnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hbmdsZSA9IHRoaXMucC5ydGw/IE1hdGguUEk6IDA7XHJcbiAgICB0aGlzLmNsb3NlZEFuZ2xlID0gMDtcclxuICAgIHRoaXMuc2V0KHRoaXMuYW5nbGUsMCk7XHJcbiAgICB0aGlzLmxhc3RNb3VzZVBvcyA9IHtcclxuICAgICAgdDogMFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnRocmVlLnBvc2l0aW9uLnNldCgtMC41KnRoaXMucC5jb3Zlci5kZXB0aCswLjUqc2hlZXRzKnRoaXMucC5wYWdlLmRlcHRoLDAsMCk7XHJcbiAgICB0aGlzLnNoZWV0UGh5c2ljcyA9IG5ldyBTaGVldFBoeXNpY3ModGhpcy5wLnBhZ2Uud2lkdGgvdGhpcy5wLnNjYWxlLCB0aGlzLnAuZ3Jhdml0eSwgdGhpcy5wLnBhZ2UuY29ybmVyRGV2aWF0aW9uKTtcclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICB1cGRhdGU6IHRoaXMudXBkYXRlLmJpbmQodGhpcyksXHJcbiAgICAgIGxhc3RNb3VzZVBvczogKGUpPT4ge1xyXG4gICAgICAgIHRoaXMubGFzdE1vdXNlUG9zID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5sYXN0TW91c2VQb3MsXHJcbiAgICAgICAgICBwYWdlWDogZS5wYWdlWCxcclxuICAgICAgICAgIHBhZ2VZOiBlLnBhZ2VZXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMudmlzdWFsLmFkZFJlbmRlckNhbGxiYWNrKHRoaXMuYmluZHMudXBkYXRlKTtcclxuICAgICQodGhpcy52aXN1YWwuZWxlbWVudCkub24oJ21vdXNlbW92ZScsIHRoaXMuYmluZHMubGFzdE1vdXNlUG9zKTtcclxuXHJcbiAgICB0aGlzLmJpbmRzLm9uUGlja0NhbGxiYWNrID0gdGhpcy5vblBpY2tDYWxsYmFjay5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLnZpc3VhbC5kcmFnLm9uUGlja0NhbGxiYWNrID0gdGhpcy5iaW5kcy5vblBpY2tDYWxsYmFjaztcclxuICAgIHRoaXMuYmluZHMub25EcmFnQ2FsbGJhY2sgPSB0aGlzLm9uRHJhZ0NhbGxiYWNrLmJpbmQodGhpcylcclxuICAgIHRoaXMudmlzdWFsLmRyYWcub25EcmFnQ2FsbGJhY2sgPSB0aGlzLmJpbmRzLm9uRHJhZ0NhbGxiYWNrO1xyXG4gICAgdGhpcy5iaW5kcy5vblJlbGVhc2VDYWxsYmFjayA9IHRoaXMub25SZWxlYXNlQ2FsbGJhY2suYmluZCh0aGlzKVxyXG4gICAgdGhpcy52aXN1YWwuZHJhZy5vblJlbGVhc2VDYWxsYmFjayA9IHRoaXMuYmluZHMub25SZWxlYXNlQ2FsbGJhY2s7XHJcblxyXG4gICAgdGhpcy5kcmFnQW5nbGUgPSAwLjA1O1xyXG4gICAgdGhpcy50bXAgPSB7XHJcbiAgICAgIGJveHM6IFtcclxuICAgICAgICBuZXcgVEhSRUUuQm94MygpLFxyXG4gICAgICAgIG5ldyBUSFJFRS5Cb3gzKClcclxuICAgICAgXVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnZpc3VhbC5hZGRPYmplY3QodGhpcy50aHJlZSk7XHJcbiAgICB0aGlzLnZpc3VhbC5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnBhZ2VNYW5hZ2VyLnJlZnJlc2hab29tLmJpbmQodGhpcy5wYWdlTWFuYWdlcikpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIHRoaXMubm90aWZ5QmVmb3JlQW5pbWF0aW9uKCk7XHJcbiAgICAgIHRoaXMubm90aWZ5QWZ0ZXJBbmltYXRpb24oKTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy52aXN1YWwucmVtb3ZlT2JqZWN0KHRoaXMudGhyZWUpO1xyXG4gICAgdGhpcy5zaGVldFBoeXNpY3MuZGlzcG9zZSgpO1xyXG4gICAgZGVsZXRlIHRoaXMudmlzdWFsLmRyYWcub25QaWNrQ2FsbGJhY2s7XHJcbiAgICBkZWxldGUgdGhpcy52aXN1YWwuZHJhZy5vbkRyYWdDYWxsYmFjaztcclxuICAgIGRlbGV0ZSB0aGlzLnZpc3VhbC5kcmFnLm9uUmVsZWFzZUNhbGxiYWNrO1xyXG4gICAgJCh0aGlzLnZpc3VhbC5lbGVtZW50KS5vZmYoJ21vdXNlbW92ZScsIHRoaXMuYmluZHMubGFzdE1vdXNlUG9zKTtcclxuICAgIHRoaXMudmlzdWFsLnJlbW92ZVJlbmRlckNhbGxiYWNrKHRoaXMuYmluZHMudXBkYXRlKTtcclxuICAgIHRoaXMucmVtb3ZlU2hlZXRCbG9ja3MoMCwgdGhpcy5zaGVldEJsb2Nrcy5sZW5ndGgpO1xyXG4gICAgdGhpcy5iaW5kZXIuZGlzY29ubmVjdExlZnRDb3Zlcih0aGlzLmxlZnRDb3Zlcik7XHJcbiAgICB0aGlzLnJlbW92ZVNoZWV0QmxvY2sodGhpcy5sZWZ0Q292ZXIpO1xyXG4gICAgdGhpcy5iaW5kZXIuZGlzY29ubmVjdFJpZ2h0Q292ZXIodGhpcy5yaWdodENvdmVyKTtcclxuICAgIHRoaXMucmVtb3ZlU2hlZXRCbG9jayh0aGlzLnJpZ2h0Q292ZXIpO1xyXG4gICAgdGhpcy5iaW5kZXIuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5sYXllck1hbmFnZXIuZGlzcG9zZSgpO1xyXG4gICAgQ1NTTGF5ZXIuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5wYWdlTWFuYWdlci5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWNzIHtcclxuXHJcbiAgc2V0QXV0b1Jlc29sdXRpb24oZW5hYmxlLCBrPTEuNSkge1xyXG4gICAgdGhpcy5wLmF1dG9SZXNvbHV0aW9uID0ge1xyXG4gICAgICAuLi50aGlzLnAuYXV0b1Jlc29sdXRpb24sXHJcbiAgICAgIGVuYWJsZSxcclxuICAgICAga1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNldFpvb20oem9vbSwgc2luZ2xlUGFnZSkge1xyXG4gICAgaWYoTWF0aC5hYnModGhpcy5wLnpvb20tem9vbSk+MWUtMyB8fCBzaW5nbGVQYWdlIT09dGhpcy5wLnNpbmdsZVBhZ2UpIHtcclxuICAgICAgdGhpcy5wLnpvb20gPSB6b29tO1xyXG4gICAgICB0aGlzLnAuc2luZ2xlUGFnZSA9IHNpbmdsZVBhZ2U7XHJcbiAgICAgIHRoaXMucGFnZU1hbmFnZXIucmVmcmVzaFpvb20oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFBhZ2VDYWxsYmFjaygpIHtcclxuICAgIHJldHVybiB0aGlzLnAucGFnZUNhbGxiYWNrO1xyXG4gIH1cclxuXHJcbiAgc2V0UXVlcnkocXVlcnkpIHtcclxuICAgIHRoaXMuc2VhcmNoRW5naW5lLnNldFF1ZXJ5KHF1ZXJ5KTtcclxuICB9XHJcblxyXG4gIGlzUHJvY2Vzc2luZygpIHtcclxuICAgIHJldHVybiB0aGlzLnNoZWV0UGh5c2ljcy5nZXRTaXplKCkhPT0wO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZXMoKSB7XHJcbiAgICByZXR1cm4gNCsyKnRoaXMucC5zaGVldHM7XHJcbiAgfVxyXG5cclxuICBzZXRGbGlwUHJvZ3Jlc3NDbGIoY2xiKSB7XHJcbiAgICB0aGlzLnAuZmxpcFByb2dyZXNzQ2xiID0gY2xiO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5qZWN0b3IoaW5qZWN0b3IpIHtcclxuICAgIHRoaXMucC5pbmplY3RvciA9IGluamVjdG9yO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmVQYWdlKG4pIHtcclxuICAgIGxldCByZXMgPSB0cnVlO1xyXG4gICAgaWYobj4xICYmIG48dGhpcy5nZXRQYWdlcygpLTIpIHtcclxuICAgICAgZm9yKGxldCBiIG9mIHRoaXMuc2hlZXRCbG9ja3MpIHtcclxuICAgICAgICBpZihuLTI+MipiLnAuZmlyc3QgJiYgbi0yPDIqYi5wLmxhc3QtMSkge1xyXG4gICAgICAgICAgcmVzID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgI
13345H1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGdldEJsb2NrQnlQYWdlKG4pIHtcclxuICAgIGxldCBibG9jaztcclxuICAgIGlmKG48Mikge1xyXG4gICAgICBibG9jayA9IHRoaXMubGVmdENvdmVyO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihuPDIqKHRoaXMucC5zaGVldHMrMSkpIHtcclxuICAgICAgZm9yKGxldCBiIG9mIHRoaXMuc2hlZXRCbG9ja3MpIHtcclxuICAgICAgICBpZihuLTI+PTIqYi5wLmZpcnN0ICYmIG4tMjwyKmIucC5sYXN0KSB7XHJcbiAgICAgICAgICBibG9jayA9IGI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBibG9jayA9IHRoaXMucmlnaHRDb3ZlcjtcclxuICAgIH1cclxuICAgIHJldHVybiBibG9jaztcclxuICB9XHJcblxyXG4gIGdldEJsb2NrUGFnZXMoYmxvY2spIHtcclxuICAgIGxldCByYW5nZTtcclxuICAgIHN3aXRjaCAoYmxvY2spIHtcclxuICAgICAgY2FzZSB0aGlzLmxlZnRDb3Zlcjoge1xyXG4gICAgICAgICAgcmFuZ2UgPSBbMCwgMV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSB0aGlzLnJpZ2h0Q292ZXI6IHtcclxuICAgICAgICByYW5nZSA9IFsyKih0aGlzLnAuc2hlZXRzKzEpLCAyKih0aGlzLnAuc2hlZXRzKzEpKzFdO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICByYW5nZSA9IGJsb2NrPyBbMiooYmxvY2sucC5maXJzdCsxKSwgMiooYmxvY2sucC5sYXN0KzEpLTFdOiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByYW5nZTtcclxuICB9XHJcblxyXG4gIGdldFBhZ2UoKSB7XHJcbiAgICBjb25zdCBQSSA9IE1hdGguUEk7XHJcbiAgICBsZXQgcDtcclxuICAgIGlmKHRoaXMuYW5nbGUgPT09IFBJLzIgfHwgdGhpcy5hbmdsZSA9PT0gMypQSS8yKSB7XHJcbiAgICAgIGZvcihsZXQgYmxvY2sgb2YgdGhpcy5zaGVldEJsb2Nrcykge1xyXG4gICAgICAgIGlmKGJsb2NrLmFuZ2xlPD1QSS8yKSB7XHJcbiAgICAgICAgICBwID0gdGhpcy5nZXRCbG9ja1BhZ2VzKGJsb2NrKVswXS0xO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKCFwKSB7XHJcbiAgICAgICAgcCA9IHRoaXMuZ2V0UGFnZXMoKS0zO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHRoaXMuYW5nbGU8UEkvMikge1xyXG4gICAgICBwID0gMDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5hbmdsZT4zKlBJLzIpIHtcclxuICAgICAgcCA9IDE7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHRoaXMuYW5nbGU8UEkpIHtcclxuICAgICAgcCA9IHRoaXMuZ2V0UGFnZXMoKS0zO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLmFuZ2xlPj1QSSkge1xyXG4gICAgICBwID0gdGhpcy5nZXRQYWdlcygpLTE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcDtcclxuICB9XHJcblxyXG4gIGdldFRvcFBhZ2VzKCkge1xyXG4gICAgY29uc3QgcCA9IHRoaXMuZ2V0UGFnZSgpO1xyXG4gICAgcmV0dXJuIHA9PT0wIHx8IHA9PT10aGlzLmdldFBhZ2VzKCktMT8gW3BdOiBbcCwgcCsxXTtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VTdGF0ZShuKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlTWFuYWdlci5nZXRQYWdlU3RhdGUobik7XHJcbiAgfVxyXG5cclxuICBlbmFibGVMb2FkaW5nQW5pbWF0aW9uKGVuYWJsZSkge1xyXG4gICAgdGhpcy5wYWdlTWFuYWdlci5lbmFibGVMb2FkaW5nQW5pbWF0aW9uKGVuYWJsZSk7XHJcbiAgfVxyXG5cclxuICBnZXRMZWZ0RmxpcHBpbmcoKSB7XHJcbiAgICBsZXQgYmxvY2s7XHJcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5zaGVldEJsb2Nrc1swXSwgUEkgPSBNYXRoLlBJO1xyXG4gICAgaWYodGhpcy5hbmdsZT09PVBJKSB7XHJcbiAgICAgIGJsb2NrID0gdGhpcy5yaWdodENvdmVyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmKGxlZnQgJiYgbGVmdC5zdGF0ZT09PSdjbG9zZWQnICYmIGxlZnQuYW5nbGU+UEkvMikge1xyXG4gICAgICAgIGJsb2NrID0gbGVmdDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKHRoaXMuYW5nbGUgPT09IFBJLzIgfHwgdGhpcy5hbmdsZSA9PT0gMypQSS8yKSB7XHJcbiAgICAgICAgYmxvY2sgPSB0aGlzLmxlZnRDb3ZlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJsb2NrO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmlnaHRGbGlwcGluZygpIHtcclxuICAgIGxldCBibG9jaztcclxuICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5zaGVldEJsb2Nrc1t0aGlzLnNoZWV0QmxvY2tzLmxlbmd0aC0xXSwgUEkgPSBNYXRoLlBJO1xyXG4gICAgaWYodGhpcy5hbmdsZT09PTApIHtcclxuICAgICAgYmxvY2sgPSB0aGlzLmxlZnRDb3ZlcjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZihyaWdodCAmJiByaWdodC5zdGF0ZT09PSdjbG9zZWQnICYmIHJpZ2h0LmFuZ2xlPD1QSS8yKSB7XHJcbiAgICAgICAgYmxvY2sgPSByaWdodDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKHRoaXMuYW5nbGU9PT1QSS8yIHx8IHRoaXMuYW5nbGUgPT09IDMqUEkvMikge1xyXG4gICAgICAgIGJsb2NrID0gdGhpcy5yaWdodENvdmVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmxvY2s7XHJcbiAgfVxyXG5cclxuICBnZXRDbG9zZWRCbG9ja0FuZ2xlKGFuZ2xlKSB7XHJcbiAgICBsZXQgY2xvc2VkQW5nbGUsIHtQSX0gPSBNYXRoO1xyXG5cclxuICAgIGlmKHRoaXMubGVmdENvdmVyLnBoeXNpY0lkKSB7XHJcbiAgICAgIGxldCB0ZXN0O1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRlc3QgPSBNYXRoLmFicyh0aGlzLnNoZWV0UGh5c2ljcy5nZXRQYXJhbWV0cih0aGlzLmxlZnRDb3Zlci5waHlzaWNJZCwgJ2FuZ2xlJyktYW5nbGUpXHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2goZSkge1xyXG4gICAgICAgIHRlc3QgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIGNsb3NlZEFuZ2xlID0gYW5nbG
13345U+UEkvMiB8fCB0ZXN0PlBJLzY/IFBJLzI6IHRoaXMuY2xvc2VkQW5nbGU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHRoaXMucmlnaHRDb3Zlci5waHlzaWNJZCkge1xyXG4gICAgICBsZXQgdGVzdDtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0ZXN0ID0gTWF0aC5hYnModGhpcy5zaGVldFBoeXNpY3MuZ2V0UGFyYW1ldHIodGhpcy5yaWdodENvdmVyLnBoeXNpY0lkLCAnYW5nbGUnKS1hbmdsZSlcclxuICAgICAgfVxyXG4gICAgICBjYXRjaChlKSB7XHJcbiAgICAgICAgdGVzdCA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgY2xvc2VkQW5nbGUgPSBhbmdsZTxQSS8yIHx8IHRlc3Q+UEkvNj8gUEkvMisxZS03OiB0aGlzLmNsb3NlZEFuZ2xlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNsb3NlZEFuZ2xlID0gUEkvMisoYW5nbGUhPT0wKSoxZS03O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG9wZW5lZEFuZ2xlOiBhbmdsZSxcclxuICAgICAgY2xvc2VkQW5nbGUsXHJcbiAgICAgIGJpbmRlclR1cm46IHRoaXMuY2xvc2VkQW5nbGVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBmbGlwTGVmdChzaXplPTEsIHByb2dyZXNzQ2xiPXRoaXMucC5mbGlwUHJvZ3Jlc3NDbGIpIHtcclxuICAgIGxldCBibG9jaywgcmVzO1xyXG4gICAgaWYodGhpcy5zaGVldFBoeXNpY3MuZ2V0U2l6ZSgpPDI1KSB7XHJcbiAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLnNoZWV0QmxvY2tzWzBdLCBQSSA9IE1hdGguUEk7XHJcbiAgICAgIGlmKHRoaXMuYW5nbGU9PT1QSSkge1xyXG4gICAgICAgIHJlcyA9IHRoaXMuY29ubmVjdFBoeXNpY3MoXHJcbiAgICAgICAgICBibG9jaz10aGlzLnJpZ2h0Q292ZXIsXHJcbiAgICAgICAgICB0aGlzLnAuY292ZXIubWFzcyxcclxuICAgICAgICAgIFBJLFxyXG4gICAgICAgICAgLXRoaXMucC5jb3Zlci5zdGFydFZlbG9jaXR5LFxyXG4gICAgICAgICAgdGhpcy5wLmNvdmVyLmZsZXhpYmlsaXR5LFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIChhbmdsZSxoZWlnaHQpPT50aGlzLnNldCgzKlBJLzItYW5nbGUvMixoZWlnaHQpLFxyXG4gICAgICAgICAgKGFuZ2xlLGhlaWdodCk9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0KDMqUEkvMi1hbmdsZS8yLDApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFNoZWV0QmxvY2tzKGFuZ2xlPyBQSTogUEkvMisxZS03LCdjbG9zZWQnKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwcm9ncmVzc0NsYlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYobGVmdCAmJiBsZWZ0LnN0YXRlPT09J2Nsb3NlZCcgJiYgbGVmdC5hbmdsZT5QSS8yKSB7XHJcbiAgICAgICAgICBibG9jayA9IHNpemU8bGVmdC5nZXRTaXplKCk/IHRoaXMuc3BsaXRTaGVldEJsb2NrKDAsIGxlZnQuZ2V0U2l6ZSgpLXNpemUpWzFdOiBsZWZ0O1xyXG4gICAgICAgICAgcmVzID0gdGhpcy5jb25uZWN0UGh5c2ljcyhcclxuICAgICAgICAgICAgYmxvY2ssXHJcbiAgICAgICAgICAgIHRoaXMucC5wYWdlLm1hc3MqYmxvY2suZ2V0U2l6ZSgpLFxyXG4gICAgICAgICAgICBQSSxcclxuICAgICAgICAgICAgLXRoaXMucC5wYWdlLnN0YXJ0VmVsb2NpdHksXHJcbiAgICAgICAgICAgIHRoaXMucC5wYWdlLmZsZXhpYmlsaXR5LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAoYW5nbGUsaGVpZ2h0KT0+YmxvY2suc2V0KHRoaXMuZ2V0Q2xvc2VkQmxvY2tBbmdsZShhbmdsZSksJ29wZW5lZCcsaGVpZ2h0KSxcclxuICAgICAgICAgICAgQm9vay5maW5pc2hBbmltYXRpb25DbGIuYmluZCh7Ym9vazogdGhpcywgYmxvY2t9KSxcclxuICAgICAgICAgICAgcHJvZ3Jlc3NDbGJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5hbmdsZSA9PT0gUEkvMiB8fCB0aGlzLmFuZ2xlID09PSAzKlBJLzIpIHtcclxuICAgICAgICAgIHJlcyA9IHRoaXMuY29ubmVjdFBoeXNpY3MoXHJcbiAgICAgICAgICAgIGJsb2NrPXRoaXMubGVmdENvdmVyLFxyXG4gICAgICAgICAgICB0aGlzLnAuY292ZXIubWFzcyxcclxuICAgICAgICAgICAgUEksXHJcbiAgICAgICAgICAgIC10aGlzLnAuY292ZXIuc3RhcnRWZWxvY2l0eSxcclxuICAgICAgICAgICAgdGhpcy5wLmNvdmVyLmZsZXhpYmlsaXR5LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAoYW5nbGUsaGVpZ2h0KT0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNldCgyKlBJLWFuZ2xlLzIsaGVpZ2h0KTtcclxuICAgICAgICAgICAgICBpZihhbmdsZT5QSS8yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNoZWV0QmxvY2tzKGFuZ2xlPyBQSS8yOiAwLCdjbG9zZWQnKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChhbmdsZSxoZWlnaHQpPT4gdGhpcy5zZXQoYW5nbGU9PT0wPyAwOiAyKlBJLWFuZ2xlLzIsMCksXHJcbiAgICAgICAgICAgIHByb2dyZXNzQ2xiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGZsaXBSaWdodChzaXplPTEsIHByb2dyZXNzQ2xiPXRoaXMucC5mbGlwUHJvZ3Jlc3NDbGIpIHtcclxuICAgIGxldCBibG9jaywgcmVzO1xyXG4gICAgaWYodGhpcy5zaGVldFBoeXNpY3MuZ2V0U2l6ZSgpPDI1KSB7XHJcbiAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5zaGVldEJsb2Nrc1t0aGlzLnNoZWV0QmxvY2tzLmxlbmd0aC0xXSwgUEkgPSBNYXRoLlBJO1xyXG4gICAgICBpZih0aGlzLmFuZ2xlPT09MCkge1xyXG4gICAgICAgIHJlcyA9IHRoaXMuY29ubmVjdFBoeXNpY3MoXHJcbiAgICAgICAgICBibG9jaz10aGlzLmxlZnRDb3ZlcixcclxuICAgICAgICAgIHRoaXMucC5jb3Zlci5tYXNzLFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIHRoaXMucC5jb3Zlci5zdGFydFZlbG9jaXR5LFxyXG4gICAgICAgICAgdGhpcy5wLmNvdmVyLmZsZXhpYmlsaXR5LFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIChhbmdsZSxoZWlnaHQpPT50aGlzLnNldChhbmdsZS8yLGhlaWdodCksXHJcbiAgICAgICAgICAoYW5nbGUsaGVpZ2h0KT0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXQoYW5nbGUvMiwwKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTaGVldEJsb2NrcyhhbmdsZT8gUEkvMjogMCwnY2xvc2VkJyk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcHJvZ3Jlc3NDbGJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmKHJpZ2h0ICYmIHJpZ2h0LnN0YXRlPT09J2Nsb3NlZCcgJiYgcmlnaHQuYW5nbGU8PVBJLzIpIHtcclxuICAgICAgICAgIGJsb2NrID0gc2l6ZTxyaWdodC5nZXRTaXplKCk/IHRoaXMuc3BsaXRTaGVldEJsb2NrKHRoaXMuc2hlZXRCbG9ja3MubGVuZ3RoLTEsIHNpemUpWzBdOiByaWdodDtcclxuICAgICAgICAgI
13345HJlcyA9IHRoaXMuY29ubmVjdFBoeXNpY3MoXHJcbiAgICAgICAgICAgIGJsb2NrLFxyXG4gICAgICAgICAgICB0aGlzLnAucGFnZS5tYXNzKmJsb2NrLmdldFNpemUoKSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgdGhpcy5wLnBhZ2Uuc3RhcnRWZWxvY2l0eSxcclxuICAgICAgICAgICAgdGhpcy5wLnBhZ2UuZmxleGliaWxpdHksXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIChhbmdsZSxoZWlnaHQpPT5ibG9jay5zZXQodGhpcy5nZXRDbG9zZWRCbG9ja0FuZ2xlKGFuZ2xlKSwnb3BlbmVkJyxoZWlnaHQpLFxyXG4gICAgICAgICAgICBCb29rLmZpbmlzaEFuaW1hdGlvbkNsYi5iaW5kKHtib29rOiB0aGlzLCBibG9ja30pLFxyXG4gICAgICAgICAgICBwcm9ncmVzc0NsYlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLmFuZ2xlPT09UEkvMiB8fCB0aGlzLmFuZ2xlID09PSAzKlBJLzIpIHtcclxuICAgICAgICAgIHJlcyA9IHRoaXMuY29ubmVjdFBoeXNpY3MoXHJcbiAgICAgICAgICAgIGJsb2NrPXRoaXMucmlnaHRDb3ZlcixcclxuICAgICAgICAgICAgdGhpcy5wLmNvdmVyLm1hc3MsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHRoaXMucC5jb3Zlci5zdGFydFZlbG9jaXR5LFxyXG4gICAgICAgICAgICB0aGlzLnAuY292ZXIuZmxleGliaWxpdHksXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIChhbmdsZSxoZWlnaHQpPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0KFBJLzIrYW5nbGUvMixoZWlnaHQpO1xyXG4gICAgICAgICAgICAgIGlmKGFuZ2xlPFBJLzIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2hlZXRCbG9ja3MoUEkvMisxZS03LCdjbG9zZWQnKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChhbmdsZSxoZWlnaHQpPT50aGlzLnNldChQSS8yK2FuZ2xlLzIsMCksXHJcbiAgICAgICAgICAgIHByb2dyZXNzQ2xiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIC8vIH1cclxuXHJcbiAgY2xlYXJIb3ZlckluZm8oKSB7XHJcbiAgICB0aGlzLnBhZ2VNYW5hZ2VyLnR1cm5PbkV2ZW50cygpO1xyXG4gICAgZGVsZXRlIHRoaXMuaG92ZXJJbmZvLmJsb2NrLmZvcmNlO1xyXG4gICAgZGVsZXRlIHRoaXMuaG92ZXJJbmZvLmJsb2NrLmNvcm5lckZvcmNlO1xyXG4gICAgZGVsZXRlIHRoaXMuaG92ZXJJbmZvO1xyXG4gIH1cclxuXHJcbiAgeFNlZ21lbnQoKSB7XHJcbiAgICBjb25zdCBib3hzID0gdGhpcy50bXAuYm94cywgcmVzID0ge307XHJcbiAgICBpZih0aGlzLmxlZnRDb3Zlci5waHlzaWNJZCkge1xyXG4gICAgICBib3hzWzBdLnNldEZyb21PYmplY3QodGhpcy5yaWdodENvdmVyLnRocmVlKTtcclxuICAgICAgcmVzLm1pbiA9IC0ocmVzLm1heCA9IGJveHNbMF0ubWF4LngpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLnJpZ2h0Q292ZXIucGh5c2ljSWQpIHtcclxuICAgICAgYm94c1swXS5zZXRGcm9tT2JqZWN0KHRoaXMubGVmdENvdmVyLnRocmVlKTtcclxuICAgICAgcmVzLm1heCA9IC0ocmVzLm1pbiA9IGJveHNbMF0ubWluLngpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGJveHNbMF0uc2V0RnJvbU9iamVjdCh0aGlzLmxlZnRDb3Zlci50aHJlZSk7XHJcbiAgICAgIGJveHNbMV0uc2V0RnJvbU9iamVjdCh0aGlzLnJpZ2h0Q292ZXIudGhyZWUpO1xyXG4gICAgICBib3hzWzBdLnVuaW9uKGJveHNbMV0pO1xyXG4gICAgICByZXMubWluID0gYm94c1swXS5taW4ueDtcclxuICAgICAgcmVzLm1heCA9IGJveHNbMF0ubWF4Lng7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZVRhcmdldChwb2ludCkge1xyXG4gICAgbGV0IHt4LCB5fSA9IHBvaW50LCBzZWcgPSB0aGlzLnhTZWdtZW50KCksIGFuZ2xlO1xyXG4gICAgYW5nbGUgPSAoc2VnLm1heC14KS8oc2VnLm1heC1zZWcubWluKSpNYXRoLlBJO1xyXG4gICAgLy8gYW5nbGUgPSBNYXRoLmFjb3MoeC9NYXRoLnNxcnQoeCp4K3kqeSkpO1xyXG4gICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuZHJhZ0FuZ2xlLCBNYXRoLm1pbihNYXRoLlBJLXRoaXMuZHJhZ0FuZ2xlLCBhbmdsZSkpO1xyXG4gIH1cclxuXHJcbiAgb25QaWNrQ2FsbGJhY2sob2JqZWN0KSB7XHJcbiAgICBsZXQgcmVzID0gZmFsc2U7XHJcbiAgICBjb25zdCBibG9jayA9IG9iamVjdC5vYmplY3QudXNlckRhdGEuc2VsZixcclxuICAgICAgICAgIHAgPSB7Li4ub2JqZWN0LnV2fSwgaSA9IG9iamVjdC5mYWNlLm1hdGVyaWFsSW5kZXg7XHJcbiAgICBpZihpPDIpIHtcclxuICAgICAgcC54ID0gaT09PTA/IHAueDogMS1wLng7XHJcbiAgICAgIGlmKGJsb2NrLmNvcm5lclRhcmdldC50ZXN0SW50ZXJzZWN0aW9uKG51bGwsIHApICYmIGJsb2NrLnBoeXNpY0lkKSB7XHJcbiAgICAgICAgaWYodGhpcy5ob3ZlckluZm8pIHtcclxuICAgICAgICAgIHRoaXMuY2xlYXJIb3ZlckluZm8oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmxvY2suZm9yY2UgPSBTaGVldFBoeXNpY3MuZHJhZ0ZvcmNlQ2xiO1xyXG4gICAgICAgIGJsb2NrLmNvcm5lckZvcmNlID0gU2hlZXRQaHlzaWNzLmdldERyYWdDb3JuZXJGb3JjZUNsYih0aGlzLmNvbXB1dGVUYXJnZXQob2JqZWN0LnBvaW50KSk7XHJcbiAgICAgICAgdGhpcy5kcmFnSW5mbyA9IHtcclxuICAgICAgICAgIG9iamVjdCxcclxuICAgICAgICAgIGJsb2NrXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucGFnZU1hbmFnZXIudHVybk9mZkV2ZW50cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnQ2FsbGJhY2socG9pbnQpIHtcclxuICAgIGNvbnN0IGJsb2NrID0gdGhpcy5kcmFnSW5mby5ibG9jaywgcCA9IGJsb2NrLmdldFByb3BzKCk7XHJcbiAgICBibG9jay5mb3JjZSA9IFNoZWV0UGh5c2ljcy5kcmFnRm9yY2VDbGI7XHJcbiAgICBibG9jay5jb3JuZXJGb3JjZSA9IFNoZWV0UGh5c2ljcy5nZXREcmFnQ29ybmVyRm9yY2VDbGIodGhpcy5jb21wdXRlVGFyZ2V0KHBvaW50KSk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uUmVsZWFzZUNhbGxiYWNrKCkge1xyXG4gICAgZGVsZXRlIHRoaXMuZHJhZ0luZm8uYmxvY2suZm9yY2U7XHJcbiAgICBkZWxldGUgdGhpcy5kcmFnSW5mby5ibG9jay5jb3JuZXJGb3JjZTtcclxuICAgIGRlbGV0ZSB0aGlzLmRyYWdJbmZvO1xyXG4gICAgdGhpcy5wYWdlTWFuYWdlci50dXJuT25FdmVudHMoKTtcclxuICB9XHJcblxyXG4gIGdldEZsaXBwaW5nKGkpIHtcclxuICAgIHJldHVybi
13345BpPyB0aGlzLmdldExlZnRGbGlwcGluZygpOiB0aGlzLmdldFJpZ2h0RmxpcHBpbmcoKTtcclxuICB9XHJcblxyXG4gIGZsaXAoaSwgc2l6ZT0xKSB7XHJcbiAgICByZXR1cm4gaT8gdGhpcy5mbGlwTGVmdChzaXplKTogdGhpcy5mbGlwUmlnaHQoc2l6ZSk7XHJcbiAgfVxyXG5cclxuICBlbmFibGVNb3VzZShlbmFibGUpIHtcclxuICAgIHRoaXMubW91c2VDb250cm9sbGVyID0gZW5hYmxlO1xyXG4gIH1cclxuXHJcbiAgY29ybmVyQ2FsbGJhY2soZSwgZGF0YSkge1xyXG4gICAgaWYodGhpcy5tb3VzZUNvbnRyb2xsZXIpIHtcclxuICAgICAgY29uc3Qge2ksIG59ID0gZGF0YS5kYXRhO1xyXG4gICAgICBpZihlLnR5cGU9PT0nbW91c2VvdmVyJykge1xyXG4gICAgICAgIGlmKHRoaXMuaG92ZXJJbmZvICYmIHRoaXMuaG92ZXJJbmZvLnBlbmRpbmdzIT09dW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICArK3RoaXMuaG92ZXJJbmZvLnBlbmRpbmdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmKHRoaXMuaG92ZXJJbmZvKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV3Jvbmcgc3RhdGU6IGVsZW1lbnQgaXMgYWxyZWFkeSBob3ZlcicpO1xyXG4gICAgICAgICAgICBpZih0aGlzLmhvdmVySW5mby5uIT09bikge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJIb3ZlckluZm8oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoIXRoaXMuaG92ZXJJbmZvICYmICF0aGlzLmRyYWdJbmZvKSB7XHJcbiAgICAgICAgICAgIGxldCByZXMgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgY29uc3QgaG92ZXJBbmdsZSA9IDAuMDIsXHJcbiAgICAgICAgICAgICAgICAgIGhvdmVyID0gdGhpcy5nZXRCbG9ja0J5UGFnZShuKSxcclxuICAgICAgICAgICAgICAgICAgcG9zc2libGUgPSB0aGlzLmdldEZsaXBwaW5nKGkpO1xyXG4gICAgICAgICAgICBpZihuPjEgJiYgbjwyKih0aGlzLnAuc2hlZXRzKzEpICYmIGhvdmVyLnBoeXNpY0lkICYmIChob3Zlci5hbmdsZTxob3ZlckFuZ2xlIHx8IGhvdmVyLmFuZ2xlPk1hdGguUEktaG92ZXJBbmdsZSkpIHtcclxuICAgICAgICAgICAgICByZXMgPSBQcm9taXNlLnJlc29sdmUoaG92ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoaG92ZXI9PT1wb3NzaWJsZSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNoZWV0QmxvY2tzID0gW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0Q292ZXIsXHJcbiAgICAgICAgICAgICAgICAuLi50aGlzLnNoZWV0QmxvY2tzLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodENvdmVyXHJcbiAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICBjb25zdCBqID0gc2hlZXRCbG9ja3MuaW5kZXhPZihob3ZlciksIG5leHRCbG9jayA9IH5qPyBzaGVldEJsb2Nrc1tqKzIqaS0xXTogdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgIGlmKCFuZXh0QmxvY2sgfHwgIW5leHRCbG9jay5waHlzaWNJZCB8fCBuZXh0QmxvY2suYW5nbGU+aG92ZXJBbmdsZSAmJiBuZXh0QmxvY2suYW5nbGU8TWF0aC5QSS1ob3ZlckFuZ2xlKSB7XHJcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzLmZsaXAoaSwgMSkudGhlbigoYmxvY2spPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZighYmxvY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ob3ZlckluZm87XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGVldFBoeXNpY3Muc2V0UGFyYW1ldHIoYmxvY2sucGh5c2ljSWQsICd2ZWxvY2l0eScsIDApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBibG9jaztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlckluZm8gPSB7XHJcbiAgICAgICAgICAgICAgICAgIHBlbmRpbmdzOiAxXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXMudGhlbigoYmxvY2spPT4ge1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMuaG92ZXJJbmZvICYmIHRoaXMuaG92ZXJJbmZvLnBlbmRpbmdzPDEpIHtcclxuICAgICAgICAgICAgICAgIGJsb2NrID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuaG92ZXJJbmZvO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZihibG9jaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlTWFuYWdlci50dXJuT2ZmRXZlbnRzKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAgcCA9IGJsb2NrLmdldFByb3BzKCk7XHJcbiAgICAgICAgICAgICAgICBibG9jay5mb3JjZSA9IHRoaXMuc2hlZXRQaHlzaWNzLmdldFRhcmdldEZvcmNlQ2xiKHAubWFzcypibG9jay5nZXRTaXplKCksIGk/IE1hdGguUEktaG92ZXJBbmdsZTogaG92ZXJBbmdsZSk7XHJcbiAgICAgICAgICAgICAgICBibG9jay5jb3JuZXJGb3JjZSA9ICgpPT4gKGk/IC0xOiAxKSpTaGVldFBoeXNpY3MuaG92ZXJDb3JuZXJGb3JjZUNsYigpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGVldFBoeXNpY3Muc2V0UGFyYW1ldHIoYmxvY2sucGh5c2ljSWQsICdhbmdsZScsIGk/IE1hdGguUEktMC41KmhvdmVyQW5nbGU6IDAuNSpob3ZlckFuZ2xlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJJbmZvID0ge1xyXG4gICAgICAgICAgICAgICAgICBuLFxyXG4gICAgICAgICAgICAgICAgICBibG9ja1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKDEvMzApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKHRoaXMuaG92ZXJJbmZvICYmIGUudHlwZT09PSdtb3VzZW91dCcpIHtcclxuICAgICAgICBpZih0aGlzLmhvdmVySW5mby5wZW5kaW5ncyE9PXVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgLS10aGlzLmhvdmVySW5mby5wZW5kaW5ncztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihuPT09dGhpcy5ob3ZlckluZm8ubikge1xyXG4gICAgICAgICAgdGhpcy5jbGVhckhvdmVySW5mbygpO1xyXG4gICAgICAgI
13345H1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKGUudHlwZT09PSdtb3VzZWRvd24nKSB7XHJcbiAgICAgICAgdGhpcy5jb3JuZXJDbGlja0RhdGEgPSB7XHJcbiAgICAgICAgICB4OiBlLnBhZ2VYLFxyXG4gICAgICAgICAgeTogZS5wYWdlWVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihlLnR5cGU9PT0nY2xpY2snKSB7XHJcbiAgICAgICAgaWYoTWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuY29ybmVyQ2xpY2tEYXRhLngtZS5wYWdlWCwyKStNYXRoLnBvdyh0aGlzLmNvcm5lckNsaWNrRGF0YS55LWUucGFnZVksMikpPDUpIHtcclxuICAgICAgICAgIGNvbnN0IGhvdmVyID0gdGhpcy5nZXRCbG9ja0J5UGFnZShuKTtcclxuICAgICAgICAgIGlmKGhvdmVyLnBoeXNpY0lkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaG92ZXIucGh5c2ljSWQsXHJcbiAgICAgICAgICAgICAgICAgIHByb3BzID0gaG92ZXIuZ2V0UHJvcHMoKTtcclxuICAgICAgICAgICAgdGhpcy5zaGVldFBoeXNpY3Muc2V0UGFyYW1ldHIoaWQsICd2ZWxvY2l0eScsIChpPyAtMTogMSkqcHJvcHMuc3RhcnRWZWxvY2l0eSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNvcm5lckNsaWNrRGF0YTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkU2hlZXRCbG9jayhwLCBibG9jaykge1xyXG4gICAgdGhpcy5zaGVldEJsb2Nrcy5zcGxpY2UocCwgMCwgYmxvY2spO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVTaGVldEJsb2NrKGJsb2NrLCAyKTtcclxuICAgIHRoaXMudGhyZWVTaGVldEJsb2Nrcy5hZGQoYmxvY2sudGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlU2hlZXRCbG9jayhibG9jaywgb2Zmc2V0KSB7XHJcbiAgICBjb25zdCBldmVudENvbnZlcnRlciA9IG5ldyBDdXN0b21FdmVudENvbnZlcnRlcih0aGlzLnZpc3VhbC53bmQsIHRoaXMudmlzdWFsLmRvYywgQ2lyY2xlVGFyZ2V0LnRlc3QpLFxyXG4gICAgICAgICAgciA9IDAuMTUsXHJcbiAgICAgICAgICB0YXJnZXQgPSBuZXcgQ2lyY2xlVGFyZ2V0KDEtMC41KnIsIDAuNSpyLCByKTtcclxuICAgIHRhcmdldC5ibG9jayA9IGJsb2NrO1xyXG4gICAgdGFyZ2V0LmNhbGxiYWNrID0gdGhpcy5jb3JuZXJDYWxsYmFjay5iaW5kKHRoaXMpO1xyXG4gICAgZXZlbnRDb252ZXJ0ZXIuYWRkQ3VzdG9tKHRhcmdldCk7XHJcbiAgICBibG9jay5jb3JuZXJUYXJnZXQgPSB0YXJnZXQ7XHJcbiAgICBibG9jay50aHJlZS51c2VyRGF0YS5tb3VzZUNhbGxiYWNrID0gKGUsIGRhdGEpPT4ge1xyXG4gICAgICBjb25zdCBpID0gZGF0YS5mYWNlLm1hdGVyaWFsSW5kZXg7XHJcbiAgICAgIGlmKGk8Mikge1xyXG4gICAgICAgIGNvbnN0IG4gPSBpPT09MD8gb2Zmc2V0KzIqYmxvY2sucC5maXJzdDogb2Zmc2V0KzIqYmxvY2sucC5sYXN0LTE7XHJcbiAgICAgICAgZXZlbnRDb252ZXJ0ZXIuY29udmVydChlLCB7eDogaT09PTA/IGRhdGEudXYueDogMS1kYXRhLnV2LngsIHk6IGRhdGEudXYueSwgaSwgbn0pO1xyXG4gICAgICAgIHRoaXMucGFnZU1hbmFnZXIudHJhbnNmZXJFdmVudFRvVGV4dHVyZShuLCBlLCBkYXRhKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGJsb2NrLnRocmVlLnVzZXJEYXRhLnRvdWNoQ2FsbGJhY2sgPSAoZSwgZGF0YSk9PiB7XHJcbiAgICAgIGNvbnN0IGkgPSBkYXRhLmZhY2UubWF0ZXJpYWxJbmRleDtcclxuICAgICAgaWYoaTwyKSB7XHJcbiAgICAgICAgY29uc3QgbiA9IGk9PT0wPyBvZmZzZXQrMipibG9jay5wLmZpcnN0OiBvZmZzZXQrMipibG9jay5wLmxhc3QtMTtcclxuICAgICAgICB0aGlzLnBhZ2VNYW5hZ2VyLnRyYW5zZmVyRXZlbnRUb1RleHR1cmUobiwgZSwgZGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLnZpc3VhbC5kcmFnLmFkZFRocmVlKGJsb2NrLnRocmVlKTtcclxuICAgIHRoaXMudmlzdWFsLm1vdXNlRXZlbnRzLmFkZFRocmVlKGJsb2NrLnRocmVlKTtcclxuICAgIHRoaXMudmlzdWFsLnRvdWNoRXZlbnRzLmFkZFRocmVlKGJsb2NrLnRocmVlKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVNoZWV0QmxvY2soYmxvY2spIHtcclxuICAgIHRoaXMudmlzdWFsLm1vdXNlRXZlbnRzLnJlbW92ZVRocmVlKGJsb2NrLnRocmVlKTtcclxuICAgIHRoaXMudmlzdWFsLnRvdWNoRXZlbnRzLnJlbW92ZVRocmVlKGJsb2NrLnRocmVlKTtcclxuICAgIHRoaXMudmlzdWFsLmRyYWcucmVtb3ZlVGhyZWUoYmxvY2sudGhyZWUpO1xyXG4gICAgdGhpcy50aHJlZVNoZWV0QmxvY2tzLnJlbW92ZShibG9jay50aHJlZSk7XHJcbiAgICBibG9jay5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTaGVldEJsb2NrcyhmaXJzdCwgc2l6ZSkge1xyXG4gICAgY29uc3QgYmxvY2tzID0gdGhpcy5zaGVldEJsb2Nrcy5zcGxpY2UoZmlyc3QsIHNpemUpO1xyXG4gICAgZm9yKGxldCBibG9jayBvZiBibG9ja3MpIHtcclxuICAgICAgdGhpcy5yZW1vdmVTaGVldEJsb2NrKGJsb2NrKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFRleHR1cmUobWF0ZXJpYWwsIG4pIHtcclxuICAgIHRoaXMucGFnZU1hbmFnZXIuc2V0VGV4dHVyZShtYXRlcmlhbCwgbik7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlVGV4dHVyZShtYXRlcmlhbCwgbikge1xyXG4gICAgdGhpcy5zZXRUZXh0dXJlKG1hdGVyaWFsLCBuKzIpO1xyXG4gIH1cclxuXHJcbiAgc2V0TGVmdENvdmVyVGV4dHVyZShtYXRlcmlhbCwgbikge1xyXG4gICAgdGhpcy5zZXRUZXh0dXJlKG1hdGVyaWFsLCBuKTtcclxuICB9XHJcblxyXG4gIHNldFJpZ2h0Q292ZXJUZXh0dXJlKG1hdGVyaWFsLCBuKSB7XHJcbiAgICB0aGlzLnNldFRleHR1cmUobWF0ZXJpYWwsIG4rMioodGhpcy5wLnNoZWV0cysxKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZmluaXNoQW5pbWF0aW9uQ2xiKGFuZ2xlKSB7XHJcbiAgICB0aGlzLmJsb2NrLnNldCh0aGlzLmJvb2suZ2V0Q2xvc2VkQmxvY2tBbmdsZShhbmdsZSkuY2xvc2VkQW5nbGUsJ2Nsb3NlZCcsMCk7XHJcbiAgICBjb25zdCBpID0gdGhpcy5ib29rLnNoZWV0QmxvY2tzLmluZGV4T2YodGhpcy5ibG9jayk7XHJcbiAgICBpZih+aSkge1xyXG4gICAgICBpZihhbmdsZT09PTApIHtcclxuICAgICAgICB0aGlzLmJvb2subWVyZ2VTaGVldEJsb2NrcyhpLCB0aGlzLmJvb2suc2hlZXRCbG9ja3MubGVuZ3RoLWkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgI
13345HRoaXMuYm9vay5tZXJnZVNoZWV0QmxvY2tzKDAsIGkrMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGNCbG9ja0ZvcmNlKGJsb2NrLCBvYmplY3QsIGFuZ2xlLCB2ZWxvY2l0eSwgY29ybmVySGVpZ2h0KSB7XHJcbiAgICByZXR1cm4gYmxvY2suZm9yY2U/IGJsb2NrLmZvcmNlKG9iamVjdCwgYW5nbGUsIHZlbG9jaXR5LCBjb3JuZXJIZWlnaHQpOiAwO1xyXG4gIH1cclxuXHJcbiAgY2FsY0Jsb2NrQ29ybmVyRm9yY2UoYmxvY2ssIG9iamVjdCwgYW5nbGUsIHZlbG9jaXR5LCBjb3JuZXJIZWlnaHQpIHtcclxuICAgIHJldHVybiBibG9jay5jb3JuZXJGb3JjZT8gYmxvY2suY29ybmVyRm9yY2Uob2JqZWN0LCBhbmdsZSwgdmVsb2NpdHksIGNvcm5lckhlaWdodCk6IDA7XHJcbiAgfVxyXG5cclxuICBub3RpZnlCZWZvcmVBbmltYXRpb24oKSB7XHJcbiAgICBsZXQgcmVzO1xyXG4gICAgaWYodGhpcy5hbmltYXRpb25Ob3RpZmljYXRpb24pIHtcclxuICAgICAgcmVzID0gUHJvbWlzZS5yZWplY3QoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmFuaW1hdGlvbk5vdGlmaWNhdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCh7XHJcbiAgICAgICAgdHlwZTogJ2JlZm9yZUFuaW1hdGlvbidcclxuICAgICAgfSk7XHJcbiAgICAgIHJlcyA9IHRoaXMubGF5ZXJNYW5hZ2VyLmhpZGUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBub3RpZnlBZnRlckFuaW1hdGlvbigpIHtcclxuICAgIGlmKHRoaXMuYW5pbWF0aW9uTm90aWZpY2F0aW9uKSB7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmFuaW1hdGlvbk5vdGlmaWNhdGlvbjtcclxuICAgICAgdGhpcy5sYXllck1hbmFnZXIuc2hvdygpO1xyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoe1xyXG4gICAgICAgIHR5cGU6ICdhZnRlckFuaW1hdGlvbidcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25uZWN0UGh5c2ljcyhibG9jaywgbWFzcywgYW5nbGUsIHZlbG9jaXR5LCBmbGV4aWJpbGl0eSwgY292ZXJIZWlnaHQsIHNpbXVsYXRlQ2xiLCByZW1vdmVDbGIsIHByb2dyZXNzQ2xiKSB7XHJcbiAgICBjb25zdCB0eXBlID0gKCk9PiB0aGlzLmhvdmVySW5mbz8gJ2hvdmVyJzogKHRoaXMuZHJhZ0luZm8/ICdkcmFnJzogJ2ZyZWUnKSxcclxuICAgICAgcmVzID0gdGhpcy5zaGVldFBoeXNpY3MuZ2V0U2l6ZSgpPyBQcm9taXNlLnJlc29sdmUoKTogdGhpcy5ub3RpZnlCZWZvcmVBbmltYXRpb24oKTtcclxuICAgIHJldHVybiByZXMudGhlbigoKT0+IHtcclxuICAgICAgYmxvY2sucGh5c2ljSWQgPSB0aGlzLnNoZWV0UGh5c2ljcy5hZGRPYmplY3QoXHJcbiAgICAgICAgbWFzcyxcclxuICAgICAgICBhbmdsZSxcclxuICAgICAgICB2ZWxvY2l0eSxcclxuICAgICAgICBmbGV4aWJpbGl0eSxcclxuICAgICAgICBjb3ZlckhlaWdodCxcclxuICAgICAgICAoYW5nbCwgY2gpPT4ge1xyXG4gICAgICAgICAgc2ltdWxhdGVDbGIoYW5nbCwgY2gpO1xyXG4gICAgICAgICAgcHJvZ3Jlc3NDbGIoYmxvY2ssIE1hdGguYWJzKGFuZ2xlLWFuZ2wpL01hdGguUEksICdwcm9jZXNzJywgdHlwZSgpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChhbmdsLCBjaCk9PiB7XHJcbiAgICAgICAgICByZW1vdmVDbGIoYW5nbCwgY2gpO1xyXG4gICAgICAgICAgZGVsZXRlIGJsb2NrLnBoeXNpY0lkO1xyXG4gICAgICAgICAgcHJvZ3Jlc3NDbGIoYmxvY2ssIE1hdGguYWJzKGFuZ2xlLWFuZ2wpL01hdGguUEksICdmaW5pc2gnLCB0eXBlKCkpO1xyXG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+IHtcclxuICAgICAgICAgICAgaWYoIXRoaXMuc2hlZXRQaHlzaWNzLmdldFNpemUoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZ5QWZ0ZXJBbmltYXRpb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAob2JqZWN0LCBhbmdsZSwgdmVsb2NpdHksIGNvcm5lckhlaWdodCk9PiB0aGlzLmNhbGNCbG9ja0ZvcmNlKGJsb2NrLCBvYmplY3QsIGFuZ2xlLCB2ZWxvY2l0eSwgY29ybmVySGVpZ2h0KSxcclxuICAgICAgICAob2JqZWN0LCBhbmdsZSwgdmVsb2NpdHksIGNvcm5lckhlaWdodCk9PiB0aGlzLmNhbGNCbG9ja0Nvcm5lckZvcmNlKGJsb2NrLCBvYmplY3QsIGFuZ2xlLCB2ZWxvY2l0eSwgY29ybmVySGVpZ2h0KVxyXG4gICAgICApO1xyXG4gICAgICBwcm9ncmVzc0NsYihibG9jaywgMCwgJ2luaXQnLCB0eXBlKCkpO1xyXG4gICAgICByZXR1cm4gYmxvY2s7XHJcbiAgICB9KS5jYXRjaCgoKT0+IHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZHQpIHtcclxuICAgIHRoaXMubGFzdE1vdXNlUG9zLnQrPWR0O1xyXG4gICAgaWYodGhpcy5pc1Byb2Nlc3NpbmcoKSAmJiB0aGlzLmxhc3RNb3VzZVBvcy5wYWdlWCE9PXVuZGVmaW5lZCAmJiB0aGlzLmxhc3RNb3VzZVBvcy50LSh0aGlzLmxhc3RNb3VzZVBvcy5sYXN0VCB8fCAwKT4wLjI1ICYmICF0aGlzLmhvdmVySW5mbyAmJiAhdGhpcy5kcmFnSW5mbykge1xyXG4gICAgICB0aGlzLmxhc3RNb3VzZVBvcy5sYXN0VCA9IHRoaXMubGFzdE1vdXNlUG9zLnQ7XHJcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB7XHJcbiAgICAgICAgJCh0aGlzLnZpc3VhbC5lbGVtZW50KS50cmlnZ2VyKCQuRXZlbnQoJ21vdXNlbW92ZScsIHRoaXMubGFzdE1vdXNlUG9zKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaGVldFBoeXNpY3Muc2ltdWxhdGUoZHQpO1xyXG4gIH1cclxuXHJcbiAgc3BsaXRTaGVldEJsb2NrKGksIGxlZnRTaXplKSB7XHJcbiAgICBjb25zdCBibG9jayA9IHRoaXMuc2hlZXRCbG9ja3NbaV07XHJcbiAgICBpZihibG9jayAmJiBsZWZ0U2l6ZTxibG9jay5nZXRTaXplKCkpIHtcclxuICAgICAgY29uc3QgbmV3QmxvY2sgPSBuZXcgU2hlZXRCbG9jayh0aGlzLnZpc3VhbCwgey4uLnRoaXMucCwgc2V0VGV4dHVyZTogdGhpcy5zZXRQYWdlVGV4dHVyZS5iaW5kKHRoaXMpfSwgYmxvY2sucC5maXJzdCwgYmxvY2sucC5maXJzdCtsZWZ0U2l6ZSwgYmxvY2suYW5nbGUsIGJsb2NrLnN0YXRlKTtcclxuICAgICAgYmxvY2suc2V0KGJsb2NrLmFuZ2xlLCBibG9jay5zdGF0ZSwgYmxvY2suY29ybmVyLmhlaWdodCwgYmxvY2sucC5maXJzdCtsZWZ0U2l6ZSwgYmxvY2sucC5sYXN0KTtcclxuICAgICAgdGhpcy5hZGRTaGVldEJsb2NrKGksIG5ld0Jsb2NrKTtcclxuICAgICAgcmV0dXJuIFtuZXdCbG9jaywgYmxvY2tdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWVyZ2VTaGVldEJsb2NrcyhmaXJzdCwgc2l6ZSkge1xyXG4gICAgaWYoZmlyc3Q8dGhpcy5zaGVldEJsb2Nrcy5sZW5ndGgpIHtcclxuICAgICAgc2l6ZSA9IE1hdGgubWluKHRoaXMuc2hlZXRCbG9ja3MubGVuZ3RoLWZpcnN0LCBzaXplKTtcclxuICAgICAgY29uc3QgZmlyc3RCbG9jayA9IHRoaXMuc2hlZXRCbG9ja3NbZmlyc3RdLCBsYXN0QmxvY2sgPSB0aGlzLnNoZWV0QmxvY2tzW2ZpcnN0K3NpemUtMV07XHJcbiAgICAgIGZpcnN0QmxvY2suc2V0KGZpcnN0QmxvY2suYW5nbGUsIGZpcnN0QmxvY2suc3RhdGUsIGZpcnN0QmxvY2suY29ybmVyLmhlaWdodCwgZmlyc3RCbG9jay5wLmZpcnN0LCBsYXN0QmxvY2sucC5sYXN0KTtcclxuICAgICAgdGhpcy5yZW1vdmVTaGVldEJsb2NrcyhmaXJzdCsxLCBzaXplLTEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2hlZXRCbG9ja3MoYW5nbGUsIHN0YXRl
13345KSB7XHJcbiAgICBpZihzdGF0ZT09PSdjbG9zZWQnKSB7XHJcbiAgICAgIHRoaXMuY2xvc2VkQW5nbGUgPSBhbmdsZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hlZXRCbG9ja3MuZm9yRWFjaCgocyk9PiB7XHJcbiAgICAgIGlmKCFzLnBoeXNpY0lkKSB7XHJcbiAgICAgICAgcy5zZXQoYW5nbGUsIHN0YXRlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXQoYW5nbGUsIGhlaWdodD0wKSB7XHJcbiAgICB0aGlzLmFuZ2xlID0gYW5nbGU7XHJcbiAgICBjb25zdCBQSSA9IE1hdGguUEk7XHJcbiAgICBpZihhbmdsZTxQSS80KSB7XHJcbiAgICAgIHRoaXMuYmluZGVyLnNldCgwKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldExlZnQoLVBJLzIrMiphbmdsZSk7XHJcbiAgICAgIHRoaXMubGVmdENvdmVyLnNldChQSS8yLCdvcGVuZWQnLGhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLnNldFNoZWV0QmxvY2tzKDAsJ2Nsb3NlZCcpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0UmlnaHQoMCk7XHJcbiAgICAgIHRoaXMucmlnaHRDb3Zlci5zZXQoMCwnY2xvc2VkJywwKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYoYW5nbGU8MipQSS80KSB7XHJcbiAgICAgIGNvbnN0IGE9MiooYW5nbGUtUEkvNCk7XHJcbiAgICAgIHRoaXMuYmluZGVyLnNldChhKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldExlZnQoLWEpO1xyXG4gICAgICB0aGlzLmxlZnRDb3Zlci5zZXQoUEkvMithLCdvcGVuZWQnLGhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLnNldFNoZWV0QmxvY2tzKGEsJ2Nsb3NlZCcpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0UmlnaHQoLWEpO1xyXG4gICAgICB0aGlzLnJpZ2h0Q292ZXIuc2V0KGEsJ2Nsb3NlZCcsMCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGFuZ2xlPDMqUEkvNCkge1xyXG4gICAgICBjb25zdCBhPTIqKGFuZ2xlLVBJLzIpO1xyXG4gICAgICB0aGlzLmJpbmRlci5zZXQoUEkvMik7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRMZWZ0KC1QSS8yKTtcclxuICAgICAgdGhpcy5sZWZ0Q292ZXIuc2V0KFBJLCdvcGVuZWQnLDApO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0UmlnaHQoLVBJLzIpO1xyXG4gICAgICB0aGlzLnJpZ2h0Q292ZXIuc2V0KGEsJ29wZW5lZCcsaGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYoYW5nbGU8NCpQSS80KSB7XHJcbiAgICAgIGNvbnN0IGE9MiooYW5nbGUtMypQSS80KStQSS8yO1xyXG4gICAgICB0aGlzLmJpbmRlci5zZXQoYSk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRMZWZ0KC1hKTtcclxuICAgICAgdGhpcy5sZWZ0Q292ZXIuc2V0KGEsJ2Nsb3NlZCcsMCk7XHJcblxyXG4gICAgICB0aGlzLnNldFNoZWV0QmxvY2tzKGEsJ2Nsb3NlZCcpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0UmlnaHQoLVBJLzIpO1xyXG4gICAgICB0aGlzLnJpZ2h0Q292ZXIuc2V0KFBJLzIsJ29wZW5lZCcsaGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYoYW5nbGU8NSpQSS80KSB7XHJcbiAgICAgIHRoaXMuYmluZGVyLnNldChQSSk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRMZWZ0KC1QSSk7XHJcbiAgICAgIHRoaXMubGVmdENvdmVyLnNldChQSSwnY2xvc2VkJywwKTtcclxuXHJcbiAgICAgIHRoaXMuc2V0U2hlZXRCbG9ja3MoUEksJ2Nsb3NlZCcpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0UmlnaHQoLVBJLzItMiooYW5nbGUtUEkpKTtcclxuICAgICAgdGhpcy5yaWdodENvdmVyLnNldChQSS8yLCdvcGVuZWQnLGhlaWdodCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGFuZ2xlPDYqUEkvNCkge1xyXG4gICAgICBjb25zdCBhPTIqKGFuZ2xlLTUqUEkvNCk7XHJcbiAgICAgIHRoaXMuYmluZGVyLnNldChQSS1hKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldExlZnQoLVBJK2EpO1xyXG4gICAgICB0aGlzLmxlZnRDb3Zlci5zZXQoUEktYSwnY2xvc2VkJywwKTtcclxuXHJcbiAgICAgIHRoaXMuc2V0U2hlZXRCbG9ja3MoUEktYSwnY2xvc2VkJyk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRSaWdodCgtUEkrYSk7XHJcbiAgICAgIHRoaXMucmlnaHRDb3Zlci5zZXQoUEkvMi1hLCdvcGVuZWQnLGhlaWdodCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGFuZ2xlPDcqUEkvNCkge1xyXG4gICAgICBjb25zdCBhPTIqKGFuZ2xlLTYqUEkvNCk7XHJcbiAgICAgIHRoaXMuYmluZGVyLnNldChQSS8yKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldExlZnQoLVBJLzIpO1xyXG4gICAgICB0aGlzLmxlZnRDb3Zlci5zZXQoUEktYSwnb3BlbmVkJyxoZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0UmlnaHQoLVBJLzIpO1xyXG4gICAgICB0aGlzLnJpZ2h0Q292ZXIuc2V0KDAsJ29wZW5lZCcsMCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGFuZ2xlPDgqUEkvNCkge1xyXG4gICAgICBjb25zdCBhPTIqKGFuZ2xlLTcqUEkvNCk7XHJcbiAgICAgIHRoaXMuYmluZGVyLnNldChQSS8yLWEpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0TGVmdCgtUEkvMik7XHJcbiAgICAgIHRoaXMubGVmdENvdmVyLnNldChQSS8yLCdvcGVuZWQnLGhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLnNldFNoZWV0QmxvY2tzKFBJLzItYSwnY2xvc2VkJyk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRSaWdodCgtUEkvMithKTtcclxuICAgICAgdGhpcy5yaWdodENvdmVyLnNldChQSS8yLWEsJ2Nsb3NlZCcsMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY3JlYXRlU2lkZVRleHR1cmUoY29sb3IpIHtcclxuICAgIGNvbnN0IGpDID0gJCgnPGNhbnZhcyB3aWR0aD1cIjhcIiBoZWlnaHQ9XCI4XCI+PC9jYW52YXM+Jyk7XHJcbiAgICBjb25zdCBjdHggPSBqQ1swXS5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgY3R4LmZpbGxTdHlsZSA9IEdyYXBoVXRpbHMuY29sb3IyUmdiYShjb2xvciwgMSk7XHJcbiAgICBjdHgucmVjdCgwLCAwLCA4LCA3KTtcclxuICAgIGN0eC5maWxsKCk7XHJcbiAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICBjdHguZmlsbFN0eWxlID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKEdyYXBoVXRpbHMuaW52ZXJzZUNvbG9yKGNvbG9yLDAuNSksI
13345DEpO1xyXG4gICAgY3R4LnJlY3QoMCwgNywgOCwgMSk7XHJcbiAgICBjdHguZmlsbCgpO1xyXG4gICAgcmV0dXJuIGpDWzBdO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHByZXBhcmVQcm9wcyhwcm9wcykge1xyXG4gICAgcmV0dXJuIEJvb2suY2FsY1Byb3BzKEJvb2subWVyZ2VQcm9wcyhib29rUHJvcHMoKSwgcHJvcHMpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZXJnZVByb3BzKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgIHNlY29uZCA9IHNlY29uZCB8fCB7fTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmZpcnN0LFxyXG4gICAgICAuLi5zZWNvbmQsXHJcbiAgICAgIHNoZWV0OiB7XHJcbiAgICAgICAgLi4uZmlyc3Quc2hlZXQsXHJcbiAgICAgICAgLi4uc2Vjb25kLnNoZWV0LFxyXG4gICAgICB9LFxyXG4gICAgICBjb3Zlcjoge1xyXG4gICAgICAgIC4uLmZpcnN0LmNvdmVyLFxyXG4gICAgICAgIC4uLnNlY29uZC5jb3ZlcixcclxuICAgICAgfSxcclxuICAgICAgcGFnZToge1xyXG4gICAgICAgIC4uLmZpcnN0LnBhZ2UsXHJcbiAgICAgICAgLi4uc2Vjb25kLnBhZ2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNzc0xheWVyUHJvcHM6IHtcclxuICAgICAgICAuLi5maXJzdC5jc3NMYXllclByb3BzLFxyXG4gICAgICAgIC4uLnNlY29uZC5jc3NMYXllclByb3BzLFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNhbGNQcm9wcyhwcm9wcykge1xyXG4gICAgY29uc3QgcCA9IHtcclxuICAgICAgLi4ucHJvcHMsXHJcbiAgICAgIHNoZWV0OiB7XHJcbiAgICAgICAgLi4ucHJvcHMuc2hlZXRcclxuICAgICAgfSxcclxuICAgICAgY292ZXI6IHtcclxuICAgICAgICAuLi5wcm9wcy5zaGVldCxcclxuICAgICAgICAuLi5wcm9wcy5jb3ZlclxyXG4gICAgICB9LFxyXG4gICAgICBwYWdlOiB7XHJcbiAgICAgICAgLi4ucHJvcHMuc2hlZXQsXHJcbiAgICAgICAgLi4ucHJvcHMucGFnZVxyXG4gICAgICB9LFxyXG4gICAgICBjc3NMYXllclByb3BzOiB7XHJcbiAgICAgICAgLi4ucHJvcHMuY3NzTGF5ZXJQcm9wcyxcclxuICAgICAgICAkXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzY2FsZSA9IDUwLFxyXG4gICAgaGVpZ2h0ID0gc2NhbGUqcC5oZWlnaHQsXHJcbiAgICB3aWR0aCA9IHNjYWxlKnAud2lkdGgsXHJcbiAgICBmbGlwUHJvZ3Jlc3NDbGIgPSAoKT0+IHVuZGVmaW5lZCxcclxuICAgIHNoZWV0ID0ge1xyXG4gICAgICBzaWRlVGV4dHVyZTogcC5zaGVldC5zaWRlVGV4dHVyZSB8fCBCb29rLmNyZWF0ZVNpZGVUZXh0dXJlKHAuc2hlZXQuY29sb3IpLFxyXG4gICAgfSxcclxuICAgIGNvdmVyID0ge1xyXG4gICAgICAuLi5zaGVldCxcclxuICAgICAgLi4ucC5jb3ZlcixcclxuICAgICAgZGVwdGg6IHNjYWxlKnAuY292ZXIuZGVwdGgsXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIHBhZGRpbmc6IHNjYWxlKnAuY292ZXIucGFkZGluZ1xyXG4gICAgfSxcclxuICAgIHBhZ2UgPSB7XHJcbiAgICAgIC4uLnNoZWV0LFxyXG4gICAgICAuLi5wLnBhZ2UsXHJcbiAgICAgIGRlcHRoOiBzY2FsZSpwLnBhZ2UuZGVwdGgsXHJcbiAgICAgIHdpZHRoOiBjb3Zlci53aWR0aCAtIGNvdmVyLnBhZGRpbmcsXHJcbiAgICAgIGhlaWdodDogY292ZXIuaGVpZ2h0IC0gMipjb3Zlci5wYWRkaW5nXHJcbiAgICB9LFxyXG4gICAgbWFya2VyID0ge1xyXG4gICAgICB1c2U6IGZhbHNlLFxyXG4gICAgICBjb2xvcjogMFhGRjAwMDAsXHJcbiAgICAgIHNpemU6IHNjYWxlKjAuMDAxXHJcbiAgICB9O1xyXG4gICAgaWYoY292ZXIuY29sb3IhPT1zaGVldC5jb2xvciAmJiAhcC5jb3Zlci5zaWRlVGV4dHVyZSkge1xyXG4gICAgICBjb3Zlci5zaWRlVGV4dHVyZSA9IEJvb2suY3JlYXRlU2lkZVRleHR1cmUoY292ZXIuY29sb3IpO1xyXG4gICAgfVxyXG4gICAgaWYocGFnZS5jb2xvciE9PXNoZWV0LmNvbG9yICYmICFwLnBhZ2Uuc2lkZVRleHR1cmUpIHtcclxuICAgICAgcGFnZS5zaWRlVGV4dHVyZSA9IEJvb2suY3JlYXRlU2lkZVRleHR1cmUocGFnZS5jb2xvcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gey4uLnAsIHNjYWxlLCBoZWlnaHQsIHdpZHRoLCBmbGlwUHJvZ3Jlc3NDbGIsIGNvdmVyLCBwYWdlLCBtYXJrZXJ9O1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9Cb29rLmpzIiwiaW1wb3J0IHskLCBUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBDb250cm9sbGVyIGZyb20gJ0NvbnRyb2xsZXInO1xyXG5pbXBvcnQge3Byb3BzIGFzICBib29rQ29udHJvbGxlclByb3BzfSBmcm9tICcuLi9wcm9wcy9ib29rQ29udHJvbGxlcic7XHJcbmltcG9ydCBFdmVudHNUb0FjdGlvbnMgZnJvbSAnRXZlbnRzVG9BY3Rpb25zJztcclxuaW1wb3J0IFN0YXRzIGZyb20gJ3N0YXRzLmpzJztcclxuaW1wb3J0IE9iamVjdDNEV2F0Y2hlciBmcm9tICdPYmplY3QzRFdhdGNoZXInO1xyXG5pbXBvcnQgRnVsbFNjcmVlbiBmcm9tICdGdWxsU2NyZWVuJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvb2tDb250cm9sbGVyIGV4dGVuZHMgQ29udHJvbGxlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGJvb2ssIHZpZXcsIHByb3BzKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uQ29udHJvbHMgPSB0cnVlO1xyXG4gICAgdGhpcy5ib29rID0gYm9vaztcclxuICAgIHRoaXMudmlzdWFsID0gYm9vay52aXN1YWw7XHJcbiAgICB0aGlzLnAgPSBCb29rQ29udHJvbGxlci5wcmVwYXJlUHJvcHMocHJvcHMpO1xyXG4gICAgdGhpcy5wLnJ0bCA9IGJvb2sucC5ydGw7XHJcbiAgICB0aGlzLmRldmljZVBpeGVsUmF0aW8gPSB0aGlzLnZpc3VhbC53bmQuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xyXG5cclxuICAgIHRoaXMub3JiaXQgPSBib29rLnZpc3VhbC5nZXRPcmJpdCgpO1xyXG4gICAgYm9vay5zZXRGbGlwUHJvZ3Jlc3NDbGIodGhpcy51cGRhdGVWaWV3SWZTdGF0ZS5iaW5kKHRoaXMpKTtcclxuICAgIHRoaXMudmlldyA9IHZpZXc7XHJcbiAgICB0aGlzLmJpbmRBY3Rpb25zKCk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgc21hcnRQYW46ICF0aGlzLmFjdGlvbnNbJ2NtZFNtYXJ0UGFuJ10uYWN0aXZlLFxyXG4gICAgICBzaW5nbGVQYWdlOiB0aGlzLmFjdGlvbnNbJ2NtZFNpbmdsZVBhZ2UnXS5hY3RpdmUgfHwgdGhpcy5hY3Rpb25zWydjbWRTaW5nbGVQYWdlJ10uYWN0aXZlRm9yTW9iaWxlICYmIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbz4xLFxyXG4gICAgICBzdGF0czogdGhpcy5hY3Rpb25zWydjbWRTdGF0cyddLmFjdGl2ZSxcclxuICAgICAgbGlnaHRpbmc6IHRoaXMucC5saWdodGluZy5kZWZh
13345dWx0LFxyXG4gICAgICBhY3RpdmVTaWRlOiAxXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYm94cyA9IFtuZXcgVEhSRUUuQm94MygpLCBuZXcgVEhSRUUuQm94MygpXTtcclxuICAgIHRoaXMuYm9va1dhdGNoZXIgPSBuZXcgT2JqZWN0M0RXYXRjaGVyKHRoaXMudmlzdWFsLCAoKT0+IHtcclxuICAgICAgaWYodGhpcy5zdGF0ZS5zaW5nbGVQYWdlKSB7XHJcbiAgICAgICAgaWYodGhpcy5zdGF0ZS5hY3RpdmVTaWRlKSB7XHJcbiAgICAgICAgICB0aGlzLmJveHNbMF0uc2V0RnJvbU9iamVjdChib29rLnJpZ2h0Q292ZXIudGhyZWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYm94c1swXS5zZXRGcm9tT2JqZWN0KGJvb2subGVmdENvdmVyLnRocmVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ib3hzWzBdLnNldEZyb21PYmplY3QoYm9vay5sZWZ0Q292ZXIudGhyZWUpO1xyXG4gICAgICAgIHRoaXMuYm94c1sxXS5zZXRGcm9tT2JqZWN0KGJvb2sucmlnaHRDb3Zlci50aHJlZSk7XHJcbiAgICAgICAgdGhpcy5ib3hzWzBdLnVuaW9uKHRoaXMuYm94c1sxXSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuYm94c1swXTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5ib29rV2F0Y2hlci5zY2FsZSA9IHRoaXMucC5zY2FsZS5kZWZhdWx0O1xyXG4gICAgdGhpcy5ib29rLnNldFpvb20odGhpcy5ib29rV2F0Y2hlci5zY2FsZSwgdGhpcy5zdGF0ZS5zaW5nbGVQYWdlKTtcclxuXHJcbiAgICB0aGlzLlN0YXRzID0gbmV3IFN0YXRzKCk7XHJcbiAgICB0aGlzLlN0YXRzLmRvbUVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgdGhpcy5TdGF0cy5kb21FbGVtZW50LnN0eWxlLnRvcCA9ICcwcHgnO1xyXG5cclxuICAgIHRoaXMudmlzdWFsLnNldEV4dHJhTGlnaHRpbmcodGhpcy5zdGF0ZS5saWdodGluZyk7XHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBvblNjcmVlbk1vZGVDaGFuZ2VkOiB0aGlzLm9uU2NyZWVuTW9kZUNoYW5nZWQuYmluZCh0aGlzKSxcclxuICAgICAgc3RhdHM6IHRoaXMuU3RhdHMudXBkYXRlLmJpbmQodGhpcy5TdGF0cyksXHJcbiAgICAgIG9uVXBkYXRlVmlldzogdGhpcy51cGRhdGVWaWV3LmJpbmQodGhpcylcclxuICAgIH1cclxuICAgIEZ1bGxTY3JlZW4uYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnZpZXcuZ2V0UGFyZW50Q29udGFpbmVyKCkub3duZXJEb2N1bWVudCwgdGhpcy5iaW5kcy5vblNjcmVlbk1vZGVDaGFuZ2VkKTtcclxuXHJcbiAgICB0aGlzLmNtZFNtYXJ0UGFuKCk7XHJcblxyXG4gICAgaWYodGhpcy52aWV3LnRlbXBsYXRlT2JqZWN0LmFwcExvYWRlZCkge1xyXG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKHRoaXMudmlldy50ZW1wbGF0ZU9iamVjdC5hcHBMb2FkZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYm9vay5lbmFibGVMb2FkaW5nQW5pbWF0aW9uKHRoaXMucC5sb2FkaW5nQW5pbWF0aW9uLmJvb2spO1xyXG4gICAgaWYodGhpcy5wLmxvYWRpbmdBbmltYXRpb24uc2tpbikge1xyXG4gICAgICB0aGlzLmluaXRMb2FkaW5nQW5pbWF0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ib29rLmVuYWJsZUxvYWRpbmdBbmltYXRpb24odGhpcy5wLmxvYWRpbmdBbmltYXRpb24uYm9vayk7XHJcbiAgICB0aGlzLmJvb2suc2V0QXV0b1Jlc29sdXRpb24odGhpcy5wLmF1dG9SZXNvbHV0aW9uLmVuYWJsZWQsIHRoaXMucC5hdXRvUmVzb2x1dGlvbi5jb2VmZmljaWVudCk7XHJcblxyXG4gICAgdGhpcy52aXN1YWwuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVWaWV3LmJpbmQodGhpcykpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIEZ1bGxTY3JlZW4ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLnZpZXcuZ2V0UGFyZW50Q29udGFpbmVyKCkub3duZXJEb2N1bWVudCwgdGhpcy5iaW5kcy5vblNjcmVlbk1vZGVDaGFuZ2VkKTtcclxuICAgIGRlbGV0ZSB0aGlzLmJvb2s7XHJcbiAgICBkZWxldGUgdGhpcy52aWV3O1xyXG4gICAgZGVsZXRlIHRoaXMudmlzdWFsO1xyXG4gIH1cclxuXHJcbiAgaW5pdExvYWRpbmdBbmltYXRpb24oKSB7XHJcbiAgICBjb25zdCBoYW5kbGVyID0gKCk9PiB7XHJcbiAgICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5ib29rLmdldFRvcFBhZ2VzKCk7XHJcbiAgICAgIGxldCB2aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIGZvcihsZXQgbiBvZiBwYWdlcykge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5ib29rLmdldFBhZ2VTdGF0ZShuKTtcclxuICAgICAgICB2aXNpYmxlID0gc3RhdGU9PT11bmRlZmluZWQgfHwgc3RhdGU9PT0nbG9hZGluZyc7XHJcbiAgICAgICAgaWYodmlzaWJsZSkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnd2lkTG9hZGluZycsIHtcclxuICAgICAgICB2aXNpYmxlXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHRoaXMuYm9vay5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmVBbmltYXRpb24nLCBoYW5kbGVyKTtcclxuICAgIHRoaXMuYm9vay5hZGRFdmVudExpc3RlbmVyKCdhZnRlckFuaW1hdGlvbicsIGhhbmRsZXIpO1xyXG4gICAgdGhpcy5ib29rLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRQYWdlJywgaGFuZGxlcik7XHJcbiAgICB0aGlzLmJvb2suYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkUGFnZScsIGhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlTmF2aWdhdGlvbihlbmFibGUpIHtcclxuICAgIHRoaXMubmF2aWdhdGlvbkNvbnRyb2xzID0gZW5hYmxlO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9jQ3RybCh0b2NDdHJsKSB7XHJcbiAgICB0aGlzLnRvY0N0cmwgPSB0b2NDdHJsO1xyXG4gICAgdGhpcy50b2NDdHJsLm9uQ2hhbmdlID0gdGhpcy51cGRhdGVWaWV3LmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIHNldFByaW50ZXIocHJpbnRlcikge1xyXG4gICAgdGhpcy5wcmludGVyID0gcHJpbnRlcjtcclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgc2V0U291bmRzKHNvdW5kcykge1xyXG4gICAgdGhpcy5zb3VuZHMgPSBzb3VuZHM7XHJcbiAgICBzb3VuZHMuc2
13345V0RW5hYmxlZCh0aGlzLmFjdGlvbnNbJ2NtZFNvdW5kcyddLmFjdGl2ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG5cclxuICBvblNjcmVlbk1vZGVDaGFuZ2VkKGUpIHtcclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY2FuWm9vbUluKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnN0YXRlLnNtYXJ0UGFuIHx8IE1hdGguYWJzKHRoaXMuYm9va1dhdGNoZXIuc2NhbGUtdGhpcy5wLnNjYWxlLm1heCk+dGhpcy5wLmVwcztcclxuICB9XHJcblxyXG4gIGNhblpvb21PdXQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuc3RhdGUuc21hcnRQYW4gfHwgTWF0aC5hYnModGhpcy5ib29rV2F0Y2hlci5zY2FsZS10aGlzLnAuc2NhbGUubWluKT50aGlzLnAuZXBzO1xyXG4gIH1cclxuXHJcbiAgY2FuRGVmYXVsdFpvb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zbWFydFBhbjtcclxuICB9XHJcblxyXG4gIHNldEJvb2tab29tKHNjYWxlKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICBpZih0aGlzLmJvb2tXYXRjaGVyLnNjYWxlPT09c2NhbGUpIHtcclxuICAgICAgICB0aGlzLmJvb2suc2V0Wm9vbShzY2FsZSwgdGhpcy5zdGF0ZS5zaW5nbGVQYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBjbWRab29tSW4oKSB7XHJcbiAgICBpZih0aGlzLnN0YXRlLnNtYXJ0UGFuKSB7XHJcbiAgICAgIHRoaXMuYm9va1dhdGNoZXIuc2NhbGUgPSBNYXRoLm1pbih0aGlzLnAuc2NhbGUubWF4LCB0aGlzLmJvb2tXYXRjaGVyLnNjYWxlK3RoaXMucC5zY2FsZS5kZWx0YSk7XHJcbiAgICAgIHRoaXMuc2V0Qm9va1pvb20odGhpcy5ib29rV2F0Y2hlci5zY2FsZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5vcmJpdC56b29tSW4oNi42KnRoaXMucC5zY2FsZS5kZWx0YS8wLjMyKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY21kWm9vbU91dCgpIHtcclxuICAgIGlmKHRoaXMuc3RhdGUuc21hcnRQYW4pIHtcclxuICAgICAgdGhpcy5ib29rV2F0Y2hlci5zY2FsZSA9IE1hdGgubWF4KHRoaXMucC5zY2FsZS5taW4sIHRoaXMuYm9va1dhdGNoZXIuc2NhbGUtdGhpcy5wLnNjYWxlLmRlbHRhKTtcclxuICAgICAgdGhpcy5zZXRCb29rWm9vbSh0aGlzLmJvb2tXYXRjaGVyLnNjYWxlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9yYml0Lnpvb21PdXQoNi42KnRoaXMucC5zY2FsZS5kZWx0YS8wLjMyKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY21kRGVmYXVsdFpvb20oKSB7XHJcbiAgICBpZih0aGlzLnN0YXRlLnNtYXJ0UGFuKSB7XHJcbiAgICAgIHRoaXMuYm9va1dhdGNoZXIuc2NhbGUgPSB0aGlzLnAuc2NhbGUuZGVmYXVsdDtcclxuICAgICAgdGhpcy5zZXRCb29rWm9vbSh0aGlzLmJvb2tXYXRjaGVyLnNjYWxlKTtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbWRUb2MoKSB7XHJcbiAgICBpZih0aGlzLnRvY0N0cmwpIHtcclxuICAgICAgdGhpcy50b2NDdHJsLnRvZ2xlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbWRGYXN0QmFja3dhcmQoKSB7XHJcbiAgICB0aGlzLnN0YXJ0RmxpcCh0aGlzLmJvb2suZmxpcExlZnQoNSkpO1xyXG4gIH1cclxuXHJcbiAgY21kQmFja3dhcmQoKSB7XHJcbiAgICBpZih0aGlzLnN0YXRlLnNpbmdsZVBhZ2UpIHtcclxuICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVTaWRlID0gKHRoaXMuZ2V0UGFnZSgpKzEpJTI7XHJcbiAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlU2lkZSkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUuYWN0aXZlU2lkZSA9IDA7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGFydEZsaXAodGhpcy5ib29rLmZsaXBMZWZ0KDEpKS50aGVuKChibG9jayk9PiB7XHJcbiAgICAgICAgICBpZihibG9jaykge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZVNpZGUgPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zdGFydEZsaXAodGhpcy5ib29rLmZsaXBMZWZ0KDEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNtZEJpZ0JhY2t3YXJkKCkge1xyXG4gICAgdGhpcy5jbWRCYWNrd2FyZCgpO1xyXG4gIH1cclxuXHJcbiAgY21kRm9yd2FyZCgpIHtcclxuICAgIGlmKHRoaXMuc3RhdGUuc2luZ2xlUGFnZSkge1xyXG4gICAgICB0aGlzLnN0YXRlLmFjdGl2ZVNpZGUgPSAodGhpcy5nZXRQYWdlKCkrMSklMjtcclxuICAgICAgaWYoIXRoaXMuc3RhdGUuYWN0aXZlU2lkZSkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUuYWN0aXZlU2lkZSA9IDE7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGFydEZsaXAodGhpcy5ib29rLmZsaXBSaWdodCgxKSkudGhlbigoYmxvY2spPT4ge1xyXG4gICAgICAgICAgaWYoYmxvY2spIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVTaWRlID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhcnRGbGlwKHRoaXMuYm9vay5mbGlwUmlnaHQoMSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY21kQmlnRm9yd2FyZCgpIHtcclxuICAgIHRoaXMuY21kRm9yd2FyZCgpO1xyXG4gIH1cclxuXHJcbiAgY21kRmFzdEZvcndhcmQoKSB7XHJcbiAgICB0aGlzLnN0YXJ0RmxpcCh0aGlzLmJvb2suZmxpcFJpZ2h0KDUpKTtcclxuICB9XHJcblxyXG4gIGNtZFNhdmUoKSB7XHJcbiAgICB3aW5kb3cub3Blbih0aGlzLnAuZG93bmxvYWRVUkwsICdfYmxhbmsnKTtcclxuICB9XHJcblxyXG4gIGNtZFByaW50KCkge1xyXG4gICAgdGhpcy5wcmludGVyLnByaW50KCk7XHJcbiAgfVxyXG5cclxuICBjbWRGdWxsU2NyZWVuKCkge1xyXG4gICAgaWYoIUZ1bGxTY3JlZW4uYWN0aXZhdGVkKCkpIHtcclxuICAgICAgRnVsbFNjcmVlbi5yZXF1ZXN0KHRoaXMudmlldy5nZXRQYXJlbnRDb250YWluZXIoKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgRnVsbFNjcmVlbi5jYW5jZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNtZFNtYXJ0UGFuKCkge1xyXG4gICAgdGhpcy5zdGF0ZS5zbWFydFBhbiA9ICF0aGlzLnN0YXRlLnNtYXJ0UGFuO1xyXG4gICAgaWYodGhpcy5zdGF0ZS5zbWFydFBhbikge1xyXG4gICAgICB0aGlzLm9yYml0Lm1pbkF6aW11dGhBbmdsZSA9IDA7XHJcbiAgICAgIHRoaXMub3JiaXQubWF4QXppbXV0aEFuZ2xlID0gMDtcclxuICAgICAgdGhpcy5vcmJpdC5taW5Qb2xhckFuZ2xlID0gMDtcclxuICAgIFx0dGhpcy5vcmJpdC5tYXhQb2xhckFuZ2xlID0gTWF0aC5QSS80O1xyXG4gICAgICB0aGlzLmJvb2tXYXRjaGVyLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMub3JiaXQubWluQXppbXV0aEFuZ2xlID0gLUluZmluaXR5O1xyXG4gICAgICB0aGlzLm9yYml0Lm1heEF6aW11dGhBbmdsZSA9IEluZmluaXR5O1xyXG4gICAgICB0aGlzLm9yYml0Lm1pblBvbGFyQW5nbGUgPSAwO1xyXG4gICAgXHR0aGlzLm9yYml0Lm1heFBvbGFyQW5nbGUgPSBNYXRoLlBJO1xyXG4gICAgICB0aGlzLmJvb2tXYXRjaGVyLmVuYWJsZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY21kU2luZ2xlUGFnZSgpIHtcclxuICAgIHRoaXMuc3RhdGUuc2luZ2xlUGFnZSA9ICF0aGlzLnN0YXRlLnNpbmdsZVBhZ2U7XHJcbiAgICB0aGlzLnNldEJvb2tab29tKHRoaXMuYm9va1dhdGNoZXIuc2NhbGUpO1xyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBjbWRTb3VuZHMoKSB7X
13345HJcbiAgICBpZih0aGlzLnNvdW5kcykge1xyXG4gICAgICB0aGlzLnNvdW5kcy50b2dsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBjbWRTdGF0cygpIHtcclxuICAgIHRoaXMuc3RhdGUuc3RhdHMgPSAhdGhpcy5zdGF0ZS5zdGF0cztcclxuICAgIGlmKHRoaXMuc3RhdGUuc3RhdHMpIHtcclxuICAgICAgJCh0aGlzLnZpZXcuZ2V0Q29udGFpbmVyKCkpLmFwcGVuZCh0aGlzLlN0YXRzLmRvbUVsZW1lbnQpO1xyXG4gICAgICB0aGlzLnZpc3VhbC5hZGRSZW5kZXJDYWxsYmFjayh0aGlzLmJpbmRzLnN0YXRzKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAkKHRoaXMudmlldy5nZXRDb250YWluZXIoKSkuZmluZCh0aGlzLlN0YXRzLmRvbUVsZW1lbnQpLnJlbW92ZSgpO1xyXG4gICAgICB0aGlzLnZpc3VhbC5yZW1vdmVSZW5kZXJDYWxsYmFjayh0aGlzLmJpbmRzLnN0YXRzKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY21kTGlnaHRpbmdVcCgpIHtcclxuICAgIHRoaXMuc3RhdGUubGlnaHRpbmcgPSBNYXRoLm1pbih0aGlzLnN0YXRlLmxpZ2h0aW5nK3RoaXMucC5saWdodGluZy5kZWx0YSwgdGhpcy5wLmxpZ2h0aW5nLm1heCk7XHJcbiAgICB0aGlzLnZpc3VhbC5zZXRFeHRyYUxpZ2h0aW5nKHRoaXMuc3RhdGUubGlnaHRpbmcpO1xyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBjbWRMaWdodGluZ0Rvd24oKSB7XHJcbiAgICB0aGlzLnN0YXRlLmxpZ2h0aW5nID0gTWF0aC5tYXgodGhpcy5zdGF0ZS5saWdodGluZy10aGlzLnAubGlnaHRpbmcuZGVsdGEsIHRoaXMucC5saWdodGluZy5taW4pO1xyXG4gICAgdGhpcy52aXN1YWwuc2V0RXh0cmFMaWdodGluZyh0aGlzLnN0YXRlLmxpZ2h0aW5nKTtcclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgZ29Ub1BhZ2UocGFnZSkge1xyXG4gICAgaWYodGhpcy5wLnJ0bCkge1xyXG4gICAgICBwYWdlID0gdGhpcy5ib29rLmdldFBhZ2VzKCktMS1wYWdlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFnZU51bSA9IE1hdGgubWF4KE1hdGgubWluKHBhZ2UsIHRoaXMuYm9vay5nZXRQYWdlcygpLTEpLDApO1xyXG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVTaWRlID0gKHBhZ2VOdW0rMSklMjtcclxuICAgIGxldCB0YXJnZXQgPSBNYXRoLm1heChNYXRoLm1pbihwYWdlLTErcGFnZSUyLCB0aGlzLmJvb2suZ2V0UGFnZXMoKS0xKSwwKSwgY3VycmVudCA9IHRoaXMuYm9vay5nZXRQYWdlKCksIGZsaXBzID0gW10sIGNvdnMgPSAwOztcclxuICAgIGlmKHRhcmdldCE9Y3VycmVudCkge1xyXG4gICAgICBpZihjdXJyZW50PT09MCkge1xyXG4gICAgICAgIGZsaXBzLnB1c2goMSk7XHJcbiAgICAgICAgY3VycmVudCs9MTtcclxuICAgICAgICArK2NvdnM7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihjdXJyZW50PT09dGhpcy5ib29rLmdldFBhZ2VzKCktMSkge1xyXG4gICAgICAgIGZsaXBzLnB1c2goLTEpO1xyXG4gICAgICAgIGN1cnJlbnQtPTI7XHJcbiAgICAgICAgKytjb3ZzO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBjdiA9IDA7XHJcbiAgICAgIGlmKHRhcmdldD09PTApIHtcclxuICAgICAgICBjdiA9IC0xO1xyXG4gICAgICAgIHRhcmdldCs9MTtcclxuICAgICAgICArK2NvdnM7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZih0YXJnZXQ9PT10aGlzLmJvb2suZ2V0UGFnZXMoKS0xKSB7XHJcbiAgICAgICAgY3YgPSAxO1xyXG4gICAgICAgIHRhcmdldC09MjtcclxuICAgICAgICArK2NvdnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYodGFyZ2V0LWN1cnJlbnQpIHtcclxuICAgICAgICBmbGlwcy5wdXNoKE1hdGguY2VpbCgodGFyZ2V0LWN1cnJlbnQpLzIpKTtcclxuICAgICAgfVxyXG4gICAgICBpZihjdikge1xyXG4gICAgICAgIGZsaXBzLnB1c2goY3YpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2V0Q2xiID0gKGZsLCB0aW1lLCBjbGIpPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICAgIGlmKGZsPDApIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnRGbGlwKHRoaXMuYm9vay5mbGlwTGVmdCgtZmwsIGNsYikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3RhcnRGbGlwKHRoaXMuYm9vay5mbGlwUmlnaHQoZmwsIGNsYikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgdGltZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmKGNvdnM9PT0yKSB7XHJcbiAgICAgIHNldENsYihmbGlwc1swXSwgMCwgKGJsb2NrLCBwcm9ncmVzcywgc3RhdGUpPT4ge1xyXG4gICAgICAgIGlmKHN0YXRlPT0nZmluaXNoJyAmJiBwcm9ncmVzcz09MSkge1xyXG4gICAgICAgICAgc2V0Q2xiKGZsaXBzW2ZsaXBzLmxlbmd0aC0xXSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgc2V0Q2xiKGZsaXBzWzFdLCA1MDApO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCB0aW1lID0gMDtcclxuICAgICAgZm9yKGxldCBmbCBvZiBmbGlwcykge1xyXG4gICAgICAgIHNldENsYihmbCwgdGltZSk7XHJcbiAgICAgICAgdGltZSs9NDAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydEZsaXAoZmxpcFJlcykge1xyXG4gICAgcmV0dXJuIGZsaXBSZXM/IGZsaXBSZXMudGhlbigoYmxvY2spPT4ge1xyXG4gICAgICBpZihibG9jaykge1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hBc3luYyh7XHJcbiAgICAgICAgICB0eXBlOiAnc3RhcnRGbGlwJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBibG9jaztcclxuICAgIH0pOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIGVuZEZsaXAoYmxvY2spIHtcclxuICAgIHRoaXMuZGlzcGF0Y2hBc3luYyh7XHJcbiAgICAgIHR5cGU6ICdlbmRGbGlwJ1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYmxvY2s7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlKCkge1xyXG4gICAgY29uc3QgcGFnZSA9IHRoaXMuYm9vay5nZXRQYWdlKCk7XHJcbiAgICByZXR1cm4gcGFnZT8gTWF0aC5taW4odGhpcy5ib29rLmdldFBhZ2UoKSt0aGlzLnN0YXRlLmFjdGl2ZVNpZGUsIHRoaXMuYm9vay5nZXRQYWdlcygpLTEpOiAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZUZvckdVSSgpIHtcclxuICAgIGxldCBuID0gKHRoaXMuc3RhdGUuc2luZ2xlUGFnZT8gdGhpcy5nZXRQYWdlKCk6IHRoaXMuYm9vay5nZXRQYWdlKCkpKzE7XHJcbiAgICBpZih0aGlzLnAucnRsKSB7XHJcbiAgICAgIG4gPSB0aGlzLmJvb2suZ2V0UGFnZXMoKS1uKzE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG4gIGlucFBhZ2UoZSwgZGF0YSkge1xyXG4gICAgdGhpcy5nb1RvUGFnZShkYXRhLTEpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVmlld0lmU3RhdGUoYmxvY2ssIHByb2dyZXNzLCBzdGF0ZSwgdHlwZSkge1xyXG4gICAgaWYoc3RhdGU9PT0naW5pdCcgfHwgc3RhdGU9PT0nZmluaXNoJykge1xyXG4gICAgICBzZXRUaW
133451lb3V0KHRoaXMudXBkYXRlVmlldy5iaW5kKHRoaXMpLCAxMDApO1xyXG4gICAgfVxyXG4gICAgaWYoc3RhdGU9PT0nZmluaXNoJykge1xyXG4gICAgICB0aGlzLmVuZEZsaXAoYmxvY2spO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNDbWRWaXNpYmxlKG5hbWUpIHtcclxuICAgIHJldHVybiAkKHRoaXMudmlzdWFsLmVsZW1lbnQpLndpZHRoKCk8dGhpcy5wLm5hcnJvd1ZpZXcud2lkdGg/ICh0aGlzLmFjdGlvbnNbbmFtZV0uZW5hYmxlZEluTmFycm93PT09dW5kZWZpbmVkPyB0aGlzLmFjdGlvbnNbbmFtZV0uZW5hYmxlZDogdGhpcy5hY3Rpb25zW25hbWVdLmVuYWJsZWRJbk5hcnJvdyk6IHRoaXMuYWN0aW9uc1tuYW1lXS5lbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVmlld1N0YXRlKCkge1xyXG4gICAgdGhpcy52aWV3U3RhdGUgPSB7XHJcbiAgICAgICdjbWRab29tSW4nOiB7XHJcbiAgICAgICAgZW5hYmxlOiB0aGlzLmNhblpvb21JbigpLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuaXNDbWRWaXNpYmxlKCdjbWRab29tSW4nKSxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRab29tT3V0Jzoge1xyXG4gICAgICAgIGVuYWJsZTogdGhpcy5jYW5ab29tT3V0KCksXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5pc0NtZFZpc2libGUoJ2NtZFpvb21PdXQnKSxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWREZWZhdWx0Wm9vbSc6IHtcclxuICAgICAgICBlbmFibGU6IHRoaXMuY2FuRGVmYXVsdFpvb20oKSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmlzQ21kVmlzaWJsZSgnY21kRGVmYXVsdFpvb20nKSxcclxuICAgICAgICBhY3RpdmU6IHRoaXMuY2FuRGVmYXVsdFpvb20oKSAmJiBNYXRoLmFicyh0aGlzLmJvb2tXYXRjaGVyLnNjYWxlLXRoaXMucC5zY2FsZS5kZWZhdWx0KTx0aGlzLnAuZXBzXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRUb2MnOiB7XHJcbiAgICAgICAgZW5hYmxlOiAhIXRoaXMudG9jQ3RybCxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmlzQ21kVmlzaWJsZSgnY21kVG9jJykgJiYgdGhpcy50b2NDdHJsLFxyXG4gICAgICAgIGFjdGl2ZTogdGhpcy50b2NDdHJsICYmIHRoaXMudG9jQ3RybC52aXNpYmxlXHJcbiAgICAgIH0sXHJcbiAgICAgICdpbnBQYWdlcyc6IHtcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmJvb2suZ2V0UGFnZXMoKVxyXG4gICAgICB9LFxyXG4gICAgICAnaW5wUGFnZSc6IHtcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZTogIXRoaXMuYm9vay5pc1Byb2Nlc3NpbmcoKSAmJiB0aGlzLm5hdmlnYXRpb25Db250cm9scyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5nZXRQYWdlRm9yR1VJKClcclxuICAgICAgfSxcclxuICAgICAgJ2NtZFNhdmUnOiB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuaXNDbWRWaXNpYmxlKCdjbWRTYXZlJykgJiYgISF0aGlzLnAuZG93bmxvYWRVUkwsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICAnY21kUHJpbnQnOiB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuaXNDbWRWaXNpYmxlKCdjbWRQcmludCcpICYmICEhdGhpcy5wcmludGVyLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgJ2NtZEZ1bGxTY3JlZW4nOiB7XHJcbiAgICAgICAgZW5hYmxlOiBGdWxsU2NyZWVuLmF2YWlsYWJsZSgpLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuaXNDbWRWaXNpYmxlKCdjbWRGdWxsU2NyZWVuJyksXHJcbiAgICAgICAgYWN0aXZlOiBGdWxsU2NyZWVuLmF2YWlsYWJsZSgpICYmIEZ1bGxTY3JlZW4uYWN0aXZhdGVkKClcclxuICAgICAgfSxcclxuICAgICAgJ3dpZFNldHRpbmdzJzoge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmlzQ21kVmlzaWJsZSgnd2lkU2V0dGluZ3MnKSxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRTbWFydFBhbic6IHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5pc0NtZFZpc2libGUoJ2NtZFNtYXJ0UGFuJyksXHJcbiAgICAgICAgYWN0aXZlOiB0aGlzLnN0YXRlLnNtYXJ0UGFuXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRTaW5nbGVQYWdlJzoge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmlzQ21kVmlzaWJsZSgnY21kU2luZ2xlUGFnZScpLFxyXG4gICAgICAgIGFjdGl2ZTogdGhpcy5zdGF0ZS5zaW5nbGVQYWdlXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRTb3VuZHMnOiB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6ICB0aGlzLmlzQ21kVmlzaWJsZSgnY21kU291bmRzJykgJiYgISF0aGlzLnNvdW5kcyxcclxuICAgICAgICBhY3RpdmU6ICEhdGhpcy5zb3VuZHMgJiYgdGhpcy5zb3VuZHMuZW5hYmxlZFxyXG4gICAgICB9LFxyXG4gICAgICAnY21kU3RhdHMnOiB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuaXNDbWRWaXNpYmxlKCdjbWRTdGF0cycpLFxyXG4gICAgICAgIGFjdGl2ZTogdGhpcy5zdGF0ZS5zdGF0c1xyXG4gICAgICB9LFxyXG4gICAgICAnY21kTGlnaHRpbmdVcCc6IHtcclxuICAgICAgICBlbmFibGU6IE1hdGguYWJzKHRoaXMuc3RhdGUubGlnaHRpbmctdGhpcy5wLmxpZ2h0aW5nLm1heCk+dGhpcy5wLmVwcyxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmlzQ21kVmlzaWJsZSgnY21kTGlnaHRpbmdVcCcpLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgJ2NtZExpZ2h0aW5nRG93bic6IHtcclxuICAgICAgICBlbmFibGU6IE1hdGguYWJzKHRoaXMuc3RhdGUubGlnaHRpbmctdGhpcy5wLmxpZ2h0aW5nLm1pbik+dGhpcy5wLmVwcyxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmlzQ21kVmlzaWJsZSgnY21kTGlnaHRpbmdEb3duJyksXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGxlZnQgPSB0aGlzLmJvb2suZ2V0TGVmdEZsaXBwaW5nKCksXHJcbiAgICAgICAgICByaWdodCA9IHRoaXMuYm9vay5nZXRSaWdodEZsaXBwaW5nKCk7XHJcbiAgICBjb25zdCBmbGlwcGVyc0VuYWJsZSA9IHtcclxuICAgICAgY21kRmFzdEJhY2t3YXJkOiAhIWxlZnQgJiYgdGhpcy5uYXZpZ2F0aW9uQ29udHJvbHMsXHJcbiAgICAgIGNtZEJhY2t3YXJkOiAhIWxlZnQgJiYgdGhpcy5uYXZpZ2F0aW9uQ29udHJvbHMsXHJcbiAgICAgIGNtZEJpZ0JhY2t3YXJkOiAhIWxlZnQgJiYgdGhpcy5uYXZpZ2F0aW9uQ29udHJvbHMsXHJcbiAgICAgIGNtZEZvcndhcmQ6ICEhcmlnaHQgJiYgdGhpcy5uYXZpZ2F0aW9uQ29udHJvbHMsXHJcbiAgICAgIGNtZEJpZ0ZvcndhcmQ6ICEhcmlnaHQgJiYgdGhpcy5uYXZpZ2F0aW9uQ29udHJvbHMsXHJcbiAgICAgIGNtZEZhc3RGb3J3YXJkOiAhIXJpZ2h0ICYmIHRoaXMubmF2aWdhdGlvbkNvbnRyb2xzXHJcbiAgICB9O1xyXG4gICAgZm9yKGxldCBuYW1lIG9mIE9iamVjdC5rZXlzKGZsaXBwZXJzRW5hYmxlKSkge1xyXG4gICAgICB0aGlzLnZpZXdTdGF0ZVtuYW1lXSA9IHtcclxuICAgICAgICBlbmFibGU6IGZsaXBwZXJzRW5hYmxlW25hbWVdLFxyXG4gICAgICAgI
13345HZpc2libGU6IHRoaXMuaXNDbWRWaXNpYmxlKG5hbWUpLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWaWV3KCkge1xyXG4gICAgaWYodGhpcy52aWV3KSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmlld1N0YXRlKCk7XHJcbiAgICAgIGZvcihsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLnZpZXdTdGF0ZSkpIHtcclxuICAgICAgICB0aGlzLnZpZXcuc2V0U3RhdGUobmFtZSwgdGhpcy52aWV3U3RhdGVbbmFtZV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBY3Rpb25zKCkge1xyXG4gICAgY29uc3QgaXNTd2lwcGluZyA9IChuYW1lKT0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuYWN0aW9ucy50b3VjaENtZFN3aXBlLmVuYWJsZWQgJiYgdGhpcy5hY3Rpb25zLnRvdWNoQ21kU3dpcGUuY29kZT09PXRoaXMuYWN0aW9uc1tuYW1lXS5jb2RlICYmIHRoaXMuc3RhdGUuc21hcnRQYW4gJiYgdGhpcy5ib29rV2F0Y2hlci5zY2FsZTw9MTtcclxuICAgIH0sIGNtZHMgPSB7fTtcclxuXHJcbiAgICBmb3IobGV0IG5hbWUgaW4gdGhpcykge1xyXG4gICAgICBpZihuYW1lLmluZGV4T2YoJ2NtZCcpPT09MCkge1xyXG4gICAgICAgIGNtZHNbbmFtZV0gPSB7XHJcbiAgICAgICAgICBhY3RpdmF0ZTogKC4uLmFyZ3MpPT4ge1xyXG4gICAgICAgICAgICBpZih0aGlzLnZpZXdTdGF0ZSAmJiB0aGlzLnZpZXdTdGF0ZVtuYW1lXS5lbmFibGUpIHtcclxuICAgICAgICAgICAgICB0aGlzW25hbWVdKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLmNtZHMsXHJcbiAgICAgIGNtZFBhbkxlZnQ6IHtcclxuICAgICAgICBhY3RpdmF0ZTogKGUpPT4gdGhpcy5vcmJpdC5hY3Rpb25zLnBhbihlLCB7XHJcbiAgICAgICAgICBzdGF0ZTogJ21vdmUnLFxyXG4gICAgICAgICAgZHg6IC10aGlzLnAucGFuLnNwZWVkLFxyXG4gICAgICAgICAgZHk6IDBcclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRQYW5SaWdodDoge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoZSk9PiB0aGlzLm9yYml0LmFjdGlvbnMucGFuKGUsIHtcclxuICAgICAgICAgIHN0YXRlOiAnbW92ZScsXHJcbiAgICAgICAgICBkeDogdGhpcy5wLnBhbi5zcGVlZCxcclxuICAgICAgICAgIGR5OiAwXHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgY21kUGFuVXA6IHtcclxuICAgICAgICBhY3RpdmF0ZTogKGUpPT4gdGhpcy5vcmJpdC5hY3Rpb25zLnBhbihlLCB7XHJcbiAgICAgICAgICBzdGF0ZTogJ21vdmUnLFxyXG4gICAgICAgICAgZHg6IDAsXHJcbiAgICAgICAgICBkeTogLXRoaXMucC5wYW4uc3BlZWRcclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRQYW5Eb3duOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IChlKT0+IHRoaXMub3JiaXQuYWN0aW9ucy5wYW4oZSwge1xyXG4gICAgICAgICAgc3RhdGU6ICdtb3ZlJyxcclxuICAgICAgICAgIGR4OiAwLFxyXG4gICAgICAgICAgZHk6IHRoaXMucC5wYW4uc3BlZWRcclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICBtb3VzZUNtZFJvdGF0ZToge1xyXG4gICAgICAgIGFjdGl2YXRlOiB0aGlzLm9yYml0LmFjdGlvbnMucm90YXRlXHJcbiAgICAgIH0sXHJcbiAgICAgIG1vdXNlQ21kRHJhZ1pvb206IHtcclxuICAgICAgICBhY3RpdmF0ZTogKGUsIGRhdGEpPT4ge1xyXG4gICAgICAgICAgaWYoZGF0YS5keT4wKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY21kWm9vbU91dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZihkYXRhLmR5PDApIHtcclxuICAgICAgICAgICAgdGhpcy5jbWRab29tSW4oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG1vdXNlQ21kUGFuOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IHRoaXMub3JiaXQuYWN0aW9ucy5wYW5cclxuICAgICAgfSxcclxuICAgICAgbW91c2VDbWRXaGVlbFpvb206IHtcclxuICAgICAgICBhY3RpdmF0ZTogKGUpPT4ge1xyXG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgaWYoZS5kZWx0YVk8MCkge1xyXG4gICAgICAgICAgICB0aGlzLmNtZFpvb21PdXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYoZS5kZWx0YVk+MCkge1xyXG4gICAgICAgICAgICB0aGlzLmNtZFpvb21JbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdG91Y2hDbWRSb3RhdGU6IHtcclxuICAgICAgICBhY3RpdmF0ZTogKGUsIGRhdGEpPT4ge1xyXG4gICAgICAgICAgaWYoIWlzU3dpcHBpbmcoJ3RvdWNoQ21kUm90YXRlJykpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB0aGlzLm9yYml0LmFjdGlvbnMucm90YXRlKGUsIGRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdG91Y2hDbWRab29tOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IChlLCBkYXRhKT0+IHtcclxuICAgICAgICAgIGlmKCFpc1N3aXBwaW5nKCd0b3VjaENtZFpvb20nKSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGlmKGRhdGEuZHk+MCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY21kWm9vbU91dCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoZGF0YS5keTwwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jbWRab29tSW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgdG91Y2hDbWRQYW46IHtcclxuICAgICAgICBhY3RpdmF0ZTogKGUsIGRhdGEpPT4ge1xyXG4gICAgICAgICAgaWYoIWlzU3dpcHBpbmcoJ3RvdWNoQ21kUGFuJykpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB0aGlzLm9yYml0LmFjdGlvbnMucGFuKGUsIGRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgI
13345H1cclxuICAgICAgfSxcclxuICAgICAgdG91Y2hDbWRTd2lwZToge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoZSwgZGF0YSk9PiB7XHJcbiAgICAgICAgICBpZihpc1N3aXBwaW5nKCd0b3VjaENtZFN3aXBlJykpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpZihkYXRhLnN0YXRlPT09J3N0YXJ0Jykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRvdWNoID0gKGUudG91Y2hlcyB8fCBlLm9yaWdpbmFsRXZlbnQudG91Y2hlcylbdGhpcy5hY3Rpb25zLnRvdWNoQ21kU3dpcGUuY29kZS0xXTtcclxuICAgICAgICAgICAgICB0aGlzLnN3aXBlRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgeDA6IHRvdWNoLnBhZ2VYLFxyXG4gICAgICAgICAgICAgICAgeTA6IHRvdWNoLnBhZ2VZLFxyXG4gICAgICAgICAgICAgICAgeDogdG91Y2gucGFnZVgsXHJcbiAgICAgICAgICAgICAgICB5OiB0b3VjaC5wYWdlWVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihkYXRhLnN0YXRlPT09J21vdmUnKSB7XHJcbiAgICAgICAgICAgICAgaWYoIXRoaXMuc3dpcGVEYXRhLmhhbmRsZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3dpcGVEYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi50aGlzLnN3aXBlRGF0YSxcclxuICAgICAgICAgICAgICAgICAgeDogdGhpcy5zd2lwZURhdGEueCtkYXRhLmR4LFxyXG4gICAgICAgICAgICAgICAgICB5OiB0aGlzLnN3aXBlRGF0YS55K2RhdGEuZHlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmKE1hdGguYWJzKHRoaXMuc3dpcGVEYXRhLngwLXRoaXMuc3dpcGVEYXRhLngpPjEwMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN3aXBlRGF0YS54MD50aGlzLnN3aXBlRGF0YS54PyB0aGlzLmNtZEZvcndhcmQoKTogdGhpcy5jbWRCYWNrd2FyZCgpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN3aXBlRGF0YS5oYW5kbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3dpcGVEYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB3aWRTZXR0aW5nczoge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoKT0+IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgYmluZEFjdGlvbnMoKSB7XHJcbiAgICB0aGlzLmVUb0EgPSBuZXcgRXZlbnRzVG9BY3Rpb25zKCQodGhpcy52aXN1YWwuZWxlbWVudCkpO1xyXG4gICAgdGhpcy5lVG9BLmFkZEFjdGlvbigoZSk9PiBlLnByZXZlbnREZWZhdWx0KCksICdjb250ZXh0bWVudScsIEV2ZW50c1RvQWN0aW9ucy5tb3VzZUJ1dHRvbnMuUmlnaHQsIDApO1xyXG5cclxuICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuZ2V0QWN0aW9ucygpO1xyXG4gICAgZm9yKGxldCBuYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuYWN0aW9ucykpIHtcclxuICAgICAgY29uc3QgYWN0aW9uID0ge1xyXG4gICAgICAgIC4uLnRoaXMuYWN0aW9uc1tuYW1lXSxcclxuICAgICAgICAuLi50aGlzLnAuYWN0aW9uc1tuYW1lXVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmFjdGlvbnNbbmFtZV0gPSBhY3Rpb247XHJcbiAgICAgIGlmKGFjdGlvbi5lbmFibGVkKSB7XHJcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBhY3Rpb24uZmxhZ3MgfHwgMDtcclxuICAgICAgICBpZihhY3Rpb24udHlwZSkge1xyXG4gICAgICAgICAgdGhpcy5lVG9BLmFkZEFjdGlvbihhY3Rpb24uYWN0aXZhdGUsIGFjdGlvbi50eXBlLCBhY3Rpb24uY29kZSwgZmxhZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGFjdGlvbi5jb2RlIT09dW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmVUb0EuYWRkQWN0aW9uKGFjdGlvbi5hY3RpdmF0ZSwgJ2tleWRvd24nLCBhY3Rpb24uY29kZSwgZmxhZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIHByZXBhcmVQcm9wcyhwcm9wcykge1xyXG4gICAgcmV0dXJuIEJvb2tDb250cm9sbGVyLmNhbGNQcm9wcyhCb29rQ29udHJvbGxlci5tZXJnZVByb3BzKGJvb2tDb250cm9sbGVyUHJvcHMoKSwgcHJvcHMpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXRBY3Rpb25zKHByb3BzLCBhY3Rpb25zKSB7XHJcbiAgICBmb3IobGV0IG5hbWUgb2YgT2JqZWN0LmtleXMoYWN0aW9ucyB8fCB7fSkpIHtcclxuICAgICAgcHJvcHMuYWN0aW9uc1tuYW1lXSA9IHtcclxuICAgICAgICAuLi5wcm9wcy5hY3Rpb25zW25hbWVdLFxyXG4gICAgICAgIC4uLmFjdGlvbnNbbmFtZV1cclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBtZXJnZVByb3BzKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgIHNlY29uZCA9IHNlY29uZCB8fCB7fTtcclxuICAgIGZ1bmN0aW9uIG1lcmdlKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgICAgc2Vjb25kID0gc2Vjb25kIHx8IHt9O1xyXG4gICAgICBjb25zdCBwcm9wcyA9IHtcclxuICAgICAgICAuLi5maXJzdCxcclxuICAgICAgICAuLi5zZWNvbmRcclxuICAgICAgfTtcclxuICAgICAgZm9yKGxldCBuYW1lIG9mIE9iamVjdC5rZXlzKGZpcnN0KSkge1xyXG4gICAgICAgIGlmKHR5cGVvZiBmaXJzdFtuYW1lXT09PSdvYmplY3QnKSB7XHJcbiAgICAgICAgICBwcm9wc1tuYW1lXSA9IG1lcmdlKGZpcnN0W25hbWVdLCBzZWNvbmRbbmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcHJvcHM7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcm9wcyA9IG1lcmdlKGZpcnN0LCBzZWNvbmQpO1xyXG4gICAgQm9va0NvbnRyb2xsZXIuc2V0QWN0aW9ucyhwcm9wcywgZmlyc3QuYWN0aW9ucyk7XHJcbiAgICBCb29rQ29udHJvbGxlci5zZXRBY3Rpb25zKHByb3BzLCBzZWNvbmQuYWN0aW9ucyk7XHJcbiAgICByZXR1cm4gcHJvcHM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2FsY1Byb3BzKHByb3BzKSB7XHJcbiAgICBwcm9wcy5zY2FsZS5kZWx0YSA9IChwcm9wcy5zY2FsZS5tYXgtcHJvcHMuc2NhbGUubWluKS9wcm9wcy5zY2FsZS5sZXZlbHM7XHJcbiAgICBwcm9wcy5saWdodGluZy5kZWx0YSA9IChwcm9wcy5saWdodGluZy5tYXgtcHJvcHMubGlnaHRpbmcubWluKS9wcm9wcy5saWdodGluZy5sZXZlbHM7XHJcbiAgICByZXR1cm4gcHJvcHM7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL0Jvb2tDb250cm9sbGVyLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvb2tQcmludGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgYm9vaywgc3R5bGVTaGVldCkge1xyXG4gICAgdGhpcy5ib29rID0gYm9vaztcclxuICAgIHRoaXMuc3R5bGVTaGVldCA9IHN0eWxlU2hlZXQ7XHJcbiAgICB0aGlzLnduZCA9IGNvbnRleHQud25kO1xyXG4gICAgdGhpcy5kb2MgPSBjb250ZXh0LmRvYztcclxuICAgIHRoaXMucGFnZUNhbGxiYWNrID0gYm9vay5nZXRQYWdlQ2FsbGJhY2soKTtcclxuICAgIGNvbnN0IHRlc3QgPSB0aGlzLnBhZ2VDYWxsYmFjaygwKTtcclxuICAgIHRoaXMudHlwZSA9IHRlc3QudHlwZTtcclxuICAgIGlmKHRoaXMudHlwZT09PSdwZGYnKSB7XHJcbiAgICAgIHRoaXMucGRmU3JjID0gdGVzdC5zcmMuc3JjO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5jYW5jZWxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYodGhpcy5mcmFtZSkge1xyXG4gICAgICB0aGlzLmZyYW1lLnJlbW92ZSgpO1xyXG4gICAgICBkZWxldGUgdGhpcy5mcmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaW50KCkge1xyXG4gICAgZGVsZXRlIHRoaXMuY2FuY2VsZWQ7XHJcbiAgICBpZih0aGlzLnR5cGU9PT0ncGRmJykge1xyXG4gICAgICBsZXQgcHJpbnRXbmQsIGNhbGxNYW51YWxseSA9IGZhbHNlO1xyXG4gICAgICBpZih0aGlzLnVzZUlGcmFtZSgpKSB7XHJcbiAgICAgICAgY2FsbE1hbnVhbGx5ID0gISF0aGlzLmZyYW1lO1xyXG4gICAgICAgIGlmKCF0aGlzLmZyYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLmZyYW1lID0gJCgnPGlmcmFtZSBzcmM9XCInK3RoaXMucGRmU3JjKydcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9pZnJhbWU+JykuYXBwZW5kVG8odGhpcy5kb2MuYm9keSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgI
13345HByaW50V25kID0gdGhpcy5mcmFtZVswXS5jb250ZW50V2luZG93O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHByaW50V25kID0gdGhpcy53bmQub3Blbih0aGlzLnBkZlNyYyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYoY2FsbE1hbnVhbGx5KSB7XHJcbiAgICAgICAgcHJpbnRXbmQucHJpbnQoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAkKHByaW50V25kKS5vbignbG9hZCcsICgpPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcHJpbnRXbmQucHJpbnQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQ29udGVudCgpLlxyXG4gICAgICAgIHRoZW4oKGNvbnRlbnQpPT4ge1xyXG4gICAgICAgICAgY29uc3QgcHJpbnRXbmQgPSB0aGlzLnduZC5vcGVuKCksXHJcbiAgICAgICAgICBwcmludERvYyA9IHByaW50V25kLmRvY3VtZW50LFxyXG4gICAgICAgICAgaHRtbCA9IGBcclxuICAgICAgICAgICAgPCFET0NUWVBFIGh0bWw+XHJcbiAgICAgICAgICAgIDxodG1sPlxyXG4gICAgICAgICAgICAgIDxoZWFkPlxyXG4gICAgICAgICAgICAgICAgPG1ldGEgY2hhcnNldD1cInV0Zi04XCI+XHJcbiAgICAgICAgICAgICAgICA8dGl0bGU+M0QgRmxpcEJvb2sgLSBQcmludGluZzwvdGl0bGU+XHJcbiAgICAgICAgICAgICAgICAke2NvbnRlbnQuaGVhZH1cclxuICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPlxyXG4gICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcmludERvY3VtZW50KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wcmludCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGluaXQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChwcmludERvY3VtZW50LCAxMDApO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L3NjcmlwdD5cclxuICAgICAgICAgICAgICA8L2hlYWQ+XHJcbiAgICAgICAgICAgICAgPGJvZHkgb25sb2FkPVwiaW5pdCgpXCI+XHJcbiAgICAgICAgICAgICAgICAke2NvbnRlbnQuYm9keX1cclxuICAgICAgICAgICAgICA8L2JvZHk+XHJcbiAgICAgICAgICAgIDwvaHRtbD5cclxuICAgICAgICAgIGA7XHJcbiAgICAgICAgICBwcmludERvYy5vcGVuKCk7XHJcbiAgICAgICAgICBwcmludERvYy53cml0ZShodG1sKTtcclxuICAgICAgICAgIHByaW50RG9jLmNsb3NlKCk7XHJcbiAgICAgICAgfSkuXHJcbiAgICAgICAgY2F0Y2goKGUpPT4gY29uc29sZS53YXJuKCczRCBGbGlwQm9vayAtIFByaW50aW5nIHdhcyBjYW5jZWxlZCcpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2dyZXNzKHYpIHtcclxuICAgIGlmKHRoaXMuY2FuY2VsZWQpIHtcclxuICAgICAgdGhyb3cgJ0NhbmNlbCBQcmludGluZyc7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLm9uUHJvZ3Jlc3MpIHtcclxuICAgICAgdGhpcy5vblByb2dyZXNzKE1hdGguZmxvb3IodioxMDApKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbmRlckNvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBwYWdlcyA9IHRoaXMuYm9vay5nZXRQYWdlcygpLCBoZWFkID0gbmV3IFNldCgpLCBib2R5ID0gW107XHJcbiAgICBsZXQgZG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgZm9yKGxldCBwYWdlPTA7IHBhZ2U8cGFnZXM7ICsrcGFnZSkge1xyXG4gICAgICBjb25zdCBpbmZvID0gdGhpcy5wYWdlQ2FsbGJhY2socGFnZSk7XHJcbiAgICAgIGlmKGluZm8udHlwZT09PSdpbWFnZScpIHtcclxuICAgICAgICBkb25lID0gZG9uZS50aGVuKCgpPT4ge1xyXG4gICAgICAgICAgdGhpcy5wcm9ncmVzcyhwYWdlL3BhZ2VzKTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckltYWdlKGhlYWQsIGJvZHksIGluZm8uc3JjKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKGluZm8udHlwZT09PSdodG1sJykge1xyXG4gICAgICAgIGRvbmUgPSBkb25lLnRoZW4oKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLnByb2dyZXNzKHBhZ2UvcGFnZXMpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySHRtbChoZWFkLCBib2R5LCBpbmZvLnNyYyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkb25lLnRoZW4oKCk9PiB7XHJcbiAgICAgIHRoaXMucHJvZ3Jlc3MoMSk7XHJcbiAgICAgIHJldHVybiB7aGVhZDogdGhpcy5yZW5kZXJIZWFkKGhlYWQpLCBib2R5OiBib2R5LmpvaW4oJ1xcbicpfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgd3JhcChjb250ZW50KSB7XHJcbiAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJmYjNkLXByaW50ZXItcGFnZVwiPiR7Y29udGVudH08L2Rpdj5gO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVySW1hZ2UoaGVhZCwgYm9keSwgc3JjKSB7XHJcbiAgICBib2R5LnB1c2goQm9va1ByaW50ZXIud3JhcChgPGltZyBzcmM9XCIke3NyY31cIiAvPmApKTtcclxuICB9XHJcblxyXG4gIHJlbmRlckh0bWwoaGVhZCwgYm9keSwgc3JjKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk9PiB7XHJcbiAgICAgICQuZ2V0KHNyYywgKGh0bWwpPT4ge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gaHRtbC5tYXRjaCgvPGxpbmsuKj8+L2lnKSB8fCBbXTtcclxuICAgICAgICBmb3IobGV0IGxpbmsgb2YgbGlua3MpIHtcclxuICAgICAgICAgIGlmKGxpbmsubWF0Y2goL3N0eWxlc2hlZXQvaSkpIHtcclxuICAgICAgICAgICAgY29uc3QgaHJlZiA9IGxpbmsubWF0Y2goL2hyZWZcXHMqPVxccypbJ1wiXSguKilbJ1wiXS9pKTtcclxuICAgICAgICAgICAgaWYoaHJlZikge1xyXG4gICAgICAgICAgICAgIGhlYWQuYWRkKGhyZWZbMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBodG1sLm1hdGNoKC88Ym9keS4qPz4oW1xcU1xcc10qKTxcXC9ib2R5Pi9pKTtcclxuICAgICAgICBpZihjb250ZW50KSB7XHJcbiAgICAgICAgICBib2R5LnB1c2goQm9va1ByaW50ZXIud3JhcChjb250ZW50WzFdKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgI
13345HJlc29sdmUoKTtcclxuICAgICAgfSkuZmFpbCgoZSk9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbmRlckhlYWQoaGVhZCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IFtdO1xyXG4gICAgaGVhZC5mb3JFYWNoKChrKT0+IGNvbnRlbnQucHVzaChgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIke2t9XCI+YCkpO1xyXG4gICAgY29udGVudC5wdXNoKHRoaXMuc3R5bGVTaGVldD8gYDxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiBocmVmPVwiJHt0aGlzLnN0eWxlU2hlZXR9XCI+YDogQm9va1ByaW50ZXIuZGVmYXVsdFN0eWxlU2hlZXQoKSk7XHJcbiAgICByZXR1cm4gY29udGVudC5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIHVzZUlGcmFtZSgpIHtcclxuICAgIGNvbnN0IGlzQ2hyb21pdW0gPSB0aGlzLnduZC5jaHJvbWUsXHJcbiAgICAgIHdpbk5hdiA9IHRoaXMud25kLm5hdmlnYXRvcixcclxuICAgICAgdmVuZG9yTmFtZSA9IHdpbk5hdi52ZW5kb3IsXHJcbiAgICAgIGlzSUVlZGdlID0gd2luTmF2LnVzZXJBZ2VudC5pbmRleE9mKFwiRWRnZVwiKT4tMSxcclxuICAgICAgaXNJT1NDaHJvbWUgPSB3aW5OYXYudXNlckFnZW50Lm1hdGNoKFwiQ3JpT1NcIik7XHJcbiAgICBsZXQgdXNlO1xyXG4gICAgaWYoaXNJT1NDaHJvbWUpe1xyXG4gICAgICB1c2UgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmKGlzQ2hyb21pdW0gJiYgdmVuZG9yTmFtZT09PSdHb29nbGUgSW5jLicgJiYgIWlzSUVlZGdlKSB7XHJcbiAgICAgIHVzZSA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1c2UgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2U7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGVmYXVsdFN0eWxlU2hlZXQoKSB7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgICA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XHJcbiAgICAgICAgYm9keSB7XHJcbiAgICAgICAgICBtYXJnaW46IDA7XHJcbiAgICAgICAgICBwYWRkaW5nOiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICAuZmIzZC1wcmludGVyLXBhZ2Uge1xyXG4gICAgICAgICAgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzO1xyXG4gICAgICAgIH1cclxuICAgICAgPC9zdHlsZT5cclxuICAgIGA7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL0Jvb2tQcmludGVyLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IFZpZXcgZnJvbSAnVmlldyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb29rVmlldyBleHRlbmRzIFZpZXcge1xyXG5cclxuICBzdGF0aWMgUEFHRV9IQU5ETEVSX0RFTEFZID0gMTAwMDtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBvbkxvYWQsIHRlbXBsYXRlLCBoYW5kbGVyKSB7XHJcbiAgICBzdXBlcihjb250YWluZXIsIG9uTG9hZCwgdGVtcGxhdGUsIGhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgaW5pdFZpZXcoKSB7XHJcbiAgICB0aGlzLnZpZXcgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcudmlldycpO1xyXG4gICAgdGhpcy5ib29rbWFya3NWaWV3ID0gdGhpcy5jb250YWluZXIuZmluZCgnLndpZEJvb2ttYXJrcycpO1xyXG4gICAgdGhpcy50aHVtYm5haWxzVmlldyA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy53aWRUaHVtYm5haWxzJyk7XHJcbiAgICB0aGlzLnNlYXJjaFZpZXcgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcud2lkU2VhcmNoJyk7XHJcbiAgfVxyXG5cclxuICBnZXRIYW5kbGVycyhpZCkge1xyXG4gICAgbGV0IGhhbmRsZXJzO1xyXG4gICAgaWYoaWQ9PT0naW5wUGFnZScpIHtcclxuICAgICAgaGFuZGxlcnMgPSBbe1xyXG4gICAgICAgIGlucFBhZ2U6IChlLCBkYXRhKT0+IHRoaXMuY2FsbExhdGVyKHN1cGVyLmdldEhhbmRsZXJzKGlkKSwgaWQsIGUsIGRhdGEsIEJvb2tWaWV3LlBBR0VfSEFORExFUl9ERUxBWSlcclxuICAgICAgfV07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaGFuZGxlcnMgPSBzdXBlci5nZXRIYW5kbGVycyhpZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGFuZGxlcnM7XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1TdGF0ZUNoYW5nZWQoaWQsIHN0YXRlKSB7XHJcbiAgICBpZihpZD09PSdjbWRGdWxsU2NyZWVuJykge1xyXG4gICAgICBpZihzdGF0ZS5hY3RpdmUpIHtcclxuICAgICAgICB0aGlzLnBhcmVudENvbnRhaW5lci5hZGRDbGFzcygnZnVsbHNjcmVlbicpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFyZW50Q29udGFpbmVyLnJlbW92ZUNsYXNzKCdmdWxsc2NyZWVuJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFZpZXcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy52aWV3O1xyXG4gIH1cclxuXHJcbiAgZ2V0Qm9va21hcmtzVmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLmJvb2ttYXJrc1ZpZXc7XHJcbiAgfVxyXG5cclxuICBnZXRUaHVtYm5haWxzVmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLnRodW1ibmFpbHNWaWV3O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoVmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLnNlYXJjaFZpZXc7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtcygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGlua3MoKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAnY21kWm9vbUluJyxcclxuICAgICAgJ2NtZFpvb21PdXQnLFxyXG4gICAgICAnY21kRGVmYXVsdFpvb20nLFxyXG4gICAgICAnY21kVG9jJyxcclxuICAgICAgJ2NtZEZhc3RCYWNrd2FyZCcsXHJcbiAgICAgICdjbWRCYWNrd2FyZCcsXHJcbiAgICAgICdjbWRCaWdCYWNrd2FyZCcsXHJcbiAgICAgICdjbWRGb3J3YXJkJyxcclxuICAgICAgJ2NtZEJpZ0ZvcndhcmQnLFxyXG4gICAgICAnY21kRmFzdEZvcndhcmQnLFxyXG4gICAgICAnY21kU2F2ZScsXHJcbiAgICAgICdjbWRQcmludCcsXHJcbiAgICAgICdjbWRGdWxsU2NyZWVuJyxcclxuICAgICAgJ2NtZFNtYXJ0UGFuJyxcclxuICAgICAgJ2NtZFNpbmdsZVBhZ2UnLFxyXG4gICAgICAnY21kU291bmRzJyxcclxuICAgICAgJ2NtZFN0YXRzJyxcclxuICAgICAgJ2NtZExpZ2h0aW5nVXAnLFxyXG4gICAgICAnY21kTGlnaHRpbmdEb3duJyxcclxuICAgICAgJ2NtZENsb3NlVG9jJyxcclxuICAgICAgJ2NtZEJvb2ttYXJrcycsXHJcbiAgICAgICdjbWRTZWFyY2gnLFxyXG4gICAgICAnY21kVGh1bWJuYWlscydcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXRXaWRnZXRzKCkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ3dpZExvYWRpbmdQcm9ncmVzcycsXHJcbiAgICAgICd3aWRGbG9hdFduZCcsXHJcbiAgICAgICd3aWRUb2NNZW51JyxcclxuICAgICAgJ3dpZEJvb2ttYXJrcycsXHJcbiAgICAgICd3aWRUaHVtYm5haWxzJyxcclxuICAgICAgJ3dpZFNlYXJjaCcsXHJcbiAgICAgICd3aWRTZXR0aW5ncycsXHJcbiAgICAgICd3aWRMb2FkaW5nJ1xyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGdldElu
13345cHV0cygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICdpbnBQYWdlJyxcclxuICAgICAgJ2lucFBhZ2VzJ1xyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGdldFRleHRzKCkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ3R4dExvYWRpbmdQcm9ncmVzcydcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGh0bWw6ICd0ZW1wbGF0ZXMvZGVmYXVsdC1ib29rLXZpZXcuaHRtbCcsXHJcbiAgICAgIHN0eWxlczogW1xyXG4gICAgICAgICdjc3MvYmxhY2stYm9vay12aWV3LmNzcydcclxuICAgICAgXSxcclxuICAgICAgbGlua3M6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICByZWw6ICdzdHlsZXNoZWV0JyxcclxuICAgICAgICAgIGhyZWY6ICdjc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MnXHJcbiAgICAgICAgfVxyXG4gICAgICBdLFxyXG4gICAgICBzY3JpcHQ6ICdqcy9kZWZhdWx0LWJvb2stdmlldy5qcydcclxuICAgIH07XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL0Jvb2tWaWV3LmpzIiwiaW1wb3J0IEJvb2tQcm9wc0J1aWxkZXIgZnJvbSAnLi9Cb29rUHJvcHNCdWlsZGVyJztcclxuaW1wb3J0IEltYWdlRmFjdG9yeSBmcm9tICdJbWFnZUZhY3RvcnknO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xiQm9va1Byb3BzQnVpbGRlciBleHRlbmRzIEJvb2tQcm9wc0J1aWxkZXIge1xyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHBhZ2VDYWxsYmFjaywgcGFnZXMsIG9uUmVhZHkpIHtcclxuICAgIHN1cGVyKG9uUmVhZHkpO1xyXG4gICAgdGhpcy5jYWxjU2hlZXRzKHBhZ2VzKTtcclxuICAgIHRoaXMucGFnZUNhbGxiYWNrID0gcGFnZUNhbGxiYWNrO1xyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgcGFnZUNhbGxiYWNrOiBwYWdlQ2FsbGJhY2suYmluZCh0aGlzKVxyXG4gICAgfTtcclxuICAgIHRoaXMuaW1hZ2VGYWN0b3J5ID0gbmV3IEltYWdlRmFjdG9yeShjb250ZXh0KTtcclxuXHJcbiAgICBpZihwYWdlcz4wKSB7XHJcbiAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLmltYWdlRmFjdG9yeS5idWlsZChwYWdlQ2FsbGJhY2soMCksIDAsIHRoaXMuZGVmYXVsdHMuc2hlZXQud2lkdGhUZXhlbHMsIHRoaXMuZGVmYXVsdHMuc2hlZXQuaGVpZ2h0VGV4ZWxzLCB0aGlzLmRlZmF1bHRzLnNoZWV0LmNvbG9yKTtcclxuICAgICAgdGVzdC5vbkxvYWQgPSAoKT0+IHtcclxuICAgICAgICB0aGlzLmNhbGNQcm9wcyh0ZXN0LndpZHR
13345oLCB0ZXN0LmhlaWdodCk7XHJcbiAgICAgICAgdGVzdC5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy5yZWFkeSgpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucHJvcHMgPSB0aGlzLmRlZmF1bHRzO1xyXG4gICAgICB0aGlzLnJlYWR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL0NsYkJvb2tQcm9wc0J1aWxkZXIuanMiLCJpbXBvcnQgU2hlZXRCbG9jayBmcm9tICcuL1NoZWV0QmxvY2snO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ292ZXIgZXh0ZW5kcyBTaGVldEJsb2NrIHtcclxuXHJcbiAgY29uc3RydWN0b3IodmlzdWFsLCBwLCBhbmdsZSwgc3RhdGUpIHtcclxuICAgIHN1cGVyKHZpc3VhbCwgcCwgMCwgMSwgYW5nbGUsIHN0YXRlKTtcclxuICB9XHJcblxyXG4gIGdldFByb3BzKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4udGhpcy5wLmNvdmVyLFxyXG4gICAgICBzaGVldHM6IDFcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBsb2FkUG9pbnRzKCkge1xyXG4gICAgY29uc3Qgb3BlbmVkSW50ZXJwb2xhdGlvbkluZGVjZXMgPSBbXHJcbiAgICAgIFsyLDMsNF0sXHJcbiAgICAgIFsyLDMsNCw1LDZdXHJcbiAgICBdLFxyXG4gICAgY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMgPSBbXHJcbiAgICAgIFswLDEsMl0sXHJcbiAgICAgIFswLDEsMl1cclxuICAgIF0sXHJcbiAgICBpbnRlcnBvbGF0aW9uUG9pbnRzID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgeDogW1xyXG4gICAgICAgICAgICAgWzAsMC4yODc3LDAuNjM0NywwLjgxNzQsMS4wMDAwXSxcclxuICAgICAgICAgICAgIFswLDAuMjgzMSwwLjYyNTYsMC44MDgyLDAuOTkwOV0sXHJcbiAgICAgICAgICAgICBbMCwwLjI2MDMsMC41OTM2LDAuNzc2MywwLjk1ODldLFxyXG4gICAgICAgICAgICAgWzAsMC4xMzcwLDAuMzg4MSwwLjUzNDIsMC42NzU4XSxcclxuICAgICAgICAgICAgIFswLDAsMCwwLDBdXHJcbiAgICAgICAgXSxcclxuICAgICAgICB5OiBbXHJcbiAgICAgICAgICAgICBbMCwwLDAsMCwwXSxcclxuICAgICAgICAgICAgIFswLDAuMDIsMC4wMDUsLTAuMDAxLC0wLjAwMjVdLFxyXG4gICAgICAgICAgICAgWzAsMC4wNCwwLjAxLC0wLjAwMiwtMC4wMDVdLFxyXG4gICAgICAgICAgICAgWzAsIDAuMjQ2NiwgMC40Nzk1LCAwLjU3MDgsIDAuNjc1OF0sXHJcbiAgICAgICAgICAgICBbMCwgMC4yODc3LCAwLjYzNDcsIDAuODE3NCwgMS4wMDAwXVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHg6IFtcclxuICAgICAgICAgICAgIFswLDAuMjg3NywwLjYzNDcsMC44MTc0LDEuMDAwMF0sXHJcbiAgICAgICAgICAgICBbMCwwLjI4MzEsMC42MjU2LDAuODA4MiwwLjk5MDldLFxyXG4gICAgICAgICAgICAgWzAsMC4yNjAzLDAuNTkzNiwwLjc3NjMsMC45NTg5XSxcclxuICAgICAgICAgICAgIFswLjAwMCwwLjIzMywwLjU2MywwLjc0NiwwLjkyN10sXHJcbiAgICAgICAgICAgICBbMC4wMDAsMC4xNDQsMC40MzMsMC42MTMsMC43OTZdLFxyXG4gICAgICAgICAgICAgWzAuMDAwLDAuMDcwLDAuMjg4LDAuNDU1LDAuNjI2XSxcclxuICAgICAgICAgICAgIFswLDAsMCwwLDBdXHJcbiAgICAgICAgXSxcclxuICAgICAgICB5OiBbXHJcbiAgICAgICAgICAgICBbMCwwLDAsMCwwXSxcclxuICAgICAgICAgICAgIFswLDAuMDIsMC4wMDUsLTAuMDAxLC0wLjAwMjVdLFxyXG4gICAgICAgICAgICAgWzAsMC4wNCwwLjAxLC0wLjAwMiwtMC4wMDVdLFxyXG4gICAgICAgICAgICAgWzAuMDAwLDAuMTY4LDAuMjY5LDAuMjcwLDAuMjU1XSxcclxuICAgICAgICAgICAgIFswLjAwMCwwLjI0NSwwLjQzNSwwLjQ1OCwwLjQ2MF0sXHJcbiAgICAgICAgICAgICBbMC4wMDAsMC4yNzgsMC41NDQsMC42MTQsMC42NzNdLFxyXG4gICAgICAgICAgICAgWzAsIDAuMjg3NywgMC42MzQ3LCAwLjgxNzQsIDEuMDAwMF1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpbnRlcnBvbGF0aW9uUG9pbnRzLFxyXG4gICAgICBvcGVuZWRJbnRlcnBvbGF0aW9uSW5kZWNlcyxcclxuICAgICAgY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXNcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQ292ZXIuanMiLCJpbXBvcnQgU2hlZXRDc3NMYXllciBmcm9tICcuL1NoZWV0Q3NzTGF5ZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3NzTGF5ZXJzTWFuYWdlciB7XHJcbiAgY29uc3RydWN0b3IoYm9vaykge1xyXG4gICAgdGhpcy5ib29rID0gYm9vaztcclxuICAgIHRoaXMucHJvcHMgPSBib29rLnAuY3NzTGF5ZXJQcm9wcztcclxuICAgIHRoaXMudmlzdWFsID0gYm9vay52aXN1YWw7XHJcbiAgICB0aGlzLnBhZ2VNYW5hZ2VyID0gYm9vay5wYWdlTWFuYWdlcjtcclxuICAgIHRoaXMud3JhcHBlcnMgPSB7fTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZXMoKSB7XHJcbiAgICBjb25zdCBwYWdlID0gdGhpcy5ib29rLmdldFBhZ2UoKSwgcGFnZXMgPSB0aGlzLmJvb2suZ2V0UGFnZXMoKTtcclxuICAgIHJldHVybiBwYWdlPT09MCB8fCBwYWdlPT09cGFnZXMtMT8gW3BhZ2VdOiBbcGFnZSwgcGFnZSsxXTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBmb3IobGV0IHcgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLndyYXBwZXJzKSkge1xyXG4gICAgICB3LmxheWVycy5mb3JFYWNoKChsKT0+IGwuZGlzcG9zZSgpKTtcclxuICAgIH1cclxuICAgIGRlbGV0ZSB0aGlzLndyYXBwZXJzO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XHJcbiAgICBmb3IobGV0IG4gb2YgdGhpcy5nZXRBY3RpdmVzKCkpIHtcclxuICAgICAgY29uc3QgdyA9IHRoaXMud3JhcHBlcnNbbl07XHJcbiAgICAgIGlmKHcpIHtcclxuICAgICAgICBpZih3LnN0YXRlPT09J3JlYWR5JyAmJiB3LmxheWVycy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5ib29rLmdldEJsb2NrQnlQYWdlKG4pO1xyXG4gICAgICAgICAgdy5sYXllcnMuZm9yRWFjaCgobCk9PiB7XHJcbiAgICAgICAgICAgIGlmKGwuaXNIaWRkZW4oKSkge1xyXG4gICAgICAgICAgICAgIGwudXBkYXRlKGJsb2NrKTtcclxuICAgICAgICAgICAgICBsLnNob3coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLndyYXBwZXJzW25dID0ge1xyXG4gICAgICAgICAgc3RhdGU6ICdsb2FkaW5nJyxcclxuICAgICAgICAgIGxheWVyczogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VNYW5hZ2VyLmdldExheWVycyhuLCAobGF5ZXJzKT0+IHtcclxuICAgICAgICAgICAgaWYobGF5ZXJzLmxlbmd0aCAmJi
13345B0aGlzLndyYXBwZXJzKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmJvb2suZ2V0QmxvY2tCeVBhZ2Uobik7XHJcbiAgICAgICAgICAgICAgZm9yKGxldCBsIG9mIGxheWVycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2wgPSBuZXcgU2hlZXRDc3NMYXllcih0aGlzLnZpc3VhbCwgYmxvY2ssIHRoaXMucHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgdy5sYXllcnMucHVzaChzbCk7XHJcbiAgICAgICAgICAgICAgICBzbC5zZXQobC5jc3MsIGwuaHRtbCwgbC5qcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgICAgICAgICBpZighdGhpcy5oaWRkZW4gJiYgfnRoaXMuZ2V0QWN0aXZlcygpLmluZGV4T2YobikpIHtcclxuICAgICAgICAgICAgICAgICAgdy5sYXllcnMuZm9yRWFjaCgobCk9PiBsLnNob3coKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHcuc3RhdGUgPSAncmVhZHknO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcclxuICAgIGNvbnN0IHdhaXQgPSBbXTtcclxuICAgIGZvcihsZXQgdyBvZiBPYmplY3QudmFsdWVzKHRoaXMud3JhcHBlcnMpKSB7XHJcbiAgICAgIHcubGF5ZXJzLmZvckVhY2goKGwpPT4gd2FpdC5wdXNoKGwuaGlkZSgpKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdCk7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQ3NzTGF5ZXJzTWFuYWdlci5qcyIsImltcG9ydCB7JCwgVEhSRUV9IGZyb20gJy4uL2xpYnMnXHJcbmltcG9ydCBDYWNoZSBmcm9tICdDYWNoZSc7XHJcbmltcG9ydCBMb2FkaW5nQW5pbWF0aW9uIGZyb20gJ0xvYWRpbmdBbmltYXRpb24nO1xyXG5pbXBvcnQgSW1hZ2VGYWN0b3J5IGZyb20gJ0ltYWdlRmFjdG9yeSc7XHJcbmltcG9ydCBCYXNlTWF0aFV0aWxzIGZyb20gJ0Jhc2VNYXRoVXRpbHMnO1xyXG5pbXBvcnQgVGV4dHVyZUFuaW1hdG9yIGZyb20gJ1RleHR1cmVBbmltYXRvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdlTWFuYWdlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbCwgYm9vaywgcCkge1xyXG4gICAgdGhpcy52aXN1YWwgPSB2aXN1YWw7XHJcbiAgICB0aGlzLmJvb2sgPSBib29rO1xyXG4gICAgdGhpcy5wYWdlUXVlcnkgPSAnJztcclxuICAgIHRoaXMucCA9IHA7XHJcbiAgICB0aGlzLnBhZ2VDYWNoZSA9IG5ldyBDYWNoZShwLmNhY2hlZFBhZ2VzKTtcclxuICAgIHRoaXMucmVzb3VyY2VzQ2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxuICAgIHRoaXMuY2FudmFzID0gJCgnPGNhbnZhcz4nKVswXTtcclxuICAgIHRoaXMuaW1hZ2VGYWN0b3J5ID0gbmV3IEltYWdlRmFjdG9yeSh7Li4udmlzdWFsLCBkaXNwYXRjaEV2ZW50OiBib29rLmRpc3BhdGNoRXZlbnQuYmluZChib29rKSwgcmVuZGVyQ2FudmFzOiB0aGlzLmNhbnZhcywgcmVuZGVyQ2FudmFzQ3R4OiB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpfSwgdGhpcy5yZXNvdXJjZXNDYWNoZSk7XHJcblxyXG4gICAgdGhpcy5sb2FkaW5ncyA9IFtdO1xyXG4gICAgdGhpcy5yZW5kZXJRdWV1ZSA9IFtdO1xyXG4gICAgdGhpcy5wYWdlUmVxdWVzdHMgPSBbXTtcclxuICAgIHRoaXMucHJlZGljdGVkUmVxdWVzdHMgPSBbXTtcclxuXHJcbiAgICB0aGlzLnRtcE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCk7XHJcbiAgICB2aXN1YWwuYWRkT2JqZWN0KG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KDAsIDApLCB0aGlzLnRtcE1hdGVyaWFsKSk7XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nQW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMubG9hZGluZyA9IHt9O1xyXG4gICAgdGhpcy5sb2FkaW5nW3AuY292ZXIuY29sb3JdID0gdGhpcy5jcmVhdGVMb2FkaW5nVGV4dHVyZShwLmNvdmVyKTtcclxuICAgIGlmKHAucGFnZS5jb2xvciE9PXAuY292ZXIuY29sb3IpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nW3AucGFnZS5jb2xvcl0gPSB0aGlzLmNyZWF0ZUxvYWRpbmdUZXh0dXJlKHAucGFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50dXJuT25FdmVudHMoKTtcclxuXHJcbiAgICB2aXN1YWwuYWRkUmVuZGVyQ2FsbGJhY2sodGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgc2V0VGltZW91dCh0aGlzLnVwZGF0ZVJlbmRlclF1ZXVlLmJpbmQodGhpcyksIDI1MCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVMb2FkaW5nVGV4dHVyZShwKSB7XHJcbiAgICBjb25zdCBzcHJpdGVUaWxlcyA9IDYsXHJcbiAgICAgIHNjYWxlID0gTWF0aC5zcXJ0KDQuNSoyMTAqNC41KjI5Ny8ocC53aWR0aFRleGVscypwLmhlaWdodFRleGVscykpLFxyXG4gICAgICBhbmltYXRpb24gPSBuZXcgTG9hZGluZ0FuaW1hdGlvbihzY2FsZSpwLndpZHRoVGV4ZWxzLCBzY2FsZSpwLmhlaWdodFRleGVscywgcC5jb2xvciksXHJcbiAgICAgIGFuaW1hdG9yID0gbmV3IFRleHR1cmVBbmltYXRvcihhbmltYXRpb24uY3JlYXRlU3ByaXRlKHNwcml0ZVRpbGVzKSwgc3ByaXRlVGlsZXMsIDEsIHNwcml0ZVRpbGVzLCAwLjIpO1xyXG4gICAgYW5pbWF0aW9uLmRpc3Bvc2UoKTtcclxuICAgIHJldHVybiBhbmltYXRvcjtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLnR1cm5PZmZFdmVudHMoKTtcclxuICAgIGZvcihsZXQgY29sb3Igb2YgT2JqZWN0LmtleXModGhpcy5sb2FkaW5nKSkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdbY29sb3JdLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIGRlbGV0ZSB0aGlzLmxvYWRpbmc7XHJcbiAgICB0aGlzLnJlc291cmNlc0NhY2hlLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMucGFnZUNhY2hlLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuY2FudmFzLndpZHRoID0gMDtcclxuICAgIGRlbGV0ZSB0aGlzLmNhbnZhcztcclxuICB9XHJcblxyXG4gIGlzQ292ZXIobikge1xyXG4gICAgcmV0dXJuIG48MiB8fCBuPj0yKih0aGlzLnAuc2hlZXRzKzEpO1xyXG4gIH1cclxuXHJcbiAgaXNNb2JpbGUoKSB7X
13345HJcbiAgICByZXR1cm4gKHRoaXMudmlzdWFsLnduZC5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpPjE7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlU3RhdGUobikge1xyXG4gICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5wYWdlQ2FjaGUuZ2V0KG4pO1xyXG4gICAgcmV0dXJuIG9iamVjdD8gb2JqZWN0LnN0YXRlOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBlbmFibGVMb2FkaW5nQW5pbWF0aW9uKGVuYWJsZSkge1xyXG4gICAgdGhpcy5sb2FkaW5nQW5pbWF0aW9uID0gZW5hYmxlO1xyXG4gICAgZm9yKGxldCBvIG9mIHRoaXMubG9hZGluZ3MpIHtcclxuICAgICAgdGhpcy5zZXR1cE1hdGVyaWFsKG8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGR0KSB7XHJcbiAgICBpZih0aGlzLmxvYWRpbmdBbmltYXRpb24pIHtcclxuICAgICAgY29uc3QgbG9hZGluZyA9IHt9O1xyXG4gICAgICBmb3IobGV0IG8gb2YgdGhpcy5sb2FkaW5ncykge1xyXG4gICAgICAgIGlmKG8uaXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgbG9hZGluZ1tvLmNvbG9yXSA9IHRydWU7O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmb3IobGV0IGNvbG9yIG9mIE9iamVjdC5rZXlzKGxvYWRpbmcpKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nW2NvbG9yXS51cGRhdGUoZHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVGcm9tTG9hZGluZ3Mobykge1xyXG4gICAgY29uc3QgaSA9IHRoaXMubG9hZGluZ3MuaW5kZXhPZihvKTtcclxuICAgIGlmKH5pKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ3Muc3BsaWNlKGksIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRnJvbVJlbmRlclF1ZXVlKG8pIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnJlbmRlclF1ZXVlLmluZGV4T2Yobyk7XHJcbiAgICBpZih+aSkge1xyXG4gICAgICB0aGlzLnJlbmRlclF1ZXVlLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hQYWdlUXVlcnkobiwgcXVlcnk9JycpIHtcclxuICAgIHRoaXMucGFnZVF1ZXJ5ID0gcXVlcnk7XHJcbiAgICBjb25zdCBvYmplY3QgPSB0aGlzLnBhZ2VDYWNoZS5nZXQobik7XHJcbiAgICBpZihvYmplY3QgJiYgb2JqZWN0LndyYXBwZXIgJiYgb2JqZWN0LndyYXBwZXIuc2V0UXVlcnkpIHtcclxuICAgICAgaWYoIXRoaXMucGFnZUNhY2hlLnJlbW92ZShuKSkge1xyXG4gICAgICAgIG9iamVjdC53cmFwcGVyLnNldFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgICB0aGlzLnB1c2hJblJlbmRlclF1ZXVlKG9iamVjdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hab29tKCkge1xyXG4gICAgaWYodGhpcy5wLmF1dG9SZXNvbHV0aW9uLmVuYWJsZSkge1xyXG4gICAgICBjb25zdCBlcyA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2VDYWNoZS5mb3JFYWNoKChlKT0+IHtcclxuICAgICAgICBlcy5wdXNoKGUpO1xyXG4gICAgICB9KTtcclxuICAgICAgZXMuZm9yRWFjaCgoZSk9PiB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gZVsxXTtcclxuICAgICAgICBpZihvYmplY3QgJiYgb2JqZWN0LndyYXBwZXIpIHtcclxuICAgICAgICAgIGlmKCF0aGlzLnBhZ2VDYWNoZS5yZW1vdmUoZVswXSkpIHtcclxuICAgICAgICAgICAgdGhpcy5wdXNoSW5SZW5kZXJRdWV1ZShvYmplY3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRMYXllcnMobiwgY2xiKSB7XHJcbiAgICBpZih0aGlzLnAuY3NzTGF5ZXJzTG9hZGVyKSB7XHJcbiAgICAgIHRoaXMucC5jc3NMYXllcnNMb2FkZXIobiwgKC4uLmFyZ3MpPT4ge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMucGFnZUNhY2hlLmdldChuKTtcclxuICAgICAgICBpZihvYmplY3QpIHtcclxuICAgICAgICAgIGlmKG9iamVjdC5zdGF0ZSE9PSdhY3RpdmUnKSB7XHJcbiAgICAgICAgICAgIG9iamVjdC5wZW5kaW5ncy5wdXNoKHtjbGIsIGFyZ3N9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjbGIoLi4uYXJncyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjbGIoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZVBlbmRpbmdzKHBlbmRpbmdzKSB7XHJcbiAgICBmb3IobGV0IHAgb2YgcGVuZGluZ3MpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBwLmNsYiguLi5wLmFyZ3MpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwZW5kaW5ncy5zcGxpY2UoMCwgcGVuZGluZ3MubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIHJ0bFBhZ2VOKG4pIHtcclxuICAgIHJldHVybiB0aGlzLnAucnRsPyAyKih0aGlzLnAuc2hlZXRzKzIpLTEtbjogbjtcclxuICB9XHJcblxyXG4gIGxvYWQobWF0ZXJpYWwsIG4pIHtcclxuICAgIGNvbnN0IHBpID0gdGhpcy5wLnBhZ2VDYWxsYmFjayh0aGlzLnJ0bFBhZ2VOKG4pKSwgcCA9IHRoaXMuaXNDb3ZlcihuKT8gdGhpcy5wLmNvdmVyOiB0aGlzLnAucGFnZTtcclxuICAgIGNvbnN0IG8gPSB7XHJcbiAgICAgIG4sXHJcbiAgICAgIHRleHR1cmU6IG5ldyBUSFJFRS5UZXh0dXJlKCksXHJcbiAgICAgIHdyYXBwZXI6IG51bGwsXHJcbiAgICAgIHN0YXRlOiAnbG9hZGluZycsXHJcbiAgICAgIGxvY2tlZDogKG4pPT4gby5zdGF0ZSA9PT0gJ2xvYWRpbmcnIHx8IG8uc3RhdGUgPT09ICdyZW5kZXJpbmcnIHx8IHRoaXMuYm9vay5pc0FjdGl2ZVBhZ2UobiksXHJcbiAgICAgIGNvbG9yOiBwLmNvbG9yLFxyXG4gICAgICBpc0FjdGl2ZTogKCk9PiB0aGlzLmJvb2suaXNBY3RpdmVQYWdlKG4pLFxyXG4gICAgICBpc1RvcDogKCk9PiB+dGhpcy5ib29rLmdldFRvcFBhZ2VzKCkuaW5kZXhPZihuKSxcclxuICAgICAgZGlzcG9zZTogKCk9PiB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tTG9hZGluZ3Mobyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tUmVuZGVyUXVldWUobyk
133457XHJcbiAgICAgICAgaWYoby53cmFwcGVyICYmIG8ud3JhcHBlci5kaXNwb3NlKSB7XHJcbiAgICAgICAgICBvLndyYXBwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvLnRleHR1cmUuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBvLnRleHR1cmU7XHJcbiAgICAgICAgZGVsZXRlIG8ud3JhcHBlcjtcclxuICAgICAgfSxcclxuICAgICAgcGVuZGluZ3M6IFtdXHJcbiAgICB9O1xyXG4gICAgby50ZXh0dXJlLm1pbkZpbHRlciA9IFRIUkVFLkxpbmVhckZpbHRlcjtcclxuICAgIHRoaXMubG9hZGluZ3MucHVzaChvKTtcclxuICAgIHRoaXMuc2V0TWF0ZXJpYWwobywgbWF0ZXJpYWwpO1xyXG5cclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB7XHJcbiAgICAgIGlmKG8udGV4dHVyZSkge1xyXG4gICAgICAgIG8ud2lkdGhUZXhlbHMgPSBwaS53aWR0aFRleGVscyB8fCBwLndpZHRoVGV4ZWxzO1xyXG4gICAgICAgIG8uaGVpZ2h0VGV4ZWxzID0gcGkuaGVpZ2h0VGV4ZWxzIHx8IHAuaGVpZ2h0VGV4ZWxzO1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuY2FsY1Jlc29sdXRpb24obyk7XHJcbiAgICAgICAgby53cmFwcGVyID0gdGhpcy5pbWFnZUZhY3RvcnkuYnVpbGQocGksIHBpLm51bWJlcj09PXVuZGVmaW5lZD8gdGhpcy5ydGxQYWdlTihuKTogcGkubnVtYmVyLCByZXMud2lkdGgsIHJlcy5oZWlnaHQsIHAuY29sb3IsIHRoaXMucC5pbmplY3Rvcik7XHJcbiAgICAgICAgaWYoby53cmFwcGVyLnNldFF1ZXJ5KSB7XHJcbiAgICAgICAgICBvLndyYXBwZXIuc2V0UXVlcnkodGhpcy5wYWdlUXVlcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvLnNpbXVsYXRlID0gcGkuaW50ZXJhY3RpdmU/IChvLndyYXBwZXIuc2ltdWxhdGUgfHwgKCgpPT4gdW5kZWZpbmVkKSkuYmluZChvLndyYXBwZXIpOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgby53cmFwcGVyLm9uTG9hZCA9ICgpPT4ge1xyXG4gICAgICAgICAgdGhpcy5wdXNoSW5SZW5kZXJRdWV1ZShvKTtcclxuICAgICAgICAgIHRoaXMuYm9vay5kaXNwYXRjaEV2ZW50KHtcclxuICAgICAgICAgICAgdHlwZTogJ2xvYWRlZFBhZ2UnLFxyXG4gICAgICAgICAgICBwYWdlOiBuXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIG8ud3JhcHBlci5vbkNoYW5nZSA9IChpbWFnZSk9PiB7XHJcbiAgICAgICAgICBpZihvLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tTG9hZGluZ3Mobyk7XHJcbiAgICAgICAgICAgIGlmKG8ubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICBvLm1hdGVyaWFsLm1hcCA9IG8udGV4dHVyZTtcclxuICAgICAgICAgICAgICBvLm1hdGVyaWFsLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKDB4RkZGRkZGKTtcclxuICAgICAgICAgICAgICBvLm1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvLnRleHR1cmUuaW1hZ2UgPSBpbWFnZTtcclxuICAgICAgICAgICAgby50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgby50ZXh0dXJlLm9uVXBkYXRlID0gKCk9PiB7XHJcbiAgICAgICAgICAgICAgaWYoby5zdGF0ZSAhPT0gJ3F1ZXVlZEZvclJlbmRlcicpIHtcclxuICAgICAgICAgICAgICAgIG8uc3RhdGUgPSAnYWN0aXZlJztcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVBlbmRpbmdzKG8ucGVuZGluZ3MpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZW5kZXJpbmc7XHJcbiAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZVJlbmRlclF1ZXVlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMudG1wTWF0ZXJpYWwubWFwID0gby50ZXh0dXJlO1xyXG4gICAgICAgICAgICB0aGlzLnRtcE1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYm9vay5kaXNwYXRjaEV2ZW50KHtcclxuICAgICAgdHlwZTogJ2xvYWRQYWdlJyxcclxuICAgICAgcGFnZTogblxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlQ2FjaGUucHV0KG4sIG8pO1xyXG4gIH1cclxuXHJcbiAgaXNTaW5nbGVQYWdlKG8pIHtcclxuICAgIHJldHVybiB0aGlzLnAuc2luZ2xlUGFnZSB8fCAhby5uIHx8IG8ubj09PXRoaXMuYm9vay5nZXRQYWdlcygpLTE7XHJcbiAgfVxyXG5cclxuICBjYWxjUmVzb2x1dGlvbihvKSB7XHJcbiAgICBsZXQgcmVzO1xyXG4gICAgaWYodGhpcy5wLmF1dG9SZXNvbHV0aW9uLmVuYWJsZSkge1xyXG4gICAgICBjb25zdCBrID0gTWF0aC5taW4oKHRoaXMuaXNTaW5nbGVQYWdlKG8pPyAxOiAwLjUpKnRoaXMudmlzdWFsLndpZHRoKCkvby53aWR0aFRleGVscywgdGhpcy52aXN1YWwuaGVpZ2h0KCkvby5oZWlnaHRUZXhlbHMpO1xyXG4gICAgICByZXMgPSB7XHJcbiAgICAgICAgd2lkdGg6IHRoaXMucC5hdXRvUmVzb2x1dGlvbi5rKnRoaXMucC56b29tKmsqby53aWR0aFRleGVscyxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMucC5hdXRvUmVzb2x1dGlvbi5rKnRoaXMucC56b29tKmsqby5oZWlnaHRUZXhlbHNcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXMgPSB7XHJcbiAgICAgICAgd2lkdGg6IG8ud2lkdGhUZXhlbHMsXHJcbiAgICAgICAgaGVpZ2h0OiBvLmhlaWdodFRleGVsc1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHB1c2hJblJlbmRlclF1ZXVlKG8pIHtcclxuICAgIGlmKG8uc3RhdGUgIT09ICdxdWV1ZWRGb3JSZW5kZXInKSB7XHJcbiAgICAgIG8uc3RhdGUgPSAncXVldWVkRm9yUmVuZGVyJztcclxuICAgICAgdGhpcy5yZW5kZXJRdWV1ZS5wdXNoKG8pO1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZVJlbmRlclF1ZXVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSZW5kZXJRdWV1ZSgpIHtcclxuICAgIGlmKHRoaXMuY2FudmFzKSB7XHJcbiAgICAgIGNvbnN0IHAgPSB0aGlzLnA7XHJcbiAgICAgIGlmKCF0aGlzLnJlbmRlcmluZyAmJiAocC5yZW5kZXJXaGlsZUZsaXBwaW5nIHx8ICF0aGlzLmJvb2suaXNQcm9jZXNzaW5nKCkpKSB7XHJcbiAgICAgICAgbGV0IGFjdGl2ZSwgdG9wO1xyXG4gICAgICAgIGZvcihsZXQgbyBvZiB0aGlzLnJlbmRlclF1ZXVlKSB7XHJcbiAgICAgICAgICBpZighYWN0aXZlICYmIG8uaXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICBhY3RpdmUgPSBvO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoby5pc1RvcCgpKSB7XHJcbiAgICAgICAgICAgI
13345HRvcCA9IG87XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbmRlcmluZyA9IHRvcCB8fCBhY3RpdmU7XHJcbiAgICAgICAgaWYodGhpcy5pc01vYmlsZSgpICYmIHAucmVuZGVySW5hY3RpdmVQYWdlc09uTW9iaWxlIHx8ICF0aGlzLmlzTW9iaWxlKCkgJiYgcC5yZW5kZXJJbmFjdGl2ZVBhZ2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmluZyA9IHRoaXMucmVuZGVyaW5nIHx8IHRoaXMucmVuZGVyUXVldWVbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucmVuZGVyaW5nKSB7XHJcbiAgICAgICAgICBpZih0aGlzLnJlbmRlcmluZy53cmFwcGVyLnN0YXJ0UmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVJlbmRlclF1ZXVlKHRoaXMucmVuZGVyaW5nKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmcuc3RhdGUgPSAncmVuZGVyaW5nJztcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmcud3JhcHBlci5zZXRSZXNvbHV0aW9uKHRoaXMuY2FsY1Jlc29sdXRpb24odGhpcy5yZW5kZXJpbmcpKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmcud3JhcHBlci5zdGFydFJlbmRlcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlcmluZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgc2V0VGltZW91dCh0aGlzLnVwZGF0ZVJlbmRlclF1ZXVlLmJpbmQodGhpcyksIDI1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0dXJuT25FdmVudHMoKSB7XHJcbiAgICB0aGlzLnRyYW5zZmVyRXZlbnRzID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHR1cm5PZmZFdmVudHMoKSB7XHJcbiAgICBjb25zdCBtb3VzZXVwID0gJC5FdmVudCgnbW91c2V1cCcpLCBtb3VzZW91dCA9ICQuRXZlbnQoJ21vdXNlb3V0Jyk7XHJcbiAgICB0aGlzLnBhZ2VDYWNoZS5mb3JFYWNoKChlbnQpPT4ge1xyXG4gICAgICBjb25zdCBvYmplY3QgPSBlbnRbMV07XHJcbiAgICAgIGlmKG9iamVjdC5zaW11bGF0ZSkge1xyXG4gICAgICAgIG9iamVjdC5zaW11bGF0ZShtb3VzZXVwLCB1bmRlZmluZWQsIDAsIDApO1xyXG4gICAgICAgIG9iamVjdC5zaW11bGF0ZShtb3VzZW91dCwgdW5kZWZpbmVkLCAwLCAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRyYW5zZmVyRXZlbnRzID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0cmFuc2ZlckV2ZW50VG9UZXh0dXJlKG4sIGUsIGRhdGEpIHtcclxuICAgIGlmKHRoaXMudHJhbnNmZXJFdmVudHMpIHtcclxuICAgICAgY29uc3QgdG9PYmplY3QgPSB0aGlzLmdldE9yTG9hZFRleHR1cmVPYmplY3QodW5kZWZpbmVkLCBuKTtcclxuICAgICAgaWYodG9PYmplY3Qud3JhcHBlcikge1xyXG4gICAgICAgIGNvbnN0IHt1dn0gPSBkYXRhLCB0b0RvYyA9IHRvT2JqZWN0LndyYXBwZXIuZ2V0U2ltdWxhdGVkRG9jKCk7XHJcbiAgICAgICAgdGhpcy5wYWdlQ2FjaGUuZm9yRWFjaCgoZW50KT0+IHtcclxuICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGVudFsxXTtcclxuICAgICAgICAgIGlmKG9iamVjdC5zaW11bGF0ZSkge1xyXG4gICAgICAgICAgICBvYmplY3Quc2ltdWxhdGUoZSwgdG9Eb2MsIHV2LngsIHV2LnkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkUHJlZGljdGVkUGFnZXMoKSB7XHJcbiAgICB0aGlzLnByZWRpY3RlZFJlcXVlc3RzID0gQmFzZU1hdGhVdGlscy5wcmVkaWN0KHRoaXMucGFnZVJlcXVlc3RzLCB0aGlzLnAucHJlbG9hZFBhZ2VzKTtcclxuICAgIGZvcihsZXQgcCBvZiB0aGlzLnByZWRpY3RlZFJlcXVlc3RzKSB7XHJcbiAgICAgIGlmKHA8dGhpcy5ib29rLmdldFBhZ2VzKCkgJiYgIXRoaXMucGFnZUNhY2hlLmdldChwKSkge1xyXG4gICAgICAgIHRoaXMubG9hZCh1bmRlZmluZWQsIHApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRQYWdlUmVxdWVzdChuKSB7XHJcbiAgICB0aGlzLnBhZ2VSZXF1ZXN0cy5wdXNoKG4pO1xyXG4gICAgaWYodGhpcy5wYWdlUmVxdWVzdHMubGVuZ3RoPnRoaXMucC5wYWdlc0ZvclByZWRpY3RpbmcpIHtcclxuICAgICAgdGhpcy5wYWdlUmVxdWVzdHMuc2hpZnQoKTtcclxuICAgIH1cclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy5sb2FkUHJlZGljdGVkUGFnZXMuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBzZXRNYXRlcmlhbChvLCBtYXRlcmlhbCkge1xyXG4gICAgdGhpcy5wYWdlQ2FjaGUuZm9yRWFjaCgoZSk9PiB7XHJcbiAgICAgIGNvbnN0IG9iID0gZVsxXTtcclxuICAgICAgaWYobyE9PW9iICYmIG9iLm1hdGVyaWFsPT09bWF0ZXJpYWwpIHtcclxuICAgICAgICBkZWxldGUgb2IubWF0ZXJpYWw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYobWF0ZXJpYWwgJiYgbWF0ZXJpYWwhPT1vLm1hdGVyaWFsKSB7XHJcbiAgICAgIG8ubWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuICAgICAgdGhpcy5zZXR1cE1hdGVyaWFsKG8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBNYXRlcmlhbChvKSB7XHJcbiAgICBvLm1hdGVyaWFsLm1hcCA9IG8udGV4dHVyZS5pbWFnZT8gby50ZXh0dXJlOiAodGhpcy5sb2FkaW5nQW5pbWF0aW9uPyB0aGlzLmxvYWRpbmdbby5jb2xvcl0udGV4dHVyZTogbnVsbCk7XHJcbiAgICBpZighby5tYXRlcmlhbC5tYXApIHtcclxuICAgICAgby5tYXRlcmlhbC5jb2xvciA9IG5ldyBUSFJFRS5Db2xvcihvLmNvbG9yKTtcclxuICAgIH1cclxuICAgIG8ubWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JMb2FkVGV4dHVyZU9iamVjdChtYXRlcmlhbCwgbikge1xyXG4gICAgbGV0IG9iamVjdCA9IHRoaXMucGFnZUNhY2hlLmdldChuKTtcclxuICAgIGlmKCFvYmplY3QpIHtcclxuICAgICAgb2JqZWN0ID0gdGhpcy5sb2FkKG1hdGVyaWFsLCBuKTtcclxuICAgICAgdGhpcy5hZGRQYWdlUmVxdWVzdChuKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNldE1hdGVyaWFsKG9iamVjdCwgbWF0ZXJpYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybi
13345BvYmplY3Q7XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0dXJlKG1hdGVyaWFsLCBuKSB7XHJcbiAgICBpZih+dGhpcy5wcmVkaWN0ZWRSZXF1ZXN0cy5pbmRleE9mKG4pKSB7XHJcbiAgICAgIHRoaXMuYWRkUGFnZVJlcXVlc3Qobik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldE9yTG9hZFRleHR1cmVPYmplY3QobWF0ZXJpYWwsIG4pO1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL1BhZ2VNYW5hZ2VyLmpzIiwiaW1wb3J0IEJvb2tQcm9wc0J1aWxkZXIgZnJvbSAnLi9Cb29rUHJvcHNCdWlsZGVyJztcclxuaW1wb3J0IFBkZiBmcm9tICdQZGYnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGRmQm9va1Byb3BzQnVpbGRlciBleHRlbmRzIEJvb2tQcm9wc0J1aWxkZXIge1xyXG5cclxuICBjb25zdHJ1Y3RvcihzcmMsIG9uUmVhZHkpIHtcclxuICAgIHN1cGVyKG9uUmVhZHkpO1xyXG4gICAgdGhpcy5wZGYgPSBuZXcgUGRmKHNyYyk7XHJcbiAgICB0aGlzLnBhZ2VEZXNjcmlwdGlvbiA9IHtcclxuICAgICAgdHlwZTogJ3BkZicsXHJcbiAgICAgIHNyYzogdGhpcy5wZGYsXHJcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgcGFnZUNhbGxiYWNrOiB0aGlzLnBhZ2VDYWxsYmFjay5iaW5kKHRoaXMpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wZGYuZ2V0SGFuZGxlcih0aGlzLmluaXQuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5wZGYuZGlzcG9zZSgpO1xyXG4gICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdChoYW5kbGVyKSB7XHJcbiAgICBjb25zdCBwYWdlcyA9IHRoaXMucGRmLmdldFBhZ2VzTnVtKCk7XHJcbiAgICB0aGlzLmNhbGNTaGVldHMocGFnZXMpO1xyXG4gICAgaWYocGFnZXM+MCkge1xyXG4gICAgICBoYW5kbGVyLmdldFBhZ2UoMSkuXHJcbiAgICAgIHRoZW4oKHBhZ2UpPT4ge1xyXG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCgxKSwgc2l6ZSA9IHt3aWR0aDogdmlld3BvcnQud2lkdGgsIGhlaWdodDogdmlld3BvcnQuaGVpZ2h0fTtcclxuICAgICAgICB0aGlzLmNhbGNQcm9wcyhzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XHJcbiAgICAgICAgdGhpcy5yZWFkeSgpO1xyXG4gICAgICB9KS5cclxuICAgICAgY2F0Y2goKGUpPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucHJvcHMgPSB0aGlzLmRlZmF1bHRzO1xyXG4gICAgICB0aGlzLnJlYWR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYWdlQ2FsbGJhY2sobikge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZURlc2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9QZGZCb29rUHJvcHNCdWlsZGVyLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGRmTGlua3NIYW5kbGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IocGRmLCBjdHJsLCBlbGVtZW50KSB7XHJcbiAgICB0aGlzLnBkZiA9IHBkZjtcclxuICAgIHRoaXMuY3RybCA9IGN0cmw7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSAkKGVsZW1lbnQpO1xyXG4gICAgdGhpcy5jdXJzb3JzID0gW107XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG5cclxuICB9XHJcblxyXG4gIHNldEhhbmRsZXIoaGFuZGxlcikge1xyXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcclxuICB9XHJcblxyXG4gIGRlZmF1bHRIYW5kbGVyKHR5cGUsIGRlc3RpbmF0aW9uKSB7XHJcbiAgICBpZih0eXBlPT09J2ludGVybmFsJykge1xyXG4gICAgICB0aGlzLmN0cmwuZ29Ub1BhZ2UoZGVzdGluYXRpb24pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0eXBlPT09J2V4dGVybmFsJykge1xyXG4gICAgICB3aW5kb3cub3BlbihkZXN0aW5hdGlvbiwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKHR5cGUsIGRlc3RpbmF0aW9uKSB7XHJcbiAgICBpZighdGhpcy5oYW5kbGVyIHx8ICF0aGlzLmhhbmRsZXIodHlwZSwgZGVzdGluYXRpb24pKSB7XHJcbiAgICAgIHRoaXMuZGVmYXVsdEhhbmRsZXIodHlwZSwgZGVzdGluYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXZlbnQoZGF0YSkge1xyXG4gICAgY29uc3QgZSA9IGRhdGEuZXZlbnQsIGFubm8gPSBkYXRhLmFubm90YXRpb247XHJcbiAgICBzd2l0Y2goZS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6IHtcclxuICAgICAgICB0aGlzLmN1cnNvcnMucHVzaCh0aGlzLmVsZW1lbnQuY3NzKCdjdXJzb3InKSk7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmNzcygnY3
13345Vyc29yJywgJ3BvaW50ZXInKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdtb3VzZW91dCc6IHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuY3NzKCdjdXJzb3InLCB0aGlzLmN1cnNvcnMucG9wKCkgfHwgJycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3RvdWNodGFwJzpcclxuICAgICAgY2FzZSAnY2xpY2snOiB7XHJcbiAgICAgICAgaWYoYW5uby51cmwpIHtcclxuICAgICAgICAgIHRoaXMuY2FsbEhhbmRsZXJzKCdleHRlcm5hbCcsIGFubm8udXJsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihhbm5vLmRlc3QpIHtcclxuICAgICAgICAgIGxldCBkZXN0UHJvbWlzZTtcclxuICAgICAgICAgIGlmKHR5cGVvZiBhbm5vLmRlc3Q9PT0nc3RyaW5nJykge1xyXG4gICAgICAgICAgICBkZXN0UHJvbWlzZSA9IHRoaXMucGRmLmhhbmRsZXIuZ2V0RGVzdGluYXRpb24oYW5uby5kZXN0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkZXN0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShhbm5vLmRlc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGVzdFByb21pc2UuXHJcbiAgICAgICAgICAgIHRoZW4oKGRlc3QpPT4gdHlwZW9mIGRlc3RbMF09PT0nbnVtYmVyJz8gZGVzdFswXTogdGhpcy5wZGYuaGFuZGxlci5nZXRQYWdlSW5kZXgoZGVzdFswXSkpLlxyXG4gICAgICAgICAgICB0aGVuKChudW1iZXIpPT4gdGhpcy5jYWxsSGFuZGxlcnMoJ2ludGVybmFsJywgbnVtYmVyKSkuXHJcbiAgICAgICAgICAgIGNhdGNoKCgpPT4gY29uc29sZS5lcnJvcignQmFkIGxpbmsnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL1BkZkxpbmtzSGFuZGxlci5qcyIsImltcG9ydCBGaW5kZXIgZnJvbSAnRmluZGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlYXJjaEVuZ2luZSB7XHJcbiAgY29uc3RydWN0b3IocGFnZUNhbGxiYWNrLCBwYWdlcykge1xyXG4gICAgdGhpcy5wYWdlQ2FsbGJhY2sgPSBwYWdlQ2FsbGJhY2s7XHJcbiAgICB0aGlzLnBhZ2VzID0gcGFnZXM7XHJcbiAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICB9XHJcblxyXG4gIHNldFF1ZXJ5KHF1ZXJ5KSB7XHJcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XHJcbiAgICB0aGlzLnVwZGF0ZSA9IHRydWU7XHJcbiAgICB0aGlzLnByb2Nlc3MoKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3MoKSB7XHJcbiAgICBpZih0aGlzLnVwZGF0ZSkge1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5yZXN1bHRzO1xyXG4gICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgaWYodGhpcy5vblBhZ2VIaXRzQ2hhbmdlZCkge1xyXG4gICAgICAgIGZvcihsZXQgcmVzIG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgIHRoaXMub25QYWdlSGl0c0NoYW5nZWQodW5kZWZpbmVkLCAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucGFnZSA9IDA7XHJcbiAgICAgIHRoaXMuc3RhbXAgPSBEYXRlLm5vdygpO1xyXG4gICAgICBpZih0aGlzLnF1ZXJ5Lmxlbmd0aD4xKSB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZih0aGlzLnBhZ2U8dGhpcy5wYWdlcykge1xyXG4gICAgICAgIGNvbnN0IHN0YW1wID0gdGhpcy5zdGFtcDtcclxuICAgICAgICB0aGlzLmZpbmQodGhpcy5wYWdlQ2FsbGJhY2sodGhpcy5wYWdlKSkuXHJcbiAgICAgICAgICB0aGVuKChjb250ZXh0cyk9PiB7XHJcbiAgICAgICAgICAgIGlmKHN0YW1wID09PSB0aGlzLnN0YW1wKSB7XHJcbiAgICAgICAgICAgICAgaWYoY29udGV4dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcclxuICAgICAgICAgICAgICAgICAgY29udGV4dHNcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZih0aGlzLm9uUGFnZUhpdHNDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZUhpdHNDaGFuZ2VkKHRoaXMucGFnZSwgdGhpcy5xdWVyeSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICsrdGhpcy5wYWdlO1xyXG4gICAgICAgICAgICAgIHRoaXMucHJvY2VzcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZChwaSkge1xyXG4gICAgbGV0IG5leHQ7XHJcbiAgICBpZihwaS50eXBlPT09J3BkZicpIHtcclxuICAgICAgbmV4dCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+IHtcclxuICAgICAgICBwaS5zcmMuZ2V0SGFuZGxlcigoKT0+IHtcclxuICAgICAgICAgIGNvbnN0IG4gPSBwaS5udW1iZXI9PT11bmRlZmluZWQ/IHRoaXMucGFnZTogcGkubnVtYmVyO1xyXG4gICAgICAgICAgaWYocGkuc3JjLmdldFBhZ2VUeXBlKG4pPT09J3JpZ2h0Jykge1xyXG4gICAgICAgICAgICByZXNvbHZlKFtdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBwaS5zcmMuZ2V0UGFnZShuKS5cclxuICAgICAgICAgICAgdGhlbigocGFnZSk9PiB7XHJcbiAgICAgICAgICAgICAgcGFnZS5nZXRUZXh0Q29udGVudCgpLlxyXG4gICAgICAgICAgICAgIHRoZW4oKHRleHRDb250ZW50KT0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IEZpbmRlcih0ZXh0Q29udGVudC5pdGVtcy5tYXAoKGl0ZW0pPT4gaXRlbS5zdHIpLCB0aGlzLnF1ZXJ5LCB7aGl0czogZmFsc2V9KS5nZXRDb250ZXh0cygpKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkuXHJcbiAgICAgICAgICAgIGNhdGNoKCgpPT4gcmVzb2x2ZShbXSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgI
13345H0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBuZXh0ID0gUHJvbWlzZS5yZXNvbHZlKFtdKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXh0O1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9TZWFyY2hFbmdpbmUuanMiLCJpbXBvcnQgQ1NTTGF5ZXIgZnJvbSAnQ1NTTGF5ZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hlZXRDc3NMYXllciB7XHJcbiAgY29uc3RydWN0b3IodmlzdWFsLCBibG9jaywgcHJvcHMpIHtcclxuICAgIHRoaXMudmlzdWFsID0gdmlzdWFsO1xyXG4gICAgY29uc3Qgc2l6ZSA9IGJsb2NrLmdldFRvcFNpemUoKTtcclxuICAgIHRoaXMubGF5ZXIgPSBuZXcgQ1NTTGF5ZXIoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIHByb3BzKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZShibG9jayk7XHJcbiAgICB0aGlzLnZpc3VhbC5hZGRDc3NPYmplY3QodGhpcy5sYXllcik7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5sYXllci5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLnZpc3VhbC5yZW1vdmVDc3NPYmplY3QodGhpcy5sYXllcik7XHJcbiAgfVxyXG5cclxuICBpc0hpZGRlbigpIHtcclxuICAgIHJldHVybiB0aGlzLmxheWVyLmlzSGlkZGVuKCk7XHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5ZXIuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheWVyLnNob3coKTtcclxuICB9XHJcblxyXG4gIHNldChjc3MsIGh0bWwsIGpzKSB7XHJcbiAgICB0aGlzLmxheWVyLnNldERhdGEoY3NzLCBodG1sLCBqcyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoYmxvY2spIHtcclxuICAgIHRoaXMuYmxvY2sgPSBibG9jaztcclxuICAgIHRoaXMuYmxvY2suZ2V0VG9wV29ybGRSb3RhdGlvbih0aGlzLmxheWVyLnJvdGF0aW9uKTtcclxuICAgIHRoaXMuYmxvY2suZ2V0VG9wV29ybGRQb3NpdGlvbih0aGlzLmxheWVyLnBvc2l0aW9uKTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9TaGVldENzc0xheWVyLmpzIiwiaW1wb3J0IE1hdGhVdGlscyBmcm9tICdNYXRoVXRpbHMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hlZXRQaHlzaWNzIHtcclxuXHJcbiAgc3RhdGljIHRhcmdldEZvcmNlQ2xiKG8sYSx2LGNoKSB7XHJcbiAgICBjb25zdCBsID0gYSp0aGlzLnI7XHJcbiAgICByZXR1cm4gMTAwKnRoaXMubSp0aGlzLmcqKDIvKDErTWF0aC5leHAoMTAqKGwtdGhpcy50bCkpKS0xKS10aGlzLm0qNDAqdjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBob3ZlckNvcm5lckZvcmNlQ2xiKG8sdixsLGNoKSB7XHJcbiAgICByZXR1cm4gNTtcclxuICB9XHJcblxyXG4gIGdldFRhcmdldEZvcmNlQ2xiKG1hc3MsIHRhcmdldEFuZ2xlKSB7XHJcbiAgICByZXR1cm4gU2hlZXRQaHlzaWNzLnRhcmdldEZvcmNlQ2xiLmJpbmQoe1xyXG4gICAgICBnOiB0aGlzLnAuZ3Jhdml0eSxcclxuICAgICAgbTogbWFzcyxcclxuICAgICAgdGw6IHRhcmdldEFuZ2xlKnRoaXMucC5yLFxyXG4gICAgICByOiB0aGlzLnAuclxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZHJhZ0ZvcmNlQ2xiKG8sYSx2LGNoKSB7XHJcbiAgICByZXR1cm4gby5mbGJ0Km8ubSooMTAqby5nKmNoLTUwKnYvKDErTWF0aC5leHAoMy41Kk1hdGguYWJzKGNoKSkpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkcmFnQ29ybmVyRm9yY2VDbGIobyxhLHYsY2gpIHtcclxuICAgIHJldHVybiAxNSooMi8oMStNYXRoLmV4cCgxMCooYS10aGlzLnRhKSpvLnIpKS0xKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXREcmFnQ29ybmVyRm9yY2VDbGIodGFyZ2V0QW5nbGUpIHtcclxuICAgIHJldHVybiBTaGVldFBoeXNpY3MuZHJhZ0Nvcm5lckZvcmNlQ2xiLmJpbmQoe1xyXG4gICAgICB0YTogdGFyZ2V0QW5nbGVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3Iocj0xLCBncmF2aXR5PTEsIGNvcm5lckRldmlhdGlvbj0wLjE1LCBmcHM9MjQwKSB7XHJcbiAgICB0aGlzLnAgPSB7XHJcbiAgICAgIHIsXHJcbiAgICAgIGNvcm5lckRldmlhdGlvbixcclxuICAgICAgbDogTWF0aC5QSSpyLFxyXG4gICAgICBzdGFydER0OiAxL2ZwcyxcclxuICAgICAgZ3Jhdml0eSxcclxuICAgICAgbWFyZ2luOiAwLjAwMipyLFxyXG4gICAgICBpbmZNOiAxZTQsXHJcbiAgICAgIGF0dGVtcHRzOiAxNixcclxuICAgICAgbWF4SXRlcmF0aW9uczogMTAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5vcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMub3MgPSBbXTtcclxuICB9XHJcblxyXG4gIGdldFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBhZGRPYmplY3QobWFzcywgYW5nbGUsIHZlbG9jaXR5LCBmbGV4aWJpbGl0eSwgY29ybmVySGVpZ2h0LCBzaW11bGF0ZUNsYiwgcmVtb3ZlQ2xiLCBmb3JjZUNsYj0oKT0+IDAsIGNvcm5lckZvcmNlQ2xiPSgpPT4gMCkge1xyXG4gICAgY29uc3Qgbm8gPSB7XHJcbiAgICAgIGlkOiBNYXRoVXRpbHMuZ2V0VW5pcXVlKCksXHJcbiAgICAgIG06IG1hc3MsXHJcbiAgICAgIHY6IHZlbG9jaXR5LFxyXG4gICAgICBsOiBhbmdsZSp0aGlzLnAucixcclxuICAgICAgZjogZm9yY2VDbGIsXHJcbiAgICAgIGNmOiBjb3JuZXJGb3JjZUNsYixcclxuICAgICAgY2g6IGNvcm5lckhlaWdodCxcclxuICAgICAgZmxidDogZmxleGliaWxpdHksXHJcbiAgICAgIHNpbXVsYXRlQ2xiLFxyXG4gICAgICByZW1vdmVDbGJcclxuICAgIH07XHJcbiAgICBsZXQgaSA9IHRoaXMub3MuZmluZEluZGV4KChvKT0+IG5vLmw8PW8ubCk7XHJcbiAgICBpID0gfmk/IGk6IHRoaXMub3MubGVuZ3RoO1xyXG4gICAgdGhpcy5vcy5zcGxpY2UoaSwgMCwgbm8pO1xyXG4gICAgcmV0dXJuIG5vLmlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyYW1ldHJNYXAobmFtZSkge1xyXG4gICAgY29uc3QgbWFwID0ge1xyXG4gICAgICBtYXNzOiAnbScsXHJcbiAgICAgIHZlbG9jaXR5OiAndicsXHJcbiAgICAgIGZsZXhpYmlsaXR5OiAnZmxidCcsXHJcbiAgICAgIGNvcm5lckhlaWdodDogJ2NoJ
13345yxcclxuICAgICAgc2ltdWxhdGVDbGI6ICdzaW11bGF0ZUNsYicsXHJcbiAgICAgIHJlbW92ZUNsYjogJ3JlbW92ZUNsYicsXHJcbiAgICAgIGZvcmNlQ2xiOiAnZicsXHJcbiAgICAgIGNvcm5lckZvcmNlQ2xiOiAnY2YnXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG1hcFtuYW1lXTtcclxuICB9XHJcblxyXG4gIHNldFBhcmFtZXRyKGlkLCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgY29uc3QgbyA9IHRoaXMub3MuZmluZCgobyk9PiBvLmlkPT09aWQpO1xyXG4gICAgaWYobmFtZSA9PT0gJ2FuZ2xlJykge1xyXG4gICAgICBvLmwgPSB2YWx1ZSp0aGlzLnAucjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBvW3RoaXMuZ2V0UGFyYW1ldHJNYXAobmFtZSldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQYXJhbWV0cihpZCwgbmFtZSkge1xyXG4gICAgY29uc3QgbyA9IHRoaXMub3MuZmluZCgobyk9PiBvLmlkPT09aWQpO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgaWYobmFtZSA9PT0gJ2FuZ2xlJykge1xyXG4gICAgICB2YWx1ZSA9IG8ubC90aGlzLnAucjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YWx1ZSA9IG9bdGhpcy5nZXRQYXJhbWV0ck1hcChuYW1lKV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzaW11bGF0ZShUKSB7XHJcbiAgICBsZXQgdD0wLFxyXG4gICAgICAgIGR0PXRoaXMucC5zdGFydER0LFxyXG4gICAgICAgIGF0dGVtcHQ9MCxcclxuICAgICAgICBpdD0wO1xyXG5cclxuICAgIHdoaWxlKHQ8VCAmJiBpdDx0aGlzLnAubWF4SXRlcmF0aW9ucykge1xyXG4gICAgICBpZihkdD5ULXQpIHtcclxuICAgICAgICBkdCA9IFQtdDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBub3MgPSB0aGlzLmludGVncmF0ZSh0aGlzLm9zLCBkdCksXHJcbiAgICAgICAgICAgIGNpID0gdGhpcy5maW5kQ29sbGlzaW9ucyhub3MpO1xyXG4gICAgICBpZihjaS5udW0+MSAmJiBhdHRlbXB0PHRoaXMucC5hdHRlbXB0cykge1xyXG4gICAgICAgIGR0Lz0yO1xyXG4gICAgICAgICsrYXR0ZW1wdDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZihjaS5udW09PT0xKSB7XHJcbiAgICAgICAgICBjb25zdCBzY29zID0gdGhpcy5zb2x2ZUNvbGxpc2lvbihub3NbY2kubGFzdC0xXSwgbm9zW2NpLmxhc3RdKTtcclxuICAgICAgICAgIG5vc1tjaS5sYXN0LTFdID0gc2Nvc1swXTtcclxuICAgICAgICAgIG5vc1tjaS5sYXN0XSA9IHNjb3NbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoY2kubnVtPjEpIHtcclxuICAgICAgICAgIGNvbnN0IGdzID0gW107XHJcbiAgICAgICAgICBsZXQgbGFzdCA9IC0yO1xyXG4gICAgICAgICAgZm9yKGxldCBpIG9mIGNpLmFsbCkge1xyXG4gICAgICAgICAgICBpZihpLWxhc3Q+MSkge1xyXG4gICAgICAgICAgICAgIGdzLnB1c2goW10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdzW2dzLmxlbmd0aC0xXS5wdXNoKGkpO1xyXG4gICAgICAgICAgICBsYXN0ID0gaTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvcihsZXQgZyBvZiBncykge1xyXG4gICAgICAgICAgICBsZXQgc2csIGkwO1xyXG4gICAgICAgICAgICBpZihub3NbZ1swXV0ubD5NYXRoLlBJLzIqdGhpcy5wLnIpIHtcclxuICAgICAgICAgICAgICBzZyA9IC0xO1xyXG4gICAgICAgICAgICAgIGkwID0gZ1tnLmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBzZyA9IDE7XHJcbiAgICAgICAgICAgICAgaTAgPSBnWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT1pMDsgaTxub3MubGVuZ3RoICYmIGk+LTE7IGkrPXNnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbyA9IG5vc1tpK3NnXTtcclxuICAgICAgICAgICAgICBpZihvICYmIHNnKihvLmwtbm9zW2ldLmwpPD10aGlzLnAubWFyZ2luKSB7XHJcbiAgICAgICAgICAgICAgICBvLmw9bm9zW2ldLmwrc2cqMip0aGlzLnAubWFyZ2luO1xyXG4gICAgICAgICAgICAgICAgaWYoby5sPnRoaXMucC5sIHx8IG8ubDwwKSB7XHJcbiAgICAgICAgICAgICAgICAgIG8ubCA9IG8ubD50aGlzLnAubD8gdGhpcy5wLmw6IDA7XHJcbiAgICAgICAgICAgICAgICAgIG8uY2ggPSAwO1xyXG4gICAgICAgICAgICAgICAgICBvLnY9MDtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQmFkIGNvbGxpc2lvbicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9zID0gbm9zO1xyXG4gICAgICAgIHRoaXMuZmluZEFuZFNvbHZlQ29ybmVyQ29sbGlzaW9ucygpO1xyXG4gICAgICAgIHQrPWR0O1xyXG4gICAgICAgIGR0PXRoaXMucC5zdGFydER0O1xyXG4gICAgICAgIGF0dGVtcHQ9MDtcclxuICAgICAgfVxyXG4gICAgICArK2l0O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVtb3ZlU3RhdGljcygpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU3RhdGljcygpIHtcclxuICAgIGNvbnN0IG5vcyA9IFtdLCBub3RpZnkgPSBbW10sW11dO1xyXG4gICAgZm9yKGxldCBvIG9mIHRoaXMub3MpIHtcclxuICAgICAgaWYoby5zaW11bGF0ZUNsYikge1xyXG4gICAgICAgIG8uc2ltdWxhdGVDbGIoby5sL3RoaXMucC5yLCBvLmNoKTtcclxuICAgICAgfVxyXG4gICAgICBpZigoby5sPT09dGhpcy5wLmwgfHwgby5sPT09MCkgJiYgby52PT09MCkge1xyXG4gICAgICAgIGlmKG8ucmVtb3ZlQ2xiICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIG5vdGlmeVsoby5sIT09dGhpcy5wLmwpKzBdLnB1c2gobyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG5vcy5wdXNoKG8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9zID0gbm9zO1xyXG4gICAgZm9yKGxldCBvIG9mIG5vdGlmeVswXS5yZXZlcnNlKCkpIHtcclxuICAgICAgby5yZW1vdmVDbGIoTWF0aC5QSSwgby5jaCk7XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IG8gb2Ygbm90aWZ5WzFdKSB7XHJcbiAgICAgIG8ucmVtb3ZlQ2xiKDAsIG8uY2gpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZEFuZFNvbHZlQ29ybmVyQ29sbGlzaW9ucygpIHtcclxuICAgIGlmKHRoaXMub3MubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG9zID0gW1xyXG4gICAgICAgI
13345HtcclxuICAgICAgICAgIC4uLnRoaXMub3NbMF0sXHJcbiAgICAgICAgICBsOiAwLFxyXG4gICAgICAgICAgbTogdGhpcy5wLmluZk0sXHJcbiAgICAgICAgICBjaDogMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5vcyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAuLi50aGlzLm9zWzBdLFxyXG4gICAgICAgICAgbDogMS4wNSp0aGlzLnAubCxcclxuICAgICAgICAgIG06IHRoaXMucC5pbmZNLFxyXG4gICAgICAgICAgY2g6IDBcclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcblxyXG4gICAgICBmb3IobGV0IGk9MTsgaTxvcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGNvbnN0IGE9b3NbaS0xXSwgYj1vc1tpXSxcclxuICAgICAgICAgICAgICBhbD1hLmwrdGhpcy5wLmNvcm5lckRldmlhdGlvbiphLmNoKnRoaXMucC5yLFxyXG4gICAgICAgICAgICAgIGJsPWIubCt0aGlzLnAuY29ybmVyRGV2aWF0aW9uKmIuY2gqdGhpcy5wLnI7XHJcbiAgICAgICAgaWYoMS4wNSphbD5ibCAmJiBhLmNoPmIuY2gpIHtcclxuICAgICAgICAgIGNvbnN0IGRDaCA9IGEuY2gtYi5jaCwgZHY9YS5tL2EuZmxidCtiLm0vYi5mbGJ0LCBrYT1hLm0vYS5mbGJ0L2R2LCBrYj1iLm0vYi5mbGJ0L2R2O1xyXG4gICAgICAgICAgYS5jaD1hLmNoLWtiKmRDaDtcclxuICAgICAgICAgIGIuY2g9Yi5jaCtrYSpkQ2g7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzb2x2ZUNvbGxpc2lvbihhLCBiKSB7XHJcbiAgICBjb25zdCBtbT0oYi5tK2EubSksXHJcbiAgICAgIGF2ID0gKC1hLnYqYi5tK2EubSphLnYrMipiLm0qYi52KS9tbSxcclxuICAgICAgYnYgPSAoYi5tKmIudi1iLnYqYS5tKzIqYS5tKmEudikvbW07XHJcbiAgICByZXR1cm4gW3suLi5hLCB2OiBhdn0sIHsuLi5iLCB2OiBidn1dO1xyXG4gIH1cclxuXHJcbiAgZmluZENvbGxpc2lvbnMob3MpIHtcclxuICAgIGNvbnN0IGNpID0ge1xyXG4gICAgICBudW06IDAsXHJcbiAgICAgIGxhc3Q6IDAsXHJcbiAgICAgIGFsbDogW11cclxuICAgIH07XHJcbiAgICBmb3IobGV0IGkgPSAxOyBpPG9zLmxlbmd0aCAmJiBjaS5udW08MjsgKytpKSB7XHJcbiAgICAgIGlmKG9zW2ktMV0ubD5vc1tpXS5sIHx8IHRoaXMuaXNDb2xsaXNpb24ob3NbaS0xXSwgb3NbaV0pKSB7XHJcbiAgICAgICAgaWYob3NbaS0xXS5sPm9zW2ldLmwpIHtcclxuICAgICAgICAgICsrY2kubnVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICArK2NpLm51bTtcclxuICAgICAgICBjaS5sYXN0ID0gaTtcclxuICAgICAgICBpZihjaS5hbGwuaW5kZXhPZihpLTEpPT09LTEpIHtcclxuICAgICAgICAgIGNpLmFsbC5wdXNoKGktMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGNpLmFsbC5pbmRleE9mKGkpPT09LTEpIHtcclxuICAgICAgICAgIGNpLmFsbC5wdXNoKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNpO1xyXG4gIH1cclxuXHJcbiAgaXNDb2xsaXNpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIE1hdGguYWJzKGEubC1iLmwpPHRoaXMucC5tYXJnaW4gJiYgYS52PmIudjtcclxuICB9XHJcblxyXG4gIGludGVncmF0ZShvcywgZHQpIHtcclxuICAgIGNvbnN0IG5vcyA9IFtdO1xyXG4gICAgZm9yKGxldCBvIG9mIG9zKSB7XHJcbiAgICAgIGNvbnN0IHZsID0gTWF0aFV0aWxzLnJrNChcclxuICAgICAgICB0aGlzLmR5LmJpbmQoe1xyXG4gICAgICAgICAgZzogdGhpcy5wLmdyYXZpdHksXHJcbiAgICAgICAgICByOiB0aGlzLnAucixcclxuICAgICAgICAgIG06IG8ubSxcclxuICAgICAgICAgIGY6IG8uZixcclxuICAgICAgICAgIGNmOiBvLmNmLFxyXG4gICAgICAgICAgY2g6IG8uY2gsXHJcbiAgICAgICAgICBmbGJ0OiBvLmZsYnRcclxuICAgICAgICB9KSxcclxuICAgICAgICAwLFxyXG4gICAgICAgIGR0LFxyXG4gICAgICAgIFtvLnYsIG8ubCwgby5jaF1cclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgbm8gPSB7XHJcbiAgICAgICAgLi4ubyxcclxuICAgICAgICB2OiB2bFswXSxcclxuICAgICAgICBsOiB2bFsxXSxcclxuICAgICAgICBjaDogdmxbMl1cclxuICAgICAgfTtcclxuICAgICAgaWYobm8ubDw9MCB8fCBuby5sPj10aGlzLnAubCkge1xyXG4gICAgICAgIG5vLmw9bm8ubDw9MD8gMDogdGhpcy5wLmw7XHJcbiAgICAgICAgbm8udj0wO1xyXG4gICAgICAgIG5vLmNoPTA7XHJcbiAgICAgIH1cclxuICAgICAgbm9zLnB1c2gobm8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vcztcclxuICB9XHJcblxyXG4gIGR5KHQseSkge1xyXG4gICAgY29uc3Qgdj15WzBdLCBsPXlbMV0sIGNoPXlbMl0sIGY9dGhpcy5mKHRoaXMsbC90aGlzLnIsdixjaCksIGNmPXRoaXMuY2YodGhpcyxsL3RoaXMucix2LGNoKTtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICgtdGhpcy5nKk1hdGguY29zKGwvdGhpcy5yKSp0aGlzLm0rZikvdGhpcy5tLFxyXG4gICAgICB2KzAuMDEqKE1hdGgucmFuZG9tKCktMC41KSxcclxuICAgICAgdGhpcy5mbGJ0KigoMi8oMStNYXRoLmV4cCgtMC4yKmNmKSktMSkqKDEtMi8oMStNYXRoLmV4cCgtNSooTWF0aC5hYnMoY2gpLTIpKSkpLWNoKVxyXG4gICAgXTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvU2hlZXRQaHlzaWNzLmpzIiwiXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTb3VuZHNFbnZpcm9tZW50IHtcclxuXHJcbiAgY29uc3RydWN0b3IodGVtcGxhdGU9e30pIHtcclxuICAgIHRoaXMuc291bmRzID0gdGVtcGxhdGUuc291bmRzIHx8IHt9O1xyXG4gICAgdGhpcy5hdWRpbyA9IHt9O1xyXG4gICAgaWYodGhpcy5zb3VuZHMuc3RhcnRGbGlwKSB7XHJcbiAgICAgIHRoaXMuYXVkaW8uc3RhcnRGbGlwID0gbmV3IEF1ZGlvKHRoaXMuc291bmRzLnN0YXJ0RmxpcCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLnNvdW5kcy5lbmRGbGlwKSB7XHJcbiAgICAgIHRoaXMuYXVkaW8uZW5kRmxpcCA9IG5ldyBBdWRpbyh0aGlzLnNvdW5kcy5lbmRGbGlwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEVuYWJsZWQoZW5hYmxlZCkge1xyXG4gICAgdGhpcy5lbmFibGVkID0gZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIHRvZ2xlKCkge1xyXG4gICAgdGhpcy5lbmFibGVkID0gIXRoaXMuZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBkZWxldGUgdGhpcy5hdWRpby5zdGFydEZsaXA7XHJcbiAgICBkZWxldGUgdGhpcy5hdWRpby5lbmRGbGlwO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRGbGlwKCkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkICYmIHRoaXMuYXVkaW8uc3RhcnRGbGlwKSB7XHJcbiAgICAgIHRoaXMuYXVkaW8uc3RhcnRGbGlwLnBsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuZEZsaXAoKSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQgJiYgdGhpcy5hdWRpby5zdGFydEZsaXApIHtcclxuICAgICAgdGhpcy5hdWRpby5zdGFydEZsaXAucGF1c2UoKTtcclxuICAgICAgdGhpcy5hdWRpby5zdGFydEZsaXAuY3VycmVudFRpbWUgPSAwO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5lbmFibGVkICYmIHRoaXMuYXVkaW8uZW5kRmxpcCkge1xyXG4gICAgICB0aGlzLmF1ZGlvLmVuZEZsaXAucGxheSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlRmxpcHMoZW1pdHRlcikge1xyXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKCdzdGFydEZsaXAnLCB0aGlzLnN0YXJ0RmxpcC5iaW5kKHRoaXMpKTtcclxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcignZW5kRmxpcCcsIHRoaXMuZW5kRmxpcC5iaW5kKHRoaXMpKTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvU291bmRzRW52aXJvbWVudC5qcyIsImltcG9ydCBXaWRnZXRDb250cm9sbGVyIGZyb20gJ1dpZGdldENvbnRyb2xsZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9jQ29udHJvbGxlciBleHRlbmRzIFdpZGdldENvbnRyb2xsZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih2aWV3LCBib29rQ3RybCkge1xyXG4gICAgc3VwZXIodmlldyk7XHJcbiAgICB0aGlzLmJvb2tDdHJsID0gYm9va0N0cmw7XHJcbiAgICB0aGlzLnRhYiA9ICdub25lJztcclxuICB9XHJcblxyXG4gIHNldFRodW1ibmFpbHModGh1bWJuYWlscykge1xyXG4gICAgdGhpcy50aHVtYm5haWxzID0gdGh1bWJuYWlscztcclxuICAgIHRodW1ibmFpbHMub25OYXZpZ2F0ZSA9IHRoaXMubmF2aWdhdGVUaHVtYm5haWxzLmJpbmQodGhpcyk7XHJcbiAgICBpZih0aGlzLnRhYiA9PT0gJ25vbmUnKSB7XHJcbiAgICAgIHRoaXMudGFiID0gJ3RodW1ibmFpbHMnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTZWFyY2goc2VhcmNoKSB7X
13345HJcbiAgICB0aGlzLnNlYXJjaCA9IHNlYXJjaDtcclxuICAgIHNlYXJjaC5vbk5hdmlnYXRlID0gdGhpcy5uYXZpZ2F0ZVNlYXJjaC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRCb29rbWFya3MoYm9va21hcmtzLCBwZGYpIHtcclxuICAgIHRoaXMuYm9va21hcmtzID0gYm9va21hcmtzO1xyXG4gICAgdGhpcy5wZGYgPSBwZGY7XHJcbiAgICBib29rbWFya3Mub25OYXZpZ2F0ZSA9IHRoaXMubmF2aWdhdGVCb29rbWFya3MuYmluZCh0aGlzKTtcclxuICAgIGlmKGJvb2ttYXJrcy5nZXRTaXplKCkpIHtcclxuICAgICAgdGhpcy50YWIgPSAnYm9va21hcmtzJztcclxuICAgICAgdGhpcy5pc0Jvb2ttYXJrcyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGNtZEJvb2ttYXJrcygpIHtcclxuICAgIHRoaXMudGFiID0gJ2Jvb2ttYXJrcyc7XHJcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGNtZFRodW1ibmFpbHMoKSB7XHJcbiAgICB0aGlzLnRhYiA9ICd0aHVtYm5haWxzJztcclxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgY21kU2VhcmNoKCkge1xyXG4gICAgdGhpcy50YWIgPSAnc2VhcmNoJztcclxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgY21kQ2xvc2VUb2MoKSB7XHJcbiAgICB0aGlzLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVGh1bWJuYWlscyhudW1iZXIpIHtcclxuICAgIHRoaXMuYm9va0N0cmwuZ29Ub1BhZ2UobnVtYmVyKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlU2VhcmNoKG51bWJlcikge1xyXG4gICAgdGhpcy5ib29rQ3RybC5nb1RvUGFnZShudW1iZXIpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVCb29rbWFya3MoaXRlbSkge1xyXG4gICAgaWYoaXRlbS51cmwpIHtcclxuICAgICAgd2luZG93Lm9wZW4oaXRlbS51cmwsICdfYmxhbmsnKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYoaXRlbS5kZXN0KSB7XHJcbiAgICAgIGxldCBkZXN0UHJvbWlzZTtcclxuICAgICAgaWYodHlwZW9mIGl0ZW0uZGVzdD09PSdzdHJpbmcnKSB7XHJcbiAgICAgICAgZGVzdFByb21pc2UgPSB0aGlzLnBkZi5oYW5kbGVyLmdldERlc3RpbmF0aW9uKGl0ZW0uZGVzdCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZGVzdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoaXRlbS5kZXN0KTtcclxuICAgICAgfVxyXG4gICAgICBkZXN0UHJvbWlzZS5cclxuICAgICAgICB0aGVuKChkZXN0KT0+IHRoaXMucGRmLmhhbmRsZXIuZ2V0UGFnZUluZGV4KGRlc3RbMF0pKS5cclxuICAgICAgICB0aGVuKChudW1iZXIpPT4gdGhpcy5ib29rQ3RybC5nb1RvUGFnZShudW1iZXIpKS5cclxuICAgICAgICBjYXRjaCgoKT0+IGNvbnNvbGUuZXJyb3IoJ0JhZCBib29rbWFyaycpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVZpZXcoKSB7XHJcbiAgICBpZih0aGlzLnZpZXcpIHtcclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCd3aWRUb2NNZW51Jywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnd2lkVGh1bWJuYWlscycsIHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy50YWI9PT0ndGh1bWJuYWlscycsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCd3aWRTZWFyY2gnLCB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMudGFiPT09J3NlYXJjaCcsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCd3aWRCb29rbWFya3MnLCB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMudGFiPT09J2Jvb2ttYXJrcycsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCdjbWRCb29rbWFya3MnLCB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgYWN0aXZlOiB0aGlzLnRhYj09PSdib29rbWFya3MnXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ2NtZENsb3NlVG9jJywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnY21kVGh1bWJuYWlscycsIHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IHRoaXMudGFiPT09J3RodW1ibmFpbHMnXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ2NtZFNlYXJjaCcsIHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IHRoaXMudGFiPT09J3NlYXJjaCdcclxuICAgICAgfSk7XHJcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB0aGlzLnRodW1ibmFpbHMuc2V0RW5hYmxlKHRoaXMudmlzaWJsZSAmJiB0aGlzLnRhYj09PSd0aHVtYm5haWxzJykpO1xyXG4gICAgICBzdXBlci51cGRhdGVWaWV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL1RvY0NvbnRyb2xsZXIuanMiLCJpbXBvcnQge1RIUkVFfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IFRocmVlVXRpbHMgZnJvbSAnVGhyZWVVdGlscyc7XHJcblxyXG5jb25zdCByZXNYID0gMTEsXHJcbiAgICAgIHJlc1kgPSAyLFxyXG4gICAgICByZXNaID0gMTUsXHJcbiAgICAgIHNjYWxlID0gMSxcclxuICAgICAgZmFjZXMgPSBbXTtcclxuXHJcbmNvbnN0IGZyb250R2VvbWV0cnkgPSBuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeShzY2FsZSwgc2NhbGUsIHJlc1gtMSwgcmVzWS0xKTtcclxuZnJvbnRHZW9tZXRyeS50cmFuc2xhdGUoMC41KnNjYWxlLDAuNSpzY2FsZSxzY2FsZSk7XHJcbmNvbnN0IGJhY2tHZW9tZXRyeSA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KHNjYWxlLCBzY2FsZSwgcmVzWC0xLCByZXNZLTEpO1xyXG5iYWNrR2VvbWV0cnkucm90YXRlWShNYXRoLlBJKTtcclxuYmFja0dlb21ldHJ5LnRyYW5zbGF0ZSgwLjUqc2NhbGUsMC41KnNjYWxlLDApO1xyXG5jb25zdCBsZWZ0R2VvbWV0cnkgPSBuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeShzY2FsZSwgc2NhbGUsIHJlc1otMSwgcmVzWS0xKTtcclxubGVmdEdlb21ldHJ5LnJvdGF0ZVkoLU1hdGguUEkvMik7XHJcbmxlZnRHZW9tZXRyeS50cmFuc2xhdGUoMCwwLjUqc2NhbGUsMC41KnNjYWxlKTtcclxuY29uc3QgcmlnaHRHZW9tZXRyeSA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KHNjYWxlLCBzY2FsZSwgcmVzWi0xLCByZXNZLTEpO1xyXG5yaWdodEdlb21ldHJ5LnJvdGF0ZVkoTWF0aC5QSS8yKTtcclxucmlnaHRHZW9tZXRyeS50cmFuc2xhdGUoc2NhbGUsMC41KnNjYWxlLDAuNSpzY2FsZSk7XHJcbmNvbnN0IHRvcEdlb21ldHJ5ID0gbmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoc2NhbGUsIHNjYWxlLCByZXNYLTEsIHJlc1otMSk7XHJcbnRvcEdlb21ldHJ5LnJvdGF0ZVgoLU1hdGguUEkvMik7XHJcbnRvcEdlb21ldHJ5LnRyYW5zbGF0ZSgwLjUqc2NhbGUsc2NhbGUsMC41KnNjYWxlKTtcclxuY29uc3QgYm90dG9tR2VvbWV0cnkgPSB0b3BHZW9tZXRyeS5jbG9uZSgpO1xyXG5ib3R0b21HZW9tZXRyeS50cmFuc2xhdGUoMCwtc2NhbGUsMCk7XHJcbmZvcihsZXQgZiBvZiBib3R0b21HZW9tZXRyeS5mYWNlcykge1xyXG4gIFtmLmEsIGYuYl0gPSBbZi5iLCBmLmFdO1xyXG59XHJcblxyXG5jb25zdCBnZW9tZXRyeSA9IG5ldyBUSFJFRS5HZW9tZXRyeSgpO1xyXG5nZW9tZXRyeS52ZXJ0aWNlcyA9IFsuLi5ib3R0b21HZW9tZXRyeS52ZXJ0aWNlcywgLi4udG9wR2VvbWV0cnkudmVydGljZXNdO1xyXG5cclxuY29uc3QgYWRkRmFjZXMgPSAoZnMsIG1hcCk9PiB7XHJcbiAgZm9yKGxldCBmIG9mIGZzKSB7XHJcbiAgICBnZW9tZXRyeS5mYWNlcy5wdXNoKG5ldyBUSFJFRS5GYWNlMyhtYXAoZi5hKSwgbWFwKGYuYiksIG1hcChmLmMpKSk7XHJcbiAgfVxyXG4gIGZhY2VzLnB1c2goZ2VvbWV0cnkuZmFjZXMubGVuZ3RoKTtcclxufTtcclxuXHJcbmNvbnN0IG1hcFZlcnRpY2VzID0gKHNyYywgZHN0KT0+IHtcclxuICBjb25zdCBtYXAgPSBbXTtcclxuICBjb25zdCBlcSA9IChhLCBiKT0+IE1hdGguYWJzKGEueC1iLngpK01hdGguYWJzKGEueS1iLnkpK01hdGguYWJzKGEuei1iLnopPDFlLTQ7XHJcbiAgZm9yKGxldCBpPTA7IGk8c3JjLmxlbmd0aDsgKytpKSB7XHJcbiAgICBmb3IobGV0IGo9MDsgajxkc3QubGVuZ3RoOyArK2opIHtcclxuICAgICAgaWYoZXEoc3JjW2ldLCBkc3Rbal0pKSB7XHJcbiAgICAgICAgbWFwW2ldPWo7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIG1hcDtcclxufTtcclxuXHJcbmNvbnN0IGZyb250TWFwID0gbWFwVmVydGljZXMoZnJvbnRHZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkudmVydGljZXMpO1xyXG5jb25zdCBiYWNrTWFwID0gbWFwVmVydGljZXMoYmFja0dlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS52ZXJ0aWNlcyk7XHJcbmNvbnN0IGxlZnRNYXAgPSBtYXBWZXJ0aWNlcyhsZWZ0R2VvbWV0cnkudmVydGljZXMsIGdlb21ldHJ5LnZlcnRpY2VzKTtcclxuY29uc3QgcmlnaHRNYXAgPSBtYXBWZXJ0aWNlcyhyaWdodEdlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS52ZXJ0aWNlcyk7XHJcblxyXG5hZGRGYWNlcyh0b3BHZW9tZXRyeS5mYWNlcywgKGkpPT4gaStib3R0b21HZW9tZXRyeS52ZXJ0aWNlcy5sZW5ndGgpO1xyXG5hZGRGYWNlcyhib3R0b21HZW9tZXRyeS5mYWNlcywgKGkpPT4gaSk7XHJcbmFkZEZhY2VzKGZyb250R2VvbWV0cnkuZmFjZXMsIChpKT0+IGZyb250TWFwW2ldKTtcclxuYWRkRmFjZXMoYmFja0dlb21ldHJ5LmZhY2VzLCAoaSk9PiBiYWNrTWFwW2ldKTtcclxuYWRkRmFjZXMobGVmdEdlb21ldHJ5LmZhY2VzLCAoaSk9PiBsZWZ0TWFwW2ldKTtcclxuYWRkRmFjZXMocmlnaHRHZW9tZXRyeS5mYWNlcywgKGkpPT4gcmlnaHRNYXBbaV0pO1xyXG5mYWNlcy5wb3AoKTtcclxuXHJcblRocmVlVXRpbHMuY29tcHV0ZUZhY2VWZXJ0ZXhVdnMoZ2VvbWV0cnksIGZhY2VzKTtcclxuXHJcbmdlb21ldHJ5LmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7XHJcbi8vZ2VvbWV0cnkuY29tcHV0ZUZhY2VOb3JtYWxzKCk7XHJcbmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaG
13345VyZSgpO1xyXG4vL2dlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ0JveCgpO1xyXG5nZW9tZXRyeS52ZXJ0aWNlc05lZWRVcGRhdGUgPSB0cnVlO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG5cdHJlc1gsXHJcblx0cmVzWSxcclxuXHRyZXNaLFxyXG5cdGZhY2VzLFxyXG5cdGdlb21ldHJ5XHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL21vZGVscy9zaGVldEJsb2NrLmpzIiwiY29uc3QgbW91c2VCdXR0b25zID0ge1xyXG4gIExlZnQ6IDAsXHJcbiAgTWlkZGxlOiAxLFxyXG4gIFJpZ2h0OiAyXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvcHMoKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGVwczogMWUtNCxcclxuICAgIHNraW46IHtcclxuICAgICAgZGVmYXVsdDogJ3Nob3J0LXdoaXRlLWJvb2stdmlldycsXHJcbiAgICB9LFxyXG4gICAgc2NhbGU6IHtcclxuICAgICAgZGVmYXVsdDogMC45LFxyXG4gICAgICBtaW46IDAuOSxcclxuICAgICAgbWF4OiAyLjUsXHJcbiAgICAgIGxldmVsczogN1xyXG4gICAgfSxcclxuICAgIGxpZ2h0aW5nOiB7XHJcbiAgICAgIGRlZmF1bHQ6IDAuNyxcclxuICAgICAgbWluOiAwLFxyXG4gICAgICBtYXg6IDEsXHJcbiAgICAgIGxldmVsczogN1xyXG4gICAgfSxcclxuICAgIHBhbjoge1xyXG4gICAgICBzcGVlZDogNTBcclxuICAgIH0sXHJcbiAgICBsb2FkaW5nQW5pbWF0aW9uOiB7XHJcbiAgICAgIHNraW46IGZhbHNlLFxyXG4gICAgICBib29rOiB0cnVlXHJcbiAgICB9LFxyXG4gICAgYXV0b1Jlc29sdXRpb246IHtcclxuICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgY29lZmZpY2llbnQ6IDEuNVxyXG4gICAgfSxcclxuICAgIG5hcnJvd1ZpZXc6IHtcclxuICAgICAgd2lkdGg6IDUwMFxyXG4gICAgfSxcclxuICAgIGFjdGlvbnM6IHtcclxuICAgICAgY21kWm9vbUluOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVkSW5OYXJyb3c6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY21kWm9vbU91dDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlZEluTmFycm93OiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZERlZmF1bHRab29tOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVkSW5OYXJyb3c6IGZhbHNlLFxyXG4gICAgICAgIHR5cGU6ICdkYmxjbGljaycsXHJcbiAgICAgICAgY29kZTogMFxyXG4gICAgICB9LFxyXG4gICAgICBjbWRUb2M6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZWRJbk5hcnJvdzogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRGYXN0QmFja3dhcmQ6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICBlbmFibGVkSW5OYXJyb3c6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZEJhY2t3YXJkOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVkSW5OYXJyb3c6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZEJpZ0JhY2t3YXJkOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVkSW5OYXJyb3c6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY21kRm9yd2FyZDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlZEluTmFycm93OiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRCaWdGb3J3YXJkOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVkSW5OYXJyb3c6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY21kRmFzdEZvcndhcmQ6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZSxcclxuICAgICAgICBlbmFibGVkSW5OYXJyb3c6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFNhdmU6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZWRJbk5hcnJvdzogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRQcmludDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlZEluTmFycm93OiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRGdWxsU2NyZWVuOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBlbmFibGVkSW5OYXJyb3c6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgd2lkU2V0dGluZ3M6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZWRJbk5hcnJvdzogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRTbWFydFBhbjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlZEluTmFycm93OiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAgY21kU2luZ2xlUGFnZToge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlZEluTmFycm93OiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgYWN0aXZlRm9yTW9iaWxlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRTb3VuZHM6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZWRJbk5hcnJvdzogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY21kU3RhdHM6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZWRJbk5hcnJvdzogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZExpZ2h0aW5nVXA6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZWRJbk5hcnJvdzogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRMaWdodGluZ0Rvd246IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZWRJbk5hcnJvdzogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRQYW5MZWZ0OiB7XHJcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgY21kUGFuUmlnaHQ6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRQYW5VcDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFBhbkRvd246IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBtb3VzZUNtZFJvdGF0ZToge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ21vdXNlZHJhZycsXHJcbiAgICAgICAgY29
13345kZTogbW91c2VCdXR0b25zLlJpZ2h0XHJcbiAgICAgIH0sXHJcbiAgICAgIG1vdXNlQ21kRHJhZ1pvb206IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIHR5cGU6ICdtb3VzZWRyYWcnLFxyXG4gICAgICAgIGNvZGU6IG1vdXNlQnV0dG9ucy5NaWRkbGVcclxuICAgICAgfSxcclxuICAgICAgbW91c2VDbWRQYW46IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIHR5cGU6ICdtb3VzZWRyYWcnLFxyXG4gICAgICAgIGNvZGU6IG1vdXNlQnV0dG9ucy5MZWZ0XHJcbiAgICAgIH0sXHJcbiAgICAgIG1vdXNlQ21kV2hlZWxab29tOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB0eXBlOiAnbW91c2V3aGVlbCcsXHJcbiAgICAgICAgY29kZTogMFxyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaENtZFJvdGF0ZToge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ3RvdWNoZHJhZycsXHJcbiAgICAgICAgY29kZTogM1xyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaENtZFpvb206IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIHR5cGU6ICd0b3VjaGRyYWcnLFxyXG4gICAgICAgIGNvZGU6IDJcclxuICAgICAgfSxcclxuICAgICAgdG91Y2hDbWRQYW46IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIHR5cGU6ICd0b3VjaGRyYWcnLFxyXG4gICAgICAgIGNvZGU6IDFcclxuICAgICAgfSxcclxuICAgICAgdG91Y2hDbWRTd2lwZToge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ3RvdWNoZHJhZycsXHJcbiAgICAgICAgY29kZTogMVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvcHJvcHMvYm9va0NvbnRyb2xsZXIuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgSW1hZ2VCYXNlIGZyb20gJy4vSW1hZ2VCYXNlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJsYW5rSW1hZ2UgZXh0ZW5kcyBJbWFnZUJhc2Uge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCB3aWR0aCwgaGVpZ2h0LCBjb2xvcikge1xyXG4gICAgc3VwZXIoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IpO1xyXG5cclxuICAgIFByb21pc2UucmVzb2x2ZSgpLlxyXG4gICAgICB0aGVuKCgpPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhcnRSZW5kZXIgPSAoKT0+IHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQmxhbmtQYWdlKCk7XHJcbiAgICAgICAgICB0aGlzLmZpbmlzaFJlbmRlcigpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5maW5pc2hMb2FkKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9CbGFua0ltYWdlLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvb2ttYXJrcyB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgaXRlbXMsIGdldFRpdGxlPShpKT0+IGkudGl0bGUsIGdldEl0ZW1zPShpKT0+aS5pdGVtcykge1xyXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICB0aGlzLm1hcCA9IFtdO1xyXG4gICAgdGhpcy5nZXRUaXRsZSA9IGdldFRpdGxlO1xyXG4gICAgdGhpcy5nZXRJdGVtcyA9IGdldEl0ZW1zO1xyXG4gICAgdGhpcy5ub2RlcyA9IHRoaXMubWFwTm9kZXMoaXRlbXMsIHRoaXMubWFwKTtcclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICB0b2dsZTogKGUpPT4ge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBsZXQgbGkgPSAkKGUudGFyZ2V0KTtcclxuICAgICAgICB3aGlsZShsaVswXSAmJiBsaVswXSE9PWNvbnRhaW5lclswXSAmJiAhbGkuaGFzQ2xhc3MoJ2l0ZW0nKSkge1xyXG4gICAgICAgICAgbGkgPSAkKGxpWzBdLnBhcmVudE5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihsaS5oYXNDbGFzcygnaXRlbScpKSB7XHJcbiAgICAgICAgICBsZXQgY21kID0gJChlLnRhcmdldCk7XHJcbiAgICAgICAgICB3aGlsZShjbWRbMF0gJiYgY21kWzBdIT09bGlbMF0gJiYgIWNtZC5oYXNDbGFzcygnY21kJykpIHtcclxuICAgICAgICAgICAgY21kID0gJChjbWRbMF0ucGFyZW50Tm9kZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZihjbWQuaGFzQ2xhc3MoJ2NtZCcpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLm1hcFtsaS5hdHRyKCdkYXRhLWlkJyldO1xyXG4gICAgICAgICAgICBpZihjbWQuaGFzQ2xhc3MoJ3RvZ2xlJykpIHtcclxuICAgICAgICAgICAgICBub2RlLm1pbmltaXplZCA9ICFub2RlLm1pbmltaXplZDtcclxuICAgICAgICAgICAgICBpZihub2RlLm1pbmltaXplZCkge1xyXG4gICAgICAgICAgICAgICAgbGkuZmluZCgndWwnKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIGxpLmZpbmQoJy50b2dsZScpLmFkZENsYXNzKCdtaW5pbWl6ZWQnKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsaS5maW5kKCcudG9nbGUnKS5yZW1vdmVDbGFzcygnbWluaW1pemVkJyk7XHJcbiAgICAgICAgICAgICAgICBsaS5hcHBlbmQoKHRoaXMucmVuZGVyTm9kZShub2RlKS5tYXRjaCgvPHVsLio8XFwvdWw+LykgfHwgWycnXSlbMF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBpZih0aGlzLm9uTmF2aWdhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25OYXZpZ2F0ZShub2RlLml0ZW0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnRhaW5lci5vbignY2xpY2snLCB0aGlzLmJpbmRzLnRvZ2xlKTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lci5vZmYoJ2NsaWNrJywgdGhpcy5iaW5kcy50b2dsZSk7XHJcbiAgICB0aGlzLmNvbnRhaW5lci5odG1sKCcnKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuY29udGFpbmVyLmh0bWwodGhpcy5yZW5kZXJOb2Rlcyh0aGlzLm5vZGVzKSk7XHJcbiAgfVxyXG5cclxuICBmb3JFYWNoKGYsIG5vZGVzPXRoaXMubm9kZXMpIHtcclxuICAgIGZvcihsZXQgbm9kZSBvZiAobm9kZXMgfHwgW10pKSB7X
13345HJcbiAgICAgIGYobm9kZSk7XHJcbiAgICAgIHRoaXMuZm9yRWFjaChmLCBub2RlLmNoaWxkcmVuKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cGFuZCgpIHtcclxuICAgIHRoaXMuZm9yRWFjaCgobik9PiBuLm1pbmltaXplZCA9IGZhbHNlKTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBtaW5pbWl6ZSgpIHtcclxuICAgIHRoaXMuZm9yRWFjaCgobik9PiBuLm1pbmltaXplZCA9IHRydWUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIHJlbmRlck5vZGUobm9kZSkge1xyXG4gICAgcmV0dXJuIFsnPGRpdiBjbGFzcz1cImFyZWFcIj4nLFxyXG4gICAgICBub2RlLmNoaWxkcmVuPyAnPGEgaHJlZj1cIiNcIiBjbGFzcz1cImNtZCB0b2dsZScgKyAobm9kZS5taW5pbWl6ZWQ/ICcgbWluaW1pemVkJzogJycpICsgJ1wiPjxpIGNsYXNzPVwiZmEgZmEtYW5nbGUtcmlnaHRcIj48L2k+PC9hPiAnOiAnPGkgY2xhc3M9XCJ3aGl0ZS1zcGFjZVwiPjwvaT4gJyxcclxuICAgICAgJzxhIGNsYXNzPVwiY21kXCIgdGl0bGU9XCInLCBub2RlLnRpdGxlLCdcIiBocmVmPVwiI1wiPicsIG5vZGUudGl0bGUsICc8L2E+PC9kaXY+JyxcclxuICAgICAgbm9kZS5taW5pbWl6ZWQ/ICcnOiB0aGlzLnJlbmRlck5vZGVzKG5vZGUuY2hpbGRyZW4pXHJcbiAgICBdLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyTm9kZXMobm9kZXMpIHtcclxuICAgIGxldCByZXMgPSBbJzxkaXYgY2xhc3M9XCJib29rbWFya3NcIj4nXTtcclxuICAgIGlmKG5vZGVzICYmIG5vZGVzLmxlbmd0aCkge1xyXG4gICAgICByZXMucHVzaCgnPHVsIGNsYXNzPVwibGV2ZWwtJywgbm9kZXNbMF0ubGV2ZWwsICdcIj4nKTtcclxuICAgICAgZm9yKGxldCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgICAgcmVzLnB1c2goW1xyXG4gICAgICAgICAgJzxsaSBjbGFzcz1cIml0ZW1cIiBkYXRhLWlkPVwiJywgbm9kZS5pZCwnXCI+JyxcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJOb2RlKG5vZGUpLFxyXG4gICAgICAgICAgJzwvbGk+J10uam9pbignJykpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlcy5wdXNoKCc8L3VsPicpO1xyXG4gICAgfVxyXG4gICAgcmVzLnB1c2goJzwvZGl2PicpO1xyXG4gICAgcmV0dXJuIHJlcy5qb2luKCcnKTtcclxuICB9XHJcblxyXG4gIG1hcE5vZGVzKGl0ZW1zLCBtYXA9W10sIGxldmVsPTApIHtcclxuICAgIGxldCBub2RlcyA9IG51bGw7XHJcbiAgICBpZihpdGVtcyAmJiBpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgbm9kZXM9W107XHJcbiAgICAgIGZvcihsZXQgaXRlbSBvZiBpdGVtcykge1xyXG4gICAgICAgIGNvbnN0IGlkID0gbWFwLmxlbmd0aDtcclxuICAgICAgICBtYXAucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB7XHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmdldFRpdGxlKGl0ZW0pLFxyXG4gICAgICAgICAgbGV2ZWwsXHJcbiAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgbWluaW1pemVkOiB0cnVlLFxyXG4gICAgICAgICAgY2hpbGRyZW46IHRoaXMubWFwTm9kZXModGhpcy5nZXRJdGVtcyhpdGVtKSwgbWFwLCBsZXZlbCsxKVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcclxuICAgICAgICBtYXBbaWRdID0gbm9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGVzO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvQm9va21hcmtzLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERldGVjdG9yIHtcclxuXHJcblx0c3RhdGljIGNhbnZhcyA9ICEhIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcblxyXG5cdHN0YXRpYyB3ZWJnbCA9IChmdW5jdGlvbigpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG5cdFx0XHRyZXR1cm4gISEgKHdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQgJiYgKGNhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcpIHx8IGNhbnZhcy5nZXRDb250ZXh0KCdleHBlcmltZW50YWwtd2ViZ2wnKSkpO1xyXG5cdFx0fVxyXG5cdFx0Y2F0Y2ggKGUpIHtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cdH0pKCk7XHJcblxyXG5cdHN0YXRpYyB3b3JrZXJzID0gISEgd2luZG93LldvcmtlcjtcclxuXHJcblx0c3RhdGljIGZpbGVhcGkgPSB3aW5kb3cuRmlsZSAmJiB3aW5kb3cuRmlsZVJlYWRlciAmJiB3aW5kb3cuRmlsZUxpc3QgJiYgd2luZG93LkJsb2I7XHJcblxyXG5cdHN0YXRpYyBnZXRXZWJHTEVycm9yTWVzc2FnZSgpIHtcclxuXHRcdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdGVsZW1lbnQuaWQgPSAnd2ViZ2wtZXJyb3ItbWVzc2FnZSc7XHJcblx0XHRlbGVtZW50LnN0eWxlLmZvbnRGYW1pbHkgPSAnbW9ub3NwYWNlJztcclxuXHRcdGVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTNweCc7XHJcblx0XHRlbGVtZW50LnN0eWxlLmZvbnRXZWlnaHQgPSAnbm9ybWFsJztcclxuXHRcdGVsZW1lbnQuc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcblx0XHRlbGVtZW50LnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZic7XHJcblx0XHRlbGVtZW50LnN0eWxlLmNvbG9yID0gJyMwMDAnO1xyXG5cdFx0ZWxlbWVudC5zdHlsZS5wYWRkaW5nID0gJzEuNWVtJztcclxuXHRcdGVsZW1lbnQuc3R5bGUud2lkdGggPSAnNDAwcHgnO1xyXG5cdFx0ZWxlbWVudC5zdHlsZS5tYXJnaW4gPSAnNWVtIGF1dG8gMCc7XHJcblxyXG5cdFx0aWYgKCFEZXRlY3Rvci53ZWJnbCkge1xyXG5cdFx0XHRlbGVtZW50LmlubmVySFRNTCA9IHdpbmRvdy5XZWJHTFJlbmRlcmluZ0NvbnRleHQgPyBbXHJcblx0XHRcdFx0J1lvdXIgZ3JhcGhpY3MgY2FyZCBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgPGEgaHJlZj1cImh0dHA6Ly9raHJvbm9zLm9yZy93ZWJnbC93aWtpL0dldHRpbmdfYV9XZWJHTF9JbXBsZW1lbnRhdGlvblwiIHN0eWxlPVwiY29sb3I6IzAwMFwiPldlYkdMPC9hPi48YnIgLz4nLFxyXG5cdFx0XHRcdCdGaW5kIG9
133451dCBob3cgdG8gZ2V0IGl0IDxhIGhyZWY9XCJodHRwOi8vZ2V0LndlYmdsLm9yZy9cIiBzdHlsZT1cImNvbG9yOiMwMDBcIj5oZXJlPC9hPi4nXHJcblx0XHRcdF0uam9pbignXFxuJykgOiBbXHJcblx0XHRcdFx0J1lvdXIgYnJvd3NlciBkb2VzIG5vdCBzZWVtIHRvIHN1cHBvcnQgPGEgaHJlZj1cImh0dHA6Ly9raHJvbm9zLm9yZy93ZWJnbC93aWtpL0dldHRpbmdfYV9XZWJHTF9JbXBsZW1lbnRhdGlvblwiIHN0eWxlPVwiY29sb3I6IzAwMFwiPldlYkdMPC9hPi48YnIvPicsXHJcblx0XHRcdFx0J0ZpbmQgb3V0IGhvdyB0byBnZXQgaXQgPGEgaHJlZj1cImh0dHA6Ly9nZXQud2ViZ2wub3JnL1wiIHN0eWxlPVwiY29sb3I6IzAwMFwiPmhlcmU8L2E+LidcclxuXHRcdFx0XS5qb2luKCdcXG4nKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBlbGVtZW50O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFkZEdldFdlYkdMTWVzc2FnZShwYXJhbWV0ZXJzKSB7XHJcblx0XHRsZXQgcGFyZW50LCBpZCwgZWxlbWVudDtcclxuXHRcdHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IHt9O1xyXG5cclxuXHRcdHBhcmVudCA9IHBhcmFtZXRlcnMucGFyZW50IHx8ICQoZG9jdW1lbnQuYm9keSk7XHJcblx0XHRpZCA9IHBhcmFtZXRlcnMuaWQgfHwgJ29sZGllJztcclxuXHJcblx0XHRlbGVtZW50ID0gRGV0ZWN0b3IuZ2V0V2ViR0xFcnJvck1lc3NhZ2UoKTtcclxuXHRcdC8vZWxlbWVudC5pZCA9IGlkO1xyXG5cclxuXHRcdHBhcmVudC5hcHBlbmQoZWxlbWVudCk7XHJcblx0fVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9EZXRlY3Rvci5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvY01vdXNlU2ltdWxhdG9yIHtcclxuXHJcbiAgc3RhdGljIEhPVkVSID0gJ1NJTVVMQVRFRC1IT1ZFUic7XHJcbiAgc3RhdGljIEFDVElWRSA9ICdTSU1VTEFURUQtQUNUSVZFJztcclxuXHJcbiAgY29uc3RydWN0b3IoakZyYW1lLCBlbGVtZW50LCBiRWxlbWVudD1kb2N1bWVudC5ib2R5KSB7XHJcbiAgICB0aGlzLmpGcmFtZSA9IGpGcmFtZTtcclxuICAgIHRoaXMud25kID0gakZyYW1lWzBdLmNvbnRlbnRXaW5kb3c7XHJcbiAgICB0aGlzLmRvYyA9IGpGcmFtZVswXS5jb250ZW50RG9jdW1lbnQ7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50IHx8IGRvYy5ib2R5O1xyXG4gICAgdGhpcy5iRWxlbWVudCA9IGJFbGVtZW50O1xyXG4gICAgdGhpcy5yZXNlbmRQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWZhdWx0UmVzZW5kUHJvcGVydGllcygpO1xyXG4gICAgdGhpcy51bmRlZmluZWRQcm9wZXJ0aWVzID0gdGhpcy5nZXREZWZhdWx0VW5kZWZpbmVkUHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5jdXJzb3JzID0gW107XHJcbiAgICB0aGlzLm9uRG9jQ2hhbmdlQ2xicyA9IFtdO1xyXG4gICAgY29uc3QgdGVybXMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZmluZDogJzpob3ZlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlOiAnLicrRG9jTW91c2VTaW11bGF0b3IuSE9WRVJcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbmQ6ICc6YWN0aXZlJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2U6ICcuJytEb2NNb3VzZVNpbXVsYXRvci5BQ1RJVkVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF07XHJcbiAgICBsZXQgc3R5bGUgPSBbJzxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj4nXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kb2Muc3R5bGVTaGVldHMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgbGV0IHNzID0gdGhpcy5kb2Muc3R5bGVTaGVldHNbaV07XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc3MuY3NzUnVsZXMubGVuZ3RoOyArK2opIHtcclxuICAgICAgICBsZXQgciA9IHNzLmNzc1J1bGVzW2pdLCBjc3NUZXh0O1xyXG4gICAgICAgIGZvcihsZXQgdGVybSBvZiB0ZXJtcykge1xyXG4gICAgICAgICAgaWYgKH5yLnNlbGVjdG9yVGV4dC5pbmRleE9mKHRlcm0uZmluZCkpIHtcclxuICAgICAgICAgICAgY3NzVGV4dCA9IChjc3NUZXh0IHx8IHIuY3NzVGV4dCkucmVwbGFjZShuZXcgUmVnRXhwKHRlcm0uZmluZCwgJ2cnKSwgdGVybS5yZXBsYWNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoY3NzVGV4dCkge1xyXG4gICAgICAgICAgc3R5bGUucHVzaChjc3NUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHN0eWxlLnB1c2goJzwvc3R5bGU+Jyk7XHJcbiAgICAkKHRoaXMuZG9jLmhlYWQpLmFwcGVuZCgkKHN0eWxlLmpvaW4oJycpKSk7XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0Q29vcmRzKHgsIHkpIHtcclxuICAgIGNvbnN0IGpFbGVtZW50ID0gJCh0aGlzLmVsZW1lbnQpO1xyXG4gICAgY29uc3Qgb2Zmc2V0ID0gakVsZW1lbnQub2Zmc2V0KCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB4OiBvZmZzZXQubGVmdCtqRWxlbWVudC53aWR0aCgpKngsXHJcbiAgICAgIHk6IG9mZnNldC50b3ArakVsZW1lbnQuaGVpZ2h0KCkqKDEteSlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyRXZlbnQoZWxlbWVudCwgZSwgcCwgdHlwZSwgYWR2YW5jZWRQcm9wcykge1xyXG4gICAgY29uc3QgcHJvcHMgPSB7fTtcclxuICAgIGZvcihsZXQgbiBvZiB0aGlzLnJlc2VuZFByb3BlcnRpZXMpIHtcclxuICAgICAgcHJvcHNbbl0gPSBlW25dO1xyXG4gICAgfVxyXG4gICAgZm9yKGxldCBuIG9mIHRoaXMudW5kZWZpbmVkUHJvcGVydGllcykge1xyXG4gICAgICBwcm9wc1tuXSA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGZvcihsZXQgbiBpbiBhZHZhbmNlZFByb3BzKSB7XHJcbiAgICAgIGlmKGFkdmFuY2VkUHJvcHMuaGFzT3duUHJvcGVydHkobikpIHtcclxuICAgICAgICBwcm9wc1tuXSA9IGFkdmFuY2VkUHJvcHNbbl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHByb3BzLnZpZXcgPSB0aGlzLnduZDtcclxuICAgIHByb3BzLnBhZ2VYID0gcC54O1xyXG4gICAgcHJvcHMucGFnZVkgPSBwLnk7XHJcbiAgICBjb25zdCBqRSA9ICQuRXZlbnQodHlwZSwgcHJvcHMpO1xyXG4gICAgakUudGltZVN0YW1wID0gZS50aW1lU3RhbXA7XHJcbiAgICAkKGVsZW1lbnQpLnRyaWdnZXIoakUpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2xhc3MoZWxlbWVudCwgbmFtZSkge1xyXG4gICAgJChlbGVtZW50KS5hZGRDbGFzcyhuYW1lKTtcclxuICAgIGNvbnN0IHN0eWxlID0gdGhpcy53bmQuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcclxuICAgIHRoaXMuY3Vyc29ycy5wdXNoKCQodGhpcy5iRWxlbWVudCkuY3NzKCdjdXJzb3InKSk7XHJcbiAgICAkKHRoaXMuYkVsZW1lbnQpLmNzcygnY3
13345Vyc29yJywgc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnY3Vyc29yJykpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2xhc3MoZWxlbWVudCwgbmFtZSkge1xyXG4gICAgJChlbGVtZW50KS5yZW1vdmVDbGFzcyhuYW1lKTtcclxuICAgICQodGhpcy5iRWxlbWVudCkuY3NzKCdjdXJzb3InLCB0aGlzLmN1cnNvcnMucG9wKCkpO1xyXG4gIH1cclxuXHJcbiAgZW50ZXJFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgIHRoaXMuYWRkQ2xhc3MoZWxlbWVudCwgRG9jTW91c2VTaW11bGF0b3IuSE9WRVIpO1xyXG4gIH1cclxuXHJcbiAgbGVhdmVFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgIHRoaXMucmVtb3ZlQ2xhc3MoZWxlbWVudCwgRG9jTW91c2VTaW11bGF0b3IuSE9WRVIpO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgIHRoaXMuYWRkQ2xhc3MoZWxlbWVudCwgRG9jTW91c2VTaW11bGF0b3IuQUNUSVZFKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGVFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgIHRoaXMucmVtb3ZlQ2xhc3MoZWxlbWVudCwgRG9jTW91c2VTaW11bGF0b3IuQUNUSVZFKTtcclxuICB9XHJcblxyXG4gIGFkZERvY0NoYW5nZUNsYihjbGIpIHtcclxuICAgIHRoaXMub25Eb2NDaGFuZ2VDbGJzLnB1c2goY2xiKTtcclxuICB9XHJcblxyXG4gIG5vdGlmeSgpIHtcclxuICAgIGZvcihsZXQgY2xiIG9mIHRoaXMub25Eb2NDaGFuZ2VDbGJzKSB7XHJcbiAgICAgIGNsYih0aGlzLnduZCwgdGhpcy5kb2MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZWxlbWVudEZyb21Qb2ludChwKSB7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMuZG9jLmJvZHksIG5leHQgPSB0cnVlO1xyXG4gICAgd2hpbGUobmV4dCkge1xyXG4gICAgICBuZXh0ID0gZmFsc2U7XHJcbiAgICAgIGZvcihsZXQgaT0wOyBpPG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZS5jaGlsZE5vZGVzW2ldO1xyXG4gICAgICAgIGlmKGNoaWxkIGluc3RhbmNlb2YgdGhpcy53bmQuRWxlbWVudCkge1xyXG4gICAgICAgICAgY29uc3QgakMgPSAkKGNoaWxkKSwgb2Zmc2V0ID0gakMub2Zmc2V0KCksIGhlaWdodCA9IGpDLmhlaWdodCgpLCB3aWR0aCA9IGpDLndpZHRoKCk7XHJcbiAgICAgICAgICBpZihwLng+b2Zmc2V0LmxlZnQgJiYgcC54PG9mZnNldC5sZWZ0K3dpZHRoICYmIHAueT5vZmZzZXQudG9wICYmIHAueTxvZmZzZXQudG9wK2hlaWdodCkge1xyXG4gICAgICAgICAgICBub2RlID0gY2hpbGQ7XHJcbiAgICAgICAgICAgIG5leHQgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBub2RlO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWxlbWVudChwKSB7XHJcbiAgICBjb25zdCBvZmYwID0gdGhpcy5qRnJhbWUub2Zmc2V0KCk7XHJcbiAgICB0aGlzLmpGcmFtZS5vZmZzZXQoe2xlZnQ6IDAuNSp3aW5kb3cuaW5uZXJXaWR0aC1wLngsIHRvcDogMC41KndpbmRvdy5pbm5lckhlaWdodC1wLnl9KTtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5kb2MuZWxlbWVudEZyb21Qb2ludChwLngsIHAueSk7XHJcbiAgICBpZighZWxlbWVudCkgeyAvLyBpdCBpc24ndCBhIGpva2UgaXQncyBJRVxyXG4gICAgICBlbGVtZW50ID0gdGhpcy5kb2MuZWxlbWVudEZyb21Qb2ludChwLngsIHAueSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmpGcmFtZS5vZmZzZXQob2ZmMCk7XHJcbiAgICByZXR1cm4gZWxlbWVudD8gZWxlbWVudDogdGhpcy5lbGVtZW50RnJvbVBvaW50KHApO1xyXG4gIH1cclxuXHJcbiAgc2ltdWxhdGUoZSwgZG9jLCB4LCB5KSB7XHJcbiAgICBjb25zdCBwID0gdGhpcy5jb252ZXJ0Q29vcmRzKHgsIHkpLFxyXG4gICAgICAgICAgZWxlbWVudCA9IGRvYz09PXRoaXMuZG9jPyB0aGlzLmdldEVsZW1lbnQocCk6IHVuZGVmaW5lZDtcclxuICAgIGxldCB0cmlnZ2VyID0gZWxlbWVudCAhPT0gdW5kZWZpbmVkLCBub3RpZnkgPSBmYWxzZTtcclxuXHJcbiAgICBzd2l0Y2goZS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ21vdXNlZG93bic6IHtcclxuICAgICAgICBpZih0aGlzLmNhcEVsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZUVsZW1lbnQodGhpcy5jYXBFbGVtZW50KTtcclxuICAgICAgICAgIG5vdGlmeSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FwRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgaWYodGhpcy5jYXBFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlRWxlbWVudCh0aGlzLmNhcEVsZW1lbnQpO1xyXG4gICAgICAgICAgbm90aWZ5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnbW91c2V1cCc6IHtcclxuICAgICAgICBpZih0aGlzLmNhcEVsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZUVsZW1lbnQodGhpcy5jYXBFbGVtZW50KTtcclxuICAgICAgICAgIG5vdGlmeSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGltZVN0YW1wID0gZS50aW1lU3RhbXA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnY2xpY2snOiB7XHJcbiAgICAgICAgdHJpZ2dlciA9IGVsZW1lbnQgJiYgdGhpcy5jYXBFbGVtZW50ID09PSBlbGVtZW50Oy8vICYmIGUudGltZVN0YW1wID09PSB0aGlzLnRpbWVTdGFtcDtcclxuICAgICAgICB0aGlzLmNhcEVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnbW91c2VlbnRlcic6XHJcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XHJcbiAgICAgIGNhc2UgJ21vdXNlbW92ZSc6IHtcclxuICAgICAgICBsZXQgbGVhdmVkID0gbnVsbDtcclxuICAgICAgICBpZih0aGlzLmhvdkVsZW1lbnQgIT09IGVsZW1lbnQgJiYgdGhpcy5ob3ZFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCh0aGlzLmhvdkVsZW1lbnQsIGUsIHAsICdtb3VzZW91dCcsIHtyZWxhdGVkVGFyZ2V0OiBlbGVtZW50PyBlbGVtZW50OiBudWxsfSk7XHJcbiAgICAgICAgICB0aGlzLmxlYXZlRWxlbWVudCh0aGlzLmhvdkVsZW1lbnQpO1xyXG4gICAgICAgICAgbGVhdmVkID0gdGhpcy5ob3ZFbGVtZW50O1xyXG4gICAgICAgICAgdGhpcy5ob3ZFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgbm90aWZ5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoIXRoaXMuaG92RWxlbWVudCAmJiBlbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudChlbGVtZW50LCBlLCBwLCAnbW91c2VvdmVyJywge3JlbGF0ZWRUYXJnZXQ6IGxlYXZlZH0pO1xyXG4gICAgICAgICAgdGhpcy5lbnRlckVsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgICAgICB0aGlzLmhvdkVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgICAgbm90aWZ5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJpZ2dlciA9IGVsZW1lbnQgJiYgZS50eXBlID09PSAnbW91c2Vtb3ZlJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdtb3VzZWxlYXZlJzpcclxuICAgICAgY2FzZSAnbW91c2VvdXQnOiB7XHJcbiAgICAgICAgaWYodGhpcy5ob3ZFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnRyaWdnZXJFdmVudCh0aGlzLmhvdkVsZW1lbnQsIGUsIHAsICdtb3VzZW91dCcsIHtyZWxhdGVkVGFyZ2V0OiBlLnJlbGF0ZWRUYXJnZXR9KTtcclxuICAgICAgICAgI
13345HRoaXMubGVhdmVFbGVtZW50KHRoaXMuaG92RWxlbWVudCk7XHJcbiAgICAgICAgICB0aGlzLmhvdkVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBub3RpZnkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmlnZ2VyID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHRyaWdnZXIpIHtcclxuICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZWxlbWVudCwgZSwgcCwgZS50eXBlKTtcclxuICAgIH1cclxuICAgIGlmKG5vdGlmeSkge1xyXG4gICAgICB0aGlzLm5vdGlmeSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdFVuZGVmaW5lZFByb3BlcnRpZXMoKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAnY2xpZW50WCcsXHJcbiAgICAgICdjbGllbnRZJyxcclxuICAgICAgJ29mZnNldFgnLFxyXG4gICAgICAnb2Zmc2V0WScsXHJcbiAgICAgICdzY3JlZW5YJyxcclxuICAgICAgJ3NjcmVlblknXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdFJlc2VuZFByb3BlcnRpZXMoKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAnYWx0S2V5JyxcclxuICAgICAgJ2J1YmJsZXMnLFxyXG4gICAgICAnYnV0dG9uJyxcclxuICAgICAgJ2J1dHRvbnMnLFxyXG4gICAgICAnY2FuY2VsYWJsZScsXHJcbiAgICAgICdjaGFuZ2VkVG91Y2hlcycsXHJcbiAgICAgICdjaGFyJyxcclxuICAgICAgJ2NoYXJDb2RlJyxcclxuICAgICAgJ2N0cmxLZXknLFxyXG4gICAgICAnZGF0YScsXHJcbiAgICAgICdkZXRhaWwnLFxyXG4gICAgICAnZXZlbnRQaGFzZScsXHJcbiAgICAgICdpc0RlZmF1bHRQcmV2ZW50ZWQnLFxyXG4gICAgICAna2V5JyxcclxuICAgICAgJ2tleUNvZGUnLFxyXG4gICAgICAnbWV0YUtleScsXHJcbiAgICAgICdwb2ludGVySWQnLFxyXG4gICAgICAncG9pbnRlclR5cGUnLFxyXG4gICAgICAnc2hpZnRLZXknLFxyXG4gICAgICAndGFyZ2V0VG91Y2hlcycsXHJcbiAgICAgICd0b3VjaGVzJyxcclxuICAgICAgJ3doaWNoJ1xyXG4gICAgXTtcclxuICB9XHJcblxyXG59XHJcblxyXG4vKlxyXG5hbHRLZXksXHJcbmJ1YmJsZXMsXHJcbmJ1dHRvbixcclxuYnV0dG9ucyxcclxuY2FuY2VsYWJsZSxcclxuY2hhbmdlZFRvdWNoZXMsXHJcbmNoYXIsXHJcbmNoYXJDb2RlLFxyXG5jbGllbnRYLFxyXG5jbGllbnRZLFxyXG5jdHJsS2V5LFxyXG5jdXJyZW50VGFyZ2V0LFxyXG5kYXRhLFxyXG5kZWxlZ2F0ZVRhcmdldCxcclxuZGV0YWlsLFxyXG5ldmVudFBoYXNlLFxyXG5oYW5kbGVPYmosXHJcbmlzRGVmYXVsdFByZXZlbnRlZCxcclxua2V5LFxyXG5rZXlDb2RlLFxyXG5tZXRhS2V5LFxyXG5vZmZzZXRYLFxyXG5vZmZzZXRZLFxyXG5vcmlnaW5hbEV2ZW50LFxyXG5wYWdlWCxcclxucGFnZVksXHJcbnBvaW50ZXJJZCxcclxucG9pbnRlclR5cGUsXHJcbnJlbGF0ZWRUYXJnZXQsXHJcbnNjcmVlblgsXHJcbnNjcmVlblksXHJcbnNoaWZ0S2V5LFxyXG50YXJnZXQsXHJcbnRhcmdldFRvdWNoZXMsXHJcbnRpbWVTdGFtcCxcclxudG9FbGVtZW50LFxyXG50b3VjaGVzLFxyXG50eXBlLFxyXG52aWV3LFxyXG53aGljaFxyXG4qL1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Eb2NNb3VzZVNpbXVsYXRvci5qcyIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbTJJbWFnZSB7XG5cbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIGNhY2hlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy53aW5kb3cgPSB3bmQ7XG4gICAgdGhpcy5kb2N1bWVudCA9IGRvYztcbiAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG5cbiAgICBjb25zdCB1dGlsID0gbmV3VXRpbCgpO1xuICAgIGNvbnN0IGlubGluZXIgPSBuZXdJbmxpbmVyKCk7XG4gICAgY29uc3QgZm9udEZhY2VzID0gbmV3Rm9udEZhY2VzKCk7XG4gICAgY29uc3QgaW1hZ2VzID0gbmV3SW1hZ2VzKCk7XG5cbiAgICB0aGlzLnRvU3ZnID0gdG9Tdmc7XG4gICAgdGhpcy50b1BuZyA9IHRvUG5nO1xuICAgIHRoaXMudG9KcGVnID0gdG9KcGVnO1xuICAgIHRoaXMudG9CbG9iID0gdG9CbG9iO1xuICAgIHRoaXMudG9QaXhlbERhdGEgPSB0b1BpeGVsRGF0YTtcbiAgICB0aGlzLmltcGwgPSB7XG4gICAgICAgICAgICAgICAgICBmb250RmFjZXM6IGZvbnRGYWNlcyxcbiAgICAgICAgICAgICAgICAgIGltYWdlczogaW1hZ2VzLFxuICAgICAgICAgICAgICAgICAgdXRpbDogdXRpbCxcbiAgICAgICAgICAgICAgICAgIGlubGluZXI6IGlubGluZXJcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5maWx0ZXIgLSBTaG91bGQgcmV0dXJuIHRydWUgaWYgcGFzc2VkIG5vZGUgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXRcbiAgICAgKiAgICAgICAgICAoZXhjbHVkaW5nIG5vZGUgbWVhbnMgZXhjbHVkaW5nIGl0J3MgY2hpbGRyZW4gYXMgd2VsbCkuIE5vdCBjYWxsZWQgb24gdGhlIHJvb3Qgbm9kZS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5iZ2NvbG9yIC0gY29sb3IgZm9yIHRoZSBiYWNrZ3JvdW5kLCBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLndpZHRoIC0gd2lkdGggdG8gYmUgYXBwbGllZCB0byBub2RlIGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdGlvbnMuaGVpZ2h0IC0gaGVpZ2h0IHRvIGJlIGFwcGxpZWQgdG8gbm9kZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLnN0eWxlIC0gYW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIG5vZGUncyBzdHlsZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLnF1YWxpdHkgLSBhIE51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5IChhcHBsaWNhYmxlIHRvIEpQRUcgb25seSksXG4gICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gMS4wLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBTVkcgaW1hZ2UgZGF0YSBVUkxcbiAgICAgKiAqL1xuXG4gICAgZnVuY3Rpb24gdG9Tdmcobm9kZSwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmVOb2RlKG5vZGUsIG9wdGlvbnMuZmlsdGVyLCB0cnVlKTtcbiAgICAgICAgICAgI
13345H0pXG4gICAgICAgICAgICAudGhlbihlbWJlZEZvbnRzKVxuICAgICAgICAgICAgLnRoZW4oaW5saW5lSW1hZ2VzKVxuICAgICAgICAgICAgLnRoZW4oYXBwbHlPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNsb25lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTdmdEYXRhVXJpKGNsb25lLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLndpZHRoIHx8IHV0aWwud2lkdGgobm9kZSksXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVpZ2h0IHx8IHV0aWwuaGVpZ2h0KG5vZGUpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5T3B0aW9ucyhjbG9uZSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmdjb2xvcikgY2xvbmUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iZ2NvbG9yO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy53aWR0aCkgY2xvbmUuc3R5bGUud2lkdGggPSBvcHRpb25zLndpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlaWdodCkgY2xvbmUuc3R5bGUuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgKyAncHgnO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdHlsZSlcbiAgICAgICAgICAgICAgICBzZWxmLndpbmRvdy5PYmplY3Qua2V5cyhvcHRpb25zLnN0eWxlKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZS5zdHlsZVtwcm9wZXJ0eV0gPSBvcHRpb25zLnN0eWxlW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zLCBAc2VlIHtAbGluayB0b1N2Z31cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgVWludDhBcnJheSBjb250YWluaW5nIFJHQkEgcGl4ZWwgZGF0YS5cbiAgICAgKiAqL1xuICAgIGZ1bmN0aW9uIHRvUGl4ZWxEYXRhKG5vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICB1dGlsLndpZHRoKG5vZGUpLFxuICAgICAgICAgICAgICAgICAgICB1dGlsLmhlaWdodChub2RlKVxuICAgICAgICAgICAgICAgICkuZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9ucywgQHNlZSB7QGxpbmsgdG9Tdmd9XG4gICAgICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFBORyBpbWFnZSBkYXRhIFVSTFxuICAgICAqICovXG4gICAgZnVuY3Rpb24gdG9Qbmcobm9kZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zIHx8IHt9KVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNhbnZhcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnMsIEBzZWUge0BsaW5rIHRvU3ZnfVxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBKUEVHIGltYWdlIGRhdGEgVVJMXG4gICAgICogKi9cbiAgICBmdW5jdGlvbiB0b0pwZWcobm9kZSwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucylcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIG9wdGlvbnMucXVhbGl0eSB8fCAxLjApO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zLCBAc2VlIHtAbGluayB0b1N2Z31cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgUE5HIGltYWdlIGJsb2JcbiAgICAgKiAqL1xuICAgIGZ1bmN0aW9uIHRvQmxvYihub2RlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBkcmF3KG5vZGUsIG9wdGlvbnMgfHwge30pXG4gICAgICAgICAgICAudGhlbih1dGlsLmNhbnZhc1RvQmxvYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZHJhdyhkb21Ob2RlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0b1N2Zyhkb21Ob2RlLCBvcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4odXRpbC5tYWtlSW1hZ2UpXG4gICAgICAgICAgICAudGhlbih1dGlsLmRlbGF5KDEwMCkpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYW52YXMgPSBuZXdDYW52YXMoZG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgY2FudmFzLmdldENvbnRleHQoJzJkJykuZHJhd0ltYWdlKGltYWdlLCAwLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FudmFzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnVuY3Rpb24gbmV3Q2FudmFzKGRvbU5vZGUp
13345IHtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IHNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSBvcHRpb25zLndpZHRoIHx8IHV0aWwud2lkdGgoZG9tTm9kZSk7XG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgdXRpbC5oZWlnaHQoZG9tTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJnY29sb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5iZ2NvbG9yO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmVOb2RlKG5vZGUsIGZpbHRlciwgcm9vdCkge1xuICAgICAgICBpZiAoIXJvb3QgJiYgZmlsdGVyICYmICFmaWx0ZXIobm9kZSkpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpXG4gICAgICAgICAgICAudGhlbihtYWtlTm9kZUNvcHkpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmVDaGlsZHJlbihub2RlLCBjbG9uZSwgZmlsdGVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0Nsb25lKG5vZGUsIGNsb25lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIG1ha2VOb2RlQ29weShub2RlKSB7XG4gICAgICAgICAgICBpZiAodXRpbC5pc0NhbnZhcyhub2RlKSkgcmV0dXJuIHV0aWwubWFrZUltYWdlKG5vZGUudG9EYXRhVVJMKCkpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNsb25lQ2hpbGRyZW4ob3JpZ2luYWwsIGNsb25lLCBmaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gb3JpZ2luYWwuY2hpbGROb2RlcztcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xvbmUpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2xvbmVDaGlsZHJlbkluT3JkZXIoY2xvbmUsIHV0aWwuYXNBcnJheShjaGlsZHJlbiksIGZpbHRlcilcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbkluT3JkZXIocGFyZW50LCBjaGlsZHJlbiwgZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gZG9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZU5vZGUoY2hpbGQsIGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNoaWxkQ2xvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRDbG9uZSkgcGFyZW50LmFwcGVuZENoaWxkKGNoaWxkQ2xvbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzQ2xvbmUob3JpZ2luYWwsIGNsb25lKSB7XG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNFbGVtZW50KGNsb25lKSkgcmV0dXJuIGNsb25lO1xuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgICAgICAudGhlbihjbG9uZVN0eWxlKVxuICAgICAgICAgICAgICAgIC50aGVuKGNsb25lUHNldWRvRWxlbWVudHMpXG4gICAgICAgICAgICAgICAgLnRoZW4oY29weVVzZXJJbnB1dClcbiAgICAgICAgICAgICAgICAudGhlbihmaXhTdmcpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNsb25lU3R5bGUoKSB7XG4gICAgICAgICAgICAgICAgY29weVN0eWxlKHNlbGYud2luZG93LmdldENvbXB1dGVkU3R5bGUob3JpZ2luYWwpLCBjbG9uZS5zdHlsZSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb3B5U3R5bGUoc291cmNlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jc3NUZXh0KSB0YXJnZXQuY3NzVGV4dCA9IHNvdXJjZS5jc3NUZXh0O1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGNvcHlQcm9wZXJ0aWVzKHNvdXJjZSwgdGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5hc0FycmF5KHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmdldFByb3BlcnR5VmFsdWUobmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgI
13345H0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnRzKCkge1xuICAgICAgICAgICAgICAgIFsnOmJlZm9yZScsICc6YWZ0ZXInXS5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lUHNldWRvRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNsb25lUHNldWRvRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gc2VsZi53aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09ICcnIHx8IGNvbnRlbnQgPT09ICdub25lJykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHV0aWwudWlkKCk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLmNsYXNzTmFtZSA9IGNsb25lLmNsYXNzTmFtZSArICcgJyArIGNsYXNzTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gc2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgICAgICAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlKGNsYXNzTmFtZSwgZWxlbWVudCwgc3R5bGUpKTtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xhc3NOYW1lLCBlbGVtZW50LCBzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSAnLicgKyBjbGFzc05hbWUgKyAnOicgKyBlbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3NzVGV4dCA9IHN0eWxlLmNzc1RleHQgPyBmb3JtYXRDc3NUZXh0KHN0eWxlKSA6IGZvcm1hdENzc1Byb3BlcnRpZXMoc3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc2VsZWN0b3IgKyAneycgKyBjc3NUZXh0ICsgJ30nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZm9ybWF0Q3NzVGV4dChzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmNzc1RleHQgKyAnIGNvbnRlbnQ6ICcgKyBjb250ZW50ICsgJzsnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmb3JtYXRDc3NQcm9wZXJ0aWVzKHN0eWxlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5hc0FycmF5KHN0eWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZvcm1hdFByb3BlcnR5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignOyAnKSArICc7JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgKyAnOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkgPyAnICFpbXBvcnRhbnQnIDogJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29weVVzZXJJbnB1dCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc1RleHRBcmVhKG9yaWdpbmFsKSkgY2xvbmUuaW5uZXJIVE1MID0gb3JpZ2luYWwudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNJbnB1dChvcmlnaW5hbCkpIGNsb25lLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIG9yaWdpbmFsLnZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZml4U3ZnKCkge1xuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc1NWRyhjbG9uZSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNTVkdSZWN0KGNsb25lKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIFsnd2lkdGgnLCAnaGVpZ2h0J10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xvbmUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICBjbG9uZS5zdHlsZS5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVtYmVkRm9udHMobm9kZSkge1xuICAgICAgICByZXR1cm4gZm9udEZhY2VzLnJlc29sdmVBbGwoKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNzc1RleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZU5vZGUgPSBzZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChzdHlsZU5vZGUpO1xuICAgICAgICAgICAgICAgI
13345HN0eWxlTm9kZS5hcHBlbmRDaGlsZChzZWxmLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlubGluZUltYWdlcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBpbWFnZXMuaW5saW5lQWxsKG5vZGUpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlU3ZnRGF0YVVyaShub2RlLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYud2luZG93LlhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhub2RlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbih1dGlsLmVzY2FwZVhodG1sKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHhodG1sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsnZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJyxcbiAgICAgICAgICAgICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInLCB3aWR0aCwgJ1wiIGhlaWdodD1cIicsIGhlaWdodCwgJ1wiPicsXG4gICAgICAgICAgICAgICAgICAnPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nLCB4aHRtbCwgJzwvZm9yZWlnbk9iamVjdD4nLFxuICAgICAgICAgICAgICAgICc8L3N2Zz4nXS5qb2luKCcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5ld1V0aWwoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlc2NhcGU6IGVzY2FwZSxcbiAgICAgICAgICAgIHBhcnNlRXh0ZW5zaW9uOiBwYXJzZUV4dGVuc2lvbixcbiAgICAgICAgICAgIG1pbWVUeXBlOiBtaW1lVHlwZSxcbiAgICAgICAgICAgIGRhdGFBc1VybDogZGF0YUFzVXJsLFxuICAgICAgICAgICAgaXNEYXRhVXJsOiBpc0RhdGFVcmwsXG4gICAgICAgICAgICBjYW52YXNUb0Jsb2I6IGNhbnZhc1RvQmxvYixcbiAgICAgICAgICAgIHJlc29sdmVVcmw6IHJlc29sdmVVcmwsXG4gICAgICAgICAgICBnZXRBbmRFbmNvZGU6IGdldEFuZEVuY29kZSxcbiAgICAgICAgICAgIHV
13345pZDogdWlkKCksXG4gICAgICAgICAgICBkZWxheTogZGVsYXksXG4gICAgICAgICAgICBhc0FycmF5OiBhc0FycmF5LFxuICAgICAgICAgICAgZXNjYXBlWGh0bWw6IGVzY2FwZVhodG1sLFxuICAgICAgICAgICAgbWFrZUltYWdlOiBtYWtlSW1hZ2UsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcblxuICAgICAgICAgICAgaXNFbGVtZW50LFxuICAgICAgICAgICAgaXNDYW52YXMsXG4gICAgICAgICAgICBpc1RleHRBcmVhLFxuICAgICAgICAgICAgaXNJbnB1dCxcbiAgICAgICAgICAgIGlzU1ZHLFxuICAgICAgICAgICAgaXNTVkdSZWN0LFxuICAgICAgICAgICAgaXNJbWFnZVxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIG1pbWVzKCkge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIE9ubHkgV09GRiBhbmQgRU9UIG1pbWUgdHlwZXMgZm9yIGZvbnRzIGFyZSAncmVhbCdcbiAgICAgICAgICAgICAqIHNlZSBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzL21lZGlhLXR5cGVzLnhodG1sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IFdPRkYgPSAnYXBwbGljYXRpb24vZm9udC13b2ZmJztcbiAgICAgICAgICAgIGNvbnN0IEpQRUcgPSAnaW1hZ2UvanBlZyc7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ3dvZmYnOiBXT0ZGLFxuICAgICAgICAgICAgICAgICd3b2ZmMic6IFdPRkYsXG4gICAgICAgICAgICAgICAgJ3R0Zic6ICdhcHBsaWNhdGlvbi9mb250LXRydWV0eXBlJyxcbiAgICAgICAgICAgICAgICAnZW90JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JyxcbiAgICAgICAgICAgICAgICAncG5nJzogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICAgJ2pwZyc6IEpQRUcsXG4gICAgICAgICAgICAgICAgJ2pwZWcnOiBKUEVHLFxuICAgICAgICAgICAgICAgICdnaWYnOiAnaW1hZ2UvZ2lmJyxcbiAgICAgICAgICAgICAgICAndGlmZic6ICdpbWFnZS90aWZmJyxcbiAgICAgICAgICAgICAgICAnc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcGFyc2VFeHRlbnNpb24odXJsKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IC9cXC4oW15cXC5cXC9dKj8pJC9nLmV4ZWModXJsKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkgcmV0dXJuIG1hdGNoWzFdO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtaW1lVHlwZSh1cmwpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHBhcnNlRXh0ZW5zaW9uKHVybCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHJldHVybiBtaW1lcygpW2V4dGVuc2lvbl0gfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc0RhdGFVcmwodXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdXJsLnNlYXJjaCgvXihkYXRhOikvKSAhPT0gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB0b0Jsb2IoY2FudmFzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBzZWxmLndpbmRvdy5hdG9iKGNhbnZhcy50b0RhdGFVUkwoKS5zcGxpdCgnLCcpWzFdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBiaW5hcnlTdHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmFyeUFycmF5ID0gbmV3IHNlbGYud2luZG93LlVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGJpbmFyeUFycmF5W2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBzZWxmLndpbmRvdy5CbG9iKFtiaW5hcnlBcnJheV0sIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3BuZydcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMpIHtcbiAgICAgICAgICAgIGlmIChjYW52YXMudG9CbG9iKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZS
13345hmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYW52YXMudG9CbG9iKHJlc29sdmUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdG9CbG9iKGNhbnZhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZXNvbHZlVXJsKHVybCwgYmFzZVVybCkge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gc2VsZi5kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBkb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICAgICAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoYmFzZSk7XG4gICAgICAgICAgICBjb25zdCBhID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgICAgICAgICAgYmFzZS5ocmVmID0gYmFzZVVybDtcbiAgICAgICAgICAgIGEuaHJlZiA9IHVybDtcbiAgICAgICAgICAgIHJldHVybiBhLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB1aWQoKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndScgKyBmb3VyUmFuZG9tQ2hhcnMoKSArIGluZGV4Kys7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmb3VyUmFuZG9tQ2hhcnMoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82MjQ4NzIyLzI1MTkzNzMgKi9cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgnMDAwMCcgKyAoc2VsZi53aW5kb3cuTWF0aC5yYW5kb20oKSAqIHNlbGYud2luZG93Lk1hdGgucG93KDM2LCA0KSA8PCAwKS50b1N0cmluZygzNikpLnNsaWNlKC00KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbWFrZUltYWdlKHVyaSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBzZWxmLndpbmRvdy5JbWFnZSgpO1xuICAgICAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShpbWFnZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIGltYWdlLnNyYyA9IHVyaTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0QW5kRW5jb2RlKHVybCkge1xuICAgICAgICAgIGxldCBkYXRhID0gc2VsZi5jYWNoZS5nZXQodXJsKTtcbiAgICAgICAgICBpZihkYXRhKSB7XG4gICAgICAgICAgICBpZihkYXRhLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpPT4ge1xuICAgICAgICAgICAgICAgIGlmKGRhdGEuY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRhdGEucGVuZGluZ3MucHVzaChyZXNvbHZlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBzZWxmLmNhY2hlLnB1dCh1cmwsIHtwZW5kaW5nczogW119KTtcblxuICAgICAgICAgICAgY29uc3QgVElNRU9VVCA9IDMwMDAwO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IHNlbGYud2luZG93LlhNTEh0dHBSZXF1
13345ZXN0KCk7XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGRvbmU7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgICAgICAgICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudGltZW91dCA9IFRJTUVPVVQ7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCdjYW5ub3QgZmV0Y2ggcmVzb3VyY2U6ICcgKyB1cmwgKyAnLCBzdGF0dXM6ICcgKyByZXF1ZXN0LnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmNvZGVyID0gbmV3IHNlbGYud2luZG93LkZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rlci5vbmxvYWRlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNvbnRlbnQgPSBlbmNvZGVyLnJlc3VsdC5zcGxpdCgvLC8pWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCByZXNvbHZlIG9mIGRhdGEucGVuZGluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wZW5kaW5ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVyLnJlYWRBc0RhdGFVUkwocmVxdWVzdC5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdGltZW91dCgpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbCgndGltZW91dCBvZiAnICsgVElNRU9VVCArICdtcyBvY2N1cmVkIHdoaWxlIGZldGNoaW5nIHJlc291cmNlOiAnICsgdXJsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZGF0YUFzVXJsKGNvbnRlbnQsIHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2RhdGE6Jyx0eXBlLCc7YmFzZTY0LCcsY29udGVudF0uam9pbignJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbLiorP14ke30oKXxcXFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhcmcpO1xuICAgICAgICAgICAgICAgICAgICB9LCBtcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYXNBcnJheShhcnJheUxpa2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGFycmF5ID0gW107XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBhcnJheUxpa2UubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaChhcnJheUxpa2VbaV0pO1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXNjYXBlWGh0bWwoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLygjfFxcbikvZywgKGMpPT4gYz09PScjJz8gJyUyMyc6ICclMEEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHdpZHRoKG5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Qm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci1yaWdodC13aWR0aCcpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuc2Nyb2xsV2lkdGggKyBsZWZ0Qm9yZGVyICsgcmlnaHRCb3JkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBoZWlnaHQobm9kZSkge1xuICAgICAgICAgICAgY29uc3QgdG9wQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbUJvcmRlciA9IHB4KG5vZGUsICdib3JkZXItYm90dG9tLXdpZHRoJyk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5zY3JvbGxIZWlnaHQgKyB0b3BCb3JkZXIgKyBib3R0b21Cb3JkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBweChub2RlLCBzdHlsZVByb3BlcnR5KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNlbGYud2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBzZWxmLndpbmRvdy5FbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXNDYW52YXMobm9kZSkge1xuICAgICAgICAgI
13345HJldHVybiBub2RlIGluc3RhbmNlb2Ygc2VsZi53aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc1RleHRBcmVhKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIHNlbGYud2luZG93LkhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc0lucHV0KG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIHNlbGYud2luZG93LkhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc1NWRyhub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBzZWxmLndpbmRvdy5TVkdFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXNTVkdSZWN0KG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIHNlbGYud2luZG93LlNWR1JlY3RFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXNJbWFnZShub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBzZWxmLndpbmRvdy5IVE1MSW1hZ2VFbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV3SW5saW5lcigpIHtcbiAgICAgICAgY29uc3QgVVJMX1JFR0VYID0gL3VybFxcKFsnXCJdPyhbXidcIl0rPylbJ1wiXT9cXCkvZztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5saW5lQWxsOiBpbmxpbmVBbGwsXG4gICAgICAgICAgICBzaG91bGRQcm9jZXNzOiBzaG91bGRQcm9jZXNzLFxuICAgICAgICAgICAgaW1wbDoge1xuICAgICAgICAgICAgICAgIHJlYWRVcmxzOiByZWFkVXJscyxcbiAgICAgICAgICAgICAgICBpbmxpbmU6IGlubGluZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHNob3VsZFByb2Nlc3Moc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnNlYXJjaChVUkxfUkVHRVgpICE9PSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRVcmxzKHN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gVVJMX1JFR0VYLmV4ZWMoc3RyaW5nKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChtYXRjaFsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmZpbHRlcihmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1dGlsLmlzRGF0YVVybCh1cmwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpbmxpbmUoc3RyaW5nLCB1cmwsIGJhc2VVcmwsIGdldCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1cmwpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHVybCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVVybCA/IHV0aWwucmVzb2x2ZVVybCh1cmwsIGJhc2VVcmwpIDogdXJsO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oZ2V0IHx8IHV0aWwuZ2V0QW5kRW5jb2RlKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1dGlsLmRhdGFBc1VybChkYXRhLCB1dGlsLm1pbWVUeXBlKHVybCkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHVybEFzUmVnZXgodXJsKSwgWyckMScsIGRhdGFVcmwsICckMyddLmpvaW4oJycpKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdXJsQXNSZWdleCh1cmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYud2luZG93LlJlZ0V4cChbJyh1cmxcXFxcKFtcXCdcIl0/KSgnLCB1dGlsLmVzY2FwZSh1cmwpLCAnKShbXFwnXCJdP1xcXFwpKSddLmpvaW4oJycpLCAnZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaW5saW5lQWxsKHN0cmluZywgYmFzZVVybCwgZ2V0KSB7XG4gICAgICAgICAgICBpZiAobm90aGluZ1RvSW5saW5lKCkpIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyaW5nKTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdHJpbmcpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVhZFVybHMpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHVybHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoc3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgdXJscy5mb3JFYWNoKGZ1bmN0aW9uICh1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb25lLnRoZW4oZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmUoc3RyaW5nLCB1cmwsIGJhc2VVcmwsIGdldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBub3RoaW5nVG9JbmxpbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFzaG91bGRQcm9jZXNzKHN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdGb250RmFjZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNvbHZlQWxsOiByZXNvbHZlQWxsLFxuICAgICAgICAgICAgaW1wbDoge1xuICAgICAgICAgICAgICAgIHJlYWRBbGw6IHJlYWRBbGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiByZXNvbHZlQWxsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRBbGwoc2VsZi5kb2N1bWVudClcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAod2ViRm9udHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgd2ViRm9udHMubWFwKGZ1bmN0aW9uICh3ZWJGb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYkZvbnQucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjc3NTdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgI
13345HJldHVybiBjc3NTdHJpbmdzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVhZEFsbCgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXRpbC5hc0FycmF5KHNlbGYuZG9jdW1lbnQuc3R5bGVTaGVldHMpKVxuICAgICAgICAgICAgICAgIC50aGVuKGdldENzc1J1bGVzKVxuICAgICAgICAgICAgICAgIC50aGVuKHNlbGVjdFdlYkZvbnRSdWxlcylcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChuZXdXZWJGb250KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0V2ViRm9udFJ1bGVzKGNzc1J1bGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1J1bGVzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLnR5cGUgPT09IENTU1J1bGUuRk9OVF9GQUNFX1JVTEU7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVyLnNob3VsZFByb2Nlc3MocnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRDc3NSdWxlcyhzdHlsZVNoZWV0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNzc1J1bGVzID0gW107XG4gICAgICAgICAgICAgICAgc3R5bGVTaGVldHMuZm9yRWFjaChmdW5jdGlvbiAoc2hlZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuYXNBcnJheShzaGVldC5jc3NSdWxlcyB8fCBbXSkuZm9yRWFjaChjc3NSdWxlcy5wdXNoLmJpbmQoY3NzUnVsZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoaWxlIHJlYWRpbmcgQ1NTIHJ1bGVzIGZyb20gJyArIHNoZWV0LmhyZWYsIGUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3NzUnVsZXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld1dlYkZvbnQod2ViRm9udFJ1bGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9ICh3ZWJGb250UnVsZS5wYXJlbnRTdHlsZVNoZWV0IHx8IHt9KS5ocmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZXIuaW5saW5lQWxsKHdlYkZvbnRSdWxlLmNzc1RleHQsIGJhc2VVcmwpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzcmM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWJGb250UnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdJbWFnZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmxpbmVBbGw6IGlubGluZUFsbCxcbiAgICAgICAgICAgIGltcGw6IHtcbiAgICAgICAgICAgICAgICBuZXdJbWFnZTogbmV3SW1hZ2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBuZXdJbWFnZShlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlubGluZTogaW5saW5lXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbmxpbmUoZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNEYXRhVXJsKGVsZW1lbnQuc3JjKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbGVtZW50LnNyYylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZ2V0IHx8IHV0aWwuZ2V0QW5kRW5jb2RlKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwuZGF0YUFzVXJsKGRhdGEsIHV0aWwubWltZVR5cGUoZWxlbWVudC5zcmMpKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZS
13345hmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNyYyA9IGRhdGFVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpbmxpbmVBbGwobm9kZSkge1xuICAgICAgICAgICAgaWYgKCF1dGlsLmlzRWxlbWVudChub2RlKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKTtcblxuICAgICAgICAgICAgcmV0dXJuIGlubGluZUJhY2tncm91bmQobm9kZSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzSW1hZ2Uobm9kZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3SW1hZ2Uobm9kZSkuaW5saW5lKCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmFzQXJyYXkobm9kZS5jaGlsZE5vZGVzKS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVBbGwoY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbmxpbmVCYWNrZ3JvdW5kKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWJhY2tncm91bmQpIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lci5pbmxpbmVBbGwoYmFja2dyb3VuZClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGlubGluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KCdiYWNrZ3JvdW5kJylcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvRG9tMkltYWdlLmpzIiwiaW1wb3J0IHskLCBUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmFnIHtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIHZpc3VhbFdvcmxkKSB7XHJcbiAgICB0aGlzLnduZCA9IHduZDtcclxuICAgIHRoaXMuZG9jID0gZG9jO1xyXG4gICAgdGhpcy52aXN1YWwgPSB2aXN1YWxXb3JsZDtcclxuICAgIHRoaXMuY29vcmRzID0gbmV3IFRIUkVFLlZlY3RvcjIoKTtcclxuICAgIHRoaXMuaW50ZXJzZWN0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgIHRoaXMucmF5Y2FzdGVyID0gdGhpcy52aXN1YWwucmF5Y2FzdGVyO1xyXG4gICAgdGhpcy5jYW1lcmEgPSB0aGlzLnZpc3VhbC5jYW1lcmE7XHJcbiAgICB0aGlzLnBsYW5lID0gbmV3IFRIUkVFLlBsYW5lKCk7XHJcbiAgICB0aGlzLnRocmVlcyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZCA9IG51bGw7XHJcbiAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jb250cm9sc1N0YXRlID0gdGhpcy52aXN1YWwuZ2V0Q29udHJvbHNTdGF0ZSgpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudCA9IHRoaXMudmlzdWFsLmVsZW1lbnQ7XHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBvbk1vdXNlTW92ZTogdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpLFxyXG4gICAgICBvbk1vdXNlRG93bjogdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpLFxyXG4gICAgICBvbk1vdXNlVXA6IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcylcclxuICAgIH07XHJcbiAgICAkKHRoaXMuZWxlbWVudCkub24oJ21vdXNlbW92ZScsIHRoaXMuYmluZHMub25Nb3VzZU1vdmUpO1xyXG4gICAgJCh0aGlzLmVsZW1lbnQpLm9uKCdtb3VzZWRvd24nLCB0aGlzLmJpbmRzLm9uTW91c2VEb3duKTtcclxuICAgICQodGhpcy5kb2MpLm9uKCdtb3VzZXVwJywgdGhpcy5iaW5kcy5vbk1vdXNlVXApO1xyXG4gIH1cclxuXHJcbiAgYWRkVGhyZWUodGhyZWUpIHtcclxuICAgIHRoaXMudGhyZWVzLnB1c2godGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVGhyZWUodGhyZWUpIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnRocmVlcy5pbmRleE9mKHRocmVlKTtcclxuICAgIGlmKH5pKSB7XHJcbiAgICAgIHRoaXMudGhyZWVzLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGlja0NhbGxiYWNrKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdDYWxsYmFjaygpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25SZWxlYXNlQ2FsbGJhY2soKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgICQodGhpcy5lbGVtZW50KS5vZmYoJ21vdXNlbW92ZScsIHRoaXMuYmluZHMub25Nb3VzZU1vdmUpO1xyXG4gICAgJCh0aGlzLmVsZW1lbnQpLm9mZignbW91c2Vkb3duJywgdGhpcy5iaW5kcy5vbk1vdXNlRG93bik7XHJcbiAgICAkKHRoaXMuZG9jKS5vZmYoJ21vdXNldXAnLCB0aGlzLmJpbmRzLm9uTW91c2VVcCk7XHJcbiAgfVxyXG5cclxuICBzZXRDb29yZHNGcm9tRXZlbnQoZSkge1xyXG4gICAgY29uc3QgakVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudCk7XHJcbiAgICBjb25zdCBvZmZzZXQgPSBqRWxlbWVudC5vZmZzZXQoKTtcclxuICAgIHRoaXMuY29vcmRzLnggPSAoKGUucGFnZVgtb2Zmc2V0LmxlZnQpL2pFbGVtZW50LndpZHR
13345oKCkpKjItMTtcclxuICAgIHRoaXMuY29vcmRzLnkgPSAtKChlLnBhZ2VZLW9mZnNldC50b3ApL2pFbGVtZW50LmhlaWdodCgpKSoyKzE7XHJcbiAgICByZXR1cm4gdGhpcy5jb29yZHM7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlRG93bihlKSB7XHJcbiAgICBpZighdGhpcy5lbmFibGVkKSByZXR1cm47XHJcblxyXG4gICAgaWYodGhpcy5zZWxlY3RlZCkgdGhpcy5vbk1vdXNlVXAoZSk7XHJcblxyXG4gICAgdGhpcy5zZXRDb29yZHNGcm9tRXZlbnQoZSk7XHJcbiAgXHR0aGlzLnJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHRoaXMuY29vcmRzLCB0aGlzLmNhbWVyYSk7XHJcblxyXG4gIFx0Y29uc3QgaW50ZXJzZWN0cyA9IHRoaXMucmF5Y2FzdGVyLmludGVyc2VjdE9iamVjdHModGhpcy50aHJlZXMpO1xyXG4gIFx0aWYoaW50ZXJzZWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gaW50ZXJzZWN0c1swXS5vYmplY3Q7XHJcbiAgICAgIGlmKCF0aGlzLm9uUGlja0NhbGxiYWNrKGludGVyc2VjdHNbMF0pKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IHYgPSBpbnRlcnNlY3RzWzBdLnBvaW50LmNsb25lKCk7XHJcbiAgICAgIHRoaXMuZGlzdGFuY2UgPSB2LnN1Yih0aGlzLnJheWNhc3Rlci5yYXkub3JpZ2luKS5sZW5ndGgoKTs7XHJcbiAgICAgIHRoaXMuY29udHJvbHNTdGF0ZSA9IHRoaXMudmlzdWFsLmdldENvbnRyb2xzU3RhdGUoKTtcclxuICAgICAgdGhpcy52aXN1YWwuc2V0Q29udHJvbHNTdGF0ZShmYWxzZSk7XHJcbiAgICAgIHRoaXMucGxhbmUuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodGhpcy52aXN1YWwuY2FtZXJhLmdldFdvcmxkRGlyZWN0aW9uKHRoaXMucGxhbmUubm9ybWFsKSwgaW50ZXJzZWN0c1swXS5wb2ludCk7XHJcbiAgICAgIC8vdGhpcy5wbGFuZS5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0aGlzLnBsYW5lLm5vcm1hbC5zZXQoMCwwLDEpLCBuZXcgVEhSRUUuVmVjdG9yMygwLDAsMCkpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XHJcbiAgXHR9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Nb3VzZU1vdmUoZSkge1xyXG4gICAgaWYoIXRoaXMuZW5hYmxlZCkgcmV0dXJuO1xyXG4gIFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICBcdGlmKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5zZXRDb29yZHNGcm9tRXZlbnQoZSk7XHJcbiAgICBcdHRoaXMucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEodGhpcy5jb29yZHMsIHRoaXMuY2FtZXJhKTtcclxuXHQgICAgaWYodGhpcy5yYXljYXN0ZXIucmF5LmludGVyc2VjdFBsYW5lKHRoaXMucGxhbmUsIHRoaXMuaW50ZXJzZWN0aW9uKSkge1xyXG4gICAgICAgIGlmKCF0aGlzLm9uRHJhZ0NhbGxiYWNrKHRoaXMuaW50ZXJzZWN0aW9uKSkgdGhpcy5vbk1vdXNlVXAoZSk7XHJcbiAgICAgIH0vKiovXHJcbiAgICAgIC8vdGhpcy5pbnRlcnNlY3Rpb24uY29weSh0aGlzLnJheWNhc3Rlci5yYXkuZGlyZWN0aW9uKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLmRpc3RhbmNlKS5hZGQodGhpcy5yYXljYXN0ZXIucmF5Lm9yaWdpbik7LyoqL1xyXG4gICAgICAvL2lmKCF0aGlzLm9uRHJhZ0NhbGxiYWNrKHRoaXMuc2VsZWN0ZWQsIHRoaXMuaW50ZXJzZWN0aW9uKSkgdGhpcy5vbk1vdXNlVXAoZSk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlVXAoZSkge1xyXG4gICAgaWYodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLm9uUmVsZWFzZUNhbGxiYWNrKCk7XHJcbiAgXHRcdHRoaXMuc2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgICB0aGlzLnZpc3VhbC5zZXRDb250cm9sc1N0YXRlKHRoaXMuY29udHJvbHNTdGF0ZSk7XHJcbiAgXHR9XHJcbiAgICBpZighdGhpcy5lbmFibGVkKSByZXR1cm47XHJcbiAgXHRlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9EcmFnLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxucmVxdWlyZSgnaW1wb3J0cy1sb2FkZXI/ZGVmaW5lPT5mYWxzZSFqcXVlcnktbW91c2V3aGVlbCcpKCQpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRzVG9BY3Rpb25zIHtcclxuXHJcbiAgc3RhdGljIG1vZEtleXMgPSB7XHJcbiAgICBDdHJsOiAxLFxyXG4gICAgU2hpZnQ6IDIsXHJcbiAgICBBbHQ6IDRcclxuICB9O1xyXG5cclxuICBzdGF0aWMgbW91c2VCdXR0b25zID0ge1xyXG4gICAgTGVmdDogMCxcclxuICAgIE1pZGRsZTogMSxcclxuICAgIFJpZ2h0OiAyXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIGdldEV2ZW50RmxhZ3MoZSkge1xyXG4gICAgcmV0dXJuIGUuY3RybEtleTw8MCB8IGUuc2hpZnRLZXk8PDEgfCBlLmFsdEtleTw8MjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRQb3NpdGlvbih0b3VjaGVzKSB7XHJcbiAgICBsZXQgeCwgeTtcclxuICAgIGlmKHRvdWNoZXMubGVuZ3RoPT09Mikge1xyXG4gICAgICB4ID0gdG91Y2hlc1sxXS5wYWdlWC10b3VjaGVzWzBdLnBhZ2VYO1xyXG4gICAgICB5ID0gdG91Y2hlc1sxXS5wYWdlWS10b3VjaGVzWzBdLnBhZ2VZO1xyXG4gICAgICB5ID0gLU1hdGguc3FydCh4KngreSp5KTtcclxuICAgICAgeCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgeCA9IHRvdWNoZXNbMF0ucGFnZVg7XHJcbiAgICAgIHkgPSB0b3VjaGVzWzBdLnBhZ2VZO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeCxcclxuICAgICAgeVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGFjdGlvbnMpIHtcclxuICAgIHRoaXMuYWN0aW9ucyA9IGFjdGlvbnMgfHwge307XHJcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgdGhpcy5kb2MgPSBlbGVtZW50WzBdLm93bmVyRG9jdW1lbnQ7XHJcbiAgICB0aGlzLnduZCA9IHRoaXMuZG9jLmRlZmF1bHRWaWV3O1xyXG4gICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBjb250ZXh0TWVudTogdGh
13345pcy5jb250ZXh0TWVudS5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgbW91c2VEb3duOiB0aGlzLm1vdXNlRG93bi5iaW5kKHRoaXMpLFxyXG4gICAgICBtb3VzZU1vdmU6IHRoaXMubW91c2VNb3ZlLmJpbmQodGhpcyksXHJcbiAgICAgIG1vdXNlVXA6IHRoaXMubW91c2VVcC5iaW5kKHRoaXMpLFxyXG4gICAgICBtb3VzZVdoZWVsOiB0aGlzLm1vdXNlV2hlZWwuYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIG1vdXNlTW92ZURvYzogdGhpcy5tb3VzZU1vdmVEb2MuYmluZCh0aGlzKSxcclxuICAgICAgbW91c2VVcERvYzogdGhpcy5tb3VzZVVwRG9jLmJpbmQodGhpcyksXHJcblxyXG4gICAgICBjbGljazogdGhpcy5jbGljay5iaW5kKHRoaXMpLFxyXG4gICAgICBkYmxjbGljazogdGhpcy5kYmxjbGljay5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgdG91Y2hTdGFydDogdGhpcy50b3VjaFN0YXJ0LmJpbmQodGhpcyksXHJcbiAgICAgIHRvdWNoTW92ZTogdGhpcy50b3VjaE1vdmUuYmluZCh0aGlzKSxcclxuICAgICAgdG91Y2hFbmQ6IHRoaXMudG91Y2hFbmQuYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIGtleURvd246IHRoaXMua2V5RG93bi5iaW5kKHRoaXMpLFxyXG4gICAgICBrZXlQcmVzczogdGhpcy5rZXlQcmVzcy5iaW5kKHRoaXMpLFxyXG4gICAgICBrZXlVcDogdGhpcy5rZXlVcC5iaW5kKHRoaXMpXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZWxlbWVudC5vbignY29udGV4dG1lbnUnLCB0aGlzLmJpbmRzLmNvbnRleHRNZW51KTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQub24oJ21vdXNlZG93bicsIHRoaXMuYmluZHMubW91c2VEb3duKTtcclxuICAgIHRoaXMuZWxlbWVudC5vbignbW91c2Vtb3ZlJywgdGhpcy5iaW5kcy5tb3VzZU1vdmUpO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9uKCdtb3VzZXVwJywgdGhpcy5iaW5kcy5tb3VzZVVwKTtcclxuICAgIHRoaXMuZWxlbWVudC5vbignbW91c2V3aGVlbCcsIHRoaXMuYmluZHMubW91c2VXaGVlbCk7XHJcblxyXG4gICAgJCh0aGlzLmRvYykub24oJ21vdXNlbW92ZScsIHRoaXMuYmluZHMubW91c2VNb3ZlRG9jKTtcclxuICAgICQodGhpcy5kb2MpLm9uKCdtb3VzZXVwJywgdGhpcy5iaW5kcy5tb3VzZVVwRG9jKTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQub24oJ2NsaWNrJywgdGhpcy5iaW5kcy5jbGljayk7XHJcbiAgICB0aGlzLmVsZW1lbnQub24oJ2RibGNsaWNrJywgdGhpcy5iaW5kcy5kYmxjbGljayk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50Lm9uKCd0b3VjaHN0YXJ0JywgdGhpcy5iaW5kcy50b3VjaFN0YXJ0KTtcclxuICAgIHRoaXMuZWxlbWVudC5vbigndG91Y2htb3ZlJywgdGhpcy5iaW5kcy50b3VjaE1vdmUpO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9uKCd0b3VjaGVuZCcsIHRoaXMuYmluZHMudG91Y2hFbmQpO1xyXG5cclxuICAgICQodGhpcy53bmQpLm9uKCdrZXlkb3duJywgdGhpcy5iaW5kcy5rZXlEb3duKTtcclxuICAgICQodGhpcy53bmQpLm9uKCdrZXlwcmVzcycsIHRoaXMuYmluZHMua2V5UHJlc3MpO1xyXG4gICAgJCh0aGlzLnduZCkub24oJ2tleXVwJywgdGhpcy5iaW5kcy5rZXlVcCk7XHJcbiAgfVxyXG5cclxuICBhZGRBY3Rpb24oYWN0aW9uLCB0eXBlLCBjb2RlLCBmbGFncykge1xyXG4gICAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmKCF0aGlzLmFjdGlvbnNbdHlwZV0pIHtcclxuICAgICAgdGhpcy5hY3Rpb25zW3R5cGVdID0ge307XHJcbiAgICB9XHJcbiAgICBpZighdGhpcy5hY3Rpb25zW3R5cGVdW2NvZGVdKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uc1t0eXBlXVtjb2RlXSA9IHt9XHJcbiAgICB9XHJcbiAgICBpZighdGhpcy5hY3Rpb25zW3R5cGVdW2NvZGVdW2ZsYWdzXSkge1xyXG4gICAgICB0aGlzLmFjdGlvbnNbdHlwZV1bY29kZV1bZmxhZ3NdID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGlvbnNbdHlwZV1bY29kZV1bZmxhZ3NdLnB1c2goYWN0aW9uKTtcclxuICB9XHJcblxyXG4gIGdldEFjdGlvbnModHlwZSwgY29kZSwgZmxhZ3MpIHtcclxuICAgIHJldHVybiAoKHRoaXMuYWN0aW9uc1t0eXBlXSB8fCB7fSlbY29kZV0gfHwge30pW2ZsYWdzXSB8fCBbXTtcclxuICB9XHJcblxyXG4gIGZpcmVBY3Rpb25zKGFjdGlvbnMsIGUsIGRhdGEpIHtcclxuICAgIGZvcihsZXQgYWN0aW9uIG9mIGFjdGlvbnMpIHtcclxuICAgICAgYWN0aW9uKGUsIGRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udGV4dE1lbnUoZSkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIGNvbnN0IGZsYWdzID0gRXZlbnRzVG9BY3Rpb25zLmdldEV2ZW50RmxhZ3MoZSk7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5nZXRBY3Rpb25zKCdjb250ZXh0bWVudScsIGUuYnV0dG9uLCBmbGFncyksIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VEb3duKGUpIHtcclxuICAgIGlmKHRoaXMucGlja2VkKSB7XHJcbiAgICAgIHRoaXMubW91c2VVcERvYygpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIGNvbnN0IGZsYWdzID0gRXZlbnRzVG9BY3Rpb25zLmdldEV2ZW50RmxhZ3MoZSk7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5nZXRBY3Rpb25zKCdtb3VzZWRvd24nLCBlLmJ1dHRvbiwgZmxhZ3MpLCBlKTtcclxuICAgICAgdGhpcy5waWNrZWQgPSB7XHJcbiAgICAgICAgeDogZS5wYWdlWCxcclxuICAgICAgICB5OiBlLnBhZ2VZLFxyXG4gICAgICAgIGFjdGlvbnM6IHRoaXMuZ2V0QWN0aW9ucygnbW91c2VkcmFnJywgZS5idXR0b24sIGZsYWdzKVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMucGlja2VkLmFjdGlvbnMsIGUsIHtcclxuICAgICAgICBzdGF0ZTogJ3N0YXJ0J1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlTW92ZShlKSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgZmxhZ3MgPSBFdmVudHNUb0FjdGlvbnMuZ2V0RXZlbnRGbGFncyhlKTtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLmdldEFjdGlvbnMoJ21vdXNlbW92ZScsIGUuYnV0dG9uLCBmbGFncyksIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VNb3ZlRG9jKGUpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCAmJiB0aGlzLnBpY2tlZCkge1xyXG4gICAgICB0aGlzLmZpcmV
13345BY3Rpb25zKHRoaXMucGlja2VkLmFjdGlvbnMsIGUsIHtcclxuICAgICAgICBzdGF0ZTogJ21vdmUnLFxyXG4gICAgICAgIGR4OiBlLnBhZ2VYLXRoaXMucGlja2VkLngsXHJcbiAgICAgICAgZHk6IGUucGFnZVktdGhpcy5waWNrZWQueVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5waWNrZWQgPSB7XHJcbiAgICAgICAgeDogZS5wYWdlWCxcclxuICAgICAgICB5OiBlLnBhZ2VZLFxyXG4gICAgICAgIGFjdGlvbnM6IHRoaXMucGlja2VkLmFjdGlvbnNcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlVXAoZSkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIGNvbnN0IGZsYWdzID0gRXZlbnRzVG9BY3Rpb25zLmdldEV2ZW50RmxhZ3MoZSk7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5nZXRBY3Rpb25zKCdtb3VzZXVwJywgZS5idXR0b24sIGZsYWdzKSwgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3VzZVVwRG9jKGUpIHtcclxuICAgIGlmKHRoaXMucGlja2VkKSB7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5waWNrZWQuYWN0aW9ucywgZSwge1xyXG4gICAgICAgIHN0YXRlOiAnZW5kJ1xyXG4gICAgICB9KTtcclxuICAgICAgZGVsZXRlIHRoaXMucGlja2VkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VXaGVlbChlKSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgZmxhZ3MgPSBFdmVudHNUb0FjdGlvbnMuZ2V0RXZlbnRGbGFncyhlKTtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLmdldEFjdGlvbnMoJ21vdXNld2hlZWwnLCAwLCBmbGFncyksIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpY2tzKGUsIHR5cGUpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICBjb25zdCBmbGFncyA9IEV2ZW50c1RvQWN0aW9ucy5nZXRFdmVudEZsYWdzKGUpO1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMuZ2V0QWN0aW9ucyh0eXBlLCBlLmJ1dHRvbiwgZmxhZ3MpLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsaWNrKGUpIHtcclxuICAgIHRoaXMuY2xpY2tzKGUsICdjbGljaycpO1xyXG4gIH1cclxuXHJcbiAgZGJsY2xpY2soZSkge1xyXG4gICAgdGhpcy5jbGlja3MoZSwgJ2RibGNsaWNrJyk7XHJcbiAgfVxyXG5cclxuICB0b3VjaFBpY2soZSwgZmxhZ3MsIHRvdWNoZXMpIHtcclxuICAgIHRoaXMudG91Y2hQaWNrZWQgPSB7XHJcbiAgICAgIC4uLkV2ZW50c1RvQWN0aW9ucy5nZXRQb3NpdGlvbih0b3VjaGVzKSxcclxuICAgICAgYWN0aW9uczogdGhpcy5nZXRBY3Rpb25zKCd0b3VjaGRyYWcnLCB0b3VjaGVzLmxlbmd0aCwgZmxhZ3MpLFxyXG4gICAgICBjb2RlOiB0b3VjaGVzLmxlbmd0aCxcclxuICAgICAgZmxhZ3NcclxuICAgIH07XHJcbiAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMudG91Y2hQaWNrZWQuYWN0aW9ucywgZSwge1xyXG4gICAgICBzdGF0ZTogJ3N0YXJ0J1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b3VjaFN0YXJ0KGUpIHtcclxuICAgIGlmKHRoaXMudG91Y2hQaWNrZWQpIHtcclxuICAgICAgdGhpcy50b3VjaEVuZChlKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICBjb25zdCBmbGFncyA9IEV2ZW50c1RvQWN0aW9ucy5nZXRFdmVudEZsYWdzKGUpLCB0b3VjaGVzID0gZS50b3VjaGVzIHx8IGUub3JpZ2luYWxFdmVudC50b3VjaGVzO1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMuZ2V0QWN0aW9ucygndG91Y2hzdGFydCcsIHRvdWNoZXMubGVuZ3RoLCBmbGFncyksIGUpO1xyXG4gICAgICB0aGlzLnRvdWNoUGljayhlLCBmbGFncywgdG91Y2hlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b3VjaE1vdmUoZSkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIGNvbnN0IGZsYWdzID0gRXZlbnRzVG9BY3Rpb25zLmdldEV2ZW50RmxhZ3MoZSksIHRvdWNoZXMgPSBlLnRvdWNoZXMgfHwgZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXM7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5nZXRBY3Rpb25zKCd0b3VjaG1vdmUnLCB0b3VjaGVzLmxlbmd0aCwgZmxhZ3MpLCBlKTtcclxuICAgICAgaWYodGhpcy50b3VjaFBpY2tlZCkge1xyXG4gICAgICAgIGlmKHRoaXMudG91Y2hQaWNrZWQuY29kZT09PXRvdWNoZXMubGVuZ3RoICYmIHRoaXMudG91Y2hQaWNrZWQuZmxhZ3M9PT1mbGFncykge1xyXG4gICAgICAgICAgY29uc3QgcG9zID0gRXZlbnRzVG9BY3Rpb25zLmdldFBvc2l0aW9uKHRvdWNoZXMpO1xyXG4gICAgICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLnRvdWNoUGlja2VkLmFjdGlvbnMsIGUsIHtcclxuICAgICAgICAgICAgc3RhdGU6ICdtb3ZlJyxcclxuICAgICAgICAgICAgZHg6IHBvcy54LXRoaXMudG91Y2hQaWNrZWQueCxcclxuICAgICAgICAgICAgZHk6IHBvcy55LXRoaXMudG91Y2hQaWNrZWQueVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnRvdWNoUGlja2VkID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLnRvdWNoUGlja2VkLFxyXG4gICAgICAgICAgICAuLi5wb3NcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b3VjaEVuZChlKTtcclxuICAgICAgICAgIHRoaXMudG91Y2hQaWNrKGUsIGZsYWdzLCB0b3VjaGVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvdWNoRW5kKGUpIHtcclxuICAgIGlmKHRoaXMudG91Y2hQaWNrZWQpIHtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLnRvdWNoUGlja2VkLmFjdGlvbnMsIGUsIHtcclxuICAgICAgICBzdGF0ZTogJ2VuZCdcclxuICAgICAgfSk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLnRvdWNoUGlja2VkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAga2V5KGUsIHR5cGUpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICBjb25zdCBmbGFncyA9IEV2ZW50c1RvQWN0aW9ucy5nZXRFdmVudEZsYWdzKGUpO1xyXG4gICAgICB0aGlzLmZpcmV
13345BY3Rpb25zKHRoaXMuZ2V0QWN0aW9ucyh0eXBlLCBlLmtleUNvZGUsIGZsYWdzKSwgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBrZXlEb3duKGUpIHtcclxuICAgIHRoaXMua2V5KGUsICdrZXlkb3duJyk7XHJcbiAgfVxyXG5cclxuICBrZXlQcmVzcyhlKSB7XHJcbiAgICB0aGlzLmtleShlLCAna2V5cHJlc3MnKTtcclxuICB9XHJcblxyXG4gIGtleVVwKGUpIHtcclxuICAgIHRoaXMua2V5KGUsICdrZXl1cCcpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuZWxlbWVudC5vZmYoJ2NvbnRleHRtZW51JywgdGhpcy5iaW5kcy5jb250ZXh0TWVudSk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50Lm9mZignbW91c2Vkb3duJywgdGhpcy5iaW5kcy5tb3VzZURvd24pO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9mZignbW91c2Vtb3ZlJywgdGhpcy5iaW5kcy5tb3VzZU1vdmUpO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9mZignbW91c2V1cCcsIHRoaXMuYmluZHMubW91c2VVcCk7XHJcbiAgICB0aGlzLmVsZW1lbnQub2ZmKCdtb3VzZXdoZWVsJywgdGhpcy5iaW5kcy5tb3VzZVdoZWVsKTtcclxuXHJcbiAgICAkKHRoaXMuZG9jKS5vZmYoJ21vdXNlbW92ZScsIHRoaXMuYmluZHMubW91c2VNb3ZlRG9jKTtcclxuICAgICQodGhpcy5kb2MpLm9mZignbW91c2V1cCcsIHRoaXMuYmluZHMubW91c2VVcERvYyk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50Lm9mZignY2xpY2snLCB0aGlzLmJpbmRzLmNsaWNrKTtcclxuICAgIHRoaXMuZWxlbWVudC5vZmYoJ2RibGNsaWNrJywgdGhpcy5iaW5kcy5kYmxjbGljayk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50Lm9mZigndG91Y2hzdGFydCcsIHRoaXMuYmluZHMudG91Y2hTdGFydCk7XHJcbiAgICB0aGlzLmVsZW1lbnQub2ZmKCd0b3VjaG1vdmUnLCB0aGlzLmJpbmRzLnRvdWNoTW92ZSk7XHJcbiAgICB0aGlzLmVsZW1lbnQub2ZmKCd0b3VjaGVuZCcsIHRoaXMuYmluZHMudG91Y2hFbmQpO1xyXG5cclxuICAgICQodGhpcy53bmQpLm9mZigna2V5ZG93bicsIHRoaXMuYmluZHMua2V5RG93bik7XHJcbiAgICAkKHRoaXMud25kKS5vZmYoJ2tleXByZXNzJywgdGhpcy5iaW5kcy5rZXlQcmVzcyk7XHJcbiAgICAkKHRoaXMud25kKS5vZmYoJ2tleXVwJywgdGhpcy5iaW5kcy5rZXlVcCk7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9FdmVudHNUb0FjdGlvbnMuanMiLCJcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRnVsbFNjcmVlbiB7XHJcblxyXG5cdHN0YXRpYyBfaGFzV2Via2l0RnVsbFNjcmVlblx0PSAhIWRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW47XHJcblx0c3RhdGljIF9oYXNNb3pGdWxsU2NyZWVuXHQ9ICEhZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbjtcclxuXHRzdGF0aWMgX2hhc01zRnVsbHNjcmVlbiA9ICEhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm1zUmVxdWVzdEZ1bGxzY3JlZW47XHJcblxyXG5cdHN0YXRpYyBhdmFpbGFibGUoKSB7XHJcblx0XHRyZXR1cm4gRnVsbFNjcmVlbi5faGFzV2Via2l0RnVsbFNjcmVlbiB8fCBGdWxsU2NyZWVuLl9oYXNNb3pGdWxsU2NyZWVuIHx8IEZ1bGxTY3JlZW4uX2hhc01zRnVsbHNjcmVlbjtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhY3RpdmF0ZWQoKSB7XHJcblx0XHRpZihGdWxsU2NyZWVuLl9oYXNXZWJraXRGdWxsU2NyZWVuKSB7XHJcblx0XHRcdHJldHVybiBkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW47XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKEZ1bGxTY3JlZW4uX2hhc01vekZ1bGxTY3JlZW4pIHtcclxuXHRcdFx0cmV0dXJuIGRvY3VtZW50Lm1vekZ1bGxTY3JlZW47XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKEZ1bGxTY3JlZW4uX2hhc01zRnVsbHNjcmVlbikge1xyXG5cdFx0XHRyZXR1cm4gISFkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50O1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuYXNzZXJ0KGZhbHNlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGRFdmVudExpc3RlbmVyKGVsZW1lbnQsIGhhbmRsZXIpIHtcclxuXHRcdGlmIChlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcclxuXHRcdCAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLCBoYW5kbGVyLCBmYWxzZSk7XHJcblx0XHQgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3pmdWxsc2NyZWVuY2hhbmdlJywgaGFuZGxlciwgZmFsc2UpO1xyXG5cdFx0ICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIGhhbmRsZXIsIGZhbHNlKTtcclxuXHRcdCAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ01TRnVsbHNjcmVlbkNoYW5nZScsIGhhbmRsZXIsIGZhbHNlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHN0YXRpYyByZW1vdmVFdmVudExpc3RlbmVyKGVsZW1lbnQsIGhhbmRsZXIpIHtcclxuXHRcdGlmIChlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcclxuXHRcdCAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3dlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UnLCBoYW5kbGVyLCBmYWxzZSk7XHJcblx0XHQgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3pmdWxsc2NyZWVuY2hhbmdlJywgaGFuZGxlciwgZmFsc2UpO1xyXG5cdFx0ICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZnVsbHNjcmVlbmNoYW5nZScsIGhhbmRsZXIsIGZhbHNlKTtcclxuXHRcdCAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ01TRnVsbHNjcmVlbkNoYW5nZScsIGhhbmRsZXIsIGZhbHNlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHN0YXRpYyByZXF1ZXN0KGVsZW1lbnQpIHtcclxuXHRcdGVsZW1lbnRcdD0gZWxlbWVudFx0fHwgZG9jdW1lbnQuYm9keTtcclxuXHRcdGlmKEZ1bGxTY3JlZW4uX2hhc1dlYmtpdEZ1bGxTY3JlZW4pIHtcclxuXHRcdFx0ZWxlbWVudC53ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbigpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZihGdWxsU2NyZWVuLl9oYXNNb3pGdWxsU2NyZWVuKSB7XHJcblx0XHRcdGVsZW1lbnQubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoRnVsbFNjcmVlbi5faGFzTXNGdWxsc2NyZWVuKSB7XHJcblx0XHRcdGVsZW1lbnQubXNSZXF1ZXN0RnVsbHNjcmVlbigpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuYXNzZXJ0KGZhbHNlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjYW5jZWwoKSB7XHJcblx0XHRpZihGdWxsU2NyZWVuLl9oYXNXZWJraXRGdWxsU2NyZWVuKSB7XHJcblx0XHRcdGRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKTtcclxuXHRcdH1lbHNlIGlmKEZ1bGxTY3JlZW4uX2hhc01vekZ1bGxTY3JlZW4pIHtcclxuXHRcdFx0ZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbigpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZihGdWxsU2NyZWVuLl9oYXNNc0Z1bGxzY3JlZW4pIHtcclxuXHRcdFx0ZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdGNvbnNvbGUuYXNzZXJ0KGZhbHNlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0Z1bGxTY3JlZW4uanMiLCJpbXBvcnQgeyQsIGh0bWwyY2FudmFzfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IEltYWdlQmFzZSBmcm9tICcuL0ltYWdlQmFzZSc7XHJcbmltcG9ydCBCYXNlTWF0aFV0aWxzIGZyb20gJy4vQmFzZU1hdGhVdGlscyc7XHJcbmltcG9ydCBEb20ySW1hZ2UgZnJvbSAnLi9Eb20ySW1hZ2UnO1xyXG5pbXBvcnQgRG9jTW91c2VTaW11bGF0b3IgZnJvbSAnLi9Eb2NNb3VzZVNpbXVsYXRvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnRlcmFjdGl2ZUltYWdlIGV4dGVuZHMgSW1hZ2VCYXNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IsIHNyYywgY2FjaGUsIGluamVjdG9yKSB7XHJcbiAgICBzdXBlcihjb250ZXh0LCB3aWR0aCwgaGVpZ2h0LCBjb2xvcik7XHJcblxyXG4gICAgdGhpcy5pSWQgPSAnaScrQmFzZU1hdGhVdGlscy5nZXRVbmlxdWUoKTtcclxuICAgIGNvbnN0IGpGcmFtZSA9ICQoJzxpZnJhbWUgaWQ9XCInK3RoaXMuaUlkKydcIiBzcmM9XCInICsgc3JjICsgJ1wiIHN0eWxlPVwicG9zaXRpb246IGZpeGVkOyBsZWZ0OiAtMTAwMHB4O1wiPjwvaWZyYW1lPicpO1xyXG4gICAgJCh0aGlzLmRvYy5ib2R5KS5hcHBlbmQoakZyYW1lKTtcclxuICAgIHRoaXMuZnJhbWUgPSBqRnJhbWVbMF07XHJcblxyXG4gICAgdGhpcy5iaW5kcyA9IHt9O1xyXG5cclxuICAgIGlmKGluamVjdG9yKSB7XHJcbiAgICAgIGluamVjdG9yKHRoaXMuZnJhbWUuY29udGVudFdpbmRvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5kb2MuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnd3d3Lmh0dHA6Ly93My5vcmcvVFIvU1ZHMTEvZmVhdHVyZSNFeHRlbnNpYmlsaXR5JywgJzEuMScpKSB7IC8vIHN2ZyBmb3JlaWduT2JqZWN0IHJlbmRlcmVyXHJcbiAgICAgIHRoaXMuaW1hZ2UgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgdGhpcy5iaW5kcy5pbWFnZUxvYWQgPSAoKT0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlckltYWdlKHRoaXMuaW1hZ2UpO1xyXG4gICAgICAgI
13345HRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgIH07XHJcbiAgICAgICQodGhpcy5pbWFnZSkub24oJ2xvYWQnLCB0aGlzLmJpbmRzLmltYWdlTG9hZCk7XHJcbiAgICAgIHRoaXMuc3ZnUmVuZGVyID0gbmV3IERvbTJJbWFnZSh0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3csIHRoaXMuZnJhbWUuY29udGVudERvY3VtZW50LCBjYWNoZSk7XHJcbiAgICB9IC8vIG90aGVyd2lzZSAtIGh0bWwyY2FudmFzXHJcblxyXG4gICAgdGhpcy5iaW5kcy5mcmFtZUxvYWQgPSAoKT0+IHtcclxuICAgICAgaWYofnRoaXMuZnJhbWUuY29udGVudERvY3VtZW50LnRpdGxlLmluZGV4T2YoJzQwNCcpKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydFJlbmRlciA9ICgpPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJOb3RGb3VuZFBhZ2UoKTtcclxuICAgICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmZpbmlzaExvYWQoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICAgICAgaWYodGhpcy5mcmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLndpZHRoID0gJCh0aGlzLmZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5KS53aWR0aCgpO1xyXG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9ICQodGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keSkuaGVpZ2h0KCk7XHJcbiAgICAgICAgICAgIGpGcmFtZS5jc3MoJ3dpZHRoJywgdGhpcy53aWR0aCsncHgnKS5jc3MoJ2hlaWdodCcsIHRoaXMuaGVpZ2h0KydweCcpO1xyXG4gICAgICAgICAgICBqRnJhbWUub2Zmc2V0KHtsZWZ0OiAtdGhpcy53aWR0aC0xMDAsIHRvcDogMH0pO1xyXG4gICAgICAgICAgICBpZih0aGlzLnN2Z1JlbmRlcikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2ltdWxhdG9yID0gbmV3IERvY01vdXNlU2ltdWxhdG9yKGpGcmFtZSwgdGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keSwgdGhpcy5lbGVtZW50KTtcclxuICAgICAgICAgICAgICB0aGlzLnNpbXVsYXRvci5hZGREb2NDaGFuZ2VDbGIodGhpcy5maW5pc2hMb2FkLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRSZW5kZXIgPSAoKT0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZpbmlzaExvYWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCA1MDApO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgJCh0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cpLm9uKCdsb2FkJywgdGhpcy5iaW5kcy5mcmFtZUxvYWQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2ltdWxhdGVkRG9jKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZnJhbWUuY29udGVudERvY3VtZW50O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgaWYodGhpcy5zdmdSZW5kZXIpIHtcclxuICAgICAgdGhpcy5zdmdSZW5kZXIudG9TdmcodGhpcy5zaW11bGF0b3IuZWxlbWVudCwge2hlaWdodDogdGhpcy5oZWlnaHQrJ3B4Jywgd2lkdGg6IHRoaXMud2lkdGgrJ3B4J30pXHJcbiAgICAgICAgLnRoZW4oKGRhdGFVcmwpPT4ge1xyXG4gICAgICAgICAgdGhpcy5pbWFnZS5zcmMgPSBkYXRhVXJsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnJvcik9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdEb20ySW1hZ2U6ICcsIGVycm9yKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQmxhbmtQYWdlKCk7XHJcbiAgICAgICAgICB0aGlzLmZpbmlzaFJlbmRlcigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGh0bWwyY2FudmFzKHRoaXMuZnJhbWUuY29udGVudERvY3VtZW50LmJvZHksIHt0aW1lb3V0OiAzMDAwMH0pLlxyXG4gICAgICAgIHRoZW4oKGNhbnZhcyk9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckltYWdlKGNhbnZhcyk7XHJcbiAgICAgICAgICB0aGlzLmZpbmlzaFJlbmRlcigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgICQodGhpcy5pbWFnZSkub2ZmKCdsb2FkJywgdGhpcy5iaW5kcy5pbWFnZUxvYWQpO1xyXG4gICAgJCh0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cpLm9mZignbG9hZCcsIHRoaXMuYmluZHMuZnJhbWVMb2FkKTtcclxuICAgICQodGhpcy5kb2MuYm9keSkuZmluZCgnIycrdGhpcy5pSWQpLnJlbW92ZSgpO1xyXG4gICAgaWYodGhpcy5pbWFnZSkge1xyXG4gICAgICB0aGlzLmltYWdlLnNyYyA9ICcnO1xyXG4gICAgICBkZWxldGUgdGhpcy5pbWFnZTtcclxuICAgIH1cclxuICAgIHRoaXMuZnJhbWUuc3JjID0gJyc7XHJcbiAgICBkZWxldGUgdGhpcy5mcmFtZTtcclxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIHNpbXVsYXRlKGUsIGRvYywgeCwgeSkge1xyXG4gICAgaWYodGhpcy5zaW11bGF0b3IpIHtcclxuICAgICAgdGhpcy5zaW11bGF0b3Iuc2ltdWxhdGUoZSwgZG9jLCB4LCB5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0ludGVyYWN0aXZlSW1hZ2UuanMiLCJpbXBvcnQgeyQsIHRyfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IEdyYXBoVXRpbHMgZnJvbSAnLi9HcmFwaFV0aWxzJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICcuL01hdGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2FkaW5nQW5pbWF0aW9uIHtcclxuXHJcbiAgZHkodCx5KSB7XHJcbiAgICBjb25zdCB3PXlbMF0sIGE9eVsxXTtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIC10aGlzLmcqTWF0aC5jb3MoYSksXHJcbiAgICAgIHdcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBpbnRlZ3JhdGUoVCkge1xyXG4gICAgbGV0IHQ9MCwgZHQ9dGhpcy5wLmR0LCBvcyA9IHRoaXMub3M7XHJcbiAgICB3aGlsZSh0PFQpIHtcclxuICAgICAgaWYodCtkdD5UKSB7XHJcbiAgICAgICAgZHQ9VC10O1xyXG4gICAgICB9XHJcbiAgICAgIG9zPU1
13345hdGhVdGlscy5yazQodGhpcy5keS5iaW5kKHtnOiB0aGlzLnAuZ30pLCAwLCBkdCwgb3MpO1xyXG4gICAgICB0Kz1kdDtcclxuICAgIH1cclxuICAgIHJldHVybiBvcztcclxuICB9XHJcblxyXG4gIGNhbGNUaW1lVG8odGFyZ2V0KSB7XHJcbiAgICBsZXQgdD0wLCBkdD10aGlzLnAuZHQsIG9zID0gdGhpcy5vcztcclxuICAgIHdoaWxlKE1hdGguYWJzKG9zWzFdLXRhcmdldCk+MWUtNCkge1xyXG4gICAgICBjb25zdCBub3M9TWF0aFV0aWxzLnJrNCh0aGlzLmR5LmJpbmQoe2c6IHRoaXMucC5nfSksIDAsIGR0LCBvcyk7XHJcbiAgICAgIGlmKG5vc1swXTwwICYmIG5vc1sxXTx0YXJnZXQgfHwgbm9zWzBdPjAgJiYgbm9zWzFdPnRhcmdldCkge1xyXG4gICAgICAgIGR0Lz0yO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG9zID0gbm9zO1xyXG4gICAgICAgIHQrPWR0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShUKSB7XHJcbiAgICB0aGlzLm9zID0gdGhpcy5pbnRlZ3JhdGUoVCk7XHJcblxyXG4gICAgdGhpcy50Kz1UXHJcbiAgICBpZih0aGlzLnQ+PXRoaXMucC51cGRhdGVJbnRlcnZhbCkge1xyXG4gICAgICB0aGlzLnQgPSAwO1xyXG4gICAgICBjb25zdCByID0gMC4wNipNYXRoLm1pbih0aGlzLmMud2lkdGgsIHRoaXMuYy5oZWlnaHQpLFxyXG4gICAgICAgICAgICBhID0gdGhpcy5vc1sxXSxcclxuICAgICAgICAgICAgeDAgPSAwLjUqdGhpcy5jLndpZHRoLFxyXG4gICAgICAgICAgICB5MCA9IDAuNSp0aGlzLmMuaGVpZ2h0LFxyXG4gICAgICAgICAgICBjdHggPSB0aGlzLmN0eDtcclxuXHJcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jLndpZHRoLCB0aGlzLmMuaGVpZ2h0KTtcclxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICBjdHguZmlsbFN0eWxlID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKHRoaXMucC5jb2xvciwxKTtcclxuICAgICAgY3R4LnJlY3QoMCwgMCwgdGhpcy5jLndpZHRoLCB0aGlzLmMuaGVpZ2h0KTtcclxuICAgICAgY3R4LmZpbGwoKTtcclxuXHJcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgY3R4LnNoYWRvd0JsdXIgPSA1MDtcclxuICAgICAgY3R4LmZpbGxTdHlsZSA9IEdyYXBoVXRpbHMuY29sb3IyUmdiYShHcmFwaFV0aWxzLmludmVyc2VDb2xvcih0aGlzLnAuY29sb3IsMC45KSxNYXRoLmFicyh0aGlzLm9zWzBdLzYuMzYpKTtcclxuICAgICAgY3R4LnNoYWRvd0NvbG9yID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKEdyYXBoVXRpbHMuaW52ZXJzZUNvbG9yKHRoaXMucC5jb2xvciwxKSwwLjkpO1xyXG4gICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IDA7XHJcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMDtcclxuICAgICAgY3R4LmZvbnQ9J2JvbGQgJytNYXRoLnJvdW5kKDAuMjUqcikrJ3B4IEFyaWFsJztcclxuICAgICAgY3R4LnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XHJcbiAgICAgIGN0eC5maWxsVGV4dCh0cignTG9hZGluZy4uLicpLHgwLHkwKTtcclxuXHJcbiAgICAgIGNvbnN0IHBzID0gMTAsIGRhPTIqTWF0aC5QSS9wczsvLzIuNSpfci9yXHJcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IEdyYXBoVXRpbHMuY29sb3IyUmdiYShHcmFwaFV0aWxzLmludmVyc2VDb2xvcih0aGlzLnAuY29sb3IsMSksMC43KTtcclxuICAgICAgZm9yKGxldCBpPTAsIF9hPWEsIF9yPTAuMipyOyBpPHBzOyArK2ksIF9yKj0wLjksIF9hKz1kYSkge1xyXG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKEdyYXBoVXRpbHMuaW52ZXJzZUNvbG9yKHRoaXMucC5jb2xvciwocHMtaSkvcHMpLDAuNyoocHMtaSkvcHMpO1xyXG4gICAgICAgIGNvbnN0IGN4PXgwK3IqTWF0aC5jb3MoX2EpLCBjeT15MC1yKk1hdGguc2luKF9hKSwgbng9eDArcipNYXRoLmNvcyhfYStkYSksIG55PXkwLXIqTWF0aC5zaW4oX2ErZGEpO1xyXG4gICAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMC4yKihueC1jeCk7XHJcbiAgICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwLjIqKG55LWN5KTtcclxuICAgICAgICBjdHguYXJjKGN4LCBjeSwgX3IsIDAsIE1hdGguUEkqMiwgMSk7XHJcbiAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLm9uQ2hhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmMsIHRoaXMucC5jb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEltYWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYztcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmMud2lkdGggPSAwO1xyXG4gICAgdGhpcy5jLmhlaWdodCA9IDA7XHJcbiAgICBkZWxldGUgdGhpcy5jdHg7XHJcbiAgICBkZWxldGUgdGhpcy5jO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU3ByaXRlKG4pIHtcclxuICAgIGNvbnN0IGMgPSAkKCc8Y2FudmFzIHdpZHRoPVwiJyt0aGlzLmMud2lkdGgqbisnXCIgaGVpZ2h0PVwiJyt0aGlzLmMuaGVpZ2h0KydcIj48L2NhbnZhcz4nKVswXSwgY3R4ID0gYy5nZXRDb250ZXh0KCcyZCcpLFxyXG4gICAgdCA9IHRoaXMuY2FsY1RpbWVUbyh0aGlzLm9zWzFdK01hdGguc2lnbih0aGlzLm9zWzBdKSoyKk1hdGguUEkpLCBkdD10LyhuKzEpO1xyXG4gICAgY29uc3Qge3VwZGF0ZUludGVydmFsfSA9IHRoaXMucDtcclxuICAgIHRoaXMucC51cGRhdGVJbnRlcnZhbCA9IDA7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxuOyArK2kpIHtcclxuICAgICAgdGhpcy51cGRhdGUoZHQpO1xyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMuYywgaSp0aGlzLmMud2lkdGgsIDApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wLnVwZGF0ZUludGVydmFsID0gdXBkYXRlSW50ZXJ2YWw7XHJcbiAgICByZXR1cm4gYztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIGNvbG9yKSB7XHJcbiAgICBjb25zdCBqQyA9ICQoJzxjYW52YXMgd2lkdGg9XCInK3dpZHRoKydcIiBoZWlnaHQ9XCInK2hlaWdodCsnXCI+PC9jYW52YXM+Jyk7XHJcbiAgICB0aGlzLmMgPSBqQ1swXTtcclxuICAgIHRoaXMucCA9IHtcclxuICAgICAgZzogOS44LFxyXG4gICAgICBkdDogMS82MCxcclxuICAgICAgY29sb3IsXHJcbiAgICAgIHVwZGF0ZUludGVydmFsOiAwLjI1XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jdHggPSB0aGlzLmMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIHRoaXMub3MgPSBbLTIsIE1hdGguUEkvMl07XHJcbiAgICB0aGlzLnQgPSB0aGlzLnAudXBkYXRlSW50ZXJ2YWw7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Mb2FkaW5nQW5pbWF0aW9uLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvYWRpbmdDb250cm9sbGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3Iodmlldywgc2hvd1Byb2dyZXNzPXRydWUsIGxvYWRpbmdNc2c9dW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLnZpZXcgPSB2aWV3O1xyXG4gICAgdGhpcy5wcm9ncmVzcyA9IDA7XHJcbiAgICB0aGlzLnNob3dQcm9ncmVzcyA9IHNob3dQcm9ncmVzcztcclxuICAgIHRoaXMuZ2V0TG9hZGluZ01zZyA9IGxvYWRpbmdNc2cgfHwgTG9hZGluZ0NvbnRyb2xsZXIuZGVmYXVsdExvYWRpbmdNc2c7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkZWZh
13345dWx0TG9hZGluZ01zZyhwcm9ncmVzcykge1xyXG4gICAgcmV0dXJuIFsnUGxlYXNlIHdhaXQuLi4gdGhlIEFwcGxpY2F0aW9uIGlzIExvYWRpbmc6ICcsIHByb2dyZXNzLCAnJSddLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuc2hvd1Byb2dyZXNzID0gZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICAgIGRlbGV0ZSB0aGlzLnZpZXc7XHJcbiAgfVxyXG5cclxuICBzZXRQcm9ncmVzcyh2KSB7XHJcbiAgICB0aGlzLnByb2dyZXNzID0gdjtcclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVmlldygpIHtcclxuICAgIGlmKHRoaXMudmlldykge1xyXG5cclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCd3aWRMb2FkaW5nUHJvZ3Jlc3MnLCB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuc2hvd1Byb2dyZXNzLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ3R4dExvYWRpbmdQcm9ncmVzcycsIHtcclxuICAgICAgICB2YWx1ZTogdGhpcy5nZXRMb2FkaW5nTXNnKHRoaXMucHJvZ3Jlc3MpLFxyXG4gICAgICAgIHZpc2libGU6IHRydWVcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBmb3IobGV0IG5hbWUgb2YgdGhpcy52aWV3LmdldExpbmtzKCkpIHtcclxuICAgICAgICB0aGlzLnZpZXcuc2V0U3RhdGUobmFtZSwge1xyXG4gICAgICAgICAgZW5hYmxlOiBmYWxzZSxcclxuICAgICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnaW5wUGFnZXMnLCB7XHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ2lucFBhZ2UnLCB7XHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBlbmFibGU6IGZhbHNlLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Mb2FkaW5nQ29udHJvbGxlci5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBFdmVudENvbnZlcnRlciBmcm9tICcuL0V2ZW50Q29udmVydGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vdXNlRXZlbnRDb252ZXJ0ZXIgZXh0ZW5kcyBFdmVudENvbnZlcnRlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHduZCwgZG9jLCBlbGVtZW50KSB7XHJcbiAgICBzdXBlcih3bmQsIGRvYyk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIGNvbnZlcnQ6IHRoaXMuY29udmVydC5iaW5kKHRoaXMpXHJcbiAgICB9O1xyXG4gICAgJCh0aGlzLmVsZW1lbnQpLm9uKCdtb3VzZW1vdmUgbW91c2Vkb3duIG1vdXNlb3ZlciBtb3VzZW91dCBjbGljaycsIHRoaXMuYmluZHMuY29udmVydCk7XHJcbiAgICAkKHRoaXMuZG9jKS5vbignbW91c2V1cCcsIHRoaXMuYmluZHMuY29udmVydCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgJCh0aGlzLmVsZW1lbnQpLm9mZignbW91c2Vtb3ZlIG1vdXNlZG93biBtb3VzZW92ZXIgbW91c2VvdXQgY2xpY2snLCB0aGlzLmJpbmRzLmNvbnZlcnQpO1xyXG4gICAgJCh0aGlzLmRvYykub2ZmKCdtb3VzZXVwJywgdGhpcy5iaW5kcy5jb252ZXJ0KTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvTW91c2VFdmVudENvbnZlcnRlci5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4vTWF0aFV0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9iamVjdDNEV2F0Y2hlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbCwgYm91bmRCb3hDbGIsIHRlc3RTY2FsZT10aGlzLnRlc3RTY2FsZSkge1xyXG4gICAgdGhpcy52aXN1YWwgPSB2aXN1YWw7XHJcbiAgICB0aGlzLmJvdW5kQm94Q2xiID0gYm91bmRCb3hDbGI7XHJcbiAgICB0aGlzLnRlc3RTY2FsZSA9IHRlc3RTY2FsZTtcclxuICAgIHRoaXMuY2FtZXJhID0gdmlzdWFsLmNhbWVyYTtcclxuICAgIHRoaXMuZWxlbWVudCA9IHRoaXMudmlzdWFsLmVsZW1lbnQ7XHJcbiAgICB0aGlzLmVsZW1lbnRTaXplID0ge3c6IDEsIGg6IDF9O1xyXG4gICAgdGhpcy5kZXZpY2VQaXhlbFJhdGlvID0gdGhpcy52aXN1YWwud25kLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcclxuICAgIHRoaXMub3JiaXQgPSB2aXN1YWwuZ2V0T3JiaXQoKTtcclxuICAgIHRoaXMuc2NhbGUgPSAxO1xyXG5cclxuICAgIHRoaXMuZXBzID0gMWUtNDtcclxuICAgIHRoaXMudiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgICB0aGlzLmR2ID0gbmV3IFRIUkVFLlZlY3RvcjIoKTtcclxuXHJcbiAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICB2aXN1YWwuYWRkUmVuZGVyQ2FsbGJhY2sodGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgdGhpcy5vcyA9IHtcclxuICAgICAgdng6IDAsXHJcbiAgICAgIHZ5OiAwLFxyXG4gICAgICB4OiAwLFxyXG4gICAgICB5OiAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5vcmJpdC51cGRhdGUoKTtcclxuICAgIHRoaXMuY2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XHJcbiAgICBsZXQgYm94ID0gdGhpcy5jb21wdXRlQ2xpZW50Qm91bmRCb3goKSwgaz0xLjExO1xyXG4gICAgdGhpcy5tb3ZlUGFuKHt4OiAtaypib3gubWlkLngsIHk6IC1rKmJveC5taWQueX0pO1xyXG4gIH1cclxuXHJcbiAgbW92ZVBhbihkdikge1xyXG4gICAgdGhpcy5vcmJpdC5wYW4oZHYueCp0aGlzLnZpc3VhbC53aWR0aCgpLCAtZHYueSp0aGlzLnZpc3VhbC5oZWlnaHQoKSk7XHJcbiAgfVxyXG5cclxuICB2VG9DYW1lcmEodikge1xyXG4gICAgdi5wcm9qZWN0KHRoaXMuY2FtZXJhKTtcclxuICAgIHJldHVybi
13345B7XHJcbiAgICAgIHg6IDAuNSp2LngsXHJcbiAgICAgIHk6IDAuNSp2LnlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb21wdXRlQ2xpZW50Qm91bmRCb3goKSB7XHJcbiAgICBjb25zdCBib3ggPSB0aGlzLmJvdW5kQm94Q2xiKCksXHJcbiAgICAgIHhzID0gW2JveC5taW4ueCwgYm94Lm1heC54XSxcclxuICAgICAgeXMgPSBbMCwgMF0sXHJcbiAgICAgIHpzID0gW2JveC5taW4ueiwgYm94Lm1heC56XTtcclxuXHJcbiAgICBjb25zdCBwcyA9IFtdLCByZXMgPSB7bWF4OiB7fSwgbWluOiB7fX07XHJcbiAgICBmb3IobGV0IHggb2YgeHMpIHtcclxuICAgICAgZm9yKGxldCB5IG9mIHlzKSB7XHJcbiAgICAgICAgZm9yKGxldCB6IG9mIHpzKSB7XHJcbiAgICAgICAgICBwcy5wdXNoKHRoaXMudlRvQ2FtZXJhKHRoaXMudi5zZXQoeCx5LHopKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHMuc29ydCgocDEsIHAyKT0+IHAxLngtcDIueCk7XHJcbiAgICByZXMubWluLnggPSBwc1swXS54O1xyXG4gICAgcmVzLm1heC54ID0gcHNbcHMubGVuZ3RoLTFdLng7XHJcbiAgICBwcy5zb3J0KChwMSwgcDIpPT4gcDEueS1wMi55KTtcclxuICAgIHJlcy5taW4ueSA9IHBzWzBdLnk7XHJcbiAgICByZXMubWF4LnkgPSBwc1twcy5sZW5ndGgtMV0ueTtcclxuXHJcbiAgICByZXMud2lkdGggPSByZXMubWF4LngtcmVzLm1pbi54O1xyXG4gICAgcmVzLmhlaWdodCA9IHJlcy5tYXgueS1yZXMubWluLnk7XHJcblxyXG4gICAgcmVzLm1pZCA9IHtcclxuICAgICAgeDogMC41KihyZXMubWF4LngrcmVzLm1pbi54KSxcclxuICAgICAgeTogMC41KihyZXMubWF4LnkrcmVzLm1pbi55KVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgc2V0T2JqZWN0KGJvdW5kQm94Q2xiKSB7XHJcbiAgICB0aGlzLmJvdW5kQm94Q2xiID0gYm91bmRCb3hDbGI7XHJcbiAgfVxyXG5cclxuICB0ZXN0U2NhbGUoKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbXB1dGVDb3JyKEssIG1pbiwgbWF4KSB7XHJcbiAgICBsZXQgY29yciA9IDA7XHJcbiAgICBpZihLPDEpIHtcclxuICAgICAgaWYobWluPi0wLjUpIHtcclxuICAgICAgICBjb3JyID0gLTAuNS1taW47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihtYXg8MC41KSB7XHJcbiAgICAgICAgY29yciA9IDAuNS1tYXg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZihtaW48LTAuNSkge1xyXG4gICAgICAgIGNvcnIgPSAtMC41LW1pbjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKG1heD4wLjUpIHtcclxuICAgICAgICBjb3JyID0gMC41LW1heDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvcnI7XHJcbiAgfVxyXG5cclxuICBnZXRTY2FsZSgpIHtcclxuICAgIGNvbnN0IGJveCA9IHRoaXMuY29tcHV0ZUNsaWVudEJvdW5kQm94KCksXHJcbiAgICAgIEt4ID0gdGhpcy5lbGVtZW50U2l6ZS53L2JveC53aWR0aCxcclxuICAgICAgS3kgPSB0aGlzLmVsZW1lbnRTaXplLmgvYm94LmhlaWdodDtcclxuICAgIHJldHVybiAxL01hdGgubWluKEt4LCBLeSk7XHJcbiAgfVxyXG5cclxuICBjZW50ZXJWaWV3KFQpIHtcclxuICAgIGxldCBib3ggPSB0aGlzLmNvbXB1dGVDbGllbnRCb3VuZEJveCgpLFxyXG4gICAgICBLeCA9IHRoaXMuZWxlbWVudFNpemUudy9ib3gud2lkdGgsXHJcbiAgICAgIEt5ID0gdGhpcy5lbGVtZW50U2l6ZS5oL2JveC5oZWlnaHQsXHJcbiAgICAgIEsgPSBNYXRoLm1pbihLeCwgS3kpO1xyXG5cclxuICAgIGlmKHRoaXMudGVzdFNjYWxlKCkgJiYgTWF0aC5hYnMoMS9LLXRoaXMuc2NhbGUpPnRoaXMuZXBzKSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gMS9LKzAuMioodGhpcy5zY2FsZS0xL0spO1xyXG4gICAgICB0aGlzLm9yYml0LnNldFNjYWxlKHRoaXMub3JiaXQuZ2V0U2NhbGUoKS8oSypzY2FsZSkpO1xyXG4gICAgICB0aGlzLm9yYml0LnVwZGF0ZSgpO1xyXG4gICAgICB0aGlzLmNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xyXG4gICAgICBib3ggPSB0aGlzLmNvbXB1dGVDbGllbnRCb3VuZEJveCgpO1xyXG4gICAgICAgIEt4ID0gdGhpcy5lbGVtZW50U2l6ZS53L2JveC53aWR0aDtcclxuICAgICAgICBLeSA9IHRoaXMuZWxlbWVudFNpemUuaC9ib3guaGVpZ2h0O1xyXG4gICAgICAgIEsgPSBNYXRoLm1pbihLeCwgS3kpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGR2ID0gdGhpcy5kdjtcclxuICAgIGlmKEs+MS10aGlzLmVwcykge1xyXG4gICAgICBkdi5zZXQoLWJveC5taWQueCwgLWJveC5taWQueSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZHYuc2V0KHRoaXMuY29tcHV0ZUNvcnIoS3gsIGJveC5taW4ueCwgYm94Lm1heC54KSxcclxuICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUNvcnIoS3ksIGJveC5taW4ueSwgYm94Lm1heC55KSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoTWF0aC5zcXJ0KHRoaXMub3MudngqdGhpcy5vcy52eCt0aGlzLm9zLnZ5KnRoaXMub3MudnkpPjAuMDAzIHx8IGR2Lmxlbmd0aCgpPjAuMDAzKSB7XHJcbiAgICAgIGxldCBkdCA9IDEvNjAsIHQ9MCwgb3MgPSB7XHJcbiAgICAgICAgLi4udGhpcy5vcyxcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDBcclxuICAgICAgfTtcclxuICAgICAgb3MudGYgPSAodngsIHZ5LCB4LCB5KT0+ICh7XHJcbiAgICAgICAgeDogNzUqKGR2LngteCkvTWF0aC5wb3codGhpcy5kZXZpY2VQaXhlbFJhdGlvLCAxLjApLFxyXG4gICAgICAgIHk6IDc1Kihkdi55LXkpL01hdGgucG93KHRoaXMuZGV2aWNlUGl4ZWxSYXRpbywgMS4wKVxyXG4gICAgICB9KTtcclxuICAgICAgd2hpbGUodDxUKSB7XHJcbiAgICAgICAgaWYodCtkdD5UKSB7XHJcbiAgICAgICAgICBkdCA9IFQtdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgb3MgPSB0aGlzLmludGVncmF0ZShvcywgZHQpO1xyXG4gICAgICAgIHQgKz0gZHQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb3ZlUGFuKG9zKTtcclxuICAgICAgdGhpcy5vcyA9IG9zO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW50ZWdyYXRlKG9zLCBkdCkge1xyXG4gICAgY29uc3QgW3Z4LCB2eSwgeCwgeV0gPSBNYXRoVXRpbHMucms0KFxyXG4gICAgICB0aGlzLmR5LmJpbmQob3MpLFxyXG4gICAgICAwLFxyXG4gICAgICBkdCxcclxuICAgICAgW29zLnZ4LCBvcy52eSwgb3MueCwgb3MueV1cclxuICAgICk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5vcyxcclxuICAgICAgdngsIHZ5LCB4LCB5XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZHkodCxZKSB7XHJcbiAgICBjb25zdCBbdngsIHZ5LCB4LCB5XSA9IFksIHZkID0gMTUsIHRmID0gdGhpcy50Zih2eCwgdnksIHgsIHkpO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgdGYueC12ZCp2eCxcclxuICAgICAgdGYueS12ZCp2eSxcclxuICAgICAgdngsXHJcbiAgICAgIHZ5XHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGR0KSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQgJiYgdGhpcy5ib3VuZEJveENsYikge1xyXG4gICAgICB0aGlzLmNlbnRlclZpZXcoZHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvT2JqZWN0M0RXYXRjaGVyLmpzIiwiaW1wb3J0IHtUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcmJpdCBleHRlbmRzIFRIUkVFLkV2ZW50RGlzcGF0Y2hlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG9iamVjdCwgZG9tRWxlbWVudCkge1xyXG4gICAgc3VwZXIoKTtcclxuICBcdHRoaXMub2JqZWN0ID0gb2JqZWN0O1xyXG4gIFx0dGhpcy5kb21FbGVtZW50ID0gZG9tRWxlbWVudCB8fCBkb2N1bWVudC5ib2R5O1xyXG5cclxuICBcdC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHRoaXMgY29udHJvbFxyXG4gIFx0dGhpcy5lbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgXHQvLyBcInRhcmdldFwiIHNldHMgdGhlIGxvY2F0aW9uIG9mIGZvY3VzLCB3aGVyZSB0aGUgb2JqZWN0IG9yYml0cyBhcm91bmRcclxuICBcdHRoaXMudGFyZ2V0ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuXHJcbiAgXHQvLyBIb3cgZmFyIHlvdSBjYW4gZG9sbHkgaW4gYW5kIG91dChQZXJzcG
13345VjdGl2ZUNhbWVyYSBvbmx5KVxyXG4gIFx0dGhpcy5taW5EaXN0YW5jZSA9IDA7XHJcbiAgXHR0aGlzLm1heERpc3RhbmNlID0gSW5maW5pdHk7XHJcblxyXG4gIFx0Ly8gSG93IGZhciB5b3UgY2FuIHpvb20gaW4gYW5kIG91dChPcnRob2dyYXBoaWNDYW1lcmEgb25seSlcclxuICBcdHRoaXMubWluWm9vbSA9IDA7XHJcbiAgXHR0aGlzLm1heFpvb20gPSBJbmZpbml0eTtcclxuXHJcbiAgXHQvLyBIb3cgZmFyIHlvdSBjYW4gb3JiaXQgdmVydGljYWxseSwgdXBwZXIgYW5kIGxvd2VyIGxpbWl0cy5cclxuICBcdC8vIFJhbmdlIGlzIDAgdG8gTWF0aC5QSSByYWRpYW5zLlxyXG4gIFx0dGhpcy5taW5Qb2xhckFuZ2xlID0gMDsgLy8gcmFkaWFuc1xyXG4gIFx0dGhpcy5tYXhQb2xhckFuZ2xlID0gTWF0aC5QSTsgLy8gcmFkaWFuc1xyXG5cclxuICBcdC8vIEhvdyBmYXIgeW91IGNhbiBvcmJpdCBob3Jpem9udGFsbHksIHVwcGVyIGFuZCBsb3dlciBsaW1pdHMuXHJcbiAgXHQvLyBJZiBzZXQsIG11c3QgYmUgYSBzdWItaW50ZXJ2YWwgb2YgdGhlIGludGVydmFsIFstTWF0aC5QSSwgTWF0aC5QSSBdLlxyXG4gIFx0dGhpcy5taW5BemltdXRoQW5nbGUgPSAtSW5maW5pdHk7IC8vIHJhZGlhbnNcclxuICBcdHRoaXMubWF4QXppbXV0aEFuZ2xlID0gSW5maW5pdHk7IC8vIHJhZGlhbnNcclxuXHJcbiAgXHQvLyBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgZGFtcGluZyAoaW5lcnRpYSlcclxuICBcdC8vIElmIGRhbXBpbmcgaXMgZW5hYmxlZCwgeW91IG11c3QgY2FsbCBjb250cm9scy51cGRhdGUoKSBpbiB5b3VyIGFuaW1hdGlvbiBsb29wXHJcbiAgXHR0aGlzLmVuYWJsZURhbXBpbmcgPSBmYWxzZTtcclxuICBcdHRoaXMuZGFtcGluZ0ZhY3RvciA9IDAuMjU7XHJcblxyXG4gIFx0Ly8gVGhpcyBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyBkb2xseWluZyBpbiBhbmQgb3V0OyBsZWZ0IGFzIFwiem9vbVwiIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cclxuICBcdC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHpvb21pbmdcclxuICBcdHRoaXMuZW5hYmxlWm9vbSA9IHRydWU7XHJcbiAgXHR0aGlzLnpvb21TcGVlZCA9IDEuMDtcclxuXHJcbiAgXHQvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSByb3RhdGluZ1xyXG4gIFx0dGhpcy5lbmFibGVSb3RhdGUgPSB0cnVlO1xyXG4gIFx0dGhpcy5yb3RhdGVTcGVlZCA9IDEuMDtcclxuXHJcbiAgXHQvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBwYW5uaW5nXHJcbiAgXHR0aGlzLmVuYWJsZVBhbiA9IHRydWU7XHJcblxyXG4gIFx0Ly8gU2V0IHRvIHRydWUgdG8gYXV0b21hdGljYWxseSByb3RhdGUgYXJvdW5kIHRoZSB0YXJnZXRcclxuICBcdC8vIElmIGF1dG8tcm90YXRlIGlzIGVuYWJsZWQsIHlvdSBtdXN0IGNhbGwgY29udHJvbHMudXBkYXRlKCkgaW4geW91ciBhbmltYXRpb24gbG9vcFxyXG4gIFx0dGhpcy5hdXRvUm90YXRlID0gZmFsc2U7XHJcbiAgXHR0aGlzLmF1dG9Sb3RhdGVTcGVlZCA9IDIuMDsgLy8gMzAgc2Vjb25kcyBwZXIgcm91bmQgd2hlbiBmcHMgaXMgNjBcclxuXHJcbiAgXHQvLyBmb3IgcmVzZXRcclxuICBcdHRoaXMudGFyZ2V0MCA9IHRoaXMudGFyZ2V0LmNsb25lKCk7XHJcbiAgXHR0aGlzLnBvc2l0aW9uMCA9IHRoaXMub2JqZWN0LnBvc2l0aW9uLmNsb25lKCk7XHJcbiAgXHR0aGlzLnpvb20wID0gdGhpcy5vYmplY3Quem9vbTtcclxuXHJcbiAgXHQvL1xyXG4gIFx0Ly8gcHVibGljIG1ldGhvZHNcclxuICBcdC8vXHJcbiAgXHR0aGlzLmdldFBvbGFyQW5nbGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBzcGhlcmljYWwucGhpO1xyXG4gIFx0fTtcclxuXHJcbiAgXHR0aGlzLmdldEF6aW11dGhhbEFuZ2xlID0gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gc3BoZXJpY2FsLnRoZXRhO1xyXG4gIFx0fTtcclxuXHJcbiAgXHR0aGlzLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRzY29wZS50YXJnZXQuY29weShzY29wZS50YXJnZXQwKTtcclxuICBcdFx0c2NvcGUub2JqZWN0LnBvc2l0aW9uLmNvcHkoc2NvcGUucG9zaXRpb24wKTtcclxuICBcdFx0c2NvcGUub2JqZWN0Lnpvb20gPSBzY29wZS56b29tMDtcclxuXHJcbiAgXHRcdHNjb3BlLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgXHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoY2hhbmdlRXZlbnQpO1xyXG5cclxuICBcdFx0c2NvcGUudXBkYXRlKCk7XHJcbiAgXHR9O1xyXG5cclxuICAgIHRoaXMuem9vbU91dCA9IGZ1bmN0aW9uKHNwZWVkPXRoaXMuem9vbVNwZWVkKSB7XHJcbiAgICAgIGNvbnN0IF9zcGVlZCA9IHRoaXMuem9vbVNwZWVkO1xyXG4gICAgICB0aGlzLnpvb21TcGVlZCA9IHNwZWVkO1xyXG4gICAgICBkb2xseUluKGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgdGhpcy56b29tU3BlZWQgPSBfc3BlZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuem9vbUluID0gZnVuY3Rpb24oc3BlZWQ9dGhpcy56b29tU3BlZWQpIHtcclxuICAgICAgY29uc3QgX3NwZWVkID0gdGhpcy56b29tU3BlZWQ7XHJcbiAgICAgIHRoaXMuem9vbVNwZWVkID0gc3BlZWQ7XHJcbiAgICAgIGRvbGx5T3V0KGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgdGhpcy56b29tU3BlZWQgPSBfc3BlZWQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZ2V0U2NhbGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHNjYWxlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0U2NhbGUgPSBmdW5jdGlvbihuZXdTY2FsZSkge1xyXG4gICAgICBzY2FsZSA9IG5ld1NjYWxlO1xyXG4gICAgfVxyXG5cclxuICBcdC8vIHRoaXMgbWV0aG9kIGlzIGV4cG9zZWQsIGJ1dCBwZXJoYXBzIGl0IHdvdWxkIGJlIGJldHRlciBpZiB3ZSBjYW4gbWFrZSBpdCBwcml2YXRlLi4uXHJcbiAgXHR0aGlzLnVwZGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIFx0XHR2YXIgb2Zmc2V0ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICBcdFx0Ly8gc28gY2FtZXJhLnVwIGlzIHRoZSBvcmJpdCBheGlzXHJcbiAgXHRcdHZhciBxdWF0ID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKS5zZXRGcm9tVW5pdFZlY3RvcnMob2JqZWN0LnVwLCBuZXcgVEhSRUUuVmVjdG9yMygwLCAxLCAwKSk7XHJcbiAgXHRcdHZhciBx
13345dWF0SW52ZXJzZSA9IHF1YXQuY2xvbmUoKS5pbnZlcnNlKCk7XHJcbiAgXHRcdHZhciBsYXN0UG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gIFx0XHR2YXIgbGFzdFF1YXRlcm5pb24gPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpO1xyXG5cclxuICBcdFx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAoKSB7XHJcbiAgXHRcdFx0dmFyIHBvc2l0aW9uID0gc2NvcGUub2JqZWN0LnBvc2l0aW9uO1xyXG4gIFx0XHRcdG9mZnNldC5jb3B5KHBvc2l0aW9uKS5zdWIoc2NvcGUudGFyZ2V0KTtcclxuICBcdFx0XHQvLyByb3RhdGUgb2Zmc2V0IHRvIFwieS1heGlzLWlzLXVwXCIgc3BhY2VcclxuICBcdFx0XHRvZmZzZXQuYXBwbHlRdWF0ZXJuaW9uKHF1YXQpO1xyXG4gIFx0XHRcdC8vIGFuZ2xlIGZyb20gei1heGlzIGFyb3VuZCB5LWF4aXNcclxuICBcdFx0XHRzcGhlcmljYWwuc2V0RnJvbVZlY3RvcjMob2Zmc2V0KTtcclxuICBcdFx0XHRpZihzY29wZS5hdXRvUm90YXRlKSB7XHJcbiAgXHRcdFx0XHRyb3RhdGVMZWZ0KGdldEF1dG9Sb3RhdGlvbkFuZ2xlKCkpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRzcGhlcmljYWwudGhldGEgKz0gc3BoZXJpY2FsRGVsdGEudGhldGE7XHJcbiAgXHRcdFx0c3BoZXJpY2FsLnBoaSArPSBzcGhlcmljYWxEZWx0YS5waGk7XHJcbiAgXHRcdFx0Ly8gcmVzdHJpY3QgdGhldGEgdG8gYmUgYmV0d2VlbiBkZXNpcmVkIGxpbWl0c1xyXG4gIFx0XHRcdHNwaGVyaWNhbC50aGV0YSA9IE1hdGgubWF4KHNjb3BlLm1pbkF6aW11dGhBbmdsZSwgTWF0aC5taW4oc2NvcGUubWF4QXppbXV0aEFuZ2xlLCBzcGhlcmljYWwudGhldGEpKTtcclxuICBcdFx0XHQvLyByZXN0cmljdCBwaGkgdG8gYmUgYmV0d2VlbiBkZXNpcmVkIGxpbWl0c1xyXG4gIFx0XHRcdHNwaGVyaWNhbC5waGkgPSBNYXRoLm1heChzY29wZS5taW5Qb2xhckFuZ2xlLCBNYXRoLm1pbihzY29wZS5tYXhQb2xhckFuZ2xlLCBzcGhlcmljYWwucGhpKSk7XHJcbiAgXHRcdFx0c3BoZXJpY2FsLm1ha2VTYWZlKCk7XHJcbiAgXHRcdFx0c3BoZXJpY2FsLnJhZGl1cyAqPSBzY2FsZTtcclxuICBcdFx0XHQvLyByZXN0cmljdCByYWRpdXMgdG8gYmUgYmV0d2VlbiBkZXNpcmVkIGxpbWl0c1xyXG4gIFx0XHRcdHNwaGVyaWNhbC5yYWRpdXMgPSBNYXRoLm1heChzY29wZS5taW5EaXN0YW5jZSwgTWF0aC5taW4oc2NvcGUubWF4RGlzdGFuY2UsIHNwaGVyaWNhbC5yYWRpdXMpKTtcclxuICBcdFx0XHQvLyBtb3ZlIHRhcmdldCB0byBwYW5uZWQgbG9jYXRpb25cclxuICBcdFx0XHRzY29wZS50YXJnZXQuYWRkKHBhbk9mZnNldCk7XHJcbiAgXHRcdFx0b2Zmc2V0LnNldEZyb21TcGhlcmljYWwoc3BoZXJpY2FsKTtcclxuICBcdFx0XHQvLyByb3RhdGUgb2Zmc2V0IGJhY2sgdG8gXCJjYW1lcmEtdXAtdmVjdG9yLWlzLXVwXCIgc3BhY2VcclxuICBcdFx0XHRvZmZzZXQuYXBwbHlRdWF0ZXJuaW9uKHF1YXRJbnZlcnNlKTtcclxuICBcdFx0XHRwb3NpdGlvbi5jb3B5KHNjb3BlLnRhcmdldCkuYWRkKG9mZnNldCk7XHJcbiAgXHRcdFx0c2NvcGUub2JqZWN0Lmxvb2tBdChzY29wZS50YXJnZXQpO1xyXG5cclxuICBcdFx0XHRpZihzY29wZS5lbmFibGVEYW1waW5nPT09dHJ1ZSkge1xyXG4gIFx0XHRcdFx0c3BoZXJpY2FsRGVsdGEudGhldGEgKj0oMS1zY29wZS5kYW1waW5nRmFjdG9yKTtcclxuICBcdFx0XHRcdHNwaGVyaWNhbERlbHRhLnBoaSAqPSgxLXNjb3BlLmRhbXBpbmdGYWN0b3IpO1xyXG4gIFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHRzcGhlcmljYWxEZWx0YS5zZXQoMCwgMCwgMCk7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRzY2FsZSA9IDE7XHJcbiAgXHRcdFx0cGFuT2Zmc2V0LnNldCgwLCAwLCAwKTtcclxuXHJcbiAgXHRcdFx0Ly8gdXBkYXRlIGNvbmRpdGlvbiBpczpcclxuICBcdFx0XHQvLyBtaW4oY2FtZXJhIGRpc3BsYWNlbWVudCwgY2FtZXJhIHJvdGF0aW9uIGluIHJhZGlhbnMpXjIgPiBFUFNcclxuICBcdFx0XHQvLyB1c2luZyBzbWFsbC1hbmdsZSBhcHByb3hpbWF0aW9uIGNvcyh4LzIpID0gMS14XjIgLyA4XHJcblxyXG4gIFx0XHRcdGlmKHpvb21DaGFuZ2VkIHx8XHJcbiAgXHRcdFx0XHRsYXN0UG9zaXRpb24uZGlzdGFuY2VUb1NxdWFyZWQoc2NvcGUub2JqZWN0LnBvc2l0aW9uKSA+IEVQUyB8fFxyXG4gIFx0XHRcdFx0OCAqKDEtbGFzdFF1YXRlcm5pb24uZG90KHNjb3BlLm9iamVjdC5xdWF0ZXJuaW9uKSkgPiBFUFMpIHtcclxuXHJcbiAgXHRcdFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KGNoYW5nZUV2ZW50KTtcclxuXHJcbiAgXHRcdFx0XHRsYXN0UG9zaXRpb24uY29weShzY29wZS5vYmplY3QucG9zaXRpb24pO1xyXG4gIFx0XHRcdFx0bGFzdFF1YXRlcm5pb24uY29weShzY29wZS5vYmplY3QucXVhdGVybmlvbik7XHJcbiAgXHRcdFx0XHR6b29tQ2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICBcdFx0XHRcdHJldHVybiB0cnVlO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRyZXR1cm4gZmFsc2U7XHJcbiAgXHRcdH07XHJcbiAgXHR9KCk7XHJcblxyXG4gICAgdGhpcy5kaXNwb3NlID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgXHQvL1xyXG4gIFx0Ly8gaW50ZXJuYWxzXHJcbiAgXHQvL1xyXG4gIFx0dmFyIHNjb3BlID0gdGhpcztcclxuICBcdHZhciBjaGFuZ2VFdmVudCA9IHsgdHlwZTogJ2NoYW5nZScgfTtcclxuICBcdHZhciBFUFMgPSAxZS02O1xyXG4gIFx0Ly8gY3VycmVudCBwb3NpdGlvbiBpbiBzcGhlcmljYWwgY29vcmRpbmF0ZXNcclxuICBcdHZhciBzcGhlcmljYWwgPSBuZXcgVEhSRUUuU3BoZXJpY2FsKCk7XHJcbiAgXHR2YXIgc3BoZXJpY2FsRGVsdGEgPSBuZXcgVEhSRUUuU3BoZXJpY2FsKCk7XHJcblxyXG4gIFx0dmFyIHNjYWxlID0gMTtcclxuICBcdHZhciBwYW5PZmZzZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gIFx0dmFyIHpvb21DaGFuZ2VkID0gZmFsc2U7XHJcblxyXG4gIFx0ZnVuY3Rpb24gZ2V0QXV0b1JvdGF0aW9uQW5nbGUoKSB7XHJcbiAgXHRcdHJldHVybiAyICogTWF0aC5QSSAvIDYwIC8gNjAgKiBzY29wZS5hdXRvUm90YXRlU3BlZWQ7XHJcbiAgXHR9XHJcblxyXG4gIFx0ZnVuY3Rpb24gZ2V0Wm9vbVNjYWxlKCkge1xyXG4gIFx0XHRyZXR1cm4gTWF0aC5wb3coMC45NSwgc2NvcGUuem9vbVNwZWVkKTtcclxuICBcdH1cclxuXHJcbiAgXHRmdW5jdGlvbiByb3RhdGVMZWZ0KGFuZ2xlKSB7XHJcbiAgXHRcdHNwaGVyaWNhbERlbHRhLnRoZXRhIC09IGFuZ2xlO1xyXG4gIFx0fVxyXG5cclxuICBcdGZ1bmN0aW9uIHJvdGF0ZVVwKGFuZ2xlKSB7XHJcbiAgXHRcdHNwaGVyaWNhbERlbHRhLnBoaSAtPSBhbmdsZTtcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgcGFuTGVmdCA9IGZ1bmN0aW9uKCkge1xyXG4gIFx0XHR2YXIgdiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgXHRcdHJldHVybi
13345BmdW5jdGlvbiBwYW5MZWZ0KGRpc3RhbmNlLCBvYmplY3RNYXRyaXgpIHtcclxuICBcdFx0XHR2LnNldEZyb21NYXRyaXhDb2x1bW4ob2JqZWN0TWF0cml4LCAwKTsgLy8gZ2V0IFggY29sdW1uIG9mIG9iamVjdE1hdHJpeFxyXG4gIFx0XHRcdHYubXVsdGlwbHlTY2FsYXIoLSBkaXN0YW5jZSk7XHJcbiAgXHRcdFx0cGFuT2Zmc2V0LmFkZCh2KTtcclxuICBcdFx0fTtcclxuICBcdH0oKTtcclxuXHJcbiAgXHR2YXIgcGFuVXAgPSBmdW5jdGlvbigpIHtcclxuICBcdFx0dmFyIHYgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gIFx0XHRyZXR1cm4gZnVuY3Rpb24gcGFuVXAoZGlzdGFuY2UsIG9iamVjdE1hdHJpeCkge1xyXG4gIFx0XHRcdHYuc2V0RnJvbU1hdHJpeENvbHVtbihvYmplY3RNYXRyaXgsIDEpOyAvLyBnZXQgWSBjb2x1bW4gb2Ygb2JqZWN0TWF0cml4XHJcbiAgXHRcdFx0di5tdWx0aXBseVNjYWxhcihkaXN0YW5jZSk7XHJcbiAgXHRcdFx0cGFuT2Zmc2V0LmFkZCh2KTtcclxuICBcdFx0fTtcclxuICBcdH0oKTtcclxuXHJcbiAgXHQvLyBkZWx0YVggYW5kIGRlbHRhWSBhcmUgaW4gcGl4ZWxzOyByaWdodCBhbmQgZG93biBhcmUgcG9zaXRpdmVcclxuICBcdHNjb3BlLnBhbiA9IGZ1bmN0aW9uKCkge1xyXG4gIFx0XHR2YXIgb2Zmc2V0ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICBcdFx0cmV0dXJuIGZ1bmN0aW9uIHBhbihkZWx0YVgsIGRlbHRhWSkge1xyXG4gIFx0XHRcdHZhciBlbGVtZW50ID0gc2NvcGUuZG9tRWxlbWVudDtcclxuICBcdFx0XHRpZihzY29wZS5vYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gIFx0XHRcdFx0Ly8gcGVyc3BlY3RpdmVcclxuICBcdFx0XHRcdHZhciBwb3NpdGlvbiA9IHNjb3BlLm9iamVjdC5wb3NpdGlvbjtcclxuICBcdFx0XHRcdG9mZnNldC5jb3B5KHBvc2l0aW9uKS5zdWIoc2NvcGUudGFyZ2V0KTtcclxuICBcdFx0XHRcdHZhciB0YXJnZXREaXN0YW5jZSA9IG9mZnNldC5sZW5ndGgoKTtcclxuICBcdFx0XHRcdC8vIGhhbGYgb2YgdGhlIGZvdiBpcyBjZW50ZXIgdG8gdG9wIG9mIHNjcmVlblxyXG4gIFx0XHRcdFx0dGFyZ2V0RGlzdGFuY2UgKj0gTWF0aC50YW4oKHNjb3BlLm9iamVjdC5mb3YgLyAyKSAqIE1hdGguUEkgLyAxODAuMCk7XHJcbiAgXHRcdFx0XHQvLyB3ZSBhY3R1YWxseSBkb24ndCB1c2Ugc2NyZWVuV2lkdGgsIHNpbmNlIHBlcnNwZWN0aXZlIGNhbWVyYSBpcyBmaXhlZCB0byBzY3JlZW4gaGVpZ2h0XHJcbiAgXHRcdFx0XHRwYW5MZWZ0KDIgKiBkZWx0YVggKiB0YXJnZXREaXN0YW5jZSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0LCBzY29wZS5vYmplY3QubWF0cml4KTtcclxuICBcdFx0XHRcdHBhblVwKDIgKiBkZWx0YVkgKiB0YXJnZXREaXN0YW5jZSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0LCBzY29wZS5vYmplY3QubWF0cml4KTtcclxuICBcdFx0XHR9IGVsc2UgaWYoc2NvcGUub2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhKSB7XHJcbiAgXHRcdFx0XHQvLyBvcnRob2dyYXBoaWNcclxuICBcdFx0XHRcdHBhbkxlZnQoZGVsdGFYICooc2NvcGUub2JqZWN0LnJpZ2h0LXNjb3BlLm9iamVjdC5sZWZ0KSAvIHNjb3BlLm9iamVjdC56b29tIC8gZWxlbWVudC5jbGllbnRXaWR0aCwgc2NvcGUub2JqZWN0Lm1hdHJpeCk7XHJcbiAgXHRcdFx0XHRwYW5VcChkZWx0YVkgKihzY29wZS5vYmplY3QudG9wLXNjb3BlLm9iamVjdC5ib3R0b20pIC8gc2NvcGUub2JqZWN0Lnpvb20gLyBlbGVtZW50LmNsaWVudEhlaWdodCwgc2NvcGUub2JqZWN0Lm1hdHJpeCk7XHJcbiAgXHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdC8vIGNhbWVyYSBuZWl0aGVyIG9ydGhvZ3JhcGhpYyBub3IgcGVyc3BlY3RpdmVcclxuICBcdFx0XHRcdGNvbnNvbGUud2FybignV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlLXBhbiBkaXNhYmxlZC4nKTtcclxuICBcdFx0XHRcdHNjb3BlLmVuYWJsZVBhbiA9IGZhbHNlO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fTtcclxuICBcdH0oKTtcclxuXHJcbiAgXHRmdW5jdGlvbiBkb2xseUluKGRvbGx5U2NhbGUpIHtcclxuICAgICAgaWYoc2NvcGUub2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICBcdFx0XHRzY2FsZSAvPSBkb2xseVNjYWxlO1xyXG4gIFx0XHR9IGVsc2UgaWYoc2NvcGUub2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhKSB7XHJcbiAgXHRcdFx0c2NvcGUub2JqZWN0Lnpvb20gPSBNYXRoLm1heChzY29wZS5taW5ab29tLCBNYXRoLm1pbihzY29wZS5tYXhab29tLCBzY29wZS5vYmplY3Quem9vbSAqIGRvbGx5U2NhbGUpKTtcclxuICBcdFx0XHRzY29wZS5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gIFx0XHRcdHpvb21DaGFuZ2VkID0gdHJ1ZTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRjb25zb2xlLndhcm4oJ1dBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZS1kb2xseS96b29tIGRpc2FibGVkLicpO1xyXG4gIFx0XHRcdHNjb3BlLmVuYWJsZVpvb20gPSBmYWxzZTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdGZ1bmN0aW9uIGRvbGx5T3V0KGRvbGx5U2NhbGUpIHtcclxuICAgICAgaWYoc2NvcGUub2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICBcdFx0XHRzY2FsZSAqPSBkb2xseVNjYWxlO1xyXG4gIFx0XHR9IGVsc2UgaWYoc2NvcGUub2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhKSB7XHJcbiAgXHRcdFx0c2NvcGUub2JqZWN0Lnpvb20gPSBNYXRoLm1heChzY29wZS5taW5ab29tLCBNYXRoLm1pbihzY29wZS5tYXhab29tLCBzY29wZS5vYmplY3Quem9vbSAvIGRvbGx5U2NhbGUpKTtcclxuICBcdFx0XHRzY29wZS5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gIFx0XHRcdHpvb21DaGFuZ2VkID0gdHJ1ZTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRjb25zb2xlLndhcm4oJ1dBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZS1kb2xseS96b29tIGRpc2FibGVkLicpO1xyXG4gIFx0XHRcdHNjb3BlLmVuYWJsZVpvb20gPSBmYWxzZTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICAgIC8qIEFjdGlvbnMgKi9cclxuXHJcbiAgICBmdW5jdGlvbiByb3RhdGUoZXZlbnQsIGRhdGEpIHtcclxuICAgICAgaWYoc2NvcGUuZW5hYmxlZCAmJiBzY29wZS5lbmFibGVSb3RhdGUgJiYgZGF0YS5zdGF0ZT09PSdtb3ZlJykge1xyXG4gICAgICAgI
13345HZhciBlbGVtZW50ID0gc2NvcGUuZG9tRWxlbWVudDtcclxuICAgICAgICAvLyByb3RhdGluZyBhY3Jvc3Mgd2hvbGUgc2NyZWVuIGdvZXMgMzYwIGRlZ3JlZXMgYXJvdW5kXHJcbiAgICAgICAgcm90YXRlTGVmdCgyICogTWF0aC5QSSAqIGRhdGEuZHggLyBlbGVtZW50LmNsaWVudFdpZHRoICogc2NvcGUucm90YXRlU3BlZWQpO1xyXG4gICAgICAgIC8vIHJvdGF0aW5nIHVwIGFuZCBkb3duIGFsb25nIHdob2xlIHNjcmVlbiBhdHRlbXB0cyB0byBnbyAzNjAsIGJ1dCBsaW1pdGVkIHRvIDE4MFxyXG4gICAgICAgIHJvdGF0ZVVwKDIgKiBNYXRoLlBJICogZGF0YS5keSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0ICogc2NvcGUucm90YXRlU3BlZWQpO1xyXG4gICAgICAgIHNjb3BlLnVwZGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGFuKGV2ZW50LCBkYXRhKSB7XHJcbiAgICAgIGlmKHNjb3BlLmVuYWJsZWQgJiYgc2NvcGUuZW5hYmxlUGFuICYmIGRhdGEuc3RhdGU9PT0nbW92ZScpIHtcclxuICAgICAgICBzY29wZS5wYW4oZGF0YS5keCwgZGF0YS5keSk7XHJcbiAgICAgICAgc2NvcGUudXBkYXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBvZmZzZXREb2xseShldmVudCwgZGF0YSkge1xyXG4gICAgICBpZihzY29wZS5lbmFibGVkICYmIHNjb3BlLmVuYWJsZVpvb20gJiYgZGF0YS5zdGF0ZT09PSdtb3ZlJykge1xyXG4gICAgICAgIGlmKGRhdGEuZHk+MCkge1xyXG4gICAgICAgICAgZG9sbHlJbihnZXRab29tU2NhbGUoKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmKGRhdGEuZHk8MCkge1xyXG4gICAgICAgICAgZG9sbHlPdXQoZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY29wZS51cGRhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHdoZWVsRG9sbHkoZXZlbnQpIHtcclxuICAgICAgaWYoc2NvcGUuZW5hYmxlZCAmJiBzY29wZS5lbmFibGVab29tKSB7XHJcbiAgICAgICAgaWYoZXZlbnQuZGVsdGFZPjApIHtcclxuICAgICAgICAgIGRvbGx5T3V0KGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgICB9IGVsc2UgaWYoZXZlbnQuZGVsdGFZPDApIHtcclxuICAgICAgICAgIGRvbGx5SW4oZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzY29wZS51cGRhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aW9ucyA9IHtcclxuICAgICAgcm90YXRlLFxyXG4gICAgICBwYW4sXHJcbiAgICAgIG9mZnNldERvbGx5LFxyXG4gICAgICB3aGVlbERvbGx5XHJcbiAgICB9XHJcblxyXG4gIFx0Ly8gZm9yY2UgYW4gdXBkYXRlIGF0IHN0YXJ0XHJcbiAgXHR0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvT3JiaXQuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgSW1hZ2VCYXNlIGZyb20gJy4vSW1hZ2VCYXNlJztcclxuaW1wb3J0IFBkZiBmcm9tICcuL1BkZic7XHJcbmltcG9ydCBCYXNlTWF0aFV0aWxzIGZyb20gJy4vQmFzZU1hdGhVdGlscyc7XHJcbmltcG9ydCBDdXN0b21FdmVudENvbnZlcnRlciBmcm9tICcuL0N1c3RvbUV2ZW50Q29udmVydGVyJztcclxuaW1wb3J0IFBvbHlUYXJnZXQgZnJvbSAnLi90YXJnZXRzL1BvbHlUYXJnZXQnO1xyXG5cclxuaW1wb3J0IEZpbmRlciBmcm9tICcuL0ZpbmRlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZGZJbWFnZSBleHRlbmRzIEltYWdlQmFzZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBwZGYsIG4pIHtcclxuICAgIHN1cGVyKGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKTtcclxuXHJcbiAgICB0aGlzLnF1ZXJ5ID0gJyc7XHJcbiAgICB0aGlzLm4gPSBuO1xyXG4gICAgdGhpcy5wZGYgPSBwZGY7XHJcbiAgICB0aGlzLnYgPSB7eDogMCwgeTogMCwgejogMCwgc2V0OiBmdW5jdGlvbih4LHkseikge1xyXG4gICAgICB0aGlzLng9eDsgdGhpcy55PXk7IHRoaXMuej16O1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sIHRyYW5zZm9ybTogZnVuY3Rpb24obSkge1xyXG4gICAgICBjb25zdCB4PW0ubVswXVswXSp0aGlzLngrbS5tWzFdWzBdKnRoaXMueSttLm1bMl1bMF0qdGhpcy56LFxyXG4gICAgICAgICAgICB5PW0ubVswXVsxXSp0aGlzLngrbS5tWzFdWzFdKnRoaXMueSttLm1bMl1bMV0qdGhpcy56LFxyXG4gICAgICAgICAgICB6PW0ubVswXVsyXSp0aGlzLngrbS5tWzBdWzJdKnRoaXMueSttLm1bMl1bMF0qdGhpcy56O1xyXG4gICAgICB0aGlzLng9eDtcclxuICAgICAgdGhpcy55PXk7XHJcbiAgICAgIHRoaXMuej16O1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH19O1xyXG4gICAgdGhpcy5tID0ge206IFtbMSwwLDBdLFswLDEsMF0sWzAsMCwxXV0sIHNldDogZnVuY3Rpb24obTAwLG0wMSxtMDIsbTEwLG0xMSxtMTIsbTIwLG0yMSxtMjIpIHtcclxuICAgICAgdGhpcy5tPVtbbTAwLG0wMSxtMDJdLFttMTAsbTExLG0xMl0sW20yMCxtMjEsbTIyXV07XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfX07XHJcblxyXG4gICAgdGhpcy5zdGFydFJlbmRlciA9ICgpPT4ge1xyXG4gICAgICB0aGlzLnBkZi5nZXRIYW5kbGVyKHRoaXMucmVuZGVyLmJpbmQodGhpcykpO1xyXG4gICAgfTtcclxuICAgIFByb21pc2UucmVzb2x2ZSgpLlxyXG4gICAgICB0aGVuKCgpPT4gdGhpcy5wZGYuZ2V0SGFuZGxlcih0aGlzLmluaXQuYmluZCh0aGlzKSkpO1xyXG4gIH1cclxuXHJcbiAgc2V0UXVlcnkocXVlcnkpIHtcclxuICAgIHRoaXMucXVlcnkgPSBxdWVyeS50cmltKCk7XHJcbiAgICBpZih0aGlzLnRleHRDb250ZW50KSB7XHJcbiAgICAgIHRoaXMuc2V0SGl0cyh0aGlzLnRleHRDb250ZW50KTtcclxuICAgICAgLy8gdGhpcy5maW5pc2hMb2FkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWN0U2l6ZShyKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogclsyXS1yWzBdLFxyXG4gICAgICBoZWlnaHQ6IHJbM10tclsxXVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVBvbHkobSwgcCwgcykge1xyXG4gICAgY29uc3QgcG9seSA9IFtdLCB2ID0gdGhpcy52O1xyXG4gICAgdi5zZXQocC54LCBwLnksIDEpLnRyYW5zZm9ybShtKTtcclxuICAgIHBvbHkucHVzaCh7eDogdi54LCB5Oi
13345B2Lnl9KTtcclxuICAgIHYuc2V0KHAueCwgcC55K3MuaGVpZ2h0LCAxKS50cmFuc2Zvcm0obSk7XHJcbiAgICBwb2x5LnB1c2goe3g6IHYueCwgeTogdi55fSk7XHJcbiAgICB2LnNldChwLngrcy53aWR0aCwgcC55K3MuaGVpZ2h0LCAxKS50cmFuc2Zvcm0obSk7XHJcbiAgICBwb2x5LnB1c2goe3g6IHYueCwgeTogdi55fSk7XHJcbiAgICB2LnNldChwLngrcy53aWR0aCwgcC55LCAxKS50cmFuc2Zvcm0obSk7XHJcbiAgICBwb2x5LnB1c2goe3g6IHYueCwgeTogdi55fSk7XHJcbiAgICByZXR1cm4gcG9seTtcclxuICB9XHJcblxyXG4gIGdldFNpbXVsYXRlZERvYygpIHtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgc2ltdWxhdGUoZSwgZG9jLCB4LCB5KSB7XHJcbiAgICBpZih0aGlzLmV2ZW50Q29udmVydGVyKSB7XHJcbiAgICAgIHRoaXMuZXZlbnRDb252ZXJ0ZXIuY29udmVydChlLCB7ZG9jLCB4LCB5fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRBbm5vdGF0aW9ucyhhbm5vcykge1xyXG4gICAgY29uc3QgdCA9IHRoaXMudmlld3BvcnQudHJhbnNmb3JtLFxyXG4gICAgICB0YXJnZXRzID0gW107XHJcbiAgICB0aGlzLm0uc2V0KFxyXG4gICAgICB0WzBdLHRbMV0sMCxcclxuICAgICAgdFsyXSx0WzNdLDAsXHJcbiAgICAgIHRbNF0sdFs1XSwxKTtcclxuXHJcbiAgICBmb3IobGV0IGFubm8gb2YgYW5ub3MpIHtcclxuICAgICAgaWYgKGFubm8uc3VidHlwZT09PSdMaW5rJykge1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSBhbm5vLnJlY3QsXHJcbiAgICAgICAgICBhUG9zID0ge1xyXG4gICAgICAgICAgICB4OiByZWN0WzBdLFxyXG4gICAgICAgICAgICB5OiByZWN0WzFdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYVN6ID0gdGhpcy5yZWN0U2l6ZShyZWN0KTtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBuZXcgUG9seVRhcmdldCh0aGlzLmNyZWF0ZVBvbHkodGhpcy5tLCBhUG9zLCBhU3opLm1hcCgocCk9PiAoe3g6IHAueC90aGlzLnZpZXdwb3J0LndpZHRoLCB5OiAxLXAueS90aGlzLnZpZXdwb3J0LmhlaWdodH0pKSk7XHJcbiAgICAgICAgdGFyZ2V0LmFubm8gPSBhbm5vO1xyXG4gICAgICAgIHRhcmdldC5jYWxsYmFjayA9IHRoaXMuYW5ub0NsYi5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRhcmdldHMucHVzaCh0YXJnZXQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZih0YXJnZXRzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmV2ZW50Q29udmVydGVyID0gbmV3IEN1c3RvbUV2ZW50Q29udmVydGVyKHRoaXMud25kLCB0aGlzLmRvYywgUG9seVRhcmdldC50ZXN0LCB0aGlzLmdldFNpbXVsYXRlZERvYygpKTtcclxuICAgICAgZm9yKGxldCB0YXJnZXQgb2YgdGFyZ2V0cykge1xyXG4gICAgICAgIHRoaXMuZXZlbnRDb252ZXJ0ZXIuYWRkQ3VzdG9tKHRhcmdldCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEhpdHModGV4dENvbnRlbnQpIHtcclxuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudDtcclxuICAgIGlmKHRoaXMucXVlcnkhPT0nJykge1xyXG4gICAgICB0aGlzLmZpbmRlciA9IG5ldyBGaW5kZXIodGV4dENvbnRlbnQuaXRlbXMubWFwKChpdGVtKT0+IGl0ZW0uc3RyKSwgdGhpcy5xdWVyeSwge2NvbnRleHRzOiBmYWxzZX0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVuZGVySGl0cygpIHtcclxuICAgIGlmKHRoaXMuZmluZGVyKSB7XHJcbiAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnBhZ2UudmlldyxcclxuICAgICAgICB0ZXN0U3ogPSAkKCc8ZGl2IHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB2aXNpYmlsaXR5OiBoaWRkZW47XCI+PC9kaXY+JykuYXBwZW5kVG8oJ2JvZHknKSwgdGV4dERpdiA9IHRlc3RTelswXSxcclxuICAgICAgICBiYXNlT2Zmc2V0ID0gdGVzdFN6Lm9mZnNldCgpLmxlZnQ7XHJcbiAgICAgIGZvcihsZXQgaGl0IG9mIHRoaXMuZmluZGVyLmdldEhpdHMoKSkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMudGV4dENvbnRlbnQuaXRlbXNbaGl0LmluZGV4XSxcclxuICAgICAgICAgICAgICAgIHQgPSBQREZKUy5VdGlsLnRyYW5zZm9ybSh0aGlzLnZpZXdwb3J0LnRyYW5zZm9ybSwgaXRlbS50cmFuc2Zvcm0pLFxyXG4gICAgICAgICAgICAgICAgc3R5bGUgPSB0aGlzLnRleHRDb250ZW50LnN0eWxlc1tpdGVtLmZvbnROYW1lXSxcclxuICAgICAgICAgICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMih0WzFdLCB0WzBdKSsoc3R5bGUudmVydGljYWw/IE1hdGguUEkgLyAyOiAwKSxcclxuICAgICAgICAgICAgICAgIGZvbnRIZWlnaHQgPSBNYXRoLnNxcnQoKHRbMl0gKiB0WzJdKSArICh0WzNdICogdFszXSkpLFxyXG4gICAgICAgICAgICAgICAgZm9udEFzY2VudCA9IHN0eWxlLmFzY2VudD9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuYXNjZW50ICogZm9udEhlaWdodDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlLmRlc2NlbnQ/ICgxICsgc3R5bGUuZGVzY2VudCkgKiBmb250SGVpZ2h0OiBmb250SGVpZ2h0KTtcclxuICAgICAgICAgIHRlc3RTei5odG1sKGl0ZW0uc3RyLnN1YnN0cigwLCBoaXQub2Zmc2V0KSsnPHNwYW4+JytpdGVtLnN0ci5zdWJzdHIoaGl0Lm9mZnNldCwgaGl0Lmxlbmd0aCkrJzwvc3Bhbj4nK2l0ZW0uc3RyLnN1YnN0cihoaXQub2Zmc2V0K2hpdC5sZW5ndGgpKTtcclxuXHJcbiAgICAgICAgICB0ZXh0RGl2LnN0eWxlLmZvbnRTaXplID0gZm9udEhlaWdodCsncHgnO1xyXG4gICAgICAgICAgdGV4dERpdi5zdHlsZS5mb250RmFtaWx5ID0gc3R5bGUuZm9udEZhbWlseTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0ZXN0U3BhbiA9IHRlc3RTei5maW5kKCdzcGFuJyksXHJcbiAgICAgICAgICAgICAgaXdpZHRoID0gc3R5bGUudmVydGljYWw/IGl0ZW0uaGVpZ2h0KnRoaXMudmlld3BvcnQuc2NhbGU6IGl0ZW0ud2lkdGgqdGhpcy52aWV3cG9ydC5zY2FsZSxcclxuICAgICAgICAgICAgICB3aWR0aCA9IHRlc3RTei53aWR0aCgpLFxyXG4gICAgICAgICAgICAgIHJlbGF0aXZlT2Zmc2V0ID0gKHRlc3RTcGFuLm9mZnNldCgpLmxlZnQtYmFzZU9mZnNldCkvd2lkdGg7XHJcbiAgICAgICAgICB0aGlzLm0uc2V0KFxyXG4gICAgICAgICAgICAxLDAsMCxcclxuICAgICAgICAgICAgMCwxLDAsXHJcbiAgICAgICAgICAgI
13345HRbNF0rZm9udEFzY2VudCpNYXRoLnNpbihhbmdsZSksdFs1XS1mb250QXNjZW50Kk1hdGguY29zKGFuZ2xlKSwxKTtcclxuICAgICAgICAgIGxldCBwb2x5ID0gdGhpcy5jcmVhdGVQb2x5KHRoaXMubSwge3g6IHJlbGF0aXZlT2Zmc2V0Kml3aWR0aCwgeTogMH0sIHt3aWR0aDogaXdpZHRoKnRlc3RTcGFuLndpZHRoKCkvd2lkdGgsIGhlaWdodDogdGVzdFNwYW4uaGVpZ2h0KCl9KTtcclxuICAgICAgICAgIHBvbHkgPSBwb2x5Lm1hcCgocCk9PiAoe3g6IHAueC90aGlzLnZpZXdwb3J0LndpZHRoLCB5OiAxLXAueS90aGlzLnZpZXdwb3J0LmhlaWdodH0pKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVySGl0KHBvbHkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRlc3RTei5yZW1vdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFubm9DbGIoZSwgZGF0YSkge1xyXG4gICAgaWYodGhpcy5jb250ZXh0LmRpc3BhdGNoRXZlbnQpIHtcclxuICAgICAgdGhpcy5jb250ZXh0LmRpc3BhdGNoRXZlbnQoe1xyXG4gICAgICAgIHR5cGU6ICdwZGZBbm5vdGF0aW9uJyxcclxuICAgICAgICBldmVudDogZSxcclxuICAgICAgICBhbm5vdGF0aW9uOiBkYXRhLnRhcmdldC5hbm5vXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY1ZpZXdwb3J0KCkge1xyXG4gICAgY29uc3Qgc2NhbGUgPSBCYXNlTWF0aFV0aWxzLmNhbGNTY2FsZSh0aGlzLnNpemUud2lkdGgsIHRoaXMuc2l6ZS5oZWlnaHQsIHRoaXMucmVzVywgdGhpcy5yZXNIKTtcclxuICAgIGlmKCF0aGlzLnZpZXdwb3J0IHx8IE1hdGguYWJzKHRoaXMudmlld3BvcnQuc2NhbGUtc2NhbGUpPjFlLTQpIHtcclxuICAgICAgdGhpcy52aWV3cG9ydCA9IHRoaXMucGFnZS5nZXRWaWV3cG9ydChzY2FsZSk7XHJcbiAgICAgIGlmKHRoaXMudHlwZSE9PSdmdWxsJykge1xyXG4gICAgICAgIGlmKHRoaXMudHlwZT09PSdyaWdodCcpIHtcclxuICAgICAgICAgIHRoaXMudmlld3BvcnQub2Zmc2V0WCArPSAwLjUqdGhpcy52aWV3cG9ydC53aWR0aDtcclxuICAgICAgICAgIHRoaXMudmlld3BvcnQudHJhbnNmb3JtWzRdIC09IDAuNSp0aGlzLnZpZXdwb3J0LndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdwb3J0LndpZHRoIC89IDI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXNXID0gdGhpcy53aWR0aCA9IHRoaXMudmlld3BvcnQud2lkdGg7XHJcbiAgICAgIHRoaXMucmVzSCA9IHRoaXMuaGVpZ2h0ID0gdGhpcy52aWV3cG9ydC5oZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy50eXBlID0gdGhpcy5wZGYuZ2V0UGFnZVR5cGUodGhpcy5uKTtcclxuICAgIHRoaXMucGRmLmdldFBhZ2UodGhpcy5uKS5cclxuICAgICAgdGhlbigocGFnZSk9PiB7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZTtcclxuICAgICAgICB0aGlzLnNpemUgPSBQZGYuZ2V0UGFnZVNpemUocGFnZSk7XHJcbiAgICAgICAgaWYodGhpcy50eXBlIT09J2Z1bGwnKSB7XHJcbiAgICAgICAgICB0aGlzLnNpemUud2lkdGggLz0gMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFnZS5nZXRBbm5vdGF0aW9ucygpLlxyXG4gICAgICAgICAgdGhlbih0aGlzLnNldEFubm90YXRpb25zLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHBhZ2UuZ2V0VGV4dENvbnRlbnQoKS5cclxuICAgICAgICAgIHRoZW4odGhpcy5zZXRIaXRzLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuY2FsY1ZpZXdwb3J0KCk7XHJcbiAgICAgICAgdGhpcy5maW5pc2hMb2FkKCk7XHJcbiAgICAgIH0pLlxyXG4gICAgICBjYXRjaCgoZSk9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IGxvYWQgUERGIHBhZ2U6ICcrKHRoaXMubisxKSk7XHJcbiAgICAgICAgdGhpcy5maW5pc2hMb2FkKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVzb2x1dGlvbihyZXMpIHtcclxuICAgIHN1cGVyLnNldFJlc29sdXRpb24ocmVzKTtcclxuICAgIGlmKHRoaXMucGFnZSkge1xyXG4gICAgICB0aGlzLmNhbGNWaWV3cG9ydCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVuZGVyKGhhbmRsZXIpIHtcclxuICAgIGlmKHRoaXMucGFnZSkge1xyXG4gICAgICB0aGlzLnBhZ2UucmVuZGVyKHtcclxuICAgICAgICBjYW52YXNDb250ZXh0OiB0aGlzLnB1c2hDdHgoKSxcclxuICAgICAgICB2aWV3cG9ydDogdGhpcy52aWV3cG9ydFxyXG4gICAgICB9KS5cclxuICAgICAgdGhlbigoKT0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlckhpdHMoKTtcclxuICAgICAgICB0aGlzLnBvcEN0eCgpO1xyXG4gICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQmxhbmtQYWdlKCk7XHJcbiAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9QZGZJbWFnZS5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2gge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIHBhZ2VzKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgIHRoaXMucGFnZXMgPSBwYWdlcztcclxuICAgIHRoaXMucHJldlJlc3VsdHMgPSBbXTtcclxuICAgIGNvbnRhaW5lci5odG1sKGBcclxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJxdWVyeVwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wUXVlcnlcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjMwXCIgdmFsdWU9XCJcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHRzXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICBgKTtcclxuICAgIHRoaXMucXVlcnkgPSBjb250YWluZXIuZmluZCgnLnF1ZXJ5IGlucHV0Jyk7XHJcbiAgICB0aGlzLnJlc3VsdHMgPSBjb250YWluZXIuZmluZCgnLnJlc3VsdHMnKTtcclxuICAgIHRoaXMuc3RhdHVzID0gY29udGFpbmVyLmZpbmQoJy5zdGF0dXMnKTtcclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBuYXZpZ2F0ZTogdGhpcy5uYXZpZ2F0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICBkb1F1ZXJ5OiB0aGlzLmRvUXVlcnkuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnF1ZXJ5Lm9uKCdrZXlkb3duJywgdGhpcy5iaW5kcy5kb1F1ZXJ5KTtcclxuICAgIHRoaXMucmVzdWx0cy5vbignY2xpY2snLCB0aGlzLmJpbmRzLm5hdmlnYXRlKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLnJlc3VsdHMub2ZmKCdjbGljaycsIHRoaXMuYmluZHMubmF2aWdhdGUpO1xyXG4gICAgdGhpcy5xdWVyeS5vZmYoJ2tleWRvd24nLCB0aGlzLmJpbmRzLmRvUXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGUoZSkge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYodGhpcy5vbk5hdmlnYXRlIT09dW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCB0YXJnZXQgPSAkKGUudGFyZ2V0KTtcclxuICAgICAgaWYoIXRhcmdldC5oYXNDbGFzcygncmVzdWx0JykpIHtcclxuICAgICAgICBjb25zdCB0ID0gdGFyZ2V0LmZpbmQoJy5yZXN1bHQnKTtcclxuICAgICAgICBpZih0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGFyZ2V0ID0gdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3aGlsZSh0YXJnZXQubGVuZ3RoICYmICF0YXJnZXQuaGFzQ2xhc3MoJ3Jlc3VsdCcpKSB7XHJcbiAgICAgICAgICAgI
13345HRhcmdldCA9ICQodGFyZ2V0WzBdLnBhcmVudE5vZGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwYWdlID0gdGFyZ2V0LmF0dHIoJ2RhdGEnKTtcclxuICAgICAgaWYocGFnZSE9PXVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMub25OYXZpZ2F0ZShwYXJzZUludChwYWdlKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvUXVlcnkoKSB7XHJcbiAgICBpZih0aGlzLm9uUXVlcnkpIHtcclxuICAgICAgY29uc3QgcXVlcnlTdGFtcCA9IHRoaXMucXVlcnlTdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgaWYocXVlcnlTdGFtcCA9PT0gdGhpcy5xdWVyeVN0YW1wKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUXVlcnkodGhpcy5xdWVyeVswXS52YWx1ZS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZXN1bHRzKHJlc3VsdHMsIGxhc3RQYWdlKSB7XHJcbiAgICBpZih0aGlzLnByZXZSZXN1bHRzLmxlbmd0aCAmJiByZXN1bHRzWzBdIT09dGhpcy5wcmV2UmVzdWx0c1swXSkge1xyXG4gICAgICB0aGlzLnByZXZSZXN1bHRzID0gW107XHJcbiAgICAgIHRoaXMucmVzdWx0cy5odG1sKCcnKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGh0bWxzID0gW107XHJcbiAgICBmb3IobGV0IGk9dGhpcy5wcmV2UmVzdWx0cy5sZW5ndGg7IGk8cmVzdWx0cy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzW2ldO1xyXG4gICAgICBodG1scy5wdXNoKCc8ZGl2IGNsYXNzPVwicmVzdWx0XCIgZGF0YT1cIicrcmVzdWx0LnBhZ2UrJ1wiPicpO1xyXG4gICAgICAgIGh0bWxzLnB1c2goJzxhIGhyZWY9XCIjXCI+Jyk7XHJcbiAgICAgICAgICBodG1scy5wdXNoKCc8ZGl2PicrcmVzdWx0LmNvbnRleHRzLmpvaW4oJzwvZGl2PjxkaXY+JykrJzwvZGl2PicpO1xyXG4gICAgICAgIGh0bWxzLnB1c2goJzwvYT4nKTtcclxuICAgICAgaHRtbHMucHVzaCgnPC9kaXY+Jyk7XHJcbiAgICB9XHJcbiAgICAkKGh0bWxzLmpvaW4oJycpKS5hcHBlbmRUbyh0aGlzLnJlc3VsdHMpO1xyXG4gICAgdGhpcy5wcmV2UmVzdWx0cyA9IFsuLi5yZXN1bHRzXTtcclxuICAgIGlmKGxhc3RQYWdlPT09dW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLmh0bWwoJycpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLmh0bWwobGFzdFBhZ2UrJyBvZiAnK3RoaXMucGFnZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvU2VhcmNoLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IEltYWdlQmFzZSBmcm9tICcuL0ltYWdlQmFzZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRpY0ltYWdlIGV4dGVuZHMgSW1hZ2VCYXNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IsIHNyYykge1xyXG4gICAgc3VwZXIoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IpO1xyXG5cclxuICAgIHRoaXMuYmluZHMgPSB7fVxyXG4gICAgdGhpcy5pbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgdGhpcy5pbWFnZS5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xyXG4gICAgdGhpcy5iaW5kcy5pbWFnZUxvYWQgPSAoKT0+IHtcclxuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XHJcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XHJcbiAgICAgIHRoaXMuc3RhcnRSZW5kZXIgPSAoKT0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlckltYWdlKHRoaXMuaW1hZ2UpO1xyXG4gICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZmluaXNoTG9hZCgpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuYmluZHMuaW1hZ2VFcnJvciA9ICgpPT4ge1xyXG4gICAgICB0aGlzLnN0YXJ0UmVuZGVyID0gKCk9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJOb3RGb3VuZFBhZ2UoKTtcclxuICAgICAgICB0aGlzLmZpbmlzaFJlbmRlcigpO1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmZpbmlzaExvYWQoKTtcclxuICAgIH07XHJcbiAgICAkKHRoaXMuaW1hZ2UpLm9uKCdsb2FkJywgdGhpcy5iaW5kcy5pbWFnZUxvYWQpLm9uKCdlcnJvcicsIHRoaXMuYmluZHMuaW1hZ2VFcnJvcik7XHJcbiAgICB0aGlzLmltYWdlLnNyYyA9IFV0aWxzLm5vcm1hbGl6ZVVybChzcmMpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgICQodGhpcy5pbWFnZSkub2ZmKCdsb2FkJywgdGhpcy5iaW5kcy5pbWFnZUxvYWQpLm9mZignZXJyb3InLCB0aGlzLmJpbmRzLmltYWdlRXJyb3IpO1xyXG4gICAgdGhpcy5pbWFnZS5zcmMgPSAnJztcclxuICAgIGRlbGV0ZSB0aGlzLmltYWdlO1xyXG4gICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvU3RhdGljSW1hZ2UuanMiLCJpbXBvcnQge1RIUkVFfSBmcm9tICcuLi9saWJzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dHVyZUFuaW1hdG9yIHtcclxuICBjb25zdHJ1Y3RvcihpbWcsIHRpbGVzSG9yaXosIHRpbGVzVmVydCwgbnVtVGlsZXMsIHRpbGVEaXNwRHVyYXRpb24pIHtcclxuXHJcbiAgICBjb25zdCB0ZXh0dXJlID0gbmV3IFRIUkVFLlRleHR1cmUoKTtcclxuICAgIHRleHR1cmUubWluRmlsdGVyID0gVEhSRUUuTGluZWFyRmlsdGVyO1xyXG4gICAgdGV4dHVyZS5pbWFnZSA9IGltZztcclxuICAgIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG5cclxuICBcdC8vIG5vdGU6IHRleHR1cmUgcGFzc2VkIGJ5IHJlZmVyZW5jZSwgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSB1cGRhdGUgZnVuY3Rpb24uXHJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gIFx0dGhpcy50aWxlc0hvcml6b250YWwgPSB0aWxlc0hvcml6O1xyXG4gIFx0dGhpcy50aWxlc1ZlcnRpY2FsID0gdGlsZXNWZXJ0O1xyXG4gIFx0Ly8gaG93IG1hbnkgaW1hZ2VzIGRvZXMgdGhpcyBzcHJpdGVzaGVldCBjb250YWluP1xyXG4gIFx0Ly8gIHVzdWFsbHkgZXF1YWxzIHRpbGVzSG9yaXogKiB0aWxlc1ZlcnQsIGJ1dCBub3QgbmVjZXNzYXJpbHksXHJcbiAgXHQvLyAgaWYgdGhlcmUgYXQgYmxhbmsgdGlsZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3ByaXRlc2hlZXQuXHJcbiAgXHR0aGlzLm51bWJlck9mVGlsZXMgPSBudW1UaWxlcztcclxuICBcdHRleHR1cmUucmVwZWF0LnNldCgxL3RoaXMudGlsZXNIb3Jpem9udGFsLCAxL3RoaXMudGlsZXNWZXJ0aWNhbCk7XHJcblxyXG4gIFx0Ly8gaG93IGxvbmcgc2hvdWxkIGVhY2ggaW1hZ2UgYmUgZGlzcGxheWVkP1xyXG4gIFx0dGhpcy50aWxlRGlzcGxheUR1cmF0aW9uID0gdGlsZURpc3BEdXJhdGlvbjtcclxuXHJcbiAgXHQvLyBob3cgbG9uZyBoYXMgdGhlIGN1cnJlbnQgaW1hZ2UgYmVlbiBkaXNwbGF5ZWQ/XHJcbiAgXHR0aGlzLmN1cnJlbnREaXNwbGF5VGltZSA9IDA7XHJcblxyXG4gIFx0Ly8gd2hpY2ggaW1hZ2UgaXMgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZD9cclxuICBcdHRoaXMuY3VycmVudFRpbGUgPSAwO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKG
133451pbGxpU2VjKSB7XHJcbiAgICB0aGlzLmN1cnJlbnREaXNwbGF5VGltZSArPSBtaWxsaVNlYztcclxuICAgIHdoaWxlKHRoaXMuY3VycmVudERpc3BsYXlUaW1lID4gdGhpcy50aWxlRGlzcGxheUR1cmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudERpc3BsYXlUaW1lIC09IHRoaXMudGlsZURpc3BsYXlEdXJhdGlvbjtcclxuICAgICAgKyt0aGlzLmN1cnJlbnRUaWxlO1xyXG4gICAgICBpZih0aGlzLmN1cnJlbnRUaWxlID09IHRoaXMubnVtYmVyT2ZUaWxlcylcclxuICAgICAgICB0aGlzLmN1cnJlbnRUaWxlID0gMDtcclxuICAgICAgdmFyIGN1cnJlbnRDb2x1bW4gPSB0aGlzLmN1cnJlbnRUaWxlJXRoaXMudGlsZXNIb3Jpem9udGFsO1xyXG4gICAgICB0aGlzLnRleHR1cmUub2Zmc2V0LnggPSBjdXJyZW50Q29sdW1uL3RoaXMudGlsZXNIb3Jpem9udGFsO1xyXG4gICAgICB2YXIgY3VycmVudFJvdyA9IE1hdGguZmxvb3IodGhpcy5jdXJyZW50VGlsZS90aGlzLnRpbGVzSG9yaXpvbnRhbCk7XHJcbiAgICAgIHRoaXMudGV4dHVyZS5vZmZzZXQueSA9IGN1cnJlbnRSb3cvdGhpcy50aWxlc1ZlcnRpY2FsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGNvbnN0IGltZyA9IHRoaXMudGV4dHVyZS5pbWFnZTtcclxuICAgIGltZy5oZWlnaHQgPSBpbWcud2lkdGggPSAwO1xyXG4gICAgdGhpcy50ZXh0dXJlLmRpc3Bvc2UoKTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGV4dHVyZUFuaW1hdG9yLmpzIiwiaW1wb3J0IHtUSFJFRSwgJH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuaW1wb3J0IE1vdXNlRXZlbnRDb252ZXJ0ZXIgZnJvbSAnLi9Nb3VzZUV2ZW50Q29udmVydGVyJztcclxuaW1wb3J0IFRocmVlRXZlbnRDb252ZXJ0ZXIgZnJvbSAnLi9UaHJlZUV2ZW50Q29udmVydGVyJztcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaHJlZU1vdXNlRXZlbnRDb252ZXJ0ZXIgZXh0ZW5kcyBNb3VzZUV2ZW50Q29udmVydGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIHZpc3VhbFdvcmxkLCB0ZXN0KSB7XHJcbiAgICBzdXBlcih3bmQsIGRvYywgdmlzdWFsV29ybGQuZWxlbWVudCk7XHJcbiAgICBVdGlscy5leHRlbmRzKHRoaXMsIG5ldyBUaHJlZUV2ZW50Q29udmVydGVyKHZpc3VhbFdvcmxkLCB0ZXN0KSk7XHJcbiAgfVxyXG5cclxuICBnZXRDYWxsYmFjayhvYmplY3QpIHtcclxuICAgIHJldHVybiBvYmplY3Qub2JqZWN0LnVzZXJEYXRhLm1vdXNlQ2FsbGJhY2s7XHJcbiAgfVxyXG5cclxuICBzZXRDb29yZHNGcm9tRXZlbnQoZSkge1xyXG4gICAgY29uc3QgakVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudCk7XHJcbiAgICBjb25zdCBvZmZzZXQgPSBqRWxlbWVudC5vZmZzZXQoKTtcclxuICAgIHRoaXMuY29vcmRzLnggPSAoKGUucGFnZVgtb2Zmc2V0LmxlZnQpL2pFbGVtZW50LndpZHRoKCkpKjItMTtcclxuICAgIHRoaXMuY29vcmRzLnkgPSAtKChlLnBhZ2VZLW9mZnNldC50b3ApL2pFbGVtZW50LmhlaWdodCgpKSoyKzE7XHJcbiAgICByZXR1cm4gdGhpcy5jb29yZHM7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1RocmVlTW91c2VFdmVudENvbnZlcnRlci5qcyIsImltcG9ydCB7VEhSRUUsICR9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcbmltcG9ydCBUb3VjaEV2ZW50Q29udmVydGVyIGZyb20gJy4vVG91Y2hFdmVudENvbnZlcnRlcic7XHJcbmltcG9ydCBUaHJlZUV2ZW50Q29udmVydGVyIGZyb20gJy4vVGhyZWVFdmVudENvbnZlcnRlcic7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGhyZWVUb3VjaEV2ZW50Q29udmVydGVyIGV4dGVuZHMgVG91Y2hFdmVudENvbnZlcnRlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHduZCwgZG9jLCB2aXN1YWxXb3JsZCwgdGVzdCkge1xyXG4gICAgc3VwZXIod25kLCBkb2MsIHZpc3VhbFdvcmxkLmVsZW1lbnQpO1xyXG4gICAgVXRpbHMuZXh0ZW5kcyh0aGlzLCBuZXcgVGhyZWVFdmVudENvbnZlcnRlcih2aXN1YWxXb3JsZCwgdGVzdCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FsbGJhY2sob2JqZWN0KSB7XHJcbiAgICByZXR1cm4gb2JqZWN0Lm9iamVjdC51c2VyRGF0YS50b3VjaENhbGxiYWNrO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29vcmRzRnJvbUV2ZW50KGUpIHtcclxuICAgIGNvbnN0IGpFbGVtZW50ID0gJCh0aGlzLmVsZW1lbnQpLCBvZmZzZXQgPSBqRWxlbWVudC5vZmZzZXQoKSxcclxuICAgICAgdG91Y2hlcyA9IGUudG91Y2hlcyB8fCBlLm9yaWdpbmFsRXZlbnQudG91Y2hlcywgdG91Y2ggPSB0b3VjaGVzLmxlbmd0aD8gdG91Y2hlc1swXTogKHRoaXMubGFzdFRvdWNoZXMgfHwgW3twYWdlWDogMCwgcGFnZVk6IDB9XSlbMF0sXHJcbiAgICAgIHBhZ2VYID0gdG91Y2gucGFnZVgsIHBhZ2VZID0gdG91Y2gucGFnZVk7XHJcbiAgICB0aGlzLmxhc3RUb3VjaGVzID0gdG91Y2hlcy5sZW5ndGg/IHRvdWNoZXM6IHRoaXMubGFzdFRvdWNoZXM7XHJcbiAgICB0aGlzLmNvb3Jkcy54ID0gKChwYWdlWC1vZmZzZXQubGVmdCkvakVsZW1lbnQud2lkdGgoKSkqMi0xO1xyXG4gICAgdGhpcy5jb29yZHMueSA9IC0oKHBhZ2VZLW9mZnNldC50b3ApL2pFbGVtZW50LmhlaWdodCgpKSoyKzE7XHJcbiAgICByZXR1cm4gdGhpcy5jb29yZHM7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1RocmVlVG91Y2hFdmVudENvbnZlcnRlci5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBJbWFnZUZhY3RvcnkgZnJvbSAnLi9JbWFnZUZhY3RvcnknO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGh1bWJuYWlscyB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnRhaW5lciwgdGh1bWJuYWlsc0NsYiwgc2l6ZSwgcHJvcHM9e2tXdG9IOiAyMTAvMjk3fSkge1xyXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICB0aGlzLnAgPSBwcm9wcztcclxuICAgIHRoaXMudGh1bWJuYWlsc0NsYiA9IHRodW1ibmFpbHNDbGI7XHJcbiAgICB0aGlzLnNpemUgPSBzaXplO1xyXG4gICAgdGhpcy5jYW52YXMgPSAkKCc8Y2FudmFzPicpWzBdO1xyXG4gICAgdGhpcy5pbWFnZUZhY3RvcnkgPSBuZXcgSW1hZ2VGYWN0b3J5KHtcclxuICAgICAgLi4uY29udGV4dCxcclxuICAgICAgcmVuZGVyQ2FudmFzOiB0aGlzLmNhbnZhcyxcclxuICAgICAgcmVuZGVyQ2FudmFzQ3R4OiB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXHJcbiAgICB9KTtcclxuICAgIHRoaXMudGh1bWJuYWlscyA9IFtdO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8c2l6ZTsgKytpKSB7XHJcbiAgICAgIGNvbnN0IGluZm8gPSB0aGlzLnRodW1ibmFpbHNDbGIoaSk7XHJcbiAgICAgIHRoaXMudGh1bWJuYWlscy5wdXNoKHtcclxuICAgICAgICAuLi5pbmZvLFxyXG4gICAgICAgIGluZGV4OiBpLFxyXG4gICAgICAgIGxvYWRlZDogaW5mby50eXBlPT09J3RodW1ibmFpbC1pbWFnZScsXHJcbiAgICAgICAgaGVhZGluZzogbnVsbCxcclxuICAgICAgICB0aHVtYm5haWw6IG51bGwsXHJcbiAgICAgICAgdGl0bGU6IGluZm8udGl0bGUgfHwgaVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICB1cGRhdGU6IHRoaXMudXBkYXRlLmJpbmQodGhpcyksXHJcbiAgICAgIG5hdmlnYXRlOiAoZSk9PiB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmKHRoaXMub25OYXZpZ2F0ZSkge1xyXG4gICAgICAgICAgbGV0IG5vZGUgPSBlLnRhcmdldDtcclxuICAgICAgICAgI
13345HdoaWxlKG5vZGUgJiYgIW5vZGUuZGF0YVRodW1ibmFpbCkge1xyXG4gICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vbk5hdmlnYXRlKG5vZGUuZGF0YVRodW1ibmFpbC5pbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jb250YWluZXIub24oJ3Njcm9sbCcsIHRoaXMuYmluZHMudXBkYXRlKTtcclxuICB9XHJcblxyXG4gIGdldFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplO1xyXG4gIH1cclxuXHJcbiAgc2V0RW5hYmxlKGVuYWJsZSkge1xyXG4gICAgdGhpcy5lbmFibGUgPSBlbmFibGU7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJ2EnKS5vZmYoJ2NsaWNrJywgdGhpcy5iaW5kcy5uYXZpZ2F0ZSk7XHJcbiAgICB0aGlzLmNvbnRhaW5lci5vZmYoJ3Njcm9sbCcsIHRoaXMuYmluZHMudXBkYXRlKTtcclxuICAgIHRoaXMuY29udGFpbmVyLmh0bWwoJycpO1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5jYW52YXMud2lkdGggPSAwO1xyXG4gICAgZGVsZXRlIHRoaXMuY2FudmFzO1xyXG4gIH1cclxuXHJcbiAgbG9hZCh0aHVtYm5haWwpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5pbWFnZUZhY3RvcnkuYnVpbGQodGh1bWJuYWlsLCB0aHVtYm5haWwubnVtYmVyPT09dW5kZWZpbmVkPyB0aHVtYm5haWwuaW5kZXg6IHRodW1ibmFpbC5udW1iZXIsIHRoaXMucC5rV3RvSCozMDAsIDMwMCk7XHJcbiAgICB3cmFwcGVyLm9uQ2hhbmdlID0gKGNhbnZhcyk9PiB7XHJcbiAgICAgIHRoaXMuc2V0SW1hZ2UodGh1bWJuYWlsLCBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XHJcbiAgICAgIHRodW1ibmFpbC5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICB3cmFwcGVyLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB0aGlzLnVwZGF0ZSgpKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRBY3RpdmUoKSB7XHJcbiAgICBjb25zdCBmaXJzdCA9IHRoaXMuY29udGFpbmVyLnNjcm9sbFRvcCgpLCBsYXN0ID0gZmlyc3QgKyB0aGlzLmNvbnRhaW5lci5oZWlnaHQoKSwgcmVzID0gW107XHJcbiAgICBmb3IobGV0IHRodW1ibmFpbCBvZiB0aGlzLnRodW1ibmFpbHMpIHtcclxuICAgICAgaWYoTWF0aC5tYXgodGh1bWJuYWlsLmZpcnN0LCBmaXJzdCk8TWF0aC5taW4odGh1bWJuYWlsLmxhc3QsIGxhc3QpKSB7XHJcbiAgICAgICAgcmVzLnB1c2godGh1bWJuYWlsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIGlmKCF0aGlzLmxvYWRpbmcgJiYgdGhpcy5jYW52YXMgJiYgdGhpcy5lbmFibGUpIHtcclxuICAgICAgaWYoIXRoaXMuYnVpbHQpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XHJcbiAgICAgIGZvcihsZXQgdGh1bWJuYWlsIG9mIGFjdGl2ZSkge1xyXG4gICAgICAgIGlmKCF0aHVtYm5haWwubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWQodGh1bWJuYWlsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SW1hZ2UodGh1bWJuYWlsLCBpbWcpIHtcclxuICAgIHRodW1ibmFpbC5pbWcgPSBpbWc7XHJcbiAgICB0aHVtYm5haWwudGh1bWJuYWlsLmNzcygnYmFja2dyb3VuZC1pbWFnZScsIFsndXJsKFxcJycsIGltZywnXFwnKSddLmpvaW4oJycpKTtcclxuICAgIHRodW1ibmFpbC50aHVtYm5haWwucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gWyc8ZGl2IGNsYXNzPVwidGh1bWJuYWlsc1wiPiddXHJcbiAgICBmb3IobGV0IGk9MDsgaTx0aGlzLnNpemU7ICsraSkge1xyXG4gICAgICBlbGVtZW50cy5wdXNoKFsnPGRpdiBjbGFzcz1cIml0ZW1cIj48YSBocmVmPVwiI1wiPjxkaXYgY2xhc3M9XCJ0aHVtYm5haWwgbG9hZGluZ1wiPjwvZGl2PjwvYT48ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPjxhIGhyZWY9XCIjXCIgdGl0bGU9XCInLCBpKzEsJ1wiPicsIGkrMSwgJzwvYT48L2Rpdj48L2Rpdj4nXS5qb2luKCcnKSk7XHJcbiAgICB9XHJcbiAgICBlbGVtZW50cy5wdXNoKCc8L2Rpdj4nKTtcclxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChlbGVtZW50cy5qb2luKCcnKSk7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy5pdGVtJyksIGJhc2UgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcudGh1bWJuYWlscycpLm9mZnNldCgpLnRvcDtcclxuICAgIGZvcihsZXQgaT0wOyBpPGl0ZW1zLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSAkKGl0ZW1zW2ldKTtcclxuICAgICAgdGhpcy50aHVtYm5haWxzW2ldLmhlYWRpbmcgPSBpdGVtLmZpbmQoJy5oZWFkaW5nJyk7XHJcbiAgICAgIHRoaXMudGh1bWJuYWlsc1tpXS50aHVtYm5haWwgPSBpdGVtLmZpbmQoJy50aHVtYm5haWwnKTtcclxuICAgICAgdGhpcy50aHVtYm5haWxzW2ldLmZpcnN0ID0gaXRlbS5vZmZzZXQoKS50b3AtYmFzZTtcclxuICAgICAgdGhpcy50aHVtYm5haWxzW2ldLmxhc3QgPSB0aGlzLnRodW1ibmFpbHNbaV0uZmlyc3QraXRlbS5oZWlnaHQoKTtcclxuICAgICAgaWYodGhpcy50aHVtYm5haWxzW2ldLmxvYWRlZCkge1xyXG4gICAgICAgIHRoaXMuc2V0SW1hZ2UodGhpcy50aHVtYm5haWxzW2ldLCB0aGlzLnRodW1ibmFpbHNbaV0uc3JjKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhcyA9IGl0ZW0uZmluZCgnYScpO1xyXG4gICAgICBmb3IobGV0IGo9MDsgajxhcy5sZW5ndGg7ICsraikge1xyXG4gICAgICAgIGNvbnN0IGEgPSBhc1tqXTtcclxuICAgICAgICBhLmRhdGFUaHVtYm5haWwgPSB0aGlzLnRodW1ibmFpbHNbaV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJ2EnKS5vbignY2xpY2snLCB0aGlzLmJpbmRzLm5hdmlnYXRlKTtcclxuICAgIHRoaXMuYnVpbHQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGh1bWJuYWlscy5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBFdmVudENvbnZlcnRlciBmcm9tICcuL0V2ZW50Q29udmVydGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvdWNoQ29udmVydGVyIGV4dGVuZHMgRXZlbnRDb252ZXJ0ZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih3bmQsIGRvYywgZWxlbWVudCkge1xyXG4gICAgc3VwZXIod25kLCBkb2MpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBjb252ZXJ0OiB0aGlzLmNvbnZlcnQuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuICAgICQo
13345dGhpcy5lbGVtZW50KS5vbigndG91Y2hzdGFydCB0b3VjaG1vdmUnLCB0aGlzLmJpbmRzLmNvbnZlcnQpO1xyXG4gICAgJCh0aGlzLmRvYykub24oJ3RvdWNoZW5kJywgdGhpcy5iaW5kcy5jb252ZXJ0KTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICAkKHRoaXMuZWxlbWVudCkub2ZmKCd0b3VjaHN0YXJ0IHRvdWNobW92ZScsIHRoaXMuYmluZHMuY29udmVydCk7XHJcbiAgICAkKHRoaXMuZG9jKS5vZmYoJ3RvdWNoZW5kJywgdGhpcy5iaW5kcy5jb252ZXJ0KTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVG91Y2hFdmVudENvbnZlcnRlci5qcyIsImltcG9ydCB7JCwgdHJ9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlldyB7XHJcblxyXG4gIHN0YXRpYyBsaW5rU3RhdGVIYW5kbGVycyA9IHtcclxuICAgIHZpc2libGU6IChjdHJsLCB2YWx1ZSk9PiBWaWV3LmNsYXNzUHJvcGVydHkoY3RybCwgJ2hpZGRlbicsICF2YWx1ZSksXHJcbiAgICBhY3RpdmU6IChjdHJsLCB2YWx1ZSk9PiBWaWV3LmNsYXNzUHJvcGVydHkoY3RybCwgJ2FjdGl2ZScsIHZhbHVlKSxcclxuICAgIGVuYWJsZTogKGN0cmwsIHZhbHVlKT0+IFZpZXcuY2xhc3NQcm9wZXJ0eShjdHJsLCAnZGlzYWJsZWQnLCAhdmFsdWUpXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIHdpZGdldFN0YXRlSGFuZGxlcnMgPSB7XHJcbiAgICB2aXNpYmxlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdoaWRkZW4nLCAhdmFsdWUpLFxyXG4gICAgYWN0aXZlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdhY3RpdmUnLCB2YWx1ZSksXHJcbiAgICBlbmFibGU6IChjdHJsLCB2YWx1ZSk9PiBWaWV3LmNsYXNzUHJvcGVydHkoY3RybCwgJ2Rpc2FibGVkJywgIXZhbHVlKVxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBpbnB1dFN0YXRlSGFuZGxlcnMgPSB7XHJcbiAgICB2aXNpYmxlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdoaWRkZW4nLCAhdmFsdWUpLFxyXG4gICAgdmFsdWU6IChjdHJsLCB2YWx1ZSk9PiBjdHJsWzBdLnZhbHVlID0gdmFsdWUsXHJcbiAgICBlbmFibGU6IChjdHJsLCB2YWx1ZSk9PiBWaWV3LmF0dHJpYnV0ZVByb3BlcnR5KGN0cmwsICdkaXNhYmxlZCcsICF2YWx1ZSlcclxuICB9O1xyXG5cclxuICBzdGF0aWMgdGV4dFN0YXRlSGFuZGxlcnMgPSB7XHJcbiAgICB2aXNpYmxlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdoaWRkZW4nLCAhdmFsdWUpLFxyXG4gICAgdmFsdWU6IChjdHJsLCB2YWx1ZSk9PiBjdHJsLnRleHQodmFsdWUpXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIGNsYXNzUHJvcGVydHkoY3RybCwgY2xhc3NOYW1lLCB2YWx1ZSkge1xyXG4gICAgaWYodmFsdWUpIHtcclxuICAgICAgY3RybC5hZGRDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGN0cmwucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBhdHRyaWJ1dGVQcm9wZXJ0eShjdHJsLCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSkge1xyXG4gICAgaWYodmFsdWUpIHtcclxuICAgICAgY3RybC5hdHRyKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjdHJsLnJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2FsbEhhbmRsZXJzKGhhbmRsZXJzLCBpZCwgZSwgZGF0YSkge1xyXG4gICAgZm9yKGxldCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB7XHJcbiAgICAgIGlmKGhhbmRsZXJbaWRdKSB7XHJcbiAgICAgICAgaGFuZGxlcltpZF0oZSwgZGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihoYW5kbGVyLmhhbmRsZURlZmF1bHQpIHtcclxuICAgICAgICBoYW5kbGVyLmhhbmRsZURlZmF1bHQoaWQsIGUsIGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaGFuZGxlRXZlbnQoaWQsIGdldEhhbmRsZXJzLCBlLCBkYXRhKSB7XHJcbiAgICBWaWV3LmNhbGxIYW5kbGVycyhnZXRIYW5kbGVycyhpZCksIGlkLCBlLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBoYW5kbGVMaW5rRXZlbnQoZSkge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYoIXRoaXMuY3RybC5oYXNDbGFzcygnZGlzYWJsZWQnKSkge1xyXG4gICAgICBWaWV3LmhhbmRsZUV2ZW50KHRoaXMuaWQsIHRoaXMuZ2V0SGFuZGxlcnMsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGhhbmRsZUlucHV0RXZlbnQoZSkge1xyXG4gICAgVmlldy5oYW5kbGVFdmVudCh0aGlzLmlkLCB0aGlzLmdldEhhbmRsZXJzLCBlLCBlLnRhcmdldC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaGFuZGxlRm9ybUV2ZW50KGUpIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIFZpZXcuaGFuZGxlRXZlbnQodGhpcy5pZCwgdGhpcy5nZXRIYW5kbGVycywgZSk7XHJcbiAgfVxyXG5cclxuICAvLyB2aXJ0dWFsIGZ1bmN0aW9ucyB7XHJcbiAgZ2V0TGlua3MoKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFdpZGdldHMoKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldElucHV0cygpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGV4dHMoKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFRlbXBsYXRlKCkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgZ2V0SGFuZGxlcnMoaWQpIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzO1xyXG4gIH1cclxuICAvLyB9XHJcblxyXG4gIGNhbGxMYXRlcihoYW5kbGVycywgaWQsIGUsIGRhdGEsIG1zKSB7XHJcbiAgICB0aGlzLnBlbmRpbmdzW2lkXSA9IHtcclxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLmdldFRpbWUoKVxyXG4gICAgfTtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nc1tpZF07XHJcbiAgICAgIGlmKHBlbmRpbmcgJiYgdGltZXN0YW1wLXBlbmRpbmcudGltZXN0YW1wPj1tcykge1xyXG4gICAgICAgIFZpZXcuY2FsbEhhbmRsZXJzKGhhbmRsZXJzLCBpZCwgZSwgZGF0YSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucGVuZGluZ3NbaWRdO1xyXG4gICAgICB9XHJcbiAgICB9LCBtcyk7XHJcbiAgfVxyXG5cclxuICAvLyBsb2FkRmlsZXModXJscywgcmVhZHksIGZhaWx1cmUpIHtcclxuICAvLyAgIGxldCBkb25lID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgLy8gICBmb3IobGV0IHVybCBvZiB1cmxzKSB7XHJcbiAgLy8gICAgIGRvbmUgPSBkb25lLnRoZW4oKCk9PiB7XHJcbiAgLy8gICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT4ge1xyXG4gIC8vICAgICAgICAgJC5nZXQodXJsLCAocmVzKT0+IHtcclxuICAvLyAgICAgICAgICAgcmVhZHkocmVzLCB1cmwpO1xyXG4gIC8vICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgLy8gICAgICAgICB9KS5mYWlsKChyZXMpPT4ge1xyXG4gIC8vICAgICAgICAgICBpZihmYWlsdXJlICYmIGZhaWx1cmU
13345ocmVzLCB1cmwpKSB7XHJcbiAgLy8gICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIHJlamVjdChyZXMpO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9KTtcclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gZG9uZTtcclxuICAvLyB9XHJcblxyXG4gIGxvYWRGaWxlcyh1cmxzLCBmaWxlcykge1xyXG4gICAgY29uc3QgdGFza3MgPSBbXTtcclxuICAgIGZvcihsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyh1cmxzKSkge1xyXG4gICAgICBmaWxlc1tuYW1lXSA9IFtdO1xyXG4gICAgICBmb3IobGV0IHVybCBvZiB1cmxzW25hbWVdKSB7XHJcbiAgICAgICAgdGFza3MucHVzaChcclxuICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT4ge1xyXG4gICAgICAgICAgICAkLmdldCh1cmwsIChkYXRhKT0+IHtcclxuICAgICAgICAgICAgICBmaWxlc1tuYW1lXS5wdXNoKHt1cmwsIGRhdGF9KTtcclxuICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pLmZhaWwoKHJlcyk9PiB7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KHJlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodGFza3MpO1xyXG4gIH1cclxuXHJcbiAgdXJsUmVzb2x2ZXIoYmFzZVVybCwgdXJsKSB7XHJcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG4gICAgaWYodXJsLmNoYXJBdCgwKSE9PScvJykge1xyXG4gICAgICBiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcbiAgICAgIGNvbnN0IHAgPSBiYXNlVXJsLmxhc3RJbmRleE9mKCcvJyk7XHJcbiAgICAgIHVybCA9ICh+cD8gYmFzZVVybC5zdWJzdHIoMCwgcCsxKTogJycpK3VybDtcclxuXHJcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJyk7XHJcbiAgICAgIHVybCA9IFtdO1xyXG4gICAgICBmb3IobGV0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgICBpZihwYXJ0PT09Jy4nKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYocGFydD09PScuLicpIHtcclxuICAgICAgICAgIGlmKHVybC5sZW5ndGggJiYgISh1cmwubGVuZ3RoPT09MSAmJiB1cmxbMF09PT0nJykpIHtcclxuICAgICAgICAgICAgdXJsLnBvcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHVybC5wdXNoKHBhcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB1cmwgPSB1cmwuam9pbignLycpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1cmw7XHJcbiAgfVxyXG5cclxuICBvYmpUb0F0dHJzU3RyKG8pIHtcclxuICAgIGNvbnN0IHJlcyA9IFtdO1xyXG4gICAgZm9yKGxldCBuYW1lIG9mIE9iamVjdC5rZXlzKG8pKSB7XHJcbiAgICAgIHJlcy5wdXNoKFtuYW1lLCAnPVwiJywgb1tuYW1lXSwgJ1wiJ10uam9pbignJykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcy5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmcmFtZVNpemUoKSB7XHJcbiAgICBpZih0aGlzLmZyYW1lKSB7XHJcbiAgICAgIGlmKE1hdGguYWJzKHRoaXMuZnJhbWUud2lkdGgtdGhpcy5wYXJlbnRDb250YWluZXIud2lkdGgoKSk+MSB8fCBNYXRoLmFicyh0aGlzLmZyYW1lLmhlaWdodC10aGlzLnBhcmVudENvbnRhaW5lci5oZWlnaHQoKSk+MSkge1xyXG4gICAgICAgIHRoaXMub25SZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBzZXRUaW1lb3V0KHRoaXMuY2hlY2tJZnJhbWVTaXplLmJpbmQodGhpcyksIDI1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuZnJhbWUud2lkdGggPSB0aGlzLnBhcmVudENvbnRhaW5lci53aWR0aCgpO1xyXG4gICAgdGhpcy5mcmFtZS5oZWlnaHQgPSB0aGlzLnBhcmVudENvbnRhaW5lci5oZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIHRyYW5zbGF0ZShodG1sKSB7XHJcbiAgICByZXR1cm4gaHRtbC5yZXBsYWNlKC88XFwkdHI+KC4qKTxcXC9cXCR0cj4vZ2ksIChzMCxzMSk9PiB0cihzMSkpO1xyXG4gIH1cclxuXHJcbiAgZmlyZUxpbmtzT25Mb2FkRXZlbnQoKSB7XHJcbiAgICBpZih0aGlzLnRlbXBsYXRlT2JqZWN0ICYmIHRoaXMudGVtcGxhdGVPYmplY3QubGlua0xvYWRlZCkge1xyXG4gICAgICBsZXQgbG9hZGVkID0gdHJ1ZTtcclxuICAgICAgZm9yKGxldCBqTGluayBvZiB0aGlzLmpMaW5rcykge1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBqTGlua1swXTtcclxuICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBpbWcub25lcnJvciA9ICgpPT4gdGhpcy50ZW1wbGF0ZU9iamVjdC5saW5rTG9hZGVkKGxpbmspO1xyXG4gICAgICAgIGltZy5zcmMgPSBsaW5rLmhyZWY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHBhcmVudENvbnRhaW5lciwgb25Mb2FkLCB0ZW1wbGF0ZT17fSkge1xyXG4gICAgdGhpcy5wZW5kaW5ncyA9IHt9O1xyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgb25SZXNpemU6IHRoaXMub25SZXNpemUuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuICAgIHRoaXMucGFyZW50Q29udGFpbmVyID0gJChwYXJlbnRDb250YWluZXIpO1xyXG4gICAgdGhpcy5pc0lPUyA9IC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmICF3aW5kb3cuTVNTdHJlYW07XHJcbiAgICB0aGlzLnBhcmVudENvbnRhaW5lci5odG1sKCc8aWZyYW1lIHN0eWxlPVwiYm9yZGVyOiAwOycrKHRoaXMuaXNJT1M/ICcnOiAnIHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCUnKSsnXCIgc2Nyb2xsaW5nPVwibm9cIj48L2lmcmFtZT4nKTtcclxuXHJcbiAgICB0aGlzLmZyYW1lID0gdGhpcy5wYXJlbnRDb250YWluZXIuZmluZCgnaWZyYW1lJylbMF07XHJcbiAgICBpZih0aGlzLmZyYW1lLmNvbnRlbn
13345RXaW5kb3cuc3RvcCkge1xyXG4gICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cuc3RvcCgpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5pc0lPUykge1xyXG4gICAgICAkKHRoaXMucGFyZW50Q29udGFpbmVyWzBdLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpLm9uKCdyZXNpemUnLCB0aGlzLmJpbmRzLm9uUmVzaXplKTtcclxuICAgICAgdGhpcy5vblJlc2l6ZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KHRoaXMuY2hlY2tJZnJhbWVTaXplLmJpbmQodGhpcyksIDI1MCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb250YWluZXIgPSAkKHRoaXMuZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkpO1xyXG4gICAgdGhpcy5jb250YWluZXIuY3NzKCdtYXJnaW4nLCAnMCcpO1xyXG4gICAgdGhpcy5oZWFkID0gJCh0aGlzLmZyYW1lLmNvbnRlbnREb2N1bWVudC5oZWFkKTtcclxuICAgIHRoaXMub25Mb2FkID0gb25Mb2FkO1xyXG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHNjcmlwdCA9IHRlbXBsYXRlLmh0bWw/IHRlbXBsYXRlLnNjcmlwdDogdGhpcy5nZXRUZW1wbGF0ZSgpLnNjcmlwdDtcclxuICAgIGNvbnN0IHVybHMgPSB7XHJcbiAgICAgIHN0eWxlczogdGVtcGxhdGUuc3R5bGVzIHx8IHRoaXMuZ2V0VGVtcGxhdGUoKS5zdHlsZXMsXHJcbiAgICAgIGh0bWw6IFt0ZW1wbGF0ZS5odG1sIHx8IHRoaXMuZ2V0VGVtcGxhdGUoKS5odG1sXSxcclxuICAgICAgc2NyaXB0OiBzY3JpcHQ/IFtzY3JpcHRdOiBbXVxyXG4gICAgfSwgZmlsZXMgPSB7fSwgbGlua3MgPSB0ZW1wbGF0ZS5saW5rcyB8fCB0aGlzLmdldFRlbXBsYXRlKCkubGlua3M7XHJcblxyXG4gICAgdGhpcy5sb2FkRmlsZXModXJscywgZmlsZXMpLnRoZW4oKCk9PiB7XHJcbiAgICAgIGZvcihsZXQgc3R5bGUgb2YgZmlsZXMuc3R5bGVzKSB7XHJcbiAgICAgICAgbGV0IHRleHRDc3MgPSBzdHlsZS5kYXRhLCB1cmwgPSBzdHlsZS51cmw7XHJcbiAgICAgICAgdGV4dENzcyA9IHRleHRDc3MucmVwbGFjZSgvdXJsXFwoWydcIl0oLio/KVtcIiddXFwpL2csIChyLCByMSk9PiB7XHJcbiAgICAgICAgICByZXR1cm4gWyd1cmwoJywgdGhpcy51cmxSZXNvbHZlcih1cmwsIHIxKSwgJyknXS5qb2luKCcnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKGA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+JHt0ZXh0Q3NzfTwvc3R5bGU+YCkuYXBwZW5kVG8odGhpcy5oZWFkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb250YWluZXIuaHRtbCh0aGlzLnRyYW5zbGF0ZShmaWxlcy5odG1sWzBdLmRhdGEpKTtcclxuXHJcbiAgICAgIHRoaXMuakxpbmtzID0gW107XHJcbiAgICAgIGZvcihsZXQgbGluayBvZiBsaW5rcykge1xyXG4gICAgICAgIHRoaXMuakxpbmtzLnB1c2goJChbJzxsaW5rICcsIHRoaXMub2JqVG9BdHRyc1N0cihsaW5rKSwgJz4nXS5qb2luKCcnKSkuYXBwZW5kVG8odGhpcy5oZWFkKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGZpbGVzLnNjcmlwdFswXSkge1xyXG4gICAgICAgIGNvbnN0IGluaXQgPSBldmFsKGZpbGVzLnNjcmlwdFswXS5kYXRhKTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlT2JqZWN0ID0gaW5pdCh0aGlzLmNvbnRhaW5lcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZU9iamVjdCA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxpbmtDb250cm9scyA9IHt9O1xyXG4gICAgICBmb3IobGV0IGlkIG9mIHRoaXMuZ2V0TGlua3MoKSkge1xyXG4gICAgICAgIHRoaXMubGlua0NvbnRyb2xzW2lkXSA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy4nK2lkKTtcclxuICAgICAgICB0aGlzLmJpbmRzW2lkXSA9IFZpZXcuaGFuZGxlTGlua0V2ZW50LmJpbmQoe2dldEhhbmRsZXJzOiB0aGlzLmdldEhhbmRsZXJzLmJpbmQodGhpcyksIGlkLCBjdHJsOiB0aGlzLmxpbmtDb250cm9sc1tpZF19KTtcclxuICAgICAgICB0aGlzLmxpbmtDb250cm9sc1tpZF0ub24oJ2NsaWNrJywgdGhpcy5iaW5kc1tpZF0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLndpZGdldENvbnRyb2xzID0ge307XHJcbiAgICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRXaWRnZXRzKCkpIHtcclxuICAgICAgICB0aGlzLndpZGdldENvbnRyb2xzW2lkXSA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy4nK2lkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pbnB1dENvbnRyb2xzID0ge307XHJcbiAgICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRJbnB1dHMoKSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRDb250cm9sc1tpZF0gPSB0aGlzLmNvbnRhaW5lci5maW5kKCcuJytpZCk7XHJcbiAgICAgICAgdGhpcy5iaW5kc1tpZF0gPSBWaWV3LmhhbmRsZUlucHV0RXZlbnQuYmluZCh7Z2V0SGFuZGxlcnM6IHRoaXMuZ2V0SGFuZGxlcnMuYmluZCh0aGlzKSwgaWQsIGN0cmw6IHRoaXMuaW5wdXRDb250cm9sc1tpZF19KTtcclxuICAgICAgICB0aGlzLmlucHV0Q29udHJvbHNbaWRdLm9uKCdrZXl1cCcsIHRoaXMuYmluZHNbaWRdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5mb3JtQ29udHJvbHMgPSB7fTtcclxuICAgICAgZm9yKGxldCBpZCBvZiB0aGlzLmdldEZvcm1zKCkpIHtcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sc1tpZF0gPSB0aGlzLmNvbnRhaW5lci5maW5kKCcuJytpZCk7XHJcbiAgICAgICAgdGhpcy5iaW5kc1tpZF0gPSBWaWV3LmhhbmRsZUZvcm1FdmVudC5iaW5kKHtnZXRIYW5kbGVyczogdGhpcy5nZXRIYW5kbGVycy5iaW5kKHRoaXMpLCBpZCwgY3RybDogdGhpcy5mb3JtQ29udHJvbHNbaWRdfSk7XHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbaWRdLm9uKCdzdWJtaXQnLCB0aGlzLmJpbmRzW2lkXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudGV4dENvbnRyb2xzID0ge307XHJcbiAgICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRUZXh0cygpKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0Q29udHJvbHNbaWRdID0gdGhpcy5jb250YWluZXIuZmluZCgnLicraWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0YXRlU2V0dGVycyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtYXA6IHRoaXMubGlua0NvbnRyb2xzLFxyXG4gICAgICAgICAgc2V0dGVyOiB0aGlzLnNldExpbmtDb250cm9sU3RhdGUuYmluZCh0aGlzKVxyXG4gICAgICAgI
13345H0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWFwOiB0aGlzLndpZGdldENvbnRyb2xzLFxyXG4gICAgICAgICAgc2V0dGVyOiB0aGlzLnNldFdpZGdldENvbnRyb2xTdGF0ZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtYXA6IHRoaXMuaW5wdXRDb250cm9scyxcclxuICAgICAgICAgIHNldHRlcjogdGhpcy5zZXRJbnB1dENvbnRyb2xTdGF0ZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtYXA6IHRoaXMudGV4dENvbnRyb2xzLFxyXG4gICAgICAgICAgc2V0dGVyOiB0aGlzLnNldFRleHRDb250cm9sU3RhdGUuYmluZCh0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuXHJcbiAgICAgIHRoaXMuaW5pdFZpZXcoKTtcclxuXHJcbiAgICAgIGlmKHRoaXMub25Mb2FkKSB7XHJcbiAgICAgICAgdGhpcy5vbkxvYWQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5maXJlTGlua3NPbkxvYWRFdmVudCgpO1xyXG4gICAgfSkuXHJcbiAgICBjYXRjaCgocmVzKT0+IGNvbnNvbGUuZXJyb3IocmVzKSk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgZGVsZXRlIHRoaXMudGV4dENvbnRyb2xzO1xyXG4gICAgZm9yKGxldCBpZCBvZiB0aGlzLmdldExpbmtzKCkpIHtcclxuICAgICAgdGhpcy5saW5rQ29udHJvbHNbaWRdLm9mZignY2xpY2snLCB0aGlzLmJpbmRzW2lkXSk7XHJcbiAgICB9XHJcbiAgICBkZWxldGUgdGhpcy5saW5rQ29udHJvbHM7XHJcbiAgICBkZWxldGUgdGhpcy53aWRnZXRDb250cm9scztcclxuICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRJbnB1dHMoKSkge1xyXG4gICAgICB0aGlzLmlucHV0Q29udHJvbHNbaWRdLm9mZigna2V5dXAnLCB0aGlzLmJpbmRzW2lkXSk7XHJcbiAgICB9XHJcbiAgICBkZWxldGUgdGhpcy5pbnB1dENvbnRyb2xzO1xyXG4gICAgZm9yKGxldCBpZCBvZiB0aGlzLmdldEZvcm1zKCkpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbHNbaWRdLm9mZignc3VibWl0JywgdGhpcy5iaW5kc1tpZF0pO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIHRoaXMuZm9ybUNvbnRyb2xzO1xyXG5cclxuICAgICF0aGlzLnRlbXBsYXRlT2JqZWN0LmRpc3Bvc2UgfHwgdGhpcy50ZW1wbGF0ZU9iamVjdC5kaXNwb3NlKCk7XHJcbiAgICBkZWxldGUgdGhpcy50ZW1wbGF0ZU9iamVjdDtcclxuXHJcbiAgICBpZih0aGlzLmlzSU9TKSB7XHJcbiAgICAgICQodGhpcy5wYXJlbnRDb250YWluZXJbMF0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldykub2ZmKCdyZXNpemUnLCB0aGlzLmJpbmRzLm9uUmVzaXplKTtcclxuICAgIH1cclxuICAgIHRoaXMucGFyZW50Q29udGFpbmVyLmh0bWwoJycpO1xyXG4gICAgZGVsZXRlIHRoaXMuZnJhbWU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250YWluZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXJbMF07XHJcbiAgfVxyXG5cclxuICBnZXRQYXJlbnRDb250YWluZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRDb250YWluZXJbMF07XHJcbiAgfVxyXG5cclxuICBhZGRIYW5kbGVyKGhhbmRsZXIpIHtcclxuICAgIHRoaXMuaGFuZGxlcnMucHVzaChoYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIGluaXRWaWV3KCkge1xyXG5cclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXRDb250cm9sU3RhdGUoY3RybCwgZGVmYXVsdHMsIHN0YXRlLCBzdGF0ZUhhbmRsZXJzKSB7XHJcbiAgICBpZihjdHJsKSB7XHJcbiAgICAgIGNvbnN0IHN0ID0ge1xyXG4gICAgICAgIC4uLmRlZmF1bHRzLFxyXG4gICAgICAgIC4uLnN0YXRlXHJcbiAgICAgIH07XHJcbiAgICAgIGZvcihsZXQgbmFtZSBpbiBzdCkge1xyXG4gICAgICAgIGlmKHN0Lmhhc093blByb3BlcnR5KG5hbWUpICYmIHN0YXRlSGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgIHN0YXRlSGFuZGxlcnNbbmFtZV0oY3RybCwgc3RbbmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TGlua0NvbnRyb2xTdGF0ZShpZCwgc3RhdGUpIHtcclxuICAgIFZpZXcuc2V0Q29udHJvbFN0YXRlKFxyXG4gICAgICB0aGlzLmxpbmtDb250cm9sc1tpZF0sXHJcbiAgICAgIHtcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgZW5hYmxlOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0YXRlLFxyXG4gICAgICBWaWV3LmxpbmtTdGF0ZUhhbmRsZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkZ2V0Q29udHJvbFN0YXRlKGlkLCBzdGF0ZSkge1xyXG4gICAgVmlldy5zZXRDb250cm9sU3RhdGUoXHJcbiAgICAgIHRoaXMud2lkZ2V0Q29udHJvbHNbaWRdLFxyXG4gICAgICB7XHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZTogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBzdGF0ZSxcclxuICAgICAgVmlldy53aWRnZXRTdGF0ZUhhbmRsZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5wdXRDb250cm9sU3RhdGUoaWQsIHN0YXRlKSB7XHJcbiAgICBWaWV3LnNldENvbnRyb2xTdGF0ZShcclxuICAgICAgdGhpcy5pbnB1dENvbnRyb2xzW2lkXSxcclxuICAgICAge1xyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICBzdGF0ZSxcclxuICAgICAgVmlldy5pbnB1dFN0YXRlSGFuZGxlcnNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0Q29udHJvbFN0YXRlKGlkLCBzdGF0ZSkge1xyXG4gICAgVmlldy5zZXRDb250cm9sU3RhdGUoXHJcbiAgICAgIHRoaXMudGV4dENvbnRyb2xzW2lkXSxcclxuICAgICAge1xyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0YXRlLFxyXG4gICAgICBWaWV3LnRleHRTdGF0ZUhhbmRsZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25JdGVtU3RhdGVDaGFuZ2VkKCkge1xyXG5cclxuICB9XHJcblxyXG4gIHNldFN0YXRlKGlkLCBzdGF0ZSkge1xyXG4gICAgZm9yKGxldCBpdGVtIG9mIHRoaXMuc3RhdGVTZXR0ZXJzKSB7XHJcbiAgICAgIGlmKGl0ZW0ubWFwW2lkXSkge1xyXG4gICAgICAgIGl0ZW0uc2V0dGVyKGlkLCBzdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1TdGF0ZUNoYW5nZWQoaWQsIHN0YXRl
13345KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVmlldy5qcyIsImltcG9ydCB7JCwgVEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgT3JiaXQgZnJvbSAnLi9PcmJpdCc7XHJcbmltcG9ydCBUaHJlZU1vdXNlRXZlbnRDb252ZXJ0ZXIgZnJvbSAnLi9UaHJlZU1vdXNlRXZlbnRDb252ZXJ0ZXInO1xyXG5pbXBvcnQgVGhyZWVUb3VjaEV2ZW50Q29udmVydGVyIGZyb20gJy4vVGhyZWVUb3VjaEV2ZW50Q29udmVydGVyJztcclxuaW1wb3J0IERyYWcgZnJvbSAnLi9EcmFnJztcclxuaW1wb3J0IENTUzNEUmVuZGVyZXIgZnJvbSAnLi9DU1MzRFJlbmRlcmVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpc3VhbFdvcmxkIGV4dGVuZHMgVEhSRUUuRXZlbnREaXNwYXRjaGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIGNvbnRhaW5lciwgdXNlSGVscGVycz1mYWxzZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMud25kID0gd25kO1xyXG4gICAgdGhpcy5kb2MgPSBkb2M7XHJcbiAgICB0aGlzLmpDb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICB0aGlzLnJlbmRlckNhbGxiYWNrcyA9IFtdO1xyXG5cclxuICAgIHRoaXMuY2xvY2sgPSBuZXcgVEhSRUUuQ2xvY2soKTtcclxuXHJcbiAgICB0aGlzLnJheWNhc3RlciA9IG5ldyBUSFJFRS5SYXljYXN0ZXIoKTtcclxuXHJcbiAgICB0aGlzLnNjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7XHJcbiAgICB0aGlzLmNzc1NjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7XHJcblxyXG4gICAgdGhpcy5jYW1lcmEgPSBuZXcgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEoMzAsIHRoaXMud2lkdGgoKS90aGlzLmhlaWdodCgpLCAwLjIsIDIwMDApO1xyXG4gICAgY29uc3Qgc2NhbGUgPSA1O1xyXG5cclxuICAgIHRoaXMuY2FtZXJhLnBvc2l0aW9uLnggPSAwO1xyXG4gICAgdGhpcy5jYW1lcmEucG9zaXRpb24ueSA9IDUuNSpzY2FsZTtcclxuICAgIHRoaXMuY2FtZXJhLnBvc2l0aW9uLnogPSAwO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJlcih7YWxwaGE6IHRydWUsIGFudGlhbGlhczogdHJ1ZX0pO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRDbGVhckNvbG9yKDB4MDAwMDAwLCAwKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh0aGlzLnduZC5kZXZpY2VQaXhlbFJhdGlvKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U2l6ZSh0aGlzLndpZHRoKCksIHRoaXMuaGVpZ2h0KCkpO1xyXG5cclxuICAgIHRoaXMuakNvbnRhaW5lci5hcHBlbmQodGhpcy5yZW5kZXJlci5kb21FbGVtZW50KTtcclxuXHJcbiAgICB0aGlzLmNzc1JlbmRlcmVyXHQ9IG5ldyBDU1MzRFJlbmRlcmVyKCk7XHJcbiAgICB0aGlzLmNzc1JlbmRlcmVyLnNldFNpemUodGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTtcclxuICAgICQodGhpcy5jc3NSZW5kZXJlci5kb21FbGVtZW50KS5jc3Moe1xyXG4gIFx0XHRwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICBcdFx0dG9wOiAwLFxyXG4gIFx0XHRtYXJnaW46IDAsXHJcbiAgXHRcdHBhZGRpbmc6IDBcclxuXHQgIH0pO1xyXG4gICAgdGhpcy5qQ29udGFpbmVyLmFwcGVuZCh0aGlzLmNzc1JlbmRlcmVyLmRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudCA9IHRoaXMuY3NzUmVuZGVyZXIuZG9tRWxlbWVudDtcclxuXHJcblxyXG5cclxuICAgIHRoaXMuY29udHJvbHMgPSBuZXcgT3JiaXQodGhpcy5jYW1lcmEsIHRoaXMuZWxlbWVudCk7XHJcbiAgICB0aGlzLmNvbnRyb2xzLnRhcmdldC55ID0gMC41O1xyXG5cclxuICAgIGNvbnN0IGNzc1NjZW5lID0gJCh0aGlzLmNzc1JlbmRlcmVyLmRvbUVsZW1lbnQpLmZpbmQoJ2RpdicpLCB0bXBWZWN0b3IgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgdGhpcy5jb250cm9scy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKT0+IHtcclxuICAgICAgdGhpcy5jYW1lcmEuZ2V0V29ybGREaXJlY3Rpb24odG1wVmVjdG9yKTtcclxuICAgICAgY3NzU2NlbmUuY3NzKCdkaXNwbGF5J
13345ywgdG1wVmVjdG9yLnktdGhpcy5jYW1lcmEucG9zaXRpb24ueT4wPyAnbm9uZSc6ICdibG9jaycpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy50ZXh0dXJlTG9hZGVyID0gbmV3IFRIUkVFLlRleHR1cmVMb2FkZXIoKTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChuZXcgVEhSRUUuQW1iaWVudExpZ2h0KDB4RDBEMEQwKSk7Ly8weEMwQzBDMFxyXG5cclxuICAgIHRoaXMubGlnaHQgPSBuZXcgVEhSRUUuRGlyZWN0aW9uYWxMaWdodCgweDQwNDA0MCwgMSk7XHJcbiAgICB0aGlzLmxpZ2h0LnBvc2l0aW9uLnNldCgwLCA2KnNjYWxlLCAwKTtcclxuICAgIHRoaXMubGlnaHQuY2FzdFNoYWRvdyA9IGZhbHNlO1xyXG4gICAgLy8gY29uc3QgZCA9IDIwKnNjYWxlO1xyXG4gICAgLy8gdGhpcy5saWdodC5zaGFkb3cuY2FtZXJhLmxlZnQgPSAtZDtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93LmNhbWVyYS5yaWdodCA9IGQ7XHJcbiAgICAvLyB0aGlzLmxpZ2h0LnNoYWRvdy5jYW1lcmEudG9wID0gZDtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93LmNhbWVyYS5ib3R0b20gPSAtZDtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93LmNhbWVyYS5uZWFyID0gMSpzY2FsZTtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93LmNhbWVyYS5mYXIgPSAyNSpzY2FsZTtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93Lm1hcFNpemUueCA9IDEwMjQ7XHJcbiAgICAvLyB0aGlzLmxpZ2h0LnNoYWRvdy5tYXBTaXplLnkgPSAxMDI0O1xyXG4gICAgdGhpcy5zY2VuZS5hZGQodGhpcy5saWdodCk7XHJcblxyXG4gICAgaWYodXNlSGVscGVycykge1xyXG4gICAgICB0aGlzLnNjZW5lLmFkZChuZXcgVEhSRUUuQXhpc0hlbHBlcig1KSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgb25XaW5kb3dSZXNpemU6IHRoaXMub25XaW5kb3dSZXNpemUuYmluZCh0aGlzKSxcclxuICAgICAgYW5pbWF0ZTogdGhpcy5hbmltYXRlLmJpbmQodGhpcylcclxuICAgIH07XHJcblxyXG4gICAgJCh0aGlzLnduZCkub24oJ3Jlc2l6ZScsIHRoaXMuYmluZHMub25XaW5kb3dSZXNpemUpO1xyXG5cclxuICAgIHRoaXMubW91c2VFdmVudHMgPSBuZXcgVGhyZWVNb3VzZUV2ZW50Q29udmVydGVyKHRoaXMud25kLCB0aGlzLmRvYywgdGhpcyk7XHJcbiAgICB0aGlzLnRvdWNoRXZlbnRzID0gbmV3IFRocmVlVG91Y2hFdmVudENvbnZlcnRlcih0aGlzLnduZCwgdGhpcy5kb2MsIHRoaXMpO1xyXG4gICAgY29uc3QgZmlsdGVyRGF0YSA9IHt0eXBlOiAnbW91c2Vtb3ZlJ307XHJcbiAgICB0aGlzLm1vdXNlRXZlbnRzLmZpbHRlciA9IChlbGVtZW50LCBlKT0+IHtcclxuICAgICAgY29uc3QgdHlwZXMgPSBbJ21vdXNlZW50ZXInLCAnbW91c2VvdmVyJywgJ21vdXNlbGVhdmUnLCAnbW91c2VvdXQnXSwgY29udGFpbnMgPSAocCwgYyk9PiBwPT09YyB8fCAkLmNvbnRhaW5zKHAsIGMpO1xyXG4gICAgICBpZihlLnR5cGU9PT0nbW91c2Vtb3ZlJykge1xyXG4gICAgICAgIGZpbHRlckRhdGEucGFnZVggPSBlLnBhZ2VYO1xyXG4gICAgICAgIGZpbHRlckRhdGEucGFnZVkgPSBlLnBhZ2VZO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBlLnJlbGF0ZWRUYXJnZXQgJiYgfnR5cGVzLmluZGV4T2YoZS50eXBlKSAmJiBjb250YWlucyhlbGVtZW50LCBlLnRhcmdldCkgJiYgY29udGFpbnMoZWxlbWVudCwgZS5yZWxhdGVkVGFyZ2V0KT8gey4uLmUsIC4uLmZpbHRlckRhdGF9OiBlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZHJhZyA9IG5ldyBEcmFnKHRoaXMud25kLCB0aGlzLmRvYywgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbldpbmRvd1Jlc2l6ZSgpO1xyXG4gICAgdGhpcy5hbmltYXRlKCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgZGVsZXRlIHRoaXMuYmluZHMuYW5pbWF0ZTtcclxuICAgICQodGhpcy53bmQpLm9mZigncmVzaXplJywgdGhpcy5iaW5kcy5vbldpbmRvd1Jlc2l6ZSk7XHJcbiAgICB0aGlzLm1vdXNlRXZlbnRzLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMudG91Y2hFdmVudHMuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5kcmFnLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMuY29udHJvbHMuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgd2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5qQ29udGFpbmVyLndpZHR
13345oKCk7XHJcbiAgfVxyXG5cclxuICBoZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5qQ29udGFpbmVyLmhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0RXh0cmFMaWdodGluZyh2KSB7XHJcbiAgICB0aGlzLmxpZ2h0LmludGVuc2l0eSA9IHY7XHJcbiAgfVxyXG5cclxuICBnZXRPcmJpdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xzO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29udHJvbHNTdGF0ZShzdGF0ZSkge1xyXG4gICAgdGhpcy5jb250cm9scy5lbmFibGVkID0gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250cm9sc1N0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbHMuZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgaWYodGhpcy53aWR0aCgpPjEgJiYgdGhpcy5oZWlnaHQoKT4xKSB7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZUNhbWVyYSA9IChjYW1lcmEpPT4ge1xyXG4gICAgICAgIGNhbWVyYS5hc3BlY3QgPSB0aGlzLndpZHRoKCkvdGhpcy5oZWlnaHQoKTtcclxuICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICB9LFxyXG4gICAgICB1cGRhdGVSZW5kZXJlciA9IChyZW5kZXJlcik9PiB7XHJcbiAgICAgICAgcmVuZGVyZXIuc2V0U2l6ZSh0aGlzLndpZHRoKCksIHRoaXMuaGVpZ2h0KCkpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdXBkYXRlQ2FtZXJhKHRoaXMuY2FtZXJhKTtcclxuICAgICAgdXBkYXRlUmVuZGVyZXIodGhpcy5yZW5kZXJlcik7XHJcbiAgICAgIHVwZGF0ZVJlbmRlcmVyKHRoaXMuY3NzUmVuZGVyZXIpO1xyXG5cclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiAncmVzaXplJ30pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgdGhpcy5vbldpbmRvd1Jlc2l6ZSgpO1xyXG4gICAgICB9LCAyNTApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkT2JqZWN0KG9iamVjdCkge1xyXG4gICAgdGhpcy5zY2VuZS5hZGQob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIGFkZENzc09iamVjdChvYmplY3QpIHtcclxuICAgIHRoaXMuY3NzU2NlbmUuYWRkKG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDc3NPYmplY3Qob2JqZWN0KSB7XHJcbiAgICB0aGlzLmNzc1NjZW5lLnJlbW92ZShvYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlT2JqZWN0KG9iamVjdCkge1xyXG4gICAgdGhpcy5zY2VuZS5yZW1vdmUob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIGFuaW1hdGUoKSB7XHJcbiAgICBpZih0aGlzLmJpbmRzLmFuaW1hdGUpIHtcclxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuYmluZHMuYW5pbWF0ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlcigpO1xyXG4gIH1cclxuXHJcbiAgYWRkUmVuZGVyQ2FsbGJhY2soY2xiKSB7XHJcbiAgICB0aGlzLnJlbmRlckNhbGxiYWNrcy5wdXNoKGNsYik7XHJcbiAgfVxyXG5cclxuICByZW1vdmVSZW5kZXJDYWxsYmFjayhjbGIpIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnJlbmRlckNhbGxiYWNrcy5pbmRleE9mKGNsYik7XHJcbiAgICBpZih+aSkge1xyXG4gICAgICB0aGlzLnJlbmRlckNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBjb25zdCBkZWx0YVRpbWUgPSB0aGlzLmNsb2NrLmdldERlbHRhKCk7XHJcbiAgICB0aGlzLmNvbnRyb2xzLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgZm9yKGxldCBjbGIgb2YgdGhpcy5yZW5kZXJDYWxsYmFja3MpIHtcclxuICAgICAgY2xiKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNzc1JlbmRlcmVyLnJlbmRlcih0aGlzLmNzc1NjZW5lLCB0aGlzLmNhbWVyYSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCB0aGlzLmNhbWVyYSk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzR2VvbWV0cnkoYnVmR2VvbWV0cnksIG1lc2gpIHtcclxuICAgIG1lc2guZ2VvbWV0cnkgPSBidWZHZW9tZXRyeTtcclxuICAgIC8vIE9idGFpbiBhIEdlb21ldHJ5XHJcbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBUSFJFRS5HZW9tZXRyeSgpLmZyb21CdWZmZXJHZW9tZXRyeShidWZHZW9tZXRyeSk7XHJcbiAgICAvLyBNZXJnZSB0aGUgdmVydGljZXMgc28gdGhlIHRyaWFuZ2xlIHNvdXAgaXMgY29udmVydGVkIHRvIGluZGV4ZWQgdHJpYW5nbGVzXHJcbiAgICBnZW9tZXRyeS5tZXJnZVZlcnRpY2VzKCk7XHJcbiAgICAvLyBDb252ZXJ0IGFnYWluIHRvIEJ1ZmZlckdlb21ldHJ5LCBpbmRleGVkXHJcbiAgICBjb25zdCBpbmRleGVkQnVmZmVyR2VvbSA9IHRoaXMuY3JlYXRlSW5kZXhlZEJ1ZmZlckdlb21ldHJ5RnJvbUdlb21ldHJ5KGdlb21ldHJ5KTtcclxuICAgIC8vIENyZWF0ZSBpbmRleCBhcnJheXMgbWFwcGluZyB0aGUgaW5kZXhlZCB2ZXJ0aWNlcyB0byBidWZHZW9tZXRyeSB2ZXJ0aWNlc1xyXG4gICAgcmV0dXJuIHRoaXMubWFwSW5kaWNlcyhidWZHZW9tZXRyeSwgaW5kZXhlZEJ1ZmZlckdlb20pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlSW5kZXhlZEJ1ZmZlckdlb21ldHJ5RnJvbUdlb21ldHJ5KGdlb21ldHJ5KSB7XHJcbiAgICBjb25zdCBudW1WZXJ0aWNlcyA9IGdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aDtcclxuICAgIGNvbnN0IG51bUZhY2VzID0gZ2VvbWV0cnkuZmFjZXMubGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IGJ1ZmZlckdlb20gPSBuZXcgVEhSRUUuQnVmZmVyR2VvbWV0cnkoKTtcclxuICAgIGNvbnN0IHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShudW1WZXJ0aWNlcyAqIDMpO1xyXG4gICAgY29uc3QgaW5kaWNlcyA9IG5ldyAobnVtRmFjZXMgKiAzID4gNjU1MzUgPyBVaW50MzJBcnJheSA6IFVpbnQxNkFycmF
133455KShudW1GYWNlcyAqIDMpO1xyXG5cclxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1WZXJ0aWNlczsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHAgPSBnZW9tZXRyeS52ZXJ0aWNlc1tpXTtcclxuICAgICAgY29uc3QgaTMgPSBpICogMztcclxuICAgICAgdmVydGljZXNbaTNdID0gcC54O1xyXG4gICAgICB2ZXJ0aWNlc1tpMyArIDFdID0gcC55O1xyXG4gICAgICB2ZXJ0aWNlc1tpMyArIDJdID0gcC56O1xyXG4gICAgfVxyXG5cclxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1GYWNlczsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGYgPSBnZW9tZXRyeS5mYWNlc1tpXTtcclxuICAgICAgY29uc3QgaTMgPSBpICogMztcclxuICAgICAgaW5kaWNlc1tpM10gPSBmLmE7XHJcbiAgICAgIGluZGljZXNbaTMgKyAxXSA9IGYuYjtcclxuICAgICAgaW5kaWNlc1tpMyArIDJdID0gZi5jO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1ZmZlckdlb20uc2V0SW5kZXgobmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZShpbmRpY2VzLCAxKSk7XHJcbiAgICBidWZmZXJHZW9tLmFkZEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XHJcblxyXG4gICAgcmV0dXJuIGJ1ZmZlckdlb207XHJcbiAgfVxyXG5cclxuICBpc0VxdWFsKHgxLCB5MSwgejEsIHgyLCB5MiwgejIpIHtcclxuICAgIGNvbnN0IGRlbHRhID0gMC4wMDAwMDE7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoeDIgLSB4MSkgPCBkZWx0YSAmJlxyXG4gICAgTWF0aC5hYnMoeTIgLSB5MSkgPCBkZWx0YSAmJlxyXG4gICAgTWF0aC5hYnMoejIgLSB6MSkgPCBkZWx0YTtcclxuICB9XHJcblxyXG4gIG1hcEluZGljZXMoYnVmR2VvbWV0cnksIGluZGV4ZWRCdWZmZXJHZW9tKSB7XHJcbiAgICAvLyBDcmVhdGVzIG1hcHBlZFZlcnRpY2VzLCBtYXBwZWRJbmRpY2VzIGFuZCBtYXBwZWRBc3NvY2lhdGlvbiBpbiBidWZHZW9tZXRyeVxyXG4gICAgY29uc3QgdmVydGljZXMgPSBidWZHZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xyXG4gICAgY29uc3QgaWR4VmVydGljZXMgPSBpbmRleGVkQnVmZmVyR2VvbS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xyXG4gICAgY29uc3QgaW5kaWNlcyA9IGluZGV4ZWRCdWZmZXJHZW9tLmluZGV4LmFycmF5O1xyXG5cclxuICAgIGNvbnN0IG51bUlkeFZlcnRpY2VzID0gaWR4VmVydGljZXMubGVuZ3RoIC8gMztcclxuICAgIGNvbnN0IG51bVZlcnRpY2VzID0gdmVydGljZXMubGVuZ3RoIC8gMztcclxuXHJcbiAgICBidWZHZW9tZXRyeS5tYXBwZWRWZXJ0aWNlcyA9IGlkeFZlcnRpY2VzO1xyXG4gICAgYnVmR2VvbWV0cnkubWFwcGVkSW5kaWNlcyA9IGluZGljZXM7XHJcbiAgICBidWZHZW9tZXRyeS5tYXBwZWRBc3NvY2lhdGlvbiA9IFtdO1xyXG5cclxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1JZHhWZXJ0aWNlczsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gW107XHJcbiAgICAgIGJ1Zkdlb21ldHJ5Lm1hcHBlZEFzc29jaWF0aW9uLnB1c2goYXNzb2NpYXRpb24pO1xyXG4gICAgICBjb25zdCBpMyA9IGkgKiAzO1xyXG4gICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtVmVydGljZXM7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGozID0gaiAqIDM7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFcXVhbChpZHhWZXJ0aWNlc1tpM10sIGlkeFZlcnRpY2VzW2kzICsgMV0sIGlkeFZlcnRpY2VzW2kzICsgMl0sXHJcbiAgICAgICAgdmVydGljZXNbajNdLCB2ZXJ0aWNlc1tqMyArIDFdLCB2ZXJ0aWNlc1tqMyArIDJdKSkge1xyXG4gICAgICAgICAgYXNzb2NpYXRpb24ucHVzaChqMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3ZlcnRpY2VzOiBidWZHZW9tZXRyeS5tYXBwZWRWZXJ0aWNlcywgaW5kaWNlczogYnVmR2VvbWV0cnkubWFwcGVkSW5kaWNlc307XHJcbiAgfVxyXG5cclxuICBvbmVOb2RlUG9zaXRpb25DYWxsYmFjayhwLCBxKSB7XHJcbiAgICB0aGlzLnBvc2l0aW9uLnNldChwLngsIHAueSwgcC56KTtcclxuICAgIHRoaXMucXVhdGVybmlvbi5zZXQocS54LCBxLnksIHEueiwgcS53KTtcclxuICB9XHJcblxyXG4gIG11bHR5Tm9kZVBvc2l0aW9uQ2FsbGJhY2sobm9kZSwgcCwgbikge1xyXG4gICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xyXG4gICAgY29uc3Qgdm9sdW1lUG9zaXRpb25zID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcclxuICAgIGNvbnN0IHZvbHVtZU5vcm1hbHMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbC5hcnJheTtcclxuICAgIGNvbnN0IGFzc29jVmVydGV4ID0gZ2VvbWV0cnkubWFwcGVkQXNzb2NpYXRpb25bbm9kZV07XHJcblxyXG4gICAgZm9yKGxldCBrID0gMDsgayA8IGFzc29jVmVydGV4Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgbGV0IGluZGV4VmVydGV4ID0gYXNzb2NWZXJ0ZXhba107XHJcbiAgICAgICAgdm9sdW1lUG9zaXRpb25zW2luZGV4VmVydGV4XSA9IHAueDtcclxuICAgICAgICB2b2x1bWVOb3JtYWxzW2luZGV4VmVydGV4XSA9IG4ueDtcclxuICAgICAgICArK2luZGV4VmVydGV4O1xyXG4gICAgICAgIHZvbHVtZVBvc2l0aW9uc1tpbmRleFZlcnRleF0gPSBwLnk7XHJcbiAgICAgICAgdm9sdW1lTm9ybWFsc1tpbmRleFZlcnRleF0gPSBuLnk7XHJcbiAgICAgICAgKytpbmRleFZlcnRleDtcclxuICAgICAgICB2b2x1bWVQb3NpdGlvbnNbaW5kZXhWZXJ0ZXhdID0gcC56O1xyXG4gICAgICAgIHZvbHVtZU5vcm1hbHNbaW5kZXhWZXJ0ZXhdID0gbi56O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbXVsdHlOb2RlUG9zaXRpb25Qb3N0Q2FsbGJhY2soKSB7XHJcbiAgICBjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XHJcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHBhdGhQb3NpdGlvbkNhbGxiYWNrKG5vZGUsIHApIHtcclxuICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcclxuXHRcdGxldCBpID0gMyAqIG5vZGU7XHJcblx0XHRwb3NpdGlvbnNbaSsrXSA9IHAueDtcclxuXHRcdH
13345Bvc2l0aW9uc1tpKytdID0gcC55O1xyXG5cdFx0cG9zaXRpb25zW2ldID0gcC56O1xyXG4gIH1cclxuXHJcbiAgcGF0aFBvc2l0aW9uUG9zdENhbGxiYWNrKCkge1xyXG4gICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xyXG4gICAgZ2VvbWV0cnkuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24ubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVmlzdWFsV29ybGQuanMiLCJpbXBvcnQgQ29udHJvbGxlciBmcm9tICcuL0NvbnRyb2xsZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lkZ2V0Q29udHJvbGxlciBleHRlbmRzIENvbnRyb2xsZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih2aWV3KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy52aWV3ID0gdmlldztcclxuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdG9nbGUoKSB7XHJcbiAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlO1xyXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGZpcmVDaGFuZ2UoKSB7XHJcbiAgICBpZih0aGlzLm9uQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UoKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVmlldygpIHtcclxuICAgIGlmKHRoaXMudmlldykge1xyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ3dpZEZsb2F0V25kJywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLnZpc2libGUsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1dpZGdldENvbnRyb2xsZXIuanMiLCJpbXBvcnQgVGFyZ2V0IGZyb20gJy4vVGFyZ2V0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENpcmNsZVRhcmdldCBleHRlbmRzIFRhcmdldCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHgsIHksIHIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnAgPSB7XHJcbiAgICAgIHgsXHJcbiAgICAgIHksXHJcbiAgICAgIHJcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB0ZXN0SW50ZXJzZWN0aW9uKGUsIGRhdGEpIHtcclxuICAgIGxldCByZXM7XHJcbiAgICBjb25zdCB7eCwgeX0gPSBkYXRhLCBwID0gdGhpcy5wO1xyXG4gICAgaWYoKHgtcC54KSooeC1wLngpKyh5LXAueSkqKHktcC55KTw9cC5yKnAucikge1xyXG4gICAgICByZXMgPSB7XHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLFxyXG4gICAgICAgIGRhdGFcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy90YXJnZXRzL0NpcmNsZVRhcmdldC5qcyIsImltcG9ydCBUYXJnZXQgZnJvbSAnLi9UYXJnZXQnO1xyXG5pbXBvcnQgQmFzZU1hdGhVdGlscyBmcm9tICcuLi9CYXNlTWF0aFV0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvbHlUYXJnZXQgZXh0ZW5kcyBUYXJnZXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwb2x5KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5wb2x5ID0gcG9seTtcclxuICB9XHJcblxyXG4gIHRlc3RJbnRlcnNlY3Rpb24oZSwgcCkge1xyXG4gICAgcmV0dXJuIEJhc2VNYXRoVXRpbHMuaXNJbnNpZGVQb2x5KHRoaXMucG9seSwgcCk/IHtcclxuICAgICAgdGFyZ2V0OiB0aGlzLFxyXG4gICAgICBkYXRhOiBwXHJcbiAgICB9OiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy90YXJnZXRzL1BvbHlUYXJnZXQuanMiLCIvKioqIElNUE9SVFMgRlJPTSBpbXBvcnRzLWxvYWRlciAqKiovXG52YXIgZGVmaW5lID0gZmFsc2U7XG5cbi8qIVxuICogalF1ZXJ5IE1vdXNld2hlZWwgMy4xLjEzXG4gKlxuICogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZVxuICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIGlmICggdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICkge1xuICAgICAgICAvLyBBTUQuIFJlZ2lzdGVyIGFzIGFuIGFub255bW91cyBtb2R1bGUuXG4gICAgICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBOb2RlL0NvbW1vbkpTIHN0eWxlIGZvciBCcm93c2VyaWZ5XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHNcbiAgICAgICAgZmFjdG9yeShqUXVlcnkpO1xuICAgIH1cbn0oZnVuY3Rpb24gKCQpIHtcblxuICAgIHZhciB0b0ZpeCAgPSBbJ3doZWVsJywgJ21vdXNld2hlZWwnLCAnRE9NTW91c2VTY3JvbGwnLCAnTW96TW91c2VQaXhlbFNjcm9sbCddLFxuICAgICAgICB0b0JpbmQgPSAoICdvbndoZWVsJyBpbiBkb2N1bWVudCB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPj0gOSApID9cbiAgICAgICAgICAgICAgICAgICAgWyd3aGVlbCddIDogWydtb3VzZXdoZWVsJywgJ0RvbU1vdXNlU2Nyb2xsJywgJ01vek1vdXNlUGl4ZWxTY3JvbGwnXSxcbiAgICAgICAgc2xpY2UgID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLFxuICAgICAgICBudWxsTG93ZXN0RGVsdGFUaW1lb3V0LCBsb3dlc3REZWx0YTtcblxuICAgIGlmICggJC5ldmVudC5maXhIb29rcyApIHtcbiAgICAgICAgZm9yICggdmFyIGkgPSB0b0ZpeC5sZW5ndGg7IGk7ICkge1xuICAgICAgICAgICAgJC5ldmVudC5maXhIb29rc1sgdG9GaXhbLS1pXSBdID0gJC5ldmVudC5tb3VzZUhvb2tzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNwZWNpYWwgP
13345SAkLmV2ZW50LnNwZWNpYWwubW91c2V3aGVlbCA9IHtcbiAgICAgICAgdmVyc2lvbjogJzMuMS4xMicsXG5cbiAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCB0aGlzLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG4gICAgICAgICAgICAgICAgZm9yICggdmFyIGkgPSB0b0JpbmQubGVuZ3RoOyBpOyApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCB0b0JpbmRbLS1pXSwgaGFuZGxlciwgZmFsc2UgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25tb3VzZXdoZWVsID0gaGFuZGxlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBsaW5lIGhlaWdodCBhbmQgcGFnZSBoZWlnaHQgZm9yIHRoaXMgcGFydGljdWxhciBlbGVtZW50XG4gICAgICAgICAgICAkLmRhdGEodGhpcywgJ21vdXNld2hlZWwtbGluZS1oZWlnaHQnLCBzcGVjaWFsLmdldExpbmVIZWlnaHQodGhpcykpO1xuICAgICAgICAgICAgJC5kYXRhKHRoaXMsICdtb3VzZXdoZWVsLXBhZ2UtaGVpZ2h0Jywgc3BlY2lhbC5nZXRQYWdlSGVpZ2h0KHRoaXMpKTtcbiAgICAgICAgfSxcblxuICAgICAgICB0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcbiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IHRvQmluZC5sZW5ndGg7IGk7ICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHRvQmluZFstLWldLCBoYW5kbGVyLCBmYWxzZSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbm1vdXNld2hlZWwgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYW4gdXAgdGhlIGRhdGEgd2UgYWRkZWQgdG8gdGhlIGVsZW1lbnRcbiAgICAgICAgICAgICQucmVtb3ZlRGF0YSh0aGlzLCAnbW91c2V3aGVlbC1saW5lLWhlaWdodCcpO1xuICAgICAgICAgICAgJC5yZW1vdmVEYXRhKHRoaXMsICdtb3VzZXdoZWVsLXBhZ2UtaGVpZ2h0Jyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0TGluZUhlaWdodDogZnVuY3Rpb24oZWxlbSkge1xuICAgICAgICAgICAgdmFyICRlbGVtID0gJChlbGVtKSxcbiAgICAgICAgICAgICAgICAkcGFyZW50ID0gJGVsZW1bJ29mZnNldFBhcmVudCcgaW4gJC5mbiA/ICdvZmZzZXRQYXJlbnQnIDogJ3BhcmVudCddKCk7XG4gICAgICAgICAgICBpZiAoISRwYXJlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICQoJ2JvZHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCgkcGFyZW50LmNzcygnZm9udFNpemUnKSwgMTApIHx8IHBhcnNlSW50KCRlbGVtLmNzcygnZm9udFNpemUnKSwgMTApIHx8IDE2O1xuICAgICAgICB9LFxuXG4gICAgICAgIGdldFBhZ2VIZWlnaHQ6IGZ1bmN0aW9uKGVsZW0pIHtcbiAgICAgICAgICAgIHJldHVybiAkKGVsZW0pLmhlaWdodCgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgICBhZGp1c3RPbGREZWx0YXM6IHRydWUsIC8vIHNlZSBzaG91bGRBZGp1c3RPbGREZWx0YXMoKSBiZWxvd1xuICAgICAgICAgICAgbm9ybWFsaXplT2Zmc2V0OiB0cnVlICAvLyBjYWxscyBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZm9yIGVhY2ggZXZlbnRcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAkLmZuLmV4dGVuZCh7XG4gICAgICAgIG1vdXNld2hlZWw6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4gPyB0aGlzLmJpbmQoJ21vdXNld2hlZWwnLCBmbikgOiB0aGlzLnRyaWdnZXIoJ21vdXNld2hlZWwnKTtcbiAgICAgICAgfSxcblxuICAgICAgICB1bm1vdXNld2hlZWw6IGZ1bmN0aW9uKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bmJpbmQoJ21vdXNld2hlZWwnLCBmbik7XG4gICAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgICAgICB2Y
13345XIgb3JnRXZlbnQgICA9IGV2ZW50IHx8IHdpbmRvdy5ldmVudCxcbiAgICAgICAgICAgIGFyZ3MgICAgICAgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSksXG4gICAgICAgICAgICBkZWx0YSAgICAgID0gMCxcbiAgICAgICAgICAgIGRlbHRhWCAgICAgPSAwLFxuICAgICAgICAgICAgZGVsdGFZICAgICA9IDAsXG4gICAgICAgICAgICBhYnNEZWx0YSAgID0gMCxcbiAgICAgICAgICAgIG9mZnNldFggICAgPSAwLFxuICAgICAgICAgICAgb2Zmc2V0WSAgICA9IDA7XG4gICAgICAgIGV2ZW50ID0gJC5ldmVudC5maXgob3JnRXZlbnQpO1xuICAgICAgICBldmVudC50eXBlID0gJ21vdXNld2hlZWwnO1xuXG4gICAgICAgIC8vIE9sZCBzY2hvb2wgc2Nyb2xsd2hlZWwgZGVsdGFcbiAgICAgICAgaWYgKCAnZGV0YWlsJyAgICAgIGluIG9yZ0V2ZW50ICkgeyBkZWx0YVkgPSBvcmdFdmVudC5kZXRhaWwgKiAtMTsgICAgICB9XG4gICAgICAgIGlmICggJ3doZWVsRGVsdGEnICBpbiBvcmdFdmVudCApIHsgZGVsdGFZID0gb3JnRXZlbnQud2hlZWxEZWx0YTsgICAgICAgfVxuICAgICAgICBpZiAoICd3aGVlbERlbHRhWScgaW4gb3JnRXZlbnQgKSB7IGRlbHRhWSA9IG9yZ0V2ZW50LndoZWVsRGVsdGFZOyAgICAgIH1cbiAgICAgICAgaWYgKCAnd2hlZWxEZWx0YVgnIGluIG9yZ0V2ZW50ICkgeyBkZWx0YVggPSBvcmdFdmVudC53aGVlbERlbHRhWCAqIC0xOyB9XG5cbiAgICAgICAgLy8gRmlyZWZveCA8IDE3IGhvcml6b250YWwgc2Nyb2xsaW5nIHJlbGF0ZWQgdG8gRE9NTW91c2VTY3JvbGwgZXZlbnRcbiAgICAgICAgaWYgKCAnYXhpcycgaW4gb3JnRXZlbnQgJiYgb3JnRXZlbnQuYXhpcyA9PT0gb3JnRXZlbnQuSE9SSVpPTlRBTF9BWElTICkge1xuICAgICAgICAgICAgZGVsdGFYID0gZGVsdGFZICogLTE7XG4gICAgICAgICAgICBkZWx0YVkgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IGRlbHRhIHRvIGJlIGRlbHRhWSBvciBkZWx0YVggaWYgZGVsdGFZIGlzIDAgZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXRpeVxuICAgICAgICBkZWx0YSA9IGRlbHRhWSA9PT0gMCA/IGRlbHRhWCA6IGRlbHRhWTtcblxuICAgICAgICAvLyBOZXcgc2Nob29sIHdoZWVsIGRlbHRhICh3aGVlbCBldmVudClcbiAgICAgICAgaWYgKCAnZGVsdGFZJyBpbiBvcmdFdmVudCApIHtcbiAgICAgICAgICAgIGRlbHRhWSA9IG9yZ0V2ZW50LmRlbHRhWSAqIC0xO1xuICAgICAgICAgICAgZGVsdGEgID0gZGVsdGFZO1xuICAgICAgICB9XG4gICAgICAgIGlmICggJ2RlbHRhWCcgaW4gb3JnRXZlbnQgKSB7XG4gICAgICAgICAgICBkZWx0YVggPSBvcmdFdmVudC5kZWx0YVg7XG4gICAgICAgICAgICBpZiAoIGRlbHRhWSA9PT0gMCApIHsgZGVsdGEgID0gZGVsdGFYICogLTE7IH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIGNoYW5nZSBhY3R1YWxseSBoYXBwZW5lZCwgbm8gcmVhc29uIHRvIGdvIGFueSBmdXJ0aGVyXG4gICAgICAgIGlmICggZGVsdGFZID09PSAwICYmIGRlbHRhWCA9PT0gMCApIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgLy8gTmVlZCB0byBjb252ZXJ0IGxpbmVzIGFuZCBwYWdlcyB0byBwaXhlbHMgaWYgd2UgYXJlbid0IGFscmVhZHkgaW4gcGl4ZWxzXG4gICAgICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBkZWx0YSBtb2RlczpcbiAgICAgICAgLy8gICAqIGRlbHRhTW9kZSAwIGlzIGJ5IHBpeGVscywgbm90aGluZyB0byBkb1xuICAgICAgICAvLyAgICogZGVsdGFNb2RlIDEgaXMgYnkgbGluZXNcbiAgICAgICAgLy8gICAqIGRlbHRhTW9kZSAyIGlzIGJ5IHBhZ2VzXG4gICAgICAgIGlmICggb3JnRXZlbnQuZGVsdGFNb2RlID09PSAxICkge1xuICAgICAgICAgICAgdmFyIGxpbmVIZWlnaHQgPSAkLmRhdGEodGhpcywgJ21vdXNld2hlZWwtbGluZS1oZWlnaHQnKTtcbiAgICAgICAgICAgIGRlbHRhICAqPSBsaW5lSGVpZ2h0O1xuICAgICAgICAgICAgZGVsdGFZICo9IGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBkZWx0YVggKj0gbGluZUhlaWdodDtcbiAgICAgICAgfSBlbHNlIGlmICggb3JnRXZlbnQuZGVsdGFNb2RlID09PSAyICkge1xuICAgICAgICAgICAgdmFyIHBhZ2VIZWlnaHQgPSAkLmRhdGEodGhpcywgJ21vdXNld2hlZWwtcGFnZS1oZWlnaHQnKTtcbiAgICAgICAgICAgIGRlbHRhICAqPSBwYWdlSGVpZ2h0O1xuICAgICAgICAgICAgZGVsdGFZICo9IHBhZ2VIZWlnaHQ7XG4gICAgICAgICAgICBkZWx0YVggKj0gcGFnZUhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0b3JlIGxvd2VzdCBhYnNvbHV0ZSBkZWx0YSB0byBub3JtYWxpemUgdGhlIGRlbHRhIHZhbHVlc1xuICAgICAgICBhYnNEZWx0YSA9IE1hdGgubWF4KCBNYXRoLmFicyhkZWx0YVkpLCBNYXRoLmFicyhkZWx0YVgpICk7XG5cbiAgICAgICAgaWYgKCAhbG93ZXN0RGVsdGEgfHwgYWJzRGVsdGEgPCBsb3dlc3REZWx0YSApIHtcbiAgICAgICAgICAgIGxvd2VzdERlbHRhID0gYWJzRGVsdGE7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCBvbGRlciBk
13345ZWx0YXMgaWYgbmVjZXNzYXJ5XG4gICAgICAgICAgICBpZiAoIHNob3VsZEFkanVzdE9sZERlbHRhcyhvcmdFdmVudCwgYWJzRGVsdGEpICkge1xuICAgICAgICAgICAgICAgIGxvd2VzdERlbHRhIC89IDQwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRqdXN0IG9sZGVyIGRlbHRhcyBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKCBzaG91bGRBZGp1c3RPbGREZWx0YXMob3JnRXZlbnQsIGFic0RlbHRhKSApIHtcbiAgICAgICAgICAgIC8vIERpdmlkZSBhbGwgdGhlIHRoaW5ncyBieSA0MCFcbiAgICAgICAgICAgIGRlbHRhICAvPSA0MDtcbiAgICAgICAgICAgIGRlbHRhWCAvPSA0MDtcbiAgICAgICAgICAgIGRlbHRhWSAvPSA0MDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCBhIHdob2xlLCBub3JtYWxpemVkIHZhbHVlIGZvciB0aGUgZGVsdGFzXG4gICAgICAgIGRlbHRhICA9IE1hdGhbIGRlbHRhICA+PSAxID8gJ2Zsb29yJyA6ICdjZWlsJyBdKGRlbHRhICAvIGxvd2VzdERlbHRhKTtcbiAgICAgICAgZGVsdGFYID0gTWF0aFsgZGVsdGFYID49IDEgPyAnZmxvb3InIDogJ2NlaWwnIF0oZGVsdGFYIC8gbG93ZXN0RGVsdGEpO1xuICAgICAgICBkZWx0YVkgPSBNYXRoWyBkZWx0YVkgPj0gMSA/ICdmbG9vcicgOiAnY2VpbCcgXShkZWx0YVkgLyBsb3dlc3REZWx0YSk7XG5cbiAgICAgICAgLy8gTm9ybWFsaXNlIG9mZnNldFggYW5kIG9mZnNldFkgcHJvcGVydGllc1xuICAgICAgICBpZiAoIHNwZWNpYWwuc2V0dGluZ3Mubm9ybWFsaXplT2Zmc2V0ICYmIHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICkge1xuICAgICAgICAgICAgdmFyIGJvdW5kaW5nUmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBvZmZzZXRYID0gZXZlbnQuY2xpZW50WCAtIGJvdW5kaW5nUmVjdC5sZWZ0O1xuICAgICAgICAgICAgb2Zmc2V0WSA9IGV2ZW50LmNsaWVudFkgLSBib3VuZGluZ1JlY3QudG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIGluZm9ybWF0aW9uIHRvIHRoZSBldmVudCBvYmplY3RcbiAgICAgICAgZXZlbnQuZGVsdGFYID0gZGVsdGFYO1xuICAgICAgICBldmVudC5kZWx0YVkgPSBkZWx0YVk7XG4gICAgICAgIGV2ZW50LmRlbHRhRmFjdG9yID0gbG93ZXN0RGVsdGE7XG4gICAgICAgIGV2ZW50Lm9mZnNldFggPSBvZmZzZXRYO1xuICAgICAgICBldmVudC5vZmZzZXRZID0gb2Zmc2V0WTtcbiAgICAgICAgLy8gR28gYWhlYWQgYW5kIHNldCBkZWx0YU1vZGUgdG8gMCBzaW5jZSB3ZSBjb252ZXJ0ZWQgdG8gcGl4ZWxzXG4gICAgICAgIC8vIEFsdGhvdWdoIHRoaXMgaXMgYSBsaXR0bGUgb2RkIHNpbmNlIHdlIG92ZXJ3cml0ZSB0aGUgZGVsdGFYL1lcbiAgICAgICAgLy8gcHJvcGVydGllcyB3aXRoIG5vcm1hbGl6ZWQgZGVsdGFzLlxuICAgICAgICBldmVudC5kZWx0YU1vZGUgPSAwO1xuXG4gICAgICAgIC8vIEFkZCBldmVudCBhbmQgZGVsdGEgdG8gdGhlIGZyb250IG9mIHRoZSBhcmd1bWVudHNcbiAgICAgICAgYXJncy51bnNoaWZ0KGV2ZW50LCBkZWx0YSwgZGVsdGFYLCBkZWx0YVkpO1xuXG4gICAgICAgIC8vIENsZWFyb3V0IGxvd2VzdERlbHRhIGFmdGVyIHNvbWV0aW1lIHRvIGJldHRlclxuICAgICAgICAvLyBoYW5kbGUgbXVsdGlwbGUgZGV2aWNlIHR5cGVzIHRoYXQgZ2l2ZSBkaWZmZXJlbnRcbiAgICAgICAgLy8gYSBkaWZmZXJlbnQgbG93ZXN0RGVsdGFcbiAgICAgICAgLy8gRXg6IHRyYWNrcGFkID0gMyBhbmQgbW91c2Ugd2hlZWwgPSAxMjBcbiAgICAgICAgaWYgKG51bGxMb3dlc3REZWx0YVRpbWVvdXQpIHsgY2xlYXJUaW1lb3V0KG51bGxMb3dlc3REZWx0YVRpbWVvdXQpOyB9XG4gICAgICAgIG51bGxMb3dlc3REZWx0YVRpbWVvdXQgPSBzZXRUaW1lb3V0KG51bGxMb3dlc3REZWx0YSwgMjAwKTtcblxuICAgICAgICByZXR1cm4gKCQuZXZlbnQuZGlzcGF0Y2ggfHwgJC5ldmVudC5oYW5kbGUpLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG51bGxMb3dlc3REZWx0YSgpIHtcbiAgICAgICAgbG93ZXN0RGVsdGEgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNob3VsZEFkanVzdE9sZERlbHRhcyhvcmdFdmVudCwgYWJzRGVsdGEpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBvbGRlciBldmVudCBhbmQgdGhlIGRlbHRhIGlzIGRpdmlzYWJsZSBieSAxMjAsXG4gICAgICAgIC8vIHRoZW4gd2UgYXJlIGFzc3VtaW5nIHRoYXQgdGhlIGJyb3dzZXIgaXMgdHJlYXRpbmcgdGhpcyBhcyBhblxuICAgICAgICAvLyBvbGRlciBtb3VzZSB3aGVlbCBldmVudCBhbmQgdGhhdCB3ZSBzaG91bGQgZGl2aWRlIHRoZSBkZWx0YXNcbiAgICAgICAgLy8gYnkgNDAgdG8gdHJ5IGFuZCBnZXQgYSBtb3JlIHVzYWJsZSBkZWx0YUZhY3Rvci5cbiAgICAgICAgLy8gU2lkZSBub3RlLCB0aGlzIGFjdHVhbGx5IGltcGFjdHMgdGhlIHJlcG9ydGVkIHNjcm9sbCBkaXN0YW5jZVxuICAgICAgICAvLyBpbiBvbGRlciBicm93c2VycyBhbmQgY2FuIGNhdXNlIHNjcm9sbGluZyB0byBiZSBzbG93ZXIgdGhhbiBuYXRpdmUuXG4gICAgICAgIC8vIFR1cm4gdGhpcyBvZmYgYnkgc2V0dGluZyAkLmV2ZW50LnNwZWNpYWwubW91c2V3aGVlbC5zZXR0aW5ncy5hZGp1c3RPbGREZWx0YXMgdG8gZmFsc2UuXG4gICAgICAgIHJldHVybiBzcGVjaWFsLnNldHRpbmdzLmFkanVzdE9sZERlbHRhcyAmJiBvcmdFdmVudC50eXBlID09PSAnbW91c2V3aGVlbCcgJiYgYWJzRGVsdGEgJSAxMjAgPT09IDA7XG4gICAgfVxuXG59KSk7XG5cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL34vaW1wb3J0cy1sb2FkZXI/ZGVmaW5lPT5mYWxzZSEuLi9+L2pxdWVyeS1tb3VzZXdoZWVsL2pxdWVyeS5tb3VzZXdoZWVsLmpzXG4vLyBtb2R1bGUgaWQgPSA3MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBzdGF0cy5qcyAtIGh0dHA6Ly9naXRodWIuY29tL21yZG9vYi9zdGF0cy5qc1xuKGZ1bmN0aW9uKGYsZSl7XCJvYmplY3RcIj09PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6Zi5TdGF0cz1lKCl9KSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGEpe2MuYXBwZW5kQ2hpbGQoYS5kb20pO3JldHVybiBhfWZ1bmN0aW9uIHUoYSl7Zm9yKHZhciBkPTA7ZDxjLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5jaGlsZHJlbltkXS5zdHlsZS5kaXNwbGF5PWQ9PT1hP1wiYmxvY2tcIjpcIm5vbmVcIjtsPWF9dmFyIGw9MCxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Yy5zdHlsZS5jc3NUZXh0PVwicG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6MC45O3otaW5kZXg6MTAwMDBcIjtjLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKTtcbnUoKytsJWMuY2hpbGRyZW4ubGVuZ3RoKX0sITEpO3ZhciBrPShwZXJmb3JtYW5jZXx8RGF0ZSkubm93KCksZz1rLGE9MCxyPWUobmV3IGYuUGFuZWwoXCJGUFNcIixcIiMwZmZcIixcIiMwMDJcIikpLGg9ZShuZXcgZi5QYW5lbChcIk1TXCIsXCIjMGYwXCIsXCIjMDIwXCIpKTtpZihzZWxmLnBlcmZvcm1hbmNlJiZzZWxmLnBlcmZvcm1hbmNlLm1lbW9yeSl2YXIgdD1lKG5ldyBmLlBhbmVsKFwiTUJcIixcIiNmMDhcIixcIiMyMDFcIikpO3UoMCk7cmV0dXJue1JFVklTSU9OOjE2LGRvbTpjLGFkZFBhbmVsOmUsc2hvd1BhbmVsOnUsYmVnaW46ZnVuY3Rpb24oKXtrPShwZXJmb3JtYW5jZXx8RGF0ZSkubm93KCl9LG
13345VuZDpmdW5jdGlvbigpe2ErKzt2YXIgYz0ocGVyZm9ybWFuY2V8fERhdGUpLm5vdygpO2gudXBkYXRlKGMtaywyMDApO2lmKGM+ZysxRTMmJihyLnVwZGF0ZSgxRTMqYS8oYy1nKSwxMDApLGc9YyxhPTAsdCkpe3ZhciBkPXBlcmZvcm1hbmNlLm1lbW9yeTt0LnVwZGF0ZShkLnVzZWRKU0hlYXBTaXplL1xuMTA0ODU3NixkLmpzSGVhcFNpemVMaW1pdC8xMDQ4NTc2KX1yZXR1cm4gY30sdXBkYXRlOmZ1bmN0aW9uKCl7az10aGlzLmVuZCgpfSxkb21FbGVtZW50OmMsc2V0TW9kZTp1fX07Zi5QYW5lbD1mdW5jdGlvbihlLGYsbCl7dmFyIGM9SW5maW5pdHksaz0wLGc9TWF0aC5yb3VuZCxhPWcod2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpLHI9ODAqYSxoPTQ4KmEsdD0zKmEsdj0yKmEsZD0zKmEsbT0xNSphLG49NzQqYSxwPTMwKmEscT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO3Eud2lkdGg9cjtxLmhlaWdodD1oO3Euc3R5bGUuY3NzVGV4dD1cIndpZHRoOjgwcHg7aGVpZ2h0OjQ4cHhcIjt2YXIgYj1xLmdldENvbnRleHQoXCIyZFwiKTtiLmZvbnQ9XCJib2xkIFwiKzkqYStcInB4IEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmXCI7Yi50ZXh0QmFzZWxpbmU9XCJ0b3BcIjtiLmZpbGxTdHlsZT1sO2IuZmlsbFJlY3QoMCwwLHIsaCk7Yi5maWxsU3R5bGU9ZjtiLmZpbGxUZXh0KGUsdCx2KTtcbmIuZmlsbFJlY3QoZCxtLG4scCk7Yi5maWxsU3R5bGU9bDtiLmdsb2JhbEFscGhhPS45O2IuZmlsbFJlY3QoZCxtLG4scCk7cmV0dXJue2RvbTpxLHVwZGF0ZTpmdW5jdGlvbihoLHcpe2M9TWF0aC5taW4oYyxoKTtrPU1hdGgubWF4KGssaCk7Yi5maWxsU3R5bGU9bDtiLmdsb2JhbEFscGhhPTE7Yi5maWxsUmVjdCgwLDAscixtKTtiLmZpbGxTdHlsZT1mO2IuZmlsbFRleHQoZyhoKStcIiBcIitlK1wiIChcIitnKGMpK1wiLVwiK2coaykrXCIpXCIsdCx2KTtiLmRyYXdJbWFnZShxLGQrYSxtLG4tYSxwLGQsbSxuLWEscCk7Yi5maWxsUmVjdChkK24tYSxtLGEscCk7Yi5maWxsU3R5bGU9bDtiLmdsb2JhbEFscGhhPS45O2IuZmlsbFJlY3QoZCtuLWEsbSxhLGcoKDEtaC93KSpwKSl9fX07cmV0dXJuIGZ9KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4uL34vc3RhdHMuanMvYnVpbGQvc3RhdHMubWluLmpzXG4vLyBtb2R1bGUgaWQgPSA3MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.