Greasy Fork is available in English.

Eldarya Enhancements

Enhances the user experience of Eldarya.

2021-08-10 일자. 최신 버전을 확인하세요.

// ==UserScript==
// @name            Eldarya Enhancements
// @namespace       https://gitlab.com/NatoBoram/eldarya-enhancements
// @license         GPL-3.0-or-later
// @version         1.2.3
// @author          Nato Boram
// @description     Enhances the user experience of Eldarya.
// @icon            https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/avatar.png
// @supportURL      https://gitlab.com/NatoBoram/Eldarya-Face-Downloader/issues
// @contributionURL https://paypal.me/NatoBoram/5
//
// @match https://www.eldarya.com.br/*
// @match https://www.eldarya.de/*
// @match https://www.eldarya.es/*
// @match https://www.eldarya.hu/*
// @match https://www.eldarya.it/*
// @match https://www.eldarya.pl/*
// @match https://www.eldarya.ru/*
// @match https://www.eldarya.com/*
// @match https://www.eldarya.fr/*
//
// @grant none
// ==/UserScript==
/******/ (() => { // webpackBootstrap
/******/ 	var __webpack_modules__ = ({

/***/ "./node_modules/.pnpm/blob-util@2.0.2/node_modules/blob-util/dist/blob-util.es.js":
/*!****************************************************************************************!*\
  !*** ./node_modules/.pnpm/blob-util@2.0.2/node_modules/blob-util/dist/blob-util.es.js ***!
  \****************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "createBlob": () => (/* binding */ createBlob),
/* harmony export */   "createObjectURL": () => (/* binding */ createObjectURL),
/* harmony export */   "revokeObjectURL": () => (/* binding */ revokeObjectURL),
/* harmony export */   "blobToBinaryString": () => (/* binding */ blobToBinaryString),
/* harmony export */   "base64StringToBlob": () => (/* binding */ base64StringToBlob),
/* harmony export */   "binaryStringToBlob": () => (/* binding */ binaryStringToBlob),
/* harmony export */   "blobToBase64String": () => (/* binding */ blobToBase64String),
/* harmony export */   "dataURLToBlob": () => (/* binding */ dataURLToBlob),
/* harmony export */   "blobToDataURL": () => (/* binding */ blobToDataURL),
/* harmony export */   "imgSrcToDataURL": () => (/* binding */ imgSrcToDataURL),
/* harmony export */   "canvasToBlob": () => (/* binding */ canvasToBlob),
/* harmony export */   "imgSrcToBlob": () => (/* binding */ imgSrcToBlob),
/* harmony export */   "arrayBufferToBlob": () => (/* binding */ arrayBufferToBlob),
/* harmony export */   "blobToArrayBuffer": () => (/* binding */ blobToArrayBuffer),
/* harmony export */   "arrayBufferToBinaryString": () => (/* binding */ arrayBufferToBinaryString),
/* harmony export */   "binaryStringToArrayBuffer": () => (/* binding */ binaryStringToArrayBuffer)
/* harmony export */ });
// TODO: including these in blob-util.ts causes typedoc to generate docs for them,
// even with --excludePrivate ¯\_(ツ)_/¯
/** @private */
function loadImage(src, crossOrigin) {
    return new Promise(function (resolve, reject) {
        var img = new Image();
        if (crossOrigin) {
            img.crossOrigin = crossOrigin;
        }
        img.onload = function () {
            resolve(img);
        };
        img.onerror = reject;
        img.src = src;
    });
}
/** @private */
function imgToCanvas(img) {
    var canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    // copy the image contents to the canvas
    var context = canvas.getContext('2d');
    context.drawImage(img, 0, 0, img.width, img.height, 0, 0, img.width, img.height);
    return canvas;
}

/* global Promise, Image, Blob, FileReader, atob, btoa,
   BlobBuilder, MSBlobBuilder, MozBlobBuilder, WebKitBlobBuilder, webkitURL */
/**
 * Shim for
 * [`new Blob()`](https://developer.mozilla.org/en-US/docs/Web/API/Blob.Blob)
 * to support
 * [older browsers that use the deprecated `BlobBuilder` API](http://caniuse.com/blob).
 *
 * Example:
 *
 * ```js
 * var myBlob = blobUtil.createBlob(['hello world'], {type: 'text/plain'});
 * ```
 *
 * @param parts - content of the Blob
 * @param properties - usually `{type: myContentType}`,
 *                           you can also pass a string for the content type
 * @returns Blob
 */
function createBlob(parts, properties) {
    parts = parts || [];
    properties = properties || {};
    if (typeof properties === 'string') {
        properties = { type: properties }; // infer content type
    }
    try {
        return new Blob(parts, properties);
    }
    catch (e) {
        if (e.name !== 'TypeError') {
            throw e;
        }
        var Builder = typeof BlobBuilder !== 'undefined'
            ? BlobBuilder : typeof MSBlobBuilder !== 'undefined'
            ? MSBlobBuilder : typeof MozBlobBuilder !== 'undefined'
            ? MozBlobBuilder : WebKitBlobBuilder;
        var builder = new Builder();
        for (var i = 0; i < parts.length; i += 1) {
            builder.append(parts[i]);
        }
        return builder.getBlob(properties.type);
    }
}
/**
 * Shim for
 * [`URL.createObjectURL()`](https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL)
 * to support browsers that only have the prefixed
 * `webkitURL` (e.g. Android <4.4).
 *
 * Example:
 *
 * ```js
 * var myUrl = blobUtil.createObjectURL(blob);
 * ```
 *
 * @param blob
 * @returns url
 */
function createObjectURL(blob) {
    return (typeof URL !== 'undefined' ? URL : webkitURL).createObjectURL(blob);
}
/**
 * Shim for
 * [`URL.revokeObjectURL()`](https://developer.mozilla.org/en-US/docs/Web/API/URL.revokeObjectURL)
 * to support browsers that only have the prefixed
 * `webkitURL` (e.g. Android <4.4).
 *
 * Example:
 *
 * ```js
 * blobUtil.revokeObjectURL(myUrl);
 * ```
 *
 * @param url
 */
function revokeObjectURL(url) {
    return (typeof URL !== 'undefined' ? URL : webkitURL).revokeObjectURL(url);
}
/**
 * Convert a `Blob` to a binary string.
 *
 * Example:
 *
 * ```js
 * blobUtil.blobToBinaryString(blob).then(function (binaryString) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param blob
 * @returns Promise that resolves with the binary string
 */
function blobToBinaryString(blob) {
    return new Promise(function (resolve, reject) {
        var reader = new FileReader();
        var hasBinaryString = typeof reader.readAsBinaryString === 'function';
        reader.onloadend = function () {
            var result = reader.result || '';
            if (hasBinaryString) {
                return resolve(result);
            }
            resolve(arrayBufferToBinaryString(result));
        };
        reader.onerror = reject;
        if (hasBinaryString) {
            reader.readAsBinaryString(blob);
        }
        else {
            reader.readAsArrayBuffer(blob);
        }
    });
}
/**
 * Convert a base64-encoded string to a `Blob`.
 *
 * Example:
 *
 * ```js
 * var blob = blobUtil.base64StringToBlob(base64String);
 * ```
 * @param base64 - base64-encoded string
 * @param type - the content type (optional)
 * @returns Blob
 */
function base64StringToBlob(base64, type) {
    var parts = [binaryStringToArrayBuffer(atob(base64))];
    return type ? createBlob(parts, { type: type }) : createBlob(parts);
}
/**
 * Convert a binary string to a `Blob`.
 *
 * Example:
 *
 * ```js
 * var blob = blobUtil.binaryStringToBlob(binaryString);
 * ```
 *
 * @param binary - binary string
 * @param type - the content type (optional)
 * @returns Blob
 */
function binaryStringToBlob(binary, type) {
    return base64StringToBlob(btoa(binary), type);
}
/**
 * Convert a `Blob` to a binary string.
 *
 * Example:
 *
 * ```js
 * blobUtil.blobToBase64String(blob).then(function (base64String) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param blob
 * @returns Promise that resolves with the binary string
 */
function blobToBase64String(blob) {
    return blobToBinaryString(blob).then(btoa);
}
/**
 * Convert a data URL string
 * (e.g. `'data:image/png;base64,iVBORw0KG...'`)
 * to a `Blob`.
 *
 * Example:
 *
 * ```js
 * var blob = blobUtil.dataURLToBlob(dataURL);
 * ```
 *
 * @param dataURL - dataURL-encoded string
 * @returns Blob
 */
function dataURLToBlob(dataURL) {
    var type = dataURL.match(/data:([^;]+)/)[1];
    var base64 = dataURL.replace(/^[^,]+,/, '');
    var buff = binaryStringToArrayBuffer(atob(base64));
    return createBlob([buff], { type: type });
}
/**
 * Convert a `Blob` to a data URL string
 * (e.g. `'data:image/png;base64,iVBORw0KG...'`).
 *
 * Example:
 *
 * ```js
 * var dataURL = blobUtil.blobToDataURL(blob);
 * ```
 *
 * @param blob
 * @returns Promise that resolves with the data URL string
 */
function blobToDataURL(blob) {
    return blobToBase64String(blob).then(function (base64String) {
        return 'data:' + blob.type + ';base64,' + base64String;
    });
}
/**
 * Convert an image's `src` URL to a data URL by loading the image and painting
 * it to a `canvas`.
 *
 * Note: this will coerce the image to the desired content type, and it
 * will only paint the first frame of an animated GIF.
 *
 * Examples:
 *
 * ```js
 * blobUtil.imgSrcToDataURL('http://mysite.com/img.png').then(function (dataURL) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * ```js
 * blobUtil.imgSrcToDataURL('http://some-other-site.com/img.jpg', 'image/jpeg',
 *                          'Anonymous', 1.0).then(function (dataURL) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param src - image src
 * @param type - the content type (optional, defaults to 'image/png')
 * @param crossOrigin - for CORS-enabled images, set this to
 *                                         'Anonymous' to avoid "tainted canvas" errors
 * @param quality - a number between 0 and 1 indicating image quality
 *                                     if the requested type is 'image/jpeg' or 'image/webp'
 * @returns Promise that resolves with the data URL string
 */
function imgSrcToDataURL(src, type, crossOrigin, quality) {
    type = type || 'image/png';
    return loadImage(src, crossOrigin).then(imgToCanvas).then(function (canvas) {
        return canvas.toDataURL(type, quality);
    });
}
/**
 * Convert a `canvas` to a `Blob`.
 *
 * Examples:
 *
 * ```js
 * blobUtil.canvasToBlob(canvas).then(function (blob) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * Most browsers support converting a canvas to both `'image/png'` and `'image/jpeg'`. You may
 * also want to try `'image/webp'`, which will work in some browsers like Chrome (and in other browsers, will just fall back to `'image/png'`):
 *
 * ```js
 * blobUtil.canvasToBlob(canvas, 'image/webp').then(function (blob) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param canvas - HTMLCanvasElement
 * @param type - the content type (optional, defaults to 'image/png')
 * @param quality - a number between 0 and 1 indicating image quality
 *                                     if the requested type is 'image/jpeg' or 'image/webp'
 * @returns Promise that resolves with the `Blob`
 */
function canvasToBlob(canvas, type, quality) {
    if (typeof canvas.toBlob === 'function') {
        return new Promise(function (resolve) {
            canvas.toBlob(resolve, type, quality);
        });
    }
    return Promise.resolve(dataURLToBlob(canvas.toDataURL(type, quality)));
}
/**
 * Convert an image's `src` URL to a `Blob` by loading the image and painting
 * it to a `canvas`.
 *
 * Note: this will coerce the image to the desired content type, and it
 * will only paint the first frame of an animated GIF.
 *
 * Examples:
 *
 * ```js
 * blobUtil.imgSrcToBlob('http://mysite.com/img.png').then(function (blob) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * ```js
 * blobUtil.imgSrcToBlob('http://some-other-site.com/img.jpg', 'image/jpeg',
 *                          'Anonymous', 1.0).then(function (blob) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param src - image src
 * @param type - the content type (optional, defaults to 'image/png')
 * @param crossOrigin - for CORS-enabled images, set this to
 *                                         'Anonymous' to avoid "tainted canvas" errors
 * @param quality - a number between 0 and 1 indicating image quality
 *                                     if the requested type is 'image/jpeg' or 'image/webp'
 * @returns Promise that resolves with the `Blob`
 */
function imgSrcToBlob(src, type, crossOrigin, quality) {
    type = type || 'image/png';
    return loadImage(src, crossOrigin).then(imgToCanvas).then(function (canvas) {
        return canvasToBlob(canvas, type, quality);
    });
}
/**
 * Convert an `ArrayBuffer` to a `Blob`.
 *
 * Example:
 *
 * ```js
 * var blob = blobUtil.arrayBufferToBlob(arrayBuff, 'audio/mpeg');
 * ```
 *
 * @param buffer
 * @param type - the content type (optional)
 * @returns Blob
 */
function arrayBufferToBlob(buffer, type) {
    return createBlob([buffer], type);
}
/**
 * Convert a `Blob` to an `ArrayBuffer`.
 *
 * Example:
 *
 * ```js
 * blobUtil.blobToArrayBuffer(blob).then(function (arrayBuff) {
 *   // success
 * }).catch(function (err) {
 *   // error
 * });
 * ```
 *
 * @param blob
 * @returns Promise that resolves with the `ArrayBuffer`
 */
function blobToArrayBuffer(blob) {
    return new Promise(function (resolve, reject) {
        var reader = new FileReader();
        reader.onloadend = function () {
            var result = reader.result || new ArrayBuffer(0);
            resolve(result);
        };
        reader.onerror = reject;
        reader.readAsArrayBuffer(blob);
    });
}
/**
 * Convert an `ArrayBuffer` to a binary string.
 *
 * Example:
 *
 * ```js
 * var myString = blobUtil.arrayBufferToBinaryString(arrayBuff)
 * ```
 *
 * @param buffer - array buffer
 * @returns binary string
 */
function arrayBufferToBinaryString(buffer) {
    var binary = '';
    var bytes = new Uint8Array(buffer);
    var length = bytes.byteLength;
    var i = -1;
    while (++i < length) {
        binary += String.fromCharCode(bytes[i]);
    }
    return binary;
}
/**
 * Convert a binary string to an `ArrayBuffer`.
 *
 * ```js
 * var myBuffer = blobUtil.binaryStringToArrayBuffer(binaryString)
 * ```
 *
 * @param binary - binary string
 * @returns array buffer
 */
function binaryStringToArrayBuffer(binary) {
    var length = binary.length;
    var buf = new ArrayBuffer(length);
    var arr = new Uint8Array(buf);
    var i = -1;
    while (++i < length) {
        arr[i] = binary.charCodeAt(i);
    }
    return buf;
}




/***/ }),

/***/ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/compiler.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/compiler.js ***!
  \*********************************************************************************/
/***/ ((__unused_webpack_module, exports) => {

/*
 *  Copyright 2011 Twitter, Inc.
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

(function (Hogan) {
  // Setup regex  assignments
  // remove whitespace according to Mustache spec
  var rIsWhitespace = /\S/,
      rQuot = /\"/g,
      rNewline =  /\n/g,
      rCr = /\r/g,
      rSlash = /\\/g,
      rLineSep = /\u2028/,
      rParagraphSep = /\u2029/;

  Hogan.tags = {
    '#': 1, '^': 2, '<': 3, '$': 4,
    '/': 5, '!': 6, '>': 7, '=': 8, '_v': 9,
    '{': 10, '&': 11, '_t': 12
  };

  Hogan.scan = function scan(text, delimiters) {
    var len = text.length,
        IN_TEXT = 0,
        IN_TAG_TYPE = 1,
        IN_TAG = 2,
        state = IN_TEXT,
        tagType = null,
        tag = null,
        buf = '',
        tokens = [],
        seenTag = false,
        i = 0,
        lineStart = 0,
        otag = '{{',
        ctag = '}}';

    function addBuf() {
      if (buf.length > 0) {
        tokens.push({tag: '_t', text: new String(buf)});
        buf = '';
      }
    }

    function lineIsWhitespace() {
      var isAllWhitespace = true;
      for (var j = lineStart; j < tokens.length; j++) {
        isAllWhitespace =
          (Hogan.tags[tokens[j].tag] < Hogan.tags['_v']) ||
          (tokens[j].tag == '_t' && tokens[j].text.match(rIsWhitespace) === null);
        if (!isAllWhitespace) {
          return false;
        }
      }

      return isAllWhitespace;
    }

    function filterLine(haveSeenTag, noNewLine) {
      addBuf();

      if (haveSeenTag && lineIsWhitespace()) {
        for (var j = lineStart, next; j < tokens.length; j++) {
          if (tokens[j].text) {
            if ((next = tokens[j+1]) && next.tag == '>') {
              // set indent to token value
              next.indent = tokens[j].text.toString()
            }
            tokens.splice(j, 1);
          }
        }
      } else if (!noNewLine) {
        tokens.push({tag:'\n'});
      }

      seenTag = false;
      lineStart = tokens.length;
    }

    function changeDelimiters(text, index) {
      var close = '=' + ctag,
          closeIndex = text.indexOf(close, index),
          delimiters = trim(
            text.substring(text.indexOf('=', index) + 1, closeIndex)
          ).split(' ');

      otag = delimiters[0];
      ctag = delimiters[delimiters.length - 1];

      return closeIndex + close.length - 1;
    }

    if (delimiters) {
      delimiters = delimiters.split(' ');
      otag = delimiters[0];
      ctag = delimiters[1];
    }

    for (i = 0; i < len; i++) {
      if (state == IN_TEXT) {
        if (tagChange(otag, text, i)) {
          --i;
          addBuf();
          state = IN_TAG_TYPE;
        } else {
          if (text.charAt(i) == '\n') {
            filterLine(seenTag);
          } else {
            buf += text.charAt(i);
          }
        }
      } else if (state == IN_TAG_TYPE) {
        i += otag.length - 1;
        tag = Hogan.tags[text.charAt(i + 1)];
        tagType = tag ? text.charAt(i + 1) : '_v';
        if (tagType == '=') {
          i = changeDelimiters(text, i);
          state = IN_TEXT;
        } else {
          if (tag) {
            i++;
          }
          state = IN_TAG;
        }
        seenTag = i;
      } else {
        if (tagChange(ctag, text, i)) {
          tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag,
                       i: (tagType == '/') ? seenTag - otag.length : i + ctag.length});
          buf = '';
          i += ctag.length - 1;
          state = IN_TEXT;
          if (tagType == '{') {
            if (ctag == '}}') {
              i++;
            } else {
              cleanTripleStache(tokens[tokens.length - 1]);
            }
          }
        } else {
          buf += text.charAt(i);
        }
      }
    }

    filterLine(seenTag, true);

    return tokens;
  }

  function cleanTripleStache(token) {
    if (token.n.substr(token.n.length - 1) === '}') {
      token.n = token.n.substring(0, token.n.length - 1);
    }
  }

  function trim(s) {
    if (s.trim) {
      return s.trim();
    }

    return s.replace(/^\s*|\s*$/g, '');
  }

  function tagChange(tag, text, index) {
    if (text.charAt(index) != tag.charAt(0)) {
      return false;
    }

    for (var i = 1, l = tag.length; i < l; i++) {
      if (text.charAt(index + i) != tag.charAt(i)) {
        return false;
      }
    }

    return true;
  }

  // the tags allowed inside super templates
  var allowedInSuper = {'_t': true, '\n': true, '$': true, '/': true};

  function buildTree(tokens, kind, stack, customTags) {
    var instructions = [],
        opener = null,
        tail = null,
        token = null;

    tail = stack[stack.length - 1];

    while (tokens.length > 0) {
      token = tokens.shift();

      if (tail && tail.tag == '<' && !(token.tag in allowedInSuper)) {
        throw new Error('Illegal content in < super tag.');
      }

      if (Hogan.tags[token.tag] <= Hogan.tags['$'] || isOpener(token, customTags)) {
        stack.push(token);
        token.nodes = buildTree(tokens, token.tag, stack, customTags);
      } else if (token.tag == '/') {
        if (stack.length === 0) {
          throw new Error('Closing tag without opener: /' + token.n);
        }
        opener = stack.pop();
        if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) {
          throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n);
        }
        opener.end = token.i;
        return instructions;
      } else if (token.tag == '\n') {
        token.last = (tokens.length == 0) || (tokens[0].tag == '\n');
      }

      instructions.push(token);
    }

    if (stack.length > 0) {
      throw new Error('missing closing tag: ' + stack.pop().n);
    }

    return instructions;
  }

  function isOpener(token, tags) {
    for (var i = 0, l = tags.length; i < l; i++) {
      if (tags[i].o == token.n) {
        token.tag = '#';
        return true;
      }
    }
  }

  function isCloser(close, open, tags) {
    for (var i = 0, l = tags.length; i < l; i++) {
      if (tags[i].c == close && tags[i].o == open) {
        return true;
      }
    }
  }

  function stringifySubstitutions(obj) {
    var items = [];
    for (var key in obj) {
      items.push('"' + esc(key) + '": function(c,p,t,i) {' + obj[key] + '}');
    }
    return "{ " + items.join(",") + " }";
  }

  function stringifyPartials(codeObj) {
    var partials = [];
    for (var key in codeObj.partials) {
      partials.push('"' + esc(key) + '":{name:"' + esc(codeObj.partials[key].name) + '", ' + stringifyPartials(codeObj.partials[key]) + "}");
    }
    return "partials: {" + partials.join(",") + "}, subs: " + stringifySubstitutions(codeObj.subs);
  }

  Hogan.stringify = function(codeObj, text, options) {
    return "{code: function (c,p,i) { " + Hogan.wrapMain(codeObj.code) + " }," + stringifyPartials(codeObj) +  "}";
  }

  var serialNo = 0;
  Hogan.generate = function(tree, text, options) {
    serialNo = 0;
    var context = { code: '', subs: {}, partials: {} };
    Hogan.walk(tree, context);

    if (options.asString) {
      return this.stringify(context, text, options);
    }

    return this.makeTemplate(context, text, options);
  }

  Hogan.wrapMain = function(code) {
    return 'var t=this;t.b(i=i||"");' + code + 'return t.fl();';
  }

  Hogan.template = Hogan.Template;

  Hogan.makeTemplate = function(codeObj, text, options) {
    var template = this.makePartials(codeObj);
    template.code = new Function('c', 'p', 'i', this.wrapMain(codeObj.code));
    return new this.template(template, text, this, options);
  }

  Hogan.makePartials = function(codeObj) {
    var key, template = {subs: {}, partials: codeObj.partials, name: codeObj.name};
    for (key in template.partials) {
      template.partials[key] = this.makePartials(template.partials[key]);
    }
    for (key in codeObj.subs) {
      template.subs[key] = new Function('c', 'p', 't', 'i', codeObj.subs[key]);
    }
    return template;
  }

  function esc(s) {
    return s.replace(rSlash, '\\\\')
            .replace(rQuot, '\\\"')
            .replace(rNewline, '\\n')
            .replace(rCr, '\\r')
            .replace(rLineSep, '\\u2028')
            .replace(rParagraphSep, '\\u2029');
  }

  function chooseMethod(s) {
    return (~s.indexOf('.')) ? 'd' : 'f';
  }

  function createPartial(node, context) {
    var prefix = "<" + (context.prefix || "");
    var sym = prefix + node.n + serialNo++;
    context.partials[sym] = {name: node.n, partials: {}};
    context.code += 't.b(t.rp("' +  esc(sym) + '",c,p,"' + (node.indent || '') + '"));';
    return sym;
  }

  Hogan.codegen = {
    '#': function(node, context) {
      context.code += 'if(t.s(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),' +
                      'c,p,0,' + node.i + ',' + node.end + ',"' + node.otag + " " + node.ctag + '")){' +
                      't.rs(c,p,' + 'function(c,p,t){';
      Hogan.walk(node.nodes, context);
      context.code += '});c.pop();}';
    },

    '^': function(node, context) {
      context.code += 'if(!t.s(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,1),c,p,1,0,0,"")){';
      Hogan.walk(node.nodes, context);
      context.code += '};';
    },

    '>': createPartial,
    '<': function(node, context) {
      var ctx = {partials: {}, code: '', subs: {}, inPartial: true};
      Hogan.walk(node.nodes, ctx);
      var template = context.partials[createPartial(node, context)];
      template.subs = ctx.subs;
      template.partials = ctx.partials;
    },

    '$': function(node, context) {
      var ctx = {subs: {}, code: '', partials: context.partials, prefix: node.n};
      Hogan.walk(node.nodes, ctx);
      context.subs[node.n] = ctx.code;
      if (!context.inPartial) {
        context.code += 't.sub("' + esc(node.n) + '",c,p,i);';
      }
    },

    '\n': function(node, context) {
      context.code += write('"\\n"' + (node.last ? '' : ' + i'));
    },

    '_v': function(node, context) {
      context.code += 't.b(t.v(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));';
    },

    '_t': function(node, context) {
      context.code += write('"' + esc(node.text) + '"');
    },

    '{': tripleStache,

    '&': tripleStache
  }

  function tripleStache(node, context) {
    context.code += 't.b(t.t(t.' + chooseMethod(node.n) + '("' + esc(node.n) + '",c,p,0)));';
  }

  function write(s) {
    return 't.b(' + s + ');';
  }

  Hogan.walk = function(nodelist, context) {
    var func;
    for (var i = 0, l = nodelist.length; i < l; i++) {
      func = Hogan.codegen[nodelist[i].tag];
      func && func(nodelist[i], context);
    }
    return context;
  }

  Hogan.parse = function(tokens, text, options) {
    options = options || {};
    return buildTree(tokens, '', [], options.sectionTags || []);
  }

  Hogan.cache = {};

  Hogan.cacheKey = function(text, options) {
    return [text, !!options.asString, !!options.disableLambda, options.delimiters, !!options.modelGet].join('||');
  }

  Hogan.compile = function(text, options) {
    options = options || {};
    var key = Hogan.cacheKey(text, options);
    var template = this.cache[key];

    if (template) {
      var partials = template.partials;
      for (var name in partials) {
        delete partials[name].instance;
      }
      return template;
    }

    template = this.generate(this.parse(this.scan(text, options.delimiters), text, options), text, options);
    return this.cache[key] = template;
  }
})( true ? exports : 0);


/***/ }),

/***/ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js":
/*!******************************************************************************!*\
  !*** ./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js ***!
  \******************************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
 *  Copyright 2011 Twitter, Inc.
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

// This file is for use with Node.js. See dist/ for browser files.

var Hogan = __webpack_require__(/*! ./compiler */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/compiler.js");
Hogan.Template = __webpack_require__(/*! ./template */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/template.js").Template;
Hogan.template = Hogan.Template;
module.exports = Hogan;


/***/ }),

/***/ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/template.js":
/*!*********************************************************************************!*\
  !*** ./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/template.js ***!
  \*********************************************************************************/
/***/ ((__unused_webpack_module, exports) => {

/*
 *  Copyright 2011 Twitter, Inc.
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

var Hogan = {};

(function (Hogan) {
  Hogan.Template = function (codeObj, text, compiler, options) {
    codeObj = codeObj || {};
    this.r = codeObj.code || this.r;
    this.c = compiler;
    this.options = options || {};
    this.text = text || '';
    this.partials = codeObj.partials || {};
    this.subs = codeObj.subs || {};
    this.buf = '';
  }

  Hogan.Template.prototype = {
    // render: replaced by generated code.
    r: function (context, partials, indent) { return ''; },

    // variable escaping
    v: hoganEscape,

    // triple stache
    t: coerceToString,

    render: function render(context, partials, indent) {
      return this.ri([context], partials || {}, indent);
    },

    // render internal -- a hook for overrides that catches partials too
    ri: function (context, partials, indent) {
      return this.r(context, partials, indent);
    },

    // ensurePartial
    ep: function(symbol, partials) {
      var partial = this.partials[symbol];

      // check to see that if we've instantiated this partial before
      var template = partials[partial.name];
      if (partial.instance && partial.base == template) {
        return partial.instance;
      }

      if (typeof template == 'string') {
        if (!this.c) {
          throw new Error("No compiler available.");
        }
        template = this.c.compile(template, this.options);
      }

      if (!template) {
        return null;
      }

      // We use this to check whether the partials dictionary has changed
      this.partials[symbol].base = template;

      if (partial.subs) {
        // Make sure we consider parent template now
        if (!partials.stackText) partials.stackText = {};
        for (key in partial.subs) {
          if (!partials.stackText[key]) {
            partials.stackText[key] = (this.activeSub !== undefined && partials.stackText[this.activeSub]) ? partials.stackText[this.activeSub] : this.text;
          }
        }
        template = createSpecializedPartial(template, partial.subs, partial.partials,
          this.stackSubs, this.stackPartials, partials.stackText);
      }
      this.partials[symbol].instance = template;

      return template;
    },

    // tries to find a partial in the current scope and render it
    rp: function(symbol, context, partials, indent) {
      var partial = this.ep(symbol, partials);
      if (!partial) {
        return '';
      }

      return partial.ri(context, partials, indent);
    },

    // render a section
    rs: function(context, partials, section) {
      var tail = context[context.length - 1];

      if (!isArray(tail)) {
        section(context, partials, this);
        return;
      }

      for (var i = 0; i < tail.length; i++) {
        context.push(tail[i]);
        section(context, partials, this);
        context.pop();
      }
    },

    // maybe start a section
    s: function(val, ctx, partials, inverted, start, end, tags) {
      var pass;

      if (isArray(val) && val.length === 0) {
        return false;
      }

      if (typeof val == 'function') {
        val = this.ms(val, ctx, partials, inverted, start, end, tags);
      }

      pass = !!val;

      if (!inverted && pass && ctx) {
        ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]);
      }

      return pass;
    },

    // find values with dotted names
    d: function(key, ctx, partials, returnFound) {
      var found,
          names = key.split('.'),
          val = this.f(names[0], ctx, partials, returnFound),
          doModelGet = this.options.modelGet,
          cx = null;

      if (key === '.' && isArray(ctx[ctx.length - 2])) {
        val = ctx[ctx.length - 1];
      } else {
        for (var i = 1; i < names.length; i++) {
          found = findInScope(names[i], val, doModelGet);
          if (found !== undefined) {
            cx = val;
            val = found;
          } else {
            val = '';
          }
        }
      }

      if (returnFound && !val) {
        return false;
      }

      if (!returnFound && typeof val == 'function') {
        ctx.push(cx);
        val = this.mv(val, ctx, partials);
        ctx.pop();
      }

      return val;
    },

    // find values with normal names
    f: function(key, ctx, partials, returnFound) {
      var val = false,
          v = null,
          found = false,
          doModelGet = this.options.modelGet;

      for (var i = ctx.length - 1; i >= 0; i--) {
        v = ctx[i];
        val = findInScope(key, v, doModelGet);
        if (val !== undefined) {
          found = true;
          break;
        }
      }

      if (!found) {
        return (returnFound) ? false : "";
      }

      if (!returnFound && typeof val == 'function') {
        val = this.mv(val, ctx, partials);
      }

      return val;
    },

    // higher order templates
    ls: function(func, cx, partials, text, tags) {
      var oldTags = this.options.delimiters;

      this.options.delimiters = tags;
      this.b(this.ct(coerceToString(func.call(cx, text)), cx, partials));
      this.options.delimiters = oldTags;

      return false;
    },

    // compile text
    ct: function(text, cx, partials) {
      if (this.options.disableLambda) {
        throw new Error('Lambda features disabled.');
      }
      return this.c.compile(text, this.options).render(cx, partials);
    },

    // template result buffering
    b: function(s) { this.buf += s; },

    fl: function() { var r = this.buf; this.buf = ''; return r; },

    // method replace section
    ms: function(func, ctx, partials, inverted, start, end, tags) {
      var textSource,
          cx = ctx[ctx.length - 1],
          result = func.call(cx);

      if (typeof result == 'function') {
        if (inverted) {
          return true;
        } else {
          textSource = (this.activeSub && this.subsText && this.subsText[this.activeSub]) ? this.subsText[this.activeSub] : this.text;
          return this.ls(result, cx, partials, textSource.substring(start, end), tags);
        }
      }

      return result;
    },

    // method replace variable
    mv: function(func, ctx, partials) {
      var cx = ctx[ctx.length - 1];
      var result = func.call(cx);

      if (typeof result == 'function') {
        return this.ct(coerceToString(result.call(cx)), cx, partials);
      }

      return result;
    },

    sub: function(name, context, partials, indent) {
      var f = this.subs[name];
      if (f) {
        this.activeSub = name;
        f(context, partials, this, indent);
        this.activeSub = false;
      }
    }

  };

  //Find a key in an object
  function findInScope(key, scope, doModelGet) {
    var val;

    if (scope && typeof scope == 'object') {

      if (scope[key] !== undefined) {
        val = scope[key];

      // try lookup with get for backbone or similar model data
      } else if (doModelGet && scope.get && typeof scope.get == 'function') {
        val = scope.get(key);
      }
    }

    return val;
  }

  function createSpecializedPartial(instance, subs, partials, stackSubs, stackPartials, stackText) {
    function PartialTemplate() {};
    PartialTemplate.prototype = instance;
    function Substitutions() {};
    Substitutions.prototype = instance.subs;
    var key;
    var partial = new PartialTemplate();
    partial.subs = new Substitutions();
    partial.subsText = {};  //hehe. substext.
    partial.buf = '';

    stackSubs = stackSubs || {};
    partial.stackSubs = stackSubs;
    partial.subsText = stackText;
    for (key in subs) {
      if (!stackSubs[key]) stackSubs[key] = subs[key];
    }
    for (key in stackSubs) {
      partial.subs[key] = stackSubs[key];
    }

    stackPartials = stackPartials || {};
    partial.stackPartials = stackPartials;
    for (key in partials) {
      if (!stackPartials[key]) stackPartials[key] = partials[key];
    }
    for (key in stackPartials) {
      partial.partials[key] = stackPartials[key];
    }

    return partial;
  }

  var rAmp = /&/g,
      rLt = /</g,
      rGt = />/g,
      rApos = /\'/g,
      rQuot = /\"/g,
      hChars = /[&<>\"\']/;

  function coerceToString(val) {
    return String((val === null || val === undefined) ? '' : val);
  }

  function hoganEscape(str) {
    str = coerceToString(str);
    return hChars.test(str) ?
      str
        .replace(rAmp, '&amp;')
        .replace(rLt, '&lt;')
        .replace(rGt, '&gt;')
        .replace(rApos, '&#39;')
        .replace(rQuot, '&quot;') :
      str;
  }

  var isArray = Array.isArray || function(a) {
    return Object.prototype.toString.call(a) === '[object Array]';
  };

})( true ? exports : 0);


/***/ }),

/***/ "./src/templates/html/appearance_item.html":
/*!*************************************************!*\
  !*** ./src/templates/html/appearance_item.html ***!
  \*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li");t.b("\n" + i);t.b("  id=\"appearance-item-");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  class=\"appearance-item group-");t.b(t.v(t.f("group",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-itemid=\"");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-name=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-rarity=\"");t.b(t.v(t.f("rarity",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-rarityname=\"");t.b(t.v(t.f("rarityname",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <div class=\"rarity-marker-");t.b(t.v(t.f("rarity",c,p,0)));t.b("\"></div>");t.b("\n" + i);t.b("  <img class=\"appearance-item-icon\" src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<li\n  id=\"appearance-item-{{itemid}}\"\n  class=\"appearance-item group-{{group}}\"\n  data-itemid=\"{{itemid}}\"\n  data-name=\"{{name}}\"\n  data-rarity=\"{{rarity}}\"\n  data-rarityname=\"{{rarityname}}\"\n>\n  <div class=\"rarity-marker-{{rarity}}\"></div>\n  <img class=\"appearance-item-icon\" src=\"{{icon}}\" />\n</li>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/appearance_items_category.html":
/*!***********************************************************!*\
  !*** ./src/templates/html/appearance_items_category.html ***!
  \***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div");t.b("\n" + i);t.b("  id=\"ee-category\"");t.b("\n" + i);t.b("  class=\"appearance-items-category active\"");t.b("\n" + i);t.b("  data-category=\"");t.b(t.v(t.f("category",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-categoryid=\"");t.b(t.v(t.f("categoryid",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <style>");t.b("\n" + i);t.b("    #ee-items {");t.b("\n" + i);t.b("      scrollbar-color: dark;");t.b("\n" + i);t.b("      scrollbar-width: thin;");t.b("\n" + i);t.b("    }");t.b("\n" + i);t.b("  </style>");t.b("\n" + i);t.b("  <ul");t.b("\n" + i);t.b("    class=\"appearance-items-list\"");t.b("\n" + i);t.b("    id=\"ee-items\"");t.b("\n" + i);t.b("    style=\"max-height: calc(100vh - 565px)\"");t.b("\n" + i);t.b("  >");t.b("\n" + i);t.b("    ");t.b(t.t(t.f("items",c,p,0)));t.b("\n" + i);t.b("  </ul>");t.b("\n");t.b("\n" + i);t.b("  <!-- Info -->");t.b("\n" + i);t.b("  <div id=\"ee-info\" class=\"appearance-items-info\">");t.b("\n" + i);t.b("    <div class=\"appearance-info-tips\"></div>");t.b("\n");t.b("\n" + i);t.b("    <h3 class=\"appearance-item-info-name\"></h3>");t.b("\n");t.b("\n" + i);t.b("    <div class=\"appearance-item-info-guard\"></div>");t.b("\n" + i);t.b("    <div class=\"appearance-item-info-rarity\"></div>");t.b("\n" + i);t.b("    <div class=\"appearance-item-info-buttons\">");t.b("\n" + i);t.b("      <div class=\"appearance-forward nl-button\">");t.b("\n" + i);t.b("        ");t.b(t.v(t.d("translate.appearance.buttons.forward",c,p,0)));t.b("\n" + i);t.b("      </div>");t.b("\n" + i);t.b("      <div class=\"appearance-backward nl-button\">");t.b("\n" + i);t.b("        ");t.b(t.v(t.d("translate.appearance.buttons.backward",c,p,0)));t.b("\n" + i);t.b("      </div>");t.b("\n" + i);t.b("    </div>");t.b("\n" + i);t.b("  </div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div\n  id=\"ee-category\"\n  class=\"appearance-items-category active\"\n  data-category=\"{{category}}\"\n  data-categoryid=\"{{categoryid}}\"\n>\n  <style>\n    #ee-items {\n      scrollbar-color: dark;\n      scrollbar-width: thin;\n    }\n  </style>\n  <ul\n    class=\"appearance-items-list\"\n    id=\"ee-items\"\n    style=\"max-height: calc(100vh - 565px)\"\n  >\n    {{{items}}}\n  </ul>\n\n  <!-- Info -->\n  <div id=\"ee-info\" class=\"appearance-items-info\">\n    <div class=\"appearance-info-tips\"></div>\n\n    <h3 class=\"appearance-item-info-name\"></h3>\n\n    <div class=\"appearance-item-info-guard\"></div>\n    <div class=\"appearance-item-info-rarity\"></div>\n    <div class=\"appearance-item-info-buttons\">\n      <div class=\"appearance-forward nl-button\">\n        {{translate.appearance.buttons.forward}}\n      </div>\n      <div class=\"appearance-backward nl-button\">\n        {{translate.appearance.buttons.backward}}\n      </div>\n    </div>\n  </div>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/appearance_items_group.html":
/*!********************************************************!*\
  !*** ./src/templates/html/appearance_items_group.html ***!
  \********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div");t.b("\n" + i);t.b("  id=\"appearance-items-group-");t.b(t.v(t.f("group",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  class=\"appearance-items-category\"");t.b("\n" + i);t.b("  data-categoryid=\"");t.b(t.v(t.f("categoryid",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-category=\"");t.b(t.v(t.f("category",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <ul class=\"appearance-items-list\">");t.b("\n" + i);t.b("    ");t.b(t.t(t.f("items",c,p,0)));t.b("\n" + i);t.b("  </ul>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div\n  id=\"appearance-items-group-{{group}}\"\n  class=\"appearance-items-category\"\n  data-categoryid=\"{{categoryid}}\"\n  data-category=\"{{category}}\"\n>\n  <ul class=\"appearance-items-list\">\n    {{{items}}}\n  </ul>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/auto_buy_button.html":
/*!*************************************************!*\
  !*** ./src/templates/html/auto_buy_button.html ***!
  \*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div");t.b("\n" + i);t.b("  id=\"marketplace-itemDetail-info-autobuy\"");t.b("\n" + i);t.b("  style=\"text-align: center; margin: 20px auto\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <div class=\"nl-button\">");t.b(t.v(t.d("translate.market.add_to_wishlist.title",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div\n  id=\"marketplace-itemDetail-info-autobuy\"\n  style=\"text-align: center; margin: 20px auto\"\n>\n  <div class=\"nl-button\">{{translate.market.add_to_wishlist.title}}</div>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/auto_buy_flavr.html":
/*!************************************************!*\
  !*** ./src/templates/html/auto_buy_flavr.html ***!
  \************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.market.add_to_wishlist.title",c,p,0)));t.b("</h1>");t.b("\n" + i);t.b("<p>");t.b(t.v(t.d("translate.market.add_to_wishlist.text",c,p,0)));t.b("</p>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<h1>{{translate.market.add_to_wishlist.title}}</h1>\n<p>{{translate.market.add_to_wishlist.text}}</p>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/auto_explore_button.html":
/*!*****************************************************!*\
  !*** ./src/templates/html/auto_explore_button.html ***!
  \*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<button");t.b("\n" + i);t.b("  id=\"auto-explore-button\"");t.b("\n" + i);t.b("  class=\"nl-button ");if(t.s(t.f("active",c,p,1),c,p,0,65,71,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b("  data-id=\"");t.b(t.v(t.f("locationId",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  data-mapid=\"");t.b(t.v(t.f("regionId",c,p,0)));t.b("\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  ");t.b(t.v(t.d("translate.pet.auto_explore",c,p,0)));t.b("\n" + i);t.b("</button>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<button\n  id=\"auto-explore-button\"\n  class=\"nl-button {{#active}}active{{/active}}\"\n  data-id=\"{{locationId}}\"\n  data-mapid=\"{{regionId}}\"\n>\n  {{translate.pet.auto_explore}}\n</button>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/carousel_news.html":
/*!***********************************************!*\
  !*** ./src/templates/html/carousel_news.html ***!
  \***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<a");t.b("\n" + i);t.b("  id=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  class=\"carousel-news carousel-ee\"");t.b("\n" + i);t.b("  href=\"\"");t.b("\n" + i);t.b("  style=\"background-image: url(");t.b(t.v(t.f("backgroundImage",c,p,0)));t.b(")\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <div>");t.b("\n" + i);t.b("    <h4>");t.b(t.v(t.f("h4",c,p,0)));t.b("</h4>");t.b("\n" + i);t.b("    <h5>");t.b(t.v(t.f("h5",c,p,0)));t.b("</h5>");t.b("\n" + i);t.b("    <p>");t.b(t.v(t.f("p",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("  </div>");t.b("\n" + i);t.b("</a>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<a\n  id=\"{{id}}\"\n  class=\"carousel-news carousel-ee\"\n  href=\"\"\n  style=\"background-image: url({{backgroundImage}})\"\n>\n  <div>\n    <h4>{{h4}}</h4>\n    <h5>{{h5}}</h5>\n    <p>{{p}}</p>\n  </div>\n</a>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/change_price_flavr.html":
/*!****************************************************!*\
  !*** ./src/templates/html/change_price_flavr.html ***!
  \****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.market.change_price.title",c,p,0)));t.b("</h1>");t.b("\n" + i);t.b("<p>");t.b(t.v(t.d("translate.market.change_price.text",c,p,0)));t.b("</p>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<h1>{{translate.market.change_price.title}}</h1>\n<p>{{translate.market.change_price.text}}</p>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/created_outfit_flavr.html":
/*!******************************************************!*\
  !*** ./src/templates/html/created_outfit_flavr.html ***!
  \******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<h1>");t.b(t.v(t.d("translate.appearance.favourites.save_outfit.title",c,p,0)));t.b("</h1>");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.save_outfit.saved_locally",c,p,0)));t.b("</p>");t.b("\n");t.b("\n" + i);t.b("<br />");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.save_outfit.goto_account",c,p,0)));t.b("</p>");t.b("\n");t.b("\n" + i);t.b("<input");t.b("\n" + i);t.b("  id=\"choose-name\"");t.b("\n" + i);t.b("  maxlength=\"30\"");t.b("\n" + i);t.b("  minlength=\"1\"");t.b("\n" + i);t.b("  placeholder=\"");t.b(t.v(t.d("translate.appearance.favourites.save_outfit.placeholder",c,p,0)));t.b("\"");t.b("\n" + i);t.b("/>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<h1>{{translate.appearance.favourites.save_outfit.title}}</h1>\n\n<p>{{{translate.appearance.favourites.save_outfit.saved_locally}}}</p>\n\n<br />\n\n<p>{{{translate.appearance.favourites.save_outfit.goto_account}}}</p>\n\n<input\n  id=\"choose-name\"\n  maxlength=\"30\"\n  minlength=\"1\"\n  placeholder=\"{{translate.appearance.favourites.save_outfit.placeholder}}\"\n/>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/favourite_outfit_flavr.html":
/*!********************************************************!*\
  !*** ./src/templates/html/favourite_outfit_flavr.html ***!
  \********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<style>");t.b("\n" + i);t.b("  .created-outfit-popup .flavr-outer .flavr-message::after {");t.b("\n" + i);t.b("    background-image: url(");t.b(t.v(t.f("url",c,p,0)));t.b(");");t.b("\n" + i);t.b("    background-size: contain;");t.b("\n" + i);t.b("  }");t.b("\n" + i);t.b("</style>");t.b("\n");t.b("\n" + i);t.b("<h1>");t.b(t.v(t.f("name",c,p,0)));t.b("</h1>");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.click_outfit.saved_locally",c,p,0)));t.b("</p>");t.b("\n");t.b("\n" + i);t.b("<br />");t.b("\n");t.b("\n" + i);t.b("<p>");t.b(t.t(t.d("translate.appearance.favourites.click_outfit.goto_account",c,p,0)));t.b("</p>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<style>\n  .created-outfit-popup .flavr-outer .flavr-message::after {\n    background-image: url({{url}});\n    background-size: contain;\n  }\n</style>\n\n<h1>{{name}}</h1>\n\n<p>{{{translate.appearance.favourites.click_outfit.saved_locally}}}</p>\n\n<br />\n\n<p>{{{translate.appearance.favourites.click_outfit.goto_account}}}</p>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/favourites_action.html":
/*!***************************************************!*\
  !*** ./src/templates/html/favourites_action.html ***!
  \***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<button id=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\" class=\"nl-button favorites-action-ee\">");t.b(t.v(t.f("text",c,p,0)));t.b("</button>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<button id=\"{{id}}\" class=\"nl-button favorites-action-ee\">{{text}}</button>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/flavr_notif/icon_message.html":
/*!**********************************************************!*\
  !*** ./src/templates/html/flavr_notif/icon_message.html ***!
  \**********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<img");t.b("\n" + i);t.b("  src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  alt=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  height=\"21\"");t.b("\n" + i);t.b("  style=\"display: inline-block; margin: -2px auto\"");t.b("\n" + i);t.b("/>");t.b("\n" + i);t.b(t.t(t.f("message",c,p,0)));t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<img\n  src=\"{{icon}}\"\n  alt=\"{{name}}\"\n  height=\"21\"\n  style=\"display: inline-block; margin: -2px auto\"\n/>\n{{{message}}}\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/header_takeover.html":
/*!*************************************************!*\
  !*** ./src/templates/html/header_takeover.html ***!
  \*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li");t.b("\n" + i);t.b("  id=\"header-takeover\"");t.b("\n" + i);t.b("  title=\"");t.b(t.v(t.d("translate.home.takeover",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  style=\"transition: transform ease-in-out 200ms; cursor: pointer\"");t.b("\n" + i);t.b("  onMouseOver=\"this.style.transform='scale(1.3)'\"");t.b("\n" + i);t.b("  onMouseOut=\"this.style.transform='scale(1)'\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <a>");t.b("\n" + i);t.b("    <img");t.b("\n" + i);t.b("      src=\"/static/img/new-layout/home/connected/lock.png\"");t.b("\n" + i);t.b("      alt=\"");t.b(t.v(t.d("translate.home.takeover",c,p,0)));t.b("\"");t.b("\n" + i);t.b("      style=\"filter: contrast(0%) brightness(200%) ");if(!t.s(t.f("takeover",c,p,1),c,p,1,0,0,"")){t.b("opacity(0)");};t.b("\"");t.b("\n" + i);t.b("      height=\"21\"");t.b("\n" + i);t.b("    />");t.b("\n" + i);t.b("  </a>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<li\n  id=\"header-takeover\"\n  title=\"{{translate.home.takeover}}\"\n  style=\"transition: transform ease-in-out 200ms; cursor: pointer\"\n  onMouseOver=\"this.style.transform='scale(1.3)'\"\n  onMouseOut=\"this.style.transform='scale(1)'\"\n>\n  <a>\n    <img\n      src=\"/static/img/new-layout/home/connected/lock.png\"\n      alt=\"{{translate.home.takeover}}\"\n      style=\"filter: contrast(0%) brightness(200%) {{^takeover}}opacity(0){{/takeover}}\"\n      height=\"21\"\n    />\n  </a>\n</li>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/home_content_small.html":
/*!****************************************************!*\
  !*** ./src/templates/html/home_content_small.html ***!
  \****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<a");t.b("\n" + i);t.b("  id=\"home-");t.b(t.v(t.f("id",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  class=\"home-content-tile home-content-small home-content-small-ee\"");t.b("\n" + i);t.b("  href=\"");t.b(t.v(t.f("href",c,p,0)));t.b("\"");t.b("\n" + i);t.b("  style=\"background-image: url(");t.b(t.v(t.f("backgroundImage",c,p,0)));t.b(");\"");t.b("\n" + i);t.b(">");t.b("\n" + i);t.b("  <h4>");t.b(t.v(t.f("h4",c,p,0)));t.b("</h4>");t.b("\n" + i);t.b("</a>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<a\n  id=\"home-{{id}}\"\n  class=\"home-content-tile home-content-small home-content-small-ee\"\n  href=\"{{href}}\"\n  style=\"background-image: url({{backgroundImage}});\"\n>\n  <h4>{{h4}}</h4>\n</a>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/main_menu.html":
/*!*******************************************!*\
  !*** ./src/templates/html/main_menu.html ***!
  \*******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li class=\"main-menu-");t.b(t.v(t.f("class",c,p,0)));t.b(" main-menu-ee\">");t.b("\n" + i);t.b("  <a href=\"");t.b(t.v(t.f("href",c,p,0)));t.b("\">");t.b(t.v(t.f("text",c,p,0)));t.b("</a>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<li class=\"main-menu-{{class}} main-menu-ee\">\n  <a href=\"{{href}}\">{{text}}</a>\n</li>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/market_history.html":
/*!************************************************!*\
  !*** ./src/templates/html/market_history.html ***!
  \************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<style>");t.b("\n" + i);t.b("  /* #marketplace-abstract-purchases and #marketplace-abstract-sales were");t.b("\n" + i);t.b("  re-written to target #purchase-history and #sale-history. */");t.b("\n");t.b("\n" + i);t.b("  #purchase-history,");t.b("\n" + i);t.b("  #sale-history {");t.b("\n" + i);t.b("    height: 600px;");t.b("\n" + i);t.b("    position: relative;");t.b("\n" + i);t.b("    width: 360px;");t.b("\n" + i);t.b("    display: inline-block;");t.b("\n" + i);t.b("    vertical-align: top;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  #sale-history .abstract-actions,");t.b("\n" + i);t.b("  #purchase-history .abstract-actions {");t.b("\n" + i);t.b("    position: relative;");t.b("\n" + i);t.b("    top: -40px;");t.b("\n" + i);t.b("    display: flex;");t.b("\n" + i);t.b("    flex-direction: column;");t.b("\n" + i);t.b("    justify-content: space-evenly;");t.b("\n" + i);t.b("    height: 80px;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  #sale-history .abstract-time,");t.b("\n" + i);t.b("  #purchase-history .abstract-time {");t.b("\n" + i);t.b("    position: static;");t.b("\n" + i);t.b("    display: inline;");t.b("\n" + i);t.b("    height: auto;");t.b("\n" + i);t.b("    color: #fb8900;");t.b("\n" + i);t.b("    font-weight: bold;");t.b("\n" + i);t.b("    font-size: 13px;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  #purchase-history {");t.b("\n" + i);t.b("    margin-right: 80px;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  #purchase-history:before {");t.b("\n" + i);t.b("    content: \"\";");t.b("\n" + i);t.b("    position: absolute;");t.b("\n" + i);t.b("    top: 120px;");t.b("\n" + i);t.b("    right: -42px;");t.b("\n" + i);t.b("    border-right: solid 2px #aaa;");t.b("\n" + i);t.b("    height: 320px;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  /* Custom fixes to the layout */");t.b("\n");t.b("\n" + i);t.b("  #purchase-history li {");t.b("\n" + i);t.b("    margin-left: 4px;");t.b("\n" + i);t.b("    margin-right: 4px;");t.b("\n" + i);t.b("  }");t.b("\n" + i);t.b("</style>");t.b("\n");t.b("\n" + i);t.b("<!-- Purchases -->");t.b("\n" + i);t.b("<div class=\"marketplace-abstract\" id=\"purchase-history\">");t.b("\n" + i);t.b("  <h2 class=\"section-subtitle\">");t.b("\n" + i);t.b("    ");t.b(t.v(t.d("translate.market.auctions.purchase_history",c,p,0)));t.b("\n" + i);t.b("  </h2>");t.b("\n");t.b("\n" + i);t.b("  <ul class=\"marketplace-purchases-items\">");t.b("\n" + i);if(t.s(t.f("purchases",c,p,1),c,p,0,1284,2609,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("    <li");t.b("\n" + i);t.b("      data-itemid=\"");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b("      class=\"");t.b("\n" + i);t.b("        marketplace-abstract marketplace-auctions-item marketplace-sales-item");t.b("\n" + i);t.b("      \"");t.b("\n" + i);t.b("    >");t.b("\n" + i);t.b("      <!-- Icon -->");t.b("\n" + i);t.b("      <div class=\"abstract-icon\">");t.b("\n" + i);t.b("        <img src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("      </div>");t.b("\n");t.b("\n" + i);t.b("      <!-- Prices -->");t.b("\n" + i);t.b("      <div class=\"abstract-container\">");t.b("\n" + i);t.b("        <div class=\"abstract-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div class=\"abstract-content\">");t.b("\n" + i);t.b("          <div class=\"abstract-currentPrice\">");t.b("\n" + i);t.b("            ");if(t.s(t.f("currentPrice",c,p,1),c,p,0,1754,1923,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.current_price",c,p,0)));t.b("\n" + i);t.b("            <span class=\"price-item\">");t.b(t.v(t.d("currentPrice.price",c,p,0)));t.b("</span>");t.b("\n" + i);t.b("            <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b("            <br />");t.b("\n" + i);t.b("            ");if(t.s(t.f("buyNowPrice",c,p,1),c,p,0,1988,2156,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.buy_now_price",c,p,0)));t.b("\n" + i);t.b("            <span class=\"price-item\">");t.b(t.v(t.d("buyNowPrice.price",c,p,0)));t.b("</span>");t.b("\n" + i);t.b("            <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b("          </div>");t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </div>");t.b("\n");t.b("\n" + i);t.b("      <!-- Actions -->");t.b("\n" + i);t.b("      <div class=\"abstract-actions\">");t.b("\n" + i);t.b("        <div class=\"abstract-time\">");t.b(t.v(t.f("date",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div");t.b("\n" + i);t.b("          class=\"");t.b("\n" + i);t.b("            nl-button nl-button-sm");t.b("\n" + i);t.b("            marketplace-itemDetail-cancel");t.b("\n" + i);t.b("            delete-button");t.b("\n" + i);t.b("          \"");t.b("\n" + i);t.b("          data-itemid=\"");t.b(t.v(t.f("itemid",c,p,0)));t.b("\"");t.b("\n" + i);t.b("        >");t.b("\n" + i);t.b("          ");t.b(t.v(t.d("translate.market.auctions.delete",c,p,0)));t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </div>");t.b("\n" + i);t.b("    </li>");t.b("\n" + i);});c.pop();}t.b("  </ul>");t.b("\n" + i);t.b("</div>");t.b("\n");t.b("\n" + i);t.b("<!-- Sales -->");t.b("\n" + i);t.b("<div class=\"marketplace-abstract\" id=\"sale-history\">");t.b("\n" + i);t.b("  <h2 class=\"section-subtitle\">");t.b(t.v(t.d("translate.market.auctions.sales_history",c,p,0)));t.b("</h2>");t.b("\n");t.b("\n" + i);t.b("  <ul class=\"marketplace-sales-items\">");t.b("\n" + i);if(t.s(t.f("sales",c,p,1),c,p,0,2842,4036,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("    <li class=\"marketplace-abstract marketplace-sales-item\">");t.b("\n" + i);t.b("      <!-- Icon -->");t.b("\n" + i);t.b("      <div class=\"abstract-icon\">");t.b("\n" + i);t.b("        <img src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("      </div>");t.b("\n");t.b("\n" + i);t.b("      <!-- Prices -->");t.b("\n" + i);t.b("      <div class=\"abstract-container\">");t.b("\n" + i);t.b("        <div class=\"abstract-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div class=\"abstract-content\">");t.b("\n" + i);t.b("          <div class=\"abstract-currentPrice\">");t.b("\n" + i);t.b("            ");if(t.s(t.f("currentPrice",c,p,1),c,p,0,3228,3391,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.current_price",c,p,0)));t.b("\n" + i);t.b("            <span class=\"price-item\">");t.b(t.v(t.f("currentPrice",c,p,0)));t.b("</span>");t.b("\n" + i);t.b("            <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b("            <br />");t.b("\n" + i);t.b("            ");if(t.s(t.f("buyNowPrice",c,p,1),c,p,0,3456,3618,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" ");t.b(t.v(t.d("translate.market.auctions.buy_now_price",c,p,0)));t.b("\n" + i);t.b("            <span class=\"price-item\">");t.b(t.v(t.f("buyNowPrice",c,p,0)));t.b("</span>");t.b("\n" + i);t.b("            <span class=\"maana-icon\"></span>");t.b("\n" + i);});c.pop();}t.b("          </div>");t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </div>");t.b("\n");t.b("\n" + i);t.b("      <!-- Actions -->");t.b("\n" + i);t.b("      <div class=\"abstract-actions\">");t.b("\n" + i);t.b("        <div class=\"abstract-time\">");t.b(t.v(t.f("date",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("        <div");t.b("\n" + i);t.b("          class=\"");t.b("\n" + i);t.b("            nl-button nl-button-sm");t.b("\n" + i);t.b("            marketplace-itemDetail-cancel");t.b("\n" + i);t.b("            delete-button");t.b("\n" + i);t.b("          \"");t.b("\n" + i);t.b("        >");t.b("\n" + i);t.b("          ");t.b(t.v(t.d("translate.market.auctions.delete",c,p,0)));t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </div>");t.b("\n" + i);t.b("    </li>");t.b("\n" + i);});c.pop();}t.b("  </ul>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<style>\n  /* #marketplace-abstract-purchases and #marketplace-abstract-sales were\n  re-written to target #purchase-history and #sale-history. */\n\n  #purchase-history,\n  #sale-history {\n    height: 600px;\n    position: relative;\n    width: 360px;\n    display: inline-block;\n    vertical-align: top;\n  }\n\n  #sale-history .abstract-actions,\n  #purchase-history .abstract-actions {\n    position: relative;\n    top: -40px;\n    display: flex;\n    flex-direction: column;\n    justify-content: space-evenly;\n    height: 80px;\n  }\n\n  #sale-history .abstract-time,\n  #purchase-history .abstract-time {\n    position: static;\n    display: inline;\n    height: auto;\n    color: #fb8900;\n    font-weight: bold;\n    font-size: 13px;\n  }\n\n  #purchase-history {\n    margin-right: 80px;\n  }\n\n  #purchase-history:before {\n    content: \"\";\n    position: absolute;\n    top: 120px;\n    right: -42px;\n    border-right: solid 2px #aaa;\n    height: 320px;\n  }\n\n  /* Custom fixes to the layout */\n\n  #purchase-history li {\n    margin-left: 4px;\n    margin-right: 4px;\n  }\n</style>\n\n<!-- Purchases -->\n<div class=\"marketplace-abstract\" id=\"purchase-history\">\n  <h2 class=\"section-subtitle\">\n    {{translate.market.auctions.purchase_history}}\n  </h2>\n\n  <ul class=\"marketplace-purchases-items\">\n    {{#purchases}}\n    <li\n      data-itemid=\"{{itemid}}\"\n      class=\"\n        marketplace-abstract marketplace-auctions-item marketplace-sales-item\n      \"\n    >\n      <!-- Icon -->\n      <div class=\"abstract-icon\">\n        <img src=\"{{icon}}\" />\n      </div>\n\n      <!-- Prices -->\n      <div class=\"abstract-container\">\n        <div class=\"abstract-name\">{{name}}</div>\n        <div class=\"abstract-content\">\n          <div class=\"abstract-currentPrice\">\n            {{#currentPrice}} {{translate.market.auctions.current_price}}\n            <span class=\"price-item\">{{currentPrice.price}}</span>\n            <span class=\"maana-icon\"></span>\n            {{/currentPrice}}\n            <br />\n            {{#buyNowPrice}} {{translate.market.auctions.buy_now_price}}\n            <span class=\"price-item\">{{buyNowPrice.price}}</span>\n            <span class=\"maana-icon\"></span>\n            {{/buyNowPrice}}\n          </div>\n        </div>\n      </div>\n\n      <!-- Actions -->\n      <div class=\"abstract-actions\">\n        <div class=\"abstract-time\">{{date}}</div>\n        <div\n          class=\"\n            nl-button nl-button-sm\n            marketplace-itemDetail-cancel\n            delete-button\n          \"\n          data-itemid=\"{{itemid}}\"\n        >\n          {{translate.market.auctions.delete}}\n        </div>\n      </div>\n    </li>\n    {{/purchases}}\n  </ul>\n</div>\n\n<!-- Sales -->\n<div class=\"marketplace-abstract\" id=\"sale-history\">\n  <h2 class=\"section-subtitle\">{{translate.market.auctions.sales_history}}</h2>\n\n  <ul class=\"marketplace-sales-items\">\n    {{#sales}}\n    <li class=\"marketplace-abstract marketplace-sales-item\">\n      <!-- Icon -->\n      <div class=\"abstract-icon\">\n        <img src=\"{{icon}}\" />\n      </div>\n\n      <!-- Prices -->\n      <div class=\"abstract-container\">\n        <div class=\"abstract-name\">{{name}}</div>\n        <div class=\"abstract-content\">\n          <div class=\"abstract-currentPrice\">\n            {{#currentPrice}} {{translate.market.auctions.current_price}}\n            <span class=\"price-item\">{{currentPrice}}</span>\n            <span class=\"maana-icon\"></span>\n            {{/currentPrice}}\n            <br />\n            {{#buyNowPrice}} {{translate.market.auctions.buy_now_price}}\n            <span class=\"price-item\">{{buyNowPrice}}</span>\n            <span class=\"maana-icon\"></span>\n            {{/buyNowPrice}}\n          </div>\n        </div>\n      </div>\n\n      <!-- Actions -->\n      <div class=\"abstract-actions\">\n        <div class=\"abstract-time\">{{date}}</div>\n        <div\n          class=\"\n            nl-button nl-button-sm\n            marketplace-itemDetail-cancel\n            delete-button\n          \"\n        >\n          {{translate.market.auctions.delete}}\n        </div>\n      </div>\n    </li>\n    {{/sales}}\n  </ul>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/outfit_thumbs.html":
/*!***********************************************!*\
  !*** ./src/templates/html/outfit_thumbs.html ***!
  \***********************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div id=\"ee-outfit-thumbs\">");t.b("\n" + i);t.b("  <style>");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-available-slot {");t.b("\n" + i);t.b("      background-image: url(https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/available-favorite.png);");t.b("\n" + i);t.b("      background-position: -14px -11px;");t.b("\n" + i);t.b("      background-size: 171px 244px;");t.b("\n" + i);t.b("      border-radius: 44px;");t.b("\n" + i);t.b("      box-shadow: 0 0 4px 4px rgba(255, 255, 255, 0.8);");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-available-slot::after {");t.b("\n" + i);t.b("      background: url(/static/img/new-layout/wardrobe/icon-plus.png);");t.b("\n" + i);t.b("      content: \" \";");t.b("\n" + i);t.b("      filter: drop-shadow(0 0 6px rgba(237, 12, 245, 0.9));");t.b("\n" + i);t.b("      height: 71px;");t.b("\n" + i);t.b("      left: 50%;");t.b("\n" + i);t.b("      opacity: 0;");t.b("\n" + i);t.b("      position: absolute;");t.b("\n" + i);t.b("      top: 50%;");t.b("\n" + i);t.b("      transform: translate(-50%, -50%);");t.b("\n" + i);t.b("      transition: opacity ease-in-out 100ms;");t.b("\n" + i);t.b("      width: 66px;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-available-slot:hover::after,");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-outfit-thumb:hover p {");t.b("\n" + i);t.b("      opacity: 1;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-outfit-thumb img {");t.b("\n" + i);t.b("      border-radius: 44px;");t.b("\n" + i);t.b("      height: 100%;");t.b("\n" + i);t.b("      width: 100%;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    #appearance-items-category-favorites .slot.ee-outfit-thumb p {");t.b("\n" + i);t.b("      background: rgba(0, 0, 0, 0.5);");t.b("\n" + i);t.b("      color: #fff;");t.b("\n" + i);t.b("      font-family: \"Alegreya Sans SC\", sans-serif;");t.b("\n" + i);t.b("      font-size: 22px;");t.b("\n" + i);t.b("      font-weight: 700;");t.b("\n" + i);t.b("      left: 50%;");t.b("\n" + i);t.b("      line-height: 22px;");t.b("\n" + i);t.b("      opacity: 0;");t.b("\n" + i);t.b("      padding: 12px 0;");t.b("\n" + i);t.b("      position: absolute;");t.b("\n" + i);t.b("      text-align: center;");t.b("\n" + i);t.b("      top: 50%;");t.b("\n" + i);t.b("      transform: translate(-50%, -50%);");t.b("\n" + i);t.b("      transition: opacity ease-in-out 400ms;");t.b("\n" + i);t.b("      width: 100%;");t.b("\n" + i);t.b("    }");t.b("\n" + i);t.b("  </style>");t.b("\n");t.b("\n" + i);if(t.s(t.f("outfits",c,p,1),c,p,0,1654,1790,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("  <div class=\"slot ee-outfit-thumb\" data-array-index=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\">");t.b("\n" + i);t.b("    <img alt=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\" src=\"");t.b(t.v(t.f("url",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("    <p>");t.b(t.v(t.f("name",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("  </div>");t.b("\n" + i);});c.pop();}t.b("\n" + i);t.b("  <div class=\"slot ee-available-slot\"></div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div id=\"ee-outfit-thumbs\">\n  <style>\n    #appearance-items-category-favorites .slot.ee-available-slot {\n      background-image: url(https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/available-favorite.png);\n      background-position: -14px -11px;\n      background-size: 171px 244px;\n      border-radius: 44px;\n      box-shadow: 0 0 4px 4px rgba(255, 255, 255, 0.8);\n    }\n\n    #appearance-items-category-favorites .slot.ee-available-slot::after {\n      background: url(/static/img/new-layout/wardrobe/icon-plus.png);\n      content: \" \";\n      filter: drop-shadow(0 0 6px rgba(237, 12, 245, 0.9));\n      height: 71px;\n      left: 50%;\n      opacity: 0;\n      position: absolute;\n      top: 50%;\n      transform: translate(-50%, -50%);\n      transition: opacity ease-in-out 100ms;\n      width: 66px;\n    }\n\n    #appearance-items-category-favorites .slot.ee-available-slot:hover::after,\n    #appearance-items-category-favorites .slot.ee-outfit-thumb:hover p {\n      opacity: 1;\n    }\n\n    #appearance-items-category-favorites .slot.ee-outfit-thumb img {\n      border-radius: 44px;\n      height: 100%;\n      width: 100%;\n    }\n\n    #appearance-items-category-favorites .slot.ee-outfit-thumb p {\n      background: rgba(0, 0, 0, 0.5);\n      color: #fff;\n      font-family: \"Alegreya Sans SC\", sans-serif;\n      font-size: 22px;\n      font-weight: 700;\n      left: 50%;\n      line-height: 22px;\n      opacity: 0;\n      padding: 12px 0;\n      position: absolute;\n      text-align: center;\n      top: 50%;\n      transform: translate(-50%, -50%);\n      transition: opacity ease-in-out 400ms;\n      width: 100%;\n    }\n  </style>\n\n  {{#outfits}}\n  <div class=\"slot ee-outfit-thumb\" data-array-index=\"{{id}}\">\n    <img alt=\"{{name}}\" src=\"{{url}}\" />\n    <p>{{name}}</p>\n  </div>\n  {{/outfits}}\n\n  <div class=\"slot ee-available-slot\"></div>\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/profile_contact_action.html":
/*!********************************************************!*\
  !*** ./src/templates/html/profile_contact_action.html ***!
  \********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<li id=\"");t.b(t.v(t.f("id",c,p,0)));t.b("\" class=\"profile-contact-action-ee\">");t.b("\n" + i);t.b("  <span class=\"nl-button nl-button-sm\">");t.b("\n" + i);t.b("    <div class=\"action-description\">");t.b(t.v(t.f("actionDescription",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("  </span>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<li id=\"{{id}}\" class=\"profile-contact-action-ee\">\n  <span class=\"nl-button nl-button-sm\">\n    <div class=\"action-description\">{{actionDescription}}</div>\n  </span>\n</li>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/settings.html":
/*!******************************************!*\
  !*** ./src/templates/html/settings.html ***!
  \******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<div class=\"account-misc-bloc account-ee-bloc bloc\">");t.b("\n" + i);t.b("  <!--");t.b("\n" + i);t.b("  <style>");t.b("\n" + i);t.b("    table {");t.b("\n" + i);t.b("      width: 100%;");t.b("\n" + i);t.b("    }");t.b("\n");t.b("\n" + i);t.b("    th {");t.b("\n" + i);t.b("      text-align: start;");t.b("\n" + i);t.b("      padding: 1em;");t.b("\n" + i);t.b("    }");t.b("\n" + i);t.b("  </style>");t.b("\n" + i);t.b("  -->");t.b("\n");t.b("\n" + i);t.b("  <!-- Settings -->");t.b("\n" + i);t.b("  <h2 class=\"section-title\">");t.b(t.v(t.d("translate.account.enhancements",c,p,0)));t.b("</h2>");t.b("\n" + i);t.b("  <ul class=\"account-misc-actions\">");t.b("\n" + i);t.b("    <li");t.b("\n" + i);t.b("      id=\"ee-debug-enabled\"");t.b("\n" + i);t.b("      class=\"nl-button nl-button-sm ");if(t.s(t.f("debug",c,p,1),c,p,0,392,398,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b("      title=\"");t.b(t.v(t.d("translate.account.debug_tooltip",c,p,0)));t.b("\"");t.b("\n" + i);t.b("    >");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.debug",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("    <li");t.b("\n" + i);t.b("      id=\"ee-minigames-enabled\"");t.b("\n" + i);t.b("      class=\"nl-button nl-button-sm ");if(t.s(t.f("minigames",c,p,1),c,p,0,600,606,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b("    >");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.minigames",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("    <li");t.b("\n" + i);t.b("      id=\"ee-explorations-enabled\"");t.b("\n" + i);t.b("      class=\"nl-button nl-button-sm ");if(t.s(t.f("explorations",c,p,1),c,p,0,772,778,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b("    >");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.explorations",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("    <li");t.b("\n" + i);t.b("      id=\"ee-market-enabled\"");t.b("\n" + i);t.b("      class=\"nl-button nl-button-sm ");if(t.s(t.f("market",c,p,1),c,p,0,938,944,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("active");});c.pop();}t.b("\"");t.b("\n" + i);t.b("    >");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.market",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("    <li id=\"ee-import\" class=\"nl-button nl-button-sm\">");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.import",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("    <li id=\"ee-export\" class=\"nl-button nl-button-sm\">");t.b("\n" + i);t.b("      ");t.b(t.v(t.d("translate.account.export",c,p,0)));t.b("\n" + i);t.b("    </li>");t.b("\n" + i);t.b("  </ul>");t.b("\n");t.b("\n" + i);t.b("  <!-- Explorations");t.b("\n" + i);t.b("  <h3 class=\"section-title\">Explorations</h3>");t.b("\n" + i);t.b("  <table>");t.b("\n" + i);t.b("    <thead>");t.b("\n" + i);t.b("      <th>Location</th>");t.b("\n" + i);t.b("      <th>Delete</th>");t.b("\n" + i);t.b("    </thead>");t.b("\n" + i);t.b("    <tbody>");t.b("\n" + i);t.b("      <td>Rock</td>");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <div class=\"nl-button nl-button-sm\">Delete</div>");t.b("\n" + i);t.b("      </td>");t.b("\n" + i);t.b("    </tbody>");t.b("\n" + i);t.b("  </table>");t.b("\n" + i);t.b("  -->");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<div class=\"account-misc-bloc account-ee-bloc bloc\">\n  <!--\n  <style>\n    table {\n      width: 100%;\n    }\n\n    th {\n      text-align: start;\n      padding: 1em;\n    }\n  </style>\n  -->\n\n  <!-- Settings -->\n  <h2 class=\"section-title\">{{translate.account.enhancements}}</h2>\n  <ul class=\"account-misc-actions\">\n    <li\n      id=\"ee-debug-enabled\"\n      class=\"nl-button nl-button-sm {{#debug}}active{{/debug}}\"\n      title=\"{{translate.account.debug_tooltip}}\"\n    >\n      {{translate.account.debug}}\n    </li>\n    <li\n      id=\"ee-minigames-enabled\"\n      class=\"nl-button nl-button-sm {{#minigames}}active{{/minigames}}\"\n    >\n      {{translate.account.minigames}}\n    </li>\n    <li\n      id=\"ee-explorations-enabled\"\n      class=\"nl-button nl-button-sm {{#explorations}}active{{/explorations}}\"\n    >\n      {{translate.account.explorations}}\n    </li>\n    <li\n      id=\"ee-market-enabled\"\n      class=\"nl-button nl-button-sm {{#market}}active{{/market}}\"\n    >\n      {{translate.account.market}}\n    </li>\n    <li id=\"ee-import\" class=\"nl-button nl-button-sm\">\n      {{translate.account.import}}\n    </li>\n    <li id=\"ee-export\" class=\"nl-button nl-button-sm\">\n      {{translate.account.export}}\n    </li>\n  </ul>\n\n  <!-- Explorations\n  <h3 class=\"section-title\">Explorations</h3>\n  <table>\n    <thead>\n      <th>Location</th>\n      <th>Delete</th>\n    </thead>\n    <tbody>\n      <td>Rock</td>\n      <td>\n        <div class=\"nl-button nl-button-sm\">Delete</div>\n      </td>\n    </tbody>\n  </table>\n  -->\n</div>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/wishlist_button.html":
/*!*************************************************!*\
  !*** ./src/templates/html/wishlist_button.html ***!
  \*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<a id=\"wishlist-button\" class=\"nl-button\">");t.b("\n" + i);t.b("  ");t.b(t.v(t.d("translate.market.wishlist.title",c,p,0)));t.b("\n" + i);t.b("</a>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<a id=\"wishlist-button\" class=\"nl-button\">\n  {{translate.market.wishlist.title}}\n</a>\n", H);return T; }();

/***/ }),

/***/ "./src/templates/html/wishlist_settings.html":
/*!***************************************************!*\
  !*** ./src/templates/html/wishlist_settings.html ***!
  \***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/hogan.js@3.0.2/node_modules/hogan.js/lib/hogan.js");
module.exports = function() { var T = new H.Template({code: function (c,p,i) { var t=this;t.b(i=i||"");t.b("<style>");t.b("\n" + i);t.b("  table {");t.b("\n" + i);t.b("    text-align: center;");t.b("\n" + i);t.b("    width: 100%;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  .action-picto {");t.b("\n" + i);t.b("    height: 50px;");t.b("\n" + i);t.b("    width: 50px;");t.b("\n" + i);t.b("    cursor: pointer;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  .action-picto:hover:not(.disabled),");t.b("\n" + i);t.b("  .edit-price:hover {");t.b("\n" + i);t.b("    animation: button-bounce 300ms linear forwards;");t.b("\n" + i);t.b("    filter: brightness(1.05) contrast(1.1);");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  .edit-price {");t.b("\n" + i);t.b("    cursor: pointer;");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  img.disabled {");t.b("\n" + i);t.b("    filter: grayscale(1);");t.b("\n" + i);t.b("  }");t.b("\n");t.b("\n" + i);t.b("  .item-icon {");t.b("\n" + i);t.b("    width: 100px;");t.b("\n" + i);t.b("    height: 100px;");t.b("\n" + i);t.b("  }");t.b("\n" + i);t.b("</style>");t.b("\n");t.b("\n" + i);t.b("<table>");t.b("\n" + i);t.b("  <thead>");t.b("\n" + i);t.b("    <tr>");t.b("\n" + i);t.b("      <th>");t.b(t.v(t.d("translate.market.wishlist.icon",c,p,0)));t.b("</th>");t.b("\n" + i);t.b("      <th>");t.b(t.v(t.d("translate.market.wishlist.name",c,p,0)));t.b("</th>");t.b("\n" + i);t.b("      <th>");t.b(t.v(t.d("translate.market.wishlist.price",c,p,0)));t.b("</th>");t.b("\n" + i);t.b("      <th>");t.b(t.v(t.d("translate.market.wishlist.status",c,p,0)));t.b("</th>");t.b("\n" + i);t.b("      <th>");t.b(t.v(t.d("translate.market.wishlist.actions",c,p,0)));t.b("</th>");t.b("\n" + i);t.b("    </tr>");t.b("\n" + i);t.b("  </thead>");t.b("\n" + i);t.b("  <tbody>");t.b("\n" + i);if(t.s(t.f("wishlist",c,p,1),c,p,0,791,2027,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("    <tr class=\"marketplace-abstract\" data-wearableitemid=\"");t.b(t.v(t.f("wearableitemid",c,p,0)));t.b("\">");t.b("\n" + i);t.b("      <!-- Icon -->");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <img class=\"item-icon\" src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" alt=\"");t.b(t.v(t.f("name",c,p,0)));t.b("\" />");t.b("\n" + i);t.b("      </td>");t.b("\n");t.b("\n" + i);t.b("      <!-- Name -->");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <div class=\"abstract-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b("      </td>");t.b("\n");t.b("\n" + i);t.b("      <!-- Price -->");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <div");t.b("\n" + i);t.b("          class=\"edit-price\"");t.b("\n" + i);t.b("          title=\"");t.b(t.v(t.d("translate.market.wishlist.change_price",c,p,0)));t.b("\"");t.b("\n" + i);t.b("        >");t.b("\n" + i);t.b("          <span class=\"price-item\">");t.b(t.v(t.f("price",c,p,0)));t.b("</span>");t.b("\n" + i);t.b("          <span class=\"maana-icon\" alt=\"maanas\"></span>");t.b("\n" + i);t.b("        </div>");t.b("\n" + i);t.b("      </td>");t.b("\n");t.b("\n" + i);t.b("      <!-- Error -->");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <p class=\"error\">");t.b(t.v(t.f("error",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("      </td>");t.b("\n");t.b("\n" + i);t.b("      <!-- Actions -->");t.b("\n" + i);t.b("      <td>");t.b("\n" + i);t.b("        <img");t.b("\n" + i);t.b("          class=\"action-picto reset-item-status ");if(!t.s(t.f("error",c,p,1),c,p,1,0,0,"")){t.b("disabled");};t.b("\"");t.b("\n" + i);t.b("          src=\"/static/img/new-layout/wardrobe/reset-btn.png\"");t.b("\n" + i);t.b("          title=\"");t.b(t.v(t.d("translate.market.wishlist.reset_tooltip",c,p,0)));t.b("\"");t.b("\n" + i);t.b("          alt=\"");t.b(t.v(t.d("translate.market.wishlist.reset",c,p,0)));t.b("\"");t.b("\n" + i);t.b("        />");t.b("\n" + i);t.b("        <img");t.b("\n" + i);t.b("          class=\"action-picto delete-wishlist-item\"");t.b("\n" + i);t.b("          src=\"/static/img/new-layout/wardrobe/delete.png\"");t.b("\n" + i);t.b("          title=\"");t.b(t.v(t.d("translate.market.wishlist.delete_tooltip",c,p,0)));t.b("\"");t.b("\n" + i);t.b("          alt=\"");t.b(t.v(t.d("translate.market.wishlist.delete",c,p,0)));t.b("\"");t.b("\n" + i);t.b("        />");t.b("\n" + i);t.b("      </td>");t.b("\n" + i);t.b("    </tr>");t.b("\n" + i);});c.pop();}t.b("  </tbody>");t.b("\n" + i);t.b("</table>");t.b("\n");return t.fl(); },partials: {}, subs: {  }}, "<style>\n  table {\n    text-align: center;\n    width: 100%;\n  }\n\n  .action-picto {\n    height: 50px;\n    width: 50px;\n    cursor: pointer;\n  }\n\n  .action-picto:hover:not(.disabled),\n  .edit-price:hover {\n    animation: button-bounce 300ms linear forwards;\n    filter: brightness(1.05) contrast(1.1);\n  }\n\n  .edit-price {\n    cursor: pointer;\n  }\n\n  img.disabled {\n    filter: grayscale(1);\n  }\n\n  .item-icon {\n    width: 100px;\n    height: 100px;\n  }\n</style>\n\n<table>\n  <thead>\n    <tr>\n      <th>{{translate.market.wishlist.icon}}</th>\n      <th>{{translate.market.wishlist.name}}</th>\n      <th>{{translate.market.wishlist.price}}</th>\n      <th>{{translate.market.wishlist.status}}</th>\n      <th>{{translate.market.wishlist.actions}}</th>\n    </tr>\n  </thead>\n  <tbody>\n    {{#wishlist}}\n    <tr class=\"marketplace-abstract\" data-wearableitemid=\"{{wearableitemid}}\">\n      <!-- Icon -->\n      <td>\n        <img class=\"item-icon\" src=\"{{icon}}\" alt=\"{{name}}\" />\n      </td>\n\n      <!-- Name -->\n      <td>\n        <div class=\"abstract-name\">{{name}}</div>\n      </td>\n\n      <!-- Price -->\n      <td>\n        <div\n          class=\"edit-price\"\n          title=\"{{translate.market.wishlist.change_price}}\"\n        >\n          <span class=\"price-item\">{{price}}</span>\n          <span class=\"maana-icon\" alt=\"maanas\"></span>\n        </div>\n      </td>\n\n      <!-- Error -->\n      <td>\n        <p class=\"error\">{{error}}</p>\n      </td>\n\n      <!-- Actions -->\n      <td>\n        <img\n          class=\"action-picto reset-item-status {{^error}}disabled{{/error}}\"\n          src=\"/static/img/new-layout/wardrobe/reset-btn.png\"\n          title=\"{{translate.market.wishlist.reset_tooltip}}\"\n          alt=\"{{translate.market.wishlist.reset}}\"\n        />\n        <img\n          class=\"action-picto delete-wishlist-item\"\n          src=\"/static/img/new-layout/wardrobe/delete.png\"\n          title=\"{{translate.market.wishlist.delete_tooltip}}\"\n          alt=\"{{translate.market.wishlist.delete}}\"\n        />\n      </td>\n    </tr>\n    {{/wishlist}}\n  </tbody>\n</table>\n", H);return T; }();

/***/ }),

/***/ "./src/ajax/ajax_search.ts":
/*!*********************************!*\
  !*** ./src/ajax/ajax_search.ts ***!
  \*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ajaxSearch": () => (/* binding */ ajaxSearch)
/* harmony export */ });
/* harmony import */ var _marketplace_enums_body_location_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../marketplace/enums/body_location.enum */ "./src/marketplace/enums/body_location.enum.ts");
/* harmony import */ var _marketplace_enums_category_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../marketplace/enums/category.enum */ "./src/marketplace/enums/category.enum.ts");
/* harmony import */ var _marketplace_enums_guard_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../marketplace/enums/guard.enum */ "./src/marketplace/enums/guard.enum.ts");
/* harmony import */ var _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../marketplace/enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");
/* harmony import */ var _marketplace_enums_type_enum__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../marketplace/enums/type.enum */ "./src/marketplace/enums/type.enum.ts");





async function ajaxSearch(data) {
    data = {
        ...{
            type: _marketplace_enums_type_enum__WEBPACK_IMPORTED_MODULE_4__.Type.All,
            bodyLocation: _marketplace_enums_body_location_enum__WEBPACK_IMPORTED_MODULE_0__.BodyLocation.All,
            category: _marketplace_enums_category_enum__WEBPACK_IMPORTED_MODULE_1__.CategoryNumber.all,
            rarity: _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity.all,
            price: "",
            guard: _marketplace_enums_guard_enum__WEBPACK_IMPORTED_MODULE_2__.Guard.any,
            page: 1,
            name: "",
        },
        ...data,
    };
    const ITEMS_PER_PAGE = 8;
    return new Promise((resolve) => {
        void $.get("/marketplace/ajax_search", {
            ...data,
            from: (data.page - 1) * ITEMS_PER_PAGE,
            to: ITEMS_PER_PAGE,
        }, resolve);
    });
}


/***/ }),

/***/ "./src/ajax/buy.ts":
/*!*************************!*\
  !*** ./src/ajax/buy.ts ***!
  \*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "buy": () => (/* binding */ buy)
/* harmony export */ });
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");

async function buy(itemId) {
    return new Promise(resolve => {
        void $.post("/marketplace/buy", { id: itemId }, (json) => {
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_0__.SessionStorage.meta = json.meta;
            resolve(json);
            if (json.result !== "success") {
                $.flavrNotif(json.data);
                return;
            }
        }, "json");
    });
}


/***/ }),

/***/ "./src/ajax/capture_end.ts":
/*!*********************************!*\
  !*** ./src/ajax/capture_end.ts ***!
  \*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "captureEnd": () => (/* binding */ captureEnd)
/* harmony export */ });
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");

async function captureEnd() {
    return new Promise(resolve => {
        void $.post("/pet/capture/end", (json) => {
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_0__.SessionStorage.meta = json.meta;
            resolve(json);
            if (json.result !== "success") {
                $.flavrNotif(json.data);
                return;
            }
        });
    });
}


/***/ }),

/***/ "./src/ajax/change_region.ts":
/*!***********************************!*\
  !*** ./src/ajax/change_region.ts ***!
  \***********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "changeRegion": () => (/* binding */ changeRegion)
/* harmony export */ });
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");

async function changeRegion(newRegionId) {
    return new Promise((resolve) => {
        void $.post("/pet/changeRegion", { newRegionId }, (json) => {
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_0__.SessionStorage.meta = json.meta;
            resolve(json);
            if (json.result !== "success") {
                $.flavrNotif(json.data);
                return;
            }
            currentRegion = json.data.currentRegion;
            pendingTreasureHuntLocation =
                typeof json.data.pendingTreasureHuntLocation === "undefined"
                    ? null
                    : json.data.pendingTreasureHuntLocation;
            timeLeftExploration =
                typeof json.data.timeLeftExploration === "undefined"
                    ? null
                    : json.data.timeLeftExploration;
        });
    });
}


/***/ }),

/***/ "./src/ajax/exploration_results.ts":
/*!*****************************************!*\
  !*** ./src/ajax/exploration_results.ts ***!
  \*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "explorationResults": () => (/* binding */ explorationResults)
/* harmony export */ });
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");

async function explorationResults() {
    return new Promise((resolve) => {
        void $.post("/pet/explorationResults", (json) => {
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_0__.SessionStorage.meta = json.meta;
            resolve(json);
            if (json.result !== "success") {
                $.flavrNotif(json.data);
                return;
            }
        });
    });
}


/***/ }),

/***/ "./src/api/result.enum.ts":
/*!********************************!*\
  !*** ./src/api/result.enum.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Result": () => (/* binding */ Result)
/* harmony export */ });
var Result;
(function (Result) {
    Result["error"] = "error";
    Result["success"] = "success";
})(Result || (Result = {}));


/***/ }),

/***/ "./src/appearance/appearance_ui.ts":
/*!*****************************************!*\
  !*** ./src/appearance/appearance_ui.ts ***!
  \*****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadAppearanceUI": () => (/* binding */ loadAppearanceUI)
/* harmony export */ });
/* harmony import */ var _wardrobe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wardrobe */ "./src/appearance/wardrobe.ts");

function loadAppearanceUI() {
    setupBackground();
    setupLeftPanel();
    setupRightPanel();
    if (_wardrobe__WEBPACK_IMPORTED_MODULE_0__.default.availableItems)
        availableItems = _wardrobe__WEBPACK_IMPORTED_MODULE_0__.default.availableItems;
    else
        _wardrobe__WEBPACK_IMPORTED_MODULE_0__.default.availableItems = availableItems;
}
function setupBackground() {
    const background = document.querySelector("#avatar-background img");
    if (background) {
        background.style.filter = "unset";
        background.style.height = "unset";
        background.style.mask =
            "linear-gradient(to right, black 50%, transparent 100%)";
        background.style.minHeight = "100vh";
        background.style.minWidth = "50vw";
        background.style.position = "fixed";
        background.style.transform = "unset";
        background.style.width = "unset";
    }
}
function setupRightPanel() {
    const rightPanel = document.getElementById("appearance-right");
    if (rightPanel)
        rightPanel.style.paddingTop = "80px";
}
function setupLeftPanel() {
    const previewOuter = document.getElementById("appearance-preview-outer");
    if (previewOuter) {
        previewOuter.style.padding = "0px";
    }
    const preview = document.getElementById("appearance-preview");
    if (preview) {
        preview.style.left = "0";
        preview.style.position = "fixed";
        preview.style.top = "calc(50% - var(--topbar-height))";
        preview.style.transform = "translateY(-50%)";
    }
    const canvas = document.querySelector("#appearance-preview canvas");
    if (canvas) {
        canvas.style.maxHeight = "100vh";
        canvas.style.maxWidth = "50vw";
    }
}


/***/ }),

/***/ "./src/appearance/dressing_experience.ts":
/*!***********************************************!*\
  !*** ./src/appearance/dressing_experience.ts ***!
  \***********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadDressingExperience": () => (/* binding */ loadDressingExperience),
/* harmony export */   "loadHiddenCategory": () => (/* binding */ loadHiddenCategory),
/* harmony export */   "loadHiddenGroup": () => (/* binding */ loadHiddenGroup)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _appearance_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./appearance_ui */ "./src/appearance/appearance_ui.ts");
/* harmony import */ var _wardrobe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./wardrobe */ "./src/appearance/wardrobe.ts");




function loadDressingExperience() {
    if (!location.pathname.startsWith("/player/appearance"))
        return;
    (0,_appearance_ui__WEBPACK_IMPORTED_MODULE_2__.loadAppearanceUI)();
    // Setup categories
    for (const li of document.querySelectorAll("#wardrobe-menu>li, #appearance-items-categories li")) {
        const { category } = li.dataset;
        if (!category)
            continue;
        switch (category) {
            case "background":
                li.addEventListener("click", () => document.getElementById("ee-category")?.remove());
                continue;
            case "favorites":
                li.addEventListener("click", () => {
                    document.getElementById("ee-category")?.remove();
                    handleCategory(category);
                });
                continue;
            case "attic":
                continue;
            default:
                li.addEventListener("click", () => {
                    document
                        .getElementById("appearance-items-category-favorites")
                        ?.remove();
                    handleCategory(category);
                });
        }
    }
}
/** Get the category container for the clicked category and load its groups */
function handleCategory(category) {
    const appearanceItems = document.querySelector("#appearance-items");
    if (!appearanceItems)
        return;
    const oldCatContainer = document.querySelector(`#appearance-items-category-${category}`);
    if (oldCatContainer) {
        if (category === "favorites")
            (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_1__.loadFavourites)();
        else
            void handleGroups(appearanceItems, oldCatContainer);
        return;
    }
    new MutationObserver((_, observer) => {
        const newCatContainer = document.querySelector(`#appearance-items-category-${category}`);
        if (!newCatContainer)
            return;
        observer.disconnect();
        if (category === "favorites")
            (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_1__.loadFavourites)();
        else
            void handleGroups(appearanceItems, newCatContainer);
    }).observe(appearanceItems, { childList: true });
}
/** Load each groups synchronously and add them to a custom container. */
async function handleGroups(appearanceItems, categoryContainer) {
    await new Promise(resolve => setTimeout(resolve, 220));
    // Get information about the current category
    const { category, categoryid, categoryname } = categoryContainer.dataset;
    if (!category || !categoryid || !categoryname)
        return;
    _wardrobe__WEBPACK_IMPORTED_MODULE_3__.default.setCategory({
        category,
        categoryid: Number(categoryid),
        categoryname,
    });
    categoryContainer.classList.remove("active");
    categoryContainer.style.display = "none";
    // Setup appearance_items_category
    const template = __webpack_require__(/*! ../templates/html/appearance_items_category.html */ "./src/templates/html/appearance_items_category.html");
    document.getElementById("ee-category")?.remove();
    appearanceItems.insertAdjacentHTML("beforeend", template.render({ category, categoryid, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
    const eeItems = document.querySelector("#ee-items");
    if (!eeItems)
        return;
    loadHiddenCategory(category);
    for (const li of categoryContainer.querySelectorAll("li.appearance-item-group")) {
        const { group } = li.dataset;
        _wardrobe__WEBPACK_IMPORTED_MODULE_3__.default.setGroup({
            category,
            categoryid: Number(categoryid),
            group: Number(group),
        });
        if (!group)
            continue;
        if (!document.querySelector(`#appearance-items-group-${group}`))
            await $.get("/player/openGroup/" + group, view => appearanceItems.insertAdjacentHTML("beforeend", view));
        const div = document.querySelector(`#appearance-items-group-${group}`);
        if (!div)
            continue;
        div.classList.remove("active");
        const script = div.querySelector("script"); // eslint-disable-next-line @typescript-eslint/no-implied-eval
        if (script)
            setTimeout(script.innerHTML, 0);
        // Check if the category is still active
        if (!document.querySelector(`#wardrobe-menu li[data-category="${category}"].active`))
            break;
        eeItems.insertAdjacentHTML("beforeend", Array.from(div.querySelectorAll("li.appearance-item"))
            .map(li => {
            li.dataset.category = category;
            li.dataset.categoryid = categoryid;
            li.dataset.group = group;
            const icon = li.querySelector("img")?.src;
            if (!icon)
                return li.outerHTML;
            _wardrobe__WEBPACK_IMPORTED_MODULE_3__.default.setItem({
                group: Number(group),
                icon,
                itemid: Number(li.dataset.itemid),
                name: li.dataset.name ?? "",
                rarity: li.dataset.rarity ?? "",
                rarityname: li.dataset.rarityname ?? "",
            });
            return li.outerHTML;
        })
            .join("\n"));
        initializeSelectedItems();
        initializeHiddenCategories();
        _wardrobe__WEBPACK_IMPORTED_MODULE_3__.default.availableItems = availableItems;
    }
    unloadHiddenCategories();
}
function unloadHiddenCategories() {
    const hidden = document.querySelectorAll("#appearance-items .appearance-items-category:not(.active):not([data-categoryname]), #appearance-items script");
    for (const div of hidden) {
        div.remove();
    }
}
function loadHiddenCategory(category) {
    const categoryid = _wardrobe__WEBPACK_IMPORTED_MODULE_3__.default.getCategories()
        .find(c => c.category === category)?.categoryid;
    if (!categoryid)
        return;
    const groups = _wardrobe__WEBPACK_IMPORTED_MODULE_3__.default.getCategoryGroups(categoryid);
    const itemTemplate = __webpack_require__(/*! ../templates/html/appearance_item.html */ "./src/templates/html/appearance_item.html");
    const groupTemplate = __webpack_require__(/*! ../templates/html/appearance_items_group.html */ "./src/templates/html/appearance_items_group.html");
    document
        .querySelector("#appearance-items")
        ?.insertAdjacentHTML("beforeend", groups
        .map(group => groupTemplate.render({
        ...group,
        items: _wardrobe__WEBPACK_IMPORTED_MODULE_3__.default.getItems(group.group)
            .map(item => itemTemplate.render(item))
            .join("\n"),
    }))
        .join("\n"));
}
function loadHiddenGroup(id) {
    const group = _wardrobe__WEBPACK_IMPORTED_MODULE_3__.default.getGroup(id);
    if (!group)
        return;
    const itemTemplate = __webpack_require__(/*! ../templates/html/appearance_item.html */ "./src/templates/html/appearance_item.html");
    const groupTemplate = __webpack_require__(/*! ../templates/html/appearance_items_group.html */ "./src/templates/html/appearance_items_group.html");
    document
        .querySelector("#appearance-items")
        ?.insertAdjacentHTML("beforeend", groupTemplate.render({
        ...group,
        items: _wardrobe__WEBPACK_IMPORTED_MODULE_3__.default.getItems(group.group)
            .map(item => itemTemplate.render(item))
            .join("\n"),
    }));
}


/***/ }),

/***/ "./src/appearance/fake_favourites.ts":
/*!*******************************************!*\
  !*** ./src/appearance/fake_favourites.ts ***!
  \*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "saveFavourite": () => (/* binding */ saveFavourite),
/* harmony export */   "showFavourite": () => (/* binding */ showFavourite)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../indexed_db/indexed_db */ "./src/indexed_db/indexed_db.ts");
/* harmony import */ var _outfit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../outfit */ "./src/outfit.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _favourites_actions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./favourites_actions */ "./src/appearance/favourites_actions.ts");





async function saveFavourite() {
    const favourite = await showOutfit();
    if (favourite)
        await (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_3__.loadFakeFavourites)();
    return favourite;
}
async function deleteFavourite(favourite) {
    await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__.default.deleteFavouriteOutfit(favourite);
    await (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_3__.loadFakeFavourites)();
}
async function showOutfit() {
    const template = __webpack_require__(/*! ../templates/html/created_outfit_flavr.html */ "./src/templates/html/created_outfit_flavr.html");
    return new Promise(resolve => $.flavr({
        content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
        onBuild: $container => {
            $container.addClass("new-layout-popup");
            $container.addClass("created-outfit-popup");
            const saveButton = document.querySelector('[rel="btn-save"]');
            if (!saveButton)
                return;
            document
                .querySelector("#choose-name")
                ?.addEventListener("keyup", event => {
                if (event.key === "Enter")
                    saveButton.click();
                if (document.querySelector("#choose-name")?.value)
                    saveButton.classList.remove("disabled");
                else
                    saveButton.classList.add("disabled");
            });
            saveButton.classList.add("nl-button", "nl-button-lg", "disabled");
        },
        buttons: {
            close: {
                text: "",
                style: "close",
                action: () => {
                    resolve(null);
                    return true;
                },
            },
            save: {
                text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.save_outfit.save,
                style: "default",
                action: () => {
                    const name = document.querySelector("#choose-name")?.value;
                    if (!name)
                        return false;
                    const avatar = Sacha.Avatar.avatars["#appearance-preview"];
                    if (!avatar)
                        return false;
                    const items = (0,_outfit__WEBPACK_IMPORTED_MODULE_2__.parseAvatar)(avatar);
                    void saveAction(name, items, resolve);
                    return true;
                },
            },
        },
    }));
}
function showFavourite(favourite) {
    const template = __webpack_require__(/*! ../templates/html/favourite_outfit_flavr.html */ "./src/templates/html/favourite_outfit_flavr.html");
    $.flavr({
        content: template.render({ ...favourite, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
        onBuild: $container => {
            $container.addClass("new-layout-popup");
            $container.addClass("created-outfit-popup");
        },
        buttons: {
            close: {
                text: "",
                style: "close",
                action: () => true,
            },
            delete: {
                text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.click_outfit.delete,
                style: "default",
                action: () => {
                    void deleteFavourite(favourite);
                    return true;
                },
            },
            wear: {
                text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.click_outfit.wear,
                style: "default",
                action: () => {
                    const avatar = Sacha.Avatar.avatars["#appearance-preview"];
                    if (!avatar)
                        return false;
                    void (async () => (0,_favourites_actions__WEBPACK_IMPORTED_MODULE_4__.wearOutfit)(avatar, favourite.items))();
                    return true;
                },
            },
        },
    });
}
async function saveAction(name, items, resolve) {
    const blob = await new Promise(resolve => {
        document
            .querySelector("#appearance-preview canvas")
            ?.toBlob(blob => resolve(blob), "image/png", 1);
    });
    resolve({
        ...(await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__.default.addFavouriteOutfit({
            items,
            name,
            blob,
        })),
        url: URL.createObjectURL(blob),
    });
}


/***/ }),

/***/ "./src/appearance/favourites_actions.ts":
/*!**********************************************!*\
  !*** ./src/appearance/favourites_actions.ts ***!
  \**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "exportPreview": () => (/* binding */ exportPreview),
/* harmony export */   "importOutfit": () => (/* binding */ importOutfit),
/* harmony export */   "wearOutfit": () => (/* binding */ wearOutfit)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _outfit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../outfit */ "./src/outfit.ts");


function exportPreview() {
    (0,_outfit__WEBPACK_IMPORTED_MODULE_1__.exportOutfit)("#appearance-preview");
}
function importOutfit() {
    const input = document.createElement("input");
    input.setAttribute("type", "file");
    input.setAttribute("accept", "application/json");
    input.click();
    input.addEventListener("input", event => {
        if (!event.target)
            return;
        const files = event.target.files;
        if (!files)
            return;
        const file = files[0];
        if (!file)
            return;
        void file.text().then(async (value) => {
            if (!value)
                return;
            const outfit = JSON.parse(value);
            const avatar = Sacha.Avatar.avatars["#appearance-preview"];
            if (!avatar)
                return;
            await wearOutfit(avatar, outfit);
        });
    });
}
function removeClothes() {
    const avatar = Sacha.Avatar.avatars["#appearance-preview"];
    if (!avatar)
        return;
    for (let i = avatar.children.length - 1; i >= 0; i--) {
        const itemRender = avatar.children[i];
        if (!itemRender)
            continue;
        const item = itemRender.getItem();
        if (Sacha.Avatar.removeItemFromAllAvatars(item)) {
            $(`#appearance-item-${item._id}`).removeClass("selected");
        }
    }
}
async function openGroup(group) {
    return new Promise((resolve) => {
        if (document.querySelector(`#appearance-items-group-${group}`))
            return void resolve();
        void $.get(`/player/openGroup/${group}`, (view) => {
            $(view).hide().appendTo("#appearance-items");
        }).always(resolve);
    });
}
async function openCategory(category) {
    return new Promise((resolve) => {
        if (document.querySelector(`#appearance-items-category-${category}`))
            return void resolve();
        void $.post(`/player/openCategory/${category}`, (view) => {
            $(view).hide().appendTo("#appearance-items");
        }).always(resolve);
    });
}
async function wearOutfit(avatar, outfit) {
    $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.importing);
    // Get all categories
    const categories = new Set();
    for (const clothing of outfit)
        if (!availableItems[clothing.id])
            categories.add(clothing.type);
    // Open all categories
    await Promise.all(Array.from(categories.values()).map(async (category) => openCategory(category)));
    // Get all groups
    const groups = new Set();
    for (const clothing of outfit)
        if (document.querySelector(`[data-group="${clothing.group}"]`) &&
            !availableItems[clothing.id])
            groups.add(clothing.group);
    // Open all groups
    await Promise.all(Array.from(groups.values()).map(async (group) => openGroup(group)));
    // Get the items from `availableItems`
    const wornItems = [];
    for (const clothing of outfit) {
        const item = availableItems[clothing.id];
        if (item)
            wornItems.push(item);
    }
    removeClothes();
    avatar.addItems(wornItems);
    initializeSelectedItems();
    initializeHiddenCategories();
    const avatarActions = document.getElementById("avatar-actions");
    if (avatarActions)
        avatarActions.style.display = "initial";
    $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.favourites.imported);
}


/***/ }),

/***/ "./src/appearance/wardrobe.ts":
/*!************************************!*\
  !*** ./src/appearance/wardrobe.ts ***!
  \************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
class Wardrobe {
    categories = {};
    groups = {};
    items = {};
    availableItems;
    getCategories() {
        return Object.values(this.categories);
    }
    getCategory(id) {
        return this.categories[id];
    }
    getCategoryGroups(categoryid) {
        return Object.values(this.groups).filter(group => group.categoryid === categoryid);
    }
    getGroup(id) {
        return this.groups[id];
    }
    getGroups() {
        return Object.values(this.groups);
    }
    getItem(id) {
        return this.items[id];
    }
    getItems(group) {
        return Object.values(this.items).filter(item => item.group === group);
    }
    setCategory(category) {
        this.categories[category.categoryid] = category;
    }
    setGroup(group) {
        this.groups[group.group] = group;
    }
    setItem(item) {
        this.items[item.itemid] = item;
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new Wardrobe());


/***/ }),

/***/ "./src/carousel/carousel_beemoov_annoyances.ts":
/*!*****************************************************!*\
  !*** ./src/carousel/carousel_beemoov_annoyances.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "carouselBeemoovAnnoyances": () => (/* binding */ carouselBeemoovAnnoyances)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

const carouselBeemoovAnnoyances = {
    backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_beemoov_annoyances.png",
    h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.beemoov_annoyances.title,
    href: "https://gitlab.com/NatoBoram/Beemoov-Annoyances",
    id: "carousel-beemoov-annoyances",
    p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.beemoov_annoyances.subtitle,
};


/***/ }),

/***/ "./src/carousel/carousel_download_face.ts":
/*!************************************************!*\
  !*** ./src/carousel/carousel_download_face.ts ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "carouselDownloadFace": () => (/* binding */ carouselDownloadFace)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

const carouselDownloadFace = {
    backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_face.png",
    id: "carousel-download-face",
    h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_face.title,
    p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_face.subtitle,
};


/***/ }),

/***/ "./src/carousel/carousel_download_guardian.ts":
/*!****************************************************!*\
  !*** ./src/carousel/carousel_download_guardian.ts ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "carouselDownloadGuardian": () => (/* binding */ carouselDownloadGuardian)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

const carouselDownloadGuardian = {
    backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_guardian.png",
    id: "carousel-download-guardian",
    h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_guardian.title,
    p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.download_guardian.subtitle,
};


/***/ }),

/***/ "./src/carousel/carousel_eldarya_enhancements.ts":
/*!*******************************************************!*\
  !*** ./src/carousel/carousel_eldarya_enhancements.ts ***!
  \*******************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "carouselEE": () => (/* binding */ carouselEE)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

const carouselEE = {
    backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_eldarya_enhancements.png",
    h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.eldarya_enhancements.title,
    href: GM.info.script.namespace,
    id: "carousel-eldarya-enhancements",
    p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.eldarya_enhancements.subtitle,
};


/***/ }),

/***/ "./src/carousel/carousel_takeover.ts":
/*!*******************************************!*\
  !*** ./src/carousel/carousel_takeover.ts ***!
  \*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "carouselTakeover": () => (/* binding */ carouselTakeover)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

const carouselTakeover = {
    backgroundImage: "https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_takeover.png",
    id: "carousel-takeover",
    h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.takeover.title,
    p: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.carousel.takeover.subtitle,
};


/***/ }),

/***/ "./src/console.ts":
/*!************************!*\
  !*** ./src/console.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Console": () => (/* binding */ Console)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./local_storage/local_storage */ "./src/local_storage/local_storage.ts");

class Console {
    static console = console;
    constructor() { }
    static get debugging() {
        return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.debug;
    }
    static debug(message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.debug(message, ...optionalParams);
    }
    static error(message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.error(message, ...optionalParams);
    }
    static info(message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.info(message, ...optionalParams);
    }
    static log(message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.log(message, ...optionalParams);
    }
    static warn(message, ...optionalParams) {
        if (!this.debugging)
            return;
        this.console.warn(message, ...optionalParams);
    }
}


/***/ }),

/***/ "./src/download-canvas.ts":
/*!********************************!*\
  !*** ./src/download-canvas.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "downloadFace": () => (/* binding */ downloadFace),
/* harmony export */   "downloadGuardian": () => (/* binding */ downloadGuardian),
/* harmony export */   "downloadAppearance": () => (/* binding */ downloadAppearance),
/* harmony export */   "downloadProfile": () => (/* binding */ downloadProfile),
/* harmony export */   "getName": () => (/* binding */ getName)
/* harmony export */ });
function downloadCanvas(canvas, name) {
    canvas.toBlob(blob => {
        const url = URL.createObjectURL(blob);
        const a = document.createElement("a");
        a.setAttribute("href", url);
        a.setAttribute("download", `${name}.png`);
        a.style.display = "none";
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
        URL.revokeObjectURL(url);
    }, "image/png", 1);
}
function downloadFace() {
    const canvas = document.querySelector("#avatar-menu-container canvas");
    if (!canvas) {
        console.warn("Couldn't find the guardian's face.");
        return;
    }
    downloadCanvas(canvas, "face");
}
function downloadGuardian() {
    const canvas = document.querySelector("#home-avatar-player canvas");
    if (!canvas) {
        console.warn("Couldn't find the guardian.");
        return;
    }
    downloadCanvas(canvas, getName() ?? "guardian");
}
function downloadAppearance() {
    const canvas = document.querySelector("#appearance-preview canvas");
    if (!canvas) {
        console.warn("Couldn't find the guardian.");
        return;
    }
    downloadCanvas(canvas, getName() ?? "guardian");
}
function downloadProfile() {
    const canvas = document.querySelector(".playerProfileAvatar canvas");
    const title = document.querySelector("#main-section .section-title");
    if (!canvas || !title)
        return;
    downloadCanvas(canvas, title.textContent?.trim() ?? "guardian");
}
function getName() {
    return (document.querySelector("#avatar-menu-container-outer>p")?.textContent ??
        null);
}


/***/ }),

/***/ "./src/duration.ts":
/*!*************************!*\
  !*** ./src/duration.ts ***!
  \*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "DurationUnit": () => (/* binding */ DurationUnit),
/* harmony export */   "Duration": () => (/* binding */ Duration)
/* harmony export */ });
var DurationUnit;
(function (DurationUnit) {
    DurationUnit[DurationUnit["millisecond"] = 1] = "millisecond";
    DurationUnit[DurationUnit["second"] = 1000] = "second";
    DurationUnit[DurationUnit["minute"] = 60000] = "minute";
    DurationUnit[DurationUnit["hour"] = 3600000] = "hour";
    DurationUnit[DurationUnit["day"] = 86400000] = "day";
    DurationUnit[DurationUnit["week"] = 604800000] = "week";
})(DurationUnit || (DurationUnit = {}));
class Duration {
    value;
    unit;
    constructor(value, unit) {
        this.value = value;
        this.unit = unit;
    }
    divide(duration) {
        return new Duration(this.value / duration.to(this.unit).value, this.unit);
    }
    minus(duration) {
        return new Duration(this.value - duration.to(this.unit).value, this.unit);
    }
    multiply(duration) {
        return new Duration(this.value * duration.to(this.unit).value, this.unit);
    }
    plus(duration) {
        return new Duration(this.value + duration.to(this.unit).value, this.unit);
    }
    to(unit) {
        return new Duration((this.value * this.unit) / unit, unit);
    }
}


/***/ }),

/***/ "./src/eldarya/jquery.ts":
/*!*******************************!*\
  !*** ./src/eldarya/jquery.ts ***!
  \*******************************/
/***/ (() => {

"use strict";



/***/ }),

/***/ "./src/i18n/en.ts":
/*!************************!*\
  !*** ./src/i18n/en.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "en": () => (/* binding */ en)
/* harmony export */ });
const en = {
    home: {
        forum: "Forum",
        script_loaded: `${GM.info.script.name} v${GM.info.script.version} loaded.`,
        takeover: "Takeover",
    },
    takeover: {
        bought: (name, price) => `Bought <strong>${name}</strong> for <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
        disabled: "Takeover mode disabled.",
        enabled: "Takeover mode enabled. Please do not interact with this tab.",
    },
    carousel: {
        beemoov_annoyances: {
            title: "Beemoov Annoyances",
            subtitle: "Block some of Eldarya's annoyances.",
        },
        download_face: {
            title: "Download your guardian's face!",
            subtitle: "Click here to download your guardian's face.",
        },
        download_guardian: {
            title: "Download your guardian!",
            subtitle: "Click here to download your guardian.",
        },
        eldarya_enhancements: {
            title: `${GM.info.script.name} v${GM.info.script.version}`,
            subtitle: GM.info.script.description,
        },
        takeover: {
            disable_takeover: "Disable Takeover",
            enable_takeover: "Enable Takeover",
            subtitle: "Give up this tab to perform automated actions.",
            title: "Takeover",
        },
    },
    minigames: {
        playing: name => `Playing <strong>${name}</strong>...`,
        played_for: (name, maanas) => `Played <strong>${name}</strong> for <strong class="price-item">${maanas}</strong> <span class="maana-icon" alt="maanas"></span> earned.`,
    },
    appearance: {
        buttons: {
            backward: "Move back",
            forward: "Bring forward",
        },
        favourites: {
            imported: "Imported outfit!",
            importing: "Importing outfit. Please wait...",
            click_outfit: {
                delete: "Delete",
                goto_account: `To transfer your <strong>${GM.info.script.name}</strong> favourites to another browser, export them in the <a href="/user/account" style="text-decoration: underline;">my account</a> page.`,
                saved_locally: `Take note that this outfit was saved in <strong>${GM.info.script.name}</strong>' settings and was not sent to Eldarya's servers.`,
                wear: "Wear",
            },
            save_outfit: {
                goto_account: `To transfer your <strong>${GM.info.script.name}</strong> favourites to another browser, export them in the <a href="/user/account" style="text-decoration: underline;">my account</a> page.`,
                placeholder: "Name...",
                save: "Save",
                saved_locally: `Take note that this outfit will only be saved within <strong>${GM.info.script.name}</strong>' settings and will not be sent to Eldarya's servers.`,
                title: "Save outfit",
            },
            buttons: {
                download: "Download PNG",
                export: "Export",
                import: "Import",
            },
        },
    },
    market: {
        add_to_wishlist: {
            added_to_wishlist: (name, price) => `Added <strong>${name}</strong> for <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span> to the wishlist.`,
            invalid_price: "This is not a valid price.",
            save: "Save",
            text: "How many maanas do you wish to offer to acquire this item?",
            title: "Add to wishlist",
        },
        auctions: {
            buy_now_price: "Buy now price :",
            current_price: "Current price :",
            delete: "Delete",
            purchase_history: "Purchase history",
            sales_history: "Sales history",
            date_time_format: new Intl.DateTimeFormat("en-GB", {
                minute: "2-digit",
                hour: "2-digit",
                day: "numeric",
                month: "long",
                year: "numeric",
            }),
        },
        change_price: {
            changed_price: (name, price) => `Changed <strong>${name}</strong>'s price for <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
            invalid_price: "This is not a valid price.",
            save: "Save",
            text: "How many maanas do you wish to offer to acquire this item?",
            title: "Change price",
        },
        wishlist: {
            assistance: "On this page, you can organize your wishlist and check the status of your wished items.",
            actions: "Actions",
            change_price: "Change price",
            delete_tooltip: "Remove from wishlist",
            delete: "Delete",
            icon: "Icon",
            name: "Name",
            price: "Price",
            reset_tooltip: "Reset the error status",
            reset: "Reset",
            status: "Status",
            title: "Wishlist",
        },
    },
    account: {
        debug_tooltip: "Enables or disables logging.",
        debug: "Debug",
        enhancements: "Enhancements",
        explorations: "Explorations",
        export: "Export settings",
        import: "Import settings",
        imported: "Imported settings!",
        market: "Market",
        minigames: "Minigames",
    },
    pet: {
        auto_explore: "Highlight",
    },
    profile: {
        export_outfit: "Export outfit",
        download_outfit: "Download PNG",
    },
};
Object.freeze(en);


/***/ }),

/***/ "./src/i18n/fr.ts":
/*!************************!*\
  !*** ./src/i18n/fr.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "fr": () => (/* binding */ fr)
/* harmony export */ });
const fr = {
    home: {
        forum: "Forum",
        script_loaded: `${GM.info.script.name} v${GM.info.script.version} chargé.`,
        takeover: "Takeover",
    },
    takeover: {
        bought: (name, price) => `Acheté <strong>${name}</strong> pour <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
        disabled: "Takeover désactivé.",
        enabled: "Takeover activé. Évite d'intéragir avec cet onglet.",
    },
    carousel: {
        beemoov_annoyances: {
            title: "Beemoov Annoyances",
            subtitle: "Bloque certains irritants d'Eldarya.",
        },
        download_face: {
            title: "Télécharge le visage de ta gardienne!",
            subtitle: "Clique ici pour télécharger le visage de ta gardienne.",
        },
        download_guardian: {
            title: "Télécharge ta gardienne!",
            subtitle: "Clique ici pour télécharger ta gardienne.",
        },
        eldarya_enhancements: {
            title: `${GM.info.script.name} v${GM.info.script.version}`,
            subtitle: "Améliore l'expérience utilisateur d'Eldarya.",
        },
        takeover: {
            disable_takeover: "Désactive le takeover",
            enable_takeover: "Active le takeover",
            subtitle: "Laisse cet onglet performer des actions automatiques.",
            title: "Takeover",
        },
    },
    minigames: {
        playing: (name) => `Joue à <strong>${name}</strong>...`,
        played_for: (name, maanas) => `A joué à <strong>${name}</strong> pour <strong class="price-item">${maanas}</strong> <span class="maana-icon" alt="maanas"></span> gagnés.`,
    },
    appearance: {
        buttons: {
            backward: "Vers l'arrière",
            forward: "Vers l'avant",
        },
        favourites: {
            imported: "Importation réussie!",
            importing: "Importation en cours...",
            click_outfit: {
                delete: "Supprimer",
                goto_account: `Pour transférer tes favoris d'<strong>${GM.info.script.name}</strong> vers un autre navigateur, exporte-les à partir de la page <a href="/user/account" style="text-decoration: underline;">mon compte</a>.`,
                saved_locally: `Prends note que cette tenue a été sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et n'a pas été envoyée aux serveurs d'Eldarya.`,
                wear: "Porter",
            },
            save_outfit: {
                goto_account: `Pour transférer tes favoris d'<strong>${GM.info.script.name}</strong> vers un autre navigateur, exporte-les à partir de la page <a href="/user/account" style="text-decoration: underline;">mon compte</a>.`,
                placeholder: "Nom...",
                save: "Sauvegarder",
                saved_locally: `Prends note que cette tenue sera sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et ne sera pas envoyée aux serveurs d'Eldarya.`,
                title: "Sauvegarder cette tenue",
            },
            buttons: {
                download: "Télécharger le PNG",
                export: "Exporter",
                import: "Importer",
            },
        },
    },
    market: {
        add_to_wishlist: {
            added_to_wishlist: (name, price) => `Ajouté <strong>${name}</strong> pour <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span> à la liste de souhaits.`,
            invalid_price: "Ce prix n'est pas valide.",
            save: "Sauvegarder",
            text: "Combien de maanas souhaites-tu offrir pour acquérir cet item?",
            title: "Ajouter à la liste de souhait",
        },
        auctions: {
            buy_now_price: "Achat immédiat :",
            current_price: "Mise actuelle :",
            delete: "Supprimer",
            purchase_history: "Historique d'achat",
            sales_history: "Historique de vente",
            date_time_format: new Intl.DateTimeFormat("fr-CA", {
                minute: "2-digit",
                hour: "2-digit",
                day: "numeric",
                month: "long",
                year: "numeric",
            }),
        },
        change_price: {
            changed_price: (name, price) => `Changé le prix de <strong>${name}</strong> pour <strong class="price-item">${price}</strong> <span class="maana-icon" alt="maanas"></span>.`,
            invalid_price: "Ce prix n'est pas valide.",
            save: "Sauvegarder",
            text: "Combien de maanas souhaites-tu offrir pour acquérir cet item?",
            title: "Changer le prix",
        },
        wishlist: {
            assistance: "Sur cette page, tu peux organiser ta liste de souhaits et vérifier le statut de tes articles souhaités.",
            actions: "Actions",
            change_price: "Changer le prix",
            delete_tooltip: "Retirer de la liste de souhaits",
            delete: "Supprimer",
            icon: "Icône",
            name: "Nom",
            price: "Prix",
            reset_tooltip: "Réinitialiser l'état d'erreur",
            reset: "Réinitialiser",
            status: "Statut",
            title: "Liste de souhaits",
        },
    },
    account: {
        debug_tooltip: "Active ou désactive la journalisation.",
        debug: "Débogage",
        enhancements: "Améliorations",
        explorations: "Explorations",
        export: "Exporter les paramètres",
        import: "Importer les paramètres",
        imported: "Paramètres importés",
        market: "Marché",
        minigames: "Mini-jeux",
    },
    pet: {
        auto_explore: "Marquer",
    },
    profile: {
        export_outfit: "Exporter la tenue",
        download_outfit: "Télécharger le PNG",
    },
};
Object.freeze(fr);


/***/ }),

/***/ "./src/i18n/translate.ts":
/*!*******************************!*\
  !*** ./src/i18n/translate.ts ***!
  \*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "translate": () => (/* binding */ translate)
/* harmony export */ });
/* harmony import */ var _en__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./en */ "./src/i18n/en.ts");
/* harmony import */ var _fr__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fr */ "./src/i18n/fr.ts");


function translation() {
    if (location.hostname.endsWith(".com.br"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".de"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".es"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".hu"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".it"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".pl"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".ru"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".com"))
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
    if (location.hostname.endsWith(".fr"))
        return _fr__WEBPACK_IMPORTED_MODULE_1__.fr;
    else
        return _en__WEBPACK_IMPORTED_MODULE_0__.en;
}
const translate = translation();


/***/ }),

/***/ "./src/indexed_db/databases.enum.ts":
/*!******************************************!*\
  !*** ./src/indexed_db/databases.enum.ts ***!
  \******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Databases": () => (/* binding */ Databases)
/* harmony export */ });
var Databases;
(function (Databases) {
    Databases["eldarya_enhancements"] = "eldarya_enhancements";
})(Databases || (Databases = {}));


/***/ }),

/***/ "./src/indexed_db/fields.enum.ts":
/*!***************************************!*\
  !*** ./src/indexed_db/fields.enum.ts ***!
  \***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Fields": () => (/* binding */ Fields)
/* harmony export */ });
var Fields;
(function (Fields) {
    Fields["blob"] = "blob";
    Fields["id"] = "id";
    Fields["items"] = "items";
    Fields["name"] = "name";
})(Fields || (Fields = {}));


/***/ }),

/***/ "./src/indexed_db/indexed_db.ts":
/*!**************************************!*\
  !*** ./src/indexed_db/indexed_db.ts ***!
  \**************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _databases_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./databases.enum */ "./src/indexed_db/databases.enum.ts");
/* harmony import */ var _fields_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fields.enum */ "./src/indexed_db/fields.enum.ts");
/* harmony import */ var _tables_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables.enum */ "./src/indexed_db/tables.enum.ts");



class IndexedDB {
    db;
    constructor() {
        const request = indexedDB.open(_databases_enum__WEBPACK_IMPORTED_MODULE_0__.Databases.eldarya_enhancements, 1);
        request.onsuccess = () => (this.db = request.result);
        request.onupgradeneeded = function () {
            const db = this.result;
            const objectStore = db.createObjectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits, {
                keyPath: "id",
                autoIncrement: true,
            });
            objectStore.createIndex(_fields_enum__WEBPACK_IMPORTED_MODULE_1__.Fields.blob, "blob", { unique: false });
            objectStore.createIndex(_fields_enum__WEBPACK_IMPORTED_MODULE_1__.Fields.items, "items", { unique: false });
            objectStore.createIndex(_fields_enum__WEBPACK_IMPORTED_MODULE_1__.Fields.name, "name", { unique: false });
        };
    }
    /** @returns a new `FavouriteOutfit` with the `key` property set. */
    async addFavouriteOutfit(favourite) {
        return new Promise((resolve, reject) => {
            if (!this.db)
                return void reject();
            const request = this.db
                .transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readwrite")
                .objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
                .add(favourite);
            request.onsuccess = () => resolve({
                ...favourite,
                url: favourite.url ?? URL.createObjectURL(favourite.blob),
                id: Number(request.result),
            });
        });
    }
    async clearFavouriteOutfits() {
        return new Promise((resolve, reject) => {
            if (!this.db)
                return void reject();
            const request = this.db
                .transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readwrite")
                .objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
                .clear();
            request.onsuccess = () => resolve();
        });
    }
    async deleteFavouriteOutfit(favourite) {
        return new Promise((resolve, reject) => {
            if (!this.db)
                return void reject();
            const request = this.db
                .transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readwrite")
                .objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
                .delete(favourite.id);
            request.onsuccess = () => {
                resolve();
                if (favourite.url)
                    URL.revokeObjectURL(favourite.url);
            };
        });
    }
    async getFavouriteOutfit(id) {
        return new Promise((resolve, reject) => {
            if (!this.db)
                return void reject();
            const request = this.db
                .transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readonly")
                .objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
                .get(id);
            const favourite = request.result;
            request.onsuccess = () => resolve({ ...favourite, url: URL.createObjectURL(favourite.blob) });
        });
    }
    async getFavouriteOutfits() {
        return new Promise((resolve, reject) => {
            if (!this.db)
                return void reject();
            const request = this.db
                .transaction([_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits], "readonly")
                .objectStore(_tables_enum__WEBPACK_IMPORTED_MODULE_2__.Tables.favourite_outfits)
                .getAll();
            request.onsuccess = () => resolve(request.result.map((favourite) => ({
                ...favourite,
                url: URL.createObjectURL(favourite.blob),
            })));
        });
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new IndexedDB());


/***/ }),

/***/ "./src/indexed_db/tables.enum.ts":
/*!***************************************!*\
  !*** ./src/indexed_db/tables.enum.ts ***!
  \***************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Tables": () => (/* binding */ Tables)
/* harmony export */ });
var Tables;
(function (Tables) {
    Tables["favourite_outfits"] = "favourite_outfits";
})(Tables || (Tables = {}));


/***/ }),

/***/ "./src/local_storage/local_storage.enum.ts":
/*!*************************************************!*\
  !*** ./src/local_storage/local_storage.enum.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "LocalStorageKey": () => (/* binding */ LocalStorageKey)
/* harmony export */ });
var LocalStorageKey;
(function (LocalStorageKey) {
    LocalStorageKey["autoExploreLocations"] = "autoExploreLocations";
    LocalStorageKey["debug"] = "debug";
    LocalStorageKey["explorations"] = "explorations";
    LocalStorageKey["market"] = "market";
    LocalStorageKey["minigames"] = "minigames";
    LocalStorageKey["purchases"] = "purchases";
    LocalStorageKey["sales"] = "sales";
    LocalStorageKey["version"] = "version";
    LocalStorageKey["wishlist"] = "wishlist";
})(LocalStorageKey || (LocalStorageKey = {}));


/***/ }),

/***/ "./src/local_storage/local_storage.ts":
/*!********************************************!*\
  !*** ./src/local_storage/local_storage.ts ***!
  \********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "LocalStorage": () => (/* binding */ LocalStorage)
/* harmony export */ });
/* harmony import */ var blob_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! blob-util */ "./node_modules/.pnpm/blob-util@2.0.2/node_modules/blob-util/dist/blob-util.es.js");
/* harmony import */ var _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../indexed_db/indexed_db */ "./src/indexed_db/indexed_db.ts");
/* harmony import */ var _local_storage_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./local_storage.enum */ "./src/local_storage/local_storage.enum.ts");



class LocalStorage {
    static localStorage = localStorage;
    constructor() { }
    static get autoExploreLocations() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.autoExploreLocations, []);
    }
    static set autoExploreLocations(locations) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.autoExploreLocations, locations);
    }
    static get debug() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.debug, false);
    }
    static set debug(enabled) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.debug, enabled);
    }
    static get explorations() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorations, false);
    }
    static set explorations(enabled) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorations, enabled);
    }
    static get market() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.market, false);
    }
    static set market(enabled) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.market, enabled);
    }
    static get minigames() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.minigames, false);
    }
    static set minigames(enabled) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.minigames, enabled);
    }
    static get purchases() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.purchases, []);
    }
    static set purchases(entry) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.purchases, entry);
    }
    static get sales() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.sales, []);
    }
    static set sales(sale) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.sales, sale);
    }
    static async getSettings() {
        return {
            autoExploreLocations: this.autoExploreLocations,
            debug: this.debug,
            explorations: this.explorations,
            favourites: await Promise.all((await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__.default.getFavouriteOutfits()).map(async (favourite) => ({
                name: favourite.name,
                items: favourite.items,
                base64: await (0,blob_util__WEBPACK_IMPORTED_MODULE_0__.blobToBase64String)(favourite.blob),
            }))),
            market: this.market,
            minigames: this.minigames,
            version: this.version,
            wishlist: this.wishlist,
        };
    }
    static async setSettings(settings) {
        this.autoExploreLocations = settings.autoExploreLocations;
        this.debug = settings.debug;
        this.explorations = settings.explorations;
        this.market = settings.market;
        this.minigames = settings.minigames;
        this.version = settings.version;
        this.wishlist = settings.wishlist;
        await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__.default.clearFavouriteOutfits();
        for (const favourite of settings.favourites.map(favourite => ({
            blob: (0,blob_util__WEBPACK_IMPORTED_MODULE_0__.base64StringToBlob)(favourite.base64),
            items: favourite.items,
            name: favourite.name,
        }))) {
            void _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_1__.default.addFavouriteOutfit(favourite);
        }
    }
    static get version() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.version, "");
    }
    static set version(version) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.version, version);
    }
    static get wishlist() {
        return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.wishlist, []);
    }
    static set wishlist(locations) {
        this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.wishlist, locations);
    }
    static getItem(key, fallback) {
        return ((JSON.parse(this.localStorage.getItem(key) ?? JSON.stringify(fallback)) ??
            fallback));
    }
    static setItem(key, value) {
        this.localStorage.setItem(key, JSON.stringify(value));
    }
}


/***/ }),

/***/ "./src/marketplace/enums/body_location.enum.ts":
/*!*****************************************************!*\
  !*** ./src/marketplace/enums/body_location.enum.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "BodyLocation": () => (/* binding */ BodyLocation)
/* harmony export */ });
var BodyLocation;
(function (BodyLocation) {
    BodyLocation["All"] = "";
    BodyLocation[BodyLocation["Underwear"] = 1] = "Underwear";
    BodyLocation[BodyLocation["Skins"] = 2] = "Skins";
    BodyLocation[BodyLocation["Tattoos"] = 20] = "Tattoos";
    BodyLocation[BodyLocation["Mouths"] = 21] = "Mouths";
    BodyLocation[BodyLocation["Eyes"] = 3] = "Eyes";
    BodyLocation[BodyLocation["Hair"] = 4] = "Hair";
    BodyLocation[BodyLocation["Socks"] = 5] = "Socks";
    BodyLocation[BodyLocation["Shoes"] = 6] = "Shoes";
    BodyLocation[BodyLocation["Pants"] = 7] = "Pants";
    BodyLocation[BodyLocation["HandAccessories"] = 8] = "HandAccessories";
    BodyLocation[BodyLocation["Tops"] = 9] = "Tops";
    BodyLocation[BodyLocation["Coats"] = 10] = "Coats";
    BodyLocation[BodyLocation["Gloves"] = 11] = "Gloves";
    BodyLocation[BodyLocation["Necklaces"] = 12] = "Necklaces";
    BodyLocation[BodyLocation["Dresses"] = 13] = "Dresses";
    BodyLocation[BodyLocation["Hats"] = 14] = "Hats";
    BodyLocation[BodyLocation["FaceAccessories"] = 15] = "FaceAccessories";
    BodyLocation[BodyLocation["Funds"] = 16] = "Funds";
    BodyLocation[BodyLocation["Belts"] = 18] = "Belts";
    BodyLocation[BodyLocation["Atmospheres"] = 19] = "Atmospheres";
})(BodyLocation || (BodyLocation = {}));


/***/ }),

/***/ "./src/marketplace/enums/category.enum.ts":
/*!************************************************!*\
  !*** ./src/marketplace/enums/category.enum.ts ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "CategoryString": () => (/* binding */ CategoryString),
/* harmony export */   "CategoryNumber": () => (/* binding */ CategoryNumber)
/* harmony export */ });
var CategoryString;
(function (CategoryString) {
    CategoryString["all"] = "";
    CategoryString["food"] = "food";
    CategoryString["alchemy"] = "alchemy";
    CategoryString["utility"] = "utility";
    CategoryString["tame"] = "tame";
})(CategoryString || (CategoryString = {}));
var CategoryNumber;
(function (CategoryNumber) {
    CategoryNumber["all"] = "";
    CategoryNumber[CategoryNumber["food"] = 1] = "food";
    CategoryNumber["alchemy"] = "Consumable";
    CategoryNumber[CategoryNumber["utility"] = 3] = "utility";
    CategoryNumber[CategoryNumber["tame"] = 4] = "tame";
})(CategoryNumber || (CategoryNumber = {}));


/***/ }),

/***/ "./src/marketplace/enums/guard.enum.ts":
/*!*********************************************!*\
  !*** ./src/marketplace/enums/guard.enum.ts ***!
  \*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Guard": () => (/* binding */ Guard)
/* harmony export */ });
var Guard;
(function (Guard) {
    Guard["any"] = "";
    Guard[Guard["light"] = 1] = "light";
    Guard[Guard["obsidian"] = 2] = "obsidian";
    Guard[Guard["absynthe"] = 3] = "absynthe";
    Guard[Guard["shadow"] = 4] = "shadow";
})(Guard || (Guard = {}));


/***/ }),

/***/ "./src/marketplace/enums/rarity.enum.ts":
/*!**********************************************!*\
  !*** ./src/marketplace/enums/rarity.enum.ts ***!
  \**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Rarity": () => (/* binding */ Rarity)
/* harmony export */ });
var Rarity;
(function (Rarity) {
    Rarity["all"] = "";
    Rarity["common"] = "common";
    Rarity["rare"] = "rare";
    Rarity["Epic"] = "epic";
    Rarity["legendary"] = "legendary";
    Rarity["event"] = "event";
})(Rarity || (Rarity = {}));


/***/ }),

/***/ "./src/marketplace/enums/type.enum.ts":
/*!********************************************!*\
  !*** ./src/marketplace/enums/type.enum.ts ***!
  \********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Type": () => (/* binding */ Type)
/* harmony export */ });
var Type;
(function (Type) {
    Type["All"] = "";
    Type["Bag"] = "Bag";
    Type["Consumable"] = "Consumable";
    Type["EggItem"] = "EggItem";
    Type["PlayerWearableItem"] = "PlayerWearableItem";
    Type["QuestItem"] = "QuestItem";
})(Type || (Type = {}));


/***/ }),

/***/ "./src/marketplace/marketplace_handlers.ts":
/*!*************************************************!*\
  !*** ./src/marketplace/marketplace_handlers.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "getItemDetails": () => (/* binding */ getItemDetails)
/* harmony export */ });
function getItemDetails(li) {
    const name = li.querySelector(".abstract-name")?.innerText;
    const src = li.querySelector(".abstract-icon img")?.src;
    const currentPrice = li.querySelector(".price-item[data-bids]")?.dataset;
    const buyNowPrice = li.querySelector(".price-item:not([data-bids])")?.dataset;
    if (!src || !name)
        return null;
    return {
        ...li.dataset,
        icon: src,
        name,
        buyNowPrice,
        currentPrice,
        date: new Date(),
    };
}


/***/ }),

/***/ "./src/migrate.ts":
/*!************************!*\
  !*** ./src/migrate.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "migrate": () => (/* binding */ migrate)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./local_storage/local_storage */ "./src/local_storage/local_storage.ts");

function migrate() {
    if (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.version === GM.info.script.version)
        return;
    if (GM.info.script.version === "1.2.0") {
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.sales = [];
        $.flavrNotif("Migrated to v1.2.0. Your sales history was erased.");
    }
    else {
        installed();
    }
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.version = GM.info.script.version;
}
function installed() {
    $.flavrNotif(`<strong>${GM.info.script.name}</strong> v<strong>${GM.info.script.version}</strong> installed!`);
}


/***/ }),

/***/ "./src/minigames/emile.ts":
/*!********************************!*\
  !*** ./src/minigames/emile.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "playPeggle": () => (/* binding */ playPeggle),
/* harmony export */   "playFlappy": () => (/* binding */ playFlappy),
/* harmony export */   "playHatchlings": () => (/* binding */ playHatchlings)
/* harmony export */ });
/* harmony import */ var _eldarya_jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya/jquery */ "./src/eldarya/jquery.ts");
/* harmony import */ var _eldarya_jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_eldarya_jquery__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _flappy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./flappy */ "./src/minigames/flappy.ts");
/* harmony import */ var _hatchlings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hatchlings */ "./src/minigames/hatchlings.ts");
/* harmony import */ var _peggle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./peggle */ "./src/minigames/peggle.ts");





async function playPeggle() {
    return play(_peggle__WEBPACK_IMPORTED_MODULE_4__.peggle);
}
async function playFlappy() {
    return play(_flappy__WEBPACK_IMPORTED_MODULE_2__.flappy);
}
async function playHatchlings() {
    return play(_hatchlings__WEBPACK_IMPORTED_MODULE_3__.hatchlings);
}
async function play(minigame) {
    // Disable buttons
    await new Promise(resolve => {
        const interval = setInterval(() => {
            const buttons = document.querySelectorAll(".minigames-rules .flavr-button");
            if (buttons.length) {
                clearInterval(interval);
                for (const button of buttons) {
                    button.classList.add("disabled");
                }
                resolve(true);
            }
        }, 250);
    });
    const json = await execute(minigame);
    const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
    $.flavrNotif(template.render({
        ...minigame,
        message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.playing(minigame.name),
    }));
    const gameToken = json.data;
    const score = randomInt(minigame.scoreMin, minigame.scoreMax);
    const enc_token = xorEncode(gameToken, score.toString());
    await new Promise(resolve => setTimeout(resolve, randomInt(minigame.delayMin, minigame.delayMax)));
    await getPrizes(minigame, gameToken, score);
    await new Promise(resolve => setTimeout(resolve, randomInt(1000, 3000)));
    await send(enc_token, score, minigame.name.toLowerCase());
    await new Promise(resolve => setTimeout(resolve, randomInt(1000, 3000)));
}
function randomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}
async function execute(minigame) {
    return new Promise((resolve, reject) => {
        if (typeof Recaptcha !== "undefined") {
            Recaptcha.execute(`minigameStart${minigame.name}`, (token) => void startGame(minigame, token).then(resolve).catch(reject));
        }
        else {
            void startGame(minigame).then(resolve).catch(reject);
        }
    });
}
async function startGame(minigame, recaptchaToken) {
    return new Promise((resolve, reject) => void $.ajax({
        url: "/minigames/ajax_startGame",
        type: "post",
        dataType: "json",
        data: recaptchaToken
            ? {
                game: minigame.name.toLowerCase(),
                recaptchaToken: recaptchaToken,
            }
            : {
                game: minigame.name.toLowerCase(),
            },
        success: (json) => {
            resolve(json);
        },
        error: () => {
            reject();
        },
    }));
}
async function getPrizes(minigame, gameToken, score) {
    return new Promise((resolve) => void $.post("/minigames/ajax_getPrizes", { game: minigame.name.toLowerCase(), score: score }, (json) => {
        resolve(json);
        if (json.result === "success") {
            const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
            $.flavrNotif(template.render({
                ...minigame,
                message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.played_for(minigame.name, json.data.maana),
            }));
        }
        else
            $.flavrNotif(json.data);
    }, "json").fail(() => setTimeout(() => {
        resolve(getPrizes(minigame, gameToken, score));
    }, randomInt(1000, 3000))));
}
/**
 * Sécurisation de l'envoi du score
 * Basé sur l'encodage XOR : http://en.wikipedia.org/wiki/XOR_cipher
 * Effectue un XOR bit à bit entre une chaine et une clé
 */
function xorEncode(str, key) {
    // Assure que les deux paramètres soient des chaines de caractère
    str = str.toString();
    key = key.toString();
    /** Encodage XOR */
    let xor = "";
    // eslint-disable-next-line @typescript-eslint/prefer-for-of
    for (let i = 0; i < str.length; ++i) {
        let tmp = str[i];
        for (let j = 0; j < key.length; ++j) {
            tmp = String.fromCharCode(tmp.charCodeAt(0) ^ key.charCodeAt(j));
        }
        xor += tmp;
    }
    // Renvoie le résultat en encodant les caractères spéciaux pouvant poser problème (\n par exemple)
    return encodeURIComponent(xor);
}
async function send(enc_token, score, game) {
    return new Promise(resolve => {
        if (typeof Recaptcha !== "undefined") {
            Recaptcha.execute("minigameSave" + game, (recaptchaToken) => void saveScore(enc_token, score, game, recaptchaToken).then(resolve));
        }
        else {
            void saveScore(enc_token, score, game).then(resolve);
        }
    });
}
async function saveScore(enc_token, score, game, recaptchaToken) {
    return new Promise(resolve => {
        const token = decodeURIComponent(enc_token);
        void $.ajax({
            type: "post",
            url: "/minigames/ajax_saveScore",
            data: recaptchaToken
                ? {
                    token: token,
                    score: score,
                    game: game,
                    recaptchaToken: recaptchaToken,
                }
                : {
                    token: token,
                    score: score,
                    game: game,
                },
            success: () => {
                resolve();
            },
            error: () => setTimeout(() => {
                resolve(saveScore(enc_token, score, game));
            }, randomInt(1000, 3000)),
        });
    });
}


/***/ }),

/***/ "./src/minigames/flappy.ts":
/*!*********************************!*\
  !*** ./src/minigames/flappy.ts ***!
  \*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "flappy": () => (/* binding */ flappy)
/* harmony export */ });
const flappy = {
    name: "Flappy",
    scoreMin: 180,
    scoreMax: 200,
    delayMin: 60_000,
    delayMax: 70_000,
    buttonSelector: '.minigame-start [href="/minigames/bubbltemple"] .nl-button',
    icon: "/static/img/new-layout/minigames/icon_bubbletemple.png",
};


/***/ }),

/***/ "./src/minigames/hatchlings.ts":
/*!*************************************!*\
  !*** ./src/minigames/hatchlings.ts ***!
  \*************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "hatchlings": () => (/* binding */ hatchlings)
/* harmony export */ });
const hatchlings = {
    name: "Hatchlings",
    scoreMin: 18,
    scoreMax: 20,
    delayMin: 30_000,
    delayMax: 30_000,
    buttonSelector: '.minigame-start [href="/minigames/cocooninpick"] .nl-button',
    icon: "/static/img/new-layout/minigames/icon_coconinpick.png",
};


/***/ }),

/***/ "./src/minigames/peggle.ts":
/*!*********************************!*\
  !*** ./src/minigames/peggle.ts ***!
  \*********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "peggle": () => (/* binding */ peggle)
/* harmony export */ });
const peggle = {
    name: "Peggle",
    scoreMin: 9,
    scoreMax: 10,
    delayMin: 10_000,
    delayMax: 20_000,
    buttonSelector: '.minigame-start [href="/minigames/gembomb"] .nl-button',
    icon: "/static/img/new-layout/minigames/icon_gembomb.png",
};


/***/ }),

/***/ "./src/outfit.ts":
/*!***********************!*\
  !*** ./src/outfit.ts ***!
  \***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "exportOutfit": () => (/* binding */ exportOutfit),
/* harmony export */   "parseAvatar": () => (/* binding */ parseAvatar)
/* harmony export */ });
function exportOutfit(selector, name = "outfit") {
    const avatar = Sacha.Avatar.avatars[selector];
    if (!avatar)
        return;
    const outfit = parseAvatar(avatar);
    const href = "data:text/json;charset=utf-8," +
        encodeURIComponent(JSON.stringify(outfit, undefined, 2));
    const a = document.createElement("a");
    a.setAttribute("href", href);
    a.setAttribute("download", `${name}.json`);
    a.click();
}
function parseAvatar(avatar) {
    return avatar.children.map(child => {
        const item = child.getItem();
        return {
            id: item._id,
            group: item._group,
            name: item._name,
            image: item._image,
            type: item._type,
            categoryId: item._categoryId,
            hiddenCategories: Object.values(item._hiddenCategories),
            animationData: item._animationData,
            locked: item._locked,
        };
    });
}


/***/ }),

/***/ "./src/session_storage/session_storage.enum.ts":
/*!*****************************************************!*\
  !*** ./src/session_storage/session_storage.enum.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "SessionStorageKey": () => (/* binding */ SessionStorageKey)
/* harmony export */ });
var SessionStorageKey;
(function (SessionStorageKey) {
    SessionStorageKey["action"] = "action";
    SessionStorageKey["explorationsDone"] = "explorationsDone";
    SessionStorageKey["meta"] = "meta";
    SessionStorageKey["minigamesDone"] = "minigamesDone";
    SessionStorageKey["selectedLocation"] = "selectedLocation";
    SessionStorageKey["takeover"] = "takeover";
    SessionStorageKey["wishlist"] = "wishlist";
})(SessionStorageKey || (SessionStorageKey = {}));


/***/ }),

/***/ "./src/session_storage/session_storage.ts":
/*!************************************************!*\
  !*** ./src/session_storage/session_storage.ts ***!
  \************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "SessionStorage": () => (/* binding */ SessionStorage)
/* harmony export */ });
/* harmony import */ var _session_storage_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./session_storage.enum */ "./src/session_storage/session_storage.enum.ts");

class SessionStorage {
    static sessionStorage = sessionStorage;
    constructor() { }
    static get action() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.action, null);
    }
    static set action(action) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.action, action);
    }
    static get explorationsDone() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.explorationsDone, false);
    }
    static set explorationsDone(done) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.explorationsDone, done);
    }
    static get meta() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.meta, null);
    }
    static set meta(meta) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.meta, meta);
    }
    static get minigamesDone() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.minigamesDone, false);
    }
    static set minigamesDone(done) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.minigamesDone, done);
    }
    static get selectedLocation() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.selectedLocation, null);
    }
    static set selectedLocation(selected) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.selectedLocation, selected);
    }
    static get takeover() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.takeover, false);
    }
    static set takeover(enabled) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.takeover, enabled);
    }
    static get wishlist() {
        return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.wishlist, []);
    }
    static set wishlist(wishlist) {
        this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.wishlist, wishlist);
    }
    static getItem(key, fallback) {
        return ((JSON.parse(this.sessionStorage.getItem(key) ?? JSON.stringify(fallback)) ?? fallback));
    }
    static setItem(key, value) {
        this.sessionStorage.setItem(key, JSON.stringify(value));
    }
}


/***/ }),

/***/ "./src/session_storage/takeover_action.enum.ts":
/*!*****************************************************!*\
  !*** ./src/session_storage/takeover_action.enum.ts ***!
  \*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "TakeoverAction": () => (/* binding */ TakeoverAction)
/* harmony export */ });
var TakeoverAction;
(function (TakeoverAction) {
    TakeoverAction["daily"] = "daily";
    TakeoverAction["minigames"] = "minigames";
    TakeoverAction["explorations"] = "explorations";
    TakeoverAction["auctions"] = "auctions";
    TakeoverAction["buy"] = "buy";
    // sell,
    TakeoverAction["wait"] = "wait";
})(TakeoverAction || (TakeoverAction = {}));


/***/ }),

/***/ "./src/takeover/brain.ts":
/*!*******************************!*\
  !*** ./src/takeover/brain.ts ***!
  \*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadTakeover": () => (/* binding */ loadTakeover),
/* harmony export */   "toggleTakeover": () => (/* binding */ toggleTakeover),
/* harmony export */   "resetTakeover": () => (/* binding */ resetTakeover)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _ui_top_bar__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/top_bar */ "./src/ui/top_bar.ts");
/* harmony import */ var _classes_buy_action__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./classes/buy_action */ "./src/takeover/classes/buy_action.ts");
/* harmony import */ var _classes_daily_action__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./classes/daily_action */ "./src/takeover/classes/daily_action.ts");
/* harmony import */ var _classes_exploration_action__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./classes/exploration_action */ "./src/takeover/classes/exploration_action.ts");
/* harmony import */ var _classes_minigame_action__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./classes/minigame_action */ "./src/takeover/classes/minigame_action.ts");
/* harmony import */ var _classes_wait_action__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./classes/wait_action */ "./src/takeover/classes/wait_action.ts");









/** Automated entry point of the takeover. */
function loadTakeover() {
    if (_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover)
        void takeover();
}
/** Manual entry point of the takeover. */
function toggleTakeover() {
    resetTakeover();
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover = !_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover;
    (0,_ui_top_bar__WEBPACK_IMPORTED_MODULE_3__.loadTopBar)();
    if (_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover)
        $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.takeover.enabled);
    else
        $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.takeover.enabled);
    void takeover();
}
function resetTakeover() {
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action = null;
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.explorationsDone = false;
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.minigamesDone = false;
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.selectedLocation = null;
    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.wishlist = [];
}
async function takeover() {
    if (!_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.takeover)
        return;
    if (_classes_daily_action__WEBPACK_IMPORTED_MODULE_5__.default.condition())
        await _classes_daily_action__WEBPACK_IMPORTED_MODULE_5__.default.perform();
    const action = actions.find(action => action.key === _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action);
    if (!action) {
        changeAction();
        void takeover();
        return;
    }
    _console__WEBPACK_IMPORTED_MODULE_0__.Console.info("Action:", action.key);
    if (action.condition() && (await action.perform()))
        return;
    else {
        changeAction();
        void takeover();
        return;
    }
}
const actions = [
    _classes_minigame_action__WEBPACK_IMPORTED_MODULE_7__.default,
    _classes_exploration_action__WEBPACK_IMPORTED_MODULE_6__.default,
    _classes_buy_action__WEBPACK_IMPORTED_MODULE_4__.default,
    _classes_wait_action__WEBPACK_IMPORTED_MODULE_8__.default,
];
function changeAction() {
    const next = actions.findIndex(action => action.key === _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action) + 1;
    return (_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_2__.SessionStorage.action =
        actions[next >= actions.length ? 0 : next].key);
}


/***/ }),

/***/ "./src/takeover/classes/action.ts":
/*!****************************************!*\
  !*** ./src/takeover/classes/action.ts ***!
  \****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "Action": () => (/* binding */ Action)
/* harmony export */ });
class Action {
}


/***/ }),

/***/ "./src/takeover/classes/buy_action.ts":
/*!********************************************!*\
  !*** ./src/takeover/classes/buy_action.ts ***!
  \********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ajax_ajax_search__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ajax/ajax_search */ "./src/ajax/ajax_search.ts");
/* harmony import */ var _ajax_buy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ajax/buy */ "./src/ajax/buy.ts");
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../marketplace/marketplace_handlers */ "./src/marketplace/marketplace_handlers.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _click__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../click */ "./src/takeover/click.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");









class BuyAction extends _action__WEBPACK_IMPORTED_MODULE_8__.Action {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__.TakeoverAction.buy;
    get currentMaana() {
        return Number(document.querySelector("#currency-maana")?.dataset
            .maana);
    }
    condition() {
        return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.market && Boolean(_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist.length);
    }
    async perform() {
        if (location.pathname !== "/marketplace") {
            await (0,_click__WEBPACK_IMPORTED_MODULE_7__.click)(".main-menu-marketplace a");
            return true;
        }
        const iconMessage = __webpack_require__(/*! ../../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
        for (const wished of _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist) {
            // Clothes might be a special exception. If they are, then check for
            // `wished.type === Type.PlayerWearableItem`.
            if (wished.error) {
                _console__WEBPACK_IMPORTED_MODULE_2__.Console.warn(`Skipped "${wished.name}"`, wished);
                continue;
            }
            _console__WEBPACK_IMPORTED_MODULE_2__.Console.info(`Searching for "${wished.name}"`, wished);
            let amount = 8;
            forpage: for (let page = 1; amount === 8; page++) {
                const results = await this.search(wished, page);
                amount = results.length;
                _console__WEBPACK_IMPORTED_MODULE_2__.Console.log(`Found ${amount} results`, results);
                const wanted = results.filter(result => result.icon === wished.icon &&
                    result.buyNowPrice &&
                    Number(result.buyNowPrice.price) <= wished.price &&
                    Number(result.buyNowPrice.price) <= this.currentMaana);
                for (const result of wanted) {
                    if (!(await this.buy(result)))
                        break forpage;
                    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.purchases = [
                        result,
                        ..._local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.purchases.filter(purchase => purchase.itemid !== result.itemid),
                    ];
                    _console__WEBPACK_IMPORTED_MODULE_2__.Console.info(`Bought "${result.name}" for ${Number(result.buyNowPrice?.price)} maanas.`, result);
                    $.flavrNotif(iconMessage.render({
                        ...result,
                        message: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.takeover.bought(result.name, Number(result.buyNowPrice?.price)),
                    }));
                }
            }
        }
        return false;
    }
    async buy(result) {
        const json = await (0,_ajax_buy__WEBPACK_IMPORTED_MODULE_1__.buy)(Number(result.itemid));
        if (json.result !== "success")
            this.setError(result.wearableitemid, json.data);
        return json.result === "success";
    }
    /** Search for a wished item on a specific page using the item's name. */
    async search(wished, page = 1) {
        const filterItemName = document.querySelector("#filter-itemName");
        if (filterItemName)
            filterItemName.value = wished.name;
        const marketplaceSearchItems = document.querySelector(".marketplace-search-items");
        if (!marketplaceSearchItems)
            return [];
        marketplaceSearchItems.innerHTML = await (0,_ajax_ajax_search__WEBPACK_IMPORTED_MODULE_0__.ajaxSearch)({
            name: wished.name,
            page,
        });
        return Array.from(marketplaceSearchItems.querySelectorAll(".marketplace-search-item"))
            .map(_marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_5__.getItemDetails)
            .filter((item) => item !== null);
    }
    /** Set the `WishedItem.error` property without reordering the wishlist. */
    setError(wearableitemid, error) {
        const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist;
        const index = wishlist.findIndex(item => item.wearableitemid === wearableitemid);
        const entry = wishlist[index];
        if (!entry)
            return;
        entry.error = error;
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist = [
            ...wishlist.slice(undefined, index),
            entry,
            ...wishlist.slice(index + 1, undefined),
        ];
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new BuyAction());


/***/ }),

/***/ "./src/takeover/classes/daily_action.ts":
/*!**********************************************!*\
  !*** ./src/takeover/classes/daily_action.ts ***!
  \**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _brain__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../brain */ "./src/takeover/brain.ts");
/* harmony import */ var _click__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../click */ "./src/takeover/click.ts");



class DailyAction {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_0__.TakeoverAction.daily;
    /** Checks if the daily maana gift if there. */
    condition() {
        const dailyGiftContainer = document.getElementById("daily-gift-container");
        return (!!dailyGiftContainer &&
            getComputedStyle(dailyGiftContainer).display !== "none");
    }
    /**
     * Click on the daily maana gift.
     * @returns `false`. This action does not perform meaningful actions on the
     * page.
     */
    async perform() {
        const dailyGiftContainer = document.getElementById("daily-gift-container");
        if (!dailyGiftContainer ||
            getComputedStyle(dailyGiftContainer).display === "none") {
            return false;
        }
        dailyGiftContainer.click();
        await (0,_click__WEBPACK_IMPORTED_MODULE_2__.click)(".first-connexion .flavr-button.default");
        (0,_brain__WEBPACK_IMPORTED_MODULE_1__.resetTakeover)();
        return false;
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new DailyAction());


/***/ }),

/***/ "./src/takeover/classes/exploration_action.ts":
/*!****************************************************!*\
  !*** ./src/takeover/classes/exploration_action.ts ***!
  \****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _ajax_capture_end__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../ajax/capture_end */ "./src/ajax/capture_end.ts");
/* harmony import */ var _ajax_change_region__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../ajax/change_region */ "./src/ajax/change_region.ts");
/* harmony import */ var _ajax_exploration_results__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../ajax/exploration_results */ "./src/ajax/exploration_results.ts");
/* harmony import */ var _api_result_enum__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../api/result.enum */ "./src/api/result.enum.ts");
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _duration__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../duration */ "./src/duration.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _click__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../click */ "./src/takeover/click.ts");
/* harmony import */ var _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../exploration_status.enum */ "./src/takeover/exploration_status.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");












class ExplorationAction extends _action__WEBPACK_IMPORTED_MODULE_11__.Action {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_8__.TakeoverAction.explorations;
    get globals() {
        return { currentRegion, pendingTreasureHuntLocation, timeLeftExploration };
    }
    condition() {
        return (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.explorations &&
            !_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.explorationsDone &&
            !!_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.length);
    }
    async perform() {
        if (location.pathname !== "/pet") {
            await (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)(".main-menu-pet a");
            return true;
        }
        switch (this.getExplorationStatus()) {
            case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.idle:
                if (!(await this.startExploration()).selected)
                    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.explorationsDone = true;
                return false;
            case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.pending:
                return (await this.waitExploration()) && this.perform();
            case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.result:
                await this.endExploration();
                return this.perform();
            case _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.capture:
                await this.endCapture();
                return this.perform();
            default:
                return false;
        }
    }
    async clickExplore() {
        return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#explore-button");
    }
    async clickLocation(selected) {
        return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)(`.map-location[data-id="${selected.location.id}"]`);
    }
    clickRegion(selected) {
        const div = document.querySelector(`.minimap[data-mapid="${selected.region.id}"]`);
        if (!div) {
            // Clearing invalid regions is useful to remove finished events.
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations =
                _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.filter(saved => saved.region.id !== selected.region.toString());
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation = null;
            location.reload();
            return null;
        }
        div.click();
        return div;
    }
    async clickSeason() {
        return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#crystal-images-container");
    }
    async endCapture() {
        try {
            void new Audio("/static/event/2021/music/sounds/mission-complete.mp3").play();
        }
        catch (e) {
            // eslint-disable-next-line no-empty
        }
        await (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#open-capture-interface");
        await (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#capture-button");
        await (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#close-result");
    }
    async endExploration() {
        return (0,_click__WEBPACK_IMPORTED_MODULE_9__.click)("#close-result");
    }
    getCurrentSeason() {
        return (Array.from(document.querySelector("body")?.classList ?? [])
            .find(c => c.startsWith("season-"))
            ?.replace("season-", "") ?? null);
    }
    getExplorationStatus() {
        if (document.querySelector("#open-capture-interface") ||
            document.querySelector("#capture-interface-outer.active")) {
            return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.capture;
        }
        else if (document.querySelector("#pending-map-location-data-outer.active") ||
            document.querySelector("#map-container.pending")) {
            return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.pending;
        }
        else if (document.querySelector("#treasure-hunt-result-overlay.active"))
            return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.result;
        return _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.idle;
    }
    getLowestEnergyLocation() {
        return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.reduce((lowest, place) => Number(place.location.energyRequired) <
            Number(lowest.location.energyRequired)
            ? place
            : lowest);
    }
    getSelectedLocation() {
        let selected = _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation;
        if (!selected) {
            selected = this.selectLocation();
            _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation = selected;
        }
        return selected;
    }
    selectLocation() {
        const affordable = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_6__.LocalStorage.autoExploreLocations.filter(saved => Number(saved.location.energyRequired) <= petEnergy);
        const minimumEnergy = this.getLowestEnergyLocation();
        const notDeadEnd = affordable.filter(place => petEnergy - Number(place.location.energyRequired) >=
            Number(minimumEnergy.location.energyRequired));
        if (notDeadEnd.length)
            return notDeadEnd[Math.floor(Math.random() * notDeadEnd.length)] ?? null;
        const sameEnergy = affordable.filter(place => Number(place.location.energyRequired) === petEnergy);
        if (sameEnergy.length)
            return sameEnergy[Math.floor(Math.random() * sameEnergy.length)] ?? null;
        return affordable[Math.floor(Math.random() * affordable.length)] ?? null;
    }
    async startExploration() {
        const selected = this.getSelectedLocation();
        if (!selected)
            return { exploring: false, selected };
        _console__WEBPACK_IMPORTED_MODULE_4__.Console.info("Exploring", selected);
        // Go to season
        if (selected.region.season &&
            this.getCurrentSeason() !== selected.region.season) {
            await this.clickSeason();
            return { exploring: false, selected };
        }
        // Go to region
        this.clickRegion(selected);
        // Go to location
        await this.clickLocation(selected);
        await this.clickExplore();
        _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation = null;
        return { exploring: true, selected };
    }
    /**
     * Wait for up to 10 minutes.
     * @returns whether the exploration is finished.
     */
    async waitExploration(selected) {
        document
            .querySelector(`.minimap[data-mapid="${selected?.region.id ?? currentRegion.id}"]`)
            ?.click();
        let ms = 3 * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second;
        if (selected)
            ms += selected.location.timeToExplore * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.minute;
        else if (timeLeftExploration && timeLeftExploration > 0)
            ms += timeLeftExploration * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second;
        else if (!pendingTreasureHuntLocation &&
            document.querySelector("#map-container.pending")) {
            const json = await (0,_ajax_exploration_results__WEBPACK_IMPORTED_MODULE_2__.explorationResults)();
            if (json.result !== _api_result_enum__WEBPACK_IMPORTED_MODULE_3__.Result.success)
                return false;
            const capture = json.data.results.find(result => result.type === "capture");
            if (!capture)
                return false;
            await (0,_ajax_capture_end__WEBPACK_IMPORTED_MODULE_0__.captureEnd)();
            // Reloading is the only possible action if the exploration finished in a
            // different region.
            _console__WEBPACK_IMPORTED_MODULE_4__.Console.error("Reloading because the exploration is in another region.", this.globals);
            await new Promise(resolve => setTimeout(resolve, _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.minute));
            location.reload();
            return true;
        }
        if (ms > 10 * _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.minute)
            return false;
        _console__WEBPACK_IMPORTED_MODULE_4__.Console.log(`Waiting for the exploration to end in ${Math.ceil(ms / _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second)} seconds...`, this.globals);
        await new Promise(resolve => setTimeout(resolve, ms));
        await (0,_ajax_change_region__WEBPACK_IMPORTED_MODULE_1__.changeRegion)(Number(selected?.region.id ?? currentRegion.id));
        if (this.getExplorationStatus() === _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus.pending &&
            timeLeftExploration &&
            timeLeftExploration < 0) {
            _console__WEBPACK_IMPORTED_MODULE_4__.Console.info("Reloading because the timer is desynchronised.", this.globals);
            await new Promise(resolve => setTimeout(resolve, _duration__WEBPACK_IMPORTED_MODULE_5__.DurationUnit.second));
            location.reload();
        }
        return true;
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new ExplorationAction());


/***/ }),

/***/ "./src/takeover/classes/minigame_action.ts":
/*!*************************************************!*\
  !*** ./src/takeover/classes/minigame_action.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _minigames_emile__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../minigames/emile */ "./src/minigames/emile.ts");
/* harmony import */ var _minigames_flappy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../minigames/flappy */ "./src/minigames/flappy.ts");
/* harmony import */ var _minigames_hatchlings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../minigames/hatchlings */ "./src/minigames/hatchlings.ts");
/* harmony import */ var _minigames_peggle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../minigames/peggle */ "./src/minigames/peggle.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _click__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../click */ "./src/takeover/click.ts");








class MinigameAction {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_6__.TakeoverAction.minigames;
    condition() {
        return _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.minigames && !_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_5__.SessionStorage.minigamesDone;
    }
    /** Determines if the minigames should be played right now.
     * @returns whether the minigames are currently being played.
     */
    async perform() {
        switch (location.pathname) {
            case "/minigames": {
                const playing = this.openMinigame(_minigames_peggle__WEBPACK_IMPORTED_MODULE_4__.peggle) ||
                    this.openMinigame(_minigames_flappy__WEBPACK_IMPORTED_MODULE_2__.flappy) ||
                    this.openMinigame(_minigames_hatchlings__WEBPACK_IMPORTED_MODULE_3__.hatchlings);
                if (!playing) {
                    _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_5__.SessionStorage.minigamesDone = true;
                    document
                        .querySelector('.minigames-rules [rel="btn-cancel"]')
                        ?.click();
                }
                return playing;
            }
            case "/minigames/gembomb":
                await (0,_minigames_emile__WEBPACK_IMPORTED_MODULE_1__.playPeggle)();
                break;
            case "/minigames/bubbltemple":
                await (0,_minigames_emile__WEBPACK_IMPORTED_MODULE_1__.playFlappy)();
                break;
            case "/minigames/cocooninpick":
                await (0,_minigames_emile__WEBPACK_IMPORTED_MODULE_1__.playHatchlings)();
                break;
            default:
                await (0,_click__WEBPACK_IMPORTED_MODULE_7__.click)(".main-menu-minigames a");
                return true;
        }
        await (0,_click__WEBPACK_IMPORTED_MODULE_7__.click)(".main-menu-minigames a");
        return true;
    }
    /** Click on a minigame's link. @returns whether the minigame was opened. */
    openMinigame(minigame) {
        const start = document.querySelector(minigame.buttonSelector);
        if (!start) {
            return false;
        }
        start.click();
        return true;
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new MinigameAction());


/***/ }),

/***/ "./src/takeover/classes/wait_action.ts":
/*!*********************************************!*\
  !*** ./src/takeover/classes/wait_action.ts ***!
  \*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../console */ "./src/console.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");



class WaitAction extends _action__WEBPACK_IMPORTED_MODULE_2__.Action {
    key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_1__.TakeoverAction.wait;
    condition() {
        return true;
    }
    async perform() {
        _console__WEBPACK_IMPORTED_MODULE_0__.Console.log(`Waiting for 10 minutes...`);
        return new Promise(resolve => setTimeout(() => {
            resolve(false);
        }, 10 * 60 * 1000));
    }
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (new WaitAction());


/***/ }),

/***/ "./src/takeover/click.ts":
/*!*******************************!*\
  !*** ./src/takeover/click.ts ***!
  \*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "click": () => (/* binding */ click)
/* harmony export */ });
async function click(selector) {
    return new Promise(resolve => {
        const interval = setInterval(() => {
            const element = document.querySelector(selector);
            if (!element)
                return;
            clearInterval(interval);
            // Some elements don't have their click handlers ready until they're
            // hovered.
            const mouseEvent = document.createEvent("MouseEvent");
            mouseEvent.initEvent("mouseover");
            element.dispatchEvent(mouseEvent);
            setTimeout(() => {
                element.click();
                resolve(element);
            }, 800);
        }, 800);
    });
}


/***/ }),

/***/ "./src/takeover/exploration_status.enum.ts":
/*!*************************************************!*\
  !*** ./src/takeover/exploration_status.enum.ts ***!
  \*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "ExplorationStatus": () => (/* binding */ ExplorationStatus)
/* harmony export */ });
var ExplorationStatus;
(function (ExplorationStatus) {
    ExplorationStatus[ExplorationStatus["idle"] = 0] = "idle";
    ExplorationStatus[ExplorationStatus["result"] = 1] = "result";
    ExplorationStatus[ExplorationStatus["capture"] = 2] = "capture";
    ExplorationStatus[ExplorationStatus["pending"] = 3] = "pending";
})(ExplorationStatus || (ExplorationStatus = {}));


/***/ }),

/***/ "./src/ui/auctions.ts":
/*!****************************!*\
  !*** ./src/ui/auctions.ts ***!
  \****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadAuctions": () => (/* binding */ loadAuctions)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");


function loadAuctions() {
    if (location.pathname !== "/marketplace/auctions")
        return;
    const marketplaceActiveAuctions = document.querySelector("#marketplace-active-auctions");
    if (!marketplaceActiveAuctions)
        return;
    const layout2col = document.querySelector(".marketplace-main-container #layout-2col");
    if (layout2col)
        layout2col.style.overflowX = "visible";
    loadHistory(marketplaceActiveAuctions);
}
function loadHistory(marketplaceActiveAuctions) {
    marketplaceActiveAuctions.querySelector("style")?.remove();
    marketplaceActiveAuctions.querySelector("#purchase-history")?.remove();
    marketplaceActiveAuctions.querySelector("#sale-history")?.remove();
    const template = __webpack_require__(/*! ../templates/html/market_history.html */ "./src/templates/html/market_history.html");
    const history = {
        purchases: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases.map(purchase => ({
            ...purchase,
            date: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.auctions.date_time_format.format(new Date(purchase.date)),
        })),
        sales: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.sales.map(sale => ({
            ...sale,
            date: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.auctions.date_time_format.format(new Date(sale.date)),
        })),
    };
    marketplaceActiveAuctions.insertAdjacentHTML("beforeend", template.render({ ...history, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
    for (const purchase of document.querySelectorAll("#purchase-history .marketplace-auctions-item")) {
        const itemid = purchase.dataset.itemid;
        purchase.querySelector(".delete-button")?.addEventListener("click", () => {
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases.filter(purchase => purchase.itemid !== itemid);
            loadHistory(marketplaceActiveAuctions);
        });
    }
    for (const sale of document.querySelectorAll("#sale-history .marketplace-sales-item")) {
        const icon = sale.querySelector(".abstract-icon img")?.src;
        sale.querySelector(".delete-button")?.addEventListener("click", () => {
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.sales = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.sales.filter(sale => sale.icon !== icon);
            loadHistory(marketplaceActiveAuctions);
        });
    }
}


/***/ }),

/***/ "./src/ui/carousel.ts":
/*!****************************!*\
  !*** ./src/ui/carousel.ts ***!
  \****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadCarousel": () => (/* binding */ loadCarousel)
/* harmony export */ });
/* harmony import */ var _carousel_carousel_beemoov_annoyances__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../carousel/carousel_beemoov_annoyances */ "./src/carousel/carousel_beemoov_annoyances.ts");
/* harmony import */ var _carousel_carousel_download_face__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../carousel/carousel_download_face */ "./src/carousel/carousel_download_face.ts");
/* harmony import */ var _carousel_carousel_download_guardian__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../carousel/carousel_download_guardian */ "./src/carousel/carousel_download_guardian.ts");
/* harmony import */ var _carousel_carousel_eldarya_enhancements__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../carousel/carousel_eldarya_enhancements */ "./src/carousel/carousel_eldarya_enhancements.ts");
/* harmony import */ var _carousel_carousel_takeover__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../carousel/carousel_takeover */ "./src/carousel/carousel_takeover.ts");
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _takeover_brain__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../takeover/brain */ "./src/takeover/brain.ts");










function loadCarousel() {
    const carouselInner = document.querySelector("#carousel-inner");
    if (!carouselInner || document.querySelector(".carousel-ee")) {
        return;
    }
    // Import carousel template
    const template = __webpack_require__(/*! ../templates/html/carousel_news.html */ "./src/templates/html/carousel_news.html");
    const contexts = [
        // Intro
        _carousel_carousel_eldarya_enhancements__WEBPACK_IMPORTED_MODULE_3__.carouselEE,
        // Features
        ...(_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__.LocalStorage.minigames ||
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__.LocalStorage.explorations ||
            _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_7__.LocalStorage.market
            ? [_carousel_carousel_takeover__WEBPACK_IMPORTED_MODULE_4__.carouselTakeover]
            : []),
        _carousel_carousel_download_guardian__WEBPACK_IMPORTED_MODULE_2__.carouselDownloadGuardian,
        _carousel_carousel_download_face__WEBPACK_IMPORTED_MODULE_1__.carouselDownloadFace,
        // Ads
        _carousel_carousel_beemoov_annoyances__WEBPACK_IMPORTED_MODULE_0__.carouselBeemoovAnnoyances,
    ];
    // Add entries to the carousel
    carouselInner.insertAdjacentHTML("beforeend", contexts.map(banner => template.render(banner)).join("\n"));
    // Add links
    for (const carousel of contexts) {
        if (!carousel.href)
            continue;
        const element = carouselInner.querySelector(`#${carousel.id}`);
        if (!element)
            continue;
        element.addEventListener("click", () => {
            if (element.classList.contains("active"))
                open(carousel.href, "_blank");
        });
    }
    // Add click events
    document
        .getElementById(_carousel_carousel_download_face__WEBPACK_IMPORTED_MODULE_1__.carouselDownloadFace.id)
        ?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_5__.downloadFace);
    document
        .getElementById(_carousel_carousel_download_guardian__WEBPACK_IMPORTED_MODULE_2__.carouselDownloadGuardian.id)
        ?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_5__.downloadGuardian);
    const takeoverAnchor = document.getElementById(_carousel_carousel_takeover__WEBPACK_IMPORTED_MODULE_4__.carouselTakeover.id);
    takeoverAnchor?.addEventListener("click", () => {
        (0,_takeover_brain__WEBPACK_IMPORTED_MODULE_9__.toggleTakeover)();
        takeoverTitle(takeoverAnchor);
    });
    if (takeoverAnchor)
        takeoverTitle(takeoverAnchor);
}
function takeoverTitle(takeoverAnchor) {
    const takeoverH4 = takeoverAnchor.querySelector("h4");
    if (takeoverH4) {
        takeoverH4.innerText = _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_8__.SessionStorage.takeover
            ? _i18n_translate__WEBPACK_IMPORTED_MODULE_6__.translate.carousel.takeover.disable_takeover
            : _i18n_translate__WEBPACK_IMPORTED_MODULE_6__.translate.carousel.takeover.enable_takeover;
    }
}


/***/ }),

/***/ "./src/ui/favourites.ts":
/*!******************************!*\
  !*** ./src/ui/favourites.ts ***!
  \******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadFavourites": () => (/* binding */ loadFavourites),
/* harmony export */   "loadFakeFavourites": () => (/* binding */ loadFakeFavourites)
/* harmony export */ });
/* harmony import */ var _appearance_fake_favourites__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../appearance/fake_favourites */ "./src/appearance/fake_favourites.ts");
/* harmony import */ var _appearance_favourites_actions__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../appearance/favourites_actions */ "./src/appearance/favourites_actions.ts");
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../indexed_db/indexed_db */ "./src/indexed_db/indexed_db.ts");





function loadFavourites() {
    loadFavouritesActions();
    void loadFakeFavourites();
}
function loadFavouritesActions() {
    const actions = document.getElementById("favorites-actions");
    if (!actions || document.querySelector(".favorites-action-ee"))
        return;
    const actionTemplate = __webpack_require__(/*! ../templates/html/favourites_action.html */ "./src/templates/html/favourites_action.html");
    const importAction = {
        id: "import-outfit",
        text: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.appearance.favourites.buttons.import,
    };
    const exportAction = {
        id: "export-outfit",
        text: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.appearance.favourites.buttons.export,
    };
    const downloadAction = {
        id: "download-outfit",
        text: _i18n_translate__WEBPACK_IMPORTED_MODULE_3__.translate.appearance.favourites.buttons.download,
    };
    actions.insertAdjacentHTML("beforeend", actionTemplate.render(importAction) +
        actionTemplate.render(exportAction) +
        actionTemplate.render(downloadAction));
    document
        .getElementById(importAction.id)
        ?.addEventListener("click", _appearance_favourites_actions__WEBPACK_IMPORTED_MODULE_1__.importOutfit);
    document
        .getElementById(exportAction.id)
        ?.addEventListener("click", _appearance_favourites_actions__WEBPACK_IMPORTED_MODULE_1__.exportPreview);
    document
        .getElementById(downloadAction.id)
        ?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_2__.downloadAppearance);
}
async function loadFakeFavourites() {
    const thumbs = document.querySelector("#all-outfit-thumbs .mCSB_container");
    if (!thumbs)
        return;
    const template = __webpack_require__(/*! ../templates/html/outfit_thumbs.html */ "./src/templates/html/outfit_thumbs.html");
    const favourites = await _indexed_db_indexed_db__WEBPACK_IMPORTED_MODULE_4__.default.getFavouriteOutfits();
    document.querySelector("#ee-outfit-thumbs")?.remove();
    thumbs.insertAdjacentHTML("beforeend", template.render({
        outfits: favourites,
    }));
    document
        .querySelector(".ee-available-slot")
        ?.addEventListener("click", () => void (0,_appearance_fake_favourites__WEBPACK_IMPORTED_MODULE_0__.saveFavourite)());
    for (const div of document.querySelectorAll(".ee-outfit-thumb")) {
        div.addEventListener("click", () => {
            const favourite = favourites.find(favourite => favourite.id === Number(div.dataset.arrayIndex));
            if (!favourite)
                return;
            (0,_appearance_fake_favourites__WEBPACK_IMPORTED_MODULE_0__.showFavourite)(favourite);
        });
    }
}


/***/ }),

/***/ "./src/ui/home_content.ts":
/*!********************************!*\
  !*** ./src/ui/home_content.ts ***!
  \********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadHomeContent": () => (/* binding */ loadHomeContent)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

function loadHomeContent() {
    const homeContentSmalls = document.getElementById("home-content-smalls");
    if (!homeContentSmalls ||
        homeContentSmalls.querySelector(".home-content-small-ee"))
        return;
    // Remove bank
    document.getElementById("home-bank")?.remove();
    // Add forum
    const smallTemplate = __webpack_require__(/*! ../templates/html/home_content_small.html */ "./src/templates/html/home_content_small.html");
    const smallContent = {
        backgroundImage: "/assets/img/minigames/treasurehunt/a48bbc4e4849745ebe6dbcf5313eb3f0.jpg",
        h4: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.home.forum,
        href: "/forum",
        id: "forum",
    };
    homeContentSmalls.insertAdjacentHTML("beforeend", smallTemplate.render(smallContent));
}


/***/ }),

/***/ "./src/ui/market.ts":
/*!**************************!*\
  !*** ./src/ui/market.ts ***!
  \**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadMarket": () => (/* binding */ loadMarket)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../marketplace/marketplace_handlers */ "./src/marketplace/marketplace_handlers.ts");



let marketObserver;
function loadMarket() {
    marketObserver?.disconnect();
    marketObserver = null;
    if (location.pathname !== "/marketplace")
        return;
    // `.marketplace-search-items` is the container whose HTML content is being
    // replaced on every action.
    const searchItems = document.querySelector(".marketplace-search-items");
    if (!searchItems)
        return;
    marketObserver = new MutationObserver(loadWishlist);
    marketObserver.observe(searchItems, {
        childList: true,
    });
    loadWishlist();
}
function loadWishlist() {
    for (const li of document.querySelectorAll(".marketplace-abstract")) {
        li.addEventListener("click", () => {
            new MutationObserver((_, observer) => {
                const marketEntry = (0,_marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_2__.getItemDetails)(li);
                if (!marketEntry)
                    return;
                addWishistButton(marketEntry, observer);
            }).observe(document.getElementById("marketplace-zoom"), {
                childList: true,
            });
        });
    }
}
function addWishistButton(marketEntry, observer) {
    const buttonsContainer = document.querySelector("#marketplace-itemDetail");
    if (!buttonsContainer)
        return;
    observer?.disconnect();
    hijackBuyButtons(marketEntry);
    document.getElementById("marketplace-itemDetail-info-autobuy")?.remove();
    const buttonTemplate = __webpack_require__(/*! ../templates/html/auto_buy_button.html */ "./src/templates/html/auto_buy_button.html");
    buttonsContainer.insertAdjacentHTML("beforeend", buttonTemplate.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
    buttonsContainer
        .querySelector("#marketplace-itemDetail-info-autobuy")
        ?.addEventListener("click", () => {
        addToWishlistFlavr(marketEntry);
    });
}
function addToWishlistFlavr(marketEntry) {
    const template = __webpack_require__(/*! ../templates/html/auto_buy_flavr.html */ "./src/templates/html/auto_buy_flavr.html");
    $.flavr({
        content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
        buttons: {
            close: { style: "close" },
            save: {
                action: () => save(marketEntry),
            },
        },
        dialog: "prompt",
        prompt: {
            value: "",
        },
        onBuild: $container => {
            $container.addClass("new-layout-popup");
            document
                .querySelector(".flavr-prompt")
                ?.addEventListener("keyup", ({ key }) => {
                if (key !== "Enter")
                    return;
                save(marketEntry);
            });
        },
    });
}
function save(marketEntry) {
    const price = Number(document.querySelector(".flavr-prompt")?.value.trim());
    if (!price || price <= 0) {
        $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.add_to_wishlist.invalid_price);
        return false;
    }
    const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist.filter(wishlistEntry => wishlistEntry.icon !== marketEntry.icon);
    const wished = { ...marketEntry, price };
    wishlist.push(wished);
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = wishlist;
    const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
    $.flavrNotif(template.render({
        ...wished,
        message: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.add_to_wishlist.added_to_wishlist(wished.name, wished.price),
    }));
    return true;
}
function hijackBuyButtons(marketEntry) {
    document
        .querySelector(".marketplace-itemDetail-bid-prepare")
        ?.addEventListener("click", () => {
        addPurchase(marketEntry);
    });
    document
        .querySelector(".marketplace-itemDetail-buy")
        ?.addEventListener("click", () => {
        addPurchase(marketEntry);
    });
}
function addPurchase(marketEntry) {
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases = [
        marketEntry,
        ..._local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.purchases.filter(purchase => purchase.itemid !== marketEntry.itemid),
    ];
}


/***/ }),

/***/ "./src/ui/menu.ts":
/*!************************!*\
  !*** ./src/ui/menu.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadMenu": () => (/* binding */ loadMenu)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");

function loadMenu() {
    const menuInnerRight = document.getElementById("menu-inner-right");
    if (!menuInnerRight || menuInnerRight.querySelector(".main-menu-ee"))
        return;
    // Remove bank
    menuInnerRight.querySelector(".main-menu-bank")?.remove();
    // Add Forum
    const menuTemplate = __webpack_require__(/*! ../templates/html/main_menu.html */ "./src/templates/html/main_menu.html");
    const mainMenuForum = {
        class: "forum",
        href: "/forum",
        text: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.home.forum,
    };
    menuInnerRight.insertAdjacentHTML("beforeend", menuTemplate.render(mainMenuForum));
}


/***/ }),

/***/ "./src/ui/pet.ts":
/*!***********************!*\
  !*** ./src/ui/pet.ts ***!
  \***********************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadPet": () => (/* binding */ loadPet)
/* harmony export */ });
/* harmony import */ var _ajax_change_region__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../ajax/change_region */ "./src/ajax/change_region.ts");
/* harmony import */ var _api_result_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../api/result.enum */ "./src/api/result.enum.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");




let petObserver;
function loadPet() {
    petObserver?.disconnect();
    petObserver = null;
    if (location.pathname !== "/pet")
        return;
    // `.page-main-container` changes background depending on the currently
    // selected region.
    const mainContainer = document.querySelector(".page-main-container");
    if (!mainContainer)
        return;
    petObserver = new MutationObserver(loadPet);
    petObserver.observe(mainContainer, {
        attributes: true,
    });
    loadExplorations();
}
function loadExplorations() {
    const autoExploreLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_3__.LocalStorage.autoExploreLocations;
    for (const div of document.querySelectorAll(".map-location[data-id]")) {
        const locationId = Number(div.getAttribute("data-id"));
        if (!locationId)
            continue;
        loadPictoMap(autoExploreLocations, div);
        div.addEventListener("click", () => {
            new MutationObserver((_, observer) => {
                addAutoExploreButton(locationId, observer);
            }).observe(document.getElementById("map-location-preview"), {
                attributes: true,
            });
        });
    }
}
function addAutoExploreButton(locationId, observer) {
    const buttonsContainer = document.querySelector("#buttons-container");
    if (!buttonsContainer)
        return;
    observer?.disconnect();
    // Parameters to be injected into the template
    const context = {
        locationId,
        active: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_3__.LocalStorage.autoExploreLocations.some(saved => saved.location.id === locationId.toString()),
        regionId: Number(document
            .querySelector(".minimap.current[data-mapid]")
            ?.getAttribute("data-mapid")),
    };
    // Add the auto explore button
    buttonsContainer.querySelector("#auto-explore-button")?.remove();
    const autoExploreTemplate = __webpack_require__(/*! ../templates/html/auto_explore_button.html */ "./src/templates/html/auto_explore_button.html");
    buttonsContainer.insertAdjacentHTML("beforeend", autoExploreTemplate.render({ ...context, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_2__.translate }));
    // Bind `autoExplore` and `loadPictoMaps`
    buttonsContainer
        .querySelector("#auto-explore-button")
        ?.addEventListener("click", () => {
        void autoExplore(context).then(loadPictoMaps);
    });
    void disableExplore(context);
}
async function disableExplore(context) {
    const entry = await getAutoExploreEntry(context.regionId, context.locationId);
    if (!entry)
        return;
    if (petEnergy < Number(entry.location.energyRequired))
        document.getElementById("explore-button")?.classList.add("disabled");
}
async function autoExplore(context) {
    if (context.active) {
        const filteredLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_3__.LocalStorage.autoExploreLocations.filter(saved => saved.location.id !== context.locationId.toString());
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_3__.LocalStorage.autoExploreLocations = filteredLocations;
        addAutoExploreButton(context.locationId);
        return;
    }
    const newAutoExplore = await getAutoExploreEntry(context.regionId, context.locationId);
    if (!newAutoExplore)
        return;
    const newLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_3__.LocalStorage.autoExploreLocations;
    newLocations.push(newAutoExplore);
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_3__.LocalStorage.autoExploreLocations = newLocations;
    addAutoExploreButton(context.locationId);
}
async function getAutoExploreEntry(regionId, locationId) {
    const region = await getRegion(regionId);
    if (!region)
        return null;
    const location = region.locations.find(location => location.id === locationId.toString());
    if (!location)
        return null;
    return {
        location,
        region,
    };
}
async function getRegion(id) {
    if (id.toString() === currentRegion.id)
        return currentRegion;
    const json = await (0,_ajax_change_region__WEBPACK_IMPORTED_MODULE_0__.changeRegion)(id);
    if (json.result === _api_result_enum__WEBPACK_IMPORTED_MODULE_1__.Result.success)
        return json.data.currentRegion;
    return null;
}
// Picto map
function loadPictoMaps() {
    const autoExploreLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_3__.LocalStorage.autoExploreLocations;
    for (const div of document.querySelectorAll(".map-location[data-id]")) {
        loadPictoMap(autoExploreLocations, div);
    }
}
function loadPictoMap(autoExploreLocations, div) {
    const mapLocation = div.getAttribute("data-id");
    if (!mapLocation)
        return;
    div.style.backgroundImage = autoExploreLocations.some(saved => saved.location.id === mapLocation)
        ? "url(/static/img/new-layout/pet/icons/picto_map_explo.png)"
        : "url(/static/img/new-layout/pet/icons/picto_map.png)";
}


/***/ }),

/***/ "./src/ui/profile.ts":
/*!***************************!*\
  !*** ./src/ui/profile.ts ***!
  \***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadProfile": () => (/* binding */ loadProfile)
/* harmony export */ });
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _outfit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../outfit */ "./src/outfit.ts");



function loadProfile() {
    const profileContactActions = document.getElementById("profile-contact-actions");
    if (!profileContactActions ||
        document.querySelector(".profile-contact-action-ee")) {
        return;
    }
    const template = __webpack_require__(/*! ../templates/html/profile_contact_action.html */ "./src/templates/html/profile_contact_action.html");
    const profileActionExport = {
        id: "profile-contact-action-export",
        actionDescription: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.profile.export_outfit,
    };
    const profileActionDownload = {
        id: "profile-contact-action-download",
        actionDescription: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.profile.download_outfit,
    };
    // Add entries
    profileContactActions.insertAdjacentHTML("beforeend", template.render(profileActionExport));
    profileContactActions.insertAdjacentHTML("beforeend", template.render(profileActionDownload));
    // Add click events
    document
        .getElementById(profileActionExport.id)
        ?.addEventListener("click", exportProfile);
    document
        .getElementById(profileActionDownload.id)
        ?.addEventListener("click", _download_canvas__WEBPACK_IMPORTED_MODULE_0__.downloadProfile);
}
function exportProfile() {
    const title = document.querySelector("#main-section .section-title");
    const keys = Object.keys(Sacha.Avatar.avatars).filter(key => key.startsWith("#playerProfileAvatar"));
    for (const key of keys) {
        (0,_outfit__WEBPACK_IMPORTED_MODULE_2__.exportOutfit)(key, title?.textContent?.trim());
    }
}


/***/ }),

/***/ "./src/ui/sell.ts":
/*!************************!*\
  !*** ./src/ui/sell.ts ***!
  \************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadSell": () => (/* binding */ loadSell)
/* harmony export */ });
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");

function loadSell() {
    if (location.pathname !== "/marketplace/sell")
        return;
    const itemsForSale = document.querySelector(".marketplace-itemsForSale-items");
    if (!itemsForSale)
        return;
    new MutationObserver(() => {
        handleItemsForSale(itemsForSale);
    }).observe(itemsForSale, { childList: true });
}
function handleItemsForSale(itemsForSale) {
    const lis = itemsForSale.querySelectorAll("li");
    for (const li of lis) {
        li.addEventListener("click", () => {
            const dataItem = JSON.parse(li.dataset.item ?? "{}");
            const icon = li.querySelector("img")?.src;
            if (!icon)
                return;
            const saleDetail = document.querySelector("#marketplace-saleDetail");
            if (!saleDetail)
                return;
            new MutationObserver((_, observer) => {
                const sellButton = document.querySelector(".marketplace-itemDetail-sell");
                if (!sellButton)
                    return;
                observer.disconnect();
                handleSellButton(sellButton, dataItem, icon);
            }).observe(saleDetail, { childList: true });
        });
    }
}
function handleSellButton(itemDetailSell, dataItem, icon) {
    itemDetailSell.addEventListener("click", () => {
        const currentPrice = document.querySelector("#marketplace-saleDetail-currentPrice")?.value;
        const buyNowPrice = document.querySelector("#marketplace-saleDetail-buyNowPrice")?.value;
        if (!currentPrice || !buyNowPrice)
            return;
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.sales = [
            {
                ...dataItem,
                currentPrice: Number(currentPrice),
                buyNowPrice: Number(buyNowPrice),
                icon,
                date: new Date(),
            },
            ..._local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.sales,
        ];
    });
}


/***/ }),

/***/ "./src/ui/settings.ts":
/*!****************************!*\
  !*** ./src/ui/settings.ts ***!
  \****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadSettings": () => (/* binding */ loadSettings)
/* harmony export */ });
/* harmony import */ var _download_canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../download-canvas */ "./src/download-canvas.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");



async function loadSettings() {
    const accountRight = document.querySelector("#account-right div");
    if (!accountRight || accountRight.querySelector(".account-ee-bloc"))
        return;
    const settingsTemplate = __webpack_require__(/*! ../templates/html/settings.html */ "./src/templates/html/settings.html");
    accountRight.insertAdjacentHTML("beforeend", settingsTemplate.render({
        ...(await _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.getSettings()),
        translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate,
    }));
    document.getElementById("ee-debug-enabled")?.addEventListener("click", () => {
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.debug = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.debug;
        reloadSettings();
    });
    document
        .getElementById("ee-minigames-enabled")
        ?.addEventListener("click", () => {
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.minigames = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.minigames;
        reloadSettings();
    });
    document
        .getElementById("ee-explorations-enabled")
        ?.addEventListener("click", () => {
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorations = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorations;
        reloadSettings();
    });
    document
        .getElementById("ee-market-enabled")
        ?.addEventListener("click", () => {
        _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.market = !_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.market;
        reloadSettings();
    });
    document
        .getElementById("ee-import")
        ?.addEventListener("click", importSettings);
    document
        .getElementById("ee-export")
        ?.addEventListener("click", () => void exportSettings());
}
function reloadSettings() {
    document.querySelector(".account-ee-bloc")?.remove();
    void loadSettings();
}
function importSettings() {
    const input = document.createElement("input");
    input.setAttribute("type", "file");
    input.setAttribute("accept", "application/json");
    input.click();
    input.addEventListener("input", event => {
        if (!event.target)
            return;
        const files = event.target.files;
        if (!files)
            return;
        const file = files[0];
        if (!file)
            return;
        void file.text().then(async (value) => {
            if (!value)
                return;
            await _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.setSettings(JSON.parse(value));
            reloadSettings();
            $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.account.imported);
        });
    });
}
async function exportSettings() {
    const href = "data:text/json;charset=utf-8," +
        encodeURIComponent(JSON.stringify(await _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.getSettings(), null, 2));
    const a = document.createElement("a");
    a.setAttribute("href", href);
    a.setAttribute("download", `${(0,_download_canvas__WEBPACK_IMPORTED_MODULE_0__.getName)() ?? "eldarya-enhancements"}-settings.json`);
    a.click();
}


/***/ }),

/***/ "./src/ui/top_bar.ts":
/*!***************************!*\
  !*** ./src/ui/top_bar.ts ***!
  \***************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadTopBar": () => (/* binding */ loadTopBar)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _takeover_brain__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../takeover/brain */ "./src/takeover/brain.ts");



function loadTopBar() {
    const headerRight = document.getElementById("header-right");
    if (!headerRight)
        return;
    const headerTakeover = headerRight.querySelector("#header-takeover");
    if (headerTakeover)
        headerTakeover.remove();
    else
        loadLinks();
    const template = __webpack_require__(/*! ../templates/html/header_takeover.html */ "./src/templates/html/header_takeover.html");
    headerRight.insertAdjacentHTML("afterbegin", template.render({ takeover: _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_1__.SessionStorage.takeover, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
    headerRight
        .querySelector("#header-takeover")
        ?.addEventListener("click", _takeover_brain__WEBPACK_IMPORTED_MODULE_2__.toggleTakeover);
}
function loadLinks() {
    const headerProfile = document.getElementById("header-profile")?.firstChild;
    if (headerProfile?.textContent) {
        const a = document.createElement("a");
        a.href = "/player/profile";
        a.style.color = "var(--text-color)";
        a.style.fontFamily = '"Alegreya Sans", sans-serif';
        a.style.fontWeight = "unset";
        a.textContent = headerProfile.textContent.trim();
        const p = document.createElement("p");
        p.insertAdjacentElement("beforeend", a);
        headerProfile.replaceWith(p);
    }
    const avatarTitle = document.querySelector("#avatar-menu-container-outer>p");
    if (avatarTitle?.textContent)
        avatarTitle.innerHTML = `<a href="/player/profile" style="color: #FFFFFF; font-size: 23px; font-weight: 900; text-transform: uppercase;">${avatarTitle.textContent.trim()}</a>`;
    document
        .querySelector("#avatar-menu-container>canvas")
        ?.addEventListener("click", () => pageLoad("/player/appearance"));
}


/***/ }),

/***/ "./src/ui/wishlist.ts":
/*!****************************!*\
  !*** ./src/ui/wishlist.ts ***!
  \****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */   "loadWishlist": () => (/* binding */ loadWishlist)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");


function loadWishlist() {
    const marketplaceMenu = document.getElementById("marketplace-menu");
    if (!marketplaceMenu)
        return;
    if (!marketplaceMenu.querySelector("#wishlist-button")) {
        for (const a of marketplaceMenu.querySelectorAll("a")) {
            a.addEventListener("click", () => {
                pageLoad(a.href, undefined, undefined, undefined, true);
            });
        }
    }
    marketplaceMenu.querySelector("#wishlist-button")?.remove();
    const wishlistButtonTemplate = __webpack_require__(/*! ../templates/html/wishlist_button.html */ "./src/templates/html/wishlist_button.html");
    marketplaceMenu.insertAdjacentHTML("beforeend", wishlistButtonTemplate.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
    const wishlistButton = marketplaceMenu.querySelector("#wishlist-button");
    wishlistButton?.addEventListener("click", () => {
        insertWishlist(wishlistButton);
    });
}
function insertWishlist(button) {
    // Assistance
    const assistance = document.querySelector(".marketplace-assistance");
    if (assistance)
        assistance.textContent = _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.wishlist.assistance;
    // Menu
    document
        .querySelector("#marketplace-menu .active")
        ?.classList.remove("active");
    button.classList.add("active");
    // Filters
    const filters = document.getElementById("marketplace-filters");
    if (filters)
        filters.innerHTML = "";
    // Content
    const wishlistTemplate = __webpack_require__(/*! ../templates/html/wishlist_settings.html */ "./src/templates/html/wishlist_settings.html");
    const container = document.querySelector(".marketplace-container") ??
        document.getElementById("marketplace-active-auctions") ??
        document.getElementById("marketplace-itemsForSale");
    if (!container)
        return;
    const wishlistContext = {
        wishlist: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist,
    };
    container.innerHTML = wishlistTemplate.render({
        ...wishlistContext,
        translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate,
    });
    // Buttons
    for (const tr of container.querySelectorAll("tr")) {
        const wearableitemid = tr.dataset.wearableitemid;
        if (!wearableitemid)
            continue;
        // Reset status
        const reset = tr.querySelector(".reset-item-status");
        if (reset)
            reset.addEventListener("click", () => {
                resetStatus(wearableitemid);
                insertWishlist(button);
            });
        // Delete item from wishlist
        const deleteButton = tr.querySelector(".delete-wishlist-item");
        if (deleteButton)
            deleteButton.addEventListener("click", () => {
                deleteItem(wearableitemid);
                insertWishlist(button);
            });
        // Change price
        const editPrice = tr.querySelector(".edit-price");
        if (editPrice)
            editPrice.addEventListener("click", () => {
                void changePrice(wearableitemid).then(() => {
                    insertWishlist(button);
                });
            });
    }
}
function resetStatus(wearableitemid) {
    const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
    const index = wishlist.findIndex(item => item.wearableitemid === wearableitemid);
    const entry = wishlist[index];
    if (!entry)
        return;
    delete entry.error;
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = [
        ...wishlist.slice(undefined, index),
        entry,
        ...wishlist.slice(index + 1, undefined),
    ];
}
function deleteItem(wearableitemid) {
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist.filter(item => item.wearableitemid !== wearableitemid);
}
async function changePrice(wearableitemid) {
    const template = __webpack_require__(/*! ../templates/html/change_price_flavr.html */ "./src/templates/html/change_price_flavr.html");
    const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
    const index = wishlist.findIndex(item => item.wearableitemid === wearableitemid);
    const entry = wishlist[index];
    if (!entry)
        return;
    return new Promise(resolve => {
        $.flavr({
            content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }),
            dialog: "prompt",
            prompt: {
                value: entry.price.toString(),
            },
            buttons: {
                close: {
                    style: "close",
                    action: () => {
                        resolve();
                        return true;
                    },
                },
                save: {
                    action: () => save(wearableitemid, resolve),
                },
            },
            onBuild: $container => {
                $container.addClass("new-layout-popup");
                document
                    .querySelector(".flavr-prompt")
                    ?.addEventListener("keyup", ({ key }) => {
                    if (key !== "Enter")
                        return;
                    save(wearableitemid, resolve);
                });
            },
        });
    });
}
function save(wearableitemid, resolve) {
    const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
    const index = wishlist.findIndex(item => item.wearableitemid === wearableitemid);
    const entry = wishlist[index];
    if (!entry)
        return false;
    const price = Number(document.querySelector(".flavr-prompt")?.value.trim());
    if (!price || price <= 0) {
        $.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.change_price.invalid_price);
        return false;
    }
    entry.price = price;
    _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = [
        ...wishlist.slice(undefined, index),
        entry,
        ...wishlist.slice(index + 1, undefined),
    ];
    const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
    $.flavrNotif(template.render({
        ...entry,
        message: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.market.change_price.changed_price(entry.name, entry.price),
    }));
    resolve();
    return true;
}


/***/ })

/******/ 	});
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			// no module.id needed
/******/ 			// no module.loaded needed
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";
/*!*********************!*\
  !*** ./src/main.ts ***!
  \*********************/
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _appearance_dressing_experience__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./appearance/dressing_experience */ "./src/appearance/dressing_experience.ts");
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _migrate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./migrate */ "./src/migrate.ts");
/* harmony import */ var _takeover_brain__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./takeover/brain */ "./src/takeover/brain.ts");
/* harmony import */ var _ui_auctions__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ui/auctions */ "./src/ui/auctions.ts");
/* harmony import */ var _ui_carousel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ui/carousel */ "./src/ui/carousel.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _ui_home_content__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ui/home_content */ "./src/ui/home_content.ts");
/* harmony import */ var _ui_market__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ui/market */ "./src/ui/market.ts");
/* harmony import */ var _ui_menu__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./ui/menu */ "./src/ui/menu.ts");
/* harmony import */ var _ui_pet__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ui/pet */ "./src/ui/pet.ts");
/* harmony import */ var _ui_profile__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./ui/profile */ "./src/ui/profile.ts");
/* harmony import */ var _ui_sell__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ui/sell */ "./src/ui/sell.ts");
/* harmony import */ var _ui_settings__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./ui/settings */ "./src/ui/settings.ts");
/* harmony import */ var _ui_top_bar__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ui/top_bar */ "./src/ui/top_bar.ts");
/* harmony import */ var _ui_wishlist__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./ui/wishlist */ "./src/ui/wishlist.ts");
















// loadJS("https://unpkg.com/hogan.js/dist/template-3.0.2.min.js", true);
function load() {
    loadUI();
    (0,_takeover_brain__WEBPACK_IMPORTED_MODULE_3__.loadTakeover)();
}
function loadUI() {
    (0,_ui_menu__WEBPACK_IMPORTED_MODULE_9__.loadMenu)();
    (0,_ui_carousel__WEBPACK_IMPORTED_MODULE_5__.loadCarousel)();
    (0,_ui_home_content__WEBPACK_IMPORTED_MODULE_7__.loadHomeContent)();
    (0,_ui_favourites__WEBPACK_IMPORTED_MODULE_6__.loadFavourites)();
    (0,_ui_profile__WEBPACK_IMPORTED_MODULE_11__.loadProfile)();
    (0,_ui_pet__WEBPACK_IMPORTED_MODULE_10__.loadPet)();
    (0,_ui_market__WEBPACK_IMPORTED_MODULE_8__.loadMarket)();
    (0,_ui_wishlist__WEBPACK_IMPORTED_MODULE_15__.loadWishlist)();
    (0,_ui_top_bar__WEBPACK_IMPORTED_MODULE_14__.loadTopBar)();
    (0,_ui_auctions__WEBPACK_IMPORTED_MODULE_4__.loadAuctions)();
    (0,_ui_sell__WEBPACK_IMPORTED_MODULE_12__.loadSell)();
    (0,_appearance_dressing_experience__WEBPACK_IMPORTED_MODULE_0__.loadDressingExperience)();
    if (document.readyState === "complete")
        void loadIndexedDb();
    else
        window.addEventListener("load", () => loadIndexedDb());
}
function loadIndexedDb() {
    void (0,_ui_settings__WEBPACK_IMPORTED_MODULE_13__.loadSettings)();
}
new MutationObserver(load).observe(document.getElementById("container"), {
    childList: true,
});
(0,_migrate__WEBPACK_IMPORTED_MODULE_2__.migrate)();
loadUI();
console.log(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.home.script_loaded);
(0,_takeover_brain__WEBPACK_IMPORTED_MODULE_3__.loadTakeover)();

})();

/******/ })()
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkYXJ5YS1lbmhhbmNlbWVudHMudXNlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELG1CQUFtQjtBQUN6RTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsb0JBQW9CO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9CQUFvQjtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixrQkFBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLFlBQVk7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQSxnQ0FBZ0MsWUFBWTtBQUM1QztBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStTOzs7Ozs7Ozs7OztBQ2xiL1M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0IsaUJBQWlCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1Isd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyxRQUFRO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxxQkFBcUIsZ0JBQWdCOztBQUVyQyxxQkFBcUIsa0JBQWtCLGVBQWUsV0FBVzs7QUFFakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FB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QUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTnlFO0FBQzdCO0FBQ1Q7QUFDWTtBQUNIO0FBQ0E7QUFDSTtBQUNHO0FBQ1g7QUFDSjtBQUNGO0FBQ1E7QUFDTjtBQUNRO0FBQ0g7QUFDRztBQUU1Qyx5RUFBeUU7QUFFekUsU0FBUyxJQUFJO0lBQ1gsTUFBTSxFQUFFO0lBQ1IsNkRBQVksRUFBRTtBQUNoQixDQUFDO0FBRUQsU0FBUyxNQUFNO0lBQ2Isa0RBQVEsRUFBRTtJQUNWLDBEQUFZLEVBQUU7SUFDZCxpRUFBZSxFQUFFO0lBQ2pCLDhEQUFjLEVBQUU7SUFDaEIseURBQVcsRUFBRTtJQUNiLGlEQUFPLEVBQUU7SUFDVCxzREFBVSxFQUFFO0lBQ1osMkRBQVksRUFBRTtJQUNkLHdEQUFVLEVBQUU7SUFDWiwwREFBWSxFQUFFO0lBQ2QsbURBQVEsRUFBRTtJQUNWLHVGQUFzQixFQUFFO0lBRXhCLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVO1FBQUUsS0FBSyxhQUFhLEVBQUU7O1FBQ3ZELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDN0QsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixLQUFLLDJEQUFZLEVBQUU7QUFDckIsQ0FBQztBQUVELElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEVBQUU7SUFDN0UsU0FBUyxFQUFFLElBQUk7Q0FDaEIsQ0FBQztBQUVGLGlEQUFPLEVBQUU7QUFFVCxNQUFNLEVBQUU7QUFDUixPQUFPLENBQUMsR0FBRyxDQUFDLHlFQUE0QixDQUFDO0FBQ3pDLDZEQUFZLEVBQUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL25vZGVfbW9kdWxlcy8ucG5wbS9ibG9iLXV0aWxAMi4wLjIvbm9kZV9tb2R1bGVzL2Jsb2ItdXRpbC9kaXN0L2Jsb2ItdXRpbC5lcy5qcyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL25vZGVfbW9kdWxlcy8ucG5wbS9ob2dhbi5qc0AzLjAuMi9ub2RlX21vZHVsZXMvaG9nYW4uanMvbGliL2NvbXBpbGVyLmpzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hvZ2FuLmpzQDMuMC4yL25vZGVfbW9kdWxlcy9ob2dhbi5qcy9saWIvaG9nYW4uanMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9ub2RlX21vZHVsZXMvLnBucG0vaG9nYW4uanNAMy4wLjIvbm9kZV9tb2R1bGVzL2hvZ2FuLmpzL2xpYi90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW0uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW1zX2NhdGVnb3J5Lmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19ncm91cC5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2F1dG9fYnV5X2J1dHRvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2F1dG9fYnV5X2ZsYXZyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXV0b19leHBsb3JlX2J1dHRvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2Nhcm91c2VsX25ld3MuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9jaGFuZ2VfcHJpY2VfZmxhdnIuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9jcmVhdGVkX291dGZpdF9mbGF2ci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2Zhdm91cml0ZV9vdXRmaXRfZmxhdnIuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9mYXZvdXJpdGVzX2FjdGlvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2hlYWRlcl90YWtlb3Zlci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2hvbWVfY29udGVudF9zbWFsbC5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL21haW5fbWVudS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL21hcmtldF9oaXN0b3J5Lmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvb3V0Zml0X3RodW1icy5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3Byb2ZpbGVfY29udGFjdF9hY3Rpb24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9zZXR0aW5ncy5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X2J1dHRvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X3NldHRpbmdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9hamF4X3NlYXJjaC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2J1eS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2NhcHR1cmVfZW5kLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvY2hhbmdlX3JlZ2lvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2V4cGxvcmF0aW9uX3Jlc3VsdHMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBpL3Jlc3VsdC5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2UvYXBwZWFyYW5jZV91aS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL2RyZXNzaW5nX2V4cGVyaWVuY2UudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9mYWtlX2Zhdm91cml0ZXMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9mYXZvdXJpdGVzX2FjdGlvbnMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS93YXJkcm9iZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9iZWVtb292X2Fubm95YW5jZXMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY2Fyb3VzZWwvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9lbGRhcnlhX2VuaGFuY2VtZW50cy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF90YWtlb3Zlci50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jb25zb2xlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Rvd25sb2FkLWNhbnZhcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9kdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9lbGRhcnlhL2pxdWVyeS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pMThuL2VuLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2kxOG4vZnIudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaTE4bi90cmFuc2xhdGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaW5kZXhlZF9kYi9kYXRhYmFzZXMuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pbmRleGVkX2RiL2ZpZWxkcy5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2luZGV4ZWRfZGIvaW5kZXhlZF9kYi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pbmRleGVkX2RiL3RhYmxlcy5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9ib2R5X2xvY2F0aW9uLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvY2F0ZWdvcnkuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9ndWFyZC5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL3Jhcml0eS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL3R5cGUuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZV9oYW5kbGVycy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taWdyYXRlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9lbWlsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvZmxhcHB5LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9oYXRjaGxpbmdzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9wZWdnbGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvb3V0Zml0LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2UuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9icmFpbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL2J1eV9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9kYWlseV9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9leHBsb3JhdGlvbl9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9taW5pZ2FtZV9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy93YWl0X2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGljay50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9leHBsb3JhdGlvbl9zdGF0dXMuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9hdWN0aW9ucy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9jYXJvdXNlbC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9mYXZvdXJpdGVzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2hvbWVfY29udGVudC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9tYXJrZXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvbWVudS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9wZXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvcHJvZmlsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9zZWxsLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3NldHRpbmdzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3RvcF9iYXIudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvd2lzaGxpc3QudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IGluY2x1ZGluZyB0aGVzZSBpbiBibG9iLXV0aWwudHMgY2F1c2VzIHR5cGVkb2MgdG8gZ2VuZXJhdGUgZG9jcyBmb3IgdGhlbSxcbi8vIGV2ZW4gd2l0aCAtLWV4Y2x1ZGVQcml2YXRlIMKvXFxfKOODhClfL8KvXG4vKiogQHByaXZhdGUgKi9cbmZ1bmN0aW9uIGxvYWRJbWFnZShzcmMsIGNyb3NzT3JpZ2luKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpZiAoY3Jvc3NPcmlnaW4pIHtcbiAgICAgICAgICAgIGltZy5jcm9zc09yaWdpbiA9IGNyb3NzT3JpZ2luO1xuICAgICAgICB9XG4gICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXNvbHZlKGltZyk7XG4gICAgICAgIH07XG4gICAgICAgIGltZy5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICBpbWcuc3JjID0gc3JjO1xuICAgIH0pO1xufVxuLyoqIEBwcml2YXRlICovXG5mdW5jdGlvbiBpbWdUb0NhbnZhcyhpbWcpIHtcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgY2FudmFzLndpZHRoID0gaW1nLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xuICAgIC8vIGNvcHkgdGhlIGltYWdlIGNvbnRlbnRzIHRvIHRoZSBjYW52YXNcbiAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0LCAwLCAwLCBpbWcud2lkdGgsIGltZy5oZWlnaHQpO1xuICAgIHJldHVybiBjYW52YXM7XG59XG5cbi8qIGdsb2JhbCBQcm9taXNlLCBJbWFnZSwgQmxvYiwgRmlsZVJlYWRlciwgYXRvYiwgYnRvYSxcbiAgIEJsb2JCdWlsZGVyLCBNU0Jsb2JCdWlsZGVyLCBNb3pCbG9iQnVpbGRlciwgV2ViS2l0QmxvYkJ1aWxkZXIsIHdlYmtpdFVSTCAqL1xuLyoqXG4gKiBTaGltIGZvclxuICogW2BuZXcgQmxvYigpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Jsb2IuQmxvYilcbiAqIHRvIHN1cHBvcnRcbiAqIFtvbGRlciBicm93c2VycyB0aGF0IHVzZSB0aGUgZGVwcmVjYXRlZCBgQmxvYkJ1aWxkZXJgIEFQSV0oaHR0cDovL2Nhbml1c2UuY29tL2Jsb2IpLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBteUJsb2IgPSBibG9iVXRpbC5jcmVhdGVCbG9iKFsnaGVsbG8gd29ybGQnXSwge3R5cGU6ICd0ZXh0L3BsYWluJ30pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHBhcnRzIC0gY29udGVudCBvZiB0aGUgQmxvYlxuICogQHBhcmFtIHByb3BlcnRpZXMgLSB1c3VhbGx5IGB7dHlwZTogbXlDb250ZW50VHlwZX1gLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICB5b3UgY2FuIGFsc28gcGFzcyBhIHN0cmluZyBmb3IgdGhlIGNvbnRlbnQgdHlwZVxuICogQHJldHVybnMgQmxvYlxuICovXG5mdW5jdGlvbiBjcmVhdGVCbG9iKHBhcnRzLCBwcm9wZXJ0aWVzKSB7XG4gICAgcGFydHMgPSBwYXJ0cyB8fCBbXTtcbiAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICBpZiAodHlwZW9mIHByb3BlcnRpZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHByb3BlcnRpZXMgPSB7IHR5cGU6IHByb3BlcnRpZXMgfTsgLy8gaW5mZXIgY29udGVudCB0eXBlXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYihwYXJ0cywgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChlLm5hbWUgIT09ICdUeXBlRXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBCdWlsZGVyID0gdHlwZW9mIEJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBCbG9iQnVpbGRlciA6IHR5cGVvZiBNU0Jsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBNU0Jsb2JCdWlsZGVyIDogdHlwZW9mIE1vekJsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBNb3pCbG9iQnVpbGRlciA6IFdlYktpdEJsb2JCdWlsZGVyO1xuICAgICAgICB2YXIgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhcnRzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVpbGRlci5nZXRCbG9iKHByb3BlcnRpZXMudHlwZSk7XG4gICAgfVxufVxuLyoqXG4gKiBTaGltIGZvclxuICogW2BVUkwuY3JlYXRlT2JqZWN0VVJMKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJMLmNyZWF0ZU9iamVjdFVSTClcbiAqIHRvIHN1cHBvcnQgYnJvd3NlcnMgdGhhdCBvbmx5IGhhdmUgdGhlIHByZWZpeGVkXG4gKiBgd2Via2l0VVJMYCAoZS5nLiBBbmRyb2lkIDw0LjQpLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBteVVybCA9IGJsb2JVdGlsLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBibG9iXG4gKiBAcmV0dXJucyB1cmxcbiAqL1xuZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMKGJsb2IpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBVUkwgIT09ICd1bmRlZmluZWQnID8gVVJMIDogd2Via2l0VVJMKS5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG59XG4vKipcbiAqIFNoaW0gZm9yXG4gKiBbYFVSTC5yZXZva2VPYmplY3RVUkwoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwucmV2b2tlT2JqZWN0VVJMKVxuICogdG8gc3VwcG9ydCBicm93c2VycyB0aGF0IG9ubHkgaGF2ZSB0aGUgcHJlZml4ZWRcbiAqIGB3ZWJraXRVUkxgIChlLmcuIEFuZHJvaWQgPDQuNCkuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwucmV2b2tlT2JqZWN0VVJMKG15VXJsKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB1cmxcbiAqL1xuZnVuY3Rpb24gcmV2b2tlT2JqZWN0VVJMKHVybCkge1xuICAgIHJldHVybiAodHlwZW9mIFVSTCAhPT0gJ3VuZGVmaW5lZCcgPyBVUkwgOiB3ZWJraXRVUkwpLnJldm9rZU9iamVjdFVSTCh1cmwpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYEJsb2JgIHRvIGEgYmluYXJ5IHN0cmluZy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5ibG9iVG9CaW5hcnlTdHJpbmcoYmxvYikudGhlbihmdW5jdGlvbiAoYmluYXJ5U3RyaW5nKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJsb2JcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBiaW5hcnkgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGJsb2JUb0JpbmFyeVN0cmluZyhibG9iKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHZhciBoYXNCaW5hcnlTdHJpbmcgPSB0eXBlb2YgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIucmVzdWx0IHx8ICcnO1xuICAgICAgICAgICAgaWYgKGhhc0JpbmFyeVN0cmluZykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKGFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmcocmVzdWx0KSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICBpZiAoaGFzQmluYXJ5U3RyaW5nKSB7XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcgdG8gYSBgQmxvYmAuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGJsb2IgPSBibG9iVXRpbC5iYXNlNjRTdHJpbmdUb0Jsb2IoYmFzZTY0U3RyaW5nKTtcbiAqIGBgYFxuICogQHBhcmFtIGJhc2U2NCAtIGJhc2U2NC1lbmNvZGVkIHN0cmluZ1xuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEJsb2JcbiAqL1xuZnVuY3Rpb24gYmFzZTY0U3RyaW5nVG9CbG9iKGJhc2U2NCwgdHlwZSkge1xuICAgIHZhciBwYXJ0cyA9IFtiaW5hcnlTdHJpbmdUb0FycmF5QnVmZmVyKGF0b2IoYmFzZTY0KSldO1xuICAgIHJldHVybiB0eXBlID8gY3JlYXRlQmxvYihwYXJ0cywgeyB0eXBlOiB0eXBlIH0pIDogY3JlYXRlQmxvYihwYXJ0cyk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBiaW5hcnkgc3RyaW5nIHRvIGEgYEJsb2JgLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBibG9iID0gYmxvYlV0aWwuYmluYXJ5U3RyaW5nVG9CbG9iKGJpbmFyeVN0cmluZyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmluYXJ5IC0gYmluYXJ5IHN0cmluZ1xuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEJsb2JcbiAqL1xuZnVuY3Rpb24gYmluYXJ5U3RyaW5nVG9CbG9iKGJpbmFyeSwgdHlwZSkge1xuICAgIHJldHVybiBiYXNlNjRTdHJpbmdUb0Jsb2IoYnRvYShiaW5hcnkpLCB0eXBlKTtcbn1cbi8qKlxuICogQ29udmVydCBhIGBCbG9iYCB0byBhIGJpbmFyeSBzdHJpbmcuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuYmxvYlRvQmFzZTY0U3RyaW5nKGJsb2IpLnRoZW4oZnVuY3Rpb24gKGJhc2U2NFN0cmluZykge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBibG9iXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYmluYXJ5IHN0cmluZ1xuICovXG5mdW5jdGlvbiBibG9iVG9CYXNlNjRTdHJpbmcoYmxvYikge1xuICAgIHJldHVybiBibG9iVG9CaW5hcnlTdHJpbmcoYmxvYikudGhlbihidG9hKTtcbn1cbi8qKlxuICogQ29udmVydCBhIGRhdGEgVVJMIHN0cmluZ1xuICogKGUuZy4gYCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHLi4uJ2ApXG4gKiB0byBhIGBCbG9iYC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYmxvYiA9IGJsb2JVdGlsLmRhdGFVUkxUb0Jsb2IoZGF0YVVSTCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZGF0YVVSTCAtIGRhdGFVUkwtZW5jb2RlZCBzdHJpbmdcbiAqIEByZXR1cm5zIEJsb2JcbiAqL1xuZnVuY3Rpb24gZGF0YVVSTFRvQmxvYihkYXRhVVJMKSB7XG4gICAgdmFyIHR5cGUgPSBkYXRhVVJMLm1hdGNoKC9kYXRhOihbXjtdKykvKVsxXTtcbiAgICB2YXIgYmFzZTY0ID0gZGF0YVVSTC5yZXBsYWNlKC9eW14sXSssLywgJycpO1xuICAgIHZhciBidWZmID0gYmluYXJ5U3RyaW5nVG9BcnJheUJ1ZmZlcihhdG9iKGJhc2U2NCkpO1xuICAgIHJldHVybiBjcmVhdGVCbG9iKFtidWZmXSwgeyB0eXBlOiB0eXBlIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYEJsb2JgIHRvIGEgZGF0YSBVUkwgc3RyaW5nXG4gKiAoZS5nLiBgJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0cuLi4nYCkuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGRhdGFVUkwgPSBibG9iVXRpbC5ibG9iVG9EYXRhVVJMKGJsb2IpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJsb2JcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBkYXRhIFVSTCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYmxvYlRvRGF0YVVSTChibG9iKSB7XG4gICAgcmV0dXJuIGJsb2JUb0Jhc2U2NFN0cmluZyhibG9iKS50aGVuKGZ1bmN0aW9uIChiYXNlNjRTdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuICdkYXRhOicgKyBibG9iLnR5cGUgKyAnO2Jhc2U2NCwnICsgYmFzZTY0U3RyaW5nO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGFuIGltYWdlJ3MgYHNyY2AgVVJMIHRvIGEgZGF0YSBVUkwgYnkgbG9hZGluZyB0aGUgaW1hZ2UgYW5kIHBhaW50aW5nXG4gKiBpdCB0byBhIGBjYW52YXNgLlxuICpcbiAqIE5vdGU6IHRoaXMgd2lsbCBjb2VyY2UgdGhlIGltYWdlIHRvIHRoZSBkZXNpcmVkIGNvbnRlbnQgdHlwZSwgYW5kIGl0XG4gKiB3aWxsIG9ubHkgcGFpbnQgdGhlIGZpcnN0IGZyYW1lIG9mIGFuIGFuaW1hdGVkIEdJRi5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuaW1nU3JjVG9EYXRhVVJMKCdodHRwOi8vbXlzaXRlLmNvbS9pbWcucG5nJykudGhlbihmdW5jdGlvbiAoZGF0YVVSTCkge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5pbWdTcmNUb0RhdGFVUkwoJ2h0dHA6Ly9zb21lLW90aGVyLXNpdGUuY29tL2ltZy5qcGcnLCAnaW1hZ2UvanBlZycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fub255bW91cycsIDEuMCkudGhlbihmdW5jdGlvbiAoZGF0YVVSTCkge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzcmMgLSBpbWFnZSBzcmNcbiAqIEBwYXJhbSB0eXBlIC0gdGhlIGNvbnRlbnQgdHlwZSAob3B0aW9uYWwsIGRlZmF1bHRzIHRvICdpbWFnZS9wbmcnKVxuICogQHBhcmFtIGNyb3NzT3JpZ2luIC0gZm9yIENPUlMtZW5hYmxlZCBpbWFnZXMsIHNldCB0aGlzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fub255bW91cycgdG8gYXZvaWQgXCJ0YWludGVkIGNhbnZhc1wiIGVycm9yc1xuICogQHBhcmFtIHF1YWxpdHkgLSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgaXMgJ2ltYWdlL2pwZWcnIG9yICdpbWFnZS93ZWJwJ1xuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRhdGEgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBpbWdTcmNUb0RhdGFVUkwoc3JjLCB0eXBlLCBjcm9zc09yaWdpbiwgcXVhbGl0eSkge1xuICAgIHR5cGUgPSB0eXBlIHx8ICdpbWFnZS9wbmcnO1xuICAgIHJldHVybiBsb2FkSW1hZ2Uoc3JjLCBjcm9zc09yaWdpbikudGhlbihpbWdUb0NhbnZhcykudGhlbihmdW5jdGlvbiAoY2FudmFzKSB7XG4gICAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKHR5cGUsIHF1YWxpdHkpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYGNhbnZhc2AgdG8gYSBgQmxvYmAuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmNhbnZhc1RvQmxvYihjYW52YXMpLnRoZW4oZnVuY3Rpb24gKGJsb2IpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBNb3N0IGJyb3dzZXJzIHN1cHBvcnQgY29udmVydGluZyBhIGNhbnZhcyB0byBib3RoIGAnaW1hZ2UvcG5nJ2AgYW5kIGAnaW1hZ2UvanBlZydgLiBZb3UgbWF5XG4gKiBhbHNvIHdhbnQgdG8gdHJ5IGAnaW1hZ2Uvd2VicCdgLCB3aGljaCB3aWxsIHdvcmsgaW4gc29tZSBicm93c2VycyBsaWtlIENocm9tZSAoYW5kIGluIG90aGVyIGJyb3dzZXJzLCB3aWxsIGp1c3QgZmFsbCBiYWNrIHRvIGAnaW1hZ2UvcG5nJ2ApOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5jYW52YXNUb0Jsb2IoY2FudmFzLCAnaW1hZ2Uvd2VicCcpLnRoZW4oZnVuY3Rpb24gKGJsb2IpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY2FudmFzIC0gSFRNTENhbnZhc0VsZW1lbnRcbiAqIEBwYXJhbSB0eXBlIC0gdGhlIGNvbnRlbnQgdHlwZSAob3B0aW9uYWwsIGRlZmF1bHRzIHRvICdpbWFnZS9wbmcnKVxuICogQHBhcmFtIHF1YWxpdHkgLSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgaXMgJ2ltYWdlL2pwZWcnIG9yICdpbWFnZS93ZWJwJ1xuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGBCbG9iYFxuICovXG5mdW5jdGlvbiBjYW52YXNUb0Jsb2IoY2FudmFzLCB0eXBlLCBxdWFsaXR5KSB7XG4gICAgaWYgKHR5cGVvZiBjYW52YXMudG9CbG9iID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgY2FudmFzLnRvQmxvYihyZXNvbHZlLCB0eXBlLCBxdWFsaXR5KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YVVSTFRvQmxvYihjYW52YXMudG9EYXRhVVJMKHR5cGUsIHF1YWxpdHkpKSk7XG59XG4vKipcbiAqIENvbnZlcnQgYW4gaW1hZ2UncyBgc3JjYCBVUkwgdG8gYSBgQmxvYmAgYnkgbG9hZGluZyB0aGUgaW1hZ2UgYW5kIHBhaW50aW5nXG4gKiBpdCB0byBhIGBjYW52YXNgLlxuICpcbiAqIE5vdGU6IHRoaXMgd2lsbCBjb2VyY2UgdGhlIGltYWdlIHRvIHRoZSBkZXNpcmVkIGNvbnRlbnQgdHlwZSwgYW5kIGl0XG4gKiB3aWxsIG9ubHkgcGFpbnQgdGhlIGZpcnN0IGZyYW1lIG9mIGFuIGFuaW1hdGVkIEdJRi5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuaW1nU3JjVG9CbG9iKCdodHRwOi8vbXlzaXRlLmNvbS9pbWcucG5nJykudGhlbihmdW5jdGlvbiAoYmxvYikge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5pbWdTcmNUb0Jsb2IoJ2h0dHA6Ly9zb21lLW90aGVyLXNpdGUuY29tL2ltZy5qcGcnLCAnaW1hZ2UvanBlZycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fub255bW91cycsIDEuMCkudGhlbihmdW5jdGlvbiAoYmxvYikge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzcmMgLSBpbWFnZSBzcmNcbiAqIEBwYXJhbSB0eXBlIC0gdGhlIGNvbnRlbnQgdHlwZSAob3B0aW9uYWwsIGRlZmF1bHRzIHRvICdpbWFnZS9wbmcnKVxuICogQHBhcmFtIGNyb3NzT3JpZ2luIC0gZm9yIENPUlMtZW5hYmxlZCBpbWFnZXMsIHNldCB0aGlzIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Fub255bW91cycgdG8gYXZvaWQgXCJ0YWludGVkIGNhbnZhc1wiIGVycm9yc1xuICogQHBhcmFtIHF1YWxpdHkgLSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgcmVxdWVzdGVkIHR5cGUgaXMgJ2ltYWdlL2pwZWcnIG9yICdpbWFnZS93ZWJwJ1xuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGBCbG9iYFxuICovXG5mdW5jdGlvbiBpbWdTcmNUb0Jsb2Ioc3JjLCB0eXBlLCBjcm9zc09yaWdpbiwgcXVhbGl0eSkge1xuICAgIHR5cGUgPSB0eXBlIHx8ICdpbWFnZS9wbmcnO1xuICAgIHJldHVybiBsb2FkSW1hZ2Uoc3JjLCBjcm9zc09yaWdpbikudGhlbihpbWdUb0NhbnZhcykudGhlbihmdW5jdGlvbiAoY2FudmFzKSB7XG4gICAgICAgIHJldHVybiBjYW52YXNUb0Jsb2IoY2FudmFzLCB0eXBlLCBxdWFsaXR5KTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ29udmVydCBhbiBgQXJyYXlCdWZmZXJgIHRvIGEgYEJsb2JgLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBibG9iID0gYmxvYlV0aWwuYXJyYXlCdWZmZXJUb0Jsb2IoYXJyYXlCdWZmLCAnYXVkaW8vbXBlZycpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJ1ZmZlclxuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbClcbiAqIEByZXR1cm5zIEJsb2JcbiAqL1xuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0Jsb2IoYnVmZmVyLCB0eXBlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZlcl0sIHR5cGUpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYEJsb2JgIHRvIGFuIGBBcnJheUJ1ZmZlcmAuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuYmxvYlRvQXJyYXlCdWZmZXIoYmxvYikudGhlbihmdW5jdGlvbiAoYXJyYXlCdWZmKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJsb2JcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBgQXJyYXlCdWZmZXJgXG4gKi9cbmZ1bmN0aW9uIGJsb2JUb0FycmF5QnVmZmVyKGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIucmVzdWx0IHx8IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ29udmVydCBhbiBgQXJyYXlCdWZmZXJgIHRvIGEgYmluYXJ5IHN0cmluZy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbXlTdHJpbmcgPSBibG9iVXRpbC5hcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKGFycmF5QnVmZilcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBidWZmZXIgLSBhcnJheSBidWZmZXJcbiAqIEByZXR1cm5zIGJpbmFyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyhidWZmZXIpIHtcbiAgICB2YXIgYmluYXJ5ID0gJyc7XG4gICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICB2YXIgbGVuZ3RoID0gYnl0ZXMuYnl0ZUxlbmd0aDtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHtcbiAgICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gYmluYXJ5O1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYmluYXJ5IHN0cmluZyB0byBhbiBgQXJyYXlCdWZmZXJgLlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbXlCdWZmZXIgPSBibG9iVXRpbC5iaW5hcnlTdHJpbmdUb0FycmF5QnVmZmVyKGJpbmFyeVN0cmluZylcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBiaW5hcnkgLSBiaW5hcnkgc3RyaW5nXG4gKiBAcmV0dXJucyBhcnJheSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gYmluYXJ5U3RyaW5nVG9BcnJheUJ1ZmZlcihiaW5hcnkpIHtcbiAgICB2YXIgbGVuZ3RoID0gYmluYXJ5Lmxlbmd0aDtcbiAgICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7XG4gICAgICAgIGFycltpXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgeyBjcmVhdGVCbG9iLCBjcmVhdGVPYmplY3RVUkwsIHJldm9rZU9iamVjdFVSTCwgYmxvYlRvQmluYXJ5U3RyaW5nLCBiYXNlNjRTdHJpbmdUb0Jsb2IsIGJpbmFyeVN0cmluZ1RvQmxvYiwgYmxvYlRvQmFzZTY0U3RyaW5nLCBkYXRhVVJMVG9CbG9iLCBibG9iVG9EYXRhVVJMLCBpbWdTcmNUb0RhdGFVUkwsIGNhbnZhc1RvQmxvYiwgaW1nU3JjVG9CbG9iLCBhcnJheUJ1ZmZlclRvQmxvYiwgYmxvYlRvQXJyYXlCdWZmZXIsIGFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmcsIGJpbmFyeVN0cmluZ1RvQXJyYXlCdWZmZXIgfTtcbiIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMTEgVHdpdHRlciwgSW5jLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuKGZ1bmN0aW9uIChIb2dhbikge1xuICAvLyBTZXR1cCByZWdleCAgYXNzaWdubWVudHNcbiAgLy8gcmVtb3ZlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIE11c3RhY2hlIHNwZWNcbiAgdmFyIHJJc1doaXRlc3BhY2UgPSAvXFxTLyxcbiAgICAgIHJRdW90ID0gL1xcXCIvZyxcbiAgICAgIHJOZXdsaW5lID0gIC9cXG4vZyxcbiAgICAgIHJDciA9IC9cXHIvZyxcbiAgICAgIHJTbGFzaCA9IC9cXFxcL2csXG4gICAgICByTGluZVNlcCA9IC9cXHUyMDI4LyxcbiAgICAgIHJQYXJhZ3JhcGhTZXAgPSAvXFx1MjAyOS87XG5cbiAgSG9nYW4udGFncyA9IHtcbiAgICAnIyc6IDEsICdeJzogMiwgJzwnOiAzLCAnJCc6IDQsXG4gICAgJy8nOiA1LCAnISc6IDYsICc+JzogNywgJz0nOiA4LCAnX3YnOiA5LFxuICAgICd7JzogMTAsICcmJzogMTEsICdfdCc6IDEyXG4gIH07XG5cbiAgSG9nYW4uc2NhbiA9IGZ1bmN0aW9uIHNjYW4odGV4dCwgZGVsaW1pdGVycykge1xuICAgIHZhciBsZW4gPSB0ZXh0Lmxlbmd0aCxcbiAgICAgICAgSU5fVEVYVCA9IDAsXG4gICAgICAgIElOX1RBR19UWVBFID0gMSxcbiAgICAgICAgSU5fVEFHID0gMixcbiAgICAgICAgc3RhdGUgPSBJTl9URVhULFxuICAgICAgICB0YWdUeXBlID0gbnVsbCxcbiAgICAgICAgdGFnID0gbnVsbCxcbiAgICAgICAgYnVmID0gJycsXG4gICAgICAgIHRva2VucyA9IFtdLFxuICAgICAgICBzZWVuVGFnID0gZmFsc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICBsaW5lU3RhcnQgPSAwLFxuICAgICAgICBvdGFnID0gJ3t7JyxcbiAgICAgICAgY3RhZyA9ICd9fSc7XG5cbiAgICBmdW5jdGlvbiBhZGRCdWYoKSB7XG4gICAgICBpZiAoYnVmLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdG9rZW5zLnB1c2goe3RhZzogJ190JywgdGV4dDogbmV3IFN0cmluZyhidWYpfSk7XG4gICAgICAgIGJ1ZiA9ICcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVJc1doaXRlc3BhY2UoKSB7XG4gICAgICB2YXIgaXNBbGxXaGl0ZXNwYWNlID0gdHJ1ZTtcbiAgICAgIGZvciAodmFyIGogPSBsaW5lU3RhcnQ7IGogPCB0b2tlbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaXNBbGxXaGl0ZXNwYWNlID1cbiAgICAgICAgICAoSG9nYW4udGFnc1t0b2tlbnNbal0udGFnXSA8IEhvZ2FuLnRhZ3NbJ192J10pIHx8XG4gICAgICAgICAgKHRva2Vuc1tqXS50YWcgPT0gJ190JyAmJiB0b2tlbnNbal0udGV4dC5tYXRjaChySXNXaGl0ZXNwYWNlKSA9PT0gbnVsbCk7XG4gICAgICAgIGlmICghaXNBbGxXaGl0ZXNwYWNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpc0FsbFdoaXRlc3BhY2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsdGVyTGluZShoYXZlU2VlblRhZywgbm9OZXdMaW5lKSB7XG4gICAgICBhZGRCdWYoKTtcblxuICAgICAgaWYgKGhhdmVTZWVuVGFnICYmIGxpbmVJc1doaXRlc3BhY2UoKSkge1xuICAgICAgICBmb3IgKHZhciBqID0gbGluZVN0YXJ0LCBuZXh0OyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKHRva2Vuc1tqXS50ZXh0KSB7XG4gICAgICAgICAgICBpZiAoKG5leHQgPSB0b2tlbnNbaisxXSkgJiYgbmV4dC50YWcgPT0gJz4nKSB7XG4gICAgICAgICAgICAgIC8vIHNldCBpbmRlbnQgdG8gdG9rZW4gdmFsdWVcbiAgICAgICAgICAgICAgbmV4dC5pbmRlbnQgPSB0b2tlbnNbal0udGV4dC50b1N0cmluZygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b2tlbnMuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghbm9OZXdMaW5lKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHt0YWc6J1xcbid9KTtcbiAgICAgIH1cblxuICAgICAgc2VlblRhZyA9IGZhbHNlO1xuICAgICAgbGluZVN0YXJ0ID0gdG9rZW5zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGFuZ2VEZWxpbWl0ZXJzKHRleHQsIGluZGV4KSB7XG4gICAgICB2YXIgY2xvc2UgPSAnPScgKyBjdGFnLFxuICAgICAgICAgIGNsb3NlSW5kZXggPSB0ZXh0LmluZGV4T2YoY2xvc2UsIGluZGV4KSxcbiAgICAgICAgICBkZWxpbWl0ZXJzID0gdHJpbShcbiAgICAgICAgICAgIHRleHQuc3Vic3RyaW5nKHRleHQuaW5kZXhPZignPScsIGluZGV4KSArIDEsIGNsb3NlSW5kZXgpXG4gICAgICAgICAgKS5zcGxpdCgnICcpO1xuXG4gICAgICBvdGFnID0gZGVsaW1pdGVyc1swXTtcbiAgICAgIGN0YWcgPSBkZWxpbWl0ZXJzW2RlbGltaXRlcnMubGVuZ3RoIC0gMV07XG5cbiAgICAgIHJldHVybiBjbG9zZUluZGV4ICsgY2xvc2UubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICBpZiAoZGVsaW1pdGVycykge1xuICAgICAgZGVsaW1pdGVycyA9IGRlbGltaXRlcnMuc3BsaXQoJyAnKTtcbiAgICAgIG90YWcgPSBkZWxpbWl0ZXJzWzBdO1xuICAgICAgY3RhZyA9IGRlbGltaXRlcnNbMV07XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoc3RhdGUgPT0gSU5fVEVYVCkge1xuICAgICAgICBpZiAodGFnQ2hhbmdlKG90YWcsIHRleHQsIGkpKSB7XG4gICAgICAgICAgLS1pO1xuICAgICAgICAgIGFkZEJ1ZigpO1xuICAgICAgICAgIHN0YXRlID0gSU5fVEFHX1RZUEU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09ICdcXG4nKSB7XG4gICAgICAgICAgICBmaWx0ZXJMaW5lKHNlZW5UYWcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWYgKz0gdGV4dC5jaGFyQXQoaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09IElOX1RBR19UWVBFKSB7XG4gICAgICAgIGkgKz0gb3RhZy5sZW5ndGggLSAxO1xuICAgICAgICB0YWcgPSBIb2dhbi50YWdzW3RleHQuY2hhckF0KGkgKyAxKV07XG4gICAgICAgIHRhZ1R5cGUgPSB0YWcgPyB0ZXh0LmNoYXJBdChpICsgMSkgOiAnX3YnO1xuICAgICAgICBpZiAodGFnVHlwZSA9PSAnPScpIHtcbiAgICAgICAgICBpID0gY2hhbmdlRGVsaW1pdGVycyh0ZXh0LCBpKTtcbiAgICAgICAgICBzdGF0ZSA9IElOX1RFWFQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRhZykge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdGF0ZSA9IElOX1RBRztcbiAgICAgICAgfVxuICAgICAgICBzZWVuVGFnID0gaTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YWdDaGFuZ2UoY3RhZywgdGV4dCwgaSkpIHtcbiAgICAgICAgICB0b2tlbnMucHVzaCh7dGFnOiB0YWdUeXBlLCBuOiB0cmltKGJ1ZiksIG90YWc6IG90YWcsIGN0YWc6IGN0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgIGk6ICh0YWdUeXBlID09ICcvJykgPyBzZWVuVGFnIC0gb3RhZy5sZW5ndGggOiBpICsgY3RhZy5sZW5ndGh9KTtcbiAgICAgICAgICBidWYgPSAnJztcbiAgICAgICAgICBpICs9IGN0YWcubGVuZ3RoIC0gMTtcbiAgICAgICAgICBzdGF0ZSA9IElOX1RFWFQ7XG4gICAgICAgICAgaWYgKHRhZ1R5cGUgPT0gJ3snKSB7XG4gICAgICAgICAgICBpZiAoY3RhZyA9PSAnfX0nKSB7XG4gICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNsZWFuVHJpcGxlU3RhY2hlKHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWYgKz0gdGV4dC5jaGFyQXQoaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWx0ZXJMaW5lKHNlZW5UYWcsIHRydWUpO1xuXG4gICAgcmV0dXJuIHRva2VucztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFuVHJpcGxlU3RhY2hlKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLm4uc3Vic3RyKHRva2VuLm4ubGVuZ3RoIC0gMSkgPT09ICd9Jykge1xuICAgICAgdG9rZW4ubiA9IHRva2VuLm4uc3Vic3RyaW5nKDAsIHRva2VuLm4ubGVuZ3RoIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdHJpbShzKSB7XG4gICAgaWYgKHMudHJpbSkge1xuICAgICAgcmV0dXJuIHMudHJpbSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRhZ0NoYW5nZSh0YWcsIHRleHQsIGluZGV4KSB7XG4gICAgaWYgKHRleHQuY2hhckF0KGluZGV4KSAhPSB0YWcuY2hhckF0KDApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDEsIGwgPSB0YWcubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAodGV4dC5jaGFyQXQoaW5kZXggKyBpKSAhPSB0YWcuY2hhckF0KGkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRoZSB0YWdzIGFsbG93ZWQgaW5zaWRlIHN1cGVyIHRlbXBsYXRlc1xuICB2YXIgYWxsb3dlZEluU3VwZXIgPSB7J190JzogdHJ1ZSwgJ1xcbic6IHRydWUsICckJzogdHJ1ZSwgJy8nOiB0cnVlfTtcblxuICBmdW5jdGlvbiBidWlsZFRyZWUodG9rZW5zLCBraW5kLCBzdGFjaywgY3VzdG9tVGFncykge1xuICAgIHZhciBpbnN0cnVjdGlvbnMgPSBbXSxcbiAgICAgICAgb3BlbmVyID0gbnVsbCxcbiAgICAgICAgdGFpbCA9IG51bGwsXG4gICAgICAgIHRva2VuID0gbnVsbDtcblxuICAgIHRhaWwgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoID4gMCkge1xuICAgICAgdG9rZW4gPSB0b2tlbnMuc2hpZnQoKTtcblxuICAgICAgaWYgKHRhaWwgJiYgdGFpbC50YWcgPT0gJzwnICYmICEodG9rZW4udGFnIGluIGFsbG93ZWRJblN1cGVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgY29udGVudCBpbiA8IHN1cGVyIHRhZy4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEhvZ2FuLnRhZ3NbdG9rZW4udGFnXSA8PSBIb2dhbi50YWdzWyckJ10gfHwgaXNPcGVuZXIodG9rZW4sIGN1c3RvbVRhZ3MpKSB7XG4gICAgICAgIHN0YWNrLnB1c2godG9rZW4pO1xuICAgICAgICB0b2tlbi5ub2RlcyA9IGJ1aWxkVHJlZSh0b2tlbnMsIHRva2VuLnRhZywgc3RhY2ssIGN1c3RvbVRhZ3MpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50YWcgPT0gJy8nKSB7XG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nsb3NpbmcgdGFnIHdpdGhvdXQgb3BlbmVyOiAvJyArIHRva2VuLm4pO1xuICAgICAgICB9XG4gICAgICAgIG9wZW5lciA9IHN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAodG9rZW4ubiAhPSBvcGVuZXIubiAmJiAhaXNDbG9zZXIodG9rZW4ubiwgb3BlbmVyLm4sIGN1c3RvbVRhZ3MpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZXN0aW5nIGVycm9yOiAnICsgb3BlbmVyLm4gKyAnIHZzLiAnICsgdG9rZW4ubik7XG4gICAgICAgIH1cbiAgICAgICAgb3BlbmVyLmVuZCA9IHRva2VuLmk7XG4gICAgICAgIHJldHVybiBpbnN0cnVjdGlvbnM7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLnRhZyA9PSAnXFxuJykge1xuICAgICAgICB0b2tlbi5sYXN0ID0gKHRva2Vucy5sZW5ndGggPT0gMCkgfHwgKHRva2Vuc1swXS50YWcgPT0gJ1xcbicpO1xuICAgICAgfVxuXG4gICAgICBpbnN0cnVjdGlvbnMucHVzaCh0b2tlbik7XG4gICAgfVxuXG4gICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBjbG9zaW5nIHRhZzogJyArIHN0YWNrLnBvcCgpLm4pO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0cnVjdGlvbnM7XG4gIH1cblxuICBmdW5jdGlvbiBpc09wZW5lcih0b2tlbiwgdGFncykge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFncy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh0YWdzW2ldLm8gPT0gdG9rZW4ubikge1xuICAgICAgICB0b2tlbi50YWcgPSAnIyc7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQ2xvc2VyKGNsb3NlLCBvcGVuLCB0YWdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHRhZ3NbaV0uYyA9PSBjbG9zZSAmJiB0YWdzW2ldLm8gPT0gb3Blbikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdpZnlTdWJzdGl0dXRpb25zKG9iaikge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGl0ZW1zLnB1c2goJ1wiJyArIGVzYyhrZXkpICsgJ1wiOiBmdW5jdGlvbihjLHAsdCxpKSB7JyArIG9ialtrZXldICsgJ30nKTtcbiAgICB9XG4gICAgcmV0dXJuIFwieyBcIiArIGl0ZW1zLmpvaW4oXCIsXCIpICsgXCIgfVwiO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RyaW5naWZ5UGFydGlhbHMoY29kZU9iaikge1xuICAgIHZhciBwYXJ0aWFscyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBjb2RlT2JqLnBhcnRpYWxzKSB7XG4gICAgICBwYXJ0aWFscy5wdXNoKCdcIicgKyBlc2Moa2V5KSArICdcIjp7bmFtZTpcIicgKyBlc2MoY29kZU9iai5wYXJ0aWFsc1trZXldLm5hbWUpICsgJ1wiLCAnICsgc3RyaW5naWZ5UGFydGlhbHMoY29kZU9iai5wYXJ0aWFsc1trZXldKSArIFwifVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIFwicGFydGlhbHM6IHtcIiArIHBhcnRpYWxzLmpvaW4oXCIsXCIpICsgXCJ9LCBzdWJzOiBcIiArIHN0cmluZ2lmeVN1YnN0aXR1dGlvbnMoY29kZU9iai5zdWJzKTtcbiAgfVxuXG4gIEhvZ2FuLnN0cmluZ2lmeSA9IGZ1bmN0aW9uKGNvZGVPYmosIHRleHQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gXCJ7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IFwiICsgSG9nYW4ud3JhcE1haW4oY29kZU9iai5jb2RlKSArIFwiIH0sXCIgKyBzdHJpbmdpZnlQYXJ0aWFscyhjb2RlT2JqKSArICBcIn1cIjtcbiAgfVxuXG4gIHZhciBzZXJpYWxObyA9IDA7XG4gIEhvZ2FuLmdlbmVyYXRlID0gZnVuY3Rpb24odHJlZSwgdGV4dCwgb3B0aW9ucykge1xuICAgIHNlcmlhbE5vID0gMDtcbiAgICB2YXIgY29udGV4dCA9IHsgY29kZTogJycsIHN1YnM6IHt9LCBwYXJ0aWFsczoge30gfTtcbiAgICBIb2dhbi53YWxrKHRyZWUsIGNvbnRleHQpO1xuXG4gICAgaWYgKG9wdGlvbnMuYXNTdHJpbmcpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeShjb250ZXh0LCB0ZXh0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tYWtlVGVtcGxhdGUoY29udGV4dCwgdGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICBIb2dhbi53cmFwTWFpbiA9IGZ1bmN0aW9uKGNvZGUpIHtcbiAgICByZXR1cm4gJ3ZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7JyArIGNvZGUgKyAncmV0dXJuIHQuZmwoKTsnO1xuICB9XG5cbiAgSG9nYW4udGVtcGxhdGUgPSBIb2dhbi5UZW1wbGF0ZTtcblxuICBIb2dhbi5tYWtlVGVtcGxhdGUgPSBmdW5jdGlvbihjb2RlT2JqLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgdmFyIHRlbXBsYXRlID0gdGhpcy5tYWtlUGFydGlhbHMoY29kZU9iaik7XG4gICAgdGVtcGxhdGUuY29kZSA9IG5ldyBGdW5jdGlvbignYycsICdwJywgJ2knLCB0aGlzLndyYXBNYWluKGNvZGVPYmouY29kZSkpO1xuICAgIHJldHVybiBuZXcgdGhpcy50ZW1wbGF0ZSh0ZW1wbGF0ZSwgdGV4dCwgdGhpcywgb3B0aW9ucyk7XG4gIH1cblxuICBIb2dhbi5tYWtlUGFydGlhbHMgPSBmdW5jdGlvbihjb2RlT2JqKSB7XG4gICAgdmFyIGtleSwgdGVtcGxhdGUgPSB7c3Viczoge30sIHBhcnRpYWxzOiBjb2RlT2JqLnBhcnRpYWxzLCBuYW1lOiBjb2RlT2JqLm5hbWV9O1xuICAgIGZvciAoa2V5IGluIHRlbXBsYXRlLnBhcnRpYWxzKSB7XG4gICAgICB0ZW1wbGF0ZS5wYXJ0aWFsc1trZXldID0gdGhpcy5tYWtlUGFydGlhbHModGVtcGxhdGUucGFydGlhbHNba2V5XSk7XG4gICAgfVxuICAgIGZvciAoa2V5IGluIGNvZGVPYmouc3Vicykge1xuICAgICAgdGVtcGxhdGUuc3Vic1trZXldID0gbmV3IEZ1bmN0aW9uKCdjJywgJ3AnLCAndCcsICdpJywgY29kZU9iai5zdWJzW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICBmdW5jdGlvbiBlc2Mocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoclNsYXNoLCAnXFxcXFxcXFwnKVxuICAgICAgICAgICAgLnJlcGxhY2UoclF1b3QsICdcXFxcXFxcIicpXG4gICAgICAgICAgICAucmVwbGFjZShyTmV3bGluZSwgJ1xcXFxuJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJDciwgJ1xcXFxyJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJMaW5lU2VwLCAnXFxcXHUyMDI4JylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJQYXJhZ3JhcGhTZXAsICdcXFxcdTIwMjknKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNob29zZU1ldGhvZChzKSB7XG4gICAgcmV0dXJuICh+cy5pbmRleE9mKCcuJykpID8gJ2QnIDogJ2YnO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUGFydGlhbChub2RlLCBjb250ZXh0KSB7XG4gICAgdmFyIHByZWZpeCA9IFwiPFwiICsgKGNvbnRleHQucHJlZml4IHx8IFwiXCIpO1xuICAgIHZhciBzeW0gPSBwcmVmaXggKyBub2RlLm4gKyBzZXJpYWxObysrO1xuICAgIGNvbnRleHQucGFydGlhbHNbc3ltXSA9IHtuYW1lOiBub2RlLm4sIHBhcnRpYWxzOiB7fX07XG4gICAgY29udGV4dC5jb2RlICs9ICd0LmIodC5ycChcIicgKyAgZXNjKHN5bSkgKyAnXCIsYyxwLFwiJyArIChub2RlLmluZGVudCB8fCAnJykgKyAnXCIpKTsnO1xuICAgIHJldHVybiBzeW07XG4gIH1cblxuICBIb2dhbi5jb2RlZ2VuID0ge1xuICAgICcjJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9ICdpZih0LnModC4nICsgY2hvb3NlTWV0aG9kKG5vZGUubikgKyAnKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCwxKSwnICtcbiAgICAgICAgICAgICAgICAgICAgICAnYyxwLDAsJyArIG5vZGUuaSArICcsJyArIG5vZGUuZW5kICsgJyxcIicgKyBub2RlLm90YWcgKyBcIiBcIiArIG5vZGUuY3RhZyArICdcIikpeycgK1xuICAgICAgICAgICAgICAgICAgICAgICd0LnJzKGMscCwnICsgJ2Z1bmN0aW9uKGMscCx0KXsnO1xuICAgICAgSG9nYW4ud2Fsayhub2RlLm5vZGVzLCBjb250ZXh0KTtcbiAgICAgIGNvbnRleHQuY29kZSArPSAnfSk7Yy5wb3AoKTt9JztcbiAgICB9LFxuXG4gICAgJ14nOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ2lmKCF0LnModC4nICsgY2hvb3NlTWV0aG9kKG5vZGUubikgKyAnKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCwxKSxjLHAsMSwwLDAsXCJcIikpeyc7XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGNvbnRleHQpO1xuICAgICAgY29udGV4dC5jb2RlICs9ICd9Oyc7XG4gICAgfSxcblxuICAgICc+JzogY3JlYXRlUGFydGlhbCxcbiAgICAnPCc6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBjdHggPSB7cGFydGlhbHM6IHt9LCBjb2RlOiAnJywgc3Viczoge30sIGluUGFydGlhbDogdHJ1ZX07XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGN0eCk7XG4gICAgICB2YXIgdGVtcGxhdGUgPSBjb250ZXh0LnBhcnRpYWxzW2NyZWF0ZVBhcnRpYWwobm9kZSwgY29udGV4dCldO1xuICAgICAgdGVtcGxhdGUuc3VicyA9IGN0eC5zdWJzO1xuICAgICAgdGVtcGxhdGUucGFydGlhbHMgPSBjdHgucGFydGlhbHM7XG4gICAgfSxcblxuICAgICckJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgdmFyIGN0eCA9IHtzdWJzOiB7fSwgY29kZTogJycsIHBhcnRpYWxzOiBjb250ZXh0LnBhcnRpYWxzLCBwcmVmaXg6IG5vZGUubn07XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGN0eCk7XG4gICAgICBjb250ZXh0LnN1YnNbbm9kZS5uXSA9IGN0eC5jb2RlO1xuICAgICAgaWYgKCFjb250ZXh0LmluUGFydGlhbCkge1xuICAgICAgICBjb250ZXh0LmNvZGUgKz0gJ3Quc3ViKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCxpKTsnO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAnXFxuJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9IHdyaXRlKCdcIlxcXFxuXCInICsgKG5vZGUubGFzdCA/ICcnIDogJyArIGknKSk7XG4gICAgfSxcblxuICAgICdfdic6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSAndC5iKHQudih0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDApKSk7JztcbiAgICB9LFxuXG4gICAgJ190JzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9IHdyaXRlKCdcIicgKyBlc2Mobm9kZS50ZXh0KSArICdcIicpO1xuICAgIH0sXG5cbiAgICAneyc6IHRyaXBsZVN0YWNoZSxcblxuICAgICcmJzogdHJpcGxlU3RhY2hlXG4gIH1cblxuICBmdW5jdGlvbiB0cmlwbGVTdGFjaGUobm9kZSwgY29udGV4dCkge1xuICAgIGNvbnRleHQuY29kZSArPSAndC5iKHQudCh0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDApKSk7JztcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlKHMpIHtcbiAgICByZXR1cm4gJ3QuYignICsgcyArICcpOyc7XG4gIH1cblxuICBIb2dhbi53YWxrID0gZnVuY3Rpb24obm9kZWxpc3QsIGNvbnRleHQpIHtcbiAgICB2YXIgZnVuYztcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG5vZGVsaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZnVuYyA9IEhvZ2FuLmNvZGVnZW5bbm9kZWxpc3RbaV0udGFnXTtcbiAgICAgIGZ1bmMgJiYgZnVuYyhub2RlbGlzdFtpXSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgSG9nYW4ucGFyc2UgPSBmdW5jdGlvbih0b2tlbnMsIHRleHQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4gYnVpbGRUcmVlKHRva2VucywgJycsIFtdLCBvcHRpb25zLnNlY3Rpb25UYWdzIHx8IFtdKTtcbiAgfVxuXG4gIEhvZ2FuLmNhY2hlID0ge307XG5cbiAgSG9nYW4uY2FjaGVLZXkgPSBmdW5jdGlvbih0ZXh0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFt0ZXh0LCAhIW9wdGlvbnMuYXNTdHJpbmcsICEhb3B0aW9ucy5kaXNhYmxlTGFtYmRhLCBvcHRpb25zLmRlbGltaXRlcnMsICEhb3B0aW9ucy5tb2RlbEdldF0uam9pbignfHwnKTtcbiAgfVxuXG4gIEhvZ2FuLmNvbXBpbGUgPSBmdW5jdGlvbih0ZXh0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdmFyIGtleSA9IEhvZ2FuLmNhY2hlS2V5KHRleHQsIG9wdGlvbnMpO1xuICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMuY2FjaGVba2V5XTtcblxuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgdmFyIHBhcnRpYWxzID0gdGVtcGxhdGUucGFydGlhbHM7XG4gICAgICBmb3IgKHZhciBuYW1lIGluIHBhcnRpYWxzKSB7XG4gICAgICAgIGRlbGV0ZSBwYXJ0aWFsc1tuYW1lXS5pbnN0YW5jZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9XG5cbiAgICB0ZW1wbGF0ZSA9IHRoaXMuZ2VuZXJhdGUodGhpcy5wYXJzZSh0aGlzLnNjYW4odGV4dCwgb3B0aW9ucy5kZWxpbWl0ZXJzKSwgdGV4dCwgb3B0aW9ucyksIHRleHQsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlW2tleV0gPSB0ZW1wbGF0ZTtcbiAgfVxufSkodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnID8gZXhwb3J0cyA6IEhvZ2FuKTtcbiIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMTEgVHdpdHRlciwgSW5jLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gVGhpcyBmaWxlIGlzIGZvciB1c2Ugd2l0aCBOb2RlLmpzLiBTZWUgZGlzdC8gZm9yIGJyb3dzZXIgZmlsZXMuXG5cbnZhciBIb2dhbiA9IHJlcXVpcmUoJy4vY29tcGlsZXInKTtcbkhvZ2FuLlRlbXBsYXRlID0gcmVxdWlyZSgnLi90ZW1wbGF0ZScpLlRlbXBsYXRlO1xuSG9nYW4udGVtcGxhdGUgPSBIb2dhbi5UZW1wbGF0ZTtcbm1vZHVsZS5leHBvcnRzID0gSG9nYW47XG4iLCIvKlxuICogIENvcHlyaWdodCAyMDExIFR3aXR0ZXIsIEluYy5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbnZhciBIb2dhbiA9IHt9O1xuXG4oZnVuY3Rpb24gKEhvZ2FuKSB7XG4gIEhvZ2FuLlRlbXBsYXRlID0gZnVuY3Rpb24gKGNvZGVPYmosIHRleHQsIGNvbXBpbGVyLCBvcHRpb25zKSB7XG4gICAgY29kZU9iaiA9IGNvZGVPYmogfHwge307XG4gICAgdGhpcy5yID0gY29kZU9iai5jb2RlIHx8IHRoaXMucjtcbiAgICB0aGlzLmMgPSBjb21waWxlcjtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMudGV4dCA9IHRleHQgfHwgJyc7XG4gICAgdGhpcy5wYXJ0aWFscyA9IGNvZGVPYmoucGFydGlhbHMgfHwge307XG4gICAgdGhpcy5zdWJzID0gY29kZU9iai5zdWJzIHx8IHt9O1xuICAgIHRoaXMuYnVmID0gJyc7XG4gIH1cblxuICBIb2dhbi5UZW1wbGF0ZS5wcm90b3R5cGUgPSB7XG4gICAgLy8gcmVuZGVyOiByZXBsYWNlZCBieSBnZW5lcmF0ZWQgY29kZS5cbiAgICByOiBmdW5jdGlvbiAoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkgeyByZXR1cm4gJyc7IH0sXG5cbiAgICAvLyB2YXJpYWJsZSBlc2NhcGluZ1xuICAgIHY6IGhvZ2FuRXNjYXBlLFxuXG4gICAgLy8gdHJpcGxlIHN0YWNoZVxuICAgIHQ6IGNvZXJjZVRvU3RyaW5nLFxuXG4gICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmkoW2NvbnRleHRdLCBwYXJ0aWFscyB8fCB7fSwgaW5kZW50KTtcbiAgICB9LFxuXG4gICAgLy8gcmVuZGVyIGludGVybmFsIC0tIGEgaG9vayBmb3Igb3ZlcnJpZGVzIHRoYXQgY2F0Y2hlcyBwYXJ0aWFscyB0b29cbiAgICByaTogZnVuY3Rpb24gKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnIoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCk7XG4gICAgfSxcblxuICAgIC8vIGVuc3VyZVBhcnRpYWxcbiAgICBlcDogZnVuY3Rpb24oc3ltYm9sLCBwYXJ0aWFscykge1xuICAgICAgdmFyIHBhcnRpYWwgPSB0aGlzLnBhcnRpYWxzW3N5bWJvbF07XG5cbiAgICAgIC8vIGNoZWNrIHRvIHNlZSB0aGF0IGlmIHdlJ3ZlIGluc3RhbnRpYXRlZCB0aGlzIHBhcnRpYWwgYmVmb3JlXG4gICAgICB2YXIgdGVtcGxhdGUgPSBwYXJ0aWFsc1twYXJ0aWFsLm5hbWVdO1xuICAgICAgaWYgKHBhcnRpYWwuaW5zdGFuY2UgJiYgcGFydGlhbC5iYXNlID09IHRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBwYXJ0aWFsLmluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRlbXBsYXRlID09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghdGhpcy5jKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29tcGlsZXIgYXZhaWxhYmxlLlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSA9IHRoaXMuYy5jb21waWxlKHRlbXBsYXRlLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSB1c2UgdGhpcyB0byBjaGVjayB3aGV0aGVyIHRoZSBwYXJ0aWFscyBkaWN0aW9uYXJ5IGhhcyBjaGFuZ2VkXG4gICAgICB0aGlzLnBhcnRpYWxzW3N5bWJvbF0uYmFzZSA9IHRlbXBsYXRlO1xuXG4gICAgICBpZiAocGFydGlhbC5zdWJzKSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBjb25zaWRlciBwYXJlbnQgdGVtcGxhdGUgbm93XG4gICAgICAgIGlmICghcGFydGlhbHMuc3RhY2tUZXh0KSBwYXJ0aWFscy5zdGFja1RleHQgPSB7fTtcbiAgICAgICAgZm9yIChrZXkgaW4gcGFydGlhbC5zdWJzKSB7XG4gICAgICAgICAgaWYgKCFwYXJ0aWFscy5zdGFja1RleHRba2V5XSkge1xuICAgICAgICAgICAgcGFydGlhbHMuc3RhY2tUZXh0W2tleV0gPSAodGhpcy5hY3RpdmVTdWIgIT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFscy5zdGFja1RleHRbdGhpcy5hY3RpdmVTdWJdKSA/IHBhcnRpYWxzLnN0YWNrVGV4dFt0aGlzLmFjdGl2ZVN1Yl0gOiB0aGlzLnRleHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRlbXBsYXRlID0gY3JlYXRlU3BlY2lhbGl6ZWRQYXJ0aWFsKHRlbXBsYXRlLCBwYXJ0aWFsLnN1YnMsIHBhcnRpYWwucGFydGlhbHMsXG4gICAgICAgICAgdGhpcy5zdGFja1N1YnMsIHRoaXMuc3RhY2tQYXJ0aWFscywgcGFydGlhbHMuc3RhY2tUZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbc3ltYm9sXS5pbnN0YW5jZSA9IHRlbXBsYXRlO1xuXG4gICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfSxcblxuICAgIC8vIHRyaWVzIHRvIGZpbmQgYSBwYXJ0aWFsIGluIHRoZSBjdXJyZW50IHNjb3BlIGFuZCByZW5kZXIgaXRcbiAgICBycDogZnVuY3Rpb24oc3ltYm9sLCBjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICB2YXIgcGFydGlhbCA9IHRoaXMuZXAoc3ltYm9sLCBwYXJ0aWFscyk7XG4gICAgICBpZiAoIXBhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydGlhbC5yaShjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KTtcbiAgICB9LFxuXG4gICAgLy8gcmVuZGVyIGEgc2VjdGlvblxuICAgIHJzOiBmdW5jdGlvbihjb250ZXh0LCBwYXJ0aWFscywgc2VjdGlvbikge1xuICAgICAgdmFyIHRhaWwgPSBjb250ZXh0W2NvbnRleHQubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICghaXNBcnJheSh0YWlsKSkge1xuICAgICAgICBzZWN0aW9uKGNvbnRleHQsIHBhcnRpYWxzLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhaWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29udGV4dC5wdXNoKHRhaWxbaV0pO1xuICAgICAgICBzZWN0aW9uKGNvbnRleHQsIHBhcnRpYWxzLCB0aGlzKTtcbiAgICAgICAgY29udGV4dC5wb3AoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gbWF5YmUgc3RhcnQgYSBzZWN0aW9uXG4gICAgczogZnVuY3Rpb24odmFsLCBjdHgsIHBhcnRpYWxzLCBpbnZlcnRlZCwgc3RhcnQsIGVuZCwgdGFncykge1xuICAgICAgdmFyIHBhc3M7XG5cbiAgICAgIGlmIChpc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsID0gdGhpcy5tcyh2YWwsIGN0eCwgcGFydGlhbHMsIGludmVydGVkLCBzdGFydCwgZW5kLCB0YWdzKTtcbiAgICAgIH1cblxuICAgICAgcGFzcyA9ICEhdmFsO1xuXG4gICAgICBpZiAoIWludmVydGVkICYmIHBhc3MgJiYgY3R4KSB7XG4gICAgICAgIGN0eC5wdXNoKCh0eXBlb2YgdmFsID09ICdvYmplY3QnKSA/IHZhbCA6IGN0eFtjdHgubGVuZ3RoIC0gMV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFzcztcbiAgICB9LFxuXG4gICAgLy8gZmluZCB2YWx1ZXMgd2l0aCBkb3R0ZWQgbmFtZXNcbiAgICBkOiBmdW5jdGlvbihrZXksIGN0eCwgcGFydGlhbHMsIHJldHVybkZvdW5kKSB7XG4gICAgICB2YXIgZm91bmQsXG4gICAgICAgICAgbmFtZXMgPSBrZXkuc3BsaXQoJy4nKSxcbiAgICAgICAgICB2YWwgPSB0aGlzLmYobmFtZXNbMF0sIGN0eCwgcGFydGlhbHMsIHJldHVybkZvdW5kKSxcbiAgICAgICAgICBkb01vZGVsR2V0ID0gdGhpcy5vcHRpb25zLm1vZGVsR2V0LFxuICAgICAgICAgIGN4ID0gbnVsbDtcblxuICAgICAgaWYgKGtleSA9PT0gJy4nICYmIGlzQXJyYXkoY3R4W2N0eC5sZW5ndGggLSAyXSkpIHtcbiAgICAgICAgdmFsID0gY3R4W2N0eC5sZW5ndGggLSAxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3VuZCA9IGZpbmRJblNjb3BlKG5hbWVzW2ldLCB2YWwsIGRvTW9kZWxHZXQpO1xuICAgICAgICAgIGlmIChmb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjeCA9IHZhbDtcbiAgICAgICAgICAgIHZhbCA9IGZvdW5kO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWwgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVybkZvdW5kICYmICF2YWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJldHVybkZvdW5kICYmIHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjdHgucHVzaChjeCk7XG4gICAgICAgIHZhbCA9IHRoaXMubXYodmFsLCBjdHgsIHBhcnRpYWxzKTtcbiAgICAgICAgY3R4LnBvcCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICAvLyBmaW5kIHZhbHVlcyB3aXRoIG5vcm1hbCBuYW1lc1xuICAgIGY6IGZ1bmN0aW9uKGtleSwgY3R4LCBwYXJ0aWFscywgcmV0dXJuRm91bmQpIHtcbiAgICAgIHZhciB2YWwgPSBmYWxzZSxcbiAgICAgICAgICB2ID0gbnVsbCxcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlLFxuICAgICAgICAgIGRvTW9kZWxHZXQgPSB0aGlzLm9wdGlvbnMubW9kZWxHZXQ7XG5cbiAgICAgIGZvciAodmFyIGkgPSBjdHgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgdiA9IGN0eFtpXTtcbiAgICAgICAgdmFsID0gZmluZEluU2NvcGUoa2V5LCB2LCBkb01vZGVsR2V0KTtcbiAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIChyZXR1cm5Gb3VuZCkgPyBmYWxzZSA6IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmV0dXJuRm91bmQgJiYgdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbCA9IHRoaXMubXYodmFsLCBjdHgsIHBhcnRpYWxzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgLy8gaGlnaGVyIG9yZGVyIHRlbXBsYXRlc1xuICAgIGxzOiBmdW5jdGlvbihmdW5jLCBjeCwgcGFydGlhbHMsIHRleHQsIHRhZ3MpIHtcbiAgICAgIHZhciBvbGRUYWdzID0gdGhpcy5vcHRpb25zLmRlbGltaXRlcnM7XG5cbiAgICAgIHRoaXMub3B0aW9ucy5kZWxpbWl0ZXJzID0gdGFncztcbiAgICAgIHRoaXMuYih0aGlzLmN0KGNvZXJjZVRvU3RyaW5nKGZ1bmMuY2FsbChjeCwgdGV4dCkpLCBjeCwgcGFydGlhbHMpKTtcbiAgICAgIHRoaXMub3B0aW9ucy5kZWxpbWl0ZXJzID0gb2xkVGFncztcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICAvLyBjb21waWxlIHRleHRcbiAgICBjdDogZnVuY3Rpb24odGV4dCwgY3gsIHBhcnRpYWxzKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRpc2FibGVMYW1iZGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMYW1iZGEgZmVhdHVyZXMgZGlzYWJsZWQuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jLmNvbXBpbGUodGV4dCwgdGhpcy5vcHRpb25zKS5yZW5kZXIoY3gsIHBhcnRpYWxzKTtcbiAgICB9LFxuXG4gICAgLy8gdGVtcGxhdGUgcmVzdWx0IGJ1ZmZlcmluZ1xuICAgIGI6IGZ1bmN0aW9uKHMpIHsgdGhpcy5idWYgKz0gczsgfSxcblxuICAgIGZsOiBmdW5jdGlvbigpIHsgdmFyIHIgPSB0aGlzLmJ1ZjsgdGhpcy5idWYgPSAnJzsgcmV0dXJuIHI7IH0sXG5cbiAgICAvLyBtZXRob2QgcmVwbGFjZSBzZWN0aW9uXG4gICAgbXM6IGZ1bmN0aW9uKGZ1bmMsIGN0eCwgcGFydGlhbHMsIGludmVydGVkLCBzdGFydCwgZW5kLCB0YWdzKSB7XG4gICAgICB2YXIgdGV4dFNvdXJjZSxcbiAgICAgICAgICBjeCA9IGN0eFtjdHgubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgcmVzdWx0ID0gZnVuYy5jYWxsKGN4KTtcblxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoaW52ZXJ0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0U291cmNlID0gKHRoaXMuYWN0aXZlU3ViICYmIHRoaXMuc3Vic1RleHQgJiYgdGhpcy5zdWJzVGV4dFt0aGlzLmFjdGl2ZVN1Yl0pID8gdGhpcy5zdWJzVGV4dFt0aGlzLmFjdGl2ZVN1Yl0gOiB0aGlzLnRleHQ7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubHMocmVzdWx0LCBjeCwgcGFydGlhbHMsIHRleHRTb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLCB0YWdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICAvLyBtZXRob2QgcmVwbGFjZSB2YXJpYWJsZVxuICAgIG12OiBmdW5jdGlvbihmdW5jLCBjdHgsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgY3ggPSBjdHhbY3R4Lmxlbmd0aCAtIDFdO1xuICAgICAgdmFyIHJlc3VsdCA9IGZ1bmMuY2FsbChjeCk7XG5cbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3QoY29lcmNlVG9TdHJpbmcocmVzdWx0LmNhbGwoY3gpKSwgY3gsIHBhcnRpYWxzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgc3ViOiBmdW5jdGlvbihuYW1lLCBjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICB2YXIgZiA9IHRoaXMuc3Vic1tuYW1lXTtcbiAgICAgIGlmIChmKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlU3ViID0gbmFtZTtcbiAgICAgICAgZihjb250ZXh0LCBwYXJ0aWFscywgdGhpcywgaW5kZW50KTtcbiAgICAgICAgdGhpcy5hY3RpdmVTdWIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfTtcblxuICAvL0ZpbmQgYSBrZXkgaW4gYW4gb2JqZWN0XG4gIGZ1bmN0aW9uIGZpbmRJblNjb3BlKGtleSwgc2NvcGUsIGRvTW9kZWxHZXQpIHtcbiAgICB2YXIgdmFsO1xuXG4gICAgaWYgKHNjb3BlICYmIHR5cGVvZiBzY29wZSA9PSAnb2JqZWN0Jykge1xuXG4gICAgICBpZiAoc2NvcGVba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbCA9IHNjb3BlW2tleV07XG5cbiAgICAgIC8vIHRyeSBsb29rdXAgd2l0aCBnZXQgZm9yIGJhY2tib25lIG9yIHNpbWlsYXIgbW9kZWwgZGF0YVxuICAgICAgfSBlbHNlIGlmIChkb01vZGVsR2V0ICYmIHNjb3BlLmdldCAmJiB0eXBlb2Ygc2NvcGUuZ2V0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsID0gc2NvcGUuZ2V0KGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVNwZWNpYWxpemVkUGFydGlhbChpbnN0YW5jZSwgc3VicywgcGFydGlhbHMsIHN0YWNrU3Vicywgc3RhY2tQYXJ0aWFscywgc3RhY2tUZXh0KSB7XG4gICAgZnVuY3Rpb24gUGFydGlhbFRlbXBsYXRlKCkge307XG4gICAgUGFydGlhbFRlbXBsYXRlLnByb3RvdHlwZSA9IGluc3RhbmNlO1xuICAgIGZ1bmN0aW9uIFN1YnN0aXR1dGlvbnMoKSB7fTtcbiAgICBTdWJzdGl0dXRpb25zLnByb3RvdHlwZSA9IGluc3RhbmNlLnN1YnM7XG4gICAgdmFyIGtleTtcbiAgICB2YXIgcGFydGlhbCA9IG5ldyBQYXJ0aWFsVGVtcGxhdGUoKTtcbiAgICBwYXJ0aWFsLnN1YnMgPSBuZXcgU3Vic3RpdHV0aW9ucygpO1xuICAgIHBhcnRpYWwuc3Vic1RleHQgPSB7fTsgIC8vaGVoZS4gc3Vic3RleHQuXG4gICAgcGFydGlhbC5idWYgPSAnJztcblxuICAgIHN0YWNrU3VicyA9IHN0YWNrU3VicyB8fCB7fTtcbiAgICBwYXJ0aWFsLnN0YWNrU3VicyA9IHN0YWNrU3VicztcbiAgICBwYXJ0aWFsLnN1YnNUZXh0ID0gc3RhY2tUZXh0O1xuICAgIGZvciAoa2V5IGluIHN1YnMpIHtcbiAgICAgIGlmICghc3RhY2tTdWJzW2tleV0pIHN0YWNrU3Vic1trZXldID0gc3Vic1trZXldO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBzdGFja1N1YnMpIHtcbiAgICAgIHBhcnRpYWwuc3Vic1trZXldID0gc3RhY2tTdWJzW2tleV07XG4gICAgfVxuXG4gICAgc3RhY2tQYXJ0aWFscyA9IHN0YWNrUGFydGlhbHMgfHwge307XG4gICAgcGFydGlhbC5zdGFja1BhcnRpYWxzID0gc3RhY2tQYXJ0aWFscztcbiAgICBmb3IgKGtleSBpbiBwYXJ0aWFscykge1xuICAgICAgaWYgKCFzdGFja1BhcnRpYWxzW2tleV0pIHN0YWNrUGFydGlhbHNba2V5XSA9IHBhcnRpYWxzW2tleV07XG4gICAgfVxuICAgIGZvciAoa2V5IGluIHN0YWNrUGFydGlhbHMpIHtcbiAgICAgIHBhcnRpYWwucGFydGlhbHNba2V5XSA9IHN0YWNrUGFydGlhbHNba2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFydGlhbDtcbiAgfVxuXG4gIHZhciByQW1wID0gLyYvZyxcbiAgICAgIHJMdCA9IC88L2csXG4gICAgICByR3QgPSAvPi9nLFxuICAgICAgckFwb3MgPSAvXFwnL2csXG4gICAgICByUXVvdCA9IC9cXFwiL2csXG4gICAgICBoQ2hhcnMgPSAvWyY8PlxcXCJcXCddLztcblxuICBmdW5jdGlvbiBjb2VyY2VUb1N0cmluZyh2YWwpIHtcbiAgICByZXR1cm4gU3RyaW5nKCh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpID8gJycgOiB2YWwpO1xuICB9XG5cbiAgZnVuY3Rpb24gaG9nYW5Fc2NhcGUoc3RyKSB7XG4gICAgc3RyID0gY29lcmNlVG9TdHJpbmcoc3RyKTtcbiAgICByZXR1cm4gaENoYXJzLnRlc3Qoc3RyKSA/XG4gICAgICBzdHJcbiAgICAgICAgLnJlcGxhY2UockFtcCwgJyZhbXA7JylcbiAgICAgICAgLnJlcGxhY2Uockx0LCAnJmx0OycpXG4gICAgICAgIC5yZXBsYWNlKHJHdCwgJyZndDsnKVxuICAgICAgICAucmVwbGFjZShyQXBvcywgJyYjMzk7JylcbiAgICAgICAgLnJlcGxhY2UoclF1b3QsICcmcXVvdDsnKSA6XG4gICAgICBzdHI7XG4gIH1cblxuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gIH07XG5cbn0pKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJyA/IGV4cG9ydHMgOiBIb2dhbik7XG4iLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxsaVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcImFwcGVhcmFuY2UtaXRlbS1cIik7dC5iKHQudih0LmYoXCJpdGVtaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtIGdyb3VwLVwiKTt0LmIodC52KHQuZihcImdyb3VwXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1pdGVtaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcIml0ZW1pZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtbmFtZT1cXFwiXCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtcmFyaXR5PVxcXCJcIik7dC5iKHQudih0LmYoXCJyYXJpdHlcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLXJhcml0eW5hbWU9XFxcIlwiKTt0LmIodC52KHQuZihcInJhcml0eW5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGRpdiBjbGFzcz1cXFwicmFyaXR5LW1hcmtlci1cIik7dC5iKHQudih0LmYoXCJyYXJpdHlcIixjLHAsMCkpKTt0LmIoXCJcXFwiPjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGltZyBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWljb25cXFwiIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCIgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2xpPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxsaVxcbiAgaWQ9XFxcImFwcGVhcmFuY2UtaXRlbS17e2l0ZW1pZH19XFxcIlxcbiAgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbSBncm91cC17e2dyb3VwfX1cXFwiXFxuICBkYXRhLWl0ZW1pZD1cXFwie3tpdGVtaWR9fVxcXCJcXG4gIGRhdGEtbmFtZT1cXFwie3tuYW1lfX1cXFwiXFxuICBkYXRhLXJhcml0eT1cXFwie3tyYXJpdHl9fVxcXCJcXG4gIGRhdGEtcmFyaXR5bmFtZT1cXFwie3tyYXJpdHluYW1lfX1cXFwiXFxuPlxcbiAgPGRpdiBjbGFzcz1cXFwicmFyaXR5LW1hcmtlci17e3Jhcml0eX19XFxcIj48L2Rpdj5cXG4gIDxpbWcgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pY29uXFxcIiBzcmM9XFxcInt7aWNvbn19XFxcIiAvPlxcbjwvbGk+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8ZGl2XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiZWUtY2F0ZWdvcnlcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeSBhY3RpdmVcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLWNhdGVnb3J5PVxcXCJcIik7dC5iKHQudih0LmYoXCJjYXRlZ29yeVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtY2F0ZWdvcnlpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiY2F0ZWdvcnlpZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8c3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNlZS1pdGVtcyB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgc2Nyb2xsYmFyLWNvbG9yOiBkYXJrO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9zdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx1bFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1saXN0XFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBpZD1cXFwiZWUtaXRlbXNcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHN0eWxlPVxcXCJtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNTY1cHgpXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBcIik7dC5iKHQudCh0LmYoXCJpdGVtc1wiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3VsPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwhLS0gSW5mbyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxkaXYgaWQ9XFxcImVlLWluZm9cXFwiIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWluZm9cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWluZm8tdGlwc1xcXCI+PC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8aDMgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLW5hbWVcXFwiPjwvaDM+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1ndWFyZFxcXCI+PC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLXJhcml0eVxcXCI+PC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLWJ1dHRvbnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtZm9yd2FyZCBubC1idXR0b25cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFwcGVhcmFuY2UuYnV0dG9ucy5mb3J3YXJkXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWJhY2t3YXJkIG5sLWJ1dHRvblxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5idXR0b25zLmJhY2t3YXJkXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8ZGl2XFxuICBpZD1cXFwiZWUtY2F0ZWdvcnlcXFwiXFxuICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeSBhY3RpdmVcXFwiXFxuICBkYXRhLWNhdGVnb3J5PVxcXCJ7e2NhdGVnb3J5fX1cXFwiXFxuICBkYXRhLWNhdGVnb3J5aWQ9XFxcInt7Y2F0ZWdvcnlpZH19XFxcIlxcbj5cXG4gIDxzdHlsZT5cXG4gICAgI2VlLWl0ZW1zIHtcXG4gICAgICBzY3JvbGxiYXItY29sb3I6IGRhcms7XFxuICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xcbiAgICB9XFxuICA8L3N0eWxlPlxcbiAgPHVsXFxuICAgIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWxpc3RcXFwiXFxuICAgIGlkPVxcXCJlZS1pdGVtc1xcXCJcXG4gICAgc3R5bGU9XFxcIm1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA1NjVweClcXFwiXFxuICA+XFxuICAgIHt7e2l0ZW1zfX19XFxuICA8L3VsPlxcblxcbiAgPCEtLSBJbmZvIC0tPlxcbiAgPGRpdiBpZD1cXFwiZWUtaW5mb1xcXCIgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtaW5mb1xcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaW5mby10aXBzXFxcIj48L2Rpdj5cXG5cXG4gICAgPGgzIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1uYW1lXFxcIj48L2gzPlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1ndWFyZFxcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLXJhcml0eVxcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLWJ1dHRvbnNcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtZm9yd2FyZCBubC1idXR0b25cXFwiPlxcbiAgICAgICAge3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5idXR0b25zLmZvcndhcmR9fVxcbiAgICAgIDwvZGl2PlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtYmFja3dhcmQgbmwtYnV0dG9uXFxcIj5cXG4gICAgICAgIHt7dHJhbnNsYXRlLmFwcGVhcmFuY2UuYnV0dG9ucy5iYWNrd2FyZH19XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuPC9kaXY+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8ZGl2XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiYXBwZWFyYW5jZS1pdGVtcy1ncm91cC1cIik7dC5iKHQudih0LmYoXCJncm91cFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5XFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1jYXRlZ29yeWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJjYXRlZ29yeWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1jYXRlZ29yeT1cXFwiXCIpO3QuYih0LnYodC5mKFwiY2F0ZWdvcnlcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHVsIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWxpc3RcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBcIik7dC5iKHQudCh0LmYoXCJpdGVtc1wiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3VsPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxkaXZcXG4gIGlkPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLXt7Z3JvdXB9fVxcXCJcXG4gIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5XFxcIlxcbiAgZGF0YS1jYXRlZ29yeWlkPVxcXCJ7e2NhdGVnb3J5aWR9fVxcXCJcXG4gIGRhdGEtY2F0ZWdvcnk9XFxcInt7Y2F0ZWdvcnl9fVxcXCJcXG4+XFxuICA8dWwgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtbGlzdFxcXCI+XFxuICAgIHt7e2l0ZW1zfX19XFxuICA8L3VsPlxcbjwvZGl2PlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcIm1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtaW5mby1hdXRvYnV5XFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgc3R5bGU9XFxcInRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luOiAyMHB4IGF1dG9cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGRpdiBjbGFzcz1cXFwibmwtYnV0dG9uXFxcIj5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC50aXRsZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxkaXZcXG4gIGlkPVxcXCJtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWluZm8tYXV0b2J1eVxcXCJcXG4gIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogMjBweCBhdXRvXFxcIlxcbj5cXG4gIDxkaXYgY2xhc3M9XFxcIm5sLWJ1dHRvblxcXCI+e3t0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC50aXRsZX19PC9kaXY+XFxuPC9kaXY+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aDE+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QudGl0bGVcIixjLHAsMCkpKTt0LmIoXCI8L2gxPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxwPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LnRleHRcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGgxPnt7dHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QudGl0bGV9fTwvaDE+XFxuPHA+e3t0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC50ZXh0fX08L3A+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YnV0dG9uXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiYXV0by1leHBsb3JlLWJ1dHRvblxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGNsYXNzPVxcXCJubC1idXR0b24gXCIpO2lmKHQucyh0LmYoXCJhY3RpdmVcIixjLHAsMSksYyxwLDAsNjUsNzEsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJsb2NhdGlvbklkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1tYXBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwicmVnaW9uSWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLnBldC5hdXRvX2V4cGxvcmVcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvYnV0dG9uPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxidXR0b25cXG4gIGlkPVxcXCJhdXRvLWV4cGxvcmUtYnV0dG9uXFxcIlxcbiAgY2xhc3M9XFxcIm5sLWJ1dHRvbiB7eyNhY3RpdmV9fWFjdGl2ZXt7L2FjdGl2ZX19XFxcIlxcbiAgZGF0YS1pZD1cXFwie3tsb2NhdGlvbklkfX1cXFwiXFxuICBkYXRhLW1hcGlkPVxcXCJ7e3JlZ2lvbklkfX1cXFwiXFxuPlxcbiAge3t0cmFuc2xhdGUucGV0LmF1dG9fZXhwbG9yZX19XFxuPC9idXR0b24+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgY2xhc3M9XFxcImNhcm91c2VsLW5ld3MgY2Fyb3VzZWwtZWVcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBocmVmPVxcXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBzdHlsZT1cXFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiKTt0LmIodC52KHQuZihcImJhY2tncm91bmRJbWFnZVwiLGMscCwwKSkpO3QuYihcIilcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGRpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGg0PlwiKTt0LmIodC52KHQuZihcImg0XCIsYyxwLDApKSk7dC5iKFwiPC9oND5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGg1PlwiKTt0LmIodC52KHQuZihcImg1XCIsYyxwLDApKSk7dC5iKFwiPC9oNT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPHA+XCIpO3QuYih0LnYodC5mKFwicFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvYT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8YVxcbiAgaWQ9XFxcInt7aWR9fVxcXCJcXG4gIGNsYXNzPVxcXCJjYXJvdXNlbC1uZXdzIGNhcm91c2VsLWVlXFxcIlxcbiAgaHJlZj1cXFwiXFxcIlxcbiAgc3R5bGU9XFxcImJhY2tncm91bmQtaW1hZ2U6IHVybCh7e2JhY2tncm91bmRJbWFnZX19KVxcXCJcXG4+XFxuICA8ZGl2PlxcbiAgICA8aDQ+e3toNH19PC9oND5cXG4gICAgPGg1Pnt7aDV9fTwvaDU+XFxuICAgIDxwPnt7cH19PC9wPlxcbiAgPC9kaXY+XFxuPC9hPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGgxPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLnRpdGxlXCIsYyxwLDApKSk7dC5iKFwiPC9oMT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS50ZXh0XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxoMT57e3RyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLnRpdGxlfX08L2gxPlxcbjxwPnt7dHJhbnNsYXRlLm1hcmtldC5jaGFuZ2VfcHJpY2UudGV4dH19PC9wPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGgxPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQudGl0bGVcIixjLHAsMCkpKTt0LmIoXCI8L2gxPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudCh0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnNhdmVkX2xvY2FsbHlcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxiciAvPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudCh0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LmdvdG9fYWNjb3VudFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPGlucHV0XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiY2hvb3NlLW5hbWVcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBtYXhsZW5ndGg9XFxcIjMwXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgbWlubGVuZ3RoPVxcXCIxXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgcGxhY2Vob2xkZXI9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQucGxhY2Vob2xkZXJcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiLz5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8aDE+e3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnRpdGxlfX08L2gxPlxcblxcbjxwPnt7e3RyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQuc2F2ZWRfbG9jYWxseX19fTwvcD5cXG5cXG48YnIgLz5cXG5cXG48cD57e3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LmdvdG9fYWNjb3VudH19fTwvcD5cXG5cXG48aW5wdXRcXG4gIGlkPVxcXCJjaG9vc2UtbmFtZVxcXCJcXG4gIG1heGxlbmd0aD1cXFwiMzBcXFwiXFxuICBtaW5sZW5ndGg9XFxcIjFcXFwiXFxuICBwbGFjZWhvbGRlcj1cXFwie3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnBsYWNlaG9sZGVyfX1cXFwiXFxuLz5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxzdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5jcmVhdGVkLW91dGZpdC1wb3B1cCAuZmxhdnItb3V0ZXIgLmZsYXZyLW1lc3NhZ2U6OmFmdGVyIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiKTt0LmIodC52KHQuZihcInVybFwiLGMscCwwKSkpO3QuYihcIik7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8aDE+XCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIjwvaDE+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxwPlwiKTt0LmIodC50KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LnNhdmVkX2xvY2FsbHlcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxiciAvPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudCh0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmNsaWNrX291dGZpdC5nb3RvX2FjY291bnRcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPHN0eWxlPlxcbiAgLmNyZWF0ZWQtb3V0Zml0LXBvcHVwIC5mbGF2ci1vdXRlciAuZmxhdnItbWVzc2FnZTo6YWZ0ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoe3t1cmx9fSk7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcXG4gIH1cXG48L3N0eWxlPlxcblxcbjxoMT57e25hbWV9fTwvaDE+XFxuXFxuPHA+e3t7dHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5jbGlja19vdXRmaXQuc2F2ZWRfbG9jYWxseX19fTwvcD5cXG5cXG48YnIgLz5cXG5cXG48cD57e3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmNsaWNrX291dGZpdC5nb3RvX2FjY291bnR9fX08L3A+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YnV0dG9uIGlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBmYXZvcml0ZXMtYWN0aW9uLWVlXFxcIj5cIik7dC5iKHQudih0LmYoXCJ0ZXh0XCIsYyxwLDApKSk7dC5iKFwiPC9idXR0b24+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGJ1dHRvbiBpZD1cXFwie3tpZH19XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIGZhdm9yaXRlcy1hY3Rpb24tZWVcXFwiPnt7dGV4dH19PC9idXR0b24+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aW1nXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBoZWlnaHQ9XFxcIjIxXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgc3R5bGU9XFxcImRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAtMnB4IGF1dG9cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIodC50KHQuZihcIm1lc3NhZ2VcIixjLHAsMCkpKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxpbWdcXG4gIHNyYz1cXFwie3tpY29ufX1cXFwiXFxuICBhbHQ9XFxcInt7bmFtZX19XFxcIlxcbiAgaGVpZ2h0PVxcXCIyMVxcXCJcXG4gIHN0eWxlPVxcXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbjogLTJweCBhdXRvXFxcIlxcbi8+XFxue3t7bWVzc2FnZX19fVxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGxpXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiaGVhZGVyLXRha2VvdmVyXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5ob21lLnRha2VvdmVyXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgc3R5bGU9XFxcInRyYW5zaXRpb246IHRyYW5zZm9ybSBlYXNlLWluLW91dCAyMDBtczsgY3Vyc29yOiBwb2ludGVyXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgb25Nb3VzZU92ZXI9XFxcInRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjMpJ1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIG9uTW91c2VPdXQ9XFxcInRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSdcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGE+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxpbWdcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzcmM9XFxcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvaG9tZS9jb25uZWN0ZWQvbG9jay5wbmdcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYWx0PVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuaG9tZS50YWtlb3ZlclwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzdHlsZT1cXFwiZmlsdGVyOiBjb250cmFzdCgwJSkgYnJpZ2h0bmVzcygyMDAlKSBcIik7aWYoIXQucyh0LmYoXCJ0YWtlb3ZlclwiLGMscCwxKSxjLHAsMSwwLDAsXCJcIikpe3QuYihcIm9wYWNpdHkoMClcIik7fTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0PVxcXCIyMVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvYT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2xpPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxsaVxcbiAgaWQ9XFxcImhlYWRlci10YWtlb3ZlclxcXCJcXG4gIHRpdGxlPVxcXCJ7e3RyYW5zbGF0ZS5ob21lLnRha2VvdmVyfX1cXFwiXFxuICBzdHlsZT1cXFwidHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UtaW4tb3V0IDIwMG1zOyBjdXJzb3I6IHBvaW50ZXJcXFwiXFxuICBvbk1vdXNlT3Zlcj1cXFwidGhpcy5zdHlsZS50cmFuc2Zvcm09J3NjYWxlKDEuMyknXFxcIlxcbiAgb25Nb3VzZU91dD1cXFwidGhpcy5zdHlsZS50cmFuc2Zvcm09J3NjYWxlKDEpJ1xcXCJcXG4+XFxuICA8YT5cXG4gICAgPGltZ1xcbiAgICAgIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC9ob21lL2Nvbm5lY3RlZC9sb2NrLnBuZ1xcXCJcXG4gICAgICBhbHQ9XFxcInt7dHJhbnNsYXRlLmhvbWUudGFrZW92ZXJ9fVxcXCJcXG4gICAgICBzdHlsZT1cXFwiZmlsdGVyOiBjb250cmFzdCgwJSkgYnJpZ2h0bmVzcygyMDAlKSB7e150YWtlb3Zlcn19b3BhY2l0eSgwKXt7L3Rha2VvdmVyfX1cXFwiXFxuICAgICAgaGVpZ2h0PVxcXCIyMVxcXCJcXG4gICAgLz5cXG4gIDwvYT5cXG48L2xpPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGFcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGlkPVxcXCJob21lLVwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgY2xhc3M9XFxcImhvbWUtY29udGVudC10aWxlIGhvbWUtY29udGVudC1zbWFsbCBob21lLWNvbnRlbnQtc21hbGwtZWVcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBocmVmPVxcXCJcIik7dC5iKHQudih0LmYoXCJocmVmXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgc3R5bGU9XFxcImJhY2tncm91bmQtaW1hZ2U6IHVybChcIik7dC5iKHQudih0LmYoXCJiYWNrZ3JvdW5kSW1hZ2VcIixjLHAsMCkpKTt0LmIoXCIpO1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8aDQ+XCIpO3QuYih0LnYodC5mKFwiaDRcIixjLHAsMCkpKTt0LmIoXCI8L2g0PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvYT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8YVxcbiAgaWQ9XFxcImhvbWUte3tpZH19XFxcIlxcbiAgY2xhc3M9XFxcImhvbWUtY29udGVudC10aWxlIGhvbWUtY29udGVudC1zbWFsbCBob21lLWNvbnRlbnQtc21hbGwtZWVcXFwiXFxuICBocmVmPVxcXCJ7e2hyZWZ9fVxcXCJcXG4gIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoe3tiYWNrZ3JvdW5kSW1hZ2V9fSk7XFxcIlxcbj5cXG4gIDxoND57e2g0fX08L2g0PlxcbjwvYT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxsaSBjbGFzcz1cXFwibWFpbi1tZW51LVwiKTt0LmIodC52KHQuZihcImNsYXNzXCIsYyxwLDApKSk7dC5iKFwiIG1haW4tbWVudS1lZVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8YSBocmVmPVxcXCJcIik7dC5iKHQudih0LmYoXCJocmVmXCIsYyxwLDApKSk7dC5iKFwiXFxcIj5cIik7dC5iKHQudih0LmYoXCJ0ZXh0XCIsYyxwLDApKSk7dC5iKFwiPC9hPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvbGk+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGxpIGNsYXNzPVxcXCJtYWluLW1lbnUte3tjbGFzc319IG1haW4tbWVudS1lZVxcXCI+XFxuICA8YSBocmVmPVxcXCJ7e2hyZWZ9fVxcXCI+e3t0ZXh0fX08L2E+XFxuPC9saT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxzdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC8qICNtYXJrZXRwbGFjZS1hYnN0cmFjdC1wdXJjaGFzZXMgYW5kICNtYXJrZXRwbGFjZS1hYnN0cmFjdC1zYWxlcyB3ZXJlXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICByZS13cml0dGVuIHRvIHRhcmdldCAjcHVyY2hhc2UtaGlzdG9yeSBhbmQgI3NhbGUtaGlzdG9yeS4gKi9cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjcHVyY2hhc2UtaGlzdG9yeSxcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNzYWxlLWhpc3Rvcnkge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDYwMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHdpZHRoOiAzNjBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNzYWxlLWhpc3RvcnkgLmFic3RyYWN0LWFjdGlvbnMsXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjcHVyY2hhc2UtaGlzdG9yeSAuYWJzdHJhY3QtYWN0aW9ucyB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdG9wOiAtNDBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZGlzcGxheTogZmxleDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogODBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjc2FsZS1oaXN0b3J5IC5hYnN0cmFjdC10aW1lLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3RvcnkgLmFic3RyYWN0LXRpbWUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBwb3NpdGlvbjogc3RhdGljO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBkaXNwbGF5OiBpbmxpbmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogYXV0bztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY29sb3I6ICNmYjg5MDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGZvbnQtd2VpZ2h0OiBib2xkO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmb250LXNpemU6IDEzcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3Rvcnkge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBtYXJnaW4tcmlnaHQ6IDgwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3Rvcnk6YmVmb3JlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY29udGVudDogXFxcIlxcXCI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdG9wOiAxMjBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgcmlnaHQ6IC00MnB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDJweCAjYWFhO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDMyMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC8qIEN1c3RvbSBmaXhlcyB0byB0aGUgbGF5b3V0ICovXCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3RvcnkgbGkge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBtYXJnaW4tbGVmdDogNHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBtYXJnaW4tcmlnaHQ6IDRweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8IS0tIFB1cmNoYXNlcyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8ZGl2IGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgaWQ9XFxcInB1cmNoYXNlLWhpc3RvcnlcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGgyIGNsYXNzPVxcXCJzZWN0aW9uLXN1YnRpdGxlXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5wdXJjaGFzZV9oaXN0b3J5XCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvaDI+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHVsIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1wdXJjaGFzZXMtaXRlbXNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO2lmKHQucyh0LmYoXCJwdXJjaGFzZXNcIixjLHAsMSksYyxwLDAsMTI4NCwyNjA5LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgICAgPGxpXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZGF0YS1pdGVtaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcIml0ZW1pZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjbGFzcz1cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICBtYXJrZXRwbGFjZS1hYnN0cmFjdCBtYXJrZXRwbGFjZS1hdWN0aW9ucy1pdGVtIG1hcmtldHBsYWNlLXNhbGVzLWl0ZW1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIEljb24gLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtaWNvblxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8aW1nIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCIgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBQcmljZXMgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGFpbmVyXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LW5hbWVcXFwiPlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRlbnRcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jdXJyZW50UHJpY2VcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIFwiKTtpZih0LnModC5mKFwiY3VycmVudFByaWNlXCIsYyxwLDEpLGMscCwwLDE3NTQsMTkyMyxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuY3VycmVudF9wcmljZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPlwiKTt0LmIodC52KHQuZChcImN1cnJlbnRQcmljZS5wcmljZVwiLGMscCwwKSkpO3QuYihcIjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCI+PC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIiAgICAgICAgICAgIDxiciAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIFwiKTtpZih0LnModC5mKFwiYnV5Tm93UHJpY2VcIixjLHAsMSksYyxwLDAsMTk4OCwyMTU2LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5idXlfbm93X3ByaWNlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+XCIpO3QuYih0LnYodC5kKFwiYnV5Tm93UHJpY2UucHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgICAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBBY3Rpb25zIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWFjdGlvbnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtdGltZVxcXCI+XCIpO3QuYih0LnYodC5mKFwiZGF0ZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBjbGFzcz1cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgbmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIG1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtY2FuY2VsXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgZGVsZXRlLWJ1dHRvblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIGRhdGEtaXRlbWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpdGVtaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuZGVsZXRlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIiAgPC91bD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPCEtLSBTYWxlcyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8ZGl2IGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgaWQ9XFxcInNhbGUtaGlzdG9yeVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8aDIgY2xhc3M9XFxcInNlY3Rpb24tc3VidGl0bGVcXFwiPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuc2FsZXNfaGlzdG9yeVwiLGMscCwwKSkpO3QuYihcIjwvaDI+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHVsIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1zYWxlcy1pdGVtc1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7aWYodC5zKHQuZihcInNhbGVzXCIsYyxwLDEpLGMscCwwLDI4NDIsNDAzNixcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiICAgIDxsaSBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3QgbWFya2V0cGxhY2Utc2FsZXMtaXRlbVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBJY29uIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWljb25cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGltZyBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gUHJpY2VzIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRhaW5lclxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jb250ZW50XFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY3VycmVudFByaWNlXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICBcIik7aWYodC5zKHQuZihcImN1cnJlbnRQcmljZVwiLGMscCwxKSxjLHAsMCwzMjI4LDMzOTEsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmN1cnJlbnRfcHJpY2VcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj5cIik7dC5iKHQudih0LmYoXCJjdXJyZW50UHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgICAgICAgICAgICA8YnIgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICBcIik7aWYodC5zKHQuZihcImJ1eU5vd1ByaWNlXCIsYyxwLDEpLGMscCwwLDM0NTYsMzYxOCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuYnV5X25vd19wcmljZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPlwiKTt0LmIodC52KHQuZihcImJ1eU5vd1ByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiICAgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gQWN0aW9ucyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1hY3Rpb25zXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LXRpbWVcXFwiPlwiKTt0LmIodC52KHQuZihcImRhdGVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXZcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgY2xhc3M9XFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIG5sLWJ1dHRvbiBubC1idXR0b24tc21cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICBtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWNhbmNlbFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIGRlbGV0ZS1idXR0b25cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmRlbGV0ZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgIDwvdWw+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPHN0eWxlPlxcbiAgLyogI21hcmtldHBsYWNlLWFic3RyYWN0LXB1cmNoYXNlcyBhbmQgI21hcmtldHBsYWNlLWFic3RyYWN0LXNhbGVzIHdlcmVcXG4gIHJlLXdyaXR0ZW4gdG8gdGFyZ2V0ICNwdXJjaGFzZS1oaXN0b3J5IGFuZCAjc2FsZS1oaXN0b3J5LiAqL1xcblxcbiAgI3B1cmNoYXNlLWhpc3RvcnksXFxuICAjc2FsZS1oaXN0b3J5IHtcXG4gICAgaGVpZ2h0OiA2MDBweDtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICB3aWR0aDogMzYwcHg7XFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gICAgdmVydGljYWwtYWxpZ246IHRvcDtcXG4gIH1cXG5cXG4gICNzYWxlLWhpc3RvcnkgLmFic3RyYWN0LWFjdGlvbnMsXFxuICAjcHVyY2hhc2UtaGlzdG9yeSAuYWJzdHJhY3QtYWN0aW9ucyB7XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgdG9wOiAtNDBweDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XFxuICAgIGhlaWdodDogODBweDtcXG4gIH1cXG5cXG4gICNzYWxlLWhpc3RvcnkgLmFic3RyYWN0LXRpbWUsXFxuICAjcHVyY2hhc2UtaGlzdG9yeSAuYWJzdHJhY3QtdGltZSB7XFxuICAgIHBvc2l0aW9uOiBzdGF0aWM7XFxuICAgIGRpc3BsYXk6IGlubGluZTtcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBjb2xvcjogI2ZiODkwMDtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgIGZvbnQtc2l6ZTogMTNweDtcXG4gIH1cXG5cXG4gICNwdXJjaGFzZS1oaXN0b3J5IHtcXG4gICAgbWFyZ2luLXJpZ2h0OiA4MHB4O1xcbiAgfVxcblxcbiAgI3B1cmNoYXNlLWhpc3Rvcnk6YmVmb3JlIHtcXG4gICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgdG9wOiAxMjBweDtcXG4gICAgcmlnaHQ6IC00MnB4O1xcbiAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDJweCAjYWFhO1xcbiAgICBoZWlnaHQ6IDMyMHB4O1xcbiAgfVxcblxcbiAgLyogQ3VzdG9tIGZpeGVzIHRvIHRoZSBsYXlvdXQgKi9cXG5cXG4gICNwdXJjaGFzZS1oaXN0b3J5IGxpIHtcXG4gICAgbWFyZ2luLWxlZnQ6IDRweDtcXG4gICAgbWFyZ2luLXJpZ2h0OiA0cHg7XFxuICB9XFxuPC9zdHlsZT5cXG5cXG48IS0tIFB1cmNoYXNlcyAtLT5cXG48ZGl2IGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgaWQ9XFxcInB1cmNoYXNlLWhpc3RvcnlcXFwiPlxcbiAgPGgyIGNsYXNzPVxcXCJzZWN0aW9uLXN1YnRpdGxlXFxcIj5cXG4gICAge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLnB1cmNoYXNlX2hpc3Rvcnl9fVxcbiAgPC9oMj5cXG5cXG4gIDx1bCBjbGFzcz1cXFwibWFya2V0cGxhY2UtcHVyY2hhc2VzLWl0ZW1zXFxcIj5cXG4gICAge3sjcHVyY2hhc2VzfX1cXG4gICAgPGxpXFxuICAgICAgZGF0YS1pdGVtaWQ9XFxcInt7aXRlbWlkfX1cXFwiXFxuICAgICAgY2xhc3M9XFxcIlxcbiAgICAgICAgbWFya2V0cGxhY2UtYWJzdHJhY3QgbWFya2V0cGxhY2UtYXVjdGlvbnMtaXRlbSBtYXJrZXRwbGFjZS1zYWxlcy1pdGVtXFxuICAgICAgXFxcIlxcbiAgICA+XFxuICAgICAgPCEtLSBJY29uIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWljb25cXFwiPlxcbiAgICAgICAgPGltZyBzcmM9XFxcInt7aWNvbn19XFxcIiAvPlxcbiAgICAgIDwvZGl2PlxcblxcbiAgICAgIDwhLS0gUHJpY2VzIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRhaW5lclxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj57e25hbWV9fTwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGVudFxcXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWN1cnJlbnRQcmljZVxcXCI+XFxuICAgICAgICAgICAge3sjY3VycmVudFByaWNlfX0ge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmN1cnJlbnRfcHJpY2V9fVxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj57e2N1cnJlbnRQcmljZS5wcmljZX19PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAge3svY3VycmVudFByaWNlfX1cXG4gICAgICAgICAgICA8YnIgLz5cXG4gICAgICAgICAgICB7eyNidXlOb3dQcmljZX19IHt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5idXlfbm93X3ByaWNlfX1cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+e3tidXlOb3dQcmljZS5wcmljZX19PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAge3svYnV5Tm93UHJpY2V9fVxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcblxcbiAgICAgIDwhLS0gQWN0aW9ucyAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1hY3Rpb25zXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LXRpbWVcXFwiPnt7ZGF0ZX19PC9kaXY+XFxuICAgICAgICA8ZGl2XFxuICAgICAgICAgIGNsYXNzPVxcXCJcXG4gICAgICAgICAgICBubC1idXR0b24gbmwtYnV0dG9uLXNtXFxuICAgICAgICAgICAgbWFya2V0cGxhY2UtaXRlbURldGFpbC1jYW5jZWxcXG4gICAgICAgICAgICBkZWxldGUtYnV0dG9uXFxuICAgICAgICAgIFxcXCJcXG4gICAgICAgICAgZGF0YS1pdGVtaWQ9XFxcInt7aXRlbWlkfX1cXFwiXFxuICAgICAgICA+XFxuICAgICAgICAgIHt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5kZWxldGV9fVxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvbGk+XFxuICAgIHt7L3B1cmNoYXNlc319XFxuICA8L3VsPlxcbjwvZGl2PlxcblxcbjwhLS0gU2FsZXMgLS0+XFxuPGRpdiBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3RcXFwiIGlkPVxcXCJzYWxlLWhpc3RvcnlcXFwiPlxcbiAgPGgyIGNsYXNzPVxcXCJzZWN0aW9uLXN1YnRpdGxlXFxcIj57e3RyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuc2FsZXNfaGlzdG9yeX19PC9oMj5cXG5cXG4gIDx1bCBjbGFzcz1cXFwibWFya2V0cGxhY2Utc2FsZXMtaXRlbXNcXFwiPlxcbiAgICB7eyNzYWxlc319XFxuICAgIDxsaSBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3QgbWFya2V0cGxhY2Utc2FsZXMtaXRlbVxcXCI+XFxuICAgICAgPCEtLSBJY29uIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWljb25cXFwiPlxcbiAgICAgICAgPGltZyBzcmM9XFxcInt7aWNvbn19XFxcIiAvPlxcbiAgICAgIDwvZGl2PlxcblxcbiAgICAgIDwhLS0gUHJpY2VzIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRhaW5lclxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj57e25hbWV9fTwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGVudFxcXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWN1cnJlbnRQcmljZVxcXCI+XFxuICAgICAgICAgICAge3sjY3VycmVudFByaWNlfX0ge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmN1cnJlbnRfcHJpY2V9fVxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj57e2N1cnJlbnRQcmljZX19PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAge3svY3VycmVudFByaWNlfX1cXG4gICAgICAgICAgICA8YnIgLz5cXG4gICAgICAgICAgICB7eyNidXlOb3dQcmljZX19IHt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5idXlfbm93X3ByaWNlfX1cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+e3tidXlOb3dQcmljZX19PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAge3svYnV5Tm93UHJpY2V9fVxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcblxcbiAgICAgIDwhLS0gQWN0aW9ucyAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1hY3Rpb25zXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LXRpbWVcXFwiPnt7ZGF0ZX19PC9kaXY+XFxuICAgICAgICA8ZGl2XFxuICAgICAgICAgIGNsYXNzPVxcXCJcXG4gICAgICAgICAgICBubC1idXR0b24gbmwtYnV0dG9uLXNtXFxuICAgICAgICAgICAgbWFya2V0cGxhY2UtaXRlbURldGFpbC1jYW5jZWxcXG4gICAgICAgICAgICBkZWxldGUtYnV0dG9uXFxuICAgICAgICAgIFxcXCJcXG4gICAgICAgID5cXG4gICAgICAgICAge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmRlbGV0ZX19XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9saT5cXG4gICAge3svc2FsZXN9fVxcbiAgPC91bD5cXG48L2Rpdj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXYgaWQ9XFxcImVlLW91dGZpdC10aHVtYnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHN0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Qge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvYXZhaWxhYmxlLWZhdm9yaXRlLnBuZyk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0cHggLTExcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1zaXplOiAxNzFweCAyNDRweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiA0NHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJveC1zaGFkb3c6IDAgMCA0cHggNHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLWF2YWlsYWJsZS1zbG90OjphZnRlciB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvaWNvbi1wbHVzLnBuZyk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29udGVudDogXFxcIiBcXFwiO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDZweCByZ2JhKDIzNywgMTIsIDI0NSwgMC45KSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiA3MXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGxlZnQ6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBvcGFjaXR5OiAwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0b3A6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4tb3V0IDEwMG1zO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiA2NnB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Q6aG92ZXI6OmFmdGVyLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtb3V0Zml0LXRodW1iOmhvdmVyIHAge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG9wYWNpdHk6IDE7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1vdXRmaXQtdGh1bWIgaW1nIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiA0NHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodDogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLW91dGZpdC10aHVtYiBwIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29sb3I6ICNmZmY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1mYW1pbHk6IFxcXCJBbGVncmV5YSBTYW5zIFNDXFxcIiwgc2Fucy1zZXJpZjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXNpemU6IDIycHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBsZWZ0OiA1MCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgb3BhY2l0eTogMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwYWRkaW5nOiAxMnB4IDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgcG9zaXRpb246IGFic29sdXRlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0b3A6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4tb3V0IDQwMG1zO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAxMDAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTtpZih0LnModC5mKFwib3V0Zml0c1wiLGMscCwxKSxjLHAsMCwxNjU0LDE3OTAsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiAgPGRpdiBjbGFzcz1cXFwic2xvdCBlZS1vdXRmaXQtdGh1bWJcXFwiIGRhdGEtYXJyYXktaW5kZXg9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGltZyBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwidXJsXCIsYyxwLDApKSk7dC5iKFwiXFxcIiAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8cD5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxkaXYgY2xhc3M9XFxcInNsb3QgZWUtYXZhaWxhYmxlLXNsb3RcXFwiPjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxkaXYgaWQ9XFxcImVlLW91dGZpdC10aHVtYnNcXFwiPlxcbiAgPHN0eWxlPlxcbiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Qge1xcbiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvYXZhaWxhYmxlLWZhdm9yaXRlLnBuZyk7XFxuICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0cHggLTExcHg7XFxuICAgICAgYmFja2dyb3VuZC1zaXplOiAxNzFweCAyNDRweDtcXG4gICAgICBib3JkZXItcmFkaXVzOiA0NHB4O1xcbiAgICAgIGJveC1zaGFkb3c6IDAgMCA0cHggNHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcXG4gICAgfVxcblxcbiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Q6OmFmdGVyIHtcXG4gICAgICBiYWNrZ3JvdW5kOiB1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9pY29uLXBsdXMucG5nKTtcXG4gICAgICBjb250ZW50OiBcXFwiIFxcXCI7XFxuICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgNnB4IHJnYmEoMjM3LCAxMiwgMjQ1LCAwLjkpKTtcXG4gICAgICBoZWlnaHQ6IDcxcHg7XFxuICAgICAgbGVmdDogNTAlO1xcbiAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgIHRvcDogNTAlO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgZWFzZS1pbi1vdXQgMTAwbXM7XFxuICAgICAgd2lkdGg6IDY2cHg7XFxuICAgIH1cXG5cXG4gICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLWF2YWlsYWJsZS1zbG90OmhvdmVyOjphZnRlcixcXG4gICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLW91dGZpdC10aHVtYjpob3ZlciBwIHtcXG4gICAgICBvcGFjaXR5OiAxO1xcbiAgICB9XFxuXFxuICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1vdXRmaXQtdGh1bWIgaW1nIHtcXG4gICAgICBib3JkZXItcmFkaXVzOiA0NHB4O1xcbiAgICAgIGhlaWdodDogMTAwJTtcXG4gICAgICB3aWR0aDogMTAwJTtcXG4gICAgfVxcblxcbiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtb3V0Zml0LXRodW1iIHAge1xcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG4gICAgICBjb2xvcjogI2ZmZjtcXG4gICAgICBmb250LWZhbWlseTogXFxcIkFsZWdyZXlhIFNhbnMgU0NcXFwiLCBzYW5zLXNlcmlmO1xcbiAgICAgIGZvbnQtc2l6ZTogMjJweDtcXG4gICAgICBmb250LXdlaWdodDogNzAwO1xcbiAgICAgIGxlZnQ6IDUwJTtcXG4gICAgICBsaW5lLWhlaWdodDogMjJweDtcXG4gICAgICBvcGFjaXR5OiAwO1xcbiAgICAgIHBhZGRpbmc6IDEycHggMDtcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgIHRvcDogNTAlO1xcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgZWFzZS1pbi1vdXQgNDAwbXM7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG4gIDwvc3R5bGU+XFxuXFxuICB7eyNvdXRmaXRzfX1cXG4gIDxkaXYgY2xhc3M9XFxcInNsb3QgZWUtb3V0Zml0LXRodW1iXFxcIiBkYXRhLWFycmF5LWluZGV4PVxcXCJ7e2lkfX1cXFwiPlxcbiAgICA8aW1nIGFsdD1cXFwie3tuYW1lfX1cXFwiIHNyYz1cXFwie3t1cmx9fVxcXCIgLz5cXG4gICAgPHA+e3tuYW1lfX08L3A+XFxuICA8L2Rpdj5cXG4gIHt7L291dGZpdHN9fVxcblxcbiAgPGRpdiBjbGFzcz1cXFwic2xvdCBlZS1hdmFpbGFibGUtc2xvdFxcXCI+PC9kaXY+XFxuPC9kaXY+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGkgaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBjbGFzcz1cXFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1lZVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8c3BhbiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxkaXYgY2xhc3M9XFxcImFjdGlvbi1kZXNjcmlwdGlvblxcXCI+XCIpO3QuYih0LnYodC5mKFwiYWN0aW9uRGVzY3JpcHRpb25cIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2xpPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxsaSBpZD1cXFwie3tpZH19XFxcIiBjbGFzcz1cXFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1lZVxcXCI+XFxuICA8c3BhbiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImFjdGlvbi1kZXNjcmlwdGlvblxcXCI+e3thY3Rpb25EZXNjcmlwdGlvbn19PC9kaXY+XFxuICA8L3NwYW4+XFxuPC9saT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXYgY2xhc3M9XFxcImFjY291bnQtbWlzYy1ibG9jIGFjY291bnQtZWUtYmxvYyBibG9jXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwhLS1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxzdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdGFibGUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAxMDAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB0aCB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdGV4dC1hbGlnbjogc3RhcnQ7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgcGFkZGluZzogMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLS0+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPCEtLSBTZXR0aW5ncyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxoMiBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQuZW5oYW5jZW1lbnRzXCIsYyxwLDApKSk7dC5iKFwiPC9oMj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx1bCBjbGFzcz1cXFwiYWNjb3VudC1taXNjLWFjdGlvbnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8bGlcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBpZD1cXFwiZWUtZGVidWctZW5hYmxlZFxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcImRlYnVnXCIsYyxwLDEpLGMscCwwLDM5MiwzOTgsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50LmRlYnVnX3Rvb2x0aXBcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5kZWJ1Z1wiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvbGk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxsaVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGlkPVxcXCJlZS1taW5pZ2FtZXMtZW5hYmxlZFxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcIm1pbmlnYW1lc1wiLGMscCwxKSxjLHAsMCw2MDAsNjA2LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQubWluaWdhbWVzXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGxpXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaWQ9XFxcImVlLWV4cGxvcmF0aW9ucy1lbmFibGVkXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwiZXhwbG9yYXRpb25zXCIsYyxwLDEpLGMscCwwLDc3Miw3NzgsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5leHBsb3JhdGlvbnNcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8bGlcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBpZD1cXFwiZWUtbWFya2V0LWVuYWJsZWRcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gXCIpO2lmKHQucyh0LmYoXCJtYXJrZXRcIixjLHAsMSksYyxwLDAsOTM4LDk0NCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50Lm1hcmtldFwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvbGk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxsaSBpZD1cXFwiZWUtaW1wb3J0XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQuaW1wb3J0XCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGxpIGlkPVxcXCJlZS1leHBvcnRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5leHBvcnRcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC91bD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8IS0tIEV4cGxvcmF0aW9uc1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGgzIGNsYXNzPVxcXCJzZWN0aW9uLXRpdGxlXFxcIj5FeHBsb3JhdGlvbnM8L2gzPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHRhYmxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8dGhlYWQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRoPkxvY2F0aW9uPC90aD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGg+RGVsZXRlPC90aD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC90aGVhZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPHRib2R5PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5Sb2NrPC90ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5EZWxldGU8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L3RkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L3Rib2R5PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC90YWJsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxkaXYgY2xhc3M9XFxcImFjY291bnQtbWlzYy1ibG9jIGFjY291bnQtZWUtYmxvYyBibG9jXFxcIj5cXG4gIDwhLS1cXG4gIDxzdHlsZT5cXG4gICAgdGFibGUge1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICB9XFxuXFxuICAgIHRoIHtcXG4gICAgICB0ZXh0LWFsaWduOiBzdGFydDtcXG4gICAgICBwYWRkaW5nOiAxZW07XFxuICAgIH1cXG4gIDwvc3R5bGU+XFxuICAtLT5cXG5cXG4gIDwhLS0gU2V0dGluZ3MgLS0+XFxuICA8aDIgY2xhc3M9XFxcInNlY3Rpb24tdGl0bGVcXFwiPnt7dHJhbnNsYXRlLmFjY291bnQuZW5oYW5jZW1lbnRzfX08L2gyPlxcbiAgPHVsIGNsYXNzPVxcXCJhY2NvdW50LW1pc2MtYWN0aW9uc1xcXCI+XFxuICAgIDxsaVxcbiAgICAgIGlkPVxcXCJlZS1kZWJ1Zy1lbmFibGVkXFxcIlxcbiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIHt7I2RlYnVnfX1hY3RpdmV7ey9kZWJ1Z319XFxcIlxcbiAgICAgIHRpdGxlPVxcXCJ7e3RyYW5zbGF0ZS5hY2NvdW50LmRlYnVnX3Rvb2x0aXB9fVxcXCJcXG4gICAgPlxcbiAgICAgIHt7dHJhbnNsYXRlLmFjY291bnQuZGVidWd9fVxcbiAgICA8L2xpPlxcbiAgICA8bGlcXG4gICAgICBpZD1cXFwiZWUtbWluaWdhbWVzLWVuYWJsZWRcXFwiXFxuICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20ge3sjbWluaWdhbWVzfX1hY3RpdmV7ey9taW5pZ2FtZXN9fVxcXCJcXG4gICAgPlxcbiAgICAgIHt7dHJhbnNsYXRlLmFjY291bnQubWluaWdhbWVzfX1cXG4gICAgPC9saT5cXG4gICAgPGxpXFxuICAgICAgaWQ9XFxcImVlLWV4cGxvcmF0aW9ucy1lbmFibGVkXFxcIlxcbiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIHt7I2V4cGxvcmF0aW9uc319YWN0aXZle3svZXhwbG9yYXRpb25zfX1cXFwiXFxuICAgID5cXG4gICAgICB7e3RyYW5zbGF0ZS5hY2NvdW50LmV4cGxvcmF0aW9uc319XFxuICAgIDwvbGk+XFxuICAgIDxsaVxcbiAgICAgIGlkPVxcXCJlZS1tYXJrZXQtZW5hYmxlZFxcXCJcXG4gICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSB7eyNtYXJrZXR9fWFjdGl2ZXt7L21hcmtldH19XFxcIlxcbiAgICA+XFxuICAgICAge3t0cmFuc2xhdGUuYWNjb3VudC5tYXJrZXR9fVxcbiAgICA8L2xpPlxcbiAgICA8bGkgaWQ9XFxcImVlLWltcG9ydFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPlxcbiAgICAgIHt7dHJhbnNsYXRlLmFjY291bnQuaW1wb3J0fX1cXG4gICAgPC9saT5cXG4gICAgPGxpIGlkPVxcXCJlZS1leHBvcnRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5cXG4gICAgICB7e3RyYW5zbGF0ZS5hY2NvdW50LmV4cG9ydH19XFxuICAgIDwvbGk+XFxuICA8L3VsPlxcblxcbiAgPCEtLSBFeHBsb3JhdGlvbnNcXG4gIDxoMyBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+RXhwbG9yYXRpb25zPC9oMz5cXG4gIDx0YWJsZT5cXG4gICAgPHRoZWFkPlxcbiAgICAgIDx0aD5Mb2NhdGlvbjwvdGg+XFxuICAgICAgPHRoPkRlbGV0ZTwvdGg+XFxuICAgIDwvdGhlYWQ+XFxuICAgIDx0Ym9keT5cXG4gICAgICA8dGQ+Um9jazwvdGQ+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+RGVsZXRlPC9kaXY+XFxuICAgICAgPC90ZD5cXG4gICAgPC90Ym9keT5cXG4gIDwvdGFibGU+XFxuICAtLT5cXG48L2Rpdj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxhIGlkPVxcXCJ3aXNobGlzdC1idXR0b25cXFwiIGNsYXNzPVxcXCJubC1idXR0b25cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC50aXRsZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9hPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxhIGlkPVxcXCJ3aXNobGlzdC1idXR0b25cXFwiIGNsYXNzPVxcXCJubC1idXR0b25cXFwiPlxcbiAge3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnRpdGxlfX1cXG48L2E+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8c3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB0YWJsZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHRleHQtYWxpZ246IGNlbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDEwMCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmFjdGlvbi1waWN0byB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogNTBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDUwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGN1cnNvcjogcG9pbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuYWN0aW9uLXBpY3RvOmhvdmVyOm5vdCguZGlzYWJsZWQpLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmVkaXQtcHJpY2U6aG92ZXIge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBhbmltYXRpb246IGJ1dHRvbi1ib3VuY2UgMzAwbXMgbGluZWFyIGZvcndhcmRzO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wNSkgY29udHJhc3QoMS4xKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuZWRpdC1wcmljZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGN1cnNvcjogcG9pbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpbWcuZGlzYWJsZWQge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuaXRlbS1pY29uIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDEwMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDEwMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvc3R5bGU+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjx0YWJsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx0aGVhZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPHRyPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0Lmljb25cIixjLHAsMCkpKTt0LmIoXCI8L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0Lm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC90aD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGg+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5zdGF0dXNcIixjLHAsMCkpKTt0LmIoXCI8L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmFjdGlvbnNcIixjLHAsMCkpKTt0LmIoXCI8L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L3RyPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC90aGVhZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx0Ym9keT5cIik7dC5iKFwiXFxuXCIgKyBpKTtpZih0LnModC5mKFwid2lzaGxpc3RcIixjLHAsMSksYyxwLDAsNzkxLDIwMjcsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiAgICA8dHIgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBkYXRhLXdlYXJhYmxlaXRlbWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJ3ZWFyYWJsZWl0ZW1pZFwiLGMscCwwKSkpO3QuYihcIlxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBJY29uIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxpbWcgY2xhc3M9XFxcIml0ZW0taWNvblxcXCIgc3JjPVxcXCJcIik7dC5iKHQudih0LmYoXCJpY29uXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC90ZD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBOYW1lIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LW5hbWVcXFwiPlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L3RkPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIFByaWNlIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXZcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgY2xhc3M9XFxcImVkaXQtcHJpY2VcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIHRpdGxlPVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmNoYW5nZV9wcmljZVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPlwiKTt0LmIodC52KHQuZihcInByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCIgYWx0PVxcXCJtYWFuYXNcXFwiPjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvdGQ+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gRXJyb3IgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPHAgY2xhc3M9XFxcImVycm9yXFxcIj5cIik7dC5iKHQudih0LmYoXCJlcnJvclwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L3RkPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIEFjdGlvbnMgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGltZ1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBjbGFzcz1cXFwiYWN0aW9uLXBpY3RvIHJlc2V0LWl0ZW0tc3RhdHVzIFwiKTtpZighdC5zKHQuZihcImVycm9yXCIsYyxwLDEpLGMscCwxLDAsMCxcIlwiKSl7dC5iKFwiZGlzYWJsZWRcIik7fTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9yZXNldC1idG4ucG5nXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICB0aXRsZT1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5yZXNldF90b29sdGlwXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QucmVzZXRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGltZ1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBjbGFzcz1cXFwiYWN0aW9uLXBpY3RvIGRlbGV0ZS13aXNobGlzdC1pdGVtXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBzcmM9XFxcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvZGVsZXRlLnBuZ1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuZGVsZXRlX3Rvb2x0aXBcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIGFsdD1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5kZWxldGVcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvdGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvdHI+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiICA8L3Rib2R5PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvdGFibGU+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPHN0eWxlPlxcbiAgdGFibGUge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgLmFjdGlvbi1waWN0byB7XFxuICAgIGhlaWdodDogNTBweDtcXG4gICAgd2lkdGg6IDUwcHg7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gIH1cXG5cXG4gIC5hY3Rpb24tcGljdG86aG92ZXI6bm90KC5kaXNhYmxlZCksXFxuICAuZWRpdC1wcmljZTpob3ZlciB7XFxuICAgIGFuaW1hdGlvbjogYnV0dG9uLWJvdW5jZSAzMDBtcyBsaW5lYXIgZm9yd2FyZHM7XFxuICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjA1KSBjb250cmFzdCgxLjEpO1xcbiAgfVxcblxcbiAgLmVkaXQtcHJpY2Uge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICB9XFxuXFxuICBpbWcuZGlzYWJsZWQge1xcbiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKTtcXG4gIH1cXG5cXG4gIC5pdGVtLWljb24ge1xcbiAgICB3aWR0aDogMTAwcHg7XFxuICAgIGhlaWdodDogMTAwcHg7XFxuICB9XFxuPC9zdHlsZT5cXG5cXG48dGFibGU+XFxuICA8dGhlYWQ+XFxuICAgIDx0cj5cXG4gICAgICA8dGg+e3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0Lmljb259fTwvdGg+XFxuICAgICAgPHRoPnt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5uYW1lfX08L3RoPlxcbiAgICAgIDx0aD57e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QucHJpY2V9fTwvdGg+XFxuICAgICAgPHRoPnt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5zdGF0dXN9fTwvdGg+XFxuICAgICAgPHRoPnt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5hY3Rpb25zfX08L3RoPlxcbiAgICA8L3RyPlxcbiAgPC90aGVhZD5cXG4gIDx0Ym9keT5cXG4gICAge3sjd2lzaGxpc3R9fVxcbiAgICA8dHIgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBkYXRhLXdlYXJhYmxlaXRlbWlkPVxcXCJ7e3dlYXJhYmxlaXRlbWlkfX1cXFwiPlxcbiAgICAgIDwhLS0gSWNvbiAtLT5cXG4gICAgICA8dGQ+XFxuICAgICAgICA8aW1nIGNsYXNzPVxcXCJpdGVtLWljb25cXFwiIHNyYz1cXFwie3tpY29ufX1cXFwiIGFsdD1cXFwie3tuYW1lfX1cXFwiIC8+XFxuICAgICAgPC90ZD5cXG5cXG4gICAgICA8IS0tIE5hbWUgLS0+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtbmFtZVxcXCI+e3tuYW1lfX08L2Rpdj5cXG4gICAgICA8L3RkPlxcblxcbiAgICAgIDwhLS0gUHJpY2UgLS0+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPGRpdlxcbiAgICAgICAgICBjbGFzcz1cXFwiZWRpdC1wcmljZVxcXCJcXG4gICAgICAgICAgdGl0bGU9XFxcInt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5jaGFuZ2VfcHJpY2V9fVxcXCJcXG4gICAgICAgID5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPnt7cHJpY2V9fTwvc3Bhbj5cXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiIGFsdD1cXFwibWFhbmFzXFxcIj48L3NwYW4+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L3RkPlxcblxcbiAgICAgIDwhLS0gRXJyb3IgLS0+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPHAgY2xhc3M9XFxcImVycm9yXFxcIj57e2Vycm9yfX08L3A+XFxuICAgICAgPC90ZD5cXG5cXG4gICAgICA8IS0tIEFjdGlvbnMgLS0+XFxuICAgICAgPHRkPlxcbiAgICAgICAgPGltZ1xcbiAgICAgICAgICBjbGFzcz1cXFwiYWN0aW9uLXBpY3RvIHJlc2V0LWl0ZW0tc3RhdHVzIHt7XmVycm9yfX1kaXNhYmxlZHt7L2Vycm9yfX1cXFwiXFxuICAgICAgICAgIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9yZXNldC1idG4ucG5nXFxcIlxcbiAgICAgICAgICB0aXRsZT1cXFwie3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnJlc2V0X3Rvb2x0aXB9fVxcXCJcXG4gICAgICAgICAgYWx0PVxcXCJ7e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QucmVzZXR9fVxcXCJcXG4gICAgICAgIC8+XFxuICAgICAgICA8aW1nXFxuICAgICAgICAgIGNsYXNzPVxcXCJhY3Rpb24tcGljdG8gZGVsZXRlLXdpc2hsaXN0LWl0ZW1cXFwiXFxuICAgICAgICAgIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9kZWxldGUucG5nXFxcIlxcbiAgICAgICAgICB0aXRsZT1cXFwie3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmRlbGV0ZV90b29sdGlwfX1cXFwiXFxuICAgICAgICAgIGFsdD1cXFwie3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmRlbGV0ZX19XFxcIlxcbiAgICAgICAgLz5cXG4gICAgICA8L3RkPlxcbiAgICA8L3RyPlxcbiAgICB7ey93aXNobGlzdH19XFxuICA8L3Rib2R5PlxcbjwvdGFibGU+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwiaW1wb3J0IHsgQm9keUxvY2F0aW9uIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL2JvZHlfbG9jYXRpb24uZW51bVwiXG5pbXBvcnQgeyBDYXRlZ29yeU51bWJlciB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9jYXRlZ29yeS5lbnVtXCJcbmltcG9ydCB7IEd1YXJkIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL2d1YXJkLmVudW1cIlxuaW1wb3J0IHsgUmFyaXR5IH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL3Jhcml0eS5lbnVtXCJcbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvdHlwZS5lbnVtXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFqYXhTZWFyY2goZGF0YToge1xuICB0eXBlPzogVHlwZVxuICBib2R5TG9jYXRpb24/OiBCb2R5TG9jYXRpb25cbiAgY2F0ZWdvcnk/OiBDYXRlZ29yeU51bWJlclxuICByYXJpdHk/OiBSYXJpdHlcbiAgcHJpY2U/OiBudW1iZXIgfCBcIlwiXG4gIGd1YXJkPzogR3VhcmRcbiAgLyoqIFBhZ2UgbnVtYmVyLCBpbmRleGVkIGJ5IDEgKi9cbiAgcGFnZTogbnVtYmVyXG4gIG5hbWU/OiBzdHJpbmdcbn0pOiBQcm9taXNlPHN0cmluZz4ge1xuICBkYXRhID0ge1xuICAgIC4uLntcbiAgICAgIHR5cGU6IFR5cGUuQWxsLFxuICAgICAgYm9keUxvY2F0aW9uOiBCb2R5TG9jYXRpb24uQWxsLFxuICAgICAgY2F0ZWdvcnk6IENhdGVnb3J5TnVtYmVyLmFsbCxcbiAgICAgIHJhcml0eTogUmFyaXR5LmFsbCxcbiAgICAgIHByaWNlOiBcIlwiLFxuICAgICAgZ3VhcmQ6IEd1YXJkLmFueSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBuYW1lOiBcIlwiLFxuICAgIH0sXG4gICAgLi4uZGF0YSxcbiAgfVxuXG4gIGNvbnN0IElURU1TX1BFUl9QQUdFID0gOFxuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgdm9pZCAkLmdldChcbiAgICAgIFwiL21hcmtldHBsYWNlL2FqYXhfc2VhcmNoXCIsXG4gICAgICB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIGZyb206IChkYXRhLnBhZ2UgLSAxKSAqIElURU1TX1BFUl9QQUdFLFxuICAgICAgICB0bzogSVRFTVNfUEVSX1BBR0UsXG4gICAgICB9LFxuICAgICAgcmVzb2x2ZVxuICAgIClcbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidXkoaXRlbUlkOiBudW1iZXIpOiBQcm9taXNlPFBhY2tldDxcIlwiPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9tYXJrZXRwbGFjZS9idXlcIixcbiAgICAgIHsgaWQ6IGl0ZW1JZCB9LFxuICAgICAgKGpzb246IFBhY2tldDxcIlwiPik6IHZvaWQgPT4ge1xuICAgICAgICBTZXNzaW9uU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwianNvblwiXG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBFeHBsb3JhdGlvblJlc3VsdHNEYXRhIH0gZnJvbSBcIi4uL2FwaS9leHBsb3JhdGlvbl9yZXN1bHRzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVFbmQoKTogUHJvbWlzZTxQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvcGV0L2NhcHR1cmUvZW5kXCIsXG4gICAgICAoanNvbjogUGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIFNlc3Npb25TdG9yYWdlLm1ldGEgPSBqc29uLm1ldGFcbiAgICAgICAgcmVzb2x2ZShqc29uKVxuXG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAkLmZsYXZyTm90aWYoanNvbi5kYXRhKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDaGFuZ2VSZWdpb25EYXRhIH0gZnJvbSBcIi4uL2FwaS9jaGFuZ2VfcmVnaW9uX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoYW5nZVJlZ2lvbihcbiAgbmV3UmVnaW9uSWQ6IG51bWJlclxuKTogUHJvbWlzZTxQYWNrZXQ8Q2hhbmdlUmVnaW9uRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxDaGFuZ2VSZWdpb25EYXRhPj4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICB2b2lkICQucG9zdChcbiAgICAgIFwiL3BldC9jaGFuZ2VSZWdpb25cIixcbiAgICAgIHsgbmV3UmVnaW9uSWQgfSxcbiAgICAgIChqc29uOiBQYWNrZXQ8Q2hhbmdlUmVnaW9uRGF0YT4pOiB2b2lkID0+IHtcbiAgICAgICAgU2Vzc2lvblN0b3JhZ2UubWV0YSA9IGpzb24ubWV0YVxuICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UmVnaW9uID0ganNvbi5kYXRhLmN1cnJlbnRSZWdpb25cblxuICAgICAgICBwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gPVxuICAgICAgICAgIHR5cGVvZiBqc29uLmRhdGEucGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoganNvbi5kYXRhLnBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvblxuXG4gICAgICAgIHRpbWVMZWZ0RXhwbG9yYXRpb24gPVxuICAgICAgICAgIHR5cGVvZiBqc29uLmRhdGEudGltZUxlZnRFeHBsb3JhdGlvbiA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IGpzb24uZGF0YS50aW1lTGVmdEV4cGxvcmF0aW9uXG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBFeHBsb3JhdGlvblJlc3VsdHNEYXRhIH0gZnJvbSBcIi4uL2FwaS9leHBsb3JhdGlvbl9yZXN1bHRzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4cGxvcmF0aW9uUmVzdWx0cygpOiBQcm9taXNlPFxuICBQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT5cbj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+PigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvcGV0L2V4cGxvcmF0aW9uUmVzdWx0c1wiLFxuICAgICAgKGpzb246IFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPik6IHZvaWQgPT4ge1xuICAgICAgICBTZXNzaW9uU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cbiIsImV4cG9ydCBlbnVtIFJlc3VsdCB7XG4gIGVycm9yID0gXCJlcnJvclwiLFxuICBzdWNjZXNzID0gXCJzdWNjZXNzXCIsXG59XG4iLCJpbXBvcnQgd2FyZHJvYmUgZnJvbSBcIi4vd2FyZHJvYmVcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFwcGVhcmFuY2VVSSgpOiB2b2lkIHtcbiAgc2V0dXBCYWNrZ3JvdW5kKClcbiAgc2V0dXBMZWZ0UGFuZWwoKVxuICBzZXR1cFJpZ2h0UGFuZWwoKVxuXG4gIGlmICh3YXJkcm9iZS5hdmFpbGFibGVJdGVtcykgYXZhaWxhYmxlSXRlbXMgPSB3YXJkcm9iZS5hdmFpbGFibGVJdGVtc1xuICBlbHNlIHdhcmRyb2JlLmF2YWlsYWJsZUl0ZW1zID0gYXZhaWxhYmxlSXRlbXNcbn1cblxuZnVuY3Rpb24gc2V0dXBCYWNrZ3JvdW5kKCk6IHZvaWQge1xuICBjb25zdCBiYWNrZ3JvdW5kID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcbiAgICBcIiNhdmF0YXItYmFja2dyb3VuZCBpbWdcIlxuICApXG4gIGlmIChiYWNrZ3JvdW5kKSB7XG4gICAgYmFja2dyb3VuZC5zdHlsZS5maWx0ZXIgPSBcInVuc2V0XCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLmhlaWdodCA9IFwidW5zZXRcIlxuICAgIGJhY2tncm91bmQuc3R5bGUubWFzayA9XG4gICAgICBcImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgYmxhY2sgNTAlLCB0cmFuc3BhcmVudCAxMDAlKVwiXG4gICAgYmFja2dyb3VuZC5zdHlsZS5taW5IZWlnaHQgPSBcIjEwMHZoXCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLm1pbldpZHRoID0gXCI1MHZ3XCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiXG4gICAgYmFja2dyb3VuZC5zdHlsZS50cmFuc2Zvcm0gPSBcInVuc2V0XCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLndpZHRoID0gXCJ1bnNldFwiXG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0dXBSaWdodFBhbmVsKCk6IHZvaWQge1xuICBjb25zdCByaWdodFBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBlYXJhbmNlLXJpZ2h0XCIpXG4gIGlmIChyaWdodFBhbmVsKSByaWdodFBhbmVsLnN0eWxlLnBhZGRpbmdUb3AgPSBcIjgwcHhcIlxufVxuXG5mdW5jdGlvbiBzZXR1cExlZnRQYW5lbCgpOiB2b2lkIHtcbiAgY29uc3QgcHJldmlld091dGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBlYXJhbmNlLXByZXZpZXctb3V0ZXJcIilcbiAgaWYgKHByZXZpZXdPdXRlcikge1xuICAgIHByZXZpZXdPdXRlci5zdHlsZS5wYWRkaW5nID0gXCIwcHhcIlxuICB9XG5cbiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwZWFyYW5jZS1wcmV2aWV3XCIpXG4gIGlmIChwcmV2aWV3KSB7XG4gICAgcHJldmlldy5zdHlsZS5sZWZ0ID0gXCIwXCJcbiAgICBwcmV2aWV3LnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiXG4gICAgcHJldmlldy5zdHlsZS50b3AgPSBcImNhbGMoNTAlIC0gdmFyKC0tdG9wYmFyLWhlaWdodCkpXCJcbiAgICBwcmV2aWV3LnN0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlWSgtNTAlKVwiXG4gIH1cblxuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNhcHBlYXJhbmNlLXByZXZpZXcgY2FudmFzXCJcbiAgKVxuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLm1heEhlaWdodCA9IFwiMTAwdmhcIlxuICAgIGNhbnZhcy5zdHlsZS5tYXhXaWR0aCA9IFwiNTB2d1wiXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IGxvYWRGYXZvdXJpdGVzIH0gZnJvbSBcIi4uL3VpL2Zhdm91cml0ZXNcIlxuaW1wb3J0IHsgbG9hZEFwcGVhcmFuY2VVSSB9IGZyb20gXCIuL2FwcGVhcmFuY2VfdWlcIlxuaW1wb3J0IHdhcmRyb2JlIGZyb20gXCIuL3dhcmRyb2JlXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWREcmVzc2luZ0V4cGVyaWVuY2UoKTogdm9pZCB7XG4gIGlmICghbG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aChcIi9wbGF5ZXIvYXBwZWFyYW5jZVwiKSkgcmV0dXJuXG4gIGxvYWRBcHBlYXJhbmNlVUkoKVxuXG4gIC8vIFNldHVwIGNhdGVnb3JpZXNcbiAgZm9yIChjb25zdCBsaSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwiI3dhcmRyb2JlLW1lbnU+bGksICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3JpZXMgbGlcIlxuICApKSB7XG4gICAgY29uc3QgeyBjYXRlZ29yeSB9ID0gbGkuZGF0YXNldFxuICAgIGlmICghY2F0ZWdvcnkpIGNvbnRpbnVlXG5cbiAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7XG4gICAgICBjYXNlIFwiYmFja2dyb3VuZFwiOlxuICAgICAgICBsaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT5cbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVlLWNhdGVnb3J5XCIpPy5yZW1vdmUoKVxuICAgICAgICApXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICBjYXNlIFwiZmF2b3JpdGVzXCI6XG4gICAgICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1jYXRlZ29yeVwiKT8ucmVtb3ZlKClcbiAgICAgICAgICBoYW5kbGVDYXRlZ29yeShjYXRlZ29yeSlcbiAgICAgICAgfSlcbiAgICAgICAgY29udGludWVcbiAgICAgIGNhc2UgXCJhdHRpY1wiOlxuICAgICAgICBjb250aW51ZVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKFwiYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXNcIilcbiAgICAgICAgICAgID8ucmVtb3ZlKClcbiAgICAgICAgICBoYW5kbGVDYXRlZ29yeShjYXRlZ29yeSlcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuLyoqIEdldCB0aGUgY2F0ZWdvcnkgY29udGFpbmVyIGZvciB0aGUgY2xpY2tlZCBjYXRlZ29yeSBhbmQgbG9hZCBpdHMgZ3JvdXBzICovXG5mdW5jdGlvbiBoYW5kbGVDYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGFwcGVhcmFuY2VJdGVtcyA9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICBpZiAoIWFwcGVhcmFuY2VJdGVtcykgcmV0dXJuXG5cbiAgY29uc3Qgb2xkQ2F0Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LSR7Y2F0ZWdvcnl9YFxuICApXG4gIGlmIChvbGRDYXRDb250YWluZXIpIHtcbiAgICBpZiAoY2F0ZWdvcnkgPT09IFwiZmF2b3JpdGVzXCIpIGxvYWRGYXZvdXJpdGVzKClcbiAgICBlbHNlIHZvaWQgaGFuZGxlR3JvdXBzKGFwcGVhcmFuY2VJdGVtcywgb2xkQ2F0Q29udGFpbmVyKVxuICAgIHJldHVyblxuICB9XG5cbiAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG4gICAgY29uc3QgbmV3Q2F0Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktJHtjYXRlZ29yeX1gXG4gICAgKVxuICAgIGlmICghbmV3Q2F0Q29udGFpbmVyKSByZXR1cm5cbiAgICBvYnNlcnZlci5kaXNjb25uZWN0KClcblxuICAgIGlmIChjYXRlZ29yeSA9PT0gXCJmYXZvcml0ZXNcIikgbG9hZEZhdm91cml0ZXMoKVxuICAgIGVsc2Ugdm9pZCBoYW5kbGVHcm91cHMoYXBwZWFyYW5jZUl0ZW1zLCBuZXdDYXRDb250YWluZXIpXG4gIH0pLm9ic2VydmUoYXBwZWFyYW5jZUl0ZW1zLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KVxufVxuXG4vKiogTG9hZCBlYWNoIGdyb3VwcyBzeW5jaHJvbm91c2x5IGFuZCBhZGQgdGhlbSB0byBhIGN1c3RvbSBjb250YWluZXIuICovXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVHcm91cHMoXG4gIGFwcGVhcmFuY2VJdGVtczogSFRNTERpdkVsZW1lbnQsXG4gIGNhdGVnb3J5Q29udGFpbmVyOiBIVE1MRGl2RWxlbWVudFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMjApKVxuXG4gIC8vIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBjYXRlZ29yeVxuICBjb25zdCB7IGNhdGVnb3J5LCBjYXRlZ29yeWlkLCBjYXRlZ29yeW5hbWUgfSA9IGNhdGVnb3J5Q29udGFpbmVyLmRhdGFzZXRcbiAgaWYgKCFjYXRlZ29yeSB8fCAhY2F0ZWdvcnlpZCB8fCAhY2F0ZWdvcnluYW1lKSByZXR1cm5cbiAgd2FyZHJvYmUuc2V0Q2F0ZWdvcnkoe1xuICAgIGNhdGVnb3J5LFxuICAgIGNhdGVnb3J5aWQ6IE51bWJlcihjYXRlZ29yeWlkKSxcbiAgICBjYXRlZ29yeW5hbWUsXG4gIH0pXG4gIGNhdGVnb3J5Q29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIilcbiAgY2F0ZWdvcnlDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXG5cbiAgLy8gU2V0dXAgYXBwZWFyYW5jZV9pdGVtc19jYXRlZ29yeVxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19jYXRlZ29yeS5odG1sXCIpXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZWUtY2F0ZWdvcnlcIik/LnJlbW92ZSgpXG4gIGFwcGVhcmFuY2VJdGVtcy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoeyBjYXRlZ29yeSwgY2F0ZWdvcnlpZCwgdHJhbnNsYXRlIH0pXG4gIClcbiAgY29uc3QgZWVJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZWUtaXRlbXNcIilcbiAgaWYgKCFlZUl0ZW1zKSByZXR1cm5cblxuICBsb2FkSGlkZGVuQ2F0ZWdvcnkoY2F0ZWdvcnkpXG4gIGZvciAoY29uc3QgbGkgb2YgY2F0ZWdvcnlDb250YWluZXIucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcbiAgICBcImxpLmFwcGVhcmFuY2UtaXRlbS1ncm91cFwiXG4gICkpIHtcbiAgICBjb25zdCB7IGdyb3VwIH0gPSBsaS5kYXRhc2V0XG4gICAgd2FyZHJvYmUuc2V0R3JvdXAoe1xuICAgICAgY2F0ZWdvcnksXG4gICAgICBjYXRlZ29yeWlkOiBOdW1iZXIoY2F0ZWdvcnlpZCksXG4gICAgICBncm91cDogTnVtYmVyKGdyb3VwKSxcbiAgICB9KVxuICAgIGlmICghZ3JvdXApIGNvbnRpbnVlXG5cbiAgICBpZiAoXG4gICAgICAhZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICAgIGAjYXBwZWFyYW5jZS1pdGVtcy1ncm91cC0ke2dyb3VwfWBcbiAgICAgIClcbiAgICApXG4gICAgICBhd2FpdCAkLmdldChcIi9wbGF5ZXIvb3Blbkdyb3VwL1wiICsgZ3JvdXAsIHZpZXcgPT5cbiAgICAgICAgYXBwZWFyYW5jZUl0ZW1zLmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLCB2aWV3KVxuICAgICAgKVxuXG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtZ3JvdXAtJHtncm91cH1gXG4gICAgKVxuICAgIGlmICghZGl2KSBjb250aW51ZVxuICAgIGRpdi5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpXG5cbiAgICBjb25zdCBzY3JpcHQgPSBkaXYucXVlcnlTZWxlY3RvcihcInNjcmlwdFwiKSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWltcGxpZWQtZXZhbFxuICAgIGlmIChzY3JpcHQpIHNldFRpbWVvdXQoc2NyaXB0LmlubmVySFRNTCwgMClcblxuICAgIC8vIENoZWNrIGlmIHRoZSBjYXRlZ29yeSBpcyBzdGlsbCBhY3RpdmVcbiAgICBpZiAoXG4gICAgICAhZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYCN3YXJkcm9iZS1tZW51IGxpW2RhdGEtY2F0ZWdvcnk9XCIke2NhdGVnb3J5fVwiXS5hY3RpdmVgXG4gICAgICApXG4gICAgKVxuICAgICAgYnJlYWtcblxuICAgIGVlSXRlbXMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgICAgXCJiZWZvcmVlbmRcIixcbiAgICAgIEFycmF5LmZyb20oZGl2LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXCJsaS5hcHBlYXJhbmNlLWl0ZW1cIikpXG4gICAgICAgIC5tYXAobGkgPT4ge1xuICAgICAgICAgIGxpLmRhdGFzZXQuY2F0ZWdvcnkgPSBjYXRlZ29yeVxuICAgICAgICAgIGxpLmRhdGFzZXQuY2F0ZWdvcnlpZCA9IGNhdGVnb3J5aWRcbiAgICAgICAgICBsaS5kYXRhc2V0Lmdyb3VwID0gZ3JvdXBcblxuICAgICAgICAgIGNvbnN0IGljb24gPSBsaS5xdWVyeVNlbGVjdG9yKFwiaW1nXCIpPy5zcmNcbiAgICAgICAgICBpZiAoIWljb24pIHJldHVybiBsaS5vdXRlckhUTUxcblxuICAgICAgICAgIHdhcmRyb2JlLnNldEl0ZW0oe1xuICAgICAgICAgICAgZ3JvdXA6IE51bWJlcihncm91cCksXG4gICAgICAgICAgICBpY29uLFxuICAgICAgICAgICAgaXRlbWlkOiBOdW1iZXIobGkuZGF0YXNldC5pdGVtaWQpLFxuICAgICAgICAgICAgbmFtZTogbGkuZGF0YXNldC5uYW1lID8/IFwiXCIsXG4gICAgICAgICAgICByYXJpdHk6IGxpLmRhdGFzZXQucmFyaXR5ID8/IFwiXCIsXG4gICAgICAgICAgICByYXJpdHluYW1lOiBsaS5kYXRhc2V0LnJhcml0eW5hbWUgPz8gXCJcIixcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIGxpLm91dGVySFRNTFxuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIlxcblwiKVxuICAgIClcblxuICAgIGluaXRpYWxpemVTZWxlY3RlZEl0ZW1zKClcbiAgICBpbml0aWFsaXplSGlkZGVuQ2F0ZWdvcmllcygpXG4gICAgd2FyZHJvYmUuYXZhaWxhYmxlSXRlbXMgPSBhdmFpbGFibGVJdGVtc1xuICB9XG5cbiAgdW5sb2FkSGlkZGVuQ2F0ZWdvcmllcygpXG59XG5cbmZ1bmN0aW9uIHVubG9hZEhpZGRlbkNhdGVnb3JpZXMoKTogdm9pZCB7XG4gIGNvbnN0IGhpZGRlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiI2FwcGVhcmFuY2UtaXRlbXMgLmFwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnk6bm90KC5hY3RpdmUpOm5vdChbZGF0YS1jYXRlZ29yeW5hbWVdKSwgI2FwcGVhcmFuY2UtaXRlbXMgc2NyaXB0XCJcbiAgKVxuICBmb3IgKGNvbnN0IGRpdiBvZiBoaWRkZW4pIHtcbiAgICBkaXYucmVtb3ZlKClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEhpZGRlbkNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgY2F0ZWdvcnlpZCA9IHdhcmRyb2JlXG4gICAgLmdldENhdGVnb3JpZXMoKVxuICAgIC5maW5kKGMgPT4gYy5jYXRlZ29yeSA9PT0gY2F0ZWdvcnkpPy5jYXRlZ29yeWlkXG4gIGlmICghY2F0ZWdvcnlpZCkgcmV0dXJuXG5cbiAgY29uc3QgZ3JvdXBzID0gd2FyZHJvYmUuZ2V0Q2F0ZWdvcnlHcm91cHMoY2F0ZWdvcnlpZClcbiAgY29uc3QgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW0uaHRtbFwiKVxuICBjb25zdCBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW1zX2dyb3VwLmh0bWxcIilcblxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIiNhcHBlYXJhbmNlLWl0ZW1zXCIpXG4gICAgPy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgICBcImJlZm9yZWVuZFwiLFxuICAgICAgZ3JvdXBzXG4gICAgICAgIC5tYXAoZ3JvdXAgPT5cbiAgICAgICAgICBncm91cFRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgICAgIGl0ZW1zOiB3YXJkcm9iZVxuICAgICAgICAgICAgICAuZ2V0SXRlbXMoZ3JvdXAuZ3JvdXApXG4gICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiBpdGVtVGVtcGxhdGUucmVuZGVyKGl0ZW0pKVxuICAgICAgICAgICAgICAuam9pbihcIlxcblwiKSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5qb2luKFwiXFxuXCIpXG4gICAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEhpZGRlbkdyb3VwKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgZ3JvdXAgPSB3YXJkcm9iZS5nZXRHcm91cChpZClcbiAgaWYgKCFncm91cCkgcmV0dXJuXG5cbiAgY29uc3QgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW0uaHRtbFwiKVxuICBjb25zdCBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW1zX2dyb3VwLmh0bWxcIilcblxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIiNhcHBlYXJhbmNlLWl0ZW1zXCIpXG4gICAgPy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgICBcImJlZm9yZWVuZFwiLFxuICAgICAgZ3JvdXBUZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgaXRlbXM6IHdhcmRyb2JlXG4gICAgICAgICAgLmdldEl0ZW1zKGdyb3VwLmdyb3VwKVxuICAgICAgICAgIC5tYXAoaXRlbSA9PiBpdGVtVGVtcGxhdGUucmVuZGVyKGl0ZW0pKVxuICAgICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgfSlcbiAgICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgaW5kZXhlZF9kYiBmcm9tIFwiLi4vaW5kZXhlZF9kYi9pbmRleGVkX2RiXCJcbmltcG9ydCB7IHBhcnNlQXZhdGFyIH0gZnJvbSBcIi4uL291dGZpdFwiXG5pbXBvcnQgeyBsb2FkRmFrZUZhdm91cml0ZXMgfSBmcm9tIFwiLi4vdWkvZmF2b3VyaXRlc1wiXG5pbXBvcnQgeyB3ZWFyT3V0Zml0IH0gZnJvbSBcIi4vZmF2b3VyaXRlc19hY3Rpb25zXCJcbmltcG9ydCB0eXBlIHsgRmF2b3VyaXRlT3V0Zml0IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9mYXZvdXJpdGVfb3V0Zml0XCJcbmltcG9ydCB0eXBlIHsgUGFyc2FibGVJdGVtIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9wYXJzYWJsZV9pdGVtXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNhdmVGYXZvdXJpdGUoKTogUHJvbWlzZTxGYXZvdXJpdGVPdXRmaXQgfCBudWxsPiB7XG4gIGNvbnN0IGZhdm91cml0ZSA9IGF3YWl0IHNob3dPdXRmaXQoKVxuICBpZiAoZmF2b3VyaXRlKSBhd2FpdCBsb2FkRmFrZUZhdm91cml0ZXMoKVxuICByZXR1cm4gZmF2b3VyaXRlXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUZhdm91cml0ZShmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBpbmRleGVkX2RiLmRlbGV0ZUZhdm91cml0ZU91dGZpdChmYXZvdXJpdGUpXG4gIGF3YWl0IGxvYWRGYWtlRmF2b3VyaXRlcygpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dPdXRmaXQoKTogUHJvbWlzZTxGYXZvdXJpdGVPdXRmaXQgfCBudWxsPiB7XG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9jcmVhdGVkX291dGZpdF9mbGF2ci5odG1sXCIpXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT5cbiAgICAkLmZsYXZyKHtcbiAgICAgIGNvbnRlbnQ6IHRlbXBsYXRlLnJlbmRlcih7IHRyYW5zbGF0ZSB9KSxcbiAgICAgIG9uQnVpbGQ6ICRjb250YWluZXIgPT4ge1xuICAgICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwibmV3LWxheW91dC1wb3B1cFwiKVxuICAgICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwiY3JlYXRlZC1vdXRmaXQtcG9wdXBcIilcblxuICAgICAgICBjb25zdCBzYXZlQnV0dG9uID1cbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxCdXR0b25FbGVtZW50PignW3JlbD1cImJ0bi1zYXZlXCJdJylcbiAgICAgICAgaWYgKCFzYXZlQnV0dG9uKSByZXR1cm5cblxuICAgICAgICBkb2N1bWVudFxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiI2Nob29zZS1uYW1lXCIpXG4gICAgICAgICAgPy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgZXZlbnQgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKSBzYXZlQnV0dG9uLmNsaWNrKClcblxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIjY2hvb3NlLW5hbWVcIik/LnZhbHVlKVxuICAgICAgICAgICAgICBzYXZlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoXCJkaXNhYmxlZFwiKVxuICAgICAgICAgICAgZWxzZSBzYXZlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJkaXNhYmxlZFwiKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgc2F2ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwibmwtYnV0dG9uXCIsIFwibmwtYnV0dG9uLWxnXCIsIFwiZGlzYWJsZWRcIilcbiAgICAgIH0sXG4gICAgICBidXR0b25zOiB7XG4gICAgICAgIGNsb3NlOiB7XG4gICAgICAgICAgdGV4dDogXCJcIixcbiAgICAgICAgICBzdHlsZTogXCJjbG9zZVwiLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzYXZlOiB7XG4gICAgICAgICAgdGV4dDogdHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5zYXZlX291dGZpdC5zYXZlLFxuICAgICAgICAgIHN0eWxlOiBcImRlZmF1bHRcIixcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiI2Nob29zZS1uYW1lXCIpPy52YWx1ZVxuICAgICAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2VcblxuICAgICAgICAgICAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gICAgICAgICAgICBpZiAoIWF2YXRhcikgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IHBhcnNlQXZhdGFyKGF2YXRhcilcblxuICAgICAgICAgICAgdm9pZCBzYXZlQWN0aW9uKG5hbWUsIGl0ZW1zLCByZXNvbHZlKVxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93RmF2b3VyaXRlKGZhdm91cml0ZTogRmF2b3VyaXRlT3V0Zml0KTogdm9pZCB7XG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9mYXZvdXJpdGVfb3V0Zml0X2ZsYXZyLmh0bWxcIilcblxuICAkLmZsYXZyKHtcbiAgICBjb250ZW50OiB0ZW1wbGF0ZS5yZW5kZXIoeyAuLi5mYXZvdXJpdGUsIHRyYW5zbGF0ZSB9KSxcbiAgICBvbkJ1aWxkOiAkY29udGFpbmVyID0+IHtcbiAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJuZXctbGF5b3V0LXBvcHVwXCIpXG4gICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwiY3JlYXRlZC1vdXRmaXQtcG9wdXBcIilcbiAgICB9LFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsb3NlOiB7XG4gICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgIHN0eWxlOiBcImNsb3NlXCIsXG4gICAgICAgIGFjdGlvbjogKCkgPT4gdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBkZWxldGU6IHtcbiAgICAgICAgdGV4dDogdHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5jbGlja19vdXRmaXQuZGVsZXRlLFxuICAgICAgICBzdHlsZTogXCJkZWZhdWx0XCIsXG4gICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgIHZvaWQgZGVsZXRlRmF2b3VyaXRlKGZhdm91cml0ZSlcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHdlYXI6IHtcbiAgICAgICAgdGV4dDogdHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5jbGlja19vdXRmaXQud2VhcixcbiAgICAgICAgc3R5bGU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBhdmF0YXIgPSBTYWNoYS5BdmF0YXIuYXZhdGFyc1tcIiNhcHBlYXJhbmNlLXByZXZpZXdcIl1cbiAgICAgICAgICBpZiAoIWF2YXRhcikgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICB2b2lkIChhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgICAgICAgICAgd2Vhck91dGZpdChhdmF0YXIsIGZhdm91cml0ZS5pdGVtcykpKClcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVBY3Rpb24oXG4gIG5hbWU6IHN0cmluZyxcbiAgaXRlbXM6IFBhcnNhYmxlSXRlbVtdLFxuICByZXNvbHZlOiAodmFsdWU6IEZhdm91cml0ZU91dGZpdCkgPT4gdm9pZFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGJsb2IgPSBhd2FpdCBuZXcgUHJvbWlzZTxCbG9iPihyZXNvbHZlID0+IHtcbiAgICBkb2N1bWVudFxuICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFwiI2FwcGVhcmFuY2UtcHJldmlldyBjYW52YXNcIilcbiAgICAgID8udG9CbG9iKGJsb2IgPT4gcmVzb2x2ZShibG9iISksIFwiaW1hZ2UvcG5nXCIsIDEpXG4gIH0pXG5cbiAgcmVzb2x2ZSh7XG4gICAgLi4uKGF3YWl0IGluZGV4ZWRfZGIuYWRkRmF2b3VyaXRlT3V0Zml0KHtcbiAgICAgIGl0ZW1zLFxuICAgICAgbmFtZSxcbiAgICAgIGJsb2IsXG4gICAgfSkpLFxuICAgIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSxcbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgQXZhdGFyIH0gZnJvbSBcIi4uL2VsZGFyeWEvYXZhdGFyXCJcbmltcG9ydCB0eXBlIHsgSXRlbSB9IGZyb20gXCIuLi9lbGRhcnlhL2l0ZW1cIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IGV4cG9ydE91dGZpdCB9IGZyb20gXCIuLi9vdXRmaXRcIlxuaW1wb3J0IHR5cGUgeyBQYXJzYWJsZUl0ZW0gfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3BhcnNhYmxlX2l0ZW1cIlxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0UHJldmlldygpOiB2b2lkIHtcbiAgZXhwb3J0T3V0Zml0KFwiI2FwcGVhcmFuY2UtcHJldmlld1wiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW1wb3J0T3V0Zml0KCk6IHZvaWQge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKVxuICBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiZmlsZVwiKVxuICBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJhY2NlcHRcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpXG4gIGlucHV0LmNsaWNrKClcblxuICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZXZlbnQgPT4ge1xuICAgIGlmICghZXZlbnQudGFyZ2V0KSByZXR1cm5cbiAgICBjb25zdCBmaWxlcyA9ICg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cbiAgICB2b2lkIGZpbGUudGV4dCgpLnRoZW4oYXN5bmMgdmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IG91dGZpdDogUGFyc2FibGVJdGVtW10gPSBKU09OLnBhcnNlKHZhbHVlKVxuICAgICAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gICAgICBpZiAoIWF2YXRhcikgcmV0dXJuXG5cbiAgICAgIGF3YWl0IHdlYXJPdXRmaXQoYXZhdGFyLCBvdXRmaXQpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2xvdGhlcygpOiB2b2lkIHtcbiAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gIGlmICghYXZhdGFyKSByZXR1cm5cblxuICBmb3IgKGxldCBpID0gYXZhdGFyLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaXRlbVJlbmRlciA9IGF2YXRhci5jaGlsZHJlbltpXVxuICAgIGlmICghaXRlbVJlbmRlcikgY29udGludWVcblxuICAgIGNvbnN0IGl0ZW0gPSBpdGVtUmVuZGVyLmdldEl0ZW0oKVxuICAgIGlmIChTYWNoYS5BdmF0YXIucmVtb3ZlSXRlbUZyb21BbGxBdmF0YXJzKGl0ZW0pKSB7XG4gICAgICAkKGAjYXBwZWFyYW5jZS1pdGVtLSR7aXRlbS5faWR9YCkucmVtb3ZlQ2xhc3MoXCJzZWxlY3RlZFwiKVxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuR3JvdXAoZ3JvdXA6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2FwcGVhcmFuY2UtaXRlbXMtZ3JvdXAtJHtncm91cH1gKSlcbiAgICAgIHJldHVybiB2b2lkIHJlc29sdmUoKVxuXG4gICAgdm9pZCAkLmdldChgL3BsYXllci9vcGVuR3JvdXAvJHtncm91cH1gLCAodmlldzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAkKHZpZXcpLmhpZGUoKS5hcHBlbmRUbyhcIiNhcHBlYXJhbmNlLWl0ZW1zXCIpXG4gICAgfSkuYWx3YXlzKHJlc29sdmUpXG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5DYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS0ke2NhdGVnb3J5fWApKVxuICAgICAgcmV0dXJuIHZvaWQgcmVzb2x2ZSgpXG5cbiAgICB2b2lkICQucG9zdChgL3BsYXllci9vcGVuQ2F0ZWdvcnkvJHtjYXRlZ29yeX1gLCAodmlldzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAkKHZpZXcpLmhpZGUoKS5hcHBlbmRUbyhcIiNhcHBlYXJhbmNlLWl0ZW1zXCIpXG4gICAgfSkuYWx3YXlzKHJlc29sdmUpXG4gIH0pXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3ZWFyT3V0Zml0KFxuICBhdmF0YXI6IEF2YXRhcixcbiAgb3V0Zml0OiBQYXJzYWJsZUl0ZW1bXVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gICQuZmxhdnJOb3RpZih0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmltcG9ydGluZylcblxuICAvLyBHZXQgYWxsIGNhdGVnb3JpZXNcbiAgY29uc3QgY2F0ZWdvcmllcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgY2xvdGhpbmcgb2Ygb3V0Zml0KVxuICAgIGlmICghYXZhaWxhYmxlSXRlbXNbY2xvdGhpbmcuaWRdKSBjYXRlZ29yaWVzLmFkZChjbG90aGluZy50eXBlKVxuXG4gIC8vIE9wZW4gYWxsIGNhdGVnb3JpZXNcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShjYXRlZ29yaWVzLnZhbHVlcygpKS5tYXAoYXN5bmMgY2F0ZWdvcnkgPT5cbiAgICAgIG9wZW5DYXRlZ29yeShjYXRlZ29yeSlcbiAgICApXG4gIClcblxuICAvLyBHZXQgYWxsIGdyb3Vwc1xuICBjb25zdCBncm91cHMgPSBuZXcgU2V0PG51bWJlcj4oKVxuICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdClcbiAgICBpZiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ncm91cD1cIiR7Y2xvdGhpbmcuZ3JvdXB9XCJdYCkgJiZcbiAgICAgICFhdmFpbGFibGVJdGVtc1tjbG90aGluZy5pZF1cbiAgICApXG4gICAgICBncm91cHMuYWRkKGNsb3RoaW5nLmdyb3VwKVxuXG4gIC8vIE9wZW4gYWxsIGdyb3Vwc1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkubWFwKGFzeW5jIGdyb3VwID0+IG9wZW5Hcm91cChncm91cCkpXG4gIClcblxuICAvLyBHZXQgdGhlIGl0ZW1zIGZyb20gYGF2YWlsYWJsZUl0ZW1zYFxuICBjb25zdCB3b3JuSXRlbXM6IEl0ZW1bXSA9IFtdXG4gIGZvciAoY29uc3QgY2xvdGhpbmcgb2Ygb3V0Zml0KSB7XG4gICAgY29uc3QgaXRlbSA9IGF2YWlsYWJsZUl0ZW1zW2Nsb3RoaW5nLmlkXVxuICAgIGlmIChpdGVtKSB3b3JuSXRlbXMucHVzaChpdGVtKVxuICB9XG5cbiAgcmVtb3ZlQ2xvdGhlcygpXG4gIGF2YXRhci5hZGRJdGVtcyh3b3JuSXRlbXMpXG4gIGluaXRpYWxpemVTZWxlY3RlZEl0ZW1zKClcbiAgaW5pdGlhbGl6ZUhpZGRlbkNhdGVnb3JpZXMoKVxuXG4gIGNvbnN0IGF2YXRhckFjdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImF2YXRhci1hY3Rpb25zXCIpXG4gIGlmIChhdmF0YXJBY3Rpb25zKSBhdmF0YXJBY3Rpb25zLnN0eWxlLmRpc3BsYXkgPSBcImluaXRpYWxcIlxuXG4gICQuZmxhdnJOb3RpZih0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmltcG9ydGVkKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBJdGVtIH0gZnJvbSBcIi4uL2VsZGFyeWEvaXRlbVwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VDYXRlZ29yeSB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hcHBlYXJhbmNlX2NhdGVnb3J5XCJcbmltcG9ydCB0eXBlIHsgQXBwZWFyYW5jZUdyb3VwIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2FwcGVhcmFuY2VfZ3JvdXBcIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlSXRlbSB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hcHBlYXJhbmNlX2l0ZW1cIlxuXG5jbGFzcyBXYXJkcm9iZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcmllczogUmVjb3JkPG51bWJlciwgQXBwZWFyYW5jZUNhdGVnb3J5PiA9IHt9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBncm91cHM6IFJlY29yZDxudW1iZXIsIEFwcGVhcmFuY2VHcm91cD4gPSB7fVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlbXM6IFJlY29yZDxudW1iZXIsIEFwcGVhcmFuY2VJdGVtPiA9IHt9XG5cbiAgYXZhaWxhYmxlSXRlbXM/OiBSZWNvcmQ8bnVtYmVyLCBJdGVtPlxuXG4gIGdldENhdGVnb3JpZXMoKTogQXBwZWFyYW5jZUNhdGVnb3J5W10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY2F0ZWdvcmllcylcbiAgfVxuXG4gIGdldENhdGVnb3J5KGlkOiBudW1iZXIpOiBBcHBlYXJhbmNlQ2F0ZWdvcnkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNhdGVnb3JpZXNbaWRdXG4gIH1cblxuICBnZXRDYXRlZ29yeUdyb3VwcyhjYXRlZ29yeWlkOiBudW1iZXIpOiBBcHBlYXJhbmNlR3JvdXBbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5ncm91cHMpLmZpbHRlcihcbiAgICAgIGdyb3VwID0+IGdyb3VwLmNhdGVnb3J5aWQgPT09IGNhdGVnb3J5aWRcbiAgICApXG4gIH1cblxuICBnZXRHcm91cChpZDogbnVtYmVyKTogQXBwZWFyYW5jZUdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncm91cHNbaWRdXG4gIH1cblxuICBnZXRHcm91cHMoKTogQXBwZWFyYW5jZUdyb3VwW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZ3JvdXBzKVxuICB9XG5cbiAgZ2V0SXRlbShpZDogbnVtYmVyKTogQXBwZWFyYW5jZUl0ZW0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLml0ZW1zW2lkXVxuICB9XG5cbiAgZ2V0SXRlbXMoZ3JvdXA6IG51bWJlcik6IEFwcGVhcmFuY2VJdGVtW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuaXRlbXMpLmZpbHRlcihpdGVtID0+IGl0ZW0uZ3JvdXAgPT09IGdyb3VwKVxuICB9XG5cbiAgc2V0Q2F0ZWdvcnkoY2F0ZWdvcnk6IEFwcGVhcmFuY2VDYXRlZ29yeSk6IHZvaWQge1xuICAgIHRoaXMuY2F0ZWdvcmllc1tjYXRlZ29yeS5jYXRlZ29yeWlkXSA9IGNhdGVnb3J5XG4gIH1cblxuICBzZXRHcm91cChncm91cDogQXBwZWFyYW5jZUdyb3VwKTogdm9pZCB7XG4gICAgdGhpcy5ncm91cHNbZ3JvdXAuZ3JvdXBdID0gZ3JvdXBcbiAgfVxuXG4gIHNldEl0ZW0oaXRlbTogQXBwZWFyYW5jZUl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zW2l0ZW0uaXRlbWlkXSA9IGl0ZW1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgV2FyZHJvYmUoKVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlczogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfYmVlbW9vdl9hbm5veWFuY2VzLnBuZ1wiLFxuICBoNDogdHJhbnNsYXRlLmNhcm91c2VsLmJlZW1vb3ZfYW5ub3lhbmNlcy50aXRsZSxcbiAgaHJlZjogXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL0JlZW1vb3YtQW5ub3lhbmNlc1wiLFxuICBpZDogXCJjYXJvdXNlbC1iZWVtb292LWFubm95YW5jZXNcIixcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLmJlZW1vb3ZfYW5ub3lhbmNlcy5zdWJ0aXRsZSxcbn1cbiIsImltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IENhcm91c2VsTmV3cyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9jYXJvdXNlbF9uZXdzXCJcblxuZXhwb3J0IGNvbnN0IGNhcm91c2VsRG93bmxvYWRGYWNlOiBDYXJvdXNlbE5ld3MgPSB7XG4gIGJhY2tncm91bmRJbWFnZTpcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF9kb3dubG9hZF9mYWNlLnBuZ1wiLFxuICBpZDogXCJjYXJvdXNlbC1kb3dubG9hZC1mYWNlXCIsXG4gIGg0OiB0cmFuc2xhdGUuY2Fyb3VzZWwuZG93bmxvYWRfZmFjZS50aXRsZSxcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLmRvd25sb2FkX2ZhY2Uuc3VidGl0bGUsXG59XG4iLCJpbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXG5cbmV4cG9ydCBjb25zdCBjYXJvdXNlbERvd25sb2FkR3VhcmRpYW46IENhcm91c2VsTmV3cyA9IHtcbiAgYmFja2dyb3VuZEltYWdlOlxuICAgIFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2Nhcm91c2VsX2Rvd25sb2FkX2d1YXJkaWFuLnBuZ1wiLFxuICBpZDogXCJjYXJvdXNlbC1kb3dubG9hZC1ndWFyZGlhblwiLFxuICBoNDogdHJhbnNsYXRlLmNhcm91c2VsLmRvd25sb2FkX2d1YXJkaWFuLnRpdGxlLFxuICBwOiB0cmFuc2xhdGUuY2Fyb3VzZWwuZG93bmxvYWRfZ3VhcmRpYW4uc3VidGl0bGUsXG59XG4iLCJpbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXG5cbmV4cG9ydCBjb25zdCBjYXJvdXNlbEVFOiBDYXJvdXNlbE5ld3MgPSB7XG4gIGJhY2tncm91bmRJbWFnZTpcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF9lbGRhcnlhX2VuaGFuY2VtZW50cy5wbmdcIixcbiAgaDQ6IHRyYW5zbGF0ZS5jYXJvdXNlbC5lbGRhcnlhX2VuaGFuY2VtZW50cy50aXRsZSxcbiAgaHJlZjogR00uaW5mby5zY3JpcHQubmFtZXNwYWNlLFxuICBpZDogXCJjYXJvdXNlbC1lbGRhcnlhLWVuaGFuY2VtZW50c1wiLFxuICBwOiB0cmFuc2xhdGUuY2Fyb3VzZWwuZWxkYXJ5YV9lbmhhbmNlbWVudHMuc3VidGl0bGUsXG59XG4iLCJpbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXG5cbmV4cG9ydCBjb25zdCBjYXJvdXNlbFRha2VvdmVyOiBDYXJvdXNlbE5ld3MgPSB7XG4gIGJhY2tncm91bmRJbWFnZTpcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF90YWtlb3Zlci5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtdGFrZW92ZXJcIixcbiAgaDQ6IHRyYW5zbGF0ZS5jYXJvdXNlbC50YWtlb3Zlci50aXRsZSxcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLnRha2VvdmVyLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcblxuZXhwb3J0IGNsYXNzIENvbnNvbGUge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBjb25zb2xlID0gY29uc29sZVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHByaXZhdGUgc3RhdGljIGdldCBkZWJ1Z2dpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExvY2FsU3RvcmFnZS5kZWJ1Z1xuICB9XG5cbiAgc3RhdGljIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cbiAgICB0aGlzLmNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBzdGF0aWMgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cbiAgICB0aGlzLmNvbnNvbGUuaW5mbyhtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyBsb2cobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmxvZyhtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG59XG4iLCJmdW5jdGlvbiBkb3dubG9hZENhbnZhcyhjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgY2FudmFzLnRvQmxvYihcbiAgICBibG9iID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcblxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gICAgICBhLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJsKVxuICAgICAgYS5zZXRBdHRyaWJ1dGUoXCJkb3dubG9hZFwiLCBgJHtuYW1lfS5wbmdgKVxuICAgICAgYS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcblxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpXG5cbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxuICAgIH0sXG4gICAgXCJpbWFnZS9wbmdcIixcbiAgICAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkRmFjZSgpOiB2b2lkIHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQ2FudmFzRWxlbWVudD4oXG4gICAgXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyIGNhbnZhc1wiXG4gIClcbiAgaWYgKCFjYW52YXMpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDb3VsZG4ndCBmaW5kIHRoZSBndWFyZGlhbidzIGZhY2UuXCIpXG4gICAgcmV0dXJuXG4gIH1cblxuICBkb3dubG9hZENhbnZhcyhjYW52YXMsIFwiZmFjZVwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRHdWFyZGlhbigpOiB2b2lkIHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQ2FudmFzRWxlbWVudD4oXG4gICAgXCIjaG9tZS1hdmF0YXItcGxheWVyIGNhbnZhc1wiXG4gIClcbiAgaWYgKCFjYW52YXMpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDb3VsZG4ndCBmaW5kIHRoZSBndWFyZGlhbi5cIilcbiAgICByZXR1cm5cbiAgfVxuXG4gIGRvd25sb2FkQ2FudmFzKGNhbnZhcywgZ2V0TmFtZSgpID8/IFwiZ3VhcmRpYW5cIilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkQXBwZWFyYW5jZSgpOiB2b2lkIHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQ2FudmFzRWxlbWVudD4oXG4gICAgXCIjYXBwZWFyYW5jZS1wcmV2aWV3IGNhbnZhc1wiXG4gIClcbiAgaWYgKCFjYW52YXMpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDb3VsZG4ndCBmaW5kIHRoZSBndWFyZGlhbi5cIilcbiAgICByZXR1cm5cbiAgfVxuXG4gIGRvd25sb2FkQ2FudmFzKGNhbnZhcywgZ2V0TmFtZSgpID8/IFwiZ3VhcmRpYW5cIilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkUHJvZmlsZSgpOiB2b2lkIHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQ2FudmFzRWxlbWVudD4oXG4gICAgXCIucGxheWVyUHJvZmlsZUF2YXRhciBjYW52YXNcIlxuICApXG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSGVhZGluZ0VsZW1lbnQ+KFxuICAgIFwiI21haW4tc2VjdGlvbiAuc2VjdGlvbi10aXRsZVwiXG4gIClcbiAgaWYgKCFjYW52YXMgfHwgIXRpdGxlKSByZXR1cm5cblxuICBkb3dubG9hZENhbnZhcyhjYW52YXMsIHRpdGxlLnRleHRDb250ZW50Py50cmltKCkgPz8gXCJndWFyZGlhblwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2F2YXRhci1tZW51LWNvbnRhaW5lci1vdXRlcj5wXCIpPy50ZXh0Q29udGVudCA/P1xuICAgIG51bGxcbiAgKVxufVxuIiwiZXhwb3J0IGVudW0gRHVyYXRpb25Vbml0IHtcbiAgbWlsbGlzZWNvbmQgPSAxLFxuICBzZWNvbmQgPSAxMDAwICogbWlsbGlzZWNvbmQsXG4gIG1pbnV0ZSA9IDYwICogc2Vjb25kLFxuICBob3VyID0gNjAgKiBtaW51dGUsXG4gIGRheSA9IDI0ICogaG91cixcbiAgd2VlayA9IDcgKiBkYXksXG59XG5cbmV4cG9ydCBjbGFzcyBEdXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IHZhbHVlOiBudW1iZXIsIHJlYWRvbmx5IHVuaXQ6IER1cmF0aW9uVW5pdCkge31cblxuICBkaXZpZGUoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24odGhpcy52YWx1ZSAvIGR1cmF0aW9uLnRvKHRoaXMudW5pdCkudmFsdWUsIHRoaXMudW5pdClcbiAgfVxuXG4gIG1pbnVzKGR1cmF0aW9uOiBEdXJhdGlvbik6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgLSBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXG4gIH1cblxuICBtdWx0aXBseShkdXJhdGlvbjogRHVyYXRpb24pOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlICogZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxuICB9XG5cbiAgcGx1cyhkdXJhdGlvbjogRHVyYXRpb24pOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlICsgZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxuICB9XG5cbiAgdG8odW5pdDogRHVyYXRpb25Vbml0KTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24oKHRoaXMudmFsdWUgKiB0aGlzLnVuaXQpIC8gdW5pdCwgdW5pdClcbiAgfVxufVxuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuaW50ZXJmYWNlIEpRdWVyeVN0YXRpYyB7XG4gIGZsYXZyOiAoZGF0YTogZmxhdnJQYXJhbXMpID0+IHZvaWRcbiAgZmxhdnJOb3RpZjogKFxuICAgIGNvbnRlbnQ6IHN0cmluZyB8IHVua25vd24sXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGlkPzogbnVtYmVyLFxuICAgIGZvcmNlPzogYm9vbGVhblxuICApID0+IHZvaWRcbn1cblxuaW50ZXJmYWNlIGZsYXZyUGFyYW1zIHtcbiAgLyoqIEFuaW1hdGUuY3NzICovXG4gIGFuaW1hdGVDbG9zaW5nPzogXCJmYWRlT3V0XCIgfCBcImZhZGVPdXRVcFwiXG4gIC8qKiBBbmltYXRlLmNzcyAqL1xuICBhbmltYXRlRW50cmFuY2U/OiBcImZhZGVJblwiIHwgXCJmYWRlSW5Eb3duXCJcbiAgLyoqIEJ1dHRvbnMgYXJlIGtleS12YWx1ZSBwYWlycyB3aGVyZSB0aGUga2V5IGlzIHRoZSAgKi9cbiAgYnV0dG9ucz86IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgc3R5bGU/OiBcImNsb3NlXCIgfCBcImRlZmF1bHRcIlxuICAgICAgdGV4dD86IHN0cmluZ1xuICAgICAgYWRkQ2xhc3M/OiBzdHJpbmdcbiAgICAgIC8qKiBAcmV0dXJucyB3aGV0aGVyIHRoZSBwb3B1cCBzaG91bGQgY2xvc2UgKi9cbiAgICAgIGFjdGlvbj86ICgkY29udGFpbmVyOiBKUXVlcnkpID0+IGJvb2xlYW5cbiAgICB9XG4gID5cbiAgLyoqIEhUTUwgY29udGVudCBvZiB0aGUgZmxhdnIgKi9cbiAgY29udGVudD86IHN0cmluZ1xuICAvKiogVHlwZSBvZiBkaWFsb2cuICovXG4gIGRpYWxvZz86IFwiYWxlcnRcIiB8IFwiY29uZmlybVwiIHwgXCJmb3JtXCIgfCBcInByb21wdFwiXG4gIG9uQnVpbGQ/OiAoJGNvbnRhaW5lcjogSlF1ZXJ5KSA9PiB2b2lkXG4gIG9uQ2FuY2VsPzogKCkgPT4gdm9pZFxuICBvbkNvbmZpcm0/OiAoKSA9PiB2b2lkXG4gIG9uU2hvdz86ICgpID0+IHZvaWRcbiAgcHJvbXB0Pzoge1xuICAgIC8qKiBEZWZhdWx0IHZhbHVlICovXG4gICAgdmFsdWU6IHN0cmluZ1xuICB9XG5cbiAgdGl0bGU/OiBzdHJpbmdcbn1cbiIsImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb24gfSBmcm9tIFwiLi90cmFuc2xhdGlvblwiXG5cbmV4cG9ydCBjb25zdCBlbjogVHJhbnNsYXRpb24gPSB7XG4gIGhvbWU6IHtcbiAgICBmb3J1bTogXCJGb3J1bVwiLFxuICAgIHNjcmlwdF9sb2FkZWQ6IGAke0dNLmluZm8uc2NyaXB0Lm5hbWV9IHYke0dNLmluZm8uc2NyaXB0LnZlcnNpb259IGxvYWRlZC5gLFxuICAgIHRha2VvdmVyOiBcIlRha2VvdmVyXCIsXG4gIH0sXG4gIHRha2VvdmVyOiB7XG4gICAgYm91Z2h0OiAobmFtZSwgcHJpY2UpID0+XG4gICAgICBgQm91Z2h0IDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmAsXG4gICAgZGlzYWJsZWQ6IFwiVGFrZW92ZXIgbW9kZSBkaXNhYmxlZC5cIixcbiAgICBlbmFibGVkOiBcIlRha2VvdmVyIG1vZGUgZW5hYmxlZC4gUGxlYXNlIGRvIG5vdCBpbnRlcmFjdCB3aXRoIHRoaXMgdGFiLlwiLFxuICB9LFxuICBjYXJvdXNlbDoge1xuICAgIGJlZW1vb3ZfYW5ub3lhbmNlczoge1xuICAgICAgdGl0bGU6IFwiQmVlbW9vdiBBbm5veWFuY2VzXCIsXG4gICAgICBzdWJ0aXRsZTogXCJCbG9jayBzb21lIG9mIEVsZGFyeWEncyBhbm5veWFuY2VzLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZmFjZToge1xuICAgICAgdGl0bGU6IFwiRG93bmxvYWQgeW91ciBndWFyZGlhbidzIGZhY2UhXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGljayBoZXJlIHRvIGRvd25sb2FkIHlvdXIgZ3VhcmRpYW4ncyBmYWNlLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZ3VhcmRpYW46IHtcbiAgICAgIHRpdGxlOiBcIkRvd25sb2FkIHlvdXIgZ3VhcmRpYW4hXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGljayBoZXJlIHRvIGRvd25sb2FkIHlvdXIgZ3VhcmRpYW4uXCIsXG4gICAgfSxcbiAgICBlbGRhcnlhX2VuaGFuY2VtZW50czoge1xuICAgICAgdGl0bGU6IGAke0dNLmluZm8uc2NyaXB0Lm5hbWV9IHYke0dNLmluZm8uc2NyaXB0LnZlcnNpb259YCxcbiAgICAgIHN1YnRpdGxlOiBHTS5pbmZvLnNjcmlwdC5kZXNjcmlwdGlvbixcbiAgICB9LFxuICAgIHRha2VvdmVyOiB7XG4gICAgICBkaXNhYmxlX3Rha2VvdmVyOiBcIkRpc2FibGUgVGFrZW92ZXJcIixcbiAgICAgIGVuYWJsZV90YWtlb3ZlcjogXCJFbmFibGUgVGFrZW92ZXJcIixcbiAgICAgIHN1YnRpdGxlOiBcIkdpdmUgdXAgdGhpcyB0YWIgdG8gcGVyZm9ybSBhdXRvbWF0ZWQgYWN0aW9ucy5cIixcbiAgICAgIHRpdGxlOiBcIlRha2VvdmVyXCIsXG4gICAgfSxcbiAgfSxcbiAgbWluaWdhbWVzOiB7XG4gICAgcGxheWluZzogbmFtZSA9PiBgUGxheWluZyA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4uLi5gLFxuICAgIHBsYXllZF9mb3I6IChuYW1lLCBtYWFuYXMpID0+XG4gICAgICBgUGxheWVkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke21hYW5hc308L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPiBlYXJuZWQuYCxcbiAgfSxcbiAgYXBwZWFyYW5jZToge1xuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGJhY2t3YXJkOiBcIk1vdmUgYmFja1wiLFxuICAgICAgZm9yd2FyZDogXCJCcmluZyBmb3J3YXJkXCIsXG4gICAgfSxcbiAgICBmYXZvdXJpdGVzOiB7XG4gICAgICBpbXBvcnRlZDogXCJJbXBvcnRlZCBvdXRmaXQhXCIsXG4gICAgICBpbXBvcnRpbmc6IFwiSW1wb3J0aW5nIG91dGZpdC4gUGxlYXNlIHdhaXQuLi5cIixcbiAgICAgIGNsaWNrX291dGZpdDoge1xuICAgICAgICBkZWxldGU6IFwiRGVsZXRlXCIsXG4gICAgICAgIGdvdG9fYWNjb3VudDogYFRvIHRyYW5zZmVyIHlvdXIgPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IGZhdm91cml0ZXMgdG8gYW5vdGhlciBicm93c2VyLCBleHBvcnQgdGhlbSBpbiB0aGUgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm15IGFjY291bnQ8L2E+IHBhZ2UuYCxcbiAgICAgICAgc2F2ZWRfbG9jYWxseTogYFRha2Ugbm90ZSB0aGF0IHRoaXMgb3V0Zml0IHdhcyBzYXZlZCBpbiA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4nIHNldHRpbmdzIGFuZCB3YXMgbm90IHNlbnQgdG8gRWxkYXJ5YSdzIHNlcnZlcnMuYCxcbiAgICAgICAgd2VhcjogXCJXZWFyXCIsXG4gICAgICB9LFxuICAgICAgc2F2ZV9vdXRmaXQ6IHtcbiAgICAgICAgZ290b19hY2NvdW50OiBgVG8gdHJhbnNmZXIgeW91ciA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4gZmF2b3VyaXRlcyB0byBhbm90aGVyIGJyb3dzZXIsIGV4cG9ydCB0aGVtIGluIHRoZSA8YSBocmVmPVwiL3VzZXIvYWNjb3VudFwiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XCI+bXkgYWNjb3VudDwvYT4gcGFnZS5gLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJOYW1lLi4uXCIsXG4gICAgICAgIHNhdmU6IFwiU2F2ZVwiLFxuICAgICAgICBzYXZlZF9sb2NhbGx5OiBgVGFrZSBub3RlIHRoYXQgdGhpcyBvdXRmaXQgd2lsbCBvbmx5IGJlIHNhdmVkIHdpdGhpbiA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4nIHNldHRpbmdzIGFuZCB3aWxsIG5vdCBiZSBzZW50IHRvIEVsZGFyeWEncyBzZXJ2ZXJzLmAsXG4gICAgICAgIHRpdGxlOiBcIlNhdmUgb3V0Zml0XCIsXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBkb3dubG9hZDogXCJEb3dubG9hZCBQTkdcIixcbiAgICAgICAgZXhwb3J0OiBcIkV4cG9ydFwiLFxuICAgICAgICBpbXBvcnQ6IFwiSW1wb3J0XCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIG1hcmtldDoge1xuICAgIGFkZF90b193aXNobGlzdDoge1xuICAgICAgYWRkZWRfdG9fd2lzaGxpc3Q6IChuYW1lLCBwcmljZSkgPT5cbiAgICAgICAgYEFkZGVkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+IHRvIHRoZSB3aXNobGlzdC5gLFxuICAgICAgaW52YWxpZF9wcmljZTogXCJUaGlzIGlzIG5vdCBhIHZhbGlkIHByaWNlLlwiLFxuICAgICAgc2F2ZTogXCJTYXZlXCIsXG4gICAgICB0ZXh0OiBcIkhvdyBtYW55IG1hYW5hcyBkbyB5b3Ugd2lzaCB0byBvZmZlciB0byBhY3F1aXJlIHRoaXMgaXRlbT9cIixcbiAgICAgIHRpdGxlOiBcIkFkZCB0byB3aXNobGlzdFwiLFxuICAgIH0sXG4gICAgYXVjdGlvbnM6IHtcbiAgICAgIGJ1eV9ub3dfcHJpY2U6IFwiQnV5IG5vdyBwcmljZSA6XCIsXG4gICAgICBjdXJyZW50X3ByaWNlOiBcIkN1cnJlbnQgcHJpY2UgOlwiLFxuICAgICAgZGVsZXRlOiBcIkRlbGV0ZVwiLFxuICAgICAgcHVyY2hhc2VfaGlzdG9yeTogXCJQdXJjaGFzZSBoaXN0b3J5XCIsXG4gICAgICBzYWxlc19oaXN0b3J5OiBcIlNhbGVzIGhpc3RvcnlcIixcbiAgICAgIGRhdGVfdGltZV9mb3JtYXQ6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW4tR0JcIiwge1xuICAgICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgICAgICBob3VyOiBcIjItZGlnaXRcIixcbiAgICAgICAgZGF5OiBcIm51bWVyaWNcIixcbiAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxuICAgICAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgY2hhbmdlX3ByaWNlOiB7XG4gICAgICBjaGFuZ2VkX3ByaWNlOiAobmFtZSwgcHJpY2UpID0+XG4gICAgICAgIGBDaGFuZ2VkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPidzIHByaWNlIGZvciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7cHJpY2V9PC9zdHJvbmc+IDxzcGFuIGNsYXNzPVwibWFhbmEtaWNvblwiIGFsdD1cIm1hYW5hc1wiPjwvc3Bhbj4uYCxcbiAgICAgIGludmFsaWRfcHJpY2U6IFwiVGhpcyBpcyBub3QgYSB2YWxpZCBwcmljZS5cIixcbiAgICAgIHNhdmU6IFwiU2F2ZVwiLFxuICAgICAgdGV4dDogXCJIb3cgbWFueSBtYWFuYXMgZG8geW91IHdpc2ggdG8gb2ZmZXIgdG8gYWNxdWlyZSB0aGlzIGl0ZW0/XCIsXG4gICAgICB0aXRsZTogXCJDaGFuZ2UgcHJpY2VcIixcbiAgICB9LFxuICAgIHdpc2hsaXN0OiB7XG4gICAgICBhc3Npc3RhbmNlOlxuICAgICAgICBcIk9uIHRoaXMgcGFnZSwgeW91IGNhbiBvcmdhbml6ZSB5b3VyIHdpc2hsaXN0IGFuZCBjaGVjayB0aGUgc3RhdHVzIG9mIHlvdXIgd2lzaGVkIGl0ZW1zLlwiLFxuICAgICAgYWN0aW9uczogXCJBY3Rpb25zXCIsXG4gICAgICBjaGFuZ2VfcHJpY2U6IFwiQ2hhbmdlIHByaWNlXCIsXG4gICAgICBkZWxldGVfdG9vbHRpcDogXCJSZW1vdmUgZnJvbSB3aXNobGlzdFwiLFxuICAgICAgZGVsZXRlOiBcIkRlbGV0ZVwiLFxuICAgICAgaWNvbjogXCJJY29uXCIsXG4gICAgICBuYW1lOiBcIk5hbWVcIixcbiAgICAgIHByaWNlOiBcIlByaWNlXCIsXG4gICAgICByZXNldF90b29sdGlwOiBcIlJlc2V0IHRoZSBlcnJvciBzdGF0dXNcIixcbiAgICAgIHJlc2V0OiBcIlJlc2V0XCIsXG4gICAgICBzdGF0dXM6IFwiU3RhdHVzXCIsXG4gICAgICB0aXRsZTogXCJXaXNobGlzdFwiLFxuICAgIH0sXG4gIH0sXG4gIGFjY291bnQ6IHtcbiAgICBkZWJ1Z190b29sdGlwOiBcIkVuYWJsZXMgb3IgZGlzYWJsZXMgbG9nZ2luZy5cIixcbiAgICBkZWJ1ZzogXCJEZWJ1Z1wiLFxuICAgIGVuaGFuY2VtZW50czogXCJFbmhhbmNlbWVudHNcIixcbiAgICBleHBsb3JhdGlvbnM6IFwiRXhwbG9yYXRpb25zXCIsXG4gICAgZXhwb3J0OiBcIkV4cG9ydCBzZXR0aW5nc1wiLFxuICAgIGltcG9ydDogXCJJbXBvcnQgc2V0dGluZ3NcIixcbiAgICBpbXBvcnRlZDogXCJJbXBvcnRlZCBzZXR0aW5ncyFcIixcbiAgICBtYXJrZXQ6IFwiTWFya2V0XCIsXG4gICAgbWluaWdhbWVzOiBcIk1pbmlnYW1lc1wiLFxuICB9LFxuICBwZXQ6IHtcbiAgICBhdXRvX2V4cGxvcmU6IFwiSGlnaGxpZ2h0XCIsXG4gIH0sXG4gIHByb2ZpbGU6IHtcbiAgICBleHBvcnRfb3V0Zml0OiBcIkV4cG9ydCBvdXRmaXRcIixcbiAgICBkb3dubG9hZF9vdXRmaXQ6IFwiRG93bmxvYWQgUE5HXCIsXG4gIH0sXG59XG5cbk9iamVjdC5mcmVlemUoZW4pXG4iLCJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25cIlxuXG5leHBvcnQgY29uc3QgZnI6IFRyYW5zbGF0aW9uID0ge1xuICBob21lOiB7XG4gICAgZm9ydW06IFwiRm9ydW1cIixcbiAgICBzY3JpcHRfbG9hZGVkOiBgJHtHTS5pbmZvLnNjcmlwdC5uYW1lfSB2JHtHTS5pbmZvLnNjcmlwdC52ZXJzaW9ufSBjaGFyZ8OpLmAsXG4gICAgdGFrZW92ZXI6IFwiVGFrZW92ZXJcIixcbiAgfSxcbiAgdGFrZW92ZXI6IHtcbiAgICBib3VnaHQ6IChuYW1lLCBwcmljZSkgPT5cbiAgICAgIGBBY2hldMOpIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBwb3VyIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPi5gLFxuICAgIGRpc2FibGVkOiBcIlRha2VvdmVyIGTDqXNhY3RpdsOpLlwiLFxuICAgIGVuYWJsZWQ6IFwiVGFrZW92ZXIgYWN0aXbDqS4gw4l2aXRlIGQnaW50w6lyYWdpciBhdmVjIGNldCBvbmdsZXQuXCIsXG4gIH0sXG4gIGNhcm91c2VsOiB7XG4gICAgYmVlbW9vdl9hbm5veWFuY2VzOiB7XG4gICAgICB0aXRsZTogXCJCZWVtb292IEFubm95YW5jZXNcIixcbiAgICAgIHN1YnRpdGxlOiBcIkJsb3F1ZSBjZXJ0YWlucyBpcnJpdGFudHMgZCdFbGRhcnlhLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZmFjZToge1xuICAgICAgdGl0bGU6IFwiVMOpbMOpY2hhcmdlIGxlIHZpc2FnZSBkZSB0YSBnYXJkaWVubmUhXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGlxdWUgaWNpIHBvdXIgdMOpbMOpY2hhcmdlciBsZSB2aXNhZ2UgZGUgdGEgZ2FyZGllbm5lLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZ3VhcmRpYW46IHtcbiAgICAgIHRpdGxlOiBcIlTDqWzDqWNoYXJnZSB0YSBnYXJkaWVubmUhXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGlxdWUgaWNpIHBvdXIgdMOpbMOpY2hhcmdlciB0YSBnYXJkaWVubmUuXCIsXG4gICAgfSxcbiAgICBlbGRhcnlhX2VuaGFuY2VtZW50czoge1xuICAgICAgdGl0bGU6IGAke0dNLmluZm8uc2NyaXB0Lm5hbWV9IHYke0dNLmluZm8uc2NyaXB0LnZlcnNpb259YCxcbiAgICAgIHN1YnRpdGxlOiBcIkFtw6lsaW9yZSBsJ2V4cMOpcmllbmNlIHV0aWxpc2F0ZXVyIGQnRWxkYXJ5YS5cIixcbiAgICB9LFxuICAgIHRha2VvdmVyOiB7XG4gICAgICBkaXNhYmxlX3Rha2VvdmVyOiBcIkTDqXNhY3RpdmUgbGUgdGFrZW92ZXJcIixcbiAgICAgIGVuYWJsZV90YWtlb3ZlcjogXCJBY3RpdmUgbGUgdGFrZW92ZXJcIixcbiAgICAgIHN1YnRpdGxlOiBcIkxhaXNzZSBjZXQgb25nbGV0IHBlcmZvcm1lciBkZXMgYWN0aW9ucyBhdXRvbWF0aXF1ZXMuXCIsXG4gICAgICB0aXRsZTogXCJUYWtlb3ZlclwiLFxuICAgIH0sXG4gIH0sXG4gIG1pbmlnYW1lczoge1xuICAgIHBsYXlpbmc6IChuYW1lOiBzdHJpbmcpID0+IGBKb3VlIMOgIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPi4uLmAsXG4gICAgcGxheWVkX2ZvcjogKG5hbWU6IHN0cmluZywgbWFhbmFzOiBudW1iZXIpID0+XG4gICAgICBgQSBqb3XDqSDDoCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4gcG91ciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7bWFhbmFzfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+IGdhZ27DqXMuYCxcbiAgfSxcbiAgYXBwZWFyYW5jZToge1xuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGJhY2t3YXJkOiBcIlZlcnMgbCdhcnJpw6hyZVwiLFxuICAgICAgZm9yd2FyZDogXCJWZXJzIGwnYXZhbnRcIixcbiAgICB9LFxuICAgIGZhdm91cml0ZXM6IHtcbiAgICAgIGltcG9ydGVkOiBcIkltcG9ydGF0aW9uIHLDqXVzc2llIVwiLFxuICAgICAgaW1wb3J0aW5nOiBcIkltcG9ydGF0aW9uIGVuIGNvdXJzLi4uXCIsXG4gICAgICBjbGlja19vdXRmaXQ6IHtcbiAgICAgICAgZGVsZXRlOiBcIlN1cHByaW1lclwiLFxuICAgICAgICBnb3RvX2FjY291bnQ6IGBQb3VyIHRyYW5zZsOpcmVyIHRlcyBmYXZvcmlzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IHZlcnMgdW4gYXV0cmUgbmF2aWdhdGV1ciwgZXhwb3J0ZS1sZXMgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm1vbiBjb21wdGU8L2E+LmAsXG4gICAgICAgIHNhdmVkX2xvY2FsbHk6IGBQcmVuZHMgbm90ZSBxdWUgY2V0dGUgdGVudWUgYSDDqXTDqSBzYXV2ZWdhcmTDqWUgbG9jYWxlbWVudCBkYW5zIGxlcyBwYXJhbcOodHJlcyBkJzxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBldCBuJ2EgcGFzIMOpdMOpIGVudm95w6llIGF1eCBzZXJ2ZXVycyBkJ0VsZGFyeWEuYCxcbiAgICAgICAgd2VhcjogXCJQb3J0ZXJcIixcbiAgICAgIH0sXG4gICAgICBzYXZlX291dGZpdDoge1xuICAgICAgICBnb3RvX2FjY291bnQ6IGBQb3VyIHRyYW5zZsOpcmVyIHRlcyBmYXZvcmlzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IHZlcnMgdW4gYXV0cmUgbmF2aWdhdGV1ciwgZXhwb3J0ZS1sZXMgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm1vbiBjb21wdGU8L2E+LmAsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIk5vbS4uLlwiLFxuICAgICAgICBzYXZlOiBcIlNhdXZlZ2FyZGVyXCIsXG4gICAgICAgIHNhdmVkX2xvY2FsbHk6IGBQcmVuZHMgbm90ZSBxdWUgY2V0dGUgdGVudWUgc2VyYSBzYXV2ZWdhcmTDqWUgbG9jYWxlbWVudCBkYW5zIGxlcyBwYXJhbcOodHJlcyBkJzxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBldCBuZSBzZXJhIHBhcyBlbnZvecOpZSBhdXggc2VydmV1cnMgZCdFbGRhcnlhLmAsXG4gICAgICAgIHRpdGxlOiBcIlNhdXZlZ2FyZGVyIGNldHRlIHRlbnVlXCIsXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBkb3dubG9hZDogXCJUw6lsw6ljaGFyZ2VyIGxlIFBOR1wiLFxuICAgICAgICBleHBvcnQ6IFwiRXhwb3J0ZXJcIixcbiAgICAgICAgaW1wb3J0OiBcIkltcG9ydGVyXCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIG1hcmtldDoge1xuICAgIGFkZF90b193aXNobGlzdDoge1xuICAgICAgYWRkZWRfdG9fd2lzaGxpc3Q6IChuYW1lOiBzdHJpbmcsIHByaWNlOiBudW1iZXIpID0+XG4gICAgICAgIGBBam91dMOpIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBwb3VyIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPiDDoCBsYSBsaXN0ZSBkZSBzb3VoYWl0cy5gLFxuICAgICAgaW52YWxpZF9wcmljZTogXCJDZSBwcml4IG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgICBzYXZlOiBcIlNhdXZlZ2FyZGVyXCIsXG4gICAgICB0ZXh0OiBcIkNvbWJpZW4gZGUgbWFhbmFzIHNvdWhhaXRlcy10dSBvZmZyaXIgcG91ciBhY3F1w6lyaXIgY2V0IGl0ZW0/XCIsXG4gICAgICB0aXRsZTogXCJBam91dGVyIMOgIGxhIGxpc3RlIGRlIHNvdWhhaXRcIixcbiAgICB9LFxuICAgIGF1Y3Rpb25zOiB7XG4gICAgICBidXlfbm93X3ByaWNlOiBcIkFjaGF0IGltbcOpZGlhdCA6XCIsXG4gICAgICBjdXJyZW50X3ByaWNlOiBcIk1pc2UgYWN0dWVsbGUgOlwiLFxuICAgICAgZGVsZXRlOiBcIlN1cHByaW1lclwiLFxuICAgICAgcHVyY2hhc2VfaGlzdG9yeTogXCJIaXN0b3JpcXVlIGQnYWNoYXRcIixcbiAgICAgIHNhbGVzX2hpc3Rvcnk6IFwiSGlzdG9yaXF1ZSBkZSB2ZW50ZVwiLFxuICAgICAgZGF0ZV90aW1lX2Zvcm1hdDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJmci1DQVwiLCB7XG4gICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgICBkYXk6IFwibnVtZXJpY1wiLFxuICAgICAgICBtb250aDogXCJsb25nXCIsXG4gICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBjaGFuZ2VfcHJpY2U6IHtcbiAgICAgIGNoYW5nZWRfcHJpY2U6IChuYW1lOiBzdHJpbmcsIHByaWNlOiBudW1iZXIpID0+XG4gICAgICAgIGBDaGFuZ8OpIGxlIHByaXggZGUgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+IHBvdXIgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmAsXG4gICAgICBpbnZhbGlkX3ByaWNlOiBcIkNlIHByaXggbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICAgIHNhdmU6IFwiU2F1dmVnYXJkZXJcIixcbiAgICAgIHRleHQ6IFwiQ29tYmllbiBkZSBtYWFuYXMgc291aGFpdGVzLXR1IG9mZnJpciBwb3VyIGFjcXXDqXJpciBjZXQgaXRlbT9cIixcbiAgICAgIHRpdGxlOiBcIkNoYW5nZXIgbGUgcHJpeFwiLFxuICAgIH0sXG4gICAgd2lzaGxpc3Q6IHtcbiAgICAgIGFzc2lzdGFuY2U6XG4gICAgICAgIFwiU3VyIGNldHRlIHBhZ2UsIHR1IHBldXggb3JnYW5pc2VyIHRhIGxpc3RlIGRlIHNvdWhhaXRzIGV0IHbDqXJpZmllciBsZSBzdGF0dXQgZGUgdGVzIGFydGljbGVzIHNvdWhhaXTDqXMuXCIsXG4gICAgICBhY3Rpb25zOiBcIkFjdGlvbnNcIixcbiAgICAgIGNoYW5nZV9wcmljZTogXCJDaGFuZ2VyIGxlIHByaXhcIixcbiAgICAgIGRlbGV0ZV90b29sdGlwOiBcIlJldGlyZXIgZGUgbGEgbGlzdGUgZGUgc291aGFpdHNcIixcbiAgICAgIGRlbGV0ZTogXCJTdXBwcmltZXJcIixcbiAgICAgIGljb246IFwiSWPDtG5lXCIsXG4gICAgICBuYW1lOiBcIk5vbVwiLFxuICAgICAgcHJpY2U6IFwiUHJpeFwiLFxuICAgICAgcmVzZXRfdG9vbHRpcDogXCJSw6lpbml0aWFsaXNlciBsJ8OpdGF0IGQnZXJyZXVyXCIsXG4gICAgICByZXNldDogXCJSw6lpbml0aWFsaXNlclwiLFxuICAgICAgc3RhdHVzOiBcIlN0YXR1dFwiLFxuICAgICAgdGl0bGU6IFwiTGlzdGUgZGUgc291aGFpdHNcIixcbiAgICB9LFxuICB9LFxuICBhY2NvdW50OiB7XG4gICAgZGVidWdfdG9vbHRpcDogXCJBY3RpdmUgb3UgZMOpc2FjdGl2ZSBsYSBqb3VybmFsaXNhdGlvbi5cIixcbiAgICBkZWJ1ZzogXCJEw6lib2dhZ2VcIixcbiAgICBlbmhhbmNlbWVudHM6IFwiQW3DqWxpb3JhdGlvbnNcIixcbiAgICBleHBsb3JhdGlvbnM6IFwiRXhwbG9yYXRpb25zXCIsXG4gICAgZXhwb3J0OiBcIkV4cG9ydGVyIGxlcyBwYXJhbcOodHJlc1wiLFxuICAgIGltcG9ydDogXCJJbXBvcnRlciBsZXMgcGFyYW3DqHRyZXNcIixcbiAgICBpbXBvcnRlZDogXCJQYXJhbcOodHJlcyBpbXBvcnTDqXNcIixcbiAgICBtYXJrZXQ6IFwiTWFyY2jDqVwiLFxuICAgIG1pbmlnYW1lczogXCJNaW5pLWpldXhcIixcbiAgfSxcbiAgcGV0OiB7XG4gICAgYXV0b19leHBsb3JlOiBcIk1hcnF1ZXJcIixcbiAgfSxcbiAgcHJvZmlsZToge1xuICAgIGV4cG9ydF9vdXRmaXQ6IFwiRXhwb3J0ZXIgbGEgdGVudWVcIixcbiAgICBkb3dubG9hZF9vdXRmaXQ6IFwiVMOpbMOpY2hhcmdlciBsZSBQTkdcIixcbiAgfSxcbn1cblxuT2JqZWN0LmZyZWV6ZShmcilcbiIsImltcG9ydCB7IGVuIH0gZnJvbSBcIi4vZW5cIlxuaW1wb3J0IHsgZnIgfSBmcm9tIFwiLi9mclwiXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25cIlxuXG5mdW5jdGlvbiB0cmFuc2xhdGlvbigpOiBUcmFuc2xhdGlvbiB7XG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5jb20uYnJcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuZGVcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuZXNcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuaHVcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuaXRcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIucGxcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIucnVcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuY29tXCIpKSByZXR1cm4gZW5cbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLmZyXCIpKSByZXR1cm4gZnJcbiAgZWxzZSByZXR1cm4gZW5cbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0ZSA9IHRyYW5zbGF0aW9uKClcbiIsImV4cG9ydCBlbnVtIERhdGFiYXNlcyB7XG4gIGVsZGFyeWFfZW5oYW5jZW1lbnRzID0gXCJlbGRhcnlhX2VuaGFuY2VtZW50c1wiLFxufVxuIiwiZXhwb3J0IGVudW0gRmllbGRzIHtcbiAgYmxvYiA9IFwiYmxvYlwiLFxuICBpZCA9IFwiaWRcIixcbiAgaXRlbXMgPSBcIml0ZW1zXCIsXG4gIG5hbWUgPSBcIm5hbWVcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgRmF2b3VyaXRlT3V0Zml0IH0gZnJvbSBcIi4uL2FwcGVhcmFuY2UvaW50ZXJmYWNlcy9mYXZvdXJpdGVfb3V0Zml0XCJcbmltcG9ydCB7IERhdGFiYXNlcyB9IGZyb20gXCIuL2RhdGFiYXNlcy5lbnVtXCJcbmltcG9ydCB7IEZpZWxkcyB9IGZyb20gXCIuL2ZpZWxkcy5lbnVtXCJcbmltcG9ydCB7IFRhYmxlcyB9IGZyb20gXCIuL3RhYmxlcy5lbnVtXCJcblxuY2xhc3MgSW5kZXhlZERCIHtcbiAgcHJpdmF0ZSBkYj86IElEQkRhdGFiYXNlXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKERhdGFiYXNlcy5lbGRhcnlhX2VuaGFuY2VtZW50cywgMSlcbiAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiBJREJEYXRhYmFzZSA9PiAodGhpcy5kYiA9IHJlcXVlc3QucmVzdWx0KVxuICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24gKHRoaXM6IElEQk9wZW5EQlJlcXVlc3QpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGRiOiBJREJEYXRhYmFzZSA9IHRoaXMucmVzdWx0XG5cbiAgICAgIGNvbnN0IG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzLCB7XG4gICAgICAgIGtleVBhdGg6IFwiaWRcIixcbiAgICAgICAgYXV0b0luY3JlbWVudDogdHJ1ZSxcbiAgICAgIH0pXG5cbiAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KEZpZWxkcy5ibG9iLCBcImJsb2JcIiwgeyB1bmlxdWU6IGZhbHNlIH0pXG4gICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleChGaWVsZHMuaXRlbXMsIFwiaXRlbXNcIiwgeyB1bmlxdWU6IGZhbHNlIH0pXG4gICAgICBvYmplY3RTdG9yZS5jcmVhdGVJbmRleChGaWVsZHMubmFtZSwgXCJuYW1lXCIsIHsgdW5pcXVlOiBmYWxzZSB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBhIG5ldyBgRmF2b3VyaXRlT3V0Zml0YCB3aXRoIHRoZSBga2V5YCBwcm9wZXJ0eSBzZXQuICovXG4gIGFzeW5jIGFkZEZhdm91cml0ZU91dGZpdChcbiAgICBmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdFxuICApOiBQcm9taXNlPEZhdm91cml0ZU91dGZpdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGIpIHJldHVybiB2b2lkIHJlamVjdCgpXG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmRiXG4gICAgICAgIC50cmFuc2FjdGlvbihbVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzXSwgXCJyZWFkd3JpdGVcIilcbiAgICAgICAgLm9iamVjdFN0b3JlKFRhYmxlcy5mYXZvdXJpdGVfb3V0Zml0cylcbiAgICAgICAgLmFkZChmYXZvdXJpdGUpXG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT5cbiAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgLi4uZmF2b3VyaXRlLFxuICAgICAgICAgIHVybDogZmF2b3VyaXRlLnVybCA/PyBVUkwuY3JlYXRlT2JqZWN0VVJMKGZhdm91cml0ZS5ibG9iKSxcbiAgICAgICAgICBpZDogTnVtYmVyKHJlcXVlc3QucmVzdWx0KSxcbiAgICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgY2xlYXJGYXZvdXJpdGVPdXRmaXRzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGIpIHJldHVybiB2b2lkIHJlamVjdCgpXG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmRiXG4gICAgICAgIC50cmFuc2FjdGlvbihbVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzXSwgXCJyZWFkd3JpdGVcIilcbiAgICAgICAgLm9iamVjdFN0b3JlKFRhYmxlcy5mYXZvdXJpdGVfb3V0Zml0cylcbiAgICAgICAgLmNsZWFyKClcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PiByZXNvbHZlKClcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlRmF2b3VyaXRlT3V0Zml0KGZhdm91cml0ZTogRmF2b3VyaXRlT3V0Zml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5kYikgcmV0dXJuIHZvaWQgcmVqZWN0KClcblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZGJcbiAgICAgICAgLnRyYW5zYWN0aW9uKFtUYWJsZXMuZmF2b3VyaXRlX291dGZpdHNdLCBcInJlYWR3cml0ZVwiKVxuICAgICAgICAub2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzKVxuICAgICAgICAuZGVsZXRlKGZhdm91cml0ZS5pZCEpXG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgICAgaWYgKGZhdm91cml0ZS51cmwpIFVSTC5yZXZva2VPYmplY3RVUkwoZmF2b3VyaXRlLnVybClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgZ2V0RmF2b3VyaXRlT3V0Zml0KGlkOiBudW1iZXIpOiBQcm9taXNlPEZhdm91cml0ZU91dGZpdD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGIpIHJldHVybiB2b2lkIHJlamVjdCgpXG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmRiXG4gICAgICAgIC50cmFuc2FjdGlvbihbVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzXSwgXCJyZWFkb25seVwiKVxuICAgICAgICAub2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzKVxuICAgICAgICAuZ2V0KGlkKVxuXG4gICAgICBjb25zdCBmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdCA9IHJlcXVlc3QucmVzdWx0XG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT5cbiAgICAgICAgcmVzb2x2ZSh7IC4uLmZhdm91cml0ZSwgdXJsOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGZhdm91cml0ZS5ibG9iKSB9KVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBnZXRGYXZvdXJpdGVPdXRmaXRzKCk6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0W10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRiKSByZXR1cm4gdm9pZCByZWplY3QoKVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5kYlxuICAgICAgICAudHJhbnNhY3Rpb24oW1RhYmxlcy5mYXZvdXJpdGVfb3V0Zml0c10sIFwicmVhZG9ubHlcIilcbiAgICAgICAgLm9iamVjdFN0b3JlKFRhYmxlcy5mYXZvdXJpdGVfb3V0Zml0cylcbiAgICAgICAgLmdldEFsbCgpXG5cbiAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IHZvaWQgPT5cbiAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICByZXF1ZXN0LnJlc3VsdC5tYXA8RmF2b3VyaXRlT3V0Zml0PigoZmF2b3VyaXRlOiBGYXZvdXJpdGVPdXRmaXQpID0+ICh7XG4gICAgICAgICAgICAuLi5mYXZvdXJpdGUsXG4gICAgICAgICAgICB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoZmF2b3VyaXRlLmJsb2IpLFxuICAgICAgICAgIH0pKVxuICAgICAgICApXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgSW5kZXhlZERCKClcbiIsImV4cG9ydCBlbnVtIFRhYmxlcyB7XG4gIGZhdm91cml0ZV9vdXRmaXRzID0gXCJmYXZvdXJpdGVfb3V0Zml0c1wiLFxufVxuIiwiZXhwb3J0IGVudW0gTG9jYWxTdG9yYWdlS2V5IHtcbiAgYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBcImF1dG9FeHBsb3JlTG9jYXRpb25zXCIsXG4gIGRlYnVnID0gXCJkZWJ1Z1wiLFxuICBleHBsb3JhdGlvbnMgPSBcImV4cGxvcmF0aW9uc1wiLFxuICBtYXJrZXQgPSBcIm1hcmtldFwiLFxuICBtaW5pZ2FtZXMgPSBcIm1pbmlnYW1lc1wiLFxuICBwdXJjaGFzZXMgPSBcInB1cmNoYXNlc1wiLFxuICBzYWxlcyA9IFwic2FsZXNcIixcbiAgdmVyc2lvbiA9IFwidmVyc2lvblwiLFxuICB3aXNobGlzdCA9IFwid2lzaGxpc3RcIixcbn1cbiIsImltcG9ydCB7IGJhc2U2NFN0cmluZ1RvQmxvYiwgYmxvYlRvQmFzZTY0U3RyaW5nIH0gZnJvbSBcImJsb2ItdXRpbFwiXG5pbXBvcnQgdHlwZSB7IEZhdm91cml0ZU91dGZpdCB9IGZyb20gXCIuLi9hcHBlYXJhbmNlL2ludGVyZmFjZXMvZmF2b3VyaXRlX291dGZpdFwiXG5pbXBvcnQgaW5kZXhlZF9kYiBmcm9tIFwiLi4vaW5kZXhlZF9kYi9pbmRleGVkX2RiXCJcbmltcG9ydCB0eXBlIHsgTWFya2V0RW50cnkgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvaW50ZXJmYWNlcy9tYXJrZXRfZW50cnlcIlxuaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9zZXR0aW5nc1wiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHR5cGUgeyBFeHBvcnRhYmxlRmF2b3VyaXRlIH0gZnJvbSBcIi4vZXhwb3J0YWJsZV9mYXZvdXJpdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlS2V5IH0gZnJvbSBcIi4vbG9jYWxfc3RvcmFnZS5lbnVtXCJcbmltcG9ydCB0eXBlIHsgU2FsZSB9IGZyb20gXCIuL3NhbGVcIlxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4vd2lzaGVkX2l0ZW1cIlxuXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9jYWxTdG9yYWdlID0gbG9jYWxTdG9yYWdlXG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc3RhdGljIGdldCBhdXRvRXhwbG9yZUxvY2F0aW9ucygpOiBBdXRvRXhwbG9yZUxvY2F0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08QXV0b0V4cGxvcmVMb2NhdGlvbltdPihcbiAgICAgIExvY2FsU3RvcmFnZUtleS5hdXRvRXhwbG9yZUxvY2F0aW9ucyxcbiAgICAgIFtdXG4gICAgKVxuICB9XG5cbiAgc3RhdGljIHNldCBhdXRvRXhwbG9yZUxvY2F0aW9ucyhsb2NhdGlvbnM6IEF1dG9FeHBsb3JlTG9jYXRpb25bXSkge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuYXV0b0V4cGxvcmVMb2NhdGlvbnMsIGxvY2F0aW9ucylcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVidWcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxib29sZWFuPihMb2NhbFN0b3JhZ2VLZXkuZGVidWcsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBkZWJ1ZyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5kZWJ1ZywgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZXhwbG9yYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5LmV4cGxvcmF0aW9ucywgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IGV4cGxvcmF0aW9ucyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5leHBsb3JhdGlvbnMsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IG1hcmtldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPGJvb2xlYW4+KExvY2FsU3RvcmFnZUtleS5tYXJrZXQsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBtYXJrZXQoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkubWFya2V0LCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCBtaW5pZ2FtZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxib29sZWFuPihMb2NhbFN0b3JhZ2VLZXkubWluaWdhbWVzLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWluaWdhbWVzKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5Lm1pbmlnYW1lcywgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcHVyY2hhc2VzKCk6IE1hcmtldEVudHJ5W10ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08TWFya2V0RW50cnlbXT4oTG9jYWxTdG9yYWdlS2V5LnB1cmNoYXNlcywgW10pXG4gIH1cblxuICBzdGF0aWMgc2V0IHB1cmNoYXNlcyhlbnRyeTogTWFya2V0RW50cnlbXSkge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkucHVyY2hhc2VzLCBlbnRyeSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2FsZXMoKTogU2FsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPFNhbGVbXT4oTG9jYWxTdG9yYWdlS2V5LnNhbGVzLCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgc2FsZXMoc2FsZTogU2FsZVtdKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5zYWxlcywgc2FsZSlcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRTZXR0aW5ncygpOiBQcm9taXNlPFNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF1dG9FeHBsb3JlTG9jYXRpb25zOiB0aGlzLmF1dG9FeHBsb3JlTG9jYXRpb25zLFxuICAgICAgZGVidWc6IHRoaXMuZGVidWcsXG4gICAgICBleHBsb3JhdGlvbnM6IHRoaXMuZXhwbG9yYXRpb25zLFxuICAgICAgZmF2b3VyaXRlczogYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIChcbiAgICAgICAgICBhd2FpdCBpbmRleGVkX2RiLmdldEZhdm91cml0ZU91dGZpdHMoKVxuICAgICAgICApLm1hcDxQcm9taXNlPEV4cG9ydGFibGVGYXZvdXJpdGU+Pihhc3luYyBmYXZvdXJpdGUgPT4gKHtcbiAgICAgICAgICBuYW1lOiBmYXZvdXJpdGUubmFtZSxcbiAgICAgICAgICBpdGVtczogZmF2b3VyaXRlLml0ZW1zLFxuICAgICAgICAgIGJhc2U2NDogYXdhaXQgYmxvYlRvQmFzZTY0U3RyaW5nKGZhdm91cml0ZS5ibG9iKSxcbiAgICAgICAgfSkpXG4gICAgICApLFxuICAgICAgbWFya2V0OiB0aGlzLm1hcmtldCxcbiAgICAgIG1pbmlnYW1lczogdGhpcy5taW5pZ2FtZXMsXG4gICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICB3aXNobGlzdDogdGhpcy53aXNobGlzdCxcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgc2V0U2V0dGluZ3Moc2V0dGluZ3M6IFNldHRpbmdzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IHNldHRpbmdzLmF1dG9FeHBsb3JlTG9jYXRpb25zXG4gICAgdGhpcy5kZWJ1ZyA9IHNldHRpbmdzLmRlYnVnXG4gICAgdGhpcy5leHBsb3JhdGlvbnMgPSBzZXR0aW5ncy5leHBsb3JhdGlvbnNcbiAgICB0aGlzLm1hcmtldCA9IHNldHRpbmdzLm1hcmtldFxuICAgIHRoaXMubWluaWdhbWVzID0gc2V0dGluZ3MubWluaWdhbWVzXG4gICAgdGhpcy52ZXJzaW9uID0gc2V0dGluZ3MudmVyc2lvblxuICAgIHRoaXMud2lzaGxpc3QgPSBzZXR0aW5ncy53aXNobGlzdFxuXG4gICAgYXdhaXQgaW5kZXhlZF9kYi5jbGVhckZhdm91cml0ZU91dGZpdHMoKVxuICAgIGZvciAoY29uc3QgZmF2b3VyaXRlIG9mIHNldHRpbmdzLmZhdm91cml0ZXMubWFwPEZhdm91cml0ZU91dGZpdD4oXG4gICAgICBmYXZvdXJpdGUgPT4gKHtcbiAgICAgICAgYmxvYjogYmFzZTY0U3RyaW5nVG9CbG9iKGZhdm91cml0ZS5iYXNlNjQpLFxuICAgICAgICBpdGVtczogZmF2b3VyaXRlLml0ZW1zLFxuICAgICAgICBuYW1lOiBmYXZvdXJpdGUubmFtZSxcbiAgICAgIH0pXG4gICAgKSkge1xuICAgICAgdm9pZCBpbmRleGVkX2RiLmFkZEZhdm91cml0ZU91dGZpdChmYXZvdXJpdGUpXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxzdHJpbmc+KExvY2FsU3RvcmFnZUtleS52ZXJzaW9uLCBcIlwiKVxuICB9XG5cbiAgc3RhdGljIHNldCB2ZXJzaW9uKHZlcnNpb246IHN0cmluZykge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkudmVyc2lvbiwgdmVyc2lvbilcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2lzaGxpc3QoKTogV2lzaGVkSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPFdpc2hlZEl0ZW1bXT4oTG9jYWxTdG9yYWdlS2V5Lndpc2hsaXN0LCBbXSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgd2lzaGxpc3QobG9jYXRpb25zOiBXaXNoZWRJdGVtW10pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5Lndpc2hsaXN0LCBsb2NhdGlvbnMpXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRJdGVtPFQ+KGtleTogTG9jYWxTdG9yYWdlS2V5LCBmYWxsYmFjazogVCk6IFQge1xuICAgIHJldHVybiA8VD4oXG4gICAgICAoSlNPTi5wYXJzZSh0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gSlNPTi5zdHJpbmdpZnkoZmFsbGJhY2spKSA/P1xuICAgICAgICBmYWxsYmFjaylcbiAgICApXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzZXRJdGVtPFQ+KGtleTogTG9jYWxTdG9yYWdlS2V5LCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpXG4gIH1cbn1cbiIsImV4cG9ydCBlbnVtIEJvZHlMb2NhdGlvbiB7XG4gIEFsbCA9IFwiXCIsXG4gIFVuZGVyd2VhciA9IDEsXG4gIFNraW5zID0gMixcbiAgVGF0dG9vcyA9IDIwLFxuICBNb3V0aHMgPSAyMSxcbiAgRXllcyA9IDMsXG4gIEhhaXIgPSA0LFxuICBTb2NrcyA9IDUsXG4gIFNob2VzID0gNixcbiAgUGFudHMgPSA3LFxuICBIYW5kQWNjZXNzb3JpZXMgPSA4LFxuICBUb3BzID0gOSxcbiAgQ29hdHMgPSAxMCxcbiAgR2xvdmVzID0gMTEsXG4gIE5lY2tsYWNlcyA9IDEyLFxuICBEcmVzc2VzID0gMTMsXG4gIEhhdHMgPSAxNCxcbiAgRmFjZUFjY2Vzc29yaWVzID0gMTUsXG4gIEZ1bmRzID0gMTYsXG4gIEJlbHRzID0gMTgsXG4gIEF0bW9zcGhlcmVzID0gMTksXG59XG4iLCJpbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4vdHlwZS5lbnVtXCJcblxuZXhwb3J0IGVudW0gQ2F0ZWdvcnlTdHJpbmcge1xuICBhbGwgPSBcIlwiLFxuICBmb29kID0gXCJmb29kXCIsXG4gIGFsY2hlbXkgPSBcImFsY2hlbXlcIixcbiAgdXRpbGl0eSA9IFwidXRpbGl0eVwiLFxuICB0YW1lID0gXCJ0YW1lXCIsXG59XG5cbmV4cG9ydCBlbnVtIENhdGVnb3J5TnVtYmVyIHtcbiAgYWxsID0gQ2F0ZWdvcnlTdHJpbmcuYWxsLFxuICBmb29kID0gMSxcbiAgYWxjaGVteSA9IFR5cGUuQ29uc3VtYWJsZSxcbiAgdXRpbGl0eSA9IDMsXG4gIHRhbWUgPSA0LFxufVxuIiwiZXhwb3J0IGVudW0gR3VhcmQge1xuICBhbnkgPSBcIlwiLFxuICBsaWdodCA9IDEsXG4gIG9ic2lkaWFuLFxuICBhYnN5bnRoZSxcbiAgc2hhZG93LFxufVxuIiwiZXhwb3J0IGVudW0gUmFyaXR5IHtcbiAgYWxsID0gXCJcIixcbiAgY29tbW9uID0gXCJjb21tb25cIixcbiAgcmFyZSA9IFwicmFyZVwiLFxuICBFcGljID0gXCJlcGljXCIsXG4gIGxlZ2VuZGFyeSA9IFwibGVnZW5kYXJ5XCIsXG4gIGV2ZW50ID0gXCJldmVudFwiLFxufVxuIiwiZXhwb3J0IGVudW0gVHlwZSB7XG4gIEFsbCA9IFwiXCIsXG4gIEJhZyA9IFwiQmFnXCIsXG4gIENvbnN1bWFibGUgPSBcIkNvbnN1bWFibGVcIixcbiAgRWdnSXRlbSA9IFwiRWdnSXRlbVwiLFxuICBQbGF5ZXJXZWFyYWJsZUl0ZW0gPSBcIlBsYXllcldlYXJhYmxlSXRlbVwiLFxuICBRdWVzdEl0ZW0gPSBcIlF1ZXN0SXRlbVwiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBCdXlOb3dQcmljZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvYnV5X25vd19wcmljZVwiXG5pbXBvcnQgdHlwZSB7IEN1cnJlbnRQcmljZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvY3VycmVudF9wcmljZVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9tYXJrZXRfZW50cnlcIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeURhdGFTZXQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL21hcmtldF9lbnRyeV9kYXRhX3NldFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRGV0YWlscyhsaTogSFRNTExJRWxlbWVudCk6IE1hcmtldEVudHJ5IHwgbnVsbCB7XG4gIGNvbnN0IG5hbWUgPSBsaS5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIi5hYnN0cmFjdC1uYW1lXCIpPy5pbm5lclRleHRcbiAgY29uc3Qgc3JjID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcIi5hYnN0cmFjdC1pY29uIGltZ1wiKT8uc3JjXG5cbiAgY29uc3QgY3VycmVudFByaWNlID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcbiAgICBcIi5wcmljZS1pdGVtW2RhdGEtYmlkc11cIlxuICApPy5kYXRhc2V0IGFzIHVua25vd24gYXMgQ3VycmVudFByaWNlXG5cbiAgY29uc3QgYnV5Tm93UHJpY2UgPSBsaS5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFxuICAgIFwiLnByaWNlLWl0ZW06bm90KFtkYXRhLWJpZHNdKVwiXG4gICk/LmRhdGFzZXQgYXMgdW5rbm93biBhcyBCdXlOb3dQcmljZVxuXG4gIGlmICghc3JjIHx8ICFuYW1lKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiB7XG4gICAgLi4uKGxpLmRhdGFzZXQgYXMgdW5rbm93biBhcyBNYXJrZXRFbnRyeURhdGFTZXQpLFxuICAgIGljb246IHNyYyxcbiAgICBuYW1lLFxuICAgIGJ1eU5vd1ByaWNlLFxuICAgIGN1cnJlbnRQcmljZSxcbiAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICB9XG59XG4iLCJpbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG5leHBvcnQgZnVuY3Rpb24gbWlncmF0ZSgpOiB2b2lkIHtcbiAgaWYgKExvY2FsU3RvcmFnZS52ZXJzaW9uID09PSBHTS5pbmZvLnNjcmlwdC52ZXJzaW9uKSByZXR1cm5cblxuICBpZiAoR00uaW5mby5zY3JpcHQudmVyc2lvbiA9PT0gXCIxLjIuMFwiKSB7XG4gICAgTG9jYWxTdG9yYWdlLnNhbGVzID0gW11cbiAgICAkLmZsYXZyTm90aWYoXCJNaWdyYXRlZCB0byB2MS4yLjAuIFlvdXIgc2FsZXMgaGlzdG9yeSB3YXMgZXJhc2VkLlwiKVxuICB9IGVsc2Uge1xuICAgIGluc3RhbGxlZCgpXG4gIH1cblxuICBMb2NhbFN0b3JhZ2UudmVyc2lvbiA9IEdNLmluZm8uc2NyaXB0LnZlcnNpb25cbn1cblxuZnVuY3Rpb24gaW5zdGFsbGVkKCk6IHZvaWQge1xuICAkLmZsYXZyTm90aWYoXG4gICAgYDxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiB2PHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0LnZlcnNpb259PC9zdHJvbmc+IGluc3RhbGxlZCFgXG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHR5cGUgeyBHZXRQcml6ZXNEYXRhIH0gZnJvbSBcIi4uL2FwaS9nZXRfcHJpemVzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgdHlwZSB7IFN0YXJ0R2FtZURhdGEgfSBmcm9tIFwiLi4vYXBpL3N0YXJ0X2dhbWVfZGF0YVwiXG5pbXBvcnQgXCIuLi9lbGRhcnlhL2pxdWVyeVwiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgZmxhcHB5IH0gZnJvbSBcIi4vZmxhcHB5XCJcbmltcG9ydCB7IGhhdGNobGluZ3MgfSBmcm9tIFwiLi9oYXRjaGxpbmdzXCJcbmltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi9taW5pZ2FtZVwiXG5pbXBvcnQgeyBwZWdnbGUgfSBmcm9tIFwiLi9wZWdnbGVcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGxheVBlZ2dsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHBsYXkocGVnZ2xlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGxheUZsYXBweSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHBsYXkoZmxhcHB5KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGxheUhhdGNobGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBwbGF5KGhhdGNobGluZ3MpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBsYXkobWluaWdhbWU6IE1pbmlnYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIERpc2FibGUgYnV0dG9uc1xuICBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPihyZXNvbHZlID0+IHtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxCdXR0b25FbGVtZW50PihcbiAgICAgICAgXCIubWluaWdhbWVzLXJ1bGVzIC5mbGF2ci1idXR0b25cIlxuICAgICAgKVxuXG4gICAgICBpZiAoYnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbClcblxuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiBidXR0b25zKSB7XG4gICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJkaXNhYmxlZFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgfVxuICAgIH0sIDI1MClcbiAgfSlcblxuICBjb25zdCBqc29uID0gYXdhaXQgZXhlY3V0ZShtaW5pZ2FtZSlcblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcbiAgJC5mbGF2ck5vdGlmKFxuICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAuLi5taW5pZ2FtZSxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS5taW5pZ2FtZXMucGxheWluZyhtaW5pZ2FtZS5uYW1lKSxcbiAgICB9KVxuICApXG5cbiAgY29uc3QgZ2FtZVRva2VuID0ganNvbi5kYXRhXG4gIGNvbnN0IHNjb3JlID0gcmFuZG9tSW50KG1pbmlnYW1lLnNjb3JlTWluLCBtaW5pZ2FtZS5zY29yZU1heClcbiAgY29uc3QgZW5jX3Rva2VuID0geG9yRW5jb2RlKGdhbWVUb2tlbiwgc2NvcmUudG9TdHJpbmcoKSlcbiAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PlxuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgcmFuZG9tSW50KG1pbmlnYW1lLmRlbGF5TWluLCBtaW5pZ2FtZS5kZWxheU1heCkpXG4gIClcblxuICBhd2FpdCBnZXRQcml6ZXMobWluaWdhbWUsIGdhbWVUb2tlbiwgc2NvcmUpXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCByYW5kb21JbnQoMTAwMCwgMzAwMCkpKVxuXG4gIGF3YWl0IHNlbmQoZW5jX3Rva2VuLCBzY29yZSwgbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpKVxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKSlcbn1cblxuZnVuY3Rpb24gcmFuZG9tSW50KG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUobWluaWdhbWU6IE1pbmlnYW1lKTogUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxTdGFydEdhbWVEYXRhPj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICh0eXBlb2YgUmVjYXB0Y2hhICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBSZWNhcHRjaGEuZXhlY3V0ZShcbiAgICAgICAgYG1pbmlnYW1lU3RhcnQke21pbmlnYW1lLm5hbWV9YCxcbiAgICAgICAgKHRva2VuKTogdm9pZCA9PlxuICAgICAgICAgIHZvaWQgc3RhcnRHYW1lKG1pbmlnYW1lLCB0b2tlbikudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgc3RhcnRHYW1lKG1pbmlnYW1lKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdClcbiAgICB9XG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0R2FtZShcbiAgbWluaWdhbWU6IE1pbmlnYW1lLFxuICByZWNhcHRjaGFUb2tlbj86IHN0cmluZ1xuKTogUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxTdGFydEdhbWVEYXRhPj4oXG4gICAgKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgIHZvaWQgJC5hamF4KHtcbiAgICAgICAgdXJsOiBcIi9taW5pZ2FtZXMvYWpheF9zdGFydEdhbWVcIixcbiAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgZGF0YTogcmVjYXB0Y2hhVG9rZW5cbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZ2FtZTogbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICByZWNhcHRjaGFUb2tlbjogcmVjYXB0Y2hhVG9rZW4sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGdhbWU6IG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3M6IChqc29uOiBQYWNrZXQ8U3RhcnRHYW1lRGF0YT4pOiB2b2lkID0+IHtcbiAgICAgICAgICByZXNvbHZlKGpzb24pXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVqZWN0KClcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UHJpemVzKFxuICBtaW5pZ2FtZTogTWluaWdhbWUsXG4gIGdhbWVUb2tlbjogc3RyaW5nLFxuICBzY29yZTogbnVtYmVyXG4pOiBQcm9taXNlPFBhY2tldDxHZXRQcml6ZXNEYXRhPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PEdldFByaXplc0RhdGE+PihcbiAgICAocmVzb2x2ZSk6IHZvaWQgPT5cbiAgICAgIHZvaWQgJC5wb3N0KFxuICAgICAgICBcIi9taW5pZ2FtZXMvYWpheF9nZXRQcml6ZXNcIixcbiAgICAgICAgeyBnYW1lOiBtaW5pZ2FtZS5uYW1lLnRvTG93ZXJDYXNlKCksIHNjb3JlOiBzY29yZSB9LFxuICAgICAgICAoanNvbjogUGFja2V0PEdldFByaXplc0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShqc29uKVxuXG4gICAgICAgICAgaWYgKGpzb24ucmVzdWx0ID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG5cbiAgICAgICAgICAgICQuZmxhdnJOb3RpZihcbiAgICAgICAgICAgICAgdGVtcGxhdGUucmVuZGVyKHtcbiAgICAgICAgICAgICAgICAuLi5taW5pZ2FtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWluaWdhbWVzLnBsYXllZF9mb3IoXG4gICAgICAgICAgICAgICAgICBtaW5pZ2FtZS5uYW1lLFxuICAgICAgICAgICAgICAgICAganNvbi5kYXRhLm1hYW5hXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9IGVsc2UgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgfSxcbiAgICAgICAgXCJqc29uXCJcbiAgICAgICkuZmFpbCgoKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcbiAgICAgICAgICByZXNvbHZlKGdldFByaXplcyhtaW5pZ2FtZSwgZ2FtZVRva2VuLCBzY29yZSkpXG4gICAgICAgIH0sIHJhbmRvbUludCgxMDAwLCAzMDAwKSlcbiAgICAgIClcbiAgKVxufVxuXG4vKipcbiAqIFPDqWN1cmlzYXRpb24gZGUgbCdlbnZvaSBkdSBzY29yZVxuICogQmFzw6kgc3VyIGwnZW5jb2RhZ2UgWE9SIDogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YT1JfY2lwaGVyXG4gKiBFZmZlY3R1ZSB1biBYT1IgYml0IMOgIGJpdCBlbnRyZSB1bmUgY2hhaW5lIGV0IHVuZSBjbMOpXG4gKi9cbmZ1bmN0aW9uIHhvckVuY29kZShzdHI6IHN0cmluZywga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBBc3N1cmUgcXVlIGxlcyBkZXV4IHBhcmFtw6h0cmVzIHNvaWVudCBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlXG4gIHN0ciA9IHN0ci50b1N0cmluZygpXG4gIGtleSA9IGtleS50b1N0cmluZygpXG5cbiAgLyoqIEVuY29kYWdlIFhPUiAqL1xuICBsZXQgeG9yID0gXCJcIlxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGxldCB0bXAgPSBzdHJbaV1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtleS5sZW5ndGg7ICsraikge1xuICAgICAgdG1wID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0bXAhLmNoYXJDb2RlQXQoMCkgXiBrZXkuY2hhckNvZGVBdChqKSlcbiAgICB9XG4gICAgeG9yICs9IHRtcFxuICB9XG5cbiAgLy8gUmVudm9pZSBsZSByw6lzdWx0YXQgZW4gZW5jb2RhbnQgbGVzIGNhcmFjdMOocmVzIHNww6ljaWF1eCBwb3V2YW50IHBvc2VyIHByb2Jsw6htZSAoXFxuIHBhciBleGVtcGxlKVxuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHhvcilcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VuZChcbiAgZW5jX3Rva2VuOiBzdHJpbmcsXG4gIHNjb3JlOiBudW1iZXIsXG4gIGdhbWU6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBpZiAodHlwZW9mIFJlY2FwdGNoYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgUmVjYXB0Y2hhLmV4ZWN1dGUoXG4gICAgICAgIFwibWluaWdhbWVTYXZlXCIgKyBnYW1lLFxuICAgICAgICAocmVjYXB0Y2hhVG9rZW4pOiB2b2lkID0+XG4gICAgICAgICAgdm9pZCBzYXZlU2NvcmUoZW5jX3Rva2VuLCBzY29yZSwgZ2FtZSwgcmVjYXB0Y2hhVG9rZW4pLnRoZW4ocmVzb2x2ZSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCBzYXZlU2NvcmUoZW5jX3Rva2VuLCBzY29yZSwgZ2FtZSkudGhlbihyZXNvbHZlKVxuICAgIH1cbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZVNjb3JlKFxuICBlbmNfdG9rZW46IHN0cmluZyxcbiAgc2NvcmU6IG51bWJlcixcbiAgZ2FtZTogc3RyaW5nLFxuICByZWNhcHRjaGFUb2tlbj86IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IGRlY29kZVVSSUNvbXBvbmVudChlbmNfdG9rZW4pXG5cbiAgICB2b2lkICQuYWpheCh7XG4gICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgIHVybDogXCIvbWluaWdhbWVzL2FqYXhfc2F2ZVNjb3JlXCIsXG4gICAgICBkYXRhOiByZWNhcHRjaGFUb2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICAgIHNjb3JlOiBzY29yZSxcbiAgICAgICAgICAgIGdhbWU6IGdhbWUsXG4gICAgICAgICAgICByZWNhcHRjaGFUb2tlbjogcmVjYXB0Y2hhVG9rZW4sXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICAgIHNjb3JlOiBzY29yZSxcbiAgICAgICAgICAgIGdhbWU6IGdhbWUsXG4gICAgICAgICAgfSxcbiAgICAgIHN1Y2Nlc3M6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlc29sdmUoc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUpKVxuICAgICAgICB9LCByYW5kb21JbnQoMTAwMCwgMzAwMCkpLFxuICAgIH0pXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxuXG5leHBvcnQgY29uc3QgZmxhcHB5OiBNaW5pZ2FtZSA9IHtcbiAgbmFtZTogXCJGbGFwcHlcIixcbiAgc2NvcmVNaW46IDE4MCxcbiAgc2NvcmVNYXg6IDIwMCxcbiAgZGVsYXlNaW46IDYwXzAwMCxcbiAgZGVsYXlNYXg6IDcwXzAwMCxcbiAgYnV0dG9uU2VsZWN0b3I6ICcubWluaWdhbWUtc3RhcnQgW2hyZWY9XCIvbWluaWdhbWVzL2J1YmJsdGVtcGxlXCJdIC5ubC1idXR0b24nLFxuICBpY29uOiBcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvbWluaWdhbWVzL2ljb25fYnViYmxldGVtcGxlLnBuZ1wiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcblxuZXhwb3J0IGNvbnN0IGhhdGNobGluZ3M6IE1pbmlnYW1lID0ge1xuICBuYW1lOiBcIkhhdGNobGluZ3NcIixcbiAgc2NvcmVNaW46IDE4LFxuICBzY29yZU1heDogMjAsXG4gIGRlbGF5TWluOiAzMF8wMDAsXG4gIGRlbGF5TWF4OiAzMF8wMDAsXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9jb2Nvb25pbnBpY2tcIl0gLm5sLWJ1dHRvbicsXG4gIGljb246IFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC9taW5pZ2FtZXMvaWNvbl9jb2NvbmlucGljay5wbmdcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi9taW5pZ2FtZVwiXG5cbmV4cG9ydCBjb25zdCBwZWdnbGU6IE1pbmlnYW1lID0ge1xuICBuYW1lOiBcIlBlZ2dsZVwiLFxuICBzY29yZU1pbjogOSxcbiAgc2NvcmVNYXg6IDEwLFxuICBkZWxheU1pbjogMTBfMDAwLFxuICBkZWxheU1heDogMjBfMDAwLFxuICBidXR0b25TZWxlY3RvcjogJy5taW5pZ2FtZS1zdGFydCBbaHJlZj1cIi9taW5pZ2FtZXMvZ2VtYm9tYlwiXSAubmwtYnV0dG9uJyxcbiAgaWNvbjogXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L21pbmlnYW1lcy9pY29uX2dlbWJvbWIucG5nXCIsXG59XG4iLCJpbXBvcnQgdHlwZSB7IFBhcnNhYmxlSXRlbSB9IGZyb20gXCIuL2FwcGVhcmFuY2UvaW50ZXJmYWNlcy9wYXJzYWJsZV9pdGVtXCJcbmltcG9ydCB0eXBlIHsgQXZhdGFyIH0gZnJvbSBcIi4vZWxkYXJ5YS9hdmF0YXJcIlxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0T3V0Zml0KHNlbGVjdG9yOiBzdHJpbmcsIG5hbWUgPSBcIm91dGZpdFwiKTogdm9pZCB7XG4gIGNvbnN0IGF2YXRhciA9IFNhY2hhLkF2YXRhci5hdmF0YXJzW3NlbGVjdG9yXVxuICBpZiAoIWF2YXRhcikgcmV0dXJuXG5cbiAgY29uc3Qgb3V0Zml0ID0gcGFyc2VBdmF0YXIoYXZhdGFyKVxuXG4gIGNvbnN0IGhyZWYgPVxuICAgIFwiZGF0YTp0ZXh0L2pzb247Y2hhcnNldD11dGYtOCxcIiArXG4gICAgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KG91dGZpdCwgdW5kZWZpbmVkLCAyKSlcblxuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcbiAgYS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGhyZWYpXG4gIGEuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgYCR7bmFtZX0uanNvbmApXG4gIGEuY2xpY2soKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBdmF0YXIoYXZhdGFyOiBBdmF0YXIpOiBQYXJzYWJsZUl0ZW1bXSB7XG4gIHJldHVybiBhdmF0YXIuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcbiAgICBjb25zdCBpdGVtID0gY2hpbGQuZ2V0SXRlbSgpXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBpdGVtLl9pZCxcbiAgICAgIGdyb3VwOiBpdGVtLl9ncm91cCxcbiAgICAgIG5hbWU6IGl0ZW0uX25hbWUsXG4gICAgICBpbWFnZTogaXRlbS5faW1hZ2UsXG4gICAgICB0eXBlOiBpdGVtLl90eXBlLFxuICAgICAgY2F0ZWdvcnlJZDogaXRlbS5fY2F0ZWdvcnlJZCxcbiAgICAgIGhpZGRlbkNhdGVnb3JpZXM6IE9iamVjdC52YWx1ZXMoaXRlbS5faGlkZGVuQ2F0ZWdvcmllcyksXG4gICAgICBhbmltYXRpb25EYXRhOiBpdGVtLl9hbmltYXRpb25EYXRhLFxuICAgICAgbG9ja2VkOiBpdGVtLl9sb2NrZWQsXG4gICAgfVxuICB9KVxufVxuIiwiZXhwb3J0IGVudW0gU2Vzc2lvblN0b3JhZ2VLZXkge1xuICBhY3Rpb24gPSBcImFjdGlvblwiLFxuICBleHBsb3JhdGlvbnNEb25lID0gXCJleHBsb3JhdGlvbnNEb25lXCIsXG4gIG1ldGEgPSBcIm1ldGFcIixcbiAgbWluaWdhbWVzRG9uZSA9IFwibWluaWdhbWVzRG9uZVwiLFxuICBzZWxlY3RlZExvY2F0aW9uID0gXCJzZWxlY3RlZExvY2F0aW9uXCIsXG4gIHRha2VvdmVyID0gXCJ0YWtlb3ZlclwiLFxuICB3aXNobGlzdCA9IFwid2lzaGxpc3RcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgTWV0YSB9IGZyb20gXCIuLi9hcGkvbWV0YVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2Uvd2lzaGVkX2l0ZW1cIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VLZXkgfSBmcm9tIFwiLi9zZXNzaW9uX3N0b3JhZ2UuZW51bVwiXG5pbXBvcnQgdHlwZSB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4vdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuXG5leHBvcnQgY2xhc3MgU2Vzc2lvblN0b3JhZ2Uge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBzZXNzaW9uU3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlXG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc3RhdGljIGdldCBhY3Rpb24oKTogVGFrZW92ZXJBY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmFjdGlvbiwgbnVsbClcbiAgfVxuXG4gIHN0YXRpYyBzZXQgYWN0aW9uKGFjdGlvbjogVGFrZW92ZXJBY3Rpb24gfCBudWxsKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmFjdGlvbiwgYWN0aW9uKVxuICB9XG5cbiAgc3RhdGljIGdldCBleHBsb3JhdGlvbnNEb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zRG9uZSwgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IGV4cGxvcmF0aW9uc0RvbmUoZG9uZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5leHBsb3JhdGlvbnNEb25lLCBkb25lKVxuICB9XG5cbiAgc3RhdGljIGdldCBtZXRhKCk6IE1ldGEgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1ldGEsIG51bGwpXG4gIH1cblxuICBzdGF0aWMgc2V0IG1ldGEobWV0YTogTWV0YSB8IG51bGwpIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkubWV0YSwgbWV0YSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWluaWdhbWVzRG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1pbmlnYW1lc0RvbmUsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBtaW5pZ2FtZXNEb25lKGRvbmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkubWluaWdhbWVzRG9uZSwgZG9uZSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VsZWN0ZWRMb2NhdGlvbigpOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5zZWxlY3RlZExvY2F0aW9uLCBudWxsKVxuICB9XG5cbiAgc3RhdGljIHNldCBzZWxlY3RlZExvY2F0aW9uKHNlbGVjdGVkOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCkge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5zZWxlY3RlZExvY2F0aW9uLCBzZWxlY3RlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGFrZW92ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS50YWtlb3ZlciwgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IHRha2VvdmVyKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkudGFrZW92ZXIsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHdpc2hsaXN0KCk6IFdpc2hlZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS53aXNobGlzdCwgW10pXG4gIH1cblxuICBzdGF0aWMgc2V0IHdpc2hsaXN0KHdpc2hsaXN0OiBXaXNoZWRJdGVtW10pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkud2lzaGxpc3QsIHdpc2hsaXN0KVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SXRlbTxUPihrZXk6IFNlc3Npb25TdG9yYWdlS2V5LCBmYWxsYmFjazogVCk6IFQge1xuICAgIHJldHVybiA8VD4oXG4gICAgICAoSlNPTi5wYXJzZShcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gSlNPTi5zdHJpbmdpZnkoZmFsbGJhY2spXG4gICAgICApID8/IGZhbGxiYWNrKVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHNldEl0ZW08VD4oa2V5OiBTZXNzaW9uU3RvcmFnZUtleSwgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpXG4gIH1cbn1cbiIsImV4cG9ydCBlbnVtIFRha2VvdmVyQWN0aW9uIHtcbiAgZGFpbHkgPSBcImRhaWx5XCIsXG4gIG1pbmlnYW1lcyA9IFwibWluaWdhbWVzXCIsXG4gIGV4cGxvcmF0aW9ucyA9IFwiZXhwbG9yYXRpb25zXCIsXG4gIGF1Y3Rpb25zID0gXCJhdWN0aW9uc1wiLFxuICBidXkgPSBcImJ1eVwiLFxuICAvLyBzZWxsLFxuICB3YWl0ID0gXCJ3YWl0XCIsXG59XG4iLCJpbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgbG9hZFRvcEJhciB9IGZyb20gXCIuLi91aS90b3BfYmFyXCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIi4vY2xhc3Nlcy9hY3Rpb25cIlxuaW1wb3J0IGJ1eUFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL2J1eV9hY3Rpb25cIlxuaW1wb3J0IGRhaWx5QWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvZGFpbHlfYWN0aW9uXCJcbmltcG9ydCBleHBsb3JhdGlvbkFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL2V4cGxvcmF0aW9uX2FjdGlvblwiXG5pbXBvcnQgbWluaWdhbWVBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9taW5pZ2FtZV9hY3Rpb25cIlxuaW1wb3J0IHdhaXRBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy93YWl0X2FjdGlvblwiXG5cbi8qKiBBdXRvbWF0ZWQgZW50cnkgcG9pbnQgb2YgdGhlIHRha2VvdmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRUYWtlb3ZlcigpOiB2b2lkIHtcbiAgaWYgKFNlc3Npb25TdG9yYWdlLnRha2VvdmVyKSB2b2lkIHRha2VvdmVyKClcbn1cblxuLyoqIE1hbnVhbCBlbnRyeSBwb2ludCBvZiB0aGUgdGFrZW92ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlVGFrZW92ZXIoKTogdm9pZCB7XG4gIHJlc2V0VGFrZW92ZXIoKVxuICBTZXNzaW9uU3RvcmFnZS50YWtlb3ZlciA9ICFTZXNzaW9uU3RvcmFnZS50YWtlb3ZlclxuXG4gIGxvYWRUb3BCYXIoKVxuICBpZiAoU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIpICQuZmxhdnJOb3RpZih0cmFuc2xhdGUudGFrZW92ZXIuZW5hYmxlZClcbiAgZWxzZSAkLmZsYXZyTm90aWYodHJhbnNsYXRlLnRha2VvdmVyLmVuYWJsZWQpXG5cbiAgdm9pZCB0YWtlb3ZlcigpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldFRha2VvdmVyKCk6IHZvaWQge1xuICBTZXNzaW9uU3RvcmFnZS5hY3Rpb24gPSBudWxsXG4gIFNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgPSBmYWxzZVxuICBTZXNzaW9uU3RvcmFnZS5taW5pZ2FtZXNEb25lID0gZmFsc2VcbiAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGxcbiAgU2Vzc2lvblN0b3JhZ2Uud2lzaGxpc3QgPSBbXVxufVxuXG5hc3luYyBmdW5jdGlvbiB0YWtlb3ZlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFTZXNzaW9uU3RvcmFnZS50YWtlb3ZlcikgcmV0dXJuXG4gIGlmIChkYWlseUFjdGlvbi5jb25kaXRpb24oKSkgYXdhaXQgZGFpbHlBY3Rpb24ucGVyZm9ybSgpXG5cbiAgY29uc3QgYWN0aW9uID0gYWN0aW9ucy5maW5kKGFjdGlvbiA9PiBhY3Rpb24ua2V5ID09PSBTZXNzaW9uU3RvcmFnZS5hY3Rpb24pXG4gIGlmICghYWN0aW9uKSB7XG4gICAgY2hhbmdlQWN0aW9uKClcbiAgICB2b2lkIHRha2VvdmVyKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIENvbnNvbGUuaW5mbyhcIkFjdGlvbjpcIiwgYWN0aW9uLmtleSlcblxuICBpZiAoYWN0aW9uLmNvbmRpdGlvbigpICYmIChhd2FpdCBhY3Rpb24ucGVyZm9ybSgpKSkgcmV0dXJuXG4gIGVsc2Uge1xuICAgIGNoYW5nZUFjdGlvbigpXG4gICAgdm9pZCB0YWtlb3ZlcigpXG4gICAgcmV0dXJuXG4gIH1cbn1cblxuY29uc3QgYWN0aW9uczogQWN0aW9uW10gPSBbXG4gIG1pbmlnYW1lQWN0aW9uLFxuICBleHBsb3JhdGlvbkFjdGlvbixcbiAgYnV5QWN0aW9uLFxuICB3YWl0QWN0aW9uLFxuXVxuXG5mdW5jdGlvbiBjaGFuZ2VBY3Rpb24oKTogVGFrZW92ZXJBY3Rpb24ge1xuICBjb25zdCBuZXh0ID1cbiAgICBhY3Rpb25zLmZpbmRJbmRleChhY3Rpb24gPT4gYWN0aW9uLmtleSA9PT0gU2Vzc2lvblN0b3JhZ2UuYWN0aW9uKSArIDFcblxuICByZXR1cm4gKFNlc3Npb25TdG9yYWdlLmFjdGlvbiA9XG4gICAgYWN0aW9uc1tuZXh0ID49IGFjdGlvbnMubGVuZ3RoID8gMCA6IG5leHRdIS5rZXkpXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY3Rpb24ge1xuICAvKiogS2V5IGJ5IHdoaWNoIHRoZSBgU2Vzc2lvblN0b3JhZ2VgIGNhbiByZWZlcmVuY2UgdGhpcyBhY3Rpb24uICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGtleTogVGFrZW92ZXJBY3Rpb25cblxuICAvKiogRGV0ZXJtaW5lcyBpZiB0aGlzIGFjdGlvbiBjYW4gYmUgcGVyZm9ybWVkIGR1cmluZyBhIHRha2VvdmVyLiAqL1xuICBhYnN0cmFjdCBjb25kaXRpb24oKTogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBQZXJmb3JtcyB0aGUgYWN0aW9uIGFuZCByZXR1cm5zIGB0cnVlYCB0aGUgYnJhaW4gY2FuIGNvbnRpbnVlIHdpdGggYW5vdGhlclxuICAgKiBhY3Rpb24gb3IgYGZhbHNlYCBpZiB0aGlzIGFjdGlvbiBpc24ndCBmaW5pc2hlZCBleGVjdXRpbmcuXG4gICAqL1xuICBhYnN0cmFjdCBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj5cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgYWpheFNlYXJjaCB9IGZyb20gXCIuLi8uLi9hamF4L2FqYXhfc2VhcmNoXCJcbmltcG9ydCB7IGJ1eSB9IGZyb20gXCIuLi8uLi9hamF4L2J1eVwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2Uvd2lzaGVkX2l0ZW1cIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuLi8uLi9tYXJrZXRwbGFjZS9pbnRlcmZhY2VzL21hcmtldF9lbnRyeVwiXG5pbXBvcnQgeyBnZXRJdGVtRGV0YWlscyB9IGZyb20gXCIuLi8uLi9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZV9oYW5kbGVyc1wiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgY2xpY2sgfSBmcm9tIFwiLi4vY2xpY2tcIlxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgQnV5QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24uYnV5XG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudE1hYW5hKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE51bWJlcihcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KFwiI2N1cnJlbmN5LW1hYW5hXCIpPy5kYXRhc2V0XG4gICAgICAgIC5tYWFuYVxuICAgIClcbiAgfVxuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTG9jYWxTdG9yYWdlLm1hcmtldCAmJiBCb29sZWFuKExvY2FsU3RvcmFnZS53aXNobGlzdC5sZW5ndGgpXG4gIH1cblxuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvbWFya2V0cGxhY2VcIikge1xuICAgICAgYXdhaXQgY2xpY2s8SFRNTEFuY2hvckVsZW1lbnQ+KFwiLm1haW4tbWVudS1tYXJrZXRwbGFjZSBhXCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IGljb25NZXNzYWdlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi90ZW1wbGF0ZXMvaHRtbC9mbGF2cl9ub3RpZi9pY29uX21lc3NhZ2UuaHRtbFwiKVxuICAgIGZvciAoY29uc3Qgd2lzaGVkIG9mIExvY2FsU3RvcmFnZS53aXNobGlzdCkge1xuICAgICAgLy8gQ2xvdGhlcyBtaWdodCBiZSBhIHNwZWNpYWwgZXhjZXB0aW9uLiBJZiB0aGV5IGFyZSwgdGhlbiBjaGVjayBmb3JcbiAgICAgIC8vIGB3aXNoZWQudHlwZSA9PT0gVHlwZS5QbGF5ZXJXZWFyYWJsZUl0ZW1gLlxuICAgICAgaWYgKHdpc2hlZC5lcnJvcikge1xuICAgICAgICBDb25zb2xlLndhcm4oYFNraXBwZWQgXCIke3dpc2hlZC5uYW1lfVwiYCwgd2lzaGVkKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgQ29uc29sZS5pbmZvKGBTZWFyY2hpbmcgZm9yIFwiJHt3aXNoZWQubmFtZX1cImAsIHdpc2hlZClcblxuICAgICAgbGV0IGFtb3VudCA9IDhcbiAgICAgIGZvcnBhZ2U6IGZvciAobGV0IHBhZ2UgPSAxOyBhbW91bnQgPT09IDg7IHBhZ2UrKykge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5zZWFyY2god2lzaGVkLCBwYWdlKVxuICAgICAgICBhbW91bnQgPSByZXN1bHRzLmxlbmd0aFxuICAgICAgICBDb25zb2xlLmxvZyhgRm91bmQgJHthbW91bnR9IHJlc3VsdHNgLCByZXN1bHRzKVxuXG4gICAgICAgIGNvbnN0IHdhbnRlZCA9IHJlc3VsdHMuZmlsdGVyKFxuICAgICAgICAgIHJlc3VsdCA9PlxuICAgICAgICAgICAgcmVzdWx0Lmljb24gPT09IHdpc2hlZC5pY29uICYmXG4gICAgICAgICAgICByZXN1bHQuYnV5Tm93UHJpY2UgJiZcbiAgICAgICAgICAgIE51bWJlcihyZXN1bHQuYnV5Tm93UHJpY2UucHJpY2UpIDw9IHdpc2hlZC5wcmljZSAmJlxuICAgICAgICAgICAgTnVtYmVyKHJlc3VsdC5idXlOb3dQcmljZS5wcmljZSkgPD0gdGhpcy5jdXJyZW50TWFhbmFcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB3YW50ZWQpIHtcbiAgICAgICAgICBpZiAoIShhd2FpdCB0aGlzLmJ1eShyZXN1bHQpKSkgYnJlYWsgZm9ycGFnZVxuXG4gICAgICAgICAgTG9jYWxTdG9yYWdlLnB1cmNoYXNlcyA9IFtcbiAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgIC4uLkxvY2FsU3RvcmFnZS5wdXJjaGFzZXMuZmlsdGVyKFxuICAgICAgICAgICAgICBwdXJjaGFzZSA9PiBwdXJjaGFzZS5pdGVtaWQgIT09IHJlc3VsdC5pdGVtaWRcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXVxuXG4gICAgICAgICAgQ29uc29sZS5pbmZvKFxuICAgICAgICAgICAgYEJvdWdodCBcIiR7cmVzdWx0Lm5hbWV9XCIgZm9yICR7TnVtYmVyKFxuICAgICAgICAgICAgICByZXN1bHQuYnV5Tm93UHJpY2U/LnByaWNlXG4gICAgICAgICAgICApfSBtYWFuYXMuYCxcbiAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgIClcblxuICAgICAgICAgICQuZmxhdnJOb3RpZihcbiAgICAgICAgICAgIGljb25NZXNzYWdlLnJlbmRlcih7XG4gICAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogdHJhbnNsYXRlLnRha2VvdmVyLmJvdWdodChcbiAgICAgICAgICAgICAgICByZXN1bHQubmFtZSxcbiAgICAgICAgICAgICAgICBOdW1iZXIocmVzdWx0LmJ1eU5vd1ByaWNlPy5wcmljZSlcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1eShyZXN1bHQ6IE1hcmtldEVudHJ5KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IGJ1eShOdW1iZXIocmVzdWx0Lml0ZW1pZCkpXG4gICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgIHRoaXMuc2V0RXJyb3IocmVzdWx0LndlYXJhYmxlaXRlbWlkLCBqc29uLmRhdGEpXG4gICAgcmV0dXJuIGpzb24ucmVzdWx0ID09PSBcInN1Y2Nlc3NcIlxuICB9XG5cbiAgLyoqIFNlYXJjaCBmb3IgYSB3aXNoZWQgaXRlbSBvbiBhIHNwZWNpZmljIHBhZ2UgdXNpbmcgdGhlIGl0ZW0ncyBuYW1lLiAqL1xuICBwcml2YXRlIGFzeW5jIHNlYXJjaCh3aXNoZWQ6IFdpc2hlZEl0ZW0sIHBhZ2UgPSAxKTogUHJvbWlzZTxNYXJrZXRFbnRyeVtdPiB7XG4gICAgY29uc3QgZmlsdGVySXRlbU5hbWUgPVxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIiNmaWx0ZXItaXRlbU5hbWVcIilcbiAgICBpZiAoZmlsdGVySXRlbU5hbWUpIGZpbHRlckl0ZW1OYW1lLnZhbHVlID0gd2lzaGVkLm5hbWVcblxuICAgIGNvbnN0IG1hcmtldHBsYWNlU2VhcmNoSXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxVTGlzdEVsZW1lbnQ+KFxuICAgICAgXCIubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1zXCJcbiAgICApXG4gICAgaWYgKCFtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zKSByZXR1cm4gW11cbiAgICBtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zLmlubmVySFRNTCA9IGF3YWl0IGFqYXhTZWFyY2goe1xuICAgICAgbmFtZTogd2lzaGVkLm5hbWUsXG4gICAgICBwYWdlLFxuICAgIH0pXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgIG1hcmtldHBsYWNlU2VhcmNoSXRlbXMucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcbiAgICAgICAgXCIubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1cIlxuICAgICAgKVxuICAgIClcbiAgICAgIC5tYXAoZ2V0SXRlbURldGFpbHMpXG4gICAgICAuZmlsdGVyPE1hcmtldEVudHJ5PigoaXRlbSk6IGl0ZW0gaXMgTWFya2V0RW50cnkgPT4gaXRlbSAhPT0gbnVsbClcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGBXaXNoZWRJdGVtLmVycm9yYCBwcm9wZXJ0eSB3aXRob3V0IHJlb3JkZXJpbmcgdGhlIHdpc2hsaXN0LiAqL1xuICBwcml2YXRlIHNldEVycm9yKHdlYXJhYmxlaXRlbWlkOiBzdHJpbmcsIGVycm9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICAgIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KFxuICAgICAgaXRlbSA9PiBpdGVtLndlYXJhYmxlaXRlbWlkID09PSB3ZWFyYWJsZWl0ZW1pZFxuICAgIClcbiAgICBjb25zdCBlbnRyeSA9IHdpc2hsaXN0W2luZGV4XVxuICAgIGlmICghZW50cnkpIHJldHVyblxuXG4gICAgZW50cnkuZXJyb3IgPSBlcnJvclxuICAgIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IFtcbiAgICAgIC4uLndpc2hsaXN0LnNsaWNlKHVuZGVmaW5lZCwgaW5kZXgpLFxuICAgICAgZW50cnksXG4gICAgICAuLi53aXNobGlzdC5zbGljZShpbmRleCArIDEsIHVuZGVmaW5lZCksXG4gICAgXVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBCdXlBY3Rpb24oKVxuIiwiaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IHJlc2V0VGFrZW92ZXIgfSBmcm9tIFwiLi4vYnJhaW5cIlxuaW1wb3J0IHsgY2xpY2sgfSBmcm9tIFwiLi4vY2xpY2tcIlxuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuXG5jbGFzcyBEYWlseUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLmRhaWx5XG5cbiAgLyoqIENoZWNrcyBpZiB0aGUgZGFpbHkgbWFhbmEgZ2lmdCBpZiB0aGVyZS4gKi9cbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRhaWx5R2lmdENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGFpbHktZ2lmdC1jb250YWluZXJcIilcbiAgICByZXR1cm4gKFxuICAgICAgISFkYWlseUdpZnRDb250YWluZXIgJiZcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZGFpbHlHaWZ0Q29udGFpbmVyKS5kaXNwbGF5ICE9PSBcIm5vbmVcIlxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGljayBvbiB0aGUgZGFpbHkgbWFhbmEgZ2lmdC5cbiAgICogQHJldHVybnMgYGZhbHNlYC4gVGhpcyBhY3Rpb24gZG9lcyBub3QgcGVyZm9ybSBtZWFuaW5nZnVsIGFjdGlvbnMgb24gdGhlXG4gICAqIHBhZ2UuXG4gICAqL1xuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGRhaWx5R2lmdENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGFpbHktZ2lmdC1jb250YWluZXJcIilcbiAgICBpZiAoXG4gICAgICAhZGFpbHlHaWZ0Q29udGFpbmVyIHx8XG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRhaWx5R2lmdENvbnRhaW5lcikuZGlzcGxheSA9PT0gXCJub25lXCJcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGRhaWx5R2lmdENvbnRhaW5lci5jbGljaygpXG4gICAgYXdhaXQgY2xpY2s8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiLmZpcnN0LWNvbm5leGlvbiAuZmxhdnItYnV0dG9uLmRlZmF1bHRcIilcblxuICAgIHJlc2V0VGFrZW92ZXIoKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBEYWlseUFjdGlvbigpXG4iLCJpbXBvcnQgeyBjYXB0dXJlRW5kIH0gZnJvbSBcIi4uLy4uL2FqYXgvY2FwdHVyZV9lbmRcIlxuaW1wb3J0IHsgY2hhbmdlUmVnaW9uIH0gZnJvbSBcIi4uLy4uL2FqYXgvY2hhbmdlX3JlZ2lvblwiXG5pbXBvcnQgeyBleHBsb3JhdGlvblJlc3VsdHMgfSBmcm9tIFwiLi4vLi4vYWpheC9leHBsb3JhdGlvbl9yZXN1bHRzXCJcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCIuLi8uLi9hcGkvcmVzdWx0LmVudW1cIlxuaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi8uLi9jb25zb2xlXCJcbmltcG9ydCB7IER1cmF0aW9uVW5pdCB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiXG5pbXBvcnQgdHlwZSB7IE1hcFJlZ2lvbiwgU2Vhc29uIH0gZnJvbSBcIi4uLy4uL2VsZGFyeWEvY3VycmVudF9yZWdpb25cIlxuaW1wb3J0IHR5cGUgeyBQZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gfSBmcm9tIFwiLi4vLi4vZWxkYXJ5YS90cmVhc3VyZVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5pbXBvcnQgeyBFeHBsb3JhdGlvblN0YXR1cyB9IGZyb20gXCIuLi9leHBsb3JhdGlvbl9zdGF0dXMuZW51bVwiXG5pbXBvcnQgdHlwZSB7IFN0YXJ0RXhwbG9yYXRpb24gfSBmcm9tIFwiLi4vc3RhcnRfZXhwbG9yYXRpb25cIlxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgRXhwbG9yYXRpb25BY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi5leHBsb3JhdGlvbnNcblxuICBwcml2YXRlIGdldCBnbG9iYWxzKCk6IHtcbiAgICBjdXJyZW50UmVnaW9uOiBNYXBSZWdpb25cbiAgICBwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb246IFBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiB8IG51bGxcbiAgICB0aW1lTGVmdEV4cGxvcmF0aW9uOiBudW1iZXIgfCBudWxsXG4gIH0ge1xuICAgIHJldHVybiB7IGN1cnJlbnRSZWdpb24sIHBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiwgdGltZUxlZnRFeHBsb3JhdGlvbiB9XG4gIH1cblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnMgJiZcbiAgICAgICFTZXNzaW9uU3RvcmFnZS5leHBsb3JhdGlvbnNEb25lICYmXG4gICAgICAhIUxvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5sZW5ndGhcbiAgICApXG4gIH1cblxuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvcGV0XCIpIHtcbiAgICAgIGF3YWl0IGNsaWNrPEhUTUxBbmNob3JFbGVtZW50PihcIi5tYWluLW1lbnUtcGV0IGFcIilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLmdldEV4cGxvcmF0aW9uU3RhdHVzKCkpIHtcbiAgICAgIGNhc2UgRXhwbG9yYXRpb25TdGF0dXMuaWRsZTpcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5zdGFydEV4cGxvcmF0aW9uKCkpLnNlbGVjdGVkKVxuICAgICAgICAgIFNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgPSB0cnVlXG4gICAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLnBlbmRpbmc6XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy53YWl0RXhwbG9yYXRpb24oKSkgJiYgdGhpcy5wZXJmb3JtKClcblxuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5yZXN1bHQ6XG4gICAgICAgIGF3YWl0IHRoaXMuZW5kRXhwbG9yYXRpb24oKVxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtKClcblxuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5jYXB0dXJlOlxuICAgICAgICBhd2FpdCB0aGlzLmVuZENhcHR1cmUoKVxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtKClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGlja0V4cGxvcmUoKTogUHJvbWlzZTxIVE1MQnV0dG9uRWxlbWVudD4ge1xuICAgIHJldHVybiBjbGljayhcIiNleHBsb3JlLWJ1dHRvblwiKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGlja0xvY2F0aW9uKFxuICAgIHNlbGVjdGVkOiBBdXRvRXhwbG9yZUxvY2F0aW9uXG4gICk6IFByb21pc2U8SFRNTERpdkVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2s8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYC5tYXAtbG9jYXRpb25bZGF0YS1pZD1cIiR7c2VsZWN0ZWQubG9jYXRpb24uaWR9XCJdYFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY2xpY2tSZWdpb24oc2VsZWN0ZWQ6IEF1dG9FeHBsb3JlTG9jYXRpb24pOiBIVE1MRGl2RWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYC5taW5pbWFwW2RhdGEtbWFwaWQ9XCIke3NlbGVjdGVkLnJlZ2lvbi5pZH1cIl1gXG4gICAgKVxuXG4gICAgaWYgKCFkaXYpIHtcbiAgICAgIC8vIENsZWFyaW5nIGludmFsaWQgcmVnaW9ucyBpcyB1c2VmdWwgdG8gcmVtb3ZlIGZpbmlzaGVkIGV2ZW50cy5cbiAgICAgIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9XG4gICAgICAgIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgc2F2ZWQgPT4gc2F2ZWQucmVnaW9uLmlkICE9PSBzZWxlY3RlZC5yZWdpb24udG9TdHJpbmcoKVxuICAgICAgICApXG5cbiAgICAgIFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb24gPSBudWxsXG4gICAgICBsb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBkaXYuY2xpY2soKVxuICAgIHJldHVybiBkaXZcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xpY2tTZWFzb24oKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PiB7XG4gICAgcmV0dXJuIGNsaWNrPEhUTUxJbWFnZUVsZW1lbnQ+KFwiI2NyeXN0YWwtaW1hZ2VzLWNvbnRhaW5lclwiKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbmRDYXB0dXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB2b2lkIG5ldyBBdWRpbyhcbiAgICAgICAgXCIvc3RhdGljL2V2ZW50LzIwMjEvbXVzaWMvc291bmRzL21pc3Npb24tY29tcGxldGUubXAzXCJcbiAgICAgICkucGxheSgpXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuXG4gICAgYXdhaXQgY2xpY2s8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiI29wZW4tY2FwdHVyZS1pbnRlcmZhY2VcIilcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIjY2FwdHVyZS1idXR0b25cIilcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIjY2xvc2UtcmVzdWx0XCIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuZEV4cGxvcmF0aW9uKCk6IFByb21pc2U8SFRNTERpdkVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2soXCIjY2xvc2UtcmVzdWx0XCIpXG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRTZWFzb24oKTogU2Vhc29uIHtcbiAgICByZXR1cm4gPFNlYXNvbj4oQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKT8uY2xhc3NMaXN0ID8/IFtdKVxuICAgICAgLmZpbmQoYyA9PiBjLnN0YXJ0c1dpdGgoXCJzZWFzb24tXCIpKVxuICAgICAgPy5yZXBsYWNlKFwic2Vhc29uLVwiLCBcIlwiKSA/PyBudWxsKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRFeHBsb3JhdGlvblN0YXR1cygpOiBFeHBsb3JhdGlvblN0YXR1cyB7XG4gICAgaWYgKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNvcGVuLWNhcHR1cmUtaW50ZXJmYWNlXCIpIHx8XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2NhcHR1cmUtaW50ZXJmYWNlLW91dGVyLmFjdGl2ZVwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLmNhcHR1cmVcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNwZW5kaW5nLW1hcC1sb2NhdGlvbi1kYXRhLW91dGVyLmFjdGl2ZVwiKSB8fFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNtYXAtY29udGFpbmVyLnBlbmRpbmdcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5wZW5kaW5nXG4gICAgfSBlbHNlIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RyZWFzdXJlLWh1bnQtcmVzdWx0LW92ZXJsYXkuYWN0aXZlXCIpKVxuICAgICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLnJlc3VsdFxuICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5pZGxlXG4gIH1cblxuICBwcml2YXRlIGdldExvd2VzdEVuZXJneUxvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMucmVkdWNlKChsb3dlc3QsIHBsYWNlKSA9PlxuICAgICAgTnVtYmVyKHBsYWNlLmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSA8XG4gICAgICBOdW1iZXIobG93ZXN0LmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKVxuICAgICAgICA/IHBsYWNlXG4gICAgICAgIDogbG93ZXN0XG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZExvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsIHtcbiAgICBsZXQgc2VsZWN0ZWQgPSBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uXG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdExvY2F0aW9uKClcbiAgICAgIFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb24gPSBzZWxlY3RlZFxuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RlZFxuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RMb2NhdGlvbigpOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgYWZmb3JkYWJsZSA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXG4gICAgICBzYXZlZCA9PiBOdW1iZXIoc2F2ZWQubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpIDw9IHBldEVuZXJneVxuICAgIClcblxuICAgIGNvbnN0IG1pbmltdW1FbmVyZ3kgPSB0aGlzLmdldExvd2VzdEVuZXJneUxvY2F0aW9uKClcbiAgICBjb25zdCBub3REZWFkRW5kID0gYWZmb3JkYWJsZS5maWx0ZXIoXG4gICAgICBwbGFjZSA9PlxuICAgICAgICBwZXRFbmVyZ3kgLSBOdW1iZXIocGxhY2UubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpID49XG4gICAgICAgIE51bWJlcihtaW5pbXVtRW5lcmd5LmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKVxuICAgIClcbiAgICBpZiAobm90RGVhZEVuZC5sZW5ndGgpXG4gICAgICByZXR1cm4gbm90RGVhZEVuZFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBub3REZWFkRW5kLmxlbmd0aCldID8/IG51bGxcblxuICAgIGNvbnN0IHNhbWVFbmVyZ3kgPSBhZmZvcmRhYmxlLmZpbHRlcihcbiAgICAgIHBsYWNlID0+IE51bWJlcihwbGFjZS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPT09IHBldEVuZXJneVxuICAgIClcbiAgICBpZiAoc2FtZUVuZXJneS5sZW5ndGgpXG4gICAgICByZXR1cm4gc2FtZUVuZXJneVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBzYW1lRW5lcmd5Lmxlbmd0aCldID8/IG51bGxcblxuICAgIHJldHVybiBhZmZvcmRhYmxlW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGFmZm9yZGFibGUubGVuZ3RoKV0gPz8gbnVsbFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydEV4cGxvcmF0aW9uKCk6IFByb21pc2U8U3RhcnRFeHBsb3JhdGlvbj4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZExvY2F0aW9uKClcbiAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm4geyBleHBsb3Jpbmc6IGZhbHNlLCBzZWxlY3RlZCB9XG4gICAgQ29uc29sZS5pbmZvKFwiRXhwbG9yaW5nXCIsIHNlbGVjdGVkKVxuXG4gICAgLy8gR28gdG8gc2Vhc29uXG4gICAgaWYgKFxuICAgICAgc2VsZWN0ZWQucmVnaW9uLnNlYXNvbiAmJlxuICAgICAgdGhpcy5nZXRDdXJyZW50U2Vhc29uKCkgIT09IHNlbGVjdGVkLnJlZ2lvbi5zZWFzb25cbiAgICApIHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpY2tTZWFzb24oKVxuICAgICAgcmV0dXJuIHsgZXhwbG9yaW5nOiBmYWxzZSwgc2VsZWN0ZWQgfVxuICAgIH1cblxuICAgIC8vIEdvIHRvIHJlZ2lvblxuICAgIHRoaXMuY2xpY2tSZWdpb24oc2VsZWN0ZWQpXG5cbiAgICAvLyBHbyB0byBsb2NhdGlvblxuICAgIGF3YWl0IHRoaXMuY2xpY2tMb2NhdGlvbihzZWxlY3RlZClcbiAgICBhd2FpdCB0aGlzLmNsaWNrRXhwbG9yZSgpXG5cbiAgICBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uID0gbnVsbFxuICAgIHJldHVybiB7IGV4cGxvcmluZzogdHJ1ZSwgc2VsZWN0ZWQgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgZm9yIHVwIHRvIDEwIG1pbnV0ZXMuXG4gICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGV4cGxvcmF0aW9uIGlzIGZpbmlzaGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0RXhwbG9yYXRpb24oXG4gICAgc2VsZWN0ZWQ/OiBBdXRvRXhwbG9yZUxvY2F0aW9uXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGRvY3VtZW50XG4gICAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICAgIGAubWluaW1hcFtkYXRhLW1hcGlkPVwiJHtzZWxlY3RlZD8ucmVnaW9uLmlkID8/IGN1cnJlbnRSZWdpb24uaWR9XCJdYFxuICAgICAgKVxuICAgICAgPy5jbGljaygpXG5cbiAgICBsZXQgbXMgPSAzICogRHVyYXRpb25Vbml0LnNlY29uZFxuICAgIGlmIChzZWxlY3RlZCkgbXMgKz0gc2VsZWN0ZWQubG9jYXRpb24udGltZVRvRXhwbG9yZSAqIER1cmF0aW9uVW5pdC5taW51dGVcbiAgICBlbHNlIGlmICh0aW1lTGVmdEV4cGxvcmF0aW9uICYmIHRpbWVMZWZ0RXhwbG9yYXRpb24gPiAwKVxuICAgICAgbXMgKz0gdGltZUxlZnRFeHBsb3JhdGlvbiAqIER1cmF0aW9uVW5pdC5zZWNvbmRcbiAgICBlbHNlIGlmIChcbiAgICAgICFwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gJiZcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjbWFwLWNvbnRhaW5lci5wZW5kaW5nXCIpXG4gICAgKSB7XG4gICAgICBjb25zdCBqc29uID0gYXdhaXQgZXhwbG9yYXRpb25SZXN1bHRzKClcbiAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gUmVzdWx0LnN1Y2Nlc3MpIHJldHVybiBmYWxzZVxuXG4gICAgICBjb25zdCBjYXB0dXJlID0ganNvbi5kYXRhLnJlc3VsdHMuZmluZChcbiAgICAgICAgcmVzdWx0ID0+IHJlc3VsdC50eXBlID09PSBcImNhcHR1cmVcIlxuICAgICAgKVxuICAgICAgaWYgKCFjYXB0dXJlKSByZXR1cm4gZmFsc2VcbiAgICAgIGF3YWl0IGNhcHR1cmVFbmQoKVxuXG4gICAgICAvLyBSZWxvYWRpbmcgaXMgdGhlIG9ubHkgcG9zc2libGUgYWN0aW9uIGlmIHRoZSBleHBsb3JhdGlvbiBmaW5pc2hlZCBpbiBhXG4gICAgICAvLyBkaWZmZXJlbnQgcmVnaW9uLlxuICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgXCJSZWxvYWRpbmcgYmVjYXVzZSB0aGUgZXhwbG9yYXRpb24gaXMgaW4gYW5vdGhlciByZWdpb24uXCIsXG4gICAgICAgIHRoaXMuZ2xvYmFsc1xuICAgICAgKVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIER1cmF0aW9uVW5pdC5taW51dGUpKVxuICAgICAgbG9jYXRpb24ucmVsb2FkKClcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKG1zID4gMTAgKiBEdXJhdGlvblVuaXQubWludXRlKSByZXR1cm4gZmFsc2VcblxuICAgIENvbnNvbGUubG9nKFxuICAgICAgYFdhaXRpbmcgZm9yIHRoZSBleHBsb3JhdGlvbiB0byBlbmQgaW4gJHtNYXRoLmNlaWwoXG4gICAgICAgIG1zIC8gRHVyYXRpb25Vbml0LnNlY29uZFxuICAgICAgKX0gc2Vjb25kcy4uLmAsXG4gICAgICB0aGlzLmdsb2JhbHNcbiAgICApXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSlcbiAgICBhd2FpdCBjaGFuZ2VSZWdpb24oTnVtYmVyKHNlbGVjdGVkPy5yZWdpb24uaWQgPz8gY3VycmVudFJlZ2lvbi5pZCkpXG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmdldEV4cGxvcmF0aW9uU3RhdHVzKCkgPT09IEV4cGxvcmF0aW9uU3RhdHVzLnBlbmRpbmcgJiZcbiAgICAgIHRpbWVMZWZ0RXhwbG9yYXRpb24gJiZcbiAgICAgIHRpbWVMZWZ0RXhwbG9yYXRpb24gPCAwXG4gICAgKSB7XG4gICAgICBDb25zb2xlLmluZm8oXG4gICAgICAgIFwiUmVsb2FkaW5nIGJlY2F1c2UgdGhlIHRpbWVyIGlzIGRlc3luY2hyb25pc2VkLlwiLFxuICAgICAgICB0aGlzLmdsb2JhbHNcbiAgICAgIClcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBEdXJhdGlvblVuaXQuc2Vjb25kKSlcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgRXhwbG9yYXRpb25BY3Rpb24oKVxuIiwiaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgeyBwbGF5RmxhcHB5LCBwbGF5SGF0Y2hsaW5ncywgcGxheVBlZ2dsZSB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvZW1pbGVcIlxuaW1wb3J0IHsgZmxhcHB5IH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9mbGFwcHlcIlxuaW1wb3J0IHsgaGF0Y2hsaW5ncyB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvaGF0Y2hsaW5nc1wiXG5pbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9taW5pZ2FtZVwiXG5pbXBvcnQgeyBwZWdnbGUgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL3BlZ2dsZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5cbmNsYXNzIE1pbmlnYW1lQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24ubWluaWdhbWVzXG5cbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UubWluaWdhbWVzICYmICFTZXNzaW9uU3RvcmFnZS5taW5pZ2FtZXNEb25lXG4gIH1cblxuICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgbWluaWdhbWVzIHNob3VsZCBiZSBwbGF5ZWQgcmlnaHQgbm93LlxuICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSBtaW5pZ2FtZXMgYXJlIGN1cnJlbnRseSBiZWluZyBwbGF5ZWQuXG4gICAqL1xuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHN3aXRjaCAobG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzXCI6IHtcbiAgICAgICAgY29uc3QgcGxheWluZyA9XG4gICAgICAgICAgdGhpcy5vcGVuTWluaWdhbWUocGVnZ2xlKSB8fFxuICAgICAgICAgIHRoaXMub3Blbk1pbmlnYW1lKGZsYXBweSkgfHxcbiAgICAgICAgICB0aGlzLm9wZW5NaW5pZ2FtZShoYXRjaGxpbmdzKVxuXG4gICAgICAgIGlmICghcGxheWluZykge1xuICAgICAgICAgIFNlc3Npb25TdG9yYWdlLm1pbmlnYW1lc0RvbmUgPSB0cnVlXG4gICAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxCdXR0b25FbGVtZW50PihcbiAgICAgICAgICAgICAgJy5taW5pZ2FtZXMtcnVsZXMgW3JlbD1cImJ0bi1jYW5jZWxcIl0nXG4gICAgICAgICAgICApXG4gICAgICAgICAgICA/LmNsaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwbGF5aW5nXG4gICAgICB9XG5cbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzL2dlbWJvbWJcIjpcbiAgICAgICAgYXdhaXQgcGxheVBlZ2dsZSgpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzL2J1YmJsdGVtcGxlXCI6XG4gICAgICAgIGF3YWl0IHBsYXlGbGFwcHkoKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiL21pbmlnYW1lcy9jb2Nvb25pbnBpY2tcIjpcbiAgICAgICAgYXdhaXQgcGxheUhhdGNobGluZ3MoKVxuICAgICAgICBicmVha1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhd2FpdCBjbGljazxIVE1MQW5jaG9yRWxlbWVudD4oXCIubWFpbi1tZW51LW1pbmlnYW1lcyBhXCIpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgYXdhaXQgY2xpY2s8SFRNTEFuY2hvckVsZW1lbnQ+KFwiLm1haW4tbWVudS1taW5pZ2FtZXMgYVwiKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKiogQ2xpY2sgb24gYSBtaW5pZ2FtZSdzIGxpbmsuIEByZXR1cm5zIHdoZXRoZXIgdGhlIG1pbmlnYW1lIHdhcyBvcGVuZWQuICovXG4gIHByaXZhdGUgb3Blbk1pbmlnYW1lKG1pbmlnYW1lOiBNaW5pZ2FtZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MU3BhbkVsZW1lbnQ+KFxuICAgICAgbWluaWdhbWUuYnV0dG9uU2VsZWN0b3JcbiAgICApXG4gICAgaWYgKCFzdGFydCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgc3RhcnQuY2xpY2soKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IE1pbmlnYW1lQWN0aW9uKClcbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vLi4vY29uc29sZVwiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgV2FpdEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLndhaXRcblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgQ29uc29sZS5sb2coYFdhaXRpbmcgZm9yIDEwIG1pbnV0ZXMuLi5gKVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSwgMTAgKiA2MCAqIDEwMDApXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXYWl0QWN0aW9uKClcbiIsImV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGljazxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KFxuICBzZWxlY3Rvcjogc3RyaW5nXG4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8VD4oc2VsZWN0b3IpXG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVyblxuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbClcblxuICAgICAgLy8gU29tZSBlbGVtZW50cyBkb24ndCBoYXZlIHRoZWlyIGNsaWNrIGhhbmRsZXJzIHJlYWR5IHVudGlsIHRoZXkncmVcbiAgICAgIC8vIGhvdmVyZWQuXG4gICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJNb3VzZUV2ZW50XCIpXG4gICAgICBtb3VzZUV2ZW50LmluaXRFdmVudChcIm1vdXNlb3ZlclwiKVxuICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50LmNsaWNrKClcbiAgICAgICAgcmVzb2x2ZShlbGVtZW50KVxuICAgICAgfSwgODAwKVxuICAgIH0sIDgwMClcbiAgfSlcbn1cbiIsImV4cG9ydCBlbnVtIEV4cGxvcmF0aW9uU3RhdHVzIHtcbiAgaWRsZSxcbiAgcmVzdWx0LFxuICBjYXB0dXJlLFxuICBwZW5kaW5nLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEhpc3RvcnkgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvbWFya2V0X2hpc3RvcnlcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEF1Y3Rpb25zKCk6IHZvaWQge1xuICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL21hcmtldHBsYWNlL2F1Y3Rpb25zXCIpIHJldHVyblxuXG4gIGNvbnN0IG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIiNtYXJrZXRwbGFjZS1hY3RpdmUtYXVjdGlvbnNcIlxuICApXG4gIGlmICghbWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucykgcmV0dXJuXG5cbiAgY29uc3QgbGF5b3V0MmNvbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLm1hcmtldHBsYWNlLW1haW4tY29udGFpbmVyICNsYXlvdXQtMmNvbFwiXG4gIClcbiAgaWYgKGxheW91dDJjb2wpIGxheW91dDJjb2wuc3R5bGUub3ZlcmZsb3dYID0gXCJ2aXNpYmxlXCJcblxuICBsb2FkSGlzdG9yeShtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zKVxufVxuXG5mdW5jdGlvbiBsb2FkSGlzdG9yeShtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zOiBIVE1MRGl2RWxlbWVudCk6IHZvaWQge1xuICBtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zLnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVwiKT8ucmVtb3ZlKClcbiAgbWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucy5xdWVyeVNlbGVjdG9yKFwiI3B1cmNoYXNlLWhpc3RvcnlcIik/LnJlbW92ZSgpXG4gIG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMucXVlcnlTZWxlY3RvcihcIiNzYWxlLWhpc3RvcnlcIik/LnJlbW92ZSgpXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL21hcmtldF9oaXN0b3J5Lmh0bWxcIilcbiAgY29uc3QgaGlzdG9yeTogTWFya2V0SGlzdG9yeSA9IHtcbiAgICBwdXJjaGFzZXM6IExvY2FsU3RvcmFnZS5wdXJjaGFzZXMubWFwKHB1cmNoYXNlID0+ICh7XG4gICAgICAuLi5wdXJjaGFzZSxcbiAgICAgIGRhdGU6IHRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuZGF0ZV90aW1lX2Zvcm1hdC5mb3JtYXQoXG4gICAgICAgIG5ldyBEYXRlKHB1cmNoYXNlLmRhdGUpXG4gICAgICApLFxuICAgIH0pKSxcbiAgICBzYWxlczogTG9jYWxTdG9yYWdlLnNhbGVzLm1hcChzYWxlID0+ICh7XG4gICAgICAuLi5zYWxlLFxuICAgICAgZGF0ZTogdHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5kYXRlX3RpbWVfZm9ybWF0LmZvcm1hdChcbiAgICAgICAgbmV3IERhdGUoc2FsZS5kYXRlKVxuICAgICAgKSxcbiAgICB9KSksXG4gIH1cblxuICBtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcih7IC4uLmhpc3RvcnksIHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgZm9yIChjb25zdCBwdXJjaGFzZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwiI3B1cmNoYXNlLWhpc3RvcnkgLm1hcmtldHBsYWNlLWF1Y3Rpb25zLWl0ZW1cIlxuICApKSB7XG4gICAgY29uc3QgaXRlbWlkID0gcHVyY2hhc2UuZGF0YXNldC5pdGVtaWRcbiAgICBwdXJjaGFzZS5xdWVyeVNlbGVjdG9yKFwiLmRlbGV0ZS1idXR0b25cIik/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBMb2NhbFN0b3JhZ2UucHVyY2hhc2VzID0gTG9jYWxTdG9yYWdlLnB1cmNoYXNlcy5maWx0ZXIoXG4gICAgICAgIHB1cmNoYXNlID0+IHB1cmNoYXNlLml0ZW1pZCAhPT0gaXRlbWlkXG4gICAgICApXG5cbiAgICAgIGxvYWRIaXN0b3J5KG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMpXG4gICAgfSlcbiAgfVxuXG4gIGZvciAoY29uc3Qgc2FsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwiI3NhbGUtaGlzdG9yeSAubWFya2V0cGxhY2Utc2FsZXMtaXRlbVwiXG4gICkpIHtcbiAgICBjb25zdCBpY29uID0gc2FsZS5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFwiLmFic3RyYWN0LWljb24gaW1nXCIpPy5zcmNcbiAgICBzYWxlLnF1ZXJ5U2VsZWN0b3IoXCIuZGVsZXRlLWJ1dHRvblwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5zYWxlcyA9IExvY2FsU3RvcmFnZS5zYWxlcy5maWx0ZXIoc2FsZSA9PiBzYWxlLmljb24gIT09IGljb24pXG5cbiAgICAgIGxvYWRIaXN0b3J5KG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMpXG4gICAgfSlcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBjYXJvdXNlbEJlZW1vb3ZBbm5veWFuY2VzIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2JlZW1vb3ZfYW5ub3lhbmNlc1wiXG5pbXBvcnQgeyBjYXJvdXNlbERvd25sb2FkRmFjZSB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9mYWNlXCJcbmltcG9ydCB7IGNhcm91c2VsRG93bmxvYWRHdWFyZGlhbiB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhblwiXG5pbXBvcnQgeyBjYXJvdXNlbEVFIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2VsZGFyeWFfZW5oYW5jZW1lbnRzXCJcbmltcG9ydCB7IGNhcm91c2VsVGFrZW92ZXIgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfdGFrZW92ZXJcIlxuaW1wb3J0IHsgZG93bmxvYWRGYWNlLCBkb3dubG9hZEd1YXJkaWFuIH0gZnJvbSBcIi4uL2Rvd25sb2FkLWNhbnZhc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB7IHRvZ2dsZVRha2VvdmVyIH0gZnJvbSBcIi4uL3Rha2VvdmVyL2JyYWluXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDYXJvdXNlbCgpOiB2b2lkIHtcbiAgY29uc3QgY2Fyb3VzZWxJbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2Fyb3VzZWwtaW5uZXJcIilcbiAgaWYgKCFjYXJvdXNlbElubmVyIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2Fyb3VzZWwtZWVcIikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIEltcG9ydCBjYXJvdXNlbCB0ZW1wbGF0ZVxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvY2Fyb3VzZWxfbmV3cy5odG1sXCIpXG5cbiAgY29uc3QgY29udGV4dHMgPSBbXG4gICAgLy8gSW50cm9cbiAgICBjYXJvdXNlbEVFLFxuXG4gICAgLy8gRmVhdHVyZXNcbiAgICAuLi4oTG9jYWxTdG9yYWdlLm1pbmlnYW1lcyB8fFxuICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnMgfHxcbiAgICBMb2NhbFN0b3JhZ2UubWFya2V0XG4gICAgICA/IFtjYXJvdXNlbFRha2VvdmVyXVxuICAgICAgOiBbXSksXG4gICAgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuLFxuICAgIGNhcm91c2VsRG93bmxvYWRGYWNlLFxuXG4gICAgLy8gQWRzXG4gICAgY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlcyxcbiAgXVxuXG4gIC8vIEFkZCBlbnRyaWVzIHRvIHRoZSBjYXJvdXNlbFxuICBjYXJvdXNlbElubmVyLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIGNvbnRleHRzLm1hcChiYW5uZXIgPT4gdGVtcGxhdGUucmVuZGVyKGJhbm5lcikpLmpvaW4oXCJcXG5cIilcbiAgKVxuXG4gIC8vIEFkZCBsaW5rc1xuICBmb3IgKGNvbnN0IGNhcm91c2VsIG9mIGNvbnRleHRzKSB7XG4gICAgaWYgKCFjYXJvdXNlbC5ocmVmKSBjb250aW51ZVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGNhcm91c2VsSW5uZXIucXVlcnlTZWxlY3RvcihgIyR7Y2Fyb3VzZWwuaWR9YClcbiAgICBpZiAoIWVsZW1lbnQpIGNvbnRpbnVlXG5cbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIG9wZW4oY2Fyb3VzZWwuaHJlZiwgXCJfYmxhbmtcIilcbiAgICB9KVxuICB9XG5cbiAgLy8gQWRkIGNsaWNrIGV2ZW50c1xuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGNhcm91c2VsRG93bmxvYWRGYWNlLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkRmFjZSlcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChjYXJvdXNlbERvd25sb2FkR3VhcmRpYW4uaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZG93bmxvYWRHdWFyZGlhbilcblxuICBjb25zdCB0YWtlb3ZlckFuY2hvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhcm91c2VsVGFrZW92ZXIuaWQpXG4gIHRha2VvdmVyQW5jaG9yPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIHRvZ2dsZVRha2VvdmVyKClcbiAgICB0YWtlb3ZlclRpdGxlKHRha2VvdmVyQW5jaG9yKVxuICB9KVxuXG4gIGlmICh0YWtlb3ZlckFuY2hvcikgdGFrZW92ZXJUaXRsZSh0YWtlb3ZlckFuY2hvcilcbn1cblxuZnVuY3Rpb24gdGFrZW92ZXJUaXRsZSh0YWtlb3ZlckFuY2hvcjogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgdGFrZW92ZXJINCA9IHRha2VvdmVyQW5jaG9yLnF1ZXJ5U2VsZWN0b3IoXCJoNFwiKVxuICBpZiAodGFrZW92ZXJINCkge1xuICAgIHRha2VvdmVySDQuaW5uZXJUZXh0ID0gU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXJcbiAgICAgID8gdHJhbnNsYXRlLmNhcm91c2VsLnRha2VvdmVyLmRpc2FibGVfdGFrZW92ZXJcbiAgICAgIDogdHJhbnNsYXRlLmNhcm91c2VsLnRha2VvdmVyLmVuYWJsZV90YWtlb3ZlclxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHNhdmVGYXZvdXJpdGUsIHNob3dGYXZvdXJpdGUgfSBmcm9tIFwiLi4vYXBwZWFyYW5jZS9mYWtlX2Zhdm91cml0ZXNcIlxuaW1wb3J0IHsgZXhwb3J0UHJldmlldywgaW1wb3J0T3V0Zml0IH0gZnJvbSBcIi4uL2FwcGVhcmFuY2UvZmF2b3VyaXRlc19hY3Rpb25zXCJcbmltcG9ydCB7IGRvd25sb2FkQXBwZWFyYW5jZSB9IGZyb20gXCIuLi9kb3dubG9hZC1jYW52YXNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCBpbmRleGVkX2RiIGZyb20gXCIuLi9pbmRleGVkX2RiL2luZGV4ZWRfZGJcIlxuaW1wb3J0IHR5cGUgeyBGYXZvdXJpdGVzQWN0aW9uIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Zhdm91cml0ZXNfYWN0aW9uXCJcbmltcG9ydCB0eXBlIHsgT3V0Zml0VGh1bWJzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL291dGZpdF90aHVtYlwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmF2b3VyaXRlcygpOiB2b2lkIHtcbiAgbG9hZEZhdm91cml0ZXNBY3Rpb25zKClcbiAgdm9pZCBsb2FkRmFrZUZhdm91cml0ZXMoKVxufVxuXG5mdW5jdGlvbiBsb2FkRmF2b3VyaXRlc0FjdGlvbnMoKTogdm9pZCB7XG4gIGNvbnN0IGFjdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZhdm9yaXRlcy1hY3Rpb25zXCIpXG4gIGlmICghYWN0aW9ucyB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmZhdm9yaXRlcy1hY3Rpb24tZWVcIikpIHJldHVyblxuXG4gIGNvbnN0IGFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9mYXZvdXJpdGVzX2FjdGlvbi5odG1sXCIpXG5cbiAgY29uc3QgaW1wb3J0QWN0aW9uOiBGYXZvdXJpdGVzQWN0aW9uID0ge1xuICAgIGlkOiBcImltcG9ydC1vdXRmaXRcIixcbiAgICB0ZXh0OiB0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmJ1dHRvbnMuaW1wb3J0LFxuICB9XG4gIGNvbnN0IGV4cG9ydEFjdGlvbjogRmF2b3VyaXRlc0FjdGlvbiA9IHtcbiAgICBpZDogXCJleHBvcnQtb3V0Zml0XCIsXG4gICAgdGV4dDogdHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5idXR0b25zLmV4cG9ydCxcbiAgfVxuICBjb25zdCBkb3dubG9hZEFjdGlvbjogRmF2b3VyaXRlc0FjdGlvbiA9IHtcbiAgICBpZDogXCJkb3dubG9hZC1vdXRmaXRcIixcbiAgICB0ZXh0OiB0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmJ1dHRvbnMuZG93bmxvYWQsXG4gIH1cblxuICBhY3Rpb25zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIGFjdGlvblRlbXBsYXRlLnJlbmRlcihpbXBvcnRBY3Rpb24pICtcbiAgICAgIGFjdGlvblRlbXBsYXRlLnJlbmRlcihleHBvcnRBY3Rpb24pICtcbiAgICAgIGFjdGlvblRlbXBsYXRlLnJlbmRlcihkb3dubG9hZEFjdGlvbilcbiAgKVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGltcG9ydEFjdGlvbi5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBpbXBvcnRPdXRmaXQpXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoZXhwb3J0QWN0aW9uLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGV4cG9ydFByZXZpZXcpXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoZG93bmxvYWRBY3Rpb24uaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZG93bmxvYWRBcHBlYXJhbmNlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEZha2VGYXZvdXJpdGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0aHVtYnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FsbC1vdXRmaXQtdGh1bWJzIC5tQ1NCX2NvbnRhaW5lclwiKVxuICBpZiAoIXRodW1icykgcmV0dXJuXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL291dGZpdF90aHVtYnMuaHRtbFwiKVxuXG4gIGNvbnN0IGZhdm91cml0ZXMgPSBhd2FpdCBpbmRleGVkX2RiLmdldEZhdm91cml0ZU91dGZpdHMoKVxuXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZWUtb3V0Zml0LXRodW1ic1wiKT8ucmVtb3ZlKClcbiAgdGh1bWJzLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICBvdXRmaXRzOiBmYXZvdXJpdGVzLFxuICAgIH0gYXMgT3V0Zml0VGh1bWJzKVxuICApXG5cbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIi5lZS1hdmFpbGFibGUtc2xvdFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpOiB2b2lkID0+IHZvaWQgc2F2ZUZhdm91cml0ZSgpKVxuXG4gIGZvciAoY29uc3QgZGl2IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLmVlLW91dGZpdC10aHVtYlwiXG4gICkpIHtcbiAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IGZhdm91cml0ZXMuZmluZChcbiAgICAgICAgZmF2b3VyaXRlID0+IGZhdm91cml0ZS5pZCA9PT0gTnVtYmVyKGRpdi5kYXRhc2V0LmFycmF5SW5kZXgpXG4gICAgICApXG4gICAgICBpZiAoIWZhdm91cml0ZSkgcmV0dXJuXG5cbiAgICAgIHNob3dGYXZvdXJpdGUoZmF2b3VyaXRlKVxuICAgIH0pXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgSG9tZUNvbnRlbnRTbWFsbCB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9ob21lX2NvbnRlbnRfc21hbGxcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEhvbWVDb250ZW50KCk6IHZvaWQge1xuICBjb25zdCBob21lQ29udGVudFNtYWxscyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaG9tZS1jb250ZW50LXNtYWxsc1wiKVxuICBpZiAoXG4gICAgIWhvbWVDb250ZW50U21hbGxzIHx8XG4gICAgaG9tZUNvbnRlbnRTbWFsbHMucXVlcnlTZWxlY3RvcihcIi5ob21lLWNvbnRlbnQtc21hbGwtZWVcIilcbiAgKVxuICAgIHJldHVyblxuXG4gIC8vIFJlbW92ZSBiYW5rXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaG9tZS1iYW5rXCIpPy5yZW1vdmUoKVxuXG4gIC8vIEFkZCBmb3J1bVxuICBjb25zdCBzbWFsbFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9ob21lX2NvbnRlbnRfc21hbGwuaHRtbFwiKVxuICBjb25zdCBzbWFsbENvbnRlbnQ6IEhvbWVDb250ZW50U21hbGwgPSB7XG4gICAgYmFja2dyb3VuZEltYWdlOlxuICAgICAgXCIvYXNzZXRzL2ltZy9taW5pZ2FtZXMvdHJlYXN1cmVodW50L2E0OGJiYzRlNDg0OTc0NWViZTZkYmNmNTMxM2ViM2YwLmpwZ1wiLFxuICAgIGg0OiB0cmFuc2xhdGUuaG9tZS5mb3J1bSxcbiAgICBocmVmOiBcIi9mb3J1bVwiLFxuICAgIGlkOiBcImZvcnVtXCIsXG4gIH1cblxuICBob21lQ29udGVudFNtYWxscy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBzbWFsbFRlbXBsYXRlLnJlbmRlcihzbWFsbENvbnRlbnQpXG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2Uvd2lzaGVkX2l0ZW1cIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9pbnRlcmZhY2VzL21hcmtldF9lbnRyeVwiXG5pbXBvcnQgeyBnZXRJdGVtRGV0YWlscyB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZV9oYW5kbGVyc1wiXG5cbmxldCBtYXJrZXRPYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGxcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNYXJrZXQoKTogdm9pZCB7XG4gIG1hcmtldE9ic2VydmVyPy5kaXNjb25uZWN0KClcbiAgbWFya2V0T2JzZXJ2ZXIgPSBudWxsXG5cbiAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9tYXJrZXRwbGFjZVwiKSByZXR1cm5cblxuICAvLyBgLm1hcmtldHBsYWNlLXNlYXJjaC1pdGVtc2AgaXMgdGhlIGNvbnRhaW5lciB3aG9zZSBIVE1MIGNvbnRlbnQgaXMgYmVpbmdcbiAgLy8gcmVwbGFjZWQgb24gZXZlcnkgYWN0aW9uLlxuICBjb25zdCBzZWFyY2hJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFVMaXN0RWxlbWVudD4oXG4gICAgXCIubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1zXCJcbiAgKVxuICBpZiAoIXNlYXJjaEl0ZW1zKSByZXR1cm5cblxuICBtYXJrZXRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGxvYWRXaXNobGlzdClcbiAgbWFya2V0T2JzZXJ2ZXIub2JzZXJ2ZShzZWFyY2hJdGVtcywge1xuICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgfSlcblxuICBsb2FkV2lzaGxpc3QoKVxufVxuXG5mdW5jdGlvbiBsb2FkV2lzaGxpc3QoKTogdm9pZCB7XG4gIGZvciAoY29uc3QgbGkgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcbiAgICBcIi5tYXJrZXRwbGFjZS1hYnN0cmFjdFwiXG4gICkpIHtcbiAgICBsaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIChfOiBNdXRhdGlvblJlY29yZFtdLCBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcik6IHZvaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hcmtldEVudHJ5ID0gZ2V0SXRlbURldGFpbHMobGkpXG4gICAgICAgICAgaWYgKCFtYXJrZXRFbnRyeSkgcmV0dXJuXG5cbiAgICAgICAgICBhZGRXaXNoaXN0QnV0dG9uKG1hcmtldEVudHJ5LCBvYnNlcnZlcilcbiAgICAgICAgfVxuICAgICAgKS5vYnNlcnZlKDxOb2RlPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2Utem9vbVwiKSwge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkV2lzaGlzdEJ1dHRvbihcbiAgbWFya2V0RW50cnk6IE1hcmtldEVudHJ5LFxuICBvYnNlcnZlcj86IE11dGF0aW9uT2JzZXJ2ZXJcbik6IHZvaWQge1xuICBjb25zdCBidXR0b25zQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgXCIjbWFya2V0cGxhY2UtaXRlbURldGFpbFwiXG4gIClcbiAgaWYgKCFidXR0b25zQ29udGFpbmVyKSByZXR1cm5cbiAgb2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuICBoaWphY2tCdXlCdXR0b25zKG1hcmtldEVudHJ5KVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtaXRlbURldGFpbC1pbmZvLWF1dG9idXlcIik/LnJlbW92ZSgpXG4gIGNvbnN0IGJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9idXR0b24uaHRtbFwiKVxuICBidXR0b25zQ29udGFpbmVyLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIGJ1dHRvblRlbXBsYXRlLnJlbmRlcih7IHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgYnV0dG9uc0NvbnRhaW5lclxuICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIiNtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWluZm8tYXV0b2J1eVwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGFkZFRvV2lzaGxpc3RGbGF2cihtYXJrZXRFbnRyeSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBhZGRUb1dpc2hsaXN0RmxhdnIobWFya2V0RW50cnk6IE1hcmtldEVudHJ5KTogdm9pZCB7XG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2ci5odG1sXCIpXG5cbiAgJC5mbGF2cih7XG4gICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsb3NlOiB7IHN0eWxlOiBcImNsb3NlXCIgfSxcbiAgICAgIHNhdmU6IHtcbiAgICAgICAgYWN0aW9uOiAoKSA9PiBzYXZlKG1hcmtldEVudHJ5KSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkaWFsb2c6IFwicHJvbXB0XCIsXG4gICAgcHJvbXB0OiB7XG4gICAgICB2YWx1ZTogXCJcIixcbiAgICB9LFxuICAgIG9uQnVpbGQ6ICRjb250YWluZXIgPT4ge1xuICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcblxuICAgICAgZG9jdW1lbnRcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpXG4gICAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsICh7IGtleSB9KSA9PiB7XG4gICAgICAgICAgaWYgKGtleSAhPT0gXCJFbnRlclwiKSByZXR1cm5cbiAgICAgICAgICBzYXZlKG1hcmtldEVudHJ5KVxuICAgICAgICB9KVxuICAgIH0sXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNhdmUobWFya2V0RW50cnk6IE1hcmtldEVudHJ5KTogYm9vbGVhbiB7XG4gIGNvbnN0IHByaWNlID0gTnVtYmVyKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpPy52YWx1ZS50cmltKClcbiAgKVxuICBpZiAoIXByaWNlIHx8IHByaWNlIDw9IDApIHtcbiAgICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QuaW52YWxpZF9wcmljZSlcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0LmZpbHRlcihcbiAgICB3aXNobGlzdEVudHJ5ID0+IHdpc2hsaXN0RW50cnkuaWNvbiAhPT0gbWFya2V0RW50cnkuaWNvblxuICApXG4gIGNvbnN0IHdpc2hlZDogV2lzaGVkSXRlbSA9IHsgLi4ubWFya2V0RW50cnksIHByaWNlIH1cbiAgd2lzaGxpc3QucHVzaCh3aXNoZWQpXG4gIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IHdpc2hsaXN0XG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICQuZmxhdnJOb3RpZihcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4ud2lzaGVkLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QuYWRkZWRfdG9fd2lzaGxpc3QoXG4gICAgICAgIHdpc2hlZC5uYW1lLFxuICAgICAgICB3aXNoZWQucHJpY2VcbiAgICAgICksXG4gICAgfSlcbiAgKVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBoaWphY2tCdXlCdXR0b25zKG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSk6IHZvaWQge1xuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiLm1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtYmlkLXByZXBhcmVcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBhZGRQdXJjaGFzZShtYXJrZXRFbnRyeSlcbiAgICB9KVxuXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIubWFya2V0cGxhY2UtaXRlbURldGFpbC1idXlcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBhZGRQdXJjaGFzZShtYXJrZXRFbnRyeSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBhZGRQdXJjaGFzZShtYXJrZXRFbnRyeTogTWFya2V0RW50cnkpOiB2b2lkIHtcbiAgTG9jYWxTdG9yYWdlLnB1cmNoYXNlcyA9IFtcbiAgICBtYXJrZXRFbnRyeSxcbiAgICAuLi5Mb2NhbFN0b3JhZ2UucHVyY2hhc2VzLmZpbHRlcihcbiAgICAgIHB1cmNoYXNlID0+IHB1cmNoYXNlLml0ZW1pZCAhPT0gbWFya2V0RW50cnkuaXRlbWlkXG4gICAgKSxcbiAgXVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHR5cGUgeyBNYWluTWVudSB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9tYWluX21lbnVcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1lbnUoKTogdm9pZCB7XG4gIGNvbnN0IG1lbnVJbm5lclJpZ2h0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZW51LWlubmVyLXJpZ2h0XCIpXG4gIGlmICghbWVudUlubmVyUmlnaHQgfHwgbWVudUlubmVyUmlnaHQucXVlcnlTZWxlY3RvcihcIi5tYWluLW1lbnUtZWVcIikpIHJldHVyblxuXG4gIC8vIFJlbW92ZSBiYW5rXG4gIG1lbnVJbm5lclJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIubWFpbi1tZW51LWJhbmtcIik/LnJlbW92ZSgpXG5cbiAgLy8gQWRkIEZvcnVtXG4gIGNvbnN0IG1lbnVUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvbWFpbl9tZW51Lmh0bWxcIilcbiAgY29uc3QgbWFpbk1lbnVGb3J1bTogTWFpbk1lbnUgPSB7XG4gICAgY2xhc3M6IFwiZm9ydW1cIixcbiAgICBocmVmOiBcIi9mb3J1bVwiLFxuICAgIHRleHQ6IHRyYW5zbGF0ZS5ob21lLmZvcnVtLFxuICB9XG5cbiAgbWVudUlubmVyUmlnaHQuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgbWVudVRlbXBsYXRlLnJlbmRlcihtYWluTWVudUZvcnVtKVxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGNoYW5nZVJlZ2lvbiB9IGZyb20gXCIuLi9hamF4L2NoYW5nZV9yZWdpb25cIlxuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4uL2FwaS9yZXN1bHQuZW51bVwiXG5pbXBvcnQgdHlwZSB7IE1hcFJlZ2lvbiB9IGZyb20gXCIuLi9lbGRhcnlhL2N1cnJlbnRfcmVnaW9uXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlQnV0dG9uIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2F1dG9fZXhwbG9yZV9idXR0b25cIlxuXG5sZXQgcGV0T2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGV0KCk6IHZvaWQge1xuICBwZXRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gIHBldE9ic2VydmVyID0gbnVsbFxuXG4gIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvcGV0XCIpIHJldHVyblxuXG4gIC8vIGAucGFnZS1tYWluLWNvbnRhaW5lcmAgY2hhbmdlcyBiYWNrZ3JvdW5kIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudGx5XG4gIC8vIHNlbGVjdGVkIHJlZ2lvbi5cbiAgY29uc3QgbWFpbkNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLnBhZ2UtbWFpbi1jb250YWluZXJcIlxuICApXG4gIGlmICghbWFpbkNvbnRhaW5lcikgcmV0dXJuXG5cbiAgcGV0T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihsb2FkUGV0KVxuICBwZXRPYnNlcnZlci5vYnNlcnZlKG1haW5Db250YWluZXIsIHtcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICB9KVxuXG4gIGxvYWRFeHBsb3JhdGlvbnMoKVxufVxuXG5mdW5jdGlvbiBsb2FkRXhwbG9yYXRpb25zKCk6IHZvaWQge1xuICBjb25zdCBhdXRvRXhwbG9yZUxvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuXG4gIGZvciAoY29uc3QgZGl2IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLm1hcC1sb2NhdGlvbltkYXRhLWlkXVwiXG4gICkpIHtcbiAgICBjb25zdCBsb2NhdGlvbklkID0gTnVtYmVyKGRpdi5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpKVxuICAgIGlmICghbG9jYXRpb25JZCkgY29udGludWVcblxuICAgIGxvYWRQaWN0b01hcChhdXRvRXhwbG9yZUxvY2F0aW9ucywgZGl2KVxuXG4gICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgICAgKF86IE11dGF0aW9uUmVjb3JkW10sIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgYWRkQXV0b0V4cGxvcmVCdXR0b24obG9jYXRpb25JZCwgb2JzZXJ2ZXIpXG4gICAgICAgIH1cbiAgICAgICkub2JzZXJ2ZSg8Tm9kZT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcC1sb2NhdGlvbi1wcmV2aWV3XCIpLCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQXV0b0V4cGxvcmVCdXR0b24oXG4gIGxvY2F0aW9uSWQ6IG51bWJlcixcbiAgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjYnV0dG9ucy1jb250YWluZXJcIilcbiAgaWYgKCFidXR0b25zQ29udGFpbmVyKSByZXR1cm5cbiAgb2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuXG4gIC8vIFBhcmFtZXRlcnMgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgdGVtcGxhdGVcbiAgY29uc3QgY29udGV4dDogQXV0b0V4cGxvcmVCdXR0b24gPSB7XG4gICAgbG9jYXRpb25JZCxcbiAgICBhY3RpdmU6IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5zb21lKFxuICAgICAgc2F2ZWQgPT4gc2F2ZWQubG9jYXRpb24uaWQgPT09IGxvY2F0aW9uSWQudG9TdHJpbmcoKVxuICAgICksXG4gICAgcmVnaW9uSWQ6IE51bWJlcihcbiAgICAgIGRvY3VtZW50XG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKFwiLm1pbmltYXAuY3VycmVudFtkYXRhLW1hcGlkXVwiKVxuICAgICAgICA/LmdldEF0dHJpYnV0ZShcImRhdGEtbWFwaWRcIilcbiAgICApLFxuICB9XG5cbiAgLy8gQWRkIHRoZSBhdXRvIGV4cGxvcmUgYnV0dG9uXG4gIGJ1dHRvbnNDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNhdXRvLWV4cGxvcmUtYnV0dG9uXCIpPy5yZW1vdmUoKVxuICBjb25zdCBhdXRvRXhwbG9yZVRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2V4cGxvcmVfYnV0dG9uLmh0bWxcIilcbiAgYnV0dG9uc0NvbnRhaW5lci5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBhdXRvRXhwbG9yZVRlbXBsYXRlLnJlbmRlcih7IC4uLmNvbnRleHQsIHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgLy8gQmluZCBgYXV0b0V4cGxvcmVgIGFuZCBgbG9hZFBpY3RvTWFwc2BcbiAgYnV0dG9uc0NvbnRhaW5lclxuICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxCdXR0b25FbGVtZW50PihcIiNhdXRvLWV4cGxvcmUtYnV0dG9uXCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgdm9pZCBhdXRvRXhwbG9yZShjb250ZXh0KS50aGVuKGxvYWRQaWN0b01hcHMpXG4gICAgfSlcblxuICB2b2lkIGRpc2FibGVFeHBsb3JlKGNvbnRleHQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2FibGVFeHBsb3JlKGNvbnRleHQ6IEF1dG9FeHBsb3JlQnV0dG9uKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGVudHJ5ID0gYXdhaXQgZ2V0QXV0b0V4cGxvcmVFbnRyeShjb250ZXh0LnJlZ2lvbklkLCBjb250ZXh0LmxvY2F0aW9uSWQpXG4gIGlmICghZW50cnkpIHJldHVyblxuXG4gIGlmIChwZXRFbmVyZ3kgPCBOdW1iZXIoZW50cnkubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpKVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhwbG9yZS1idXR0b25cIik/LmNsYXNzTGlzdC5hZGQoXCJkaXNhYmxlZFwiKVxufVxuXG5hc3luYyBmdW5jdGlvbiBhdXRvRXhwbG9yZShjb250ZXh0OiBBdXRvRXhwbG9yZUJ1dHRvbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoY29udGV4dC5hY3RpdmUpIHtcbiAgICBjb25zdCBmaWx0ZXJlZExvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXG4gICAgICBzYXZlZCA9PiBzYXZlZC5sb2NhdGlvbi5pZCAhPT0gY29udGV4dC5sb2NhdGlvbklkLnRvU3RyaW5nKClcbiAgICApXG4gICAgTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zID0gZmlsdGVyZWRMb2NhdGlvbnNcbiAgICBhZGRBdXRvRXhwbG9yZUJ1dHRvbihjb250ZXh0LmxvY2F0aW9uSWQpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBuZXdBdXRvRXhwbG9yZSA9IGF3YWl0IGdldEF1dG9FeHBsb3JlRW50cnkoXG4gICAgY29udGV4dC5yZWdpb25JZCxcbiAgICBjb250ZXh0LmxvY2F0aW9uSWRcbiAgKVxuICBpZiAoIW5ld0F1dG9FeHBsb3JlKSByZXR1cm5cblxuICBjb25zdCBuZXdMb2NhdGlvbnMgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnNcbiAgbmV3TG9jYXRpb25zLnB1c2gobmV3QXV0b0V4cGxvcmUpXG4gIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IG5ld0xvY2F0aW9uc1xuICBhZGRBdXRvRXhwbG9yZUJ1dHRvbihjb250ZXh0LmxvY2F0aW9uSWQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEF1dG9FeHBsb3JlRW50cnkoXG4gIHJlZ2lvbklkOiBudW1iZXIsXG4gIGxvY2F0aW9uSWQ6IG51bWJlclxuKTogUHJvbWlzZTxBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbD4ge1xuICBjb25zdCByZWdpb24gPSBhd2FpdCBnZXRSZWdpb24ocmVnaW9uSWQpXG4gIGlmICghcmVnaW9uKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGxvY2F0aW9uID0gcmVnaW9uLmxvY2F0aW9ucy5maW5kKFxuICAgIGxvY2F0aW9uID0+IGxvY2F0aW9uLmlkID09PSBsb2NhdGlvbklkLnRvU3RyaW5nKClcbiAgKVxuICBpZiAoIWxvY2F0aW9uKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb24sXG4gICAgcmVnaW9uLFxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlZ2lvbihpZDogbnVtYmVyKTogUHJvbWlzZTxNYXBSZWdpb24gfCBudWxsPiB7XG4gIGlmIChpZC50b1N0cmluZygpID09PSBjdXJyZW50UmVnaW9uLmlkKSByZXR1cm4gY3VycmVudFJlZ2lvblxuXG4gIGNvbnN0IGpzb24gPSBhd2FpdCBjaGFuZ2VSZWdpb24oaWQpXG4gIGlmIChqc29uLnJlc3VsdCA9PT0gUmVzdWx0LnN1Y2Nlc3MpIHJldHVybiBqc29uLmRhdGEuY3VycmVudFJlZ2lvblxuXG4gIHJldHVybiBudWxsXG59XG5cbi8vIFBpY3RvIG1hcFxuXG5mdW5jdGlvbiBsb2FkUGljdG9NYXBzKCk6IHZvaWQge1xuICBjb25zdCBhdXRvRXhwbG9yZUxvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuICBmb3IgKGNvbnN0IGRpdiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIi5tYXAtbG9jYXRpb25bZGF0YS1pZF1cIlxuICApKSB7XG4gICAgbG9hZFBpY3RvTWFwKGF1dG9FeHBsb3JlTG9jYXRpb25zLCBkaXYpXG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZFBpY3RvTWFwKFxuICBhdXRvRXhwbG9yZUxvY2F0aW9uczogQXV0b0V4cGxvcmVMb2NhdGlvbltdLFxuICBkaXY6IEhUTUxEaXZFbGVtZW50XG4pOiB2b2lkIHtcbiAgY29uc3QgbWFwTG9jYXRpb24gPSBkaXYuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZFwiKVxuICBpZiAoIW1hcExvY2F0aW9uKSByZXR1cm5cblxuICBkaXYuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYXV0b0V4cGxvcmVMb2NhdGlvbnMuc29tZShcbiAgICBzYXZlZCA9PiBzYXZlZC5sb2NhdGlvbi5pZCA9PT0gbWFwTG9jYXRpb25cbiAgKVxuICAgID8gXCJ1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC9wZXQvaWNvbnMvcGljdG9fbWFwX2V4cGxvLnBuZylcIlxuICAgIDogXCJ1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC9wZXQvaWNvbnMvcGljdG9fbWFwLnBuZylcIlxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBkb3dubG9hZFByb2ZpbGUgfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBleHBvcnRPdXRmaXQgfSBmcm9tIFwiLi4vb3V0Zml0XCJcbmltcG9ydCB0eXBlIHsgUHJvZmlsZUNvbnRhY3RBY3Rpb24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvcHJvZmlsZV9jb250YWN0X2FjdGlvblwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvZmlsZSgpOiB2b2lkIHtcbiAgY29uc3QgcHJvZmlsZUNvbnRhY3RBY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgXCJwcm9maWxlLWNvbnRhY3QtYWN0aW9uc1wiXG4gIClcbiAgaWYgKFxuICAgICFwcm9maWxlQ29udGFjdEFjdGlvbnMgfHxcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnByb2ZpbGUtY29udGFjdC1hY3Rpb24tZWVcIilcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvcHJvZmlsZV9jb250YWN0X2FjdGlvbi5odG1sXCIpXG5cbiAgY29uc3QgcHJvZmlsZUFjdGlvbkV4cG9ydDogUHJvZmlsZUNvbnRhY3RBY3Rpb24gPSB7XG4gICAgaWQ6IFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1leHBvcnRcIixcbiAgICBhY3Rpb25EZXNjcmlwdGlvbjogdHJhbnNsYXRlLnByb2ZpbGUuZXhwb3J0X291dGZpdCxcbiAgfVxuICBjb25zdCBwcm9maWxlQWN0aW9uRG93bmxvYWQ6IFByb2ZpbGVDb250YWN0QWN0aW9uID0ge1xuICAgIGlkOiBcInByb2ZpbGUtY29udGFjdC1hY3Rpb24tZG93bmxvYWRcIixcbiAgICBhY3Rpb25EZXNjcmlwdGlvbjogdHJhbnNsYXRlLnByb2ZpbGUuZG93bmxvYWRfb3V0Zml0LFxuICB9XG5cbiAgLy8gQWRkIGVudHJpZXNcbiAgcHJvZmlsZUNvbnRhY3RBY3Rpb25zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcihwcm9maWxlQWN0aW9uRXhwb3J0KVxuICApXG4gIHByb2ZpbGVDb250YWN0QWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIocHJvZmlsZUFjdGlvbkRvd25sb2FkKVxuICApXG5cbiAgLy8gQWRkIGNsaWNrIGV2ZW50c1xuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChwcm9maWxlQWN0aW9uRXhwb3J0LmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGV4cG9ydFByb2ZpbGUpXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKHByb2ZpbGVBY3Rpb25Eb3dubG9hZC5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkb3dubG9hZFByb2ZpbGUpXG59XG5cbmZ1bmN0aW9uIGV4cG9ydFByb2ZpbGUoKTogdm9pZCB7XG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSGVhZGluZ0VsZW1lbnQ+KFxuICAgIFwiI21haW4tc2VjdGlvbiAuc2VjdGlvbi10aXRsZVwiXG4gIClcblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoU2FjaGEuQXZhdGFyLmF2YXRhcnMpLmZpbHRlcihrZXkgPT5cbiAgICBrZXkuc3RhcnRzV2l0aChcIiNwbGF5ZXJQcm9maWxlQXZhdGFyXCIpXG4gIClcblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgZXhwb3J0T3V0Zml0KGtleSwgdGl0bGU/LnRleHRDb250ZW50Py50cmltKCkpXG4gIH1cbn1cbiIsImltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBJdGVtRm9yU2FsZURhdGFJdGVtIH0gZnJvbSBcIi4uL3NlbGwvaXRlbV9mb3Jfc2FsZV9kYXRhX2l0ZW1cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFNlbGwoKTogdm9pZCB7XG4gIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvbWFya2V0cGxhY2Uvc2VsbFwiKSByZXR1cm5cbiAgY29uc3QgaXRlbXNGb3JTYWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MVUxpc3RFbGVtZW50PihcbiAgICBcIi5tYXJrZXRwbGFjZS1pdGVtc0ZvclNhbGUtaXRlbXNcIlxuICApXG4gIGlmICghaXRlbXNGb3JTYWxlKSByZXR1cm5cblxuICBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgaGFuZGxlSXRlbXNGb3JTYWxlKGl0ZW1zRm9yU2FsZSlcbiAgfSkub2JzZXJ2ZShpdGVtc0ZvclNhbGUsIHsgY2hpbGRMaXN0OiB0cnVlIH0pXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUl0ZW1zRm9yU2FsZShpdGVtc0ZvclNhbGU6IEhUTUxVTGlzdEVsZW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgbGlzID0gaXRlbXNGb3JTYWxlLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXCJsaVwiKVxuXG4gIGZvciAoY29uc3QgbGkgb2YgbGlzKSB7XG4gICAgbGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFJdGVtOiBJdGVtRm9yU2FsZURhdGFJdGVtID0gSlNPTi5wYXJzZShsaS5kYXRhc2V0Lml0ZW0gPz8gXCJ7fVwiKVxuICAgICAgY29uc3QgaWNvbiA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCJpbWdcIik/LnNyY1xuICAgICAgaWYgKCFpY29uKSByZXR1cm5cblxuICAgICAgY29uc3Qgc2FsZURldGFpbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgICBcIiNtYXJrZXRwbGFjZS1zYWxlRGV0YWlsXCJcbiAgICAgIClcbiAgICAgIGlmICghc2FsZURldGFpbCkgcmV0dXJuXG5cbiAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgICAoXzogTXV0YXRpb25SZWNvcmRbXSwgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBzZWxsQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICAgICAgICBcIi5tYXJrZXRwbGFjZS1pdGVtRGV0YWlsLXNlbGxcIlxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAoIXNlbGxCdXR0b24pIHJldHVyblxuICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuXG4gICAgICAgICAgaGFuZGxlU2VsbEJ1dHRvbihzZWxsQnV0dG9uLCBkYXRhSXRlbSwgaWNvbilcbiAgICAgICAgfVxuICAgICAgKS5vYnNlcnZlKHNhbGVEZXRhaWwsIHsgY2hpbGRMaXN0OiB0cnVlIH0pXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVTZWxsQnV0dG9uKFxuICBpdGVtRGV0YWlsU2VsbDogSFRNTERpdkVsZW1lbnQsXG4gIGRhdGFJdGVtOiBJdGVtRm9yU2FsZURhdGFJdGVtLFxuICBpY29uOiBzdHJpbmdcbik6IHZvaWQge1xuICBpdGVtRGV0YWlsU2VsbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRQcmljZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXG4gICAgICBcIiNtYXJrZXRwbGFjZS1zYWxlRGV0YWlsLWN1cnJlbnRQcmljZVwiXG4gICAgKT8udmFsdWVcbiAgICBjb25zdCBidXlOb3dQcmljZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXG4gICAgICBcIiNtYXJrZXRwbGFjZS1zYWxlRGV0YWlsLWJ1eU5vd1ByaWNlXCJcbiAgICApPy52YWx1ZVxuXG4gICAgaWYgKCFjdXJyZW50UHJpY2UgfHwgIWJ1eU5vd1ByaWNlKSByZXR1cm5cblxuICAgIExvY2FsU3RvcmFnZS5zYWxlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgLi4uZGF0YUl0ZW0sXG4gICAgICAgIGN1cnJlbnRQcmljZTogTnVtYmVyKGN1cnJlbnRQcmljZSksXG4gICAgICAgIGJ1eU5vd1ByaWNlOiBOdW1iZXIoYnV5Tm93UHJpY2UpLFxuICAgICAgICBpY29uLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgfSxcbiAgICAgIC4uLkxvY2FsU3RvcmFnZS5zYWxlcyxcbiAgICBdXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGdldE5hbWUgfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYWNjb3VudFJpZ2h0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhY2NvdW50LXJpZ2h0IGRpdlwiKVxuICBpZiAoIWFjY291bnRSaWdodCB8fCBhY2NvdW50UmlnaHQucXVlcnlTZWxlY3RvcihcIi5hY2NvdW50LWVlLWJsb2NcIikpIHJldHVyblxuXG4gIGNvbnN0IHNldHRpbmdzVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3NldHRpbmdzLmh0bWxcIilcblxuICBhY2NvdW50UmlnaHQuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgc2V0dGluZ3NUZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4uKGF3YWl0IExvY2FsU3RvcmFnZS5nZXRTZXR0aW5ncygpKSxcbiAgICAgIHRyYW5zbGF0ZSxcbiAgICB9KVxuICApXG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1kZWJ1Zy1lbmFibGVkXCIpPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIExvY2FsU3RvcmFnZS5kZWJ1ZyA9ICFMb2NhbFN0b3JhZ2UuZGVidWdcbiAgICByZWxvYWRTZXR0aW5ncygpXG4gIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1taW5pZ2FtZXMtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5taW5pZ2FtZXMgPSAhTG9jYWxTdG9yYWdlLm1pbmlnYW1lc1xuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1leHBsb3JhdGlvbnMtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnMgPSAhTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9uc1xuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1tYXJrZXQtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5tYXJrZXQgPSAhTG9jYWxTdG9yYWdlLm1hcmtldFxuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1pbXBvcnRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBpbXBvcnRTZXR0aW5ncylcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChcImVlLWV4cG9ydFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHZvaWQgZXhwb3J0U2V0dGluZ3MoKSlcbn1cblxuZnVuY3Rpb24gcmVsb2FkU2V0dGluZ3MoKTogdm9pZCB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiLmFjY291bnQtZWUtYmxvY1wiKT8ucmVtb3ZlKClcbiAgdm9pZCBsb2FkU2V0dGluZ3MoKVxufVxuXG5mdW5jdGlvbiBpbXBvcnRTZXR0aW5ncygpOiB2b2lkIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImZpbGVcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwiYWNjZXB0XCIsIFwiYXBwbGljYXRpb24vanNvblwiKVxuICBpbnB1dC5jbGljaygpXG5cbiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGV2ZW50ID0+IHtcbiAgICBpZiAoIWV2ZW50LnRhcmdldCkgcmV0dXJuXG4gICAgY29uc3QgZmlsZXMgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5maWxlc1xuICAgIGlmICghZmlsZXMpIHJldHVyblxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXVxuICAgIGlmICghZmlsZSkgcmV0dXJuXG4gICAgdm9pZCBmaWxlLnRleHQoKS50aGVuKGFzeW5jIHZhbHVlID0+IHtcbiAgICAgIGlmICghdmFsdWUpIHJldHVyblxuXG4gICAgICBhd2FpdCBMb2NhbFN0b3JhZ2Uuc2V0U2V0dGluZ3MoSlNPTi5wYXJzZSh2YWx1ZSkpXG5cbiAgICAgIHJlbG9hZFNldHRpbmdzKClcbiAgICAgICQuZmxhdnJOb3RpZih0cmFuc2xhdGUuYWNjb3VudC5pbXBvcnRlZClcbiAgICB9KVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHBvcnRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaHJlZiA9XG4gICAgXCJkYXRhOnRleHQvanNvbjtjaGFyc2V0PXV0Zi04LFwiICtcbiAgICBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBKU09OLnN0cmluZ2lmeShhd2FpdCBMb2NhbFN0b3JhZ2UuZ2V0U2V0dGluZ3MoKSwgbnVsbCwgMilcbiAgICApXG5cbiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gIGEuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBocmVmKVxuICBhLnNldEF0dHJpYnV0ZShcbiAgICBcImRvd25sb2FkXCIsXG4gICAgYCR7Z2V0TmFtZSgpID8/IFwiZWxkYXJ5YS1lbmhhbmNlbWVudHNcIn0tc2V0dGluZ3MuanNvbmBcbiAgKVxuICBhLmNsaWNrKClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgdG9nZ2xlVGFrZW92ZXIgfSBmcm9tIFwiLi4vdGFrZW92ZXIvYnJhaW5cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFRvcEJhcigpOiB2b2lkIHtcbiAgY29uc3QgaGVhZGVyUmlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhlYWRlci1yaWdodFwiKVxuICBpZiAoIWhlYWRlclJpZ2h0KSByZXR1cm5cblxuICBjb25zdCBoZWFkZXJUYWtlb3ZlciA9IGhlYWRlclJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIjaGVhZGVyLXRha2VvdmVyXCIpXG4gIGlmIChoZWFkZXJUYWtlb3ZlcikgaGVhZGVyVGFrZW92ZXIucmVtb3ZlKClcbiAgZWxzZSBsb2FkTGlua3MoKVxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9oZWFkZXJfdGFrZW92ZXIuaHRtbFwiKVxuICBoZWFkZXJSaWdodC5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJhZnRlcmJlZ2luXCIsXG4gICAgdGVtcGxhdGUucmVuZGVyKHsgdGFrZW92ZXI6IFNlc3Npb25TdG9yYWdlLnRha2VvdmVyLCB0cmFuc2xhdGUgfSlcbiAgKVxuXG4gIGhlYWRlclJpZ2h0XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjaGVhZGVyLXRha2VvdmVyXCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdG9nZ2xlVGFrZW92ZXIpXG59XG5cbmZ1bmN0aW9uIGxvYWRMaW5rcygpOiB2b2lkIHtcbiAgY29uc3QgaGVhZGVyUHJvZmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaGVhZGVyLXByb2ZpbGVcIik/LmZpcnN0Q2hpbGRcbiAgaWYgKGhlYWRlclByb2ZpbGU/LnRleHRDb250ZW50KSB7XG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gICAgYS5ocmVmID0gXCIvcGxheWVyL3Byb2ZpbGVcIlxuICAgIGEuc3R5bGUuY29sb3IgPSBcInZhcigtLXRleHQtY29sb3IpXCJcbiAgICBhLnN0eWxlLmZvbnRGYW1pbHkgPSAnXCJBbGVncmV5YSBTYW5zXCIsIHNhbnMtc2VyaWYnXG4gICAgYS5zdHlsZS5mb250V2VpZ2h0ID0gXCJ1bnNldFwiXG4gICAgYS50ZXh0Q29udGVudCA9IGhlYWRlclByb2ZpbGUudGV4dENvbnRlbnQudHJpbSgpXG5cbiAgICBjb25zdCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIilcbiAgICBwLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWVuZFwiLCBhKVxuXG4gICAgaGVhZGVyUHJvZmlsZS5yZXBsYWNlV2l0aChwKVxuICB9XG5cbiAgY29uc3QgYXZhdGFyVGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2F2YXRhci1tZW51LWNvbnRhaW5lci1vdXRlcj5wXCIpXG4gIGlmIChhdmF0YXJUaXRsZT8udGV4dENvbnRlbnQpXG4gICAgYXZhdGFyVGl0bGUuaW5uZXJIVE1MID0gYDxhIGhyZWY9XCIvcGxheWVyL3Byb2ZpbGVcIiBzdHlsZT1cImNvbG9yOiAjRkZGRkZGOyBmb250LXNpemU6IDIzcHg7IGZvbnQtd2VpZ2h0OiA5MDA7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XCI+JHthdmF0YXJUaXRsZS50ZXh0Q29udGVudC50cmltKCl9PC9hPmBcblxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiI2F2YXRhci1tZW51LWNvbnRhaW5lcj5jYW52YXNcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBwYWdlTG9hZChcIi9wbGF5ZXIvYXBwZWFyYW5jZVwiKSlcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBXaXNobGlzdFNldHRpbmdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL3dpc2hsaXN0X3NldHRpbmdzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRXaXNobGlzdCgpOiB2b2lkIHtcbiAgY29uc3QgbWFya2V0cGxhY2VNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1tZW51XCIpXG4gIGlmICghbWFya2V0cGxhY2VNZW51KSByZXR1cm5cblxuICBpZiAoIW1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yKFwiI3dpc2hsaXN0LWJ1dHRvblwiKSkge1xuICAgIGZvciAoY29uc3QgYSBvZiBtYXJrZXRwbGFjZU1lbnUucXVlcnlTZWxlY3RvckFsbChcImFcIikpIHtcbiAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgcGFnZUxvYWQoYS5ocmVmLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBtYXJrZXRwbGFjZU1lbnUucXVlcnlTZWxlY3RvcihcIiN3aXNobGlzdC1idXR0b25cIik/LnJlbW92ZSgpXG4gIGNvbnN0IHdpc2hsaXN0QnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X2J1dHRvbi5odG1sXCIpXG4gIG1hcmtldHBsYWNlTWVudS5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB3aXNobGlzdEJ1dHRvblRlbXBsYXRlLnJlbmRlcih7IHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgY29uc3Qgd2lzaGxpc3RCdXR0b24gPVxuICAgIG1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yPEhUTUxBbmNob3JFbGVtZW50PihcIiN3aXNobGlzdC1idXR0b25cIilcbiAgd2lzaGxpc3RCdXR0b24/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgaW5zZXJ0V2lzaGxpc3Qod2lzaGxpc3RCdXR0b24pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGluc2VydFdpc2hsaXN0KGJ1dHRvbjogSFRNTEFuY2hvckVsZW1lbnQpOiB2b2lkIHtcbiAgLy8gQXNzaXN0YW5jZVxuICBjb25zdCBhc3Npc3RhbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tYXJrZXRwbGFjZS1hc3Npc3RhbmNlXCIpXG4gIGlmIChhc3Npc3RhbmNlKSBhc3Npc3RhbmNlLnRleHRDb250ZW50ID0gdHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5hc3Npc3RhbmNlXG5cbiAgLy8gTWVudVxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiI21hcmtldHBsYWNlLW1lbnUgLmFjdGl2ZVwiKVxuICAgID8uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuICBidXR0b24uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKVxuXG4gIC8vIEZpbHRlcnNcbiAgY29uc3QgZmlsdGVycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtZmlsdGVyc1wiKVxuICBpZiAoZmlsdGVycykgZmlsdGVycy5pbm5lckhUTUwgPSBcIlwiXG5cbiAgLy8gQ29udGVudFxuICBjb25zdCB3aXNobGlzdFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC93aXNobGlzdF9zZXR0aW5ncy5odG1sXCIpXG4gIGNvbnN0IGNvbnRhaW5lciA9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tYXJrZXRwbGFjZS1jb250YWluZXJcIikgPz9cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLWFjdGl2ZS1hdWN0aW9uc1wiKSA/P1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtaXRlbXNGb3JTYWxlXCIpXG4gIGlmICghY29udGFpbmVyKSByZXR1cm5cblxuICBjb25zdCB3aXNobGlzdENvbnRleHQ6IFdpc2hsaXN0U2V0dGluZ3MgPSB7XG4gICAgd2lzaGxpc3Q6IExvY2FsU3RvcmFnZS53aXNobGlzdCxcbiAgfVxuICBjb250YWluZXIuaW5uZXJIVE1MID0gd2lzaGxpc3RUZW1wbGF0ZS5yZW5kZXIoe1xuICAgIC4uLndpc2hsaXN0Q29udGV4dCxcbiAgICB0cmFuc2xhdGUsXG4gIH0pXG5cbiAgLy8gQnV0dG9uc1xuICBmb3IgKGNvbnN0IHRyIG9mIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwidHJcIikpIHtcbiAgICBjb25zdCB3ZWFyYWJsZWl0ZW1pZCA9IHRyLmRhdGFzZXQud2VhcmFibGVpdGVtaWRcbiAgICBpZiAoIXdlYXJhYmxlaXRlbWlkKSBjb250aW51ZVxuXG4gICAgLy8gUmVzZXQgc3RhdHVzXG4gICAgY29uc3QgcmVzZXQgPSB0ci5xdWVyeVNlbGVjdG9yKFwiLnJlc2V0LWl0ZW0tc3RhdHVzXCIpXG4gICAgaWYgKHJlc2V0KVxuICAgICAgcmVzZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgcmVzZXRTdGF0dXMod2VhcmFibGVpdGVtaWQpXG4gICAgICAgIGluc2VydFdpc2hsaXN0KGJ1dHRvbilcbiAgICAgIH0pXG5cbiAgICAvLyBEZWxldGUgaXRlbSBmcm9tIHdpc2hsaXN0XG4gICAgY29uc3QgZGVsZXRlQnV0dG9uID0gdHIucXVlcnlTZWxlY3RvcihcIi5kZWxldGUtd2lzaGxpc3QtaXRlbVwiKVxuICAgIGlmIChkZWxldGVCdXR0b24pXG4gICAgICBkZWxldGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgZGVsZXRlSXRlbSh3ZWFyYWJsZWl0ZW1pZClcbiAgICAgICAgaW5zZXJ0V2lzaGxpc3QoYnV0dG9uKVxuICAgICAgfSlcblxuICAgIC8vIENoYW5nZSBwcmljZVxuICAgIGNvbnN0IGVkaXRQcmljZSA9IHRyLnF1ZXJ5U2VsZWN0b3IoXCIuZWRpdC1wcmljZVwiKVxuICAgIGlmIChlZGl0UHJpY2UpXG4gICAgICBlZGl0UHJpY2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgdm9pZCBjaGFuZ2VQcmljZSh3ZWFyYWJsZWl0ZW1pZCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgaW5zZXJ0V2lzaGxpc3QoYnV0dG9uKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldFN0YXR1cyh3ZWFyYWJsZWl0ZW1pZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KFxuICAgIGl0ZW0gPT4gaXRlbS53ZWFyYWJsZWl0ZW1pZCA9PT0gd2VhcmFibGVpdGVtaWRcbiAgKVxuICBjb25zdCBlbnRyeSA9IHdpc2hsaXN0W2luZGV4XVxuICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICBkZWxldGUgZW50cnkuZXJyb3JcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xuICAgIC4uLndpc2hsaXN0LnNsaWNlKHVuZGVmaW5lZCwgaW5kZXgpLFxuICAgIGVudHJ5LFxuICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcbiAgXVxufVxuXG5mdW5jdGlvbiBkZWxldGVJdGVtKHdlYXJhYmxlaXRlbWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0LmZpbHRlcihcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgIT09IHdlYXJhYmxlaXRlbWlkXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hhbmdlUHJpY2Uod2VhcmFibGVpdGVtaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvY2hhbmdlX3ByaWNlX2ZsYXZyLmh0bWxcIilcblxuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgPT09IHdlYXJhYmxlaXRlbWlkXG4gIClcbiAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICQuZmxhdnIoe1xuICAgICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pLFxuICAgICAgZGlhbG9nOiBcInByb21wdFwiLFxuICAgICAgcHJvbXB0OiB7XG4gICAgICAgIHZhbHVlOiBlbnRyeS5wcmljZS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgY2xvc2U6IHtcbiAgICAgICAgICBzdHlsZTogXCJjbG9zZVwiLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNhdmU6IHtcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHNhdmUod2VhcmFibGVpdGVtaWQsIHJlc29sdmUpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9uQnVpbGQ6ICRjb250YWluZXIgPT4ge1xuICAgICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwibmV3LWxheW91dC1wb3B1cFwiKVxuXG4gICAgICAgIGRvY3VtZW50XG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpXG4gICAgICAgICAgPy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgKHsga2V5IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuXG4gICAgICAgICAgICBzYXZlKHdlYXJhYmxlaXRlbWlkLCByZXNvbHZlKVxuICAgICAgICAgIH0pXG4gICAgICB9LFxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNhdmUod2VhcmFibGVpdGVtaWQ6IHN0cmluZywgcmVzb2x2ZTogKCkgPT4gdm9pZCk6IGJvb2xlYW4ge1xuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgPT09IHdlYXJhYmxlaXRlbWlkXG4gIClcbiAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgaWYgKCFlbnRyeSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcHJpY2UgPSBOdW1iZXIoXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIik/LnZhbHVlLnRyaW0oKVxuICApXG4gIGlmICghcHJpY2UgfHwgcHJpY2UgPD0gMCkge1xuICAgICQuZmxhdnJOb3RpZih0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS5pbnZhbGlkX3ByaWNlKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZW50cnkucHJpY2UgPSBwcmljZVxuICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSBbXG4gICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXG4gICAgZW50cnksXG4gICAgLi4ud2lzaGxpc3Quc2xpY2UoaW5kZXggKyAxLCB1bmRlZmluZWQpLFxuICBdXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICQuZmxhdnJOb3RpZihcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4uZW50cnksXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS5jaGFuZ2VkX3ByaWNlKFxuICAgICAgICBlbnRyeS5uYW1lLFxuICAgICAgICBlbnRyeS5wcmljZVxuICAgICAgKSxcbiAgICB9KVxuICApXG5cbiAgcmVzb2x2ZSgpXG4gIHJldHVybiB0cnVlXG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0IHsgbG9hZERyZXNzaW5nRXhwZXJpZW5jZSB9IGZyb20gXCIuL2FwcGVhcmFuY2UvZHJlc3NpbmdfZXhwZXJpZW5jZVwiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBtaWdyYXRlIH0gZnJvbSBcIi4vbWlncmF0ZVwiXG5pbXBvcnQgeyBsb2FkVGFrZW92ZXIgfSBmcm9tIFwiLi90YWtlb3Zlci9icmFpblwiXG5pbXBvcnQgeyBsb2FkQXVjdGlvbnMgfSBmcm9tIFwiLi91aS9hdWN0aW9uc1wiXG5pbXBvcnQgeyBsb2FkQ2Fyb3VzZWwgfSBmcm9tIFwiLi91aS9jYXJvdXNlbFwiXG5pbXBvcnQgeyBsb2FkRmF2b3VyaXRlcyB9IGZyb20gXCIuL3VpL2Zhdm91cml0ZXNcIlxuaW1wb3J0IHsgbG9hZEhvbWVDb250ZW50IH0gZnJvbSBcIi4vdWkvaG9tZV9jb250ZW50XCJcbmltcG9ydCB7IGxvYWRNYXJrZXQgfSBmcm9tIFwiLi91aS9tYXJrZXRcIlxuaW1wb3J0IHsgbG9hZE1lbnUgfSBmcm9tIFwiLi91aS9tZW51XCJcbmltcG9ydCB7IGxvYWRQZXQgfSBmcm9tIFwiLi91aS9wZXRcIlxuaW1wb3J0IHsgbG9hZFByb2ZpbGUgfSBmcm9tIFwiLi91aS9wcm9maWxlXCJcbmltcG9ydCB7IGxvYWRTZWxsIH0gZnJvbSBcIi4vdWkvc2VsbFwiXG5pbXBvcnQgeyBsb2FkU2V0dGluZ3MgfSBmcm9tIFwiLi91aS9zZXR0aW5nc1wiXG5pbXBvcnQgeyBsb2FkVG9wQmFyIH0gZnJvbSBcIi4vdWkvdG9wX2JhclwiXG5pbXBvcnQgeyBsb2FkV2lzaGxpc3QgfSBmcm9tIFwiLi91aS93aXNobGlzdFwiXG5cbi8vIGxvYWRKUyhcImh0dHBzOi8vdW5wa2cuY29tL2hvZ2FuLmpzL2Rpc3QvdGVtcGxhdGUtMy4wLjIubWluLmpzXCIsIHRydWUpO1xuXG5mdW5jdGlvbiBsb2FkKCk6IHZvaWQge1xuICBsb2FkVUkoKVxuICBsb2FkVGFrZW92ZXIoKVxufVxuXG5mdW5jdGlvbiBsb2FkVUkoKTogdm9pZCB7XG4gIGxvYWRNZW51KClcbiAgbG9hZENhcm91c2VsKClcbiAgbG9hZEhvbWVDb250ZW50KClcbiAgbG9hZEZhdm91cml0ZXMoKVxuICBsb2FkUHJvZmlsZSgpXG4gIGxvYWRQZXQoKVxuICBsb2FkTWFya2V0KClcbiAgbG9hZFdpc2hsaXN0KClcbiAgbG9hZFRvcEJhcigpXG4gIGxvYWRBdWN0aW9ucygpXG4gIGxvYWRTZWxsKClcbiAgbG9hZERyZXNzaW5nRXhwZXJpZW5jZSgpXG5cbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgdm9pZCBsb2FkSW5kZXhlZERiKClcbiAgZWxzZSB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4gbG9hZEluZGV4ZWREYigpKVxufVxuXG5mdW5jdGlvbiBsb2FkSW5kZXhlZERiKCk6IHZvaWQge1xuICB2b2lkIGxvYWRTZXR0aW5ncygpXG59XG5cbm5ldyBNdXRhdGlvbk9ic2VydmVyKGxvYWQpLm9ic2VydmUoPE5vZGU+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb250YWluZXJcIiksIHtcbiAgY2hpbGRMaXN0OiB0cnVlLFxufSlcblxubWlncmF0ZSgpXG5cbmxvYWRVSSgpXG5jb25zb2xlLmxvZyh0cmFuc2xhdGUuaG9tZS5zY3JpcHRfbG9hZGVkKVxubG9hZFRha2VvdmVyKClcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==