PageSourceSearch

https://onepunchman-anime.net/js/common-091e2f1397.js

js onepunchman-anime.net collected 2026-09-24 18:19:40 UTC 180,682 bytes, 2,208 lines download raw bytes

1/******/ (function() { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
vendor: 1,957 bytes, lines 4-59
4/***/ "./node_modules/@sygnas/jp-social-share/dist/es6/_virtual/_rollupPluginBabelHelpers.js":
5/*!*********************************************************************************************!*\
6  !*** ./node_modules/@sygnas/jp-social-share/dist/es6/_virtual/_rollupPluginBabelHelpers.js ***!
7  \*********************************************************************************************/
8/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
9
10"use strict";
11__webpack_require__.r(__webpack_exports__);
12/* harmony export */ __webpack_require__.d(__webpack_exports__, {
13/* harmony export */   "classCallCheck": function() { return /* binding */ _classCallCheck; },
14/* harmony export */   "createClass": function() { return /* binding */ _createClass; },
15/* harmony export */   "defineProperty": function() { return /* binding */ _defineProperty; }
16/* harmony export */ });
17function _classCallCheck(instance, Constructor) {
18  if (!(instance instanceof Constructor)) {
19    throw new TypeError("Cannot call a class as a function");
20  }
21}
22
23function _defineProperties(target, props) {
24  for (var i = 0; i < props.length; i++) {
25    var descriptor = props[i];
26    descriptor.enumerable = descriptor.enumerable || false;
27    descriptor.configurable = true;
28    if ("value" in descriptor) descriptor.writable = true;
29    Object.defineProperty(target, descriptor.key, descriptor);
30  }
31}
32
33function _createClass(Constructor, protoProps, staticProps) {
34  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
35  if (staticProps) _defineProperties(Constructor, staticProps);
36  return Constructor;
37}
38
39function _defineProperty(obj, key, value) {
40  if (key in obj) {
41    Object.defineProperty(obj, key, {
42      value: value,
43      enumerable: true,
44      configurable: true,
45      writable: true
46    });
47  } else {
48    obj[key] = value;
49  }
50
51  return obj;
52}
53
54
55//# sourceMappingURL=_rollupPluginBabelHelpers.js.map
56
57
58/***/ }),
59
vendor: 8,258 bytes, lines 60-274
60/***/ "./node_modules/@sygnas/jp-social-share/dist/es6/index.js":
61/*!****************************************************************!*\
62  !*** ./node_modules/@sygnas/jp-social-share/dist/es6/index.js ***!
63  \****************************************************************/
64/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
65
66"use strict";
67__webpack_require__.r(__webpack_exports__);
68/* harmony export */ __webpack_require__.d(__webpack_exports__, {
69/* harmony export */   "default": function() { return /* binding */ JpSocialShare; }
70/* harmony export */ });
71/* harmony import */ var _virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_virtual/_rollupPluginBabelHelpers.js */ "./node_modules/@sygnas/jp-social-share/dist/es6/_virtual/_rollupPluginBabelHelpers.js");
72
73
74/**
75 * 日本向けソーシャルシェアボタン
76 *
77 * @author   Hiroshi Fukuda <[email protected]>
78 * @license  MIT
79 */
80var JpSocialShare = /*#__PURE__*/function () {
81  function JpSocialShare() {
82    (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__.classCallCheck)(this, JpSocialShare);
83  }
84
85  (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__.createClass)(JpSocialShare, null, [{
86    key: "setShareButton",
87    value: // サービス名識別子
88    ////////////////////////
89    ////////////////////////
90
91    /**
92     * シェアボタンのリンクを設定する
93     * @param {String} target 対象ボタンのセレクタ
94     * @param {Object} option 新規ウィンドウのパラメータ(defaults参照)
95     */
96    function setShareButton(target) {
97      var _this = this;
98
99      var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
100      // 設定のマージ
101      this.opt = Object.assign(this.defaults, option); // クリックイベントを設定
102
103      this.getNodeArray(document.querySelectorAll(target)).forEach(function (elm) {
104        elm.addEventListener('click', function (ev) {
105          var elm = ev.currentTarget;
106
107          _this.openShareWindowWithElement(elm);
108
109          ev.preventDefault();
110        });
111      });
112    }
113    /**
114     * エレメントから情報を取得してシェア用ウィンドウを開く
115     */
116
117  }, {
118    key: "openShareWindowWithElement",
119    value: function openShareWindowWithElement(elm) {
120      // エレメントからパラメータを取得
121      var service = elm.getAttribute('data-share-service');
122      var url = elm.getAttribute('data-share-url') || '';
123      var message = elm.getAttribute('data-share-message') || document.title;
124      var account = elm.getAttribute('data-share-account') || '';
125      var follow = elm.getAttribute('data-share-follow') || ''; // シェア用ウィンドウを開く
126
127      this.openShareWindow(service, url, message, account, follow);
128    }
129    /**
130     * シェア用ウィンドウを開く
131     * @param service {String} ソーシャルサービス識別子
132     * @param url {String} シェアURL
133     * @param message {String} メッセージ本文
134     * @param account {String} ツイートに付けるRepleyアカウント
135     * @param follow {String} ツイート後に表示するフォロー候補アカウント
136     */
137
138  }, {
139    key: "openShareWindow",
140    value: function openShareWindow(service) {
141      var url = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
142      var message = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
143      var account = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
144      var follow = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
145
146      // 存在しないサービスだったらエラー
147      if (this.opt.services && Object.keys(this.opt.services).indexOf(service) === -1) {
148        console.log("".concat(service, " is not supported."));
149        return;
150      } // テンプレートからコンバート
151
152
153      var openUrl = this.convertOpenUrl(service, url, message, account, follow); // // LINEはアプリに飛ばす。それ以外はウィンドウを開く
154      // if (service === this.SERVICES.LINE) {
155      //   window.location.href = openUrl;
156      // } else if (this.opt.window) {
157
158      if (this.opt.window) {
159        var windowOption = this.getWindowOption(this.opt.window);
160        window.open(openUrl, "share_".concat(service), windowOption);
161      } else {
162        console.log('Window option is not defined.');
163        return;
164      }
165    } ////////////////////////
166    ////////////////////////
167
168    /**
169     * サービス毎のURLを取得
170     * パラメータによっては加工がされる
171     * @param service {String} ソーシャルサービス識別子
172     * @param url {String} シェアURL
173     * @param message {String} メッセージ本文
174     * @param account {String} ツイートに付けるRepleyアカウント
175     * @param follow {String} ツイート後に表示するフォロー候補アカウント
176     * @return {String} シェア窓オープンURL
177     */
178
179  }, {
180    key: "convertOpenUrl",
181    value: function convertOpenUrl(service) {
182      var url = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
183      var message = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
184      var account = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
185      var follow = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
186      var eu = encodeURIComponent;
187      var shareUrl = url || location.href;
188      var openUrl = this.opt.services ? this.opt.services[service] : "";
189
190      if (!openUrl) {
191        console.log("".concat(service, " is not supported."));
192        return "";
193      } // Twitterだけパラメータの内容によってURLが変わる
194
195
196      if (service === this.SERVICES.TWITTER) {
197        if (!account) openUrl = openUrl.replace("&via={{ACCOUNT}}", "");
198        if (!follow) openUrl = openUrl.replace("&related={{FOLLOW}}", "");
199      }
200
201      openUrl = openUrl.replace("{{ACCOUNT}}", eu(account));
202      openUrl = openUrl.replace("{{FOLLOW}}", eu(follow));
203      openUrl = openUrl.replace("{{MESSAGE}}", eu(message));
204      openUrl = openUrl.replace("{{URL}}", eu(shareUrl));
205      return openUrl;
206    }
207    /**
208     * NodeListをArrayとして取り出す(IE対策)
209     */
210
211  }, {
212    key: "getNodeArray",
213    value: function getNodeArray(nodeList) {
214      return Array.prototype.slice.call(nodeList, 0);
215    }
216    /**
217     * Windowパラメータ作成
218     * @param opt {Object} ウィンドウパラメータ
219     * @return {String} 新規ウィンドウのパラメータ文字列
220     */
221
222  }, {
223    key: "getWindowOption",
224    value: function getWindowOption(opt) {
225      var items = [];
226      Object.keys(opt).forEach(function (key) {
227        items.push("".concat(key, "=").concat(opt[key]));
228      });
229      return items.join(",");
230    }
231  }]);
232
233  return JpSocialShare;
234}();
235
236(0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__.defineProperty)(JpSocialShare, "SERVICES", {
237  TWITTER: 'twitter',
238  FACEBOOK: 'facebook',
239  LINE: 'line',
240  FEEDLY: 'feedly',
241  POCKET: 'pocket',
242  HATEBU: 'hatebu'
243});
244
245(0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__.defineProperty)(JpSocialShare, "opt", void 0);
246
247(0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__.defineProperty)(JpSocialShare, "defaults", {
248  // window.open() のオプション
249  window: {
250    width: 550,
251    height: 450,
252    personalbar: 0,
253    toolbar: 0,
254    scrollbars: 1,
255    resizable: 1
256  },
257  // シェア用URLのテンプレート
258  services: {
259    twitter: 'http://twitter.com/share?url={{URL}}&text={{MESSAGE}}&via={{ACCOUNT}}&related={{FOLLOW}}',
260    facebook: 'http://www.facebook.com/share.php?u={{URL}}',
261    // line: 'line://msg/text/{{MESSAGE}} {{URL}}',
262    line: 'https://social-plugins.line.me/lineit/share?url={{URL}}',
263    feedly: 'http://feedly.com/i/subscription/feed/{{URL}}',
264    pocket: 'http://getpocket.com/edit?url={{URL}}',
265    hatebu: '//b.hatena.ne.jp/add?mode=confirm&url={{URL}}&title={{MESSAGE}}'
266  }
267});
268
269
270//# sourceMappingURL=index.js.map
271
272
273/***/ }),
274
vendor: 19,823 bytes, lines 275-933
275/***/ "./node_modules/@sygnas/scroll-amount/dist/scroll-amount.es.js":
276/*!*********************************************************************!*\
277  !*** ./node_modules/@sygnas/scroll-amount/dist/scroll-amount.es.js ***!
278  \*********************************************************************/
279/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
280
281"use strict";
282__webpack_require__.r(__webpack_exports__);
283/* harmony import */ var _sygnas_throttle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sygnas/throttle */ "./node_modules/@sygnas/throttle/dist/throttle.es.js");
284
285
286function unwrapExports (x) {
287	return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
288}
289
290function createCommonjsModule(fn, module) {
291	return module = { exports: {} }, fn(module, module.exports), module.exports;
292}
293
294var _global = createCommonjsModule(function (module) {
295// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
296var global = module.exports = typeof window != 'undefined' && window.Math == Math
297  ? window : typeof self != 'undefined' && self.Math == Math ? self
298  // eslint-disable-next-line no-new-func
299  : Function('return this')();
300if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
301});
302
303var _core = createCommonjsModule(function (module) {
304var core = module.exports = { version: '2.5.3' };
305if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
306});
307
308var _core_1 = _core.version;
309
310var _aFunction = function (it) {
311  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
312  return it;
313};
314
315// optional / simple context binding
316
317var _ctx = function (fn, that, length) {
318  _aFunction(fn);
319  if (that === undefined) return fn;
320  switch (length) {
321    case 1: return function (a) {
322      return fn.call(that, a);
323    };
324    case 2: return function (a, b) {
325      return fn.call(that, a, b);
326    };
327    case 3: return function (a, b, c) {
328      return fn.call(that, a, b, c);
329    };
330  }
331  return function (/* ...args */) {
332    return fn.apply(that, arguments);
333  };
334};
335
336var _isObject = function (it) {
337  return typeof it === 'object' ? it !== null : typeof it === 'function';
338};
339
340var _anObject = function (it) {
341  if (!_isObject(it)) throw TypeError(it + ' is not an object!');
342  return it;
343};
344
345var _fails = function (exec) {
346  try {
347    return !!exec();
348  } catch (e) {
349    return true;
350  }
351};
352
353// Thank's IE8 for his funny defineProperty
354var _descriptors = !_fails(function () {
355  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
356});
357
358var document$1 = _global.document;
359// typeof document.createElement is 'object' in old IE
360var is = _isObject(document$1) && _isObject(document$1.createElement);
361var _domCreate = function (it) {
362  return is ? document$1.createElement(it) : {};
363};
364
365var _ie8DomDefine = !_descriptors && !_fails(function () {
366  return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;
367});
368
369// 7.1.1 ToPrimitive(input [, PreferredType])
370
371// instead of the ES6 spec version, we didn't implement @@toPrimitive case
372// and the second argument - flag - preferred type is a string
373var _toPrimitive = function (it, S) {
374  if (!_isObject(it)) return it;
375  var fn, val;
376  if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
377  if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;
378  if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
379  throw TypeError("Can't convert object to primitive value");
380};
381
382var dP = Object.defineProperty;
383
384var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
385  _anObject(O);
386  P = _toPrimitive(P, true);
387  _anObject(Attributes);
388  if (_ie8DomDefine) try {
389    return dP(O, P, Attributes);
390  } catch (e) { /* empty */ }
391  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
392  if ('value' in Attributes) O[P] = Attributes.value;
393  return O;
394};
395
396var _objectDp = {
397	f: f
398};
399
400var _propertyDesc = function (bitmap, value) {
401  return {
402    enumerable: !(bitmap & 1),
403    configurable: !(bitmap & 2),
404    writable: !(bitmap & 4),
405    value: value
406  };
407};
408
409var _hide = _descriptors ? function (object, key, value) {
410  return _objectDp.f(object, key, _propertyDesc(1, value));
411} : function (object, key, value) {
412  object[key] = value;
413  return object;
414};
415
416var PROTOTYPE = 'prototype';
417
418var $export = function (type, name, source) {
419  var IS_FORCED = type & $export.F;
420  var IS_GLOBAL = type & $export.G;
421  var IS_STATIC = type & $export.S;
422  var IS_PROTO = type & $export.P;
423  var IS_BIND = type & $export.B;
424  var IS_WRAP = type & $export.W;
425  var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});
426  var expProto = exports[PROTOTYPE];
427  var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] : (_global[name] || {})[PROTOTYPE];
428  var key, own, out;
429  if (IS_GLOBAL) source = name;
430  for (key in source) {
431    // contains in native
432    own = !IS_FORCED && target && target[key] !== undefined;
433    if (own && key in exports) continue;
434    // export native or passed
435    out = own ? target[key] : source[key];
436    // prevent global pollution for namespaces
437    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
438    // bind timers to global for call from export context
439    : IS_BIND && own ? _ctx(out, _global)
440    // wrap global constructors for prevent change them in library
441    : IS_WRAP && target[key] == out ? (function (C) {
442      var F = function (a, b, c) {
443        if (this instanceof C) {
444          switch (arguments.length) {
445            case 0: return new C();
446            case 1: return new C(a);
447            case 2: return new C(a, b);
448          } return new C(a, b, c);
449        } return C.apply(this, arguments);
450      };
451      F[PROTOTYPE] = C[PROTOTYPE];
452      return F;
453    // make static versions for prototype methods
454    })(out) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;
455    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
456    if (IS_PROTO) {
457      (exports.virtual || (exports.virtual = {}))[key] = out;
458      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
459      if (type & $export.R && expProto && !expProto[key]) _hide(expProto, key, out);
460    }
461  }
462};
463// type bitmap
464$export.F = 1;   // forced
465$export.G = 2;   // global
466$export.S = 4;   // static
467$export.P = 8;   // proto
468$export.B = 16;  // bind
469$export.W = 32;  // wrap
470$export.U = 64;  // safe
471$export.R = 128; // real proto method for `library`
472var _export = $export;
473
474var hasOwnProperty = {}.hasOwnProperty;
475var _has = function (it, key) {
476  return hasOwnProperty.call(it, key);
477};
478
479var toString = {}.toString;
480
481var _cof = function (it) {
482  return toString.call(it).slice(8, -1);
483};
484
485// fallback for non-array-like ES3 and non-enumerable old V8 strings
486
487// eslint-disable-next-line no-prototype-builtins
488var _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
489  return _cof(it) == 'String' ? it.split('') : Object(it);
490};
491
492// 7.2.1 RequireObjectCoercible(argument)
493var _defined = function (it) {
494  if (it == undefined) throw TypeError("Can't call method on  " + it);
495  return it;
496};
497
498// to indexed object, toObject with fallback for non-array-like ES3 strings
499
500
501var _toIobject = function (it) {
502  return _iobject(_defined(it));
503};
504
505// 7.1.4 ToInteger
506var ceil = Math.ceil;
507var floor = Math.floor;
508var _toInteger = function (it) {
509  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
510};
511
512// 7.1.15 ToLength
513
514var min = Math.min;
515var _toLength = function (it) {
516  return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
517};
518
519var max = Math.max;
520var min$1 = Math.min;
521var _toAbsoluteIndex = function (index, length) {
522  index = _toInteger(index);
523  return index < 0 ? max(index + length, 0) : min$1(index, length);
524};
525
526// false -> Array#indexOf
527// true  -> Array#includes
528
529
530
531var _arrayIncludes = function (IS_INCLUDES) {
532  return function ($this, el, fromIndex) {
533    var O = _toIobject($this);
534    var length = _toLength(O.length);
535    var index = _toAbsoluteIndex(fromIndex, length);
536    var value;
537    // Array#includes uses SameValueZero equality algorithm
538    // eslint-disable-next-line no-self-compare
539    if (IS_INCLUDES && el != el) while (length > index) {
540      value = O[index++];
541      // eslint-disable-next-line no-self-compare
542      if (value != value) return true;
543    // Array#indexOf ignores holes, Array#includes - not
544    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
545      if (O[index] === el) return IS_INCLUDES || index || 0;
546    } return !IS_INCLUDES && -1;
547  };
548};
549
550var SHARED = '__core-js_shared__';
551var store = _global[SHARED] || (_global[SHARED] = {});
552var _shared = function (key) {
553  return store[key] || (store[key] = {});
554};
555
556var id = 0;
557var px = Math.random();
558var _uid = function (key) {
559  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
560};
561
562var shared = _shared('keys');
563
564var _sharedKey = function (key) {
565  return shared[key] || (shared[key] = _uid(key));
566};
567
568var arrayIndexOf = _arrayIncludes(false);
569var IE_PROTO = _sharedKey('IE_PROTO');
570
571var _objectKeysInternal = function (object, names) {
572  var O = _toIobject(object);
573  var i = 0;
574  var result = [];
575  var key;
576  for (key in O) if (key != IE_PROTO) _has(O, key) && result.push(key);
577  // Don't enum bug & hidden keys
578  while (names.length > i) if (_has(O, key = names[i++])) {
579    ~arrayIndexOf(result, key) || result.push(key);
580  }
581  return result;
582};
583
584// IE 8- don't enum bug keys
585var _enumBugKeys = (
586  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
587).split(',');
588
589// 19.1.2.14 / 15.2.3.14 Object.keys(O)
590
591
592
593var _objectKeys = Object.keys || function keys(O) {
594  return _objectKeysInternal(O, _enumBugKeys);
595};
596
597var f$1 = Object.getOwnPropertySymbols;
598
599var _objectGops = {
600	f: f$1
601};
602
603var f$2 = {}.propertyIsEnumerable;
604
605var _objectPie = {
606	f: f$2
607};
608
609// 7.1.13 ToObject(argument)
610
611var _toObject = function (it) {
612  return Object(_defined(it));
613};
614
615// 19.1.2.1 Object.assign(target, source, ...)
616
617
618
619
620
621var $assign = Object.assign;
622
623// should work with symbols and should have deterministic property order (V8 bug)
624var _objectAssign = !$assign || _fails(function () {
625  var A = {};
626  var B = {};
627  // eslint-disable-next-line no-undef
628  var S = Symbol();
629  var K = 'abcdefghijklmnopqrst';
630  A[S] = 7;
631  K.split('').forEach(function (k) { B[k] = k; });
632  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
633}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
634  var T = _toObject(target);
635  var aLen = arguments.length;
636  var index = 1;
637  var getSymbols = _objectGops.f;
638  var isEnum = _objectPie.f;
639  while (aLen > index) {
640    var S = _iobject(arguments[index++]);
641    var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : _objectKeys(S);
642    var length = keys.length;
643    var j = 0;
644    var key;
645    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
646  } return T;
647} : $assign;
648
649// 19.1.3.1 Object.assign(target, source)
650
651
652_export(_export.S + _export.F, 'Object', { assign: _objectAssign });
653
654var assign = _core.Object.assign;
655
656var assign$2 = createCommonjsModule(function (module) {
657module.exports = { "default": assign, __esModule: true };
658});
659
660var _Object$assign = unwrapExports(assign$2);
661
662var classCallCheck = createCommonjsModule(function (module, exports) {
663exports.__esModule = true;
664
665exports.default = function (instance, Constructor) {
666  if (!(instance instanceof Constructor)) {
667    throw new TypeError("Cannot call a class as a function");
668  }
669};
670});
671
672var _classCallCheck = unwrapExports(classCallCheck);
673
674// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
675_export(_export.S + _export.F * !_descriptors, 'Object', { defineProperty: _objectDp.f });
676
677var $Object = _core.Object;
678var defineProperty = function defineProperty(it, key, desc) {
679  return $Object.defineProperty(it, key, desc);
680};
681
682var defineProperty$2 = createCommonjsModule(function (module) {
683module.exports = { "default": defineProperty, __esModule: true };
684});
685
686unwrapExports(defineProperty$2);
687
688var createClass = createCommonjsModule(function (module, exports) {
689exports.__esModule = true;
690
691
692
693var _defineProperty2 = _interopRequireDefault(defineProperty$2);
694
695function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
696
697exports.default = function () {
698  function defineProperties(target, props) {
699    for (var i = 0; i < props.length; i++) {
700      var descriptor = props[i];
701      descriptor.enumerable = descriptor.enumerable || false;
702      descriptor.configurable = true;
703      if ("value" in descriptor) descriptor.writable = true;
704      (0, _defineProperty2.default)(target, descriptor.key, descriptor);
705    }
706  }
707
708  return function (Constructor, protoProps, staticProps) {
709    if (protoProps) defineProperties(Constructor.prototype, protoProps);
710    if (staticProps) defineProperties(Constructor, staticProps);
711    return Constructor;
712  };
713}();
714});
715
716var _createClass = unwrapExports(createClass);
717
718/**
719 * Add scrolling state(top / not-top / bottom / not-bottom)
720 *
721 * @author   Hiroshi Fukuda <[email protected]>
722 * @license  MIT
723 */
724
725var ATTR_NAME = 'data-scroll-amount';
726var ATTR_TOP = 'top';
727var ATTR_BOTTOM = 'bottom';
728var ATTR_NOT_TOP = 'not-top';
729var ATTR_NOT_BOTTOM = 'not-bottom';
730
731var _class = function () {
732
733    /**
734     * コンストラクタ
735     * @param {string} target DOM Selector
736     * @param {object} options
737     */
738    function _class(target) {
739        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
740
741        _classCallCheck(this, _class);
742
743        var defaults = {
744            // 最上部のオフセット
745            offset_top: 70,
746            // 最下部のオフセット
747            offset_bottom: 70,
748            // 最上部にスクロールした時に実行
749            onTop: function onTop() {},
750
751            // 最上部から離れた時に実行
752            onNotTop: function onNotTop() {},
753
754            // 最下部にスクロールした時に実行
755            onBottom: function onBottom() {},
756
757            // 最下部から離れた時に実行
758            onNotBottom: function onNotBottom() {},
759
760            // 特定エレメントのスクロールを対象にしたい
761            element: ''
762        };
763
764        this.opt = _Object$assign(defaults, options);
765        this.target = document.querySelectorAll(target);
766        this.win_height = null; // ブラウザウィンドウの高さ
767        this.interval_id = null; // スクロールイベントのインターバルチェック
768        this.results = []; // data属性に書き出す内容
769        this.last_results_str = null;
770        this.is_started = false; // 開始した
771        this.is_top = false; // 一番上にスクロールした
772        this.is_bottom = false; // 一番下にスクロールした
773        // スクロール量を調べるエレメント
774        this.element = this.opt.element ? document.querySelector(this.opt.element) : null;
775
776        this.ev_resize = null;
777        this.ev_scroll = null;
778
779        // 開始
780        this.start();
781    }
782
783    /** *******************
784     * public
785     */
786
787    /**
788    * スクロール検知処理を開始
789    */
790
791
792    _createClass(_class, [{
793        key: 'start',
794        value: function start() {
795            var _this = this;
796
797            // すでに開始していたら無視
798            if (this.is_started) return;
799
800            // イベントオブジェクト
801            this.ev_resize = (0,_sygnas_throttle__WEBPACK_IMPORTED_MODULE_0__["default"])(50, this._resize, this);
802            this.ev_scroll = (0,_sygnas_throttle__WEBPACK_IMPORTED_MODULE_0__["default"])(100, this._scroll, this);
803
804            // リサイズイベントでドキュメント高さチェック
805            this._resize();
806            window.addEventListener('resize', this.ev_resize);
807
808            // スクロールイベント
809            this._scroll();
810            this.is_started = true;
811            window.addEventListener('scroll', this.ev_scroll);
812
813            // 0.5秒間毎にチェックも入れる
814            this.interval_id = setInterval(function () {
815                _this._scroll();
816            }, 500);
817        }
818
819        /**
820        * スクロール検知処理を停止
821        */
822
823    }, {
824        key: 'stop',
825        value: function stop() {
826            window.removeEventListener('resize', this.ev_resize);
827            window.removeEventListener('scroll', this.ev_scroll);
828            clearInterval(this.interval_id);
829        }
830
831        /** *******************
832         * private
833         */
834
835        /**
836        * スクロール処理
837        */
838
839    }, {
840        key: '_scroll',
841        value: function _scroll() {
842            var scroll_top = this.element ? this.element.scrollTop : window.pageYOffset;
843
844            // 初期化
845            this.results = [];
846
847            // 位置イベントのチェック
848            this._check_top_and_bottom(scroll_top);
849
850            // 属性を付与
851            this._set_attribute();
852        }
853
854        /**
855         * 属性を付与
856         */
857
858    }, {
859        key: '_set_attribute',
860        value: function _set_attribute() {
861            var results_str = this.results.join(' ');
862
863            // 結果を data属性に反映する
864            // 前回と同じなら反映しない
865            if (results_str !== this.last_results_str) {
866                this.last_results_str = results_str;
867                get_node_array(this.target).forEach(function (target) {
868                    target.setAttribute(ATTR_NAME, results_str);
869                });
870            }
871        }
872
873        /**
874        * 最上部か最下部かのチェック
875        */
876
877    }, {
878        key: '_check_top_and_bottom',
879        value: function _check_top_and_bottom(scroll_top) {
880            var opt = this.opt;
881            var doc_height = this.element ? this.element.scrollHeight : document.documentElement.scrollHeight;
882            var scroll_bottom = doc_height - this.win_height;
883
884            // 最上部か
885            if (scroll_top <= opt.offset_top) {
886                // ページ最上部
887                if (!this.is_top) opt.onTop();
888                this.is_top = true;
889                this.results.push(ATTR_TOP);
890            } else {
891                // 最上部から離れた
892                if (this.is_top) opt.onNotTop();
893                this.is_top = false;
894                this.results.push(ATTR_NOT_TOP);
895            }
896
897            // 最下部か
898            if (scroll_top >= scroll_bottom - opt.offset_bottom) {
899                // ページ最下部
900                if (!this.is_bottom) opt.onBottom();
901                this.is_bottom = true;
902                this.results.push(ATTR_BOTTOM);
903            } else {
904                // 最下部から離れた
905                if (this.is_bottom) opt.onNotBottom();
906                this.is_bottom = false;
907                this.results.push(ATTR_NOT_BOTTOM);
908            }
909        }
910
911        /**
912        * ウィンドウをリサイズしたら高さなどをチェック
913        */
914
915    }, {
916        key: '_resize',
917        value: function _resize() {
918            this.win_height = this.element ? this.element.clientHeight : window.window.innerHeight;
919        }
920    }]);
921
922    return _class;
923}();
924
925function get_node_array(node_list) {
926    return Array.prototype.slice.call(node_list, 0);
927}
928
929/* harmony default export */ __webpack_exports__["default"] = (_class);
930
931
932/***/ }),
933
vendor: 1,949 bytes, lines 934-989
934/***/ "./node_modules/@sygnas/scroll-inview/dist/es6/_virtual/_rollupPluginBabelHelpers.js":
935/*!*******************************************************************************************!*\
936  !*** ./node_modules/@sygnas/scroll-inview/dist/es6/_virtual/_rollupPluginBabelHelpers.js ***!
937  \*******************************************************************************************/
938/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
939
940"use strict";
941__webpack_require__.r(__webpack_exports__);
942/* harmony export */ __webpack_require__.d(__webpack_exports__, {
943/* harmony export */   "classCallCheck": function() { return /* binding */ _classCallCheck; },
944/* harmony export */   "createClass": function() { return /* binding */ _createClass; },
945/* harmony export */   "defineProperty": function() { return /* binding */ _defineProperty; }
946/* harmony export */ });
947function _classCallCheck(instance, Constructor) {
948  if (!(instance instanceof Constructor)) {
949    throw new TypeError("Cannot call a class as a function");
950  }
951}
952
953function _defineProperties(target, props) {
954  for (var i = 0; i < props.length; i++) {
955    var descriptor = props[i];
956    descriptor.enumerable = descriptor.enumerable || false;
957    descriptor.configurable = true;
958    if ("value" in descriptor) descriptor.writable = true;
959    Object.defineProperty(target, descriptor.key, descriptor);
960  }
961}
962
963function _createClass(Constructor, protoProps, staticProps) {
964  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
965  if (staticProps) _defineProperties(Constructor, staticProps);
966  return Constructor;
967}
968
969function _defineProperty(obj, key, value) {
970  if (key in obj) {
971    Object.defineProperty(obj, key, {
972      value: value,
973      enumerable: true,
974      configurable: true,
975      writable: true
976    });
977  } else {
978    obj[key] = value;
979  }
980
981  return obj;
982}
983
984
985//# sourceMappingURL=_rollupPluginBabelHelpers.js.map
986
987
988/***/ }),
989
vendor: 4,587 bytes, lines 990-1127
990/***/ "./node_modules/@sygnas/scroll-inview/dist/es6/index.js":
991/*!**************************************************************!*\
992  !*** ./node_modules/@sygnas/scroll-inview/dist/es6/index.js ***!
993  \**************************************************************/
994/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
995
996"use strict";
997__webpack_require__.r(__webpack_exports__);
998/* harmony export */ __webpack_require__.d(__webpack_exports__, {
999/* harmony export */   "default": function() { return /* binding */ _default; }
1000/* harmony export */ });
1001/* harmony import */ var _virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_virtual/_rollupPluginBabelHelpers.js */ "./node_modules/@sygnas/scroll-inview/dist/es6/_virtual/_rollupPluginBabelHelpers.js");
1002
1003
1004/**
1005 * Scroll in viewport add data attribute
1006 * スクロールしてビューポートに入ったらdata属性を与える
1007 *
1008 * @author   Hiroshi Fukuda <[email protected]>
1009 * @license  MIT
1010 */
1011var ATTR_INVIEW = 'data-inview';
1012var ATTR_ROOT = 'data-inview-root';
1013var ATTR_MARGIN = 'data-inview-rootMargin';
1014var ATTR_THRESHOLD = 'data-inview-threshold';
1015var DEFAULT = {
1016  root: null,
1017  rootMargin: '0px',
1018  threshold: 0
1019};
1020/**
1021 * in view controller
1022 */
1023
1024var _default = /*#__PURE__*/function () {
1025  /**
1026   * コンストラクタ
1027   * ターゲット一覧を精査して、 data-inview-root、data-inview-rootMargin、data-inview-threshold が設定されていないか確認する。
1028   * 上記属性毎に observer を作成する。
1029   */
1030  function _default(target) {
1031    var _this = this;
1032
1033    var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1034
1035    (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__.classCallCheck)(this, _default);
1036
1037    (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__.defineProperty)(this, "onInviewFunc", undefined);
1038
1039    (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__.defineProperty)(this, "targetList", void 0);
1040
1041    (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__.defineProperty)(this, "opt", void 0);
1042
1043    this.targetList = {};
1044    this.opt = Object.assign(DEFAULT, option);
1045    this.onInviewFunc = undefined;
1046    document.querySelectorAll(target).forEach(function (target) {
1047      _this.initTargetList(target);
1048    });
1049  }
1050  /**
1051   * ターゲットとオプションの管理リストを作成
1052   */
1053
1054
1055  (0,_virtual_rollupPluginBabelHelpers_js__WEBPACK_IMPORTED_MODULE_0__.createClass)(_default, [{
1056    key: "initTargetList",
1057    value: function initTargetList(target) {
1058      // 監視対象エレメントに独自指定があればそちらを使う。
1059      // 無ければオプション設定を使う
1060      var root = target.getAttribute(ATTR_ROOT) || this.opt.root;
1061      var rootMargin = target.getAttribute(ATTR_MARGIN) || this.opt.rootMargin;
1062      var threshold = Number(target.getAttribute(ATTR_THRESHOLD)) || this.opt.threshold;
1063      var key = "".concat(root, "-").concat(rootMargin, "-").concat(threshold);
1064
1065      if (key in this.targetList === false) {
1066        var option = {
1067          root: root,
1068          rootMargin: rootMargin,
1069          threshold: threshold
1070        };
1071        var observer = new IntersectionObserver(this.observerCallback.bind(this), option);
1072        this.targetList[key] = {
1073          list: [],
1074          observer: observer
1075        };
1076      }
1077
1078      this.targetList[key].list.push(target);
1079    }
1080    /**
1081     * スクロール検知処理を開始
1082     */
1083
1084  }, {
1085    key: "start",
1086    value: function start() {
1087      var _this2 = this;
1088
1089      Object.keys(this.targetList).forEach(function (key) {
1090        var targetObj = _this2.targetList[key];
1091        targetObj.list.forEach(function (target) {
1092          targetObj.observer.observe(target);
1093        });
1094      });
1095    }
1096    /**
1097     * 画面に入ったら ATTR_INVIEW のdata属性に true を入れる。
1098     * オブザーバーから監視解除される。
1099     */
1100
1101  }, {
1102    key: "observerCallback",
1103    value: function observerCallback(entries, observer) {
1104      var _this3 = this;
1105
1106      entries.forEach(function (entry) {
1107        if (!entry.isIntersecting) return; // inviewした時に実行する外部関数
1108
1109        if (_this3.onInviewFunc) {
1110          _this3.onInviewFunc(entry.target);
1111        }
1112
1113        observer.unobserve(entry.target);
1114        entry.target.setAttribute(ATTR_INVIEW, 'true');
1115      });
1116    }
1117  }]);
1118
1119  return _default;
1120}();
1121
1122
1123//# sourceMappingURL=index.js.map
1124
1125
1126/***/ }),
1127
vendor: 719 bytes, lines 1128-1153
1128/***/ "./node_modules/@sygnas/throttle/dist/throttle.es.js":
1129/*!***********************************************************!*\
1130  !*** ./node_modules/@sygnas/throttle/dist/throttle.es.js ***!
1131  \***********************************************************/
1132/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1133
1134"use strict";
1135__webpack_require__.r(__webpack_exports__);
1136function index (timing, func, scope) {
1137    var id = null;
1138
1139    return function () {
1140        if (id !== null) return;
1141        func.apply(scope);
1142
1143        id = setTimeout(function () {
1144            id = null;
1145        }, timing);
1146    };
1147}
1148
1149/* harmony default export */ __webpack_exports__["default"] = (index);
1150
1151
1152/***/ }),
1153
vendor: 9,677 bytes, lines 1154-1408
1154/***/ "./node_modules/@sygnas/vue-tabs/dist/vue-tabs.es.js":
1155/*!***********************************************************!*\
1156  !*** ./node_modules/@sygnas/vue-tabs/dist/vue-tabs.es.js ***!
1157  \***********************************************************/
1158/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1159
1160"use strict";
1161__webpack_require__.r(__webpack_exports__);
1162/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1163/* harmony export */   "VueTabs": function() { return /* binding */ _sfc_main$1; },
1164/* harmony export */   "VueTabsContent": function() { return /* binding */ _sfc_main; },
1165/* harmony export */   "useTabControl": function() { return /* binding */ useTabControl; }
1166/* harmony export */ });
1167/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
1168
1169
1170const _hoisted_1$1 = ["target", "rel", "href", "data-active"];
1171const _hoisted_2 = ["target", "rel", "href", "data-active"];
1172const _sfc_main$2 = /* @__PURE__ */ (0,vue__WEBPACK_IMPORTED_MODULE_0__.defineComponent)({
1173  props: {
1174    activeId: null,
1175    id: null,
1176    href: null,
1177    isBlank: { type: Boolean },
1178    classItem: null,
1179    classLink: null,
1180    isListTag: { type: Boolean },
1181    handlClick: null
1182  },
1183  setup(__props) {
1184    const props = __props;
1185    const isActive = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => {
1186      if (props.href)
1187        return false;
1188      if (props.activeId === props.id)
1189        return true;
1190      return false;
1191    });
1192    const clickLink = (e) => {
1193      if (props.href)
1194        return true;
1195      props.handlClick(props.id);
1196      e.preventDefault();
1197    };
1198    return (_ctx, _cache) => {
1199      return props.isListTag ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("li", {
1200        key: 0,
1201        class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(props.classItem)
1202      }, [
1203        (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("a", {
1204          target: props.isBlank ? "_blank" : "",
1205          rel: props.isBlank ? "noopener noreferrer" : "",
1206          href: props.href,
1207          class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(props.classLink),
1208          "data-active": (0,vue__WEBPACK_IMPORTED_MODULE_0__.unref)(isActive) ? "true" : "",
1209          onClick: clickLink
1210        }, [
1211          (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, "default")
1212        ], 10, _hoisted_1$1)
1213      ], 2)) : ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)("a", {
1214        key: 1,
1215        target: props.isBlank ? "_blank" : "",
1216        rel: props.isBlank ? "noopener noreferrer" : "",
1217        href: props.href,
1218        class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(props.classLink),
1219        "data-active": (0,vue__WEBPACK_IMPORTED_MODULE_0__.unref)(isActive) ? "true" : "",
1220        onClick: clickLink
1221      }, [
1222        (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, "default")
1223      ], 10, _hoisted_2));
1224    };
1225  }
1226});
1227
1228const EV_CHANGE = "change";
1229const EV_CLICK = "click";
1230const tabGroups = (0,vue__WEBPACK_IMPORTED_MODULE_0__.ref)([]);
1231const $_getGroup = (groupId) => {
1232  const group = tabGroups.value.find((group2) => group2.groupId === groupId);
1233  if (group)
1234    return group;
1235  const newGroup = {
1236    groupId,
1237    activeId: "",
1238    tabIdList: [],
1239    intervalId: 0,
1240    events: new EventTarget()
1241  };
1242  tabGroups.value.push(newGroup);
1243  return tabGroups.value.find((group2) => group2.groupId === groupId);
1244};
1245function useTabControl(groupId, isMaster = false, useHash = false) {
1246  return (() => {
1247    const $_group = $_getGroup(groupId);
1248    const activeId = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => {
1249      return $_group.activeId;
1250    });
1251    const activeIndex = (0,vue__WEBPACK_IMPORTED_MODULE_0__.computed)(() => {
1252      return $_group.tabIdList.indexOf($_group.activeId);
1253    });
1254    const setActiveId = (activeId2, isTabClick = false) => {
1255      $_group.activeId = activeId2;
1256      if (isTabClick) {
1257        const event = new CustomEvent(EV_CLICK, { detail: activeId2 });
1258        $_group.events.dispatchEvent(event);
1259      }
1260    };
1261    const setTabIdList = (idList) => {
1262      $_group.tabIdList = idList;
1263    };
1264    const changeNextTab = () => {
1265      const nextIndex = (activeIndex.value + 1) % $_group.tabIdList.length;
1266      setActiveId($_group.tabIdList[nextIndex]);
1267    };
1268    const changePrevTab = () => {
1269      const index = activeIndex.value - 1;
1270      const prevIndex = index <= -1 ? $_group.tabIdList.length - 1 : index;
1271      setActiveId($_group.tabIdList[prevIndex]);
1272    };
1273    const addChangeListener = (func) => {
1274      $_group.events.addEventListener(EV_CHANGE, func);
1275    };
1276    const addClickListener = (func) => {
1277      $_group.events.addEventListener(EV_CLICK, func);
1278    };
1279    const startAutoChange = (time) => {
1280      $_group.intervalId = setInterval(() => {
1281        changeNextTab();
1282      }, time);
1283    };
1284    const stopAutoChange = () => {
1285      clearInterval($_group.intervalId);
1286    };
1287    (0,vue__WEBPACK_IMPORTED_MODULE_0__.watch)(activeId, () => {
1288      if (isMaster) {
1289        const event = new CustomEvent(EV_CHANGE, { detail: activeId.value });
1290        $_group.events.dispatchEvent(event);
1291      }
1292      if (useHash && isMaster) {
1293        location.hash = activeId.value;
1294      }
1295    });
1296    return {
1297      activeId,
1298      activeIndex,
1299      setActiveId,
1300      setTabIdList,
1301      changeNextTab,
1302      changePrevTab,
1303      startAutoChange,
1304      stopAutoChange,
1305      addChangeListener,
1306      addClickListener
1307    };
1308  })();
1309}
1310
1311const _hoisted_1 = ["innerHTML"];
1312const _sfc_main$1 = /* @__PURE__ */ (0,vue__WEBPACK_IMPORTED_MODULE_0__.defineComponent)({
1313  props: {
1314    group: null,
1315    default: { default: "" },
1316    items: null,
1317    useHash: { type: Boolean, default: false },
1318    isListTag: { type: Boolean, default: false },
1319    auto: null,
1320    isStopAuto: { type: Boolean },
1321    classTabs: { default: "c-tabmenu" },
1322    classItem: { default: "c-tabmenu__item" },
1323    classLink: { default: "c-tabmenu__link" }
1324  },
1325  setup(__props) {
1326    const props = __props;
1327    const tabControl = useTabControl(props.group, true, props.useHash);
1328    const itemClicked = (id) => {
1329      if (id === tabControl.activeId.value)
1330        return;
1331      tabControl.setActiveId(id, true);
1332      if (props.isStopAuto) {
1333        tabControl.stopAutoChange();
1334      }
1335    };
1336    (0,vue__WEBPACK_IMPORTED_MODULE_0__.onMounted)(() => {
1337      const idList = props.items.filter((item) => item.id).map((item) => item.id);
1338      tabControl.setTabIdList(idList);
1339      if (props.useHash && location.hash) {
1340        tabControl.setActiveId(location.hash.substr(1));
1341      } else {
1342        tabControl.setActiveId(props.default);
1343      }
1344      if (props.auto && props.auto >= 1) {
1345        tabControl.startAutoChange(props.auto);
1346      }
1347    });
1348    (0,vue__WEBPACK_IMPORTED_MODULE_0__.onUnmounted)(() => {
1349      tabControl.stopAutoChange();
1350    });
1351    return (_ctx, _cache) => {
1352      return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)((0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDynamicComponent)(props.isListTag ? "ul" : "div"), {
1353        class: (0,vue__WEBPACK_IMPORTED_MODULE_0__.normalizeClass)(props.classTabs)
1354      }, {
1355        default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [
1356          ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(true), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementBlock)(vue__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderList)(props.items, (item, index) => {
1357            return (0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)(_sfc_main$2, {
1358              id: item.id,
1359              key: index,
1360              "active-id": (0,vue__WEBPACK_IMPORTED_MODULE_0__.unref)(tabControl).activeId.value,
1361              href: item.href || "",
1362              "is-blank": item.isBlank || false,
1363              "class-item": props.classItem,
1364              "class-link": props.classLink,
1365              "is-list-tag": props.isListTag,
1366              "handl-click": itemClicked
1367            }, {
1368              default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [
1369                (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("span", {
1370                  innerHTML: item.value
1371                }, null, 8, _hoisted_1)
1372              ]),
1373              _: 2
1374            }, 1032, ["id", "active-id", "href", "is-blank", "class-item", "class-link", "is-list-tag"]);
1375          }), 128))
1376        ]),
1377        _: 1
1378      }, 8, ["class"]);
1379    };
1380  }
1381});
1382
1383const _sfc_main = /* @__PURE__ */ (0,vue__WEBPACK_IMPORTED_MODULE_0__.defineComponent)({
1384  props: {
1385    group: null,
1386    tabId: null,
1387    tag: { default: "div" }
1388  },
1389  setup(__props) {
1390    const props = __props;
1391    const tabControl = useTabControl(props.group);
1392    return (_ctx, _cache) => {
1393      return props.tabId === (0,vue__WEBPACK_IMPORTED_MODULE_0__.unref)(tabControl).activeId.value ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)((0,vue__WEBPACK_IMPORTED_MODULE_0__.resolveDynamicComponent)(props.tag), { key: 0 }, {
1394        default: (0,vue__WEBPACK_IMPORTED_MODULE_0__.withCtx)(() => [
1395          (0,vue__WEBPACK_IMPORTED_MODULE_0__.renderSlot)(_ctx.$slots, "default")
1396        ]),
1397        _: 3
1398      })) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("", true);
1399    };
1400  }
1401});
1402
1403
1404//# sourceMappingURL=vue-tabs.es.js.map
1405
1406
1407/***/ }),
1408
1409/***/ "./src/js/pages/common/common.js":
1410/*!***************************************!*\
1411  !*** ./src/js/pages/common/common.js ***!
1412  \***************************************/
1413/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1414
1415"use strict";
1416__webpack_require__.r(__webpack_exports__);
1417/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1418/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1419/* harmony export */ });
1420/* harmony import */ var _lazyload__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lazyload */ "./src/js/pages/common/lazyload.js");
1421/* harmony import */ var _mediaquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mediaquery */ "./src/js/pages/common/mediaquery.ts");
1422/* harmony import */ var _check_ua__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./check-ua */ "./src/js/pages/common/check-ua.ts");
1423/* harmony import */ var _pagescroll__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pagescroll */ "./src/js/pages/common/pagescroll.ts");
1424/* harmony import */ var _scroll_amount__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./scroll-amount */ "./src/js/pages/common/scroll-amount.ts");
1425/* harmony import */ var _social_share__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./social-share */ "./src/js/pages/common/social-share.ts");
1426/* harmony import */ var _common_popup__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./common_popup */ "./src/js/pages/common/common_popup.js");
1427/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./menu */ "./src/js/pages/common/menu.ts");
1428/* harmony import */ var _loading__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./loading */ "./src/js/pages/common/loading.js");
1429/* harmony import */ var _loading_complete__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./loading_complete */ "./src/js/pages/common/loading_complete.js");
1430/* harmony import */ var _tabs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./tabs */ "./src/js/pages/common/tabs.ts");
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1444  (0,_lazyload__WEBPACK_IMPORTED_MODULE_0__["default"])();
1445  (0,_mediaquery__WEBPACK_IMPORTED_MODULE_1__["default"])();
1446  (0,_check_ua__WEBPACK_IMPORTED_MODULE_2__["default"])();
1447  (0,_pagescroll__WEBPACK_IMPORTED_MODULE_3__["default"])();
1448  (0,_scroll_amount__WEBPACK_IMPORTED_MODULE_4__["default"])();
1449  (0,_social_share__WEBPACK_IMPORTED_MODULE_5__["default"])();
1450  (0,_menu__WEBPACK_IMPORTED_MODULE_7__["default"])();
1451  (0,_common_popup__WEBPACK_IMPORTED_MODULE_6__["default"])();
1452  (0,_tabs__WEBPACK_IMPORTED_MODULE_10__["default"])();
1453  (0,_loading__WEBPACK_IMPORTED_MODULE_8__["default"])().then(_loading_complete__WEBPACK_IMPORTED_MODULE_9__["default"]);
1454}
1455
1456
1457/***/ }),
1458
1459/***/ "./src/js/pages/common/common_popup.js":
1460/*!*********************************************!*\
1461  !*** ./src/js/pages/common/common_popup.js ***!
1462  \*********************************************/
1463/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1464
1465"use strict";
1466__webpack_require__.r(__webpack_exports__);
1467/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1468/* harmony export */   "AJAX_SETTINGS": function() { return /* binding */ AJAX_SETTINGS; },
1469/* harmony export */   "NORMAL_SETTINGS": function() { return /* binding */ NORMAL_SETTINGS; },
1470/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1471/* harmony export */ });
1472/* harmony import */ var _lazyload__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lazyload */ "./src/js/pages/common/lazyload.js");
1473
1474
1475const closeButton = '<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"><i class="i-arrows-times-1"></i></button>';
1476const NORMAL_SETTINGS = {
1477  mainClass: "",
1478  dragToClose: false,
1479  tpl: { closeButton }
1480};
1481const AJAX_SETTINGS = {
1482  type: "ajax",
1483  infobar: false,
1484  toolbar: true,
1485  buttons: ["close"],
1486  btnTpl: {
1487    close: closeButton
1488  },
1489  smallBtn: false,
1490  beforeShow: (instance, current) => {
1491    window.location.hash = current.src;
1492  },
1493  afterShow: () => {
1494    (0,_lazyload__WEBPACK_IMPORTED_MODULE_0__["default"])();
1495  },
1496  beforeClose: () => {
1497    window.location.hash = "";
1498  }
1499};
1500/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1501  $("[data-fancybox]").fancybox({
1502    infobar: false,
1503    toolbar: true,
1504    buttons: ["close"],
1505    btnTpl: {
1506      close: '<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"><i class="i-arrows-times-1"></i></button>'
1507    }
1508  });
1509  $("[data-fancybox-ajax]").fancybox(AJAX_SETTINGS);
1510}
1511
1512
1513/***/ }),
1514
1515/***/ "./src/js/pages/common/lazyload.js":
1516/*!*****************************************!*\
1517  !*** ./src/js/pages/common/lazyload.js ***!
1518  \*****************************************/
1519/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1520
1521"use strict";
1522__webpack_require__.r(__webpack_exports__);
1523/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1524/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1525/* harmony export */ });
1526/* harmony import */ var lazysizes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lazysizes */ "./node_modules/lazysizes/lazysizes.js");
1527/* harmony import */ var lazysizes__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lazysizes__WEBPACK_IMPORTED_MODULE_0__);
1528/* harmony import */ var lazysizes_plugins_unveilhooks_ls_unveilhooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lazysizes/plugins/unveilhooks/ls.unveilhooks */ "./node_modules/lazysizes/plugins/unveilhooks/ls.unveilhooks.js");
1529/* harmony import */ var lazysizes_plugins_unveilhooks_ls_unveilhooks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lazysizes_plugins_unveilhooks_ls_unveilhooks__WEBPACK_IMPORTED_MODULE_1__);
1530
1531
1532
1533/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1534  (lazysizes__WEBPACK_IMPORTED_MODULE_0___default().cfg.lazyClass) = "js-lazy";
1535}
1536
1537
1538/***/ }),
1539
1540/***/ "./src/js/pages/common/loading.js":
1541/*!****************************************!*\
1542  !*** ./src/js/pages/common/loading.js ***!
1543  \****************************************/
1544/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1545
1546"use strict";
1547__webpack_require__.r(__webpack_exports__);
1548/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1549/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1550/* harmony export */ });
1551/* harmony import */ var preloader__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! preloader */ "./node_modules/preloader/index.js");
1552/* harmony import */ var preloader__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(preloader__WEBPACK_IMPORTED_MODULE_0__);
1553
1554
1555/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(add_urls = []) {
1556  const $progress_bar = $(".js-loading-progress");
1557  const loader = preloader__WEBPACK_IMPORTED_MODULE_0___default()({ xhrImages: false });
1558  const image_urls = get_image_list();
1559  const urls = Object.assign(image_urls, add_urls);
1560  return new Promise((resolve, reject) => {
1561    urls.forEach((url) => {
1562      loader.add(url);
1563    });
1564    loader.on("progress", (percent, url) => {
1565      $progress_bar.css({ width: `${percent * 100}%` });
1566    });
1567    loader.on("complete", () => {
1568      $progress_bar.css({ width: "100%" });
1569      $(window).trigger("page_load_complete");
1570      resolve();
1571    });
1572    loader.load();
1573  });
1574}
1575function get_image_list() {
1576  const hostname = /^https?:\/\/[^/]+\//.exec(window.location.href)[0];
1577  const images = document.getElementsByTagName("img");
1578  const urls = [];
1579  for (let i = 0; i < images.length; i += 1) {
1580    const src = images[i].src;
1581    if (src.indexOf(hostname) === 0) {
1582      urls.push(src);
1583    }
1584  }
1585  return urls;
1586}
1587
1588
1589/***/ }),
1590
1591/***/ "./src/js/pages/common/loading_complete.js":
1592/*!*************************************************!*\
1593  !*** ./src/js/pages/common/loading_complete.js ***!
1594  \*************************************************/
1595/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1596
1597"use strict";
1598__webpack_require__.r(__webpack_exports__);
1599/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1600/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1601/* harmony export */ });
1602/* harmony import */ var _scroll_invew__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./scroll-invew */ "./src/js/pages/common/scroll-invew.ts");
1603
1604
1605/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1606  setTimeout(fadein, 200);
1607  setTimeout(remove_fadein, 1200);
1608  setTimeout(_scroll_invew__WEBPACK_IMPORTED_MODULE_0__["default"], 1200);
1609}
1610function fadein() {
1611  $(".js-fadein").attr("data-progress-finish", "true");
1612}
1613function remove_fadein() {
1614  $(".js-fadein").remove();
1615}
1616
1617
1618/***/ }),
1619
1620/***/ "./src/js/pages/common/check-ua.ts":
1621/*!*****************************************!*\
1622  !*** ./src/js/pages/common/check-ua.ts ***!
1623  \*****************************************/
1624/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1625
1626"use strict";
1627__webpack_require__.r(__webpack_exports__);
1628/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1629/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1630/* harmony export */ });
1631/* harmony import */ var is_touch_device__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-touch-device */ "./node_modules/is-touch-device/build/index.js");
1632/* harmony import */ var is_touch_device__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(is_touch_device__WEBPACK_IMPORTED_MODULE_0__);
1633
1634
1635/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1636  if (is_touch_device__WEBPACK_IMPORTED_MODULE_0___default()()) {
1637    document.body.setAttribute("data-is-mobile", "true");
1638  } else {
1639    document.body.setAttribute("data-is-mobile", "false");
1640  }
1641}
1642
1643
1644/***/ }),
1645
1646/***/ "./src/js/pages/common/mediaquery.ts":
1647/*!*******************************************!*\
1648  !*** ./src/js/pages/common/mediaquery.ts ***!
1649  \*******************************************/
1650/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1651
1652"use strict";
1653__webpack_require__.r(__webpack_exports__);
1654/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1655/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1656/* harmony export */ });
1657/* harmony import */ var _sygnas_mediaquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sygnas/mediaquery */ "./node_modules/@sygnas/mediaquery/dist/es6/index.js");
1658
1659
1660/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1661  _sygnas_mediaquery__WEBPACK_IMPORTED_MODULE_0__["default"].addMedia("pc", "screen and (min-width: 801px)");
1662  _sygnas_mediaquery__WEBPACK_IMPORTED_MODULE_0__["default"].addMedia("sp", "screen and (max-width: 800px)");
1663}
1664
1665
1666/***/ }),
1667
1668/***/ "./src/js/pages/common/menu.ts":
1669/*!*************************************!*\
1670  !*** ./src/js/pages/common/menu.ts ***!
1671  \*************************************/
1672/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1673
1674"use strict";
1675__webpack_require__.r(__webpack_exports__);
1676/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1677/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1678/* harmony export */ });
1679
1680const getHamburger = () => {
1681  return document.querySelector(".js-hamburger");
1682};
1683/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1684  const $hamburger = $(".js-hamburger");
1685  $hamburger.on("click", toggle_menu);
1686  $(".c-mainmenu a.js-pagescroll").on("click", toggle_menu);
1687  $(".js-has-submenu").on("click", toggle_submenu);
1688}
1689function toggle_menu(ev) {
1690  const hamburger = getHamburger();
1691  const state = hamburger?.getAttribute("data-hamburger-open");
1692  const is_open = state === "true" ? "false" : "true";
1693  hamburger.setAttribute("data-hamburger-open", is_open);
1694  $(".js-sp-menu").attr("data-sp-menu", is_open === "true" ? "open" : "close");
1695  if (ev.currentTarget === hamburger) {
1696    ev.preventDefault();
1697  }
1698}
1699function toggle_submenu(ev) {
1700  const $button = $(ev.currentTarget);
1701  const $submenu = $button.next();
1702  const is_opened = $button.attr("data-submenu-opened") === "true";
1703  if (is_opened) {
1704    $button.attr("data-submenu-opened", "false");
1705    $submenu.attr("data-submenu-opened", "false");
1706  } else {
1707    $button.attr("data-submenu-opened", "true");
1708    $submenu.attr("data-submenu-opened", "true");
1709  }
1710  ev.preventDefault();
1711}
1712
1713
1714/***/ }),
1715
1716/***/ "./src/js/pages/common/pagescroll.ts":
1717/*!*******************************************!*\
1718  !*** ./src/js/pages/common/pagescroll.ts ***!
1719  \*******************************************/
1720/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1721
1722"use strict";
1723__webpack_require__.r(__webpack_exports__);
1724/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1725/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1726/* harmony export */ });
1727/* harmony import */ var smooth_scroll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! smooth-scroll */ "./node_modules/smooth-scroll/dist/smooth-scroll.polyfills.min.js");
1728/* harmony import */ var smooth_scroll__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(smooth_scroll__WEBPACK_IMPORTED_MODULE_0__);
1729
1730
1731/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1732  const click_scroll = new (smooth_scroll__WEBPACK_IMPORTED_MODULE_0___default())("a.js-pagescroll", {
1733    speed: 500,
1734    offset: 80,
1735    easing: "easeInOutCubic"
1736  });
1737  const scroll = new (smooth_scroll__WEBPACK_IMPORTED_MODULE_0___default())();
1738  $(".js-return-up").on("click", (ev) => {
1739    scroll.animateScroll(0, null, {
1740      speed: 500,
1741      offset: 0,
1742      easing: "easeInOutCubic"
1743    });
1744    ev.preventDefault();
1745  });
1746}
1747
1748
1749/***/ }),
1750
1751/***/ "./src/js/pages/common/scroll-amount.ts":
1752/*!**********************************************!*\
1753  !*** ./src/js/pages/common/scroll-amount.ts ***!
1754  \**********************************************/
1755/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1756
1757"use strict";
1758__webpack_require__.r(__webpack_exports__);
1759/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1760/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1761/* harmony export */ });
1762/* harmony import */ var _sygnas_scroll_amount__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sygnas/scroll-amount */ "./node_modules/@sygnas/scroll-amount/dist/scroll-amount.es.js");
1763
1764
1765/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1766  const scroll_amount = new _sygnas_scroll_amount__WEBPACK_IMPORTED_MODULE_0__["default"](".js-scroll-amount");
1767}
1768
1769
1770/***/ }),
1771
1772/***/ "./src/js/pages/common/scroll-invew.ts":
1773/*!*********************************************!*\
1774  !*** ./src/js/pages/common/scroll-invew.ts ***!
1775  \*********************************************/
1776/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1777
1778"use strict";
1779__webpack_require__.r(__webpack_exports__);
1780/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1781/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1782/* harmony export */ });
1783/* harmony import */ var _sygnas_scroll_inview__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sygnas/scroll-inview */ "./node_modules/@sygnas/scroll-inview/dist/es6/index.js");
1784
1785
1786/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1787  const inview = new _sygnas_scroll_inview__WEBPACK_IMPORTED_MODULE_0__["default"](".js-inview", { rootMargin: "0px 0px -20% 0px" });
1788  inview.start();
1789}
1790
1791
1792/***/ }),
1793
1794/***/ "./src/js/pages/common/social-share.ts":
1795/*!*********************************************!*\
1796  !*** ./src/js/pages/common/social-share.ts ***!
1797  \*********************************************/
1798/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1799
1800"use strict";
1801__webpack_require__.r(__webpack_exports__);
1802/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1803/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1804/* harmony export */ });
1805/* harmony import */ var _sygnas_jp_social_share__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @sygnas/jp-social-share */ "./node_modules/@sygnas/jp-social-share/dist/es6/index.js");
1806
1807
1808/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1809  _sygnas_jp_social_share__WEBPACK_IMPORTED_MODULE_0__["default"].setShareButton(".js-share-button");
1810}
1811
1812
1813/***/ }),
1814
1815/***/ "./src/js/pages/common/tabs.ts":
1816/*!*************************************!*\
1817  !*** ./src/js/pages/common/tabs.ts ***!
1818  \*************************************/
1819/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
1820
1821"use strict";
1822__webpack_require__.r(__webpack_exports__);
1823/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1824/* harmony export */   "default": function() { return /* export default binding */ __WEBPACK_DEFAULT_EXPORT__; }
1825/* harmony export */ });
1826/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm-bundler.js");
1827/* harmony import */ var _sygnas_vue_tabs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @sygnas/vue-tabs */ "./node_modules/@sygnas/vue-tabs/dist/vue-tabs.es.js");
1828
1829
1830
1831/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
1832  const target = "#app-tab";
1833  if (!document.querySelector(target)) {
1834    return;
1835  }
1836  const tabControl = (0,_sygnas_vue_tabs__WEBPACK_IMPORTED_MODULE_1__.useTabControl)("tabGroup");
1837  const app = (0,vue__WEBPACK_IMPORTED_MODULE_0__.createApp)({
1838    components: {
1839      VueTabs: _sygnas_vue_tabs__WEBPACK_IMPORTED_MODULE_1__.VueTabs
1840    },
1841    computed: {
1842      activeId() {
1843        return tabControl.activeId.value;
1844      }
1845    }
1846  });
1847  app.mount(target);
1848}
1849
1850
1851/***/ }),
1852
vendor: 725 bytes, lines 1853-1869
1853/***/ "./node_modules/is-touch-device/build/index.js":
1854/*!*****************************************************!*\
1855  !*** ./node_modules/is-touch-device/build/index.js ***!
1856  \*****************************************************/
1857/***/ (function(module, exports) {
1858
1859Object.defineProperty(exports, "__esModule", ({
1860  value: true
1861}));
1862exports["default"] = isTouchDevice;
1863function isTouchDevice() {
1864  return !!(typeof window !== 'undefined' && ('ontouchstart' in window || window.DocumentTouch && typeof document !== 'undefined' && document instanceof window.DocumentTouch)) || !!(typeof navigator !== 'undefined' && (navigator.maxTouchPoints || navigator.msMaxTouchPoints));
1865}
1866module.exports = exports['default'];
1867
1868/***/ }),
1869
vendor: 5,133 bytes, lines 1870-2062
1870/***/ "./node_modules/lazysizes/plugins/unveilhooks/ls.unveilhooks.js":
1871/*!**********************************************************************!*\
1872  !*** ./node_modules/lazysizes/plugins/unveilhooks/ls.unveilhooks.js ***!
1873  \**********************************************************************/
1874/***/ (function(module, exports, __webpack_require__) {
1875
1876var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*
1877This plugin extends lazySizes to lazyLoad:
1878background images, videos/posters and scripts
1879
1880Background-Image:
1881For background images, use data-bg attribute:
1882<div class="lazyload" data-bg="bg-img.jpg"></div>
1883
1884 Video:
1885 For video/audio use data-poster and preload="none":
1886 <video class="lazyload" preload="none" data-poster="poster.jpg" src="src.mp4">
1887 <!-- sources -->
1888 </video>
1889
1890 For video that plays automatically if in view:
1891 <video
1892	class="lazyload"
1893	preload="none"
1894	muted=""
1895	data-autoplay=""
1896	data-poster="poster.jpg"
1897	src="src.mp4">
1898</video>
1899
1900 Scripts:
1901 For scripts use data-script:
1902 <div class="lazyload" data-script="module-name.js"></div>
1903
1904
1905 Script modules using require:
1906 For modules using require use data-require:
1907 <div class="lazyload" data-require="module-name"></div>
1908*/
1909
1910(function(window, factory) {
1911	var globalInstall = function(){
1912		factory(window.lazySizes);
1913		window.removeEventListener('lazyunveilread', globalInstall, true);
1914	};
1915
1916	factory = factory.bind(null, window, window.document);
1917
1918	if( true && module.exports){
1919		factory(__webpack_require__(/*! lazysizes */ "./node_modules/lazysizes/lazysizes.js"));
1920	} else if (true) {
1921		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! lazysizes */ "./node_modules/lazysizes/lazysizes.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
1922		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
1923		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
1924		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1925	} else {}
1926}(window, function(window, document, lazySizes) {
1927	/*jshint eqnull:true */
1928	'use strict';
1929	var bgLoad, regBgUrlEscape;
1930	var uniqueUrls = {};
1931
1932	if(document.addEventListener){
1933		regBgUrlEscape = /\(|\)|\s|'/;
1934
1935		bgLoad = function (url, cb){
1936			var img = document.createElement('img');
1937			img.onload = function(){
1938				img.onload = null;
1939				img.onerror = null;
1940				img = null;
1941				cb();
1942			};
1943			img.onerror = img.onload;
1944
1945			img.src = url;
1946
1947			if(img && img.complete && img.onload){
1948				img.onload();
1949			}
1950		};
1951
1952		addEventListener('lazybeforeunveil', function(e){
1953			if(e.detail.instance != lazySizes){return;}
1954
1955			var tmp, load, bg, poster;
1956			if(!e.defaultPrevented) {
1957
1958				var target = e.target;
1959
1960				if(target.preload == 'none'){
1961					target.preload = target.getAttribute('data-preload') || 'auto';
1962				}
1963
1964				if (target.getAttribute('data-autoplay') != null) {
1965					if (target.getAttribute('data-expand') && !target.autoplay) {
1966						try {
1967							target.play();
1968						} catch (er) {}
1969					} else {
1970						requestAnimationFrame(function () {
1971							target.setAttribute('data-expand', '-10');
1972							lazySizes.aC(target, lazySizes.cfg.lazyClass);
1973						});
1974					}
1975				}
1976
1977				tmp = target.getAttribute('data-link');
1978				if(tmp){
1979					addStyleScript(tmp, true);
1980				}
1981
1982				// handle data-script
1983				tmp = target.getAttribute('data-script');
1984				if(tmp){
1985					e.detail.firesLoad = true;
1986					load = function(){
1987						e.detail.firesLoad = false;
1988						lazySizes.fire(target, '_lazyloaded', {}, true, true);
1989					};
1990					addStyleScript(tmp, null, load);
1991				}
1992
1993				// handle data-require
1994				tmp = target.getAttribute('data-require');
1995				if(tmp){
1996					if(lazySizes.cfg.requireJs){
1997						lazySizes.cfg.requireJs([tmp]);
1998					} else {
1999						addStyleScript(tmp);
2000					}
2001				}
2002
2003				// handle data-bg
2004				bg = target.getAttribute('data-bg');
2005				if (bg) {
2006					e.detail.firesLoad = true;
2007					load = function(){
2008						target.style.backgroundImage = 'url(' + (regBgUrlEscape.test(bg) ? JSON.stringify(bg) : bg ) + ')';
2009						e.detail.firesLoad = false;
2010						lazySizes.fire(target, '_lazyloaded', {}, true, true);
2011					};
2012
2013					bgLoad(bg, load);
2014				}
2015
2016				// handle data-poster
2017				poster = target.getAttribute('data-poster');
2018				if(poster){
2019					e.detail.firesLoad = true;
2020					load = function(){
2021						target.poster = poster;
2022						e.detail.firesLoad = false;
2023						lazySizes.fire(target, '_lazyloaded', {}, true, true);
2024					};
2025
2026					bgLoad(poster, load);
2027
2028				}
2029			}
2030		}, false);
2031
2032	}
2033
2034	function addStyleScript(src, style, cb){
2035		if(uniqueUrls[src]){
2036			return;
2037		}
2038		var elem = document.createElement(style ? 'link' : 'script');
2039		var insertElem = document.getElementsByTagName('script')[0];
2040
2041		if(style){
2042			elem.rel = 'stylesheet';
2043			elem.href = src;
2044		} else {
2045			elem.onload = function(){
2046				elem.onerror = null;
2047				elem.onload = null;
2048				cb();
2049			};
2050			elem.onerror = elem.onload;
2051
2052			elem.src = src;
2053		}
2054		uniqueUrls[src] = true;
2055		uniqueUrls[elem.src || elem.href] = true;
2056		insertElem.parentNode.insertBefore(elem, insertElem);
2057	}
2058}));
2059
2060
2061/***/ }),
2062
vendor: 550 bytes, lines 2063-2072
2063/***/ "./node_modules/vue/dist/vue.esm-bundler.js":
2064/*!**********************************************************************************************!*\
2065  !*** delegated ./node_modules/vue/dist/vue.esm-bundler.js from dll-reference vendor_library ***!
2066  \**********************************************************************************************/
2067/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
2068
2069module.exports = (__webpack_require__(/*! dll-reference vendor_library */ "dll-reference vendor_library"))(166);
2070
2071/***/ }),
2072
vendor: 636 bytes, lines 2073-2082
2073/***/ "./node_modules/smooth-scroll/dist/smooth-scroll.polyfills.min.js":
2074/*!********************************************************************************************************************!*\
2075  !*** delegated ./node_modules/smooth-scroll/dist/smooth-scroll.polyfills.min.js from dll-reference vendor_library ***!
2076  \********************************************************************************************************************/
2077/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
2078
2079module.exports = (__webpack_require__(/*! dll-reference vendor_library */ "dll-reference vendor_library"))(2);
2080
2081/***/ }),
2082
vendor: 514 bytes, lines 2083-2092
2083/***/ "./node_modules/preloader/index.js":
2084/*!*************************************************************************************!*\
2085  !*** delegated ./node_modules/preloader/index.js from dll-reference vendor_library ***!
2086  \*************************************************************************************/
2087/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
2088
2089module.exports = (__webpack_require__(/*! dll-reference vendor_library */ "dll-reference vendor_library"))(582);
2090
2091/***/ }),
2092
vendor: 586 bytes, lines 2093-2102
2093/***/ "./node_modules/@sygnas/mediaquery/dist/es6/index.js":
2094/*!*******************************************************************************************************!*\
2095  !*** delegated ./node_modules/@sygnas/mediaquery/dist/es6/index.js from dll-reference vendor_library ***!
2096  \*******************************************************************************************************/
2097/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
2098
2099module.exports = (__webpack_require__(/*! dll-reference vendor_library */ "dll-reference vendor_library"))(824);
2100
2101/***/ }),
2102
vendor: 526 bytes, lines 2103-2111
2103/***/ "./node_modules/lazysizes/lazysizes.js":
2104/*!*****************************************************************************************!*\
2105  !*** delegated ./node_modules/lazysizes/lazysizes.js from dll-reference vendor_library ***!
2106  \*****************************************************************************************/
2107/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
2108
2109module.exports = (__webpack_require__(/*! dll-reference vendor_library */ "dll-reference vendor_library"))(90);
2110
2111/***/ })
vendor: 4,233 bytes, lines 2111-2208
2111,
2112
2113/***/ "dll-reference vendor_library":
2114/*!*********************************!*\
2115  !*** external "vendor_library" ***!
2116  \*********************************/
2117/***/ (function(module) {
2118
2119"use strict";
2120module.exports = vendor_library;
2121
2122/***/ })
2123
2124/******/ 	});
2125/************************************************************************/
2126/******/ 	// The module cache
2127/******/ 	var __webpack_module_cache__ = {};
2128/******/ 	
2129/******/ 	// The require function
2130/******/ 	function __webpack_require__(moduleId) {
2131/******/ 		// Check if module is in cache
2132/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
2133/******/ 		if (cachedModule !== undefined) {
2134/******/ 			return cachedModule.exports;
2135/******/ 		}
2136/******/ 		// Create a new module (and put it into the cache)
2137/******/ 		var module = __webpack_module_cache__[moduleId] = {
2138/******/ 			// no module.id needed
2139/******/ 			// no module.loaded needed
2140/******/ 			exports: {}
2141/******/ 		};
2142/******/ 	
2143/******/ 		// Execute the module function
2144/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
2145/******/ 	
2146/******/ 		// Return the exports of the module
2147/******/ 		return module.exports;
2148/******/ 	}
2149/******/ 	
2150/************************************************************************/
2151/******/ 	/* webpack/runtime/compat get default export */
2152/******/ 	!function() {
2153/******/ 		// getDefaultExport function for compatibility with non-harmony modules
2154/******/ 		__webpack_require__.n = function(module) {
2155/******/ 			var getter = module && module.__esModule ?
2156/******/ 				function() { return module['default']; } :
2157/******/ 				function() { return module; };
2158/******/ 			__webpack_require__.d(getter, { a: getter });
2159/******/ 			return getter;
2160/******/ 		};
2161/******/ 	}();
2162/******/ 	
2163/******/ 	/* webpack/runtime/define property getters */
2164/******/ 	!function() {
2165/******/ 		// define getter functions for harmony exports
2166/******/ 		__webpack_require__.d = function(exports, definition) {
2167/******/ 			for(var key in definition) {
2168/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
2169/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
2170/******/ 				}
2171/******/ 			}
2172/******/ 		};
2173/******/ 	}();
2174/******/ 	
2175/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
2176/******/ 	!function() {
2177/******/ 		__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
2178/******/ 	}();
2179/******/ 	
2180/******/ 	/* webpack/runtime/make namespace object */
2181/******/ 	!function() {
2182/******/ 		// define __esModule on exports
2183/******/ 		__webpack_require__.r = function(exports) {
2184/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
2185/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2186/******/ 			}
2187/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
2188/******/ 		};
2189/******/ 	}();
2190/******/ 	
2191/************************************************************************/
2192var __webpack_exports__ = {};
2193// This entry need to be wrapped in an IIFE because it need to be in strict mode.
2194!function() {
2195"use strict";
2196/*!**************************!*\
2197  !*** ./src/js/common.js ***!
2198  \**************************/
2199__webpack_require__.r(__webpack_exports__);
2200/* harmony import */ var _pages_common_common__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pages/common/common */ "./src/js/pages/common/common.js");
2201
2202
2203(0,_pages_common_common__WEBPACK_IMPORTED_MODULE_0__["default"])();
2204
2205}();
2206/******/ })()
2207;
2208//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0JBQWtCLGtCQUFrQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRTZHO0FBQzdHOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3RDNEo7O0FBRTVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLG9GQUFlO0FBQ25COztBQUVBLEVBQUUsaUZBQVk7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7O0F
2208BRUE7QUFDQTtBQUNBLHVEQUF1RDs7QUFFdkQ7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7O0FBRWhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLFFBQVE7QUFDL0IsbUJBQW1CLFFBQVE7QUFDM0IsdUJBQXVCLFFBQVE7QUFDL0IsdUJBQXVCLFFBQVE7QUFDL0Isc0JBQXNCLFFBQVE7QUFDOUI7O0FBRUEsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7OztBQUdSLGlGQUFpRjtBQUNqRjtBQUNBO0FBQ0EsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixRQUFRO0FBQy9CLG1CQUFtQixRQUFRO0FBQzNCLHVCQUF1QixRQUFRO0FBQy9CLHVCQUF1QixRQUFRO0FBQy9CLHNCQUFzQixRQUFRO0FBQzlCLGdCQUFnQixRQUFRO0FBQ3hCOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTs7O0FBR1I7QUFDQSx3REFBd0QsU0FBUztBQUNqRSwyREFBMkQsUUFBUTtBQUNuRTs7QUFFQSxtQ0FBbUMsU0FBUztBQUM1QyxtQ0FBbUMsUUFBUTtBQUMzQyxtQ0FBbUMsU0FBUztBQUM1QyxtQ0FBbUMsS0FBSztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsUUFBUTtBQUMzQixnQkFBZ0IsUUFBUTtBQUN4Qjs7QUFFQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E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VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDdEJBO1dBQ0E7V0FDQTtXQUNBLGVBQWUsNEJBQTRCO1dBQzNDLGVBQWU7V0FDZixpQ0FBaUMsV0FBVztXQUM1QztXQUNBOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEEsOENBQThDOzs7OztXQ0E5QztXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0Q7Ozs7Ozs7Ozs7Ozs7O0FDSG1CO0FBRW5CLGdFQUFNLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi8uL25vZGVfbW9kdWxlcy9Ac3lnbmFzL2pwLXNvY2lhbC1zaGFyZS9kaXN0L2VzNi9fdmlydHVhbC9fcm9sbHVwUGx1Z2luQmFiZWxIZWxwZXJzLmpzIiwid2VicGFjazovL3NpdGVfdGVtcGxhdGVfMjAyMDEyLy4vbm9kZV9tb2R1bGVzL0BzeWduYXMvanAtc29jaWFsLXNoYXJlL2Rpc3QvZXM2L2luZGV4LmpzIiwid2VicGFjazovL3NpdGVfdGVtcGxhdGVfMjAyMDEyLy4vbm9kZV9tb2R1bGVzL0BzeWduYXMvc2Nyb2xsLWFtb3VudC9kaXN0L3Njcm9sbC1hbW91bnQuZXMuanMiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvLi9ub2RlX21vZHVsZXMvQHN5Z25hcy9zY3JvbGwtaW52aWV3L2Rpc3QvZXM2L192aXJ0dWFsL19yb2xsdXBQbHVnaW5CYWJlbEhlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvLi9ub2RlX21vZHVsZXMvQHN5Z25hcy9zY3JvbGwtaW52aWV3L2Rpc3QvZXM2L2luZGV4LmpzIiwid2VicGFjazovL3NpdGVfdGVtcGxhdGVfMjAyMDEyLy4vbm9kZV9tb2R1bGVzL0BzeWduYXMvdGhyb3R0bGUvZGlzdC90aHJvdHRsZS5lcy5qcyIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi8uL25vZGVfbW9kdWxlcy9Ac3lnbmFzL3Z1ZS10YWJzL2Rpc3QvdnVlLXRhYnMuZXMuanMiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvLi9zcmMvanMvcGFnZXMvY29tbW9uL2NvbW1vbi5qcyIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi8uL3NyYy9qcy9wYWdlcy9jb21tb24vY29tbW9uX3BvcHVwLmpzIiwid2VicGFjazovL3NpdGVfdGVtcGxhdGVfMjAyMDEyLy4vc3JjL2pzL3BhZ2VzL2NvbW1vbi9sYXp5bG9hZC5qcyIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi8uL3NyYy9qcy9wYWdlcy9jb21tb24vbG9hZGluZy5qcyIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi8uL3NyYy9qcy9wYWdlcy9jb21tb24vbG9hZGluZ19jb21wbGV0ZS5qcyIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi8uL3NyYy9qcy9wYWdlcy9jb21tb24vY2hlY2stdWEudHMiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvLi9zcmMvanMvcGFnZXMvY29tbW9uL21lZGlhcXVlcnkudHMiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvLi9zcmMvanMvcGFnZXMvY29tbW9uL21lbnUudHMiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvLi9zcmMvanMvcGFnZXMvY29tbW9uL3B
2208hZ2VzY3JvbGwudHMiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvLi9zcmMvanMvcGFnZXMvY29tbW9uL3Njcm9sbC1hbW91bnQudHMiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvLi9zcmMvanMvcGFnZXMvY29tbW9uL3Njcm9sbC1pbnZldy50cyIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi8uL3NyYy9qcy9wYWdlcy9jb21tb24vc29jaWFsLXNoYXJlLnRzIiwid2VicGFjazovL3NpdGVfdGVtcGxhdGVfMjAyMDEyLy4vc3JjL2pzL3BhZ2VzL2NvbW1vbi90YWJzLnRzIiwid2VicGFjazovL3NpdGVfdGVtcGxhdGVfMjAyMDEyLy4vbm9kZV9tb2R1bGVzL2lzLXRvdWNoLWRldmljZS9idWlsZC9pbmRleC5qcyIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi8uL25vZGVfbW9kdWxlcy9sYXp5c2l6ZXMvcGx1Z2lucy91bnZlaWxob29rcy9scy51bnZlaWxob29rcy5qcyIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi9kZWxlZ2F0ZWQgMTY2IGZyb20gZGxsLXJlZmVyZW5jZSB2ZW5kb3JfbGlicmFyeSIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi9kZWxlZ2F0ZWQgMiBmcm9tIGRsbC1yZWZlcmVuY2UgdmVuZG9yX2xpYnJhcnkiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvZGVsZWdhdGVkIDU4MiBmcm9tIGRsbC1yZWZlcmVuY2UgdmVuZG9yX2xpYnJhcnkiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvZGVsZWdhdGVkIDgyNCBmcm9tIGRsbC1yZWZlcmVuY2UgdmVuZG9yX2xpYnJhcnkiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvZGVsZWdhdGVkIDkwIGZyb20gZGxsLXJlZmVyZW5jZSB2ZW5kb3JfbGlicmFyeSIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi9leHRlcm5hbCB2YXIgXCJ2ZW5kb3JfbGlicmFyeVwiIiwid2VicGFjazovL3NpdGVfdGVtcGxhdGVfMjAyMDEyL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3NpdGVfdGVtcGxhdGVfMjAyMDEyL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL3NpdGVfdGVtcGxhdGVfMjAyMDEyL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9zaXRlX3RlbXBsYXRlXzIwMjAxMi93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3NpdGVfdGVtcGxhdGVfMjAyMDEyL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vc2l0ZV90ZW1wbGF0ZV8yMDIwMTIvLi9zcmMvanMvY29tbW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci
22085lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCB7IF9jbGFzc0NhbGxDaGVjayBhcyBjbGFzc0NhbGxDaGVjaywgX2NyZWF0ZUNsYXNzIGFzIGNyZWF0ZUNsYXNzLCBfZGVmaW5lUHJvcGVydHkgYXMgZGVmaW5lUHJvcGVydHkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPV9yb2xsdXBQbHVnaW5CYWJlbEhlbHBlcnMuanMubWFwXG4iLCJpbXBvcnQgeyBkZWZpbmVQcm9wZXJ0eSBhcyBfZGVmaW5lUHJvcGVydHksIGNyZWF0ZUNsYXNzIGFzIF9jcmVhdGVDbGFzcywgY2xhc3NDYWxsQ2hlY2sgYXMgX2NsYXNzQ2FsbENoZWNrIH0gZnJvbSAnLi9fdmlydHVhbC9fcm9sbHVwUGx1Z2luQmFiZWxIZWxwZXJzLmpzJztcblxuLyoqXG4gKiDml6XmnKzlkJHjgZHjgr3jg7zjgrfjg6Pjg6vjgrfjgqfjgqLjg5zjgr/jg7NcbiAqXG4gKiBAYXV0aG9yICAgSGlyb3NoaSBGdWt1ZGEgPGluZm8uc3lnbmFzQGdtYWlsLmNvbT5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xudmFyIEpwU29jaWFsU2hhcmUgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBKcFNvY2lhbFNoYXJlKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBKcFNvY2lhbFNoYXJlKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhKcFNvY2lhbFNoYXJlLCBudWxsLCBbe1xuICAgIGtleTogXCJzZXRTaGFyZUJ1dHRvblwiLFxuICAgIHZhbHVlOiAvLyDjgrXjg7zjg5PjgrnlkI3orZjliKXlrZBcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIC8qKlxuICAgICAqIOOCt+OCp+OCouODnOOCv+ODs+OBruODquODs+OCr+OCkuioreWumuOBmeOCi1xuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0YXJnZXQg5a++6LGh44Oc44K/44Oz44Gu44K744Os44Kv44K/XG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbiDmlrDopo/jgqbjgqPjg7Pjg4njgqbjga7jg5Hjg6njg6Hjg7zjgr/vvIhkZWZhdWx0c+WPgueFp++8iVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNldFNoYXJlQnV0dG9uKHRhcmdldCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIG9wdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAvLyDoqK3lrprjga7jg57jg7zjgrhcbiAgICAgIHRoaXMub3B0ID0gT2JqZWN0LmFzc2lnbih0aGlzLmRlZmF1bHRzLCBvcHRpb24pOyAvLyDjgq/jg6rjg4Pjgq/jgqTjg5njg7Pjg4jjgpLoqK3lrppcblxuICAgICAgdGhpcy5nZXROb2RlQXJyYXkoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0YXJnZXQpKS5mb3JFYWNoKGZ1bmN0aW9uIChlbG0pIHtcbiAgICAgICAgZWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgICAgdmFyIGVsbSA9IGV2LmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgICAgICBfdGhpcy5vcGVuU2hhcmVXaW5kb3dXaXRoRWxlbWVudChlbG0pO1xuXG4gICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICog44Ko44Os44Oh44Oz44OI44GL44KJ5oOF5aCx44KS5Y+W5b6X44GX44Gm44K344Kn44Ki55So44Km44Kj44Oz44OJ44Km44KS6ZaL44GPXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJvcGVuU2hhcmVXaW5kb3dXaXRoRWxlbWVudFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVuU2hhcmVXaW5kb3dXaXRoRWxlbWVudChlbG0pIHtcbiAgICAgIC8vIOOCqOODrOODoeODs+ODiOOBi+OCieODkeODqeODoeODvOOCv+OCkuWPluW+l1xuICAgICAgdmFyIHNlcnZpY2UgPSBlbG0uZ2V0QXR0cmlidXRlKCdkYXRhLXNoYXJlLXNlcnZpY2UnKTtcbiAgICAgIHZhciB1cmwgPSBlbG0uZ2V0QXR0cmlidXRlKCdkYXRhLXNoYXJlLXVybCcpIHx8ICcnO1xuICAgICAgdmFyIG1lc3NhZ2UgPSBlbG0uZ2V0QXR0cmlidXRlKCdkYXRhLXNoYXJlLW1lc3NhZ2UnKSB8fCBkb2N1bWVudC50aXRsZTtcbiAgICAgIHZhciBhY2NvdW50ID0gZWxtLmdldEF0dHJpYnV0ZSgnZGF0YS1zaGFyZS1hY2NvdW50JykgfHwgJyc7XG4gICAgICB2Y
2208XIgZm9sbG93ID0gZWxtLmdldEF0dHJpYnV0ZSgnZGF0YS1zaGFyZS1mb2xsb3cnKSB8fCAnJzsgLy8g44K344Kn44Ki55So44Km44Kj44Oz44OJ44Km44KS6ZaL44GPXG5cbiAgICAgIHRoaXMub3BlblNoYXJlV2luZG93KHNlcnZpY2UsIHVybCwgbWVzc2FnZSwgYWNjb3VudCwgZm9sbG93KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICog44K344Kn44Ki55So44Km44Kj44Oz44OJ44Km44KS6ZaL44GPXG4gICAgICogQHBhcmFtIHNlcnZpY2Uge1N0cmluZ30g44K944O844K344Oj44Or44K144O844OT44K56K2Y5Yil5a2QXG4gICAgICogQHBhcmFtIHVybCB7U3RyaW5nfSDjgrfjgqfjgqJVUkxcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSB7U3RyaW5nfSDjg6Hjg4Pjgrvjg7zjgrjmnKzmlodcbiAgICAgKiBAcGFyYW0gYWNjb3VudCB7U3RyaW5nfSDjg4TjgqTjg7zjg4jjgavku5jjgZHjgotSZXBsZXnjgqLjgqvjgqbjg7Pjg4hcbiAgICAgKiBAcGFyYW0gZm9sbG93IHtTdHJpbmd9IOODhOOCpOODvOODiOW+jOOBq+ihqOekuuOBmeOCi+ODleOCqeODreODvOWAmeijnOOCouOCq+OCpuODs+ODiFxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwib3BlblNoYXJlV2luZG93XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9wZW5TaGFyZVdpbmRvdyhzZXJ2aWNlKSB7XG4gICAgICB2YXIgdXJsID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJztcbiAgICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnJztcbiAgICAgIHZhciBhY2NvdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAnJztcbiAgICAgIHZhciBmb2xsb3cgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6ICcnO1xuXG4gICAgICAvLyDlrZjlnKjjgZfjgarjgYTjgrXjg7zjg5PjgrnjgaDjgaPjgZ/jgonjgqjjg6njg7xcbiAgICAgIGlmICh0aGlzLm9wdC5zZXJ2aWNlcyAmJiBPYmplY3Qua2V5cyh0aGlzLm9wdC5zZXJ2aWNlcykuaW5kZXhPZihzZXJ2aWNlKSA9PT0gLTEpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJcIi5jb25jYXQoc2VydmljZSwgXCIgaXMgbm90IHN1cHBvcnRlZC5cIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIOODhuODs+ODl+ODrOODvOODiOOBi+OCieOCs+ODs+ODkOODvOODiFxuXG5cbiAgICAgIHZhciBvcGVuVXJsID0gdGhpcy5jb252ZXJ0T3BlblVybChzZXJ2aWNlLCB1cmwsIG1lc3NhZ2UsIGFjY291bnQsIGZvbGxvdyk7IC8vIC8vIExJTkXjga/jgqLjg5fjg6rjgavpo5vjgbDjgZnjgILjgZ3jgozku6XlpJb
2208jga/jgqbjgqPjg7Pjg4njgqbjgpLplovjgY9cbiAgICAgIC8vIGlmIChzZXJ2aWNlID09PSB0aGlzLlNFUlZJQ0VTLkxJTkUpIHtcbiAgICAgIC8vICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBvcGVuVXJsO1xuICAgICAgLy8gfSBlbHNlIGlmICh0aGlzLm9wdC53aW5kb3cpIHtcblxuICAgICAgaWYgKHRoaXMub3B0LndpbmRvdykge1xuICAgICAgICB2YXIgd2luZG93T3B0aW9uID0gdGhpcy5nZXRXaW5kb3dPcHRpb24odGhpcy5vcHQud2luZG93KTtcbiAgICAgICAgd2luZG93Lm9wZW4ob3BlblVybCwgXCJzaGFyZV9cIi5jb25jYXQoc2VydmljZSksIHdpbmRvd09wdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnV2luZG93IG9wdGlvbiBpcyBub3QgZGVmaW5lZC4nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvKipcbiAgICAgKiDjgrXjg7zjg5Pjgrnmr47jga5VUkzjgpLlj5blvpdcbiAgICAgKiDjg5Hjg6njg6Hjg7zjgr/jgavjgojjgaPjgabjga/liqDlt6XjgYzjgZXjgozjgotcbiAgICAgKiBAcGFyYW0gc2VydmljZSB7U3RyaW5nfSDjgr3jg7zjgrfjg6Pjg6vjgrXjg7zjg5PjgrnorZjliKXlrZBcbiAgICAgKiBAcGFyYW0gdXJsIHtTdHJpbmd9IOOCt+OCp+OColVSTFxuICAgICAqIEBwYXJhbSBtZXNzYWdlIHtTdHJpbmd9IOODoeODg+OCu+ODvOOCuOacrOaWh1xuICAgICAqIEBwYXJhbSBhY2NvdW50IHtTdHJpbmd9IOODhOOCpOODvOODiOOBq+S7mOOBkeOCi1JlcGxleeOCouOCq+OCpuODs+ODiFxuICAgICAqIEBwYXJhbSBmb2xsb3cge1N0cmluZ30g44OE44Kk44O844OI5b6M44Gr6KGo56S644GZ44KL44OV44Kp44Ot44O85YCZ6KOc44Ki44Kr44Km44Oz44OIXG4gICAgICogQHJldHVybiB7U3RyaW5nfSDjgrfjgqfjgqLnqpPjgqrjg7zjg5fjg7NVUkxcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImNvbnZlcnRPcGVuVXJsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnZlcnRPcGVuVXJsKHNlcnZpY2UpIHtcbiAgICAgIHZhciB1cmwgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnO1xuICAgICAgdmFyIG1lc3NhZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICcnO1xuICAgICAgdmFyIGFjY291bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6ICcnO1xuICAgICAgdmFyIGZvbGxvdyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDogJyc7XG4gICAgICB2Y
2208XIgZXUgPSBlbmNvZGVVUklDb21wb25lbnQ7XG4gICAgICB2YXIgc2hhcmVVcmwgPSB1cmwgfHwgbG9jYXRpb24uaHJlZjtcbiAgICAgIHZhciBvcGVuVXJsID0gdGhpcy5vcHQuc2VydmljZXMgPyB0aGlzLm9wdC5zZXJ2aWNlc1tzZXJ2aWNlXSA6IFwiXCI7XG5cbiAgICAgIGlmICghb3BlblVybCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlwiLmNvbmNhdChzZXJ2aWNlLCBcIiBpcyBub3Qgc3VwcG9ydGVkLlwiKSk7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfSAvLyBUd2l0dGVy44Gg44GR44OR44Op44Oh44O844K/44Gu5YaF5a6544Gr44KI44Gj44GmVVJM44GM5aSJ44KP44KLXG5cblxuICAgICAgaWYgKHNlcnZpY2UgPT09IHRoaXMuU0VSVklDRVMuVFdJVFRFUikge1xuICAgICAgICBpZiAoIWFjY291bnQpIG9wZW5VcmwgPSBvcGVuVXJsLnJlcGxhY2UoXCImdmlhPXt7QUNDT1VOVH19XCIsIFwiXCIpO1xuICAgICAgICBpZiAoIWZvbGxvdykgb3BlblVybCA9IG9wZW5VcmwucmVwbGFjZShcIiZyZWxhdGVkPXt7Rk9MTE9XfX1cIiwgXCJcIik7XG4gICAgICB9XG5cbiAgICAgIG9wZW5VcmwgPSBvcGVuVXJsLnJlcGxhY2UoXCJ7e0FDQ09VTlR9fVwiLCBldShhY2NvdW50KSk7XG4gICAgICBvcGVuVXJsID0gb3BlblVybC5yZXBsYWNlKFwie3tGT0xMT1d9fVwiLCBldShmb2xsb3cpKTtcbiAgICAgIG9wZW5VcmwgPSBvcGVuVXJsLnJlcGxhY2UoXCJ7e01FU1NBR0V9fVwiLCBldShtZXNzYWdlKSk7XG4gICAgICBvcGVuVXJsID0gb3BlblVybC5yZXBsYWNlKFwie3tVUkx9fVwiLCBldShzaGFyZVVybCkpO1xuICAgICAgcmV0dXJuIG9wZW5Vcmw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5vZGVMaXN044KSQXJyYXnjgajjgZfjgablj5bjgorlh7rjgZnvvIhJReWvvuetlu+8iVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Tm9kZUFycmF5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldE5vZGVBcnJheShub2RlTGlzdCkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5vZGVMaXN0LCAwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2luZG9344OR44Op44Oh44O844K/5L2c5oiQXG4gICAgICogQHBhcmFtIG9wdCB7T2JqZWN0fSDjgqbjgqPjg7Pjg4njgqbjg5Hjg6njg6Hjg7zjgr9cbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IOaWsOimj+OCpuOCo+ODs+ODieOCpuOBruODkeODqeODoeODvOOCv+aWh+Wtl+WIl1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0V2luZG93T3B0aW9uXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFdpbmRvd09wdGlvbihvcHQpIHtcbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuICAgICAgT2JqZWN0LmtleXMob3B0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaXRlbXMucHVzaChcIlwiLmNvbmNhdChrZXksIFwiPVwiKS5jb25jYXQob3B0W2tleV0pKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGl0ZW1zLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBKcFNvY2lhbFNoYXJlO1xufSgpO1xuXG5fZGVmaW5lUHJvcGVydHkoSnBTb2NpYWxTaGFyZSwgXCJTRVJWSUNFU1wiLCB7XG4gIFRXSVRURVI6ICd0d2l0dGVyJyxcbiAgRkFDRUJPT0s6ICdmYWNlYm9vaycsXG4gIExJTkU6ICdsaW5lJyxcbiAgRkVFRExZOiAnZmVlZGx5JyxcbiAgUE9DS0VUOiAncG9ja2V0JyxcbiAgSE
2208FURUJVOiAnaGF0ZWJ1J1xufSk7XG5cbl9kZWZpbmVQcm9wZXJ0eShKcFNvY2lhbFNoYXJlLCBcIm9wdFwiLCB2b2lkIDApO1xuXG5fZGVmaW5lUHJvcGVydHkoSnBTb2NpYWxTaGFyZSwgXCJkZWZhdWx0c1wiLCB7XG4gIC8vIHdpbmRvdy5vcGVuKCkg44Gu44Kq44OX44K344On44OzXG4gIHdpbmRvdzoge1xuICAgIHdpZHRoOiA1NTAsXG4gICAgaGVpZ2h0OiA0NTAsXG4gICAgcGVyc29uYWxiYXI6IDAsXG4gICAgdG9vbGJhcjogMCxcbiAgICBzY3JvbGxiYXJzOiAxLFxuICAgIHJlc2l6YWJsZTogMVxuICB9LFxuICAvLyDjgrfjgqfjgqLnlKhVUkzjga7jg4bjg7Pjg5fjg6zjg7zjg4hcbiAgc2VydmljZXM6IHtcbiAgICB0d2l0dGVyOiAnaHR0cDovL3R3aXR0ZXIuY29tL3NoYXJlP3VybD17e1VSTH19JnRleHQ9e3tNRVNTQUdFfX0mdmlhPXt7QUNDT1VOVH19JnJlbGF0ZWQ9e3tGT0xMT1d9fScsXG4gICAgZmFjZWJvb2s6ICdodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9zaGFyZS5waHA/dT17e1VSTH19JyxcbiAgICAvLyBsaW5lOiAnbGluZTovL21zZy90ZXh0L3t7TUVTU0FHRX19IHt7VVJMfX0nLFxuICAgIGxpbmU6ICdodHRwczovL3NvY2lhbC1wbHVnaW5zLmxpbmUubWUvbGluZWl0L3NoYXJlP3VybD17e1VSTH19JyxcbiAgICBmZWVkbHk6ICdodHRwOi8vZmVlZGx5LmNvbS9pL3N1YnNjcmlwdGlvbi9mZWVkL3t7VVJMfX0nLFxuICAgIHBvY2tldDogJ2h0dHA6Ly9nZXRwb2NrZXQuY29tL2VkaXQ/dXJsPXt7VVJMfX0nLFxuICAgIGhhdGVidTogJy8vYi5oYXRlbmEubmUuanAvYWRkP21vZGU9Y29uZmlybSZ1cmw9e3tVUkx9fSZ0aXRsZT17e01FU1NBR0V9fSdcbiAgfVxufSk7XG5cbmV4cG9ydCB7IEpwU29jaWFsU2hhcmUgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJpbXBvcnQgdGhyb3R0bGUgZnJvbSAnQHN5Z25hcy90aHJvdHRsZSc7XG5cbmZ1bmN0aW9uIHVud3JhcEV4cG9ydHMgKHgpIHtcblx0cmV0dXJuIHggJiYgeC5fX2VzTW9kdWxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnZGVmYXVsdCcpID8geFsnZGVmYXVsdCddIDogeDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tbW9uanNNb2R1bGUoZm4sIG1vZHVsZSkge1xuXHRyZXR1cm4gbW9kdWxlID0geyBleHBvcnRzOiB7fSB9LCBmbihtb2R1bGUsIG1vZHVsZS5leHBvcnRzKSwgbW9kdWxlLmV4cG9ydHM7XG59XG5cbnZhciBfZ2xvYmFsID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSkge1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxufSk7XG5cbnZhciBfY29yZSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUpIHtcbnZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjUuMycgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG59KTtcblxudmFyIF9jb3JlXzEgPSBfY29yZS52ZXJzaW9uO1xuXG52YXIgX2FGdW5jdGlvbiA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xuXG52YXIgX2N0eCA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIF9hRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuXG52YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuXG52YXIgX2FuT2JqZWN0ID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghX2lzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgX2ZhaWxzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxudmFyIF9kZXNjcmlwdG9ycyA9ICFfZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuXG52YXIgZG9jdW1lbnQkMSA9IF9nbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IF9pc09iamVjdChkb2N1bWVudCQxKSAmJi
2208BfaXNPYmplY3QoZG9jdW1lbnQkMS5jcmVhdGVFbGVtZW50KTtcbnZhciBfZG9tQ3JlYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50JDEuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG5cbnZhciBfaWU4RG9tRGVmaW5lID0gIV9kZXNjcmlwdG9ycyAmJiAhX2ZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfZG9tQ3JlYXRlKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcblxuLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG5cbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xudmFyIF90b1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIV9pc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhX2lzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFfaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFfaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuXG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBmID0gX2Rlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBfYW5PYmplY3QoTyk7XG4gIFAgPSBfdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIF9hbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKF9pZThEb21EZWZpbmUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcblxudmFyIF9vYmplY3REcCA9IHtcblx0ZjogZlxufTtcblxudmFyIF9wcm9wZXJ0eURlc2MgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcblxudmFyIF9oaWRlID0gX2Rlc2NyaXB0b3JzID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gX29iamVjdERwLmYob2JqZWN0LCBrZXksIF9wcm9wZXJ0eURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuXG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciBJU19XUkFQID0gdHlwZSAmICRleHBvcnQuVztcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBfY29yZSA6IF9jb3JlW25hbWVdIHx8IChfY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gX2dsb2JhbCA6IElTX1NUQVRJQyA/IF9nbG9iYWxbbmFtZV0gOiAoX2dsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGtleSwgb3duLCBvdXQ7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG93biAmJiBrZXkgaW4gZXhwb3J0cykgY29udGludWU7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSBvd24gPyB0YXJnZXRba2V5XSA6IHNvdXJjZVtrZXldO1xuICAgIC8vIHByZXZlbnQgZ2xvYmFsIHBvbGx1dGlvbiBmb3IgbmFtZXNwYWNlc1xuICAgIGV4cG9ydHNba2V5XSA9IElTX0dMT0JBTCAmJiB0eXBlb2YgdGFyZ2V0W2tleV0gIT0gJ2Z1bmN0aW9uJyA/IHNvdXJjZVtrZXldXG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICA6IElTX0JJTkQgJiYgb3duID8gX2N0eChvdXQsIF9nbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2Y
2208XIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gX2N0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5tZXRob2RzLiVOQU1FJVxuICAgIGlmIChJU19QUk9UTykge1xuICAgICAgKGV4cG9ydHMudmlydHVhbCB8fCAoZXhwb3J0cy52aXJ0dWFsID0ge30pKVtrZXldID0gb3V0O1xuICAgICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLnByb3RvdHlwZS4lTkFNRSVcbiAgICAgIGlmICh0eXBlICYgJGV4cG9ydC5SICYmIGV4cFByb3RvICYmICFleHBQcm90b1trZXldKSBfaGlkZShleHBQcm90bywga2V5LCBvdXQpO1xuICAgIH1cbiAgfVxufTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbnZhciBfZXhwb3J0ID0gJGV4cG9ydDtcblxudmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG52YXIgX2hhcyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcblxudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciBfY29mID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG52YXIgX2lvYmplY3QgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gX2NvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcblxuLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbnZhciBfZGVmaW5lZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xuXG5cbnZhciBfdG9Jb2JqZWN0ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBfaW9iamVjdChfZGVmaW5lZChpdCkpO1xufTtcblxuLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgX3RvSW50ZWdlciA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG5cbi8vIDcuMS4xNSBUb0xlbmd0aFxuXG52YXIgbWluID0gTWF0aC5taW47XG52YXIgX3RvTGVuZ3RoID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4oX3RvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiQxID0gTWF0aC5taW47XG52YXIgX3RvQWJzb2x1dGVJbmRleCA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gX3RvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluJDEoaW5kZXgsIGxlbmd0aCk7XG59O1xuXG4vLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xuXG5cblxudmFyIF9hcnJheUluY2x1ZGVzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IF90b0lvYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBfdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IF90b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9I
2208HJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBfZ2xvYmFsW1NIQVJFRF0gfHwgKF9nbG9iYWxbU0hBUkVEXSA9IHt9KTtcbnZhciBfc2hhcmVkID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHt9KTtcbn07XG5cbnZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xudmFyIF91aWQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuXG52YXIgc2hhcmVkID0gX3NoYXJlZCgna2V5cycpO1xuXG52YXIgX3NoYXJlZEtleSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IF91aWQoa2V5KSk7XG59O1xuXG52YXIgYXJyYXlJbmRleE9mID0gX2FycmF5SW5jbHVkZXMoZmFsc2UpO1xudmFyIElFX1BST1RPID0gX3NoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIF9vYmplY3RLZXlzSW50ZXJuYWwgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IF90b0lvYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIF9oYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoX2hhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbnZhciBfZW51bUJ1Z0tleXMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG5cbi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxuXG5cblxudmFyIF9vYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBfb2JqZWN0S2V5c0ludGVybmFsKE8sIF9lbnVtQnVnS2V5cyk7XG59O1xuXG52YXIgZiQxID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxudmFyIF9vYmplY3RHb3BzID0ge1xuXHRmOiBmJDFcbn07XG5cbnZhciBmJDIgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxudmFyIF9vYmplY3RQaWUgPSB7XG5cdGY6IGYkMlxufTtcblxuLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxuXG52YXIgX3RvT2JqZWN0ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoX2RlZmluZWQoaXQpKTtcbn07XG5cbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcblxuXG5cblxuXG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxudmFyIF9vYmplY3RBc3NpZ24gPSAhJGFzc2lnbiB8fCBfZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IF90b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gX29iamVjdEdvcHMuZjtcbiAgdmFyIGlzRW51bSA9IF9vYmplY3RQaWUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gX2lvYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBfb2JqZWN0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBfb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcblxuLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcblxuXG5fZXhwb3J0KF9leHBvcnQuUyArIF9leHBvcnQuRiwgJ09iamVjdCcsIHsgYXNzaWduOiBfb2JqZWN0QXNzaWduIH0pO1xuXG52YXIgYXNzaWduID0gX2NvcmUuT2JqZWN0LmFzc2lnbjtcblxudmFyIGFzc2lnbiQyID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSkge1xubW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBhc3NpZ24sIF9fZXNNb2R1bGU6IHRydWUgfTtcbn0pO1xuXG52YXIgX09iamVjdCRhc3NpZ24gPSB1bndyYXBFeHBvcnRzKGFzc2lnbiQyKTtcblxudmFyIGNsYXNzQ2FsbENoZWNrID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cykge1xuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZh
2208dWx0ID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG59KTtcblxudmFyIF9jbGFzc0NhbGxDaGVjayA9IHVud3JhcEV4cG9ydHMoY2xhc3NDYWxsQ2hlY2spO1xuXG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuX2V4cG9ydChfZXhwb3J0LlMgKyBfZXhwb3J0LkYgKiAhX2Rlc2NyaXB0b3JzLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogX29iamVjdERwLmYgfSk7XG5cbnZhciAkT2JqZWN0ID0gX2NvcmUuT2JqZWN0O1xudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYykge1xuICByZXR1cm4gJE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBkZXNjKTtcbn07XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSQyID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSkge1xubW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiBkZWZpbmVQcm9wZXJ0eSwgX19lc01vZHVsZTogdHJ1ZSB9O1xufSk7XG5cbnVud3JhcEV4cG9ydHMoZGVmaW5lUHJvcGVydHkkMik7XG5cbnZhciBjcmVhdGVDbGFzcyA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMpIHtcbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cblxuXG52YXIgX2RlZmluZVByb3BlcnR5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZGVmaW5lUHJvcGVydHkkMik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci
220853cml0YWJsZSA9IHRydWU7XG4gICAgICAoMCwgX2RlZmluZVByb3BlcnR5Mi5kZWZhdWx0KSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xufSk7XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSB1bndyYXBFeHBvcnRzKGNyZWF0ZUNsYXNzKTtcblxuLyoqXG4gKiBBZGQgc2Nyb2xsaW5nIHN0YXRlKHRvcCAvIG5vdC10b3AgLyBib3R0b20gLyBub3QtYm90dG9tKVxuICpcbiAqIEBhdXRob3IgICBIaXJvc2hpIEZ1a3VkYSA8aW5mby5zeWduYXNAZ21haWwuY29tPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cbnZhciBBVFRSX05BTUUgPSAnZGF0YS1zY3JvbGwtYW1vdW50JztcbnZhciBBVFRSX1RPUCA9ICd0b3AnO1xudmFyIEFUVFJfQk9UVE9NID0gJ2JvdHRvbSc7XG52YXIgQVRUUl9OT1RfVE9QID0gJ25vdC10b3AnO1xudmFyIEFUVFJfTk9UX0JPVFRPTSA9ICdub3QtYm90dG9tJztcblxudmFyIF9jbGFzcyA9IGZ1bmN0aW9uICgpIHtcblxuICAgIC8qKlxuICAgICAqIOOCs+ODs+OCueODiOODqeOCr+OCv1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgRE9NIFNlbGVjdG9yXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBfY2xhc3ModGFyZ2V0KSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgX2NsYXNzKTtcblxuICAgICAgICB2Y
2208XIgZGVmYXVsdHMgPSB7XG4gICAgICAgICAgICAvLyDmnIDkuIrpg6jjga7jgqrjg5Xjgrvjg4Pjg4hcbiAgICAgICAgICAgIG9mZnNldF90b3A6IDcwLFxuICAgICAgICAgICAgLy8g5pyA5LiL6YOo44Gu44Kq44OV44K744OD44OIXG4gICAgICAgICAgICBvZmZzZXRfYm90dG9tOiA3MCxcbiAgICAgICAgICAgIC8vIOacgOS4iumDqOOBq+OCueOCr+ODreODvOODq+OBl+OBn+aZguOBq+Wun+ihjFxuICAgICAgICAgICAgb25Ub3A6IGZ1bmN0aW9uIG9uVG9wKCkge30sXG5cbiAgICAgICAgICAgIC8vIOacgOS4iumDqOOBi+OCiembouOCjOOBn+aZguOBq+Wun+ihjFxuICAgICAgICAgICAgb25Ob3RUb3A6IGZ1bmN0aW9uIG9uTm90VG9wKCkge30sXG5cbiAgICAgICAgICAgIC8vIOacgOS4i+mDqOOBq+OCueOCr+ODreODvOODq+OBl+OBn+aZguOBq+Wun+ihjFxuICAgICAgICAgICAgb25Cb3R0b206IGZ1bmN0aW9uIG9uQm90dG9tKCkge30sXG5cbiAgICAgICAgICAgIC8vIOacgOS4i+mDqOOBi+OCiembouOCjOOBn+aZguOBq+Wun+ihjFxuICAgICAgICAgICAgb25Ob3RCb3R0b206IGZ1bmN0aW9uIG9uTm90Qm90dG9tKCkge30sXG5cbiAgICAgICAgICAgIC8vIOeJueWumuOCqOODrOODoeODs+ODiOOBruOCueOCr+ODreODvOODq+OCkuWvvuixoeOBq+OBl+OBn+OBhFxuICAgICAgICAgICAgZWxlbWVudDogJydcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm9wdCA9IF9PYmplY3QkYXNzaWduKGRlZmF1bHRzLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHRhcmdldCk7XG4gICAgICAgIHRoaXMud2luX2hlaWdodCA9IG51bGw7IC8vIOODluODqeOCpuOCtuOCpuOCo+ODs+ODieOCpuOBrumrmOOBlVxuICAgICAgICB0aGlzLmludGVydmFsX2lkID0gbnVsbDsgLy8g44K544Kv44Ot44O844Or44Kk44OZ44Oz44OI44Gu44Kk44Oz44K/44O844OQ44Or44OB44Kn44OD44KvXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdOyAvLyBkYXRh5bGe5oCn44Gr5pu444GN5Ye644GZ5YaF5a65XG4gICAgICAgIHRoaXMubGFzdF9yZXN1bHRzX3N0ciA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNfc3RhcnRlZCA9IGZhbHNlOyAvLyDplovlp4vjgZfjgZ9cbiAgICAgICAgdGhpcy5pc190b3AgPSBmYWxzZTsgLy8g5LiA55Wq5LiK44Gr44K544Kv44Ot44O844Or44GX44GfXG4gICAgICAgIHRoaXMuaXNfYm90dG9tID0gZmFsc2U7IC8vIOS4gOeVquS4i+OBq+OCueOCr+ODreODvOODq+OBl+OBn1xuICAgICAgICAvLyDjgrnjgq/jg63jg7zjg6vph4/jgpLoqr/jgbnjgovjgqjjg6zjg6Hjg7Pjg4hcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gdGhpcy5vcHQuZWxlbWVudCA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5vcHQuZWxlbWVudCkgOiBudWxsO1xuXG4gICAgICAgIHRoaXMuZXZfcmVzaXplID0gbnVsbDtcbiAgICAgICAgdGhpcy5ldl9zY3JvbGwgP
2208SBudWxsO1xuXG4gICAgICAgIC8vIOmWi+Wni1xuICAgICAgICB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgLyoqICoqKioqKioqKioqKioqKioqKipcbiAgICAgKiBwdWJsaWNcbiAgICAgKi9cblxuICAgIC8qKlxuICAgICog44K544Kv44Ot44O844Or5qSc55+l5Yem55CG44KS6ZaL5aeLXG4gICAgKi9cblxuXG4gICAgX2NyZWF0ZUNsYXNzKF9jbGFzcywgW3tcbiAgICAgICAga2V5OiAnc3RhcnQnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyDjgZnjgafjgavplovlp4vjgZfjgabjgYTjgZ/jgonnhKHoppZcbiAgICAgICAgICAgIGlmICh0aGlzLmlzX3N0YXJ0ZWQpIHJldHVybjtcblxuICAgICAgICAgICAgLy8g44Kk44OZ44Oz44OI44Kq44OW44K444Kn44Kv44OIXG4gICAgICAgICAgICB0aGlzLmV2X3Jlc2l6ZSA9IHRocm90dGxlKDUwLCB0aGlzLl9yZXNpemUsIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5ldl9zY3JvbGwgPSB0aHJvdHRsZSgxMDAsIHRoaXMuX3Njcm9sbCwgdGhpcyk7XG5cbiAgICAgICAgICAgIC8vIOODquOCteOCpOOCuuOCpOODmeODs+ODiOOBp+ODieOCreODpeODoeODs+ODiOmrmOOBleODgeOCp+ODg+OCr1xuICAgICAgICAgICAgdGhpcy5fcmVzaXplKCk7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5ldl9yZXNpemUpO1xuXG4gICAgICAgICAgICAvLyDjgrnjgq/jg63jg7zjg6vjgqTjg5njg7Pjg4hcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbCgpO1xuICAgICAgICAgICAgdGhpcy5pc19zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmV2X3Njcm9sbCk7XG5cbiAgICAgICAgICAgIC8vIDAuNeenkumWk+avjuOBq+ODgeOCp+ODg+OCr+OCguWFpeOCjOOCi1xuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbF9pZCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fc2Nyb2xsKCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICog44K544Kv44Ot44O844Or5qSc55+l5Yem55CG44KS5YGc5q2iXG4gICAgICAgICovXG5cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ3N0b3AnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLmV2X3Jlc2l6ZSk7XG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5ldl9zY3JvbGwpO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsX2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiAqKioqKioqKioqKioqKioqKioqXG4gICAgICAgICAqIHByaXZhdGVcbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICog44K544Kv44Ot44O844Or5Yem55CGXG4gICAgICAgICovXG5cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19zY3JvbGwnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3Njcm9sbCgpIHtcbiAgICAgICAgICAgIHZhciBzY3JvbGxfdG9wID0gdGhpcy5lbGVtZW50ID8gdGhpcy5lbGVtZW50LnNjcm9sbFRvcCA6IHdpbmRvdy5wYWdlWU9mZnNldDtcblxuICAgICAgICAgICAgLy8g5Yid5pyf5YyWXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcblxuICAgICAgICAgICAgLy8g5L2N572u44Kk44OZ44Oz44OI44Gu44OB44Kn44OD44KvXG4gICAgICAgICAgICB0aGlzLl9jaGVja190b3BfYW5kX2JvdHRvbShzY3JvbGxfdG9wKTtcblxuICAgICAgICAgICAgLy8g5bGe5oCn44KS5LuY5LiOXG4gICAgICAgICAgICB0aGlzLl9zZXRfYXR0cmlidXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICog5bGe5oCn44KS5LuY5LiOXG4gICAgICAgICAqL1xuXG4gICAgfSwge1xuICAgICAgICBrZXk6ICdfc2V0X2F0dHJpYnV0ZScsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2V0X2F0dHJpYnV0ZSgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHRzX3N0ciA9IHRoaXMucmVzdWx0cy5qb2luKCcgJyk7XG5cbiAgICAgICAgICAgIC8vIOe1kOaenOOCkiBkYXRh5bGe5oCn44Gr5Y+N5pig44GZ44KLXG4gICAgICAgICAgICAvLyDliY3lm57jgajlkIzjgZjjgarjgonlj43mmKDjgZfjgarjgYRcbiAgICAgICAgICAgIGlmIChyZXN1bHRzX3N0ciAhPT0gdGhpcy5sYXN0X3Jlc3VsdHNfc3RyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0X3Jlc3VsdHNfc3RyID0gcmVzdWx0c19zdHI7XG4gICAgICAgICAgICAgICAgZ2V0X25vZGVfYXJyYXkodGhpcy50YXJnZXQpLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKEFUVFJfTkFNRSwgcmVzdWx0c19zdHIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICog5pyA5LiK6YOo44GL5pyA5LiL6YOo44GL44Gu44OB44Kn44OD44KvXG4gICAgICAgICovXG5cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19jaGVja190b3BfYW5kX2JvdHRvbScsXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY2hlY2tfdG9wX2FuZF9ib3R0b20oc2Nyb2xsX3RvcCkge1xuICAgICAgICAgICAgdmFyIG9wdCA9IHRoaXMub3B0O1xuICAgICAgICAgICAgdmFyIGRvY19oZWlnaHQgPSB0aGlzLmVsZW1lbnQgPyB0aGlzLmVsZW1lbnQuc2Nyb2xsSGVpZ2h0IDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIHZhciBzY3JvbGxfYm90dG9tID0gZG9jX2hlaWdodCAtIHRoaXMud2luX2hlaWdodDtcblxuICAgICAgICAgICAgLy8g5pyA5LiK6YOo44GLXG4gICAgICAgICAgICBpZiAoc2Nyb2xsX3RvcCA8PSBvcHQub2Zmc2V0X3RvcCkge1xuICAgICAgICAgICAgICAgIC8vIOODmuODvOOCuOacgOS4iumDqFxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc190b3ApIG9wdC5vblRvcCgpO1xuICAgICAgICAgICAgICAgI
2208HRoaXMuaXNfdG9wID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMucHVzaChBVFRSX1RPUCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIOacgOS4iumDqOOBi+OCiembouOCjOOBn1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzX3RvcCkgb3B0Lm9uTm90VG9wKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc190b3AgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMucHVzaChBVFRSX05PVF9UT1ApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyDmnIDkuIvpg6jjgYtcbiAgICAgICAgICAgIGlmIChzY3JvbGxfdG9wID49IHNjcm9sbF9ib3R0b20gLSBvcHQub2Zmc2V0X2JvdHRvbSkge1xuICAgICAgICAgICAgICAgIC8vIOODmuODvOOCuOacgOS4i+mDqFxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc19ib3R0b20pIG9wdC5vbkJvdHRvbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNfYm90dG9tID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMucHVzaChBVFRSX0JPVFRPTSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIOacgOS4i+mDqOOBi+OCiembouOCjOOBn1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzX2JvdHRvbSkgb3B0Lm9uTm90Qm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc19ib3R0b20gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMucHVzaChBVFRSX05PVF9CT1RUT00pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICog44Km44Kj44Oz44OJ44Km44KS44Oq44K144Kk44K644GX44Gf44KJ6auY44GV44Gq44Gp44KS44OB44Kn44OD44KvXG4gICAgICAgICovXG5cbiAgICB9LCB7XG4gICAgICAgIGtleTogJ19yZXNpemUnLFxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3Jlc2l6ZSgpIHtcbiAgICAgICAgICAgIHRoaXMud2luX2hlaWdodCA9IHRoaXMuZWxlbWVudCA/IHRoaXMuZWxlbWVudC5jbGllbnRIZWlnaHQgOiB3aW5kb3cud2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICB9XG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIF9jbGFzcztcbn0oKTtcblxuZnVuY3Rpb24gZ2V0X25vZGVfYXJyYXkobm9kZV9saXN0KSB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5vZGVfbGlzdCwgMCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IF9jbGFzcztcbiIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci
22085lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5IGluIG9iaikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbmV4cG9ydCB7IF9jbGFzc0NhbGxDaGVjayBhcyBjbGFzc0NhbGxDaGVjaywgX2NyZWF0ZUNsYXNzIGFzIGNyZWF0ZUNsYXNzLCBfZGVmaW5lUHJvcGVydHkgYXMgZGVmaW5lUHJvcGVydHkgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPV9yb2xsdXBQbHVnaW5CYWJlbEhlbHBlcnMuanMubWFwXG4iLCJpbXBvcnQgeyBjcmVhdGVDbGFzcyBhcyBfY3JlYXRlQ2xhc3MsIGNsYXNzQ2FsbENoZWNrIGFzIF9jbGFzc0NhbGxDaGVjaywgZGVmaW5lUHJvcGVydHkgYXMgX2RlZmluZVByb3BlcnR5IH0gZnJvbSAnLi9fdmlydHVhbC9fcm9sbHVwUGx1Z2luQmFiZWxIZWxwZXJzLmpzJztcblxuLyoqXG4gKiBTY3JvbGwgaW4gdmlld3BvcnQgYWRkIGRhdGEgYXR0cmlidXRlXG4gKiDjgrnjgq/jg63jg7zjg6vjgZfjgabjg5Pjg6Xjg7zjg53jg7zjg4jjgavlhaXjgaPjgZ/jgolkYXRh5bGe5oCn44KS5LiO44GI44KLXG4gKlxuICogQGF1dGhvciAgIEhpcm9zaGkgRnVrdWRhIDxpbmZvLnN5Z25hc0BnbWFpbC5jb20+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbnZhciBBVFRSX0lOVklFVyA9ICdkYXRhLWludmlldyc7XG52YXIgQVRUUl9ST09UID0gJ2RhdGEtaW52aWV3LXJvb3QnO1xudmFyIEFUVFJfTUFSR0lOID0gJ2RhdGEtaW52aWV3LXJvb3RNYXJnaW4nO1xudmFyIEFUVFJfVEhSRVNIT0xEID0gJ2RhdGEtaW52aWV3LXRocmVzaG9sZCc7XG52YXIgREVGQVVMVCA9IHtcbiAgcm9vdDogbnVsbCxcbiAgcm9vdE1hcmdpbjogJzBweCcsXG4gIHRocmVzaG9sZDogMFxufTtcbi8qKlxuICogaW4gdmlldyBjb250cm9sbGVyXG4gKi9cblxudmFyIF9kZWZhdWx0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIOOCs+ODs+OCueODiOODqeOCr+OCv1xuICAgKiDjgr/jg7zjgrLjg4Pjg4jkuIDopqfjgpLnsr7mn7vjgZfjgabjgIEgZGF0YS1pbnZpZXctcm9vdOOAgWRhdGEtaW52aWV3LXJvb3RNYXJnaW7jgIFkYXRhLWludmlldy10aHJlc2hvbGQg44GM6Kit5a6a44GV44KM44Gm44GE44Gq44GE44GL56K66KqN44GZ44KL44CCXG4gICAqIOS4iuiomOWxnuaAp+avjuOBqyBvYnNlcnZlciDjgpLkvZzmiJDjgZnjgovjgIJcbiAgICovXG4gIGZ1bmN0aW9uIF9kZWZhdWx0KHRhcmdldCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBfZGVmYXVsdCk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJvbkludmlld0Z1bmNcIiwgdW5kZWZpbmVkKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRhcmdldExpc3RcIiwgdm9pZCAwKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm9wdFwiLCB2b2lkIDApO1xuXG4gICAgdGhpcy50YXJnZXRMaXN0ID0ge307XG4gICAgdGhpcy5vcHQgPSBPYmplY3QuYXNzaWduKERFRkFVTFQsIG9wdGlvbik7XG4gICAgdGhpcy5vbkludmlld0Z1bmMgPSB1bmRlZmluZWQ7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0YXJnZXQpLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgX3RoaXMuaW5pdFRhcmdldExpc3QodGFyZ2V0KTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICog44K/44O844Ky44OD44OI44Go44Kq44OX44K344On44Oz44Gu566h55CG44Oq44K544OI44KS5L2c5oiQXG4gICAqL1xuXG5cbiAgX2NyZWF0ZUNsYXNzKF9kZWZhdWx0LCBbe1xuICAgIGtleTogXCJpbml0VGFyZ2V0TGlzdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0VGFyZ2V0TGlzdCh0YXJnZXQpIHtcbiAgICAgIC8vIOebo+imluWvvuixoeOCqOODrOODoeODs+ODiOOBq+eLrOiHquaMh+WumuOBjOOBguOCjOOBsOOBneOBoeOCieOCkuS9v+OBhuOAglxuICAgICAgLy8g54Sh44GR44KM44Gw44Kq44OX44K344On44Oz6Kit5a6a44KS5L2/44GGXG4gICAgICB2Y
2208XIgcm9vdCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoQVRUUl9ST09UKSB8fCB0aGlzLm9wdC5yb290O1xuICAgICAgdmFyIHJvb3RNYXJnaW4gPSB0YXJnZXQuZ2V0QXR0cmlidXRlKEFUVFJfTUFSR0lOKSB8fCB0aGlzLm9wdC5yb290TWFyZ2luO1xuICAgICAgdmFyIHRocmVzaG9sZCA9IE51bWJlcih0YXJnZXQuZ2V0QXR0cmlidXRlKEFUVFJfVEhSRVNIT0xEKSkgfHwgdGhpcy5vcHQudGhyZXNob2xkO1xuICAgICAgdmFyIGtleSA9IFwiXCIuY29uY2F0KHJvb3QsIFwiLVwiKS5jb25jYXQocm9vdE1hcmdpbiwgXCItXCIpLmNvbmNhdCh0aHJlc2hvbGQpO1xuXG4gICAgICBpZiAoa2V5IGluIHRoaXMudGFyZ2V0TGlzdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdmFyIG9wdGlvbiA9IHtcbiAgICAgICAgICByb290OiByb290LFxuICAgICAgICAgIHJvb3RNYXJnaW46IHJvb3RNYXJnaW4sXG4gICAgICAgICAgdGhyZXNob2xkOiB0aHJlc2hvbGRcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMub2JzZXJ2ZXJDYWxsYmFjay5iaW5kKHRoaXMpLCBvcHRpb24pO1xuICAgICAgICB0aGlzLnRhcmdldExpc3Rba2V5XSA9IHtcbiAgICAgICAgICBsaXN0OiBbXSxcbiAgICAgICAgICBvYnNlcnZlcjogb2JzZXJ2ZXJcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50YXJnZXRMaXN0W2tleV0ubGlzdC5wdXNoKHRhcmdldCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIOOCueOCr+ODreODvOODq+aknOefpeWHpueQhuOCkumWi+Wni1xuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwic3RhcnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnQoKSB7XG4gICAgICB2Y
2208XIgX3RoaXMyID0gdGhpcztcblxuICAgICAgT2JqZWN0LmtleXModGhpcy50YXJnZXRMaXN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRhcmdldE9iaiA9IF90aGlzMi50YXJnZXRMaXN0W2tleV07XG4gICAgICAgIHRhcmdldE9iai5saXN0LmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICAgIHRhcmdldE9iai5vYnNlcnZlci5vYnNlcnZlKHRhcmdldCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIOeUu+mdouOBq+WFpeOBo+OBn+OCiSBBVFRSX0lOVklFVyDjga5kYXRh5bGe5oCn44GrIHRydWUg44KS5YWl44KM44KL44CCXG4gICAgICog44Kq44OW44K244O844OQ44O844GL44KJ55uj6KaW6Kej6Zmk44GV44KM44KL44CCXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJvYnNlcnZlckNhbGxiYWNrXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG9ic2VydmVyQ2FsbGJhY2soZW50cmllcywgb2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHJldHVybjsgLy8gaW52aWV344GX44Gf5pmC44Gr5a6f6KGM44GZ44KL5aSW6YOo6Zai5pWwXG5cbiAgICAgICAgaWYgKF90aGlzMy5vbkludmlld0Z1bmMpIHtcbiAgICAgICAgICBfdGhpczMub25JbnZpZXdGdW5jKGVudHJ5LnRhcmdldCk7XG4gICAgICAgIH1cblxuICAgICAgICBvYnNlcnZlci51bm9ic2VydmUoZW50cnkudGFyZ2V0KTtcbiAgICAgICAgZW50cnkudGFyZ2V0LnNldEF0dHJpYnV0ZShBVFRSX0lOVklFVywgJ3RydWUnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBfZGVmYXVsdDtcbn0oKTtcblxuZXhwb3J0IHsgX2RlZmF1bHQgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXG4iLCJmdW5jdGlvbiBpbmRleCAodGltaW5nLCBmdW5jLCBzY29wZSkge1xuICAgIHZhciBpZCA9IG51bGw7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaWQgIT09IG51bGwpIHJldHVybjtcbiAgICAgICAgZnVuYy5hcHBseShzY29wZSk7XG5cbiAgICAgICAgaWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlkID0gbnVsbDtcbiAgICAgICAgfSwgdGltaW5nKTtcbiAgICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBpbmRleDtcbiIsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgY29tcHV0ZWQsIG9wZW5CbG9jaywgY3JlYXRlRWxlbWVudEJsb2NrLCBub3JtYWxpemVDbGFzcywgY3JlYXRlRWxlbWVudFZOb2RlLCB1bnJlZiwgcmVuZGVyU2xvdCwgcmVmLCB3YXRjaCwgb25Nb3VudGVkLCBvblVubW91bnRlZCwgY3JlYXRlQmxvY2ssIHJlc29sdmVEeW5hbWljQ29tcG9uZW50LCB3aXRoQ3R4LCBGcmFnbWVudCwgcmVuZGVyTGlzdCwgY3JlYXRlQ29tbWVudFZOb2RlIH0gZnJvbSAndnVlJztcblxuY29uc3QgX2hvaXN0ZWRfMSQxID0gW1widGFyZ2V0XCIsIFwicmVsXCIsIFwiaHJlZlwiLCBcImRhdGEtYWN0aXZlXCJdO1xuY29uc3QgX2hvaXN0ZWRfMiA9IFtcInRhcmdldFwiLCBcInJlbFwiLCBcImhyZWZcIiwgXCJkYXRhLWFjdGl2ZVwiXTtcbmNvbnN0IF9zZmNfbWFpbiQyID0gLyogQF9fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIHByb3BzOiB7XG4gICAgYWN0aXZlSWQ6IG51bGwsXG4gICAgaWQ6IG51bGwsXG4gICAgaHJlZjogbnVsbCxcbiAgICBpc0JsYW5rOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICBjbGFzc0l0ZW06IG51bGwsXG4gICAgY2xhc3NMaW5rOiBudWxsLFxuICAgIGlzTGlzdFRhZzogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgaGFuZGxDbGljazogbnVsbFxuICB9LFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgY29uc3QgcHJvcHMgPSBfX3Byb3BzO1xuICAgIGNvbnN0IGlzQWN0aXZlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgaWYgKHByb3BzLmhyZWYpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChwcm9wcy5hY3RpdmVJZCA9PT0gcHJvcHMuaWQpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGNvbnN0IGNsaWNrTGluayA9IChlKSA9PiB7XG4gICAgICBpZiAocHJvcHMuaHJlZilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBwcm9wcy5oYW5kbENsaWNrKHByb3BzLmlkKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9O1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMuaXNMaXN0VGFnID8gKG9wZW5CbG9jaygpLCBjcmVhdGVFbGVtZW50QmxvY2soXCJsaVwiLCB7XG4gICAgICAgIGtleTogMCxcbiAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKHByb3BzLmNsYXNzSXRlbSlcbiAgICAgIH0sIFtcbiAgICAgICAgY3JlYXRlRWxlbWVudFZOb2RlKFwiYVwiLCB7XG4gICAgICAgICAgdGFyZ2V0OiBwcm9wcy5pc0JsYW5rID8gXCJfYmxhbmtcIiA6IFwiXCIsXG4gICAgICAgICAgcmVsOiBwcm9wcy5pc0JsYW5rID8gXCJub29wZW5lciBub3JlZmVycmVyXCIgOiBcIlwiLFxuICAgICAgICAgIGhyZWY6IHByb3BzLmhyZWYsXG4gICAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKHByb3BzLmNsYXNzTGluayksXG4gICAgICAgICAgXCJkYXRhLWFjdGl2ZVwiOiB1bnJlZihpc0FjdGl2ZSkgPyBcInRydWVcIiA6IFwiXCIsXG4gICAgICAgICAgb25DbGljazogY2xpY2tMaW5rXG4gICAgICAgIH0sIFtcbiAgICAgICAgICByZW5kZXJTbG90KF9jdHguJHNsb3RzLCBcImRlZmF1bHRcIilcbiAgICAgICAgXSwgMTAsIF9ob2lzdGVkXzEkMSlcbiAgICAgIF0sIDIpKSA6IChvcGVuQmxvY2soKSwgY3JlYXRlRWxlbWVudEJsb2NrKFwiYVwiLCB7XG4gICAgICAgIGtleTogMSxcbiAgICAgICAgdGFyZ2V0OiBwcm9wcy5pc0JsYW5rID8gXCJfYmxhbmtcIiA6IFwiXCIsXG4gICAgICAgIHJlbDogcHJvcHMuaXNCbGFuayA/IFwibm9vcGVuZXIgbm9yZWZlcnJlclwiIDogXCJcIixcbiAgICAgICAgaHJlZjogcHJv
2208cHMuaHJlZixcbiAgICAgICAgY2xhc3M6IG5vcm1hbGl6ZUNsYXNzKHByb3BzLmNsYXNzTGluayksXG4gICAgICAgIFwiZGF0YS1hY3RpdmVcIjogdW5yZWYoaXNBY3RpdmUpID8gXCJ0cnVlXCIgOiBcIlwiLFxuICAgICAgICBvbkNsaWNrOiBjbGlja0xpbmtcbiAgICAgIH0sIFtcbiAgICAgICAgcmVuZGVyU2xvdChfY3R4LiRzbG90cywgXCJkZWZhdWx0XCIpXG4gICAgICBdLCAxMCwgX2hvaXN0ZWRfMikpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBFVl9DSEFOR0UgPSBcImNoYW5nZVwiO1xuY29uc3QgRVZfQ0xJQ0sgPSBcImNsaWNrXCI7XG5jb25zdCB0YWJHcm91cHMgPSByZWYoW10pO1xuY29uc3QgJF9nZXRHcm91cCA9IChncm91cElkKSA9PiB7XG4gIGNvbnN0IGdyb3VwID0gdGFiR3JvdXBzLnZhbHVlLmZpbmQoKGdyb3VwMikgPT4gZ3JvdXAyLmdyb3VwSWQgPT09IGdyb3VwSWQpO1xuICBpZiAoZ3JvdXApXG4gICAgcmV0dXJuIGdyb3VwO1xuICBjb25zdCBuZXdHcm91cCA9IHtcbiAgICBncm91cElkLFxuICAgIGFjdGl2ZUlkOiBcIlwiLFxuICAgIHRhYklkTGlzdDogW10sXG4gICAgaW50ZXJ2YWxJZDogMCxcbiAgICBldmVudHM6IG5ldyBFdmVudFRhcmdldCgpXG4gIH07XG4gIHRhYkdyb3Vwcy52YWx1ZS5wdXNoKG5ld0dyb3VwKTtcbiAgcmV0dXJuIHRhYkdyb3Vwcy52YWx1ZS5maW5kKChncm91cDIpID0+IGdyb3VwMi5ncm91cElkID09PSBncm91cElkKTtcbn07XG5mdW5jdGlvbiB1c2VUYWJDb250cm9sKGdyb3VwSWQsIGlzTWFzdGVyID0gZmFsc2UsIHVzZUhhc2ggPSBmYWxzZSkge1xuICByZXR1cm4gKCgpID0+IHtcbiAgICBjb25zdCAkX2dyb3VwID0gJF9nZXRHcm91cChncm91cElkKTtcbiAgICBjb25zdCBhY3RpdmVJZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiAkX2dyb3VwLmFjdGl2ZUlkO1xuICAgIH0pO1xuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuICRfZ3JvdXAudGFiSWRMaXN0LmluZGV4T2YoJF9ncm91cC5hY3RpdmVJZCk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0QWN0aXZlSWQgPSAoYWN0aXZlSWQyLCBpc1RhYkNsaWNrID0gZmFsc2UpID0+IHtcbiAgICAgICRfZ3JvdXAuYWN0aXZlSWQgPSBhY3RpdmVJZDI7XG4gICAgICBpZiAoaXNUYWJDbGljaykge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudChFVl9DTElDSywgeyBkZXRhaWw6IGFjdGl2ZUlkMiB9KTtcbiAgICAgICAgJF9ncm91cC5ldmVudHMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzZXRUYWJJZExpc3QgPSAoaWRMaXN0KSA9PiB7XG4gICAgICAkX2dyb3VwLnRhYklkTGlzdCA9IGlkTGlzdDtcbiAgICB9O1xuICAgIGNvbnN0IGNoYW5nZU5leHRUYWIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBuZXh0SW5kZXggPSAoYWN0aXZlSW5kZXgudmFsdWUgKyAxKSAlICRfZ3JvdXAudGFiSWRMaXN0Lmxlbmd0aDtcbiAgICAgIHNldEFjdGl2ZUlkKCRfZ3JvdXAudGFiSWRMaXN0W25leHRJbmRleF0pO1xuICAgIH07XG4gICAgY29uc3QgY2hhbmdlUHJldlRhYiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gYWN0aXZlSW5kZXgudmFsdWUgLSAxO1xuICAgICAgY29uc3QgcHJldkluZGV4ID0gaW5kZXggPD0gLTEgPyAkX2dyb3VwLnRhYklkTGlzdC5sZW5ndGggLSAxIDogaW5kZXg7XG4gICAgICBzZXRBY3RpdmVJZCgkX2dyb3VwLnRhYklkTGlzdFtwcmV2SW5kZXhdKTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZENoYW5nZUxpc3RlbmVyID0gKGZ1bmMpID0+IHtcbiAgICAgICRfZ3JvdXAuZXZlbnRzLmFkZEV2ZW50TGlzdGVuZXIoRVZfQ0hBTkdFLCBmdW5jKTtcbiAgICB9O1xuICAgIGNvbnN0IGFkZENsaWNrTGlzdGVuZXIgPSAoZnVuYykgPT4ge1xuICAgICAgJF9ncm91cC5ldmVudHMuYWRkRXZlbnRMaXN0ZW5lcihFVl9DTElDSywgZnVuYyk7XG4gICAgfTtcbiAgICBjb25zdCBzdGFydEF1dG9DaGFuZ2UgPSAodGltZSkgPT4ge1xuICAgICAgJF9ncm91cC5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBjaGFuZ2VOZXh0VGFiKCk7XG4gICAgICB9LCB0aW1lKTtcbiAgICB9O1xuICAgIGNvbnN0IHN0b3BBdXRvQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgY2xlYXJJbnRlcnZhbCgkX2dyb3VwLmludGVydmFsSWQpO1xuICAgIH07XG4gICAgd2F0Y2goYWN0aXZlSWQsICgpID0+IHtcbiAgICAgIGlmIChpc01hc3Rlcikge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudChFVl9DSEFOR0UsIHsgZGV0YWlsOiBhY3RpdmVJZC52YWx1ZSB9KTtcbiAgICAgICAgJF9ncm91cC5ldmVudHMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICB9XG4gICAgICBpZiAodXNlSGFzaCAmJiBpc01hc3Rlcikge1xuICAgICAgICBsb2NhdGlvbi5oYXNoID0gYWN0aXZlSWQudmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZUlkLFxuICAgICAgYWN0aXZlSW5kZXgsXG4gICAgICBzZXRBY3RpdmVJZCxcbiAgICAgIHNldFRhYklkTGlzdCxcbiAgICAgIGNoYW5nZU5leHRUYWIsXG4gICAgICBjaGFuZ2VQcmV2VGFiLFxuICAgICAgc3RhcnRBdXRvQ2hhbmdlLFxuICAgICAgc3RvcEF1dG9DaGFuZ2UsXG4gICAgICBhZGRDaGFuZ2VMaXN0ZW5lcixcbiAgICAgIGFkZENsaWNrTGlzdGVuZXJcbiAgICB9O1xuICB9KSgpO1xufVxuXG5jb25zdCBfaG9pc3RlZF8xID0gW1wiaW5uZXJIVE1MXCJdO1xuY29uc3QgX3NmY19tYWluJDEgPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgcHJvcHM6IHtcbiAgICBncm91cDogbnVsbCxcbiAgICBkZWZhdWx0OiB7IGRlZmF1bHQ6IFwiXCIgfSxcbiAgICBpdGVtczogbnVsbCxcbiAgICB1c2VIYXNoOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaXNMaXN0VGFnOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYXV0bzogbnVsbCxcbiAgICBpc1N0b3BBdXRvOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICBjbGFzc1RhYnM6IHsgZGVmYXVsdDogXCJjLXRhYm1lbnVcIiB9LFxuICAgIGNsYXNzSXRlbTogeyBkZWZhdWx0OiBcImMtdGFibWVudV9faXRlbVwiIH0sXG4gICAgY2xhc3NMaW5rOiB7IGRlZmF1bHQ6IFwiYy10YWJtZW51X19saW5rXCIgfVxuICB9LFxuICBzZXR1cChfX3Byb3BzKSB7XG4gICAgY29uc3QgcHJvcHMgP
2208SBfX3Byb3BzO1xuICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB1c2VUYWJDb250cm9sKHByb3BzLmdyb3VwLCB0cnVlLCBwcm9wcy51c2VIYXNoKTtcbiAgICBjb25zdCBpdGVtQ2xpY2tlZCA9IChpZCkgPT4ge1xuICAgICAgaWYgKGlkID09PSB0YWJDb250cm9sLmFjdGl2ZUlkLnZhbHVlKVxuICAgICAgICByZXR1cm47XG4gICAgICB0YWJDb250cm9sLnNldEFjdGl2ZUlkKGlkLCB0cnVlKTtcbiAgICAgIGlmIChwcm9wcy5pc1N0b3BBdXRvKSB7XG4gICAgICAgIHRhYkNvbnRyb2wuc3RvcEF1dG9DaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgICBjb25zdCBpZExpc3QgPSBwcm9wcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQpLm1hcCgoaXRlbSkgPT4gaXRlbS5pZCk7XG4gICAgICB0YWJDb250cm9sLnNldFRhYklkTGlzdChpZExpc3QpO1xuICAgICAgaWYgKHByb3BzLnVzZUhhc2ggJiYgbG9jYXRpb24uaGFzaCkge1xuICAgICAgICB0YWJDb250cm9sLnNldEFjdGl2ZUlkKGxvY2F0aW9uLmhhc2guc3Vic3RyKDEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhYkNvbnRyb2wuc2V0QWN0aXZlSWQocHJvcHMuZGVmYXVsdCk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuYXV0byAmJiBwcm9wcy5hdXRvID49IDEpIHtcbiAgICAgICAgdGFiQ29udHJvbC5zdGFydEF1dG9DaGFuZ2UocHJvcHMuYXV0byk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgb25Vbm1vdW50ZWQoKCkgPT4ge1xuICAgICAgdGFiQ29udHJvbC5zdG9wQXV0b0NoYW5nZSgpO1xuICAgIH0pO1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiB7XG4gICAgICByZXR1cm4gb3BlbkJsb2NrKCksIGNyZWF0ZUJsb2NrKHJlc29sdmVEeW5hbWljQ29tcG9uZW50KHByb3BzLmlzTGlzdFRhZyA/IFwidWxcIiA6IFwiZGl2XCIpLCB7XG4gICAgICAgIGNsYXNzOiBub3JtYWxpemVDbGFzcyhwcm9wcy5jbGFzc1RhYnMpXG4gICAgICB9LCB7XG4gICAgICAgIGRlZmF1bHQ6IHdpdGhDdHgoKCkgPT4gW1xuICAgICAgICAgIChvcGVuQmxvY2sodHJ1ZSksIGNyZWF0ZUVsZW1lbnRCbG9jayhGcmFnbWVudCwgbnVsbCwgcmVuZGVyTGlzdChwcm9wcy5pdGVtcywgKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gb3BlbkJsb2NrKCksIGNyZWF0ZUJsb2NrKF9zZmNfbWFpbiQyLCB7XG4gICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICAgICAgICBcImFjdGl2ZS1pZFwiOiB1bnJlZih0YWJDb250cm9sKS5hY3RpdmVJZC52YWx1ZSxcbiAgICAgICAgICAgICAgaHJlZjogaXRlbS5ocmVmIHx8IFwiXCIsXG4gICAgICAgICAgICAgIFwiaXMtYmxhbmtcIjogaXRlbS5pc0JsYW5rIHx8IGZhbHNlLFxuICAgICAgICAgICAgICBcImNsYXNzLWl0ZW1cIjogcHJvcHMuY2xhc3NJdGVtLFxuICAgICAgICAgICAgICBcImNsYXNzLWxpbmtcIjogcHJvcHMuY2xhc3NMaW5rLFxuICAgICAgICAgICAgICBcImlzLWxpc3QtdGFnXCI6IHByb3BzLmlzTGlzdFRhZyxcbiAgICAgICAgICAgICAgXCJoYW5kbC1jbGlja1wiOiBpdGVtQ2xpY2tlZFxuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICBkZWZhdWx0OiB3aXRoQ3R4KCgpID0+IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50Vk5vZGUoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgIGlubmVySFRNTDogaXRlbS52YWx1ZVxuICAgICAgICAgICAgICAgIH0sIG51bGwsIDgsIF9ob2lzdGVkXzEpXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICBfOiAyXG4gICAgICAgICAgICB9LCAxMDMyLCBbXCJpZFwiLCBcImFjdGl2ZS1pZFwiLCBcImhyZWZcIiwgXCJpcy1ibGFua1wiLCBcImNsYXNzLWl0ZW1cIiwgXCJjbGFzcy1saW5rXCIsIFwiaXMtbGlzdC10YWdcIl0pO1xuICAgICAgICAgIH0pLCAxMjgpKVxuICAgICAgICBdKSxcbiAgICAgICAgXzogMVxuICAgICAgfSwgOCwgW1wiY2xhc3NcIl0pO1xuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBfc2ZjX21haW4gPSAvKiBAX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgcHJvcHM6IHtcbiAgICBncm91cDogbnVsbCxcbiAgICB0YWJJZDogbnVsbCxcbiAgICB0YWc6IHsgZGVmYXVsdDogXCJkaXZcIiB9XG4gIH0sXG4gIHNldHVwKF9fcHJvcHMpIHtcbiAgICBjb25zdCBwcm9wcyA9IF9fcHJvcHM7XG4gICAgY29uc3QgdGFiQ29udHJvbCA9IHVzZVRhYkNvbnRyb2wocHJvcHMuZ3JvdXApO1xuICAgIHJldHVybiAoX2N0eCwgX2NhY2hlKSA9PiB7XG4gICAgICByZXR1cm4gcHJvcHMudGFiSWQgPT09IHVucmVmKHRhYkNvbnRyb2wpLmFjdGl2ZUlkLnZhbHVlID8gKG9wZW5CbG9jaygpLCBjcmVhdGVCbG9jayhyZXNvbHZlRHluYW1pY0NvbXBvbmVudChwcm9wcy50YWcpLCB7IGtleTogMCB9LCB7XG4gICAgICAgIGRlZmF1bHQ6IHdpdGhDdHgoKCkgPT4gW1xuICAgICAgICAgIHJlbmRlclNsb3QoX2N0eC4kc2xvdHMsIFwiZGVmYXVsdFwiKVxuICAgICAgICBdKSxcbiAgICAgICAgXzogM1xuICAgICAgfSkpIDogY3JlYXRlQ29tbWVudFZOb2RlKFwiXCIsIHRydWUpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBfc2ZjX21haW4kMSBhcyBWdWVUYWJzLCBfc2ZjX21haW4gYXMgVnVlVGFic0NvbnRlbnQsIHVzZVRhYkNvbnRyb2wgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZ1ZS10YWJzLmVzLmpzLm1hcFxuIiwiLy8g5YWo44Oa44O844K45YWx6YCa5Yem55CGXG5cbi8qIGVzbGludCBuby11bnVzZWQtdmFyczpvZmYgKi9cbi8qIGVzbGludCBuby1jb25zb2xlOm9mZiAqL1xuXG4vLyDnlLvlg4/jga7pgYXlu7boqq3jgb/ovrzjgb9cbmltcG9ydCBsYXp5bG9hZCBmcm9tICcuL2xhenlsb2FkJztcbi8vIOODoeODh+OCo+OCouOCr+OCqOODquODvOeuoeeQhlxuaW1wb3J0IG1lZGlhcXVlcnkgZnJvbSAnLi9tZWRpYXF1ZXJ5Jztcbi8vIOODpuODvOOCtuODvOOCqOODvOOCuOOCp+ODs+ODiOWIpOWumlxuaW1wb3J0IGNoZWNrX3VhIGZyb20gJy4vY2hlY2stdWEnO1xuLy8g44Oa44O844K45YaF44K544Kv44Ot44O844OrXG5pbXBvcnQgcGFnZXNjcm9sbCBmcm9tICcuL3BhZ2VzY3JvbGwnO
22081xuLy8g55S76Z2i5L2N572u44Gr5b+c44GY44Gf44GmIGRhdGEg5bGe5oCn5aSJ5YyW44CC44Oa44O844K444OI44OD44OX5oi744KL44Oc44K/44Oz44Gq44GpXG5pbXBvcnQgc2Nyb2xsX2Ftb3VudCBmcm9tICcuL3Njcm9sbC1hbW91bnQnO1xuLy8g44K944O844K344Oj44Or44K344Kn44Ki44Oc44K/44OzXG5pbXBvcnQgc29jaWFsX3NoYXJlIGZyb20gJy4vc29jaWFsLXNoYXJlJztcbi8vIOODneODg+ODl+OCouODg+ODl1xuaW1wb3J0IHBvcHVwIGZyb20gJy4vY29tbW9uX3BvcHVwJztcbi8vIOOCquODvOODh+OCo+OCquWGjeeUn+ODnOOCv+ODs1xuLy8gaW1wb3J0IGF1ZGlvIGZyb20gJy4vY29tbW9uX2F1ZGlvJztcbi8vIOODoeOCpOODs+ODoeODi+ODpeODvFxuaW1wb3J0IG1lbnUgZnJvbSAnLi9tZW51Jztcbi8vIOODmuODvOOCuOiqreOBv+i+vOOBv1xuaW1wb3J0IGxvYWRpbmcgZnJvbSAnLi9sb2FkaW5nJztcbi8vIOODmuODvOOCuOiqreOBv+i+vOOBv+WujOS6hlxuaW1wb3J0IGxvYWRpbmdfY29tcGxldGUgZnJvbSAnLi9sb2FkaW5nX2NvbXBsZXRlJztcbi8vIOWFsemAmuOBruOCv+ODllxuaW1wb3J0IHRhYnMgZnJvbSAnLi90YWJzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBsYXp5bG9hZCgpO1xuICBtZWRpYXF1ZXJ5KCk7XG4gIGNoZWNrX3VhKCk7XG4gIHBhZ2VzY3JvbGwoKTtcbiAgc2Nyb2xsX2Ftb3VudCgpO1xuICBzb2NpYWxfc2hhcmUoKTtcbiAgbWVudSgpO1xuICBwb3B1cCgpO1xuICAvLyBhdWRpbygpO1xuICB0YWJzKCk7XG4gIGxvYWRpbmcoKS50aGVuKGxvYWRpbmdfY29tcGxldGUpO1xufVxuIiwiLyoqXG4gKiBmYW5jeWJveDMg44KS5L2/44Gj44Gf44Od44OD44OX44Ki44OD44OXXG4gKiBodHRwOi8vdXp1cmVhLm5ldC9leHBsYW5hdGlvbi1vZi1mYW5jeWJveDMvXG4gKi9cblxuaW1wb3J0IGxhenlsb2FkIGZyb20gJy4vbGF6eWxvYWQnO1xuXG5jb25zdCBjbG9zZUJ1dHRvbiA9XG4gICc8YnV0dG9uIGRhdGEtZmFuY3lib3gtY2xvc2UgY2xhc3M9XCJmYW5jeWJveC1idXR0b24gZmFuY3lib3gtYnV0dG9uLS1jbG9zZVwiIHRpdGxlPVwie3tDTE9TRX19XCI+PGkgY2xhc3M9XCJpLWFycm93cy10aW1lcy0xXCI+PC9pPjwvYnV0dG9uPic7XG5cbi8vIOeUu+WDj+OChFlvdXR1YmVcbi8vIDxhIGhyZWY9XCJ5b3V0dWJlIHVybFwiIGRhdGEtZmFuY3lib3g+XG5leHBvcnQgY29uc3QgTk9STUFMX1NFVFRJTkdTID0ge1xuICBtYWluQ2xhc3M6ICcnLFxuICBkcmFnVG9DbG9zZTogZmFsc2UsXG4gIHRwbDogeyBjbG9zZUJ1dHRvbiB9LFxufTtcblxuZXhwb3J0IGNvbnN0IEFKQVhfU0VUVElOR1MgPSB7XG4gIHR5cGU6ICdhamF4JyxcbiAgaW5mb2JhcjogZmFsc2UsXG4gIHRvb2xiYXI6IHRydWUsXG4gIGJ1dHRvbnM6IFsnY2xvc2UnXSxcbiAgYnRuVHBsOiB7XG4gICAgY2xvc2U6IGNsb3NlQnV0dG9uLFxuICB9LFxuICBzbWFsbEJ0bjogZmFsc2UsXG4gIGJlZm9yZVNob3c6IChpbnN0YW5jZSwgY3VycmVudCkgPT4ge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gY3VycmVudC5zcmM7XG4gIH0sXG4gIGFmdGVyU2hvdzogKCkgPT4ge1xuICAgIGxhenlsb2FkKCk7XG4gIH0sXG4gIGJlZm9yZUNsb3NlOiAoKSA9PiB7XG4gICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSAnJztcbiAgfSxcbn07XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICAkKCdbZGF0YS1mYW5jeWJveF0nKS5mYW5jeWJveCh7XG4gICAgaW5mb2JhcjogZmFsc2UsXG4gICAgdG9vbGJhcjogdHJ1ZSxcbiAgICBidXR0b25zOiBbJ2Nsb3NlJ10sXG4gICAgYnRuVHBsOiB7XG4gICAgICBjbG9zZTpcbiAgICAgICAgJzxidXR0b24gZGF0YS1mYW5jeWJveC1jbG9zZSBjbGFzcz1cImZhbmN5Ym94LWJ1dHRvbiBmYW5jeWJveC1idXR0b24tLWNsb3NlXCIgdGl0bGU9XCJ7e0NMT1NFfX1cIj48aSBjbGFzcz1cImktYXJyb3dzLXRpbWVzLTFcIj48L2k+PC9idXR0b24+JyxcbiAgICB9LFxuICB9KTtcblxuICAkKCdbZGF0YS1mYW5jeWJveC1hamF4XScpLmZhbmN5Ym94KEFKQVhfU0VUVElOR1MpO1xufVxuIiwiLyoqXG4gKiDnlLvlg4/jga7pgYXlu7boqq3jgb/ovrzjgb9cbiAqIGh0dHBzOi8vbm90ZXMuc2hhcmVzbC5uZXQvYXJ0aWNsZXMvMTI3MS9cbiAqXG4gKiA8aW1nIHNyYz1cImR1bW15LnBuZ1wiIGRhdGEtc3JjPVwiaG9nZS5qcGdcIiBjbGFzcz1cImpzLWxhenlcIj5cbiAqIGRhdGEtc3JjIOWxnuaAp+OBq+mBheW7tuiqreOBv+i+vOOBv+OBleOBm+OBn+OBhOeUu+WDj+OCkuaMh+WumuOBmeOCi+OAglxuICpcbiAqIGRhdGEtc3JjIDogc3Jj44Gr44K744OD44OI44GV44KM44KLXG4gKiBkYXRhLXNyY3NldCA6IHNyY3NldOOBq+OCu+ODg+ODiOOBleOCjOOCi1xuICogZGF0YS1iZyA6IGJhY2tncm91bmRJbWFnZeOBq+OCu+ODg+ODiOOBleOCjOOCi1xuXG4gKi9cblxuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOm9mZiAqL1xuLyogZXNsaW50IEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyczpvZmYgKi9cblxuaW1wb3J0IGxhenlTaXplcyBmcm9tICdsYXp5c2l6ZXMnO1xuaW1wb3J0IHVudmVpbGhvb2tzIGZyb20gJ2xhenlzaXplcy9wbHVnaW5zL3VudmVpbGhvb2tzL2xzLnVudmVpbGhvb2tzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBsYXp5U2l6ZXMuY2ZnLmxhenlDbGFzcyA9ICdqcy1sYXp5Jztcbn1cbiIsIi8qKlxuICog44Oa44O844K46Kqt44G/6L6844G/44OX44Ot44Kw44Os44K544OQ44O8XG4gKi9cblxuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOm9mZiAqL1xuLyogZXNsaW50IEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyczpvZmYgKi9cblxuaW1wb3J0IHByZWxvYWRlciBmcm9tICdwcmVsb2FkZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoYWRkX3VybHMgPSBbXSkge1xuICAvLyDjg5fjg63jgrDjg6zjgrnjg5Djg7zjgqjjg6zjg6Hjg7Pjg4hcbiAgY29uc3QgJHByb2dyZXNzX2JhciA9ICQoJy5qcy1sb2FkaW5nLXByb2dyZXNzJyk7XG4gIC8vIOODl+ODquODreODvOODgOODvFxuICBjb25zdCBsb2FkZXIgPSBwcmVsb2FkZXIoeyB4aHJJbWFnZXM6IGZhbHNlIH0pO1xuXG4gIC8vIHVybOODquOCueODiOS9nOaIkFxuICBjb25zdCBpbWFnZV91cmxzID0gZ2V0X2ltYWdlX2xpc3QoKTtcbiAgY29uc3QgdXJscyA9IE9iamVjdC5hc3NpZ24oaW1hZ2VfdXJscywgYWRkX3VybHMpO1xuXG4gIC8vIFByb21pc2XjgpLov5TjgZlcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAvLyDjg5fjg6rjg63jg7zjg4Djg7zjgavnmbvpjLJcbiAgICB1cmxzLmZvckVhY2goKHVybCkgPT4ge1xuICAgICAgbG9hZGVyLmFkZCh1cmwpO1xuICAgIH0pO1xuXG4gICAgLy8g6Kqt44G/6L6844G/5Lit77ya44OQ44O844Ko44Os44Oh44Oz44OI44Gu5bmF6Kq/5pW0XG4gICAgbG9hZGVyLm9uKCdwcm9ncmVzcycsIChwZXJjZW50LCB1cmwpID0+IHtcbiAgICAgICRwcm9ncmVzc19iYXIuY3NzKHsgd2lkdGg6IGAke3BlcmNlbnQgKiAxMDB9JWAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyDoqq3jgb/ovrzjgb/lrozkuoZcbiAgICAvLyDoqq3jgb/ovrzjgb/lrozkuobpgJr
2208nn6XjgIHjg5fjg63jgrDjg6zjgrnjgqjjg6zjg6Hjg7Pjg4jjgpLluYUxMDAl44Gr44GZ44KLXG4gICAgbG9hZGVyLm9uKCdjb21wbGV0ZScsICgpID0+IHtcbiAgICAgICRwcm9ncmVzc19iYXIuY3NzKHsgd2lkdGg6ICcxMDAlJyB9KTtcbiAgICAgICQod2luZG93KS50cmlnZ2VyKCdwYWdlX2xvYWRfY29tcGxldGUnKTtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcblxuICAgIC8vIOiqreOBv+i+vOOBv+mWi+Wni1xuICAgIGxvYWRlci5sb2FkKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIDxpbWc+IOOCkuODgeOCp+ODg+OCr+OBmeOCi1xuICogQHJldHVybiB1cmxzIHtBcnJheX0gVVJM44Gu6YWN5YiXXG4gKi9cbmZ1bmN0aW9uIGdldF9pbWFnZV9saXN0KCkge1xuICBjb25zdCBob3N0bmFtZSA9IC9eaHR0cHM/OlxcL1xcL1teL10rXFwvLy5leGVjKHdpbmRvdy5sb2NhdGlvbi5ocmVmKVswXTtcbiAgY29uc3QgaW1hZ2VzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuICBjb25zdCB1cmxzID0gW107XG5cbiAgLy8gPGltZz7jgr/jgrDjgpLlhajjgabjg4Hjgqfjg4Pjgq9cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBzcmMgPSBpbWFnZXNbaV0uc3JjO1xuICAgIC8vIOmBleOBhuODm+OCueODiOOBruOCguOBruOBr+W8vuOBj1xuICAgIGlmIChzcmMuaW5kZXhPZihob3N0bmFtZSkgPT09IDApIHtcbiAgICAgIHVybHMucHVzaChzcmMpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdXJscztcbn1cbiIsIi8qKlxuICog44Oa44O844K46Kqt44G/6L6844G/44GM57WC44KP44Gj44Gf5b6M44Gu5Yem55CGXG4gKi9cblxuLy8g44K544Kv44Ot44O844Or5qSc55+l6KGo56S6XG5pbXBvcnQgaW52aWV3IGZyb20gJy4vc2Nyb2xsLWludmV3JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBzZXRUaW1lb3V0KGZhZGVpbiwgMjAwKTtcbiAgc2V0VGltZW91dChyZW1vdmVfZmFkZWluLCAxMjAwKTtcbiAgc2V0VGltZW91dChpbnZpZXcsIDEyMDApO1xufVxuXG4vKipcbiAqIOODleOCp+ODvOODieOCpOODs+OBleOBm+OCi1xuICovXG5mdW5jdGlvbiBmYWRlaW4oKSB7XG4gICQoJy5qcy1mYWRlaW4nKS5hdHRyKCdkYXRhLXByb2dyZXNzLWZpbmlzaCcsICd0cnVlJyk7XG4gIC8vICQoJy5qcy1sb2FkaW5nJykuYXR0cignZGF0YS1sb2FkaW5nLWZpbmlzaCcsICd0cnVlJyk7XG4gIC8vIC8vIOODleOCp+ODvOODieOCpOODs+OCpOODmeODs+ODiOOBrumAmuefpVxuICAvLyAkKHdpbmRvdykudHJpZ2dlcigncGFnZV9mYWRlaW4nKTtcbn1cblxuLyoqXG4gKiDjg5Xjgqfjg7zjg4njgqTjg7Pjgqjjg6zjg6Hjg7Pjg4jjgpLliYrpmaRcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlX2ZhZGVpbigpIHtcbiAgJCgnLmpzLWZhZGVpbicpLnJlbW92ZSgpO1xufVxuIiwiLyoqXG4gKiDjg6bjg7zjgrbjg7zjgqjjg7zjgrjjgqfjg7Pjg4jnorroqo1cbiAqIE9T44KS6KaL44Gm44K544Oe44Ob57O744Gg44Go5Yik5a6a44GX44Gf44KJIDxib2R5IGRhdGEtaXMtbW9iaWxlPVwidHJ1ZVwiPiDjgpLoqK3lrprjgZnjgotcbiAqIFBD44Gg44Go5Yik5a6a44GX44Gf44KJIDxib2R5IGRhdGEtaXMtbW9iaWxlPVwiZmFsc2VcIj4g44KS6Kit5a6aXG4gKi9cblxuaW1wb3J0IGlzVG91Y2hEZXZpY2UgZnJvbSAnaXMtdG91Y2gtZGV2aWNlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKCkge1xuICBpZiAoaXNUb3VjaERldmljZSgpKSB7XG4gICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtbW9iaWxlJywgJ3RydWUnKTtcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgnZGF0YS1pcy1tb2JpbGUnLCAnZmFsc2UnKTtcbiAgfVxufVxuIiwiLyoqXG4gKiDjg6Hjg4fjgqPjgqLjgq/jgqjjg6rjg7zjgpLnrqHnkIZcbiAqL1xuXG5pbXBvcnQgTWVkaWFxdWVyeSBmcm9tICdAc3lnbmFzL21lZGlhcXVlcnknO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gIC8vIE1lZGlhcXVlcnkuYWRkTWVkaWEoJ3BjJywgJ3NjcmVlbiBhbmQgKG1pbi13aWR0aDogODUxcHgpJyk7XG4gIC8vIE1lZGlhcXVlcnkuYWRkTWVkaWEoJ3RiJywgJ3NjcmVlbiBhbmQgKG1pbi13aWR0aDogNTUxcHgpIGFuZCAobWF4LXdpZHRoOiA4NTBweCknKTtcbiAgLy8gTWVkaWFxdWVyeS5hZGRNZWRpYSgndGItbG8nLCAnc2NyZWVuIChtYXgtd2lkdGg6IDg1MHB4KScpO1xuICAvLyBNZWRpYXF1ZXJ5LmFkZE1lZGlhKCdzcC11cCcsICdzY3JlZW4gYW5kIChtaW4td2lkdGg6IDU1MXB4KScpO1xuICAvLyBNZWRpYXF1ZXJ5LmFkZE1lZGlhKCdzcCcsICdzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU1MHB4KScpO1xuXG4gIE1lZGlhcXVlcnkuYWRkTWVkaWEoJ3BjJywgJ3NjcmVlbiBhbmQgKG1pbi13aWR0aDogODAxcHgpJyk7XG4gIE1lZGlhcXVlcnkuYWRkTWVkaWEoJ3NwJywgJ3NjcmVlbiBhbmQgKG1heC13aWR0aDogODAwcHgpJyk7XG59XG4iLCIvKipcbiAqIOODoeOCpOODs+ODoeODi+ODpeODvFxuICovXG5jb25zdCBnZXRIYW1idXJnZXIgPSAoKSA9PiB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanMtaGFtYnVyZ2VyJykgYXMgSFRNTEVsZW1lbnQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gIC8vIOOCr+ODquODg+OCr+OBpyBkYXRhLWhhbWJ1cmdlci1vcGVuID0gXCJ0cnVlXCIg44Gr44GZ44KLXG4gIGNvbnN0ICRoYW1idXJnZXIgPSAkKCcuanMtaGFtYnVyZ2VyJyk7XG5cbiAgLy8g44OP44Oz44OQ44O844Ks44O844Oc44K/44Oz44Gu44Kv44Oq44OD44Kv44Gn44Oh44OL44Ol44O844Gu6ZaL6ZaJXG4gICRoYW1idXJnZXIub24oJ2NsaWNrJywgdG9nZ2xlX21lbnUpO1xuXG4gIC8vIOODoeODi+ODpeODvOOBruODnOOCv+ODs+OCkuaKvOOBl+OBpuOCgumWi+mWieOBmeOCi1xuICAkKCcuYy1tYWlubWVudSBhLmpzLXBhZ2VzY3JvbGwnKS5vbignY2xpY2snLCB0b2dnbGVfbWVudSk7XG5cbiAgLy8g44K144OW44Oh44OL44Ol44O86ZaL6ZaJXG4gICQoJy5qcy1oYXMtc3VibWVudScpLm9uKCdjbGljaycsIHRvZ2dsZV9zdWJtZW51KTtcbn1cblxuLyoqXG4gKiDjg6Hjg4vjg6Xjg7zjgpLplovplonjgZnjgotcbiAqIEBwYXJhbSB7RXZlbn
2208R9IGV2IOOCr+ODquODg+OCr+OCpOODmeODs+ODiFxuICovXG5mdW5jdGlvbiB0b2dnbGVfbWVudShldikge1xuICAvLyDjg4/jg7Pjg5Djg7zjgqzjg7zjg6Hjg4vjg6Xjg7zjga7liIfjgormm7/jgYhcbiAgY29uc3QgaGFtYnVyZ2VyID0gZ2V0SGFtYnVyZ2VyKCk7XG4gIGNvbnN0IHN0YXRlID0gaGFtYnVyZ2VyPy5nZXRBdHRyaWJ1dGUoJ2RhdGEtaGFtYnVyZ2VyLW9wZW4nKTtcbiAgY29uc3QgaXNfb3BlbiA9IHN0YXRlID09PSAndHJ1ZScgPyAnZmFsc2UnIDogJ3RydWUnO1xuICBoYW1idXJnZXIuc2V0QXR0cmlidXRlKCdkYXRhLWhhbWJ1cmdlci1vcGVuJywgaXNfb3Blbik7XG5cbiAgLy8g44K544Oe44Ob55So44Oh44OL44Ol44O844Gu44Ko44OV44Kn44Kv44OIXG4gICQoJy5qcy1zcC1tZW51JykuYXR0cignZGF0YS1zcC1tZW51JywgaXNfb3BlbiA9PT0gJ3RydWUnID8gJ29wZW4nIDogJ2Nsb3NlJyk7XG5cbiAgaWYgKGV2LmN1cnJlbnRUYXJnZXQgPT09IGhhbWJ1cmdlcikge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cblxuLyoqXG4gKiDjgrXjg5bjg6Hjg4vjg6Xjg7zjga7plovplolcbiAqIEBwYXJhbSB7RXZlbnR9IGV2IOOCr+ODquODg+OCr+OCpOODmeODs+ODiFxuICovXG5mdW5jdGlvbiB0b2dnbGVfc3VibWVudShldikge1xuICAvLyDjg6Hjg4vjg6Xjg7zjg5zjgr/jg7PjgajjgIHlhYTlvJ/opoHntKDjga7jgrXjg5bjg6Hjg4vjg6Xjg7xcbiAgY29uc3QgJGJ1dHRvbiA9ICQoZXYuY3VycmVudFRhcmdldCk7XG4gIGNvbnN0ICRzdWJtZW51ID0gJGJ1dHRvbi5uZXh0KCk7XG4gIGNvbnN0IGlzX29wZW5lZCA9ICRidXR0b24uYXR0cignZGF0YS1zdWJtZW51LW9wZW5lZCcpID09PSAndHJ1ZSc7XG5cbiAgaWYgKGlzX29wZW5lZCkge1xuICAgICRidXR0b24uYXR0cignZGF0YS1zdWJtZW51LW9wZW5lZCcsICdmYWxzZScpO1xuICAgICRzdWJtZW51LmF0dHIoJ2RhdGEtc3VibWVudS1vcGVuZWQnLCAnZmFsc2UnKTtcbiAgfSBlbHNlIHtcbiAgICAkYnV0dG9uLmF0dHIoJ2RhdGEtc3VibWVudS1vcGVuZWQnLCAndHJ1ZScpO1xuICAgICRzdWJtZW51LmF0dHIoJ2RhdGEtc3VibWVudS1vcGVuZWQnLCAndHJ1ZScpO1xuICB9XG4gIGV2LnByZXZlbnREZWZhdWx0KCk7XG59XG4iLCIvKipcbiAqIOODmuODvOOCuOWGheOCueOCr+ODreODvOODq1xuICogaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvc21vb3RoLXNjcm9sbFxuICogPGEgaHJlZj1cIiN0YXJnZXRcIiBjbGFzcz1cImpzLXBhZ2VzY3JvbGxcIj5cbiAqXG4gKiDjgrnjgq/jg63jg7zjg6vjgpLnmbrnlJ/jgZXjgZvjgovjgZPjgajjgoLlj6/og71cbiAqIHNjcm9sbC5hbmltYXRlU2Nyb2xsKFxuICogICB0YXJnZXRfeSxcbiAqICAgJycsXG4gKiAgIHtcbiAqICAgICAgIHNwZWVkOiAxNTAwLFxuICogICAgICAgZWFzaW5nOiAnZWFzZUluT3V0Q3ViaWMnXG4gKiAgIH1cbiAqICk7XG4gKlxuICog44Kt44Oj44Oz44K744Or44KC5Y+v6IO9XG4gKiBzY3JvbGwuY2FuY2VsU2Nyb2xsKCk7XG4gKlxuICovXG5cbi8qIGVzbGludCBuby11bnVzZWQtdmFyczpvZmYgKi9cbi8qIGVzbGludCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnM6b2ZmICovXG5cbmltcG9ydCBTbW9vdGhTY3JvbGwgZnJvbSAnc21vb3RoLXNjcm9sbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgLy8g5rGO55So44K544Kv44Ot44O844OrXG4gIGNvbnN0IGNsaWNrX3Njcm9sbCA9IG5ldyBTbW9vdGhTY3JvbGwoJ2EuanMtcGFnZXNjcm9sbCcsIHtcbiAgICBzcGVlZDogNTAwLFxuICAgIG9mZnNldDogODAsXG4gICAgZWFzaW5nOiAnZWFzZUluT3V0Q3ViaWMnLFxuICB9KTtcblxuICBjb25zdCBzY3JvbGwgPSBuZXcgU21vb3RoU2Nyb2xsKCk7XG5cbiAgLy8g44Oa44O844K444OI44OD44OX44Gr44K544Kv44Ot44O844OrXG4gICQoJy5qcy1yZXR1cm4tdXAnKS5vbignY2xpY2snLCAoZXYpID0+IHtcbiAgICBzY3JvbGwuYW5pbWF0ZVNjcm9sbCgwLCBudWxsLCB7XG4gICAgICBzcGVlZDogNTAwLFxuICAgICAgb2Zmc2V0OiAwLFxuICAgICAgZWFzaW5nOiAnZWFzZUluT3V0Q3ViaWMnLFxuICAgIH0pO1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gIH0pO1xufVxuIiwiLyoqXG4gKiDnlLvpnaLlhoXjga7kvY3nva7jgavlv5zjgZjjgaYgZGF0YS1zY3JvbGwtYW1vdW50IOWxnuaAp+OCkuWkieWMluOBleOBm+OCi1xuICog44CM44Oa44O844K444OI44OD44OX44Gr5oi744KL44Oc44K/44Oz44CN44Gu6KGo56S65YiH44KK5pu/44GI44Gq44GpXG4gKi9cblxuLyogZXNsaW50IG5vLXVudXNlZC12YXJzOm9mZiAqL1xuLyogZXNsaW50IEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyczpvZmYgKi9cblxuaW1wb3J0IFNjcm9sbEFtb3VudCBmcm9tICdAc3lnbmFzL3Njcm9sbC1hbW91bnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNjcm9sbF9hbW91bnQgPSBuZXcgU2Nyb2xsQW1vdW50KCcuanMtc2Nyb2xsLWFtb3VudCcpO1xufVxuIiwiLyoqXG4gKiDjgrnjgq/jg63jg7zjg6sgaW4gVmlld1xuICog55S76Z2i44Gr5YWl44KL44GoIGRhdGEtaW52aWV3IOWxnuaAp+OBjOOAjHRydWXjgI3jgavjgarjgovjga7jgafjgIFcbiAqIGNzcyDlgbTjgafjgqjjg5Xjgqfjgq/jg4jjgpLliLblvqHjgZnjgotcbiAqL1xuXG5pbXBvcnQgSW5WaWV3IGZyb20gJ0BzeWduYXMvc2Nyb2xsLWludmlldyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgaW52aWV3ID0gbmV3IEluVmlldygnLmpzLWludmlldycsIHsgcm9vdE1hcmdpbjogJzBweCAwcHggLTIwJSAwcHgnIH0pO1xuICBpbnZpZXcuc3RhcnQoKTtcbn1cbiIsIi8qKlxuICog44K944O844K344Oj44Or44K344Kn44Ki44Oc44K/44OzXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3lnbmFzL3N5Zy1qcC1zb2NpYWwtc2hhcmVcbiAqL1xuXG5pbXBvcnQgc29jaWFsU2hhcmUgZnJvbSAnQHN5Z25hcy9qcC1zb2NpYWwtc2hhcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gIHNvY2lhbFNoYXJlLnNldFNoYXJlQnV0dG9uKCcuanMtc2hhcmUtYnV0dG9uJyk7XG59XG4iLCIvKipcbiAqIOaUvumAgeaDheWgseOAgeOCueOCv+ODg+ODleOAgeOCueODmuOCt+ODo+ODq+OBquOBqeOCv+ODluODoeODi+ODpeODvOOCkuS9v+OBhuWFsemAmuOCueOCr+ODquODl+ODiFxuICogaWQ9XCJhcHAtdGFiXCIg5YaF44KS5pON5L2c44CCXG4gKiDku5bjga4gVnVlIOOCpOODs+OCueOCv+ODs+OCueOBqOiiq+OCieOBquOBhOOCiOOBhuOBq+azqOaEj1xuICovXG4vKiBlc2xpbnQgbm8tbmV3Om9mZiAqL1xuLyogLy8gZXNsaW50IGltcG9ydC9uby11bnJlc29sdmVkOm9mZiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVBcHAgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgVnVlVGFicywgdXNlVGFiQ29udHJvbCB9IGZyb20gJ0BzeWduYXMvdnVlLXRhYnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoKSB7XG4gIC8vIOOCueOCv+ODg+ODleODmuODvOOCuOS7peWkluOBr+aKnOOBkeOCi1xuICBjb25zdCB0YXJnZXQgPSAnI2FwcC10YWInO1xuICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRhYkNvbnRyb2wgPSB1c2VUYWJDb250cm9sKCd0YWJHcm91cCcpO1xuXG4gIGNvbnN0IGFwcCA9IGNyZWF0ZUFwcCh7XG4gICAgY29tcG9uZW50czoge1xuICAgICAgVnVlVGFicyxcbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBhY3RpdmVJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRhYkNvbnRyb2wuYWN0aXZlSWQudmFsdWU7XG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBhcHAubW91bnQodGFyZ2V0KTtcbn1cbiIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzWydkZWZhdWx0J10gPSBpc1RvdWNoRGV2aWNlO1xuZnVuY3Rpb24gaXNUb3VjaERldmljZSgpIHtcbiAgcmV0dXJuICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgd2luZG93LkRvY3VtZW50VG91Y2ggJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSkgfHwgISEodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyB8fCBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cykpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiLypcblRoaXMgcGx1Z2luIGV4dGVuZHMgbGF6eVNpemVzIHRvIGxhenlMb2FkOlxuYmFja2dyb3VuZCBpbWFnZXMsIHZpZGVvcy9wb3N0ZXJzIGFuZCBzY3JpcHRzXG5cbkJhY2tncm91bmQtSW1hZ2U6XG5Gb3IgYmFja2dyb3VuZCBpbWFnZXMsIHVzZSBkYXRhLWJnIGF0dHJpYnV0ZTpcbjxkaXYgY2xhc3M9XCJsYXp5bG9hZFwiIGRhdGEtYmc9XCJ
2208iZy1pbWcuanBnXCI+PC9kaXY+XG5cbiBWaWRlbzpcbiBGb3IgdmlkZW8vYXVkaW8gdXNlIGRhdGEtcG9zdGVyIGFuZCBwcmVsb2FkPVwibm9uZVwiOlxuIDx2aWRlbyBjbGFzcz1cImxhenlsb2FkXCIgcHJlbG9hZD1cIm5vbmVcIiBkYXRhLXBvc3Rlcj1cInBvc3Rlci5qcGdcIiBzcmM9XCJzcmMubXA0XCI+XG4gPCEtLSBzb3VyY2VzIC0tPlxuIDwvdmlkZW8+XG5cbiBGb3IgdmlkZW8gdGhhdCBwbGF5cyBhdXRvbWF0aWNhbGx5IGlmIGluIHZpZXc6XG4gPHZpZGVvXG5cdGNsYXNzPVwibGF6eWxvYWRcIlxuXHRwcmVsb2FkPVwibm9uZVwiXG5cdG11dGVkPVwiXCJcblx0ZGF0YS1hdXRvcGxheT1cIlwiXG5cdGRhdGEtcG9zdGVyPVwicG9zdGVyLmpwZ1wiXG5cdHNyYz1cInNyYy5tcDRcIj5cbjwvdmlkZW8+XG5cbiBTY3JpcHRzOlxuIEZvciBzY3JpcHRzIHVzZSBkYXRhLXNjcmlwdDpcbiA8ZGl2IGNsYXNzPVwibGF6eWxvYWRcIiBkYXRhLXNjcmlwdD1cIm1vZHVsZS1uYW1lLmpzXCI+PC9kaXY+XG5cblxuIFNjcmlwdCBtb2R1bGVzIHVzaW5nIHJlcXVpcmU6XG4gRm9yIG1vZHVsZXMgdXNpbmcgcmVxdWlyZSB1c2UgZGF0YS1yZXF1aXJlOlxuIDxkaXYgY2xhc3M9XCJsYXp5bG9hZFwiIGRhdGEtcmVxdWlyZT1cIm1vZHVsZS1uYW1lXCI+PC9kaXY+XG4qL1xuXG4oZnVuY3Rpb24od2luZG93LCBmYWN0b3J5KSB7XG5cdHZhciBnbG9iYWxJbnN0YWxsID0gZnVuY3Rpb24oKXtcblx0XHRmYWN0b3J5KHdpbmRvdy5sYXp5U2l6ZXMpO1xuXHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdsYXp5dW52ZWlscmVhZCcsIGdsb2JhbEluc3RhbGwsIHRydWUpO1xuXHR9O1xuXG5cdGZhY3RvcnkgPSBmYWN0b3J5LmJpbmQobnVsbCwgd2luZG93LCB3aW5kb3cuZG9jdW1lbnQpO1xuXG5cdGlmKHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpe1xuXHRcdGZhY3RvcnkocmVxdWlyZSgnbGF6eXNpemVzJykpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKFsnbGF6eXNpemVzJ10sIGZhY3RvcnkpO1xuXHR9IGVsc2UgaWYod2luZG93LmxhenlTaXplcykge1xuXHRcdGdsb2JhbEluc3RhbGwoKTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbGF6eXVudmVpbHJlYWQnLCBnbG9iYWxJbnN0YWxsLCB0cnVlKTtcblx0fVxufSh3aW5kb3csIGZ1bmN0aW9uKHdpbmRvdywgZG9jdW1lbnQsIGxhenlTaXplcykge1xuXHQvKmpzaGludCBlcW51bGw6dHJ1ZSAqL1xuXHQndXNlIHN0cmljdCc7XG5cdHZhciBiZ0xvYWQsIHJlZ0JnVXJsRXNjYXBlO1xuXHR2YXIgdW5pcXVlVXJscyA9IHt9O1xuXG5cdGlmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpe1xuXHRcdHJlZ0JnVXJsRXNjYXBlID0gL1xcKHxcXCl8XFxzfCcvO1xuXG5cdFx0YmdMb2FkID0gZnVuY3Rpb24gKHVybCwgY2Ipe1xuXHRcdFx0dmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuXHRcdFx0aW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGltZy5vbmxvYWQgPSBudWxsO1xuXHRcdFx0XHRpbWcub25lcnJvciA9IG51bGw7XG5cdFx0XHRcdGltZyA9IG51bGw7XG5cdFx0XHRcdGNiKCk7XG5cdFx0XHR9O1xuXHRcdFx0aW1nLm9uZXJyb3IgPSBpbWcub25sb2FkO1xuXG5cdFx0XHRpbWcuc3JjID0gdXJsO1xuXG5cdFx0XHRpZihpbWcgJiYgaW1nLmNvbXBsZXRlICYmIGltZy5vbmxvYWQpe1xuXHRcdFx0XHRpbWcub25sb2FkKCk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGFkZEV2ZW50TGlzdGVuZXIoJ2xhenliZWZvcmV1bnZlaWwnLCBmdW5jdGlvbihlKXtcblx0XHRcdGlmKGUuZGV0YWlsLmluc3RhbmNlICE9IGxhenlTaXplcyl7cmV0dXJuO31cblxuXHRcdFx0dmFyIHRtcCwgbG9hZCwgYmcsIHBvc3Rlcjtcblx0XHRcdGlmKCFlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcblxuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gZS50YXJnZXQ7XG5cblx0XHRcdFx0aWYodGFyZ2V0LnByZWxvYWQgPT0gJ25vbmUnKXtcblx0XHRcdFx0XHR0YXJnZXQucHJlbG9hZCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcHJlbG9hZCcpIHx8ICdhdXRvJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWF1dG9wbGF5JykgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGlmICh0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWV4cGFuZCcpICYmICF0YXJnZXQuYXV0b3BsYXkpIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldC5wbGF5KCk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlcikge31cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0LnNldEF0dHJpYnV0ZSgnZGF0YS1leHBhbmQnLCAnLTEwJyk7XG5cdFx0XHRcdFx0XHRcdGxhenlTaXplcy5hQyh0YXJnZXQsIGxhenlTaXplcy5jZmcubGF6eUNsYXNzKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRtcCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGluaycpO1xuXHRcdFx0XHRpZih0bXApe1xuXHRcdFx0XHRcdGFkZFN0eWxlU2NyaXB0KHRtcCwgdHJ1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBoYW5kbGUgZGF0YS1zY3JpcHRcblx0XHRcdFx0dG1wID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS1zY3JpcHQnKTtcblx0XHRcdFx0aWYodG1wKXtcblx0XHRcdFx0XHRlLmRldGFpbC5maXJlc0xvYWQgPSB0cnVlO1xuXHRcdFx0XHRcdGxvYWQgPSBmdW5jdGlvbigpe1xuXHRcdFx0XHRcdFx0ZS5kZXRhaWwuZmlyZXNMb2FkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRsYXp5U2l6ZXMuZmlyZSh0YXJnZXQsICdfbGF6eWxvYWRlZCcsIHt9LCB0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGFkZFN0eWxlU2NyaXB0KHRtcCwgbnVsbCwgbG9hZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBoYW5kbGUgZGF0YS1yZXF1aXJlXG5cdFx0XHRcdHRtcCA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZScpO1xuXHRcdFx0XHRpZih0bXApe1xuXHRcdFx0XHRcdGlmKGxhenlTaXplcy5jZmcucmVxdWlyZUpzKXtcblx0XHRcdFx0XHRcdGxhenlTaXplcy5jZmcucmVxdWlyZUpzKFt0bXBdKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0YWRkU3R5bGVTY3JpcHQodG1wKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBoYW5kbGUgZGF0YS1iZ1xuXHRcdFx0XHRiZyA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYmcnKTtcblx0XHRcdFx0aWYgKGJnKSB7XG5cdFx0XHRcdFx0ZS5kZXRhaWwuZmlyZXNMb2FkID0gdHJ1ZTtcblx0XHRcdFx0XHRsb2FkID0gZnVuY3Rpb24oKXtcblx0XHRcdFx0XHRcdHRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcgKyAocmVnQmdVcmxFc2NhcGUudGVzdChiZykgPyBKU09OLnN0cmluZ2lmeShiZykgOiBiZyApICsgJyknO1xuXHRcdFx0XHRcdFx0ZS5kZXRhaWwuZmlyZXNMb2FkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRsYXp5U2l6ZXMuZmlyZSh0YXJnZXQsICdfbGF6eWxvYWRlZCcsIHt9LCB0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0YmdMb2FkKGJnLCBsb2FkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGhhbmRsZSBkYXRhLXBvc3RlclxuXHRcdFx0XHRwb3N0ZXIgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXBvc3RlcicpO1xuXHRcdFx0XHRpZihwb3N0ZXIpe1xuXHRcdFx0XHRcdGUuZGV0YWlsLmZpcmVzTG9hZCA9IHRydWU7XG5cdFx0XHRcdFx0bG9hZCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdFx0XHR0YXJnZXQucG9zdGVyID0gcG9zdGVyO1xuXHRcdFx0XHRcdFx0ZS5kZXRhaWwuZmlyZXNMb2FkID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRsYXp5U2l6ZXMuZmlyZSh0YXJnZXQsICdfbGF6eWxvYWRlZCcsIHt9LCB0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0YmdMb2FkKHBvc3RlciwgbG9hZCk7XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sIGZhbHNlKTtcblxuXHR9XG5cblx0ZnVuY3Rpb24gYWRkU3R5bGVTY3JpcHQoc3JjLCBzdHlsZSwgY2Ipe1xuXHRcdGlmKHVuaXF1ZVVybHNbc3JjXSl7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChzdHlsZSA/ICdsaW5rJyA6ICdzY3JpcHQnKTtcblx0XHR2YXIgaW5zZXJ0RWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcblxuXHRcdGlmKHN0eWxlKXtcblx0XHRcdGVsZW0ucmVsID0gJ3N0eWxlc2hlZXQnO1xuXHRcdFx0ZWxlbS5ocmVmID0gc3JjO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLm9ubG9hZCA9IGZ1bmN0aW9uKCl7XG5cdFx0XHRcdGVsZW0ub25lcnJvciA9IG51bGw7XG5cdFx0XHRcdGVsZW0ub25sb2FkID0gbnVsbDtcblx0XHRcdFx0Y2IoKTtcblx0XHRcdH07XG5cdFx0XHRlbGVtLm9uZXJyb3IgPSBlbGVtLm9ubG9hZDtcblxuXHRcdFx0ZWxlbS5zcmMgPSBzcmM7XG5cdFx0fVxuXHRcdHVuaXF1ZVVybHNbc3JjXSA9IHRydWU7XG5cdFx0dW5pcXVlVXJsc1tlbGVtLnNyYyB8fCBlbGVtLmhyZWZdID0gdHJ1ZTtcblx0XHRpbnNlcnRFbGVtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsZW0sIGluc2VydEVsZW0pO1xuXHR9XG59KSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBkbGwtcmVmZXJlbmNlIHZlbmRvcl9saWJyYXJ5ICovIFwiZGxsLXJlZmVyZW5jZSB2ZW5kb3JfbGlicmFyeVwiKSkoMTY2KTsiLCJtb2R1bGUuZXhwb3J0cyA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBkbGwtcmVmZXJlbmNlIHZlbmRvcl9saWJyYXJ5ICovIFwiZGxsLXJlZmVyZW5jZSB2ZW5kb3JfbGlicmFyeVwiKSkoMik7IiwibW9kdWxlLmV4cG9ydHMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgZGxsLXJlZmVyZW5jZSB2ZW5kb3JfbGlicmFyeSAqLyBcImRsbC1yZWZlcmVuY2UgdmVuZG9yX2xpYnJhcnlcIikpKDU4Mik7IiwibW9kdWxlLmV4cG9ydHMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgZGxsLXJlZmVyZW5jZSB2ZW5kb3JfbGlicmFyeSAqLyBcImRsbC1yZWZlcmVuY2UgdmVuZG9yX2xpYnJhcnlcIikpKDgyNCk7IiwibW9kdWxlLmV4cG9ydHMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgZGxsLXJlZmVyZW5jZSB2ZW5kb3JfbGlicmFyeSAqLyBcImRsbC1yZWZlcmVuY2UgdmVuZG9yX2xpYnJhcnlcIikpKDkwKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHZlbmRvcl9saWJyYXJ5OyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuXHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgZGVmaW5pdGlvbikge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9IiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6b2ZmICovXG5cbi8vIOWFqOODmuODvOOCuOWFsemAmuWHpueQhlxuaW1wb3J0IGNvbW1vbiBmcm9tICcuL3BhZ2VzL2NvbW1vbi9jb21tb24nO1xuXG5jb21tb24oKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==

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.