// ==UserScript==
// @name Eldarya Enhancements
// @namespace https://gitlab.com/NatoBoram/eldarya-enhancements
// @license GPL-3.0-or-later
// @version 1.2.11
// @author Nato Boram
// @description Enhances the user experience of Eldarya.
// @description:pt Aprimora a experiência do usuário de Eldarya.
// @description:de Verbessert die Benutzererfahrung von Eldarya.
// @description:es Mejora la experiencia del usuario de Eldarya.
// @description:hu Javítja az Eldarya felhasználói élményét.
// @description:it Migliora l'esperienza utente di Eldarya.
// @description:pl Zwiększa wrażenia użytkownika Eldaryi.
// @description:ru Повышает удобство использования Эльдарьи.
// @description:en Enhances the user experience of Eldarya.
// @description:fr Améliore l'expérience utilisateur d'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/[email protected]/node_modules/blob-util/dist/blob-util.es.js":
/*!****************************************************************************************!*\
!*** ./node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/hogan.js/lib/compiler.js":
/*!*********************************************************************************!*\
!*** ./node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/hogan.js/lib/hogan.js":
/*!******************************************************************************!*\
!*** ./node_modules/.pnpm/[email protected]/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/[email protected]/node_modules/hogan.js/lib/compiler.js");
Hogan.Template = (__webpack_require__(/*! ./template */ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/template.js").Template);
Hogan.template = Hogan.Template;
module.exports = Hogan;
/***/ }),
/***/ "./node_modules/.pnpm/[email protected]/node_modules/hogan.js/lib/template.js":
/*!*********************************************************************************!*\
!*** ./node_modules/.pnpm/[email protected]/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, '&')
.replace(rLt, '<')
.replace(rGt, '>')
.replace(rApos, ''')
.replace(rQuot, '"') :
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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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_buy_flavr_mall.html":
/*!*****************************************************!*\
!*** ./src/templates/html/auto_buy_flavr_mall.html ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/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.mall.add_to_wishlist.title",c,p,0)));t.b("</h1>");t.b("\n" + i);t.b("<p>");t.b(t.v(t.d("translate.mall.add_to_wishlist.text",c,p,0)));t.b("</p>");t.b("\n" + i);t.b("<p style=\"font-size: 14px\"><em>");t.b(t.v(t.d("translate.mall.add_to_wishlist.note",c,p,0)));t.b("</em></p>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<h1>{{translate.mall.add_to_wishlist.title}}</h1>\n<p>{{translate.mall.add_to_wishlist.text}}</p>\n<p style=\"font-size: 14px\"><em>{{translate.mall.add_to_wishlist.note}}</em></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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/exploration_history.html":
/*!*****************************************************!*\
!*** ./src/templates/html/exploration_history.html ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/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=\"history-container\" style=\"width: 100%\">");t.b("\n" + i);t.b(" <style>");t.b("\n" + i);t.b(" .history-actions {");t.b("\n" + i);t.b(" margin-bottom: 1em;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" #delete-history {");t.b("\n" + i);t.b(" margin-right: 1em;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .help-icon {");t.b("\n" + i);t.b(" background-color: #0291f6;");t.b("\n" + i);t.b(" border-radius: 50%;");t.b("\n" + i);t.b(" box-shadow: none;");t.b("\n" + i);t.b(" color: #fff;");t.b("\n" + i);t.b(" font-size: 26px;");t.b("\n" + i);t.b(" font-weight: bold;");t.b("\n" + i);t.b(" height: 23px;");t.b("\n" + i);t.b(" line-height: 20px;");t.b("\n" + i);t.b(" padding: 0;");t.b("\n" + i);t.b(" text-align: center;");t.b("\n" + i);t.b(" width: 23px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .history-message {");t.b("\n" + i);t.b(" background-color: rgba(255, 255, 255, 0.7);");t.b("\n" + i);t.b(" border-radius: 1em;");t.b("\n" + i);t.b(" margin: 1em;");t.b("\n" + i);t.b(" padding: 1em;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .history-row {");t.b("\n" + i);t.b(" display: flex;");t.b("\n" + i);t.b(" flex-wrap: wrap;");t.b("\n" + i);t.b(" height: 465px;");t.b("\n" + i);t.b(" margin-right: 1em;");t.b("\n" + i);t.b(" overflow-y: auto;");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");t.b("\n" + i);t.b(" .result-card {");t.b("\n" + i);t.b(" background-color: white;");t.b("\n" + i);t.b(" border-radius: 1em;");t.b("\n" + i);t.b(" box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.3);");t.b("\n" + i);t.b(" height: 205px;");t.b("\n" + i);t.b(" margin: 0.5em;");t.b("\n" + i);t.b(" padding: 0.5em;");t.b("\n" + i);t.b(" text-align: center;");t.b("\n" + i);t.b(" width: 128px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-image {");t.b("\n" + i);t.b(" background-color: white;");t.b("\n" + i);t.b(" border-radius: 1em;");t.b("\n" + i);t.b(" box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.12),");t.b("\n" + i);t.b(" 0 2px 4px 2px rgba(0, 0, 0, 0.08);");t.b("\n" + i);t.b(" position: relative;");t.b("\n" + i);t.b(" top: -0.8em;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-content-column {");t.b("\n" + i);t.b(" display: flex;");t.b("\n" + i);t.b(" flex-direction: column;");t.b("\n" + i);t.b(" height: 103px;");t.b("\n" + i);t.b(" justify-content: space-between;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-name {");t.b("\n" + i);t.b(" -webkit-box-orient: vertical;");t.b("\n" + i);t.b(" -webkit-line-clamp: 3;");t.b("\n" + i);t.b(" color: rgb(52, 56, 111);");t.b("\n" + i);t.b(" display: -webkit-box;");t.b("\n" + i);t.b(" flex-grow: 1;");t.b("\n" + i);t.b(" font-size: 16px;");t.b("\n" + i);t.b(" font-weight: bold;");t.b("\n" + i);t.b(" margin-top: -0.2em;");t.b("\n" + i);t.b(" overflow: hidden;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-location {");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-date {");t.b("\n" + i);t.b(" color: #fb8900;");t.b("\n" + i);t.b(" font-size: 13px;");t.b("\n" + i);t.b(" font-weight: bold;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-icons {");t.b("\n" + i);t.b(" margin-top: 0.5em;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .result-count {");t.b("\n" + i);t.b(" background: #ffffff;");t.b("\n" + i);t.b(" border-radius: 100%;");t.b("\n" + i);t.b(" border: 1px solid #00cdfb;");t.b("\n" + i);t.b(" box-sizing: border-box;");t.b("\n" + i);t.b(" color: #3ec0d7;");t.b("\n" + i);t.b(" display: inline-block;");t.b("\n" + i);t.b(" font-family: \"Alegreya Sans SC\", sans-serif;");t.b("\n" + i);t.b(" font-size: 18px;");t.b("\n" + i);t.b(" font-weight: 800;");t.b("\n" + i);t.b(" height: 29px;");t.b("\n" + i);t.b(" line-height: 27px;");t.b("\n" + i);t.b(" text-align: center;");t.b("\n" + i);t.b(" user-select: none;");t.b("\n" + i);t.b(" width: 29px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .history-tradable {");t.b("\n" + i);t.b(" background-color: #666;");t.b("\n" + i);t.b(" border-radius: 25px;");t.b("\n" + i);t.b(" border: 1px solid #b9b9b9;");t.b("\n" + i);t.b(" color: #ffffff;");t.b("\n" + i);t.b(" display: inline-block;");t.b("\n" + i);t.b(" font-family: \"Temp Menu\", serif;");t.b("\n" + i);t.b(" font-size: 13px;");t.b("\n" + i);t.b(" height: 15px;");t.b("\n" + i);t.b(" line-height: 15px;");t.b("\n" + i);t.b(" text-align: center;");t.b("\n" + i);t.b(" width: 15px;");t.b("\n" + i);t.b(" }");t.b("\n");t.b("\n" + i);t.b(" .icon-spacer {");t.b("\n" + i);t.b(" display: inline-block;");t.b("\n" + i);t.b(" width: 0.1em;");t.b("\n" + i);t.b(" }");t.b("\n" + i);t.b(" </style>");t.b("\n");t.b("\n" + i);t.b(" <div class=\"history-actions\">");t.b("\n" + i);t.b(" <button id=\"delete-history\" class=\"nl-button\">");t.b("\n" + i);t.b(" ");t.b(t.v(t.d("translate.pet.delete_history",c,p,0)));t.b("\n" + i);t.b(" </button>");t.b("\n");t.b("\n" + i);t.b(" <span class=\"tooltip\">");t.b("\n" + i);t.b(" <span class=\"nl-button help-icon\">?</span>");t.b("\n" + i);t.b(" <div class=\"tooltip-content\">");t.b("\n" + i);t.b(" <p>");t.b(t.t(t.d("translate.pet.saved_locally",c,p,0)));t.b("</p>");t.b("\n" + i);t.b(" <p>");t.b(t.t(t.d("translate.pet.goto_account",c,p,0)));t.b("</p>");t.b("\n" + i);t.b(" </div>");t.b("\n" + i);t.b(" </span>");t.b("\n" + i);t.b(" </div>");t.b("\n");t.b("\n" + i);if(!t.s(t.f("history",c,p,1),c,p,1,0,0,"")){t.b(" <p class=\"history-message\">");t.b(t.v(t.d("translate.pet.empty_history",c,p,0)));t.b("</p>");t.b("\n" + i);};t.b("\n" + i);t.b(" <div class=\"history-row\">");t.b("\n" + i);if(t.s(t.f("history",c,p,1),c,p,0,3189,3822,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" <div class=\"result-card\">");t.b("\n" + i);t.b(" <img class=\"result-image\" src=\"");t.b(t.v(t.f("icon",c,p,0)));t.b("\" />");t.b("\n");t.b("\n" + i);t.b(" <div class=\"result-content-column\">");t.b("\n" + i);t.b(" <div class=\"result-name\">");t.b(t.v(t.f("name",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" <div class=\"result-location\">");t.b(t.v(t.f("locationName",c,p,0)));t.b("</div>");t.b("\n" + i);t.b(" <div class=\"result-date\">");t.b(t.v(t.f("date",c,p,0)));t.b("</div>");t.b("\n");t.b("\n" + i);t.b(" <div class=\"result-icons\">");t.b("\n" + i);t.b(" ");if(t.s(t.f("count",c,p,1),c,p,0,3525,3568,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("<span class=\"result-count\">");t.b(t.v(t.f("count",c,p,0)));t.b("</span>");});c.pop();}t.b("\n" + i);if(t.s(t.f("count",c,p,1),c,p,0,3599,3678,"{{ }}")){t.rs(c,p,function(c,p,t){if(t.s(t.f("tradable",c,p,1),c,p,0,3612,3665,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" <div class=\"icon-spacer\"></div>");t.b("\n" + i);t.b(" ");});c.pop();}});c.pop();}t.b(" ");if(t.s(t.f("tradable",c,p,1),c,p,0,3702,3765,"{{ }}")){t.rs(c,p,function(c,p,t){t.b("<span class=\"history-tradable\"");t.b("\n" + i);t.b(" ></span");t.b("\n" + i);t.b(" >");});c.pop();}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);});c.pop();}t.b(" </div>");t.b("\n" + i);t.b("</div>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<div id=\"history-container\" style=\"width: 100%\">\n <style>\n .history-actions {\n margin-bottom: 1em;\n }\n\n #delete-history {\n margin-right: 1em;\n }\n\n .help-icon {\n background-color: #0291f6;\n border-radius: 50%;\n box-shadow: none;\n color: #fff;\n font-size: 26px;\n font-weight: bold;\n height: 23px;\n line-height: 20px;\n padding: 0;\n text-align: center;\n width: 23px;\n }\n\n .history-message {\n background-color: rgba(255, 255, 255, 0.7);\n border-radius: 1em;\n margin: 1em;\n padding: 1em;\n }\n\n .history-row {\n display: flex;\n flex-wrap: wrap;\n height: 465px;\n margin-right: 1em;\n overflow-y: auto;\n scrollbar-color: dark;\n scrollbar-width: thin;\n }\n\n .result-card {\n background-color: white;\n border-radius: 1em;\n box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.3);\n height: 205px;\n margin: 0.5em;\n padding: 0.5em;\n text-align: center;\n width: 128px;\n }\n\n .result-image {\n background-color: white;\n border-radius: 1em;\n box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.12),\n 0 2px 4px 2px rgba(0, 0, 0, 0.08);\n position: relative;\n top: -0.8em;\n }\n\n .result-content-column {\n display: flex;\n flex-direction: column;\n height: 103px;\n justify-content: space-between;\n }\n\n .result-name {\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n color: rgb(52, 56, 111);\n display: -webkit-box;\n flex-grow: 1;\n font-size: 16px;\n font-weight: bold;\n margin-top: -0.2em;\n overflow: hidden;\n }\n\n .result-location {\n }\n\n .result-date {\n color: #fb8900;\n font-size: 13px;\n font-weight: bold;\n }\n\n .result-icons {\n margin-top: 0.5em;\n }\n\n .result-count {\n background: #ffffff;\n border-radius: 100%;\n border: 1px solid #00cdfb;\n box-sizing: border-box;\n color: #3ec0d7;\n display: inline-block;\n font-family: \"Alegreya Sans SC\", sans-serif;\n font-size: 18px;\n font-weight: 800;\n height: 29px;\n line-height: 27px;\n text-align: center;\n user-select: none;\n width: 29px;\n }\n\n .history-tradable {\n background-color: #666;\n border-radius: 25px;\n border: 1px solid #b9b9b9;\n color: #ffffff;\n display: inline-block;\n font-family: \"Temp Menu\", serif;\n font-size: 13px;\n height: 15px;\n line-height: 15px;\n text-align: center;\n width: 15px;\n }\n\n .icon-spacer {\n display: inline-block;\n width: 0.1em;\n }\n </style>\n\n <div class=\"history-actions\">\n <button id=\"delete-history\" class=\"nl-button\">\n {{translate.pet.delete_history}}\n </button>\n\n <span class=\"tooltip\">\n <span class=\"nl-button help-icon\">?</span>\n <div class=\"tooltip-content\">\n <p>{{{translate.pet.saved_locally}}}</p>\n <p>{{{translate.pet.goto_account}}}</p>\n </div>\n </span>\n </div>\n\n {{^history}}\n <p class=\"history-message\">{{translate.pet.empty_history}}</p>\n {{/history}}\n\n <div class=\"history-row\">\n {{#history}}\n <div class=\"result-card\">\n <img class=\"result-image\" src=\"{{icon}}\" />\n\n <div class=\"result-content-column\">\n <div class=\"result-name\">{{name}}</div>\n <div class=\"result-location\">{{locationName}}</div>\n <div class=\"result-date\">{{date}}</div>\n\n <div class=\"result-icons\">\n {{#count}}<span class=\"result-count\">{{count}}</span>{{/count}}\n {{#count}}{{#tradable}}\n <div class=\"icon-spacer\"></div>\n {{/tradable}}{{/count}} {{#tradable}}<span class=\"history-tradable\"\n ></span\n >{{/tradable}}\n </div>\n </div>\n </div>\n {{/history}}\n </div>\n</div>\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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/main_menu_purroshop.html":
/*!*****************************************************!*\
!*** ./src/templates/html/main_menu_purroshop.html ***!
\*****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var H = __webpack_require__(/*! hogan.js */ "./node_modules/.pnpm/[email protected]/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-purroshop\">");t.b("\n" + i);t.b(" <a href=\"/mall/purroshop\">");t.b("\n" + i);t.b(" <img");t.b("\n" + i);t.b(" height=\"20\"");t.b("\n" + i);t.b(" src=\"/assets/img/item/consumable/b647d54afd6b04353e129219810512f5.png\"");t.b("\n" + i);t.b(" style=\"vertical-align: middle\"");t.b("\n" + i);t.b(" />");t.b("\n" + i);t.b(" Purro'Shop");t.b("\n" + i);t.b(" </a>");t.b("\n" + i);t.b("</li>");t.b("\n");return t.fl(); },partials: {}, subs: { }}, "<li class=\"main-menu-purroshop\">\n <a href=\"/mall/purroshop\">\n <img\n height=\"20\"\n src=\"/assets/img/item/consumable/b647d54afd6b04353e129219810512f5.png\"\n style=\"vertical-align: middle\"\n />\n Purro'Shop\n </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/[email protected]/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,2545,"{{ }}")){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=\"marketplace-abstract marketplace-auctions-item marketplace-sales-item\"");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,1738,1907,"{{ }}")){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,1972,2140,"{{ }}")){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=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"");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,2778,3924,"{{ }}")){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,3164,3327,"{{ }}")){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,3392,3554,"{{ }}")){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=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"");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=\"marketplace-abstract marketplace-auctions-item marketplace-sales-item\"\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=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"\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=\"nl-button nl-button-sm marketplace-itemDetail-cancel delete-button\"\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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/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-container {");t.b("\n" + i);t.b(" display: inline-block;");t.b("\n" + i);t.b(" position: relative;");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,872,2260,"{{ }}")){t.rs(c,p,function(c,p,t){t.b(" <tr class=\"marketplace-abstract\" data-icon=\"");t.b(t.v(t.f("icon",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(" <div class=\"item-icon-container\">");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(" <div class=\"rarity-marker-");t.b(t.v(t.f("rarity",c,p,0)));t.b("\"></div>");t.b("\n" + i);t.b(" </div>");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(" <div class=\"abstract-type\">");t.b(t.v(t.f("abstractType",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-container {\n display: inline-block;\n position: relative;\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-icon=\"{{icon}}\">\n <!-- Icon -->\n <td>\n <div class=\"item-icon-container\">\n <img class=\"item-icon\" src=\"{{icon}}\" alt=\"{{name}}\" />\n <div class=\"rarity-marker-{{rarity}}\"></div>\n </div>\n </td>\n\n <!-- Name -->\n <td>\n <div class=\"abstract-name\">{{name}}</div>\n <div class=\"abstract-type\">{{abstractType}}</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 _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
async function buy(itemId) {
return new Promise(resolve => {
void $.post("/marketplace/buy", { id: itemId }, (json) => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.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 _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
async function captureEnd() {
return new Promise(resolve => {
void $.post("/pet/capture/end", (json) => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.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 _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
async function changeRegion(newRegionId) {
return new Promise((resolve) => {
void $.post("/pet/changeRegion", { newRegionId }, (json) => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.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 _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
async function explorationResults() {
return new Promise((resolve) => {
void $.post("/pet/explorationResults", (json) => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.meta = json.meta;
resolve(json);
if (json.result !== "success") {
$.flavrNotif(json.data);
return;
}
});
});
}
/***/ }),
/***/ "./src/api/meta.ts":
/*!*************************!*\
!*** ./src/api/meta.ts ***!
\*************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "PurroshopStatus": () => (/* binding */ PurroshopStatus)
/* harmony export */ });
var PurroshopStatus;
(function (PurroshopStatus) {
PurroshopStatus["disabled"] = "disabled";
PurroshopStatus["enabled"] = "enabled";
})(PurroshopStatus || (PurroshopStatus = {}));
/***/ }),
/***/ "./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/data_set.ts":
/*!************************************!*\
!*** ./src/appearance/data_set.ts ***!
\************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "categoryContainerDataSet": () => (/* binding */ categoryContainerDataSet),
/* harmony export */ "categoryGroupDataSet": () => (/* binding */ categoryGroupDataSet),
/* harmony export */ "itemDataSet": () => (/* binding */ itemDataSet)
/* harmony export */ });
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");
function categoryContainerDataSet(categoryContainer) {
const { categoryid, category, categoryname } = categoryContainer.dataset;
if (!categoryid || !category || !categoryname)
return;
return {
categoryid: Number(categoryid),
category: category,
categoryname,
};
}
function categoryGroupDataSet(groupItem, appearanceCategory) {
const { itemid, group, name, rarity, rarityname } = groupItem.dataset;
if (!itemid || !group || !name || !rarity || !rarityname)
return;
return {
...appearanceCategory,
itemid: Number(itemid),
group: Number(group),
name,
rarity,
rarityname,
};
}
function itemDataSet(li, appearanceGroup) {
const { itemid, name, rarity, rarityname } = li.dataset;
const icon = li.querySelector("img")?.src;
if (!itemid || !name || !rarity || !rarityname || !icon)
return;
return {
...appearanceGroup,
itemid: Number(itemid),
name,
rarity,
rarityname,
icon: (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_0__.trimIcon)(icon),
};
}
/***/ }),
/***/ "./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 */ "loadBackground": () => (/* binding */ loadBackground)
/* harmony export */ });
/* harmony import */ var _i18n_translate__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../i18n/translate */ "./src/i18n/translate.ts");
/* harmony import */ var _ts_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../ts_util */ "./src/ts_util.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _appearance_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./appearance_ui */ "./src/appearance/appearance_ui.ts");
/* harmony import */ var _data_set__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./data_set */ "./src/appearance/data_set.ts");
/* harmony import */ var _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./enums/appearance_category_code.enum */ "./src/appearance/enums/appearance_category_code.enum.ts");
/* harmony import */ var _favourites_actions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./favourites_actions */ "./src/appearance/favourites_actions.ts");
/* harmony import */ var _hidden__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./hidden */ "./src/appearance/hidden.ts");
/* harmony import */ var _wardrobe__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./wardrobe */ "./src/appearance/wardrobe.ts");
async function loadDressingExperience() {
if (!location.pathname.startsWith("/player/appearance"))
return;
handledCategories.clear();
loading = false;
(0,_appearance_ui__WEBPACK_IMPORTED_MODULE_3__.loadAppearanceUI)();
// Setup categories
for (const li of document.querySelectorAll("#wardrobe-menu>li, #appearance-items-categories li")) {
const { category } = li.dataset;
if (!(0,_ts_util__WEBPACK_IMPORTED_MODULE_1__.isEnum)(category, _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode))
continue;
switch (category) {
case _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.background:
li.addEventListener("click", () => document.getElementById("ee-category")?.remove());
continue;
case _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.favorites:
li.addEventListener("click", () => {
document.getElementById("ee-category")?.remove();
void handleCategory(category);
});
continue;
case _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.attic:
continue;
default:
li.addEventListener("click", () => {
document
.getElementById("appearance-items-category-favorites")
?.remove();
void handleCategory(category);
});
}
}
await new Promise(resolve => setTimeout(resolve, 1000));
await loadBackground();
}
/**
* Get the category container for the clicked category and load its groups
* @returns Category container
*/
async function handleCategory(category) {
const appearanceItems = document.querySelector("#appearance-items");
if (!appearanceItems)
return null;
const oldCatContainer = document.querySelector(`#appearance-items-category-${category}`);
if (oldCatContainer) {
await onAppearanceItemsCategory(category, appearanceItems, oldCatContainer);
return oldCatContainer;
}
return new Promise(resolve => {
new MutationObserver((_, observer) => {
const newCatContainer = document.querySelector(`#appearance-items-category-${category}`);
if (!newCatContainer)
return;
observer.disconnect();
void (async () => {
await onAppearanceItemsCategory(category, appearanceItems, newCatContainer);
resolve(newCatContainer);
})();
}).observe(appearanceItems, { childList: true });
});
}
async function onAppearanceItemsCategory(category, appearanceItems, categoryContainer) {
if (category === _enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.favorites)
(0,_ui_favourites__WEBPACK_IMPORTED_MODULE_2__.loadFavourites)();
else {
await new Promise(resolve => setTimeout(resolve, 220));
loadEeItems(appearanceItems, categoryContainer);
await handleGroups(categoryContainer);
}
}
function loadEeItems(appearanceItems, categoryContainer) {
// Get information about the current category
const appearanceCategory = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.categoryContainerDataSet)(categoryContainer);
if (!appearanceCategory)
return null;
_wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setCategory(appearanceCategory);
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({ ...appearanceCategory, translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate }));
const eeItems = document.querySelector("#ee-items");
if (!eeItems)
return null;
eeItems.dataset.categoryid = appearanceCategory.categoryid.toString();
eeItems.dataset.category = appearanceCategory.category;
eeItems.dataset.categoryname = appearanceCategory.categoryname;
return eeItems;
}
const handledCategories = new Set();
/** Load each groups synchronously and add them to a custom container. */
async function handleGroups(categoryContainer) {
const appearanceCategory = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.categoryContainerDataSet)(categoryContainer);
if (!appearanceCategory)
return;
_wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setCategory(appearanceCategory);
categoryContainer.classList.remove("active");
categoryContainer.style.display = "none";
const handled = handledCategories.has(appearanceCategory.category);
handledCategories.add(appearanceCategory.category);
(0,_hidden__WEBPACK_IMPORTED_MODULE_7__.loadHiddenCategory)(appearanceCategory.category);
for (const li of categoryContainer.querySelectorAll("li.appearance-item-group")) {
const appearanceGroup = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.categoryGroupDataSet)(li, appearanceCategory);
if (!appearanceGroup?.group)
break;
_wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setGroup(appearanceGroup);
if (!document.querySelector(`#appearance-items-group-${appearanceGroup.group}`) &&
!handled
// && !loadHiddenGroup(appearanceGroup.group)
)
await (0,_favourites_actions__WEBPACK_IMPORTED_MODULE_6__.openGroup)(appearanceGroup.group);
const div = document.querySelector(`#appearance-items-group-${appearanceGroup.group}`);
if (!div)
break;
div.classList.remove("active");
const script = div.querySelector("script"); // eslint-disable-next-line @typescript-eslint/no-implied-eval
if (script)
setTimeout(script.innerHTML, 0);
const outerHTML = Array.from(div.querySelectorAll("li.appearance-item"))
.map(li => {
const appearanceItem = (0,_data_set__WEBPACK_IMPORTED_MODULE_4__.itemDataSet)(li, appearanceGroup);
if (!appearanceItem?.icon)
return li.outerHTML;
li.dataset.categoryid = appearanceItem.categoryid.toString();
li.dataset.category = appearanceItem.category;
li.dataset.categoryname = appearanceItem.categoryname;
li.dataset.group = appearanceItem.group.toString();
_wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].setItem(appearanceItem);
return li.outerHTML;
})
.join("\n");
_wardrobe__WEBPACK_IMPORTED_MODULE_8__["default"].availableItems = availableItems;
div.remove();
const active = document.querySelector(`#wardrobe-menu li[data-category="${appearanceGroup.category}"].active`);
if (active) {
document
.querySelector("#ee-items")
?.insertAdjacentHTML("beforeend", outerHTML);
initializeSelectedItems();
initializeHiddenCategories();
}
else if (handled)
break;
}
if (!handled)
handledCategories.delete(appearanceCategory.category);
(0,_hidden__WEBPACK_IMPORTED_MODULE_7__.unloadHiddenCategories)();
}
let loading = false;
async function loadBackground() {
if (loading)
return;
loading = true;
let success = true;
const categories = [
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.underwear,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.skin,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.tatoo,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.mouth,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.eye,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.hair,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.sock,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.shoe,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.pants,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.handAccessory,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.top,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.coat,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.glove,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.necklace,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.dress,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.hat,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.faceAccessory,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.belt,
_enums_appearance_category_code_enum__WEBPACK_IMPORTED_MODULE_5__.AppearanceCategoryCode.ambient,
];
const template = __webpack_require__(/*! ../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
for (const category of categories) {
if (!location.pathname.startsWith("/player/appearance")) {
success = false;
break;
}
const active = document.querySelector(`#wardrobe-menu li[data-category="${category}"].active`);
if (active)
continue;
const categoryContainer = await (0,_favourites_actions__WEBPACK_IMPORTED_MODULE_6__.openCategory)(category);
if (!categoryContainer) {
success = false;
break;
}
let finished = false;
setTimeout(() => {
if (!finished)
$.flavrNotif(template.render({
icon: `/static/img/mall/categories/${category}.png`,
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.loading(document.querySelector(`#wardrobe-menu li[data-category="${category}"]`)?.dataset.categoryname ?? category),
}));
}, 1000);
await handleGroups(categoryContainer);
finished = true;
}
if (success)
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_0__.translate.appearance.loaded);
loading = false;
}
/***/ }),
/***/ "./src/appearance/enums/appearance_category_code.enum.ts":
/*!***************************************************************!*\
!*** ./src/appearance/enums/appearance_category_code.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 */ "AppearanceCategoryCode": () => (/* binding */ AppearanceCategoryCode)
/* harmony export */ });
var AppearanceCategoryCode;
(function (AppearanceCategoryCode) {
AppearanceCategoryCode["attic"] = "attic";
AppearanceCategoryCode["favorites"] = "favorites";
AppearanceCategoryCode["underwear"] = "underwear";
AppearanceCategoryCode["skin"] = "skin";
AppearanceCategoryCode["tatoo"] = "tatoo";
AppearanceCategoryCode["mouth"] = "mouth";
AppearanceCategoryCode["eye"] = "eye";
AppearanceCategoryCode["hair"] = "hair";
AppearanceCategoryCode["sock"] = "sock";
AppearanceCategoryCode["shoe"] = "shoe";
AppearanceCategoryCode["pants"] = "pants";
AppearanceCategoryCode["handAccessory"] = "handAccessory";
AppearanceCategoryCode["top"] = "top";
AppearanceCategoryCode["coat"] = "coat";
AppearanceCategoryCode["glove"] = "glove";
AppearanceCategoryCode["necklace"] = "necklace";
AppearanceCategoryCode["dress"] = "dress";
AppearanceCategoryCode["hat"] = "hat";
AppearanceCategoryCode["faceAccessory"] = "faceAccessory";
AppearanceCategoryCode["background"] = "background";
AppearanceCategoryCode["belt"] = "belt";
AppearanceCategoryCode["ambient"] = "ambient";
})(AppearanceCategoryCode || (AppearanceCategoryCode = {}));
/***/ }),
/***/ "./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 */ "openGroup": () => (/* binding */ openGroup),
/* harmony export */ "openCategory": () => (/* binding */ openCategory),
/* 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) => {
const groupContainer = document.querySelector(`#appearance-items-group-${group}`);
if (groupContainer)
return void resolve(groupContainer);
void $.get(`/player/openGroup/${group}`, (view) => {
$(view).hide().appendTo("#appearance-items");
resolve(document.querySelector(`#appearance-items-group-${group}`));
});
});
}
async function openCategory(category) {
return new Promise((resolve) => {
const categoryContainer = document.querySelector(`#appearance-items-category-${category}`);
if (categoryContainer)
return void resolve(categoryContainer);
void $.post(`/player/openCategory/${category}`, (view) => {
$(view).hide().appendTo("#appearance-items");
resolve(document.querySelector(`#appearance-items-category-${category}`));
});
});
}
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/hidden.ts":
/*!**********************************!*\
!*** ./src/appearance/hidden.ts ***!
\**********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "unloadHiddenCategories": () => (/* binding */ unloadHiddenCategories),
/* harmony export */ "loadHiddenCategory": () => (/* binding */ loadHiddenCategory),
/* harmony export */ "loadHiddenGroup": () => (/* binding */ loadHiddenGroup)
/* harmony export */ });
/* harmony import */ var _wardrobe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./wardrobe */ "./src/appearance/wardrobe.ts");
function unloadHiddenCategories() {
const hidden = document.querySelectorAll("#appearance-items .appearance-items-category:not(.active):not([data-categoryname]), #appearance-items script, body>script");
for (const div of hidden) {
div.remove();
}
}
/**
* Place the saved groups on the DOM as if it was Eldarya doing it.
* @returns the associated `AppearanceCategory` if it's found in the wardrobe.
*/
function loadHiddenCategory(code) {
const category = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getCategories().find(c => c.category === code);
if (!category)
return null;
const groups = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getCategoryGroups(category.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_0__["default"].getItems(group.group)
.map(item => itemTemplate.render(item))
.join("\n"),
}))
.join("\n"));
return category;
}
/**
* Load the saved group on the DOM as if it was Eldarya doing it.
* @returns the associated `AppearanceGroup` if it's found in the wardrobe.
*/
function loadHiddenGroup(id) {
const group = _wardrobe__WEBPACK_IMPORTED_MODULE_0__["default"].getGroup(id);
if (!group)
return null;
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_0__["default"].getItems(group.group)
.map(item => itemTemplate.render(item))
.join("\n"),
}));
return group;
}
/***/ }),
/***/ "./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 */ });
/* 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");
function downloadCanvas(canvas, name) {
canvas.toBlob(blob => {
if (!blob) {
_console__WEBPACK_IMPORTED_MODULE_0__.Console.error("Canvas is empty");
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.error.downloadCanvas);
return;
}
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/eldarya_util.ts":
/*!*****************************!*\
!*** ./src/eldarya_util.ts ***!
\*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "trimIcon": () => (/* binding */ trimIcon)
/* harmony export */ });
function trimIcon(icon) {
const tilde = icon.lastIndexOf("~");
const dot = icon.lastIndexOf(".");
if (tilde === -1 || dot === -1)
return icon;
return icon.substring(0, tilde) + icon.substring(dot);
}
/***/ }),
/***/ "./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",
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: {
played_for: (name, maanas) => `Played <strong>${name}</strong> for <strong class="price-item">${maanas}</strong> <span class="maana-icon" alt="maanas"></span> earned.`,
played: name => `Played <strong>${name}</strong>.`,
playing: name => `Playing <strong>${name}</strong>...`,
},
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",
},
},
loaded: "The wardrobe is loaded.",
loading: (categoryname) => `Loading <strong>${categoryname}</strong>...`,
},
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. Please note that your wishlist is saved locally in <strong>${GM.info.script.name}</strong>' settings and is not sent to Eldarya's servers. To transfer your wishlist to another browser, export your settings in the <a href="/user/account" style="text-decoration: underline;">my account</a> page.`,
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",
date_time_format: new Intl.DateTimeFormat("en-GB", {
minute: "2-digit",
hour: "2-digit",
day: "numeric",
month: "long",
year: "numeric",
}),
delete_history: "Delete history",
empty_history: "Your exploration history is empty. It will automatically fill up as your familiar finds items while exploring.",
goto_account: `To transfer your exploration history to another browser, export your settings from the <em>my account</em> page.`,
history: "History",
saved_locally: `Please note that your exploration history was saved locally in <strong>${GM.info.script.name}</strong>' settings and was not sent to Eldarya's servers.`,
},
profile: {
export_outfit: "Export outfit",
download_outfit: "Download PNG",
},
error: {
downloadCanvas: "There was an error while creating the image.",
},
mall: {
add_to_wishlist: {
title: "Add to market wishlist",
text: "How many maanas do you wish to offer to acquire this item?",
note: "Please note that the items added from the mall are not necessarily available at the market.",
},
},
};
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",
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: {
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.`,
played: (name) => `A joué à <strong>${name}</strong>.`,
playing: (name) => `Joue à <strong>${name}</strong>...`,
},
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",
},
},
loaded: "Le chargement de la garde-robe est terminé.",
loading: (categoryname) => `Chargement de <strong>${categoryname}</strong>...`,
},
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. Prends note que ta liste de souhaits est sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et n'est pas envoyée aux serveurs d'Eldarya. Pour transférer ta liste de souhaits vers un autre navigateur, exporte-la à partir de la page <a href="/user/account" style="text-decoration: underline;">mon compte</a>.`,
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",
date_time_format: new Intl.DateTimeFormat("fr-CA", {
minute: "2-digit",
hour: "2-digit",
day: "numeric",
month: "long",
year: "numeric",
}),
delete_history: "Nettoyer l'historique",
empty_history: "Ton historique d'exploration est vide. Il se remplira automatiquement à mesure que ton familier trouvera des items en exploration.",
goto_account: "Pour transférer ton historique d'explorations vers un autre navigateur, exporte tes paramètres à partir de la page <em>mon compte</em>.",
history: "Historique",
saved_locally: `Prends note que ton historique d'explorations a été sauvegardé localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et n'a pas été envoyé aux serveurs d'Eldarya.`,
},
profile: {
export_outfit: "Exporter la tenue",
download_outfit: "Télécharger le PNG",
},
error: {
downloadCanvas: "Une erreur est survenue lors du téléchargement de l'image.",
},
mall: {
add_to_wishlist: {
title: "Ajouter à la liste de souhait du marché",
text: "Combien de maanas souhaites-tu offrir pour acquérir cet item?",
note: "Prends note que les items ajoutés à partir de la boutique ne sont pas nécessairement disponibles au marché.",
},
},
};
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["explorationHistory"] = "explorationHistory";
LocalStorageKey["explorations"] = "explorations";
LocalStorageKey["market"] = "market";
LocalStorageKey["meta"] = "meta";
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/[email protected]/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 explorationHistory() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorationHistory, []);
}
static set explorationHistory(explorationHistory) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.explorationHistory, explorationHistory);
}
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 meta() {
return this.getItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.meta, null);
}
static set meta(meta) {
this.setItem(_local_storage_enum__WEBPACK_IMPORTED_MODULE_2__.LocalStorageKey.meta, meta);
}
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 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 async getSettings() {
return {
autoExploreLocations: this.autoExploreLocations,
debug: this.debug,
explorationHistory: this.explorationHistory,
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.explorationHistory = settings.explorationHistory;
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 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 */ });
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");
/* harmony import */ var _enums_rarity_enum__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");
function getItemDetails(li) {
const name = li.querySelector(".abstract-name")?.innerText;
const abstractType = li.querySelector(".abstract-type")?.innerText;
const src = li.querySelector(".abstract-icon img")?.src;
const rarity = _enums_rarity_enum__WEBPACK_IMPORTED_MODULE_1__.Rarity[(li
.querySelector(".rarity-marker-common, .rarity-marker-rare, .rarity-marker-epic, .rarity-marker-legendary, .rarity-marker-event")
?.className.split("rarity-marker-")[1] ?? "")];
const currentPrice = li.querySelector(".price-item[data-bids]")?.dataset;
const buyNowPrice = li.querySelector(".price-item:not([data-bids])")?.dataset;
if (!src || !name || !abstractType)
return null;
return {
...li.dataset,
icon: (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_0__.trimIcon)(src),
rarity,
name,
abstractType,
buyNowPrice,
currentPrice,
date: new Date(),
};
}
/***/ }),
/***/ "./src/math_util.ts":
/*!**************************!*\
!*** ./src/math_util.ts ***!
\**************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "MathUtil": () => (/* binding */ MathUtil)
/* harmony export */ });
class MathUtil {
static phi = (1 + Math.sqrt(5)) / 2;
static randomBetween(min, max) {
return Math.random() * (max - min) + min;
}
}
/***/ }),
/***/ "./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() {
switch (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.version) {
case GM.info.script.version:
return;
case "":
installed();
break;
default:
switch (GM.info.script.version) {
case "1.2.0":
v1_2_0();
break;
case "1.2.9":
v1_2_9();
break;
case "1.2.10":
v1_2_10();
break;
default:
installed();
break;
}
}
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.version = GM.info.script.version;
}
function installed() {
$.flavrNotif(`${name()} ${version()} installed!`);
}
function name() {
return `<strong>${GM.info.script.name}</strong>`;
}
function version() {
return `v<strong>${GM.info.script.version}</strong>`;
}
function v1_2_0() {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_0__.LocalStorage.sales = [];
$.flavrNotif(`Updated to ${version()}. Your sales history was erased.`);
}
function v1_2_9() {
$.flavrNotif(`Updated to ${version()}. The wishlist has been improved to sort by category/type/name, but your wished items do not have a type. You can add types by re-adding the items via the market.`);
}
function v1_2_10() {
$.flavrNotif(`Updated to ${version()}. The wishlist has been improved to sort by category/type/rarity/name, but your wished items do not have a rarity. You can add rarities by re-adding the items via the market.`);
}
/***/ }),
/***/ "./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/pet/exploration-history.ts":
/*!****************************************!*\
!*** ./src/pet/exploration-history.ts ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadExplorationHistory": () => (/* binding */ loadExplorationHistory)
/* 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 _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _exploration_watcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./exploration-watcher */ "./src/pet/exploration-watcher.ts");
function loadExplorationHistory() {
loadHistoryButton();
(0,_exploration_watcher__WEBPACK_IMPORTED_MODULE_3__.listenTreasureHunt)();
}
function loadHistoryButton() {
const closeExplorationButton = document.querySelector("#close-treasure-hunt-interface");
if (!closeExplorationButton)
return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("Couldn't find #close-treasure-hunt-interface.");
closeExplorationButton.style.display = "inline-block";
closeExplorationButton.style.position = "relative";
closeExplorationButton.style.right = "0";
closeExplorationButton.style.top = "0";
closeExplorationButton.addEventListener("click", onClickPet);
const historyButton = document.createElement("a");
historyButton.classList.add("nl-button", "nl-button-back");
historyButton.style.marginRight = "0.6em";
historyButton.textContent = _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.pet.history;
historyButton.addEventListener("click", onClickHistory);
const row = document.createElement("div");
row.insertAdjacentElement("beforeend", historyButton);
row.insertAdjacentElement("beforeend", closeExplorationButton);
document
.querySelector("#right-container-inner")
?.insertAdjacentElement("afterbegin", row);
}
function onClickHistory() {
hidePet();
hideExploration();
makeHistory();
showHistory();
}
function onClickPet() {
hideHistory();
showPet();
}
function hidePet() {
const nameContainer = document.getElementById("name-container");
const infoContainer = document.getElementById("infos-container");
const petImageContainer = document.getElementById("pet-image-container");
if (!nameContainer || !infoContainer || !petImageContainer)
return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("The pet display was damaged.", {
nameContainer,
infoContainer,
petImageContainer,
});
nameContainer.style.display = "none";
infoContainer.style.display = "none";
petImageContainer.style.display = "none";
}
function showPet() {
const nameContainer = document.getElementById("name-container");
const infoContainer = document.getElementById("infos-container");
const petImageContainer = document.getElementById("pet-image-container");
if (!nameContainer || !infoContainer || !petImageContainer)
return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("The pet display was damaged.", {
nameContainer,
infoContainer,
petImageContainer,
});
nameContainer.style.display = "";
infoContainer.style.display = "";
petImageContainer.style.display = "";
}
function showHistory() {
const history = document.getElementById("history-container");
if (!history)
return;
history.style.display = "";
}
function hideHistory() {
const history = document.getElementById("history-container");
if (!history)
return;
history.style.display = "none";
}
function hideExploration() {
document
.getElementById("main-section")
?.classList.remove("treasure-hunt-interface-open");
}
function makeHistory() {
document.getElementById("history-container")?.remove();
const template = __webpack_require__(/*! ../templates/html/exploration_history.html */ "./src/templates/html/exploration_history.html");
document.getElementById("left-container")?.insertAdjacentHTML("beforeend", template.render({
translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate,
history: _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory.map(history => ({
...history,
date: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.pet.date_time_format.format(new Date(history.date)),
})),
}));
document.getElementById("delete-history")?.addEventListener("click", () => {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory = [];
makeHistory();
});
}
/***/ }),
/***/ "./src/pet/exploration-watcher.ts":
/*!****************************************!*\
!*** ./src/pet/exploration-watcher.ts ***!
\****************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "listenTreasureHunt": () => (/* binding */ listenTreasureHunt)
/* harmony export */ });
/* harmony import */ var _console__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../console */ "./src/console.ts");
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
function listenTreasureHunt() {
const resultOverlay = document.querySelector("#treasure-hunt-result-overlay");
if (!resultOverlay)
return void _console__WEBPACK_IMPORTED_MODULE_0__.Console.error("There is no result overlay.", resultOverlay);
new MutationObserver(() => {
_console__WEBPACK_IMPORTED_MODULE_0__.Console.log("Mutation in", resultOverlay);
if (!resultOverlay.classList.contains("active"))
return;
const results = getResults();
if (results.length === 0)
return;
_console__WEBPACK_IMPORTED_MODULE_0__.Console.log("Results:", results);
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory = [
...results,
..._local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.explorationHistory,
];
}).observe(resultOverlay, {
attributeFilter: ["class"],
});
}
function getResults() {
const locationName = document
.querySelector("#th-again strong")
?.textContent?.trim();
const now = new Date();
return Array.from(document.querySelectorAll(".th-result")).map(result => {
const img = result.querySelector("img.th-result-img");
return {
count: result.querySelector(".resource-count")?.textContent?.trim(),
date: now,
icon: img ? (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_1__.trimIcon)(img.src) : undefined,
locationName,
name: result.querySelector(".tooltip-content h3")?.textContent?.trim(),
tradable: Boolean(result.querySelector(".tradable")),
};
});
}
/***/ }),
/***/ "./src/pet/exploration.ts":
/*!********************************!*\
!*** ./src/pet/exploration.ts ***!
\********************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadMarkers": () => (/* binding */ loadMarkers)
/* 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 _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");
function loadMarkers() {
const autoExploreLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.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_4__.LocalStorage.autoExploreLocations.some(saved => saved.location.id === locationId),
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_3__.translate }));
// Bind `autoExplore` and `loadPictoMaps`
buttonsContainer
.querySelector("#auto-explore-button")
?.addEventListener("click", () => {
_console__WEBPACK_IMPORTED_MODULE_2__.Console.debug("Clicked on #auto-explore-button.", context);
void markLocation(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 markLocation(context) {
if (context.active) {
const filteredLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations.filter(saved => saved.location.id !== context.locationId);
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations = filteredLocations;
addAutoExploreButton(context.locationId);
return;
}
const newAutoExplore = await getAutoExploreEntry(context.regionId, context.locationId);
if (!newAutoExplore) {
_console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Could not generate an auto explore entry for location #${context.locationId}.`, context);
return;
}
const newLocations = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations;
newLocations.push(newAutoExplore);
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.autoExploreLocations = newLocations;
addAutoExploreButton(context.locationId);
}
async function getAutoExploreEntry(regionId, locationId) {
const region = await getRegion(regionId);
if (!region) {
_console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Could not get region #${regionId}.`);
return null;
}
const location = region.locations.find(location => location.id === locationId);
if (!location) {
_console__WEBPACK_IMPORTED_MODULE_2__.Console.error(`Could not get location #${locationId} in ${region.name}.`, region);
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_4__.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 === Number(mapLocation))
? "url(/static/img/new-layout/pet/icons/picto_map_explo.png)"
: "url(/static/img/new-layout/pet/icons/picto_map.png)";
}
/***/ }),
/***/ "./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["minigamesDone"] = "minigamesDone";
SessionStorageKey["selectedLocation"] = "selectedLocation";
SessionStorageKey["takeover"] = "takeover";
SessionStorageKey["wishlist"] = "wishlist";
SessionStorageKey["summerGameDone"] = "summerGameDone";
})(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 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 summerGameDone() {
return this.getItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.summerGameDone, false);
}
static set summerGameDone(done) {
this.setItem(_session_storage_enum__WEBPACK_IMPORTED_MODULE_0__.SessionStorageKey.summerGameDone, 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["summerGame"] = "summerGame";
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_summer_game_action__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./classes/summer_game_action */ "./src/takeover/classes/summer_game_action.ts");
/* harmony import */ var _classes_wait_action__WEBPACK_IMPORTED_MODULE_9__ = __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.disabled);
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.summerGameDone = false;
_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?.condition()) {
_console__WEBPACK_IMPORTED_MODULE_0__.Console.info("Action:", action.key);
if (await action.perform())
return;
}
changeAction();
void takeover();
}
const actions = [
_classes_exploration_action__WEBPACK_IMPORTED_MODULE_6__["default"],
_classes_buy_action__WEBPACK_IMPORTED_MODULE_4__["default"],
_classes_minigame_action__WEBPACK_IMPORTED_MODULE_7__["default"],
_classes_summer_game_action__WEBPACK_IMPORTED_MODULE_8__.summerGameAction,
_classes_wait_action__WEBPACK_IMPORTED_MODULE_9__["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.icon, 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(icon, error) {
const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_4__.LocalStorage.wishlist;
const index = wishlist.findIndex(item => item.icon === icon);
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") {
pageLoad("/pet");
return true;
}
const status = this.getExplorationStatus();
_console__WEBPACK_IMPORTED_MODULE_4__.Console.log("Exploration status:", _exploration_status_enum__WEBPACK_IMPORTED_MODULE_10__.ExplorationStatus[status]);
switch (status) {
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.id);
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_7__.SessionStorage.selectedLocation = null;
pageLoad("/pet");
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("#treasure-hunt-result-overlay.active #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));
pageLoad("/pet");
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));
pageLoad("/pet");
}
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/summer_game_action.ts":
/*!****************************************************!*\
!*** ./src/takeover/classes/summer_game_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 */ "summerGameAction": () => (/* binding */ summerGameAction)
/* 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 _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/* harmony import */ var _math_util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../math_util */ "./src/math_util.ts");
/* harmony import */ var _session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../session_storage/session_storage */ "./src/session_storage/session_storage.ts");
/* harmony import */ var _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../session_storage/takeover_action.enum */ "./src/session_storage/takeover_action.enum.ts");
/* harmony import */ var _action__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./action */ "./src/takeover/classes/action.ts");
class SummerGameAction extends _action__WEBPACK_IMPORTED_MODULE_6__.Action {
key = _session_storage_takeover_action_enum__WEBPACK_IMPORTED_MODULE_5__.TakeoverAction.summerGame;
condition() {
return (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.minigames &&
!_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone &&
!!document.querySelector('a[href="/event/summer"]'));
}
async perform() {
if (location.pathname !== "/event/summer/game") {
pageLoad("/event/summer/game");
return true;
}
await new Promise(resolve => setTimeout(resolve, 3000));
const play = document.querySelector('button.summer2021-button.event-coin-button.active[data-currency="token"]');
_console__WEBPACK_IMPORTED_MODULE_0__.Console.log("Looking for play button:", play);
if (!play) {
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone = true;
return false;
}
const started = await summerGameStart();
if (started.result !== "success") {
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone = true;
return false;
}
play.classList.remove("active");
play.classList.add("inactive");
const template = __webpack_require__(/*! ../../templates/html/flavr_notif/icon_message.html */ "./src/templates/html/flavr_notif/icon_message.html");
$.flavrNotif(template.render({
icon: "/static/event/minigames/snake/img/head.png",
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.playing("Snake"),
}));
await new Promise(resolve => setTimeout(() => resolve(true), _math_util__WEBPACK_IMPORTED_MODULE_3__.MathUtil.randomBetween(60_000 * 0.8, 60_000)));
const saved = await summerGameSave();
if (saved.result !== "success") {
_session_storage_session_storage__WEBPACK_IMPORTED_MODULE_4__.SessionStorage.summerGameDone = true;
return false;
}
$.flavrNotif(template.render({
icon: "/static/event/minigames/snake/img/head.png",
message: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.minigames.played("Snake"),
}));
pageLoad("/event/summer/game");
return true;
}
}
async function summerGameStart() {
const currency = "token";
return new Promise(resolve => {
void $.post("/event/summer/game/start", { currency: currency }, function (json) {
if (json.result !== "success")
$.flavrNotif(json.data);
resolve(json);
});
});
}
async function summerGameSave() {
const win = true;
return new Promise(resolve => {
void $.post("/event/summer/game/save", { win: win }, function (json) {
if (json.result !== "success")
$.flavrNotif(json.data);
resolve(json);
});
});
}
const summerGameAction = new SummerGameAction();
/***/ }),
/***/ "./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 */ "wait": () => (/* binding */ wait)
/* 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);
});
}
async function wait(selector) {
return new Promise(resolve => {
const interval = setInterval(() => {
const element = document.querySelector(selector);
if (!element)
return;
clearInterval(interval);
resolve(element);
}, 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/ts_util.ts":
/*!************************!*\
!*** ./src/ts_util.ts ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "isEnum": () => (/* binding */ isEnum)
/* harmony export */ });
function isEnum(value, enumeration) {
return Object.values(enumeration).includes(value);
}
/***/ }),
/***/ "./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/mall.ts":
/*!************************!*\
!*** ./src/ui/mall.ts ***!
\************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadMall": () => (/* binding */ loadMall),
/* harmony export */ "addToWishlistFlavr": () => (/* binding */ addToWishlistFlavr)
/* harmony export */ });
/* harmony import */ var _eldarya_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../eldarya_util */ "./src/eldarya_util.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");
/* harmony import */ var _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../marketplace/enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");
function loadMall() {
if (!location.pathname.startsWith("/mall"))
return;
for (const li of document.querySelectorAll("[data-product]"))
li.addEventListener("click", () => addWishlistButton(li));
}
function addWishlistButton(li) {
document.querySelector("#add-to-wishlist")?.remove();
document
.querySelector("#mall-productDetail-info")
?.insertAdjacentHTML("beforeend", "<button id='add-to-wishlist' class='nl-button' style='margin: 20px auto 0; min-width: 200px;'>Add to market wishlist</button>");
const maxQuantity = li.querySelector(".item-maxQuantity");
const mallEntry = {
product: JSON.parse(li.dataset.product),
icon: (0,_eldarya_util__WEBPACK_IMPORTED_MODULE_0__.trimIcon)(li.querySelector("img.mall-product-icon").src),
rarity: _marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity[(li
.querySelector(".rarity-marker-common, .rarity-marker-rare, .rarity-marker-epic, .rarity-marker-legendary, .rarity-marker-event")
?.className.split("rarity-marker-")[1] ?? "")],
maxQuantity: maxQuantity ? Number(maxQuantity.innerText) : undefined,
abstractType: document.querySelector("#mall-menu .tooltip.active .tooltip-content")?.innerText ?? "",
};
document
.querySelector("#add-to-wishlist")
?.addEventListener("click", () => addToWishlistFlavr(mallEntry));
}
function addToWishlistFlavr(mallEntry) {
const template = __webpack_require__(/*! ../templates/html/auto_buy_flavr_mall.html */ "./src/templates/html/auto_buy_flavr_mall.html");
$.flavr({
content: template.render({ translate: _i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate }),
buttons: {
close: { style: "close" },
save: {
action: () => save(mallEntry),
},
},
dialog: "prompt",
prompt: {
value: "",
},
onBuild: $container => {
$container.addClass("new-layout-popup");
document
.querySelector(".flavr-prompt")
?.addEventListener("keyup", ({ key }) => {
if (key !== "Enter")
return;
save(mallEntry);
});
},
});
}
function save(mallEntry) {
const price = Number(document.querySelector(".flavr-prompt")?.value.trim());
if (!price || price <= 0) {
$.flavrNotif(_i18n_translate__WEBPACK_IMPORTED_MODULE_1__.translate.market.add_to_wishlist.invalid_price);
return false;
}
const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.wishlist.filter(wishlistEntry => wishlistEntry.icon !== mallEntry.icon);
const wished = {
...mallEntry,
...mallEntry.product,
price,
};
wishlist.push(wished);
wishlist.sort((a, b) => {
const typeCompare = a.type.localeCompare(b.type);
if (typeCompare !== 0)
return typeCompare;
const abstractTypeCompare = (a.abstractType ?? "").localeCompare(b.abstractType ?? "");
if (abstractTypeCompare !== 0)
return abstractTypeCompare;
const rarityCompare = Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity).indexOf(a.rarity ?? "") -
Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_3__.Rarity).indexOf(b.rarity ?? "");
if (rarityCompare !== 0)
return rarityCompare;
return a.name.localeCompare(b.name);
});
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.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_1__.translate.market.add_to_wishlist.added_to_wishlist(wished.name, wished.price),
}));
return true;
}
/***/ }),
/***/ "./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_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../marketplace/enums/rarity.enum */ "./src/marketplace/enums/rarity.enum.ts");
/* harmony import */ var _marketplace_marketplace_handlers__WEBPACK_IMPORTED_MODULE_3__ = __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_3__.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);
wishlist.sort((a, b) => {
const typeCompare = a.type.localeCompare(b.type);
if (typeCompare !== 0)
return typeCompare;
const abstractTypeCompare = (a.abstractType ?? "").localeCompare(b.abstractType ?? "");
if (abstractTypeCompare !== 0)
return abstractTypeCompare;
const rarityCompare = Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_2__.Rarity).indexOf(a.rarity ?? "") -
Object.keys(_marketplace_enums_rarity_enum__WEBPACK_IMPORTED_MODULE_2__.Rarity).indexOf(b.rarity ?? "");
if (rarityCompare !== 0)
return rarityCompare;
return a.name.localeCompare(b.name);
});
_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-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 _pet_exploration__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../pet/exploration */ "./src/pet/exploration.ts");
/* harmony import */ var _pet_exploration_history__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pet/exploration-history */ "./src/pet/exploration-history.ts");
let petObserver;
function loadExplorations() {
petObserver?.disconnect();
petObserver = null;
/** `.page-main-container` changes background depending on the currently selected region. */
const mainContainer = document.querySelector(".page-main-container");
if (!mainContainer)
return;
petObserver = new MutationObserver(loadExplorations);
petObserver.observe(mainContainer, {
attributes: true,
});
(0,_pet_exploration__WEBPACK_IMPORTED_MODULE_0__.loadMarkers)();
}
function loadPet() {
if (location.pathname !== "/pet")
return;
loadExplorations();
(0,_pet_exploration_history__WEBPACK_IMPORTED_MODULE_1__.loadExplorationHistory)();
}
/***/ }),
/***/ "./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/purro_shop.ts":
/*!******************************!*\
!*** ./src/ui/purro_shop.ts ***!
\******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "loadPurroShop": () => (/* binding */ loadPurroShop)
/* harmony export */ });
/* harmony import */ var _api_meta__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../api/meta */ "./src/api/meta.ts");
/* harmony import */ var _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../local_storage/local_storage */ "./src/local_storage/local_storage.ts");
/** Shows a Purro'Shop button in the main menu when it's available. */
function loadPurroShop() {
document.querySelector(".main-menu-purroshop")?.remove();
// A bug in WebPack prevents using `LocalStorage.meta?.purroshop.status`.
if (_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.meta === null ||
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.meta.purroshop.status !== _api_meta__WEBPACK_IMPORTED_MODULE_0__.PurroshopStatus.enabled)
return;
const template = __webpack_require__(/*! ../templates/html/main_menu_purroshop.html */ "./src/templates/html/main_menu_purroshop.html");
document
.getElementById("menu-inner-left")
?.insertAdjacentHTML("afterbegin", template.render({}));
}
/***/ }),
/***/ "./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;
const parsed = JSON.parse(value);
await _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_2__.LocalStorage.setSettings(parsed);
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.innerHTML = _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 icon = tr.dataset.icon;
if (!icon)
continue;
// Reset status
const reset = tr.querySelector(".reset-item-status");
if (reset)
reset.addEventListener("click", () => {
resetStatus(icon);
insertWishlist(button);
});
// Delete item from wishlist
const deleteButton = tr.querySelector(".delete-wishlist-item");
if (deleteButton)
deleteButton.addEventListener("click", () => {
deleteItem(icon);
insertWishlist(button);
});
// Change price
const editPrice = tr.querySelector(".edit-price");
if (editPrice)
editPrice.addEventListener("click", () => void changePrice(icon).then(() => insertWishlist(button)));
}
}
function resetStatus(icon) {
const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
const index = wishlist.findIndex(item => item.icon === icon);
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(icon) {
_local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist.filter(item => item.icon !== icon);
}
async function changePrice(icon) {
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.icon === icon);
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(icon, resolve),
},
},
onBuild: $container => {
$container.addClass("new-layout-popup");
document
.querySelector(".flavr-prompt")
?.addEventListener("keyup", ({ key }) => {
if (key !== "Enter")
return;
save(icon, resolve);
});
},
});
});
}
function save(icon, resolve) {
const wishlist = _local_storage_local_storage__WEBPACK_IMPORTED_MODULE_1__.LocalStorage.wishlist;
const index = wishlist.findIndex(item => item.icon === icon);
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 _migrate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./migrate */ "./src/migrate.ts");
/* harmony import */ var _takeover_brain__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./takeover/brain */ "./src/takeover/brain.ts");
/* harmony import */ var _ui_auctions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ui/auctions */ "./src/ui/auctions.ts");
/* harmony import */ var _ui_carousel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./ui/carousel */ "./src/ui/carousel.ts");
/* harmony import */ var _ui_favourites__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./ui/favourites */ "./src/ui/favourites.ts");
/* harmony import */ var _ui_home_content__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ui/home_content */ "./src/ui/home_content.ts");
/* harmony import */ var _ui_mall__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ui/mall */ "./src/ui/mall.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_purro_shop__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./ui/purro_shop */ "./src/ui/purro_shop.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_2__.loadTakeover)();
}
function loadUI() {
(0,_ui_menu__WEBPACK_IMPORTED_MODULE_9__.loadMenu)();
(0,_ui_carousel__WEBPACK_IMPORTED_MODULE_4__.loadCarousel)();
(0,_ui_home_content__WEBPACK_IMPORTED_MODULE_6__.loadHomeContent)();
(0,_ui_favourites__WEBPACK_IMPORTED_MODULE_5__.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_3__.loadAuctions)();
(0,_ui_purro_shop__WEBPACK_IMPORTED_MODULE_12__.loadPurroShop)();
(0,_ui_mall__WEBPACK_IMPORTED_MODULE_7__.loadMall)();
void (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_1__.migrate)();
loadUI();
console.log(`${GM.info.script.name} v${GM.info.script.version} loaded.`);
(0,_takeover_brain__WEBPACK_IMPORTED_MODULE_2__.loadTakeover)();
})();
/******/ })()
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkYXJ5YS1lbmhhbmNlbWVudHMudXNlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsbUJBQW1CO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxvQkFBb0I7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsb0JBQW9CO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGtCQUFrQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsWUFBWTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBLGdDQUFnQyxZQUFZO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFK1M7Ozs7Ozs7Ozs7O0FDbGIvUztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFD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YixpREFBTyxFQUFFO0lBQ1Qsc0RBQVUsRUFBRTtJQUNaLDJEQUFZLEVBQUU7SUFDZCx3REFBVSxFQUFFO0lBQ1osMERBQVksRUFBRTtJQUNkLDhEQUFhLEVBQUU7SUFDZixrREFBUSxFQUFFO0lBQ1YsS0FBSyx1RkFBc0IsRUFBRTtJQUU3QixJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssVUFBVTtRQUFFLEtBQUssYUFBYSxFQUFFOztRQUN2RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzdELENBQUM7QUFFRCxTQUFTLGFBQWE7SUFDcEIsS0FBSywyREFBWSxFQUFFO0FBQ3JCLENBQUM7QUFFRCxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FDaEMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQVMsRUFDNUM7SUFDRSxTQUFTLEVBQUUsSUFBSTtDQUNoQixDQUNGO0FBRUQsaURBQU8sRUFBRTtBQUVULE1BQU0sRUFBRTtBQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxVQUFVLENBQUM7QUFDeEUsNkRBQVksRUFBRSIsInNvdXJjZXMiOlsid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2Jsb2ItdXRpbEAyLjAuMi9ub2RlX21vZHVsZXMvYmxvYi11dGlsL2Rpc3QvYmxvYi11dGlsLmVzLmpzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hvZ2FuLmpzQDMuMC4yL25vZGVfbW9kdWxlcy9ob2dhbi5qcy9saWIvY29tcGlsZXIuanMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9ub2RlX21vZHVsZXMvLnBucG0vaG9nYW4uanNAMy4wLjIvbm9kZV9tb2R1bGVzL2hvZ2FuLmpzL2xpYi9ob2dhbi5qcyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL25vZGVfbW9kdWxlcy8ucG5wbS9ob2dhbi5qc0AzLjAuMi9ub2RlX21vZHVsZXMvaG9nYW4uanMvbGliL3RlbXBsYXRlLmpzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2FwcGVhcmFuY2VfaXRlbS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2FwcGVhcmFuY2VfaXRlbXNfY2F0ZWdvcnkuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW1zX2dyb3VwLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXV0b19idXlfYnV0dG9uLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXV0b19idXlfZmxhdnIuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2cl9tYWxsLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXV0b19leHBsb3JlX2J1dHRvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2Nhcm91c2VsX25ld3MuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9jaGFuZ2VfcHJpY2VfZmxhdnIuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9jcmVhdGVkX291dGZpdF9mbGF2ci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2V4cGxvcmF0aW9uX2hpc3RvcnkuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9mYXZvdXJpdGVfb3V0Zml0X2ZsYXZyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvZmF2b3VyaXRlc19hY3Rpb24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9mbGF2cl9ub3RpZi9pY29uX21lc3NhZ2UuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9oZWFkZXJfdGFrZW92ZXIuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9ob21lX2NvbnRlbnRfc21hbGwuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9tYWluX21lbnUuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9tYWluX21lbnVfcHVycm9zaG9wLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvbWFya2V0X2hpc3RvcnkuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9vdXRmaXRfdGh1bWJzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvcHJvZmlsZV9jb250YWN0X2FjdGlvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3NldHRpbmdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvd2lzaGxpc3RfYnV0dG9uLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvd2lzaGxpc3Rfc2V0dGluZ3MuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2FqYXhfc2VhcmNoLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvYnV5LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvY2FwdHVyZV9lbmQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9jaGFuZ2VfcmVnaW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvZXhwbG9yYXRpb25fcmVzdWx0cy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcGkvbWV0YS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcGkvcmVzdWx0LmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9hcHBlYXJhbmNlX3VpLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2UvZGF0YV9zZXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9kcmVzc2luZ19leHBlcmllbmNlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2UvZW51bXMvYXBwZWFyYW5jZV9jYXRlZ29yeV9jb2RlLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9mYWtlX2Zhdm91cml0ZXMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9mYXZvdXJpdGVzX2FjdGlvbnMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9oaWRkZW4udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS93YXJkcm9iZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9iZWVtb292X2Fubm95YW5jZXMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY2Fyb3VzZWwvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9lbGRhcnlhX2VuaGFuY2VtZW50cy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF90YWtlb3Zlci50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jb25zb2xlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Rvd25sb2FkLWNhbnZhcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9kdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9lbGRhcnlhL2pxdWVyeS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9lbGRhcnlhX3V0aWwudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaTE4bi9lbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pMThuL2ZyLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2kxOG4vdHJhbnNsYXRlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2luZGV4ZWRfZGIvZGF0YWJhc2VzLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaW5kZXhlZF9kYi9maWVsZHMuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pbmRleGVkX2RiL2luZGV4ZWRfZGIudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaW5kZXhlZF9kYi90YWJsZXMuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2UuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2UudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvYm9keV9sb2NhdGlvbi5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL2NhdGVnb3J5LmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvZ3VhcmQuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9yYXJpdHkuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy90eXBlLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvbWFya2V0cGxhY2VfaGFuZGxlcnMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWF0aF91dGlsLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pZ3JhdGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWluaWdhbWVzL2VtaWxlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9mbGFwcHkudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWluaWdhbWVzL2hhdGNobGluZ3MudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWluaWdhbWVzL3BlZ2dsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9vdXRmaXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvcGV0L2V4cGxvcmF0aW9uLWhpc3RvcnkudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvcGV0L2V4cGxvcmF0aW9uLXdhdGNoZXIudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvcGV0L2V4cGxvcmF0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2UuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9icmFpbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL2J1eV9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9kYWlseV9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9leHBsb3JhdGlvbl9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9taW5pZ2FtZV9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9zdW1tZXJfZ2FtZV9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy93YWl0X2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGljay50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9leHBsb3JhdGlvbl9zdGF0dXMuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90c191dGlsLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2F1Y3Rpb25zLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2Nhcm91c2VsLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2Zhdm91cml0ZXMudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvaG9tZV9jb250ZW50LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL21hbGwudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvbWFya2V0LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL21lbnUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvcGV0LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3Byb2ZpbGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvcHVycm9fc2hvcC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS90b3BfYmFyLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3dpc2hsaXN0LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPOiBpbmNsdWRpbmcgdGhlc2UgaW4gYmxvYi11dGlsLnRzIGNhdXNlcyB0eXBlZG9jIHRvIGdlbmVyYXRlIGRvY3MgZm9yIHRoZW0sXG4vLyBldmVuIHdpdGggLS1leGNsdWRlUHJpdmF0ZSDCr1xcXyjjg4QpXy/Cr1xuLyoqIEBwcml2YXRlICovXG5mdW5jdGlvbiBsb2FkSW1hZ2Uoc3JjLCBjcm9zc09yaWdpbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgaWYgKGNyb3NzT3JpZ2luKSB7XG4gICAgICAgICAgICBpbWcuY3Jvc3NPcmlnaW4gPSBjcm9zc09yaWdpbjtcbiAgICAgICAgfVxuICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVzb2x2ZShpbWcpO1xuICAgICAgICB9O1xuICAgICAgICBpbWcub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgaW1nLnNyYyA9IHNyYztcbiAgICB9KTtcbn1cbi8qKiBAcHJpdmF0ZSAqL1xuZnVuY3Rpb24gaW1nVG9DYW52YXMoaW1nKSB7XG4gICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodDtcbiAgICAvLyBjb3B5IHRoZSBpbWFnZSBjb250ZW50cyB0byB0aGUgY2FudmFzXG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBjb250ZXh0LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCwgaW1nLmhlaWdodCwgMCwgMCwgaW1nLndpZHRoLCBpbWcuaGVpZ2h0KTtcbiAgICByZXR1cm4gY2FudmFzO1xufVxuXG4vKiBnbG9iYWwgUHJvbWlzZSwgSW1hZ2UsIEJsb2IsIEZpbGVSZWFkZXIsIGF0b2IsIGJ0b2EsXG4gICBCbG9iQnVpbGRlciwgTVNCbG9iQnVpbGRlciwgTW96QmxvYkJ1aWxkZXIsIFdlYktpdEJsb2JCdWlsZGVyLCB3ZWJraXRVUkwgKi9cbi8qKlxuICogU2hpbSBmb3JcbiAqIFtgbmV3IEJsb2IoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9CbG9iLkJsb2IpXG4gKiB0byBzdXBwb3J0XG4gKiBbb2xkZXIgYnJvd3NlcnMgdGhhdCB1c2UgdGhlIGRlcHJlY2F0ZWQgYEJsb2JCdWlsZGVyYCBBUEldKGh0dHA6Ly9jYW5pdXNlLmNvbS9ibG9iKS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbXlCbG9iID0gYmxvYlV0aWwuY3JlYXRlQmxvYihbJ2hlbGxvIHdvcmxkJ10sIHt0eXBlOiAndGV4dC9wbGFpbid9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBwYXJ0cyAtIGNvbnRlbnQgb2YgdGhlIEJsb2JcbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gdXN1YWxseSBge3R5cGU6IG15Q29udGVudFR5cGV9YCxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91IGNhbiBhbHNvIHBhc3MgYSBzdHJpbmcgZm9yIHRoZSBjb250ZW50IHR5cGVcbiAqIEByZXR1cm5zIEJsb2JcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmxvYihwYXJ0cywgcHJvcGVydGllcykge1xuICAgIHBhcnRzID0gcGFydHMgfHwgW107XG4gICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307XG4gICAgaWYgKHR5cGVvZiBwcm9wZXJ0aWVzID09PSAnc3RyaW5nJykge1xuICAgICAgICBwcm9wZXJ0aWVzID0geyB0eXBlOiBwcm9wZXJ0aWVzIH07IC8vIGluZmVyIGNvbnRlbnQgdHlwZVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJsb2IocGFydHMsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZS5uYW1lICE9PSAnVHlwZUVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgQnVpbGRlciA9IHR5cGVvZiBCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gQmxvYkJ1aWxkZXIgOiB0eXBlb2YgTVNCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gTVNCbG9iQnVpbGRlciA6IHR5cGVvZiBNb3pCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgID8gTW96QmxvYkJ1aWxkZXIgOiBXZWJLaXRCbG9iQnVpbGRlcjtcbiAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwYXJ0c1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYihwcm9wZXJ0aWVzLnR5cGUpO1xuICAgIH1cbn1cbi8qKlxuICogU2hpbSBmb3JcbiAqIFtgVVJMLmNyZWF0ZU9iamVjdFVSTCgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC5jcmVhdGVPYmplY3RVUkwpXG4gKiB0byBzdXBwb3J0IGJyb3dzZXJzIHRoYXQgb25seSBoYXZlIHRoZSBwcmVmaXhlZFxuICogYHdlYmtpdFVSTGAgKGUuZy4gQW5kcm9pZCA8NC40KS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgbXlVcmwgPSBibG9iVXRpbC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmxvYlxuICogQHJldHVybnMgdXJsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTChibG9iKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgVVJMICE9PSAndW5kZWZpbmVkJyA/IFVSTCA6IHdlYmtpdFVSTCkuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xufVxuLyoqXG4gKiBTaGltIGZvclxuICogW2BVUkwucmV2b2tlT2JqZWN0VVJMKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJMLnJldm9rZU9iamVjdFVSTClcbiAqIHRvIHN1cHBvcnQgYnJvd3NlcnMgdGhhdCBvbmx5IGhhdmUgdGhlIHByZWZpeGVkXG4gKiBgd2Via2l0VVJMYCAoZS5nLiBBbmRyb2lkIDw0LjQpLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLnJldm9rZU9iamVjdFVSTChteVVybCk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdXJsXG4gKi9cbmZ1bmN0aW9uIHJldm9rZU9iamVjdFVSTCh1cmwpIHtcbiAgICByZXR1cm4gKHR5cGVvZiBVUkwgIT09ICd1bmRlZmluZWQnID8gVVJMIDogd2Via2l0VVJMKS5yZXZva2VPYmplY3RVUkwodXJsKTtcbn1cbi8qKlxuICogQ29udmVydCBhIGBCbG9iYCB0byBhIGJpbmFyeSBzdHJpbmcuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuYmxvYlRvQmluYXJ5U3RyaW5nKGJsb2IpLnRoZW4oZnVuY3Rpb24gKGJpbmFyeVN0cmluZykge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBibG9iXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYmluYXJ5IHN0cmluZ1xuICovXG5mdW5jdGlvbiBibG9iVG9CaW5hcnlTdHJpbmcoYmxvYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICB2YXIgaGFzQmluYXJ5U3RyaW5nID0gdHlwZW9mIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcgPT09ICdmdW5jdGlvbic7XG4gICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVhZGVyLnJlc3VsdCB8fCAnJztcbiAgICAgICAgICAgIGlmIChoYXNCaW5hcnlTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShhcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKHJlc3VsdCkpO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgaWYgKGhhc0JpbmFyeVN0cmluZykge1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhibG9iKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nIHRvIGEgYEJsb2JgLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBibG9iID0gYmxvYlV0aWwuYmFzZTY0U3RyaW5nVG9CbG9iKGJhc2U2NFN0cmluZyk7XG4gKiBgYGBcbiAqIEBwYXJhbSBiYXNlNjQgLSBiYXNlNjQtZW5jb2RlZCBzdHJpbmdcbiAqIEBwYXJhbSB0eXBlIC0gdGhlIGNvbnRlbnQgdHlwZSAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBCbG9iXG4gKi9cbmZ1bmN0aW9uIGJhc2U2NFN0cmluZ1RvQmxvYihiYXNlNjQsIHR5cGUpIHtcbiAgICB2YXIgcGFydHMgPSBbYmluYXJ5U3RyaW5nVG9BcnJheUJ1ZmZlcihhdG9iKGJhc2U2NCkpXTtcbiAgICByZXR1cm4gdHlwZSA/IGNyZWF0ZUJsb2IocGFydHMsIHsgdHlwZTogdHlwZSB9KSA6IGNyZWF0ZUJsb2IocGFydHMpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYmluYXJ5IHN0cmluZyB0byBhIGBCbG9iYC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYmxvYiA9IGJsb2JVdGlsLmJpbmFyeVN0cmluZ1RvQmxvYihiaW5hcnlTdHJpbmcpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJpbmFyeSAtIGJpbmFyeSBzdHJpbmdcbiAqIEBwYXJhbSB0eXBlIC0gdGhlIGNvbnRlbnQgdHlwZSAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBCbG9iXG4gKi9cbmZ1bmN0aW9uIGJpbmFyeVN0cmluZ1RvQmxvYihiaW5hcnksIHR5cGUpIHtcbiAgICByZXR1cm4gYmFzZTY0U3RyaW5nVG9CbG9iKGJ0b2EoYmluYXJ5KSwgdHlwZSk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBgQmxvYmAgdG8gYSBiaW5hcnkgc3RyaW5nLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmJsb2JUb0Jhc2U2NFN0cmluZyhibG9iKS50aGVuKGZ1bmN0aW9uIChiYXNlNjRTdHJpbmcpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmxvYlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGJpbmFyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYmxvYlRvQmFzZTY0U3RyaW5nKGJsb2IpIHtcbiAgICByZXR1cm4gYmxvYlRvQmluYXJ5U3RyaW5nKGJsb2IpLnRoZW4oYnRvYSk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIFVSTCBzdHJpbmdcbiAqIChlLmcuIGAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLRy4uLidgKVxuICogdG8gYSBgQmxvYmAuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGJsb2IgPSBibG9iVXRpbC5kYXRhVVJMVG9CbG9iKGRhdGFVUkwpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGRhdGFVUkwgLSBkYXRhVVJMLWVuY29kZWQgc3RyaW5nXG4gKiBAcmV0dXJucyBCbG9iXG4gKi9cbmZ1bmN0aW9uIGRhdGFVUkxUb0Jsb2IoZGF0YVVSTCkge1xuICAgIHZhciB0eXBlID0gZGF0YVVSTC5tYXRjaCgvZGF0YTooW147XSspLylbMV07XG4gICAgdmFyIGJhc2U2NCA9IGRhdGFVUkwucmVwbGFjZSgvXlteLF0rLC8sICcnKTtcbiAgICB2YXIgYnVmZiA9IGJpbmFyeVN0cmluZ1RvQXJyYXlCdWZmZXIoYXRvYihiYXNlNjQpKTtcbiAgICByZXR1cm4gY3JlYXRlQmxvYihbYnVmZl0sIHsgdHlwZTogdHlwZSB9KTtcbn1cbi8qKlxuICogQ29udmVydCBhIGBCbG9iYCB0byBhIGRhdGEgVVJMIHN0cmluZ1xuICogKGUuZy4gYCdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHLi4uJ2ApLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBkYXRhVVJMID0gYmxvYlV0aWwuYmxvYlRvRGF0YVVSTChibG9iKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBibG9iXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGF0YSBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGJsb2JUb0RhdGFVUkwoYmxvYikge1xuICAgIHJldHVybiBibG9iVG9CYXNlNjRTdHJpbmcoYmxvYikudGhlbihmdW5jdGlvbiAoYmFzZTY0U3RyaW5nKSB7XG4gICAgICAgIHJldHVybiAnZGF0YTonICsgYmxvYi50eXBlICsgJztiYXNlNjQsJyArIGJhc2U2NFN0cmluZztcbiAgICB9KTtcbn1cbi8qKlxuICogQ29udmVydCBhbiBpbWFnZSdzIGBzcmNgIFVSTCB0byBhIGRhdGEgVVJMIGJ5IGxvYWRpbmcgdGhlIGltYWdlIGFuZCBwYWludGluZ1xuICogaXQgdG8gYSBgY2FudmFzYC5cbiAqXG4gKiBOb3RlOiB0aGlzIHdpbGwgY29lcmNlIHRoZSBpbWFnZSB0byB0aGUgZGVzaXJlZCBjb250ZW50IHR5cGUsIGFuZCBpdFxuICogd2lsbCBvbmx5IHBhaW50IHRoZSBmaXJzdCBmcmFtZSBvZiBhbiBhbmltYXRlZCBHSUYuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmltZ1NyY1RvRGF0YVVSTCgnaHR0cDovL215c2l0ZS5jb20vaW1nLnBuZycpLnRoZW4oZnVuY3Rpb24gKGRhdGFVUkwpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuaW1nU3JjVG9EYXRhVVJMKCdodHRwOi8vc29tZS1vdGhlci1zaXRlLmNvbS9pbWcuanBnJywgJ2ltYWdlL2pwZWcnLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICdBbm9ueW1vdXMnLCAxLjApLnRoZW4oZnVuY3Rpb24gKGRhdGFVUkwpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3JjIC0gaW1hZ2Ugc3JjXG4gKiBAcGFyYW0gdHlwZSAtIHRoZSBjb250ZW50IHR5cGUgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byAnaW1hZ2UvcG5nJylcbiAqIEBwYXJhbSBjcm9zc09yaWdpbiAtIGZvciBDT1JTLWVuYWJsZWQgaW1hZ2VzLCBzZXQgdGhpcyB0b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBbm9ueW1vdXMnIHRvIGF2b2lkIFwidGFpbnRlZCBjYW52YXNcIiBlcnJvcnNcbiAqIEBwYXJhbSBxdWFsaXR5IC0gYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaW1hZ2UgcXVhbGl0eVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIHJlcXVlc3RlZCB0eXBlIGlzICdpbWFnZS9qcGVnJyBvciAnaW1hZ2Uvd2VicCdcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBkYXRhIFVSTCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gaW1nU3JjVG9EYXRhVVJMKHNyYywgdHlwZSwgY3Jvc3NPcmlnaW4sIHF1YWxpdHkpIHtcbiAgICB0eXBlID0gdHlwZSB8fCAnaW1hZ2UvcG5nJztcbiAgICByZXR1cm4gbG9hZEltYWdlKHNyYywgY3Jvc3NPcmlnaW4pLnRoZW4oaW1nVG9DYW52YXMpLnRoZW4oZnVuY3Rpb24gKGNhbnZhcykge1xuICAgICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5KTtcbiAgICB9KTtcbn1cbi8qKlxuICogQ29udmVydCBhIGBjYW52YXNgIHRvIGEgYEJsb2JgLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5jYW52YXNUb0Jsb2IoY2FudmFzKS50aGVuKGZ1bmN0aW9uIChibG9iKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogTW9zdCBicm93c2VycyBzdXBwb3J0IGNvbnZlcnRpbmcgYSBjYW52YXMgdG8gYm90aCBgJ2ltYWdlL3BuZydgIGFuZCBgJ2ltYWdlL2pwZWcnYC4gWW91IG1heVxuICogYWxzbyB3YW50IHRvIHRyeSBgJ2ltYWdlL3dlYnAnYCwgd2hpY2ggd2lsbCB3b3JrIGluIHNvbWUgYnJvd3NlcnMgbGlrZSBDaHJvbWUgKGFuZCBpbiBvdGhlciBicm93c2Vycywgd2lsbCBqdXN0IGZhbGwgYmFjayB0byBgJ2ltYWdlL3BuZydgKTpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuY2FudmFzVG9CbG9iKGNhbnZhcywgJ2ltYWdlL3dlYnAnKS50aGVuKGZ1bmN0aW9uIChibG9iKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGNhbnZhcyAtIEhUTUxDYW52YXNFbGVtZW50XG4gKiBAcGFyYW0gdHlwZSAtIHRoZSBjb250ZW50IHR5cGUgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byAnaW1hZ2UvcG5nJylcbiAqIEBwYXJhbSBxdWFsaXR5IC0gYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaW1hZ2UgcXVhbGl0eVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIHJlcXVlc3RlZCB0eXBlIGlzICdpbWFnZS9qcGVnJyBvciAnaW1hZ2Uvd2VicCdcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBgQmxvYmBcbiAqL1xuZnVuY3Rpb24gY2FudmFzVG9CbG9iKGNhbnZhcywgdHlwZSwgcXVhbGl0eSkge1xuICAgIGlmICh0eXBlb2YgY2FudmFzLnRvQmxvYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIGNhbnZhcy50b0Jsb2IocmVzb2x2ZSwgdHlwZSwgcXVhbGl0eSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRhdGFVUkxUb0Jsb2IoY2FudmFzLnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5KSkpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGFuIGltYWdlJ3MgYHNyY2AgVVJMIHRvIGEgYEJsb2JgIGJ5IGxvYWRpbmcgdGhlIGltYWdlIGFuZCBwYWludGluZ1xuICogaXQgdG8gYSBgY2FudmFzYC5cbiAqXG4gKiBOb3RlOiB0aGlzIHdpbGwgY29lcmNlIHRoZSBpbWFnZSB0byB0aGUgZGVzaXJlZCBjb250ZW50IHR5cGUsIGFuZCBpdFxuICogd2lsbCBvbmx5IHBhaW50IHRoZSBmaXJzdCBmcmFtZSBvZiBhbiBhbmltYXRlZCBHSUYuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmltZ1NyY1RvQmxvYignaHR0cDovL215c2l0ZS5jb20vaW1nLnBuZycpLnRoZW4oZnVuY3Rpb24gKGJsb2IpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuaW1nU3JjVG9CbG9iKCdodHRwOi8vc29tZS1vdGhlci1zaXRlLmNvbS9pbWcuanBnJywgJ2ltYWdlL2pwZWcnLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICdBbm9ueW1vdXMnLCAxLjApLnRoZW4oZnVuY3Rpb24gKGJsb2IpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3JjIC0gaW1hZ2Ugc3JjXG4gKiBAcGFyYW0gdHlwZSAtIHRoZSBjb250ZW50IHR5cGUgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byAnaW1hZ2UvcG5nJylcbiAqIEBwYXJhbSBjcm9zc09yaWdpbiAtIGZvciBDT1JTLWVuYWJsZWQgaW1hZ2VzLCBzZXQgdGhpcyB0b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBbm9ueW1vdXMnIHRvIGF2b2lkIFwidGFpbnRlZCBjYW52YXNcIiBlcnJvcnNcbiAqIEBwYXJhbSBxdWFsaXR5IC0gYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxIGluZGljYXRpbmcgaW1hZ2UgcXVhbGl0eVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIHJlcXVlc3RlZCB0eXBlIGlzICdpbWFnZS9qcGVnJyBvciAnaW1hZ2Uvd2VicCdcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBgQmxvYmBcbiAqL1xuZnVuY3Rpb24gaW1nU3JjVG9CbG9iKHNyYywgdHlwZSwgY3Jvc3NPcmlnaW4sIHF1YWxpdHkpIHtcbiAgICB0eXBlID0gdHlwZSB8fCAnaW1hZ2UvcG5nJztcbiAgICByZXR1cm4gbG9hZEltYWdlKHNyYywgY3Jvc3NPcmlnaW4pLnRoZW4oaW1nVG9DYW52YXMpLnRoZW4oZnVuY3Rpb24gKGNhbnZhcykge1xuICAgICAgICByZXR1cm4gY2FudmFzVG9CbG9iKGNhbnZhcywgdHlwZSwgcXVhbGl0eSk7XG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnQgYW4gYEFycmF5QnVmZmVyYCB0byBhIGBCbG9iYC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYmxvYiA9IGJsb2JVdGlsLmFycmF5QnVmZmVyVG9CbG9iKGFycmF5QnVmZiwgJ2F1ZGlvL21wZWcnKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBidWZmZXJcbiAqIEBwYXJhbSB0eXBlIC0gdGhlIGNvbnRlbnQgdHlwZSAob3B0aW9uYWwpXG4gKiBAcmV0dXJucyBCbG9iXG4gKi9cbmZ1bmN0aW9uIGFycmF5QnVmZmVyVG9CbG9iKGJ1ZmZlciwgdHlwZSkge1xuICAgIHJldHVybiBjcmVhdGVCbG9iKFtidWZmZXJdLCB0eXBlKTtcbn1cbi8qKlxuICogQ29udmVydCBhIGBCbG9iYCB0byBhbiBgQXJyYXlCdWZmZXJgLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmJsb2JUb0FycmF5QnVmZmVyKGJsb2IpLnRoZW4oZnVuY3Rpb24gKGFycmF5QnVmZikge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBibG9iXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYEFycmF5QnVmZmVyYFxuICovXG5mdW5jdGlvbiBibG9iVG9BcnJheUJ1ZmZlcihibG9iKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVhZGVyLnJlc3VsdCB8fCBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnQgYW4gYEFycmF5QnVmZmVyYCB0byBhIGJpbmFyeSBzdHJpbmcuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIG15U3RyaW5nID0gYmxvYlV0aWwuYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyhhcnJheUJ1ZmYpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYnVmZmVyIC0gYXJyYXkgYnVmZmVyXG4gKiBAcmV0dXJucyBiaW5hcnkgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmcoYnVmZmVyKSB7XG4gICAgdmFyIGJpbmFyeSA9ICcnO1xuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgdmFyIGxlbmd0aCA9IGJ5dGVzLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGkgPSAtMTtcbiAgICB3aGlsZSAoKytpIDwgbGVuZ3RoKSB7XG4gICAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmFyeTtcbn1cbi8qKlxuICogQ29udmVydCBhIGJpbmFyeSBzdHJpbmcgdG8gYW4gYEFycmF5QnVmZmVyYC5cbiAqXG4gKiBgYGBqc1xuICogdmFyIG15QnVmZmVyID0gYmxvYlV0aWwuYmluYXJ5U3RyaW5nVG9BcnJheUJ1ZmZlcihiaW5hcnlTdHJpbmcpXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmluYXJ5IC0gYmluYXJ5IHN0cmluZ1xuICogQHJldHVybnMgYXJyYXkgYnVmZmVyXG4gKi9cbmZ1bmN0aW9uIGJpbmFyeVN0cmluZ1RvQXJyYXlCdWZmZXIoYmluYXJ5KSB7XG4gICAgdmFyIGxlbmd0aCA9IGJpbmFyeS5sZW5ndGg7XG4gICAgdmFyIGJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGgpO1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgIHZhciBpID0gLTE7XG4gICAgd2hpbGUgKCsraSA8IGxlbmd0aCkge1xuICAgICAgICBhcnJbaV0gPSBiaW5hcnkuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IHsgY3JlYXRlQmxvYiwgY3JlYXRlT2JqZWN0VVJMLCByZXZva2VPYmplY3RVUkwsIGJsb2JUb0JpbmFyeVN0cmluZywgYmFzZTY0U3RyaW5nVG9CbG9iLCBiaW5hcnlTdHJpbmdUb0Jsb2IsIGJsb2JUb0Jhc2U2NFN0cmluZywgZGF0YVVSTFRvQmxvYiwgYmxvYlRvRGF0YVVSTCwgaW1nU3JjVG9EYXRhVVJMLCBjYW52YXNUb0Jsb2IsIGltZ1NyY1RvQmxvYiwgYXJyYXlCdWZmZXJUb0Jsb2IsIGJsb2JUb0FycmF5QnVmZmVyLCBhcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nLCBiaW5hcnlTdHJpbmdUb0FycmF5QnVmZmVyIH07XG4iLCIvKlxuICogIENvcHlyaWdodCAyMDExIFR3aXR0ZXIsIEluYy5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbihmdW5jdGlvbiAoSG9nYW4pIHtcbiAgLy8gU2V0dXAgcmVnZXggIGFzc2lnbm1lbnRzXG4gIC8vIHJlbW92ZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBNdXN0YWNoZSBzcGVjXG4gIHZhciBySXNXaGl0ZXNwYWNlID0gL1xcUy8sXG4gICAgICByUXVvdCA9IC9cXFwiL2csXG4gICAgICByTmV3bGluZSA9ICAvXFxuL2csXG4gICAgICByQ3IgPSAvXFxyL2csXG4gICAgICByU2xhc2ggPSAvXFxcXC9nLFxuICAgICAgckxpbmVTZXAgPSAvXFx1MjAyOC8sXG4gICAgICByUGFyYWdyYXBoU2VwID0gL1xcdTIwMjkvO1xuXG4gIEhvZ2FuLnRhZ3MgPSB7XG4gICAgJyMnOiAxLCAnXic6IDIsICc8JzogMywgJyQnOiA0LFxuICAgICcvJzogNSwgJyEnOiA2LCAnPic6IDcsICc9JzogOCwgJ192JzogOSxcbiAgICAneyc6IDEwLCAnJic6IDExLCAnX3QnOiAxMlxuICB9O1xuXG4gIEhvZ2FuLnNjYW4gPSBmdW5jdGlvbiBzY2FuKHRleHQsIGRlbGltaXRlcnMpIHtcbiAgICB2YXIgbGVuID0gdGV4dC5sZW5ndGgsXG4gICAgICAgIElOX1RFWFQgPSAwLFxuICAgICAgICBJTl9UQUdfVFlQRSA9IDEsXG4gICAgICAgIElOX1RBRyA9IDIsXG4gICAgICAgIHN0YXRlID0gSU5fVEVYVCxcbiAgICAgICAgdGFnVHlwZSA9IG51bGwsXG4gICAgICAgIHRhZyA9IG51bGwsXG4gICAgICAgIGJ1ZiA9ICcnLFxuICAgICAgICB0b2tlbnMgPSBbXSxcbiAgICAgICAgc2VlblRhZyA9IGZhbHNlLFxuICAgICAgICBpID0gMCxcbiAgICAgICAgbGluZVN0YXJ0ID0gMCxcbiAgICAgICAgb3RhZyA9ICd7eycsXG4gICAgICAgIGN0YWcgPSAnfX0nO1xuXG4gICAgZnVuY3Rpb24gYWRkQnVmKCkge1xuICAgICAgaWYgKGJ1Zi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRva2Vucy5wdXNoKHt0YWc6ICdfdCcsIHRleHQ6IG5ldyBTdHJpbmcoYnVmKX0pO1xuICAgICAgICBidWYgPSAnJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lSXNXaGl0ZXNwYWNlKCkge1xuICAgICAgdmFyIGlzQWxsV2hpdGVzcGFjZSA9IHRydWU7XG4gICAgICBmb3IgKHZhciBqID0gbGluZVN0YXJ0OyBqIDwgdG9rZW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlzQWxsV2hpdGVzcGFjZSA9XG4gICAgICAgICAgKEhvZ2FuLnRhZ3NbdG9rZW5zW2pdLnRhZ10gPCBIb2dhbi50YWdzWydfdiddKSB8fFxuICAgICAgICAgICh0b2tlbnNbal0udGFnID09ICdfdCcgJiYgdG9rZW5zW2pdLnRleHQubWF0Y2gocklzV2hpdGVzcGFjZSkgPT09IG51bGwpO1xuICAgICAgICBpZiAoIWlzQWxsV2hpdGVzcGFjZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXNBbGxXaGl0ZXNwYWNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbHRlckxpbmUoaGF2ZVNlZW5UYWcsIG5vTmV3TGluZSkge1xuICAgICAgYWRkQnVmKCk7XG5cbiAgICAgIGlmIChoYXZlU2VlblRhZyAmJiBsaW5lSXNXaGl0ZXNwYWNlKCkpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGxpbmVTdGFydCwgbmV4dDsgaiA8IHRva2Vucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGlmICh0b2tlbnNbal0udGV4dCkge1xuICAgICAgICAgICAgaWYgKChuZXh0ID0gdG9rZW5zW2orMV0pICYmIG5leHQudGFnID09ICc+Jykge1xuICAgICAgICAgICAgICAvLyBzZXQgaW5kZW50IHRvIHRva2VuIHZhbHVlXG4gICAgICAgICAgICAgIG5leHQuaW5kZW50ID0gdG9rZW5zW2pdLnRleHQudG9TdHJpbmcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9rZW5zLnNwbGljZShqLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW5vTmV3TGluZSkge1xuICAgICAgICB0b2tlbnMucHVzaCh7dGFnOidcXG4nfSk7XG4gICAgICB9XG5cbiAgICAgIHNlZW5UYWcgPSBmYWxzZTtcbiAgICAgIGxpbmVTdGFydCA9IHRva2Vucy5sZW5ndGg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hhbmdlRGVsaW1pdGVycyh0ZXh0LCBpbmRleCkge1xuICAgICAgdmFyIGNsb3NlID0gJz0nICsgY3RhZyxcbiAgICAgICAgICBjbG9zZUluZGV4ID0gdGV4dC5pbmRleE9mKGNsb3NlLCBpbmRleCksXG4gICAgICAgICAgZGVsaW1pdGVycyA9IHRyaW0oXG4gICAgICAgICAgICB0ZXh0LnN1YnN0cmluZyh0ZXh0LmluZGV4T2YoJz0nLCBpbmRleCkgKyAxLCBjbG9zZUluZGV4KVxuICAgICAgICAgICkuc3BsaXQoJyAnKTtcblxuICAgICAgb3RhZyA9IGRlbGltaXRlcnNbMF07XG4gICAgICBjdGFnID0gZGVsaW1pdGVyc1tkZWxpbWl0ZXJzLmxlbmd0aCAtIDFdO1xuXG4gICAgICByZXR1cm4gY2xvc2VJbmRleCArIGNsb3NlLmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgaWYgKGRlbGltaXRlcnMpIHtcbiAgICAgIGRlbGltaXRlcnMgPSBkZWxpbWl0ZXJzLnNwbGl0KCcgJyk7XG4gICAgICBvdGFnID0gZGVsaW1pdGVyc1swXTtcbiAgICAgIGN0YWcgPSBkZWxpbWl0ZXJzWzFdO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKHN0YXRlID09IElOX1RFWFQpIHtcbiAgICAgICAgaWYgKHRhZ0NoYW5nZShvdGFnLCB0ZXh0LCBpKSkge1xuICAgICAgICAgIC0taTtcbiAgICAgICAgICBhZGRCdWYoKTtcbiAgICAgICAgICBzdGF0ZSA9IElOX1RBR19UWVBFO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0ZXh0LmNoYXJBdChpKSA9PSAnXFxuJykge1xuICAgICAgICAgICAgZmlsdGVyTGluZShzZWVuVGFnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmICs9IHRleHQuY2hhckF0KGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBJTl9UQUdfVFlQRSkge1xuICAgICAgICBpICs9IG90YWcubGVuZ3RoIC0gMTtcbiAgICAgICAgdGFnID0gSG9nYW4udGFnc1t0ZXh0LmNoYXJBdChpICsgMSldO1xuICAgICAgICB0YWdUeXBlID0gdGFnID8gdGV4dC5jaGFyQXQoaSArIDEpIDogJ192JztcbiAgICAgICAgaWYgKHRhZ1R5cGUgPT0gJz0nKSB7XG4gICAgICAgICAgaSA9IGNoYW5nZURlbGltaXRlcnModGV4dCwgaSk7XG4gICAgICAgICAgc3RhdGUgPSBJTl9URVhUO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0YWcpIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGUgPSBJTl9UQUc7XG4gICAgICAgIH1cbiAgICAgICAgc2VlblRhZyA9IGk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFnQ2hhbmdlKGN0YWcsIHRleHQsIGkpKSB7XG4gICAgICAgICAgdG9rZW5zLnB1c2goe3RhZzogdGFnVHlwZSwgbjogdHJpbShidWYpLCBvdGFnOiBvdGFnLCBjdGFnOiBjdGFnLFxuICAgICAgICAgICAgICAgICAgICAgICBpOiAodGFnVHlwZSA9PSAnLycpID8gc2VlblRhZyAtIG90YWcubGVuZ3RoIDogaSArIGN0YWcubGVuZ3RofSk7XG4gICAgICAgICAgYnVmID0gJyc7XG4gICAgICAgICAgaSArPSBjdGFnLmxlbmd0aCAtIDE7XG4gICAgICAgICAgc3RhdGUgPSBJTl9URVhUO1xuICAgICAgICAgIGlmICh0YWdUeXBlID09ICd7Jykge1xuICAgICAgICAgICAgaWYgKGN0YWcgPT0gJ319Jykge1xuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjbGVhblRyaXBsZVN0YWNoZSh0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmICs9IHRleHQuY2hhckF0KGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmlsdGVyTGluZShzZWVuVGFnLCB0cnVlKTtcblxuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhblRyaXBsZVN0YWNoZSh0b2tlbikge1xuICAgIGlmICh0b2tlbi5uLnN1YnN0cih0b2tlbi5uLmxlbmd0aCAtIDEpID09PSAnfScpIHtcbiAgICAgIHRva2VuLm4gPSB0b2tlbi5uLnN1YnN0cmluZygwLCB0b2tlbi5uLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaW0ocykge1xuICAgIGlmIChzLnRyaW0pIHtcbiAgICAgIHJldHVybiBzLnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcy5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7XG4gIH1cblxuICBmdW5jdGlvbiB0YWdDaGFuZ2UodGFnLCB0ZXh0LCBpbmRleCkge1xuICAgIGlmICh0ZXh0LmNoYXJBdChpbmRleCkgIT0gdGFnLmNoYXJBdCgwKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAxLCBsID0gdGFnLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHRleHQuY2hhckF0KGluZGV4ICsgaSkgIT0gdGFnLmNoYXJBdChpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyB0aGUgdGFncyBhbGxvd2VkIGluc2lkZSBzdXBlciB0ZW1wbGF0ZXNcbiAgdmFyIGFsbG93ZWRJblN1cGVyID0geydfdCc6IHRydWUsICdcXG4nOiB0cnVlLCAnJCc6IHRydWUsICcvJzogdHJ1ZX07XG5cbiAgZnVuY3Rpb24gYnVpbGRUcmVlKHRva2Vucywga2luZCwgc3RhY2ssIGN1c3RvbVRhZ3MpIHtcbiAgICB2YXIgaW5zdHJ1Y3Rpb25zID0gW10sXG4gICAgICAgIG9wZW5lciA9IG51bGwsXG4gICAgICAgIHRhaWwgPSBudWxsLFxuICAgICAgICB0b2tlbiA9IG51bGw7XG5cbiAgICB0YWlsID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cbiAgICAgIGlmICh0YWlsICYmIHRhaWwudGFnID09ICc8JyAmJiAhKHRva2VuLnRhZyBpbiBhbGxvd2VkSW5TdXBlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGNvbnRlbnQgaW4gPCBzdXBlciB0YWcuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChIb2dhbi50YWdzW3Rva2VuLnRhZ10gPD0gSG9nYW4udGFnc1snJCddIHx8IGlzT3BlbmVyKHRva2VuLCBjdXN0b21UYWdzKSkge1xuICAgICAgICBzdGFjay5wdXNoKHRva2VuKTtcbiAgICAgICAgdG9rZW4ubm9kZXMgPSBidWlsZFRyZWUodG9rZW5zLCB0b2tlbi50YWcsIHN0YWNrLCBjdXN0b21UYWdzKTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udGFnID09ICcvJykge1xuICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDbG9zaW5nIHRhZyB3aXRob3V0IG9wZW5lcjogLycgKyB0b2tlbi5uKTtcbiAgICAgICAgfVxuICAgICAgICBvcGVuZXIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgaWYgKHRva2VuLm4gIT0gb3BlbmVyLm4gJiYgIWlzQ2xvc2VyKHRva2VuLm4sIG9wZW5lci5uLCBjdXN0b21UYWdzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTmVzdGluZyBlcnJvcjogJyArIG9wZW5lci5uICsgJyB2cy4gJyArIHRva2VuLm4pO1xuICAgICAgICB9XG4gICAgICAgIG9wZW5lci5lbmQgPSB0b2tlbi5pO1xuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25zO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50YWcgPT0gJ1xcbicpIHtcbiAgICAgICAgdG9rZW4ubGFzdCA9ICh0b2tlbnMubGVuZ3RoID09IDApIHx8ICh0b2tlbnNbMF0udGFnID09ICdcXG4nKTtcbiAgICAgIH1cblxuICAgICAgaW5zdHJ1Y3Rpb25zLnB1c2godG9rZW4pO1xuICAgIH1cblxuICAgIGlmIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgY2xvc2luZyB0YWc6ICcgKyBzdGFjay5wb3AoKS5uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdHJ1Y3Rpb25zO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNPcGVuZXIodG9rZW4sIHRhZ3MpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAodGFnc1tpXS5vID09IHRva2VuLm4pIHtcbiAgICAgICAgdG9rZW4udGFnID0gJyMnO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc0Nsb3NlcihjbG9zZSwgb3BlbiwgdGFncykge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdGFncy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh0YWdzW2ldLmMgPT0gY2xvc2UgJiYgdGFnc1tpXS5vID09IG9wZW4pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RyaW5naWZ5U3Vic3RpdHV0aW9ucyhvYmopIHtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpdGVtcy5wdXNoKCdcIicgKyBlc2Moa2V5KSArICdcIjogZnVuY3Rpb24oYyxwLHQsaSkgeycgKyBvYmpba2V5XSArICd9Jyk7XG4gICAgfVxuICAgIHJldHVybiBcInsgXCIgKyBpdGVtcy5qb2luKFwiLFwiKSArIFwiIH1cIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ2lmeVBhcnRpYWxzKGNvZGVPYmopIHtcbiAgICB2YXIgcGFydGlhbHMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gY29kZU9iai5wYXJ0aWFscykge1xuICAgICAgcGFydGlhbHMucHVzaCgnXCInICsgZXNjKGtleSkgKyAnXCI6e25hbWU6XCInICsgZXNjKGNvZGVPYmoucGFydGlhbHNba2V5XS5uYW1lKSArICdcIiwgJyArIHN0cmluZ2lmeVBhcnRpYWxzKGNvZGVPYmoucGFydGlhbHNba2V5XSkgKyBcIn1cIik7XG4gICAgfVxuICAgIHJldHVybiBcInBhcnRpYWxzOiB7XCIgKyBwYXJ0aWFscy5qb2luKFwiLFwiKSArIFwifSwgc3ViczogXCIgKyBzdHJpbmdpZnlTdWJzdGl0dXRpb25zKGNvZGVPYmouc3Vicyk7XG4gIH1cblxuICBIb2dhbi5zdHJpbmdpZnkgPSBmdW5jdGlvbihjb2RlT2JqLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFwie2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyBcIiArIEhvZ2FuLndyYXBNYWluKGNvZGVPYmouY29kZSkgKyBcIiB9LFwiICsgc3RyaW5naWZ5UGFydGlhbHMoY29kZU9iaikgKyAgXCJ9XCI7XG4gIH1cblxuICB2YXIgc2VyaWFsTm8gPSAwO1xuICBIb2dhbi5nZW5lcmF0ZSA9IGZ1bmN0aW9uKHRyZWUsIHRleHQsIG9wdGlvbnMpIHtcbiAgICBzZXJpYWxObyA9IDA7XG4gICAgdmFyIGNvbnRleHQgPSB7IGNvZGU6ICcnLCBzdWJzOiB7fSwgcGFydGlhbHM6IHt9IH07XG4gICAgSG9nYW4ud2Fsayh0cmVlLCBjb250ZXh0KTtcblxuICAgIGlmIChvcHRpb25zLmFzU3RyaW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJpbmdpZnkoY29udGV4dCwgdGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWFrZVRlbXBsYXRlKGNvbnRleHQsIHRleHQsIG9wdGlvbnMpO1xuICB9XG5cbiAgSG9nYW4ud3JhcE1haW4gPSBmdW5jdGlvbihjb2RlKSB7XG4gICAgcmV0dXJuICd2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpOycgKyBjb2RlICsgJ3JldHVybiB0LmZsKCk7JztcbiAgfVxuXG4gIEhvZ2FuLnRlbXBsYXRlID0gSG9nYW4uVGVtcGxhdGU7XG5cbiAgSG9nYW4ubWFrZVRlbXBsYXRlID0gZnVuY3Rpb24oY29kZU9iaiwgdGV4dCwgb3B0aW9ucykge1xuICAgIHZhciB0ZW1wbGF0ZSA9IHRoaXMubWFrZVBhcnRpYWxzKGNvZGVPYmopO1xuICAgIHRlbXBsYXRlLmNvZGUgPSBuZXcgRnVuY3Rpb24oJ2MnLCAncCcsICdpJywgdGhpcy53cmFwTWFpbihjb2RlT2JqLmNvZGUpKTtcbiAgICByZXR1cm4gbmV3IHRoaXMudGVtcGxhdGUodGVtcGxhdGUsIHRleHQsIHRoaXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgSG9nYW4ubWFrZVBhcnRpYWxzID0gZnVuY3Rpb24oY29kZU9iaikge1xuICAgIHZhciBrZXksIHRlbXBsYXRlID0ge3N1YnM6IHt9LCBwYXJ0aWFsczogY29kZU9iai5wYXJ0aWFscywgbmFtZTogY29kZU9iai5uYW1lfTtcbiAgICBmb3IgKGtleSBpbiB0ZW1wbGF0ZS5wYXJ0aWFscykge1xuICAgICAgdGVtcGxhdGUucGFydGlhbHNba2V5XSA9IHRoaXMubWFrZVBhcnRpYWxzKHRlbXBsYXRlLnBhcnRpYWxzW2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBjb2RlT2JqLnN1YnMpIHtcbiAgICAgIHRlbXBsYXRlLnN1YnNba2V5XSA9IG5ldyBGdW5jdGlvbignYycsICdwJywgJ3QnLCAnaScsIGNvZGVPYmouc3Vic1trZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gZXNjKHMpIHtcbiAgICByZXR1cm4gcy5yZXBsYWNlKHJTbGFzaCwgJ1xcXFxcXFxcJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJRdW90LCAnXFxcXFxcXCInKVxuICAgICAgICAgICAgLnJlcGxhY2Uock5ld2xpbmUsICdcXFxcbicpXG4gICAgICAgICAgICAucmVwbGFjZShyQ3IsICdcXFxccicpXG4gICAgICAgICAgICAucmVwbGFjZShyTGluZVNlcCwgJ1xcXFx1MjAyOCcpXG4gICAgICAgICAgICAucmVwbGFjZShyUGFyYWdyYXBoU2VwLCAnXFxcXHUyMDI5Jyk7XG4gIH1cblxuICBmdW5jdGlvbiBjaG9vc2VNZXRob2Qocykge1xuICAgIHJldHVybiAofnMuaW5kZXhPZignLicpKSA/ICdkJyA6ICdmJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhcnRpYWwobm9kZSwgY29udGV4dCkge1xuICAgIHZhciBwcmVmaXggPSBcIjxcIiArIChjb250ZXh0LnByZWZpeCB8fCBcIlwiKTtcbiAgICB2YXIgc3ltID0gcHJlZml4ICsgbm9kZS5uICsgc2VyaWFsTm8rKztcbiAgICBjb250ZXh0LnBhcnRpYWxzW3N5bV0gPSB7bmFtZTogbm9kZS5uLCBwYXJ0aWFsczoge319O1xuICAgIGNvbnRleHQuY29kZSArPSAndC5iKHQucnAoXCInICsgIGVzYyhzeW0pICsgJ1wiLGMscCxcIicgKyAobm9kZS5pbmRlbnQgfHwgJycpICsgJ1wiKSk7JztcbiAgICByZXR1cm4gc3ltO1xuICB9XG5cbiAgSG9nYW4uY29kZWdlbiA9IHtcbiAgICAnIyc6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSAnaWYodC5zKHQuJyArIGNob29zZU1ldGhvZChub2RlLm4pICsgJyhcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsMSksJyArXG4gICAgICAgICAgICAgICAgICAgICAgJ2MscCwwLCcgKyBub2RlLmkgKyAnLCcgKyBub2RlLmVuZCArICcsXCInICsgbm9kZS5vdGFnICsgXCIgXCIgKyBub2RlLmN0YWcgKyAnXCIpKXsnICtcbiAgICAgICAgICAgICAgICAgICAgICAndC5ycyhjLHAsJyArICdmdW5jdGlvbihjLHAsdCl7JztcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY29udGV4dCk7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ30pO2MucG9wKCk7fSc7XG4gICAgfSxcblxuICAgICdeJzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9ICdpZighdC5zKHQuJyArIGNob29zZU1ldGhvZChub2RlLm4pICsgJyhcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsMSksYyxwLDEsMCwwLFwiXCIpKXsnO1xuICAgICAgSG9nYW4ud2Fsayhub2RlLm5vZGVzLCBjb250ZXh0KTtcbiAgICAgIGNvbnRleHQuY29kZSArPSAnfTsnO1xuICAgIH0sXG5cbiAgICAnPic6IGNyZWF0ZVBhcnRpYWwsXG4gICAgJzwnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgY3R4ID0ge3BhcnRpYWxzOiB7fSwgY29kZTogJycsIHN1YnM6IHt9LCBpblBhcnRpYWw6IHRydWV9O1xuICAgICAgSG9nYW4ud2Fsayhub2RlLm5vZGVzLCBjdHgpO1xuICAgICAgdmFyIHRlbXBsYXRlID0gY29udGV4dC5wYXJ0aWFsc1tjcmVhdGVQYXJ0aWFsKG5vZGUsIGNvbnRleHQpXTtcbiAgICAgIHRlbXBsYXRlLnN1YnMgPSBjdHguc3VicztcbiAgICAgIHRlbXBsYXRlLnBhcnRpYWxzID0gY3R4LnBhcnRpYWxzO1xuICAgIH0sXG5cbiAgICAnJCc6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBjdHggPSB7c3Viczoge30sIGNvZGU6ICcnLCBwYXJ0aWFsczogY29udGV4dC5wYXJ0aWFscywgcHJlZml4OiBub2RlLm59O1xuICAgICAgSG9nYW4ud2Fsayhub2RlLm5vZGVzLCBjdHgpO1xuICAgICAgY29udGV4dC5zdWJzW25vZGUubl0gPSBjdHguY29kZTtcbiAgICAgIGlmICghY29udGV4dC5pblBhcnRpYWwpIHtcbiAgICAgICAgY29udGV4dC5jb2RlICs9ICd0LnN1YihcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsaSk7JztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgJ1xcbic6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSB3cml0ZSgnXCJcXFxcblwiJyArIChub2RlLmxhc3QgPyAnJyA6ICcgKyBpJykpO1xuICAgIH0sXG5cbiAgICAnX3YnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ3QuYih0LnYodC4nICsgY2hvb3NlTWV0aG9kKG5vZGUubikgKyAnKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCwwKSkpOyc7XG4gICAgfSxcblxuICAgICdfdCc6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSB3cml0ZSgnXCInICsgZXNjKG5vZGUudGV4dCkgKyAnXCInKTtcbiAgICB9LFxuXG4gICAgJ3snOiB0cmlwbGVTdGFjaGUsXG5cbiAgICAnJic6IHRyaXBsZVN0YWNoZVxuICB9XG5cbiAgZnVuY3Rpb24gdHJpcGxlU3RhY2hlKG5vZGUsIGNvbnRleHQpIHtcbiAgICBjb250ZXh0LmNvZGUgKz0gJ3QuYih0LnQodC4nICsgY2hvb3NlTWV0aG9kKG5vZGUubikgKyAnKFwiJyArIGVzYyhub2RlLm4pICsgJ1wiLGMscCwwKSkpOyc7XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZShzKSB7XG4gICAgcmV0dXJuICd0LmIoJyArIHMgKyAnKTsnO1xuICB9XG5cbiAgSG9nYW4ud2FsayA9IGZ1bmN0aW9uKG5vZGVsaXN0LCBjb250ZXh0KSB7XG4gICAgdmFyIGZ1bmM7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBub2RlbGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZ1bmMgPSBIb2dhbi5jb2RlZ2VuW25vZGVsaXN0W2ldLnRhZ107XG4gICAgICBmdW5jICYmIGZ1bmMobm9kZWxpc3RbaV0sIGNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGV4dDtcbiAgfVxuXG4gIEhvZ2FuLnBhcnNlID0gZnVuY3Rpb24odG9rZW5zLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuIGJ1aWxkVHJlZSh0b2tlbnMsICcnLCBbXSwgb3B0aW9ucy5zZWN0aW9uVGFncyB8fCBbXSk7XG4gIH1cblxuICBIb2dhbi5jYWNoZSA9IHt9O1xuXG4gIEhvZ2FuLmNhY2hlS2V5ID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBbdGV4dCwgISFvcHRpb25zLmFzU3RyaW5nLCAhIW9wdGlvbnMuZGlzYWJsZUxhbWJkYSwgb3B0aW9ucy5kZWxpbWl0ZXJzLCAhIW9wdGlvbnMubW9kZWxHZXRdLmpvaW4oJ3x8Jyk7XG4gIH1cblxuICBIb2dhbi5jb21waWxlID0gZnVuY3Rpb24odGV4dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHZhciBrZXkgPSBIb2dhbi5jYWNoZUtleSh0ZXh0LCBvcHRpb25zKTtcbiAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLmNhY2hlW2tleV07XG5cbiAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgIHZhciBwYXJ0aWFscyA9IHRlbXBsYXRlLnBhcnRpYWxzO1xuICAgICAgZm9yICh2YXIgbmFtZSBpbiBwYXJ0aWFscykge1xuICAgICAgICBkZWxldGUgcGFydGlhbHNbbmFtZV0uaW5zdGFuY2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgfVxuXG4gICAgdGVtcGxhdGUgPSB0aGlzLmdlbmVyYXRlKHRoaXMucGFyc2UodGhpcy5zY2FuKHRleHQsIG9wdGlvbnMuZGVsaW1pdGVycyksIHRleHQsIG9wdGlvbnMpLCB0ZXh0LCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVtrZXldID0gdGVtcGxhdGU7XG4gIH1cbn0pKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJyA/IGV4cG9ydHMgOiBIb2dhbik7XG4iLCIvKlxuICogIENvcHlyaWdodCAyMDExIFR3aXR0ZXIsIEluYy5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIFRoaXMgZmlsZSBpcyBmb3IgdXNlIHdpdGggTm9kZS5qcy4gU2VlIGRpc3QvIGZvciBicm93c2VyIGZpbGVzLlxuXG52YXIgSG9nYW4gPSByZXF1aXJlKCcuL2NvbXBpbGVyJyk7XG5Ib2dhbi5UZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVtcGxhdGUnKS5UZW1wbGF0ZTtcbkhvZ2FuLnRlbXBsYXRlID0gSG9nYW4uVGVtcGxhdGU7XG5tb2R1bGUuZXhwb3J0cyA9IEhvZ2FuO1xuIiwiLypcbiAqICBDb3B5cmlnaHQgMjAxMSBUd2l0dGVyLCBJbmMuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG52YXIgSG9nYW4gPSB7fTtcblxuKGZ1bmN0aW9uIChIb2dhbikge1xuICBIb2dhbi5UZW1wbGF0ZSA9IGZ1bmN0aW9uIChjb2RlT2JqLCB0ZXh0LCBjb21waWxlciwgb3B0aW9ucykge1xuICAgIGNvZGVPYmogPSBjb2RlT2JqIHx8IHt9O1xuICAgIHRoaXMuciA9IGNvZGVPYmouY29kZSB8fCB0aGlzLnI7XG4gICAgdGhpcy5jID0gY29tcGlsZXI7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLnRleHQgPSB0ZXh0IHx8ICcnO1xuICAgIHRoaXMucGFydGlhbHMgPSBjb2RlT2JqLnBhcnRpYWxzIHx8IHt9O1xuICAgIHRoaXMuc3VicyA9IGNvZGVPYmouc3VicyB8fCB7fTtcbiAgICB0aGlzLmJ1ZiA9ICcnO1xuICB9XG5cbiAgSG9nYW4uVGVtcGxhdGUucHJvdG90eXBlID0ge1xuICAgIC8vIHJlbmRlcjogcmVwbGFjZWQgYnkgZ2VuZXJhdGVkIGNvZGUuXG4gICAgcjogZnVuY3Rpb24gKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHsgcmV0dXJuICcnOyB9LFxuXG4gICAgLy8gdmFyaWFibGUgZXNjYXBpbmdcbiAgICB2OiBob2dhbkVzY2FwZSxcblxuICAgIC8vIHRyaXBsZSBzdGFjaGVcbiAgICB0OiBjb2VyY2VUb1N0cmluZyxcblxuICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJpKFtjb250ZXh0XSwgcGFydGlhbHMgfHwge30sIGluZGVudCk7XG4gICAgfSxcblxuICAgIC8vIHJlbmRlciBpbnRlcm5hbCAtLSBhIGhvb2sgZm9yIG92ZXJyaWRlcyB0aGF0IGNhdGNoZXMgcGFydGlhbHMgdG9vXG4gICAgcmk6IGZ1bmN0aW9uIChjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpO1xuICAgIH0sXG5cbiAgICAvLyBlbnN1cmVQYXJ0aWFsXG4gICAgZXA6IGZ1bmN0aW9uKHN5bWJvbCwgcGFydGlhbHMpIHtcbiAgICAgIHZhciBwYXJ0aWFsID0gdGhpcy5wYXJ0aWFsc1tzeW1ib2xdO1xuXG4gICAgICAvLyBjaGVjayB0byBzZWUgdGhhdCBpZiB3ZSd2ZSBpbnN0YW50aWF0ZWQgdGhpcyBwYXJ0aWFsIGJlZm9yZVxuICAgICAgdmFyIHRlbXBsYXRlID0gcGFydGlhbHNbcGFydGlhbC5uYW1lXTtcbiAgICAgIGlmIChwYXJ0aWFsLmluc3RhbmNlICYmIHBhcnRpYWwuYmFzZSA9PSB0ZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm4gcGFydGlhbC5pbnN0YW5jZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoIXRoaXMuYykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbXBpbGVyIGF2YWlsYWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGUgPSB0aGlzLmMuY29tcGlsZSh0ZW1wbGF0ZSwgdGhpcy5vcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgdXNlIHRoaXMgdG8gY2hlY2sgd2hldGhlciB0aGUgcGFydGlhbHMgZGljdGlvbmFyeSBoYXMgY2hhbmdlZFxuICAgICAgdGhpcy5wYXJ0aWFsc1tzeW1ib2xdLmJhc2UgPSB0ZW1wbGF0ZTtcblxuICAgICAgaWYgKHBhcnRpYWwuc3Vicykge1xuICAgICAgICAvLyBNYWtlIHN1cmUgd2UgY29uc2lkZXIgcGFyZW50IHRlbXBsYXRlIG5vd1xuICAgICAgICBpZiAoIXBhcnRpYWxzLnN0YWNrVGV4dCkgcGFydGlhbHMuc3RhY2tUZXh0ID0ge307XG4gICAgICAgIGZvciAoa2V5IGluIHBhcnRpYWwuc3Vicykge1xuICAgICAgICAgIGlmICghcGFydGlhbHMuc3RhY2tUZXh0W2tleV0pIHtcbiAgICAgICAgICAgIHBhcnRpYWxzLnN0YWNrVGV4dFtrZXldID0gKHRoaXMuYWN0aXZlU3ViICE9PSB1bmRlZmluZWQgJiYgcGFydGlhbHMuc3RhY2tUZXh0W3RoaXMuYWN0aXZlU3ViXSkgPyBwYXJ0aWFscy5zdGFja1RleHRbdGhpcy5hY3RpdmVTdWJdIDogdGhpcy50ZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0ZW1wbGF0ZSA9IGNyZWF0ZVNwZWNpYWxpemVkUGFydGlhbCh0ZW1wbGF0ZSwgcGFydGlhbC5zdWJzLCBwYXJ0aWFsLnBhcnRpYWxzLFxuICAgICAgICAgIHRoaXMuc3RhY2tTdWJzLCB0aGlzLnN0YWNrUGFydGlhbHMsIHBhcnRpYWxzLnN0YWNrVGV4dCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhcnRpYWxzW3N5bWJvbF0uaW5zdGFuY2UgPSB0ZW1wbGF0ZTtcblxuICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH0sXG5cbiAgICAvLyB0cmllcyB0byBmaW5kIGEgcGFydGlhbCBpbiB0aGUgY3VycmVudCBzY29wZSBhbmQgcmVuZGVyIGl0XG4gICAgcnA6IGZ1bmN0aW9uKHN5bWJvbCwgY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkge1xuICAgICAgdmFyIHBhcnRpYWwgPSB0aGlzLmVwKHN5bWJvbCwgcGFydGlhbHMpO1xuICAgICAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnRpYWwucmkoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCk7XG4gICAgfSxcblxuICAgIC8vIHJlbmRlciBhIHNlY3Rpb25cbiAgICByczogZnVuY3Rpb24oY29udGV4dCwgcGFydGlhbHMsIHNlY3Rpb24pIHtcbiAgICAgIHZhciB0YWlsID0gY29udGV4dFtjb250ZXh0Lmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoIWlzQXJyYXkodGFpbCkpIHtcbiAgICAgICAgc2VjdGlvbihjb250ZXh0LCBwYXJ0aWFscywgdGhpcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWlsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnRleHQucHVzaCh0YWlsW2ldKTtcbiAgICAgICAgc2VjdGlvbihjb250ZXh0LCBwYXJ0aWFscywgdGhpcyk7XG4gICAgICAgIGNvbnRleHQucG9wKCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG1heWJlIHN0YXJ0IGEgc2VjdGlvblxuICAgIHM6IGZ1bmN0aW9uKHZhbCwgY3R4LCBwYXJ0aWFscywgaW52ZXJ0ZWQsIHN0YXJ0LCBlbmQsIHRhZ3MpIHtcbiAgICAgIHZhciBwYXNzO1xuXG4gICAgICBpZiAoaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbCA9IHRoaXMubXModmFsLCBjdHgsIHBhcnRpYWxzLCBpbnZlcnRlZCwgc3RhcnQsIGVuZCwgdGFncyk7XG4gICAgICB9XG5cbiAgICAgIHBhc3MgPSAhIXZhbDtcblxuICAgICAgaWYgKCFpbnZlcnRlZCAmJiBwYXNzICYmIGN0eCkge1xuICAgICAgICBjdHgucHVzaCgodHlwZW9mIHZhbCA9PSAnb2JqZWN0JykgPyB2YWwgOiBjdHhbY3R4Lmxlbmd0aCAtIDFdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhc3M7XG4gICAgfSxcblxuICAgIC8vIGZpbmQgdmFsdWVzIHdpdGggZG90dGVkIG5hbWVzXG4gICAgZDogZnVuY3Rpb24oa2V5LCBjdHgsIHBhcnRpYWxzLCByZXR1cm5Gb3VuZCkge1xuICAgICAgdmFyIGZvdW5kLFxuICAgICAgICAgIG5hbWVzID0ga2V5LnNwbGl0KCcuJyksXG4gICAgICAgICAgdmFsID0gdGhpcy5mKG5hbWVzWzBdLCBjdHgsIHBhcnRpYWxzLCByZXR1cm5Gb3VuZCksXG4gICAgICAgICAgZG9Nb2RlbEdldCA9IHRoaXMub3B0aW9ucy5tb2RlbEdldCxcbiAgICAgICAgICBjeCA9IG51bGw7XG5cbiAgICAgIGlmIChrZXkgPT09ICcuJyAmJiBpc0FycmF5KGN0eFtjdHgubGVuZ3RoIC0gMl0pKSB7XG4gICAgICAgIHZhbCA9IGN0eFtjdHgubGVuZ3RoIC0gMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZm91bmQgPSBmaW5kSW5TY29wZShuYW1lc1tpXSwgdmFsLCBkb01vZGVsR2V0KTtcbiAgICAgICAgICBpZiAoZm91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3ggPSB2YWw7XG4gICAgICAgICAgICB2YWwgPSBmb3VuZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXR1cm5Gb3VuZCAmJiAhdmFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXR1cm5Gb3VuZCAmJiB0eXBlb2YgdmFsID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY3R4LnB1c2goY3gpO1xuICAgICAgICB2YWwgPSB0aGlzLm12KHZhbCwgY3R4LCBwYXJ0aWFscyk7XG4gICAgICAgIGN0eC5wb3AoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuXG4gICAgLy8gZmluZCB2YWx1ZXMgd2l0aCBub3JtYWwgbmFtZXNcbiAgICBmOiBmdW5jdGlvbihrZXksIGN0eCwgcGFydGlhbHMsIHJldHVybkZvdW5kKSB7XG4gICAgICB2YXIgdmFsID0gZmFsc2UsXG4gICAgICAgICAgdiA9IG51bGwsXG4gICAgICAgICAgZm91bmQgPSBmYWxzZSxcbiAgICAgICAgICBkb01vZGVsR2V0ID0gdGhpcy5vcHRpb25zLm1vZGVsR2V0O1xuXG4gICAgICBmb3IgKHZhciBpID0gY3R4Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHYgPSBjdHhbaV07XG4gICAgICAgIHZhbCA9IGZpbmRJblNjb3BlKGtleSwgdiwgZG9Nb2RlbEdldCk7XG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgIHJldHVybiAocmV0dXJuRm91bmQpID8gZmFsc2UgOiBcIlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJldHVybkZvdW5kICYmIHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWwgPSB0aGlzLm12KHZhbCwgY3R4LCBwYXJ0aWFscyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIC8vIGhpZ2hlciBvcmRlciB0ZW1wbGF0ZXNcbiAgICBsczogZnVuY3Rpb24oZnVuYywgY3gsIHBhcnRpYWxzLCB0ZXh0LCB0YWdzKSB7XG4gICAgICB2YXIgb2xkVGFncyA9IHRoaXMub3B0aW9ucy5kZWxpbWl0ZXJzO1xuXG4gICAgICB0aGlzLm9wdGlvbnMuZGVsaW1pdGVycyA9IHRhZ3M7XG4gICAgICB0aGlzLmIodGhpcy5jdChjb2VyY2VUb1N0cmluZyhmdW5jLmNhbGwoY3gsIHRleHQpKSwgY3gsIHBhcnRpYWxzKSk7XG4gICAgICB0aGlzLm9wdGlvbnMuZGVsaW1pdGVycyA9IG9sZFRhZ3M7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgLy8gY29tcGlsZSB0ZXh0XG4gICAgY3Q6IGZ1bmN0aW9uKHRleHQsIGN4LCBwYXJ0aWFscykge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kaXNhYmxlTGFtYmRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTGFtYmRhIGZlYXR1cmVzIGRpc2FibGVkLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYy5jb21waWxlKHRleHQsIHRoaXMub3B0aW9ucykucmVuZGVyKGN4LCBwYXJ0aWFscyk7XG4gICAgfSxcblxuICAgIC8vIHRlbXBsYXRlIHJlc3VsdCBidWZmZXJpbmdcbiAgICBiOiBmdW5jdGlvbihzKSB7IHRoaXMuYnVmICs9IHM7IH0sXG5cbiAgICBmbDogZnVuY3Rpb24oKSB7IHZhciByID0gdGhpcy5idWY7IHRoaXMuYnVmID0gJyc7IHJldHVybiByOyB9LFxuXG4gICAgLy8gbWV0aG9kIHJlcGxhY2Ugc2VjdGlvblxuICAgIG1zOiBmdW5jdGlvbihmdW5jLCBjdHgsIHBhcnRpYWxzLCBpbnZlcnRlZCwgc3RhcnQsIGVuZCwgdGFncykge1xuICAgICAgdmFyIHRleHRTb3VyY2UsXG4gICAgICAgICAgY3ggPSBjdHhbY3R4Lmxlbmd0aCAtIDFdLFxuICAgICAgICAgIHJlc3VsdCA9IGZ1bmMuY2FsbChjeCk7XG5cbiAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGludmVydGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dFNvdXJjZSA9ICh0aGlzLmFjdGl2ZVN1YiAmJiB0aGlzLnN1YnNUZXh0ICYmIHRoaXMuc3Vic1RleHRbdGhpcy5hY3RpdmVTdWJdKSA/IHRoaXMuc3Vic1RleHRbdGhpcy5hY3RpdmVTdWJdIDogdGhpcy50ZXh0O1xuICAgICAgICAgIHJldHVybiB0aGlzLmxzKHJlc3VsdCwgY3gsIHBhcnRpYWxzLCB0ZXh0U291cmNlLnN1YnN0cmluZyhzdGFydCwgZW5kKSwgdGFncyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgLy8gbWV0aG9kIHJlcGxhY2UgdmFyaWFibGVcbiAgICBtdjogZnVuY3Rpb24oZnVuYywgY3R4LCBwYXJ0aWFscykge1xuICAgICAgdmFyIGN4ID0gY3R4W2N0eC5sZW5ndGggLSAxXTtcbiAgICAgIHZhciByZXN1bHQgPSBmdW5jLmNhbGwoY3gpO1xuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN0KGNvZXJjZVRvU3RyaW5nKHJlc3VsdC5jYWxsKGN4KSksIGN4LCBwYXJ0aWFscyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIHN1YjogZnVuY3Rpb24obmFtZSwgY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkge1xuICAgICAgdmFyIGYgPSB0aGlzLnN1YnNbbmFtZV07XG4gICAgICBpZiAoZikge1xuICAgICAgICB0aGlzLmFjdGl2ZVN1YiA9IG5hbWU7XG4gICAgICAgIGYoY29udGV4dCwgcGFydGlhbHMsIHRoaXMsIGluZGVudCk7XG4gICAgICAgIHRoaXMuYWN0aXZlU3ViID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gIH07XG5cbiAgLy9GaW5kIGEga2V5IGluIGFuIG9iamVjdFxuICBmdW5jdGlvbiBmaW5kSW5TY29wZShrZXksIHNjb3BlLCBkb01vZGVsR2V0KSB7XG4gICAgdmFyIHZhbDtcblxuICAgIGlmIChzY29wZSAmJiB0eXBlb2Ygc2NvcGUgPT0gJ29iamVjdCcpIHtcblxuICAgICAgaWYgKHNjb3BlW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWwgPSBzY29wZVtrZXldO1xuXG4gICAgICAvLyB0cnkgbG9va3VwIHdpdGggZ2V0IGZvciBiYWNrYm9uZSBvciBzaW1pbGFyIG1vZGVsIGRhdGFcbiAgICAgIH0gZWxzZSBpZiAoZG9Nb2RlbEdldCAmJiBzY29wZS5nZXQgJiYgdHlwZW9mIHNjb3BlLmdldCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhbCA9IHNjb3BlLmdldChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTcGVjaWFsaXplZFBhcnRpYWwoaW5zdGFuY2UsIHN1YnMsIHBhcnRpYWxzLCBzdGFja1N1YnMsIHN0YWNrUGFydGlhbHMsIHN0YWNrVGV4dCkge1xuICAgIGZ1bmN0aW9uIFBhcnRpYWxUZW1wbGF0ZSgpIHt9O1xuICAgIFBhcnRpYWxUZW1wbGF0ZS5wcm90b3R5cGUgPSBpbnN0YW5jZTtcbiAgICBmdW5jdGlvbiBTdWJzdGl0dXRpb25zKCkge307XG4gICAgU3Vic3RpdHV0aW9ucy5wcm90b3R5cGUgPSBpbnN0YW5jZS5zdWJzO1xuICAgIHZhciBrZXk7XG4gICAgdmFyIHBhcnRpYWwgPSBuZXcgUGFydGlhbFRlbXBsYXRlKCk7XG4gICAgcGFydGlhbC5zdWJzID0gbmV3IFN1YnN0aXR1dGlvbnMoKTtcbiAgICBwYXJ0aWFsLnN1YnNUZXh0ID0ge307ICAvL2hlaGUuIHN1YnN0ZXh0LlxuICAgIHBhcnRpYWwuYnVmID0gJyc7XG5cbiAgICBzdGFja1N1YnMgPSBzdGFja1N1YnMgfHwge307XG4gICAgcGFydGlhbC5zdGFja1N1YnMgPSBzdGFja1N1YnM7XG4gICAgcGFydGlhbC5zdWJzVGV4dCA9IHN0YWNrVGV4dDtcbiAgICBmb3IgKGtleSBpbiBzdWJzKSB7XG4gICAgICBpZiAoIXN0YWNrU3Vic1trZXldKSBzdGFja1N1YnNba2V5XSA9IHN1YnNba2V5XTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gc3RhY2tTdWJzKSB7XG4gICAgICBwYXJ0aWFsLnN1YnNba2V5XSA9IHN0YWNrU3Vic1trZXldO1xuICAgIH1cblxuICAgIHN0YWNrUGFydGlhbHMgPSBzdGFja1BhcnRpYWxzIHx8IHt9O1xuICAgIHBhcnRpYWwuc3RhY2tQYXJ0aWFscyA9IHN0YWNrUGFydGlhbHM7XG4gICAgZm9yIChrZXkgaW4gcGFydGlhbHMpIHtcbiAgICAgIGlmICghc3RhY2tQYXJ0aWFsc1trZXldKSBzdGFja1BhcnRpYWxzW2tleV0gPSBwYXJ0aWFsc1trZXldO1xuICAgIH1cbiAgICBmb3IgKGtleSBpbiBzdGFja1BhcnRpYWxzKSB7XG4gICAgICBwYXJ0aWFsLnBhcnRpYWxzW2tleV0gPSBzdGFja1BhcnRpYWxzW2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRpYWw7XG4gIH1cblxuICB2YXIgckFtcCA9IC8mL2csXG4gICAgICByTHQgPSAvPC9nLFxuICAgICAgckd0ID0gLz4vZyxcbiAgICAgIHJBcG9zID0gL1xcJy9nLFxuICAgICAgclF1b3QgPSAvXFxcIi9nLFxuICAgICAgaENoYXJzID0gL1smPD5cXFwiXFwnXS87XG5cbiAgZnVuY3Rpb24gY29lcmNlVG9TdHJpbmcodmFsKSB7XG4gICAgcmV0dXJuIFN0cmluZygodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSA/ICcnIDogdmFsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhvZ2FuRXNjYXBlKHN0cikge1xuICAgIHN0ciA9IGNvZXJjZVRvU3RyaW5nKHN0cik7XG4gICAgcmV0dXJuIGhDaGFycy50ZXN0KHN0cikgP1xuICAgICAgc3RyXG4gICAgICAgIC5yZXBsYWNlKHJBbXAsICcmYW1wOycpXG4gICAgICAgIC5yZXBsYWNlKHJMdCwgJyZsdDsnKVxuICAgICAgICAucmVwbGFjZShyR3QsICcmZ3Q7JylcbiAgICAgICAgLnJlcGxhY2UockFwb3MsICcmIzM5OycpXG4gICAgICAgIC5yZXBsYWNlKHJRdW90LCAnJnF1b3Q7JykgOlxuICAgICAgc3RyO1xuICB9XG5cbiAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpID09PSAnW29iamVjdCBBcnJheV0nO1xuICB9O1xuXG59KSh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcgPyBleHBvcnRzIDogSG9nYW4pO1xuIiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGlcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGlkPVxcXCJhcHBlYXJhbmNlLWl0ZW0tXCIpO3QuYih0LnYodC5mKFwiaXRlbWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbSBncm91cC1cIik7dC5iKHQudih0LmYoXCJncm91cFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtaXRlbWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpdGVtaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLW5hbWU9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLXJhcml0eT1cXFwiXCIpO3QuYih0LnYodC5mKFwicmFyaXR5XCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1yYXJpdHluYW1lPVxcXCJcIik7dC5iKHQudih0LmYoXCJyYXJpdHluYW1lXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxkaXYgY2xhc3M9XFxcInJhcml0eS1tYXJrZXItXCIpO3QuYih0LnYodC5mKFwicmFyaXR5XCIsYyxwLDApKSk7dC5iKFwiXFxcIj48L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxpbWcgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pY29uXFxcIiBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9saT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8bGlcXG4gIGlkPVxcXCJhcHBlYXJhbmNlLWl0ZW0te3tpdGVtaWR9fVxcXCJcXG4gIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0gZ3JvdXAte3tncm91cH19XFxcIlxcbiAgZGF0YS1pdGVtaWQ9XFxcInt7aXRlbWlkfX1cXFwiXFxuICBkYXRhLW5hbWU9XFxcInt7bmFtZX19XFxcIlxcbiAgZGF0YS1yYXJpdHk9XFxcInt7cmFyaXR5fX1cXFwiXFxuICBkYXRhLXJhcml0eW5hbWU9XFxcInt7cmFyaXR5bmFtZX19XFxcIlxcbj5cXG4gIDxkaXYgY2xhc3M9XFxcInJhcml0eS1tYXJrZXIte3tyYXJpdHl9fVxcXCI+PC9kaXY+XFxuICA8aW1nIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taWNvblxcXCIgc3JjPVxcXCJ7e2ljb259fVxcXCIgLz5cXG48L2xpPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcImVlLWNhdGVnb3J5XFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnkgYWN0aXZlXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1jYXRlZ29yeT1cXFwiXCIpO3QuYih0LnYodC5mKFwiY2F0ZWdvcnlcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLWNhdGVnb3J5aWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImNhdGVnb3J5aWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHN0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjZWUtaXRlbXMge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHNjcm9sbGJhci1jb2xvcjogZGFyaztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvc3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8dWxcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtbGlzdFxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgaWQ9XFxcImVlLWl0ZW1zXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBzdHlsZT1cXFwibWF4LWhlaWdodDogY2FsYygxMDB2aCAtIDU2NXB4KVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgXCIpO3QuYih0LnQodC5mKFwiaXRlbXNcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC91bD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8IS0tIEluZm8gLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8ZGl2IGlkPVxcXCJlZS1pbmZvXFxcIiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1pbmZvXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pbmZvLXRpcHNcXFwiPjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGgzIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1uYW1lXFxcIj48L2gzPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWluZm8tZ3VhcmRcXFwiPjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1yYXJpdHlcXFwiPjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1idXR0b25zXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWZvcndhcmQgbmwtYnV0dG9uXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmJ1dHRvbnMuZm9yd2FyZFwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1iYWNrd2FyZCBubC1idXR0b25cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFwcGVhcmFuY2UuYnV0dG9ucy5iYWNrd2FyZFwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGRpdlxcbiAgaWQ9XFxcImVlLWNhdGVnb3J5XFxcIlxcbiAgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnkgYWN0aXZlXFxcIlxcbiAgZGF0YS1jYXRlZ29yeT1cXFwie3tjYXRlZ29yeX19XFxcIlxcbiAgZGF0YS1jYXRlZ29yeWlkPVxcXCJ7e2NhdGVnb3J5aWR9fVxcXCJcXG4+XFxuICA8c3R5bGU+XFxuICAgICNlZS1pdGVtcyB7XFxuICAgICAgc2Nyb2xsYmFyLWNvbG9yOiBkYXJrO1xcbiAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcXG4gICAgfVxcbiAgPC9zdHlsZT5cXG4gIDx1bFxcbiAgICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1saXN0XFxcIlxcbiAgICBpZD1cXFwiZWUtaXRlbXNcXFwiXFxuICAgIHN0eWxlPVxcXCJtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNTY1cHgpXFxcIlxcbiAgPlxcbiAgICB7e3tpdGVtc319fVxcbiAgPC91bD5cXG5cXG4gIDwhLS0gSW5mbyAtLT5cXG4gIDxkaXYgaWQ9XFxcImVlLWluZm9cXFwiIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWluZm9cXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWluZm8tdGlwc1xcXCI+PC9kaXY+XFxuXFxuICAgIDxoMyBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWluZm8tbmFtZVxcXCI+PC9oMz5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWluZm8tZ3VhcmRcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1yYXJpdHlcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW0taW5mby1idXR0b25zXFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWZvcndhcmQgbmwtYnV0dG9uXFxcIj5cXG4gICAgICAgIHt7dHJhbnNsYXRlLmFwcGVhcmFuY2UuYnV0dG9ucy5mb3J3YXJkfX1cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWJhY2t3YXJkIG5sLWJ1dHRvblxcXCI+XFxuICAgICAgICB7e3RyYW5zbGF0ZS5hcHBlYXJhbmNlLmJ1dHRvbnMuYmFja3dhcmR9fVxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gIDwvZGl2PlxcbjwvZGl2PlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcImFwcGVhcmFuY2UtaXRlbXMtZ3JvdXAtXCIpO3QuYih0LnYodC5mKFwiZ3JvdXBcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtY2F0ZWdvcnlpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiY2F0ZWdvcnlpZFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGRhdGEtY2F0ZWdvcnk9XFxcIlwiKTt0LmIodC52KHQuZihcImNhdGVnb3J5XCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx1bCBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1saXN0XFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgXCIpO3QuYih0LnQodC5mKFwiaXRlbXNcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC91bD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8ZGl2XFxuICBpZD1cXFwiYXBwZWFyYW5jZS1pdGVtcy1ncm91cC17e2dyb3VwfX1cXFwiXFxuICBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeVxcXCJcXG4gIGRhdGEtY2F0ZWdvcnlpZD1cXFwie3tjYXRlZ29yeWlkfX1cXFwiXFxuICBkYXRhLWNhdGVnb3J5PVxcXCJ7e2NhdGVnb3J5fX1cXFwiXFxuPlxcbiAgPHVsIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWxpc3RcXFwiPlxcbiAgICB7e3tpdGVtc319fVxcbiAgPC91bD5cXG48L2Rpdj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXZcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGlkPVxcXCJtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWluZm8tYXV0b2J1eVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogMjBweCBhdXRvXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxkaXYgY2xhc3M9XFxcIm5sLWJ1dHRvblxcXCI+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QudGl0bGVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8ZGl2XFxuICBpZD1cXFwibWFya2V0cGxhY2UtaXRlbURldGFpbC1pbmZvLWF1dG9idXlcXFwiXFxuICBzdHlsZT1cXFwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW46IDIwcHggYXV0b1xcXCJcXG4+XFxuICA8ZGl2IGNsYXNzPVxcXCJubC1idXR0b25cXFwiPnt7dHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QudGl0bGV9fTwvZGl2PlxcbjwvZGl2PlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGgxPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LnRpdGxlXCIsYyxwLDApKSk7dC5iKFwiPC9oMT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC50ZXh0XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxoMT57e3RyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LnRpdGxlfX08L2gxPlxcbjxwPnt7dHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QudGV4dH19PC9wPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGgxPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYWxsLmFkZF90b193aXNobGlzdC50aXRsZVwiLGMscCwwKSkpO3QuYihcIjwvaDE+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPHA+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hbGwuYWRkX3RvX3dpc2hsaXN0LnRleHRcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPHAgc3R5bGU9XFxcImZvbnQtc2l6ZTogMTRweFxcXCI+PGVtPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYWxsLmFkZF90b193aXNobGlzdC5ub3RlXCIsYyxwLDApKSk7dC5iKFwiPC9lbT48L3A+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGgxPnt7dHJhbnNsYXRlLm1hbGwuYWRkX3RvX3dpc2hsaXN0LnRpdGxlfX08L2gxPlxcbjxwPnt7dHJhbnNsYXRlLm1hbGwuYWRkX3RvX3dpc2hsaXN0LnRleHR9fTwvcD5cXG48cCBzdHlsZT1cXFwiZm9udC1zaXplOiAxNHB4XFxcIj48ZW0+e3t0cmFuc2xhdGUubWFsbC5hZGRfdG9fd2lzaGxpc3Qubm90ZX19PC9lbT48L3A+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YnV0dG9uXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiYXV0by1leHBsb3JlLWJ1dHRvblxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGNsYXNzPVxcXCJubC1idXR0b24gXCIpO2lmKHQucyh0LmYoXCJhY3RpdmVcIixjLHAsMSksYyxwLDAsNjUsNzEsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBkYXRhLWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJsb2NhdGlvbklkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgZGF0YS1tYXBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwicmVnaW9uSWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLnBldC5hdXRvX2V4cGxvcmVcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvYnV0dG9uPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxidXR0b25cXG4gIGlkPVxcXCJhdXRvLWV4cGxvcmUtYnV0dG9uXFxcIlxcbiAgY2xhc3M9XFxcIm5sLWJ1dHRvbiB7eyNhY3RpdmV9fWFjdGl2ZXt7L2FjdGl2ZX19XFxcIlxcbiAgZGF0YS1pZD1cXFwie3tsb2NhdGlvbklkfX1cXFwiXFxuICBkYXRhLW1hcGlkPVxcXCJ7e3JlZ2lvbklkfX1cXFwiXFxuPlxcbiAge3t0cmFuc2xhdGUucGV0LmF1dG9fZXhwbG9yZX19XFxuPC9idXR0b24+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgY2xhc3M9XFxcImNhcm91c2VsLW5ld3MgY2Fyb3VzZWwtZWVcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBocmVmPVxcXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBzdHlsZT1cXFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiKTt0LmIodC52KHQuZihcImJhY2tncm91bmRJbWFnZVwiLGMscCwwKSkpO3QuYihcIilcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGRpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGg0PlwiKTt0LmIodC52KHQuZihcImg0XCIsYyxwLDApKSk7dC5iKFwiPC9oND5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGg1PlwiKTt0LmIodC52KHQuZihcImg1XCIsYyxwLDApKSk7dC5iKFwiPC9oNT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPHA+XCIpO3QuYih0LnYodC5mKFwicFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvYT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8YVxcbiAgaWQ9XFxcInt7aWR9fVxcXCJcXG4gIGNsYXNzPVxcXCJjYXJvdXNlbC1uZXdzIGNhcm91c2VsLWVlXFxcIlxcbiAgaHJlZj1cXFwiXFxcIlxcbiAgc3R5bGU9XFxcImJhY2tncm91bmQtaW1hZ2U6IHVybCh7e2JhY2tncm91bmRJbWFnZX19KVxcXCJcXG4+XFxuICA8ZGl2PlxcbiAgICA8aDQ+e3toNH19PC9oND5cXG4gICAgPGg1Pnt7aDV9fTwvaDU+XFxuICAgIDxwPnt7cH19PC9wPlxcbiAgPC9kaXY+XFxuPC9hPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGgxPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLnRpdGxlXCIsYyxwLDApKSk7dC5iKFwiPC9oMT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS50ZXh0XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxoMT57e3RyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLnRpdGxlfX08L2gxPlxcbjxwPnt7dHJhbnNsYXRlLm1hcmtldC5jaGFuZ2VfcHJpY2UudGV4dH19PC9wPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGgxPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQudGl0bGVcIixjLHAsMCkpKTt0LmIoXCI8L2gxPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudCh0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnNhdmVkX2xvY2FsbHlcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxiciAvPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudCh0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LmdvdG9fYWNjb3VudFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPGlucHV0XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiY2hvb3NlLW5hbWVcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBtYXhsZW5ndGg9XFxcIjMwXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgbWlubGVuZ3RoPVxcXCIxXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgcGxhY2Vob2xkZXI9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQucGxhY2Vob2xkZXJcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiLz5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8aDE+e3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnRpdGxlfX08L2gxPlxcblxcbjxwPnt7e3RyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQuc2F2ZWRfbG9jYWxseX19fTwvcD5cXG5cXG48YnIgLz5cXG5cXG48cD57e3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LmdvdG9fYWNjb3VudH19fTwvcD5cXG5cXG48aW5wdXRcXG4gIGlkPVxcXCJjaG9vc2UtbmFtZVxcXCJcXG4gIG1heGxlbmd0aD1cXFwiMzBcXFwiXFxuICBtaW5sZW5ndGg9XFxcIjFcXFwiXFxuICBwbGFjZWhvbGRlcj1cXFwie3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnBsYWNlaG9sZGVyfX1cXFwiXFxuLz5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXYgaWQ9XFxcImhpc3RvcnktY29udGFpbmVyXFxcIiBzdHlsZT1cXFwid2lkdGg6IDEwMCVcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHN0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAuaGlzdG9yeS1hY3Rpb25zIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBtYXJnaW4tYm90dG9tOiAxZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNkZWxldGUtaGlzdG9yeSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbWFyZ2luLXJpZ2h0OiAxZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5oZWxwLWljb24ge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMwMjkxZjY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29sb3I6ICNmZmY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1zaXplOiAyNnB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodDogMjNweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBsaW5lLWhlaWdodDogMjBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwYWRkaW5nOiAwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogMjNweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLmhpc3RvcnktbWVzc2FnZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBtYXJnaW46IDFlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwYWRkaW5nOiAxZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5oaXN0b3J5LXJvdyB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZGlzcGxheTogZmxleDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmbGV4LXdyYXA6IHdyYXA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiA0NjVweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBvdmVyZmxvdy15OiBhdXRvO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHNjcm9sbGJhci1jb2xvcjogZGFyaztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5yZXN1bHQtY2FyZCB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJveC1zaGFkb3c6IDAgMCA1cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4zKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBoZWlnaHQ6IDIwNXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG1hcmdpbjogMC41ZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgcGFkZGluZzogMC41ZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAxMjhweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLnJlc3VsdC1pbWFnZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJveC1zaGFkb3c6IDAgMCA0cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgMCAycHggNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0b3A6IC0wLjhlbTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLnJlc3VsdC1jb250ZW50LWNvbHVtbiB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZGlzcGxheTogZmxleDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodDogMTAzcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAucmVzdWx0LW5hbWUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgLXdlYmtpdC1saW5lLWNsYW1wOiAzO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNvbG9yOiByZ2IoNTIsIDU2LCAxMTEpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZsZXgtZ3JvdzogMTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXNpemU6IDE2cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbWFyZ2luLXRvcDogLTAuMmVtO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG92ZXJmbG93OiBoaWRkZW47XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5yZXN1bHQtbG9jYXRpb24ge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAucmVzdWx0LWRhdGUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNvbG9yOiAjZmI4OTAwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtc2l6ZTogMTNweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXdlaWdodDogYm9sZDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLnJlc3VsdC1pY29ucyB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbWFyZ2luLXRvcDogMC41ZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC5yZXN1bHQtY291bnQge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMDBjZGZiO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29sb3I6ICMzZWMwZDc7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtZmFtaWx5OiBcXFwiQWxlZ3JleWEgU2FucyBTQ1xcXCIsIHNhbnMtc2VyaWY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1zaXplOiAxOHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiAyOXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGxpbmUtaGVpZ2h0OiAyN3B4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogMjlweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLmhpc3RvcnktdHJhZGFibGUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM2NjY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm9yZGVyLXJhZGl1czogMjVweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXI6IDFweCBzb2xpZCAjYjliOWI5O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNvbG9yOiAjZmZmZmZmO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LWZhbWlseTogXFxcIlRlbXAgTWVudVxcXCIsIHNlcmlmO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtc2l6ZTogMTNweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBoZWlnaHQ6IDE1cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbGluZS1oZWlnaHQ6IDE1cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAxNXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAuaWNvbi1zcGFjZXIge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogMC4xZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvc3R5bGU+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGRpdiBjbGFzcz1cXFwiaGlzdG9yeS1hY3Rpb25zXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGJ1dHRvbiBpZD1cXFwiZGVsZXRlLWhpc3RvcnlcXFwiIGNsYXNzPVxcXCJubC1idXR0b25cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5wZXQuZGVsZXRlX2hpc3RvcnlcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2J1dHRvbj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxzcGFuIGNsYXNzPVxcXCJ0b29sdGlwXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8c3BhbiBjbGFzcz1cXFwibmwtYnV0dG9uIGhlbHAtaWNvblxcXCI+Pzwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJ0b29sdGlwLWNvbnRlbnRcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPHA+XCIpO3QuYih0LnQodC5kKFwidHJhbnNsYXRlLnBldC5zYXZlZF9sb2NhbGx5XCIsYyxwLDApKSk7dC5iKFwiPC9wPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPHA+XCIpO3QuYih0LnQodC5kKFwidHJhbnNsYXRlLnBldC5nb3RvX2FjY291bnRcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTtpZighdC5zKHQuZihcImhpc3RvcnlcIixjLHAsMSksYyxwLDEsMCwwLFwiXCIpKXt0LmIoXCIgIDxwIGNsYXNzPVxcXCJoaXN0b3J5LW1lc3NhZ2VcXFwiPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5wZXQuZW1wdHlfaGlzdG9yeVwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIgKyBpKTt9O3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8ZGl2IGNsYXNzPVxcXCJoaXN0b3J5LXJvd1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7aWYodC5zKHQuZihcImhpc3RvcnlcIixjLHAsMSksYyxwLDAsMzE4OSwzODIyLFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LWNhcmRcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxpbWcgY2xhc3M9XFxcInJlc3VsdC1pbWFnZVxcXCIgc3JjPVxcXCJcIik7dC5iKHQudih0LmYoXCJpY29uXCIsYyxwLDApKSk7dC5iKFwiXFxcIiAvPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtY29udGVudC1jb2x1bW5cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LW5hbWVcXFwiPlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1sb2NhdGlvblxcXCI+XCIpO3QuYih0LnYodC5mKFwibG9jYXRpb25OYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtZGF0ZVxcXCI+XCIpO3QuYih0LnYodC5mKFwiZGF0ZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1pY29uc1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIFwiKTtpZih0LnModC5mKFwiY291bnRcIixjLHAsMSksYyxwLDAsMzUyNSwzNTY4LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCI8c3BhbiBjbGFzcz1cXFwicmVzdWx0LWNvdW50XFxcIj5cIik7dC5iKHQudih0LmYoXCJjb3VudFwiLGMscCwwKSkpO3QuYihcIjwvc3Bhbj5cIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxuXCIgKyBpKTtpZih0LnModC5mKFwiY291bnRcIixjLHAsMSksYyxwLDAsMzU5OSwzNjc4LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXtpZih0LnModC5mKFwidHJhZGFibGVcIixjLHAsMSksYyxwLDAsMzYxMiwzNjY1LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaWNvbi1zcGFjZXJcXFwiPjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBcIik7fSk7Yy5wb3AoKTt9fSk7Yy5wb3AoKTt9dC5iKFwiIFwiKTtpZih0LnModC5mKFwidHJhZGFibGVcIixjLHAsMSksYyxwLDAsMzcwMiwzNzY1LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCI8c3BhbiBjbGFzcz1cXFwiaGlzdG9yeS10cmFkYWJsZVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA+7qCCPC9zcGFuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgID5cIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxkaXYgaWQ9XFxcImhpc3RvcnktY29udGFpbmVyXFxcIiBzdHlsZT1cXFwid2lkdGg6IDEwMCVcXFwiPlxcbiAgPHN0eWxlPlxcbiAgICAuaGlzdG9yeS1hY3Rpb25zIHtcXG4gICAgICBtYXJnaW4tYm90dG9tOiAxZW07XFxuICAgIH1cXG5cXG4gICAgI2RlbGV0ZS1oaXN0b3J5IHtcXG4gICAgICBtYXJnaW4tcmlnaHQ6IDFlbTtcXG4gICAgfVxcblxcbiAgICAuaGVscC1pY29uIHtcXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDI5MWY2O1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gICAgICBib3gtc2hhZG93OiBub25lO1xcbiAgICAgIGNvbG9yOiAjZmZmO1xcbiAgICAgIGZvbnQtc2l6ZTogMjZweDtcXG4gICAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgICBoZWlnaHQ6IDIzcHg7XFxuICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XFxuICAgICAgcGFkZGluZzogMDtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgd2lkdGg6IDIzcHg7XFxuICAgIH1cXG5cXG4gICAgLmhpc3RvcnktbWVzc2FnZSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcXG4gICAgICBtYXJnaW46IDFlbTtcXG4gICAgICBwYWRkaW5nOiAxZW07XFxuICAgIH1cXG5cXG4gICAgLmhpc3Rvcnktcm93IHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcXG4gICAgICBoZWlnaHQ6IDQ2NXB4O1xcbiAgICAgIG1hcmdpbi1yaWdodDogMWVtO1xcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XFxuICAgICAgc2Nyb2xsYmFyLWNvbG9yOiBkYXJrO1xcbiAgICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjtcXG4gICAgfVxcblxcbiAgICAucmVzdWx0LWNhcmQge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcXG4gICAgICBib3gtc2hhZG93OiAwIDAgNXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XFxuICAgICAgaGVpZ2h0OiAyMDVweDtcXG4gICAgICBtYXJnaW46IDAuNWVtO1xcbiAgICAgIHBhZGRpbmc6IDAuNWVtO1xcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgICB3aWR0aDogMTI4cHg7XFxuICAgIH1cXG5cXG4gICAgLnJlc3VsdC1pbWFnZSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xcbiAgICAgIGJveC1zaGFkb3c6IDAgMCA0cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLFxcbiAgICAgICAgMCAycHggNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDgpO1xcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgICB0b3A6IC0wLjhlbTtcXG4gICAgfVxcblxcbiAgICAucmVzdWx0LWNvbnRlbnQtY29sdW1uIHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgICAgaGVpZ2h0OiAxMDNweDtcXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIH1cXG5cXG4gICAgLnJlc3VsdC1uYW1lIHtcXG4gICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xcbiAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMztcXG4gICAgICBjb2xvcjogcmdiKDUyLCA1NiwgMTExKTtcXG4gICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gICAgICBmbGV4LWdyb3c6IDE7XFxuICAgICAgZm9udC1zaXplOiAxNnB4O1xcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICAgIG1hcmdpbi10b3A6IC0wLjJlbTtcXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICB9XFxuXFxuICAgIC5yZXN1bHQtbG9jYXRpb24ge1xcbiAgICB9XFxuXFxuICAgIC5yZXN1bHQtZGF0ZSB7XFxuICAgICAgY29sb3I6ICNmYjg5MDA7XFxuICAgICAgZm9udC1zaXplOiAxM3B4O1xcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICB9XFxuXFxuICAgIC5yZXN1bHQtaWNvbnMge1xcbiAgICAgIG1hcmdpbi10b3A6IDAuNWVtO1xcbiAgICB9XFxuXFxuICAgIC5yZXN1bHQtY291bnQge1xcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjMDBjZGZiO1xcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgY29sb3I6ICMzZWMwZDc7XFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgIGZvbnQtZmFtaWx5OiBcXFwiQWxlZ3JleWEgU2FucyBTQ1xcXCIsIHNhbnMtc2VyaWY7XFxuICAgICAgZm9udC1zaXplOiAxOHB4O1xcbiAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XFxuICAgICAgaGVpZ2h0OiAyOXB4O1xcbiAgICAgIGxpbmUtaGVpZ2h0OiAyN3B4O1xcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICB3aWR0aDogMjlweDtcXG4gICAgfVxcblxcbiAgICAuaGlzdG9yeS10cmFkYWJsZSB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzY2NjtcXG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiOWI5Yjk7XFxuICAgICAgY29sb3I6ICNmZmZmZmY7XFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICAgIGZvbnQtZmFtaWx5OiBcXFwiVGVtcCBNZW51XFxcIiwgc2VyaWY7XFxuICAgICAgZm9udC1zaXplOiAxM3B4O1xcbiAgICAgIGhlaWdodDogMTVweDtcXG4gICAgICBsaW5lLWhlaWdodDogMTVweDtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgd2lkdGg6IDE1cHg7XFxuICAgIH1cXG5cXG4gICAgLmljb24tc3BhY2VyIHtcXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICAgICAgd2lkdGg6IDAuMWVtO1xcbiAgICB9XFxuICA8L3N0eWxlPlxcblxcbiAgPGRpdiBjbGFzcz1cXFwiaGlzdG9yeS1hY3Rpb25zXFxcIj5cXG4gICAgPGJ1dHRvbiBpZD1cXFwiZGVsZXRlLWhpc3RvcnlcXFwiIGNsYXNzPVxcXCJubC1idXR0b25cXFwiPlxcbiAgICAgIHt7dHJhbnNsYXRlLnBldC5kZWxldGVfaGlzdG9yeX19XFxuICAgIDwvYnV0dG9uPlxcblxcbiAgICA8c3BhbiBjbGFzcz1cXFwidG9vbHRpcFxcXCI+XFxuICAgICAgPHNwYW4gY2xhc3M9XFxcIm5sLWJ1dHRvbiBoZWxwLWljb25cXFwiPj88L3NwYW4+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwidG9vbHRpcC1jb250ZW50XFxcIj5cXG4gICAgICAgIDxwPnt7e3RyYW5zbGF0ZS5wZXQuc2F2ZWRfbG9jYWxseX19fTwvcD5cXG4gICAgICAgIDxwPnt7e3RyYW5zbGF0ZS5wZXQuZ290b19hY2NvdW50fX19PC9wPlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L3NwYW4+XFxuICA8L2Rpdj5cXG5cXG4gIHt7Xmhpc3Rvcnl9fVxcbiAgPHAgY2xhc3M9XFxcImhpc3RvcnktbWVzc2FnZVxcXCI+e3t0cmFuc2xhdGUucGV0LmVtcHR5X2hpc3Rvcnl9fTwvcD5cXG4gIHt7L2hpc3Rvcnl9fVxcblxcbiAgPGRpdiBjbGFzcz1cXFwiaGlzdG9yeS1yb3dcXFwiPlxcbiAgICB7eyNoaXN0b3J5fX1cXG4gICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LWNhcmRcXFwiPlxcbiAgICAgIDxpbWcgY2xhc3M9XFxcInJlc3VsdC1pbWFnZVxcXCIgc3JjPVxcXCJ7e2ljb259fVxcXCIgLz5cXG5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtY29udGVudC1jb2x1bW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LW5hbWVcXFwiPnt7bmFtZX19PC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyZXN1bHQtbG9jYXRpb25cXFwiPnt7bG9jYXRpb25OYW1lfX08L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInJlc3VsdC1kYXRlXFxcIj57e2RhdGV9fTwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwicmVzdWx0LWljb25zXFxcIj5cXG4gICAgICAgICAge3sjY291bnR9fTxzcGFuIGNsYXNzPVxcXCJyZXN1bHQtY291bnRcXFwiPnt7Y291bnR9fTwvc3Bhbj57ey9jb3VudH19XFxuICAgICAgICAgIHt7I2NvdW50fX17eyN0cmFkYWJsZX19XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImljb24tc3BhY2VyXFxcIj48L2Rpdj5cXG4gICAgICAgICAge3svdHJhZGFibGV9fXt7L2NvdW50fX0ge3sjdHJhZGFibGV9fTxzcGFuIGNsYXNzPVxcXCJoaXN0b3J5LXRyYWRhYmxlXFxcIlxcbiAgICAgICAgICAgID7uoII8L3NwYW5cXG4gICAgICAgICAgPnt7L3RyYWRhYmxlfX1cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAge3svaGlzdG9yeX19XFxuICA8L2Rpdj5cXG48L2Rpdj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxzdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5jcmVhdGVkLW91dGZpdC1wb3B1cCAuZmxhdnItb3V0ZXIgLmZsYXZyLW1lc3NhZ2U6OmFmdGVyIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiKTt0LmIodC52KHQuZihcInVybFwiLGMscCwwKSkpO3QuYihcIik7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8aDE+XCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIjwvaDE+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxwPlwiKTt0LmIodC50KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LnNhdmVkX2xvY2FsbHlcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxiciAvPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8cD5cIik7dC5iKHQudCh0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmNsaWNrX291dGZpdC5nb3RvX2FjY291bnRcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPHN0eWxlPlxcbiAgLmNyZWF0ZWQtb3V0Zml0LXBvcHVwIC5mbGF2ci1vdXRlciAuZmxhdnItbWVzc2FnZTo6YWZ0ZXIge1xcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoe3t1cmx9fSk7XFxuICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcXG4gIH1cXG48L3N0eWxlPlxcblxcbjxoMT57e25hbWV9fTwvaDE+XFxuXFxuPHA+e3t7dHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5jbGlja19vdXRmaXQuc2F2ZWRfbG9jYWxseX19fTwvcD5cXG5cXG48YnIgLz5cXG5cXG48cD57e3t0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmNsaWNrX291dGZpdC5nb3RvX2FjY291bnR9fX08L3A+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YnV0dG9uIGlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBmYXZvcml0ZXMtYWN0aW9uLWVlXFxcIj5cIik7dC5iKHQudih0LmYoXCJ0ZXh0XCIsYyxwLDApKSk7dC5iKFwiPC9idXR0b24+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGJ1dHRvbiBpZD1cXFwie3tpZH19XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIGZhdm9yaXRlcy1hY3Rpb24tZWVcXFwiPnt7dGV4dH19PC9idXR0b24+XFxuXCIsIEgpO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aW1nXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBoZWlnaHQ9XFxcIjIxXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgc3R5bGU9XFxcImRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAtMnB4IGF1dG9cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIodC50KHQuZihcIm1lc3NhZ2VcIixjLHAsMCkpKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxpbWdcXG4gIHNyYz1cXFwie3tpY29ufX1cXFwiXFxuICBhbHQ9XFxcInt7bmFtZX19XFxcIlxcbiAgaGVpZ2h0PVxcXCIyMVxcXCJcXG4gIHN0eWxlPVxcXCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbjogLTJweCBhdXRvXFxcIlxcbi8+XFxue3t7bWVzc2FnZX19fVxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGxpXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpZD1cXFwiaGVhZGVyLXRha2VvdmVyXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5ob21lLnRha2VvdmVyXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgc3R5bGU9XFxcInRyYW5zaXRpb246IHRyYW5zZm9ybSBlYXNlLWluLW91dCAyMDBtczsgY3Vyc29yOiBwb2ludGVyXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgb25Nb3VzZU92ZXI9XFxcInRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxLjMpJ1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIG9uTW91c2VPdXQ9XFxcInRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSdcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGE+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxpbWdcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzcmM9XFxcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvaG9tZS9jb25uZWN0ZWQvbG9jay5wbmdcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYWx0PVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuaG9tZS50YWtlb3ZlclwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzdHlsZT1cXFwiZmlsdGVyOiBjb250cmFzdCgwJSkgYnJpZ2h0bmVzcygyMDAlKSBcIik7aWYoIXQucyh0LmYoXCJ0YWtlb3ZlclwiLGMscCwxKSxjLHAsMSwwLDAsXCJcIikpe3QuYihcIm9wYWNpdHkoMClcIik7fTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0PVxcXCIyMVxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvYT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2xpPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxsaVxcbiAgaWQ9XFxcImhlYWRlci10YWtlb3ZlclxcXCJcXG4gIHRpdGxlPVxcXCJ7e3RyYW5zbGF0ZS5ob21lLnRha2VvdmVyfX1cXFwiXFxuICBzdHlsZT1cXFwidHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UtaW4tb3V0IDIwMG1zOyBjdXJzb3I6IHBvaW50ZXJcXFwiXFxuICBvbk1vdXNlT3Zlcj1cXFwidGhpcy5zdHlsZS50cmFuc2Zvcm09J3NjYWxlKDEuMyknXFxcIlxcbiAgb25Nb3VzZU91dD1cXFwidGhpcy5zdHlsZS50cmFuc2Zvcm09J3NjYWxlKDEpJ1xcXCJcXG4+XFxuICA8YT5cXG4gICAgPGltZ1xcbiAgICAgIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC9ob21lL2Nvbm5lY3RlZC9sb2NrLnBuZ1xcXCJcXG4gICAgICBhbHQ9XFxcInt7dHJhbnNsYXRlLmhvbWUudGFrZW92ZXJ9fVxcXCJcXG4gICAgICBzdHlsZT1cXFwiZmlsdGVyOiBjb250cmFzdCgwJSkgYnJpZ2h0bmVzcygyMDAlKSB7e150YWtlb3Zlcn19b3BhY2l0eSgwKXt7L3Rha2VvdmVyfX1cXFwiXFxuICAgICAgaGVpZ2h0PVxcXCIyMVxcXCJcXG4gICAgLz5cXG4gIDwvYT5cXG48L2xpPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGFcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGlkPVxcXCJob21lLVwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgY2xhc3M9XFxcImhvbWUtY29udGVudC10aWxlIGhvbWUtY29udGVudC1zbWFsbCBob21lLWNvbnRlbnQtc21hbGwtZWVcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBocmVmPVxcXCJcIik7dC5iKHQudih0LmYoXCJocmVmXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgc3R5bGU9XFxcImJhY2tncm91bmQtaW1hZ2U6IHVybChcIik7dC5iKHQudih0LmYoXCJiYWNrZ3JvdW5kSW1hZ2VcIixjLHAsMCkpKTt0LmIoXCIpO1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8aDQ+XCIpO3QuYih0LnYodC5mKFwiaDRcIixjLHAsMCkpKTt0LmIoXCI8L2g0PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvYT5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8YVxcbiAgaWQ9XFxcImhvbWUte3tpZH19XFxcIlxcbiAgY2xhc3M9XFxcImhvbWUtY29udGVudC10aWxlIGhvbWUtY29udGVudC1zbWFsbCBob21lLWNvbnRlbnQtc21hbGwtZWVcXFwiXFxuICBocmVmPVxcXCJ7e2hyZWZ9fVxcXCJcXG4gIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoe3tiYWNrZ3JvdW5kSW1hZ2V9fSk7XFxcIlxcbj5cXG4gIDxoND57e2g0fX08L2g0PlxcbjwvYT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxsaSBjbGFzcz1cXFwibWFpbi1tZW51LVwiKTt0LmIodC52KHQuZihcImNsYXNzXCIsYyxwLDApKSk7dC5iKFwiIG1haW4tbWVudS1lZVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8YSBocmVmPVxcXCJcIik7dC5iKHQudih0LmYoXCJocmVmXCIsYyxwLDApKSk7dC5iKFwiXFxcIj5cIik7dC5iKHQudih0LmYoXCJ0ZXh0XCIsYyxwLDApKSk7dC5iKFwiPC9hPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvbGk+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGxpIGNsYXNzPVxcXCJtYWluLW1lbnUte3tjbGFzc319IG1haW4tbWVudS1lZVxcXCI+XFxuICA8YSBocmVmPVxcXCJ7e2hyZWZ9fVxcXCI+e3t0ZXh0fX08L2E+XFxuPC9saT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxsaSBjbGFzcz1cXFwibWFpbi1tZW51LXB1cnJvc2hvcFxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8YSBocmVmPVxcXCIvbWFsbC9wdXJyb3Nob3BcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8aW1nXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0PVxcXCIyMFxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzcmM9XFxcIi9hc3NldHMvaW1nL2l0ZW0vY29uc3VtYWJsZS9iNjQ3ZDU0YWZkNmIwNDM1M2UxMjkyMTk4MTA1MTJmNS5wbmdcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgc3R5bGU9XFxcInZlcnRpY2FsLWFsaWduOiBtaWRkbGVcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIFB1cnJvJ1Nob3BcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvYT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2xpPlwiKTt0LmIoXCJcXG5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19LCBcIjxsaSBjbGFzcz1cXFwibWFpbi1tZW51LXB1cnJvc2hvcFxcXCI+XFxuICA8YSBocmVmPVxcXCIvbWFsbC9wdXJyb3Nob3BcXFwiPlxcbiAgICA8aW1nXFxuICAgICAgaGVpZ2h0PVxcXCIyMFxcXCJcXG4gICAgICBzcmM9XFxcIi9hc3NldHMvaW1nL2l0ZW0vY29uc3VtYWJsZS9iNjQ3ZDU0YWZkNmIwNDM1M2UxMjkyMTk4MTA1MTJmNS5wbmdcXFwiXFxuICAgICAgc3R5bGU9XFxcInZlcnRpY2FsLWFsaWduOiBtaWRkbGVcXFwiXFxuICAgIC8+XFxuICAgIFB1cnJvJ1Nob3BcXG4gIDwvYT5cXG48L2xpPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPHN0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLyogI21hcmtldHBsYWNlLWFic3RyYWN0LXB1cmNoYXNlcyBhbmQgI21hcmtldHBsYWNlLWFic3RyYWN0LXNhbGVzIHdlcmVcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIHJlLXdyaXR0ZW4gdG8gdGFyZ2V0ICNwdXJjaGFzZS1oaXN0b3J5IGFuZCAjc2FsZS1oaXN0b3J5LiAqL1wiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNwdXJjaGFzZS1oaXN0b3J5LFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3NhbGUtaGlzdG9yeSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogNjAwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDM2MHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3NhbGUtaGlzdG9yeSAuYWJzdHJhY3QtYWN0aW9ucyxcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNwdXJjaGFzZS1oaXN0b3J5IC5hYnN0cmFjdC1hY3Rpb25zIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgcG9zaXRpb246IHJlbGF0aXZlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB0b3A6IC00MHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBkaXNwbGF5OiBmbGV4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgaGVpZ2h0OiA4MHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNzYWxlLWhpc3RvcnkgLmFic3RyYWN0LXRpbWUsXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjcHVyY2hhc2UtaGlzdG9yeSAuYWJzdHJhY3QtdGltZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHBvc2l0aW9uOiBzdGF0aWM7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGRpc3BsYXk6IGlubGluZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgaGVpZ2h0OiBhdXRvO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBjb2xvcjogI2ZiODkwMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGZvbnQtc2l6ZTogMTNweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjcHVyY2hhc2UtaGlzdG9yeSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIG1hcmdpbi1yaWdodDogODBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjcHVyY2hhc2UtaGlzdG9yeTpiZWZvcmUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBjb250ZW50OiBcXFwiXFxcIjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgcG9zaXRpb246IGFic29sdXRlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB0b3A6IDEyMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICByaWdodDogLTQycHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGJvcmRlci1yaWdodDogc29saWQgMnB4ICNhYWE7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogMzIwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLyogQ3VzdG9tIGZpeGVzIHRvIHRoZSBsYXlvdXQgKi9cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjcHVyY2hhc2UtaGlzdG9yeSBsaSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIG1hcmdpbi1sZWZ0OiA0cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIG1hcmdpbi1yaWdodDogNHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvc3R5bGU+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwhLS0gUHVyY2hhc2VzIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjxkaXYgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBpZD1cXFwicHVyY2hhc2UtaGlzdG9yeVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8aDIgY2xhc3M9XFxcInNlY3Rpb24tc3VidGl0bGVcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLnB1cmNoYXNlX2hpc3RvcnlcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9oMj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8dWwgY2xhc3M9XFxcIm1hcmtldHBsYWNlLXB1cmNoYXNlcy1pdGVtc1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7aWYodC5zKHQuZihcInB1cmNoYXNlc1wiLGMscCwxKSxjLHAsMCwxMjg0LDI1NDUsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiAgICA8bGlcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBkYXRhLWl0ZW1pZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaXRlbWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdCBtYXJrZXRwbGFjZS1hdWN0aW9ucy1pdGVtIG1hcmtldHBsYWNlLXNhbGVzLWl0ZW1cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIEljb24gLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtaWNvblxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8aW1nIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCIgLz5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBQcmljZXMgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGFpbmVyXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LW5hbWVcXFwiPlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRlbnRcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jdXJyZW50UHJpY2VcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIFwiKTtpZih0LnModC5mKFwiY3VycmVudFByaWNlXCIsYyxwLDEpLGMscCwwLDE3MzgsMTkwNyxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuY3VycmVudF9wcmljZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPlwiKTt0LmIodC52KHQuZChcImN1cnJlbnRQcmljZS5wcmljZVwiLGMscCwwKSkpO3QuYihcIjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCI+PC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIiAgICAgICAgICAgIDxiciAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIFwiKTtpZih0LnModC5mKFwiYnV5Tm93UHJpY2VcIixjLHAsMSksYyxwLDAsMTk3MiwyMTQwLFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5idXlfbm93X3ByaWNlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+XCIpO3QuYih0LnYodC5kKFwiYnV5Tm93UHJpY2UucHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgICAgICAgICAgPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPCEtLSBBY3Rpb25zIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWFjdGlvbnNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtdGltZVxcXCI+XCIpO3QuYih0LnYodC5mKFwiZGF0ZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWNhbmNlbCBkZWxldGUtYnV0dG9uXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBkYXRhLWl0ZW1pZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaXRlbWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmRlbGV0ZVwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCIgIDwvdWw+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwhLS0gU2FsZXMgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPGRpdiBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3RcXFwiIGlkPVxcXCJzYWxlLWhpc3RvcnlcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGgyIGNsYXNzPVxcXCJzZWN0aW9uLXN1YnRpdGxlXFxcIj5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLnNhbGVzX2hpc3RvcnlcIixjLHAsMCkpKTt0LmIoXCI8L2gyPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDx1bCBjbGFzcz1cXFwibWFya2V0cGxhY2Utc2FsZXMtaXRlbXNcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO2lmKHQucyh0LmYoXCJzYWxlc1wiLGMscCwxKSxjLHAsMCwyNzc4LDM5MjQsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiAgICA8bGkgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0IG1hcmtldHBsYWNlLXNhbGVzLWl0ZW1cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gSWNvbiAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1pY29uXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxpbWcgc3JjPVxcXCJcIik7dC5iKHQudih0LmYoXCJpY29uXCIsYyxwLDApKSk7dC5iKFwiXFxcIiAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIFByaWNlcyAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jb250YWluZXJcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtbmFtZVxcXCI+XCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGVudFxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWN1cnJlbnRQcmljZVxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgXCIpO2lmKHQucyh0LmYoXCJjdXJyZW50UHJpY2VcIixjLHAsMSksYyxwLDAsMzE2NCwzMzI3LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5jdXJyZW50X3ByaWNlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+XCIpO3QuYih0LnYodC5mKFwiY3VycmVudFByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiICAgICAgICAgICAgPGJyIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgICAgXCIpO2lmKHQucyh0LmYoXCJidXlOb3dQcmljZVwiLGMscCwxKSxjLHAsMCwzMzkyLDM1NTQsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmJ1eV9ub3dfcHJpY2VcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj5cIik7dC5iKHQudih0LmYoXCJidXlOb3dQcmljZVwiLGMscCwwKSkpO3QuYihcIjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCI+PC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIiAgICAgICAgICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIEFjdGlvbnMgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtYWN0aW9uc1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC10aW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJkYXRlXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIG1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtY2FuY2VsIGRlbGV0ZS1idXR0b25cXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuZGVsZXRlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO30pO2MucG9wKCk7fXQuYihcIiAgPC91bD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSwgXCI8c3R5bGU+XFxuICAvKiAjbWFya2V0cGxhY2UtYWJzdHJhY3QtcHVyY2hhc2VzIGFuZCAjbWFya2V0cGxhY2UtYWJzdHJhY3Qtc2FsZXMgd2VyZVxcbiAgcmUtd3JpdHRlbiB0byB0YXJnZXQgI3B1cmNoYXNlLWhpc3RvcnkgYW5kICNzYWxlLWhpc3RvcnkuICovXFxuXFxuICAjcHVyY2hhc2UtaGlzdG9yeSxcXG4gICNzYWxlLWhpc3Rvcnkge1xcbiAgICBoZWlnaHQ6IDYwMHB4O1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgIHdpZHRoOiAzNjBweDtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xcbiAgfVxcblxcbiAgI3NhbGUtaGlzdG9yeSAuYWJzdHJhY3QtYWN0aW9ucyxcXG4gICNwdXJjaGFzZS1oaXN0b3J5IC5hYnN0cmFjdC1hY3Rpb25zIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICB0b3A6IC00MHB4O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcXG4gICAgaGVpZ2h0OiA4MHB4O1xcbiAgfVxcblxcbiAgI3NhbGUtaGlzdG9yeSAuYWJzdHJhY3QtdGltZSxcXG4gICNwdXJjaGFzZS1oaXN0b3J5IC5hYnN0cmFjdC10aW1lIHtcXG4gICAgcG9zaXRpb246IHN0YXRpYztcXG4gICAgZGlzcGxheTogaW5saW5lO1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIGNvbG9yOiAjZmI4OTAwO1xcbiAgICBmb250LXdlaWdodDogYm9sZDtcXG4gICAgZm9udC1zaXplOiAxM3B4O1xcbiAgfVxcblxcbiAgI3B1cmNoYXNlLWhpc3Rvcnkge1xcbiAgICBtYXJnaW4tcmlnaHQ6IDgwcHg7XFxuICB9XFxuXFxuICAjcHVyY2hhc2UtaGlzdG9yeTpiZWZvcmUge1xcbiAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDEyMHB4O1xcbiAgICByaWdodDogLTQycHg7XFxuICAgIGJvcmRlci1yaWdodDogc29saWQgMnB4ICNhYWE7XFxuICAgIGhlaWdodDogMzIwcHg7XFxuICB9XFxuXFxuICAvKiBDdXN0b20gZml4ZXMgdG8gdGhlIGxheW91dCAqL1xcblxcbiAgI3B1cmNoYXNlLWhpc3RvcnkgbGkge1xcbiAgICBtYXJnaW4tbGVmdDogNHB4O1xcbiAgICBtYXJnaW4tcmlnaHQ6IDRweDtcXG4gIH1cXG48L3N0eWxlPlxcblxcbjwhLS0gUHVyY2hhc2VzIC0tPlxcbjxkaXYgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBpZD1cXFwicHVyY2hhc2UtaGlzdG9yeVxcXCI+XFxuICA8aDIgY2xhc3M9XFxcInNlY3Rpb24tc3VidGl0bGVcXFwiPlxcbiAgICB7e3RyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMucHVyY2hhc2VfaGlzdG9yeX19XFxuICA8L2gyPlxcblxcbiAgPHVsIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1wdXJjaGFzZXMtaXRlbXNcXFwiPlxcbiAgICB7eyNwdXJjaGFzZXN9fVxcbiAgICA8bGlcXG4gICAgICBkYXRhLWl0ZW1pZD1cXFwie3tpdGVtaWR9fVxcXCJcXG4gICAgICBjbGFzcz1cXFwibWFya2V0cGxhY2UtYWJzdHJhY3QgbWFya2V0cGxhY2UtYXVjdGlvbnMtaXRlbSBtYXJrZXRwbGFjZS1zYWxlcy1pdGVtXFxcIlxcbiAgICA+XFxuICAgICAgPCEtLSBJY29uIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWljb25cXFwiPlxcbiAgICAgICAgPGltZyBzcmM9XFxcInt7aWNvbn19XFxcIiAvPlxcbiAgICAgIDwvZGl2PlxcblxcbiAgICAgIDwhLS0gUHJpY2VzIC0tPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRhaW5lclxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj57e25hbWV9fTwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGVudFxcXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWN1cnJlbnRQcmljZVxcXCI+XFxuICAgICAgICAgICAge3sjY3VycmVudFByaWNlfX0ge3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmN1cnJlbnRfcHJpY2V9fVxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj57e2N1cnJlbnRQcmljZS5wcmljZX19PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAge3svY3VycmVudFByaWNlfX1cXG4gICAgICAgICAgICA8YnIgLz5cXG4gICAgICAgICAgICB7eyNidXlOb3dQcmljZX19IHt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5idXlfbm93X3ByaWNlfX1cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+e3tidXlOb3dQcmljZS5wcmljZX19PC9zcGFuPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+XFxuICAgICAgICAgICAge3svYnV5Tm93UHJpY2V9fVxcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcblxcbiAgICAgIDwhLS0gQWN0aW9ucyAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1hY3Rpb25zXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LXRpbWVcXFwiPnt7ZGF0ZX19PC9kaXY+XFxuICAgICAgICA8ZGl2XFxuICAgICAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIG1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtY2FuY2VsIGRlbGV0ZS1idXR0b25cXFwiXFxuICAgICAgICAgIGRhdGEtaXRlbWlkPVxcXCJ7e2l0ZW1pZH19XFxcIlxcbiAgICAgICAgPlxcbiAgICAgICAgICB7e3RyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuZGVsZXRlfX1cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2xpPlxcbiAgICB7ey9wdXJjaGFzZXN9fVxcbiAgPC91bD5cXG48L2Rpdj5cXG5cXG48IS0tIFNhbGVzIC0tPlxcbjxkaXYgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBpZD1cXFwic2FsZS1oaXN0b3J5XFxcIj5cXG4gIDxoMiBjbGFzcz1cXFwic2VjdGlvbi1zdWJ0aXRsZVxcXCI+e3t0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLnNhbGVzX2hpc3Rvcnl9fTwvaDI+XFxuXFxuICA8dWwgY2xhc3M9XFxcIm1hcmtldHBsYWNlLXNhbGVzLWl0ZW1zXFxcIj5cXG4gICAge3sjc2FsZXN9fVxcbiAgICA8bGkgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0IG1hcmtldHBsYWNlLXNhbGVzLWl0ZW1cXFwiPlxcbiAgICAgIDwhLS0gSWNvbiAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1pY29uXFxcIj5cXG4gICAgICAgIDxpbWcgc3JjPVxcXCJ7e2ljb259fVxcXCIgLz5cXG4gICAgICA8L2Rpdj5cXG5cXG4gICAgICA8IS0tIFByaWNlcyAtLT5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jb250YWluZXJcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtbmFtZVxcXCI+e3tuYW1lfX08L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRlbnRcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1jdXJyZW50UHJpY2VcXFwiPlxcbiAgICAgICAgICAgIHt7I2N1cnJlbnRQcmljZX19IHt7dHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5jdXJyZW50X3ByaWNlfX1cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+e3tjdXJyZW50UHJpY2V9fTwvc3Bhbj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIHt7L2N1cnJlbnRQcmljZX19XFxuICAgICAgICAgICAgPGJyIC8+XFxuICAgICAgICAgICAge3sjYnV5Tm93UHJpY2V9fSB7e3RyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuYnV5X25vd19wcmljZX19XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPnt7YnV5Tm93UHJpY2V9fTwvc3Bhbj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIHt7L2J1eU5vd1ByaWNlfX1cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG5cXG4gICAgICA8IS0tIEFjdGlvbnMgLS0+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtYWN0aW9uc1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC10aW1lXFxcIj57e2RhdGV9fTwvZGl2PlxcbiAgICAgICAgPGRpdlxcbiAgICAgICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWNhbmNlbCBkZWxldGUtYnV0dG9uXFxcIlxcbiAgICAgICAgPlxcbiAgICAgICAgICB7e3RyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuZGVsZXRlfX1cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2xpPlxcbiAgICB7ey9zYWxlc319XFxuICA8L3VsPlxcbjwvZGl2PlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdiBpZD1cXFwiZWUtb3V0Zml0LXRodW1ic1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8c3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1hdmFpbGFibGUtc2xvdCB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9hdmFpbGFibGUtZmF2b3JpdGUucG5nKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTRweCAtMTFweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kLXNpemU6IDE3MXB4IDI0NHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJvcmRlci1yYWRpdXM6IDQ0cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYm94LXNoYWRvdzogMCAwIDRweCA0cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Q6OmFmdGVyIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kOiB1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9pY29uLXBsdXMucG5nKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjb250ZW50OiBcXFwiIFxcXCI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgNnB4IHJnYmEoMjM3LCAxMiwgMjQ1LCAwLjkpKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBoZWlnaHQ6IDcxcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbGVmdDogNTAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG9wYWNpdHk6IDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgcG9zaXRpb246IGFic29sdXRlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRvcDogNTAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgZWFzZS1pbi1vdXQgMTAwbXM7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgd2lkdGg6IDY2cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1hdmFpbGFibGUtc2xvdDpob3Zlcjo6YWZ0ZXIsXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1vdXRmaXQtdGh1bWI6aG92ZXIgcCB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgb3BhY2l0eTogMTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLW91dGZpdC10aHVtYiBpbWcge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJvcmRlci1yYWRpdXM6IDQ0cHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiAxMDAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAxMDAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtb3V0Zml0LXRodW1iIHAge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjb2xvcjogI2ZmZjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LWZhbWlseTogXFxcIkFsZWdyZXlhIFNhbnMgU0NcXFwiLCBzYW5zLXNlcmlmO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZvbnQtc2l6ZTogMjJweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXdlaWdodDogNzAwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGxlZnQ6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBsaW5lLWhlaWdodDogMjJweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBvcGFjaXR5OiAwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHBhZGRpbmc6IDEycHggMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRvcDogNTAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgZWFzZS1pbi1vdXQgNDAwbXM7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgd2lkdGg6IDEwMCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvc3R5bGU+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO2lmKHQucyh0LmYoXCJvdXRmaXRzXCIsYyxwLDEpLGMscCwwLDE2NTQsMTc5MCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiICA8ZGl2IGNsYXNzPVxcXCJzbG90IGVlLW91dGZpdC10aHVtYlxcXCIgZGF0YS1hcnJheS1pbmRleD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8aW1nIGFsdD1cXFwiXCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIlxcXCIgc3JjPVxcXCJcIik7dC5iKHQudih0LmYoXCJ1cmxcIixjLHAsMCkpKTt0LmIoXCJcXFwiIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxwPlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt9KTtjLnBvcCgpO310LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGRpdiBjbGFzcz1cXFwic2xvdCBlZS1hdmFpbGFibGUtc2xvdFxcXCI+PC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGRpdiBpZD1cXFwiZWUtb3V0Zml0LXRodW1ic1xcXCI+XFxuICA8c3R5bGU+XFxuICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1hdmFpbGFibGUtc2xvdCB7XFxuICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9hdmFpbGFibGUtZmF2b3JpdGUucG5nKTtcXG4gICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTRweCAtMTFweDtcXG4gICAgICBiYWNrZ3JvdW5kLXNpemU6IDE3MXB4IDI0NHB4O1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDQ0cHg7XFxuICAgICAgYm94LXNoYWRvdzogMCAwIDRweCA0cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xcbiAgICB9XFxuXFxuICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1hdmFpbGFibGUtc2xvdDo6YWZ0ZXIge1xcbiAgICAgIGJhY2tncm91bmQ6IHVybCgvc3RhdGljL2ltZy9uZXctbGF5b3V0L3dhcmRyb2JlL2ljb24tcGx1cy5wbmcpO1xcbiAgICAgIGNvbnRlbnQ6IFxcXCIgXFxcIjtcXG4gICAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCA2cHggcmdiYSgyMzcsIDEyLCAyNDUsIDAuOSkpO1xcbiAgICAgIGhlaWdodDogNzFweDtcXG4gICAgICBsZWZ0OiA1MCU7XFxuICAgICAgb3BhY2l0eTogMDtcXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgdG9wOiA1MCU7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSBlYXNlLWluLW91dCAxMDBtcztcXG4gICAgICB3aWR0aDogNjZweDtcXG4gICAgfVxcblxcbiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Q6aG92ZXI6OmFmdGVyLFxcbiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtb3V0Zml0LXRodW1iOmhvdmVyIHAge1xcbiAgICAgIG9wYWNpdHk6IDE7XFxuICAgIH1cXG5cXG4gICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLW91dGZpdC10aHVtYiBpbWcge1xcbiAgICAgIGJvcmRlci1yYWRpdXM6IDQ0cHg7XFxuICAgICAgaGVpZ2h0OiAxMDAlO1xcbiAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICB9XFxuXFxuICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1vdXRmaXQtdGh1bWIgcCB7XFxuICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbiAgICAgIGNvbG9yOiAjZmZmO1xcbiAgICAgIGZvbnQtZmFtaWx5OiBcXFwiQWxlZ3JleWEgU2FucyBTQ1xcXCIsIHNhbnMtc2VyaWY7XFxuICAgICAgZm9udC1zaXplOiAyMnB4O1xcbiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAgICAgbGVmdDogNTAlO1xcbiAgICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xcbiAgICAgIG9wYWNpdHk6IDA7XFxuICAgICAgcGFkZGluZzogMTJweCAwO1xcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgICAgdG9wOiA1MCU7XFxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxuICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSBlYXNlLWluLW91dCA0MDBtcztcXG4gICAgICB3aWR0aDogMTAwJTtcXG4gICAgfVxcbiAgPC9zdHlsZT5cXG5cXG4gIHt7I291dGZpdHN9fVxcbiAgPGRpdiBjbGFzcz1cXFwic2xvdCBlZS1vdXRmaXQtdGh1bWJcXFwiIGRhdGEtYXJyYXktaW5kZXg9XFxcInt7aWR9fVxcXCI+XFxuICAgIDxpbWcgYWx0PVxcXCJ7e25hbWV9fVxcXCIgc3JjPVxcXCJ7e3VybH19XFxcIiAvPlxcbiAgICA8cD57e25hbWV9fTwvcD5cXG4gIDwvZGl2PlxcbiAge3svb3V0Zml0c319XFxuXFxuICA8ZGl2IGNsYXNzPVxcXCJzbG90IGVlLWF2YWlsYWJsZS1zbG90XFxcIj48L2Rpdj5cXG48L2Rpdj5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxsaSBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGNsYXNzPVxcXCJwcm9maWxlLWNvbnRhY3QtYWN0aW9uLWVlXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDxzcGFuIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGRpdiBjbGFzcz1cXFwiYWN0aW9uLWRlc2NyaXB0aW9uXFxcIj5cIik7dC5iKHQudih0LmYoXCJhY3Rpb25EZXNjcmlwdGlvblwiLGMscCwwKSkpO3QuYihcIjwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvbGk+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGxpIGlkPVxcXCJ7e2lkfX1cXFwiIGNsYXNzPVxcXCJwcm9maWxlLWNvbnRhY3QtYWN0aW9uLWVlXFxcIj5cXG4gIDxzcGFuIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYWN0aW9uLWRlc2NyaXB0aW9uXFxcIj57e2FjdGlvbkRlc2NyaXB0aW9ufX08L2Rpdj5cXG4gIDwvc3Bhbj5cXG48L2xpPlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdiBjbGFzcz1cXFwiYWNjb3VudC1taXNjLWJsb2MgYWNjb3VudC1lZS1ibG9jIGJsb2NcXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPCEtLVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHN0eWxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB0YWJsZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgd2lkdGg6IDEwMCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHRoIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0ZXh0LWFsaWduOiBzdGFydDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwYWRkaW5nOiAxZW07XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvc3R5bGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAtLT5cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8IS0tIFNldHRpbmdzIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPGgyIGNsYXNzPVxcXCJzZWN0aW9uLXRpdGxlXFxcIj5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5lbmhhbmNlbWVudHNcIixjLHAsMCkpKTt0LmIoXCI8L2gyPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgPHVsIGNsYXNzPVxcXCJhY2NvdW50LW1pc2MtYWN0aW9uc1xcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxsaVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGlkPVxcXCJlZS1kZWJ1Zy1lbmFibGVkXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwiZGVidWdcIixjLHAsMSksYyxwLDAsMzkyLDM5OCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0aXRsZT1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQuZGVidWdfdG9vbHRpcFwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50LmRlYnVnXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGxpXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaWQ9XFxcImVlLW1pbmlnYW1lcy1lbmFibGVkXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwibWluaWdhbWVzXCIsYyxwLDEpLGMscCwwLDYwMCw2MDYsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5taW5pZ2FtZXNcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8bGlcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBpZD1cXFwiZWUtZXhwbG9yYXRpb25zLWVuYWJsZWRcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gXCIpO2lmKHQucyh0LmYoXCJleHBsb3JhdGlvbnNcIixjLHAsMSksYyxwLDAsNzcyLDc3OCxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50LmV4cGxvcmF0aW9uc1wiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvbGk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDxsaVwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGlkPVxcXCJlZS1tYXJrZXQtZW5hYmxlZFxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcIm1hcmtldFwiLGMscCwxKSxjLHAsMCw5MzgsOTQ0LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQubWFya2V0XCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC9saT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPGxpIGlkPVxcXCJlZS1pbXBvcnRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5pbXBvcnRcIixjLHAsMCkpKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L2xpPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8bGkgaWQ9XFxcImVlLWV4cG9ydFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50LmV4cG9ydFwiLGMscCwwKSkpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvbGk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3VsPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwhLS0gRXhwbG9yYXRpb25zXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8aDMgY2xhc3M9XFxcInNlY3Rpb24tdGl0bGVcXFwiPkV4cGxvcmF0aW9uczwvaDM+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8dGFibGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDx0aGVhZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGg+TG9jYXRpb248L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0aD5EZWxldGU8L3RoPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8L3RoZWFkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICA8dGJvZHk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRkPlJvY2s8L3RkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXYgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPkRlbGV0ZTwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvdGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvdGJvZHk+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8L3RhYmxlPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGRpdiBjbGFzcz1cXFwiYWNjb3VudC1taXNjLWJsb2MgYWNjb3VudC1lZS1ibG9jIGJsb2NcXFwiPlxcbiAgPCEtLVxcbiAgPHN0eWxlPlxcbiAgICB0YWJsZSB7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG5cXG4gICAgdGgge1xcbiAgICAgIHRleHQtYWxpZ246IHN0YXJ0O1xcbiAgICAgIHBhZGRpbmc6IDFlbTtcXG4gICAgfVxcbiAgPC9zdHlsZT5cXG4gIC0tPlxcblxcbiAgPCEtLSBTZXR0aW5ncyAtLT5cXG4gIDxoMiBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+e3t0cmFuc2xhdGUuYWNjb3VudC5lbmhhbmNlbWVudHN9fTwvaDI+XFxuICA8dWwgY2xhc3M9XFxcImFjY291bnQtbWlzYy1hY3Rpb25zXFxcIj5cXG4gICAgPGxpXFxuICAgICAgaWQ9XFxcImVlLWRlYnVnLWVuYWJsZWRcXFwiXFxuICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20ge3sjZGVidWd9fWFjdGl2ZXt7L2RlYnVnfX1cXFwiXFxuICAgICAgdGl0bGU9XFxcInt7dHJhbnNsYXRlLmFjY291bnQuZGVidWdfdG9vbHRpcH19XFxcIlxcbiAgICA+XFxuICAgICAge3t0cmFuc2xhdGUuYWNjb3VudC5kZWJ1Z319XFxuICAgIDwvbGk+XFxuICAgIDxsaVxcbiAgICAgIGlkPVxcXCJlZS1taW5pZ2FtZXMtZW5hYmxlZFxcXCJcXG4gICAgICBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSB7eyNtaW5pZ2FtZXN9fWFjdGl2ZXt7L21pbmlnYW1lc319XFxcIlxcbiAgICA+XFxuICAgICAge3t0cmFuc2xhdGUuYWNjb3VudC5taW5pZ2FtZXN9fVxcbiAgICA8L2xpPlxcbiAgICA8bGlcXG4gICAgICBpZD1cXFwiZWUtZXhwbG9yYXRpb25zLWVuYWJsZWRcXFwiXFxuICAgICAgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20ge3sjZXhwbG9yYXRpb25zfX1hY3RpdmV7ey9leHBsb3JhdGlvbnN9fVxcXCJcXG4gICAgPlxcbiAgICAgIHt7dHJhbnNsYXRlLmFjY291bnQuZXhwbG9yYXRpb25zfX1cXG4gICAgPC9saT5cXG4gICAgPGxpXFxuICAgICAgaWQ9XFxcImVlLW1hcmtldC1lbmFibGVkXFxcIlxcbiAgICAgIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIHt7I21hcmtldH19YWN0aXZle3svbWFya2V0fX1cXFwiXFxuICAgID5cXG4gICAgICB7e3RyYW5zbGF0ZS5hY2NvdW50Lm1hcmtldH19XFxuICAgIDwvbGk+XFxuICAgIDxsaSBpZD1cXFwiZWUtaW1wb3J0XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+XFxuICAgICAge3t0cmFuc2xhdGUuYWNjb3VudC5pbXBvcnR9fVxcbiAgICA8L2xpPlxcbiAgICA8bGkgaWQ9XFxcImVlLWV4cG9ydFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPlxcbiAgICAgIHt7dHJhbnNsYXRlLmFjY291bnQuZXhwb3J0fX1cXG4gICAgPC9saT5cXG4gIDwvdWw+XFxuXFxuICA8IS0tIEV4cGxvcmF0aW9uc1xcbiAgPGgzIGNsYXNzPVxcXCJzZWN0aW9uLXRpdGxlXFxcIj5FeHBsb3JhdGlvbnM8L2gzPlxcbiAgPHRhYmxlPlxcbiAgICA8dGhlYWQ+XFxuICAgICAgPHRoPkxvY2F0aW9uPC90aD5cXG4gICAgICA8dGg+RGVsZXRlPC90aD5cXG4gICAgPC90aGVhZD5cXG4gICAgPHRib2R5PlxcbiAgICAgIDx0ZD5Sb2NrPC90ZD5cXG4gICAgICA8dGQ+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj5EZWxldGU8L2Rpdj5cXG4gICAgICA8L3RkPlxcbiAgICA8L3Rib2R5PlxcbiAgPC90YWJsZT5cXG4gIC0tPlxcbjwvZGl2PlxcblwiLCBIKTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGEgaWQ9XFxcIndpc2hsaXN0LWJ1dHRvblxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvblxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnRpdGxlXCIsYyxwLDApKSk7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L2E+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPGEgaWQ9XFxcIndpc2hsaXN0LWJ1dHRvblxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvblxcXCI+XFxuICB7e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QudGl0bGV9fVxcbjwvYT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxzdHlsZT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIHRhYmxlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdGV4dC1hbGlnbjogY2VudGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB3aWR0aDogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuYWN0aW9uLXBpY3RvIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgaGVpZ2h0OiA1MHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB3aWR0aDogNTBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY3Vyc29yOiBwb2ludGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5hY3Rpb24tcGljdG86aG92ZXI6bm90KC5kaXNhYmxlZCksXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuZWRpdC1wcmljZTpob3ZlciB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGFuaW1hdGlvbjogYnV0dG9uLWJvdW5jZSAzMDBtcyBsaW5lYXIgZm9yd2FyZHM7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjA1KSBjb250cmFzdCgxLjEpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5lZGl0LXByaWNlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY3Vyc29yOiBwb2ludGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGltZy5kaXNhYmxlZCB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGZpbHRlcjogZ3JheXNjYWxlKDEpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5pdGVtLWljb24tY29udGFpbmVyIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLml0ZW0taWNvbiB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHdpZHRoOiAxMDBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgaGVpZ2h0OiAxMDBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8L3N0eWxlPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCI8dGFibGU+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8dGhlYWQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDx0cj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGg+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5pY29uXCIsYyxwLDApKSk7dC5iKFwiPC90aD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGg+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5uYW1lXCIsYyxwLDApKSk7dC5iKFwiPC90aD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGg+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5wcmljZVwiLGMscCwwKSkpO3QuYihcIjwvdGg+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRoPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3Quc3RhdHVzXCIsYyxwLDApKSk7dC5iKFwiPC90aD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGg+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5hY3Rpb25zXCIsYyxwLDApKSk7dC5iKFwiPC90aD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgPC90cj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIDwvdGhlYWQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICA8dGJvZHk+XCIpO3QuYihcIlxcblwiICsgaSk7aWYodC5zKHQuZihcIndpc2hsaXN0XCIsYyxwLDEpLGMscCwwLDg3MiwyMjYwLFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgICAgPHRyIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgZGF0YS1pY29uPVxcXCJcIik7dC5iKHQudih0LmYoXCJpY29uXCIsYyxwLDApKSk7dC5iKFwiXFxcIj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIEljb24gLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGRpdiBjbGFzcz1cXFwiaXRlbS1pY29uLWNvbnRhaW5lclxcXCI+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIDxpbWcgY2xhc3M9XFxcIml0ZW0taWNvblxcXCIgc3JjPVxcXCJcIik7dC5iKHQudih0LmYoXCJpY29uXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiIC8+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJhcml0eS1tYXJrZXItXCIpO3QuYih0LnYodC5mKFwicmFyaXR5XCIsYyxwLDApKSk7dC5iKFwiXFxcIj48L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvdGQ+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gTmFtZSAtLT5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8dGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC10eXBlXFxcIj5cIik7dC5iKHQudih0LmYoXCJhYnN0cmFjdFR5cGVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L3RkPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIFByaWNlIC0tPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDx0ZD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDxkaXZcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgY2xhc3M9XFxcImVkaXQtcHJpY2VcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIHRpdGxlPVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmNoYW5nZV9wcmljZVwiLGMscCwwKSkpO3QuYihcIlxcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgID5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPlwiKTt0LmIodC52KHQuZihcInByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC9zcGFuPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCIgYWx0PVxcXCJtYWFuYXNcXFwiPjwvc3Bhbj5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgIDwvZGl2PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvdGQ+XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwhLS0gRXJyb3IgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPHAgY2xhc3M9XFxcImVycm9yXFxcIj5cIik7dC5iKHQudih0LmYoXCJlcnJvclwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8L3RkPlwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICA8IS0tIEFjdGlvbnMgLS0+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgPHRkPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGltZ1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBjbGFzcz1cXFwiYWN0aW9uLXBpY3RvIHJlc2V0LWl0ZW0tc3RhdHVzIFwiKTtpZighdC5zKHQuZihcImVycm9yXCIsYyxwLDEpLGMscCwxLDAsMCxcIlwiKSl7dC5iKFwiZGlzYWJsZWRcIik7fTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9yZXNldC1idG4ucG5nXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICB0aXRsZT1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5yZXNldF90b29sdGlwXCIsYyxwLDApKSk7dC5iKFwiXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QucmVzZXRcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgPGltZ1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBjbGFzcz1cXFwiYWN0aW9uLXBpY3RvIGRlbGV0ZS13aXNobGlzdC1pdGVtXFxcIlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgICAgICBzcmM9XFxcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvZGVsZXRlLnBuZ1xcXCJcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICAgICAgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuZGVsZXRlX3Rvb2x0aXBcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAgIGFsdD1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5kZWxldGVcIixjLHAsMCkpKTt0LmIoXCJcXFwiXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgICAvPlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIDwvdGQ+XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIDwvdHI+XCIpO3QuYihcIlxcblwiICsgaSk7fSk7Yy5wb3AoKTt9dC5iKFwiICA8L3Rib2R5PlwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIjwvdGFibGU+XCIpO3QuYihcIlxcblwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0sIFwiPHN0eWxlPlxcbiAgdGFibGUge1xcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgfVxcblxcbiAgLmFjdGlvbi1waWN0byB7XFxuICAgIGhlaWdodDogNTBweDtcXG4gICAgd2lkdGg6IDUwcHg7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gIH1cXG5cXG4gIC5hY3Rpb24tcGljdG86aG92ZXI6bm90KC5kaXNhYmxlZCksXFxuICAuZWRpdC1wcmljZTpob3ZlciB7XFxuICAgIGFuaW1hdGlvbjogYnV0dG9uLWJvdW5jZSAzMDBtcyBsaW5lYXIgZm9yd2FyZHM7XFxuICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjA1KSBjb250cmFzdCgxLjEpO1xcbiAgfVxcblxcbiAgLmVkaXQtcHJpY2Uge1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICB9XFxuXFxuICBpbWcuZGlzYWJsZWQge1xcbiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKTtcXG4gIH1cXG5cXG4gIC5pdGVtLWljb24tY29udGFpbmVyIHtcXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB9XFxuXFxuICAuaXRlbS1pY29uIHtcXG4gICAgd2lkdGg6IDEwMHB4O1xcbiAgICBoZWlnaHQ6IDEwMHB4O1xcbiAgfVxcbjwvc3R5bGU+XFxuXFxuPHRhYmxlPlxcbiAgPHRoZWFkPlxcbiAgICA8dHI+XFxuICAgICAgPHRoPnt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5pY29ufX08L3RoPlxcbiAgICAgIDx0aD57e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QubmFtZX19PC90aD5cXG4gICAgICA8dGg+e3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnByaWNlfX08L3RoPlxcbiAgICAgIDx0aD57e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3Quc3RhdHVzfX08L3RoPlxcbiAgICAgIDx0aD57e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuYWN0aW9uc319PC90aD5cXG4gICAgPC90cj5cXG4gIDwvdGhlYWQ+XFxuICA8dGJvZHk+XFxuICAgIHt7I3dpc2hsaXN0fX1cXG4gICAgPHRyIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgZGF0YS1pY29uPVxcXCJ7e2ljb259fVxcXCI+XFxuICAgICAgPCEtLSBJY29uIC0tPlxcbiAgICAgIDx0ZD5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIml0ZW0taWNvbi1jb250YWluZXJcXFwiPlxcbiAgICAgICAgICA8aW1nIGNsYXNzPVxcXCJpdGVtLWljb25cXFwiIHNyYz1cXFwie3tpY29ufX1cXFwiIGFsdD1cXFwie3tuYW1lfX1cXFwiIC8+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJhcml0eS1tYXJrZXIte3tyYXJpdHl9fVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L3RkPlxcblxcbiAgICAgIDwhLS0gTmFtZSAtLT5cXG4gICAgICA8dGQ+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj57e25hbWV9fTwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtdHlwZVxcXCI+e3thYnN0cmFjdFR5cGV9fTwvZGl2PlxcbiAgICAgIDwvdGQ+XFxuXFxuICAgICAgPCEtLSBQcmljZSAtLT5cXG4gICAgICA8dGQ+XFxuICAgICAgICA8ZGl2XFxuICAgICAgICAgIGNsYXNzPVxcXCJlZGl0LXByaWNlXFxcIlxcbiAgICAgICAgICB0aXRsZT1cXFwie3t0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmNoYW5nZV9wcmljZX19XFxcIlxcbiAgICAgICAgPlxcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+e3twcmljZX19PC9zcGFuPlxcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCIgYWx0PVxcXCJtYWFuYXNcXFwiPjwvc3Bhbj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvdGQ+XFxuXFxuICAgICAgPCEtLSBFcnJvciAtLT5cXG4gICAgICA8dGQ+XFxuICAgICAgICA8cCBjbGFzcz1cXFwiZXJyb3JcXFwiPnt7ZXJyb3J9fTwvcD5cXG4gICAgICA8L3RkPlxcblxcbiAgICAgIDwhLS0gQWN0aW9ucyAtLT5cXG4gICAgICA8dGQ+XFxuICAgICAgICA8aW1nXFxuICAgICAgICAgIGNsYXNzPVxcXCJhY3Rpb24tcGljdG8gcmVzZXQtaXRlbS1zdGF0dXMge3teZXJyb3J9fWRpc2FibGVke3svZXJyb3J9fVxcXCJcXG4gICAgICAgICAgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L3dhcmRyb2JlL3Jlc2V0LWJ0bi5wbmdcXFwiXFxuICAgICAgICAgIHRpdGxlPVxcXCJ7e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QucmVzZXRfdG9vbHRpcH19XFxcIlxcbiAgICAgICAgICBhbHQ9XFxcInt7dHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5yZXNldH19XFxcIlxcbiAgICAgICAgLz5cXG4gICAgICAgIDxpbWdcXG4gICAgICAgICAgY2xhc3M9XFxcImFjdGlvbi1waWN0byBkZWxldGUtd2lzaGxpc3QtaXRlbVxcXCJcXG4gICAgICAgICAgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L3dhcmRyb2JlL2RlbGV0ZS5wbmdcXFwiXFxuICAgICAgICAgIHRpdGxlPVxcXCJ7e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuZGVsZXRlX3Rvb2x0aXB9fVxcXCJcXG4gICAgICAgICAgYWx0PVxcXCJ7e3RyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuZGVsZXRlfX1cXFwiXFxuICAgICAgICAvPlxcbiAgICAgIDwvdGQ+XFxuICAgIDwvdHI+XFxuICAgIHt7L3dpc2hsaXN0fX1cXG4gIDwvdGJvZHk+XFxuPC90YWJsZT5cXG5cIiwgSCk7cmV0dXJuIFQ7IH0oKTsiLCJpbXBvcnQgeyBCb2R5TG9jYXRpb24gfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvYm9keV9sb2NhdGlvbi5lbnVtXCJcbmltcG9ydCB7IENhdGVnb3J5TnVtYmVyIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL2NhdGVnb3J5LmVudW1cIlxuaW1wb3J0IHsgR3VhcmQgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvZ3VhcmQuZW51bVwiXG5pbXBvcnQgeyBSYXJpdHkgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvcmFyaXR5LmVudW1cIlxuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy90eXBlLmVudW1cIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWpheFNlYXJjaChkYXRhOiB7XG4gIHR5cGU/OiBUeXBlXG4gIGJvZHlMb2NhdGlvbj86IEJvZHlMb2NhdGlvblxuICBjYXRlZ29yeT86IENhdGVnb3J5TnVtYmVyXG4gIHJhcml0eT86IFJhcml0eVxuICBwcmljZT86IG51bWJlciB8IFwiXCJcbiAgZ3VhcmQ/OiBHdWFyZFxuICAvKiogUGFnZSBudW1iZXIsIGluZGV4ZWQgYnkgMSAqL1xuICBwYWdlOiBudW1iZXJcbiAgbmFtZT86IHN0cmluZ1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGRhdGEgPSB7XG4gICAgLi4ue1xuICAgICAgdHlwZTogVHlwZS5BbGwsXG4gICAgICBib2R5TG9jYXRpb246IEJvZHlMb2NhdGlvbi5BbGwsXG4gICAgICBjYXRlZ29yeTogQ2F0ZWdvcnlOdW1iZXIuYWxsLFxuICAgICAgcmFyaXR5OiBSYXJpdHkuYWxsLFxuICAgICAgcHJpY2U6IFwiXCIsXG4gICAgICBndWFyZDogR3VhcmQuYW55LFxuICAgICAgcGFnZTogMSxcbiAgICAgIG5hbWU6IFwiXCIsXG4gICAgfSxcbiAgICAuLi5kYXRhLFxuICB9XG5cbiAgY29uc3QgSVRFTVNfUEVSX1BBR0UgPSA4XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICB2b2lkICQuZ2V0KFxuICAgICAgXCIvbWFya2V0cGxhY2UvYWpheF9zZWFyY2hcIixcbiAgICAgIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgZnJvbTogKGRhdGEucGFnZSAtIDEpICogSVRFTVNfUEVSX1BBR0UsXG4gICAgICAgIHRvOiBJVEVNU19QRVJfUEFHRSxcbiAgICAgIH0sXG4gICAgICByZXNvbHZlXG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1eShpdGVtSWQ6IG51bWJlcik6IFByb21pc2U8UGFja2V0PFwiXCI+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICB2b2lkICQucG9zdChcbiAgICAgIFwiL21hcmtldHBsYWNlL2J1eVwiLFxuICAgICAgeyBpZDogaXRlbUlkIH0sXG4gICAgICAoanNvbjogUGFja2V0PFwiXCI+KTogdm9pZCA9PiB7XG4gICAgICAgIExvY2FsU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwianNvblwiXG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBFeHBsb3JhdGlvblJlc3VsdHNEYXRhIH0gZnJvbSBcIi4uL2FwaS9leHBsb3JhdGlvbl9yZXN1bHRzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVFbmQoKTogUHJvbWlzZTxQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvcGV0L2NhcHR1cmUvZW5kXCIsXG4gICAgICAoanNvbjogUGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIExvY2FsU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgQ2hhbmdlUmVnaW9uRGF0YSB9IGZyb20gXCIuLi9hcGkvY2hhbmdlX3JlZ2lvbl9kYXRhXCJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGFuZ2VSZWdpb24oXG4gIG5ld1JlZ2lvbklkOiBudW1iZXJcbik6IFByb21pc2U8UGFja2V0PENoYW5nZVJlZ2lvbkRhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8Q2hhbmdlUmVnaW9uRGF0YT4+KChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9wZXQvY2hhbmdlUmVnaW9uXCIsXG4gICAgICB7IG5ld1JlZ2lvbklkIH0sXG4gICAgICAoanNvbjogUGFja2V0PENoYW5nZVJlZ2lvbkRhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIExvY2FsU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRSZWdpb24gPSBqc29uLmRhdGEuY3VycmVudFJlZ2lvblxuXG4gICAgICAgIHBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiA9XG4gICAgICAgICAgdHlwZW9mIGpzb24uZGF0YS5wZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBqc29uLmRhdGEucGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uXG5cbiAgICAgICAgdGltZUxlZnRFeHBsb3JhdGlvbiA9XG4gICAgICAgICAgdHlwZW9mIGpzb24uZGF0YS50aW1lTGVmdEV4cGxvcmF0aW9uID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoganNvbi5kYXRhLnRpbWVMZWZ0RXhwbG9yYXRpb25cbiAgICAgIH1cbiAgICApXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IEV4cGxvcmF0aW9uUmVzdWx0c0RhdGEgfSBmcm9tIFwiLi4vYXBpL2V4cGxvcmF0aW9uX3Jlc3VsdHNfZGF0YVwiXG5pbXBvcnQgdHlwZSB7IFBhY2tldCB9IGZyb20gXCIuLi9hcGkvcGFja2V0XCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwbG9yYXRpb25SZXN1bHRzKCk6IFByb21pc2U8XG4gIFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPlxuPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4+KChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9wZXQvZXhwbG9yYXRpb25SZXN1bHRzXCIsXG4gICAgICAoanNvbjogUGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIExvY2FsU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgTWV0YSB7XG4gIGV2ZW50OiBNZXRhRXZlbnRcbiAgbWVzc2FnZTogTWVzc2FnZVxuICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25zXG4gIHBldDogUGV0XG4gIHBsYXllcjogUGxheWVyXG4gIHB1cnJvc2hvcDogUHVycm9zaG9wXG59XG5cbnR5cGUgTWV0YUV2ZW50ID0gXCJlYXN0ZXJcIiB8IG51bGxcblxuaW50ZXJmYWNlIE1lc3NhZ2Uge1xuICB1bnJlYWQ6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgUGV0IHtcbiAgLyoqIEV4cGxvcmF0aW9uIGlzIGZpbmlzaGVkICovXG4gIGV4cGxvcmF0aW9uOiBib29sZWFuXG4gIHBvcnRyYWl0OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIFBsYXllciB7XG4gIGRhaWx5TWFhbmE6IGJvb2xlYW5cbiAgZ29sZDogQ3VycmVuY3lcbiAgbGVnYWN5Q3VycmVuY3k6IEN1cnJlbmN5XG4gIG1hYW5hOiBDdXJyZW5jeVxuICBwdXJyb3Bhc3M6IFB1cnJvcGFzc1xuICB1bnJlYWROZXdzOiBudWxsXG4gIHhwOiBYUFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1cnJlbmN5IHtcbiAgY2hhbmdlOiBDaGFuZ2VcbiAgdGV4dDogc3RyaW5nXG4gIHZhbHVlOiBudW1iZXJcbn1cblxuaW50ZXJmYWNlIENoYW5nZSB7XG4gIHRleHQ6IHN0cmluZ1xuICB2YWx1ZTogbnVtYmVyXG59XG5cbmludGVyZmFjZSBQdXJyb3Bhc3Mge1xuICBjaGFuZ2U6IENoYW5nZVxuICB0ZXh0OiBzdHJpbmdcbiAgdmFsdWU6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgWFAge1xuICBnb2FsOiBudW1iZXJcbiAgbGV2ZWw6IG51bWJlclxuICB2YWx1ZTogbnVtYmVyXG59XG5cbmludGVyZmFjZSBQdXJyb3Nob3Age1xuICBzdGF0dXM6IFB1cnJvc2hvcFN0YXR1c1xufVxuXG5pbnRlcmZhY2UgTm90aWZpY2F0aW9ucyB7XG4gIGRpc3BsYXlUaW1lOiBudW1iZXJcbiAgbWVzc2FnZTogc3RyaW5nXG4gIHR5cGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZW51bSBQdXJyb3Nob3BTdGF0dXMge1xuICBkaXNhYmxlZCA9IFwiZGlzYWJsZWRcIixcbiAgZW5hYmxlZCA9IFwiZW5hYmxlZFwiLFxufVxuIiwiZXhwb3J0IGVudW0gUmVzdWx0IHtcbiAgZXJyb3IgPSBcImVycm9yXCIsXG4gIHN1Y2Nlc3MgPSBcInN1Y2Nlc3NcIixcbn1cbiIsImltcG9ydCB3YXJkcm9iZSBmcm9tIFwiLi93YXJkcm9iZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXBwZWFyYW5jZVVJKCk6IHZvaWQge1xuICBzZXR1cEJhY2tncm91bmQoKVxuICBzZXR1cExlZnRQYW5lbCgpXG4gIHNldHVwUmlnaHRQYW5lbCgpXG5cbiAgaWYgKHdhcmRyb2JlLmF2YWlsYWJsZUl0ZW1zKSBhdmFpbGFibGVJdGVtcyA9IHdhcmRyb2JlLmF2YWlsYWJsZUl0ZW1zXG4gIGVsc2Ugd2FyZHJvYmUuYXZhaWxhYmxlSXRlbXMgPSBhdmFpbGFibGVJdGVtc1xufVxuXG5mdW5jdGlvbiBzZXR1cEJhY2tncm91bmQoKTogdm9pZCB7XG4gIGNvbnN0IGJhY2tncm91bmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFxuICAgIFwiI2F2YXRhci1iYWNrZ3JvdW5kIGltZ1wiXG4gIClcbiAgaWYgKGJhY2tncm91bmQpIHtcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLmZpbHRlciA9IFwidW5zZXRcIlxuICAgIGJhY2tncm91bmQuc3R5bGUuaGVpZ2h0ID0gXCJ1bnNldFwiXG4gICAgYmFja2dyb3VuZC5zdHlsZS5tYXNrID1cbiAgICAgIFwibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCBibGFjayA1MCUsIHRyYW5zcGFyZW50IDEwMCUpXCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLm1pbkhlaWdodCA9IFwiMTAwdmhcIlxuICAgIGJhY2tncm91bmQuc3R5bGUubWluV2lkdGggPSBcIjUwdndcIlxuICAgIGJhY2tncm91bmQuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLnRyYW5zZm9ybSA9IFwidW5zZXRcIlxuICAgIGJhY2tncm91bmQuc3R5bGUud2lkdGggPSBcInVuc2V0XCJcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXR1cFJpZ2h0UGFuZWwoKTogdm9pZCB7XG4gIGNvbnN0IHJpZ2h0UGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcGVhcmFuY2UtcmlnaHRcIilcbiAgaWYgKHJpZ2h0UGFuZWwpIHJpZ2h0UGFuZWwuc3R5bGUucGFkZGluZ1RvcCA9IFwiODBweFwiXG59XG5cbmZ1bmN0aW9uIHNldHVwTGVmdFBhbmVsKCk6IHZvaWQge1xuICBjb25zdCBwcmV2aWV3T3V0ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcGVhcmFuY2UtcHJldmlldy1vdXRlclwiKVxuICBpZiAocHJldmlld091dGVyKSB7XG4gICAgcHJldmlld091dGVyLnN0eWxlLnBhZGRpbmcgPSBcIjBweFwiXG4gIH1cblxuICBjb25zdCBwcmV2aWV3ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBlYXJhbmNlLXByZXZpZXdcIilcbiAgaWYgKHByZXZpZXcpIHtcbiAgICBwcmV2aWV3LnN0eWxlLmxlZnQgPSBcIjBcIlxuICAgIHByZXZpZXcuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCJcbiAgICBwcmV2aWV3LnN0eWxlLnRvcCA9IFwiY2FsYyg1MCUgLSB2YXIoLS10b3BiYXItaGVpZ2h0KSlcIlxuICAgIHByZXZpZXcuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGVZKC01MCUpXCJcbiAgfVxuXG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxuICAgIFwiI2FwcGVhcmFuY2UtcHJldmlldyBjYW52YXNcIlxuICApXG4gIGlmIChjYW52YXMpIHtcbiAgICBjYW52YXMuc3R5bGUubWF4SGVpZ2h0ID0gXCIxMDB2aFwiXG4gICAgY2FudmFzLnN0eWxlLm1heFdpZHRoID0gXCI1MHZ3XCJcbiAgfVxufVxuIiwiaW1wb3J0IHsgdHJpbUljb24gfSBmcm9tIFwiLi4vZWxkYXJ5YV91dGlsXCJcbmltcG9ydCB0eXBlIHsgQXBwZWFyYW5jZUNhdGVnb3J5IH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2FwcGVhcmFuY2VfY2F0ZWdvcnlcIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlR3JvdXAgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9ncm91cFwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VJdGVtIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2FwcGVhcmFuY2VfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUgfSBmcm9tIFwiLi9lbnVtcy9hcHBlYXJhbmNlX2NhdGVnb3J5X2NvZGUuZW51bVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yeUNvbnRhaW5lckRhdGFTZXQoXG4gIGNhdGVnb3J5Q29udGFpbmVyOiBIVE1MRGl2RWxlbWVudFxuKTogQXBwZWFyYW5jZUNhdGVnb3J5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgeyBjYXRlZ29yeWlkLCBjYXRlZ29yeSwgY2F0ZWdvcnluYW1lIH0gPSBjYXRlZ29yeUNvbnRhaW5lci5kYXRhc2V0XG4gIGlmICghY2F0ZWdvcnlpZCB8fCAhY2F0ZWdvcnkgfHwgIWNhdGVnb3J5bmFtZSkgcmV0dXJuXG4gIHJldHVybiB7XG4gICAgY2F0ZWdvcnlpZDogTnVtYmVyKGNhdGVnb3J5aWQpLFxuICAgIGNhdGVnb3J5OiBjYXRlZ29yeSBhcyBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLFxuICAgIGNhdGVnb3J5bmFtZSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2F0ZWdvcnlHcm91cERhdGFTZXQoXG4gIGdyb3VwSXRlbTogSFRNTExJRWxlbWVudCxcbiAgYXBwZWFyYW5jZUNhdGVnb3J5OiBBcHBlYXJhbmNlQ2F0ZWdvcnlcbik6IEFwcGVhcmFuY2VHcm91cCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHsgaXRlbWlkLCBncm91cCwgbmFtZSwgcmFyaXR5LCByYXJpdHluYW1lIH0gPSBncm91cEl0ZW0uZGF0YXNldFxuICBpZiAoIWl0ZW1pZCB8fCAhZ3JvdXAgfHwgIW5hbWUgfHwgIXJhcml0eSB8fCAhcmFyaXR5bmFtZSkgcmV0dXJuXG4gIHJldHVybiB7XG4gICAgLi4uYXBwZWFyYW5jZUNhdGVnb3J5LFxuICAgIGl0ZW1pZDogTnVtYmVyKGl0ZW1pZCksXG4gICAgZ3JvdXA6IE51bWJlcihncm91cCksXG4gICAgbmFtZSxcbiAgICByYXJpdHksXG4gICAgcmFyaXR5bmFtZSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlbURhdGFTZXQoXG4gIGxpOiBIVE1MTElFbGVtZW50LFxuICBhcHBlYXJhbmNlR3JvdXA6IEFwcGVhcmFuY2VHcm91cFxuKTogQXBwZWFyYW5jZUl0ZW0gfCB1bmRlZmluZWQge1xuICBjb25zdCB7IGl0ZW1pZCwgbmFtZSwgcmFyaXR5LCByYXJpdHluYW1lIH0gPSBsaS5kYXRhc2V0XG4gIGNvbnN0IGljb24gPSBsaS5xdWVyeVNlbGVjdG9yKFwiaW1nXCIpPy5zcmNcbiAgaWYgKCFpdGVtaWQgfHwgIW5hbWUgfHwgIXJhcml0eSB8fCAhcmFyaXR5bmFtZSB8fCAhaWNvbikgcmV0dXJuXG5cbiAgcmV0dXJuIHtcbiAgICAuLi5hcHBlYXJhbmNlR3JvdXAsXG4gICAgaXRlbWlkOiBOdW1iZXIoaXRlbWlkKSxcbiAgICBuYW1lLFxuICAgIHJhcml0eSxcbiAgICByYXJpdHluYW1lLFxuICAgIGljb246IHRyaW1JY29uKGljb24pLFxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBpc0VudW0gfSBmcm9tIFwiLi4vdHNfdXRpbFwiXG5pbXBvcnQgeyBsb2FkRmF2b3VyaXRlcyB9IGZyb20gXCIuLi91aS9mYXZvdXJpdGVzXCJcbmltcG9ydCB7IGxvYWRBcHBlYXJhbmNlVUkgfSBmcm9tIFwiLi9hcHBlYXJhbmNlX3VpXCJcbmltcG9ydCB7XG4gIGNhdGVnb3J5Q29udGFpbmVyRGF0YVNldCxcbiAgY2F0ZWdvcnlHcm91cERhdGFTZXQsXG4gIGl0ZW1EYXRhU2V0LFxufSBmcm9tIFwiLi9kYXRhX3NldFwiXG5pbXBvcnQgeyBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlIH0gZnJvbSBcIi4vZW51bXMvYXBwZWFyYW5jZV9jYXRlZ29yeV9jb2RlLmVudW1cIlxuaW1wb3J0IHsgb3BlbkNhdGVnb3J5LCBvcGVuR3JvdXAgfSBmcm9tIFwiLi9mYXZvdXJpdGVzX2FjdGlvbnNcIlxuaW1wb3J0IHsgbG9hZEhpZGRlbkNhdGVnb3J5LCB1bmxvYWRIaWRkZW5DYXRlZ29yaWVzIH0gZnJvbSBcIi4vaGlkZGVuXCJcbmltcG9ydCB3YXJkcm9iZSBmcm9tIFwiLi93YXJkcm9iZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkRHJlc3NpbmdFeHBlcmllbmNlKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvcGxheWVyL2FwcGVhcmFuY2VcIikpIHJldHVyblxuXG4gIGhhbmRsZWRDYXRlZ29yaWVzLmNsZWFyKClcbiAgbG9hZGluZyA9IGZhbHNlXG5cbiAgbG9hZEFwcGVhcmFuY2VVSSgpXG5cbiAgLy8gU2V0dXAgY2F0ZWdvcmllc1xuICBmb3IgKGNvbnN0IGxpIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgXCIjd2FyZHJvYmUtbWVudT5saSwgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcmllcyBsaVwiXG4gICkpIHtcbiAgICBjb25zdCB7IGNhdGVnb3J5IH0gPSBsaS5kYXRhc2V0XG4gICAgaWYgKCFpc0VudW0oY2F0ZWdvcnksIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUpKSBjb250aW51ZVxuXG4gICAgc3dpdGNoIChjYXRlZ29yeSkge1xuICAgICAgY2FzZSBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmJhY2tncm91bmQ6XG4gICAgICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PlxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZWUtY2F0ZWdvcnlcIik/LnJlbW92ZSgpXG4gICAgICAgIClcbiAgICAgICAgY29udGludWVcbiAgICAgIGNhc2UgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5mYXZvcml0ZXM6XG4gICAgICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1jYXRlZ29yeVwiKT8ucmVtb3ZlKClcbiAgICAgICAgICB2b2lkIGhhbmRsZUNhdGVnb3J5KGNhdGVnb3J5KVxuICAgICAgICB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgY2FzZSBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmF0dGljOlxuICAgICAgICBjb250aW51ZVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICBkb2N1bWVudFxuICAgICAgICAgICAgLmdldEVsZW1lbnRCeUlkKFwiYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXNcIilcbiAgICAgICAgICAgID8ucmVtb3ZlKClcbiAgICAgICAgICB2b2lkIGhhbmRsZUNhdGVnb3J5KGNhdGVnb3J5KVxuICAgICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSlcbiAgYXdhaXQgbG9hZEJhY2tncm91bmQoKVxufVxuXG4vKipcbiAqIEdldCB0aGUgY2F0ZWdvcnkgY29udGFpbmVyIGZvciB0aGUgY2xpY2tlZCBjYXRlZ29yeSBhbmQgbG9hZCBpdHMgZ3JvdXBzXG4gKiBAcmV0dXJucyBDYXRlZ29yeSBjb250YWluZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQ2F0ZWdvcnkoXG4gIGNhdGVnb3J5OiBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlXG4pOiBQcm9taXNlPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4ge1xuICBjb25zdCBhcHBlYXJhbmNlSXRlbXMgPVxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2FwcGVhcmFuY2UtaXRlbXNcIilcbiAgaWYgKCFhcHBlYXJhbmNlSXRlbXMpIHJldHVybiBudWxsXG5cbiAgY29uc3Qgb2xkQ2F0Q29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LSR7Y2F0ZWdvcnl9YFxuICApXG5cbiAgaWYgKG9sZENhdENvbnRhaW5lcikge1xuICAgIGF3YWl0IG9uQXBwZWFyYW5jZUl0ZW1zQ2F0ZWdvcnkoY2F0ZWdvcnksIGFwcGVhcmFuY2VJdGVtcywgb2xkQ2F0Q29udGFpbmVyKVxuICAgIHJldHVybiBvbGRDYXRDb250YWluZXJcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigoXywgb2JzZXJ2ZXIpID0+IHtcbiAgICAgIGNvbnN0IG5ld0NhdENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktJHtjYXRlZ29yeX1gXG4gICAgICApXG4gICAgICBpZiAoIW5ld0NhdENvbnRhaW5lcikgcmV0dXJuXG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KClcblxuICAgICAgdm9pZCAoYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBhd2FpdCBvbkFwcGVhcmFuY2VJdGVtc0NhdGVnb3J5KFxuICAgICAgICAgIGNhdGVnb3J5LFxuICAgICAgICAgIGFwcGVhcmFuY2VJdGVtcyxcbiAgICAgICAgICBuZXdDYXRDb250YWluZXJcbiAgICAgICAgKVxuICAgICAgICByZXNvbHZlKG5ld0NhdENvbnRhaW5lcilcbiAgICAgIH0pKClcbiAgICB9KS5vYnNlcnZlKGFwcGVhcmFuY2VJdGVtcywgeyBjaGlsZExpc3Q6IHRydWUgfSlcbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gb25BcHBlYXJhbmNlSXRlbXNDYXRlZ29yeShcbiAgY2F0ZWdvcnk6IEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUsXG4gIGFwcGVhcmFuY2VJdGVtczogSFRNTERpdkVsZW1lbnQsXG4gIGNhdGVnb3J5Q29udGFpbmVyOiBIVE1MRGl2RWxlbWVudFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChjYXRlZ29yeSA9PT0gQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5mYXZvcml0ZXMpIGxvYWRGYXZvdXJpdGVzKClcbiAgZWxzZSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIyMCkpXG4gICAgbG9hZEVlSXRlbXMoYXBwZWFyYW5jZUl0ZW1zLCBjYXRlZ29yeUNvbnRhaW5lcilcbiAgICBhd2FpdCBoYW5kbGVHcm91cHMoY2F0ZWdvcnlDb250YWluZXIpXG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZEVlSXRlbXMoXG4gIGFwcGVhcmFuY2VJdGVtczogSFRNTERpdkVsZW1lbnQsXG4gIGNhdGVnb3J5Q29udGFpbmVyOiBIVE1MRGl2RWxlbWVudFxuKTogSFRNTERpdkVsZW1lbnQgfCBudWxsIHtcbiAgLy8gR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGNhdGVnb3J5XG4gIGNvbnN0IGFwcGVhcmFuY2VDYXRlZ29yeSA9IGNhdGVnb3J5Q29udGFpbmVyRGF0YVNldChjYXRlZ29yeUNvbnRhaW5lcilcbiAgaWYgKCFhcHBlYXJhbmNlQ2F0ZWdvcnkpIHJldHVybiBudWxsXG4gIHdhcmRyb2JlLnNldENhdGVnb3J5KGFwcGVhcmFuY2VDYXRlZ29yeSlcbiAgY2F0ZWdvcnlDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuICBjYXRlZ29yeUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcblxuICAvLyBTZXR1cCBhcHBlYXJhbmNlX2l0ZW1zX2NhdGVnb3J5XG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW1zX2NhdGVnb3J5Lmh0bWxcIilcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1jYXRlZ29yeVwiKT8ucmVtb3ZlKClcbiAgYXBwZWFyYW5jZUl0ZW1zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcih7IC4uLmFwcGVhcmFuY2VDYXRlZ29yeSwgdHJhbnNsYXRlIH0pXG4gIClcblxuICBjb25zdCBlZUl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjZWUtaXRlbXNcIilcbiAgaWYgKCFlZUl0ZW1zKSByZXR1cm4gbnVsbFxuICBlZUl0ZW1zLmRhdGFzZXQuY2F0ZWdvcnlpZCA9IGFwcGVhcmFuY2VDYXRlZ29yeS5jYXRlZ29yeWlkLnRvU3RyaW5nKClcbiAgZWVJdGVtcy5kYXRhc2V0LmNhdGVnb3J5ID0gYXBwZWFyYW5jZUNhdGVnb3J5LmNhdGVnb3J5XG4gIGVlSXRlbXMuZGF0YXNldC5jYXRlZ29yeW5hbWUgPSBhcHBlYXJhbmNlQ2F0ZWdvcnkuY2F0ZWdvcnluYW1lXG4gIHJldHVybiBlZUl0ZW1zXG59XG5cbmNvbnN0IGhhbmRsZWRDYXRlZ29yaWVzID0gbmV3IFNldDxBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlPigpXG5cbi8qKiBMb2FkIGVhY2ggZ3JvdXBzIHN5bmNocm9ub3VzbHkgYW5kIGFkZCB0aGVtIHRvIGEgY3VzdG9tIGNvbnRhaW5lci4gKi9cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUdyb3VwcyhjYXRlZ29yeUNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYXBwZWFyYW5jZUNhdGVnb3J5ID0gY2F0ZWdvcnlDb250YWluZXJEYXRhU2V0KGNhdGVnb3J5Q29udGFpbmVyKVxuICBpZiAoIWFwcGVhcmFuY2VDYXRlZ29yeSkgcmV0dXJuXG4gIHdhcmRyb2JlLnNldENhdGVnb3J5KGFwcGVhcmFuY2VDYXRlZ29yeSlcbiAgY2F0ZWdvcnlDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuICBjYXRlZ29yeUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcblxuICBjb25zdCBoYW5kbGVkID0gaGFuZGxlZENhdGVnb3JpZXMuaGFzKGFwcGVhcmFuY2VDYXRlZ29yeS5jYXRlZ29yeSlcbiAgaGFuZGxlZENhdGVnb3JpZXMuYWRkKGFwcGVhcmFuY2VDYXRlZ29yeS5jYXRlZ29yeSlcblxuICBsb2FkSGlkZGVuQ2F0ZWdvcnkoYXBwZWFyYW5jZUNhdGVnb3J5LmNhdGVnb3J5KVxuICBmb3IgKGNvbnN0IGxpIG9mIGNhdGVnb3J5Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgXCJsaS5hcHBlYXJhbmNlLWl0ZW0tZ3JvdXBcIlxuICApKSB7XG4gICAgY29uc3QgYXBwZWFyYW5jZUdyb3VwID0gY2F0ZWdvcnlHcm91cERhdGFTZXQobGksIGFwcGVhcmFuY2VDYXRlZ29yeSlcbiAgICBpZiAoIWFwcGVhcmFuY2VHcm91cD8uZ3JvdXApIGJyZWFrXG4gICAgd2FyZHJvYmUuc2V0R3JvdXAoYXBwZWFyYW5jZUdyb3VwKVxuXG4gICAgaWYgKFxuICAgICAgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAjYXBwZWFyYW5jZS1pdGVtcy1ncm91cC0ke2FwcGVhcmFuY2VHcm91cC5ncm91cH1gXG4gICAgICApICYmXG4gICAgICAhaGFuZGxlZFxuICAgICAgLy8gJiYgIWxvYWRIaWRkZW5Hcm91cChhcHBlYXJhbmNlR3JvdXAuZ3JvdXApXG4gICAgKVxuICAgICAgYXdhaXQgb3Blbkdyb3VwKGFwcGVhcmFuY2VHcm91cC5ncm91cClcblxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLSR7YXBwZWFyYW5jZUdyb3VwLmdyb3VwfWBcbiAgICApXG4gICAgaWYgKCFkaXYpIGJyZWFrXG4gICAgZGl2LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIilcblxuICAgIGNvbnN0IHNjcmlwdCA9IGRpdi5xdWVyeVNlbGVjdG9yKFwic2NyaXB0XCIpIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW1wbGllZC1ldmFsXG4gICAgaWYgKHNjcmlwdCkgc2V0VGltZW91dChzY3JpcHQuaW5uZXJIVE1MLCAwKVxuXG4gICAgY29uc3Qgb3V0ZXJIVE1MID0gQXJyYXkuZnJvbShcbiAgICAgIGRpdi5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFwibGkuYXBwZWFyYW5jZS1pdGVtXCIpXG4gICAgKVxuICAgICAgLm1hcChsaSA9PiB7XG4gICAgICAgIGNvbnN0IGFwcGVhcmFuY2VJdGVtID0gaXRlbURhdGFTZXQobGksIGFwcGVhcmFuY2VHcm91cClcbiAgICAgICAgaWYgKCFhcHBlYXJhbmNlSXRlbT8uaWNvbikgcmV0dXJuIGxpLm91dGVySFRNTFxuXG4gICAgICAgIGxpLmRhdGFzZXQuY2F0ZWdvcnlpZCA9IGFwcGVhcmFuY2VJdGVtLmNhdGVnb3J5aWQudG9TdHJpbmcoKVxuICAgICAgICBsaS5kYXRhc2V0LmNhdGVnb3J5ID0gYXBwZWFyYW5jZUl0ZW0uY2F0ZWdvcnlcbiAgICAgICAgbGkuZGF0YXNldC5jYXRlZ29yeW5hbWUgPSBhcHBlYXJhbmNlSXRlbS5jYXRlZ29yeW5hbWVcbiAgICAgICAgbGkuZGF0YXNldC5ncm91cCA9IGFwcGVhcmFuY2VJdGVtLmdyb3VwLnRvU3RyaW5nKClcbiAgICAgICAgd2FyZHJvYmUuc2V0SXRlbShhcHBlYXJhbmNlSXRlbSlcblxuICAgICAgICByZXR1cm4gbGkub3V0ZXJIVE1MXG4gICAgICB9KVxuICAgICAgLmpvaW4oXCJcXG5cIilcbiAgICB3YXJkcm9iZS5hdmFpbGFibGVJdGVtcyA9IGF2YWlsYWJsZUl0ZW1zXG5cbiAgICBkaXYucmVtb3ZlKClcblxuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBgI3dhcmRyb2JlLW1lbnUgbGlbZGF0YS1jYXRlZ29yeT1cIiR7YXBwZWFyYW5jZUdyb3VwLmNhdGVnb3J5fVwiXS5hY3RpdmVgXG4gICAgKVxuXG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgZG9jdW1lbnRcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2VlLWl0ZW1zXCIpXG4gICAgICAgID8uaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlZW5kXCIsIG91dGVySFRNTClcblxuICAgICAgaW5pdGlhbGl6ZVNlbGVjdGVkSXRlbXMoKVxuICAgICAgaW5pdGlhbGl6ZUhpZGRlbkNhdGVnb3JpZXMoKVxuICAgIH0gZWxzZSBpZiAoaGFuZGxlZCkgYnJlYWtcbiAgfVxuXG4gIGlmICghaGFuZGxlZCkgaGFuZGxlZENhdGVnb3JpZXMuZGVsZXRlKGFwcGVhcmFuY2VDYXRlZ29yeS5jYXRlZ29yeSlcbiAgdW5sb2FkSGlkZGVuQ2F0ZWdvcmllcygpXG59XG5cbmxldCBsb2FkaW5nID0gZmFsc2VcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRCYWNrZ3JvdW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAobG9hZGluZykgcmV0dXJuXG4gIGxvYWRpbmcgPSB0cnVlXG4gIGxldCBzdWNjZXNzID0gdHJ1ZVxuXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBbXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS51bmRlcndlYXIsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5za2luLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUudGF0b28sXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5tb3V0aCxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmV5ZSxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmhhaXIsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5zb2NrLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuc2hvZSxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLnBhbnRzLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuaGFuZEFjY2Vzc29yeSxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLnRvcCxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmNvYXQsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5nbG92ZSxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLm5lY2tsYWNlLFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuZHJlc3MsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5oYXQsXG4gICAgQXBwZWFyYW5jZUNhdGVnb3J5Q29kZS5mYWNlQWNjZXNzb3J5LFxuICAgIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUuYmVsdCxcbiAgICBBcHBlYXJhbmNlQ2F0ZWdvcnlDb2RlLmFtYmllbnQsXG4gIF1cblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcblxuICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvcGxheWVyL2FwcGVhcmFuY2VcIikpIHtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYCN3YXJkcm9iZS1tZW51IGxpW2RhdGEtY2F0ZWdvcnk9XCIke2NhdGVnb3J5fVwiXS5hY3RpdmVgXG4gICAgKVxuICAgIGlmIChhY3RpdmUpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBjYXRlZ29yeUNvbnRhaW5lciA9IGF3YWl0IG9wZW5DYXRlZ29yeShjYXRlZ29yeSlcbiAgICBpZiAoIWNhdGVnb3J5Q29udGFpbmVyKSB7XG4gICAgICBzdWNjZXNzID0gZmFsc2VcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgbGV0IGZpbmlzaGVkID0gZmFsc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghZmluaXNoZWQpXG4gICAgICAgICQuZmxhdnJOb3RpZihcbiAgICAgICAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgICAgICAgaWNvbjogYC9zdGF0aWMvaW1nL21hbGwvY2F0ZWdvcmllcy8ke2NhdGVnb3J5fS5wbmdgLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJhbnNsYXRlLmFwcGVhcmFuY2UubG9hZGluZyhcbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MTElFbGVtZW50PihcbiAgICAgICAgICAgICAgICBgI3dhcmRyb2JlLW1lbnUgbGlbZGF0YS1jYXRlZ29yeT1cIiR7Y2F0ZWdvcnl9XCJdYFxuICAgICAgICAgICAgICApPy5kYXRhc2V0LmNhdGVnb3J5bmFtZSA/PyBjYXRlZ29yeVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgfSwgMTAwMClcblxuICAgIGF3YWl0IGhhbmRsZUdyb3VwcyhjYXRlZ29yeUNvbnRhaW5lcilcbiAgICBmaW5pc2hlZCA9IHRydWVcbiAgfVxuXG4gIGlmIChzdWNjZXNzKSAkLmZsYXZyTm90aWYodHJhbnNsYXRlLmFwcGVhcmFuY2UubG9hZGVkKVxuICBsb2FkaW5nID0gZmFsc2Vcbn1cbiIsImV4cG9ydCBlbnVtIEFwcGVhcmFuY2VDYXRlZ29yeUNvZGUge1xuICBhdHRpYyA9IFwiYXR0aWNcIixcbiAgZmF2b3JpdGVzID0gXCJmYXZvcml0ZXNcIixcbiAgdW5kZXJ3ZWFyID0gXCJ1bmRlcndlYXJcIixcbiAgc2tpbiA9IFwic2tpblwiLFxuICB0YXRvbyA9IFwidGF0b29cIixcbiAgbW91dGggPSBcIm1vdXRoXCIsXG4gIGV5ZSA9IFwiZXllXCIsXG4gIGhhaXIgPSBcImhhaXJcIixcbiAgc29jayA9IFwic29ja1wiLFxuICBzaG9lID0gXCJzaG9lXCIsXG4gIHBhbnRzID0gXCJwYW50c1wiLFxuICBoYW5kQWNjZXNzb3J5ID0gXCJoYW5kQWNjZXNzb3J5XCIsXG4gIHRvcCA9IFwidG9wXCIsXG4gIGNvYXQgPSBcImNvYXRcIixcbiAgZ2xvdmUgPSBcImdsb3ZlXCIsXG4gIG5lY2tsYWNlID0gXCJuZWNrbGFjZVwiLFxuICBkcmVzcyA9IFwiZHJlc3NcIixcbiAgaGF0ID0gXCJoYXRcIixcbiAgZmFjZUFjY2Vzc29yeSA9IFwiZmFjZUFjY2Vzc29yeVwiLFxuICBiYWNrZ3JvdW5kID0gXCJiYWNrZ3JvdW5kXCIsXG4gIGJlbHQgPSBcImJlbHRcIixcbiAgYW1iaWVudCA9IFwiYW1iaWVudFwiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IGluZGV4ZWRfZGIgZnJvbSBcIi4uL2luZGV4ZWRfZGIvaW5kZXhlZF9kYlwiXG5pbXBvcnQgeyBwYXJzZUF2YXRhciB9IGZyb20gXCIuLi9vdXRmaXRcIlxuaW1wb3J0IHsgbG9hZEZha2VGYXZvdXJpdGVzIH0gZnJvbSBcIi4uL3VpL2Zhdm91cml0ZXNcIlxuaW1wb3J0IHsgd2Vhck91dGZpdCB9IGZyb20gXCIuL2Zhdm91cml0ZXNfYWN0aW9uc1wiXG5pbXBvcnQgdHlwZSB7IEZhdm91cml0ZU91dGZpdCB9IGZyb20gXCIuL2ludGVyZmFjZXMvZmF2b3VyaXRlX291dGZpdFwiXG5pbXBvcnQgdHlwZSB7IFBhcnNhYmxlSXRlbSB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGFyc2FibGVfaXRlbVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlRmF2b3VyaXRlKCk6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0IHwgbnVsbD4ge1xuICBjb25zdCBmYXZvdXJpdGUgPSBhd2FpdCBzaG93T3V0Zml0KClcbiAgaWYgKGZhdm91cml0ZSkgYXdhaXQgbG9hZEZha2VGYXZvdXJpdGVzKClcbiAgcmV0dXJuIGZhdm91cml0ZVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVGYXZvdXJpdGUoZmF2b3VyaXRlOiBGYXZvdXJpdGVPdXRmaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgaW5kZXhlZF9kYi5kZWxldGVGYXZvdXJpdGVPdXRmaXQoZmF2b3VyaXRlKVxuICBhd2FpdCBsb2FkRmFrZUZhdm91cml0ZXMoKVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93T3V0Zml0KCk6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0IHwgbnVsbD4ge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvY3JlYXRlZF9vdXRmaXRfZmxhdnIuaHRtbFwiKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+XG4gICAgJC5mbGF2cih7XG4gICAgICBjb250ZW50OiB0ZW1wbGF0ZS5yZW5kZXIoeyB0cmFuc2xhdGUgfSksXG4gICAgICBvbkJ1aWxkOiAkY29udGFpbmVyID0+IHtcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcImNyZWF0ZWQtb3V0Zml0LXBvcHVwXCIpXG5cbiAgICAgICAgY29uc3Qgc2F2ZUJ1dHRvbiA9XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oJ1tyZWw9XCJidG4tc2F2ZVwiXScpXG4gICAgICAgIGlmICghc2F2ZUJ1dHRvbikgcmV0dXJuXG5cbiAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIiNjaG9vc2UtbmFtZVwiKVxuICAgICAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikgc2F2ZUJ1dHRvbi5jbGljaygpXG5cbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiI2Nob29zZS1uYW1lXCIpPy52YWx1ZSlcbiAgICAgICAgICAgICAgc2F2ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwiZGlzYWJsZWRcIilcbiAgICAgICAgICAgIGVsc2Ugc2F2ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRcIilcbiAgICAgICAgICB9KVxuXG4gICAgICAgIHNhdmVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm5sLWJ1dHRvblwiLCBcIm5sLWJ1dHRvbi1sZ1wiLCBcImRpc2FibGVkXCIpXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBjbG9zZToge1xuICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgc3R5bGU6IFwiY2xvc2VcIixcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2F2ZToge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQuc2F2ZSxcbiAgICAgICAgICBzdHlsZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIiNjaG9vc2UtbmFtZVwiKT8udmFsdWVcbiAgICAgICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgIGNvbnN0IGF2YXRhciA9IFNhY2hhLkF2YXRhci5hdmF0YXJzW1wiI2FwcGVhcmFuY2UtcHJldmlld1wiXVxuICAgICAgICAgICAgaWYgKCFhdmF0YXIpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBwYXJzZUF2YXRhcihhdmF0YXIpXG5cbiAgICAgICAgICAgIHZvaWQgc2F2ZUFjdGlvbihuYW1lLCBpdGVtcywgcmVzb2x2ZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvd0Zhdm91cml0ZShmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdCk6IHZvaWQge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmF2b3VyaXRlX291dGZpdF9mbGF2ci5odG1sXCIpXG5cbiAgJC5mbGF2cih7XG4gICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgLi4uZmF2b3VyaXRlLCB0cmFuc2xhdGUgfSksXG4gICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XG4gICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwibmV3LWxheW91dC1wb3B1cFwiKVxuICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcImNyZWF0ZWQtb3V0Zml0LXBvcHVwXCIpXG4gICAgfSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbG9zZToge1xuICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICBzdHlsZTogXCJjbG9zZVwiLFxuICAgICAgICBhY3Rpb246ICgpID0+IHRydWUsXG4gICAgICB9LFxuICAgICAgZGVsZXRlOiB7XG4gICAgICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LmRlbGV0ZSxcbiAgICAgICAgc3R5bGU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICB2b2lkIGRlbGV0ZUZhdm91cml0ZShmYXZvdXJpdGUpXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB3ZWFyOiB7XG4gICAgICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LndlYXIsXG4gICAgICAgIHN0eWxlOiBcImRlZmF1bHRcIixcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gICAgICAgICAgaWYgKCFhdmF0YXIpIHJldHVybiBmYWxzZVxuXG4gICAgICAgICAgdm9pZCAoYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT5cbiAgICAgICAgICAgIHdlYXJPdXRmaXQoYXZhdGFyLCBmYXZvdXJpdGUuaXRlbXMpKSgpXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlQWN0aW9uKFxuICBuYW1lOiBzdHJpbmcsXG4gIGl0ZW1zOiBQYXJzYWJsZUl0ZW1bXSxcbiAgcmVzb2x2ZTogKHZhbHVlOiBGYXZvdXJpdGVPdXRmaXQpID0+IHZvaWRcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBibG9iID0gYXdhaXQgbmV3IFByb21pc2U8QmxvYj4ocmVzb2x2ZSA9PiB7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcIiNhcHBlYXJhbmNlLXByZXZpZXcgY2FudmFzXCIpXG4gICAgICA/LnRvQmxvYihibG9iID0+IHJlc29sdmUoYmxvYiEpLCBcImltYWdlL3BuZ1wiLCAxKVxuICB9KVxuXG4gIHJlc29sdmUoe1xuICAgIC4uLihhd2FpdCBpbmRleGVkX2RiLmFkZEZhdm91cml0ZU91dGZpdCh7XG4gICAgICBpdGVtcyxcbiAgICAgIG5hbWUsXG4gICAgICBibG9iLFxuICAgIH0pKSxcbiAgICB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IEF2YXRhciB9IGZyb20gXCIuLi9lbGRhcnlhL2F2YXRhclwiXG5pbXBvcnQgdHlwZSB7IEl0ZW0gfSBmcm9tIFwiLi4vZWxkYXJ5YS9pdGVtXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBleHBvcnRPdXRmaXQgfSBmcm9tIFwiLi4vb3V0Zml0XCJcbmltcG9ydCB0eXBlIHsgUGFyc2FibGVJdGVtIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9wYXJzYWJsZV9pdGVtXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydFByZXZpZXcoKTogdm9pZCB7XG4gIGV4cG9ydE91dGZpdChcIiNhcHBlYXJhbmNlLXByZXZpZXdcIilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGltcG9ydE91dGZpdCgpOiB2b2lkIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImZpbGVcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwiYWNjZXB0XCIsIFwiYXBwbGljYXRpb24vanNvblwiKVxuICBpbnB1dC5jbGljaygpXG5cbiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGV2ZW50ID0+IHtcbiAgICBpZiAoIWV2ZW50LnRhcmdldCkgcmV0dXJuXG4gICAgY29uc3QgZmlsZXMgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cbiAgICB2b2lkIGZpbGUudGV4dCgpLnRoZW4oYXN5bmMgdmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IG91dGZpdDogUGFyc2FibGVJdGVtW10gPSBKU09OLnBhcnNlKHZhbHVlKVxuICAgICAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gICAgICBpZiAoIWF2YXRhcikgcmV0dXJuXG5cbiAgICAgIGF3YWl0IHdlYXJPdXRmaXQoYXZhdGFyLCBvdXRmaXQpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2xvdGhlcygpOiB2b2lkIHtcbiAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gIGlmICghYXZhdGFyKSByZXR1cm5cblxuICBmb3IgKGxldCBpID0gYXZhdGFyLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaXRlbVJlbmRlciA9IGF2YXRhci5jaGlsZHJlbltpXVxuICAgIGlmICghaXRlbVJlbmRlcikgY29udGludWVcblxuICAgIGNvbnN0IGl0ZW0gPSBpdGVtUmVuZGVyLmdldEl0ZW0oKVxuICAgIGlmIChTYWNoYS5BdmF0YXIucmVtb3ZlSXRlbUZyb21BbGxBdmF0YXJzKGl0ZW0pKSB7XG4gICAgICAkKGAjYXBwZWFyYW5jZS1pdGVtLSR7aXRlbS5faWR9YCkucmVtb3ZlQ2xhc3MoXCJzZWxlY3RlZFwiKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3Blbkdyb3VwKGdyb3VwOiBudW1iZXIpOiBQcm9taXNlPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8SFRNTERpdkVsZW1lbnQgfCBudWxsPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGdyb3VwQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtZ3JvdXAtJHtncm91cH1gXG4gICAgKVxuICAgIGlmIChncm91cENvbnRhaW5lcikgcmV0dXJuIHZvaWQgcmVzb2x2ZShncm91cENvbnRhaW5lcilcblxuICAgIHZvaWQgJC5nZXQoYC9wbGF5ZXIvb3Blbkdyb3VwLyR7Z3JvdXB9YCwgKHZpZXc6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgJCh2aWV3KS5oaWRlKCkuYXBwZW5kVG8oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICAgICAgcmVzb2x2ZShcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLSR7Z3JvdXB9YFxuICAgICAgICApXG4gICAgICApXG4gICAgfSlcbiAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5DYXRlZ29yeShcbiAgY2F0ZWdvcnk6IHN0cmluZ1xuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudCB8IG51bGw+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICBjb25zdCBjYXRlZ29yeUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LSR7Y2F0ZWdvcnl9YFxuICAgIClcbiAgICBpZiAoY2F0ZWdvcnlDb250YWluZXIpIHJldHVybiB2b2lkIHJlc29sdmUoY2F0ZWdvcnlDb250YWluZXIpXG5cbiAgICB2b2lkICQucG9zdChgL3BsYXllci9vcGVuQ2F0ZWdvcnkvJHtjYXRlZ29yeX1gLCAodmlldzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAkKHZpZXcpLmhpZGUoKS5hcHBlbmRUbyhcIiNhcHBlYXJhbmNlLWl0ZW1zXCIpXG4gICAgICByZXNvbHZlKFxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktJHtjYXRlZ29yeX1gXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9KVxuICB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2Vhck91dGZpdChcbiAgYXZhdGFyOiBBdmF0YXIsXG4gIG91dGZpdDogUGFyc2FibGVJdGVtW11cbik6IFByb21pc2U8dm9pZD4ge1xuICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5pbXBvcnRpbmcpXG5cbiAgLy8gR2V0IGFsbCBjYXRlZ29yaWVzXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdClcbiAgICBpZiAoIWF2YWlsYWJsZUl0ZW1zW2Nsb3RoaW5nLmlkXSkgY2F0ZWdvcmllcy5hZGQoY2xvdGhpbmcudHlwZSlcblxuICAvLyBPcGVuIGFsbCBjYXRlZ29yaWVzXG4gIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20oY2F0ZWdvcmllcy52YWx1ZXMoKSkubWFwKGFzeW5jIGNhdGVnb3J5ID0+XG4gICAgICBvcGVuQ2F0ZWdvcnkoY2F0ZWdvcnkpXG4gICAgKVxuICApXG5cbiAgLy8gR2V0IGFsbCBncm91cHNcbiAgY29uc3QgZ3JvdXBzID0gbmV3IFNldDxudW1iZXI+KClcbiAgZm9yIChjb25zdCBjbG90aGluZyBvZiBvdXRmaXQpXG4gICAgaWYgKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtZ3JvdXA9XCIke2Nsb3RoaW5nLmdyb3VwfVwiXWApICYmXG4gICAgICAhYXZhaWxhYmxlSXRlbXNbY2xvdGhpbmcuaWRdXG4gICAgKVxuICAgICAgZ3JvdXBzLmFkZChjbG90aGluZy5ncm91cClcblxuICAvLyBPcGVuIGFsbCBncm91cHNcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShncm91cHMudmFsdWVzKCkpLm1hcChhc3luYyBncm91cCA9PiBvcGVuR3JvdXAoZ3JvdXApKVxuICApXG5cbiAgLy8gR2V0IHRoZSBpdGVtcyBmcm9tIGBhdmFpbGFibGVJdGVtc2BcbiAgY29uc3Qgd29ybkl0ZW1zOiBJdGVtW10gPSBbXVxuICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdCkge1xuICAgIGNvbnN0IGl0ZW0gPSBhdmFpbGFibGVJdGVtc1tjbG90aGluZy5pZF1cbiAgICBpZiAoaXRlbSkgd29ybkl0ZW1zLnB1c2goaXRlbSlcbiAgfVxuXG4gIHJlbW92ZUNsb3RoZXMoKVxuICBhdmF0YXIuYWRkSXRlbXMod29ybkl0ZW1zKVxuICBpbml0aWFsaXplU2VsZWN0ZWRJdGVtcygpXG4gIGluaXRpYWxpemVIaWRkZW5DYXRlZ29yaWVzKClcblxuICBjb25zdCBhdmF0YXJBY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhdmF0YXItYWN0aW9uc1wiKVxuICBpZiAoYXZhdGFyQWN0aW9ucykgYXZhdGFyQWN0aW9ucy5zdHlsZS5kaXNwbGF5ID0gXCJpbml0aWFsXCJcblxuICAkLmZsYXZyTm90aWYodHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5pbXBvcnRlZClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9jYXRlZ29yeVwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VHcm91cCB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hcHBlYXJhbmNlX2dyb3VwXCJcbmltcG9ydCB3YXJkcm9iZSBmcm9tIFwiLi93YXJkcm9iZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiB1bmxvYWRIaWRkZW5DYXRlZ29yaWVzKCk6IHZvaWQge1xuICBjb25zdCBoaWRkZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIiNhcHBlYXJhbmNlLWl0ZW1zIC5hcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5Om5vdCguYWN0aXZlKTpub3QoW2RhdGEtY2F0ZWdvcnluYW1lXSksICNhcHBlYXJhbmNlLWl0ZW1zIHNjcmlwdCwgYm9keT5zY3JpcHRcIlxuICApXG4gIGZvciAoY29uc3QgZGl2IG9mIGhpZGRlbikge1xuICAgIGRpdi5yZW1vdmUoKVxuICB9XG59XG5cbi8qKlxuICogUGxhY2UgdGhlIHNhdmVkIGdyb3VwcyBvbiB0aGUgRE9NIGFzIGlmIGl0IHdhcyBFbGRhcnlhIGRvaW5nIGl0LlxuICogQHJldHVybnMgdGhlIGFzc29jaWF0ZWQgYEFwcGVhcmFuY2VDYXRlZ29yeWAgaWYgaXQncyBmb3VuZCBpbiB0aGUgd2FyZHJvYmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkSGlkZGVuQ2F0ZWdvcnkoY29kZTogc3RyaW5nKTogQXBwZWFyYW5jZUNhdGVnb3J5IHwgbnVsbCB7XG4gIGNvbnN0IGNhdGVnb3J5ID0gd2FyZHJvYmUuZ2V0Q2F0ZWdvcmllcygpLmZpbmQoYyA9PiBjLmNhdGVnb3J5ID09PSBjb2RlKVxuICBpZiAoIWNhdGVnb3J5KSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGdyb3VwcyA9IHdhcmRyb2JlLmdldENhdGVnb3J5R3JvdXBzKGNhdGVnb3J5LmNhdGVnb3J5aWQpXG4gIGNvbnN0IGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtLmh0bWxcIilcbiAgY29uc3QgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19ncm91cC5odG1sXCIpXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2FwcGVhcmFuY2UtaXRlbXNcIilcbiAgICA/Lmluc2VydEFkamFjZW50SFRNTChcbiAgICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgICBncm91cHNcbiAgICAgICAgLm1hcChncm91cCA9PlxuICAgICAgICAgIGdyb3VwVGVtcGxhdGUucmVuZGVyKHtcbiAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgaXRlbXM6IHdhcmRyb2JlXG4gICAgICAgICAgICAgIC5nZXRJdGVtcyhncm91cC5ncm91cClcbiAgICAgICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW1UZW1wbGF0ZS5yZW5kZXIoaXRlbSkpXG4gICAgICAgICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oXCJcXG5cIilcbiAgICApXG4gIHJldHVybiBjYXRlZ29yeVxufVxuXG4vKipcbiAqIExvYWQgdGhlIHNhdmVkIGdyb3VwIG9uIHRoZSBET00gYXMgaWYgaXQgd2FzIEVsZGFyeWEgZG9pbmcgaXQuXG4gKiBAcmV0dXJucyB0aGUgYXNzb2NpYXRlZCBgQXBwZWFyYW5jZUdyb3VwYCBpZiBpdCdzIGZvdW5kIGluIHRoZSB3YXJkcm9iZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRIaWRkZW5Hcm91cChpZDogbnVtYmVyKTogQXBwZWFyYW5jZUdyb3VwIHwgbnVsbCB7XG4gIGNvbnN0IGdyb3VwID0gd2FyZHJvYmUuZ2V0R3JvdXAoaWQpXG4gIGlmICghZ3JvdXApIHJldHVybiBudWxsXG5cbiAgY29uc3QgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW0uaHRtbFwiKVxuICBjb25zdCBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hcHBlYXJhbmNlX2l0ZW1zX2dyb3VwLmh0bWxcIilcbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICAgID8uaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgICAgXCJiZWZvcmVlbmRcIixcbiAgICAgIGdyb3VwVGVtcGxhdGUucmVuZGVyKHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIGl0ZW1zOiB3YXJkcm9iZVxuICAgICAgICAgIC5nZXRJdGVtcyhncm91cC5ncm91cClcbiAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbVRlbXBsYXRlLnJlbmRlcihpdGVtKSlcbiAgICAgICAgICAuam9pbihcIlxcblwiKSxcbiAgICAgIH0pXG4gICAgKVxuICByZXR1cm4gZ3JvdXBcbn1cbiIsImltcG9ydCB0eXBlIHsgSXRlbSB9IGZyb20gXCIuLi9lbGRhcnlhL2l0ZW1cIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9jYXRlZ29yeVwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VHcm91cCB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9hcHBlYXJhbmNlX2dyb3VwXCJcbmltcG9ydCB0eXBlIHsgQXBwZWFyYW5jZUl0ZW0gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9pdGVtXCJcblxuY2xhc3MgV2FyZHJvYmUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3JpZXM6IFJlY29yZDxudW1iZXIsIEFwcGVhcmFuY2VDYXRlZ29yeT4gPSB7fVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBzOiBSZWNvcmQ8bnVtYmVyLCBBcHBlYXJhbmNlR3JvdXA+ID0ge31cblxuICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zOiBSZWNvcmQ8bnVtYmVyLCBBcHBlYXJhbmNlSXRlbT4gPSB7fVxuXG4gIGF2YWlsYWJsZUl0ZW1zPzogUmVjb3JkPG51bWJlciwgSXRlbT5cblxuICBnZXRDYXRlZ29yaWVzKCk6IEFwcGVhcmFuY2VDYXRlZ29yeVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNhdGVnb3JpZXMpXG4gIH1cblxuICBnZXRDYXRlZ29yeShpZDogbnVtYmVyKTogQXBwZWFyYW5jZUNhdGVnb3J5IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jYXRlZ29yaWVzW2lkXVxuICB9XG5cbiAgZ2V0Q2F0ZWdvcnlHcm91cHMoY2F0ZWdvcnlpZDogbnVtYmVyKTogQXBwZWFyYW5jZUdyb3VwW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZ3JvdXBzKS5maWx0ZXIoXG4gICAgICBncm91cCA9PiBncm91cC5jYXRlZ29yeWlkID09PSBjYXRlZ29yeWlkXG4gICAgKVxuICB9XG5cbiAgZ2V0R3JvdXAoaWQ6IG51bWJlcik6IEFwcGVhcmFuY2VHcm91cCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzW2lkXVxuICB9XG5cbiAgZ2V0R3JvdXBzKCk6IEFwcGVhcmFuY2VHcm91cFtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwcylcbiAgfVxuXG4gIGdldEl0ZW0oaWQ6IG51bWJlcik6IEFwcGVhcmFuY2VJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1tpZF1cbiAgfVxuXG4gIGdldEl0ZW1zKGdyb3VwOiBudW1iZXIpOiBBcHBlYXJhbmNlSXRlbVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLml0ZW1zKS5maWx0ZXIoaXRlbSA9PiBpdGVtLmdyb3VwID09PSBncm91cClcbiAgfVxuXG4gIHNldENhdGVnb3J5KGNhdGVnb3J5OiBBcHBlYXJhbmNlQ2F0ZWdvcnkpOiB2b2lkIHtcbiAgICB0aGlzLmNhdGVnb3JpZXNbY2F0ZWdvcnkuY2F0ZWdvcnlpZF0gPSBjYXRlZ29yeVxuICB9XG5cbiAgc2V0R3JvdXAoZ3JvdXA6IEFwcGVhcmFuY2VHcm91cCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzW2dyb3VwLmdyb3VwXSA9IGdyb3VwXG4gIH1cblxuICBzZXRJdGVtKGl0ZW06IEFwcGVhcmFuY2VJdGVtKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtc1tpdGVtLml0ZW1pZF0gPSBpdGVtXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFdhcmRyb2JlKClcbiIsImltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IENhcm91c2VsTmV3cyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9jYXJvdXNlbF9uZXdzXCJcblxuZXhwb3J0IGNvbnN0IGNhcm91c2VsQmVlbW9vdkFubm95YW5jZXM6IENhcm91c2VsTmV3cyA9IHtcbiAgYmFja2dyb3VuZEltYWdlOlxuICAgIFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2Nhcm91c2VsX2JlZW1vb3ZfYW5ub3lhbmNlcy5wbmdcIixcbiAgaDQ6IHRyYW5zbGF0ZS5jYXJvdXNlbC5iZWVtb292X2Fubm95YW5jZXMudGl0bGUsXG4gIGhyZWY6IFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9CZWVtb292LUFubm95YW5jZXNcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtYmVlbW9vdi1hbm5veWFuY2VzXCIsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC5iZWVtb292X2Fubm95YW5jZXMuc3VidGl0bGUsXG59XG4iLCJpbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXG5cbmV4cG9ydCBjb25zdCBjYXJvdXNlbERvd25sb2FkRmFjZTogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZS5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZmFjZVwiLFxuICBoNDogdHJhbnNsYXRlLmNhcm91c2VsLmRvd25sb2FkX2ZhY2UudGl0bGUsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC5kb3dubG9hZF9mYWNlLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuOiBDYXJvdXNlbE5ld3MgPSB7XG4gIGJhY2tncm91bmRJbWFnZTpcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhbi5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZ3VhcmRpYW5cIixcbiAgaDQ6IHRyYW5zbGF0ZS5jYXJvdXNlbC5kb3dubG9hZF9ndWFyZGlhbi50aXRsZSxcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLmRvd25sb2FkX2d1YXJkaWFuLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxFRTogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZWxkYXJ5YV9lbmhhbmNlbWVudHMucG5nXCIsXG4gIGg0OiB0cmFuc2xhdGUuY2Fyb3VzZWwuZWxkYXJ5YV9lbmhhbmNlbWVudHMudGl0bGUsXG4gIGhyZWY6IEdNLmluZm8uc2NyaXB0Lm5hbWVzcGFjZSxcbiAgaWQ6IFwiY2Fyb3VzZWwtZWxkYXJ5YS1lbmhhbmNlbWVudHNcIixcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLmVsZGFyeWFfZW5oYW5jZW1lbnRzLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxUYWtlb3ZlcjogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfdGFrZW92ZXIucG5nXCIsXG4gIGlkOiBcImNhcm91c2VsLXRha2VvdmVyXCIsXG4gIGg0OiB0cmFuc2xhdGUuY2Fyb3VzZWwudGFrZW92ZXIudGl0bGUsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC50YWtlb3Zlci5zdWJ0aXRsZSxcbn1cbiIsImltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBjbGFzcyBDb25zb2xlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgY29uc29sZSA9IGNvbnNvbGVcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBwcml2YXRlIHN0YXRpYyBnZXQgZGVidWdnaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UuZGVidWdcbiAgfVxuXG4gIHN0YXRpYyBkZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cbiAgICB0aGlzLmNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBzdGF0aWMgZXJyb3IobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmVycm9yKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG5cbiAgc3RhdGljIGluZm8obWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmluZm8obWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBzdGF0aWMgbG9nKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5sb2cobWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cblxuICBzdGF0aWMgd2FybihtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cbiAgICB0aGlzLmNvbnNvbGUud2FybihtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuL2NvbnNvbGVcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4vaTE4bi90cmFuc2xhdGVcIlxuXG5mdW5jdGlvbiBkb3dubG9hZENhbnZhcyhjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgY2FudmFzLnRvQmxvYihcbiAgICBibG9iID0+IHtcbiAgICAgIGlmICghYmxvYikge1xuICAgICAgICBDb25zb2xlLmVycm9yKFwiQ2FudmFzIGlzIGVtcHR5XCIpXG4gICAgICAgICQuZmxhdnJOb3RpZih0cmFuc2xhdGUuZXJyb3IuZG93bmxvYWRDYW52YXMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKVxuICAgICAgYS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHVybClcbiAgICAgIGEuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgYCR7bmFtZX0ucG5nYClcbiAgICAgIGEuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKVxuXG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbiAgICB9LFxuICAgIFwiaW1hZ2UvcG5nXCIsXG4gICAgMVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEZhY2UoKTogdm9pZCB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxuICAgIFwiI2F2YXRhci1tZW51LWNvbnRhaW5lciBjYW52YXNcIlxuICApXG4gIGlmICghY2FudmFzKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ291bGRuJ3QgZmluZCB0aGUgZ3VhcmRpYW4ncyBmYWNlLlwiKVxuICAgIHJldHVyblxuICB9XG5cbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCBcImZhY2VcIilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkR3VhcmRpYW4oKTogdm9pZCB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxuICAgIFwiI2hvbWUtYXZhdGFyLXBsYXllciBjYW52YXNcIlxuICApXG4gIGlmICghY2FudmFzKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ291bGRuJ3QgZmluZCB0aGUgZ3VhcmRpYW4uXCIpXG4gICAgcmV0dXJuXG4gIH1cblxuICBkb3dubG9hZENhbnZhcyhjYW52YXMsIGdldE5hbWUoKSA/PyBcImd1YXJkaWFuXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEFwcGVhcmFuY2UoKTogdm9pZCB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxuICAgIFwiI2FwcGVhcmFuY2UtcHJldmlldyBjYW52YXNcIlxuICApXG4gIGlmICghY2FudmFzKSB7XG4gICAgY29uc29sZS53YXJuKFwiQ291bGRuJ3QgZmluZCB0aGUgZ3VhcmRpYW4uXCIpXG4gICAgcmV0dXJuXG4gIH1cblxuICBkb3dubG9hZENhbnZhcyhjYW52YXMsIGdldE5hbWUoKSA/PyBcImd1YXJkaWFuXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZFByb2ZpbGUoKTogdm9pZCB7XG4gIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTENhbnZhc0VsZW1lbnQ+KFxuICAgIFwiLnBsYXllclByb2ZpbGVBdmF0YXIgY2FudmFzXCJcbiAgKVxuICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEhlYWRpbmdFbGVtZW50PihcbiAgICBcIiNtYWluLXNlY3Rpb24gLnNlY3Rpb24tdGl0bGVcIlxuICApXG4gIGlmICghY2FudmFzIHx8ICF0aXRsZSkgcmV0dXJuXG5cbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCB0aXRsZS50ZXh0Q29udGVudD8udHJpbSgpID8/IFwiZ3VhcmRpYW5cIilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gIHJldHVybiAoXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhdmF0YXItbWVudS1jb250YWluZXItb3V0ZXI+cFwiKT8udGV4dENvbnRlbnQgPz9cbiAgICBudWxsXG4gIClcbn1cbiIsImV4cG9ydCBlbnVtIER1cmF0aW9uVW5pdCB7XG4gIG1pbGxpc2Vjb25kID0gMSxcbiAgc2Vjb25kID0gMTAwMCAqIG1pbGxpc2Vjb25kLFxuICBtaW51dGUgPSA2MCAqIHNlY29uZCxcbiAgaG91ciA9IDYwICogbWludXRlLFxuICBkYXkgPSAyNCAqIGhvdXIsXG4gIHdlZWsgPSA3ICogZGF5LFxufVxuXG5leHBvcnQgY2xhc3MgRHVyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSB2YWx1ZTogbnVtYmVyLCByZWFkb25seSB1bml0OiBEdXJhdGlvblVuaXQpIHt9XG5cbiAgZGl2aWRlKGR1cmF0aW9uOiBEdXJhdGlvbik6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgLyBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXG4gIH1cblxuICBtaW51cyhkdXJhdGlvbjogRHVyYXRpb24pOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlIC0gZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxuICB9XG5cbiAgbXVsdGlwbHkoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24odGhpcy52YWx1ZSAqIGR1cmF0aW9uLnRvKHRoaXMudW5pdCkudmFsdWUsIHRoaXMudW5pdClcbiAgfVxuXG4gIHBsdXMoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24odGhpcy52YWx1ZSArIGR1cmF0aW9uLnRvKHRoaXMudW5pdCkudmFsdWUsIHRoaXMudW5pdClcbiAgfVxuXG4gIHRvKHVuaXQ6IER1cmF0aW9uVW5pdCk6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKCh0aGlzLnZhbHVlICogdGhpcy51bml0KSAvIHVuaXQsIHVuaXQpXG4gIH1cbn1cbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmludGVyZmFjZSBKUXVlcnlTdGF0aWMge1xuICBmbGF2cjogKGRhdGE6IGZsYXZyUGFyYW1zKSA9PiB2b2lkXG4gIGZsYXZyTm90aWY6IChcbiAgICBjb250ZW50OiBzdHJpbmcgfCB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBpZD86IG51bWJlcixcbiAgICBmb3JjZT86IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG59XG5cbmludGVyZmFjZSBmbGF2clBhcmFtcyB7XG4gIC8qKiBBbmltYXRlLmNzcyAqL1xuICBhbmltYXRlQ2xvc2luZz86IFwiZmFkZU91dFwiIHwgXCJmYWRlT3V0VXBcIlxuICAvKiogQW5pbWF0ZS5jc3MgKi9cbiAgYW5pbWF0ZUVudHJhbmNlPzogXCJmYWRlSW5cIiB8IFwiZmFkZUluRG93blwiXG4gIC8qKiBCdXR0b25zIGFyZSBrZXktdmFsdWUgcGFpcnMgd2hlcmUgdGhlIGtleSBpcyB0aGUgICovXG4gIGJ1dHRvbnM/OiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHtcbiAgICAgIHN0eWxlPzogXCJjbG9zZVwiIHwgXCJkZWZhdWx0XCJcbiAgICAgIHRleHQ/OiBzdHJpbmdcbiAgICAgIGFkZENsYXNzPzogc3RyaW5nXG4gICAgICAvKiogQHJldHVybnMgd2hldGhlciB0aGUgcG9wdXAgc2hvdWxkIGNsb3NlICovXG4gICAgICBhY3Rpb24/OiAoJGNvbnRhaW5lcjogSlF1ZXJ5KSA9PiBib29sZWFuXG4gICAgfVxuICA+XG4gIC8qKiBIVE1MIGNvbnRlbnQgb2YgdGhlIGZsYXZyICovXG4gIGNvbnRlbnQ/OiBzdHJpbmdcbiAgLyoqIFR5cGUgb2YgZGlhbG9nLiAqL1xuICBkaWFsb2c/OiBcImFsZXJ0XCIgfCBcImNvbmZpcm1cIiB8IFwiZm9ybVwiIHwgXCJwcm9tcHRcIlxuICBvbkJ1aWxkPzogKCRjb250YWluZXI6IEpRdWVyeSkgPT4gdm9pZFxuICBvbkNhbmNlbD86ICgpID0+IHZvaWRcbiAgb25Db25maXJtPzogKCkgPT4gdm9pZFxuICBvblNob3c/OiAoKSA9PiB2b2lkXG4gIHByb21wdD86IHtcbiAgICAvKiogRGVmYXVsdCB2YWx1ZSAqL1xuICAgIHZhbHVlOiBzdHJpbmdcbiAgfVxuXG4gIHRpdGxlPzogc3RyaW5nXG59XG4iLCJleHBvcnQgZnVuY3Rpb24gdHJpbUljb24oaWNvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdGlsZGUgPSBpY29uLmxhc3RJbmRleE9mKFwiflwiKVxuICBjb25zdCBkb3QgPSBpY29uLmxhc3RJbmRleE9mKFwiLlwiKVxuICBpZiAodGlsZGUgPT09IC0xIHx8IGRvdCA9PT0gLTEpIHJldHVybiBpY29uXG5cbiAgcmV0dXJuIGljb24uc3Vic3RyaW5nKDAsIHRpbGRlKSArIGljb24uc3Vic3RyaW5nKGRvdClcbn1cbiIsImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb24gfSBmcm9tIFwiLi90cmFuc2xhdGlvblwiXG5cbmV4cG9ydCBjb25zdCBlbjogVHJhbnNsYXRpb24gPSB7XG4gIGhvbWU6IHtcbiAgICBmb3J1bTogXCJGb3J1bVwiLFxuICAgIHRha2VvdmVyOiBcIlRha2VvdmVyXCIsXG4gIH0sXG4gIHRha2VvdmVyOiB7XG4gICAgYm91Z2h0OiAobmFtZSwgcHJpY2UpID0+XG4gICAgICBgQm91Z2h0IDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmAsXG4gICAgZGlzYWJsZWQ6IFwiVGFrZW92ZXIgbW9kZSBkaXNhYmxlZC5cIixcbiAgICBlbmFibGVkOiBcIlRha2VvdmVyIG1vZGUgZW5hYmxlZC4gUGxlYXNlIGRvIG5vdCBpbnRlcmFjdCB3aXRoIHRoaXMgdGFiLlwiLFxuICB9LFxuICBjYXJvdXNlbDoge1xuICAgIGJlZW1vb3ZfYW5ub3lhbmNlczoge1xuICAgICAgdGl0bGU6IFwiQmVlbW9vdiBBbm5veWFuY2VzXCIsXG4gICAgICBzdWJ0aXRsZTogXCJCbG9jayBzb21lIG9mIEVsZGFyeWEncyBhbm5veWFuY2VzLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZmFjZToge1xuICAgICAgdGl0bGU6IFwiRG93bmxvYWQgeW91ciBndWFyZGlhbidzIGZhY2UhXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGljayBoZXJlIHRvIGRvd25sb2FkIHlvdXIgZ3VhcmRpYW4ncyBmYWNlLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZ3VhcmRpYW46IHtcbiAgICAgIHRpdGxlOiBcIkRvd25sb2FkIHlvdXIgZ3VhcmRpYW4hXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGljayBoZXJlIHRvIGRvd25sb2FkIHlvdXIgZ3VhcmRpYW4uXCIsXG4gICAgfSxcbiAgICBlbGRhcnlhX2VuaGFuY2VtZW50czoge1xuICAgICAgdGl0bGU6IGAke0dNLmluZm8uc2NyaXB0Lm5hbWV9IHYke0dNLmluZm8uc2NyaXB0LnZlcnNpb259YCxcbiAgICAgIHN1YnRpdGxlOiBHTS5pbmZvLnNjcmlwdC5kZXNjcmlwdGlvbixcbiAgICB9LFxuICAgIHRha2VvdmVyOiB7XG4gICAgICBkaXNhYmxlX3Rha2VvdmVyOiBcIkRpc2FibGUgVGFrZW92ZXJcIixcbiAgICAgIGVuYWJsZV90YWtlb3ZlcjogXCJFbmFibGUgVGFrZW92ZXJcIixcbiAgICAgIHN1YnRpdGxlOiBcIkdpdmUgdXAgdGhpcyB0YWIgdG8gcGVyZm9ybSBhdXRvbWF0ZWQgYWN0aW9ucy5cIixcbiAgICAgIHRpdGxlOiBcIlRha2VvdmVyXCIsXG4gICAgfSxcbiAgfSxcbiAgbWluaWdhbWVzOiB7XG4gICAgcGxheWVkX2ZvcjogKG5hbWUsIG1hYW5hcykgPT5cbiAgICAgIGBQbGF5ZWQgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+IGZvciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7bWFhbmFzfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+IGVhcm5lZC5gLFxuICAgIHBsYXllZDogbmFtZSA9PiBgUGxheWVkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPi5gLFxuICAgIHBsYXlpbmc6IG5hbWUgPT4gYFBsYXlpbmcgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+Li4uYCxcbiAgfSxcbiAgYXBwZWFyYW5jZToge1xuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGJhY2t3YXJkOiBcIk1vdmUgYmFja1wiLFxuICAgICAgZm9yd2FyZDogXCJCcmluZyBmb3J3YXJkXCIsXG4gICAgfSxcbiAgICBmYXZvdXJpdGVzOiB7XG4gICAgICBpbXBvcnRlZDogXCJJbXBvcnRlZCBvdXRmaXQhXCIsXG4gICAgICBpbXBvcnRpbmc6IFwiSW1wb3J0aW5nIG91dGZpdC4gUGxlYXNlIHdhaXQuLi5cIixcbiAgICAgIGNsaWNrX291dGZpdDoge1xuICAgICAgICBkZWxldGU6IFwiRGVsZXRlXCIsXG4gICAgICAgIGdvdG9fYWNjb3VudDogYFRvIHRyYW5zZmVyIHlvdXIgPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IGZhdm91cml0ZXMgdG8gYW5vdGhlciBicm93c2VyLCBleHBvcnQgdGhlbSBpbiB0aGUgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm15Jm5ic3A7YWNjb3VudDwvYT4gcGFnZS5gLFxuICAgICAgICBzYXZlZF9sb2NhbGx5OiBgVGFrZSBub3RlIHRoYXQgdGhpcyBvdXRmaXQgd2FzIHNhdmVkIGluIDxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPicgc2V0dGluZ3MgYW5kIHdhcyBub3Qgc2VudCB0byBFbGRhcnlhJ3Mgc2VydmVycy5gLFxuICAgICAgICB3ZWFyOiBcIldlYXJcIixcbiAgICAgIH0sXG4gICAgICBzYXZlX291dGZpdDoge1xuICAgICAgICBnb3RvX2FjY291bnQ6IGBUbyB0cmFuc2ZlciB5b3VyIDxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBmYXZvdXJpdGVzIHRvIGFub3RoZXIgYnJvd3NlciwgZXhwb3J0IHRoZW0gaW4gdGhlIDxhIGhyZWY9XCIvdXNlci9hY2NvdW50XCIgc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcIj5teSZuYnNwO2FjY291bnQ8L2E+IHBhZ2UuYCxcbiAgICAgICAgcGxhY2Vob2xkZXI6IFwiTmFtZS4uLlwiLFxuICAgICAgICBzYXZlOiBcIlNhdmVcIixcbiAgICAgICAgc2F2ZWRfbG9jYWxseTogYFRha2Ugbm90ZSB0aGF0IHRoaXMgb3V0Zml0IHdpbGwgb25seSBiZSBzYXZlZCB3aXRoaW4gPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+JyBzZXR0aW5ncyBhbmQgd2lsbCBub3QgYmUgc2VudCB0byBFbGRhcnlhJ3Mgc2VydmVycy5gLFxuICAgICAgICB0aXRsZTogXCJTYXZlIG91dGZpdFwiLFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgZG93bmxvYWQ6IFwiRG93bmxvYWQgUE5HXCIsXG4gICAgICAgIGV4cG9ydDogXCJFeHBvcnRcIixcbiAgICAgICAgaW1wb3J0OiBcIkltcG9ydFwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGxvYWRlZDogXCJUaGUgd2FyZHJvYmUgaXMgbG9hZGVkLlwiLFxuICAgIGxvYWRpbmc6IChjYXRlZ29yeW5hbWU6IHN0cmluZykgPT5cbiAgICAgIGBMb2FkaW5nIDxzdHJvbmc+JHtjYXRlZ29yeW5hbWV9PC9zdHJvbmc+Li4uYCxcbiAgfSxcbiAgbWFya2V0OiB7XG4gICAgYWRkX3RvX3dpc2hsaXN0OiB7XG4gICAgICBhZGRlZF90b193aXNobGlzdDogKG5hbWUsIHByaWNlKSA9PlxuICAgICAgICBgQWRkZWQgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+IGZvciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7cHJpY2V9PC9zdHJvbmc+IDxzcGFuIGNsYXNzPVwibWFhbmEtaWNvblwiIGFsdD1cIm1hYW5hc1wiPjwvc3Bhbj4gdG8gdGhlIHdpc2hsaXN0LmAsXG4gICAgICBpbnZhbGlkX3ByaWNlOiBcIlRoaXMgaXMgbm90IGEgdmFsaWQgcHJpY2UuXCIsXG4gICAgICBzYXZlOiBcIlNhdmVcIixcbiAgICAgIHRleHQ6IFwiSG93IG1hbnkgbWFhbmFzIGRvIHlvdSB3aXNoIHRvIG9mZmVyIHRvIGFjcXVpcmUgdGhpcyBpdGVtP1wiLFxuICAgICAgdGl0bGU6IFwiQWRkIHRvIHdpc2hsaXN0XCIsXG4gICAgfSxcbiAgICBhdWN0aW9uczoge1xuICAgICAgYnV5X25vd19wcmljZTogXCJCdXkgbm93IHByaWNlIDpcIixcbiAgICAgIGN1cnJlbnRfcHJpY2U6IFwiQ3VycmVudCBwcmljZSA6XCIsXG4gICAgICBkZWxldGU6IFwiRGVsZXRlXCIsXG4gICAgICBwdXJjaGFzZV9oaXN0b3J5OiBcIlB1cmNoYXNlIGhpc3RvcnlcIixcbiAgICAgIHNhbGVzX2hpc3Rvcnk6IFwiU2FsZXMgaGlzdG9yeVwiLFxuICAgICAgZGF0ZV90aW1lX2Zvcm1hdDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1HQlwiLCB7XG4gICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgICBkYXk6IFwibnVtZXJpY1wiLFxuICAgICAgICBtb250aDogXCJsb25nXCIsXG4gICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBjaGFuZ2VfcHJpY2U6IHtcbiAgICAgIGNoYW5nZWRfcHJpY2U6IChuYW1lLCBwcmljZSkgPT5cbiAgICAgICAgYENoYW5nZWQgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+J3MgcHJpY2UgZm9yIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPi5gLFxuICAgICAgaW52YWxpZF9wcmljZTogXCJUaGlzIGlzIG5vdCBhIHZhbGlkIHByaWNlLlwiLFxuICAgICAgc2F2ZTogXCJTYXZlXCIsXG4gICAgICB0ZXh0OiBcIkhvdyBtYW55IG1hYW5hcyBkbyB5b3Ugd2lzaCB0byBvZmZlciB0byBhY3F1aXJlIHRoaXMgaXRlbT9cIixcbiAgICAgIHRpdGxlOiBcIkNoYW5nZSBwcmljZVwiLFxuICAgIH0sXG4gICAgd2lzaGxpc3Q6IHtcbiAgICAgIGFzc2lzdGFuY2U6IGBPbiB0aGlzIHBhZ2UsIHlvdSBjYW4gb3JnYW5pemUgeW91ciB3aXNobGlzdCBhbmQgY2hlY2sgdGhlIHN0YXR1cyBvZiB5b3VyIHdpc2hlZCBpdGVtcy4gUGxlYXNlIG5vdGUgdGhhdCB5b3VyIHdpc2hsaXN0IGlzIHNhdmVkIGxvY2FsbHkgaW4gPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+JyBzZXR0aW5ncyBhbmQgaXMgbm90IHNlbnQgdG8gRWxkYXJ5YSdzIHNlcnZlcnMuIFRvIHRyYW5zZmVyIHlvdXIgd2lzaGxpc3QgdG8gYW5vdGhlciBicm93c2VyLCBleHBvcnQgeW91ciBzZXR0aW5ncyBpbiB0aGUgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm15Jm5ic3A7YWNjb3VudDwvYT4gcGFnZS5gLFxuICAgICAgYWN0aW9uczogXCJBY3Rpb25zXCIsXG4gICAgICBjaGFuZ2VfcHJpY2U6IFwiQ2hhbmdlIHByaWNlXCIsXG4gICAgICBkZWxldGVfdG9vbHRpcDogXCJSZW1vdmUgZnJvbSB3aXNobGlzdFwiLFxuICAgICAgZGVsZXRlOiBcIkRlbGV0ZVwiLFxuICAgICAgaWNvbjogXCJJY29uXCIsXG4gICAgICBuYW1lOiBcIk5hbWVcIixcbiAgICAgIHByaWNlOiBcIlByaWNlXCIsXG4gICAgICByZXNldF90b29sdGlwOiBcIlJlc2V0IHRoZSBlcnJvciBzdGF0dXNcIixcbiAgICAgIHJlc2V0OiBcIlJlc2V0XCIsXG4gICAgICBzdGF0dXM6IFwiU3RhdHVzXCIsXG4gICAgICB0aXRsZTogXCJXaXNobGlzdFwiLFxuICAgIH0sXG4gIH0sXG4gIGFjY291bnQ6IHtcbiAgICBkZWJ1Z190b29sdGlwOiBcIkVuYWJsZXMgb3IgZGlzYWJsZXMgbG9nZ2luZy5cIixcbiAgICBkZWJ1ZzogXCJEZWJ1Z1wiLFxuICAgIGVuaGFuY2VtZW50czogXCJFbmhhbmNlbWVudHNcIixcbiAgICBleHBsb3JhdGlvbnM6IFwiRXhwbG9yYXRpb25zXCIsXG4gICAgZXhwb3J0OiBcIkV4cG9ydCBzZXR0aW5nc1wiLFxuICAgIGltcG9ydDogXCJJbXBvcnQgc2V0dGluZ3NcIixcbiAgICBpbXBvcnRlZDogXCJJbXBvcnRlZCBzZXR0aW5ncyFcIixcbiAgICBtYXJrZXQ6IFwiTWFya2V0XCIsXG4gICAgbWluaWdhbWVzOiBcIk1pbmlnYW1lc1wiLFxuICB9LFxuICBwZXQ6IHtcbiAgICBhdXRvX2V4cGxvcmU6IFwiSGlnaGxpZ2h0XCIsXG4gICAgZGF0ZV90aW1lX2Zvcm1hdDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJlbi1HQlwiLCB7XG4gICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICBkYXk6IFwibnVtZXJpY1wiLFxuICAgICAgbW9udGg6IFwibG9uZ1wiLFxuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgfSksXG4gICAgZGVsZXRlX2hpc3Rvcnk6IFwiRGVsZXRlIGhpc3RvcnlcIixcbiAgICBlbXB0eV9oaXN0b3J5OlxuICAgICAgXCJZb3VyIGV4cGxvcmF0aW9uIGhpc3RvcnkgaXMgZW1wdHkuIEl0IHdpbGwgYXV0b21hdGljYWxseSBmaWxsIHVwIGFzIHlvdXIgZmFtaWxpYXIgZmluZHMgaXRlbXMgd2hpbGUgZXhwbG9yaW5nLlwiLFxuICAgIGdvdG9fYWNjb3VudDogYFRvIHRyYW5zZmVyIHlvdXIgZXhwbG9yYXRpb24gaGlzdG9yeSB0byBhbm90aGVyIGJyb3dzZXIsIGV4cG9ydCB5b3VyIHNldHRpbmdzIGZyb20gdGhlIDxlbT5teSZuYnNwO2FjY291bnQ8L2VtPiBwYWdlLmAsXG4gICAgaGlzdG9yeTogXCJIaXN0b3J5XCIsXG4gICAgc2F2ZWRfbG9jYWxseTogYFBsZWFzZSBub3RlIHRoYXQgeW91ciBleHBsb3JhdGlvbiBoaXN0b3J5IHdhcyBzYXZlZCBsb2NhbGx5IGluIDxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPicgc2V0dGluZ3MgYW5kIHdhcyBub3Qgc2VudCB0byBFbGRhcnlhJ3Mgc2VydmVycy5gLFxuICB9LFxuICBwcm9maWxlOiB7XG4gICAgZXhwb3J0X291dGZpdDogXCJFeHBvcnQgb3V0Zml0XCIsXG4gICAgZG93bmxvYWRfb3V0Zml0OiBcIkRvd25sb2FkIFBOR1wiLFxuICB9LFxuICBlcnJvcjoge1xuICAgIGRvd25sb2FkQ2FudmFzOiBcIlRoZXJlIHdhcyBhbiBlcnJvciB3aGlsZSBjcmVhdGluZyB0aGUgaW1hZ2UuXCIsXG4gIH0sXG4gIG1hbGw6IHtcbiAgICBhZGRfdG9fd2lzaGxpc3Q6IHtcbiAgICAgIHRpdGxlOiBcIkFkZCB0byBtYXJrZXQgd2lzaGxpc3RcIixcbiAgICAgIHRleHQ6IFwiSG93IG1hbnkgbWFhbmFzIGRvIHlvdSB3aXNoIHRvIG9mZmVyIHRvIGFjcXVpcmUgdGhpcyBpdGVtP1wiLFxuICAgICAgbm90ZTogXCJQbGVhc2Ugbm90ZSB0aGF0IHRoZSBpdGVtcyBhZGRlZCBmcm9tIHRoZSBtYWxsIGFyZSBub3QgbmVjZXNzYXJpbHkgYXZhaWxhYmxlIGF0IHRoZSBtYXJrZXQuXCIsXG4gICAgfSxcbiAgfSxcbn1cblxuT2JqZWN0LmZyZWV6ZShlbilcbiIsImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb24gfSBmcm9tIFwiLi90cmFuc2xhdGlvblwiXG5cbmV4cG9ydCBjb25zdCBmcjogVHJhbnNsYXRpb24gPSB7XG4gIGhvbWU6IHtcbiAgICBmb3J1bTogXCJGb3J1bVwiLFxuICAgIHRha2VvdmVyOiBcIlRha2VvdmVyXCIsXG4gIH0sXG4gIHRha2VvdmVyOiB7XG4gICAgYm91Z2h0OiAobmFtZSwgcHJpY2UpID0+XG4gICAgICBgQWNoZXTDqSA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4gcG91ciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7cHJpY2V9PC9zdHJvbmc+IDxzcGFuIGNsYXNzPVwibWFhbmEtaWNvblwiIGFsdD1cIm1hYW5hc1wiPjwvc3Bhbj4uYCxcbiAgICBkaXNhYmxlZDogXCJUYWtlb3ZlciBkw6lzYWN0aXbDqS5cIixcbiAgICBlbmFibGVkOiBcIlRha2VvdmVyIGFjdGl2w6kuIMOJdml0ZSBkJ2ludMOpcmFnaXIgYXZlYyBjZXQgb25nbGV0LlwiLFxuICB9LFxuICBjYXJvdXNlbDoge1xuICAgIGJlZW1vb3ZfYW5ub3lhbmNlczoge1xuICAgICAgdGl0bGU6IFwiQmVlbW9vdiBBbm5veWFuY2VzXCIsXG4gICAgICBzdWJ0aXRsZTogXCJCbG9xdWUgY2VydGFpbnMgaXJyaXRhbnRzIGQnRWxkYXJ5YS5cIixcbiAgICB9LFxuICAgIGRvd25sb2FkX2ZhY2U6IHtcbiAgICAgIHRpdGxlOiBcIlTDqWzDqWNoYXJnZSBsZSB2aXNhZ2UgZGUgdGEgZ2FyZGllbm5lIVwiLFxuICAgICAgc3VidGl0bGU6IFwiQ2xpcXVlIGljaSBwb3VyIHTDqWzDqWNoYXJnZXIgbGUgdmlzYWdlIGRlIHRhIGdhcmRpZW5uZS5cIixcbiAgICB9LFxuICAgIGRvd25sb2FkX2d1YXJkaWFuOiB7XG4gICAgICB0aXRsZTogXCJUw6lsw6ljaGFyZ2UgdGEgZ2FyZGllbm5lIVwiLFxuICAgICAgc3VidGl0bGU6IFwiQ2xpcXVlIGljaSBwb3VyIHTDqWzDqWNoYXJnZXIgdGEgZ2FyZGllbm5lLlwiLFxuICAgIH0sXG4gICAgZWxkYXJ5YV9lbmhhbmNlbWVudHM6IHtcbiAgICAgIHRpdGxlOiBgJHtHTS5pbmZvLnNjcmlwdC5uYW1lfSB2JHtHTS5pbmZvLnNjcmlwdC52ZXJzaW9ufWAsXG4gICAgICBzdWJ0aXRsZTogXCJBbcOpbGlvcmUgbCdleHDDqXJpZW5jZSB1dGlsaXNhdGV1ciBkJ0VsZGFyeWEuXCIsXG4gICAgfSxcbiAgICB0YWtlb3Zlcjoge1xuICAgICAgZGlzYWJsZV90YWtlb3ZlcjogXCJEw6lzYWN0aXZlIGxlIHRha2VvdmVyXCIsXG4gICAgICBlbmFibGVfdGFrZW92ZXI6IFwiQWN0aXZlIGxlIHRha2VvdmVyXCIsXG4gICAgICBzdWJ0aXRsZTogXCJMYWlzc2UgY2V0IG9uZ2xldCBwZXJmb3JtZXIgZGVzIGFjdGlvbnMgYXV0b21hdGlxdWVzLlwiLFxuICAgICAgdGl0bGU6IFwiVGFrZW92ZXJcIixcbiAgICB9LFxuICB9LFxuICBtaW5pZ2FtZXM6IHtcbiAgICBwbGF5ZWRfZm9yOiAobmFtZTogc3RyaW5nLCBtYWFuYXM6IG51bWJlcikgPT5cbiAgICAgIGBBIGpvdcOpIMOgIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBwb3VyIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHttYWFuYXN9PC9zdHJvbmc+IDxzcGFuIGNsYXNzPVwibWFhbmEtaWNvblwiIGFsdD1cIm1hYW5hc1wiPjwvc3Bhbj4gZ2FnbsOpcy5gLFxuICAgIHBsYXllZDogKG5hbWU6IHN0cmluZykgPT4gYEEgam91w6kgw6AgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+LmAsXG4gICAgcGxheWluZzogKG5hbWU6IHN0cmluZykgPT4gYEpvdWUgw6AgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+Li4uYCxcbiAgfSxcbiAgYXBwZWFyYW5jZToge1xuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGJhY2t3YXJkOiBcIlZlcnMgbCdhcnJpw6hyZVwiLFxuICAgICAgZm9yd2FyZDogXCJWZXJzIGwnYXZhbnRcIixcbiAgICB9LFxuICAgIGZhdm91cml0ZXM6IHtcbiAgICAgIGltcG9ydGVkOiBcIkltcG9ydGF0aW9uIHLDqXVzc2llIVwiLFxuICAgICAgaW1wb3J0aW5nOiBcIkltcG9ydGF0aW9uIGVuIGNvdXJzLi4uXCIsXG4gICAgICBjbGlja19vdXRmaXQ6IHtcbiAgICAgICAgZGVsZXRlOiBcIlN1cHByaW1lclwiLFxuICAgICAgICBnb3RvX2FjY291bnQ6IGBQb3VyIHRyYW5zZsOpcmVyIHRlcyBmYXZvcmlzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IHZlcnMgdW4gYXV0cmUgbmF2aWdhdGV1ciwgZXhwb3J0ZS1sZXMgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm1vbiZuYnNwO2NvbXB0ZTwvYT4uYCxcbiAgICAgICAgc2F2ZWRfbG9jYWxseTogYFByZW5kcyBub3RlIHF1ZSBjZXR0ZSB0ZW51ZSBhIMOpdMOpIHNhdXZlZ2FyZMOpZSBsb2NhbGVtZW50IGRhbnMgbGVzIHBhcmFtw6h0cmVzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IGV0IG4nYSBwYXMgw6l0w6kgZW52b3nDqWUgYXV4IHNlcnZldXJzIGQnRWxkYXJ5YS5gLFxuICAgICAgICB3ZWFyOiBcIlBvcnRlclwiLFxuICAgICAgfSxcbiAgICAgIHNhdmVfb3V0Zml0OiB7XG4gICAgICAgIGdvdG9fYWNjb3VudDogYFBvdXIgdHJhbnNmw6lyZXIgdGVzIGZhdm9yaXMgZCc8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4gdmVycyB1biBhdXRyZSBuYXZpZ2F0ZXVyLCBleHBvcnRlLWxlcyDDoCBwYXJ0aXIgZGUgbGEgcGFnZSA8YSBocmVmPVwiL3VzZXIvYWNjb3VudFwiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XCI+bW9uJm5ic3A7Y29tcHRlPC9hPi5gLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJOb20uLi5cIixcbiAgICAgICAgc2F2ZTogXCJTYXV2ZWdhcmRlclwiLFxuICAgICAgICBzYXZlZF9sb2NhbGx5OiBgUHJlbmRzIG5vdGUgcXVlIGNldHRlIHRlbnVlIHNlcmEgc2F1dmVnYXJkw6llIGxvY2FsZW1lbnQgZGFucyBsZXMgcGFyYW3DqHRyZXMgZCc8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4gZXQgbmUgc2VyYSBwYXMgZW52b3nDqWUgYXV4IHNlcnZldXJzIGQnRWxkYXJ5YS5gLFxuICAgICAgICB0aXRsZTogXCJTYXV2ZWdhcmRlciBjZXR0ZSB0ZW51ZVwiLFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgZG93bmxvYWQ6IFwiVMOpbMOpY2hhcmdlciBsZSBQTkdcIixcbiAgICAgICAgZXhwb3J0OiBcIkV4cG9ydGVyXCIsXG4gICAgICAgIGltcG9ydDogXCJJbXBvcnRlclwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGxvYWRlZDogXCJMZSBjaGFyZ2VtZW50IGRlIGxhIGdhcmRlLXJvYmUgZXN0IHRlcm1pbsOpLlwiLFxuICAgIGxvYWRpbmc6IChjYXRlZ29yeW5hbWU6IHN0cmluZykgPT5cbiAgICAgIGBDaGFyZ2VtZW50IGRlIDxzdHJvbmc+JHtjYXRlZ29yeW5hbWV9PC9zdHJvbmc+Li4uYCxcbiAgfSxcbiAgbWFya2V0OiB7XG4gICAgYWRkX3RvX3dpc2hsaXN0OiB7XG4gICAgICBhZGRlZF90b193aXNobGlzdDogKG5hbWU6IHN0cmluZywgcHJpY2U6IG51bWJlcikgPT5cbiAgICAgICAgYEFqb3V0w6kgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+IHBvdXIgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+IMOgIGxhIGxpc3RlIGRlIHNvdWhhaXRzLmAsXG4gICAgICBpbnZhbGlkX3ByaWNlOiBcIkNlIHByaXggbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICAgIHNhdmU6IFwiU2F1dmVnYXJkZXJcIixcbiAgICAgIHRleHQ6IFwiQ29tYmllbiBkZSBtYWFuYXMgc291aGFpdGVzLXR1IG9mZnJpciBwb3VyIGFjcXXDqXJpciBjZXQgaXRlbT9cIixcbiAgICAgIHRpdGxlOiBcIkFqb3V0ZXIgw6AgbGEgbGlzdGUgZGUgc291aGFpdFwiLFxuICAgIH0sXG4gICAgYXVjdGlvbnM6IHtcbiAgICAgIGJ1eV9ub3dfcHJpY2U6IFwiQWNoYXQgaW1tw6lkaWF0IDpcIixcbiAgICAgIGN1cnJlbnRfcHJpY2U6IFwiTWlzZSBhY3R1ZWxsZSA6XCIsXG4gICAgICBkZWxldGU6IFwiU3VwcHJpbWVyXCIsXG4gICAgICBwdXJjaGFzZV9oaXN0b3J5OiBcIkhpc3RvcmlxdWUgZCdhY2hhdFwiLFxuICAgICAgc2FsZXNfaGlzdG9yeTogXCJIaXN0b3JpcXVlIGRlIHZlbnRlXCIsXG4gICAgICBkYXRlX3RpbWVfZm9ybWF0OiBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImZyLUNBXCIsIHtcbiAgICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICAgIGRheTogXCJudW1lcmljXCIsXG4gICAgICAgIG1vbnRoOiBcImxvbmdcIixcbiAgICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgICB9KSxcbiAgICB9LFxuICAgIGNoYW5nZV9wcmljZToge1xuICAgICAgY2hhbmdlZF9wcmljZTogKG5hbWU6IHN0cmluZywgcHJpY2U6IG51bWJlcikgPT5cbiAgICAgICAgYENoYW5nw6kgbGUgcHJpeCBkZSA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4gcG91ciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7cHJpY2V9PC9zdHJvbmc+IDxzcGFuIGNsYXNzPVwibWFhbmEtaWNvblwiIGFsdD1cIm1hYW5hc1wiPjwvc3Bhbj4uYCxcbiAgICAgIGludmFsaWRfcHJpY2U6IFwiQ2UgcHJpeCBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgICAgc2F2ZTogXCJTYXV2ZWdhcmRlclwiLFxuICAgICAgdGV4dDogXCJDb21iaWVuIGRlIG1hYW5hcyBzb3VoYWl0ZXMtdHUgb2ZmcmlyIHBvdXIgYWNxdcOpcmlyIGNldCBpdGVtP1wiLFxuICAgICAgdGl0bGU6IFwiQ2hhbmdlciBsZSBwcml4XCIsXG4gICAgfSxcbiAgICB3aXNobGlzdDoge1xuICAgICAgYXNzaXN0YW5jZTogYFN1ciBjZXR0ZSBwYWdlLCB0dSBwZXV4IG9yZ2FuaXNlciB0YSBsaXN0ZSBkZSBzb3VoYWl0cyBldCB2w6lyaWZpZXIgbGUgc3RhdHV0IGRlIHRlcyBhcnRpY2xlcyBzb3VoYWl0w6lzLiBQcmVuZHMgbm90ZSBxdWUgdGEgbGlzdGUgZGUgc291aGFpdHMgZXN0IHNhdXZlZ2FyZMOpZSBsb2NhbGVtZW50IGRhbnMgbGVzIHBhcmFtw6h0cmVzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IGV0IG4nZXN0IHBhcyBlbnZvecOpZSBhdXggc2VydmV1cnMgZCdFbGRhcnlhLiBQb3VyIHRyYW5zZsOpcmVyIHRhIGxpc3RlIGRlIHNvdWhhaXRzIHZlcnMgdW4gYXV0cmUgbmF2aWdhdGV1ciwgZXhwb3J0ZS1sYSDDoCBwYXJ0aXIgZGUgbGEgcGFnZSA8YSBocmVmPVwiL3VzZXIvYWNjb3VudFwiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XCI+bW9uJm5ic3A7Y29tcHRlPC9hPi5gLFxuICAgICAgYWN0aW9uczogXCJBY3Rpb25zXCIsXG4gICAgICBjaGFuZ2VfcHJpY2U6IFwiQ2hhbmdlciBsZSBwcml4XCIsXG4gICAgICBkZWxldGVfdG9vbHRpcDogXCJSZXRpcmVyIGRlIGxhIGxpc3RlIGRlIHNvdWhhaXRzXCIsXG4gICAgICBkZWxldGU6IFwiU3VwcHJpbWVyXCIsXG4gICAgICBpY29uOiBcIkljw7RuZVwiLFxuICAgICAgbmFtZTogXCJOb21cIixcbiAgICAgIHByaWNlOiBcIlByaXhcIixcbiAgICAgIHJlc2V0X3Rvb2x0aXA6IFwiUsOpaW5pdGlhbGlzZXIgbCfDqXRhdCBkJ2VycmV1clwiLFxuICAgICAgcmVzZXQ6IFwiUsOpaW5pdGlhbGlzZXJcIixcbiAgICAgIHN0YXR1czogXCJTdGF0dXRcIixcbiAgICAgIHRpdGxlOiBcIkxpc3RlIGRlIHNvdWhhaXRzXCIsXG4gICAgfSxcbiAgfSxcbiAgYWNjb3VudDoge1xuICAgIGRlYnVnX3Rvb2x0aXA6IFwiQWN0aXZlIG91IGTDqXNhY3RpdmUgbGEgam91cm5hbGlzYXRpb24uXCIsXG4gICAgZGVidWc6IFwiRMOpYm9nYWdlXCIsXG4gICAgZW5oYW5jZW1lbnRzOiBcIkFtw6lsaW9yYXRpb25zXCIsXG4gICAgZXhwbG9yYXRpb25zOiBcIkV4cGxvcmF0aW9uc1wiLFxuICAgIGV4cG9ydDogXCJFeHBvcnRlciBsZXMgcGFyYW3DqHRyZXNcIixcbiAgICBpbXBvcnQ6IFwiSW1wb3J0ZXIgbGVzIHBhcmFtw6h0cmVzXCIsXG4gICAgaW1wb3J0ZWQ6IFwiUGFyYW3DqHRyZXMgaW1wb3J0w6lzXCIsXG4gICAgbWFya2V0OiBcIk1hcmNow6lcIixcbiAgICBtaW5pZ2FtZXM6IFwiTWluaS1qZXV4XCIsXG4gIH0sXG4gIHBldDoge1xuICAgIGF1dG9fZXhwbG9yZTogXCJNYXJxdWVyXCIsXG4gICAgZGF0ZV90aW1lX2Zvcm1hdDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJmci1DQVwiLCB7XG4gICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgICAgaG91cjogXCIyLWRpZ2l0XCIsXG4gICAgICBkYXk6IFwibnVtZXJpY1wiLFxuICAgICAgbW9udGg6IFwibG9uZ1wiLFxuICAgICAgeWVhcjogXCJudW1lcmljXCIsXG4gICAgfSksXG4gICAgZGVsZXRlX2hpc3Rvcnk6IFwiTmV0dG95ZXIgbCdoaXN0b3JpcXVlXCIsXG4gICAgZW1wdHlfaGlzdG9yeTpcbiAgICAgIFwiVG9uIGhpc3RvcmlxdWUgZCdleHBsb3JhdGlvbiBlc3QgdmlkZS4gSWwgc2UgcmVtcGxpcmEgYXV0b21hdGlxdWVtZW50IMOgIG1lc3VyZSBxdWUgdG9uIGZhbWlsaWVyIHRyb3V2ZXJhIGRlcyBpdGVtcyBlbiBleHBsb3JhdGlvbi5cIixcbiAgICBnb3RvX2FjY291bnQ6XG4gICAgICBcIlBvdXIgdHJhbnNmw6lyZXIgdG9uIGhpc3RvcmlxdWUgZCdleHBsb3JhdGlvbnMgdmVycyB1biBhdXRyZSBuYXZpZ2F0ZXVyLCBleHBvcnRlIHRlcyBwYXJhbcOodHJlcyDDoCBwYXJ0aXIgZGUgbGEgcGFnZSA8ZW0+bW9uIGNvbXB0ZTwvZW0+LlwiLFxuICAgIGhpc3Rvcnk6IFwiSGlzdG9yaXF1ZVwiLFxuICAgIHNhdmVkX2xvY2FsbHk6IGBQcmVuZHMgbm90ZSBxdWUgdG9uIGhpc3RvcmlxdWUgZCdleHBsb3JhdGlvbnMgYSDDqXTDqSBzYXV2ZWdhcmTDqSBsb2NhbGVtZW50IGRhbnMgbGVzIHBhcmFtw6h0cmVzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IGV0IG4nYSBwYXMgw6l0w6kgZW52b3nDqSBhdXggc2VydmV1cnMgZCdFbGRhcnlhLmAsXG4gIH0sXG4gIHByb2ZpbGU6IHtcbiAgICBleHBvcnRfb3V0Zml0OiBcIkV4cG9ydGVyIGxhIHRlbnVlXCIsXG4gICAgZG93bmxvYWRfb3V0Zml0OiBcIlTDqWzDqWNoYXJnZXIgbGUgUE5HXCIsXG4gIH0sXG4gIGVycm9yOiB7XG4gICAgZG93bmxvYWRDYW52YXM6XG4gICAgICBcIlVuZSBlcnJldXIgZXN0IHN1cnZlbnVlIGxvcnMgZHUgdMOpbMOpY2hhcmdlbWVudCBkZSBsJ2ltYWdlLlwiLFxuICB9LFxuICBtYWxsOiB7XG4gICAgYWRkX3RvX3dpc2hsaXN0OiB7XG4gICAgICB0aXRsZTogXCJBam91dGVyIMOgIGxhIGxpc3RlIGRlIHNvdWhhaXQgZHUgbWFyY2jDqVwiLFxuICAgICAgdGV4dDogXCJDb21iaWVuIGRlIG1hYW5hcyBzb3VoYWl0ZXMtdHUgb2ZmcmlyIHBvdXIgYWNxdcOpcmlyIGNldCBpdGVtP1wiLFxuICAgICAgbm90ZTogXCJQcmVuZHMgbm90ZSBxdWUgbGVzIGl0ZW1zIGFqb3V0w6lzIMOgIHBhcnRpciBkZSBsYSBib3V0aXF1ZSBuZSBzb250IHBhcyBuw6ljZXNzYWlyZW1lbnQgZGlzcG9uaWJsZXMgYXUgbWFyY2jDqS5cIixcbiAgICB9LFxuICB9LFxufVxuXG5PYmplY3QuZnJlZXplKGZyKVxuIiwiaW1wb3J0IHsgZW4gfSBmcm9tIFwiLi9lblwiXG5pbXBvcnQgeyBmciB9IGZyb20gXCIuL2ZyXCJcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb24gfSBmcm9tIFwiLi90cmFuc2xhdGlvblwiXG5cbmZ1bmN0aW9uIHRyYW5zbGF0aW9uKCk6IFRyYW5zbGF0aW9uIHtcbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLmNvbS5iclwiKSkgcmV0dXJuIGVuXG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5kZVwiKSkgcmV0dXJuIGVuXG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5lc1wiKSkgcmV0dXJuIGVuXG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5odVwiKSkgcmV0dXJuIGVuXG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5pdFwiKSkgcmV0dXJuIGVuXG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5wbFwiKSkgcmV0dXJuIGVuXG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5ydVwiKSkgcmV0dXJuIGVuXG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5jb21cIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuZnJcIikpIHJldHVybiBmclxuICBlbHNlIHJldHVybiBlblxufVxuXG5leHBvcnQgY29uc3QgdHJhbnNsYXRlID0gdHJhbnNsYXRpb24oKVxuIiwiZXhwb3J0IGVudW0gRGF0YWJhc2VzIHtcbiAgZWxkYXJ5YV9lbmhhbmNlbWVudHMgPSBcImVsZGFyeWFfZW5oYW5jZW1lbnRzXCIsXG59XG4iLCJleHBvcnQgZW51bSBGaWVsZHMge1xuICBibG9iID0gXCJibG9iXCIsXG4gIGlkID0gXCJpZFwiLFxuICBpdGVtcyA9IFwiaXRlbXNcIixcbiAgbmFtZSA9IFwibmFtZVwiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBGYXZvdXJpdGVPdXRmaXQgfSBmcm9tIFwiLi4vYXBwZWFyYW5jZS9pbnRlcmZhY2VzL2Zhdm91cml0ZV9vdXRmaXRcIlxuaW1wb3J0IHsgRGF0YWJhc2VzIH0gZnJvbSBcIi4vZGF0YWJhc2VzLmVudW1cIlxuaW1wb3J0IHsgRmllbGRzIH0gZnJvbSBcIi4vZmllbGRzLmVudW1cIlxuaW1wb3J0IHsgVGFibGVzIH0gZnJvbSBcIi4vdGFibGVzLmVudW1cIlxuXG5jbGFzcyBJbmRleGVkREIge1xuICBwcml2YXRlIGRiPzogSURCRGF0YWJhc2VcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oRGF0YWJhc2VzLmVsZGFyeWFfZW5oYW5jZW1lbnRzLCAxKVxuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IElEQkRhdGFiYXNlID0+ICh0aGlzLmRiID0gcmVxdWVzdC5yZXN1bHQpXG4gICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbiAodGhpczogSURCT3BlbkRCUmVxdWVzdCk6IHZvaWQge1xuICAgICAgY29uc3QgZGI6IElEQkRhdGFiYXNlID0gdGhpcy5yZXN1bHRcblxuICAgICAgY29uc3Qgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShUYWJsZXMuZmF2b3VyaXRlX291dGZpdHMsIHtcbiAgICAgICAga2V5UGF0aDogXCJpZFwiLFxuICAgICAgICBhdXRvSW5jcmVtZW50OiB0cnVlLFxuICAgICAgfSlcblxuICAgICAgb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoRmllbGRzLmJsb2IsIFwiYmxvYlwiLCB7IHVuaXF1ZTogZmFsc2UgfSlcbiAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KEZpZWxkcy5pdGVtcywgXCJpdGVtc1wiLCB7IHVuaXF1ZTogZmFsc2UgfSlcbiAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KEZpZWxkcy5uYW1lLCBcIm5hbWVcIiwgeyB1bmlxdWU6IGZhbHNlIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIGEgbmV3IGBGYXZvdXJpdGVPdXRmaXRgIHdpdGggdGhlIGBrZXlgIHByb3BlcnR5IHNldC4gKi9cbiAgYXN5bmMgYWRkRmF2b3VyaXRlT3V0Zml0KFxuICAgIGZhdm91cml0ZTogRmF2b3VyaXRlT3V0Zml0XG4gICk6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5kYikgcmV0dXJuIHZvaWQgcmVqZWN0KClcblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZGJcbiAgICAgICAgLnRyYW5zYWN0aW9uKFtUYWJsZXMuZmF2b3VyaXRlX291dGZpdHNdLCBcInJlYWR3cml0ZVwiKVxuICAgICAgICAub2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzKVxuICAgICAgICAuYWRkKGZhdm91cml0ZSlcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PlxuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAuLi5mYXZvdXJpdGUsXG4gICAgICAgICAgdXJsOiBmYXZvdXJpdGUudXJsID8/IFVSTC5jcmVhdGVPYmplY3RVUkwoZmF2b3VyaXRlLmJsb2IpLFxuICAgICAgICAgIGlkOiBOdW1iZXIocmVxdWVzdC5yZXN1bHQpLFxuICAgICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBjbGVhckZhdm91cml0ZU91dGZpdHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5kYikgcmV0dXJuIHZvaWQgcmVqZWN0KClcblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZGJcbiAgICAgICAgLnRyYW5zYWN0aW9uKFtUYWJsZXMuZmF2b3VyaXRlX291dGZpdHNdLCBcInJlYWR3cml0ZVwiKVxuICAgICAgICAub2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzKVxuICAgICAgICAuY2xlYXIoKVxuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+IHJlc29sdmUoKVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBkZWxldGVGYXZvdXJpdGVPdXRmaXQoZmF2b3VyaXRlOiBGYXZvdXJpdGVPdXRmaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRiKSByZXR1cm4gdm9pZCByZWplY3QoKVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5kYlxuICAgICAgICAudHJhbnNhY3Rpb24oW1RhYmxlcy5mYXZvdXJpdGVfb3V0Zml0c10sIFwicmVhZHdyaXRlXCIpXG4gICAgICAgIC5vYmplY3RTdG9yZShUYWJsZXMuZmF2b3VyaXRlX291dGZpdHMpXG4gICAgICAgIC5kZWxldGUoZmF2b3VyaXRlLmlkISlcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICBpZiAoZmF2b3VyaXRlLnVybCkgVVJMLnJldm9rZU9iamVjdFVSTChmYXZvdXJpdGUudXJsKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBnZXRGYXZvdXJpdGVPdXRmaXQoaWQ6IG51bWJlcik6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5kYikgcmV0dXJuIHZvaWQgcmVqZWN0KClcblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZGJcbiAgICAgICAgLnRyYW5zYWN0aW9uKFtUYWJsZXMuZmF2b3VyaXRlX291dGZpdHNdLCBcInJlYWRvbmx5XCIpXG4gICAgICAgIC5vYmplY3RTdG9yZShUYWJsZXMuZmF2b3VyaXRlX291dGZpdHMpXG4gICAgICAgIC5nZXQoaWQpXG5cbiAgICAgIGNvbnN0IGZhdm91cml0ZTogRmF2b3VyaXRlT3V0Zml0ID0gcmVxdWVzdC5yZXN1bHRcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PlxuICAgICAgICByZXNvbHZlKHsgLi4uZmF2b3VyaXRlLCB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoZmF2b3VyaXRlLmJsb2IpIH0pXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldEZhdm91cml0ZU91dGZpdHMoKTogUHJvbWlzZTxGYXZvdXJpdGVPdXRmaXRbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGIpIHJldHVybiB2b2lkIHJlamVjdCgpXG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmRiXG4gICAgICAgIC50cmFuc2FjdGlvbihbVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzXSwgXCJyZWFkb25seVwiKVxuICAgICAgICAub2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzKVxuICAgICAgICAuZ2V0QWxsKClcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PlxuICAgICAgICByZXNvbHZlKFxuICAgICAgICAgIHJlcXVlc3QucmVzdWx0Lm1hcDxGYXZvdXJpdGVPdXRmaXQ+KChmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdCkgPT4gKHtcbiAgICAgICAgICAgIC4uLmZhdm91cml0ZSxcbiAgICAgICAgICAgIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChmYXZvdXJpdGUuYmxvYiksXG4gICAgICAgICAgfSkpXG4gICAgICAgIClcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBJbmRleGVkREIoKVxuIiwiZXhwb3J0IGVudW0gVGFibGVzIHtcbiAgZmF2b3VyaXRlX291dGZpdHMgPSBcImZhdm91cml0ZV9vdXRmaXRzXCIsXG59XG4iLCJleHBvcnQgZW51bSBMb2NhbFN0b3JhZ2VLZXkge1xuICBhdXRvRXhwbG9yZUxvY2F0aW9ucyA9IFwiYXV0b0V4cGxvcmVMb2NhdGlvbnNcIixcbiAgZGVidWcgPSBcImRlYnVnXCIsXG4gIGV4cGxvcmF0aW9uSGlzdG9yeSA9IFwiZXhwbG9yYXRpb25IaXN0b3J5XCIsXG4gIGV4cGxvcmF0aW9ucyA9IFwiZXhwbG9yYXRpb25zXCIsXG4gIG1hcmtldCA9IFwibWFya2V0XCIsXG4gIG1ldGEgPSBcIm1ldGFcIixcbiAgbWluaWdhbWVzID0gXCJtaW5pZ2FtZXNcIixcbiAgcHVyY2hhc2VzID0gXCJwdXJjaGFzZXNcIixcbiAgc2FsZXMgPSBcInNhbGVzXCIsXG4gIHZlcnNpb24gPSBcInZlcnNpb25cIixcbiAgd2lzaGxpc3QgPSBcIndpc2hsaXN0XCIsXG59XG4iLCJpbXBvcnQgeyBiYXNlNjRTdHJpbmdUb0Jsb2IsIGJsb2JUb0Jhc2U2NFN0cmluZyB9IGZyb20gXCJibG9iLXV0aWxcIlxuaW1wb3J0IHR5cGUgeyBNZXRhIH0gZnJvbSBcIi4uL2FwaS9tZXRhXCJcbmltcG9ydCB0eXBlIHsgRmF2b3VyaXRlT3V0Zml0IH0gZnJvbSBcIi4uL2FwcGVhcmFuY2UvaW50ZXJmYWNlcy9mYXZvdXJpdGVfb3V0Zml0XCJcbmltcG9ydCBpbmRleGVkX2RiIGZyb20gXCIuLi9pbmRleGVkX2RiL2luZGV4ZWRfZGJcIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9pbnRlcmZhY2VzL21hcmtldF9lbnRyeVwiXG5pbXBvcnQgdHlwZSB7IFNldHRpbmdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL3NldHRpbmdzXCJcbmltcG9ydCB0eXBlIHsgQXV0b0V4cGxvcmVMb2NhdGlvbiB9IGZyb20gXCIuL2F1dG9fZXhwbG9yZV9sb2NhdGlvblwiXG5pbXBvcnQgdHlwZSB7IEV4cGxvcmF0aW9uUmVzdWx0IH0gZnJvbSBcIi4vZXhwbG9yYXRpb25fcmVzdWx0XCJcbmltcG9ydCB0eXBlIHsgRXhwb3J0YWJsZUZhdm91cml0ZSB9IGZyb20gXCIuL2V4cG9ydGFibGVfZmF2b3VyaXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZUtleSB9IGZyb20gXCIuL2xvY2FsX3N0b3JhZ2UuZW51bVwiXG5pbXBvcnQgdHlwZSB7IFNhbGUgfSBmcm9tIFwiLi9zYWxlXCJcbmltcG9ydCB0eXBlIHsgV2lzaGVkSXRlbSB9IGZyb20gXCIuL3dpc2hlZF9pdGVtXCJcblxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHN0YXRpYyBnZXQgYXV0b0V4cGxvcmVMb2NhdGlvbnMoKTogQXV0b0V4cGxvcmVMb2NhdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPEF1dG9FeHBsb3JlTG9jYXRpb25bXT4oXG4gICAgICBMb2NhbFN0b3JhZ2VLZXkuYXV0b0V4cGxvcmVMb2NhdGlvbnMsXG4gICAgICBbXVxuICAgIClcbiAgfVxuXG4gIHN0YXRpYyBzZXQgYXV0b0V4cGxvcmVMb2NhdGlvbnMobG9jYXRpb25zOiBBdXRvRXhwbG9yZUxvY2F0aW9uW10pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LmF1dG9FeHBsb3JlTG9jYXRpb25zLCBsb2NhdGlvbnMpXG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlYnVnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5LmRlYnVnLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgZGVidWcoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuZGVidWcsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IGV4cGxvcmF0aW9uSGlzdG9yeSgpOiBFeHBsb3JhdGlvblJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPEV4cGxvcmF0aW9uUmVzdWx0W10+KFxuICAgICAgTG9jYWxTdG9yYWdlS2V5LmV4cGxvcmF0aW9uSGlzdG9yeSxcbiAgICAgIFtdXG4gICAgKVxuICB9XG5cbiAgc3RhdGljIHNldCBleHBsb3JhdGlvbkhpc3RvcnkoZXhwbG9yYXRpb25IaXN0b3J5OiBFeHBsb3JhdGlvblJlc3VsdFtdKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5leHBsb3JhdGlvbkhpc3RvcnksIGV4cGxvcmF0aW9uSGlzdG9yeSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZXhwbG9yYXRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5LmV4cGxvcmF0aW9ucywgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IGV4cGxvcmF0aW9ucyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5leHBsb3JhdGlvbnMsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IG1hcmtldCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPGJvb2xlYW4+KExvY2FsU3RvcmFnZUtleS5tYXJrZXQsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBtYXJrZXQoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkubWFya2V0LCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCBtZXRhKCk6IE1ldGEgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPE1ldGEgfCBudWxsPihMb2NhbFN0b3JhZ2VLZXkubWV0YSwgbnVsbClcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWV0YShtZXRhOiBNZXRhIHwgbnVsbCkge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkubWV0YSwgbWV0YSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWluaWdhbWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5Lm1pbmlnYW1lcywgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IG1pbmlnYW1lcyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5taW5pZ2FtZXMsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHB1cmNoYXNlcygpOiBNYXJrZXRFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPE1hcmtldEVudHJ5W10+KExvY2FsU3RvcmFnZUtleS5wdXJjaGFzZXMsIFtdKVxuICB9XG5cbiAgc3RhdGljIHNldCBwdXJjaGFzZXMoZW50cnk6IE1hcmtldEVudHJ5W10pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LnB1cmNoYXNlcywgZW50cnkpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHNhbGVzKCk6IFNhbGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxTYWxlW10+KExvY2FsU3RvcmFnZUtleS5zYWxlcywgW10pXG4gIH1cblxuICBzdGF0aWMgc2V0IHNhbGVzKHNhbGU6IFNhbGVbXSkge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuc2FsZXMsIHNhbGUpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPHN0cmluZz4oTG9jYWxTdG9yYWdlS2V5LnZlcnNpb24sIFwiXCIpXG4gIH1cblxuICBzdGF0aWMgc2V0IHZlcnNpb24odmVyc2lvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS52ZXJzaW9uLCB2ZXJzaW9uKVxuICB9XG5cbiAgc3RhdGljIGdldCB3aXNobGlzdCgpOiBXaXNoZWRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08V2lzaGVkSXRlbVtdPihMb2NhbFN0b3JhZ2VLZXkud2lzaGxpc3QsIFtdKVxuICB9XG5cbiAgc3RhdGljIHNldCB3aXNobGlzdChsb2NhdGlvbnM6IFdpc2hlZEl0ZW1bXSkge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkud2lzaGxpc3QsIGxvY2F0aW9ucylcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRTZXR0aW5ncygpOiBQcm9taXNlPFNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF1dG9FeHBsb3JlTG9jYXRpb25zOiB0aGlzLmF1dG9FeHBsb3JlTG9jYXRpb25zLFxuICAgICAgZGVidWc6IHRoaXMuZGVidWcsXG4gICAgICBleHBsb3JhdGlvbkhpc3Rvcnk6IHRoaXMuZXhwbG9yYXRpb25IaXN0b3J5LFxuICAgICAgZXhwbG9yYXRpb25zOiB0aGlzLmV4cGxvcmF0aW9ucyxcbiAgICAgIGZhdm91cml0ZXM6IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAoXG4gICAgICAgICAgYXdhaXQgaW5kZXhlZF9kYi5nZXRGYXZvdXJpdGVPdXRmaXRzKClcbiAgICAgICAgKS5tYXA8UHJvbWlzZTxFeHBvcnRhYmxlRmF2b3VyaXRlPj4oYXN5bmMgZmF2b3VyaXRlID0+ICh7XG4gICAgICAgICAgbmFtZTogZmF2b3VyaXRlLm5hbWUsXG4gICAgICAgICAgaXRlbXM6IGZhdm91cml0ZS5pdGVtcyxcbiAgICAgICAgICBiYXNlNjQ6IGF3YWl0IGJsb2JUb0Jhc2U2NFN0cmluZyhmYXZvdXJpdGUuYmxvYiksXG4gICAgICAgIH0pKVxuICAgICAgKSxcbiAgICAgIG1hcmtldDogdGhpcy5tYXJrZXQsXG4gICAgICBtaW5pZ2FtZXM6IHRoaXMubWluaWdhbWVzLFxuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgd2lzaGxpc3Q6IHRoaXMud2lzaGxpc3QsXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHNldFNldHRpbmdzKHNldHRpbmdzOiBTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBzZXR0aW5ncy5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuICAgIHRoaXMuZGVidWcgPSBzZXR0aW5ncy5kZWJ1Z1xuICAgIHRoaXMuZXhwbG9yYXRpb25IaXN0b3J5ID0gc2V0dGluZ3MuZXhwbG9yYXRpb25IaXN0b3J5XG4gICAgdGhpcy5leHBsb3JhdGlvbnMgPSBzZXR0aW5ncy5leHBsb3JhdGlvbnNcbiAgICB0aGlzLm1hcmtldCA9IHNldHRpbmdzLm1hcmtldFxuICAgIHRoaXMubWluaWdhbWVzID0gc2V0dGluZ3MubWluaWdhbWVzXG4gICAgdGhpcy52ZXJzaW9uID0gc2V0dGluZ3MudmVyc2lvblxuICAgIHRoaXMud2lzaGxpc3QgPSBzZXR0aW5ncy53aXNobGlzdFxuXG4gICAgYXdhaXQgaW5kZXhlZF9kYi5jbGVhckZhdm91cml0ZU91dGZpdHMoKVxuICAgIGZvciAoY29uc3QgZmF2b3VyaXRlIG9mIHNldHRpbmdzLmZhdm91cml0ZXMubWFwPEZhdm91cml0ZU91dGZpdD4oXG4gICAgICBmYXZvdXJpdGUgPT4gKHtcbiAgICAgICAgYmxvYjogYmFzZTY0U3RyaW5nVG9CbG9iKGZhdm91cml0ZS5iYXNlNjQpLFxuICAgICAgICBpdGVtczogZmF2b3VyaXRlLml0ZW1zLFxuICAgICAgICBuYW1lOiBmYXZvdXJpdGUubmFtZSxcbiAgICAgIH0pXG4gICAgKSkge1xuICAgICAgdm9pZCBpbmRleGVkX2RiLmFkZEZhdm91cml0ZU91dGZpdChmYXZvdXJpdGUpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SXRlbTxUPihrZXk6IExvY2FsU3RvcmFnZUtleSwgZmFsbGJhY2s6IFQpOiBUIHtcbiAgICByZXR1cm4gKEpTT04ucGFyc2UoXG4gICAgICB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gSlNPTi5zdHJpbmdpZnkoZmFsbGJhY2spXG4gICAgKSA/PyBmYWxsYmFjaykgYXMgVFxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2V0SXRlbTxUPihrZXk6IExvY2FsU3RvcmFnZUtleSwgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICB9XG59XG4iLCJleHBvcnQgZW51bSBCb2R5TG9jYXRpb24ge1xuICBBbGwgPSBcIlwiLFxuICBVbmRlcndlYXIgPSAxLFxuICBTa2lucyA9IDIsXG4gIFRhdHRvb3MgPSAyMCxcbiAgTW91dGhzID0gMjEsXG4gIEV5ZXMgPSAzLFxuICBIYWlyID0gNCxcbiAgU29ja3MgPSA1LFxuICBTaG9lcyA9IDYsXG4gIFBhbnRzID0gNyxcbiAgSGFuZEFjY2Vzc29yaWVzID0gOCxcbiAgVG9wcyA9IDksXG4gIENvYXRzID0gMTAsXG4gIEdsb3ZlcyA9IDExLFxuICBOZWNrbGFjZXMgPSAxMixcbiAgRHJlc3NlcyA9IDEzLFxuICBIYXRzID0gMTQsXG4gIEZhY2VBY2Nlc3NvcmllcyA9IDE1LFxuICBGdW5kcyA9IDE2LFxuICBCZWx0cyA9IDE4LFxuICBBdG1vc3BoZXJlcyA9IDE5LFxufVxuIiwiaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuL3R5cGUuZW51bVwiXG5cbmV4cG9ydCBlbnVtIENhdGVnb3J5U3RyaW5nIHtcbiAgYWxsID0gXCJcIixcbiAgZm9vZCA9IFwiZm9vZFwiLFxuICBhbGNoZW15ID0gXCJhbGNoZW15XCIsXG4gIHV0aWxpdHkgPSBcInV0aWxpdHlcIixcbiAgdGFtZSA9IFwidGFtZVwiLFxufVxuXG5leHBvcnQgZW51bSBDYXRlZ29yeU51bWJlciB7XG4gIGFsbCA9IENhdGVnb3J5U3RyaW5nLmFsbCxcbiAgZm9vZCA9IDEsXG4gIGFsY2hlbXkgPSBUeXBlLkNvbnN1bWFibGUsXG4gIHV0aWxpdHkgPSAzLFxuICB0YW1lID0gNCxcbn1cbiIsImV4cG9ydCBlbnVtIEd1YXJkIHtcbiAgYW55ID0gXCJcIixcbiAgbGlnaHQgPSAxLFxuICBvYnNpZGlhbixcbiAgYWJzeW50aGUsXG4gIHNoYWRvdyxcbn1cbiIsImV4cG9ydCBlbnVtIFJhcml0eSB7XG4gIGFsbCA9IFwiXCIsXG4gIGNvbW1vbiA9IFwiY29tbW9uXCIsXG4gIHJhcmUgPSBcInJhcmVcIixcbiAgZXBpYyA9IFwiZXBpY1wiLFxuICBsZWdlbmRhcnkgPSBcImxlZ2VuZGFyeVwiLFxuICBldmVudCA9IFwiZXZlbnRcIixcbn1cbiIsImV4cG9ydCBlbnVtIFR5cGUge1xuICBBbGwgPSBcIlwiLFxuICBCYWcgPSBcIkJhZ1wiLFxuICBDb25zdW1hYmxlID0gXCJDb25zdW1hYmxlXCIsXG4gIEVnZ0l0ZW0gPSBcIkVnZ0l0ZW1cIixcbiAgUGxheWVyV2VhcmFibGVJdGVtID0gXCJQbGF5ZXJXZWFyYWJsZUl0ZW1cIixcbiAgUXVlc3RJdGVtID0gXCJRdWVzdEl0ZW1cIixcbn1cbiIsImltcG9ydCB7IHRyaW1JY29uIH0gZnJvbSBcIi4uL2VsZGFyeWFfdXRpbFwiXG5pbXBvcnQgeyBSYXJpdHkgfSBmcm9tIFwiLi9lbnVtcy9yYXJpdHkuZW51bVwiXG5pbXBvcnQgdHlwZSB7IEJ1eU5vd1ByaWNlIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9idXlfbm93X3ByaWNlXCJcbmltcG9ydCB0eXBlIHsgQ3VycmVudFByaWNlIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jdXJyZW50X3ByaWNlXCJcbmltcG9ydCB0eXBlIHsgTWFya2V0RW50cnkgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL21hcmtldF9lbnRyeVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5RGF0YVNldCB9IGZyb20gXCIuL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5X2RhdGFfc2V0XCJcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EZXRhaWxzKGxpOiBIVE1MTElFbGVtZW50KTogTWFya2V0RW50cnkgfCBudWxsIHtcbiAgY29uc3QgbmFtZSA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiLmFic3RyYWN0LW5hbWVcIik/LmlubmVyVGV4dFxuICBjb25zdCBhYnN0cmFjdFR5cGUgPVxuICAgIGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiLmFic3RyYWN0LXR5cGVcIik/LmlubmVyVGV4dFxuICBjb25zdCBzcmMgPSBsaS5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFwiLmFic3RyYWN0LWljb24gaW1nXCIpPy5zcmNcblxuICBjb25zdCByYXJpdHk6IFJhcml0eSA9XG4gICAgUmFyaXR5W1xuICAgICAgKGxpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgIFwiLnJhcml0eS1tYXJrZXItY29tbW9uLCAucmFyaXR5LW1hcmtlci1yYXJlLCAucmFyaXR5LW1hcmtlci1lcGljLCAucmFyaXR5LW1hcmtlci1sZWdlbmRhcnksIC5yYXJpdHktbWFya2VyLWV2ZW50XCJcbiAgICAgICAgKVxuICAgICAgICA/LmNsYXNzTmFtZS5zcGxpdChcInJhcml0eS1tYXJrZXItXCIpWzFdID8/IFwiXCIpIGFzIGtleW9mIHR5cGVvZiBSYXJpdHlcbiAgICBdXG5cbiAgY29uc3QgY3VycmVudFByaWNlID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcbiAgICBcIi5wcmljZS1pdGVtW2RhdGEtYmlkc11cIlxuICApPy5kYXRhc2V0IGFzIHVua25vd24gYXMgQ3VycmVudFByaWNlXG5cbiAgY29uc3QgYnV5Tm93UHJpY2UgPSBsaS5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFxuICAgIFwiLnByaWNlLWl0ZW06bm90KFtkYXRhLWJpZHNdKVwiXG4gICk/LmRhdGFzZXQgYXMgdW5rbm93biBhcyBCdXlOb3dQcmljZVxuXG4gIGlmICghc3JjIHx8ICFuYW1lIHx8ICFhYnN0cmFjdFR5cGUpIHJldHVybiBudWxsXG5cbiAgcmV0dXJuIHtcbiAgICAuLi4obGkuZGF0YXNldCBhcyB1bmtub3duIGFzIE1hcmtldEVudHJ5RGF0YVNldCksXG4gICAgaWNvbjogdHJpbUljb24oc3JjKSxcbiAgICByYXJpdHksXG4gICAgbmFtZSxcbiAgICBhYnN0cmFjdFR5cGUsXG4gICAgYnV5Tm93UHJpY2UsXG4gICAgY3VycmVudFByaWNlLFxuICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gIH1cbn1cbiIsImV4cG9ydCBjbGFzcyBNYXRoVXRpbCB7XG4gIHN0YXRpYyByZWFkb25seSBwaGkgPSAoMSArIE1hdGguc3FydCg1KSkgLyAyXG5cbiAgc3RhdGljIHJhbmRvbUJldHdlZW4obWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pICsgbWluXG4gIH1cbn1cbiIsImltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBtaWdyYXRlKCk6IHZvaWQge1xuICBzd2l0Y2ggKExvY2FsU3RvcmFnZS52ZXJzaW9uKSB7XG4gICAgY2FzZSBHTS5pbmZvLnNjcmlwdC52ZXJzaW9uOlxuICAgICAgcmV0dXJuXG5cbiAgICBjYXNlIFwiXCI6XG4gICAgICBpbnN0YWxsZWQoKVxuICAgICAgYnJlYWtcblxuICAgIGRlZmF1bHQ6XG4gICAgICBzd2l0Y2ggKEdNLmluZm8uc2NyaXB0LnZlcnNpb24pIHtcbiAgICAgICAgY2FzZSBcIjEuMi4wXCI6XG4gICAgICAgICAgdjFfMl8wKClcbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgXCIxLjIuOVwiOlxuICAgICAgICAgIHYxXzJfOSgpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIFwiMS4yLjEwXCI6XG4gICAgICAgICAgdjFfMl8xMCgpXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGluc3RhbGxlZCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgfVxuXG4gIExvY2FsU3RvcmFnZS52ZXJzaW9uID0gR00uaW5mby5zY3JpcHQudmVyc2lvblxufVxuXG5mdW5jdGlvbiBpbnN0YWxsZWQoKTogdm9pZCB7XG4gICQuZmxhdnJOb3RpZihgJHtuYW1lKCl9ICR7dmVyc2lvbigpfSBpbnN0YWxsZWQhYClcbn1cblxuZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcge1xuICByZXR1cm4gYDxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPmBcbn1cblxuZnVuY3Rpb24gdmVyc2lvbigpOiBzdHJpbmcge1xuICByZXR1cm4gYHY8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQudmVyc2lvbn08L3N0cm9uZz5gXG59XG5cbmZ1bmN0aW9uIHYxXzJfMCgpOiB2b2lkIHtcbiAgTG9jYWxTdG9yYWdlLnNhbGVzID0gW11cbiAgJC5mbGF2ck5vdGlmKGBVcGRhdGVkIHRvICR7dmVyc2lvbigpfS4gWW91ciBzYWxlcyBoaXN0b3J5IHdhcyBlcmFzZWQuYClcbn1cblxuZnVuY3Rpb24gdjFfMl85KCk6IHZvaWQge1xuICAkLmZsYXZyTm90aWYoXG4gICAgYFVwZGF0ZWQgdG8gJHt2ZXJzaW9uKCl9LiBUaGUgd2lzaGxpc3QgaGFzIGJlZW4gaW1wcm92ZWQgdG8gc29ydCBieSBjYXRlZ29yeS90eXBlL25hbWUsIGJ1dCB5b3VyIHdpc2hlZCBpdGVtcyBkbyBub3QgaGF2ZSBhIHR5cGUuIFlvdSBjYW4gYWRkIHR5cGVzIGJ5IHJlLWFkZGluZyB0aGUgaXRlbXMgdmlhIHRoZSBtYXJrZXQuYFxuICApXG59XG5cbmZ1bmN0aW9uIHYxXzJfMTAoKTogdm9pZCB7XG4gICQuZmxhdnJOb3RpZihcbiAgICBgVXBkYXRlZCB0byAke3ZlcnNpb24oKX0uIFRoZSB3aXNobGlzdCBoYXMgYmVlbiBpbXByb3ZlZCB0byBzb3J0IGJ5IGNhdGVnb3J5L3R5cGUvcmFyaXR5L25hbWUsIGJ1dCB5b3VyIHdpc2hlZCBpdGVtcyBkbyBub3QgaGF2ZSBhIHJhcml0eS4gWW91IGNhbiBhZGQgcmFyaXRpZXMgYnkgcmUtYWRkaW5nIHRoZSBpdGVtcyB2aWEgdGhlIG1hcmtldC5gXG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHR5cGUgeyBHZXRQcml6ZXNEYXRhIH0gZnJvbSBcIi4uL2FwaS9nZXRfcHJpemVzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgdHlwZSB7IFN0YXJ0R2FtZURhdGEgfSBmcm9tIFwiLi4vYXBpL3N0YXJ0X2dhbWVfZGF0YVwiXG5pbXBvcnQgXCIuLi9lbGRhcnlhL2pxdWVyeVwiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgZmxhcHB5IH0gZnJvbSBcIi4vZmxhcHB5XCJcbmltcG9ydCB7IGhhdGNobGluZ3MgfSBmcm9tIFwiLi9oYXRjaGxpbmdzXCJcbmltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi9taW5pZ2FtZVwiXG5pbXBvcnQgeyBwZWdnbGUgfSBmcm9tIFwiLi9wZWdnbGVcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGxheVBlZ2dsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHBsYXkocGVnZ2xlKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGxheUZsYXBweSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHBsYXkoZmxhcHB5KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGxheUhhdGNobGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBwbGF5KGhhdGNobGluZ3MpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBsYXkobWluaWdhbWU6IE1pbmlnYW1lKTogUHJvbWlzZTx2b2lkPiB7XG4gIC8vIERpc2FibGUgYnV0dG9uc1xuICBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPihyZXNvbHZlID0+IHtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxCdXR0b25FbGVtZW50PihcbiAgICAgICAgXCIubWluaWdhbWVzLXJ1bGVzIC5mbGF2ci1idXR0b25cIlxuICAgICAgKVxuXG4gICAgICBpZiAoYnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbClcblxuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiBidXR0b25zKSB7XG4gICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJkaXNhYmxlZFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgfVxuICAgIH0sIDI1MClcbiAgfSlcblxuICBjb25zdCBqc29uID0gYXdhaXQgZXhlY3V0ZShtaW5pZ2FtZSlcblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcbiAgJC5mbGF2ck5vdGlmKFxuICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAuLi5taW5pZ2FtZSxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS5taW5pZ2FtZXMucGxheWluZyhtaW5pZ2FtZS5uYW1lKSxcbiAgICB9KVxuICApXG5cbiAgY29uc3QgZ2FtZVRva2VuID0ganNvbi5kYXRhXG4gIGNvbnN0IHNjb3JlID0gcmFuZG9tSW50KG1pbmlnYW1lLnNjb3JlTWluLCBtaW5pZ2FtZS5zY29yZU1heClcbiAgY29uc3QgZW5jX3Rva2VuID0geG9yRW5jb2RlKGdhbWVUb2tlbiwgc2NvcmUudG9TdHJpbmcoKSlcbiAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PlxuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgcmFuZG9tSW50KG1pbmlnYW1lLmRlbGF5TWluLCBtaW5pZ2FtZS5kZWxheU1heCkpXG4gIClcblxuICBhd2FpdCBnZXRQcml6ZXMobWluaWdhbWUsIGdhbWVUb2tlbiwgc2NvcmUpXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCByYW5kb21JbnQoMTAwMCwgMzAwMCkpKVxuXG4gIGF3YWl0IHNlbmQoZW5jX3Rva2VuLCBzY29yZSwgbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpKVxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKSlcbn1cblxuZnVuY3Rpb24gcmFuZG9tSW50KG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUobWluaWdhbWU6IE1pbmlnYW1lKTogUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxTdGFydEdhbWVEYXRhPj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGlmICh0eXBlb2YgUmVjYXB0Y2hhICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBSZWNhcHRjaGEuZXhlY3V0ZShcbiAgICAgICAgYG1pbmlnYW1lU3RhcnQke21pbmlnYW1lLm5hbWV9YCxcbiAgICAgICAgKHRva2VuKTogdm9pZCA9PlxuICAgICAgICAgIHZvaWQgc3RhcnRHYW1lKG1pbmlnYW1lLCB0b2tlbikudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgc3RhcnRHYW1lKG1pbmlnYW1lKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdClcbiAgICB9XG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0R2FtZShcbiAgbWluaWdhbWU6IE1pbmlnYW1lLFxuICByZWNhcHRjaGFUb2tlbj86IHN0cmluZ1xuKTogUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxTdGFydEdhbWVEYXRhPj4oXG4gICAgKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgIHZvaWQgJC5hamF4KHtcbiAgICAgICAgdXJsOiBcIi9taW5pZ2FtZXMvYWpheF9zdGFydEdhbWVcIixcbiAgICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICAgIGRhdGFUeXBlOiBcImpzb25cIixcbiAgICAgICAgZGF0YTogcmVjYXB0Y2hhVG9rZW5cbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZ2FtZTogbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICByZWNhcHRjaGFUb2tlbjogcmVjYXB0Y2hhVG9rZW4sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGdhbWU6IG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3M6IChqc29uOiBQYWNrZXQ8U3RhcnRHYW1lRGF0YT4pOiB2b2lkID0+IHtcbiAgICAgICAgICByZXNvbHZlKGpzb24pXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVqZWN0KClcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UHJpemVzKFxuICBtaW5pZ2FtZTogTWluaWdhbWUsXG4gIGdhbWVUb2tlbjogc3RyaW5nLFxuICBzY29yZTogbnVtYmVyXG4pOiBQcm9taXNlPFBhY2tldDxHZXRQcml6ZXNEYXRhPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PEdldFByaXplc0RhdGE+PihcbiAgICAocmVzb2x2ZSk6IHZvaWQgPT5cbiAgICAgIHZvaWQgJC5wb3N0KFxuICAgICAgICBcIi9taW5pZ2FtZXMvYWpheF9nZXRQcml6ZXNcIixcbiAgICAgICAgeyBnYW1lOiBtaW5pZ2FtZS5uYW1lLnRvTG93ZXJDYXNlKCksIHNjb3JlOiBzY29yZSB9LFxuICAgICAgICAoanNvbjogUGFja2V0PEdldFByaXplc0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShqc29uKVxuXG4gICAgICAgICAgaWYgKGpzb24ucmVzdWx0ID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG5cbiAgICAgICAgICAgICQuZmxhdnJOb3RpZihcbiAgICAgICAgICAgICAgdGVtcGxhdGUucmVuZGVyKHtcbiAgICAgICAgICAgICAgICAuLi5taW5pZ2FtZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWluaWdhbWVzLnBsYXllZF9mb3IoXG4gICAgICAgICAgICAgICAgICBtaW5pZ2FtZS5uYW1lLFxuICAgICAgICAgICAgICAgICAganNvbi5kYXRhLm1hYW5hXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9IGVsc2UgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgfSxcbiAgICAgICAgXCJqc29uXCJcbiAgICAgICkuZmFpbCgoKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcbiAgICAgICAgICByZXNvbHZlKGdldFByaXplcyhtaW5pZ2FtZSwgZ2FtZVRva2VuLCBzY29yZSkpXG4gICAgICAgIH0sIHJhbmRvbUludCgxMDAwLCAzMDAwKSlcbiAgICAgIClcbiAgKVxufVxuXG4vKipcbiAqIFPDqWN1cmlzYXRpb24gZGUgbCdlbnZvaSBkdSBzY29yZVxuICogQmFzw6kgc3VyIGwnZW5jb2RhZ2UgWE9SIDogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YT1JfY2lwaGVyXG4gKiBFZmZlY3R1ZSB1biBYT1IgYml0IMOgIGJpdCBlbnRyZSB1bmUgY2hhaW5lIGV0IHVuZSBjbMOpXG4gKi9cbmZ1bmN0aW9uIHhvckVuY29kZShzdHI6IHN0cmluZywga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBBc3N1cmUgcXVlIGxlcyBkZXV4IHBhcmFtw6h0cmVzIHNvaWVudCBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlXG4gIHN0ciA9IHN0ci50b1N0cmluZygpXG4gIGtleSA9IGtleS50b1N0cmluZygpXG5cbiAgLyoqIEVuY29kYWdlIFhPUiAqL1xuICBsZXQgeG9yID0gXCJcIlxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGxldCB0bXAgPSBzdHJbaV1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGtleS5sZW5ndGg7ICsraikge1xuICAgICAgdG1wID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0bXAhLmNoYXJDb2RlQXQoMCkgXiBrZXkuY2hhckNvZGVBdChqKSlcbiAgICB9XG4gICAgeG9yICs9IHRtcFxuICB9XG5cbiAgLy8gUmVudm9pZSBsZSByw6lzdWx0YXQgZW4gZW5jb2RhbnQgbGVzIGNhcmFjdMOocmVzIHNww6ljaWF1eCBwb3V2YW50IHBvc2VyIHByb2Jsw6htZSAoXFxuIHBhciBleGVtcGxlKVxuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHhvcilcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VuZChcbiAgZW5jX3Rva2VuOiBzdHJpbmcsXG4gIHNjb3JlOiBudW1iZXIsXG4gIGdhbWU6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBpZiAodHlwZW9mIFJlY2FwdGNoYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgUmVjYXB0Y2hhLmV4ZWN1dGUoXG4gICAgICAgIFwibWluaWdhbWVTYXZlXCIgKyBnYW1lLFxuICAgICAgICAocmVjYXB0Y2hhVG9rZW4pOiB2b2lkID0+XG4gICAgICAgICAgdm9pZCBzYXZlU2NvcmUoZW5jX3Rva2VuLCBzY29yZSwgZ2FtZSwgcmVjYXB0Y2hhVG9rZW4pLnRoZW4ocmVzb2x2ZSlcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCBzYXZlU2NvcmUoZW5jX3Rva2VuLCBzY29yZSwgZ2FtZSkudGhlbihyZXNvbHZlKVxuICAgIH1cbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZVNjb3JlKFxuICBlbmNfdG9rZW46IHN0cmluZyxcbiAgc2NvcmU6IG51bWJlcixcbiAgZ2FtZTogc3RyaW5nLFxuICByZWNhcHRjaGFUb2tlbj86IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBjb25zdCB0b2tlbiA9IGRlY29kZVVSSUNvbXBvbmVudChlbmNfdG9rZW4pXG5cbiAgICB2b2lkICQuYWpheCh7XG4gICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgIHVybDogXCIvbWluaWdhbWVzL2FqYXhfc2F2ZVNjb3JlXCIsXG4gICAgICBkYXRhOiByZWNhcHRjaGFUb2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICAgIHNjb3JlOiBzY29yZSxcbiAgICAgICAgICAgIGdhbWU6IGdhbWUsXG4gICAgICAgICAgICByZWNhcHRjaGFUb2tlbjogcmVjYXB0Y2hhVG9rZW4sXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgICAgIHNjb3JlOiBzY29yZSxcbiAgICAgICAgICAgIGdhbWU6IGdhbWUsXG4gICAgICAgICAgfSxcbiAgICAgIHN1Y2Nlc3M6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpXG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlc29sdmUoc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUpKVxuICAgICAgICB9LCByYW5kb21JbnQoMTAwMCwgMzAwMCkpLFxuICAgIH0pXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxuXG5leHBvcnQgY29uc3QgZmxhcHB5OiBNaW5pZ2FtZSA9IHtcbiAgbmFtZTogXCJGbGFwcHlcIixcbiAgc2NvcmVNaW46IDE4MCxcbiAgc2NvcmVNYXg6IDIwMCxcbiAgZGVsYXlNaW46IDYwXzAwMCxcbiAgZGVsYXlNYXg6IDcwXzAwMCxcbiAgYnV0dG9uU2VsZWN0b3I6ICcubWluaWdhbWUtc3RhcnQgW2hyZWY9XCIvbWluaWdhbWVzL2J1YmJsdGVtcGxlXCJdIC5ubC1idXR0b24nLFxuICBpY29uOiBcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvbWluaWdhbWVzL2ljb25fYnViYmxldGVtcGxlLnBuZ1wiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcblxuZXhwb3J0IGNvbnN0IGhhdGNobGluZ3M6IE1pbmlnYW1lID0ge1xuICBuYW1lOiBcIkhhdGNobGluZ3NcIixcbiAgc2NvcmVNaW46IDE4LFxuICBzY29yZU1heDogMjAsXG4gIGRlbGF5TWluOiAzMF8wMDAsXG4gIGRlbGF5TWF4OiAzMF8wMDAsXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9jb2Nvb25pbnBpY2tcIl0gLm5sLWJ1dHRvbicsXG4gIGljb246IFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC9taW5pZ2FtZXMvaWNvbl9jb2NvbmlucGljay5wbmdcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi9taW5pZ2FtZVwiXG5cbmV4cG9ydCBjb25zdCBwZWdnbGU6IE1pbmlnYW1lID0ge1xuICBuYW1lOiBcIlBlZ2dsZVwiLFxuICBzY29yZU1pbjogOSxcbiAgc2NvcmVNYXg6IDEwLFxuICBkZWxheU1pbjogMTBfMDAwLFxuICBkZWxheU1heDogMjBfMDAwLFxuICBidXR0b25TZWxlY3RvcjogJy5taW5pZ2FtZS1zdGFydCBbaHJlZj1cIi9taW5pZ2FtZXMvZ2VtYm9tYlwiXSAubmwtYnV0dG9uJyxcbiAgaWNvbjogXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L21pbmlnYW1lcy9pY29uX2dlbWJvbWIucG5nXCIsXG59XG4iLCJpbXBvcnQgdHlwZSB7IFBhcnNhYmxlSXRlbSB9IGZyb20gXCIuL2FwcGVhcmFuY2UvaW50ZXJmYWNlcy9wYXJzYWJsZV9pdGVtXCJcbmltcG9ydCB0eXBlIHsgQXZhdGFyIH0gZnJvbSBcIi4vZWxkYXJ5YS9hdmF0YXJcIlxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0T3V0Zml0KHNlbGVjdG9yOiBzdHJpbmcsIG5hbWUgPSBcIm91dGZpdFwiKTogdm9pZCB7XG4gIGNvbnN0IGF2YXRhciA9IFNhY2hhLkF2YXRhci5hdmF0YXJzW3NlbGVjdG9yXVxuICBpZiAoIWF2YXRhcikgcmV0dXJuXG5cbiAgY29uc3Qgb3V0Zml0ID0gcGFyc2VBdmF0YXIoYXZhdGFyKVxuXG4gIGNvbnN0IGhyZWYgPVxuICAgIFwiZGF0YTp0ZXh0L2pzb247Y2hhcnNldD11dGYtOCxcIiArXG4gICAgZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KG91dGZpdCwgdW5kZWZpbmVkLCAyKSlcblxuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcbiAgYS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGhyZWYpXG4gIGEuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgYCR7bmFtZX0uanNvbmApXG4gIGEuY2xpY2soKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBdmF0YXIoYXZhdGFyOiBBdmF0YXIpOiBQYXJzYWJsZUl0ZW1bXSB7XG4gIHJldHVybiBhdmF0YXIuY2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcbiAgICBjb25zdCBpdGVtID0gY2hpbGQuZ2V0SXRlbSgpXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBpdGVtLl9pZCxcbiAgICAgIGdyb3VwOiBpdGVtLl9ncm91cCxcbiAgICAgIG5hbWU6IGl0ZW0uX25hbWUsXG4gICAgICBpbWFnZTogaXRlbS5faW1hZ2UsXG4gICAgICB0eXBlOiBpdGVtLl90eXBlLFxuICAgICAgY2F0ZWdvcnlJZDogaXRlbS5fY2F0ZWdvcnlJZCxcbiAgICAgIGhpZGRlbkNhdGVnb3JpZXM6IE9iamVjdC52YWx1ZXMoaXRlbS5faGlkZGVuQ2F0ZWdvcmllcyksXG4gICAgICBhbmltYXRpb25EYXRhOiBpdGVtLl9hbmltYXRpb25EYXRhLFxuICAgICAgbG9ja2VkOiBpdGVtLl9sb2NrZWQsXG4gICAgfVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHsgbGlzdGVuVHJlYXN1cmVIdW50IH0gZnJvbSBcIi4vZXhwbG9yYXRpb24td2F0Y2hlclwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRXhwbG9yYXRpb25IaXN0b3J5KCk6IHZvaWQge1xuICBsb2FkSGlzdG9yeUJ1dHRvbigpXG4gIGxpc3RlblRyZWFzdXJlSHVudCgpXG59XG5cbmZ1bmN0aW9uIGxvYWRIaXN0b3J5QnV0dG9uKCk6IHZvaWQge1xuICBjb25zdCBjbG9zZUV4cGxvcmF0aW9uQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQW5jaG9yRWxlbWVudD4oXG4gICAgXCIjY2xvc2UtdHJlYXN1cmUtaHVudC1pbnRlcmZhY2VcIlxuICApXG4gIGlmICghY2xvc2VFeHBsb3JhdGlvbkJ1dHRvbilcbiAgICByZXR1cm4gdm9pZCBDb25zb2xlLmVycm9yKFwiQ291bGRuJ3QgZmluZCAjY2xvc2UtdHJlYXN1cmUtaHVudC1pbnRlcmZhY2UuXCIpXG5cbiAgY2xvc2VFeHBsb3JhdGlvbkJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIlxuICBjbG9zZUV4cGxvcmF0aW9uQnV0dG9uLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiXG4gIGNsb3NlRXhwbG9yYXRpb25CdXR0b24uc3R5bGUucmlnaHQgPSBcIjBcIlxuICBjbG9zZUV4cGxvcmF0aW9uQnV0dG9uLnN0eWxlLnRvcCA9IFwiMFwiXG4gIGNsb3NlRXhwbG9yYXRpb25CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2tQZXQpXG5cbiAgY29uc3QgaGlzdG9yeUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gIGhpc3RvcnlCdXR0b24uY2xhc3NMaXN0LmFkZChcIm5sLWJ1dHRvblwiLCBcIm5sLWJ1dHRvbi1iYWNrXCIpXG4gIGhpc3RvcnlCdXR0b24uc3R5bGUubWFyZ2luUmlnaHQgPSBcIjAuNmVtXCJcbiAgaGlzdG9yeUJ1dHRvbi50ZXh0Q29udGVudCA9IHRyYW5zbGF0ZS5wZXQuaGlzdG9yeVxuICBoaXN0b3J5QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrSGlzdG9yeSlcblxuICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG4gIHJvdy5pbnNlcnRBZGphY2VudEVsZW1lbnQoXCJiZWZvcmVlbmRcIiwgaGlzdG9yeUJ1dHRvbilcbiAgcm93Lmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWVuZFwiLCBjbG9zZUV4cGxvcmF0aW9uQnV0dG9uKVxuXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI3JpZ2h0LWNvbnRhaW5lci1pbm5lclwiKVxuICAgID8uaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCByb3cpXG59XG5cbmZ1bmN0aW9uIG9uQ2xpY2tIaXN0b3J5KCk6IHZvaWQge1xuICBoaWRlUGV0KClcbiAgaGlkZUV4cGxvcmF0aW9uKClcbiAgbWFrZUhpc3RvcnkoKVxuICBzaG93SGlzdG9yeSgpXG59XG5cbmZ1bmN0aW9uIG9uQ2xpY2tQZXQoKTogdm9pZCB7XG4gIGhpZGVIaXN0b3J5KClcbiAgc2hvd1BldCgpXG59XG5cbmZ1bmN0aW9uIGhpZGVQZXQoKTogdm9pZCB7XG4gIGNvbnN0IG5hbWVDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5hbWUtY29udGFpbmVyXCIpXG4gIGNvbnN0IGluZm9Db250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluZm9zLWNvbnRhaW5lclwiKVxuICBjb25zdCBwZXRJbWFnZUNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGV0LWltYWdlLWNvbnRhaW5lclwiKVxuXG4gIGlmICghbmFtZUNvbnRhaW5lciB8fCAhaW5mb0NvbnRhaW5lciB8fCAhcGV0SW1hZ2VDb250YWluZXIpXG4gICAgcmV0dXJuIHZvaWQgQ29uc29sZS5lcnJvcihcIlRoZSBwZXQgZGlzcGxheSB3YXMgZGFtYWdlZC5cIiwge1xuICAgICAgbmFtZUNvbnRhaW5lcixcbiAgICAgIGluZm9Db250YWluZXIsXG4gICAgICBwZXRJbWFnZUNvbnRhaW5lcixcbiAgICB9KVxuXG4gIG5hbWVDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXG4gIGluZm9Db250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXG4gIHBldEltYWdlQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxufVxuXG5mdW5jdGlvbiBzaG93UGV0KCk6IHZvaWQge1xuICBjb25zdCBuYW1lQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuYW1lLWNvbnRhaW5lclwiKVxuICBjb25zdCBpbmZvQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbmZvcy1jb250YWluZXJcIilcbiAgY29uc3QgcGV0SW1hZ2VDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBldC1pbWFnZS1jb250YWluZXJcIilcblxuICBpZiAoIW5hbWVDb250YWluZXIgfHwgIWluZm9Db250YWluZXIgfHwgIXBldEltYWdlQ29udGFpbmVyKVxuICAgIHJldHVybiB2b2lkIENvbnNvbGUuZXJyb3IoXCJUaGUgcGV0IGRpc3BsYXkgd2FzIGRhbWFnZWQuXCIsIHtcbiAgICAgIG5hbWVDb250YWluZXIsXG4gICAgICBpbmZvQ29udGFpbmVyLFxuICAgICAgcGV0SW1hZ2VDb250YWluZXIsXG4gICAgfSlcblxuICBuYW1lQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIlwiXG4gIGluZm9Db250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwiXCJcbiAgcGV0SW1hZ2VDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwiXCJcbn1cblxuZnVuY3Rpb24gc2hvd0hpc3RvcnkoKTogdm9pZCB7XG4gIGNvbnN0IGhpc3RvcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhpc3RvcnktY29udGFpbmVyXCIpXG4gIGlmICghaGlzdG9yeSkgcmV0dXJuXG4gIGhpc3Rvcnkuc3R5bGUuZGlzcGxheSA9IFwiXCJcbn1cblxuZnVuY3Rpb24gaGlkZUhpc3RvcnkoKTogdm9pZCB7XG4gIGNvbnN0IGhpc3RvcnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhpc3RvcnktY29udGFpbmVyXCIpXG4gIGlmICghaGlzdG9yeSkgcmV0dXJuXG4gIGhpc3Rvcnkuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiXG59XG5cbmZ1bmN0aW9uIGhpZGVFeHBsb3JhdGlvbigpOiB2b2lkIHtcbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLXNlY3Rpb25cIilcbiAgICA/LmNsYXNzTGlzdC5yZW1vdmUoXCJ0cmVhc3VyZS1odW50LWludGVyZmFjZS1vcGVuXCIpXG59XG5cbmZ1bmN0aW9uIG1ha2VIaXN0b3J5KCk6IHZvaWQge1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhpc3RvcnktY29udGFpbmVyXCIpPy5yZW1vdmUoKVxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZXhwbG9yYXRpb25faGlzdG9yeS5odG1sXCIpXG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsZWZ0LWNvbnRhaW5lclwiKT8uaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgdGVtcGxhdGUucmVuZGVyKHtcbiAgICAgIHRyYW5zbGF0ZSxcbiAgICAgIGhpc3Rvcnk6IExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbkhpc3RvcnkubWFwKGhpc3RvcnkgPT4gKHtcbiAgICAgICAgLi4uaGlzdG9yeSxcbiAgICAgICAgZGF0ZTogdHJhbnNsYXRlLnBldC5kYXRlX3RpbWVfZm9ybWF0LmZvcm1hdChuZXcgRGF0ZShoaXN0b3J5LmRhdGUpKSxcbiAgICAgIH0pKSxcbiAgICB9KVxuICApXG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWxldGUtaGlzdG9yeVwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICBMb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25IaXN0b3J5ID0gW11cbiAgICBtYWtlSGlzdG9yeSgpXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgdHJpbUljb24gfSBmcm9tIFwiLi4vZWxkYXJ5YV91dGlsXCJcbmltcG9ydCB0eXBlIHsgRXhwbG9yYXRpb25SZXN1bHQgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9leHBsb3JhdGlvbl9yZXN1bHRcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0ZW5UcmVhc3VyZUh1bnQoKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdE92ZXJsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3RyZWFzdXJlLWh1bnQtcmVzdWx0LW92ZXJsYXlcIilcbiAgaWYgKCFyZXN1bHRPdmVybGF5KVxuICAgIHJldHVybiB2b2lkIENvbnNvbGUuZXJyb3IoXCJUaGVyZSBpcyBubyByZXN1bHQgb3ZlcmxheS5cIiwgcmVzdWx0T3ZlcmxheSlcblxuICBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgQ29uc29sZS5sb2coXCJNdXRhdGlvbiBpblwiLCByZXN1bHRPdmVybGF5KVxuICAgIGlmICghcmVzdWx0T3ZlcmxheS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHJldHVyblxuXG4gICAgY29uc3QgcmVzdWx0cyA9IGdldFJlc3VsdHMoKVxuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgQ29uc29sZS5sb2coXCJSZXN1bHRzOlwiLCByZXN1bHRzKVxuXG4gICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9uSGlzdG9yeSA9IFtcbiAgICAgIC4uLnJlc3VsdHMsXG4gICAgICAuLi5Mb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25IaXN0b3J5LFxuICAgIF1cbiAgfSkub2JzZXJ2ZShyZXN1bHRPdmVybGF5LCB7XG4gICAgYXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiXSxcbiAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0UmVzdWx0cygpOiBFeHBsb3JhdGlvblJlc3VsdFtdIHtcbiAgY29uc3QgbG9jYXRpb25OYW1lID0gZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIiN0aC1hZ2FpbiBzdHJvbmdcIilcbiAgICA/LnRleHRDb250ZW50Py50cmltKClcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGgtcmVzdWx0XCIpKS5tYXAocmVzdWx0ID0+IHtcbiAgICBjb25zdCBpbWcgPSByZXN1bHQucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcImltZy50aC1yZXN1bHQtaW1nXCIpXG5cbiAgICByZXR1cm4ge1xuICAgICAgY291bnQ6IHJlc3VsdC5xdWVyeVNlbGVjdG9yKFwiLnJlc291cmNlLWNvdW50XCIpPy50ZXh0Q29udGVudD8udHJpbSgpLFxuICAgICAgZGF0ZTogbm93LFxuICAgICAgaWNvbjogaW1nID8gdHJpbUljb24oaW1nLnNyYykgOiB1bmRlZmluZWQsXG4gICAgICBsb2NhdGlvbk5hbWUsXG4gICAgICBuYW1lOiByZXN1bHQucXVlcnlTZWxlY3RvcihcIi50b29sdGlwLWNvbnRlbnQgaDNcIik/LnRleHRDb250ZW50Py50cmltKCksXG4gICAgICB0cmFkYWJsZTogQm9vbGVhbihyZXN1bHQucXVlcnlTZWxlY3RvcihcIi50cmFkYWJsZVwiKSksXG4gICAgfVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBjaGFuZ2VSZWdpb24gfSBmcm9tIFwiLi4vYWpheC9jaGFuZ2VfcmVnaW9uXCJcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCIuLi9hcGkvcmVzdWx0LmVudW1cIlxuaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi9jb25zb2xlXCJcbmltcG9ydCB0eXBlIHsgTWFwUmVnaW9uIH0gZnJvbSBcIi4uL2VsZGFyeWEvY3VycmVudF9yZWdpb25cIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQXV0b0V4cGxvcmVMb2NhdGlvbiB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2F1dG9fZXhwbG9yZV9sb2NhdGlvblwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgQXV0b0V4cGxvcmVCdXR0b24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXV0b19leHBsb3JlX2J1dHRvblwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTWFya2VycygpOiB2b2lkIHtcbiAgY29uc3QgYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnNcblxuICBmb3IgKGNvbnN0IGRpdiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIi5tYXAtbG9jYXRpb25bZGF0YS1pZF1cIlxuICApKSB7XG4gICAgY29uc3QgbG9jYXRpb25JZCA9IE51bWJlcihkaXYuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZFwiKSlcbiAgICBpZiAoIWxvY2F0aW9uSWQpIGNvbnRpbnVlXG5cbiAgICBsb2FkUGljdG9NYXAoYXV0b0V4cGxvcmVMb2NhdGlvbnMsIGRpdilcblxuICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT5cbiAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgICAoXzogTXV0YXRpb25SZWNvcmRbXSwgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIpOiB2b2lkID0+IHtcbiAgICAgICAgICBhZGRBdXRvRXhwbG9yZUJ1dHRvbihsb2NhdGlvbklkLCBvYnNlcnZlcilcbiAgICAgICAgfVxuICAgICAgKS5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFwLWxvY2F0aW9uLXByZXZpZXdcIikgYXMgTm9kZSwge1xuICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgfSlcbiAgICApXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQXV0b0V4cGxvcmVCdXR0b24oXG4gIGxvY2F0aW9uSWQ6IG51bWJlcixcbiAgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjYnV0dG9ucy1jb250YWluZXJcIilcbiAgaWYgKCFidXR0b25zQ29udGFpbmVyKSByZXR1cm5cbiAgb2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuXG4gIC8vIFBhcmFtZXRlcnMgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgdGVtcGxhdGVcbiAgY29uc3QgY29udGV4dDogQXV0b0V4cGxvcmVCdXR0b24gPSB7XG4gICAgbG9jYXRpb25JZCxcbiAgICBhY3RpdmU6IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5zb21lKFxuICAgICAgc2F2ZWQgPT4gc2F2ZWQubG9jYXRpb24uaWQgPT09IGxvY2F0aW9uSWRcbiAgICApLFxuICAgIHJlZ2lvbklkOiBOdW1iZXIoXG4gICAgICBkb2N1bWVudFxuICAgICAgICAucXVlcnlTZWxlY3RvcihcIi5taW5pbWFwLmN1cnJlbnRbZGF0YS1tYXBpZF1cIilcbiAgICAgICAgPy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1hcGlkXCIpXG4gICAgKSxcbiAgfVxuXG4gIC8vIEFkZCB0aGUgYXV0byBleHBsb3JlIGJ1dHRvblxuICBidXR0b25zQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjYXV0by1leHBsb3JlLWJ1dHRvblwiKT8ucmVtb3ZlKClcbiAgY29uc3QgYXV0b0V4cGxvcmVUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXV0b19leHBsb3JlX2J1dHRvbi5odG1sXCIpXG4gIGJ1dHRvbnNDb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgYXV0b0V4cGxvcmVUZW1wbGF0ZS5yZW5kZXIoeyAuLi5jb250ZXh0LCB0cmFuc2xhdGUgfSlcbiAgKVxuXG4gIC8vIEJpbmQgYGF1dG9FeHBsb3JlYCBhbmQgYGxvYWRQaWN0b01hcHNgXG4gIGJ1dHRvbnNDb250YWluZXJcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oXCIjYXV0by1leHBsb3JlLWJ1dHRvblwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIENvbnNvbGUuZGVidWcoXCJDbGlja2VkIG9uICNhdXRvLWV4cGxvcmUtYnV0dG9uLlwiLCBjb250ZXh0KVxuICAgICAgdm9pZCBtYXJrTG9jYXRpb24oY29udGV4dCkudGhlbihsb2FkUGljdG9NYXBzKVxuICAgIH0pXG5cbiAgdm9pZCBkaXNhYmxlRXhwbG9yZShjb250ZXh0KVxufVxuXG5hc3luYyBmdW5jdGlvbiBkaXNhYmxlRXhwbG9yZShjb250ZXh0OiBBdXRvRXhwbG9yZUJ1dHRvbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBlbnRyeSA9IGF3YWl0IGdldEF1dG9FeHBsb3JlRW50cnkoY29udGV4dC5yZWdpb25JZCwgY29udGV4dC5sb2NhdGlvbklkKVxuICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICBpZiAocGV0RW5lcmd5IDwgTnVtYmVyKGVudHJ5LmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSlcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImV4cGxvcmUtYnV0dG9uXCIpPy5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRcIilcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFya0xvY2F0aW9uKGNvbnRleHQ6IEF1dG9FeHBsb3JlQnV0dG9uKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChjb250ZXh0LmFjdGl2ZSkge1xuICAgIGNvbnN0IGZpbHRlcmVkTG9jYXRpb25zID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLmZpbHRlcihcbiAgICAgIHNhdmVkID0+IHNhdmVkLmxvY2F0aW9uLmlkICE9PSBjb250ZXh0LmxvY2F0aW9uSWRcbiAgICApXG4gICAgTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zID0gZmlsdGVyZWRMb2NhdGlvbnNcbiAgICBhZGRBdXRvRXhwbG9yZUJ1dHRvbihjb250ZXh0LmxvY2F0aW9uSWQpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBuZXdBdXRvRXhwbG9yZSA9IGF3YWl0IGdldEF1dG9FeHBsb3JlRW50cnkoXG4gICAgY29udGV4dC5yZWdpb25JZCxcbiAgICBjb250ZXh0LmxvY2F0aW9uSWRcbiAgKVxuICBpZiAoIW5ld0F1dG9FeHBsb3JlKSB7XG4gICAgQ29uc29sZS5lcnJvcihcbiAgICAgIGBDb3VsZCBub3QgZ2VuZXJhdGUgYW4gYXV0byBleHBsb3JlIGVudHJ5IGZvciBsb2NhdGlvbiAjJHtjb250ZXh0LmxvY2F0aW9uSWR9LmAsXG4gICAgICBjb250ZXh0XG4gICAgKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgbmV3TG9jYXRpb25zID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zXG4gIG5ld0xvY2F0aW9ucy5wdXNoKG5ld0F1dG9FeHBsb3JlKVxuICBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBuZXdMb2NhdGlvbnNcbiAgYWRkQXV0b0V4cGxvcmVCdXR0b24oY29udGV4dC5sb2NhdGlvbklkKVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBdXRvRXhwbG9yZUVudHJ5KFxuICByZWdpb25JZDogbnVtYmVyLFxuICBsb2NhdGlvbklkOiBudW1iZXJcbik6IFByb21pc2U8QXV0b0V4cGxvcmVMb2NhdGlvbiB8IG51bGw+IHtcbiAgY29uc3QgcmVnaW9uID0gYXdhaXQgZ2V0UmVnaW9uKHJlZ2lvbklkKVxuICBpZiAoIXJlZ2lvbikge1xuICAgIENvbnNvbGUuZXJyb3IoYENvdWxkIG5vdCBnZXQgcmVnaW9uICMke3JlZ2lvbklkfS5gKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBsb2NhdGlvbiA9IHJlZ2lvbi5sb2NhdGlvbnMuZmluZChsb2NhdGlvbiA9PiBsb2NhdGlvbi5pZCA9PT0gbG9jYXRpb25JZClcbiAgaWYgKCFsb2NhdGlvbikge1xuICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICBgQ291bGQgbm90IGdldCBsb2NhdGlvbiAjJHtsb2NhdGlvbklkfSBpbiAke3JlZ2lvbi5uYW1lfS5gLFxuICAgICAgcmVnaW9uXG4gICAgKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvY2F0aW9uLFxuICAgIHJlZ2lvbixcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZWdpb24oaWQ6IG51bWJlcik6IFByb21pc2U8TWFwUmVnaW9uIHwgbnVsbD4ge1xuICBpZiAoaWQudG9TdHJpbmcoKSA9PT0gY3VycmVudFJlZ2lvbi5pZCkgcmV0dXJuIGN1cnJlbnRSZWdpb25cblxuICBjb25zdCBqc29uID0gYXdhaXQgY2hhbmdlUmVnaW9uKGlkKVxuICBpZiAoanNvbi5yZXN1bHQgPT09IFJlc3VsdC5zdWNjZXNzKSByZXR1cm4ganNvbi5kYXRhLmN1cnJlbnRSZWdpb25cblxuICByZXR1cm4gbnVsbFxufVxuXG4vLyBQaWN0byBtYXBcblxuZnVuY3Rpb24gbG9hZFBpY3RvTWFwcygpOiB2b2lkIHtcbiAgY29uc3QgYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnNcbiAgZm9yIChjb25zdCBkaXYgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRGl2RWxlbWVudD4oXG4gICAgXCIubWFwLWxvY2F0aW9uW2RhdGEtaWRdXCJcbiAgKSkge1xuICAgIGxvYWRQaWN0b01hcChhdXRvRXhwbG9yZUxvY2F0aW9ucywgZGl2KVxuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRQaWN0b01hcChcbiAgYXV0b0V4cGxvcmVMb2NhdGlvbnM6IEF1dG9FeHBsb3JlTG9jYXRpb25bXSxcbiAgZGl2OiBIVE1MRGl2RWxlbWVudFxuKTogdm9pZCB7XG4gIGNvbnN0IG1hcExvY2F0aW9uID0gZGl2LmdldEF0dHJpYnV0ZShcImRhdGEtaWRcIilcbiAgaWYgKCFtYXBMb2NhdGlvbikgcmV0dXJuXG5cbiAgZGl2LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGF1dG9FeHBsb3JlTG9jYXRpb25zLnNvbWUoXG4gICAgc2F2ZWQgPT4gc2F2ZWQubG9jYXRpb24uaWQgPT09IE51bWJlcihtYXBMb2NhdGlvbilcbiAgKVxuICAgID8gXCJ1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC9wZXQvaWNvbnMvcGljdG9fbWFwX2V4cGxvLnBuZylcIlxuICAgIDogXCJ1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC9wZXQvaWNvbnMvcGljdG9fbWFwLnBuZylcIlxufVxuIiwiZXhwb3J0IGVudW0gU2Vzc2lvblN0b3JhZ2VLZXkge1xuICBhY3Rpb24gPSBcImFjdGlvblwiLFxuICBleHBsb3JhdGlvbnNEb25lID0gXCJleHBsb3JhdGlvbnNEb25lXCIsXG4gIG1pbmlnYW1lc0RvbmUgPSBcIm1pbmlnYW1lc0RvbmVcIixcbiAgc2VsZWN0ZWRMb2NhdGlvbiA9IFwic2VsZWN0ZWRMb2NhdGlvblwiLFxuICB0YWtlb3ZlciA9IFwidGFrZW92ZXJcIixcbiAgd2lzaGxpc3QgPSBcIndpc2hsaXN0XCIsXG4gIHN1bW1lckdhbWVEb25lID0gXCJzdW1tZXJHYW1lRG9uZVwiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBBdXRvRXhwbG9yZUxvY2F0aW9uIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvYXV0b19leHBsb3JlX2xvY2F0aW9uXCJcbmltcG9ydCB0eXBlIHsgV2lzaGVkSXRlbSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL3dpc2hlZF9pdGVtXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlS2V5IH0gZnJvbSBcIi4vc2Vzc2lvbl9zdG9yYWdlLmVudW1cIlxuaW1wb3J0IHR5cGUgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcblxuZXhwb3J0IGNsYXNzIFNlc3Npb25TdG9yYWdlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHN0YXRpYyBnZXQgYWN0aW9uKCk6IFRha2VvdmVyQWN0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5hY3Rpb24sIG51bGwpXG4gIH1cblxuICBzdGF0aWMgc2V0IGFjdGlvbihhY3Rpb246IFRha2VvdmVyQWN0aW9uIHwgbnVsbCkge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5hY3Rpb24sIGFjdGlvbilcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZXhwbG9yYXRpb25zRG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmV4cGxvcmF0aW9uc0RvbmUsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBleHBsb3JhdGlvbnNEb25lKGRvbmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zRG9uZSwgZG9uZSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWluaWdhbWVzRG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1pbmlnYW1lc0RvbmUsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBtaW5pZ2FtZXNEb25lKGRvbmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkubWluaWdhbWVzRG9uZSwgZG9uZSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3VtbWVyR2FtZURvbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5zdW1tZXJHYW1lRG9uZSwgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IHN1bW1lckdhbWVEb25lKGRvbmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuc3VtbWVyR2FtZURvbmUsIGRvbmUpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbGVjdGVkTG9jYXRpb24oKTogQXV0b0V4cGxvcmVMb2NhdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuc2VsZWN0ZWRMb2NhdGlvbiwgbnVsbClcbiAgfVxuXG4gIHN0YXRpYyBzZXQgc2VsZWN0ZWRMb2NhdGlvbihzZWxlY3RlZDogQXV0b0V4cGxvcmVMb2NhdGlvbiB8IG51bGwpIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuc2VsZWN0ZWRMb2NhdGlvbiwgc2VsZWN0ZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHRha2VvdmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkudGFrZW92ZXIsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCB0YWtlb3ZlcihlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LnRha2VvdmVyLCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCB3aXNobGlzdCgpOiBXaXNoZWRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkud2lzaGxpc3QsIFtdKVxuICB9XG5cbiAgc3RhdGljIHNldCB3aXNobGlzdCh3aXNobGlzdDogV2lzaGVkSXRlbVtdKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lndpc2hsaXN0LCB3aXNobGlzdClcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldEl0ZW08VD4oa2V5OiBTZXNzaW9uU3RvcmFnZUtleSwgZmFsbGJhY2s6IFQpOiBUIHtcbiAgICByZXR1cm4gKEpTT04ucGFyc2UoXG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KSA/PyBKU09OLnN0cmluZ2lmeShmYWxsYmFjaylcbiAgICApID8/IGZhbGxiYWNrKSBhcyBUXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzZXRJdGVtPFQ+KGtleTogU2Vzc2lvblN0b3JhZ2VLZXksIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICB9XG59XG4iLCJleHBvcnQgZW51bSBUYWtlb3ZlckFjdGlvbiB7XG4gIGRhaWx5ID0gXCJkYWlseVwiLFxuICBtaW5pZ2FtZXMgPSBcIm1pbmlnYW1lc1wiLFxuICBleHBsb3JhdGlvbnMgPSBcImV4cGxvcmF0aW9uc1wiLFxuICBhdWN0aW9ucyA9IFwiYXVjdGlvbnNcIixcbiAgYnV5ID0gXCJidXlcIixcbiAgLy8gc2VsbCxcbiAgc3VtbWVyR2FtZSA9IFwic3VtbWVyR2FtZVwiLFxuICB3YWl0ID0gXCJ3YWl0XCIsXG59XG4iLCJpbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgbG9hZFRvcEJhciB9IGZyb20gXCIuLi91aS90b3BfYmFyXCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIi4vY2xhc3Nlcy9hY3Rpb25cIlxuaW1wb3J0IGJ1eUFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL2J1eV9hY3Rpb25cIlxuaW1wb3J0IGRhaWx5QWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvZGFpbHlfYWN0aW9uXCJcbmltcG9ydCBleHBsb3JhdGlvbkFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL2V4cGxvcmF0aW9uX2FjdGlvblwiXG5pbXBvcnQgbWluaWdhbWVBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9taW5pZ2FtZV9hY3Rpb25cIlxuaW1wb3J0IHsgc3VtbWVyR2FtZUFjdGlvbiB9IGZyb20gXCIuL2NsYXNzZXMvc3VtbWVyX2dhbWVfYWN0aW9uXCJcbmltcG9ydCB3YWl0QWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvd2FpdF9hY3Rpb25cIlxuXG4vKiogQXV0b21hdGVkIGVudHJ5IHBvaW50IG9mIHRoZSB0YWtlb3Zlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkVGFrZW92ZXIoKTogdm9pZCB7XG4gIGlmIChTZXNzaW9uU3RvcmFnZS50YWtlb3Zlcikgdm9pZCB0YWtlb3ZlcigpXG59XG5cbi8qKiBNYW51YWwgZW50cnkgcG9pbnQgb2YgdGhlIHRha2VvdmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZVRha2VvdmVyKCk6IHZvaWQge1xuICByZXNldFRha2VvdmVyKClcbiAgU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIgPSAhU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXJcblxuICBsb2FkVG9wQmFyKClcbiAgaWYgKFNlc3Npb25TdG9yYWdlLnRha2VvdmVyKSAkLmZsYXZyTm90aWYodHJhbnNsYXRlLnRha2VvdmVyLmVuYWJsZWQpXG4gIGVsc2UgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS50YWtlb3Zlci5kaXNhYmxlZClcblxuICB2b2lkIHRha2VvdmVyKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0VGFrZW92ZXIoKTogdm9pZCB7XG4gIFNlc3Npb25TdG9yYWdlLmFjdGlvbiA9IG51bGxcbiAgU2Vzc2lvblN0b3JhZ2UuZXhwbG9yYXRpb25zRG9uZSA9IGZhbHNlXG4gIFNlc3Npb25TdG9yYWdlLm1pbmlnYW1lc0RvbmUgPSBmYWxzZVxuICBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uID0gbnVsbFxuICBTZXNzaW9uU3RvcmFnZS5zdW1tZXJHYW1lRG9uZSA9IGZhbHNlXG4gIFNlc3Npb25TdG9yYWdlLndpc2hsaXN0ID0gW11cbn1cblxuYXN5bmMgZnVuY3Rpb24gdGFrZW92ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIpIHJldHVyblxuICBpZiAoZGFpbHlBY3Rpb24uY29uZGl0aW9uKCkpIGF3YWl0IGRhaWx5QWN0aW9uLnBlcmZvcm0oKVxuXG4gIGNvbnN0IGFjdGlvbiA9IGFjdGlvbnMuZmluZChhY3Rpb24gPT4gYWN0aW9uLmtleSA9PT0gU2Vzc2lvblN0b3JhZ2UuYWN0aW9uKVxuICBpZiAoYWN0aW9uPy5jb25kaXRpb24oKSkge1xuICAgIENvbnNvbGUuaW5mbyhcIkFjdGlvbjpcIiwgYWN0aW9uLmtleSlcblxuICAgIGlmIChhd2FpdCBhY3Rpb24ucGVyZm9ybSgpKSByZXR1cm5cbiAgfVxuXG4gIGNoYW5nZUFjdGlvbigpXG4gIHZvaWQgdGFrZW92ZXIoKVxufVxuXG5jb25zdCBhY3Rpb25zOiBBY3Rpb25bXSA9IFtcbiAgZXhwbG9yYXRpb25BY3Rpb24sXG4gIGJ1eUFjdGlvbixcbiAgbWluaWdhbWVBY3Rpb24sXG4gIHN1bW1lckdhbWVBY3Rpb24sXG4gIHdhaXRBY3Rpb24sXG5dXG5cbmZ1bmN0aW9uIGNoYW5nZUFjdGlvbigpOiBUYWtlb3ZlckFjdGlvbiB7XG4gIGNvbnN0IG5leHQgPVxuICAgIGFjdGlvbnMuZmluZEluZGV4KGFjdGlvbiA9PiBhY3Rpb24ua2V5ID09PSBTZXNzaW9uU3RvcmFnZS5hY3Rpb24pICsgMVxuXG4gIHJldHVybiAoU2Vzc2lvblN0b3JhZ2UuYWN0aW9uID1cbiAgICBhY3Rpb25zW25leHQgPj0gYWN0aW9ucy5sZW5ndGggPyAwIDogbmV4dF0hLmtleSlcbn1cbiIsImltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjdGlvbiB7XG4gIC8qKiBLZXkgYnkgd2hpY2ggdGhlIGBTZXNzaW9uU3RvcmFnZWAgY2FuIHJlZmVyZW5jZSB0aGlzIGFjdGlvbi4gKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkga2V5OiBUYWtlb3ZlckFjdGlvblxuXG4gIC8qKiBEZXRlcm1pbmVzIGlmIHRoaXMgYWN0aW9uIGNhbiBiZSBwZXJmb3JtZWQgZHVyaW5nIGEgdGFrZW92ZXIuICovXG4gIGFic3RyYWN0IGNvbmRpdGlvbigpOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3Rpb24gYW5kIHJldHVybnMgYHRydWVgIGlmIGl0IGhhcyBzb21ldGhpbmcgZWxzZSB0byBkbyBvclxuICAgKiBgZmFsc2VgIGlmIHRoaXMgYWN0aW9uIGlzIGZpbmlzaGVkIGV4ZWN1dGluZy5cbiAgICovXG4gIGFic3RyYWN0IHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPlxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBhamF4U2VhcmNoIH0gZnJvbSBcIi4uLy4uL2FqYXgvYWpheF9zZWFyY2hcIlxuaW1wb3J0IHsgYnV5IH0gZnJvbSBcIi4uLy4uL2FqYXgvYnV5XCJcbmltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vLi4vY29uc29sZVwiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS93aXNoZWRfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4uLy4uL21hcmtldHBsYWNlL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB7IGdldEl0ZW1EZXRhaWxzIH0gZnJvbSBcIi4uLy4uL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzXCJcbmltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuXG5jbGFzcyBCdXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi5idXlcblxuICBwcml2YXRlIGdldCBjdXJyZW50TWFhbmEoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTnVtYmVyKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQW5jaG9yRWxlbWVudD4oXCIjY3VycmVuY3ktbWFhbmFcIik/LmRhdGFzZXRcbiAgICAgICAgLm1hYW5hXG4gICAgKVxuICB9XG5cbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UubWFya2V0ICYmIEJvb2xlYW4oTG9jYWxTdG9yYWdlLndpc2hsaXN0Lmxlbmd0aClcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9tYXJrZXRwbGFjZVwiKSB7XG4gICAgICBhd2FpdCBjbGljazxIVE1MQW5jaG9yRWxlbWVudD4oXCIubWFpbi1tZW51LW1hcmtldHBsYWNlIGFcIilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgaWNvbk1lc3NhZ2U6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICAgZm9yIChjb25zdCB3aXNoZWQgb2YgTG9jYWxTdG9yYWdlLndpc2hsaXN0KSB7XG4gICAgICAvLyBDbG90aGVzIG1pZ2h0IGJlIGEgc3BlY2lhbCBleGNlcHRpb24uIElmIHRoZXkgYXJlLCB0aGVuIGNoZWNrIGZvclxuICAgICAgLy8gYHdpc2hlZC50eXBlID09PSBUeXBlLlBsYXllcldlYXJhYmxlSXRlbWAuXG4gICAgICBpZiAod2lzaGVkLmVycm9yKSB7XG4gICAgICAgIENvbnNvbGUud2FybihgU2tpcHBlZCBcIiR7d2lzaGVkLm5hbWV9XCJgLCB3aXNoZWQpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBDb25zb2xlLmluZm8oYFNlYXJjaGluZyBmb3IgXCIke3dpc2hlZC5uYW1lfVwiYCwgd2lzaGVkKVxuXG4gICAgICBsZXQgYW1vdW50ID0gOFxuICAgICAgZm9ycGFnZTogZm9yIChsZXQgcGFnZSA9IDE7IGFtb3VudCA9PT0gODsgcGFnZSsrKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLnNlYXJjaCh3aXNoZWQsIHBhZ2UpXG4gICAgICAgIGFtb3VudCA9IHJlc3VsdHMubGVuZ3RoXG4gICAgICAgIENvbnNvbGUubG9nKGBGb3VuZCAke2Ftb3VudH0gcmVzdWx0c2AsIHJlc3VsdHMpXG5cbiAgICAgICAgY29uc3Qgd2FudGVkID0gcmVzdWx0cy5maWx0ZXIoXG4gICAgICAgICAgcmVzdWx0ID0+XG4gICAgICAgICAgICByZXN1bHQuaWNvbiA9PT0gd2lzaGVkLmljb24gJiZcbiAgICAgICAgICAgIHJlc3VsdC5idXlOb3dQcmljZSAmJlxuICAgICAgICAgICAgTnVtYmVyKHJlc3VsdC5idXlOb3dQcmljZS5wcmljZSkgPD0gd2lzaGVkLnByaWNlICYmXG4gICAgICAgICAgICBOdW1iZXIocmVzdWx0LmJ1eU5vd1ByaWNlLnByaWNlKSA8PSB0aGlzLmN1cnJlbnRNYWFuYVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHdhbnRlZCkge1xuICAgICAgICAgIGlmICghKGF3YWl0IHRoaXMuYnV5KHJlc3VsdCkpKSBicmVhayBmb3JwYWdlXG5cbiAgICAgICAgICBMb2NhbFN0b3JhZ2UucHVyY2hhc2VzID0gW1xuICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgLi4uTG9jYWxTdG9yYWdlLnB1cmNoYXNlcy5maWx0ZXIoXG4gICAgICAgICAgICAgIHB1cmNoYXNlID0+IHB1cmNoYXNlLml0ZW1pZCAhPT0gcmVzdWx0Lml0ZW1pZFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdXG5cbiAgICAgICAgICBDb25zb2xlLmluZm8oXG4gICAgICAgICAgICBgQm91Z2h0IFwiJHtyZXN1bHQubmFtZX1cIiBmb3IgJHtOdW1iZXIoXG4gICAgICAgICAgICAgIHJlc3VsdC5idXlOb3dQcmljZT8ucHJpY2VcbiAgICAgICAgICAgICl9IG1hYW5hcy5gLFxuICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgKVxuXG4gICAgICAgICAgJC5mbGF2ck5vdGlmKFxuICAgICAgICAgICAgaWNvbk1lc3NhZ2UucmVuZGVyKHtcbiAgICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0cmFuc2xhdGUudGFrZW92ZXIuYm91Z2h0KFxuICAgICAgICAgICAgICAgIHJlc3VsdC5uYW1lLFxuICAgICAgICAgICAgICAgIE51bWJlcihyZXN1bHQuYnV5Tm93UHJpY2U/LnByaWNlKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnV5KHJlc3VsdDogTWFya2V0RW50cnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgYnV5KE51bWJlcihyZXN1bHQuaXRlbWlkKSlcbiAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB0aGlzLnNldEVycm9yKHJlc3VsdC5pY29uLCBqc29uLmRhdGEpXG4gICAgcmV0dXJuIGpzb24ucmVzdWx0ID09PSBcInN1Y2Nlc3NcIlxuICB9XG5cbiAgLyoqIFNlYXJjaCBmb3IgYSB3aXNoZWQgaXRlbSBvbiBhIHNwZWNpZmljIHBhZ2UgdXNpbmcgdGhlIGl0ZW0ncyBuYW1lLiAqL1xuICBwcml2YXRlIGFzeW5jIHNlYXJjaCh3aXNoZWQ6IFdpc2hlZEl0ZW0sIHBhZ2UgPSAxKTogUHJvbWlzZTxNYXJrZXRFbnRyeVtdPiB7XG4gICAgY29uc3QgZmlsdGVySXRlbU5hbWUgPVxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIiNmaWx0ZXItaXRlbU5hbWVcIilcbiAgICBpZiAoZmlsdGVySXRlbU5hbWUpIGZpbHRlckl0ZW1OYW1lLnZhbHVlID0gd2lzaGVkLm5hbWVcblxuICAgIGNvbnN0IG1hcmtldHBsYWNlU2VhcmNoSXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxVTGlzdEVsZW1lbnQ+KFxuICAgICAgXCIubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1zXCJcbiAgICApXG4gICAgaWYgKCFtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zKSByZXR1cm4gW11cbiAgICBtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zLmlubmVySFRNTCA9IGF3YWl0IGFqYXhTZWFyY2goe1xuICAgICAgbmFtZTogd2lzaGVkLm5hbWUsXG4gICAgICBwYWdlLFxuICAgIH0pXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgIG1hcmtldHBsYWNlU2VhcmNoSXRlbXMucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcbiAgICAgICAgXCIubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1cIlxuICAgICAgKVxuICAgIClcbiAgICAgIC5tYXAoZ2V0SXRlbURldGFpbHMpXG4gICAgICAuZmlsdGVyPE1hcmtldEVudHJ5PigoaXRlbSk6IGl0ZW0gaXMgTWFya2V0RW50cnkgPT4gaXRlbSAhPT0gbnVsbClcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGBXaXNoZWRJdGVtLmVycm9yYCBwcm9wZXJ0eSB3aXRob3V0IHJlb3JkZXJpbmcgdGhlIHdpc2hsaXN0LiAqL1xuICBwcml2YXRlIHNldEVycm9yKGljb246IHN0cmluZywgZXJyb3I6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gICAgY29uc3QgaW5kZXggPSB3aXNobGlzdC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmljb24gPT09IGljb24pXG4gICAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICAgIGVudHJ5LmVycm9yID0gZXJyb3JcbiAgICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSBbXG4gICAgICAuLi53aXNobGlzdC5zbGljZSh1bmRlZmluZWQsIGluZGV4KSxcbiAgICAgIGVudHJ5LFxuICAgICAgLi4ud2lzaGxpc3Quc2xpY2UoaW5kZXggKyAxLCB1bmRlZmluZWQpLFxuICAgIF1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQnV5QWN0aW9uKClcbiIsImltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgeyByZXNldFRha2VvdmVyIH0gZnJvbSBcIi4uL2JyYWluXCJcbmltcG9ydCB7IGNsaWNrIH0gZnJvbSBcIi4uL2NsaWNrXCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgRGFpbHlBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi5kYWlseVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIGRhaWx5IG1hYW5hIGdpZnQgaWYgdGhlcmUuICovXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYWlseUdpZnRDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRhaWx5LWdpZnQtY29udGFpbmVyXCIpXG4gICAgcmV0dXJuIChcbiAgICAgICEhZGFpbHlHaWZ0Q29udGFpbmVyICYmXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRhaWx5R2lmdENvbnRhaW5lcikuZGlzcGxheSAhPT0gXCJub25lXCJcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQ2xpY2sgb24gdGhlIGRhaWx5IG1hYW5hIGdpZnQuXG4gICAqIEByZXR1cm5zIGBmYWxzZWAuIFRoaXMgYWN0aW9uIGRvZXMgbm90IHBlcmZvcm0gbWVhbmluZ2Z1bCBhY3Rpb25zIG9uIHRoZVxuICAgKiBwYWdlLlxuICAgKi9cbiAgYXN5bmMgcGVyZm9ybSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBkYWlseUdpZnRDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRhaWx5LWdpZnQtY29udGFpbmVyXCIpXG4gICAgaWYgKFxuICAgICAgIWRhaWx5R2lmdENvbnRhaW5lciB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkYWlseUdpZnRDb250YWluZXIpLmRpc3BsYXkgPT09IFwibm9uZVwiXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBkYWlseUdpZnRDb250YWluZXIuY2xpY2soKVxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIi5maXJzdC1jb25uZXhpb24gLmZsYXZyLWJ1dHRvbi5kZWZhdWx0XCIpXG5cbiAgICByZXNldFRha2VvdmVyKClcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgRGFpbHlBY3Rpb24oKVxuIiwiaW1wb3J0IHsgY2FwdHVyZUVuZCB9IGZyb20gXCIuLi8uLi9hamF4L2NhcHR1cmVfZW5kXCJcbmltcG9ydCB7IGNoYW5nZVJlZ2lvbiB9IGZyb20gXCIuLi8uLi9hamF4L2NoYW5nZV9yZWdpb25cIlxuaW1wb3J0IHsgZXhwbG9yYXRpb25SZXN1bHRzIH0gZnJvbSBcIi4uLy4uL2FqYXgvZXhwbG9yYXRpb25fcmVzdWx0c1wiXG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi4vLi4vYXBpL3Jlc3VsdC5lbnVtXCJcbmltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vLi4vY29uc29sZVwiXG5pbXBvcnQgeyBEdXJhdGlvblVuaXQgfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIlxuaW1wb3J0IHR5cGUgeyBNYXBSZWdpb24sIFNlYXNvbiB9IGZyb20gXCIuLi8uLi9lbGRhcnlhL2N1cnJlbnRfcmVnaW9uXCJcbmltcG9ydCB0eXBlIHsgUGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uIH0gZnJvbSBcIi4uLy4uL2VsZGFyeWEvdHJlYXN1cmVcIlxuaW1wb3J0IHR5cGUgeyBBdXRvRXhwbG9yZUxvY2F0aW9uIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvYXV0b19leHBsb3JlX2xvY2F0aW9uXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgY2xpY2sgfSBmcm9tIFwiLi4vY2xpY2tcIlxuaW1wb3J0IHsgRXhwbG9yYXRpb25TdGF0dXMgfSBmcm9tIFwiLi4vZXhwbG9yYXRpb25fc3RhdHVzLmVudW1cIlxuaW1wb3J0IHR5cGUgeyBTdGFydEV4cGxvcmF0aW9uIH0gZnJvbSBcIi4uL3N0YXJ0X2V4cGxvcmF0aW9uXCJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5cbmNsYXNzIEV4cGxvcmF0aW9uQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24uZXhwbG9yYXRpb25zXG5cbiAgcHJpdmF0ZSBnZXQgZ2xvYmFscygpOiB7XG4gICAgY3VycmVudFJlZ2lvbjogTWFwUmVnaW9uXG4gICAgcGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uOiBQZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gfCBudWxsXG4gICAgdGltZUxlZnRFeHBsb3JhdGlvbjogbnVtYmVyIHwgbnVsbFxuICB9IHtcbiAgICByZXR1cm4geyBjdXJyZW50UmVnaW9uLCBwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24sIHRpbWVMZWZ0RXhwbG9yYXRpb24gfVxuICB9XG5cbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBMb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25zICYmXG4gICAgICAhU2Vzc2lvblN0b3JhZ2UuZXhwbG9yYXRpb25zRG9uZSAmJlxuICAgICAgISFMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMubGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgcGVyZm9ybSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL3BldFwiKSB7XG4gICAgICBwYWdlTG9hZChcIi9wZXRcIilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5nZXRFeHBsb3JhdGlvblN0YXR1cygpXG4gICAgQ29uc29sZS5sb2coXCJFeHBsb3JhdGlvbiBzdGF0dXM6XCIsIEV4cGxvcmF0aW9uU3RhdHVzW3N0YXR1c10pXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgRXhwbG9yYXRpb25TdGF0dXMuaWRsZTpcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5zdGFydEV4cGxvcmF0aW9uKCkpLnNlbGVjdGVkKVxuICAgICAgICAgIFNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgPSB0cnVlXG4gICAgICAgIHJldHVybiBmYWxzZVxuXG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLnBlbmRpbmc6XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy53YWl0RXhwbG9yYXRpb24oKSkgJiYgdGhpcy5wZXJmb3JtKClcblxuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5yZXN1bHQ6XG4gICAgICAgIGF3YWl0IHRoaXMuZW5kRXhwbG9yYXRpb24oKVxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtKClcblxuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5jYXB0dXJlOlxuICAgICAgICBhd2FpdCB0aGlzLmVuZENhcHR1cmUoKVxuICAgICAgICByZXR1cm4gdGhpcy5wZXJmb3JtKClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGlja0V4cGxvcmUoKTogUHJvbWlzZTxIVE1MQnV0dG9uRWxlbWVudD4ge1xuICAgIHJldHVybiBjbGljayhcIiNleHBsb3JlLWJ1dHRvblwiKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGlja0xvY2F0aW9uKFxuICAgIHNlbGVjdGVkOiBBdXRvRXhwbG9yZUxvY2F0aW9uXG4gICk6IFByb21pc2U8SFRNTERpdkVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2s8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYC5tYXAtbG9jYXRpb25bZGF0YS1pZD1cIiR7c2VsZWN0ZWQubG9jYXRpb24uaWR9XCJdYFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY2xpY2tSZWdpb24oc2VsZWN0ZWQ6IEF1dG9FeHBsb3JlTG9jYXRpb24pOiBIVE1MRGl2RWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYC5taW5pbWFwW2RhdGEtbWFwaWQ9XCIke3NlbGVjdGVkLnJlZ2lvbi5pZH1cIl1gXG4gICAgKVxuXG4gICAgaWYgKCFkaXYpIHtcbiAgICAgIC8vIENsZWFyaW5nIGludmFsaWQgcmVnaW9ucyBpcyB1c2VmdWwgdG8gcmVtb3ZlIGZpbmlzaGVkIGV2ZW50cy5cbiAgICAgIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9XG4gICAgICAgIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgc2F2ZWQgPT4gc2F2ZWQucmVnaW9uLmlkICE9PSBzZWxlY3RlZC5yZWdpb24uaWRcbiAgICAgICAgKVxuXG4gICAgICBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uID0gbnVsbFxuICAgICAgcGFnZUxvYWQoXCIvcGV0XCIpXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGRpdi5jbGljaygpXG4gICAgcmV0dXJuIGRpdlxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGlja1NlYXNvbigpOiBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2s8SFRNTEltYWdlRWxlbWVudD4oXCIjY3J5c3RhbC1pbWFnZXMtY29udGFpbmVyXCIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuZENhcHR1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHZvaWQgbmV3IEF1ZGlvKFxuICAgICAgICBcIi9zdGF0aWMvZXZlbnQvMjAyMS9tdXNpYy9zb3VuZHMvbWlzc2lvbi1jb21wbGV0ZS5tcDNcIlxuICAgICAgKS5wbGF5KClcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG5cbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIjb3Blbi1jYXB0dXJlLWludGVyZmFjZVwiKVxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIiNjYXB0dXJlLWJ1dHRvblwiKVxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIiNjbG9zZS1yZXN1bHRcIilcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5kRXhwbG9yYXRpb24oKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICAgIHJldHVybiBjbGljayhcIiNjbG9zZS1yZXN1bHRcIilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFNlYXNvbigpOiBTZWFzb24ge1xuICAgIHJldHVybiAoQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKT8uY2xhc3NMaXN0ID8/IFtdKVxuICAgICAgLmZpbmQoYyA9PiBjLnN0YXJ0c1dpdGgoXCJzZWFzb24tXCIpKVxuICAgICAgPy5yZXBsYWNlKFwic2Vhc29uLVwiLCBcIlwiKSA/PyBudWxsKSBhcyBTZWFzb25cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwbG9yYXRpb25TdGF0dXMoKTogRXhwbG9yYXRpb25TdGF0dXMge1xuICAgIGlmIChcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIFwiI3RyZWFzdXJlLWh1bnQtcmVzdWx0LW92ZXJsYXkuYWN0aXZlICNvcGVuLWNhcHR1cmUtaW50ZXJmYWNlXCJcbiAgICAgICkgfHxcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2FwdHVyZS1pbnRlcmZhY2Utb3V0ZXIuYWN0aXZlXCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gRXhwbG9yYXRpb25TdGF0dXMuY2FwdHVyZVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3BlbmRpbmctbWFwLWxvY2F0aW9uLWRhdGEtb3V0ZXIuYWN0aXZlXCIpIHx8XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21hcC1jb250YWluZXIucGVuZGluZ1wiKVxuICAgICkge1xuICAgICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLnBlbmRpbmdcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdHJlYXN1cmUtaHVudC1yZXN1bHQtb3ZlcmxheS5hY3RpdmVcIikpXG4gICAgICByZXR1cm4gRXhwbG9yYXRpb25TdGF0dXMucmVzdWx0XG4gICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLmlkbGVcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG93ZXN0RW5lcmd5TG9jYXRpb24oKTogQXV0b0V4cGxvcmVMb2NhdGlvbiB7XG4gICAgcmV0dXJuIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5yZWR1Y2UoKGxvd2VzdCwgcGxhY2UpID0+XG4gICAgICBOdW1iZXIocGxhY2UubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpIDxcbiAgICAgIE51bWJlcihsb3dlc3QubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpXG4gICAgICAgID8gcGxhY2VcbiAgICAgICAgOiBsb3dlc3RcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkTG9jYXRpb24oKTogQXV0b0V4cGxvcmVMb2NhdGlvbiB8IG51bGwge1xuICAgIGxldCBzZWxlY3RlZCA9IFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb25cbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0TG9jYXRpb24oKVxuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IHNlbGVjdGVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdGVkXG4gIH1cblxuICBwcml2YXRlIHNlbGVjdExvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBhZmZvcmRhYmxlID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLmZpbHRlcihcbiAgICAgIHNhdmVkID0+IE51bWJlcihzYXZlZC5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPD0gcGV0RW5lcmd5XG4gICAgKVxuXG4gICAgY29uc3QgbWluaW11bUVuZXJneSA9IHRoaXMuZ2V0TG93ZXN0RW5lcmd5TG9jYXRpb24oKVxuICAgIGNvbnN0IG5vdERlYWRFbmQgPSBhZmZvcmRhYmxlLmZpbHRlcihcbiAgICAgIHBsYWNlID0+XG4gICAgICAgIHBldEVuZXJneSAtIE51bWJlcihwbGFjZS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPj1cbiAgICAgICAgTnVtYmVyKG1pbmltdW1FbmVyZ3kubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpXG4gICAgKVxuICAgIGlmIChub3REZWFkRW5kLmxlbmd0aClcbiAgICAgIHJldHVybiBub3REZWFkRW5kW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vdERlYWRFbmQubGVuZ3RoKV0gPz8gbnVsbFxuXG4gICAgY29uc3Qgc2FtZUVuZXJneSA9IGFmZm9yZGFibGUuZmlsdGVyKFxuICAgICAgcGxhY2UgPT4gTnVtYmVyKHBsYWNlLmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSA9PT0gcGV0RW5lcmd5XG4gICAgKVxuICAgIGlmIChzYW1lRW5lcmd5Lmxlbmd0aClcbiAgICAgIHJldHVybiBzYW1lRW5lcmd5W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNhbWVFbmVyZ3kubGVuZ3RoKV0gPz8gbnVsbFxuXG4gICAgcmV0dXJuIGFmZm9yZGFibGVbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWZmb3JkYWJsZS5sZW5ndGgpXSA/PyBudWxsXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0RXhwbG9yYXRpb24oKTogUHJvbWlzZTxTdGFydEV4cGxvcmF0aW9uPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb24oKVxuICAgIGlmICghc2VsZWN0ZWQpIHJldHVybiB7IGV4cGxvcmluZzogZmFsc2UsIHNlbGVjdGVkIH1cbiAgICBDb25zb2xlLmluZm8oXCJFeHBsb3JpbmdcIiwgc2VsZWN0ZWQpXG5cbiAgICAvLyBHbyB0byBzZWFzb25cbiAgICBpZiAoXG4gICAgICBzZWxlY3RlZC5yZWdpb24uc2Vhc29uICYmXG4gICAgICB0aGlzLmdldEN1cnJlbnRTZWFzb24oKSAhPT0gc2VsZWN0ZWQucmVnaW9uLnNlYXNvblxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5jbGlja1NlYXNvbigpXG4gICAgICByZXR1cm4geyBleHBsb3Jpbmc6IGZhbHNlLCBzZWxlY3RlZCB9XG4gICAgfVxuXG4gICAgLy8gR28gdG8gcmVnaW9uXG4gICAgdGhpcy5jbGlja1JlZ2lvbihzZWxlY3RlZClcblxuICAgIC8vIEdvIHRvIGxvY2F0aW9uXG4gICAgYXdhaXQgdGhpcy5jbGlja0xvY2F0aW9uKHNlbGVjdGVkKVxuICAgIGF3YWl0IHRoaXMuY2xpY2tFeHBsb3JlKClcblxuICAgIFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb24gPSBudWxsXG4gICAgcmV0dXJuIHsgZXhwbG9yaW5nOiB0cnVlLCBzZWxlY3RlZCB9XG4gIH1cblxuICAvKipcbiAgICogV2FpdCBmb3IgdXAgdG8gMTAgbWludXRlcy5cbiAgICogQHJldHVybnMgd2hldGhlciB0aGUgZXhwbG9yYXRpb24gaXMgZmluaXNoZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRFeHBsb3JhdGlvbihcbiAgICBzZWxlY3RlZD86IEF1dG9FeHBsb3JlTG9jYXRpb25cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgICAgYC5taW5pbWFwW2RhdGEtbWFwaWQ9XCIke3NlbGVjdGVkPy5yZWdpb24uaWQgPz8gY3VycmVudFJlZ2lvbi5pZH1cIl1gXG4gICAgICApXG4gICAgICA/LmNsaWNrKClcblxuICAgIGxldCBtcyA9IDMgKiBEdXJhdGlvblVuaXQuc2Vjb25kXG4gICAgaWYgKHNlbGVjdGVkKSBtcyArPSBzZWxlY3RlZC5sb2NhdGlvbi50aW1lVG9FeHBsb3JlICogRHVyYXRpb25Vbml0Lm1pbnV0ZVxuICAgIGVsc2UgaWYgKHRpbWVMZWZ0RXhwbG9yYXRpb24gJiYgdGltZUxlZnRFeHBsb3JhdGlvbiA+IDApXG4gICAgICBtcyArPSB0aW1lTGVmdEV4cGxvcmF0aW9uICogRHVyYXRpb25Vbml0LnNlY29uZFxuICAgIGVsc2UgaWYgKFxuICAgICAgIXBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiAmJlxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNtYXAtY29udGFpbmVyLnBlbmRpbmdcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBleHBsb3JhdGlvblJlc3VsdHMoKVxuICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBSZXN1bHQuc3VjY2VzcykgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGNvbnN0IGNhcHR1cmUgPSBqc29uLmRhdGEucmVzdWx0cy5maW5kKFxuICAgICAgICByZXN1bHQgPT4gcmVzdWx0LnR5cGUgPT09IFwiY2FwdHVyZVwiXG4gICAgICApXG4gICAgICBpZiAoIWNhcHR1cmUpIHJldHVybiBmYWxzZVxuICAgICAgYXdhaXQgY2FwdHVyZUVuZCgpXG5cbiAgICAgIC8vIFJlbG9hZGluZyBpcyB0aGUgb25seSBwb3NzaWJsZSBhY3Rpb24gaWYgdGhlIGV4cGxvcmF0aW9uIGZpbmlzaGVkIGluIGFcbiAgICAgIC8vIGRpZmZlcmVudCByZWdpb24uXG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBcIlJlbG9hZGluZyBiZWNhdXNlIHRoZSBleHBsb3JhdGlvbiBpcyBpbiBhbm90aGVyIHJlZ2lvbi5cIixcbiAgICAgICAgdGhpcy5nbG9iYWxzXG4gICAgICApXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgRHVyYXRpb25Vbml0Lm1pbnV0ZSkpXG4gICAgICBwYWdlTG9hZChcIi9wZXRcIilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKG1zID4gMTAgKiBEdXJhdGlvblVuaXQubWludXRlKSByZXR1cm4gZmFsc2VcblxuICAgIENvbnNvbGUubG9nKFxuICAgICAgYFdhaXRpbmcgZm9yIHRoZSBleHBsb3JhdGlvbiB0byBlbmQgaW4gJHtNYXRoLmNlaWwoXG4gICAgICAgIG1zIC8gRHVyYXRpb25Vbml0LnNlY29uZFxuICAgICAgKX0gc2Vjb25kcy4uLmAsXG4gICAgICB0aGlzLmdsb2JhbHNcbiAgICApXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSlcbiAgICBhd2FpdCBjaGFuZ2VSZWdpb24oTnVtYmVyKHNlbGVjdGVkPy5yZWdpb24uaWQgPz8gY3VycmVudFJlZ2lvbi5pZCkpXG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmdldEV4cGxvcmF0aW9uU3RhdHVzKCkgPT09IEV4cGxvcmF0aW9uU3RhdHVzLnBlbmRpbmcgJiZcbiAgICAgIHRpbWVMZWZ0RXhwbG9yYXRpb24gJiZcbiAgICAgIHRpbWVMZWZ0RXhwbG9yYXRpb24gPCAwXG4gICAgKSB7XG4gICAgICBDb25zb2xlLmluZm8oXG4gICAgICAgIFwiUmVsb2FkaW5nIGJlY2F1c2UgdGhlIHRpbWVyIGlzIGRlc3luY2hyb25pc2VkLlwiLFxuICAgICAgICB0aGlzLmdsb2JhbHNcbiAgICAgIClcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBEdXJhdGlvblVuaXQuc2Vjb25kKSlcbiAgICAgIHBhZ2VMb2FkKFwiL3BldFwiKVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEV4cGxvcmF0aW9uQWN0aW9uKClcbiIsImltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHsgcGxheUZsYXBweSwgcGxheUhhdGNobGluZ3MsIHBsYXlQZWdnbGUgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL2VtaWxlXCJcbmltcG9ydCB7IGZsYXBweSB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvZmxhcHB5XCJcbmltcG9ydCB7IGhhdGNobGluZ3MgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL2hhdGNobGluZ3NcIlxuaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvbWluaWdhbWVcIlxuaW1wb3J0IHsgcGVnZ2xlIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9wZWdnbGVcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuaW1wb3J0IHsgY2xpY2sgfSBmcm9tIFwiLi4vY2xpY2tcIlxuXG5jbGFzcyBNaW5pZ2FtZUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLm1pbmlnYW1lc1xuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTG9jYWxTdG9yYWdlLm1pbmlnYW1lcyAmJiAhU2Vzc2lvblN0b3JhZ2UubWluaWdhbWVzRG9uZVxuICB9XG5cbiAgLyoqIERldGVybWluZXMgaWYgdGhlIG1pbmlnYW1lcyBzaG91bGQgYmUgcGxheWVkIHJpZ2h0IG5vdy5cbiAgICogQHJldHVybnMgd2hldGhlciB0aGUgbWluaWdhbWVzIGFyZSBjdXJyZW50bHkgYmVpbmcgcGxheWVkLlxuICAgKi9cbiAgYXN5bmMgcGVyZm9ybSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBzd2l0Y2ggKGxvY2F0aW9uLnBhdGhuYW1lKSB7XG4gICAgICBjYXNlIFwiL21pbmlnYW1lc1wiOiB7XG4gICAgICAgIGNvbnN0IHBsYXlpbmcgPVxuICAgICAgICAgIHRoaXMub3Blbk1pbmlnYW1lKHBlZ2dsZSkgfHxcbiAgICAgICAgICB0aGlzLm9wZW5NaW5pZ2FtZShmbGFwcHkpIHx8XG4gICAgICAgICAgdGhpcy5vcGVuTWluaWdhbWUoaGF0Y2hsaW5ncylcblxuICAgICAgICBpZiAoIXBsYXlpbmcpIHtcbiAgICAgICAgICBTZXNzaW9uU3RvcmFnZS5taW5pZ2FtZXNEb25lID0gdHJ1ZVxuICAgICAgICAgIGRvY3VtZW50XG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oXG4gICAgICAgICAgICAgICcubWluaWdhbWVzLXJ1bGVzIFtyZWw9XCJidG4tY2FuY2VsXCJdJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgPy5jbGljaygpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGxheWluZ1xuICAgICAgfVxuXG4gICAgICBjYXNlIFwiL21pbmlnYW1lcy9nZW1ib21iXCI6XG4gICAgICAgIGF3YWl0IHBsYXlQZWdnbGUoKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiL21pbmlnYW1lcy9idWJibHRlbXBsZVwiOlxuICAgICAgICBhd2FpdCBwbGF5RmxhcHB5KClcbiAgICAgICAgYnJlYWtcblxuICAgICAgY2FzZSBcIi9taW5pZ2FtZXMvY29jb29uaW5waWNrXCI6XG4gICAgICAgIGF3YWl0IHBsYXlIYXRjaGxpbmdzKClcbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXdhaXQgY2xpY2s8SFRNTEFuY2hvckVsZW1lbnQ+KFwiLm1haW4tbWVudS1taW5pZ2FtZXMgYVwiKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGF3YWl0IGNsaWNrPEhUTUxBbmNob3JFbGVtZW50PihcIi5tYWluLW1lbnUtbWluaWdhbWVzIGFcIilcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLyoqIENsaWNrIG9uIGEgbWluaWdhbWUncyBsaW5rLiBAcmV0dXJucyB3aGV0aGVyIHRoZSBtaW5pZ2FtZSB3YXMgb3BlbmVkLiAqL1xuICBwcml2YXRlIG9wZW5NaW5pZ2FtZShtaW5pZ2FtZTogTWluaWdhbWUpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGFydCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNwYW5FbGVtZW50PihcbiAgICAgIG1pbmlnYW1lLmJ1dHRvblNlbGVjdG9yXG4gICAgKVxuICAgIGlmICghc3RhcnQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHN0YXJ0LmNsaWNrKClcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBNaW5pZ2FtZUFjdGlvbigpXG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uLy4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi8uLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi8uLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IE1hdGhVdGlsIH0gZnJvbSBcIi4uLy4uL21hdGhfdXRpbFwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuXG5jbGFzcyBTdW1tZXJHYW1lQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5OiBUYWtlb3ZlckFjdGlvbiA9IFRha2VvdmVyQWN0aW9uLnN1bW1lckdhbWVcblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIExvY2FsU3RvcmFnZS5taW5pZ2FtZXMgJiZcbiAgICAgICFTZXNzaW9uU3RvcmFnZS5zdW1tZXJHYW1lRG9uZSAmJlxuICAgICAgISFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhW2hyZWY9XCIvZXZlbnQvc3VtbWVyXCJdJylcbiAgICApXG4gIH1cblxuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvZXZlbnQvc3VtbWVyL2dhbWVcIikge1xuICAgICAgcGFnZUxvYWQoXCIvZXZlbnQvc3VtbWVyL2dhbWVcIilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDMwMDApKVxuXG4gICAgY29uc3QgcGxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KFxuICAgICAgJ2J1dHRvbi5zdW1tZXIyMDIxLWJ1dHRvbi5ldmVudC1jb2luLWJ1dHRvbi5hY3RpdmVbZGF0YS1jdXJyZW5jeT1cInRva2VuXCJdJ1xuICAgIClcbiAgICBDb25zb2xlLmxvZyhcIkxvb2tpbmcgZm9yIHBsYXkgYnV0dG9uOlwiLCBwbGF5KVxuICAgIGlmICghcGxheSkge1xuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc3VtbWVyR2FtZURvbmUgPSB0cnVlXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydGVkID0gYXdhaXQgc3VtbWVyR2FtZVN0YXJ0KClcbiAgICBpZiAoc3RhcnRlZC5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICBTZXNzaW9uU3RvcmFnZS5zdW1tZXJHYW1lRG9uZSA9IHRydWVcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHBsYXkuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuICAgIHBsYXkuY2xhc3NMaXN0LmFkZChcImluYWN0aXZlXCIpXG5cbiAgICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcbiAgICAkLmZsYXZyTm90aWYoXG4gICAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgICBpY29uOiBcIi9zdGF0aWMvZXZlbnQvbWluaWdhbWVzL3NuYWtlL2ltZy9oZWFkLnBuZ1wiLFxuICAgICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWluaWdhbWVzLnBsYXlpbmcoXCJTbmFrZVwiKSxcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PlxuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgTWF0aFV0aWwucmFuZG9tQmV0d2Vlbig2MF8wMDAgKiAwLjgsIDYwXzAwMClcbiAgICAgIClcbiAgICApXG5cbiAgICBjb25zdCBzYXZlZCA9IGF3YWl0IHN1bW1lckdhbWVTYXZlKClcbiAgICBpZiAoc2F2ZWQucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc3VtbWVyR2FtZURvbmUgPSB0cnVlXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAkLmZsYXZyTm90aWYoXG4gICAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgICBpY29uOiBcIi9zdGF0aWMvZXZlbnQvbWluaWdhbWVzL3NuYWtlL2ltZy9oZWFkLnBuZ1wiLFxuICAgICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWluaWdhbWVzLnBsYXllZChcIlNuYWtlXCIpLFxuICAgICAgfSlcbiAgICApXG5cbiAgICBwYWdlTG9hZChcIi9ldmVudC9zdW1tZXIvZ2FtZVwiKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VtbWVyR2FtZVN0YXJ0KCk6IFByb21pc2U8UGFja2V0PFwiXCI+PiB7XG4gIGNvbnN0IGN1cnJlbmN5ID0gXCJ0b2tlblwiXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvZXZlbnQvc3VtbWVyL2dhbWUvc3RhcnRcIixcbiAgICAgIHsgY3VycmVuY3k6IGN1cnJlbmN5IH0sXG4gICAgICBmdW5jdGlvbiAoanNvbjogUGFja2V0PFwiXCI+KSB7XG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG5cbiAgICAgICAgcmVzb2x2ZShqc29uKVxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3VtbWVyR2FtZVNhdmUoKTogUHJvbWlzZTxQYWNrZXQ8U3VtbWVyR2FtZVNhdmVEYXRhPj4ge1xuICBjb25zdCB3aW4gPSB0cnVlXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvZXZlbnQvc3VtbWVyL2dhbWUvc2F2ZVwiLFxuICAgICAgeyB3aW46IHdpbiB9LFxuICAgICAgZnVuY3Rpb24gKGpzb246IFBhY2tldDxTdW1tZXJHYW1lU2F2ZURhdGE+KSB7XG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG5cbiAgICAgICAgcmVzb2x2ZShqc29uKVxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdW1tZXJHYW1lU2F2ZURhdGEge1xuICBmcmFnbWVudDogYm9vbGVhbiB8IG51bWJlclxuICBsYXN0RnJhZ21lbnQ6IGJvb2xlYW5cbiAgdmlldzogVmlld1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXcge1xuICBhY3RpdmVHYW1lOiBib29sZWFuXG4gIGVuZEV2ZW50OiBib29sZWFuXG4gIGZyYWdtZW50c093bmVkOiBudW1iZXJcbiAgZnJhZ21lbnRzVG90YWw6IG51bWJlclxuICBwZXRVbmxvY2tlZDogYm9vbGVhblxuICByZW1haW5pbmdUaW1lOiBudW1iZXJcbiAgc2VydmVyUmV3YXJkQ3VycmVudDogbnVtYmVyXG4gIHNlcnZlclJld2FyZFBlcmNlbnRhZ2U6IG51bWJlclxuICBzZXJ2ZXJSZXdhcmRUb3RhbDogbnVtYmVyXG4gIHNob3VsZENob29zZUJhbmtPdXRmaXQ6IGJvb2xlYW5cbiAgdG9rZW5zOiBudW1iZXJcbiAgdHJhaW5pbmdBdmFpbGFibGU6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHN1bW1lckdhbWVBY3Rpb24gPSBuZXcgU3VtbWVyR2FtZUFjdGlvbigpXG4iLCJpbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5cbmNsYXNzIFdhaXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi53YWl0XG5cbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIENvbnNvbGUubG9nKGBXYWl0aW5nIGZvciAxMCBtaW51dGVzLi4uYClcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPihyZXNvbHZlID0+XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoZmFsc2UpLCAxMCAqIDYwICogMTAwMClcbiAgICApXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFdhaXRBY3Rpb24oKVxuIiwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsaWNrPFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4oXG4gIHNlbGVjdG9yOiBzdHJpbmdcbik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8VD4ocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxUPihzZWxlY3RvcilcbiAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuXG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuXG4gICAgICAvLyBTb21lIGVsZW1lbnRzIGRvbid0IGhhdmUgdGhlaXIgY2xpY2sgaGFuZGxlcnMgcmVhZHkgdW50aWwgdGhleSdyZVxuICAgICAgLy8gaG92ZXJlZC5cbiAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRcIilcbiAgICAgIG1vdXNlRXZlbnQuaW5pdEV2ZW50KFwibW91c2VvdmVyXCIpXG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobW91c2VFdmVudClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuY2xpY2soKVxuICAgICAgICByZXNvbHZlKGVsZW1lbnQpXG4gICAgICB9LCA4MDApXG4gICAgfSwgODAwKVxuICB9KVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdDxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KFxuICBzZWxlY3Rvcjogc3RyaW5nXG4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8VD4oc2VsZWN0b3IpXG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVyblxuXG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuICAgICAgcmVzb2x2ZShlbGVtZW50KVxuICAgIH0sIDgwMClcbiAgfSlcbn1cbiIsImV4cG9ydCBlbnVtIEV4cGxvcmF0aW9uU3RhdHVzIHtcbiAgaWRsZSxcbiAgcmVzdWx0LFxuICBjYXB0dXJlLFxuICBwZW5kaW5nLFxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGlzRW51bTxUPih2YWx1ZTogdW5rbm93biwgZW51bWVyYXRpb246IFQpOiB2YWx1ZSBpcyBUW2tleW9mIFRdIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZW51bWVyYXRpb24pLmluY2x1ZGVzKHZhbHVlKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEhpc3RvcnkgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvbWFya2V0X2hpc3RvcnlcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEF1Y3Rpb25zKCk6IHZvaWQge1xuICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL21hcmtldHBsYWNlL2F1Y3Rpb25zXCIpIHJldHVyblxuXG4gIGNvbnN0IG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIiNtYXJrZXRwbGFjZS1hY3RpdmUtYXVjdGlvbnNcIlxuICApXG4gIGlmICghbWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucykgcmV0dXJuXG5cbiAgY29uc3QgbGF5b3V0MmNvbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLm1hcmtldHBsYWNlLW1haW4tY29udGFpbmVyICNsYXlvdXQtMmNvbFwiXG4gIClcbiAgaWYgKGxheW91dDJjb2wpIGxheW91dDJjb2wuc3R5bGUub3ZlcmZsb3dYID0gXCJ2aXNpYmxlXCJcblxuICBsb2FkSGlzdG9yeShtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zKVxufVxuXG5mdW5jdGlvbiBsb2FkSGlzdG9yeShtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zOiBIVE1MRGl2RWxlbWVudCk6IHZvaWQge1xuICBtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zLnF1ZXJ5U2VsZWN0b3IoXCJzdHlsZVwiKT8ucmVtb3ZlKClcbiAgbWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucy5xdWVyeVNlbGVjdG9yKFwiI3B1cmNoYXNlLWhpc3RvcnlcIik/LnJlbW92ZSgpXG4gIG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMucXVlcnlTZWxlY3RvcihcIiNzYWxlLWhpc3RvcnlcIik/LnJlbW92ZSgpXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL21hcmtldF9oaXN0b3J5Lmh0bWxcIilcbiAgY29uc3QgaGlzdG9yeTogTWFya2V0SGlzdG9yeSA9IHtcbiAgICBwdXJjaGFzZXM6IExvY2FsU3RvcmFnZS5wdXJjaGFzZXMubWFwKHB1cmNoYXNlID0+ICh7XG4gICAgICAuLi5wdXJjaGFzZSxcbiAgICAgIGRhdGU6IHRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuZGF0ZV90aW1lX2Zvcm1hdC5mb3JtYXQoXG4gICAgICAgIG5ldyBEYXRlKHB1cmNoYXNlLmRhdGUpXG4gICAgICApLFxuICAgIH0pKSxcbiAgICBzYWxlczogTG9jYWxTdG9yYWdlLnNhbGVzLm1hcChzYWxlID0+ICh7XG4gICAgICAuLi5zYWxlLFxuICAgICAgZGF0ZTogdHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5kYXRlX3RpbWVfZm9ybWF0LmZvcm1hdChcbiAgICAgICAgbmV3IERhdGUoc2FsZS5kYXRlKVxuICAgICAgKSxcbiAgICB9KSksXG4gIH1cblxuICBtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcih7IC4uLmhpc3RvcnksIHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgZm9yIChjb25zdCBwdXJjaGFzZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwiI3B1cmNoYXNlLWhpc3RvcnkgLm1hcmtldHBsYWNlLWF1Y3Rpb25zLWl0ZW1cIlxuICApKSB7XG4gICAgY29uc3QgaXRlbWlkID0gcHVyY2hhc2UuZGF0YXNldC5pdGVtaWRcbiAgICBwdXJjaGFzZS5xdWVyeVNlbGVjdG9yKFwiLmRlbGV0ZS1idXR0b25cIik/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBMb2NhbFN0b3JhZ2UucHVyY2hhc2VzID0gTG9jYWxTdG9yYWdlLnB1cmNoYXNlcy5maWx0ZXIoXG4gICAgICAgIHB1cmNoYXNlID0+IHB1cmNoYXNlLml0ZW1pZCAhPT0gaXRlbWlkXG4gICAgICApXG5cbiAgICAgIGxvYWRIaXN0b3J5KG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMpXG4gICAgfSlcbiAgfVxuXG4gIGZvciAoY29uc3Qgc2FsZSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwiI3NhbGUtaGlzdG9yeSAubWFya2V0cGxhY2Utc2FsZXMtaXRlbVwiXG4gICkpIHtcbiAgICBjb25zdCBpY29uID0gc2FsZS5xdWVyeVNlbGVjdG9yPEhUTUxJbWFnZUVsZW1lbnQ+KFwiLmFic3RyYWN0LWljb24gaW1nXCIpPy5zcmNcbiAgICBzYWxlLnF1ZXJ5U2VsZWN0b3IoXCIuZGVsZXRlLWJ1dHRvblwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5zYWxlcyA9IExvY2FsU3RvcmFnZS5zYWxlcy5maWx0ZXIoc2FsZSA9PiBzYWxlLmljb24gIT09IGljb24pXG5cbiAgICAgIGxvYWRIaXN0b3J5KG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMpXG4gICAgfSlcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBjYXJvdXNlbEJlZW1vb3ZBbm5veWFuY2VzIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2JlZW1vb3ZfYW5ub3lhbmNlc1wiXG5pbXBvcnQgeyBjYXJvdXNlbERvd25sb2FkRmFjZSB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9mYWNlXCJcbmltcG9ydCB7IGNhcm91c2VsRG93bmxvYWRHdWFyZGlhbiB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhblwiXG5pbXBvcnQgeyBjYXJvdXNlbEVFIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX2VsZGFyeWFfZW5oYW5jZW1lbnRzXCJcbmltcG9ydCB7IGNhcm91c2VsVGFrZW92ZXIgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfdGFrZW92ZXJcIlxuaW1wb3J0IHsgZG93bmxvYWRGYWNlLCBkb3dubG9hZEd1YXJkaWFuIH0gZnJvbSBcIi4uL2Rvd25sb2FkLWNhbnZhc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB7IHRvZ2dsZVRha2VvdmVyIH0gZnJvbSBcIi4uL3Rha2VvdmVyL2JyYWluXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDYXJvdXNlbCgpOiB2b2lkIHtcbiAgY29uc3QgY2Fyb3VzZWxJbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2Fyb3VzZWwtaW5uZXJcIilcbiAgaWYgKCFjYXJvdXNlbElubmVyIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2Fyb3VzZWwtZWVcIikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIEltcG9ydCBjYXJvdXNlbCB0ZW1wbGF0ZVxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvY2Fyb3VzZWxfbmV3cy5odG1sXCIpXG5cbiAgY29uc3QgY29udGV4dHMgPSBbXG4gICAgLy8gSW50cm9cbiAgICBjYXJvdXNlbEVFLFxuXG4gICAgLy8gRmVhdHVyZXNcbiAgICAuLi4oTG9jYWxTdG9yYWdlLm1pbmlnYW1lcyB8fFxuICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnMgfHxcbiAgICBMb2NhbFN0b3JhZ2UubWFya2V0XG4gICAgICA/IFtjYXJvdXNlbFRha2VvdmVyXVxuICAgICAgOiBbXSksXG4gICAgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuLFxuICAgIGNhcm91c2VsRG93bmxvYWRGYWNlLFxuXG4gICAgLy8gQWRzXG4gICAgY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlcyxcbiAgXVxuXG4gIC8vIEFkZCBlbnRyaWVzIHRvIHRoZSBjYXJvdXNlbFxuICBjYXJvdXNlbElubmVyLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIGNvbnRleHRzLm1hcChiYW5uZXIgPT4gdGVtcGxhdGUucmVuZGVyKGJhbm5lcikpLmpvaW4oXCJcXG5cIilcbiAgKVxuXG4gIC8vIEFkZCBsaW5rc1xuICBmb3IgKGNvbnN0IGNhcm91c2VsIG9mIGNvbnRleHRzKSB7XG4gICAgaWYgKCFjYXJvdXNlbC5ocmVmKSBjb250aW51ZVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGNhcm91c2VsSW5uZXIucXVlcnlTZWxlY3RvcihgIyR7Y2Fyb3VzZWwuaWR9YClcbiAgICBpZiAoIWVsZW1lbnQpIGNvbnRpbnVlXG5cbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIG9wZW4oY2Fyb3VzZWwuaHJlZiwgXCJfYmxhbmtcIilcbiAgICB9KVxuICB9XG5cbiAgLy8gQWRkIGNsaWNrIGV2ZW50c1xuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGNhcm91c2VsRG93bmxvYWRGYWNlLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkRmFjZSlcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChjYXJvdXNlbERvd25sb2FkR3VhcmRpYW4uaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZG93bmxvYWRHdWFyZGlhbilcblxuICBjb25zdCB0YWtlb3ZlckFuY2hvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhcm91c2VsVGFrZW92ZXIuaWQpXG4gIHRha2VvdmVyQW5jaG9yPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIHRvZ2dsZVRha2VvdmVyKClcbiAgICB0YWtlb3ZlclRpdGxlKHRha2VvdmVyQW5jaG9yKVxuICB9KVxuXG4gIGlmICh0YWtlb3ZlckFuY2hvcikgdGFrZW92ZXJUaXRsZSh0YWtlb3ZlckFuY2hvcilcbn1cblxuZnVuY3Rpb24gdGFrZW92ZXJUaXRsZSh0YWtlb3ZlckFuY2hvcjogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgdGFrZW92ZXJINCA9IHRha2VvdmVyQW5jaG9yLnF1ZXJ5U2VsZWN0b3IoXCJoNFwiKVxuICBpZiAodGFrZW92ZXJINCkge1xuICAgIHRha2VvdmVySDQuaW5uZXJUZXh0ID0gU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXJcbiAgICAgID8gdHJhbnNsYXRlLmNhcm91c2VsLnRha2VvdmVyLmRpc2FibGVfdGFrZW92ZXJcbiAgICAgIDogdHJhbnNsYXRlLmNhcm91c2VsLnRha2VvdmVyLmVuYWJsZV90YWtlb3ZlclxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHNhdmVGYXZvdXJpdGUsIHNob3dGYXZvdXJpdGUgfSBmcm9tIFwiLi4vYXBwZWFyYW5jZS9mYWtlX2Zhdm91cml0ZXNcIlxuaW1wb3J0IHsgZXhwb3J0UHJldmlldywgaW1wb3J0T3V0Zml0IH0gZnJvbSBcIi4uL2FwcGVhcmFuY2UvZmF2b3VyaXRlc19hY3Rpb25zXCJcbmltcG9ydCB7IGRvd25sb2FkQXBwZWFyYW5jZSB9IGZyb20gXCIuLi9kb3dubG9hZC1jYW52YXNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCBpbmRleGVkX2RiIGZyb20gXCIuLi9pbmRleGVkX2RiL2luZGV4ZWRfZGJcIlxuaW1wb3J0IHR5cGUgeyBGYXZvdXJpdGVzQWN0aW9uIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Zhdm91cml0ZXNfYWN0aW9uXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRGYXZvdXJpdGVzKCk6IHZvaWQge1xuICBsb2FkRmF2b3VyaXRlc0FjdGlvbnMoKVxuICB2b2lkIGxvYWRGYWtlRmF2b3VyaXRlcygpXG59XG5cbmZ1bmN0aW9uIGxvYWRGYXZvdXJpdGVzQWN0aW9ucygpOiB2b2lkIHtcbiAgY29uc3QgYWN0aW9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZmF2b3JpdGVzLWFjdGlvbnNcIilcbiAgaWYgKCFhY3Rpb25zIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZmF2b3JpdGVzLWFjdGlvbi1lZVwiKSkgcmV0dXJuXG5cbiAgY29uc3QgYWN0aW9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2Zhdm91cml0ZXNfYWN0aW9uLmh0bWxcIilcblxuICBjb25zdCBpbXBvcnRBY3Rpb246IEZhdm91cml0ZXNBY3Rpb24gPSB7XG4gICAgaWQ6IFwiaW1wb3J0LW91dGZpdFwiLFxuICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuYnV0dG9ucy5pbXBvcnQsXG4gIH1cbiAgY29uc3QgZXhwb3J0QWN0aW9uOiBGYXZvdXJpdGVzQWN0aW9uID0ge1xuICAgIGlkOiBcImV4cG9ydC1vdXRmaXRcIixcbiAgICB0ZXh0OiB0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmJ1dHRvbnMuZXhwb3J0LFxuICB9XG4gIGNvbnN0IGRvd25sb2FkQWN0aW9uOiBGYXZvdXJpdGVzQWN0aW9uID0ge1xuICAgIGlkOiBcImRvd25sb2FkLW91dGZpdFwiLFxuICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuYnV0dG9ucy5kb3dubG9hZCxcbiAgfVxuXG4gIGFjdGlvbnMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgYWN0aW9uVGVtcGxhdGUucmVuZGVyKGltcG9ydEFjdGlvbikgK1xuICAgICAgYWN0aW9uVGVtcGxhdGUucmVuZGVyKGV4cG9ydEFjdGlvbikgK1xuICAgICAgYWN0aW9uVGVtcGxhdGUucmVuZGVyKGRvd25sb2FkQWN0aW9uKVxuICApXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoaW1wb3J0QWN0aW9uLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGltcG9ydE91dGZpdClcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChleHBvcnRBY3Rpb24uaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZXhwb3J0UHJldmlldylcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChkb3dubG9hZEFjdGlvbi5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkb3dubG9hZEFwcGVhcmFuY2UpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkRmFrZUZhdm91cml0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHRodW1icyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYWxsLW91dGZpdC10aHVtYnMgLm1DU0JfY29udGFpbmVyXCIpXG4gIGlmICghdGh1bWJzKSByZXR1cm5cblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvb3V0Zml0X3RodW1icy5odG1sXCIpXG5cbiAgY29uc3QgZmF2b3VyaXRlcyA9IGF3YWl0IGluZGV4ZWRfZGIuZ2V0RmF2b3VyaXRlT3V0Zml0cygpXG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNlZS1vdXRmaXQtdGh1bWJzXCIpPy5yZW1vdmUoKVxuICB0aHVtYnMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgdGVtcGxhdGUucmVuZGVyKHtcbiAgICAgIG91dGZpdHM6IGZhdm91cml0ZXMsXG4gICAgfSlcbiAgKVxuXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIuZWUtYXZhaWxhYmxlLXNsb3RcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKTogdm9pZCA9PiB2b2lkIHNhdmVGYXZvdXJpdGUoKSlcblxuICBmb3IgKGNvbnN0IGRpdiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIi5lZS1vdXRmaXQtdGh1bWJcIlxuICApKSB7XG4gICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBmYXZvdXJpdGUgPSBmYXZvdXJpdGVzLmZpbmQoXG4gICAgICAgIGZhdm91cml0ZSA9PiBmYXZvdXJpdGUuaWQgPT09IE51bWJlcihkaXYuZGF0YXNldC5hcnJheUluZGV4KVxuICAgICAgKVxuICAgICAgaWYgKCFmYXZvdXJpdGUpIHJldHVyblxuXG4gICAgICBzaG93RmF2b3VyaXRlKGZhdm91cml0ZSlcbiAgICB9KVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IEhvbWVDb250ZW50U21hbGwgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvaG9tZV9jb250ZW50X3NtYWxsXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRIb21lQ29udGVudCgpOiB2b2lkIHtcbiAgY29uc3QgaG9tZUNvbnRlbnRTbWFsbHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhvbWUtY29udGVudC1zbWFsbHNcIilcbiAgaWYgKFxuICAgICFob21lQ29udGVudFNtYWxscyB8fFxuICAgIGhvbWVDb250ZW50U21hbGxzLnF1ZXJ5U2VsZWN0b3IoXCIuaG9tZS1jb250ZW50LXNtYWxsLWVlXCIpXG4gIClcbiAgICByZXR1cm5cblxuICAvLyBSZW1vdmUgYmFua1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhvbWUtYmFua1wiKT8ucmVtb3ZlKClcblxuICAvLyBBZGQgZm9ydW1cbiAgY29uc3Qgc21hbGxUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvaG9tZV9jb250ZW50X3NtYWxsLmh0bWxcIilcbiAgY29uc3Qgc21hbGxDb250ZW50OiBIb21lQ29udGVudFNtYWxsID0ge1xuICAgIGJhY2tncm91bmRJbWFnZTpcbiAgICAgIFwiL2Fzc2V0cy9pbWcvbWluaWdhbWVzL3RyZWFzdXJlaHVudC9hNDhiYmM0ZTQ4NDk3NDVlYmU2ZGJjZjUzMTNlYjNmMC5qcGdcIixcbiAgICBoNDogdHJhbnNsYXRlLmhvbWUuZm9ydW0sXG4gICAgaHJlZjogXCIvZm9ydW1cIixcbiAgICBpZDogXCJmb3J1bVwiLFxuICB9XG5cbiAgaG9tZUNvbnRlbnRTbWFsbHMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgc21hbGxUZW1wbGF0ZS5yZW5kZXIoc21hbGxDb250ZW50KVxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyaW1JY29uIH0gZnJvbSBcIi4uL2VsZGFyeWFfdXRpbFwiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS93aXNoZWRfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IERhdGFQcm9kdWN0IH0gZnJvbSBcIi4uL21hbGwvZGF0YV9wcm9kdWN0XCJcbmltcG9ydCB0eXBlIHsgTWFsbEVudHJ5IH0gZnJvbSBcIi4uL21hbGwvbWFsbF9lbnRyeVwiXG5pbXBvcnQgeyBSYXJpdHkgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvcmFyaXR5LmVudW1cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1hbGwoKTogdm9pZCB7XG4gIGlmICghbG9jYXRpb24ucGF0aG5hbWUuc3RhcnRzV2l0aChcIi9tYWxsXCIpKSByZXR1cm5cblxuICBmb3IgKGNvbnN0IGxpIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXCJbZGF0YS1wcm9kdWN0XVwiKSlcbiAgICBsaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4gYWRkV2lzaGxpc3RCdXR0b24obGkpKVxufVxuXG5mdW5jdGlvbiBhZGRXaXNobGlzdEJ1dHRvbihsaTogSFRNTExJRWxlbWVudCk6IHZvaWQge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FkZC10by13aXNobGlzdFwiKT8ucmVtb3ZlKClcblxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiI21hbGwtcHJvZHVjdERldGFpbC1pbmZvXCIpXG4gICAgPy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgICBcImJlZm9yZWVuZFwiLFxuICAgICAgXCI8YnV0dG9uIGlkPSdhZGQtdG8td2lzaGxpc3QnIGNsYXNzPSdubC1idXR0b24nIHN0eWxlPSdtYXJnaW46IDIwcHggYXV0byAwOyBtaW4td2lkdGg6IDIwMHB4Oyc+QWRkIHRvIG1hcmtldCB3aXNobGlzdDwvYnV0dG9uPlwiXG4gICAgKVxuXG4gIGNvbnN0IG1heFF1YW50aXR5ID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MU3BhbkVsZW1lbnQ+KFwiLml0ZW0tbWF4UXVhbnRpdHlcIilcblxuICBjb25zdCBtYWxsRW50cnk6IE1hbGxFbnRyeSA9IHtcbiAgICBwcm9kdWN0OiBKU09OLnBhcnNlKGxpLmRhdGFzZXQucHJvZHVjdCEpIGFzIERhdGFQcm9kdWN0LFxuICAgIGljb246IHRyaW1JY29uKFxuICAgICAgbGkucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcImltZy5tYWxsLXByb2R1Y3QtaWNvblwiKSEuc3JjXG4gICAgKSxcbiAgICByYXJpdHk6XG4gICAgICBSYXJpdHlbXG4gICAgICAgIChsaVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgXCIucmFyaXR5LW1hcmtlci1jb21tb24sIC5yYXJpdHktbWFya2VyLXJhcmUsIC5yYXJpdHktbWFya2VyLWVwaWMsIC5yYXJpdHktbWFya2VyLWxlZ2VuZGFyeSwgLnJhcml0eS1tYXJrZXItZXZlbnRcIlxuICAgICAgICAgIClcbiAgICAgICAgICA/LmNsYXNzTmFtZS5zcGxpdChcInJhcml0eS1tYXJrZXItXCIpWzFdID8/IFwiXCIpIGFzIGtleW9mIHR5cGVvZiBSYXJpdHlcbiAgICAgIF0sXG4gICAgbWF4UXVhbnRpdHk6IG1heFF1YW50aXR5ID8gTnVtYmVyKG1heFF1YW50aXR5LmlubmVyVGV4dCkgOiB1bmRlZmluZWQsXG4gICAgYWJzdHJhY3RUeXBlOlxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICAgIFwiI21hbGwtbWVudSAudG9vbHRpcC5hY3RpdmUgLnRvb2x0aXAtY29udGVudFwiXG4gICAgICApPy5pbm5lclRleHQgPz8gXCJcIixcbiAgfVxuXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjYWRkLXRvLXdpc2hsaXN0XCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4gYWRkVG9XaXNobGlzdEZsYXZyKG1hbGxFbnRyeSkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb1dpc2hsaXN0RmxhdnIobWFsbEVudHJ5OiBNYWxsRW50cnkpOiB2b2lkIHtcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2F1dG9fYnV5X2ZsYXZyX21hbGwuaHRtbFwiKVxuXG4gICQuZmxhdnIoe1xuICAgIGNvbnRlbnQ6IHRlbXBsYXRlLnJlbmRlcih7IHRyYW5zbGF0ZSB9KSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbG9zZTogeyBzdHlsZTogXCJjbG9zZVwiIH0sXG4gICAgICBzYXZlOiB7XG4gICAgICAgIGFjdGlvbjogKCkgPT4gc2F2ZShtYWxsRW50cnkpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRpYWxvZzogXCJwcm9tcHRcIixcbiAgICBwcm9tcHQ6IHtcbiAgICAgIHZhbHVlOiBcIlwiLFxuICAgIH0sXG4gICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XG4gICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwibmV3LWxheW91dC1wb3B1cFwiKVxuXG4gICAgICBkb2N1bWVudFxuICAgICAgICAucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIilcbiAgICAgICAgPy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgKHsga2V5IH0pID0+IHtcbiAgICAgICAgICBpZiAoa2V5ICE9PSBcIkVudGVyXCIpIHJldHVyblxuICAgICAgICAgIHNhdmUobWFsbEVudHJ5KVxuICAgICAgICB9KVxuICAgIH0sXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNhdmUobWFsbEVudHJ5OiBNYWxsRW50cnkpOiBib29sZWFuIHtcbiAgY29uc3QgcHJpY2UgPSBOdW1iZXIoXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIik/LnZhbHVlLnRyaW0oKVxuICApXG4gIGlmICghcHJpY2UgfHwgcHJpY2UgPD0gMCkge1xuICAgICQuZmxhdnJOb3RpZih0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC5pbnZhbGlkX3ByaWNlKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3Qgd2lzaGxpc3QgPSBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QuZmlsdGVyKFxuICAgIHdpc2hsaXN0RW50cnkgPT4gd2lzaGxpc3RFbnRyeS5pY29uICE9PSBtYWxsRW50cnkuaWNvblxuICApXG4gIGNvbnN0IHdpc2hlZDogV2lzaGVkSXRlbSA9IHtcbiAgICAuLi5tYWxsRW50cnksXG4gICAgLi4ubWFsbEVudHJ5LnByb2R1Y3QsXG4gICAgcHJpY2UsXG4gIH1cbiAgd2lzaGxpc3QucHVzaCh3aXNoZWQpXG5cbiAgd2lzaGxpc3Quc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IHR5cGVDb21wYXJlID0gYS50eXBlLmxvY2FsZUNvbXBhcmUoYi50eXBlKVxuICAgIGlmICh0eXBlQ29tcGFyZSAhPT0gMCkgcmV0dXJuIHR5cGVDb21wYXJlXG5cbiAgICBjb25zdCBhYnN0cmFjdFR5cGVDb21wYXJlID0gKGEuYWJzdHJhY3RUeXBlID8/IFwiXCIpLmxvY2FsZUNvbXBhcmUoXG4gICAgICBiLmFic3RyYWN0VHlwZSA/PyBcIlwiXG4gICAgKVxuICAgIGlmIChhYnN0cmFjdFR5cGVDb21wYXJlICE9PSAwKSByZXR1cm4gYWJzdHJhY3RUeXBlQ29tcGFyZVxuXG4gICAgY29uc3QgcmFyaXR5Q29tcGFyZSA9XG4gICAgICBPYmplY3Qua2V5cyhSYXJpdHkpLmluZGV4T2YoYS5yYXJpdHkgPz8gXCJcIikgLVxuICAgICAgT2JqZWN0LmtleXMoUmFyaXR5KS5pbmRleE9mKGIucmFyaXR5ID8/IFwiXCIpXG4gICAgaWYgKHJhcml0eUNvbXBhcmUgIT09IDApIHJldHVybiByYXJpdHlDb21wYXJlXG5cbiAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKVxuICB9KVxuXG4gIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IHdpc2hsaXN0XG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICQuZmxhdnJOb3RpZihcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4ud2lzaGVkLFxuICAgICAgbWVzc2FnZTogdHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QuYWRkZWRfdG9fd2lzaGxpc3QoXG4gICAgICAgIHdpc2hlZC5uYW1lLFxuICAgICAgICB3aXNoZWQucHJpY2VcbiAgICAgICksXG4gICAgfSlcbiAgKVxuICByZXR1cm4gdHJ1ZVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS93aXNoZWRfaXRlbVwiXG5pbXBvcnQgeyBSYXJpdHkgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvcmFyaXR5LmVudW1cIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9pbnRlcmZhY2VzL21hcmtldF9lbnRyeVwiXG5pbXBvcnQgeyBnZXRJdGVtRGV0YWlscyB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9tYXJrZXRwbGFjZV9oYW5kbGVyc1wiXG5cbmxldCBtYXJrZXRPYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGxcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNYXJrZXQoKTogdm9pZCB7XG4gIG1hcmtldE9ic2VydmVyPy5kaXNjb25uZWN0KClcbiAgbWFya2V0T2JzZXJ2ZXIgPSBudWxsXG5cbiAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9tYXJrZXRwbGFjZVwiKSByZXR1cm5cblxuICAvLyBgLm1hcmtldHBsYWNlLXNlYXJjaC1pdGVtc2AgaXMgdGhlIGNvbnRhaW5lciB3aG9zZSBIVE1MIGNvbnRlbnQgaXMgYmVpbmdcbiAgLy8gcmVwbGFjZWQgb24gZXZlcnkgYWN0aW9uLlxuICBjb25zdCBzZWFyY2hJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFVMaXN0RWxlbWVudD4oXG4gICAgXCIubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1zXCJcbiAgKVxuICBpZiAoIXNlYXJjaEl0ZW1zKSByZXR1cm5cblxuICBtYXJrZXRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGxvYWRXaXNobGlzdClcbiAgbWFya2V0T2JzZXJ2ZXIub2JzZXJ2ZShzZWFyY2hJdGVtcywge1xuICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgfSlcblxuICBsb2FkV2lzaGxpc3QoKVxufVxuXG5mdW5jdGlvbiBsb2FkV2lzaGxpc3QoKTogdm9pZCB7XG4gIGZvciAoY29uc3QgbGkgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcbiAgICBcIi5tYXJrZXRwbGFjZS1hYnN0cmFjdFwiXG4gICkpIHtcbiAgICBsaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT5cbiAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgICAoXzogTXV0YXRpb25SZWNvcmRbXSwgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIpOiB2b2lkID0+IHtcbiAgICAgICAgICBjb25zdCBtYXJrZXRFbnRyeSA9IGdldEl0ZW1EZXRhaWxzKGxpKVxuICAgICAgICAgIGlmICghbWFya2V0RW50cnkpIHJldHVyblxuXG4gICAgICAgICAgYWRkV2lzaGlzdEJ1dHRvbihtYXJrZXRFbnRyeSwgb2JzZXJ2ZXIpXG4gICAgICAgIH1cbiAgICAgICkub2JzZXJ2ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLXpvb21cIikgYXMgTm9kZSwge1xuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICB9KVxuICAgIClcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRXaXNoaXN0QnV0dG9uKFxuICBtYXJrZXRFbnRyeTogTWFya2V0RW50cnksXG4gIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlclxuKTogdm9pZCB7XG4gIGNvbnN0IGJ1dHRvbnNDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIiNtYXJrZXRwbGFjZS1pdGVtRGV0YWlsXCJcbiAgKVxuICBpZiAoIWJ1dHRvbnNDb250YWluZXIpIHJldHVyblxuICBvYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gIGhpamFja0J1eUJ1dHRvbnMobWFya2V0RW50cnkpXG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWluZm8tYXV0b2J1eVwiKT8ucmVtb3ZlKClcbiAgY29uc3QgYnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2F1dG9fYnV5X2J1dHRvbi5odG1sXCIpXG4gIGJ1dHRvbnNDb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgYnV0dG9uVGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pXG4gIClcblxuICBidXR0b25zQ29udGFpbmVyXG4gICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI21hcmtldHBsYWNlLWl0ZW1EZXRhaWwtaW5mby1hdXRvYnV5XCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4gYWRkVG9XaXNobGlzdEZsYXZyKG1hcmtldEVudHJ5KSlcbn1cblxuZnVuY3Rpb24gYWRkVG9XaXNobGlzdEZsYXZyKG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSk6IHZvaWQge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXV0b19idXlfZmxhdnIuaHRtbFwiKVxuXG4gICQuZmxhdnIoe1xuICAgIGNvbnRlbnQ6IHRlbXBsYXRlLnJlbmRlcih7IHRyYW5zbGF0ZSB9KSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbG9zZTogeyBzdHlsZTogXCJjbG9zZVwiIH0sXG4gICAgICBzYXZlOiB7XG4gICAgICAgIGFjdGlvbjogKCkgPT4gc2F2ZShtYXJrZXRFbnRyeSksXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGlhbG9nOiBcInByb21wdFwiLFxuICAgIHByb21wdDoge1xuICAgICAgdmFsdWU6IFwiXCIsXG4gICAgfSxcbiAgICBvbkJ1aWxkOiAkY29udGFpbmVyID0+IHtcbiAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJuZXctbGF5b3V0LXBvcHVwXCIpXG5cbiAgICAgIGRvY3VtZW50XG4gICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKVxuICAgICAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCAoeyBrZXkgfSkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuXG4gICAgICAgICAgc2F2ZShtYXJrZXRFbnRyeSlcbiAgICAgICAgfSlcbiAgICB9LFxuICB9KVxufVxuXG5mdW5jdGlvbiBzYXZlKG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSk6IGJvb2xlYW4ge1xuICBjb25zdCBwcmljZSA9IE51bWJlcihcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiLmZsYXZyLXByb21wdFwiKT8udmFsdWUudHJpbSgpXG4gIClcbiAgaWYgKCFwcmljZSB8fCBwcmljZSA8PSAwKSB7XG4gICAgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LmludmFsaWRfcHJpY2UpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdC5maWx0ZXIoXG4gICAgd2lzaGxpc3RFbnRyeSA9PiB3aXNobGlzdEVudHJ5Lmljb24gIT09IG1hcmtldEVudHJ5Lmljb25cbiAgKVxuICBjb25zdCB3aXNoZWQ6IFdpc2hlZEl0ZW0gPSB7IC4uLm1hcmtldEVudHJ5LCBwcmljZSB9XG4gIHdpc2hsaXN0LnB1c2god2lzaGVkKVxuXG4gIHdpc2hsaXN0LnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCB0eXBlQ29tcGFyZSA9IGEudHlwZS5sb2NhbGVDb21wYXJlKGIudHlwZSlcbiAgICBpZiAodHlwZUNvbXBhcmUgIT09IDApIHJldHVybiB0eXBlQ29tcGFyZVxuXG4gICAgY29uc3QgYWJzdHJhY3RUeXBlQ29tcGFyZSA9IChhLmFic3RyYWN0VHlwZSA/PyBcIlwiKS5sb2NhbGVDb21wYXJlKFxuICAgICAgYi5hYnN0cmFjdFR5cGUgPz8gXCJcIlxuICAgIClcbiAgICBpZiAoYWJzdHJhY3RUeXBlQ29tcGFyZSAhPT0gMCkgcmV0dXJuIGFic3RyYWN0VHlwZUNvbXBhcmVcblxuICAgIGNvbnN0IHJhcml0eUNvbXBhcmUgPVxuICAgICAgT2JqZWN0LmtleXMoUmFyaXR5KS5pbmRleE9mKGEucmFyaXR5ID8/IFwiXCIpIC1cbiAgICAgIE9iamVjdC5rZXlzKFJhcml0eSkuaW5kZXhPZihiLnJhcml0eSA/PyBcIlwiKVxuICAgIGlmIChyYXJpdHlDb21wYXJlICE9PSAwKSByZXR1cm4gcmFyaXR5Q29tcGFyZVxuXG4gICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSlcbiAgfSlcblxuICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSB3aXNobGlzdFxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9mbGF2cl9ub3RpZi9pY29uX21lc3NhZ2UuaHRtbFwiKVxuICAkLmZsYXZyTm90aWYoXG4gICAgdGVtcGxhdGUucmVuZGVyKHtcbiAgICAgIC4uLndpc2hlZCxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LmFkZGVkX3RvX3dpc2hsaXN0KFxuICAgICAgICB3aXNoZWQubmFtZSxcbiAgICAgICAgd2lzaGVkLnByaWNlXG4gICAgICApLFxuICAgIH0pXG4gIClcbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gaGlqYWNrQnV5QnV0dG9ucyhtYXJrZXRFbnRyeTogTWFya2V0RW50cnkpOiB2b2lkIHtcbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIi5tYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWJ1eVwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGFkZFB1cmNoYXNlKG1hcmtldEVudHJ5KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIGFkZFB1cmNoYXNlKG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSk6IHZvaWQge1xuICBMb2NhbFN0b3JhZ2UucHVyY2hhc2VzID0gW1xuICAgIG1hcmtldEVudHJ5LFxuICAgIC4uLkxvY2FsU3RvcmFnZS5wdXJjaGFzZXMuZmlsdGVyKFxuICAgICAgcHVyY2hhc2UgPT4gcHVyY2hhc2UuaXRlbWlkICE9PSBtYXJrZXRFbnRyeS5pdGVtaWRcbiAgICApLFxuICBdXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IE1haW5NZW51IH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL21haW5fbWVudVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkTWVudSgpOiB2b2lkIHtcbiAgY29uc3QgbWVudUlubmVyUmlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lbnUtaW5uZXItcmlnaHRcIilcbiAgaWYgKCFtZW51SW5uZXJSaWdodCB8fCBtZW51SW5uZXJSaWdodC5xdWVyeVNlbGVjdG9yKFwiLm1haW4tbWVudS1lZVwiKSkgcmV0dXJuXG5cbiAgLy8gUmVtb3ZlIGJhbmtcbiAgbWVudUlubmVyUmlnaHQucXVlcnlTZWxlY3RvcihcIi5tYWluLW1lbnUtYmFua1wiKT8ucmVtb3ZlKClcblxuICAvLyBBZGQgRm9ydW1cbiAgY29uc3QgbWVudVRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9tYWluX21lbnUuaHRtbFwiKVxuICBjb25zdCBtYWluTWVudUZvcnVtOiBNYWluTWVudSA9IHtcbiAgICBjbGFzczogXCJmb3J1bVwiLFxuICAgIGhyZWY6IFwiL2ZvcnVtXCIsXG4gICAgdGV4dDogdHJhbnNsYXRlLmhvbWUuZm9ydW0sXG4gIH1cblxuICBtZW51SW5uZXJSaWdodC5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBtZW51VGVtcGxhdGUucmVuZGVyKG1haW5NZW51Rm9ydW0pXG4gIClcbn1cbiIsImltcG9ydCB7IGxvYWRNYXJrZXJzIH0gZnJvbSBcIi4uL3BldC9leHBsb3JhdGlvblwiXG5pbXBvcnQgeyBsb2FkRXhwbG9yYXRpb25IaXN0b3J5IH0gZnJvbSBcIi4uL3BldC9leHBsb3JhdGlvbi1oaXN0b3J5XCJcblxubGV0IHBldE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbFxuXG5mdW5jdGlvbiBsb2FkRXhwbG9yYXRpb25zKCk6IHZvaWQge1xuICBwZXRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gIHBldE9ic2VydmVyID0gbnVsbFxuXG4gIC8qKiBgLnBhZ2UtbWFpbi1jb250YWluZXJgIGNoYW5nZXMgYmFja2dyb3VuZCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByZWdpb24uICovXG4gIGNvbnN0IG1haW5Db250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIi5wYWdlLW1haW4tY29udGFpbmVyXCJcbiAgKVxuICBpZiAoIW1haW5Db250YWluZXIpIHJldHVyblxuXG4gIHBldE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZEV4cGxvcmF0aW9ucylcbiAgcGV0T2JzZXJ2ZXIub2JzZXJ2ZShtYWluQ29udGFpbmVyLCB7XG4gICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgfSlcblxuICBsb2FkTWFya2VycygpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGV0KCk6IHZvaWQge1xuICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL3BldFwiKSByZXR1cm5cbiAgbG9hZEV4cGxvcmF0aW9ucygpXG4gIGxvYWRFeHBsb3JhdGlvbkhpc3RvcnkoKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBkb3dubG9hZFByb2ZpbGUgfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBleHBvcnRPdXRmaXQgfSBmcm9tIFwiLi4vb3V0Zml0XCJcbmltcG9ydCB0eXBlIHsgUHJvZmlsZUNvbnRhY3RBY3Rpb24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvcHJvZmlsZV9jb250YWN0X2FjdGlvblwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvZmlsZSgpOiB2b2lkIHtcbiAgY29uc3QgcHJvZmlsZUNvbnRhY3RBY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgXCJwcm9maWxlLWNvbnRhY3QtYWN0aW9uc1wiXG4gIClcbiAgaWYgKFxuICAgICFwcm9maWxlQ29udGFjdEFjdGlvbnMgfHxcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnByb2ZpbGUtY29udGFjdC1hY3Rpb24tZWVcIilcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvcHJvZmlsZV9jb250YWN0X2FjdGlvbi5odG1sXCIpXG5cbiAgY29uc3QgcHJvZmlsZUFjdGlvbkV4cG9ydDogUHJvZmlsZUNvbnRhY3RBY3Rpb24gPSB7XG4gICAgaWQ6IFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1leHBvcnRcIixcbiAgICBhY3Rpb25EZXNjcmlwdGlvbjogdHJhbnNsYXRlLnByb2ZpbGUuZXhwb3J0X291dGZpdCxcbiAgfVxuICBjb25zdCBwcm9maWxlQWN0aW9uRG93bmxvYWQ6IFByb2ZpbGVDb250YWN0QWN0aW9uID0ge1xuICAgIGlkOiBcInByb2ZpbGUtY29udGFjdC1hY3Rpb24tZG93bmxvYWRcIixcbiAgICBhY3Rpb25EZXNjcmlwdGlvbjogdHJhbnNsYXRlLnByb2ZpbGUuZG93bmxvYWRfb3V0Zml0LFxuICB9XG5cbiAgLy8gQWRkIGVudHJpZXNcbiAgcHJvZmlsZUNvbnRhY3RBY3Rpb25zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcihwcm9maWxlQWN0aW9uRXhwb3J0KVxuICApXG4gIHByb2ZpbGVDb250YWN0QWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIocHJvZmlsZUFjdGlvbkRvd25sb2FkKVxuICApXG5cbiAgLy8gQWRkIGNsaWNrIGV2ZW50c1xuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChwcm9maWxlQWN0aW9uRXhwb3J0LmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGV4cG9ydFByb2ZpbGUpXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKHByb2ZpbGVBY3Rpb25Eb3dubG9hZC5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkb3dubG9hZFByb2ZpbGUpXG59XG5cbmZ1bmN0aW9uIGV4cG9ydFByb2ZpbGUoKTogdm9pZCB7XG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSGVhZGluZ0VsZW1lbnQ+KFxuICAgIFwiI21haW4tc2VjdGlvbiAuc2VjdGlvbi10aXRsZVwiXG4gIClcblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoU2FjaGEuQXZhdGFyLmF2YXRhcnMpLmZpbHRlcihrZXkgPT5cbiAgICBrZXkuc3RhcnRzV2l0aChcIiNwbGF5ZXJQcm9maWxlQXZhdGFyXCIpXG4gIClcblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgZXhwb3J0T3V0Zml0KGtleSwgdGl0bGU/LnRleHRDb250ZW50Py50cmltKCkpXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgUHVycm9zaG9wU3RhdHVzIH0gZnJvbSBcIi4uL2FwaS9tZXRhXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG4vKiogU2hvd3MgYSBQdXJybydTaG9wIGJ1dHRvbiBpbiB0aGUgbWFpbiBtZW51IHdoZW4gaXQncyBhdmFpbGFibGUuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFB1cnJvU2hvcCgpOiB2b2lkIHtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tYWluLW1lbnUtcHVycm9zaG9wXCIpPy5yZW1vdmUoKVxuXG4gIC8vIEEgYnVnIGluIFdlYlBhY2sgcHJldmVudHMgdXNpbmcgYExvY2FsU3RvcmFnZS5tZXRhPy5wdXJyb3Nob3Auc3RhdHVzYC5cbiAgaWYgKFxuICAgIExvY2FsU3RvcmFnZS5tZXRhID09PSBudWxsIHx8XG4gICAgTG9jYWxTdG9yYWdlLm1ldGEucHVycm9zaG9wLnN0YXR1cyAhPT0gUHVycm9zaG9wU3RhdHVzLmVuYWJsZWRcbiAgKVxuICAgIHJldHVyblxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9tYWluX21lbnVfcHVycm9zaG9wLmh0bWxcIilcbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJtZW51LWlubmVyLWxlZnRcIilcbiAgICA/Lmluc2VydEFkamFjZW50SFRNTChcImFmdGVyYmVnaW5cIiwgdGVtcGxhdGUucmVuZGVyKHt9KSlcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgZ2V0TmFtZSB9IGZyb20gXCIuLi9kb3dubG9hZC1jYW52YXNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9zZXR0aW5nc1wiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGFjY291bnRSaWdodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYWNjb3VudC1yaWdodCBkaXZcIilcbiAgaWYgKCFhY2NvdW50UmlnaHQgfHwgYWNjb3VudFJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIuYWNjb3VudC1lZS1ibG9jXCIpKSByZXR1cm5cblxuICBjb25zdCBzZXR0aW5nc1RlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9zZXR0aW5ncy5odG1sXCIpXG5cbiAgYWNjb3VudFJpZ2h0Lmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHNldHRpbmdzVGVtcGxhdGUucmVuZGVyKHtcbiAgICAgIC4uLihhd2FpdCBMb2NhbFN0b3JhZ2UuZ2V0U2V0dGluZ3MoKSksXG4gICAgICB0cmFuc2xhdGUsXG4gICAgfSlcbiAgKVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZWUtZGVidWctZW5hYmxlZFwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICBMb2NhbFN0b3JhZ2UuZGVidWcgPSAhTG9jYWxTdG9yYWdlLmRlYnVnXG4gICAgcmVsb2FkU2V0dGluZ3MoKVxuICB9KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKFwiZWUtbWluaWdhbWVzLWVuYWJsZWRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBMb2NhbFN0b3JhZ2UubWluaWdhbWVzID0gIUxvY2FsU3RvcmFnZS5taW5pZ2FtZXNcbiAgICAgIHJlbG9hZFNldHRpbmdzKClcbiAgICB9KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKFwiZWUtZXhwbG9yYXRpb25zLWVuYWJsZWRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBMb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25zID0gIUxvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnNcbiAgICAgIHJlbG9hZFNldHRpbmdzKClcbiAgICB9KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKFwiZWUtbWFya2V0LWVuYWJsZWRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBMb2NhbFN0b3JhZ2UubWFya2V0ID0gIUxvY2FsU3RvcmFnZS5tYXJrZXRcbiAgICAgIHJlbG9hZFNldHRpbmdzKClcbiAgICB9KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKFwiZWUtaW1wb3J0XCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaW1wb3J0U2V0dGluZ3MpXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1leHBvcnRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB2b2lkIGV4cG9ydFNldHRpbmdzKCkpXG59XG5cbmZ1bmN0aW9uIHJlbG9hZFNldHRpbmdzKCk6IHZvaWQge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIi5hY2NvdW50LWVlLWJsb2NcIik/LnJlbW92ZSgpXG4gIHZvaWQgbG9hZFNldHRpbmdzKClcbn1cblxuZnVuY3Rpb24gaW1wb3J0U2V0dGluZ3MoKTogdm9pZCB7XG4gIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpXG4gIGlucHV0LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJmaWxlXCIpXG4gIGlucHV0LnNldEF0dHJpYnV0ZShcImFjY2VwdFwiLCBcImFwcGxpY2F0aW9uL2pzb25cIilcbiAgaW5wdXQuY2xpY2soKVxuXG4gIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgaWYgKCFldmVudC50YXJnZXQpIHJldHVyblxuICAgIGNvbnN0IGZpbGVzID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlc1xuICAgIGlmICghZmlsZXMpIHJldHVyblxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXVxuICAgIGlmICghZmlsZSkgcmV0dXJuXG4gICAgdm9pZCBmaWxlLnRleHQoKS50aGVuKGFzeW5jIHZhbHVlID0+IHtcbiAgICAgIGlmICghdmFsdWUpIHJldHVyblxuXG4gICAgICBjb25zdCBwYXJzZWQ6IFNldHRpbmdzID0gSlNPTi5wYXJzZSh2YWx1ZSlcbiAgICAgIGF3YWl0IExvY2FsU3RvcmFnZS5zZXRTZXR0aW5ncyhwYXJzZWQpXG5cbiAgICAgIHJlbG9hZFNldHRpbmdzKClcbiAgICAgICQuZmxhdnJOb3RpZih0cmFuc2xhdGUuYWNjb3VudC5pbXBvcnRlZClcbiAgICB9KVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHBvcnRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaHJlZiA9XG4gICAgXCJkYXRhOnRleHQvanNvbjtjaGFyc2V0PXV0Zi04LFwiICtcbiAgICBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBKU09OLnN0cmluZ2lmeShhd2FpdCBMb2NhbFN0b3JhZ2UuZ2V0U2V0dGluZ3MoKSwgbnVsbCwgMilcbiAgICApXG5cbiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gIGEuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBocmVmKVxuICBhLnNldEF0dHJpYnV0ZShcbiAgICBcImRvd25sb2FkXCIsXG4gICAgYCR7Z2V0TmFtZSgpID8/IFwiZWxkYXJ5YS1lbmhhbmNlbWVudHNcIn0tc2V0dGluZ3MuanNvbmBcbiAgKVxuICBhLmNsaWNrKClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgdG9nZ2xlVGFrZW92ZXIgfSBmcm9tIFwiLi4vdGFrZW92ZXIvYnJhaW5cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFRvcEJhcigpOiB2b2lkIHtcbiAgY29uc3QgaGVhZGVyUmlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhlYWRlci1yaWdodFwiKVxuICBpZiAoIWhlYWRlclJpZ2h0KSByZXR1cm5cblxuICBjb25zdCBoZWFkZXJUYWtlb3ZlciA9IGhlYWRlclJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIjaGVhZGVyLXRha2VvdmVyXCIpXG4gIGlmIChoZWFkZXJUYWtlb3ZlcikgaGVhZGVyVGFrZW92ZXIucmVtb3ZlKClcbiAgZWxzZSBsb2FkTGlua3MoKVxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9oZWFkZXJfdGFrZW92ZXIuaHRtbFwiKVxuICBoZWFkZXJSaWdodC5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJhZnRlcmJlZ2luXCIsXG4gICAgdGVtcGxhdGUucmVuZGVyKHsgdGFrZW92ZXI6IFNlc3Npb25TdG9yYWdlLnRha2VvdmVyLCB0cmFuc2xhdGUgfSlcbiAgKVxuXG4gIGhlYWRlclJpZ2h0XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjaGVhZGVyLXRha2VvdmVyXCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdG9nZ2xlVGFrZW92ZXIpXG59XG5cbmZ1bmN0aW9uIGxvYWRMaW5rcygpOiB2b2lkIHtcbiAgY29uc3QgaGVhZGVyUHJvZmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaGVhZGVyLXByb2ZpbGVcIik/LmZpcnN0Q2hpbGRcbiAgaWYgKGhlYWRlclByb2ZpbGU/LnRleHRDb250ZW50KSB7XG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gICAgYS5ocmVmID0gXCIvcGxheWVyL3Byb2ZpbGVcIlxuICAgIGEuc3R5bGUuY29sb3IgPSBcInZhcigtLXRleHQtY29sb3IpXCJcbiAgICBhLnN0eWxlLmZvbnRGYW1pbHkgPSAnXCJBbGVncmV5YSBTYW5zXCIsIHNhbnMtc2VyaWYnXG4gICAgYS5zdHlsZS5mb250V2VpZ2h0ID0gXCJ1bnNldFwiXG4gICAgYS50ZXh0Q29udGVudCA9IGhlYWRlclByb2ZpbGUudGV4dENvbnRlbnQudHJpbSgpXG5cbiAgICBjb25zdCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIilcbiAgICBwLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWVuZFwiLCBhKVxuXG4gICAgaGVhZGVyUHJvZmlsZS5yZXBsYWNlV2l0aChwKVxuICB9XG5cbiAgY29uc3QgYXZhdGFyVGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2F2YXRhci1tZW51LWNvbnRhaW5lci1vdXRlcj5wXCIpXG4gIGlmIChhdmF0YXJUaXRsZT8udGV4dENvbnRlbnQpXG4gICAgYXZhdGFyVGl0bGUuaW5uZXJIVE1MID0gYDxhIGhyZWY9XCIvcGxheWVyL3Byb2ZpbGVcIiBzdHlsZT1cImNvbG9yOiAjRkZGRkZGOyBmb250LXNpemU6IDIzcHg7IGZvbnQtd2VpZ2h0OiA5MDA7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XCI+JHthdmF0YXJUaXRsZS50ZXh0Q29udGVudC50cmltKCl9PC9hPmBcblxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiI2F2YXRhci1tZW51LWNvbnRhaW5lcj5jYW52YXNcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBwYWdlTG9hZChcIi9wbGF5ZXIvYXBwZWFyYW5jZVwiKSlcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBXaXNobGlzdFNldHRpbmdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL3dpc2hsaXN0X3NldHRpbmdzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRXaXNobGlzdCgpOiB2b2lkIHtcbiAgY29uc3QgbWFya2V0cGxhY2VNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1tZW51XCIpXG4gIGlmICghbWFya2V0cGxhY2VNZW51KSByZXR1cm5cblxuICBpZiAoIW1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yKFwiI3dpc2hsaXN0LWJ1dHRvblwiKSkge1xuICAgIGZvciAoY29uc3QgYSBvZiBtYXJrZXRwbGFjZU1lbnUucXVlcnlTZWxlY3RvckFsbChcImFcIikpIHtcbiAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+XG4gICAgICAgIHBhZ2VMb2FkKGEuaHJlZiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBtYXJrZXRwbGFjZU1lbnUucXVlcnlTZWxlY3RvcihcIiN3aXNobGlzdC1idXR0b25cIik/LnJlbW92ZSgpXG4gIGNvbnN0IHdpc2hsaXN0QnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X2J1dHRvbi5odG1sXCIpXG4gIG1hcmtldHBsYWNlTWVudS5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB3aXNobGlzdEJ1dHRvblRlbXBsYXRlLnJlbmRlcih7IHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgY29uc3Qgd2lzaGxpc3RCdXR0b24gPVxuICAgIG1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yPEhUTUxBbmNob3JFbGVtZW50PihcIiN3aXNobGlzdC1idXR0b25cIilcbiAgd2lzaGxpc3RCdXR0b24/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PlxuICAgIGluc2VydFdpc2hsaXN0KHdpc2hsaXN0QnV0dG9uKVxuICApXG59XG5cbmZ1bmN0aW9uIGluc2VydFdpc2hsaXN0KGJ1dHRvbjogSFRNTEFuY2hvckVsZW1lbnQpOiB2b2lkIHtcbiAgLy8gQXNzaXN0YW5jZVxuICBjb25zdCBhc3Npc3RhbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tYXJrZXRwbGFjZS1hc3Npc3RhbmNlXCIpXG4gIGlmIChhc3Npc3RhbmNlKSBhc3Npc3RhbmNlLmlubmVySFRNTCA9IHRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuYXNzaXN0YW5jZVxuXG4gIC8vIE1lbnVcbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIiNtYXJrZXRwbGFjZS1tZW51IC5hY3RpdmVcIilcbiAgICA/LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIilcbiAgYnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIilcblxuICAvLyBGaWx0ZXJzXG4gIGNvbnN0IGZpbHRlcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLWZpbHRlcnNcIilcbiAgaWYgKGZpbHRlcnMpIGZpbHRlcnMuaW5uZXJIVE1MID0gXCJcIlxuXG4gIC8vIENvbnRlbnRcbiAgY29uc3Qgd2lzaGxpc3RUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvd2lzaGxpc3Rfc2V0dGluZ3MuaHRtbFwiKVxuICBjb25zdCBjb250YWluZXIgPVxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubWFya2V0cGxhY2UtY29udGFpbmVyXCIpID8/XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1hY3RpdmUtYXVjdGlvbnNcIikgPz9cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLWl0ZW1zRm9yU2FsZVwiKVxuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuXG5cbiAgY29uc3Qgd2lzaGxpc3RDb250ZXh0OiBXaXNobGlzdFNldHRpbmdzID0ge1xuICAgIHdpc2hsaXN0OiBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QsXG4gIH1cbiAgY29udGFpbmVyLmlubmVySFRNTCA9IHdpc2hsaXN0VGVtcGxhdGUucmVuZGVyKHtcbiAgICAuLi53aXNobGlzdENvbnRleHQsXG4gICAgdHJhbnNsYXRlLFxuICB9KVxuXG4gIC8vIEJ1dHRvbnNcbiAgZm9yIChjb25zdCB0ciBvZiBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcInRyXCIpKSB7XG4gICAgY29uc3QgaWNvbiA9IHRyLmRhdGFzZXQuaWNvblxuICAgIGlmICghaWNvbikgY29udGludWVcblxuICAgIC8vIFJlc2V0IHN0YXR1c1xuICAgIGNvbnN0IHJlc2V0ID0gdHIucXVlcnlTZWxlY3RvcihcIi5yZXNldC1pdGVtLXN0YXR1c1wiKVxuICAgIGlmIChyZXNldClcbiAgICAgIHJlc2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHJlc2V0U3RhdHVzKGljb24pXG4gICAgICAgIGluc2VydFdpc2hsaXN0KGJ1dHRvbilcbiAgICAgIH0pXG5cbiAgICAvLyBEZWxldGUgaXRlbSBmcm9tIHdpc2hsaXN0XG4gICAgY29uc3QgZGVsZXRlQnV0dG9uID0gdHIucXVlcnlTZWxlY3RvcihcIi5kZWxldGUtd2lzaGxpc3QtaXRlbVwiKVxuICAgIGlmIChkZWxldGVCdXR0b24pXG4gICAgICBkZWxldGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgZGVsZXRlSXRlbShpY29uKVxuICAgICAgICBpbnNlcnRXaXNobGlzdChidXR0b24pXG4gICAgICB9KVxuXG4gICAgLy8gQ2hhbmdlIHByaWNlXG4gICAgY29uc3QgZWRpdFByaWNlID0gdHIucXVlcnlTZWxlY3RvcihcIi5lZGl0LXByaWNlXCIpXG4gICAgaWYgKGVkaXRQcmljZSlcbiAgICAgIGVkaXRQcmljZS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICBcImNsaWNrXCIsXG4gICAgICAgICgpID0+IHZvaWQgY2hhbmdlUHJpY2UoaWNvbikudGhlbigoKSA9PiBpbnNlcnRXaXNobGlzdChidXR0b24pKVxuICAgICAgKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0U3RhdHVzKGljb246IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWNvbiA9PT0gaWNvbilcbiAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgZGVsZXRlIGVudHJ5LmVycm9yXG4gIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IFtcbiAgICAuLi53aXNobGlzdC5zbGljZSh1bmRlZmluZWQsIGluZGV4KSxcbiAgICBlbnRyeSxcbiAgICAuLi53aXNobGlzdC5zbGljZShpbmRleCArIDEsIHVuZGVmaW5lZCksXG4gIF1cbn1cblxuZnVuY3Rpb24gZGVsZXRlSXRlbShpY29uOiBzdHJpbmcpOiB2b2lkIHtcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0LmZpbHRlcihcbiAgICBpdGVtID0+IGl0ZW0uaWNvbiAhPT0gaWNvblxuICApXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoYW5nZVByaWNlKGljb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvY2hhbmdlX3ByaWNlX2ZsYXZyLmh0bWxcIilcblxuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWNvbiA9PT0gaWNvbilcbiAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICQuZmxhdnIoe1xuICAgICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pLFxuICAgICAgZGlhbG9nOiBcInByb21wdFwiLFxuICAgICAgcHJvbXB0OiB7XG4gICAgICAgIHZhbHVlOiBlbnRyeS5wcmljZS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgY2xvc2U6IHtcbiAgICAgICAgICBzdHlsZTogXCJjbG9zZVwiLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNhdmU6IHtcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHNhdmUoaWNvbiwgcmVzb2x2ZSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XG4gICAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJuZXctbGF5b3V0LXBvcHVwXCIpXG5cbiAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIilcbiAgICAgICAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLCAoeyBrZXkgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gXCJFbnRlclwiKSByZXR1cm5cbiAgICAgICAgICAgIHNhdmUoaWNvbiwgcmVzb2x2ZSlcbiAgICAgICAgICB9KVxuICAgICAgfSxcbiAgICB9KVxuICB9KVxufVxuXG5mdW5jdGlvbiBzYXZlKGljb246IHN0cmluZywgcmVzb2x2ZTogKCkgPT4gdm9pZCk6IGJvb2xlYW4ge1xuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWNvbiA9PT0gaWNvbilcbiAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgaWYgKCFlbnRyeSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcHJpY2UgPSBOdW1iZXIoXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIik/LnZhbHVlLnRyaW0oKVxuICApXG4gIGlmICghcHJpY2UgfHwgcHJpY2UgPD0gMCkge1xuICAgICQuZmxhdnJOb3RpZih0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS5pbnZhbGlkX3ByaWNlKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZW50cnkucHJpY2UgPSBwcmljZVxuICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSBbXG4gICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXG4gICAgZW50cnksXG4gICAgLi4ud2lzaGxpc3Quc2xpY2UoaW5kZXggKyAxLCB1bmRlZmluZWQpLFxuICBdXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICQuZmxhdnJOb3RpZihcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4uZW50cnksXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS5jaGFuZ2VkX3ByaWNlKFxuICAgICAgICBlbnRyeS5uYW1lLFxuICAgICAgICBlbnRyeS5wcmljZVxuICAgICAgKSxcbiAgICB9KVxuICApXG5cbiAgcmVzb2x2ZSgpXG4gIHJldHVybiB0cnVlXG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiaW1wb3J0IHsgbG9hZERyZXNzaW5nRXhwZXJpZW5jZSB9IGZyb20gXCIuL2FwcGVhcmFuY2UvZHJlc3NpbmdfZXhwZXJpZW5jZVwiXG5pbXBvcnQgeyBtaWdyYXRlIH0gZnJvbSBcIi4vbWlncmF0ZVwiXG5pbXBvcnQgeyBsb2FkVGFrZW92ZXIgfSBmcm9tIFwiLi90YWtlb3Zlci9icmFpblwiXG5pbXBvcnQgeyBsb2FkQXVjdGlvbnMgfSBmcm9tIFwiLi91aS9hdWN0aW9uc1wiXG5pbXBvcnQgeyBsb2FkQ2Fyb3VzZWwgfSBmcm9tIFwiLi91aS9jYXJvdXNlbFwiXG5pbXBvcnQgeyBsb2FkRmF2b3VyaXRlcyB9IGZyb20gXCIuL3VpL2Zhdm91cml0ZXNcIlxuaW1wb3J0IHsgbG9hZEhvbWVDb250ZW50IH0gZnJvbSBcIi4vdWkvaG9tZV9jb250ZW50XCJcbmltcG9ydCB7IGxvYWRNYWxsIH0gZnJvbSBcIi4vdWkvbWFsbFwiXG5pbXBvcnQgeyBsb2FkTWFya2V0IH0gZnJvbSBcIi4vdWkvbWFya2V0XCJcbmltcG9ydCB7IGxvYWRNZW51IH0gZnJvbSBcIi4vdWkvbWVudVwiXG5pbXBvcnQgeyBsb2FkUGV0IH0gZnJvbSBcIi4vdWkvcGV0XCJcbmltcG9ydCB7IGxvYWRQcm9maWxlIH0gZnJvbSBcIi4vdWkvcHJvZmlsZVwiXG5pbXBvcnQgeyBsb2FkUHVycm9TaG9wIH0gZnJvbSBcIi4vdWkvcHVycm9fc2hvcFwiXG5pbXBvcnQgeyBsb2FkU2V0dGluZ3MgfSBmcm9tIFwiLi91aS9zZXR0aW5nc1wiXG5pbXBvcnQgeyBsb2FkVG9wQmFyIH0gZnJvbSBcIi4vdWkvdG9wX2JhclwiXG5pbXBvcnQgeyBsb2FkV2lzaGxpc3QgfSBmcm9tIFwiLi91aS93aXNobGlzdFwiXG5cbi8vIGxvYWRKUyhcImh0dHBzOi8vdW5wa2cuY29tL2hvZ2FuLmpzL2Rpc3QvdGVtcGxhdGUtMy4wLjIubWluLmpzXCIsIHRydWUpO1xuXG5mdW5jdGlvbiBsb2FkKCk6IHZvaWQge1xuICBsb2FkVUkoKVxuICBsb2FkVGFrZW92ZXIoKVxufVxuXG5mdW5jdGlvbiBsb2FkVUkoKTogdm9pZCB7XG4gIGxvYWRNZW51KClcbiAgbG9hZENhcm91c2VsKClcbiAgbG9hZEhvbWVDb250ZW50KClcbiAgbG9hZEZhdm91cml0ZXMoKVxuICBsb2FkUHJvZmlsZSgpXG4gIGxvYWRQZXQoKVxuICBsb2FkTWFya2V0KClcbiAgbG9hZFdpc2hsaXN0KClcbiAgbG9hZFRvcEJhcigpXG4gIGxvYWRBdWN0aW9ucygpXG4gIGxvYWRQdXJyb1Nob3AoKVxuICBsb2FkTWFsbCgpXG4gIHZvaWQgbG9hZERyZXNzaW5nRXhwZXJpZW5jZSgpXG5cbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgdm9pZCBsb2FkSW5kZXhlZERiKClcbiAgZWxzZSB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4gbG9hZEluZGV4ZWREYigpKVxufVxuXG5mdW5jdGlvbiBsb2FkSW5kZXhlZERiKCk6IHZvaWQge1xuICB2b2lkIGxvYWRTZXR0aW5ncygpXG59XG5cbm5ldyBNdXRhdGlvbk9ic2VydmVyKGxvYWQpLm9ic2VydmUoXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29udGFpbmVyXCIpIGFzIE5vZGUsXG4gIHtcbiAgICBjaGlsZExpc3Q6IHRydWUsXG4gIH1cbilcblxubWlncmF0ZSgpXG5cbmxvYWRVSSgpXG5jb25zb2xlLmxvZyhgJHtHTS5pbmZvLnNjcmlwdC5uYW1lfSB2JHtHTS5pbmZvLnNjcmlwdC52ZXJzaW9ufSBsb2FkZWQuYClcbmxvYWRUYWtlb3ZlcigpXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=