mirror of
https://github.com/mayurankv/Obsidian-Code-Styler.git
synced 2026-07-22 08:10:29 +00:00
19400 lines
3.2 MiB
19400 lines
3.2 MiB
/*
|
||
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||
if you want to view the source, please visit the github repository of this plugin
|
||
*/
|
||
|
||
var __create = Object.create;
|
||
var __defProp = Object.defineProperty;
|
||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||
var __getProtoOf = Object.getPrototypeOf;
|
||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||
var __defNormalProp = (obj, key2, value) => key2 in obj ? __defProp(obj, key2, { enumerable: true, configurable: true, writable: true, value }) : obj[key2] = value;
|
||
var __commonJS = (cb, mod) => function __require() {
|
||
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
||
};
|
||
var __export = (target, all3) => {
|
||
for (var name in all3)
|
||
__defProp(target, name, { get: all3[name], enumerable: true });
|
||
};
|
||
var __copyProps = (to, from, except, desc) => {
|
||
if (from && typeof from === "object" || typeof from === "function") {
|
||
for (let key2 of __getOwnPropNames(from))
|
||
if (!__hasOwnProp.call(to, key2) && key2 !== except)
|
||
__defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable });
|
||
}
|
||
return to;
|
||
};
|
||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
||
// If the importer is in node compatibility mode or this is not an ESM
|
||
// file that has been converted to a CommonJS file using a Babel-
|
||
// compatible transform (i.e. "__esModule" has not been set), then set
|
||
// "default" to the CommonJS "module.exports" for node compatibility.
|
||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
||
mod
|
||
));
|
||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||
var __publicField = (obj, key2, value) => {
|
||
__defNormalProp(obj, typeof key2 !== "symbol" ? key2 + "" : key2, value);
|
||
return value;
|
||
};
|
||
|
||
// node_modules/@simonwep/pickr/dist/pickr.min.js
|
||
var require_pickr_min = __commonJS({
|
||
"node_modules/@simonwep/pickr/dist/pickr.min.js"(exports, module2) {
|
||
!function(t2, e2) {
|
||
"object" == typeof exports && "object" == typeof module2 ? module2.exports = e2() : "function" == typeof define && define.amd ? define([], e2) : "object" == typeof exports ? exports.Pickr = e2() : t2.Pickr = e2();
|
||
}(self, () => (() => {
|
||
"use strict";
|
||
var t2 = { d: (e3, o3) => {
|
||
for (var n3 in o3)
|
||
t2.o(o3, n3) && !t2.o(e3, n3) && Object.defineProperty(e3, n3, { enumerable: true, get: o3[n3] });
|
||
}, o: (t3, e3) => Object.prototype.hasOwnProperty.call(t3, e3), r: (t3) => {
|
||
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t3, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t3, "__esModule", { value: true });
|
||
} }, e2 = {};
|
||
t2.d(e2, { default: () => E2 });
|
||
var o2 = {};
|
||
function n2(t3, e3, o3, n3, i3 = {}) {
|
||
e3 instanceof HTMLCollection || e3 instanceof NodeList ? e3 = Array.from(e3) : Array.isArray(e3) || (e3 = [e3]), Array.isArray(o3) || (o3 = [o3]);
|
||
for (const s4 of e3)
|
||
for (const e4 of o3)
|
||
s4[t3](e4, n3, { capture: false, ...i3 });
|
||
return Array.prototype.slice.call(arguments, 1);
|
||
}
|
||
t2.r(o2), t2.d(o2, { adjustableInputNumbers: () => p3, createElementFromString: () => r2, createFromTemplate: () => a2, eventPath: () => l2, off: () => s3, on: () => i2, resolveElement: () => c2 });
|
||
const i2 = n2.bind(null, "addEventListener"), s3 = n2.bind(null, "removeEventListener");
|
||
function r2(t3) {
|
||
const e3 = document.createElement("div");
|
||
return e3.innerHTML = t3.trim(), e3.firstElementChild;
|
||
}
|
||
function a2(t3) {
|
||
const e3 = (t4, e4) => {
|
||
const o4 = t4.getAttribute(e4);
|
||
return t4.removeAttribute(e4), o4;
|
||
}, o3 = (t4, n3 = {}) => {
|
||
const i3 = e3(t4, ":obj"), s4 = e3(t4, ":ref"), r3 = i3 ? n3[i3] = {} : n3;
|
||
s4 && (n3[s4] = t4);
|
||
for (const n4 of Array.from(t4.children)) {
|
||
const t5 = e3(n4, ":arr"), i4 = o3(n4, t5 ? {} : r3);
|
||
t5 && (r3[t5] || (r3[t5] = [])).push(Object.keys(i4).length ? i4 : n4);
|
||
}
|
||
return n3;
|
||
};
|
||
return o3(r2(t3));
|
||
}
|
||
function l2(t3) {
|
||
let e3 = t3.path || t3.composedPath && t3.composedPath();
|
||
if (e3)
|
||
return e3;
|
||
let o3 = t3.target.parentElement;
|
||
for (e3 = [t3.target, o3]; o3 = o3.parentElement; )
|
||
e3.push(o3);
|
||
return e3.push(document, window), e3;
|
||
}
|
||
function c2(t3) {
|
||
return t3 instanceof Element ? t3 : "string" == typeof t3 ? t3.split(/>>/g).reduce((t4, e3, o3, n3) => (t4 = t4.querySelector(e3), o3 < n3.length - 1 ? t4.shadowRoot : t4), document) : null;
|
||
}
|
||
function p3(t3, e3 = (t4) => t4) {
|
||
function o3(o4) {
|
||
const n3 = [1e-3, 0.01, 0.1][Number(o4.shiftKey || 2 * o4.ctrlKey)] * (o4.deltaY < 0 ? 1 : -1);
|
||
let i3 = 0, s4 = t3.selectionStart;
|
||
t3.value = t3.value.replace(/[\d.]+/g, (t4, o5) => o5 <= s4 && o5 + t4.length >= s4 ? (s4 = o5, e3(Number(t4), n3, i3)) : (i3++, t4)), t3.focus(), t3.setSelectionRange(s4, s4), o4.preventDefault(), t3.dispatchEvent(new Event("input"));
|
||
}
|
||
i2(t3, "focus", () => i2(window, "wheel", o3, { passive: false })), i2(t3, "blur", () => s3(window, "wheel", o3));
|
||
}
|
||
const { min: u2, max: h3, floor: d2, round: m2 } = Math;
|
||
function f2(t3, e3, o3) {
|
||
e3 /= 100, o3 /= 100;
|
||
const n3 = d2(t3 = t3 / 360 * 6), i3 = t3 - n3, s4 = o3 * (1 - e3), r3 = o3 * (1 - i3 * e3), a3 = o3 * (1 - (1 - i3) * e3), l3 = n3 % 6;
|
||
return [255 * [o3, r3, s4, s4, a3, o3][l3], 255 * [a3, o3, o3, r3, s4, s4][l3], 255 * [s4, s4, a3, o3, o3, r3][l3]];
|
||
}
|
||
function v2(t3, e3, o3) {
|
||
const n3 = (2 - (e3 /= 100)) * (o3 /= 100) / 2;
|
||
return 0 !== n3 && (e3 = 1 === n3 ? 0 : n3 < 0.5 ? e3 * o3 / (2 * n3) : e3 * o3 / (2 - 2 * n3)), [t3, 100 * e3, 100 * n3];
|
||
}
|
||
function b2(t3, e3, o3) {
|
||
const n3 = u2(t3 /= 255, e3 /= 255, o3 /= 255), i3 = h3(t3, e3, o3), s4 = i3 - n3;
|
||
let r3, a3;
|
||
if (0 === s4)
|
||
r3 = a3 = 0;
|
||
else {
|
||
a3 = s4 / i3;
|
||
const n4 = ((i3 - t3) / 6 + s4 / 2) / s4, l3 = ((i3 - e3) / 6 + s4 / 2) / s4, c3 = ((i3 - o3) / 6 + s4 / 2) / s4;
|
||
t3 === i3 ? r3 = c3 - l3 : e3 === i3 ? r3 = 1 / 3 + n4 - c3 : o3 === i3 && (r3 = 2 / 3 + l3 - n4), r3 < 0 ? r3 += 1 : r3 > 1 && (r3 -= 1);
|
||
}
|
||
return [360 * r3, 100 * a3, 100 * i3];
|
||
}
|
||
function y2(t3, e3, o3, n3) {
|
||
e3 /= 100, o3 /= 100;
|
||
return [...b2(255 * (1 - u2(1, (t3 /= 100) * (1 - (n3 /= 100)) + n3)), 255 * (1 - u2(1, e3 * (1 - n3) + n3)), 255 * (1 - u2(1, o3 * (1 - n3) + n3)))];
|
||
}
|
||
function g2(t3, e3, o3) {
|
||
e3 /= 100;
|
||
const n3 = 2 * (e3 *= (o3 /= 100) < 0.5 ? o3 : 1 - o3) / (o3 + e3) * 100, i3 = 100 * (o3 + e3);
|
||
return [t3, isNaN(n3) ? 0 : n3, i3];
|
||
}
|
||
function _2(t3) {
|
||
return b2(...t3.match(/.{2}/g).map((t4) => parseInt(t4, 16)));
|
||
}
|
||
function w2(t3) {
|
||
t3 = t3.match(/^[a-zA-Z]+$/) ? function(t4) {
|
||
if ("black" === t4.toLowerCase())
|
||
return "#000";
|
||
const e4 = document.createElement("canvas").getContext("2d");
|
||
return e4.fillStyle = t4, "#000" === e4.fillStyle ? null : e4.fillStyle;
|
||
}(t3) : t3;
|
||
const e3 = { cmyk: /^cmyk\D+([\d.]+)\D+([\d.]+)\D+([\d.]+)\D+([\d.]+)/i, rgba: /^rgba?\D+([\d.]+)(%?)\D+([\d.]+)(%?)\D+([\d.]+)(%?)\D*?(([\d.]+)(%?)|$)/i, hsla: /^hsla?\D+([\d.]+)\D+([\d.]+)\D+([\d.]+)\D*?(([\d.]+)(%?)|$)/i, hsva: /^hsva?\D+([\d.]+)\D+([\d.]+)\D+([\d.]+)\D*?(([\d.]+)(%?)|$)/i, hexa: /^#?(([\dA-Fa-f]{3,4})|([\dA-Fa-f]{6})|([\dA-Fa-f]{8}))$/i }, o3 = (t4) => t4.map((t5) => /^(|\d+)\.\d+|\d+$/.test(t5) ? Number(t5) : void 0);
|
||
let n3;
|
||
t:
|
||
for (const i3 in e3)
|
||
if (n3 = e3[i3].exec(t3))
|
||
switch (i3) {
|
||
case "cmyk": {
|
||
const [, t4, e4, s4, r3] = o3(n3);
|
||
if (t4 > 100 || e4 > 100 || s4 > 100 || r3 > 100)
|
||
break t;
|
||
return { values: y2(t4, e4, s4, r3), type: i3 };
|
||
}
|
||
case "rgba": {
|
||
let [, t4, , e4, , s4, , , r3] = o3(n3);
|
||
if (t4 = "%" === n3[2] ? t4 / 100 * 255 : t4, e4 = "%" === n3[4] ? e4 / 100 * 255 : e4, s4 = "%" === n3[6] ? s4 / 100 * 255 : s4, r3 = "%" === n3[9] ? r3 / 100 : r3, t4 > 255 || e4 > 255 || s4 > 255 || r3 < 0 || r3 > 1)
|
||
break t;
|
||
return { values: [...b2(t4, e4, s4), r3], a: r3, type: i3 };
|
||
}
|
||
case "hexa": {
|
||
let [, t4] = n3;
|
||
4 !== t4.length && 3 !== t4.length || (t4 = t4.split("").map((t5) => t5 + t5).join(""));
|
||
const e4 = t4.substring(0, 6);
|
||
let o4 = t4.substring(6);
|
||
return o4 = o4 ? parseInt(o4, 16) / 255 : void 0, { values: [..._2(e4), o4], a: o4, type: i3 };
|
||
}
|
||
case "hsla": {
|
||
let [, t4, e4, s4, , r3] = o3(n3);
|
||
if (r3 = "%" === n3[6] ? r3 / 100 : r3, t4 > 360 || e4 > 100 || s4 > 100 || r3 < 0 || r3 > 1)
|
||
break t;
|
||
return { values: [...g2(t4, e4, s4), r3], a: r3, type: i3 };
|
||
}
|
||
case "hsva": {
|
||
let [, t4, e4, s4, , r3] = o3(n3);
|
||
if (r3 = "%" === n3[6] ? r3 / 100 : r3, t4 > 360 || e4 > 100 || s4 > 100 || r3 < 0 || r3 > 1)
|
||
break t;
|
||
return { values: [t4, e4, s4, r3], a: r3, type: i3 };
|
||
}
|
||
}
|
||
return { values: null, type: null };
|
||
}
|
||
function A2(t3 = 0, e3 = 0, o3 = 0, n3 = 1) {
|
||
const i3 = (t4, e4) => (o4 = -1) => e4(~o4 ? t4.map((t5) => Number(t5.toFixed(o4))) : t4), s4 = { h: t3, s: e3, v: o3, a: n3, toHSVA() {
|
||
const t4 = [s4.h, s4.s, s4.v, s4.a];
|
||
return t4.toString = i3(t4, (t5) => `hsva(${t5[0]}, ${t5[1]}%, ${t5[2]}%, ${s4.a})`), t4;
|
||
}, toHSLA() {
|
||
const t4 = [...v2(s4.h, s4.s, s4.v), s4.a];
|
||
return t4.toString = i3(t4, (t5) => `hsla(${t5[0]}, ${t5[1]}%, ${t5[2]}%, ${s4.a})`), t4;
|
||
}, toRGBA() {
|
||
const t4 = [...f2(s4.h, s4.s, s4.v), s4.a];
|
||
return t4.toString = i3(t4, (t5) => `rgba(${t5[0]}, ${t5[1]}, ${t5[2]}, ${s4.a})`), t4;
|
||
}, toCMYK() {
|
||
const t4 = function(t5, e4, o4) {
|
||
const n4 = f2(t5, e4, o4), i4 = n4[0] / 255, s5 = n4[1] / 255, r3 = n4[2] / 255, a3 = u2(1 - i4, 1 - s5, 1 - r3);
|
||
return [100 * (1 === a3 ? 0 : (1 - i4 - a3) / (1 - a3)), 100 * (1 === a3 ? 0 : (1 - s5 - a3) / (1 - a3)), 100 * (1 === a3 ? 0 : (1 - r3 - a3) / (1 - a3)), 100 * a3];
|
||
}(s4.h, s4.s, s4.v);
|
||
return t4.toString = i3(t4, (t5) => `cmyk(${t5[0]}%, ${t5[1]}%, ${t5[2]}%, ${t5[3]}%)`), t4;
|
||
}, toHEXA() {
|
||
const t4 = function(t5, e5, o4) {
|
||
return f2(t5, e5, o4).map((t6) => m2(t6).toString(16).padStart(2, "0"));
|
||
}(s4.h, s4.s, s4.v), e4 = s4.a >= 1 ? "" : Number((255 * s4.a).toFixed(0)).toString(16).toUpperCase().padStart(2, "0");
|
||
return e4 && t4.push(e4), t4.toString = () => `#${t4.join("").toUpperCase()}`, t4;
|
||
}, clone: () => A2(s4.h, s4.s, s4.v, s4.a) };
|
||
return s4;
|
||
}
|
||
const $3 = (t3) => Math.max(Math.min(t3, 1), 0);
|
||
function C2(t3) {
|
||
const e3 = { options: Object.assign({ lock: null, onchange: () => 0, onstop: () => 0 }, t3), _keyboard(t4) {
|
||
const { options: o4 } = e3, { type: n4, key: i3 } = t4;
|
||
if (document.activeElement === o4.wrapper) {
|
||
const { lock: o5 } = e3.options, s4 = "ArrowUp" === i3, r4 = "ArrowRight" === i3, a3 = "ArrowDown" === i3, l3 = "ArrowLeft" === i3;
|
||
if ("keydown" === n4 && (s4 || r4 || a3 || l3)) {
|
||
let n5 = 0, i4 = 0;
|
||
"v" === o5 ? n5 = s4 || r4 ? 1 : -1 : "h" === o5 ? n5 = s4 || r4 ? -1 : 1 : (i4 = s4 ? -1 : a3 ? 1 : 0, n5 = l3 ? -1 : r4 ? 1 : 0), e3.update($3(e3.cache.x + 0.01 * n5), $3(e3.cache.y + 0.01 * i4)), t4.preventDefault();
|
||
} else
|
||
i3.startsWith("Arrow") && (e3.options.onstop(), t4.preventDefault());
|
||
}
|
||
}, _tapstart(t4) {
|
||
i2(document, ["mouseup", "touchend", "touchcancel"], e3._tapstop), i2(document, ["mousemove", "touchmove"], e3._tapmove), t4.cancelable && t4.preventDefault(), e3._tapmove(t4);
|
||
}, _tapmove(t4) {
|
||
const { options: o4, cache: n4 } = e3, { lock: i3, element: s4, wrapper: r4 } = o4, a3 = r4.getBoundingClientRect();
|
||
let l3 = 0, c3 = 0;
|
||
if (t4) {
|
||
const e4 = t4 && t4.touches && t4.touches[0];
|
||
l3 = t4 ? (e4 || t4).clientX : 0, c3 = t4 ? (e4 || t4).clientY : 0, l3 < a3.left ? l3 = a3.left : l3 > a3.left + a3.width && (l3 = a3.left + a3.width), c3 < a3.top ? c3 = a3.top : c3 > a3.top + a3.height && (c3 = a3.top + a3.height), l3 -= a3.left, c3 -= a3.top;
|
||
} else
|
||
n4 && (l3 = n4.x * a3.width, c3 = n4.y * a3.height);
|
||
"h" !== i3 && (s4.style.left = `calc(${l3 / a3.width * 100}% - ${s4.offsetWidth / 2}px)`), "v" !== i3 && (s4.style.top = `calc(${c3 / a3.height * 100}% - ${s4.offsetHeight / 2}px)`), e3.cache = { x: l3 / a3.width, y: c3 / a3.height };
|
||
const p4 = $3(l3 / a3.width), u3 = $3(c3 / a3.height);
|
||
switch (i3) {
|
||
case "v":
|
||
return o4.onchange(p4);
|
||
case "h":
|
||
return o4.onchange(u3);
|
||
default:
|
||
return o4.onchange(p4, u3);
|
||
}
|
||
}, _tapstop() {
|
||
e3.options.onstop(), s3(document, ["mouseup", "touchend", "touchcancel"], e3._tapstop), s3(document, ["mousemove", "touchmove"], e3._tapmove);
|
||
}, trigger() {
|
||
e3._tapmove();
|
||
}, update(t4 = 0, o4 = 0) {
|
||
const { left: n4, top: i3, width: s4, height: r4 } = e3.options.wrapper.getBoundingClientRect();
|
||
"h" === e3.options.lock && (o4 = t4), e3._tapmove({ clientX: n4 + s4 * t4, clientY: i3 + r4 * o4 });
|
||
}, destroy() {
|
||
const { options: t4, _tapstart: o4, _keyboard: n4 } = e3;
|
||
s3(document, ["keydown", "keyup"], n4), s3([t4.wrapper, t4.element], "mousedown", o4), s3([t4.wrapper, t4.element], "touchstart", o4, { passive: false });
|
||
} }, { options: o3, _tapstart: n3, _keyboard: r3 } = e3;
|
||
return i2([o3.wrapper, o3.element], "mousedown", n3), i2([o3.wrapper, o3.element], "touchstart", n3, { passive: false }), i2(document, ["keydown", "keyup"], r3), e3;
|
||
}
|
||
function k2(t3 = {}) {
|
||
t3 = Object.assign({ onchange: () => 0, className: "", elements: [] }, t3);
|
||
const e3 = i2(t3.elements, "click", (e4) => {
|
||
t3.elements.forEach((o3) => o3.classList[e4.target === o3 ? "add" : "remove"](t3.className)), t3.onchange(e4), e4.stopPropagation();
|
||
});
|
||
return { destroy: () => s3(...e3) };
|
||
}
|
||
const S2 = { variantFlipOrder: { start: "sme", middle: "mse", end: "ems" }, positionFlipOrder: { top: "tbrl", right: "rltb", bottom: "btrl", left: "lrbt" }, position: "bottom", margin: 8, padding: 0 }, O2 = (t3, e3, o3) => {
|
||
const n3 = "object" != typeof t3 || t3 instanceof HTMLElement ? { reference: t3, popper: e3, ...o3 } : t3;
|
||
return { update(t4 = n3) {
|
||
const { reference: e4, popper: o4 } = Object.assign(n3, t4);
|
||
if (!o4 || !e4)
|
||
throw new Error("Popper- or reference-element missing.");
|
||
return ((t5, e5, o5) => {
|
||
const { container: n4, arrow: i3, margin: s4, padding: r3, position: a3, variantFlipOrder: l3, positionFlipOrder: c3 } = { container: document.documentElement.getBoundingClientRect(), ...S2, ...o5 }, { left: p4, top: u3 } = e5.style;
|
||
e5.style.left = "0", e5.style.top = "0";
|
||
const h4 = t5.getBoundingClientRect(), d3 = e5.getBoundingClientRect(), m3 = { t: h4.top - d3.height - s4, b: h4.bottom + s4, r: h4.right + s4, l: h4.left - d3.width - s4 }, f3 = { vs: h4.left, vm: h4.left + h4.width / 2 - d3.width / 2, ve: h4.left + h4.width - d3.width, hs: h4.top, hm: h4.bottom - h4.height / 2 - d3.height / 2, he: h4.bottom - d3.height }, [v3, b3 = "middle"] = a3.split("-"), y3 = c3[v3], g3 = l3[b3], { top: _3, left: w3, bottom: A3, right: $4 } = n4;
|
||
for (const t6 of y3) {
|
||
const o6 = "t" === t6 || "b" === t6;
|
||
let n5 = m3[t6];
|
||
const [s5, a4] = o6 ? ["top", "left"] : ["left", "top"], [l4, c4] = o6 ? [d3.height, d3.width] : [d3.width, d3.height], [p5, u4] = o6 ? [A3, $4] : [$4, A3], [v4, b4] = o6 ? [_3, w3] : [w3, _3];
|
||
if (!(n5 < v4 || n5 + l4 + r3 > p5))
|
||
for (const p6 of g3) {
|
||
let m4 = f3[(o6 ? "v" : "h") + p6];
|
||
if (!(m4 < b4 || m4 + c4 + r3 > u4)) {
|
||
if (m4 -= d3[a4], n5 -= d3[s5], e5.style[a4] = `${m4}px`, e5.style[s5] = `${n5}px`, i3) {
|
||
const t7 = o6 ? h4.width / 2 : h4.height / 2, e6 = 2 * t7 < c4 ? h4[a4] + t7 : m4 + c4 / 2;
|
||
n5 < h4[s5] && (n5 += l4), i3.style[a4] = `${e6}px`, i3.style[s5] = `${n5}px`;
|
||
}
|
||
return t6 + p6;
|
||
}
|
||
}
|
||
}
|
||
return e5.style.left = p4, e5.style.top = u3, null;
|
||
})(e4, o4, n3);
|
||
} };
|
||
};
|
||
const _E = class _E {
|
||
constructor(t3) {
|
||
__publicField(this, "_initializingActive", true);
|
||
__publicField(this, "_recalc", true);
|
||
__publicField(this, "_nanopop", null);
|
||
__publicField(this, "_root", null);
|
||
__publicField(this, "_color", A2());
|
||
__publicField(this, "_lastColor", A2());
|
||
__publicField(this, "_swatchColors", []);
|
||
__publicField(this, "_setupAnimationFrame", null);
|
||
__publicField(this, "_eventListener", { init: [], save: [], hide: [], show: [], clear: [], change: [], changestop: [], cancel: [], swatchselect: [] });
|
||
this.options = t3 = Object.assign({ ..._E.DEFAULT_OPTIONS }, t3);
|
||
const { swatches: e3, components: o3, theme: n3, sliders: i3, lockOpacity: s4, padding: r3 } = t3;
|
||
["nano", "monolith"].includes(n3) && !i3 && (t3.sliders = "h"), o3.interaction || (o3.interaction = {});
|
||
const { preview: a3, opacity: l3, hue: c3, palette: p4 } = o3;
|
||
o3.opacity = !s4 && l3, o3.palette = p4 || a3 || l3 || c3, this._preBuild(), this._buildComponents(), this._bindEvents(), this._finalBuild(), e3 && e3.length && e3.forEach((t4) => this.addSwatch(t4));
|
||
const { button: u3, app: h4 } = this._root;
|
||
this._nanopop = O2(u3, h4, { margin: r3 }), u3.setAttribute("role", "button"), u3.setAttribute("aria-label", this._t("btn:toggle"));
|
||
const d3 = this;
|
||
this._setupAnimationFrame = requestAnimationFrame(function e4() {
|
||
if (!h4.offsetWidth)
|
||
return requestAnimationFrame(e4);
|
||
d3.setColor(t3.default), d3._rePositioningPicker(), t3.defaultRepresentation && (d3._representation = t3.defaultRepresentation, d3.setColorRepresentation(d3._representation)), t3.showAlways && d3.show(), d3._initializingActive = false, d3._emit("init");
|
||
});
|
||
}
|
||
_preBuild() {
|
||
const { options: t3 } = this;
|
||
for (const e3 of ["el", "container"])
|
||
t3[e3] = c2(t3[e3]);
|
||
this._root = ((t4) => {
|
||
const { components: e3, useAsButton: o3, inline: n3, appClass: i3, theme: s4, lockOpacity: r3 } = t4.options, l3 = (t5) => t5 ? "" : 'style="display:none" hidden', c3 = (e4) => t4._t(e4), p4 = a2(`
|
||
<div :ref="root" class="pickr">
|
||
|
||
${o3 ? "" : '<button type="button" :ref="button" class="pcr-button"></button>'}
|
||
|
||
<div :ref="app" class="pcr-app ${i3 || ""}" data-theme="${s4}" ${n3 ? 'style="position: unset"' : ""} aria-label="${c3("ui:dialog")}" role="window">
|
||
<div class="pcr-selection" ${l3(e3.palette)}>
|
||
<div :obj="preview" class="pcr-color-preview" ${l3(e3.preview)}>
|
||
<button type="button" :ref="lastColor" class="pcr-last-color" aria-label="${c3("btn:last-color")}"></button>
|
||
<div :ref="currentColor" class="pcr-current-color"></div>
|
||
</div>
|
||
|
||
<div :obj="palette" class="pcr-color-palette">
|
||
<div :ref="picker" class="pcr-picker"></div>
|
||
<div :ref="palette" class="pcr-palette" tabindex="0" aria-label="${c3("aria:palette")}" role="listbox"></div>
|
||
</div>
|
||
|
||
<div :obj="hue" class="pcr-color-chooser" ${l3(e3.hue)}>
|
||
<div :ref="picker" class="pcr-picker"></div>
|
||
<div :ref="slider" class="pcr-hue pcr-slider" tabindex="0" aria-label="${c3("aria:hue")}" role="slider"></div>
|
||
</div>
|
||
|
||
<div :obj="opacity" class="pcr-color-opacity" ${l3(e3.opacity)}>
|
||
<div :ref="picker" class="pcr-picker"></div>
|
||
<div :ref="slider" class="pcr-opacity pcr-slider" tabindex="0" aria-label="${c3("aria:opacity")}" role="slider"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="pcr-swatches ${e3.palette ? "" : "pcr-last"}" :ref="swatches"></div>
|
||
|
||
<div :obj="interaction" class="pcr-interaction" ${l3(Object.keys(e3.interaction).length)}>
|
||
<input :ref="result" class="pcr-result" type="text" spellcheck="false" ${l3(e3.interaction.input)} aria-label="${c3("aria:input")}">
|
||
|
||
<input :arr="options" class="pcr-type" data-type="HEXA" value="${r3 ? "HEX" : "HEXA"}" type="button" ${l3(e3.interaction.hex)}>
|
||
<input :arr="options" class="pcr-type" data-type="RGBA" value="${r3 ? "RGB" : "RGBA"}" type="button" ${l3(e3.interaction.rgba)}>
|
||
<input :arr="options" class="pcr-type" data-type="HSLA" value="${r3 ? "HSL" : "HSLA"}" type="button" ${l3(e3.interaction.hsla)}>
|
||
<input :arr="options" class="pcr-type" data-type="HSVA" value="${r3 ? "HSV" : "HSVA"}" type="button" ${l3(e3.interaction.hsva)}>
|
||
<input :arr="options" class="pcr-type" data-type="CMYK" value="CMYK" type="button" ${l3(e3.interaction.cmyk)}>
|
||
|
||
<input :ref="save" class="pcr-save" value="${c3("btn:save")}" type="button" ${l3(e3.interaction.save)} aria-label="${c3("aria:btn:save")}">
|
||
<input :ref="cancel" class="pcr-cancel" value="${c3("btn:cancel")}" type="button" ${l3(e3.interaction.cancel)} aria-label="${c3("aria:btn:cancel")}">
|
||
<input :ref="clear" class="pcr-clear" value="${c3("btn:clear")}" type="button" ${l3(e3.interaction.clear)} aria-label="${c3("aria:btn:clear")}">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
`), u3 = p4.interaction;
|
||
return u3.options.find((t5) => !t5.hidden && !t5.classList.add("active")), u3.type = () => u3.options.find((t5) => t5.classList.contains("active")), p4;
|
||
})(this), t3.useAsButton && (this._root.button = t3.el), t3.container.appendChild(this._root.root);
|
||
}
|
||
_finalBuild() {
|
||
const t3 = this.options, e3 = this._root;
|
||
if (t3.container.removeChild(e3.root), t3.inline) {
|
||
const o3 = t3.el.parentElement;
|
||
t3.el.nextSibling ? o3.insertBefore(e3.app, t3.el.nextSibling) : o3.appendChild(e3.app);
|
||
} else
|
||
t3.container.appendChild(e3.app);
|
||
t3.useAsButton ? t3.inline && t3.el.remove() : t3.el.parentNode.replaceChild(e3.root, t3.el), t3.disabled && this.disable(), t3.comparison || (e3.button.style.transition = "none", t3.useAsButton || (e3.preview.lastColor.style.transition = "none")), this.hide();
|
||
}
|
||
_buildComponents() {
|
||
const t3 = this, e3 = this.options.components, o3 = (t3.options.sliders || "v").repeat(2), [n3, i3] = o3.match(/^[vh]+$/g) ? o3 : [], s4 = () => this._color || (this._color = this._lastColor.clone()), r3 = { palette: C2({ element: t3._root.palette.picker, wrapper: t3._root.palette.palette, onstop: () => t3._emit("changestop", "slider", t3), onchange(o4, n4) {
|
||
if (!e3.palette)
|
||
return;
|
||
const i4 = s4(), { _root: r4, options: a3 } = t3, { lastColor: l3, currentColor: c3 } = r4.preview;
|
||
t3._recalc && (i4.s = 100 * o4, i4.v = 100 - 100 * n4, i4.v < 0 && (i4.v = 0), t3._updateOutput("slider"));
|
||
const p4 = i4.toRGBA().toString(0);
|
||
this.element.style.background = p4, this.wrapper.style.background = `
|
||
linear-gradient(to top, rgba(0, 0, 0, ${i4.a}), transparent),
|
||
linear-gradient(to left, hsla(${i4.h}, 100%, 50%, ${i4.a}), rgba(255, 255, 255, ${i4.a}))
|
||
`, a3.comparison ? a3.useAsButton || t3._lastColor || l3.style.setProperty("--pcr-color", p4) : (r4.button.style.setProperty("--pcr-color", p4), r4.button.classList.remove("clear"));
|
||
const u3 = i4.toHEXA().toString();
|
||
for (const { el: e4, color: o5 } of t3._swatchColors)
|
||
e4.classList[u3 === o5.toHEXA().toString() ? "add" : "remove"]("pcr-active");
|
||
c3.style.setProperty("--pcr-color", p4);
|
||
} }), hue: C2({ lock: "v" === i3 ? "h" : "v", element: t3._root.hue.picker, wrapper: t3._root.hue.slider, onstop: () => t3._emit("changestop", "slider", t3), onchange(o4) {
|
||
if (!e3.hue || !e3.palette)
|
||
return;
|
||
const n4 = s4();
|
||
t3._recalc && (n4.h = 360 * o4), this.element.style.backgroundColor = `hsl(${n4.h}, 100%, 50%)`, r3.palette.trigger();
|
||
} }), opacity: C2({ lock: "v" === n3 ? "h" : "v", element: t3._root.opacity.picker, wrapper: t3._root.opacity.slider, onstop: () => t3._emit("changestop", "slider", t3), onchange(o4) {
|
||
if (!e3.opacity || !e3.palette)
|
||
return;
|
||
const n4 = s4();
|
||
t3._recalc && (n4.a = Math.round(100 * o4) / 100), this.element.style.background = `rgba(0, 0, 0, ${n4.a})`, r3.palette.trigger();
|
||
} }), selectable: k2({ elements: t3._root.interaction.options, className: "active", onchange(e4) {
|
||
t3._representation = e4.target.getAttribute("data-type").toUpperCase(), t3._recalc && t3._updateOutput("swatch");
|
||
} }) };
|
||
this._components = r3;
|
||
}
|
||
_bindEvents() {
|
||
const { _root: t3, options: e3 } = this, o3 = [i2(t3.interaction.clear, "click", () => this._clearColor()), i2([t3.interaction.cancel, t3.preview.lastColor], "click", () => {
|
||
this.setHSVA(...(this._lastColor || this._color).toHSVA(), true), this._emit("cancel");
|
||
}), i2(t3.interaction.save, "click", () => {
|
||
!this.applyColor() && !e3.showAlways && this.hide();
|
||
}), i2(t3.interaction.result, ["keyup", "input"], (t4) => {
|
||
this.setColor(t4.target.value, true) && !this._initializingActive && (this._emit("change", this._color, "input", this), this._emit("changestop", "input", this)), t4.stopImmediatePropagation();
|
||
}), i2(t3.interaction.result, ["focus", "blur"], (t4) => {
|
||
this._recalc = "blur" === t4.type, this._recalc && this._updateOutput(null);
|
||
}), i2([t3.palette.palette, t3.palette.picker, t3.hue.slider, t3.hue.picker, t3.opacity.slider, t3.opacity.picker], ["mousedown", "touchstart"], () => this._recalc = true, { passive: true })];
|
||
if (!e3.showAlways) {
|
||
const n3 = e3.closeWithKey;
|
||
o3.push(i2(t3.button, "click", () => this.isOpen() ? this.hide() : this.show()), i2(document, "keyup", (t4) => this.isOpen() && (t4.key === n3 || t4.code === n3) && this.hide()), i2(document, ["touchstart", "mousedown"], (e4) => {
|
||
this.isOpen() && !l2(e4).some((e5) => e5 === t3.app || e5 === t3.button) && this.hide();
|
||
}, { capture: true }));
|
||
}
|
||
if (e3.adjustableNumbers) {
|
||
const e4 = { rgba: [255, 255, 255, 1], hsva: [360, 100, 100, 1], hsla: [360, 100, 100, 1], cmyk: [100, 100, 100, 100] };
|
||
p3(t3.interaction.result, (t4, o4, n3) => {
|
||
const i3 = e4[this.getColorRepresentation().toLowerCase()];
|
||
if (i3) {
|
||
const e5 = i3[n3], s4 = t4 + (e5 >= 100 ? 1e3 * o4 : o4);
|
||
return s4 <= 0 ? 0 : Number((s4 < e5 ? s4 : e5).toPrecision(3));
|
||
}
|
||
return t4;
|
||
});
|
||
}
|
||
if (e3.autoReposition && !e3.inline) {
|
||
let t4 = null;
|
||
const n3 = this;
|
||
o3.push(i2(window, ["scroll", "resize"], () => {
|
||
n3.isOpen() && (e3.closeOnScroll && n3.hide(), null === t4 ? (t4 = setTimeout(() => t4 = null, 100), requestAnimationFrame(function e4() {
|
||
n3._rePositioningPicker(), null !== t4 && requestAnimationFrame(e4);
|
||
})) : (clearTimeout(t4), t4 = setTimeout(() => t4 = null, 100)));
|
||
}, { capture: true }));
|
||
}
|
||
this._eventBindings = o3;
|
||
}
|
||
_rePositioningPicker() {
|
||
const { options: t3 } = this;
|
||
if (!t3.inline) {
|
||
if (!this._nanopop.update({ container: document.body.getBoundingClientRect(), position: t3.position })) {
|
||
const t4 = this._root.app, e3 = t4.getBoundingClientRect();
|
||
t4.style.top = (window.innerHeight - e3.height) / 2 + "px", t4.style.left = (window.innerWidth - e3.width) / 2 + "px";
|
||
}
|
||
}
|
||
}
|
||
_updateOutput(t3) {
|
||
const { _root: e3, _color: o3, options: n3 } = this;
|
||
if (e3.interaction.type()) {
|
||
const t4 = `to${e3.interaction.type().getAttribute("data-type")}`;
|
||
e3.interaction.result.value = "function" == typeof o3[t4] ? o3[t4]().toString(n3.outputPrecision) : "";
|
||
}
|
||
!this._initializingActive && this._recalc && this._emit("change", o3, t3, this);
|
||
}
|
||
_clearColor(t3 = false) {
|
||
const { _root: e3, options: o3 } = this;
|
||
o3.useAsButton || e3.button.style.setProperty("--pcr-color", "rgba(0, 0, 0, 0.15)"), e3.button.classList.add("clear"), o3.showAlways || this.hide(), this._lastColor = null, this._initializingActive || t3 || (this._emit("save", null), this._emit("clear"));
|
||
}
|
||
_parseLocalColor(t3) {
|
||
const { values: e3, type: o3, a: n3 } = w2(t3), { lockOpacity: i3 } = this.options, s4 = void 0 !== n3 && 1 !== n3;
|
||
return e3 && 3 === e3.length && (e3[3] = void 0), { values: !e3 || i3 && s4 ? null : e3, type: o3 };
|
||
}
|
||
_t(t3) {
|
||
return this.options.i18n[t3] || _E.I18N_DEFAULTS[t3];
|
||
}
|
||
_emit(t3, ...e3) {
|
||
this._eventListener[t3].forEach((t4) => t4(...e3, this));
|
||
}
|
||
on(t3, e3) {
|
||
return this._eventListener[t3].push(e3), this;
|
||
}
|
||
off(t3, e3) {
|
||
const o3 = this._eventListener[t3] || [], n3 = o3.indexOf(e3);
|
||
return ~n3 && o3.splice(n3, 1), this;
|
||
}
|
||
addSwatch(t3) {
|
||
const { values: e3 } = this._parseLocalColor(t3);
|
||
if (e3) {
|
||
const { _swatchColors: t4, _root: o3 } = this, n3 = A2(...e3), s4 = r2(`<button type="button" style="--pcr-color: ${n3.toRGBA().toString(0)}" aria-label="${this._t("btn:swatch")}"/>`);
|
||
return o3.swatches.appendChild(s4), t4.push({ el: s4, color: n3 }), this._eventBindings.push(i2(s4, "click", () => {
|
||
this.setHSVA(...n3.toHSVA(), true), this._emit("swatchselect", n3), this._emit("change", n3, "swatch", this);
|
||
})), true;
|
||
}
|
||
return false;
|
||
}
|
||
removeSwatch(t3) {
|
||
const e3 = this._swatchColors[t3];
|
||
if (e3) {
|
||
const { el: o3 } = e3;
|
||
return this._root.swatches.removeChild(o3), this._swatchColors.splice(t3, 1), true;
|
||
}
|
||
return false;
|
||
}
|
||
applyColor(t3 = false) {
|
||
const { preview: e3, button: o3 } = this._root, n3 = this._color.toRGBA().toString(0);
|
||
return e3.lastColor.style.setProperty("--pcr-color", n3), this.options.useAsButton || o3.style.setProperty("--pcr-color", n3), o3.classList.remove("clear"), this._lastColor = this._color.clone(), this._initializingActive || t3 || this._emit("save", this._color), this;
|
||
}
|
||
destroy() {
|
||
cancelAnimationFrame(this._setupAnimationFrame), this._eventBindings.forEach((t3) => s3(...t3)), Object.keys(this._components).forEach((t3) => this._components[t3].destroy());
|
||
}
|
||
destroyAndRemove() {
|
||
this.destroy();
|
||
const { root: t3, app: e3 } = this._root;
|
||
t3.parentElement && t3.parentElement.removeChild(t3), e3.parentElement.removeChild(e3), Object.keys(this).forEach((t4) => this[t4] = null);
|
||
}
|
||
hide() {
|
||
return !!this.isOpen() && (this._root.app.classList.remove("visible"), this._emit("hide"), true);
|
||
}
|
||
show() {
|
||
return !this.options.disabled && !this.isOpen() && (this._root.app.classList.add("visible"), this._rePositioningPicker(), this._emit("show", this._color), this);
|
||
}
|
||
isOpen() {
|
||
return this._root.app.classList.contains("visible");
|
||
}
|
||
setHSVA(t3 = 360, e3 = 0, o3 = 0, n3 = 1, i3 = false) {
|
||
const s4 = this._recalc;
|
||
if (this._recalc = false, t3 < 0 || t3 > 360 || e3 < 0 || e3 > 100 || o3 < 0 || o3 > 100 || n3 < 0 || n3 > 1)
|
||
return false;
|
||
this._color = A2(t3, e3, o3, n3);
|
||
const { hue: r3, opacity: a3, palette: l3 } = this._components;
|
||
return r3.update(t3 / 360), a3.update(n3), l3.update(e3 / 100, 1 - o3 / 100), i3 || this.applyColor(), s4 && this._updateOutput(), this._recalc = s4, true;
|
||
}
|
||
setColor(t3, e3 = false) {
|
||
if (null === t3)
|
||
return this._clearColor(e3), true;
|
||
const { values: o3, type: n3 } = this._parseLocalColor(t3);
|
||
if (o3) {
|
||
const t4 = n3.toUpperCase(), { options: i3 } = this._root.interaction, s4 = i3.find((e4) => e4.getAttribute("data-type") === t4);
|
||
if (s4 && !s4.hidden)
|
||
for (const t5 of i3)
|
||
t5.classList[t5 === s4 ? "add" : "remove"]("active");
|
||
return !!this.setHSVA(...o3, e3) && this.setColorRepresentation(t4);
|
||
}
|
||
return false;
|
||
}
|
||
setColorRepresentation(t3) {
|
||
return t3 = t3.toUpperCase(), !!this._root.interaction.options.find((e3) => e3.getAttribute("data-type").startsWith(t3) && !e3.click());
|
||
}
|
||
getColorRepresentation() {
|
||
return this._representation;
|
||
}
|
||
getColor() {
|
||
return this._color;
|
||
}
|
||
getSelectedColor() {
|
||
return this._lastColor;
|
||
}
|
||
getRoot() {
|
||
return this._root;
|
||
}
|
||
disable() {
|
||
return this.hide(), this.options.disabled = true, this._root.button.classList.add("disabled"), this;
|
||
}
|
||
enable() {
|
||
return this.options.disabled = false, this._root.button.classList.remove("disabled"), this;
|
||
}
|
||
};
|
||
__publicField(_E, "utils", o2);
|
||
__publicField(_E, "version", "1.9.0");
|
||
__publicField(_E, "I18N_DEFAULTS", { "ui:dialog": "color picker dialog", "btn:toggle": "toggle color picker dialog", "btn:swatch": "color swatch", "btn:last-color": "use previous color", "btn:save": "Save", "btn:cancel": "Cancel", "btn:clear": "Clear", "aria:btn:save": "save and close", "aria:btn:cancel": "cancel and close", "aria:btn:clear": "clear and close", "aria:input": "color input field", "aria:palette": "color selection area", "aria:hue": "hue selection slider", "aria:opacity": "selection slider" });
|
||
__publicField(_E, "DEFAULT_OPTIONS", { appClass: null, theme: "classic", useAsButton: false, padding: 8, disabled: false, comparison: true, closeOnScroll: false, outputPrecision: 0, lockOpacity: false, autoReposition: true, container: "body", components: { interaction: {} }, i18n: {}, swatches: null, inline: false, sliders: null, default: "#42445a", defaultRepresentation: null, position: "bottom-middle", adjustableNumbers: true, showAlways: false, closeWithKey: "Escape" });
|
||
__publicField(_E, "create", (t3) => new _E(t3));
|
||
let E2 = _E;
|
||
return e2 = e2.default;
|
||
})());
|
||
}
|
||
});
|
||
|
||
// node_modules/json5/dist/index.js
|
||
var require_dist = __commonJS({
|
||
"node_modules/json5/dist/index.js"(exports, module2) {
|
||
(function(global, factory) {
|
||
typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.JSON5 = factory();
|
||
})(exports, function() {
|
||
"use strict";
|
||
function createCommonjsModule(fn, module3) {
|
||
return module3 = { exports: {} }, fn(module3, module3.exports), module3.exports;
|
||
}
|
||
var _global = createCommonjsModule(function(module3) {
|
||
var global = module3.exports = typeof window != "undefined" && window.Math == Math ? window : typeof self != "undefined" && self.Math == Math ? self : Function("return this")();
|
||
if (typeof __g == "number") {
|
||
__g = global;
|
||
}
|
||
});
|
||
var _core = createCommonjsModule(function(module3) {
|
||
var core2 = module3.exports = { version: "2.6.5" };
|
||
if (typeof __e == "number") {
|
||
__e = core2;
|
||
}
|
||
});
|
||
var _core_1 = _core.version;
|
||
var _isObject = function(it2) {
|
||
return typeof it2 === "object" ? it2 !== null : typeof it2 === "function";
|
||
};
|
||
var _anObject = function(it2) {
|
||
if (!_isObject(it2)) {
|
||
throw TypeError(it2 + " is not an object!");
|
||
}
|
||
return it2;
|
||
};
|
||
var _fails = function(exec) {
|
||
try {
|
||
return !!exec();
|
||
} catch (e2) {
|
||
return true;
|
||
}
|
||
};
|
||
var _descriptors = !_fails(function() {
|
||
return Object.defineProperty({}, "a", { get: function() {
|
||
return 7;
|
||
} }).a != 7;
|
||
});
|
||
var document2 = _global.document;
|
||
var is2 = _isObject(document2) && _isObject(document2.createElement);
|
||
var _domCreate = function(it2) {
|
||
return is2 ? document2.createElement(it2) : {};
|
||
};
|
||
var _ie8DomDefine = !_descriptors && !_fails(function() {
|
||
return Object.defineProperty(_domCreate("div"), "a", { get: function() {
|
||
return 7;
|
||
} }).a != 7;
|
||
});
|
||
var _toPrimitive = function(it2, S2) {
|
||
if (!_isObject(it2)) {
|
||
return it2;
|
||
}
|
||
var fn, val;
|
||
if (S2 && typeof (fn = it2.toString) == "function" && !_isObject(val = fn.call(it2))) {
|
||
return val;
|
||
}
|
||
if (typeof (fn = it2.valueOf) == "function" && !_isObject(val = fn.call(it2))) {
|
||
return val;
|
||
}
|
||
if (!S2 && typeof (fn = it2.toString) == "function" && !_isObject(val = fn.call(it2))) {
|
||
return val;
|
||
}
|
||
throw TypeError("Can't convert object to primitive value");
|
||
};
|
||
var dP = Object.defineProperty;
|
||
var f2 = _descriptors ? Object.defineProperty : function defineProperty(O2, P2, Attributes) {
|
||
_anObject(O2);
|
||
P2 = _toPrimitive(P2, true);
|
||
_anObject(Attributes);
|
||
if (_ie8DomDefine) {
|
||
try {
|
||
return dP(O2, P2, Attributes);
|
||
} catch (e2) {
|
||
}
|
||
}
|
||
if ("get" in Attributes || "set" in Attributes) {
|
||
throw TypeError("Accessors not supported!");
|
||
}
|
||
if ("value" in Attributes) {
|
||
O2[P2] = Attributes.value;
|
||
}
|
||
return O2;
|
||
};
|
||
var _objectDp = {
|
||
f: f2
|
||
};
|
||
var _propertyDesc = function(bitmap, value) {
|
||
return {
|
||
enumerable: !(bitmap & 1),
|
||
configurable: !(bitmap & 2),
|
||
writable: !(bitmap & 4),
|
||
value
|
||
};
|
||
};
|
||
var _hide = _descriptors ? function(object, key3, value) {
|
||
return _objectDp.f(object, key3, _propertyDesc(1, value));
|
||
} : function(object, key3, value) {
|
||
object[key3] = value;
|
||
return object;
|
||
};
|
||
var hasOwnProperty = {}.hasOwnProperty;
|
||
var _has = function(it2, key3) {
|
||
return hasOwnProperty.call(it2, key3);
|
||
};
|
||
var id = 0;
|
||
var px = Math.random();
|
||
var _uid = function(key3) {
|
||
return "Symbol(".concat(key3 === void 0 ? "" : key3, ")_", (++id + px).toString(36));
|
||
};
|
||
var _library = false;
|
||
var _shared = createCommonjsModule(function(module3) {
|
||
var SHARED = "__core-js_shared__";
|
||
var store = _global[SHARED] || (_global[SHARED] = {});
|
||
(module3.exports = function(key3, value) {
|
||
return store[key3] || (store[key3] = value !== void 0 ? value : {});
|
||
})("versions", []).push({
|
||
version: _core.version,
|
||
mode: _library ? "pure" : "global",
|
||
copyright: "\xA9 2019 Denis Pushkarev (zloirock.ru)"
|
||
});
|
||
});
|
||
var _functionToString = _shared("native-function-to-string", Function.toString);
|
||
var _redefine = createCommonjsModule(function(module3) {
|
||
var SRC = _uid("src");
|
||
var TO_STRING = "toString";
|
||
var TPL = ("" + _functionToString).split(TO_STRING);
|
||
_core.inspectSource = function(it2) {
|
||
return _functionToString.call(it2);
|
||
};
|
||
(module3.exports = function(O2, key3, val, safe) {
|
||
var isFunction = typeof val == "function";
|
||
if (isFunction) {
|
||
_has(val, "name") || _hide(val, "name", key3);
|
||
}
|
||
if (O2[key3] === val) {
|
||
return;
|
||
}
|
||
if (isFunction) {
|
||
_has(val, SRC) || _hide(val, SRC, O2[key3] ? "" + O2[key3] : TPL.join(String(key3)));
|
||
}
|
||
if (O2 === _global) {
|
||
O2[key3] = val;
|
||
} else if (!safe) {
|
||
delete O2[key3];
|
||
_hide(O2, key3, val);
|
||
} else if (O2[key3]) {
|
||
O2[key3] = val;
|
||
} else {
|
||
_hide(O2, key3, val);
|
||
}
|
||
})(Function.prototype, TO_STRING, function toString() {
|
||
return typeof this == "function" && this[SRC] || _functionToString.call(this);
|
||
});
|
||
});
|
||
var _aFunction = function(it2) {
|
||
if (typeof it2 != "function") {
|
||
throw TypeError(it2 + " is not a function!");
|
||
}
|
||
return it2;
|
||
};
|
||
var _ctx = function(fn, that, length) {
|
||
_aFunction(fn);
|
||
if (that === void 0) {
|
||
return fn;
|
||
}
|
||
switch (length) {
|
||
case 1:
|
||
return function(a2) {
|
||
return fn.call(that, a2);
|
||
};
|
||
case 2:
|
||
return function(a2, b2) {
|
||
return fn.call(that, a2, b2);
|
||
};
|
||
case 3:
|
||
return function(a2, b2, c3) {
|
||
return fn.call(that, a2, b2, c3);
|
||
};
|
||
}
|
||
return function() {
|
||
return fn.apply(that, arguments);
|
||
};
|
||
};
|
||
var PROTOTYPE = "prototype";
|
||
var $export = function(type, name, source2) {
|
||
var IS_FORCED = type & $export.F;
|
||
var IS_GLOBAL = type & $export.G;
|
||
var IS_STATIC = type & $export.S;
|
||
var IS_PROTO = type & $export.P;
|
||
var IS_BIND = type & $export.B;
|
||
var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];
|
||
var exports2 = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});
|
||
var expProto = exports2[PROTOTYPE] || (exports2[PROTOTYPE] = {});
|
||
var key3, own7, out, exp;
|
||
if (IS_GLOBAL) {
|
||
source2 = name;
|
||
}
|
||
for (key3 in source2) {
|
||
own7 = !IS_FORCED && target && target[key3] !== void 0;
|
||
out = (own7 ? target : source2)[key3];
|
||
exp = IS_BIND && own7 ? _ctx(out, _global) : IS_PROTO && typeof out == "function" ? _ctx(Function.call, out) : out;
|
||
if (target) {
|
||
_redefine(target, key3, out, type & $export.U);
|
||
}
|
||
if (exports2[key3] != out) {
|
||
_hide(exports2, key3, exp);
|
||
}
|
||
if (IS_PROTO && expProto[key3] != out) {
|
||
expProto[key3] = out;
|
||
}
|
||
}
|
||
};
|
||
_global.core = _core;
|
||
$export.F = 1;
|
||
$export.G = 2;
|
||
$export.S = 4;
|
||
$export.P = 8;
|
||
$export.B = 16;
|
||
$export.W = 32;
|
||
$export.U = 64;
|
||
$export.R = 128;
|
||
var _export = $export;
|
||
var ceil = Math.ceil;
|
||
var floor = Math.floor;
|
||
var _toInteger = function(it2) {
|
||
return isNaN(it2 = +it2) ? 0 : (it2 > 0 ? floor : ceil)(it2);
|
||
};
|
||
var _defined = function(it2) {
|
||
if (it2 == void 0) {
|
||
throw TypeError("Can't call method on " + it2);
|
||
}
|
||
return it2;
|
||
};
|
||
var _stringAt = function(TO_STRING) {
|
||
return function(that, pos2) {
|
||
var s3 = String(_defined(that));
|
||
var i2 = _toInteger(pos2);
|
||
var l2 = s3.length;
|
||
var a2, b2;
|
||
if (i2 < 0 || i2 >= l2) {
|
||
return TO_STRING ? "" : void 0;
|
||
}
|
||
a2 = s3.charCodeAt(i2);
|
||
return a2 < 55296 || a2 > 56319 || i2 + 1 === l2 || (b2 = s3.charCodeAt(i2 + 1)) < 56320 || b2 > 57343 ? TO_STRING ? s3.charAt(i2) : a2 : TO_STRING ? s3.slice(i2, i2 + 2) : (a2 - 55296 << 10) + (b2 - 56320) + 65536;
|
||
};
|
||
};
|
||
var $at = _stringAt(false);
|
||
_export(_export.P, "String", {
|
||
// 21.1.3.3 String.prototype.codePointAt(pos)
|
||
codePointAt: function codePointAt2(pos2) {
|
||
return $at(this, pos2);
|
||
}
|
||
});
|
||
var codePointAt = _core.String.codePointAt;
|
||
var max = Math.max;
|
||
var min = Math.min;
|
||
var _toAbsoluteIndex = function(index2, length) {
|
||
index2 = _toInteger(index2);
|
||
return index2 < 0 ? max(index2 + length, 0) : min(index2, length);
|
||
};
|
||
var fromCharCode = String.fromCharCode;
|
||
var $fromCodePoint = String.fromCodePoint;
|
||
_export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), "String", {
|
||
// 21.1.2.2 String.fromCodePoint(...codePoints)
|
||
fromCodePoint: function fromCodePoint3(x2) {
|
||
var arguments$1 = arguments;
|
||
var res = [];
|
||
var aLen = arguments.length;
|
||
var i2 = 0;
|
||
var code;
|
||
while (aLen > i2) {
|
||
code = +arguments$1[i2++];
|
||
if (_toAbsoluteIndex(code, 1114111) !== code) {
|
||
throw RangeError(code + " is not a valid code point");
|
||
}
|
||
res.push(
|
||
code < 65536 ? fromCharCode(code) : fromCharCode(((code -= 65536) >> 10) + 55296, code % 1024 + 56320)
|
||
);
|
||
}
|
||
return res.join("");
|
||
}
|
||
});
|
||
var fromCodePoint2 = _core.String.fromCodePoint;
|
||
var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/;
|
||
var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/;
|
||
var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/;
|
||
var unicode = {
|
||
Space_Separator,
|
||
ID_Start,
|
||
ID_Continue
|
||
};
|
||
var util = {
|
||
isSpaceSeparator: function isSpaceSeparator(c3) {
|
||
return typeof c3 === "string" && unicode.Space_Separator.test(c3);
|
||
},
|
||
isIdStartChar: function isIdStartChar(c3) {
|
||
return typeof c3 === "string" && (c3 >= "a" && c3 <= "z" || c3 >= "A" && c3 <= "Z" || c3 === "$" || c3 === "_" || unicode.ID_Start.test(c3));
|
||
},
|
||
isIdContinueChar: function isIdContinueChar(c3) {
|
||
return typeof c3 === "string" && (c3 >= "a" && c3 <= "z" || c3 >= "A" && c3 <= "Z" || c3 >= "0" && c3 <= "9" || c3 === "$" || c3 === "_" || c3 === "\u200C" || c3 === "\u200D" || unicode.ID_Continue.test(c3));
|
||
},
|
||
isDigit: function isDigit(c3) {
|
||
return typeof c3 === "string" && /[0-9]/.test(c3);
|
||
},
|
||
isHexDigit: function isHexDigit(c3) {
|
||
return typeof c3 === "string" && /[0-9A-Fa-f]/.test(c3);
|
||
}
|
||
};
|
||
var source;
|
||
var parseState;
|
||
var stack;
|
||
var pos;
|
||
var line;
|
||
var column;
|
||
var token;
|
||
var key2;
|
||
var root2;
|
||
var parse5 = function parse6(text2, reviver) {
|
||
source = String(text2);
|
||
parseState = "start";
|
||
stack = [];
|
||
pos = 0;
|
||
line = 1;
|
||
column = 0;
|
||
token = void 0;
|
||
key2 = void 0;
|
||
root2 = void 0;
|
||
do {
|
||
token = lex();
|
||
parseStates[parseState]();
|
||
} while (token.type !== "eof");
|
||
if (typeof reviver === "function") {
|
||
return internalize({ "": root2 }, "", reviver);
|
||
}
|
||
return root2;
|
||
};
|
||
function internalize(holder, name, reviver) {
|
||
var value = holder[name];
|
||
if (value != null && typeof value === "object") {
|
||
if (Array.isArray(value)) {
|
||
for (var i2 = 0; i2 < value.length; i2++) {
|
||
var key3 = String(i2);
|
||
var replacement = internalize(value, key3, reviver);
|
||
if (replacement === void 0) {
|
||
delete value[key3];
|
||
} else {
|
||
Object.defineProperty(value, key3, {
|
||
value: replacement,
|
||
writable: true,
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
} else {
|
||
for (var key$1 in value) {
|
||
var replacement$1 = internalize(value, key$1, reviver);
|
||
if (replacement$1 === void 0) {
|
||
delete value[key$1];
|
||
} else {
|
||
Object.defineProperty(value, key$1, {
|
||
value: replacement$1,
|
||
writable: true,
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return reviver.call(holder, name, value);
|
||
}
|
||
var lexState;
|
||
var buffer;
|
||
var doubleQuote;
|
||
var sign;
|
||
var c2;
|
||
function lex() {
|
||
lexState = "default";
|
||
buffer = "";
|
||
doubleQuote = false;
|
||
sign = 1;
|
||
for (; ; ) {
|
||
c2 = peek();
|
||
var token2 = lexStates[lexState]();
|
||
if (token2) {
|
||
return token2;
|
||
}
|
||
}
|
||
}
|
||
function peek() {
|
||
if (source[pos]) {
|
||
return String.fromCodePoint(source.codePointAt(pos));
|
||
}
|
||
}
|
||
function read() {
|
||
var c3 = peek();
|
||
if (c3 === "\n") {
|
||
line++;
|
||
column = 0;
|
||
} else if (c3) {
|
||
column += c3.length;
|
||
} else {
|
||
column++;
|
||
}
|
||
if (c3) {
|
||
pos += c3.length;
|
||
}
|
||
return c3;
|
||
}
|
||
var lexStates = {
|
||
default: function default$1() {
|
||
switch (c2) {
|
||
case " ":
|
||
case "\v":
|
||
case "\f":
|
||
case " ":
|
||
case "\xA0":
|
||
case "\uFEFF":
|
||
case "\n":
|
||
case "\r":
|
||
case "\u2028":
|
||
case "\u2029":
|
||
read();
|
||
return;
|
||
case "/":
|
||
read();
|
||
lexState = "comment";
|
||
return;
|
||
case void 0:
|
||
read();
|
||
return newToken("eof");
|
||
}
|
||
if (util.isSpaceSeparator(c2)) {
|
||
read();
|
||
return;
|
||
}
|
||
return lexStates[parseState]();
|
||
},
|
||
comment: function comment2() {
|
||
switch (c2) {
|
||
case "*":
|
||
read();
|
||
lexState = "multiLineComment";
|
||
return;
|
||
case "/":
|
||
read();
|
||
lexState = "singleLineComment";
|
||
return;
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
multiLineComment: function multiLineComment() {
|
||
switch (c2) {
|
||
case "*":
|
||
read();
|
||
lexState = "multiLineCommentAsterisk";
|
||
return;
|
||
case void 0:
|
||
throw invalidChar(read());
|
||
}
|
||
read();
|
||
},
|
||
multiLineCommentAsterisk: function multiLineCommentAsterisk() {
|
||
switch (c2) {
|
||
case "*":
|
||
read();
|
||
return;
|
||
case "/":
|
||
read();
|
||
lexState = "default";
|
||
return;
|
||
case void 0:
|
||
throw invalidChar(read());
|
||
}
|
||
read();
|
||
lexState = "multiLineComment";
|
||
},
|
||
singleLineComment: function singleLineComment() {
|
||
switch (c2) {
|
||
case "\n":
|
||
case "\r":
|
||
case "\u2028":
|
||
case "\u2029":
|
||
read();
|
||
lexState = "default";
|
||
return;
|
||
case void 0:
|
||
read();
|
||
return newToken("eof");
|
||
}
|
||
read();
|
||
},
|
||
value: function value() {
|
||
switch (c2) {
|
||
case "{":
|
||
case "[":
|
||
return newToken("punctuator", read());
|
||
case "n":
|
||
read();
|
||
literal("ull");
|
||
return newToken("null", null);
|
||
case "t":
|
||
read();
|
||
literal("rue");
|
||
return newToken("boolean", true);
|
||
case "f":
|
||
read();
|
||
literal("alse");
|
||
return newToken("boolean", false);
|
||
case "-":
|
||
case "+":
|
||
if (read() === "-") {
|
||
sign = -1;
|
||
}
|
||
lexState = "sign";
|
||
return;
|
||
case ".":
|
||
buffer = read();
|
||
lexState = "decimalPointLeading";
|
||
return;
|
||
case "0":
|
||
buffer = read();
|
||
lexState = "zero";
|
||
return;
|
||
case "1":
|
||
case "2":
|
||
case "3":
|
||
case "4":
|
||
case "5":
|
||
case "6":
|
||
case "7":
|
||
case "8":
|
||
case "9":
|
||
buffer = read();
|
||
lexState = "decimalInteger";
|
||
return;
|
||
case "I":
|
||
read();
|
||
literal("nfinity");
|
||
return newToken("numeric", Infinity);
|
||
case "N":
|
||
read();
|
||
literal("aN");
|
||
return newToken("numeric", NaN);
|
||
case '"':
|
||
case "'":
|
||
doubleQuote = read() === '"';
|
||
buffer = "";
|
||
lexState = "string";
|
||
return;
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
identifierNameStartEscape: function identifierNameStartEscape() {
|
||
if (c2 !== "u") {
|
||
throw invalidChar(read());
|
||
}
|
||
read();
|
||
var u2 = unicodeEscape();
|
||
switch (u2) {
|
||
case "$":
|
||
case "_":
|
||
break;
|
||
default:
|
||
if (!util.isIdStartChar(u2)) {
|
||
throw invalidIdentifier();
|
||
}
|
||
break;
|
||
}
|
||
buffer += u2;
|
||
lexState = "identifierName";
|
||
},
|
||
identifierName: function identifierName() {
|
||
switch (c2) {
|
||
case "$":
|
||
case "_":
|
||
case "\u200C":
|
||
case "\u200D":
|
||
buffer += read();
|
||
return;
|
||
case "\\":
|
||
read();
|
||
lexState = "identifierNameEscape";
|
||
return;
|
||
}
|
||
if (util.isIdContinueChar(c2)) {
|
||
buffer += read();
|
||
return;
|
||
}
|
||
return newToken("identifier", buffer);
|
||
},
|
||
identifierNameEscape: function identifierNameEscape() {
|
||
if (c2 !== "u") {
|
||
throw invalidChar(read());
|
||
}
|
||
read();
|
||
var u2 = unicodeEscape();
|
||
switch (u2) {
|
||
case "$":
|
||
case "_":
|
||
case "\u200C":
|
||
case "\u200D":
|
||
break;
|
||
default:
|
||
if (!util.isIdContinueChar(u2)) {
|
||
throw invalidIdentifier();
|
||
}
|
||
break;
|
||
}
|
||
buffer += u2;
|
||
lexState = "identifierName";
|
||
},
|
||
sign: function sign$1() {
|
||
switch (c2) {
|
||
case ".":
|
||
buffer = read();
|
||
lexState = "decimalPointLeading";
|
||
return;
|
||
case "0":
|
||
buffer = read();
|
||
lexState = "zero";
|
||
return;
|
||
case "1":
|
||
case "2":
|
||
case "3":
|
||
case "4":
|
||
case "5":
|
||
case "6":
|
||
case "7":
|
||
case "8":
|
||
case "9":
|
||
buffer = read();
|
||
lexState = "decimalInteger";
|
||
return;
|
||
case "I":
|
||
read();
|
||
literal("nfinity");
|
||
return newToken("numeric", sign * Infinity);
|
||
case "N":
|
||
read();
|
||
literal("aN");
|
||
return newToken("numeric", NaN);
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
zero: function zero() {
|
||
switch (c2) {
|
||
case ".":
|
||
buffer += read();
|
||
lexState = "decimalPoint";
|
||
return;
|
||
case "e":
|
||
case "E":
|
||
buffer += read();
|
||
lexState = "decimalExponent";
|
||
return;
|
||
case "x":
|
||
case "X":
|
||
buffer += read();
|
||
lexState = "hexadecimal";
|
||
return;
|
||
}
|
||
return newToken("numeric", sign * 0);
|
||
},
|
||
decimalInteger: function decimalInteger() {
|
||
switch (c2) {
|
||
case ".":
|
||
buffer += read();
|
||
lexState = "decimalPoint";
|
||
return;
|
||
case "e":
|
||
case "E":
|
||
buffer += read();
|
||
lexState = "decimalExponent";
|
||
return;
|
||
}
|
||
if (util.isDigit(c2)) {
|
||
buffer += read();
|
||
return;
|
||
}
|
||
return newToken("numeric", sign * Number(buffer));
|
||
},
|
||
decimalPointLeading: function decimalPointLeading() {
|
||
if (util.isDigit(c2)) {
|
||
buffer += read();
|
||
lexState = "decimalFraction";
|
||
return;
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
decimalPoint: function decimalPoint() {
|
||
switch (c2) {
|
||
case "e":
|
||
case "E":
|
||
buffer += read();
|
||
lexState = "decimalExponent";
|
||
return;
|
||
}
|
||
if (util.isDigit(c2)) {
|
||
buffer += read();
|
||
lexState = "decimalFraction";
|
||
return;
|
||
}
|
||
return newToken("numeric", sign * Number(buffer));
|
||
},
|
||
decimalFraction: function decimalFraction() {
|
||
switch (c2) {
|
||
case "e":
|
||
case "E":
|
||
buffer += read();
|
||
lexState = "decimalExponent";
|
||
return;
|
||
}
|
||
if (util.isDigit(c2)) {
|
||
buffer += read();
|
||
return;
|
||
}
|
||
return newToken("numeric", sign * Number(buffer));
|
||
},
|
||
decimalExponent: function decimalExponent() {
|
||
switch (c2) {
|
||
case "+":
|
||
case "-":
|
||
buffer += read();
|
||
lexState = "decimalExponentSign";
|
||
return;
|
||
}
|
||
if (util.isDigit(c2)) {
|
||
buffer += read();
|
||
lexState = "decimalExponentInteger";
|
||
return;
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
decimalExponentSign: function decimalExponentSign() {
|
||
if (util.isDigit(c2)) {
|
||
buffer += read();
|
||
lexState = "decimalExponentInteger";
|
||
return;
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
decimalExponentInteger: function decimalExponentInteger() {
|
||
if (util.isDigit(c2)) {
|
||
buffer += read();
|
||
return;
|
||
}
|
||
return newToken("numeric", sign * Number(buffer));
|
||
},
|
||
hexadecimal: function hexadecimal() {
|
||
if (util.isHexDigit(c2)) {
|
||
buffer += read();
|
||
lexState = "hexadecimalInteger";
|
||
return;
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
hexadecimalInteger: function hexadecimalInteger() {
|
||
if (util.isHexDigit(c2)) {
|
||
buffer += read();
|
||
return;
|
||
}
|
||
return newToken("numeric", sign * Number(buffer));
|
||
},
|
||
string: function string() {
|
||
switch (c2) {
|
||
case "\\":
|
||
read();
|
||
buffer += escape();
|
||
return;
|
||
case '"':
|
||
if (doubleQuote) {
|
||
read();
|
||
return newToken("string", buffer);
|
||
}
|
||
buffer += read();
|
||
return;
|
||
case "'":
|
||
if (!doubleQuote) {
|
||
read();
|
||
return newToken("string", buffer);
|
||
}
|
||
buffer += read();
|
||
return;
|
||
case "\n":
|
||
case "\r":
|
||
throw invalidChar(read());
|
||
case "\u2028":
|
||
case "\u2029":
|
||
separatorChar(c2);
|
||
break;
|
||
case void 0:
|
||
throw invalidChar(read());
|
||
}
|
||
buffer += read();
|
||
},
|
||
start: function start() {
|
||
switch (c2) {
|
||
case "{":
|
||
case "[":
|
||
return newToken("punctuator", read());
|
||
}
|
||
lexState = "value";
|
||
},
|
||
beforePropertyName: function beforePropertyName() {
|
||
switch (c2) {
|
||
case "$":
|
||
case "_":
|
||
buffer = read();
|
||
lexState = "identifierName";
|
||
return;
|
||
case "\\":
|
||
read();
|
||
lexState = "identifierNameStartEscape";
|
||
return;
|
||
case "}":
|
||
return newToken("punctuator", read());
|
||
case '"':
|
||
case "'":
|
||
doubleQuote = read() === '"';
|
||
lexState = "string";
|
||
return;
|
||
}
|
||
if (util.isIdStartChar(c2)) {
|
||
buffer += read();
|
||
lexState = "identifierName";
|
||
return;
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
afterPropertyName: function afterPropertyName() {
|
||
if (c2 === ":") {
|
||
return newToken("punctuator", read());
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
beforePropertyValue: function beforePropertyValue() {
|
||
lexState = "value";
|
||
},
|
||
afterPropertyValue: function afterPropertyValue() {
|
||
switch (c2) {
|
||
case ",":
|
||
case "}":
|
||
return newToken("punctuator", read());
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
beforeArrayValue: function beforeArrayValue() {
|
||
if (c2 === "]") {
|
||
return newToken("punctuator", read());
|
||
}
|
||
lexState = "value";
|
||
},
|
||
afterArrayValue: function afterArrayValue() {
|
||
switch (c2) {
|
||
case ",":
|
||
case "]":
|
||
return newToken("punctuator", read());
|
||
}
|
||
throw invalidChar(read());
|
||
},
|
||
end: function end() {
|
||
throw invalidChar(read());
|
||
}
|
||
};
|
||
function newToken(type, value) {
|
||
return {
|
||
type,
|
||
value,
|
||
line,
|
||
column
|
||
};
|
||
}
|
||
function literal(s3) {
|
||
for (var i2 = 0, list = s3; i2 < list.length; i2 += 1) {
|
||
var c3 = list[i2];
|
||
var p3 = peek();
|
||
if (p3 !== c3) {
|
||
throw invalidChar(read());
|
||
}
|
||
read();
|
||
}
|
||
}
|
||
function escape() {
|
||
var c3 = peek();
|
||
switch (c3) {
|
||
case "b":
|
||
read();
|
||
return "\b";
|
||
case "f":
|
||
read();
|
||
return "\f";
|
||
case "n":
|
||
read();
|
||
return "\n";
|
||
case "r":
|
||
read();
|
||
return "\r";
|
||
case "t":
|
||
read();
|
||
return " ";
|
||
case "v":
|
||
read();
|
||
return "\v";
|
||
case "0":
|
||
read();
|
||
if (util.isDigit(peek())) {
|
||
throw invalidChar(read());
|
||
}
|
||
return "\0";
|
||
case "x":
|
||
read();
|
||
return hexEscape();
|
||
case "u":
|
||
read();
|
||
return unicodeEscape();
|
||
case "\n":
|
||
case "\u2028":
|
||
case "\u2029":
|
||
read();
|
||
return "";
|
||
case "\r":
|
||
read();
|
||
if (peek() === "\n") {
|
||
read();
|
||
}
|
||
return "";
|
||
case "1":
|
||
case "2":
|
||
case "3":
|
||
case "4":
|
||
case "5":
|
||
case "6":
|
||
case "7":
|
||
case "8":
|
||
case "9":
|
||
throw invalidChar(read());
|
||
case void 0:
|
||
throw invalidChar(read());
|
||
}
|
||
return read();
|
||
}
|
||
function hexEscape() {
|
||
var buffer2 = "";
|
||
var c3 = peek();
|
||
if (!util.isHexDigit(c3)) {
|
||
throw invalidChar(read());
|
||
}
|
||
buffer2 += read();
|
||
c3 = peek();
|
||
if (!util.isHexDigit(c3)) {
|
||
throw invalidChar(read());
|
||
}
|
||
buffer2 += read();
|
||
return String.fromCodePoint(parseInt(buffer2, 16));
|
||
}
|
||
function unicodeEscape() {
|
||
var buffer2 = "";
|
||
var count = 4;
|
||
while (count-- > 0) {
|
||
var c3 = peek();
|
||
if (!util.isHexDigit(c3)) {
|
||
throw invalidChar(read());
|
||
}
|
||
buffer2 += read();
|
||
}
|
||
return String.fromCodePoint(parseInt(buffer2, 16));
|
||
}
|
||
var parseStates = {
|
||
start: function start() {
|
||
if (token.type === "eof") {
|
||
throw invalidEOF();
|
||
}
|
||
push();
|
||
},
|
||
beforePropertyName: function beforePropertyName() {
|
||
switch (token.type) {
|
||
case "identifier":
|
||
case "string":
|
||
key2 = token.value;
|
||
parseState = "afterPropertyName";
|
||
return;
|
||
case "punctuator":
|
||
pop();
|
||
return;
|
||
case "eof":
|
||
throw invalidEOF();
|
||
}
|
||
},
|
||
afterPropertyName: function afterPropertyName() {
|
||
if (token.type === "eof") {
|
||
throw invalidEOF();
|
||
}
|
||
parseState = "beforePropertyValue";
|
||
},
|
||
beforePropertyValue: function beforePropertyValue() {
|
||
if (token.type === "eof") {
|
||
throw invalidEOF();
|
||
}
|
||
push();
|
||
},
|
||
beforeArrayValue: function beforeArrayValue() {
|
||
if (token.type === "eof") {
|
||
throw invalidEOF();
|
||
}
|
||
if (token.type === "punctuator" && token.value === "]") {
|
||
pop();
|
||
return;
|
||
}
|
||
push();
|
||
},
|
||
afterPropertyValue: function afterPropertyValue() {
|
||
if (token.type === "eof") {
|
||
throw invalidEOF();
|
||
}
|
||
switch (token.value) {
|
||
case ",":
|
||
parseState = "beforePropertyName";
|
||
return;
|
||
case "}":
|
||
pop();
|
||
}
|
||
},
|
||
afterArrayValue: function afterArrayValue() {
|
||
if (token.type === "eof") {
|
||
throw invalidEOF();
|
||
}
|
||
switch (token.value) {
|
||
case ",":
|
||
parseState = "beforeArrayValue";
|
||
return;
|
||
case "]":
|
||
pop();
|
||
}
|
||
},
|
||
end: function end() {
|
||
}
|
||
};
|
||
function push() {
|
||
var value;
|
||
switch (token.type) {
|
||
case "punctuator":
|
||
switch (token.value) {
|
||
case "{":
|
||
value = {};
|
||
break;
|
||
case "[":
|
||
value = [];
|
||
break;
|
||
}
|
||
break;
|
||
case "null":
|
||
case "boolean":
|
||
case "numeric":
|
||
case "string":
|
||
value = token.value;
|
||
break;
|
||
}
|
||
if (root2 === void 0) {
|
||
root2 = value;
|
||
} else {
|
||
var parent = stack[stack.length - 1];
|
||
if (Array.isArray(parent)) {
|
||
parent.push(value);
|
||
} else {
|
||
Object.defineProperty(parent, key2, {
|
||
value,
|
||
writable: true,
|
||
enumerable: true,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
if (value !== null && typeof value === "object") {
|
||
stack.push(value);
|
||
if (Array.isArray(value)) {
|
||
parseState = "beforeArrayValue";
|
||
} else {
|
||
parseState = "beforePropertyName";
|
||
}
|
||
} else {
|
||
var current = stack[stack.length - 1];
|
||
if (current == null) {
|
||
parseState = "end";
|
||
} else if (Array.isArray(current)) {
|
||
parseState = "afterArrayValue";
|
||
} else {
|
||
parseState = "afterPropertyValue";
|
||
}
|
||
}
|
||
}
|
||
function pop() {
|
||
stack.pop();
|
||
var current = stack[stack.length - 1];
|
||
if (current == null) {
|
||
parseState = "end";
|
||
} else if (Array.isArray(current)) {
|
||
parseState = "afterArrayValue";
|
||
} else {
|
||
parseState = "afterPropertyValue";
|
||
}
|
||
}
|
||
function invalidChar(c3) {
|
||
if (c3 === void 0) {
|
||
return syntaxError("JSON5: invalid end of input at " + line + ":" + column);
|
||
}
|
||
return syntaxError("JSON5: invalid character '" + formatChar(c3) + "' at " + line + ":" + column);
|
||
}
|
||
function invalidEOF() {
|
||
return syntaxError("JSON5: invalid end of input at " + line + ":" + column);
|
||
}
|
||
function invalidIdentifier() {
|
||
column -= 5;
|
||
return syntaxError("JSON5: invalid identifier character at " + line + ":" + column);
|
||
}
|
||
function separatorChar(c3) {
|
||
console.warn("JSON5: '" + formatChar(c3) + "' in strings is not valid ECMAScript; consider escaping");
|
||
}
|
||
function formatChar(c3) {
|
||
var replacements = {
|
||
"'": "\\'",
|
||
'"': '\\"',
|
||
"\\": "\\\\",
|
||
"\b": "\\b",
|
||
"\f": "\\f",
|
||
"\n": "\\n",
|
||
"\r": "\\r",
|
||
" ": "\\t",
|
||
"\v": "\\v",
|
||
"\0": "\\0",
|
||
"\u2028": "\\u2028",
|
||
"\u2029": "\\u2029"
|
||
};
|
||
if (replacements[c3]) {
|
||
return replacements[c3];
|
||
}
|
||
if (c3 < " ") {
|
||
var hexString = c3.charCodeAt(0).toString(16);
|
||
return "\\x" + ("00" + hexString).substring(hexString.length);
|
||
}
|
||
return c3;
|
||
}
|
||
function syntaxError(message) {
|
||
var err = new SyntaxError(message);
|
||
err.lineNumber = line;
|
||
err.columnNumber = column;
|
||
return err;
|
||
}
|
||
var stringify3 = function stringify4(value, replacer, space) {
|
||
var stack2 = [];
|
||
var indent = "";
|
||
var propertyList;
|
||
var replacerFunc;
|
||
var gap = "";
|
||
var quote;
|
||
if (replacer != null && typeof replacer === "object" && !Array.isArray(replacer)) {
|
||
space = replacer.space;
|
||
quote = replacer.quote;
|
||
replacer = replacer.replacer;
|
||
}
|
||
if (typeof replacer === "function") {
|
||
replacerFunc = replacer;
|
||
} else if (Array.isArray(replacer)) {
|
||
propertyList = [];
|
||
for (var i2 = 0, list = replacer; i2 < list.length; i2 += 1) {
|
||
var v2 = list[i2];
|
||
var item = void 0;
|
||
if (typeof v2 === "string") {
|
||
item = v2;
|
||
} else if (typeof v2 === "number" || v2 instanceof String || v2 instanceof Number) {
|
||
item = String(v2);
|
||
}
|
||
if (item !== void 0 && propertyList.indexOf(item) < 0) {
|
||
propertyList.push(item);
|
||
}
|
||
}
|
||
}
|
||
if (space instanceof Number) {
|
||
space = Number(space);
|
||
} else if (space instanceof String) {
|
||
space = String(space);
|
||
}
|
||
if (typeof space === "number") {
|
||
if (space > 0) {
|
||
space = Math.min(10, Math.floor(space));
|
||
gap = " ".substr(0, space);
|
||
}
|
||
} else if (typeof space === "string") {
|
||
gap = space.substr(0, 10);
|
||
}
|
||
return serializeProperty("", { "": value });
|
||
function serializeProperty(key3, holder) {
|
||
var value2 = holder[key3];
|
||
if (value2 != null) {
|
||
if (typeof value2.toJSON5 === "function") {
|
||
value2 = value2.toJSON5(key3);
|
||
} else if (typeof value2.toJSON === "function") {
|
||
value2 = value2.toJSON(key3);
|
||
}
|
||
}
|
||
if (replacerFunc) {
|
||
value2 = replacerFunc.call(holder, key3, value2);
|
||
}
|
||
if (value2 instanceof Number) {
|
||
value2 = Number(value2);
|
||
} else if (value2 instanceof String) {
|
||
value2 = String(value2);
|
||
} else if (value2 instanceof Boolean) {
|
||
value2 = value2.valueOf();
|
||
}
|
||
switch (value2) {
|
||
case null:
|
||
return "null";
|
||
case true:
|
||
return "true";
|
||
case false:
|
||
return "false";
|
||
}
|
||
if (typeof value2 === "string") {
|
||
return quoteString(value2, false);
|
||
}
|
||
if (typeof value2 === "number") {
|
||
return String(value2);
|
||
}
|
||
if (typeof value2 === "object") {
|
||
return Array.isArray(value2) ? serializeArray(value2) : serializeObject(value2);
|
||
}
|
||
return void 0;
|
||
}
|
||
function quoteString(value2) {
|
||
var quotes = {
|
||
"'": 0.1,
|
||
'"': 0.2
|
||
};
|
||
var replacements = {
|
||
"'": "\\'",
|
||
'"': '\\"',
|
||
"\\": "\\\\",
|
||
"\b": "\\b",
|
||
"\f": "\\f",
|
||
"\n": "\\n",
|
||
"\r": "\\r",
|
||
" ": "\\t",
|
||
"\v": "\\v",
|
||
"\0": "\\0",
|
||
"\u2028": "\\u2028",
|
||
"\u2029": "\\u2029"
|
||
};
|
||
var product = "";
|
||
for (var i3 = 0; i3 < value2.length; i3++) {
|
||
var c3 = value2[i3];
|
||
switch (c3) {
|
||
case "'":
|
||
case '"':
|
||
quotes[c3]++;
|
||
product += c3;
|
||
continue;
|
||
case "\0":
|
||
if (util.isDigit(value2[i3 + 1])) {
|
||
product += "\\x00";
|
||
continue;
|
||
}
|
||
}
|
||
if (replacements[c3]) {
|
||
product += replacements[c3];
|
||
continue;
|
||
}
|
||
if (c3 < " ") {
|
||
var hexString = c3.charCodeAt(0).toString(16);
|
||
product += "\\x" + ("00" + hexString).substring(hexString.length);
|
||
continue;
|
||
}
|
||
product += c3;
|
||
}
|
||
var quoteChar = quote || Object.keys(quotes).reduce(function(a2, b2) {
|
||
return quotes[a2] < quotes[b2] ? a2 : b2;
|
||
});
|
||
product = product.replace(new RegExp(quoteChar, "g"), replacements[quoteChar]);
|
||
return quoteChar + product + quoteChar;
|
||
}
|
||
function serializeObject(value2) {
|
||
if (stack2.indexOf(value2) >= 0) {
|
||
throw TypeError("Converting circular structure to JSON5");
|
||
}
|
||
stack2.push(value2);
|
||
var stepback = indent;
|
||
indent = indent + gap;
|
||
var keys = propertyList || Object.keys(value2);
|
||
var partial = [];
|
||
for (var i3 = 0, list2 = keys; i3 < list2.length; i3 += 1) {
|
||
var key3 = list2[i3];
|
||
var propertyString = serializeProperty(key3, value2);
|
||
if (propertyString !== void 0) {
|
||
var member = serializeKey(key3) + ":";
|
||
if (gap !== "") {
|
||
member += " ";
|
||
}
|
||
member += propertyString;
|
||
partial.push(member);
|
||
}
|
||
}
|
||
var final;
|
||
if (partial.length === 0) {
|
||
final = "{}";
|
||
} else {
|
||
var properties;
|
||
if (gap === "") {
|
||
properties = partial.join(",");
|
||
final = "{" + properties + "}";
|
||
} else {
|
||
var separator = ",\n" + indent;
|
||
properties = partial.join(separator);
|
||
final = "{\n" + indent + properties + ",\n" + stepback + "}";
|
||
}
|
||
}
|
||
stack2.pop();
|
||
indent = stepback;
|
||
return final;
|
||
}
|
||
function serializeKey(key3) {
|
||
if (key3.length === 0) {
|
||
return quoteString(key3, true);
|
||
}
|
||
var firstChar = String.fromCodePoint(key3.codePointAt(0));
|
||
if (!util.isIdStartChar(firstChar)) {
|
||
return quoteString(key3, true);
|
||
}
|
||
for (var i3 = firstChar.length; i3 < key3.length; i3++) {
|
||
if (!util.isIdContinueChar(String.fromCodePoint(key3.codePointAt(i3)))) {
|
||
return quoteString(key3, true);
|
||
}
|
||
}
|
||
return key3;
|
||
}
|
||
function serializeArray(value2) {
|
||
if (stack2.indexOf(value2) >= 0) {
|
||
throw TypeError("Converting circular structure to JSON5");
|
||
}
|
||
stack2.push(value2);
|
||
var stepback = indent;
|
||
indent = indent + gap;
|
||
var partial = [];
|
||
for (var i3 = 0; i3 < value2.length; i3++) {
|
||
var propertyString = serializeProperty(String(i3), value2);
|
||
partial.push(propertyString !== void 0 ? propertyString : "null");
|
||
}
|
||
var final;
|
||
if (partial.length === 0) {
|
||
final = "[]";
|
||
} else {
|
||
if (gap === "") {
|
||
var properties = partial.join(",");
|
||
final = "[" + properties + "]";
|
||
} else {
|
||
var separator = ",\n" + indent;
|
||
var properties$1 = partial.join(separator);
|
||
final = "[\n" + indent + properties$1 + ",\n" + stepback + "]";
|
||
}
|
||
}
|
||
stack2.pop();
|
||
indent = stepback;
|
||
return final;
|
||
}
|
||
};
|
||
var JSON52 = {
|
||
parse: parse5,
|
||
stringify: stringify3
|
||
};
|
||
var lib = JSON52;
|
||
var es5 = lib;
|
||
return es5;
|
||
});
|
||
}
|
||
});
|
||
|
||
// src/main.ts
|
||
var main_exports = {};
|
||
__export(main_exports, {
|
||
default: () => CodeStylerPlugin
|
||
});
|
||
module.exports = __toCommonJS(main_exports);
|
||
var import_obsidian7 = require("obsidian");
|
||
|
||
// src/Settings.ts
|
||
var THEME_DEFAULT_SETTINGS = {
|
||
codeblock: {
|
||
lineNumbers: true,
|
||
unwrapLines: true,
|
||
wrapLinesActive: false,
|
||
curvature: 4
|
||
},
|
||
gutter: {
|
||
highlight: true,
|
||
activeLine: false
|
||
},
|
||
header: {
|
||
title: {
|
||
textFont: "",
|
||
textBold: false,
|
||
textItalic: true
|
||
},
|
||
languageTag: {
|
||
display: "none",
|
||
textFont: "",
|
||
textBold: true,
|
||
textItalic: false
|
||
},
|
||
languageIcon: {
|
||
display: "none",
|
||
displayColour: true
|
||
},
|
||
fontSize: 14,
|
||
foldPlaceholder: ""
|
||
},
|
||
highlights: {
|
||
activeCodeblockLine: false,
|
||
activeEditorLine: false
|
||
},
|
||
inline: {
|
||
syntaxHighlight: true,
|
||
style: true,
|
||
fontWeight: 4,
|
||
curvature: 6,
|
||
paddingVertical: 5,
|
||
paddingHorizontal: 5,
|
||
marginHorizontal: 0,
|
||
titleFontWeight: 8
|
||
},
|
||
advanced: {
|
||
gradientHighlights: false,
|
||
gradientHighlightsColourStop: "70%",
|
||
languageBorderColour: false,
|
||
languageBorderWidth: 5,
|
||
iconSize: 28
|
||
}
|
||
};
|
||
var THEME_FALLBACK_COLOURS = {
|
||
codeblock: {
|
||
backgroundColour: "--code-background",
|
||
textColour: "--code-normal"
|
||
},
|
||
gutter: {
|
||
backgroundColour: "--code-background",
|
||
textColour: "--text-faint",
|
||
activeTextColour: "--text-muted"
|
||
},
|
||
header: {
|
||
backgroundColour: "--code-background",
|
||
title: {
|
||
textColour: "--code-comment"
|
||
},
|
||
languageTag: {
|
||
backgroundColour: "--code-background",
|
||
textColour: "--code-comment"
|
||
},
|
||
lineColour: "--color-base-30"
|
||
},
|
||
highlights: {
|
||
activeCodeblockLineColour: "--color-base-30",
|
||
activeEditorLineColour: "--color-base-20",
|
||
defaultColour: "--text-highlight-bg",
|
||
alternativeHighlights: {}
|
||
},
|
||
inline: {
|
||
backgroundColour: "--code-background",
|
||
textColour: "--code-normal",
|
||
activeTextColour: "--code-normal",
|
||
titleTextColour: "--code-comment"
|
||
},
|
||
advanced: {
|
||
buttonColour: "--text-muted",
|
||
buttonActiveColour: "--text-normal"
|
||
}
|
||
};
|
||
var SOLARIZED = {
|
||
"base03": "#002b36",
|
||
"base02": "#073642",
|
||
"base01": "#586e75",
|
||
"base00": "#657b83",
|
||
"base0": "#839496",
|
||
"base1": "#93a1a1",
|
||
"base2": "#eee8d5",
|
||
"base3": "#fdf6e3",
|
||
"yellow": "#b58900",
|
||
"orange": "#cb4b16",
|
||
"red": "#dc322f",
|
||
"magenta": "#d33682",
|
||
"violet": "#6c71c4",
|
||
"blue": "#268bd2",
|
||
"cyan": "#2aa198",
|
||
"green": "#859900"
|
||
};
|
||
var DEFAULT_THEME = {
|
||
settings: THEME_DEFAULT_SETTINGS,
|
||
colours: {
|
||
light: THEME_FALLBACK_COLOURS,
|
||
dark: THEME_FALLBACK_COLOURS
|
||
}
|
||
};
|
||
var SOLARIZED_THEME = {
|
||
settings: THEME_DEFAULT_SETTINGS,
|
||
colours: {
|
||
light: {
|
||
codeblock: {
|
||
backgroundColour: SOLARIZED.base3,
|
||
textColour: "#bababa"
|
||
},
|
||
gutter: {
|
||
backgroundColour: SOLARIZED.base2,
|
||
textColour: "#6c6c6c",
|
||
activeTextColour: "#8c8c8c"
|
||
},
|
||
header: {
|
||
backgroundColour: "#D5CCB4",
|
||
title: {
|
||
textColour: "#866704"
|
||
},
|
||
languageTag: {
|
||
backgroundColour: "#B8B5AA",
|
||
textColour: "#C25F30"
|
||
},
|
||
lineColour: "#EDD489"
|
||
},
|
||
highlights: {
|
||
activeCodeblockLineColour: SOLARIZED.base2,
|
||
activeEditorLineColour: "#60460633",
|
||
defaultColour: "#E9DFBA",
|
||
alternativeHighlights: {}
|
||
},
|
||
inline: {
|
||
backgroundColour: SOLARIZED.base3,
|
||
textColour: "#bababa",
|
||
activeTextColour: "#bababa",
|
||
titleTextColour: "#C25F30"
|
||
},
|
||
advanced: {
|
||
buttonColour: "--text-muted",
|
||
buttonActiveColour: "--text-normal"
|
||
}
|
||
},
|
||
dark: {
|
||
codeblock: {
|
||
backgroundColour: SOLARIZED.base03,
|
||
textColour: "#bababa"
|
||
},
|
||
gutter: {
|
||
backgroundColour: SOLARIZED.base02,
|
||
textColour: "#6c6c6c",
|
||
activeTextColour: "#4c4c4c"
|
||
},
|
||
header: {
|
||
backgroundColour: "#0a4554",
|
||
title: {
|
||
textColour: "#dadada"
|
||
},
|
||
languageTag: {
|
||
backgroundColour: "#008080",
|
||
textColour: "#000000"
|
||
},
|
||
lineColour: "#46cced"
|
||
},
|
||
highlights: {
|
||
activeCodeblockLineColour: SOLARIZED.base02,
|
||
activeEditorLineColour: "#468eeb33",
|
||
defaultColour: "#054b5c",
|
||
alternativeHighlights: {}
|
||
},
|
||
inline: {
|
||
backgroundColour: SOLARIZED.base03,
|
||
textColour: "#bababa",
|
||
activeTextColour: "#bababa",
|
||
titleTextColour: "#000000"
|
||
},
|
||
advanced: {
|
||
buttonColour: "--text-muted",
|
||
buttonActiveColour: "--text-normal"
|
||
}
|
||
}
|
||
}
|
||
};
|
||
var INBUILT_THEMES = {
|
||
"Default": DEFAULT_THEME,
|
||
"Solarized": SOLARIZED_THEME
|
||
};
|
||
var EXAMPLE_CODEBLOCK_PARAMETERS = "python title:foo";
|
||
var EXAMPLE_CODEBLOCK_CONTENT = 'print("This line is very long and should be used as an example for how the plugin deals with wrapping and unwrapping very long lines given the choice of codeblock parameters and settings.")\nprint("This line is highlighted.")';
|
||
var EXAMPLE_INLINE_CODE = '{python icon title:foo} print("This is inline code")';
|
||
var EXCLUDED_LANGUAGES = "ad-*";
|
||
var WHITELIST_CODEBLOCKS = "run-*";
|
||
var DEFAULT_SETTINGS = {
|
||
themes: structuredClone(INBUILT_THEMES),
|
||
selectedTheme: "Default",
|
||
currentTheme: structuredClone(DEFAULT_THEME),
|
||
newTheme: "",
|
||
newHighlight: "",
|
||
exampleCodeblockParameters: EXAMPLE_CODEBLOCK_PARAMETERS,
|
||
exampleCodeblockContent: EXAMPLE_CODEBLOCK_CONTENT,
|
||
exampleInlineCode: EXAMPLE_INLINE_CODE,
|
||
decoratePrint: true,
|
||
excludedLanguages: EXCLUDED_LANGUAGES,
|
||
processedCodeblocksWhitelist: WHITELIST_CODEBLOCKS,
|
||
redirectLanguages: {},
|
||
version: "1.1.3"
|
||
};
|
||
function convertSettings(settings) {
|
||
if (typeof (settings == null ? void 0 : settings.version) === "undefined")
|
||
return settingsClear();
|
||
while (semverNewer(DEFAULT_SETTINGS.version, settings.version)) {
|
||
if (settings.version in settingsUpdaters)
|
||
settings = settingsUpdaters[settings.version](settings);
|
||
else
|
||
settings = settingsClear();
|
||
}
|
||
return settings;
|
||
}
|
||
function semverNewer(newVersion, oldVersion) {
|
||
return newVersion.localeCompare(oldVersion, void 0, { numeric: true }) === 1;
|
||
}
|
||
function settingsVersionUpdate(settings, themeUpdater = (theme) => theme, otherSettingsUpdater = (settings2) => settings2, redirectLanguagesUpdater = (redirectLanguages) => redirectLanguages) {
|
||
var _a2;
|
||
for (const [name, theme] of Object.entries(settings.themes)) {
|
||
settings.themes[name] = themeUpdater(theme);
|
||
}
|
||
settings.currentTheme = structuredClone(settings.themes[settings.selectedTheme]);
|
||
settings.redirectLanguages = redirectLanguagesUpdater(settings.redirectLanguages);
|
||
settings = otherSettingsUpdater(settings);
|
||
settings.version = (_a2 = Object.keys(settingsUpdaters).find((value, index2, array) => (array == null ? void 0 : array[index2 - 1]) === settings.version)) != null ? _a2 : "1.0.0";
|
||
return settings;
|
||
}
|
||
function settingsPreserve(settings) {
|
||
var _a2;
|
||
settings.version = (_a2 = Object.keys(settingsUpdaters).find((value, index2, array) => (array == null ? void 0 : array[index2 - 1]) === settings.version)) != null ? _a2 : "1.0.0";
|
||
return settings;
|
||
}
|
||
function settingsClear() {
|
||
return DEFAULT_SETTINGS;
|
||
}
|
||
var settingsUpdaters = {
|
||
"1.0.0": settingsClear,
|
||
"1.0.1": settingsClear,
|
||
"1.0.2": settingsClear,
|
||
"1.0.3": settingsClear,
|
||
"1.0.4": settingsClear,
|
||
"1.0.5": settingsClear,
|
||
"1.0.6": settingsClear,
|
||
"1.0.7": settingsPreserve,
|
||
"1.0.8": settingsPreserve,
|
||
"1.0.9": settingsPreserve,
|
||
"1.0.10": (settings) => settingsVersionUpdate(settings, (theme) => {
|
||
theme.settings.inline.style = true;
|
||
return theme;
|
||
}, (settings2) => {
|
||
delete settings2.specialLanguages;
|
||
return settings2;
|
||
}),
|
||
"1.0.11": settingsPreserve,
|
||
"1.1.0": settingsPreserve,
|
||
"1.1.1": settingsPreserve,
|
||
"1.1.2": settingsPreserve,
|
||
"1.1.3": settingsPreserve
|
||
};
|
||
var FOLD_PLACEHOLDER = "Folded Code";
|
||
var PARAMETERS = ["title", "fold", "ln", "wrap", "unwrap", "ignore"];
|
||
var TRANSITION_LENGTH = 240;
|
||
var SPECIAL_LANGUAGES = ["^preview$", "^include$", "^output$", "^run-.+$"];
|
||
var SETTINGS_SOURCEPATH_PREFIX = "@Code-Styler-Settings:";
|
||
var PRISM_LANGUAGES = {
|
||
// Prism Languages: https://prismjs.com/plugins/show-language/
|
||
// "none": "Plain text", // NOTE: Obsidian uses this for codeblocks without language names
|
||
"plain": "Plain text",
|
||
"plaintext": "Plain text",
|
||
"text": "Plain text",
|
||
"txt": "Plain text",
|
||
"html": "HTML",
|
||
"xml": "XML",
|
||
"svg": "SVG",
|
||
"mathml": "MathML",
|
||
"ssml": "SSML",
|
||
"rss": "RSS",
|
||
"css": "CSS",
|
||
"clike": "C-like",
|
||
"js": "JavaScript",
|
||
"abap": "ABAP",
|
||
"abnf": "ABNF",
|
||
"al": "AL",
|
||
"antlr4": "ANTLR4",
|
||
"g4": "ANTLR4",
|
||
"apacheconf": "Apache Configuration",
|
||
"apl": "APL",
|
||
"aql": "AQL",
|
||
"ino": "Arduino",
|
||
"arff": "ARFF",
|
||
"armasm": "ARM Assembly",
|
||
"arm-asm": "ARM Assembly",
|
||
"art": "Arturo",
|
||
"asciidoc": "AsciiDoc",
|
||
"adoc": "AsciiDoc",
|
||
"aspnet": "ASP.NET (C#)",
|
||
"asm6502": "6502 Assembly",
|
||
"asmatmel": "Atmel AVR Assembly",
|
||
"autohotkey": "AutoHotkey",
|
||
"autoit": "AutoIt",
|
||
"avisynth": "AviSynth",
|
||
"avs": "AviSynth",
|
||
"avro-idl": "Avro IDL",
|
||
"avdl": "Avro IDL",
|
||
"awk": "AWK",
|
||
"gawk": "GAWK",
|
||
"sh": "Shell",
|
||
"basic": "BASIC",
|
||
"bbcode": "BBcode",
|
||
"bbj": "BBj",
|
||
"bnf": "BNF",
|
||
"rbnf": "RBNF",
|
||
"bqn": "BQN",
|
||
"bsl": "BSL (1C:Enterprise)",
|
||
"oscript": "OneScript",
|
||
"csharp": "C#",
|
||
"cs": "C#",
|
||
"dotnet": "C#",
|
||
"cpp": "C++",
|
||
"cfscript": "CFScript",
|
||
"cfc": "CFScript",
|
||
"cil": "CIL",
|
||
"cilkc": "Cilk/C",
|
||
"cilk-c": "Cilk/C",
|
||
"cilkcpp": "Cilk/C++",
|
||
"cilk-cpp": "Cilk/C++",
|
||
"cilk": "Cilk/C++",
|
||
"cmake": "CMake",
|
||
"cobol": "COBOL",
|
||
"coffee": "CoffeeScript",
|
||
"conc": "Concurnas",
|
||
"csp": "Content-Security-Policy",
|
||
"css-extras": "CSS Extras",
|
||
"csv": "CSV",
|
||
"cue": "CUE",
|
||
"dataweave": "DataWeave",
|
||
"dax": "DAX",
|
||
"django": "Django/Jinja2",
|
||
"jinja2": "Django/Jinja2",
|
||
"dns-zone-file": "DNS zone file",
|
||
"dns-zone": "DNS zone file",
|
||
"dockerfile": "Docker",
|
||
"dot": "DOT (Graphviz)",
|
||
"gv": "DOT (Graphviz)",
|
||
"ebnf": "EBNF",
|
||
"editorconfig": "EditorConfig",
|
||
"ejs": "EJS",
|
||
"etlua": "Embedded Lua templating",
|
||
"erb": "ERB",
|
||
"excel-formula": "Excel Formula",
|
||
"xlsx": "Excel Formula",
|
||
"xls": "Excel Formula",
|
||
"fsharp": "F#",
|
||
"firestore-security-rules": "Firestore security rules",
|
||
"ftl": "FreeMarker Template Language",
|
||
"gml": "GameMaker Language",
|
||
"gamemakerlanguage": "GameMaker Language",
|
||
"gap": "GAP (CAS)",
|
||
"gcode": "G-code",
|
||
"gdscript": "GDScript",
|
||
"gedcom": "GEDCOM",
|
||
"gettext": "gettext",
|
||
"po": "gettext",
|
||
"glsl": "GLSL",
|
||
"gn": "GN",
|
||
"gni": "GN",
|
||
"linker-script": "GNU Linker Script",
|
||
"ld": "GNU Linker Script",
|
||
"go-module": "Go module",
|
||
"go-mod": "Go module",
|
||
"graphql": "GraphQL",
|
||
"hbs": "Handlebars",
|
||
"hs": "Haskell",
|
||
"hcl": "HCL",
|
||
"hlsl": "HLSL",
|
||
"http": "HTTP",
|
||
"hpkp": "HTTP Public-Key-Pins",
|
||
"hsts": "HTTP Strict-Transport-Security",
|
||
"ichigojam": "IchigoJam",
|
||
"icu-message-format": "ICU Message Format",
|
||
"idr": "Idris",
|
||
"ignore": ".ignore",
|
||
"gitignore": ".gitignore",
|
||
"hgignore": ".hgignore",
|
||
"npmignore": ".npmignore",
|
||
"inform7": "Inform 7",
|
||
"javadoc": "JavaDoc",
|
||
"javadoclike": "JavaDoc-like",
|
||
"javastacktrace": "Java stack trace",
|
||
"jq": "JQ",
|
||
"jsdoc": "JSDoc",
|
||
"js-extras": "JS Extras",
|
||
"json": "JSON",
|
||
"webmanifest": "Web App Manifest",
|
||
"json5": "JSON5",
|
||
"jsonp": "JSONP",
|
||
"jsstacktrace": "JS stack trace",
|
||
"js-templates": "JS Templates",
|
||
"keepalived": "Keepalived Configure",
|
||
"kts": "Kotlin Script",
|
||
"kt": "Kotlin",
|
||
"kumir": "KuMir (\u041A\u0443\u041C\u0438\u0440)",
|
||
"kum": "KuMir (\u041A\u0443\u041C\u0438\u0440)",
|
||
"latex": "LaTeX",
|
||
"tex": "TeX",
|
||
"context": "ConTeXt",
|
||
"lilypond": "LilyPond",
|
||
"ly": "LilyPond",
|
||
"emacs": "Lisp",
|
||
"elisp": "Lisp",
|
||
"emacs-lisp": "Lisp",
|
||
"llvm": "LLVM IR",
|
||
"log": "Log file",
|
||
"lolcode": "LOLCODE",
|
||
"magma": "Magma (CAS)",
|
||
"md": "Markdown",
|
||
"markup-templating": "Markup templating",
|
||
"matlab": "MATLAB",
|
||
"maxscript": "MAXScript",
|
||
"mel": "MEL",
|
||
"metafont": "METAFONT",
|
||
"mongodb": "MongoDB",
|
||
"moon": "MoonScript",
|
||
"n1ql": "N1QL",
|
||
"n4js": "N4JS",
|
||
"n4jsd": "N4JS",
|
||
"nand2tetris-hdl": "Nand To Tetris HDL",
|
||
"naniscript": "Naninovel Script",
|
||
"nani": "Naninovel Script",
|
||
"nasm": "NASM",
|
||
"neon": "NEON",
|
||
"nginx": "nginx",
|
||
"nsis": "NSIS",
|
||
"objectivec": "Objective-C",
|
||
"objc": "Objective-C",
|
||
"ocaml": "OCaml",
|
||
"opencl": "OpenCL",
|
||
"openqasm": "OpenQasm",
|
||
"qasm": "OpenQasm",
|
||
"parigp": "PARI/GP",
|
||
"objectpascal": "Object Pascal",
|
||
"psl": "PATROL Scripting Language",
|
||
"pcaxis": "PC-Axis",
|
||
"px": "PC-Axis",
|
||
"peoplecode": "PeopleCode",
|
||
"pcode": "PeopleCode",
|
||
"php": "PHP",
|
||
"phpdoc": "PHPDoc",
|
||
"php-extras": "PHP Extras",
|
||
"plant-uml": "PlantUML",
|
||
"plantuml": "PlantUML",
|
||
"plsql": "PL/SQL",
|
||
"powerquery": "PowerQuery",
|
||
"pq": "PowerQuery",
|
||
"mscript": "PowerQuery",
|
||
"powershell": "PowerShell",
|
||
"promql": "PromQL",
|
||
"properties": ".properties",
|
||
"protobuf": "Protocol Buffers",
|
||
"purebasic": "PureBasic",
|
||
"pbfasm": "PureBasic",
|
||
"purs": "PureScript",
|
||
"py": "Python",
|
||
"qsharp": "Q#",
|
||
"qs": "Q#",
|
||
"q": "Q (kdb+ database)",
|
||
"qml": "QML",
|
||
"rkt": "Racket",
|
||
"cshtml": "Razor C#",
|
||
"razor": "Razor C#",
|
||
"jsx": "React JSX",
|
||
"tsx": "React TSX",
|
||
"renpy": "Ren'py",
|
||
"rpy": "Ren'py",
|
||
"res": "ReScript",
|
||
"rest": "reST (reStructuredText)",
|
||
"robotframework": "Robot Framework",
|
||
"robot": "Robot Framework",
|
||
"rb": "Ruby",
|
||
"sas": "SAS",
|
||
"sass": "Sass (Sass)",
|
||
"scss": "Sass (SCSS)",
|
||
"shell-session": "Shell session",
|
||
"sh-session": "Shell session",
|
||
"shellsession": "Shell session",
|
||
"sml": "SML",
|
||
"smlnj": "SML/NJ",
|
||
"solidity": "Solidity (Ethereum)",
|
||
"sol": "Solidity (Ethereum)",
|
||
"solution-file": "Solution file",
|
||
"sln": "Solution file",
|
||
"soy": "Soy (Closure Template)",
|
||
"sparql": "SPARQL",
|
||
"rq": "SPARQL",
|
||
"splunk-spl": "Splunk SPL",
|
||
"sqf": "SQF: Status Quo Function (Arma 3)",
|
||
"sql": "SQL",
|
||
"stata": "Stata Ado",
|
||
"iecst": "Structured Text (IEC 61131-3)",
|
||
"supercollider": "SuperCollider",
|
||
"sclang": "SuperCollider",
|
||
"systemd": "Systemd configuration file",
|
||
"t4-templating": "T4 templating",
|
||
"t4-cs": "T4 Text Templates (C#)",
|
||
"t4": "T4 Text Templates (C#)",
|
||
"t4-vb": "T4 Text Templates (VB)",
|
||
"tap": "TAP",
|
||
"tt2": "Template Toolkit 2",
|
||
"toml": "TOML",
|
||
"trickle": "trickle",
|
||
"troy": "troy",
|
||
"trig": "TriG",
|
||
"ts": "TypeScript",
|
||
"tsconfig": "TSConfig",
|
||
"uscript": "UnrealScript",
|
||
"uc": "UnrealScript",
|
||
"uorazor": "UO Razor Script",
|
||
"uri": "URI",
|
||
"url": "URL",
|
||
"vbnet": "VB.Net",
|
||
"vhdl": "VHDL",
|
||
"vim": "vim",
|
||
"visual-basic": "Visual Basic",
|
||
"vba": "VBA",
|
||
"vb": "Visual Basic",
|
||
"wasm": "WebAssembly",
|
||
"web-idl": "Web IDL",
|
||
"webidl": "Web IDL",
|
||
"wgsl": "WGSL",
|
||
"wiki": "Wiki markup",
|
||
"wolfram": "Wolfram language",
|
||
"nb": "Mathematica Notebook",
|
||
"wl": "Wolfram language",
|
||
"xeoracube": "XeoraCube",
|
||
"xml-doc": "XML doc (.net)",
|
||
"xojo": "Xojo (REALbasic)",
|
||
"xquery": "XQuery",
|
||
"yaml": "YAML",
|
||
"yml": "YAML",
|
||
"yang": "YANG"
|
||
};
|
||
var MANUAL_PRISM_LANGUAGES = {
|
||
// Manually generated list from https://prismjs.com/ - 297 languages
|
||
"css": "CSS",
|
||
"clike": "C-like",
|
||
"javascript": "JavaScript",
|
||
"js": "JavaScript",
|
||
"abap": "ABAP",
|
||
"abnf": "ABNF",
|
||
"actionscript": "ActionScript",
|
||
"ada": "Ada",
|
||
"agda": "Agda",
|
||
"al": "AL",
|
||
"antlr4": "ANTLR4",
|
||
"g4": "ANTLR4",
|
||
"apacheconf": "Apache Configuration",
|
||
"apex": "Apex",
|
||
"apl": "APL",
|
||
"applescript": "AppleScript",
|
||
"aql": "AQL",
|
||
"arduino": "Arduino",
|
||
"ino": "Arduino",
|
||
"arff": "ARFF",
|
||
"armasm": "ARM Assembly",
|
||
"arm-asm": "ARM Assembly",
|
||
"arturo": "Arturo",
|
||
"art": "Arturo",
|
||
"asciidoc": "AsciiDoc",
|
||
"adoc": "AsciiDoc",
|
||
"aspnet": "ASP.NET (C#)",
|
||
"asm6502": "6502 Assembly",
|
||
"asmatmel": "Atmel AVR Assembly",
|
||
"autohotkey": "AutoHotkey",
|
||
"autoit": "AutoIt",
|
||
"avisynth": "AviSynth",
|
||
"avs": "AviSynth",
|
||
"avro-idl": "Avro IDL",
|
||
"avdl": "Avro IDL",
|
||
"awk": "AWK",
|
||
"gawk": "GAWK",
|
||
"bash": "Bash",
|
||
"sh": "Shell",
|
||
"shell": "Shell",
|
||
"basic": "BASIC",
|
||
"batch": "Batch",
|
||
"bbcode": "BBcode",
|
||
"shortcode": "BBcode",
|
||
"bbj": "BBj",
|
||
"birb": "Birb",
|
||
"bison": "Bison",
|
||
"bnf": "BNF",
|
||
"rbnf": "BNF",
|
||
"bqn": "BQN",
|
||
"brainfuck": "Brainfuck",
|
||
"brightscript": "BrightScript",
|
||
"bro": "Bro",
|
||
"bsl": "BSL (1C)",
|
||
"oscript": "BSL (1C)",
|
||
"c": "C",
|
||
"csharp": "C#",
|
||
"cs": "C#",
|
||
"dotnet": "C#",
|
||
"cpp": "C++",
|
||
"cfscript": "CFScript",
|
||
"cfc": "CFScript",
|
||
"chaiscript": "ChaiScript",
|
||
"cil": "CIL",
|
||
"cilkc": "Cilk/C",
|
||
"cilk-c": "Cilk/C",
|
||
"cilkcpp": "Cilk/C++",
|
||
"cilk-cpp": "Cilk/C++",
|
||
"cilk": "Cilk/C++",
|
||
"clojure": "Clojure",
|
||
"cmake": "CMake",
|
||
"cobol": "COBOL",
|
||
"coffeescript": "CoffeeScript",
|
||
"coffee": "CoffeeScript",
|
||
"concurnas": "Concurnas",
|
||
"conc": "Concurnas",
|
||
"csp": "Content-Security-Policy",
|
||
"cooklang": "Cooklang",
|
||
"coq": "Coq",
|
||
"crystal": "Crystal",
|
||
"css-extras": "CSS Extras",
|
||
"csv": "CSV",
|
||
"cue": "CUE",
|
||
"cypher": "Cypher",
|
||
"d": "D",
|
||
"dart": "Dart",
|
||
"dataweave": "DataWeave",
|
||
"dax": "DAX",
|
||
"dhall": "Dhall",
|
||
"diff": "Diff",
|
||
"django": "Django/Jinja2",
|
||
"jinja2": "Django/Jinja2",
|
||
"dns-zone-file": "DNS zone file",
|
||
"dns-zone": "DNS zone file",
|
||
"docker": "Docker",
|
||
"dockerfile": "Docker",
|
||
"dot": "DOT (Graphviz)",
|
||
"gv": "DOT (Graphviz)",
|
||
"ebnf": "EBNF",
|
||
"editorconfig": "EditorConfig",
|
||
"eiffel": "Eiffel",
|
||
"ejs": "EJS",
|
||
"eta": "EJS",
|
||
"elixir": "Elixir",
|
||
"elm": "Elm",
|
||
"etlua": "Embedded Lua templating",
|
||
"erb": "ERB",
|
||
"erlang": "Erlang",
|
||
"excel-formula": "Excel Formula",
|
||
"xlsx": "Excel Formula",
|
||
"xls": "Excel Formula",
|
||
"fsharp": "F#",
|
||
"factor": "Factor",
|
||
"false": "False",
|
||
"firestore-security-rules": "Firestore security rules",
|
||
"flow": "Flow",
|
||
"fortran": "Fortran",
|
||
"ftl": "FreeMarker Template Language",
|
||
"gml": "GameMaker Language",
|
||
"gamemakerlanguage": "GameMaker Language",
|
||
"gap": "GAP (CAS)",
|
||
"gcode": "G-code",
|
||
"gdscript": "GDScript",
|
||
"gedcom": "GEDCOM",
|
||
"gettext": "gettext",
|
||
"po": "gettext",
|
||
"gherkin": "Gherkin",
|
||
"git": "Git",
|
||
"glsl": "GLSL",
|
||
"gn": "GN",
|
||
"gni": "GN",
|
||
"linker-script": "GNU Linker Script",
|
||
"ld": "GNU Linker Script",
|
||
"go": "Go",
|
||
"go-module": "Go module",
|
||
"go-mod": "Go module",
|
||
"gradle": "Gradle",
|
||
"graphql": "GraphQL",
|
||
"groovy": "Groovy",
|
||
"haml": "Haml",
|
||
"handlebars": "Handlebars",
|
||
"hbs": "Handlebars",
|
||
"mustache": "Handlebars",
|
||
"haskell": "Haskell",
|
||
"hs": "Haskell",
|
||
"haxe": "Haxe",
|
||
"hcl": "HCL",
|
||
"hlsl": "HLSL",
|
||
"hoon": "Hoon",
|
||
"http": "HTTP",
|
||
"hpkp": "HTTP Public-Key-Pins",
|
||
"hsts": "HTTP Strict-Transport-Security",
|
||
"ichigojam": "IchigoJam",
|
||
"icon": "Icon",
|
||
"icu-message-format": "ICU Message Format",
|
||
"idris": "Idris",
|
||
"idr": "Idris",
|
||
"inform7": "Inform 7",
|
||
"ini": "Ini",
|
||
"io": "Io",
|
||
"j": "J",
|
||
"java": "Java",
|
||
"javadoc": "JavaDoc",
|
||
"javadoclike": "JavaDoc-like",
|
||
"javastacktrace": "Java stack trace",
|
||
"jexl": "Jexl",
|
||
"jolie": "Jolie",
|
||
"jq": "JQ",
|
||
"jsdoc": "JSDoc",
|
||
"js-extras": "JS Extras",
|
||
"json": "JSON",
|
||
"webmanifest": "JSON",
|
||
"json5": "JSON5",
|
||
"jsonp": "JSONP",
|
||
"jsstacktrace": "JS stack trace",
|
||
"js-templates": "JS Templates",
|
||
"julia": "Julia",
|
||
"keepalived": "Keepalived Configure",
|
||
"keyman": "Keyman",
|
||
"kotlin": "Kotlin",
|
||
"kt": "Kotlin",
|
||
"kts": "Kotlin",
|
||
"kumir": "KuMir (\u041A\u0443\u041C\u0438\u0440)",
|
||
"kum": "KuMir (\u041A\u0443\u041C\u0438\u0440)",
|
||
"kusto": "Kusto",
|
||
"latex": "LaTeX",
|
||
"tex": "LaTeX",
|
||
"context": "LaTeX",
|
||
"latte": "Latte",
|
||
"less": "Less",
|
||
"lilypond": "LilyPond",
|
||
"ly": "LilyPond",
|
||
"liquid": "Liquid",
|
||
"lisp": "Lisp",
|
||
"emacs": "Lisp",
|
||
"elisp": "Lisp",
|
||
"emacs-lisp": "Lisp",
|
||
"livescript": "LiveScript",
|
||
"llvm": "LLVM IR",
|
||
"log": "Log file",
|
||
"lolcode": "LOLCODE",
|
||
"lua": "Lua",
|
||
"magma": "Magma (CAS)",
|
||
"makefile": "Makefile",
|
||
"markdown": "Markdown",
|
||
"md": "Markdown",
|
||
"markup-templating": "Markup templating",
|
||
"mata": "Mata",
|
||
"matlab": "MATLAB",
|
||
"maxscript": "MAXScript",
|
||
"mel": "MEL",
|
||
"mermaid": "Mermaid",
|
||
"metafont": "METAFONT",
|
||
"mizar": "Mizar",
|
||
"mongodb": "MongoDB",
|
||
"monkey": "Monkey",
|
||
"moonscript": "MoonScript",
|
||
"moon": "MoonScript",
|
||
"n1ql": "N1QL",
|
||
"n4js": "N4JS",
|
||
"n4jsd": "N4JS",
|
||
"nand2tetris-hdl": "Nand To Tetris HDL",
|
||
"naniscript": "Naninovel Script",
|
||
"nani": "Naninovel Script",
|
||
"nasm": "NASM",
|
||
"neon": "NEON",
|
||
"nevod": "Nevod",
|
||
"nginx": "nginx",
|
||
"nim": "Nim",
|
||
"nix": "Nix",
|
||
"nsis": "NSIS",
|
||
"objectivec": "Objective-C",
|
||
"objc": "Objective-C",
|
||
"ocaml": "OCaml",
|
||
"odin": "Odin",
|
||
"opencl": "OpenCL",
|
||
"openqasm": "OpenQasm",
|
||
"qasm": "OpenQasm",
|
||
"oz": "Oz",
|
||
"parigp": "PARI/GP",
|
||
"parser": "Parser",
|
||
"pascal": "Pascal",
|
||
"pascaligo": "Pascaligo",
|
||
"psl": "PATROL Scripting Language",
|
||
"pcaxis": "PC-Axis",
|
||
"px": "PC-Axis",
|
||
"peoplecode": "PeopleCode",
|
||
"pcode": "PeopleCode",
|
||
"perl": "Perl",
|
||
"php": "PHP",
|
||
"phpdoc": "PHPDoc",
|
||
"php-extras": "PHP Extras",
|
||
"plant-uml": "PlantUML",
|
||
"plantuml": "PlantUML",
|
||
"plsql": "PL/SQL",
|
||
"powerquery": "PowerQuery",
|
||
"pq": "PowerQuery",
|
||
"mscript": "PowerQuery",
|
||
"powershell": "PowerShell",
|
||
"processing": "Processing",
|
||
"prolog": "Prolog",
|
||
"promql": "PromQL",
|
||
"properties": ".properties",
|
||
"protobuf": "Protocol Buffers",
|
||
"pug": "Pug",
|
||
"puppet": "Puppet",
|
||
"pure": "Pure",
|
||
"purebasic": "PureBasic",
|
||
"pbfasm": "PureBasic",
|
||
"purescript": "PureScript",
|
||
"purs": "PureScript",
|
||
"python": "Python",
|
||
"py": "Python",
|
||
"qsharp": "Q#",
|
||
"qs": "Q#",
|
||
"q": "Q (kdb+ database)",
|
||
"qml": "QML",
|
||
"qore": "Qore",
|
||
"r": "R",
|
||
"racket": "Racket",
|
||
"rkt": "Racket",
|
||
"cshtml": "Razor C#",
|
||
"jsx": "React JSX",
|
||
"tsx": "React TSX",
|
||
"reason": "Reason",
|
||
"regex": "Regex",
|
||
"rego": "Rego",
|
||
"renpy": "Ren'py",
|
||
"rpy": "Ren'py",
|
||
"rescript": "ReScript",
|
||
"res": "ReScript",
|
||
"rest": "reST (reStructuredText)",
|
||
"rip": "Rip",
|
||
"roboconf": "Roboconf",
|
||
"robotframework": "Robot Framework",
|
||
"robot": "Robot Framework",
|
||
"ruby": "Ruby",
|
||
"rb": "Ruby",
|
||
"rust": "Rust",
|
||
"sas": "SAS",
|
||
"sass": "Sass (Sass)",
|
||
"scss": "Sass (SCSS)",
|
||
"scala": "Scala",
|
||
"scheme": "Scheme",
|
||
"shell-session": "Shell session",
|
||
"sh-session": "Shell session",
|
||
"shellsession": "Shell session",
|
||
"smali": "Smali",
|
||
"smalltalk": "Smalltalk",
|
||
"smarty": "Smarty",
|
||
"sml": "SML",
|
||
"smlnj": "SML",
|
||
"solidity": "Solidity (Ethereum)",
|
||
"sol": "Solidity (Ethereum)",
|
||
"solution-file": "Solution file",
|
||
"sln": "Solution file",
|
||
"soy": "Soy (Closure Template)",
|
||
"sparql": "SPARQL",
|
||
"rq": "SPARQL",
|
||
"splunk-spl": "Splunk SPL",
|
||
"sqf": "SQF",
|
||
"sql": "SQL",
|
||
"squirrel": "Squirrel",
|
||
"stan": "Stan",
|
||
"stata": "Stata Ado",
|
||
"iecst": "Structured Text (IEC 61131-3)",
|
||
"stylus": "Stylus",
|
||
"supercollider": "SuperCollider",
|
||
"sclang": "SuperCollider",
|
||
"swift": "Swift",
|
||
"systemd": "Systemd configuration file",
|
||
"t4-templating": "T4 templating",
|
||
"t4-cs": "T4 Text Templates (C#)",
|
||
"t4": "T4 Text Templates (C#)",
|
||
"t4-vb": "T4 Text Templates (VB)",
|
||
"tap": "TAP",
|
||
"tcl": "Tcl",
|
||
"tt2": "Template Toolkit 2",
|
||
"textile": "Textile",
|
||
"toml": "TOML",
|
||
"tremor": "Tremor",
|
||
"trickle": "Tremor",
|
||
"troy": "Tremor",
|
||
"turtle": "Turtle",
|
||
"trig": "Turtle",
|
||
"twig": "Twig",
|
||
"typescript": "TypeScript",
|
||
"ts": "TypeScript",
|
||
"typoscript": "TypoScript",
|
||
"tsconfig": "TSConfig",
|
||
"unrealscript": "UnrealScript",
|
||
"uscript": "UnrealScript",
|
||
"uc": "UnrealScript",
|
||
"uorazor": "UO Razor Script",
|
||
"uri": "URI",
|
||
"url": "URI",
|
||
"v": "V",
|
||
"vala": "Vala",
|
||
"vbnet": "VB.Net",
|
||
"velocity": "Velocity",
|
||
"verilog": "Verilog",
|
||
"vhdl": "VHDL",
|
||
"vim": "vim",
|
||
"visual-basic": "Visual Basic",
|
||
"vb": "Visual Basic",
|
||
"warpscript": "WarpScript",
|
||
"wasm": "WebAssembly",
|
||
"web-idl": "Web IDL",
|
||
"webidl": "Web IDL",
|
||
"wgsl": "WGSL",
|
||
"wiki": "Wiki markup",
|
||
"wolfram": "Wolfram language",
|
||
"mathematica": "Wolfram language",
|
||
"nb": "Wolfram language",
|
||
"wl": "Wolfram language",
|
||
"wren": "Wren",
|
||
"xeora": "Xeora",
|
||
"xeoracube": "Xeora",
|
||
"xml-doc": "XML doc (.net)",
|
||
"xojo": "Xojo (REALbasic)",
|
||
"xquery": "XQuery",
|
||
"yaml": "YAML",
|
||
"yml": "YAML",
|
||
"yang": "YANG",
|
||
"zig": "Zig"
|
||
};
|
||
var MANUAL_LANGUAGES = {
|
||
// Manually created list
|
||
"fish": "Fish",
|
||
"octave": "Octave",
|
||
"maxima": "Maxima",
|
||
"mysql": "SQL",
|
||
"postgresql": "SQL",
|
||
"rscript": "R",
|
||
"shellscript": "Shell",
|
||
"sqlite": "SQL",
|
||
"zsh": "Zsh"
|
||
};
|
||
var LANGUAGE_NAMES = { ...PRISM_LANGUAGES, ...MANUAL_PRISM_LANGUAGES, ...MANUAL_LANGUAGES };
|
||
var LANGUAGES = {
|
||
".gitignore": {
|
||
colour: "#dd4c35",
|
||
icon: '<path d="M29.472,14.753,17.247,2.528a1.8,1.8,0,0,0-2.55,0L12.158,5.067l3.22,3.22a2.141,2.141,0,0,1,2.712,2.73l3.1,3.1a2.143,2.143,0,1,1-1.285,1.21l-2.895-2.895v7.617a2.141,2.141,0,1,1-1.764-.062V12.3a2.146,2.146,0,0,1-1.165-2.814L10.911,6.314,2.528,14.7a1.8,1.8,0,0,0,0,2.551L14.753,29.472a1.8,1.8,0,0,0,2.55,0L29.472,17.3a1.8,1.8,0,0,0,0-2.551" style="fill:#dd4c35"/><path d="M12.158,5.067l3.22,3.22a2.141,2.141,0,0,1,2.712,2.73l3.1,3.1a2.143,2.143,0,1,1-1.285,1.21l-2.895-2.895v7.617a2.141,2.141,0,1,1-1.764-.062V12.3a2.146,2.146,0,0,1-1.165-2.814L10.911,6.314" style="fill:#fff"/>',
|
||
inlineComment: [
|
||
"#"
|
||
]
|
||
},
|
||
".hgignore": {
|
||
colour: "#bfbfbf",
|
||
icon: '<path d="M28.042,23.172c4.989-8.3-1.054-21.751-12.1-20.384C5.955,4.022,5.794,14.53,14.593,17.026c7.614,2.162,1.573,6.992,1.749,10.208s6.62,4.382,11.7-4.063" style="fill:#1b1b1b"/><circle cx="9.784" cy="24.257" r="4.332" style="fill:#1b1b1b"/><circle cx="4.835" cy="15.099" r="2.835" style="fill:#1b1b1b"/><path d="M28.231,22.835c4.989-8.3-1.054-21.751-12.1-20.384C6.144,3.686,5.983,14.194,14.781,16.69c7.614,2.162,1.573,6.992,1.749,10.208s6.62,4.382,11.7-4.063" style="fill:#bfbfbf"/><circle cx="9.972" cy="23.921" r="4.332" style="fill:#bfbfbf"/><circle cx="5.023" cy="14.762" r="2.835" style="fill:#bfbfbf"/><path d="M17.811,28.168a.669.669,0,0,1,.635-.994,7,7,0,0,0,3.7-.746c3.247-1.841,8.244-10.7,5.731-16.285A12.77,12.77,0,0,0,25.049,5.7c-.236-.249-.1-.236.059-.152a10.08,10.08,0,0,1,2.857,3.676,14.578,14.578,0,0,1,1.1,10.279c-.494,1.817-2.2,5.928-4.691,7.706s-5.424,2.8-6.563.955M15.548,16.673c-1.7-.5-3.894-1.208-5.163-2.867A8.088,8.088,0,0,1,8.854,10.49c-.043-.27-.08-.5,0-.558a21.882,21.882,0,0,0,1.688,2.723,6.487,6.487,0,0,0,3.526,2.256,12.383,12.383,0,0,1,3.867,1.37c.739.629.8,1.989.552,2.142s-.759-1.1-2.938-1.749m-8.155,10.4c3.369,3.121,8.439-1.166,6.207-4.954-.251-.425-.576-.749-.469-.423.714,2.178.054,3.9-1.176,4.788a4.063,4.063,0,0,1-4.192.328c-.39-.2-.551.092-.37.261m-3.93-10.16c.018.2.292.458.722.576a2.969,2.969,0,0,0,2.55-.413,2.759,2.759,0,0,0,.81-3.452c-.172-.308-.4-.533-.218-.041A2.68,2.68,0,0,1,6.148,16.53a2.439,2.439,0,0,1-2.1.164c-.391-.119-.6.016-.58.223"/><path d="M19.056,28.407c-.033.389.414.466,1.016.376a6.755,6.755,0,0,0,2.313-.648,9.54,9.54,0,0,0,3.314-2.63c2.662-3.473,3.6-7.582,3.46-8.173A16.172,16.172,0,0,1,27,22.692c-1.888,2.968-3.256,4.548-6.413,5.314-.879.213-1.485-.112-1.529.4m-7-13.5A7.967,7.967,0,0,0,14.6,16.089a12.2,12.2,0,0,1,2.96,1.31c.378.253.618.819.642.317s-.285-.934-.976-1.164a15.274,15.274,0,0,0-2.009-.674c-.485-.1-1.273-.285-1.949-.493-.371-.114-.748-.313-1.214-.483M10.037,27.718c.429-.09,2.924-.736,3.51-2.788.183-.64.215-.511.164-.165a3.8,3.8,0,0,1-3.358,3.123c-.289.03-.668-.1-.315-.17M5.046,17.2a7.991,7.991,0,0,0,1.195-.336,2.383,2.383,0,0,0,1.232-1.741c.064-.505.083-.378.109-.1a2.627,2.627,0,0,1-2.147,2.324c-.2.028-.56.011-.389-.143" style="fill:#fff"/><path d="M27.54,17.446c2.124-6.123-2.321-15.37-11.315-14.258-8.126,1-8.257,9.557-1.1,11.59,8.112,1.228,3.227,7.347,2.535,10.433-.621,2.766,6.555,3.221,9.876-7.765M7.219,26.2a2.028,2.028,0,0,1,1.332.442,3.525,3.525,0,0,0,3.755-.983A4.154,4.154,0,0,0,12.869,22c-.806-2.319-4.229-2.278-5.758-.353-1.654,2.15-.4,4.539.108,4.548M2.676,15.451a1.166,1.166,0,0,0,.908.863c.731.1.88.434,1.743.263A2.464,2.464,0,0,0,7.1,14.916a1.771,1.771,0,0,0-.824-2.14,2.689,2.689,0,0,0-3.047.363,2.263,2.263,0,0,0-.558,2.312" style="fill:#999"/><path d="M21.981,22.228c-2.2-.272-5.36,4.69-2.378,4.109h0a5.645,5.645,0,0,0,3.683-1.932,23.136,23.136,0,0,0,4.055-7.2c.5-1.861.251-4.745-.269-2.036-.533,2.781-2.893,7.336-5.091,7.064M10.523,26.362A2.778,2.778,0,0,0,12.5,22.99c-.165-1.276-.861,1.584-2.15,2.012-1.953.648-1.733,1.861.176,1.361m-4.978-10.2c.663-.173,1.54-1.077,1.1-1.767-.537-.85-2.033-.122-2.084.824s.277,1.127.979.943" style="fill:#f3f3f3"/>'
|
||
},
|
||
".npmignore": {
|
||
colour: "#cb3837",
|
||
icon: '<path d="M2,10.555H30v9.335H16v1.556H9.778V19.889H2Zm1.556,7.779H6.667V13.666H8.222v4.667H9.778V12.111H3.556Zm7.778-6.223v7.779h3.111V18.334h3.111V12.111Zm3.111,1.556H16v3.112H14.444Zm4.667-1.556v6.223h3.111V13.666h1.556v4.667h1.556V13.666h1.556v4.667h1.556V12.111Z" style="fill:#cb3837"/>'
|
||
},
|
||
".properties": {
|
||
colour: "#99b8c4",
|
||
icon: '<path d="M23.265,24.381l.9-.894c4.164.136,4.228-.01,4.411-.438l1.144-2.785L29.805,20l-.093-.231c-.049-.122-.2-.486-2.8-2.965V15.5c3-2.89,2.936-3.038,2.765-3.461L28.538,9.225c-.171-.422-.236-.587-4.37-.474l-.9-.93a20.166,20.166,0,0,0-.141-4.106l-.116-.263-2.974-1.3c-.438-.2-.592-.272-3.4,2.786l-1.262-.019c-2.891-3.086-3.028-3.03-3.461-2.855L9.149,3.182c-.433.175-.586.237-.418,4.437l-.893.89c-4.162-.136-4.226.012-4.407.438L2.285,11.733,2.195,12l.094.232c.049.12.194.48,2.8,2.962l0,1.3c-3,2.89-2.935,3.038-2.763,3.462l1.138,2.817c.174.431.236.584,4.369.476l.9.935a20.243,20.243,0,0,0,.137,4.1l.116.265,2.993,1.308c.435.182.586.247,3.386-2.8l1.262.016c2.895,3.09,3.043,3.03,3.466,2.859l2.759-1.115C23.288,28.644,23.44,28.583,23.265,24.381ZM11.407,17.857a4.957,4.957,0,1,1,6.488,2.824A5.014,5.014,0,0,1,11.407,17.857Z" style="fill:#99b8c4"/>'
|
||
},
|
||
"6502 Assembly": {
|
||
colour: "#0000bf",
|
||
icon: '<defs><linearGradient id="a" x1="836.63" y1="36.205" x2="843.802" y2="14.48" gradientTransform="translate(525.922 30.249) rotate(180) scale(0.607 0.607)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#fff" stop-opacity="0.275"/></linearGradient></defs><title>file_type_assembly</title><path d="M16,2c-1.246,3.056-2,5.057-3.391,8.022A21.884,21.884,0,0,0,16.2,13.156a14.858,14.858,0,0,1-4-2.283C10.43,14.579,7.646,19.855,2,30c5.186-2.994,9.012-4.648,12.691-4.966V24.2h-.834v-.837h.834V24.2h1.675V22.521H14.691v-.834h-.834V20.013h.834v-.834h1.675v.834H17.2v.837h-.837v-.837H14.691v1.675h1.675v.834H17.2V24.2h-.837v.783c3.98.1,8.006,1.772,13.634,5.021-.863-1.589-1.636-3.021-2.372-4.385a25.526,25.526,0,0,0-4.833-3.333A14.436,14.436,0,0,1,26.65,23.8C19.17,9.872,18.565,8.02,16,2ZM10.511,19.179h1.671v.834h.837v5.021h-.837V22.521H10.511v2.512H9.673V20.013h.837Zm0,.834v1.675h1.671V20.013Zm7.526-.834h.837v.834h.837v.837h.834v-.837h.837v-.834h.837v5.855h-.837V20.85h-.837v.837h-.834V20.85h-.837v4.184h-.837Z" style="fill:#0000bf"/><path d="M23.881,18.642c-6.069-8.237-7.476-14.876-7.832-16.461A175.217,175.217,0,0,0,23.881,18.642Z" style="fill:#fff;fill-opacity:0.165680468082428"/><path d="M16.051,2.12,15.6,3.227c-.159.391-.311.765-.461,1.131s-.3.724-.448,1.077-.3.7-.448,1.053-.3.706-.465,1.066-.329.729-.506,1.111-.362.778-.561,1.193c-.028.057-.061.123-.089.181A21.872,21.872,0,0,0,16.2,13.156a14.879,14.879,0,0,1-3.989-2.276l-.14.287c-.065.133-.144.283-.212.42l-.106.219c-.878,1.793-2.006,3.984-3.524,6.822,3.551-2,7.381-4.887,14.338-2.4-.349-.661-.67-1.28-.971-1.863s-.581-1.128-.841-1.644-.5-1-.725-1.463-.433-.9-.629-1.313-.38-.818-.554-1.2-.339-.754-.5-1.118S18.047,6.9,17.9,6.546s-.291-.709-.434-1.066c-.036-.091-.073-.186-.109-.277C16.949,4.247,16.536,3.258,16.051,2.12Z" style="fill:url(#a)"/>'
|
||
},
|
||
"ActionScript": {
|
||
colour: "#c41718",
|
||
icon: '<path d="M2,15.281c1.918,0,2.11-1.055,2.11-1.918a17.119,17.119,0,0,0-.192-2.205,18.723,18.723,0,0,1-.192-2.205c0-2.4,1.63-3.452,3.836-3.452h.575V6.938H7.658c-1.534,0-2.11.767-2.11,2.205a14.412,14.412,0,0,0,.192,1.918,14.306,14.306,0,0,1,.192,2.014c0,1.726-.671,2.493-1.918,2.877v.1c1.151.288,1.918,1.151,1.918,2.877a14.306,14.306,0,0,1-.192,2.014,13,13,0,0,0-.192,1.918c0,1.438.575,2.3,2.11,2.3h.479V26.6H7.562c-2.205,0-3.836-.959-3.836-3.644a18.723,18.723,0,0,1,.192-2.205,15.68,15.68,0,0,0,.192-2.11c0-.863-.288-1.918-2.11-1.918Z" style="fill:#c41718"/><path d="M9.479,18.062,8.233,21.8H6.6L10.63,9.911h1.822L16.479,21.8H14.945L13.7,18.062Zm3.932-1.151L12.26,13.459a9.364,9.364,0,0,1-.575-2.205h0c-.192.671-.384,1.438-.575,2.11L9.959,16.815h3.452Z" style="fill:#c41718"/><path d="M17.918,19.979a5.941,5.941,0,0,0,2.781.767c1.534,0,2.493-.863,2.493-2.014s-.671-1.726-2.205-2.4c-1.918-.671-3.164-1.726-3.164-3.356,0-1.822,1.534-3.26,3.836-3.26a5.135,5.135,0,0,1,2.589.575l-.384,1.247a5.519,5.519,0,0,0-2.3-.479c-1.63,0-2.205.959-2.205,1.822,0,1.151.767,1.63,2.4,2.3,2.014.767,3.068,1.726,3.068,3.452,0,1.822-1.342,3.452-4.123,3.452a5.807,5.807,0,0,1-3.068-.767Z" style="fill:#c41718"/><path d="M30,16.623c-1.918,0-2.11,1.151-2.11,1.918a15.68,15.68,0,0,0,.192,2.11,15.738,15.738,0,0,1,.192,2.205c0,2.685-1.63,3.644-3.836,3.644h-.575V25.062h.479c1.438,0,2.11-.863,2.11-2.3a13,13,0,0,0-.192-1.918,14.306,14.306,0,0,1-.192-2.014c0-1.726.767-2.589,1.918-2.877v-.1c-1.151-.288-1.918-1.151-1.918-2.877a14.306,14.306,0,0,1,.192-2.014,13,13,0,0,0,.192-1.918c0-1.438-.575-2.205-2.11-2.3h-.479V5.4h.575c2.205,0,3.836,1.055,3.836,3.452a17.119,17.119,0,0,1-.192,2.205,17.119,17.119,0,0,0-.192,2.205c0,.959.288,1.918,2.11,1.918Z" style="fill:#c41718"/>'
|
||
},
|
||
"Ada": {
|
||
colour: "#0f23c3",
|
||
icon: '<path d="M24.554,20.075c.209.27,1.356.961,1.37,1.246a6.921,6.921,0,0,0-1.4-.324c-.468-.142-.951-.293-1.412-.48a9.2,9.2,0,0,1-2.375-1.3A3.146,3.146,0,0,1,19.3,16.75a1.722,1.722,0,0,1,1.767-1.822,3.584,3.584,0,0,1,1.593.321c.146.066,1.31.606,1.256.809a5.5,5.5,0,0,0-1.41-.112c-.649.244-.4.828-.168,1.311a7.877,7.877,0,0,0,1.078,1.554C23.58,19.005,24.3,20.082,24.554,20.075Z" style="fill:#0f23c3"/><path d="M24.141,16.276c.128-.59.819-1.384,1.344-.773a4.2,4.2,0,0,1,.578,1.918c.12.656.2,1.327.261,1.982.038.379.34,1.794.123,2.075a23.24,23.24,0,0,1-2.922-2.838,3.763,3.763,0,0,1-.925-1.7C22.5,15.867,23.479,16.21,24.141,16.276Z" style="fill:#1a1978"/><path d="M26.3,17.781c.141-.732-.406-2.592-1.067-2.949a.06.06,0,0,0,.044-.007c-.156-.444-1.359,1.116-1.228,1.174-.316-.138.774-1.984.988-2.16.7-.578,1.372-.086,1.845.543a6.036,6.036,0,0,1,.733,4.434,4.5,4.5,0,0,1-.421,1.312c-.1.22-.45,1.1-.682,1.174A14.754,14.754,0,0,0,26.3,17.781Z" style="fill:#0f23c3"/><path d="M3.687,8.4c.179-.188-.041-1.527.324-1.548.262-.015.553,1.741.627,1.968a9.2,9.2,0,0,0,1.127,2.329,7.529,7.529,0,0,0,4.016,2.978,4.55,4.55,0,0,0,2.366.2c.931-.208,1.82-.577,2.757-.765,1.35-.27,3.342-.352,4.438.647.7.641.376.76.043,1.421a2.445,2.445,0,0,0,.178,2.562c.235.342,1.033.827.675,1.094-.567.424-1.277-.452-1.636-.776-1.4-1.264-2.711-1.313-4.492-1.074a8.987,8.987,0,0,1-4.883-.708A9.469,9.469,0,0,1,3.687,8.4Z" style="fill:#d2d2d2"/><path d="M19.941,30a3.615,3.615,0,0,1-2.325-.817c.469-.092,1.021.025,1.508-.044a9.7,9.7,0,0,0,1.754-.43A10.537,10.537,0,0,0,23.9,27.155a6.55,6.55,0,0,0,2.757-5.214c.149-.088.316,1.034.319,1.091a5.789,5.789,0,0,1-.19,1.727,6.867,6.867,0,0,1-1.423,2.774A7.286,7.286,0,0,1,19.941,30Z" style="fill:#d2d2d2"/><path d="M18.962,19.109a5.76,5.76,0,0,1-2.05.859,13.38,13.38,0,0,1-2.224.549,8.861,8.861,0,0,1-4.435-.51,9.939,9.939,0,0,1-3.849-2.4C6.052,17.24,4.3,15.19,4.856,14.557c.248-.282.875.846,1,.992a5,5,0,0,0,1.357,1.11,10.917,10.917,0,0,0,4.035,1.456,6.693,6.693,0,0,0,2.34-.094,12.743,12.743,0,0,1,1.694-.485,4,4,0,0,1,2.113.457C17.739,18.163,18.918,18.736,18.962,19.109Z" style="fill:#d2d2d2"/><path d="M28.313,15.078a19.277,19.277,0,0,1-.453,3.774c-.176-.242.016-1.47,0-1.792a6.032,6.032,0,0,0-.384-2.087A4.925,4.925,0,0,0,26.1,13.312a14.728,14.728,0,0,1-1.27-1.536c-1.837-2.382-3.245-5.211-2.9-8.3.034-.308.069-1.448.411-1.445.152,0,.266,1.561.29,1.718a12.527,12.527,0,0,0,1.224,4.116c.67,1.222,1.947,2.023,2.825,3.1A6.579,6.579,0,0,1,28.313,15.078Z" style="fill:#d2d2d2"/><path d="M15.7,26.935a10.845,10.845,0,0,0,6.436-.687,6.941,6.941,0,0,0,4.278-4.418c.319.2-.048,1.529-.128,1.781a5.726,5.726,0,0,1-1.01,1.813,8.933,8.933,0,0,1-3.257,2.514C20.316,28.71,16.357,29.59,15.7,26.935Z" style="fill:#d2d2d2"/><path d="M19.151,19.376c.367,2.107-2.957,3.124-4.478,3.213-1.859.11-4.929-.292-6.06-2.031-.673-1.035.781-.09,1.188.058a8.663,8.663,0,0,0,3.06.5,11.6,11.6,0,0,0,3.305-.5,13.725,13.725,0,0,0,1.533-.576C18,19.908,18.823,19.349,19.151,19.376Z" style="fill:#d2d2d2"/><path d="M24.142,23.46c.4-.945-1.883-1.578-2.445-1.858a4.857,4.857,0,0,1-1.315-.867c-.181-.181-.872-.92-.807-1.219a4.912,4.912,0,0,1,1.087-.175,5.93,5.93,0,0,1,.855.588,10.323,10.323,0,0,0,.964.5A15.615,15.615,0,0,0,24.6,21.2c.308.09,1.549.208,1.727.428C26.287,21.924,24.357,23.649,24.142,23.46Z" style="fill:#d2d2d2"/><path d="M26.1,22.172c.265.43-1.08,1.831-1.363,2.105a9.34,9.34,0,0,1-2.566,1.728,7.748,7.748,0,0,1-2.56.753c-.679.058-1.966-.124-2.141-.979a6.951,6.951,0,0,1,1.177-.086c.462-.059.921-.149,1.376-.246a13.065,13.065,0,0,0,2.184-.645,11.506,11.506,0,0,0,2.084-1.11,10.872,10.872,0,0,0,1.078-.822C25.474,22.781,25.986,22.168,26.1,22.172Z" style="fill:#d2d2d2"/><path d="M18.758,11.965c-.1-1.308,2.612-1.3,3.271-1.092a5.976,5.976,0,0,1,2.982,2.475c-1.082.8-2.449.094-3.3-.654a4.324,4.324,0,0,0-1.481-1.029C19.421,11.4,19.412,11.759,18.758,11.965Z" style="fill:#d2d2d2"/><path d="M25.783,13.341c-.444-.029-.316.071-.647-.212-.358-.307-.614-.795-.945-1.141-.534-.558-1.242-.895-1.723-1.485a7.269,7.269,0,0,1-1.624-4.848c.018-1.489.407.187.551.675a12.276,12.276,0,0,0,1.126,2.708,46.055,46.055,0,0,0,3.4,4.321C25.882,13.361,25.824,13.338,25.783,13.341Z" style="fill:#d2d2d2"/><path d="M20.068,14.756c.033-.625-.911-.792-1.211-1.42-.164-.343-.211-.569.029-.7.082-.045.383.012.5-.02.271-.076.335-.273.581-.4A1.193,1.193,0,0,1,21.6,13.237,1.821,1.821,0,0,1,20.068,14.756Z" style="fill:#d2d2d2"/><path d="M20.5,14.745a1.931,1.931,0,0,0,1.323-1.7c.524.139.928.658,1.521.771a2.584,2.584,0,0,0,1.029-.017c.207-.045.54-.274.721-.259-.033.163-.464.546-.565.717a4.242,4.242,0,0,0-.388.9c-.229.741-.061.739-.709.311a4.284,4.284,0,0,0-1.957-.72C21.209,14.722,20.594,14.767,20.5,14.745Z" style="fill:#d2d2d2"/><path d="M19.905,20.734a2.008,2.008,0,0,1-1.4,1.712c-.205.091-2.018.733-2.032.348-.007-.2,1.624-.954,1.809-1.11a3.355,3.355,0,0,0,.867-1.071c.055-.112.232-.925.271-.943C19.644,19.564,19.908,20.6,19.905,20.734Z" style="fill:#d2d2d2"/><path d="M11.373,12.532a10.625,10.625,0,0,1,3.71-.914,10.282,10.282,0,0,1,1.865.024c.366.039,1.469.054,1.74.343a.255.255,0,0,1-.273.173c-.037.077.251.371.3.425-.034.034-1.445-.4-1.572-.424a10.632,10.632,0,0,0-2.282-.134,16,16,0,0,0-1.841.194A6.224,6.224,0,0,1,11.373,12.532Z" style="fill:#d2d2d2"/><path d="M22.512,10.731a1.888,1.888,0,0,1-1.517-.6c-.247-.349-.737-1.692-.385-2.021.209-.2.384.662.484.846A10.822,10.822,0,0,0,22.512,10.731Z" style="fill:#d2d2d2"/><path d="M27.788,19.2a19.212,19.212,0,0,1-.749,3.313c-.173-.077-.275-.778-.562-.95a4.07,4.07,0,0,0,.76-1.154C27.389,20.107,27.54,19.363,27.788,19.2Z" style="fill:#d2d2d2"/><path d="M19.981,11.843c-.132.268-.932,1.1-1.118.481C18.756,11.968,19.739,11.483,19.981,11.843Zm-.747.45c.228.006.012-.248.012-.266C19.245,11.984,18.878,12.293,19.234,12.293Z" style="fill:#d2d2d2"/>',
|
||
inlineComment: [
|
||
"--"
|
||
]
|
||
},
|
||
"AL": {
|
||
colour: "#2ea98e",
|
||
icon: '<path d="M11.616,7.986A1.559,1.559,0,0,0,10.16,7H10.1a1.558,1.558,0,0,0-1.456.986L2,25H5.806l1.015-2.834h6.621L14.457,25h3.8ZM7.944,18.956l2.188-6.111,2.188,6.116Z" style="fill:#2ea98e"/><path d="M23.829,21.671V7.129H20.3V22.747A2.346,2.346,0,0,0,22.57,25H30V21.672Z" style="fill:#2ea98e"/>'
|
||
},
|
||
"ANTLR4": {
|
||
colour: "#e44a32",
|
||
icon: '<path d="M14.177,7.278a2.08,2.08,0,0,1,3.041-.8A3.571,3.571,0,0,1,18.2,8.022c1.356,3.122,2.9,6.165,4.119,9.345.645,1.5,1.429,2.938,1.994,4.468a1.455,1.455,0,0,1-2.258,1.376c-2.8-1.572-5.628-3.094-8.385-4.731,2.009.008,4.018-.008,6.025.013a19.707,19.707,0,0,0-1.288-2.918c-.781-1.858-1.6-3.7-2.358-5.565a9.783,9.783,0,0,0-1.032,2.125c-1.3,3.182-2.87,6.241-4.136,9.435-.281.59-.424,1.344-1.035,1.69a1.447,1.447,0,0,1-2.094-.738c-.241-.61.151-1.2.382-1.743.779-1.725,1.645-3.413,2.283-5.2C11.65,12.8,12.916,10.041,14.177,7.278Z" style="fill:#fefefe"/><path d="M13.817,2.2A13.923,13.923,0,0,1,29.526,12.549a13.733,13.733,0,0,1-2.082,11.519A14.074,14.074,0,0,1,7.738,27.293a13.852,13.852,0,0,1-5.615-9.483A14.152,14.152,0,0,1,3.451,9.85,13.961,13.961,0,0,1,13.817,2.2m.359,5.08c-1.261,2.762-2.526,5.525-3.762,8.3-.638,1.786-1.5,3.473-2.283,5.2-.231.542-.623,1.133-.382,1.743a1.447,1.447,0,0,0,2.094.738c.61-.347.753-1.1,1.035-1.69,1.266-3.194,2.833-6.253,4.136-9.435a9.783,9.783,0,0,1,1.032-2.125c.756,1.868,1.577,3.707,2.358,5.565a19.707,19.707,0,0,1,1.288,2.918c-2.007-.02-4.016-.005-6.025-.013,2.757,1.637,5.588,3.159,8.385,4.731a1.455,1.455,0,0,0,2.258-1.376c-.565-1.529-1.349-2.971-1.994-4.468-1.22-3.179-2.762-6.223-4.119-9.345a3.571,3.571,0,0,0-.982-1.544A2.08,2.08,0,0,0,14.177,7.278Z" style="fill:#e44a32"/>'
|
||
},
|
||
"Apache Configuration": {
|
||
colour: "#c92037",
|
||
icon: '<defs><linearGradient id="a" x1="-5602.682" y1="768.541" x2="-5598.727" y2="763.917" gradientTransform="matrix(0.423, -0.906, -0.906, -0.423, 3082.853, -4748.551)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f69923"/><stop offset="0.312" stop-color="#f79a23"/><stop offset="0.838" stop-color="#e97826"/></linearGradient><linearGradient id="b" x1="-5631.952" y1="769.052" x2="-5603.737" y2="769.052" gradientTransform="matrix(0.423, -0.906, -0.906, -0.423, 3082.853, -4748.551)" gradientUnits="userSpaceOnUse"><stop offset="0.323" stop-color="#9e2064"/><stop offset="0.63" stop-color="#c92037"/><stop offset="0.751" stop-color="#cd2335"/><stop offset="1" stop-color="#e97826"/></linearGradient><linearGradient id="c" x1="-5628.546" y1="766.221" x2="-5611.733" y2="766.221" gradientTransform="matrix(0.423, -0.906, -0.906, -0.423, 3082.853, -4748.551)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#282662"/><stop offset="0.095" stop-color="#662e8d"/><stop offset="0.788" stop-color="#9f2064"/><stop offset="0.949" stop-color="#cd2032"/></linearGradient><linearGradient id="d" x1="-5630.367" y1="769.316" x2="-5602.152" y2="769.316" xlink:href="#b"/><linearGradient id="e" x1="-5628.31" y1="768.933" x2="-5613.482" y2="768.933" xlink:href="#c"/><linearGradient id="f" x1="-5630.367" y1="766.394" x2="-5602.152" y2="766.394" xlink:href="#b"/><linearGradient id="g" x1="-5632.118" y1="766.539" x2="-5603.902" y2="766.539" xlink:href="#b"/><linearGradient id="h" x1="-5630.367" y1="765.526" x2="-5602.152" y2="765.526" xlink:href="#b"/><linearGradient id="i" x1="-5630.367" y1="765.625" x2="-5602.152" y2="765.625" xlink:href="#b"/><linearGradient id="j" x1="-5614.516" y1="765.645" x2="-5608.28" y2="765.645" xlink:href="#b"/></defs><title>file_type_apache</title><path d="M19.993,2.133a10.267,10.267,0,0,0-2.04,2.056l.8,1.51a19.733,19.733,0,0,1,1.708-2.144c.044-.049.068-.072.068-.072l-.068.072a17.865,17.865,0,0,0-1.6,2.174,30.1,30.1,0,0,0,3.111-.385,3.288,3.288,0,0,0-.3-2.5S20.9,1.6,19.993,2.133Z" style="fill:url(#a)"/><path d="M18.638,10.749l.018,0-.115.013-.021.009Z" style="fill:none"/><path d="M17.821,13.455c-.066.015-.132.026-.2.036C17.689,13.481,17.756,13.469,17.821,13.455Z" style="fill:none"/><path d="M12.27,19.524c.009-.023.017-.045.025-.068q.264-.7.523-1.357.291-.741.575-1.436.3-.733.59-1.418.305-.718.6-1.384.24-.542.474-1.049.078-.169.155-.335.153-.329.3-.645.138-.291.274-.57c.03-.062.06-.123.09-.185l.015-.03-.1.011-.078-.154c-.007.015-.015.03-.023.045q-.211.418-.417.845-.119.246-.238.495-.328.689-.645,1.389T13.766,15.1q-.3.7-.594,1.4t-.567,1.387q-.289.72-.562,1.426-.062.159-.123.318-.219.569-.426,1.124l.123.243.11-.012.012-.033Q12.008,20.216,12.27,19.524Z" style="fill:none"/><path d="M17.57,13.5Z" style="fill:none"/><path d="M17.305,14.818l-.315.055h0l.161-.025C17.2,14.839,17.253,14.829,17.305,14.818Z" style="fill:#be202e"/><path d="M17.305,14.818l-.315.055h0l.161-.025C17.2,14.839,17.253,14.829,17.305,14.818Z" style="fill:#be202e;opacity:0.3499999940395355;isolation:isolate"/><path d="M17.573,13.5h0l.05-.007c.068-.01.135-.022.2-.036l-.248.042Z" style="fill:#be202e"/><path d="M17.573,13.5h0l.05-.007c.068-.01.135-.022.2-.036l-.248.042Z" style="fill:#be202e;opacity:0.3499999940395355;isolation:isolate"/><path d="M16.394,9.6q.365-.682.739-1.332.388-.674.784-1.305l.046-.075q.392-.62.79-1.191l-.8-1.51-.182.225c-.231.288-.47.6-.716.925-.277.37-.562.764-.851,1.179-.267.383-.538.784-.809,1.2-.231.353-.462.717-.692,1.09l-.026.042L15.718,10.9Q16.052,10.244,16.394,9.6Z" style="fill:url(#b)"/><path d="M11.651,21.192q-.207.568-.415,1.159l-.006.017-.059.167c-.093.266-.175.5-.361,1.049a2.107,2.107,0,0,1,.786.926,1.68,1.68,0,0,0-.544-1.154,3.621,3.621,0,0,0,3.489-1.42,2.791,2.791,0,0,0,.165-.313,1.451,1.451,0,0,1-1.4.513l0,0,0,0a4.059,4.059,0,0,0,2.046-1.672c.111-.178.218-.372.328-.587a3.3,3.3,0,0,1-3.109,1.01l-.842.092C11.7,21.05,11.677,21.121,11.651,21.192Z" style="fill:url(#c)"/><path d="M12.044,19.306q.273-.706.562-1.426.276-.69.567-1.387t.594-1.4q.308-.711.629-1.419t.645-1.389q.118-.248.238-.495.207-.426.417-.845c.007-.015.015-.03.023-.045L14.677,8.847l-.051.083c-.242.4-.484.8-.721,1.216s-.475.844-.7,1.276q-.291.547-.568,1.1l-.11.225c-.227.467-.432.918-.617,1.352q-.315.737-.556,1.406c-.107.293-.2.576-.292.847-.073.232-.142.464-.208.7q-.234.818-.4,1.631L11.5,20.748q.208-.554.426-1.124Z" style="fill:url(#d)"/><path d="M10.435,18.755a16.07,16.07,0,0,0-.272,1.974c0,.023,0,.046-.005.069a4.15,4.15,0,0,0-1.2-1.029,5.825,5.825,0,0,1,1.172,2.693,2.642,2.642,0,0,1-1.325-.226,2.662,2.662,0,0,0,1.13.686,3.247,3.247,0,0,0-1.571.783,3.359,3.359,0,0,1,1.861-.342C9.51,25.389,8.793,27.626,8.076,30a.625.625,0,0,0,.425-.413c.128-.43.976-3.251,2.306-6.959l.115-.318.032-.089q.211-.583.437-1.19l.1-.277,0-.005L10.45,18.684C10.445,18.707,10.439,18.731,10.435,18.755Z" style="fill:url(#e)"/><path d="M15.88,11.078l-.09.185q-.135.279-.274.57-.15.315-.3.645c-.052.111-.1.222-.155.335q-.234.508-.474,1.049-.3.666-.6,1.384-.291.685-.59,1.418-.284.7-.575,1.436-.259.661-.523,1.357c-.009.023-.017.045-.025.068q-.262.693-.529,1.422l-.012.033.842-.092-.05-.009a6,6,0,0,0,3.21-1.807,7.984,7.984,0,0,0,1.1-1.524,13.139,13.139,0,0,0,.706-1.467c.195-.472.382-.982.562-1.536a3.053,3.053,0,0,1-.788.274c-.051.011-.1.021-.156.03s-.107.018-.161.025h0a3.668,3.668,0,0,0,1.962-1.913,3.344,3.344,0,0,1-1.13.495c-.066.015-.132.026-.2.036l-.05.007h0a3.821,3.821,0,0,0,.839-.469c.051-.038.1-.078.148-.12.073-.063.142-.129.208-.2.042-.044.083-.09.123-.138a3.27,3.27,0,0,0,.263-.362c.025-.04.05-.08.074-.122.031-.06.061-.119.09-.178.131-.264.236-.5.319-.706.042-.1.078-.2.109-.288.013-.035.025-.07.036-.1.033-.1.06-.187.081-.265a2.605,2.605,0,0,0,.062-.275h0a1.01,1.01,0,0,1-.109.075,3.965,3.965,0,0,1-1.162.4l.773-.085-.773.085-.018,0-.119.019.021-.009-2.645.29Z" style="fill:url(#f)"/><path d="M18.858,5.73c-.235.361-.492.771-.768,1.236l-.044.074q-.358.6-.759,1.327-.346.626-.719,1.347-.326.629-.672,1.336l2.645-.29A3.216,3.216,0,0,0,19.99,9.62c.089-.128.178-.262.267-.4.272-.424.538-.891.776-1.355a14.074,14.074,0,0,0,.588-1.294,6.8,6.8,0,0,0,.233-.7c.048-.184.086-.358.115-.524A30.152,30.152,0,0,1,18.858,5.73Z" style="fill:url(#g)"/><path d="M17.149,14.848c-.053.009-.107.018-.161.025h0C17.042,14.866,17.1,14.857,17.149,14.848Z" style="fill:#be202e"/><path d="M17.149,14.848c-.053.009-.107.018-.161.025h0C17.042,14.866,17.1,14.857,17.149,14.848Z" style="fill:#be202e;opacity:0.3499999940395355;isolation:isolate"/><path d="M17.149,14.848c-.053.009-.107.018-.161.025h0C17.042,14.866,17.1,14.857,17.149,14.848Z" style="fill:url(#h)"/><path d="M17.57,13.5l.05-.007-.05.007Z" style="fill:#be202e"/><path d="M17.57,13.5l.05-.007-.05.007Z" style="fill:#be202e;opacity:0.3499999940395355;isolation:isolate"/><path d="M17.57,13.5l.05-.007-.05.007Z" style="fill:url(#i)"/><path d="M17.572,13.5h0Z" style="fill:#be202e"/><path d="M17.572,13.5h0Z" style="fill:#be202e;opacity:0.3499999940395355;isolation:isolate"/><path d="M17.572,13.5h0Z" style="fill:url(#j)"/>'
|
||
},
|
||
"Apex": {
|
||
colour: "#0f9bd7",
|
||
icon: '<path d="M13.652,8.338A4.906,4.906,0,0,1,17.2,6.814a4.957,4.957,0,0,1,4.32,2.56,5.972,5.972,0,0,1,2.442-.519,6.089,6.089,0,1,1-1.189,12.06,4.412,4.412,0,0,1-5.782,1.816A5.034,5.034,0,0,1,7.634,22.5a4.646,4.646,0,0,1-.96.1,4.732,4.732,0,0,1-2.337-8.812,5.438,5.438,0,0,1,9.315-5.453" style="fill:#0f9bd7"/><path d="M25.376,30.966h-.561a4.658,4.658,0,0,1-1.284-.137,1.9,1.9,0,0,1-.818-.482,1.726,1.726,0,0,1-.455-.843,6.77,6.77,0,0,1-.106-1.413,5.889,5.889,0,0,0-.084-1.33,1,1,0,0,0-.3-.544,1.223,1.223,0,0,0-.66-.179l-.236-.014V24.145l.236-.014a1.482,1.482,0,0,0,.549-.1.706.706,0,0,0,.273-.264,1.394,1.394,0,0,0,.181-.529,6.683,6.683,0,0,0,.044-.939,8.132,8.132,0,0,1,.112-1.643,1.7,1.7,0,0,1,.448-.841,2.144,2.144,0,0,1,.906-.492,4.514,4.514,0,0,1,1.2-.116h.561v1.9h-.25a2.589,2.589,0,0,0-.743.056.284.284,0,0,0-.148.117.839.839,0,0,0-.054.386q0,.372-.053,1.413a3.74,3.74,0,0,1-.166,1.009,1.945,1.945,0,0,1-.693,1,2.01,2.01,0,0,1,.7,1.044,4.627,4.627,0,0,1,.163,1.079c.027.657.041,1.074.041,1.256a.871.871,0,0,0,.057.408A.343.343,0,0,0,24.4,29a2.382,2.382,0,0,0,.728.06h.25Z" style="fill:#fff"/><path d="M21.118,25.788V24.382a1.752,1.752,0,0,0,.645-.129.936.936,0,0,0,.375-.354,1.621,1.621,0,0,0,.217-.624A6.88,6.88,0,0,0,22.4,22.3a8,8,0,0,1,.105-1.585,1.456,1.456,0,0,1,.381-.721,1.9,1.9,0,0,1,.8-.431,4.336,4.336,0,0,1,1.125-.105h.311v1.4a2.876,2.876,0,0,0-.835.073.53.53,0,0,0-.272.223,1.079,1.079,0,0,0-.088.513q0,.369-.053,1.4a3.531,3.531,0,0,1-.152.94,1.918,1.918,0,0,1-.313.595,2.47,2.47,0,0,1-.583.486,2.045,2.045,0,0,1,.565.466,1.869,1.869,0,0,1,.337.647,4.41,4.41,0,0,1,.152,1.02q.041.973.041,1.242a1.1,1.1,0,0,0,.094.539.584.584,0,0,0,.284.231,2.649,2.649,0,0,0,.823.079v1.406h-.311A4.474,4.474,0,0,1,23.6,30.59a1.644,1.644,0,0,1-.712-.419,1.478,1.478,0,0,1-.39-.724,6.621,6.621,0,0,1-.1-1.356,6.374,6.374,0,0,0-.094-1.4,1.232,1.232,0,0,0-.39-.671A1.431,1.431,0,0,0,21.118,25.788Z" style="fill:#0072a0"/><path d="M27.011,30.966H26.45V29.059h.25A2.329,2.329,0,0,0,27.426,29a.323.323,0,0,0,.165-.127.812.812,0,0,0,.058-.379q0-.36.05-1.375a3.725,3.725,0,0,1,.173-1.047,2.223,2.223,0,0,1,.387-.7,2.145,2.145,0,0,1,.3-.292,2.141,2.141,0,0,1-.4-.4,2.612,2.612,0,0,1-.421-1.092,17.525,17.525,0,0,1-.1-1.841,1.357,1.357,0,0,0-.053-.479c-.008-.016-.031-.062-.136-.106a2.524,2.524,0,0,0-.757-.06h-.25V19.2h.561a4.793,4.793,0,0,1,1.283.133,1.841,1.841,0,0,1,.818.485,1.781,1.781,0,0,1,.453.843,6.6,6.6,0,0,1,.109,1.414,6.359,6.359,0,0,0,.079,1.336.992.992,0,0,0,.3.537,1.226,1.226,0,0,0,.664.18l.236.014v1.879l-.236.014a1.482,1.482,0,0,0-.549.1.686.686,0,0,0-.27.262,1.484,1.484,0,0,0-.186.534,6.743,6.743,0,0,0-.043.931,8.383,8.383,0,0,1-.108,1.644,1.694,1.694,0,0,1-.446.846,2.143,2.143,0,0,1-.913.492A4.5,4.5,0,0,1,27.011,30.966Z" style="fill:#fff"/><path d="M30.708,25.788a1.752,1.752,0,0,0-.645.129.918.918,0,0,0-.372.354,1.725,1.725,0,0,0-.22.624,6.82,6.82,0,0,0-.047.973,8.27,8.27,0,0,1-.1,1.588,1.439,1.439,0,0,1-.378.724,1.9,1.9,0,0,1-.809.431,4.336,4.336,0,0,1-1.125.105H26.7V29.31a2.652,2.652,0,0,0,.82-.079A.572.572,0,0,0,27.8,29,1.05,1.05,0,0,0,27.9,28.5q0-.357.05-1.365a3.53,3.53,0,0,1,.158-.976,1.976,1.976,0,0,1,.343-.621A2.038,2.038,0,0,1,29,25.085a2.416,2.416,0,0,1-.633-.551,2.339,2.339,0,0,1-.375-.984,17.564,17.564,0,0,1-.094-1.8,1.571,1.571,0,0,0-.079-.586.487.487,0,0,0-.264-.226,2.8,2.8,0,0,0-.853-.079v-1.4h.311a4.576,4.576,0,0,1,1.213.123,1.587,1.587,0,0,1,.709.419,1.529,1.529,0,0,1,.39.727,6.436,6.436,0,0,1,.1,1.356,6.842,6.842,0,0,0,.088,1.4,1.223,1.223,0,0,0,.393.671,1.447,1.447,0,0,0,.8.231Z" style="fill:#0072a0"/>'
|
||
},
|
||
"APL": {
|
||
colour: "#d2d2d2",
|
||
icon: '<path d="M30,28.275,16,2,2,28.275H14.162V30h3.676V28.275ZM17.838,24.826V13.161l6.215,11.665Zm-9.891,0,6.215-11.665V24.826Z" style="fill:#d2d2d2"/>',
|
||
inlineComment: [
|
||
"\u235D"
|
||
]
|
||
},
|
||
"AppleScript": {
|
||
colour: "#a8c2ab",
|
||
icon: '<path d="M17.181,4.437A5.993,5.993,0,0,1,21.579,2a5.979,5.979,0,0,1-1.447,4.476,4.729,4.729,0,0,1-4.17,1.961A5.2,5.2,0,0,1,17.181,4.437Z" style="fill:#a8c2ab"/><path d="M16.2,10.034c.946,0,2.7-1.3,4.989-1.3a6.249,6.249,0,0,1,5.484,2.8,6.08,6.08,0,0,0-3.028,5.3,6.235,6.235,0,0,0,3.772,5.7s-2.637,7.422-6.2,7.422c-1.636,0-2.908-1.1-4.631-1.1-1.757,0-3.5,1.144-4.635,1.144C8.7,30,4.587,22.959,4.587,17.3c0-5.568,3.478-8.489,6.74-8.489C13.448,8.811,15.093,10.034,16.2,10.034Z" style="fill:#a8c2ab"/>',
|
||
inlineComment: [
|
||
"--",
|
||
"#"
|
||
]
|
||
},
|
||
"Arduino": {
|
||
colour: "#2d9094",
|
||
icon: '<defs><radialGradient id="a" cx="767.179" cy="5169.543" r="14.989" gradientTransform="translate(-718.112 -4953.917) scale(0.955 0.962)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#36bac0"/><stop offset="1" stop-color="#2d9094"/></radialGradient></defs><title>file_type_arduino</title><path d="M29.645,15.925A13.77,13.77,0,1,1,15.876,2.056,13.819,13.819,0,0,1,29.645,15.925Z" style="stroke:#02797e;stroke-linejoin:round;stroke-width:1.1367228454969267px;fill:url(#a)"/><path d="M10.581,11.648c2.41-.076,3.359.834,4.605,2.069.285.282.579.59.9.921l.922-.991a6.223,6.223,0,0,1,3.256-1.93c1.939-.211,3.119-.122,4.311.814a5.023,5.023,0,0,1,2.245,3.9,5.653,5.653,0,0,1-3.25,5.156,5.975,5.975,0,0,1-3.913.135,7.656,7.656,0,0,1-3.541-2.987c-1.678,2.142-3.187,3.253-5.235,3.155-7.452-.354-6.842-10.075-.3-10.247Zm1.657,7.994a9.193,9.193,0,0,0,2.856-2.9c-.74-1.243-2.209-2.824-3.455-3.134a4.328,4.328,0,0,0-3.224.777,3.384,3.384,0,0,0-.762,3.686,3.674,3.674,0,0,0,4.585,1.57Zm-2.98-3.487,3.278.005v1.21l-3.283.005Zm13.448,3.6A3.843,3.843,0,0,0,24.937,17a3.458,3.458,0,0,0-1.863-3.109,3.648,3.648,0,0,0-4.2.728,7.364,7.364,0,0,0-1.649,2.151A8.936,8.936,0,0,0,19.2,19.252,4.022,4.022,0,0,0,22.706,19.754Zm-1.955-2.376-1.088-.008,0-1.217,1.091,0V15.075l1.107-.008-.007,1.093,1.085,0v1.165l-1.021-.008v1.12H20.753Z" style="stroke:#000;stroke-width:0.12103096480927482px;opacity:0.1680999994277954;isolation:isolate"/><path d="M4.917,16.337c0,5.348,7.354,7.34,10.987,1.894,3.765,5.647,10.824,3.28,10.824-1.9S19.7,8.656,15.9,14.441c-3.6-5.719-10.987-3.453-10.987,1.9Zm1.931,0c0-3.86,5.455-5.078,7.992,0-2.588,4.889-7.992,3.859-7.992,0Zm10.119,0c2.286-5.178,7.889-3.751,7.872.008S19.186,21.277,16.967,16.337Z" style="fill:#fff;stroke:#000;stroke-width:0.24206192961854964px"/><rect x="8.898" y="15.795" width="3.237" height="1.067" style="fill:#fff"/><polygon points="20.644 16.846 19.576 16.846 19.576 15.712 20.644 15.712 20.644 14.644 21.779 14.644 21.779 15.712 22.847 15.712 22.847 16.846 21.779 16.846 21.779 17.914 20.644 17.914 20.644 16.846" style="fill:#fff"/>'
|
||
},
|
||
"ARM Assembly": {
|
||
colour: "#0000bf",
|
||
icon: '<defs><linearGradient id="a" x1="836.63" y1="36.205" x2="843.802" y2="14.48" gradientTransform="translate(525.922 30.249) rotate(180) scale(0.607 0.607)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset="1" stop-color="#fff" stop-opacity="0.275"/></linearGradient></defs><title>file_type_assembly</title><path d="M16,2c-1.246,3.056-2,5.057-3.391,8.022A21.884,21.884,0,0,0,16.2,13.156a14.858,14.858,0,0,1-4-2.283C10.43,14.579,7.646,19.855,2,30c5.186-2.994,9.012-4.648,12.691-4.966V24.2h-.834v-.837h.834V24.2h1.675V22.521H14.691v-.834h-.834V20.013h.834v-.834h1.675v.834H17.2v.837h-.837v-.837H14.691v1.675h1.675v.834H17.2V24.2h-.837v.783c3.98.1,8.006,1.772,13.634,5.021-.863-1.589-1.636-3.021-2.372-4.385a25.526,25.526,0,0,0-4.833-3.333A14.436,14.436,0,0,1,26.65,23.8C19.17,9.872,18.565,8.02,16,2ZM10.511,19.179h1.671v.834h.837v5.021h-.837V22.521H10.511v2.512H9.673V20.013h.837Zm0,.834v1.675h1.671V20.013Zm7.526-.834h.837v.834h.837v.837h.834v-.837h.837v-.834h.837v5.855h-.837V20.85h-.837v.837h-.834V20.85h-.837v4.184h-.837Z" style="fill:#0000bf"/><path d="M23.881,18.642c-6.069-8.237-7.476-14.876-7.832-16.461A175.217,175.217,0,0,0,23.881,18.642Z" style="fill:#fff;fill-opacity:0.165680468082428"/><path d="M16.051,2.12,15.6,3.227c-.159.391-.311.765-.461,1.131s-.3.724-.448,1.077-.3.7-.448,1.053-.3.706-.465,1.066-.329.729-.506,1.111-.362.778-.561,1.193c-.028.057-.061.123-.089.181A21.872,21.872,0,0,0,16.2,13.156a14.879,14.879,0,0,1-3.989-2.276l-.14.287c-.065.133-.144.283-.212.42l-.106.219c-.878,1.793-2.006,3.984-3.524,6.822,3.551-2,7.381-4.887,14.338-2.4-.349-.661-.67-1.28-.971-1.863s-.581-1.128-.841-1.644-.5-1-.725-1.463-.433-.9-.629-1.313-.38-.818-.554-1.2-.339-.754-.5-1.118S18.047,6.9,17.9,6.546s-.291-.709-.434-1.066c-.036-.091-.073-.186-.109-.277C16.949,4.247,16.536,3.258,16.051,2.12Z" style="fill:url(#a)"/>'
|
||
},
|
||
"AsciiDoc": {
|
||
colour: "#e40046",
|
||
icon: '<path d="M30,30H2V2H30Z" style="fill:#e40046"/><path d="M23.731,24.83a.589.589,0,0,1-.763-.337L16.724,9.269,13.93,15.99h1.833a.59.59,0,0,1-.024,1.18H8.9a.59.59,0,0,1,.024-1.18h3.727l0-.013L16.184,7.5a.591.591,0,0,1,.533-.363h0a.592.592,0,0,1,.557.366l6.785,16.546.009.021A.59.59,0,0,1,23.731,24.83Z" style="fill:#fff"/><path d="M14.516,18.791H7.679a.59.59,0,0,0-.024,1.18H11L9.309,24.043a.59.59,0,0,0,1.085.464l0-.011,1.875-4.509.005-.016h2.215a.59.59,0,0,0,.023-1.18Z" style="fill:#fff"/>'
|
||
},
|
||
"ASP.NET (C#)": {
|
||
colour: "#33a9dc",
|
||
icon: '<title>file_type_aspx</title><polygon points="22.75 2 6.35 2 6.35 30 29.65 30 29.65 9 22.75 2" style="fill:#c5c5c5"/><polygon points="27.35 27.7 8.75 27.7 8.75 4.3 20.45 4.3 20.45 11.3 27.45 11.3 27.45 27.7 27.35 27.7" style="fill:#f5f5f5"/><path d="M12.1,30.994A11.094,11.094,0,1,1,23.194,19.9,11.106,11.106,0,0,1,12.1,30.994Zm0-20.3A9.2,9.2,0,1,0,21.3,19.9,9.216,9.216,0,0,0,12.1,10.7Z" style="fill:#33a9dc"/><rect x="2.099" y="19.455" width="20.003" height="0.89" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/><path d="M12.325,15.763a31.93,31.93,0,0,1-8.484-1.11l.242-.807a31.374,31.374,0,0,0,15.992,0l.239.807A28.076,28.076,0,0,1,12.325,15.763Z" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/><path d="M4.1,25.724l-.239-.807a31.652,31.652,0,0,1,16.472,0l-.242.807A31.38,31.38,0,0,0,4.1,25.724Z" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/><path d="M8.536,29.055A25.438,25.438,0,0,1,8,10.608l.776.331a24.558,24.558,0,0,0,.533,17.783Z" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/><path d="M15.6,29.055l-.776-.333a24.559,24.559,0,0,0,.531-17.783l.776-.331A25.443,25.443,0,0,1,15.6,29.055Z" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/><rect x="11.655" y="9.898" width="0.889" height="20.371" style="fill:#33a9dc;stroke:#33a9dc;stroke-miterlimit:10"/>'
|
||
},
|
||
"AutoHotkey": {
|
||
colour: "#d8d8d8",
|
||
icon: '<defs><linearGradient id="a" x1="54.604" y1="168.388" x2="54.604" y2="194.885" gradientTransform="translate(-38.604 -165.636)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#d8d8d8"/><stop offset="1" stop-color="#a3a3a3"/></linearGradient><linearGradient id="b" x1="68.756" y1="209.152" x2="91.638" y2="209.152" gradientTransform="translate(-50.601 -159.449) scale(0.832 0.837)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#d7d7d7"/><stop offset="0.5" stop-color="#e7e7e7"/><stop offset="1" stop-color="#d7d7d7"/></linearGradient></defs><title>file_type_autohotkey</title><rect x="2" y="2.824" width="28" height="26.353" rx="3.088" ry="3.088" style="fill:url(#a)"/><path d="M26.856,29.181H5.144A3.148,3.148,0,0,1,2,26.037V5.963A3.148,3.148,0,0,1,5.144,2.819H26.856A3.148,3.148,0,0,1,30,5.963V26.037A3.148,3.148,0,0,1,26.856,29.181ZM5.144,2.963a3,3,0,0,0-3,3h0V26.037a3,3,0,0,0,3,3H26.856a3,3,0,0,0,3-3V5.963a3,3,0,0,0-3-3Z" style="fill:#8d8d8d"/><rect x="4.313" y="4.641" width="23.169" height="21.94" rx="2.571" ry="2.571" style="fill:url(#b)"/><path d="M24.911,26.641H6.884A2.634,2.634,0,0,1,4.253,24.01V7.212A2.634,2.634,0,0,1,6.884,4.581H24.911a2.634,2.634,0,0,1,2.631,2.631v16.8A2.634,2.634,0,0,1,24.911,26.641ZM6.884,4.7A2.514,2.514,0,0,0,4.373,7.212v16.8a2.514,2.514,0,0,0,2.511,2.511H24.911a2.514,2.514,0,0,0,2.511-2.511V7.212A2.514,2.514,0,0,0,24.911,4.7Z" style="fill:#f8f8f8"/><path d="M6.145,23.9l2.343-6.1h.87l2.5,6.1h-.92l-.712-1.848H7.673L7,23.9ZM7.9,21.4H9.974l-.637-1.7q-.291-.77-.433-1.265A7.776,7.776,0,0,1,8.576,19.6Z"/><path d="M13.607,23.9V17.8h.807v2.5h3.171V17.8h.807v6.1h-.807V21.021h-3.17V23.9Z"/><path d="M20.478,23.9V17.8h.807v3.025l3.03-3.025h1.094L22.85,20.267,25.522,23.9H24.456l-2.172-3.088-1,.974V23.9Z"/>'
|
||
},
|
||
"AutoIt": {
|
||
colour: "#5d83ac",
|
||
icon: '<circle cx="16" cy="16" r="12.551" style="fill:#5d83ac"/><path d="M2,16A14,14,0,1,1,16,30,14,14,0,0,1,2,16ZM16,4.789A11.211,11.211,0,1,0,27.211,16,11.211,11.211,0,0,0,16,4.789Z" style="fill:#f0f0f0"/><path d="M24.576,20.156l-6.4-9.264a3.131,3.131,0,0,0-.819-.819,2.36,2.36,0,0,0-2.442.023,3.543,3.543,0,0,0-.812.8L7.533,20.156h3.752l4.808-6.8,1.838,2.71q.26.368.544.789t.5.7q-.368-.031-.865-.031h-3.53l-1.914,2.634Z" style="fill:#f0f0f0"/>'
|
||
},
|
||
"Avro IDL": {
|
||
colour: "#0040ff",
|
||
icon: '<path d="M2,11.649h.025a4.785,4.785,0,0,0,2.911,1.336c2.308.221,4.59-.485,6.9-.326a7.03,7.03,0,0,1,2.68.664c.5-.319.989-.662,1.486-.989.5.327.984.674,1.488.989a6.834,6.834,0,0,1,2.487-.65c1.995-.167,3.967.308,5.957.359a5.2,5.2,0,0,0,4.026-1.383H30v.236c-.178.747-.882,1.176-1.284,1.79a4.948,4.948,0,0,1-.731.791,3.8,3.8,0,0,1-.565.748,2.551,2.551,0,0,0-.594.541,2.181,2.181,0,0,1-.96.749,1.149,1.149,0,0,1-.565.56,6.69,6.69,0,0,1-1.94.184c.723.548,1.5,1.02,2.246,1.535.782.513,1.54,1.061,2.326,1.568H4.089c1.5-1.058,3.057-2.035,4.55-3.1A6.8,6.8,0,0,1,6.7,17.065a1.155,1.155,0,0,1-.569-.562,2.28,2.28,0,0,1-1.043-.86c-.268-.3-.67-.466-.853-.843-.2-.436-.658-.664-.909-1.067-.4-.642-1.137-1.076-1.327-1.846v-.239m2.939,8.528q11.059.009,22.12,0c-3.668-2.51-7.376-4.961-11.059-7.448-3.684,2.487-7.392,4.941-11.061,7.449M4.167,13.2a7.842,7.842,0,0,0,2.84.731c1.163.123,2.341.046,3.5.236a2.7,2.7,0,0,1,1.607.781c.659-.452,1.332-.885,1.987-1.342l.012-.064a5.294,5.294,0,0,0-1.877-.5c-2.693-.316-5.387.712-8.067.16m13.652.356c.688.466,1.382.925,2.07,1.392a2.488,2.488,0,0,1,1.3-.719,19.859,19.859,0,0,1,3.137-.248,9.105,9.105,0,0,0,3.5-.768c-2.582.5-5.168-.409-7.761-.2a6.256,6.256,0,0,0-2.245.545M3.339,13.166a7.264,7.264,0,0,0,2.723,1.3c-.219-.153-.376-.416-.657-.457a7.955,7.955,0,0,1-2.066-.844m23.333.825c-.317.023-.5.3-.733.473a7.232,7.232,0,0,0,2.724-1.3,8.106,8.106,0,0,1-1.991.824m-22.5.126a5.121,5.121,0,0,0,2.589,1.1c-.115-.128-.209-.312-.4-.334a10.459,10.459,0,0,1-2.19-.771m21.467.768c-.189.022-.284.2-.394.336a5.187,5.187,0,0,0,2.6-1.109,10.477,10.477,0,0,1-2.2.773M6.3,14.206a3.243,3.243,0,0,0,2.445.352c-.1-.08-.181-.215-.325-.206q-1.063-.04-2.12-.146m17.351.139c-.171-.019-.291.1-.406.211a3.108,3.108,0,0,0,2.42-.352q-1,.112-2.014.141m-16.741.538a3.669,3.669,0,0,0,2.482.319,1.107,1.107,0,0,0-.281-.376,5.158,5.158,0,0,1-2.2.057m15.7.318a3.678,3.678,0,0,0,2.487-.319,5.127,5.127,0,0,1-2.2-.057,1.1,1.1,0,0,0-.283.376M4.838,14.977a4.11,4.11,0,0,0,2.133.841c-.057-.084-.114-.168-.171-.254a6.948,6.948,0,0,1-1.962-.587m20.361.589-.169.253a4.141,4.141,0,0,0,2.136-.843,7.015,7.015,0,0,1-1.967.59m-18.1-.13a.8.8,0,0,0,.534.31,7.579,7.579,0,0,0,2.037-.073c-.009-.03-.027-.09-.036-.12-.457-.051-.923.074-1.385.047A7.054,7.054,0,0,1,7.1,15.437m16.191.151a6.28,6.28,0,0,0-.913-.041l-.042.126a7.416,7.416,0,0,0,2.045.072.7.7,0,0,0,.522-.331,4.349,4.349,0,0,1-1.613.174m-17.52.327a3.12,3.12,0,0,0,1.754.481c-.065-.24-.334-.2-.523-.236-.419-.041-.816-.186-1.231-.246M25,16.163c-.188.041-.452-.006-.521.232a2.874,2.874,0,0,0,1.732-.482c-.4.079-.8.207-1.211.251M7.735,16.119a1,1,0,0,0,.789.275,9.331,9.331,0,0,0,1.325-.158c-.021-.093-.009-.278-.163-.228a9.983,9.983,0,0,1-1.951.111m14.415.118a8.157,8.157,0,0,0,1.412.154.9.9,0,0,0,.7-.274,9.387,9.387,0,0,1-1.934-.11c-.16-.06-.155.132-.176.23m-15.438.44a1.962,1.962,0,0,0,1.3.181l-.091-.126c-.4.006-.807-.022-1.209-.055m1.615.043a1.03,1.03,0,0,0,.716.294c.179-.125.358-.252.531-.386a5.747,5.747,0,0,1-1.247.092m14.1-.093c.237.144.467.477.782.345.166-.05.369-.089.461-.257a5.271,5.271,0,0,1-1.243-.088m1.713.263a2.007,2.007,0,0,0,1.145-.213,10.269,10.269,0,0,1-1.144.049C23.993,16.667,23.984,16.961,24.138,16.89Z" style="fill:#0040ff"/><path d="M7.435,18.886Q11.719,16.013,16,13.137l9.3,6.244c.221.147.439.3.648.464q-9.947-.01-19.894,0c.443-.344.92-.64,1.383-.958m8.255-5.066c-.457,1.859-.907,3.719-1.375,5.576.52.015,1.041.012,1.562,0q-.013-2.841,0-5.68l-.184.1m-2.5,1.684c.255.859.48,1.728.763,2.579.289-1.238.6-2.471.9-3.707-.55.386-1.114.75-1.668,1.129m3.357-.873c-.006.682,0,1.364,0,2.046a2.1,2.1,0,0,0,1.014-.254c.193-.145.1-.409.011-.586a4.276,4.276,0,0,0-1.024-1.207M18.327,16.4c-.1.544-.666.792-1.151.9.474.7.96,1.389,1.416,2.1.469.024.94.011,1.411.009a1.631,1.631,0,0,1,.16-2.976c-.834-.6-1.7-1.14-2.544-1.727.349.5.831,1.037.708,1.7m-6.822.242c.267.921.529,1.845.794,2.767.44,0,.88.008,1.321-.007-.339-1.161-.685-2.319-1.009-3.484-.385.215-.737.482-1.1.724m8.8.452a.946.946,0,0,0,.057,1.7c.533.09.855-.533.779-.99-.026-.4-.4-.861-.836-.714M7.4,19.4q1.324.018,2.65,0c.256-.7.413-1.468.629-2.2-1.1.715-2.187,1.461-3.279,2.194m14.377-1.9a1.616,1.616,0,0,1-.876,1.9c1.233.018,2.465.015,3.7,0-.934-.644-1.883-1.266-2.822-1.9m-5.223.115c-.01.6,0,1.2,0,1.8.415,0,.831,0,1.248,0-.419-.6-.8-1.219-1.243-1.794m-5.546.941h.346c-.055-.187-.108-.376-.166-.562a3.751,3.751,0,0,0-.181.563m-.18.693c-.015.04-.045.119-.061.159.275-.026.59.071.842-.05C11.453,19.112,11.074,19.275,10.826,19.244Z" style="fill:#0040ff"/>'
|
||
},
|
||
"AWK": {
|
||
colour: "#d2d2d2",
|
||
icon: '<path d="M26.925,27.737C23.431,26.1,24.606,14.588,13.81,8.319,14.089,5.792,14.758-.5,7.961,3,6.845,3.128,4.907,2.331,4,4.831v.114C16.918,3.9.088,10.53,16.75,25.844c-.373.176-.674-.325-1.97.1l-.014.016c-1.722,1.135,1.933.768,4.154,1.274-1.611.417-5.594-1.137-6.3,1.645.877-.37,1,.329,1.076,1.077A26.277,26.277,0,0,1,22.379,27.5c1.1.285,4.118,2.049,5.122.551C27.519,27.93,27.221,27.876,26.925,27.737Z"/><path d="M10.446,2.97l-.121.088a.266.266,0,0,0-.011.377.211.211,0,0,0,.045.039.416.416,0,0,0,.521-.063.263.263,0,0,0,.078-.364l-.01-.014c-.076-.143-.163-.177-.34-.127C10.553,2.925,10.5,2.946,10.446,2.97Z" style="fill:#d2d2d2"/><path d="M18,26.368c.151-.041.318-.828.174-.949A6.29,6.29,0,0,0,19.4,26.485c1.023,1.007,2.665-.032,3.482.759a10.736,10.736,0,0,0,1.957,1.027c-.139-.151-.029-.144.179-.011-.13-.338-4.421-5.156-5.226-7.18.095.293-1.608-.824-2.076-1.419-.028.056-.092-.251-.228-.434-.041.05-.2-.433-.3-.728.037.187-.462-.5-.65-.818-.056.09-.719.372-.809.286-.729-.4,2.529,4.066.122,2.559.676.683.614.4-1.095-.852.364.452-.317.312-1.553-1.523.186.2-.218-.576-.218-.576a2.692,2.692,0,0,0-.133-.483c-.056-.32-.241-.723-.12-.65-1.444-1.556,1.314-3.3.719-3.671-.111,0-.027.017-.151-.106-.09,0-.468.285-.587-.234.006.132-.034.406-.153-.1-.023.052.015.1-.03.145-.225-.576-.772-1.6-1.217-2.539-.158.155-.138-.076-.193-1.092.053.144-.225,1.921-.2.13-.128.007.108,1.258-.343.21-.141.05-.305-.363-.341-1.178-.048.623-.29.187-.5-.923-.269.508-1.6,1.743-.333,7.622-.053-.313.186.341.755,2.427.021-.039-.022-.083.038-.131a6.324,6.324,0,0,0,.677,1.365c.544.658.995,2.074.8,1.277a11.867,11.867,0,0,0,2.554,3.249A34.423,34.423,0,0,0,18,26.368Z" style="fill:#d2d2d2"/><path d="M10.823,2.557a.291.291,0,0,0-.051-.022c-.221-.04-.429.153-.654.032-.145.085-.257-.036-.375-.073a.224.224,0,0,0-.2.014,5.823,5.823,0,0,0-.814.582,1.037,1.037,0,0,0-.273.449c-.021.048-.037.126.05.137a2.3,2.3,0,0,0,.682.045c.177-.028.277-.152.418-.221a1.2,1.2,0,0,0,.592-.68c.064-.175.161-.167.28-.2S10.7,2.62,10.823,2.557Z" style="fill:#d2d2d2"/><path d="M10.325,3.058l.121-.088a.117.117,0,0,1,.12.064c.044.1.106.112.193.047.033-.025.071-.058.118-.027a.119.119,0,0,1,.041.128.276.276,0,0,1-.187.248.266.266,0,0,1-.3-.03C10.341,3.308,10.26,3.2,10.325,3.058Z"/>'
|
||
},
|
||
"Batch": {
|
||
colour: "#d9b400",
|
||
icon: '<path d="M29.4,27.6H2.5V4.5H29.4Zm-25.9-1H28.4V5.5H3.5Z" style="fill:#d9b400"/><polygon points="6.077 19.316 5.522 18.484 10.366 15.255 5.479 11.184 6.12 10.416 12.035 15.344 6.077 19.316" style="fill:#d9b400"/><rect x="12.7" y="18.2" width="7.8" height="1" style="fill:#d9b400"/><rect x="2.5" y="5.5" width="26.9" height="1.9" style="fill:#d9b400"/>'
|
||
},
|
||
"C#": {
|
||
colour: "#368832",
|
||
icon: '<title>file_type_csharp</title><path d="M19.792,7.071h2.553V9.624H24.9V7.071h2.552V9.624H30v2.552h-2.55v2.551H30V17.28H27.449v2.552H24.9v-2.55l-2.55,0,0,2.552H19.793v-2.55l-2.553,0V14.725h2.553V12.179H17.24V9.622h2.554Zm2.553,7.658H24.9V12.176H22.345Z" style="fill:#368832"/><path d="M14.689,24.013a10.2,10.2,0,0,1-4.653.915,7.6,7.6,0,0,1-5.89-2.336A8.839,8.839,0,0,1,2,16.367,9.436,9.436,0,0,1,4.412,9.648a8.181,8.181,0,0,1,6.259-2.577,11.1,11.1,0,0,1,4.018.638v3.745a6.81,6.81,0,0,0-3.723-1.036,4.793,4.793,0,0,0-3.7,1.529,5.879,5.879,0,0,0-1.407,4.142,5.774,5.774,0,0,0,1.328,3.992,4.551,4.551,0,0,0,3.575,1.487,7.288,7.288,0,0,0,3.927-1.108Z" style="fill:#368832"/>'
|
||
},
|
||
"C": {
|
||
colour: "#005f91",
|
||
icon: '<title>file_type_c</title><path d="M10.676,15.973a10.052,10.052,0,0,0,1.175,5.151,5.446,5.446,0,0,0,6.306,2.408,4.284,4.284,0,0,0,3.09-3.6c.107-.6.109-.61.109-.61,1.737.251,4.537.658,6.274.906l-.11.44a11.256,11.256,0,0,1-2.7,5.39,9.439,9.439,0,0,1-5.366,2.688,14.61,14.61,0,0,1-8.277-.819A10.151,10.151,0,0,1,5.4,21.687a16.225,16.225,0,0,1,.019-11.45,10.538,10.538,0,0,1,8.963-7.054,13.353,13.353,0,0,1,6.666.555,9.571,9.571,0,0,1,6.167,6.9c.094.352.114.417.114.417-1.932.351-4.319.8-6.238,1.215-.362-1.915-1.265-3.428-3.2-3.9a5.263,5.263,0,0,0-6.616,3.57,10.49,10.49,0,0,0-.385,1.439A12.31,12.31,0,0,0,10.676,15.973Z" style="fill:#005f91"/>',
|
||
inlineComment: [
|
||
"//"
|
||
]
|
||
},
|
||
"C++": {
|
||
colour: "#984c93",
|
||
icon: '<title>file_type_cpp</title><path d="M14.742,24.047a10.242,10.242,0,0,1-4.673.919A7.628,7.628,0,0,1,4.155,22.62,8.876,8.876,0,0,1,2,16.369,9.476,9.476,0,0,1,4.422,9.621a8.216,8.216,0,0,1,6.285-2.588,11.151,11.151,0,0,1,4.035.641v3.761A6.839,6.839,0,0,0,11,10.395,4.813,4.813,0,0,0,7.288,11.93a5.9,5.9,0,0,0-1.413,4.159A5.8,5.8,0,0,0,7.209,20.1a4.57,4.57,0,0,0,3.59,1.493,7.319,7.319,0,0,0,3.943-1.113Z" style="fill:#984c93"/><polygon points="17.112 14.829 17.112 12.485 19.456 12.485 19.456 14.829 21.8 14.829 21.8 17.172 19.456 17.172 19.456 19.515 17.112 19.515 17.112 17.172 14.77 17.172 14.77 14.828 17.112 14.829" style="fill:#984c93"/><polygon points="25.313 14.829 25.313 12.485 27.657 12.485 27.657 14.829 30 14.829 30 17.172 27.657 17.172 27.657 19.515 25.313 19.515 25.313 17.172 22.971 17.172 22.971 14.828 25.313 14.829" style="fill:#984c93"/>',
|
||
inlineComment: [
|
||
"//"
|
||
]
|
||
},
|
||
"Clojure": {
|
||
colour: "#91dc47",
|
||
icon: '<path d="M16,2A14,14,0,1,0,30,16,14.016,14.016,0,0,0,16,2" style="fill:#fff"/><path d="M15.488,16.252c-.126.273-.265.579-.408.9A22.963,22.963,0,0,0,13.8,20.605a5.181,5.181,0,0,0-.119,1.155c0,.174.009.356.024.542a6.658,6.658,0,0,0,4.413.067,3.966,3.966,0,0,1-.44-.466c-.9-1.146-1.4-2.827-2.194-5.652" style="fill:#91dc47"/><path d="M12.169,10.556a6.677,6.677,0,0,0-.077,10.881c.411-1.71,1.44-3.276,2.983-6.415-.092-.252-.2-.527-.313-.817a10.207,10.207,0,0,0-1.6-2.882,4.439,4.439,0,0,0-1-.767" style="fill:#91dc47"/><path d="M21.84,23.7a10.877,10.877,0,0,1-2.257-.471A8.036,8.036,0,0,1,10.716,9.982a5.9,5.9,0,0,0-1.4-.171c-2.358.022-4.848,1.327-5.884,4.852a6.606,6.606,0,0,0-.074,1.361,12.649,12.649,0,0,0,23,7.274,14.737,14.737,0,0,1-3.448.459A8.881,8.881,0,0,1,21.84,23.7" style="fill:#63b132"/><path d="M19.463,21.244a3.53,3.53,0,0,0,.5.172A6.69,6.69,0,0,0,22.7,16.023h0a6.681,6.681,0,0,0-8.79-6.348c1.358,1.548,2.011,3.761,2.643,6.181v0s.2.673.547,1.562a15.434,15.434,0,0,0,1.363,2.788,2.924,2.924,0,0,0,1,1.036" style="fill:#90b4fe"/><path d="M16.013,3.372A12.632,12.632,0,0,0,5.731,8.656a6.425,6.425,0,0,1,3.48-1.009,6.8,6.8,0,0,1,3.182.772c.134.077.261.16.386.246a8.038,8.038,0,0,1,11.273,7.358h0a8.013,8.013,0,0,1-2.391,5.719,9.871,9.871,0,0,0,1.143.064,6.24,6.24,0,0,0,4.051-1.263,5.348,5.348,0,0,0,1.7-2.906A12.632,12.632,0,0,0,16.013,3.372" style="fill:#5881d8"/>'
|
||
},
|
||
"CMake": {
|
||
colour: "#01a300",
|
||
icon: '<defs><linearGradient id="a" x1="9.955" y1="9.096" x2="16.68" y2="23.324" gradientTransform="matrix(1, 0, 0, -1, 0, 32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1011a1"/><stop offset="1" stop-color="#6969e1"/></linearGradient><linearGradient id="b" x1="16.231" y1="19.655" x2="25.618" y2="3.782" gradientTransform="matrix(1, 0, 0, -1, 0, 32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b40e0e"/><stop offset="1" stop-color="#ff5959"/></linearGradient><linearGradient id="c" x1="21.663" y1="4.823" x2="8.381" y2="5.938" gradientTransform="matrix(1, 0, 0, -1, 0, 32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#01a300"/><stop offset="1" stop-color="#01df00"/></linearGradient><linearGradient id="d" x1="14.643" y1="8.368" x2="14.472" y2="14.145" gradientTransform="matrix(1, 0, 0, -1, 0, 32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#848484"/><stop offset="1" stop-color="#d2d2d2"/></linearGradient></defs><title>file_type_cmake</title><path d="M17.257,16.919,2.246,29.749,15.994,2.283Z" style="fill:url(#a)"/><path d="M2.262,29.768l-.038-.03L16.012,2.193l.008.088L17.283,16.93l-.01.008ZM15.977,2.374,2.324,29.649,17.23,16.908Z"/><path d="M17.952,24.931,16,2.28,29.767,29.751Z" style="fill:url(#b)"/><path d="M29.818,29.8l-.061-.025L17.929,24.948l0-.015L15.975,2.282l.047-.013ZM17.976,24.913,29.715,29.7,16.036,2.408Z"/><path d="M11.16,22.094l18.621,7.654H2.25Z" style="fill:url(#c)"/><path d="M29.781,29.773H2.183l.051-.044,8.921-7.665.014.006,18.622,7.655Zm-27.464-.05H29.654l-18.489-7.6Z"/><path d="M11.189,22.112l6.059-5.168.843,7.98Z" style="fill:url(#d)"/><path d="M18.149,25l-.077-.032-6.978-2.842,6.194-5.283.01.094Zm-6.865-2.9,6.748,2.749-.824-7.8Z"/><path d="M29.7,29.911H2.285a.221.221,0,0,1-.182-.088.222.222,0,0,1,.022-.2L15.864,2.187a.169.169,0,0,1,.14-.1h0a.154.154,0,0,1,.13.085L29.867,29.607a.238.238,0,0,1,.02.226A.211.211,0,0,1,29.7,29.911Zm-27.468-.16a.484.484,0,0,0,.057.011h27.4l.073-.009a.221.221,0,0,0-.028-.077L16,2.248,16,2.26,2.261,29.684a.279.279,0,0,0-.025.067Z"/>'
|
||
},
|
||
"COBOL": {
|
||
colour: "#005ca5",
|
||
icon: '<path d="M22.24,6.546a4.449,4.449,0,0,0,1.765-2.522,4.636,4.636,0,0,1-.018,2.157c-.223.582-.567,1.107-.834,1.669a21.772,21.772,0,0,1,4.559-2.938C27.23,6.4,25.891,7.3,24.907,8.442c.19.409.28.989.8,1.109a5.036,5.036,0,0,0,2.5.155c.912-.313,1.345-1.258,1.8-2.035V9.14a15.738,15.738,0,0,1-.582,1.748c.2.547.409,1.092.582,1.647v.952c-.214.368-.442.726-.663,1.089a5.293,5.293,0,0,0-1.068-1.162,4.03,4.03,0,0,0-1.851-.125,3.212,3.212,0,0,0,2.413,1.47c-.359.37-.663.912-1.23.969-1.641.247-3.207-.505-4.839-.5-.282.02-.707.024-.785.372,0,.735.217,1.453.19,2.188-.059,1.258-.512,2.466-.529,3.726a13.785,13.785,0,0,0,.838,3.448c-.523-.077-1.044-.166-1.562-.26-.1.208-.184.42-.26.634A4.514,4.514,0,0,0,21.8,26.531c-.061.127-.182.381-.241.508l-.573.138c-.131.247-.263.492-.4.739a4.421,4.421,0,0,0-2.2.061c-.466-.186-.928-.376-1.389-.567a5.939,5.939,0,0,0,.407-2.315c-.282-.982-1.6-.984-2-1.877a6.233,6.233,0,0,1-1.022-2.851c-.823-.433-1.455-1.221-2.4-1.4-.048.409-.083.82-.153,1.227A6.015,6.015,0,0,1,10.481,22.6c.039.422.079.842.12,1.265.346.324.691.648,1.033.974a9.752,9.752,0,0,1-1.426.713,11.114,11.114,0,0,1-1.687.077c-.258-.254-.518-.508-.777-.764a4.871,4.871,0,0,0,.114-2.608c.171-.4.326-.812.475-1.221a5.565,5.565,0,0,1-3.01.206,5.12,5.12,0,0,1-3.29-4.33,3.859,3.859,0,0,1,1.407-3.268A6.41,6.41,0,0,0,3.2,16.259a3.038,3.038,0,0,0,2.5,2.466,3.462,3.462,0,0,0,1.96-.643,7.48,7.48,0,0,1,.363-4.133,5.524,5.524,0,0,1,3.586-2.66,4.235,4.235,0,0,0,2.011-1.566,10.67,10.67,0,0,1,1.529-1.33c-.228-.219-.453-.44-.68-.659A2.154,2.154,0,0,0,15.9,6.023c1.284-.3,2.551-.661,3.82-1.011a3.793,3.793,0,0,0,1.415.606c.317.346.494,1.157,1.1.928M18.458,19.908c.042.768-.048,1.665.674,2.155,0-.755-.046-1.507-.1-2.26Z" style="fill:#005ca5"/>'
|
||
},
|
||
"CoffeeScript": {
|
||
colour: "#6f4e37",
|
||
icon: '<path d="M13.114,5.728c.025.153-.051.28-.306.408a3.457,3.457,0,0,0-1.63-.229c-.637.051-1.172.255-1.1.688.1.433.713.688,1.808.586,2.674-.229,2.649-2.038,6.571-2.394,3.056-.28,4.763.662,4.992,1.808.178.891-.56,1.757-2.776,1.936-1.961.178-3.107-.357-3.209-.891-.051-.28.1-.688,1.044-.79.1.433.637.891,1.91.764C21.341,7.536,22.1,7.2,22,6.7c-.1-.535-1.07-.84-2.6-.713-3.107.28-3.871,1.987-6.52,2.216C11,8.376,9.472,7.689,9.268,6.67c-.076-.382-.076-1.273,1.91-1.452,1.019-.076,1.834.1,1.936.509ZM3.181,16.374A5.279,5.279,0,0,0,2.01,19.99a4.206,4.206,0,0,0,1.655,3.056,4,4,0,0,0,3.362.79,11.434,11.434,0,0,0,1.5-.484,4.238,4.238,0,0,1-2.751-1.019,4.13,4.13,0,0,1-1.732-2.827A3.79,3.79,0,0,1,4.658,16.5,3.977,3.977,0,0,1,7.409,15a4.806,4.806,0,0,1,3.209.942,6.95,6.95,0,0,0-.866-.866,4.1,4.1,0,0,0-3.464-.688,5.2,5.2,0,0,0-3.107,1.987ZM16.833,10.49A40.837,40.837,0,0,1,8.5,9.7C6.237,9.14,5.04,8.529,5.04,7.74c0-.331.153-.611.611-.942-1.426.56-2.19,1.019-2.19,1.732.076.79,1.35,1.579,3.948,2.19a39.443,39.443,0,0,0,9.347.942A38.993,38.993,0,0,0,26.1,10.72c2.6-.611,3.846-1.426,3.846-2.19,0-.56-.56-1.1-1.579-1.5a.862.862,0,0,1,.408.688c0,.79-1.172,1.426-3.54,1.961A39.324,39.324,0,0,1,16.833,10.49Zm9.373,2.19a42.315,42.315,0,0,1-9.347.942,44.144,44.144,0,0,1-9.424-.942c-2.19-.56-3.362-1.172-3.769-1.808a23.186,23.186,0,0,0,2.6,7.641c.942,1.426,1.885,2.674,2.827,4.024a9.883,9.883,0,0,1,.866,2.369,4.559,4.559,0,0,0,2.6,1.732,10.611,10.611,0,0,0,4.177.611h.153a11.839,11.839,0,0,0,4.3-.611,4.869,4.869,0,0,0,2.521-1.732h.076a9.592,9.592,0,0,1,.79-2.369c.942-1.35,1.885-2.6,2.827-4.024A24.62,24.62,0,0,0,30,10.872C29.491,11.585,28.319,12.2,26.205,12.681Z" style="fill:#6f4e37"/>'
|
||
},
|
||
"Crystal": {
|
||
colour: "#c8c8c8",
|
||
icon: '<path d="M29.941,19.816,19.8,29.928c-.028.028-.085.028-.169.028L5.8,26.267c-.028,0-.084-.028-.113-.113L2,12.352a.419.419,0,0,1,.028-.169L12.168,2.072c.028-.028.084-.028.169-.028l13.83,3.718c.028,0,.084.028.113.113l3.69,13.8C30.026,19.732,30,19.788,29.941,19.816ZM16.393,8.832,2.817,12.493q-.042,0,0,.084L12.76,22.52c.028.028.028,0,.084,0L16.506,8.972C16.449,8.832,16.393,8.832,16.393,8.832Z" style="fill:#c8c8c8"/>'
|
||
},
|
||
"CSS": {
|
||
colour: "#1572b6",
|
||
icon: '<polygon points="5.902 27.201 3.656 2 28.344 2 26.095 27.197 15.985 30 5.902 27.201" style="fill:#1572b6"/><polygon points="16 27.858 24.17 25.593 26.092 4.061 16 4.061 16 27.858" style="fill:#33a9dc"/><polygon points="16 13.191 20.09 13.191 20.372 10.026 16 10.026 16 6.935 16.011 6.935 23.75 6.935 23.676 7.764 22.917 16.282 16 16.282 16 13.191" style="fill:#fff"/><polygon points="16.019 21.218 16.005 21.222 12.563 20.292 12.343 17.827 10.67 17.827 9.24 17.827 9.673 22.68 16.004 24.438 16.019 24.434 16.019 21.218" style="fill:#ebebeb"/><polygon points="19.827 16.151 19.455 20.29 16.008 21.22 16.008 24.436 22.344 22.68 22.391 22.158 22.928 16.151 19.827 16.151" style="fill:#fff"/><polygon points="16.011 6.935 16.011 8.855 16.011 10.018 16.011 10.026 8.555 10.026 8.555 10.026 8.545 10.026 8.483 9.331 8.342 7.764 8.268 6.935 16.011 6.935" style="fill:#ebebeb"/><polygon points="16 13.191 16 15.111 16 16.274 16 16.282 12.611 16.282 12.611 16.282 12.601 16.282 12.539 15.587 12.399 14.02 12.325 13.191 16 13.191" style="fill:#ebebeb"/>'
|
||
},
|
||
"CSV": {
|
||
colour: "#c2c2c2",
|
||
icon: '<path d="M22.038,2H6.375a1.755,1.755,0,0,0-1.75,1.75v24.5A1.755,1.755,0,0,0,6.375,30h19.25a1.755,1.755,0,0,0,1.75-1.75V6.856Zm.525,2.844,1.663,1.531H22.563ZM6.375,28.25V3.75H20.813V8.125h4.813V28.25Z" style="fill:#c2c2c2"/><rect x="8.125" y="15.097" width="13.076" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="24.439" width="9.762" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="19.763" width="15.75" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="10.23" width="15.75" height="1.75" style="fill:#829ec2"/>'
|
||
},
|
||
"D": {
|
||
colour: "#b03931",
|
||
icon: '<defs><linearGradient id="a" x1="185.455" y1="1601.641" x2="181.955" y2="1630.224" gradientTransform="translate(-62.523 -666.646) scale(0.427)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient id="b" x1="176.136" y1="1600.5" x2="172.636" y2="1629.083" xlink:href="#a"/></defs><title>file_type_dlang</title><path d="M3.978,15.462,3.969,8.509A.588.588,0,0,1,4.5,7.947a.658.658,0,0,1,.076,0l6.074-.009a15.7,15.7,0,0,1,6.067.95,8.9,8.9,0,0,1,2.244,1.359,4.469,4.469,0,0,1,2.946-1.083,4.11,4.11,0,0,1,4.276,3.92A4.11,4.11,0,0,1,21.907,17c-.089,0-.177-.008-.265-.012a6.617,6.617,0,0,1-.232.953,85.383,85.383,0,0,1,8.59,2.6V2H2V15.4Q2.992,15.42,3.978,15.462Zm22.8-7.944a1.32,1.32,0,0,1,1.374,1.259,1.379,1.379,0,0,1-2.747,0A1.32,1.32,0,0,1,26.78,7.517Z" style="fill:#b03931"/><path d="M17.861,15.787a4.114,4.114,0,0,0-1.748-3.458,5.814,5.814,0,0,0-1.508-.822,7.354,7.354,0,0,0-1.629-.438,21.629,21.629,0,0,0-2.588-.1l-2.619,0,.006,4.737a88.827,88.827,0,0,1,9.91,1.408A4.919,4.919,0,0,0,17.861,15.787Z" style="fill:#b03931"/><path d="M20.993,18.979a7.906,7.906,0,0,1-2.128,2.582,9.739,9.739,0,0,1-3.256,1.71,11.558,11.558,0,0,1-1.971.472h-.015a31.857,31.857,0,0,1-3.326.111l-5.625.022a.616.616,0,0,1-.686-.681l-.01-7.734Q2.992,15.42,2,15.4V30H30V20.544a85.383,85.383,0,0,0-8.59-2.6A6.985,6.985,0,0,1,20.993,18.979Z" style="fill:#b03931"/><path d="M20.993,18.979a7.906,7.906,0,0,1-2.128,2.582,9.739,9.739,0,0,1-3.256,1.71,11.558,11.558,0,0,1-1.971.472h-.015a31.857,31.857,0,0,1-3.326.111l-5.625.022a.616.616,0,0,1-.686-.681l-.01-7.734Q2.992,15.42,2,15.4V30H30V20.544a85.383,85.383,0,0,0-8.59-2.6A6.985,6.985,0,0,1,20.993,18.979Z" style="opacity:0.300000011920929;isolation:isolate;fill:url(#a)"/><path d="M10.477,20.835a16.014,16.014,0,0,0,2.877-.2,7.633,7.633,0,0,0,1.628-.5,5.628,5.628,0,0,0,1.187-.748,4.457,4.457,0,0,0,1.518-2.271,88.691,88.691,0,0,0-9.91-1.408l.006,5.133Z" style="fill:#b03931"/><path d="M10.477,20.835a16.014,16.014,0,0,0,2.877-.2,7.633,7.633,0,0,0,1.628-.5,5.628,5.628,0,0,0,1.187-.748,4.457,4.457,0,0,0,1.518-2.271,88.691,88.691,0,0,0-9.91-1.408l.006,5.133Z" style="opacity:0.300000011920929;isolation:isolate;fill:url(#b)"/><path d="M20.383,11.746a6.993,6.993,0,0,1,1.36,4.148,6.618,6.618,0,0,1-.1,1.1c.088,0,.176.012.265.012a4.11,4.11,0,0,0,4.276-3.92,4.11,4.11,0,0,0-4.276-3.92,4.47,4.47,0,0,0-2.946,1.083A8.123,8.123,0,0,1,20.383,11.746Z" style="fill:#fff"/><ellipse cx="26.78" cy="8.777" rx="1.374" ry="1.259" style="fill:#fff"/><path d="M4.673,23.877l5.625-.022a31.871,31.871,0,0,0,3.326-.111h.015a11.49,11.49,0,0,0,1.971-.472,9.739,9.739,0,0,0,3.256-1.71,7.906,7.906,0,0,0,2.128-2.582,6.985,6.985,0,0,0,.417-1.034,7.056,7.056,0,0,0,.332-2.051,6.992,6.992,0,0,0-1.36-4.148,8.1,8.1,0,0,0-1.421-1.5,8.878,8.878,0,0,0-2.244-1.359,15.686,15.686,0,0,0-6.067-.95l-6.074.009a.658.658,0,0,0-.076,0,.588.588,0,0,0-.532.562l.009,6.952.01,7.734A.616.616,0,0,0,4.673,23.877Zm3.1-12.908,2.619,0a21.623,21.623,0,0,1,2.588.1,7.354,7.354,0,0,1,1.629.438,5.814,5.814,0,0,1,1.508.822,4.116,4.116,0,0,1,1.748,3.458,4.905,4.905,0,0,1-.175,1.327,4.457,4.457,0,0,1-1.518,2.271,5.613,5.613,0,0,1-1.187.748,7.666,7.666,0,0,1-1.628.5,16.009,16.009,0,0,1-2.877.2l-2.694,0-.006-5.133Z" style="fill:#fff"/>',
|
||
inlineComment: [
|
||
"//"
|
||
]
|
||
},
|
||
"Dart": {
|
||
colour: "#58b6f0",
|
||
icon: '<path d="M16.739,2.037a1.314,1.314,0,0,0-.916.377l-.013.01L7.22,7.389l8.566,8.566v.006l10.3,10.3,1.963-3.536L20.968,5.728l-3.3-3.3a1.307,1.307,0,0,0-.927-.388Z" style="fill:#66c3fa"/><path d="M7.25,7.35,2.288,15.931l-.01.013a1.322,1.322,0,0,0-.378.919,1.3,1.3,0,0,0,.387.924L6.4,21.9l16.084,6.327,3.636-2.02-.1-.1-.025,0-10.083-10.1H15.9L7.25,7.35Z" style="fill:#215896"/><path d="M7.192,7.362l8.764,8.773h.013l10.087,10.1,3.839-.732L29.9,14.14l-4.054-3.973a6.521,6.521,0,0,0-3.624-1.616l0-.044L7.192,7.362Z" style="fill:#235997"/><path d="M7.256,7.411l8.768,8.768v.013L26.116,26.284l-.734,3.839H14.022l-3.971-4.056a6.522,6.522,0,0,1-1.614-3.625l-.044,0L7.256,7.411Z" style="fill:#58b6f0"/>'
|
||
},
|
||
"Dhall": {
|
||
colour: "#b7b7b7",
|
||
icon: '<path d="M16,2.07A13.93,13.93,0,1,1,2,16,13.93,13.93,0,0,1,16,2.07ZM13.28,22.32a1.49,1.49,0,1,1-1,1.83A1.49,1.49,0,0,1,13.28,22.32Zm8-15.68a.53.53,0,0,1,.38.66.52.52,0,0,1-.65.38l-.5-.13a42.67,42.67,0,0,0-.37,7.07C18.06,16.45,14.39,22,14.39,22l1.93-7.18a1,1,0,0,0,.89-.65.91.91,0,0,0-1.75-.47,1,1,0,0,0,.45,1L14,21.85a68.38,68.38,0,0,0-1.34-9.25,34.28,34.28,0,0,0,3.21-6.31l-.5-.13A.55.55,0,0,1,15,5.5a.53.53,0,0,1,.66-.38l5.68,1.52Z" style="fill:#b7b7b7;fill-rule:evenodd"/>'
|
||
},
|
||
"Diff": {
|
||
colour: "#c00000",
|
||
icon: '<rect x="6.975" y="3" width="18.05" height="6.017" style="fill:#c00000"/><path d="M12.992,10.95v6.017H6.975v6.017h6.017V29h6.017V22.983h6.017V16.967H19.008V10.95Z" style="fill:green"/>'
|
||
},
|
||
"Django/Jinja2": {
|
||
colour: "#ff0000",
|
||
icon: '<defs><radialGradient id="a" cx="16" cy="-119.283" r="13.5" gradientTransform="matrix(1, 0, 0, -0.945, 0, -96.735)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#575757"/><stop offset="1" stop-color="#2f2f2f"/></radialGradient></defs><title>file_type_jinja</title><path d="M29.34,3.241a38.271,38.271,0,0,1-9.451,3.04c-4.241.55-12.329,1.1-13.935.712A23.3,23.3,0,0,1,3.2,6.151l.334,1.132L2.5,8.188l.183.323.424.032,1.3.162.183.582.727.066.364,1.228s1.544.13,2,.13,1.363-.064,1.363-.064l.03.485.334.064v.55l-.728.648.183.032v.225a15.816,15.816,0,0,1-2.3.034c-.666-.1-.788-.1-.788-.1l-.06.064-.03.291h.151l.06,1.262,3.363-.13-.243,4.365-.03.549-2.848-.162-.03-1.164h.635l.061-.453.575-.13.091-.128-2.151-.518-1.636.485.273.227h.273l.03.389.575.032V18.7l-.635.162.121.257.151.1v.873h.394v4.041l-.637.1.091,1.164.393.066-.06,2.651,1.727.032-.364-2.619,2.605-.064-.181,1.422-.243,1,2.635.032.03-2.586,1.817-.162-.09,1.649-.061.969h1.546l-.061-2.651.213.034.06-1.262h-.243l-.09-.518L13.8,21.9l.06-1.713h.333V19.149l-.424.032.061-1.22.493-.049.023-.4.28-.041.287-.218L13.187,16.9l-1.712.379.167.274.181-.015.211-.008.039.5.477-.023.009,1.082-2.053-.047.069-1.156.067-1.051V15.455L10.7,14l4.111-.21,4.892-.282.046.929-.174,2.231L19.5,18.744l-1.8-.032-.009-1.455.667-.024.03-.411.273-.041-.014-.081.273-.015.151-.2L17.034,16,15,16.44l.144.251.227-.017v.114h.28v.46l.6.008-.007,1.277h-.605l-.009.291.213.024-.023,1.108.447.024-.053,4.39-.591.12.007.21h.206v1.124h.34l-.09,1.536L15.974,28.7l2.151.056-.069-1.164-.158-.969-.031-.841,1.826-.032-.053,1.3-.009,1.374,1.031.081,1.4-.056.44-.13-.243-.736-.06-1.156-.114-.824,1.742-.064-.076,1.01-.007,1.585.7.064.69-.015.333-.105-.2-1.5L25.2,25.445l.3-.032L25.5,24.4l.083-.017-.014-.218h-.341l-.069-.744L25.13,20.2l.257-.008V19.133l.107.017v-.21l-.38-.034.009-1.228.635-.056-.037-.413.28-.024-.016-.081.371-.186-1.886-.379-1.916.389.121.226.3-.024.016.1h.25l.014.485.621-.008.053,1.188-2.2-.017-.257-1.786-.206-.946-.166-1.7.1-.993,4.377-.332.014-1.479.22-.056-.014-.225-.167-.1s-2.393.355-3.151.436l-.371.04-.023-.274-.905-.474.011-.552.311-.009.023-.759a24.807,24.807,0,0,0,2.544-.283c.689-.162,1.666-.323,1.666-.323L26.2,7.809l.917-.267.076-.21,2.074-.574.236-.194-.788-1.722.076-.389.4-.21.288-.881ZM19.374,9.8l-.011.626.47.02-.03.594-.921.6-.057.174.371,0,0,.146-2.814.137.019-.416.128-.207.009-.133,0-.286.08-.19.03-.154v-.11l.121-.485Zm-5.885.533-.069.421.22.259-.014.453.2.315-.053.372.151.218-2.871.113-.007-.1.333-.041.016-.122-.727-.395-.039-.631.348-.017.03-.68Zm4.249,9.7,1.742.113L19.42,22.5l.227,1.923L17.8,24.354Zm-11.663.1,2.788.145L8.62,21.9v1.359l.2.759-2.727.13Zm17.843.015v4.01l-1.772.13-.061-2.118-.2-1.973ZM10.5,20.24l2.06.008.021,3.718L10.657,24l-.1-1.205-.007-1.2Z" style="stroke:red;stroke-width:0.5px;fill:url(#a)"/>'
|
||
},
|
||
"Docker": {
|
||
colour: "#0096e6",
|
||
icon: '<path d="M16.54,12.663H19.4v2.924h1.446a6.272,6.272,0,0,0,1.988-.333,5.091,5.091,0,0,0,.966-.436,3.584,3.584,0,0,1-.67-1.849,3.907,3.907,0,0,1,.7-2.753l.3-.348.358.288a4.558,4.558,0,0,1,1.795,2.892,4.375,4.375,0,0,1,3.319.309l.393.226-.207.4a4.141,4.141,0,0,1-4.157,1.983c-2.48,6.168-7.871,9.088-14.409,9.088-3.378,0-6.476-1.263-8.241-4.259l-.029-.049L2.7,20.227a8.316,8.316,0,0,1-.659-4.208l.04-.433H4.526V12.663H7.387V9.8h5.721V6.942H16.54v5.721Z" style="fill:#0096e6"/><path d="M12.006,24.567a6.022,6.022,0,0,1-3.14-3.089,10.329,10.329,0,0,1-2.264.343q-.5.028-1.045.028-.632,0-1.331-.037a9.051,9.051,0,0,0,7,2.769Q11.618,24.581,12.006,24.567Z" style="fill:#fff"/><path d="M7.08,13.346h.2v2.067h-.2Zm-.376,0h.2v2.067H6.7V13.346Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.368,0h.2v2.067h-.2V13.346ZM5,13.14H7.482v2.479H5Zm2.859-2.861h2.48v2.479H7.863Zm2.077.207h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2V10.486Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.368,0h.2v2.066h-.2Zm-.207,2.653h2.48v2.48H7.863V13.14Zm2.077.207h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2V13.346Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.368,0h.2v2.067h-.2Zm2.654-.207H13.2v2.48h-2.48V13.14Zm2.076.207H13v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.368,0h.2v2.067h-.2Zm-.206-3.067H13.2v2.479h-2.48V10.279Zm2.076.207H13v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.368,0h.2v2.066h-.2Zm2.654,2.653h2.479v2.48h-2.48V13.14Zm2.076.207h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.368,0h.192v2.067h-.2V13.346Zm-.206-3.067h2.479v2.479h-2.48V10.279Zm2.076.207h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.376,0h.2v2.066h-.2Zm-.368,0h.192v2.066h-.2V10.486Zm-.206-3.067h2.479V9.9h-2.48V7.419Zm2.076.206h.2V9.691h-.2Zm-.376,0h.2V9.691h-.2Zm-.376,0h.2V9.691h-.2Zm-.376,0h.2V9.691h-.2Zm-.376,0h.2V9.691h-.2Zm-.368,0h.192V9.691h-.2V7.625Zm2.654,5.514h2.479v2.48h-2.48V13.14Zm2.076.207h.195v2.067h-.2V13.346Zm-.376,0h.206v2.067h-.206Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.2Zm-.376,0h.2v2.067h-.205V13.346Zm-.368,0h.2v2.067h-.194V13.346Z" style="fill:#fff"/><path d="M10.188,19.638a.684.684,0,1,1-.684.684A.684.684,0,0,1,10.188,19.638Zm0,.194a.489.489,0,0,1,.177.033.2.2,0,1,0,.275.269.49.49,0,1,1-.453-.3Z" style="fill:#fff"/>'
|
||
},
|
||
"DOT (Graphviz)": {
|
||
colour: "#4ed1f8",
|
||
icon: '<polygon points="23.942 30 12.679 30 1.417 30 1.417 16 1.417 2 12.679 2 23.942 2 23.942 16 23.942 30" style="fill:#e6e6e6"/><rect x="2.132" y="3.202" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="7.42" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="11.638" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="15.856" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="20.074" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="24.293" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="28.511" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2" y="3.202" width="0.264" height="25.573" style="fill:#4ed1f8"/><rect x="6.218" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="10.436" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="14.655" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="18.873" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="23.091" y="3.202" width="0.264" height="25.573" style="fill:#4ed1f8"/><g style="opacity:0.5"><rect x="2.132" y="27.456" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="26.402" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="25.347" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="23.238" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="22.184" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="21.129" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="19.02" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="17.965" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="16.911" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="14.802" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="13.747" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="12.693" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="10.583" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="9.529" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="8.474" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="6.365" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="5.311" width="21.135" height="0.264" style="fill:#4ed1f8"/><rect x="2.132" y="4.256" width="21.135" height="0.264" style="fill:#4ed1f8"/></g><g style="opacity:0.5"><rect x="22.036" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="20.982" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="19.927" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="17.818" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="16.764" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="15.709" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="13.6" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="12.545" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="11.491" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="9.382" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="8.327" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="7.273" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="5.164" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="4.109" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/><rect x="3.055" y="3.333" width="0.264" height="25.331" style="fill:#4ed1f8"/></g><path d="M13,8.976c-2.308,0-4.131-1.274-4.193-2.969h0a2.775,2.775,0,0,1,1.253-2.32,5.3,5.3,0,0,1,2.943-.963,5.294,5.294,0,0,1,3.006.743,2.775,2.775,0,0,1,1.421,2.221c.065,1.752-1.779,3.194-4.2,3.283C13.158,8.974,13.08,8.976,13,8.976Zm.232-5.2q-.095,0-.19,0a4.238,4.238,0,0,0-2.354.756,1.761,1.761,0,0,0-.828,1.435C9.9,7.09,11.428,7.978,13.2,7.917s3.223-1.069,3.181-2.191a1.761,1.761,0,0,0-.932-1.369A4.165,4.165,0,0,0,13.234,3.773Z" style="fill:#656565"/><path d="M6.4,29.281A5.238,5.238,0,0,1,3.6,28.519a2.775,2.775,0,0,1-1.41-2.229c-.056-1.752,1.8-3.185,4.213-3.262s4.356,1.236,4.412,2.988A2.775,2.775,0,0,1,9.548,28.33a5.3,5.3,0,0,1-2.948.948Q6.5,29.281,6.4,29.281Zm.186-5.2-.156,0c-1.766.056-3.229,1.052-3.193,2.174a1.761,1.761,0,0,0,.924,1.374,4.235,4.235,0,0,0,2.4.593,4.235,4.235,0,0,0,2.357-.744,1.761,1.761,0,0,0,.835-1.43C9.724,24.961,8.29,24.08,6.591,24.08Z" style="fill:#656565"/><path d="M19.261,29.26a5.238,5.238,0,0,1-2.807-.762,2.775,2.775,0,0,1-1.41-2.229h0c-.055-1.752,1.8-3.185,4.213-3.262a5.3,5.3,0,0,1,3,.759A2.6,2.6,0,0,1,22.4,28.31a5.3,5.3,0,0,1-2.948.948Q19.358,29.26,19.261,29.26ZM16.1,26.236a1.761,1.761,0,0,0,.924,1.374,4.57,4.57,0,0,0,4.757-.151,1.558,1.558,0,0,0-.089-2.8,4.226,4.226,0,0,0-2.4-.593c-1.766.056-3.228,1.052-3.193,2.174Z" style="fill:#656565"/><path d="M6.2,23.477A27.4,27.4,0,0,1,9.769,8.986l.687.391A26.609,26.609,0,0,0,6.986,23.45Z" style="fill:#656565"/><path d="M10.853,7.957a7.171,7.171,0,0,0-.075,2.32l-.758-.93-1.178-.23A7.165,7.165,0,0,0,10.853,7.957Z" style="fill:#656565"/><path d="M19.854,23.477l-.79-.027a26.59,26.59,0,0,0-.915-7.884,26.624,26.624,0,0,0-2.554-6.189l.687-.391a27.423,27.423,0,0,1,2.63,6.373A27.372,27.372,0,0,1,19.854,23.477Z" style="fill:#656565"/><path d="M15.2,7.957a7.171,7.171,0,0,0,2.011,1.159l-1.178.23-.758.93A7.165,7.165,0,0,0,15.2,7.957Z" style="fill:#656565"/><rect x="11.348" y="9.945" width="3.515" height="0.791" transform="matrix(0.016, -1, 1, 0.016, 2.557, 23.279)" style="fill:#656565"/><path d="M13.054,13.529a7.171,7.171,0,0,0-1.1-2.046l1.122.426,1.135-.39A7.165,7.165,0,0,0,13.054,13.529Z" style="fill:#656565"/><rect x="7.809" y="20.081" width="4.757" height="0.791" transform="translate(-12.56 18.108) rotate(-57.603)" style="fill:#656565"/><path d="M8.147,23.694a7.171,7.171,0,0,0,.133-2.317l.734.949,1.171.26A7.165,7.165,0,0,0,8.147,23.694Z" style="fill:#656565"/><rect x="15.418" y="18.051" width="0.791" height="4.919" transform="translate(-8.257 10.951) rotate(-30.708)" style="fill:#656565"/><path d="M17.8,23.856a7.171,7.171,0,0,0-2.006-1.168l1.179-.225.762-.927A7.165,7.165,0,0,0,17.8,23.856Z" style="fill:#656565"/><path d="M13.024,19.125a5.238,5.238,0,0,1-2.807-.762,2.775,2.775,0,0,1-1.41-2.229,2.775,2.775,0,0,1,1.266-2.314,5.3,5.3,0,0,1,2.948-.948,6.712,6.712,0,0,1,2.134.313l-.331,1a5.668,5.668,0,0,0-1.769-.261,4.238,4.238,0,0,0-2.358.744,1.761,1.761,0,0,0-.835,1.43,1.761,1.761,0,0,0,.924,1.374,4.242,4.242,0,0,0,2.4.593,5.7,5.7,0,0,0,1.678-.378l.378.985a6.844,6.844,0,0,1-2.022.448Q13.121,19.125,13.024,19.125Z" style="fill:#656565"/><path d="M15.435,12.876a4.338,4.338,0,0,0-.984,1.622,2.064,2.064,0,0,1-.016,2.806,4.4,4.4,0,0,0,.982,1.6,3.932,3.932,0,0,0,.078-5.986C15.476,12.9,15.454,12.893,15.435,12.876Z" style="fill:#656565"/><path d="M19.525,15.278a27.931,27.931,0,0,0-1.263-3.742,4.376,4.376,0,0,0-1.777.517,26.063,26.063,0,0,1,1.253,3.685,26.038,26.038,0,0,1,.734,4.534,4.347,4.347,0,0,0,1.825-.351A27.9,27.9,0,0,0,19.525,15.278Z" style="fill:#656565"/><path d="M16.153,12.229A4.437,4.437,0,1,0,22.3,13.5,4.437,4.437,0,0,0,16.153,12.229Zm4.812,7.332a4.346,4.346,0,1,1,1.249-6.018A4.346,4.346,0,0,1,20.965,19.561Z" style="fill:#2c2928"/><path d="M22.015,19.186a.822.822,0,0,0-.192-.209,4.347,4.347,0,0,1-.333.319,4.522,4.522,0,0,1-.446.337,4.73,4.73,0,0,1-.94.477.669.669,0,0,0,.031.1.64.64,0,0,0,.047.094l.487.8L22.5,19.984Z" style="fill:#282828"/><rect x="20.793" y="20.784" width="2.147" height="0.44" transform="translate(-7.74 14.465) rotate(-31.394)" style="fill:#282828"/><rect x="22.868" y="20.96" width="2.147" height="6.887" transform="translate(-9.207 16.044) rotate(-31.394)" style="fill:#282828"/><path d="M27.054,27.443l-.236-.387-1.833,1.119.236.387a.924.924,0,0,0,1.279.159l.11-.067A.924.924,0,0,0,27.054,27.443Z" style="fill:#282828"/><path d="M20.68,14.845a.315.315,0,0,1,.338.027,1.078,1.078,0,0,1,.294.578,1.1,1.1,0,0,1,.029.654.327.327,0,0,1-.278.2.468.468,0,0,1-.37-.1.922.922,0,0,1-.262-.5.955.955,0,0,1-.01-.585A.466.466,0,0,1,20.68,14.845Zm.06.227a.149.149,0,0,0-.074.063.247.247,0,0,0-.027.132,1.626,1.626,0,0,0,.064.355,1.592,1.592,0,0,0,.112.329.268.268,0,0,0,.094.11.142.142,0,0,0,.094.015.121.121,0,0,0,.078-.048.211.211,0,0,0,.028-.128,2.643,2.643,0,0,0-.186-.722.235.235,0,0,0-.093-.107A.116.116,0,0,0,20.739,15.072Z" style="fill:#00ff80"/><path d="M21.694,14.4a.3.3,0,0,1,.346.057,1.493,1.493,0,0,1,.325.7,1.521,1.521,0,0,1,.06.771.31.31,0,0,1-.27.228.446.446,0,0,1-.379-.137,1.31,1.31,0,0,1-.292-.617,1.341,1.341,0,0,1-.041-.7A.441.441,0,0,1,21.694,14.4Zm.072.273a.136.136,0,0,0-.072.069.315.315,0,0,0-.021.155,2.351,2.351,0,0,0,.084.427,2.31,2.31,0,0,0,.131.4.347.347,0,0,0,.1.135.13.13,0,0,0,.1.021.11.11,0,0,0,.076-.054.275.275,0,0,0,.022-.15,3.773,3.773,0,0,0-.224-.862.311.311,0,0,0-.1-.132A.1.1,0,0,0,21.766,14.674Z" style="fill:#00ff80"/><path d="M23.472,15.934l-.269.038-.379-1.439a.955.955,0,0,1-.257.392l-.087-.331a.841.841,0,0,0,.169-.26.874.874,0,0,0,.075-.383l.2-.089Z" style="fill:#00ff80"/><path d="M24.455,15.794l-.269.038-.429-1.625a1,1,0,0,1-.247.429l-.1-.376a.874.874,0,0,0,.162-.284,1.028,1.028,0,0,0,.064-.424l.2-.089Z" style="fill:#00ff80"/><path d="M24.636,13.117c.127-.055.249-.008.369.144a3.11,3.11,0,0,1,.416,1.034,3.143,3.143,0,0,1,.151,1.11c-.029.19-.111.294-.247.312s-.272-.059-.4-.231a2.855,2.855,0,0,1-.381-.95,2.871,2.871,0,0,1-.132-1.039A.437.437,0,0,1,24.636,13.117Zm.107.4a.124.124,0,0,0-.067.088.584.584,0,0,0,0,.221,5.218,5.218,0,0,0,.139.635,5.153,5.153,0,0,0,.184.6.66.66,0,0,0,.12.208.118.118,0,0,0,.1.04.1.1,0,0,0,.071-.072.528.528,0,0,0,0-.216,5.442,5.442,0,0,0-.144-.653,5.447,5.447,0,0,0-.189-.619.612.612,0,0,0-.119-.205A.093.093,0,0,0,24.743,13.522Z" style="fill:#00ff80"/><path d="M26.638,15.488l-.269.038-.54-2.039A1.151,1.151,0,0,1,25.6,14l-.126-.475a.99.99,0,0,0,.148-.337,1.436,1.436,0,0,0,.039-.515l.2-.088Z" style="fill:#00ff80"/><path d="M26.666,12.236c.127-.055.255.012.385.2a4.584,4.584,0,0,1,.478,1.268,4.62,4.62,0,0,1,.213,1.343c-.018.229-.1.352-.232.37s-.278-.081-.421-.3a4.284,4.284,0,0,1-.443-1.179,4.283,4.283,0,0,1-.194-1.272C26.468,12.438,26.539,12.291,26.666,12.236Zm.131.5q-.046.018-.064.1a.829.829,0,0,0,.009.266,7.856,7.856,0,0,0,.178.779q.143.541.221.738a.947.947,0,0,0,.134.258.119.119,0,0,0,.1.052q.048-.009.068-.085a.762.762,0,0,0-.008-.262,8.117,8.117,0,0,0-.182-.8q-.148-.557-.227-.757a.892.892,0,0,0-.133-.256Q26.843,12.714,26.8,12.732Z" style="fill:#00ff80"/><path d="M27.681,11.8c.127-.055.257.023.393.234a5.431,5.431,0,0,1,.509,1.385,5.467,5.467,0,0,1,.244,1.46c-.013.249-.088.381-.224.4s-.281-.092-.43-.328a5.11,5.11,0,0,1-.473-1.294,5.1,5.1,0,0,1-.225-1.388C27.486,12.008,27.555,11.851,27.681,11.8Zm.144.542q-.046.018-.062.106a.97.97,0,0,0,.015.289q.04.259.2.851t.24.807a1.112,1.112,0,0,0,.14.284q.057.067.106.059t.066-.091a.9.9,0,0,0-.014-.284q-.04-.26-.2-.867t-.245-.827a1.053,1.053,0,0,0-.14-.281Q27.871,12.32,27.825,12.338Z" style="fill:#00ff80"/><path d="M29.915,15.034l-.27.037-.706-2.661a1.478,1.478,0,0,1-.192.636l-.166-.625A1.248,1.248,0,0,0,28.708,12a2.214,2.214,0,0,0,0-.653l.2-.088Z" style="fill:#00ff80"/><path d="M29.712,10.921c.127-.054.263.043.409.294a7.345,7.345,0,0,1,.572,1.619A7.382,7.382,0,0,1,31,14.527c0,.288-.072.44-.209.458s-.286-.114-.447-.393a6.984,6.984,0,0,1-.535-1.524,6.944,6.944,0,0,1-.287-1.621C29.523,11.151,29.586,10.975,29.712,10.921Zm.168.633q-.046.018-.059.119a1.287,1.287,0,0,0,.027.334q.051.3.235.994t.277.946a1.484,1.484,0,0,0,.154.334q.06.08.109.071t.063-.1a1.2,1.2,0,0,0-.026-.33q-.051-.3-.239-1.011t-.282-.965a1.42,1.42,0,0,0-.153-.332Q29.926,11.536,29.88,11.553Z" style="fill:#00ff80"/><path d="M21.167,16.362a.422.422,0,0,1,.318.185,1.005,1.005,0,0,1-.277,1.03.42.42,0,0,1-.366,0,.59.59,0,0,1-.311-.261.808.808,0,0,1,.254-.893A.561.561,0,0,1,21.167,16.362Zm-.051.189a.175.175,0,0,0-.192.087,1.487,1.487,0,0,0-.155.567.216.216,0,0,0,.039.124.191.191,0,0,0,.084.058.145.145,0,0,0,.188-.069,1.666,1.666,0,0,0,.164-.6.189.189,0,0,0-.04-.121A.163.163,0,0,0,21.117,16.551Z" style="fill:#00ff80"/><path d="M22.376,16.548a.382.382,0,0,1,.311.212,1.024,1.024,0,0,1-.019.66,1.022,1.022,0,0,1-.315.581.38.38,0,0,1-.373.025.533.533,0,0,1-.3-.29,1.189,1.189,0,0,1,.309-1.1A.5.5,0,0,1,22.376,16.548Zm-.062.23a.167.167,0,0,0-.1.013.235.235,0,0,0-.1.1,2.219,2.219,0,0,0-.189.694.269.269,0,0,0,.033.147.167.167,0,0,0,.083.064.143.143,0,0,0,.1,0,.206.206,0,0,0,.094-.1,2.436,2.436,0,0,0,.2-.727.24.24,0,0,0-.034-.144A.141.141,0,0,0,22.314,16.778Z" style="fill:#00ff80"/><path d="M23.37,18.541l-.281-.11.328-1.225a1,1,0,0,1-.442.152l.075-.281a.881.881,0,0,0,.292-.1.68.68,0,0,0,.259-.238l.242.037Z" style="fill:#00ff80"/><path d="M24.793,16.919a.348.348,0,0,1,.3.266,1.751,1.751,0,0,1-.075.87,1.749,1.749,0,0,1-.371.791.345.345,0,0,1-.388.078.488.488,0,0,1-.288-.348,1.587,1.587,0,0,1,.067-.79,1.577,1.577,0,0,1,.354-.727A.457.457,0,0,1,24.793,16.919Zm-.084.312a.143.143,0,0,0-.107.025.353.353,0,0,0-.106.141,4.126,4.126,0,0,0-.257.948.408.408,0,0,0,.021.192.143.143,0,0,0,.08.075.12.12,0,0,0,.1-.011.318.318,0,0,0,.105-.137,4.418,4.418,0,0,0,.266-.981.374.374,0,0,0-.022-.189A.119.119,0,0,0,24.71,17.231Z" style="fill:#00ff80"/><path d="M25.649,19.43l-.281-.11.428-1.6a1.033,1.033,0,0,1-.462.227l.1-.371a.9.9,0,0,0,.3-.151.93.93,0,0,0,.281-.321l.242.037Z" style="fill:#00ff80"/><path d="M27.211,17.291a.344.344,0,0,1,.282.319,2.692,2.692,0,0,1-.131,1.08,2.69,2.69,0,0,1-.427,1,.34.34,0,0,1-.4.13.487.487,0,0,1-.273-.405,2.494,2.494,0,0,1,.122-1,2.47,2.47,0,0,1,.41-.937A.451.451,0,0,1,27.211,17.291Zm-.106.394a.133.133,0,0,0-.11.036.509.509,0,0,0-.117.182,6.622,6.622,0,0,0-.325,1.2.591.591,0,0,0,.009.237.133.133,0,0,0,.077.086.11.11,0,0,0,.107-.023.465.465,0,0,0,.116-.178,4.639,4.639,0,0,0,.2-.619,4.658,4.658,0,0,0,.136-.615.552.552,0,0,0-.01-.235A.11.11,0,0,0,27.105,17.685Z" style="fill:#00ff80"/><path d="M27.927,20.32l-.281-.11.528-1.971a1.134,1.134,0,0,1-.482.3l.123-.46a.972.972,0,0,0,.317-.2,1.248,1.248,0,0,0,.3-.4l.242.037Z" style="fill:#00ff80"/><path d="M28.953,20.721l-.281-.11.573-2.139a1.2,1.2,0,0,1-.491.336l.134-.5a1.02,1.02,0,0,0,.323-.22,1.413,1.413,0,0,0,.314-.44l.242.037Z" style="fill:#00ff80"/><path d="M30.717,17.83c.151.023.238.155.262.4a4.436,4.436,0,0,1-.213,1.385,4.434,4.434,0,0,1-.509,1.307c-.14.195-.28.263-.422.207s-.226-.22-.25-.489a4.194,4.194,0,0,1,.2-1.3,4.143,4.143,0,0,1,.492-1.241C30.42,17.9,30.566,17.807,30.717,17.83Zm-.137.513a.132.132,0,0,0-.115.053.8.8,0,0,0-.133.241,7.587,7.587,0,0,0-.244.791,7.539,7.539,0,0,0-.18.779.93.93,0,0,0-.009.3.131.131,0,0,0,.073.1.108.108,0,0,0,.111-.039.742.742,0,0,0,.132-.237,7.8,7.8,0,0,0,.248-.806,7.835,7.835,0,0,0,.185-.8.884.884,0,0,0,.008-.3Q30.633,18.353,30.58,18.343Z" style="fill:#00ff80"/>'
|
||
},
|
||
"EditorConfig": {
|
||
colour: "#e3e3f8",
|
||
icon: '<path d="M8.709,18.351a1.267,1.267,0,0,0,.532-1.379C8.692,17.207,8.718,17.749,8.709,18.351Z" style="fill:#e3e3f8"/><path d="M14.924,19.852a.871.871,0,0,0,.62-1.135A1.43,1.43,0,0,0,14.924,19.852Z" style="fill:#e3e3f8"/><path d="M2.713,27.079a1.538,1.538,0,0,0,.524,1.353c1.414.794,6.372.175,8.056-.2a14.994,14.994,0,0,0,2.426-1.213,22.643,22.643,0,0,0,4.713-2.557c1.082-.794,2.8-3.029,2.985-4.364l-1.475-.332c-.035,1.5-.375,1.842-1.711,2.191a10.662,10.662,0,0,1-3.57.14,3.362,3.362,0,0,1-2.313-1.562c-1.065-1.414.236-2.4-1.449-2.5-1.772,2.173-4.9.611-6.267.393a30.066,30.066,0,0,0-1.938,7.6,2.748,2.748,0,0,1,2.138.323c2.688,1.039.34,1.955-.733,1.685C3.368,27.864,3.141,27.384,2.713,27.079Z" style="fill:#fdfdfd"/><path d="M6.231,14.537a11.539,11.539,0,0,1,2.985,1.126c1.51.751,1.781.646,1.92,1.693.017.192-.017.3.532.471.925.288-.532-.227,1.946-.218A16.64,16.64,0,0,1,19.559,18.9c.454.288.367.655,1.9.611a18.767,18.767,0,0,0-1.2-6.162c-.864-2.007-2.007-2.313-4.338-3.064-1.362-.436-5.359-.916-6.6-.148-1.161.724-1.379,1.589-2.461,3.107A5.366,5.366,0,0,0,6.231,14.537Z" style="fill:#fdfdfd"/><path d="M15.84,18.246c.873.358-.044,2.671-1.257,2.112-.393-1.108.541-1.737.794-2.234a8.51,8.51,0,0,0-2.461-.148c-.576.218-.707,1.449-.41,2.025,1.4,2.741,7.567,2.156,6.913.026-.262-.864-.506-1-1.388-1.3A6.885,6.885,0,0,0,15.84,18.246Z" style="fill:#fdfdfd"/><path d="M4.869,17.941c.7.672,2.278.777,3.3.829C8.3,17.417,8.413,16.4,9.5,16.483a1.6,1.6,0,0,1-.305,2.13,1.386,1.386,0,0,0,1.362-1.763,14.542,14.542,0,0,0-4.46-1.894A9.506,9.506,0,0,0,4.869,17.941Z" style="fill:#fdfdfd"/><path d="M3.228,26.581c.576-.052,2.077.384,2.2.873C4.494,27.568,3.307,27.48,3.228,26.581Zm-.515.5c.428.305.655.786,1.388.96,1.074.271,3.421-.646.733-1.685A2.748,2.748,0,0,0,2.7,26.032a30.066,30.066,0,0,1,1.938-7.6c1.37.218,4.495,1.781,6.267-.393,1.685.1.384,1.082,1.449,2.5A3.362,3.362,0,0,0,14.662,22.1a10.662,10.662,0,0,0,3.57-.14c1.335-.349,1.676-.69,1.711-2.191l1.475.332c-.183,1.335-1.9,3.57-2.985,4.364a22.643,22.643,0,0,1-4.713,2.557,14.994,14.994,0,0,1-2.426,1.213c-1.685.375-6.642,1-8.056.2A1.538,1.538,0,0,1,2.713,27.079Zm12.211-7.227a1.43,1.43,0,0,1,.62-1.135A.871.871,0,0,1,14.924,19.852Zm.916-1.606a6.885,6.885,0,0,1,2.191.48c.882.3,1.126.436,1.388,1.3.655,2.13-5.516,2.714-6.913-.026-.3-.576-.166-1.807.41-2.025a8.51,8.51,0,0,1,2.461.148c-.253.5-1.187,1.126-.794,2.234C15.8,20.917,16.713,18.6,15.84,18.246Zm-7.131.1c.009-.6-.017-1.143.532-1.379A1.267,1.267,0,0,1,8.709,18.351Zm-3.84-.41a9.506,9.506,0,0,1,1.222-2.985,14.542,14.542,0,0,1,4.46,1.894A1.386,1.386,0,0,1,9.19,18.613a1.6,1.6,0,0,0,.305-2.13c-1.082-.079-1.2.934-1.327,2.287C7.147,18.717,5.567,18.613,4.869,17.941ZM4,17.242c-.323-.89-.323-2.278,1.047-2.392l-.7,1.946C4.162,17.216,4.162,17.12,4,17.242Zm2.234-2.706a5.366,5.366,0,0,1,.628-1.292c1.082-1.519,1.3-2.383,2.461-3.107,1.239-.768,5.237-.288,6.6.148,2.33.751,3.474,1.056,4.338,3.064a18.767,18.767,0,0,1,1.2,6.162c-1.536.044-1.449-.323-1.9-.611a16.64,16.64,0,0,0-5.944-1.292c-2.479-.009-1.021.506-1.946.218-.55-.175-.515-.279-.532-.471-.14-1.047-.41-.943-1.92-1.693A11.539,11.539,0,0,0,6.231,14.537Zm15.449-.428c-.166-.55.14-.515.672-.89a9.021,9.021,0,0,1,.925-.655c1.405-.786,4.024-.916,5.141.017A2.479,2.479,0,0,1,29.5,14.65a5.838,5.838,0,0,1-2.618,3.832,5.213,5.213,0,0,1-4.783,1.2c-.157-.384-.035-2.819-.218-3.718-.166-.8-.079-.89.384-1.37,1.362-1.414,4.312-2.444,5.988-1.231.707.524.506.724.873,1.126.454-.489-.393-2.13-3.517-2.025C23.486,12.529,22.57,14.187,21.68,14.109ZM8.971,9.143a8.094,8.094,0,0,1,2.278-4.6C12.6,3.5,14.016,2.509,16.094,3.687c.515.288.489.436.541,1.152a3.312,3.312,0,0,1-.192,1.5c-1.379,4.451-2.531,1.894-6.948,2.95a6.374,6.374,0,0,1,2.121-3.413c1.2-1.161,2.06-1.911,3.858-1.667a1.842,1.842,0,0,1-.052,2.322c-.8,1.292-1,1.213-.882,2.095.628-.157.82-.768,1.108-1.379,1.754-3.666-.794-4.111-2.357-3.439A10.372,10.372,0,0,0,9.766,7.554c-.122.244-.253.559-.367.829Zm6.913.183C16.067,8.235,17.15,7.964,17.15,4.6c0-1.449-1.781-2.749-4.111-1.781-2,.82-2.3,1.449-3.369,3.055-1,1.519-.969,3.186-1.833,4.591-.253.4-.48.541-.759.943-.2.3-.349.672-.55,1.021A12.94,12.94,0,0,0,5.367,14.4c-1.047.026-1.929.044-2.034,1.126-.14,1.484.559,1.85.559,2.409-.009.6-2.453,6.677-1.772,10.3.192,1,.847,1,1.894,1.126a17.93,17.93,0,0,0,8.056-.707l4.1-1.964a18.85,18.85,0,0,0,3.561-2.5,12.383,12.383,0,0,0,1.309-1.719,3.213,3.213,0,0,0,.8-2.208,8.473,8.473,0,0,1,2.985,1c-.061.6-.358.314-.358.855a1.355,1.355,0,0,0,1.047-.89c-.358-.524-.733-.436-1.248-.855a8.212,8.212,0,0,1,1.719-.707c1.222-.506,3.308-2.042,3.823-3.439a4.449,4.449,0,0,0-.559-3.736,5.444,5.444,0,0,0-3.648-1.161c-1.58,0-3.212,1.135-4.486,1.623-.489-.428-.524-.916-.882-1.388A12.281,12.281,0,0,0,15.884,9.326Z" style="fill:#020202"/><path d="M21.68,14.109c.89.079,1.807-1.58,3.928-1.65,3.125-.1,3.971,1.536,3.517,2.025-.367-.4-.166-.6-.873-1.126-1.676-1.213-4.626-.183-5.988,1.231-.463.48-.55.567-.384,1.37.183.9.061,3.334.218,3.718a5.213,5.213,0,0,0,4.783-1.2A5.838,5.838,0,0,0,29.5,14.65a2.479,2.479,0,0,0-1.082-2.069c-1.117-.934-3.736-.8-5.141-.017a9.021,9.021,0,0,0-.925.655C21.819,13.594,21.514,13.559,21.68,14.109Z" style="fill:#fdf2f2"/><path d="M8.971,9.143,9.4,8.383c.113-.271.244-.585.367-.829A10.372,10.372,0,0,1,13.292,3.81c1.562-.672,4.111-.227,2.357,3.439-.288.611-.48,1.222-1.108,1.379-.122-.882.079-.8.882-2.095a1.842,1.842,0,0,0,.052-2.322c-1.8-.244-2.662.506-3.858,1.667A6.374,6.374,0,0,0,9.5,9.291c4.416-1.056,5.569,1.5,6.948-2.95a3.312,3.312,0,0,0,.192-1.5c-.052-.716-.026-.864-.541-1.152-2.077-1.178-3.491-.192-4.844.855A8.094,8.094,0,0,0,8.971,9.143Z" style="fill:#fef3f3"/><path d="M4,17.242c.166-.122.166-.026.349-.445l.7-1.946C3.673,14.964,3.673,16.352,4,17.242Z" style="fill:#efefef"/><path d="M5.428,27.454c-.122-.489-1.623-.925-2.2-.873C3.307,27.48,4.494,27.568,5.428,27.454Z" style="fill:#faf1f1"/>'
|
||
},
|
||
"EJS": {
|
||
colour: "#90a93a",
|
||
icon: '<path d="M2,17.672V14.328l11.86-6.2V11.2L5.1,15.939l8.762,4.835v3.1Zm27.814-8.88L19.465,23.229H15.912L26.281,8.791ZM26.947,21.5a.794.794,0,0,0,.619-.278,1.061,1.061,0,0,0,.248-.732,1.141,1.141,0,0,0-.248-.753.768.768,0,0,0-1.217,0,1.141,1.141,0,0,0-.248.753,1.09,1.09,0,0,0,.237.732A.763.763,0,0,0,26.947,21.5Zm2.186,1.042a3.237,3.237,0,0,1-4.352-.01,2.864,2.864,0,0,1,0-4.1,3.223,3.223,0,0,1,4.352,0A2.773,2.773,0,0,1,30,20.486,2.74,2.74,0,0,1,29.134,22.538ZM18.821,13.061a.794.794,0,0,0,.619-.278,1.061,1.061,0,0,0,.248-.732,1.141,1.141,0,0,0-.248-.753.769.769,0,0,0-1.217,0,1.141,1.141,0,0,0-.248.753,1.09,1.09,0,0,0,.237.732A.763.763,0,0,0,18.821,13.061ZM21.007,14.1a3.237,3.237,0,0,1-4.352-.01,2.864,2.864,0,0,1,0-4.1,3.223,3.223,0,0,1,4.352,0,2.773,2.773,0,0,1,.866,2.063A2.74,2.74,0,0,1,21.007,14.1Z" style="fill:#90a93a"/>'
|
||
},
|
||
"Elixir": {
|
||
colour: "#452459",
|
||
icon: '<defs><linearGradient id="a" x1="17.249" y1="-335.597" x2="14.973" y2="-309.994" gradientTransform="matrix(1, 0, 0, -1, 0, -306)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff" stop-opacity="0"/><stop offset="0.01" stop-color="#f7f6f8" stop-opacity="0.04"/><stop offset="0.09" stop-color="#aa9cb3" stop-opacity="0.39"/><stop offset="0.2" stop-color="#6f567e" stop-opacity="0.66"/><stop offset="0.32" stop-color="#452459" stop-opacity="0.86"/><stop offset="0.5" stop-color="#2d0843" stop-opacity="0.97"/><stop offset="1" stop-color="#26003d"/></linearGradient></defs><title>file_type_elixir</title><path d="M17.8,8.591c2.079,4.584,7.64,6.5,7.141,12.474-.582,7.017-5.551,8.784-8.316,8.909a8.815,8.815,0,0,1-9.4-7.485C5.618,15.046,12.655,3.632,16.709,2A15.083,15.083,0,0,0,17.8,8.591Zm-.166,18.857a.423.423,0,0,0-.057-.327c-.593-1.1-5.81-1.645-6.907-1.752a8.272,8.272,0,0,0,1.635,1.3,7.766,7.766,0,0,0,2.814,1.041C15.922,27.831,17.467,27.933,17.635,27.447Z" style="fill:#7c648f"/><g style="opacity:0.25"><path d="M18.248,10.618c4.47,4.823,6.445,4.979,6.237,10.478-.249,6.476-4.543,8.191-7.058,8.42-4.2.551-7.495-1.528-8.358-5.686C7.312,17.063,12.978,6.023,16.637,4.36A15.323,15.323,0,0,0,18.258,10.6Z" style="fill:#26003d"/></g><g style="opacity:0.75"><path d="M17.385,9.921C20.369,14,24.319,13.7,25,19.641c.094,6.923-3.6,9.283-6.237,9.948-4.5,1.279-8.514-.645-10.094-5-3.035-7,2.651-18.514,6.31-20.915a15.083,15.083,0,0,0,2.37,6.237Z" style="fill:url(#a)"/></g>'
|
||
},
|
||
"Elm": {
|
||
colour: "#8cd636",
|
||
icon: '<path d="M16,16.768,2.768,30H29.232Z" style="fill:#5fb4cb"/><path d="M24.13,23.362,30,29.232V17.492Z" style="fill:#eea400"/><path d="M15.232,16,2,2.768V29.232Z" style="fill:#596277"/><path d="M30,14.448V2H17.552Z" style="fill:#5fb4cb"/><path d="M23.392,9.376l6.594,6.594-6.624,6.624L16.768,16ZM2.768,2,8.863,8.1H22.111L16.016,2Z" style="fill:#8cd636"/><path d="M16,15.232l6.051-6.051H9.949Z" style="fill:#eea400"/>'
|
||
},
|
||
"ERB": {
|
||
colour: "#921a1e",
|
||
icon: '<path d="M7.25,24.75h17.5L12.5,12.5,7.25,17.75ZM2,30H30V2H16L2,16Zm25.375-2.625H4.625v-10.5l12.25-12.25h10.5Z" style="fill:#921a1e"/>'
|
||
},
|
||
"Erlang": {
|
||
colour: "#a2003e",
|
||
icon: '<path d="M6.388,23.867a11.012,11.012,0,0,1-3.441-8.234,10.765,10.765,0,0,1,2.864-7.5H2v15.73Zm20.066,0a16.44,16.44,0,0,0,2.537-3.136l-4.218-1.873a8.306,8.306,0,0,1-6.641,4.12c-4.359-.014-6.072-3.329-6.063-7.584H28.36a6.465,6.465,0,0,0,0-.935,9.057,9.057,0,0,0-2.029-6.326H30v15.73H26.456ZM12.332,11.742a3.723,3.723,0,0,1,3.9-3.23,3.29,3.29,0,0,1,3.532,3.23Z" style="fill:#a2003e"/>'
|
||
},
|
||
"F#": {
|
||
colour: "#378bba",
|
||
icon: '<path d="M2,16,15.288,2.712V9.356L8.644,16l6.644,6.644v6.644Z" style="fill:#378bba"/><path d="M10.542,16l4.746-4.746v9.492Z" style="fill:#378bba"/><path d="M30,16,16.237,2.712V9.356L22.881,16l-6.644,6.644v6.644Z" style="fill:#30b9db"/>'
|
||
},
|
||
"Firestore security rules": {
|
||
colour: "#f6820c",
|
||
icon: '<path d="M5.8,24.6l.17-.237L13.99,9.149l.017-.161-3.535-6.64a.656.656,0,0,0-1.227.207Z" style="fill:#ffc24a"/><path d="M5.9,24.42l.128-.25L13.965,9.114,10.439,2.448a.6.6,0,0,0-1.133.206Z" style="fill:#ffa712"/><path d="M16.584,14.01l2.632-2.7L16.583,6.289a.678.678,0,0,0-1.195,0L13.981,8.971V9.2Z" style="fill:#f4bd62"/><path d="M16.537,13.9,19.1,11.28,16.537,6.4a.589.589,0,0,0-1.074-.047L14.049,9.082l-.042.139Z" style="fill:#ffa50e"/><polygon points="5.802 24.601 5.879 24.523 6.158 24.41 16.418 14.188 16.548 13.834 13.989 8.956 5.802 24.601" style="fill:#f6820c"/><path d="M16.912,29.756,26.2,24.577,23.546,8.246A.635.635,0,0,0,22.471,7.9L5.8,24.6l9.233,5.155a1.927,1.927,0,0,0,1.878,0" style="fill:#fde068"/><path d="M26.115,24.534,23.483,8.326a.557.557,0,0,0-.967-.353L5.9,24.569l9.131,5.1a1.912,1.912,0,0,0,1.863,0Z" style="fill:#fcca3f"/><path d="M16.912,29.6a1.927,1.927,0,0,1-1.878,0L5.876,24.522,5.8,24.6l9.233,5.155a1.927,1.927,0,0,0,1.878,0L26.2,24.577l-.023-.14Z" style="fill:#eeab37"/><polygon points="23.201 13 15.405 16.534 15.405 27.603 21.625 24.785 21.625 31 31 26.743 31 16.534 23.201 13" style="fill:#252525"/><polygon points="23.201 14.73 16.985 17.549 16.985 20.327 23.201 17.507 29.421 20.327 29.421 17.549 23.201 14.73" style="fill:#fff"/><polygon points="23.201 19.564 16.985 22.381 16.985 25.158 23.201 22.337 29.421 25.158 29.421 22.381 23.201 19.564" style="fill:#fff"/><polygon points="28.606 26.098 25.551 24.712 23.201 25.778 23.201 28.548 28.606 26.098" style="fill:#fff"/>'
|
||
},
|
||
"Flow": {
|
||
colour: "#ffb047",
|
||
icon: '<defs><linearGradient id="a" x1="-67.907" y1="-308.551" x2="-67.857" y2="-308.564" gradientTransform="matrix(87.822, 0, 0, -88.533, 5984.532, -27290.617)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd441"/><stop offset="1" stop-color="#ffb047"/></linearGradient><linearGradient id="b" x1="-67.674" y1="-310.121" x2="-67.647" y2="-310.063" gradientTransform="matrix(87.822, 0, 0, -88.533, 5964.667, -27443)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd754"/><stop offset="1" stop-color="#ffb532"/></linearGradient><linearGradient id="c" x1="-67.029" y1="-310.91" x2="-67.029" y2="-310.86" gradientTransform="matrix(87.822, 0, 0, -88.533, 5902.8, -27518.733)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd642"/><stop offset="0" stop-color="#ffd441"/><stop offset="1" stop-color="#ffb532"/></linearGradient><linearGradient id="d" x1="-66.252" y1="-310.377" x2="-66.32" y2="-310.362" gradientTransform="matrix(106.198, 0, 0, -88.551, 7048.428, -27474.167)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd441"/><stop offset="1" stop-color="#ffa829"/></linearGradient></defs><title>file_type_flow</title><path d="M23.426,29.41V22.172h-7.18l7.18,7.238" style="fill:#ffdf51;fill-opacity:0.699999988079071"/><path d="M24.231,25.306V17.477H16.466l7.766,7.829" style="fill:#ff8900;fill-opacity:0.699999988079071"/><path d="M19.515,22.171V30h7.766l-7.766-7.829" style="fill-opacity:0.699999988079071;fill:url(#a)"/><path d="M22.608,18V11.809H16.466L22.608,18" style="fill:#ffdf4f;fill-opacity:0.699999988079071"/><path d="M25.524,16.525V8.7H17.759l7.766,7.829" style="fill-opacity:0.799999952316284;fill:url(#b)"/><path d="M12.288,2V9.829h7.766L12.288,2" style="fill-opacity:0.800000011920929;fill:url(#c)"/><path d="M14.11,14.262V6.433H4.719l7.732,7.83,1.659,0" style="fill-opacity:0.879999995231628;fill:url(#d)"/><path d="M14.11,29.958V20.487H4.719l9.391,9.471" style="fill:#ffb700;fill-opacity:0.699999988079071"/><path d="M14.112,22.114V14.285H6.346l7.766,7.829" style="fill:#ffb700;fill-opacity:0.5"/><path d="M16.465,11.809v7.829h7.766l-7.766-7.829" style="fill:#ffcd25;fill-opacity:0.699999988079071"/><path d="M14.092,12.691V4.862H6.326l7.766,7.829" style="fill:#ff8900;fill-opacity:0.700000047683716"/><path d="M16.246,22.171V30h7.766l-7.766-7.829" style="fill:#ff8900;fill-opacity:0.699999988079071"/><polygon points="21.122 22.172 18.609 19.638 16.465 19.638 16.466 11.809 20.847 11.809 18.882 9.829 14.092 9.829 14.11 14.262 14.11 20.487 14.11 30 16.246 30 16.246 22.172 21.122 22.172" style="fill:#fff"/>'
|
||
},
|
||
"Fortran": {
|
||
colour: "#734f96",
|
||
icon: '<g id="g3768"><rect id="rect881" x="2.34" y="2.34" width="27.33" height="27.33" rx="5.08" style="fill:#734f96"/><path id="path1412" d="M6.06,25.5c0-1.09,0-1.19.1-1.19l1.25-.06c1,0,1.18-.06,1.42-.19a.74.74,0,0,0,.39-.37c.12-.23.12-.29.12-7.72,0-7,0-7.5-.1-7.67a1.06,1.06,0,0,0-.63-.5,10.23,10.23,0,0,0-1.38-.1l-1.17,0V5.32H25.94v8.82H24.89a8.56,8.56,0,0,1-1.2-.05c-.14,0-.15-.05-.22-.95a12.73,12.73,0,0,0-.35-2.43,3.22,3.22,0,0,0-2.63-2.81c-.57-.1-3.1-.2-5.19-.2H13.87v6.63l.75,0A6.33,6.33,0,0,0,16.49,14a1.88,1.88,0,0,0,.89-.91,5.86,5.86,0,0,0,.39-1.75c0-.33.08-.66.1-.73s0-.13,1.18-.13H20.2V21.06H17.85l0-.61a7.85,7.85,0,0,0-.54-2.66c-.36-.68-1.05-1-2.45-1.08l-.76-.07-.2,0,0,3.34c0,3.51,0,3.65.3,3.94s.43.32,3.22.42c.05,0,.07.28.07,1.19v1.18H6.06Z" style="fill:#fff"/></g>'
|
||
},
|
||
"FreeMarker Template Language": {
|
||
colour: "#0050b2",
|
||
icon: '<path d="M24.023,20.9,25.408,23l4.615-7L25.408,9l-1.385,2.1L27.255,16Z" style="fill:#0050b2"/><path d="M7.977,11.1,6.592,9,1.977,16l4.615,7,1.385-2.1L4.745,16Z" style="fill:#0050b2"/><path d="M13.035,9h2.8l-.494,2.8h2.8L18.635,9h2.8l-.494,2.8h2.8l-.495,2.8h-2.8l-.493,2.8h2.8l-.494,2.8h-2.8L18.967,23h-2.8l.493-2.8-2.8,0L13.375,23H10.567l.493-2.8-2.8,0,.494-2.8h2.8l.493-2.793h-2.8L9.741,11.8h2.8Zm1.319,8.4h2.8l.494-2.8h-2.8Z" style="fill:#0050b2"/>'
|
||
},
|
||
"GameMaker Language": {
|
||
colour: "#8bc34a",
|
||
icon: '<path d="M14.216,24.167h-.989a3.24,3.24,0,0,1-2.811-1.649L6.667,16l4.681-8.167H16.2l-4.34,8.176.057.032L13.936,19.5H16.82ZM8.455,10.535l-1.27-2.21a1,1,0,0,0-.859-.492H2l4,6.992ZM21.54,9.482a3.239,3.239,0,0,0-2.812-1.649H17.523L15.045,12.5H18.02L20.083,16l-4.531,8.167h5.056L25.333,16ZM26,17.172l-2.47,4.27,1.283,2.233a1,1,0,0,0,.859.492H30Z" style="fill:#8bc34a"/>'
|
||
},
|
||
"G-code": {
|
||
colour: "#ba0000",
|
||
icon: '<path d="M17.333,16.356h0L17.309,20.8l-2.1-1.018.023-4.437h0l10.558-3.038,2.106,1.013Z" style="fill:#8e0000"/><path d="M24.492,18.576a14.909,14.909,0,0,1-1.343,3.074,7.86,7.86,0,0,1-1.39,1.829,6.8,6.8,0,0,1-1.7,1.324,7.405,7.405,0,0,1-2.006.855,6,6,0,0,1-3.072.23A4.668,4.668,0,0,1,12.44,24.64a5.322,5.322,0,0,1-.636-.629l-.508-.244a4.717,4.717,0,0,0,.457.181,5.52,5.52,0,0,1-1.015-1.758,8.135,8.135,0,0,1-.43-1.533c-.023-.131-.043-.239-.061-.34a7.292,7.292,0,0,0,.377,1.354,5.836,5.836,0,0,0,1.614,2.319c.06.054.127.1.19.148.04.008.078.022.119.029a6.454,6.454,0,0,0,2.928-.219,8.4,8.4,0,0,0,1.91-.807,7.658,7.658,0,0,0,1.589-1.227,8.662,8.662,0,0,0,1.29-1.69,12.667,12.667,0,0,0,1.019-2.194L23.3,19c.056-.153.091-.254.091-.254Z" style="fill:#8e0000"/><path d="M24.524,4.013a11.6,11.6,0,0,0-6.588-1.994,13.8,13.8,0,0,0-9.373,4.84A18.243,18.243,0,0,0,4,18.8c.021,3.851,1.481,7.806,5.112,9.575a13.563,13.563,0,0,0,4.159,1.564,12.114,12.114,0,0,0,6.869-1.529c-2.734,1.333-6.12,1.993-8.894.4-2.689-1.543-3.983-4.724-4.221-7.7-.512-6.4,3.1-13.64,9.132-16.281,3.512-1.537,7.307-1.585,10.239,1.1C26.727,5.244,25,4.305,24.524,4.013Zm-14.359,24.8-.138-.093Z" style="fill:#8e0000"/><path d="M22.529,26.788c-3.044,2.582-7.92,4.149-11.554,1.857C7.24,26.289,6.53,21.089,7.212,17.083a17.218,17.218,0,0,1,6.7-10.97c3.771-2.636,8.88-3.49,12.489-.182l-2.27,3.291c-2.51-2.355-6.3-1.956-8.945-.052A12.434,12.434,0,0,0,10.5,16.2c-.662,2.623-.5,6.011,1.5,8.047,2.088,2.129,5.112,2.116,7.656.8A10.334,10.334,0,0,0,24.5,18.636L17.307,20.8l.022-4.438L27.89,13.319l.1.806h0A16.625,16.625,0,0,1,22.529,26.788Z" style="fill:#ba0000"/>'
|
||
},
|
||
"GDScript": {
|
||
colour: "#478cbf",
|
||
icon: '<path d="M28.166,21.029v1.652a.374.374,0,0,1-.26.357l-2.6.841a.367.367,0,0,1-.335-.054.374.374,0,0,1-.155-.3v-1.8l-2.438.464V24.02a.375.375,0,0,1-.325.371l-3.525.483c-.016,0-.034,0-.051,0A.374.374,0,0,1,18.1,24.5V22.557l-1.819.008h-.267l-1.819-.008V24.5a.375.375,0,0,1-.375.376c-.017,0-.034,0-.052,0l-3.525-.483a.375.375,0,0,1-.324-.371V22.184l-2.439-.464v1.8a.374.374,0,0,1-.154.3.37.37,0,0,1-.336.054l-2.6-.841a.374.374,0,0,1-.259-.357V21.029l-1.608-.541a4.558,4.558,0,0,0-.124,1.04c0,4.317,6.082,7.65,13.6,7.674h.019c7.517-.024,13.6-3.356,13.6-7.674a4.54,4.54,0,0,0-.1-.95Z" fill="#478cbf"/><path d="M3.711,13.373V20.1l.907.306a.374.374,0,0,1,.256.355v1.65l1.855.6V21.267a.376.376,0,0,1,.445-.369l3.189.609a.374.374,0,0,1,.305.368v1.818l2.775.379v-1.89a.374.374,0,0,1,.376-.375h0l2.327.009,2.326-.009a.374.374,0,0,1,.377.375v1.89l2.775-.379V21.874a.373.373,0,0,1,.3-.368l3.189-.609a.377.377,0,0,1,.446.369v1.741l1.855-.6V20.76a.374.374,0,0,1,.255-.355l.618-.208V13.373h.017A26.792,26.792,0,0,0,30,10.931a19.02,19.02,0,0,0-2.509-3.288A24.507,24.507,0,0,0,25,9.091a13.01,13.01,0,0,0-1.279-1.052,15.365,15.365,0,0,0-1.375-.894,28.353,28.353,0,0,0,.232-3.071A15.968,15.968,0,0,0,18.847,2.8a26.44,26.44,0,0,0-1.385,2.7,9.46,9.46,0,0,0-1.453-.116h-.018a9.457,9.457,0,0,0-1.454.116,26.275,26.275,0,0,0-1.385-2.7A15.961,15.961,0,0,0,9.422,4.075a28.142,28.142,0,0,0,.232,3.071,15.312,15.312,0,0,0-1.376.894A13.06,13.06,0,0,0,7,9.091a24.553,24.553,0,0,0-2.49-1.448A19.02,19.02,0,0,0,2,10.931a26.792,26.792,0,0,0,1.694,2.443Z" fill="#478cbf"/><path d="m12.462 16.6a2.739 2.739 0 1 1-2.74-2.738 2.739 2.739 0 0 1 2.74 2.738" fill="#fff"/><path d="m11.8 16.764a1.819 1.819 0 1 1-1.819-1.819 1.817 1.817 0 0 1 1.819 1.819" fill="#414042"/><path d="M16.166,19.59a.844.844,0,0,1-.882-.8V16.267a.886.886,0,0,1,1.764,0v2.522a.845.845,0,0,1-.883.8" fill="#fff"/><path d="m19.871 16.6a2.739 2.739 0 1 0 2.74-2.738 2.739 2.739 0 0 0-2.74 2.738" fill="#fff"/><path d="m20.531 16.764a1.818 1.818 0 1 0 1.817-1.819 1.817 1.817 0 0 0-1.817 1.819" fill="#414042"/>'
|
||
},
|
||
"Git": {
|
||
colour: "#dd4c35",
|
||
icon: '<path d="M29.472,14.753,17.247,2.528a1.8,1.8,0,0,0-2.55,0L12.158,5.067l3.22,3.22a2.141,2.141,0,0,1,2.712,2.73l3.1,3.1a2.143,2.143,0,1,1-1.285,1.21l-2.895-2.895v7.617a2.141,2.141,0,1,1-1.764-.062V12.3a2.146,2.146,0,0,1-1.165-2.814L10.911,6.314,2.528,14.7a1.8,1.8,0,0,0,0,2.551L14.753,29.472a1.8,1.8,0,0,0,2.55,0L29.472,17.3a1.8,1.8,0,0,0,0-2.551" style="fill:#dd4c35"/><path d="M12.158,5.067l3.22,3.22a2.141,2.141,0,0,1,2.712,2.73l3.1,3.1a2.143,2.143,0,1,1-1.285,1.21l-2.895-2.895v7.617a2.141,2.141,0,1,1-1.764-.062V12.3a2.146,2.146,0,0,1-1.165-2.814L10.911,6.314" style="fill:#fff"/>'
|
||
},
|
||
"GLSL": {
|
||
colour: "#4386b5",
|
||
icon: '<path d="M7.779,18.923A2.333,2.333,0,0,1,5.4,17.16c.306,1.462,1.961,2.892,7.183,3.529a14.228,14.228,0,0,0,9.232-1.612s.733-.322.293.176c0,0-3.107,2.873-9.2,2.9S1.97,19.107,2,16c-.029-3.107,4.806-6.185,10.9-6.155s9.2,2.9,9.2,2.9c.44.5-.293.176-.293.176-1.084-.7-4.286-2.089-9.232-1.612-4.866.469-6.453,2.122-6.981,3.235a3.254,3.254,0,0,0-.318,1.24,2.424,2.424,0,0,1,2.5-2.316A2.507,2.507,0,0,1,10.3,16.195,2.506,2.506,0,0,1,7.779,18.92Zm19.647-1.074H30v.937H26.344V13.609h1.082v4.24ZM23.454,16h2.163v2.791H24.9l-.108-.649a1.9,1.9,0,0,1-1.614.786,2.414,2.414,0,0,1-2.379-2.711,2.485,2.485,0,0,1,2.531-2.74A2.053,2.053,0,0,1,25.6,15.217H24.515a1.136,1.136,0,0,0-1.132-.851c-.771,0-1.485.534-1.485,1.86,0,1.413.771,1.781,1.506,1.781a1.28,1.28,0,0,0,1.254-1.139h-1.2V16ZM7.781,14.1a1.86,1.86,0,0,0-1.8,2.105,1.86,1.86,0,0,0,1.8,2.105,1.86,1.86,0,0,0,1.8-2.105A1.86,1.86,0,0,0,7.781,14.1Zm2.911,1.383h.525v.468h.013a1.12,1.12,0,0,1,.987-.563,1.565,1.565,0,0,1,1.506,1.677,1.675,1.675,0,0,1-1.583,1.824,1,1,0,0,1-.88-.443h-.013V20.1h-.557V15.479ZM12.1,18.4c.608,0,1.019-.527,1.019-1.254,0-.424-.171-1.264-1.032-1.264-.8,0-.893.867-.893,1.406,0,.88.551,1.114.905,1.114Zm5-.652a1.378,1.378,0,0,1-1.488,1.133,1.487,1.487,0,0,1-1.482-1.658c0-1.025.494-1.842,1.588-1.842.956,0,1.424.76,1.424,1.931H14.721c0,.69.323,1.089.962,1.089a.841.841,0,0,0,.854-.652H17.1Zm-.59-.88c-.032-.513-.247-.987-.924-.987a.972.972,0,0,0-.918.987h1.842Zm3.713,1.917h-.557V16.751c0-.576-.165-.867-.709-.867-.317,0-.874.2-.874,1.1v1.8h-.557V15.479h.525v.468h.013a1.2,1.2,0,0,1,1-.563,1.046,1.046,0,0,1,1.158,1.152v2.253" style="fill:#4386b5"/>'
|
||
},
|
||
"Go module": {
|
||
colour: "#ce3262",
|
||
icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 254.5 225"><title>file_type_go_package</title><path d="M61.949,13.068c16.06-.147,32.143,0,48.211-.062-3.81,16.408-7.466,32.862-11.261,49.277H25.548c-2.319,0-4.637.077-6.956-.093C33,45.775,47.566,29.5,61.949,13.068Z" style="fill:#f2e6c9"/><path d="M143.509,13.014h48.072c14.437,16.431,29.013,32.723,43.411,49.177-9.274.193-18.549,0-27.823.085H154.654C151.006,45.837,147.111,29.46,143.509,13.014Z" style="fill:#f2e6c9"/><path d="M110.16,13.014h33.349c3.6,16.446,7.489,32.823,11.16,49.254H98.9C102.694,45.868,106.35,29.422,110.16,13.014Z" style="fill:#efc75e"/><path d="M18.592,62.183c2.319.17,4.637.085,6.956.093H98.9q0,26.026.054,52.052a18.857,18.857,0,0,0,1.979.139h52.114a14.693,14.693,0,0,0,1.546-.108c.147-17.366,0-34.732.07-52.1h52.516c9.274-.046,18.549.108,27.823-.085V212.62H18.6Q18.592,137.405,18.592,62.183Z" style="fill:#e7bf55"/><path d="M98.9,62.291h55.769c-.062,17.366.085,34.732-.07,52.1-.518.054-1.036.093-1.546.108H100.94a18.857,18.857,0,0,1-1.971-.131C98.861,96.993,98.969,79.634,98.9,62.291Z" style="fill:#dbb551"/><rect x="34.389" y="163.682" width="72.417" height="27.885" style="fill:#f2f2f2"/><path d="M61.422,137.085c-.388,0-.487-.194-.291-.487l2.041-2.625a1.393,1.393,0,0,1,1.069-.487h34.7c.388,0,.487.291.291.584L97.582,136.6a1.481,1.481,0,0,1-.972.584Z" style="fill:#ce3262"/><path d="M46.74,146.028c-.388,0-.487-.194-.291-.487l2.041-2.625a1.393,1.393,0,0,1,1.069-.487H93.89a.447.447,0,0,1,.487.584l-.778,2.333a.85.85,0,0,1-.875.584Z" style="fill:#ce3262"/><path d="M70.264,154.971c-.388,0-.487-.291-.291-.584l1.357-2.43a1.289,1.289,0,0,1,.972-.584H91.747c.388,0,.584.291.584.681l-.194,2.333a.731.731,0,0,1-.681.681Z" style="fill:#ce3262"/><path d="M171.163,135.335c-6.124,1.556-10.3,2.722-16.33,4.28-1.462.388-1.556.487-2.819-.972a13.011,13.011,0,0,0-4.569-3.694c-6.124-3.013-12.054-2.138-17.594,1.462a20.671,20.671,0,0,0-9.918,18.469,15.242,15.242,0,0,0,13.123,15.261c6.61.875,12.151-1.462,16.525-6.415.875-1.069,1.653-2.236,2.625-3.6H133.446c-2.041,0-2.528-1.263-1.847-2.916,1.263-3.013,3.6-8.068,4.958-10.6a2.625,2.625,0,0,1,2.43-1.556h35.384c-.194,2.625-.194,5.249-.584,7.874a41.456,41.456,0,0,1-7.967,19.042c-6.995,9.234-16.136,14.97-27.7,16.525-9.526,1.263-18.374-.584-26.148-6.415A30.533,30.533,0,0,1,99.625,160.51c-1.263-10.6,1.847-20.122,8.262-28.481A43.137,43.137,0,0,1,135.1,115.212c9.137-1.653,17.886-.584,25.76,4.763A30.471,30.471,0,0,1,172.14,133.68C172.719,134.558,172.33,135.044,171.163,135.335Z" style="fill:#ce3262"/><path d="M203.338,189.09c-8.846-.194-16.913-2.722-23.719-8.554a30.485,30.485,0,0,1-10.5-18.761c-1.75-10.984,1.263-20.7,7.874-29.356,7.1-9.331,15.651-14.192,27.218-16.233,9.918-1.75,19.247-.778,27.7,4.958,7.68,5.249,12.442,12.345,13.706,21.676,1.653,13.123-2.138,23.816-11.179,32.953a44.542,44.542,0,0,1-23.329,12.442C208.49,188.7,205.866,188.8,203.338,189.09Zm23.135-39.271a27.978,27.978,0,0,0-.291-3.208,16.013,16.013,0,0,0-18.375-13.235q-.734.119-1.454.306c-9.04,2.041-14.873,7.777-17.011,16.913a16.009,16.009,0,0,0,8.943,18.374,17.82,17.82,0,0,0,15.845-.584c7.679-3.985,11.859-10.206,12.348-18.566Z" style="fill:#ce3262"/></svg>'
|
||
},
|
||
"Go": {
|
||
colour: "#00acd7",
|
||
icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 254.5 225"><title>file_type_go</title><path d="M-46.926,89c-.621,0-.777-.311-.466-.777l3.262-4.194a2.225,2.225,0,0,1,1.708-.777H13.026c.621,0,.777.466.466.932l-2.64,4.038a2.367,2.367,0,0,1-1.553.932Z" style="fill:#00acd7"/><path d="M-70.379,103.285c-.621,0-.777-.311-.466-.777l3.262-4.194a2.225,2.225,0,0,1,1.708-.777H4.95a.714.714,0,0,1,.777.932L4.484,102.2a1.358,1.358,0,0,1-1.4.932Z" style="fill:#00acd7"/><path d="M-32.792,117.574c-.621,0-.777-.466-.466-.932l2.174-3.883a2.06,2.06,0,0,1,1.553-.932H1.533c.621,0,.932.466.932,1.087l-.311,3.728a1.167,1.167,0,0,1-1.087,1.087Z" style="fill:#00acd7"/><path d="M128.426,86.2c-9.785,2.485-16.464,4.349-26.093,6.834-2.33.621-2.485.777-4.5-1.553-2.33-2.64-4.038-4.349-7.3-5.9-9.785-4.815-19.259-3.417-28.112,2.33-10.561,6.834-16,16.929-15.842,29.51.155,12.425,8.7,22.676,20.968,24.385,10.561,1.4,19.414-2.33,26.4-10.251,1.4-1.708,2.64-3.572,4.194-5.747H68.163c-3.262,0-4.038-2.019-2.951-4.659,2.019-4.815,5.747-12.891,7.921-16.929a4.194,4.194,0,0,1,3.883-2.485h56.535c-.311,4.194-.311,8.387-.932,12.581a66.239,66.239,0,0,1-12.736,30.442C108.7,159.51,94.1,168.673,75.618,171.158c-15.221,2.019-29.355-.932-41.78-10.251a48.785,48.785,0,0,1-19.725-34.48c-2.019-16.929,2.951-32.15,13.2-45.508C38.342,66.475,52.942,57.312,70.8,54.05c14.6-2.64,28.578-.932,41.159,7.61a48.686,48.686,0,0,1,18.017,21.9C130.911,84.958,130.289,85.735,128.426,86.2Z" style="fill:#00acd7"/><path d="M179.835,172.09c-14.134-.311-27.025-4.349-37.9-13.668a48.711,48.711,0,0,1-16.774-29.976c-2.8-17.551,2.019-33.082,12.581-46.905,11.338-14.91,25.006-22.676,43.488-25.938,15.842-2.8,30.753-1.243,44.265,7.921,12.27,8.387,19.88,19.725,21.9,34.635,2.64,20.968-3.417,38.052-17.861,52.652a71.17,71.17,0,0,1-37.276,19.88C188.067,171.469,183.874,171.624,179.835,172.09ZM216.8,109.343a44.7,44.7,0,0,0-.466-5.125c-2.8-15.376-16.929-24.074-31.684-20.657-14.444,3.262-23.763,12.425-27.18,27.025a25.579,25.579,0,0,0,14.289,29.355c8.542,3.728,17.085,3.262,25.317-.932C209.345,132.64,216.024,122.7,216.8,109.343Z" style="fill:#00acd7"/></svg>'
|
||
},
|
||
"Gradle": {
|
||
colour: "#006533",
|
||
icon: '<path d="M13.5,6.965h7.923l4,6.887H29.98A14.1,14.1,0,0,0,11.024,2.932L13.5,6.965" style="fill:#006533"/><path d="M25.628,18l-4.209,7.252H10.806L5.5,16.108,9.739,8.8,7.4,4.981A14.03,14.03,0,1,0,30,18H25.628" style="fill:#82b816"/><path d="M21.061,15.963a5.026,5.026,0,1,1-5.026-5,5.013,5.013,0,0,1,5.026,5" style="fill:#006532"/>'
|
||
},
|
||
"GraphQL": {
|
||
colour: "#e10098",
|
||
icon: '<rect x="-0.43" y="12.534" width="22.901" height="1.187" transform="translate(-5.858 16.107) rotate(-59.999)" style="fill:#e10098"/><rect x="4.545" y="21.162" width="22.902" height="1.187" style="fill:#e10098"/><rect x="10.43" y="18.008" width="1.187" height="13.227" transform="translate(-15.812 21.857) rotate(-59.999)" style="fill:#e10098"/><rect x="20.381" y="0.771" width="1.187" height="13.227" transform="translate(4.092 21.856) rotate(-59.999)" style="fill:#e10098"/><rect x="4.412" y="6.787" width="13.227" height="1.187" transform="translate(-2.213 6.502) rotate(-30.001)" style="fill:#e10098"/><rect x="20.389" y="1.677" width="1.187" height="22.901" transform="translate(-3.753 12.25) rotate(-30.001)" style="fill:#e10098"/><rect x="5.454" y="9.386" width="1.187" height="13.228" style="fill:#e10098"/><rect x="25.36" y="9.386" width="1.187" height="13.228" style="fill:#e10098"/><rect x="15.222" y="24.097" width="11.504" height="1.037" transform="translate(-9.498 13.785) rotate(-30.001)" style="fill:#e10098"/><path d="M28.12,23a2.5,2.5,0,1,1-.915-3.411A2.5,2.5,0,0,1,28.12,23" style="fill:#e10098"/><path d="M8.2,11.5a2.5,2.5,0,1,1-.915-3.411A2.5,2.5,0,0,1,8.2,11.5" style="fill:#e10098"/><path d="M3.88,23a2.5,2.5,0,1,1,3.411.915A2.5,2.5,0,0,1,3.88,23" style="fill:#e10098"/><path d="M23.8,11.5a2.5,2.5,0,1,1,3.411.915A2.5,2.5,0,0,1,23.8,11.5" style="fill:#e10098"/><path d="M16,30a2.5,2.5,0,1,1,2.5-2.5A2.493,2.493,0,0,1,16,30" style="fill:#e10098"/><path d="M16,6.991a2.5,2.5,0,1,1,2.5-2.5,2.493,2.493,0,0,1-2.5,2.5" style="fill:#e10098"/>'
|
||
},
|
||
"Groovy": {
|
||
colour: "#6398aa",
|
||
icon: '<path d="M7.453,29.865c0-.074.494-1.717,1.1-3.651A21.808,21.808,0,0,0,9.5,22.6c-.079-.056-.35.045-.6.224-.764.538-.92.4-1.491-1.356-.617-1.9-.639-2.091-.317-2.81.21-.47.2-.579-.147-1.277a3.75,3.75,0,0,1-.377-1.044c0-.26-1.413-1.438-3.647-3.04A3.845,3.845,0,0,1,2,12.5a10.477,10.477,0,0,1,2.378-.039l2.378.1.232-.741c.981-3.13,2.463-5.957,3.122-5.957.137,0,.416.265.619.588.331.527.376.853.435,3.126a23.013,23.013,0,0,0,.165,2.739c.055.11.228-.035.385-.322.2-.367.412-.467.71-.335s.485.043.646-.345c.242-.582,1.455-4.513,1.455-4.717,0-.069.24-.9.534-1.846s.631-2.036.751-2.424c.213-.688.246-.607,1.524,3.726,1.32,4.474,2.03,6.124,2.385,5.544.248-.4,1.55-.428,1.914-.034.207.224.338.221.453-.01.237-.48.8-.4.953.14.117.423.147.423.32,0a.812.812,0,0,1,.692-.466c.389,0,.538.164.666.735l.165.735,2.558-.183A11.521,11.521,0,0,1,30,12.468a20.79,20.79,0,0,1-2.321,1.889c-1.277.96-2.342,1.775-2.368,1.81a17.607,17.607,0,0,0,.128,1.867,11.075,11.075,0,0,1-.544,5.713,4.308,4.308,0,0,1-1.021,1.49c-.278.186-.506.4-.506.486s.3,1.077.66,2.212A9.682,9.682,0,0,1,24.568,30c-.109,0-2.757-2.07-6.876-5.373a11.143,11.143,0,0,0-1.643-1.184c-.171,0-1.649,1.133-5.984,4.588-2.514,2-2.612,2.073-2.612,1.835Zm5.158-4.727c1.337-1.051,2.664-2.078,2.947-2.282.488-.351.651-.263,3.021,1.631,1.378,1.1,2.737,2.174,3.021,2.384s.868.666,1.3,1.013c.491.4.742.492.674.256-.77-2.634-.793-2.678-1.327-2.476-.644.244-1.043-.006-1.249-.783a1.739,1.739,0,0,1,.24-1.451,2.377,2.377,0,0,0-.221-2.731,4.289,4.289,0,0,1-.686-1.53l-.241-1.023-.517.71c-.636.873-1.411.918-2.059.119l-.477-.588-.554.762c-.555.763-1.194.862-1.844.284-.179-.159-.258-.1-.258.2a1.24,1.24,0,0,1-.375.777c-.619.57-1.223.419-1.633-.409L12,19.249l-.3.775a7.032,7.032,0,0,1-.853,1.479,13.891,13.891,0,0,0-1.455,3.663c-.5,1.627-.9,3.042-.9,3.143s.381-.141.847-.538,1.942-1.582,3.279-2.633Zm11.343-1.131c1.015-1.154,1.25-3.288.8-7.271-.375-3.329-.562-4.419-.784-4.565-.154-.1-.177.01-.091.426.562,2.7.593,4.053.1,4.434-.337.262-.695-.719-.976-2.675-.218-1.515-.445-2.2-.617-1.85a3.359,3.359,0,0,0,.16,1.07,26.718,26.718,0,0,1,.394,3.381,21.757,21.757,0,0,0,.375,3.151c.309.985.8.747,1.118-.54s.35-.425.044,1.055c-.317,1.536-1.26,2-2.352,1.15-.175-.136-.234,0-.234.555a4.988,4.988,0,0,1-.3,1.5l-.3.765.408.139A2.247,2.247,0,0,0,23.954,24.007ZM9.346,21.468c2.118-1.232,2.5-2.668,1.793-6.805a21.941,21.941,0,0,1-.3-2.3c0-1.029-.256-.554-.448.832-.254,1.832-1.016,3.389-1.657,3.383-.557-.005-.738-.21-.968-1.094-.413-1.585.037-4.018,1.184-6.406.84-1.749,1.3-1.908,1.3-.448,0,2.276-.776,5.625-1.184,5.115a3.814,3.814,0,0,1,.065-2.2c.2-.72.157-1.818-.066-1.818-.259,0-.773,1.91-.841,3.127-.06,1.076-.022,1.338.231,1.612.888.962,2.052-1.973,2.111-5.323.031-1.759-.138-2.254-.674-1.982-.781.4-2.883,5.883-2.883,7.523,0,1.283.319,2.186.88,2.491.954.519,1.876-.4,2.529-2.531l.275-.894V14.97c0,1.759-.567,2.686-2.357,3.852a8.893,8.893,0,0,0-.852.6,9.758,9.758,0,0,0,.892,2.534,5.283,5.283,0,0,0,.969-.484Zm12.764-2.184c.213-.475.25-.992.2-2.817-.05-1.986-.1-2.337-.486-3.144-.691-1.458-1.544-1.086-1.045.455.265.82.589.68.475-.205-.091-.7.079-.723.375-.041.556,1.281.416,3.055-.242,3.055-.45,0-.59-.39-.883-2.459a6.752,6.752,0,0,0-.362-1.714c-.217,0-.314.388-.179.718a28.23,28.23,0,0,1,.452,2.859c.441,3.507,1.057,4.707,1.69,3.293Zm-8.38.056a3.385,3.385,0,0,0,.095-1.33c-.06-1.008-.094-1.081-.364-.79-.387.419-.8-.375-.944-1.8-.107-1.082-.14-1.061.64-.415.1.081.346-.194.553-.611.377-.763.5-1.68.228-1.68-.081,0-.147.134-.147.3,0,.429-.4.368-.494-.075-.053-.258-.166-.167-.367.3-.16.369-.356.671-.434.671s-.185-.3-.237-.671c-.09-.646-.1-.65-.3-.113a.951.951,0,0,0-.01.964,18.818,18.818,0,0,1,.521,3.791c0,1.174.8,2.1,1.267,1.463Zm2.688-1.556a7.055,7.055,0,0,0,.416-4.259c-.236-1.141-.645-1.568-1.222-1.275-.429.218-1.082,2.746-1.084,4.2,0,2.262,1.06,3.015,1.89,1.337Zm-1.007-1.792a3.77,3.77,0,0,1-.29-1.416c0-.745.022-.772.2-.3.22.586.611.688.761.2a1.035,1.035,0,0,0-.065-.656c-.232-.469-.2-1.107.049-1.107.28,0,.672,1.154.672,1.982,0,.609-.613,1.893-.9,1.893-.07,0-.26-.268-.422-.6ZM19.348,17.7a6.447,6.447,0,0,0-.141-4.918c-.358-.773-1.153-.906-1.479-.248a11.607,11.607,0,0,0-.489,3.895C17.477,18.348,18.716,19.1,19.348,17.7ZM18.1,15.527a2.492,2.492,0,0,1-.318-1.565c.008-.909.031-.991.135-.472.153.764.473,1.052.753.679.174-.231.166-.341-.05-.676-.288-.447-.344-1.079-.1-1.079a5.037,5.037,0,0,1,1.017,2.25c0,.48-.564,1.327-.884,1.327C18.527,15.991,18.276,15.782,18.1,15.527Zm8.662-1.318,1.547-1.175-1.658-.012c-1.484-.011-1.658.043-1.656.51a11.532,11.532,0,0,0,.2,1.857c.011,0,.716-.534,1.567-1.18ZM6.535,14l.158-.949L5.3,12.956c-.764-.052-1.389-.012-1.389.088a14.1,14.1,0,0,0,2.447,1.934C6.371,14.961,6.448,14.521,6.535,14Zm9.526-2.941a1.624,1.624,0,0,1,.819.6c.192.349.276.326.573-.163.191-.315.44-.572.553-.572s.2-.066.2-.146c0-.278-2.122-7.306-2.2-7.3s-2.27,7.386-2.337,7.925c-.028.226.06.309.231.219.152-.081.363.063.468.319.17.415.24.382.644-.306.384-.654.544-.742,1.048-.579Z" style="fill:#333"/><path d="M14.5,12.175a.85.85,0,0,1-.115-.2.737.737,0,0,0-.194-.29.281.281,0,0,0-.3-.061c-.087.035-.111.039-.15.024-.065-.026-.089-.106-.07-.242.023-.169.2-.825.548-2.054.711-2.5,1.666-5.646,1.772-5.839.012-.021.012-.021.024,0,.063.114.432,1.266.937,2.922.682,2.24,1.25,4.21,1.25,4.339,0,.079-.06.127-.186.147-.157.026-.339.212-.587.6a1.674,1.674,0,0,1-.226.31c-.048.046-.052.048-.1.048s-.056,0-.1-.043a.958.958,0,0,1-.1-.144,1.268,1.268,0,0,0-.414-.422,1.525,1.525,0,0,0-.738-.281.434.434,0,0,0-.4.156,2.718,2.718,0,0,0-.416.6c-.257.425-.348.513-.441.426Z" style="fill:#6398aa"/><path d="M6.252,14.928a19.055,19.055,0,0,1-2.3-1.838c-.031-.038-.034-.044-.025-.057a2.7,2.7,0,0,1,1.14-.085c.23.012,1.619.1,1.621.108s-.3,1.779-.321,1.881C6.357,14.981,6.337,14.979,6.252,14.928Z" style="fill:#6398aa"/><path d="M25.177,15.35A14.239,14.239,0,0,1,25,13.56a.553.553,0,0,1,.044-.29c.081-.151.245-.205.7-.23.228-.013,1.281-.015,2.025,0l.521.008L27.029,14c-1.144.867-1.81,1.369-1.834,1.382-.006,0-.012-.006-.018-.027h0Z" style="fill:#6398aa"/><path d="M8.506,28.281c0-.071.149-.6.527-1.878.905-3.057,1.319-4.165,1.827-4.892a7.664,7.664,0,0,0,.969-1.792L12,19.292l.225.448c.394.784.632,1.011,1.062,1.016a1.239,1.239,0,0,0,1.1-1.137c0-.124.044-.251.086-.251a1.119,1.119,0,0,1,.226.14,1.271,1.271,0,0,0,.666.3.879.879,0,0,0,.609-.148,2.47,2.47,0,0,0,.711-.764c.187-.252.347-.459.354-.459s.143.159.3.352a5.091,5.091,0,0,0,.422.467,1.049,1.049,0,0,0,1.549-.08,6.111,6.111,0,0,0,.467-.572c.168-.228.307-.41.31-.4s.066.269.141.584.169.67.209.789a3.826,3.826,0,0,0,.642,1.234,2.17,2.17,0,0,1,.466,1.246,3.051,3.051,0,0,1-.352,1.447,2.07,2.07,0,0,0-.267.934,2.017,2.017,0,0,0,.213.851.773.773,0,0,0,1.069.413,1.351,1.351,0,0,1,.316-.068c.2,0,.315.193.542.881.157.474.5,1.637.5,1.695,0,.03-.016.051-.039.051a1.486,1.486,0,0,1-.407-.224c-.2-.144-2.612-2.029-3.408-2.663-2.128-1.693-2.828-2.233-3.171-2.446-.37-.23-.622-.285-.827-.177-.254.133-3.726,2.847-5.751,4.5A10.846,10.846,0,0,1,8.65,28.251c-.149.083-.143.081-.143.03Z" style="fill:#6398aa"/>'
|
||
},
|
||
"Haml": {
|
||
colour: "#ecdfa7",
|
||
icon: '<path d="M15.311,16.043,13.4,29.726a6.322,6.322,0,0,1-5.956-1.25l3.1-13.266L4.69,3.34a8.031,8.031,0,0,1,3.79-.646l5.144,9.7,8.914-7.581s3,1.041,3.27,2.041l-10.5,9.184Z" style="fill:#ecdfa7"/><path d="M27.016,17.411a4.244,4.244,0,0,0-.541-.812,5.7,5.7,0,0,0-1.458-1.187,7.331,7.331,0,0,0-1.687-.791l-.229-.062-.187-.062c-.125-.042-.229-.1-.333-.146a1.282,1.282,0,0,1-.458-.417A1.754,1.754,0,0,1,22,12.642a2.518,2.518,0,0,1,.1-.375c.042-.125.083-.25.125-.4a2.691,2.691,0,0,0,.062-.6l.1-.083,1.25-1.041c.229-.187.458-.4.687-.583a2.2,2.2,0,0,1,.229.146s.646.062,1-.916l-.187-.125.125-.1.312-.271a.613.613,0,0,0,.229-.375.529.529,0,0,0-.417.125l-.333.25-.229.167L22.184,6.478c.146-.125.271-.229.417-.354l.6-.541.062-.062c.062.042.1.083.167.125.146.1.312.208.458.292l.916.5c.292.167.6.333.916.479a3.323,3.323,0,0,0,.479.208c.083.021.167.062.25.083.042,0,.1.021.146.021h.1a.151.151,0,0,0,.125-.083V7.123a.077.077,0,0,1,.021-.062V6.977a.108.108,0,0,0-.042-.083c-.021-.042-.062-.083-.083-.125a1.59,1.59,0,0,0-.187-.187c-.125-.125-.271-.229-.4-.333-.271-.208-.562-.4-.854-.583a7.545,7.545,0,0,0-.9-.5,3.323,3.323,0,0,0-.479-.208c-.083-.021-.167-.062-.271-.083-.042,0-.1-.021-.167-.021a.31.31,0,0,0-.125.021.522.522,0,0,0-.167.1,1.6,1.6,0,0,0-.375.208l-.625.354c-.187.146-.4.312-.583.458l-.208-.146s-.875.083-.583.646l.083.083c-.833.687-1.645,1.4-2.457,2.083-.833.708-1.645,1.416-2.478,2.145l-1.229,1.083a1.878,1.878,0,0,1-.208.187c-.042-.125-.1-.229-.146-.333l-.292-.625-.562-1.25c-.375-.833-.75-1.666-1.145-2.5L11.209,4.895l-.187-.375h.25s.083-.687-.417-.812a1.4,1.4,0,0,0-.208.021c-.187-.375-.354-.75-.541-1.125h0l-.083-.312A.33.33,0,0,0,9.9,2.1a.352.352,0,0,0-.1-.042c-.062-.021-.1-.021-.167-.042A1.281,1.281,0,0,0,9.355,2a4.057,4.057,0,0,0-.521.042,8.767,8.767,0,0,0-1.02.187c-.333.083-.666.167-1,.271a3.272,3.272,0,0,0-.479.187l-.25.125c-.042.021-.083.062-.125.083L5.9,2.958c-.021.021-.021.042-.042.062v.062h0V3.1a.164.164,0,0,0,.1.125c.042.021.062.042.083.042a1.327,1.327,0,0,1,.146.042,1.188,1.188,0,0,0,.271.021,4.384,4.384,0,0,0,.521-.042c.333-.042.687-.083,1.02-.146l1.02-.167c.167-.021.333-.062.521-.1.146.292.292.6.437.9-.958.083-2.457.208-3.395.312-.1-.187-.187-.354-.292-.541a.127.127,0,0,0-.146-.062.108.108,0,0,0-.062.146c.062.167.125.312.187.479a1.167,1.167,0,0,0-.5.125A1.828,1.828,0,0,0,6.4,5.645a3.567,3.567,0,0,1,.458-.125l.437,1,1.25,2.832,1.27,2.832c.417.937.854,1.874,1.291,2.832h0a.02.02,0,0,0,.021.021l-.187.625-.5,1.749c-.312,1.166-.6,2.353-.9,3.52L9.105,22.7l-.417,1.77c-.292,1.187-.562,2.353-.9,3.52a.125.125,0,0,0,.021.083,3.076,3.076,0,0,0,.6.562,6.048,6.048,0,0,0,.687.417,9.4,9.4,0,0,0,1.5.6,6.972,6.972,0,0,0,1.624.271,3.728,3.728,0,0,0,.833-.042,6.547,6.547,0,0,0,.833-.167.254.254,0,0,0,.167-.187v-.021c.229-1.145.417-2.312.625-3.457l.583-3.478c.187-1.166.4-2.312.583-3.478.021-.125.042-.271.062-.4.042.042.062.1.1.146a4.137,4.137,0,0,0,.708.646,7.212,7.212,0,0,0,1.583.833,11.774,11.774,0,0,0,1.666.5,10.182,10.182,0,0,0,1.1.187,2.621,2.621,0,0,0-.25,1.208.115.115,0,0,0,.062.1h.021a5.164,5.164,0,0,0,1.27.479,4.333,4.333,0,0,0,1.375.062,2.627,2.627,0,0,0,1.333-.562,2.824,2.824,0,0,0,.812-1.166l.021-.021V21.1l.062-.562v-.021a5.427,5.427,0,0,0,.625-.417,2.71,2.71,0,0,0,.646-.729,1.833,1.833,0,0,0,.25-1,2.563,2.563,0,0,0-.292-.958Zm-.4-10.5Zm-1.479-1.1a7.12,7.12,0,0,1,.833.541c.125.1.271.187.4.312a1.257,1.257,0,0,1,.167.167l.042.042h-.042c-.083-.021-.146-.042-.229-.062-.146-.062-.312-.125-.458-.187a7.132,7.132,0,0,1-.875-.479A5.61,5.61,0,0,1,24.2,5.52a2.5,2.5,0,0,1-.229-.25l.312.125a6.4,6.4,0,0,1,.854.417Zm-1.416-.916.021.021v.042a.02.02,0,0,0-.021-.021V4.895ZM8.876,2.562a5.021,5.021,0,0,1-.937.333,5.347,5.347,0,0,1-.979.167,4.013,4.013,0,0,1-.5.021.781.781,0,0,1-.229-.021H6.169c.021,0,.021-.021.042-.021.062-.042.146-.062.208-.1.146-.062.312-.1.458-.167.312-.083.646-.167.979-.229a8.4,8.4,0,0,1,.979-.125A1.576,1.576,0,0,0,9.147,2.4a1.536,1.536,0,0,1-.271.167Zm14.453,7.1-1.291,1-1.291,1.02c-.354.292-.708.583-1.062.854.021-.021.042-.062.062-.083.167-.229.333-.437.5-.646.354-.417.687-.854,1.062-1.25s.771-.791,1.166-1.145a4.872,4.872,0,0,1,.646-.5l.187-.125c.187.146.4.292.583.437-.167.146-.375.292-.562.437ZM8.064,7.1l.1.1a5.63,5.63,0,0,1,.583.646,2.21,2.21,0,0,1,.375.729.921.921,0,0,1-.062.625l-.021-.062L8.064,7.1Zm1.02,2.166a.72.72,0,0,0,.146-.25.866.866,0,0,0,.042-.458A1.7,1.7,0,0,0,8.9,7.727a4.015,4.015,0,0,0-.979-.9l-.229-.479c-.146-.312-.292-.625-.458-.916.312-.083.687-.208,1.1-.312A20.313,20.313,0,0,1,9.355,7a7.963,7.963,0,0,1,.771,2.541c.021.208,0,.437,0,.666s0,.458.021.687a7.609,7.609,0,0,0,.146.958L9.084,9.268ZM14,26.242a.9.9,0,0,1-.187.208.4.4,0,0,1-.333.1.358.358,0,0,1-.229-.229.981.981,0,0,1-.083-.354,2.275,2.275,0,0,1,.042-.75,2.816,2.816,0,0,1,.229-.708,1.478,1.478,0,0,1,.208-.292.341.341,0,0,1,.292-.125c.1,0,.208.1.271.208a.74.74,0,0,1,.083.187l-.25,1.479c-.021.1-.021.187-.042.271Zm1.229-7.185-.375,2.187a3.329,3.329,0,0,0-.1-.437c-.1-.4-.229-.771-.354-1.145a15.537,15.537,0,0,0-.958-2.166c.229.771.5,1.5.771,2.249.146.375.271.75.4,1.1l.187.562c0,.021.021.062.021.083-.062.333-.125.666-.167,1.02l-.312,1.9c-.021-.042-.021-.083-.042-.125a.486.486,0,0,0-.312-.292.525.525,0,0,0-.417.125,1.944,1.944,0,0,0-.271.312,2.036,2.036,0,0,0-.271.75,2.131,2.131,0,0,0,0,.812,1.021,1.021,0,0,0,.146.4.486.486,0,0,0,.333.271.428.428,0,0,0,.375-.167c.042-.042.083-.1.125-.146-.146.979-.312,1.958-.458,2.957a2.727,2.727,0,0,1-.562.125c-.25.042-.5.062-.75.083a5.531,5.531,0,0,1-1.541-.146,7.846,7.846,0,0,1-1.5-.479,3.625,3.625,0,0,1-1.229-.854c.312-1.145.666-2.291,1.02-3.436l.541-1.729.521-1.749c.354-1.166.708-2.333,1.041-3.5.167-.583.312-1.166.479-1.749a3.626,3.626,0,0,0,.187-1.833v-.021c-.021-.021-.042-.021-.042,0a3.109,3.109,0,0,0-.25.292c-.229-.521-.479-1.02-.708-1.541a4.765,4.765,0,0,1-.167-.583,7.165,7.165,0,0,1-.208-1.312c-.021-.229-.021-.437-.021-.666s.021-.458,0-.687a7.625,7.625,0,0,0-.833-2.6,12.587,12.587,0,0,0-1.1-1.833c.687-.187,1.416-.375,2-.479.083.187.187.354.271.541L11.938,7.6l1.25,2.437.625,1.208.312.6c.083.125.125.271.208.375l-.812.75a.069.069,0,0,0,0,.1.073.073,0,0,0,.1.021c.437-.312.875-.646,1.312-.979l1.312-1c.875-.666,1.729-1.333,2.582-2s1.708-1.354,2.562-2.041l.021-.021a24.316,24.316,0,0,0,1.874,1.645,6.162,6.162,0,0,0-.875.541,8.943,8.943,0,0,0-1.229,1.125,12.279,12.279,0,0,0-1.041,1.291,11.778,11.778,0,0,0-.646,1c-1.27,1.041-2.52,2.1-3.728,3.207a.128.128,0,0,0-.021.146.138.138,0,0,0,.146.042,9.134,9.134,0,0,0-.312,1.25c-.125.583-.25,1.166-.354,1.749Zm9.205,2.791a2.527,2.527,0,0,1-1.02.458,3.767,3.767,0,0,1-1.187.042,7.361,7.361,0,0,1-1.145-.208,2.037,2.037,0,0,1,.167-1.041c.146.021.271.021.417.042a.114.114,0,0,0,.125-.083.124.124,0,0,0-.083-.167h0c-.1-.042-.187-.062-.292-.1a2.771,2.771,0,0,1,.292-.4c.125-.125.25-.25.375-.354a3.992,3.992,0,0,0,.854.4,2.881,2.881,0,0,0,1.125.1,1.55,1.55,0,0,0,1.02-.541,1.524,1.524,0,0,0,.354-.916.85.85,0,0,1,.021.4,4.511,4.511,0,0,1-.083.521l-.062.312L25,20.494a.919.919,0,0,0-.333.354.751.751,0,0,0,.479,0c.021,0,.021-.021.042-.021-.021.062-.021.1-.042.167a2.552,2.552,0,0,1-.708.854ZM26.5,19.119a2.2,2.2,0,0,1-.458.625,2.638,2.638,0,0,1-.271.229,2.585,2.585,0,0,0-.062-.562,1.534,1.534,0,0,0-.083-.292.531.531,0,0,0-.187-.25h0c-.021,0-.042,0-.042.021h0a1.95,1.95,0,0,1-.562.771,1.429,1.429,0,0,1-.812.292,2.857,2.857,0,0,1-.916-.125c-.312-.083-.625-.187-.937-.292l-.042-.021a.2.2,0,0,0-.187.042c-.167.208-.292.4-.437.6-.1.167-.187.312-.271.479-.375-.146-.729-.271-1.1-.417-.521-.208-1.041-.417-1.52-.666a7.648,7.648,0,0,1-1.4-.812,2.949,2.949,0,0,1-.979-1.062v-.021a.409.409,0,0,0-.187-.187c0-.042.021-.1.021-.146a7.37,7.37,0,0,0,.1-1.52c1.687-1.187,3.332-2.437,4.957-3.728l-.062.187a3.27,3.27,0,0,0-.146,1.02A2.089,2.089,0,0,0,22.122,15.1a2.825,2.825,0,0,0,.479.187l.25.062.208.042a6.645,6.645,0,0,1,1.541.625,6.156,6.156,0,0,1,1.312.979,2.275,2.275,0,0,1,.708,1.333,1.51,1.51,0,0,1-.125.791Z" style="fill:#3f3e29"/><path d="M12.667,23.909a2.161,2.161,0,0,0-.354.771,1.556,1.556,0,0,0-.062.417l-.021.417a4.533,4.533,0,0,0,.146,1.666,7.647,7.647,0,0,0,.666,1.52c-.083-.271-.187-.521-.271-.771s-.167-.521-.229-.791a5.89,5.89,0,0,1-.1-1.6l.021-.417a2.552,2.552,0,0,1,.042-.4,3.137,3.137,0,0,1,.292-.729,2.967,2.967,0,0,1,.521-.625,2.591,2.591,0,0,1,.666-.479,2.76,2.76,0,0,0-1.312,1.02Z" style="fill:#3f3e29"/>'
|
||
},
|
||
"Handlebars": {
|
||
colour: "#c19770",
|
||
icon: '<path d="M12.3,13.1a4.238,4.238,0,0,1,2.728.9A4.592,4.592,0,0,1,16,15.127a4.144,4.144,0,0,1,2.039-1.747,4.757,4.757,0,0,1,3.286.019,7.833,7.833,0,0,1,2.443,1.558c.568.5,1.094,1.05,1.679,1.533a3.4,3.4,0,0,0,1.019.614,1.42,1.42,0,0,0,1.46-.379.965.965,0,0,0-.055-1.323.545.545,0,0,0-.8.108.659.659,0,0,0,.05.686,1.222,1.222,0,0,1-.6-.926,1.022,1.022,0,0,1,.691-1.032,2.005,2.005,0,0,1,2.312.661,3.258,3.258,0,0,1,.44,2.308,2.762,2.762,0,0,1-1.137,1.872,5.051,5.051,0,0,1-3.013.8,8.488,8.488,0,0,1-2.932-.63c-1.558-.626-3.016-1.492-4.625-1.992a13.977,13.977,0,0,0-1.7-.363c-.43.007-.861-.015-1.29.015a5.692,5.692,0,0,0-1.534.349c-1.636.509-3.116,1.4-4.7,2.024a7.625,7.625,0,0,1-4.249.474,3.74,3.74,0,0,1-2.125-1.14A2.856,2.856,0,0,1,2,16.668a2.722,2.722,0,0,1,.555-1.874,1.994,1.994,0,0,1,1.687-.68,1.425,1.425,0,0,1,1.063.52,1.04,1.04,0,0,1,.122.911,1.457,1.457,0,0,1-.556.644.643.643,0,0,0,.051-.681.547.547,0,0,0-.831-.079.975.975,0,0,0-.151,1.11,1.331,1.331,0,0,0,1.032.623,2.332,2.332,0,0,0,1.6-.7A28.526,28.526,0,0,1,9.4,14.053,5.251,5.251,0,0,1,12.3,13.1Z" style="fill:#c19770"/>'
|
||
},
|
||
"Haskell": {
|
||
colour: "#C04504",
|
||
icon: '<defs><linearGradient id="a" x1="0.996" y1="-206.057" x2="0.951" y2="-206.057" gradientTransform="matrix(259.941, 0, 0, -183.487, -237.941, -37792.788)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#faba09"/><stop offset="1" stop-color="#b42c01"/></linearGradient></defs><title>file_type_haskell2</title><path d="M2,25.882,8.588,16,2,6.118H6.941L13.529,16,6.941,25.882Zm6.588,0L15.177,16,8.588,6.118h4.941L26.706,25.882H21.765l-4.117-6.176-4.118,6.176ZM24.51,20.118l-2.2-3.294H30v3.294Zm-3.294-4.941-2.2-3.294H30v3.294Z" style="fill:url(#a)"/>'
|
||
},
|
||
"Haxe": {
|
||
colour: "#f68712",
|
||
icon: '<path d="M16,5.5,5.5,16,16,26.5,26.5,16,16,5.5" style="fill:#f68712"/><path d="M2,2,16,5.5,5.5,16,2,2" style="fill:#fab20b"/><path d="M30,2,26.5,16,16,5.5,30,2" style="fill:#f47216"/><path d="M30,30,16,26.5,26.5,16,30,30" style="fill:#f25c19"/><path d="M2,30,5.5,16,16,26.5,2,30" style="fill:#f89c0e"/><path d="M16,5.5,2,2H9l7,3.5" style="fill:#fbc707"/><path d="M16,5.5,30,2H23L16,5.5" style="fill:#fbc707"/><path d="M16,26.5,30,30H23l-7-3.5" style="fill:#f68712"/><path d="M16,26.5,2,30H9l7-3.5" style="fill:#f25c19"/><path d="M5.5,16,2,30V23l3.5-7" style="fill:#fff200"/><path d="M5.5,16,2,2V9l3.5,7" style="fill:#fff200"/><path d="M26.5,16,30,2V9l-3.5,7" style="fill:#f1471d"/><path d="M26.5,16,30,30V23l-3.5-7" style="fill:#f1471d"/>'
|
||
},
|
||
"HLSL": {
|
||
colour: "#0000ff",
|
||
icon: '<polygon points="9.525 21.947 7.56 21.947 7.56 17.1 3.958 17.1 3.958 21.947 2 21.947 2 10.044 3.958 10.044 3.958 14.792 7.56 14.792 7.56 10.044 9.525 10.044 9.525 21.947" style="fill:blue"/><polygon points="16.692 21.947 11.513 21.947 11.513 10.044 13.472 10.044 13.472 19.773 16.692 19.773 16.692 21.947" style="fill:blue"/><path d="M17.462,21.491V18.834a3.676,3.676,0,0,0,1.146.909,2.809,2.809,0,0,0,1.249.3,2.05,2.05,0,0,0,.646-.092,1.309,1.309,0,0,0,.461-.252,1.029,1.029,0,0,0,.276-.382,1.231,1.231,0,0,0,.091-.478,1.3,1.3,0,0,0-.145-.623,1.907,1.907,0,0,0-.4-.506,4.077,4.077,0,0,0-.6-.448q-.346-.215-.746-.439a4.045,4.045,0,0,1-1.519-1.419,3.884,3.884,0,0,1-.5-2.026,4.232,4.232,0,0,1,.273-1.6,3.02,3.02,0,0,1,.744-1.1,2.938,2.938,0,0,1,1.088-.634,4.167,4.167,0,0,1,1.31-.2,5.816,5.816,0,0,1,1.2.111,3.8,3.8,0,0,1,.967.345v2.482a2.859,2.859,0,0,0-.476-.365,3.212,3.212,0,0,0-.53-.262A3.1,3.1,0,0,0,21.46,12a2.794,2.794,0,0,0-.512-.05,1.994,1.994,0,0,0-.606.087,1.347,1.347,0,0,0-.461.245,1.092,1.092,0,0,0-.291.377,1.144,1.144,0,0,0-.1.494,1.2,1.2,0,0,0,.115.536,1.657,1.657,0,0,0,.328.448,3.461,3.461,0,0,0,.515.415c.2.136.43.275.686.419a7.094,7.094,0,0,1,.936.635,3.712,3.712,0,0,1,.713.759,3.269,3.269,0,0,1,.455.967,4.573,4.573,0,0,1,.158,1.266,4.439,4.439,0,0,1-.277,1.672,2.888,2.888,0,0,1-.749,1.1,2.823,2.823,0,0,1-1.1.6,4.742,4.742,0,0,1-1.325.182,5.476,5.476,0,0,1-1.361-.166A3.41,3.41,0,0,1,17.462,21.491Z" style="fill:blue"/><polygon points="30 21.947 24.822 21.947 24.822 10.044 26.78 10.044 26.78 19.773 30 19.773 30 21.947" style="fill:blue"/>'
|
||
},
|
||
"HTML": {
|
||
colour: "#e44f26",
|
||
icon: '<polygon points="5.902 27.201 3.655 2 28.345 2 26.095 27.197 15.985 30 5.902 27.201" style="fill:#e44f26"/><polygon points="16 27.858 24.17 25.593 26.092 4.061 16 4.061 16 27.858" style="fill:#f1662a"/><polygon points="16 13.407 11.91 13.407 11.628 10.242 16 10.242 16 7.151 15.989 7.151 8.25 7.151 8.324 7.981 9.083 16.498 16 16.498 16 13.407" style="fill:#ebebeb"/><polygon points="16 21.434 15.986 21.438 12.544 20.509 12.324 18.044 10.651 18.044 9.221 18.044 9.654 22.896 15.986 24.654 16 24.65 16 21.434" style="fill:#ebebeb"/><polygon points="15.989 13.407 15.989 16.498 19.795 16.498 19.437 20.507 15.989 21.437 15.989 24.653 22.326 22.896 22.372 22.374 23.098 14.237 23.174 13.407 22.341 13.407 15.989 13.407" style="fill:#fff"/><polygon points="15.989 7.151 15.989 9.071 15.989 10.235 15.989 10.242 23.445 10.242 23.445 10.242 23.455 10.242 23.517 9.548 23.658 7.981 23.732 7.151 15.989 7.151" style="fill:#fff"/>'
|
||
},
|
||
"HTTP": {
|
||
colour: "#3b61a6",
|
||
icon: '<defs><radialGradient id="a" cx="12.278" cy="24.557" r="18.371" gradientTransform="matrix(1, 0, 0, -1, -0.001, 34.001)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#d3e9ff"/><stop offset="0.155" stop-color="#d3e9ff"/><stop offset="0.75" stop-color="#4074ae"/><stop offset="1" stop-color="#36486c"/></radialGradient><radialGradient id="b" cx="10.657" cy="26.746" r="26.66" gradientTransform="matrix(1, 0, 0, -1, -0.001, 34.001)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0.165"/></radialGradient><radialGradient id="c" cx="-45.05" cy="9.285" r="4.115" gradientTransform="translate(-21.971 41.942) rotate(143.734)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></radialGradient><radialGradient id="d" cx="-41.456" cy="32.154" r="4.115" gradientTransform="translate(3.571 87.075) rotate(143.734) scale(1.297)" xlink:href="#c"/><radialGradient id="e" cx="-48.485" cy="13.239" r="4.115" gradientTransform="translate(-23.084 55.413) rotate(143.734)" xlink:href="#c"/><radialGradient id="f" cx="-40.883" cy="16.036" r="4.115" gradientTransform="matrix(-0.87, 0.639, -0.638, -0.87, -9.351, 47.706)" xlink:href="#c"/><linearGradient id="g" x1="-66.502" y1="2.219" x2="-64.626" y2="6.749" gradientTransform="matrix(0.939, -0.879, -0.683, -0.73, 84.81, -33.628)" xlink:href="#c"/><linearGradient id="h" x1="-26.791" y1="39.159" x2="-24.999" y2="44.683" gradientTransform="matrix(1.131, 0.613, 0.477, -0.879, 21.648, 69.071)" xlink:href="#c"/><linearGradient id="i" x1="-63.384" y1="8.177" x2="-63.57" y2="4.69" gradientTransform="matrix(0.918, -0.859, -0.668, -0.713, 77.857, -36.493)" xlink:href="#c"/><linearGradient id="j" x1="-99.259" y1="89.545" x2="-98.825" y2="93.023" gradientTransform="matrix(-1.28, -0.126, -0.098, 0.995, -101.637, -93.015)" xlink:href="#c"/><radialGradient id="k" cx="-20.712" cy="57.61" r="2.836" gradientTransform="matrix(0, -0.843, -0.721, 0, 26.625, -21.696)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#729fcf"/><stop offset="1" stop-color="#3b61a6"/></radialGradient><radialGradient id="l" cx="-20.712" cy="39.858" r="2.836" gradientTransform="translate(26.625 63.096) rotate(90) scale(0.843 0.721)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#729fcf"/><stop offset="1" stop-color="#509e2f"/></radialGradient></defs><title>file_type_http</title><path d="M28.026,14.2A11.877,11.877,0,1,1,16.149,2.325,11.878,11.878,0,0,1,28.026,14.2Z" style="fill:url(#a)"/><path d="M16.149,26.386A12.183,12.183,0,1,1,28.333,14.2,12.2,12.2,0,0,1,16.149,26.386Zm0-23.754A11.571,11.571,0,1,0,27.72,14.2,11.584,11.584,0,0,0,16.149,2.632Z" style="fill:#39396c"/><path d="M27.693,12.424h0l-.328.371a7,7,0,0,0-.656-.644l-.5.074-.46-.519v.643l.394.3.262.3.35-.4c.088.165.175.33.263.5v.495l-.394.445-.722.5-.546.545-.35-.4.175-.445-.35-.4-.591-1.262-.5-.569L23.6,12.1l.2.718.371.421a17.069,17.069,0,0,0,.7,1.783,9.979,9.979,0,0,0,1.268-.1v.347l-.525,1.287-.481.544-.394.843V19.33l.132.545-.219.247-.482.3-.5.421.416.47-.569.5.109.321-.853.966H22.2l-.481.3h-.307v-.4l-.13-.793c-.169-.5-.346-.991-.525-1.484,0-.364.022-.725.044-1.089l.219-.495-.307-.595.022-.817-.416-.47.208-.68-.338-.384H19.6l-.2-.223-.591.372-.24-.273-.547.47L16.911,15.27l-.437-1.04.394-.593-.219-.247.481-1.139c.395-.491.807-.963,1.225-1.436l.744-.2.831-.1.569.149.809.816.284-.321.393-.049.744.247H23.3l.394-.347.175-.247-.394-.247-.656-.049a6.6,6.6,0,0,0-.568-.743l-.219.1-.088.644-.394-.445-.087-.5-.437-.346h-.176l.438.495-.175.445-.35.1.219-.445-.394-.2-.349-.4-.657.148-.087.2-.394.248-.219.545-.546.272-.241-.272H17.83V9.428l.569-.3h.437l-.088-.346L18.4,8.438l.59-.124.328-.371.262-.446h.482l-.132-.346.307-.2v.4l.656.148.656-.544.044-.248.568-.4a4.353,4.353,0,0,0-.612.1V5.963l.219-.5h-.219l-.48.445-.132.248.132.347-.219.593-.35-.2-.306-.346-.482.346-.175-.792.831-.544v-.3l.525-.346.831-.2.569.2,1.049.2-.262.3H22.51l.569.594.437-.495.133-.218a15.53,15.53,0,0,1,2.635,3.147A11.452,11.452,0,0,1,27.693,12.424Z" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M16.861,5.517l-.044.3.307.2.524-.346-.262-.3-.35.2-.174-.05" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M17.343,3.488l-1.138-.446-1.312.148-1.619.445-.306.3,1.006.693v.4l-.394.4.525,1.04.349-.2.438-.693a15.053,15.053,0,0,0,1.924-.743l.525-1.337" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M18.524,7.647,18.349,7.2l-.307.1.088.544.394-.2" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M18.7,7.547l-.088.595.481-.1.35-.346-.306-.3c-.1-.274-.221-.529-.35-.792h-.262v.3l.174.2v.445" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M12.225,16.953l-.35-.693-.656-.148-.35-.94-.875.1-.743-.544-.788.693v.109a3,3,0,0,1-.743-.209l-.175-.495V14.28l-.525.049q.066-.52.131-1.039H6.845l-.306.4-.306.148L5.8,13.587l-.044-.545.088-.594.656-.495H7.02l.087-.3.656.148.481.595.088-.991.831-.693.306-.743.612-.247.35-.495.787-.149.394-.593H10.432l.744-.347H11.7l.744-.248.088-.3-.263-.248-.306-.1.088-.3-.219-.445-.525.2.088-.4-.612-.347L10.3,6.8l.044.3-.481.2-.306.643-.131-.594L8.594,7l-.131-.445,1.094-.644.481-.445.044-.544-.262-.149-.35-.05-.219.545s-.366.072-.46.095A12.5,12.5,0,0,0,4.6,13.371a6.789,6.789,0,0,0,.409.711l.918.544.918.248.394.5.612.445.35-.049.262.118v.08l-.35.94-.263.4.088.2-.219.742.787,1.436.787.693.35.495L9.6,21.9l.263.593L9.6,23.637s-.021-.007.013.107a5.278,5.278,0,0,0,1.488.809l.161-.123-.087-.247.35-.347.131-.347.569-.2.437-1.089-.131-.3.306-.445.656-.149.35-.792-.088-.99.525-.743.088-.743c-.718-.356-1.43-.723-2.143-1.089" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M11.263,5.715l.437.3h.35V5.666l-.437-.2-.35.247" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M10.126,5.319l-.219.544h.438l.219-.5c.189-.133.376-.268.568-.4l.438.149.875.594.438-.4-.482-.2-.219-.446-.831-.1-.044-.248-.394.1-.175.346-.219-.446-.087.2.044.5-.35.3" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M11.7,4.081l.219-.2.438-.1a6.9,6.9,0,0,1,.918-.347l-.174-.3-.565.081-.267.266-.44.064-.391.184-.19.092-.116.155.568.1" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M12.444,8.785l.263-.4-.394-.3.131.693" style="fill:#204a87;fill-opacity:0.7134503126144409"/><path d="M16.149,25.783A11.58,11.58,0,1,1,27.729,14.2,11.593,11.593,0,0,1,16.149,25.783Zm0-22.548A10.968,10.968,0,1,0,27.117,14.2,10.98,10.98,0,0,0,16.149,3.235Z" style="opacity:0.3956044018268585;isolation:isolate;fill:url(#b)"/><path d="M5.541,10.241a4.115,4.115,0,1,0,6.636-4.866h0A4.115,4.115,0,0,0,5.54,10.24Z" style="fill:url(#c)"/><path d="M7.836,8.558a1.268,1.268,0,1,0,2.046-1.5h0a1.268,1.268,0,0,0-2.046,1.5Z" style="fill:#fff"/><path d="M17.952,24.8a5.337,5.337,0,1,0,8.607-6.312v0A5.337,5.337,0,0,0,17.95,24.8Z" style="fill:url(#d)"/><path d="M20.928,22.616a1.645,1.645,0,1,0,2.653-1.946h0a1.645,1.645,0,0,0-2.653,1.946Z" style="fill:#fff"/><path d="M4.859,18.493A4.115,4.115,0,1,0,11.5,13.626h0a4.115,4.115,0,0,0-6.636,4.866Z" style="fill:url(#e)"/><path d="M7.154,16.809a1.268,1.268,0,1,0,2.046-1.5h0a1.268,1.268,0,0,0-2.046,1.5Z" style="fill:#fff"/><path d="M12.408,10.269A4.441,4.441,0,1,0,19.57,5.016h0a4.441,4.441,0,1,0-7.162,5.253Z" style="fill:url(#f)"/><path d="M14.885,8.452a1.369,1.369,0,1,0,2.208-1.619h0a1.369,1.369,0,1,0-2.208,1.619Z" style="fill:#fff"/><path d="M12.68,26.238a3.83,3.83,0,0,1-2.909-1.087c-1.133-1.21-1.2-3.255-.2-5.757a21.542,21.542,0,0,1,5.307-7.326C20.064,7.215,25.945,5.356,28.27,7.839c1.133,1.211,1.2,3.255.2,5.757a21.553,21.553,0,0,1-5.308,7.326A21.551,21.551,0,0,1,15.5,25.733,9.229,9.229,0,0,1,12.68,26.238ZM25.342,7.28c-2.7,0-6.6,1.908-10.1,5.183A21,21,0,0,0,10.071,19.6c-.921,2.3-.887,4.138.094,5.187s2.817,1.2,5.169.437a21,21,0,0,0,7.46-4.692,21,21,0,0,0,5.175-7.132c.921-2.3.888-4.138-.095-5.187A3.34,3.34,0,0,0,25.342,7.28Z" style="fill:url(#g)"/><path d="M21.681,22.094a20.633,20.633,0,0,1-9.339-2.759C6.1,15.95,2.473,10.957,4.094,7.968c.79-1.458,2.7-2.175,5.4-2.012A21.542,21.542,0,0,1,18.12,8.674a21.545,21.545,0,0,1,6.987,5.746c1.6,2.167,2.051,4.163,1.261,5.621C25.622,21.416,23.915,22.094,21.681,22.094ZM8.759,6.474c-2.1,0-3.572.612-4.19,1.751C3.117,10.9,6.72,15.674,12.6,18.86s11.843,3.6,13.294.924c.685-1.263.251-3.054-1.22-5.042a21,21,0,0,0-6.81-5.593A21,21,0,0,0,9.459,6.5Q9.1,6.474,8.759,6.474Z" style="fill:url(#h)"/><path d="M10,24.078a3.757,3.757,0,0,1-2.851-1.065c-1.11-1.187-1.181-3.189-.2-5.639a21.062,21.062,0,0,1,5.189-7.163c5.073-4.747,10.83-6.563,13.1-4.132h0c2.275,2.431.083,8.053-4.99,12.8a21.059,21.059,0,0,1-7.491,4.7A9.024,9.024,0,0,1,10,24.078ZM22.373,5.553c-2.63,0-6.439,1.864-9.856,5.062A20.5,20.5,0,0,0,7.463,17.58c-.9,2.239-.866,4.034.09,5.055s2.745,1.172,5.038.424a20.513,20.513,0,0,0,7.284-4.582c4.766-4.46,6.994-9.853,4.965-12.02h0A3.256,3.256,0,0,0,22.373,5.553Z" style="fill:url(#i)"/><path d="M17.512,19.413c-.86,0-1.748-.043-2.659-.133C7.784,18.584,2.507,15.388,2.84,12h0c.333-3.383,6.133-5.49,13.2-4.791s12.345,3.892,12.012,7.275C27.763,17.436,23.324,19.413,17.512,19.413ZM3.378,12.057c-.3,3.031,4.873,6.03,11.528,6.686s12.312-1.277,12.611-4.308S22.644,8.406,15.988,7.75,3.677,9.027,3.378,12.057Z" style="fill:url(#j)"/><path d="M6.251,29.966h6.674V20.809h2.981L9.548,11.434,3.295,20.782l2.958.031Z" style="fill:url(#k)"/><path d="M12.924,30.045H6.251a.049.049,0,0,1-.039-.023c-.01-.015-.016-3.135-.016-3.156l0-5.975-2.9-.03a.06.06,0,0,1-.051-.048.1.1,0,0,1,.011-.085L9.508,11.38a.056.056,0,0,1,.041-.025.05.05,0,0,1,.04.024l6.357,9.375a.1.1,0,0,1,.011.086.059.059,0,0,1-.051.048H12.98v9.078C12.98,30.01,12.955,30.045,12.924,30.045Zm-6.618-.158h6.562V20.809c0-.044.025-.079.056-.079h2.85L9.549,11.549,3.424,20.7l2.83.03c.031,0,.055.036.055.079Z" style="fill:#183868"/><path d="M19.053,20.587l-2.958.031,6.254,9.348,6.357-9.375H25.724V11.434H19.051Z" style="fill:url(#l)"/><path d="M25.78,11.434v9.078h2.925a.059.059,0,0,1,.051.048.1.1,0,0,1-.011.086l-6.357,9.375a.05.05,0,0,1-.04.024.056.056,0,0,1-.041-.025l-6.254-9.348a.1.1,0,0,1-.011-.085.06.06,0,0,1,.051-.048l2.9-.03,0-5.975c0-.021.006-3.141.016-3.156a.049.049,0,0,1,.039-.023h6.674C25.755,11.355,25.78,11.39,25.78,11.434Zm-6.672,9.153c0,.043-.025.079-.055.079l-2.83.03,6.125,9.156,6.226-9.181h-2.85c-.031,0-.056-.035-.056-.079V11.513H19.107Z" style="fill:#183868"/>'
|
||
},
|
||
"Idris": {
|
||
colour: "#8a0819",
|
||
icon: '<path d="M13.376,6.2c3.6,1.1,4.5,2,5.8,5.2-.3-4-1.9-5.6-5.8-5.2Z" style="fill:#8a0819"/><path d="M8.376,12.4c2.3.7,5,1.3,6,5.7.4-5.5-2.2-5.8-6-5.7Z" style="fill:#8a0819"/><path d="M9.976,8.8c3.5.7,5.7,1.7,7,6.2.3-5.8-2.9-6.4-7-6.2Z" style="fill:#8a0819"/><path d="M14.576,2c19.1,12.4-4.2,12.7.8,27.1l3,.9c-8.3-11.2,18.4-17-3.8-28Z" style="fill:#8a0819"/>'
|
||
},
|
||
"Ini": {
|
||
colour: "#99b8c4",
|
||
icon: '<path d="M23.265,24.381l.9-.894c4.164.136,4.228-.01,4.411-.438l1.144-2.785L29.805,20l-.093-.231c-.049-.122-.2-.486-2.8-2.965V15.5c3-2.89,2.936-3.038,2.765-3.461L28.538,9.225c-.171-.422-.236-.587-4.37-.474l-.9-.93a20.166,20.166,0,0,0-.141-4.106l-.116-.263-2.974-1.3c-.438-.2-.592-.272-3.4,2.786l-1.262-.019c-2.891-3.086-3.028-3.03-3.461-2.855L9.149,3.182c-.433.175-.586.237-.418,4.437l-.893.89c-4.162-.136-4.226.012-4.407.438L2.285,11.733,2.195,12l.094.232c.049.12.194.48,2.8,2.962l0,1.3c-3,2.89-2.935,3.038-2.763,3.462l1.138,2.817c.174.431.236.584,4.369.476l.9.935a20.243,20.243,0,0,0,.137,4.1l.116.265,2.993,1.308c.435.182.586.247,3.386-2.8l1.262.016c2.895,3.09,3.043,3.03,3.466,2.859l2.759-1.115C23.288,28.644,23.44,28.583,23.265,24.381ZM11.407,17.857a4.957,4.957,0,1,1,6.488,2.824A5.014,5.014,0,0,1,11.407,17.857Z" style="fill:#99b8c4"/>'
|
||
},
|
||
"Io": {
|
||
colour: "#c2c2c2",
|
||
icon: '<path d="M2,2.887H7.075V7.51H2Zm.052,6.83H7.04V28.626H2.052Z" style="fill:#c2c2c2"/><path d="M13.271,26.454a9.791,9.791,0,0,1-2.616-7.178,10.148,10.148,0,0,1,2.616-7.343,9.321,9.321,0,0,1,7.047-2.72,9.34,9.34,0,0,1,7.075,2.72A10.168,10.168,0,0,1,30,19.276a9.809,9.809,0,0,1-2.607,7.178,9.456,9.456,0,0,1-7.075,2.659A9.436,9.436,0,0,1,13.271,26.454Zm10.436-2.972a6.7,6.7,0,0,0,1.166-4.258,6.943,6.943,0,0,0-1.166-4.354,4.047,4.047,0,0,0-3.389-1.486,4.022,4.022,0,0,0-3.38,1.486,6.991,6.991,0,0,0-1.156,4.354,6.744,6.744,0,0,0,1.156,4.258,4.053,4.053,0,0,0,3.38,1.46A4.078,4.078,0,0,0,23.707,23.482Z" style="fill:#c2c2c2"/>'
|
||
},
|
||
"Java": {
|
||
colour: "#5382a1",
|
||
icon: '<path d="M12.325,23.654s-1.07.622.761.833a16.023,16.023,0,0,0,5.8-.246,10.088,10.088,0,0,0,1.541.752c-5.481,2.349-12.405-.136-8.1-1.339" style="fill:#5382a1"/><path d="M11.656,20.588s-1.2.888.633,1.078a22.618,22.618,0,0,0,7.481-.359,3.32,3.32,0,0,0,1.152.7c-6.627,1.938-14.009.153-9.266-1.421" style="fill:#5382a1"/><path d="M17.3,15.388a2.051,2.051,0,0,1-.355,2.954s3.429-1.77,1.854-3.987c-1.471-2.067-2.6-3.095,3.508-6.636,0,0-9.586,2.394-5.007,7.669" style="fill:#5382a1"/><path d="M24.552,25.921s.792.652-.872,1.157c-3.164.958-13.168,1.248-15.948.038-1-.435.874-1.038,1.464-1.164a3.8,3.8,0,0,1,.966-.108c-1.111-.783-7.181,1.537-3.083,2.2,11.176,1.812,20.372-.816,17.473-2.124" style="fill:#5382a1"/><path d="M12.84,17.412s-5.089,1.209-1.8,1.648a38.225,38.225,0,0,0,6.731-.072c2.106-.178,4.221-.555,4.221-.555a8.934,8.934,0,0,0-1.28.685c-5.168,1.359-15.151.727-12.277-.663a9.629,9.629,0,0,1,4.407-1.042" style="fill:#5382a1"/><path d="M21.969,22.515c5.253-2.73,2.824-5.353,1.129-5a3.932,3.932,0,0,0-.6.161.957.957,0,0,1,.449-.346c3.354-1.179,5.933,3.478-1.083,5.322a.458.458,0,0,0,.106-.138" style="fill:#5382a1"/><path d="M18.8,2s2.909,2.91-2.759,7.386c-4.546,3.59-1.037,5.637,0,7.975-2.653-2.394-4.6-4.5-3.294-6.463C14.664,8.019,19.976,6.623,18.8,2" style="fill:#5382a1"/><path d="M13.356,29.912c5.042.323,12.786-.179,12.969-2.565,0,0-.353.9-4.167,1.623a41.458,41.458,0,0,1-12.76.2s.645.533,3.959.746" style="fill:#5382a1"/>',
|
||
inlineComment: [
|
||
"//"
|
||
]
|
||
},
|
||
"JavaScript": {
|
||
colour: "#f5de19",
|
||
icon: '<rect x="2" y="2" width="28" height="28" style="fill:#f5de19"/><path d="M20.809,23.875a2.866,2.866,0,0,0,2.6,1.6c1.09,0,1.787-.545,1.787-1.3,0-.9-.716-1.222-1.916-1.747l-.658-.282c-1.9-.809-3.16-1.822-3.16-3.964,0-1.973,1.5-3.476,3.853-3.476a3.889,3.889,0,0,1,3.742,2.107L25,18.128A1.789,1.789,0,0,0,23.311,17a1.145,1.145,0,0,0-1.259,1.128c0,.789.489,1.109,1.618,1.6l.658.282c2.236.959,3.5,1.936,3.5,4.133,0,2.369-1.861,3.667-4.36,3.667a5.055,5.055,0,0,1-4.795-2.691Zm-9.295.228c.413.733.789,1.353,1.693,1.353.864,0,1.41-.338,1.41-1.653V14.856h2.631v8.982c0,2.724-1.6,3.964-3.929,3.964a4.085,4.085,0,0,1-3.947-2.4Z"/>',
|
||
inlineComment: [
|
||
"//"
|
||
]
|
||
},
|
||
"JSON": {
|
||
colour: "#f5de19",
|
||
icon: '<path d="M4.014,14.976a2.51,2.51,0,0,0,1.567-.518A2.377,2.377,0,0,0,6.386,13.1,15.261,15.261,0,0,0,6.6,10.156q.012-2.085.075-2.747a5.236,5.236,0,0,1,.418-1.686,3.025,3.025,0,0,1,.755-1.018A3.046,3.046,0,0,1,9,4.125,6.762,6.762,0,0,1,10.544,4h.7V5.96h-.387a2.338,2.338,0,0,0-1.723.468A3.4,3.4,0,0,0,8.709,8.52a36.054,36.054,0,0,1-.137,4.133,4.734,4.734,0,0,1-.768,2.06A4.567,4.567,0,0,1,6.1,16a3.809,3.809,0,0,1,1.992,1.754,8.861,8.861,0,0,1,.618,3.865q0,2.435.05,2.9A1.755,1.755,0,0,0,9.264,25.7a2.639,2.639,0,0,0,1.592.337h.387V28h-.7a5.655,5.655,0,0,1-1.773-.2,2.97,2.97,0,0,1-1.324-.93,3.353,3.353,0,0,1-.681-1.63A24.175,24.175,0,0,1,6.6,22.006,16.469,16.469,0,0,0,6.386,18.9a2.408,2.408,0,0,0-.805-1.361,2.489,2.489,0,0,0-1.567-.524Z" style="fill:#f5de19"/><path d="M27.986,17.011a2.489,2.489,0,0,0-1.567.524,2.408,2.408,0,0,0-.805,1.361,16.469,16.469,0,0,0-.212,3.109,24.175,24.175,0,0,1-.169,3.234,3.353,3.353,0,0,1-.681,1.63,2.97,2.97,0,0,1-1.324.93,5.655,5.655,0,0,1-1.773.2h-.7V26.04h.387a2.639,2.639,0,0,0,1.592-.337,1.755,1.755,0,0,0,.506-1.186q.05-.462.05-2.9a8.861,8.861,0,0,1,.618-3.865A3.809,3.809,0,0,1,25.9,16a4.567,4.567,0,0,1-1.7-1.286,4.734,4.734,0,0,1-.768-2.06,36.054,36.054,0,0,1-.137-4.133,3.4,3.4,0,0,0-.425-2.092,2.338,2.338,0,0,0-1.723-.468h-.387V4h.7A6.762,6.762,0,0,1,23,4.125a3.046,3.046,0,0,1,1.149.581,3.025,3.025,0,0,1,.755,1.018,5.236,5.236,0,0,1,.418,1.686q.062.662.075,2.747a15.261,15.261,0,0,0,.212,2.947,2.377,2.377,0,0,0,.805,1.355,2.51,2.51,0,0,0,1.567.518Z" style="fill:#f5de19"/>'
|
||
},
|
||
"JSON5": {
|
||
colour: "#909090",
|
||
icon: '<path d="M12.815,15.167l.68-5.676h6.489v2h-4.4L15.329,13.7a2.4,2.4,0,0,1,.252-.122,2.962,2.962,0,0,1,.374-.13,2.9,2.9,0,0,1,.458-.106,2.834,2.834,0,0,1,.512-.046,3.983,3.983,0,0,1,1.466.252,2.736,2.736,0,0,1,1.076.723,3.167,3.167,0,0,1,.664,1.168,5,5,0,0,1,.228,1.588,4.157,4.157,0,0,1-.236,1.387,3.307,3.307,0,0,1-1.9,2.029,4.3,4.3,0,0,1-1.715.312,4.75,4.75,0,0,1-1.458-.228,4.054,4.054,0,0,1-1.252-.656,3.359,3.359,0,0,1-.878-1.046,2.787,2.787,0,0,1-.32-1.382H15.18a1.458,1.458,0,0,0,.39.97,1.383,1.383,0,0,0,1.558.206,1.089,1.089,0,0,0,.4-.412,1.749,1.749,0,0,0,.206-.618,4.3,4.3,0,0,0,.062-.74,2.709,2.709,0,0,0-.092-.74,1.506,1.506,0,0,0-.282-.558,1.229,1.229,0,0,0-.5-.349,1.78,1.78,0,0,0-.718-.13,2.121,2.121,0,0,0-.5.054,1.805,1.805,0,0,0-.382.138,1.318,1.318,0,0,0-.274.19,1.28,1.28,0,0,0-.19.2l-2.048-.482" style="fill:#fff"/><path d="M5.985,23.343a4.45,4.45,0,0,1-1.311-.58,3.2,3.2,0,0,1-.848-.824,3.012,3.012,0,0,1-.458-1.008,4.879,4.879,0,0,1-.13-1.143v-1.55a2.3,2.3,0,0,0-.076-.618,1.184,1.184,0,0,0-.222-.466.969.969,0,0,0-.382-.306A1.324,1.324,0,0,0,2,16.744V15.012a1.074,1.074,0,0,0,.937-.4,1.841,1.841,0,0,0,.3-1.1v-1.55a4.879,4.879,0,0,1,.13-1.143,3.037,3.037,0,0,1,.458-1.008A3.17,3.17,0,0,1,4.671,9a4.482,4.482,0,0,1,1.311-.58l.48,1.344a1.222,1.222,0,0,0-.488.328,1.742,1.742,0,0,0-.306.5,2.524,2.524,0,0,0-.16.634,5.827,5.827,0,0,0-.046.74v1.55A2.844,2.844,0,0,1,5.126,14.9a2.37,2.37,0,0,1-1.076.983,2.356,2.356,0,0,1,1.076.992,2.808,2.808,0,0,1,.336,1.374v1.55a5.827,5.827,0,0,0,.046.74,2.586,2.586,0,0,0,.16.634,1.684,1.684,0,0,0,.306.5A1.222,1.222,0,0,0,6.462,22c0-.005-.477,1.344-.477,1.344" style="fill:#999"/><path d="M8.215,19.393a1.289,1.289,0,0,1,.1-.512,1.212,1.212,0,0,1,.29-.4,1.373,1.373,0,0,1,.45-.274,1.637,1.637,0,0,1,.58-.1,1.555,1.555,0,0,1,.572.1,1.269,1.269,0,0,1,.45.274,1.077,1.077,0,0,1,.29.4,1.294,1.294,0,0,1,0,1.024,1.151,1.151,0,0,1-.29.412,1.388,1.388,0,0,1-.45.268,1.613,1.613,0,0,1-.572.1,1.578,1.578,0,0,1-.58-.1,1.409,1.409,0,0,1-.45-.268,1.229,1.229,0,0,1-.39-.924m0-6.088a1.289,1.289,0,0,1,.1-.512,1.212,1.212,0,0,1,.29-.4,1.373,1.373,0,0,1,.45-.274,1.637,1.637,0,0,1,.58-.1,1.555,1.555,0,0,1,.572.1,1.269,1.269,0,0,1,.45.274,1.077,1.077,0,0,1,.29.4,1.294,1.294,0,0,1,0,1.024,1.151,1.151,0,0,1-.29.412,1.388,1.388,0,0,1-.45.268,1.613,1.613,0,0,1-.572.1,1.578,1.578,0,0,1-.58-.1,1.409,1.409,0,0,1-.45-.268,1.229,1.229,0,0,1-.39-.924" style="fill:#999"/><path d="M24.24,20.293a3.648,3.648,0,0,1-.122.929,4.534,4.534,0,0,1-.336.891,4.706,4.706,0,0,1-.5.807,4.005,4.005,0,0,1-.61.664l-1.3-.61c.081-.173.168-.349.26-.526a4.846,4.846,0,0,0,.268-.558,4.443,4.443,0,0,0,.206-.656,3.406,3.406,0,0,0,.084-.8V18.656h2.059l-.008,1.636" style="fill:#999"/><path d="M25.538,21.994a1.251,1.251,0,0,0,.488-.328,1.707,1.707,0,0,0,.306-.5,2.525,2.525,0,0,0,.16-.634,5.826,5.826,0,0,0,.046-.74v-1.55a2.844,2.844,0,0,1,.336-1.382,2.364,2.364,0,0,1,1.084-.983,2.364,2.364,0,0,1-1.084-.983,2.844,2.844,0,0,1-.336-1.382v-1.55a5.827,5.827,0,0,0-.046-.74,2.586,2.586,0,0,0-.16-.634,1.684,1.684,0,0,0-.306-.5,1.222,1.222,0,0,0-.488-.328l.48-1.338A4.45,4.45,0,0,1,27.329,9a3.092,3.092,0,0,1,.848.815,2.892,2.892,0,0,1,.45,1.008,4.606,4.606,0,0,1,.138,1.143v1.55a2.655,2.655,0,0,0,.068.626,1.448,1.448,0,0,0,.222.474,1.037,1.037,0,0,0,.382.3,1.376,1.376,0,0,0,.564.106v1.731a1.077,1.077,0,0,0-.946.412,1.828,1.828,0,0,0-.29,1.084v1.55a4.606,4.606,0,0,1-.138,1.143,2.915,2.915,0,0,1-.45,1.008,3.157,3.157,0,0,1-.848.824,4.482,4.482,0,0,1-1.311.58l-.48-1.352" style="fill:#999"/>'
|
||
},
|
||
"Julia": {
|
||
colour: "#4063d8",
|
||
icon: '<path d="M7.448,21.983V13.775l-2.432.669v8.729a2.66,2.66,0,0,1-.106.929.336.336,0,0,1-.308.239.405.405,0,0,1-.212-.074,1.282,1.282,0,0,1-.287-.3,2.813,2.813,0,0,0-.377-.409.874.874,0,0,0-.611-.207,1.22,1.22,0,0,0-.812.255.789.789,0,0,0-.3.627A.907.907,0,0,0,2.542,25a3.115,3.115,0,0,0,1.561.319,7.065,7.065,0,0,0,1.37-.122,2.361,2.361,0,0,0,1.057-.483,2.292,2.292,0,0,0,.68-1.014,5.094,5.094,0,0,0,.239-1.715Z" style="fill:#252525"/><path d="M10.825,14.008H8.4v5.618a2.241,2.241,0,0,0,.218.977,2.489,2.489,0,0,0,.6.8,2.9,2.9,0,0,0,.892.536,3.045,3.045,0,0,0,1.1.2,2.55,2.55,0,0,0,1.051-.244,4.347,4.347,0,0,0,1.019-.648v.743H15.71V14.008H13.289v5.756a2.764,2.764,0,0,1-.648.706,1.139,1.139,0,0,1-.648.281,1.155,1.155,0,0,1-.457-.09,1.263,1.263,0,0,1-.372-.239,1.06,1.06,0,0,1-.25-.356,1.091,1.091,0,0,1-.09-.441Z" style="fill:#252525"/><path d="M19.074,21.983V10.132l-2.411.669V21.983Z" style="fill:#252525"/><path d="M20.038,14.444v7.54h2.421V13.775Z" style="fill:#252525"/><path d="M27.568,17.863v2.3q-.372.276-.674.457a1.165,1.165,0,0,1-.6.181.468.468,0,0,1-.276-.09,1,1,0,0,1-.234-.239,1.138,1.138,0,0,1-.165-.356,1.576,1.576,0,0,1-.058-.43.968.968,0,0,1,.181-.552,2.306,2.306,0,0,1,.473-.5,4.572,4.572,0,0,1,.648-.43,7.612,7.612,0,0,1,.706-.345ZM30,21.983V16a2.083,2.083,0,0,0-.191-.9,1.779,1.779,0,0,0-.595-.69,3.006,3.006,0,0,0-1.025-.441,6.225,6.225,0,0,0-1.481-.154,5.735,5.735,0,0,0-1.327.149,4.6,4.6,0,0,0-1.1.4,2.373,2.373,0,0,0-.759.611,1.216,1.216,0,0,0-.281.77.958.958,0,0,0,.319.738,1.178,1.178,0,0,0,.828.292,1.364,1.364,0,0,0,.547-.1.8.8,0,0,0,.335-.255.986.986,0,0,0,.165-.372,1.978,1.978,0,0,0,.048-.435,1.031,1.031,0,0,1,.223-.669.975.975,0,0,1,.8-.276,1.008,1.008,0,0,1,.781.319,1.594,1.594,0,0,1,.292,1.083v.786l-.265.064q-.488.149-.988.313t-.961.361a7.884,7.884,0,0,0-.865.43,3.511,3.511,0,0,0-.706.531,2.319,2.319,0,0,0-.478.669,1.918,1.918,0,0,0-.175.828,2.034,2.034,0,0,0,.165.823,1.876,1.876,0,0,0,.473.653,2.255,2.255,0,0,0,.749.435,2.907,2.907,0,0,0,.993.159,3.679,3.679,0,0,0,.7-.058,2.509,2.509,0,0,0,.536-.165,2.209,2.209,0,0,0,.43-.25q.191-.143.393-.313v.637Z" style="fill:#252525"/><circle cx="6.204" cy="11.672" r="1.5" style="fill:#6682df"/><path d="M6.2,13.287a1.615,1.615,0,1,1,1.615-1.615A1.617,1.617,0,0,1,6.2,13.287Zm0-3a1.385,1.385,0,1,0,1.385,1.385A1.386,1.386,0,0,0,6.2,10.287Z" style="fill:#4063d8"/><circle cx="21.417" cy="11.672" r="1.5" style="fill:#d5635c"/><path d="M21.417,13.287a1.615,1.615,0,1,1,1.615-1.615A1.617,1.617,0,0,1,21.417,13.287Zm0-3A1.385,1.385,0,1,0,22.8,11.672,1.386,1.386,0,0,0,21.417,10.287Z" style="fill:#cb3c33"/><circle cx="23.385" cy="8.297" r="1.5" style="fill:#60ad51"/><path d="M23.385,9.912A1.615,1.615,0,1,1,25,8.3,1.617,1.617,0,0,1,23.385,9.912Zm0-3A1.385,1.385,0,1,0,24.77,8.3,1.386,1.386,0,0,0,23.385,6.912Z" style="fill:#389826"/><circle cx="25.354" cy="11.672" r="1.5" style="fill:#aa79c1"/><path d="M25.354,13.287a1.615,1.615,0,1,1,1.615-1.615A1.617,1.617,0,0,1,25.354,13.287Zm0-3a1.385,1.385,0,1,0,1.385,1.385A1.386,1.386,0,0,0,25.354,10.287Z" style="fill:#9558b2"/>'
|
||
},
|
||
"Kotlin": {
|
||
colour: "#9d4b9d",
|
||
icon: '<defs><linearGradient id="a" x1="311.336" y1="1452.064" x2="283.342" y2="1480.058" gradientTransform="translate(-281.4 -1450)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e44857"/><stop offset="0.47" stop-color="#9d4b9d"/><stop offset="1" stop-color="#6d5faa"/></linearGradient></defs><title>file_type_kotlin</title><path d="M30,30H2V2H30L16,16Z" style="fill:url(#a)"/>'
|
||
},
|
||
"Kusto": {
|
||
colour: "#59b4d9",
|
||
icon: '<rect x="0.55" y="22.339" width="15.433" height="2.796" rx="0.439" transform="translate(-14.363 12.797) rotate(-44.999)" style="fill:#b8d432"/><rect x="1.372" y="16.382" width="9.859" height="2.796" rx="0.439" transform="translate(-10.727 9.663) rotate(-44.999)" style="fill:#b8d432"/><rect x="9.232" y="24.301" width="9.859" height="2.796" rx="0.439" transform="translate(-14.024 17.541) rotate(-44.999)" style="fill:#b8d432"/><polygon points="30 2 2 2 30 29.999 30 2" style="fill:#0078d4"/><polygon points="10.282 10.282 21.718 21.718 30 13.436 30 2 18.564 2 10.282 10.282" style="fill:#59b4d9"/><polygon points="30 29.999 30 2 16 16 30 29.999" style="fill:#fff;opacity:0.20000000298023224;isolation:isolate"/><rect x="16.226" y="9.001" width="2.796" height="2.796" rx="0.622" transform="translate(-2.192 15.507) rotate(-44.999)" style="fill:#fff"/><rect x="20.18" y="5.048" width="2.796" height="2.796" rx="0.622" transform="translate(1.762 17.146) rotate(-44.999)" style="fill:#fff"/><rect x="20.18" y="12.955" width="2.796" height="2.796" rx="0.622" transform="translate(-3.829 19.461) rotate(-44.999)" style="fill:#fff"/><rect x="24.133" y="9.002" width="2.796" height="2.796" rx="0.622" transform="translate(0.124 21.099) rotate(-44.999)" style="fill:#fff"/>'
|
||
},
|
||
"LaTeX": {
|
||
colour: "#cfcfcf",
|
||
icon: '<path d="M11.333,13.122c-.128-1.562-.241-2.756-2.287-2.756H7.91v8.4h2.145v.611l-3.083-.029-3.082.029v-.611H6.034v-8.4H4.884c-2.046,0-2.159,1.208-2.287,2.756H2l.284-3.367h9.362l.284,3.367h-.6Z" style="fill:#cfcfcf"/><path d="M19.289,22.53H10.41V21.92h1.506V13.467H10.41v-.611h8.637l.412,3.367h-.6c-.213-1.833-.682-2.756-2.855-2.756H13.791V17.2h.838c1.364,0,1.505-.6,1.505-1.662h.6v3.935h-.6c0-1.08-.142-1.662-1.505-1.662h-.838v4.106h2.216c2.472,0,3-1.108,3.3-3.225h.6Z" style="fill:#cfcfcf"/><path d="M27.727,19.186c-.54,0-1.96,0-2.415.029V18.6h1.179l-2.557-3.552-2.529,3.381A4.1,4.1,0,0,0,22.7,18.6v.611c-.355-.029-1.576-.029-2.017-.029-.4,0-1.548,0-1.875.029V18.6h.383a7.459,7.459,0,0,0,.824-.043c.5-.043.54-.085.667-.256L23.536,14.5l-3.153-4.418H19V9.47c.384.028,1.79.028,2.273.028.582,0,1.918,0,2.429-.028v.611H22.528l2.117,2.955,2.074-2.784a4.1,4.1,0,0,0-1.293-.17V9.47c.356.028,1.591.028,2.032.028.4,0,1.534,0,1.861-.028v.611h-.369a5.264,5.264,0,0,0-.838.043c-.469.043-.526.071-.667.256l-2.4,3.21L28.636,18.6H30v.611C29.645,19.186,28.182,19.186,27.727,19.186Z" style="fill:#cfcfcf"/>',
|
||
inlineComment: [
|
||
"%"
|
||
]
|
||
},
|
||
"Less": {
|
||
colour: "#2a4f84",
|
||
icon: '<defs><linearGradient id="a" x1="-3.609" y1="-492.685" x2="-3.609" y2="-480.271" gradientTransform="translate(19.712 502.891)" gradientUnits="userSpaceOnUse"><stop offset="0.15" stop-color="#2a4f84"/><stop offset="0.388" stop-color="#294e82"/><stop offset="1" stop-color="#172e4e"/></linearGradient></defs><title>file_type_less</title><path d="M28.559,20.226a2.4,2.4,0,0,1-2.394,2.394H6.04a2.4,2.4,0,0,1-2.394-2.394V12.6A2.4,2.4,0,0,1,6.04,10.206H26.165A2.4,2.4,0,0,1,28.559,12.6Z" style="fill:url(#a)"/><path d="M24.349,16.25a1.972,1.972,0,0,1,1.578,1.891,1.69,1.69,0,0,1-.653,1.4,2.934,2.934,0,0,1-1.862.559,4.558,4.558,0,0,1-2.241-.618,1.986,1.986,0,0,1,.16-.669,1.83,1.83,0,0,1,.35-.576,3.7,3.7,0,0,0,1.649.493.965.965,0,0,0,.51-.112.339.339,0,0,0,.178-.3q0-.353-.546-.529l-.653-.247q-1.482-.54-1.482-1.762a1.753,1.753,0,0,1,.623-1.416,2.587,2.587,0,0,1,1.678-.648,5.094,5.094,0,0,1,1.15.147,4.555,4.555,0,0,1,1.032.472,1.668,1.668,0,0,1-.13.722,1.22,1.22,0,0,1-.38.558,4.261,4.261,0,0,0-1.66-.446.544.544,0,0,0-.362.106.338.338,0,0,0-.124.27q0,.282.451.446l.736.259Z" style="fill:#f6f6f6"/><path d="M19.1,16.25a1.972,1.972,0,0,1,1.577,1.891,1.691,1.691,0,0,1-.652,1.4,2.937,2.937,0,0,1-1.862.559,4.56,4.56,0,0,1-2.241-.618,1.981,1.981,0,0,1,.16-.669,1.821,1.821,0,0,1,.35-.576,3.7,3.7,0,0,0,1.649.493.963.963,0,0,0,.51-.112.34.34,0,0,0,.178-.3q0-.353-.546-.529l-.653-.247q-1.482-.54-1.482-1.762a1.752,1.752,0,0,1,.623-1.416,2.585,2.585,0,0,1,1.677-.648,5.088,5.088,0,0,1,1.15.147,4.552,4.552,0,0,1,1.032.472,1.668,1.668,0,0,1-.13.722,1.22,1.22,0,0,1-.38.558,4.263,4.263,0,0,0-1.661-.446.543.543,0,0,0-.362.106.339.339,0,0,0-.124.27q0,.282.451.446l.736.259Z" style="fill:#f6f6f6"/><path d="M15.264,16.333a2.822,2.822,0,0,0-.172-1,2.239,2.239,0,0,0-.492-.787,2.28,2.28,0,0,0-.777-.517,2.737,2.737,0,0,0-1.026-.314,2.8,2.8,0,0,0-1.18.361,2.256,2.256,0,0,0-.83.646,2.765,2.765,0,0,0-.487.969,4.4,4.4,0,0,0-.16,1.216,5.681,5.681,0,0,0,.13,1.257,2.628,2.628,0,0,0,.445,1,2.107,2.107,0,0,0,.818.657,2.935,2.935,0,0,0,1.251.277,3.952,3.952,0,0,0,2.324-.712,1.865,1.865,0,0,0-.484-1.081,6.188,6.188,0,0,1-.857.262,3.208,3.208,0,0,1-.656.079,1.017,1.017,0,0,1-.815-.29,1.187,1.187,0,0,1-.271-.77h3.083A4.447,4.447,0,0,0,15.264,16.333Zm-3.248.081a2.433,2.433,0,0,1,.218-1,.632.632,0,0,1,.559-.264.66.66,0,0,1,.582.282,1.749,1.749,0,0,1,.194.856v.13H12.016Z" style="fill:#f6f6f6"/><path d="M29.18,17.2a1.605,1.605,0,0,0-.53,1.265v2.051a1.81,1.81,0,0,1-.683,1.557,2.8,2.8,0,0,1-1.654.549l-.373,0V21.594a1.241,1.241,0,0,0,.595-.334,1.369,1.369,0,0,0,.419-1.047V18.556a2.545,2.545,0,0,1,.257-1.323,2.5,2.5,0,0,1,1.2-.838,2.528,2.528,0,0,1-1.324-1.179,2.956,2.956,0,0,1-.135-1.165V12.533a1.458,1.458,0,0,0-.366-1.054,1.152,1.152,0,0,0-.648-.314v-.96c.445,0,.669,0,.928,0a1.676,1.676,0,0,1,1.023.442,2,2,0,0,1,.673,1.009,2.33,2.33,0,0,1,.086.7v1.757a1.846,1.846,0,0,0,.5,1.383,2.113,2.113,0,0,0,.854.479v.794a1.943,1.943,0,0,0-.82.426Z" style="fill:#f6f6f6;stroke:#404040;stroke-miterlimit:10;stroke-width:0.25px"/><path d="M5.594,10.206H5.26a1.673,1.673,0,0,0-1.023.442,1.71,1.71,0,0,0-.673,1.009,3.531,3.531,0,0,0-.038.7v1.757A1.867,1.867,0,0,1,2.981,15.5,2.847,2.847,0,0,1,2,15.977v.793a2.552,2.552,0,0,1,.947.426,1.638,1.638,0,0,1,.577,1.265v2.051A1.781,1.781,0,0,0,4.16,22.07a2.8,2.8,0,0,0,1.654.55l.421,0V21.594a1.47,1.47,0,0,1-.643-.334,1.355,1.355,0,0,1-.371-1.047V18.557a2.516,2.516,0,0,0-.305-1.323,2.5,2.5,0,0,0-1.2-.838,2.529,2.529,0,0,0,1.324-1.178,2.857,2.857,0,0,0,.183-1.165V12.534A1.462,1.462,0,0,1,5.54,11.48a1.313,1.313,0,0,1,.575-.271l.428,0V10.206H5.594Z" style="fill:#f6f6f6;stroke:#404040;stroke-miterlimit:10;stroke-width:0.25px"/><path d="M9.537,18.529h-.32c-.348,0-.479-.183-.479-.551V11.219a1.256,1.256,0,0,0-.268-.856c-.15-.164-.411-.162-.783-.162H6.964l-.085,0v8.106a1.875,1.875,0,0,0,.352,1.24,1.441,1.441,0,0,0,1.145.393,7.859,7.859,0,0,0,1.269-.118,2.23,2.23,0,0,0,.036-.509,2.278,2.278,0,0,0-.142-.782Z" style="fill:#f6f6f6"/>'
|
||
},
|
||
"Liquid": {
|
||
colour: "#004999",
|
||
icon: '<path d="M29.988,22.372l-.748.048a5.209,5.209,0,0,1-2.99-.671,7.8,7.8,0,0,0-7.8,0,5.275,5.275,0,0,1-5.3.01A7.262,7.262,0,0,0,9.263,20.7a7.229,7.229,0,0,0-3.94,1.06,4.751,4.751,0,0,1-2.47.7l-.838,0c0,.889-.009,1.739-.015,2.515l.861,0a7.237,7.237,0,0,0,3.75-1.052,4.763,4.763,0,0,1,2.659-.7,4.835,4.835,0,0,1,2.634.718,7.794,7.794,0,0,0,7.8,0,5.287,5.287,0,0,1,5.319,0,7.709,7.709,0,0,0,4.4.989L30,24.888C29.995,24.1,29.991,23.249,29.988,22.372Z" style="fill:#004999"/><path d="M29.983,15.581l-.743.047a5.226,5.226,0,0,1-2.99-.671,7.8,7.8,0,0,0-7.8,0,5.278,5.278,0,0,1-5.3.01A7.312,7.312,0,0,0,9.263,13.91a7.3,7.3,0,0,0-3.941,1.06,4.742,4.742,0,0,1-2.469.7l-.828,0c0,.849,0,1.693,0,2.515l.84,0a7.237,7.237,0,0,0,3.75-1.052,4.7,4.7,0,0,1,2.659-.7,4.8,4.8,0,0,1,2.634.718,7.794,7.794,0,0,0,7.8,0,5.287,5.287,0,0,1,5.319,0,7.709,7.709,0,0,0,4.4.989l.568-.037C29.983,17.269,29.983,16.424,29.983,15.581Z" style="fill:#004999"/><path d="M29.24,9.137a5.254,5.254,0,0,1-2.99-.671,7.8,7.8,0,0,0-7.8,0,5.275,5.275,0,0,1-5.3.009A7.16,7.16,0,0,0,9.263,7.42a7.159,7.159,0,0,0-3.94,1.059,4.738,4.738,0,0,1-2.469.7l-.834,0c0,.82,0,1.664,0,2.517l.836,0a7.237,7.237,0,0,0,3.75-1.052,4.738,4.738,0,0,1,2.659-.706,4.814,4.814,0,0,1,2.634.719,7.791,7.791,0,0,0,7.8,0,5.293,5.293,0,0,1,5.319,0,7.732,7.732,0,0,0,4.4.988l.568-.037c0-.859,0-1.7.007-2.516Z" style="fill:#004999"/>'
|
||
},
|
||
"Lisp": {
|
||
colour: "#8381c5",
|
||
icon: '<defs><linearGradient id="a" x1="1925.785" y1="-1383.075" x2="2302.351" y2="-1868.557" gradientTransform="matrix(0.048, 0, 0, -0.045, -82.539, -54.65)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8381c5"/><stop offset="0.566" stop-color="#7e55b3" stop-opacity="0.996"/><stop offset="1" stop-color="#a52ecb" stop-opacity="0.992"/></linearGradient><linearGradient id="b" x1="2214.187" y1="-1750.225" x2="1930.974" y2="-1408.342" gradientTransform="matrix(0.054, 0, 0, -0.054, -95.188, -68.487)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#411f5d"/><stop offset="1" stop-color="#5b2a85"/></linearGradient></defs><title>file_type_emacs</title><path d="M29.363,16A13.364,13.364,0,1,1,16,2.5,13.432,13.432,0,0,1,29.363,16Z" style="stroke-width:0.75px;fill:url(#a);stroke:url(#b)"/><path d="M11.406,25.483a18.157,18.157,0,0,0,2.587-.048,41.728,41.728,0,0,0,4.5-.639,30.671,30.671,0,0,0,3.132-.839c1.142-.421,1.764-.778,2.043-1.284a.62.62,0,0,0-.441-.692c-1.347-.565-2.908-.463-6-.528-3.427-.118-4.567-.691-5.174-1.153-.582-.469-.29-1.765,2.206-2.907a54.266,54.266,0,0,1,6.184-1.73c-1.659-.82-4.753-2.262-5.389-2.573-.558-.273-1.451-.684-1.644-1.182-.219-.478.518-.889.93-1.007a20.3,20.3,0,0,1,4.9-.647,4.308,4.308,0,0,0,1-.069A1.767,1.767,0,0,0,21.879,7.9a2.775,2.775,0,0,0-3.286-1.81C17.22,6.338,13.908,7.3,13.908,7.3c4.093-.035,4.779.033,5.085.461.181.253-.082.6-1.174.777-1.189.194-3.659.428-3.659.428-2.37.141-4.04.15-4.54,1.21-.327.693.349,1.3.645,1.688a12.728,12.728,0,0,0,4.225,2.7c.438.208,1.723.6,1.723.6a11.52,11.52,0,0,0-8.1,2.287c-1.807,1.672-1.008,3.665,2.695,4.891a12.755,12.755,0,0,0,6.534.772c1.922-.1,2.224-.042,2.244.116.027.222-2.134.773-2.724.944-1.5.433-5.436,1.307-5.456,1.312Z" style="fill:#fff"/>'
|
||
},
|
||
"LiveScript": {
|
||
colour: "#317eac",
|
||
icon: '<polygon points="5.504 2.007 8.986 2 8.986 21.746 10.759 19.987 10.759 3.755 12.497 3.755 12.497 18.24 14.253 16.487 14.253 3.755 15.997 3.755 15.997 14.729 17.735 12.962 17.735 3.755 19.461 3.755 19.461 11.225 21.245 9.461 21.245 3.755 22.972 3.755 22.972 7.723 24.738 5.975 24.739 3.755 26.483 3.755 26.483 5.482 28.209 5.482 28.209 7.267 25.911 7.268 24.184 8.993 28.209 8.993 28.209 10.719 22.438 10.719 20.698 12.504 28.209 12.504 28.209 14.23 18.961 14.23 17.205 16.014 28.209 16.014 28.209 17.741 15.455 17.741 13.715 19.496 28.209 19.496 28.209 21.252 11.98 21.252 10.242 22.978 29.982 22.978 29.989 26.489 8.986 26.489 8.986 30 5.504 30 5.504 26.489 2.011 26.489 2.011 22.978 5.504 22.978 5.503 2 5.504 2.007" style="fill:#317eac"/>'
|
||
},
|
||
"Log file": {
|
||
colour: "#00bd02",
|
||
icon: '<path d="M29.4,27.6H2.5V4.5H29.4Zm-25.9-1H28.4V5.5H3.5Z" style="fill:#00bd02"/><rect x="2.5" y="5.5" width="26.9" height="1.9" style="fill:#00bd02"/><rect x="11.333" y="9.5" width="8.167" height="1" style="fill:#00bd02"/><rect x="11.333" y="12.083" width="12.5" height="1" style="fill:#00bd02"/><rect x="11.333" y="14.75" width="10.617" height="1" style="fill:#00bd02"/><rect x="11.333" y="17.583" width="14.167" height="1" style="fill:#00bd02"/><rect x="11.333" y="20.5" width="9.834" height="1" style="fill:#00bd02"/><rect x="11.5" y="23.083" width="12.167" height="1" style="fill:#00bd02"/><rect x="5.5" y="9.5" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="12.083" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="12.083" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="14.667" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="17.25" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="20.5" width="4.333" height="1" style="fill:#00bd02"/><rect x="5.5" y="23.083" width="4.333" height="1" style="fill:#00bd02"/>'
|
||
},
|
||
"LOLCODE": {
|
||
colour: "#8d2701",
|
||
icon: '<path d="M21.3,3.73a3.94,3.94,0,0,1,1.041-.62,8.435,8.435,0,0,1,.556,3.385,24.865,24.865,0,0,1-.643,5.019c-.368-.18-.736-.364-1.1-.554a11.754,11.754,0,0,0,.273-3.747,3.08,3.08,0,0,0-.255-.865,5.142,5.142,0,0,0-2.016,2.07c-.319-.24-.652-.459-.985-.676A15.716,15.716,0,0,1,21.3,3.73Z" style="fill:#ededed"/><path d="M19.451,8.6a4.574,4.574,0,0,1,1.509-1.563,6.685,6.685,0,0,1,.09,2.671C20.517,9.343,19.975,8.987,19.451,8.6Z" style="fill:#ededed"/><path d="M16.461,10.076c-.038-1.134-.031-2.269-.026-3.4-.9.493-1.758,1.071-2.648,1.589-.453.27-.908.536-1.36.808.224-.163.457-.312.69-.462-.861-1.224-1.971-2.5-3.53-2.748a10.964,10.964,0,0,0-.365,5.147c.318-.195.633-.4.962-.572-.474.319-.964.615-1.446.92-.957.6-1.922,1.192-2.892,1.777a1.232,1.232,0,0,0-.391.32c-.1,1.395-.34,4.392-.34,4.392-.254,3.668-.522,7.336-.826,11,4.062.343,8.118.742,12.179,1.076C16.458,23.3,16.472,16.69,16.461,10.076Z" style="fill:#ededed"/><path d="M21.1,2.977A5.884,5.884,0,0,1,22.706,2a10.064,10.064,0,0,1,.772,4.606,24.591,24.591,0,0,1-.508,4.459c1.2.846,2.433,1.645,3.618,2.509q.44,6.38.907,12.758c.066.839.094,1.68.216,2.513-3.029.279-6.057.591-9.085.886a19.137,19.137,0,0,0-2.158.27v-.083c-.01-6.614,0-13.227-.007-19.841-.038-1.134-.031-2.269-.026-3.4v-.1c.406.292.826.562,1.243.839A16.274,16.274,0,0,1,21.1,2.977Zm.2.752a15.716,15.716,0,0,0-3.128,4.011c.334.217.666.437.985.676a5.142,5.142,0,0,1,2.016-2.07,3.08,3.08,0,0,1,.255.865,11.754,11.754,0,0,1-.273,3.747c.364.19.731.374,1.1.554a24.865,24.865,0,0,0,.643-5.019,8.435,8.435,0,0,0-.556-3.385A3.94,3.94,0,0,0,21.3,3.73ZM19.451,8.6c.524.383,1.066.739,1.6,1.108a6.685,6.685,0,0,0-.09-2.671A4.574,4.574,0,0,0,19.451,8.6Z" style="fill:#8d2701"/><path d="M9.219,5.062a3.581,3.581,0,0,1,2.205.748A12.9,12.9,0,0,1,13.788,8.26c-.453.27-.908.536-1.36.808.224-.163.457-.312.69-.462-.861-1.224-1.971-2.5-3.53-2.748a10.964,10.964,0,0,0-.365,5.147c.318-.195.633-.4.962-.572-.474.319-.964.615-1.446.92A14.1,14.1,0,0,1,9.219,5.062Z" style="fill:#8d2701"/><path d="M10.507,8.476a2.455,2.455,0,0,1,1.517.88l-.36.2A2.69,2.69,0,0,0,10.739,9a3.318,3.318,0,0,0-.165,1.281l-.344.11A7.021,7.021,0,0,1,10.507,8.476Z" style="fill:#8d2701"/><path d="M12.139,10.693a.487.487,0,0,1,.542.01,1.552,1.552,0,0,1,.062.6c-.039.784.024,1.573-.076,2.354a1.013,1.013,0,0,1-1.012.886c-.233-.05-.278-.341-.278-.541,0-.675.1-1.347.066-2.024A1.3,1.3,0,0,1,12.139,10.693Zm.15,1.084a.891.891,0,0,0,.251-.866C12.218,11.061,11.9,11.507,12.289,11.777Z" style="fill:#8d2701"/><path d="M14.5,13.728a17.671,17.671,0,0,1,1.928-.822c-.024.064-.069.191-.092.255-.649.358-1.36.6-2.021.938a12.118,12.118,0,0,0-3.238,2.248A7.2,7.2,0,0,1,10,17.381a4.166,4.166,0,0,1,.98-1.246A12.727,12.727,0,0,1,14.5,13.728Z" style="fill:#8d2701"/><path d="M7.628,13.231a.989.989,0,0,1,.594-.152,18.114,18.114,0,0,1-.1,2.654.713.713,0,0,1-.892.658,21.1,21.1,0,0,1,.082-2.226A1.383,1.383,0,0,1,7.628,13.231Zm.179.831c.268-.112.319-.413.412-.654C7.82,13.312,7.775,13.783,7.807,14.062Z" style="fill:#8d2701"/><path d="M10.823,17.094a13.934,13.934,0,0,1,4.612-1.968c-.01.068-.029.206-.039.274a14.273,14.273,0,0,0-4.475,1.914,2.626,2.626,0,0,1-.681.343C10.3,17.356,10.6,17.249,10.823,17.094Z" style="fill:#8d2701"/><path d="M5.264,17.59A5.144,5.144,0,0,1,8,17.1a1.5,1.5,0,0,1,1.142.665A6.854,6.854,0,0,0,7.6,17.278a6.967,6.967,0,0,0-2.484.564Z" style="fill:#8d2701"/><path d="M10.578,17.725a9.59,9.59,0,0,1,3.61-.566c.24.021.321.2.313.424a3.238,3.238,0,0,0-1.956-.09,21.688,21.688,0,0,0-2.557.658C9.995,17.829,10.345,17.809,10.578,17.725Z" style="fill:#8d2701"/><path d="M9.268,17.676c.149-.176.533-.332.664-.062a1.3,1.3,0,0,1-.516.993C9.268,18.337,8.973,17.952,9.268,17.676Z" style="fill:#8d2701"/><path d="M5.744,18.629a5.9,5.9,0,0,1,3.182-.618c-.182.235-.493.178-.751.208a5.663,5.663,0,0,0-1.72.33c-.344.128-.665.31-1.02.409A.6.6,0,0,1,5.744,18.629Z" style="fill:#8d2701"/><path d="M6.9,19.114a9.676,9.676,0,0,1,2.2-.854c-.1.3-.441.338-.7.444a7.839,7.839,0,0,0-2.564,1.415C5.938,19.584,6.488,19.369,6.9,19.114Z" style="fill:#8d2701"/><path d="M11.635,19.7a3.11,3.11,0,0,0,1.91-1.383c.347-.1.273.275.26.494a2.056,2.056,0,0,1-.95,1.036,12.365,12.365,0,0,1-1.827,6.419A2.342,2.342,0,0,1,8.879,27.5a2.251,2.251,0,0,1-1.535-1.49,10.894,10.894,0,0,1-.69-4.665c-.157-.112-.369-.179-.46-.362-.13-.2.011-.425.047-.631.19.151.345.392.606.42a3.617,3.617,0,0,0,1.863-.4,1.588,1.588,0,0,0,.709-.662,3.881,3.881,0,0,0,.431.266A4.28,4.28,0,0,0,11.635,19.7Zm-2.2.835a4.132,4.132,0,0,1-2.462.809,11.049,11.049,0,0,0,.358,3.526,3.226,3.226,0,0,1,.9-1.282,2.055,2.055,0,0,1,2.3-.2,2.3,2.3,0,0,1,.884,1.172,14.659,14.659,0,0,0,1.005-4.489A5.167,5.167,0,0,1,9.435,20.532Zm-.329,3.26a2.273,2.273,0,0,0-1.5,1.434c-.123.269.1.517.225.738.331.462.795,1,1.431.893a2.868,2.868,0,0,0,1.769-1.6A1.6,1.6,0,0,0,9.106,23.792Z" style="fill:#8d2701"/>'
|
||
},
|
||
"Lua": {
|
||
colour: "#050080",
|
||
icon: '<path d="M16.5,30l-.011-.321c.4-.014.8-.045,1.19-.094l.039.319C17.312,29.952,16.9,29.984,16.5,30Zm-1.222-.011c-.4-.021-.814-.061-1.216-.118l.045-.318c.393.055.793.094,1.188.115ZM18.92,29.7l-.067-.314c.387-.083.776-.184,1.155-.3l.094.307C19.714,29.511,19.316,29.615,18.92,29.7Zm-6.063-.053c-.4-.091-.791-.2-1.177-.326l.1-.306c.377.122.764.23,1.15.319Zm8.4-.665-.121-.3c.364-.148.728-.314,1.08-.493l.006,0,.145.286,0,0C22,28.661,21.626,28.831,21.253,28.982Zm-10.718-.088c-.374-.158-.745-.335-1.1-.524l.15-.284c.35.186.713.358,1.078.512Zm12.893-1.021-.17-.273c.337-.21.668-.437.984-.675l.193.257C24.111,27.425,23.772,27.658,23.428,27.873ZM8.379,27.751c-.341-.22-.676-.459-1-.708l.2-.253c.312.243.64.476.972.691Zm17-1.346-.215-.239c.294-.265.58-.546.851-.836l.235.219C25.972,25.846,25.679,26.134,25.378,26.4ZM6.454,26.252c-.3-.276-.585-.569-.856-.87l.239-.215c.265.294.547.58.836.85ZM27.041,24.62l-.253-.2c.244-.312.476-.639.692-.972l.27.175C27.529,23.966,27.29,24.3,27.041,24.62ZM4.82,24.439c-.244-.324-.476-.662-.692-1.007l.272-.17c.21.337.438.668.676.984Zm23.547-1.867-.284-.151c.186-.35.358-.713.513-1.078l.3.125C28.735,21.843,28.558,22.214,28.368,22.572Zm-24.841-.2-.006-.012c-.183-.359-.352-.728-.5-1.1l.3-.121c.147.362.312.724.491,1.074l.006.012ZM29.32,20.325l-.306-.1c.122-.377.23-.764.319-1.15l.313.072C29.555,19.543,29.446,19.939,29.32,20.325ZM2.608,20.107c-.12-.388-.223-.786-.308-1.182l.314-.067c.083.387.184.776.3,1.155ZM29.87,17.946l-.318-.045c.056-.393.094-.793.115-1.188l.321.017C29.967,17.135,29.927,17.544,29.87,17.946ZM2.1,17.72c-.05-.4-.082-.812-.1-1.218l.321-.011c.014.4.046.8.094,1.19Zm27.582-2.2c-.014-.4-.045-.8-.093-1.19l.319-.039c.049.4.082.813.1,1.218ZM2.331,15.3,2.01,15.28c.021-.405.061-.814.117-1.216l.318.045C2.39,14.5,2.352,14.9,2.331,15.3Zm27.057-2.144c-.083-.387-.184-.776-.3-1.155L29.4,11.9c.119.388.223.786.307,1.183ZM2.663,12.934l-.313-.072c.091-.4.2-.791.326-1.177l.306.1C2.859,12.161,2.752,12.548,2.663,12.934Zm26.026-2.062c-.149-.366-.315-.732-.5-1.086l.286-.146c.185.363.355.736.507,1.111ZM3.4,10.665l-.3-.125c.158-.374.334-.745.524-1.1l.284.15C3.724,9.937,3.552,10.3,3.4,10.665ZM4.513,8.557l-.27-.174c.22-.341.458-.676.707-1l.254.2C4.961,7.9,4.728,8.224,4.513,8.557ZM5.977,6.676l-.235-.219c.276-.3.569-.585.87-.857l.215.239C6.533,6.1,6.247,6.386,5.977,6.676Zm1.77-1.6-.193-.257c.323-.244.662-.477,1.007-.692l.17.272C8.394,4.614,8.063,4.841,7.747,5.079Zm15.705-.558-.018-.012.175-.27.018.011Zm-1.047-.616c-.35-.186-.713-.358-1.078-.512l.125-.3c.374.158.745.334,1.1.524ZM9.769,3.815l-.146-.286.018-.009c.356-.181.724-.349,1.093-.5l.121.3c-.361.147-.72.311-1.068.488Zm10.44-.838c-.377-.122-.764-.229-1.151-.317l.072-.313c.4.091.792.2,1.178.325Zm-8.229-.06-.094-.307c.388-.119.786-.223,1.182-.308l.067.314C12.747,2.7,12.359,2.8,11.98,2.917Zm5.9-.473c-.393-.055-.793-.092-1.188-.113l.016-.321c.405.021.814.059,1.216.115Zm-3.572-.026-.04-.319c.4-.05.812-.083,1.218-.1l.012.321C15.106,2.337,14.705,2.369,14.312,2.418Z" style="fill:gray"/><circle cx="16" cy="15.998" r="10.708" style="fill:navy"/><circle cx="20.435" cy="11.562" r="3.136" style="fill:#fff"/><circle cx="26.708" cy="5.29" r="3.137" style="fill:navy"/><path d="M13.1,21.352v-.79H9.629V14.326h-.9v7.026H13.1" style="fill:#fff"/><path d="M17.916,21.352V16.3h-.8v2.785c0,1.031-.54,1.706-1.378,1.706A.95.95,0,0,1,14.7,19.8V16.3h-.8v3.817c0,.838.626,1.378,1.609,1.378a1.863,1.863,0,0,0,1.687-.925v.781h.723" style="fill:#fff"/><path d="M23.791,21.333v-.607a.664.664,0,0,1-.173.019c-.279,0-.434-.145-.434-.4V17.536c0-.9-.655-1.378-1.9-1.378-1.224,0-1.976.472-2.024,1.638h.81c.067-.617.434-.9,1.185-.9.723,0,1.128.27,1.128.752v.212c0,.337-.2.482-.838.559a5.763,5.763,0,0,0-1.619.308,1.327,1.327,0,0,0-.887,1.311c0,.916.636,1.455,1.658,1.455a2.363,2.363,0,0,0,1.715-.742.855.855,0,0,0,.829.665,1.967,1.967,0,0,0,.549-.087m-1.407-1.725a1.366,1.366,0,0,1-1.513,1.185c-.626,0-.993-.222-.993-.771,0-.53.357-.761,1.214-.887a4,4,0,0,0,1.291-.279v.752" style="fill:#fff"/>',
|
||
inlineComment: [
|
||
"--"
|
||
]
|
||
},
|
||
"Markdown": {
|
||
colour: "#755838",
|
||
icon: '<rect x="2.5" y="7.955" width="27" height="16.091" style="fill:none;stroke:#755838"/><polygon points="5.909 20.636 5.909 11.364 8.636 11.364 11.364 14.773 14.091 11.364 16.818 11.364 16.818 20.636 14.091 20.636 14.091 15.318 11.364 18.727 8.636 15.318 8.636 20.636 5.909 20.636" style="fill:#755838"/><polygon points="22.955 20.636 18.864 16.136 21.591 16.136 21.591 11.364 24.318 11.364 24.318 16.136 27.045 16.136 22.955 20.636" style="fill:#755838"/>'
|
||
},
|
||
"MATLAB": {
|
||
colour: "#ef6c3e",
|
||
icon: '<defs><linearGradient id="a" x1="16.803" y1="16.631" x2="15.013" y2="22.411" gradientTransform="matrix(1, 0, 0, -1, 0, 32)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#512"/><stop offset="0.23" stop-color="#523"/><stop offset="0.36" stop-color="#534"/><stop offset="0.51" stop-color="#645"/><stop offset="0.66" stop-color="#568"/><stop offset="0.84" stop-color="#29d"/></linearGradient><linearGradient id="b" x1="29.71" y1="18.983" x2="11.71" y2="14.563" gradientUnits="userSpaceOnUse"><stop offset="0.081" stop-color="#c33"/><stop offset="0.189" stop-color="#de5239"/><stop offset="0.313" stop-color="#f06e3e"/><stop offset="0.421" stop-color="#fa8042"/><stop offset="0.5" stop-color="#fe8643"/><stop offset="0.58" stop-color="#fa7f42"/><stop offset="0.696" stop-color="#ef6c3e"/><stop offset="0.833" stop-color="#dc4c37"/><stop offset="0.916" stop-color="#cf3633"/></linearGradient></defs><title>file_type_matlab</title><path d="M2,17.55l7.97-3.22a20.7,20.7,0,0,1,2.72-2.95c.66-.35,1.9-.16,4.17-2.98,2.2-2.75,2.9-5.1,3.93-5.1,1.63,0,2.83,3.52,4.65,8.85A115.629,115.629,0,0,0,30,24.12c-1.9-1.77-3.52-3.68-5.37-3.63-1.72.04-3.63,2.08-5.72,4.7-1.66,2.1-3.86,3.54-4.72,3.51,0,0-2.22-6.28-4.08-7.3a2.641,2.641,0,0,0-2.39.2L2,17.54Z" style="fill:#49d"/><path d="M19.8,4.02c-.67.9-1.48,2.55-2.94,4.38-2.27,2.82-3.5,2.63-4.17,2.98a19.674,19.674,0,0,0-2.72,2.95l3.3,2.41c2.8-3.82,4.3-7.96,5.47-10.64A13.579,13.579,0,0,1,19.8,4.02Z" style="fill:url(#a)"/><path d="M20.8,3.3c-2.18,0-3.67,11.48-11.72,17.89,2.26-.37,4.22,5.24,5.12,7.51,4-.68,7.2-8.33,10.43-8.21,1.85.07,3.47,1.86,5.37,3.63C25.66,15,23.63,3.3,20.8,3.3Z" style="fill:url(#b)"/>',
|
||
inlineComment: [
|
||
"%"
|
||
]
|
||
},
|
||
"MAXScript": {
|
||
colour: "#00696b",
|
||
icon: '<path d="M14.4,7.568,20.212,2H7.273L4.848,7.536l9.557.032ZM4.848,7.536l6.844,2.6L14.4,7.568m-.013,3.622-2.7-1.053L5.263,16.1l6.286,5.823,2.808-1.1L14.4,7.568m0,0,12.8,8.376L20.212,2M27.2,15.944,14.391,11.19m-.035,9.636-.032,3.685M20.228,30l-8.679-8.073L4.8,24.464,7.257,30Zm0,0L27.2,15.944,14.325,24.512M27.2,15.944,14.357,20.826" style="fill:none;stroke:#1d1d1b;stroke-miterlimit:22.92558479309082;stroke-width:0.028349999338388443px"/><polygon points="14.391 11.19 27.2 15.944 14.405 7.568 14.391 11.19 14.391 11.19" style="fill:#181b17;fill-rule:evenodd"/><polygon points="27.2 15.944 14.357 20.826 14.325 24.509 14.326 24.511 27.2 15.944 27.2 15.944" style="fill:#1a1d1a;fill-rule:evenodd"/><polygon points="14.405 7.568 27.2 15.944 20.212 2 14.405 7.568 14.405 7.568" style="fill:#005f5e;fill-rule:evenodd"/><polygon points="27.2 15.944 14.326 24.511 20.228 30 27.2 15.944 27.2 15.944" style="fill:#004242;fill-rule:evenodd"/><polygon points="14.357 20.826 27.2 15.944 14.391 11.19 14.357 20.826 14.357 20.826" style="fill:#005152;fill-rule:evenodd"/><polygon points="14.357 20.826 14.391 11.19 11.692 10.137 5.263 16.104 11.549 21.927 14.357 20.826 14.357 20.826" style="fill:#00696b;fill-rule:evenodd"/><polygon points="11.692 10.137 14.391 11.19 14.405 7.568 11.692 10.137 11.692 10.137" style="fill:#1b2725;fill-rule:evenodd"/><polygon points="14.357 20.826 11.549 21.927 14.325 24.509 14.357 20.826 14.357 20.826" style="fill:#1c2624;fill-rule:evenodd"/><polygon points="14.325 24.512 4.8 24.464 7.257 30 20.228 30 14.326 24.511 14.325 24.512 14.325 24.512" style="fill:#006466;fill-rule:evenodd"/><polygon points="4.848 7.536 14.405 7.568 20.212 2 7.273 2 4.848 7.536 4.848 7.536" style="fill:#00767a;fill-rule:evenodd"/><polygon points="14.405 7.568 4.848 7.536 11.692 10.137 14.405 7.568 14.405 7.568" style="fill:#1e3938;fill-rule:evenodd"/><polygon points="11.549 21.927 4.8 24.464 14.325 24.512 14.325 24.509 11.549 21.927 11.549 21.927" style="fill:#20302e;fill-rule:evenodd"/>'
|
||
},
|
||
"MEL": {
|
||
colour: "#06a0a2",
|
||
icon: '<defs><linearGradient id="a" x1="-611.348" y1="-67.488" x2="-600.272" y2="-65.335" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0f6067"/><stop offset="0.5" stop-color="#05abac"/><stop offset="1" stop-color="#58bec4"/></linearGradient><linearGradient id="b" x1="-603.594" y1="-77.699" x2="-602.011" y2="-59.604" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#117c83"/><stop offset="0.5" stop-color="#21b5b5"/><stop offset="1" stop-color="#7ed4d4"/></linearGradient><linearGradient id="c" x1="-612.757" y1="-59.906" x2="-616.934" y2="-72.76" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#9accd3"/><stop offset="0.5" stop-color="#72aeb3"/><stop offset="1" stop-color="#317d7f"/></linearGradient><linearGradient id="d" x1="-621.851" y1="-74.579" x2="-614.84" y2="-72.301" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#21626e"/><stop offset="0.5" stop-color="#157c84"/><stop offset="1" stop-color="#03a3a5"/></linearGradient><linearGradient id="e" x1="-616.369" y1="-64.469" x2="-625.34" y2="-72.835" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0b7c81"/><stop offset="0.5" stop-color="#068d90"/><stop offset="1" stop-color="#16b1b1"/></linearGradient><linearGradient id="f" x1="-608.072" y1="-74.678" x2="-603.488" y2="-70.966" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0a8a8f"/><stop offset="0.5" stop-color="#0f7c82"/><stop offset="1" stop-color="#1a5964"/></linearGradient><linearGradient id="g" x1="-601.134" y1="-70.113" x2="-606.008" y2="-67.067" gradientTransform="matrix(1.437, 0, 0, -1.437, 894.417, -82.292)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#256a77"/><stop offset="0.5" stop-color="#0d9499"/><stop offset="1" stop-color="#06a0a2"/></linearGradient></defs><title>file_type_maya</title><path d="M21.6,3.462H30L18.767,24.211s-1.893-5.5-2.706-7.459" style="fill:url(#a)"/><path d="M23.669,29.118H30V3.462C29.995,16.869,24.36,29.118,23.669,29.118Z" style="fill:url(#b)"/><path d="M18.767,24.211H13.541L2,3.462c2.047-.26,6.135-.611,8.16-.776Z" style="fill:url(#c)"/><path d="M8.693,16.019C6.96,22.866,1.995,29.32,2,29.314c5.752,0,6.991-.835,6.991-1.276V16.54C8.89,16.37,8.794,16.194,8.693,16.019Z" style="fill:url(#d)"/><path d="M2,3.462V29.314c3.147-5.2,4.981-8.6,6.6-13.45C4.6,8.794,2,3.462,2,3.462Z" style="fill:url(#e)"/><polyline points="23.233 28.102 23.669 29.118 23.669 15.647 23.233 16.375" style="fill:url(#f)"/><path d="M23.647,15.673v13.4l.016.043c.452,0,6.332-14.5,6.332-25.656C29.995,3.462,26.406,10.947,23.647,15.673Z" style="fill:url(#g)"/>'
|
||
},
|
||
"MongoDB": {
|
||
colour: "#41a247",
|
||
icon: '<defs><linearGradient id="a" x1="-645.732" y1="839.188" x2="-654.59" y2="839.25" gradientTransform="matrix(-0.977, -0.323, -0.29, 0.877, -375.944, -928.287)" gradientUnits="userSpaceOnUse"><stop offset="0.231" stop-color="#999875"/><stop offset="0.563" stop-color="#9b9977"/><stop offset="0.683" stop-color="#a09f7e"/><stop offset="0.768" stop-color="#a9a889"/><stop offset="0.837" stop-color="#b7b69a"/><stop offset="0.896" stop-color="#c9c7b0"/><stop offset="0.948" stop-color="#deddcb"/><stop offset="0.994" stop-color="#f8f6eb"/><stop offset="1" stop-color="#fbf9ef"/></linearGradient><linearGradient id="b" x1="-644.287" y1="823.405" x2="-657.028" y2="845.476" gradientTransform="matrix(-0.977, -0.323, -0.29, 0.877, -375.944, -928.287)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#48a547"/><stop offset="1" stop-color="#3f9143"/></linearGradient><linearGradient id="c" x1="-643.386" y1="839.485" x2="-652.418" y2="833.417" gradientTransform="matrix(-0.977, -0.323, -0.29, 0.877, -375.944, -928.287)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#41a247"/><stop offset="0.352" stop-color="#4ba74b"/><stop offset="0.956" stop-color="#67b554"/><stop offset="1" stop-color="#69b655"/></linearGradient></defs><title>file_type_mongo</title><path d="M16.62,30l-.751-.249s.1-3.8-1.275-4.067c-.9-1.048.133-44.741,3.423-.149a2.712,2.712,0,0,0-1.333,1.523A14.1,14.1,0,0,0,16.62,30Z" style="fill:url(#a)"/><path d="M17.026,26.329a13.223,13.223,0,0,0,5-13.225C20.556,6.619,17.075,4.487,16.7,3.673a9.792,9.792,0,0,1-.825-1.6l.277,18.069S15.578,25.664,17.026,26.329Z" style="fill:url(#b)"/><path d="M15.487,26.569S9.366,22.4,9.72,15.025A15.54,15.54,0,0,1,15.239,3.377,1.725,1.725,0,0,0,15.846,2c.381.82.319,12.243.359,13.579C16.36,20.776,15.916,25.588,15.487,26.569Z" style="fill:url(#c)"/>'
|
||
},
|
||
"nginx": {
|
||
colour: "#019639",
|
||
icon: '<path d="M15.948,2h.065a10.418,10.418,0,0,1,.972.528Q22.414,5.65,27.843,8.774a.792.792,0,0,1,.414.788c-.008,4.389,0,8.777-.005,13.164a.813.813,0,0,1-.356.507q-5.773,3.324-11.547,6.644a.587.587,0,0,1-.657.037Q9.912,26.6,4.143,23.274a.7.7,0,0,1-.4-.666q0-6.582,0-13.163a.693.693,0,0,1,.387-.67Q9.552,5.657,14.974,2.535c.322-.184.638-.379.974-.535" style="fill:#019639"/><path d="M8.767,10.538q0,5.429,0,10.859a1.509,1.509,0,0,0,.427,1.087,1.647,1.647,0,0,0,2.06.206,1.564,1.564,0,0,0,.685-1.293c0-2.62-.005-5.24,0-7.86q3.583,4.29,7.181,8.568a2.833,2.833,0,0,0,2.6.782,1.561,1.561,0,0,0,1.251-1.371q.008-5.541,0-11.081a1.582,1.582,0,0,0-3.152,0c0,2.662-.016,5.321,0,7.982-2.346-2.766-4.663-5.556-7-8.332A2.817,2.817,0,0,0,10.17,9.033,1.579,1.579,0,0,0,8.767,10.538Z" style="fill:#fff"/>'
|
||
},
|
||
"Nim": {
|
||
colour: "#ffe953",
|
||
icon: '<path d="M16.111,6.405s-1.073.847-2.167,1.69a15.361,15.361,0,0,0-4.527.651c-1.1-.7-2.07-1.469-2.07-1.469S6.52,8.7,6,9.535a11.382,11.382,0,0,0-2.236,1.482C2.961,10.7,2.03,10.31,2,10.3c1.063,2.145,1.778,4.292,3.722,5.583,3.1-4.889,17.48-4.439,20.639-.028C28.4,14.787,29.2,12.5,30,10.38c-.088.029-1.181.395-1.889.665a11.489,11.489,0,0,0-1.986-1.51c-.537-.984-1.319-2.313-1.319-2.313s-.927.689-2,1.44a21.265,21.265,0,0,0-4.681-.512c-1-.826-2.014-1.746-2.014-1.746Z" style="fill:#f3d400"/><path d="M3.1,14.854l2.554,6.185c4.435,5.85,15.759,6.257,20.7.113,1.168-2.633,2.745-6.333,2.745-6.333a13.379,13.379,0,0,1-4.6,3.869,12.217,12.217,0,0,1-2.983.793l-5.465-2.832-5.5,2.775a15.679,15.679,0,0,1-2.983-.764A14.076,14.076,0,0,1,3.1,14.854Z" style="fill:#ffe953"/>',
|
||
inlineComment: [
|
||
"#"
|
||
]
|
||
},
|
||
"Nix": {
|
||
colour: "#5277c3",
|
||
icon: '<path d="M13,11.115,6.183,23.76,4.59,20.87l1.839-3.387-3.651-.01L2,16.029l.8-1.477,5.2.018,1.868-3.447Z" style="fill:#7ebae4;fill-rule:evenodd"/><path d="M13.527,21.223h13.64l-1.541,2.922-3.658-.011,1.817,3.389-.779,1.449-1.593,0-2.584-4.825-3.722-.008Z" style="fill:#7ebae4;fill-rule:evenodd"/><path d="M21.467,15.682,14.647,3.037l3.134-.032L19.6,6.4l1.834-3.379h1.557L23.786,4.5,21.174,9.307l1.854,3.455Z" style="fill:#7ebae4;fill-rule:evenodd"/><path d="M10.542,16.324l6.821,12.645L14.229,29l-1.821-3.4-1.834,3.38H9.016l-.8-1.476L10.831,22.7,8.976,19.243Z" style="fill:#5277c3;fill-rule:evenodd"/><path d="M18.464,10.751H4.823L6.365,7.829l3.658.011L8.207,4.451,8.986,3l1.592,0,2.584,4.825,3.722.008Z" style="fill:#5277c3;fill-rule:evenodd"/><path d="M19,20.888,25.817,8.244l1.593,2.89L25.571,14.52l3.651.01L30,15.979l-.8,1.477-5.2-.018-1.868,3.447Z" style="fill:#5277c3;fill-rule:evenodd"/>'
|
||
},
|
||
"NSIS": {
|
||
colour: "#a42d26",
|
||
icon: '<path d="M27.435,16.037,22.012,21.46l5.423,5.423" style="fill:#00577b"/><path d="M26.884,15.5H16.048l5.423,5.423" style="fill:#0079aa"/><path d="M26.884,14.712,21.461,9.289l-5.423,5.423" style="fill:#0096d3"/><path d="M20.528,9.131H9.683l5.423,5.423M27.435,3.325,22.012,8.748l5.423,5.423" style="fill:#01b0f0"/><path d="M20.528,8.356,15.105,2.933,9.683,8.356" style="fill:#27bcf3"/><path d="M14.172,2.775H3.327L8.749,8.2" style="fill:#4fc9f5"/><path d="M4.568,15.963,9.991,10.54,4.568,5.117" style="fill:#79201b"/><path d="M10.541,11.091,5.119,16.513H15.964" style="fill:#a42d26"/><path d="M5.119,17.288l5.423,5.423,5.423-5.423" style="fill:#cc382f"/><path d="M4.568,17.829V28.675l5.423-5.423L8.4,21.665m13.916,1.2L16.9,17.447l-5.423,5.423" style="fill:#f0453f"/><path d="M11.475,23.644,16.9,29.067l5.423-5.423" style="fill:#f2625d"/><path d="M17.84,29.225H28.685L23.263,23.8" style="fill:#f47f7d"/><path d="M29.889,29.337l-1.68-1.68V2.392a.374.374,0,0,0-.243-.355A.263.263,0,0,0,27.827,2a.359.359,0,0,0-.271.112L21.471,8.2,15.385,2.112,15.3,2.037h-.037A.307.307,0,0,0,15.105,2H2.4a.434.434,0,0,0-.289.112A.38.38,0,0,0,2,2.392a.359.359,0,0,0,.112.271l1.68,1.68V29.617a.374.374,0,0,0,.243.355A.387.387,0,0,0,4.185,30a.359.359,0,0,0,.271-.112L10.541,23.8l6.085,6.085.084.075h.037A.254.254,0,0,0,16.9,30H29.609a.395.395,0,0,0,.28-.663ZM27.435,3.325V14.171L22.012,8.748l5.423-5.423ZM9.991,10.54,4.568,15.963V5.117L9.991,10.54ZM9.683,9.131H20.528l-5.423,5.423L9.683,9.131Zm.859,1.96,5.423,5.423H5.119l5.423-5.423ZM16.9,17.447l5.423,5.423H11.475L16.9,17.447ZM16.048,15.5H26.893l-5.423,5.423L16.048,15.5Zm5.964,5.964,5.423-5.423V26.883L22.012,21.46Zm4.872-6.748H16.048l5.423-5.423,5.413,5.423ZM20.528,8.356H9.683l5.423-5.423,5.423,5.423ZM3.327,2.775H14.172L8.749,8.2Zm1.241,25.9V17.829L8.4,21.665l1.587,1.587L4.568,28.675Zm.551-11.387H15.964l-5.423,5.423L5.119,17.288ZM16.9,29.067l-5.423-5.423H22.32L16.9,29.067Zm.943.159L23.263,23.8l5.423,5.423Z" style="fill:#464049"/>'
|
||
},
|
||
"Object Pascal": {
|
||
colour: "#FF6344",
|
||
icon: '<defs><linearGradient id="a" x1="16" y1="-0.443" x2="16" y2="22.042" gradientUnits="userSpaceOnUse"><stop offset="0.021" stop-color="#ff0c15"/><stop offset="1" stop-color="#9a0c0f"/></linearGradient></defs><title>file_type_delphi</title><circle cx="16" cy="16" r="14" style="fill:url(#a)"/><path d="M27.545,16.243H4.924a.914.914,0,0,0-1.092.82q.033.429.1.849a12.4,12.4,0,0,0,24.532,0q.075-.5.108-1.021C28.478,16.523,28.211,16.207,27.545,16.243Z" style="fill:#ff6443"/><polyline points="18.48 11.64 23.707 7.266 19.787 5.88 16 11.053" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="15.68 11.026 18.64 5.88 14.853 5.88 13.307 11.293" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="13.04 11.373 13.6 6.706 10.587 7.96 11.013 12.76" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="10.747 13 9.787 8.76 7.707 10.84 9.653 14.68" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.387 15.053 7.493 12.376 6.64 14.466 9.04 16.517" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.04 16.757 6.64 15.213 6.48 17.4 9.2 18.333" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.227 18.846 6.64 18.04 7.227 19.8 9.547 19.8" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.707 20.093 7.707 20.386 8.627 21.746 10.267 21" style="fill:#fae7e3;fill-rule:evenodd"/><path d="M20.023,13.089a6.61,6.61,0,0,0-4.53-2A6.293,6.293,0,0,0,11.3,22.07l4.941.129-2.08-4.16Z" style="fill:#eee;fill-rule:evenodd"/><path d="M16.5,22.366l-5.267-.138-.044-.039a6.453,6.453,0,0,1,4.3-11.264,6.787,6.787,0,0,1,4.643,2.05l.123.123-5.9,4.982Zm-5.14-.455,4.616.121L13.961,18l5.825-4.919a6.43,6.43,0,0,0-4.292-1.835,6.133,6.133,0,0,0-4.131,10.667Z" style="fill:#ee4b2e"/><path d="M12.013,20.493c-4.173-5.813,2.109-8.172,2.478-8.453.451-.344-7.59,1.785-3.226,8.88Z" style="fill:#f04e31;fill-rule:evenodd"/><polygon points="20.72 12.6 13.52 17.567 13.733 18.573 21.467 17.026 20.72 12.6" style="fill:#eee;fill-rule:evenodd"/><path d="M13.61,18.761,13.341,17.5l7.495-5.17.814,4.828Zm.089-1.123.158.747L21.283,16.9,20.6,12.874Z" style="fill:#ee4b2e"/><path d="M15.723,21.319c-3.93-.668-4.283.428-4.283.428L10.267,24.44s1.12-.907,5.493,0l.76-1.388Z" style="fill:#dd0c13;fill-rule:evenodd"/><path d="M14.122,21.6c-.02-.2-1.1-.319-1.677-.123-.732.249-1.219,1.142-1.045,1.213a1.975,1.975,0,0,1,1.125-.986C13.447,21.493,14.142,21.8,14.122,21.6Z" style="fill:#ff6e4f;fill-rule:evenodd"/><path d="M15.52,18.606a11.1,11.1,0,0,0,1.547,1.487,6.9,6.9,0,0,1,2.72,4.107c-.107,1.067-1.973,1.76-1.973,1.76l-3.307-7.194Z" style="fill:#eee;fill-rule:evenodd"/><path d="M17.73,26.161l-3.457-7.521,1.32-.208.057.081a10.869,10.869,0,0,0,1.512,1.451,7,7,0,0,1,2.782,4.207l0,.022,0,.022c-.115,1.153-2,1.864-2.077,1.894Zm-2.99-7.27,3.155,6.863c.414-.178,1.63-.763,1.73-1.548a6.793,6.793,0,0,0-2.648-3.981l-.01-.007a11.94,11.94,0,0,1-1.517-1.439Z" style="fill:#ee4b2e"/><path d="M28,12.742c.025.394.034.792.025,1.194a13.946,13.946,0,0,1-19.9,12.3A12.86,12.86,0,0,0,28,12.742Z" style="fill:#eae0df;fill-rule:evenodd;opacity:0.2"/><path d="M2.383,13.893A13.941,13.941,0,0,1,25.7,5.83s-5.009,5.979-10.584,7.907S2.383,13.893,2.383,13.893Z" style="fill:#eae0df;opacity:0.2"/><path d="M3.618,18.694c-.044-.392-.072-.79-.083-1.191C3.329,9.807,10.012,4.2,17.708,3.991a14.2,14.2,0,0,1,5.719,1.458,13.128,13.128,0,0,0-7.188-2.369c-7.1.19-13.306,5.3-13.116,12.4A12.873,12.873,0,0,0,3.618,18.694Z" style="fill:#eae0df;fill-rule:evenodd;opacity:0.2"/>'
|
||
},
|
||
"Objective-C": {
|
||
colour: "#c2c2c2",
|
||
icon: '<path d="M11.29,15.976a8.892,8.892,0,0,0,1.039,4.557,4.818,4.818,0,0,0,5.579,2.13,3.789,3.789,0,0,0,2.734-3.181c.095-.535.1-.54.1-.54,1.537.222,4.014.582,5.55.8l-.1.389A9.958,9.958,0,0,1,23.8,24.9a8.35,8.35,0,0,1-4.747,2.378,12.925,12.925,0,0,1-7.322-.725,8.98,8.98,0,0,1-5.106-5.524A14.353,14.353,0,0,1,6.642,10.9a9.323,9.323,0,0,1,7.929-6.24,11.812,11.812,0,0,1,5.9.491,8.467,8.467,0,0,1,5.456,6.1c.083.311.1.369.1.369-1.709.311-3.821.705-5.518,1.075C20.186,11,19.387,9.666,17.678,9.25a4.656,4.656,0,0,0-5.853,3.158,9.28,9.28,0,0,0-.341,1.273A10.89,10.89,0,0,0,11.29,15.976Z" style="fill:#c2c2c2"/><polygon points="2.033 30 2.033 2 7.967 2 7.967 4.227 4.723 4.227 4.723 27.773 7.967 27.773 7.967 30 2.033 30" style="fill:#c2c2c2"/><polygon points="29.967 29.999 24.033 29.999 24.033 27.771 27.277 27.771 27.277 4.226 24.033 4.226 24.033 1.999 29.967 1.999 29.967 29.999" style="fill:#c2c2c2"/>'
|
||
},
|
||
"OCaml": {
|
||
colour: "#f29104",
|
||
icon: '<defs><linearGradient id="a" x1="-745.623" y1="-92.76" x2="-745.623" y2="-85.108" gradientTransform="translate(758 113.28)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f29104"/><stop offset="1" stop-color="#ec6813"/></linearGradient><linearGradient id="b" x1="-741.99" y1="-109.477" x2="-741.99" y2="-85.099" xlink:href="#a"/><linearGradient id="c" x1="-752.111" y1="-93.918" x2="-752.111" y2="-85.284" xlink:href="#a"/></defs><title>file_type_ocaml</title><path d="M16.571,25.246a4.28,4.28,0,0,0-.039-.709c-.059-.2-.2-.217-.3-.374a3.507,3.507,0,0,1-.532-1.477c-.02-.453-.2-.886-.217-1.339-.02-.217.02-.453,0-.669a1.963,1.963,0,0,0-.039-.315,1.133,1.133,0,0,0-.039-.2l.059-.138a2.72,2.72,0,0,1,.65-.039c.256,0,.512.02.768.02a7.961,7.961,0,0,0,1.536-.059,3.722,3.722,0,0,0,1.949-.847,4.946,4.946,0,0,0,1.536-2.008c.177-.394.177-1.083.551-1.4.433-.374,1.181-.335,1.693-.571a1.187,1.187,0,0,1,.807-.138c.217.039.63.315.729-.059-.079-.039-.1-.138-.138-.177.414-.039,0-1-.158-1.2A2.225,2.225,0,0,0,24.25,13a3.509,3.509,0,0,0-1.536-.217c-.886.177-.827-.335-1.339-.335-.63,0-1.733.039-1.93.63a1.54,1.54,0,0,1-.335.512c-.138.177.02.354-.039.571-.079.217-.177.985-.276,1.26-.177.453-.394,1.024-.788,1.024a3.152,3.152,0,0,1-1.437-.079c-.276-.1-.729-.256-.945-.335-1.024-.433-1.2-.906-1.2-.906a3.026,3.026,0,0,1-.512-.866c-.118-.414-.315-.768-.394-1s-.3-.591-.453-.985a2.667,2.667,0,0,0-.709-1.063c-.315-.276-.61-.729-1.26-.591a1.641,1.641,0,0,0-.866.315c-.217.177-.3.571-.492.886-.118.177-.315.709-.512,1.162a1.929,1.929,0,0,1-.335.65c-.118.079-.256.2-.414.138a.924.924,0,0,1-.315-.2,5.334,5.334,0,0,1-.709-1.122,11.1,11.1,0,0,0-.788-1.241,1.016,1.016,0,0,0-.985-.551c-1.024,0-1.1.571-1.556,1.418a5.574,5.574,0,0,1-.669,1.4c-.236.256-.945,1.339-1.457,1.516H2v7.62c.039-.1.059-.2.1-.276.2-.414.65-.807.906-1.221a3.5,3.5,0,0,0,.374-.709,3.743,3.743,0,0,1,.236-.709.794.794,0,0,1,.571-.335c.354-.059.65.492,1.083.709.2.079,1.063.394,1.319.453.433.1.906.2,1.339.276.236.039.453.079.709.1a7.3,7.3,0,0,1,1.083.1,2.277,2.277,0,0,0-.807,1.221c-.158.433-.276.925-.473,1.339-.217.473-.669.669-.61,1.221a2.668,2.668,0,0,1,.02.689,4.009,4.009,0,0,1-.217.689c-.1.315-.217,1.359-.354,1.674l.906-.118h0A10.692,10.692,0,0,0,8.4,26.388a3.737,3.737,0,0,1,.729-1.28c.335-.374.315-.847.512-1.3a12.488,12.488,0,0,1,.768-1.3c.492-.807.807-1.812,1.851-2.028a3.3,3.3,0,0,1,1.024.709,4.452,4.452,0,0,1,.886,1.1,12.851,12.851,0,0,1,.886,2.678,1.227,1.227,0,0,0,.394.709,5.462,5.462,0,0,1,.433.729c.079.177.2.571.3.788a6.267,6.267,0,0,1,.315.827l.847-.02h.02v-.02A9.754,9.754,0,0,1,16.571,25.246Z" style="fill:#fff"/><path d="M16.217,27.235c-.1-.2-.217-.61-.3-.788a5.462,5.462,0,0,0-.433-.729,1.119,1.119,0,0,1-.394-.709,12.487,12.487,0,0,0-.886-2.678,4.452,4.452,0,0,0-.886-1.1,3.3,3.3,0,0,0-1.024-.709c-1.044.2-1.359,1.221-1.851,2.028a12.488,12.488,0,0,0-.768,1.3c-.2.433-.177.925-.512,1.3a3.443,3.443,0,0,0-.729,1.28c-.039.1-.118,1.083-.217,1.319h0l1.536-.1c1.437.1,1.024.65,3.249.532l3.525-.118h0A6.267,6.267,0,0,0,16.217,27.235Z" style="fill:url(#a)"/><path d="M26.456,3.8H5.544A3.521,3.521,0,0,0,2.02,7.328v7.679h0c.512-.177,1.221-1.26,1.457-1.516a5.913,5.913,0,0,0,.669-1.4c.453-.827.532-1.418,1.556-1.418a1.016,1.016,0,0,1,.985.551,9.547,9.547,0,0,1,.788,1.241,4.849,4.849,0,0,0,.709,1.122,2,2,0,0,0,.315.2c.158.059.3-.059.414-.138A1.929,1.929,0,0,0,9.246,13c.2-.453.394-.965.512-1.162.2-.315.276-.709.492-.886a1.59,1.59,0,0,1,.866-.315c.65-.138.945.315,1.26.591a3.285,3.285,0,0,1,.709,1.063c.158.394.354.768.453.985a8.946,8.946,0,0,1,.394,1,3.713,3.713,0,0,0,.512.866s.177.473,1.2.906a8.749,8.749,0,0,0,.945.335,3.152,3.152,0,0,0,1.437.079c.394,0,.61-.571.788-1.024.1-.276.217-1.044.276-1.26s-.1-.374.039-.571c.158-.217.256-.236.335-.512.2-.61,1.3-.63,1.93-.63.532,0,.453.512,1.339.335a3.243,3.243,0,0,1,1.536.217,2.225,2.225,0,0,1,1.142.551c.158.2.571,1.162.158,1.2.039.039.079.138.138.177-.1.374-.492.1-.729.059a1.187,1.187,0,0,0-.807.138c-.512.217-1.241.2-1.693.571-.374.315-.374,1-.551,1.4a5.167,5.167,0,0,1-1.536,2.008,3.9,3.9,0,0,1-1.949.847,7.961,7.961,0,0,1-1.536.059c-.256-.02-.512-.02-.768-.02-.158,0-.669-.02-.65.039l-.059.138a.7.7,0,0,0,.039.2c.02.118.02.217.039.315,0,.217-.02.453,0,.669.02.453.2.866.217,1.339a3.26,3.26,0,0,0,.532,1.477c.1.158.236.177.3.374a4.163,4.163,0,0,1,.039.709,9.685,9.685,0,0,0,.827,2.757v.02h0c.512-.079,1.044-.276,1.713-.374,1.241-.177,2.954-.1,4.056-.2,2.8-.256,4.312,1.142,6.813.571V7.328A3.551,3.551,0,0,0,26.456,3.8ZM16.02,20.343Z" style="fill:url(#b)"/><path d="M8.478,23.573c.2-.433.315-.906.473-1.339a2.277,2.277,0,0,1,.807-1.221,7.3,7.3,0,0,0-1.083-.1c-.236-.02-.473-.059-.709-.1-.433-.079-.925-.177-1.339-.276-.256-.059-1.142-.374-1.319-.453-.453-.2-.748-.768-1.083-.709a.794.794,0,0,0-.571.335,3.743,3.743,0,0,0-.236.709c-.1.236-.256.473-.374.709a12.289,12.289,0,0,0-.925,1.2c-.039.1-.059.2-.1.3v4.745a5.4,5.4,0,0,1,.729.158,8.77,8.77,0,0,0,4.371.354l.177-.02h0c.138-.315.256-1.359.354-1.674a5.494,5.494,0,0,0,.217-.689,2.668,2.668,0,0,0-.02-.689C7.809,24.242,8.262,24.045,8.478,23.573Z" style="fill:url(#c)"/>'
|
||
},
|
||
"Octave": {
|
||
colour: "#77cce1",
|
||
icon: '<defs id="defs2874"> <radialGradient cx="182.9837" cy="395.04871" r="148.95309" fx="182.9837" fy="395.04871" id="radialGradient3033" xlink:href="#linearGradient3755" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.22914334,-0.24901479,0.7643572,0.83064268,-272.85337,-159.69482)" /> <linearGradient id="linearGradient3755"> <stop id="stop3757" style="stop-color:#008cbe;stop-opacity:1" offset="0" /> <stop id="stop3759" style="stop-color:#b2ffff;stop-opacity:1" offset="1" /> </linearGradient> </defs> <g id="layer1" transform="scale(0.11296) translate(-233.35544,-390.71802)"> <g transform="matrix(8.4519723,0,0,8.4519723,-278.45012,-403.82975)" id="g3025"> <path d="m 66.432103,97.488679 c -5.19584,5.646431 -3.93661,16.169031 2.81107,23.501871 6.74768,7.33285 16.42898,8.69955 21.62483,3.05312 5.19585,-5.64643 3.9402,-16.16946 -2.80749,-23.5023 -6.74768,-7.332861 -16.43256,-8.699131 -21.62841,-3.052691 z m 4.71149,2.34553 c 4.08256,-4.43659 11.589,-3.47152 16.76741,2.155961 5.17842,5.6275 6.06647,13.78491 1.98391,18.2215 -4.08256,4.43658 -11.59097,3.47369 -16.76939,-2.15381 -5.17842,-5.6275 -6.06449,-13.78704 -1.98193,-18.223651 z" id="path5874" style="fill:url(#radialGradient3033);fill-opacity:1;stroke:none" /> <rect width="4.349854" height="4.349854" rx="0.76958966" ry="0.76958966" x="85.381561" y="99.493881" id="rect5876" style="fill:#ff7f2a;fill-opacity:1;fill-rule:nonzero;stroke:#d45500;stroke-width:0.74403799;stroke-miterlimit:4;stroke-dasharray:none" /> <rect width="10.245436" height="10.245436" rx="1.8126545" ry="1.8126545" x="60.92659" y="105.2245" id="rect5878" style="fill:#ff7f2a;fill-opacity:1;fill-rule:nonzero;stroke:#d45500;stroke-width:0.74403799;stroke-miterlimit:4;stroke-dasharray:none" /> <rect width="6.1897531" height="6.1897531" rx="1.0951102" ry="1.0951102" x="87.404739" y="118.63705" id="rect5880" style="fill:#ff7f2a;fill-opacity:1;fill-rule:nonzero;stroke:#d45500;stroke-width:0.74403799;stroke-miterlimit:4;stroke-dasharray:none" /> </g> </g>'
|
||
},
|
||
"OpenCL": {
|
||
colour: "#FF1C1A",
|
||
icon: '<defs><linearGradient id="a" x1="29.662" y1="18.026" x2="21.419" y2="20.234" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="red"/><stop offset="1" stop-color="#ff6a6a"/></linearGradient><linearGradient id="b" x1="24.588" y1="9.748" x2="18.776" y2="15.56" xlink:href="#a"/><linearGradient id="c" x1="18.466" y1="6.619" x2="15.924" y2="13.603" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#cfa40c"/><stop offset="1" stop-color="#edd480"/></linearGradient><linearGradient id="d" x1="13.17" y1="6.51" x2="13.17" y2="12.997" xlink:href="#c"/><linearGradient id="e" x1="8.808" y1="8.486" x2="10.988" y2="13.161" xlink:href="#c"/><linearGradient id="f" x1="5.505" y1="11.477" x2="8.546" y2="14.519" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#11a119"/><stop offset="1" stop-color="#37ae3d"/></linearGradient><linearGradient id="g" x1="3.639" y1="14.285" x2="6.883" y2="16.158" xlink:href="#f"/><linearGradient id="h" x1="2.265" y1="17.799" x2="5.379" y2="18.933" xlink:href="#f"/><linearGradient id="i" x1="2" y1="21.614" x2="4.833" y2="21.614" xlink:href="#f"/><linearGradient id="j" x1="20.662" y1="18.949" x2="18.026" y2="17.428" gradientUnits="userSpaceOnUse"><stop offset="0.5" stop-color="#646464"/><stop offset="1" stop-color="#cbcbcb"/></linearGradient><linearGradient id="k" x1="16.021" y1="25.264" x2="16.021" y2="22.691" xlink:href="#j"/></defs><title>file_type_opencl</title><path d="M27.828,13.574a14.676,14.676,0,0,1,.835,1.542A14.964,14.964,0,0,1,29.92,22.9H22.133a10.377,10.377,0,0,0-.967-4.424Z" style="fill:url(#a)"/><path d="M17.753,14.43a10.074,10.074,0,0,1,2.772,2.878l6.273-5.2a15.54,15.54,0,0,0-4.988-4.15Z" style="fill:url(#b)"/><path d="M14.781,13.086a8.827,8.827,0,0,1,2.376.966L20.666,7.43a12.7,12.7,0,0,0-4.645-.952Z" style="fill:url(#c)"/><path d="M14.364,13l.612-6.488a12.46,12.46,0,0,0-3.611.813l.507,5.638A7.219,7.219,0,0,1,14.364,13" style="fill:url(#d)"/><path d="M10.948,13.179l-.683-5.373A14.588,14.588,0,0,0,7.773,9.379l1.74,4.42a7.518,7.518,0,0,1,1.435-.619" style="fill:url(#e)"/><path d="M8.86,14.206,6.474,10.511c-.453.44-.79.82-1.006,1.074q-.227.267-.436.538L7.48,15.387a8.87,8.87,0,0,1,1.38-1.182" style="fill:url(#f)"/><path d="M7.046,15.875,4.335,13.112a14.259,14.259,0,0,0-1.25,2.429l3.007,1.71a9.826,9.826,0,0,1,.954-1.376" style="fill:url(#g)"/><path d="M5.527,18.393l-2.77-1.945a15.452,15.452,0,0,0-.63,2.83l2.906.607a10.343,10.343,0,0,1,.494-1.492" style="fill:url(#h)"/><path d="M4.833,20.9a10.684,10.684,0,0,0-.1,2H2.093a14.333,14.333,0,0,1-.064-2.573Z" style="fill:url(#i)"/><path d="M22.551,12.478,14.751,23.1A1.544,1.544,0,0,1,17.5,24.428Z" style="fill:url(#j)"/><path d="M16.021,25.522a1.544,1.544,0,1,1,1.092-.452A1.533,1.533,0,0,1,16.021,25.522Z" style="fill:#646464"/><path d="M17.308,23.978a1.287,1.287,0,1,1-.377-.91A1.283,1.283,0,0,1,17.308,23.978Z" style="fill:url(#k)"/>'
|
||
},
|
||
"Pascal": {
|
||
colour: "#FF6344",
|
||
icon: '<defs><linearGradient id="a" x1="16" y1="-0.443" x2="16" y2="22.042" gradientUnits="userSpaceOnUse"><stop offset="0.021" stop-color="#ff0c15"/><stop offset="1" stop-color="#9a0c0f"/></linearGradient></defs><title>file_type_delphi</title><circle cx="16" cy="16" r="14" style="fill:url(#a)"/><path d="M27.545,16.243H4.924a.914.914,0,0,0-1.092.82q.033.429.1.849a12.4,12.4,0,0,0,24.532,0q.075-.5.108-1.021C28.478,16.523,28.211,16.207,27.545,16.243Z" style="fill:#ff6443"/><polyline points="18.48 11.64 23.707 7.266 19.787 5.88 16 11.053" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="15.68 11.026 18.64 5.88 14.853 5.88 13.307 11.293" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="13.04 11.373 13.6 6.706 10.587 7.96 11.013 12.76" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="10.747 13 9.787 8.76 7.707 10.84 9.653 14.68" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.387 15.053 7.493 12.376 6.64 14.466 9.04 16.517" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.04 16.757 6.64 15.213 6.48 17.4 9.2 18.333" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.227 18.846 6.64 18.04 7.227 19.8 9.547 19.8" style="fill:#fae7e3;fill-rule:evenodd"/><polyline points="9.707 20.093 7.707 20.386 8.627 21.746 10.267 21" style="fill:#fae7e3;fill-rule:evenodd"/><path d="M20.023,13.089a6.61,6.61,0,0,0-4.53-2A6.293,6.293,0,0,0,11.3,22.07l4.941.129-2.08-4.16Z" style="fill:#eee;fill-rule:evenodd"/><path d="M16.5,22.366l-5.267-.138-.044-.039a6.453,6.453,0,0,1,4.3-11.264,6.787,6.787,0,0,1,4.643,2.05l.123.123-5.9,4.982Zm-5.14-.455,4.616.121L13.961,18l5.825-4.919a6.43,6.43,0,0,0-4.292-1.835,6.133,6.133,0,0,0-4.131,10.667Z" style="fill:#ee4b2e"/><path d="M12.013,20.493c-4.173-5.813,2.109-8.172,2.478-8.453.451-.344-7.59,1.785-3.226,8.88Z" style="fill:#f04e31;fill-rule:evenodd"/><polygon points="20.72 12.6 13.52 17.567 13.733 18.573 21.467 17.026 20.72 12.6" style="fill:#eee;fill-rule:evenodd"/><path d="M13.61,18.761,13.341,17.5l7.495-5.17.814,4.828Zm.089-1.123.158.747L21.283,16.9,20.6,12.874Z" style="fill:#ee4b2e"/><path d="M15.723,21.319c-3.93-.668-4.283.428-4.283.428L10.267,24.44s1.12-.907,5.493,0l.76-1.388Z" style="fill:#dd0c13;fill-rule:evenodd"/><path d="M14.122,21.6c-.02-.2-1.1-.319-1.677-.123-.732.249-1.219,1.142-1.045,1.213a1.975,1.975,0,0,1,1.125-.986C13.447,21.493,14.142,21.8,14.122,21.6Z" style="fill:#ff6e4f;fill-rule:evenodd"/><path d="M15.52,18.606a11.1,11.1,0,0,0,1.547,1.487,6.9,6.9,0,0,1,2.72,4.107c-.107,1.067-1.973,1.76-1.973,1.76l-3.307-7.194Z" style="fill:#eee;fill-rule:evenodd"/><path d="M17.73,26.161l-3.457-7.521,1.32-.208.057.081a10.869,10.869,0,0,0,1.512,1.451,7,7,0,0,1,2.782,4.207l0,.022,0,.022c-.115,1.153-2,1.864-2.077,1.894Zm-2.99-7.27,3.155,6.863c.414-.178,1.63-.763,1.73-1.548a6.793,6.793,0,0,0-2.648-3.981l-.01-.007a11.94,11.94,0,0,1-1.517-1.439Z" style="fill:#ee4b2e"/><path d="M28,12.742c.025.394.034.792.025,1.194a13.946,13.946,0,0,1-19.9,12.3A12.86,12.86,0,0,0,28,12.742Z" style="fill:#eae0df;fill-rule:evenodd;opacity:0.2"/><path d="M2.383,13.893A13.941,13.941,0,0,1,25.7,5.83s-5.009,5.979-10.584,7.907S2.383,13.893,2.383,13.893Z" style="fill:#eae0df;opacity:0.2"/><path d="M3.618,18.694c-.044-.392-.072-.79-.083-1.191C3.329,9.807,10.012,4.2,17.708,3.991a14.2,14.2,0,0,1,5.719,1.458,13.128,13.128,0,0,0-7.188-2.369c-7.1.19-13.306,5.3-13.116,12.4A12.873,12.873,0,0,0,3.618,18.694Z" style="fill:#eae0df;fill-rule:evenodd;opacity:0.2"/>'
|
||
},
|
||
"Perl": {
|
||
colour: "#3a3c5b",
|
||
icon: '<path d="M29.25,13.8a6.888,6.888,0,0,0-.742-2.268,1.011,1.011,0,0,0-.172-.233,9.471,9.471,0,0,1-1.725-2.4,8.632,8.632,0,0,0-1.395-2.382A6.906,6.906,0,0,1,24.1,4.644,4.572,4.572,0,0,0,21.99,1.727a1.009,1.009,0,0,0-.1-.054,8.886,8.886,0,0,0-1.3-.468,1.022,1.022,0,0,0-.263-.035,1.009,1.009,0,0,0-.2.021,5.607,5.607,0,0,1-.807.107c-.05,0-.1-.006-.149-.006a2.842,2.842,0,0,0-1.416.453c-.094.052-.188.106-.284.149q-.041.018-.078.039A1.637,1.637,0,0,1,17.066,2a3.109,3.109,0,0,0-.772.194,1,1,0,0,0-.508.483,2.184,2.184,0,0,1-.469.5A4.382,4.382,0,0,0,14.555,4a.964.964,0,0,0-.116.234,4.687,4.687,0,0,1-1.574,2.2,6.471,6.471,0,0,0-.8.613,2.734,2.734,0,0,0-.627-1.634c-.017-.019-.035-.038-.053-.056l0-.014a2.378,2.378,0,0,0-.135-.586,1,1,0,0,0-.132-.236A5.167,5.167,0,0,0,9.511,3.113a.988.988,0,0,0-.346-.119,1.5,1.5,0,0,1-.148-.077,2.06,2.06,0,0,0-1-.311,1.476,1.476,0,0,0-.681.166.987.987,0,0,0-.274.206,1.328,1.328,0,0,1-.125.063,1.9,1.9,0,0,0-.908.778,2.539,2.539,0,0,0-.541.106,1.656,1.656,0,0,1-.383.057,2.3,2.3,0,0,0-1.5.545l-.106.1a2.533,2.533,0,0,0-1,2.525,1.08,1.08,0,0,0,.068.165A2.294,2.294,0,0,0,4.446,8.478c-.1.238-.2.473-.314.7a1.009,1.009,0,0,0-.087.293A11.052,11.052,0,0,0,4,12.039c0,.02,0,.04.007.06a5.278,5.278,0,0,1,.041.547,2.926,2.926,0,0,0,.931,2.4c.017.014.034.026.052.039l.008.031a2.8,2.8,0,0,0,.151.447,1.185,1.185,0,0,0,.632.617,1.289,1.289,0,0,0,.248.571,1,1,0,0,0,.332.279,2.453,2.453,0,0,0,.465.176l.064.018a.976.976,0,0,0,.192.171A5.879,5.879,0,0,1,7.873,18a1.13,1.13,0,0,0,1.351.427,1.5,1.5,0,0,0,.765.215,1.421,1.421,0,0,0,.624-.145l.114-.026c.024.408.033.817.028,1.223a1.043,1.043,0,0,0,.026.242,10.744,10.744,0,0,1,.266,1.828.931.931,0,0,0,.031.2,8.492,8.492,0,0,1,.268,1.815c0,.031,0,.063.008.094a6.083,6.083,0,0,1-.61,3.575.994.994,0,0,0-.089.261,1.093,1.093,0,0,0-.234.079l-.05.022a2.013,2.013,0,0,0-1.2,1.065,1.322,1.322,0,0,0,.074,1.054,1,1,0,0,0,.324.371,3.547,3.547,0,0,0,3.509.3,1.546,1.546,0,0,0,.829-1.653l-.005-.067a.989.989,0,0,0,.056-.158,11.186,11.186,0,0,0,.288-2.068,8.939,8.939,0,0,1,.259-1.822,4.727,4.727,0,0,0,.389-1.588l.042.048a12.661,12.661,0,0,0,1.255,1.129,10.3,10.3,0,0,1,1.1.989l-.011.038a.532.532,0,0,1-.342.359l-.049.017a1.921,1.921,0,0,0-1.184,1.334,1.313,1.313,0,0,0,.452,1.234,1,1,0,0,0,.441.222,4.908,4.908,0,0,0,2.735-.181,1.556,1.556,0,0,0,.266-.124,1.411,1.411,0,0,0,.97.372,2.326,2.326,0,0,0,1-.274c.049-.023.1-.045.14-.062a1,1,0,0,0,.637-.864,4.553,4.553,0,0,0-.468-2.343,1.56,1.56,0,0,0-.51-.6,10.8,10.8,0,0,1,1.3-2.15,2.193,2.193,0,0,0,.451-2.026,2.519,2.519,0,0,1-.043-.394,1.046,1.046,0,0,0,0-.148,5.756,5.756,0,0,1,.012-1.279,7.161,7.161,0,0,0,.951,1.793,7.892,7.892,0,0,1,.133,1.1,10.733,10.733,0,0,0,.133,1.186,9.36,9.36,0,0,1-.224,3.9,1,1,0,0,0-.032.34h0a.98.98,0,0,0-.1.179,2.238,2.238,0,0,0-.312,1.235,1.007,1.007,0,0,0,.039.2,1.315,1.315,0,0,0,1.328.963c.086,0,.177-.006.268-.014l.019,0,.038.013a2.109,2.109,0,0,0,2.517-1.088,1,1,0,0,0,.058-.735,5.285,5.285,0,0,1-.208-1.027,1.011,1.011,0,0,0-.046-.217,6.47,6.47,0,0,1-.221-3.22,1.112,1.112,0,0,0,.015-.114,3.907,3.907,0,0,1,.074-.443,2.738,2.738,0,0,0-.193-2.1,4.339,4.339,0,0,1,.021-.476c.011-.147.023-.3.027-.463a1.59,1.59,0,0,0,.862-.851,12.83,12.83,0,0,0,.947-2.23,1.719,1.719,0,0,0,.172-1.185,1.234,1.234,0,0,0,.111-.251A1.467,1.467,0,0,0,29.25,13.8ZM18.863,22.768c-.026,0-.053-.008-.08-.01l-.024,0a2.748,2.748,0,0,1-.236-.323c-.059-.088-.118-.175-.178-.258a2.253,2.253,0,0,0,.208-.234,1.255,1.255,0,0,0,.629-.321A3.186,3.186,0,0,1,18.863,22.768Z" style="fill:#ededed"/><path d="M19.289,2.3c-.548-.065-.961.3-1.419.506-.368.206-.815.152-1.185.309-.282.579-.941.908-1.3,1.443a5.7,5.7,0,0,1-1.942,2.694,5.464,5.464,0,0,0-2.368,3.394c-.145.3-.122.746-.277,1-.511.143-.239-.516-.3-.825-.074-.47.341-.77.373-1.226a1.834,1.834,0,0,0,.209-1.053c-.056-.814.189-1.807-.393-2.477-.349-.2-.239-.623-.366-.947a4.214,4.214,0,0,0-1.3-1.139c-.419-.041-.806-.542-1.232-.323-.266.309-.763.305-.922.713-.1.516-.688.374-1.068.5-.488.185-1.118.006-1.518.382-.411.41-1.034.961-.835,1.606.457.882,1.645.438,2.317.974A17.99,17.99,0,0,1,5.036,9.61a10.051,10.051,0,0,0-.044,2.332c.123.773-.083,1.772.606,2.319.38.137.357.572.5.887.134.29.427-.113.543.193.338.184.037.561.22.8.263.137.639.128.822.426a6.844,6.844,0,0,1,.975.806c.23.467.531-.454.783-.109.17.285.506.522.819.285a2.993,2.993,0,0,0,1.324-.556,18.033,18.033,0,0,1,.171,2.718,11.733,11.733,0,0,1,.29,2,9.409,9.409,0,0,1,.3,2.03,7.111,7.111,0,0,1-.709,4.16,1.012,1.012,0,0,1-.807.8c-.291.13-.9.366-.692.776a2.549,2.549,0,0,0,2.52.214c.51-.243.073-.858.334-1.226.343-1.3.174-2.691.575-3.985a3.762,3.762,0,0,0,.3-2.1c.079-.44-.105-.969.187-1.329a1.813,1.813,0,0,1,.483-1.2,14.762,14.762,0,0,0,.144-2.026,3.214,3.214,0,0,1,1.267-.127c.018.375-.272.812-.19,1.234A1.948,1.948,0,0,1,15.5,20.3a2.849,2.849,0,0,0,.168,2.308c.782.839,1.8,1.432,2.536,2.327.314.205.2.517.038.784a1.528,1.528,0,0,1-.987,1.034c-.308.121-.806.566-.442.882a3.906,3.906,0,0,0,2.178-.144c.476-.171.3-.738.488-1.088.3.233.423.765.711,1.069.3.433.807.073,1.156-.062a3.549,3.549,0,0,0-.372-1.842c-.167-.378-.8-.385-.77-.852a11.761,11.761,0,0,1,1.712-3c.51-.479.13-1.191.158-1.8A6.765,6.765,0,0,1,23.158,15.5a15.889,15.889,0,0,0,.692,2.14,6.23,6.23,0,0,0,1.1,2.246c.237.811.176,1.71.331,2.551a10.44,10.44,0,0,1-.242,4.347c.04.518-.457.9-.415,1.408.14.469.7.093.99.29a1.11,1.11,0,0,0,1.324-.572,6.212,6.212,0,0,1-.247-1.223,7.454,7.454,0,0,1-.255-3.719c.046-.669.457-1.5-.073-2.072-.148-.619.1-1.285-.049-1.915a12.877,12.877,0,0,1-.122-4.933c.093-.227.013-.649.247-.775a1.851,1.851,0,0,1,.315,1.232,3.7,3.7,0,0,1,.079,2.081c-.424.531-.163,1.248-.109,1.85.068.422.516.118.589-.144a11.851,11.851,0,0,0,.944-2.241c.269-.356.014-.77,0-1.142.413-.049.256-.506.035-.7a5.93,5.93,0,0,0-.667-2.2,10.464,10.464,0,0,1-1.941-2.723c-.528-1.639-2.042-2.726-2.556-4.379a3.556,3.556,0,0,0-1.652-2.317A7.881,7.881,0,0,0,20.32,2.17,6.5,6.5,0,0,1,19.289,2.3Zm.4,14.66a38.907,38.907,0,0,1,.5,4.291,4.175,4.175,0,0,1-.76,2.517c-.12.425-.486.012-.751-.016-.643-.018-.882-.683-1.232-1.107-.36-.344-.1-.8.133-1.131.252-.179.35-.579.708-.548.4-.007.316-.487.26-.743.238-.362.092-.892.328-1.283.419-.182.294-.82.442-1.18.115-.256.017-.749.334-.854.037-.006.049.012.042.052Z" style="fill:#3a3c5b"/>',
|
||
inlineComment: [
|
||
"#"
|
||
]
|
||
},
|
||
"PHP": {
|
||
colour: "#4c6b96",
|
||
icon: '<defs><radialGradient id="a" cx="-16.114" cy="20.532" r="18.384" gradientTransform="translate(26.52 -9.307)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.5" stop-color="#4c6b96"/><stop offset="1" stop-color="#231f20"/></radialGradient></defs><title>file_type_php</title><ellipse cx="16" cy="16" rx="14" ry="7.365" style="fill:url(#a)"/><ellipse cx="16" cy="16" rx="13.453" ry="6.818" style="fill:#6280b6"/><path d="M18.725,18.2l.667-3.434a1.752,1.752,0,0,0-.372-1.719,2.929,2.929,0,0,0-2-.525H15.867l.331-1.7a.219.219,0,0,0-.215-.26h-1.6a.219.219,0,0,0-.215.177l-.709,3.646a2.051,2.051,0,0,0-.477-1.054,2.783,2.783,0,0,0-2.2-.807H7.7a.219.219,0,0,0-.215.177l-1.434,7.38a.219.219,0,0,0,.215.26H7.869a.219.219,0,0,0,.215-.177l.347-1.785h1.2a5.167,5.167,0,0,0,1.568-.2,3.068,3.068,0,0,0,1.15-.689,3.538,3.538,0,0,0,.68-.844l-.287,1.475a.219.219,0,0,0,.215.26h1.6a.219.219,0,0,0,.215-.177l.787-4.051h1.094c.466,0,.6.093.64.133s.1.165.025.569l-.635,3.265a.219.219,0,0,0,.215.26h1.62A.219.219,0,0,0,18.725,18.2ZM11.33,15.366a1.749,1.749,0,0,1-.561,1.092,2.171,2.171,0,0,1-1.315.321H8.742l.515-2.651h.921c.677,0,.949.145,1.059.266A1.181,1.181,0,0,1,11.33,15.366Z" style="fill:#fff"/><path d="M25.546,13.332a2.783,2.783,0,0,0-2.2-.807H20.255a.219.219,0,0,0-.215.177l-1.434,7.38a.219.219,0,0,0,.215.26h1.608a.219.219,0,0,0,.215-.177l.347-1.785h1.2a5.167,5.167,0,0,0,1.568-.2,3.068,3.068,0,0,0,1.15-.689,3.425,3.425,0,0,0,1.076-1.927A2.512,2.512,0,0,0,25.546,13.332Zm-1.667,2.034a1.749,1.749,0,0,1-.561,1.092A2.171,2.171,0,0,1,22,16.778H21.29l.515-2.651h.921c.677,0,.949.145,1.059.266A1.181,1.181,0,0,1,23.879,15.366Z" style="fill:#fff"/><path d="M10.178,13.908a1.645,1.645,0,0,1,1.221.338,1.34,1.34,0,0,1,.145,1.161,1.945,1.945,0,0,1-.642,1.223A2.361,2.361,0,0,1,9.454,17H8.476l.6-3.089ZM6.261,20.124H7.869l.381-1.962H9.627a4.931,4.931,0,0,0,1.5-.191,2.84,2.84,0,0,0,1.07-.642,3.207,3.207,0,0,0,1.01-1.808,2.3,2.3,0,0,0-.385-2.044,2.568,2.568,0,0,0-2.035-.732H7.7Z" style="fill:#000004"/><path d="M14.387,10.782h1.6L15.6,12.744h1.421a2.767,2.767,0,0,1,1.85.468,1.548,1.548,0,0,1,.305,1.516l-.667,3.434H16.89l.635-3.265a.886.886,0,0,0-.08-.76,1.121,1.121,0,0,0-.8-.2H15.37l-.822,4.228h-1.6Z" style="fill:#000004"/><path d="M22.727,13.908a1.645,1.645,0,0,1,1.221.338,1.34,1.34,0,0,1,.145,1.161,1.945,1.945,0,0,1-.642,1.223A2.361,2.361,0,0,1,22,17h-.978l.6-3.089ZM18.81,20.124h1.608l.381-1.962h1.377a4.931,4.931,0,0,0,1.5-.191,2.84,2.84,0,0,0,1.07-.642,3.207,3.207,0,0,0,1.01-1.808,2.3,2.3,0,0,0-.385-2.044,2.568,2.568,0,0,0-2.035-.732H20.244Z" style="fill:#000004"/>',
|
||
inlineComment: [
|
||
"#",
|
||
"//"
|
||
]
|
||
},
|
||
"PL/SQL": {
|
||
colour: "#ff0000",
|
||
icon: '<path d="M8.562,15.256A21.159,21.159,0,0,0,16,16.449a21.159,21.159,0,0,0,7.438-1.194c1.864-.727,2.525-1.535,2.525-2V9.7a10.357,10.357,0,0,1-2.084,1.076A22.293,22.293,0,0,1,16,12.078a22.36,22.36,0,0,1-7.879-1.3A10.28,10.28,0,0,1,6.037,9.7v3.55C6.037,13.724,6.7,14.528,8.562,15.256Z" style="fill:red"/><path d="M8.562,21.961a15.611,15.611,0,0,0,2.6.741A24.9,24.9,0,0,0,16,23.155a24.9,24.9,0,0,0,4.838-.452,15.614,15.614,0,0,0,2.6-.741c1.864-.727,2.525-1.535,2.525-2v-3.39a10.706,10.706,0,0,1-1.692.825A23.49,23.49,0,0,1,16,18.74a23.49,23.49,0,0,1-8.271-1.348,10.829,10.829,0,0,1-1.692-.825V19.96C6.037,20.426,6.7,21.231,8.562,21.961Z" style="fill:red"/><path d="M16,30c5.5,0,9.963-1.744,9.963-3.894V23.269a10.5,10.5,0,0,1-1.535.762l-.157.063A23.487,23.487,0,0,1,16,25.445a23.422,23.422,0,0,1-8.271-1.351c-.054-.02-.106-.043-.157-.063a10.5,10.5,0,0,1-1.535-.762v2.837C6.037,28.256,10.5,30,16,30Z" style="fill:red"/><ellipse cx="16" cy="5.894" rx="9.963" ry="3.894" style="fill:red"/>'
|
||
},
|
||
"Plain text": {
|
||
colour: "#c2c2c2",
|
||
icon: '<path d="M22.038,2H6.375a1.755,1.755,0,0,0-1.75,1.75v24.5A1.755,1.755,0,0,0,6.375,30h19.25a1.755,1.755,0,0,0,1.75-1.75V6.856Zm.525,2.844,1.663,1.531H22.563ZM6.375,28.25V3.75H20.813V8.125h4.813V28.25Z" style="fill:#c2c2c2"/><rect x="8.125" y="15.097" width="13.076" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="24.439" width="9.762" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="19.763" width="15.75" height="1.75" style="fill:#829ec2"/><rect x="8.125" y="10.23" width="15.75" height="1.75" style="fill:#829ec2"/>'
|
||
},
|
||
"PlantUML": {
|
||
colour: "#A11F41",
|
||
icon: '<defs><linearGradient id="a" x1="-33.423" y1="-250.911" x2="-33.353" y2="-250.858" gradientTransform="matrix(37.134, 26.001, 13.575, -19.387, 4673.473, -3982.019)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#767676"/><stop offset="1"/></linearGradient><linearGradient id="b" x1="-32.107" y1="-242.563" x2="-32.028" y2="-242.586" gradientTransform="matrix(81.081, 56.774, 17.306, -24.715, 6804.021, -4149.644)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0079b9"/><stop offset="1"/></linearGradient><linearGradient id="c" x1="-33.282" y1="-243.423" x2="-33.224" y2="-243.455" gradientTransform="matrix(60.003, 42.015, 34.184, -48.82, 10343.005, -10469.084)" xlink:href="#b"/><linearGradient id="d" x1="12.356" y1="26.268" x2="14.011" y2="26.268" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#595959"/><stop offset="0.087" stop-color="#6e6e6e"/><stop offset="0.242" stop-color="#8c8c8c"/><stop offset="0.405" stop-color="#a4a4a4"/><stop offset="0.577" stop-color="#b5b5b5"/><stop offset="0.765" stop-color="#bfbfbf"/><stop offset="1" stop-color="#c2c2c2"/></linearGradient><linearGradient id="e" x1="18.291" y1="26.171" x2="19.946" y2="26.171" xlink:href="#d"/><linearGradient id="f" x1="24.44" y1="26.171" x2="26.096" y2="26.171" xlink:href="#d"/></defs><title>file_type_plantuml</title><polygon points="20.305 17.872 27.16 22.418 21.72 25.493 14.861 20.999 20.305 17.872" style="fill:#1c0a42"/><path d="M21.716,25.619l-.055-.036-7.005-4.59,5.653-3.247,7.056,4.68Zm-6.65-4.613,6.658,4.362,5.231-2.957L20.3,18Z"/><polygon points="26.401 11.909 29.418 13.592 27.07 15.088 24.213 13.247 26.401 11.909" style="fill:url(#a)"/><path d="M27.069,15.215l-3.058-1.97,2.387-1.46,3.228,1.8Zm-2.654-1.966L27.07,14.96,29.208,13.6l-2.8-1.565Z"/><polygon points="14.498 17.807 21.354 22.354 15.914 25.429 9.055 20.935 14.498 17.807" style="fill:#ffbd3f"/><path d="M15.91,25.554l-.055-.036L8.85,20.929,14.5,17.681l7.056,4.68ZM9.26,20.941,15.918,25.3l5.231-2.957-6.654-4.413Z"/><polygon points="7.99 17.966 14.954 22.366 9.577 25.504 2.218 20.849 7.99 17.966" style="fill:#a11f40"/><path d="M9.575,25.629,2,20.838l6-3,7.164,4.527ZM2.436,20.86,9.58,25.378l5.168-3.016L7.984,18.089Z"/><polygon points="2.111 21.021 9.443 25.515 9.443 29.063 2.111 24.332 2.111 21.021" style="fill:url(#b)"/><path d="M9.55,29.26,2,24.391V20.829L9.55,25.455ZM2.218,24.274l7.118,4.592V25.575L2.218,21.213Z"/><polygon points="24.071 13.343 27.009 15.222 27.009 22.131 24.071 20.247 24.071 13.343" style="fill:url(#c)"/><path d="M27.063,22.229l-3.045-1.953V13.245l3.045,1.947Zm-2.938-2.012,2.831,1.815V15.251l-2.831-1.81Z"/><polygon points="27.149 22.526 27.149 15.194 29.514 13.775 29.514 29.149 28.331 29.149 9.646 29.149 9.646 25.601 15.086 22.526 15.785 25.601 15.796 25.601 21.472 22.526 21.891 25.601 21.945 25.601 27.149 22.526" style="fill:#fff"/><path d="M29.621,29.256H9.539V25.538l5.62-3.177.7,3.083,5.7-3.087.422,3.1,5.061-2.991V15.133l2.58-1.548ZM9.753,29.041H29.407V13.964l-2.151,1.29v7.332l-.053.031-5.229,3.09H21.8l-.411-3.014-5.564,3.014H15.7l-.686-3.018-5.26,2.973Z"/><rect x="12.356" y="25.44" width="1.656" height="1.656" rx="0.215" ry="0.215" style="fill:url(#d)"/><path d="M13.8,27.2H12.57a.322.322,0,0,1-.322-.322V25.655a.322.322,0,0,1,.322-.322H13.8a.322.322,0,0,1,.322.322v1.226A.322.322,0,0,1,13.8,27.2ZM12.57,25.547a.108.108,0,0,0-.107.107v1.226a.108.108,0,0,0,.107.107H13.8a.108.108,0,0,0,.107-.107V25.655a.108.108,0,0,0-.107-.107Z"/><rect x="18.291" y="25.343" width="1.656" height="1.656" rx="0.215" ry="0.215" style="fill:url(#e)"/><path d="M19.732,27.106H18.505a.322.322,0,0,1-.322-.322V25.558a.322.322,0,0,1,.322-.322h1.226a.322.322,0,0,1,.322.322v1.226A.322.322,0,0,1,19.732,27.106Zm-1.226-1.656a.108.108,0,0,0-.107.107v1.226a.108.108,0,0,0,.107.107h1.226a.108.108,0,0,0,.107-.107V25.558a.108.108,0,0,0-.107-.107Z"/><rect x="24.44" y="25.343" width="1.656" height="1.656" rx="0.215" ry="0.215" style="fill:url(#f)"/><path d="M25.881,27.106H24.655a.322.322,0,0,1-.322-.322V25.558a.322.322,0,0,1,.322-.322h1.226a.322.322,0,0,1,.322.322v1.226A.322.322,0,0,1,25.881,27.106Zm-1.226-1.656a.108.108,0,0,0-.107.107v1.226a.108.108,0,0,0,.107.107h1.226a.108.108,0,0,0,.107-.107V25.558a.108.108,0,0,0-.107-.107Z"/><path d="M27.215,11.23c-.052.069-.417-.262-.653-.526a4.408,4.408,0,0,1-.516-.73A2.6,2.6,0,0,1,25.7,9.2a2.358,2.358,0,0,1-.052-.682,2.959,2.959,0,0,1,.129-.749,3.142,3.142,0,0,1,.787-1.207,15.532,15.532,0,0,0,1.283-1.4,3.062,3.062,0,0,0,.479-.927,3.979,3.979,0,0,0,.151-.855c.019-.364-.025-.593.023-.613s.215.274.287.564a3.167,3.167,0,0,1-.458,2.1,6.9,6.9,0,0,1-1.094,1.448,2.8,2.8,0,0,0-.849,1.234A2.466,2.466,0,0,0,26.3,8.8a3.465,3.465,0,0,0,.476,1.542C27.064,10.914,27.256,11.175,27.215,11.23Z" style="fill:#ea2d2e"/><path d="M27.193,11.266c-.124,0-.492-.365-.651-.544a4.478,4.478,0,0,1-.52-.734,2.628,2.628,0,0,1-.346-.781,2.375,2.375,0,0,1-.053-.69,2.978,2.978,0,0,1,.13-.756,3.208,3.208,0,0,1,.793-1.216c.294-.331.5-.528.659-.686a4.393,4.393,0,0,0,.622-.711,3.052,3.052,0,0,0,.476-.919,3.951,3.951,0,0,0,.15-.849c.008-.159,0-.294,0-.393,0-.159-.006-.225.038-.243a.05.05,0,0,1,.043,0,1.226,1.226,0,0,1,.28.579,3.167,3.167,0,0,1-.46,2.121,6.928,6.928,0,0,1-1.1,1.453c-.055.06-.109.116-.162.171a2.3,2.3,0,0,0-.681,1.052,2.47,2.47,0,0,0-.082.673,3.458,3.458,0,0,0,.473,1.53c.114.231.215.415.289.549.129.235.178.323.142.369h0a.051.051,0,0,1-.04.02ZM28.512,2.8a.863.863,0,0,0,0,.19c0,.1.007.236,0,.4a4.021,4.021,0,0,1-.152.861,3.106,3.106,0,0,1-.483.934,4.437,4.437,0,0,1-.629.719c-.162.158-.364.354-.657.683a3.168,3.168,0,0,0-.782,1.2,2.933,2.933,0,0,0-.128.743,2.325,2.325,0,0,0,.052.675,2.59,2.59,0,0,0,.341.767,4.422,4.422,0,0,0,.513.725,2.035,2.035,0,0,0,.611.526,1.183,1.183,0,0,0-.147-.31c-.074-.134-.175-.318-.29-.551A3.5,3.5,0,0,1,26.278,8.8a2.53,2.53,0,0,1,.084-.688,2.375,2.375,0,0,1,.694-1.075c.052-.055.106-.111.161-.171a6.879,6.879,0,0,0,1.09-1.442,3.119,3.119,0,0,0,.456-2.083A1.281,1.281,0,0,0,28.512,2.8Z"/><path d="M29.972,6.087c-.019-.088-.432-.04-.766.073a2.6,2.6,0,0,0-1.059.722,2.8,2.8,0,0,0-.916,1.855,2.972,2.972,0,0,0,.258,1.06c.221.572.455.773.444,1.225-.007.3-.114.484-.048.549s.314-.1.462-.313a1.8,1.8,0,0,0,.259-1.022c-.046-.815-.6-1.015-.608-1.8a1.858,1.858,0,0,1,.129-.676C28.57,6.509,30.008,6.252,29.972,6.087Z" style="fill:#ea2d2e"/><path d="M27.934,11.617a.094.094,0,0,1-.069-.026c-.046-.046-.03-.122-.005-.237a1.718,1.718,0,0,0,.045-.331,1.374,1.374,0,0,0-.214-.72,5,5,0,0,1-.228-.495,2.98,2.98,0,0,1-.259-1.07,2.81,2.81,0,0,1,.923-1.874,2.64,2.64,0,0,1,1.07-.729,1.482,1.482,0,0,1,.766-.1A.065.065,0,0,1,30,6.081h0c.015.07-.092.121-.306.224a2.73,2.73,0,0,0-1.542,1.463,1.827,1.827,0,0,0-.127.667,1.645,1.645,0,0,0,.291.885,1.889,1.889,0,0,1,.317.914,1.814,1.814,0,0,1-.264,1.039.809.809,0,0,1-.421.342Zm1.889-5.549a2.117,2.117,0,0,0-.608.117,2.588,2.588,0,0,0-1.048.715,2.764,2.764,0,0,0-.909,1.837,2.935,2.935,0,0,0,.256,1.05,4.955,4.955,0,0,0,.225.49,1.433,1.433,0,0,1,.22.745,1.765,1.765,0,0,1-.047.341c-.019.091-.035.163-.009.188a.046.046,0,0,0,.038.01.769.769,0,0,0,.382-.32,1.793,1.793,0,0,0,.254-1.005,1.844,1.844,0,0,0-.31-.89,1.711,1.711,0,0,1-.3-.911,1.877,1.877,0,0,1,.13-.686A2.776,2.776,0,0,1,29.67,6.257c.126-.061.283-.136.277-.164l-.008-.007A.264.264,0,0,0,29.823,6.068Z"/>'
|
||
},
|
||
"PowerQuery": {
|
||
colour: "#cfcfcf",
|
||
icon: '<path d="M30,25.583H25.757V15.378a8.271,8.271,0,0,0-.832-4.261A3.061,3.061,0,0,0,22.118,9.8a3.383,3.383,0,0,0-2.826,1.664,6.791,6.791,0,0,0-1.161,3.987V25.583H13.869V15.031q0-5.231-3.694-5.231a3.332,3.332,0,0,0-2.826,1.573,6.935,6.935,0,0,0-1.106,4.078V25.583H2V6.856H6.243V9.818h.073a6.488,6.488,0,0,1,5.907-3.4,5.569,5.569,0,0,1,3.393,1.07A5.328,5.328,0,0,1,17.6,10.294a6.683,6.683,0,0,1,6.218-3.877Q30,6.417,30,14.043Z" style="fill:#cfcfcf"/>'
|
||
},
|
||
"PowerShell": {
|
||
colour: "#5391fe",
|
||
icon: '<defs><linearGradient id="a" x1="23.325" y1="-118.543" x2="7.26" y2="-104.193" gradientTransform="matrix(1, 0, 0, -1, 0, -96)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#5391fe"/><stop offset="1" stop-color="#3e6dbf"/></linearGradient><linearGradient id="b" x1="7.1" y1="-104.002" x2="23.001" y2="-118.292" xlink:href="#a"/></defs><title>file_type_powershell</title><path d="M3.174,26.589a1.154,1.154,0,0,1-.928-.423,1.234,1.234,0,0,1-.21-1.052L6.233,6.78A1.8,1.8,0,0,1,7.914,5.41H28.826a1.157,1.157,0,0,1,.928.423,1.235,1.235,0,0,1,.21,1.052l-4.2,18.335a1.8,1.8,0,0,1-1.681,1.37H3.174Z" style="fill-rule:evenodd;fill:url(#a)"/><path d="M7.914,5.646H28.826a.913.913,0,0,1,.908,1.187l-4.2,18.334a1.575,1.575,0,0,1-1.451,1.187H3.174a.913.913,0,0,1-.908-1.187l4.2-18.334A1.574,1.574,0,0,1,7.914,5.646Z" style="fill-rule:evenodd;fill:url(#b)"/><path d="M16.04,21.544h5.086a1.118,1.118,0,0,1,0,2.234H16.04a1.118,1.118,0,0,1,0-2.234Z" style="fill:#2c5591;fill-rule:evenodd"/><path d="M19.339,16.578a1.762,1.762,0,0,1-.591.6L9.309,23.953a1.224,1.224,0,0,1-1.438-1.977l8.512-6.164v-.126L11.035,10a1.224,1.224,0,0,1,1.782-1.672l6.418,6.827A1.166,1.166,0,0,1,19.339,16.578Z" style="fill:#2c5591;fill-rule:evenodd"/><path d="M19.1,16.342a1.749,1.749,0,0,1-.59.6L9.074,23.718a1.225,1.225,0,0,1-1.439-1.977l8.513-6.164V15.45L10.8,9.761a1.224,1.224,0,0,1,1.783-1.672L19,14.916A1.162,1.162,0,0,1,19.1,16.342Z" style="fill:#fff;fill-rule:evenodd"/><path d="M15.9,21.412h5.086a1.059,1.059,0,1,1,0,2.118H15.9a1.059,1.059,0,1,1,0-2.118Z" style="fill:#fff;fill-rule:evenodd"/>',
|
||
inlineComment: [
|
||
"#"
|
||
]
|
||
},
|
||
"Processing": {
|
||
colour: "#1c4c70",
|
||
icon: '<defs><linearGradient id="a" x1="16" y1="3" x2="16" y2="29" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1c4c70"/><stop offset="1" stop-color="#0c2b42"/></linearGradient></defs><title>file_type_processinglang</title><path d="M15.922,19.962a13,13,0,0,1-1.647-.077v5.552a27.76,27.76,0,0,1,3.332.461V29H5.968V25.9A27.988,27.988,0,0,1,9.3,25.438V6.715a28.215,28.215,0,0,1-3.331-.46v-3.1H8.955C10.18,3.153,13.549,3,16.23,3c6.318,0,9.8,2.948,9.8,8C26.031,16.018,22.2,19.962,15.922,19.962ZM16,7.058c-.613,0-1.149,0-1.723.038v8.615a9.694,9.694,0,0,0,1.455.115c3.025-.038,5.13-1.723,5.13-4.519C20.862,8.7,19.407,7.058,16,7.058Z" style="fill:url(#a)"/>'
|
||
},
|
||
"Prolog": {
|
||
colour: "#ec1c24",
|
||
icon: '<defs><radialGradient id="a" cx="1341.25" cy="-3396.866" r="18.299" gradientTransform="translate(-1327.077 3405.935)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.181" stop-color="#fbfbfb"/><stop offset="0.365" stop-color="#efeff0"/><stop offset="0.552" stop-color="#dadbdc"/><stop offset="0.738" stop-color="#bebfc2"/><stop offset="0.824" stop-color="#aeb0b3"/></radialGradient><radialGradient id="b" cx="6.678" cy="84.74" r="15.554" gradientTransform="translate(-1.884 -86.154) scale(1.072 1.166)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fafdff"/><stop offset="0.079" stop-color="#eef5fa"/><stop offset="0.22" stop-color="#cfdfec"/><stop offset="0.407" stop-color="#9dbbd5"/><stop offset="0.631" stop-color="#588ab5"/><stop offset="0.745" stop-color="#326fa4"/><stop offset="0.799" stop-color="#2b6698"/><stop offset="0.897" stop-color="#174e78"/><stop offset="0.994" stop-color="#003152"/></radialGradient><radialGradient id="c" cx="11.241" cy="-9.897" r="16.594" gradientTransform="translate(0 22.631) scale(1 1.062)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd540"/><stop offset="0.667" stop-color="#ec1c24"/><stop offset="0.994" stop-color="#760000"/></radialGradient><radialGradient id="d" cx="12.286" cy="26.127" r="2.083" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#dddfe0"/><stop offset="0.174" stop-color="#d9dbdc"/><stop offset="0.351" stop-color="#cdcfd0"/><stop offset="0.531" stop-color="#b8babb"/><stop offset="0.711" stop-color="#9c9e9f"/><stop offset="0.891" stop-color="#78797b"/><stop offset="1" stop-color="#5e5f61"/></radialGradient><radialGradient id="e" cx="19.064" cy="26.127" r="2.083" xlink:href="#d"/><radialGradient id="f" cx="15.434" cy="16.191" r="2.687" gradientTransform="translate(0 0.461)" xlink:href="#d"/></defs><title>file_type_prolog</title><g style="isolation:isolate"><circle cx="16" cy="16" r="14" transform="translate(-6.602 14.92) rotate(-42.265)" style="fill:url(#a)"/><path d="M19.938,6.309a9.785,9.785,0,0,0-6.5-2.339C8.564,3.97,3.774,7.7,3.405,14.961c-.4,7.8,4.75,12.862,12,12.862,10.733,0,16.672-9.78,10.027-20.388,4.671,10.6-.527,17.279-7.236,17.279-5.441,0-9.61-3.651-9.61-10.345C8.582,4.709,15.823,4.039,19.938,6.309Z" style="fill:url(#b)"/><path d="M22.7,10.415c-.293-.94-.645-2.788.634-3.86a3.729,3.729,0,0,0-3.844,1.534A9.165,9.165,0,0,0,12,8.1,3.729,3.729,0,0,0,8.152,6.555c1.309,1.1.91,3.005.614,3.923A10.517,10.517,0,0,0,6.1,17.524c0,2.174,1.4,4.645,1.675,7.955l1.768-1.532a11.743,11.743,0,0,0,6.212,1.433,11.741,11.741,0,0,0,6.212-1.433l1.769,1.532c.28-3.31,1.675-5.781,1.675-7.955A10.512,10.512,0,0,0,22.7,10.415Z" style="fill:url(#c)"/><path d="M10.722,27.867a1.621,1.621,0,1,1,3.24,0c0,.018,0,.035,0,.053a2.234,2.234,0,1,0-3.228.126C10.725,27.987,10.722,27.927,10.722,27.867Z" style="fill:url(#d)"/><path d="M20.629,27.867a1.621,1.621,0,1,0-3.24,0c0,.018,0,.035,0,.053a2.234,2.234,0,1,1,3.228.126A1.678,1.678,0,0,0,20.629,27.867Z" style="fill:url(#e)"/><g style="opacity:0.53;mix-blend-mode:multiply"><path d="M8.346,18.4c-.132.667-.971.877-.971.877A1.359,1.359,0,0,1,6.809,18.1a2.929,2.929,0,0,0,.443,1.793A2.927,2.927,0,0,0,8.346,18.4Z" style="fill:#231f20"/><path d="M10.008,18.737c-.132.667-.972.877-.972.877a1.36,1.36,0,0,1-.566-1.182,2.929,2.929,0,0,0,.444,1.793A2.926,2.926,0,0,0,10.008,18.737Z" style="fill:#231f20"/><path d="M8.833,20.249c-.132.667-.971.877-.971.877A1.359,1.359,0,0,1,7.3,19.944a2.929,2.929,0,0,0,.443,1.793A2.925,2.925,0,0,0,8.833,20.249Z" style="fill:#231f20"/><path d="M10.5,20.583c-.132.667-.971.877-.971.877a1.36,1.36,0,0,1-.566-1.182A2.929,2.929,0,0,0,9.4,22.072,2.927,2.927,0,0,0,10.5,20.583Z" style="fill:#231f20"/><path d="M9.328,22.121c-.132.667-.972.877-.972.877a1.36,1.36,0,0,1-.565-1.182,2.929,2.929,0,0,0,.443,1.793A2.926,2.926,0,0,0,9.328,22.121Z" style="fill:#231f20"/><path d="M11.664,19.07c-.132.667-.972.877-.972.877a1.359,1.359,0,0,1-.565-1.182,2.93,2.93,0,0,0,.443,1.793A2.927,2.927,0,0,0,11.664,19.07Z" style="fill:#231f20"/></g><g style="opacity:0.53;mix-blend-mode:multiply"><path d="M23.157,18.4c.132.667.971.877.971.877a1.359,1.359,0,0,0,.566-1.182,2.93,2.93,0,0,1-.443,1.793A2.927,2.927,0,0,1,23.157,18.4Z" style="fill:#231f20"/><path d="M21.495,18.737c.132.667.972.877.972.877a1.36,1.36,0,0,0,.565-1.182,2.931,2.931,0,0,1-.444,1.793A2.926,2.926,0,0,1,21.495,18.737Z" style="fill:#231f20"/><path d="M22.669,20.249c.132.667.971.877.971.877a1.36,1.36,0,0,0,.566-1.182,2.929,2.929,0,0,1-.443,1.793A2.926,2.926,0,0,1,22.669,20.249Z" style="fill:#231f20"/><path d="M21.008,20.583c.132.667.971.877.971.877a1.359,1.359,0,0,0,.565-1.182,2.928,2.928,0,0,1-.443,1.793A2.927,2.927,0,0,1,21.008,20.583Z" style="fill:#231f20"/><path d="M22.175,22.121c.132.667.972.877.972.877a1.36,1.36,0,0,0,.565-1.182,2.928,2.928,0,0,1-.444,1.793A2.927,2.927,0,0,1,22.175,22.121Z" style="fill:#231f20"/><path d="M19.838,19.07c.132.667.972.877.972.877a1.359,1.359,0,0,0,.565-1.182,2.928,2.928,0,0,1-.443,1.793A2.928,2.928,0,0,1,19.838,19.07Z" style="fill:#231f20"/></g><circle cx="11.339" cy="14.074" r="3.816" style="fill:#fff"/><circle cx="12.13" cy="14.446" r="1.861" style="fill:#bdbfc1"/><circle cx="12.13" cy="14.446" r="1.191" style="fill:#231f20"/><circle cx="11.603" cy="14.027" r="0.357" style="fill:#fff"/><circle cx="20.112" cy="14.074" r="3.816" style="fill:#fff"/><circle cx="20.903" cy="14.446" r="1.861" style="fill:#bdbfc1"/><circle cx="20.903" cy="14.446" r="1.191" style="fill:#231f20"/><circle cx="20.375" cy="14.027" r="0.357" style="fill:#fff"/><path d="M15.706,21.52c0-1.412,2.157-3.413,2.157-4.887a2.157,2.157,0,0,0-4.313,0C13.55,18.107,15.706,20.108,15.706,21.52Z" style="fill:url(#f)"/></g>'
|
||
},
|
||
"Protocol Buffers": {
|
||
colour: "#97ff27",
|
||
icon: '<polygon points="15.996 3.22 26.966 9.7 26.954 22.3 16 28.78 5.038 22.408 5.034 9.628 15.996 3.22" style="fill:#fff"/><path d="M16,2,3.987,9.02l0,14L16,30l12-7.1.013-13.8ZM26.954,22.3,16,28.78,5.038,22.408l0-12.78L16,3.22,26.966,9.7Z" style="fill:#171c1e"/><polygon points="25.569 13.654 19.946 16.964 19.943 24.89 25.59 21.565 25.569 13.654" style="fill:#1ea8ff"/><polygon points="23.282 12.303 25.569 13.654 19.946 16.964 19.943 24.89 17.327 23.37 17.348 15.875 23.282 12.303" style="fill:#50bfff"/><polygon points="22.512 10.35 22.514 11.816 16.411 15.498 16.418 23.597 14.998 24.431 14.994 14.856 22.512 10.35" style="fill:#97ff27"/><polygon points="20.008 8.871 22.512 10.35 14.994 14.856 14.998 24.431 12.194 22.801 12.189 13.413 20.008 8.871" style="fill:#c2ff72"/><polygon points="19.226 6.606 19.226 8.374 11.21 13.074 11.21 23.172 9.808 23.988 9.835 12.277 19.226 6.606" style="fill:#ff274b"/><polygon points="16.16 4.784 6.53 10.394 6.529 22.071 9.827 23.988 9.835 12.277 19.235 6.606 16.16 4.784" style="fill:#ff5c77"/>'
|
||
},
|
||
"Pug": {
|
||
colour: "#442823",
|
||
icon: '<path d="M25.514,12.846c-.052-.938.209-1.825-.209-2.554-1.043-1.825-3.649-2.867-8.863-2.867V7.372h0v.052c-5.735,0-8.185,1.043-9.227,2.867a5.6,5.6,0,0,0-.469,2.554,9.546,9.546,0,0,0-.261,2.45c.156,1.147.261,2.294.417,3.336.156.886,1.408,1.564,1.564,2.4.313,2.242,2.294,3.284,8.028,3.284v.261h-.1v-.261c5.213,0,7.4-1.043,7.716-3.284.1-.834,1.147-1.512,1.3-2.4.156-1.043.209-2.19.365-3.336A11.774,11.774,0,0,0,25.514,12.846Z" style="fill:#efcca3"/><path d="M16.182,13.68a3.241,3.241,0,0,1,2.19,1.147c.73.626,1.929,1.043,2.45,1.616a4.715,4.715,0,0,1,1.408,1.981,8.9,8.9,0,0,1,.313,2.242c0,.261.156.209.573,0a9.02,9.02,0,0,0,2.19-1.877c-.156.886-1.251,1.668-1.355,2.5-.313,2.242-2.5,3.336-7.872,3.336h.313" style="fill:#ccac8d"/><path d="M19.519,11.908c.209.678.886,3.024-.469,2.242a2.557,2.557,0,0,1,.938,1.564,1.831,1.831,0,0,0,1.3,1.408,3.479,3.479,0,0,0,2.554-.626,2.956,2.956,0,0,0,.678-3.284,2.43,2.43,0,0,0-2.137-1.616C21.4,11.334,19.31,11.126,19.519,11.908Z" style="fill:#ccac8d"/><circle cx="22.178" cy="14.41" r="1.929"/><circle cx="21.656" cy="13.524" r="0.521" style="fill:#fff"/><path d="M19.206,14.306a17.68,17.68,0,0,1,2.711,2.346c.938,1.2.938,1.408.938,1.408l-.678.313a7.1,7.1,0,0,0-2.137-2.5c-1.2-.678-1.355-1.251-1.355-1.251Z" style="fill:#efcca3"/><path d="M16.235,13.68a3.605,3.605,0,0,0-2.346,1.147c-.73.626-2.033,1.043-2.5,1.616a4.806,4.806,0,0,0-1.46,1.981,8.9,8.9,0,0,0-.313,2.242c0,.261.052.313-.626,0A7.972,7.972,0,0,1,6.8,18.789c.156.886,1.251,1.668,1.355,2.5.313,2.19,2.5,3.284,7.872,3.284h.365" style="fill:#ccac8d"/><path d="M21.239,17.277a6.552,6.552,0,0,0-5.109-2.607h0a6.638,6.638,0,0,0-5.109,2.607,3.861,3.861,0,0,0-1.043,3.18c0,4.64,1.616,3.232,2.711,3.806a7.466,7.466,0,0,0,3.389.313h0a7.4,7.4,0,0,0,3.389-.313c1.095-.573,2.711.834,2.711-3.806A3.386,3.386,0,0,0,21.239,17.277Z" style="fill:#56332b"/><path d="M16.026,15.974a9.549,9.549,0,0,1-.469,2.554l.573-.156Z" style="fill:#442823"/><path d="M16.182,15.974a9.549,9.549,0,0,0,.469,2.554l-.573-.156Z" style="fill:#442823"/><path d="M14.358,15.453c-.209-.521.573-1.355,1.825-1.355s2.033.834,1.825,1.355-1.043.678-1.825.678C15.348,16.13,14.566,15.974,14.358,15.453Z" style="fill:#56332b"/><path d="M16.182,15.974c0-.1.73-.1,1.147-.365,0,0-.834.261-.991.156a.656.656,0,0,1-.209-.365.656.656,0,0,1-.209.365c-.156.1-1.095-.156-1.095-.156a8.058,8.058,0,0,1,1.2.365v.417a10.492,10.492,0,0,0,.1,2.033c.156.209.1-1.46.1-2.033A1.3,1.3,0,0,1,16.182,15.974Z"/><path d="M16.182,18.945a3.35,3.35,0,0,1,1.616.678,3.121,3.121,0,0,0-1.616-1.095,3.036,3.036,0,0,0-1.825,1.2A3.312,3.312,0,0,1,16.182,18.945Z" style="fill:#7f4a41"/><path d="M16.078,22.8a8.9,8.9,0,0,1-2.4-.469c-.156-.052-.313.052-.469,0a6.172,6.172,0,0,1-3.18-2.137v.209c0,4.64,1.616,3.232,2.711,3.806a7.466,7.466,0,0,0,3.389.313h0a7.4,7.4,0,0,0,3.389-.313c1.095-.573,2.711.834,2.711-3.806v-.469A5.914,5.914,0,0,1,19,22.282c-.156.052-.417-.052-.573-.052A7.045,7.045,0,0,1,16.078,22.8Z" style="fill:#442823"/><path d="M13.941,20.3s-.573,1.668-.156,2.4l-.521-.209A15.433,15.433,0,0,1,13.941,20.3Z" style="fill:#442823"/><path d="M18.32,20.3s.573,1.668.156,2.4L19,22.491A10.629,10.629,0,0,0,18.32,20.3Z" style="fill:#442823"/><path d="M12.585,11.908c-.209.678-.886,3.024.469,2.242a2.557,2.557,0,0,0-.938,1.564,1.831,1.831,0,0,1-1.3,1.408A3.479,3.479,0,0,1,8.258,16.5a2.956,2.956,0,0,1-.678-3.284,2.43,2.43,0,0,1,2.137-1.616C10.709,11.334,12.794,11.126,12.585,11.908Z" style="fill:#ccac8d"/><path d="M16.13,18.528a3.393,3.393,0,0,1,2.45,2.867v-.1a3.051,3.051,0,0,0-2.45-2.919,3,3,0,0,0-2.45,2.919v.1A3.463,3.463,0,0,1,16.13,18.528Z"/><ellipse cx="16.546" cy="15.138" rx="0.156" ry="0.313" transform="translate(-3.256 4.611) rotate(-14.46)" style="fill:#331712"/><ellipse cx="15.609" cy="15.146" rx="0.313" ry="0.156" transform="translate(-3.482 25.567) rotate(-72.765)" style="fill:#331712"/><circle cx="10.031" cy="14.41" r="1.929"/><circle cx="10.552" cy="13.524" r="0.521" style="fill:#fff"/><path d="M16.7,14.41s-.521.209-.626.261a2.492,2.492,0,0,1-.626-.261H16.7Z" style="fill:#7f4a41"/><path d="M12.9,14.306a17.68,17.68,0,0,0-2.711,2.346c-.938,1.2-.938,1.408-.938,1.408l.678.313a7.1,7.1,0,0,1,2.137-2.5c1.2-.678,1.355-1.251,1.355-1.251Z" style="fill:#efcca3"/><path d="M9.092,10.813a4.519,4.519,0,0,1-1.929,2.294A2.19,2.19,0,0,0,9.092,10.813Z" style="fill:#ccac8d"/><path d="M22.908,10.813a4.519,4.519,0,0,0,1.929,2.294A2.19,2.19,0,0,1,22.908,10.813Z" style="fill:#ccac8d"/><path d="M19.31,13.836a5.16,5.16,0,0,0-3.076-1.408h.156a3.852,3.852,0,0,0-3.024,1.408,4.832,4.832,0,0,1,3.024-1.043h0A5.785,5.785,0,0,1,19.31,13.836Z" style="fill:#ccac8d"/><path d="M17.746,10.969a2.455,2.455,0,0,0-1.564-.938h.156a1.786,1.786,0,0,0-1.512.938,2.187,2.187,0,0,1,1.512-.678h0A1.894,1.894,0,0,1,17.746,10.969Z" style="fill:#ccac8d"/><path d="M10.031,17.746a2.545,2.545,0,0,1-1.773.209H8.05a3.68,3.68,0,0,1-.886-1.512A2.27,2.27,0,0,0,10.031,17.746Z" style="fill:#ccac8d"/><path d="M22.126,17.746a2.545,2.545,0,0,0,1.773.209H23.69a1.749,1.749,0,0,0,1.095-1.512A2.02,2.02,0,0,1,22.126,17.746Z" style="fill:#ccac8d"/><path d="M11.23,10.709a4.75,4.75,0,0,1,2.242.1c.938.313.209,1.564.365,1.616a2.865,2.865,0,0,1,2.242-.73c1.773.1,1.981.886,2.242.73.261-.1-.261-2.19,2.45-1.72,0,0-2.763-.73-2.659,1.251a3.675,3.675,0,0,0-3.858-.1S14.827,9.927,11.23,10.709Z" style="fill:#ccac8d"/><path d="M10.5,8s-2.4,2.972-2.711,4.118c-.365,1.147-.626,5.943-.938,6.621L5.756,14.045l2.033-4.9Z" style="fill:#ccac8d"/><path d="M21.656,8s2.4,2.972,2.711,4.118c.365,1.147.626,5.943.938,6.621L26.4,14.045l-2.033-4.9Z" style="fill:#ccac8d"/><path d="M21.5,8a11.617,11.617,0,0,1,3.284,4.588c.73,2.45.417,5.474.991,5.839.834.521,1.72-2.607,2.033-2.919.469-.521,2.085-1.877,2.19-2.137s-3.232-3.91-4.744-4.64C23.585,7.893,21.4,7.789,21.5,8Z" style="fill:#56332b"/><path d="M23.69,9.3a15.379,15.379,0,0,1,2.972,8.654l1.2-2.45A16.564,16.564,0,0,0,23.69,9.3Z" style="fill:#442823"/><path d="M10.5,8a11.617,11.617,0,0,0-3.284,4.588c-.73,2.45-.417,5.474-.991,5.839-.834.521-1.72-2.607-2.033-2.919-.469-.521-2.085-1.877-2.19-2.137s3.232-3.91,4.744-4.64C8.415,7.893,10.6,7.789,10.5,8Z" style="fill:#56332b"/><path d="M8.31,9.3a15.379,15.379,0,0,0-2.972,8.654L4.14,15.5A16.564,16.564,0,0,1,8.31,9.3Z" style="fill:#442823"/><path d="M6.642,18.007a4.118,4.118,0,0,0,.573,1.564c.365.365.1-.313.1-.313s-.365-.209-.313-1.72S6.642,18.007,6.642,18.007Z" style="fill:#ccac8d"/><path d="M25.41,18.007a4.118,4.118,0,0,1-.573,1.564c-.365.365-.1-.313-.1-.313s.365-.209.313-1.72C24.993,16.078,25.41,18.007,25.41,18.007Z" style="fill:#ccac8d"/><circle cx="13.889" cy="17.121" r="0.156" style="fill:#442823"/><circle cx="12.846" cy="18.216" r="0.156" style="fill:#442823"/><circle cx="12.533" cy="17.121" r="0.156" style="fill:#442823"/><circle cx="18.164" cy="17.121" r="0.156" style="fill:#442823"/><circle cx="19.154" cy="18.216" r="0.156" style="fill:#442823"/><circle cx="19.467" cy="17.121" r="0.156" style="fill:#442823"/>'
|
||
},
|
||
"Puppet": {
|
||
colour: "#ffae1a",
|
||
icon: '<path d="M25.089,11.822H18.7L15.267,8.388V2H6.911v8.357H13.3l3.422,3.422h0v4.431h0l-3.434,3.434H6.911V30h8.357V23.612h0L18.7,20.178h6.388ZM9.7,4.786h2.786V7.571H9.7ZM12.482,27.2H9.7V24.417h2.786Z" style="fill:#ffae1a"/>'
|
||
},
|
||
"PureScript": {
|
||
colour: "#16171b",
|
||
icon: '<rect width="32" height="32" style="fill:#16171b"/><polygon points="21.892 22.136 19.706 20.095 10.107 20.095 12.293 22.136 21.892 22.136" style="fill:#fff"/><polygon points="12.293 14.98 10.107 17.021 19.706 17.021 21.892 14.98 12.293 14.98" style="fill:#fff"/><polygon points="21.891 11.906 19.706 9.864 10.107 9.864 12.293 11.906 21.891 11.906" style="fill:#fff"/><path d="M9.1,13.926,7.652,12.482,2.3,17.836a1.023,1.023,0,0,0,0,1.443l5.354,5.354L9.1,23.19,4.464,18.558Z" style="fill:#fff"/><path d="M29.7,12.721,24.348,7.366,22.9,8.81l4.63,4.632L22.9,18.075l1.443,1.443L29.7,14.165a1.021,1.021,0,0,0,0-1.444Z" style="fill:#fff"/>'
|
||
},
|
||
"Python": {
|
||
colour: "#3671A1",
|
||
icon: '<defs><linearGradient id="a" x1="-133.268" y1="-202.91" x2="-133.198" y2="-202.84" gradientTransform="translate(25243.061 38519.17) scale(189.38 189.81)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#387eb8"/><stop offset="1" stop-color="#366994"/></linearGradient><linearGradient id="b" x1="-133.575" y1="-203.203" x2="-133.495" y2="-203.133" gradientTransform="translate(25309.061 38583.42) scale(189.38 189.81)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffe052"/><stop offset="1" stop-color="#ffc331"/></linearGradient></defs><title>file_type_python</title><path d="M15.885,2.1c-7.1,0-6.651,3.07-6.651,3.07V8.36h6.752v1H6.545S2,8.8,2,16.005s4.013,6.912,4.013,6.912H8.33V19.556s-.13-4.013,3.9-4.013h6.762s3.772.06,3.772-3.652V5.8s.572-3.712-6.842-3.712h0ZM12.153,4.237a1.214,1.214,0,1,1-1.183,1.244v-.02a1.214,1.214,0,0,1,1.214-1.214h0Z" style="fill:url(#a)"/><path d="M16.085,29.91c7.1,0,6.651-3.08,6.651-3.08V23.65H15.985v-1h9.47S30,23.158,30,15.995s-4.013-6.912-4.013-6.912H23.64V12.4s.13,4.013-3.9,4.013H12.975S9.2,16.356,9.2,20.068V26.2s-.572,3.712,6.842,3.712h.04Zm3.732-2.147A1.214,1.214,0,1,1,21,26.519v.03a1.214,1.214,0,0,1-1.214,1.214h.03Z" style="fill:url(#b)"/>',
|
||
inlineComment: [
|
||
"#"
|
||
]
|
||
},
|
||
"Q (kdb+ database)": {
|
||
colour: "#1e78b3",
|
||
icon: '<path d="M20.092,29V19.682A6.953,6.953,0,0,1,17.7,21.645a6.743,6.743,0,0,1-3.089.724A6.557,6.557,0,0,1,9.413,20,11.081,11.081,0,0,1,7,12.475,10.033,10.033,0,0,1,9.264,5.5,7.251,7.251,0,0,1,14.874,3a6.266,6.266,0,0,1,3.2.785,7.329,7.329,0,0,1,2.4,2.373V3.419H25V29Zm.157-16.542a6.492,6.492,0,0,0-1.16-4.232,3.634,3.634,0,0,0-2.905-1.387,3.742,3.742,0,0,0-2.975,1.413,6.881,6.881,0,0,0-1.2,4.485,6.767,6.767,0,0,0,1.152,4.406A3.593,3.593,0,0,0,16.009,18.5a3.786,3.786,0,0,0,2.966-1.518A6.889,6.889,0,0,0,20.249,12.458Z" style="fill:#1e78b3"/>'
|
||
},
|
||
"Q#": {
|
||
colour: "#3333cc",
|
||
icon: '<path d="M19.451,6.218h2.638V8.856h2.637V6.218h2.637V8.856H30V11.5H27.364v2.636H30V16.77H27.364v2.637H24.727V16.769H22.091l0,2.637H19.453V16.768H16.815V14.127h2.638V11.5H16.815V8.853h2.639Zm2.638,7.914h2.637V11.5H22.089Z" style="fill:#33c"/><path d="M14.018,21.524a11.436,11.436,0,0,0,1.572-6.192,10.877,10.877,0,0,0-1.858-6.6A5.889,5.889,0,0,0,8.808,6.153a5.921,5.921,0,0,0-4.94,2.581A10.842,10.842,0,0,0,2,15.333a10.853,10.853,0,0,0,1.868,6.592,5.918,5.918,0,0,0,4.941,2.588,5.743,5.743,0,0,0,3.26-.987l2.306,2.321,1.577-2.4Zm-5.17-1.218,1.117,1.121a3.229,3.229,0,0,1-1.174.217,3.335,3.335,0,0,1-2.837-1.593,8.125,8.125,0,0,1-1.18-4.719,8.1,8.1,0,0,1,1.184-4.724,3.372,3.372,0,0,1,2.87-1.588,3.31,3.31,0,0,1,2.819,1.585,8.178,8.178,0,0,1,1.172,4.726,9.113,9.113,0,0,1-.833,4.15l-1.56-1.571Z" style="fill:#33c"/>'
|
||
},
|
||
"QML": {
|
||
colour: "#41cd52",
|
||
icon: '<path d="M27.3,5H5.886L2,8.958V26H26.114L30,22.042V5ZM16.9,23.07l-1.828.852L13.5,21.331a3.968,3.968,0,0,1-1.082.106c-1.845,0-3.123-.5-3.85-1.49a8.03,8.03,0,0,1-1.082-4.7,8.351,8.351,0,0,1,1.1-4.773,4.379,4.379,0,0,1,3.833-1.561c1.828,0,3.087.515,3.833,1.544a8.351,8.351,0,0,1,1.1,4.773,10.809,10.809,0,0,1-.452,3.44,3.9,3.9,0,0,1-1.473,2Zm5.848-1.67a2.735,2.735,0,0,1-2.168-.692A4.192,4.192,0,0,1,20,18.1V14H19V12h1V9h2v3h2v2H22v3.9a3.907,3.907,0,0,0,.168,1.437c.112.231.393.355.86.355l1.533-.053.093,1.544A12.519,12.519,0,0,1,22.748,21.4ZM12.416,10.614a2.4,2.4,0,0,0-2.289,1.1,7.657,7.657,0,0,0-.6,3.513,7.131,7.131,0,0,0,.6,3.442A2.44,2.44,0,0,0,12.433,19.7a2.417,2.417,0,0,0,2.289-1.011,7.343,7.343,0,0,0,.586-3.442,7.692,7.692,0,0,0-.6-3.531A2.4,2.4,0,0,0,12.416,10.614Z" style="fill:#41cd52"/>'
|
||
},
|
||
"R": {
|
||
colour: "#276dc3",
|
||
icon: '<defs><linearGradient id="a" x1="-134.811" y1="-103.284" x2="-134.772" y2="-103.323" gradientTransform="matrix(721.094, 0, 0, -482.937, 97213.595, -49874.512)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#cbced0"/><stop offset="1" stop-color="#84838b"/></linearGradient><linearGradient id="b" x1="-135.378" y1="-102.985" x2="-135.339" y2="-103.024" gradientTransform="matrix(398, 0, 0, -406.124, 53893, -41812.836)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#276dc3"/><stop offset="1" stop-color="#165caa"/></linearGradient></defs><title>file_type_r</title><path d="M16,23.956c-7.732,0-14-4.2-14-9.376S8.268,5.2,16,5.2,30,9.4,30,14.58,23.732,23.956,16,23.956ZM18.143,8.87C12.266,8.87,7.5,11.74,7.5,15.28s4.764,6.41,10.641,6.41,10.214-1.962,10.214-6.41S24.02,8.87,18.143,8.87Z" style="fill:url(#a)"/><path d="M23.321,19.726a10.545,10.545,0,0,1,1.34.5,2.591,2.591,0,0,1,.68.485,1.835,1.835,0,0,1,.311.447l3.339,5.63-5.4,0-2.524-4.74a6.1,6.1,0,0,0-.835-1.145.879.879,0,0,0-.641-.291H18.311v6.173l-4.776,0V11.026h9.591S27.5,11.1,27.5,15.261,23.321,19.726,23.321,19.726Zm-2.077-5.28-2.891,0v2.681h2.893a1.323,1.323,0,0,0,1.34-1.364A1.247,1.247,0,0,0,21.244,14.447Z" style="fill:url(#b)"/>',
|
||
inlineComment: [
|
||
"#"
|
||
]
|
||
},
|
||
"Racket": {
|
||
colour: "#9f1d20",
|
||
icon: '<circle cx="16" cy="16" r="14" style="fill:#fff"/><path d="M27.016,24.641a14,14,0,0,0-15.8-21.8C16.9,5.822,24.413,15.549,27.016,24.641Z" style="fill:#3e5ba9"/><path d="M13.995,10.93a24.3,24.3,0,0,0-7.22-5.46A14,14,0,0,0,5.463,25.217,39.56,39.56,0,0,1,13.995,10.93Z" style="fill:#9f1d20"/><path d="M16.575,14.1A32.645,32.645,0,0,0,9.43,28.365a14.016,14.016,0,0,0,13.3-.089A38.642,38.642,0,0,0,16.575,14.1Z" style="fill:#9f1d20"/>'
|
||
},
|
||
"Razor C#": {
|
||
colour: "#368832",
|
||
icon: '<path d="M23.844,27.692a16.332,16.332,0,0,1-6.645,1.3q-6.364,0-10.013-3.243a11.3,11.3,0,0,1-3.649-8.9A13.716,13.716,0,0,1,7.322,6.951,12.716,12.716,0,0,1,16.9,3.008a11.676,11.676,0,0,1,8.425,3.006,9.994,9.994,0,0,1,3.142,7.533,10.187,10.187,0,0,1-2.318,7.114,7.532,7.532,0,0,1-5.817,2.547,2.613,2.613,0,0,1-1.845-.642,2.323,2.323,0,0,1-.764-1.6,4.9,4.9,0,0,1-4.148,2.243,4.6,4.6,0,0,1-3.507-1.479,5.706,5.706,0,0,1-1.384-4.063,9.913,9.913,0,0,1,2.2-6.357q2.2-2.763,4.8-2.763a5.063,5.063,0,0,1,4.256,1.716l.311-1.338h2.405l-2.081,9.08a10.716,10.716,0,0,0-.352,2.243q0,.972.744.972a4.819,4.819,0,0,0,3.877-2.047,8.93,8.93,0,0,0,1.621-5.681,7.98,7.98,0,0,0-2.675-6.175,9.887,9.887,0,0,0-6.919-2.432A10.6,10.6,0,0,0,8.713,8.352a12.066,12.066,0,0,0-3.2,8.495,9.561,9.561,0,0,0,3.06,7.573q3.06,2.7,8.586,2.7a13.757,13.757,0,0,0,5.675-1.054ZM19.466,12.25a3.977,3.977,0,0,0-3.6-1.716q-1.824,0-3.263,2.23a8.726,8.726,0,0,0-1.439,4.824q0,3.635,2.905,3.635A3.771,3.771,0,0,0,16.72,20.04a6.309,6.309,0,0,0,1.7-3.2Z" style="fill:#368832"/>'
|
||
},
|
||
"React JSX": {
|
||
colour: "#00d8ff",
|
||
icon: '<circle cx="16" cy="15.974" r="2.5" style="fill:#00d8ff"/><path d="M16,21.706a28.385,28.385,0,0,1-8.88-1.2,11.3,11.3,0,0,1-3.657-1.958A3.543,3.543,0,0,1,2,15.974c0-1.653,1.816-3.273,4.858-4.333A28.755,28.755,0,0,1,16,10.293a28.674,28.674,0,0,1,9.022,1.324,11.376,11.376,0,0,1,3.538,1.866A3.391,3.391,0,0,1,30,15.974c0,1.718-2.03,3.459-5.3,4.541A28.8,28.8,0,0,1,16,21.706Zm0-10.217a27.948,27.948,0,0,0-8.749,1.282c-2.8.977-4.055,2.313-4.055,3.2,0,.928,1.349,2.387,4.311,3.4A27.21,27.21,0,0,0,16,20.51a27.6,27.6,0,0,0,8.325-1.13C27.4,18.361,28.8,16.9,28.8,15.974a2.327,2.327,0,0,0-1.01-1.573,10.194,10.194,0,0,0-3.161-1.654A27.462,27.462,0,0,0,16,11.489Z" style="fill:#00d8ff"/><path d="M10.32,28.443a2.639,2.639,0,0,1-1.336-.328c-1.432-.826-1.928-3.208-1.327-6.373a28.755,28.755,0,0,1,3.4-8.593h0A28.676,28.676,0,0,1,16.71,5.995a11.376,11.376,0,0,1,3.384-2.133,3.391,3.391,0,0,1,2.878,0c1.489.858,1.982,3.486,1.287,6.859a28.806,28.806,0,0,1-3.316,8.133,28.385,28.385,0,0,1-5.476,7.093,11.3,11.3,0,0,1-3.523,2.189A4.926,4.926,0,0,1,10.32,28.443Zm1.773-14.7a27.948,27.948,0,0,0-3.26,8.219c-.553,2.915-.022,4.668.75,5.114.8.463,2.742.024,5.1-2.036a27.209,27.209,0,0,0,5.227-6.79,27.6,27.6,0,0,0,3.181-7.776c.654-3.175.089-5.119-.713-5.581a2.327,2.327,0,0,0-1.868.089A10.194,10.194,0,0,0,17.5,6.9a27.464,27.464,0,0,0-5.4,6.849Z" style="fill:#00d8ff"/><path d="M21.677,28.456c-1.355,0-3.076-.82-4.868-2.361a28.756,28.756,0,0,1-5.747-7.237h0a28.676,28.676,0,0,1-3.374-8.471,11.376,11.376,0,0,1-.158-4A3.391,3.391,0,0,1,8.964,3.9c1.487-.861,4.01.024,6.585,2.31a28.8,28.8,0,0,1,5.39,6.934,28.384,28.384,0,0,1,3.41,8.287,11.3,11.3,0,0,1,.137,4.146,3.543,3.543,0,0,1-1.494,2.555A2.59,2.59,0,0,1,21.677,28.456Zm-9.58-10.2a27.949,27.949,0,0,0,5.492,6.929c2.249,1.935,4.033,2.351,4.8,1.9.8-.465,1.39-2.363.782-5.434A27.212,27.212,0,0,0,19.9,13.74,27.6,27.6,0,0,0,14.755,7.1c-2.424-2.152-4.39-2.633-5.191-2.169a2.327,2.327,0,0,0-.855,1.662,10.194,10.194,0,0,0,.153,3.565,27.465,27.465,0,0,0,3.236,8.1Z" style="fill:#00d8ff"/>'
|
||
},
|
||
"React TSX": {
|
||
colour: "#007acc",
|
||
icon: '<circle cx="16" cy="15.974" r="2.5" style="fill:#007acc"/><path d="M16,21.706a28.385,28.385,0,0,1-8.88-1.2,11.3,11.3,0,0,1-3.657-1.958A3.543,3.543,0,0,1,2,15.974c0-1.653,1.816-3.273,4.858-4.333A28.755,28.755,0,0,1,16,10.293a28.674,28.674,0,0,1,9.022,1.324,11.376,11.376,0,0,1,3.538,1.866A3.391,3.391,0,0,1,30,15.974c0,1.718-2.03,3.459-5.3,4.541A28.8,28.8,0,0,1,16,21.706Zm0-10.217a27.948,27.948,0,0,0-8.749,1.282c-2.8.977-4.055,2.313-4.055,3.2,0,.928,1.349,2.387,4.311,3.4A27.21,27.21,0,0,0,16,20.51a27.6,27.6,0,0,0,8.325-1.13C27.4,18.361,28.8,16.9,28.8,15.974a2.327,2.327,0,0,0-1.01-1.573,10.194,10.194,0,0,0-3.161-1.654A27.462,27.462,0,0,0,16,11.489Z" style="fill:#007acc"/><path d="M10.32,28.443a2.639,2.639,0,0,1-1.336-.328c-1.432-.826-1.928-3.208-1.327-6.373a28.755,28.755,0,0,1,3.4-8.593h0A28.676,28.676,0,0,1,16.71,5.995a11.376,11.376,0,0,1,3.384-2.133,3.391,3.391,0,0,1,2.878,0c1.489.858,1.982,3.486,1.287,6.859a28.806,28.806,0,0,1-3.316,8.133,28.385,28.385,0,0,1-5.476,7.093,11.3,11.3,0,0,1-3.523,2.189A4.926,4.926,0,0,1,10.32,28.443Zm1.773-14.7a27.948,27.948,0,0,0-3.26,8.219c-.553,2.915-.022,4.668.75,5.114.8.463,2.742.024,5.1-2.036a27.209,27.209,0,0,0,5.227-6.79,27.6,27.6,0,0,0,3.181-7.776c.654-3.175.089-5.119-.713-5.581a2.327,2.327,0,0,0-1.868.089A10.194,10.194,0,0,0,17.5,6.9a27.464,27.464,0,0,0-5.4,6.849Z" style="fill:#007acc"/><path d="M21.677,28.456c-1.355,0-3.076-.82-4.868-2.361a28.756,28.756,0,0,1-5.747-7.237h0a28.676,28.676,0,0,1-3.374-8.471,11.376,11.376,0,0,1-.158-4A3.391,3.391,0,0,1,8.964,3.9c1.487-.861,4.01.024,6.585,2.31a28.8,28.8,0,0,1,5.39,6.934,28.384,28.384,0,0,1,3.41,8.287,11.3,11.3,0,0,1,.137,4.146,3.543,3.543,0,0,1-1.494,2.555A2.59,2.59,0,0,1,21.677,28.456Zm-9.58-10.2a27.949,27.949,0,0,0,5.492,6.929c2.249,1.935,4.033,2.351,4.8,1.9.8-.465,1.39-2.363.782-5.434A27.212,27.212,0,0,0,19.9,13.74,27.6,27.6,0,0,0,14.755,7.1c-2.424-2.152-4.39-2.633-5.191-2.169a2.327,2.327,0,0,0-.855,1.662,10.194,10.194,0,0,0,.153,3.565,27.465,27.465,0,0,0,3.236,8.1Z" style="fill:#007acc"/>'
|
||
},
|
||
"Reason": {
|
||
colour: "#dd4b39",
|
||
icon: '<polyline points="2 2 30 2 30 30 2 30 2 2" style="fill:#dd4b39"/><path d="M9.051,17.527q2.537,0,5.072,0A4.947,4.947,0,0,1,17.1,18.5a3.29,3.29,0,0,1,1.128,2.267,4.117,4.117,0,0,1-.778,3.022,3.6,3.6,0,0,1-1.137.905l2.247,3.549-3.061,0-1.6-3.043-2.154,0,0,3.032H9.051V17.527m2.69,2.128,0,3.438,1.989,0a2.184,2.184,0,0,0,1.468-.452,1.814,1.814,0,0,0,.482-1.544,1.469,1.469,0,0,0-.705-1.18,2.768,2.768,0,0,0-1.437-.269C12.94,19.654,11.741,19.655,11.741,19.655Zm8.384-2.13h8.35v2.13h-5.66V21.8l5.11,0v2.119H22.82V26.1h5.824v2.142H20.125V17.525Z" style="fill:#fff"/>'
|
||
},
|
||
"Rego": {
|
||
colour: "#78929a",
|
||
icon: '<defs><clipPath id="a"><path d="M7.055,16.241c3.415-10.22,14.759-9.473,17.924,0l.1,5.893a15.562,15.562,0,0,0-9.036,7.246A17.641,17.641,0,0,0,7.03,22.346Z" style="fill:none"/></clipPath></defs><title>file_type_rego</title><path d="M7.03,16.241l2.6-4.559c-2.418-.312-2.606-3.431-.8-9.062C3.809,8.853,2.42,10.228,7.03,16.241Z" style="fill:#bfbfbf;fill-rule:evenodd"/><path d="M24.97,16.241l-2.595-4.559c2.418-.312,2.606-3.431.8-9.062C28.191,8.853,29.58,10.228,24.97,16.241Z" style="fill:#bfbfbf;fill-rule:evenodd"/><path d="M7.055,16.241c3.415-10.22,14.759-9.473,17.924,0l.1,5.893a15.562,15.562,0,0,0-9.036,7.246A17.641,17.641,0,0,0,7.03,22.346Z" style="fill:none"/><g style="clip-path:url(#a)"><rect x="16.053" y="7.962" width="9.549" height="21.899" style="fill:#536367"/><rect x="5.322" y="7.962" width="10.732" height="21.899" style="fill:#78929a"/></g><circle cx="16.04" cy="16.241" r="1.166" style="fill:#fff"/>'
|
||
},
|
||
"ReScript": {
|
||
colour: "#e84f4f",
|
||
icon: '<defs><linearGradient id="a" x1="11.421" y1="-221.705" x2="21.509" y2="-248.792" gradientTransform="matrix(1, 0, 0, -1, 0, -218)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e84f4f"/><stop offset="0.409" stop-color="#db4646"/><stop offset="0.999" stop-color="#cb3939"/></linearGradient></defs><title>file_type_rescript</title><path d="M2,10.97c0-3.738,0-5.6.952-6.916a4.992,4.992,0,0,1,1.1-1.1C5.364,2,7.233,2,10.969,2H21.03c3.738,0,5.605,0,6.916.951a4.992,4.992,0,0,1,1.1,1.1C30,5.364,30,7.232,30,10.97V21.03c0,3.737,0,5.605-.952,6.916a4.966,4.966,0,0,1-1.1,1.1C26.636,30,24.768,30,21.03,30H10.969c-3.736,0-5.6,0-6.915-.952a4.966,4.966,0,0,1-1.1-1.1C2,26.636,2,24.767,2,21.03Z" style="fill:url(#a)"/><path d="M20.974,15.554a3.325,3.325,0,1,0-3.324-3.325A3.325,3.325,0,0,0,20.974,15.554Z" style="fill:#fff"/><path d="M9.316,11.809a4.676,4.676,0,0,1,.206-1.987A1.886,1.886,0,0,1,10.345,9a4.7,4.7,0,0,1,1.987-.205h2.64V21.045a4.686,4.686,0,0,1-.144,1.664,1.892,1.892,0,0,1-1.02,1.02,4.72,4.72,0,0,1-1.664.143,4.717,4.717,0,0,1-1.664-.143,1.892,1.892,0,0,1-1.02-1.02,4.72,4.72,0,0,1-.143-1.664Z" style="fill:#fff"/>'
|
||
},
|
||
"reST (reStructuredText)": {
|
||
colour: "#ce3f31",
|
||
icon: '<path d="M16,30A13.859,13.859,0,0,1,2.286,16,14.149,14.149,0,0,1,6.3,6.1,13.517,13.517,0,0,1,25.7,6.1,14.149,14.149,0,0,1,29.714,16,13.859,13.859,0,0,1,16,30Z" style="fill:#ce3f31"/><path d="M11.869,23.015h-.4a4.263,4.263,0,0,1-1.048-.113,1.387,1.387,0,0,1-.767-.548,2.2,2.2,0,0,1-.409-1.026A13.28,13.28,0,0,1,9.159,19.6a12.78,12.78,0,0,0-.08-1.687,1.773,1.773,0,0,0-.405-.924,1.325,1.325,0,0,0-1.026-.391V15.4a1.325,1.325,0,0,0,1.026-.391,1.773,1.773,0,0,0,.405-.924,12.78,12.78,0,0,0,.08-1.687,13.28,13.28,0,0,1,.084-1.731,2.2,2.2,0,0,1,.409-1.026,1.387,1.387,0,0,1,.767-.548,4.263,4.263,0,0,1,1.048-.113h.4v1.14h-.226q-.76,0-.931.4a7.72,7.72,0,0,0-.172,2.17,4.876,4.876,0,0,1-.416,2.316A2.117,2.117,0,0,1,8.859,16a2.089,2.089,0,0,1,1.264.986A4.876,4.876,0,0,1,10.54,19.3a7.72,7.72,0,0,0,.172,2.17q.172.4.931.4h.226Zm1.6-3.141h1.035V16.42h1.459l1.97,3.454h1.184L17.04,16.308a2.243,2.243,0,0,0,1.833-2.319c0-1.7-1.2-2.294-2.855-2.294H13.474Zm1.035-4.3V12.53h1.359c1.272,0,1.97.386,1.97,1.459s-.7,1.583-1.97,1.583Zm5.557-6.591h.4a4.263,4.263,0,0,1,1.048.113,1.387,1.387,0,0,1,.767.548,2.2,2.2,0,0,1,.409,1.026,13.28,13.28,0,0,1,.084,1.731,12.78,12.78,0,0,0,.08,1.687,1.773,1.773,0,0,0,.405.924,1.325,1.325,0,0,0,1.026.391v1.191a1.325,1.325,0,0,0-1.026.391,1.773,1.773,0,0,0-.405.924,12.78,12.78,0,0,0-.08,1.687,13.28,13.28,0,0,1-.084,1.731,2.2,2.2,0,0,1-.409,1.026,1.387,1.387,0,0,1-.767.548,4.263,4.263,0,0,1-1.048.113h-.4v-1.14h.226q.76,0,.931-.4A7.72,7.72,0,0,0,21.4,19.3a4.876,4.876,0,0,1,.416-2.316A2.089,2.089,0,0,1,23.075,16a2.117,2.117,0,0,1-1.264-.994,4.876,4.876,0,0,1-.416-2.316,7.72,7.72,0,0,0-.172-2.17q-.172-.4-.931-.4h-.226Z" style="fill:#fff"/>'
|
||
},
|
||
"Robot Framework": {
|
||
icon: '<circle cx="16" cy="16" r="14" style="fill:#fff"/><path d="M10.387,14.6a2.727,2.727,0,0,1,5.453,0,.99.99,0,1,1-1.98,0,.746.746,0,0,0-1.492,0,.99.99,0,1,1-1.98,0m11.3,4.586a.991.991,0,0,1-.992.992H11.508a.992.992,0,0,1,0-1.984h9.184a.994.994,0,0,1,.992.992M17.391,15.16a.992.992,0,0,1,.27-1.375l2.293-1.551a.989.989,0,1,1,1.109,1.637l-2.3,1.551a.965.965,0,0,1-.551.172.994.994,0,0,1-.824-.434m6.289,6.094a.707.707,0,0,1-.207.5l-1.707,1.707a.707.707,0,0,1-.5.207H10.8a.707.707,0,0,1-.5-.207L8.6,21.754a.707.707,0,0,1-.207-.5V10.8a.707.707,0,0,1,.207-.5L10.3,8.594a.707.707,0,0,1,.5-.207H21.266a.707.707,0,0,1,.5.207L23.473,10.3a.707.707,0,0,1,.207.5ZM25.129,9.16,22.9,6.93A1.807,1.807,0,0,0,21.629,6.4H10.438a1.807,1.807,0,0,0-1.273.527L6.938,9.16a1.8,1.8,0,0,0-.527,1.27V21.621a1.8,1.8,0,0,0,.527,1.273l2.227,2.23a1.81,1.81,0,0,0,1.273.523H21.629a1.8,1.8,0,0,0,1.273-.523l2.227-2.23a1.784,1.784,0,0,0,.527-1.273V10.434a1.784,1.784,0,0,0-.527-1.273"/>'
|
||
},
|
||
"Ruby": {
|
||
colour: "#b31301",
|
||
icon: '<defs><linearGradient id="a" x1="-235.957" y1="-308.579" x2="-235.986" y2="-308.527" gradientTransform="matrix(202.935, 0, 0, -202.78, 47910.461, -62541.16)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fb7655"/><stop offset="0.41" stop-color="#e42b1e"/><stop offset="0.99" stop-color="#900"/><stop offset="1" stop-color="#900"/></linearGradient><linearGradient id="b" x1="-235.571" y1="-309.087" x2="-235.697" y2="-309.041" gradientTransform="matrix(60.308, 0, 0, -111.778, 14236.351, -34525.395)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#871101"/><stop offset="0.99" stop-color="#911209"/><stop offset="1" stop-color="#911209"/></linearGradient><linearGradient id="c" x1="-235.896" y1="-313.362" x2="-235.937" y2="-313.129" gradientTransform="matrix(188.32, 0, 0, -21.986, 44447.302, -6856.882)" xlink:href="#b"/><linearGradient id="d" x1="-233.515" y1="-309.082" x2="-233.497" y2="-309.161" gradientTransform="matrix(65.222, 0, 0, -97.1, 15237.802, -29991.814)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.23" stop-color="#e57252"/><stop offset="0.46" stop-color="#de3b20"/><stop offset="0.99" stop-color="#a60003"/><stop offset="1" stop-color="#a60003"/></linearGradient><linearGradient id="e" x1="-235.314" y1="-309.534" x2="-235.31" y2="-309.607" gradientTransform="matrix(105.32, 0, 0, -106.825, 24798.925, -33053.152)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.23" stop-color="#e4714e"/><stop offset="0.56" stop-color="#be1a0d"/><stop offset="0.99" stop-color="#a80d00"/><stop offset="1" stop-color="#a80d00"/></linearGradient><linearGradient id="f" x1="-235.882" y1="-311.851" x2="-235.869" y2="-311.935" gradientTransform="matrix(94.321, 0, 0, -66.418, 22271.499, -20707.004)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.18" stop-color="#e46342"/><stop offset="0.4" stop-color="#c82410"/><stop offset="0.99" stop-color="#a80d00"/><stop offset="1" stop-color="#a80d00"/></linearGradient><linearGradient id="g" x1="-235.412" y1="-321.074" x2="-235.333" y2="-320.958" gradientTransform="matrix(70.767, 0, 0, -24.301, 16678.116, -7798.647)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.54" stop-color="#c81f11"/><stop offset="0.99" stop-color="#bf0905"/><stop offset="1" stop-color="#bf0905"/></linearGradient><linearGradient id="h" x1="-223.821" y1="-310.116" x2="-223.796" y2="-310.18" gradientTransform="matrix(18.177, 0, 0, -72.645, 4071.017, -22510.233)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="0.31" stop-color="#de4024"/><stop offset="0.99" stop-color="#bf190b"/><stop offset="1" stop-color="#bf190b"/></linearGradient><linearGradient id="i" x1="-235.561" y1="-309.258" x2="-235.424" y2="-309.116" gradientTransform="matrix(158.162, 0, 0, -157.937, 37256.313, -48819.382)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#bd0012"/><stop offset="0.07" stop-color="#fff"/><stop offset="0.17" stop-color="#fff"/><stop offset="0.27" stop-color="#c82f1c"/><stop offset="0.33" stop-color="#820c01"/><stop offset="0.46" stop-color="#a31601"/><stop offset="0.72" stop-color="#b31301"/><stop offset="0.99" stop-color="#e82609"/><stop offset="1" stop-color="#e82609"/></linearGradient><linearGradient id="j" x1="-235.424" y1="-309.143" x2="-235.476" y2="-309.126" gradientTransform="matrix(127.074, 0, 0, -97.409, 29932.229, -30086.947)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8c0c01"/><stop offset="0.54" stop-color="#990c00"/><stop offset="0.99" stop-color="#a80d0e"/><stop offset="1" stop-color="#a80d0e"/></linearGradient><linearGradient id="k" x1="-235.839" y1="-309.604" x2="-235.901" y2="-309.555" gradientTransform="matrix(94.011, 0, 0, -105.603, 22198.743, -32676.856)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#7e110b"/><stop offset="0.99" stop-color="#9e0c00"/><stop offset="1" stop-color="#9e0c00"/></linearGradient><linearGradient id="l" x1="-235.854" y1="-311.24" x2="-235.891" y2="-311.202" gradientTransform="matrix(79.702, 0, 0, -81.791, 18827.397, -25447.905)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#79130d"/><stop offset="0.99" stop-color="#9e120b"/><stop offset="1" stop-color="#9e120b"/></linearGradient><radialGradient id="m" cx="-235.882" cy="-312.543" r="0.076" gradientTransform="matrix(93.113, 0, 0, -48.655, 21986.073, -15193.61)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#a80d00"/><stop offset="0.99" stop-color="#7e0e08"/><stop offset="1" stop-color="#7e0e08"/></radialGradient><radialGradient id="n" cx="-235.282" cy="-309.704" r="0.097" gradientTransform="matrix(97.434, 0, 0, -75.848, 22937.057, -23467.84)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#a30c00"/><stop offset="0.99" stop-color="#800e08"/><stop offset="1" stop-color="#800e08"/></radialGradient><linearGradient id="o" x1="-231.241" y1="-309.435" x2="-231.299" y2="-309.337" gradientTransform="matrix(40.137, 0, 0, -81.143, 9286.998, -25078.589)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8b2114"/><stop offset="0.43" stop-color="#9e100a"/><stop offset="0.99" stop-color="#b3100c"/><stop offset="1" stop-color="#b3100c"/></linearGradient><linearGradient id="p" x1="-235.898" y1="-317.466" x2="-235.831" y2="-317.537" gradientTransform="matrix(78.099, 0, 0, -32.624, 18447.361, -10353.553)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b31000"/><stop offset="0.44" stop-color="#910f08"/><stop offset="0.99" stop-color="#791c12"/><stop offset="1" stop-color="#791c12"/></linearGradient></defs><title>file_type_ruby</title><path d="M23.693,20.469,7.707,29.961l20.7-1.4L30,7.685Z" style="fill:url(#a)"/><path d="M28.44,28.542,26.661,16.263l-4.846,6.4Z" style="fill:url(#b)"/><path d="M28.464,28.542,15.43,27.519,7.776,29.934Z" style="fill:url(#c)"/><path d="M7.794,29.937,11.05,19.27,3.885,20.8Z" style="fill:url(#d)"/><path d="M21.813,22.7l-3-11.735L10.243,19Z" style="fill:url(#e)"/><path d="M29.32,11.127l-8.1-6.619-2.257,7.3Z" style="fill:url(#f)"/><path d="M25.53,2.148,20.763,4.782l-3.007-2.67Z" style="fill:url(#g)"/><path d="M2,24.38l2-3.642L2.382,16.4Z" style="fill:url(#h)"/><path d="M2.274,16.263,3.9,20.873l7.062-1.584L19.024,11.8,21.3,4.569l-3.583-2.53-6.091,2.28C9.706,6.1,5.982,9.635,5.848,9.7s-2.459,4.464-3.574,6.562Z" style="fill:#fff"/><path d="M7.981,7.981C12.14,3.858,17.5,1.421,19.559,3.5s-.124,7.121-4.283,11.244S5.821,21.434,3.765,19.358,3.822,12.1,7.981,7.981Z" style="fill:url(#i)"/><path d="M7.794,29.933l3.231-10.7,10.729,3.447c-3.879,3.638-8.194,6.713-13.96,7.254Z" style="fill:url(#j)"/><path d="M19.038,11.774l2.754,10.91c3.24-3.407,6.149-7.07,7.573-11.6l-10.328.691Z" style="fill:url(#k)"/><path d="M29.337,11.139c1.1-3.327,1.357-8.1-3.841-8.985L21.231,4.509l8.106,6.629Z" style="fill:url(#l)"/><path d="M2,24.332c.153,5.49,4.114,5.572,5.8,5.62l-3.9-9.1L2,24.332Z" style="fill:#9e1209"/><path d="M19.053,11.791c2.49,1.531,7.509,4.6,7.61,4.661a17.552,17.552,0,0,0,2.619-5.343l-10.229.683Z" style="fill:url(#m)"/><path d="M11.021,19.232l4.319,8.332a27.924,27.924,0,0,0,6.385-4.88l-10.7-3.452Z" style="fill:url(#n)"/><path d="M3.887,20.861l-.612,7.287c1.155,1.577,2.743,1.714,4.409,1.591-1.205-3-3.614-9-3.8-8.878Z" style="fill:url(#o)"/><path d="M21.206,4.528l8.58,1.2c-.458-1.94-1.864-3.192-4.261-3.584l-4.319,2.38Z" style="fill:url(#p)"/>',
|
||
inlineComment: [
|
||
"#"
|
||
]
|
||
},
|
||
"Rust": {
|
||
colour: "#a04f12",
|
||
icon: '<defs><radialGradient id="a" cx="-492.035" cy="-883.37" r="13.998" gradientTransform="matrix(0.866, -0.5, -0.3, -0.52, 177.106, -689.033)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#7d7d7d"/><stop offset="0.267" stop-color="#7e7c7a"/><stop offset="0.45" stop-color="#817871"/><stop offset="0.608" stop-color="#867162"/><stop offset="0.753" stop-color="#8d684c"/><stop offset="0.886" stop-color="#965c30"/><stop offset="1" stop-color="#a04f12"/></radialGradient></defs><title>file_type_rust</title><path d="M15.124,5.3a.832.832,0,1,1,.832.832h0a.831.831,0,0,1-.832-.832M5.2,12.834a.832.832,0,1,1,.832.832h0a.832.832,0,0,1-.832-.832m19.856.039a.832.832,0,1,1,.832.832.831.831,0,0,1-.832-.832h0M7.605,14.013a.76.76,0,0,0,.386-1l-.369-.835H9.074v6.545H6.144a10.247,10.247,0,0,1-.332-3.911Zm6.074.161V12.245h3.458c.179,0,1.261.206,1.261,1.016,0,.672-.83.913-1.513.913ZM8.958,24.561a.832.832,0,1,1,.832.832.831.831,0,0,1-.832-.832h0m12.331.039a.832.832,0,1,1,.832.832.832.832,0,0,1-.832-.832h0m.257-1.887a.758.758,0,0,0-.9.584l-.418,1.949a10.249,10.249,0,0,1-8.545-.041l-.417-1.949a.759.759,0,0,0-.9-.583h0l-1.721.37a10.233,10.233,0,0,1-.89-1.049h8.374c.095,0,.158-.017.158-.1V18.928c0-.086-.063-.1-.158-.1h-2.45V16.947h2.649a1.665,1.665,0,0,1,1.629,1.412c.105.413.336,1.757.494,2.187.157.483.8,1.447,1.482,1.447h4.323a10.243,10.243,0,0,1-.949,1.1Zm4.65-7.821a10.261,10.261,0,0,1,.022,1.779H25.167c-.105,0-.148.069-.148.172v.483c0,1.136-.641,1.384-1.2,1.447-.535.06-1.128-.224-1.2-.551a3.616,3.616,0,0,0-1.671-2.808c1.03-.654,2.1-1.619,2.1-2.911A3.292,3.292,0,0,0,21.44,9.8a4.559,4.559,0,0,0-2.2-.724H8.367A10.246,10.246,0,0,1,14.1,5.84l1.282,1.344a.758.758,0,0,0,1.072.026h0l1.434-1.372a10.248,10.248,0,0,1,7.015,5l-.982,2.217a.761.761,0,0,0,.386,1Zm2.448.036-.033-.343,1.011-.943a.42.42,0,0,0-.013-.595.428.428,0,0,0-.121-.081L28.2,12.483l-.1-.334.806-1.12a.422.422,0,0,0-.13-.581.43.43,0,0,0-.133-.055l-1.363-.222-.164-.306.573-1.257a.419.419,0,0,0-.236-.544.426.426,0,0,0-.146-.029l-1.383.048L25.7,7.819l.318-1.347a.421.421,0,0,0-.343-.487.435.435,0,0,0-.144,0L24.183,6.3l-.266-.219L23.966,4.7a.421.421,0,0,0-.431-.411.426.426,0,0,0-.141.028l-1.257.573-.306-.164-.222-1.363a.421.421,0,0,0-.5-.318.43.43,0,0,0-.133.055l-1.121.806-.333-.1-.483-1.293a.421.421,0,0,0-.555-.215.442.442,0,0,0-.12.08L17.418,3.39l-.343-.033L16.347,2.18a.421.421,0,0,0-.688,0l-.728,1.177-.343.033-.943-1.012a.421.421,0,0,0-.595.015.442.442,0,0,0-.08.12L12.483,3.8l-.333.1-1.12-.8a.422.422,0,0,0-.581.13.43.43,0,0,0-.055.133l-.222,1.363-.306.164L8.608,4.317a.421.421,0,0,0-.544.239.444.444,0,0,0-.028.144l.048,1.383L7.818,6.3,6.471,5.984a.421.421,0,0,0-.487.343.435.435,0,0,0,0,.144L6.3,7.819l-.218.265L4.7,8.036a.422.422,0,0,0-.383.573L4.89,9.866l-.164.306-1.363.222a.42.42,0,0,0-.318.5.43.43,0,0,0,.055.133l.806,1.12-.1.334-1.293.483a.421.421,0,0,0-.215.555.414.414,0,0,0,.081.121l1.011.943-.033.343-1.177.728a.421.421,0,0,0,0,.688l1.177.728.033.343-1.011.943a.421.421,0,0,0,.015.595.436.436,0,0,0,.119.08l1.293.483.1.334L3.1,20.972a.421.421,0,0,0,.131.581.43.43,0,0,0,.133.055l1.363.222.164.307-.573,1.257a.422.422,0,0,0,.24.545.438.438,0,0,0,.143.028l1.383-.048.219.266-.317,1.348a.42.42,0,0,0,.341.486.4.4,0,0,0,.146,0L7.818,25.7l.266.218L8.035,27.3a.419.419,0,0,0,.429.41.413.413,0,0,0,.143-.028l1.257-.573.306.164.222,1.362a.421.421,0,0,0,.5.319.407.407,0,0,0,.133-.055l1.12-.807.334.1.483,1.292a.422.422,0,0,0,.556.214.436.436,0,0,0,.119-.08l.943-1.011.343.034.728,1.177a.422.422,0,0,0,.588.1.413.413,0,0,0,.1-.1l.728-1.177.343-.034.943,1.011a.421.421,0,0,0,.595-.015.436.436,0,0,0,.08-.119l.483-1.292.334-.1,1.12.807a.421.421,0,0,0,.581-.131.43.43,0,0,0,.055-.133l.222-1.362.306-.164,1.257.573a.421.421,0,0,0,.544-.239.438.438,0,0,0,.028-.143l-.048-1.384.265-.218,1.347.317a.421.421,0,0,0,.487-.34.447.447,0,0,0,0-.146L25.7,24.183l.218-.266,1.383.048a.421.421,0,0,0,.41-.431.4.4,0,0,0-.028-.142l-.573-1.257.164-.307,1.363-.222a.421.421,0,0,0,.319-.5.434.434,0,0,0-.056-.135l-.806-1.12.1-.334,1.293-.483a.42.42,0,0,0,.215-.554.414.414,0,0,0-.081-.121l-1.011-.943.033-.343,1.177-.728a.421.421,0,0,0,0-.688Z" style="fill:url(#a)"/>'
|
||
},
|
||
"SAS": {
|
||
colour: "#002bb5",
|
||
icon: '<path d="M16.018,30A14,14,0,1,1,30,16.2,14,14,0,0,1,16.018,30Z" style="fill:#002bb5"/><path d="M9.17,22.63c.026.061.046.124.077.183,2.215,4.206,7.738,4.616,10.756,2.454a6.017,6.017,0,0,0,1.731-8.583,15.7,15.7,0,0,0-1.318-1.731c-.881-1.067-1.755-2.14-2.636-3.207-.366-.443-.767-.835-1.416-.683a1.393,1.393,0,0,0-.816,2.311c.888,1.106,1.819,2.177,2.7,3.286a3.874,3.874,0,0,1,.589,4.4,5.423,5.423,0,0,1-5,3.134A6.6,6.6,0,0,1,9.17,22.63Z" style="fill:#fff"/><path d="M22.494,9.609c.08-.248-.066-.37-.141-.509A7.477,7.477,0,0,0,12.6,6.237c-3.3,1.63-5.1,5.352-2.637,9.147a56.53,56.53,0,0,0,4.135,5.12,1.012,1.012,0,0,0,.709.345,1.384,1.384,0,0,0,1.428-.765,1.247,1.247,0,0,0-.173-1.507c-.876-1.051-1.769-2.088-2.615-3.162a4.13,4.13,0,0,1,.323-5.771A6.054,6.054,0,0,1,19.984,8.13,5.19,5.19,0,0,1,22.494,9.609Z" style="fill:#fff"/>'
|
||
},
|
||
"Sass (Sass)": {
|
||
colour: "#cd6799",
|
||
icon: '<path d="M26.11,17.572a5.8,5.8,0,0,0-2.537.588,5.345,5.345,0,0,1-.568-1.314,3.53,3.53,0,0,1-.051-1.1,9.811,9.811,0,0,1,.332-1.192c-.005-.051-.061-.292-.624-.3s-1.048.107-1.1.256a6.171,6.171,0,0,0-.235.834,19.686,19.686,0,0,1-1.713,3.294,3.186,3.186,0,0,1-.44-2.066,9.811,9.811,0,0,1,.332-1.192c-.005-.051-.061-.292-.624-.3s-1.048.107-1.1.256-.118.5-.235.834-1.483,3.386-1.841,4.173c-.184.4-.343.726-.455.946h0a.233.233,0,0,1-.02.041c-.1.189-.153.292-.153.292v.005c-.077.138-.159.266-.2.266a1.711,1.711,0,0,1,.01-.869c.2-1.059.69-2.705.685-2.762,0-.031.092-.317-.317-.465a.508.508,0,0,0-.578.1c-.036,0-.061.087-.061.087s.445-1.851-.849-1.851a3.855,3.855,0,0,0-2.475,1.683c-.348.189-1.089.593-1.882,1.028-.3.169-.614.338-.905.5-.02-.02-.041-.046-.061-.066C6.87,17.6,3.975,16.416,4.1,14.171c.046-.818.327-2.966,5.559-5.575,4.306-2.122,7.733-1.534,8.326-.23.849,1.862-1.836,5.319-6.285,5.82a3.351,3.351,0,0,1-2.813-.711c-.235-.256-.271-.271-.358-.22-.143.077-.051.307,0,.44a2.626,2.626,0,0,0,1.606,1.263,8.55,8.55,0,0,0,5.217-.517c2.7-1.043,4.8-3.943,4.184-6.372-.619-2.465-4.71-3.278-8.582-1.9A19.5,19.5,0,0,0,4.359,9.952c-2.133,1.995-2.47,3.728-2.332,4.455.5,2.578,4.051,4.255,5.472,5.5-.072.041-.138.077-.194.107-.711.353-3.421,1.77-4.1,3.268-.767,1.7.123,2.915.711,3.079a4.374,4.374,0,0,0,4.71-1.908A4.725,4.725,0,0,0,9.049,20.1a.107.107,0,0,0-.02-.031l.557-.327c.363-.215.721-.414,1.028-.578a6.74,6.74,0,0,0-.363,1.862,3.886,3.886,0,0,0,.834,2.7.921.921,0,0,0,.675.22c.6,0,.875-.5,1.176-1.094.368-.726.7-1.57.7-1.57s-.414,2.281.711,2.281c.409,0,.823-.532,1.008-.8v.005s.01-.015.031-.051l.066-.107v-.01c.164-.286.532-.936,1.079-2.015.706-1.391,1.386-3.13,1.386-3.13a8.888,8.888,0,0,0,.271,1.13,10.643,10.643,0,0,0,.583,1.309c-.164.23-.266.358-.266.358l.005.005c-.133.174-.276.363-.435.547a16.3,16.3,0,0,0-1.314,1.647.447.447,0,0,0,.123.6,1.116,1.116,0,0,0,.685.113,3.147,3.147,0,0,0,1.028-.235,3.45,3.45,0,0,0,.885-.465,1.98,1.98,0,0,0,.849-1.744,3.521,3.521,0,0,0-.322-1.233c.051-.072.1-.143.148-.215a23.428,23.428,0,0,0,1.534-2.649,8.888,8.888,0,0,0,.271,1.13,7.57,7.57,0,0,0,.5,1.125A4.861,4.861,0,0,0,20.965,20.8c-.322.931-.072,1.35.4,1.447a1.425,1.425,0,0,0,.747-.153,3.4,3.4,0,0,0,.946-.486,2.126,2.126,0,0,0,1.043-1.729,3.268,3.268,0,0,0-.235-1.023,5.356,5.356,0,0,1,2.716-.312c2.434.286,2.915,1.805,2.823,2.445a1.618,1.618,0,0,1-.772,1.094c-.169.107-.225.143-.21.22.02.113.1.107.245.087A1.9,1.9,0,0,0,30,20.7c.077-1.5-1.355-3.145-3.887-3.13ZM7.33,23.9c-.808.88-1.933,1.212-2.419.931-.522-.3-.317-1.6.675-2.532a12.884,12.884,0,0,1,1.9-1.417c.118-.072.292-.174.5-.3l.056-.031h0l.123-.077A3.493,3.493,0,0,1,7.33,23.9Zm5.881-4c-.281.685-.869,2.44-1.227,2.342-.307-.082-.5-1.412-.061-2.726a6.193,6.193,0,0,1,.956-1.754c.44-.491.926-.655,1.043-.455a9.062,9.062,0,0,1-.711,2.593Zm4.853,2.322c-.118.061-.23.1-.281.072-.036-.02.051-.1.051-.1s.609-.655.849-.951c.138-.174.3-.378.476-.609V20.7c0,.782-.757,1.309-1.094,1.524Zm3.744-.854c-.087-.061-.072-.266.22-.905a3.408,3.408,0,0,1,.834-1.074,1.448,1.448,0,0,1,.082.471,1.547,1.547,0,0,1-1.135,1.509Z" style="fill:#cd6799"/>'
|
||
},
|
||
"Sass (SCSS)": {
|
||
colour: "#cd6799",
|
||
icon: '<path d="M16.171,18.7c-.481.221-1.008.509-2.063,1.088-.4.225-.818.45-1.207.662-.027-.027-.055-.061-.082-.089-2.087-2.23-5.947-3.805-5.783-6.8.061-1.091.436-3.955,7.413-7.433,5.742-2.83,10.311-2.046,11.1-.307C26.683,8.3,23.1,12.913,17.17,13.582a4.469,4.469,0,0,1-3.751-.948c-.314-.341-.361-.361-.477-.293-.191.1-.068.409,0,.586a3.5,3.5,0,0,0,2.141,1.684,11.4,11.4,0,0,0,6.956-.689c3.594-1.391,6.4-5.258,5.578-8.5-.825-3.287-6.281-4.371-11.443-2.537a26,26,0,0,0-8.79,5.047c-2.844,2.66-3.294,4.972-3.11,5.94.662,3.437,5.4,5.674,7.3,7.331-.1.055-.184.1-.259.143-.948.471-4.562,2.36-5.463,4.358-1.023,2.264.164,3.887.948,4.105a5.832,5.832,0,0,0,6.281-2.544,6.3,6.3,0,0,0,.559-5.8,5.03,5.03,0,0,1,.716-.477c.484-.286.945-.568,1.354-.786l0,0a10.475,10.475,0,0,1,4.475-.989c3.246.382,3.887,2.407,3.764,3.26a2.157,2.157,0,0,1-1.03,1.459c-.225.143-.3.191-.28.293.027.15.136.143.327.116a2.535,2.535,0,0,0,1.766-2.257c.1-2-1.807-4.194-5.183-4.174a7.753,7.753,0,0,0-2.946.587q-.225.093-.437.2Zm-4.825,7.839c-1.078,1.173-2.578,1.616-3.226,1.241-.7-.4-.423-2.135.9-3.376a17.18,17.18,0,0,1,2.53-1.889c.157-.1.389-.232.668-.4.048-.027.075-.041.075-.041l.164-.1A4.658,4.658,0,0,1,11.346,26.539Z" style="fill:#cd6799"/>'
|
||
},
|
||
"Scala": {
|
||
colour: "#e62d2a",
|
||
icon: '<defs><linearGradient id="a" x1="-134.907" y1="204.572" x2="-134.896" y2="204.572" gradientTransform="matrix(1538, 0, 0, -961.25, 207495, 196661)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e62d2a"/><stop offset="0.6" stop-color="#df3f3d"/><stop offset="0.8" stop-color="#df3f3d"/><stop offset="1" stop-color="#e62d2a"/></linearGradient><linearGradient id="b" x1="-134.907" y1="203.781" x2="-134.896" y2="203.781" gradientTransform="matrix(1538, 0, 0, -961.25, 207495, 195892)" xlink:href="#a"/><linearGradient id="c" x1="-134.907" y1="205.363" x2="-134.896" y2="205.363" gradientTransform="matrix(1538, 0, 0, -961.25, 207495, 197430)" xlink:href="#a"/></defs><title>file_type_scala</title><path d="M7.384,19.231v2.154c0,.363,7.833.971,12.937,2.154,2.465-.571,4.295-1.277,4.295-2.154V19.231c0-.877-1.83-1.582-4.295-2.154-5.1,1.183-12.937,1.791-12.937,2.154" style="fill:#7f0c1d"/><path d="M7.384,10.615v2.154c0,.363,7.833.971,12.937,2.154,2.465-.571,4.295-1.277,4.295-2.154V10.615c0-.877-1.83-1.582-4.295-2.154-5.1,1.183-12.937,1.791-12.937,2.154" style="fill:#7f0c1d"/><path d="M7.384,14.923v6.462c0-.538,17.232-1.615,17.232-4.308V10.615c0,2.692-17.232,3.769-17.232,4.308" style="fill:url(#a)"/><path d="M7.384,6.308V12.77c0-.538,17.232-1.615,17.232-4.308V2c0,2.692-17.232,3.769-17.232,4.308" style="fill:url(#b)"/><path d="M7.384,23.538V30c0-.538,17.232-1.615,17.232-4.308V19.231c0,2.692-17.232,3.769-17.232,4.308" style="fill:url(#c)"/>'
|
||
},
|
||
"Shell session": {
|
||
colour: "#d9b400",
|
||
icon: '<path d="M29.4,27.6H2.5V4.5H29.4Zm-25.9-1H28.4V5.5H3.5Z" style="fill:#d9b400"/><polygon points="6.077 19.316 5.522 18.484 10.366 15.255 5.479 11.184 6.12 10.416 12.035 15.344 6.077 19.316" style="fill:#d9b400"/><rect x="12.7" y="18.2" width="7.8" height="1" style="fill:#d9b400"/><rect x="2.5" y="5.5" width="26.9" height="1.9" style="fill:#d9b400"/>'
|
||
},
|
||
"Shell": {
|
||
colour: "#d9b400",
|
||
icon: '<path d="M29.4,27.6H2.5V4.5H29.4Zm-25.9-1H28.4V5.5H3.5Z" style="fill:#d9b400"/><polygon points="6.077 19.316 5.522 18.484 10.366 15.255 5.479 11.184 6.12 10.416 12.035 15.344 6.077 19.316" style="fill:#d9b400"/><rect x="12.7" y="18.2" width="7.8" height="1" style="fill:#d9b400"/><rect x="2.5" y="5.5" width="26.9" height="1.9" style="fill:#d9b400"/>'
|
||
},
|
||
"Smarty": {
|
||
colour: "#f6e200",
|
||
icon: '<defs><linearGradient id="a" x1="13.859" y1="29.219" x2="18.106" y2="29.219" gradientUnits="userSpaceOnUse"><stop offset="0.034" stop-color="#636361"/><stop offset="0.178" stop-color="#6c6d70"/><stop offset="0.219" stop-color="#6f7175"/><stop offset="0.309" stop-color="#616366"/><stop offset="0.481" stop-color="#3c3d3f"/><stop offset="0.716" stop-color="#010101"/><stop offset="0.719"/><stop offset="1" stop-color="#636a6e"/></linearGradient><linearGradient id="b" x1="15.178" y1="29.734" x2="16.787" y2="29.734" xlink:href="#a"/><linearGradient id="c" x1="15.277" y1="29.881" x2="16.688" y2="29.881" gradientUnits="userSpaceOnUse"><stop offset="0.034" stop-color="#9b9b98"/><stop offset="0.131" stop-color="#a4a5a7"/><stop offset="0.219" stop-color="#aeb1b8"/><stop offset="0.352" stop-color="#9fa4ab"/><stop offset="0.605" stop-color="#788188"/><stop offset="0.719" stop-color="#657076"/><stop offset="1" stop-color="#8b949a"/></linearGradient><radialGradient id="d" cx="-8.456" cy="-16.616" r="19.383" gradientTransform="translate(34.042 37.063) scale(1.054)" gradientUnits="userSpaceOnUse"><stop offset="0.034" stop-color="#70706e"/><stop offset="0.112" stop-color="#616261"/><stop offset="0.219" stop-color="#46474a"/><stop offset="0.408" stop-color="#48494c"/><stop offset="0.487" stop-color="#4e5053"/><stop offset="0.544" stop-color="#5a5c5f"/><stop offset="0.592" stop-color="#6a6e71"/><stop offset="0.633" stop-color="#7f8588"/><stop offset="0.667" stop-color="#979ea1"/><stop offset="0.719" stop-color="#3d4447"/><stop offset="1" stop-color="#656c70"/></radialGradient><linearGradient id="e" x1="16.126" y1="28.108" x2="16.05" y2="26.893" gradientUnits="userSpaceOnUse"><stop offset="0.034" stop-color="#9b9b98"/><stop offset="0.109" stop-color="#a5a6a7"/><stop offset="0.219" stop-color="#babcc4"/><stop offset="0.311" stop-color="#abaeb5"/><stop offset="0.487" stop-color="#84898f"/><stop offset="0.719" stop-color="#485054"/><stop offset="1" stop-color="#8b949a"/></linearGradient><linearGradient id="f" x1="16.013" y1="26.542" x2="15.895" y2="24.635" xlink:href="#e"/><linearGradient id="g" x1="16.023" y1="25.546" x2="15.887" y2="23.355" xlink:href="#e"/><linearGradient id="h" x1="16.013" y1="27.627" x2="15.895" y2="25.72" xlink:href="#e"/><linearGradient id="j" x1="13.68" y1="28.805" x2="18.284" y2="28.805" gradientUnits="userSpaceOnUse"><stop offset="0.034" stop-color="#545453"/><stop offset="0.071" stop-color="#616262"/><stop offset="0.143" stop-color="#848589"/><stop offset="0.219" stop-color="#aeb1b8"/><stop offset="0.352" stop-color="#9fa4ab"/><stop offset="0.605" stop-color="#788188"/><stop offset="0.719" stop-color="#657076"/><stop offset="1" stop-color="#505659"/></linearGradient><linearGradient id="k" x1="12.159" y1="25.813" x2="19.475" y2="25.813" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e5e1df"/><stop offset="0" stop-color="#dddad6"/><stop offset="0.038" stop-color="#ceccc9"/><stop offset="0.112" stop-color="#a7a9a8"/><stop offset="0.212" stop-color="#697072"/><stop offset="0.264" stop-color="#465054"/><stop offset="0.303" stop-color="#636c6f"/><stop offset="0.398" stop-color="#a5aaac"/><stop offset="0.478" stop-color="#d5d7d9"/><stop offset="0.539" stop-color="#f3f4f5"/><stop offset="0.573" stop-color="#fefeff"/><stop offset="0.62" stop-color="#f4f5f6"/><stop offset="0.699" stop-color="#dadcdf"/><stop offset="0.8" stop-color="#b0b4b9"/><stop offset="0.876" stop-color="#8b9298"/><stop offset="1" stop-color="#d1d3d4"/><stop offset="1" stop-color="#a7a9ac"/></linearGradient><linearGradient id="l" x1="12.159" y1="24.728" x2="19.475" y2="24.728" xlink:href="#k"/><linearGradient id="m" x1="12.159" y1="23.548" x2="19.475" y2="23.548" xlink:href="#k"/><linearGradient id="n" x1="12.159" y1="26.898" x2="19.475" y2="26.898" xlink:href="#k"/><linearGradient id="o" x1="12.159" y1="25.967" x2="19.475" y2="25.967" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e5e1df"/><stop offset="0" stop-color="#dde8d0"/><stop offset="0" stop-color="#d2f3ba"/><stop offset="0.036" stop-color="#c5e4b1"/><stop offset="0.105" stop-color="#a4bd98"/><stop offset="0.199" stop-color="#6e7f71"/><stop offset="0.264" stop-color="#465054"/><stop offset="0.303" stop-color="#636c6f"/><stop offset="0.398" stop-color="#a5aaac"/><stop offset="0.478" stop-color="#d5d7d9"/><stop offset="0.539" stop-color="#f3f4f5"/><stop offset="0.573" stop-color="#fefeff"/><stop offset="0.62" stop-color="#f4f5f6"/><stop offset="0.699" stop-color="#dadcdf"/><stop offset="0.8" stop-color="#b0b4b9"/><stop offset="0.876" stop-color="#8b9298"/><stop offset="1" stop-color="#d1d3d4"/><stop offset="1" stop-color="#a7a9ac"/></linearGradient><linearGradient id="p" x1="12.159" y1="24.883" x2="19.475" y2="24.883" xlink:href="#o"/><linearGradient id="q" x1="12.159" y1="27.05" x2="19.475" y2="27.05" xlink:href="#o"/><linearGradient id="r" x1="11.902" y1="23.201" x2="19.884" y2="23.201" xlink:href="#e"/><radialGradient id="s" cx="-16.983" cy="-22.948" r="10.718" gradientTransform="translate(34.042 37.063) scale(1.054)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffffd1"/><stop offset="0.505" stop-color="#ff0"/><stop offset="0.568" stop-color="#fdf700"/><stop offset="0.664" stop-color="#f6e200"/><stop offset="0.782" stop-color="#ebbf00"/><stop offset="0.906" stop-color="#de9200"/><stop offset="1" stop-color="#da9819"/></radialGradient></defs><title>file_type_smarty</title><path d="M13.859,28.776a.242.242,0,0,0,.128.191,12,12,0,0,0,1.392.622,4.3,4.3,0,0,0,.578.072h.052a4.3,4.3,0,0,0,.578-.072,12.014,12.014,0,0,0,1.392-.622.243.243,0,0,0,.128-.191l-2.137.192Z" style="fill:url(#a)"/><path d="M16.014,30a1.123,1.123,0,0,0,.688-.247.175.175,0,0,0,.085-.126v-.105a3.235,3.235,0,0,0-.773-.053h-.063a3.237,3.237,0,0,0-.773.053v.105a.175.175,0,0,0,.085.126,1.122,1.122,0,0,0,.688.247Z" style="fill:url(#b)"/><path d="M15.951,29.807a4.732,4.732,0,0,1-.674-.044,1.105,1.105,0,0,0,.674.237h.063a1.106,1.106,0,0,0,.675-.237,4.733,4.733,0,0,1-.675.044Z" style="fill:url(#c)"/><path d="M19.809,26.838a1,1,0,0,0-.234.389c-.036.181-.1.585-1.326,1.406l-.025.017a.435.435,0,0,1-.086.037,9.968,9.968,0,0,1-2.155.209,9.968,9.968,0,0,1-2.156-.209.436.436,0,0,1-.085-.036l-.025-.017a4.579,4.579,0,0,1-1.12-.957c-.164-.219-.373-.257-.39-.345a21.055,21.055,0,0,0,3.855.057,13.049,13.049,0,0,0,3.761-.654A.692.692,0,0,1,19.809,26.838Z" style="fill:url(#d)"/><path d="M19.772,26.88a.985.985,0,0,1-.246.129c-.076.028-.245.078-.245.078a25.15,25.15,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028a1.062,1.062,0,0,1-.14-.028,1.016,1.016,0,0,1,.14.107c.16.013.319.019.319.019a26.864,26.864,0,0,0,6.743-.323l.009-.042A.885.885,0,0,1,19.772,26.88Z" style="fill:url(#e)"/><path d="M19.439,25.382s.245-.07.245-.162a.114.114,0,0,0-.013-.065.214.214,0,0,1-.061-.144.437.437,0,0,1,.119-.27,1.069,1.069,0,0,1-.2.1c-.076.028-.245.078-.245.078a25.151,25.151,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028a1.055,1.055,0,0,1-.181-.041.377.377,0,0,1,.078.217.716.716,0,0,1-.254.432.673.673,0,0,1,.368-.079A26.2,26.2,0,0,0,19.439,25.382Z" style="fill:url(#f)"/><path d="M19.439,24.229s.245-.078.245-.182a.143.143,0,0,0-.013-.073.254.254,0,0,1-.061-.162.514.514,0,0,1,.119-.3,1.026,1.026,0,0,1-.2.111c-.076.032-.245.088-.245.088a22.507,22.507,0,0,1-6.458.489c-.136-.01-.32-.032-.32-.032a.953.953,0,0,1-.181-.046.455.455,0,0,1,.078.243.825.825,0,0,1-.254.484.614.614,0,0,1,.368-.089C13.014,24.758,16.935,25.041,19.439,24.229Z" style="fill:url(#g)"/><path d="M19.439,26.467s.245-.07.245-.163a.115.115,0,0,0-.013-.065.214.214,0,0,1-.061-.144.435.435,0,0,1,.119-.27,1.07,1.07,0,0,1-.2.1c-.076.028-.245.078-.245.078a25.162,25.162,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028a1.042,1.042,0,0,1-.181-.041.377.377,0,0,1,.078.217.717.717,0,0,1-.254.432.67.67,0,0,1,.368-.079A26.207,26.207,0,0,0,19.439,26.467Z" style="fill:url(#h)"/><path d="M19.439,26.467s.245-.07.245-.163a.115.115,0,0,0-.013-.065.214.214,0,0,1-.061-.144.435.435,0,0,1,.119-.27,1.07,1.07,0,0,1-.2.1c-.076.028-.245.078-.245.078a25.168,25.168,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028a1.042,1.042,0,0,1-.181-.041.376.376,0,0,1,.078.217.717.717,0,0,1-.254.432.67.67,0,0,1,.368-.079A26.207,26.207,0,0,0,19.439,26.467Z" style="fill:url(#h)"/><path d="M18.224,28.65a.435.435,0,0,1-.086.037,9.968,9.968,0,0,1-2.155.209,9.968,9.968,0,0,1-2.156-.209.436.436,0,0,1-.085-.036l-.025-.017-.029-.019a.112.112,0,0,0,0,.073c.024.073.147.1.147.1a9.943,9.943,0,0,0,2.15.209,9.942,9.942,0,0,0,2.15-.209s.126-.029.147-.1a.118.118,0,0,0,0-.073l-.029.019Z" style="fill:url(#j)"/><path d="M19.944,25.5s.041.252-.418.423c-.076.028-.245.078-.245.078a25.162,25.162,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028-.276-.038-.467-.16-.455-.308,0,0-.033-.249.466-.249a26.2,26.2,0,0,0,6.925-.472s.245-.07.245-.162a.111.111,0,0,0-.013-.066S19.944,25.312,19.944,25.5Z" style="fill:url(#k)"/><path d="M19.944,24.416s.041.252-.418.423c-.076.028-.245.078-.245.078a25.151,25.151,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028-.276-.038-.467-.16-.455-.308,0,0-.033-.248.466-.248a26.193,26.193,0,0,0,6.925-.472s.245-.07.245-.162a.11.11,0,0,0-.013-.065S19.944,24.227,19.944,24.416Z" style="fill:url(#l)"/><path d="M19.893,24.406v-.021c-.012.076-.078.236-.417.355-.076.026-.245.073-.245.073a22.372,22.372,0,0,1-5.1.5h0a22.155,22.155,0,0,0,5.1-.441s.169-.047.245-.073C19.933,24.643,19.893,24.406,19.893,24.406Z" style="fill:#fff"/><path d="M19.893,25.491V25.47c-.012.076-.078.236-.417.355-.076.027-.245.073-.245.073a22.38,22.38,0,0,1-5.1.5h0a22.171,22.171,0,0,0,5.1-.441s.169-.047.245-.073C19.933,25.728,19.893,25.491,19.893,25.491Z" style="fill:#fff"/><path d="M19.944,23.034s.041.329-.418.552c-.076.037-.245.1-.245.1a19.409,19.409,0,0,1-6.458.569c-.136-.012-.32-.037-.32-.037-.276-.05-.467-.209-.455-.4,0,0-.033-.324.466-.324a18.283,18.283,0,0,0,6.925-.461,1.014,1.014,0,0,0,.444-.238A.53.53,0,0,1,19.944,23.034Z" style="fill:url(#m)"/><path d="M19.944,26.586s.041.252-.418.423c-.076.028-.245.078-.245.078a25.15,25.15,0,0,1-6.458.436c-.136-.009-.32-.028-.32-.028-.276-.038-.467-.16-.455-.308,0,0-.033-.248.466-.248a26.207,26.207,0,0,0,6.925-.472s.245-.07.245-.163a.111.111,0,0,0-.013-.065S19.944,26.4,19.944,26.586Z" style="fill:url(#n)"/><path d="M19.893,26.576v-.021c-.012.076-.078.236-.417.355-.076.026-.245.073-.245.073a22.372,22.372,0,0,1-5.1.5h0a22.163,22.163,0,0,0,5.1-.441s.169-.047.245-.073C19.933,26.813,19.893,26.576,19.893,26.576Z" style="fill:#fff"/><path d="M19.893,23.321V23.3c-.012.076-.078.236-.417.355-.076.027-.245.073-.245.073a22.372,22.372,0,0,1-5.1.5h0a22.156,22.156,0,0,0,5.1-.441s.169-.047.245-.073C19.933,23.558,19.893,23.321,19.893,23.321Z" style="fill:#fff"/><path d="M12.417,25.881s-.236,0-.241.08.246.085.246.085.175,0,.3.005c.619-.013,1.993-.038,3.437-.166C14.384,25.958,12.723,25.883,12.417,25.881Z" style="fill:url(#o)"/><path d="M12.417,24.8s-.236,0-.241.08.246.085.246.085.175,0,.3.005c.619-.012,1.993-.038,3.437-.166C14.384,24.874,12.723,24.8,12.417,24.8Z" style="fill:url(#p)"/><path d="M12.417,26.965s-.236,0-.241.08.246.085.246.085.175,0,.3.005c.619-.012,1.993-.038,3.437-.166C14.384,27.042,12.723,26.966,12.417,26.965Z" style="fill:url(#q)"/><path d="M11.965,22.779s-.274.315.319.711c0,0,5.775.587,7.6-.695C19.884,22.795,13.623,23.32,11.965,22.779Z" style="fill:url(#r)"/><path d="M20.035,22.779a4.449,4.449,0,0,0,.81-1.155,3.386,3.386,0,0,0,.2-1.115,6.733,6.733,0,0,1,.632-2.91c.534-1.014,2.81-4.447,2.81-7.462A8.012,8.012,0,0,0,16,2a8.012,8.012,0,0,0-8.483,8.136c0,3.015,2.276,6.448,2.81,7.462a6.731,6.731,0,0,1,.632,2.91,3.384,3.384,0,0,0,.2,1.115,4.453,4.453,0,0,0,.81,1.155,13.866,13.866,0,0,0,3.987.37A15.151,15.151,0,0,0,20.035,22.779Z" style="fill:url(#s)"/>'
|
||
},
|
||
"Solidity (Ethereum)": {
|
||
colour: "#c1c1c1",
|
||
icon: '<path d="M20.477,2l-4.5,8h-9l4.5-8h9" style="fill:#c1c1c1;opacity:0.45;isolation:isolate"/><path d="M11.52,30l4.5-8h9l-4.5,8h-9" style="fill:#c1c1c1;opacity:0.45;isolation:isolate"/><path d="M15.975,10h9l-4.5-8h-9Z" style="fill:#c1c1c1;opacity:0.6;isolation:isolate"/><path d="M16.022,22h-9l4.5,8h9Z" style="fill:#c1c1c1;opacity:0.6;isolation:isolate"/><path d="M11.477,18l4.5-8-4.5-8-4.5,8Z" style="fill:#c1c1c1;opacity:0.8;isolation:isolate"/><path d="M20.52,14l-4.5,8,4.5,8,4.5-8Z" style="fill:#c1c1c1;opacity:0.8;isolation:isolate"/>'
|
||
},
|
||
"Solution file": {
|
||
colour: "#854cc7",
|
||
icon: '<defs><linearGradient id="a" x1="16" y1="-182.072" x2="16" y2="-209.928" gradientTransform="matrix(1, 0, 0, -1, 0, -180)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient></defs><title>file_type_sln</title><path d="M6.045,23.991a1.166,1.166,0,0,1-1.208.191L2.718,23.3A1.168,1.168,0,0,1,2,22.222V9.778A1.165,1.165,0,0,1,2.718,8.7l2.119-.883a1.169,1.169,0,0,1,1.208.191l.476.408A.646.646,0,0,0,5.5,8.942V23.058a.646.646,0,0,0,1.021.525Z" style="fill:#52218a"/><path d="M2.718,23.3A1.169,1.169,0,0,1,2,22.222v-.1a.674.674,0,0,0,1.174.452L21.25,2.583a1.743,1.743,0,0,1,1.99-.338l5.769,2.778A1.749,1.749,0,0,1,30,6.6v.067a1.1,1.1,0,0,0-1.8-.854L6.521,23.583l-.476.408a1.166,1.166,0,0,1-1.208.191Z" style="fill:#6c33af"/><path d="M2.718,8.7A1.168,1.168,0,0,0,2,9.778v.1a.674.674,0,0,1,1.174-.452L21.25,29.416a1.743,1.743,0,0,0,1.99.338l5.769-2.778A1.747,1.747,0,0,0,30,25.4v-.068a1.1,1.1,0,0,1-1.8.855L6.521,8.417l-.476-.408a1.166,1.166,0,0,0-1.208-.191Z" style="fill:#854cc7"/><path d="M23.24,29.755a1.743,1.743,0,0,1-1.99-.338A1.025,1.025,0,0,0,23,28.692V3.308a1.025,1.025,0,0,0-1.75-.725,1.743,1.743,0,0,1,1.99-.338l5.768,2.774A1.749,1.749,0,0,1,30,6.6V25.405a1.751,1.751,0,0,1-.991,1.577Z" style="fill:#b179f1"/><g style="opacity:0.25"><path d="M22.093,29.883a1.74,1.74,0,0,0,1.147-.128l5.768-2.774A1.749,1.749,0,0,0,30,25.4V6.6a1.75,1.75,0,0,0-.992-1.577L23.24,2.245a1.742,1.742,0,0,0-1.99.339l-9.3,10.284L6.521,8.416l-.476-.408a1.168,1.168,0,0,0-1.207-.191L2.719,8.7A1.167,1.167,0,0,0,2,9.689c0,.029,0,.059,0,.088V22.221c0,.03,0,.059,0,.088a1.167,1.167,0,0,0,.715.989l2.119.883a1.226,1.226,0,0,0,.155.052,1.165,1.165,0,0,0,1.052-.243l.476-.408,5.43-4.452,9.3,10.285A1.733,1.733,0,0,0,22.093,29.883ZM23,10.072,15.77,16,23,21.927ZM5.5,12l3.619,4L5.5,20Z" style="fill-rule:evenodd;fill:url(#a)"/></g>'
|
||
},
|
||
"SPARQL": {
|
||
colour: "#0c479c",
|
||
icon: '<path d="M26.284,20.361c-.165-.084-.359-.164-.523-.248H25.9s-1.158-.5-1.24-4.176c-.111-3.655,1.1-4.289,1.1-4.289a4.96,4.96,0,0,0,2.176-2.143,5.122,5.122,0,0,0-2.122-6.927,5.342,5.342,0,0,0-7.138,2.146,5.067,5.067,0,0,0-.523,3.214L18.1,7.855s.3,1.319-2.839,3.272c-3.115,1.95-4.549.962-4.549.962l.082.138a2.131,2.131,0,0,0-.273-.167,5.117,5.117,0,1,0,.825,8.52l-.025.055s1.129-.933,4.407.827c2.592,1.374,2.979,2.748,3.033,3.24a5.1,5.1,0,0,0,2.7,4.7,5.124,5.124,0,1,0,4.825-9.041Zm-5.79.685c-.412.138-1.6.3-4.077-1.017-2.7-1.454-3.115-2.664-3.169-3.021a5.406,5.406,0,0,0-.057-1.319l.029.026S13,14.534,16.084,12.639c2.757-1.705,4.026-1.374,4.245-1.293a2.83,2.83,0,0,0,.47.277,4.082,4.082,0,0,0,.964.383c.387.357,1.076,1.374,1.158,4.1s-.717,3.764-1.158,4.121A5.04,5.04,0,0,0,20.494,21.047Z" style="fill:#0c479c"/><path d="M20.135,4.229a3.861,3.861,0,0,0-.082,5.386c-.717-.685-.688-2.117.029-3.462a.673.673,0,0,1,.746-.277c.025,0,.054.029.082.029a.993.993,0,0,0,.276.026A1.056,1.056,0,0,0,22.2,4.805a.934.934,0,0,0-.3-.685c1.38-.907,2.95-1.017,3.61-.412h.029A3.826,3.826,0,0,0,20.135,4.229ZM5.145,13.846a3.859,3.859,0,0,0-.082,5.389c-.717-.689-.692-2.117.025-3.465a.668.668,0,0,1,.746-.273c.025,0,.054.029.082.029a1,1,0,0,0,.276.026A1.056,1.056,0,0,0,7.21,14.425a.945.945,0,0,0-.3-.689c1.377-.907,2.947-1.017,3.61-.412h.025A3.852,3.852,0,0,0,5.145,13.846Zm15.872,8.163a3.865,3.865,0,0,0-.082,5.389c-.717-.689-.688-2.117.029-3.465a.668.668,0,0,1,.746-.273c.025,0,.054.026.082.026a.887.887,0,0,0,.276.029,1.057,1.057,0,0,0,1.018-1.126.936.936,0,0,0-.3-.689c1.38-.907,2.95-1.017,3.61-.412h.029A3.829,3.829,0,0,0,21.017,22.009Z" style="fill:#fff"/>'
|
||
},
|
||
"SQF": {
|
||
colour: "#c2c2c2",
|
||
icon: '<path d="M25,23.5H7a5.015,5.015,0,0,1-5-5v-6a5.015,5.015,0,0,1,5-5H25a5.015,5.015,0,0,1,5,5v6a5.015,5.015,0,0,1-5,5Z"/><path d="M7,19.461a4.81,4.81,0,0,1-1.414-.2,5.052,5.052,0,0,1-1.111-.472l-.4.432h-.5L3.5,16.052H4a8.462,8.462,0,0,0,.431.953,4.638,4.638,0,0,0,.606.9,3.177,3.177,0,0,0,.8.675,1.985,1.985,0,0,0,1.029.26,1.672,1.672,0,0,0,1.216-.411A1.382,1.382,0,0,0,8.5,17.391a1.156,1.156,0,0,0-.359-.862,2.945,2.945,0,0,0-1.111-.6q-.49-.167-.9-.31t-.773-.292a2.58,2.58,0,0,1-1.239-1.007,2.73,2.73,0,0,1-.405-1.465,2.406,2.406,0,0,1,.21-.986,2.608,2.608,0,0,1,.612-.85,2.967,2.967,0,0,1,.985-.575,3.722,3.722,0,0,1,1.306-.223,3.984,3.984,0,0,1,1.288.2,5.151,5.151,0,0,1,.944.408l.356-.37h.507l.047,2.988h-.5q-.175-.483-.411-.987a4.332,4.332,0,0,0-.5-.839,2.3,2.3,0,0,0-.659-.573,1.729,1.729,0,0,0-.875-.214A1.437,1.437,0,0,0,6,11.212a1.233,1.233,0,0,0-.4.934,1.141,1.141,0,0,0,.347.86,2.951,2.951,0,0,0,1.082.588q.431.154.88.309t.8.3a2.885,2.885,0,0,1,1.286.955,2.512,2.512,0,0,1,.44,1.512,2.632,2.632,0,0,1-.927,1.985,3.367,3.367,0,0,1-1.079.6A4.391,4.391,0,0,1,7,19.461Z" style="fill:#c2c2c2"/><path d="M18.921,11.434a4.338,4.338,0,0,1,.971,1.432,4.834,4.834,0,0,1,.359,1.914,4.958,4.958,0,0,1-.72,2.68,4.036,4.036,0,0,1-2.038,1.661,2.151,2.151,0,0,0,.42,1.272,1.168,1.168,0,0,0,.95.537,3.563,3.563,0,0,0,.592-.043q.254-.043.458-.1v.543a5.753,5.753,0,0,1-.985.3,6.054,6.054,0,0,1-1.37.151,2.206,2.206,0,0,1-1.612-.621,2.574,2.574,0,0,1-.708-1.732A4.579,4.579,0,0,1,13.7,19a4.186,4.186,0,0,1-1.253-.932,4.388,4.388,0,0,1-.842-1.377,4.769,4.769,0,0,1-.312-1.753,5.237,5.237,0,0,1,.347-1.948,4.5,4.5,0,0,1,.953-1.5,4.119,4.119,0,0,1,1.425-.942,4.86,4.86,0,0,1,3.5-.009A4.247,4.247,0,0,1,18.921,11.434Zm-1.5,6.266a4.857,4.857,0,0,0,.379-1.273,9.981,9.981,0,0,0,.117-1.606,10.534,10.534,0,0,0-.1-1.48,4.936,4.936,0,0,0-.347-1.282,2.41,2.41,0,0,0-.665-.9,1.571,1.571,0,0,0-1.032-.34,1.73,1.73,0,0,0-1.6,1.06,6.634,6.634,0,0,0-.548,2.993,9.583,9.583,0,0,0,.12,1.551,4.8,4.8,0,0,0,.376,1.273,2.286,2.286,0,0,0,.665.856,1.591,1.591,0,0,0,.991.306,1.611,1.611,0,0,0,.991-.309A2.135,2.135,0,0,0,17.423,17.7Z" style="fill:#c2c2c2"/><path d="M28.5,12.8h-.455a3.93,3.93,0,0,0-.6-1.086,1.385,1.385,0,0,0-.812-.63c-.116-.016-.272-.031-.465-.043s-.373-.019-.535-.019H24.349v3.433h.822a1.969,1.969,0,0,0,.606-.083,1.054,1.054,0,0,0,.455-.3,1.591,1.591,0,0,0,.283-.516,2.635,2.635,0,0,0,.166-.621h.443v3.686h-.443a2.471,2.471,0,0,0-.181-.676,2.094,2.094,0,0,0-.268-.528,1.012,1.012,0,0,0-.431-.293,1.842,1.842,0,0,0-.63-.1h-.822v2.9a.842.842,0,0,0,.079.38.58.58,0,0,0,.3.256,1.87,1.87,0,0,0,.353.1q.224.046.446.071v.482h-4.46v-.482l.449-.052a1.525,1.525,0,0,0,.391-.083.547.547,0,0,0,.292-.241.842.842,0,0,0,.082-.4v-6.18a.867.867,0,0,0-.073-.367.575.575,0,0,0-.3-.262,2.341,2.341,0,0,0-.431-.136q-.268-.062-.408-.08v-.482H28.5Z" style="fill:#c2c2c2"/>'
|
||
},
|
||
"SQF: Status Quo Function (Arma 3)": {
|
||
colour: "#c2c2c2",
|
||
icon: '<path d="M25,23.5H7a5.015,5.015,0,0,1-5-5v-6a5.015,5.015,0,0,1,5-5H25a5.015,5.015,0,0,1,5,5v6a5.015,5.015,0,0,1-5,5Z"/><path d="M7,19.461a4.81,4.81,0,0,1-1.414-.2,5.052,5.052,0,0,1-1.111-.472l-.4.432h-.5L3.5,16.052H4a8.462,8.462,0,0,0,.431.953,4.638,4.638,0,0,0,.606.9,3.177,3.177,0,0,0,.8.675,1.985,1.985,0,0,0,1.029.26,1.672,1.672,0,0,0,1.216-.411A1.382,1.382,0,0,0,8.5,17.391a1.156,1.156,0,0,0-.359-.862,2.945,2.945,0,0,0-1.111-.6q-.49-.167-.9-.31t-.773-.292a2.58,2.58,0,0,1-1.239-1.007,2.73,2.73,0,0,1-.405-1.465,2.406,2.406,0,0,1,.21-.986,2.608,2.608,0,0,1,.612-.85,2.967,2.967,0,0,1,.985-.575,3.722,3.722,0,0,1,1.306-.223,3.984,3.984,0,0,1,1.288.2,5.151,5.151,0,0,1,.944.408l.356-.37h.507l.047,2.988h-.5q-.175-.483-.411-.987a4.332,4.332,0,0,0-.5-.839,2.3,2.3,0,0,0-.659-.573,1.729,1.729,0,0,0-.875-.214A1.437,1.437,0,0,0,6,11.212a1.233,1.233,0,0,0-.4.934,1.141,1.141,0,0,0,.347.86,2.951,2.951,0,0,0,1.082.588q.431.154.88.309t.8.3a2.885,2.885,0,0,1,1.286.955,2.512,2.512,0,0,1,.44,1.512,2.632,2.632,0,0,1-.927,1.985,3.367,3.367,0,0,1-1.079.6A4.391,4.391,0,0,1,7,19.461Z" style="fill:#c2c2c2"/><path d="M18.921,11.434a4.338,4.338,0,0,1,.971,1.432,4.834,4.834,0,0,1,.359,1.914,4.958,4.958,0,0,1-.72,2.68,4.036,4.036,0,0,1-2.038,1.661,2.151,2.151,0,0,0,.42,1.272,1.168,1.168,0,0,0,.95.537,3.563,3.563,0,0,0,.592-.043q.254-.043.458-.1v.543a5.753,5.753,0,0,1-.985.3,6.054,6.054,0,0,1-1.37.151,2.206,2.206,0,0,1-1.612-.621,2.574,2.574,0,0,1-.708-1.732A4.579,4.579,0,0,1,13.7,19a4.186,4.186,0,0,1-1.253-.932,4.388,4.388,0,0,1-.842-1.377,4.769,4.769,0,0,1-.312-1.753,5.237,5.237,0,0,1,.347-1.948,4.5,4.5,0,0,1,.953-1.5,4.119,4.119,0,0,1,1.425-.942,4.86,4.86,0,0,1,3.5-.009A4.247,4.247,0,0,1,18.921,11.434Zm-1.5,6.266a4.857,4.857,0,0,0,.379-1.273,9.981,9.981,0,0,0,.117-1.606,10.534,10.534,0,0,0-.1-1.48,4.936,4.936,0,0,0-.347-1.282,2.41,2.41,0,0,0-.665-.9,1.571,1.571,0,0,0-1.032-.34,1.73,1.73,0,0,0-1.6,1.06,6.634,6.634,0,0,0-.548,2.993,9.583,9.583,0,0,0,.12,1.551,4.8,4.8,0,0,0,.376,1.273,2.286,2.286,0,0,0,.665.856,1.591,1.591,0,0,0,.991.306,1.611,1.611,0,0,0,.991-.309A2.135,2.135,0,0,0,17.423,17.7Z" style="fill:#c2c2c2"/><path d="M28.5,12.8h-.455a3.93,3.93,0,0,0-.6-1.086,1.385,1.385,0,0,0-.812-.63c-.116-.016-.272-.031-.465-.043s-.373-.019-.535-.019H24.349v3.433h.822a1.969,1.969,0,0,0,.606-.083,1.054,1.054,0,0,0,.455-.3,1.591,1.591,0,0,0,.283-.516,2.635,2.635,0,0,0,.166-.621h.443v3.686h-.443a2.471,2.471,0,0,0-.181-.676,2.094,2.094,0,0,0-.268-.528,1.012,1.012,0,0,0-.431-.293,1.842,1.842,0,0,0-.63-.1h-.822v2.9a.842.842,0,0,0,.079.38.58.58,0,0,0,.3.256,1.87,1.87,0,0,0,.353.1q.224.046.446.071v.482h-4.46v-.482l.449-.052a1.525,1.525,0,0,0,.391-.083.547.547,0,0,0,.292-.241.842.842,0,0,0,.082-.4v-6.18a.867.867,0,0,0-.073-.367.575.575,0,0,0-.3-.262,2.341,2.341,0,0,0-.431-.136q-.268-.062-.408-.08v-.482H28.5Z" style="fill:#c2c2c2"/>'
|
||
},
|
||
"SQL": {
|
||
colour: "#ffda44",
|
||
icon: '<path d="M8.562,15.256A21.159,21.159,0,0,0,16,16.449a21.159,21.159,0,0,0,7.438-1.194c1.864-.727,2.525-1.535,2.525-2V9.7a10.357,10.357,0,0,1-2.084,1.076A22.293,22.293,0,0,1,16,12.078a22.36,22.36,0,0,1-7.879-1.3A10.28,10.28,0,0,1,6.037,9.7v3.55C6.037,13.724,6.7,14.528,8.562,15.256Z" style="fill:#ffda44"/><path d="M8.562,21.961a15.611,15.611,0,0,0,2.6.741A24.9,24.9,0,0,0,16,23.155a24.9,24.9,0,0,0,4.838-.452,15.614,15.614,0,0,0,2.6-.741c1.864-.727,2.525-1.535,2.525-2v-3.39a10.706,10.706,0,0,1-1.692.825A23.49,23.49,0,0,1,16,18.74a23.49,23.49,0,0,1-8.271-1.348,10.829,10.829,0,0,1-1.692-.825V19.96C6.037,20.426,6.7,21.231,8.562,21.961Z" style="fill:#ffda44"/><path d="M16,30c5.5,0,9.963-1.744,9.963-3.894V23.269a10.5,10.5,0,0,1-1.535.762l-.157.063A23.487,23.487,0,0,1,16,25.445a23.422,23.422,0,0,1-8.271-1.351c-.054-.02-.106-.043-.157-.063a10.5,10.5,0,0,1-1.535-.762v2.837C6.037,28.256,10.5,30,16,30Z" style="fill:#ffda44"/><ellipse cx="16" cy="5.894" rx="9.963" ry="3.894" style="fill:#ffda44"/>',
|
||
inlineComment: [
|
||
"--"
|
||
]
|
||
},
|
||
"Squirrel": {
|
||
colour: "#a05a2c",
|
||
icon: '<path d="M12.966,27.3a18.926,18.926,0,0,1-5.707-.915c-1.832-.592-4.044-1.54-4.931-3.645a.557.557,0,0,1-.025-.073,12.214,12.214,0,0,1,.763-7.531c1.522-4.008,3.71-6.739,6.5-8.116a10.422,10.422,0,0,1,7.6-.55,10.426,10.426,0,0,1,6.04,4.639,11.057,11.057,0,0,1,1.058,2.326,10.66,10.66,0,0,1-5.378,12.689l-.02.009A14.832,14.832,0,0,1,12.966,27.3Z"/><path d="M22.72,11.393a10.144,10.144,0,0,0-12.9-3.869C6.7,9.061,4.784,12.2,3.593,15.334a11.9,11.9,0,0,0-.746,7.187c.783,1.86,2.779,2.744,4.582,3.327a16.206,16.206,0,0,0,11.213-.232A10.11,10.11,0,0,0,23.727,13.6,10.488,10.488,0,0,0,22.72,11.393Z" style="fill:#a05a2c"/><path d="M15.782,6.72A8.263,8.263,0,0,1,17.64,8.084,9.65,9.65,0,0,1,19.08,9.8a9.317,9.317,0,0,1-1.531,11.921A14.933,14.933,0,0,1,7.656,24.7a7.581,7.581,0,0,1-4.135-1.1,8.454,8.454,0,0,0,3.907,2.241,16.208,16.208,0,0,0,11.214-.233A10.112,10.112,0,0,0,23.727,13.6a10.487,10.487,0,0,0-1.007-2.211A9.973,9.973,0,0,0,15.782,6.72Z" style="fill-opacity:0.3137255012989044"/><path d="M23.476,13.389l-1.062-2.895.152-.236A6.875,6.875,0,0,1,27.509,7.7a2.177,2.177,0,0,1,1.879.588,3.376,3.376,0,0,1,.1,3.729c-.343.292-.751.124-1.222-.07a2.821,2.821,0,0,0-2.133-.27,10.2,10.2,0,0,0-2.047,1.209Z"/><path d="M23.039,10.563c1.223-1.9,5.107-2.915,5.912-1.923a2.97,2.97,0,0,1,.177,2.945c-.245.207-1.837-1.059-3.225-.423A10.574,10.574,0,0,0,23.73,12.45Z" style="fill:#502d16"/><path d="M29.4,9.727a.8.8,0,0,1-.2.469c-.229.162-1.9-.506-3.238.056a12.439,12.439,0,0,0-2.071,1.07L23.2,10.34c-.057.074-.116.147-.165.223l.692,1.886A10.577,10.577,0,0,1,25.9,11.162c1.388-.636,2.98.631,3.225.423A2.846,2.846,0,0,0,29.4,9.727Z" style="fill-opacity:0.3137255012989044"/><path d="M21.382,25.18a2.236,2.236,0,0,1-1.147-.323.563.563,0,0,1-.082-.888c.737-.684.607-2.173-.41-4.689a36.526,36.526,0,0,0-5.123-8.825l-.35-.43c-1.512-1.865-2.358-2.815-3.554-2.3a.562.562,0,0,1-.413.016.571.571,0,0,1-.377-.592,2.119,2.119,0,0,1,1.461-2c4.716-1.481,10.26.814,12.905,5.344a11.2,11.2,0,0,1-1.431,13.991A1.919,1.919,0,0,1,21.382,25.18Z"/><path d="M23.812,10.783c-2.444-4.192-7.73-6.528-12.27-5.093-1.007.248-1.065,1.535-1.052,1.517,1.776-.767,2.953.919,4.566,2.89a36.9,36.9,0,0,1,5.209,8.971c.89,2.2,1.4,4.267.27,5.312a1.5,1.5,0,0,0,1.909-.274A10.646,10.646,0,0,0,23.812,10.783Z" style="fill:#502d16"/><path d="M23.649,10.346a9.314,9.314,0,0,1-2.518,7.725c-.455.486-.873.177-1.263.063.138.313.271.626.4.936.89,2.2,1.4,4.266.271,5.312a1.5,1.5,0,0,0,1.909-.274C26.089,20.183,26.357,14.919,23.649,10.346Z" style="fill-opacity:0.3137255012989044"/>'
|
||
},
|
||
"Stan": {
|
||
colour: "#b2001d",
|
||
icon: '<title>file_type_stan</title><path d="M16,2A14,14,0,0,0,5.688,25.469c1.7-.514,3.411-.992,4.806-1.357,4.037-1.054,10.948-2.836,11.946-5.082-.28.78-1.218,2.87-1.218,2.87-1.279,1.247-7.09,2.631-10.917,3.367-1.22.235-2.614.507-4.026.806A14,14,0,0,0,28.467,9.628c-2.526.408-10.5,1.854-12.539,2.315-2.255.509-6.789,1.433-7.694,2.993C8.8,13.5,10.492,9.744,10.492,9.744c1.216-2,6.6-3.425,10.358-4.463.876-.242,1.922-.539,3.023-.858A13.934,13.934,0,0,0,16,2Z" style="fill:#b2001d"/><path d="M8.223,14.987c-.252,1.175,3.52,2.313,6.921,3.389a26.362,26.362,0,0,1,5.667,2.192,3.085,3.085,0,0,0,1.662-1.614c.377-1.489-3.013-3.393-5.274-4.229a33.337,33.337,0,0,1-4.407-2.042c-4.316,1.143-4.569,2.3-4.569,2.3Z" style="fill:#590815"/>',
|
||
inlineComment: [
|
||
"#"
|
||
]
|
||
},
|
||
"Stata Ado": {
|
||
colour: "#3c6e8f",
|
||
icon: '<defs><linearGradient id="a" x1="16" y1="2" x2="16" y2="30" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8aa7c0"/><stop offset="1" stop-color="#3c6e8f"/></linearGradient></defs><title>file_type_stata</title><rect x="2" y="2" width="28" height="28" rx="1.556" ry="1.556" style="fill:url(#a)"/><rect x="13.171" y="6.015" width="5.756" height="5.756" style="fill:#fff"/><rect x="20.326" y="6.015" width="5.756" height="5.756" style="fill:#fff"/><rect x="20.326" y="13.171" width="5.756" height="5.756" style="fill:#fff"/><rect x="13.171" y="13.171" width="5.756" height="5.756" style="fill:#fff"/><rect x="6.015" y="13.171" width="5.756" height="5.756" style="fill:#fff"/><rect x="6.015" y="20.326" width="5.756" height="5.756" style="fill:#fff"/><rect x="13.171" y="20.326" width="5.756" height="5.756" style="fill:#fff"/>'
|
||
},
|
||
"Stylus": {
|
||
colour: "#c2c2c2",
|
||
icon: '<title>file_type_stylus</title><path d="M6.315,20.776c.726-.869.812-1.766.249-3.432-.356-1.054-.947-1.865-.513-2.521.463-.7,1.445-.021.627.911l.164.114c.983.114,1.467-1.232.733-1.616-1.937-1.011-3.631.933-2.884,3.183.32.954.769,1.965.406,2.77A1.794,1.794,0,0,1,3.773,21.3c-.847.043-.285-1.9.691-2.385.085-.043.206-.1.093-.242a2.134,2.134,0,0,0-2.314,1.2C1.061,22.121,4.485,22.954,6.315,20.776Z" style="fill:#c2c2c2"/><path d="M27.462,14.14c.278.684.7,1.36.449,1.958-.206.513-.477.726-.776.776-.42.071-.306-1.246.413-1.638.064-.036.157-.206.071-.306a1.636,1.636,0,0,0-1.7.961c-.8,1.687,1.823,2.15,3.112.491.513-.662.534-1.317.043-2.506-.313-.755-.79-1.317-.491-1.816.32-.527,1.089-.071.513.634l.128.071c.748.043,1.054-.954.484-1.2A1.834,1.834,0,0,0,27.462,14.14Z" style="fill:#c2c2c2"/><path d="M17.95,12.338c-.52-.413-1.979.278-2.392,1.3a16.213,16.213,0,0,1-2.043,4.037c-.8.876-.876.2-.8-.306A15.327,15.327,0,0,1,14.7,12.652c-.235-.349-1.773-.3-2.841,1.36-.4.627-1.31,2.713-2.321,4.358-.221.356-.5.107-.285-.726a39.8,39.8,0,0,1,1.873-5.682,39.072,39.072,0,0,1,6.921-.819c.263-.071.441-.306,0-.32a46.778,46.778,0,0,0-6.593.441,4.923,4.923,0,0,1,1.445-1.944,1.787,1.787,0,0,0-2.264.719,12.287,12.287,0,0,0-.819,1.453,24.194,24.194,0,0,0-3.98.862c-.783.3-.7,1.246-.221,1.068a31.631,31.631,0,0,1,3.816-1.1,30.292,30.292,0,0,0-1.865,5.682c-.441,2.492,1.1,2.478,1.858,1.5.819-1.075,2.528-4.856,2.791-5.255.078-.135.185-.064.128.057-1.908,3.809-1.744,5.283-.2,4.956a4.929,4.929,0,0,0,2.214-1.965c.064-.15.2-.135.171-.071-1.21,3.14-2.748,5.682-3.781,6.479-.94.719-1.638-.84,1.687-3.076.491-.335.263-.79-.292-.634h0a29.793,29.793,0,0,0-8.786,3.325c-.164.114-.313.206-.306.441.007.135.242.085.356.014A22.771,22.771,0,0,1,11.1,20.9a.158.158,0,0,0,.114.007c.121-.028.114.036.036.085-.178.1-.356.192-.4.206-1.766.691-2.834,2.214-2.456,2.99.32.669,2.051.427,2.869-.014,2.008-1.089,3.468-3.225,4.464-6.173C16.6,15.386,17.693,12.424,17.95,12.338Z" style="fill:#c2c2c2"/><path d="M29.62,18.369a48.145,48.145,0,0,0-13.429.968c-.926.242-.669.733-.2.641.007,0,.206-.05.214-.05a42.279,42.279,0,0,1,12.375-.242C29.014,19.765,30.317,18.462,29.62,18.369Z" style="fill:#c2c2c2"/><path d="M18.861,17.985c.911-.456,2.264-3.275,3.154-4.82.064-.114.178-.021.114.057-2.25,3.873-1.3,4.322-.406,4.265,1.189-.071,2.286-1.78,2.528-2.165.1-.15.157-.028.1.078-.057.178-.263.491-.456.919-.271.605.014.84.249.947.37.178,1.381.064,1.538-.555-1.011-.021,1.41-4.792,1.659-5.084a1.718,1.718,0,0,0-2.2.975c-1.018,2.015-1.873,3.638-2.407,3.667-1.04.057,1.2-4.493,1.559-4.635-.221-.32-1.638-.185-2.428,1.04-.285.441-2.022,3.517-2.449,4.023-.755.9-.812.128-.6-.769a10.569,10.569,0,0,1,.349-1.132,5.324,5.324,0,0,1,1.36-1.844c2.2-2.442,3.46-4.422,2.962-5.2-.441-.691-1.915-.384-2.862,1.04-1.744,2.613-3.354,6.195-3.56,7.832S18.056,18.383,18.861,17.985Zm.926-4.792c.078-.178.128-.228.263-.527h0A24.934,24.934,0,0,1,22.492,8.28c.42-.441,1.011.157-.057,1.794a16.462,16.462,0,0,1-2.115,2.642v.007c-.2.221-.377.406-.456.513C19.808,13.307,19.744,13.292,19.787,13.193Z" style="fill:#c2c2c2"/>'
|
||
},
|
||
"SVG": {
|
||
colour: "#ffb13b",
|
||
icon: '<path d="M7.674,14.488a2.218,2.218,0,1,0,0,3.137H24.326a2.218,2.218,0,1,0,0-3.137Z" style="fill:#ffb13b;stroke:#000;stroke-width:3.73000001907349px"/><path d="M11.222,9.06A2.218,2.218,0,1,0,9,11.278L20.778,23.052A2.218,2.218,0,1,0,23,20.834Z" style="fill:#ffb13b;stroke:#000;stroke-width:3.73000001907349px"/><path d="M17.568,7.73a2.218,2.218,0,1,0-3.137,0V24.382a2.218,2.218,0,1,0,3.137,0Z" style="fill:#ffb13b;stroke:#000;stroke-width:3.73000001907349px"/><path d="M23,11.278A2.218,2.218,0,1,0,20.778,9.06L9,20.834a2.218,2.218,0,1,0,2.218,2.218Z" style="fill:#ffb13b;stroke:#000;stroke-width:3.73000001907349px"/><path d="M7.674,14.488a2.218,2.218,0,1,0,0,3.137H24.326a2.218,2.218,0,1,0,0-3.137Z" style="fill:#ffb13b"/><path d="M11.222,9.06A2.218,2.218,0,1,0,9,11.278L20.778,23.052A2.218,2.218,0,1,0,23,20.834Z" style="fill:#ffb13b"/><path d="M17.568,7.73a2.218,2.218,0,1,0-3.137,0V24.382a2.218,2.218,0,1,0,3.137,0Z" style="fill:#ffb13b"/><path d="M23,11.278A2.218,2.218,0,1,0,20.778,9.06L9,20.834a2.218,2.218,0,1,0,2.218,2.218Z" style="fill:#ffb13b"/><path d="M2,16.056H30V25.95a4.035,4.035,0,0,1-4.106,4.106H6.106A4.035,4.035,0,0,1,2,25.95Z"/><path d="M6.2,23.045A3.628,3.628,0,1,1,12.4,20.48H10.27A1.5,1.5,0,1,0,7.7,21.541h0a1.6,1.6,0,0,0,1.062.441h0a4.118,4.118,0,0,1,2.566,1.063h0a3.628,3.628,0,1,1-6.194,2.565H7.264A1.5,1.5,0,1,0,9.83,24.55h0a1.948,1.948,0,0,0-1.063-.44h0A4.465,4.465,0,0,1,6.2,23.045Z" style="fill:#fff"/><path d="M19.651,16.852,17.085,29.24H14.96L12.4,16.852H14.52l1.5,7.255,1.5-7.255Z" style="fill:#fff"/><path d="M23.28,21.983h3.628v3.628h0a3.628,3.628,0,1,1-7.257,0h0V20.48h0a3.628,3.628,0,0,1,7.257,0H24.783a1.5,1.5,0,1,0-3.005,0v5.13h0a1.5,1.5,0,0,0,3.005,0h0v-1.5h-1.5V21.983Z" style="fill:#fff"/>'
|
||
},
|
||
"Swift": {
|
||
colour: "#FA5D2D",
|
||
icon: '<defs><linearGradient id="a" x1="-134.494" y1="-171.82" x2="-134.497" y2="-171.89" gradientTransform="matrix(240, 0, 0, -205.6, 32295, -35312.585)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f88535"/><stop offset="1" stop-color="#fd2221"/></linearGradient></defs><title>file_type_swift</title><path d="M19.422,4.007s6.217,3.554,7.844,9.2c1.466,5.1.292,7.534.292,7.534a8.915,8.915,0,0,1,1.742,2.8,4.825,4.825,0,0,1,.29,4.453s-.1-2.08-3.2-2.511c-2.841-.4-3.874,2.366-9.3,2.232A18.435,18.435,0,0,1,2,19.354C4.651,20.8,8.124,23.045,12.449,22.7s5.228-1.674,5.228-1.674A66.9,66.9,0,0,1,4.891,7.643c3.4,2.845,11.822,8.507,11.626,8.363A75.826,75.826,0,0,1,8.092,6.24S20.728,16.629,21.745,16.563c.418-.861,2.579-5.318-2.324-12.557Z" style="fill:url(#a)"/>',
|
||
inlineComment: [
|
||
"//"
|
||
]
|
||
},
|
||
"Systemd configuration file": {
|
||
colour: "#30d475",
|
||
icon: '<path d="M2,12v8H5.256V18.769H3.3V13.231H5.256V12Z" style="fill:#d2d2d2"/><path d="M26.744,12v1.231H28.7v5.538H26.744V20H30V12Z" style="fill:#d2d2d2"/><path d="M17.628,16l5.21-2.769v5.538Z" style="fill:#30d475"/><ellipse cx="12.093" cy="16" rx="2.93" ry="2.769" style="fill:#30d475"/>'
|
||
},
|
||
"T4 templating": {
|
||
colour: "#1e88e5",
|
||
icon: '<path d="M19.545,6.035H13.27V24H8.3V6.035H2.055V2h17.49Z" style="fill:#1e88e5"/><path d="M27.567,10V22.608h2.4V25.9h-2.4V30H23.551V25.9H14.834V22.455q1.158-1.3,2.4-2.838t2.4-3.173q1.158-1.632,2.155-3.285A32.925,32.925,0,0,0,23.481,10ZM18.781,22.608h4.77V15.621q-.488.907-1.06,1.834t-1.2,1.827q-.628.9-1.269,1.743T18.781,22.608Z" style="fill:#1e88e5"/>'
|
||
},
|
||
"T4 Text Templates (C#)": {
|
||
colour: "#1e88e5",
|
||
icon: '<path d="M19.545,6.035H13.27V24H8.3V6.035H2.055V2h17.49Z" style="fill:#1e88e5"/><path d="M27.567,10V22.608h2.4V25.9h-2.4V30H23.551V25.9H14.834V22.455q1.158-1.3,2.4-2.838t2.4-3.173q1.158-1.632,2.155-3.285A32.925,32.925,0,0,0,23.481,10ZM18.781,22.608h4.77V15.621q-.488.907-1.06,1.834t-1.2,1.827q-.628.9-1.269,1.743T18.781,22.608Z" style="fill:#1e88e5"/>'
|
||
},
|
||
"T4 Text Templates (VB)": {
|
||
colour: "#1e88e5",
|
||
icon: '<path d="M19.545,6.035H13.27V24H8.3V6.035H2.055V2h17.49Z" style="fill:#1e88e5"/><path d="M27.567,10V22.608h2.4V25.9h-2.4V30H23.551V25.9H14.834V22.455q1.158-1.3,2.4-2.838t2.4-3.173q1.158-1.632,2.155-3.285A32.925,32.925,0,0,0,23.481,10ZM18.781,22.608h4.77V15.621q-.488.907-1.06,1.834t-1.2,1.827q-.628.9-1.269,1.743T18.781,22.608Z" style="fill:#1e88e5"/>'
|
||
},
|
||
"Tcl": {
|
||
colour: "#eff1cb",
|
||
icon: '<path d="M21.942,2.876c.04,2.468-.033,4.91-2.169,7.23l-.079.089h.119l.873.013c-1.418,2.95-2.341,5.892-4.38,8.83l-.073.106.126-.023,1.078-.2a5.851,5.851,0,0,1-3.484,3.65c-.39-5.455,2.333-10.27,4.645-15.071l.007-.013-.086-.06c-3.786,4.233-5.491,10.2-6.136,15.127a4.582,4.582,0,0,1-2.145-2.988l.9.377.093.04-.02-.1c-.681-3.028.376-5.2,1.4-8.056l.737.493.086.06,0-.1c-.058-2.32,1.5-4.649,3.577-6.727l.288.77.04.1.056-.1.631-1.051,0-.007A6.1,6.1,0,0,1,21.942,2.876Z" style="fill:#c3b15f"/><path d="M21.948,2.875a6.131,6.131,0,0,0-3.926,2.388l0,.007-.631,1.051-.056.1-.04-.1L17,5.544c-2.072,2.078-3.635,4.407-3.577,6.727l0,.1-.086-.06-.737-.493c-1.025,2.856-2.083,5.029-1.4,8.056l.02.1-.093-.04-.886-.374c0,.018.007.035.01.053a4.533,4.533,0,0,0,2.126,2.932c.05-.381.105-.771.169-1.164-1.543-3.614-.2-6.271.407-8.661l.939.542c-.13-2.238,1.184-4.651,2.893-6.757l.5.873C18.555,4.769,19.56,3.72,21.948,2.875Z" style="fill:#eff1cb;stroke:#eff1cb"/><path d="M22.518,2l-.056.01c-2.082.363-4.121,1.128-5.015,2.959l-.377-.658-.033-.06-.05.05a20.85,20.85,0,0,0-2.939,3.5A5.939,5.939,0,0,0,12.835,11l-.532-.664-.053-.066-.036.076a27.535,27.535,0,0,0-1.693,4.7,6.73,6.73,0,0,0-.159,3.719l-.876-.509-.073-.043-.007.086a5.529,5.529,0,0,0,2.017,4.843l-.972.241-.2.05.2.053a4.258,4.258,0,0,1,1.455.6,1.325,1.325,0,0,1,.516,1.3V28.1l.01.013,1.217,1.745.1.139V25.719a3.466,3.466,0,0,1,.621-1.484A1.639,1.639,0,0,1,15.5,23.7l.182-.023-.165-.076-.641-.3a9.112,9.112,0,0,0,3.693-5.322l.02-.086-.083.023-.793.215a11.669,11.669,0,0,0,2.089-3.5C20.512,13,21.18,11.166,21.728,9.7l.03-.079-.083.007-.612.043a6.655,6.655,0,0,0,1.382-3.527,17.039,17.039,0,0,0,.079-4.086Zm-.575.876c.04,2.468-.033,4.91-2.169,7.23l-.079.089h.119l.873.013c-1.418,2.95-2.341,5.892-4.38,8.83l-.073.106.126-.023,1.078-.2a5.851,5.851,0,0,1-3.484,3.65c-.39-5.455,2.333-10.27,4.645-15.071l.007-.013-.086-.06c-3.786,4.233-5.491,10.2-6.136,15.127a4.582,4.582,0,0,1-2.145-2.988l.9.377.093.04-.02-.1c-.681-3.028.376-5.2,1.4-8.056l.737.493.086.06,0-.1c-.058-2.32,1.5-4.649,3.577-6.727l.288.77.04.1.056-.1.631-1.051,0-.007A6.1,6.1,0,0,1,21.942,2.876Z"/>'
|
||
},
|
||
"Template Toolkit 2": {
|
||
colour: "#3bcefc",
|
||
icon: '<path d="M8.907,23.021H8.878a3.305,3.305,0,0,1-2.011-.661A2.561,2.561,0,0,1,5.83,20.334V16.1H4.288a3.05,3.05,0,0,1-2.738-1.69,3.3,3.3,0,0,1,.441-3.53,2.265,2.265,0,0,1,1.815-.9h9.65a3.05,3.05,0,0,1,2.738,1.69,3.3,3.3,0,0,1-.441,3.53,2.265,2.265,0,0,1-1.815.9H11.955v4.231a2.561,2.561,0,0,1-1.037,2.026A3.305,3.305,0,0,1,8.907,23.021ZM4.264,11.636a1.39,1.39,0,0,0-1.388,1.388v.033a1.39,1.39,0,0,0,1.388,1.388H7.487v5.881c0,.572.624,1.037,1.39,1.037h.029c.767,0,1.39-.465,1.39-1.037V14.446h3.223a1.39,1.39,0,0,0,1.388-1.388v-.033a1.39,1.39,0,0,0-1.388-1.388Z" style="fill:#015d9a"/><path d="M14.981,12.953v.033a1.533,1.533,0,0,1-1.533,1.533H10.37v5.737a1.393,1.393,0,0,1-1.535,1.181H8.806a1.393,1.393,0,0,1-1.535-1.181V14.518H4.192A1.533,1.533,0,0,1,2.66,12.986v-.033A1.533,1.533,0,0,1,4.192,11.42h9.257A1.533,1.533,0,0,1,14.981,12.953Zm-4.223,9.222a2.418,2.418,0,0,0,.98-1.912V15.888h2.127a2.114,2.114,0,0,0,1.7-.846,2.992,2.992,0,0,0-2.18-4.99H3.735a2.114,2.114,0,0,0-1.7.846,2.992,2.992,0,0,0,2.18,4.99H5.9v4.375a2.418,2.418,0,0,0,.98,1.912,3.16,3.16,0,0,0,1.923.631h.029A3.16,3.16,0,0,0,10.758,22.174Z" style="fill:#3bcefc"/><path d="M23.607,23.021h-.029a3.305,3.305,0,0,1-2.011-.661,2.561,2.561,0,0,1-1.037-2.026V16.1H18.988a3.05,3.05,0,0,1-2.738-1.69,3.3,3.3,0,0,1,.441-3.53,2.265,2.265,0,0,1,1.815-.9h9.65a3.05,3.05,0,0,1,2.738,1.69,3.3,3.3,0,0,1-.441,3.53,2.265,2.265,0,0,1-1.815.9H26.655v4.231a2.561,2.561,0,0,1-1.037,2.026A3.305,3.305,0,0,1,23.607,23.021ZM18.964,11.636a1.39,1.39,0,0,0-1.388,1.388v.033a1.39,1.39,0,0,0,1.388,1.388h3.223v5.881c0,.572.624,1.037,1.39,1.037h.029c.767,0,1.39-.465,1.39-1.037V14.446h3.223a1.39,1.39,0,0,0,1.388-1.388v-.033a1.39,1.39,0,0,0-1.388-1.388Z" style="fill:#015d9a"/><path d="M29.681,12.953v.033a1.533,1.533,0,0,1-1.533,1.533H25.07v5.737a1.393,1.393,0,0,1-1.535,1.181h-.029a1.393,1.393,0,0,1-1.535-1.181V14.518H18.892a1.533,1.533,0,0,1-1.533-1.533v-.033a1.533,1.533,0,0,1,1.533-1.533h9.257A1.533,1.533,0,0,1,29.681,12.953Zm-4.223,9.222a2.418,2.418,0,0,0,.98-1.912V15.888h2.127a2.114,2.114,0,0,0,1.7-.846,2.992,2.992,0,0,0-2.18-4.99h-9.65a2.114,2.114,0,0,0-1.7.846,2.992,2.992,0,0,0,2.18,4.99H20.6v4.375a2.418,2.418,0,0,0,.98,1.912,3.16,3.16,0,0,0,1.923.631h.029A3.16,3.16,0,0,0,25.458,22.174Z" style="fill:#3bcefc"/>'
|
||
},
|
||
"TeX": {
|
||
colour: "#cfcfcf",
|
||
icon: '<path d="M11.333,13.122c-.128-1.562-.241-2.756-2.287-2.756H7.91v8.4h2.145v.611l-3.083-.029-3.082.029v-.611H6.034v-8.4H4.884c-2.046,0-2.159,1.208-2.287,2.756H2l.284-3.367h9.362l.284,3.367h-.6Z" style="fill:#cfcfcf"/><path d="M19.289,22.53H10.41V21.92h1.506V13.467H10.41v-.611h8.637l.412,3.367h-.6c-.213-1.833-.682-2.756-2.855-2.756H13.791V17.2h.838c1.364,0,1.505-.6,1.505-1.662h.6v3.935h-.6c0-1.08-.142-1.662-1.505-1.662h-.838v4.106h2.216c2.472,0,3-1.108,3.3-3.225h.6Z" style="fill:#cfcfcf"/><path d="M27.727,19.186c-.54,0-1.96,0-2.415.029V18.6h1.179l-2.557-3.552-2.529,3.381A4.1,4.1,0,0,0,22.7,18.6v.611c-.355-.029-1.576-.029-2.017-.029-.4,0-1.548,0-1.875.029V18.6h.383a7.459,7.459,0,0,0,.824-.043c.5-.043.54-.085.667-.256L23.536,14.5l-3.153-4.418H19V9.47c.384.028,1.79.028,2.273.028.582,0,1.918,0,2.429-.028v.611H22.528l2.117,2.955,2.074-2.784a4.1,4.1,0,0,0-1.293-.17V9.47c.356.028,1.591.028,2.032.028.4,0,1.534,0,1.861-.028v.611h-.369a5.264,5.264,0,0,0-.838.043c-.469.043-.526.071-.667.256l-2.4,3.21L28.636,18.6H30v.611C29.645,19.186,28.182,19.186,27.727,19.186Z" style="fill:#cfcfcf"/>',
|
||
inlineComment: [
|
||
"%"
|
||
]
|
||
},
|
||
"Textile": {
|
||
colour: "#ffe7ac",
|
||
icon: '<path d="M28.681,26.075H3.319A1.317,1.317,0,0,1,2,24.756V7.244A1.317,1.317,0,0,1,3.319,5.925H28.681A1.317,1.317,0,0,1,30,7.244V24.76A1.316,1.316,0,0,1,28.681,26.075Z" style="fill:#ffe7ac"/><path d="M6.066,12.848a4.987,4.987,0,0,1,1.508-.659V10.664a3.7,3.7,0,0,1,.743-.33,7.869,7.869,0,0,1,1.327-.347h.642v2.391h2.484V13.6H10.286v4.848a3.172,3.172,0,0,0,.29,1.609,1.07,1.07,0,0,0,.971.448,7.127,7.127,0,0,0,.76-.048,3.338,3.338,0,0,0,.782-.18l.132.62a2.388,2.388,0,0,1-.5.356,5.457,5.457,0,0,1-.752.356,5.837,5.837,0,0,1-.923.281A4.769,4.769,0,0,1,10,22a2.385,2.385,0,0,1-1.824-.637,2.947,2.947,0,0,1-.6-2.062V13.591H6.066Z"/><path d="M14.607,20.453a1.447,1.447,0,0,1,.431-1.09,1.591,1.591,0,0,1,1.147-.413,1.649,1.649,0,0,1,1.165.413,1.422,1.422,0,0,1,.453,1.09,1.369,1.369,0,0,1-.453,1.081,1.692,1.692,0,0,1-1.165.4,1.61,1.61,0,0,1-1.147-.4A1.427,1.427,0,0,1,14.607,20.453Z"/>'
|
||
},
|
||
"TOML": {
|
||
colour: "#bfbfbf",
|
||
icon: '<path d="M22.76,6.83v3.25h-5V25.17H14.26V10.08h-5V6.83Z" style="fill:#7f7f7f"/><path d="M2,2H8.2V5.09H5.34v21.8H8.2V30H2Z" style="fill:#bfbfbf"/><path d="M30,30H23.8V26.91h2.86V5.11H23.8V2H30Z" style="fill:#bfbfbf"/>'
|
||
},
|
||
"TSConfig": {
|
||
colour: "#007acc",
|
||
icon: '<path d="M23.827,8.243A4.424,4.424,0,0,1,26.05,9.524a5.853,5.853,0,0,1,.852,1.143c.011.045-1.534,1.083-2.471,1.662-.034.023-.169-.124-.322-.35a2.014,2.014,0,0,0-1.67-1c-1.077-.074-1.771.49-1.766,1.433a1.3,1.3,0,0,0,.153.666c.237.49.677.784,2.059,1.383,2.544,1.1,3.636,1.817,4.31,2.843a5.158,5.158,0,0,1,.416,4.333,4.764,4.764,0,0,1-3.932,2.815,10.9,10.9,0,0,1-2.708-.028,6.531,6.531,0,0,1-3.616-1.884,6.278,6.278,0,0,1-.926-1.371,2.655,2.655,0,0,1,.327-.208c.158-.09.756-.434,1.32-.761l1.024-.6.214.312a4.771,4.771,0,0,0,1.35,1.292,3.3,3.3,0,0,0,3.458-.175,1.545,1.545,0,0,0,.2-1.974c-.276-.4-.84-.727-2.443-1.422a8.8,8.8,0,0,1-3.349-2.055,4.687,4.687,0,0,1-.976-1.777,7.116,7.116,0,0,1-.062-2.268,4.332,4.332,0,0,1,3.644-3.374A9,9,0,0,1,23.827,8.243ZM15.484,9.726l.011,1.454h-4.63V24.328H7.6V11.183H2.97V9.755a13.986,13.986,0,0,1,.04-1.466c.017-.023,2.832-.034,6.245-.028l6.211.017Z" style="fill:#007acc"/><path d="M27.075,25.107l.363-.361c1.68.055,1.706,0,1.78-.177l.462-1.124.034-.107-.038-.093c-.02-.049-.081-.2-1.13-1.2v-.526c1.211-1.166,1.185-1.226,1.116-1.4l-.46-1.136c-.069-.17-.1-.237-1.763-.191l-.364-.367a8.138,8.138,0,0,0-.057-1.657l-.047-.106-1.2-.525c-.177-.081-.239-.11-1.372,1.124l-.509-.008c-1.167-1.245-1.222-1.223-1.4-1.152l-1.115.452c-.175.071-.236.1-.169,1.79l-.36.359c-1.68-.055-1.7,0-1.778.177L18.606,20l-.036.108.038.094c.02.048.078.194,1.13,1.2v.525c-1.211,1.166-1.184,1.226-1.115,1.4l.459,1.137c.07.174.1.236,1.763.192l.363.377a8.169,8.169,0,0,0,.055,1.654l.047.107,1.208.528c.176.073.236.1,1.366-1.13l.509.006c1.168,1.247,1.228,1.223,1.4,1.154l1.113-.45C27.082,26.827,27.143,26.8,27.075,25.107Zm-4.788-2.632a2,2,0,1,1,2.618,1.14A2.023,2.023,0,0,1,22.287,22.475Z" style="fill:#99b8c4"/>'
|
||
},
|
||
"Twig": {
|
||
colour: "#78dc50",
|
||
icon: '<path d="M4.574,5.463c.262.4,2.5-1.608,4.454-1.161,2.061.472,4.014,3.724,4.848,13.7a40.18,40.18,0,0,1,3.541,3.61q.53.614,1.013,1.22a11.847,11.847,0,0,1,.229-1.4,12.3,12.3,0,0,1,1.981-4.4A19.151,19.151,0,0,0,17.272,7.9c-1.03-1.445-4.6-6.478-8.546-5.843C6.182,2.465,4.3,5.054,4.574,5.463Z" style="fill:#63bf6a"/><path d="M24.4,30c-.32-2.567-.448-4.76-.5-6.449-.094-3.232.1-4.541.9-5.756.193-.295,1.288-1.975,2.58-1.863,1.466.128,2.213,2.414,2.362,2.337.175-.09-.36-3.543-2.532-4.431-2.6-1.063-6.312,2.07-7.8,5.154a12.223,12.223,0,0,0-.857,2.81,32.555,32.555,0,0,0-.71,8.2Z" style="fill:#74d74d"/><path d="M2.238,13.935c.145-.447,2.468-.259,4.54.293,2.5.666,7,2.344,11.651,8.606A12.544,12.544,0,0,1,20.279,30H10.386a21.875,21.875,0,0,0-.175-4.62,14.9,14.9,0,0,0-2.459-7.158C5.441,15.159,2.055,14.5,2.238,13.935Z" style="fill:#78dc50"/><path d="M17.3,21.323a1.753,1.753,0,1,1-.513-1.24A1.748,1.748,0,0,1,17.3,21.323Z" style="fill:#fff"/><path d="M21.975,21.323a1.753,1.753,0,1,1-.513-1.24A1.748,1.748,0,0,1,21.975,21.323Z" style="fill:#fff"/>'
|
||
},
|
||
"TypeScript": {
|
||
colour: "#3178c6",
|
||
icon: '<rect x="2" y="2" width="28" height="28" rx="1.312" style="fill:#3178c6"/><path d="M18.245,23.759v3.068a6.492,6.492,0,0,0,1.764.575,11.56,11.56,0,0,0,2.146.192,9.968,9.968,0,0,0,2.088-.211,5.11,5.11,0,0,0,1.735-.7,3.542,3.542,0,0,0,1.181-1.266,4.469,4.469,0,0,0,.186-3.394,3.409,3.409,0,0,0-.717-1.117,5.236,5.236,0,0,0-1.123-.877,12.027,12.027,0,0,0-1.477-.734q-.6-.249-1.08-.484a5.5,5.5,0,0,1-.813-.479,2.089,2.089,0,0,1-.516-.518,1.091,1.091,0,0,1-.181-.618,1.039,1.039,0,0,1,.162-.571,1.4,1.4,0,0,1,.459-.436,2.439,2.439,0,0,1,.726-.283,4.211,4.211,0,0,1,.956-.1,5.942,5.942,0,0,1,.808.058,6.292,6.292,0,0,1,.856.177,5.994,5.994,0,0,1,.836.3,4.657,4.657,0,0,1,.751.422V13.9a7.509,7.509,0,0,0-1.525-.4,12.426,12.426,0,0,0-1.9-.129,8.767,8.767,0,0,0-2.064.235,5.239,5.239,0,0,0-1.716.733,3.655,3.655,0,0,0-1.171,1.271,3.731,3.731,0,0,0-.431,1.845,3.588,3.588,0,0,0,.789,2.34,6,6,0,0,0,2.395,1.639q.63.26,1.175.509a6.458,6.458,0,0,1,.942.517,2.463,2.463,0,0,1,.626.585,1.2,1.2,0,0,1,.23.719,1.1,1.1,0,0,1-.144.552,1.269,1.269,0,0,1-.435.441,2.381,2.381,0,0,1-.726.292,4.377,4.377,0,0,1-1.018.105,5.773,5.773,0,0,1-1.969-.35A5.874,5.874,0,0,1,18.245,23.759Zm-5.154-7.638h4V13.594H5.938v2.527H9.92V27.375h3.171Z" style="fill:#fff;fill-rule:evenodd"/>',
|
||
inlineComment: [
|
||
"//"
|
||
]
|
||
},
|
||
"TypoScript": {
|
||
colour: "#ff8700",
|
||
icon: '<path d="M23.093,21.3a3.847,3.847,0,0,1-1.18.165c-3.555,0-8.778-12.424-8.778-16.559,0-1.523.362-2.031.87-2.466C9.653,2.943,4.43,4.539,2.761,6.57a4.048,4.048,0,0,0-.58,2.321C2.181,15.348,9.072,30,13.933,30c2.248,0,6.041-3.7,9.16-8.7" style="fill:#ff8700"/><path d="M20.823,2c4.5,0,9,.725,9,3.264,0,5.151-3.264,11.389-4.933,11.389-2.974,0-6.673-8.269-6.673-12.4,0-1.886.725-2.249,2.611-2.249" style="fill:#ff8700"/>'
|
||
},
|
||
"V": {
|
||
colour: "#5d87bf",
|
||
icon: '<path d="M20.467,29.288,29.952,2.913a.5.5,0,0,0-.566-.728L21.927,2.9a1.464,1.464,0,0,0-1.141.9L12.007,29.006a.573.573,0,0,0,.578.813h7.26a.657.657,0,0,0,.577-.4Z" style="fill:#536b8a"/><path d="M2.614,2.185l7.459.719a1.466,1.466,0,0,1,1.142.9L20.18,29.413a.286.286,0,0,1-.289.406H12.585a1.311,1.311,0,0,1-1.152-.81L2.048,2.913A.5.5,0,0,1,2.614,2.185Z" style="fill:#5d87bf"/>'
|
||
},
|
||
"Vala": {
|
||
colour: "#403757",
|
||
icon: '<path d="M12.509,17.193c-.165-6.836-.325-12.455-.357-12.487A7.916,7.916,0,0,0,9.879,5.874,7.606,7.606,0,0,0,7.324,9.188a8.422,8.422,0,0,0-.587,3.543,4.665,4.665,0,0,0,.2,1.962,3.417,3.417,0,0,1,.182.56c-.012.009-.338-.018-.724-.061-1.868-.207-2.786-1.05-3-2.757A6.312,6.312,0,0,1,4.85,7.719a15.134,15.134,0,0,1,8.414-5.163,12.891,12.891,0,0,1,2.542-.235l1.748-.05.059,2.506c.032,1.378.1,6.358.161,11.067s-.252,8.29-.219,8.4C19.5,17.879,22,13.073,24.367,6.253l1.427-3.983H28.54c-.022.063-2.751,6.5-5.514,13.916l-5.473,13.55H12.976C12.976,27.906,12.535,18.486,12.509,17.193Z" style="fill:#403757"/><path d="M17.732,30H12.713v-.263c0-1.137-.17-5.192-.307-8.452-.081-1.929-.15-3.6-.161-4.087-.156-6.479-.286-11-.336-12.163a11.674,11.674,0,0,0-1.874,1.049,7.348,7.348,0,0,0-2.466,3.2A8.146,8.146,0,0,0,7,12.731,4.37,4.37,0,0,0,7.185,14.6c.215.569.273.723.1.859-.093.073-.107.084-.916-.007-1.976-.219-3-1.167-3.234-2.986A6.568,6.568,0,0,1,4.64,7.561,15.439,15.439,0,0,1,13.2,2.3,13.176,13.176,0,0,1,15.8,2.058L17.811,2l.065,2.77c.032,1.392.106,6.461.161,11.07.031,2.616-.052,4.915-.124,6.43.931-2.763,1.958-5.27,3.033-7.9,1.043-2.547,2.122-5.18,3.173-8.207l1.491-4.16h3.3l-.125.351c0,.007-.031.076-.084.2-1.1,2.622-3.259,7.889-5.43,13.717Zm-4.495-.526h4.14l5.407-13.386c2.124-5.7,4.243-10.876,5.362-13.555H25.979L24.614,6.342c-1.055,3.038-2.137,5.678-3.183,8.231-1.311,3.2-2.55,6.226-3.626,9.747l-.255.831-.248-.833a3.274,3.274,0,0,1,.021-.839c.074-1.35.229-4.158.188-7.633-.055-4.607-.129-9.674-.161-11.064L17.3,2.541l-1.484.043a12.729,12.729,0,0,0-2.49.228A14.887,14.887,0,0,0,5.06,7.877a6.071,6.071,0,0,0-1.4,4.524c.2,1.58,1.028,2.336,2.77,2.529l.333.035c-.019-.054-.041-.114-.066-.179a4.893,4.893,0,0,1-.219-2.055,8.7,8.7,0,0,1,.6-3.638,7.883,7.883,0,0,1,2.644-3.43c.022-.016,2.232-1.525,2.615-1.142.092.092.131.131.433,12.666h0c.01.485.08,2.149.16,4.076C13.06,24.313,13.217,28.06,13.237,29.474Z" style="fill:#c8c8c8"/>'
|
||
},
|
||
"VB.Net": {
|
||
colour: "#00519a",
|
||
icon: '<path d="M6.67,7.836,9,18.915,11.336,7.836H16L11.336,24.164H6.672L2,7.836Z" style="fill:#00519a"/><path d="M18.331,7.836h7.6a4.08,4.08,0,0,1,2.9,1.749,3.78,3.78,0,0,1,.571,2.04,3.985,3.985,0,0,1-.571,2.034,4.108,4.108,0,0,1-2.341,1.763,4.1,4.1,0,0,1,2.929,1.756,3.8,3.8,0,0,1,.58,2.1,4.663,4.663,0,0,1-.579,2.546,5.047,5.047,0,0,1-3.5,2.338H18.331ZM23,14.252h1.166a1.754,1.754,0,0,0,0-3.5H23Zm0,7H24.39a2.047,2.047,0,0,0,0-4.089H23Z" style="fill:#00519a"/>'
|
||
},
|
||
"VBA": {
|
||
colour: "#d87b30",
|
||
icon: '<polygon points="10.457 11.092 16.014 13.839 16.014 18.307 10.457 15.382 10.457 11.092" style="fill:#6483c0"/><path d="M16.2,18.613l-5.926-3.12V10.8L16.2,13.724ZM10.642,15.27,15.83,18V13.953l-5.188-2.564Z"/><polygon points="16.371 13.839 16.371 18.307 21.315 15.814 21.315 11.354 16.371 13.839" style="fill:#6483c0"/><path d="M16.186,18.607V13.725l5.313-2.67v4.873Zm.369-4.655v4.055L21.13,15.7V11.653Z"/><polygon points="10.703 10.797 16.186 13.58 21.082 11.064 15.777 8.389 10.703 10.797" style="fill:#6483c0"/><path d="M16.187,13.788l-5.9-3,5.5-2.608,5.709,2.879ZM11.122,10.8l5.064,2.57,4.49-2.308-4.9-2.471Z"/><polygon points="18.957 15.829 24.515 18.575 24.515 23.043 18.957 20.118 18.957 15.829" style="fill:#952781"/><path d="M24.7,23.349l-5.926-3.12v-4.7L24.7,18.46Zm-5.557-3.343,5.188,2.731V18.689l-5.188-2.564Z"/><polygon points="24.871 18.575 24.871 23.043 29.815 20.55 29.815 16.09 24.871 18.575" style="fill:#952781"/><path d="M24.687,23.343V18.461L30,15.791v4.873Zm.369-4.655v4.055l4.575-2.308V16.389Z"/><polygon points="19.203 15.546 24.687 18.329 29.583 15.812 24.364 13.346 19.203 15.546" style="fill:#952781"/><path d="M24.687,18.536l-5.92-3.005,5.6-2.387L30,15.805ZM19.64,15.56l5.046,2.561,4.479-2.3-4.806-2.27Z"/><polygon points="2.19 15.496 7.748 18.243 7.748 22.711 2.19 19.786 2.19 15.496" style="fill:#d87b30"/><path d="M7.932,23.017,2.006,19.9V15.2l5.926,2.929ZM2.375,19.674l5.188,2.731V18.357L2.375,15.793Z"/><polygon points="8.104 18.243 8.104 22.711 13.048 20.218 13.048 15.758 8.104 18.243" style="fill:#d87b30"/><path d="M7.92,23.011V18.129l5.313-2.67v4.873Zm.369-4.655v4.055L12.864,20.1V16.057Z"/><polygon points="2.436 15.213 7.92 17.997 12.816 15.48 7.597 13.014 2.436 15.213" style="fill:#d87b30"/><path d="M7.92,18.2,2,15.2l5.6-2.387,5.632,2.661ZM2.873,15.228l5.046,2.561,4.479-2.3-4.806-2.27Z"/><polygon points="10.875 16.296 16.432 19.042 16.432 23.511 10.875 20.585 10.875 16.296" style="fill:#e0d400"/><path d="M16.617,23.816,10.691,20.7V16l5.926,2.929ZM11.06,20.474l5.188,2.731V19.157L11.06,16.593Z"/><polygon points="16.789 19.042 16.789 23.511 21.733 21.017 21.733 16.557 16.789 19.042" style="fill:#e0d400"/><path d="M16.6,23.811V18.929l5.313-2.67v4.873Zm.369-4.655v4.055L21.549,20.9V16.857Z"/><polygon points="11.121 16.001 16.605 18.784 21.501 16.267 16.196 13.593 11.121 16.001" style="fill:#e0d400"/><path d="M16.605,18.991l-5.9-3,5.5-2.608,5.709,2.879ZM11.54,16.006l5.064,2.57,4.49-2.308-4.9-2.471Z"/>'
|
||
},
|
||
"Velocity": {
|
||
colour: "#262692",
|
||
icon: '<path d="M16.245,24.187A8.352,8.352,0,1,1,24.6,15.835,8.362,8.362,0,0,1,16.245,24.187Zm0-14.762a6.41,6.41,0,1,0,6.41,6.41A6.417,6.417,0,0,0,16.245,9.425Z"/><polygon points="29.132 8.551 25.451 6.531 25.451 7.474 15.821 7.474 15.821 9.424 25.451 9.424 25.451 10.571 29.132 8.551" style="fill:#262692"/><polygon points="8.984 2 6.964 5.687 7.906 5.687 7.906 15.328 9.857 15.328 9.857 5.687 11.004 5.687 8.984 2" style="fill:#262693"/><polygon points="23.705 30 21.685 26.243 22.628 26.243 22.628 16.417 24.578 16.417 24.578 26.243 25.725 26.243 23.705 30" style="fill:#262693"/><polygon points="2.868 23.32 6.634 21.3 6.634 22.242 16.484 22.242 16.484 24.192 6.634 24.192 6.634 25.34 2.868 23.32" style="fill:#262692"/>'
|
||
},
|
||
"Verilog": {
|
||
colour: "#1a348f",
|
||
icon: '<path d="M29.007,17.4h.037a1.449,1.449,0,0,0,.938-.316,1.473,1.473,0,0,0,.519-1.031V15.9a1.413,1.413,0,0,0-1.376-1.3h-.009c-.687,0-1.374,0-2.062,0H25.5V11.956l3.513,0h.034A1.411,1.411,0,0,0,30.5,10.6l0-.09,0-.032a1.412,1.412,0,0,0-.646-1.1,1.455,1.455,0,0,0-.835-.225H25.456a2.96,2.96,0,0,0-.278-1.034,2.909,2.909,0,0,0-1.7-1.461,2.684,2.684,0,0,0-.629-.13V4.947c0-.69,0-1.38,0-2.063A1.414,1.414,0,0,0,21.481,1.5h-.116a1.4,1.4,0,0,0-1.319,1.388q0,1.154,0,2.306V6.5H17.4V4.981c0-.7,0-1.4,0-2.087A1.41,1.41,0,0,0,16.053,1.5H15.9a1.408,1.408,0,0,0-1.3,1.383c0,.688,0,1.376,0,2.064V6.508q-1.319,0-2.639,0V4.888c0-.666,0-1.332,0-1.989a1.366,1.366,0,0,0-.4-.975,1.4,1.4,0,0,0-.984-.424H10.5A1.41,1.41,0,0,0,9.159,2.881c0,.683,0,1.366,0,2.049v1.6a2.933,2.933,0,0,0-2.466,1.9,2.878,2.878,0,0,0-.161.726H4.957c-.693,0-1.386,0-2.073,0H2.876A1.413,1.413,0,0,0,1.5,10.5v.095a1.417,1.417,0,0,0,.575,1.091,1.463,1.463,0,0,0,.887.273h.017l3.522,0V14.6H4.948c-.686,0-1.375,0-2.057,0A1.428,1.428,0,0,0,1.5,15.913V16.1a1.4,1.4,0,0,0,1.386,1.3c.711,0,1.423,0,2.135,0H6.5V20.05l-.292,0c-.613-.007-1.226,0-1.838,0H3.087a1.633,1.633,0,0,0-.918.211A1.437,1.437,0,0,0,1.5,21.4V21.5a1.417,1.417,0,0,0,1.375,1.337h.005q.645,0,1.29,0H6.546a2.832,2.832,0,0,0,1.978,2.5,2.712,2.712,0,0,0,.631.128v1.62c0,.678,0,1.354,0,2.025a1.4,1.4,0,1,0,2.8-.092l0-3.527H14.6v3.516A1.414,1.414,0,0,0,15.947,30.5H16.1a1.411,1.411,0,0,0,1.3-1.385q.006-1.066,0-2.131V25.5h2.644V29.1A1.423,1.423,0,0,0,21.4,30.5h.119a1.408,1.408,0,0,0,1.16-.741,1.643,1.643,0,0,0,.167-.833V25.474a2.671,2.671,0,0,0,.62-.128,2.928,2.928,0,0,0,1.886-1.888,2.834,2.834,0,0,0,.123-.613h1.581c.687,0,1.375,0,2.057,0h.008A1.422,1.422,0,0,0,30.5,21.481v-.118a1.409,1.409,0,0,0-1.382-1.318h0c-.718,0-1.436,0-2.154,0H25.5V17.4Z" style="fill:#c5c5c5;opacity:0.3"/><path d="M10.515,2h.056a.91.91,0,0,1,.886.893c.006,1.108,0,2.216,0,3.324-.6,0-1.2,0-1.8,0,0-1.111,0-2.222,0-3.333A.907.907,0,0,1,10.515,2Z" style="fill:#1a348f"/><path d="M15.937,2h.116a.912.912,0,0,1,.846.889c.006,1.109,0,2.219,0,3.329H15.1c0-1.11,0-2.22,0-3.33A.911.911,0,0,1,15.937,2Z" style="fill:#1a348f"/><path d="M21.392,2h.089a.907.907,0,0,1,.859.881c.007,1.112,0,2.225,0,3.337h-1.8c0-1.109,0-2.217,0-3.326A.912.912,0,0,1,21.392,2Z" style="fill:#1a348f"/><path d="M2,10.518a.908.908,0,0,1,.882-.859c1.112-.007,2.223,0,3.334,0q0,.9,0,1.8c-1.079,0-2.158,0-3.237,0a.983.983,0,0,1-.6-.173A.924.924,0,0,1,2,10.571Z" style="fill:#1a348f"/><path d="M25.786,9.655h3.233a1,1,0,0,1,.561.143.924.924,0,0,1,.42.716v.058a.933.933,0,0,1-.3.651.957.957,0,0,1-.677.234c-1.079,0-2.158,0-3.237,0Q25.786,10.556,25.786,9.655Z" style="fill:#1a348f"/><path d="M2,15.944a.913.913,0,0,1,.888-.842c1.109-.007,2.219,0,3.328,0q0,.9,0,1.8c-1.109,0-2.217,0-3.326,0A.915.915,0,0,1,2,16.063Z" style="fill:#1a348f"/><path d="M25.786,15.1c1.109,0,2.218,0,3.326,0a.914.914,0,0,1,.889.835v.117a.946.946,0,0,1-.331.641.973.973,0,0,1-.651.207H25.786Q25.785,16,25.786,15.1Z" style="fill:#1a348f"/><path d="M2.433,20.678a1.121,1.121,0,0,1,.643-.136c1.043.006,2.086-.006,3.129.006.028.6,0,1.2.012,1.8-1.11,0-2.221,0-3.331,0A.911.911,0,0,1,2,21.483V21.4A.925.925,0,0,1,2.433,20.678Z" style="fill:#1a348f"/><path d="M25.786,20.543c1.108,0,2.216,0,3.324,0a.914.914,0,0,1,.89.847v.09a.911.911,0,0,1-.888.859c-1.109.007-2.218,0-3.326,0C25.786,21.743,25.785,21.143,25.786,20.543Z" style="fill:#1a348f"/><path d="M9.656,25.781h1.8c0,1.081,0,2.162,0,3.243a.957.957,0,0,1-.235.677.931.931,0,0,1-.653.3h-.052a.907.907,0,0,1-.86-.882C9.651,28.006,9.658,26.894,9.656,25.781Z" style="fill:#1a348f"/><path d="M15.1,25.781h1.8c0,1.11,0,2.22,0,3.33a.914.914,0,0,1-.836.889h-.116a.94.94,0,0,1-.619-.306.962.962,0,0,1-.228-.673Q15.1,27.4,15.1,25.781Z" style="fill:#1a348f"/><path d="M20.547,29.106c0-1.108,0-2.217,0-3.325h1.8c0,1.048,0,2.1,0,3.144a1.178,1.178,0,0,1-.105.59.92.92,0,0,1-.756.484H21.4A.911.911,0,0,1,20.547,29.106Z" style="fill:#1a348f"/><path d="M24.732,8.349A2.429,2.429,0,0,0,23.31,7.131,3.245,3.245,0,0,0,22.254,7c-4.3.008-8.6-.011-12.905.01A2.436,2.436,0,0,0,7.157,8.606,3.611,3.611,0,0,0,7,9.934q0,6.25,0,12.5a2.673,2.673,0,0,0,.268,1.219A2.431,2.431,0,0,0,8.688,24.87,3.756,3.756,0,0,0,9.927,25H22.07a3.762,3.762,0,0,0,1.243-.127A2.429,2.429,0,0,0,24.875,23.3,3.8,3.8,0,0,0,25,22.071q0-6.25,0-12.5A2.686,2.686,0,0,0,24.732,8.349Z" style="fill:#1a348f"/><path d="M7.5,8.307l.084-.2q.968,0,1.935.024h.394q.179,0,.394-.012.776-.036,2.807-.036.406,0,.788.006t.741.018a.234.234,0,0,1,.108.108l-.024.191q-.072.119-.358.119h-.1a10.3,10.3,0,0,0-1.1.054,2.179,2.179,0,0,0-1,.245.432.432,0,0,0-.155.346,4.05,4.05,0,0,0,.394,1.4l1.818,4.217.634,1.4q.921,2.222,1.819,4.539.1.251.179.454l.8-1.959q.62-1.481,1.252-3.154l.823-2.246q.024-.072.131-.478a17.026,17.026,0,0,0,1.157-4,.561.561,0,0,0-.161-.364,1.165,1.165,0,0,0-.52-.3,7.723,7.723,0,0,0-.932-.143l-.884-.108a.337.337,0,0,1-.108-.2l.036-.1,3.87-.036H23.6a3.1,3.1,0,0,1,.885.084l.012.1a.641.641,0,0,1-.072.251,2.449,2.449,0,0,1-.526.119,3.6,3.6,0,0,0-1.244.281,1.815,1.815,0,0,0-.5.687l-3.134,7.765q-1.466,3.5-2.086,5.423l-.345,1.039a.531.531,0,0,1-.263.1,1.383,1.383,0,0,1-.3-.036q-1.422-3.676-2.318-5.681L10.055,9.92a3.247,3.247,0,0,0-.591-.89,5.463,5.463,0,0,0-1.379-.424,4.347,4.347,0,0,1-.466-.119A.326.326,0,0,1,7.5,8.307Z" style="fill:#c5c2ff"/>'
|
||
},
|
||
"VHDL": {
|
||
colour: "#0d9b35",
|
||
icon: '<path d="M2,2H30V30H2Zm1.689.067A1.624,1.624,0,0,0,2.063,3.692V28.314A1.625,1.625,0,0,0,3.689,29.94H28.316a1.625,1.625,0,0,0,1.626-1.626V3.692a1.624,1.624,0,0,0-1.626-1.625ZM3.008,28.079a.911.911,0,0,0,.911.912H28.083a.911.911,0,0,0,.911-.912V3.919a.91.91,0,0,0-.911-.911H3.919a.91.91,0,0,0-.911.911Z" style="fill:#0d9b35"/><polygon points="25.52 5.502 18.858 26.491 13.154 26.491 6.492 5.502 10.508 5.502 16.029 22.795 21.504 5.502 25.52 5.502" style="fill:#fff"/>'
|
||
},
|
||
"vim": {
|
||
colour: "#43b54a",
|
||
icon: '<defs><clipPath id="a"><polygon points="2 2 30 2 30 30 2 30 2 2 2 2" style="fill:none;clip-rule:evenodd"/></clipPath></defs><title>file_type_vim</title><polygon points="29.989 15.856 15.856 2.011 2.011 16.136 15.856 29.989 29.989 15.856 29.989 15.856" style="fill:#231f20;fill-rule:evenodd"/><g style="clip-path:url(#a)"><polygon points="29.989 15.856 15.856 2.011 2.011 16.136 15.856 29.989 29.989 15.856 29.989 15.856" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/></g><polygon points="28.575 15.856 29.422 15.856 15.856 29.422 15.856 28.575 28.575 15.856 28.575 15.856" style="fill:#29695d;fill-rule:evenodd"/><polygon points="28.575 15.856 29.422 15.856 15.856 29.422 15.856 28.575 28.575 15.856 28.575 15.856" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="2.578 16.136 3.425 16.136 15.856 28.575 15.856 29.422 2.578 16.136 2.578 16.136" style="fill:#317367;fill-rule:evenodd"/><polygon points="2.578 16.136 3.425 16.136 15.856 28.575 15.856 29.422 2.578 16.136 2.578 16.136" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="15.856 3.418 15.856 2.578 2.578 16.136 3.425 16.136 15.856 3.418 15.856 3.418" style="fill:#60c2ac;fill-rule:evenodd"/><polygon points="15.856 3.418 15.856 2.578 2.578 16.136 3.425 16.136 15.856 3.418 15.856 3.418" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="15.856 2.578 15.856 3.418 28.575 15.856 29.422 15.856 15.856 2.578 15.856 2.578" style="fill:#43b54a;fill-rule:evenodd"/><polygon points="15.856 2.578 15.856 3.418 28.575 15.856 29.422 15.856 15.856 2.578 15.856 2.578" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="15.856 28.575 28.575 15.856 15.856 3.418 3.425 16.136 15.856 28.575 15.856 28.575" style="fill:#3c8376;fill-rule:evenodd"/><polygon points="15.856 28.575 28.575 15.856 15.856 3.418 3.425 16.136 15.856 28.575 15.856 28.575" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="18.498 6.246 19.345 7.1 13.502 13.028 13.502 7.1 14.069 7.1 14.916 6.246 14.916 3.992 14.069 3.138 4.652 3.138 3.805 3.992 3.805 6.246 4.652 7.1 5.312 7.1 5.312 26.314 6.346 27.161 9.267 27.161 29.516 6.246 29.516 3.992 28.669 3.138 19.438 3.138 18.498 3.992 18.498 6.246 18.498 6.246" style="fill:#231f20;fill-rule:evenodd"/><polygon points="18.498 6.246 19.345 7.1 13.502 13.028 13.502 7.1 14.069 7.1 14.916 6.246 14.916 3.992 14.069 3.138 4.652 3.138 3.805 3.992 3.805 6.246 4.652 7.1 5.312 7.1 5.312 26.314 6.346 27.161 9.267 27.161 29.516 6.246 29.516 3.992 28.669 3.138 19.438 3.138 18.498 3.992 18.498 6.246 18.498 6.246" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="4.932 6.533 4.365 5.966 4.365 4.272 4.932 3.705 13.789 3.698 14.349 4.272 13.789 4.544 13.502 4.272 4.932 5.679 4.932 6.533 4.932 6.533" style="fill:#fff;fill-rule:evenodd"/><polygon points="4.932 6.533 4.365 5.966 4.365 4.272 4.932 3.705 13.789 3.698 14.349 4.272 13.789 4.544 13.502 4.272 4.932 5.679 4.932 6.533 4.932 6.533" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="6.626 26.594 5.966 26.027 5.966 6.526 6.626 5.966 6.626 26.594 6.626 26.594" style="fill:#fff;fill-rule:evenodd"/><polygon points="6.626 26.594 5.966 26.027 5.966 6.526 6.626 5.966 6.626 26.594 6.626 26.594" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="20.759 6.533 21.326 5.966 21.326 7.1 11.902 16.703 12.942 14.442 20.759 6.533 20.759 6.533" style="fill:#fff;fill-rule:evenodd"/><polygon points="20.759 6.533 21.326 5.966 21.326 7.1 11.902 16.703 12.942 14.442 20.759 6.533 20.759 6.533" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="6.82 5.686 6.626 5.966 5.966 6.533 4.932 6.533 4.932 5.399 6.82 5.686 6.82 5.686" style="fill:#929497;fill-rule:evenodd"/><polygon points="6.82 5.686 6.626 5.966 5.966 6.533 4.932 6.533 4.932 5.399 6.82 5.686 6.82 5.686" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="12.942 6.533 12.942 14.442 11.902 16.696 11.902 5.958 13.502 5.958 13.789 5.678 13.502 4.272 14.349 4.272 14.349 5.966 13.789 6.533 12.942 6.533 12.942 6.533" style="fill:#929497;fill-rule:evenodd"/><polygon points="12.942 6.533 12.942 14.442 11.902 16.696 11.902 5.958 13.502 5.958 13.789 5.678 13.502 4.272 14.349 4.272 14.349 5.966 13.789 6.533 12.942 6.533 12.942 6.533" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="19.625 6.533 19.065 5.966 19.065 4.272 19.718 3.705 28.295 3.705 28.956 4.272 28.008 5.119 19.625 5.679 19.625 6.533 19.625 6.533" style="fill:#fff;fill-rule:evenodd"/><polygon points="19.625 6.533 19.065 5.966 19.065 4.272 19.718 3.705 28.295 3.705 28.956 4.272 28.008 5.119 19.625 5.679 19.625 6.533 19.625 6.533" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="28.956 5.966 9.074 26.594 6.626 26.594 6.626 25.747 8.42 25.747 28.295 5.399 28.008 4.272 28.956 4.272 28.956 5.966 28.956 5.966" style="fill:#929497;fill-rule:evenodd"/><polygon points="28.956 5.966 9.074 26.594 6.626 26.594 6.626 25.747 8.42 25.747 28.295 5.399 28.008 4.272 28.956 4.272 28.956 5.966 28.956 5.966" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="21.512 5.686 21.319 5.966 20.759 6.533 19.625 6.533 19.625 5.399 21.512 5.686 21.512 5.686" style="fill:#929497;fill-rule:evenodd"/><polygon points="21.512 5.686 21.319 5.966 20.759 6.533 19.625 6.533 19.625 5.399 21.512 5.686 21.512 5.686" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="11.902 16.696 11.902 5.958 13.502 5.958 13.789 5.679 13.789 4.544 13.502 4.265 5.212 4.265 4.932 4.544 4.932 5.679 5.212 5.958 6.626 5.958 6.626 25.747 6.992 26.027 8.607 26.027 28.389 5.399 28.389 4.588 28.102 4.265 19.912 4.265 19.625 4.544 19.625 5.686 19.912 5.966 21.326 5.966 21.326 7.1 11.902 16.696 11.902 16.696" style="fill:#d0d2d3;fill-rule:evenodd"/><polygon points="11.902 16.696 11.902 5.958 13.502 5.958 13.789 5.679 13.789 4.544 13.502 4.265 5.212 4.265 4.932 4.544 4.932 5.679 5.212 5.958 6.626 5.958 6.626 25.747 6.992 26.027 8.607 26.027 28.389 5.399 28.389 4.588 28.102 4.265 19.912 4.265 19.625 4.544 19.625 5.686 19.912 5.966 21.326 5.966 21.326 7.1 11.902 16.696 11.902 16.696" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="17.041 16.711 17.701 16.144 19.395 16.144 19.869 16.711 19.302 18.405 18.649 18.972 16.955 18.972 16.474 18.405 17.041 16.711 17.041 16.711" style="fill:#231f20;fill-rule:evenodd"/><polygon points="17.041 16.711 17.701 16.144 19.395 16.144 19.869 16.711 19.302 18.405 18.649 18.972 16.955 18.972 16.474 18.405 17.041 16.711 17.041 16.711" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="17.608 26.034 19.309 20.953 18.742 20.953 19.309 19.251 21.843 19.251 22.41 19.819 22.79 19.819 23.35 19.251 25.238 19.251 25.805 19.819 26.178 19.819 26.745 19.251 28.812 19.251 29.566 20.386 28.331 24.405 28.891 24.405 28.346 26.034 24.951 26.034 26.278 22.079 25.431 22.079 24.649 24.391 25.209 24.391 24.678 26.034 21.283 26.034 22.603 22.079 21.756 22.079 20.967 24.405 21.534 24.405 21.003 26.034 17.608 26.034 17.608 26.034" style="fill:#231f20;fill-rule:evenodd"/><polygon points="17.608 26.034 19.309 20.953 18.742 20.953 19.309 19.251 21.843 19.251 22.41 19.819 22.79 19.819 23.35 19.251 25.238 19.251 25.805 19.819 26.178 19.819 26.745 19.251 28.812 19.251 29.566 20.386 28.331 24.405 28.891 24.405 28.346 26.034 24.951 26.034 26.278 22.079 25.431 22.079 24.649 24.391 25.209 24.391 24.678 26.034 21.283 26.034 22.603 22.079 21.756 22.079 20.967 24.405 21.534 24.405 21.003 26.034 17.608 26.034 17.608 26.034" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="28.554 19.819 28.992 20.443 27.599 24.907 28.159 24.907 27.972 25.467 25.711 25.467 27.032 21.512 25.051 21.512 23.924 24.907 24.484 24.907 24.297 25.467 22.036 25.467 23.357 21.512 21.376 21.512 20.249 24.907 20.816 24.907 20.622 25.467 18.361 25.467 20.063 20.386 19.495 20.386 19.682 19.819 21.756 19.819 22.323 20.386 22.883 20.386 23.45 19.819 25.144 19.819 25.711 20.386 26.278 20.386 26.845 19.819 28.554 19.819 28.554 19.819" style="fill:#d0d2d3;fill-rule:evenodd"/><polygon points="28.554 19.819 28.992 20.443 27.599 24.907 28.159 24.907 27.972 25.467 25.711 25.467 27.032 21.512 25.051 21.512 23.924 24.907 24.484 24.907 24.297 25.467 22.036 25.467 23.357 21.512 21.376 21.512 20.249 24.907 20.816 24.907 20.622 25.467 18.361 25.467 20.063 20.386 19.495 20.386 19.682 19.819 21.756 19.819 22.323 20.386 22.883 20.386 23.45 19.819 25.144 19.819 25.711 20.386 26.278 20.386 26.845 19.819 28.554 19.819 28.554 19.819" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><path d="M19.022,19.251,17.292,24.4h.589l-.56,1.637H13.933l1.694-5.082H15.06l3.962-1.7Zm-3.962,1.7.567-1.7h3.4l-3.962,1.7Z" style="fill:#231f20;fill-rule:evenodd"/><path d="M19.022,19.251,17.292,24.4h.589l-.56,1.637H13.933l1.694-5.082H15.06l3.962-1.7Zm-3.962,1.7.567-1.7h3.4l-3.962,1.7Z" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="16.947 25.467 17.134 24.907 16.567 24.907 18.268 19.819 15.914 19.819 15.72 20.386 16.38 20.386 14.686 25.467 16.947 25.467 16.947 25.467" style="fill:#d0d2d3;fill-rule:evenodd"/><polygon points="16.947 25.467 17.134 24.907 16.567 24.907 18.268 19.819 15.914 19.819 15.72 20.386 16.38 20.386 14.686 25.467 16.947 25.467 16.947 25.467" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/><polygon points="18.828 18.125 19.208 16.991 19.022 16.711 17.888 16.711 17.514 16.991 17.134 18.125 17.328 18.405 18.462 18.405 18.828 18.125 18.828 18.125" style="fill:#d0d2d3;fill-rule:evenodd"/><polygon points="18.828 18.125 19.208 16.991 19.022 16.711 17.888 16.711 17.514 16.991 17.134 18.125 17.328 18.405 18.462 18.405 18.828 18.125 18.828 18.125" style="fill:none;stroke:#231f20;stroke-miterlimit:10;stroke-width:0.216000005602837px"/>'
|
||
},
|
||
"Visual Basic": {
|
||
colour: "#00519a",
|
||
icon: '<path d="M6.67,7.836,9,18.915,11.336,7.836H16L11.336,24.164H6.672L2,7.836Z" style="fill:#00519a"/><path d="M18.331,7.836h7.6a4.08,4.08,0,0,1,2.9,1.749,3.78,3.78,0,0,1,.571,2.04,3.985,3.985,0,0,1-.571,2.034,4.108,4.108,0,0,1-2.341,1.763,4.1,4.1,0,0,1,2.929,1.756,3.8,3.8,0,0,1,.58,2.1,4.663,4.663,0,0,1-.579,2.546,5.047,5.047,0,0,1-3.5,2.338H18.331ZM23,14.252h1.166a1.754,1.754,0,0,0,0-3.5H23Zm0,7H24.39a2.047,2.047,0,0,0,0-4.089H23Z" style="fill:#00519a"/>'
|
||
},
|
||
"WebAssembly": {
|
||
colour: "#654ff0",
|
||
icon: '<path d="M19.153,2.35V2.5a3.2,3.2,0,1,1-6.4,0h0V2.35H2V30.269H29.919V2.35Z" style="fill:#654ff0"/><path d="M8.485,17.4h1.85L11.6,24.123h.023L13.14,17.4h1.731l1.371,6.81h.027l1.44-6.81h1.815l-2.358,9.885H15.329l-1.36-6.728h-.036l-1.456,6.728h-1.87Zm13.124,0h2.917l2.9,9.885H25.515l-.63-2.2H21.562l-.486,2.2H19.217Zm1.11,2.437-.807,3.627h2.512L23.5,19.832Z" style="fill:#fff"/>'
|
||
},
|
||
"Wolfram language": {
|
||
colour: "#d01000",
|
||
icon: '<path d="M30,20.55,25.94,16,30,11.45l-5.948-1.294.595-6.067L19.071,6.543,15.993,1.279,12.929,6.543,7.353,4.089l.595,6.067L2,11.45,6.059,16,2,20.55l5.948,1.294-.595,6.067,5.576-2.454,3.078,5.264,3.063-5.264,5.591,2.454-.61-6.067Z" style="fill:#d10"/><path d="M19.353,11.45a6.968,6.968,0,0,1-3.42.862,5.446,5.446,0,0,1-3.212-.862A7.1,7.1,0,0,1,12.5,14.8a6.225,6.225,0,0,1-1.874,2.914,7.454,7.454,0,0,1,3.138,1.19,9.659,9.659,0,0,1,2.216,2.721,8.194,8.194,0,0,1,2.141-2.691,7.605,7.605,0,0,1,3.242-1.2,12.562,12.562,0,0,1-1.933-2.944A6.718,6.718,0,0,1,19.353,11.45Zm-1.9,6.543a5.233,5.233,0,0,0-1.457,1.636,6.236,6.236,0,0,0-1.5-1.621,5.191,5.191,0,0,0-1.948-.848,6.839,6.839,0,0,0,1.115-2.007,6.18,6.18,0,0,0,.223-2.082,6.317,6.317,0,0,0,2.082.446,6.552,6.552,0,0,0,2.171-.461,4.521,4.521,0,0,0,.074,2.156,6.71,6.71,0,0,0,1.249,1.933A7.031,7.031,0,0,0,17.45,17.993Zm4.238-4.015c-.357-1.175.654-6.706.654-6.706S18.55,9.844,15.888,9.844s-6.23-2.572-6.23-2.572,1.175,4.015.461,6.587-4.387,5.472-4.387,5.472,4.788.283,6.6,1.5,3.658,5.948,3.658,5.948,2.454-5.2,3.48-5.948,6.8-1.5,6.8-1.5-4.223-4.178-4.58-5.353Zm-2.84,5.963a9.444,9.444,0,0,0-2.84,4.178s-1.413-3.152-2.974-4.223S8.3,18.543,8.3,18.543s2.454-2.171,3.048-4.1a11.923,11.923,0,0,0-.1-4.952,11.3,11.3,0,0,0,4.669,1.621c2.037,0,4.848-1.621,4.848-1.621s-.818,3.033-.164,4.922,3.108,4.134,3.108,4.134a10.557,10.557,0,0,0-4.862,1.4Z" style="fill:#fff"/>'
|
||
},
|
||
"XML": {
|
||
colour: "#f1662a",
|
||
icon: '<path d="M20.42,21.157l2.211,2.211L30,16,22.631,8.631,20.42,10.843,25.58,16Z" style="fill:#f1662a"/><path d="M11.58,10.843,9.369,8.631,2,16l7.369,7.369,2.211-2.211L6.42,16Z" style="fill:#f1662a"/><path d="M17.411,7.677l1.6.437-4.42,16.209-1.6-.437,4.42-16.209Z" style="fill:#f1662a"/>'
|
||
},
|
||
"XQuery": {
|
||
colour: "#f1662a",
|
||
icon: '<path d="M20.42,21.157l2.211,2.211L30,16,22.631,8.631,20.42,10.843,25.58,16ZM11.58,10.843,9.369,8.631,2,16l7.369,7.369,2.211-2.211L6.42,16Zm5.831-3.166,1.6.437-4.42,16.209-1.6-.437Z" style="fill:#f1662a"/><path d="M20.332,18.462a3.354,3.354,0,0,1,.975-1.423,4.014,4.014,0,0,1,1.617-.8A9.118,9.118,0,0,1,25.138,16a5.472,5.472,0,0,1,3.681,1.039A3.5,3.5,0,0,1,30,19.808a4.47,4.47,0,0,1-.24,1.491,3.124,3.124,0,0,1-.838,1.239l-1.675,1.6a1.512,1.512,0,0,0-.424.789,5.307,5.307,0,0,0-.1,1.1H23v-.54a6.32,6.32,0,0,1,.207-1.778,2.886,2.886,0,0,1,.78-1.24l1.352-1.289a1.84,1.84,0,0,0,.563-.894,3.682,3.682,0,0,0,.1-.8,1.5,1.5,0,0,0-.252-.9.9.9,0,0,0-.779-.346,1.255,1.255,0,0,0-.483.086.724.724,0,0,0-.344.337,2.347,2.347,0,0,0-.217.721,7.614,7.614,0,0,0-.081,1.24H20A6.155,6.155,0,0,1,20.332,18.462Zm6.457,8.5V30H22.936V26.962Z" style="fill:#fcba00"/>'
|
||
},
|
||
"YAML": {
|
||
colour: "#ffe885",
|
||
icon: '<path d="M2,12.218c.755,0,1.51-.008,2.264,0l.053.038Q5.7,13.638,7.078,15.014c.891-.906,1.8-1.794,2.7-2.7.053-.052.11-.113.192-.1.608,0,1.215,0,1.823,0a1.4,1.4,0,0,1,.353.019c-.7.67-1.377,1.369-2.069,2.05L5.545,18.8c-.331.324-.648.663-.989.975-.754.022-1.511.007-2.266.007,1.223-1.209,2.431-2.433,3.658-3.637C4.627,14.841,3.318,13.525,2,12.218Z" style="fill:#ffe885"/><path d="M12.7,12.218c.613,0,1.226,0,1.839,0q0,3.783,0,7.566c-.611,0-1.222.012-1.832-.008,0-1.664,0-3.329,0-4.994-1.6,1.607-3.209,3.2-4.811,4.8-.089.08-.166.217-.305.194-.824-.006-1.649,0-2.474,0Q8.916,16,12.7,12.218Z" style="fill:#ffe885"/><path d="M14.958,12.22c.47-.009.939,0,1.409,0,.836.853,1.69,1.689,2.536,2.532q1.268-1.267,2.539-2.532.7,0,1.4,0-.008,3.784,0,7.567c-.471,0-.943.006-1.414,0q.008-2.387,0-4.773c-.844.843-1.676,1.7-2.526,2.536-.856-.835-1.687-1.695-2.532-2.541,0,1.594-.006,3.188.006,4.781-.472,0-.943.005-1.415,0Q14.958,16,14.958,12.22Z" style="fill:#ffe885"/><path d="M23.259,12.217c.472,0,.944-.007,1.416,0q-.007,3.083,0,6.166c1.26,0,2.521,0,3.782,0,.063.006.144-.012.191.045.448.454.907.9,1.353,1.354q-3.371.007-6.741,0Q23.267,16,23.259,12.217Z" style="fill:#ffe885"/>'
|
||
},
|
||
"YANG": {
|
||
colour: "#231f20",
|
||
icon: '<path d="M8.877,23.159c0-5.535,3.992-7.168,7.894-7.168,3.357,0,5.988-3.811,5.988-6.624,0-3.621-2.487-5.831-4.882-7.12A13.881,13.881,0,1,0,14.5,29.8C10.491,28.248,8.877,25.324,8.877,23.159Z" style="fill:#fff"/><path d="M14.482,29.917A14,14,0,0,1,16,2a14.154,14.154,0,0,1,1.893.131l.04.013c2.255,1.213,4.944,3.452,4.944,7.223,0,2.715-2.564,6.741-6.106,6.741-2.9,0-7.776.916-7.776,7.05,0,2.022,1.451,4.946,5.542,6.531ZM16,2.236A13.765,13.765,0,0,0,13.637,29.56c-3.581-1.684-4.877-4.447-4.877-6.4,0-6.576,5.6-7.286,8.012-7.286,3.406,0,5.87-3.886,5.87-6.506,0-3.645-2.606-5.82-4.8-7.006A13.928,13.928,0,0,0,16,2.236Z" style="fill:#231f20"/><path d="M29.882,16a13.882,13.882,0,0,0-12-13.752c2.4,1.289,4.882,3.5,4.882,7.12,0,2.813-2.631,6.624-5.988,6.624-3.9,0-7.894,1.633-7.894,7.168,0,2.166,1.613,5.089,5.618,6.641A13.875,13.875,0,0,0,29.882,16Z" style="fill:#231f20"/><path d="M16,30a14.2,14.2,0,0,1-1.518-.083l-.03-.007c-4.2-1.628-5.693-4.654-5.693-6.75,0-6.576,5.6-7.286,8.012-7.286,3.406,0,5.87-3.886,5.87-6.506,0-3.655-2.621-5.833-4.82-7.016l.072-.221A14,14,0,0,1,16,30Zm-1.477-.316A13.756,13.756,0,0,0,29.764,16,13.807,13.807,0,0,0,18.5,2.466c2.115,1.272,4.377,3.441,4.377,6.9,0,2.715-2.564,6.741-6.106,6.741-2.9,0-7.776.916-7.776,7.05C9,25.178,10.443,28.1,14.523,29.684Z" style="fill:#231f20"/><circle cx="15.943" cy="22.787" r="1.506" style="fill:#fff"/><circle cx="16.007" cy="9.142" r="1.506" style="fill:#231f20"/>'
|
||
},
|
||
"Zig": {
|
||
colour: "#f7a41d",
|
||
icon: '<polygon points="5.733 19.731 5.733 12.264 8.533 12.264 8.533 8.531 2 8.531 2 23.464 5.547 23.464 8.907 19.731 5.733 19.731" style="fill:#f7a41d"/><polygon points="26.453 8.531 23.093 12.264 26.267 12.264 26.267 19.731 23.467 19.731 23.467 23.464 30 23.464 30 8.531 26.453 8.531" style="fill:#f7a41d"/><polygon points="26.875 6.707 20.513 8.531 9.467 8.531 9.467 12.264 16.847 12.264 5.115 25.293 11.497 23.464 22.533 23.464 22.533 19.731 15.148 19.731 26.875 6.707" style="fill:#f7a41d"/>'
|
||
}
|
||
};
|
||
var EXECUTE_CODE_LANGUAGE_ALIASES = ["javascript", "typescript", "bash", "csharp", "wolfram", "nb", "wl", "hs", "py", "scpt"];
|
||
var EXECUTE_CODE_CANONICAL_LANGUAGES = ["js", "ts", "cs", "lean", "lua", "python", "cpp", "prolog", "shell", "groovy", "r", "go", "rust", "java", "powershell", "kotlin", "mathematica", "haskell", "scala", "racket", "fsharp", "c", "dart", "ruby", "batch", "sql", "octave", "maxima", "applescript"];
|
||
var EXECUTE_CODE_SUPPORTED_LANGUAGES = [...EXECUTE_CODE_LANGUAGE_ALIASES, ...EXECUTE_CODE_CANONICAL_LANGUAGES];
|
||
|
||
// src/SettingsTab.ts
|
||
var import_obsidian = require("obsidian");
|
||
var import_pickr = __toESM(require_pickr_min());
|
||
|
||
// node_modules/colortranslator/esm/index.js
|
||
var t = function() {
|
||
return t = Object.assign || function(t2) {
|
||
for (var e2, n2 = 1, r2 = arguments.length; n2 < r2; n2++)
|
||
for (var i2 in e2 = arguments[n2])
|
||
Object.prototype.hasOwnProperty.call(e2, i2) && (t2[i2] = e2[i2]);
|
||
return t2;
|
||
}, t.apply(this, arguments);
|
||
};
|
||
function e(t2, e2, n2) {
|
||
if (n2 || 2 === arguments.length)
|
||
for (var r2, i2 = 0, o2 = e2.length; i2 < o2; i2++)
|
||
!r2 && i2 in e2 || (r2 || (r2 = Array.prototype.slice.call(e2, 0, i2)), r2[i2] = e2[i2]);
|
||
return t2.concat(r2 || Array.prototype.slice.call(e2));
|
||
}
|
||
var n;
|
||
var r;
|
||
var i;
|
||
var o;
|
||
!function(t2) {
|
||
t2.HEX = "HEX", t2.RGB = "RGB", t2.HSL = "HSL", t2.CMYK = "CMYK";
|
||
}(n || (n = {})), function(t2) {
|
||
t2.ANALOGOUS = "ANALOGOUS", t2.COMPLEMENTARY = "COMPLEMENTARY", t2.SPLIT_COMPLEMENTARY = "SPLIT_COMPLEMENTARY", t2.TRIADIC = "TRIADIC", t2.TETRADIC = "TETRADIC", t2.SQUARE = "SQUARE";
|
||
}(r || (r = {})), function(t2) {
|
||
t2.ADDITIVE = "ADDITIVE", t2.SUBTRACTIVE = "SUBTRACTIVE";
|
||
}(i || (i = {})), function(t2) {
|
||
t2.black = "#000000", t2.silver = "#C0C0C0", t2.gray = "#808080", t2.white = "#FFFFFF", t2.maroon = "#800000", t2.red = "#FF0000", t2.purple = "#800080", t2.fuchsia = "#FF00FF", t2.green = "#008000", t2.lime = "#00FF00", t2.olive = "#808000", t2.yellow = "#FFFF00", t2.navy = "#000080", t2.blue = "#0000FF", t2.teal = "#008080", t2.aqua = "#00FFFF", t2.orange = "#FFA500", t2.aliceblue = "#F0F8FF", t2.antiquewhite = "#FAEBD7", t2.aquamarine = "#7FFFD4", t2.azure = "#F0FFFF", t2.beige = "#F5F5DC", t2.bisque = "#FFE4C4", t2.blanchedalmond = "#FFEBCD", t2.blueviolet = "#8A2BE2", t2.brown = "#A52A2A", t2.burlywood = "#DEB887", t2.cadetblue = "#5F9EA0", t2.chartreuse = "#7FFF00", t2.chocolate = "#D2691E", t2.coral = "#FF7F50", t2.cornflowerblue = "#6495ED", t2.cornsilk = "#FFF8DC", t2.crimson = "#DC143C", t2.cyan = "#00FFFF", t2.darkblue = "#00008B", t2.darkcyan = "#008B8B", t2.darkgoldenrod = "#B8860B", t2.darkgray = "#A9A9A9", t2.darkgreen = "#006400", t2.darkgrey = "#A9A9A9", t2.darkkhaki = "#BDB76B", t2.darkmagenta = "#8B008B", t2.darkolivegreen = "#556B2F", t2.darkorange = "#FF8C00", t2.darkorchid = "#9932CC", t2.darkred = "#8B0000", t2.darksalmon = "#E9967A", t2.darkseagreen = "#8FBC8F", t2.darkslateblue = "#483D8B", t2.darkslategray = "#2F4F4F", t2.darkslategrey = "#2F4F4F", t2.darkturquoise = "#00CED1", t2.darkviolet = "#9400D3", t2.deeppink = "#FF1493", t2.deepskyblue = "#00BFFF", t2.dimgray = "#696969", t2.dimgrey = "#696969", t2.dodgerblue = "#1E90FF", t2.firebrick = "#B22222", t2.floralwhite = "#FFFAF0", t2.forestgreen = "#228B22", t2.gainsboro = "#DCDCDC", t2.ghostwhite = "#F8F8FF", t2.gold = "#FFD700", t2.goldenrod = "#DAA520", t2.greenyellow = "#ADFF2F", t2.grey = "#808080", t2.honeydew = "#F0FFF0", t2.hotpink = "#FF69B4", t2.indianred = "#CD5C5C", t2.indigo = "#4B0082", t2.ivory = "#FFFFF0", t2.khaki = "#F0E68C", t2.lavender = "#E6E6FA", t2.lavenderblush = "#FFF0F5", t2.lawngreen = "#7CFC00", t2.lemonchiffon = "#FFFACD", t2.lightblue = "#ADD8E6", t2.lightcoral = "#F08080", t2.lightcyan = "#E0FFFF", t2.lightgoldenrodyellow = "#FAFAD2", t2.lightgray = "#D3D3D3", t2.lightgreen = "#90EE90", t2.lightgrey = "#D3D3D3", t2.lightpink = "#FFB6C1", t2.lightsalmon = "#FFA07A", t2.lightseagreen = "#20B2AA", t2.lightskyblue = "#87CEFA", t2.lightslategray = "#778899", t2.lightslategrey = "#778899", t2.lightsteelblue = "#B0C4DE", t2.lightyellow = "#FFFFE0", t2.limegreen = "#32CD32", t2.linen = "#FAF0E6", t2.magenta = "#FF00FF", t2.mediumaquamarine = "#66CDAA", t2.mediumblue = "#0000CD", t2.mediumorchid = "#BA55D3", t2.mediumpurple = "#9370DB", t2.mediumseagreen = "#3CB371", t2.mediumslateblue = "#7B68EE", t2.mediumspringgreen = "#00FA9A", t2.mediumturquoise = "#48D1CC", t2.mediumvioletred = "#C71585", t2.midnightblue = "#191970", t2.mintcream = "#F5FFFA", t2.mistyrose = "#FFE4E1", t2.moccasin = "#FFE4B5", t2.navajowhite = "#FFDEAD", t2.oldlace = "#FDF5E6", t2.olivedrab = "#6B8E23", t2.orangered = "#FF4500", t2.orchid = "#DA70D6", t2.palegoldenrod = "#EEE8AA", t2.palegreen = "#98FB98", t2.paleturquoise = "#AFEEEE", t2.palevioletred = "#DB7093", t2.papayawhip = "#FFEFD5", t2.peachpuff = "#FFDAB9", t2.peru = "#CD853F", t2.pink = "#FFC0CB", t2.plum = "#DDA0DD", t2.powderblue = "#B0E0E6", t2.rosybrown = "#BC8F8F", t2.royalblue = "#4169E1", t2.saddlebrown = "#8B4513", t2.salmon = "#FA8072", t2.sandybrown = "#F4A460", t2.seagreen = "#2E8B57", t2.seashell = "#FFF5EE", t2.sienna = "#A0522D", t2.skyblue = "#87CEEB", t2.slateblue = "#6A5ACD", t2.slategray = "#708090", t2.slategrey = "#708090", t2.snow = "#FFFAFA", t2.springgreen = "#00FF7F", t2.steelblue = "#4682B4", t2.tan = "#D2B48C", t2.thistle = "#D8BFD8", t2.tomato = "#FF6347", t2.turquoise = "#40E0D0", t2.violet = "#EE82EE", t2.wheat = "#F5DEB3", t2.whitesmoke = "#F5F5F5", t2.yellowgreen = "#9ACD32", t2.rebeccapurple = "#663399";
|
||
}(o || (o = {}));
|
||
var a;
|
||
var c;
|
||
var u = Object.keys(o);
|
||
var s = { HEX: ["r", "g", "b", "a"], RGB: ["r", "g", "b", "a"], HSL: ["h", "s", "l", "a"], CMYK: ["c", "m", "y", "k", "a"] };
|
||
var d = { BGR: n.RGB, ABGR: n.RGB, HLS: n.HSL, AHLS: n.HSL, CKMY: n.CMYK, ACKMY: n.CMYK };
|
||
!function(t2) {
|
||
t2.NUMBER = "number", t2.BOOLEAN = "boolean";
|
||
}(a || (a = {}));
|
||
var l;
|
||
var f;
|
||
var h;
|
||
var p = ((c = {})[n.HEX] = /^#(?:([a-f\d])([a-f\d])([a-f\d])([a-f\d])?|([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})?)$/i, c[n.RGB] = /^rgba?\s*\(\s*(?:((?:\d*\.)?\d+%?)\s*,\s*((?:\d*\.)?\d+%?)\s*,\s*((?:\d*\.)?\d+%?)(?:\s*,\s*((?:\d*\.)?\d+))?|((?:\d*\.)?\d+%?)\s*((?:\d*\.)?\d+%?)\s*((?:\d*\.)?\d+%?)(?:\s*\/\s*((?:\d*\.)?\d+%?))?)\s*\)$/, c[n.HSL] = /^hsla?\s*\(\s*(?:(-?(?:\d*\.)?\d+(?:deg|grad|rad|turn)?)\s*,\s*((?:\d*\.)?\d+)%\s*,\s*((?:\d*\.)?\d+)%(?:\s*,\s*((?:\d*\.)?\d+))?|(-?(?:\d*\.)?\d+(?:deg|grad|rad|turn)?)\s*((?:\d*\.)?\d+)%\s*((?:\d*\.)?\d+)%(?:\s*\/\s*((?:\d*\.)?\d+%?))?)\s*\)$/, c[n.CMYK] = /^(?:device-cmyk|cmyk)\s*\(\s*(?:((?:\d*\.)?\d+%?)\s*,\s*((?:\d*\.)?\d+%?)\s*,\s*((?:\d*\.)?\d+%?)\s*,\s*((?:\d*\.)?\d+%?)(?:\s*,\s*((?:\d*\.)?\d+))?|((?:\d*\.)?\d+%?)\s*((?:\d*\.)?\d+%?)\s*((?:\d*\.)?\d+%?)\s*((?:\d*\.)?\d+%?)(?:\s*\/\s*((?:\d*\.)?\d+%?))?)\s*\)$/, c);
|
||
var g = /^(-?(?:\d*\.)?\d+)((?:deg|grad|rad|turn)?)$/;
|
||
var m = /^(\d+(?:\.\d+)?|\.\d+)%$/;
|
||
var b = /^0x([a-f\d]{1,2})$/i;
|
||
var A = /\{(\d+)\}/g;
|
||
var y = /,( +|\d+)/g;
|
||
var E = / +/;
|
||
var F = "The provided string color doesn't have a correct format";
|
||
var v = "The provided color object doesn't have the proper keys or format";
|
||
!function(t2) {
|
||
t2.NONE = "none", t2.DEGREES = "deg", t2.GRADIANS = "grad", t2.RADIANS = "rad", t2.TURNS = "turn";
|
||
}(l || (l = {})), function(t2) {
|
||
t2.NONE = "none", t2.PERCENT = "percent";
|
||
}(f || (f = {})), function(t2) {
|
||
t2.DEVICE_CMYK = "device-cmyk", t2.CMYK = "cmyk";
|
||
}(h || (h = {}));
|
||
var H;
|
||
var B;
|
||
var C;
|
||
var S;
|
||
var R;
|
||
var M;
|
||
var D = { decimals: 6, legacyCSS: false, spacesAfterCommas: false, anglesUnit: l.NONE, rgbUnit: f.NONE, cmykUnit: f.PERCENT, alphaUnit: f.NONE, cmykFunction: h.DEVICE_CMYK };
|
||
var O = function(t2, e2) {
|
||
return Object.prototype.hasOwnProperty.call(t2, e2);
|
||
};
|
||
var L = function(t2) {
|
||
return +"".concat(t2).replace(m, "$1");
|
||
};
|
||
var G = function(t2) {
|
||
return m.test("".concat(t2)) ? L(t2) : Math.min(+t2, 100);
|
||
};
|
||
var k = function(t2) {
|
||
return 1 === t2.length && (t2 += t2), parseInt(t2, 16);
|
||
};
|
||
var j = function(t2) {
|
||
var e2 = K(t2, 0).toString(16).toUpperCase();
|
||
return 1 === e2.length ? "0x0".concat(e2) : "0x".concat(e2);
|
||
};
|
||
var X = function(t2, e2) {
|
||
return void 0 === e2 && (e2 = false), !e2 && m.test(t2) ? Math.min(255 * L(t2) / 100, 255) : b.test(t2) ? (3 === t2.length && (t2 += t2.slice(-1)), e2 ? K(t2) / 255 : K(t2)) : Math.min(+t2, e2 ? 1 : 255);
|
||
};
|
||
var I = function(t2) {
|
||
return Math.min(m.test(t2) ? L(t2) / 100 : +t2, 1);
|
||
};
|
||
var Y = function(t2) {
|
||
return e([], t2, true).sort().join("").toUpperCase();
|
||
};
|
||
var K = function(t2, e2) {
|
||
void 0 === e2 && (e2 = 6);
|
||
var n2 = Math.pow(10, e2);
|
||
return Math.round(+t2 * n2) / n2;
|
||
};
|
||
var N = function(t2, e2, n2) {
|
||
return Math.max(e2, Math.min(t2, n2));
|
||
};
|
||
var T = function(t2) {
|
||
if ("string" == typeof t2) {
|
||
var e2 = t2.match(g), n2 = +e2[1];
|
||
switch (e2[2]) {
|
||
case l.RADIANS:
|
||
t2 = K(180 * n2 / Math.PI);
|
||
break;
|
||
case l.TURNS:
|
||
t2 = K(360 * n2);
|
||
break;
|
||
case l.GRADIANS:
|
||
t2 = K(0.9 * n2);
|
||
break;
|
||
case l.DEGREES:
|
||
default:
|
||
t2 = n2;
|
||
}
|
||
}
|
||
return (t2 > 360 || t2 < 0) && (t2 -= 360 * Math.floor(t2 / 360)), t2;
|
||
};
|
||
var P = function(t2, e2) {
|
||
var n2;
|
||
switch (e2) {
|
||
case l.RADIANS:
|
||
n2 = K(function(t3) {
|
||
return t3 * Math.PI / 180;
|
||
}(t2));
|
||
break;
|
||
case l.TURNS:
|
||
n2 = K(t2 / 360);
|
||
break;
|
||
case l.GRADIANS:
|
||
n2 = K(10 / 9 * t2);
|
||
break;
|
||
case l.DEGREES:
|
||
case l.NONE:
|
||
default:
|
||
n2 = t2;
|
||
}
|
||
return n2;
|
||
};
|
||
var U = function(t2) {
|
||
for (var e2 = [], n2 = 1; n2 < arguments.length; n2++)
|
||
e2[n2 - 1] = arguments[n2];
|
||
for (var r2 = [], i2 = [], o2 = [], c2 = [], u2 = [], s3 = Object.values(l), d2 = Object.values(f), b2 = Object.values(h), A2 = { legacyCSS: 0, spacesAfterCommas: 0, cmykFunction: 0 }, F2 = 0, v2 = e2; F2 < v2.length; F2++) {
|
||
var H2 = v2[F2];
|
||
if ("string" == typeof H2) {
|
||
if (r2.push(H2), H2.includes(",")) {
|
||
A2.legacyCSS++;
|
||
var B2 = H2.match(y);
|
||
1 === new Set(B2).size && E.test(B2[0].slice(1)) && A2.spacesAfterCommas++;
|
||
}
|
||
if (H2.match(p.HSL)) {
|
||
var C2 = (k2 = H2.match(p.HSL))[1] || k2[5], S2 = k2[8], R2 = C2.match(g)[2];
|
||
i2.push("" === R2 ? l.NONE : R2), u2.push(m.test(S2));
|
||
continue;
|
||
}
|
||
if (p.RGB.test(H2)) {
|
||
var M2 = (k2 = H2.match(p.RGB))[1] || k2[5], O2 = k2[2] || k2[6], L2 = k2[3] || k2[7], G2 = k2[8];
|
||
o2.push(m.test(M2) && m.test(O2) && m.test(L2)), u2.push(m.test(G2));
|
||
continue;
|
||
}
|
||
if (H2.match(p.CMYK)) {
|
||
var k2, j2 = (k2 = H2.match(p.CMYK))[1] || k2[6], X2 = k2[2] || k2[7], I2 = k2[3] || k2[8], Y2 = k2[4] || k2[9];
|
||
G2 = k2[10];
|
||
c2.push(m.test(j2) && m.test(X2) && m.test(I2) && m.test(Y2)), H2.startsWith("cmyk") && A2.cmykFunction++, u2.push(m.test(G2));
|
||
}
|
||
}
|
||
}
|
||
return { decimals: typeof t2.decimals === a.NUMBER ? t2.decimals : D.decimals, legacyCSS: typeof t2.legacyCSS === a.BOOLEAN ? t2.legacyCSS : Boolean(r2.length && A2.legacyCSS === r2.length) || D.legacyCSS, spacesAfterCommas: typeof t2.spacesAfterCommas === a.BOOLEAN ? t2.spacesAfterCommas : Boolean(r2.length && A2.spacesAfterCommas === r2.length) || D.spacesAfterCommas, anglesUnit: t2.anglesUnit && s3.includes(t2.anglesUnit) ? t2.anglesUnit : 1 === new Set(i2).size ? i2[0] : D.anglesUnit, rgbUnit: t2.rgbUnit && d2.includes(t2.rgbUnit) ? t2.rgbUnit : 1 === new Set(o2).size && o2[0] ? f.PERCENT : D.rgbUnit, cmykUnit: t2.cmykUnit && d2.includes(t2.cmykUnit) ? t2.cmykUnit : 1 !== new Set(c2).size || c2[0] ? D.cmykUnit : f.NONE, alphaUnit: t2.alphaUnit && d2.includes(t2.alphaUnit) ? t2.alphaUnit : 1 === new Set(u2).size && u2[0] ? f.PERCENT : D.alphaUnit, cmykFunction: t2.cmykFunction && b2.includes(t2.cmykFunction) ? t2.cmykFunction : c2.length && c2.length === A2.cmykFunction ? h.CMYK : D.cmykFunction };
|
||
};
|
||
var w = function(t2, e2, n2) {
|
||
return n2 < 0 && (n2 += 6), n2 >= 6 && (n2 -= 6), K(n2 < 1 ? 255 * ((e2 - t2) * n2 + t2) : n2 < 3 ? 255 * e2 : n2 < 4 ? 255 * ((e2 - t2) * (4 - n2) + t2) : 255 * t2);
|
||
};
|
||
var x = function(t2, e2, n2) {
|
||
e2 /= 100;
|
||
var r2 = (n2 /= 100) <= 0.5 ? n2 * (e2 + 1) : n2 + e2 - n2 * e2, i2 = 2 * n2 - r2;
|
||
return { r: w(i2, r2, (t2 /= 60) + 2), g: w(i2, r2, t2), b: w(i2, r2, t2 - 2) };
|
||
};
|
||
var V = function(t2, e2, n2, r2) {
|
||
return { r: K(255 * (1 - t2) * (r2 = 1 - r2)), g: K(255 * (1 - e2) * r2), b: K(255 * (1 - n2) * r2) };
|
||
};
|
||
var q = function(t2, e2, n2) {
|
||
t2 /= 255, e2 /= 255, n2 /= 255;
|
||
var r2 = 1 - Math.max(t2, e2, n2), i2 = 1 - r2, o2 = i2 && (i2 - e2) / i2, a2 = i2 && (i2 - n2) / i2;
|
||
return { c: K(100 * (i2 && (i2 - t2) / i2)), m: K(100 * o2), y: K(100 * a2), k: K(100 * r2) };
|
||
};
|
||
var _ = function(t2, e2, n2, r2) {
|
||
void 0 === r2 && (r2 = 1), t2 /= 255, e2 /= 255, n2 /= 255, r2 = Math.min(r2, 1);
|
||
var i2 = Math.max(t2, e2, n2), o2 = Math.min(t2, e2, n2), a2 = i2 - o2, c2 = 0, u2 = 0, s3 = (i2 + o2) / 2;
|
||
if (0 !== a2) {
|
||
switch (i2) {
|
||
case t2:
|
||
c2 = (e2 - n2) / a2 % 6;
|
||
break;
|
||
case e2:
|
||
c2 = (n2 - t2) / a2 + 2;
|
||
break;
|
||
case n2:
|
||
c2 = (t2 - e2) / a2 + 4;
|
||
}
|
||
(c2 = K(60 * c2)) < 0 && (c2 += 360), u2 = a2 / (1 - Math.abs(2 * s3 - 1));
|
||
}
|
||
return { h: c2, s: K(100 * u2), l: K(100 * s3), a: r2 };
|
||
};
|
||
var $ = function(t2, e2) {
|
||
if (t2 < 0 && (t2 += 360), t2 > 360 && (t2 -= 360), 360 === t2 || 0 === t2)
|
||
return t2;
|
||
var n2 = [[0, 120], [120, 180], [180, 240], [240, 360]], r2 = [[0, 60], [60, 120], [120, 240], [240, 360]], i2 = e2 ? r2 : n2, o2 = 0, a2 = 0, c2 = 0, u2 = 0;
|
||
return (e2 ? n2 : r2).find(function(e3, n3) {
|
||
return t2 >= e3[0] && t2 < e3[1] && (o2 = e3[0], a2 = e3[1], c2 = i2[n3][0], u2 = i2[n3][1], true);
|
||
}), c2 + (u2 - c2) / (a2 - o2) * (t2 - o2);
|
||
};
|
||
var z = function(t2) {
|
||
return t2 ? ", " : ",";
|
||
};
|
||
var Q = function(t2, e2) {
|
||
var n2 = Y(Object.keys(t2));
|
||
return s[d[n2]].reduce(function(n3, r2, i2) {
|
||
var o2 = t2[r2];
|
||
return void 0 !== o2 && n3.push(e2(o2, i2)), n3;
|
||
}, []);
|
||
};
|
||
var W = function(t2, e2) {
|
||
return t2.replace(A, function(t3, n2) {
|
||
return "".concat(e2[+n2 - 1]);
|
||
});
|
||
};
|
||
var J = function(t2, e2) {
|
||
var n2 = e2.alphaUnit, r2 = e2.legacyCSS, i2 = e2.decimals;
|
||
return n2 !== f.PERCENT || r2 ? K(t2, i2) : "".concat(K(100 * t2, i2), "%");
|
||
};
|
||
var Z = ((H = {})[n.HEX] = function(t2) {
|
||
var e2 = Q(t2, function(t3) {
|
||
return e3 = K(t3), 1 === (n3 = K(e3, 0).toString(16).toUpperCase()).length && (n3 = "0".concat(n3)), n3;
|
||
var e3, n3;
|
||
}), n2 = 4 === e2.length ? "#{1}{2}{3}{4}" : "#{1}{2}{3}";
|
||
return W(n2, e2);
|
||
}, H[n.RGB] = function(t2, e2) {
|
||
var n2 = e2.decimals, r2 = e2.legacyCSS, i2 = e2.spacesAfterCommas, o2 = e2.rgbUnit, a2 = z(i2), c2 = Q(t2, function(t3, r3) {
|
||
return o2 === f.PERCENT && r3 < 3 ? "".concat(function(t4, e3) {
|
||
return K(t4 / 255 * 100, e3);
|
||
}(t3, n2), "%") : 3 === r3 ? J(t3, e2) : K(t3, n2);
|
||
}), u2 = r2 ? 4 === c2.length ? "rgba({1}".concat(a2, "{2}").concat(a2, "{3}").concat(a2, "{4})") : "rgb({1}".concat(a2, "{2}").concat(a2, "{3})") : 4 === c2.length ? "rgb({1} {2} {3} / {4})" : "rgb({1} {2} {3})";
|
||
return W(u2, c2);
|
||
}, H[n.HSL] = function(t2, e2) {
|
||
var n2 = e2.decimals, r2 = e2.legacyCSS, i2 = e2.spacesAfterCommas, o2 = e2.anglesUnit, a2 = z(i2), c2 = Q(t2, function(t3, r3) {
|
||
if (0 === r3 && o2 !== l.NONE) {
|
||
var i3 = K(P(t3, o2), n2);
|
||
return "".concat(i3).concat(o2);
|
||
}
|
||
return 3 === r3 ? J(t3, e2) : K(t3, n2);
|
||
}), u2 = r2 ? 4 === c2.length ? "hsla({1}".concat(a2, "{2}%").concat(a2, "{3}%").concat(a2, "{4})") : "hsl({1}".concat(a2, "{2}%").concat(a2, "{3}%)") : 4 === c2.length ? "hsl({1} {2}% {3}% / {4})" : "hsl({1} {2}% {3}%)";
|
||
return W(u2, c2);
|
||
}, H[n.CMYK] = function(t2, e2) {
|
||
var n2 = e2.decimals, r2 = e2.legacyCSS, i2 = e2.spacesAfterCommas, o2 = e2.cmykUnit, a2 = e2.cmykFunction, c2 = z(i2), u2 = Q(t2, function(t3, r3) {
|
||
return o2 === f.PERCENT && r3 < 4 ? "".concat(K(t3, n2), "%") : 4 === r3 ? J(t3, e2) : K(t3 / 100, n2);
|
||
}), s3 = r2 ? 5 === u2.length ? "".concat(a2, "({1}").concat(c2, "{2}").concat(c2, "{3}").concat(c2, "{4}").concat(c2, "{5})") : "".concat(a2, "({1}").concat(c2, "{2}").concat(c2, "{3}").concat(c2, "{4})") : 5 === u2.length ? "".concat(a2, "({1} {2} {3} {4} / {5})") : "".concat(a2, "({1} {2} {3} {4})");
|
||
return W(s3, u2);
|
||
}, H);
|
||
var tt = function(t2) {
|
||
return "string" == typeof t2 && (t2 = m.test(t2) ? L(t2) / 100 : +t2), isNaN(+t2) || t2 > 1 ? 1 : K(t2);
|
||
};
|
||
var et = function(n2, r2, o2) {
|
||
return r2.reduce(function(r3, a2) {
|
||
return e(e([], r3, true), [t(t({}, n2), { h: o2 === i.ADDITIVE ? T(n2.h + a2) : T($($(n2.h, false) + a2, true)) })], false);
|
||
}, [t({}, n2)]);
|
||
};
|
||
var nt = function(t2, e2) {
|
||
return et(t2, [30, -30], e2);
|
||
};
|
||
var rt = function(t2, e2) {
|
||
return et(t2, [180], e2);
|
||
};
|
||
var it = function(t2, e2) {
|
||
return et(t2, [150, -150], e2);
|
||
};
|
||
var ot = function(t2, e2) {
|
||
return et(t2, [120, -120], e2);
|
||
};
|
||
var at = function(t2, e2) {
|
||
return et(t2, [60, -120, 180], e2);
|
||
};
|
||
var ct = function(t2, e2) {
|
||
return et(t2, [90, -90, 180], e2);
|
||
};
|
||
var ut = function(t2) {
|
||
return "string" == typeof t2 ? function(t3) {
|
||
var e2;
|
||
if (Object.keys(n).some(function(n2) {
|
||
if (p[n2].test(t3))
|
||
return e2 = n2, true;
|
||
}), !e2 && ~u.indexOf(t3) && (e2 = n.HEX), !e2)
|
||
throw new Error(F);
|
||
return e2;
|
||
}(t2) : function(t3) {
|
||
var e2, r2 = false, i2 = Y(Object.keys(t3));
|
||
if (d[i2] && (e2 = d[i2]), e2 && e2 === n.RGB) {
|
||
var o2 = Object.entries(t3).some(function(t4) {
|
||
return !b.test("".concat(t4[1]));
|
||
}), a2 = Object.entries(t3).some(function(t4) {
|
||
return !(m.test("".concat(t4[1])) || !b.test("".concat(t4[1])) && !isNaN(+t4[1]) && +t4[1] <= 255);
|
||
});
|
||
o2 && a2 && (r2 = true), o2 || (e2 = n.HEX);
|
||
}
|
||
if (!e2 || r2)
|
||
throw new Error(v);
|
||
return e2;
|
||
}(t2);
|
||
};
|
||
var st = ((B = {})[n.HEX] = function(t2) {
|
||
var e2 = (~u.indexOf(t2) ? o[t2] : t2).match(p.HEX), n2 = { r: k(e2[1] || e2[5]), g: k(e2[2] || e2[6]), b: k(e2[3] || e2[7]) }, r2 = e2[4] || e2[8];
|
||
return void 0 !== r2 && (n2.a = k(r2) / 255), n2;
|
||
}, B[n.RGB] = function(t2) {
|
||
var e2 = t2.match(p.RGB), n2 = X(e2[1] || e2[5]), r2 = X(e2[2] || e2[6]), i2 = X(e2[3] || e2[7]), o2 = e2[4] || e2[8], a2 = { r: Math.min(n2, 255), g: Math.min(r2, 255), b: Math.min(i2, 255) };
|
||
return void 0 !== o2 && (a2.a = tt(o2)), a2;
|
||
}, B[n.HSL] = function(t2) {
|
||
var e2 = t2.match(p.HSL), n2 = T(e2[1] || e2[5]), r2 = G(e2[2] || e2[6]), i2 = G(e2[3] || e2[7]), o2 = e2[4] || e2[8], a2 = x(n2, r2, i2);
|
||
return void 0 !== o2 && (a2.a = tt(o2)), a2;
|
||
}, B[n.CMYK] = function(t2) {
|
||
var e2 = t2.match(p.CMYK), n2 = I(e2[1] || e2[6]), r2 = I(e2[2] || e2[7]), i2 = I(e2[3] || e2[8]), o2 = I(e2[4] || e2[9]), a2 = e2[5] || e2[10], c2 = V(n2, r2, i2, o2);
|
||
return void 0 !== a2 && (c2.a = tt(a2)), c2;
|
||
}, B);
|
||
var dt = ((C = {})[n.HEX] = function(t2) {
|
||
var e2 = { r: X("".concat(t2.r)), g: X("".concat(t2.g)), b: X("".concat(t2.b)) };
|
||
return O(t2, "a") && (e2.a = Math.min(X("".concat(t2.a), true), 1)), e2;
|
||
}, C[n.RGB] = function(t2) {
|
||
return this.HEX(t2);
|
||
}, C[n.HSL] = function(t2) {
|
||
var e2 = G("".concat(t2.s)), n2 = G("".concat(t2.l)), r2 = x(T(t2.h), e2, n2);
|
||
return O(t2, "a") && (r2.a = tt(t2.a)), r2;
|
||
}, C[n.CMYK] = function(t2) {
|
||
var e2 = I("".concat(t2.c)), n2 = I("".concat(t2.m)), r2 = I("".concat(t2.y)), i2 = I("".concat(t2.k)), o2 = V(e2, n2, r2, i2);
|
||
return O(t2, "a") && (o2.a = tt(t2.a)), o2;
|
||
}, C);
|
||
var lt = function(t2, e2) {
|
||
return void 0 === e2 && (e2 = ut(t2)), "string" == typeof t2 ? st[e2](t2) : dt[e2](t2);
|
||
};
|
||
var ft = ((S = {})[n.HEX] = function(t2) {
|
||
return { r: j(t2.r), g: j(t2.g), b: j(t2.b) };
|
||
}, S.HEXA = function(t2) {
|
||
var e2 = ft.HEX(t2);
|
||
return e2.a = O(t2, "a") ? j(255 * t2.a) : "0xFF", e2;
|
||
}, S[n.RGB] = function(t2, e2) {
|
||
var n2 = mt(t2, e2);
|
||
return O(n2, "a") && delete n2.a, n2;
|
||
}, S.RGBA = function(t2, e2) {
|
||
var n2 = ft.RGB(t2, e2);
|
||
return n2.a = O(t2, "a") ? K(t2.a) : 1, n2;
|
||
}, S[n.HSL] = function(t2, e2) {
|
||
var n2 = _(t2.r, t2.g, t2.b);
|
||
return delete n2.a, bt(n2, e2);
|
||
}, S.HSLA = function(t2, e2) {
|
||
var n2 = ft.HSL(t2, e2);
|
||
return n2.a = O(t2, "a") ? K(t2.a, e2) : 1, n2;
|
||
}, S[n.CMYK] = function(t2, e2) {
|
||
return At(q(t2.r, t2.g, t2.b), e2);
|
||
}, S.CMYKA = function(t2, e2) {
|
||
var n2 = ft.CMYK(t2, e2);
|
||
return n2.a = O(t2, "a") ? K(t2.a, e2) : 1, n2;
|
||
}, S);
|
||
var ht = function(e2, r2, i2, o2) {
|
||
var a2 = ut(e2), c2 = "string" == typeof e2, u2 = lt(e2, a2), s3 = "string" == typeof e2 && O(u2, "a") || "string" != typeof e2 && O(e2, "a"), d2 = _(u2.r, u2.g, u2.b, u2.a);
|
||
s3 || delete d2.a;
|
||
var l2 = i2 ? d2.l / (r2 + 1) : (100 - d2.l) / (r2 + 1), f2 = Array(r2).fill(null).map(function(e3, n2) {
|
||
return t(t({}, d2), { l: d2.l + l2 * (n2 + 1) * (1 - 2 * +i2) });
|
||
});
|
||
switch (a2) {
|
||
case n.HEX:
|
||
default:
|
||
return f2.map(function(e3) {
|
||
var n2 = x(e3.h, e3.s, e3.l);
|
||
return s3 && (n2.a = e3.a), c2 ? s3 ? Z.HEX(t(t({}, n2), { a: K(255 * n2.a) })) : Z.HEX(n2) : s3 ? ft.HEXA(n2) : ft.HEX(n2);
|
||
});
|
||
case n.RGB:
|
||
return f2.map(function(t2) {
|
||
var e3 = x(t2.h, t2.s, t2.l);
|
||
return s3 && (e3.a = t2.a), c2 ? Z.RGB(e3, o2) : s3 ? ft.RGBA(e3, o2.decimals) : ft.RGB(e3, o2.decimals);
|
||
});
|
||
case n.HSL:
|
||
return f2.map(function(e3) {
|
||
return c2 ? Z.HSL(e3, o2) : s3 ? ft.HSLA(t(t({}, x(e3.h, e3.s, e3.l)), { a: e3.a }), o2.decimals) : ft.HSL(x(e3.h, e3.s, e3.l), o2.decimals);
|
||
});
|
||
}
|
||
};
|
||
var pt = ((R = { buildHarmony: function(t2, e2, r2, i2) {
|
||
var o2 = ut(t2), a2 = lt(t2, o2), c2 = _(a2.r, a2.g, a2.b, a2.a), u2 = "string" == typeof t2 && O(a2, "a") || "string" != typeof t2 && O(t2, "a"), s3 = "string" == typeof t2;
|
||
switch (o2) {
|
||
case n.HEX:
|
||
default:
|
||
return u2 ? this.HEXA(bt(c2, 0), e2, r2, s3) : this.HEX(bt(c2, 0), e2, r2, s3);
|
||
case n.HSL:
|
||
return u2 ? this.HSLA(c2, e2, r2, s3, i2) : this.HSL(c2, e2, r2, s3, i2);
|
||
case n.RGB:
|
||
return u2 ? this.RGBA(c2, e2, r2, s3, i2) : this.RGB(c2, e2, r2, s3, i2);
|
||
}
|
||
} })[n.HEX] = function(t2, e2, n2, r2) {
|
||
return e2(t2, n2).map(function(t3) {
|
||
return r2 ? Z.HEX(x(t3.h, t3.s, t3.l)) : ft.HEX(x(t3.h, t3.s, t3.l));
|
||
});
|
||
}, R.HEXA = function(e2, n2, r2, i2) {
|
||
return n2(e2, r2).map(function(e3) {
|
||
return i2 ? Z.HEX(t(t({}, x(e3.h, e3.s, e3.l)), { a: 255 * tt(e3.a) })) : ft.HEXA(t(t({}, x(e3.h, e3.s, e3.l)), { a: tt(e3.a) }));
|
||
});
|
||
}, R[n.RGB] = function(t2, e2, n2, r2, i2) {
|
||
return e2(t2, n2).map(function(t3) {
|
||
return r2 ? Z.RGB(x(t3.h, t3.s, t3.l), i2) : ft.RGB(x(t3.h, t3.s, t3.l), i2.decimals);
|
||
});
|
||
}, R.RGBA = function(e2, n2, r2, i2, o2) {
|
||
return n2(e2, r2).map(function(e3) {
|
||
return i2 ? Z.RGB(t(t({}, x(e3.h, e3.s, e3.l)), { a: tt(e3.a) }), o2) : ft.RGBA(t(t({}, x(e3.h, e3.s, e3.l)), { a: tt(e3.a) }), o2.decimals);
|
||
});
|
||
}, R[n.HSL] = function(t2, e2, n2, r2, i2) {
|
||
return e2(t2, n2).map(function(t3) {
|
||
return r2 ? Z.HSL({ h: t3.h, s: t3.s, l: t3.l }, i2) : ft.HSL(x(t3.h, t3.s, t3.l), i2.decimals);
|
||
});
|
||
}, R.HSLA = function(e2, n2, r2, i2, o2) {
|
||
return n2(e2, r2).map(function(e3) {
|
||
return i2 ? Z.HSL(t(t({}, e3), { a: tt(e3.a) }), o2) : ft.HSLA(t(t({}, x(e3.h, e3.s, e3.l)), { a: tt(e3.a) }), o2.decimals);
|
||
});
|
||
}, R);
|
||
var gt = ((M = { mix: function(e2, n2) {
|
||
var r2, o2, a2, c2, u2, s3, d2, l2, f2, h3, p3, g2, m2, b2, A2, y2 = e2.map(function(t2) {
|
||
var e3 = ut(t2);
|
||
return lt(t2, e3);
|
||
}), E2 = n2 === i.SUBTRACTIVE ? y2.map(function(t2) {
|
||
var e3, n3, r3, i2, o3, a3, c3, u3, s4, d3, l3, f3, h4, p4, g3 = (e3 = t2.r, n3 = t2.g, r3 = t2.b, i2 = Math.min(e3, n3, r3), o3 = Math.min(255 - e3, 255 - n3, 255 - r3), a3 = e3 - i2, c3 = n3 - i2, u3 = r3 - i2, s4 = Math.min(a3, c3), d3 = a3 - s4, l3 = (c3 + s4) / 2, f3 = (u3 + c3 - s4) / 2, h4 = Math.max(d3, l3, f3) / Math.max(a3, c3, u3), p4 = isNaN(h4) || h4 === 1 / 0 || h4 <= 0 ? 1 : h4, { r: d3 / p4 + o3, y: l3 / p4 + o3, b: f3 / p4 + o3 });
|
||
return O(t2, "a") && (g3.a = t2.a), g3;
|
||
}) : null;
|
||
function F2(e3) {
|
||
var r3 = n2 === i.ADDITIVE ? { r: 0, g: 0, b: 0, a: 0 } : { r: 0, y: 0, b: 0, a: 0 };
|
||
return e3.reduce(function(e4, r4) {
|
||
var o3 = O(r4, "a") ? r4.a : 1, a3 = { r: Math.min(e4.r + r4.r * o3, 255), b: Math.min(e4.b + r4.b * o3, 255), a: 1 - (1 - o3) * (1 - e4.a) }, c3 = "g" in e4 ? e4.g : e4.y, u3 = "g" in r4 ? r4.g : r4.y;
|
||
return t(t({}, a3), n2 === i.ADDITIVE ? { g: Math.min(c3 + u3 * o3, 255) } : { y: Math.min(c3 + u3 * o3, 255) });
|
||
}, r3);
|
||
}
|
||
if (n2 === i.ADDITIVE)
|
||
r2 = F2(y2);
|
||
else {
|
||
var v2 = F2(E2);
|
||
o2 = v2.r, a2 = v2.y, c2 = v2.b, u2 = Math.min(o2, a2, c2), s3 = Math.min(255 - o2, 255 - a2, 255 - c2), d2 = o2 - u2, l2 = a2 - u2, f2 = c2 - u2, h3 = Math.min(l2, f2), p3 = d2 + l2 - h3, g2 = l2 + h3, m2 = 2 * (f2 - h3), b2 = Math.max(p3, g2, m2) / Math.max(d2, l2, f2), A2 = isNaN(b2) || b2 === 1 / 0 || b2 <= 0 ? 1 : b2, (r2 = { r: p3 / A2 + s3, g: g2 / A2 + s3, b: m2 / A2 + s3 }).a = v2.a;
|
||
}
|
||
return { r: K(r2.r), g: K(r2.g), b: K(r2.b), a: N(r2.a, 0, 1) };
|
||
} })[n.HEX] = function(t2, e2, n2) {
|
||
var r2 = this.mix(t2, e2);
|
||
return delete r2.a, n2 ? Z.HEX(r2) : ft.HEX(r2);
|
||
}, M.HEXA = function(t2, e2, n2) {
|
||
var r2 = this.mix(t2, e2);
|
||
return r2.a = n2 ? 255 * tt(r2.a) : tt(r2.a), n2 ? Z.HEX(r2) : ft.HEXA(r2);
|
||
}, M[n.RGB] = function(t2, e2, n2, r2) {
|
||
var i2 = this.mix(t2, e2);
|
||
return delete i2.a, n2 ? Z.RGB(i2, r2) : ft.RGB(i2, r2.decimals);
|
||
}, M.RGBA = function(t2, e2, n2, r2) {
|
||
var i2 = this.mix(t2, e2);
|
||
return n2 ? Z.RGB(i2, r2) : ft.RGBA(i2, r2.decimals);
|
||
}, M[n.HSL] = function(t2, e2, n2, r2) {
|
||
var i2 = this.mix(t2, e2), o2 = _(i2.r, i2.g, i2.b);
|
||
return delete i2.a, delete o2.a, n2 ? Z.HSL(o2, r2) : ft.HSL(i2, r2.decimals);
|
||
}, M.HSLA = function(t2, e2, n2, r2) {
|
||
var i2 = this.mix(t2, e2), o2 = _(i2.r, i2.g, i2.b, i2.a);
|
||
return n2 ? Z.HSL(o2, r2) : ft.HSLA(i2, r2.decimals);
|
||
}, M);
|
||
var mt = function(e2, n2) {
|
||
var r2 = K(e2.r, n2), i2 = K(e2.g, n2), o2 = K(e2.b, n2);
|
||
return t({ r: r2, g: i2, b: o2 }, O(e2, "a") ? { a: K(e2.a, n2) } : {});
|
||
};
|
||
var bt = function(e2, n2) {
|
||
return t({ h: K(e2.h, n2), s: K(e2.s, n2), l: K(e2.l, n2) }, O(e2, "a") ? { a: K(e2.a, n2) } : {});
|
||
};
|
||
var At = function(t2, e2) {
|
||
return { c: K(t2.c, e2), m: K(t2.m, e2), y: K(t2.y, e2), k: K(t2.k, e2) };
|
||
};
|
||
var yt = function(t2, e2, n2, r2) {
|
||
return r2(lt(t2, e2), n2);
|
||
};
|
||
var Et = function(t2, e2, n2, r2, i2) {
|
||
n2 < 1 && (n2 = 5);
|
||
var o2 = function(t3, e3, n3) {
|
||
var r3 = n3 - 1, i3 = (e3.r - t3.r) / r3, o3 = (e3.g - t3.g) / r3, a2 = (e3.b - t3.b) / r3, c2 = tt(t3.a), u2 = (tt(e3.a) - c2) / r3;
|
||
return Array(n3).fill(null).map(function(n4, s3) {
|
||
return 0 === s3 ? t3 : s3 === r3 ? e3 : { r: K(t3.r + i3 * s3), g: K(t3.g + o3 * s3), b: K(t3.b + a2 * s3), a: K(c2 + u2 * s3) };
|
||
});
|
||
}(lt(t2), lt(e2), n2);
|
||
return o2.map(function(t3) {
|
||
return i2(t3, r2);
|
||
});
|
||
};
|
||
var Ft = function() {
|
||
function n2(t2, e2) {
|
||
void 0 === e2 && (e2 = {}), this._options = U(e2, t2), this.rgb = lt(t2), this.updateHSL(), this.updateCMYK();
|
||
}
|
||
return n2.prototype.updateRGB = function() {
|
||
this.rgb = t(t({}, x(this.hsl.h, this.hsl.s, this.hsl.l)), { a: this.hsl.a });
|
||
}, n2.prototype.updateRGBFromCMYK = function() {
|
||
this.rgb = t(t({}, V(this.cmyk.c, this.cmyk.m, this.cmyk.y, this.cmyk.k)), { a: this.rgb.a });
|
||
}, n2.prototype.updateHSL = function() {
|
||
this.hsl = _(this.rgb.r, this.rgb.g, this.rgb.b, this.rgb.a);
|
||
}, n2.prototype.updateCMYK = function() {
|
||
this.cmyk = q(this.rgb.r, this.rgb.g, this.rgb.b);
|
||
}, n2.prototype.updateRGBAndCMYK = function() {
|
||
return this.updateRGB(), this.updateCMYK(), this;
|
||
}, n2.prototype.updateHSLAndCMYK = function() {
|
||
return this.updateHSL(), this.updateCMYK(), this;
|
||
}, n2.prototype.updateRGBAndHSL = function() {
|
||
return this.updateRGBFromCMYK(), this.updateHSL(), this;
|
||
}, n2.prototype.setOptions = function(e2) {
|
||
return void 0 === e2 && (e2 = {}), this._options = t(t({}, this._options), e2), this;
|
||
}, n2.prototype.setH = function(t2) {
|
||
return this.hsl.h = T(t2), this.updateRGBAndCMYK();
|
||
}, n2.prototype.setS = function(t2) {
|
||
return this.hsl.s = N(t2, 0, 100), this.updateRGBAndCMYK();
|
||
}, n2.prototype.setL = function(t2) {
|
||
return this.hsl.l = N(t2, 0, 100), this.updateRGBAndCMYK();
|
||
}, n2.prototype.setR = function(t2) {
|
||
return this.rgb.r = N(t2, 0, 255), this.updateHSLAndCMYK();
|
||
}, n2.prototype.setG = function(t2) {
|
||
return this.rgb.g = N(t2, 0, 255), this.updateHSLAndCMYK();
|
||
}, n2.prototype.setB = function(t2) {
|
||
return this.rgb.b = N(t2, 0, 255), this.updateHSLAndCMYK();
|
||
}, n2.prototype.setA = function(t2) {
|
||
return this.hsl.a = this.rgb.a = N(t2, 0, 1), this;
|
||
}, n2.prototype.setC = function(t2) {
|
||
return this.cmyk.c = N(t2, 0, 100), this.updateRGBAndHSL();
|
||
}, n2.prototype.setM = function(t2) {
|
||
return this.cmyk.m = N(t2, 0, 100), this.updateRGBAndHSL();
|
||
}, n2.prototype.setY = function(t2) {
|
||
return this.cmyk.y = N(t2, 0, 100), this.updateRGBAndHSL();
|
||
}, n2.prototype.setK = function(t2) {
|
||
return this.cmyk.k = N(t2, 0, 100), this.updateRGBAndHSL();
|
||
}, Object.defineProperty(n2.prototype, "options", { get: function() {
|
||
return this._options;
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "H", { get: function() {
|
||
return K(this.hsl.h, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "S", { get: function() {
|
||
return K(this.hsl.s, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "L", { get: function() {
|
||
return K(this.hsl.l, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "R", { get: function() {
|
||
return K(this.rgb.r, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "G", { get: function() {
|
||
return K(this.rgb.g, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "B", { get: function() {
|
||
return K(this.rgb.b, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "A", { get: function() {
|
||
return K(this.hsl.a, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "C", { get: function() {
|
||
return K(this.cmyk.c, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "M", { get: function() {
|
||
return K(this.cmyk.m, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "Y", { get: function() {
|
||
return K(this.cmyk.y, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "K", { get: function() {
|
||
return K(this.cmyk.k, this.options.decimals);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HEXObject", { get: function() {
|
||
return ft.HEX(this.rgb);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HEXAObject", { get: function() {
|
||
return ft.HEXA(this.rgb);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "RGBObject", { get: function() {
|
||
return { r: this.R, g: this.G, b: this.B };
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "RGBAObject", { get: function() {
|
||
return t(t({}, this.RGBObject), { a: this.A });
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HSLObject", { get: function() {
|
||
return { h: this.H, s: this.S, l: this.L };
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HSLAObject", { get: function() {
|
||
return t(t({}, this.HSLObject), { a: this.A });
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "CMYKObject", { get: function() {
|
||
return { c: this.C, m: this.M, y: this.Y, k: this.K };
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "CMYKAObject", { get: function() {
|
||
return t(t({}, this.CMYKObject), { a: this.A });
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HEX", { get: function() {
|
||
return Z.HEX({ r: this.R, g: this.G, b: this.B });
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HEXA", { get: function() {
|
||
return Z.HEX({ r: this.R, g: this.G, b: this.B, a: 255 * this.A });
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "RGB", { get: function() {
|
||
return Z.RGB({ r: this.R, g: this.G, b: this.B }, this.options);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "RGBA", { get: function() {
|
||
return Z.RGB({ r: this.R, g: this.G, b: this.B, a: this.A }, this.options);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HSL", { get: function() {
|
||
return Z.HSL({ h: this.H, s: this.S, l: this.L }, this.options);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "HSLA", { get: function() {
|
||
return Z.HSL({ h: this.H, s: this.S, l: this.L, a: this.A }, this.options);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "CMYK", { get: function() {
|
||
return Z.CMYK({ c: this.C, m: this.M, y: this.Y, k: this.K }, this.options);
|
||
}, enumerable: false, configurable: true }), Object.defineProperty(n2.prototype, "CMYKA", { get: function() {
|
||
return Z.CMYK({ c: this.C, m: this.M, y: this.Y, k: this.K, a: this.A }, this.options);
|
||
}, enumerable: false, configurable: true }), n2.toHEXObject = function(t2) {
|
||
var e2 = ut(t2);
|
||
return yt(t2, e2, 0, ft.HEX);
|
||
}, n2.toHEX = function(t2) {
|
||
return Z.HEX(n2.toHEXObject(t2));
|
||
}, n2.toHEXAObject = function(t2) {
|
||
var e2 = ut(t2);
|
||
return yt(t2, e2, 0, ft.HEXA);
|
||
}, n2.toHEXA = function(t2) {
|
||
return Z.HEX(n2.toHEXAObject(t2));
|
||
}, n2.toRGBObject = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2);
|
||
return yt(t2, n3, e2.decimals, ft.RGB);
|
||
}, n2.toRGB = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.RGB);
|
||
return Z.RGB(i2, r2);
|
||
}, n2.toRGBAObject = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2);
|
||
return yt(t2, n3, e2.decimals, ft.RGBA);
|
||
}, n2.toRGBA = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.RGBA);
|
||
return Z.RGB(i2, r2);
|
||
}, n2.toHSLObject = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2);
|
||
return yt(t2, n3, e2.decimals, ft.HSL);
|
||
}, n2.toHSL = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.HSL);
|
||
return Z.HSL(i2, r2);
|
||
}, n2.toHSLAObject = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2);
|
||
return yt(t2, n3, e2.decimals, ft.HSLA);
|
||
}, n2.toHSLA = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.HSLA);
|
||
return Z.HSL(i2, r2);
|
||
}, n2.toCMYKObject = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2);
|
||
return yt(t2, n3, e2.decimals, ft.CMYK);
|
||
}, n2.toCMYK = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.CMYK);
|
||
return Z.CMYK(i2, r2);
|
||
}, n2.toCMYKAObject = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2);
|
||
return yt(t2, n3, e2.decimals, ft.CMYKA);
|
||
}, n2.toCMYKA = function(t2, e2) {
|
||
void 0 === e2 && (e2 = {});
|
||
var n3 = ut(t2), r2 = U(e2, t2), i2 = yt(t2, n3, 6, ft.CMYKA);
|
||
return Z.CMYK(i2, r2);
|
||
}, n2.getBlendHEXObject = function(t2, e2, n3) {
|
||
return void 0 === n3 && (n3 = 5), Et(t2, e2, n3, 0, ft.HEX);
|
||
}, n2.getBlendHEX = function(t2, e2, r2) {
|
||
return void 0 === r2 && (r2 = 5), n2.getBlendHEXObject(t2, e2, r2).map(function(t3) {
|
||
return Z.HEX(t3);
|
||
});
|
||
}, n2.getBlendHEXAObject = function(t2, e2, n3) {
|
||
return void 0 === n3 && (n3 = 5), Et(t2, e2, n3, 0, ft.HEXA);
|
||
}, n2.getBlendHEXA = function(t2, e2, r2) {
|
||
return void 0 === r2 && (r2 = 5), n2.getBlendHEXAObject(t2, e2, r2).map(function(t3) {
|
||
return Z.HEX(t3);
|
||
});
|
||
}, n2.getBlendRGBObject = function(t2, e2, n3, r2) {
|
||
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, r2.decimals, ft.RGB);
|
||
}, n2.getBlendRGB = function(t2, e2, n3, r2) {
|
||
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, 6, ft.RGB).map(function(n4) {
|
||
return Z.RGB(n4, U(r2, t2, e2));
|
||
});
|
||
}, n2.getBlendRGBAObject = function(t2, e2, n3, r2) {
|
||
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, r2.decimals, ft.RGBA);
|
||
}, n2.getBlendRGBA = function(t2, e2, n3, r2) {
|
||
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, 6, ft.RGBA).map(function(n4) {
|
||
return Z.RGB(n4, U(r2, t2, e2));
|
||
});
|
||
}, n2.getBlendHSLObject = function(t2, e2, n3, r2) {
|
||
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, r2.decimals, ft.HSL);
|
||
}, n2.getBlendHSL = function(t2, e2, n3, r2) {
|
||
void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {});
|
||
var i2 = U(r2, t2, e2);
|
||
return Et(t2, e2, n3, 6, ft.HSL).map(function(t3) {
|
||
return Z.HSL(t3, i2);
|
||
});
|
||
}, n2.getBlendHSLAObject = function(t2, e2, n3, r2) {
|
||
return void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {}), Et(t2, e2, n3, r2.decimals, ft.HSLA);
|
||
}, n2.getBlendHSLA = function(t2, e2, n3, r2) {
|
||
void 0 === n3 && (n3 = 5), void 0 === r2 && (r2 = {});
|
||
var i2 = U(r2, t2, e2);
|
||
return Et(t2, e2, n3, 6, ft.HSLA).map(function(t3) {
|
||
return Z.HSL(t3, i2);
|
||
});
|
||
}, n2.getMixHEXObject = function(t2, e2) {
|
||
return void 0 === e2 && (e2 = i.ADDITIVE), gt.HEX(t2, e2, false);
|
||
}, n2.getMixHEX = function(t2, e2) {
|
||
return void 0 === e2 && (e2 = i.ADDITIVE), gt.HEX(t2, e2, true);
|
||
}, n2.getMixHEXAObject = function(t2, e2) {
|
||
return void 0 === e2 && (e2 = i.ADDITIVE), gt.HEXA(t2, e2, false);
|
||
}, n2.getMixHEXA = function(t2, e2) {
|
||
return void 0 === e2 && (e2 = i.ADDITIVE), gt.HEXA(t2, e2, true);
|
||
}, n2.getMixRGBObject = function(t2, n3, r2) {
|
||
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.RGB(t2, n3, false, U.apply(void 0, e([r2], t2, false)));
|
||
}, n2.getMixRGB = function(t2, n3, r2) {
|
||
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.RGB(t2, n3, true, U.apply(void 0, e([r2], t2, false)));
|
||
}, n2.getMixRGBAObject = function(t2, n3, r2) {
|
||
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.RGBA(t2, n3, false, U.apply(void 0, e([r2], t2, false)));
|
||
}, n2.getMixRGBA = function(t2, n3, r2) {
|
||
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.RGBA(t2, n3, true, U.apply(void 0, e([r2], t2, false)));
|
||
}, n2.getMixHSLObject = function(t2, n3, r2) {
|
||
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.HSL(t2, n3, false, U.apply(void 0, e([r2], t2, false)));
|
||
}, n2.getMixHSL = function(t2, n3, r2) {
|
||
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.HSL(t2, n3, true, U.apply(void 0, e([r2], t2, false)));
|
||
}, n2.getMixHSLAObject = function(t2, n3, r2) {
|
||
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.HSLA(t2, n3, false, U.apply(void 0, e([r2], t2, false)));
|
||
}, n2.getMixHSLA = function(t2, n3, r2) {
|
||
return void 0 === n3 && (n3 = i.ADDITIVE), void 0 === r2 && (r2 = {}), gt.HSLA(t2, n3, true, U.apply(void 0, e([r2], t2, false)));
|
||
}, n2.getShades = function(t2, e2, n3) {
|
||
return void 0 === n3 && (n3 = {}), ht(t2, e2, true, U(n3, t2));
|
||
}, n2.getTints = function(t2, e2, n3) {
|
||
return void 0 === n3 && (n3 = {}), ht(t2, e2, false, U(n3, t2));
|
||
}, n2.getHarmony = function(t2, e2, n3, o2) {
|
||
return void 0 === e2 && (e2 = r.COMPLEMENTARY), void 0 === n3 && (n3 = i.ADDITIVE), void 0 === o2 && (o2 = {}), function(t3, e3, n4, i2) {
|
||
var o3;
|
||
return (o3 = {}, o3[r.ANALOGOUS] = pt.buildHarmony(e3, nt, n4, i2), o3[r.COMPLEMENTARY] = pt.buildHarmony(e3, rt, n4, i2), o3[r.SPLIT_COMPLEMENTARY] = pt.buildHarmony(e3, it, n4, i2), o3[r.TRIADIC] = pt.buildHarmony(e3, ot, n4, i2), o3[r.TETRADIC] = pt.buildHarmony(e3, at, n4, i2), o3[r.SQUARE] = pt.buildHarmony(e3, ct, n4, i2), o3)[t3];
|
||
}(e2, t2, n3, U(o2, t2));
|
||
}, n2;
|
||
}();
|
||
|
||
// src/SettingsTab.ts
|
||
var SETTINGS_PAGES = {
|
||
"main": "Core Settings",
|
||
"codeblock": "Codeblock Styling",
|
||
"inline": "Inline Code Styling"
|
||
};
|
||
var CODEBLOCK_PAGES = {
|
||
"body": "Codeblock Body",
|
||
"gutter": "Codeblock Gutter",
|
||
"header": "Codeblock Header",
|
||
"highlight": "Codeblock Highlighting",
|
||
"languages": "Codeblock Languages",
|
||
// "plugins": "Plugin Compatibility",
|
||
"example": "Example Codeblock Content"
|
||
};
|
||
var DISPLAY_OPTIONS = {
|
||
"none": "Never",
|
||
"if_header_shown": "If Header Shown",
|
||
"always": "Always"
|
||
};
|
||
var SettingsTab = class extends import_obsidian.PluginSettingTab {
|
||
constructor(app, plugin) {
|
||
super(app, plugin);
|
||
this.plugin = plugin;
|
||
this.pickrs = {};
|
||
this.page = "main";
|
||
this.codeblockPage = "body";
|
||
this.hideAdvanced = true;
|
||
this.disableableComponents = {};
|
||
}
|
||
/**
|
||
* Builds the html page that is showed in the settings.
|
||
*/
|
||
display() {
|
||
this.disableableComponents = {
|
||
"editorActiveLineHighlight": [],
|
||
"codeblockActiveLineHighlight": [],
|
||
"gradientHighlighting": [],
|
||
"languageBorderColour": []
|
||
};
|
||
this.hideAdvanced = true;
|
||
this.generateSettings(this.containerEl);
|
||
}
|
||
// Create Settings Pages
|
||
displayMainSettings(containerEl) {
|
||
this.emptySettings(containerEl);
|
||
this.generateSettingsSwitcher(containerEl);
|
||
this.generateThemeSettings(containerEl);
|
||
this.generateCoreSettings(containerEl);
|
||
this.generateAdvancedHeading(containerEl);
|
||
this.advancedSettingsContainer = containerEl.createDiv();
|
||
this.generateAdvancedSettings();
|
||
this.generateDonationFooter(containerEl);
|
||
}
|
||
displayCodeblockSettings(containerEl) {
|
||
this.emptySettings(containerEl);
|
||
this.generateSettingsSwitcher(containerEl);
|
||
this.generateThemeSettings(containerEl);
|
||
containerEl.createEl("hr");
|
||
this.exampleCodeblockContainer = containerEl.createDiv();
|
||
this.generateExampleCodeblock();
|
||
this.generateCodeblockStylingSwitcher(containerEl);
|
||
this.codeblockSettingEl = containerEl.createDiv();
|
||
this.generateCodeblockSetting();
|
||
}
|
||
displayInlineCodeSettings(containerEl) {
|
||
this.emptySettings(containerEl);
|
||
this.generateSettingsSwitcher(containerEl);
|
||
this.generateThemeSettings(containerEl);
|
||
containerEl.createEl("hr");
|
||
this.exampleInlineCodeContainer = containerEl.createDiv();
|
||
this.generateExampleInlineCode();
|
||
this.generateExampleInlineCodeSettings(containerEl);
|
||
this.generateInlineCodeSettings(containerEl);
|
||
}
|
||
// Create Settings Groups
|
||
emptySettings(containerEl) {
|
||
containerEl.empty();
|
||
containerEl.createEl("h1", { text: "Settings for the Code Styler Plugin." });
|
||
}
|
||
generateSettingsSwitcher(containerEl) {
|
||
new import_obsidian.Setting(containerEl).setName("Choose Settings Page").setDesc("Change dropdown to modify different groups of settings").addDropdown((dropdown) => dropdown.addOptions(SETTINGS_PAGES).setValue(this.page).onChange((value) => {
|
||
this.page = value;
|
||
this.generateSettings(containerEl);
|
||
}));
|
||
}
|
||
generateSettings(containerEl) {
|
||
if (this.page === "main")
|
||
this.displayMainSettings(containerEl);
|
||
else if (this.page === "codeblock")
|
||
this.displayCodeblockSettings(containerEl);
|
||
else if (this.page === "inline")
|
||
this.displayInlineCodeSettings(containerEl);
|
||
}
|
||
generateCodeblockStylingSwitcher(containerEl) {
|
||
new import_obsidian.Setting(containerEl).setName("Choose Codeblock Settings").setDesc("Change dropdown to modify styles and settings of different codeblock sections").addDropdown((dropdown) => dropdown.addOptions(CODEBLOCK_PAGES).setValue(this.codeblockPage).onChange((value) => {
|
||
this.codeblockPage = value;
|
||
this.generateCodeblockSetting();
|
||
}));
|
||
}
|
||
generateCodeblockSetting() {
|
||
this.codeblockSettingEl.empty();
|
||
if (this.codeblockPage === "body")
|
||
this.generateCodeblockBodySettings(this.codeblockSettingEl);
|
||
else if (this.codeblockPage === "gutter")
|
||
this.generateCodeblockGutterSettings(this.codeblockSettingEl);
|
||
else if (this.codeblockPage === "header")
|
||
this.generateCodeblockHeaderSettings(this.codeblockSettingEl);
|
||
else if (this.codeblockPage === "highlight")
|
||
this.generateCodeblockHighlightSettings(this.codeblockSettingEl);
|
||
else if (this.codeblockPage === "languages")
|
||
this.generateCodeblockLanguageSettings(this.codeblockSettingEl);
|
||
else if (this.codeblockPage === "plugins")
|
||
this.generatePluginCompatibilitySettings(this.codeblockSettingEl);
|
||
else if (this.codeblockPage === "example")
|
||
this.generateExampleCodeblockSettings(this.codeblockSettingEl);
|
||
}
|
||
generateCoreSettings(containerEl) {
|
||
new import_obsidian.Setting(containerEl).setName("Style Code on Export").setDesc("If enabled, styling will be applied when exporting to PDF.").addToggle((toggle) => toggle.setValue(this.plugin.settings.decoratePrint).onChange((value) => {
|
||
this.plugin.settings.decoratePrint = value;
|
||
this.saveSettings();
|
||
}));
|
||
}
|
||
generateThemeSettings(containerEl) {
|
||
containerEl.createEl("h2", { text: "Theme Settings" });
|
||
let themeDropdown;
|
||
new import_obsidian.Setting(containerEl).setName("Select Theme").addDropdown((dropdown) => {
|
||
themeDropdown = dropdown;
|
||
this.updateDropdown(themeDropdown, this.plugin.settings);
|
||
themeDropdown.onChange((value) => {
|
||
this.plugin.settings.selectedTheme = value;
|
||
this.plugin.settings.currentTheme = structuredClone(this.plugin.settings.themes[this.plugin.settings.selectedTheme]);
|
||
this.saveSettings();
|
||
this.display();
|
||
});
|
||
}).addExtraButton((button) => {
|
||
button.setTooltip("Update theme");
|
||
button.setIcon("save");
|
||
button.onClick(() => {
|
||
this.plugin.settings.themes[this.plugin.settings.selectedTheme] = structuredClone(this.plugin.settings.currentTheme);
|
||
this.updateAlternativeHighlights();
|
||
new import_obsidian.Notice(`${this.plugin.settings.selectedTheme} theme saved successfully!`);
|
||
this.saveSettings();
|
||
});
|
||
}).addExtraButton((button) => {
|
||
button.setTooltip("Delete theme");
|
||
button.setIcon("trash");
|
||
button.onClick(() => {
|
||
if (this.plugin.settings.selectedTheme.trim().length === 0)
|
||
new import_obsidian.Notice("Select a theme first to delete");
|
||
else if (this.plugin.settings.selectedTheme in DEFAULT_SETTINGS.themes)
|
||
new import_obsidian.Notice("You cannot delete the default themes");
|
||
else {
|
||
delete this.plugin.settings.themes[this.plugin.settings.selectedTheme];
|
||
new import_obsidian.Notice(`${this.plugin.settings.selectedTheme} theme deleted successfully!`);
|
||
this.plugin.settings.selectedTheme = "Default";
|
||
this.plugin.settings.currentTheme = structuredClone(this.plugin.settings.themes[this.plugin.settings.selectedTheme]);
|
||
this.updateDropdown(themeDropdown, this.plugin.settings);
|
||
this.saveSettings();
|
||
this.display();
|
||
}
|
||
});
|
||
});
|
||
let newThemeName;
|
||
let newThemeDefault;
|
||
this.plugin.settings.newTheme = "";
|
||
new import_obsidian.Setting(containerEl).setName("Add New Theme").setDesc("Create a new theme from the current settings.").addText((text2) => {
|
||
newThemeName = text2.setPlaceholder("New theme name").setValue(this.plugin.settings.newTheme).onChange((value) => {
|
||
this.plugin.settings.newTheme = value;
|
||
});
|
||
}).addExtraButton((button) => {
|
||
button.setTooltip("Save theme");
|
||
button.setIcon("plus");
|
||
button.onClick(() => {
|
||
if (this.plugin.settings.newTheme.trim().length === 0)
|
||
new import_obsidian.Notice("Set a name for your theme");
|
||
else if (this.plugin.settings.newTheme in DEFAULT_SETTINGS.themes)
|
||
new import_obsidian.Notice("You can't overwrite the default themes");
|
||
else {
|
||
if (this.plugin.settings.newTheme in this.plugin.settings.themes) {
|
||
this.plugin.settings.themes[this.plugin.settings.newTheme] = structuredClone(this.plugin.settings.currentTheme);
|
||
new import_obsidian.Notice(`${this.plugin.settings.newTheme} theme updated successfully!`);
|
||
} else {
|
||
this.plugin.settings.themes[this.plugin.settings.newTheme] = structuredClone(this.plugin.settings.currentTheme);
|
||
new import_obsidian.Notice(`${this.plugin.settings.newTheme} theme saved successfully!`);
|
||
}
|
||
this.plugin.settings.selectedTheme = this.plugin.settings.newTheme;
|
||
this.updateDropdown(themeDropdown, this.plugin.settings);
|
||
this.updateAlternativeHighlights();
|
||
this.plugin.settings.newTheme = "";
|
||
newThemeName.setValue("");
|
||
newThemeDefault.setValue(false);
|
||
this.saveSettings();
|
||
}
|
||
});
|
||
});
|
||
}
|
||
generateCodeblockBodySettings(containerEl) {
|
||
containerEl.createEl("h3", { text: "Codeblock Appearance" });
|
||
new import_obsidian.Setting(containerEl).setName("Codeblock Background Colour").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
containerEl,
|
||
setting,
|
||
"codeblock_background",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].codeblock.backgroundColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].codeblock.backgroundColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(containerEl).setName("Codeblock Text Colour").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
containerEl,
|
||
setting,
|
||
"codeblock_text",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].codeblock.textColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].codeblock.textColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(containerEl).setName("Codeblock Curvature").setDesc("Determines how rounded the codeblocks appear in pixels.").then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(0, 25, 1).setValue(this.plugin.settings.currentTheme.settings.codeblock.curvature).setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.codeblock.curvature = value;
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
setting.addExtraButton((button) => {
|
||
button.setIcon("reset").setTooltip("Restore default curvature").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.codeblock.curvature = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.codeblock.curvature;
|
||
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.codeblock.curvature);
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
});
|
||
new import_obsidian.Setting(containerEl).setName("Language Coloured Borders").setDesc("If enabled, languages with icons display a left border with the colour of the icon. The slider sets the width of the border.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.advanced.languageBorderColour).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.advanced.languageBorderColour = value;
|
||
this.disableableComponents["languageBorderColour"].forEach((component) => {
|
||
component.setDisabled(!value);
|
||
});
|
||
this.saveSettings();
|
||
})).then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(0, 20, 1).setValue(this.plugin.settings.currentTheme.settings.advanced.languageBorderWidth).setDisabled(!this.plugin.settings.currentTheme.settings.advanced.languageBorderColour).setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.advanced.languageBorderWidth = value;
|
||
this.saveSettings();
|
||
});
|
||
this.disableableComponents["languageBorderColour"].push(resettableSlider);
|
||
});
|
||
let resetButton;
|
||
setting.addExtraButton((button) => {
|
||
resetButton = button.setIcon("reset").setDisabled(!this.plugin.settings.currentTheme.settings.advanced.languageBorderColour).setTooltip("Restore default colour stop").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.advanced.languageBorderWidth = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.advanced.languageBorderWidth;
|
||
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.advanced.languageBorderWidth);
|
||
this.saveSettings();
|
||
});
|
||
this.disableableComponents["languageBorderColour"].push(resetButton);
|
||
});
|
||
});
|
||
new import_obsidian.Setting(containerEl).setName("Unwrap codeblock lines").setDesc("Choose whether to unwrap lines in reading mode").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.codeblock.unwrapLines).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.codeblock.unwrapLines = value;
|
||
this.generateWrapLineSettings();
|
||
this.saveSettings(true);
|
||
}));
|
||
this.wrapLinesContainer = containerEl.createDiv();
|
||
this.generateWrapLineSettings();
|
||
}
|
||
generateWrapLineSettings() {
|
||
this.wrapLinesContainer.empty();
|
||
if (!this.plugin.settings.currentTheme.settings.codeblock.unwrapLines)
|
||
return;
|
||
new import_obsidian.Setting(this.wrapLinesContainer).setName("Wrap Lines on Click").setDesc("If enabled, in reading mode, holding click on a codeblock will wrap the lines for better visibility.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.codeblock.wrapLinesActive).setDisabled(!this.plugin.settings.currentTheme.settings.codeblock.unwrapLines).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.codeblock.wrapLinesActive = value;
|
||
this.saveSettings(true);
|
||
}));
|
||
}
|
||
generateCodeblockGutterSettings(containerEl) {
|
||
containerEl.createEl("h3", { text: "Gutter Appearance" });
|
||
new import_obsidian.Setting(containerEl).setName("Enable Line Numbers").setDesc("If disabled, the below settings are disabled too.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.codeblock.lineNumbers).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.codeblock.lineNumbers = value;
|
||
this.generateCodeblockLineNumberSettings();
|
||
this.saveSettings(true);
|
||
}));
|
||
this.lineNumbersContainer = containerEl.createDiv();
|
||
this.generateCodeblockLineNumberSettings();
|
||
}
|
||
generateCodeblockLineNumberSettings() {
|
||
this.lineNumbersContainer.empty();
|
||
if (!this.plugin.settings.currentTheme.settings.codeblock.lineNumbers)
|
||
return;
|
||
new import_obsidian.Setting(this.lineNumbersContainer).setName("Gutter Background Colour").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.lineNumbersContainer,
|
||
setting,
|
||
"gutter_background",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].gutter.backgroundColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].gutter.backgroundColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(this.lineNumbersContainer).setName("Line Number Colour").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.lineNumbersContainer,
|
||
setting,
|
||
"line_number",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].gutter.textColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].gutter.textColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(this.lineNumbersContainer).setName("Highlight Line Numbers").setDesc("If enabled, highlights will also highlight the line numbers.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.gutter.highlight).setDisabled(!this.plugin.settings.currentTheme.settings.codeblock.lineNumbers).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.gutter.highlight = value;
|
||
this.saveSettings();
|
||
}));
|
||
new import_obsidian.Setting(this.lineNumbersContainer).setName("Indicate Current Line Number").setDesc("If enabled, the current line number in codeblocks will be indicated with a separate colour.").setClass("code-styler-spaced").addToggle(
|
||
(toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.gutter.activeLine).setDisabled(!this.plugin.settings.currentTheme.settings.codeblock.lineNumbers).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.gutter.activeLine = value;
|
||
this.saveSettings();
|
||
})
|
||
).then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.lineNumbersContainer,
|
||
setting,
|
||
"active_line_number",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].gutter.activeTextColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].gutter.activeTextColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
}
|
||
generateCodeblockHeaderSettings(containerEl) {
|
||
containerEl.createEl("h3", { text: "Header Appearance" });
|
||
new import_obsidian.Setting(containerEl).setName("Header Background Colour").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
containerEl,
|
||
setting,
|
||
"header_background",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].header.backgroundColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].header.backgroundColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(containerEl).setName("Header Font Size").setDesc("Set the font size for header language tags and titles.").then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(6, 32, 1).setValue(this.plugin.settings.currentTheme.settings.header.fontSize).setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.fontSize = value;
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
setting.addExtraButton((button) => {
|
||
button.setIcon("reset").setTooltip("Restore default font size").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.header.fontSize = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.header.fontSize;
|
||
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.header.fontSize);
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
});
|
||
new import_obsidian.Setting(containerEl).setName("Header Title Text Styling").setDesc("Style the header title text using bold and italic toggles, by setting a font or by setting a text colour.").addToggle((toggle) => {
|
||
toggle.setTooltip("Toggle bold title text").setValue(this.plugin.settings.currentTheme.settings.header.title.textBold).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.title.textBold = value;
|
||
this.saveSettings();
|
||
});
|
||
}).addToggle((toggle) => {
|
||
toggle.setTooltip("Toggle italic title text").setValue(this.plugin.settings.currentTheme.settings.header.title.textItalic).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.title.textItalic = value;
|
||
this.saveSettings();
|
||
});
|
||
}).addText((text2) => {
|
||
text2.setPlaceholder("Font").setValue(this.plugin.settings.currentTheme.settings.header.title.textFont).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.title.textFont = value;
|
||
this.saveSettings();
|
||
});
|
||
}).then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
containerEl,
|
||
setting,
|
||
"header_title_text",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].header.title.textColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].header.title.textColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
let foldPlaceholderTimeout = setTimeout(() => {
|
||
});
|
||
new import_obsidian.Setting(containerEl).setName("Fold Placeholder Text").setDesc("Title placeholder text for folded code when no title parameter is set.").addText((text2) => text2.setPlaceholder(FOLD_PLACEHOLDER).setValue(this.plugin.settings.currentTheme.settings.header.foldPlaceholder).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.foldPlaceholder = value;
|
||
this.saveSettings();
|
||
clearTimeout(foldPlaceholderTimeout);
|
||
foldPlaceholderTimeout = setTimeout(() => this.rerender(), 1e3);
|
||
}));
|
||
new import_obsidian.Setting(containerEl).setName("Header Separator Colour").setDesc("Colour of the line separating the codeblock header and the codeblock.").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
containerEl,
|
||
setting,
|
||
"header_separator",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].header.lineColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].header.lineColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
containerEl.createEl("h5", { text: "Header Language Tag Appearance" });
|
||
new import_obsidian.Setting(containerEl).setName("Display Header Language Tags").setDesc('Determine when to show language tags in the header. "Title Only" will only show language tags when the title parameter is set.').addDropdown((dropdown) => dropdown.addOptions(DISPLAY_OPTIONS).setValue(this.plugin.settings.currentTheme.settings.header.languageTag.display).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.languageTag.display = value;
|
||
this.generateHeaderTagSettings();
|
||
this.saveSettings(true);
|
||
}));
|
||
this.headerTagsContainer = containerEl.createDiv();
|
||
this.generateHeaderTagSettings();
|
||
containerEl.createEl("h5", { text: "Header Language Icon Appearance" });
|
||
new import_obsidian.Setting(containerEl).setName("Display Header Language Icons").setDesc('Determine when to show language icons where available. "Title Only" will only show language tags when the title parameter is set.').addDropdown((dropdown) => dropdown.addOptions(DISPLAY_OPTIONS).setValue(this.plugin.settings.currentTheme.settings.header.languageIcon.display).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.languageIcon.display = value;
|
||
this.generateHeaderIconSettings();
|
||
this.saveSettings(true);
|
||
}));
|
||
this.headerIconsContainer = containerEl.createDiv();
|
||
this.generateHeaderIconSettings();
|
||
}
|
||
generateHeaderTagSettings() {
|
||
this.headerTagsContainer.empty();
|
||
if (this.plugin.settings.currentTheme.settings.header.languageTag.display === "none")
|
||
return;
|
||
new import_obsidian.Setting(this.headerTagsContainer).setName("Header Language Tag Background Colour").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.headerTagsContainer,
|
||
setting,
|
||
"header_language_tag_background",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].header.languageTag.backgroundColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].header.languageTag.backgroundColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(this.headerTagsContainer).setName("Header Language Tag Text Styling").setDesc("Style the header language tag text using bold and italic toggles, by setting a font or by setting a text colour.").addToggle((toggle) => toggle.setTooltip("Toggle bold language tag text").setValue(this.plugin.settings.currentTheme.settings.header.languageTag.textBold).setDisabled(this.plugin.settings.currentTheme.settings.header.languageTag.display === "none").onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.languageTag.textBold = value;
|
||
this.saveSettings();
|
||
})).addToggle((toggle) => toggle.setTooltip("Toggle italic language tag text").setValue(this.plugin.settings.currentTheme.settings.header.languageTag.textItalic).setDisabled(this.plugin.settings.currentTheme.settings.header.languageTag.display === "none").onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.languageTag.textItalic = value;
|
||
this.saveSettings();
|
||
})).addText((text2) => text2.setPlaceholder("Font").setValue(this.plugin.settings.currentTheme.settings.header.languageTag.textFont).setDisabled(this.plugin.settings.currentTheme.settings.header.languageTag.display === "none").onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.languageTag.textFont = value;
|
||
this.saveSettings();
|
||
})).then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.headerTagsContainer,
|
||
setting,
|
||
"header_language_tag_text",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].header.languageTag.textColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].header.languageTag.textColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
}
|
||
generateHeaderIconSettings() {
|
||
this.headerIconsContainer.empty();
|
||
if (this.plugin.settings.currentTheme.settings.header.languageIcon.display === "none")
|
||
return;
|
||
new import_obsidian.Setting(this.headerIconsContainer).setName("Language Icons Coloured").setDesc("If disabled, language icons will be black and white.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.header.languageIcon.displayColour).setDisabled(this.plugin.settings.currentTheme.settings.header.languageIcon.display === "none").onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.header.languageIcon.displayColour = value;
|
||
this.saveSettings();
|
||
}));
|
||
new import_obsidian.Setting(this.headerIconsContainer).setName("Language Icon Size").setDesc("Set the size of the displayed language icons.").then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(10, 40, 1).setValue(this.plugin.settings.currentTheme.settings.advanced.iconSize).setDisabled(this.plugin.settings.currentTheme.settings.header.languageIcon.display === "none").setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.advanced.iconSize = value;
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
setting.addExtraButton((button) => button.setIcon("reset").setDisabled(this.plugin.settings.currentTheme.settings.header.languageIcon.display === "none").setTooltip("Restore default icon size").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.advanced.iconSize = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.advanced.iconSize;
|
||
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.advanced.iconSize);
|
||
this.saveSettings();
|
||
}));
|
||
});
|
||
}
|
||
generateCodeblockHighlightSettings(containerEl) {
|
||
containerEl.createEl("h3", { text: "Highlighting Appearance" });
|
||
new import_obsidian.Setting(containerEl).setName("Codeblock Active Line Highlight").setDesc("If enabled, highlights the active line inside codeblocks.").setClass("code-styler-spaced").addToggle((toggle) => {
|
||
return toggle.setValue(this.plugin.settings.currentTheme.settings.highlights.activeCodeblockLine).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.highlights.activeCodeblockLine = value;
|
||
this.disableableComponents["codeblockActiveLineHighlight"].forEach((component) => {
|
||
component.setDisabled(!value);
|
||
});
|
||
this.saveSettings();
|
||
});
|
||
}).then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
containerEl,
|
||
setting,
|
||
"codeblock_active_line_highlight",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].highlights.activeCodeblockLineColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].highlights.activeCodeblockLineColour = saveColour;
|
||
},
|
||
() => !this.plugin.settings.currentTheme.settings.highlights.activeCodeblockLine
|
||
);
|
||
});
|
||
this.disableableComponents["codeblockActiveLineHighlight"].push(this.pickrs["codeblock_active_line_highlight"].resetButton);
|
||
new import_obsidian.Setting(containerEl).setName("Default Highlight Colour").setDesc("Used by the 'hl' parameter.").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
containerEl,
|
||
setting,
|
||
"default_highlight",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].highlights.defaultColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].highlights.defaultColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
let newHighlightText;
|
||
new import_obsidian.Setting(containerEl).setName("Add Alternative Highlight").setDesc("Define a new alternative highlight name. The colour can be modified after it is added.").addText((value) => {
|
||
newHighlightText = value.setPlaceholder("e.g. error, warn").onChange((value2) => {
|
||
this.plugin.settings.newHighlight = value2;
|
||
});
|
||
}).addButton((button) => {
|
||
button.setButtonText("Add");
|
||
button.onClick(() => {
|
||
if (this.plugin.settings.newHighlight.trim() === "")
|
||
new import_obsidian.Notice("Please enter a colour name.");
|
||
else if (!/^[^\d]\w*$/.test(this.plugin.settings.newHighlight))
|
||
new import_obsidian.Notice(`"${this.plugin.settings.newHighlight}" is not a valid colour name.`);
|
||
else if (this.plugin.settings.newHighlight.trim().toLowerCase() === "hl")
|
||
new import_obsidian.Notice("Cannot override the default highlight parameter.");
|
||
else if (PARAMETERS.includes(this.plugin.settings.newHighlight.trim().toLowerCase()))
|
||
new import_obsidian.Notice("Cannot use other default parameters.");
|
||
else if (this.plugin.settings.newHighlight in this.plugin.settings.currentTheme.colours.light.highlights.alternativeHighlights)
|
||
new import_obsidian.Notice(`A highlight with the name "${this.plugin.settings.newHighlight}" already exists.`);
|
||
else {
|
||
const newColour = getRandomColour();
|
||
this.plugin.settings.currentTheme.colours.light.highlights.alternativeHighlights[this.plugin.settings.newHighlight] = newColour;
|
||
this.plugin.settings.currentTheme.colours.dark.highlights.alternativeHighlights[this.plugin.settings.newHighlight] = newColour;
|
||
this.updateAlternativeHighlights();
|
||
new import_obsidian.Notice(`Added highlight "${this.plugin.settings.newHighlight}".`);
|
||
this.plugin.settings.newHighlight = "";
|
||
newHighlightText.setValue("");
|
||
this.saveSettings(true);
|
||
}
|
||
});
|
||
});
|
||
this.alternativeHighlightsContainer = containerEl.createDiv();
|
||
this.updateAlternativeHighlights();
|
||
new import_obsidian.Setting(containerEl).setName("Gradient Highlighting").setDesc("If enabled, highlights fade away to the right. The slider sets the gradient colour stop as a percentage.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.advanced.gradientHighlights).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.advanced.gradientHighlights = value;
|
||
this.disableableComponents["gradientHighlighting"].forEach((component) => {
|
||
component.setDisabled(!value);
|
||
});
|
||
this.saveSettings();
|
||
})).then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(0, 100, 1).setValue(+this.plugin.settings.currentTheme.settings.advanced.gradientHighlightsColourStop.slice(0, -1)).setDisabled(!this.plugin.settings.currentTheme.settings.advanced.gradientHighlights).setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.advanced.gradientHighlightsColourStop = `${value}%`;
|
||
this.saveSettings();
|
||
});
|
||
this.disableableComponents["gradientHighlighting"].push(resettableSlider);
|
||
});
|
||
let resetButton;
|
||
setting.addExtraButton((button) => {
|
||
resetButton = button.setIcon("reset").setDisabled(!this.plugin.settings.currentTheme.settings.advanced.gradientHighlights).setTooltip("Restore default colour stop").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.advanced.gradientHighlightsColourStop = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.advanced.gradientHighlightsColourStop;
|
||
resettableSlider.setValue(+this.plugin.settings.currentTheme.settings.advanced.gradientHighlightsColourStop.slice(0, -1));
|
||
this.saveSettings();
|
||
});
|
||
this.disableableComponents["gradientHighlighting"].push(resetButton);
|
||
});
|
||
});
|
||
}
|
||
generateCodeblockLanguageSettings(containerEl) {
|
||
let excludeTimeout = setTimeout(() => {
|
||
});
|
||
new import_obsidian.Setting(containerEl).setName("Exclude Languages").setDesc("Define languages in a comma separated list which the plugin should not decorate. You can use a wildcard (*) either at the beginning, or at the end. For example: ad-* will exclude codeblocks where the language starts with ad- e.g.: ad-info, ad-error etc.").addText((text2) => text2.setPlaceholder(`e.g. ${EXCLUDED_LANGUAGES} etc.`).setValue(this.plugin.settings.excludedLanguages).onChange((value) => {
|
||
this.plugin.settings.excludedLanguages = value;
|
||
this.saveSettings();
|
||
clearTimeout(excludeTimeout);
|
||
excludeTimeout = setTimeout(() => this.rerender(), 1e3);
|
||
}));
|
||
let whitelistTimeout = setTimeout(() => {
|
||
});
|
||
new import_obsidian.Setting(containerEl).setName("Whitelisted Processed Codeblocks").setDesc("Define languages in a comma separated list which the plugin should style despite being processed by another plugin. You can use a wildcard (*) either at the beginning, or at the end. For example: ad-* will exclude codeblocks where the language starts with ad- e.g.: ad-info, ad-error etc.").addText((text2) => text2.setPlaceholder(`e.g. ${WHITELIST_CODEBLOCKS} etc.`).setValue(this.plugin.settings.processedCodeblocksWhitelist).onChange((value) => {
|
||
this.plugin.settings.processedCodeblocksWhitelist = value;
|
||
this.saveSettings();
|
||
clearTimeout(whitelistTimeout);
|
||
whitelistTimeout = setTimeout(() => this.rerender(), 1e3);
|
||
}));
|
||
new import_obsidian.Setting(containerEl).setName("Redirect Language Settings").setDesc("Use this textbox to redirect specific language colours and icons as a JSON with language names as keys and either a colour key, an icon key or both as the value for a given language. Colours should be passed as CSS colours and icons should be passed as a string of the inside of an svg element. This setting is theme independent.").setClass("code-styler-setting-text-area").addTextArea((textArea) => textArea.setValue(JSON.stringify(this.plugin.settings.redirectLanguages) === "{}" ? "" : JSON.stringify(this.plugin.settings.redirectLanguages, null, 4)).setPlaceholder(JSON.stringify({ toml: { colour: "#012345", icon: LANGUAGES["APL"].colour } }, null, 4)).onChange((value) => {
|
||
if (value === "") {
|
||
this.plugin.settings.redirectLanguages = {};
|
||
this.saveSettings();
|
||
} else {
|
||
try {
|
||
this.plugin.settings.redirectLanguages = JSON.parse(value);
|
||
this.redirectLanguages();
|
||
this.saveSettings();
|
||
} catch (e2) {
|
||
new import_obsidian.Notice("Invalid JSON");
|
||
}
|
||
}
|
||
}));
|
||
}
|
||
generateInlineCodeSettings(containerEl) {
|
||
containerEl.createEl("h3", { text: "Inline Code Appearance" });
|
||
new import_obsidian.Setting(containerEl).setName("Syntax Highlight Inline Code").setDesc("If enabled, in reading mode, inline code will be syntax highlighted based on a language set with `{language} highlighted_inline_code`. See the README for more information.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.inline.syntaxHighlight).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.inline.syntaxHighlight = value;
|
||
this.saveSettings(true);
|
||
}));
|
||
new import_obsidian.Setting(containerEl).setName("Style Inline Code").setDesc("If enabled, inline code will be styled.").addToggle((toggle) => toggle.setValue(this.plugin.settings.currentTheme.settings.inline.style).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.inline.style = value;
|
||
this.generateInlineCodeStyleSettings();
|
||
this.saveSettings();
|
||
}));
|
||
this.inlineCodeStylesContainer = containerEl.createDiv();
|
||
this.generateInlineCodeStyleSettings();
|
||
new import_obsidian.Setting(this.inlineCodeStylesContainer).setName("Inline Code Title Colour").setDesc("The text colour of inline code titles.").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.inlineCodeStylesContainer,
|
||
setting,
|
||
"title_text",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].inline.titleTextColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].inline.titleTextColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(this.inlineCodeStylesContainer).setName("Inline Code Title Font Weight").setDesc("Determines how bold inline code titles appear.").then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(1, 9, 1).setValue(this.plugin.settings.currentTheme.settings.inline.titleFontWeight).setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.inline.titleFontWeight = value;
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
setting.addExtraButton((button) => {
|
||
button.setIcon("reset").setTooltip("Restore default font weight").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.inline.titleFontWeight = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.titleFontWeight;
|
||
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.titleFontWeight);
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
});
|
||
}
|
||
generateInlineCodeStyleSettings() {
|
||
this.inlineCodeStylesContainer.empty();
|
||
if (!this.plugin.settings.currentTheme.settings.inline.style)
|
||
return;
|
||
new import_obsidian.Setting(this.inlineCodeStylesContainer).setName("Inline Code Background Colour").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.inlineCodeStylesContainer,
|
||
setting,
|
||
"inline_background",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].inline.backgroundColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].inline.backgroundColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(this.inlineCodeStylesContainer).setName("Inline Code Text Colour").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.inlineCodeStylesContainer,
|
||
setting,
|
||
"inline_text",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].inline.textColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].inline.textColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(this.inlineCodeStylesContainer).setName("Inline Code Active Text Colour").setDesc("The text colour when editing inline code.").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.inlineCodeStylesContainer,
|
||
setting,
|
||
"inline_active_text",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].inline.activeTextColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].inline.activeTextColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(this.inlineCodeStylesContainer).setName("Inline Code Font Weight").setDesc("Determines how bold inline code appears.").then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(1, 9, 1).setValue(this.plugin.settings.currentTheme.settings.inline.fontWeight).setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.inline.fontWeight = value;
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
setting.addExtraButton((button) => {
|
||
button.setIcon("reset").setTooltip("Restore default font weight").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.inline.fontWeight = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.fontWeight;
|
||
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.fontWeight);
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
});
|
||
new import_obsidian.Setting(this.inlineCodeStylesContainer).setName("Inline Code Curvature").setDesc("Determines how rounded inline code appear in pixels.").then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(0, 12, 1).setValue(this.plugin.settings.currentTheme.settings.inline.curvature).setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.inline.curvature = value;
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
setting.addExtraButton((button) => {
|
||
button.setIcon("reset").setTooltip("Restore default curvature").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.inline.curvature = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.curvature;
|
||
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.curvature);
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
});
|
||
new import_obsidian.Setting(this.inlineCodeStylesContainer).setName("Inline Code Vertical Padding").setDesc("Determines how much vertical inner padding in pixels inline code has.").then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(0, 10, 1).setValue(this.plugin.settings.currentTheme.settings.inline.paddingVertical).setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.inline.paddingVertical = value;
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
setting.addExtraButton((button) => {
|
||
button.setIcon("reset").setTooltip("Restore default vertical padding").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.inline.paddingVertical = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.paddingVertical;
|
||
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.paddingVertical);
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
});
|
||
new import_obsidian.Setting(this.inlineCodeStylesContainer).setName("Inline Code Horizontal Padding").setDesc("Determines how much horizontal inner padding in pixels inline code has.").then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(0, 10, 1).setValue(this.plugin.settings.currentTheme.settings.inline.paddingHorizontal).setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.inline.paddingHorizontal = value;
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
setting.addExtraButton((button) => {
|
||
button.setIcon("reset").setTooltip("Restore default horizontal padding").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.inline.paddingHorizontal = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.paddingHorizontal;
|
||
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.paddingHorizontal);
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
});
|
||
new import_obsidian.Setting(this.inlineCodeStylesContainer).setName("Inline Code Horizontal Margin").setDesc("Determines how much horizontal outer margin is added to the inline code in pixels.").then((setting) => {
|
||
let resettableSlider;
|
||
setting.addSlider((slider) => {
|
||
resettableSlider = slider.setLimits(0, 8, 1).setValue(this.plugin.settings.currentTheme.settings.inline.marginHorizontal).setDynamicTooltip().onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.inline.marginHorizontal = value;
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
setting.addExtraButton((button) => {
|
||
button.setIcon("reset").setTooltip("Restore default horizontal margin").onClick(() => {
|
||
this.plugin.settings.currentTheme.settings.inline.marginHorizontal = this.plugin.settings.themes[this.plugin.settings.selectedTheme].settings.inline.marginHorizontal;
|
||
resettableSlider.setValue(this.plugin.settings.currentTheme.settings.inline.marginHorizontal);
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
});
|
||
}
|
||
generateAdvancedHeading(containerEl) {
|
||
const advancedSettingsHeading = containerEl.createEl("h2", { text: "Advanced Settings", cls: `advanced-settings-header${this.hideAdvanced ? " header-folded" : ""}` });
|
||
advancedSettingsHeading.addEventListener("click", () => {
|
||
this.hideAdvanced = !this.hideAdvanced;
|
||
advancedSettingsHeading.classList.toggle("header-folded", this.hideAdvanced);
|
||
this.generateAdvancedSettings();
|
||
});
|
||
}
|
||
generateAdvancedSettings() {
|
||
this.advancedSettingsContainer.empty();
|
||
if (this.hideAdvanced)
|
||
return;
|
||
this.generateInterfaceSettings(this.advancedSettingsContainer);
|
||
new import_obsidian.Setting(this.advancedSettingsContainer).setName("Editor Active Line Highlight").setDesc("If enabled, highlights the active line outside codeblocks.").setClass("code-styler-spaced").addToggle((toggle) => toggle.setTooltip("Toggle editor active line highlighting").setValue(this.plugin.settings.currentTheme.settings.highlights.activeEditorLine).onChange((value) => {
|
||
this.plugin.settings.currentTheme.settings.highlights.activeEditorLine = value;
|
||
this.disableableComponents["editorActiveLineHighlight"].forEach((component) => {
|
||
component.setDisabled(!value);
|
||
});
|
||
this.saveSettings();
|
||
})).then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.advancedSettingsContainer,
|
||
setting,
|
||
"editor_active_line_highlight",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].highlights.activeEditorLineColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].highlights.activeEditorLineColour = saveColour;
|
||
},
|
||
() => !this.plugin.settings.currentTheme.settings.highlights.activeEditorLine
|
||
);
|
||
});
|
||
this.disableableComponents["editorActiveLineHighlight"].push(this.pickrs["editor_active_line_highlight"].resetButton);
|
||
new import_obsidian.Setting(this.advancedSettingsContainer).setName("Reset inbuilt themes").setDesc("This will return all inbuilt themes to the plugin defaults").addButton((button) => button.setButtonText("Reset").onClick(() => {
|
||
Object.entries(INBUILT_THEMES).forEach(([themeName, theme]) => this.plugin.settings.themes[themeName] = structuredClone(theme));
|
||
if (this.plugin.settings.selectedTheme in INBUILT_THEMES)
|
||
this.plugin.settings.currentTheme = structuredClone(this.plugin.settings.themes[this.plugin.settings.selectedTheme]);
|
||
this.saveSettings(true);
|
||
}));
|
||
}
|
||
generateInterfaceSettings(containerEl) {
|
||
new import_obsidian.Setting(containerEl).setName("Button Colour").setDesc("Used for UI buttons like the copy code button.").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
containerEl,
|
||
setting,
|
||
"default_highlight",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].advanced.buttonColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].advanced.buttonColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
new import_obsidian.Setting(containerEl).setName("Button Active Colour").setDesc("Colour buttons use when activated.").then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
containerEl,
|
||
setting,
|
||
"default_highlight",
|
||
(relevantThemeColours) => relevantThemeColours[getCurrentMode()].advanced.buttonActiveColour,
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].advanced.buttonActiveColour = saveColour;
|
||
}
|
||
);
|
||
});
|
||
}
|
||
generatePluginCompatibilitySettings(containerEl) {
|
||
containerEl.createSpan("Needs completing");
|
||
}
|
||
generateExampleCodeblockSettings(containerEl) {
|
||
new import_obsidian.Setting(containerEl).setName("Example Codeblock Parameter String").setDesc("Parameters and language which would follow codeblock delimiter.").setClass("code-styler-setting-text-wide").addText((text2) => text2.setPlaceholder(EXAMPLE_CODEBLOCK_PARAMETERS).setValue(this.plugin.settings.exampleCodeblockParameters).onChange((value) => {
|
||
this.plugin.settings.exampleCodeblockParameters = value;
|
||
this.saveSettings();
|
||
this.generateExampleCodeblock();
|
||
}));
|
||
new import_obsidian.Setting(containerEl).setName("Example Codeblock Parameter String").setDesc("Content for example codeblock.").setClass("code-styler-setting-text-area").addTextArea((textArea) => textArea.setValue(this.plugin.settings.exampleCodeblockContent).setPlaceholder(EXAMPLE_CODEBLOCK_CONTENT).onChange((value) => {
|
||
this.plugin.settings.exampleCodeblockContent = value;
|
||
this.saveSettings();
|
||
this.generateExampleCodeblock();
|
||
}));
|
||
}
|
||
generateExampleCodeblock() {
|
||
var _a2, _b;
|
||
this.exampleCodeblockContainer.empty();
|
||
const codeblockString = "```````" + this.plugin.settings.exampleCodeblockParameters + "\n" + this.plugin.settings.exampleCodeblockContent + "\n```````";
|
||
import_obsidian.MarkdownRenderer.render(this.plugin.app, codeblockString, this.exampleCodeblockContainer, SETTINGS_SOURCEPATH_PREFIX + codeblockString, this.plugin);
|
||
(_b = (_a2 = this.exampleCodeblockContainer.querySelector("pre > button.copy-code-button")) == null ? void 0 : _a2.classList) == null ? void 0 : _b.add("code-styler-settings-button");
|
||
}
|
||
generateExampleInlineCodeSettings(containerEl) {
|
||
new import_obsidian.Setting(containerEl).setName("Inline Code Example").setDesc("Text to render as example inside code delimiters.").setClass("code-styler-setting-text-wide").addText((text2) => text2.setPlaceholder(EXAMPLE_INLINE_CODE).setValue(this.plugin.settings.exampleInlineCode).onChange((value) => {
|
||
this.plugin.settings.exampleInlineCode = value;
|
||
this.saveSettings();
|
||
this.generateExampleInlineCode();
|
||
}));
|
||
}
|
||
generateExampleInlineCode() {
|
||
var _a2, _b;
|
||
this.exampleInlineCodeContainer.empty();
|
||
import_obsidian.MarkdownRenderer.render(this.plugin.app, "`" + this.plugin.settings.exampleInlineCode + "`", this.exampleInlineCodeContainer, SETTINGS_SOURCEPATH_PREFIX, this.plugin);
|
||
(_b = (_a2 = this.exampleInlineCodeContainer.querySelector("code")) == null ? void 0 : _a2.classList) == null ? void 0 : _b.add("code-styler-settings-inline-code");
|
||
}
|
||
generateDonationFooter(containerEl) {
|
||
containerEl.createEl("hr");
|
||
const donationDiv = containerEl.createEl("div", { cls: "code-styler-donation" });
|
||
const donationText = createEl("p", { text: "If you like this plugin, and would like to help support continued development, use the button below!" });
|
||
donationDiv.appendChild(donationText);
|
||
const donationButton = createEl("a", { href: "https://www.buymeacoffee.com/mayurankv2" });
|
||
donationButton.innerHTML = '<img src="https://img.buymeacoffee.com/button-api/?text=Buy me a coffee&emoji=&slug=mayurankv2&button_colour=e3e7efa0&font_colour=262626&font_family=Inter&outline_colour=262626&coffee_colour=a0522d" height="42px">';
|
||
donationDiv.appendChild(donationButton);
|
||
}
|
||
// Create Settings
|
||
createPickr(plugin, containerEl, setting, id, getRelevantThemeColour, saveRelevantThemeColour, disabled) {
|
||
const pickr = new PickrResettable(plugin, containerEl, setting, getRelevantThemeColour, saveRelevantThemeColour);
|
||
pickr.on("show", (colour, instance) => {
|
||
if (typeof disabled !== "undefined" && disabled())
|
||
instance.hide();
|
||
}).on("save", (colour, instance) => {
|
||
const savedColour = `#${colour.toHEXA().toString().substring(1)}`;
|
||
instance.hide();
|
||
instance.addSwatch(savedColour);
|
||
instance.saveColour(savedColour);
|
||
}).on("cancel", (instance) => {
|
||
instance.hide();
|
||
});
|
||
setting.addExtraButton((button) => {
|
||
pickr.resetButton = button.setIcon("reset").setDisabled(typeof disabled !== "undefined" && disabled()).setTooltip("Restore default colour").onClick(() => {
|
||
pickr.resetColour();
|
||
});
|
||
});
|
||
this.pickrs[id] = pickr;
|
||
}
|
||
// Update Settings
|
||
saveSettings(rerender = false) {
|
||
(async () => {
|
||
await this.plugin.saveSettings();
|
||
})();
|
||
if (rerender)
|
||
this.rerender();
|
||
}
|
||
rerender() {
|
||
this.plugin.renderReadingView();
|
||
if (this.page === "codeblock")
|
||
this.generateExampleCodeblock();
|
||
else if (this.page === "inline")
|
||
this.generateExampleInlineCode();
|
||
}
|
||
updateDropdown(dropdown, settings) {
|
||
dropdown.selectEl.empty();
|
||
Object.keys(settings.themes).forEach((theme_name) => {
|
||
dropdown.addOption(theme_name, theme_name);
|
||
});
|
||
dropdown.setValue(settings.selectedTheme);
|
||
}
|
||
updateAlternativeHighlights() {
|
||
if (this.page !== "codeblock" || this.codeblockPage !== "highlight")
|
||
return;
|
||
this.alternativeHighlightsContainer.empty();
|
||
Object.keys(this.plugin.settings.currentTheme.colours.light.highlights.alternativeHighlights).forEach((alternativeHighlightName) => {
|
||
new import_obsidian.Setting(this.alternativeHighlightsContainer).setName(alternativeHighlightName).setDesc(`To highlight lines with this highlight, use the ${alternativeHighlightName} parameter.`).then((setting) => {
|
||
this.createPickr(
|
||
this.plugin,
|
||
this.alternativeHighlightsContainer,
|
||
setting,
|
||
`alternative_highlight_${alternativeHighlightName}`,
|
||
(relevantThemeColours) => alternativeHighlightName in relevantThemeColours.light.highlights.alternativeHighlights ? relevantThemeColours[getCurrentMode()].highlights.alternativeHighlights[alternativeHighlightName] : this.plugin.settings.currentTheme.colours[getCurrentMode()].highlights.alternativeHighlights[alternativeHighlightName],
|
||
(relevantThemeColours, saveColour) => {
|
||
relevantThemeColours[getCurrentMode()].highlights.alternativeHighlights[alternativeHighlightName] = saveColour;
|
||
}
|
||
);
|
||
setting.addExtraButton((button) => {
|
||
button.setIcon("trash").setTooltip("Delete highlight").onClick(() => {
|
||
delete this.plugin.settings.currentTheme.colours.light.highlights.alternativeHighlights[alternativeHighlightName];
|
||
delete this.plugin.settings.currentTheme.colours.dark.highlights.alternativeHighlights[alternativeHighlightName];
|
||
new import_obsidian.Notice(`Removed highlight "${alternativeHighlightName}".`);
|
||
this.updateAlternativeHighlights();
|
||
this.saveSettings();
|
||
});
|
||
});
|
||
});
|
||
});
|
||
}
|
||
redirectLanguages() {
|
||
Object.entries(this.plugin.settings.redirectLanguages).forEach(([languageName, languageSettings]) => {
|
||
if ("icon" in languageSettings) {
|
||
if (LANGUAGE_NAMES[languageName] in this.plugin.languageIcons)
|
||
URL.revokeObjectURL(this.plugin.languageIcons[LANGUAGE_NAMES[languageName]]);
|
||
this.plugin.languageIcons[LANGUAGE_NAMES[languageName]] = URL.createObjectURL(new Blob([`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">${languageSettings.icon}</svg>`], { type: "image/svg+xml" }));
|
||
}
|
||
});
|
||
}
|
||
};
|
||
var PickrResettable = class extends import_pickr.default {
|
||
constructor(plugin, containerEl, setting, getRelevantThemeColour, saveRelevantThemeColour, tooltip) {
|
||
const settings = {
|
||
el: setting.controlEl.createDiv({ cls: "picker" }),
|
||
theme: "nano",
|
||
default: getColour(getRelevantThemeColour(plugin.settings.currentTheme.colours)),
|
||
position: "left-middle",
|
||
lockOpacity: false,
|
||
components: {
|
||
preview: true,
|
||
hue: true,
|
||
opacity: true,
|
||
interaction: {
|
||
hex: true,
|
||
rgba: true,
|
||
hsla: false,
|
||
input: true,
|
||
cancel: true,
|
||
save: true
|
||
}
|
||
},
|
||
i18n: {
|
||
"ui:dialog": "Colour picker dialog",
|
||
"btn:toggle": typeof tooltip !== "undefined" ? tooltip : "Select colour",
|
||
"btn:swatch": "Colour swatch",
|
||
"btn:last-color": "Use previous colour"
|
||
}
|
||
};
|
||
if (containerEl.parentElement !== null)
|
||
settings.container = containerEl.parentElement;
|
||
super(settings);
|
||
this.saveColour = (saveColour) => {
|
||
saveRelevantThemeColour(plugin.settings.currentTheme.colours, saveColour);
|
||
(async () => {
|
||
await plugin.saveSettings();
|
||
})();
|
||
};
|
||
this.resetColour = () => {
|
||
const resetColour = getRelevantThemeColour(plugin.settings.themes[plugin.settings.selectedTheme].colours);
|
||
this.setColor(getColour(resetColour));
|
||
this.saveColour(resetColour);
|
||
};
|
||
}
|
||
};
|
||
function getRandomColour() {
|
||
const letters = "0123456789ABCDEF";
|
||
let colour = "";
|
||
for (let i2 = 0; i2 < 6; i2++)
|
||
colour += letters[Math.floor(Math.random() * 16)];
|
||
return `#${colour}FF`;
|
||
}
|
||
function getColour(themeColour) {
|
||
return isCss(themeColour) ? getCssVariable(themeColour) : themeColour;
|
||
}
|
||
function isCss(possibleCss) {
|
||
return possibleCss.startsWith("--") && typeof possibleCss === "string";
|
||
}
|
||
function getCssVariable(cssVariable) {
|
||
const variableValue = window.getComputedStyle(document.body).getPropertyValue(cssVariable).trim();
|
||
if (typeof variableValue === "string" && variableValue.startsWith("#"))
|
||
return `#${variableValue.trim().substring(1)}`;
|
||
else if (variableValue.startsWith("rgb"))
|
||
return `#${Ft.toHEXA(variableValue.replace(/calc\((.*?)\)/g, (match, capture) => calc(capture))).substring(1)}`;
|
||
else if (variableValue.startsWith("hsl"))
|
||
return `#${Ft.toHEXA(variableValue.replace(/calc\((.*?)\)/g, (match, capture) => calc(capture))).substring(1)}`;
|
||
else
|
||
console.warn(`Warning: Couldn't determine colour format - ${variableValue}`);
|
||
return `#${Ft.toHEXA(variableValue).substring(1)}`;
|
||
}
|
||
function calc(calcString) {
|
||
const splitString = calcString.trim().replace(/(\d*)%/g, "$1").split(" ");
|
||
const operators = {
|
||
"+": (num1, num2) => Math.max(num1 + num2, 0),
|
||
"-": (num1, num2) => Math.max(num1 - num2, 0)
|
||
};
|
||
if (splitString.length === 3) {
|
||
if (splitString[1] in operators)
|
||
return `${operators[splitString[1]](parseFloat(splitString[0]), parseFloat(splitString[2]))}%`;
|
||
}
|
||
console.warn("Warning: Couldn't parse calc string");
|
||
return calcString;
|
||
}
|
||
function getCurrentMode() {
|
||
const body3 = document.querySelector("body");
|
||
if (body3 !== null) {
|
||
if (body3.classList.contains("theme-light"))
|
||
return "light";
|
||
else if (body3.classList.contains("theme-dark"))
|
||
return "dark";
|
||
}
|
||
console.warn("Warning: Couldn't get current theme");
|
||
return "light";
|
||
}
|
||
|
||
// src/ApplyStyling.ts
|
||
var STYLE_ID = "code-styler-styles";
|
||
var THEME_STYLES = {
|
||
"Prism": {
|
||
border: {
|
||
size: 1,
|
||
style: "1px solid var(--window-border-color)"
|
||
}
|
||
},
|
||
"Shimmering Focus": {
|
||
border: {
|
||
size: 1,
|
||
style: "var(--thin-muted-border)"
|
||
}
|
||
},
|
||
"Minimal": {
|
||
extra: `
|
||
.markdown-source-view.mod-cm6.is-readable-line-width :not(pre.code-styler-pre) > .code-styler-header-container {
|
||
box-sizing: border-box;
|
||
}
|
||
`
|
||
},
|
||
"Obsidianite": {
|
||
scrollbar: true
|
||
}
|
||
};
|
||
function updateStyling(settings, app) {
|
||
const currentTheme = getCurrentTheme(app);
|
||
let styleTag = document.getElementById(STYLE_ID);
|
||
if (!styleTag) {
|
||
styleTag = document.createElement("style");
|
||
styleTag.id = STYLE_ID;
|
||
document.getElementsByTagName("head")[0].appendChild(styleTag);
|
||
}
|
||
styleTag.innerText = (styleThemeColours(settings.currentTheme.colours) + styleThemeSettings(settings.currentTheme.settings, currentTheme) + styleLanguageColours(settings.currentTheme.settings, settings.redirectLanguages, currentTheme)).trim().replace(/\s+/g, " ");
|
||
addThemeSettingsClasses(settings.currentTheme.settings);
|
||
}
|
||
function styleThemeColours(themeColours) {
|
||
return Object.keys(themeColours.light.highlights.alternativeHighlights).reduce((result, alternativeHighlight) => {
|
||
return result + `
|
||
body.code-styler .code-styler-line-highlighted-${alternativeHighlight.replace(/\s+/g, "-").toLowerCase()} {
|
||
--gradient-background-colour: var(--code-styler-${alternativeHighlight.replace(/\s+/g, "-").toLowerCase()}-highlight-colour) !important;
|
||
}
|
||
`;
|
||
}, `
|
||
body.code-styler.theme-light {
|
||
${getThemeColours(themeColours.light)}
|
||
}
|
||
body.code-styler.theme-dark {
|
||
${getThemeColours(themeColours.dark)}
|
||
}
|
||
`);
|
||
}
|
||
function getThemeColours(themeModeColours) {
|
||
return Object.entries({
|
||
"codeblock-background-colour": themeModeColours.codeblock.backgroundColour,
|
||
"codeblock-text-colour": themeModeColours.codeblock.textColour,
|
||
"gutter-background-colour": themeModeColours.gutter.backgroundColour,
|
||
"gutter-text-colour": themeModeColours.gutter.textColour,
|
||
"gutter-active-text-colour": themeModeColours.gutter.activeTextColour,
|
||
"header-background-colour": themeModeColours.header.backgroundColour,
|
||
"header-title-text-colour": themeModeColours.header.title.textColour,
|
||
"header-language-tag-background-colour": themeModeColours.header.languageTag.backgroundColour,
|
||
"header-language-tag-text-colour": themeModeColours.header.languageTag.textColour,
|
||
"header-separator-colour": themeModeColours.header.lineColour,
|
||
"active-codeblock-line-colour": themeModeColours.highlights.activeCodeblockLineColour,
|
||
"active-editor-line-colour": themeModeColours.highlights.activeEditorLineColour,
|
||
"default-highlight-colour": themeModeColours.highlights.defaultColour,
|
||
"button-colour": themeModeColours.advanced.buttonColour,
|
||
"button-active-colour": themeModeColours.advanced.buttonActiveColour,
|
||
"inline-colour": themeModeColours.inline.textColour,
|
||
"inline-colour-active": themeModeColours.inline.activeTextColour,
|
||
"inline-background-colour": themeModeColours.inline.backgroundColour,
|
||
"inline-title-colour": themeModeColours.inline.titleTextColour,
|
||
...Object.entries(themeModeColours.highlights.alternativeHighlights).reduce((result, [alternativeHighlight, colour]) => {
|
||
result[`${alternativeHighlight.replace(/\s+/g, "-").toLowerCase()}-highlight-colour`] = colour;
|
||
return result;
|
||
}, {})
|
||
}).reduce((result, [cssVariable, colour]) => {
|
||
const styleColour = isCss(colour) ? `var(${colour})` : colour;
|
||
return result + `--code-styler-${cssVariable}: ${styleColour};`;
|
||
}, "");
|
||
}
|
||
function styleThemeSettings(themeSettings, currentTheme) {
|
||
var _a2, _b, _c;
|
||
return `
|
||
body.code-styler .code-styler-header-language-tag {
|
||
--code-styler-header-language-tag-text-bold: ${themeSettings.header.languageTag.textBold ? "bold" : "normal"};
|
||
--code-styler-header-language-tag-text-italic: ${themeSettings.header.languageTag.textItalic ? "italic" : "normal"};
|
||
font-family: ${themeSettings.header.languageTag.textFont !== "" ? themeSettings.header.languageTag.textFont : "var(--font-text)"};
|
||
}
|
||
body.code-styler .code-styler-header-text {
|
||
--code-styler-header-title-text-bold: ${themeSettings.header.title.textBold ? "bold" : "normal"};
|
||
--code-styler-header-title-text-italic: ${themeSettings.header.title.textItalic ? "italic" : "normal"};
|
||
font-family: ${themeSettings.header.languageTag.textFont !== "" ? themeSettings.header.languageTag.textFont : "var(--font-text)"};
|
||
}
|
||
body.code-styler {
|
||
--border-radius: ${themeSettings.codeblock.curvature}px;
|
||
--language-icon-size: ${themeSettings.advanced.iconSize}px;
|
||
--gradient-highlights-colour-stop: ${themeSettings.advanced.gradientHighlights ? themeSettings.advanced.gradientHighlightsColourStop : "100%"};
|
||
--header-font-size: ${themeSettings.header.fontSize}px;
|
||
--line-wrapping: ${themeSettings.codeblock.unwrapLines ? "pre" : "pre-wrap"};
|
||
--code-styler-inline-font-weight: ${themeSettings.inline.fontWeight}00;
|
||
--code-styler-inline-border-radius: ${themeSettings.inline.curvature}px;
|
||
--code-styler-inline-padding-vertical: ${themeSettings.inline.paddingVertical}px;
|
||
--code-styler-inline-padding-horizontal: ${themeSettings.inline.paddingHorizontal}px;
|
||
--code-styler-inline-margin-horizontal: ${themeSettings.inline.marginHorizontal}px;
|
||
--code-styler-inline-title-font-weight: ${themeSettings.inline.titleFontWeight}00;
|
||
${!themeSettings.codeblock.wrapLinesActive ? "" : "--line-active-wrapping: pre-wrap;"}
|
||
${themeSettings.header.languageIcon.displayColour ? "" : "--icon-filter: grayscale(1);"}
|
||
}
|
||
${((_a2 = THEME_STYLES == null ? void 0 : THEME_STYLES[currentTheme]) == null ? void 0 : _a2.border) ? `
|
||
.markdown-source-view :not(pre.code-styler-pre) > .code-styler-header-container {
|
||
--code-styler-header-border:` + //@ts-expect-error Does Exist
|
||
THEME_STYLES[currentTheme].border.style + `;
|
||
--header-separator-width-padding: calc(var(--header-separator-width) - ` + //@ts-expect-error Does Exist
|
||
THEME_STYLES[currentTheme].border.size + `px);
|
||
--folded-bottom-border: var(--code-styler-header-border);
|
||
}
|
||
` : ""}
|
||
${((_b = THEME_STYLES == null ? void 0 : THEME_STYLES[currentTheme]) == null ? void 0 : _b.scrollbar) ? `
|
||
pre.code-styler-pre::-webkit-scrollbar,
|
||
pre.code-styler-pre > code::-webkit-scrollbar {
|
||
width: var(--code-padding);
|
||
height: var(--code-padding);
|
||
background-color: var(--code-styler-codeblock-background-colour);
|
||
}
|
||
` : ""}
|
||
${((_c = THEME_STYLES == null ? void 0 : THEME_STYLES[currentTheme]) == null ? void 0 : _c.extra) ? THEME_STYLES[currentTheme].extra : ""}
|
||
`;
|
||
}
|
||
function styleLanguageColours(themeSettings, redirectLanguages, currentTheme) {
|
||
return Object.entries(LANGUAGE_NAMES).reduce((result, [languageName, languageDisplayName]) => {
|
||
var _a2, _b, _c, _d, _e;
|
||
if (((_b = (_a2 = LANGUAGES) == null ? void 0 : _a2[languageDisplayName]) == null ? void 0 : _b.colour) || languageName in redirectLanguages && "colour" in redirectLanguages[languageName]) {
|
||
result += `
|
||
.language-${languageName} {
|
||
--language-border-colour: ${(_d = (_c = redirectLanguages == null ? void 0 : redirectLanguages[languageName]) == null ? void 0 : _c["colour"]) != null ? _d : LANGUAGES[languageDisplayName].colour};
|
||
--language-border-width: ${themeSettings.advanced.languageBorderColour ? themeSettings.advanced.languageBorderWidth : 0}px;
|
||
}
|
||
`;
|
||
if ((_e = THEME_STYLES == null ? void 0 : THEME_STYLES[currentTheme]) == null ? void 0 : _e.border) {
|
||
result += `
|
||
.markdown-source-view :not(pre.code-styler-pre) > .code-styler-header-container.language-${languageName} {
|
||
--language-border-width: ${//@ts-expect-error Does exist
|
||
themeSettings.advanced.languageBorderColour ? themeSettings.advanced.languageBorderWidth + THEME_STYLES[currentTheme].border.size : 0}px;
|
||
}`;
|
||
}
|
||
}
|
||
return result;
|
||
}, "");
|
||
}
|
||
function addThemeSettingsClasses(themeSettings) {
|
||
themeSettings.inline.style ? document.body.classList.add("code-styler-style-inline") : document.body.classList.remove("code-styler-style-inline");
|
||
themeSettings.gutter.highlight ? document.body.classList.add("code-styler-gutter-highlight") : document.body.classList.remove("code-styler-gutter-highlight");
|
||
themeSettings.gutter.activeLine ? document.body.classList.add("code-styler-gutter-active-line") : document.body.classList.remove("code-styler-gutter-active-line");
|
||
document.body.classList.remove("code-styler-active-line-highlight", "code-styler-active-line-highlight-codeblock", "code-styler-active-line-highlight-editor");
|
||
if (themeSettings.highlights.activeEditorLine && themeSettings.highlights.activeCodeblockLine)
|
||
document.body.classList.add("code-styler-active-line-highlight");
|
||
else if (themeSettings.highlights.activeEditorLine && !themeSettings.highlights.activeCodeblockLine)
|
||
document.body.classList.add("code-styler-active-line-highlight-editor");
|
||
else if (!themeSettings.highlights.activeEditorLine && themeSettings.highlights.activeCodeblockLine)
|
||
document.body.classList.add("code-styler-active-line-highlight-codeblock");
|
||
}
|
||
function removeStylesAndClasses() {
|
||
var _a2;
|
||
(_a2 = document.getElementById(STYLE_ID)) == null ? void 0 : _a2.remove();
|
||
document.body.classList.remove(
|
||
"code-styler",
|
||
"code-styler-show-line-numbers",
|
||
"code-styler-gutter-highlight",
|
||
"code-styler-gutter-active-line"
|
||
);
|
||
}
|
||
function getCurrentTheme(app) {
|
||
return app.vault.getConfig("cssTheme");
|
||
}
|
||
|
||
// src/EditingView.ts
|
||
var import_obsidian5 = require("obsidian");
|
||
var import_view = require("@codemirror/view");
|
||
var import_state = require("@codemirror/state");
|
||
var import_language = require("@codemirror/language");
|
||
|
||
// src/Parsing/CodeblockParsing.ts
|
||
var import_obsidian3 = require("obsidian");
|
||
|
||
// src/External/ExecuteCode/CodeBlockArgs.ts
|
||
var import_obsidian2 = require("obsidian");
|
||
var JSON5 = __toESM(require_dist());
|
||
function getArgs(firstLineOfCode) {
|
||
if (!firstLineOfCode.contains("{") && !firstLineOfCode.contains("}"))
|
||
return {};
|
||
try {
|
||
let args = firstLineOfCode.substring(firstLineOfCode.indexOf("{") + 1).trim();
|
||
args = args.replace(/=/g, ":");
|
||
const exports = [];
|
||
const handleUnnamedExport = (exportName) => {
|
||
let i2 = args.indexOf(exportName);
|
||
while (i2 !== -1) {
|
||
const nextChar = args[i2 + exportName.length];
|
||
if (nextChar !== '"' && nextChar !== "'") {
|
||
args = args.substring(0, i2) + args.substring(i2 + exportName.length + (nextChar === "}" ? 0 : 1));
|
||
exports.push(exportName);
|
||
}
|
||
i2 = args.indexOf(exportName, i2 + 1);
|
||
}
|
||
};
|
||
handleUnnamedExport("pre");
|
||
handleUnnamedExport("post");
|
||
args = `{export: ['${exports.join("', '")}'], ${args}`;
|
||
return JSON5.parse(args);
|
||
} catch (err) {
|
||
new import_obsidian2.Notice(`Failed to parse code block arguments from line:
|
||
${firstLineOfCode}
|
||
|
||
Failed with error:
|
||
${err}`);
|
||
return {};
|
||
}
|
||
}
|
||
|
||
// src/Parsing/CodeblockParsing.ts
|
||
async function parseCodeblockSource(codeSection, plugin, sourcePath) {
|
||
const plugins = plugin.app.plugins.plugins;
|
||
const admonitions = "obsidian-admonition" in plugins;
|
||
const codeblocks = [];
|
||
function parseCodeblockSection(codeSection2) {
|
||
var _a2;
|
||
if (codeSection2.length === 0)
|
||
return;
|
||
const openingCodeblockLine = getOpeningLine(codeSection2);
|
||
if (!openingCodeblockLine)
|
||
return;
|
||
const openDelimiter = (_a2 = /^\s*(?:>\s*)*((?:```+|~~~+)).*$/.exec(openingCodeblockLine)) == null ? void 0 : _a2[1];
|
||
if (!openDelimiter)
|
||
return;
|
||
const openDelimiterIndex = codeSection2.indexOf(openingCodeblockLine);
|
||
const closeDelimiterIndex = codeSection2.slice(openDelimiterIndex + 1).findIndex((line) => new RegExp(`^\\s*(?:>\\s*)*${openDelimiter}(?!${openDelimiter[0]})$`).test(line));
|
||
if (!admonitions || !/^\s*(?:>\s*)*(?:```+|~~~+) *ad-.*$/.test(openingCodeblockLine))
|
||
codeblocks.push(codeSection2.slice(0, openDelimiterIndex + 2 + closeDelimiterIndex));
|
||
else
|
||
parseCodeblockSection(codeSection2.slice(openDelimiterIndex + 1, openDelimiterIndex + 1 + closeDelimiterIndex));
|
||
parseCodeblockSection(codeSection2.slice(openDelimiterIndex + 1 + closeDelimiterIndex + 1));
|
||
}
|
||
parseCodeblockSection(codeSection);
|
||
return { codeblocksParameters: await (typeof sourcePath !== "undefined" ? parseCodeblocks(codeblocks, plugin, plugins, sourcePath) : parseCodeblocks(codeblocks, plugin, plugins)), nested: codeblocks[0] ? !arraysEqual(codeSection, codeblocks[0]) : true };
|
||
}
|
||
async function parseCodeblocks(codeblocks, plugin, plugins, sourcePath) {
|
||
const codeblocksParameters = [];
|
||
for (const codeblockLines of codeblocks) {
|
||
const codeblockParameters = await (typeof sourcePath !== "undefined" ? parseCodeblock(codeblockLines, plugin, plugins, sourcePath) : parseCodeblock(codeblockLines, plugin, plugins));
|
||
if (codeblockParameters !== null)
|
||
codeblocksParameters.push(codeblockParameters);
|
||
}
|
||
return codeblocksParameters;
|
||
}
|
||
async function parseCodeblock(codeblockLines, plugin, plugins, sourcePath) {
|
||
const parameterLine = getParameterLine(codeblockLines);
|
||
if (!parameterLine)
|
||
return null;
|
||
const codeblockParameters = parseCodeblockParameters(parameterLine, plugin.settings.currentTheme);
|
||
if (isCodeblockIgnored(codeblockParameters.language, plugin.settings.processedCodeblocksWhitelist))
|
||
return null;
|
||
return await (typeof sourcePath !== "undefined" ? pluginAdjustParameters(codeblockParameters, plugin, plugins, codeblockLines, sourcePath) : pluginAdjustParameters(codeblockParameters, plugin, plugins, codeblockLines));
|
||
}
|
||
function parseCodeblockParameters(parameterLine, theme) {
|
||
const codeblockParameters = {
|
||
language: "",
|
||
title: "",
|
||
reference: "",
|
||
fold: {
|
||
enabled: false,
|
||
placeholder: ""
|
||
},
|
||
lineNumbers: {
|
||
alwaysEnabled: false,
|
||
alwaysDisabled: false,
|
||
offset: 0
|
||
},
|
||
lineUnwrap: {
|
||
alwaysEnabled: false,
|
||
alwaysDisabled: false,
|
||
activeWrap: false
|
||
},
|
||
highlights: {
|
||
default: {
|
||
lineNumbers: [],
|
||
plainText: [],
|
||
regularExpressions: []
|
||
},
|
||
alternative: {}
|
||
},
|
||
ignore: false
|
||
};
|
||
if (parameterLine.startsWith("```"))
|
||
parameterLine = parameterLine.replace(/^```+(?=[^`]|$)/, "");
|
||
else if (parameterLine.startsWith("~~~"))
|
||
parameterLine = parameterLine.replace(/^~~~+(?=[^~]|$)/, "");
|
||
else
|
||
return codeblockParameters;
|
||
const rmdMatch = /^\{(.+)\} *$/.exec(parameterLine);
|
||
if (rmdMatch)
|
||
parameterLine = rmdMatch[1];
|
||
const languageBreak = parameterLine.indexOf(" ");
|
||
codeblockParameters.language = parameterLine.slice(0, languageBreak !== -1 ? languageBreak : parameterLine.length).toLowerCase();
|
||
if (languageBreak === -1)
|
||
return codeblockParameters;
|
||
parameterLine = parameterLine.slice(languageBreak + 1);
|
||
if (rmdMatch)
|
||
parameterLine = "title:" + parameterLine;
|
||
const parameterStrings = parameterLine.match(/(?:(?:ref|reference|title):(?:\[\[.*?\]\]|\[.*?\]\(.+\))|[^\s"']+|"[^"]*"|'[^']*')+/g);
|
||
if (!parameterStrings)
|
||
return codeblockParameters;
|
||
parameterStrings.forEach((parameterString) => parseCodeblockParameterString(parameterString.replace(/(?:^,|,$)/g, ""), codeblockParameters, theme));
|
||
return codeblockParameters;
|
||
}
|
||
async function pluginAdjustParameters(codeblockParameters, plugin, plugins, codeblockLines, sourcePath) {
|
||
if (codeblockParameters.language === "preview")
|
||
codeblockParameters = await (typeof sourcePath !== "undefined" ? pluginAdjustPreviewCode(codeblockParameters, plugins, codeblockLines, sourcePath) : pluginAdjustPreviewCode(codeblockParameters, plugins, codeblockLines));
|
||
else if (codeblockParameters.language === "include")
|
||
codeblockParameters = pluginAdjustFileInclude(codeblockParameters, plugins, codeblockLines);
|
||
else if (/run-\w*/.test(codeblockParameters.language))
|
||
codeblockParameters = pluginAdjustExecuteCodeRun(codeblockParameters, plugin, plugins);
|
||
codeblockParameters = pluginAdjustExecuteCode(codeblockParameters, plugins, codeblockLines);
|
||
return codeblockParameters;
|
||
}
|
||
async function pluginAdjustPreviewCode(codeblockParameters, plugins, codeblockLines, sourcePath) {
|
||
var _a2, _b, _c, _d;
|
||
if (((_a2 = plugins == null ? void 0 : plugins["obsidian-code-preview"]) == null ? void 0 : _a2.code) && ((_b = plugins == null ? void 0 : plugins["obsidian-code-preview"]) == null ? void 0 : _b.analyzeHighLightLines)) {
|
||
const codePreviewParams = await plugins["obsidian-code-preview"].code(codeblockLines.slice(1, -1).join("\n"), sourcePath);
|
||
if (!codeblockParameters.lineNumbers.alwaysDisabled && !codeblockParameters.lineNumbers.alwaysEnabled) {
|
||
if (typeof codePreviewParams.start === "number")
|
||
codeblockParameters.lineNumbers.offset = codePreviewParams.start - 1;
|
||
codeblockParameters.lineNumbers.alwaysEnabled = Boolean(codePreviewParams.linenumber);
|
||
}
|
||
codeblockParameters.highlights.default.lineNumbers = [...new Set(codeblockParameters.highlights.default.lineNumbers.concat(Array.from(plugins["obsidian-code-preview"].analyzeHighLightLines(codePreviewParams.lines, codePreviewParams.highlight), (pair) => pair[0])))];
|
||
if (codeblockParameters.title === "")
|
||
codeblockParameters.title = (_d = (_c = codePreviewParams.filePath.split("\\").pop()) == null ? void 0 : _c.split("/").pop()) != null ? _d : "";
|
||
codeblockParameters.language = codePreviewParams.language;
|
||
}
|
||
return codeblockParameters;
|
||
}
|
||
function pluginAdjustFileInclude(codeblockParameters, plugins, codeblockLines) {
|
||
var _a2;
|
||
if ("file-include" in plugins) {
|
||
const fileIncludeLanguage = (_a2 = /include (\w+)/.exec(codeblockLines[0])) == null ? void 0 : _a2[1];
|
||
if (typeof fileIncludeLanguage !== "undefined")
|
||
codeblockParameters.language = fileIncludeLanguage;
|
||
}
|
||
return codeblockParameters;
|
||
}
|
||
function pluginAdjustExecuteCode(codeblockParameters, plugins, codeblockLines) {
|
||
var _a2, _b;
|
||
if ("execute-code" in plugins) {
|
||
const codeblockArgs = getArgs(codeblockLines[0]);
|
||
codeblockParameters.title = (_b = (_a2 = codeblockParameters.title) != null ? _a2 : codeblockArgs == null ? void 0 : codeblockArgs.label) != null ? _b : "";
|
||
}
|
||
return codeblockParameters;
|
||
}
|
||
function pluginAdjustExecuteCodeRun(codeblockParameters, plugin, plugins) {
|
||
if ("execute-code" in plugins) {
|
||
if (EXECUTE_CODE_SUPPORTED_LANGUAGES.includes(codeblockParameters.language.slice(4)) && !isCodeblockIgnored(codeblockParameters.language, plugin.settings.processedCodeblocksWhitelist))
|
||
codeblockParameters.language = codeblockParameters.language.slice(4);
|
||
}
|
||
return codeblockParameters;
|
||
}
|
||
function parseCodeblockParameterString(parameterString, codeblockParameters, theme) {
|
||
if (parameterString === "ignore")
|
||
codeblockParameters.ignore = true;
|
||
else if (/^title[:=]/.test(parameterString))
|
||
manageTitle(parameterString, codeblockParameters);
|
||
else if (/^ref[:=]/.test(parameterString) || /^reference[:=]/.test(parameterString))
|
||
manageReference(parameterString, codeblockParameters);
|
||
else if (/^fold[:=]?/.test(parameterString))
|
||
manageFolding(parameterString, codeblockParameters);
|
||
else if (/^ln[:=]/.test(parameterString))
|
||
manageLineNumbering(parameterString, codeblockParameters);
|
||
else if (/^unwrap[:=]?/.test(parameterString) || parameterString === "wrap")
|
||
manageWrapping(parameterString, codeblockParameters);
|
||
else
|
||
addHighlights(parameterString, codeblockParameters, theme);
|
||
}
|
||
function manageTitle(parameterString, codeblockParameters) {
|
||
const titleMatch = /(["']?)([^\1]+)\1/.exec(parameterString.slice("title:".length));
|
||
if (titleMatch)
|
||
codeblockParameters.title = titleMatch[2].trim();
|
||
parameterString = parameterString.slice("title:".length);
|
||
const linkInfo = manageLink(parameterString);
|
||
if (linkInfo) {
|
||
codeblockParameters.title = linkInfo.title;
|
||
codeblockParameters.reference = linkInfo.reference;
|
||
}
|
||
}
|
||
function manageReference(parameterString, codeblockParameters) {
|
||
parameterString = parameterString.slice((/^ref[:=]/.test(parameterString) ? "ref:" : "reference:").length);
|
||
const linkInfo = manageLink(parameterString);
|
||
if (linkInfo) {
|
||
codeblockParameters.reference = linkInfo.reference;
|
||
if (codeblockParameters.title === "")
|
||
codeblockParameters.title = linkInfo.title;
|
||
}
|
||
}
|
||
function manageLink(parameterString) {
|
||
const refWikiMatch = /\[\[([^\]|\r\n]+?)(?:\|([^\]|\r\n]+?))?\]\]/.exec(parameterString);
|
||
const refMdMatch = /\[(.*?)\]\((.+)\)/.exec(parameterString);
|
||
let title = "";
|
||
let reference = "";
|
||
if (refWikiMatch) {
|
||
title = refWikiMatch[2] ? refWikiMatch[2].trim() : refWikiMatch[1].trim();
|
||
reference = refWikiMatch[1].trim();
|
||
} else if (refMdMatch) {
|
||
title = refMdMatch[1].trim();
|
||
reference = refMdMatch[2].trim();
|
||
} else
|
||
return;
|
||
return { title, reference };
|
||
}
|
||
function manageFolding(parameterString, codeblockParameters) {
|
||
if (parameterString === "fold") {
|
||
codeblockParameters.fold = {
|
||
enabled: true,
|
||
placeholder: ""
|
||
};
|
||
} else {
|
||
const foldPlaceholderMatch = /(["']?)([^\1]+)\1/.exec(parameterString.slice("fold:".length));
|
||
if (foldPlaceholderMatch) {
|
||
codeblockParameters.fold = {
|
||
enabled: true,
|
||
placeholder: foldPlaceholderMatch[2].trim()
|
||
};
|
||
}
|
||
}
|
||
}
|
||
function manageLineNumbering(parameterString, codeblockParameters) {
|
||
parameterString = parameterString.slice("ln:".length);
|
||
if (/^\d+$/.test(parameterString)) {
|
||
codeblockParameters.lineNumbers = {
|
||
alwaysEnabled: true,
|
||
alwaysDisabled: false,
|
||
offset: parseInt(parameterString) - 1
|
||
};
|
||
} else if (parameterString.toLowerCase() === "true") {
|
||
codeblockParameters.lineNumbers = {
|
||
alwaysEnabled: true,
|
||
alwaysDisabled: false,
|
||
offset: 0
|
||
};
|
||
} else if (parameterString.toLowerCase() === "false") {
|
||
codeblockParameters.lineNumbers = {
|
||
alwaysEnabled: false,
|
||
alwaysDisabled: true,
|
||
offset: 0
|
||
};
|
||
}
|
||
}
|
||
function manageWrapping(parameterString, codeblockParameters) {
|
||
if (parameterString === "wrap") {
|
||
codeblockParameters.lineUnwrap = {
|
||
alwaysEnabled: false,
|
||
alwaysDisabled: true,
|
||
activeWrap: false
|
||
};
|
||
} else if (parameterString === "unwrap") {
|
||
codeblockParameters.lineUnwrap = {
|
||
alwaysEnabled: true,
|
||
alwaysDisabled: false,
|
||
activeWrap: false
|
||
};
|
||
} else {
|
||
parameterString = parameterString.slice("unwrap:".length);
|
||
if (parameterString.toLowerCase() === "inactive") {
|
||
codeblockParameters.lineUnwrap = {
|
||
alwaysEnabled: true,
|
||
alwaysDisabled: false,
|
||
activeWrap: true
|
||
};
|
||
} else if (parameterString.toLowerCase() === "true") {
|
||
codeblockParameters.lineUnwrap = {
|
||
alwaysEnabled: true,
|
||
alwaysDisabled: false,
|
||
activeWrap: false
|
||
};
|
||
} else if (parameterString.toLowerCase() === "false") {
|
||
codeblockParameters.lineUnwrap = {
|
||
alwaysEnabled: false,
|
||
alwaysDisabled: true,
|
||
activeWrap: false
|
||
};
|
||
}
|
||
}
|
||
}
|
||
function addHighlights(parameterString, codeblockParameters, theme) {
|
||
const highlightMatch = /^(\w+)[:=](.+)$/.exec(parameterString);
|
||
if (highlightMatch) {
|
||
if (highlightMatch[1] === "hl")
|
||
codeblockParameters.highlights.default = parseHighlightedLines(highlightMatch[2]);
|
||
else if (highlightMatch[1] in theme.colours.light.highlights.alternativeHighlights)
|
||
codeblockParameters.highlights.alternative[highlightMatch[1]] = parseHighlightedLines(highlightMatch[2]);
|
||
} else if (/^{[\d-,]+}$/.test(parameterString))
|
||
codeblockParameters.highlights.default = parseHighlightedLines(parameterString.slice(1, -1));
|
||
}
|
||
function parseHighlightedLines(highlightedLinesString) {
|
||
const highlightRules = highlightedLinesString.split(",");
|
||
const lineNumbers = /* @__PURE__ */ new Set();
|
||
const plainText = /* @__PURE__ */ new Set();
|
||
const regularExpressions = /* @__PURE__ */ new Set();
|
||
highlightRules.forEach((highlightRule) => {
|
||
if (/\d+-\d+/.test(highlightRule)) {
|
||
const [start, end] = highlightRule.split("-").map((num) => parseInt(num));
|
||
if (start && end && start <= end)
|
||
Array.from({ length: end - start + 1 }, (_2, num) => num + start).forEach((lineNumber) => lineNumbers.add(lineNumber));
|
||
} else if (/^\/(.*)\/$/.test(highlightRule)) {
|
||
try {
|
||
regularExpressions.add(new RegExp(highlightRule.replace(/^\/(.*)\/$/, "$1")));
|
||
} catch (e2) {
|
||
}
|
||
} else if (/".*"/.test(highlightRule)) {
|
||
plainText.add(highlightRule.substring(1, highlightRule.length - 1));
|
||
} else if (/'.*'/.test(highlightRule)) {
|
||
plainText.add(highlightRule.substring(1, highlightRule.length - 1));
|
||
} else if (/\D/.test(highlightRule)) {
|
||
plainText.add(highlightRule);
|
||
} else if (/\d+/.test(highlightRule)) {
|
||
lineNumbers.add(parseInt(highlightRule));
|
||
}
|
||
});
|
||
return {
|
||
lineNumbers: [...lineNumbers],
|
||
plainText: [...plainText],
|
||
regularExpressions: [...regularExpressions]
|
||
};
|
||
}
|
||
function isLanguageIgnored(language, excludedLanguagesString) {
|
||
return parseRegexExcludedLanguages(excludedLanguagesString).some((regexExcludedLanguage) => regexExcludedLanguage.test(language));
|
||
}
|
||
function isCodeblockIgnored(language, whitelistedCodeblocksString) {
|
||
return language in import_obsidian3.MarkdownPreviewRenderer.codeBlockPostProcessors && !parseRegexExcludedLanguages(whitelistedCodeblocksString).some((regexExcludedLanguage) => regexExcludedLanguage.test(language));
|
||
}
|
||
function parseRegexExcludedLanguages(excludedLanguagesString) {
|
||
return excludedLanguagesString.split(",").map((regexLanguage) => new RegExp(`^${regexLanguage.trim().replace(/\*/g, ".+")}$`, "i"));
|
||
}
|
||
function getParameterLine(codeblockLines) {
|
||
let openingCodeblockLine = getOpeningLine(codeblockLines);
|
||
if (openingCodeblockLine && (openingCodeblockLine !== codeblockLines[0] || />\s*(?:[`~])/.test(openingCodeblockLine)))
|
||
openingCodeblockLine = cleanParameterLine(openingCodeblockLine);
|
||
return openingCodeblockLine;
|
||
}
|
||
function getOpeningLine(codeblockLines) {
|
||
return codeblockLines.find((line) => Boolean(testOpeningLine(line)));
|
||
}
|
||
function testOpeningLine(codeblockLine) {
|
||
const lineMatch = /^(\s*(?:>\s*)*)(```+|~~~+)/.exec(codeblockLine);
|
||
if (!lineMatch)
|
||
return "";
|
||
if (codeblockLine.indexOf(lineMatch[2], lineMatch[1].length + lineMatch[2].length + 1) === -1)
|
||
return lineMatch[2];
|
||
return "";
|
||
}
|
||
function cleanParameterLine(parameterLine) {
|
||
return trimParameterLine(parameterLine).replace(/^(?:>\s*)*(```+|~~~+)/, "$1");
|
||
}
|
||
function trimParameterLine(parameterLine) {
|
||
return parameterLine.trim();
|
||
}
|
||
async function getFileContentLines(sourcePath, plugin) {
|
||
const file = plugin.app.vault.getAbstractFileByPath(sourcePath);
|
||
if (!file) {
|
||
console.error(`File not found: ${sourcePath}`);
|
||
return;
|
||
}
|
||
const fileContent = await plugin.app.vault.cachedRead(file).catch((error) => {
|
||
console.error(`Error reading file: ${error.message}`);
|
||
return "";
|
||
});
|
||
if (!fileContent)
|
||
return;
|
||
return fileContent.split(/\n/g);
|
||
}
|
||
function arraysEqual(array1, array2) {
|
||
return array1.length === array2.length && array1.every((el) => array2.includes(el));
|
||
}
|
||
|
||
// src/Parsing/InlineCodeParsing.ts
|
||
function parseInlineCode(codeText) {
|
||
const match = /^{( *(?:\w+(?: +(?:(?:[^\s"']+|"[^"]*"|'[^']*')+))*)? *)} *?([^ ].*?)$/.exec(codeText);
|
||
if (typeof (match == null ? void 0 : match[1]) !== "undefined" && typeof (match == null ? void 0 : match[2]) !== "undefined") {
|
||
if (match[1] === "")
|
||
return { parameters: null, text: match[2] };
|
||
else
|
||
return { parameters: parseInlineCodeParameters(match[1]), text: match[2] };
|
||
} else
|
||
return { parameters: null, text: codeText };
|
||
}
|
||
function parseInlineCodeParameters(parameterLine) {
|
||
const inlineCodeParameters = {
|
||
language: "",
|
||
title: "",
|
||
icon: false
|
||
};
|
||
const languageBreak = parameterLine.indexOf(" ");
|
||
inlineCodeParameters.language = parameterLine.slice(0, languageBreak !== -1 ? languageBreak : parameterLine.length).toLowerCase();
|
||
if (languageBreak === -1)
|
||
return inlineCodeParameters;
|
||
const parameterStrings = parameterLine.slice(languageBreak + 1).match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g);
|
||
if (!parameterStrings)
|
||
return inlineCodeParameters;
|
||
parameterStrings.forEach((parameterString) => parseInlineCodeParameterString(parameterString, inlineCodeParameters));
|
||
return inlineCodeParameters;
|
||
}
|
||
function parseInlineCodeParameterString(parameterString, inlineCodeParameters) {
|
||
if (parameterString.startsWith("title:")) {
|
||
const titleMatch = /(["']?)([^\1]+)\1/.exec(parameterString.slice("title:".length));
|
||
if (titleMatch)
|
||
inlineCodeParameters.title = titleMatch[2].trim();
|
||
} else if (parameterString === "icon" || parameterString.startsWith("icon:") && parameterString.toLowerCase() === "icon:true")
|
||
inlineCodeParameters.icon = true;
|
||
}
|
||
|
||
// src/CodeblockDecorating.ts
|
||
var import_obsidian4 = require("obsidian");
|
||
function createHeader(codeblockParameters, themeSettings, sourcePath, plugin) {
|
||
const headerContainer = createDiv();
|
||
const iconURL = codeblockParameters.language ? getLanguageIcon(codeblockParameters.language, plugin.languageIcons) : void 0;
|
||
if (!isHeaderHidden(codeblockParameters, themeSettings, iconURL)) {
|
||
headerContainer.classList.add("code-styler-header-container");
|
||
if (codeblockParameters.language !== "") {
|
||
if (isLanguageIconShown(codeblockParameters, themeSettings, iconURL))
|
||
headerContainer.appendChild(createImageWrapper(iconURL, createDiv()));
|
||
if (isLanguageTagShown(codeblockParameters, themeSettings))
|
||
headerContainer.appendChild(createDiv({ cls: "code-styler-header-language-tag", text: getLanguageTag(codeblockParameters.language) }));
|
||
}
|
||
const titleContainer = createTitleContainer(codeblockParameters, themeSettings, sourcePath, plugin);
|
||
headerContainer.appendChild(titleContainer);
|
||
} else
|
||
headerContainer.classList.add("code-styler-header-container-hidden");
|
||
return headerContainer;
|
||
}
|
||
function createTitleContainer(codeblockParameters, themeSettings, sourcePath, plugin) {
|
||
const titleContainer = createDiv({ cls: "code-styler-header-text" });
|
||
const title = codeblockParameters.title || (codeblockParameters.fold.enabled ? codeblockParameters.fold.placeholder || themeSettings.header.foldPlaceholder || FOLD_PLACEHOLDER : "");
|
||
if (codeblockParameters.reference === "")
|
||
titleContainer.innerText = title;
|
||
else {
|
||
import_obsidian4.MarkdownRenderer.render(plugin.app, `[[${codeblockParameters.reference}|${title}]]`, titleContainer, sourcePath, plugin);
|
||
}
|
||
return titleContainer;
|
||
}
|
||
function createInlineOpener(inlineCodeParameters, languageIcons, containerClasses = ["code-styler-inline-opener"]) {
|
||
const openerContainer = createSpan({ cls: containerClasses.join(" ") });
|
||
if (inlineCodeParameters.icon) {
|
||
const iconURL = getLanguageIcon(inlineCodeParameters.language, languageIcons);
|
||
if (typeof iconURL !== "undefined")
|
||
openerContainer.appendChild(createImageWrapper(iconURL, createSpan(), "code-styler-inline-icon"));
|
||
}
|
||
if (inlineCodeParameters.title)
|
||
openerContainer.appendChild(createSpan({ cls: "code-styler-inline-title", text: inlineCodeParameters.title }));
|
||
return openerContainer;
|
||
}
|
||
function createImageWrapper(iconURL, imageWrapper, imgClass = "code-styler-icon") {
|
||
const img = document.createElement("img");
|
||
img.classList.add(imgClass);
|
||
img.src = iconURL;
|
||
imageWrapper.appendChild(img);
|
||
return imageWrapper;
|
||
}
|
||
function getLanguageIcon(language, languageIcons) {
|
||
return languageIcons == null ? void 0 : languageIcons[getLanguageTag(language)];
|
||
}
|
||
function getLanguageTag(language) {
|
||
var _a2, _b;
|
||
return (_b = (_a2 = LANGUAGE_NAMES) == null ? void 0 : _a2[language]) != null ? _b : language.charAt(0).toUpperCase() + language.slice(1) || "";
|
||
}
|
||
function isHeaderHidden(codeblockParameters, themeSettings, iconURL) {
|
||
return !isHeaderRequired(codeblockParameters) && (codeblockParameters.language === "" || themeSettings.header.languageTag.display !== "always" && (themeSettings.header.languageIcon.display !== "always" || typeof iconURL == "undefined"));
|
||
}
|
||
function isLanguageIconShown(codeblockParameters, themeSettings, iconURL) {
|
||
return typeof iconURL !== "undefined" && (themeSettings.header.languageIcon.display === "always" || isHeaderRequired(codeblockParameters) && themeSettings.header.languageIcon.display === "if_header_shown");
|
||
}
|
||
function isLanguageTagShown(codeblockParameters, themeSettings) {
|
||
return themeSettings.header.languageTag.display === "always" || isHeaderRequired(codeblockParameters) && themeSettings.header.languageTag.display === "if_header_shown";
|
||
}
|
||
function isHeaderRequired(codeblockParameters) {
|
||
return codeblockParameters.fold.enabled || codeblockParameters.title !== "";
|
||
}
|
||
function getLineClass(codeblockParameters, lineNumber, line) {
|
||
let classList = [];
|
||
if (codeblockParameters.highlights.default.lineNumbers.includes(lineNumber + codeblockParameters.lineNumbers.offset) || codeblockParameters.highlights.default.plainText.some((text2) => line.indexOf(text2) > -1) || codeblockParameters.highlights.default.regularExpressions.some((regExp) => regExp.test(line)))
|
||
classList.push("code-styler-line-highlighted");
|
||
Object.entries(codeblockParameters.highlights.alternative).forEach(([alternativeHighlight, highlightedLines]) => {
|
||
if (highlightedLines.lineNumbers.includes(lineNumber + codeblockParameters.lineNumbers.offset) || highlightedLines.plainText.some((text2) => line.indexOf(text2) > -1) || highlightedLines.regularExpressions.some((regExp) => regExp.test(line)))
|
||
classList.push(`code-styler-line-highlighted-${alternativeHighlight.replace(/\s+/g, "-").toLowerCase()}`);
|
||
});
|
||
if (classList.length === 0)
|
||
classList = ["code-styler-line"];
|
||
return classList;
|
||
}
|
||
|
||
// src/EditingView.ts
|
||
function createCodeblockCodeMirrorExtensions(settings, plugin) {
|
||
const livePreviewCompartment = new import_state.Compartment();
|
||
const ignoreCompartment = new import_state.Compartment();
|
||
const interaction = import_view.ViewPlugin.fromClass(
|
||
class ExamplePlugin {
|
||
constructor() {
|
||
}
|
||
// view: EditorView
|
||
update() {
|
||
}
|
||
// update: ViewUpdate
|
||
destroy() {
|
||
}
|
||
},
|
||
{
|
||
eventHandlers: {
|
||
click: function(event, view) {
|
||
var _a2, _b, _c;
|
||
if (event.target.classList.contains("code-styler-source-link") && event.metaKey === true) {
|
||
const sourcePath = (_c = (_b = (_a2 = view.state.field(import_obsidian5.editorInfoField)) == null ? void 0 : _a2.file) == null ? void 0 : _b.path) != null ? _c : "";
|
||
const destination = event.target.getAttribute("destination");
|
||
if (destination)
|
||
plugin.app.workspace.openLinkText(destination, sourcePath, true);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
);
|
||
const ignoreListener = import_view.EditorView.updateListener.of((update) => {
|
||
const livePreviewExtensions = livePreviewCompartment.get(update.state);
|
||
const toIgnore = isSourceMode(update.state);
|
||
const fileIgnore = isFileIgnored(update.state) && !(Array.isArray(livePreviewExtensions) && livePreviewExtensions.length === 0);
|
||
const fileUnignore = !toIgnore && !isFileIgnored(update.state) && (Array.isArray(livePreviewExtensions) && livePreviewExtensions.length === 0);
|
||
if (isSourceMode(update.startState) !== toIgnore || fileIgnore || fileUnignore) {
|
||
update.view.dispatch({ effects: livePreviewCompartment.reconfigure(toIgnore || fileIgnore ? [] : [headerDecorations, lineDecorations, foldDecorations, hiddenDecorations]) });
|
||
if (!toIgnore && !fileIgnore)
|
||
update.view.dispatch({ effects: foldAll.of({}) });
|
||
}
|
||
});
|
||
const ignoreFileListener = import_view.EditorView.updateListener.of((update) => {
|
||
const ignoreExtensions = ignoreCompartment.get(update.state);
|
||
const fileIgnore = isFileIgnored(update.state) && !(Array.isArray(ignoreExtensions) && ignoreExtensions.length === 0);
|
||
const fileUnignore = !isFileIgnored(update.state) && (Array.isArray(ignoreExtensions) && ignoreExtensions.length === 0);
|
||
if (fileIgnore || fileUnignore)
|
||
update.view.dispatch({ effects: ignoreCompartment.reconfigure(fileIgnore ? [] : inlineDecorations) });
|
||
});
|
||
const settingsState = import_state.StateField.define({
|
||
create() {
|
||
return {
|
||
excludedLanguages: settings.excludedLanguages,
|
||
processedCodeblocksWhitelist: settings.processedCodeblocksWhitelist
|
||
};
|
||
},
|
||
update(value) {
|
||
if (value.processedCodeblocksWhitelist !== settings.processedCodeblocksWhitelist || value.excludedLanguages !== settings.excludedLanguages)
|
||
return {
|
||
excludedLanguages: settings.excludedLanguages,
|
||
processedCodeblocksWhitelist: settings.processedCodeblocksWhitelist
|
||
};
|
||
return value;
|
||
}
|
||
});
|
||
const charWidthState = import_state.StateField.define({
|
||
//TODO (@mayurankv) Improve implementation
|
||
create(state) {
|
||
return state.field(import_obsidian5.editorEditorField).defaultCharacterWidth * 1.105;
|
||
},
|
||
update(value, transaction) {
|
||
return transaction.state.field(import_obsidian5.editorEditorField).defaultCharacterWidth * 1.105;
|
||
}
|
||
});
|
||
const headerDecorations = import_state.StateField.define({
|
||
//TODO (@mayurankv) Update (does this need to be updated in this manner?)
|
||
create(state) {
|
||
return buildHeaderDecorations(state);
|
||
},
|
||
update(value, transaction) {
|
||
return buildHeaderDecorations(transaction.state, (position3) => isFolded(transaction.state, position3));
|
||
},
|
||
provide(field) {
|
||
return import_view.EditorView.decorations.from(field);
|
||
}
|
||
});
|
||
const lineDecorations = import_state.StateField.define({
|
||
//TODO (@mayurankv) Deal with source mode - make apply styling in source mode
|
||
create(state) {
|
||
return buildLineDecorations(state);
|
||
},
|
||
update(value, transaction) {
|
||
return buildLineDecorations(transaction.state);
|
||
},
|
||
provide(field) {
|
||
return import_view.EditorView.decorations.from(field);
|
||
}
|
||
});
|
||
const foldDecorations = import_state.StateField.define({
|
||
create(state) {
|
||
var _a2;
|
||
const builder = new import_state.RangeSetBuilder();
|
||
for (let iter = ((_a2 = state.field(headerDecorations, false)) != null ? _a2 : import_view.Decoration.none).iter(); iter.value !== null; iter.next()) {
|
||
if (!iter.value.spec.widget.codeblockParameters.fold.enabled)
|
||
continue;
|
||
codeblockFoldCallback(iter.from, state, (foldStart, foldEnd) => {
|
||
builder.add(foldStart.from, foldEnd.to, foldDecoration(iter.value.spec.widget.codeblockParameters.language));
|
||
});
|
||
}
|
||
return builder.finish();
|
||
},
|
||
update(value, transaction) {
|
||
value = value.map(transaction.changes).update({ filter: (from, to) => from !== to });
|
||
value = value.update({ add: transaction.effects.filter((effect) => effect.is(fold) || effect.is(unhideFold)).map((effect) => foldRegion(effect.value)) });
|
||
transaction.effects.filter((effect) => effect.is(unfold) || effect.is(hideFold)).forEach((effect) => value = value.update(unfoldRegion(effect.value)));
|
||
transaction.effects.filter((effect) => effect.is(removeFold)).forEach((effect) => value = value.update(removeFoldLanguages(effect.value)));
|
||
return value;
|
||
},
|
||
provide(field) {
|
||
return import_view.EditorView.decorations.from(field);
|
||
}
|
||
});
|
||
const hiddenDecorations = import_state.StateField.define({
|
||
create() {
|
||
return import_view.Decoration.none;
|
||
},
|
||
update(value, transaction) {
|
||
if (transaction.effects.some((effect) => effect.is(foldAll)))
|
||
return import_view.Decoration.none;
|
||
value = value.map(transaction.changes).update({ filter: (from, to) => from !== to });
|
||
value = value.update({ add: transaction.effects.filter((effect) => effect.is(hideFold)).map((effect) => effect.value) });
|
||
transaction.effects.filter((effect) => effect.is(unhideFold)).forEach((effect) => value = value.update(unhideFoldUpdate(effect.value)));
|
||
transaction.effects.filter((effect) => effect.is(removeFold)).forEach((effect) => value = value.update(removeFoldLanguages(effect.value)));
|
||
return value;
|
||
}
|
||
});
|
||
const inlineDecorations = import_state.StateField.define({
|
||
create(state) {
|
||
return buildInlineDecorations(state);
|
||
},
|
||
update(value, transaction) {
|
||
return buildInlineDecorations(transaction.state);
|
||
},
|
||
provide(field) {
|
||
return import_view.EditorView.decorations.from(field);
|
||
}
|
||
});
|
||
function settingsChangeExtender() {
|
||
return import_state.EditorState.transactionExtender.of((transaction) => {
|
||
let addEffects = [];
|
||
const initialSettings = transaction.startState.field(settingsState);
|
||
let readdFoldLanguages = [];
|
||
let removeFoldLanguages2 = [];
|
||
if (initialSettings.processedCodeblocksWhitelist !== settings.processedCodeblocksWhitelist) {
|
||
const codeblockProcessors = Object.keys(MarkdownPreviewRenderer.codeBlockPostProcessors);
|
||
const initialExcludedCodeblocks = codeblockProcessors.filter((lang) => !initialSettings.processedCodeblocksWhitelist.split(",").map((lang2) => lang2.trim()).includes(lang));
|
||
const currentExcludedCodeblocks = codeblockProcessors.filter((lang) => !settings.processedCodeblocksWhitelist.split(",").map((lang2) => lang2.trim()).includes(lang));
|
||
removeFoldLanguages2 = removeFoldLanguages2.concat(setDifference(currentExcludedCodeblocks, initialExcludedCodeblocks));
|
||
readdFoldLanguages = readdFoldLanguages.concat(setDifference(initialExcludedCodeblocks, currentExcludedCodeblocks));
|
||
}
|
||
if (initialSettings.excludedLanguages !== settings.excludedLanguages) {
|
||
const initialExcludedLanguages = initialSettings.excludedLanguages.split(",").map((lang) => lang.trim());
|
||
const currentExcludedLanguages = settings.excludedLanguages.split(",").map((lang) => lang.trim());
|
||
removeFoldLanguages2 = removeFoldLanguages2.concat(setDifference(currentExcludedLanguages, initialExcludedLanguages));
|
||
readdFoldLanguages = readdFoldLanguages.concat(setDifference(initialExcludedLanguages, currentExcludedLanguages));
|
||
}
|
||
if (removeFoldLanguages2.length !== 0)
|
||
addEffects.push(removeFold.of(removeFoldLanguages2));
|
||
if (readdFoldLanguages.length !== 0)
|
||
addEffects = addEffects.concat(convertReaddFold(transaction, readdFoldLanguages));
|
||
return addEffects.length !== 0 ? { effects: addEffects } : null;
|
||
});
|
||
}
|
||
function cursorFoldExtender() {
|
||
return import_state.EditorState.transactionExtender.of((transaction) => {
|
||
var _a2, _b, _c, _d;
|
||
const addEffects = [];
|
||
const foldDecorationsState = (_b = (_a2 = transaction.startState.field(foldDecorations, false)) == null ? void 0 : _a2.map(transaction.changes)) != null ? _b : import_view.Decoration.none;
|
||
const hiddenDecorationsState = (_d = (_c = transaction.startState.field(hiddenDecorations, false)) == null ? void 0 : _c.map(transaction.changes)) != null ? _d : import_view.Decoration.none;
|
||
transaction.newSelection.ranges.forEach((range) => {
|
||
foldDecorationsState.between(range.from, range.to, (foldFrom, foldTo, decorationValue) => {
|
||
if (rangeInteraction(foldFrom, foldTo, range))
|
||
addEffects.push(hideFold.of({ from: foldFrom, to: foldTo, value: decorationValue }));
|
||
});
|
||
for (let iter = hiddenDecorationsState.iter(); iter.value !== null; iter.next()) {
|
||
if (!rangeInteraction(iter.from, iter.to, range))
|
||
addEffects.push(unhideFold.of({ from: iter.from, to: iter.to, value: iter.value }));
|
||
}
|
||
});
|
||
return addEffects.length !== 0 ? { effects: addEffects } : null;
|
||
});
|
||
}
|
||
function documentFoldExtender() {
|
||
return import_state.EditorState.transactionExtender.of((transaction) => {
|
||
let addEffects = [];
|
||
transaction.effects.filter((effect) => effect.is(foldAll)).forEach((effect) => {
|
||
var _a2;
|
||
if (typeof ((_a2 = effect.value) == null ? void 0 : _a2.toFold) !== "undefined")
|
||
addEffects = addEffects.concat(documentFold(transaction.startState, effect.value.toFold));
|
||
else
|
||
addEffects = addEffects.concat(documentFold(transaction.startState));
|
||
});
|
||
return addEffects.length !== 0 ? { effects: addEffects } : null;
|
||
});
|
||
}
|
||
class LineNumberWidget extends import_view.WidgetType {
|
||
constructor(lineNumber, codeblockParameters, maxLineNum, empty3 = false) {
|
||
super();
|
||
this.lineNumber = lineNumber;
|
||
this.codeblockParameters = codeblockParameters;
|
||
this.maxLineNum = maxLineNum;
|
||
this.empty = empty3;
|
||
}
|
||
eq(other) {
|
||
return this.lineNumber === other.lineNumber && this.codeblockParameters.lineNumbers.alwaysEnabled === other.codeblockParameters.lineNumbers.alwaysEnabled && this.codeblockParameters.lineNumbers.alwaysDisabled === other.codeblockParameters.lineNumbers.alwaysDisabled && this.codeblockParameters.lineNumbers.offset === other.codeblockParameters.lineNumbers.offset && this.maxLineNum === other.maxLineNum && this.empty === other.empty;
|
||
}
|
||
toDOM() {
|
||
return createSpan({ attr: { style: this.maxLineNum.toString().length > (this.lineNumber + this.codeblockParameters.lineNumbers.offset).toString().length ? "width: var(--line-number-gutter-width);" : "" }, cls: "code-styler-line-number", text: this.empty ? "" : (this.lineNumber + this.codeblockParameters.lineNumbers.offset).toString() });
|
||
}
|
||
}
|
||
class CommentLinkWidget extends import_view.WidgetType {
|
||
constructor(linkText, sourcePath) {
|
||
super();
|
||
this.linkText = linkText;
|
||
this.sourcePath = sourcePath;
|
||
}
|
||
eq(other) {
|
||
return this.linkText === other.linkText && this.sourcePath === other.sourcePath;
|
||
}
|
||
toDOM() {
|
||
const linkParentElement = createDiv({ attr: { class: "code-styler-comment-link" } });
|
||
import_obsidian5.MarkdownRenderer.render(plugin.app, this.linkText, linkParentElement, this.sourcePath, plugin);
|
||
return linkParentElement;
|
||
}
|
||
}
|
||
class HeaderWidget extends import_view.WidgetType {
|
||
constructor(codeblockParameters, folded, themeSettings, sourcePath, plugin2) {
|
||
super();
|
||
this.codeblockParameters = structuredClone(codeblockParameters);
|
||
this.themeSettings = structuredClone(themeSettings);
|
||
this.sourcePath = sourcePath;
|
||
this.plugin = plugin2;
|
||
this.iconURL = getLanguageIcon(this.codeblockParameters.language, this.plugin.languageIcons);
|
||
this.folded = folded;
|
||
this.hidden = isHeaderHidden(this.codeblockParameters, this.themeSettings, this.iconURL);
|
||
}
|
||
eq(other) {
|
||
return this.codeblockParameters.language === other.codeblockParameters.language && this.codeblockParameters.title === other.codeblockParameters.title && this.codeblockParameters.reference === other.codeblockParameters.reference && this.codeblockParameters.fold.enabled === other.codeblockParameters.fold.enabled && this.codeblockParameters.fold.placeholder === other.codeblockParameters.fold.placeholder && this.themeSettings.header.foldPlaceholder === other.themeSettings.header.foldPlaceholder && this.themeSettings.header.languageIcon.display === other.themeSettings.header.languageIcon.display && this.themeSettings.header.languageTag.display === other.themeSettings.header.languageTag.display && this.folded === other.folded && this.iconURL === other.iconURL;
|
||
}
|
||
toDOM(view) {
|
||
const headerContainer = createHeader(this.codeblockParameters, this.themeSettings, this.sourcePath, this.plugin);
|
||
if (this.codeblockParameters.language !== "")
|
||
headerContainer.classList.add(`language-${this.codeblockParameters.language}`);
|
||
if (this.folded)
|
||
headerContainer.classList.add("code-styler-header-folded");
|
||
headerContainer.onclick = (event) => {
|
||
var _a2, _b;
|
||
if (!((_b = (_a2 = event.target) == null ? void 0 : _a2.classList) == null ? void 0 : _b.contains("internal-link")))
|
||
foldOnClick(view, headerContainer, this.folded, this.codeblockParameters.language);
|
||
};
|
||
return headerContainer;
|
||
}
|
||
}
|
||
class OpenerWidget extends import_view.WidgetType {
|
||
constructor(inlineCodeParameters, plugin2) {
|
||
super();
|
||
this.inlineCodeParameters = inlineCodeParameters;
|
||
this.plugin = plugin2;
|
||
}
|
||
eq(other) {
|
||
return this.inlineCodeParameters.language == other.inlineCodeParameters.language && this.inlineCodeParameters.title == other.inlineCodeParameters.title && this.inlineCodeParameters.icon == other.inlineCodeParameters.icon && getLanguageIcon(this.inlineCodeParameters.language, this.plugin.languageIcons) == getLanguageIcon(other.inlineCodeParameters.language, other.plugin.languageIcons);
|
||
}
|
||
toDOM() {
|
||
return createInlineOpener(this.inlineCodeParameters, this.plugin.languageIcons, ["code-styler-inline-opener", "cm-inline-code"]);
|
||
}
|
||
}
|
||
function buildHeaderDecorations(state, foldValue = (position3, defaultFold) => defaultFold) {
|
||
var _a2, _b, _c;
|
||
const builder = new import_state.RangeSetBuilder();
|
||
const sourcePath = (_c = (_b = (_a2 = state.field(import_obsidian5.editorInfoField)) == null ? void 0 : _a2.file) == null ? void 0 : _b.path) != null ? _c : "";
|
||
let codeblockParameters;
|
||
(0, import_language.syntaxTree)(state).iterate({
|
||
enter: (syntaxNode) => {
|
||
if (syntaxNode.type.name.includes("HyperMD-codeblock-begin")) {
|
||
const startLine = state.doc.lineAt(syntaxNode.from);
|
||
codeblockParameters = parseCodeblockParameters(trimParameterLine(startLine.text.toString()), settings.currentTheme);
|
||
if (!isLanguageIgnored(codeblockParameters.language, settings.excludedLanguages) && !isCodeblockIgnored(codeblockParameters.language, settings.processedCodeblocksWhitelist) && !codeblockParameters.ignore) {
|
||
if (!SPECIAL_LANGUAGES.some((regExp) => new RegExp(regExp).test(codeblockParameters.language)))
|
||
builder.add(startLine.from, startLine.from, import_view.Decoration.widget({ widget: new HeaderWidget(codeblockParameters, foldValue(startLine.from, codeblockParameters.fold.enabled), settings.currentTheme.settings, sourcePath, plugin), block: true, side: -1 }));
|
||
}
|
||
}
|
||
}
|
||
});
|
||
return builder.finish();
|
||
}
|
||
function buildLineDecorations(state) {
|
||
var _a2, _b, _c, _d, _e;
|
||
const builder = new import_state.RangeSetBuilder();
|
||
const sourcePath = (_c = (_b = (_a2 = state.field(import_obsidian5.editorInfoField)) == null ? void 0 : _a2.file) == null ? void 0 : _b.path) != null ? _c : "";
|
||
const sourceMode = isSourceMode(state);
|
||
for (let iter = ((_d = state.field(headerDecorations, false)) != null ? _d : import_view.Decoration.none).iter(); iter.value !== null; iter.next()) {
|
||
const foldStart = state.doc.lineAt(iter.from);
|
||
const startDelimiter = testOpeningLine(foldStart.text.toString());
|
||
const codeblockParameters = iter.value.spec.widget.codeblockParameters;
|
||
const showLineNumbers = settings.currentTheme.settings.codeblock.lineNumbers && !codeblockParameters.lineNumbers.alwaysDisabled || codeblockParameters.lineNumbers.alwaysEnabled;
|
||
let foldEnd = null;
|
||
let maxLineNum = 0;
|
||
codeblockFoldCallback(iter.from, state, (foldStart2, foldEnd2) => {
|
||
maxLineNum = foldEnd2.to - foldStart2.from - 1 + codeblockParameters.lineNumbers.offset;
|
||
});
|
||
const lineNumberMargin = maxLineNum.toString().length > 2 ? maxLineNum.toString().length * state.field(charWidthState) : void 0;
|
||
builder.add(foldStart.from, foldStart.from, import_view.Decoration.line({ attributes: { style: `--line-number-gutter-width: ${lineNumberMargin ? lineNumberMargin + "px" : "calc(var(--line-number-gutter-min-width) - 12px)"};`, class: "code-styler-line" + (["^$"].concat(SPECIAL_LANGUAGES).some((regExp) => new RegExp(regExp).test(codeblockParameters.language)) ? "" : ` language-${codeblockParameters.language}`) } }));
|
||
if (showLineNumbers)
|
||
builder.add(foldStart.from, foldStart.from, import_view.Decoration.widget({ widget: new LineNumberWidget(0, codeblockParameters, maxLineNum, true) }));
|
||
for (let i2 = foldStart.number + 1; i2 <= state.doc.lines; i2++) {
|
||
const line = (_e = state.doc) == null ? void 0 : _e.line(i2);
|
||
if (!line)
|
||
break;
|
||
const lineText = line.text.toString();
|
||
if (testOpeningLine(lineText) === startDelimiter) {
|
||
foldEnd = line;
|
||
break;
|
||
}
|
||
builder.add(line.from, line.from, import_view.Decoration.line({ attributes: { style: `--line-number-gutter-width: ${lineNumberMargin ? lineNumberMargin + "px" : "calc(var(--line-number-gutter-min-width) - 12px)"};`, class: (SPECIAL_LANGUAGES.some((regExp) => new RegExp(regExp).test(iter.value.spec.widget.codeblockParameters.language)) ? "code-styler-line" : getLineClass(codeblockParameters, i2 - foldStart.number, line.text).join(" ")) + (["^$"].concat(SPECIAL_LANGUAGES).some((regExp) => new RegExp(regExp).test(codeblockParameters.language)) ? "" : ` language-${codeblockParameters.language}`) } }));
|
||
if (showLineNumbers)
|
||
builder.add(line.from, line.from, import_view.Decoration.widget({ widget: new LineNumberWidget(i2 - foldStart.number, codeblockParameters, maxLineNum) }));
|
||
if (codeblockParameters.language === "markdown")
|
||
continue;
|
||
convertCommentLinks2(state, line, sourcePath, builder, sourceMode);
|
||
}
|
||
if (foldEnd !== null) {
|
||
builder.add(foldEnd.from, foldEnd.from, import_view.Decoration.line({ attributes: { style: `--line-number-gutter-width: ${lineNumberMargin ? lineNumberMargin + "px" : "calc(var(--line-number-gutter-min-width) - 12px)"};`, class: "code-styler-line" + (["^$"].concat(SPECIAL_LANGUAGES).some((regExp) => new RegExp(regExp).test(codeblockParameters.language)) ? "" : ` language-${codeblockParameters.language}`) } }));
|
||
if (showLineNumbers)
|
||
builder.add(foldEnd.from, foldEnd.from, import_view.Decoration.widget({ widget: new LineNumberWidget(0, codeblockParameters, maxLineNum, true) }));
|
||
}
|
||
}
|
||
return builder.finish();
|
||
}
|
||
function convertCommentLinks2(state, line, sourcePath, builder, sourceMode) {
|
||
(0, import_language.syntaxTree)(state).iterate({
|
||
enter: (syntaxNode) => {
|
||
if (syntaxNode.type.name.includes("comment_hmd-codeblock")) {
|
||
const commentText = state.sliceDoc(syntaxNode.from, syntaxNode.to);
|
||
const linkMatches = [...commentText.matchAll(/(?:\[\[[^\]|\r\n]+?(?:\|[^\]|\r\n]+?)?\]\]|\[.*?\]\(.+\))/g)];
|
||
linkMatches.forEach((linkMatch) => {
|
||
if ((linkMatch == null ? void 0 : linkMatch.index) === void 0)
|
||
return;
|
||
const from = syntaxNode.from + linkMatch.index;
|
||
const to = from + linkMatch[0].length;
|
||
if (sourceMode || state.selection.ranges.some((range) => rangeInteraction(from, to, range))) {
|
||
const mdBreak = linkMatch[0].indexOf("](");
|
||
if (mdBreak === -1) {
|
||
const wikilinkSeparator = linkMatch[0].indexOf("|");
|
||
builder.add(from + 2, to - 2, import_view.Decoration.mark({ class: "cm-hmd-internal-link code-styler-source-link", attributes: { destination: linkMatch[0].slice(2, wikilinkSeparator !== -1 ? wikilinkSeparator : -2) } }));
|
||
} else {
|
||
builder.add(from + 1, from + mdBreak, import_view.Decoration.mark({ class: "cm-link code-styler-source-link", attributes: { destination: linkMatch[0].slice(mdBreak + 2, -1) } }));
|
||
builder.add(from + mdBreak + 2, to - 1, import_view.Decoration.mark({ class: "cm-string cm-url" }));
|
||
}
|
||
} else
|
||
builder.add(from, to, import_view.Decoration.replace({ widget: new CommentLinkWidget(linkMatch[0], sourcePath) }));
|
||
});
|
||
}
|
||
},
|
||
from: line.from,
|
||
to: line.to
|
||
});
|
||
}
|
||
function buildInlineDecorations(state) {
|
||
if (!settings.currentTheme.settings.inline.syntaxHighlight)
|
||
return import_view.Decoration.none;
|
||
const builder = new import_state.RangeSetBuilder();
|
||
const sourceMode = isSourceMode(state);
|
||
(0, import_language.syntaxTree)(state).iterate({
|
||
enter: (syntaxNode) => {
|
||
const ranges = getInlineCodeRanges(state, syntaxNode);
|
||
if (ranges === null)
|
||
return;
|
||
const { parameters, text: text2, section } = ranges;
|
||
if (parameters.value === null)
|
||
addUnstyledInlineDecorations(state, builder, parameters, text2, section, sourceMode);
|
||
else
|
||
addStyledInlineDecorations(state, builder, parameters, text2, section, sourceMode);
|
||
}
|
||
});
|
||
return builder.finish();
|
||
}
|
||
function addStyledInlineDecorations(state, builder, parameters, text2, section, sourceMode) {
|
||
var _a2, _b;
|
||
if (sourceMode || state.selection.ranges.some((range) => rangeInteraction(section.from, section.to, range)))
|
||
builder.add(parameters.from, parameters.to, import_view.Decoration.mark({ class: "code-styler-inline-parameters" }));
|
||
else {
|
||
builder.add(parameters.from, parameters.to, import_view.Decoration.replace({}));
|
||
if (((_a2 = parameters.value) == null ? void 0 : _a2.title) || ((_b = parameters.value) == null ? void 0 : _b.icon) && getLanguageIcon(parameters.value.language, plugin.languageIcons))
|
||
builder.add(parameters.from, parameters.from, import_view.Decoration.replace({ widget: new OpenerWidget(parameters.value, plugin) }));
|
||
}
|
||
modeHighlight({ start: parameters.to, text: text2.value, language: parameters.value.language }, builder);
|
||
}
|
||
function convertReaddFold(transaction, readdLanguages) {
|
||
var _a2;
|
||
const addEffects = [];
|
||
for (let iter = ((_a2 = transaction.state.field(headerDecorations, false)) != null ? _a2 : import_view.Decoration.none).iter(); iter.value !== null; iter.next()) {
|
||
if (!iter.value.spec.widget.codeblockParameters.fold.enabled || !readdLanguages.includes(iter.value.spec.widget.codeblockParameters.language))
|
||
continue;
|
||
codeblockFoldCallback(iter.from, transaction.state, (foldStart, foldEnd) => {
|
||
addEffects.push(fold.of({ from: foldStart.from, to: foldEnd.to, value: { spec: { language: iter.value.spec.widget.codeblockParameters.language } } }));
|
||
});
|
||
}
|
||
return addEffects;
|
||
}
|
||
function isFolded(state, position3) {
|
||
var _a2;
|
||
let folded = false;
|
||
(_a2 = state.field(foldDecorations, false)) == null ? void 0 : _a2.between(position3, position3, () => {
|
||
folded = true;
|
||
});
|
||
return folded;
|
||
}
|
||
function documentFold(state, toFold) {
|
||
var _a2;
|
||
const addEffects = [];
|
||
const reset = typeof toFold === "undefined";
|
||
for (let iter = ((_a2 = state.field(headerDecorations, false)) != null ? _a2 : import_view.Decoration.none).iter(); iter.value !== null; iter.next()) {
|
||
if (iter.value.spec.widget.hidden)
|
||
continue;
|
||
const folded = iter.value.spec.widget.folded;
|
||
const defaultFold = iter.value.spec.widget.codeblockParameters.fold.enabled;
|
||
codeblockFoldCallback(iter.from, state, (foldStart, foldEnd) => {
|
||
if (!reset && toFold && !folded || reset && !folded && defaultFold)
|
||
addEffects.push(fold.of({ from: foldStart.from, to: foldEnd.to, value: { spec: { language: iter.value.spec.widget.codeblockParameters.language } } }));
|
||
else if (!reset && !toFold && folded || reset && folded && !defaultFold)
|
||
addEffects.push(unfold.of({ from: foldStart.from, to: foldEnd.to }));
|
||
});
|
||
}
|
||
return addEffects;
|
||
}
|
||
return [
|
||
interaction,
|
||
ignoreListener,
|
||
ignoreFileListener,
|
||
cursorFoldExtender(),
|
||
documentFoldExtender(),
|
||
settingsChangeExtender(),
|
||
settingsState,
|
||
charWidthState,
|
||
livePreviewCompartment.of([]),
|
||
ignoreCompartment.of([])
|
||
];
|
||
}
|
||
var fold = import_state.StateEffect.define();
|
||
var unfold = import_state.StateEffect.define();
|
||
var hideFold = import_state.StateEffect.define();
|
||
var unhideFold = import_state.StateEffect.define();
|
||
var removeFold = import_state.StateEffect.define();
|
||
var foldAll = import_state.StateEffect.define();
|
||
function codeblockFoldCallback(startPosition, state, foldCallback) {
|
||
const foldStart = state.doc.lineAt(startPosition);
|
||
const startDelimiter = testOpeningLine(foldStart.text.toString());
|
||
let foldEnd = null;
|
||
for (let i2 = foldStart.number + 1; i2 <= state.doc.lines; i2++) {
|
||
const line = state.doc.line(i2);
|
||
const lineText = line.text.toString();
|
||
if (testOpeningLine(lineText) === startDelimiter) {
|
||
foldEnd = line;
|
||
break;
|
||
}
|
||
}
|
||
if (foldEnd !== null)
|
||
foldCallback(foldStart, foldEnd);
|
||
}
|
||
function getInlineCodeRanges(state, syntaxNode) {
|
||
const delimiterSize = getInlineDelimiterSize(syntaxNode);
|
||
if (delimiterSize === null)
|
||
return null;
|
||
const inlineCodeText = state.doc.sliceString(syntaxNode.from, syntaxNode.to);
|
||
const { parameters, text: text2 } = parseInlineCode(inlineCodeText);
|
||
const parametersLength = inlineCodeText.lastIndexOf(text2);
|
||
return { parameters: { from: syntaxNode.from, to: syntaxNode.from + parametersLength, value: parameters }, text: { from: syntaxNode.from + parametersLength + 1, to: syntaxNode.to, value: text2 }, section: { from: syntaxNode.from - delimiterSize, to: syntaxNode.to + delimiterSize } };
|
||
}
|
||
function getInlineDelimiterSize(syntaxNode) {
|
||
var _a2;
|
||
const properties = new Set((_a2 = syntaxNode.node.type.prop(import_language.tokenClassNodeProp)) == null ? void 0 : _a2.split(" "));
|
||
if (!(properties.has("inline-code") && !properties.has("formatting")))
|
||
return null;
|
||
const previousSibling = syntaxNode.node.prevSibling;
|
||
if (!previousSibling)
|
||
return null;
|
||
return previousSibling.to - previousSibling.from;
|
||
}
|
||
function addUnstyledInlineDecorations(state, builder, parameters, text2, section, sourceMode) {
|
||
if (text2.value) {
|
||
if (!state.selection.ranges.some((range) => range.to >= section.from && range.from <= section.to) && !sourceMode)
|
||
builder.add(parameters.from, parameters.to, import_view.Decoration.replace({}));
|
||
}
|
||
}
|
||
function modeHighlight({ start, text: text2, language }, builder) {
|
||
var _a2;
|
||
const mode = window.CodeMirror.getMode(window.CodeMirror.defaults, (_a2 = window.CodeMirror.findModeByName(language)) == null ? void 0 : _a2.mime);
|
||
const state = window.CodeMirror.startState(mode);
|
||
if (mode == null ? void 0 : mode.token) {
|
||
const stream = new window.CodeMirror.StringStream(text2);
|
||
while (!stream.eol()) {
|
||
const style2 = mode.token(stream, state);
|
||
if (style2)
|
||
builder.add(start + stream.start, start + stream.pos, import_view.Decoration.mark({ class: `cm-${style2}` }));
|
||
stream.start = stream.pos;
|
||
}
|
||
}
|
||
}
|
||
function editingDocumentFold(view, toFold) {
|
||
view.dispatch({ effects: foldAll.of(typeof toFold !== "undefined" ? { toFold } : {}) });
|
||
view.requestMeasure();
|
||
}
|
||
function foldOnClick(view, target, folded, language) {
|
||
codeblockFoldCallback(view.posAtDOM(target), view.state, (foldStart, foldEnd) => {
|
||
view.dispatch({ effects: foldLines(!folded, { from: foldStart.from, to: foldEnd.to, value: { spec: { language } } }) });
|
||
view.requestMeasure();
|
||
});
|
||
}
|
||
function foldLines(toFold, foldInfo) {
|
||
return toFold ? fold.of(foldInfo) : unfold.of({ from: foldInfo.from, to: foldInfo.to });
|
||
}
|
||
function foldRegion({ from: foldFrom, to: foldTo, value: { spec: { language } } }) {
|
||
return foldDecoration(language).range(foldFrom, foldTo);
|
||
}
|
||
function unfoldRegion({ from: foldFrom, to: foldTo }) {
|
||
return { filter: (from, to) => to <= foldFrom || from >= foldTo, filterFrom: foldFrom, filterTo: foldTo };
|
||
}
|
||
function removeFoldLanguages(languages) {
|
||
return { filter: (from, to, value) => {
|
||
var _a2;
|
||
return !languages.includes((_a2 = value == null ? void 0 : value.spec) == null ? void 0 : _a2.language);
|
||
} };
|
||
}
|
||
function unhideFoldUpdate(range) {
|
||
return { filterFrom: range.from, filterTo: range.to, filter: (from, to) => !(from === range.from && to === range.to) };
|
||
}
|
||
function foldDecoration(language) {
|
||
return import_view.Decoration.replace({ block: true, language });
|
||
}
|
||
function rangeInteraction(from, to, range) {
|
||
return from <= range.head && range.head <= to || from <= range.anchor && range.anchor <= to;
|
||
}
|
||
function isFileIgnored(state) {
|
||
var _a2, _b, _c, _d, _e;
|
||
const filePath = (_b = (_a2 = state.field(import_obsidian5.editorInfoField)) == null ? void 0 : _a2.file) == null ? void 0 : _b.path;
|
||
if (typeof filePath !== "undefined")
|
||
return ((_e = (_d = (_c = this.app.metadataCache.getCache(filePath)) == null ? void 0 : _c.frontmatter) == null ? void 0 : _d["code-styler-ignore"]) == null ? void 0 : _e.toString()) === "true";
|
||
return false;
|
||
}
|
||
function isSourceMode(state) {
|
||
return !state.field(import_obsidian5.editorLivePreviewField);
|
||
}
|
||
function setDifference(array1, array2) {
|
||
return array1.filter((element3) => !array2.includes(element3));
|
||
}
|
||
|
||
// src/ReadingView.ts
|
||
var import_obsidian6 = require("obsidian");
|
||
|
||
// node_modules/unist-util-is/lib/index.js
|
||
var convert = (
|
||
// Note: overloads in JSDoc can’t yet use different `@template`s.
|
||
/**
|
||
* @type {(
|
||
* (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &
|
||
* (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &
|
||
* (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &
|
||
* ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &
|
||
* ((test?: Test) => Check)
|
||
* )}
|
||
*/
|
||
/**
|
||
* @param {Test} [test]
|
||
* @returns {Check}
|
||
*/
|
||
function(test) {
|
||
if (test === null || test === void 0) {
|
||
return ok;
|
||
}
|
||
if (typeof test === "function") {
|
||
return castFactory(test);
|
||
}
|
||
if (typeof test === "object") {
|
||
return Array.isArray(test) ? anyFactory(test) : propsFactory(test);
|
||
}
|
||
if (typeof test === "string") {
|
||
return typeFactory(test);
|
||
}
|
||
throw new Error("Expected function, string, or object as test");
|
||
}
|
||
);
|
||
function anyFactory(tests) {
|
||
const checks2 = [];
|
||
let index2 = -1;
|
||
while (++index2 < tests.length) {
|
||
checks2[index2] = convert(tests[index2]);
|
||
}
|
||
return castFactory(any);
|
||
function any(...parameters) {
|
||
let index3 = -1;
|
||
while (++index3 < checks2.length) {
|
||
if (checks2[index3].apply(this, parameters))
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
}
|
||
function propsFactory(check) {
|
||
const checkAsRecord = (
|
||
/** @type {Record<string, unknown>} */
|
||
check
|
||
);
|
||
return castFactory(all3);
|
||
function all3(node) {
|
||
const nodeAsRecord = (
|
||
/** @type {Record<string, unknown>} */
|
||
/** @type {unknown} */
|
||
node
|
||
);
|
||
let key2;
|
||
for (key2 in check) {
|
||
if (nodeAsRecord[key2] !== checkAsRecord[key2])
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
function typeFactory(check) {
|
||
return castFactory(type);
|
||
function type(node) {
|
||
return node && node.type === check;
|
||
}
|
||
}
|
||
function castFactory(testFunction) {
|
||
return check;
|
||
function check(value, index2, parent) {
|
||
return Boolean(
|
||
looksLikeANode(value) && testFunction.call(
|
||
this,
|
||
value,
|
||
typeof index2 === "number" ? index2 : void 0,
|
||
parent || void 0
|
||
)
|
||
);
|
||
}
|
||
}
|
||
function ok() {
|
||
return true;
|
||
}
|
||
function looksLikeANode(value) {
|
||
return value !== null && typeof value === "object" && "type" in value;
|
||
}
|
||
|
||
// node_modules/unist-util-visit-parents/lib/color.js
|
||
function color(d2) {
|
||
return d2;
|
||
}
|
||
|
||
// node_modules/unist-util-visit-parents/lib/index.js
|
||
var empty = [];
|
||
var CONTINUE = true;
|
||
var EXIT = false;
|
||
var SKIP = "skip";
|
||
function visitParents(tree, test, visitor, reverse) {
|
||
let check;
|
||
if (typeof test === "function" && typeof visitor !== "function") {
|
||
reverse = visitor;
|
||
visitor = test;
|
||
} else {
|
||
check = test;
|
||
}
|
||
const is2 = convert(check);
|
||
const step = reverse ? -1 : 1;
|
||
factory(tree, void 0, [])();
|
||
function factory(node, index2, parents) {
|
||
const value = (
|
||
/** @type {Record<string, unknown>} */
|
||
node && typeof node === "object" ? node : {}
|
||
);
|
||
if (typeof value.type === "string") {
|
||
const name = (
|
||
// `hast`
|
||
typeof value.tagName === "string" ? value.tagName : (
|
||
// `xast`
|
||
typeof value.name === "string" ? value.name : void 0
|
||
)
|
||
);
|
||
Object.defineProperty(visit, "name", {
|
||
value: "node (" + color(node.type + (name ? "<" + name + ">" : "")) + ")"
|
||
});
|
||
}
|
||
return visit;
|
||
function visit() {
|
||
let result = empty;
|
||
let subresult;
|
||
let offset;
|
||
let grandparents;
|
||
if (!test || is2(node, index2, parents[parents.length - 1] || void 0)) {
|
||
result = toResult(visitor(node, parents));
|
||
if (result[0] === EXIT) {
|
||
return result;
|
||
}
|
||
}
|
||
if ("children" in node && node.children) {
|
||
const nodeAsParent = (
|
||
/** @type {UnistParent} */
|
||
node
|
||
);
|
||
if (nodeAsParent.children && result[0] !== SKIP) {
|
||
offset = (reverse ? nodeAsParent.children.length : -1) + step;
|
||
grandparents = parents.concat(nodeAsParent);
|
||
while (offset > -1 && offset < nodeAsParent.children.length) {
|
||
const child = nodeAsParent.children[offset];
|
||
subresult = factory(child, offset, grandparents)();
|
||
if (subresult[0] === EXIT) {
|
||
return subresult;
|
||
}
|
||
offset = typeof subresult[1] === "number" ? subresult[1] : offset + step;
|
||
}
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
}
|
||
}
|
||
function toResult(value) {
|
||
if (Array.isArray(value)) {
|
||
return value;
|
||
}
|
||
if (typeof value === "number") {
|
||
return [CONTINUE, value];
|
||
}
|
||
return value === null || value === void 0 ? empty : [value];
|
||
}
|
||
|
||
// node_modules/devlop/lib/default.js
|
||
function ok2() {
|
||
}
|
||
|
||
// node_modules/property-information/lib/util/schema.js
|
||
var Schema = class {
|
||
/**
|
||
* @constructor
|
||
* @param {Properties} property
|
||
* @param {Normal} normal
|
||
* @param {string} [space]
|
||
*/
|
||
constructor(property, normal, space) {
|
||
this.property = property;
|
||
this.normal = normal;
|
||
if (space) {
|
||
this.space = space;
|
||
}
|
||
}
|
||
};
|
||
Schema.prototype.property = {};
|
||
Schema.prototype.normal = {};
|
||
Schema.prototype.space = null;
|
||
|
||
// node_modules/property-information/lib/util/merge.js
|
||
function merge(definitions, space) {
|
||
const property = {};
|
||
const normal = {};
|
||
let index2 = -1;
|
||
while (++index2 < definitions.length) {
|
||
Object.assign(property, definitions[index2].property);
|
||
Object.assign(normal, definitions[index2].normal);
|
||
}
|
||
return new Schema(property, normal, space);
|
||
}
|
||
|
||
// node_modules/property-information/lib/normalize.js
|
||
function normalize(value) {
|
||
return value.toLowerCase();
|
||
}
|
||
|
||
// node_modules/property-information/lib/util/info.js
|
||
var Info = class {
|
||
/**
|
||
* @constructor
|
||
* @param {string} property
|
||
* @param {string} attribute
|
||
*/
|
||
constructor(property, attribute) {
|
||
this.property = property;
|
||
this.attribute = attribute;
|
||
}
|
||
};
|
||
Info.prototype.space = null;
|
||
Info.prototype.boolean = false;
|
||
Info.prototype.booleanish = false;
|
||
Info.prototype.overloadedBoolean = false;
|
||
Info.prototype.number = false;
|
||
Info.prototype.commaSeparated = false;
|
||
Info.prototype.spaceSeparated = false;
|
||
Info.prototype.commaOrSpaceSeparated = false;
|
||
Info.prototype.mustUseProperty = false;
|
||
Info.prototype.defined = false;
|
||
|
||
// node_modules/property-information/lib/util/types.js
|
||
var types_exports = {};
|
||
__export(types_exports, {
|
||
boolean: () => boolean,
|
||
booleanish: () => booleanish,
|
||
commaOrSpaceSeparated: () => commaOrSpaceSeparated,
|
||
commaSeparated: () => commaSeparated,
|
||
number: () => number,
|
||
overloadedBoolean: () => overloadedBoolean,
|
||
spaceSeparated: () => spaceSeparated
|
||
});
|
||
var powers = 0;
|
||
var boolean = increment();
|
||
var booleanish = increment();
|
||
var overloadedBoolean = increment();
|
||
var number = increment();
|
||
var spaceSeparated = increment();
|
||
var commaSeparated = increment();
|
||
var commaOrSpaceSeparated = increment();
|
||
function increment() {
|
||
return 2 ** ++powers;
|
||
}
|
||
|
||
// node_modules/property-information/lib/util/defined-info.js
|
||
var checks = Object.keys(types_exports);
|
||
var DefinedInfo = class extends Info {
|
||
/**
|
||
* @constructor
|
||
* @param {string} property
|
||
* @param {string} attribute
|
||
* @param {number|null} [mask]
|
||
* @param {string} [space]
|
||
*/
|
||
constructor(property, attribute, mask, space) {
|
||
let index2 = -1;
|
||
super(property, attribute);
|
||
mark(this, "space", space);
|
||
if (typeof mask === "number") {
|
||
while (++index2 < checks.length) {
|
||
const check = checks[index2];
|
||
mark(this, checks[index2], (mask & types_exports[check]) === types_exports[check]);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
DefinedInfo.prototype.defined = true;
|
||
function mark(values, key2, value) {
|
||
if (value) {
|
||
values[key2] = value;
|
||
}
|
||
}
|
||
|
||
// node_modules/property-information/lib/util/create.js
|
||
var own = {}.hasOwnProperty;
|
||
function create(definition) {
|
||
const property = {};
|
||
const normal = {};
|
||
let prop;
|
||
for (prop in definition.properties) {
|
||
if (own.call(definition.properties, prop)) {
|
||
const value = definition.properties[prop];
|
||
const info = new DefinedInfo(
|
||
prop,
|
||
definition.transform(definition.attributes || {}, prop),
|
||
value,
|
||
definition.space
|
||
);
|
||
if (definition.mustUseProperty && definition.mustUseProperty.includes(prop)) {
|
||
info.mustUseProperty = true;
|
||
}
|
||
property[prop] = info;
|
||
normal[normalize(prop)] = prop;
|
||
normal[normalize(info.attribute)] = prop;
|
||
}
|
||
}
|
||
return new Schema(property, normal, definition.space);
|
||
}
|
||
|
||
// node_modules/property-information/lib/xlink.js
|
||
var xlink = create({
|
||
space: "xlink",
|
||
transform(_2, prop) {
|
||
return "xlink:" + prop.slice(5).toLowerCase();
|
||
},
|
||
properties: {
|
||
xLinkActuate: null,
|
||
xLinkArcRole: null,
|
||
xLinkHref: null,
|
||
xLinkRole: null,
|
||
xLinkShow: null,
|
||
xLinkTitle: null,
|
||
xLinkType: null
|
||
}
|
||
});
|
||
|
||
// node_modules/property-information/lib/xml.js
|
||
var xml = create({
|
||
space: "xml",
|
||
transform(_2, prop) {
|
||
return "xml:" + prop.slice(3).toLowerCase();
|
||
},
|
||
properties: { xmlLang: null, xmlBase: null, xmlSpace: null }
|
||
});
|
||
|
||
// node_modules/property-information/lib/util/case-sensitive-transform.js
|
||
function caseSensitiveTransform(attributes, attribute) {
|
||
return attribute in attributes ? attributes[attribute] : attribute;
|
||
}
|
||
|
||
// node_modules/property-information/lib/util/case-insensitive-transform.js
|
||
function caseInsensitiveTransform(attributes, property) {
|
||
return caseSensitiveTransform(attributes, property.toLowerCase());
|
||
}
|
||
|
||
// node_modules/property-information/lib/xmlns.js
|
||
var xmlns = create({
|
||
space: "xmlns",
|
||
attributes: { xmlnsxlink: "xmlns:xlink" },
|
||
transform: caseInsensitiveTransform,
|
||
properties: { xmlns: null, xmlnsXLink: null }
|
||
});
|
||
|
||
// node_modules/property-information/lib/aria.js
|
||
var aria = create({
|
||
transform(_2, prop) {
|
||
return prop === "role" ? prop : "aria-" + prop.slice(4).toLowerCase();
|
||
},
|
||
properties: {
|
||
ariaActiveDescendant: null,
|
||
ariaAtomic: booleanish,
|
||
ariaAutoComplete: null,
|
||
ariaBusy: booleanish,
|
||
ariaChecked: booleanish,
|
||
ariaColCount: number,
|
||
ariaColIndex: number,
|
||
ariaColSpan: number,
|
||
ariaControls: spaceSeparated,
|
||
ariaCurrent: null,
|
||
ariaDescribedBy: spaceSeparated,
|
||
ariaDetails: null,
|
||
ariaDisabled: booleanish,
|
||
ariaDropEffect: spaceSeparated,
|
||
ariaErrorMessage: null,
|
||
ariaExpanded: booleanish,
|
||
ariaFlowTo: spaceSeparated,
|
||
ariaGrabbed: booleanish,
|
||
ariaHasPopup: null,
|
||
ariaHidden: booleanish,
|
||
ariaInvalid: null,
|
||
ariaKeyShortcuts: null,
|
||
ariaLabel: null,
|
||
ariaLabelledBy: spaceSeparated,
|
||
ariaLevel: number,
|
||
ariaLive: null,
|
||
ariaModal: booleanish,
|
||
ariaMultiLine: booleanish,
|
||
ariaMultiSelectable: booleanish,
|
||
ariaOrientation: null,
|
||
ariaOwns: spaceSeparated,
|
||
ariaPlaceholder: null,
|
||
ariaPosInSet: number,
|
||
ariaPressed: booleanish,
|
||
ariaReadOnly: booleanish,
|
||
ariaRelevant: null,
|
||
ariaRequired: booleanish,
|
||
ariaRoleDescription: spaceSeparated,
|
||
ariaRowCount: number,
|
||
ariaRowIndex: number,
|
||
ariaRowSpan: number,
|
||
ariaSelected: booleanish,
|
||
ariaSetSize: number,
|
||
ariaSort: null,
|
||
ariaValueMax: number,
|
||
ariaValueMin: number,
|
||
ariaValueNow: number,
|
||
ariaValueText: null,
|
||
role: null
|
||
}
|
||
});
|
||
|
||
// node_modules/property-information/lib/html.js
|
||
var html = create({
|
||
space: "html",
|
||
attributes: {
|
||
acceptcharset: "accept-charset",
|
||
classname: "class",
|
||
htmlfor: "for",
|
||
httpequiv: "http-equiv"
|
||
},
|
||
transform: caseInsensitiveTransform,
|
||
mustUseProperty: ["checked", "multiple", "muted", "selected"],
|
||
properties: {
|
||
// Standard Properties.
|
||
abbr: null,
|
||
accept: commaSeparated,
|
||
acceptCharset: spaceSeparated,
|
||
accessKey: spaceSeparated,
|
||
action: null,
|
||
allow: null,
|
||
allowFullScreen: boolean,
|
||
allowPaymentRequest: boolean,
|
||
allowUserMedia: boolean,
|
||
alt: null,
|
||
as: null,
|
||
async: boolean,
|
||
autoCapitalize: null,
|
||
autoComplete: spaceSeparated,
|
||
autoFocus: boolean,
|
||
autoPlay: boolean,
|
||
blocking: spaceSeparated,
|
||
capture: boolean,
|
||
charSet: null,
|
||
checked: boolean,
|
||
cite: null,
|
||
className: spaceSeparated,
|
||
cols: number,
|
||
colSpan: null,
|
||
content: null,
|
||
contentEditable: booleanish,
|
||
controls: boolean,
|
||
controlsList: spaceSeparated,
|
||
coords: number | commaSeparated,
|
||
crossOrigin: null,
|
||
data: null,
|
||
dateTime: null,
|
||
decoding: null,
|
||
default: boolean,
|
||
defer: boolean,
|
||
dir: null,
|
||
dirName: null,
|
||
disabled: boolean,
|
||
download: overloadedBoolean,
|
||
draggable: booleanish,
|
||
encType: null,
|
||
enterKeyHint: null,
|
||
fetchPriority: null,
|
||
form: null,
|
||
formAction: null,
|
||
formEncType: null,
|
||
formMethod: null,
|
||
formNoValidate: boolean,
|
||
formTarget: null,
|
||
headers: spaceSeparated,
|
||
height: number,
|
||
hidden: boolean,
|
||
high: number,
|
||
href: null,
|
||
hrefLang: null,
|
||
htmlFor: spaceSeparated,
|
||
httpEquiv: spaceSeparated,
|
||
id: null,
|
||
imageSizes: null,
|
||
imageSrcSet: null,
|
||
inert: boolean,
|
||
inputMode: null,
|
||
integrity: null,
|
||
is: null,
|
||
isMap: boolean,
|
||
itemId: null,
|
||
itemProp: spaceSeparated,
|
||
itemRef: spaceSeparated,
|
||
itemScope: boolean,
|
||
itemType: spaceSeparated,
|
||
kind: null,
|
||
label: null,
|
||
lang: null,
|
||
language: null,
|
||
list: null,
|
||
loading: null,
|
||
loop: boolean,
|
||
low: number,
|
||
manifest: null,
|
||
max: null,
|
||
maxLength: number,
|
||
media: null,
|
||
method: null,
|
||
min: null,
|
||
minLength: number,
|
||
multiple: boolean,
|
||
muted: boolean,
|
||
name: null,
|
||
nonce: null,
|
||
noModule: boolean,
|
||
noValidate: boolean,
|
||
onAbort: null,
|
||
onAfterPrint: null,
|
||
onAuxClick: null,
|
||
onBeforeMatch: null,
|
||
onBeforePrint: null,
|
||
onBeforeToggle: null,
|
||
onBeforeUnload: null,
|
||
onBlur: null,
|
||
onCancel: null,
|
||
onCanPlay: null,
|
||
onCanPlayThrough: null,
|
||
onChange: null,
|
||
onClick: null,
|
||
onClose: null,
|
||
onContextLost: null,
|
||
onContextMenu: null,
|
||
onContextRestored: null,
|
||
onCopy: null,
|
||
onCueChange: null,
|
||
onCut: null,
|
||
onDblClick: null,
|
||
onDrag: null,
|
||
onDragEnd: null,
|
||
onDragEnter: null,
|
||
onDragExit: null,
|
||
onDragLeave: null,
|
||
onDragOver: null,
|
||
onDragStart: null,
|
||
onDrop: null,
|
||
onDurationChange: null,
|
||
onEmptied: null,
|
||
onEnded: null,
|
||
onError: null,
|
||
onFocus: null,
|
||
onFormData: null,
|
||
onHashChange: null,
|
||
onInput: null,
|
||
onInvalid: null,
|
||
onKeyDown: null,
|
||
onKeyPress: null,
|
||
onKeyUp: null,
|
||
onLanguageChange: null,
|
||
onLoad: null,
|
||
onLoadedData: null,
|
||
onLoadedMetadata: null,
|
||
onLoadEnd: null,
|
||
onLoadStart: null,
|
||
onMessage: null,
|
||
onMessageError: null,
|
||
onMouseDown: null,
|
||
onMouseEnter: null,
|
||
onMouseLeave: null,
|
||
onMouseMove: null,
|
||
onMouseOut: null,
|
||
onMouseOver: null,
|
||
onMouseUp: null,
|
||
onOffline: null,
|
||
onOnline: null,
|
||
onPageHide: null,
|
||
onPageShow: null,
|
||
onPaste: null,
|
||
onPause: null,
|
||
onPlay: null,
|
||
onPlaying: null,
|
||
onPopState: null,
|
||
onProgress: null,
|
||
onRateChange: null,
|
||
onRejectionHandled: null,
|
||
onReset: null,
|
||
onResize: null,
|
||
onScroll: null,
|
||
onScrollEnd: null,
|
||
onSecurityPolicyViolation: null,
|
||
onSeeked: null,
|
||
onSeeking: null,
|
||
onSelect: null,
|
||
onSlotChange: null,
|
||
onStalled: null,
|
||
onStorage: null,
|
||
onSubmit: null,
|
||
onSuspend: null,
|
||
onTimeUpdate: null,
|
||
onToggle: null,
|
||
onUnhandledRejection: null,
|
||
onUnload: null,
|
||
onVolumeChange: null,
|
||
onWaiting: null,
|
||
onWheel: null,
|
||
open: boolean,
|
||
optimum: number,
|
||
pattern: null,
|
||
ping: spaceSeparated,
|
||
placeholder: null,
|
||
playsInline: boolean,
|
||
popover: null,
|
||
popoverTarget: null,
|
||
popoverTargetAction: null,
|
||
poster: null,
|
||
preload: null,
|
||
readOnly: boolean,
|
||
referrerPolicy: null,
|
||
rel: spaceSeparated,
|
||
required: boolean,
|
||
reversed: boolean,
|
||
rows: number,
|
||
rowSpan: number,
|
||
sandbox: spaceSeparated,
|
||
scope: null,
|
||
scoped: boolean,
|
||
seamless: boolean,
|
||
selected: boolean,
|
||
shadowRootDelegatesFocus: boolean,
|
||
shadowRootMode: null,
|
||
shape: null,
|
||
size: number,
|
||
sizes: null,
|
||
slot: null,
|
||
span: number,
|
||
spellCheck: booleanish,
|
||
src: null,
|
||
srcDoc: null,
|
||
srcLang: null,
|
||
srcSet: null,
|
||
start: number,
|
||
step: null,
|
||
style: null,
|
||
tabIndex: number,
|
||
target: null,
|
||
title: null,
|
||
translate: null,
|
||
type: null,
|
||
typeMustMatch: boolean,
|
||
useMap: null,
|
||
value: booleanish,
|
||
width: number,
|
||
wrap: null,
|
||
// Legacy.
|
||
// See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis
|
||
align: null,
|
||
// Several. Use CSS `text-align` instead,
|
||
aLink: null,
|
||
// `<body>`. Use CSS `a:active {color}` instead
|
||
archive: spaceSeparated,
|
||
// `<object>`. List of URIs to archives
|
||
axis: null,
|
||
// `<td>` and `<th>`. Use `scope` on `<th>`
|
||
background: null,
|
||
// `<body>`. Use CSS `background-image` instead
|
||
bgColor: null,
|
||
// `<body>` and table elements. Use CSS `background-color` instead
|
||
border: number,
|
||
// `<table>`. Use CSS `border-width` instead,
|
||
borderColor: null,
|
||
// `<table>`. Use CSS `border-color` instead,
|
||
bottomMargin: number,
|
||
// `<body>`
|
||
cellPadding: null,
|
||
// `<table>`
|
||
cellSpacing: null,
|
||
// `<table>`
|
||
char: null,
|
||
// Several table elements. When `align=char`, sets the character to align on
|
||
charOff: null,
|
||
// Several table elements. When `char`, offsets the alignment
|
||
classId: null,
|
||
// `<object>`
|
||
clear: null,
|
||
// `<br>`. Use CSS `clear` instead
|
||
code: null,
|
||
// `<object>`
|
||
codeBase: null,
|
||
// `<object>`
|
||
codeType: null,
|
||
// `<object>`
|
||
color: null,
|
||
// `<font>` and `<hr>`. Use CSS instead
|
||
compact: boolean,
|
||
// Lists. Use CSS to reduce space between items instead
|
||
declare: boolean,
|
||
// `<object>`
|
||
event: null,
|
||
// `<script>`
|
||
face: null,
|
||
// `<font>`. Use CSS instead
|
||
frame: null,
|
||
// `<table>`
|
||
frameBorder: null,
|
||
// `<iframe>`. Use CSS `border` instead
|
||
hSpace: number,
|
||
// `<img>` and `<object>`
|
||
leftMargin: number,
|
||
// `<body>`
|
||
link: null,
|
||
// `<body>`. Use CSS `a:link {color: *}` instead
|
||
longDesc: null,
|
||
// `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`
|
||
lowSrc: null,
|
||
// `<img>`. Use a `<picture>`
|
||
marginHeight: number,
|
||
// `<body>`
|
||
marginWidth: number,
|
||
// `<body>`
|
||
noResize: boolean,
|
||
// `<frame>`
|
||
noHref: boolean,
|
||
// `<area>`. Use no href instead of an explicit `nohref`
|
||
noShade: boolean,
|
||
// `<hr>`. Use background-color and height instead of borders
|
||
noWrap: boolean,
|
||
// `<td>` and `<th>`
|
||
object: null,
|
||
// `<applet>`
|
||
profile: null,
|
||
// `<head>`
|
||
prompt: null,
|
||
// `<isindex>`
|
||
rev: null,
|
||
// `<link>`
|
||
rightMargin: number,
|
||
// `<body>`
|
||
rules: null,
|
||
// `<table>`
|
||
scheme: null,
|
||
// `<meta>`
|
||
scrolling: booleanish,
|
||
// `<frame>`. Use overflow in the child context
|
||
standby: null,
|
||
// `<object>`
|
||
summary: null,
|
||
// `<table>`
|
||
text: null,
|
||
// `<body>`. Use CSS `color` instead
|
||
topMargin: number,
|
||
// `<body>`
|
||
valueType: null,
|
||
// `<param>`
|
||
version: null,
|
||
// `<html>`. Use a doctype.
|
||
vAlign: null,
|
||
// Several. Use CSS `vertical-align` instead
|
||
vLink: null,
|
||
// `<body>`. Use CSS `a:visited {color}` instead
|
||
vSpace: number,
|
||
// `<img>` and `<object>`
|
||
// Non-standard Properties.
|
||
allowTransparency: null,
|
||
autoCorrect: null,
|
||
autoSave: null,
|
||
disablePictureInPicture: boolean,
|
||
disableRemotePlayback: boolean,
|
||
prefix: null,
|
||
property: null,
|
||
results: number,
|
||
security: null,
|
||
unselectable: null
|
||
}
|
||
});
|
||
|
||
// node_modules/property-information/lib/svg.js
|
||
var svg = create({
|
||
space: "svg",
|
||
attributes: {
|
||
accentHeight: "accent-height",
|
||
alignmentBaseline: "alignment-baseline",
|
||
arabicForm: "arabic-form",
|
||
baselineShift: "baseline-shift",
|
||
capHeight: "cap-height",
|
||
className: "class",
|
||
clipPath: "clip-path",
|
||
clipRule: "clip-rule",
|
||
colorInterpolation: "color-interpolation",
|
||
colorInterpolationFilters: "color-interpolation-filters",
|
||
colorProfile: "color-profile",
|
||
colorRendering: "color-rendering",
|
||
crossOrigin: "crossorigin",
|
||
dataType: "datatype",
|
||
dominantBaseline: "dominant-baseline",
|
||
enableBackground: "enable-background",
|
||
fillOpacity: "fill-opacity",
|
||
fillRule: "fill-rule",
|
||
floodColor: "flood-color",
|
||
floodOpacity: "flood-opacity",
|
||
fontFamily: "font-family",
|
||
fontSize: "font-size",
|
||
fontSizeAdjust: "font-size-adjust",
|
||
fontStretch: "font-stretch",
|
||
fontStyle: "font-style",
|
||
fontVariant: "font-variant",
|
||
fontWeight: "font-weight",
|
||
glyphName: "glyph-name",
|
||
glyphOrientationHorizontal: "glyph-orientation-horizontal",
|
||
glyphOrientationVertical: "glyph-orientation-vertical",
|
||
hrefLang: "hreflang",
|
||
horizAdvX: "horiz-adv-x",
|
||
horizOriginX: "horiz-origin-x",
|
||
horizOriginY: "horiz-origin-y",
|
||
imageRendering: "image-rendering",
|
||
letterSpacing: "letter-spacing",
|
||
lightingColor: "lighting-color",
|
||
markerEnd: "marker-end",
|
||
markerMid: "marker-mid",
|
||
markerStart: "marker-start",
|
||
navDown: "nav-down",
|
||
navDownLeft: "nav-down-left",
|
||
navDownRight: "nav-down-right",
|
||
navLeft: "nav-left",
|
||
navNext: "nav-next",
|
||
navPrev: "nav-prev",
|
||
navRight: "nav-right",
|
||
navUp: "nav-up",
|
||
navUpLeft: "nav-up-left",
|
||
navUpRight: "nav-up-right",
|
||
onAbort: "onabort",
|
||
onActivate: "onactivate",
|
||
onAfterPrint: "onafterprint",
|
||
onBeforePrint: "onbeforeprint",
|
||
onBegin: "onbegin",
|
||
onCancel: "oncancel",
|
||
onCanPlay: "oncanplay",
|
||
onCanPlayThrough: "oncanplaythrough",
|
||
onChange: "onchange",
|
||
onClick: "onclick",
|
||
onClose: "onclose",
|
||
onCopy: "oncopy",
|
||
onCueChange: "oncuechange",
|
||
onCut: "oncut",
|
||
onDblClick: "ondblclick",
|
||
onDrag: "ondrag",
|
||
onDragEnd: "ondragend",
|
||
onDragEnter: "ondragenter",
|
||
onDragExit: "ondragexit",
|
||
onDragLeave: "ondragleave",
|
||
onDragOver: "ondragover",
|
||
onDragStart: "ondragstart",
|
||
onDrop: "ondrop",
|
||
onDurationChange: "ondurationchange",
|
||
onEmptied: "onemptied",
|
||
onEnd: "onend",
|
||
onEnded: "onended",
|
||
onError: "onerror",
|
||
onFocus: "onfocus",
|
||
onFocusIn: "onfocusin",
|
||
onFocusOut: "onfocusout",
|
||
onHashChange: "onhashchange",
|
||
onInput: "oninput",
|
||
onInvalid: "oninvalid",
|
||
onKeyDown: "onkeydown",
|
||
onKeyPress: "onkeypress",
|
||
onKeyUp: "onkeyup",
|
||
onLoad: "onload",
|
||
onLoadedData: "onloadeddata",
|
||
onLoadedMetadata: "onloadedmetadata",
|
||
onLoadStart: "onloadstart",
|
||
onMessage: "onmessage",
|
||
onMouseDown: "onmousedown",
|
||
onMouseEnter: "onmouseenter",
|
||
onMouseLeave: "onmouseleave",
|
||
onMouseMove: "onmousemove",
|
||
onMouseOut: "onmouseout",
|
||
onMouseOver: "onmouseover",
|
||
onMouseUp: "onmouseup",
|
||
onMouseWheel: "onmousewheel",
|
||
onOffline: "onoffline",
|
||
onOnline: "ononline",
|
||
onPageHide: "onpagehide",
|
||
onPageShow: "onpageshow",
|
||
onPaste: "onpaste",
|
||
onPause: "onpause",
|
||
onPlay: "onplay",
|
||
onPlaying: "onplaying",
|
||
onPopState: "onpopstate",
|
||
onProgress: "onprogress",
|
||
onRateChange: "onratechange",
|
||
onRepeat: "onrepeat",
|
||
onReset: "onreset",
|
||
onResize: "onresize",
|
||
onScroll: "onscroll",
|
||
onSeeked: "onseeked",
|
||
onSeeking: "onseeking",
|
||
onSelect: "onselect",
|
||
onShow: "onshow",
|
||
onStalled: "onstalled",
|
||
onStorage: "onstorage",
|
||
onSubmit: "onsubmit",
|
||
onSuspend: "onsuspend",
|
||
onTimeUpdate: "ontimeupdate",
|
||
onToggle: "ontoggle",
|
||
onUnload: "onunload",
|
||
onVolumeChange: "onvolumechange",
|
||
onWaiting: "onwaiting",
|
||
onZoom: "onzoom",
|
||
overlinePosition: "overline-position",
|
||
overlineThickness: "overline-thickness",
|
||
paintOrder: "paint-order",
|
||
panose1: "panose-1",
|
||
pointerEvents: "pointer-events",
|
||
referrerPolicy: "referrerpolicy",
|
||
renderingIntent: "rendering-intent",
|
||
shapeRendering: "shape-rendering",
|
||
stopColor: "stop-color",
|
||
stopOpacity: "stop-opacity",
|
||
strikethroughPosition: "strikethrough-position",
|
||
strikethroughThickness: "strikethrough-thickness",
|
||
strokeDashArray: "stroke-dasharray",
|
||
strokeDashOffset: "stroke-dashoffset",
|
||
strokeLineCap: "stroke-linecap",
|
||
strokeLineJoin: "stroke-linejoin",
|
||
strokeMiterLimit: "stroke-miterlimit",
|
||
strokeOpacity: "stroke-opacity",
|
||
strokeWidth: "stroke-width",
|
||
tabIndex: "tabindex",
|
||
textAnchor: "text-anchor",
|
||
textDecoration: "text-decoration",
|
||
textRendering: "text-rendering",
|
||
transformOrigin: "transform-origin",
|
||
typeOf: "typeof",
|
||
underlinePosition: "underline-position",
|
||
underlineThickness: "underline-thickness",
|
||
unicodeBidi: "unicode-bidi",
|
||
unicodeRange: "unicode-range",
|
||
unitsPerEm: "units-per-em",
|
||
vAlphabetic: "v-alphabetic",
|
||
vHanging: "v-hanging",
|
||
vIdeographic: "v-ideographic",
|
||
vMathematical: "v-mathematical",
|
||
vectorEffect: "vector-effect",
|
||
vertAdvY: "vert-adv-y",
|
||
vertOriginX: "vert-origin-x",
|
||
vertOriginY: "vert-origin-y",
|
||
wordSpacing: "word-spacing",
|
||
writingMode: "writing-mode",
|
||
xHeight: "x-height",
|
||
// These were camelcased in Tiny. Now lowercased in SVG 2
|
||
playbackOrder: "playbackorder",
|
||
timelineBegin: "timelinebegin"
|
||
},
|
||
transform: caseSensitiveTransform,
|
||
properties: {
|
||
about: commaOrSpaceSeparated,
|
||
accentHeight: number,
|
||
accumulate: null,
|
||
additive: null,
|
||
alignmentBaseline: null,
|
||
alphabetic: number,
|
||
amplitude: number,
|
||
arabicForm: null,
|
||
ascent: number,
|
||
attributeName: null,
|
||
attributeType: null,
|
||
azimuth: number,
|
||
bandwidth: null,
|
||
baselineShift: null,
|
||
baseFrequency: null,
|
||
baseProfile: null,
|
||
bbox: null,
|
||
begin: null,
|
||
bias: number,
|
||
by: null,
|
||
calcMode: null,
|
||
capHeight: number,
|
||
className: spaceSeparated,
|
||
clip: null,
|
||
clipPath: null,
|
||
clipPathUnits: null,
|
||
clipRule: null,
|
||
color: null,
|
||
colorInterpolation: null,
|
||
colorInterpolationFilters: null,
|
||
colorProfile: null,
|
||
colorRendering: null,
|
||
content: null,
|
||
contentScriptType: null,
|
||
contentStyleType: null,
|
||
crossOrigin: null,
|
||
cursor: null,
|
||
cx: null,
|
||
cy: null,
|
||
d: null,
|
||
dataType: null,
|
||
defaultAction: null,
|
||
descent: number,
|
||
diffuseConstant: number,
|
||
direction: null,
|
||
display: null,
|
||
dur: null,
|
||
divisor: number,
|
||
dominantBaseline: null,
|
||
download: boolean,
|
||
dx: null,
|
||
dy: null,
|
||
edgeMode: null,
|
||
editable: null,
|
||
elevation: number,
|
||
enableBackground: null,
|
||
end: null,
|
||
event: null,
|
||
exponent: number,
|
||
externalResourcesRequired: null,
|
||
fill: null,
|
||
fillOpacity: number,
|
||
fillRule: null,
|
||
filter: null,
|
||
filterRes: null,
|
||
filterUnits: null,
|
||
floodColor: null,
|
||
floodOpacity: null,
|
||
focusable: null,
|
||
focusHighlight: null,
|
||
fontFamily: null,
|
||
fontSize: null,
|
||
fontSizeAdjust: null,
|
||
fontStretch: null,
|
||
fontStyle: null,
|
||
fontVariant: null,
|
||
fontWeight: null,
|
||
format: null,
|
||
fr: null,
|
||
from: null,
|
||
fx: null,
|
||
fy: null,
|
||
g1: commaSeparated,
|
||
g2: commaSeparated,
|
||
glyphName: commaSeparated,
|
||
glyphOrientationHorizontal: null,
|
||
glyphOrientationVertical: null,
|
||
glyphRef: null,
|
||
gradientTransform: null,
|
||
gradientUnits: null,
|
||
handler: null,
|
||
hanging: number,
|
||
hatchContentUnits: null,
|
||
hatchUnits: null,
|
||
height: null,
|
||
href: null,
|
||
hrefLang: null,
|
||
horizAdvX: number,
|
||
horizOriginX: number,
|
||
horizOriginY: number,
|
||
id: null,
|
||
ideographic: number,
|
||
imageRendering: null,
|
||
initialVisibility: null,
|
||
in: null,
|
||
in2: null,
|
||
intercept: number,
|
||
k: number,
|
||
k1: number,
|
||
k2: number,
|
||
k3: number,
|
||
k4: number,
|
||
kernelMatrix: commaOrSpaceSeparated,
|
||
kernelUnitLength: null,
|
||
keyPoints: null,
|
||
// SEMI_COLON_SEPARATED
|
||
keySplines: null,
|
||
// SEMI_COLON_SEPARATED
|
||
keyTimes: null,
|
||
// SEMI_COLON_SEPARATED
|
||
kerning: null,
|
||
lang: null,
|
||
lengthAdjust: null,
|
||
letterSpacing: null,
|
||
lightingColor: null,
|
||
limitingConeAngle: number,
|
||
local: null,
|
||
markerEnd: null,
|
||
markerMid: null,
|
||
markerStart: null,
|
||
markerHeight: null,
|
||
markerUnits: null,
|
||
markerWidth: null,
|
||
mask: null,
|
||
maskContentUnits: null,
|
||
maskUnits: null,
|
||
mathematical: null,
|
||
max: null,
|
||
media: null,
|
||
mediaCharacterEncoding: null,
|
||
mediaContentEncodings: null,
|
||
mediaSize: number,
|
||
mediaTime: null,
|
||
method: null,
|
||
min: null,
|
||
mode: null,
|
||
name: null,
|
||
navDown: null,
|
||
navDownLeft: null,
|
||
navDownRight: null,
|
||
navLeft: null,
|
||
navNext: null,
|
||
navPrev: null,
|
||
navRight: null,
|
||
navUp: null,
|
||
navUpLeft: null,
|
||
navUpRight: null,
|
||
numOctaves: null,
|
||
observer: null,
|
||
offset: null,
|
||
onAbort: null,
|
||
onActivate: null,
|
||
onAfterPrint: null,
|
||
onBeforePrint: null,
|
||
onBegin: null,
|
||
onCancel: null,
|
||
onCanPlay: null,
|
||
onCanPlayThrough: null,
|
||
onChange: null,
|
||
onClick: null,
|
||
onClose: null,
|
||
onCopy: null,
|
||
onCueChange: null,
|
||
onCut: null,
|
||
onDblClick: null,
|
||
onDrag: null,
|
||
onDragEnd: null,
|
||
onDragEnter: null,
|
||
onDragExit: null,
|
||
onDragLeave: null,
|
||
onDragOver: null,
|
||
onDragStart: null,
|
||
onDrop: null,
|
||
onDurationChange: null,
|
||
onEmptied: null,
|
||
onEnd: null,
|
||
onEnded: null,
|
||
onError: null,
|
||
onFocus: null,
|
||
onFocusIn: null,
|
||
onFocusOut: null,
|
||
onHashChange: null,
|
||
onInput: null,
|
||
onInvalid: null,
|
||
onKeyDown: null,
|
||
onKeyPress: null,
|
||
onKeyUp: null,
|
||
onLoad: null,
|
||
onLoadedData: null,
|
||
onLoadedMetadata: null,
|
||
onLoadStart: null,
|
||
onMessage: null,
|
||
onMouseDown: null,
|
||
onMouseEnter: null,
|
||
onMouseLeave: null,
|
||
onMouseMove: null,
|
||
onMouseOut: null,
|
||
onMouseOver: null,
|
||
onMouseUp: null,
|
||
onMouseWheel: null,
|
||
onOffline: null,
|
||
onOnline: null,
|
||
onPageHide: null,
|
||
onPageShow: null,
|
||
onPaste: null,
|
||
onPause: null,
|
||
onPlay: null,
|
||
onPlaying: null,
|
||
onPopState: null,
|
||
onProgress: null,
|
||
onRateChange: null,
|
||
onRepeat: null,
|
||
onReset: null,
|
||
onResize: null,
|
||
onScroll: null,
|
||
onSeeked: null,
|
||
onSeeking: null,
|
||
onSelect: null,
|
||
onShow: null,
|
||
onStalled: null,
|
||
onStorage: null,
|
||
onSubmit: null,
|
||
onSuspend: null,
|
||
onTimeUpdate: null,
|
||
onToggle: null,
|
||
onUnload: null,
|
||
onVolumeChange: null,
|
||
onWaiting: null,
|
||
onZoom: null,
|
||
opacity: null,
|
||
operator: null,
|
||
order: null,
|
||
orient: null,
|
||
orientation: null,
|
||
origin: null,
|
||
overflow: null,
|
||
overlay: null,
|
||
overlinePosition: number,
|
||
overlineThickness: number,
|
||
paintOrder: null,
|
||
panose1: null,
|
||
path: null,
|
||
pathLength: number,
|
||
patternContentUnits: null,
|
||
patternTransform: null,
|
||
patternUnits: null,
|
||
phase: null,
|
||
ping: spaceSeparated,
|
||
pitch: null,
|
||
playbackOrder: null,
|
||
pointerEvents: null,
|
||
points: null,
|
||
pointsAtX: number,
|
||
pointsAtY: number,
|
||
pointsAtZ: number,
|
||
preserveAlpha: null,
|
||
preserveAspectRatio: null,
|
||
primitiveUnits: null,
|
||
propagate: null,
|
||
property: commaOrSpaceSeparated,
|
||
r: null,
|
||
radius: null,
|
||
referrerPolicy: null,
|
||
refX: null,
|
||
refY: null,
|
||
rel: commaOrSpaceSeparated,
|
||
rev: commaOrSpaceSeparated,
|
||
renderingIntent: null,
|
||
repeatCount: null,
|
||
repeatDur: null,
|
||
requiredExtensions: commaOrSpaceSeparated,
|
||
requiredFeatures: commaOrSpaceSeparated,
|
||
requiredFonts: commaOrSpaceSeparated,
|
||
requiredFormats: commaOrSpaceSeparated,
|
||
resource: null,
|
||
restart: null,
|
||
result: null,
|
||
rotate: null,
|
||
rx: null,
|
||
ry: null,
|
||
scale: null,
|
||
seed: null,
|
||
shapeRendering: null,
|
||
side: null,
|
||
slope: null,
|
||
snapshotTime: null,
|
||
specularConstant: number,
|
||
specularExponent: number,
|
||
spreadMethod: null,
|
||
spacing: null,
|
||
startOffset: null,
|
||
stdDeviation: null,
|
||
stemh: null,
|
||
stemv: null,
|
||
stitchTiles: null,
|
||
stopColor: null,
|
||
stopOpacity: null,
|
||
strikethroughPosition: number,
|
||
strikethroughThickness: number,
|
||
string: null,
|
||
stroke: null,
|
||
strokeDashArray: commaOrSpaceSeparated,
|
||
strokeDashOffset: null,
|
||
strokeLineCap: null,
|
||
strokeLineJoin: null,
|
||
strokeMiterLimit: number,
|
||
strokeOpacity: number,
|
||
strokeWidth: null,
|
||
style: null,
|
||
surfaceScale: number,
|
||
syncBehavior: null,
|
||
syncBehaviorDefault: null,
|
||
syncMaster: null,
|
||
syncTolerance: null,
|
||
syncToleranceDefault: null,
|
||
systemLanguage: commaOrSpaceSeparated,
|
||
tabIndex: number,
|
||
tableValues: null,
|
||
target: null,
|
||
targetX: number,
|
||
targetY: number,
|
||
textAnchor: null,
|
||
textDecoration: null,
|
||
textRendering: null,
|
||
textLength: null,
|
||
timelineBegin: null,
|
||
title: null,
|
||
transformBehavior: null,
|
||
type: null,
|
||
typeOf: commaOrSpaceSeparated,
|
||
to: null,
|
||
transform: null,
|
||
transformOrigin: null,
|
||
u1: null,
|
||
u2: null,
|
||
underlinePosition: number,
|
||
underlineThickness: number,
|
||
unicode: null,
|
||
unicodeBidi: null,
|
||
unicodeRange: null,
|
||
unitsPerEm: number,
|
||
values: null,
|
||
vAlphabetic: number,
|
||
vMathematical: number,
|
||
vectorEffect: null,
|
||
vHanging: number,
|
||
vIdeographic: number,
|
||
version: null,
|
||
vertAdvY: number,
|
||
vertOriginX: number,
|
||
vertOriginY: number,
|
||
viewBox: null,
|
||
viewTarget: null,
|
||
visibility: null,
|
||
width: null,
|
||
widths: null,
|
||
wordSpacing: null,
|
||
writingMode: null,
|
||
x: null,
|
||
x1: null,
|
||
x2: null,
|
||
xChannelSelector: null,
|
||
xHeight: number,
|
||
y: null,
|
||
y1: null,
|
||
y2: null,
|
||
yChannelSelector: null,
|
||
z: null,
|
||
zoomAndPan: null
|
||
}
|
||
});
|
||
|
||
// node_modules/property-information/lib/find.js
|
||
var valid = /^data[-\w.:]+$/i;
|
||
var dash = /-[a-z]/g;
|
||
var cap = /[A-Z]/g;
|
||
function find(schema, value) {
|
||
const normal = normalize(value);
|
||
let prop = value;
|
||
let Type = Info;
|
||
if (normal in schema.normal) {
|
||
return schema.property[schema.normal[normal]];
|
||
}
|
||
if (normal.length > 4 && normal.slice(0, 4) === "data" && valid.test(value)) {
|
||
if (value.charAt(4) === "-") {
|
||
const rest = value.slice(5).replace(dash, camelcase);
|
||
prop = "data" + rest.charAt(0).toUpperCase() + rest.slice(1);
|
||
} else {
|
||
const rest = value.slice(4);
|
||
if (!dash.test(rest)) {
|
||
let dashes = rest.replace(cap, kebab);
|
||
if (dashes.charAt(0) !== "-") {
|
||
dashes = "-" + dashes;
|
||
}
|
||
value = "data" + dashes;
|
||
}
|
||
}
|
||
Type = DefinedInfo;
|
||
}
|
||
return new Type(prop, value);
|
||
}
|
||
function kebab($0) {
|
||
return "-" + $0.toLowerCase();
|
||
}
|
||
function camelcase($0) {
|
||
return $0.charAt(1).toUpperCase();
|
||
}
|
||
|
||
// node_modules/property-information/index.js
|
||
var html2 = merge([xml, xlink, xmlns, aria, html], "html");
|
||
var svg2 = merge([xml, xlink, xmlns, aria, svg], "svg");
|
||
|
||
// node_modules/comma-separated-tokens/index.js
|
||
function parse2(value) {
|
||
const tokens = [];
|
||
const input = String(value || "");
|
||
let index2 = input.indexOf(",");
|
||
let start = 0;
|
||
let end = false;
|
||
while (!end) {
|
||
if (index2 === -1) {
|
||
index2 = input.length;
|
||
end = true;
|
||
}
|
||
const token = input.slice(start, index2).trim();
|
||
if (token || !end) {
|
||
tokens.push(token);
|
||
}
|
||
start = index2 + 1;
|
||
index2 = input.indexOf(",", start);
|
||
}
|
||
return tokens;
|
||
}
|
||
function stringify(values, options) {
|
||
const settings = options || {};
|
||
const input = values[values.length - 1] === "" ? [...values, ""] : values;
|
||
return input.join(
|
||
(settings.padRight ? " " : "") + "," + (settings.padLeft === false ? "" : " ")
|
||
).trim();
|
||
}
|
||
|
||
// node_modules/hast-util-parse-selector/lib/index.js
|
||
var search = /[#.]/g;
|
||
function parseSelector(selector, defaultTagName) {
|
||
const value = selector || "";
|
||
const props = {};
|
||
let start = 0;
|
||
let previous;
|
||
let tagName;
|
||
while (start < value.length) {
|
||
search.lastIndex = start;
|
||
const match = search.exec(value);
|
||
const subvalue = value.slice(start, match ? match.index : value.length);
|
||
if (subvalue) {
|
||
if (!previous) {
|
||
tagName = subvalue;
|
||
} else if (previous === "#") {
|
||
props.id = subvalue;
|
||
} else if (Array.isArray(props.className)) {
|
||
props.className.push(subvalue);
|
||
} else {
|
||
props.className = [subvalue];
|
||
}
|
||
start += subvalue.length;
|
||
}
|
||
if (match) {
|
||
previous = match[0];
|
||
start++;
|
||
}
|
||
}
|
||
return {
|
||
type: "element",
|
||
// @ts-expect-error: tag name is parsed.
|
||
tagName: tagName || defaultTagName || "div",
|
||
properties: props,
|
||
children: []
|
||
};
|
||
}
|
||
|
||
// node_modules/space-separated-tokens/index.js
|
||
function parse3(value) {
|
||
const input = String(value || "").trim();
|
||
return input ? input.split(/[ \t\n\r\f]+/g) : [];
|
||
}
|
||
function stringify2(values) {
|
||
return values.join(" ").trim();
|
||
}
|
||
|
||
// node_modules/hastscript/lib/create-h.js
|
||
var buttonTypes = /* @__PURE__ */ new Set(["button", "menu", "reset", "submit"]);
|
||
var own2 = {}.hasOwnProperty;
|
||
function createH(schema, defaultTagName, caseSensitive) {
|
||
const adjust = caseSensitive && createAdjustMap(caseSensitive);
|
||
function h3(selector, properties, ...children) {
|
||
let index2 = -1;
|
||
let node;
|
||
if (selector === void 0 || selector === null) {
|
||
node = { type: "root", children: [] };
|
||
const child = (
|
||
/** @type {Child} */
|
||
properties
|
||
);
|
||
children.unshift(child);
|
||
} else {
|
||
node = parseSelector(selector, defaultTagName);
|
||
node.tagName = node.tagName.toLowerCase();
|
||
if (adjust && own2.call(adjust, node.tagName)) {
|
||
node.tagName = adjust[node.tagName];
|
||
}
|
||
if (isProperties(properties, node.tagName)) {
|
||
let key2;
|
||
for (key2 in properties) {
|
||
if (own2.call(properties, key2)) {
|
||
addProperty(schema, node.properties, key2, properties[key2]);
|
||
}
|
||
}
|
||
} else {
|
||
children.unshift(properties);
|
||
}
|
||
}
|
||
while (++index2 < children.length) {
|
||
addChild(node.children, children[index2]);
|
||
}
|
||
if (node.type === "element" && node.tagName === "template") {
|
||
node.content = { type: "root", children: node.children };
|
||
node.children = [];
|
||
}
|
||
return node;
|
||
}
|
||
return h3;
|
||
}
|
||
function isProperties(value, name) {
|
||
if (value === null || value === void 0 || typeof value !== "object" || Array.isArray(value)) {
|
||
return false;
|
||
}
|
||
if (name === "input" || !value.type || typeof value.type !== "string") {
|
||
return true;
|
||
}
|
||
if ("children" in value && Array.isArray(value.children)) {
|
||
return false;
|
||
}
|
||
if (name === "button") {
|
||
return buttonTypes.has(value.type.toLowerCase());
|
||
}
|
||
return !("value" in value);
|
||
}
|
||
function addProperty(schema, properties, key2, value) {
|
||
const info = find(schema, key2);
|
||
let index2 = -1;
|
||
let result;
|
||
if (value === void 0 || value === null)
|
||
return;
|
||
if (typeof value === "number") {
|
||
if (Number.isNaN(value))
|
||
return;
|
||
result = value;
|
||
} else if (typeof value === "boolean") {
|
||
result = value;
|
||
} else if (typeof value === "string") {
|
||
if (info.spaceSeparated) {
|
||
result = parse3(value);
|
||
} else if (info.commaSeparated) {
|
||
result = parse2(value);
|
||
} else if (info.commaOrSpaceSeparated) {
|
||
result = parse3(parse2(value).join(" "));
|
||
} else {
|
||
result = parsePrimitive(info, info.property, value);
|
||
}
|
||
} else if (Array.isArray(value)) {
|
||
result = value.concat();
|
||
} else {
|
||
result = info.property === "style" ? style(value) : String(value);
|
||
}
|
||
if (Array.isArray(result)) {
|
||
const finalResult = [];
|
||
while (++index2 < result.length) {
|
||
const value2 = (
|
||
/** @type {number | string} */
|
||
parsePrimitive(info, info.property, result[index2])
|
||
);
|
||
finalResult[index2] = value2;
|
||
}
|
||
result = finalResult;
|
||
}
|
||
if (info.property === "className" && Array.isArray(properties.className)) {
|
||
const value2 = (
|
||
/** @type {number | string} */
|
||
result
|
||
);
|
||
result = properties.className.concat(value2);
|
||
}
|
||
properties[info.property] = result;
|
||
}
|
||
function addChild(nodes, value) {
|
||
let index2 = -1;
|
||
if (value === void 0 || value === null) {
|
||
} else if (typeof value === "string" || typeof value === "number") {
|
||
nodes.push({ type: "text", value: String(value) });
|
||
} else if (Array.isArray(value)) {
|
||
while (++index2 < value.length) {
|
||
addChild(nodes, value[index2]);
|
||
}
|
||
} else if (typeof value === "object" && "type" in value) {
|
||
if (value.type === "root") {
|
||
addChild(nodes, value.children);
|
||
} else {
|
||
nodes.push(value);
|
||
}
|
||
} else {
|
||
throw new Error("Expected node, nodes, or string, got `" + value + "`");
|
||
}
|
||
}
|
||
function parsePrimitive(info, name, value) {
|
||
if (typeof value === "string") {
|
||
if (info.number && value && !Number.isNaN(Number(value))) {
|
||
return Number(value);
|
||
}
|
||
if ((info.boolean || info.overloadedBoolean) && (value === "" || normalize(value) === normalize(name))) {
|
||
return true;
|
||
}
|
||
}
|
||
return value;
|
||
}
|
||
function style(value) {
|
||
const result = [];
|
||
let key2;
|
||
for (key2 in value) {
|
||
if (own2.call(value, key2)) {
|
||
result.push([key2, value[key2]].join(": "));
|
||
}
|
||
}
|
||
return result.join("; ");
|
||
}
|
||
function createAdjustMap(values) {
|
||
const result = {};
|
||
let index2 = -1;
|
||
while (++index2 < values.length) {
|
||
result[values[index2].toLowerCase()] = values[index2];
|
||
}
|
||
return result;
|
||
}
|
||
|
||
// node_modules/hastscript/lib/svg-case-sensitive-tag-names.js
|
||
var svgCaseSensitiveTagNames = [
|
||
"altGlyph",
|
||
"altGlyphDef",
|
||
"altGlyphItem",
|
||
"animateColor",
|
||
"animateMotion",
|
||
"animateTransform",
|
||
"clipPath",
|
||
"feBlend",
|
||
"feColorMatrix",
|
||
"feComponentTransfer",
|
||
"feComposite",
|
||
"feConvolveMatrix",
|
||
"feDiffuseLighting",
|
||
"feDisplacementMap",
|
||
"feDistantLight",
|
||
"feDropShadow",
|
||
"feFlood",
|
||
"feFuncA",
|
||
"feFuncB",
|
||
"feFuncG",
|
||
"feFuncR",
|
||
"feGaussianBlur",
|
||
"feImage",
|
||
"feMerge",
|
||
"feMergeNode",
|
||
"feMorphology",
|
||
"feOffset",
|
||
"fePointLight",
|
||
"feSpecularLighting",
|
||
"feSpotLight",
|
||
"feTile",
|
||
"feTurbulence",
|
||
"foreignObject",
|
||
"glyphRef",
|
||
"linearGradient",
|
||
"radialGradient",
|
||
"solidColor",
|
||
"textArea",
|
||
"textPath"
|
||
];
|
||
|
||
// node_modules/hastscript/lib/index.js
|
||
var h2 = createH(html2, "div");
|
||
var s2 = createH(svg2, "g", svgCaseSensitiveTagNames);
|
||
|
||
// node_modules/vfile-location/lib/index.js
|
||
var search2 = /\r?\n|\r/g;
|
||
function location(file) {
|
||
const value = String(file);
|
||
const indices = [];
|
||
search2.lastIndex = 0;
|
||
while (search2.test(value)) {
|
||
indices.push(search2.lastIndex);
|
||
}
|
||
indices.push(value.length + 1);
|
||
return { toPoint, toOffset };
|
||
function toPoint(offset) {
|
||
let index2 = -1;
|
||
if (typeof offset === "number" && offset > -1 && offset < indices[indices.length - 1]) {
|
||
while (++index2 < indices.length) {
|
||
if (indices[index2] > offset) {
|
||
return {
|
||
line: index2 + 1,
|
||
column: offset - (index2 > 0 ? indices[index2 - 1] : 0) + 1,
|
||
offset
|
||
};
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function toOffset(point3) {
|
||
const line = point3 && point3.line;
|
||
const column = point3 && point3.column;
|
||
if (typeof line === "number" && typeof column === "number" && !Number.isNaN(line) && !Number.isNaN(column) && line - 1 in indices) {
|
||
const offset = (indices[line - 2] || 0) + column - 1 || 0;
|
||
if (offset > -1 && offset < indices[indices.length - 1]) {
|
||
return offset;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// node_modules/web-namespaces/index.js
|
||
var webNamespaces = {
|
||
html: "http://www.w3.org/1999/xhtml",
|
||
mathml: "http://www.w3.org/1998/Math/MathML",
|
||
svg: "http://www.w3.org/2000/svg",
|
||
xlink: "http://www.w3.org/1999/xlink",
|
||
xml: "http://www.w3.org/XML/1998/namespace",
|
||
xmlns: "http://www.w3.org/2000/xmlns/"
|
||
};
|
||
|
||
// node_modules/hast-util-from-parse5/lib/index.js
|
||
var own3 = {}.hasOwnProperty;
|
||
var proto = Object.prototype;
|
||
function fromParse5(tree, options) {
|
||
const settings = options || {};
|
||
return one(
|
||
{
|
||
file: settings.file || void 0,
|
||
location: false,
|
||
schema: settings.space === "svg" ? svg2 : html2,
|
||
verbose: settings.verbose || false
|
||
},
|
||
tree
|
||
);
|
||
}
|
||
function one(state, node) {
|
||
let result;
|
||
switch (node.nodeName) {
|
||
case "#comment": {
|
||
const reference = (
|
||
/** @type {P5Comment} */
|
||
node
|
||
);
|
||
result = { type: "comment", value: reference.data };
|
||
patch(state, reference, result);
|
||
return result;
|
||
}
|
||
case "#document":
|
||
case "#document-fragment": {
|
||
const reference = (
|
||
/** @type {P5Document | P5DocumentFragment} */
|
||
node
|
||
);
|
||
const quirksMode = "mode" in reference ? reference.mode === "quirks" || reference.mode === "limited-quirks" : false;
|
||
result = {
|
||
type: "root",
|
||
children: all(state, node.childNodes),
|
||
data: { quirksMode }
|
||
};
|
||
if (state.file && state.location) {
|
||
const doc = String(state.file);
|
||
const loc = location(doc);
|
||
const start = loc.toPoint(0);
|
||
const end = loc.toPoint(doc.length);
|
||
ok2(start, "expected `start`");
|
||
ok2(end, "expected `end`");
|
||
result.position = { start, end };
|
||
}
|
||
return result;
|
||
}
|
||
case "#documentType": {
|
||
const reference = (
|
||
/** @type {P5DocumentType} */
|
||
node
|
||
);
|
||
result = { type: "doctype" };
|
||
patch(state, reference, result);
|
||
return result;
|
||
}
|
||
case "#text": {
|
||
const reference = (
|
||
/** @type {P5Text} */
|
||
node
|
||
);
|
||
result = { type: "text", value: reference.value };
|
||
patch(state, reference, result);
|
||
return result;
|
||
}
|
||
default: {
|
||
const reference = (
|
||
/** @type {P5Element} */
|
||
node
|
||
);
|
||
result = element(state, reference);
|
||
return result;
|
||
}
|
||
}
|
||
}
|
||
function all(state, nodes) {
|
||
let index2 = -1;
|
||
const results = [];
|
||
while (++index2 < nodes.length) {
|
||
const result = (
|
||
/** @type {RootContent} */
|
||
one(state, nodes[index2])
|
||
);
|
||
results.push(result);
|
||
}
|
||
return results;
|
||
}
|
||
function element(state, node) {
|
||
const schema = state.schema;
|
||
state.schema = node.namespaceURI === webNamespaces.svg ? svg2 : html2;
|
||
let index2 = -1;
|
||
const props = {};
|
||
while (++index2 < node.attrs.length) {
|
||
const attribute = node.attrs[index2];
|
||
const name = (attribute.prefix ? attribute.prefix + ":" : "") + attribute.name;
|
||
if (!own3.call(proto, name)) {
|
||
props[name] = attribute.value;
|
||
}
|
||
}
|
||
const fn = state.schema.space === "svg" ? s2 : h2;
|
||
const result = fn(node.tagName, props, all(state, node.childNodes));
|
||
patch(state, node, result);
|
||
if (result.tagName === "template") {
|
||
const reference = (
|
||
/** @type {P5Template} */
|
||
node
|
||
);
|
||
const pos = reference.sourceCodeLocation;
|
||
const startTag = pos && pos.startTag && position(pos.startTag);
|
||
const endTag = pos && pos.endTag && position(pos.endTag);
|
||
const content = (
|
||
/** @type {Root} */
|
||
one(state, reference.content)
|
||
);
|
||
if (startTag && endTag && state.file) {
|
||
content.position = { start: startTag.end, end: endTag.start };
|
||
}
|
||
result.content = content;
|
||
}
|
||
state.schema = schema;
|
||
return result;
|
||
}
|
||
function patch(state, from, to) {
|
||
if ("sourceCodeLocation" in from && from.sourceCodeLocation && state.file) {
|
||
const position3 = createLocation(state, to, from.sourceCodeLocation);
|
||
if (position3) {
|
||
state.location = true;
|
||
to.position = position3;
|
||
}
|
||
}
|
||
}
|
||
function createLocation(state, node, location2) {
|
||
const result = position(location2);
|
||
if (node.type === "element") {
|
||
const tail = node.children[node.children.length - 1];
|
||
if (result && !location2.endTag && tail && tail.position && tail.position.end) {
|
||
result.end = Object.assign({}, tail.position.end);
|
||
}
|
||
if (state.verbose) {
|
||
const props = {};
|
||
let key2;
|
||
if (location2.attrs) {
|
||
for (key2 in location2.attrs) {
|
||
if (own3.call(location2.attrs, key2)) {
|
||
props[find(state.schema, key2).property] = position(
|
||
location2.attrs[key2]
|
||
);
|
||
}
|
||
}
|
||
}
|
||
ok2(location2.startTag, "a start tag should exist");
|
||
const opening2 = position(location2.startTag);
|
||
const closing2 = location2.endTag ? position(location2.endTag) : void 0;
|
||
const data = { opening: opening2 };
|
||
if (closing2)
|
||
data.closing = closing2;
|
||
data.properties = props;
|
||
node.data = { position: data };
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
function position(loc) {
|
||
const start = point({
|
||
line: loc.startLine,
|
||
column: loc.startCol,
|
||
offset: loc.startOffset
|
||
});
|
||
const end = point({
|
||
line: loc.endLine,
|
||
column: loc.endCol,
|
||
offset: loc.endOffset
|
||
});
|
||
return start || end ? { start, end } : void 0;
|
||
}
|
||
function point(point3) {
|
||
return point3.line && point3.column ? point3 : void 0;
|
||
}
|
||
|
||
// node_modules/parse5/dist/common/unicode.js
|
||
var UNDEFINED_CODE_POINTS = /* @__PURE__ */ new Set([
|
||
65534,
|
||
65535,
|
||
131070,
|
||
131071,
|
||
196606,
|
||
196607,
|
||
262142,
|
||
262143,
|
||
327678,
|
||
327679,
|
||
393214,
|
||
393215,
|
||
458750,
|
||
458751,
|
||
524286,
|
||
524287,
|
||
589822,
|
||
589823,
|
||
655358,
|
||
655359,
|
||
720894,
|
||
720895,
|
||
786430,
|
||
786431,
|
||
851966,
|
||
851967,
|
||
917502,
|
||
917503,
|
||
983038,
|
||
983039,
|
||
1048574,
|
||
1048575,
|
||
1114110,
|
||
1114111
|
||
]);
|
||
var REPLACEMENT_CHARACTER = "\uFFFD";
|
||
var CODE_POINTS;
|
||
(function(CODE_POINTS2) {
|
||
CODE_POINTS2[CODE_POINTS2["EOF"] = -1] = "EOF";
|
||
CODE_POINTS2[CODE_POINTS2["NULL"] = 0] = "NULL";
|
||
CODE_POINTS2[CODE_POINTS2["TABULATION"] = 9] = "TABULATION";
|
||
CODE_POINTS2[CODE_POINTS2["CARRIAGE_RETURN"] = 13] = "CARRIAGE_RETURN";
|
||
CODE_POINTS2[CODE_POINTS2["LINE_FEED"] = 10] = "LINE_FEED";
|
||
CODE_POINTS2[CODE_POINTS2["FORM_FEED"] = 12] = "FORM_FEED";
|
||
CODE_POINTS2[CODE_POINTS2["SPACE"] = 32] = "SPACE";
|
||
CODE_POINTS2[CODE_POINTS2["EXCLAMATION_MARK"] = 33] = "EXCLAMATION_MARK";
|
||
CODE_POINTS2[CODE_POINTS2["QUOTATION_MARK"] = 34] = "QUOTATION_MARK";
|
||
CODE_POINTS2[CODE_POINTS2["NUMBER_SIGN"] = 35] = "NUMBER_SIGN";
|
||
CODE_POINTS2[CODE_POINTS2["AMPERSAND"] = 38] = "AMPERSAND";
|
||
CODE_POINTS2[CODE_POINTS2["APOSTROPHE"] = 39] = "APOSTROPHE";
|
||
CODE_POINTS2[CODE_POINTS2["HYPHEN_MINUS"] = 45] = "HYPHEN_MINUS";
|
||
CODE_POINTS2[CODE_POINTS2["SOLIDUS"] = 47] = "SOLIDUS";
|
||
CODE_POINTS2[CODE_POINTS2["DIGIT_0"] = 48] = "DIGIT_0";
|
||
CODE_POINTS2[CODE_POINTS2["DIGIT_9"] = 57] = "DIGIT_9";
|
||
CODE_POINTS2[CODE_POINTS2["SEMICOLON"] = 59] = "SEMICOLON";
|
||
CODE_POINTS2[CODE_POINTS2["LESS_THAN_SIGN"] = 60] = "LESS_THAN_SIGN";
|
||
CODE_POINTS2[CODE_POINTS2["EQUALS_SIGN"] = 61] = "EQUALS_SIGN";
|
||
CODE_POINTS2[CODE_POINTS2["GREATER_THAN_SIGN"] = 62] = "GREATER_THAN_SIGN";
|
||
CODE_POINTS2[CODE_POINTS2["QUESTION_MARK"] = 63] = "QUESTION_MARK";
|
||
CODE_POINTS2[CODE_POINTS2["LATIN_CAPITAL_A"] = 65] = "LATIN_CAPITAL_A";
|
||
CODE_POINTS2[CODE_POINTS2["LATIN_CAPITAL_F"] = 70] = "LATIN_CAPITAL_F";
|
||
CODE_POINTS2[CODE_POINTS2["LATIN_CAPITAL_X"] = 88] = "LATIN_CAPITAL_X";
|
||
CODE_POINTS2[CODE_POINTS2["LATIN_CAPITAL_Z"] = 90] = "LATIN_CAPITAL_Z";
|
||
CODE_POINTS2[CODE_POINTS2["RIGHT_SQUARE_BRACKET"] = 93] = "RIGHT_SQUARE_BRACKET";
|
||
CODE_POINTS2[CODE_POINTS2["GRAVE_ACCENT"] = 96] = "GRAVE_ACCENT";
|
||
CODE_POINTS2[CODE_POINTS2["LATIN_SMALL_A"] = 97] = "LATIN_SMALL_A";
|
||
CODE_POINTS2[CODE_POINTS2["LATIN_SMALL_F"] = 102] = "LATIN_SMALL_F";
|
||
CODE_POINTS2[CODE_POINTS2["LATIN_SMALL_X"] = 120] = "LATIN_SMALL_X";
|
||
CODE_POINTS2[CODE_POINTS2["LATIN_SMALL_Z"] = 122] = "LATIN_SMALL_Z";
|
||
CODE_POINTS2[CODE_POINTS2["REPLACEMENT_CHARACTER"] = 65533] = "REPLACEMENT_CHARACTER";
|
||
})(CODE_POINTS = CODE_POINTS || (CODE_POINTS = {}));
|
||
var SEQUENCES = {
|
||
DASH_DASH: "--",
|
||
CDATA_START: "[CDATA[",
|
||
DOCTYPE: "doctype",
|
||
SCRIPT: "script",
|
||
PUBLIC: "public",
|
||
SYSTEM: "system"
|
||
};
|
||
function isSurrogate(cp) {
|
||
return cp >= 55296 && cp <= 57343;
|
||
}
|
||
function isSurrogatePair(cp) {
|
||
return cp >= 56320 && cp <= 57343;
|
||
}
|
||
function getSurrogatePairCodePoint(cp1, cp2) {
|
||
return (cp1 - 55296) * 1024 + 9216 + cp2;
|
||
}
|
||
function isControlCodePoint(cp) {
|
||
return cp !== 32 && cp !== 10 && cp !== 13 && cp !== 9 && cp !== 12 && cp >= 1 && cp <= 31 || cp >= 127 && cp <= 159;
|
||
}
|
||
function isUndefinedCodePoint(cp) {
|
||
return cp >= 64976 && cp <= 65007 || UNDEFINED_CODE_POINTS.has(cp);
|
||
}
|
||
|
||
// node_modules/parse5/dist/common/error-codes.js
|
||
var ERR;
|
||
(function(ERR2) {
|
||
ERR2["controlCharacterInInputStream"] = "control-character-in-input-stream";
|
||
ERR2["noncharacterInInputStream"] = "noncharacter-in-input-stream";
|
||
ERR2["surrogateInInputStream"] = "surrogate-in-input-stream";
|
||
ERR2["nonVoidHtmlElementStartTagWithTrailingSolidus"] = "non-void-html-element-start-tag-with-trailing-solidus";
|
||
ERR2["endTagWithAttributes"] = "end-tag-with-attributes";
|
||
ERR2["endTagWithTrailingSolidus"] = "end-tag-with-trailing-solidus";
|
||
ERR2["unexpectedSolidusInTag"] = "unexpected-solidus-in-tag";
|
||
ERR2["unexpectedNullCharacter"] = "unexpected-null-character";
|
||
ERR2["unexpectedQuestionMarkInsteadOfTagName"] = "unexpected-question-mark-instead-of-tag-name";
|
||
ERR2["invalidFirstCharacterOfTagName"] = "invalid-first-character-of-tag-name";
|
||
ERR2["unexpectedEqualsSignBeforeAttributeName"] = "unexpected-equals-sign-before-attribute-name";
|
||
ERR2["missingEndTagName"] = "missing-end-tag-name";
|
||
ERR2["unexpectedCharacterInAttributeName"] = "unexpected-character-in-attribute-name";
|
||
ERR2["unknownNamedCharacterReference"] = "unknown-named-character-reference";
|
||
ERR2["missingSemicolonAfterCharacterReference"] = "missing-semicolon-after-character-reference";
|
||
ERR2["unexpectedCharacterAfterDoctypeSystemIdentifier"] = "unexpected-character-after-doctype-system-identifier";
|
||
ERR2["unexpectedCharacterInUnquotedAttributeValue"] = "unexpected-character-in-unquoted-attribute-value";
|
||
ERR2["eofBeforeTagName"] = "eof-before-tag-name";
|
||
ERR2["eofInTag"] = "eof-in-tag";
|
||
ERR2["missingAttributeValue"] = "missing-attribute-value";
|
||
ERR2["missingWhitespaceBetweenAttributes"] = "missing-whitespace-between-attributes";
|
||
ERR2["missingWhitespaceAfterDoctypePublicKeyword"] = "missing-whitespace-after-doctype-public-keyword";
|
||
ERR2["missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers"] = "missing-whitespace-between-doctype-public-and-system-identifiers";
|
||
ERR2["missingWhitespaceAfterDoctypeSystemKeyword"] = "missing-whitespace-after-doctype-system-keyword";
|
||
ERR2["missingQuoteBeforeDoctypePublicIdentifier"] = "missing-quote-before-doctype-public-identifier";
|
||
ERR2["missingQuoteBeforeDoctypeSystemIdentifier"] = "missing-quote-before-doctype-system-identifier";
|
||
ERR2["missingDoctypePublicIdentifier"] = "missing-doctype-public-identifier";
|
||
ERR2["missingDoctypeSystemIdentifier"] = "missing-doctype-system-identifier";
|
||
ERR2["abruptDoctypePublicIdentifier"] = "abrupt-doctype-public-identifier";
|
||
ERR2["abruptDoctypeSystemIdentifier"] = "abrupt-doctype-system-identifier";
|
||
ERR2["cdataInHtmlContent"] = "cdata-in-html-content";
|
||
ERR2["incorrectlyOpenedComment"] = "incorrectly-opened-comment";
|
||
ERR2["eofInScriptHtmlCommentLikeText"] = "eof-in-script-html-comment-like-text";
|
||
ERR2["eofInDoctype"] = "eof-in-doctype";
|
||
ERR2["nestedComment"] = "nested-comment";
|
||
ERR2["abruptClosingOfEmptyComment"] = "abrupt-closing-of-empty-comment";
|
||
ERR2["eofInComment"] = "eof-in-comment";
|
||
ERR2["incorrectlyClosedComment"] = "incorrectly-closed-comment";
|
||
ERR2["eofInCdata"] = "eof-in-cdata";
|
||
ERR2["absenceOfDigitsInNumericCharacterReference"] = "absence-of-digits-in-numeric-character-reference";
|
||
ERR2["nullCharacterReference"] = "null-character-reference";
|
||
ERR2["surrogateCharacterReference"] = "surrogate-character-reference";
|
||
ERR2["characterReferenceOutsideUnicodeRange"] = "character-reference-outside-unicode-range";
|
||
ERR2["controlCharacterReference"] = "control-character-reference";
|
||
ERR2["noncharacterCharacterReference"] = "noncharacter-character-reference";
|
||
ERR2["missingWhitespaceBeforeDoctypeName"] = "missing-whitespace-before-doctype-name";
|
||
ERR2["missingDoctypeName"] = "missing-doctype-name";
|
||
ERR2["invalidCharacterSequenceAfterDoctypeName"] = "invalid-character-sequence-after-doctype-name";
|
||
ERR2["duplicateAttribute"] = "duplicate-attribute";
|
||
ERR2["nonConformingDoctype"] = "non-conforming-doctype";
|
||
ERR2["missingDoctype"] = "missing-doctype";
|
||
ERR2["misplacedDoctype"] = "misplaced-doctype";
|
||
ERR2["endTagWithoutMatchingOpenElement"] = "end-tag-without-matching-open-element";
|
||
ERR2["closingOfElementWithOpenChildElements"] = "closing-of-element-with-open-child-elements";
|
||
ERR2["disallowedContentInNoscriptInHead"] = "disallowed-content-in-noscript-in-head";
|
||
ERR2["openElementsLeftAfterEof"] = "open-elements-left-after-eof";
|
||
ERR2["abandonedHeadElementChild"] = "abandoned-head-element-child";
|
||
ERR2["misplacedStartTagForHeadElement"] = "misplaced-start-tag-for-head-element";
|
||
ERR2["nestedNoscriptInHead"] = "nested-noscript-in-head";
|
||
ERR2["eofInElementThatCanContainOnlyText"] = "eof-in-element-that-can-contain-only-text";
|
||
})(ERR = ERR || (ERR = {}));
|
||
|
||
// node_modules/parse5/dist/tokenizer/preprocessor.js
|
||
var DEFAULT_BUFFER_WATERLINE = 1 << 16;
|
||
var Preprocessor = class {
|
||
constructor(handler) {
|
||
this.handler = handler;
|
||
this.html = "";
|
||
this.pos = -1;
|
||
this.lastGapPos = -2;
|
||
this.gapStack = [];
|
||
this.skipNextNewLine = false;
|
||
this.lastChunkWritten = false;
|
||
this.endOfChunkHit = false;
|
||
this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;
|
||
this.isEol = false;
|
||
this.lineStartPos = 0;
|
||
this.droppedBufferSize = 0;
|
||
this.line = 1;
|
||
this.lastErrOffset = -1;
|
||
}
|
||
/** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */
|
||
get col() {
|
||
return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);
|
||
}
|
||
get offset() {
|
||
return this.droppedBufferSize + this.pos;
|
||
}
|
||
getError(code) {
|
||
const { line, col, offset } = this;
|
||
return {
|
||
code,
|
||
startLine: line,
|
||
endLine: line,
|
||
startCol: col,
|
||
endCol: col,
|
||
startOffset: offset,
|
||
endOffset: offset
|
||
};
|
||
}
|
||
_err(code) {
|
||
if (this.handler.onParseError && this.lastErrOffset !== this.offset) {
|
||
this.lastErrOffset = this.offset;
|
||
this.handler.onParseError(this.getError(code));
|
||
}
|
||
}
|
||
_addGap() {
|
||
this.gapStack.push(this.lastGapPos);
|
||
this.lastGapPos = this.pos;
|
||
}
|
||
_processSurrogate(cp) {
|
||
if (this.pos !== this.html.length - 1) {
|
||
const nextCp = this.html.charCodeAt(this.pos + 1);
|
||
if (isSurrogatePair(nextCp)) {
|
||
this.pos++;
|
||
this._addGap();
|
||
return getSurrogatePairCodePoint(cp, nextCp);
|
||
}
|
||
} else if (!this.lastChunkWritten) {
|
||
this.endOfChunkHit = true;
|
||
return CODE_POINTS.EOF;
|
||
}
|
||
this._err(ERR.surrogateInInputStream);
|
||
return cp;
|
||
}
|
||
willDropParsedChunk() {
|
||
return this.pos > this.bufferWaterline;
|
||
}
|
||
dropParsedChunk() {
|
||
if (this.willDropParsedChunk()) {
|
||
this.html = this.html.substring(this.pos);
|
||
this.lineStartPos -= this.pos;
|
||
this.droppedBufferSize += this.pos;
|
||
this.pos = 0;
|
||
this.lastGapPos = -2;
|
||
this.gapStack.length = 0;
|
||
}
|
||
}
|
||
write(chunk, isLastChunk) {
|
||
if (this.html.length > 0) {
|
||
this.html += chunk;
|
||
} else {
|
||
this.html = chunk;
|
||
}
|
||
this.endOfChunkHit = false;
|
||
this.lastChunkWritten = isLastChunk;
|
||
}
|
||
insertHtmlAtCurrentPos(chunk) {
|
||
this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);
|
||
this.endOfChunkHit = false;
|
||
}
|
||
startsWith(pattern, caseSensitive) {
|
||
if (this.pos + pattern.length > this.html.length) {
|
||
this.endOfChunkHit = !this.lastChunkWritten;
|
||
return false;
|
||
}
|
||
if (caseSensitive) {
|
||
return this.html.startsWith(pattern, this.pos);
|
||
}
|
||
for (let i2 = 0; i2 < pattern.length; i2++) {
|
||
const cp = this.html.charCodeAt(this.pos + i2) | 32;
|
||
if (cp !== pattern.charCodeAt(i2)) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
peek(offset) {
|
||
const pos = this.pos + offset;
|
||
if (pos >= this.html.length) {
|
||
this.endOfChunkHit = !this.lastChunkWritten;
|
||
return CODE_POINTS.EOF;
|
||
}
|
||
const code = this.html.charCodeAt(pos);
|
||
return code === CODE_POINTS.CARRIAGE_RETURN ? CODE_POINTS.LINE_FEED : code;
|
||
}
|
||
advance() {
|
||
this.pos++;
|
||
if (this.isEol) {
|
||
this.isEol = false;
|
||
this.line++;
|
||
this.lineStartPos = this.pos;
|
||
}
|
||
if (this.pos >= this.html.length) {
|
||
this.endOfChunkHit = !this.lastChunkWritten;
|
||
return CODE_POINTS.EOF;
|
||
}
|
||
let cp = this.html.charCodeAt(this.pos);
|
||
if (cp === CODE_POINTS.CARRIAGE_RETURN) {
|
||
this.isEol = true;
|
||
this.skipNextNewLine = true;
|
||
return CODE_POINTS.LINE_FEED;
|
||
}
|
||
if (cp === CODE_POINTS.LINE_FEED) {
|
||
this.isEol = true;
|
||
if (this.skipNextNewLine) {
|
||
this.line--;
|
||
this.skipNextNewLine = false;
|
||
this._addGap();
|
||
return this.advance();
|
||
}
|
||
}
|
||
this.skipNextNewLine = false;
|
||
if (isSurrogate(cp)) {
|
||
cp = this._processSurrogate(cp);
|
||
}
|
||
const isCommonValidRange = this.handler.onParseError === null || cp > 31 && cp < 127 || cp === CODE_POINTS.LINE_FEED || cp === CODE_POINTS.CARRIAGE_RETURN || cp > 159 && cp < 64976;
|
||
if (!isCommonValidRange) {
|
||
this._checkForProblematicCharacters(cp);
|
||
}
|
||
return cp;
|
||
}
|
||
_checkForProblematicCharacters(cp) {
|
||
if (isControlCodePoint(cp)) {
|
||
this._err(ERR.controlCharacterInInputStream);
|
||
} else if (isUndefinedCodePoint(cp)) {
|
||
this._err(ERR.noncharacterInInputStream);
|
||
}
|
||
}
|
||
retreat(count) {
|
||
this.pos -= count;
|
||
while (this.pos < this.lastGapPos) {
|
||
this.lastGapPos = this.gapStack.pop();
|
||
this.pos--;
|
||
}
|
||
this.isEol = false;
|
||
}
|
||
};
|
||
|
||
// node_modules/parse5/dist/common/token.js
|
||
var token_exports = {};
|
||
__export(token_exports, {
|
||
TokenType: () => TokenType,
|
||
getTokenAttr: () => getTokenAttr
|
||
});
|
||
var TokenType;
|
||
(function(TokenType2) {
|
||
TokenType2[TokenType2["CHARACTER"] = 0] = "CHARACTER";
|
||
TokenType2[TokenType2["NULL_CHARACTER"] = 1] = "NULL_CHARACTER";
|
||
TokenType2[TokenType2["WHITESPACE_CHARACTER"] = 2] = "WHITESPACE_CHARACTER";
|
||
TokenType2[TokenType2["START_TAG"] = 3] = "START_TAG";
|
||
TokenType2[TokenType2["END_TAG"] = 4] = "END_TAG";
|
||
TokenType2[TokenType2["COMMENT"] = 5] = "COMMENT";
|
||
TokenType2[TokenType2["DOCTYPE"] = 6] = "DOCTYPE";
|
||
TokenType2[TokenType2["EOF"] = 7] = "EOF";
|
||
TokenType2[TokenType2["HIBERNATION"] = 8] = "HIBERNATION";
|
||
})(TokenType = TokenType || (TokenType = {}));
|
||
function getTokenAttr(token, attrName) {
|
||
for (let i2 = token.attrs.length - 1; i2 >= 0; i2--) {
|
||
if (token.attrs[i2].name === attrName) {
|
||
return token.attrs[i2].value;
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
|
||
// node_modules/entities/lib/esm/generated/decode-data-html.js
|
||
var decode_data_html_default = new Uint16Array(
|
||
// prettier-ignore
|
||
'\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map((c2) => c2.charCodeAt(0))
|
||
);
|
||
|
||
// node_modules/entities/lib/esm/generated/decode-data-xml.js
|
||
var decode_data_xml_default = new Uint16Array(
|
||
// prettier-ignore
|
||
"\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c2) => c2.charCodeAt(0))
|
||
);
|
||
|
||
// node_modules/entities/lib/esm/decode_codepoint.js
|
||
var _a;
|
||
var decodeMap = /* @__PURE__ */ new Map([
|
||
[0, 65533],
|
||
// C1 Unicode control character reference replacements
|
||
[128, 8364],
|
||
[130, 8218],
|
||
[131, 402],
|
||
[132, 8222],
|
||
[133, 8230],
|
||
[134, 8224],
|
||
[135, 8225],
|
||
[136, 710],
|
||
[137, 8240],
|
||
[138, 352],
|
||
[139, 8249],
|
||
[140, 338],
|
||
[142, 381],
|
||
[145, 8216],
|
||
[146, 8217],
|
||
[147, 8220],
|
||
[148, 8221],
|
||
[149, 8226],
|
||
[150, 8211],
|
||
[151, 8212],
|
||
[152, 732],
|
||
[153, 8482],
|
||
[154, 353],
|
||
[155, 8250],
|
||
[156, 339],
|
||
[158, 382],
|
||
[159, 376]
|
||
]);
|
||
var fromCodePoint = (
|
||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
|
||
(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function(codePoint) {
|
||
let output = "";
|
||
if (codePoint > 65535) {
|
||
codePoint -= 65536;
|
||
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
|
||
codePoint = 56320 | codePoint & 1023;
|
||
}
|
||
output += String.fromCharCode(codePoint);
|
||
return output;
|
||
}
|
||
);
|
||
function replaceCodePoint(codePoint) {
|
||
var _a2;
|
||
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
|
||
return 65533;
|
||
}
|
||
return (_a2 = decodeMap.get(codePoint)) !== null && _a2 !== void 0 ? _a2 : codePoint;
|
||
}
|
||
|
||
// node_modules/entities/lib/esm/decode.js
|
||
var CharCodes;
|
||
(function(CharCodes2) {
|
||
CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
|
||
CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI";
|
||
CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS";
|
||
CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO";
|
||
CharCodes2[CharCodes2["NINE"] = 57] = "NINE";
|
||
CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A";
|
||
CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F";
|
||
CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X";
|
||
CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z";
|
||
CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A";
|
||
CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F";
|
||
CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z";
|
||
})(CharCodes || (CharCodes = {}));
|
||
var TO_LOWER_BIT = 32;
|
||
var BinTrieFlags;
|
||
(function(BinTrieFlags2) {
|
||
BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
|
||
BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
|
||
BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
|
||
})(BinTrieFlags || (BinTrieFlags = {}));
|
||
function isNumber(code) {
|
||
return code >= CharCodes.ZERO && code <= CharCodes.NINE;
|
||
}
|
||
function isHexadecimalCharacter(code) {
|
||
return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
|
||
}
|
||
function isAsciiAlphaNumeric(code) {
|
||
return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
|
||
}
|
||
function isEntityInAttributeInvalidEnd(code) {
|
||
return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
|
||
}
|
||
var EntityDecoderState;
|
||
(function(EntityDecoderState2) {
|
||
EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
|
||
EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
|
||
EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
|
||
EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
|
||
EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
|
||
})(EntityDecoderState || (EntityDecoderState = {}));
|
||
var DecodingMode;
|
||
(function(DecodingMode2) {
|
||
DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
|
||
DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
|
||
DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
|
||
})(DecodingMode || (DecodingMode = {}));
|
||
var EntityDecoder = class {
|
||
constructor(decodeTree, emitCodePoint, errors2) {
|
||
this.decodeTree = decodeTree;
|
||
this.emitCodePoint = emitCodePoint;
|
||
this.errors = errors2;
|
||
this.state = EntityDecoderState.EntityStart;
|
||
this.consumed = 1;
|
||
this.result = 0;
|
||
this.treeIndex = 0;
|
||
this.excess = 1;
|
||
this.decodeMode = DecodingMode.Strict;
|
||
}
|
||
/** Resets the instance to make it reusable. */
|
||
startEntity(decodeMode) {
|
||
this.decodeMode = decodeMode;
|
||
this.state = EntityDecoderState.EntityStart;
|
||
this.result = 0;
|
||
this.treeIndex = 0;
|
||
this.excess = 1;
|
||
this.consumed = 1;
|
||
}
|
||
/**
|
||
* Write an entity to the decoder. This can be called multiple times with partial entities.
|
||
* If the entity is incomplete, the decoder will return -1.
|
||
*
|
||
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
|
||
* entity is incomplete, and resume when the next string is written.
|
||
*
|
||
* @param string The string containing the entity (or a continuation of the entity).
|
||
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
|
||
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
||
*/
|
||
write(str, offset) {
|
||
switch (this.state) {
|
||
case EntityDecoderState.EntityStart: {
|
||
if (str.charCodeAt(offset) === CharCodes.NUM) {
|
||
this.state = EntityDecoderState.NumericStart;
|
||
this.consumed += 1;
|
||
return this.stateNumericStart(str, offset + 1);
|
||
}
|
||
this.state = EntityDecoderState.NamedEntity;
|
||
return this.stateNamedEntity(str, offset);
|
||
}
|
||
case EntityDecoderState.NumericStart: {
|
||
return this.stateNumericStart(str, offset);
|
||
}
|
||
case EntityDecoderState.NumericDecimal: {
|
||
return this.stateNumericDecimal(str, offset);
|
||
}
|
||
case EntityDecoderState.NumericHex: {
|
||
return this.stateNumericHex(str, offset);
|
||
}
|
||
case EntityDecoderState.NamedEntity: {
|
||
return this.stateNamedEntity(str, offset);
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Switches between the numeric decimal and hexadecimal states.
|
||
*
|
||
* Equivalent to the `Numeric character reference state` in the HTML spec.
|
||
*
|
||
* @param str The string containing the entity (or a continuation of the entity).
|
||
* @param offset The current offset.
|
||
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
||
*/
|
||
stateNumericStart(str, offset) {
|
||
if (offset >= str.length) {
|
||
return -1;
|
||
}
|
||
if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
|
||
this.state = EntityDecoderState.NumericHex;
|
||
this.consumed += 1;
|
||
return this.stateNumericHex(str, offset + 1);
|
||
}
|
||
this.state = EntityDecoderState.NumericDecimal;
|
||
return this.stateNumericDecimal(str, offset);
|
||
}
|
||
addToNumericResult(str, start, end, base2) {
|
||
if (start !== end) {
|
||
const digitCount = end - start;
|
||
this.result = this.result * Math.pow(base2, digitCount) + parseInt(str.substr(start, digitCount), base2);
|
||
this.consumed += digitCount;
|
||
}
|
||
}
|
||
/**
|
||
* Parses a hexadecimal numeric entity.
|
||
*
|
||
* Equivalent to the `Hexademical character reference state` in the HTML spec.
|
||
*
|
||
* @param str The string containing the entity (or a continuation of the entity).
|
||
* @param offset The current offset.
|
||
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
||
*/
|
||
stateNumericHex(str, offset) {
|
||
const startIdx = offset;
|
||
while (offset < str.length) {
|
||
const char = str.charCodeAt(offset);
|
||
if (isNumber(char) || isHexadecimalCharacter(char)) {
|
||
offset += 1;
|
||
} else {
|
||
this.addToNumericResult(str, startIdx, offset, 16);
|
||
return this.emitNumericEntity(char, 3);
|
||
}
|
||
}
|
||
this.addToNumericResult(str, startIdx, offset, 16);
|
||
return -1;
|
||
}
|
||
/**
|
||
* Parses a decimal numeric entity.
|
||
*
|
||
* Equivalent to the `Decimal character reference state` in the HTML spec.
|
||
*
|
||
* @param str The string containing the entity (or a continuation of the entity).
|
||
* @param offset The current offset.
|
||
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
||
*/
|
||
stateNumericDecimal(str, offset) {
|
||
const startIdx = offset;
|
||
while (offset < str.length) {
|
||
const char = str.charCodeAt(offset);
|
||
if (isNumber(char)) {
|
||
offset += 1;
|
||
} else {
|
||
this.addToNumericResult(str, startIdx, offset, 10);
|
||
return this.emitNumericEntity(char, 2);
|
||
}
|
||
}
|
||
this.addToNumericResult(str, startIdx, offset, 10);
|
||
return -1;
|
||
}
|
||
/**
|
||
* Validate and emit a numeric entity.
|
||
*
|
||
* Implements the logic from the `Hexademical character reference start
|
||
* state` and `Numeric character reference end state` in the HTML spec.
|
||
*
|
||
* @param lastCp The last code point of the entity. Used to see if the
|
||
* entity was terminated with a semicolon.
|
||
* @param expectedLength The minimum number of characters that should be
|
||
* consumed. Used to validate that at least one digit
|
||
* was consumed.
|
||
* @returns The number of characters that were consumed.
|
||
*/
|
||
emitNumericEntity(lastCp, expectedLength) {
|
||
var _a2;
|
||
if (this.consumed <= expectedLength) {
|
||
(_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
||
return 0;
|
||
}
|
||
if (lastCp === CharCodes.SEMI) {
|
||
this.consumed += 1;
|
||
} else if (this.decodeMode === DecodingMode.Strict) {
|
||
return 0;
|
||
}
|
||
this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
|
||
if (this.errors) {
|
||
if (lastCp !== CharCodes.SEMI) {
|
||
this.errors.missingSemicolonAfterCharacterReference();
|
||
}
|
||
this.errors.validateNumericCharacterReference(this.result);
|
||
}
|
||
return this.consumed;
|
||
}
|
||
/**
|
||
* Parses a named entity.
|
||
*
|
||
* Equivalent to the `Named character reference state` in the HTML spec.
|
||
*
|
||
* @param str The string containing the entity (or a continuation of the entity).
|
||
* @param offset The current offset.
|
||
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
|
||
*/
|
||
stateNamedEntity(str, offset) {
|
||
const { decodeTree } = this;
|
||
let current = decodeTree[this.treeIndex];
|
||
let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
|
||
for (; offset < str.length; offset++, this.excess++) {
|
||
const char = str.charCodeAt(offset);
|
||
this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
|
||
if (this.treeIndex < 0) {
|
||
return this.result === 0 || // If we are parsing an attribute
|
||
this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,
|
||
(valueLength === 0 || // And there should be no invalid characters.
|
||
isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
|
||
}
|
||
current = decodeTree[this.treeIndex];
|
||
valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
|
||
if (valueLength !== 0) {
|
||
if (char === CharCodes.SEMI) {
|
||
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
|
||
}
|
||
if (this.decodeMode !== DecodingMode.Strict) {
|
||
this.result = this.treeIndex;
|
||
this.consumed += this.excess;
|
||
this.excess = 0;
|
||
}
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
/**
|
||
* Emit a named entity that was not terminated with a semicolon.
|
||
*
|
||
* @returns The number of characters consumed.
|
||
*/
|
||
emitNotTerminatedNamedEntity() {
|
||
var _a2;
|
||
const { result, decodeTree } = this;
|
||
const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
|
||
this.emitNamedEntityData(result, valueLength, this.consumed);
|
||
(_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.missingSemicolonAfterCharacterReference();
|
||
return this.consumed;
|
||
}
|
||
/**
|
||
* Emit a named entity.
|
||
*
|
||
* @param result The index of the entity in the decode tree.
|
||
* @param valueLength The number of bytes in the entity.
|
||
* @param consumed The number of characters consumed.
|
||
*
|
||
* @returns The number of characters consumed.
|
||
*/
|
||
emitNamedEntityData(result, valueLength, consumed) {
|
||
const { decodeTree } = this;
|
||
this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed);
|
||
if (valueLength === 3) {
|
||
this.emitCodePoint(decodeTree[result + 2], consumed);
|
||
}
|
||
return consumed;
|
||
}
|
||
/**
|
||
* Signal to the parser that the end of the input was reached.
|
||
*
|
||
* Remaining data will be emitted and relevant errors will be produced.
|
||
*
|
||
* @returns The number of characters consumed.
|
||
*/
|
||
end() {
|
||
var _a2;
|
||
switch (this.state) {
|
||
case EntityDecoderState.NamedEntity: {
|
||
return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
|
||
}
|
||
case EntityDecoderState.NumericDecimal: {
|
||
return this.emitNumericEntity(0, 2);
|
||
}
|
||
case EntityDecoderState.NumericHex: {
|
||
return this.emitNumericEntity(0, 3);
|
||
}
|
||
case EntityDecoderState.NumericStart: {
|
||
(_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
|
||
return 0;
|
||
}
|
||
case EntityDecoderState.EntityStart: {
|
||
return 0;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
function getDecoder(decodeTree) {
|
||
let ret = "";
|
||
const decoder = new EntityDecoder(decodeTree, (str) => ret += fromCodePoint(str));
|
||
return function decodeWithTrie(str, decodeMode) {
|
||
let lastIndex = 0;
|
||
let offset = 0;
|
||
while ((offset = str.indexOf("&", offset)) >= 0) {
|
||
ret += str.slice(lastIndex, offset);
|
||
decoder.startEntity(decodeMode);
|
||
const len = decoder.write(
|
||
str,
|
||
// Skip the "&"
|
||
offset + 1
|
||
);
|
||
if (len < 0) {
|
||
lastIndex = offset + decoder.end();
|
||
break;
|
||
}
|
||
lastIndex = offset + len;
|
||
offset = len === 0 ? lastIndex + 1 : lastIndex;
|
||
}
|
||
const result = ret + str.slice(lastIndex);
|
||
ret = "";
|
||
return result;
|
||
};
|
||
}
|
||
function determineBranch(decodeTree, current, nodeIdx, char) {
|
||
const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
|
||
const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
|
||
if (branchCount === 0) {
|
||
return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
|
||
}
|
||
if (jumpOffset) {
|
||
const value = char - jumpOffset;
|
||
return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
|
||
}
|
||
let lo = nodeIdx;
|
||
let hi = lo + branchCount - 1;
|
||
while (lo <= hi) {
|
||
const mid = lo + hi >>> 1;
|
||
const midVal = decodeTree[mid];
|
||
if (midVal < char) {
|
||
lo = mid + 1;
|
||
} else if (midVal > char) {
|
||
hi = mid - 1;
|
||
} else {
|
||
return decodeTree[mid + branchCount];
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
var htmlDecoder = getDecoder(decode_data_html_default);
|
||
var xmlDecoder = getDecoder(decode_data_xml_default);
|
||
|
||
// node_modules/parse5/dist/common/html.js
|
||
var html_exports = {};
|
||
__export(html_exports, {
|
||
ATTRS: () => ATTRS,
|
||
DOCUMENT_MODE: () => DOCUMENT_MODE,
|
||
NS: () => NS,
|
||
SPECIAL_ELEMENTS: () => SPECIAL_ELEMENTS,
|
||
TAG_ID: () => TAG_ID,
|
||
TAG_NAMES: () => TAG_NAMES,
|
||
getTagID: () => getTagID,
|
||
hasUnescapedText: () => hasUnescapedText,
|
||
isNumberedHeader: () => isNumberedHeader
|
||
});
|
||
var NS;
|
||
(function(NS2) {
|
||
NS2["HTML"] = "http://www.w3.org/1999/xhtml";
|
||
NS2["MATHML"] = "http://www.w3.org/1998/Math/MathML";
|
||
NS2["SVG"] = "http://www.w3.org/2000/svg";
|
||
NS2["XLINK"] = "http://www.w3.org/1999/xlink";
|
||
NS2["XML"] = "http://www.w3.org/XML/1998/namespace";
|
||
NS2["XMLNS"] = "http://www.w3.org/2000/xmlns/";
|
||
})(NS = NS || (NS = {}));
|
||
var ATTRS;
|
||
(function(ATTRS2) {
|
||
ATTRS2["TYPE"] = "type";
|
||
ATTRS2["ACTION"] = "action";
|
||
ATTRS2["ENCODING"] = "encoding";
|
||
ATTRS2["PROMPT"] = "prompt";
|
||
ATTRS2["NAME"] = "name";
|
||
ATTRS2["COLOR"] = "color";
|
||
ATTRS2["FACE"] = "face";
|
||
ATTRS2["SIZE"] = "size";
|
||
})(ATTRS = ATTRS || (ATTRS = {}));
|
||
var DOCUMENT_MODE;
|
||
(function(DOCUMENT_MODE2) {
|
||
DOCUMENT_MODE2["NO_QUIRKS"] = "no-quirks";
|
||
DOCUMENT_MODE2["QUIRKS"] = "quirks";
|
||
DOCUMENT_MODE2["LIMITED_QUIRKS"] = "limited-quirks";
|
||
})(DOCUMENT_MODE = DOCUMENT_MODE || (DOCUMENT_MODE = {}));
|
||
var TAG_NAMES;
|
||
(function(TAG_NAMES2) {
|
||
TAG_NAMES2["A"] = "a";
|
||
TAG_NAMES2["ADDRESS"] = "address";
|
||
TAG_NAMES2["ANNOTATION_XML"] = "annotation-xml";
|
||
TAG_NAMES2["APPLET"] = "applet";
|
||
TAG_NAMES2["AREA"] = "area";
|
||
TAG_NAMES2["ARTICLE"] = "article";
|
||
TAG_NAMES2["ASIDE"] = "aside";
|
||
TAG_NAMES2["B"] = "b";
|
||
TAG_NAMES2["BASE"] = "base";
|
||
TAG_NAMES2["BASEFONT"] = "basefont";
|
||
TAG_NAMES2["BGSOUND"] = "bgsound";
|
||
TAG_NAMES2["BIG"] = "big";
|
||
TAG_NAMES2["BLOCKQUOTE"] = "blockquote";
|
||
TAG_NAMES2["BODY"] = "body";
|
||
TAG_NAMES2["BR"] = "br";
|
||
TAG_NAMES2["BUTTON"] = "button";
|
||
TAG_NAMES2["CAPTION"] = "caption";
|
||
TAG_NAMES2["CENTER"] = "center";
|
||
TAG_NAMES2["CODE"] = "code";
|
||
TAG_NAMES2["COL"] = "col";
|
||
TAG_NAMES2["COLGROUP"] = "colgroup";
|
||
TAG_NAMES2["DD"] = "dd";
|
||
TAG_NAMES2["DESC"] = "desc";
|
||
TAG_NAMES2["DETAILS"] = "details";
|
||
TAG_NAMES2["DIALOG"] = "dialog";
|
||
TAG_NAMES2["DIR"] = "dir";
|
||
TAG_NAMES2["DIV"] = "div";
|
||
TAG_NAMES2["DL"] = "dl";
|
||
TAG_NAMES2["DT"] = "dt";
|
||
TAG_NAMES2["EM"] = "em";
|
||
TAG_NAMES2["EMBED"] = "embed";
|
||
TAG_NAMES2["FIELDSET"] = "fieldset";
|
||
TAG_NAMES2["FIGCAPTION"] = "figcaption";
|
||
TAG_NAMES2["FIGURE"] = "figure";
|
||
TAG_NAMES2["FONT"] = "font";
|
||
TAG_NAMES2["FOOTER"] = "footer";
|
||
TAG_NAMES2["FOREIGN_OBJECT"] = "foreignObject";
|
||
TAG_NAMES2["FORM"] = "form";
|
||
TAG_NAMES2["FRAME"] = "frame";
|
||
TAG_NAMES2["FRAMESET"] = "frameset";
|
||
TAG_NAMES2["H1"] = "h1";
|
||
TAG_NAMES2["H2"] = "h2";
|
||
TAG_NAMES2["H3"] = "h3";
|
||
TAG_NAMES2["H4"] = "h4";
|
||
TAG_NAMES2["H5"] = "h5";
|
||
TAG_NAMES2["H6"] = "h6";
|
||
TAG_NAMES2["HEAD"] = "head";
|
||
TAG_NAMES2["HEADER"] = "header";
|
||
TAG_NAMES2["HGROUP"] = "hgroup";
|
||
TAG_NAMES2["HR"] = "hr";
|
||
TAG_NAMES2["HTML"] = "html";
|
||
TAG_NAMES2["I"] = "i";
|
||
TAG_NAMES2["IMG"] = "img";
|
||
TAG_NAMES2["IMAGE"] = "image";
|
||
TAG_NAMES2["INPUT"] = "input";
|
||
TAG_NAMES2["IFRAME"] = "iframe";
|
||
TAG_NAMES2["KEYGEN"] = "keygen";
|
||
TAG_NAMES2["LABEL"] = "label";
|
||
TAG_NAMES2["LI"] = "li";
|
||
TAG_NAMES2["LINK"] = "link";
|
||
TAG_NAMES2["LISTING"] = "listing";
|
||
TAG_NAMES2["MAIN"] = "main";
|
||
TAG_NAMES2["MALIGNMARK"] = "malignmark";
|
||
TAG_NAMES2["MARQUEE"] = "marquee";
|
||
TAG_NAMES2["MATH"] = "math";
|
||
TAG_NAMES2["MENU"] = "menu";
|
||
TAG_NAMES2["META"] = "meta";
|
||
TAG_NAMES2["MGLYPH"] = "mglyph";
|
||
TAG_NAMES2["MI"] = "mi";
|
||
TAG_NAMES2["MO"] = "mo";
|
||
TAG_NAMES2["MN"] = "mn";
|
||
TAG_NAMES2["MS"] = "ms";
|
||
TAG_NAMES2["MTEXT"] = "mtext";
|
||
TAG_NAMES2["NAV"] = "nav";
|
||
TAG_NAMES2["NOBR"] = "nobr";
|
||
TAG_NAMES2["NOFRAMES"] = "noframes";
|
||
TAG_NAMES2["NOEMBED"] = "noembed";
|
||
TAG_NAMES2["NOSCRIPT"] = "noscript";
|
||
TAG_NAMES2["OBJECT"] = "object";
|
||
TAG_NAMES2["OL"] = "ol";
|
||
TAG_NAMES2["OPTGROUP"] = "optgroup";
|
||
TAG_NAMES2["OPTION"] = "option";
|
||
TAG_NAMES2["P"] = "p";
|
||
TAG_NAMES2["PARAM"] = "param";
|
||
TAG_NAMES2["PLAINTEXT"] = "plaintext";
|
||
TAG_NAMES2["PRE"] = "pre";
|
||
TAG_NAMES2["RB"] = "rb";
|
||
TAG_NAMES2["RP"] = "rp";
|
||
TAG_NAMES2["RT"] = "rt";
|
||
TAG_NAMES2["RTC"] = "rtc";
|
||
TAG_NAMES2["RUBY"] = "ruby";
|
||
TAG_NAMES2["S"] = "s";
|
||
TAG_NAMES2["SCRIPT"] = "script";
|
||
TAG_NAMES2["SECTION"] = "section";
|
||
TAG_NAMES2["SELECT"] = "select";
|
||
TAG_NAMES2["SOURCE"] = "source";
|
||
TAG_NAMES2["SMALL"] = "small";
|
||
TAG_NAMES2["SPAN"] = "span";
|
||
TAG_NAMES2["STRIKE"] = "strike";
|
||
TAG_NAMES2["STRONG"] = "strong";
|
||
TAG_NAMES2["STYLE"] = "style";
|
||
TAG_NAMES2["SUB"] = "sub";
|
||
TAG_NAMES2["SUMMARY"] = "summary";
|
||
TAG_NAMES2["SUP"] = "sup";
|
||
TAG_NAMES2["TABLE"] = "table";
|
||
TAG_NAMES2["TBODY"] = "tbody";
|
||
TAG_NAMES2["TEMPLATE"] = "template";
|
||
TAG_NAMES2["TEXTAREA"] = "textarea";
|
||
TAG_NAMES2["TFOOT"] = "tfoot";
|
||
TAG_NAMES2["TD"] = "td";
|
||
TAG_NAMES2["TH"] = "th";
|
||
TAG_NAMES2["THEAD"] = "thead";
|
||
TAG_NAMES2["TITLE"] = "title";
|
||
TAG_NAMES2["TR"] = "tr";
|
||
TAG_NAMES2["TRACK"] = "track";
|
||
TAG_NAMES2["TT"] = "tt";
|
||
TAG_NAMES2["U"] = "u";
|
||
TAG_NAMES2["UL"] = "ul";
|
||
TAG_NAMES2["SVG"] = "svg";
|
||
TAG_NAMES2["VAR"] = "var";
|
||
TAG_NAMES2["WBR"] = "wbr";
|
||
TAG_NAMES2["XMP"] = "xmp";
|
||
})(TAG_NAMES = TAG_NAMES || (TAG_NAMES = {}));
|
||
var TAG_ID;
|
||
(function(TAG_ID2) {
|
||
TAG_ID2[TAG_ID2["UNKNOWN"] = 0] = "UNKNOWN";
|
||
TAG_ID2[TAG_ID2["A"] = 1] = "A";
|
||
TAG_ID2[TAG_ID2["ADDRESS"] = 2] = "ADDRESS";
|
||
TAG_ID2[TAG_ID2["ANNOTATION_XML"] = 3] = "ANNOTATION_XML";
|
||
TAG_ID2[TAG_ID2["APPLET"] = 4] = "APPLET";
|
||
TAG_ID2[TAG_ID2["AREA"] = 5] = "AREA";
|
||
TAG_ID2[TAG_ID2["ARTICLE"] = 6] = "ARTICLE";
|
||
TAG_ID2[TAG_ID2["ASIDE"] = 7] = "ASIDE";
|
||
TAG_ID2[TAG_ID2["B"] = 8] = "B";
|
||
TAG_ID2[TAG_ID2["BASE"] = 9] = "BASE";
|
||
TAG_ID2[TAG_ID2["BASEFONT"] = 10] = "BASEFONT";
|
||
TAG_ID2[TAG_ID2["BGSOUND"] = 11] = "BGSOUND";
|
||
TAG_ID2[TAG_ID2["BIG"] = 12] = "BIG";
|
||
TAG_ID2[TAG_ID2["BLOCKQUOTE"] = 13] = "BLOCKQUOTE";
|
||
TAG_ID2[TAG_ID2["BODY"] = 14] = "BODY";
|
||
TAG_ID2[TAG_ID2["BR"] = 15] = "BR";
|
||
TAG_ID2[TAG_ID2["BUTTON"] = 16] = "BUTTON";
|
||
TAG_ID2[TAG_ID2["CAPTION"] = 17] = "CAPTION";
|
||
TAG_ID2[TAG_ID2["CENTER"] = 18] = "CENTER";
|
||
TAG_ID2[TAG_ID2["CODE"] = 19] = "CODE";
|
||
TAG_ID2[TAG_ID2["COL"] = 20] = "COL";
|
||
TAG_ID2[TAG_ID2["COLGROUP"] = 21] = "COLGROUP";
|
||
TAG_ID2[TAG_ID2["DD"] = 22] = "DD";
|
||
TAG_ID2[TAG_ID2["DESC"] = 23] = "DESC";
|
||
TAG_ID2[TAG_ID2["DETAILS"] = 24] = "DETAILS";
|
||
TAG_ID2[TAG_ID2["DIALOG"] = 25] = "DIALOG";
|
||
TAG_ID2[TAG_ID2["DIR"] = 26] = "DIR";
|
||
TAG_ID2[TAG_ID2["DIV"] = 27] = "DIV";
|
||
TAG_ID2[TAG_ID2["DL"] = 28] = "DL";
|
||
TAG_ID2[TAG_ID2["DT"] = 29] = "DT";
|
||
TAG_ID2[TAG_ID2["EM"] = 30] = "EM";
|
||
TAG_ID2[TAG_ID2["EMBED"] = 31] = "EMBED";
|
||
TAG_ID2[TAG_ID2["FIELDSET"] = 32] = "FIELDSET";
|
||
TAG_ID2[TAG_ID2["FIGCAPTION"] = 33] = "FIGCAPTION";
|
||
TAG_ID2[TAG_ID2["FIGURE"] = 34] = "FIGURE";
|
||
TAG_ID2[TAG_ID2["FONT"] = 35] = "FONT";
|
||
TAG_ID2[TAG_ID2["FOOTER"] = 36] = "FOOTER";
|
||
TAG_ID2[TAG_ID2["FOREIGN_OBJECT"] = 37] = "FOREIGN_OBJECT";
|
||
TAG_ID2[TAG_ID2["FORM"] = 38] = "FORM";
|
||
TAG_ID2[TAG_ID2["FRAME"] = 39] = "FRAME";
|
||
TAG_ID2[TAG_ID2["FRAMESET"] = 40] = "FRAMESET";
|
||
TAG_ID2[TAG_ID2["H1"] = 41] = "H1";
|
||
TAG_ID2[TAG_ID2["H2"] = 42] = "H2";
|
||
TAG_ID2[TAG_ID2["H3"] = 43] = "H3";
|
||
TAG_ID2[TAG_ID2["H4"] = 44] = "H4";
|
||
TAG_ID2[TAG_ID2["H5"] = 45] = "H5";
|
||
TAG_ID2[TAG_ID2["H6"] = 46] = "H6";
|
||
TAG_ID2[TAG_ID2["HEAD"] = 47] = "HEAD";
|
||
TAG_ID2[TAG_ID2["HEADER"] = 48] = "HEADER";
|
||
TAG_ID2[TAG_ID2["HGROUP"] = 49] = "HGROUP";
|
||
TAG_ID2[TAG_ID2["HR"] = 50] = "HR";
|
||
TAG_ID2[TAG_ID2["HTML"] = 51] = "HTML";
|
||
TAG_ID2[TAG_ID2["I"] = 52] = "I";
|
||
TAG_ID2[TAG_ID2["IMG"] = 53] = "IMG";
|
||
TAG_ID2[TAG_ID2["IMAGE"] = 54] = "IMAGE";
|
||
TAG_ID2[TAG_ID2["INPUT"] = 55] = "INPUT";
|
||
TAG_ID2[TAG_ID2["IFRAME"] = 56] = "IFRAME";
|
||
TAG_ID2[TAG_ID2["KEYGEN"] = 57] = "KEYGEN";
|
||
TAG_ID2[TAG_ID2["LABEL"] = 58] = "LABEL";
|
||
TAG_ID2[TAG_ID2["LI"] = 59] = "LI";
|
||
TAG_ID2[TAG_ID2["LINK"] = 60] = "LINK";
|
||
TAG_ID2[TAG_ID2["LISTING"] = 61] = "LISTING";
|
||
TAG_ID2[TAG_ID2["MAIN"] = 62] = "MAIN";
|
||
TAG_ID2[TAG_ID2["MALIGNMARK"] = 63] = "MALIGNMARK";
|
||
TAG_ID2[TAG_ID2["MARQUEE"] = 64] = "MARQUEE";
|
||
TAG_ID2[TAG_ID2["MATH"] = 65] = "MATH";
|
||
TAG_ID2[TAG_ID2["MENU"] = 66] = "MENU";
|
||
TAG_ID2[TAG_ID2["META"] = 67] = "META";
|
||
TAG_ID2[TAG_ID2["MGLYPH"] = 68] = "MGLYPH";
|
||
TAG_ID2[TAG_ID2["MI"] = 69] = "MI";
|
||
TAG_ID2[TAG_ID2["MO"] = 70] = "MO";
|
||
TAG_ID2[TAG_ID2["MN"] = 71] = "MN";
|
||
TAG_ID2[TAG_ID2["MS"] = 72] = "MS";
|
||
TAG_ID2[TAG_ID2["MTEXT"] = 73] = "MTEXT";
|
||
TAG_ID2[TAG_ID2["NAV"] = 74] = "NAV";
|
||
TAG_ID2[TAG_ID2["NOBR"] = 75] = "NOBR";
|
||
TAG_ID2[TAG_ID2["NOFRAMES"] = 76] = "NOFRAMES";
|
||
TAG_ID2[TAG_ID2["NOEMBED"] = 77] = "NOEMBED";
|
||
TAG_ID2[TAG_ID2["NOSCRIPT"] = 78] = "NOSCRIPT";
|
||
TAG_ID2[TAG_ID2["OBJECT"] = 79] = "OBJECT";
|
||
TAG_ID2[TAG_ID2["OL"] = 80] = "OL";
|
||
TAG_ID2[TAG_ID2["OPTGROUP"] = 81] = "OPTGROUP";
|
||
TAG_ID2[TAG_ID2["OPTION"] = 82] = "OPTION";
|
||
TAG_ID2[TAG_ID2["P"] = 83] = "P";
|
||
TAG_ID2[TAG_ID2["PARAM"] = 84] = "PARAM";
|
||
TAG_ID2[TAG_ID2["PLAINTEXT"] = 85] = "PLAINTEXT";
|
||
TAG_ID2[TAG_ID2["PRE"] = 86] = "PRE";
|
||
TAG_ID2[TAG_ID2["RB"] = 87] = "RB";
|
||
TAG_ID2[TAG_ID2["RP"] = 88] = "RP";
|
||
TAG_ID2[TAG_ID2["RT"] = 89] = "RT";
|
||
TAG_ID2[TAG_ID2["RTC"] = 90] = "RTC";
|
||
TAG_ID2[TAG_ID2["RUBY"] = 91] = "RUBY";
|
||
TAG_ID2[TAG_ID2["S"] = 92] = "S";
|
||
TAG_ID2[TAG_ID2["SCRIPT"] = 93] = "SCRIPT";
|
||
TAG_ID2[TAG_ID2["SECTION"] = 94] = "SECTION";
|
||
TAG_ID2[TAG_ID2["SELECT"] = 95] = "SELECT";
|
||
TAG_ID2[TAG_ID2["SOURCE"] = 96] = "SOURCE";
|
||
TAG_ID2[TAG_ID2["SMALL"] = 97] = "SMALL";
|
||
TAG_ID2[TAG_ID2["SPAN"] = 98] = "SPAN";
|
||
TAG_ID2[TAG_ID2["STRIKE"] = 99] = "STRIKE";
|
||
TAG_ID2[TAG_ID2["STRONG"] = 100] = "STRONG";
|
||
TAG_ID2[TAG_ID2["STYLE"] = 101] = "STYLE";
|
||
TAG_ID2[TAG_ID2["SUB"] = 102] = "SUB";
|
||
TAG_ID2[TAG_ID2["SUMMARY"] = 103] = "SUMMARY";
|
||
TAG_ID2[TAG_ID2["SUP"] = 104] = "SUP";
|
||
TAG_ID2[TAG_ID2["TABLE"] = 105] = "TABLE";
|
||
TAG_ID2[TAG_ID2["TBODY"] = 106] = "TBODY";
|
||
TAG_ID2[TAG_ID2["TEMPLATE"] = 107] = "TEMPLATE";
|
||
TAG_ID2[TAG_ID2["TEXTAREA"] = 108] = "TEXTAREA";
|
||
TAG_ID2[TAG_ID2["TFOOT"] = 109] = "TFOOT";
|
||
TAG_ID2[TAG_ID2["TD"] = 110] = "TD";
|
||
TAG_ID2[TAG_ID2["TH"] = 111] = "TH";
|
||
TAG_ID2[TAG_ID2["THEAD"] = 112] = "THEAD";
|
||
TAG_ID2[TAG_ID2["TITLE"] = 113] = "TITLE";
|
||
TAG_ID2[TAG_ID2["TR"] = 114] = "TR";
|
||
TAG_ID2[TAG_ID2["TRACK"] = 115] = "TRACK";
|
||
TAG_ID2[TAG_ID2["TT"] = 116] = "TT";
|
||
TAG_ID2[TAG_ID2["U"] = 117] = "U";
|
||
TAG_ID2[TAG_ID2["UL"] = 118] = "UL";
|
||
TAG_ID2[TAG_ID2["SVG"] = 119] = "SVG";
|
||
TAG_ID2[TAG_ID2["VAR"] = 120] = "VAR";
|
||
TAG_ID2[TAG_ID2["WBR"] = 121] = "WBR";
|
||
TAG_ID2[TAG_ID2["XMP"] = 122] = "XMP";
|
||
})(TAG_ID = TAG_ID || (TAG_ID = {}));
|
||
var TAG_NAME_TO_ID = /* @__PURE__ */ new Map([
|
||
[TAG_NAMES.A, TAG_ID.A],
|
||
[TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],
|
||
[TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],
|
||
[TAG_NAMES.APPLET, TAG_ID.APPLET],
|
||
[TAG_NAMES.AREA, TAG_ID.AREA],
|
||
[TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],
|
||
[TAG_NAMES.ASIDE, TAG_ID.ASIDE],
|
||
[TAG_NAMES.B, TAG_ID.B],
|
||
[TAG_NAMES.BASE, TAG_ID.BASE],
|
||
[TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],
|
||
[TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],
|
||
[TAG_NAMES.BIG, TAG_ID.BIG],
|
||
[TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],
|
||
[TAG_NAMES.BODY, TAG_ID.BODY],
|
||
[TAG_NAMES.BR, TAG_ID.BR],
|
||
[TAG_NAMES.BUTTON, TAG_ID.BUTTON],
|
||
[TAG_NAMES.CAPTION, TAG_ID.CAPTION],
|
||
[TAG_NAMES.CENTER, TAG_ID.CENTER],
|
||
[TAG_NAMES.CODE, TAG_ID.CODE],
|
||
[TAG_NAMES.COL, TAG_ID.COL],
|
||
[TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],
|
||
[TAG_NAMES.DD, TAG_ID.DD],
|
||
[TAG_NAMES.DESC, TAG_ID.DESC],
|
||
[TAG_NAMES.DETAILS, TAG_ID.DETAILS],
|
||
[TAG_NAMES.DIALOG, TAG_ID.DIALOG],
|
||
[TAG_NAMES.DIR, TAG_ID.DIR],
|
||
[TAG_NAMES.DIV, TAG_ID.DIV],
|
||
[TAG_NAMES.DL, TAG_ID.DL],
|
||
[TAG_NAMES.DT, TAG_ID.DT],
|
||
[TAG_NAMES.EM, TAG_ID.EM],
|
||
[TAG_NAMES.EMBED, TAG_ID.EMBED],
|
||
[TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],
|
||
[TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],
|
||
[TAG_NAMES.FIGURE, TAG_ID.FIGURE],
|
||
[TAG_NAMES.FONT, TAG_ID.FONT],
|
||
[TAG_NAMES.FOOTER, TAG_ID.FOOTER],
|
||
[TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],
|
||
[TAG_NAMES.FORM, TAG_ID.FORM],
|
||
[TAG_NAMES.FRAME, TAG_ID.FRAME],
|
||
[TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],
|
||
[TAG_NAMES.H1, TAG_ID.H1],
|
||
[TAG_NAMES.H2, TAG_ID.H2],
|
||
[TAG_NAMES.H3, TAG_ID.H3],
|
||
[TAG_NAMES.H4, TAG_ID.H4],
|
||
[TAG_NAMES.H5, TAG_ID.H5],
|
||
[TAG_NAMES.H6, TAG_ID.H6],
|
||
[TAG_NAMES.HEAD, TAG_ID.HEAD],
|
||
[TAG_NAMES.HEADER, TAG_ID.HEADER],
|
||
[TAG_NAMES.HGROUP, TAG_ID.HGROUP],
|
||
[TAG_NAMES.HR, TAG_ID.HR],
|
||
[TAG_NAMES.HTML, TAG_ID.HTML],
|
||
[TAG_NAMES.I, TAG_ID.I],
|
||
[TAG_NAMES.IMG, TAG_ID.IMG],
|
||
[TAG_NAMES.IMAGE, TAG_ID.IMAGE],
|
||
[TAG_NAMES.INPUT, TAG_ID.INPUT],
|
||
[TAG_NAMES.IFRAME, TAG_ID.IFRAME],
|
||
[TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],
|
||
[TAG_NAMES.LABEL, TAG_ID.LABEL],
|
||
[TAG_NAMES.LI, TAG_ID.LI],
|
||
[TAG_NAMES.LINK, TAG_ID.LINK],
|
||
[TAG_NAMES.LISTING, TAG_ID.LISTING],
|
||
[TAG_NAMES.MAIN, TAG_ID.MAIN],
|
||
[TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],
|
||
[TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],
|
||
[TAG_NAMES.MATH, TAG_ID.MATH],
|
||
[TAG_NAMES.MENU, TAG_ID.MENU],
|
||
[TAG_NAMES.META, TAG_ID.META],
|
||
[TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],
|
||
[TAG_NAMES.MI, TAG_ID.MI],
|
||
[TAG_NAMES.MO, TAG_ID.MO],
|
||
[TAG_NAMES.MN, TAG_ID.MN],
|
||
[TAG_NAMES.MS, TAG_ID.MS],
|
||
[TAG_NAMES.MTEXT, TAG_ID.MTEXT],
|
||
[TAG_NAMES.NAV, TAG_ID.NAV],
|
||
[TAG_NAMES.NOBR, TAG_ID.NOBR],
|
||
[TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],
|
||
[TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],
|
||
[TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],
|
||
[TAG_NAMES.OBJECT, TAG_ID.OBJECT],
|
||
[TAG_NAMES.OL, TAG_ID.OL],
|
||
[TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],
|
||
[TAG_NAMES.OPTION, TAG_ID.OPTION],
|
||
[TAG_NAMES.P, TAG_ID.P],
|
||
[TAG_NAMES.PARAM, TAG_ID.PARAM],
|
||
[TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],
|
||
[TAG_NAMES.PRE, TAG_ID.PRE],
|
||
[TAG_NAMES.RB, TAG_ID.RB],
|
||
[TAG_NAMES.RP, TAG_ID.RP],
|
||
[TAG_NAMES.RT, TAG_ID.RT],
|
||
[TAG_NAMES.RTC, TAG_ID.RTC],
|
||
[TAG_NAMES.RUBY, TAG_ID.RUBY],
|
||
[TAG_NAMES.S, TAG_ID.S],
|
||
[TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],
|
||
[TAG_NAMES.SECTION, TAG_ID.SECTION],
|
||
[TAG_NAMES.SELECT, TAG_ID.SELECT],
|
||
[TAG_NAMES.SOURCE, TAG_ID.SOURCE],
|
||
[TAG_NAMES.SMALL, TAG_ID.SMALL],
|
||
[TAG_NAMES.SPAN, TAG_ID.SPAN],
|
||
[TAG_NAMES.STRIKE, TAG_ID.STRIKE],
|
||
[TAG_NAMES.STRONG, TAG_ID.STRONG],
|
||
[TAG_NAMES.STYLE, TAG_ID.STYLE],
|
||
[TAG_NAMES.SUB, TAG_ID.SUB],
|
||
[TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],
|
||
[TAG_NAMES.SUP, TAG_ID.SUP],
|
||
[TAG_NAMES.TABLE, TAG_ID.TABLE],
|
||
[TAG_NAMES.TBODY, TAG_ID.TBODY],
|
||
[TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],
|
||
[TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],
|
||
[TAG_NAMES.TFOOT, TAG_ID.TFOOT],
|
||
[TAG_NAMES.TD, TAG_ID.TD],
|
||
[TAG_NAMES.TH, TAG_ID.TH],
|
||
[TAG_NAMES.THEAD, TAG_ID.THEAD],
|
||
[TAG_NAMES.TITLE, TAG_ID.TITLE],
|
||
[TAG_NAMES.TR, TAG_ID.TR],
|
||
[TAG_NAMES.TRACK, TAG_ID.TRACK],
|
||
[TAG_NAMES.TT, TAG_ID.TT],
|
||
[TAG_NAMES.U, TAG_ID.U],
|
||
[TAG_NAMES.UL, TAG_ID.UL],
|
||
[TAG_NAMES.SVG, TAG_ID.SVG],
|
||
[TAG_NAMES.VAR, TAG_ID.VAR],
|
||
[TAG_NAMES.WBR, TAG_ID.WBR],
|
||
[TAG_NAMES.XMP, TAG_ID.XMP]
|
||
]);
|
||
function getTagID(tagName) {
|
||
var _a2;
|
||
return (_a2 = TAG_NAME_TO_ID.get(tagName)) !== null && _a2 !== void 0 ? _a2 : TAG_ID.UNKNOWN;
|
||
}
|
||
var $2 = TAG_ID;
|
||
var SPECIAL_ELEMENTS = {
|
||
[NS.HTML]: /* @__PURE__ */ new Set([
|
||
$2.ADDRESS,
|
||
$2.APPLET,
|
||
$2.AREA,
|
||
$2.ARTICLE,
|
||
$2.ASIDE,
|
||
$2.BASE,
|
||
$2.BASEFONT,
|
||
$2.BGSOUND,
|
||
$2.BLOCKQUOTE,
|
||
$2.BODY,
|
||
$2.BR,
|
||
$2.BUTTON,
|
||
$2.CAPTION,
|
||
$2.CENTER,
|
||
$2.COL,
|
||
$2.COLGROUP,
|
||
$2.DD,
|
||
$2.DETAILS,
|
||
$2.DIR,
|
||
$2.DIV,
|
||
$2.DL,
|
||
$2.DT,
|
||
$2.EMBED,
|
||
$2.FIELDSET,
|
||
$2.FIGCAPTION,
|
||
$2.FIGURE,
|
||
$2.FOOTER,
|
||
$2.FORM,
|
||
$2.FRAME,
|
||
$2.FRAMESET,
|
||
$2.H1,
|
||
$2.H2,
|
||
$2.H3,
|
||
$2.H4,
|
||
$2.H5,
|
||
$2.H6,
|
||
$2.HEAD,
|
||
$2.HEADER,
|
||
$2.HGROUP,
|
||
$2.HR,
|
||
$2.HTML,
|
||
$2.IFRAME,
|
||
$2.IMG,
|
||
$2.INPUT,
|
||
$2.LI,
|
||
$2.LINK,
|
||
$2.LISTING,
|
||
$2.MAIN,
|
||
$2.MARQUEE,
|
||
$2.MENU,
|
||
$2.META,
|
||
$2.NAV,
|
||
$2.NOEMBED,
|
||
$2.NOFRAMES,
|
||
$2.NOSCRIPT,
|
||
$2.OBJECT,
|
||
$2.OL,
|
||
$2.P,
|
||
$2.PARAM,
|
||
$2.PLAINTEXT,
|
||
$2.PRE,
|
||
$2.SCRIPT,
|
||
$2.SECTION,
|
||
$2.SELECT,
|
||
$2.SOURCE,
|
||
$2.STYLE,
|
||
$2.SUMMARY,
|
||
$2.TABLE,
|
||
$2.TBODY,
|
||
$2.TD,
|
||
$2.TEMPLATE,
|
||
$2.TEXTAREA,
|
||
$2.TFOOT,
|
||
$2.TH,
|
||
$2.THEAD,
|
||
$2.TITLE,
|
||
$2.TR,
|
||
$2.TRACK,
|
||
$2.UL,
|
||
$2.WBR,
|
||
$2.XMP
|
||
]),
|
||
[NS.MATHML]: /* @__PURE__ */ new Set([$2.MI, $2.MO, $2.MN, $2.MS, $2.MTEXT, $2.ANNOTATION_XML]),
|
||
[NS.SVG]: /* @__PURE__ */ new Set([$2.TITLE, $2.FOREIGN_OBJECT, $2.DESC]),
|
||
[NS.XLINK]: /* @__PURE__ */ new Set(),
|
||
[NS.XML]: /* @__PURE__ */ new Set(),
|
||
[NS.XMLNS]: /* @__PURE__ */ new Set()
|
||
};
|
||
function isNumberedHeader(tn) {
|
||
return tn === $2.H1 || tn === $2.H2 || tn === $2.H3 || tn === $2.H4 || tn === $2.H5 || tn === $2.H6;
|
||
}
|
||
var UNESCAPED_TEXT = /* @__PURE__ */ new Set([
|
||
TAG_NAMES.STYLE,
|
||
TAG_NAMES.SCRIPT,
|
||
TAG_NAMES.XMP,
|
||
TAG_NAMES.IFRAME,
|
||
TAG_NAMES.NOEMBED,
|
||
TAG_NAMES.NOFRAMES,
|
||
TAG_NAMES.PLAINTEXT
|
||
]);
|
||
function hasUnescapedText(tn, scriptingEnabled) {
|
||
return UNESCAPED_TEXT.has(tn) || scriptingEnabled && tn === TAG_NAMES.NOSCRIPT;
|
||
}
|
||
|
||
// node_modules/parse5/dist/tokenizer/index.js
|
||
var C1_CONTROLS_REFERENCE_REPLACEMENTS = /* @__PURE__ */ new Map([
|
||
[128, 8364],
|
||
[130, 8218],
|
||
[131, 402],
|
||
[132, 8222],
|
||
[133, 8230],
|
||
[134, 8224],
|
||
[135, 8225],
|
||
[136, 710],
|
||
[137, 8240],
|
||
[138, 352],
|
||
[139, 8249],
|
||
[140, 338],
|
||
[142, 381],
|
||
[145, 8216],
|
||
[146, 8217],
|
||
[147, 8220],
|
||
[148, 8221],
|
||
[149, 8226],
|
||
[150, 8211],
|
||
[151, 8212],
|
||
[152, 732],
|
||
[153, 8482],
|
||
[154, 353],
|
||
[155, 8250],
|
||
[156, 339],
|
||
[158, 382],
|
||
[159, 376]
|
||
]);
|
||
var State;
|
||
(function(State2) {
|
||
State2[State2["DATA"] = 0] = "DATA";
|
||
State2[State2["RCDATA"] = 1] = "RCDATA";
|
||
State2[State2["RAWTEXT"] = 2] = "RAWTEXT";
|
||
State2[State2["SCRIPT_DATA"] = 3] = "SCRIPT_DATA";
|
||
State2[State2["PLAINTEXT"] = 4] = "PLAINTEXT";
|
||
State2[State2["TAG_OPEN"] = 5] = "TAG_OPEN";
|
||
State2[State2["END_TAG_OPEN"] = 6] = "END_TAG_OPEN";
|
||
State2[State2["TAG_NAME"] = 7] = "TAG_NAME";
|
||
State2[State2["RCDATA_LESS_THAN_SIGN"] = 8] = "RCDATA_LESS_THAN_SIGN";
|
||
State2[State2["RCDATA_END_TAG_OPEN"] = 9] = "RCDATA_END_TAG_OPEN";
|
||
State2[State2["RCDATA_END_TAG_NAME"] = 10] = "RCDATA_END_TAG_NAME";
|
||
State2[State2["RAWTEXT_LESS_THAN_SIGN"] = 11] = "RAWTEXT_LESS_THAN_SIGN";
|
||
State2[State2["RAWTEXT_END_TAG_OPEN"] = 12] = "RAWTEXT_END_TAG_OPEN";
|
||
State2[State2["RAWTEXT_END_TAG_NAME"] = 13] = "RAWTEXT_END_TAG_NAME";
|
||
State2[State2["SCRIPT_DATA_LESS_THAN_SIGN"] = 14] = "SCRIPT_DATA_LESS_THAN_SIGN";
|
||
State2[State2["SCRIPT_DATA_END_TAG_OPEN"] = 15] = "SCRIPT_DATA_END_TAG_OPEN";
|
||
State2[State2["SCRIPT_DATA_END_TAG_NAME"] = 16] = "SCRIPT_DATA_END_TAG_NAME";
|
||
State2[State2["SCRIPT_DATA_ESCAPE_START"] = 17] = "SCRIPT_DATA_ESCAPE_START";
|
||
State2[State2["SCRIPT_DATA_ESCAPE_START_DASH"] = 18] = "SCRIPT_DATA_ESCAPE_START_DASH";
|
||
State2[State2["SCRIPT_DATA_ESCAPED"] = 19] = "SCRIPT_DATA_ESCAPED";
|
||
State2[State2["SCRIPT_DATA_ESCAPED_DASH"] = 20] = "SCRIPT_DATA_ESCAPED_DASH";
|
||
State2[State2["SCRIPT_DATA_ESCAPED_DASH_DASH"] = 21] = "SCRIPT_DATA_ESCAPED_DASH_DASH";
|
||
State2[State2["SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN"] = 22] = "SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN";
|
||
State2[State2["SCRIPT_DATA_ESCAPED_END_TAG_OPEN"] = 23] = "SCRIPT_DATA_ESCAPED_END_TAG_OPEN";
|
||
State2[State2["SCRIPT_DATA_ESCAPED_END_TAG_NAME"] = 24] = "SCRIPT_DATA_ESCAPED_END_TAG_NAME";
|
||
State2[State2["SCRIPT_DATA_DOUBLE_ESCAPE_START"] = 25] = "SCRIPT_DATA_DOUBLE_ESCAPE_START";
|
||
State2[State2["SCRIPT_DATA_DOUBLE_ESCAPED"] = 26] = "SCRIPT_DATA_DOUBLE_ESCAPED";
|
||
State2[State2["SCRIPT_DATA_DOUBLE_ESCAPED_DASH"] = 27] = "SCRIPT_DATA_DOUBLE_ESCAPED_DASH";
|
||
State2[State2["SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH"] = 28] = "SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH";
|
||
State2[State2["SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN"] = 29] = "SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN";
|
||
State2[State2["SCRIPT_DATA_DOUBLE_ESCAPE_END"] = 30] = "SCRIPT_DATA_DOUBLE_ESCAPE_END";
|
||
State2[State2["BEFORE_ATTRIBUTE_NAME"] = 31] = "BEFORE_ATTRIBUTE_NAME";
|
||
State2[State2["ATTRIBUTE_NAME"] = 32] = "ATTRIBUTE_NAME";
|
||
State2[State2["AFTER_ATTRIBUTE_NAME"] = 33] = "AFTER_ATTRIBUTE_NAME";
|
||
State2[State2["BEFORE_ATTRIBUTE_VALUE"] = 34] = "BEFORE_ATTRIBUTE_VALUE";
|
||
State2[State2["ATTRIBUTE_VALUE_DOUBLE_QUOTED"] = 35] = "ATTRIBUTE_VALUE_DOUBLE_QUOTED";
|
||
State2[State2["ATTRIBUTE_VALUE_SINGLE_QUOTED"] = 36] = "ATTRIBUTE_VALUE_SINGLE_QUOTED";
|
||
State2[State2["ATTRIBUTE_VALUE_UNQUOTED"] = 37] = "ATTRIBUTE_VALUE_UNQUOTED";
|
||
State2[State2["AFTER_ATTRIBUTE_VALUE_QUOTED"] = 38] = "AFTER_ATTRIBUTE_VALUE_QUOTED";
|
||
State2[State2["SELF_CLOSING_START_TAG"] = 39] = "SELF_CLOSING_START_TAG";
|
||
State2[State2["BOGUS_COMMENT"] = 40] = "BOGUS_COMMENT";
|
||
State2[State2["MARKUP_DECLARATION_OPEN"] = 41] = "MARKUP_DECLARATION_OPEN";
|
||
State2[State2["COMMENT_START"] = 42] = "COMMENT_START";
|
||
State2[State2["COMMENT_START_DASH"] = 43] = "COMMENT_START_DASH";
|
||
State2[State2["COMMENT"] = 44] = "COMMENT";
|
||
State2[State2["COMMENT_LESS_THAN_SIGN"] = 45] = "COMMENT_LESS_THAN_SIGN";
|
||
State2[State2["COMMENT_LESS_THAN_SIGN_BANG"] = 46] = "COMMENT_LESS_THAN_SIGN_BANG";
|
||
State2[State2["COMMENT_LESS_THAN_SIGN_BANG_DASH"] = 47] = "COMMENT_LESS_THAN_SIGN_BANG_DASH";
|
||
State2[State2["COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH"] = 48] = "COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH";
|
||
State2[State2["COMMENT_END_DASH"] = 49] = "COMMENT_END_DASH";
|
||
State2[State2["COMMENT_END"] = 50] = "COMMENT_END";
|
||
State2[State2["COMMENT_END_BANG"] = 51] = "COMMENT_END_BANG";
|
||
State2[State2["DOCTYPE"] = 52] = "DOCTYPE";
|
||
State2[State2["BEFORE_DOCTYPE_NAME"] = 53] = "BEFORE_DOCTYPE_NAME";
|
||
State2[State2["DOCTYPE_NAME"] = 54] = "DOCTYPE_NAME";
|
||
State2[State2["AFTER_DOCTYPE_NAME"] = 55] = "AFTER_DOCTYPE_NAME";
|
||
State2[State2["AFTER_DOCTYPE_PUBLIC_KEYWORD"] = 56] = "AFTER_DOCTYPE_PUBLIC_KEYWORD";
|
||
State2[State2["BEFORE_DOCTYPE_PUBLIC_IDENTIFIER"] = 57] = "BEFORE_DOCTYPE_PUBLIC_IDENTIFIER";
|
||
State2[State2["DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED"] = 58] = "DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED";
|
||
State2[State2["DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED"] = 59] = "DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED";
|
||
State2[State2["AFTER_DOCTYPE_PUBLIC_IDENTIFIER"] = 60] = "AFTER_DOCTYPE_PUBLIC_IDENTIFIER";
|
||
State2[State2["BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS"] = 61] = "BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS";
|
||
State2[State2["AFTER_DOCTYPE_SYSTEM_KEYWORD"] = 62] = "AFTER_DOCTYPE_SYSTEM_KEYWORD";
|
||
State2[State2["BEFORE_DOCTYPE_SYSTEM_IDENTIFIER"] = 63] = "BEFORE_DOCTYPE_SYSTEM_IDENTIFIER";
|
||
State2[State2["DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED"] = 64] = "DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED";
|
||
State2[State2["DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED"] = 65] = "DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED";
|
||
State2[State2["AFTER_DOCTYPE_SYSTEM_IDENTIFIER"] = 66] = "AFTER_DOCTYPE_SYSTEM_IDENTIFIER";
|
||
State2[State2["BOGUS_DOCTYPE"] = 67] = "BOGUS_DOCTYPE";
|
||
State2[State2["CDATA_SECTION"] = 68] = "CDATA_SECTION";
|
||
State2[State2["CDATA_SECTION_BRACKET"] = 69] = "CDATA_SECTION_BRACKET";
|
||
State2[State2["CDATA_SECTION_END"] = 70] = "CDATA_SECTION_END";
|
||
State2[State2["CHARACTER_REFERENCE"] = 71] = "CHARACTER_REFERENCE";
|
||
State2[State2["NAMED_CHARACTER_REFERENCE"] = 72] = "NAMED_CHARACTER_REFERENCE";
|
||
State2[State2["AMBIGUOUS_AMPERSAND"] = 73] = "AMBIGUOUS_AMPERSAND";
|
||
State2[State2["NUMERIC_CHARACTER_REFERENCE"] = 74] = "NUMERIC_CHARACTER_REFERENCE";
|
||
State2[State2["HEXADEMICAL_CHARACTER_REFERENCE_START"] = 75] = "HEXADEMICAL_CHARACTER_REFERENCE_START";
|
||
State2[State2["HEXADEMICAL_CHARACTER_REFERENCE"] = 76] = "HEXADEMICAL_CHARACTER_REFERENCE";
|
||
State2[State2["DECIMAL_CHARACTER_REFERENCE"] = 77] = "DECIMAL_CHARACTER_REFERENCE";
|
||
State2[State2["NUMERIC_CHARACTER_REFERENCE_END"] = 78] = "NUMERIC_CHARACTER_REFERENCE_END";
|
||
})(State || (State = {}));
|
||
var TokenizerMode = {
|
||
DATA: State.DATA,
|
||
RCDATA: State.RCDATA,
|
||
RAWTEXT: State.RAWTEXT,
|
||
SCRIPT_DATA: State.SCRIPT_DATA,
|
||
PLAINTEXT: State.PLAINTEXT,
|
||
CDATA_SECTION: State.CDATA_SECTION
|
||
};
|
||
function isAsciiDigit(cp) {
|
||
return cp >= CODE_POINTS.DIGIT_0 && cp <= CODE_POINTS.DIGIT_9;
|
||
}
|
||
function isAsciiUpper(cp) {
|
||
return cp >= CODE_POINTS.LATIN_CAPITAL_A && cp <= CODE_POINTS.LATIN_CAPITAL_Z;
|
||
}
|
||
function isAsciiLower(cp) {
|
||
return cp >= CODE_POINTS.LATIN_SMALL_A && cp <= CODE_POINTS.LATIN_SMALL_Z;
|
||
}
|
||
function isAsciiLetter(cp) {
|
||
return isAsciiLower(cp) || isAsciiUpper(cp);
|
||
}
|
||
function isAsciiAlphaNumeric2(cp) {
|
||
return isAsciiLetter(cp) || isAsciiDigit(cp);
|
||
}
|
||
function isAsciiUpperHexDigit(cp) {
|
||
return cp >= CODE_POINTS.LATIN_CAPITAL_A && cp <= CODE_POINTS.LATIN_CAPITAL_F;
|
||
}
|
||
function isAsciiLowerHexDigit(cp) {
|
||
return cp >= CODE_POINTS.LATIN_SMALL_A && cp <= CODE_POINTS.LATIN_SMALL_F;
|
||
}
|
||
function isAsciiHexDigit(cp) {
|
||
return isAsciiDigit(cp) || isAsciiUpperHexDigit(cp) || isAsciiLowerHexDigit(cp);
|
||
}
|
||
function toAsciiLower(cp) {
|
||
return cp + 32;
|
||
}
|
||
function isWhitespace(cp) {
|
||
return cp === CODE_POINTS.SPACE || cp === CODE_POINTS.LINE_FEED || cp === CODE_POINTS.TABULATION || cp === CODE_POINTS.FORM_FEED;
|
||
}
|
||
function isEntityInAttributeInvalidEnd2(nextCp) {
|
||
return nextCp === CODE_POINTS.EQUALS_SIGN || isAsciiAlphaNumeric2(nextCp);
|
||
}
|
||
function isScriptDataDoubleEscapeSequenceEnd(cp) {
|
||
return isWhitespace(cp) || cp === CODE_POINTS.SOLIDUS || cp === CODE_POINTS.GREATER_THAN_SIGN;
|
||
}
|
||
var Tokenizer = class {
|
||
constructor(options, handler) {
|
||
this.options = options;
|
||
this.handler = handler;
|
||
this.paused = false;
|
||
this.inLoop = false;
|
||
this.inForeignNode = false;
|
||
this.lastStartTagName = "";
|
||
this.active = false;
|
||
this.state = State.DATA;
|
||
this.returnState = State.DATA;
|
||
this.charRefCode = -1;
|
||
this.consumedAfterSnapshot = -1;
|
||
this.currentCharacterToken = null;
|
||
this.currentToken = null;
|
||
this.currentAttr = { name: "", value: "" };
|
||
this.preprocessor = new Preprocessor(handler);
|
||
this.currentLocation = this.getCurrentLocation(-1);
|
||
}
|
||
//Errors
|
||
_err(code) {
|
||
var _a2, _b;
|
||
(_b = (_a2 = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a2, this.preprocessor.getError(code));
|
||
}
|
||
// NOTE: `offset` may never run across line boundaries.
|
||
getCurrentLocation(offset) {
|
||
if (!this.options.sourceCodeLocationInfo) {
|
||
return null;
|
||
}
|
||
return {
|
||
startLine: this.preprocessor.line,
|
||
startCol: this.preprocessor.col - offset,
|
||
startOffset: this.preprocessor.offset - offset,
|
||
endLine: -1,
|
||
endCol: -1,
|
||
endOffset: -1
|
||
};
|
||
}
|
||
_runParsingLoop() {
|
||
if (this.inLoop)
|
||
return;
|
||
this.inLoop = true;
|
||
while (this.active && !this.paused) {
|
||
this.consumedAfterSnapshot = 0;
|
||
const cp = this._consume();
|
||
if (!this._ensureHibernation()) {
|
||
this._callState(cp);
|
||
}
|
||
}
|
||
this.inLoop = false;
|
||
}
|
||
//API
|
||
pause() {
|
||
this.paused = true;
|
||
}
|
||
resume(writeCallback) {
|
||
if (!this.paused) {
|
||
throw new Error("Parser was already resumed");
|
||
}
|
||
this.paused = false;
|
||
if (this.inLoop)
|
||
return;
|
||
this._runParsingLoop();
|
||
if (!this.paused) {
|
||
writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();
|
||
}
|
||
}
|
||
write(chunk, isLastChunk, writeCallback) {
|
||
this.active = true;
|
||
this.preprocessor.write(chunk, isLastChunk);
|
||
this._runParsingLoop();
|
||
if (!this.paused) {
|
||
writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();
|
||
}
|
||
}
|
||
insertHtmlAtCurrentPos(chunk) {
|
||
this.active = true;
|
||
this.preprocessor.insertHtmlAtCurrentPos(chunk);
|
||
this._runParsingLoop();
|
||
}
|
||
//Hibernation
|
||
_ensureHibernation() {
|
||
if (this.preprocessor.endOfChunkHit) {
|
||
this._unconsume(this.consumedAfterSnapshot);
|
||
this.active = false;
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
//Consumption
|
||
_consume() {
|
||
this.consumedAfterSnapshot++;
|
||
return this.preprocessor.advance();
|
||
}
|
||
_unconsume(count) {
|
||
this.consumedAfterSnapshot -= count;
|
||
this.preprocessor.retreat(count);
|
||
}
|
||
_reconsumeInState(state, cp) {
|
||
this.state = state;
|
||
this._callState(cp);
|
||
}
|
||
_advanceBy(count) {
|
||
this.consumedAfterSnapshot += count;
|
||
for (let i2 = 0; i2 < count; i2++) {
|
||
this.preprocessor.advance();
|
||
}
|
||
}
|
||
_consumeSequenceIfMatch(pattern, caseSensitive) {
|
||
if (this.preprocessor.startsWith(pattern, caseSensitive)) {
|
||
this._advanceBy(pattern.length - 1);
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
//Token creation
|
||
_createStartTagToken() {
|
||
this.currentToken = {
|
||
type: TokenType.START_TAG,
|
||
tagName: "",
|
||
tagID: TAG_ID.UNKNOWN,
|
||
selfClosing: false,
|
||
ackSelfClosing: false,
|
||
attrs: [],
|
||
location: this.getCurrentLocation(1)
|
||
};
|
||
}
|
||
_createEndTagToken() {
|
||
this.currentToken = {
|
||
type: TokenType.END_TAG,
|
||
tagName: "",
|
||
tagID: TAG_ID.UNKNOWN,
|
||
selfClosing: false,
|
||
ackSelfClosing: false,
|
||
attrs: [],
|
||
location: this.getCurrentLocation(2)
|
||
};
|
||
}
|
||
_createCommentToken(offset) {
|
||
this.currentToken = {
|
||
type: TokenType.COMMENT,
|
||
data: "",
|
||
location: this.getCurrentLocation(offset)
|
||
};
|
||
}
|
||
_createDoctypeToken(initialName) {
|
||
this.currentToken = {
|
||
type: TokenType.DOCTYPE,
|
||
name: initialName,
|
||
forceQuirks: false,
|
||
publicId: null,
|
||
systemId: null,
|
||
location: this.currentLocation
|
||
};
|
||
}
|
||
_createCharacterToken(type, chars) {
|
||
this.currentCharacterToken = {
|
||
type,
|
||
chars,
|
||
location: this.currentLocation
|
||
};
|
||
}
|
||
//Tag attributes
|
||
_createAttr(attrNameFirstCh) {
|
||
this.currentAttr = {
|
||
name: attrNameFirstCh,
|
||
value: ""
|
||
};
|
||
this.currentLocation = this.getCurrentLocation(0);
|
||
}
|
||
_leaveAttrName() {
|
||
var _a2;
|
||
var _b;
|
||
const token = this.currentToken;
|
||
if (getTokenAttr(token, this.currentAttr.name) === null) {
|
||
token.attrs.push(this.currentAttr);
|
||
if (token.location && this.currentLocation) {
|
||
const attrLocations = (_a2 = (_b = token.location).attrs) !== null && _a2 !== void 0 ? _a2 : _b.attrs = /* @__PURE__ */ Object.create(null);
|
||
attrLocations[this.currentAttr.name] = this.currentLocation;
|
||
this._leaveAttrValue();
|
||
}
|
||
} else {
|
||
this._err(ERR.duplicateAttribute);
|
||
}
|
||
}
|
||
_leaveAttrValue() {
|
||
if (this.currentLocation) {
|
||
this.currentLocation.endLine = this.preprocessor.line;
|
||
this.currentLocation.endCol = this.preprocessor.col;
|
||
this.currentLocation.endOffset = this.preprocessor.offset;
|
||
}
|
||
}
|
||
//Token emission
|
||
prepareToken(ct2) {
|
||
this._emitCurrentCharacterToken(ct2.location);
|
||
this.currentToken = null;
|
||
if (ct2.location) {
|
||
ct2.location.endLine = this.preprocessor.line;
|
||
ct2.location.endCol = this.preprocessor.col + 1;
|
||
ct2.location.endOffset = this.preprocessor.offset + 1;
|
||
}
|
||
this.currentLocation = this.getCurrentLocation(-1);
|
||
}
|
||
emitCurrentTagToken() {
|
||
const ct2 = this.currentToken;
|
||
this.prepareToken(ct2);
|
||
ct2.tagID = getTagID(ct2.tagName);
|
||
if (ct2.type === TokenType.START_TAG) {
|
||
this.lastStartTagName = ct2.tagName;
|
||
this.handler.onStartTag(ct2);
|
||
} else {
|
||
if (ct2.attrs.length > 0) {
|
||
this._err(ERR.endTagWithAttributes);
|
||
}
|
||
if (ct2.selfClosing) {
|
||
this._err(ERR.endTagWithTrailingSolidus);
|
||
}
|
||
this.handler.onEndTag(ct2);
|
||
}
|
||
this.preprocessor.dropParsedChunk();
|
||
}
|
||
emitCurrentComment(ct2) {
|
||
this.prepareToken(ct2);
|
||
this.handler.onComment(ct2);
|
||
this.preprocessor.dropParsedChunk();
|
||
}
|
||
emitCurrentDoctype(ct2) {
|
||
this.prepareToken(ct2);
|
||
this.handler.onDoctype(ct2);
|
||
this.preprocessor.dropParsedChunk();
|
||
}
|
||
_emitCurrentCharacterToken(nextLocation) {
|
||
if (this.currentCharacterToken) {
|
||
if (nextLocation && this.currentCharacterToken.location) {
|
||
this.currentCharacterToken.location.endLine = nextLocation.startLine;
|
||
this.currentCharacterToken.location.endCol = nextLocation.startCol;
|
||
this.currentCharacterToken.location.endOffset = nextLocation.startOffset;
|
||
}
|
||
switch (this.currentCharacterToken.type) {
|
||
case TokenType.CHARACTER: {
|
||
this.handler.onCharacter(this.currentCharacterToken);
|
||
break;
|
||
}
|
||
case TokenType.NULL_CHARACTER: {
|
||
this.handler.onNullCharacter(this.currentCharacterToken);
|
||
break;
|
||
}
|
||
case TokenType.WHITESPACE_CHARACTER: {
|
||
this.handler.onWhitespaceCharacter(this.currentCharacterToken);
|
||
break;
|
||
}
|
||
}
|
||
this.currentCharacterToken = null;
|
||
}
|
||
}
|
||
_emitEOFToken() {
|
||
const location2 = this.getCurrentLocation(0);
|
||
if (location2) {
|
||
location2.endLine = location2.startLine;
|
||
location2.endCol = location2.startCol;
|
||
location2.endOffset = location2.startOffset;
|
||
}
|
||
this._emitCurrentCharacterToken(location2);
|
||
this.handler.onEof({ type: TokenType.EOF, location: location2 });
|
||
this.active = false;
|
||
}
|
||
//Characters emission
|
||
//OPTIMIZATION: specification uses only one type of character tokens (one token per character).
|
||
//This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.
|
||
//If we have a sequence of characters that belong to the same group, the parser can process it
|
||
//as a single solid character token.
|
||
//So, there are 3 types of character tokens in parse5:
|
||
//1)TokenType.NULL_CHARACTER - \u0000-character sequences (e.g. '\u0000\u0000\u0000')
|
||
//2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\n \r\t \f')
|
||
//3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')
|
||
_appendCharToCurrentCharacterToken(type, ch) {
|
||
if (this.currentCharacterToken) {
|
||
if (this.currentCharacterToken.type !== type) {
|
||
this.currentLocation = this.getCurrentLocation(0);
|
||
this._emitCurrentCharacterToken(this.currentLocation);
|
||
this.preprocessor.dropParsedChunk();
|
||
} else {
|
||
this.currentCharacterToken.chars += ch;
|
||
return;
|
||
}
|
||
}
|
||
this._createCharacterToken(type, ch);
|
||
}
|
||
_emitCodePoint(cp) {
|
||
const type = isWhitespace(cp) ? TokenType.WHITESPACE_CHARACTER : cp === CODE_POINTS.NULL ? TokenType.NULL_CHARACTER : TokenType.CHARACTER;
|
||
this._appendCharToCurrentCharacterToken(type, String.fromCodePoint(cp));
|
||
}
|
||
//NOTE: used when we emit characters explicitly.
|
||
//This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.
|
||
_emitChars(ch) {
|
||
this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);
|
||
}
|
||
// Character reference helpers
|
||
_matchNamedCharacterReference(cp) {
|
||
let result = null;
|
||
let excess = 0;
|
||
let withoutSemicolon = false;
|
||
for (let i2 = 0, current = decode_data_html_default[0]; i2 >= 0; cp = this._consume()) {
|
||
i2 = determineBranch(decode_data_html_default, current, i2 + 1, cp);
|
||
if (i2 < 0)
|
||
break;
|
||
excess += 1;
|
||
current = decode_data_html_default[i2];
|
||
const masked = current & BinTrieFlags.VALUE_LENGTH;
|
||
if (masked) {
|
||
const valueLength = (masked >> 14) - 1;
|
||
if (cp !== CODE_POINTS.SEMICOLON && this._isCharacterReferenceInAttribute() && isEntityInAttributeInvalidEnd2(this.preprocessor.peek(1))) {
|
||
result = [CODE_POINTS.AMPERSAND];
|
||
i2 += valueLength;
|
||
} else {
|
||
result = valueLength === 0 ? [decode_data_html_default[i2] & ~BinTrieFlags.VALUE_LENGTH] : valueLength === 1 ? [decode_data_html_default[++i2]] : [decode_data_html_default[++i2], decode_data_html_default[++i2]];
|
||
excess = 0;
|
||
withoutSemicolon = cp !== CODE_POINTS.SEMICOLON;
|
||
}
|
||
if (valueLength === 0) {
|
||
this._consume();
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
this._unconsume(excess);
|
||
if (withoutSemicolon && !this.preprocessor.endOfChunkHit) {
|
||
this._err(ERR.missingSemicolonAfterCharacterReference);
|
||
}
|
||
this._unconsume(1);
|
||
return result;
|
||
}
|
||
_isCharacterReferenceInAttribute() {
|
||
return this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED || this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED || this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED;
|
||
}
|
||
_flushCodePointConsumedAsCharacterReference(cp) {
|
||
if (this._isCharacterReferenceInAttribute()) {
|
||
this.currentAttr.value += String.fromCodePoint(cp);
|
||
} else {
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
// Calling states this way turns out to be much faster than any other approach.
|
||
_callState(cp) {
|
||
switch (this.state) {
|
||
case State.DATA: {
|
||
this._stateData(cp);
|
||
break;
|
||
}
|
||
case State.RCDATA: {
|
||
this._stateRcdata(cp);
|
||
break;
|
||
}
|
||
case State.RAWTEXT: {
|
||
this._stateRawtext(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA: {
|
||
this._stateScriptData(cp);
|
||
break;
|
||
}
|
||
case State.PLAINTEXT: {
|
||
this._statePlaintext(cp);
|
||
break;
|
||
}
|
||
case State.TAG_OPEN: {
|
||
this._stateTagOpen(cp);
|
||
break;
|
||
}
|
||
case State.END_TAG_OPEN: {
|
||
this._stateEndTagOpen(cp);
|
||
break;
|
||
}
|
||
case State.TAG_NAME: {
|
||
this._stateTagName(cp);
|
||
break;
|
||
}
|
||
case State.RCDATA_LESS_THAN_SIGN: {
|
||
this._stateRcdataLessThanSign(cp);
|
||
break;
|
||
}
|
||
case State.RCDATA_END_TAG_OPEN: {
|
||
this._stateRcdataEndTagOpen(cp);
|
||
break;
|
||
}
|
||
case State.RCDATA_END_TAG_NAME: {
|
||
this._stateRcdataEndTagName(cp);
|
||
break;
|
||
}
|
||
case State.RAWTEXT_LESS_THAN_SIGN: {
|
||
this._stateRawtextLessThanSign(cp);
|
||
break;
|
||
}
|
||
case State.RAWTEXT_END_TAG_OPEN: {
|
||
this._stateRawtextEndTagOpen(cp);
|
||
break;
|
||
}
|
||
case State.RAWTEXT_END_TAG_NAME: {
|
||
this._stateRawtextEndTagName(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_LESS_THAN_SIGN: {
|
||
this._stateScriptDataLessThanSign(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_END_TAG_OPEN: {
|
||
this._stateScriptDataEndTagOpen(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_END_TAG_NAME: {
|
||
this._stateScriptDataEndTagName(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_ESCAPE_START: {
|
||
this._stateScriptDataEscapeStart(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_ESCAPE_START_DASH: {
|
||
this._stateScriptDataEscapeStartDash(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_ESCAPED: {
|
||
this._stateScriptDataEscaped(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_ESCAPED_DASH: {
|
||
this._stateScriptDataEscapedDash(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {
|
||
this._stateScriptDataEscapedDashDash(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {
|
||
this._stateScriptDataEscapedLessThanSign(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {
|
||
this._stateScriptDataEscapedEndTagOpen(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {
|
||
this._stateScriptDataEscapedEndTagName(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {
|
||
this._stateScriptDataDoubleEscapeStart(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_DOUBLE_ESCAPED: {
|
||
this._stateScriptDataDoubleEscaped(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {
|
||
this._stateScriptDataDoubleEscapedDash(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {
|
||
this._stateScriptDataDoubleEscapedDashDash(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {
|
||
this._stateScriptDataDoubleEscapedLessThanSign(cp);
|
||
break;
|
||
}
|
||
case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {
|
||
this._stateScriptDataDoubleEscapeEnd(cp);
|
||
break;
|
||
}
|
||
case State.BEFORE_ATTRIBUTE_NAME: {
|
||
this._stateBeforeAttributeName(cp);
|
||
break;
|
||
}
|
||
case State.ATTRIBUTE_NAME: {
|
||
this._stateAttributeName(cp);
|
||
break;
|
||
}
|
||
case State.AFTER_ATTRIBUTE_NAME: {
|
||
this._stateAfterAttributeName(cp);
|
||
break;
|
||
}
|
||
case State.BEFORE_ATTRIBUTE_VALUE: {
|
||
this._stateBeforeAttributeValue(cp);
|
||
break;
|
||
}
|
||
case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {
|
||
this._stateAttributeValueDoubleQuoted(cp);
|
||
break;
|
||
}
|
||
case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {
|
||
this._stateAttributeValueSingleQuoted(cp);
|
||
break;
|
||
}
|
||
case State.ATTRIBUTE_VALUE_UNQUOTED: {
|
||
this._stateAttributeValueUnquoted(cp);
|
||
break;
|
||
}
|
||
case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {
|
||
this._stateAfterAttributeValueQuoted(cp);
|
||
break;
|
||
}
|
||
case State.SELF_CLOSING_START_TAG: {
|
||
this._stateSelfClosingStartTag(cp);
|
||
break;
|
||
}
|
||
case State.BOGUS_COMMENT: {
|
||
this._stateBogusComment(cp);
|
||
break;
|
||
}
|
||
case State.MARKUP_DECLARATION_OPEN: {
|
||
this._stateMarkupDeclarationOpen(cp);
|
||
break;
|
||
}
|
||
case State.COMMENT_START: {
|
||
this._stateCommentStart(cp);
|
||
break;
|
||
}
|
||
case State.COMMENT_START_DASH: {
|
||
this._stateCommentStartDash(cp);
|
||
break;
|
||
}
|
||
case State.COMMENT: {
|
||
this._stateComment(cp);
|
||
break;
|
||
}
|
||
case State.COMMENT_LESS_THAN_SIGN: {
|
||
this._stateCommentLessThanSign(cp);
|
||
break;
|
||
}
|
||
case State.COMMENT_LESS_THAN_SIGN_BANG: {
|
||
this._stateCommentLessThanSignBang(cp);
|
||
break;
|
||
}
|
||
case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {
|
||
this._stateCommentLessThanSignBangDash(cp);
|
||
break;
|
||
}
|
||
case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {
|
||
this._stateCommentLessThanSignBangDashDash(cp);
|
||
break;
|
||
}
|
||
case State.COMMENT_END_DASH: {
|
||
this._stateCommentEndDash(cp);
|
||
break;
|
||
}
|
||
case State.COMMENT_END: {
|
||
this._stateCommentEnd(cp);
|
||
break;
|
||
}
|
||
case State.COMMENT_END_BANG: {
|
||
this._stateCommentEndBang(cp);
|
||
break;
|
||
}
|
||
case State.DOCTYPE: {
|
||
this._stateDoctype(cp);
|
||
break;
|
||
}
|
||
case State.BEFORE_DOCTYPE_NAME: {
|
||
this._stateBeforeDoctypeName(cp);
|
||
break;
|
||
}
|
||
case State.DOCTYPE_NAME: {
|
||
this._stateDoctypeName(cp);
|
||
break;
|
||
}
|
||
case State.AFTER_DOCTYPE_NAME: {
|
||
this._stateAfterDoctypeName(cp);
|
||
break;
|
||
}
|
||
case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {
|
||
this._stateAfterDoctypePublicKeyword(cp);
|
||
break;
|
||
}
|
||
case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {
|
||
this._stateBeforeDoctypePublicIdentifier(cp);
|
||
break;
|
||
}
|
||
case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {
|
||
this._stateDoctypePublicIdentifierDoubleQuoted(cp);
|
||
break;
|
||
}
|
||
case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {
|
||
this._stateDoctypePublicIdentifierSingleQuoted(cp);
|
||
break;
|
||
}
|
||
case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {
|
||
this._stateAfterDoctypePublicIdentifier(cp);
|
||
break;
|
||
}
|
||
case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {
|
||
this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);
|
||
break;
|
||
}
|
||
case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {
|
||
this._stateAfterDoctypeSystemKeyword(cp);
|
||
break;
|
||
}
|
||
case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {
|
||
this._stateBeforeDoctypeSystemIdentifier(cp);
|
||
break;
|
||
}
|
||
case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {
|
||
this._stateDoctypeSystemIdentifierDoubleQuoted(cp);
|
||
break;
|
||
}
|
||
case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {
|
||
this._stateDoctypeSystemIdentifierSingleQuoted(cp);
|
||
break;
|
||
}
|
||
case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {
|
||
this._stateAfterDoctypeSystemIdentifier(cp);
|
||
break;
|
||
}
|
||
case State.BOGUS_DOCTYPE: {
|
||
this._stateBogusDoctype(cp);
|
||
break;
|
||
}
|
||
case State.CDATA_SECTION: {
|
||
this._stateCdataSection(cp);
|
||
break;
|
||
}
|
||
case State.CDATA_SECTION_BRACKET: {
|
||
this._stateCdataSectionBracket(cp);
|
||
break;
|
||
}
|
||
case State.CDATA_SECTION_END: {
|
||
this._stateCdataSectionEnd(cp);
|
||
break;
|
||
}
|
||
case State.CHARACTER_REFERENCE: {
|
||
this._stateCharacterReference(cp);
|
||
break;
|
||
}
|
||
case State.NAMED_CHARACTER_REFERENCE: {
|
||
this._stateNamedCharacterReference(cp);
|
||
break;
|
||
}
|
||
case State.AMBIGUOUS_AMPERSAND: {
|
||
this._stateAmbiguousAmpersand(cp);
|
||
break;
|
||
}
|
||
case State.NUMERIC_CHARACTER_REFERENCE: {
|
||
this._stateNumericCharacterReference(cp);
|
||
break;
|
||
}
|
||
case State.HEXADEMICAL_CHARACTER_REFERENCE_START: {
|
||
this._stateHexademicalCharacterReferenceStart(cp);
|
||
break;
|
||
}
|
||
case State.HEXADEMICAL_CHARACTER_REFERENCE: {
|
||
this._stateHexademicalCharacterReference(cp);
|
||
break;
|
||
}
|
||
case State.DECIMAL_CHARACTER_REFERENCE: {
|
||
this._stateDecimalCharacterReference(cp);
|
||
break;
|
||
}
|
||
case State.NUMERIC_CHARACTER_REFERENCE_END: {
|
||
this._stateNumericCharacterReferenceEnd(cp);
|
||
break;
|
||
}
|
||
default: {
|
||
throw new Error("Unknown state");
|
||
}
|
||
}
|
||
}
|
||
// State machine
|
||
// Data state
|
||
//------------------------------------------------------------------
|
||
_stateData(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this.state = State.TAG_OPEN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.AMPERSAND: {
|
||
this.returnState = State.DATA;
|
||
this.state = State.CHARACTER_REFERENCE;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this._emitCodePoint(cp);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// RCDATA state
|
||
//------------------------------------------------------------------
|
||
_stateRcdata(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.AMPERSAND: {
|
||
this.returnState = State.RCDATA;
|
||
this.state = State.CHARACTER_REFERENCE;
|
||
break;
|
||
}
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this.state = State.RCDATA_LESS_THAN_SIGN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this._emitChars(REPLACEMENT_CHARACTER);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// RAWTEXT state
|
||
//------------------------------------------------------------------
|
||
_stateRawtext(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this.state = State.RAWTEXT_LESS_THAN_SIGN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this._emitChars(REPLACEMENT_CHARACTER);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Script data state
|
||
//------------------------------------------------------------------
|
||
_stateScriptData(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this._emitChars(REPLACEMENT_CHARACTER);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// PLAINTEXT state
|
||
//------------------------------------------------------------------
|
||
_statePlaintext(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this._emitChars(REPLACEMENT_CHARACTER);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Tag open state
|
||
//------------------------------------------------------------------
|
||
_stateTagOpen(cp) {
|
||
if (isAsciiLetter(cp)) {
|
||
this._createStartTagToken();
|
||
this.state = State.TAG_NAME;
|
||
this._stateTagName(cp);
|
||
} else
|
||
switch (cp) {
|
||
case CODE_POINTS.EXCLAMATION_MARK: {
|
||
this.state = State.MARKUP_DECLARATION_OPEN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.SOLIDUS: {
|
||
this.state = State.END_TAG_OPEN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.QUESTION_MARK: {
|
||
this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);
|
||
this._createCommentToken(1);
|
||
this.state = State.BOGUS_COMMENT;
|
||
this._stateBogusComment(cp);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofBeforeTagName);
|
||
this._emitChars("<");
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.invalidFirstCharacterOfTagName);
|
||
this._emitChars("<");
|
||
this.state = State.DATA;
|
||
this._stateData(cp);
|
||
}
|
||
}
|
||
}
|
||
// End tag open state
|
||
//------------------------------------------------------------------
|
||
_stateEndTagOpen(cp) {
|
||
if (isAsciiLetter(cp)) {
|
||
this._createEndTagToken();
|
||
this.state = State.TAG_NAME;
|
||
this._stateTagName(cp);
|
||
} else
|
||
switch (cp) {
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.missingEndTagName);
|
||
this.state = State.DATA;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofBeforeTagName);
|
||
this._emitChars("</");
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.invalidFirstCharacterOfTagName);
|
||
this._createCommentToken(2);
|
||
this.state = State.BOGUS_COMMENT;
|
||
this._stateBogusComment(cp);
|
||
}
|
||
}
|
||
}
|
||
// Tag name state
|
||
//------------------------------------------------------------------
|
||
_stateTagName(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
this.state = State.BEFORE_ATTRIBUTE_NAME;
|
||
break;
|
||
}
|
||
case CODE_POINTS.SOLIDUS: {
|
||
this.state = State.SELF_CLOSING_START_TAG;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.DATA;
|
||
this.emitCurrentTagToken();
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
token.tagName += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInTag);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);
|
||
}
|
||
}
|
||
}
|
||
// RCDATA less-than sign state
|
||
//------------------------------------------------------------------
|
||
_stateRcdataLessThanSign(cp) {
|
||
if (cp === CODE_POINTS.SOLIDUS) {
|
||
this.state = State.RCDATA_END_TAG_OPEN;
|
||
} else {
|
||
this._emitChars("<");
|
||
this.state = State.RCDATA;
|
||
this._stateRcdata(cp);
|
||
}
|
||
}
|
||
// RCDATA end tag open state
|
||
//------------------------------------------------------------------
|
||
_stateRcdataEndTagOpen(cp) {
|
||
if (isAsciiLetter(cp)) {
|
||
this.state = State.RCDATA_END_TAG_NAME;
|
||
this._stateRcdataEndTagName(cp);
|
||
} else {
|
||
this._emitChars("</");
|
||
this.state = State.RCDATA;
|
||
this._stateRcdata(cp);
|
||
}
|
||
}
|
||
handleSpecialEndTag(_cp) {
|
||
if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {
|
||
return !this._ensureHibernation();
|
||
}
|
||
this._createEndTagToken();
|
||
const token = this.currentToken;
|
||
token.tagName = this.lastStartTagName;
|
||
const cp = this.preprocessor.peek(this.lastStartTagName.length);
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
this._advanceBy(this.lastStartTagName.length);
|
||
this.state = State.BEFORE_ATTRIBUTE_NAME;
|
||
return false;
|
||
}
|
||
case CODE_POINTS.SOLIDUS: {
|
||
this._advanceBy(this.lastStartTagName.length);
|
||
this.state = State.SELF_CLOSING_START_TAG;
|
||
return false;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._advanceBy(this.lastStartTagName.length);
|
||
this.emitCurrentTagToken();
|
||
this.state = State.DATA;
|
||
return false;
|
||
}
|
||
default: {
|
||
return !this._ensureHibernation();
|
||
}
|
||
}
|
||
}
|
||
// RCDATA end tag name state
|
||
//------------------------------------------------------------------
|
||
_stateRcdataEndTagName(cp) {
|
||
if (this.handleSpecialEndTag(cp)) {
|
||
this._emitChars("</");
|
||
this.state = State.RCDATA;
|
||
this._stateRcdata(cp);
|
||
}
|
||
}
|
||
// RAWTEXT less-than sign state
|
||
//------------------------------------------------------------------
|
||
_stateRawtextLessThanSign(cp) {
|
||
if (cp === CODE_POINTS.SOLIDUS) {
|
||
this.state = State.RAWTEXT_END_TAG_OPEN;
|
||
} else {
|
||
this._emitChars("<");
|
||
this.state = State.RAWTEXT;
|
||
this._stateRawtext(cp);
|
||
}
|
||
}
|
||
// RAWTEXT end tag open state
|
||
//------------------------------------------------------------------
|
||
_stateRawtextEndTagOpen(cp) {
|
||
if (isAsciiLetter(cp)) {
|
||
this.state = State.RAWTEXT_END_TAG_NAME;
|
||
this._stateRawtextEndTagName(cp);
|
||
} else {
|
||
this._emitChars("</");
|
||
this.state = State.RAWTEXT;
|
||
this._stateRawtext(cp);
|
||
}
|
||
}
|
||
// RAWTEXT end tag name state
|
||
//------------------------------------------------------------------
|
||
_stateRawtextEndTagName(cp) {
|
||
if (this.handleSpecialEndTag(cp)) {
|
||
this._emitChars("</");
|
||
this.state = State.RAWTEXT;
|
||
this._stateRawtext(cp);
|
||
}
|
||
}
|
||
// Script data less-than sign state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataLessThanSign(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.SOLIDUS: {
|
||
this.state = State.SCRIPT_DATA_END_TAG_OPEN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EXCLAMATION_MARK: {
|
||
this.state = State.SCRIPT_DATA_ESCAPE_START;
|
||
this._emitChars("<!");
|
||
break;
|
||
}
|
||
default: {
|
||
this._emitChars("<");
|
||
this.state = State.SCRIPT_DATA;
|
||
this._stateScriptData(cp);
|
||
}
|
||
}
|
||
}
|
||
// Script data end tag open state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataEndTagOpen(cp) {
|
||
if (isAsciiLetter(cp)) {
|
||
this.state = State.SCRIPT_DATA_END_TAG_NAME;
|
||
this._stateScriptDataEndTagName(cp);
|
||
} else {
|
||
this._emitChars("</");
|
||
this.state = State.SCRIPT_DATA;
|
||
this._stateScriptData(cp);
|
||
}
|
||
}
|
||
// Script data end tag name state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataEndTagName(cp) {
|
||
if (this.handleSpecialEndTag(cp)) {
|
||
this._emitChars("</");
|
||
this.state = State.SCRIPT_DATA;
|
||
this._stateScriptData(cp);
|
||
}
|
||
}
|
||
// Script data escape start state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataEscapeStart(cp) {
|
||
if (cp === CODE_POINTS.HYPHEN_MINUS) {
|
||
this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;
|
||
this._emitChars("-");
|
||
} else {
|
||
this.state = State.SCRIPT_DATA;
|
||
this._stateScriptData(cp);
|
||
}
|
||
}
|
||
// Script data escape start dash state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataEscapeStartDash(cp) {
|
||
if (cp === CODE_POINTS.HYPHEN_MINUS) {
|
||
this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;
|
||
this._emitChars("-");
|
||
} else {
|
||
this.state = State.SCRIPT_DATA;
|
||
this._stateScriptData(cp);
|
||
}
|
||
}
|
||
// Script data escaped state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataEscaped(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
this.state = State.SCRIPT_DATA_ESCAPED_DASH;
|
||
this._emitChars("-");
|
||
break;
|
||
}
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this._emitChars(REPLACEMENT_CHARACTER);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInScriptHtmlCommentLikeText);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Script data escaped dash state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataEscapedDash(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;
|
||
this._emitChars("-");
|
||
break;
|
||
}
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this.state = State.SCRIPT_DATA_ESCAPED;
|
||
this._emitChars(REPLACEMENT_CHARACTER);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInScriptHtmlCommentLikeText);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this.state = State.SCRIPT_DATA_ESCAPED;
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Script data escaped dash dash state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataEscapedDashDash(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
this._emitChars("-");
|
||
break;
|
||
}
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.SCRIPT_DATA;
|
||
this._emitChars(">");
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this.state = State.SCRIPT_DATA_ESCAPED;
|
||
this._emitChars(REPLACEMENT_CHARACTER);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInScriptHtmlCommentLikeText);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this.state = State.SCRIPT_DATA_ESCAPED;
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Script data escaped less-than sign state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataEscapedLessThanSign(cp) {
|
||
if (cp === CODE_POINTS.SOLIDUS) {
|
||
this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;
|
||
} else if (isAsciiLetter(cp)) {
|
||
this._emitChars("<");
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;
|
||
this._stateScriptDataDoubleEscapeStart(cp);
|
||
} else {
|
||
this._emitChars("<");
|
||
this.state = State.SCRIPT_DATA_ESCAPED;
|
||
this._stateScriptDataEscaped(cp);
|
||
}
|
||
}
|
||
// Script data escaped end tag open state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataEscapedEndTagOpen(cp) {
|
||
if (isAsciiLetter(cp)) {
|
||
this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;
|
||
this._stateScriptDataEscapedEndTagName(cp);
|
||
} else {
|
||
this._emitChars("</");
|
||
this.state = State.SCRIPT_DATA_ESCAPED;
|
||
this._stateScriptDataEscaped(cp);
|
||
}
|
||
}
|
||
// Script data escaped end tag name state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataEscapedEndTagName(cp) {
|
||
if (this.handleSpecialEndTag(cp)) {
|
||
this._emitChars("</");
|
||
this.state = State.SCRIPT_DATA_ESCAPED;
|
||
this._stateScriptDataEscaped(cp);
|
||
}
|
||
}
|
||
// Script data double escape start state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataDoubleEscapeStart(cp) {
|
||
if (this.preprocessor.startsWith(SEQUENCES.SCRIPT, false) && isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek(SEQUENCES.SCRIPT.length))) {
|
||
this._emitCodePoint(cp);
|
||
for (let i2 = 0; i2 < SEQUENCES.SCRIPT.length; i2++) {
|
||
this._emitCodePoint(this._consume());
|
||
}
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
|
||
} else if (!this._ensureHibernation()) {
|
||
this.state = State.SCRIPT_DATA_ESCAPED;
|
||
this._stateScriptDataEscaped(cp);
|
||
}
|
||
}
|
||
// Script data double escaped state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataDoubleEscaped(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;
|
||
this._emitChars("-");
|
||
break;
|
||
}
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;
|
||
this._emitChars("<");
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this._emitChars(REPLACEMENT_CHARACTER);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInScriptHtmlCommentLikeText);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Script data double escaped dash state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataDoubleEscapedDash(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;
|
||
this._emitChars("-");
|
||
break;
|
||
}
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;
|
||
this._emitChars("<");
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
|
||
this._emitChars(REPLACEMENT_CHARACTER);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInScriptHtmlCommentLikeText);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Script data double escaped dash dash state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataDoubleEscapedDashDash(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
this._emitChars("-");
|
||
break;
|
||
}
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;
|
||
this._emitChars("<");
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.SCRIPT_DATA;
|
||
this._emitChars(">");
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
|
||
this._emitChars(REPLACEMENT_CHARACTER);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInScriptHtmlCommentLikeText);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Script data double escaped less-than sign state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataDoubleEscapedLessThanSign(cp) {
|
||
if (cp === CODE_POINTS.SOLIDUS) {
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;
|
||
this._emitChars("/");
|
||
} else {
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
|
||
this._stateScriptDataDoubleEscaped(cp);
|
||
}
|
||
}
|
||
// Script data double escape end state
|
||
//------------------------------------------------------------------
|
||
_stateScriptDataDoubleEscapeEnd(cp) {
|
||
if (this.preprocessor.startsWith(SEQUENCES.SCRIPT, false) && isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek(SEQUENCES.SCRIPT.length))) {
|
||
this._emitCodePoint(cp);
|
||
for (let i2 = 0; i2 < SEQUENCES.SCRIPT.length; i2++) {
|
||
this._emitCodePoint(this._consume());
|
||
}
|
||
this.state = State.SCRIPT_DATA_ESCAPED;
|
||
} else if (!this._ensureHibernation()) {
|
||
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
|
||
this._stateScriptDataDoubleEscaped(cp);
|
||
}
|
||
}
|
||
// Before attribute name state
|
||
//------------------------------------------------------------------
|
||
_stateBeforeAttributeName(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
break;
|
||
}
|
||
case CODE_POINTS.SOLIDUS:
|
||
case CODE_POINTS.GREATER_THAN_SIGN:
|
||
case CODE_POINTS.EOF: {
|
||
this.state = State.AFTER_ATTRIBUTE_NAME;
|
||
this._stateAfterAttributeName(cp);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EQUALS_SIGN: {
|
||
this._err(ERR.unexpectedEqualsSignBeforeAttributeName);
|
||
this._createAttr("=");
|
||
this.state = State.ATTRIBUTE_NAME;
|
||
break;
|
||
}
|
||
default: {
|
||
this._createAttr("");
|
||
this.state = State.ATTRIBUTE_NAME;
|
||
this._stateAttributeName(cp);
|
||
}
|
||
}
|
||
}
|
||
// Attribute name state
|
||
//------------------------------------------------------------------
|
||
_stateAttributeName(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED:
|
||
case CODE_POINTS.SOLIDUS:
|
||
case CODE_POINTS.GREATER_THAN_SIGN:
|
||
case CODE_POINTS.EOF: {
|
||
this._leaveAttrName();
|
||
this.state = State.AFTER_ATTRIBUTE_NAME;
|
||
this._stateAfterAttributeName(cp);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EQUALS_SIGN: {
|
||
this._leaveAttrName();
|
||
this.state = State.BEFORE_ATTRIBUTE_VALUE;
|
||
break;
|
||
}
|
||
case CODE_POINTS.QUOTATION_MARK:
|
||
case CODE_POINTS.APOSTROPHE:
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
this._err(ERR.unexpectedCharacterInAttributeName);
|
||
this.currentAttr.name += String.fromCodePoint(cp);
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this.currentAttr.name += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
default: {
|
||
this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);
|
||
}
|
||
}
|
||
}
|
||
// After attribute name state
|
||
//------------------------------------------------------------------
|
||
_stateAfterAttributeName(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
break;
|
||
}
|
||
case CODE_POINTS.SOLIDUS: {
|
||
this.state = State.SELF_CLOSING_START_TAG;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EQUALS_SIGN: {
|
||
this.state = State.BEFORE_ATTRIBUTE_VALUE;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.DATA;
|
||
this.emitCurrentTagToken();
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInTag);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._createAttr("");
|
||
this.state = State.ATTRIBUTE_NAME;
|
||
this._stateAttributeName(cp);
|
||
}
|
||
}
|
||
}
|
||
// Before attribute value state
|
||
//------------------------------------------------------------------
|
||
_stateBeforeAttributeValue(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
break;
|
||
}
|
||
case CODE_POINTS.QUOTATION_MARK: {
|
||
this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.APOSTROPHE: {
|
||
this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.missingAttributeValue);
|
||
this.state = State.DATA;
|
||
this.emitCurrentTagToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this.state = State.ATTRIBUTE_VALUE_UNQUOTED;
|
||
this._stateAttributeValueUnquoted(cp);
|
||
}
|
||
}
|
||
}
|
||
// Attribute value (double-quoted) state
|
||
//------------------------------------------------------------------
|
||
_stateAttributeValueDoubleQuoted(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.QUOTATION_MARK: {
|
||
this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.AMPERSAND: {
|
||
this.returnState = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;
|
||
this.state = State.CHARACTER_REFERENCE;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this.currentAttr.value += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInTag);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this.currentAttr.value += String.fromCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Attribute value (single-quoted) state
|
||
//------------------------------------------------------------------
|
||
_stateAttributeValueSingleQuoted(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.APOSTROPHE: {
|
||
this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.AMPERSAND: {
|
||
this.returnState = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;
|
||
this.state = State.CHARACTER_REFERENCE;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this.currentAttr.value += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInTag);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this.currentAttr.value += String.fromCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Attribute value (unquoted) state
|
||
//------------------------------------------------------------------
|
||
_stateAttributeValueUnquoted(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
this._leaveAttrValue();
|
||
this.state = State.BEFORE_ATTRIBUTE_NAME;
|
||
break;
|
||
}
|
||
case CODE_POINTS.AMPERSAND: {
|
||
this.returnState = State.ATTRIBUTE_VALUE_UNQUOTED;
|
||
this.state = State.CHARACTER_REFERENCE;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._leaveAttrValue();
|
||
this.state = State.DATA;
|
||
this.emitCurrentTagToken();
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this.currentAttr.value += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.QUOTATION_MARK:
|
||
case CODE_POINTS.APOSTROPHE:
|
||
case CODE_POINTS.LESS_THAN_SIGN:
|
||
case CODE_POINTS.EQUALS_SIGN:
|
||
case CODE_POINTS.GRAVE_ACCENT: {
|
||
this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);
|
||
this.currentAttr.value += String.fromCodePoint(cp);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInTag);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this.currentAttr.value += String.fromCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// After attribute value (quoted) state
|
||
//------------------------------------------------------------------
|
||
_stateAfterAttributeValueQuoted(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
this._leaveAttrValue();
|
||
this.state = State.BEFORE_ATTRIBUTE_NAME;
|
||
break;
|
||
}
|
||
case CODE_POINTS.SOLIDUS: {
|
||
this._leaveAttrValue();
|
||
this.state = State.SELF_CLOSING_START_TAG;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._leaveAttrValue();
|
||
this.state = State.DATA;
|
||
this.emitCurrentTagToken();
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInTag);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.missingWhitespaceBetweenAttributes);
|
||
this.state = State.BEFORE_ATTRIBUTE_NAME;
|
||
this._stateBeforeAttributeName(cp);
|
||
}
|
||
}
|
||
}
|
||
// Self-closing start tag state
|
||
//------------------------------------------------------------------
|
||
_stateSelfClosingStartTag(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
const token = this.currentToken;
|
||
token.selfClosing = true;
|
||
this.state = State.DATA;
|
||
this.emitCurrentTagToken();
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInTag);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.unexpectedSolidusInTag);
|
||
this.state = State.BEFORE_ATTRIBUTE_NAME;
|
||
this._stateBeforeAttributeName(cp);
|
||
}
|
||
}
|
||
}
|
||
// Bogus comment state
|
||
//------------------------------------------------------------------
|
||
_stateBogusComment(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.DATA;
|
||
this.emitCurrentComment(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this.emitCurrentComment(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
token.data += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
default: {
|
||
token.data += String.fromCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Markup declaration open state
|
||
//------------------------------------------------------------------
|
||
_stateMarkupDeclarationOpen(cp) {
|
||
if (this._consumeSequenceIfMatch(SEQUENCES.DASH_DASH, true)) {
|
||
this._createCommentToken(SEQUENCES.DASH_DASH.length + 1);
|
||
this.state = State.COMMENT_START;
|
||
} else if (this._consumeSequenceIfMatch(SEQUENCES.DOCTYPE, false)) {
|
||
this.currentLocation = this.getCurrentLocation(SEQUENCES.DOCTYPE.length + 1);
|
||
this.state = State.DOCTYPE;
|
||
} else if (this._consumeSequenceIfMatch(SEQUENCES.CDATA_START, true)) {
|
||
if (this.inForeignNode) {
|
||
this.state = State.CDATA_SECTION;
|
||
} else {
|
||
this._err(ERR.cdataInHtmlContent);
|
||
this._createCommentToken(SEQUENCES.CDATA_START.length + 1);
|
||
this.currentToken.data = "[CDATA[";
|
||
this.state = State.BOGUS_COMMENT;
|
||
}
|
||
} else if (!this._ensureHibernation()) {
|
||
this._err(ERR.incorrectlyOpenedComment);
|
||
this._createCommentToken(2);
|
||
this.state = State.BOGUS_COMMENT;
|
||
this._stateBogusComment(cp);
|
||
}
|
||
}
|
||
// Comment start state
|
||
//------------------------------------------------------------------
|
||
_stateCommentStart(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
this.state = State.COMMENT_START_DASH;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.abruptClosingOfEmptyComment);
|
||
this.state = State.DATA;
|
||
const token = this.currentToken;
|
||
this.emitCurrentComment(token);
|
||
break;
|
||
}
|
||
default: {
|
||
this.state = State.COMMENT;
|
||
this._stateComment(cp);
|
||
}
|
||
}
|
||
}
|
||
// Comment start dash state
|
||
//------------------------------------------------------------------
|
||
_stateCommentStartDash(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
this.state = State.COMMENT_END;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.abruptClosingOfEmptyComment);
|
||
this.state = State.DATA;
|
||
this.emitCurrentComment(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInComment);
|
||
this.emitCurrentComment(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.data += "-";
|
||
this.state = State.COMMENT;
|
||
this._stateComment(cp);
|
||
}
|
||
}
|
||
}
|
||
// Comment state
|
||
//------------------------------------------------------------------
|
||
_stateComment(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
this.state = State.COMMENT_END_DASH;
|
||
break;
|
||
}
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
token.data += "<";
|
||
this.state = State.COMMENT_LESS_THAN_SIGN;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
token.data += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInComment);
|
||
this.emitCurrentComment(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.data += String.fromCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// Comment less-than sign state
|
||
//------------------------------------------------------------------
|
||
_stateCommentLessThanSign(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.EXCLAMATION_MARK: {
|
||
token.data += "!";
|
||
this.state = State.COMMENT_LESS_THAN_SIGN_BANG;
|
||
break;
|
||
}
|
||
case CODE_POINTS.LESS_THAN_SIGN: {
|
||
token.data += "<";
|
||
break;
|
||
}
|
||
default: {
|
||
this.state = State.COMMENT;
|
||
this._stateComment(cp);
|
||
}
|
||
}
|
||
}
|
||
// Comment less-than sign bang state
|
||
//------------------------------------------------------------------
|
||
_stateCommentLessThanSignBang(cp) {
|
||
if (cp === CODE_POINTS.HYPHEN_MINUS) {
|
||
this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;
|
||
} else {
|
||
this.state = State.COMMENT;
|
||
this._stateComment(cp);
|
||
}
|
||
}
|
||
// Comment less-than sign bang dash state
|
||
//------------------------------------------------------------------
|
||
_stateCommentLessThanSignBangDash(cp) {
|
||
if (cp === CODE_POINTS.HYPHEN_MINUS) {
|
||
this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;
|
||
} else {
|
||
this.state = State.COMMENT_END_DASH;
|
||
this._stateCommentEndDash(cp);
|
||
}
|
||
}
|
||
// Comment less-than sign bang dash dash state
|
||
//------------------------------------------------------------------
|
||
_stateCommentLessThanSignBangDashDash(cp) {
|
||
if (cp !== CODE_POINTS.GREATER_THAN_SIGN && cp !== CODE_POINTS.EOF) {
|
||
this._err(ERR.nestedComment);
|
||
}
|
||
this.state = State.COMMENT_END;
|
||
this._stateCommentEnd(cp);
|
||
}
|
||
// Comment end dash state
|
||
//------------------------------------------------------------------
|
||
_stateCommentEndDash(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
this.state = State.COMMENT_END;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInComment);
|
||
this.emitCurrentComment(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.data += "-";
|
||
this.state = State.COMMENT;
|
||
this._stateComment(cp);
|
||
}
|
||
}
|
||
}
|
||
// Comment end state
|
||
//------------------------------------------------------------------
|
||
_stateCommentEnd(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.DATA;
|
||
this.emitCurrentComment(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EXCLAMATION_MARK: {
|
||
this.state = State.COMMENT_END_BANG;
|
||
break;
|
||
}
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
token.data += "-";
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInComment);
|
||
this.emitCurrentComment(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.data += "--";
|
||
this.state = State.COMMENT;
|
||
this._stateComment(cp);
|
||
}
|
||
}
|
||
}
|
||
// Comment end bang state
|
||
//------------------------------------------------------------------
|
||
_stateCommentEndBang(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.HYPHEN_MINUS: {
|
||
token.data += "--!";
|
||
this.state = State.COMMENT_END_DASH;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.incorrectlyClosedComment);
|
||
this.state = State.DATA;
|
||
this.emitCurrentComment(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInComment);
|
||
this.emitCurrentComment(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.data += "--!";
|
||
this.state = State.COMMENT;
|
||
this._stateComment(cp);
|
||
}
|
||
}
|
||
}
|
||
// DOCTYPE state
|
||
//------------------------------------------------------------------
|
||
_stateDoctype(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
this.state = State.BEFORE_DOCTYPE_NAME;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.BEFORE_DOCTYPE_NAME;
|
||
this._stateBeforeDoctypeName(cp);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
this._createDoctypeToken(null);
|
||
const token = this.currentToken;
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.missingWhitespaceBeforeDoctypeName);
|
||
this.state = State.BEFORE_DOCTYPE_NAME;
|
||
this._stateBeforeDoctypeName(cp);
|
||
}
|
||
}
|
||
}
|
||
// Before DOCTYPE name state
|
||
//------------------------------------------------------------------
|
||
_stateBeforeDoctypeName(cp) {
|
||
if (isAsciiUpper(cp)) {
|
||
this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));
|
||
this.state = State.DOCTYPE_NAME;
|
||
} else
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
this._createDoctypeToken(REPLACEMENT_CHARACTER);
|
||
this.state = State.DOCTYPE_NAME;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.missingDoctypeName);
|
||
this._createDoctypeToken(null);
|
||
const token = this.currentToken;
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this.state = State.DATA;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
this._createDoctypeToken(null);
|
||
const token = this.currentToken;
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._createDoctypeToken(String.fromCodePoint(cp));
|
||
this.state = State.DOCTYPE_NAME;
|
||
}
|
||
}
|
||
}
|
||
// DOCTYPE name state
|
||
//------------------------------------------------------------------
|
||
_stateDoctypeName(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
this.state = State.AFTER_DOCTYPE_NAME;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.DATA;
|
||
this.emitCurrentDoctype(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
token.name += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);
|
||
}
|
||
}
|
||
}
|
||
// After DOCTYPE name state
|
||
//------------------------------------------------------------------
|
||
_stateAfterDoctypeName(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.DATA;
|
||
this.emitCurrentDoctype(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
if (this._consumeSequenceIfMatch(SEQUENCES.PUBLIC, false)) {
|
||
this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;
|
||
} else if (this._consumeSequenceIfMatch(SEQUENCES.SYSTEM, false)) {
|
||
this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;
|
||
} else if (!this._ensureHibernation()) {
|
||
this._err(ERR.invalidCharacterSequenceAfterDoctypeName);
|
||
token.forceQuirks = true;
|
||
this.state = State.BOGUS_DOCTYPE;
|
||
this._stateBogusDoctype(cp);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
// After DOCTYPE public keyword state
|
||
//------------------------------------------------------------------
|
||
_stateAfterDoctypePublicKeyword(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.QUOTATION_MARK: {
|
||
this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);
|
||
token.publicId = "";
|
||
this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.APOSTROPHE: {
|
||
this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);
|
||
token.publicId = "";
|
||
this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.missingDoctypePublicIdentifier);
|
||
token.forceQuirks = true;
|
||
this.state = State.DATA;
|
||
this.emitCurrentDoctype(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);
|
||
token.forceQuirks = true;
|
||
this.state = State.BOGUS_DOCTYPE;
|
||
this._stateBogusDoctype(cp);
|
||
}
|
||
}
|
||
}
|
||
// Before DOCTYPE public identifier state
|
||
//------------------------------------------------------------------
|
||
_stateBeforeDoctypePublicIdentifier(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
break;
|
||
}
|
||
case CODE_POINTS.QUOTATION_MARK: {
|
||
token.publicId = "";
|
||
this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.APOSTROPHE: {
|
||
token.publicId = "";
|
||
this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.missingDoctypePublicIdentifier);
|
||
token.forceQuirks = true;
|
||
this.state = State.DATA;
|
||
this.emitCurrentDoctype(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);
|
||
token.forceQuirks = true;
|
||
this.state = State.BOGUS_DOCTYPE;
|
||
this._stateBogusDoctype(cp);
|
||
}
|
||
}
|
||
}
|
||
// DOCTYPE public identifier (double-quoted) state
|
||
//------------------------------------------------------------------
|
||
_stateDoctypePublicIdentifierDoubleQuoted(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.QUOTATION_MARK: {
|
||
this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
token.publicId += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.abruptDoctypePublicIdentifier);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this.state = State.DATA;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.publicId += String.fromCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// DOCTYPE public identifier (single-quoted) state
|
||
//------------------------------------------------------------------
|
||
_stateDoctypePublicIdentifierSingleQuoted(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.APOSTROPHE: {
|
||
this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
token.publicId += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.abruptDoctypePublicIdentifier);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this.state = State.DATA;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.publicId += String.fromCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// After DOCTYPE public identifier state
|
||
//------------------------------------------------------------------
|
||
_stateAfterDoctypePublicIdentifier(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.DATA;
|
||
this.emitCurrentDoctype(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.QUOTATION_MARK: {
|
||
this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);
|
||
token.systemId = "";
|
||
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.APOSTROPHE: {
|
||
this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);
|
||
token.systemId = "";
|
||
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
|
||
token.forceQuirks = true;
|
||
this.state = State.BOGUS_DOCTYPE;
|
||
this._stateBogusDoctype(cp);
|
||
}
|
||
}
|
||
}
|
||
// Between DOCTYPE public and system identifiers state
|
||
//------------------------------------------------------------------
|
||
_stateBetweenDoctypePublicAndSystemIdentifiers(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.emitCurrentDoctype(token);
|
||
this.state = State.DATA;
|
||
break;
|
||
}
|
||
case CODE_POINTS.QUOTATION_MARK: {
|
||
token.systemId = "";
|
||
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.APOSTROPHE: {
|
||
token.systemId = "";
|
||
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
|
||
token.forceQuirks = true;
|
||
this.state = State.BOGUS_DOCTYPE;
|
||
this._stateBogusDoctype(cp);
|
||
}
|
||
}
|
||
}
|
||
// After DOCTYPE system keyword state
|
||
//------------------------------------------------------------------
|
||
_stateAfterDoctypeSystemKeyword(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.QUOTATION_MARK: {
|
||
this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);
|
||
token.systemId = "";
|
||
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.APOSTROPHE: {
|
||
this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);
|
||
token.systemId = "";
|
||
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.missingDoctypeSystemIdentifier);
|
||
token.forceQuirks = true;
|
||
this.state = State.DATA;
|
||
this.emitCurrentDoctype(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
|
||
token.forceQuirks = true;
|
||
this.state = State.BOGUS_DOCTYPE;
|
||
this._stateBogusDoctype(cp);
|
||
}
|
||
}
|
||
}
|
||
// Before DOCTYPE system identifier state
|
||
//------------------------------------------------------------------
|
||
_stateBeforeDoctypeSystemIdentifier(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
break;
|
||
}
|
||
case CODE_POINTS.QUOTATION_MARK: {
|
||
token.systemId = "";
|
||
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.APOSTROPHE: {
|
||
token.systemId = "";
|
||
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.missingDoctypeSystemIdentifier);
|
||
token.forceQuirks = true;
|
||
this.state = State.DATA;
|
||
this.emitCurrentDoctype(token);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
|
||
token.forceQuirks = true;
|
||
this.state = State.BOGUS_DOCTYPE;
|
||
this._stateBogusDoctype(cp);
|
||
}
|
||
}
|
||
}
|
||
// DOCTYPE system identifier (double-quoted) state
|
||
//------------------------------------------------------------------
|
||
_stateDoctypeSystemIdentifierDoubleQuoted(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.QUOTATION_MARK: {
|
||
this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
token.systemId += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.abruptDoctypeSystemIdentifier);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this.state = State.DATA;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.systemId += String.fromCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// DOCTYPE system identifier (single-quoted) state
|
||
//------------------------------------------------------------------
|
||
_stateDoctypeSystemIdentifierSingleQuoted(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.APOSTROPHE: {
|
||
this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
token.systemId += REPLACEMENT_CHARACTER;
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this._err(ERR.abruptDoctypeSystemIdentifier);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this.state = State.DATA;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
token.systemId += String.fromCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// After DOCTYPE system identifier state
|
||
//------------------------------------------------------------------
|
||
_stateAfterDoctypeSystemIdentifier(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.SPACE:
|
||
case CODE_POINTS.LINE_FEED:
|
||
case CODE_POINTS.TABULATION:
|
||
case CODE_POINTS.FORM_FEED: {
|
||
break;
|
||
}
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.emitCurrentDoctype(token);
|
||
this.state = State.DATA;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInDoctype);
|
||
token.forceQuirks = true;
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);
|
||
this.state = State.BOGUS_DOCTYPE;
|
||
this._stateBogusDoctype(cp);
|
||
}
|
||
}
|
||
}
|
||
// Bogus DOCTYPE state
|
||
//------------------------------------------------------------------
|
||
_stateBogusDoctype(cp) {
|
||
const token = this.currentToken;
|
||
switch (cp) {
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.emitCurrentDoctype(token);
|
||
this.state = State.DATA;
|
||
break;
|
||
}
|
||
case CODE_POINTS.NULL: {
|
||
this._err(ERR.unexpectedNullCharacter);
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this.emitCurrentDoctype(token);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
// CDATA section state
|
||
//------------------------------------------------------------------
|
||
_stateCdataSection(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.RIGHT_SQUARE_BRACKET: {
|
||
this.state = State.CDATA_SECTION_BRACKET;
|
||
break;
|
||
}
|
||
case CODE_POINTS.EOF: {
|
||
this._err(ERR.eofInCdata);
|
||
this._emitEOFToken();
|
||
break;
|
||
}
|
||
default: {
|
||
this._emitCodePoint(cp);
|
||
}
|
||
}
|
||
}
|
||
// CDATA section bracket state
|
||
//------------------------------------------------------------------
|
||
_stateCdataSectionBracket(cp) {
|
||
if (cp === CODE_POINTS.RIGHT_SQUARE_BRACKET) {
|
||
this.state = State.CDATA_SECTION_END;
|
||
} else {
|
||
this._emitChars("]");
|
||
this.state = State.CDATA_SECTION;
|
||
this._stateCdataSection(cp);
|
||
}
|
||
}
|
||
// CDATA section end state
|
||
//------------------------------------------------------------------
|
||
_stateCdataSectionEnd(cp) {
|
||
switch (cp) {
|
||
case CODE_POINTS.GREATER_THAN_SIGN: {
|
||
this.state = State.DATA;
|
||
break;
|
||
}
|
||
case CODE_POINTS.RIGHT_SQUARE_BRACKET: {
|
||
this._emitChars("]");
|
||
break;
|
||
}
|
||
default: {
|
||
this._emitChars("]]");
|
||
this.state = State.CDATA_SECTION;
|
||
this._stateCdataSection(cp);
|
||
}
|
||
}
|
||
}
|
||
// Character reference state
|
||
//------------------------------------------------------------------
|
||
_stateCharacterReference(cp) {
|
||
if (cp === CODE_POINTS.NUMBER_SIGN) {
|
||
this.state = State.NUMERIC_CHARACTER_REFERENCE;
|
||
} else if (isAsciiAlphaNumeric2(cp)) {
|
||
this.state = State.NAMED_CHARACTER_REFERENCE;
|
||
this._stateNamedCharacterReference(cp);
|
||
} else {
|
||
this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.AMPERSAND);
|
||
this._reconsumeInState(this.returnState, cp);
|
||
}
|
||
}
|
||
// Named character reference state
|
||
//------------------------------------------------------------------
|
||
_stateNamedCharacterReference(cp) {
|
||
const matchResult = this._matchNamedCharacterReference(cp);
|
||
if (this._ensureHibernation()) {
|
||
} else if (matchResult) {
|
||
for (let i2 = 0; i2 < matchResult.length; i2++) {
|
||
this._flushCodePointConsumedAsCharacterReference(matchResult[i2]);
|
||
}
|
||
this.state = this.returnState;
|
||
} else {
|
||
this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.AMPERSAND);
|
||
this.state = State.AMBIGUOUS_AMPERSAND;
|
||
}
|
||
}
|
||
// Ambiguos ampersand state
|
||
//------------------------------------------------------------------
|
||
_stateAmbiguousAmpersand(cp) {
|
||
if (isAsciiAlphaNumeric2(cp)) {
|
||
this._flushCodePointConsumedAsCharacterReference(cp);
|
||
} else {
|
||
if (cp === CODE_POINTS.SEMICOLON) {
|
||
this._err(ERR.unknownNamedCharacterReference);
|
||
}
|
||
this._reconsumeInState(this.returnState, cp);
|
||
}
|
||
}
|
||
// Numeric character reference state
|
||
//------------------------------------------------------------------
|
||
_stateNumericCharacterReference(cp) {
|
||
this.charRefCode = 0;
|
||
if (cp === CODE_POINTS.LATIN_SMALL_X || cp === CODE_POINTS.LATIN_CAPITAL_X) {
|
||
this.state = State.HEXADEMICAL_CHARACTER_REFERENCE_START;
|
||
} else if (isAsciiDigit(cp)) {
|
||
this.state = State.DECIMAL_CHARACTER_REFERENCE;
|
||
this._stateDecimalCharacterReference(cp);
|
||
} else {
|
||
this._err(ERR.absenceOfDigitsInNumericCharacterReference);
|
||
this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.AMPERSAND);
|
||
this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.NUMBER_SIGN);
|
||
this._reconsumeInState(this.returnState, cp);
|
||
}
|
||
}
|
||
// Hexademical character reference start state
|
||
//------------------------------------------------------------------
|
||
_stateHexademicalCharacterReferenceStart(cp) {
|
||
if (isAsciiHexDigit(cp)) {
|
||
this.state = State.HEXADEMICAL_CHARACTER_REFERENCE;
|
||
this._stateHexademicalCharacterReference(cp);
|
||
} else {
|
||
this._err(ERR.absenceOfDigitsInNumericCharacterReference);
|
||
this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.AMPERSAND);
|
||
this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.NUMBER_SIGN);
|
||
this._unconsume(2);
|
||
this.state = this.returnState;
|
||
}
|
||
}
|
||
// Hexademical character reference state
|
||
//------------------------------------------------------------------
|
||
_stateHexademicalCharacterReference(cp) {
|
||
if (isAsciiUpperHexDigit(cp)) {
|
||
this.charRefCode = this.charRefCode * 16 + cp - 55;
|
||
} else if (isAsciiLowerHexDigit(cp)) {
|
||
this.charRefCode = this.charRefCode * 16 + cp - 87;
|
||
} else if (isAsciiDigit(cp)) {
|
||
this.charRefCode = this.charRefCode * 16 + cp - 48;
|
||
} else if (cp === CODE_POINTS.SEMICOLON) {
|
||
this.state = State.NUMERIC_CHARACTER_REFERENCE_END;
|
||
} else {
|
||
this._err(ERR.missingSemicolonAfterCharacterReference);
|
||
this.state = State.NUMERIC_CHARACTER_REFERENCE_END;
|
||
this._stateNumericCharacterReferenceEnd(cp);
|
||
}
|
||
}
|
||
// Decimal character reference state
|
||
//------------------------------------------------------------------
|
||
_stateDecimalCharacterReference(cp) {
|
||
if (isAsciiDigit(cp)) {
|
||
this.charRefCode = this.charRefCode * 10 + cp - 48;
|
||
} else if (cp === CODE_POINTS.SEMICOLON) {
|
||
this.state = State.NUMERIC_CHARACTER_REFERENCE_END;
|
||
} else {
|
||
this._err(ERR.missingSemicolonAfterCharacterReference);
|
||
this.state = State.NUMERIC_CHARACTER_REFERENCE_END;
|
||
this._stateNumericCharacterReferenceEnd(cp);
|
||
}
|
||
}
|
||
// Numeric character reference end state
|
||
//------------------------------------------------------------------
|
||
_stateNumericCharacterReferenceEnd(cp) {
|
||
if (this.charRefCode === CODE_POINTS.NULL) {
|
||
this._err(ERR.nullCharacterReference);
|
||
this.charRefCode = CODE_POINTS.REPLACEMENT_CHARACTER;
|
||
} else if (this.charRefCode > 1114111) {
|
||
this._err(ERR.characterReferenceOutsideUnicodeRange);
|
||
this.charRefCode = CODE_POINTS.REPLACEMENT_CHARACTER;
|
||
} else if (isSurrogate(this.charRefCode)) {
|
||
this._err(ERR.surrogateCharacterReference);
|
||
this.charRefCode = CODE_POINTS.REPLACEMENT_CHARACTER;
|
||
} else if (isUndefinedCodePoint(this.charRefCode)) {
|
||
this._err(ERR.noncharacterCharacterReference);
|
||
} else if (isControlCodePoint(this.charRefCode) || this.charRefCode === CODE_POINTS.CARRIAGE_RETURN) {
|
||
this._err(ERR.controlCharacterReference);
|
||
const replacement = C1_CONTROLS_REFERENCE_REPLACEMENTS.get(this.charRefCode);
|
||
if (replacement !== void 0) {
|
||
this.charRefCode = replacement;
|
||
}
|
||
}
|
||
this._flushCodePointConsumedAsCharacterReference(this.charRefCode);
|
||
this._reconsumeInState(this.returnState, cp);
|
||
}
|
||
};
|
||
|
||
// node_modules/parse5/dist/parser/open-element-stack.js
|
||
var IMPLICIT_END_TAG_REQUIRED = /* @__PURE__ */ new Set([TAG_ID.DD, TAG_ID.DT, TAG_ID.LI, TAG_ID.OPTGROUP, TAG_ID.OPTION, TAG_ID.P, TAG_ID.RB, TAG_ID.RP, TAG_ID.RT, TAG_ID.RTC]);
|
||
var IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = /* @__PURE__ */ new Set([
|
||
...IMPLICIT_END_TAG_REQUIRED,
|
||
TAG_ID.CAPTION,
|
||
TAG_ID.COLGROUP,
|
||
TAG_ID.TBODY,
|
||
TAG_ID.TD,
|
||
TAG_ID.TFOOT,
|
||
TAG_ID.TH,
|
||
TAG_ID.THEAD,
|
||
TAG_ID.TR
|
||
]);
|
||
var SCOPING_ELEMENT_NS = /* @__PURE__ */ new Map([
|
||
[TAG_ID.APPLET, NS.HTML],
|
||
[TAG_ID.CAPTION, NS.HTML],
|
||
[TAG_ID.HTML, NS.HTML],
|
||
[TAG_ID.MARQUEE, NS.HTML],
|
||
[TAG_ID.OBJECT, NS.HTML],
|
||
[TAG_ID.TABLE, NS.HTML],
|
||
[TAG_ID.TD, NS.HTML],
|
||
[TAG_ID.TEMPLATE, NS.HTML],
|
||
[TAG_ID.TH, NS.HTML],
|
||
[TAG_ID.ANNOTATION_XML, NS.MATHML],
|
||
[TAG_ID.MI, NS.MATHML],
|
||
[TAG_ID.MN, NS.MATHML],
|
||
[TAG_ID.MO, NS.MATHML],
|
||
[TAG_ID.MS, NS.MATHML],
|
||
[TAG_ID.MTEXT, NS.MATHML],
|
||
[TAG_ID.DESC, NS.SVG],
|
||
[TAG_ID.FOREIGN_OBJECT, NS.SVG],
|
||
[TAG_ID.TITLE, NS.SVG]
|
||
]);
|
||
var NAMED_HEADERS = [TAG_ID.H1, TAG_ID.H2, TAG_ID.H3, TAG_ID.H4, TAG_ID.H5, TAG_ID.H6];
|
||
var TABLE_ROW_CONTEXT = [TAG_ID.TR, TAG_ID.TEMPLATE, TAG_ID.HTML];
|
||
var TABLE_BODY_CONTEXT = [TAG_ID.TBODY, TAG_ID.TFOOT, TAG_ID.THEAD, TAG_ID.TEMPLATE, TAG_ID.HTML];
|
||
var TABLE_CONTEXT = [TAG_ID.TABLE, TAG_ID.TEMPLATE, TAG_ID.HTML];
|
||
var TABLE_CELLS = [TAG_ID.TD, TAG_ID.TH];
|
||
var OpenElementStack = class {
|
||
get currentTmplContentOrNode() {
|
||
return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;
|
||
}
|
||
constructor(document2, treeAdapter, handler) {
|
||
this.treeAdapter = treeAdapter;
|
||
this.handler = handler;
|
||
this.items = [];
|
||
this.tagIDs = [];
|
||
this.stackTop = -1;
|
||
this.tmplCount = 0;
|
||
this.currentTagId = TAG_ID.UNKNOWN;
|
||
this.current = document2;
|
||
}
|
||
//Index of element
|
||
_indexOf(element3) {
|
||
return this.items.lastIndexOf(element3, this.stackTop);
|
||
}
|
||
//Update current element
|
||
_isInTemplate() {
|
||
return this.currentTagId === TAG_ID.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;
|
||
}
|
||
_updateCurrentElement() {
|
||
this.current = this.items[this.stackTop];
|
||
this.currentTagId = this.tagIDs[this.stackTop];
|
||
}
|
||
//Mutations
|
||
push(element3, tagID) {
|
||
this.stackTop++;
|
||
this.items[this.stackTop] = element3;
|
||
this.current = element3;
|
||
this.tagIDs[this.stackTop] = tagID;
|
||
this.currentTagId = tagID;
|
||
if (this._isInTemplate()) {
|
||
this.tmplCount++;
|
||
}
|
||
this.handler.onItemPush(element3, tagID, true);
|
||
}
|
||
pop() {
|
||
const popped = this.current;
|
||
if (this.tmplCount > 0 && this._isInTemplate()) {
|
||
this.tmplCount--;
|
||
}
|
||
this.stackTop--;
|
||
this._updateCurrentElement();
|
||
this.handler.onItemPop(popped, true);
|
||
}
|
||
replace(oldElement, newElement) {
|
||
const idx = this._indexOf(oldElement);
|
||
this.items[idx] = newElement;
|
||
if (idx === this.stackTop) {
|
||
this.current = newElement;
|
||
}
|
||
}
|
||
insertAfter(referenceElement, newElement, newElementID) {
|
||
const insertionIdx = this._indexOf(referenceElement) + 1;
|
||
this.items.splice(insertionIdx, 0, newElement);
|
||
this.tagIDs.splice(insertionIdx, 0, newElementID);
|
||
this.stackTop++;
|
||
if (insertionIdx === this.stackTop) {
|
||
this._updateCurrentElement();
|
||
}
|
||
this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);
|
||
}
|
||
popUntilTagNamePopped(tagName) {
|
||
let targetIdx = this.stackTop + 1;
|
||
do {
|
||
targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);
|
||
} while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);
|
||
this.shortenToLength(targetIdx < 0 ? 0 : targetIdx);
|
||
}
|
||
shortenToLength(idx) {
|
||
while (this.stackTop >= idx) {
|
||
const popped = this.current;
|
||
if (this.tmplCount > 0 && this._isInTemplate()) {
|
||
this.tmplCount -= 1;
|
||
}
|
||
this.stackTop--;
|
||
this._updateCurrentElement();
|
||
this.handler.onItemPop(popped, this.stackTop < idx);
|
||
}
|
||
}
|
||
popUntilElementPopped(element3) {
|
||
const idx = this._indexOf(element3);
|
||
this.shortenToLength(idx < 0 ? 0 : idx);
|
||
}
|
||
popUntilPopped(tagNames, targetNS) {
|
||
const idx = this._indexOfTagNames(tagNames, targetNS);
|
||
this.shortenToLength(idx < 0 ? 0 : idx);
|
||
}
|
||
popUntilNumberedHeaderPopped() {
|
||
this.popUntilPopped(NAMED_HEADERS, NS.HTML);
|
||
}
|
||
popUntilTableCellPopped() {
|
||
this.popUntilPopped(TABLE_CELLS, NS.HTML);
|
||
}
|
||
popAllUpToHtmlElement() {
|
||
this.tmplCount = 0;
|
||
this.shortenToLength(1);
|
||
}
|
||
_indexOfTagNames(tagNames, namespace) {
|
||
for (let i2 = this.stackTop; i2 >= 0; i2--) {
|
||
if (tagNames.includes(this.tagIDs[i2]) && this.treeAdapter.getNamespaceURI(this.items[i2]) === namespace) {
|
||
return i2;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
clearBackTo(tagNames, targetNS) {
|
||
const idx = this._indexOfTagNames(tagNames, targetNS);
|
||
this.shortenToLength(idx + 1);
|
||
}
|
||
clearBackToTableContext() {
|
||
this.clearBackTo(TABLE_CONTEXT, NS.HTML);
|
||
}
|
||
clearBackToTableBodyContext() {
|
||
this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);
|
||
}
|
||
clearBackToTableRowContext() {
|
||
this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);
|
||
}
|
||
remove(element3) {
|
||
const idx = this._indexOf(element3);
|
||
if (idx >= 0) {
|
||
if (idx === this.stackTop) {
|
||
this.pop();
|
||
} else {
|
||
this.items.splice(idx, 1);
|
||
this.tagIDs.splice(idx, 1);
|
||
this.stackTop--;
|
||
this._updateCurrentElement();
|
||
this.handler.onItemPop(element3, false);
|
||
}
|
||
}
|
||
}
|
||
//Search
|
||
tryPeekProperlyNestedBodyElement() {
|
||
return this.stackTop >= 1 && this.tagIDs[1] === TAG_ID.BODY ? this.items[1] : null;
|
||
}
|
||
contains(element3) {
|
||
return this._indexOf(element3) > -1;
|
||
}
|
||
getCommonAncestor(element3) {
|
||
const elementIdx = this._indexOf(element3) - 1;
|
||
return elementIdx >= 0 ? this.items[elementIdx] : null;
|
||
}
|
||
isRootHtmlElementCurrent() {
|
||
return this.stackTop === 0 && this.tagIDs[0] === TAG_ID.HTML;
|
||
}
|
||
//Element in scope
|
||
hasInScope(tagName) {
|
||
for (let i2 = this.stackTop; i2 >= 0; i2--) {
|
||
const tn = this.tagIDs[i2];
|
||
const ns = this.treeAdapter.getNamespaceURI(this.items[i2]);
|
||
if (tn === tagName && ns === NS.HTML) {
|
||
return true;
|
||
}
|
||
if (SCOPING_ELEMENT_NS.get(tn) === ns) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
hasNumberedHeaderInScope() {
|
||
for (let i2 = this.stackTop; i2 >= 0; i2--) {
|
||
const tn = this.tagIDs[i2];
|
||
const ns = this.treeAdapter.getNamespaceURI(this.items[i2]);
|
||
if (isNumberedHeader(tn) && ns === NS.HTML) {
|
||
return true;
|
||
}
|
||
if (SCOPING_ELEMENT_NS.get(tn) === ns) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
hasInListItemScope(tagName) {
|
||
for (let i2 = this.stackTop; i2 >= 0; i2--) {
|
||
const tn = this.tagIDs[i2];
|
||
const ns = this.treeAdapter.getNamespaceURI(this.items[i2]);
|
||
if (tn === tagName && ns === NS.HTML) {
|
||
return true;
|
||
}
|
||
if ((tn === TAG_ID.UL || tn === TAG_ID.OL) && ns === NS.HTML || SCOPING_ELEMENT_NS.get(tn) === ns) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
hasInButtonScope(tagName) {
|
||
for (let i2 = this.stackTop; i2 >= 0; i2--) {
|
||
const tn = this.tagIDs[i2];
|
||
const ns = this.treeAdapter.getNamespaceURI(this.items[i2]);
|
||
if (tn === tagName && ns === NS.HTML) {
|
||
return true;
|
||
}
|
||
if (tn === TAG_ID.BUTTON && ns === NS.HTML || SCOPING_ELEMENT_NS.get(tn) === ns) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
hasInTableScope(tagName) {
|
||
for (let i2 = this.stackTop; i2 >= 0; i2--) {
|
||
const tn = this.tagIDs[i2];
|
||
const ns = this.treeAdapter.getNamespaceURI(this.items[i2]);
|
||
if (ns !== NS.HTML) {
|
||
continue;
|
||
}
|
||
if (tn === tagName) {
|
||
return true;
|
||
}
|
||
if (tn === TAG_ID.TABLE || tn === TAG_ID.TEMPLATE || tn === TAG_ID.HTML) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
hasTableBodyContextInTableScope() {
|
||
for (let i2 = this.stackTop; i2 >= 0; i2--) {
|
||
const tn = this.tagIDs[i2];
|
||
const ns = this.treeAdapter.getNamespaceURI(this.items[i2]);
|
||
if (ns !== NS.HTML) {
|
||
continue;
|
||
}
|
||
if (tn === TAG_ID.TBODY || tn === TAG_ID.THEAD || tn === TAG_ID.TFOOT) {
|
||
return true;
|
||
}
|
||
if (tn === TAG_ID.TABLE || tn === TAG_ID.HTML) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
hasInSelectScope(tagName) {
|
||
for (let i2 = this.stackTop; i2 >= 0; i2--) {
|
||
const tn = this.tagIDs[i2];
|
||
const ns = this.treeAdapter.getNamespaceURI(this.items[i2]);
|
||
if (ns !== NS.HTML) {
|
||
continue;
|
||
}
|
||
if (tn === tagName) {
|
||
return true;
|
||
}
|
||
if (tn !== TAG_ID.OPTION && tn !== TAG_ID.OPTGROUP) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
//Implied end tags
|
||
generateImpliedEndTags() {
|
||
while (IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {
|
||
this.pop();
|
||
}
|
||
}
|
||
generateImpliedEndTagsThoroughly() {
|
||
while (IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {
|
||
this.pop();
|
||
}
|
||
}
|
||
generateImpliedEndTagsWithExclusion(exclusionId) {
|
||
while (this.currentTagId !== exclusionId && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {
|
||
this.pop();
|
||
}
|
||
}
|
||
};
|
||
|
||
// node_modules/parse5/dist/parser/formatting-element-list.js
|
||
var NOAH_ARK_CAPACITY = 3;
|
||
var EntryType;
|
||
(function(EntryType2) {
|
||
EntryType2[EntryType2["Marker"] = 0] = "Marker";
|
||
EntryType2[EntryType2["Element"] = 1] = "Element";
|
||
})(EntryType = EntryType || (EntryType = {}));
|
||
var MARKER = { type: EntryType.Marker };
|
||
var FormattingElementList = class {
|
||
constructor(treeAdapter) {
|
||
this.treeAdapter = treeAdapter;
|
||
this.entries = [];
|
||
this.bookmark = null;
|
||
}
|
||
//Noah Ark's condition
|
||
//OPTIMIZATION: at first we try to find possible candidates for exclusion using
|
||
//lightweight heuristics without thorough attributes check.
|
||
_getNoahArkConditionCandidates(newElement, neAttrs) {
|
||
const candidates = [];
|
||
const neAttrsLength = neAttrs.length;
|
||
const neTagName = this.treeAdapter.getTagName(newElement);
|
||
const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);
|
||
for (let i2 = 0; i2 < this.entries.length; i2++) {
|
||
const entry = this.entries[i2];
|
||
if (entry.type === EntryType.Marker) {
|
||
break;
|
||
}
|
||
const { element: element3 } = entry;
|
||
if (this.treeAdapter.getTagName(element3) === neTagName && this.treeAdapter.getNamespaceURI(element3) === neNamespaceURI) {
|
||
const elementAttrs = this.treeAdapter.getAttrList(element3);
|
||
if (elementAttrs.length === neAttrsLength) {
|
||
candidates.push({ idx: i2, attrs: elementAttrs });
|
||
}
|
||
}
|
||
}
|
||
return candidates;
|
||
}
|
||
_ensureNoahArkCondition(newElement) {
|
||
if (this.entries.length < NOAH_ARK_CAPACITY)
|
||
return;
|
||
const neAttrs = this.treeAdapter.getAttrList(newElement);
|
||
const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);
|
||
if (candidates.length < NOAH_ARK_CAPACITY)
|
||
return;
|
||
const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));
|
||
let validCandidates = 0;
|
||
for (let i2 = 0; i2 < candidates.length; i2++) {
|
||
const candidate = candidates[i2];
|
||
if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {
|
||
validCandidates += 1;
|
||
if (validCandidates >= NOAH_ARK_CAPACITY) {
|
||
this.entries.splice(candidate.idx, 1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//Mutations
|
||
insertMarker() {
|
||
this.entries.unshift(MARKER);
|
||
}
|
||
pushElement(element3, token) {
|
||
this._ensureNoahArkCondition(element3);
|
||
this.entries.unshift({
|
||
type: EntryType.Element,
|
||
element: element3,
|
||
token
|
||
});
|
||
}
|
||
insertElementAfterBookmark(element3, token) {
|
||
const bookmarkIdx = this.entries.indexOf(this.bookmark);
|
||
this.entries.splice(bookmarkIdx, 0, {
|
||
type: EntryType.Element,
|
||
element: element3,
|
||
token
|
||
});
|
||
}
|
||
removeEntry(entry) {
|
||
const entryIndex = this.entries.indexOf(entry);
|
||
if (entryIndex >= 0) {
|
||
this.entries.splice(entryIndex, 1);
|
||
}
|
||
}
|
||
/**
|
||
* Clears the list of formatting elements up to the last marker.
|
||
*
|
||
* @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker
|
||
*/
|
||
clearToLastMarker() {
|
||
const markerIdx = this.entries.indexOf(MARKER);
|
||
if (markerIdx >= 0) {
|
||
this.entries.splice(0, markerIdx + 1);
|
||
} else {
|
||
this.entries.length = 0;
|
||
}
|
||
}
|
||
//Search
|
||
getElementEntryInScopeWithTagName(tagName) {
|
||
const entry = this.entries.find((entry2) => entry2.type === EntryType.Marker || this.treeAdapter.getTagName(entry2.element) === tagName);
|
||
return entry && entry.type === EntryType.Element ? entry : null;
|
||
}
|
||
getElementEntry(element3) {
|
||
return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element3);
|
||
}
|
||
};
|
||
|
||
// node_modules/parse5/dist/tree-adapters/default.js
|
||
function createTextNode(value) {
|
||
return {
|
||
nodeName: "#text",
|
||
value,
|
||
parentNode: null
|
||
};
|
||
}
|
||
var defaultTreeAdapter = {
|
||
//Node construction
|
||
createDocument() {
|
||
return {
|
||
nodeName: "#document",
|
||
mode: DOCUMENT_MODE.NO_QUIRKS,
|
||
childNodes: []
|
||
};
|
||
},
|
||
createDocumentFragment() {
|
||
return {
|
||
nodeName: "#document-fragment",
|
||
childNodes: []
|
||
};
|
||
},
|
||
createElement(tagName, namespaceURI, attrs) {
|
||
return {
|
||
nodeName: tagName,
|
||
tagName,
|
||
attrs,
|
||
namespaceURI,
|
||
childNodes: [],
|
||
parentNode: null
|
||
};
|
||
},
|
||
createCommentNode(data) {
|
||
return {
|
||
nodeName: "#comment",
|
||
data,
|
||
parentNode: null
|
||
};
|
||
},
|
||
//Tree mutation
|
||
appendChild(parentNode, newNode) {
|
||
parentNode.childNodes.push(newNode);
|
||
newNode.parentNode = parentNode;
|
||
},
|
||
insertBefore(parentNode, newNode, referenceNode) {
|
||
const insertionIdx = parentNode.childNodes.indexOf(referenceNode);
|
||
parentNode.childNodes.splice(insertionIdx, 0, newNode);
|
||
newNode.parentNode = parentNode;
|
||
},
|
||
setTemplateContent(templateElement, contentElement) {
|
||
templateElement.content = contentElement;
|
||
},
|
||
getTemplateContent(templateElement) {
|
||
return templateElement.content;
|
||
},
|
||
setDocumentType(document2, name, publicId, systemId) {
|
||
const doctypeNode = document2.childNodes.find((node) => node.nodeName === "#documentType");
|
||
if (doctypeNode) {
|
||
doctypeNode.name = name;
|
||
doctypeNode.publicId = publicId;
|
||
doctypeNode.systemId = systemId;
|
||
} else {
|
||
const node = {
|
||
nodeName: "#documentType",
|
||
name,
|
||
publicId,
|
||
systemId,
|
||
parentNode: null
|
||
};
|
||
defaultTreeAdapter.appendChild(document2, node);
|
||
}
|
||
},
|
||
setDocumentMode(document2, mode) {
|
||
document2.mode = mode;
|
||
},
|
||
getDocumentMode(document2) {
|
||
return document2.mode;
|
||
},
|
||
detachNode(node) {
|
||
if (node.parentNode) {
|
||
const idx = node.parentNode.childNodes.indexOf(node);
|
||
node.parentNode.childNodes.splice(idx, 1);
|
||
node.parentNode = null;
|
||
}
|
||
},
|
||
insertText(parentNode, text2) {
|
||
if (parentNode.childNodes.length > 0) {
|
||
const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];
|
||
if (defaultTreeAdapter.isTextNode(prevNode)) {
|
||
prevNode.value += text2;
|
||
return;
|
||
}
|
||
}
|
||
defaultTreeAdapter.appendChild(parentNode, createTextNode(text2));
|
||
},
|
||
insertTextBefore(parentNode, text2, referenceNode) {
|
||
const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];
|
||
if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {
|
||
prevNode.value += text2;
|
||
} else {
|
||
defaultTreeAdapter.insertBefore(parentNode, createTextNode(text2), referenceNode);
|
||
}
|
||
},
|
||
adoptAttributes(recipient, attrs) {
|
||
const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));
|
||
for (let j2 = 0; j2 < attrs.length; j2++) {
|
||
if (!recipientAttrsMap.has(attrs[j2].name)) {
|
||
recipient.attrs.push(attrs[j2]);
|
||
}
|
||
}
|
||
},
|
||
//Tree traversing
|
||
getFirstChild(node) {
|
||
return node.childNodes[0];
|
||
},
|
||
getChildNodes(node) {
|
||
return node.childNodes;
|
||
},
|
||
getParentNode(node) {
|
||
return node.parentNode;
|
||
},
|
||
getAttrList(element3) {
|
||
return element3.attrs;
|
||
},
|
||
//Node data
|
||
getTagName(element3) {
|
||
return element3.tagName;
|
||
},
|
||
getNamespaceURI(element3) {
|
||
return element3.namespaceURI;
|
||
},
|
||
getTextNodeContent(textNode) {
|
||
return textNode.value;
|
||
},
|
||
getCommentNodeContent(commentNode) {
|
||
return commentNode.data;
|
||
},
|
||
getDocumentTypeNodeName(doctypeNode) {
|
||
return doctypeNode.name;
|
||
},
|
||
getDocumentTypeNodePublicId(doctypeNode) {
|
||
return doctypeNode.publicId;
|
||
},
|
||
getDocumentTypeNodeSystemId(doctypeNode) {
|
||
return doctypeNode.systemId;
|
||
},
|
||
//Node types
|
||
isTextNode(node) {
|
||
return node.nodeName === "#text";
|
||
},
|
||
isCommentNode(node) {
|
||
return node.nodeName === "#comment";
|
||
},
|
||
isDocumentTypeNode(node) {
|
||
return node.nodeName === "#documentType";
|
||
},
|
||
isElementNode(node) {
|
||
return Object.prototype.hasOwnProperty.call(node, "tagName");
|
||
},
|
||
// Source code location
|
||
setNodeSourceCodeLocation(node, location2) {
|
||
node.sourceCodeLocation = location2;
|
||
},
|
||
getNodeSourceCodeLocation(node) {
|
||
return node.sourceCodeLocation;
|
||
},
|
||
updateNodeSourceCodeLocation(node, endLocation) {
|
||
node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };
|
||
}
|
||
};
|
||
|
||
// node_modules/parse5/dist/common/doctype.js
|
||
var VALID_DOCTYPE_NAME = "html";
|
||
var VALID_SYSTEM_ID = "about:legacy-compat";
|
||
var QUIRKS_MODE_SYSTEM_ID = "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd";
|
||
var QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
|
||
"+//silmaril//dtd html pro v0r11 19970101//",
|
||
"-//as//dtd html 3.0 aswedit + extensions//",
|
||
"-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
|
||
"-//ietf//dtd html 2.0 level 1//",
|
||
"-//ietf//dtd html 2.0 level 2//",
|
||
"-//ietf//dtd html 2.0 strict level 1//",
|
||
"-//ietf//dtd html 2.0 strict level 2//",
|
||
"-//ietf//dtd html 2.0 strict//",
|
||
"-//ietf//dtd html 2.0//",
|
||
"-//ietf//dtd html 2.1e//",
|
||
"-//ietf//dtd html 3.0//",
|
||
"-//ietf//dtd html 3.2 final//",
|
||
"-//ietf//dtd html 3.2//",
|
||
"-//ietf//dtd html 3//",
|
||
"-//ietf//dtd html level 0//",
|
||
"-//ietf//dtd html level 1//",
|
||
"-//ietf//dtd html level 2//",
|
||
"-//ietf//dtd html level 3//",
|
||
"-//ietf//dtd html strict level 0//",
|
||
"-//ietf//dtd html strict level 1//",
|
||
"-//ietf//dtd html strict level 2//",
|
||
"-//ietf//dtd html strict level 3//",
|
||
"-//ietf//dtd html strict//",
|
||
"-//ietf//dtd html//",
|
||
"-//metrius//dtd metrius presentational//",
|
||
"-//microsoft//dtd internet explorer 2.0 html strict//",
|
||
"-//microsoft//dtd internet explorer 2.0 html//",
|
||
"-//microsoft//dtd internet explorer 2.0 tables//",
|
||
"-//microsoft//dtd internet explorer 3.0 html strict//",
|
||
"-//microsoft//dtd internet explorer 3.0 html//",
|
||
"-//microsoft//dtd internet explorer 3.0 tables//",
|
||
"-//netscape comm. corp.//dtd html//",
|
||
"-//netscape comm. corp.//dtd strict html//",
|
||
"-//o'reilly and associates//dtd html 2.0//",
|
||
"-//o'reilly and associates//dtd html extended 1.0//",
|
||
"-//o'reilly and associates//dtd html extended relaxed 1.0//",
|
||
"-//sq//dtd html 2.0 hotmetal + extensions//",
|
||
"-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
|
||
"-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
|
||
"-//spyglass//dtd html 2.0 extended//",
|
||
"-//sun microsystems corp.//dtd hotjava html//",
|
||
"-//sun microsystems corp.//dtd hotjava strict html//",
|
||
"-//w3c//dtd html 3 1995-03-24//",
|
||
"-//w3c//dtd html 3.2 draft//",
|
||
"-//w3c//dtd html 3.2 final//",
|
||
"-//w3c//dtd html 3.2//",
|
||
"-//w3c//dtd html 3.2s draft//",
|
||
"-//w3c//dtd html 4.0 frameset//",
|
||
"-//w3c//dtd html 4.0 transitional//",
|
||
"-//w3c//dtd html experimental 19960712//",
|
||
"-//w3c//dtd html experimental 970421//",
|
||
"-//w3c//dtd w3 html//",
|
||
"-//w3o//dtd w3 html 3.0//",
|
||
"-//webtechs//dtd mozilla html 2.0//",
|
||
"-//webtechs//dtd mozilla html//"
|
||
];
|
||
var QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
|
||
...QUIRKS_MODE_PUBLIC_ID_PREFIXES,
|
||
"-//w3c//dtd html 4.01 frameset//",
|
||
"-//w3c//dtd html 4.01 transitional//"
|
||
];
|
||
var QUIRKS_MODE_PUBLIC_IDS = /* @__PURE__ */ new Set([
|
||
"-//w3o//dtd w3 html strict 3.0//en//",
|
||
"-/w3c/dtd html 4.0 transitional/en",
|
||
"html"
|
||
]);
|
||
var LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ["-//w3c//dtd xhtml 1.0 frameset//", "-//w3c//dtd xhtml 1.0 transitional//"];
|
||
var LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
|
||
...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,
|
||
"-//w3c//dtd html 4.01 frameset//",
|
||
"-//w3c//dtd html 4.01 transitional//"
|
||
];
|
||
function hasPrefix(publicId, prefixes) {
|
||
return prefixes.some((prefix) => publicId.startsWith(prefix));
|
||
}
|
||
function isConforming(token) {
|
||
return token.name === VALID_DOCTYPE_NAME && token.publicId === null && (token.systemId === null || token.systemId === VALID_SYSTEM_ID);
|
||
}
|
||
function getDocumentMode(token) {
|
||
if (token.name !== VALID_DOCTYPE_NAME) {
|
||
return DOCUMENT_MODE.QUIRKS;
|
||
}
|
||
const { systemId } = token;
|
||
if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {
|
||
return DOCUMENT_MODE.QUIRKS;
|
||
}
|
||
let { publicId } = token;
|
||
if (publicId !== null) {
|
||
publicId = publicId.toLowerCase();
|
||
if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {
|
||
return DOCUMENT_MODE.QUIRKS;
|
||
}
|
||
let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;
|
||
if (hasPrefix(publicId, prefixes)) {
|
||
return DOCUMENT_MODE.QUIRKS;
|
||
}
|
||
prefixes = systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
|
||
if (hasPrefix(publicId, prefixes)) {
|
||
return DOCUMENT_MODE.LIMITED_QUIRKS;
|
||
}
|
||
}
|
||
return DOCUMENT_MODE.NO_QUIRKS;
|
||
}
|
||
|
||
// node_modules/parse5/dist/common/foreign-content.js
|
||
var foreign_content_exports = {};
|
||
__export(foreign_content_exports, {
|
||
SVG_TAG_NAMES_ADJUSTMENT_MAP: () => SVG_TAG_NAMES_ADJUSTMENT_MAP,
|
||
adjustTokenMathMLAttrs: () => adjustTokenMathMLAttrs,
|
||
adjustTokenSVGAttrs: () => adjustTokenSVGAttrs,
|
||
adjustTokenSVGTagName: () => adjustTokenSVGTagName,
|
||
adjustTokenXMLAttrs: () => adjustTokenXMLAttrs,
|
||
causesExit: () => causesExit,
|
||
isIntegrationPoint: () => isIntegrationPoint
|
||
});
|
||
var MIME_TYPES = {
|
||
TEXT_HTML: "text/html",
|
||
APPLICATION_XML: "application/xhtml+xml"
|
||
};
|
||
var DEFINITION_URL_ATTR = "definitionurl";
|
||
var ADJUSTED_DEFINITION_URL_ATTR = "definitionURL";
|
||
var SVG_ATTRS_ADJUSTMENT_MAP = new Map([
|
||
"attributeName",
|
||
"attributeType",
|
||
"baseFrequency",
|
||
"baseProfile",
|
||
"calcMode",
|
||
"clipPathUnits",
|
||
"diffuseConstant",
|
||
"edgeMode",
|
||
"filterUnits",
|
||
"glyphRef",
|
||
"gradientTransform",
|
||
"gradientUnits",
|
||
"kernelMatrix",
|
||
"kernelUnitLength",
|
||
"keyPoints",
|
||
"keySplines",
|
||
"keyTimes",
|
||
"lengthAdjust",
|
||
"limitingConeAngle",
|
||
"markerHeight",
|
||
"markerUnits",
|
||
"markerWidth",
|
||
"maskContentUnits",
|
||
"maskUnits",
|
||
"numOctaves",
|
||
"pathLength",
|
||
"patternContentUnits",
|
||
"patternTransform",
|
||
"patternUnits",
|
||
"pointsAtX",
|
||
"pointsAtY",
|
||
"pointsAtZ",
|
||
"preserveAlpha",
|
||
"preserveAspectRatio",
|
||
"primitiveUnits",
|
||
"refX",
|
||
"refY",
|
||
"repeatCount",
|
||
"repeatDur",
|
||
"requiredExtensions",
|
||
"requiredFeatures",
|
||
"specularConstant",
|
||
"specularExponent",
|
||
"spreadMethod",
|
||
"startOffset",
|
||
"stdDeviation",
|
||
"stitchTiles",
|
||
"surfaceScale",
|
||
"systemLanguage",
|
||
"tableValues",
|
||
"targetX",
|
||
"targetY",
|
||
"textLength",
|
||
"viewBox",
|
||
"viewTarget",
|
||
"xChannelSelector",
|
||
"yChannelSelector",
|
||
"zoomAndPan"
|
||
].map((attr) => [attr.toLowerCase(), attr]));
|
||
var XML_ATTRS_ADJUSTMENT_MAP = /* @__PURE__ */ new Map([
|
||
["xlink:actuate", { prefix: "xlink", name: "actuate", namespace: NS.XLINK }],
|
||
["xlink:arcrole", { prefix: "xlink", name: "arcrole", namespace: NS.XLINK }],
|
||
["xlink:href", { prefix: "xlink", name: "href", namespace: NS.XLINK }],
|
||
["xlink:role", { prefix: "xlink", name: "role", namespace: NS.XLINK }],
|
||
["xlink:show", { prefix: "xlink", name: "show", namespace: NS.XLINK }],
|
||
["xlink:title", { prefix: "xlink", name: "title", namespace: NS.XLINK }],
|
||
["xlink:type", { prefix: "xlink", name: "type", namespace: NS.XLINK }],
|
||
["xml:base", { prefix: "xml", name: "base", namespace: NS.XML }],
|
||
["xml:lang", { prefix: "xml", name: "lang", namespace: NS.XML }],
|
||
["xml:space", { prefix: "xml", name: "space", namespace: NS.XML }],
|
||
["xmlns", { prefix: "", name: "xmlns", namespace: NS.XMLNS }],
|
||
["xmlns:xlink", { prefix: "xmlns", name: "xlink", namespace: NS.XMLNS }]
|
||
]);
|
||
var SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([
|
||
"altGlyph",
|
||
"altGlyphDef",
|
||
"altGlyphItem",
|
||
"animateColor",
|
||
"animateMotion",
|
||
"animateTransform",
|
||
"clipPath",
|
||
"feBlend",
|
||
"feColorMatrix",
|
||
"feComponentTransfer",
|
||
"feComposite",
|
||
"feConvolveMatrix",
|
||
"feDiffuseLighting",
|
||
"feDisplacementMap",
|
||
"feDistantLight",
|
||
"feFlood",
|
||
"feFuncA",
|
||
"feFuncB",
|
||
"feFuncG",
|
||
"feFuncR",
|
||
"feGaussianBlur",
|
||
"feImage",
|
||
"feMerge",
|
||
"feMergeNode",
|
||
"feMorphology",
|
||
"feOffset",
|
||
"fePointLight",
|
||
"feSpecularLighting",
|
||
"feSpotLight",
|
||
"feTile",
|
||
"feTurbulence",
|
||
"foreignObject",
|
||
"glyphRef",
|
||
"linearGradient",
|
||
"radialGradient",
|
||
"textPath"
|
||
].map((tn) => [tn.toLowerCase(), tn]));
|
||
var EXITS_FOREIGN_CONTENT = /* @__PURE__ */ new Set([
|
||
TAG_ID.B,
|
||
TAG_ID.BIG,
|
||
TAG_ID.BLOCKQUOTE,
|
||
TAG_ID.BODY,
|
||
TAG_ID.BR,
|
||
TAG_ID.CENTER,
|
||
TAG_ID.CODE,
|
||
TAG_ID.DD,
|
||
TAG_ID.DIV,
|
||
TAG_ID.DL,
|
||
TAG_ID.DT,
|
||
TAG_ID.EM,
|
||
TAG_ID.EMBED,
|
||
TAG_ID.H1,
|
||
TAG_ID.H2,
|
||
TAG_ID.H3,
|
||
TAG_ID.H4,
|
||
TAG_ID.H5,
|
||
TAG_ID.H6,
|
||
TAG_ID.HEAD,
|
||
TAG_ID.HR,
|
||
TAG_ID.I,
|
||
TAG_ID.IMG,
|
||
TAG_ID.LI,
|
||
TAG_ID.LISTING,
|
||
TAG_ID.MENU,
|
||
TAG_ID.META,
|
||
TAG_ID.NOBR,
|
||
TAG_ID.OL,
|
||
TAG_ID.P,
|
||
TAG_ID.PRE,
|
||
TAG_ID.RUBY,
|
||
TAG_ID.S,
|
||
TAG_ID.SMALL,
|
||
TAG_ID.SPAN,
|
||
TAG_ID.STRONG,
|
||
TAG_ID.STRIKE,
|
||
TAG_ID.SUB,
|
||
TAG_ID.SUP,
|
||
TAG_ID.TABLE,
|
||
TAG_ID.TT,
|
||
TAG_ID.U,
|
||
TAG_ID.UL,
|
||
TAG_ID.VAR
|
||
]);
|
||
function causesExit(startTagToken) {
|
||
const tn = startTagToken.tagID;
|
||
const isFontWithAttrs = tn === TAG_ID.FONT && startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);
|
||
return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);
|
||
}
|
||
function adjustTokenMathMLAttrs(token) {
|
||
for (let i2 = 0; i2 < token.attrs.length; i2++) {
|
||
if (token.attrs[i2].name === DEFINITION_URL_ATTR) {
|
||
token.attrs[i2].name = ADJUSTED_DEFINITION_URL_ATTR;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
function adjustTokenSVGAttrs(token) {
|
||
for (let i2 = 0; i2 < token.attrs.length; i2++) {
|
||
const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i2].name);
|
||
if (adjustedAttrName != null) {
|
||
token.attrs[i2].name = adjustedAttrName;
|
||
}
|
||
}
|
||
}
|
||
function adjustTokenXMLAttrs(token) {
|
||
for (let i2 = 0; i2 < token.attrs.length; i2++) {
|
||
const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i2].name);
|
||
if (adjustedAttrEntry) {
|
||
token.attrs[i2].prefix = adjustedAttrEntry.prefix;
|
||
token.attrs[i2].name = adjustedAttrEntry.name;
|
||
token.attrs[i2].namespace = adjustedAttrEntry.namespace;
|
||
}
|
||
}
|
||
}
|
||
function adjustTokenSVGTagName(token) {
|
||
const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);
|
||
if (adjustedTagName != null) {
|
||
token.tagName = adjustedTagName;
|
||
token.tagID = getTagID(token.tagName);
|
||
}
|
||
}
|
||
function isMathMLTextIntegrationPoint(tn, ns) {
|
||
return ns === NS.MATHML && (tn === TAG_ID.MI || tn === TAG_ID.MO || tn === TAG_ID.MN || tn === TAG_ID.MS || tn === TAG_ID.MTEXT);
|
||
}
|
||
function isHtmlIntegrationPoint(tn, ns, attrs) {
|
||
if (ns === NS.MATHML && tn === TAG_ID.ANNOTATION_XML) {
|
||
for (let i2 = 0; i2 < attrs.length; i2++) {
|
||
if (attrs[i2].name === ATTRS.ENCODING) {
|
||
const value = attrs[i2].value.toLowerCase();
|
||
return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;
|
||
}
|
||
}
|
||
}
|
||
return ns === NS.SVG && (tn === TAG_ID.FOREIGN_OBJECT || tn === TAG_ID.DESC || tn === TAG_ID.TITLE);
|
||
}
|
||
function isIntegrationPoint(tn, ns, attrs, foreignNS) {
|
||
return (!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs) || (!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns);
|
||
}
|
||
|
||
// node_modules/parse5/dist/parser/index.js
|
||
var HIDDEN_INPUT_TYPE = "hidden";
|
||
var AA_OUTER_LOOP_ITER = 8;
|
||
var AA_INNER_LOOP_ITER = 3;
|
||
var InsertionMode;
|
||
(function(InsertionMode2) {
|
||
InsertionMode2[InsertionMode2["INITIAL"] = 0] = "INITIAL";
|
||
InsertionMode2[InsertionMode2["BEFORE_HTML"] = 1] = "BEFORE_HTML";
|
||
InsertionMode2[InsertionMode2["BEFORE_HEAD"] = 2] = "BEFORE_HEAD";
|
||
InsertionMode2[InsertionMode2["IN_HEAD"] = 3] = "IN_HEAD";
|
||
InsertionMode2[InsertionMode2["IN_HEAD_NO_SCRIPT"] = 4] = "IN_HEAD_NO_SCRIPT";
|
||
InsertionMode2[InsertionMode2["AFTER_HEAD"] = 5] = "AFTER_HEAD";
|
||
InsertionMode2[InsertionMode2["IN_BODY"] = 6] = "IN_BODY";
|
||
InsertionMode2[InsertionMode2["TEXT"] = 7] = "TEXT";
|
||
InsertionMode2[InsertionMode2["IN_TABLE"] = 8] = "IN_TABLE";
|
||
InsertionMode2[InsertionMode2["IN_TABLE_TEXT"] = 9] = "IN_TABLE_TEXT";
|
||
InsertionMode2[InsertionMode2["IN_CAPTION"] = 10] = "IN_CAPTION";
|
||
InsertionMode2[InsertionMode2["IN_COLUMN_GROUP"] = 11] = "IN_COLUMN_GROUP";
|
||
InsertionMode2[InsertionMode2["IN_TABLE_BODY"] = 12] = "IN_TABLE_BODY";
|
||
InsertionMode2[InsertionMode2["IN_ROW"] = 13] = "IN_ROW";
|
||
InsertionMode2[InsertionMode2["IN_CELL"] = 14] = "IN_CELL";
|
||
InsertionMode2[InsertionMode2["IN_SELECT"] = 15] = "IN_SELECT";
|
||
InsertionMode2[InsertionMode2["IN_SELECT_IN_TABLE"] = 16] = "IN_SELECT_IN_TABLE";
|
||
InsertionMode2[InsertionMode2["IN_TEMPLATE"] = 17] = "IN_TEMPLATE";
|
||
InsertionMode2[InsertionMode2["AFTER_BODY"] = 18] = "AFTER_BODY";
|
||
InsertionMode2[InsertionMode2["IN_FRAMESET"] = 19] = "IN_FRAMESET";
|
||
InsertionMode2[InsertionMode2["AFTER_FRAMESET"] = 20] = "AFTER_FRAMESET";
|
||
InsertionMode2[InsertionMode2["AFTER_AFTER_BODY"] = 21] = "AFTER_AFTER_BODY";
|
||
InsertionMode2[InsertionMode2["AFTER_AFTER_FRAMESET"] = 22] = "AFTER_AFTER_FRAMESET";
|
||
})(InsertionMode || (InsertionMode = {}));
|
||
var BASE_LOC = {
|
||
startLine: -1,
|
||
startCol: -1,
|
||
startOffset: -1,
|
||
endLine: -1,
|
||
endCol: -1,
|
||
endOffset: -1
|
||
};
|
||
var TABLE_STRUCTURE_TAGS = /* @__PURE__ */ new Set([TAG_ID.TABLE, TAG_ID.TBODY, TAG_ID.TFOOT, TAG_ID.THEAD, TAG_ID.TR]);
|
||
var defaultParserOptions = {
|
||
scriptingEnabled: true,
|
||
sourceCodeLocationInfo: false,
|
||
treeAdapter: defaultTreeAdapter,
|
||
onParseError: null
|
||
};
|
||
var Parser = class {
|
||
constructor(options, document2, fragmentContext = null, scriptHandler = null) {
|
||
this.fragmentContext = fragmentContext;
|
||
this.scriptHandler = scriptHandler;
|
||
this.currentToken = null;
|
||
this.stopped = false;
|
||
this.insertionMode = InsertionMode.INITIAL;
|
||
this.originalInsertionMode = InsertionMode.INITIAL;
|
||
this.headElement = null;
|
||
this.formElement = null;
|
||
this.currentNotInHTML = false;
|
||
this.tmplInsertionModeStack = [];
|
||
this.pendingCharacterTokens = [];
|
||
this.hasNonWhitespacePendingCharacterToken = false;
|
||
this.framesetOk = true;
|
||
this.skipNextNewLine = false;
|
||
this.fosterParentingEnabled = false;
|
||
this.options = {
|
||
...defaultParserOptions,
|
||
...options
|
||
};
|
||
this.treeAdapter = this.options.treeAdapter;
|
||
this.onParseError = this.options.onParseError;
|
||
if (this.onParseError) {
|
||
this.options.sourceCodeLocationInfo = true;
|
||
}
|
||
this.document = document2 !== null && document2 !== void 0 ? document2 : this.treeAdapter.createDocument();
|
||
this.tokenizer = new Tokenizer(this.options, this);
|
||
this.activeFormattingElements = new FormattingElementList(this.treeAdapter);
|
||
this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : TAG_ID.UNKNOWN;
|
||
this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);
|
||
this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);
|
||
}
|
||
// API
|
||
static parse(html5, options) {
|
||
const parser = new this(options);
|
||
parser.tokenizer.write(html5, true);
|
||
return parser.document;
|
||
}
|
||
static getFragmentParser(fragmentContext, options) {
|
||
const opts = {
|
||
...defaultParserOptions,
|
||
...options
|
||
};
|
||
fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : fragmentContext = opts.treeAdapter.createElement(TAG_NAMES.TEMPLATE, NS.HTML, []);
|
||
const documentMock = opts.treeAdapter.createElement("documentmock", NS.HTML, []);
|
||
const parser = new this(opts, documentMock, fragmentContext);
|
||
if (parser.fragmentContextID === TAG_ID.TEMPLATE) {
|
||
parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);
|
||
}
|
||
parser._initTokenizerForFragmentParsing();
|
||
parser._insertFakeRootElement();
|
||
parser._resetInsertionMode();
|
||
parser._findFormInFragmentContext();
|
||
return parser;
|
||
}
|
||
getFragment() {
|
||
const rootElement = this.treeAdapter.getFirstChild(this.document);
|
||
const fragment = this.treeAdapter.createDocumentFragment();
|
||
this._adoptNodes(rootElement, fragment);
|
||
return fragment;
|
||
}
|
||
//Errors
|
||
_err(token, code, beforeToken) {
|
||
var _a2;
|
||
if (!this.onParseError)
|
||
return;
|
||
const loc = (_a2 = token.location) !== null && _a2 !== void 0 ? _a2 : BASE_LOC;
|
||
const err = {
|
||
code,
|
||
startLine: loc.startLine,
|
||
startCol: loc.startCol,
|
||
startOffset: loc.startOffset,
|
||
endLine: beforeToken ? loc.startLine : loc.endLine,
|
||
endCol: beforeToken ? loc.startCol : loc.endCol,
|
||
endOffset: beforeToken ? loc.startOffset : loc.endOffset
|
||
};
|
||
this.onParseError(err);
|
||
}
|
||
//Stack events
|
||
onItemPush(node, tid, isTop) {
|
||
var _a2, _b;
|
||
(_b = (_a2 = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a2, node);
|
||
if (isTop && this.openElements.stackTop > 0)
|
||
this._setContextModes(node, tid);
|
||
}
|
||
onItemPop(node, isTop) {
|
||
var _a2, _b;
|
||
if (this.options.sourceCodeLocationInfo) {
|
||
this._setEndLocation(node, this.currentToken);
|
||
}
|
||
(_b = (_a2 = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a2, node, this.openElements.current);
|
||
if (isTop) {
|
||
let current;
|
||
let currentTagId;
|
||
if (this.openElements.stackTop === 0 && this.fragmentContext) {
|
||
current = this.fragmentContext;
|
||
currentTagId = this.fragmentContextID;
|
||
} else {
|
||
({ current, currentTagId } = this.openElements);
|
||
}
|
||
this._setContextModes(current, currentTagId);
|
||
}
|
||
}
|
||
_setContextModes(current, tid) {
|
||
const isHTML = current === this.document || this.treeAdapter.getNamespaceURI(current) === NS.HTML;
|
||
this.currentNotInHTML = !isHTML;
|
||
this.tokenizer.inForeignNode = !isHTML && !this._isIntegrationPoint(tid, current);
|
||
}
|
||
_switchToTextParsing(currentToken, nextTokenizerState) {
|
||
this._insertElement(currentToken, NS.HTML);
|
||
this.tokenizer.state = nextTokenizerState;
|
||
this.originalInsertionMode = this.insertionMode;
|
||
this.insertionMode = InsertionMode.TEXT;
|
||
}
|
||
switchToPlaintextParsing() {
|
||
this.insertionMode = InsertionMode.TEXT;
|
||
this.originalInsertionMode = InsertionMode.IN_BODY;
|
||
this.tokenizer.state = TokenizerMode.PLAINTEXT;
|
||
}
|
||
//Fragment parsing
|
||
_getAdjustedCurrentElement() {
|
||
return this.openElements.stackTop === 0 && this.fragmentContext ? this.fragmentContext : this.openElements.current;
|
||
}
|
||
_findFormInFragmentContext() {
|
||
let node = this.fragmentContext;
|
||
while (node) {
|
||
if (this.treeAdapter.getTagName(node) === TAG_NAMES.FORM) {
|
||
this.formElement = node;
|
||
break;
|
||
}
|
||
node = this.treeAdapter.getParentNode(node);
|
||
}
|
||
}
|
||
_initTokenizerForFragmentParsing() {
|
||
if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {
|
||
return;
|
||
}
|
||
switch (this.fragmentContextID) {
|
||
case TAG_ID.TITLE:
|
||
case TAG_ID.TEXTAREA: {
|
||
this.tokenizer.state = TokenizerMode.RCDATA;
|
||
break;
|
||
}
|
||
case TAG_ID.STYLE:
|
||
case TAG_ID.XMP:
|
||
case TAG_ID.IFRAME:
|
||
case TAG_ID.NOEMBED:
|
||
case TAG_ID.NOFRAMES:
|
||
case TAG_ID.NOSCRIPT: {
|
||
this.tokenizer.state = TokenizerMode.RAWTEXT;
|
||
break;
|
||
}
|
||
case TAG_ID.SCRIPT: {
|
||
this.tokenizer.state = TokenizerMode.SCRIPT_DATA;
|
||
break;
|
||
}
|
||
case TAG_ID.PLAINTEXT: {
|
||
this.tokenizer.state = TokenizerMode.PLAINTEXT;
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
//Tree mutation
|
||
_setDocumentType(token) {
|
||
const name = token.name || "";
|
||
const publicId = token.publicId || "";
|
||
const systemId = token.systemId || "";
|
||
this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);
|
||
if (token.location) {
|
||
const documentChildren = this.treeAdapter.getChildNodes(this.document);
|
||
const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));
|
||
if (docTypeNode) {
|
||
this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);
|
||
}
|
||
}
|
||
}
|
||
_attachElementToTree(element3, location2) {
|
||
if (this.options.sourceCodeLocationInfo) {
|
||
const loc = location2 && {
|
||
...location2,
|
||
startTag: location2
|
||
};
|
||
this.treeAdapter.setNodeSourceCodeLocation(element3, loc);
|
||
}
|
||
if (this._shouldFosterParentOnInsertion()) {
|
||
this._fosterParentElement(element3);
|
||
} else {
|
||
const parent = this.openElements.currentTmplContentOrNode;
|
||
this.treeAdapter.appendChild(parent, element3);
|
||
}
|
||
}
|
||
_appendElement(token, namespaceURI) {
|
||
const element3 = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);
|
||
this._attachElementToTree(element3, token.location);
|
||
}
|
||
_insertElement(token, namespaceURI) {
|
||
const element3 = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);
|
||
this._attachElementToTree(element3, token.location);
|
||
this.openElements.push(element3, token.tagID);
|
||
}
|
||
_insertFakeElement(tagName, tagID) {
|
||
const element3 = this.treeAdapter.createElement(tagName, NS.HTML, []);
|
||
this._attachElementToTree(element3, null);
|
||
this.openElements.push(element3, tagID);
|
||
}
|
||
_insertTemplate(token) {
|
||
const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);
|
||
const content = this.treeAdapter.createDocumentFragment();
|
||
this.treeAdapter.setTemplateContent(tmpl, content);
|
||
this._attachElementToTree(tmpl, token.location);
|
||
this.openElements.push(tmpl, token.tagID);
|
||
if (this.options.sourceCodeLocationInfo)
|
||
this.treeAdapter.setNodeSourceCodeLocation(content, null);
|
||
}
|
||
_insertFakeRootElement() {
|
||
const element3 = this.treeAdapter.createElement(TAG_NAMES.HTML, NS.HTML, []);
|
||
if (this.options.sourceCodeLocationInfo)
|
||
this.treeAdapter.setNodeSourceCodeLocation(element3, null);
|
||
this.treeAdapter.appendChild(this.openElements.current, element3);
|
||
this.openElements.push(element3, TAG_ID.HTML);
|
||
}
|
||
_appendCommentNode(token, parent) {
|
||
const commentNode = this.treeAdapter.createCommentNode(token.data);
|
||
this.treeAdapter.appendChild(parent, commentNode);
|
||
if (this.options.sourceCodeLocationInfo) {
|
||
this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);
|
||
}
|
||
}
|
||
_insertCharacters(token) {
|
||
let parent;
|
||
let beforeElement;
|
||
if (this._shouldFosterParentOnInsertion()) {
|
||
({ parent, beforeElement } = this._findFosterParentingLocation());
|
||
if (beforeElement) {
|
||
this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement);
|
||
} else {
|
||
this.treeAdapter.insertText(parent, token.chars);
|
||
}
|
||
} else {
|
||
parent = this.openElements.currentTmplContentOrNode;
|
||
this.treeAdapter.insertText(parent, token.chars);
|
||
}
|
||
if (!token.location)
|
||
return;
|
||
const siblings2 = this.treeAdapter.getChildNodes(parent);
|
||
const textNodeIdx = beforeElement ? siblings2.lastIndexOf(beforeElement) : siblings2.length;
|
||
const textNode = siblings2[textNodeIdx - 1];
|
||
const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);
|
||
if (tnLoc) {
|
||
const { endLine, endCol, endOffset } = token.location;
|
||
this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });
|
||
} else if (this.options.sourceCodeLocationInfo) {
|
||
this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);
|
||
}
|
||
}
|
||
_adoptNodes(donor, recipient) {
|
||
for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {
|
||
this.treeAdapter.detachNode(child);
|
||
this.treeAdapter.appendChild(recipient, child);
|
||
}
|
||
}
|
||
_setEndLocation(element3, closingToken) {
|
||
if (this.treeAdapter.getNodeSourceCodeLocation(element3) && closingToken.location) {
|
||
const ctLoc = closingToken.location;
|
||
const tn = this.treeAdapter.getTagName(element3);
|
||
const endLoc = (
|
||
// NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing
|
||
// tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.
|
||
closingToken.type === TokenType.END_TAG && tn === closingToken.tagName ? {
|
||
endTag: { ...ctLoc },
|
||
endLine: ctLoc.endLine,
|
||
endCol: ctLoc.endCol,
|
||
endOffset: ctLoc.endOffset
|
||
} : {
|
||
endLine: ctLoc.startLine,
|
||
endCol: ctLoc.startCol,
|
||
endOffset: ctLoc.startOffset
|
||
}
|
||
);
|
||
this.treeAdapter.updateNodeSourceCodeLocation(element3, endLoc);
|
||
}
|
||
}
|
||
//Token processing
|
||
shouldProcessStartTagTokenInForeignContent(token) {
|
||
if (!this.currentNotInHTML)
|
||
return false;
|
||
let current;
|
||
let currentTagId;
|
||
if (this.openElements.stackTop === 0 && this.fragmentContext) {
|
||
current = this.fragmentContext;
|
||
currentTagId = this.fragmentContextID;
|
||
} else {
|
||
({ current, currentTagId } = this.openElements);
|
||
}
|
||
if (token.tagID === TAG_ID.SVG && this.treeAdapter.getTagName(current) === TAG_NAMES.ANNOTATION_XML && this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {
|
||
return false;
|
||
}
|
||
return (
|
||
// Check that `current` is not an integration point for HTML or MathML elements.
|
||
this.tokenizer.inForeignNode || // If it _is_ an integration point, then we might have to check that it is not an HTML
|
||
// integration point.
|
||
(token.tagID === TAG_ID.MGLYPH || token.tagID === TAG_ID.MALIGNMARK) && !this._isIntegrationPoint(currentTagId, current, NS.HTML)
|
||
);
|
||
}
|
||
_processToken(token) {
|
||
switch (token.type) {
|
||
case TokenType.CHARACTER: {
|
||
this.onCharacter(token);
|
||
break;
|
||
}
|
||
case TokenType.NULL_CHARACTER: {
|
||
this.onNullCharacter(token);
|
||
break;
|
||
}
|
||
case TokenType.COMMENT: {
|
||
this.onComment(token);
|
||
break;
|
||
}
|
||
case TokenType.DOCTYPE: {
|
||
this.onDoctype(token);
|
||
break;
|
||
}
|
||
case TokenType.START_TAG: {
|
||
this._processStartTag(token);
|
||
break;
|
||
}
|
||
case TokenType.END_TAG: {
|
||
this.onEndTag(token);
|
||
break;
|
||
}
|
||
case TokenType.EOF: {
|
||
this.onEof(token);
|
||
break;
|
||
}
|
||
case TokenType.WHITESPACE_CHARACTER: {
|
||
this.onWhitespaceCharacter(token);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
//Integration points
|
||
_isIntegrationPoint(tid, element3, foreignNS) {
|
||
const ns = this.treeAdapter.getNamespaceURI(element3);
|
||
const attrs = this.treeAdapter.getAttrList(element3);
|
||
return isIntegrationPoint(tid, ns, attrs, foreignNS);
|
||
}
|
||
//Active formatting elements reconstruction
|
||
_reconstructActiveFormattingElements() {
|
||
const listLength = this.activeFormattingElements.entries.length;
|
||
if (listLength) {
|
||
const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === EntryType.Marker || this.openElements.contains(entry.element));
|
||
const unopenIdx = endIndex < 0 ? listLength - 1 : endIndex - 1;
|
||
for (let i2 = unopenIdx; i2 >= 0; i2--) {
|
||
const entry = this.activeFormattingElements.entries[i2];
|
||
this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));
|
||
entry.element = this.openElements.current;
|
||
}
|
||
}
|
||
}
|
||
//Close elements
|
||
_closeTableCell() {
|
||
this.openElements.generateImpliedEndTags();
|
||
this.openElements.popUntilTableCellPopped();
|
||
this.activeFormattingElements.clearToLastMarker();
|
||
this.insertionMode = InsertionMode.IN_ROW;
|
||
}
|
||
_closePElement() {
|
||
this.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.P);
|
||
this.openElements.popUntilTagNamePopped(TAG_ID.P);
|
||
}
|
||
//Insertion modes
|
||
_resetInsertionMode() {
|
||
for (let i2 = this.openElements.stackTop; i2 >= 0; i2--) {
|
||
switch (i2 === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i2]) {
|
||
case TAG_ID.TR: {
|
||
this.insertionMode = InsertionMode.IN_ROW;
|
||
return;
|
||
}
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.THEAD:
|
||
case TAG_ID.TFOOT: {
|
||
this.insertionMode = InsertionMode.IN_TABLE_BODY;
|
||
return;
|
||
}
|
||
case TAG_ID.CAPTION: {
|
||
this.insertionMode = InsertionMode.IN_CAPTION;
|
||
return;
|
||
}
|
||
case TAG_ID.COLGROUP: {
|
||
this.insertionMode = InsertionMode.IN_COLUMN_GROUP;
|
||
return;
|
||
}
|
||
case TAG_ID.TABLE: {
|
||
this.insertionMode = InsertionMode.IN_TABLE;
|
||
return;
|
||
}
|
||
case TAG_ID.BODY: {
|
||
this.insertionMode = InsertionMode.IN_BODY;
|
||
return;
|
||
}
|
||
case TAG_ID.FRAMESET: {
|
||
this.insertionMode = InsertionMode.IN_FRAMESET;
|
||
return;
|
||
}
|
||
case TAG_ID.SELECT: {
|
||
this._resetInsertionModeForSelect(i2);
|
||
return;
|
||
}
|
||
case TAG_ID.TEMPLATE: {
|
||
this.insertionMode = this.tmplInsertionModeStack[0];
|
||
return;
|
||
}
|
||
case TAG_ID.HTML: {
|
||
this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;
|
||
return;
|
||
}
|
||
case TAG_ID.TD:
|
||
case TAG_ID.TH: {
|
||
if (i2 > 0) {
|
||
this.insertionMode = InsertionMode.IN_CELL;
|
||
return;
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.HEAD: {
|
||
if (i2 > 0) {
|
||
this.insertionMode = InsertionMode.IN_HEAD;
|
||
return;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
this.insertionMode = InsertionMode.IN_BODY;
|
||
}
|
||
_resetInsertionModeForSelect(selectIdx) {
|
||
if (selectIdx > 0) {
|
||
for (let i2 = selectIdx - 1; i2 > 0; i2--) {
|
||
const tn = this.openElements.tagIDs[i2];
|
||
if (tn === TAG_ID.TEMPLATE) {
|
||
break;
|
||
} else if (tn === TAG_ID.TABLE) {
|
||
this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
this.insertionMode = InsertionMode.IN_SELECT;
|
||
}
|
||
//Foster parenting
|
||
_isElementCausesFosterParenting(tn) {
|
||
return TABLE_STRUCTURE_TAGS.has(tn);
|
||
}
|
||
_shouldFosterParentOnInsertion() {
|
||
return this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.currentTagId);
|
||
}
|
||
_findFosterParentingLocation() {
|
||
for (let i2 = this.openElements.stackTop; i2 >= 0; i2--) {
|
||
const openElement = this.openElements.items[i2];
|
||
switch (this.openElements.tagIDs[i2]) {
|
||
case TAG_ID.TEMPLATE: {
|
||
if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {
|
||
return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.TABLE: {
|
||
const parent = this.treeAdapter.getParentNode(openElement);
|
||
if (parent) {
|
||
return { parent, beforeElement: openElement };
|
||
}
|
||
return { parent: this.openElements.items[i2 - 1], beforeElement: null };
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
return { parent: this.openElements.items[0], beforeElement: null };
|
||
}
|
||
_fosterParentElement(element3) {
|
||
const location2 = this._findFosterParentingLocation();
|
||
if (location2.beforeElement) {
|
||
this.treeAdapter.insertBefore(location2.parent, element3, location2.beforeElement);
|
||
} else {
|
||
this.treeAdapter.appendChild(location2.parent, element3);
|
||
}
|
||
}
|
||
//Special elements
|
||
_isSpecialElement(element3, id) {
|
||
const ns = this.treeAdapter.getNamespaceURI(element3);
|
||
return SPECIAL_ELEMENTS[ns].has(id);
|
||
}
|
||
onCharacter(token) {
|
||
this.skipNextNewLine = false;
|
||
if (this.tokenizer.inForeignNode) {
|
||
characterInForeignContent(this, token);
|
||
return;
|
||
}
|
||
switch (this.insertionMode) {
|
||
case InsertionMode.INITIAL: {
|
||
tokenInInitialMode(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HTML: {
|
||
tokenBeforeHtml(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HEAD: {
|
||
tokenBeforeHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_HEAD: {
|
||
tokenInHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_HEAD_NO_SCRIPT: {
|
||
tokenInHeadNoScript(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_HEAD: {
|
||
tokenAfterHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_BODY:
|
||
case InsertionMode.IN_CAPTION:
|
||
case InsertionMode.IN_CELL:
|
||
case InsertionMode.IN_TEMPLATE: {
|
||
characterInBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.TEXT:
|
||
case InsertionMode.IN_SELECT:
|
||
case InsertionMode.IN_SELECT_IN_TABLE: {
|
||
this._insertCharacters(token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE:
|
||
case InsertionMode.IN_TABLE_BODY:
|
||
case InsertionMode.IN_ROW: {
|
||
characterInTable(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE_TEXT: {
|
||
characterInTableText(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_COLUMN_GROUP: {
|
||
tokenInColumnGroup(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_BODY: {
|
||
tokenAfterBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_AFTER_BODY: {
|
||
tokenAfterAfterBody(this, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
onNullCharacter(token) {
|
||
this.skipNextNewLine = false;
|
||
if (this.tokenizer.inForeignNode) {
|
||
nullCharacterInForeignContent(this, token);
|
||
return;
|
||
}
|
||
switch (this.insertionMode) {
|
||
case InsertionMode.INITIAL: {
|
||
tokenInInitialMode(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HTML: {
|
||
tokenBeforeHtml(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HEAD: {
|
||
tokenBeforeHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_HEAD: {
|
||
tokenInHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_HEAD_NO_SCRIPT: {
|
||
tokenInHeadNoScript(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_HEAD: {
|
||
tokenAfterHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.TEXT: {
|
||
this._insertCharacters(token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE:
|
||
case InsertionMode.IN_TABLE_BODY:
|
||
case InsertionMode.IN_ROW: {
|
||
characterInTable(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_COLUMN_GROUP: {
|
||
tokenInColumnGroup(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_BODY: {
|
||
tokenAfterBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_AFTER_BODY: {
|
||
tokenAfterAfterBody(this, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
onComment(token) {
|
||
this.skipNextNewLine = false;
|
||
if (this.currentNotInHTML) {
|
||
appendComment(this, token);
|
||
return;
|
||
}
|
||
switch (this.insertionMode) {
|
||
case InsertionMode.INITIAL:
|
||
case InsertionMode.BEFORE_HTML:
|
||
case InsertionMode.BEFORE_HEAD:
|
||
case InsertionMode.IN_HEAD:
|
||
case InsertionMode.IN_HEAD_NO_SCRIPT:
|
||
case InsertionMode.AFTER_HEAD:
|
||
case InsertionMode.IN_BODY:
|
||
case InsertionMode.IN_TABLE:
|
||
case InsertionMode.IN_CAPTION:
|
||
case InsertionMode.IN_COLUMN_GROUP:
|
||
case InsertionMode.IN_TABLE_BODY:
|
||
case InsertionMode.IN_ROW:
|
||
case InsertionMode.IN_CELL:
|
||
case InsertionMode.IN_SELECT:
|
||
case InsertionMode.IN_SELECT_IN_TABLE:
|
||
case InsertionMode.IN_TEMPLATE:
|
||
case InsertionMode.IN_FRAMESET:
|
||
case InsertionMode.AFTER_FRAMESET: {
|
||
appendComment(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE_TEXT: {
|
||
tokenInTableText(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_BODY: {
|
||
appendCommentToRootHtmlElement(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_AFTER_BODY:
|
||
case InsertionMode.AFTER_AFTER_FRAMESET: {
|
||
appendCommentToDocument(this, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
onDoctype(token) {
|
||
this.skipNextNewLine = false;
|
||
switch (this.insertionMode) {
|
||
case InsertionMode.INITIAL: {
|
||
doctypeInInitialMode(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HEAD:
|
||
case InsertionMode.IN_HEAD:
|
||
case InsertionMode.IN_HEAD_NO_SCRIPT:
|
||
case InsertionMode.AFTER_HEAD: {
|
||
this._err(token, ERR.misplacedDoctype);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE_TEXT: {
|
||
tokenInTableText(this, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
onStartTag(token) {
|
||
this.skipNextNewLine = false;
|
||
this.currentToken = token;
|
||
this._processStartTag(token);
|
||
if (token.selfClosing && !token.ackSelfClosing) {
|
||
this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);
|
||
}
|
||
}
|
||
/**
|
||
* Processes a given start tag.
|
||
*
|
||
* `onStartTag` checks if a self-closing tag was recognized. When a token
|
||
* is moved inbetween multiple insertion modes, this check for self-closing
|
||
* could lead to false positives. To avoid this, `_processStartTag` is used
|
||
* for nested calls.
|
||
*
|
||
* @param token The token to process.
|
||
*/
|
||
_processStartTag(token) {
|
||
if (this.shouldProcessStartTagTokenInForeignContent(token)) {
|
||
startTagInForeignContent(this, token);
|
||
} else {
|
||
this._startTagOutsideForeignContent(token);
|
||
}
|
||
}
|
||
_startTagOutsideForeignContent(token) {
|
||
switch (this.insertionMode) {
|
||
case InsertionMode.INITIAL: {
|
||
tokenInInitialMode(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HTML: {
|
||
startTagBeforeHtml(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HEAD: {
|
||
startTagBeforeHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_HEAD: {
|
||
startTagInHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_HEAD_NO_SCRIPT: {
|
||
startTagInHeadNoScript(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_HEAD: {
|
||
startTagAfterHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_BODY: {
|
||
startTagInBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE: {
|
||
startTagInTable(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE_TEXT: {
|
||
tokenInTableText(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_CAPTION: {
|
||
startTagInCaption(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_COLUMN_GROUP: {
|
||
startTagInColumnGroup(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE_BODY: {
|
||
startTagInTableBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_ROW: {
|
||
startTagInRow(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_CELL: {
|
||
startTagInCell(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_SELECT: {
|
||
startTagInSelect(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_SELECT_IN_TABLE: {
|
||
startTagInSelectInTable(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TEMPLATE: {
|
||
startTagInTemplate(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_BODY: {
|
||
startTagAfterBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_FRAMESET: {
|
||
startTagInFrameset(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_FRAMESET: {
|
||
startTagAfterFrameset(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_AFTER_BODY: {
|
||
startTagAfterAfterBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_AFTER_FRAMESET: {
|
||
startTagAfterAfterFrameset(this, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
onEndTag(token) {
|
||
this.skipNextNewLine = false;
|
||
this.currentToken = token;
|
||
if (this.currentNotInHTML) {
|
||
endTagInForeignContent(this, token);
|
||
} else {
|
||
this._endTagOutsideForeignContent(token);
|
||
}
|
||
}
|
||
_endTagOutsideForeignContent(token) {
|
||
switch (this.insertionMode) {
|
||
case InsertionMode.INITIAL: {
|
||
tokenInInitialMode(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HTML: {
|
||
endTagBeforeHtml(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HEAD: {
|
||
endTagBeforeHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_HEAD: {
|
||
endTagInHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_HEAD_NO_SCRIPT: {
|
||
endTagInHeadNoScript(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_HEAD: {
|
||
endTagAfterHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_BODY: {
|
||
endTagInBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.TEXT: {
|
||
endTagInText(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE: {
|
||
endTagInTable(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE_TEXT: {
|
||
tokenInTableText(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_CAPTION: {
|
||
endTagInCaption(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_COLUMN_GROUP: {
|
||
endTagInColumnGroup(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE_BODY: {
|
||
endTagInTableBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_ROW: {
|
||
endTagInRow(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_CELL: {
|
||
endTagInCell(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_SELECT: {
|
||
endTagInSelect(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_SELECT_IN_TABLE: {
|
||
endTagInSelectInTable(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TEMPLATE: {
|
||
endTagInTemplate(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_BODY: {
|
||
endTagAfterBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_FRAMESET: {
|
||
endTagInFrameset(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_FRAMESET: {
|
||
endTagAfterFrameset(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_AFTER_BODY: {
|
||
tokenAfterAfterBody(this, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
onEof(token) {
|
||
switch (this.insertionMode) {
|
||
case InsertionMode.INITIAL: {
|
||
tokenInInitialMode(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HTML: {
|
||
tokenBeforeHtml(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.BEFORE_HEAD: {
|
||
tokenBeforeHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_HEAD: {
|
||
tokenInHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_HEAD_NO_SCRIPT: {
|
||
tokenInHeadNoScript(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_HEAD: {
|
||
tokenAfterHead(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_BODY:
|
||
case InsertionMode.IN_TABLE:
|
||
case InsertionMode.IN_CAPTION:
|
||
case InsertionMode.IN_COLUMN_GROUP:
|
||
case InsertionMode.IN_TABLE_BODY:
|
||
case InsertionMode.IN_ROW:
|
||
case InsertionMode.IN_CELL:
|
||
case InsertionMode.IN_SELECT:
|
||
case InsertionMode.IN_SELECT_IN_TABLE: {
|
||
eofInBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.TEXT: {
|
||
eofInText(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE_TEXT: {
|
||
tokenInTableText(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TEMPLATE: {
|
||
eofInTemplate(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.AFTER_BODY:
|
||
case InsertionMode.IN_FRAMESET:
|
||
case InsertionMode.AFTER_FRAMESET:
|
||
case InsertionMode.AFTER_AFTER_BODY:
|
||
case InsertionMode.AFTER_AFTER_FRAMESET: {
|
||
stopParsing(this, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
onWhitespaceCharacter(token) {
|
||
if (this.skipNextNewLine) {
|
||
this.skipNextNewLine = false;
|
||
if (token.chars.charCodeAt(0) === CODE_POINTS.LINE_FEED) {
|
||
if (token.chars.length === 1) {
|
||
return;
|
||
}
|
||
token.chars = token.chars.substr(1);
|
||
}
|
||
}
|
||
if (this.tokenizer.inForeignNode) {
|
||
this._insertCharacters(token);
|
||
return;
|
||
}
|
||
switch (this.insertionMode) {
|
||
case InsertionMode.IN_HEAD:
|
||
case InsertionMode.IN_HEAD_NO_SCRIPT:
|
||
case InsertionMode.AFTER_HEAD:
|
||
case InsertionMode.TEXT:
|
||
case InsertionMode.IN_COLUMN_GROUP:
|
||
case InsertionMode.IN_SELECT:
|
||
case InsertionMode.IN_SELECT_IN_TABLE:
|
||
case InsertionMode.IN_FRAMESET:
|
||
case InsertionMode.AFTER_FRAMESET: {
|
||
this._insertCharacters(token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_BODY:
|
||
case InsertionMode.IN_CAPTION:
|
||
case InsertionMode.IN_CELL:
|
||
case InsertionMode.IN_TEMPLATE:
|
||
case InsertionMode.AFTER_BODY:
|
||
case InsertionMode.AFTER_AFTER_BODY:
|
||
case InsertionMode.AFTER_AFTER_FRAMESET: {
|
||
whitespaceCharacterInBody(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE:
|
||
case InsertionMode.IN_TABLE_BODY:
|
||
case InsertionMode.IN_ROW: {
|
||
characterInTable(this, token);
|
||
break;
|
||
}
|
||
case InsertionMode.IN_TABLE_TEXT: {
|
||
whitespaceCharacterInTableText(this, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
};
|
||
function aaObtainFormattingElementEntry(p3, token) {
|
||
let formattingElementEntry = p3.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);
|
||
if (formattingElementEntry) {
|
||
if (!p3.openElements.contains(formattingElementEntry.element)) {
|
||
p3.activeFormattingElements.removeEntry(formattingElementEntry);
|
||
formattingElementEntry = null;
|
||
} else if (!p3.openElements.hasInScope(token.tagID)) {
|
||
formattingElementEntry = null;
|
||
}
|
||
} else {
|
||
genericEndTagInBody(p3, token);
|
||
}
|
||
return formattingElementEntry;
|
||
}
|
||
function aaObtainFurthestBlock(p3, formattingElementEntry) {
|
||
let furthestBlock = null;
|
||
let idx = p3.openElements.stackTop;
|
||
for (; idx >= 0; idx--) {
|
||
const element3 = p3.openElements.items[idx];
|
||
if (element3 === formattingElementEntry.element) {
|
||
break;
|
||
}
|
||
if (p3._isSpecialElement(element3, p3.openElements.tagIDs[idx])) {
|
||
furthestBlock = element3;
|
||
}
|
||
}
|
||
if (!furthestBlock) {
|
||
p3.openElements.shortenToLength(idx < 0 ? 0 : idx);
|
||
p3.activeFormattingElements.removeEntry(formattingElementEntry);
|
||
}
|
||
return furthestBlock;
|
||
}
|
||
function aaInnerLoop(p3, furthestBlock, formattingElement) {
|
||
let lastElement = furthestBlock;
|
||
let nextElement = p3.openElements.getCommonAncestor(furthestBlock);
|
||
for (let i2 = 0, element3 = nextElement; element3 !== formattingElement; i2++, element3 = nextElement) {
|
||
nextElement = p3.openElements.getCommonAncestor(element3);
|
||
const elementEntry = p3.activeFormattingElements.getElementEntry(element3);
|
||
const counterOverflow = elementEntry && i2 >= AA_INNER_LOOP_ITER;
|
||
const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;
|
||
if (shouldRemoveFromOpenElements) {
|
||
if (counterOverflow) {
|
||
p3.activeFormattingElements.removeEntry(elementEntry);
|
||
}
|
||
p3.openElements.remove(element3);
|
||
} else {
|
||
element3 = aaRecreateElementFromEntry(p3, elementEntry);
|
||
if (lastElement === furthestBlock) {
|
||
p3.activeFormattingElements.bookmark = elementEntry;
|
||
}
|
||
p3.treeAdapter.detachNode(lastElement);
|
||
p3.treeAdapter.appendChild(element3, lastElement);
|
||
lastElement = element3;
|
||
}
|
||
}
|
||
return lastElement;
|
||
}
|
||
function aaRecreateElementFromEntry(p3, elementEntry) {
|
||
const ns = p3.treeAdapter.getNamespaceURI(elementEntry.element);
|
||
const newElement = p3.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);
|
||
p3.openElements.replace(elementEntry.element, newElement);
|
||
elementEntry.element = newElement;
|
||
return newElement;
|
||
}
|
||
function aaInsertLastNodeInCommonAncestor(p3, commonAncestor, lastElement) {
|
||
const tn = p3.treeAdapter.getTagName(commonAncestor);
|
||
const tid = getTagID(tn);
|
||
if (p3._isElementCausesFosterParenting(tid)) {
|
||
p3._fosterParentElement(lastElement);
|
||
} else {
|
||
const ns = p3.treeAdapter.getNamespaceURI(commonAncestor);
|
||
if (tid === TAG_ID.TEMPLATE && ns === NS.HTML) {
|
||
commonAncestor = p3.treeAdapter.getTemplateContent(commonAncestor);
|
||
}
|
||
p3.treeAdapter.appendChild(commonAncestor, lastElement);
|
||
}
|
||
}
|
||
function aaReplaceFormattingElement(p3, furthestBlock, formattingElementEntry) {
|
||
const ns = p3.treeAdapter.getNamespaceURI(formattingElementEntry.element);
|
||
const { token } = formattingElementEntry;
|
||
const newElement = p3.treeAdapter.createElement(token.tagName, ns, token.attrs);
|
||
p3._adoptNodes(furthestBlock, newElement);
|
||
p3.treeAdapter.appendChild(furthestBlock, newElement);
|
||
p3.activeFormattingElements.insertElementAfterBookmark(newElement, token);
|
||
p3.activeFormattingElements.removeEntry(formattingElementEntry);
|
||
p3.openElements.remove(formattingElementEntry.element);
|
||
p3.openElements.insertAfter(furthestBlock, newElement, token.tagID);
|
||
}
|
||
function callAdoptionAgency(p3, token) {
|
||
for (let i2 = 0; i2 < AA_OUTER_LOOP_ITER; i2++) {
|
||
const formattingElementEntry = aaObtainFormattingElementEntry(p3, token);
|
||
if (!formattingElementEntry) {
|
||
break;
|
||
}
|
||
const furthestBlock = aaObtainFurthestBlock(p3, formattingElementEntry);
|
||
if (!furthestBlock) {
|
||
break;
|
||
}
|
||
p3.activeFormattingElements.bookmark = formattingElementEntry;
|
||
const lastElement = aaInnerLoop(p3, furthestBlock, formattingElementEntry.element);
|
||
const commonAncestor = p3.openElements.getCommonAncestor(formattingElementEntry.element);
|
||
p3.treeAdapter.detachNode(lastElement);
|
||
if (commonAncestor)
|
||
aaInsertLastNodeInCommonAncestor(p3, commonAncestor, lastElement);
|
||
aaReplaceFormattingElement(p3, furthestBlock, formattingElementEntry);
|
||
}
|
||
}
|
||
function appendComment(p3, token) {
|
||
p3._appendCommentNode(token, p3.openElements.currentTmplContentOrNode);
|
||
}
|
||
function appendCommentToRootHtmlElement(p3, token) {
|
||
p3._appendCommentNode(token, p3.openElements.items[0]);
|
||
}
|
||
function appendCommentToDocument(p3, token) {
|
||
p3._appendCommentNode(token, p3.document);
|
||
}
|
||
function stopParsing(p3, token) {
|
||
p3.stopped = true;
|
||
if (token.location) {
|
||
const target = p3.fragmentContext ? 0 : 2;
|
||
for (let i2 = p3.openElements.stackTop; i2 >= target; i2--) {
|
||
p3._setEndLocation(p3.openElements.items[i2], token);
|
||
}
|
||
if (!p3.fragmentContext && p3.openElements.stackTop >= 0) {
|
||
const htmlElement = p3.openElements.items[0];
|
||
const htmlLocation = p3.treeAdapter.getNodeSourceCodeLocation(htmlElement);
|
||
if (htmlLocation && !htmlLocation.endTag) {
|
||
p3._setEndLocation(htmlElement, token);
|
||
if (p3.openElements.stackTop >= 1) {
|
||
const bodyElement = p3.openElements.items[1];
|
||
const bodyLocation = p3.treeAdapter.getNodeSourceCodeLocation(bodyElement);
|
||
if (bodyLocation && !bodyLocation.endTag) {
|
||
p3._setEndLocation(bodyElement, token);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function doctypeInInitialMode(p3, token) {
|
||
p3._setDocumentType(token);
|
||
const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : getDocumentMode(token);
|
||
if (!isConforming(token)) {
|
||
p3._err(token, ERR.nonConformingDoctype);
|
||
}
|
||
p3.treeAdapter.setDocumentMode(p3.document, mode);
|
||
p3.insertionMode = InsertionMode.BEFORE_HTML;
|
||
}
|
||
function tokenInInitialMode(p3, token) {
|
||
p3._err(token, ERR.missingDoctype, true);
|
||
p3.treeAdapter.setDocumentMode(p3.document, DOCUMENT_MODE.QUIRKS);
|
||
p3.insertionMode = InsertionMode.BEFORE_HTML;
|
||
p3._processToken(token);
|
||
}
|
||
function startTagBeforeHtml(p3, token) {
|
||
if (token.tagID === TAG_ID.HTML) {
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.insertionMode = InsertionMode.BEFORE_HEAD;
|
||
} else {
|
||
tokenBeforeHtml(p3, token);
|
||
}
|
||
}
|
||
function endTagBeforeHtml(p3, token) {
|
||
const tn = token.tagID;
|
||
if (tn === TAG_ID.HTML || tn === TAG_ID.HEAD || tn === TAG_ID.BODY || tn === TAG_ID.BR) {
|
||
tokenBeforeHtml(p3, token);
|
||
}
|
||
}
|
||
function tokenBeforeHtml(p3, token) {
|
||
p3._insertFakeRootElement();
|
||
p3.insertionMode = InsertionMode.BEFORE_HEAD;
|
||
p3._processToken(token);
|
||
}
|
||
function startTagBeforeHead(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.HTML: {
|
||
startTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.HEAD: {
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.headElement = p3.openElements.current;
|
||
p3.insertionMode = InsertionMode.IN_HEAD;
|
||
break;
|
||
}
|
||
default: {
|
||
tokenBeforeHead(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function endTagBeforeHead(p3, token) {
|
||
const tn = token.tagID;
|
||
if (tn === TAG_ID.HEAD || tn === TAG_ID.BODY || tn === TAG_ID.HTML || tn === TAG_ID.BR) {
|
||
tokenBeforeHead(p3, token);
|
||
} else {
|
||
p3._err(token, ERR.endTagWithoutMatchingOpenElement);
|
||
}
|
||
}
|
||
function tokenBeforeHead(p3, token) {
|
||
p3._insertFakeElement(TAG_NAMES.HEAD, TAG_ID.HEAD);
|
||
p3.headElement = p3.openElements.current;
|
||
p3.insertionMode = InsertionMode.IN_HEAD;
|
||
p3._processToken(token);
|
||
}
|
||
function startTagInHead(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.HTML: {
|
||
startTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.BASE:
|
||
case TAG_ID.BASEFONT:
|
||
case TAG_ID.BGSOUND:
|
||
case TAG_ID.LINK:
|
||
case TAG_ID.META: {
|
||
p3._appendElement(token, NS.HTML);
|
||
token.ackSelfClosing = true;
|
||
break;
|
||
}
|
||
case TAG_ID.TITLE: {
|
||
p3._switchToTextParsing(token, TokenizerMode.RCDATA);
|
||
break;
|
||
}
|
||
case TAG_ID.NOSCRIPT: {
|
||
if (p3.options.scriptingEnabled) {
|
||
p3._switchToTextParsing(token, TokenizerMode.RAWTEXT);
|
||
} else {
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.NOFRAMES:
|
||
case TAG_ID.STYLE: {
|
||
p3._switchToTextParsing(token, TokenizerMode.RAWTEXT);
|
||
break;
|
||
}
|
||
case TAG_ID.SCRIPT: {
|
||
p3._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);
|
||
break;
|
||
}
|
||
case TAG_ID.TEMPLATE: {
|
||
p3._insertTemplate(token);
|
||
p3.activeFormattingElements.insertMarker();
|
||
p3.framesetOk = false;
|
||
p3.insertionMode = InsertionMode.IN_TEMPLATE;
|
||
p3.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);
|
||
break;
|
||
}
|
||
case TAG_ID.HEAD: {
|
||
p3._err(token, ERR.misplacedStartTagForHeadElement);
|
||
break;
|
||
}
|
||
default: {
|
||
tokenInHead(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function endTagInHead(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.HEAD: {
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.AFTER_HEAD;
|
||
break;
|
||
}
|
||
case TAG_ID.BODY:
|
||
case TAG_ID.BR:
|
||
case TAG_ID.HTML: {
|
||
tokenInHead(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.TEMPLATE: {
|
||
templateEndTagInHead(p3, token);
|
||
break;
|
||
}
|
||
default: {
|
||
p3._err(token, ERR.endTagWithoutMatchingOpenElement);
|
||
}
|
||
}
|
||
}
|
||
function templateEndTagInHead(p3, token) {
|
||
if (p3.openElements.tmplCount > 0) {
|
||
p3.openElements.generateImpliedEndTagsThoroughly();
|
||
if (p3.openElements.currentTagId !== TAG_ID.TEMPLATE) {
|
||
p3._err(token, ERR.closingOfElementWithOpenChildElements);
|
||
}
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.TEMPLATE);
|
||
p3.activeFormattingElements.clearToLastMarker();
|
||
p3.tmplInsertionModeStack.shift();
|
||
p3._resetInsertionMode();
|
||
} else {
|
||
p3._err(token, ERR.endTagWithoutMatchingOpenElement);
|
||
}
|
||
}
|
||
function tokenInHead(p3, token) {
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.AFTER_HEAD;
|
||
p3._processToken(token);
|
||
}
|
||
function startTagInHeadNoScript(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.HTML: {
|
||
startTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.BASEFONT:
|
||
case TAG_ID.BGSOUND:
|
||
case TAG_ID.HEAD:
|
||
case TAG_ID.LINK:
|
||
case TAG_ID.META:
|
||
case TAG_ID.NOFRAMES:
|
||
case TAG_ID.STYLE: {
|
||
startTagInHead(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.NOSCRIPT: {
|
||
p3._err(token, ERR.nestedNoscriptInHead);
|
||
break;
|
||
}
|
||
default: {
|
||
tokenInHeadNoScript(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function endTagInHeadNoScript(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.NOSCRIPT: {
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_HEAD;
|
||
break;
|
||
}
|
||
case TAG_ID.BR: {
|
||
tokenInHeadNoScript(p3, token);
|
||
break;
|
||
}
|
||
default: {
|
||
p3._err(token, ERR.endTagWithoutMatchingOpenElement);
|
||
}
|
||
}
|
||
}
|
||
function tokenInHeadNoScript(p3, token) {
|
||
const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;
|
||
p3._err(token, errCode);
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_HEAD;
|
||
p3._processToken(token);
|
||
}
|
||
function startTagAfterHead(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.HTML: {
|
||
startTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.BODY: {
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.framesetOk = false;
|
||
p3.insertionMode = InsertionMode.IN_BODY;
|
||
break;
|
||
}
|
||
case TAG_ID.FRAMESET: {
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.insertionMode = InsertionMode.IN_FRAMESET;
|
||
break;
|
||
}
|
||
case TAG_ID.BASE:
|
||
case TAG_ID.BASEFONT:
|
||
case TAG_ID.BGSOUND:
|
||
case TAG_ID.LINK:
|
||
case TAG_ID.META:
|
||
case TAG_ID.NOFRAMES:
|
||
case TAG_ID.SCRIPT:
|
||
case TAG_ID.STYLE:
|
||
case TAG_ID.TEMPLATE:
|
||
case TAG_ID.TITLE: {
|
||
p3._err(token, ERR.abandonedHeadElementChild);
|
||
p3.openElements.push(p3.headElement, TAG_ID.HEAD);
|
||
startTagInHead(p3, token);
|
||
p3.openElements.remove(p3.headElement);
|
||
break;
|
||
}
|
||
case TAG_ID.HEAD: {
|
||
p3._err(token, ERR.misplacedStartTagForHeadElement);
|
||
break;
|
||
}
|
||
default: {
|
||
tokenAfterHead(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function endTagAfterHead(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.BODY:
|
||
case TAG_ID.HTML:
|
||
case TAG_ID.BR: {
|
||
tokenAfterHead(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.TEMPLATE: {
|
||
templateEndTagInHead(p3, token);
|
||
break;
|
||
}
|
||
default: {
|
||
p3._err(token, ERR.endTagWithoutMatchingOpenElement);
|
||
}
|
||
}
|
||
}
|
||
function tokenAfterHead(p3, token) {
|
||
p3._insertFakeElement(TAG_NAMES.BODY, TAG_ID.BODY);
|
||
p3.insertionMode = InsertionMode.IN_BODY;
|
||
modeInBody(p3, token);
|
||
}
|
||
function modeInBody(p3, token) {
|
||
switch (token.type) {
|
||
case TokenType.CHARACTER: {
|
||
characterInBody(p3, token);
|
||
break;
|
||
}
|
||
case TokenType.WHITESPACE_CHARACTER: {
|
||
whitespaceCharacterInBody(p3, token);
|
||
break;
|
||
}
|
||
case TokenType.COMMENT: {
|
||
appendComment(p3, token);
|
||
break;
|
||
}
|
||
case TokenType.START_TAG: {
|
||
startTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TokenType.END_TAG: {
|
||
endTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TokenType.EOF: {
|
||
eofInBody(p3, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
function whitespaceCharacterInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._insertCharacters(token);
|
||
}
|
||
function characterInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._insertCharacters(token);
|
||
p3.framesetOk = false;
|
||
}
|
||
function htmlStartTagInBody(p3, token) {
|
||
if (p3.openElements.tmplCount === 0) {
|
||
p3.treeAdapter.adoptAttributes(p3.openElements.items[0], token.attrs);
|
||
}
|
||
}
|
||
function bodyStartTagInBody(p3, token) {
|
||
const bodyElement = p3.openElements.tryPeekProperlyNestedBodyElement();
|
||
if (bodyElement && p3.openElements.tmplCount === 0) {
|
||
p3.framesetOk = false;
|
||
p3.treeAdapter.adoptAttributes(bodyElement, token.attrs);
|
||
}
|
||
}
|
||
function framesetStartTagInBody(p3, token) {
|
||
const bodyElement = p3.openElements.tryPeekProperlyNestedBodyElement();
|
||
if (p3.framesetOk && bodyElement) {
|
||
p3.treeAdapter.detachNode(bodyElement);
|
||
p3.openElements.popAllUpToHtmlElement();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.insertionMode = InsertionMode.IN_FRAMESET;
|
||
}
|
||
}
|
||
function addressStartTagInBody(p3, token) {
|
||
if (p3.openElements.hasInButtonScope(TAG_ID.P)) {
|
||
p3._closePElement();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
}
|
||
function numberedHeaderStartTagInBody(p3, token) {
|
||
if (p3.openElements.hasInButtonScope(TAG_ID.P)) {
|
||
p3._closePElement();
|
||
}
|
||
if (isNumberedHeader(p3.openElements.currentTagId)) {
|
||
p3.openElements.pop();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
}
|
||
function preStartTagInBody(p3, token) {
|
||
if (p3.openElements.hasInButtonScope(TAG_ID.P)) {
|
||
p3._closePElement();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.skipNextNewLine = true;
|
||
p3.framesetOk = false;
|
||
}
|
||
function formStartTagInBody(p3, token) {
|
||
const inTemplate = p3.openElements.tmplCount > 0;
|
||
if (!p3.formElement || inTemplate) {
|
||
if (p3.openElements.hasInButtonScope(TAG_ID.P)) {
|
||
p3._closePElement();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
if (!inTemplate) {
|
||
p3.formElement = p3.openElements.current;
|
||
}
|
||
}
|
||
}
|
||
function listItemStartTagInBody(p3, token) {
|
||
p3.framesetOk = false;
|
||
const tn = token.tagID;
|
||
for (let i2 = p3.openElements.stackTop; i2 >= 0; i2--) {
|
||
const elementId = p3.openElements.tagIDs[i2];
|
||
if (tn === TAG_ID.LI && elementId === TAG_ID.LI || (tn === TAG_ID.DD || tn === TAG_ID.DT) && (elementId === TAG_ID.DD || elementId === TAG_ID.DT)) {
|
||
p3.openElements.generateImpliedEndTagsWithExclusion(elementId);
|
||
p3.openElements.popUntilTagNamePopped(elementId);
|
||
break;
|
||
}
|
||
if (elementId !== TAG_ID.ADDRESS && elementId !== TAG_ID.DIV && elementId !== TAG_ID.P && p3._isSpecialElement(p3.openElements.items[i2], elementId)) {
|
||
break;
|
||
}
|
||
}
|
||
if (p3.openElements.hasInButtonScope(TAG_ID.P)) {
|
||
p3._closePElement();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
}
|
||
function plaintextStartTagInBody(p3, token) {
|
||
if (p3.openElements.hasInButtonScope(TAG_ID.P)) {
|
||
p3._closePElement();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.tokenizer.state = TokenizerMode.PLAINTEXT;
|
||
}
|
||
function buttonStartTagInBody(p3, token) {
|
||
if (p3.openElements.hasInScope(TAG_ID.BUTTON)) {
|
||
p3.openElements.generateImpliedEndTags();
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.BUTTON);
|
||
}
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.framesetOk = false;
|
||
}
|
||
function aStartTagInBody(p3, token) {
|
||
const activeElementEntry = p3.activeFormattingElements.getElementEntryInScopeWithTagName(TAG_NAMES.A);
|
||
if (activeElementEntry) {
|
||
callAdoptionAgency(p3, token);
|
||
p3.openElements.remove(activeElementEntry.element);
|
||
p3.activeFormattingElements.removeEntry(activeElementEntry);
|
||
}
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.activeFormattingElements.pushElement(p3.openElements.current, token);
|
||
}
|
||
function bStartTagInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.activeFormattingElements.pushElement(p3.openElements.current, token);
|
||
}
|
||
function nobrStartTagInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
if (p3.openElements.hasInScope(TAG_ID.NOBR)) {
|
||
callAdoptionAgency(p3, token);
|
||
p3._reconstructActiveFormattingElements();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.activeFormattingElements.pushElement(p3.openElements.current, token);
|
||
}
|
||
function appletStartTagInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.activeFormattingElements.insertMarker();
|
||
p3.framesetOk = false;
|
||
}
|
||
function tableStartTagInBody(p3, token) {
|
||
if (p3.treeAdapter.getDocumentMode(p3.document) !== DOCUMENT_MODE.QUIRKS && p3.openElements.hasInButtonScope(TAG_ID.P)) {
|
||
p3._closePElement();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.framesetOk = false;
|
||
p3.insertionMode = InsertionMode.IN_TABLE;
|
||
}
|
||
function areaStartTagInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._appendElement(token, NS.HTML);
|
||
p3.framesetOk = false;
|
||
token.ackSelfClosing = true;
|
||
}
|
||
function isHiddenInput(token) {
|
||
const inputType = getTokenAttr(token, ATTRS.TYPE);
|
||
return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;
|
||
}
|
||
function inputStartTagInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._appendElement(token, NS.HTML);
|
||
if (!isHiddenInput(token)) {
|
||
p3.framesetOk = false;
|
||
}
|
||
token.ackSelfClosing = true;
|
||
}
|
||
function paramStartTagInBody(p3, token) {
|
||
p3._appendElement(token, NS.HTML);
|
||
token.ackSelfClosing = true;
|
||
}
|
||
function hrStartTagInBody(p3, token) {
|
||
if (p3.openElements.hasInButtonScope(TAG_ID.P)) {
|
||
p3._closePElement();
|
||
}
|
||
p3._appendElement(token, NS.HTML);
|
||
p3.framesetOk = false;
|
||
token.ackSelfClosing = true;
|
||
}
|
||
function imageStartTagInBody(p3, token) {
|
||
token.tagName = TAG_NAMES.IMG;
|
||
token.tagID = TAG_ID.IMG;
|
||
areaStartTagInBody(p3, token);
|
||
}
|
||
function textareaStartTagInBody(p3, token) {
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.skipNextNewLine = true;
|
||
p3.tokenizer.state = TokenizerMode.RCDATA;
|
||
p3.originalInsertionMode = p3.insertionMode;
|
||
p3.framesetOk = false;
|
||
p3.insertionMode = InsertionMode.TEXT;
|
||
}
|
||
function xmpStartTagInBody(p3, token) {
|
||
if (p3.openElements.hasInButtonScope(TAG_ID.P)) {
|
||
p3._closePElement();
|
||
}
|
||
p3._reconstructActiveFormattingElements();
|
||
p3.framesetOk = false;
|
||
p3._switchToTextParsing(token, TokenizerMode.RAWTEXT);
|
||
}
|
||
function iframeStartTagInBody(p3, token) {
|
||
p3.framesetOk = false;
|
||
p3._switchToTextParsing(token, TokenizerMode.RAWTEXT);
|
||
}
|
||
function noembedStartTagInBody(p3, token) {
|
||
p3._switchToTextParsing(token, TokenizerMode.RAWTEXT);
|
||
}
|
||
function selectStartTagInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.framesetOk = false;
|
||
p3.insertionMode = p3.insertionMode === InsertionMode.IN_TABLE || p3.insertionMode === InsertionMode.IN_CAPTION || p3.insertionMode === InsertionMode.IN_TABLE_BODY || p3.insertionMode === InsertionMode.IN_ROW || p3.insertionMode === InsertionMode.IN_CELL ? InsertionMode.IN_SELECT_IN_TABLE : InsertionMode.IN_SELECT;
|
||
}
|
||
function optgroupStartTagInBody(p3, token) {
|
||
if (p3.openElements.currentTagId === TAG_ID.OPTION) {
|
||
p3.openElements.pop();
|
||
}
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._insertElement(token, NS.HTML);
|
||
}
|
||
function rbStartTagInBody(p3, token) {
|
||
if (p3.openElements.hasInScope(TAG_ID.RUBY)) {
|
||
p3.openElements.generateImpliedEndTags();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
}
|
||
function rtStartTagInBody(p3, token) {
|
||
if (p3.openElements.hasInScope(TAG_ID.RUBY)) {
|
||
p3.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.RTC);
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
}
|
||
function mathStartTagInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
adjustTokenMathMLAttrs(token);
|
||
adjustTokenXMLAttrs(token);
|
||
if (token.selfClosing) {
|
||
p3._appendElement(token, NS.MATHML);
|
||
} else {
|
||
p3._insertElement(token, NS.MATHML);
|
||
}
|
||
token.ackSelfClosing = true;
|
||
}
|
||
function svgStartTagInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
adjustTokenSVGAttrs(token);
|
||
adjustTokenXMLAttrs(token);
|
||
if (token.selfClosing) {
|
||
p3._appendElement(token, NS.SVG);
|
||
} else {
|
||
p3._insertElement(token, NS.SVG);
|
||
}
|
||
token.ackSelfClosing = true;
|
||
}
|
||
function genericStartTagInBody(p3, token) {
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._insertElement(token, NS.HTML);
|
||
}
|
||
function startTagInBody(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.I:
|
||
case TAG_ID.S:
|
||
case TAG_ID.B:
|
||
case TAG_ID.U:
|
||
case TAG_ID.EM:
|
||
case TAG_ID.TT:
|
||
case TAG_ID.BIG:
|
||
case TAG_ID.CODE:
|
||
case TAG_ID.FONT:
|
||
case TAG_ID.SMALL:
|
||
case TAG_ID.STRIKE:
|
||
case TAG_ID.STRONG: {
|
||
bStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.A: {
|
||
aStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.H1:
|
||
case TAG_ID.H2:
|
||
case TAG_ID.H3:
|
||
case TAG_ID.H4:
|
||
case TAG_ID.H5:
|
||
case TAG_ID.H6: {
|
||
numberedHeaderStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.P:
|
||
case TAG_ID.DL:
|
||
case TAG_ID.OL:
|
||
case TAG_ID.UL:
|
||
case TAG_ID.DIV:
|
||
case TAG_ID.DIR:
|
||
case TAG_ID.NAV:
|
||
case TAG_ID.MAIN:
|
||
case TAG_ID.MENU:
|
||
case TAG_ID.ASIDE:
|
||
case TAG_ID.CENTER:
|
||
case TAG_ID.FIGURE:
|
||
case TAG_ID.FOOTER:
|
||
case TAG_ID.HEADER:
|
||
case TAG_ID.HGROUP:
|
||
case TAG_ID.DIALOG:
|
||
case TAG_ID.DETAILS:
|
||
case TAG_ID.ADDRESS:
|
||
case TAG_ID.ARTICLE:
|
||
case TAG_ID.SECTION:
|
||
case TAG_ID.SUMMARY:
|
||
case TAG_ID.FIELDSET:
|
||
case TAG_ID.BLOCKQUOTE:
|
||
case TAG_ID.FIGCAPTION: {
|
||
addressStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.LI:
|
||
case TAG_ID.DD:
|
||
case TAG_ID.DT: {
|
||
listItemStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.BR:
|
||
case TAG_ID.IMG:
|
||
case TAG_ID.WBR:
|
||
case TAG_ID.AREA:
|
||
case TAG_ID.EMBED:
|
||
case TAG_ID.KEYGEN: {
|
||
areaStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.HR: {
|
||
hrStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.RB:
|
||
case TAG_ID.RTC: {
|
||
rbStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.RT:
|
||
case TAG_ID.RP: {
|
||
rtStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.PRE:
|
||
case TAG_ID.LISTING: {
|
||
preStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.XMP: {
|
||
xmpStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.SVG: {
|
||
svgStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.HTML: {
|
||
htmlStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.BASE:
|
||
case TAG_ID.LINK:
|
||
case TAG_ID.META:
|
||
case TAG_ID.STYLE:
|
||
case TAG_ID.TITLE:
|
||
case TAG_ID.SCRIPT:
|
||
case TAG_ID.BGSOUND:
|
||
case TAG_ID.BASEFONT:
|
||
case TAG_ID.TEMPLATE: {
|
||
startTagInHead(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.BODY: {
|
||
bodyStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.FORM: {
|
||
formStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.NOBR: {
|
||
nobrStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.MATH: {
|
||
mathStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.TABLE: {
|
||
tableStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.INPUT: {
|
||
inputStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.PARAM:
|
||
case TAG_ID.TRACK:
|
||
case TAG_ID.SOURCE: {
|
||
paramStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.IMAGE: {
|
||
imageStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.BUTTON: {
|
||
buttonStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.APPLET:
|
||
case TAG_ID.OBJECT:
|
||
case TAG_ID.MARQUEE: {
|
||
appletStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.IFRAME: {
|
||
iframeStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.SELECT: {
|
||
selectStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.OPTION:
|
||
case TAG_ID.OPTGROUP: {
|
||
optgroupStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.NOEMBED: {
|
||
noembedStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.FRAMESET: {
|
||
framesetStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.TEXTAREA: {
|
||
textareaStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.NOSCRIPT: {
|
||
if (p3.options.scriptingEnabled) {
|
||
noembedStartTagInBody(p3, token);
|
||
} else {
|
||
genericStartTagInBody(p3, token);
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.PLAINTEXT: {
|
||
plaintextStartTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.COL:
|
||
case TAG_ID.TH:
|
||
case TAG_ID.TD:
|
||
case TAG_ID.TR:
|
||
case TAG_ID.HEAD:
|
||
case TAG_ID.FRAME:
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.TFOOT:
|
||
case TAG_ID.THEAD:
|
||
case TAG_ID.CAPTION:
|
||
case TAG_ID.COLGROUP: {
|
||
break;
|
||
}
|
||
default: {
|
||
genericStartTagInBody(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function bodyEndTagInBody(p3, token) {
|
||
if (p3.openElements.hasInScope(TAG_ID.BODY)) {
|
||
p3.insertionMode = InsertionMode.AFTER_BODY;
|
||
if (p3.options.sourceCodeLocationInfo) {
|
||
const bodyElement = p3.openElements.tryPeekProperlyNestedBodyElement();
|
||
if (bodyElement) {
|
||
p3._setEndLocation(bodyElement, token);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function htmlEndTagInBody(p3, token) {
|
||
if (p3.openElements.hasInScope(TAG_ID.BODY)) {
|
||
p3.insertionMode = InsertionMode.AFTER_BODY;
|
||
endTagAfterBody(p3, token);
|
||
}
|
||
}
|
||
function addressEndTagInBody(p3, token) {
|
||
const tn = token.tagID;
|
||
if (p3.openElements.hasInScope(tn)) {
|
||
p3.openElements.generateImpliedEndTags();
|
||
p3.openElements.popUntilTagNamePopped(tn);
|
||
}
|
||
}
|
||
function formEndTagInBody(p3) {
|
||
const inTemplate = p3.openElements.tmplCount > 0;
|
||
const { formElement } = p3;
|
||
if (!inTemplate) {
|
||
p3.formElement = null;
|
||
}
|
||
if ((formElement || inTemplate) && p3.openElements.hasInScope(TAG_ID.FORM)) {
|
||
p3.openElements.generateImpliedEndTags();
|
||
if (inTemplate) {
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.FORM);
|
||
} else if (formElement) {
|
||
p3.openElements.remove(formElement);
|
||
}
|
||
}
|
||
}
|
||
function pEndTagInBody(p3) {
|
||
if (!p3.openElements.hasInButtonScope(TAG_ID.P)) {
|
||
p3._insertFakeElement(TAG_NAMES.P, TAG_ID.P);
|
||
}
|
||
p3._closePElement();
|
||
}
|
||
function liEndTagInBody(p3) {
|
||
if (p3.openElements.hasInListItemScope(TAG_ID.LI)) {
|
||
p3.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.LI);
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.LI);
|
||
}
|
||
}
|
||
function ddEndTagInBody(p3, token) {
|
||
const tn = token.tagID;
|
||
if (p3.openElements.hasInScope(tn)) {
|
||
p3.openElements.generateImpliedEndTagsWithExclusion(tn);
|
||
p3.openElements.popUntilTagNamePopped(tn);
|
||
}
|
||
}
|
||
function numberedHeaderEndTagInBody(p3) {
|
||
if (p3.openElements.hasNumberedHeaderInScope()) {
|
||
p3.openElements.generateImpliedEndTags();
|
||
p3.openElements.popUntilNumberedHeaderPopped();
|
||
}
|
||
}
|
||
function appletEndTagInBody(p3, token) {
|
||
const tn = token.tagID;
|
||
if (p3.openElements.hasInScope(tn)) {
|
||
p3.openElements.generateImpliedEndTags();
|
||
p3.openElements.popUntilTagNamePopped(tn);
|
||
p3.activeFormattingElements.clearToLastMarker();
|
||
}
|
||
}
|
||
function brEndTagInBody(p3) {
|
||
p3._reconstructActiveFormattingElements();
|
||
p3._insertFakeElement(TAG_NAMES.BR, TAG_ID.BR);
|
||
p3.openElements.pop();
|
||
p3.framesetOk = false;
|
||
}
|
||
function genericEndTagInBody(p3, token) {
|
||
const tn = token.tagName;
|
||
const tid = token.tagID;
|
||
for (let i2 = p3.openElements.stackTop; i2 > 0; i2--) {
|
||
const element3 = p3.openElements.items[i2];
|
||
const elementId = p3.openElements.tagIDs[i2];
|
||
if (tid === elementId && (tid !== TAG_ID.UNKNOWN || p3.treeAdapter.getTagName(element3) === tn)) {
|
||
p3.openElements.generateImpliedEndTagsWithExclusion(tid);
|
||
if (p3.openElements.stackTop >= i2)
|
||
p3.openElements.shortenToLength(i2);
|
||
break;
|
||
}
|
||
if (p3._isSpecialElement(element3, elementId)) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
function endTagInBody(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.A:
|
||
case TAG_ID.B:
|
||
case TAG_ID.I:
|
||
case TAG_ID.S:
|
||
case TAG_ID.U:
|
||
case TAG_ID.EM:
|
||
case TAG_ID.TT:
|
||
case TAG_ID.BIG:
|
||
case TAG_ID.CODE:
|
||
case TAG_ID.FONT:
|
||
case TAG_ID.NOBR:
|
||
case TAG_ID.SMALL:
|
||
case TAG_ID.STRIKE:
|
||
case TAG_ID.STRONG: {
|
||
callAdoptionAgency(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.P: {
|
||
pEndTagInBody(p3);
|
||
break;
|
||
}
|
||
case TAG_ID.DL:
|
||
case TAG_ID.UL:
|
||
case TAG_ID.OL:
|
||
case TAG_ID.DIR:
|
||
case TAG_ID.DIV:
|
||
case TAG_ID.NAV:
|
||
case TAG_ID.PRE:
|
||
case TAG_ID.MAIN:
|
||
case TAG_ID.MENU:
|
||
case TAG_ID.ASIDE:
|
||
case TAG_ID.BUTTON:
|
||
case TAG_ID.CENTER:
|
||
case TAG_ID.FIGURE:
|
||
case TAG_ID.FOOTER:
|
||
case TAG_ID.HEADER:
|
||
case TAG_ID.HGROUP:
|
||
case TAG_ID.DIALOG:
|
||
case TAG_ID.ADDRESS:
|
||
case TAG_ID.ARTICLE:
|
||
case TAG_ID.DETAILS:
|
||
case TAG_ID.SECTION:
|
||
case TAG_ID.SUMMARY:
|
||
case TAG_ID.LISTING:
|
||
case TAG_ID.FIELDSET:
|
||
case TAG_ID.BLOCKQUOTE:
|
||
case TAG_ID.FIGCAPTION: {
|
||
addressEndTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.LI: {
|
||
liEndTagInBody(p3);
|
||
break;
|
||
}
|
||
case TAG_ID.DD:
|
||
case TAG_ID.DT: {
|
||
ddEndTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.H1:
|
||
case TAG_ID.H2:
|
||
case TAG_ID.H3:
|
||
case TAG_ID.H4:
|
||
case TAG_ID.H5:
|
||
case TAG_ID.H6: {
|
||
numberedHeaderEndTagInBody(p3);
|
||
break;
|
||
}
|
||
case TAG_ID.BR: {
|
||
brEndTagInBody(p3);
|
||
break;
|
||
}
|
||
case TAG_ID.BODY: {
|
||
bodyEndTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.HTML: {
|
||
htmlEndTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.FORM: {
|
||
formEndTagInBody(p3);
|
||
break;
|
||
}
|
||
case TAG_ID.APPLET:
|
||
case TAG_ID.OBJECT:
|
||
case TAG_ID.MARQUEE: {
|
||
appletEndTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.TEMPLATE: {
|
||
templateEndTagInHead(p3, token);
|
||
break;
|
||
}
|
||
default: {
|
||
genericEndTagInBody(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function eofInBody(p3, token) {
|
||
if (p3.tmplInsertionModeStack.length > 0) {
|
||
eofInTemplate(p3, token);
|
||
} else {
|
||
stopParsing(p3, token);
|
||
}
|
||
}
|
||
function endTagInText(p3, token) {
|
||
var _a2;
|
||
if (token.tagID === TAG_ID.SCRIPT) {
|
||
(_a2 = p3.scriptHandler) === null || _a2 === void 0 ? void 0 : _a2.call(p3, p3.openElements.current);
|
||
}
|
||
p3.openElements.pop();
|
||
p3.insertionMode = p3.originalInsertionMode;
|
||
}
|
||
function eofInText(p3, token) {
|
||
p3._err(token, ERR.eofInElementThatCanContainOnlyText);
|
||
p3.openElements.pop();
|
||
p3.insertionMode = p3.originalInsertionMode;
|
||
p3.onEof(token);
|
||
}
|
||
function characterInTable(p3, token) {
|
||
if (TABLE_STRUCTURE_TAGS.has(p3.openElements.currentTagId)) {
|
||
p3.pendingCharacterTokens.length = 0;
|
||
p3.hasNonWhitespacePendingCharacterToken = false;
|
||
p3.originalInsertionMode = p3.insertionMode;
|
||
p3.insertionMode = InsertionMode.IN_TABLE_TEXT;
|
||
switch (token.type) {
|
||
case TokenType.CHARACTER: {
|
||
characterInTableText(p3, token);
|
||
break;
|
||
}
|
||
case TokenType.WHITESPACE_CHARACTER: {
|
||
whitespaceCharacterInTableText(p3, token);
|
||
break;
|
||
}
|
||
}
|
||
} else {
|
||
tokenInTable(p3, token);
|
||
}
|
||
}
|
||
function captionStartTagInTable(p3, token) {
|
||
p3.openElements.clearBackToTableContext();
|
||
p3.activeFormattingElements.insertMarker();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.insertionMode = InsertionMode.IN_CAPTION;
|
||
}
|
||
function colgroupStartTagInTable(p3, token) {
|
||
p3.openElements.clearBackToTableContext();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.insertionMode = InsertionMode.IN_COLUMN_GROUP;
|
||
}
|
||
function colStartTagInTable(p3, token) {
|
||
p3.openElements.clearBackToTableContext();
|
||
p3._insertFakeElement(TAG_NAMES.COLGROUP, TAG_ID.COLGROUP);
|
||
p3.insertionMode = InsertionMode.IN_COLUMN_GROUP;
|
||
startTagInColumnGroup(p3, token);
|
||
}
|
||
function tbodyStartTagInTable(p3, token) {
|
||
p3.openElements.clearBackToTableContext();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.insertionMode = InsertionMode.IN_TABLE_BODY;
|
||
}
|
||
function tdStartTagInTable(p3, token) {
|
||
p3.openElements.clearBackToTableContext();
|
||
p3._insertFakeElement(TAG_NAMES.TBODY, TAG_ID.TBODY);
|
||
p3.insertionMode = InsertionMode.IN_TABLE_BODY;
|
||
startTagInTableBody(p3, token);
|
||
}
|
||
function tableStartTagInTable(p3, token) {
|
||
if (p3.openElements.hasInTableScope(TAG_ID.TABLE)) {
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.TABLE);
|
||
p3._resetInsertionMode();
|
||
p3._processStartTag(token);
|
||
}
|
||
}
|
||
function inputStartTagInTable(p3, token) {
|
||
if (isHiddenInput(token)) {
|
||
p3._appendElement(token, NS.HTML);
|
||
} else {
|
||
tokenInTable(p3, token);
|
||
}
|
||
token.ackSelfClosing = true;
|
||
}
|
||
function formStartTagInTable(p3, token) {
|
||
if (!p3.formElement && p3.openElements.tmplCount === 0) {
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.formElement = p3.openElements.current;
|
||
p3.openElements.pop();
|
||
}
|
||
}
|
||
function startTagInTable(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.TD:
|
||
case TAG_ID.TH:
|
||
case TAG_ID.TR: {
|
||
tdStartTagInTable(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.STYLE:
|
||
case TAG_ID.SCRIPT:
|
||
case TAG_ID.TEMPLATE: {
|
||
startTagInHead(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.COL: {
|
||
colStartTagInTable(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.FORM: {
|
||
formStartTagInTable(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.TABLE: {
|
||
tableStartTagInTable(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.TFOOT:
|
||
case TAG_ID.THEAD: {
|
||
tbodyStartTagInTable(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.INPUT: {
|
||
inputStartTagInTable(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.CAPTION: {
|
||
captionStartTagInTable(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.COLGROUP: {
|
||
colgroupStartTagInTable(p3, token);
|
||
break;
|
||
}
|
||
default: {
|
||
tokenInTable(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function endTagInTable(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.TABLE: {
|
||
if (p3.openElements.hasInTableScope(TAG_ID.TABLE)) {
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.TABLE);
|
||
p3._resetInsertionMode();
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.TEMPLATE: {
|
||
templateEndTagInHead(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.BODY:
|
||
case TAG_ID.CAPTION:
|
||
case TAG_ID.COL:
|
||
case TAG_ID.COLGROUP:
|
||
case TAG_ID.HTML:
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.TD:
|
||
case TAG_ID.TFOOT:
|
||
case TAG_ID.TH:
|
||
case TAG_ID.THEAD:
|
||
case TAG_ID.TR: {
|
||
break;
|
||
}
|
||
default: {
|
||
tokenInTable(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function tokenInTable(p3, token) {
|
||
const savedFosterParentingState = p3.fosterParentingEnabled;
|
||
p3.fosterParentingEnabled = true;
|
||
modeInBody(p3, token);
|
||
p3.fosterParentingEnabled = savedFosterParentingState;
|
||
}
|
||
function whitespaceCharacterInTableText(p3, token) {
|
||
p3.pendingCharacterTokens.push(token);
|
||
}
|
||
function characterInTableText(p3, token) {
|
||
p3.pendingCharacterTokens.push(token);
|
||
p3.hasNonWhitespacePendingCharacterToken = true;
|
||
}
|
||
function tokenInTableText(p3, token) {
|
||
let i2 = 0;
|
||
if (p3.hasNonWhitespacePendingCharacterToken) {
|
||
for (; i2 < p3.pendingCharacterTokens.length; i2++) {
|
||
tokenInTable(p3, p3.pendingCharacterTokens[i2]);
|
||
}
|
||
} else {
|
||
for (; i2 < p3.pendingCharacterTokens.length; i2++) {
|
||
p3._insertCharacters(p3.pendingCharacterTokens[i2]);
|
||
}
|
||
}
|
||
p3.insertionMode = p3.originalInsertionMode;
|
||
p3._processToken(token);
|
||
}
|
||
var TABLE_VOID_ELEMENTS = /* @__PURE__ */ new Set([TAG_ID.CAPTION, TAG_ID.COL, TAG_ID.COLGROUP, TAG_ID.TBODY, TAG_ID.TD, TAG_ID.TFOOT, TAG_ID.TH, TAG_ID.THEAD, TAG_ID.TR]);
|
||
function startTagInCaption(p3, token) {
|
||
const tn = token.tagID;
|
||
if (TABLE_VOID_ELEMENTS.has(tn)) {
|
||
if (p3.openElements.hasInTableScope(TAG_ID.CAPTION)) {
|
||
p3.openElements.generateImpliedEndTags();
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.CAPTION);
|
||
p3.activeFormattingElements.clearToLastMarker();
|
||
p3.insertionMode = InsertionMode.IN_TABLE;
|
||
startTagInTable(p3, token);
|
||
}
|
||
} else {
|
||
startTagInBody(p3, token);
|
||
}
|
||
}
|
||
function endTagInCaption(p3, token) {
|
||
const tn = token.tagID;
|
||
switch (tn) {
|
||
case TAG_ID.CAPTION:
|
||
case TAG_ID.TABLE: {
|
||
if (p3.openElements.hasInTableScope(TAG_ID.CAPTION)) {
|
||
p3.openElements.generateImpliedEndTags();
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.CAPTION);
|
||
p3.activeFormattingElements.clearToLastMarker();
|
||
p3.insertionMode = InsertionMode.IN_TABLE;
|
||
if (tn === TAG_ID.TABLE) {
|
||
endTagInTable(p3, token);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.BODY:
|
||
case TAG_ID.COL:
|
||
case TAG_ID.COLGROUP:
|
||
case TAG_ID.HTML:
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.TD:
|
||
case TAG_ID.TFOOT:
|
||
case TAG_ID.TH:
|
||
case TAG_ID.THEAD:
|
||
case TAG_ID.TR: {
|
||
break;
|
||
}
|
||
default: {
|
||
endTagInBody(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function startTagInColumnGroup(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.HTML: {
|
||
startTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.COL: {
|
||
p3._appendElement(token, NS.HTML);
|
||
token.ackSelfClosing = true;
|
||
break;
|
||
}
|
||
case TAG_ID.TEMPLATE: {
|
||
startTagInHead(p3, token);
|
||
break;
|
||
}
|
||
default: {
|
||
tokenInColumnGroup(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function endTagInColumnGroup(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.COLGROUP: {
|
||
if (p3.openElements.currentTagId === TAG_ID.COLGROUP) {
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_TABLE;
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.TEMPLATE: {
|
||
templateEndTagInHead(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.COL: {
|
||
break;
|
||
}
|
||
default: {
|
||
tokenInColumnGroup(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function tokenInColumnGroup(p3, token) {
|
||
if (p3.openElements.currentTagId === TAG_ID.COLGROUP) {
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_TABLE;
|
||
p3._processToken(token);
|
||
}
|
||
}
|
||
function startTagInTableBody(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.TR: {
|
||
p3.openElements.clearBackToTableBodyContext();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.insertionMode = InsertionMode.IN_ROW;
|
||
break;
|
||
}
|
||
case TAG_ID.TH:
|
||
case TAG_ID.TD: {
|
||
p3.openElements.clearBackToTableBodyContext();
|
||
p3._insertFakeElement(TAG_NAMES.TR, TAG_ID.TR);
|
||
p3.insertionMode = InsertionMode.IN_ROW;
|
||
startTagInRow(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.CAPTION:
|
||
case TAG_ID.COL:
|
||
case TAG_ID.COLGROUP:
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.TFOOT:
|
||
case TAG_ID.THEAD: {
|
||
if (p3.openElements.hasTableBodyContextInTableScope()) {
|
||
p3.openElements.clearBackToTableBodyContext();
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_TABLE;
|
||
startTagInTable(p3, token);
|
||
}
|
||
break;
|
||
}
|
||
default: {
|
||
startTagInTable(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function endTagInTableBody(p3, token) {
|
||
const tn = token.tagID;
|
||
switch (token.tagID) {
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.TFOOT:
|
||
case TAG_ID.THEAD: {
|
||
if (p3.openElements.hasInTableScope(tn)) {
|
||
p3.openElements.clearBackToTableBodyContext();
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_TABLE;
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.TABLE: {
|
||
if (p3.openElements.hasTableBodyContextInTableScope()) {
|
||
p3.openElements.clearBackToTableBodyContext();
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_TABLE;
|
||
endTagInTable(p3, token);
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.BODY:
|
||
case TAG_ID.CAPTION:
|
||
case TAG_ID.COL:
|
||
case TAG_ID.COLGROUP:
|
||
case TAG_ID.HTML:
|
||
case TAG_ID.TD:
|
||
case TAG_ID.TH:
|
||
case TAG_ID.TR: {
|
||
break;
|
||
}
|
||
default: {
|
||
endTagInTable(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function startTagInRow(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.TH:
|
||
case TAG_ID.TD: {
|
||
p3.openElements.clearBackToTableRowContext();
|
||
p3._insertElement(token, NS.HTML);
|
||
p3.insertionMode = InsertionMode.IN_CELL;
|
||
p3.activeFormattingElements.insertMarker();
|
||
break;
|
||
}
|
||
case TAG_ID.CAPTION:
|
||
case TAG_ID.COL:
|
||
case TAG_ID.COLGROUP:
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.TFOOT:
|
||
case TAG_ID.THEAD:
|
||
case TAG_ID.TR: {
|
||
if (p3.openElements.hasInTableScope(TAG_ID.TR)) {
|
||
p3.openElements.clearBackToTableRowContext();
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_TABLE_BODY;
|
||
startTagInTableBody(p3, token);
|
||
}
|
||
break;
|
||
}
|
||
default: {
|
||
startTagInTable(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function endTagInRow(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.TR: {
|
||
if (p3.openElements.hasInTableScope(TAG_ID.TR)) {
|
||
p3.openElements.clearBackToTableRowContext();
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_TABLE_BODY;
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.TABLE: {
|
||
if (p3.openElements.hasInTableScope(TAG_ID.TR)) {
|
||
p3.openElements.clearBackToTableRowContext();
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_TABLE_BODY;
|
||
endTagInTableBody(p3, token);
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.TFOOT:
|
||
case TAG_ID.THEAD: {
|
||
if (p3.openElements.hasInTableScope(token.tagID) || p3.openElements.hasInTableScope(TAG_ID.TR)) {
|
||
p3.openElements.clearBackToTableRowContext();
|
||
p3.openElements.pop();
|
||
p3.insertionMode = InsertionMode.IN_TABLE_BODY;
|
||
endTagInTableBody(p3, token);
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.BODY:
|
||
case TAG_ID.CAPTION:
|
||
case TAG_ID.COL:
|
||
case TAG_ID.COLGROUP:
|
||
case TAG_ID.HTML:
|
||
case TAG_ID.TD:
|
||
case TAG_ID.TH: {
|
||
break;
|
||
}
|
||
default: {
|
||
endTagInTable(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function startTagInCell(p3, token) {
|
||
const tn = token.tagID;
|
||
if (TABLE_VOID_ELEMENTS.has(tn)) {
|
||
if (p3.openElements.hasInTableScope(TAG_ID.TD) || p3.openElements.hasInTableScope(TAG_ID.TH)) {
|
||
p3._closeTableCell();
|
||
startTagInRow(p3, token);
|
||
}
|
||
} else {
|
||
startTagInBody(p3, token);
|
||
}
|
||
}
|
||
function endTagInCell(p3, token) {
|
||
const tn = token.tagID;
|
||
switch (tn) {
|
||
case TAG_ID.TD:
|
||
case TAG_ID.TH: {
|
||
if (p3.openElements.hasInTableScope(tn)) {
|
||
p3.openElements.generateImpliedEndTags();
|
||
p3.openElements.popUntilTagNamePopped(tn);
|
||
p3.activeFormattingElements.clearToLastMarker();
|
||
p3.insertionMode = InsertionMode.IN_ROW;
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.TABLE:
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.TFOOT:
|
||
case TAG_ID.THEAD:
|
||
case TAG_ID.TR: {
|
||
if (p3.openElements.hasInTableScope(tn)) {
|
||
p3._closeTableCell();
|
||
endTagInRow(p3, token);
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.BODY:
|
||
case TAG_ID.CAPTION:
|
||
case TAG_ID.COL:
|
||
case TAG_ID.COLGROUP:
|
||
case TAG_ID.HTML: {
|
||
break;
|
||
}
|
||
default: {
|
||
endTagInBody(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function startTagInSelect(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.HTML: {
|
||
startTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.OPTION: {
|
||
if (p3.openElements.currentTagId === TAG_ID.OPTION) {
|
||
p3.openElements.pop();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
break;
|
||
}
|
||
case TAG_ID.OPTGROUP: {
|
||
if (p3.openElements.currentTagId === TAG_ID.OPTION) {
|
||
p3.openElements.pop();
|
||
}
|
||
if (p3.openElements.currentTagId === TAG_ID.OPTGROUP) {
|
||
p3.openElements.pop();
|
||
}
|
||
p3._insertElement(token, NS.HTML);
|
||
break;
|
||
}
|
||
case TAG_ID.INPUT:
|
||
case TAG_ID.KEYGEN:
|
||
case TAG_ID.TEXTAREA:
|
||
case TAG_ID.SELECT: {
|
||
if (p3.openElements.hasInSelectScope(TAG_ID.SELECT)) {
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
|
||
p3._resetInsertionMode();
|
||
if (token.tagID !== TAG_ID.SELECT) {
|
||
p3._processStartTag(token);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.SCRIPT:
|
||
case TAG_ID.TEMPLATE: {
|
||
startTagInHead(p3, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
function endTagInSelect(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.OPTGROUP: {
|
||
if (p3.openElements.stackTop > 0 && p3.openElements.currentTagId === TAG_ID.OPTION && p3.openElements.tagIDs[p3.openElements.stackTop - 1] === TAG_ID.OPTGROUP) {
|
||
p3.openElements.pop();
|
||
}
|
||
if (p3.openElements.currentTagId === TAG_ID.OPTGROUP) {
|
||
p3.openElements.pop();
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.OPTION: {
|
||
if (p3.openElements.currentTagId === TAG_ID.OPTION) {
|
||
p3.openElements.pop();
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.SELECT: {
|
||
if (p3.openElements.hasInSelectScope(TAG_ID.SELECT)) {
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
|
||
p3._resetInsertionMode();
|
||
}
|
||
break;
|
||
}
|
||
case TAG_ID.TEMPLATE: {
|
||
templateEndTagInHead(p3, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
function startTagInSelectInTable(p3, token) {
|
||
const tn = token.tagID;
|
||
if (tn === TAG_ID.CAPTION || tn === TAG_ID.TABLE || tn === TAG_ID.TBODY || tn === TAG_ID.TFOOT || tn === TAG_ID.THEAD || tn === TAG_ID.TR || tn === TAG_ID.TD || tn === TAG_ID.TH) {
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
|
||
p3._resetInsertionMode();
|
||
p3._processStartTag(token);
|
||
} else {
|
||
startTagInSelect(p3, token);
|
||
}
|
||
}
|
||
function endTagInSelectInTable(p3, token) {
|
||
const tn = token.tagID;
|
||
if (tn === TAG_ID.CAPTION || tn === TAG_ID.TABLE || tn === TAG_ID.TBODY || tn === TAG_ID.TFOOT || tn === TAG_ID.THEAD || tn === TAG_ID.TR || tn === TAG_ID.TD || tn === TAG_ID.TH) {
|
||
if (p3.openElements.hasInTableScope(tn)) {
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
|
||
p3._resetInsertionMode();
|
||
p3.onEndTag(token);
|
||
}
|
||
} else {
|
||
endTagInSelect(p3, token);
|
||
}
|
||
}
|
||
function startTagInTemplate(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.BASE:
|
||
case TAG_ID.BASEFONT:
|
||
case TAG_ID.BGSOUND:
|
||
case TAG_ID.LINK:
|
||
case TAG_ID.META:
|
||
case TAG_ID.NOFRAMES:
|
||
case TAG_ID.SCRIPT:
|
||
case TAG_ID.STYLE:
|
||
case TAG_ID.TEMPLATE:
|
||
case TAG_ID.TITLE: {
|
||
startTagInHead(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.CAPTION:
|
||
case TAG_ID.COLGROUP:
|
||
case TAG_ID.TBODY:
|
||
case TAG_ID.TFOOT:
|
||
case TAG_ID.THEAD: {
|
||
p3.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;
|
||
p3.insertionMode = InsertionMode.IN_TABLE;
|
||
startTagInTable(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.COL: {
|
||
p3.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;
|
||
p3.insertionMode = InsertionMode.IN_COLUMN_GROUP;
|
||
startTagInColumnGroup(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.TR: {
|
||
p3.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;
|
||
p3.insertionMode = InsertionMode.IN_TABLE_BODY;
|
||
startTagInTableBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.TD:
|
||
case TAG_ID.TH: {
|
||
p3.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;
|
||
p3.insertionMode = InsertionMode.IN_ROW;
|
||
startTagInRow(p3, token);
|
||
break;
|
||
}
|
||
default: {
|
||
p3.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;
|
||
p3.insertionMode = InsertionMode.IN_BODY;
|
||
startTagInBody(p3, token);
|
||
}
|
||
}
|
||
}
|
||
function endTagInTemplate(p3, token) {
|
||
if (token.tagID === TAG_ID.TEMPLATE) {
|
||
templateEndTagInHead(p3, token);
|
||
}
|
||
}
|
||
function eofInTemplate(p3, token) {
|
||
if (p3.openElements.tmplCount > 0) {
|
||
p3.openElements.popUntilTagNamePopped(TAG_ID.TEMPLATE);
|
||
p3.activeFormattingElements.clearToLastMarker();
|
||
p3.tmplInsertionModeStack.shift();
|
||
p3._resetInsertionMode();
|
||
p3.onEof(token);
|
||
} else {
|
||
stopParsing(p3, token);
|
||
}
|
||
}
|
||
function startTagAfterBody(p3, token) {
|
||
if (token.tagID === TAG_ID.HTML) {
|
||
startTagInBody(p3, token);
|
||
} else {
|
||
tokenAfterBody(p3, token);
|
||
}
|
||
}
|
||
function endTagAfterBody(p3, token) {
|
||
var _a2;
|
||
if (token.tagID === TAG_ID.HTML) {
|
||
if (!p3.fragmentContext) {
|
||
p3.insertionMode = InsertionMode.AFTER_AFTER_BODY;
|
||
}
|
||
if (p3.options.sourceCodeLocationInfo && p3.openElements.tagIDs[0] === TAG_ID.HTML) {
|
||
p3._setEndLocation(p3.openElements.items[0], token);
|
||
const bodyElement = p3.openElements.items[1];
|
||
if (bodyElement && !((_a2 = p3.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a2 === void 0 ? void 0 : _a2.endTag)) {
|
||
p3._setEndLocation(bodyElement, token);
|
||
}
|
||
}
|
||
} else {
|
||
tokenAfterBody(p3, token);
|
||
}
|
||
}
|
||
function tokenAfterBody(p3, token) {
|
||
p3.insertionMode = InsertionMode.IN_BODY;
|
||
modeInBody(p3, token);
|
||
}
|
||
function startTagInFrameset(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.HTML: {
|
||
startTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.FRAMESET: {
|
||
p3._insertElement(token, NS.HTML);
|
||
break;
|
||
}
|
||
case TAG_ID.FRAME: {
|
||
p3._appendElement(token, NS.HTML);
|
||
token.ackSelfClosing = true;
|
||
break;
|
||
}
|
||
case TAG_ID.NOFRAMES: {
|
||
startTagInHead(p3, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
function endTagInFrameset(p3, token) {
|
||
if (token.tagID === TAG_ID.FRAMESET && !p3.openElements.isRootHtmlElementCurrent()) {
|
||
p3.openElements.pop();
|
||
if (!p3.fragmentContext && p3.openElements.currentTagId !== TAG_ID.FRAMESET) {
|
||
p3.insertionMode = InsertionMode.AFTER_FRAMESET;
|
||
}
|
||
}
|
||
}
|
||
function startTagAfterFrameset(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.HTML: {
|
||
startTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.NOFRAMES: {
|
||
startTagInHead(p3, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
function endTagAfterFrameset(p3, token) {
|
||
if (token.tagID === TAG_ID.HTML) {
|
||
p3.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;
|
||
}
|
||
}
|
||
function startTagAfterAfterBody(p3, token) {
|
||
if (token.tagID === TAG_ID.HTML) {
|
||
startTagInBody(p3, token);
|
||
} else {
|
||
tokenAfterAfterBody(p3, token);
|
||
}
|
||
}
|
||
function tokenAfterAfterBody(p3, token) {
|
||
p3.insertionMode = InsertionMode.IN_BODY;
|
||
modeInBody(p3, token);
|
||
}
|
||
function startTagAfterAfterFrameset(p3, token) {
|
||
switch (token.tagID) {
|
||
case TAG_ID.HTML: {
|
||
startTagInBody(p3, token);
|
||
break;
|
||
}
|
||
case TAG_ID.NOFRAMES: {
|
||
startTagInHead(p3, token);
|
||
break;
|
||
}
|
||
default:
|
||
}
|
||
}
|
||
function nullCharacterInForeignContent(p3, token) {
|
||
token.chars = REPLACEMENT_CHARACTER;
|
||
p3._insertCharacters(token);
|
||
}
|
||
function characterInForeignContent(p3, token) {
|
||
p3._insertCharacters(token);
|
||
p3.framesetOk = false;
|
||
}
|
||
function popUntilHtmlOrIntegrationPoint(p3) {
|
||
while (p3.treeAdapter.getNamespaceURI(p3.openElements.current) !== NS.HTML && !p3._isIntegrationPoint(p3.openElements.currentTagId, p3.openElements.current)) {
|
||
p3.openElements.pop();
|
||
}
|
||
}
|
||
function startTagInForeignContent(p3, token) {
|
||
if (causesExit(token)) {
|
||
popUntilHtmlOrIntegrationPoint(p3);
|
||
p3._startTagOutsideForeignContent(token);
|
||
} else {
|
||
const current = p3._getAdjustedCurrentElement();
|
||
const currentNs = p3.treeAdapter.getNamespaceURI(current);
|
||
if (currentNs === NS.MATHML) {
|
||
adjustTokenMathMLAttrs(token);
|
||
} else if (currentNs === NS.SVG) {
|
||
adjustTokenSVGTagName(token);
|
||
adjustTokenSVGAttrs(token);
|
||
}
|
||
adjustTokenXMLAttrs(token);
|
||
if (token.selfClosing) {
|
||
p3._appendElement(token, currentNs);
|
||
} else {
|
||
p3._insertElement(token, currentNs);
|
||
}
|
||
token.ackSelfClosing = true;
|
||
}
|
||
}
|
||
function endTagInForeignContent(p3, token) {
|
||
if (token.tagID === TAG_ID.P || token.tagID === TAG_ID.BR) {
|
||
popUntilHtmlOrIntegrationPoint(p3);
|
||
p3._endTagOutsideForeignContent(token);
|
||
return;
|
||
}
|
||
for (let i2 = p3.openElements.stackTop; i2 > 0; i2--) {
|
||
const element3 = p3.openElements.items[i2];
|
||
if (p3.treeAdapter.getNamespaceURI(element3) === NS.HTML) {
|
||
p3._endTagOutsideForeignContent(token);
|
||
break;
|
||
}
|
||
const tagName = p3.treeAdapter.getTagName(element3);
|
||
if (tagName.toLowerCase() === token.tagName) {
|
||
token.tagName = tagName;
|
||
p3.openElements.shortenToLength(i2);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
// node_modules/entities/lib/esm/escape.js
|
||
var xmlCodeMap = /* @__PURE__ */ new Map([
|
||
[34, """],
|
||
[38, "&"],
|
||
[39, "'"],
|
||
[60, "<"],
|
||
[62, ">"]
|
||
]);
|
||
var getCodePoint = (
|
||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
||
String.prototype.codePointAt != null ? (str, index2) => str.codePointAt(index2) : (
|
||
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
||
(c2, index2) => (c2.charCodeAt(index2) & 64512) === 55296 ? (c2.charCodeAt(index2) - 55296) * 1024 + c2.charCodeAt(index2 + 1) - 56320 + 65536 : c2.charCodeAt(index2)
|
||
)
|
||
);
|
||
function getEscaper(regex, map) {
|
||
return function escape(data) {
|
||
let match;
|
||
let lastIdx = 0;
|
||
let result = "";
|
||
while (match = regex.exec(data)) {
|
||
if (lastIdx !== match.index) {
|
||
result += data.substring(lastIdx, match.index);
|
||
}
|
||
result += map.get(match[0].charCodeAt(0));
|
||
lastIdx = match.index + 1;
|
||
}
|
||
return result + data.substring(lastIdx);
|
||
};
|
||
}
|
||
var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
|
||
var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
|
||
[34, """],
|
||
[38, "&"],
|
||
[160, " "]
|
||
]));
|
||
var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
|
||
[38, "&"],
|
||
[60, "<"],
|
||
[62, ">"],
|
||
[160, " "]
|
||
]));
|
||
|
||
// node_modules/parse5/dist/serializer/index.js
|
||
var VOID_ELEMENTS = /* @__PURE__ */ new Set([
|
||
TAG_NAMES.AREA,
|
||
TAG_NAMES.BASE,
|
||
TAG_NAMES.BASEFONT,
|
||
TAG_NAMES.BGSOUND,
|
||
TAG_NAMES.BR,
|
||
TAG_NAMES.COL,
|
||
TAG_NAMES.EMBED,
|
||
TAG_NAMES.FRAME,
|
||
TAG_NAMES.HR,
|
||
TAG_NAMES.IMG,
|
||
TAG_NAMES.INPUT,
|
||
TAG_NAMES.KEYGEN,
|
||
TAG_NAMES.LINK,
|
||
TAG_NAMES.META,
|
||
TAG_NAMES.PARAM,
|
||
TAG_NAMES.SOURCE,
|
||
TAG_NAMES.TRACK,
|
||
TAG_NAMES.WBR
|
||
]);
|
||
|
||
// node_modules/parse5/dist/index.js
|
||
function parse4(html5, options) {
|
||
return Parser.parse(html5, options);
|
||
}
|
||
function parseFragment(fragmentContext, html5, options) {
|
||
if (typeof fragmentContext === "string") {
|
||
options = html5;
|
||
html5 = fragmentContext;
|
||
fragmentContext = null;
|
||
}
|
||
const parser = Parser.getFragmentParser(fragmentContext, options);
|
||
parser.tokenizer.write(html5, true);
|
||
return parser.getFragment();
|
||
}
|
||
|
||
// node_modules/unist-util-stringify-position/lib/index.js
|
||
function stringifyPosition(value) {
|
||
if (!value || typeof value !== "object") {
|
||
return "";
|
||
}
|
||
if ("position" in value || "type" in value) {
|
||
return position2(value.position);
|
||
}
|
||
if ("start" in value || "end" in value) {
|
||
return position2(value);
|
||
}
|
||
if ("line" in value || "column" in value) {
|
||
return point2(value);
|
||
}
|
||
return "";
|
||
}
|
||
function point2(point3) {
|
||
return index(point3 && point3.line) + ":" + index(point3 && point3.column);
|
||
}
|
||
function position2(pos) {
|
||
return point2(pos && pos.start) + "-" + point2(pos && pos.end);
|
||
}
|
||
function index(value) {
|
||
return value && typeof value === "number" ? value : 1;
|
||
}
|
||
|
||
// node_modules/vfile-message/lib/index.js
|
||
var VFileMessage = class extends Error {
|
||
/**
|
||
* Create a message for `reason`.
|
||
*
|
||
* > 🪦 **Note**: also has obsolete signatures.
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {Options | null | undefined} [options]
|
||
* @returns
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {Node | NodeLike | null | undefined} parent
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {Point | Position | null | undefined} place
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {Node | NodeLike | null | undefined} parent
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {Point | Position | null | undefined} place
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns
|
||
*
|
||
* @param {Error | VFileMessage | string} causeOrReason
|
||
* Reason for message, should use markdown.
|
||
* @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]
|
||
* Configuration (optional).
|
||
* @param {string | null | undefined} [origin]
|
||
* Place in code where the message originates (example:
|
||
* `'my-package:my-rule'` or `'my-rule'`).
|
||
* @returns
|
||
* Instance of `VFileMessage`.
|
||
*/
|
||
// eslint-disable-next-line complexity
|
||
constructor(causeOrReason, optionsOrParentOrPlace, origin) {
|
||
super();
|
||
if (typeof optionsOrParentOrPlace === "string") {
|
||
origin = optionsOrParentOrPlace;
|
||
optionsOrParentOrPlace = void 0;
|
||
}
|
||
let reason = "";
|
||
let options = {};
|
||
let legacyCause = false;
|
||
if (optionsOrParentOrPlace) {
|
||
if ("line" in optionsOrParentOrPlace && "column" in optionsOrParentOrPlace) {
|
||
options = { place: optionsOrParentOrPlace };
|
||
} else if ("start" in optionsOrParentOrPlace && "end" in optionsOrParentOrPlace) {
|
||
options = { place: optionsOrParentOrPlace };
|
||
} else if ("type" in optionsOrParentOrPlace) {
|
||
options = {
|
||
ancestors: [optionsOrParentOrPlace],
|
||
place: optionsOrParentOrPlace.position
|
||
};
|
||
} else {
|
||
options = { ...optionsOrParentOrPlace };
|
||
}
|
||
}
|
||
if (typeof causeOrReason === "string") {
|
||
reason = causeOrReason;
|
||
} else if (!options.cause && causeOrReason) {
|
||
legacyCause = true;
|
||
reason = causeOrReason.message;
|
||
options.cause = causeOrReason;
|
||
}
|
||
if (!options.ruleId && !options.source && typeof origin === "string") {
|
||
const index2 = origin.indexOf(":");
|
||
if (index2 === -1) {
|
||
options.ruleId = origin;
|
||
} else {
|
||
options.source = origin.slice(0, index2);
|
||
options.ruleId = origin.slice(index2 + 1);
|
||
}
|
||
}
|
||
if (!options.place && options.ancestors && options.ancestors) {
|
||
const parent = options.ancestors[options.ancestors.length - 1];
|
||
if (parent) {
|
||
options.place = parent.position;
|
||
}
|
||
}
|
||
const start = options.place && "start" in options.place ? options.place.start : options.place;
|
||
this.ancestors = options.ancestors || void 0;
|
||
this.cause = options.cause || void 0;
|
||
this.column = start ? start.column : void 0;
|
||
this.fatal = void 0;
|
||
this.file;
|
||
this.message = reason;
|
||
this.line = start ? start.line : void 0;
|
||
this.name = stringifyPosition(options.place) || "1:1";
|
||
this.place = options.place || void 0;
|
||
this.reason = this.message;
|
||
this.ruleId = options.ruleId || void 0;
|
||
this.source = options.source || void 0;
|
||
this.stack = legacyCause && options.cause && typeof options.cause.stack === "string" ? options.cause.stack : "";
|
||
this.actual;
|
||
this.expected;
|
||
this.note;
|
||
this.url;
|
||
}
|
||
};
|
||
VFileMessage.prototype.file = "";
|
||
VFileMessage.prototype.name = "";
|
||
VFileMessage.prototype.reason = "";
|
||
VFileMessage.prototype.message = "";
|
||
VFileMessage.prototype.stack = "";
|
||
VFileMessage.prototype.column = void 0;
|
||
VFileMessage.prototype.line = void 0;
|
||
VFileMessage.prototype.ancestors = void 0;
|
||
VFileMessage.prototype.cause = void 0;
|
||
VFileMessage.prototype.fatal = void 0;
|
||
VFileMessage.prototype.place = void 0;
|
||
VFileMessage.prototype.ruleId = void 0;
|
||
VFileMessage.prototype.source = void 0;
|
||
|
||
// node_modules/vfile/lib/minpath.browser.js
|
||
var path = { basename, dirname, extname, join, sep: "/" };
|
||
function basename(path2, ext) {
|
||
if (ext !== void 0 && typeof ext !== "string") {
|
||
throw new TypeError('"ext" argument must be a string');
|
||
}
|
||
assertPath(path2);
|
||
let start = 0;
|
||
let end = -1;
|
||
let index2 = path2.length;
|
||
let seenNonSlash;
|
||
if (ext === void 0 || ext.length === 0 || ext.length > path2.length) {
|
||
while (index2--) {
|
||
if (path2.codePointAt(index2) === 47) {
|
||
if (seenNonSlash) {
|
||
start = index2 + 1;
|
||
break;
|
||
}
|
||
} else if (end < 0) {
|
||
seenNonSlash = true;
|
||
end = index2 + 1;
|
||
}
|
||
}
|
||
return end < 0 ? "" : path2.slice(start, end);
|
||
}
|
||
if (ext === path2) {
|
||
return "";
|
||
}
|
||
let firstNonSlashEnd = -1;
|
||
let extIndex = ext.length - 1;
|
||
while (index2--) {
|
||
if (path2.codePointAt(index2) === 47) {
|
||
if (seenNonSlash) {
|
||
start = index2 + 1;
|
||
break;
|
||
}
|
||
} else {
|
||
if (firstNonSlashEnd < 0) {
|
||
seenNonSlash = true;
|
||
firstNonSlashEnd = index2 + 1;
|
||
}
|
||
if (extIndex > -1) {
|
||
if (path2.codePointAt(index2) === ext.codePointAt(extIndex--)) {
|
||
if (extIndex < 0) {
|
||
end = index2;
|
||
}
|
||
} else {
|
||
extIndex = -1;
|
||
end = firstNonSlashEnd;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (start === end) {
|
||
end = firstNonSlashEnd;
|
||
} else if (end < 0) {
|
||
end = path2.length;
|
||
}
|
||
return path2.slice(start, end);
|
||
}
|
||
function dirname(path2) {
|
||
assertPath(path2);
|
||
if (path2.length === 0) {
|
||
return ".";
|
||
}
|
||
let end = -1;
|
||
let index2 = path2.length;
|
||
let unmatchedSlash;
|
||
while (--index2) {
|
||
if (path2.codePointAt(index2) === 47) {
|
||
if (unmatchedSlash) {
|
||
end = index2;
|
||
break;
|
||
}
|
||
} else if (!unmatchedSlash) {
|
||
unmatchedSlash = true;
|
||
}
|
||
}
|
||
return end < 0 ? path2.codePointAt(0) === 47 ? "/" : "." : end === 1 && path2.codePointAt(0) === 47 ? "//" : path2.slice(0, end);
|
||
}
|
||
function extname(path2) {
|
||
assertPath(path2);
|
||
let index2 = path2.length;
|
||
let end = -1;
|
||
let startPart = 0;
|
||
let startDot = -1;
|
||
let preDotState = 0;
|
||
let unmatchedSlash;
|
||
while (index2--) {
|
||
const code = path2.codePointAt(index2);
|
||
if (code === 47) {
|
||
if (unmatchedSlash) {
|
||
startPart = index2 + 1;
|
||
break;
|
||
}
|
||
continue;
|
||
}
|
||
if (end < 0) {
|
||
unmatchedSlash = true;
|
||
end = index2 + 1;
|
||
}
|
||
if (code === 46) {
|
||
if (startDot < 0) {
|
||
startDot = index2;
|
||
} else if (preDotState !== 1) {
|
||
preDotState = 1;
|
||
}
|
||
} else if (startDot > -1) {
|
||
preDotState = -1;
|
||
}
|
||
}
|
||
if (startDot < 0 || end < 0 || // We saw a non-dot character immediately before the dot.
|
||
preDotState === 0 || // The (right-most) trimmed path component is exactly `..`.
|
||
preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
|
||
return "";
|
||
}
|
||
return path2.slice(startDot, end);
|
||
}
|
||
function join(...segments) {
|
||
let index2 = -1;
|
||
let joined;
|
||
while (++index2 < segments.length) {
|
||
assertPath(segments[index2]);
|
||
if (segments[index2]) {
|
||
joined = joined === void 0 ? segments[index2] : joined + "/" + segments[index2];
|
||
}
|
||
}
|
||
return joined === void 0 ? "." : normalize2(joined);
|
||
}
|
||
function normalize2(path2) {
|
||
assertPath(path2);
|
||
const absolute = path2.codePointAt(0) === 47;
|
||
let value = normalizeString(path2, !absolute);
|
||
if (value.length === 0 && !absolute) {
|
||
value = ".";
|
||
}
|
||
if (value.length > 0 && path2.codePointAt(path2.length - 1) === 47) {
|
||
value += "/";
|
||
}
|
||
return absolute ? "/" + value : value;
|
||
}
|
||
function normalizeString(path2, allowAboveRoot) {
|
||
let result = "";
|
||
let lastSegmentLength = 0;
|
||
let lastSlash = -1;
|
||
let dots = 0;
|
||
let index2 = -1;
|
||
let code;
|
||
let lastSlashIndex;
|
||
while (++index2 <= path2.length) {
|
||
if (index2 < path2.length) {
|
||
code = path2.codePointAt(index2);
|
||
} else if (code === 47) {
|
||
break;
|
||
} else {
|
||
code = 47;
|
||
}
|
||
if (code === 47) {
|
||
if (lastSlash === index2 - 1 || dots === 1) {
|
||
} else if (lastSlash !== index2 - 1 && dots === 2) {
|
||
if (result.length < 2 || lastSegmentLength !== 2 || result.codePointAt(result.length - 1) !== 46 || result.codePointAt(result.length - 2) !== 46) {
|
||
if (result.length > 2) {
|
||
lastSlashIndex = result.lastIndexOf("/");
|
||
if (lastSlashIndex !== result.length - 1) {
|
||
if (lastSlashIndex < 0) {
|
||
result = "";
|
||
lastSegmentLength = 0;
|
||
} else {
|
||
result = result.slice(0, lastSlashIndex);
|
||
lastSegmentLength = result.length - 1 - result.lastIndexOf("/");
|
||
}
|
||
lastSlash = index2;
|
||
dots = 0;
|
||
continue;
|
||
}
|
||
} else if (result.length > 0) {
|
||
result = "";
|
||
lastSegmentLength = 0;
|
||
lastSlash = index2;
|
||
dots = 0;
|
||
continue;
|
||
}
|
||
}
|
||
if (allowAboveRoot) {
|
||
result = result.length > 0 ? result + "/.." : "..";
|
||
lastSegmentLength = 2;
|
||
}
|
||
} else {
|
||
if (result.length > 0) {
|
||
result += "/" + path2.slice(lastSlash + 1, index2);
|
||
} else {
|
||
result = path2.slice(lastSlash + 1, index2);
|
||
}
|
||
lastSegmentLength = index2 - lastSlash - 1;
|
||
}
|
||
lastSlash = index2;
|
||
dots = 0;
|
||
} else if (code === 46 && dots > -1) {
|
||
dots++;
|
||
} else {
|
||
dots = -1;
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
function assertPath(path2) {
|
||
if (typeof path2 !== "string") {
|
||
throw new TypeError(
|
||
"Path must be a string. Received " + JSON.stringify(path2)
|
||
);
|
||
}
|
||
}
|
||
|
||
// node_modules/vfile/lib/minproc.browser.js
|
||
var proc = { cwd };
|
||
function cwd() {
|
||
return "/";
|
||
}
|
||
|
||
// node_modules/vfile/lib/minurl.shared.js
|
||
function isUrl(fileUrlOrPath) {
|
||
return Boolean(
|
||
fileUrlOrPath !== null && typeof fileUrlOrPath === "object" && "href" in fileUrlOrPath && fileUrlOrPath.href && "protocol" in fileUrlOrPath && fileUrlOrPath.protocol && // @ts-expect-error: indexing is fine.
|
||
fileUrlOrPath.auth === void 0
|
||
);
|
||
}
|
||
|
||
// node_modules/vfile/lib/minurl.browser.js
|
||
function urlToPath(path2) {
|
||
if (typeof path2 === "string") {
|
||
path2 = new URL(path2);
|
||
} else if (!isUrl(path2)) {
|
||
const error = new TypeError(
|
||
'The "path" argument must be of type string or an instance of URL. Received `' + path2 + "`"
|
||
);
|
||
error.code = "ERR_INVALID_ARG_TYPE";
|
||
throw error;
|
||
}
|
||
if (path2.protocol !== "file:") {
|
||
const error = new TypeError("The URL must be of scheme file");
|
||
error.code = "ERR_INVALID_URL_SCHEME";
|
||
throw error;
|
||
}
|
||
return getPathFromURLPosix(path2);
|
||
}
|
||
function getPathFromURLPosix(url) {
|
||
if (url.hostname !== "") {
|
||
const error = new TypeError(
|
||
'File URL host must be "localhost" or empty on darwin'
|
||
);
|
||
error.code = "ERR_INVALID_FILE_URL_HOST";
|
||
throw error;
|
||
}
|
||
const pathname = url.pathname;
|
||
let index2 = -1;
|
||
while (++index2 < pathname.length) {
|
||
if (pathname.codePointAt(index2) === 37 && pathname.codePointAt(index2 + 1) === 50) {
|
||
const third = pathname.codePointAt(index2 + 2);
|
||
if (third === 70 || third === 102) {
|
||
const error = new TypeError(
|
||
"File URL path must not include encoded / characters"
|
||
);
|
||
error.code = "ERR_INVALID_FILE_URL_PATH";
|
||
throw error;
|
||
}
|
||
}
|
||
}
|
||
return decodeURIComponent(pathname);
|
||
}
|
||
|
||
// node_modules/vfile/lib/index.js
|
||
var order = (
|
||
/** @type {const} */
|
||
[
|
||
"history",
|
||
"path",
|
||
"basename",
|
||
"stem",
|
||
"extname",
|
||
"dirname"
|
||
]
|
||
);
|
||
var VFile = class {
|
||
/**
|
||
* Create a new virtual file.
|
||
*
|
||
* `options` is treated as:
|
||
*
|
||
* * `string` or `Uint8Array` — `{value: options}`
|
||
* * `URL` — `{path: options}`
|
||
* * `VFile` — shallow copies its data over to the new file
|
||
* * `object` — all fields are shallow copied over to the new file
|
||
*
|
||
* Path related fields are set in the following order (least specific to
|
||
* most specific): `history`, `path`, `basename`, `stem`, `extname`,
|
||
* `dirname`.
|
||
*
|
||
* You cannot set `dirname` or `extname` without setting either `history`,
|
||
* `path`, `basename`, or `stem` too.
|
||
*
|
||
* @param {Compatible | null | undefined} [value]
|
||
* File value.
|
||
* @returns
|
||
* New instance.
|
||
*/
|
||
constructor(value) {
|
||
let options;
|
||
if (!value) {
|
||
options = {};
|
||
} else if (isUrl(value)) {
|
||
options = { path: value };
|
||
} else if (typeof value === "string" || isUint8Array(value)) {
|
||
options = { value };
|
||
} else {
|
||
options = value;
|
||
}
|
||
this.cwd = proc.cwd();
|
||
this.data = {};
|
||
this.history = [];
|
||
this.messages = [];
|
||
this.value;
|
||
this.map;
|
||
this.result;
|
||
this.stored;
|
||
let index2 = -1;
|
||
while (++index2 < order.length) {
|
||
const prop2 = order[index2];
|
||
if (prop2 in options && options[prop2] !== void 0 && options[prop2] !== null) {
|
||
this[prop2] = prop2 === "history" ? [...options[prop2]] : options[prop2];
|
||
}
|
||
}
|
||
let prop;
|
||
for (prop in options) {
|
||
if (!order.includes(prop)) {
|
||
this[prop] = options[prop];
|
||
}
|
||
}
|
||
}
|
||
/**
|
||
* Get the basename (including extname) (example: `'index.min.js'`).
|
||
*
|
||
* @returns {string | undefined}
|
||
* Basename.
|
||
*/
|
||
get basename() {
|
||
return typeof this.path === "string" ? path.basename(this.path) : void 0;
|
||
}
|
||
/**
|
||
* Set basename (including extname) (`'index.min.js'`).
|
||
*
|
||
* Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'`
|
||
* on windows).
|
||
* Cannot be nullified (use `file.path = file.dirname` instead).
|
||
*
|
||
* @param {string} basename
|
||
* Basename.
|
||
* @returns {undefined}
|
||
* Nothing.
|
||
*/
|
||
set basename(basename2) {
|
||
assertNonEmpty(basename2, "basename");
|
||
assertPart(basename2, "basename");
|
||
this.path = path.join(this.dirname || "", basename2);
|
||
}
|
||
/**
|
||
* Get the parent path (example: `'~'`).
|
||
*
|
||
* @returns {string | undefined}
|
||
* Dirname.
|
||
*/
|
||
get dirname() {
|
||
return typeof this.path === "string" ? path.dirname(this.path) : void 0;
|
||
}
|
||
/**
|
||
* Set the parent path (example: `'~'`).
|
||
*
|
||
* Cannot be set if there’s no `path` yet.
|
||
*
|
||
* @param {string | undefined} dirname
|
||
* Dirname.
|
||
* @returns {undefined}
|
||
* Nothing.
|
||
*/
|
||
set dirname(dirname2) {
|
||
assertPath2(this.basename, "dirname");
|
||
this.path = path.join(dirname2 || "", this.basename);
|
||
}
|
||
/**
|
||
* Get the extname (including dot) (example: `'.js'`).
|
||
*
|
||
* @returns {string | undefined}
|
||
* Extname.
|
||
*/
|
||
get extname() {
|
||
return typeof this.path === "string" ? path.extname(this.path) : void 0;
|
||
}
|
||
/**
|
||
* Set the extname (including dot) (example: `'.js'`).
|
||
*
|
||
* Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'`
|
||
* on windows).
|
||
* Cannot be set if there’s no `path` yet.
|
||
*
|
||
* @param {string | undefined} extname
|
||
* Extname.
|
||
* @returns {undefined}
|
||
* Nothing.
|
||
*/
|
||
set extname(extname2) {
|
||
assertPart(extname2, "extname");
|
||
assertPath2(this.dirname, "extname");
|
||
if (extname2) {
|
||
if (extname2.codePointAt(0) !== 46) {
|
||
throw new Error("`extname` must start with `.`");
|
||
}
|
||
if (extname2.includes(".", 1)) {
|
||
throw new Error("`extname` cannot contain multiple dots");
|
||
}
|
||
}
|
||
this.path = path.join(this.dirname, this.stem + (extname2 || ""));
|
||
}
|
||
/**
|
||
* Get the full path (example: `'~/index.min.js'`).
|
||
*
|
||
* @returns {string}
|
||
* Path.
|
||
*/
|
||
get path() {
|
||
return this.history[this.history.length - 1];
|
||
}
|
||
/**
|
||
* Set the full path (example: `'~/index.min.js'`).
|
||
*
|
||
* Cannot be nullified.
|
||
* You can set a file URL (a `URL` object with a `file:` protocol) which will
|
||
* be turned into a path with `url.fileURLToPath`.
|
||
*
|
||
* @param {URL | string} path
|
||
* Path.
|
||
* @returns {undefined}
|
||
* Nothing.
|
||
*/
|
||
set path(path2) {
|
||
if (isUrl(path2)) {
|
||
path2 = urlToPath(path2);
|
||
}
|
||
assertNonEmpty(path2, "path");
|
||
if (this.path !== path2) {
|
||
this.history.push(path2);
|
||
}
|
||
}
|
||
/**
|
||
* Get the stem (basename w/o extname) (example: `'index.min'`).
|
||
*
|
||
* @returns {string | undefined}
|
||
* Stem.
|
||
*/
|
||
get stem() {
|
||
return typeof this.path === "string" ? path.basename(this.path, this.extname) : void 0;
|
||
}
|
||
/**
|
||
* Set the stem (basename w/o extname) (example: `'index.min'`).
|
||
*
|
||
* Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\'`
|
||
* on windows).
|
||
* Cannot be nullified (use `file.path = file.dirname` instead).
|
||
*
|
||
* @param {string} stem
|
||
* Stem.
|
||
* @returns {undefined}
|
||
* Nothing.
|
||
*/
|
||
set stem(stem) {
|
||
assertNonEmpty(stem, "stem");
|
||
assertPart(stem, "stem");
|
||
this.path = path.join(this.dirname || "", stem + (this.extname || ""));
|
||
}
|
||
// Normal prototypal methods.
|
||
/**
|
||
* Create a fatal message for `reason` associated with the file.
|
||
*
|
||
* The `fatal` field of the message is set to `true` (error; file not usable)
|
||
* and the `file` field is set to the current file path.
|
||
* The message is added to the `messages` field on `file`.
|
||
*
|
||
* > 🪦 **Note**: also has obsolete signatures.
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {MessageOptions | null | undefined} [options]
|
||
* @returns {never}
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {Node | NodeLike | null | undefined} parent
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {never}
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {Point | Position | null | undefined} place
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {never}
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {never}
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {Node | NodeLike | null | undefined} parent
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {never}
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {Point | Position | null | undefined} place
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {never}
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {never}
|
||
*
|
||
* @param {Error | VFileMessage | string} causeOrReason
|
||
* Reason for message, should use markdown.
|
||
* @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]
|
||
* Configuration (optional).
|
||
* @param {string | null | undefined} [origin]
|
||
* Place in code where the message originates (example:
|
||
* `'my-package:my-rule'` or `'my-rule'`).
|
||
* @returns {never}
|
||
* Never.
|
||
* @throws {VFileMessage}
|
||
* Message.
|
||
*/
|
||
fail(causeOrReason, optionsOrParentOrPlace, origin) {
|
||
const message = this.message(causeOrReason, optionsOrParentOrPlace, origin);
|
||
message.fatal = true;
|
||
throw message;
|
||
}
|
||
/**
|
||
* Create an info message for `reason` associated with the file.
|
||
*
|
||
* The `fatal` field of the message is set to `undefined` (info; change
|
||
* likely not needed) and the `file` field is set to the current file path.
|
||
* The message is added to the `messages` field on `file`.
|
||
*
|
||
* > 🪦 **Note**: also has obsolete signatures.
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {MessageOptions | null | undefined} [options]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {Node | NodeLike | null | undefined} parent
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {Point | Position | null | undefined} place
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {Node | NodeLike | null | undefined} parent
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {Point | Position | null | undefined} place
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @param {Error | VFileMessage | string} causeOrReason
|
||
* Reason for message, should use markdown.
|
||
* @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]
|
||
* Configuration (optional).
|
||
* @param {string | null | undefined} [origin]
|
||
* Place in code where the message originates (example:
|
||
* `'my-package:my-rule'` or `'my-rule'`).
|
||
* @returns {VFileMessage}
|
||
* Message.
|
||
*/
|
||
info(causeOrReason, optionsOrParentOrPlace, origin) {
|
||
const message = this.message(causeOrReason, optionsOrParentOrPlace, origin);
|
||
message.fatal = void 0;
|
||
return message;
|
||
}
|
||
/**
|
||
* Create a message for `reason` associated with the file.
|
||
*
|
||
* The `fatal` field of the message is set to `false` (warning; change may be
|
||
* needed) and the `file` field is set to the current file path.
|
||
* The message is added to the `messages` field on `file`.
|
||
*
|
||
* > 🪦 **Note**: also has obsolete signatures.
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {MessageOptions | null | undefined} [options]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {Node | NodeLike | null | undefined} parent
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {Point | Position | null | undefined} place
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {string} reason
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {Node | NodeLike | null | undefined} parent
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {Point | Position | null | undefined} place
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @overload
|
||
* @param {Error | VFileMessage} cause
|
||
* @param {string | null | undefined} [origin]
|
||
* @returns {VFileMessage}
|
||
*
|
||
* @param {Error | VFileMessage | string} causeOrReason
|
||
* Reason for message, should use markdown.
|
||
* @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]
|
||
* Configuration (optional).
|
||
* @param {string | null | undefined} [origin]
|
||
* Place in code where the message originates (example:
|
||
* `'my-package:my-rule'` or `'my-rule'`).
|
||
* @returns {VFileMessage}
|
||
* Message.
|
||
*/
|
||
message(causeOrReason, optionsOrParentOrPlace, origin) {
|
||
const message = new VFileMessage(
|
||
// @ts-expect-error: the overloads are fine.
|
||
causeOrReason,
|
||
optionsOrParentOrPlace,
|
||
origin
|
||
);
|
||
if (this.path) {
|
||
message.name = this.path + ":" + message.name;
|
||
message.file = this.path;
|
||
}
|
||
message.fatal = false;
|
||
this.messages.push(message);
|
||
return message;
|
||
}
|
||
/**
|
||
* Serialize the file.
|
||
*
|
||
* > **Note**: which encodings are supported depends on the engine.
|
||
* > For info on Node.js, see:
|
||
* > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.
|
||
*
|
||
* @param {string | null | undefined} [encoding='utf8']
|
||
* Character encoding to understand `value` as when it’s a `Uint8Array`
|
||
* (default: `'utf-8'`).
|
||
* @returns {string}
|
||
* Serialized file.
|
||
*/
|
||
toString(encoding) {
|
||
if (this.value === void 0) {
|
||
return "";
|
||
}
|
||
if (typeof this.value === "string") {
|
||
return this.value;
|
||
}
|
||
const decoder = new TextDecoder(encoding || void 0);
|
||
return decoder.decode(this.value);
|
||
}
|
||
};
|
||
function assertPart(part, name) {
|
||
if (part && part.includes(path.sep)) {
|
||
throw new Error(
|
||
"`" + name + "` cannot be a path: did not expect `" + path.sep + "`"
|
||
);
|
||
}
|
||
}
|
||
function assertNonEmpty(part, name) {
|
||
if (!part) {
|
||
throw new Error("`" + name + "` cannot be empty");
|
||
}
|
||
}
|
||
function assertPath2(path2, name) {
|
||
if (!path2) {
|
||
throw new Error("Setting `" + name + "` requires `path` to be set too");
|
||
}
|
||
}
|
||
function isUint8Array(value) {
|
||
return Boolean(
|
||
value && typeof value === "object" && "byteLength" in value && "byteOffset" in value
|
||
);
|
||
}
|
||
|
||
// node_modules/hast-util-from-html/lib/errors.js
|
||
var errors = {
|
||
/** @type {ErrorInfo} */
|
||
abandonedHeadElementChild: {
|
||
reason: "Unexpected metadata element after head",
|
||
description: "Unexpected element after head. Expected the element before `</head>`",
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
abruptClosingOfEmptyComment: {
|
||
reason: "Unexpected abruptly closed empty comment",
|
||
description: "Unexpected `>` or `->`. Expected `-->` to close comments"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
abruptDoctypePublicIdentifier: {
|
||
reason: "Unexpected abruptly closed public identifier",
|
||
description: "Unexpected `>`. Expected a closing `\"` or `'` after the public identifier"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
abruptDoctypeSystemIdentifier: {
|
||
reason: "Unexpected abruptly closed system identifier",
|
||
description: "Unexpected `>`. Expected a closing `\"` or `'` after the identifier identifier"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
absenceOfDigitsInNumericCharacterReference: {
|
||
reason: "Unexpected non-digit at start of numeric character reference",
|
||
description: "Unexpected `%c`. Expected `[0-9]` for decimal references or `[0-9a-fA-F]` for hexadecimal references"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
cdataInHtmlContent: {
|
||
reason: "Unexpected CDATA section in HTML",
|
||
description: "Unexpected `<![CDATA[` in HTML. Remove it, use a comment, or encode special characters instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
characterReferenceOutsideUnicodeRange: {
|
||
reason: "Unexpected too big numeric character reference",
|
||
description: "Unexpectedly high character reference. Expected character references to be at most hexadecimal 10ffff (or decimal 1114111)"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
closingOfElementWithOpenChildElements: {
|
||
reason: "Unexpected closing tag with open child elements",
|
||
description: "Unexpectedly closing tag. Expected other tags to be closed first",
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
controlCharacterInInputStream: {
|
||
reason: "Unexpected control character",
|
||
description: "Unexpected control character `%x`. Expected a non-control code point, 0x00, or ASCII whitespace"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
controlCharacterReference: {
|
||
reason: "Unexpected control character reference",
|
||
description: "Unexpectedly control character in reference. Expected a non-control code point, 0x00, or ASCII whitespace"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
disallowedContentInNoscriptInHead: {
|
||
reason: "Disallowed content inside `<noscript>` in `<head>`",
|
||
description: "Unexpected text character `%c`. Only use text in `<noscript>`s in `<body>`",
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
duplicateAttribute: {
|
||
reason: "Unexpected duplicate attribute",
|
||
description: "Unexpectedly double attribute. Expected attributes to occur only once"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
endTagWithAttributes: {
|
||
reason: "Unexpected attribute on closing tag",
|
||
description: "Unexpected attribute. Expected `>` instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
endTagWithTrailingSolidus: {
|
||
reason: "Unexpected slash at end of closing tag",
|
||
description: "Unexpected `%c-1`. Expected `>` instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
endTagWithoutMatchingOpenElement: {
|
||
reason: "Unexpected unopened end tag",
|
||
description: "Unexpected end tag. Expected no end tag or another end tag",
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
eofBeforeTagName: {
|
||
reason: "Unexpected end of file",
|
||
description: "Unexpected end of file. Expected tag name instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
eofInCdata: {
|
||
reason: "Unexpected end of file in CDATA",
|
||
description: "Unexpected end of file. Expected `]]>` to close the CDATA"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
eofInComment: {
|
||
reason: "Unexpected end of file in comment",
|
||
description: "Unexpected end of file. Expected `-->` to close the comment"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
eofInDoctype: {
|
||
reason: "Unexpected end of file in doctype",
|
||
description: "Unexpected end of file. Expected a valid doctype (such as `<!doctype html>`)"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
eofInElementThatCanContainOnlyText: {
|
||
reason: "Unexpected end of file in element that can only contain text",
|
||
description: "Unexpected end of file. Expected text or a closing tag",
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
eofInScriptHtmlCommentLikeText: {
|
||
reason: "Unexpected end of file in comment inside script",
|
||
description: "Unexpected end of file. Expected `-->` to close the comment"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
eofInTag: {
|
||
reason: "Unexpected end of file in tag",
|
||
description: "Unexpected end of file. Expected `>` to close the tag"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
incorrectlyClosedComment: {
|
||
reason: "Incorrectly closed comment",
|
||
description: "Unexpected `%c-1`. Expected `-->` to close the comment"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
incorrectlyOpenedComment: {
|
||
reason: "Incorrectly opened comment",
|
||
description: "Unexpected `%c`. Expected `<!--` to open the comment"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
invalidCharacterSequenceAfterDoctypeName: {
|
||
reason: "Invalid sequence after doctype name",
|
||
description: "Unexpected sequence at `%c`. Expected `public` or `system`"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
invalidFirstCharacterOfTagName: {
|
||
reason: "Invalid first character in tag name",
|
||
description: "Unexpected `%c`. Expected an ASCII letter instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
misplacedDoctype: {
|
||
reason: "Misplaced doctype",
|
||
description: "Unexpected doctype. Expected doctype before head",
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
misplacedStartTagForHeadElement: {
|
||
reason: "Misplaced `<head>` start tag",
|
||
description: "Unexpected start tag `<head>`. Expected `<head>` directly after doctype",
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingAttributeValue: {
|
||
reason: "Missing attribute value",
|
||
description: "Unexpected `%c-1`. Expected an attribute value or no `%c-1` instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingDoctype: {
|
||
reason: "Missing doctype before other content",
|
||
description: "Expected a `<!doctype html>` before anything else",
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingDoctypeName: {
|
||
reason: "Missing doctype name",
|
||
description: "Unexpected doctype end at `%c`. Expected `html` instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingDoctypePublicIdentifier: {
|
||
reason: "Missing public identifier in doctype",
|
||
description: "Unexpected `%c`. Expected identifier for `public` instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingDoctypeSystemIdentifier: {
|
||
reason: "Missing system identifier in doctype",
|
||
description: 'Unexpected `%c`. Expected identifier for `system` instead (suggested: `"about:legacy-compat"`)'
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingEndTagName: {
|
||
reason: "Missing name in end tag",
|
||
description: "Unexpected `%c`. Expected an ASCII letter instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingQuoteBeforeDoctypePublicIdentifier: {
|
||
reason: "Missing quote before public identifier in doctype",
|
||
description: "Unexpected `%c`. Expected `\"` or `'` instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingQuoteBeforeDoctypeSystemIdentifier: {
|
||
reason: "Missing quote before system identifier in doctype",
|
||
description: "Unexpected `%c`. Expected `\"` or `'` instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingSemicolonAfterCharacterReference: {
|
||
reason: "Missing semicolon after character reference",
|
||
description: "Unexpected `%c`. Expected `;` instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingWhitespaceAfterDoctypePublicKeyword: {
|
||
reason: "Missing whitespace after public identifier in doctype",
|
||
description: "Unexpected `%c`. Expected ASCII whitespace instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingWhitespaceAfterDoctypeSystemKeyword: {
|
||
reason: "Missing whitespace after system identifier in doctype",
|
||
description: "Unexpected `%c`. Expected ASCII whitespace instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingWhitespaceBeforeDoctypeName: {
|
||
reason: "Missing whitespace before doctype name",
|
||
description: "Unexpected `%c`. Expected ASCII whitespace instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingWhitespaceBetweenAttributes: {
|
||
reason: "Missing whitespace between attributes",
|
||
description: "Unexpected `%c`. Expected ASCII whitespace instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers: {
|
||
reason: "Missing whitespace between public and system identifiers in doctype",
|
||
description: "Unexpected `%c`. Expected ASCII whitespace instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
nestedComment: {
|
||
reason: "Unexpected nested comment",
|
||
description: "Unexpected `<!--`. Expected `-->`"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
nestedNoscriptInHead: {
|
||
reason: "Unexpected nested `<noscript>` in `<head>`",
|
||
description: "Unexpected `<noscript>`. Expected a closing tag or a meta element",
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
nonConformingDoctype: {
|
||
reason: "Unexpected non-conforming doctype declaration",
|
||
description: 'Expected `<!doctype html>` or `<!doctype html system "about:legacy-compat">`',
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
nonVoidHtmlElementStartTagWithTrailingSolidus: {
|
||
reason: "Unexpected trailing slash on start tag of non-void element",
|
||
description: "Unexpected `/`. Expected `>` instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
noncharacterCharacterReference: {
|
||
reason: "Unexpected noncharacter code point referenced by character reference",
|
||
description: "Unexpected code point. Do not use noncharacters in HTML"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
noncharacterInInputStream: {
|
||
reason: "Unexpected noncharacter character",
|
||
description: "Unexpected code point `%x`. Do not use noncharacters in HTML"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
nullCharacterReference: {
|
||
reason: "Unexpected NULL character referenced by character reference",
|
||
description: "Unexpected code point. Do not use NULL characters in HTML"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
openElementsLeftAfterEof: {
|
||
reason: "Unexpected end of file",
|
||
description: "Unexpected end of file. Expected closing tag instead",
|
||
url: false
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
surrogateCharacterReference: {
|
||
reason: "Unexpected surrogate character referenced by character reference",
|
||
description: "Unexpected code point. Do not use lone surrogate characters in HTML"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
surrogateInInputStream: {
|
||
reason: "Unexpected surrogate character",
|
||
description: "Unexpected code point `%x`. Do not use lone surrogate characters in HTML"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
unexpectedCharacterAfterDoctypeSystemIdentifier: {
|
||
reason: "Invalid character after system identifier in doctype",
|
||
description: "Unexpected character at `%c`. Expected `>`"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
unexpectedCharacterInAttributeName: {
|
||
reason: "Unexpected character in attribute name",
|
||
description: "Unexpected `%c`. Expected whitespace, `/`, `>`, `=`, or probably an ASCII letter"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
unexpectedCharacterInUnquotedAttributeValue: {
|
||
reason: "Unexpected character in unquoted attribute value",
|
||
description: "Unexpected `%c`. Quote the attribute value to include it"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
unexpectedEqualsSignBeforeAttributeName: {
|
||
reason: "Unexpected equals sign before attribute name",
|
||
description: "Unexpected `%c`. Add an attribute name before it"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
unexpectedNullCharacter: {
|
||
reason: "Unexpected NULL character",
|
||
description: "Unexpected code point `%x`. Do not use NULL characters in HTML"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
unexpectedQuestionMarkInsteadOfTagName: {
|
||
reason: "Unexpected question mark instead of tag name",
|
||
description: "Unexpected `%c`. Expected an ASCII letter instead"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
unexpectedSolidusInTag: {
|
||
reason: "Unexpected slash in tag",
|
||
description: "Unexpected `%c-1`. Expected it followed by `>` or in a quoted attribute value"
|
||
},
|
||
/** @type {ErrorInfo} */
|
||
unknownNamedCharacterReference: {
|
||
reason: "Unexpected unknown named character reference",
|
||
description: "Unexpected character reference. Expected known named character references"
|
||
}
|
||
};
|
||
|
||
// node_modules/hast-util-from-html/lib/index.js
|
||
var base = "https://html.spec.whatwg.org/multipage/parsing.html#parse-error-";
|
||
var dashToCamelRe = /-[a-z]/g;
|
||
var formatCRe = /%c(?:([-+])(\d+))?/g;
|
||
var formatXRe = /%x/g;
|
||
var fatalities = { 2: true, 1: false, 0: null };
|
||
var emptyOptions = {};
|
||
function fromHtml(value, options) {
|
||
const settings = options || emptyOptions;
|
||
const onerror = settings.onerror;
|
||
const file = value instanceof VFile ? value : new VFile(value);
|
||
const fn = settings.fragment ? parseFragment : parse4;
|
||
const doc = String(file);
|
||
const p5doc = fn(doc, {
|
||
sourceCodeLocationInfo: true,
|
||
// Note `parse5` types currently do not allow `undefined`.
|
||
onParseError: settings.onerror ? internalOnerror : null,
|
||
scriptingEnabled: false
|
||
});
|
||
return (
|
||
/** @type {Root} */
|
||
fromParse5(p5doc, {
|
||
file,
|
||
space: settings.space,
|
||
verbose: settings.verbose
|
||
})
|
||
);
|
||
function internalOnerror(error) {
|
||
const code = error.code;
|
||
const name = camelcase2(code);
|
||
const setting = settings[name];
|
||
const config = setting === null || setting === void 0 ? true : setting;
|
||
const level = typeof config === "number" ? config : config ? 1 : 0;
|
||
if (level) {
|
||
const info = errors[name];
|
||
ok2(info, "expected known error from `parse5`");
|
||
const message = new VFileMessage(format(info.reason), {
|
||
place: {
|
||
start: {
|
||
line: error.startLine,
|
||
column: error.startCol,
|
||
offset: error.startOffset
|
||
},
|
||
end: {
|
||
line: error.endLine,
|
||
column: error.endCol,
|
||
offset: error.endOffset
|
||
}
|
||
},
|
||
ruleId: code,
|
||
source: "hast-util-from-html"
|
||
});
|
||
if (file.path) {
|
||
message.file = file.path;
|
||
message.name = file.path + ":" + message.name;
|
||
}
|
||
message.fatal = fatalities[level];
|
||
message.note = format(info.description);
|
||
message.url = info.url === false ? void 0 : base + code;
|
||
ok2(onerror, "`internalOnerror` is not passed if `onerror` is not set");
|
||
onerror(message);
|
||
}
|
||
function format(value2) {
|
||
return value2.replace(formatCRe, formatC).replace(formatXRe, formatX);
|
||
function formatC(_2, $1, $22) {
|
||
const offset = ($22 ? Number.parseInt($22, 10) : 0) * ($1 === "-" ? -1 : 1);
|
||
const char = doc.charAt(error.startOffset + offset);
|
||
return visualizeCharacter(char);
|
||
}
|
||
function formatX() {
|
||
return visualizeCharacterCode(doc.charCodeAt(error.startOffset));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function camelcase2(value) {
|
||
return (
|
||
/** @type {ErrorCode} */
|
||
value.replace(dashToCamelRe, dashToCamel)
|
||
);
|
||
}
|
||
function dashToCamel($0) {
|
||
return $0.charAt(1).toUpperCase();
|
||
}
|
||
function visualizeCharacter(char) {
|
||
return char === "`" ? "` ` `" : char;
|
||
}
|
||
function visualizeCharacterCode(charCode) {
|
||
return "0x" + charCode.toString(16).toUpperCase();
|
||
}
|
||
|
||
// node_modules/html-void-elements/index.js
|
||
var htmlVoidElements = [
|
||
"area",
|
||
"base",
|
||
"basefont",
|
||
"bgsound",
|
||
"br",
|
||
"col",
|
||
"command",
|
||
"embed",
|
||
"frame",
|
||
"hr",
|
||
"image",
|
||
"img",
|
||
"input",
|
||
"keygen",
|
||
"link",
|
||
"meta",
|
||
"param",
|
||
"source",
|
||
"track",
|
||
"wbr"
|
||
];
|
||
|
||
// node_modules/zwitch/index.js
|
||
var own4 = {}.hasOwnProperty;
|
||
function zwitch(key2, options) {
|
||
const settings = options || {};
|
||
function one3(value, ...parameters) {
|
||
let fn = one3.invalid;
|
||
const handlers = one3.handlers;
|
||
if (value && own4.call(value, key2)) {
|
||
const id = String(value[key2]);
|
||
fn = own4.call(handlers, id) ? handlers[id] : one3.unknown;
|
||
}
|
||
if (fn) {
|
||
return fn.call(this, value, ...parameters);
|
||
}
|
||
}
|
||
one3.handlers = settings.handlers || {};
|
||
one3.invalid = settings.invalid;
|
||
one3.unknown = settings.unknown;
|
||
return one3;
|
||
}
|
||
|
||
// node_modules/stringify-entities/lib/core.js
|
||
function core(value, options) {
|
||
value = value.replace(
|
||
options.subset ? charactersToExpression(options.subset) : /["&'<>`]/g,
|
||
basic
|
||
);
|
||
if (options.subset || options.escapeOnly) {
|
||
return value;
|
||
}
|
||
return value.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, surrogate).replace(
|
||
// eslint-disable-next-line no-control-regex, unicorn/no-hex-escape
|
||
/[\x01-\t\v\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,
|
||
basic
|
||
);
|
||
function surrogate(pair, index2, all3) {
|
||
return options.format(
|
||
(pair.charCodeAt(0) - 55296) * 1024 + pair.charCodeAt(1) - 56320 + 65536,
|
||
all3.charCodeAt(index2 + 2),
|
||
options
|
||
);
|
||
}
|
||
function basic(character, index2, all3) {
|
||
return options.format(
|
||
character.charCodeAt(0),
|
||
all3.charCodeAt(index2 + 1),
|
||
options
|
||
);
|
||
}
|
||
}
|
||
function charactersToExpression(subset) {
|
||
const groups = [];
|
||
let index2 = -1;
|
||
while (++index2 < subset.length) {
|
||
groups.push(subset[index2].replace(/[|\\{}()[\]^$+*?.]/g, "\\$&"));
|
||
}
|
||
return new RegExp("(?:" + groups.join("|") + ")", "g");
|
||
}
|
||
|
||
// node_modules/stringify-entities/lib/util/to-hexadecimal.js
|
||
function toHexadecimal(code, next, omit) {
|
||
const value = "&#x" + code.toString(16).toUpperCase();
|
||
return omit && next && !/[\dA-Fa-f]/.test(String.fromCharCode(next)) ? value : value + ";";
|
||
}
|
||
|
||
// node_modules/stringify-entities/lib/util/to-decimal.js
|
||
function toDecimal(code, next, omit) {
|
||
const value = "&#" + String(code);
|
||
return omit && next && !/\d/.test(String.fromCharCode(next)) ? value : value + ";";
|
||
}
|
||
|
||
// node_modules/character-entities-legacy/index.js
|
||
var characterEntitiesLegacy = [
|
||
"AElig",
|
||
"AMP",
|
||
"Aacute",
|
||
"Acirc",
|
||
"Agrave",
|
||
"Aring",
|
||
"Atilde",
|
||
"Auml",
|
||
"COPY",
|
||
"Ccedil",
|
||
"ETH",
|
||
"Eacute",
|
||
"Ecirc",
|
||
"Egrave",
|
||
"Euml",
|
||
"GT",
|
||
"Iacute",
|
||
"Icirc",
|
||
"Igrave",
|
||
"Iuml",
|
||
"LT",
|
||
"Ntilde",
|
||
"Oacute",
|
||
"Ocirc",
|
||
"Ograve",
|
||
"Oslash",
|
||
"Otilde",
|
||
"Ouml",
|
||
"QUOT",
|
||
"REG",
|
||
"THORN",
|
||
"Uacute",
|
||
"Ucirc",
|
||
"Ugrave",
|
||
"Uuml",
|
||
"Yacute",
|
||
"aacute",
|
||
"acirc",
|
||
"acute",
|
||
"aelig",
|
||
"agrave",
|
||
"amp",
|
||
"aring",
|
||
"atilde",
|
||
"auml",
|
||
"brvbar",
|
||
"ccedil",
|
||
"cedil",
|
||
"cent",
|
||
"copy",
|
||
"curren",
|
||
"deg",
|
||
"divide",
|
||
"eacute",
|
||
"ecirc",
|
||
"egrave",
|
||
"eth",
|
||
"euml",
|
||
"frac12",
|
||
"frac14",
|
||
"frac34",
|
||
"gt",
|
||
"iacute",
|
||
"icirc",
|
||
"iexcl",
|
||
"igrave",
|
||
"iquest",
|
||
"iuml",
|
||
"laquo",
|
||
"lt",
|
||
"macr",
|
||
"micro",
|
||
"middot",
|
||
"nbsp",
|
||
"not",
|
||
"ntilde",
|
||
"oacute",
|
||
"ocirc",
|
||
"ograve",
|
||
"ordf",
|
||
"ordm",
|
||
"oslash",
|
||
"otilde",
|
||
"ouml",
|
||
"para",
|
||
"plusmn",
|
||
"pound",
|
||
"quot",
|
||
"raquo",
|
||
"reg",
|
||
"sect",
|
||
"shy",
|
||
"sup1",
|
||
"sup2",
|
||
"sup3",
|
||
"szlig",
|
||
"thorn",
|
||
"times",
|
||
"uacute",
|
||
"ucirc",
|
||
"ugrave",
|
||
"uml",
|
||
"uuml",
|
||
"yacute",
|
||
"yen",
|
||
"yuml"
|
||
];
|
||
|
||
// node_modules/character-entities-html4/index.js
|
||
var characterEntitiesHtml4 = {
|
||
nbsp: "\xA0",
|
||
iexcl: "\xA1",
|
||
cent: "\xA2",
|
||
pound: "\xA3",
|
||
curren: "\xA4",
|
||
yen: "\xA5",
|
||
brvbar: "\xA6",
|
||
sect: "\xA7",
|
||
uml: "\xA8",
|
||
copy: "\xA9",
|
||
ordf: "\xAA",
|
||
laquo: "\xAB",
|
||
not: "\xAC",
|
||
shy: "\xAD",
|
||
reg: "\xAE",
|
||
macr: "\xAF",
|
||
deg: "\xB0",
|
||
plusmn: "\xB1",
|
||
sup2: "\xB2",
|
||
sup3: "\xB3",
|
||
acute: "\xB4",
|
||
micro: "\xB5",
|
||
para: "\xB6",
|
||
middot: "\xB7",
|
||
cedil: "\xB8",
|
||
sup1: "\xB9",
|
||
ordm: "\xBA",
|
||
raquo: "\xBB",
|
||
frac14: "\xBC",
|
||
frac12: "\xBD",
|
||
frac34: "\xBE",
|
||
iquest: "\xBF",
|
||
Agrave: "\xC0",
|
||
Aacute: "\xC1",
|
||
Acirc: "\xC2",
|
||
Atilde: "\xC3",
|
||
Auml: "\xC4",
|
||
Aring: "\xC5",
|
||
AElig: "\xC6",
|
||
Ccedil: "\xC7",
|
||
Egrave: "\xC8",
|
||
Eacute: "\xC9",
|
||
Ecirc: "\xCA",
|
||
Euml: "\xCB",
|
||
Igrave: "\xCC",
|
||
Iacute: "\xCD",
|
||
Icirc: "\xCE",
|
||
Iuml: "\xCF",
|
||
ETH: "\xD0",
|
||
Ntilde: "\xD1",
|
||
Ograve: "\xD2",
|
||
Oacute: "\xD3",
|
||
Ocirc: "\xD4",
|
||
Otilde: "\xD5",
|
||
Ouml: "\xD6",
|
||
times: "\xD7",
|
||
Oslash: "\xD8",
|
||
Ugrave: "\xD9",
|
||
Uacute: "\xDA",
|
||
Ucirc: "\xDB",
|
||
Uuml: "\xDC",
|
||
Yacute: "\xDD",
|
||
THORN: "\xDE",
|
||
szlig: "\xDF",
|
||
agrave: "\xE0",
|
||
aacute: "\xE1",
|
||
acirc: "\xE2",
|
||
atilde: "\xE3",
|
||
auml: "\xE4",
|
||
aring: "\xE5",
|
||
aelig: "\xE6",
|
||
ccedil: "\xE7",
|
||
egrave: "\xE8",
|
||
eacute: "\xE9",
|
||
ecirc: "\xEA",
|
||
euml: "\xEB",
|
||
igrave: "\xEC",
|
||
iacute: "\xED",
|
||
icirc: "\xEE",
|
||
iuml: "\xEF",
|
||
eth: "\xF0",
|
||
ntilde: "\xF1",
|
||
ograve: "\xF2",
|
||
oacute: "\xF3",
|
||
ocirc: "\xF4",
|
||
otilde: "\xF5",
|
||
ouml: "\xF6",
|
||
divide: "\xF7",
|
||
oslash: "\xF8",
|
||
ugrave: "\xF9",
|
||
uacute: "\xFA",
|
||
ucirc: "\xFB",
|
||
uuml: "\xFC",
|
||
yacute: "\xFD",
|
||
thorn: "\xFE",
|
||
yuml: "\xFF",
|
||
fnof: "\u0192",
|
||
Alpha: "\u0391",
|
||
Beta: "\u0392",
|
||
Gamma: "\u0393",
|
||
Delta: "\u0394",
|
||
Epsilon: "\u0395",
|
||
Zeta: "\u0396",
|
||
Eta: "\u0397",
|
||
Theta: "\u0398",
|
||
Iota: "\u0399",
|
||
Kappa: "\u039A",
|
||
Lambda: "\u039B",
|
||
Mu: "\u039C",
|
||
Nu: "\u039D",
|
||
Xi: "\u039E",
|
||
Omicron: "\u039F",
|
||
Pi: "\u03A0",
|
||
Rho: "\u03A1",
|
||
Sigma: "\u03A3",
|
||
Tau: "\u03A4",
|
||
Upsilon: "\u03A5",
|
||
Phi: "\u03A6",
|
||
Chi: "\u03A7",
|
||
Psi: "\u03A8",
|
||
Omega: "\u03A9",
|
||
alpha: "\u03B1",
|
||
beta: "\u03B2",
|
||
gamma: "\u03B3",
|
||
delta: "\u03B4",
|
||
epsilon: "\u03B5",
|
||
zeta: "\u03B6",
|
||
eta: "\u03B7",
|
||
theta: "\u03B8",
|
||
iota: "\u03B9",
|
||
kappa: "\u03BA",
|
||
lambda: "\u03BB",
|
||
mu: "\u03BC",
|
||
nu: "\u03BD",
|
||
xi: "\u03BE",
|
||
omicron: "\u03BF",
|
||
pi: "\u03C0",
|
||
rho: "\u03C1",
|
||
sigmaf: "\u03C2",
|
||
sigma: "\u03C3",
|
||
tau: "\u03C4",
|
||
upsilon: "\u03C5",
|
||
phi: "\u03C6",
|
||
chi: "\u03C7",
|
||
psi: "\u03C8",
|
||
omega: "\u03C9",
|
||
thetasym: "\u03D1",
|
||
upsih: "\u03D2",
|
||
piv: "\u03D6",
|
||
bull: "\u2022",
|
||
hellip: "\u2026",
|
||
prime: "\u2032",
|
||
Prime: "\u2033",
|
||
oline: "\u203E",
|
||
frasl: "\u2044",
|
||
weierp: "\u2118",
|
||
image: "\u2111",
|
||
real: "\u211C",
|
||
trade: "\u2122",
|
||
alefsym: "\u2135",
|
||
larr: "\u2190",
|
||
uarr: "\u2191",
|
||
rarr: "\u2192",
|
||
darr: "\u2193",
|
||
harr: "\u2194",
|
||
crarr: "\u21B5",
|
||
lArr: "\u21D0",
|
||
uArr: "\u21D1",
|
||
rArr: "\u21D2",
|
||
dArr: "\u21D3",
|
||
hArr: "\u21D4",
|
||
forall: "\u2200",
|
||
part: "\u2202",
|
||
exist: "\u2203",
|
||
empty: "\u2205",
|
||
nabla: "\u2207",
|
||
isin: "\u2208",
|
||
notin: "\u2209",
|
||
ni: "\u220B",
|
||
prod: "\u220F",
|
||
sum: "\u2211",
|
||
minus: "\u2212",
|
||
lowast: "\u2217",
|
||
radic: "\u221A",
|
||
prop: "\u221D",
|
||
infin: "\u221E",
|
||
ang: "\u2220",
|
||
and: "\u2227",
|
||
or: "\u2228",
|
||
cap: "\u2229",
|
||
cup: "\u222A",
|
||
int: "\u222B",
|
||
there4: "\u2234",
|
||
sim: "\u223C",
|
||
cong: "\u2245",
|
||
asymp: "\u2248",
|
||
ne: "\u2260",
|
||
equiv: "\u2261",
|
||
le: "\u2264",
|
||
ge: "\u2265",
|
||
sub: "\u2282",
|
||
sup: "\u2283",
|
||
nsub: "\u2284",
|
||
sube: "\u2286",
|
||
supe: "\u2287",
|
||
oplus: "\u2295",
|
||
otimes: "\u2297",
|
||
perp: "\u22A5",
|
||
sdot: "\u22C5",
|
||
lceil: "\u2308",
|
||
rceil: "\u2309",
|
||
lfloor: "\u230A",
|
||
rfloor: "\u230B",
|
||
lang: "\u2329",
|
||
rang: "\u232A",
|
||
loz: "\u25CA",
|
||
spades: "\u2660",
|
||
clubs: "\u2663",
|
||
hearts: "\u2665",
|
||
diams: "\u2666",
|
||
quot: '"',
|
||
amp: "&",
|
||
lt: "<",
|
||
gt: ">",
|
||
OElig: "\u0152",
|
||
oelig: "\u0153",
|
||
Scaron: "\u0160",
|
||
scaron: "\u0161",
|
||
Yuml: "\u0178",
|
||
circ: "\u02C6",
|
||
tilde: "\u02DC",
|
||
ensp: "\u2002",
|
||
emsp: "\u2003",
|
||
thinsp: "\u2009",
|
||
zwnj: "\u200C",
|
||
zwj: "\u200D",
|
||
lrm: "\u200E",
|
||
rlm: "\u200F",
|
||
ndash: "\u2013",
|
||
mdash: "\u2014",
|
||
lsquo: "\u2018",
|
||
rsquo: "\u2019",
|
||
sbquo: "\u201A",
|
||
ldquo: "\u201C",
|
||
rdquo: "\u201D",
|
||
bdquo: "\u201E",
|
||
dagger: "\u2020",
|
||
Dagger: "\u2021",
|
||
permil: "\u2030",
|
||
lsaquo: "\u2039",
|
||
rsaquo: "\u203A",
|
||
euro: "\u20AC"
|
||
};
|
||
|
||
// node_modules/stringify-entities/lib/constant/dangerous.js
|
||
var dangerous = [
|
||
"cent",
|
||
"copy",
|
||
"divide",
|
||
"gt",
|
||
"lt",
|
||
"not",
|
||
"para",
|
||
"times"
|
||
];
|
||
|
||
// node_modules/stringify-entities/lib/util/to-named.js
|
||
var own5 = {}.hasOwnProperty;
|
||
var characters = {};
|
||
var key;
|
||
for (key in characterEntitiesHtml4) {
|
||
if (own5.call(characterEntitiesHtml4, key)) {
|
||
characters[characterEntitiesHtml4[key]] = key;
|
||
}
|
||
}
|
||
function toNamed(code, next, omit, attribute) {
|
||
const character = String.fromCharCode(code);
|
||
if (own5.call(characters, character)) {
|
||
const name = characters[character];
|
||
const value = "&" + name;
|
||
if (omit && characterEntitiesLegacy.includes(name) && !dangerous.includes(name) && (!attribute || next && next !== 61 && /[^\da-z]/i.test(String.fromCharCode(next)))) {
|
||
return value;
|
||
}
|
||
return value + ";";
|
||
}
|
||
return "";
|
||
}
|
||
|
||
// node_modules/stringify-entities/lib/util/format-smart.js
|
||
function formatSmart(code, next, options) {
|
||
let numeric = toHexadecimal(code, next, options.omitOptionalSemicolons);
|
||
let named;
|
||
if (options.useNamedReferences || options.useShortestReferences) {
|
||
named = toNamed(
|
||
code,
|
||
next,
|
||
options.omitOptionalSemicolons,
|
||
options.attribute
|
||
);
|
||
}
|
||
if ((options.useShortestReferences || !named) && options.useShortestReferences) {
|
||
const decimal = toDecimal(code, next, options.omitOptionalSemicolons);
|
||
if (decimal.length < numeric.length) {
|
||
numeric = decimal;
|
||
}
|
||
}
|
||
return named && (!options.useShortestReferences || named.length < numeric.length) ? named : numeric;
|
||
}
|
||
|
||
// node_modules/stringify-entities/lib/index.js
|
||
function stringifyEntities(value, options) {
|
||
return core(value, Object.assign({ format: formatSmart }, options));
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/handle/comment.js
|
||
function comment(node, _1, _2, state) {
|
||
return state.settings.bogusComments ? "<?" + stringifyEntities(
|
||
node.value,
|
||
Object.assign({}, state.settings.characterReferences, { subset: [">"] })
|
||
) + ">" : "<!--" + node.value.replace(/^>|^->|<!--|-->|--!>|<!-$/g, encode) + "-->";
|
||
function encode($0) {
|
||
return stringifyEntities(
|
||
$0,
|
||
Object.assign({}, state.settings.characterReferences, {
|
||
subset: ["<", ">"]
|
||
})
|
||
);
|
||
}
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/handle/doctype.js
|
||
function doctype(_1, _2, _3, state) {
|
||
return "<!" + (state.settings.upperDoctype ? "DOCTYPE" : "doctype") + (state.settings.tightDoctype ? "" : " ") + "html>";
|
||
}
|
||
|
||
// node_modules/ccount/index.js
|
||
function ccount(value, character) {
|
||
const source = String(value);
|
||
if (typeof character !== "string") {
|
||
throw new TypeError("Expected character");
|
||
}
|
||
let count = 0;
|
||
let index2 = source.indexOf(character);
|
||
while (index2 !== -1) {
|
||
count++;
|
||
index2 = source.indexOf(character, index2 + character.length);
|
||
}
|
||
return count;
|
||
}
|
||
|
||
// node_modules/hast-util-whitespace/lib/index.js
|
||
var re = /[ \t\n\f\r]/g;
|
||
function whitespace(thing) {
|
||
return typeof thing === "object" ? thing.type === "text" ? empty2(thing.value) : false : empty2(thing);
|
||
}
|
||
function empty2(value) {
|
||
return value.replace(re, "") === "";
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/omission/util/siblings.js
|
||
var siblingAfter = siblings(1);
|
||
var siblingBefore = siblings(-1);
|
||
var emptyChildren = [];
|
||
function siblings(increment2) {
|
||
return sibling;
|
||
function sibling(parent, index2, includeWhitespace) {
|
||
const siblings2 = parent ? parent.children : emptyChildren;
|
||
let offset = (index2 || 0) + increment2;
|
||
let next = siblings2[offset];
|
||
if (!includeWhitespace) {
|
||
while (next && whitespace(next)) {
|
||
offset += increment2;
|
||
next = siblings2[offset];
|
||
}
|
||
}
|
||
return next;
|
||
}
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/omission/omission.js
|
||
var own6 = {}.hasOwnProperty;
|
||
function omission(handlers) {
|
||
return omit;
|
||
function omit(node, index2, parent) {
|
||
return own6.call(handlers, node.tagName) && handlers[node.tagName](node, index2, parent);
|
||
}
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/omission/closing.js
|
||
var closing = omission({
|
||
body,
|
||
caption: headOrColgroupOrCaption,
|
||
colgroup: headOrColgroupOrCaption,
|
||
dd,
|
||
dt: dt2,
|
||
head: headOrColgroupOrCaption,
|
||
html: html3,
|
||
li,
|
||
optgroup,
|
||
option,
|
||
p: p2,
|
||
rp: rubyElement,
|
||
rt: rubyElement,
|
||
tbody,
|
||
td: cells,
|
||
tfoot,
|
||
th: cells,
|
||
thead,
|
||
tr
|
||
});
|
||
function headOrColgroupOrCaption(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2, true);
|
||
return !next || next.type !== "comment" && !(next.type === "text" && whitespace(next.value.charAt(0)));
|
||
}
|
||
function html3(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return !next || next.type !== "comment";
|
||
}
|
||
function body(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return !next || next.type !== "comment";
|
||
}
|
||
function p2(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return next ? next.type === "element" && (next.tagName === "address" || next.tagName === "article" || next.tagName === "aside" || next.tagName === "blockquote" || next.tagName === "details" || next.tagName === "div" || next.tagName === "dl" || next.tagName === "fieldset" || next.tagName === "figcaption" || next.tagName === "figure" || next.tagName === "footer" || next.tagName === "form" || next.tagName === "h1" || next.tagName === "h2" || next.tagName === "h3" || next.tagName === "h4" || next.tagName === "h5" || next.tagName === "h6" || next.tagName === "header" || next.tagName === "hgroup" || next.tagName === "hr" || next.tagName === "main" || next.tagName === "menu" || next.tagName === "nav" || next.tagName === "ol" || next.tagName === "p" || next.tagName === "pre" || next.tagName === "section" || next.tagName === "table" || next.tagName === "ul") : !parent || // Confusing parent.
|
||
!(parent.type === "element" && (parent.tagName === "a" || parent.tagName === "audio" || parent.tagName === "del" || parent.tagName === "ins" || parent.tagName === "map" || parent.tagName === "noscript" || parent.tagName === "video"));
|
||
}
|
||
function li(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return !next || next.type === "element" && next.tagName === "li";
|
||
}
|
||
function dt2(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return Boolean(
|
||
next && next.type === "element" && (next.tagName === "dt" || next.tagName === "dd")
|
||
);
|
||
}
|
||
function dd(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return !next || next.type === "element" && (next.tagName === "dt" || next.tagName === "dd");
|
||
}
|
||
function rubyElement(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return !next || next.type === "element" && (next.tagName === "rp" || next.tagName === "rt");
|
||
}
|
||
function optgroup(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return !next || next.type === "element" && next.tagName === "optgroup";
|
||
}
|
||
function option(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return !next || next.type === "element" && (next.tagName === "option" || next.tagName === "optgroup");
|
||
}
|
||
function thead(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return Boolean(
|
||
next && next.type === "element" && (next.tagName === "tbody" || next.tagName === "tfoot")
|
||
);
|
||
}
|
||
function tbody(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return !next || next.type === "element" && (next.tagName === "tbody" || next.tagName === "tfoot");
|
||
}
|
||
function tfoot(_2, index2, parent) {
|
||
return !siblingAfter(parent, index2);
|
||
}
|
||
function tr(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return !next || next.type === "element" && next.tagName === "tr";
|
||
}
|
||
function cells(_2, index2, parent) {
|
||
const next = siblingAfter(parent, index2);
|
||
return !next || next.type === "element" && (next.tagName === "td" || next.tagName === "th");
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/omission/opening.js
|
||
var opening = omission({
|
||
body: body2,
|
||
colgroup,
|
||
head,
|
||
html: html4,
|
||
tbody: tbody2
|
||
});
|
||
function html4(node) {
|
||
const head2 = siblingAfter(node, -1);
|
||
return !head2 || head2.type !== "comment";
|
||
}
|
||
function head(node) {
|
||
const children = node.children;
|
||
const seen = [];
|
||
let index2 = -1;
|
||
while (++index2 < children.length) {
|
||
const child = children[index2];
|
||
if (child.type === "element" && (child.tagName === "title" || child.tagName === "base")) {
|
||
if (seen.includes(child.tagName))
|
||
return false;
|
||
seen.push(child.tagName);
|
||
}
|
||
}
|
||
return children.length > 0;
|
||
}
|
||
function body2(node) {
|
||
const head2 = siblingAfter(node, -1, true);
|
||
return !head2 || head2.type !== "comment" && !(head2.type === "text" && whitespace(head2.value.charAt(0))) && !(head2.type === "element" && (head2.tagName === "meta" || head2.tagName === "link" || head2.tagName === "script" || head2.tagName === "style" || head2.tagName === "template"));
|
||
}
|
||
function colgroup(node, index2, parent) {
|
||
const previous = siblingBefore(parent, index2);
|
||
const head2 = siblingAfter(node, -1, true);
|
||
if (parent && previous && previous.type === "element" && previous.tagName === "colgroup" && closing(previous, parent.children.indexOf(previous), parent)) {
|
||
return false;
|
||
}
|
||
return Boolean(head2 && head2.type === "element" && head2.tagName === "col");
|
||
}
|
||
function tbody2(node, index2, parent) {
|
||
const previous = siblingBefore(parent, index2);
|
||
const head2 = siblingAfter(node, -1);
|
||
if (parent && previous && previous.type === "element" && (previous.tagName === "thead" || previous.tagName === "tbody") && closing(previous, parent.children.indexOf(previous), parent)) {
|
||
return false;
|
||
}
|
||
return Boolean(head2 && head2.type === "element" && head2.tagName === "tr");
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/handle/element.js
|
||
var constants = {
|
||
// See: <https://html.spec.whatwg.org/#attribute-name-state>.
|
||
name: [
|
||
[" \n\f\r &/=>".split(""), " \n\f\r \"&'/=>`".split("")],
|
||
[`\0
|
||
\f\r "&'/<=>`.split(""), "\0 \n\f\r \"&'/<=>`".split("")]
|
||
],
|
||
// See: <https://html.spec.whatwg.org/#attribute-value-(unquoted)-state>.
|
||
unquoted: [
|
||
[" \n\f\r &>".split(""), "\0 \n\f\r \"&'<=>`".split("")],
|
||
["\0 \n\f\r \"&'<=>`".split(""), "\0 \n\f\r \"&'<=>`".split("")]
|
||
],
|
||
// See: <https://html.spec.whatwg.org/#attribute-value-(single-quoted)-state>.
|
||
single: [
|
||
["&'".split(""), "\"&'`".split("")],
|
||
["\0&'".split(""), "\0\"&'`".split("")]
|
||
],
|
||
// See: <https://html.spec.whatwg.org/#attribute-value-(double-quoted)-state>.
|
||
double: [
|
||
['"&'.split(""), "\"&'`".split("")],
|
||
['\0"&'.split(""), "\0\"&'`".split("")]
|
||
]
|
||
};
|
||
function element2(node, index2, parent, state) {
|
||
const schema = state.schema;
|
||
const omit = schema.space === "svg" ? false : state.settings.omitOptionalTags;
|
||
let selfClosing = schema.space === "svg" ? state.settings.closeEmptyElements : state.settings.voids.includes(node.tagName.toLowerCase());
|
||
const parts = [];
|
||
let last;
|
||
if (schema.space === "html" && node.tagName === "svg") {
|
||
state.schema = svg2;
|
||
}
|
||
const attrs = serializeAttributes(state, node.properties);
|
||
const content = state.all(
|
||
schema.space === "html" && node.tagName === "template" ? node.content : node
|
||
);
|
||
state.schema = schema;
|
||
if (content)
|
||
selfClosing = false;
|
||
if (attrs || !omit || !opening(node, index2, parent)) {
|
||
parts.push("<", node.tagName, attrs ? " " + attrs : "");
|
||
if (selfClosing && (schema.space === "svg" || state.settings.closeSelfClosing)) {
|
||
last = attrs.charAt(attrs.length - 1);
|
||
if (!state.settings.tightSelfClosing || last === "/" || last && last !== '"' && last !== "'") {
|
||
parts.push(" ");
|
||
}
|
||
parts.push("/");
|
||
}
|
||
parts.push(">");
|
||
}
|
||
parts.push(content);
|
||
if (!selfClosing && (!omit || !closing(node, index2, parent))) {
|
||
parts.push("</" + node.tagName + ">");
|
||
}
|
||
return parts.join("");
|
||
}
|
||
function serializeAttributes(state, props) {
|
||
const values = [];
|
||
let index2 = -1;
|
||
let key2;
|
||
if (props) {
|
||
for (key2 in props) {
|
||
if (props[key2] !== null && props[key2] !== void 0) {
|
||
const value = serializeAttribute(state, key2, props[key2]);
|
||
if (value)
|
||
values.push(value);
|
||
}
|
||
}
|
||
}
|
||
while (++index2 < values.length) {
|
||
const last = state.settings.tightAttributes ? values[index2].charAt(values[index2].length - 1) : void 0;
|
||
if (index2 !== values.length - 1 && last !== '"' && last !== "'") {
|
||
values[index2] += " ";
|
||
}
|
||
}
|
||
return values.join("");
|
||
}
|
||
function serializeAttribute(state, key2, value) {
|
||
const info = find(state.schema, key2);
|
||
const x2 = state.settings.allowParseErrors && state.schema.space === "html" ? 0 : 1;
|
||
const y2 = state.settings.allowDangerousCharacters ? 0 : 1;
|
||
let quote = state.quote;
|
||
let result;
|
||
if (info.overloadedBoolean && (value === info.attribute || value === "")) {
|
||
value = true;
|
||
} else if (info.boolean || info.overloadedBoolean && typeof value !== "string") {
|
||
value = Boolean(value);
|
||
}
|
||
if (value === null || value === void 0 || value === false || typeof value === "number" && Number.isNaN(value)) {
|
||
return "";
|
||
}
|
||
const name = stringifyEntities(
|
||
info.attribute,
|
||
Object.assign({}, state.settings.characterReferences, {
|
||
// Always encode without parse errors in non-HTML.
|
||
subset: constants.name[x2][y2]
|
||
})
|
||
);
|
||
if (value === true)
|
||
return name;
|
||
value = Array.isArray(value) ? (info.commaSeparated ? stringify : stringify2)(value, {
|
||
padLeft: !state.settings.tightCommaSeparatedLists
|
||
}) : String(value);
|
||
if (state.settings.collapseEmptyAttributes && !value)
|
||
return name;
|
||
if (state.settings.preferUnquoted) {
|
||
result = stringifyEntities(
|
||
value,
|
||
Object.assign({}, state.settings.characterReferences, {
|
||
attribute: true,
|
||
subset: constants.unquoted[x2][y2]
|
||
})
|
||
);
|
||
}
|
||
if (result !== value) {
|
||
if (state.settings.quoteSmart && ccount(value, quote) > ccount(value, state.alternative)) {
|
||
quote = state.alternative;
|
||
}
|
||
result = quote + stringifyEntities(
|
||
value,
|
||
Object.assign({}, state.settings.characterReferences, {
|
||
// Always encode without parse errors in non-HTML.
|
||
subset: (quote === "'" ? constants.single : constants.double)[x2][y2],
|
||
attribute: true
|
||
})
|
||
) + quote;
|
||
}
|
||
return name + (result ? "=" + result : result);
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/handle/text.js
|
||
function text(node, _2, parent, state) {
|
||
return parent && parent.type === "element" && (parent.tagName === "script" || parent.tagName === "style") ? node.value : stringifyEntities(
|
||
node.value,
|
||
Object.assign({}, state.settings.characterReferences, {
|
||
subset: ["<", "&"]
|
||
})
|
||
);
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/handle/raw.js
|
||
function raw(node, index2, parent, state) {
|
||
return state.settings.allowDangerousHtml ? node.value : text(node, index2, parent, state);
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/handle/root.js
|
||
function root(node, _1, _2, state) {
|
||
return state.all(node);
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/handle/index.js
|
||
var handle = zwitch("type", {
|
||
invalid,
|
||
unknown,
|
||
handlers: { comment, doctype, element: element2, raw, root, text }
|
||
});
|
||
function invalid(node) {
|
||
throw new Error("Expected node, not `" + node + "`");
|
||
}
|
||
function unknown(node_) {
|
||
const node = (
|
||
/** @type {Nodes} */
|
||
node_
|
||
);
|
||
throw new Error("Cannot compile unknown node `" + node.type + "`");
|
||
}
|
||
|
||
// node_modules/hast-util-to-html/lib/index.js
|
||
var emptyOptions2 = {};
|
||
var emptyCharacterReferences = {};
|
||
var emptyChildren2 = [];
|
||
function toHtml(tree, options) {
|
||
const options_ = options || emptyOptions2;
|
||
const quote = options_.quote || '"';
|
||
const alternative = quote === '"' ? "'" : '"';
|
||
if (quote !== '"' && quote !== "'") {
|
||
throw new Error("Invalid quote `" + quote + "`, expected `'` or `\"`");
|
||
}
|
||
const state = {
|
||
one: one2,
|
||
all: all2,
|
||
settings: {
|
||
omitOptionalTags: options_.omitOptionalTags || false,
|
||
allowParseErrors: options_.allowParseErrors || false,
|
||
allowDangerousCharacters: options_.allowDangerousCharacters || false,
|
||
quoteSmart: options_.quoteSmart || false,
|
||
preferUnquoted: options_.preferUnquoted || false,
|
||
tightAttributes: options_.tightAttributes || false,
|
||
upperDoctype: options_.upperDoctype || false,
|
||
tightDoctype: options_.tightDoctype || false,
|
||
bogusComments: options_.bogusComments || false,
|
||
tightCommaSeparatedLists: options_.tightCommaSeparatedLists || false,
|
||
tightSelfClosing: options_.tightSelfClosing || false,
|
||
collapseEmptyAttributes: options_.collapseEmptyAttributes || false,
|
||
allowDangerousHtml: options_.allowDangerousHtml || false,
|
||
voids: options_.voids || htmlVoidElements,
|
||
characterReferences: options_.characterReferences || emptyCharacterReferences,
|
||
closeSelfClosing: options_.closeSelfClosing || false,
|
||
closeEmptyElements: options_.closeEmptyElements || false
|
||
},
|
||
schema: options_.space === "svg" ? svg2 : html2,
|
||
quote,
|
||
alternative
|
||
};
|
||
return state.one(
|
||
Array.isArray(tree) ? { type: "root", children: tree } : tree,
|
||
void 0,
|
||
void 0
|
||
);
|
||
}
|
||
function one2(node, index2, parent) {
|
||
return handle(node, index2, parent, this);
|
||
}
|
||
function all2(parent) {
|
||
const results = [];
|
||
const children = parent && parent.children || emptyChildren2;
|
||
let index2 = -1;
|
||
while (++index2 < children.length) {
|
||
results[index2] = this.one(children[index2], index2, parent);
|
||
}
|
||
return results.join("");
|
||
}
|
||
|
||
// src/ReadingView.ts
|
||
async function readingViewCodeblockDecoratingPostProcessor(element3, { sourcePath, getSectionInfo, frontmatter }, plugin, editingEmbeds = false) {
|
||
var _a2;
|
||
const cache = plugin.app.metadataCache.getCache(sourcePath);
|
||
if (!sourcePath || !element3 || ((_a2 = frontmatter != null ? frontmatter : cache == null ? void 0 : cache.frontmatter) == null ? void 0 : _a2["code-styler-ignore"]) === true)
|
||
return;
|
||
editingEmbeds = editingEmbeds || Boolean(element3.matchParent(".cm-embed-block"));
|
||
const specific = !element3.querySelector(".view-content > *");
|
||
const printing = Boolean(element3.querySelector("div.print > *")) || Boolean(element3.querySelector("div.slides > *"));
|
||
if (printing && !plugin.settings.decoratePrint)
|
||
return;
|
||
const codeblockPreElements = await getCodeblockPreElements(element3, specific, editingEmbeds);
|
||
if (codeblockPreElements.length === 0 && !(editingEmbeds && specific))
|
||
return;
|
||
const codeblockSectionInfo = getSectionInfo(codeblockPreElements[0]);
|
||
if (codeblockSectionInfo && specific && !editingEmbeds)
|
||
await renderSpecificReadingSection(codeblockPreElements, sourcePath, codeblockSectionInfo, plugin);
|
||
else if (specific && sourcePath.startsWith(SETTINGS_SOURCEPATH_PREFIX))
|
||
await renderSettings(codeblockPreElements, sourcePath, plugin);
|
||
else if (specific && !printing)
|
||
await retriggerProcessor(element3, { sourcePath, getSectionInfo, frontmatter }, plugin, editingEmbeds);
|
||
else
|
||
await renderDocument(codeblockPreElements, sourcePath, cache, editingEmbeds, printing, plugin);
|
||
}
|
||
async function readingViewInlineDecoratingPostProcessor(element3, { sourcePath }, plugin) {
|
||
if (!sourcePath || !element3)
|
||
return;
|
||
for (const inlineCodeElement of Array.from(element3.querySelectorAll(":not(pre) > code"))) {
|
||
await remakeInlineCode(inlineCodeElement, plugin);
|
||
}
|
||
}
|
||
function destroyReadingModeElements() {
|
||
document.querySelectorAll(".code-styler-pre-parent").forEach((codeblockPreParent) => {
|
||
codeblockPreParent.classList.remove("code-styler-pre-parent");
|
||
});
|
||
[
|
||
...Array.from(document.querySelectorAll("pre.code-styler-pre div[class^='code-styler-header-container']")),
|
||
...Array.from(document.querySelectorAll("pre.code-styler-pre div[class^='code-styler-line-number']")),
|
||
...Array.from(document.querySelectorAll(":not(pre) > code span.code-styler-inline-opener"))
|
||
].forEach((element3) => element3.remove());
|
||
document.querySelectorAll("pre.code-styler-pre").forEach((codeblockPreElement) => {
|
||
codeblockPreElement.classList.remove("code-styler-pre");
|
||
codeblockPreElement.classList.remove("code-styler-folded");
|
||
codeblockPreElement.style.removeProperty("--true-height");
|
||
codeblockPreElement.style.removeProperty("--line-number-margin");
|
||
codeblockPreElement.style.removeProperty("max-height");
|
||
codeblockPreElement.style.removeProperty("white-space");
|
||
});
|
||
document.querySelectorAll("pre > code ~ code.language-output").forEach((executeCodeOutput) => {
|
||
executeCodeOutput.classList.remove("execute-code-output");
|
||
executeCodeOutput.style.removeProperty("--true-height");
|
||
executeCodeOutput.style.removeProperty("max-height");
|
||
});
|
||
document.querySelectorAll("pre > code:nth-of-type(1)").forEach((codeblockCodeElement) => {
|
||
codeblockCodeElement.style.removeProperty("--true-height");
|
||
codeblockCodeElement.style.removeProperty("--line-wrapping");
|
||
codeblockCodeElement.style.removeProperty("--line-active-wrapping");
|
||
codeblockCodeElement.style.removeProperty("max-height");
|
||
codeblockCodeElement.style.removeProperty("white-space");
|
||
codeblockCodeElement.innerHTML = Array.from(codeblockCodeElement.querySelectorAll('code > [class*="code-styler-line"]')).reduce((reconstructedCodeblockLines, codeblockLine) => {
|
||
const codeblockLineText = codeblockLine.firstChild;
|
||
if (codeblockLineText)
|
||
reconstructedCodeblockLines.push(codeblockLineText.innerHTML);
|
||
return reconstructedCodeblockLines;
|
||
}, []).join("\n") + "\n";
|
||
});
|
||
document.querySelectorAll(":not(pre) > code").forEach((inlineCodeElement) => {
|
||
inlineCodeElement.classList.remove("code-styler-highlighted");
|
||
inlineCodeElement.classList.remove("code-styler-highlight-ignore");
|
||
inlineCodeElement.innerText = inlineCodeElement.getAttribute("parameters") + inlineCodeElement.innerText;
|
||
});
|
||
}
|
||
async function renderSpecificReadingSection(codeblockPreElements, sourcePath, codeblockSectionInfo, plugin) {
|
||
const codeblocksParameters = (await parseCodeblockSource(Array.from({ length: codeblockSectionInfo.lineEnd - codeblockSectionInfo.lineStart + 1 }, (_2, num) => num + codeblockSectionInfo.lineStart).map((lineNumber) => codeblockSectionInfo.text.split("\n")[lineNumber]), plugin, sourcePath)).codeblocksParameters;
|
||
await remakeCodeblocks(codeblockPreElements, codeblocksParameters, sourcePath, true, false, plugin);
|
||
}
|
||
async function renderSettings(codeblockPreElements, sourcePath, plugin) {
|
||
const codeblocksParameters = (await parseCodeblockSource(sourcePath.substring(SETTINGS_SOURCEPATH_PREFIX.length).split("\n"), plugin)).codeblocksParameters;
|
||
await remakeCodeblocks(codeblockPreElements, codeblocksParameters, sourcePath, true, false, plugin);
|
||
}
|
||
async function renderDocument(codeblockPreElements, sourcePath, cache, editingEmbeds, printing, plugin) {
|
||
const codeblocksParameters = await getCodeblocksParameters(sourcePath, cache, plugin, editingEmbeds);
|
||
await remakeCodeblocks(codeblockPreElements, codeblocksParameters, sourcePath, !printing, true, plugin);
|
||
}
|
||
async function retriggerProcessor(element3, context, plugin, editingEmbeds) {
|
||
var _a2;
|
||
if (element3.matchParent("div.block-language-dataviewjs") && isCodeblockIgnored("dataviewjs", plugin.settings.processedCodeblocksWhitelist))
|
||
return;
|
||
await sleep(50);
|
||
editingEmbeds = editingEmbeds || Boolean(element3.matchParent(".cm-embed-block"));
|
||
if (editingEmbeds || !element3.classList.contains("admonition-content")) {
|
||
const contentEl = (_a2 = element3.matchParent(".view-content")) != null ? _a2 : element3.matchParent("div.print");
|
||
if (contentEl !== null)
|
||
await readingViewCodeblockDecoratingPostProcessor(contentEl, context, plugin, editingEmbeds);
|
||
}
|
||
}
|
||
async function remakeCodeblocks(codeblockPreElements, codeblocksParameters, sourcePath, dynamic, skipStyled, plugin) {
|
||
if (codeblockPreElements.length !== codeblocksParameters.length)
|
||
return;
|
||
for (const [key2, codeblockPreElement] of Array.from(codeblockPreElements).entries()) {
|
||
const codeblockParameters = codeblocksParameters[key2];
|
||
const codeblockCodeElement = codeblockPreElement.querySelector("pre > code");
|
||
if (!codeblockCodeElement)
|
||
return;
|
||
if (Array.from(codeblockCodeElement.classList).some((className) => /^language-\S+/.test(className)))
|
||
while (!codeblockCodeElement.classList.contains("is-loaded"))
|
||
await sleep(2);
|
||
if (skipStyled && codeblockCodeElement.querySelector("code [class*='code-styler-line']"))
|
||
continue;
|
||
if (isLanguageIgnored(codeblockParameters.language, plugin.settings.excludedLanguages) || codeblockParameters.ignore)
|
||
continue;
|
||
await remakeCodeblock(codeblockCodeElement, codeblockPreElement, codeblockParameters, sourcePath, dynamic, plugin);
|
||
}
|
||
}
|
||
async function remakeCodeblock(codeblockCodeElement, codeblockPreElement, codeblockParameters, sourcePath, dynamic, plugin) {
|
||
if (dynamic)
|
||
plugin.executeCodeMutationObserver.observe(codeblockPreElement, { childList: true, subtree: true, attributes: true, characterData: true });
|
||
insertHeader(codeblockPreElement, codeblockParameters, sourcePath, plugin, dynamic);
|
||
codeblockPreElement.classList.add(...getPreClasses(codeblockParameters, dynamic));
|
||
codeblockPreElement.setAttribute("defaultFold", codeblockParameters.fold.enabled.toString());
|
||
if (codeblockPreElement.parentElement)
|
||
codeblockPreElement.parentElement.classList.add("code-styler-pre-parent");
|
||
if (!codeblockCodeElement.querySelector("code [class*='code-styler-line']"))
|
||
decorateCodeblockLines(codeblockCodeElement, codeblockParameters, sourcePath, plugin);
|
||
}
|
||
async function remakeInlineCode(inlineCodeElement, plugin) {
|
||
if (!plugin.settings.currentTheme.settings.inline.syntaxHighlight || inlineCodeElement.classList.contains("code-styler-inline"))
|
||
return;
|
||
const inlineCodeText = inlineCodeElement.innerText;
|
||
const { parameters, text: text2 } = parseInlineCode(inlineCodeText);
|
||
if (parameters) {
|
||
inlineCodeElement.innerHTML = await getHighlightedHTML(parameters, text2, plugin);
|
||
inlineCodeElement.innerHTML = inlineCodeElement.innerHTML + "​";
|
||
inlineCodeElement.classList.add("code-styler-inline");
|
||
const parameterString = inlineCodeText.substring(0, inlineCodeText.lastIndexOf(text2));
|
||
inlineCodeElement.setAttribute("parameters", parameterString);
|
||
if (parameters.icon || parameters.title)
|
||
inlineCodeElement.insertBefore(createInlineOpener(parameters, plugin.languageIcons), inlineCodeElement.childNodes[0]);
|
||
} else if (!parameters && text2) {
|
||
inlineCodeElement.innerText = text2;
|
||
inlineCodeElement.classList.add("code-styler-inline");
|
||
}
|
||
}
|
||
async function getCodeblockPreElements(element3, specific, editingEmbeds) {
|
||
var _a2;
|
||
let codeblockPreElements;
|
||
if (!editingEmbeds && !specific)
|
||
codeblockPreElements = Array.from(element3.querySelectorAll(".markdown-reading-view pre:not(.frontmatter)"));
|
||
else if (editingEmbeds && !specific)
|
||
codeblockPreElements = Array.from(element3.querySelectorAll(".markdown-source-view .cm-embed-block pre:not(.frontmatter)"));
|
||
else if (!editingEmbeds && specific) {
|
||
codeblockPreElements = Array.from(element3.querySelectorAll("pre:not(.frontmatter)"));
|
||
const admonitionCodeElement = (_a2 = codeblockPreElements == null ? void 0 : codeblockPreElements[0]) == null ? void 0 : _a2.querySelector('pre:not([class]) > code[class*="language-ad-"]');
|
||
if (admonitionCodeElement) {
|
||
await sleep(50);
|
||
codeblockPreElements = Array.from(element3.querySelectorAll("pre:not(.frontmatter)"));
|
||
}
|
||
} else
|
||
codeblockPreElements = [];
|
||
return codeblockPreElements;
|
||
}
|
||
async function getCodeblocksParameters(sourcePath, cache, plugin, editingEmbeds) {
|
||
let codeblocksParameters = [];
|
||
const fileContentLines = await getFileContentLines(sourcePath, plugin);
|
||
if (!fileContentLines)
|
||
return [];
|
||
if (typeof (cache == null ? void 0 : cache.sections) !== "undefined") {
|
||
for (const section of cache.sections) {
|
||
if (!editingEmbeds || section.type === "code" || section.type === "callout") {
|
||
const parsedCodeblocksParameters = await parseCodeblockSource(fileContentLines.slice(section.position.start.line, section.position.end.line + 1), plugin, sourcePath);
|
||
if (!editingEmbeds || parsedCodeblocksParameters.nested)
|
||
codeblocksParameters = codeblocksParameters.concat(parsedCodeblocksParameters.codeblocksParameters);
|
||
}
|
||
}
|
||
} else
|
||
console.error(`Metadata cache not found for file: ${sourcePath}`);
|
||
return codeblocksParameters;
|
||
}
|
||
function insertHeader(codeblockPreElement, codeblockParameters, sourcePath, plugin, dynamic) {
|
||
const headerContainer = createHeader(codeblockParameters, plugin.settings.currentTheme.settings, sourcePath, plugin);
|
||
if (dynamic)
|
||
headerContainer.addEventListener("click", () => {
|
||
toggleFold(codeblockPreElement);
|
||
});
|
||
codeblockPreElement.insertBefore(headerContainer, codeblockPreElement.childNodes[0]);
|
||
}
|
||
function readingDocumentFold(contentEl, fold2) {
|
||
const codeblockPreElements = contentEl.querySelectorAll("pre.code-styler-pre");
|
||
if (typeof fold2 === "undefined")
|
||
codeblockPreElements.forEach((codeblockPreElement) => {
|
||
var _a2;
|
||
toggleFold(codeblockPreElement, ((_a2 = codeblockPreElement.getAttribute("defaultFold")) != null ? _a2 : "false") === "true");
|
||
});
|
||
else
|
||
codeblockPreElements.forEach((codeblockPreElement) => {
|
||
toggleFold(codeblockPreElement, fold2);
|
||
});
|
||
}
|
||
async function toggleFold(codeblockPreElement, fold2) {
|
||
var _a2, _b;
|
||
if ((_b = (_a2 = codeblockPreElement.firstElementChild) == null ? void 0 : _a2.classList) == null ? void 0 : _b.contains("code-styler-header-container-hidden"))
|
||
return;
|
||
codeblockPreElement.querySelectorAll("pre > code").forEach((codeblockCodeElement) => codeblockCodeElement.style.setProperty("max-height", `calc(${Math.ceil(codeblockCodeElement.scrollHeight + 0.01)}px + var(--code-padding) * ${codeblockCodeElement.classList.contains("execute-code-output") ? "3.5 + var(--header-separator-width)" : "2"})`));
|
||
codeblockPreElement.classList.add("hide-scroll");
|
||
await sleep(1);
|
||
if (typeof fold2 === "undefined")
|
||
codeblockPreElement.classList.toggle("code-styler-folded");
|
||
else
|
||
fold2 ? codeblockPreElement.classList.add("code-styler-folded") : codeblockPreElement.classList.remove("code-styler-folded");
|
||
await sleep(TRANSITION_LENGTH);
|
||
codeblockPreElement.querySelectorAll("pre > code").forEach((codeblockCodeElement) => codeblockCodeElement.style.removeProperty("max-height"));
|
||
codeblockPreElement.classList.remove("hide-scroll");
|
||
}
|
||
function getPreClasses(codeblockParameters, dynamic) {
|
||
const preClassList = ["code-styler-pre"];
|
||
if (codeblockParameters.language)
|
||
preClassList.push(`language-${codeblockParameters.language}`);
|
||
if (dynamic) {
|
||
if (codeblockParameters.fold.enabled)
|
||
preClassList.push("code-styler-folded");
|
||
if (codeblockParameters.lineUnwrap.alwaysEnabled)
|
||
preClassList.push(codeblockParameters.lineUnwrap.activeWrap ? "unwrapped-inactive" : "unwrapped");
|
||
else if (codeblockParameters.lineUnwrap.alwaysDisabled)
|
||
preClassList.push("wrapped");
|
||
}
|
||
return preClassList;
|
||
}
|
||
function decorateCodeblockLines(codeblockCodeElement, codeblockParameters, sourcePath, plugin) {
|
||
let indentation = 0;
|
||
getCodeblockLines(codeblockCodeElement, sourcePath, plugin).forEach((line, index2, codeblockLines) => {
|
||
const currentIndentation = countTabs(line);
|
||
if (currentIndentation > indentation) {
|
||
indentation = currentIndentation;
|
||
} else if (currentIndentation < indentation) {
|
||
indentation = currentIndentation;
|
||
}
|
||
if (currentIndentation > 0) {
|
||
}
|
||
if (index2 !== codeblockLines.length - 1)
|
||
insertLineWrapper(codeblockCodeElement, codeblockParameters, index2 + 1, line, plugin.settings.currentTheme.settings.codeblock.lineNumbers);
|
||
});
|
||
}
|
||
function getCodeblockLines(codeblockCodeElement, sourcePath, plugin) {
|
||
const htmlTree = fromHtml(codeblockCodeElement.innerHTML.replace(/\n/g, "<br>"), { fragment: true });
|
||
let codeblockHTML = codeblockCodeElement.innerHTML;
|
||
visitParents(htmlTree, ["text", "element"], (node, ancestors) => {
|
||
if (node.type === "element" && node.tagName === "br") {
|
||
if (ancestors.length >= 2) {
|
||
codeblockHTML = codeblockHTML.replace(/\n/, ancestors.slice(1).reduce((result, element3) => {
|
||
const elementCopy = structuredClone(element3);
|
||
elementCopy.children = [];
|
||
const splitTag = toHtml(elementCopy).split(/(?<=>)(?=<\/)/);
|
||
return splitTag.splice(-1) + result + splitTag.join("");
|
||
}, "<br>"));
|
||
} else
|
||
codeblockHTML = codeblockHTML.replace(/\n/, "<br>");
|
||
}
|
||
});
|
||
const splitHtmlTree = fromHtml(codeblockHTML, { fragment: true });
|
||
visitParents(splitHtmlTree, ["element"], (node) => {
|
||
var _a2, _b;
|
||
if (node.type === "element" && Array.isArray(node.properties.className) && ((_b = (_a2 = node.properties) == null ? void 0 : _a2.className) == null ? void 0 : _b.includes("comment"))) {
|
||
node.children = node.children.reduce((result, child) => {
|
||
if (child.type !== "text")
|
||
result.push(child);
|
||
else
|
||
result = convertCommentLinks(result, child.value, sourcePath, plugin);
|
||
return result;
|
||
}, []);
|
||
}
|
||
});
|
||
codeblockHTML = toHtml(splitHtmlTree);
|
||
let codeblockLines = codeblockHTML.split("<br>");
|
||
if (codeblockLines.length === 1)
|
||
codeblockLines = ["", ""];
|
||
codeblockCodeElement.innerHTML = "";
|
||
return codeblockLines;
|
||
}
|
||
function convertCommentLinks(result, commentText, sourcePath, plugin) {
|
||
const linkMatches = [...commentText.matchAll(/(?:\[\[[^\]|\r\n]+?(?:\|[^\]|\r\n]+?)?\]\]|\[.*?\]\(.+\))/g)].reverse();
|
||
const newChildren = linkMatches.reduce((result2, linkMatch) => {
|
||
var _a2, _b, _c, _d;
|
||
if ((linkMatch == null ? void 0 : linkMatch.index) === void 0)
|
||
return result2;
|
||
const ending = commentText.slice(linkMatch.index + linkMatch[0].length);
|
||
result2.push({ type: "text", value: ending });
|
||
const linkText = commentText.slice(linkMatch.index, linkMatch.index + linkMatch[0].length);
|
||
const linkContainer = createDiv();
|
||
import_obsidian6.MarkdownRenderer.render(plugin.app, linkText, linkContainer, sourcePath, plugin);
|
||
const linkChild = (_d = (_c = (_b = (_a2 = fromHtml(linkContainer.innerHTML, { fragment: true })) == null ? void 0 : _a2.children) == null ? void 0 : _b[0]) == null ? void 0 : _c.children) == null ? void 0 : _d[0];
|
||
result2.push(linkChild);
|
||
commentText = commentText.slice(0, linkMatch.index);
|
||
return result2;
|
||
}, []).reverse();
|
||
return [...result, ...[{ type: "text", value: commentText }, ...newChildren]];
|
||
}
|
||
function insertLineWrapper(codeblockCodeElement, codeblockParameters, lineNumber, line, showLineNumbers) {
|
||
const lineWrapper = document.createElement("div");
|
||
codeblockCodeElement.appendChild(lineWrapper);
|
||
getLineClass(codeblockParameters, lineNumber, line).forEach((lineClass) => lineWrapper.classList.add(lineClass));
|
||
if (showLineNumbers && !codeblockParameters.lineNumbers.alwaysDisabled || codeblockParameters.lineNumbers.alwaysEnabled)
|
||
lineWrapper.appendChild(createDiv({ cls: "code-styler-line-number", text: (lineNumber + codeblockParameters.lineNumbers.offset).toString() }));
|
||
lineWrapper.appendChild(createDiv({ cls: "code-styler-line-text", text: (0, import_obsidian6.sanitizeHTMLToDom)(line !== "" ? line : "<br>") }));
|
||
}
|
||
function countTabs(text2) {
|
||
let count = 0;
|
||
let index2 = 0;
|
||
while (text2.charAt(index2++) === " ")
|
||
count++;
|
||
return count;
|
||
}
|
||
async function getHighlightedHTML(parameters, text2, plugin) {
|
||
const temporaryRenderingContainer = createDiv();
|
||
import_obsidian6.MarkdownRenderer.render(plugin.app, ["```", parameters.language, "\n", text2, "\n", "```"].join(""), temporaryRenderingContainer, "", plugin);
|
||
const renderedCodeElement = temporaryRenderingContainer.querySelector("code");
|
||
if (!renderedCodeElement)
|
||
return "ERROR: Could not render highlighted code";
|
||
while (plugin.settings.currentTheme.settings.inline.syntaxHighlight && !renderedCodeElement.classList.contains("is-loaded"))
|
||
await sleep(2);
|
||
return renderedCodeElement.innerHTML;
|
||
}
|
||
var executeCodeMutationObserver = new MutationObserver((mutations) => {
|
||
mutations.forEach((mutation) => {
|
||
if (mutation.type === "childList" && mutation.target.tagName === "PRE") {
|
||
const executeCodeOutput = mutation.target.querySelector("pre > code ~ code.language-output");
|
||
if (executeCodeOutput)
|
||
executeCodeOutput.classList.add("execute-code-output");
|
||
}
|
||
});
|
||
});
|
||
|
||
// src/main.ts
|
||
var CodeStylerPlugin = class extends import_obsidian7.Plugin {
|
||
async onload() {
|
||
await this.loadSettings();
|
||
const settingsTab = new SettingsTab(this.app, this);
|
||
this.addSettingTab(settingsTab);
|
||
document.body.classList.add("code-styler");
|
||
updateStyling(this.settings, this.app);
|
||
this.languageIcons = Object.keys(LANGUAGES).reduce((result, key2) => {
|
||
var _a2;
|
||
if ((_a2 = LANGUAGES[key2]) == null ? void 0 : _a2.icon)
|
||
result[key2] = URL.createObjectURL(new Blob([`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32">${LANGUAGES[key2].icon}</svg>`], { type: "image/svg+xml" }));
|
||
return result;
|
||
}, {});
|
||
this.sizes = {
|
||
font: document.body.getCssPropertyValue("--font-text-size"),
|
||
zoom: document.body.getCssPropertyValue("--zoom-factor")
|
||
};
|
||
this.executeCodeMutationObserver = executeCodeMutationObserver;
|
||
this.registerMarkdownPostProcessor(async (el, ctx) => {
|
||
await readingViewCodeblockDecoratingPostProcessor(el, ctx, this);
|
||
});
|
||
this.registerMarkdownPostProcessor(async (el, ctx) => {
|
||
await readingViewInlineDecoratingPostProcessor(el, ctx, this);
|
||
});
|
||
this.registerEditorExtension(createCodeblockCodeMirrorExtensions(this.settings, this));
|
||
let zoomTimeout = setTimeout(() => {
|
||
});
|
||
this.registerEvent(this.app.workspace.on("css-change", () => {
|
||
updateStyling(this.settings, this.app);
|
||
const currentFontSize = document.body.getCssPropertyValue("--font-text-size");
|
||
if (this.sizes.font !== currentFontSize) {
|
||
this.sizes.font = currentFontSize;
|
||
clearTimeout(zoomTimeout);
|
||
zoomTimeout = setTimeout(() => {
|
||
this.renderReadingView();
|
||
}, 1e3);
|
||
}
|
||
}, this));
|
||
this.registerEvent(this.app.workspace.on("resize", () => {
|
||
const currentZoomSize = document.body.getCssPropertyValue("--zoom-factor");
|
||
if (this.sizes.zoom !== currentZoomSize) {
|
||
this.sizes.zoom = currentZoomSize;
|
||
clearTimeout(zoomTimeout);
|
||
zoomTimeout = setTimeout(() => {
|
||
this.renderReadingView();
|
||
}, 1e3);
|
||
}
|
||
}, this));
|
||
this.addCommand({ id: "fold-all", name: "Fold all codeblocks", callback: () => {
|
||
const activeView = this.app.workspace.getActiveViewOfType(import_obsidian7.MarkdownView);
|
||
if (activeView) {
|
||
if (activeView.getMode() === "preview")
|
||
readingDocumentFold(activeView.contentEl, true);
|
||
else if (activeView.getMode() === "source")
|
||
editingDocumentFold(activeView.editor.cm.docView.view, true);
|
||
}
|
||
} });
|
||
this.addCommand({ id: "unfold-all", name: "Unfold all codeblocks", callback: () => {
|
||
const activeView = this.app.workspace.getActiveViewOfType(import_obsidian7.MarkdownView);
|
||
if (activeView) {
|
||
if (activeView.getMode() === "preview")
|
||
readingDocumentFold(activeView.contentEl, false);
|
||
else if (activeView.getMode() === "source")
|
||
editingDocumentFold(activeView.editor.cm.docView.view, false);
|
||
}
|
||
} });
|
||
this.addCommand({ id: "reset-all", name: "Reset fold state for all codeblocks", callback: () => {
|
||
const activeView = this.app.workspace.getActiveViewOfType(import_obsidian7.MarkdownView);
|
||
if (activeView) {
|
||
if (activeView.getMode() === "preview")
|
||
readingDocumentFold(activeView.contentEl);
|
||
else if (activeView.getMode() === "source")
|
||
editingDocumentFold(activeView.editor.cm.docView.view);
|
||
}
|
||
} });
|
||
this.app.workspace.onLayoutReady(() => {
|
||
this.renderReadingView();
|
||
});
|
||
console.log("Loaded plugin: Code Styler");
|
||
}
|
||
onunload() {
|
||
this.executeCodeMutationObserver.disconnect();
|
||
removeStylesAndClasses();
|
||
destroyReadingModeElements();
|
||
for (const url of Object.values(this.languageIcons))
|
||
URL.revokeObjectURL(url);
|
||
console.log("Unloaded plugin: Code Styler");
|
||
}
|
||
async loadSettings() {
|
||
this.settings = { ...structuredClone(DEFAULT_SETTINGS), ...convertSettings(await this.loadData()) };
|
||
}
|
||
async saveSettings() {
|
||
await this.saveData(this.settings);
|
||
this.app.workspace.updateOptions();
|
||
updateStyling(this.settings, this.app);
|
||
}
|
||
renderReadingView() {
|
||
this.app.workspace.iterateRootLeaves((leaf) => {
|
||
if (leaf.view instanceof import_obsidian7.MarkdownView && leaf.view.getMode() === "preview")
|
||
leaf.view.previewMode.rerender(true);
|
||
});
|
||
}
|
||
};
|
||
/*! Bundled license information:
|
||
|
||
@simonwep/pickr/dist/pickr.min.js:
|
||
(*! Pickr 1.9.0 MIT | https://github.com/Simonwep/pickr *)
|
||
*/
|
||
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL0BzaW1vbndlcC9waWNrci9kaXN0L3dlYnBhY2s6L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsICJub2RlX21vZHVsZXMvQHNpbW9ud2VwL3BpY2tyL2Rpc3Qvd2VicGFjazovd2VicGFjay9ib290c3RyYXAiLCAibm9kZV9tb2R1bGVzL0BzaW1vbndlcC9waWNrci9kaXN0L3dlYnBhY2s6L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsICJub2RlX21vZHVsZXMvQHNpbW9ud2VwL3BpY2tyL2Rpc3Qvd2VicGFjazovd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsICJub2RlX21vZHVsZXMvQHNpbW9ud2VwL3BpY2tyL2Rpc3Qvd2VicGFjazovd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsICJub2RlX21vZHVsZXMvQHNpbW9ud2VwL3BpY2tyL2Rpc3Qvd2VicGFjazovc3JjL2pzL3V0aWxzL3V0aWxzLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2ltb253ZXAvcGlja3IvZGlzdC93ZWJwYWNrOi9zcmMvanMvdXRpbHMvY29sb3IuanMiLCAibm9kZV9tb2R1bGVzL0BzaW1vbndlcC9waWNrci9kaXN0L3dlYnBhY2s6L3NyYy9qcy91dGlscy9oc3ZhY29sb3IuanMiLCAibm9kZV9tb2R1bGVzL0BzaW1vbndlcC9waWNrci9kaXN0L3dlYnBhY2s6L3NyYy9qcy9saWJzL21vdmVhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2ltb253ZXAvcGlja3IvZGlzdC93ZWJwYWNrOi9zcmMvanMvbGlicy9zZWxlY3RhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy9Ac2ltb253ZXAvcGlja3IvZGlzdC93ZWJwYWNrOi9zcmMvanMvdGVtcGxhdGUuanMiLCAibm9kZV9tb2R1bGVzL0BzaW1vbndlcC9waWNrci9kaXN0L3NyYy9pbmRleC50cyIsICJub2RlX21vZHVsZXMvQHNpbW9ud2VwL3BpY2tyL2Rpc3Qvd2VicGFjazovc3JjL2pzL3BpY2tyLmpzIiwgIm5vZGVfbW9kdWxlcy9qc29uNS9kaXN0L2luZGV4LmpzIiwgInNyYy9tYWluLnRzIiwgInNyYy9TZXR0aW5ncy50cyIsICJzcmMvU2V0dGluZ3NUYWIudHMiLCAibm9kZV9tb2R1bGVzL2NvbG9ydHJhbnNsYXRvci9lc20vaW5kZXguanMiLCAic3JjL0FwcGx5U3R5bGluZy50cyIsICJzcmMvRWRpdGluZ1ZpZXcudHMiLCAic3JjL1BhcnNpbmcvQ29kZWJsb2NrUGFyc2luZy50cyIsICJzcmMvRXh0ZXJuYWwvRXhlY3V0ZUNvZGUvQ29kZUJsb2NrQXJncy50cyIsICJzcmMvUGFyc2luZy9JbmxpbmVDb2RlUGFyc2luZy50cyIsICJzcmMvQ29kZWJsb2NrRGVjb3JhdGluZy50cyIsICJzcmMvUmVhZGluZ1ZpZXcudHMiLCAibm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtaXMvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvbGliL2NvbG9yLmpzIiwgIm5vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9kZXZsb3AvbGliL2RlZmF1bHQuanMiLCAibm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL3NjaGVtYS5qcyIsICJub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvbWVyZ2UuanMiLCAibm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9ub3JtYWxpemUuanMiLCAibm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2luZm8uanMiLCAibm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL3R5cGVzLmpzIiwgIm5vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9kZWZpbmVkLWluZm8uanMiLCAibm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2NyZWF0ZS5qcyIsICJub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3hsaW5rLmpzIiwgIm5vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveG1sLmpzIiwgIm5vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jYXNlLXNlbnNpdGl2ZS10cmFuc2Zvcm0uanMiLCAibm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2Nhc2UtaW5zZW5zaXRpdmUtdHJhbnNmb3JtLmpzIiwgIm5vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIveG1sbnMuanMiLCAibm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9hcmlhLmpzIiwgIm5vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3N2Zy5qcyIsICJub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2ZpbmQuanMiLCAibm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9jb21tYS1zZXBhcmF0ZWQtdG9rZW5zL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9oYXN0LXV0aWwtcGFyc2Utc2VsZWN0b3IvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9zcGFjZS1zZXBhcmF0ZWQtdG9rZW5zL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9oYXN0c2NyaXB0L2xpYi9jcmVhdGUtaC5qcyIsICJub2RlX21vZHVsZXMvaGFzdHNjcmlwdC9saWIvc3ZnLWNhc2Utc2Vuc2l0aXZlLXRhZy1uYW1lcy5qcyIsICJub2RlX21vZHVsZXMvaGFzdHNjcmlwdC9saWIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3ZmaWxlLWxvY2F0aW9uL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvd2ViLW5hbWVzcGFjZXMvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1mcm9tLXBhcnNlNS9saWIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9kaXN0L2NvbW1vbi91bmljb2RlLmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUvZGlzdC9jb21tb24vZXJyb3ItY29kZXMuanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9kaXN0L3Rva2VuaXplci9wcmVwcm9jZXNzb3IuanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9kaXN0L2NvbW1vbi90b2tlbi5qcyIsICJub2RlX21vZHVsZXMvZW50aXRpZXMvbGliL2VzbS9nZW5lcmF0ZWQvZ2VuZXJhdGVkL2RlY29kZS1kYXRhLWh0bWwudHMiLCAibm9kZV9tb2R1bGVzL2VudGl0aWVzL2xpYi9lc20vZ2VuZXJhdGVkL2dlbmVyYXRlZC9kZWNvZGUtZGF0YS14bWwudHMiLCAibm9kZV9tb2R1bGVzL2VudGl0aWVzL2xpYi9lc20vZGVjb2RlX2NvZGVwb2ludC50cyIsICJub2RlX21vZHVsZXMvZW50aXRpZXMvbGliL2VzbS9kZWNvZGUudHMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9kaXN0L2NvbW1vbi9odG1sLmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUvZGlzdC90b2tlbml6ZXIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9kaXN0L3BhcnNlci9vcGVuLWVsZW1lbnQtc3RhY2suanMiLCAibm9kZV9tb2R1bGVzL3BhcnNlNS9kaXN0L3BhcnNlci9mb3JtYXR0aW5nLWVsZW1lbnQtbGlzdC5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3QvdHJlZS1hZGFwdGVycy9kZWZhdWx0LmpzIiwgIm5vZGVfbW9kdWxlcy9wYXJzZTUvZGlzdC9jb21tb24vZG9jdHlwZS5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3QvY29tbW9uL2ZvcmVpZ24tY29udGVudC5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3QvcGFyc2VyL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9lbnRpdGllcy9saWIvZXNtL2VzY2FwZS50cyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3Qvc2VyaWFsaXplci9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3QvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvdmZpbGUtbWVzc2FnZS9saWIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW5wYXRoLmJyb3dzZXIuanMiLCAibm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW5wcm9jLmJyb3dzZXIuanMiLCAibm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW51cmwuc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWludXJsLmJyb3dzZXIuanMiLCAibm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvaGFzdC11dGlsLWZyb20taHRtbC9saWIvZXJyb3JzLmpzIiwgIm5vZGVfbW9kdWxlcy9oYXN0LXV0aWwtZnJvbS1odG1sL2xpYi9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvaHRtbC12b2lkLWVsZW1lbnRzL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy96d2l0Y2gvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvY29yZS5qcyIsICJub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLWhleGFkZWNpbWFsLmpzIiwgIm5vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvdG8tZGVjaW1hbC5qcyIsICJub2RlX21vZHVsZXMvY2hhcmFjdGVyLWVudGl0aWVzLWxlZ2FjeS9pbmRleC5qcyIsICJub2RlX21vZHVsZXMvY2hhcmFjdGVyLWVudGl0aWVzLWh0bWw0L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL2NvbnN0YW50L2Rhbmdlcm91cy5qcyIsICJub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLW5hbWVkLmpzIiwgIm5vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LXNtYXJ0LmpzIiwgIm5vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2NvbW1lbnQuanMiLCAibm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZG9jdHlwZS5qcyIsICJub2RlX21vZHVsZXMvY2NvdW50L2luZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy9oYXN0LXV0aWwtd2hpdGVzcGFjZS9saWIvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi91dGlsL3NpYmxpbmdzLmpzIiwgIm5vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vb21pc3Npb24uanMiLCAibm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi9jbG9zaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vb3BlbmluZy5qcyIsICJub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9lbGVtZW50LmpzIiwgIm5vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3RleHQuanMiLCAibm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcmF3LmpzIiwgIm5vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3Jvb3QuanMiLCAibm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvaW5kZXguanMiLCAibm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9pbmRleC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiUGlja3JcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiUGlja3JcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwgIi8vIFRoZSByZXF1aXJlIHNjb3BlXG52YXIgX193ZWJwYWNrX3JlcXVpcmVfXyA9IHt9O1xuXG4iLCAiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwgIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCAiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwgIi8qIGVzbGludC1kaXNhYmxlIHByZWZlci1yZXN0LXBhcmFtcyAqL1xuZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcihtZXRob2QsIGVsZW1lbnRzLCBldmVudHMsIGZuLCBvcHRpb25zID0ge30pIHtcblxuICAgIC8vIE5vcm1hbGl6ZSBhcnJheVxuICAgIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uIHx8IGVsZW1lbnRzIGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcbiAgICAgICAgZWxlbWVudHMgPSBBcnJheS5mcm9tKGVsZW1lbnRzKTtcbiAgICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGVsZW1lbnRzKSkge1xuICAgICAgICBlbGVtZW50cyA9IFtlbGVtZW50c107XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV2ZW50cykpIHtcbiAgICAgICAgZXZlbnRzID0gW2V2ZW50c107XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbCBvZiBlbGVtZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50cykge1xuICAgICAgICAgICAgZWxbbWV0aG9kXShldiwgZm4sIHtjYXB0dXJlOiBmYWxzZSwgLi4ub3B0aW9uc30pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG59XG5cbi8qKlxuICogQWRkIGV2ZW50KHMpIHRvIGVsZW1lbnQocykuXG4gKiBAcGFyYW0gZWxlbWVudHMgRE9NLUVsZW1lbnRzXG4gKiBAcGFyYW0gZXZlbnRzIEV2ZW50IG5hbWVzXG4gKiBAcGFyYW0gZm4gQ2FsbGJhY2tcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnNcbiAqIEByZXR1cm4gQXJyYXkgcGFzc2VkIGFyZ3VtZW50c1xuICovXG5leHBvcnQgY29uc3Qgb24gPSBldmVudExpc3RlbmVyLmJpbmQobnVsbCwgJ2FkZEV2ZW50TGlzdGVuZXInKTtcblxuLyoqXG4gKiBSZW1vdmUgZXZlbnQocykgZnJvbSBlbGVtZW50KHMpLlxuICogQHBhcmFtIGVsZW1lbnRzIERPTS1FbGVtZW50c1xuICogQHBhcmFtIGV2ZW50cyBFdmVudCBuYW1lc1xuICogQHBhcmFtIGZuIENhbGxiYWNrXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBvcHRpb25zXG4gKiBAcmV0dXJuIEFycmF5IHBhc3NlZCBhcmd1bWVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IGV2ZW50TGlzdGVuZXIuYmluZChudWxsLCAncmVtb3ZlRXZlbnRMaXN0ZW5lcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gRE9NLUVsZW1lbnQgb3V0IG9mIGEgc3RyaW5nIChTaW5nbGUgZWxlbWVudCkuXG4gKiBAcGFyYW0gaHRtbCBIVE1MIHJlcHJlc2VudGluZyBhIHNpbmdsZSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RWxlbWVudCB8IG51bGx9IFRoZSBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudEZyb21TdHJpbmcoaHRtbCkge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdi5pbm5lckhUTUwgPSBodG1sLnRyaW0oKTtcbiAgICByZXR1cm4gZGl2LmZpcnN0RWxlbWVudENoaWxkO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaHRtbCBlbGVtZW50LCBldmVyeSBlbGVtZW50IHdoaWNoIGhhc1xuICogYSAnOnJlZicgYXR0cmlidXRlIHdpbGwgYmUgc2F2ZWQgaW4gYSBvYmplY3QgKHdoaWNoIHdpbGwgYmUgcmV0dXJuZWQpXG4gKiB3aGVyZSB0aGUgdmFsdWUgb2YgJzpyZWYnIGlzIHRoZSBvYmplY3Qta2V5IGFuZCB0aGUgdmFsdWUgdGhlIEhUTUxFbGVtZW50LlxuICpcbiAqIEl0J3MgcG9zc2libGUgdG8gY3JlYXRlIGEgaGllcmFyY2h5IGlmIHlvdSBhZGQgYSAnOm9iaicgYXR0cmlidXRlLiBFdmVyeVxuICogc2libGluZyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBvYmplY3Qgd2hpY2ggd2lsbCBnZXQgdGhlIG5hbWUgZnJvbSB0aGUgJ2RhdGEtY29uJyBhdHRyaWJ1dGUuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gY3JlYXRlIGFuIEFycmF5IG91dCBvZiBtdWx0aXBsZSBlbGVtZW50cywgeW91IGNhbiB1c2UgdGhlICc6YXJyJyBhdHRyaWJ1dGUsXG4gKiB0aGUgdmFsdWUgZGVmaW5lcyB0aGUga2V5IGFuZCBhbGwgZWxlbWVudHMsIHdoaWNoIGhhcyB0aGUgc2FtZSBwYXJlbnQgYW5kIHRoZSBzYW1lICdkYXRhLWFycicgYXR0cmlidXRlLFxuICogd291bGQgYmUgYWRkZWQgdG8gaXQuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBIVE1MIFN0cmluZy5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbVRlbXBsYXRlKHN0cikge1xuXG4gICAgLy8gUmVtb3ZlcyBhbiBhdHRyaWJ1dGUgZnJvbSBhIEhUTUxFbGVtZW50IGFuZCByZXR1cm5zIHRoZSB2YWx1ZS5cbiAgICBjb25zdCByZW1vdmVBdHRyaWJ1dGUgPSAoZWwsIG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG5cbiAgICAvLyBSZWN1cnNpdmUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0ZW1wbGF0ZVxuICAgIGNvbnN0IHJlc29sdmUgPSAoZWxlbWVudCwgYmFzZSA9IHt9KSA9PiB7XG5cbiAgICAgICAgLy8gQ2hlY2sga2V5IGFuZCBjb250YWluZXIgYXR0cmlidXRlXG4gICAgICAgIGNvbnN0IGNvbiA9IHJlbW92ZUF0dHJpYnV0ZShlbGVtZW50LCAnOm9iaicpO1xuICAgICAgICBjb25zdCBrZXkgPSByZW1vdmVBdHRyaWJ1dGUoZWxlbWVudCwgJzpyZWYnKTtcbiAgICAgICAgY29uc3Qgc3VidHJlZSA9IGNvbiA/IChiYXNlW2Nvbl0gPSB7fSkgOiBiYXNlO1xuXG4gICAgICAgIC8vIENoZWNrIGFuZCBzYXZlIGVsZW1lbnRcbiAgICAgICAga2V5ICYmIChiYXNlW2tleV0gPSBlbGVtZW50KTtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBBcnJheS5mcm9tKGVsZW1lbnQuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSByZW1vdmVBdHRyaWJ1dGUoY2hpbGQsICc6YXJyJyk7XG4gICAgICAgICAgICBjb25zdCBzdWIgPSByZXNvbHZlKGNoaWxkLCBhcnIgPyB7fSA6IHN1YnRyZWUpO1xuXG4gICAgICAgICAgICBpZiAoYXJyKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIGFycmF5IGFuZCBhZGQgZWxlbWVudFxuICAgICAgICAgICAgICAgIChzdWJ0cmVlW2Fycl0gfHwgKHN1YnRyZWVbYXJyXSA9IFtdKSlcbiAgICAgICAgICAgICAgICAgICAgLnB1c2goT2JqZWN0LmtleXMoc3ViKS5sZW5ndGggPyBzdWIgOiBjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYmFzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc29sdmUoY3JlYXRlRWxlbWVudEZyb21TdHJpbmcoc3RyKSk7XG59XG5cbi8qKlxuICogUG9seWZpbGwgZm9yIHNhZmFyaSAmIGZpcmVmb3ggZm9yIHRoZSBldmVudFBhdGggZXZlbnQgcHJvcGVydHkuXG4gKiBAcGFyYW0gZXZ0IFRoZSBldmVudCBvYmplY3QuXG4gKiBAcmV0dXJuIFtTdHJpbmddIGV2ZW50IHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmVudFBhdGgoZXZ0KSB7XG4gICAgbGV0IHBhdGggPSBldnQucGF0aCB8fCAoZXZ0LmNvbXBvc2VkUGF0aCAmJiBldnQuY29tcG9zZWRQYXRoKCkpO1xuICAgIGlmIChwYXRoKSB7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cblxuICAgIGxldCBlbCA9IGV2dC50YXJnZXQucGFyZW50RWxlbWVudDtcbiAgICBwYXRoID0gW2V2dC50YXJnZXQsIGVsXTtcbiAgICB3aGlsZSAoZWwgPSBlbC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIHBhdGgucHVzaChlbCk7XG4gICAgfVxuXG4gICAgcGF0aC5wdXNoKGRvY3VtZW50LCB3aW5kb3cpO1xuICAgIHJldHVybiBwYXRoO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgSFRNTEVsZW1lbnQgYnkgcXVlcnkuXG4gKiBAcGFyYW0gdmFsXG4gKiBAcmV0dXJucyB7bnVsbHxEb2N1bWVudHxFbGVtZW50fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVsZW1lbnQodmFsKSB7XG4gICAgaWYgKHZhbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB2YWwuc3BsaXQoLz4+L2cpLnJlZHVjZSgocHYsIGN2LCBjaSwgYSkgPT4ge1xuICAgICAgICAgICAgcHYgPSBwdi5xdWVyeVNlbGVjdG9yKGN2KTtcbiAgICAgICAgICAgIHJldHVybiBjaSA8IGEubGVuZ3RoIC0gMSA/IHB2LnNoYWRvd1Jvb3QgOiBwdjtcbiAgICAgICAgfSwgZG9jdW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGFiaWxpdHkgdG8gY2hhbmdlIG51bWJlcnMgaW4gYW4gaW5wdXQgZmllbGQgd2l0aCB0aGUgc2Nyb2xsLXdoZWVsLlxuICogQHBhcmFtIGVsXG4gKiBAcGFyYW0gbWFwcGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGp1c3RhYmxlSW5wdXROdW1iZXJzKGVsLCBtYXBwZXIgPSB2ID0+IHYpIHtcblxuICAgIGZ1bmN0aW9uIGhhbmRsZVNjcm9sbChlKSB7XG4gICAgICAgIGNvbnN0IGluYyA9IChbMC4wMDEsIDAuMDEsIDAuMV0pW051bWJlcihlLnNoaWZ0S2V5IHx8IGUuY3RybEtleSAqIDIpXSAqIChlLmRlbHRhWSA8IDAgPyAxIDogLTEpO1xuXG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCBvZmYgPSBlbC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgZWwudmFsdWUgPSBlbC52YWx1ZS5yZXBsYWNlKC9bXFxkLl0rL2csICh2LCBpKSA9PiB7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIG51bWJlciBpcyBpbiBjdXJzb3IgcmFuZ2UgYW5kIGluY3JlYXNlIGl0XG4gICAgICAgICAgICBpZiAoaSA8PSBvZmYgJiYgaSArIHYubGVuZ3RoID49IG9mZikge1xuICAgICAgICAgICAgICAgIG9mZiA9IGk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcHBlcihOdW1iZXIodiksIGluYywgaW5kZXgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKG9mZiwgb2ZmKTtcblxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgYW5kIHRyaWdnZXIgaW5wdXQgZXZlbnRcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnKSk7XG4gICAgfVxuXG4gICAgLy8gQmluZCBldmVudHNcbiAgICBvbihlbCwgJ2ZvY3VzJywgKCkgPT4gb24od2luZG93LCAnd2hlZWwnLCBoYW5kbGVTY3JvbGwsIHtwYXNzaXZlOiBmYWxzZX0pKTtcbiAgICBvbihlbCwgJ2JsdXInLCAoKSA9PiBvZmYod2luZG93LCAnd2hlZWwnLCBoYW5kbGVTY3JvbGwpKTtcbn1cbiIsICIvLyBTaG9ydGhhbmRzXG5jb25zdCB7bWluLCBtYXgsIGZsb29yLCByb3VuZH0gPSBNYXRoO1xuXG4vKipcbiAqIFRyaWVzIHRvIGNvbnZlcnQgYSBjb2xvciBuYW1lIHRvIHJnYi9hIGhleCByZXByZXNlbnRhdGlvblxuICogQHBhcmFtIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCBDYW52YXNHcmFkaWVudCB8IENhbnZhc1BhdHRlcm59XG4gKi9cbmZ1bmN0aW9uIHN0YW5kYXJkaXplQ29sb3IobmFtZSkge1xuXG4gICAgLy8gU2luY2UgaW52YWxpZCBjb2xvcidzIHdpbGwgYmUgcGFyc2VkIGFzIGJsYWNrLCBmaWx0ZXIgdGhlbSBvdXRcbiAgICBpZiAobmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYmxhY2snKSB7XG4gICAgICAgIHJldHVybiAnIzAwMCc7XG4gICAgfVxuXG4gICAgY29uc3QgY3R4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBjdHguZmlsbFN0eWxlID0gbmFtZTtcbiAgICByZXR1cm4gY3R4LmZpbGxTdHlsZSA9PT0gJyMwMDAnID8gbnVsbCA6IGN0eC5maWxsU3R5bGU7XG59XG5cbi8qKlxuICogQ29udmVydCBIU1Ygc3BlY3RydW0gdG8gUkdCLlxuICogQHBhcmFtIGggSHVlXG4gKiBAcGFyYW0gcyBTYXR1cmF0aW9uXG4gKiBAcGFyYW0gdiBWYWx1ZVxuICogQHJldHVybnMge251bWJlcltdfSBBcnJheSB3aXRoIHJnYiB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoc3ZUb1JnYihoLCBzLCB2KSB7XG4gICAgaCA9IChoIC8gMzYwKSAqIDY7XG4gICAgcyAvPSAxMDA7XG4gICAgdiAvPSAxMDA7XG5cbiAgICBjb25zdCBpID0gZmxvb3IoaCk7XG5cbiAgICBjb25zdCBmID0gaCAtIGk7XG4gICAgY29uc3QgcCA9IHYgKiAoMSAtIHMpO1xuICAgIGNvbnN0IHEgPSB2ICogKDEgLSBmICogcyk7XG4gICAgY29uc3QgdCA9IHYgKiAoMSAtICgxIC0gZikgKiBzKTtcblxuICAgIGNvbnN0IG1vZCA9IGkgJSA2O1xuICAgIGNvbnN0IHIgPSBbdiwgcSwgcCwgcCwgdCwgdl1bbW9kXTtcbiAgICBjb25zdCBnID0gW3QsIHYsIHYsIHEsIHAsIHBdW21vZF07XG4gICAgY29uc3QgYiA9IFtwLCBwLCB0LCB2LCB2LCBxXVttb2RdO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgciAqIDI1NSxcbiAgICAgICAgZyAqIDI1NSxcbiAgICAgICAgYiAqIDI1NVxuICAgIF07XG59XG5cbi8qKlxuICogQ29udmVydCBIU1Ygc3BlY3RydW0gdG8gSGV4LlxuICogQHBhcmFtIGggSHVlXG4gKiBAcGFyYW0gcyBTYXR1cmF0aW9uXG4gKiBAcGFyYW0gdiBWYWx1ZVxuICogQHJldHVybnMge3N0cmluZ1tdfSBIZXggdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoc3ZUb0hleChoLCBzLCB2KSB7XG4gICAgcmV0dXJuIGhzdlRvUmdiKGgsIHMsIHYpLm1hcCh2ID0+XG4gICAgICAgIHJvdW5kKHYpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpXG4gICAgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IEhTViBzcGVjdHJ1bSB0byBDTVlLLlxuICogQHBhcmFtIGggSHVlXG4gKiBAcGFyYW0gcyBTYXR1cmF0aW9uXG4gKiBAcGFyYW0gdiBWYWx1ZVxuICogQHJldHVybnMge251bWJlcltdfSBDTVlLIHZhbHVlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaHN2VG9DbXlrKGgsIHMsIHYpIHtcbiAgICBjb25zdCByZ2IgPSBoc3ZUb1JnYihoLCBzLCB2KTtcbiAgICBjb25zdCByID0gcmdiWzBdIC8gMjU1O1xuICAgIGNvbnN0IGcgPSByZ2JbMV0gLyAyNTU7XG4gICAgY29uc3QgYiA9IHJnYlsyXSAvIDI1NTtcblxuICAgIGNvbnN0IGsgPSBtaW4oMSAtIHIsIDEgLSBnLCAxIC0gYik7XG4gICAgY29uc3QgYyA9IGsgPT09IDEgPyAwIDogKDEgLSByIC0gaykgLyAoMSAtIGspO1xuICAgIGNvbnN0IG0gPSBrID09PSAxID8gMCA6ICgxIC0gZyAtIGspIC8gKDEgLSBrKTtcbiAgICBjb25zdCB5ID0gayA9PT0gMSA/IDAgOiAoMSAtIGIgLSBrKSAvICgxIC0gayk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgICBjICogMTAwLFxuICAgICAgICBtICogMTAwLFxuICAgICAgICB5ICogMTAwLFxuICAgICAgICBrICogMTAwXG4gICAgXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IEhTViBzcGVjdHJ1bSB0byBIU0wuXG4gKiBAcGFyYW0gaCBIdWVcbiAqIEBwYXJhbSBzIFNhdHVyYXRpb25cbiAqIEBwYXJhbSB2IFZhbHVlXG4gKiBAcmV0dXJucyB7bnVtYmVyW119IEhTTCB2YWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhzdlRvSHNsKGgsIHMsIHYpIHtcbiAgICBzIC89IDEwMDtcbiAgICB2IC89IDEwMDtcblxuICAgIGNvbnN0IGwgPSAoMiAtIHMpICogdiAvIDI7XG5cbiAgICBpZiAobCAhPT0gMCkge1xuICAgICAgICBpZiAobCA9PT0gMSkge1xuICAgICAgICAgICAgcyA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAobCA8IDAuNSkge1xuICAgICAgICAgICAgcyA9IHMgKiB2IC8gKGwgKiAyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMgPSBzICogdiAvICgyIC0gbCAqIDIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgaCxcbiAgICAgICAgcyAqIDEwMCxcbiAgICAgICAgbCAqIDEwMFxuICAgIF07XG59XG5cbi8qKlxuICogQ29udmVydCBSR0IgdG8gSFNWLlxuICogQHBhcmFtIHIgUmVkXG4gKiBAcGFyYW0gZyBHcmVlblxuICogQHBhcmFtIGIgQmx1ZVxuICogQHJldHVybiB7bnVtYmVyW119IEhTViB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHJnYlRvSHN2KHIsIGcsIGIpIHtcbiAgICByIC89IDI1NTtcbiAgICBnIC89IDI1NTtcbiAgICBiIC89IDI1NTtcblxuICAgIGNvbnN0IG1pblZhbCA9IG1pbihyLCBnLCBiKTtcbiAgICBjb25zdCBtYXhWYWwgPSBtYXgociwgZywgYik7XG4gICAgY29uc3QgZGVsdGEgPSBtYXhWYWwgLSBtaW5WYWw7XG5cbiAgICBsZXQgaCwgcztcbiAgICBjb25zdCB2ID0gbWF4VmFsO1xuICAgIGlmIChkZWx0YSA9PT0gMCkge1xuICAgICAgICBoID0gcyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcyA9IGRlbHRhIC8gbWF4VmFsO1xuICAgICAgICBjb25zdCBkciA9ICgoKG1heFZhbCAtIHIpIC8gNikgKyAoZGVsdGEgLyAyKSkgLyBkZWx0YTtcbiAgICAgICAgY29uc3QgZGcgPSAoKChtYXhWYWwgLSBnKSAvIDYpICsgKGRlbHRhIC8gMikpIC8gZGVsdGE7XG4gICAgICAgIGNvbnN0IGRiID0gKCgobWF4VmFsIC0gYikgLyA2KSArIChkZWx0YSAvIDIpKSAvIGRlbHRhO1xuXG4gICAgICAgIGlmIChyID09PSBtYXhWYWwpIHtcbiAgICAgICAgICAgIGggPSBkYiAtIGRnO1xuICAgICAgICB9IGVsc2UgaWYgKGcgPT09IG1heFZhbCkge1xuICAgICAgICAgICAgaCA9ICgxIC8gMykgKyBkciAtIGRiO1xuICAgICAgICB9IGVsc2UgaWYgKGIgPT09IG1heFZhbCkge1xuICAgICAgICAgICAgaCA9ICgyIC8gMykgKyBkZyAtIGRyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGggPCAwKSB7XG4gICAgICAgICAgICBoICs9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoaCA+IDEpIHtcbiAgICAgICAgICAgIGggLT0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICAgIGggKiAzNjAsXG4gICAgICAgIHMgKiAxMDAsXG4gICAgICAgIHYgKiAxMDBcbiAgICBdO1xufVxuXG4vKipcbiAqIENvbnZlcnQgQ01ZSyB0byBIU1YuXG4gKiBAcGFyYW0gYyBDeWFuXG4gKiBAcGFyYW0gbSBNYWdlbnRhXG4gKiBAcGFyYW0geSBZZWxsb3dcbiAqIEBwYXJhbSBrIEtleSAoQmxhY2spXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gSFNWIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gY215a1RvSHN2KGMsIG0sIHksIGspIHtcbiAgICBjIC89IDEwMDtcbiAgICBtIC89IDEwMDtcbiAgICB5IC89IDEwMDtcbiAgICBrIC89IDEwMDtcblxuICAgIGNvbnN0IHIgPSAoMSAtIG1pbigxLCBjICogKDEgLSBrKSArIGspKSAqIDI1NTtcbiAgICBjb25zdCBnID0gKDEgLSBtaW4oMSwgbSAqICgxIC0gaykgKyBrKSkgKiAyNTU7XG4gICAgY29uc3QgYiA9ICgxIC0gbWluKDEsIHkgKiAoMSAtIGspICsgaykpICogMjU1O1xuXG4gICAgcmV0dXJuIFsuLi5yZ2JUb0hzdihyLCBnLCBiKV07XG59XG5cbi8qKlxuICogQ29udmVydCBIU0wgdG8gSFNWLlxuICogQHBhcmFtIGggSHVlXG4gKiBAcGFyYW0gcyBTYXR1cmF0aW9uXG4gKiBAcGFyYW0gbCBMaWdodG5lc3NcbiAqIEByZXR1cm4ge251bWJlcltdfSBIU1YgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBoc2xUb0hzdihoLCBzLCBsKSB7XG4gICAgcyAvPSAxMDA7XG4gICAgbCAvPSAxMDA7XG4gICAgcyAqPSBsIDwgMC41ID8gbCA6IDEgLSBsO1xuXG4gICAgY29uc3QgbnMgPSAoMiAqIHMgLyAobCArIHMpKSAqIDEwMDtcbiAgICBjb25zdCB2ID0gKGwgKyBzKSAqIDEwMDtcbiAgICByZXR1cm4gW2gsIGlzTmFOKG5zKSA/IDAgOiBucywgdl07XG59XG5cbi8qKlxuICogQ29udmVydCBIRVggdG8gSFNWLlxuICogQHBhcmFtIGhleCBIZXhhZGVjaW1hbCBzdHJpbmcgb2YgcmdiIGNvbG9ycywgY2FuIGhhdmUgbGVuZ3RoIDMgb3IgNi5cbiAqIEByZXR1cm4ge251bWJlcltdfSBIU1YgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBoZXhUb0hzdihoZXgpIHtcbiAgICByZXR1cm4gcmdiVG9Ic3YoLi4uaGV4Lm1hdGNoKC8uezJ9L2cpLm1hcCh2ID0+IHBhcnNlSW50KHYsIDE2KSkpO1xufVxuXG4vKipcbiAqIFRyeSdzIHRvIHBhcnNlIGEgc3RyaW5nIHdoaWNoIHJlcHJlc2VudHMgYSBjb2xvciB0byBhIEhTViBhcnJheS5cbiAqIEN1cnJlbnQgc3VwcG9ydGVkIHR5cGVzIGFyZSBjbXlrLCByZ2JhLCBoc2xhIGFuZCBoZXhhZGVjaW1hbC5cbiAqIEBwYXJhbSBzdHJcbiAqIEByZXR1cm4geyp9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRvSFNWQShzdHIpIHtcblxuICAgIC8vIENoZWNrIGlmIHN0cmluZyBpcyBhIGNvbG9yLW5hbWVcbiAgICBzdHIgPSBzdHIubWF0Y2goL15bYS16QS1aXSskLykgPyBzdGFuZGFyZGl6ZUNvbG9yKHN0cikgOiBzdHI7XG5cbiAgICAvLyBSZWd1bGFyIGV4cHJlc3Npb25zIHRvIG1hdGNoIGRpZmZlcmVudCB0eXBlcyBvZiBjb2xvciByZXByZXNlbnRpb25cbiAgICBjb25zdCByZWdleCA9IHtcbiAgICAgICAgY215azogL15jbXlrXFxEKyhbXFxkLl0rKVxcRCsoW1xcZC5dKylcXEQrKFtcXGQuXSspXFxEKyhbXFxkLl0rKS9pLFxuICAgICAgICByZ2JhOiAvXnJnYmE/XFxEKyhbXFxkLl0rKSglPylcXEQrKFtcXGQuXSspKCU/KVxcRCsoW1xcZC5dKykoJT8pXFxEKj8oKFtcXGQuXSspKCU/KXwkKS9pLFxuICAgICAgICBoc2xhOiAvXmhzbGE/XFxEKyhbXFxkLl0rKVxcRCsoW1xcZC5dKylcXEQrKFtcXGQuXSspXFxEKj8oKFtcXGQuXSspKCU/KXwkKS9pLFxuICAgICAgICBoc3ZhOiAvXmhzdmE/XFxEKyhbXFxkLl0rKVxcRCsoW1xcZC5dKylcXEQrKFtcXGQuXSspXFxEKj8oKFtcXGQuXSspKCU/KXwkKS9pLFxuICAgICAgICBoZXhhOiAvXiM/KChbXFxkQS1GYS1mXXszLDR9KXwoW1xcZEEtRmEtZl17Nn0pfChbXFxkQS1GYS1mXXs4fSkpJC9pXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFRha2VzIGFuIEFycmF5IG9mIGFueSB0eXBlLCBjb252ZXJ0IHN0cmluZ3Mgd2hpY2ggcmVwcmVzZW50c1xuICAgICAqIGEgbnVtYmVyIHRvIGEgbnVtYmVyIGFuIGFueXRoaW5nIGVsc2UgdG8gdW5kZWZpbmVkLlxuICAgICAqIEBwYXJhbSBhcnJheVxuICAgICAqIEByZXR1cm4geyp9XG4gICAgICovXG4gICAgY29uc3QgbnVtYXJpemUgPSBhcnJheSA9PiBhcnJheS5tYXAodiA9PiAvXih8XFxkKylcXC5cXGQrfFxcZCskLy50ZXN0KHYpID8gTnVtYmVyKHYpIDogdW5kZWZpbmVkKTtcblxuICAgIGxldCBtYXRjaDtcbiAgICBpbnZhbGlkOiBmb3IgKGNvbnN0IHR5cGUgaW4gcmVnZXgpIHtcblxuICAgICAgICAvLyBDaGVjayBpZiBjdXJyZW50IHNjaGVtZSBwYXNzZWRcbiAgICAgICAgaWYgKCEobWF0Y2ggPSByZWdleFt0eXBlXS5leGVjKHN0cikpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyeSB0byBjb252ZXJ0XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY215ayc6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbLCBjLCBtLCB5LCBrXSA9IG51bWFyaXplKG1hdGNoKTtcblxuICAgICAgICAgICAgICAgIGlmIChjID4gMTAwIHx8IG0gPiAxMDAgfHwgeSA+IDEwMCB8fCBrID4gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGludmFsaWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZXM6IGNteWtUb0hzdihjLCBtLCB5LCBrKSwgdHlwZX07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdyZ2JhJzoge1xuICAgICAgICAgICAgICAgIGxldCBbLCByLCAsIGcsICwgYiwgLCAsIGFdID0gbnVtYXJpemUobWF0Y2gpO1xuXG4gICAgICAgICAgICAgICAgciA9IG1hdGNoWzJdID09PSAnJScgPyAociAvIDEwMCkgKiAyNTUgOiByO1xuICAgICAgICAgICAgICAgIGcgPSBtYXRjaFs0XSA9PT0gJyUnID8gKGcgLyAxMDApICogMjU1IDogZztcbiAgICAgICAgICAgICAgICBiID0gbWF0Y2hbNl0gPT09ICclJyA/IChiIC8gMTAwKSAqIDI1NSA6IGI7XG4gICAgICAgICAgICAgICAgYSA9IG1hdGNoWzldID09PSAnJScgPyAoYSAvIDEwMCkgOiBhO1xuXG4gICAgICAgICAgICAgICAgaWYgKHIgPiAyNTUgfHwgZyA+IDI1NSB8fCBiID4gMjU1IHx8IGEgPCAwIHx8IGEgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGludmFsaWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZXM6IFsuLi5yZ2JUb0hzdihyLCBnLCBiKSwgYV0sIGEsIHR5cGV9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaGV4YSc6IHtcbiAgICAgICAgICAgICAgICBsZXQgWywgaGV4XSA9IG1hdGNoO1xuXG4gICAgICAgICAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDQgfHwgaGV4Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpLm1hcCh2ID0+IHYgKyB2KS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByYXcgPSBoZXguc3Vic3RyaW5nKDAsIDYpO1xuICAgICAgICAgICAgICAgIGxldCBhID0gaGV4LnN1YnN0cmluZyg2KTtcblxuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgMCAtIDI1NSB0byAwIC0gMSBmb3Igb3BhY2l0eVxuICAgICAgICAgICAgICAgIGEgPSBhID8gKHBhcnNlSW50KGEsIDE2KSAvIDI1NSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlczogWy4uLmhleFRvSHN2KHJhdyksIGFdLCBhLCB0eXBlfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2hzbGEnOiB7XG4gICAgICAgICAgICAgICAgbGV0IFssIGgsIHMsIGwsICwgYV0gPSBudW1hcml6ZShtYXRjaCk7XG4gICAgICAgICAgICAgICAgYSA9IG1hdGNoWzZdID09PSAnJScgPyAoYSAvIDEwMCkgOiBhO1xuXG4gICAgICAgICAgICAgICAgaWYgKGggPiAzNjAgfHwgcyA+IDEwMCB8fCBsID4gMTAwIHx8IGEgPCAwIHx8IGEgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrIGludmFsaWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZXM6IFsuLi5oc2xUb0hzdihoLCBzLCBsKSwgYV0sIGEsIHR5cGV9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaHN2YSc6IHtcbiAgICAgICAgICAgICAgICBsZXQgWywgaCwgcywgdiwgLCBhXSA9IG51bWFyaXplKG1hdGNoKTtcbiAgICAgICAgICAgICAgICBhID0gbWF0Y2hbNl0gPT09ICclJyA/IChhIC8gMTAwKSA6IGE7XG5cbiAgICAgICAgICAgICAgICBpZiAoaCA+IDM2MCB8fCBzID4gMTAwIHx8IHYgPiAxMDAgfHwgYSA8IDAgfHwgYSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgaW52YWxpZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlczogW2gsIHMsIHYsIGFdLCBhLCB0eXBlfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7dmFsdWVzOiBudWxsLCB0eXBlOiBudWxsfTtcbn1cbiIsICJpbXBvcnQge2hzdlRvQ215aywgaHN2VG9IZXgsIGhzdlRvSHNsLCBoc3ZUb1JnYn0gZnJvbSAnLi9jb2xvcic7XG5cbi8qKlxuICogU2ltcGxlIGNsYXNzIHdoaWNoIGhvbGRzIHRoZSBwcm9wZXJ0aWVzXG4gKiBvZiB0aGUgY29sb3IgcmVwcmVzZW50aW9uIG1vZGVsIGhzbGEgKGh1ZSBzYXR1cmF0aW9uIGxpZ2h0bmVzcyBhbHBoYSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEhTVmFDb2xvcihoID0gMCwgcyA9IDAsIHYgPSAwLCBhID0gMSkge1xuICAgIGNvbnN0IG1hcHBlciA9IChvcmlnaW5hbCwgbmV4dCkgPT4gKHByZWNpc2lvbiA9IC0xKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KH5wcmVjaXNpb24gPyBvcmlnaW5hbC5tYXAodiA9PiBOdW1iZXIodi50b0ZpeGVkKHByZWNpc2lvbikpKSA6IG9yaWdpbmFsKTtcbiAgICB9O1xuXG4gICAgY29uc3QgdGhhdCA9IHtcbiAgICAgICAgaCwgcywgdiwgYSxcblxuICAgICAgICB0b0hTVkEoKSB7XG4gICAgICAgICAgICBjb25zdCBoc3ZhID0gW3RoYXQuaCwgdGhhdC5zLCB0aGF0LnYsIHRoYXQuYV07XG4gICAgICAgICAgICBoc3ZhLnRvU3RyaW5nID0gbWFwcGVyKGhzdmEsIGFyciA9PiBgaHN2YSgke2FyclswXX0sICR7YXJyWzFdfSUsICR7YXJyWzJdfSUsICR7dGhhdC5hfSlgKTtcbiAgICAgICAgICAgIHJldHVybiBoc3ZhO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRvSFNMQSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGhzbGEgPSBbLi4uaHN2VG9Ic2wodGhhdC5oLCB0aGF0LnMsIHRoYXQudiksIHRoYXQuYV07XG4gICAgICAgICAgICBoc2xhLnRvU3RyaW5nID0gbWFwcGVyKGhzbGEsIGFyciA9PiBgaHNsYSgke2FyclswXX0sICR7YXJyWzFdfSUsICR7YXJyWzJdfSUsICR7dGhhdC5hfSlgKTtcbiAgICAgICAgICAgIHJldHVybiBoc2xhO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRvUkdCQSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJnYmEgPSBbLi4uaHN2VG9SZ2IodGhhdC5oLCB0aGF0LnMsIHRoYXQudiksIHRoYXQuYV07XG4gICAgICAgICAgICByZ2JhLnRvU3RyaW5nID0gbWFwcGVyKHJnYmEsIGFyciA9PiBgcmdiYSgke2FyclswXX0sICR7YXJyWzFdfSwgJHthcnJbMl19LCAke3RoYXQuYX0pYCk7XG4gICAgICAgICAgICByZXR1cm4gcmdiYTtcbiAgICAgICAgfSxcblxuICAgICAgICB0b0NNWUsoKSB7XG4gICAgICAgICAgICBjb25zdCBjbXlrID0gaHN2VG9DbXlrKHRoYXQuaCwgdGhhdC5zLCB0aGF0LnYpO1xuICAgICAgICAgICAgY215ay50b1N0cmluZyA9IG1hcHBlcihjbXlrLCBhcnIgPT4gYGNteWsoJHthcnJbMF19JSwgJHthcnJbMV19JSwgJHthcnJbMl19JSwgJHthcnJbM119JSlgKTtcbiAgICAgICAgICAgIHJldHVybiBjbXlrO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRvSEVYQSgpIHtcbiAgICAgICAgICAgIGNvbnN0IGhleCA9IGhzdlRvSGV4KHRoYXQuaCwgdGhhdC5zLCB0aGF0LnYpO1xuXG4gICAgICAgICAgICAvLyBDaGVjayBpZiBhbHBoYSBjaGFubmVsIG1ha2Ugc2Vuc2UsIGNvbnZlcnQgaXQgdG8gMjU1IG51bWJlciBzcGFjZSwgY29udmVydFxuICAgICAgICAgICAgLy8gVG8gaGV4IGFuZCBwYWQgaXQgd2l0aCB6ZXJvcyBpZiBuZWVkZXQuXG4gICAgICAgICAgICBjb25zdCBhbHBoYSA9IHRoYXQuYSA+PSAxID8gJycgOiBOdW1iZXIoKHRoYXQuYSAqIDI1NSkudG9GaXhlZCgwKSlcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKCkucGFkU3RhcnQoMiwgJzAnKTtcblxuICAgICAgICAgICAgYWxwaGEgJiYgaGV4LnB1c2goYWxwaGEpO1xuICAgICAgICAgICAgaGV4LnRvU3RyaW5nID0gKCkgPT4gYCMke2hleC5qb2luKCcnKS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgICAgICByZXR1cm4gaGV4O1xuICAgICAgICB9LFxuXG4gICAgICAgIGNsb25lOiAoKSA9PiBIU1ZhQ29sb3IodGhhdC5oLCB0aGF0LnMsIHRoYXQudiwgdGhhdC5hKVxuICAgIH07XG5cbiAgICByZXR1cm4gdGhhdDtcbn1cbiIsICJpbXBvcnQgKiBhcyBfIGZyb20gJy4uL3V0aWxzL3V0aWxzJztcblxuY29uc3QgY2xhbXAgPSB2ID0+IE1hdGgubWF4KE1hdGgubWluKHYsIDEpLCAwKTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vdmVhYmxlKG9wdCkge1xuXG4gICAgY29uc3QgdGhhdCA9IHtcblxuICAgICAgICAvLyBBc3NpZ24gZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBsb2NrOiBudWxsLFxuICAgICAgICAgICAgb25jaGFuZ2U6ICgpID0+IDAsXG4gICAgICAgICAgICBvbnN0b3A6ICgpID0+IDBcbiAgICAgICAgfSwgb3B0KSxcblxuICAgICAgICBfa2V5Ym9hcmQoZSkge1xuICAgICAgICAgICAgY29uc3Qge29wdGlvbnN9ID0gdGhhdDtcbiAgICAgICAgICAgIGNvbnN0IHt0eXBlLCBrZXl9ID0gZTtcblxuICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBNb3ZhYmxlIGlzIGZvY3VzZWQgYW5kIHRoZW4gbW92ZSBpdCBiYXNlZCBvbiBhcnJvdyBrZXkgaW5wdXRzXG4gICAgICAgICAgICAvLyBGb3IgaW1wcm92ZWQgYWNjZXNzaWJpbGl0eVxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IG9wdGlvbnMud3JhcHBlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtsb2NrfSA9IHRoYXQub3B0aW9ucztcbiAgICAgICAgICAgICAgICBjb25zdCB1cCA9IGtleSA9PT0gJ0Fycm93VXAnO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0ga2V5ID09PSAnQXJyb3dSaWdodCc7XG4gICAgICAgICAgICAgICAgY29uc3QgZG93biA9IGtleSA9PT0gJ0Fycm93RG93bic7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdCA9IGtleSA9PT0gJ0Fycm93TGVmdCc7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2tleWRvd24nICYmICh1cCB8fCByaWdodCB8fCBkb3duIHx8IGxlZnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4bSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGxldCB5bSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2sgPT09ICd2Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgeG0gPSAodXAgfHwgcmlnaHQpID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2sgPT09ICdoJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgeG0gPSAodXAgfHwgcmlnaHQpID8gLTEgOiAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgeW0gPSB1cCA/IC0xIDogKGRvd24gPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB4bSA9IGxlZnQgPyAtMSA6IChyaWdodCA/IDEgOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoYXQudXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhbXAodGhhdC5jYWNoZS54ICsgKDAuMDEgKiB4bSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhbXAodGhhdC5jYWNoZS55ICsgKDAuMDEgKiB5bSkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS5zdGFydHNXaXRoKCdBcnJvdycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoYXQub3B0aW9ucy5vbnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfdGFwc3RhcnQoZXZ0KSB7XG4gICAgICAgICAgICBfLm9uKGRvY3VtZW50LCBbJ21vdXNldXAnLCAndG91Y2hlbmQnLCAndG91Y2hjYW5jZWwnXSwgdGhhdC5fdGFwc3RvcCk7XG4gICAgICAgICAgICBfLm9uKGRvY3VtZW50LCBbJ21vdXNlbW92ZScsICd0b3VjaG1vdmUnXSwgdGhhdC5fdGFwbW92ZSk7XG5cbiAgICAgICAgICAgIGlmIChldnQuY2FuY2VsYWJsZSkge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUcmlnZ2VyXG4gICAgICAgICAgICB0aGF0Ll90YXBtb3ZlKGV2dCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX3RhcG1vdmUoZXZ0KSB7XG4gICAgICAgICAgICBjb25zdCB7b3B0aW9ucywgY2FjaGV9ID0gdGhhdDtcbiAgICAgICAgICAgIGNvbnN0IHtsb2NrLCBlbGVtZW50LCB3cmFwcGVyfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBiID0gd3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgbGV0IHggPSAwLCB5ID0gMDtcbiAgICAgICAgICAgIGlmIChldnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3VjaCA9IGV2dCAmJiBldnQudG91Y2hlcyAmJiBldnQudG91Y2hlc1swXTtcbiAgICAgICAgICAgICAgICB4ID0gZXZ0ID8gKHRvdWNoIHx8IGV2dCkuY2xpZW50WCA6IDA7XG4gICAgICAgICAgICAgICAgeSA9IGV2dCA/ICh0b3VjaCB8fCBldnQpLmNsaWVudFkgOiAwO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgdG8gYm91bmRzXG4gICAgICAgICAgICAgICAgaWYgKHggPCBiLmxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgeCA9IGIubGVmdDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHggPiBiLmxlZnQgKyBiLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHggPSBiLmxlZnQgKyBiLndpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoeSA8IGIudG9wKSB7XG4gICAgICAgICAgICAgICAgICAgIHkgPSBiLnRvcDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHkgPiBiLnRvcCArIGIuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHkgPSBiLnRvcCArIGIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZVxuICAgICAgICAgICAgICAgIHggLT0gYi5sZWZ0O1xuICAgICAgICAgICAgICAgIHkgLT0gYi50b3A7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNhY2hlKSB7XG4gICAgICAgICAgICAgICAgeCA9IGNhY2hlLnggKiBiLndpZHRoO1xuICAgICAgICAgICAgICAgIHkgPSBjYWNoZS55ICogYi5oZWlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsb2NrICE9PSAnaCcpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgY2FsYygke3ggLyBiLndpZHRoICogMTAwfSUgLSAke2VsZW1lbnQub2Zmc2V0V2lkdGggLyAyfXB4KWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsb2NrICE9PSAndicpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IGBjYWxjKCR7eSAvIGIuaGVpZ2h0ICogMTAwfSUgLSAke2VsZW1lbnQub2Zmc2V0SGVpZ2h0IC8gMn1weClgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGF0LmNhY2hlID0ge3g6IHggLyBiLndpZHRoLCB5OiB5IC8gYi5oZWlnaHR9O1xuICAgICAgICAgICAgY29uc3QgY3ggPSBjbGFtcCh4IC8gYi53aWR0aCk7XG4gICAgICAgICAgICBjb25zdCBjeSA9IGNsYW1wKHkgLyBiLmhlaWdodCk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAobG9jaykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3YnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5vbmNoYW5nZShjeCk7XG4gICAgICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLm9uY2hhbmdlKGN5KTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5vbmNoYW5nZShjeCwgY3kpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIF90YXBzdG9wKCkge1xuICAgICAgICAgICAgdGhhdC5vcHRpb25zLm9uc3RvcCgpO1xuICAgICAgICAgICAgXy5vZmYoZG9jdW1lbnQsIFsnbW91c2V1cCcsICd0b3VjaGVuZCcsICd0b3VjaGNhbmNlbCddLCB0aGF0Ll90YXBzdG9wKTtcbiAgICAgICAgICAgIF8ub2ZmKGRvY3VtZW50LCBbJ21vdXNlbW92ZScsICd0b3VjaG1vdmUnXSwgdGhhdC5fdGFwbW92ZSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgdHJpZ2dlcigpIHtcbiAgICAgICAgICAgIHRoYXQuX3RhcG1vdmUoKTtcbiAgICAgICAgfSxcblxuICAgICAgICB1cGRhdGUoeCA9IDAsIHkgPSAwKSB7XG4gICAgICAgICAgICBjb25zdCB7bGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0fSA9IHRoYXQub3B0aW9ucy53cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICBpZiAodGhhdC5vcHRpb25zLmxvY2sgPT09ICdoJykge1xuICAgICAgICAgICAgICAgIHkgPSB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGF0Ll90YXBtb3ZlKHtcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBsZWZ0ICsgd2lkdGggKiB4LFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IHRvcCArIGhlaWdodCAqIHlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICBjb25zdCB7b3B0aW9ucywgX3RhcHN0YXJ0LCBfa2V5Ym9hcmR9ID0gdGhhdDtcbiAgICAgICAgICAgIF8ub2ZmKGRvY3VtZW50LCBbJ2tleWRvd24nLCAna2V5dXAnXSwgX2tleWJvYXJkKTtcbiAgICAgICAgICAgIF8ub2ZmKFtvcHRpb25zLndyYXBwZXIsIG9wdGlvbnMuZWxlbWVudF0sICdtb3VzZWRvd24nLCBfdGFwc3RhcnQpO1xuICAgICAgICAgICAgXy5vZmYoW29wdGlvbnMud3JhcHBlciwgb3B0aW9ucy5lbGVtZW50XSwgJ3RvdWNoc3RhcnQnLCBfdGFwc3RhcnQsIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gSW5pdGlsaXplXG4gICAgY29uc3Qge29wdGlvbnMsIF90YXBzdGFydCwgX2tleWJvYXJkfSA9IHRoYXQ7XG4gICAgXy5vbihbb3B0aW9ucy53cmFwcGVyLCBvcHRpb25zLmVsZW1lbnRdLCAnbW91c2Vkb3duJywgX3RhcHN0YXJ0KTtcbiAgICBfLm9uKFtvcHRpb25zLndyYXBwZXIsIG9wdGlvbnMuZWxlbWVudF0sICd0b3VjaHN0YXJ0JywgX3RhcHN0YXJ0LCB7XG4gICAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBfLm9uKGRvY3VtZW50LCBbJ2tleWRvd24nLCAna2V5dXAnXSwgX2tleWJvYXJkKTtcblxuICAgIHJldHVybiB0aGF0O1xufVxuIiwgImltcG9ydCAqIGFzIF8gZnJvbSAnLi4vdXRpbHMvdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTZWxlY3RhYmxlKG9wdCA9IHt9KSB7XG4gICAgb3B0ID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIG9uY2hhbmdlOiAoKSA9PiAwLFxuICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICBlbGVtZW50czogW11cbiAgICB9LCBvcHQpO1xuXG4gICAgY29uc3Qgb25UYXAgPSBfLm9uKG9wdC5lbGVtZW50cywgJ2NsaWNrJywgZXZ0ID0+IHtcbiAgICAgICAgb3B0LmVsZW1lbnRzLmZvckVhY2goZSA9PlxuICAgICAgICAgICAgZS5jbGFzc0xpc3RbZXZ0LnRhcmdldCA9PT0gZSA/ICdhZGQnIDogJ3JlbW92ZSddKG9wdC5jbGFzc05hbWUpXG4gICAgICAgICk7XG5cbiAgICAgICAgb3B0Lm9uY2hhbmdlKGV2dCk7XG5cbiAgICAgICAgLy8gRml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vU2ltb253ZXAvcGlja3IvaXNzdWVzLzI0M1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBkZXN0cm95OiAoKSA9PiBfLm9mZiguLi5vblRhcClcbiAgICB9O1xufVxuIiwgImltcG9ydCAqIGFzIF8gZnJvbSAnLi91dGlscy91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3RhbmNlID0+IHtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgdXNlQXNCdXR0b24sXG4gICAgICAgIGlubGluZSxcbiAgICAgICAgYXBwQ2xhc3MsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBsb2NrT3BhY2l0eVxuICAgIH0gPSBpbnN0YW5jZS5vcHRpb25zO1xuXG4gICAgLy8gVXRpbHNcbiAgICBjb25zdCBoaWRkZW4gPSBjb24gPT4gY29uID8gJycgOiAnc3R5bGU9XCJkaXNwbGF5Om5vbmVcIiBoaWRkZW4nO1xuICAgIGNvbnN0IHQgPSBzdHIgPT4gaW5zdGFuY2UuX3Qoc3RyKTtcblxuICAgIGNvbnN0IHJvb3QgPSBfLmNyZWF0ZUZyb21UZW1wbGF0ZShgXG4gICAgICA8ZGl2IDpyZWY9XCJyb290XCIgY2xhc3M9XCJwaWNrclwiPlxuXG4gICAgICAgICR7dXNlQXNCdXR0b24gPyAnJyA6ICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiA6cmVmPVwiYnV0dG9uXCIgY2xhc3M9XCJwY3ItYnV0dG9uXCI+PC9idXR0b24+J31cblxuICAgICAgICA8ZGl2IDpyZWY9XCJhcHBcIiBjbGFzcz1cInBjci1hcHAgJHthcHBDbGFzcyB8fCAnJ31cIiBkYXRhLXRoZW1lPVwiJHt0aGVtZX1cIiAke2lubGluZSA/ICdzdHlsZT1cInBvc2l0aW9uOiB1bnNldFwiJyA6ICcnfSBhcmlhLWxhYmVsPVwiJHt0KCd1aTpkaWFsb2cnLCAnY29sb3IgcGlja2VyIGRpYWxvZycpfVwiIHJvbGU9XCJ3aW5kb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicGNyLXNlbGVjdGlvblwiICR7aGlkZGVuKGNvbXBvbmVudHMucGFsZXR0ZSl9PlxuICAgICAgICAgICAgPGRpdiA6b2JqPVwicHJldmlld1wiIGNsYXNzPVwicGNyLWNvbG9yLXByZXZpZXdcIiAke2hpZGRlbihjb21wb25lbnRzLnByZXZpZXcpfT5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgOnJlZj1cImxhc3RDb2xvclwiIGNsYXNzPVwicGNyLWxhc3QtY29sb3JcIiBhcmlhLWxhYmVsPVwiJHt0KCdidG46bGFzdC1jb2xvcicpfVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8ZGl2IDpyZWY9XCJjdXJyZW50Q29sb3JcIiBjbGFzcz1cInBjci1jdXJyZW50LWNvbG9yXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiA6b2JqPVwicGFsZXR0ZVwiIGNsYXNzPVwicGNyLWNvbG9yLXBhbGV0dGVcIj5cbiAgICAgICAgICAgICAgPGRpdiA6cmVmPVwicGlja2VyXCIgY2xhc3M9XCJwY3ItcGlja2VyXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgOnJlZj1cInBhbGV0dGVcIiBjbGFzcz1cInBjci1wYWxldHRlXCIgdGFiaW5kZXg9XCIwXCIgYXJpYS1sYWJlbD1cIiR7dCgnYXJpYTpwYWxldHRlJyl9XCIgcm9sZT1cImxpc3Rib3hcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IDpvYmo9XCJodWVcIiBjbGFzcz1cInBjci1jb2xvci1jaG9vc2VyXCIgJHtoaWRkZW4oY29tcG9uZW50cy5odWUpfT5cbiAgICAgICAgICAgICAgPGRpdiA6cmVmPVwicGlja2VyXCIgY2xhc3M9XCJwY3ItcGlja2VyXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgOnJlZj1cInNsaWRlclwiIGNsYXNzPVwicGNyLWh1ZSBwY3Itc2xpZGVyXCIgdGFiaW5kZXg9XCIwXCIgYXJpYS1sYWJlbD1cIiR7dCgnYXJpYTpodWUnKX1cIiByb2xlPVwic2xpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiA6b2JqPVwib3BhY2l0eVwiIGNsYXNzPVwicGNyLWNvbG9yLW9wYWNpdHlcIiAke2hpZGRlbihjb21wb25lbnRzLm9wYWNpdHkpfT5cbiAgICAgICAgICAgICAgPGRpdiA6cmVmPVwicGlja2VyXCIgY2xhc3M9XCJwY3ItcGlja2VyXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgOnJlZj1cInNsaWRlclwiIGNsYXNzPVwicGNyLW9wYWNpdHkgcGNyLXNsaWRlclwiIHRhYmluZGV4PVwiMFwiIGFyaWEtbGFiZWw9XCIke3QoJ2FyaWE6b3BhY2l0eScsICdvcGFjaXR5IHNlbGVjdGlvbiBzbGlkZXInKX1cIiByb2xlPVwic2xpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwY3Itc3dhdGNoZXMgJHtjb21wb25lbnRzLnBhbGV0dGUgPyAnJyA6ICdwY3ItbGFzdCd9XCIgOnJlZj1cInN3YXRjaGVzXCI+PC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IDpvYmo9XCJpbnRlcmFjdGlvblwiIGNsYXNzPVwicGNyLWludGVyYWN0aW9uXCIgJHtoaWRkZW4oT2JqZWN0LmtleXMoY29tcG9uZW50cy5pbnRlcmFjdGlvbikubGVuZ3RoKX0+XG4gICAgICAgICAgICA8aW5wdXQgOnJlZj1cInJlc3VsdFwiIGNsYXNzPVwicGNyLXJlc3VsdFwiIHR5cGU9XCJ0ZXh0XCIgc3BlbGxjaGVjaz1cImZhbHNlXCIgJHtoaWRkZW4oY29tcG9uZW50cy5pbnRlcmFjdGlvbi5pbnB1dCl9IGFyaWEtbGFiZWw9XCIke3QoJ2FyaWE6aW5wdXQnLCAnY29sb3IgaW5wdXQgZmllbGQnKX1cIj5cblxuICAgICAgICAgICAgPGlucHV0IDphcnI9XCJvcHRpb25zXCIgY2xhc3M9XCJwY3ItdHlwZVwiIGRhdGEtdHlwZT1cIkhFWEFcIiB2YWx1ZT1cIiR7bG9ja09wYWNpdHkgPyAnSEVYJyA6ICdIRVhBJ31cIiB0eXBlPVwiYnV0dG9uXCIgJHtoaWRkZW4oY29tcG9uZW50cy5pbnRlcmFjdGlvbi5oZXgpfT5cbiAgICAgICAgICAgIDxpbnB1dCA6YXJyPVwib3B0aW9uc1wiIGNsYXNzPVwicGNyLXR5cGVcIiBkYXRhLXR5cGU9XCJSR0JBXCIgdmFsdWU9XCIke2xvY2tPcGFjaXR5ID8gJ1JHQicgOiAnUkdCQSd9XCIgdHlwZT1cImJ1dHRvblwiICR7aGlkZGVuKGNvbXBvbmVudHMuaW50ZXJhY3Rpb24ucmdiYSl9PlxuICAgICAgICAgICAgPGlucHV0IDphcnI9XCJvcHRpb25zXCIgY2xhc3M9XCJwY3ItdHlwZVwiIGRhdGEtdHlwZT1cIkhTTEFcIiB2YWx1ZT1cIiR7bG9ja09wYWNpdHkgPyAnSFNMJyA6ICdIU0xBJ31cIiB0eXBlPVwiYnV0dG9uXCIgJHtoaWRkZW4oY29tcG9uZW50cy5pbnRlcmFjdGlvbi5oc2xhKX0+XG4gICAgICAgICAgICA8aW5wdXQgOmFycj1cIm9wdGlvbnNcIiBjbGFzcz1cInBjci10eXBlXCIgZGF0YS10eXBlPVwiSFNWQVwiIHZhbHVlPVwiJHtsb2NrT3BhY2l0eSA/ICdIU1YnIDogJ0hTVkEnfVwiIHR5cGU9XCJidXR0b25cIiAke2hpZGRlbihjb21wb25lbnRzLmludGVyYWN0aW9uLmhzdmEpfT5cbiAgICAgICAgICAgIDxpbnB1dCA6YXJyPVwib3B0aW9uc1wiIGNsYXNzPVwicGNyLXR5cGVcIiBkYXRhLXR5cGU9XCJDTVlLXCIgdmFsdWU9XCJDTVlLXCIgdHlwZT1cImJ1dHRvblwiICR7aGlkZGVuKGNvbXBvbmVudHMuaW50ZXJhY3Rpb24uY215ayl9PlxuXG4gICAgICAgICAgICA8aW5wdXQgOnJlZj1cInNhdmVcIiBjbGFzcz1cInBjci1zYXZlXCIgdmFsdWU9XCIke3QoJ2J0bjpzYXZlJyl9XCIgdHlwZT1cImJ1dHRvblwiICR7aGlkZGVuKGNvbXBvbmVudHMuaW50ZXJhY3Rpb24uc2F2ZSl9IGFyaWEtbGFiZWw9XCIke3QoJ2FyaWE6YnRuOnNhdmUnKX1cIj5cbiAgICAgICAgICAgIDxpbnB1dCA6cmVmPVwiY2FuY2VsXCIgY2xhc3M9XCJwY3ItY2FuY2VsXCIgdmFsdWU9XCIke3QoJ2J0bjpjYW5jZWwnKX1cIiB0eXBlPVwiYnV0dG9uXCIgJHtoaWRkZW4oY29tcG9uZW50cy5pbnRlcmFjdGlvbi5jYW5jZWwpfSBhcmlhLWxhYmVsPVwiJHt0KCdhcmlhOmJ0bjpjYW5jZWwnKX1cIj5cbiAgICAgICAgICAgIDxpbnB1dCA6cmVmPVwiY2xlYXJcIiBjbGFzcz1cInBjci1jbGVhclwiIHZhbHVlPVwiJHt0KCdidG46Y2xlYXInKX1cIiB0eXBlPVwiYnV0dG9uXCIgJHtoaWRkZW4oY29tcG9uZW50cy5pbnRlcmFjdGlvbi5jbGVhcil9IGFyaWEtbGFiZWw9XCIke3QoJ2FyaWE6YnRuOmNsZWFyJyl9XCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYCk7XG5cbiAgICBjb25zdCBpbnQgPSByb290LmludGVyYWN0aW9uO1xuXG4gICAgLy8gU2VsZWN0IG9wdGlvbiB3aGljaCBpcyBub3QgaGlkZGVuXG4gICAgaW50Lm9wdGlvbnMuZmluZChvID0+ICFvLmhpZGRlbiAmJiAhby5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKSk7XG5cbiAgICAvLyBBcHBlbmQgbWV0aG9kIHRvIGZpbmQgY3VycmVudGx5IGFjdGl2ZSBvcHRpb25cbiAgICBpbnQudHlwZSA9ICgpID0+IGludC5vcHRpb25zLmZpbmQoZSA9PiBlLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpO1xuICAgIHJldHVybiByb290O1xufTtcbiIsICJ0eXBlIERpcmVjdGlvbiA9ICd0b3AnIHwgJ2xlZnQnIHwgJ2JvdHRvbScgfCAncmlnaHQnO1xudHlwZSBBbGlnbm1lbnQgPSAnc3RhcnQnIHwgJ21pZGRsZScgfCAnZW5kJztcblxuZXhwb3J0IHR5cGUgVmFyaWFudEZsaXBPcmRlciA9IHtcbiAgICBzdGFydDogc3RyaW5nO1xuICAgIG1pZGRsZTogc3RyaW5nO1xuICAgIGVuZDogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUG9zaXRpb25GbGlwT3JkZXIgPSB7XG4gICAgdG9wOiBzdHJpbmc7XG4gICAgcmlnaHQ6IHN0cmluZztcbiAgICBib3R0b206IHN0cmluZztcbiAgICBsZWZ0OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBOYW5vUG9wUG9zaXRpb24gPSBgJHtEaXJlY3Rpb259LSR7QWxpZ25tZW50fWAgfCBEaXJlY3Rpb247XG5cbmV4cG9ydCB0eXBlIE5hbm9Qb3BPcHRpb25zID0ge1xuICAgIGNvbnRhaW5lcjogRE9NUmVjdDtcbiAgICBwb3NpdGlvbjogTmFub1BvcFBvc2l0aW9uO1xuICAgIHZhcmlhbnRGbGlwT3JkZXI6IFZhcmlhbnRGbGlwT3JkZXI7XG4gICAgcG9zaXRpb25GbGlwT3JkZXI6IFBvc2l0aW9uRmxpcE9yZGVyO1xuICAgIG1hcmdpbjogbnVtYmVyO1xuICAgIHJlZmVyZW5jZT86IEhUTUxFbGVtZW50O1xuICAgIHBvcHBlcj86IEhUTUxFbGVtZW50O1xuICAgIGFycm93PzogSFRNTEVsZW1lbnQ7XG4gICAgcGFkZGluZz86IG51bWJlcjtcbn07XG5cbnR5cGUgQXZhaWxhYmxlUG9zaXRpb25zID0ge1xuICAgIHQ6IG51bWJlcjtcbiAgICBiOiBudW1iZXI7XG4gICAgbDogbnVtYmVyO1xuICAgIHI6IG51bWJlcjtcbn07XG5cbnR5cGUgQXZhaWxhYmxlVmFyaWFudHMgPSB7XG4gICAgdnM6IG51bWJlcjtcbiAgICB2bTogbnVtYmVyO1xuICAgIHZlOiBudW1iZXI7XG4gICAgaHM6IG51bWJlcjtcbiAgICBobTogbnVtYmVyO1xuICAgIGhlOiBudW1iZXI7XG59O1xuXG50eXBlIFBvc2l0aW9uUGFpcnMgPSBbRGlyZWN0aW9uLCBEaXJlY3Rpb25dO1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbk1hdGNoID0gJ3RzJyB8ICd0bScgfCAndGUnIHwgJ2JzJyB8ICdibScgfCAnYmUnIHwgJ2xzJyB8ICdsbScgfCAnbGUnIHwgJ3JzJyB8ICdybScgfCAncmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hbm9Qb3Age1xuICAgIHVwZGF0ZSh1cGRhdGVkT3B0aW9ucz86IFBhcnRpYWw8TmFub1BvcE9wdGlvbnM+KTogUG9zaXRpb25NYXRjaCB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmFub1BvcENvbnN0cnVjdG9yIHtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSByZWZlcmVuY2UgUmVmZXJlbmNlIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gcG9wcGVyIEFjdHVhbCBwb3BwZXIgZWxlbWVudFxuICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnNcbiAgICAgKi9cbiAgICAocmVmZXJlbmNlOiBIVE1MRWxlbWVudCwgcG9wcGVyOiBIVE1MRWxlbWVudCwgb3B0aW9ucz86IFBhcnRpYWw8TmFub1BvcE9wdGlvbnM+KTogTmFub1BvcDtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFBhcnRpYWwgb3B0aW9ucyB3aGljaCBnZXQgbWVyZ2VkIHdpdGggdGhlIGN1cnJlbnQgb25lXG4gICAgICovXG4gICAgKG9wdGlvbnM/OiBQYXJ0aWFsPE5hbm9Qb3BPcHRpb25zPik6IE5hbm9Qb3A7XG59XG5cbi8vIEV4cG9ydCBjdXJyZW50IHZlcnNpb25cbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gVkVSU0lPTjtcblxuLy8gRXhwb3J0IGRlZmF1bHRcbmV4cG9ydCBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICB2YXJpYW50RmxpcE9yZGVyOiB7c3RhcnQ6ICdzbWUnLCBtaWRkbGU6ICdtc2UnLCBlbmQ6ICdlbXMnfSxcbiAgICBwb3NpdGlvbkZsaXBPcmRlcjoge3RvcDogJ3RicmwnLCByaWdodDogJ3JsdGInLCBib3R0b206ICdidHJsJywgbGVmdDogJ2xyYnQnfSxcbiAgICBwb3NpdGlvbjogJ2JvdHRvbScsXG4gICAgbWFyZ2luOiA4LFxuICAgIHBhZGRpbmc6IDBcbn07XG5cbi8qKlxuICogUmVwb3NpdGlvbnMgYW4gZWxlbWVudCBvbmNlIHVzaW5nIHRoZSBwcm92aWRlZCBvcHRpb25zIGFuZCBlbGVtZW50cy5cbiAqIEBwYXJhbSByZWZlcmVuY2UgUmVmZXJlbmNlIGVsZW1lbnRcbiAqIEBwYXJhbSBwb3BwZXIgUG9wcGVyIGVsZW1lbnRcbiAqIEBwYXJhbSBvcHQgT3B0aW9uYWwsIGFkZGl0aW9uYWwgb3B0aW9uc1xuICovXG5leHBvcnQgY29uc3QgcmVwb3NpdGlvbiA9IChcbiAgICByZWZlcmVuY2U6IEhUTUxFbGVtZW50LFxuICAgIHBvcHBlcjogSFRNTEVsZW1lbnQsXG4gICAgb3B0PzogUGFydGlhbDxOYW5vUG9wT3B0aW9ucz5cbik6IFBvc2l0aW9uTWF0Y2ggfCBudWxsID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgYXJyb3csXG4gICAgICAgIG1hcmdpbixcbiAgICAgICAgcGFkZGluZyxcbiAgICAgICAgcG9zaXRpb24sXG4gICAgICAgIHZhcmlhbnRGbGlwT3JkZXIsXG4gICAgICAgIHBvc2l0aW9uRmxpcE9yZGVyXG4gICAgfSA9IHtcbiAgICAgICAgY29udGFpbmVyOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIC4uLmRlZmF1bHRzLFxuICAgICAgICAuLi5vcHRcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVzZXQgcG9zaXRpb24gdG8gcmVzb2x2ZSB2aWV3cG9ydFxuICAgICAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvcG9zaXRpb24jZml4ZWRcbiAgICAgKi9cbiAgICBjb25zdCB7bGVmdDogb3JpZ2luYWxMZWZ0LCB0b3A6IG9yaWdpbmFsVG9wfSA9IHBvcHBlci5zdHlsZTtcbiAgICBwb3BwZXIuc3R5bGUubGVmdCA9ICcwJztcbiAgICBwb3BwZXIuc3R5bGUudG9wID0gJzAnO1xuXG4gICAgY29uc3QgcmVmQm94ID0gcmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHBvcEJveCA9IHBvcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIGNvb3JkaW5hdGVzIG9mIHRvcCwgbGVmdCwgYm90dG9tIGFuZCByaWdodCBhbGlnbm1lbnRcbiAgICAgKi9cbiAgICBjb25zdCBwb3NpdGlvblN0b3JlOiBBdmFpbGFibGVQb3NpdGlvbnMgPSB7XG4gICAgICAgIHQ6IHJlZkJveC50b3AgLSBwb3BCb3guaGVpZ2h0IC0gbWFyZ2luLFxuICAgICAgICBiOiByZWZCb3guYm90dG9tICsgbWFyZ2luLFxuICAgICAgICByOiByZWZCb3gucmlnaHQgKyBtYXJnaW4sXG4gICAgICAgIGw6IHJlZkJveC5sZWZ0IC0gcG9wQm94LndpZHRoIC0gbWFyZ2luXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIGNvcnJlc3BvbmRpbmcgdmFyaWFudHMgKHN0YXJ0LCBtaWRkbGUsIGVuZCkuXG4gICAgICogVGhlIHZhbHVlcyBkZXBlbmQgb24gaG9yaXpvbnRhbCAvIHZlcnRpY2FsIG9yaWVudGF0aW9uXG4gICAgICovXG4gICAgY29uc3QgdmFyaWFudFN0b3JlOiBBdmFpbGFibGVWYXJpYW50cyA9IHtcbiAgICAgICAgdnM6IHJlZkJveC5sZWZ0LFxuICAgICAgICB2bTogcmVmQm94LmxlZnQgKyByZWZCb3gud2lkdGggLyAyIC0gcG9wQm94LndpZHRoIC8gMixcbiAgICAgICAgdmU6IHJlZkJveC5sZWZ0ICsgcmVmQm94LndpZHRoIC0gcG9wQm94LndpZHRoLFxuICAgICAgICBoczogcmVmQm94LnRvcCxcbiAgICAgICAgaG06IHJlZkJveC5ib3R0b20gLSByZWZCb3guaGVpZ2h0IC8gMiAtIHBvcEJveC5oZWlnaHQgLyAyLFxuICAgICAgICBoZTogcmVmQm94LmJvdHRvbSAtIHBvcEJveC5oZWlnaHRcbiAgICB9O1xuXG4gICAgLy8gRXh0cmFjdCBwb3NpdGlvbiBhbmQgdmFyaWFudFxuICAgIC8vIFRvcC1zdGFydCAtPiB0b3AgaXMgXCJwb3NpdGlvblwiIGFuZCBcInN0YXJ0XCIgaXMgdGhlIHZhcmlhbnRcbiAgICBjb25zdCBbcG9zS2V5LCB2YXJLZXkgPSAnbWlkZGxlJ10gPSBwb3NpdGlvbi5zcGxpdCgnLScpO1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IHBvc2l0aW9uRmxpcE9yZGVyW3Bvc0tleSBhcyBrZXlvZiBQb3NpdGlvbkZsaXBPcmRlcl07XG4gICAgY29uc3QgdmFyaWFudHMgPSB2YXJpYW50RmxpcE9yZGVyW3ZhcktleSBhcyBrZXlvZiBWYXJpYW50RmxpcE9yZGVyXTtcblxuICAgIC8vIFRyeSBvdXQgYWxsIHBvc3NpYmxlIGNvbWJpbmF0aW9ucywgc3RhcnRpbmcgd2l0aCB0aGUgcHJlZmVycmVkIG9uZS5cbiAgICBjb25zdCB7dG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0fSA9IGNvbnRhaW5lcjtcblxuICAgIGZvciAoY29uc3QgcCBvZiBwb3NpdGlvbnMpIHtcbiAgICAgICAgY29uc3QgdmVydGljYWwgPSAocCA9PT0gJ3QnIHx8IHAgPT09ICdiJyk7XG5cbiAgICAgICAgLy8gVGhlIHBvc2l0aW9uLXZhbHVlXG4gICAgICAgIGxldCBwb3NpdGlvblZhbCA9IHBvc2l0aW9uU3RvcmVbcCBhcyBrZXlvZiBBdmFpbGFibGVQb3NpdGlvbnNdO1xuXG4gICAgICAgIC8vIFdoaWNoIHByb3BlcnR5IGhhcyB0byBiZSBjaGFuZ2VzLlxuICAgICAgICBjb25zdCBbcG9zaXRpb25LZXksIHZhcmlhbnRLZXldID0gKHZlcnRpY2FsID8gWyd0b3AnLCAnbGVmdCddIDogWydsZWZ0JywgJ3RvcCddKSBhcyBQb3NpdGlvblBhaXJzO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBib3ggcmVmZXJzIHRvIHRoZSBzaXplIG9mIHRoZSBwb3BwZXIgZWxlbWVudC4gRGVwZW5kaW5nIG9uIHRoZSBvcmllbnRhdGlvbiB0aGlzIGlzIHdpZHRoIG9yIGhlaWdodC5cbiAgICAgICAgICogVGhlIGxpbWl0IGlzIHRoZSBjb3JyZXNwb25kaW5nLCBtYXhpbXVtIHZhbHVlIGZvciB0aGlzIHBvc2l0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgW3Bvc2l0aW9uU2l6ZSwgdmFyaWFudFNpemVdID0gdmVydGljYWwgPyBbcG9wQm94LmhlaWdodCwgcG9wQm94LndpZHRoXSA6IFtwb3BCb3gud2lkdGgsIHBvcEJveC5oZWlnaHRdO1xuXG4gICAgICAgIGNvbnN0IFtwb3NpdGlvbk1heGltdW0sIHZhcmlhbnRNYXhpbXVtXSA9IHZlcnRpY2FsID8gW2JvdHRvbSwgcmlnaHRdIDogW3JpZ2h0LCBib3R0b21dO1xuICAgICAgICBjb25zdCBbcG9zaXRpb25NaW5pbXVtLCB2YXJpYW50TWluaW11bV0gPSB2ZXJ0aWNhbCA/IFt0b3AsIGxlZnRdIDogW2xlZnQsIHRvcF07XG5cbiAgICAgICAgLy8gU2tpcCBwcmUtY2xpcHBlZCB2YWx1ZXNcbiAgICAgICAgaWYgKHBvc2l0aW9uVmFsIDwgcG9zaXRpb25NaW5pbXVtIHx8IChwb3NpdGlvblZhbCArIHBvc2l0aW9uU2l6ZSArIHBhZGRpbmcpID4gcG9zaXRpb25NYXhpbXVtKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgdiBvZiB2YXJpYW50cykge1xuXG4gICAgICAgICAgICAvLyBUaGUgcG9zaXRpb24tdmFsdWUsIHRoZSByZWxhdGVkIHNpemUgdmFsdWUgb2YgdGhlIHBvcHBlciBhbmQgdGhlIGxpbWl0XG4gICAgICAgICAgICBsZXQgdmFyaWFudFZhbCA9IHZhcmlhbnRTdG9yZVsoKHZlcnRpY2FsID8gJ3YnIDogJ2gnKSArIHYpIGFzIGtleW9mIEF2YWlsYWJsZVZhcmlhbnRzXTtcblxuICAgICAgICAgICAgaWYgKHZhcmlhbnRWYWwgPCB2YXJpYW50TWluaW11bSB8fCAodmFyaWFudFZhbCArIHZhcmlhbnRTaXplICsgcGFkZGluZykgPiB2YXJpYW50TWF4aW11bSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTdWJ0cmFjdCBwb3BCb3gncyBpbml0aWFsIHBvc2l0aW9uXG4gICAgICAgICAgICB2YXJpYW50VmFsIC09IHBvcEJveFt2YXJpYW50S2V5XTtcbiAgICAgICAgICAgIHBvc2l0aW9uVmFsIC09IHBvcEJveFtwb3NpdGlvbktleV07XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IHN0eWxlcyBhbmQgbm9ybWFsaXplIHZpZXdwb3J0XG4gICAgICAgICAgICBwb3BwZXIuc3R5bGVbdmFyaWFudEtleV0gPSBgJHt2YXJpYW50VmFsfXB4YDtcbiAgICAgICAgICAgIHBvcHBlci5zdHlsZVtwb3NpdGlvbktleV0gPSBgJHtwb3NpdGlvblZhbH1weGA7XG5cbiAgICAgICAgICAgIGlmIChhcnJvdykge1xuICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSByZWZCb3gncyBjZW50ZXIgb2Zmc2V0IGZyb20gaXRzIHZhcmlhbnQgcG9zaXRpb24gZm9yIGFycm93IHBvc2l0aW9uaW5nXG4gICAgICAgICAgICAgICAgY29uc3QgcmVmQm94Q2VudGVyT2Zmc2V0ID0gdmVydGljYWwgPyByZWZCb3gud2lkdGggLyAyIDogcmVmQm94LmhlaWdodCAvIDI7XG5cbiAgICAgICAgICAgICAgICAvLyBXaGVuIHJlZkJveCBpcyBsYXJnZXIgdGhhbiBwb3BCb3gsIGhhdmUgdGhlIGFycm93J3MgdmFyaWFudCBwb3NpdGlvbiBiZSB0aGUgY2VudGVyIG9mIHBvcEJveCBpbnN0ZWFkLlxuICAgICAgICAgICAgICAgIGNvbnN0IGFycm93VmFyaWFudFZhbCA9IHJlZkJveENlbnRlck9mZnNldCAqIDIgPCB2YXJpYW50U2l6ZSA/XG4gICAgICAgICAgICAgICAgICAgIHJlZkJveFt2YXJpYW50S2V5XSArIHJlZkJveENlbnRlck9mZnNldCA6IHZhcmlhbnRWYWwgKyB2YXJpYW50U2l6ZSAvIDI7XG5cbiAgICAgICAgICAgICAgICAvLyBBcnJvdyBwb3NpdGlvbiBpcyBlaXRoZXIgb24gb25lIHNpZGUgb2YgdGhlIHBvcEJveCBvciB0aGUgb3RoZXIuXG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uVmFsIDwgcmVmQm94W3Bvc2l0aW9uS2V5XSkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblZhbCArPSBwb3NpdGlvblNpemU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgc3R5bGVzIHRvIGFycm93XG4gICAgICAgICAgICAgICAgYXJyb3cuc3R5bGVbdmFyaWFudEtleV0gPSBgJHthcnJvd1ZhcmlhbnRWYWx9cHhgO1xuICAgICAgICAgICAgICAgIGFycm93LnN0eWxlW3Bvc2l0aW9uS2V5XSA9IGAke3Bvc2l0aW9uVmFsfXB4YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIChwICsgdikgYXMgUG9zaXRpb25NYXRjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldmVydCBzdHlsZSB2YWx1ZXMgKHdvbid0IHdvcmsgd2l0aCBzdHlsZWQtZWxlbWVudHMgb3Igc2ltaWxhciBzeXN0ZW1zKVxuICAgIC8vIFwiRml4XCIgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9TaW1vbndlcC9uYW5vcG9wL2lzc3Vlcy83XG4gICAgcG9wcGVyLnN0eWxlLmxlZnQgPSBvcmlnaW5hbExlZnQ7XG4gICAgcG9wcGVyLnN0eWxlLnRvcCA9IG9yaWdpbmFsVG9wO1xuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGF0ZWZ1bCBwb3BwZXIuXG4gKiBZb3UgY2FuIGVpdGhlci4uLlxuICogLi4uIHBhc3MgYW4gb3B0aW9ucyBvYmplY3Q6IGNyZWF0ZVBvcHBlcig8b3B0aW9ucz4pXG4gKiAuLi4gcGFzcyBib3RoIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlcjogY3JlYXRlKDxyZWY+LCA8ZWw+LCA8P29wdGlvbnM+KVxuICogLi4uIHBhc3Mgbm90aGluZywgaW4gdGhpcyBjYXNlIHlvdSdsbCBoYXZlIHRvIHNldCBhdCBsZWFzdCBib3RoIGEgcmVmZXJlbmNlIGFuZCBhIHBvcHBlciBpbiB1cGRhdGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSB8IG9wdGlvbnMgUmVmZXJlbmNlIGVsZW1lbnQgb3Igb3B0aW9uc1xuICogQHBhcmFtIHBvcHBlciBQb3BwZXIgZWxlbWVudFxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgYWRkaXRpb25hbCBvcHRpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVQb3BwZXI6IE5hbm9Qb3BDb25zdHJ1Y3RvciA9IChcbiAgICByZWZlcmVuY2U/OiBIVE1MRWxlbWVudCB8IFBhcnRpYWw8TmFub1BvcE9wdGlvbnM+LFxuICAgIHBvcHBlcj86IEhUTUxFbGVtZW50LFxuICAgIG9wdGlvbnM/OiBQYXJ0aWFsPE5hbm9Qb3BPcHRpb25zPlxuKTogTmFub1BvcCA9PiB7XG5cbiAgICAvLyBSZXNvbHZlIG9wdGlvbnNcbiAgICBjb25zdCBiYXNlT3B0aW9uczogUGFydGlhbDxOYW5vUG9wT3B0aW9ucz4gPSB0eXBlb2YgcmVmZXJlbmNlID09PSAnb2JqZWN0JyAmJiAhKHJlZmVyZW5jZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSA/XG4gICAgICAgIHJlZmVyZW5jZSA6IHtyZWZlcmVuY2UsIHBvcHBlciwgLi4ub3B0aW9uc307XG5cbiAgICByZXR1cm4ge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXBvc2l0aW9ucyB0aGUgY3VycmVudCBwb3BwZXIuXG4gICAgICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIG9wdGlvbnMgd2hpY2ggZ2V0IG1lcmdlZCB3aXRoIHRoZSBjdXJyZW50IG9uZXMuXG4gICAgICAgICAqL1xuICAgICAgICB1cGRhdGUob3B0aW9uczogUGFydGlhbDxOYW5vUG9wT3B0aW9ucz4gPSBiYXNlT3B0aW9ucyk6IFBvc2l0aW9uTWF0Y2ggfCBudWxsIHtcbiAgICAgICAgICAgIGNvbnN0IHtyZWZlcmVuY2UsIHBvcHBlcn0gPSBPYmplY3QuYXNzaWduKGJhc2VPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICAgICAgaWYgKCFwb3BwZXIgfHwgIXJlZmVyZW5jZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUG9wcGVyLSBvciByZWZlcmVuY2UtZWxlbWVudCBtaXNzaW5nLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVwb3NpdGlvbihyZWZlcmVuY2UsIHBvcHBlciwgYmFzZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG4iLCAiaW1wb3J0ICogYXMgXyBmcm9tICcuL3V0aWxzL3V0aWxzJztcbmltcG9ydCB7cGFyc2VUb0hTVkF9IGZyb20gJy4vdXRpbHMvY29sb3InO1xuaW1wb3J0IHtIU1ZhQ29sb3J9IGZyb20gJy4vdXRpbHMvaHN2YWNvbG9yJztcbmltcG9ydCBNb3ZlYWJsZSBmcm9tICcuL2xpYnMvbW92ZWFibGUnO1xuaW1wb3J0IFNlbGVjdGFibGUgZnJvbSAnLi9saWJzL3NlbGVjdGFibGUnO1xuaW1wb3J0IGJ1aWxkUGlja3IgZnJvbSAnLi90ZW1wbGF0ZSc7XG5pbXBvcnQge2NyZWF0ZVBvcHBlcn0gZnJvbSAnbmFub3BvcCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBpY2tyIHtcblxuICAgIC8vIEV4cG9zZSBwaWNrciB1dGlsc1xuICAgIHN0YXRpYyB1dGlscyA9IF87XG5cbiAgICAvLyBBc3NpZ24gdmVyc2lvbiBhbmQgZXhwb3J0XG4gICAgc3RhdGljIHZlcnNpb24gPSBWRVJTSU9OO1xuXG4gICAgLy8gRGVmYXVsdCBzdHJpbmdzXG4gICAgc3RhdGljIEkxOE5fREVGQVVMVFMgPSB7XG5cbiAgICAgICAgLy8gU3RyaW5ncyB2aXNpYmxlIGluIHRoZSBVSVxuICAgICAgICAndWk6ZGlhbG9nJzogJ2NvbG9yIHBpY2tlciBkaWFsb2cnLFxuICAgICAgICAnYnRuOnRvZ2dsZSc6ICd0b2dnbGUgY29sb3IgcGlja2VyIGRpYWxvZycsXG4gICAgICAgICdidG46c3dhdGNoJzogJ2NvbG9yIHN3YXRjaCcsXG4gICAgICAgICdidG46bGFzdC1jb2xvcic6ICd1c2UgcHJldmlvdXMgY29sb3InLFxuICAgICAgICAnYnRuOnNhdmUnOiAnU2F2ZScsXG4gICAgICAgICdidG46Y2FuY2VsJzogJ0NhbmNlbCcsXG4gICAgICAgICdidG46Y2xlYXInOiAnQ2xlYXInLFxuXG4gICAgICAgIC8vIFN0cmluZ3MgdXNlZCBmb3IgYXJpYS1sYWJlbHNcbiAgICAgICAgJ2FyaWE6YnRuOnNhdmUnOiAnc2F2ZSBhbmQgY2xvc2UnLFxuICAgICAgICAnYXJpYTpidG46Y2FuY2VsJzogJ2NhbmNlbCBhbmQgY2xvc2UnLFxuICAgICAgICAnYXJpYTpidG46Y2xlYXInOiAnY2xlYXIgYW5kIGNsb3NlJyxcbiAgICAgICAgJ2FyaWE6aW5wdXQnOiAnY29sb3IgaW5wdXQgZmllbGQnLFxuICAgICAgICAnYXJpYTpwYWxldHRlJzogJ2NvbG9yIHNlbGVjdGlvbiBhcmVhJyxcbiAgICAgICAgJ2FyaWE6aHVlJzogJ2h1ZSBzZWxlY3Rpb24gc2xpZGVyJyxcbiAgICAgICAgJ2FyaWE6b3BhY2l0eSc6ICdzZWxlY3Rpb24gc2xpZGVyJ1xuICAgIH07XG5cbiAgICAvLyBEZWZhdWx0IG9wdGlvbnNcbiAgICBzdGF0aWMgREVGQVVMVF9PUFRJT05TID0ge1xuICAgICAgICBhcHBDbGFzczogbnVsbCxcbiAgICAgICAgdGhlbWU6ICdjbGFzc2ljJyxcbiAgICAgICAgdXNlQXNCdXR0b246IGZhbHNlLFxuICAgICAgICBwYWRkaW5nOiA4LFxuICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgIGNvbXBhcmlzb246IHRydWUsXG4gICAgICAgIGNsb3NlT25TY3JvbGw6IGZhbHNlLFxuICAgICAgICBvdXRwdXRQcmVjaXNpb246IDAsXG4gICAgICAgIGxvY2tPcGFjaXR5OiBmYWxzZSxcbiAgICAgICAgYXV0b1JlcG9zaXRpb246IHRydWUsXG4gICAgICAgIGNvbnRhaW5lcjogJ2JvZHknLFxuXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIGludGVyYWN0aW9uOiB7fVxuICAgICAgICB9LFxuXG4gICAgICAgIGkxOG46IHt9LFxuICAgICAgICBzd2F0Y2hlczogbnVsbCxcbiAgICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgICAgc2xpZGVyczogbnVsbCxcblxuICAgICAgICBkZWZhdWx0OiAnIzQyNDQ1YScsXG4gICAgICAgIGRlZmF1bHRSZXByZXNlbnRhdGlvbjogbnVsbCxcbiAgICAgICAgcG9zaXRpb246ICdib3R0b20tbWlkZGxlJyxcbiAgICAgICAgYWRqdXN0YWJsZU51bWJlcnM6IHRydWUsXG4gICAgICAgIHNob3dBbHdheXM6IGZhbHNlLFxuXG4gICAgICAgIGNsb3NlV2l0aEtleTogJ0VzY2FwZSdcbiAgICB9O1xuXG4gICAgLy8gV2lsbCBiZSB1c2VkIHRvIHByZXZlbnQgc3BlY2lmaWMgYWN0aW9ucyBkdXJpbmcgaW5pdGlsaXphdGlvblxuICAgIF9pbml0aWFsaXppbmdBY3RpdmUgPSB0cnVlO1xuXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgY29sb3IgdmFsdWUgc2hvdWxkIGJlIHJlY2FsY3VsYXRlZFxuICAgIF9yZWNhbGMgPSB0cnVlO1xuXG4gICAgLy8gUG9zaXRpb25pbmcgZW5naW5lIGFuZCBET00tVHJlZVxuICAgIF9uYW5vcG9wID0gbnVsbDtcbiAgICBfcm9vdCA9IG51bGw7XG5cbiAgICAvLyBDdXJyZW50IGFuZCBsYXN0IGNvbG9yIGZvciBjb21wYXJpc29uXG4gICAgX2NvbG9yID0gSFNWYUNvbG9yKCk7XG4gICAgX2xhc3RDb2xvciA9IEhTVmFDb2xvcigpO1xuICAgIF9zd2F0Y2hDb2xvcnMgPSBbXTtcblxuICAgIC8vIEFuaW1hdGlvbiBmcmFtZSB1c2VkIGZvciBzZXR1cC5cbiAgICAvLyBXaWxsIGJlIGNhbmNlbGxlZCBpbiBjYXNlIG9mIGRlc3RydWN0aW9uLlxuICAgIF9zZXR1cEFuaW1hdGlvbkZyYW1lID0gbnVsbDtcblxuICAgIC8vIEV2ZW5saXN0ZW5lciBuYW1lOiBbY2FsbGJhY2tzXVxuICAgIF9ldmVudExpc3RlbmVyID0ge1xuICAgICAgICBpbml0OiBbXSxcbiAgICAgICAgc2F2ZTogW10sXG4gICAgICAgIGhpZGU6IFtdLFxuICAgICAgICBzaG93OiBbXSxcbiAgICAgICAgY2xlYXI6IFtdLFxuICAgICAgICBjaGFuZ2U6IFtdLFxuICAgICAgICBjaGFuZ2VzdG9wOiBbXSxcbiAgICAgICAgY2FuY2VsOiBbXSxcbiAgICAgICAgc3dhdGNoc2VsZWN0OiBbXVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihvcHQpIHtcblxuICAgICAgICAvLyBBc3NpZ24gZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0ID0gT2JqZWN0LmFzc2lnbih7Li4uUGlja3IuREVGQVVMVF9PUFRJT05TfSwgb3B0KTtcblxuICAgICAgICBjb25zdCB7c3dhdGNoZXMsIGNvbXBvbmVudHMsIHRoZW1lLCBzbGlkZXJzLCBsb2NrT3BhY2l0eSwgcGFkZGluZ30gPSBvcHQ7XG5cbiAgICAgICAgaWYgKFsnbmFubycsICdtb25vbGl0aCddLmluY2x1ZGVzKHRoZW1lKSAmJiAhc2xpZGVycykge1xuICAgICAgICAgICAgb3B0LnNsaWRlcnMgPSAnaCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpbnRlcmFjdGlvbiBzZWN0aW9uXG4gICAgICAgIGlmICghY29tcG9uZW50cy5pbnRlcmFjdGlvbikge1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbnRlcmFjdGlvbiA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3ZlcndyaXRlIHBhbGV0dGUgaWYgcHJldmlldywgb3BhY2l0eSBvciBodWUgYXJlIHRydWVcbiAgICAgICAgY29uc3Qge3ByZXZpZXcsIG9wYWNpdHksIGh1ZSwgcGFsZXR0ZX0gPSBjb21wb25lbnRzO1xuICAgICAgICBjb21wb25lbnRzLm9wYWNpdHkgPSAoIWxvY2tPcGFjaXR5ICYmIG9wYWNpdHkpO1xuICAgICAgICBjb21wb25lbnRzLnBhbGV0dGUgPSBwYWxldHRlIHx8IHByZXZpZXcgfHwgb3BhY2l0eSB8fCBodWU7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBwaWNrZXJcbiAgICAgICAgdGhpcy5fcHJlQnVpbGQoKTtcbiAgICAgICAgdGhpcy5fYnVpbGRDb21wb25lbnRzKCk7XG4gICAgICAgIHRoaXMuX2JpbmRFdmVudHMoKTtcbiAgICAgICAgdGhpcy5fZmluYWxCdWlsZCgpO1xuXG4gICAgICAgIC8vIEFwcGVuZCBwcmUtZGVmaW5lZCBzd2F0Y2ggY29sb3JzXG4gICAgICAgIGlmIChzd2F0Y2hlcyAmJiBzd2F0Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN3YXRjaGVzLmZvckVhY2goY29sb3IgPT4gdGhpcy5hZGRTd2F0Y2goY29sb3IpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluaXRpYWxpemUgcG9zaXRpb25pbmcgZW5naW5lXG4gICAgICAgIGNvbnN0IHtidXR0b24sIGFwcH0gPSB0aGlzLl9yb290O1xuICAgICAgICB0aGlzLl9uYW5vcG9wID0gY3JlYXRlUG9wcGVyKGJ1dHRvbiwgYXBwLCB7XG4gICAgICAgICAgICBtYXJnaW46IHBhZGRpbmdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBhY2Nlc3NpYmlsaXR5XG4gICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnYnV0dG9uJyk7XG4gICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aGlzLl90KCdidG46dG9nZ2xlJykpO1xuXG4gICAgICAgIC8vIEluaXRpbGl6YXRpb24gaXMgZmluaXNoLCBwaWNrciBpcyB2aXNpYmxlIGFuZCByZWFkeSBmb3IgdXNhZ2VcbiAgICAgICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgICAgIHRoaXMuX3NldHVwQW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uIGNiKCkge1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBQZXJmb3JtYW5jZSBpc3N1ZSBkdWUgdG8gaGlnaCBjYWxsLXJhdGU/XG4gICAgICAgICAgICBpZiAoIWFwcC5vZmZzZXRXaWR0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2IpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBBcHBseSBkZWZhdWx0IGNvbG9yXG4gICAgICAgICAgICB0aGF0LnNldENvbG9yKG9wdC5kZWZhdWx0KTtcbiAgICAgICAgICAgIHRoYXQuX3JlUG9zaXRpb25pbmdQaWNrZXIoKTtcblxuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBjb2xvciByZXByZXNlbnRhdGlvblxuICAgICAgICAgICAgaWYgKG9wdC5kZWZhdWx0UmVwcmVzZW50YXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGF0Ll9yZXByZXNlbnRhdGlvbiA9IG9wdC5kZWZhdWx0UmVwcmVzZW50YXRpb247XG4gICAgICAgICAgICAgICAgdGhhdC5zZXRDb2xvclJlcHJlc2VudGF0aW9uKHRoYXQuX3JlcHJlc2VudGF0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2hvdyBwaWNrciBpZiBsb2NrZWRcbiAgICAgICAgICAgIGlmIChvcHQuc2hvd0Fsd2F5cykge1xuICAgICAgICAgICAgICAgIHRoYXQuc2hvdygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJbml0aWFsaXphdGlvbiBpcyBkb25lIC0gcGlja3IgaXMgdXNhYmxlLCBmaXJlIGluaXQgZXZlbnRcbiAgICAgICAgICAgIHRoYXQuX2luaXRpYWxpemluZ0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhhdC5fZW1pdCgnaW5pdCcpO1xuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGluc3RhbmNlIHZpYSBtZXRob2RcbiAgICBzdGF0aWMgY3JlYXRlID0gb3B0aW9ucyA9PiBuZXcgUGlja3Iob3B0aW9ucyk7XG5cbiAgICAvLyBEb2VzIG9ubHkgdGhlIGFic29sdXRseSBiYXNpYyB0aGluZyB0byBpbml0aWFsaXplIHRoZSBjb21wb25lbnRzXG4gICAgX3ByZUJ1aWxkKCkge1xuICAgICAgICBjb25zdCB7b3B0aW9uc30gPSB0aGlzO1xuXG4gICAgICAgIC8vIFJlc29sdmUgZWxlbWVudHNcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFsnZWwnLCAnY29udGFpbmVyJ10pIHtcbiAgICAgICAgICAgIG9wdGlvbnNbdHlwZV0gPSBfLnJlc29sdmVFbGVtZW50KG9wdGlvbnNbdHlwZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGVsZW1lbnQgYW5kIGFwcGVuZCBpdCB0byBib2R5IHRvXG4gICAgICAgIC8vIFByZXZlbnQgaW5pdGlhbGl6YXRpb24gZXJyb3JzXG4gICAgICAgIHRoaXMuX3Jvb3QgPSBidWlsZFBpY2tyKHRoaXMpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGEgY3VzdG9tIGJ1dHRvbiBpcyB1c2VkXG4gICAgICAgIGlmIChvcHRpb25zLnVzZUFzQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLl9yb290LmJ1dHRvbiA9IG9wdGlvbnMuZWw7IC8vIFJlcGxhY2UgYnV0dG9uIHdpdGggY3VzdG9taXplZCBidXR0b25cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3Jvb3Qucm9vdCk7XG4gICAgfVxuXG4gICAgX2ZpbmFsQnVpbGQoKSB7XG4gICAgICAgIGNvbnN0IG9wdCA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX3Jvb3Q7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGZyb20gYm9keVxuICAgICAgICBvcHQuY29udGFpbmVyLnJlbW92ZUNoaWxkKHJvb3Qucm9vdCk7XG5cbiAgICAgICAgaWYgKG9wdC5pbmxpbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IG9wdC5lbC5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgICAgICBpZiAob3B0LmVsLm5leHRTaWJsaW5nKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShyb290LmFwcCwgb3B0LmVsLm5leHRTaWJsaW5nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHJvb3QuYXBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wdC5jb250YWluZXIuYXBwZW5kQ2hpbGQocm9vdC5hcHApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG9uJ3QgcmVwbGFjZSB0aGUgdGhlIGVsZW1lbnQgaWYgYSBjdXN0b20gYnV0dG9uIGlzIHVzZWRcbiAgICAgICAgaWYgKCFvcHQudXNlQXNCdXR0b24pIHtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSBlbGVtZW50IHdpdGggYWN0dWFsIGNvbG9yLXBpY2tlclxuICAgICAgICAgICAgb3B0LmVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHJvb3Qucm9vdCwgb3B0LmVsKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHQuaW5saW5lKSB7XG4gICAgICAgICAgICBvcHQuZWwucmVtb3ZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiBpdCBzaG91bGQgYmUgaW1tZWRpYXRseSBkaXNhYmxlZFxuICAgICAgICBpZiAob3B0LmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGNvbG9yIGNvbXBhcmlzb24gaXMgZGlzYWJsZWQsIGlmIHllcyAtIHJlbW92ZSB0cmFuc2l0aW9ucyBzbyBldmVyeXRoaW5nIGtlZXBzIHNtb290aGx5XG4gICAgICAgIGlmICghb3B0LmNvbXBhcmlzb24pIHtcbiAgICAgICAgICAgIHJvb3QuYnV0dG9uLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG5cbiAgICAgICAgICAgIGlmICghb3B0LnVzZUFzQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgcm9vdC5wcmV2aWV3Lmxhc3RDb2xvci5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgX2J1aWxkQ29tcG9uZW50cygpIHtcblxuICAgICAgICAvLyBJbnN0YW5jZSByZWZlcmVuY2VcbiAgICAgICAgY29uc3QgaW5zdCA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNzID0gdGhpcy5vcHRpb25zLmNvbXBvbmVudHM7XG4gICAgICAgIGNvbnN0IHNsaWRlcnMgPSAoaW5zdC5vcHRpb25zLnNsaWRlcnMgfHwgJ3YnKS5yZXBlYXQoMik7XG4gICAgICAgIGNvbnN0IFtzbywgc2hdID0gc2xpZGVycy5tYXRjaCgvXlt2aF0rJC9nKSA/IHNsaWRlcnMgOiBbXTtcblxuICAgICAgICAvLyBSZS1hc3NpZ24gaWYgbnVsbFxuICAgICAgICBjb25zdCBnZXRDb2xvciA9ICgpID0+XG4gICAgICAgICAgICB0aGlzLl9jb2xvciB8fCAodGhpcy5fY29sb3IgPSB0aGlzLl9sYXN0Q29sb3IuY2xvbmUoKSk7XG5cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHtcblxuICAgICAgICAgICAgcGFsZXR0ZTogTW92ZWFibGUoe1xuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGluc3QuX3Jvb3QucGFsZXR0ZS5waWNrZXIsXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogaW5zdC5fcm9vdC5wYWxldHRlLnBhbGV0dGUsXG5cbiAgICAgICAgICAgICAgICBvbnN0b3A6ICgpID0+IGluc3QuX2VtaXQoJ2NoYW5nZXN0b3AnLCAnc2xpZGVyJywgaW5zdCksXG4gICAgICAgICAgICAgICAgb25jaGFuZ2UoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNzLnBhbGV0dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q29sb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge19yb290LCBvcHRpb25zfSA9IGluc3Q7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtsYXN0Q29sb3IsIGN1cnJlbnRDb2xvcn0gPSBfcm9vdC5wcmV2aWV3O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgaW5wdXQgZmllbGQgb25seSBpZiB0aGUgdXNlciBpcyBjdXJyZW50bHkgbm90IHR5cGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdC5fcmVjYWxjKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBzYXR1cmF0aW9uIGJhc2VkIG9uIHRoZSBwb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IucyA9IHggKiAxMDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnYgPSAxMDAgLSB5ICogMTAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmV2ZW50IGZhbGxpbmcgdW5kZXIgemVyb1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IudiA8IDAgPyBjb2xvci52ID0gMCA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0Ll91cGRhdGVPdXRwdXQoJ3NsaWRlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHBpY2tlciBhbmQgZ3JhZGllbnQgY29sb3JcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3NzUkdCYVN0cmluZyA9IGNvbG9yLnRvUkdCQSgpLnRvU3RyaW5nKDApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9IGNzc1JHQmFTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JhcHBlci5zdHlsZS5iYWNrZ3JvdW5kID0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgwLCAwLCAwLCAke2NvbG9yLmF9KSwgdHJhbnNwYXJlbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIGhzbGEoJHtjb2xvci5ofSwgMTAwJSwgNTAlLCAke2NvbG9yLmF9KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAke2NvbG9yLmF9KSlcbiAgICAgICAgICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiBjb2xvciBpcyBsb2NrZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmNvbXBhcmlzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yb290LmJ1dHRvbi5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wY3ItY29sb3InLCBjc3NSR0JhU3RyaW5nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2hhbmdlcyB0aGUgY29sb3IsIHJlbW92ZSB0aGUgY2xlYXJlZCBpY29uXG4gICAgICAgICAgICAgICAgICAgICAgICBfcm9vdC5idXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnY2xlYXInKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy51c2VBc0J1dHRvbiAmJiAhaW5zdC5fbGFzdENvbG9yKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IGNvbG9yIHRvIGJvdGggdGhlIGxhc3QgYW5kIGN1cnJlbnQgY29sb3Igc2luY2UgdGhlIGN1cnJlbnQgc3RhdGUgaXMgY2xlYXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENvbG9yLnN0eWxlLnNldFByb3BlcnR5KCctLXBjci1jb2xvcicsIGNzc1JHQmFTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIHN3YXRjaCB3aGljaCBjb2xvciBtYXRjaGVzIHRoZSBjdXJyZW50IG9uZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZXhhID0gY29sb3IudG9IRVhBKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB7ZWwsIGNvbG9yfSBvZiBpbnN0Ll9zd2F0Y2hDb2xvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdFtoZXhhID09PSBjb2xvci50b0hFWEEoKS50b1N0cmluZygpID8gJ2FkZCcgOiAncmVtb3ZlJ10oJ3Bjci1hY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZSBjdXJyZW50IGNvbG9yXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb2xvci5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1wY3ItY29sb3InLCBjc3NSR0JhU3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgaHVlOiBNb3ZlYWJsZSh7XG4gICAgICAgICAgICAgICAgbG9jazogc2ggPT09ICd2JyA/ICdoJyA6ICd2JyxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBpbnN0Ll9yb290Lmh1ZS5waWNrZXIsXG4gICAgICAgICAgICAgICAgd3JhcHBlcjogaW5zdC5fcm9vdC5odWUuc2xpZGVyLFxuXG4gICAgICAgICAgICAgICAgb25zdG9wOiAoKSA9PiBpbnN0Ll9lbWl0KCdjaGFuZ2VzdG9wJywgJ3NsaWRlcicsIGluc3QpLFxuICAgICAgICAgICAgICAgIG9uY2hhbmdlKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjcy5odWUgfHwgIWNzLnBhbGV0dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q29sb3IoKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgaHVlXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0Ll9yZWNhbGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmggPSB2ICogMzYwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGNvbG9yXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBgaHNsKCR7Y29sb3IuaH0sIDEwMCUsIDUwJSlgO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLnBhbGV0dGUudHJpZ2dlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICBvcGFjaXR5OiBNb3ZlYWJsZSh7XG4gICAgICAgICAgICAgICAgbG9jazogc28gPT09ICd2JyA/ICdoJyA6ICd2JyxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiBpbnN0Ll9yb290Lm9wYWNpdHkucGlja2VyLFxuICAgICAgICAgICAgICAgIHdyYXBwZXI6IGluc3QuX3Jvb3Qub3BhY2l0eS5zbGlkZXIsXG5cbiAgICAgICAgICAgICAgICBvbnN0b3A6ICgpID0+IGluc3QuX2VtaXQoJ2NoYW5nZXN0b3AnLCAnc2xpZGVyJywgaW5zdCksXG4gICAgICAgICAgICAgICAgb25jaGFuZ2Uodikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNzLm9wYWNpdHkgfHwgIWNzLnBhbGV0dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q29sb3IoKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgb3BhY2l0eVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdC5fcmVjYWxjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hID0gTWF0aC5yb3VuZCh2ICogMWUyKSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBjb2xvclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9IGByZ2JhKDAsIDAsIDAsICR7Y29sb3IuYX0pYDtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5wYWxldHRlLnRyaWdnZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgc2VsZWN0YWJsZTogU2VsZWN0YWJsZSh7XG4gICAgICAgICAgICAgICAgZWxlbWVudHM6IGluc3QuX3Jvb3QuaW50ZXJhY3Rpb24ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdhY3RpdmUnLFxuXG4gICAgICAgICAgICAgICAgb25jaGFuZ2UoZSkge1xuICAgICAgICAgICAgICAgICAgICBpbnN0Ll9yZXByZXNlbnRhdGlvbiA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS10eXBlJykudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5zdC5fcmVjYWxjICYmIGluc3QuX3VwZGF0ZU91dHB1dCgnc3dhdGNoJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgICB9XG5cbiAgICBfYmluZEV2ZW50cygpIHtcbiAgICAgICAgY29uc3Qge19yb290LCBvcHRpb25zfSA9IHRoaXM7XG5cbiAgICAgICAgY29uc3QgZXZlbnRCaW5kaW5ncyA9IFtcblxuICAgICAgICAgICAgLy8gQ2xlYXIgY29sb3JcbiAgICAgICAgICAgIF8ub24oX3Jvb3QuaW50ZXJhY3Rpb24uY2xlYXIsICdjbGljaycsICgpID0+IHRoaXMuX2NsZWFyQ29sb3IoKSksXG5cbiAgICAgICAgICAgIC8vIFNlbGVjdCBsYXN0IGNvbG9yIG9uIGNsaWNrXG4gICAgICAgICAgICBfLm9uKFtcbiAgICAgICAgICAgICAgICBfcm9vdC5pbnRlcmFjdGlvbi5jYW5jZWwsXG4gICAgICAgICAgICAgICAgX3Jvb3QucHJldmlldy5sYXN0Q29sb3JcbiAgICAgICAgICAgIF0sICdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEhTVkEoLi4uKHRoaXMuX2xhc3RDb2xvciB8fCB0aGlzLl9jb2xvcikudG9IU1ZBKCksIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2NhbmNlbCcpO1xuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIC8vIFNhdmUgY29sb3JcbiAgICAgICAgICAgIF8ub24oX3Jvb3QuaW50ZXJhY3Rpb24uc2F2ZSwgJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICF0aGlzLmFwcGx5Q29sb3IoKSAmJiAhb3B0aW9ucy5zaG93QWx3YXlzICYmIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIC8vIFVzZXIgaW5wdXRcbiAgICAgICAgICAgIF8ub24oX3Jvb3QuaW50ZXJhY3Rpb24ucmVzdWx0LCBbJ2tleXVwJywgJ2lucHV0J10sIGUgPT4ge1xuXG4gICAgICAgICAgICAgICAgLy8gRmlyZSBsaXN0ZW5lciBpZiBpbml0aWFsaXphdGlvbiBpcyBmaW5pc2ggYW5kIGNoYW5nZWQgY29sb3Igd2FzIHZhbGlkXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0Q29sb3IoZS50YXJnZXQudmFsdWUsIHRydWUpICYmICF0aGlzLl9pbml0aWFsaXppbmdBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgnY2hhbmdlJywgdGhpcy5fY29sb3IsICdpbnB1dCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0KCdjaGFuZ2VzdG9wJywgJ2lucHV0JywgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyBEZXRlY3QgdXNlciBpbnB1dCBhbmQgZGlzYWJsZSBhdXRvLXJlY2FsY3VsYXRpb25cbiAgICAgICAgICAgIF8ub24oX3Jvb3QuaW50ZXJhY3Rpb24ucmVzdWx0LCBbJ2ZvY3VzJywgJ2JsdXInXSwgZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVjYWxjID0gZS50eXBlID09PSAnYmx1cic7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVjYWxjICYmIHRoaXMuX3VwZGF0ZU91dHB1dChudWxsKTtcbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyBDYW5jZWwgaW5wdXQgZGV0ZWN0aW9uIG9uIGNvbG9yIGNoYW5nZVxuICAgICAgICAgICAgXy5vbihbXG4gICAgICAgICAgICAgICAgX3Jvb3QucGFsZXR0ZS5wYWxldHRlLFxuICAgICAgICAgICAgICAgIF9yb290LnBhbGV0dGUucGlja2VyLFxuICAgICAgICAgICAgICAgIF9yb290Lmh1ZS5zbGlkZXIsXG4gICAgICAgICAgICAgICAgX3Jvb3QuaHVlLnBpY2tlcixcbiAgICAgICAgICAgICAgICBfcm9vdC5vcGFjaXR5LnNsaWRlcixcbiAgICAgICAgICAgICAgICBfcm9vdC5vcGFjaXR5LnBpY2tlclxuICAgICAgICAgICAgXSwgWydtb3VzZWRvd24nLCAndG91Y2hzdGFydCddLCAoKSA9PiB0aGlzLl9yZWNhbGMgPSB0cnVlLCB7cGFzc2l2ZTogdHJ1ZX0pXG4gICAgICAgIF07XG5cbiAgICAgICAgLy8gUHJvdmlkZSBoaWRpbmcgLyBzaG93aW5nIGFiaWxpdGllcyBvbmx5IGlmIHNob3dBbHdheXMgaXMgZmFsc2VcbiAgICAgICAgaWYgKCFvcHRpb25zLnNob3dBbHdheXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNrID0gb3B0aW9ucy5jbG9zZVdpdGhLZXk7XG5cbiAgICAgICAgICAgIGV2ZW50QmluZGluZ3MucHVzaChcblxuICAgICAgICAgICAgICAgIC8vIFNhdmUgYW5kIGhpZGUgLyBzaG93IHBpY2tlclxuICAgICAgICAgICAgICAgIF8ub24oX3Jvb3QuYnV0dG9uLCAnY2xpY2snLCAoKSA9PiB0aGlzLmlzT3BlbigpID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3coKSksXG5cbiAgICAgICAgICAgICAgICAvLyBDbG9zZSB3aXRoIGVzY2FwZSBrZXlcbiAgICAgICAgICAgICAgICBfLm9uKGRvY3VtZW50LCAna2V5dXAnLCBlID0+IHRoaXMuaXNPcGVuKCkgJiYgKGUua2V5ID09PSBjayB8fCBlLmNvZGUgPT09IGNrKSAmJiB0aGlzLmhpZGUoKSksXG5cbiAgICAgICAgICAgICAgICAvLyBDYW5jZWwgc2VsZWN0aW5nIGlmIHRoZSB1c2VyIHRhcHMgYmVoaW5kIHRoZSBjb2xvciBwaWNrZXJcbiAgICAgICAgICAgICAgICBfLm9uKGRvY3VtZW50LCBbJ3RvdWNoc3RhcnQnLCAnbW91c2Vkb3duJ10sIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4oKSAmJiAhXy5ldmVudFBhdGgoZSkuc29tZShlbCA9PiBlbCA9PT0gX3Jvb3QuYXBwIHx8IGVsID09PSBfcm9vdC5idXR0b24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHtjYXB0dXJlOiB0cnVlfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNYWtlIGlucHV0IGFkanVzdGFibGUgaWYgZW5hYmxlZFxuICAgICAgICBpZiAob3B0aW9ucy5hZGp1c3RhYmxlTnVtYmVycykge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2VzID0ge1xuICAgICAgICAgICAgICAgIHJnYmE6IFsyNTUsIDI1NSwgMjU1LCAxXSxcbiAgICAgICAgICAgICAgICBoc3ZhOiBbMzYwLCAxMDAsIDEwMCwgMV0sXG4gICAgICAgICAgICAgICAgaHNsYTogWzM2MCwgMTAwLCAxMDAsIDFdLFxuICAgICAgICAgICAgICAgIGNteWs6IFsxMDAsIDEwMCwgMTAwLCAxMDBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBfLmFkanVzdGFibGVJbnB1dE51bWJlcnMoX3Jvb3QuaW50ZXJhY3Rpb24ucmVzdWx0LCAobywgc3RlcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHJhbmdlc1t0aGlzLmdldENvbG9yUmVwcmVzZW50YXRpb24oKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICAgICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXggPSByYW5nZVtpbmRleF07XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIG5leHQgcmVhc29uYWJsZSBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnYgPSBvICsgKG1heCA+PSAxMDAgPyBzdGVwICogMTAwMCA6IHN0ZXApO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFwcGx5IHJhbmdlIG9mIHplcm8gdXAgdG8gbWF4LCBmaXggZmxvYXRpbmctcG9pbnQgaXNzdWVzXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudiA8PSAwID8gMCA6IE51bWJlcigobnYgPCBtYXggPyBudiA6IG1heCkudG9QcmVjaXNpb24oMykpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5hdXRvUmVwb3NpdGlvbiAmJiAhb3B0aW9ucy5pbmxpbmUpIHtcbiAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBSZS1jYWxjIHBvc2l0aW9uIG9uIHdpbmRvdyByZXNpemUsIHNjcm9sbCBhbmQgd2hlZWxcbiAgICAgICAgICAgIGV2ZW50QmluZGluZ3MucHVzaChcbiAgICAgICAgICAgICAgICBfLm9uKHdpbmRvdywgWydzY3JvbGwnLCAncmVzaXplJ10sICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuaXNPcGVuKCkpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2xvc2VPblNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGltZW91dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRpbWVvdXQgPSBudWxsLCAxMDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHBvc2l0aW9uIG9uIGV2ZXJ5IGZyYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uIHJzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0Ll9yZVBvc2l0aW9uaW5nUGlja2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aW1lb3V0ICE9PSBudWxsKSAmJiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGltZW91dCA9IG51bGwsIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB7Y2FwdHVyZTogdHJ1ZX0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2F2ZSBiaW5kaW5nc1xuICAgICAgICB0aGlzLl9ldmVudEJpbmRpbmdzID0gZXZlbnRCaW5kaW5ncztcbiAgICB9XG5cbiAgICBfcmVQb3NpdGlvbmluZ1BpY2tlcigpIHtcbiAgICAgICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcztcblxuICAgICAgICAvLyBObyByZXBvc2l0aW9uaW5nIG5lZWRlZCBpZiBpbmxpbmVcbiAgICAgICAgaWYgKCFvcHRpb25zLmlubGluZSkge1xuICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuX25hbm9wb3AudXBkYXRlKHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb25cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMuX3Jvb3QuYXBwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGViID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgZWwuc3R5bGUudG9wID0gYCR7KHdpbmRvdy5pbm5lckhlaWdodCAtIGViLmhlaWdodCkgLyAyfXB4YDtcbiAgICAgICAgICAgICAgICBlbC5zdHlsZS5sZWZ0ID0gYCR7KHdpbmRvdy5pbm5lcldpZHRoIC0gZWIud2lkdGgpIC8gMn1weGA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdXBkYXRlT3V0cHV0KGV2ZW50U291cmNlKSB7XG4gICAgICAgIGNvbnN0IHtfcm9vdCwgX2NvbG9yLCBvcHRpb25zfSA9IHRoaXM7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY29tcG9uZW50IGlzIHByZXNlbnRcbiAgICAgICAgaWYgKF9yb290LmludGVyYWN0aW9uLnR5cGUoKSkge1xuXG4gICAgICAgICAgICAvLyBDb25zdHJ1Y3QgZnVuY3Rpb24gbmFtZSBhbmQgY2FsbCBpZiBwcmVzZW50XG4gICAgICAgICAgICBjb25zdCBtZXRob2QgPSBgdG8ke19yb290LmludGVyYWN0aW9uLnR5cGUoKS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScpfWA7XG4gICAgICAgICAgICBfcm9vdC5pbnRlcmFjdGlvbi5yZXN1bHQudmFsdWUgPSB0eXBlb2YgX2NvbG9yW21ldGhvZF0gPT09ICdmdW5jdGlvbicgP1xuICAgICAgICAgICAgICAgIF9jb2xvclttZXRob2RdKCkudG9TdHJpbmcob3B0aW9ucy5vdXRwdXRQcmVjaXNpb24pIDogJyc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJlIGxpc3RlbmVyIGlmIGluaXRpYWxpemF0aW9uIGlzIGZpbmlzaFxuICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemluZ0FjdGl2ZSAmJiB0aGlzLl9yZWNhbGMpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2NoYW5nZScsIF9jb2xvciwgZXZlbnRTb3VyY2UsIHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2NsZWFyQ29sb3Ioc2lsZW50ID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qge19yb290LCBvcHRpb25zfSA9IHRoaXM7XG5cbiAgICAgICAgLy8gQ2hhbmdlIG9ubHkgdGhlIGJ1dHRvbiBjb2xvciBpZiBpdCBpc24ndCBjdXN0b21pemVkXG4gICAgICAgIGlmICghb3B0aW9ucy51c2VBc0J1dHRvbikge1xuICAgICAgICAgICAgX3Jvb3QuYnV0dG9uLnN0eWxlLnNldFByb3BlcnR5KCctLXBjci1jb2xvcicsICdyZ2JhKDAsIDAsIDAsIDAuMTUpJyk7XG4gICAgICAgIH1cblxuICAgICAgICBfcm9vdC5idXR0b24uY2xhc3NMaXN0LmFkZCgnY2xlYXInKTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMuc2hvd0Fsd2F5cykge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sYXN0Q29sb3IgPSBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemluZ0FjdGl2ZSAmJiAhc2lsZW50KSB7XG5cbiAgICAgICAgICAgIC8vIEZpcmUgbGlzdGVuZXJcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoJ3NhdmUnLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuX2VtaXQoJ2NsZWFyJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcGFyc2VMb2NhbENvbG9yKHN0cikge1xuICAgICAgICBjb25zdCB7dmFsdWVzLCB0eXBlLCBhfSA9IHBhcnNlVG9IU1ZBKHN0cik7XG4gICAgICAgIGNvbnN0IHtsb2NrT3BhY2l0eX0gPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IGFscGhhTWFrZXNBQ2hhbmdlID0gYSAhPT0gdW5kZWZpbmVkICYmIGEgIT09IDE7XG5cbiAgICAgICAgLy8gSWYgbm8gb3BhY2l0eSBpcyBhcHBsaWVkLCBhZGQgdW5kZWZpbmVkIGF0IHRoZSB2ZXJ5IGVuZCB3aGljaCBnZXRzXG4gICAgICAgIC8vIFNldCB0byAxIGluIHNldEhTVkFcbiAgICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB2YWx1ZXNbM10gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWVzOiAoIXZhbHVlcyB8fCAobG9ja09wYWNpdHkgJiYgYWxwaGFNYWtlc0FDaGFuZ2UpKSA/IG51bGwgOiB2YWx1ZXMsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgX3Qoa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuaTE4bltrZXldIHx8IFBpY2tyLkkxOE5fREVGQVVMVFNba2V5XTtcbiAgICB9XG5cbiAgICBfZW1pdChldmVudCwgLi4uYXJncykge1xuICAgICAgICB0aGlzLl9ldmVudExpc3RlbmVyW2V2ZW50XS5mb3JFYWNoKGNiID0+IGNiKC4uLmFyZ3MsIHRoaXMpKTtcbiAgICB9XG5cbiAgICBvbihldmVudCwgY2IpIHtcbiAgICAgICAgdGhpcy5fZXZlbnRMaXN0ZW5lcltldmVudF0ucHVzaChjYik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG9mZihldmVudCwgY2IpIHtcbiAgICAgICAgY29uc3QgY2FsbEJhY2tzID0gKHRoaXMuX2V2ZW50TGlzdGVuZXJbZXZlbnRdIHx8IFtdKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsQmFja3MuaW5kZXhPZihjYik7XG5cbiAgICAgICAgaWYgKH5pbmRleCkge1xuICAgICAgICAgICAgY2FsbEJhY2tzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGEgY29sb3IgdG8gdGhlIHN3YXRjaCBwYWxldHRlXG4gICAgICogQHBhcmFtIGNvbG9yXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgYWRkU3dhdGNoKGNvbG9yKSB7XG4gICAgICAgIGNvbnN0IHt2YWx1ZXN9ID0gdGhpcy5fcGFyc2VMb2NhbENvbG9yKGNvbG9yKTtcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB7X3N3YXRjaENvbG9ycywgX3Jvb3R9ID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gSFNWYUNvbG9yKC4uLnZhbHVlcyk7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgc3dhdGNoIEhUTUxFbGVtZW50XG4gICAgICAgICAgICBjb25zdCBlbCA9IF8uY3JlYXRlRWxlbWVudEZyb21TdHJpbmcoXG4gICAgICAgICAgICAgICAgYDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwiLS1wY3ItY29sb3I6ICR7Y29sb3IudG9SR0JBKCkudG9TdHJpbmcoMCl9XCIgYXJpYS1sYWJlbD1cIiR7dGhpcy5fdCgnYnRuOnN3YXRjaCcpfVwiLz5gXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBBcHBlbmQgZWxlbWVudCBhbmQgc2F2ZSBzd2F0Y2ggZGF0YVxuICAgICAgICAgICAgX3Jvb3Quc3dhdGNoZXMuYXBwZW5kQ2hpbGQoZWwpO1xuICAgICAgICAgICAgX3N3YXRjaENvbG9ycy5wdXNoKHtlbCwgY29sb3J9KTtcblxuICAgICAgICAgICAgLy8gQmluZCBldmVudFxuICAgICAgICAgICAgdGhpcy5fZXZlbnRCaW5kaW5ncy5wdXNoKFxuICAgICAgICAgICAgICAgIF8ub24oZWwsICdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRIU1ZBKC4uLmNvbG9yLnRvSFNWQSgpLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdCgnc3dhdGNoc2VsZWN0JywgY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0KCdjaGFuZ2UnLCBjb2xvciwgJ3N3YXRjaCcsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgc3dhdGNoIGNvbG9yIGJ5IGl0J3MgaW5kZXhcbiAgICAgKiBAcGFyYW0gaW5kZXhcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICByZW1vdmVTd2F0Y2goaW5kZXgpIHtcbiAgICAgICAgY29uc3Qgc3dhdGNoQ29sb3IgPSB0aGlzLl9zd2F0Y2hDb2xvcnNbaW5kZXhdO1xuXG4gICAgICAgIC8vIENoZWNrIHN3YXRjaCBkYXRhXG4gICAgICAgIGlmIChzd2F0Y2hDb2xvcikge1xuICAgICAgICAgICAgY29uc3Qge2VsfSA9IHN3YXRjaENvbG9yO1xuXG4gICAgICAgICAgICAvLyBSZW1vdmUgSFRNTCBjaGlsZCBhbmQgc3dhdGNoIGRhdGFcbiAgICAgICAgICAgIHRoaXMuX3Jvb3Quc3dhdGNoZXMucmVtb3ZlQ2hpbGQoZWwpO1xuICAgICAgICAgICAgdGhpcy5fc3dhdGNoQ29sb3JzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBhcHBseUNvbG9yKHNpbGVudCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHtwcmV2aWV3LCBidXR0b259ID0gdGhpcy5fcm9vdDtcblxuICAgICAgICAvLyBDaGFuZ2UgcHJldmlldyBhbmQgY3VycmVudCBjb2xvclxuICAgICAgICBjb25zdCBjc3NSR0JhU3RyaW5nID0gdGhpcy5fY29sb3IudG9SR0JBKCkudG9TdHJpbmcoMCk7XG4gICAgICAgIHByZXZpZXcubGFzdENvbG9yLnN0eWxlLnNldFByb3BlcnR5KCctLXBjci1jb2xvcicsIGNzc1JHQmFTdHJpbmcpO1xuXG4gICAgICAgIC8vIENoYW5nZSBvbmx5IHRoZSBidXR0b24gY29sb3IgaWYgaXQgaXNuJ3QgY3VzdG9taXplZFxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy51c2VBc0J1dHRvbikge1xuICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnNldFByb3BlcnR5KCctLXBjci1jb2xvcicsIGNzc1JHQmFTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlciBjaGFuZ2VkIHRoZSBjb2xvciBzbyByZW1vdmUgdGhlIGNsZWFyIGNsYXNcbiAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2NsZWFyJyk7XG5cbiAgICAgICAgLy8gU2F2ZSBsYXN0IGNvbG9yXG4gICAgICAgIHRoaXMuX2xhc3RDb2xvciA9IHRoaXMuX2NvbG9yLmNsb25lKCk7XG5cbiAgICAgICAgLy8gRmlyZSBsaXN0ZW5lclxuICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxpemluZ0FjdGl2ZSAmJiAhc2lsZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0KCdzYXZlJywgdGhpcy5fY29sb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSdzIGFsbCBmdW5jdGlvbmFsaXR5c1xuICAgICAqL1xuICAgIGRlc3Ryb3koKSB7XG5cbiAgICAgICAgLy8gQ2FuY2VsIHNldHVwLWZyYW1lIGlmIHNldFxuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9zZXR1cEFuaW1hdGlvbkZyYW1lKTtcblxuICAgICAgICAvLyBVbmJpbmQgZXZlbnRzXG4gICAgICAgIHRoaXMuX2V2ZW50QmluZGluZ3MuZm9yRWFjaChhcmdzID0+IF8ub2ZmKC4uLmFyZ3MpKTtcblxuICAgICAgICAvLyBEZXN0cm95IHN1Yi1jb21wb25lbnRzXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2NvbXBvbmVudHMpXG4gICAgICAgICAgICAuZm9yRWFjaChrZXkgPT4gdGhpcy5fY29tcG9uZW50c1trZXldLmRlc3Ryb3koKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSdzIGFsbCBmdW5jdGlvbmFsaXR5cyBhbmQgcmVtb3Zlc1xuICAgICAqIHRoZSBwaWNrciBlbGVtZW50LlxuICAgICAqL1xuICAgIGRlc3Ryb3lBbmRSZW1vdmUoKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCB7cm9vdCwgYXBwfSA9IHRoaXMuX3Jvb3Q7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGVsZW1lbnRcbiAgICAgICAgaWYgKHJvb3QucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgcm9vdC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHJvb3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVtb3ZlIC5wY3ItYXBwXG4gICAgICAgIGFwcC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGFwcCk7XG5cbiAgICAgICAgLy8gVGhlcmUgYXJlIHJlZmVyZW5jZXMgdG8gdmFyaW91cyBET00gZWxlbWVudHMgc3RvcmVkIGluIHRoZSBwaWNrciBpbnN0YW5jZVxuICAgICAgICAvLyBUaGlzIGNsZWFucyBhbGwgb2YgdGhlbSB0byBhdm9pZCBkZXRhY2hlZCBET01zXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMpXG4gICAgICAgICAgICAuZm9yRWFjaChrZXkgPT4gdGhpc1trZXldID0gbnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgdGhlIGNvbG9yLXBpY2tlciB1aS5cbiAgICAgKi9cbiAgICBoaWRlKCkge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4oKSkge1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5hcHAuY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdCgnaGlkZScpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIGNvbG9yLXBpY2tlciB1aS5cbiAgICAgKi9cbiAgICBzaG93KCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5kaXNhYmxlZCAmJiAhdGhpcy5pc09wZW4oKSkge1xuICAgICAgICAgICAgdGhpcy5fcm9vdC5hcHAuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpO1xuICAgICAgICAgICAgdGhpcy5fcmVQb3NpdGlvbmluZ1BpY2tlcigpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdCgnc2hvdycsIHRoaXMuX2NvbG9yKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IElmIHRoZSBjb2xvciBwaWNrZXIgaXMgY3VycmVudGx5IG9wZW5cbiAgICAgKi9cbiAgICBpc09wZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290LmFwcC5jbGFzc0xpc3QuY29udGFpbnMoJ3Zpc2libGUnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgYSBzcGVjaWZpYyBjb2xvci5cbiAgICAgKiBAcGFyYW0gaCBIdWVcbiAgICAgKiBAcGFyYW0gcyBTYXR1cmF0aW9uXG4gICAgICogQHBhcmFtIHYgVmFsdWVcbiAgICAgKiBAcGFyYW0gYSBBbHBoYSBjaGFubmVsICgwIC0gMSlcbiAgICAgKiBAcGFyYW0gc2lsZW50IElmIHRoZSBidXR0b24gc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIGNvbG9yXG4gICAgICogQHJldHVybiBib29sZWFuIGlmIHRoZSBjb2xvciBoYXMgYmVlbiBhY2NlcHRlZFxuICAgICAqL1xuICAgIHNldEhTVkEoaCA9IDM2MCwgcyA9IDAsIHYgPSAwLCBhID0gMSwgc2lsZW50ID0gZmFsc2UpIHtcblxuICAgICAgICAvLyBEZWFjdGl2YXRlIGNvbG9yIGNhbGN1bGF0aW9uXG4gICAgICAgIGNvbnN0IHJlY2FsYyA9IHRoaXMuX3JlY2FsYzsgLy8gU2F2ZSBzdGF0ZVxuICAgICAgICB0aGlzLl9yZWNhbGMgPSBmYWxzZTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBpbnB1dFxuICAgICAgICBpZiAoaCA8IDAgfHwgaCA+IDM2MCB8fCBzIDwgMCB8fCBzID4gMTAwIHx8IHYgPCAwIHx8IHYgPiAxMDAgfHwgYSA8IDAgfHwgYSA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE92ZXJyaWRlIGN1cnJlbnQgY29sb3IgYW5kIHJlLWFjdGl2ZSBjb2xvciBjYWxjdWxhdGlvblxuICAgICAgICB0aGlzLl9jb2xvciA9IEhTVmFDb2xvcihoLCBzLCB2LCBhKTtcblxuICAgICAgICAvLyBVcGRhdGUgc2xpZGVyIGFuZCBwYWxldHRlXG4gICAgICAgIGNvbnN0IHtodWUsIG9wYWNpdHksIHBhbGV0dGV9ID0gdGhpcy5fY29tcG9uZW50cztcbiAgICAgICAgaHVlLnVwZGF0ZSgoaCAvIDM2MCkpO1xuICAgICAgICBvcGFjaXR5LnVwZGF0ZShhKTtcbiAgICAgICAgcGFsZXR0ZS51cGRhdGUocyAvIDEwMCwgMSAtICh2IC8gMTAwKSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgY2FsbCBpcyBzaWxlbnRcbiAgICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDb2xvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIG91dHB1dCBpZiByZWNhbGN1bGF0aW9uIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKHJlY2FsYykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlT3V0cHV0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXN0b3JlIG9sZCBzdGF0ZVxuICAgICAgICB0aGlzLl9yZWNhbGMgPSByZWNhbGM7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyaWVzIHRvIHBhcnNlIGEgc3RyaW5nIHdoaWNoIHJlcHJlc2VudHMgYSBjb2xvci5cbiAgICAgKiBFeGFtcGxlczogI2ZmZlxuICAgICAqICAgICAgICAgICByZ2IgMTAgMTAgMjAwXG4gICAgICogICAgICAgICAgIGhzdmEgMTAgMjAgNSAwLjVcbiAgICAgKiBAcGFyYW0gc3RyaW5nXG4gICAgICogQHBhcmFtIHNpbGVudFxuICAgICAqL1xuICAgIHNldENvbG9yKHN0cmluZywgc2lsZW50ID0gZmFsc2UpIHtcblxuICAgICAgICAvLyBDaGVjayBpZiBudWxsXG4gICAgICAgIGlmIChzdHJpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsZWFyQ29sb3Ioc2lsZW50KTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge3ZhbHVlcywgdHlwZX0gPSB0aGlzLl9wYXJzZUxvY2FsQ29sb3Ioc3RyaW5nKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBjb2xvciBpcyBva1xuICAgICAgICBpZiAodmFsdWVzKSB7XG5cbiAgICAgICAgICAgIC8vIENoYW5nZSBzZWxlY3RlZCBjb2xvciBmb3JtYXRcbiAgICAgICAgICAgIGNvbnN0IHV0eXBlID0gdHlwZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3Qge29wdGlvbnN9ID0gdGhpcy5fcm9vdC5pbnRlcmFjdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG9wdGlvbnMuZmluZChlbCA9PiBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScpID09PSB1dHlwZSk7XG5cbiAgICAgICAgICAgIC8vIEF1dG8gc2VsZWN0IG9ubHkgaWYgbm90IGhpZGRlblxuICAgICAgICAgICAgaWYgKHRhcmdldCAmJiAhdGFyZ2V0LmhpZGRlbikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3RbZWwgPT09IHRhcmdldCA/ICdhZGQnIDogJ3JlbW92ZSddKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBjb2xvciAoZmlyZXMgJ3NhdmUnIGV2ZW50IGlmIHNpbGVudCBpcyAnZmFsc2UnKVxuICAgICAgICAgICAgaWYgKCF0aGlzLnNldEhTVkEoLi4udmFsdWVzLCBzaWxlbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgcmVwcmVzZW50YXRpb24gKGZpcmVzICdjaGFuZ2UnIGV2ZW50KVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0Q29sb3JSZXByZXNlbnRhdGlvbih1dHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyB0aGUgY29sb3IgX3JlcHJlc2VudGF0aW9uLlxuICAgICAqIEFsbG93ZWQgdmFsdWVzIGFyZSBIRVgsIFJHQiwgSFNWLCBIU0wgYW5kIENNWUtcbiAgICAgKiBAcGFyYW0gdHlwZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBpZiB0aGUgc2VsZWN0ZWQgdHlwZSB3YXMgdmFsaWQuXG4gICAgICovXG4gICAgc2V0Q29sb3JSZXByZXNlbnRhdGlvbih0eXBlKSB7XG5cbiAgICAgICAgLy8gRm9yY2UgdXBwZXJjYXNlIHRvIGFsbG93IGEgY2FzZS1zZW5zaXRpdiBjb21wYXJpc29uXG4gICAgICAgIHR5cGUgPSB0eXBlLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgLy8gRmluZCBidXR0b24gd2l0aCBnaXZlbiB0eXBlIGFuZCB0cmlnZ2VyIGNsaWNrIGV2ZW50XG4gICAgICAgIHJldHVybiAhIXRoaXMuX3Jvb3QuaW50ZXJhY3Rpb24ub3B0aW9uc1xuICAgICAgICAgICAgLmZpbmQodiA9PiB2LmdldEF0dHJpYnV0ZSgnZGF0YS10eXBlJykuc3RhcnRzV2l0aCh0eXBlKSAmJiAhdi5jbGljaygpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbG9yIHJlcHJlc2VudGFpb24uIFNlZSBzZXRDb2xvclJlcHJlc2VudGF0aW9uXG4gICAgICogQHJldHVybnMgeyp9XG4gICAgICovXG4gICAgZ2V0Q29sb3JSZXByZXNlbnRhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcHJlc2VudGF0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIEhTVmFDb2xvciBDdXJyZW50IEhTVmFDb2xvciBvYmplY3QuXG4gICAgICovXG4gICAgZ2V0Q29sb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29sb3IuXG4gICAgICogQHJldHVybnMge3thLCB0b0hTVkEsIHRvSEVYQSwgcywgdiwgaCwgY2xvbmUsIHRvQ01ZSywgdG9IU0xBLCB0b1JHQkF9fVxuICAgICAqL1xuICAgIGdldFNlbGVjdGVkQ29sb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYXN0Q29sb3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgVGhlIHJvb3QgSFRNTEVsZW1lbnQgd2l0aCBhbGwgaGlzIGNvbXBvbmVudHMuXG4gICAgICovXG4gICAgZ2V0Um9vdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvb3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSBwaWNrclxuICAgICAqL1xuICAgIGRpc2FibGUoKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9yb290LmJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdkaXNhYmxlZCcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGUgcGlja3JcbiAgICAgKi9cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yb290LmJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG4iLCAiKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcblx0dHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuXHR0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuXHQoZ2xvYmFsLkpTT041ID0gZmFjdG9yeSgpKTtcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG5cdGZ1bmN0aW9uIGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZuLCBtb2R1bGUpIHtcblx0XHRyZXR1cm4gbW9kdWxlID0geyBleHBvcnRzOiB7fSB9LCBmbihtb2R1bGUsIG1vZHVsZS5leHBvcnRzKSwgbW9kdWxlLmV4cG9ydHM7XG5cdH1cblxuXHR2YXIgX2dsb2JhbCA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUpIHtcblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcblx0dmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG5cdCAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcblx0ICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcblx0ICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdGlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSB7IF9fZyA9IGdsb2JhbDsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cdH0pO1xuXG5cdHZhciBfY29yZSA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUpIHtcblx0dmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi41JyB9O1xuXHRpZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgeyBfX2UgPSBjb3JlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblx0fSk7XG5cdHZhciBfY29yZV8xID0gX2NvcmUudmVyc2lvbjtcblxuXHR2YXIgX2lzT2JqZWN0ID0gZnVuY3Rpb24gKGl0KSB7XG5cdCAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcblx0fTtcblxuXHR2YXIgX2FuT2JqZWN0ID0gZnVuY3Rpb24gKGl0KSB7XG5cdCAgaWYgKCFfaXNPYmplY3QoaXQpKSB7IHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTsgfVxuXHQgIHJldHVybiBpdDtcblx0fTtcblxuXHR2YXIgX2ZhaWxzID0gZnVuY3Rpb24gKGV4ZWMpIHtcblx0ICB0cnkge1xuXHQgICAgcmV0dXJuICEhZXhlYygpO1xuXHQgIH0gY2F0Y2ggKGUpIHtcblx0ICAgIHJldHVybiB0cnVlO1xuXHQgIH1cblx0fTtcblxuXHQvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5cdHZhciBfZGVzY3JpcHRvcnMgPSAhX2ZhaWxzKGZ1bmN0aW9uICgpIHtcblx0ICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcblx0fSk7XG5cblx0dmFyIGRvY3VtZW50ID0gX2dsb2JhbC5kb2N1bWVudDtcblx0Ly8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG5cdHZhciBpcyA9IF9pc09iamVjdChkb2N1bWVudCkgJiYgX2lzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXHR2YXIgX2RvbUNyZWF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuXHQgIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG5cdH07XG5cblx0dmFyIF9pZThEb21EZWZpbmUgPSAhX2Rlc2NyaXB0b3JzICYmICFfZmFpbHMoZnVuY3Rpb24gKCkge1xuXHQgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2RvbUNyZWF0ZSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xuXHR9KTtcblxuXHQvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcblxuXHQvLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuXHQvLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xuXHR2YXIgX3RvUHJpbWl0aXZlID0gZnVuY3Rpb24gKGl0LCBTKSB7XG5cdCAgaWYgKCFfaXNPYmplY3QoaXQpKSB7IHJldHVybiBpdDsgfVxuXHQgIHZhciBmbiwgdmFsO1xuXHQgIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhX2lzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgeyByZXR1cm4gdmFsOyB9XG5cdCAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFfaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSB7IHJldHVybiB2YWw7IH1cblx0ICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFfaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSB7IHJldHVybiB2YWw7IH1cblx0ICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG5cdH07XG5cblx0dmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5cdHZhciBmID0gX2Rlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuXHQgIF9hbk9iamVjdChPKTtcblx0ICBQID0gX3RvUHJpbWl0aXZlKFAsIHRydWUpO1xuXHQgIF9hbk9iamVjdChBdHRyaWJ1dGVzKTtcblx0ICBpZiAoX2llOERvbURlZmluZSkgeyB0cnkge1xuXHQgICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuXHQgIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfSB9XG5cdCAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgeyB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpOyB9XG5cdCAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgeyBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTsgfVxuXHQgIHJldHVybiBPO1xuXHR9O1xuXG5cdHZhciBfb2JqZWN0RHAgPSB7XG5cdFx0ZjogZlxuXHR9O1xuXG5cdHZhciBfcHJvcGVydHlEZXNjID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcblx0ICByZXR1cm4ge1xuXHQgICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcblx0ICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcblx0ICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuXHQgICAgdmFsdWU6IHZhbHVlXG5cdCAgfTtcblx0fTtcblxuXHR2YXIgX2hpZGUgPSBfZGVzY3JpcHRvcnMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG5cdCAgcmV0dXJuIF9vYmplY3REcC5mKG9iamVjdCwga2V5LCBfcHJvcGVydHlEZXNjKDEsIHZhbHVlKSk7XG5cdH0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG5cdCAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcblx0ICByZXR1cm4gb2JqZWN0O1xuXHR9O1xuXG5cdHZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXHR2YXIgX2hhcyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG5cdCAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG5cdH07XG5cblx0dmFyIGlkID0gMDtcblx0dmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcblx0dmFyIF91aWQgPSBmdW5jdGlvbiAoa2V5KSB7XG5cdCAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcblx0fTtcblxuXHR2YXIgX2xpYnJhcnkgPSBmYWxzZTtcblxuXHR2YXIgX3NoYXJlZCA9IGNyZWF0ZUNvbW1vbmpzTW9kdWxlKGZ1bmN0aW9uIChtb2R1bGUpIHtcblx0dmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xuXHR2YXIgc3RvcmUgPSBfZ2xvYmFsW1NIQVJFRF0gfHwgKF9nbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuXHQobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHQgIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xuXHR9KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG5cdCAgdmVyc2lvbjogX2NvcmUudmVyc2lvbixcblx0ICBtb2RlOiBfbGlicmFyeSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuXHQgIGNvcHlyaWdodDogJ1x1MDBBOSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xuXHR9KTtcblx0fSk7XG5cblx0dmFyIF9mdW5jdGlvblRvU3RyaW5nID0gX3NoYXJlZCgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuXHR2YXIgX3JlZGVmaW5lID0gY3JlYXRlQ29tbW9uanNNb2R1bGUoZnVuY3Rpb24gKG1vZHVsZSkge1xuXHR2YXIgU1JDID0gX3VpZCgnc3JjJyk7XG5cblx0dmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG5cdHZhciBUUEwgPSAoJycgKyBfZnVuY3Rpb25Ub1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxuXHRfY29yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG5cdCAgcmV0dXJuIF9mdW5jdGlvblRvU3RyaW5nLmNhbGwoaXQpO1xuXHR9O1xuXG5cdChtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuXHQgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuXHQgIGlmIChpc0Z1bmN0aW9uKSB7IF9oYXModmFsLCAnbmFtZScpIHx8IF9oaWRlKHZhbCwgJ25hbWUnLCBrZXkpOyB9XG5cdCAgaWYgKE9ba2V5XSA9PT0gdmFsKSB7IHJldHVybjsgfVxuXHQgIGlmIChpc0Z1bmN0aW9uKSB7IF9oYXModmFsLCBTUkMpIHx8IF9oaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7IH1cblx0ICBpZiAoTyA9PT0gX2dsb2JhbCkge1xuXHQgICAgT1trZXldID0gdmFsO1xuXHQgIH0gZWxzZSBpZiAoIXNhZmUpIHtcblx0ICAgIGRlbGV0ZSBPW2tleV07XG5cdCAgICBfaGlkZShPLCBrZXksIHZhbCk7XG5cdCAgfSBlbHNlIGlmIChPW2tleV0pIHtcblx0ICAgIE9ba2V5XSA9IHZhbDtcblx0ICB9IGVsc2Uge1xuXHQgICAgX2hpZGUoTywga2V5LCB2YWwpO1xuXHQgIH1cblx0Ly8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG5cdH0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcblx0ICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgX2Z1bmN0aW9uVG9TdHJpbmcuY2FsbCh0aGlzKTtcblx0fSk7XG5cdH0pO1xuXG5cdHZhciBfYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGl0KSB7XG5cdCAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB7IHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7IH1cblx0ICByZXR1cm4gaXQ7XG5cdH07XG5cblx0Ly8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5cblx0dmFyIF9jdHggPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuXHQgIF9hRnVuY3Rpb24oZm4pO1xuXHQgIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIGZuOyB9XG5cdCAgc3dpdGNoIChsZW5ndGgpIHtcblx0ICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG5cdCAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuXHQgICAgfTtcblx0ICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG5cdCAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuXHQgICAgfTtcblx0ICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG5cdCAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuXHQgICAgfTtcblx0ICB9XG5cdCAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG5cdCAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcblx0ICB9O1xuXHR9O1xuXG5cdHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuXHR2YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcblx0ICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcblx0ICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcblx0ICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcblx0ICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuXHQgIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcblx0ICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gX2dsb2JhbCA6IElTX1NUQVRJQyA/IF9nbG9iYWxbbmFtZV0gfHwgKF9nbG9iYWxbbmFtZV0gPSB7fSkgOiAoX2dsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcblx0ICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IF9jb3JlIDogX2NvcmVbbmFtZV0gfHwgKF9jb3JlW25hbWVdID0ge30pO1xuXHQgIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuXHQgIHZhciBrZXksIG93biwgb3V0LCBleHA7XG5cdCAgaWYgKElTX0dMT0JBTCkgeyBzb3VyY2UgPSBuYW1lOyB9XG5cdCAgZm9yIChrZXkgaW4gc291cmNlKSB7XG5cdCAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcblx0ICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG5cdCAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuXHQgICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcblx0ICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG5cdCAgICBleHAgPSBJU19CSU5EICYmIG93biA/IF9jdHgob3V0LCBfZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IF9jdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcblx0ICAgIC8vIGV4dGVuZCBnbG9iYWxcblx0ICAgIGlmICh0YXJnZXQpIHsgX3JlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpOyB9XG5cdCAgICAvLyBleHBvcnRcblx0ICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSB7IF9oaWRlKGV4cG9ydHMsIGtleSwgZXhwKTsgfVxuXHQgICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSB7IGV4cFByb3RvW2tleV0gPSBvdXQ7IH1cblx0ICB9XG5cdH07XG5cdF9nbG9iYWwuY29yZSA9IF9jb3JlO1xuXHQvLyB0eXBlIGJpdG1hcFxuXHQkZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuXHQkZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuXHQkZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuXHQkZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG5cdCRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuXHQkZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcblx0JGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG5cdCRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxuXHR2YXIgX2V4cG9ydCA9ICRleHBvcnQ7XG5cblx0Ly8gNy4xLjQgVG9JbnRlZ2VyXG5cdHZhciBjZWlsID0gTWF0aC5jZWlsO1xuXHR2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXHR2YXIgX3RvSW50ZWdlciA9IGZ1bmN0aW9uIChpdCkge1xuXHQgIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xuXHR9O1xuXG5cdC8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5cdHZhciBfZGVmaW5lZCA9IGZ1bmN0aW9uIChpdCkge1xuXHQgIGlmIChpdCA9PSB1bmRlZmluZWQpIHsgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpOyB9XG5cdCAgcmV0dXJuIGl0O1xuXHR9O1xuXG5cdC8vIHRydWUgIC0+IFN0cmluZyNhdFxuXHQvLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcblx0dmFyIF9zdHJpbmdBdCA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcblx0ICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuXHQgICAgdmFyIHMgPSBTdHJpbmcoX2RlZmluZWQodGhhdCkpO1xuXHQgICAgdmFyIGkgPSBfdG9JbnRlZ2VyKHBvcyk7XG5cdCAgICB2YXIgbCA9IHMubGVuZ3RoO1xuXHQgICAgdmFyIGEsIGI7XG5cdCAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSB7IHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDsgfVxuXHQgICAgYSA9IHMuY2hhckNvZGVBdChpKTtcblx0ICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG5cdCAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG5cdCAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuXHQgIH07XG5cdH07XG5cblx0dmFyICRhdCA9IF9zdHJpbmdBdChmYWxzZSk7XG5cdF9leHBvcnQoX2V4cG9ydC5QLCAnU3RyaW5nJywge1xuXHQgIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuXHQgIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcblx0ICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcblx0ICB9XG5cdH0pO1xuXG5cdHZhciBjb2RlUG9pbnRBdCA9IF9jb3JlLlN0cmluZy5jb2RlUG9pbnRBdDtcblxuXHR2YXIgbWF4ID0gTWF0aC5tYXg7XG5cdHZhciBtaW4gPSBNYXRoLm1pbjtcblx0dmFyIF90b0Fic29sdXRlSW5kZXggPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuXHQgIGluZGV4ID0gX3RvSW50ZWdlcihpbmRleCk7XG5cdCAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG5cdH07XG5cblx0dmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cdHZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG5cdC8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cblx0X2V4cG9ydChfZXhwb3J0LlMgKyBfZXhwb3J0LkYgKiAoISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMSksICdTdHJpbmcnLCB7XG5cdCAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcblx0ICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHtcblx0ICAgIHZhciBhcmd1bWVudHMkMSA9IGFyZ3VtZW50cztcblx0IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblx0ICAgIHZhciByZXMgPSBbXTtcblx0ICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcblx0ICAgIHZhciBpID0gMDtcblx0ICAgIHZhciBjb2RlO1xuXHQgICAgd2hpbGUgKGFMZW4gPiBpKSB7XG5cdCAgICAgIGNvZGUgPSArYXJndW1lbnRzJDFbaSsrXTtcblx0ICAgICAgaWYgKF90b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB7IHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpOyB9XG5cdCAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG5cdCAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcblx0ICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG5cdCAgICAgICk7XG5cdCAgICB9IHJldHVybiByZXMuam9pbignJyk7XG5cdCAgfVxuXHR9KTtcblxuXHR2YXIgZnJvbUNvZGVQb2ludCA9IF9jb3JlLlN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG5cdC8vIFRoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZS4gRG8gbm90IGVkaXQuXG5cdHZhciBTcGFjZV9TZXBhcmF0b3IgPSAvW1xcdTE2ODBcXHUyMDAwLVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBdLztcblx0dmFyIElEX1N0YXJ0ID0gL1tcXHhBQVxceEI1XFx4QkFcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJDMVxcdTAyQzYtXFx1MDJEMVxcdTAyRTAtXFx1MDJFNFxcdTAyRUNcXHUwMkVFXFx1MDM3MC1cXHUwMzc0XFx1MDM3NlxcdTAzNzdcXHUwMzdBLVxcdTAzN0RcXHUwMzdGXFx1MDM4NlxcdTAzODgtXFx1MDM4QVxcdTAzOENcXHUwMzhFLVxcdTAzQTFcXHUwM0EzLVxcdTAzRjVcXHUwM0Y3LVxcdTA0ODFcXHUwNDhBLVxcdTA1MkZcXHUwNTMxLVxcdTA1NTZcXHUwNTU5XFx1MDU2MS1cXHUwNTg3XFx1MDVEMC1cXHUwNUVBXFx1MDVGMC1cXHUwNUYyXFx1MDYyMC1cXHUwNjRBXFx1MDY2RVxcdTA2NkZcXHUwNjcxLVxcdTA2RDNcXHUwNkQ1XFx1MDZFNVxcdTA2RTZcXHUwNkVFXFx1MDZFRlxcdTA2RkEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwXFx1MDcxMi1cXHUwNzJGXFx1MDc0RC1cXHUwN0E1XFx1MDdCMVxcdTA3Q0EtXFx1MDdFQVxcdTA3RjRcXHUwN0Y1XFx1MDdGQVxcdTA4MDAtXFx1MDgxNVxcdTA4MUFcXHUwODI0XFx1MDgyOFxcdTA4NDAtXFx1MDg1OFxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhCRFxcdTA5MDQtXFx1MDkzOVxcdTA5M0RcXHUwOTUwXFx1MDk1OC1cXHUwOTYxXFx1MDk3MS1cXHUwOTgwXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCRFxcdTA5Q0VcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFMVxcdTA5RjBcXHUwOUYxXFx1MDlGQ1xcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENTQtXFx1MEQ1NlxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjFcXHUxQ0Y1XFx1MUNGNlxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTYwLVxcdTIxODhcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkVcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRUFcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFRlxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdBRVxcdUE3QjAtXFx1QTdCN1xcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI2NVxcdUFCNzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ118XFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdURENDAtXFx1REQ3NFxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURGMDAtXFx1REYxRlxcdURGMkQtXFx1REY0QVxcdURGNTAtXFx1REY3NVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRlxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVEQ0IwLVxcdURDRDNcXHVEQ0Q4LVxcdURDRkJcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwXFx1REUxMC1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTMzXFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU0XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDUwLVxcdURENzJcXHVERDc2XFx1REQ4My1cXHVEREIyXFx1RERDMS1cXHVEREM0XFx1REREQVxcdURERENcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMkJcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERURFXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0RcXHVERjUwXFx1REY1RC1cXHVERjYxXXxcXHVEODA1W1xcdURDMDAtXFx1REMzNFxcdURDNDctXFx1REM0QVxcdURDODAtXFx1RENBRlxcdURDQzRcXHVEQ0M1XFx1RENDN1xcdUREODAtXFx1RERBRVxcdURERDgtXFx1REREQlxcdURFMDAtXFx1REUyRlxcdURFNDRcXHVERTgwLVxcdURFQUFcXHVERjAwLVxcdURGMTldfFxcdUQ4MDZbXFx1RENBMC1cXHVEQ0RGXFx1RENGRlxcdURFMDBcXHVERTBCLVxcdURFMzJcXHVERTNBXFx1REU1MFxcdURFNUMtXFx1REU4M1xcdURFODYtXFx1REU4OVxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMkVcXHVEQzQwXFx1REM3Mi1cXHVEQzhGXFx1REQwMC1cXHVERDA2XFx1REQwOFxcdUREMDlcXHVERDBCLVxcdUREMzBcXHVERDQ2XXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzAwLVxcdURDNkVcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERUQwLVxcdURFRURcXHVERjAwLVxcdURGMkZcXHVERjQwLVxcdURGNDNcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REYwMC1cXHVERjQ0XFx1REY1MFxcdURGOTMtXFx1REY5RlxcdURGRTBcXHVERkUxXXxcXHVEODIxW1xcdURDMDAtXFx1REZFQ118XFx1RDgyMltcXHVEQzAwLVxcdURFRjJdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OV18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdUREMDAtXFx1REQ0M118XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXS87XG5cdHZhciBJRF9Db250aW51ZSA9IC9bXFx4QUFcXHhCNVxceEJBXFx4QzAtXFx4RDZcXHhEOC1cXHhGNlxceEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4My1cXHUwNDg3XFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MTAtXFx1MDYxQVxcdTA2MjAtXFx1MDY2OVxcdTA2NkUtXFx1MDZEM1xcdTA2RDUtXFx1MDZEQ1xcdTA2REYtXFx1MDZFOFxcdTA2RUEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwLVxcdTA3NEFcXHUwNzRELVxcdTA3QjFcXHUwN0MwLVxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODJEXFx1MDg0MC1cXHUwODVCXFx1MDg2MC1cXHUwODZBXFx1MDhBMC1cXHUwOEI0XFx1MDhCNi1cXHUwOEJEXFx1MDhENC1cXHUwOEUxXFx1MDhFMy1cXHUwOTYzXFx1MDk2Ni1cXHUwOTZGXFx1MDk3MS1cXHUwOTgzXFx1MDk4NS1cXHUwOThDXFx1MDk4RlxcdTA5OTBcXHUwOTkzLVxcdTA5QThcXHUwOUFBLVxcdTA5QjBcXHUwOUIyXFx1MDlCNi1cXHUwOUI5XFx1MDlCQy1cXHUwOUM0XFx1MDlDN1xcdTA5QzhcXHUwOUNCLVxcdTA5Q0VcXHUwOUQ3XFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTNcXHUwOUU2LVxcdTA5RjFcXHUwOUZDXFx1MEEwMS1cXHUwQTAzXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNjYtXFx1MEE3NVxcdTBBODEtXFx1MEE4M1xcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCQy1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFEMFxcdTBBRTAtXFx1MEFFM1xcdTBBRTYtXFx1MEFFRlxcdTBBRjktXFx1MEFGRlxcdTBCMDEtXFx1MEIwM1xcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNDLVxcdTBCNDRcXHUwQjQ3XFx1MEI0OFxcdTBCNEItXFx1MEI0RFxcdTBCNTZcXHUwQjU3XFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjNcXHUwQjY2LVxcdTBCNkZcXHUwQjcxXFx1MEI4MlxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJCRS1cXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNEXFx1MEJEMFxcdTBCRDdcXHUwQkU2LVxcdTBCRUZcXHUwQzAwLVxcdTBDMDNcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNELVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNTgtXFx1MEM1QVxcdTBDNjAtXFx1MEM2M1xcdTBDNjYtXFx1MEM2RlxcdTBDODAtXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMC1cXHUwRDAzXFx1MEQwNS1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDRFXFx1MEQ1NC1cXHUwRDU3XFx1MEQ1Ri1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDZGXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MlxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREU2LVxcdTBERUZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUI5XFx1MEVCQi1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYyOVxcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzdcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5RDlcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUFCMC1cXHUxQUJEXFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUM4MC1cXHUxQzg4XFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0Y5XFx1MUQwMC1cXHUxREY5XFx1MURGQi1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwM0ZcXHUyMDQwXFx1MjA1NFxcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjBEMC1cXHUyMERDXFx1MjBFMVxcdTIwRTUtXFx1MjBGMFxcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTYwLVxcdTIxODhcXHUyQzAwLVxcdTJDMkVcXHUyQzMwLVxcdTJDNUVcXHUyQzYwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDdGLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyREUwLVxcdTJERkZcXHUyRTJGXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDJGXFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5OVxcdTMwOUFcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkVcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHU0RTAwLVxcdTlGRUFcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MkJcXHVBNjQwLVxcdUE2NkZcXHVBNjc0LVxcdUE2N0RcXHVBNjdGLVxcdUE2RjFcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QUVcXHVBN0IwLVxcdUE3QjdcXHVBN0Y3LVxcdUE4MjdcXHVBODQwLVxcdUE4NzNcXHVBODgwLVxcdUE4QzVcXHVBOEQwLVxcdUE4RDlcXHVBOEUwLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE5MDAtXFx1QTkyRFxcdUE5MzAtXFx1QTk1M1xcdUE5NjAtXFx1QTk3Q1xcdUE5ODAtXFx1QTlDMFxcdUE5Q0YtXFx1QTlEOVxcdUE5RTAtXFx1QTlGRVxcdUFBMDAtXFx1QUEzNlxcdUFBNDAtXFx1QUE0RFxcdUFBNTAtXFx1QUE1OVxcdUFBNjAtXFx1QUE3NlxcdUFBN0EtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI2NVxcdUFCNzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkZcXHVGRTMzXFx1RkUzNFxcdUZFNEQtXFx1RkU0RlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGM0ZcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERDQwLVxcdURENzRcXHVEREZEXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REVFMFxcdURGMDAtXFx1REYxRlxcdURGMkQtXFx1REY0QVxcdURGNTAtXFx1REY3QVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRlxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVEQ0EwLVxcdURDQTlcXHVEQ0IwLVxcdURDRDNcXHVEQ0Q4LVxcdURDRkJcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwLVxcdURFMDNcXHVERTA1XFx1REUwNlxcdURFMEMtXFx1REUxM1xcdURFMTUtXFx1REUxN1xcdURFMTktXFx1REUzM1xcdURFMzgtXFx1REUzQVxcdURFM0ZcXHVERTYwLVxcdURFN0NcXHVERTgwLVxcdURFOUNcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTZcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNzJcXHVERjgwLVxcdURGOTFdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXXxcXHVEODA0W1xcdURDMDAtXFx1REM0NlxcdURDNjYtXFx1REM2RlxcdURDN0YtXFx1RENCQVxcdURDRDAtXFx1RENFOFxcdURDRjAtXFx1RENGOVxcdUREMDAtXFx1REQzNFxcdUREMzYtXFx1REQzRlxcdURENTAtXFx1REQ3M1xcdURENzZcXHVERDgwLVxcdUREQzRcXHVERENBLVxcdUREQ0NcXHVEREQwLVxcdUREREFcXHVERERDXFx1REUwMC1cXHVERTExXFx1REUxMy1cXHVERTM3XFx1REUzRVxcdURFODAtXFx1REU4NlxcdURFODhcXHVERThBLVxcdURFOERcXHVERThGLVxcdURFOURcXHVERTlGLVxcdURFQThcXHVERUIwLVxcdURFRUFcXHVERUYwLVxcdURFRjlcXHVERjAwLVxcdURGMDNcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzQy1cXHVERjQ0XFx1REY0N1xcdURGNDhcXHVERjRCLVxcdURGNERcXHVERjUwXFx1REY1N1xcdURGNUQtXFx1REY2M1xcdURGNjYtXFx1REY2Q1xcdURGNzAtXFx1REY3NF18XFx1RDgwNVtcXHVEQzAwLVxcdURDNEFcXHVEQzUwLVxcdURDNTlcXHVEQzgwLVxcdURDQzVcXHVEQ0M3XFx1RENEMC1cXHVEQ0Q5XFx1REQ4MC1cXHVEREI1XFx1RERCOC1cXHVEREMwXFx1REREOC1cXHVEREREXFx1REUwMC1cXHVERTQwXFx1REU0NFxcdURFNTAtXFx1REU1OVxcdURFODAtXFx1REVCN1xcdURFQzAtXFx1REVDOVxcdURGMDAtXFx1REYxOVxcdURGMUQtXFx1REYyQlxcdURGMzAtXFx1REYzOV18XFx1RDgwNltcXHVEQ0EwLVxcdURDRTlcXHVEQ0ZGXFx1REUwMC1cXHVERTNFXFx1REU0N1xcdURFNTAtXFx1REU4M1xcdURFODYtXFx1REU5OVxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMzZcXHVEQzM4LVxcdURDNDBcXHVEQzUwLVxcdURDNTlcXHVEQzcyLVxcdURDOEZcXHVEQzkyLVxcdURDQTdcXHVEQ0E5LVxcdURDQjZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzNlxcdUREM0FcXHVERDNDXFx1REQzRFxcdUREM0YtXFx1REQ0N1xcdURENTAtXFx1REQ1OV18XFx1RDgwOFtcXHVEQzAwLVxcdURGOTldfFxcdUQ4MDlbXFx1REMwMC1cXHVEQzZFXFx1REM4MC1cXHVERDQzXXxbXFx1RDgwQ1xcdUQ4MUMtXFx1RDgyMFxcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q1xcdUQ4NkYtXFx1RDg3MlxcdUQ4NzQtXFx1RDg3OV1bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxMVtcXHVEQzAwLVxcdURFNDZdfFxcdUQ4MUFbXFx1REMwMC1cXHVERTM4XFx1REU0MC1cXHVERTVFXFx1REU2MC1cXHVERTY5XFx1REVEMC1cXHVERUVEXFx1REVGMC1cXHVERUY0XFx1REYwMC1cXHVERjM2XFx1REY0MC1cXHVERjQzXFx1REY1MC1cXHVERjU5XFx1REY2My1cXHVERjc3XFx1REY3RC1cXHVERjhGXXxcXHVEODFCW1xcdURGMDAtXFx1REY0NFxcdURGNTAtXFx1REY3RVxcdURGOEYtXFx1REY5RlxcdURGRTBcXHVERkUxXXxcXHVEODIxW1xcdURDMDAtXFx1REZFQ118XFx1RDgyMltcXHVEQzAwLVxcdURFRjJdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OVxcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NF18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXFx1REZDRS1cXHVERkZGXXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXXxcXHVEODNBW1xcdURDMDAtXFx1RENDNFxcdURDRDAtXFx1RENENlxcdUREMDAtXFx1REQ0QVxcdURENTAtXFx1REQ1OV18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVENlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXXxcXHVEQjQwW1xcdUREMDAtXFx1RERFRl0vO1xuXG5cdHZhciB1bmljb2RlID0ge1xuXHRcdFNwYWNlX1NlcGFyYXRvcjogU3BhY2VfU2VwYXJhdG9yLFxuXHRcdElEX1N0YXJ0OiBJRF9TdGFydCxcblx0XHRJRF9Db250aW51ZTogSURfQ29udGludWVcblx0fTtcblxuXHR2YXIgdXRpbCA9IHtcblx0ICAgIGlzU3BhY2VTZXBhcmF0b3I6IGZ1bmN0aW9uIGlzU3BhY2VTZXBhcmF0b3IgKGMpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnICYmIHVuaWNvZGUuU3BhY2VfU2VwYXJhdG9yLnRlc3QoYylcblx0ICAgIH0sXG5cblx0ICAgIGlzSWRTdGFydENoYXI6IGZ1bmN0aW9uIGlzSWRTdGFydENoYXIgKGMpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnICYmIChcblx0ICAgICAgICAgICAgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fFxuXHQgICAgICAgIChjID49ICdBJyAmJiBjIDw9ICdaJykgfHxcblx0ICAgICAgICAoYyA9PT0gJyQnKSB8fCAoYyA9PT0gJ18nKSB8fFxuXHQgICAgICAgIHVuaWNvZGUuSURfU3RhcnQudGVzdChjKVxuXHQgICAgICAgIClcblx0ICAgIH0sXG5cblx0ICAgIGlzSWRDb250aW51ZUNoYXI6IGZ1bmN0aW9uIGlzSWRDb250aW51ZUNoYXIgKGMpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnICYmIChcblx0ICAgICAgICAgICAgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fFxuXHQgICAgICAgIChjID49ICdBJyAmJiBjIDw9ICdaJykgfHxcblx0ICAgICAgICAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8XG5cdCAgICAgICAgKGMgPT09ICckJykgfHwgKGMgPT09ICdfJykgfHxcblx0ICAgICAgICAoYyA9PT0gJ1xcdTIwMEMnKSB8fCAoYyA9PT0gJ1xcdTIwMEQnKSB8fFxuXHQgICAgICAgIHVuaWNvZGUuSURfQ29udGludWUudGVzdChjKVxuXHQgICAgICAgIClcblx0ICAgIH0sXG5cblx0ICAgIGlzRGlnaXQ6IGZ1bmN0aW9uIGlzRGlnaXQgKGMpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZW9mIGMgPT09ICdzdHJpbmcnICYmIC9bMC05XS8udGVzdChjKVxuXHQgICAgfSxcblxuXHQgICAgaXNIZXhEaWdpdDogZnVuY3Rpb24gaXNIZXhEaWdpdCAoYykge1xuXHQgICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmluZycgJiYgL1swLTlBLUZhLWZdLy50ZXN0KGMpXG5cdCAgICB9LFxuXHR9O1xuXG5cdHZhciBzb3VyY2U7XG5cdHZhciBwYXJzZVN0YXRlO1xuXHR2YXIgc3RhY2s7XG5cdHZhciBwb3M7XG5cdHZhciBsaW5lO1xuXHR2YXIgY29sdW1uO1xuXHR2YXIgdG9rZW47XG5cdHZhciBrZXk7XG5cdHZhciByb290O1xuXG5cdHZhciBwYXJzZSA9IGZ1bmN0aW9uIHBhcnNlICh0ZXh0LCByZXZpdmVyKSB7XG5cdCAgICBzb3VyY2UgPSBTdHJpbmcodGV4dCk7XG5cdCAgICBwYXJzZVN0YXRlID0gJ3N0YXJ0Jztcblx0ICAgIHN0YWNrID0gW107XG5cdCAgICBwb3MgPSAwO1xuXHQgICAgbGluZSA9IDE7XG5cdCAgICBjb2x1bW4gPSAwO1xuXHQgICAgdG9rZW4gPSB1bmRlZmluZWQ7XG5cdCAgICBrZXkgPSB1bmRlZmluZWQ7XG5cdCAgICByb290ID0gdW5kZWZpbmVkO1xuXG5cdCAgICBkbyB7XG5cdCAgICAgICAgdG9rZW4gPSBsZXgoKTtcblxuXHQgICAgICAgIC8vIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZS5cblx0ICAgICAgICAvLyBpZiAoIXBhcnNlU3RhdGVzW3BhcnNlU3RhdGVdKSB7XG5cdCAgICAgICAgLy8gICAgIHRocm93IGludmFsaWRQYXJzZVN0YXRlKClcblx0ICAgICAgICAvLyB9XG5cblx0ICAgICAgICBwYXJzZVN0YXRlc1twYXJzZVN0YXRlXSgpO1xuXHQgICAgfSB3aGlsZSAodG9rZW4udHlwZSAhPT0gJ2VvZicpXG5cblx0ICAgIGlmICh0eXBlb2YgcmV2aXZlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHJldHVybiBpbnRlcm5hbGl6ZSh7Jyc6IHJvb3R9LCAnJywgcmV2aXZlcilcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHJvb3Rcblx0fTtcblxuXHRmdW5jdGlvbiBpbnRlcm5hbGl6ZSAoaG9sZGVyLCBuYW1lLCByZXZpdmVyKSB7XG5cdCAgICB2YXIgdmFsdWUgPSBob2xkZXJbbmFtZV07XG5cdCAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBrZXkgPSBTdHJpbmcoaSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBpbnRlcm5hbGl6ZSh2YWx1ZSwga2V5LCByZXZpdmVyKTtcblx0ICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tleV07XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWx1ZSwga2V5LCB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXBsYWNlbWVudCxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGtleSQxIGluIHZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQkMSA9IGludGVybmFsaXplKHZhbHVlLCBrZXkkMSwgcmV2aXZlcik7XG5cdCAgICAgICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQkMSA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tleSQxXTtcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbHVlLCBrZXkkMSwge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVwbGFjZW1lbnQkMSxcblx0ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG5cdCAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0ICAgICAgICAgICAgICAgICAgICB9KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHJldml2ZXIuY2FsbChob2xkZXIsIG5hbWUsIHZhbHVlKVxuXHR9XG5cblx0dmFyIGxleFN0YXRlO1xuXHR2YXIgYnVmZmVyO1xuXHR2YXIgZG91YmxlUXVvdGU7XG5cdHZhciBzaWduO1xuXHR2YXIgYztcblxuXHRmdW5jdGlvbiBsZXggKCkge1xuXHQgICAgbGV4U3RhdGUgPSAnZGVmYXVsdCc7XG5cdCAgICBidWZmZXIgPSAnJztcblx0ICAgIGRvdWJsZVF1b3RlID0gZmFsc2U7XG5cdCAgICBzaWduID0gMTtcblxuXHQgICAgZm9yICg7Oykge1xuXHQgICAgICAgIGMgPSBwZWVrKCk7XG5cblx0ICAgICAgICAvLyBUaGlzIGNvZGUgaXMgdW5yZWFjaGFibGUuXG5cdCAgICAgICAgLy8gaWYgKCFsZXhTdGF0ZXNbbGV4U3RhdGVdKSB7XG5cdCAgICAgICAgLy8gICAgIHRocm93IGludmFsaWRMZXhTdGF0ZShsZXhTdGF0ZSlcblx0ICAgICAgICAvLyB9XG5cblx0ICAgICAgICB2YXIgdG9rZW4gPSBsZXhTdGF0ZXNbbGV4U3RhdGVdKCk7XG5cdCAgICAgICAgaWYgKHRva2VuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiB0b2tlblxuXHQgICAgICAgIH1cblx0ICAgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIHBlZWsgKCkge1xuXHQgICAgaWYgKHNvdXJjZVtwb3NdKSB7XG5cdCAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHNvdXJjZS5jb2RlUG9pbnRBdChwb3MpKVxuXHQgICAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gcmVhZCAoKSB7XG5cdCAgICB2YXIgYyA9IHBlZWsoKTtcblxuXHQgICAgaWYgKGMgPT09ICdcXG4nKSB7XG5cdCAgICAgICAgbGluZSsrO1xuXHQgICAgICAgIGNvbHVtbiA9IDA7XG5cdCAgICB9IGVsc2UgaWYgKGMpIHtcblx0ICAgICAgICBjb2x1bW4gKz0gYy5sZW5ndGg7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICAgIGNvbHVtbisrO1xuXHQgICAgfVxuXG5cdCAgICBpZiAoYykge1xuXHQgICAgICAgIHBvcyArPSBjLmxlbmd0aDtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIGNcblx0fVxuXG5cdHZhciBsZXhTdGF0ZXMgPSB7XG5cdCAgICBkZWZhdWx0OiBmdW5jdGlvbiBkZWZhdWx0JDEgKCkge1xuXHQgICAgICAgIHN3aXRjaCAoYykge1xuXHQgICAgICAgIGNhc2UgJ1xcdCc6XG5cdCAgICAgICAgY2FzZSAnXFx2Jzpcblx0ICAgICAgICBjYXNlICdcXGYnOlxuXHQgICAgICAgIGNhc2UgJyAnOlxuXHQgICAgICAgIGNhc2UgJ1xcdTAwQTAnOlxuXHQgICAgICAgIGNhc2UgJ1xcdUZFRkYnOlxuXHQgICAgICAgIGNhc2UgJ1xcbic6XG5cdCAgICAgICAgY2FzZSAnXFxyJzpcblx0ICAgICAgICBjYXNlICdcXHUyMDI4Jzpcblx0ICAgICAgICBjYXNlICdcXHUyMDI5Jzpcblx0ICAgICAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgICAgICByZXR1cm5cblxuXHQgICAgICAgIGNhc2UgJy8nOlxuXHQgICAgICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgICAgIGxleFN0YXRlID0gJ2NvbW1lbnQnO1xuXHQgICAgICAgICAgICByZXR1cm5cblxuXHQgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuXHQgICAgICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbignZW9mJylcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAodXRpbC5pc1NwYWNlU2VwYXJhdG9yKGMpKSB7XG5cdCAgICAgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlLlxuXHQgICAgICAgIC8vIGlmICghbGV4U3RhdGVzW3BhcnNlU3RhdGVdKSB7XG5cdCAgICAgICAgLy8gICAgIHRocm93IGludmFsaWRMZXhTdGF0ZShwYXJzZVN0YXRlKVxuXHQgICAgICAgIC8vIH1cblxuXHQgICAgICAgIHJldHVybiBsZXhTdGF0ZXNbcGFyc2VTdGF0ZV0oKVxuXHQgICAgfSxcblxuXHQgICAgY29tbWVudDogZnVuY3Rpb24gY29tbWVudCAoKSB7XG5cdCAgICAgICAgc3dpdGNoIChjKSB7XG5cdCAgICAgICAgY2FzZSAnKic6XG5cdCAgICAgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnbXVsdGlMaW5lQ29tbWVudCc7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnLyc6XG5cdCAgICAgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnc2luZ2xlTGluZUNvbW1lbnQnO1xuXHQgICAgICAgICAgICByZXR1cm5cblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICB9LFxuXG5cdCAgICBtdWx0aUxpbmVDb21tZW50OiBmdW5jdGlvbiBtdWx0aUxpbmVDb21tZW50ICgpIHtcblx0ICAgICAgICBzd2l0Y2ggKGMpIHtcblx0ICAgICAgICBjYXNlICcqJzpcblx0ICAgICAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICdtdWx0aUxpbmVDb21tZW50QXN0ZXJpc2snO1xuXHQgICAgICAgICAgICByZXR1cm5cblxuXHQgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuXHQgICAgICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmVhZCgpO1xuXHQgICAgfSxcblxuXHQgICAgbXVsdGlMaW5lQ29tbWVudEFzdGVyaXNrOiBmdW5jdGlvbiBtdWx0aUxpbmVDb21tZW50QXN0ZXJpc2sgKCkge1xuXHQgICAgICAgIHN3aXRjaCAoYykge1xuXHQgICAgICAgIGNhc2UgJyonOlxuXHQgICAgICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnLyc6XG5cdCAgICAgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVmYXVsdCc7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG5cdCAgICAgICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgbGV4U3RhdGUgPSAnbXVsdGlMaW5lQ29tbWVudCc7XG5cdCAgICB9LFxuXG5cdCAgICBzaW5nbGVMaW5lQ29tbWVudDogZnVuY3Rpb24gc2luZ2xlTGluZUNvbW1lbnQgKCkge1xuXHQgICAgICAgIHN3aXRjaCAoYykge1xuXHQgICAgICAgIGNhc2UgJ1xcbic6XG5cdCAgICAgICAgY2FzZSAnXFxyJzpcblx0ICAgICAgICBjYXNlICdcXHUyMDI4Jzpcblx0ICAgICAgICBjYXNlICdcXHUyMDI5Jzpcblx0ICAgICAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICdkZWZhdWx0Jztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cblx0ICAgICAgICBjYXNlIHVuZGVmaW5lZDpcblx0ICAgICAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ2VvZicpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmVhZCgpO1xuXHQgICAgfSxcblxuXHQgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlICgpIHtcblx0ICAgICAgICBzd2l0Y2ggKGMpIHtcblx0ICAgICAgICBjYXNlICd7Jzpcblx0ICAgICAgICBjYXNlICdbJzpcblx0ICAgICAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdwdW5jdHVhdG9yJywgcmVhZCgpKVxuXG5cdCAgICAgICAgY2FzZSAnbic6XG5cdCAgICAgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICAgICAgbGl0ZXJhbCgndWxsJyk7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbignbnVsbCcsIG51bGwpXG5cblx0ICAgICAgICBjYXNlICd0Jzpcblx0ICAgICAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgICAgICBsaXRlcmFsKCdydWUnKTtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdib29sZWFuJywgdHJ1ZSlcblxuXHQgICAgICAgIGNhc2UgJ2YnOlxuXHQgICAgICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgICAgIGxpdGVyYWwoJ2Fsc2UnKTtcblx0ICAgICAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdib29sZWFuJywgZmFsc2UpXG5cblx0ICAgICAgICBjYXNlICctJzpcblx0ICAgICAgICBjYXNlICcrJzpcblx0ICAgICAgICAgICAgaWYgKHJlYWQoKSA9PT0gJy0nKSB7XG5cdCAgICAgICAgICAgICAgICBzaWduID0gLTE7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICdzaWduJztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cblx0ICAgICAgICBjYXNlICcuJzpcblx0ICAgICAgICAgICAgYnVmZmVyID0gcmVhZCgpO1xuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICdkZWNpbWFsUG9pbnRMZWFkaW5nJztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cblx0ICAgICAgICBjYXNlICcwJzpcblx0ICAgICAgICAgICAgYnVmZmVyID0gcmVhZCgpO1xuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICd6ZXJvJztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cblx0ICAgICAgICBjYXNlICcxJzpcblx0ICAgICAgICBjYXNlICcyJzpcblx0ICAgICAgICBjYXNlICczJzpcblx0ICAgICAgICBjYXNlICc0Jzpcblx0ICAgICAgICBjYXNlICc1Jzpcblx0ICAgICAgICBjYXNlICc2Jzpcblx0ICAgICAgICBjYXNlICc3Jzpcblx0ICAgICAgICBjYXNlICc4Jzpcblx0ICAgICAgICBjYXNlICc5Jzpcblx0ICAgICAgICAgICAgYnVmZmVyID0gcmVhZCgpO1xuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICdkZWNpbWFsSW50ZWdlcic7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnSSc6XG5cdCAgICAgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICAgICAgbGl0ZXJhbCgnbmZpbml0eScpO1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ251bWVyaWMnLCBJbmZpbml0eSlcblxuXHQgICAgICAgIGNhc2UgJ04nOlxuXHQgICAgICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgICAgIGxpdGVyYWwoJ2FOJyk7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbignbnVtZXJpYycsIE5hTilcblxuXHQgICAgICAgIGNhc2UgJ1wiJzpcblx0ICAgICAgICBjYXNlIFwiJ1wiOlxuXHQgICAgICAgICAgICBkb3VibGVRdW90ZSA9IChyZWFkKCkgPT09ICdcIicpO1xuXHQgICAgICAgICAgICBidWZmZXIgPSAnJztcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnc3RyaW5nJztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgaW52YWxpZENoYXIocmVhZCgpKVxuXHQgICAgfSxcblxuXHQgICAgaWRlbnRpZmllck5hbWVTdGFydEVzY2FwZTogZnVuY3Rpb24gaWRlbnRpZmllck5hbWVTdGFydEVzY2FwZSAoKSB7XG5cdCAgICAgICAgaWYgKGMgIT09ICd1Jykge1xuXHQgICAgICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgIHZhciB1ID0gdW5pY29kZUVzY2FwZSgpO1xuXHQgICAgICAgIHN3aXRjaCAodSkge1xuXHQgICAgICAgIGNhc2UgJyQnOlxuXHQgICAgICAgIGNhc2UgJ18nOlxuXHQgICAgICAgICAgICBicmVha1xuXG5cdCAgICAgICAgZGVmYXVsdDpcblx0ICAgICAgICAgICAgaWYgKCF1dGlsLmlzSWRTdGFydENoYXIodSkpIHtcblx0ICAgICAgICAgICAgICAgIHRocm93IGludmFsaWRJZGVudGlmaWVyKClcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIGJyZWFrXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgYnVmZmVyICs9IHU7XG5cdCAgICAgICAgbGV4U3RhdGUgPSAnaWRlbnRpZmllck5hbWUnO1xuXHQgICAgfSxcblxuXHQgICAgaWRlbnRpZmllck5hbWU6IGZ1bmN0aW9uIGlkZW50aWZpZXJOYW1lICgpIHtcblx0ICAgICAgICBzd2l0Y2ggKGMpIHtcblx0ICAgICAgICBjYXNlICckJzpcblx0ICAgICAgICBjYXNlICdfJzpcblx0ICAgICAgICBjYXNlICdcXHUyMDBDJzpcblx0ICAgICAgICBjYXNlICdcXHUyMDBEJzpcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgcmV0dXJuXG5cblx0ICAgICAgICBjYXNlICdcXFxcJzpcblx0ICAgICAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICdpZGVudGlmaWVyTmFtZUVzY2FwZSc7XG5cdCAgICAgICAgICAgIHJldHVyblxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmICh1dGlsLmlzSWRDb250aW51ZUNoYXIoYykpIHtcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdpZGVudGlmaWVyJywgYnVmZmVyKVxuXHQgICAgfSxcblxuXHQgICAgaWRlbnRpZmllck5hbWVFc2NhcGU6IGZ1bmN0aW9uIGlkZW50aWZpZXJOYW1lRXNjYXBlICgpIHtcblx0ICAgICAgICBpZiAoYyAhPT0gJ3UnKSB7XG5cdCAgICAgICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgdmFyIHUgPSB1bmljb2RlRXNjYXBlKCk7XG5cdCAgICAgICAgc3dpdGNoICh1KSB7XG5cdCAgICAgICAgY2FzZSAnJCc6XG5cdCAgICAgICAgY2FzZSAnXyc6XG5cdCAgICAgICAgY2FzZSAnXFx1MjAwQyc6XG5cdCAgICAgICAgY2FzZSAnXFx1MjAwRCc6XG5cdCAgICAgICAgICAgIGJyZWFrXG5cblx0ICAgICAgICBkZWZhdWx0OlxuXHQgICAgICAgICAgICBpZiAoIXV0aWwuaXNJZENvbnRpbnVlQ2hhcih1KSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgaW52YWxpZElkZW50aWZpZXIoKVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBidWZmZXIgKz0gdTtcblx0ICAgICAgICBsZXhTdGF0ZSA9ICdpZGVudGlmaWVyTmFtZSc7XG5cdCAgICB9LFxuXG5cdCAgICBzaWduOiBmdW5jdGlvbiBzaWduJDEgKCkge1xuXHQgICAgICAgIHN3aXRjaCAoYykge1xuXHQgICAgICAgIGNhc2UgJy4nOlxuXHQgICAgICAgICAgICBidWZmZXIgPSByZWFkKCk7XG5cdCAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxQb2ludExlYWRpbmcnO1xuXHQgICAgICAgICAgICByZXR1cm5cblxuXHQgICAgICAgIGNhc2UgJzAnOlxuXHQgICAgICAgICAgICBidWZmZXIgPSByZWFkKCk7XG5cdCAgICAgICAgICAgIGxleFN0YXRlID0gJ3plcm8nO1xuXHQgICAgICAgICAgICByZXR1cm5cblxuXHQgICAgICAgIGNhc2UgJzEnOlxuXHQgICAgICAgIGNhc2UgJzInOlxuXHQgICAgICAgIGNhc2UgJzMnOlxuXHQgICAgICAgIGNhc2UgJzQnOlxuXHQgICAgICAgIGNhc2UgJzUnOlxuXHQgICAgICAgIGNhc2UgJzYnOlxuXHQgICAgICAgIGNhc2UgJzcnOlxuXHQgICAgICAgIGNhc2UgJzgnOlxuXHQgICAgICAgIGNhc2UgJzknOlxuXHQgICAgICAgICAgICBidWZmZXIgPSByZWFkKCk7XG5cdCAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxJbnRlZ2VyJztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cblx0ICAgICAgICBjYXNlICdJJzpcblx0ICAgICAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgICAgICBsaXRlcmFsKCduZmluaXR5Jyk7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbignbnVtZXJpYycsIHNpZ24gKiBJbmZpbml0eSlcblxuXHQgICAgICAgIGNhc2UgJ04nOlxuXHQgICAgICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgICAgIGxpdGVyYWwoJ2FOJyk7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbignbnVtZXJpYycsIE5hTilcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICB9LFxuXG5cdCAgICB6ZXJvOiBmdW5jdGlvbiB6ZXJvICgpIHtcblx0ICAgICAgICBzd2l0Y2ggKGMpIHtcblx0ICAgICAgICBjYXNlICcuJzpcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbFBvaW50Jztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cblx0ICAgICAgICBjYXNlICdlJzpcblx0ICAgICAgICBjYXNlICdFJzpcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbEV4cG9uZW50Jztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cblx0ICAgICAgICBjYXNlICd4Jzpcblx0ICAgICAgICBjYXNlICdYJzpcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnaGV4YWRlY2ltYWwnO1xuXHQgICAgICAgICAgICByZXR1cm5cblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ251bWVyaWMnLCBzaWduICogMClcblx0ICAgIH0sXG5cblx0ICAgIGRlY2ltYWxJbnRlZ2VyOiBmdW5jdGlvbiBkZWNpbWFsSW50ZWdlciAoKSB7XG5cdCAgICAgICAgc3dpdGNoIChjKSB7XG5cdCAgICAgICAgY2FzZSAnLic6XG5cdCAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKCk7XG5cdCAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxQb2ludCc7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnZSc6XG5cdCAgICAgICAgY2FzZSAnRSc6XG5cdCAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKCk7XG5cdCAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxFeHBvbmVudCc7XG5cdCAgICAgICAgICAgIHJldHVyblxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmICh1dGlsLmlzRGlnaXQoYykpIHtcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdudW1lcmljJywgc2lnbiAqIE51bWJlcihidWZmZXIpKVxuXHQgICAgfSxcblxuXHQgICAgZGVjaW1hbFBvaW50TGVhZGluZzogZnVuY3Rpb24gZGVjaW1hbFBvaW50TGVhZGluZyAoKSB7XG5cdCAgICAgICAgaWYgKHV0aWwuaXNEaWdpdChjKSkge1xuXHQgICAgICAgICAgICBidWZmZXIgKz0gcmVhZCgpO1xuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICdkZWNpbWFsRnJhY3Rpb24nO1xuXHQgICAgICAgICAgICByZXR1cm5cblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICB9LFxuXG5cdCAgICBkZWNpbWFsUG9pbnQ6IGZ1bmN0aW9uIGRlY2ltYWxQb2ludCAoKSB7XG5cdCAgICAgICAgc3dpdGNoIChjKSB7XG5cdCAgICAgICAgY2FzZSAnZSc6XG5cdCAgICAgICAgY2FzZSAnRSc6XG5cdCAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKCk7XG5cdCAgICAgICAgICAgIGxleFN0YXRlID0gJ2RlY2ltYWxFeHBvbmVudCc7XG5cdCAgICAgICAgICAgIHJldHVyblxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmICh1dGlsLmlzRGlnaXQoYykpIHtcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbEZyYWN0aW9uJztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdudW1lcmljJywgc2lnbiAqIE51bWJlcihidWZmZXIpKVxuXHQgICAgfSxcblxuXHQgICAgZGVjaW1hbEZyYWN0aW9uOiBmdW5jdGlvbiBkZWNpbWFsRnJhY3Rpb24gKCkge1xuXHQgICAgICAgIHN3aXRjaCAoYykge1xuXHQgICAgICAgIGNhc2UgJ2UnOlxuXHQgICAgICAgIGNhc2UgJ0UnOlxuXHQgICAgICAgICAgICBidWZmZXIgKz0gcmVhZCgpO1xuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICdkZWNpbWFsRXhwb25lbnQnO1xuXHQgICAgICAgICAgICByZXR1cm5cblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAodXRpbC5pc0RpZ2l0KGMpKSB7XG5cdCAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKCk7XG5cdCAgICAgICAgICAgIHJldHVyblxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBuZXdUb2tlbignbnVtZXJpYycsIHNpZ24gKiBOdW1iZXIoYnVmZmVyKSlcblx0ICAgIH0sXG5cblx0ICAgIGRlY2ltYWxFeHBvbmVudDogZnVuY3Rpb24gZGVjaW1hbEV4cG9uZW50ICgpIHtcblx0ICAgICAgICBzd2l0Y2ggKGMpIHtcblx0ICAgICAgICBjYXNlICcrJzpcblx0ICAgICAgICBjYXNlICctJzpcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbEV4cG9uZW50U2lnbic7XG5cdCAgICAgICAgICAgIHJldHVyblxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmICh1dGlsLmlzRGlnaXQoYykpIHtcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbEV4cG9uZW50SW50ZWdlcic7XG5cdCAgICAgICAgICAgIHJldHVyblxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcblx0ICAgIH0sXG5cblx0ICAgIGRlY2ltYWxFeHBvbmVudFNpZ246IGZ1bmN0aW9uIGRlY2ltYWxFeHBvbmVudFNpZ24gKCkge1xuXHQgICAgICAgIGlmICh1dGlsLmlzRGlnaXQoYykpIHtcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnZGVjaW1hbEV4cG9uZW50SW50ZWdlcic7XG5cdCAgICAgICAgICAgIHJldHVyblxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcblx0ICAgIH0sXG5cblx0ICAgIGRlY2ltYWxFeHBvbmVudEludGVnZXI6IGZ1bmN0aW9uIGRlY2ltYWxFeHBvbmVudEludGVnZXIgKCkge1xuXHQgICAgICAgIGlmICh1dGlsLmlzRGlnaXQoYykpIHtcblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcmV0dXJuIG5ld1Rva2VuKCdudW1lcmljJywgc2lnbiAqIE51bWJlcihidWZmZXIpKVxuXHQgICAgfSxcblxuXHQgICAgaGV4YWRlY2ltYWw6IGZ1bmN0aW9uIGhleGFkZWNpbWFsICgpIHtcblx0ICAgICAgICBpZiAodXRpbC5pc0hleERpZ2l0KGMpKSB7XG5cdCAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKCk7XG5cdCAgICAgICAgICAgIGxleFN0YXRlID0gJ2hleGFkZWNpbWFsSW50ZWdlcic7XG5cdCAgICAgICAgICAgIHJldHVyblxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcblx0ICAgIH0sXG5cblx0ICAgIGhleGFkZWNpbWFsSW50ZWdlcjogZnVuY3Rpb24gaGV4YWRlY2ltYWxJbnRlZ2VyICgpIHtcblx0ICAgICAgICBpZiAodXRpbC5pc0hleERpZ2l0KGMpKSB7XG5cdCAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKCk7XG5cdCAgICAgICAgICAgIHJldHVyblxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBuZXdUb2tlbignbnVtZXJpYycsIHNpZ24gKiBOdW1iZXIoYnVmZmVyKSlcblx0ICAgIH0sXG5cblx0ICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nICgpIHtcblx0ICAgICAgICBzd2l0Y2ggKGMpIHtcblx0ICAgICAgICBjYXNlICdcXFxcJzpcblx0ICAgICAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgICAgICBidWZmZXIgKz0gZXNjYXBlKCk7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnXCInOlxuXHQgICAgICAgICAgICBpZiAoZG91YmxlUXVvdGUpIHtcblx0ICAgICAgICAgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbignc3RyaW5nJywgYnVmZmVyKVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgICAgICAgICAgcmV0dXJuXG5cblx0ICAgICAgICBjYXNlIFwiJ1wiOlxuXHQgICAgICAgICAgICBpZiAoIWRvdWJsZVF1b3RlKSB7XG5cdCAgICAgICAgICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG9rZW4oJ3N0cmluZycsIGJ1ZmZlcilcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKCk7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnXFxuJzpcblx0ICAgICAgICBjYXNlICdcXHInOlxuXHQgICAgICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cblx0ICAgICAgICBjYXNlICdcXHUyMDI4Jzpcblx0ICAgICAgICBjYXNlICdcXHUyMDI5Jzpcblx0ICAgICAgICAgICAgc2VwYXJhdG9yQ2hhcihjKTtcblx0ICAgICAgICAgICAgYnJlYWtcblxuXHQgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxuXHQgICAgICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgIH0sXG5cblx0ICAgIHN0YXJ0OiBmdW5jdGlvbiBzdGFydCAoKSB7XG5cdCAgICAgICAgc3dpdGNoIChjKSB7XG5cdCAgICAgICAgY2FzZSAneyc6XG5cdCAgICAgICAgY2FzZSAnWyc6XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbigncHVuY3R1YXRvcicsIHJlYWQoKSlcblxuXHQgICAgICAgIC8vIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBzaW5jZSB0aGUgZGVmYXVsdCBsZXhTdGF0ZSBoYW5kbGVzIGVvZi5cblx0ICAgICAgICAvLyBjYXNlIHVuZGVmaW5lZDpcblx0ICAgICAgICAvLyAgICAgcmV0dXJuIG5ld1Rva2VuKCdlb2YnKVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGxleFN0YXRlID0gJ3ZhbHVlJztcblx0ICAgIH0sXG5cblx0ICAgIGJlZm9yZVByb3BlcnR5TmFtZTogZnVuY3Rpb24gYmVmb3JlUHJvcGVydHlOYW1lICgpIHtcblx0ICAgICAgICBzd2l0Y2ggKGMpIHtcblx0ICAgICAgICBjYXNlICckJzpcblx0ICAgICAgICBjYXNlICdfJzpcblx0ICAgICAgICAgICAgYnVmZmVyID0gcmVhZCgpO1xuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICdpZGVudGlmaWVyTmFtZSc7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnXFxcXCc6XG5cdCAgICAgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICAgICAgbGV4U3RhdGUgPSAnaWRlbnRpZmllck5hbWVTdGFydEVzY2FwZSc7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnfSc6XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbigncHVuY3R1YXRvcicsIHJlYWQoKSlcblxuXHQgICAgICAgIGNhc2UgJ1wiJzpcblx0ICAgICAgICBjYXNlIFwiJ1wiOlxuXHQgICAgICAgICAgICBkb3VibGVRdW90ZSA9IChyZWFkKCkgPT09ICdcIicpO1xuXHQgICAgICAgICAgICBsZXhTdGF0ZSA9ICdzdHJpbmcnO1xuXHQgICAgICAgICAgICByZXR1cm5cblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAodXRpbC5pc0lkU3RhcnRDaGFyKGMpKSB7XG5cdCAgICAgICAgICAgIGJ1ZmZlciArPSByZWFkKCk7XG5cdCAgICAgICAgICAgIGxleFN0YXRlID0gJ2lkZW50aWZpZXJOYW1lJztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdGhyb3cgaW52YWxpZENoYXIocmVhZCgpKVxuXHQgICAgfSxcblxuXHQgICAgYWZ0ZXJQcm9wZXJ0eU5hbWU6IGZ1bmN0aW9uIGFmdGVyUHJvcGVydHlOYW1lICgpIHtcblx0ICAgICAgICBpZiAoYyA9PT0gJzonKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbigncHVuY3R1YXRvcicsIHJlYWQoKSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICB9LFxuXG5cdCAgICBiZWZvcmVQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbiBiZWZvcmVQcm9wZXJ0eVZhbHVlICgpIHtcblx0ICAgICAgICBsZXhTdGF0ZSA9ICd2YWx1ZSc7XG5cdCAgICB9LFxuXG5cdCAgICBhZnRlclByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uIGFmdGVyUHJvcGVydHlWYWx1ZSAoKSB7XG5cdCAgICAgICAgc3dpdGNoIChjKSB7XG5cdCAgICAgICAgY2FzZSAnLCc6XG5cdCAgICAgICAgY2FzZSAnfSc6XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbigncHVuY3R1YXRvcicsIHJlYWQoKSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICB9LFxuXG5cdCAgICBiZWZvcmVBcnJheVZhbHVlOiBmdW5jdGlvbiBiZWZvcmVBcnJheVZhbHVlICgpIHtcblx0ICAgICAgICBpZiAoYyA9PT0gJ10nKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbigncHVuY3R1YXRvcicsIHJlYWQoKSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBsZXhTdGF0ZSA9ICd2YWx1ZSc7XG5cdCAgICB9LFxuXG5cdCAgICBhZnRlckFycmF5VmFsdWU6IGZ1bmN0aW9uIGFmdGVyQXJyYXlWYWx1ZSAoKSB7XG5cdCAgICAgICAgc3dpdGNoIChjKSB7XG5cdCAgICAgICAgY2FzZSAnLCc6XG5cdCAgICAgICAgY2FzZSAnXSc6XG5cdCAgICAgICAgICAgIHJldHVybiBuZXdUb2tlbigncHVuY3R1YXRvcicsIHJlYWQoKSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICB9LFxuXG5cdCAgICBlbmQ6IGZ1bmN0aW9uIGVuZCAoKSB7XG5cdCAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgZGVmYXVsdCBsZXhTdGF0ZS5cblx0ICAgICAgICAvLyBpZiAoYyA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgLy8gICAgIHJlYWQoKVxuXHQgICAgICAgIC8vICAgICByZXR1cm4gbmV3VG9rZW4oJ2VvZicpXG5cdCAgICAgICAgLy8gfVxuXG5cdCAgICAgICAgdGhyb3cgaW52YWxpZENoYXIocmVhZCgpKVxuXHQgICAgfSxcblx0fTtcblxuXHRmdW5jdGlvbiBuZXdUb2tlbiAodHlwZSwgdmFsdWUpIHtcblx0ICAgIHJldHVybiB7XG5cdCAgICAgICAgdHlwZTogdHlwZSxcblx0ICAgICAgICB2YWx1ZTogdmFsdWUsXG5cdCAgICAgICAgbGluZTogbGluZSxcblx0ICAgICAgICBjb2x1bW46IGNvbHVtbixcblx0ICAgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGxpdGVyYWwgKHMpIHtcblx0ICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gczsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcblx0ICAgICAgICB2YXIgYyA9IGxpc3RbaV07XG5cblx0ICAgICAgICB2YXIgcCA9IHBlZWsoKTtcblxuXHQgICAgICAgIGlmIChwICE9PSBjKSB7XG5cdCAgICAgICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICByZWFkKCk7XG5cdCAgICB9XG5cdH1cblxuXHRmdW5jdGlvbiBlc2NhcGUgKCkge1xuXHQgICAgdmFyIGMgPSBwZWVrKCk7XG5cdCAgICBzd2l0Y2ggKGMpIHtcblx0ICAgIGNhc2UgJ2InOlxuXHQgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICByZXR1cm4gJ1xcYidcblxuXHQgICAgY2FzZSAnZic6XG5cdCAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgIHJldHVybiAnXFxmJ1xuXG5cdCAgICBjYXNlICduJzpcblx0ICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgcmV0dXJuICdcXG4nXG5cblx0ICAgIGNhc2UgJ3InOlxuXHQgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICByZXR1cm4gJ1xccidcblxuXHQgICAgY2FzZSAndCc6XG5cdCAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgIHJldHVybiAnXFx0J1xuXG5cdCAgICBjYXNlICd2Jzpcblx0ICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgcmV0dXJuICdcXHYnXG5cblx0ICAgIGNhc2UgJzAnOlxuXHQgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICBpZiAodXRpbC5pc0RpZ2l0KHBlZWsoKSkpIHtcblx0ICAgICAgICAgICAgdGhyb3cgaW52YWxpZENoYXIocmVhZCgpKVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiAnXFwwJ1xuXG5cdCAgICBjYXNlICd4Jzpcblx0ICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgcmV0dXJuIGhleEVzY2FwZSgpXG5cblx0ICAgIGNhc2UgJ3UnOlxuXHQgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICByZXR1cm4gdW5pY29kZUVzY2FwZSgpXG5cblx0ICAgIGNhc2UgJ1xcbic6XG5cdCAgICBjYXNlICdcXHUyMDI4Jzpcblx0ICAgIGNhc2UgJ1xcdTIwMjknOlxuXHQgICAgICAgIHJlYWQoKTtcblx0ICAgICAgICByZXR1cm4gJydcblxuXHQgICAgY2FzZSAnXFxyJzpcblx0ICAgICAgICByZWFkKCk7XG5cdCAgICAgICAgaWYgKHBlZWsoKSA9PT0gJ1xcbicpIHtcblx0ICAgICAgICAgICAgcmVhZCgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiAnJ1xuXG5cdCAgICBjYXNlICcxJzpcblx0ICAgIGNhc2UgJzInOlxuXHQgICAgY2FzZSAnMyc6XG5cdCAgICBjYXNlICc0Jzpcblx0ICAgIGNhc2UgJzUnOlxuXHQgICAgY2FzZSAnNic6XG5cdCAgICBjYXNlICc3Jzpcblx0ICAgIGNhc2UgJzgnOlxuXHQgICAgY2FzZSAnOSc6XG5cdCAgICAgICAgdGhyb3cgaW52YWxpZENoYXIocmVhZCgpKVxuXG5cdCAgICBjYXNlIHVuZGVmaW5lZDpcblx0ICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICB9XG5cblx0ICAgIHJldHVybiByZWFkKClcblx0fVxuXG5cdGZ1bmN0aW9uIGhleEVzY2FwZSAoKSB7XG5cdCAgICB2YXIgYnVmZmVyID0gJyc7XG5cdCAgICB2YXIgYyA9IHBlZWsoKTtcblxuXHQgICAgaWYgKCF1dGlsLmlzSGV4RGlnaXQoYykpIHtcblx0ICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICB9XG5cblx0ICAgIGJ1ZmZlciArPSByZWFkKCk7XG5cblx0ICAgIGMgPSBwZWVrKCk7XG5cdCAgICBpZiAoIXV0aWwuaXNIZXhEaWdpdChjKSkge1xuXHQgICAgICAgIHRocm93IGludmFsaWRDaGFyKHJlYWQoKSlcblx0ICAgIH1cblxuXHQgICAgYnVmZmVyICs9IHJlYWQoKTtcblxuXHQgICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGJ1ZmZlciwgMTYpKVxuXHR9XG5cblx0ZnVuY3Rpb24gdW5pY29kZUVzY2FwZSAoKSB7XG5cdCAgICB2YXIgYnVmZmVyID0gJyc7XG5cdCAgICB2YXIgY291bnQgPSA0O1xuXG5cdCAgICB3aGlsZSAoY291bnQtLSA+IDApIHtcblx0ICAgICAgICB2YXIgYyA9IHBlZWsoKTtcblx0ICAgICAgICBpZiAoIXV0aWwuaXNIZXhEaWdpdChjKSkge1xuXHQgICAgICAgICAgICB0aHJvdyBpbnZhbGlkQ2hhcihyZWFkKCkpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgYnVmZmVyICs9IHJlYWQoKTtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGJ1ZmZlciwgMTYpKVxuXHR9XG5cblx0dmFyIHBhcnNlU3RhdGVzID0ge1xuXHQgICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0ICgpIHtcblx0ICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2VvZicpIHtcblx0ICAgICAgICAgICAgdGhyb3cgaW52YWxpZEVPRigpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcHVzaCgpO1xuXHQgICAgfSxcblxuXHQgICAgYmVmb3JlUHJvcGVydHlOYW1lOiBmdW5jdGlvbiBiZWZvcmVQcm9wZXJ0eU5hbWUgKCkge1xuXHQgICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuXHQgICAgICAgIGNhc2UgJ2lkZW50aWZpZXInOlxuXHQgICAgICAgIGNhc2UgJ3N0cmluZyc6XG5cdCAgICAgICAgICAgIGtleSA9IHRva2VuLnZhbHVlO1xuXHQgICAgICAgICAgICBwYXJzZVN0YXRlID0gJ2FmdGVyUHJvcGVydHlOYW1lJztcblx0ICAgICAgICAgICAgcmV0dXJuXG5cblx0ICAgICAgICBjYXNlICdwdW5jdHVhdG9yJzpcblx0ICAgICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgbGV4U3RhdGUuXG5cdCAgICAgICAgICAgIC8vIGlmICh0b2tlbi52YWx1ZSAhPT0gJ30nKSB7XG5cdCAgICAgICAgICAgIC8vICAgICB0aHJvdyBpbnZhbGlkVG9rZW4oKVxuXHQgICAgICAgICAgICAvLyB9XG5cblx0ICAgICAgICAgICAgcG9wKCk7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnZW9mJzpcblx0ICAgICAgICAgICAgdGhyb3cgaW52YWxpZEVPRigpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgbGV4U3RhdGUuXG5cdCAgICAgICAgLy8gdGhyb3cgaW52YWxpZFRva2VuKClcblx0ICAgIH0sXG5cblx0ICAgIGFmdGVyUHJvcGVydHlOYW1lOiBmdW5jdGlvbiBhZnRlclByb3BlcnR5TmFtZSAoKSB7XG5cdCAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgbGV4U3RhdGUuXG5cdCAgICAgICAgLy8gaWYgKHRva2VuLnR5cGUgIT09ICdwdW5jdHVhdG9yJyB8fCB0b2tlbi52YWx1ZSAhPT0gJzonKSB7XG5cdCAgICAgICAgLy8gICAgIHRocm93IGludmFsaWRUb2tlbigpXG5cdCAgICAgICAgLy8gfVxuXG5cdCAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdlb2YnKSB7XG5cdCAgICAgICAgICAgIHRocm93IGludmFsaWRFT0YoKVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHBhcnNlU3RhdGUgPSAnYmVmb3JlUHJvcGVydHlWYWx1ZSc7XG5cdCAgICB9LFxuXG5cdCAgICBiZWZvcmVQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbiBiZWZvcmVQcm9wZXJ0eVZhbHVlICgpIHtcblx0ICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2VvZicpIHtcblx0ICAgICAgICAgICAgdGhyb3cgaW52YWxpZEVPRigpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcHVzaCgpO1xuXHQgICAgfSxcblxuXHQgICAgYmVmb3JlQXJyYXlWYWx1ZTogZnVuY3Rpb24gYmVmb3JlQXJyYXlWYWx1ZSAoKSB7XG5cdCAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdlb2YnKSB7XG5cdCAgICAgICAgICAgIHRocm93IGludmFsaWRFT0YoKVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAncHVuY3R1YXRvcicgJiYgdG9rZW4udmFsdWUgPT09ICddJykge1xuXHQgICAgICAgICAgICBwb3AoKTtcblx0ICAgICAgICAgICAgcmV0dXJuXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgcHVzaCgpO1xuXHQgICAgfSxcblxuXHQgICAgYWZ0ZXJQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbiBhZnRlclByb3BlcnR5VmFsdWUgKCkge1xuXHQgICAgICAgIC8vIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBzaW5jZSBpdCdzIGhhbmRsZWQgYnkgdGhlIGxleFN0YXRlLlxuXHQgICAgICAgIC8vIGlmICh0b2tlbi50eXBlICE9PSAncHVuY3R1YXRvcicpIHtcblx0ICAgICAgICAvLyAgICAgdGhyb3cgaW52YWxpZFRva2VuKClcblx0ICAgICAgICAvLyB9XG5cblx0ICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gJ2VvZicpIHtcblx0ICAgICAgICAgICAgdGhyb3cgaW52YWxpZEVPRigpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgc3dpdGNoICh0b2tlbi52YWx1ZSkge1xuXHQgICAgICAgIGNhc2UgJywnOlxuXHQgICAgICAgICAgICBwYXJzZVN0YXRlID0gJ2JlZm9yZVByb3BlcnR5TmFtZSc7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnfSc6XG5cdCAgICAgICAgICAgIHBvcCgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBzaW5jZSBpdCdzIGhhbmRsZWQgYnkgdGhlIGxleFN0YXRlLlxuXHQgICAgICAgIC8vIHRocm93IGludmFsaWRUb2tlbigpXG5cdCAgICB9LFxuXG5cdCAgICBhZnRlckFycmF5VmFsdWU6IGZ1bmN0aW9uIGFmdGVyQXJyYXlWYWx1ZSAoKSB7XG5cdCAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgbGV4U3RhdGUuXG5cdCAgICAgICAgLy8gaWYgKHRva2VuLnR5cGUgIT09ICdwdW5jdHVhdG9yJykge1xuXHQgICAgICAgIC8vICAgICB0aHJvdyBpbnZhbGlkVG9rZW4oKVxuXHQgICAgICAgIC8vIH1cblxuXHQgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAnZW9mJykge1xuXHQgICAgICAgICAgICB0aHJvdyBpbnZhbGlkRU9GKClcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XG5cdCAgICAgICAgY2FzZSAnLCc6XG5cdCAgICAgICAgICAgIHBhcnNlU3RhdGUgPSAnYmVmb3JlQXJyYXlWYWx1ZSc7XG5cdCAgICAgICAgICAgIHJldHVyblxuXG5cdCAgICAgICAgY2FzZSAnXSc6XG5cdCAgICAgICAgICAgIHBvcCgpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIC8vIFRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBzaW5jZSBpdCdzIGhhbmRsZWQgYnkgdGhlIGxleFN0YXRlLlxuXHQgICAgICAgIC8vIHRocm93IGludmFsaWRUb2tlbigpXG5cdCAgICB9LFxuXG5cdCAgICBlbmQ6IGZ1bmN0aW9uIGVuZCAoKSB7XG5cdCAgICAgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIHNpbmNlIGl0J3MgaGFuZGxlZCBieSB0aGUgbGV4U3RhdGUuXG5cdCAgICAgICAgLy8gaWYgKHRva2VuLnR5cGUgIT09ICdlb2YnKSB7XG5cdCAgICAgICAgLy8gICAgIHRocm93IGludmFsaWRUb2tlbigpXG5cdCAgICAgICAgLy8gfVxuXHQgICAgfSxcblx0fTtcblxuXHRmdW5jdGlvbiBwdXNoICgpIHtcblx0ICAgIHZhciB2YWx1ZTtcblxuXHQgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG5cdCAgICBjYXNlICdwdW5jdHVhdG9yJzpcblx0ICAgICAgICBzd2l0Y2ggKHRva2VuLnZhbHVlKSB7XG5cdCAgICAgICAgY2FzZSAneyc6XG5cdCAgICAgICAgICAgIHZhbHVlID0ge307XG5cdCAgICAgICAgICAgIGJyZWFrXG5cblx0ICAgICAgICBjYXNlICdbJzpcblx0ICAgICAgICAgICAgdmFsdWUgPSBbXTtcblx0ICAgICAgICAgICAgYnJlYWtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBicmVha1xuXG5cdCAgICBjYXNlICdudWxsJzpcblx0ICAgIGNhc2UgJ2Jvb2xlYW4nOlxuXHQgICAgY2FzZSAnbnVtZXJpYyc6XG5cdCAgICBjYXNlICdzdHJpbmcnOlxuXHQgICAgICAgIHZhbHVlID0gdG9rZW4udmFsdWU7XG5cdCAgICAgICAgYnJlYWtcblxuXHQgICAgLy8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlLlxuXHQgICAgLy8gZGVmYXVsdDpcblx0ICAgIC8vICAgICB0aHJvdyBpbnZhbGlkVG9rZW4oKVxuXHQgICAgfVxuXG5cdCAgICBpZiAocm9vdCA9PT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgcm9vdCA9IHZhbHVlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgICB2YXIgcGFyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cdCAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyZW50KSkge1xuXHQgICAgICAgICAgICBwYXJlbnQucHVzaCh2YWx1ZSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwga2V5LCB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG5cdCAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcblx0ICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG5cdCAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcblx0ICAgICAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuXHQgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHQgICAgICAgICAgICBwYXJzZVN0YXRlID0gJ2JlZm9yZUFycmF5VmFsdWUnO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHBhcnNlU3RhdGUgPSAnYmVmb3JlUHJvcGVydHlOYW1lJztcblx0ICAgICAgICB9XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICAgIHZhciBjdXJyZW50ID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cdCAgICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkge1xuXHQgICAgICAgICAgICBwYXJzZVN0YXRlID0gJ2VuZCc7XG5cdCAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG5cdCAgICAgICAgICAgIHBhcnNlU3RhdGUgPSAnYWZ0ZXJBcnJheVZhbHVlJztcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBwYXJzZVN0YXRlID0gJ2FmdGVyUHJvcGVydHlWYWx1ZSc7XG5cdCAgICAgICAgfVxuXHQgICAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gcG9wICgpIHtcblx0ICAgIHN0YWNrLnBvcCgpO1xuXG5cdCAgICB2YXIgY3VycmVudCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXHQgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkge1xuXHQgICAgICAgIHBhcnNlU3RhdGUgPSAnZW5kJztcblx0ICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkge1xuXHQgICAgICAgIHBhcnNlU3RhdGUgPSAnYWZ0ZXJBcnJheVZhbHVlJztcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgICAgcGFyc2VTdGF0ZSA9ICdhZnRlclByb3BlcnR5VmFsdWUnO1xuXHQgICAgfVxuXHR9XG5cblx0Ly8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlLlxuXHQvLyBmdW5jdGlvbiBpbnZhbGlkUGFyc2VTdGF0ZSAoKSB7XG5cdC8vICAgICByZXR1cm4gbmV3IEVycm9yKGBKU09ONTogaW52YWxpZCBwYXJzZSBzdGF0ZSAnJHtwYXJzZVN0YXRlfSdgKVxuXHQvLyB9XG5cblx0Ly8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlLlxuXHQvLyBmdW5jdGlvbiBpbnZhbGlkTGV4U3RhdGUgKHN0YXRlKSB7XG5cdC8vICAgICByZXR1cm4gbmV3IEVycm9yKGBKU09ONTogaW52YWxpZCBsZXggc3RhdGUgJyR7c3RhdGV9J2ApXG5cdC8vIH1cblxuXHRmdW5jdGlvbiBpbnZhbGlkQ2hhciAoYykge1xuXHQgICAgaWYgKGMgPT09IHVuZGVmaW5lZCkge1xuXHQgICAgICAgIHJldHVybiBzeW50YXhFcnJvcigoXCJKU09ONTogaW52YWxpZCBlbmQgb2YgaW5wdXQgYXQgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW4pKVxuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gc3ludGF4RXJyb3IoKFwiSlNPTjU6IGludmFsaWQgY2hhcmFjdGVyICdcIiArIChmb3JtYXRDaGFyKGMpKSArIFwiJyBhdCBcIiArIGxpbmUgKyBcIjpcIiArIGNvbHVtbikpXG5cdH1cblxuXHRmdW5jdGlvbiBpbnZhbGlkRU9GICgpIHtcblx0ICAgIHJldHVybiBzeW50YXhFcnJvcigoXCJKU09ONTogaW52YWxpZCBlbmQgb2YgaW5wdXQgYXQgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW4pKVxuXHR9XG5cblx0Ly8gVGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlLlxuXHQvLyBmdW5jdGlvbiBpbnZhbGlkVG9rZW4gKCkge1xuXHQvLyAgICAgaWYgKHRva2VuLnR5cGUgPT09ICdlb2YnKSB7XG5cdC8vICAgICAgICAgcmV0dXJuIHN5bnRheEVycm9yKGBKU09ONTogaW52YWxpZCBlbmQgb2YgaW5wdXQgYXQgJHtsaW5lfToke2NvbHVtbn1gKVxuXHQvLyAgICAgfVxuXG5cdC8vICAgICBjb25zdCBjID0gU3RyaW5nLmZyb21Db2RlUG9pbnQodG9rZW4udmFsdWUuY29kZVBvaW50QXQoMCkpXG5cdC8vICAgICByZXR1cm4gc3ludGF4RXJyb3IoYEpTT041OiBpbnZhbGlkIGNoYXJhY3RlciAnJHtmb3JtYXRDaGFyKGMpfScgYXQgJHtsaW5lfToke2NvbHVtbn1gKVxuXHQvLyB9XG5cblx0ZnVuY3Rpb24gaW52YWxpZElkZW50aWZpZXIgKCkge1xuXHQgICAgY29sdW1uIC09IDU7XG5cdCAgICByZXR1cm4gc3ludGF4RXJyb3IoKFwiSlNPTjU6IGludmFsaWQgaWRlbnRpZmllciBjaGFyYWN0ZXIgYXQgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW4pKVxuXHR9XG5cblx0ZnVuY3Rpb24gc2VwYXJhdG9yQ2hhciAoYykge1xuXHQgICAgY29uc29sZS53YXJuKChcIkpTT041OiAnXCIgKyAoZm9ybWF0Q2hhcihjKSkgKyBcIicgaW4gc3RyaW5ncyBpcyBub3QgdmFsaWQgRUNNQVNjcmlwdDsgY29uc2lkZXIgZXNjYXBpbmdcIikpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZm9ybWF0Q2hhciAoYykge1xuXHQgICAgdmFyIHJlcGxhY2VtZW50cyA9IHtcblx0ICAgICAgICBcIidcIjogXCJcXFxcJ1wiLFxuXHQgICAgICAgICdcIic6ICdcXFxcXCInLFxuXHQgICAgICAgICdcXFxcJzogJ1xcXFxcXFxcJyxcblx0ICAgICAgICAnXFxiJzogJ1xcXFxiJyxcblx0ICAgICAgICAnXFxmJzogJ1xcXFxmJyxcblx0ICAgICAgICAnXFxuJzogJ1xcXFxuJyxcblx0ICAgICAgICAnXFxyJzogJ1xcXFxyJyxcblx0ICAgICAgICAnXFx0JzogJ1xcXFx0Jyxcblx0ICAgICAgICAnXFx2JzogJ1xcXFx2Jyxcblx0ICAgICAgICAnXFwwJzogJ1xcXFwwJyxcblx0ICAgICAgICAnXFx1MjAyOCc6ICdcXFxcdTIwMjgnLFxuXHQgICAgICAgICdcXHUyMDI5JzogJ1xcXFx1MjAyOScsXG5cdCAgICB9O1xuXG5cdCAgICBpZiAocmVwbGFjZW1lbnRzW2NdKSB7XG5cdCAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50c1tjXVxuXHQgICAgfVxuXG5cdCAgICBpZiAoYyA8ICcgJykge1xuXHQgICAgICAgIHZhciBoZXhTdHJpbmcgPSBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpO1xuXHQgICAgICAgIHJldHVybiAnXFxcXHgnICsgKCcwMCcgKyBoZXhTdHJpbmcpLnN1YnN0cmluZyhoZXhTdHJpbmcubGVuZ3RoKVxuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gY1xuXHR9XG5cblx0ZnVuY3Rpb24gc3ludGF4RXJyb3IgKG1lc3NhZ2UpIHtcblx0ICAgIHZhciBlcnIgPSBuZXcgU3ludGF4RXJyb3IobWVzc2FnZSk7XG5cdCAgICBlcnIubGluZU51bWJlciA9IGxpbmU7XG5cdCAgICBlcnIuY29sdW1uTnVtYmVyID0gY29sdW1uO1xuXHQgICAgcmV0dXJuIGVyclxuXHR9XG5cblx0dmFyIHN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeSAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkge1xuXHQgICAgdmFyIHN0YWNrID0gW107XG5cdCAgICB2YXIgaW5kZW50ID0gJyc7XG5cdCAgICB2YXIgcHJvcGVydHlMaXN0O1xuXHQgICAgdmFyIHJlcGxhY2VyRnVuYztcblx0ICAgIHZhciBnYXAgPSAnJztcblx0ICAgIHZhciBxdW90ZTtcblxuXHQgICAgaWYgKFxuXHQgICAgICAgIHJlcGxhY2VyICE9IG51bGwgJiZcblx0ICAgICAgICB0eXBlb2YgcmVwbGFjZXIgPT09ICdvYmplY3QnICYmXG5cdCAgICAgICAgIUFycmF5LmlzQXJyYXkocmVwbGFjZXIpXG5cdCAgICApIHtcblx0ICAgICAgICBzcGFjZSA9IHJlcGxhY2VyLnNwYWNlO1xuXHQgICAgICAgIHF1b3RlID0gcmVwbGFjZXIucXVvdGU7XG5cdCAgICAgICAgcmVwbGFjZXIgPSByZXBsYWNlci5yZXBsYWNlcjtcblx0ICAgIH1cblxuXHQgICAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHJlcGxhY2VyRnVuYyA9IHJlcGxhY2VyO1xuXHQgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcGxhY2VyKSkge1xuXHQgICAgICAgIHByb3BlcnR5TGlzdCA9IFtdO1xuXHQgICAgICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gcmVwbGFjZXI7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG5cdCAgICAgICAgICAgIHZhciB2ID0gbGlzdFtpXTtcblxuXHQgICAgICAgICAgICB2YXIgaXRlbSA9ICh2b2lkIDApO1xuXG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICAgIGl0ZW0gPSB2O1xuXHQgICAgICAgICAgICB9IGVsc2UgaWYgKFxuXHQgICAgICAgICAgICAgICAgdHlwZW9mIHYgPT09ICdudW1iZXInIHx8XG5cdCAgICAgICAgICAgICAgICB2IGluc3RhbmNlb2YgU3RyaW5nIHx8XG5cdCAgICAgICAgICAgICAgICB2IGluc3RhbmNlb2YgTnVtYmVyXG5cdCAgICAgICAgICAgICkge1xuXHQgICAgICAgICAgICAgICAgaXRlbSA9IFN0cmluZyh2KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIGlmIChpdGVtICE9PSB1bmRlZmluZWQgJiYgcHJvcGVydHlMaXN0LmluZGV4T2YoaXRlbSkgPCAwKSB7XG5cdCAgICAgICAgICAgICAgICBwcm9wZXJ0eUxpc3QucHVzaChpdGVtKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgaWYgKHNwYWNlIGluc3RhbmNlb2YgTnVtYmVyKSB7XG5cdCAgICAgICAgc3BhY2UgPSBOdW1iZXIoc3BhY2UpO1xuXHQgICAgfSBlbHNlIGlmIChzcGFjZSBpbnN0YW5jZW9mIFN0cmluZykge1xuXHQgICAgICAgIHNwYWNlID0gU3RyaW5nKHNwYWNlKTtcblx0ICAgIH1cblxuXHQgICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcblx0ICAgICAgICBpZiAoc3BhY2UgPiAwKSB7XG5cdCAgICAgICAgICAgIHNwYWNlID0gTWF0aC5taW4oMTAsIE1hdGguZmxvb3Ioc3BhY2UpKTtcblx0ICAgICAgICAgICAgZ2FwID0gJyAgICAgICAgICAnLnN1YnN0cigwLCBzcGFjZSk7XG5cdCAgICAgICAgfVxuXHQgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgZ2FwID0gc3BhY2Uuc3Vic3RyKDAsIDEwKTtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIHNlcmlhbGl6ZVByb3BlcnR5KCcnLCB7Jyc6IHZhbHVlfSlcblxuXHQgICAgZnVuY3Rpb24gc2VyaWFsaXplUHJvcGVydHkgKGtleSwgaG9sZGVyKSB7XG5cdCAgICAgICAgdmFyIHZhbHVlID0gaG9sZGVyW2tleV07XG5cdCAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS50b0pTT041ID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTjUoa2V5KTtcblx0ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKHJlcGxhY2VyRnVuYykge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHJlcGxhY2VyRnVuYy5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKSB7XG5cdCAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0ICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQm9vbGVhbikge1xuXHQgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnZhbHVlT2YoKTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBzd2l0Y2ggKHZhbHVlKSB7XG5cdCAgICAgICAgY2FzZSBudWxsOiByZXR1cm4gJ251bGwnXG5cdCAgICAgICAgY2FzZSB0cnVlOiByZXR1cm4gJ3RydWUnXG5cdCAgICAgICAgY2FzZSBmYWxzZTogcmV0dXJuICdmYWxzZSdcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICByZXR1cm4gcXVvdGVTdHJpbmcodmFsdWUsIGZhbHNlKVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gc2VyaWFsaXplQXJyYXkodmFsdWUpIDogc2VyaWFsaXplT2JqZWN0KHZhbHVlKVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiB1bmRlZmluZWRcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gcXVvdGVTdHJpbmcgKHZhbHVlKSB7XG5cdCAgICAgICAgdmFyIHF1b3RlcyA9IHtcblx0ICAgICAgICAgICAgXCInXCI6IDAuMSxcblx0ICAgICAgICAgICAgJ1wiJzogMC4yLFxuXHQgICAgICAgIH07XG5cblx0ICAgICAgICB2YXIgcmVwbGFjZW1lbnRzID0ge1xuXHQgICAgICAgICAgICBcIidcIjogXCJcXFxcJ1wiLFxuXHQgICAgICAgICAgICAnXCInOiAnXFxcXFwiJyxcblx0ICAgICAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnLFxuXHQgICAgICAgICAgICAnXFxiJzogJ1xcXFxiJyxcblx0ICAgICAgICAgICAgJ1xcZic6ICdcXFxcZicsXG5cdCAgICAgICAgICAgICdcXG4nOiAnXFxcXG4nLFxuXHQgICAgICAgICAgICAnXFxyJzogJ1xcXFxyJyxcblx0ICAgICAgICAgICAgJ1xcdCc6ICdcXFxcdCcsXG5cdCAgICAgICAgICAgICdcXHYnOiAnXFxcXHYnLFxuXHQgICAgICAgICAgICAnXFwwJzogJ1xcXFwwJyxcblx0ICAgICAgICAgICAgJ1xcdTIwMjgnOiAnXFxcXHUyMDI4Jyxcblx0ICAgICAgICAgICAgJ1xcdTIwMjknOiAnXFxcXHUyMDI5Jyxcblx0ICAgICAgICB9O1xuXG5cdCAgICAgICAgdmFyIHByb2R1Y3QgPSAnJztcblxuXHQgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgdmFyIGMgPSB2YWx1ZVtpXTtcblx0ICAgICAgICAgICAgc3dpdGNoIChjKSB7XG5cdCAgICAgICAgICAgIGNhc2UgXCInXCI6XG5cdCAgICAgICAgICAgIGNhc2UgJ1wiJzpcblx0ICAgICAgICAgICAgICAgIHF1b3Rlc1tjXSsrO1xuXHQgICAgICAgICAgICAgICAgcHJvZHVjdCArPSBjO1xuXHQgICAgICAgICAgICAgICAgY29udGludWVcblxuXHQgICAgICAgICAgICBjYXNlICdcXDAnOlxuXHQgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNEaWdpdCh2YWx1ZVtpICsgMV0pKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCArPSAnXFxcXHgwMCc7XG5cdCAgICAgICAgICAgICAgICAgICAgY29udGludWVcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudHNbY10pIHtcblx0ICAgICAgICAgICAgICAgIHByb2R1Y3QgKz0gcmVwbGFjZW1lbnRzW2NdO1xuXHQgICAgICAgICAgICAgICAgY29udGludWVcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIGlmIChjIDwgJyAnKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgaGV4U3RyaW5nID0gYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcblx0ICAgICAgICAgICAgICAgIHByb2R1Y3QgKz0gJ1xcXFx4JyArICgnMDAnICsgaGV4U3RyaW5nKS5zdWJzdHJpbmcoaGV4U3RyaW5nLmxlbmd0aCk7XG5cdCAgICAgICAgICAgICAgICBjb250aW51ZVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcHJvZHVjdCArPSBjO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBxdW90ZUNoYXIgPSBxdW90ZSB8fCBPYmplY3Qua2V5cyhxdW90ZXMpLnJlZHVjZShmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gKHF1b3Rlc1thXSA8IHF1b3Rlc1tiXSkgPyBhIDogYjsgfSk7XG5cblx0ICAgICAgICBwcm9kdWN0ID0gcHJvZHVjdC5yZXBsYWNlKG5ldyBSZWdFeHAocXVvdGVDaGFyLCAnZycpLCByZXBsYWNlbWVudHNbcXVvdGVDaGFyXSk7XG5cblx0ICAgICAgICByZXR1cm4gcXVvdGVDaGFyICsgcHJvZHVjdCArIHF1b3RlQ2hhclxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBzZXJpYWxpemVPYmplY3QgKHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpID49IDApIHtcblx0ICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09ONScpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cblx0ICAgICAgICB2YXIgc3RlcGJhY2sgPSBpbmRlbnQ7XG5cdCAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgZ2FwO1xuXG5cdCAgICAgICAgdmFyIGtleXMgPSBwcm9wZXJ0eUxpc3QgfHwgT2JqZWN0LmtleXModmFsdWUpO1xuXHQgICAgICAgIHZhciBwYXJ0aWFsID0gW107XG5cdCAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBrZXlzOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuXHQgICAgICAgICAgICB2YXIga2V5ID0gbGlzdFtpXTtcblxuXHQgICAgICAgICAgICB2YXIgcHJvcGVydHlTdHJpbmcgPSBzZXJpYWxpemVQcm9wZXJ0eShrZXksIHZhbHVlKTtcblx0ICAgICAgICAgICAgaWYgKHByb3BlcnR5U3RyaW5nICE9PSB1bmRlZmluZWQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBtZW1iZXIgPSBzZXJpYWxpemVLZXkoa2V5KSArICc6Jztcblx0ICAgICAgICAgICAgICAgIGlmIChnYXAgIT09ICcnKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbWVtYmVyICs9ICcgJztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIG1lbWJlciArPSBwcm9wZXJ0eVN0cmluZztcblx0ICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChtZW1iZXIpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdmFyIGZpbmFsO1xuXHQgICAgICAgIGlmIChwYXJ0aWFsLmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICBmaW5hbCA9ICd7fSc7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgdmFyIHByb3BlcnRpZXM7XG5cdCAgICAgICAgICAgIGlmIChnYXAgPT09ICcnKSB7XG5cdCAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0gcGFydGlhbC5qb2luKCcsJyk7XG5cdCAgICAgICAgICAgICAgICBmaW5hbCA9ICd7JyArIHByb3BlcnRpZXMgKyAnfSc7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2VwYXJhdG9yID0gJyxcXG4nICsgaW5kZW50O1xuXHQgICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHBhcnRpYWwuam9pbihzZXBhcmF0b3IpO1xuXHQgICAgICAgICAgICAgICAgZmluYWwgPSAne1xcbicgKyBpbmRlbnQgKyBwcm9wZXJ0aWVzICsgJyxcXG4nICsgc3RlcGJhY2sgKyAnfSc7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICBzdGFjay5wb3AoKTtcblx0ICAgICAgICBpbmRlbnQgPSBzdGVwYmFjaztcblx0ICAgICAgICByZXR1cm4gZmluYWxcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gc2VyaWFsaXplS2V5IChrZXkpIHtcblx0ICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMCkge1xuXHQgICAgICAgICAgICByZXR1cm4gcXVvdGVTdHJpbmcoa2V5LCB0cnVlKVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBmaXJzdENoYXIgPSBTdHJpbmcuZnJvbUNvZGVQb2ludChrZXkuY29kZVBvaW50QXQoMCkpO1xuXHQgICAgICAgIGlmICghdXRpbC5pc0lkU3RhcnRDaGFyKGZpcnN0Q2hhcikpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIHF1b3RlU3RyaW5nKGtleSwgdHJ1ZSlcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBmb3IgKHZhciBpID0gZmlyc3RDaGFyLmxlbmd0aDsgaSA8IGtleS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICBpZiAoIXV0aWwuaXNJZENvbnRpbnVlQ2hhcihTdHJpbmcuZnJvbUNvZGVQb2ludChrZXkuY29kZVBvaW50QXQoaSkpKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHF1b3RlU3RyaW5nKGtleSwgdHJ1ZSlcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBrZXlcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gc2VyaWFsaXplQXJyYXkgKHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpID49IDApIHtcblx0ICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09ONScpXG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cblx0ICAgICAgICB2YXIgc3RlcGJhY2sgPSBpbmRlbnQ7XG5cdCAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgZ2FwO1xuXG5cdCAgICAgICAgdmFyIHBhcnRpYWwgPSBbXTtcblx0ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICAgIHZhciBwcm9wZXJ0eVN0cmluZyA9IHNlcmlhbGl6ZVByb3BlcnR5KFN0cmluZyhpKSwgdmFsdWUpO1xuXHQgICAgICAgICAgICBwYXJ0aWFsLnB1c2goKHByb3BlcnR5U3RyaW5nICE9PSB1bmRlZmluZWQpID8gcHJvcGVydHlTdHJpbmcgOiAnbnVsbCcpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBmaW5hbDtcblx0ICAgICAgICBpZiAocGFydGlhbC5sZW5ndGggPT09IDApIHtcblx0ICAgICAgICAgICAgZmluYWwgPSAnW10nO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIGlmIChnYXAgPT09ICcnKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHBhcnRpYWwuam9pbignLCcpO1xuXHQgICAgICAgICAgICAgICAgZmluYWwgPSAnWycgKyBwcm9wZXJ0aWVzICsgJ10nO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdmFyIHNlcGFyYXRvciA9ICcsXFxuJyArIGluZGVudDtcblx0ICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0aWVzJDEgPSBwYXJ0aWFsLmpvaW4oc2VwYXJhdG9yKTtcblx0ICAgICAgICAgICAgICAgIGZpbmFsID0gJ1tcXG4nICsgaW5kZW50ICsgcHJvcGVydGllcyQxICsgJyxcXG4nICsgc3RlcGJhY2sgKyAnXSc7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cblx0ICAgICAgICBzdGFjay5wb3AoKTtcblx0ICAgICAgICBpbmRlbnQgPSBzdGVwYmFjaztcblx0ICAgICAgICByZXR1cm4gZmluYWxcblx0ICAgIH1cblx0fTtcblxuXHR2YXIgSlNPTjUgPSB7XG5cdCAgICBwYXJzZTogcGFyc2UsXG5cdCAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeSxcblx0fTtcblxuXHR2YXIgbGliID0gSlNPTjU7XG5cblx0dmFyIGVzNSA9IGxpYjtcblxuXHRyZXR1cm4gZXM1O1xuXG59KSkpO1xuIiwgImltcG9ydCB7IFBsdWdpbiwgTWFya2Rvd25WaWV3LCBXb3Jrc3BhY2VMZWFmIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbmltcG9ydCB7IGNvbnZlcnRTZXR0aW5ncywgREVGQVVMVF9TRVRUSU5HUywgTEFOR1VBR0VTLCBDb2RlU3R5bGVyU2V0dGluZ3MgfSBmcm9tIFwiLi9TZXR0aW5nc1wiO1xuaW1wb3J0IHsgU2V0dGluZ3NUYWIgfSBmcm9tIFwiLi9TZXR0aW5nc1RhYlwiO1xuaW1wb3J0IHsgcmVtb3ZlU3R5bGVzQW5kQ2xhc3NlcywgdXBkYXRlU3R5bGluZyB9IGZyb20gXCIuL0FwcGx5U3R5bGluZ1wiO1xuaW1wb3J0IHsgY3JlYXRlQ29kZWJsb2NrQ29kZU1pcnJvckV4dGVuc2lvbnMsIGVkaXRpbmdEb2N1bWVudEZvbGQgfSBmcm9tIFwiLi9FZGl0aW5nVmlld1wiO1xuaW1wb3J0IHsgZGVzdHJveVJlYWRpbmdNb2RlRWxlbWVudHMsIHJlYWRpbmdEb2N1bWVudEZvbGQsIGV4ZWN1dGVDb2RlTXV0YXRpb25PYnNlcnZlciwgcmVhZGluZ1ZpZXdDb2RlYmxvY2tEZWNvcmF0aW5nUG9zdFByb2Nlc3NvciwgcmVhZGluZ1ZpZXdJbmxpbmVEZWNvcmF0aW5nUG9zdFByb2Nlc3NvciB9IGZyb20gXCIuL1JlYWRpbmdWaWV3XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvZGVTdHlsZXJQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuXHRzZXR0aW5nczogQ29kZVN0eWxlclNldHRpbmdzO1xuXHRleGVjdXRlQ29kZU11dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cdGxhbmd1YWdlSWNvbnM6IFJlY29yZDxzdHJpbmcsc3RyaW5nPjtcblx0c2l6ZXM6IHtcblx0XHRmb250OiBzdHJpbmc7XG5cdFx0em9vbTogc3RyaW5nO1xuXHR9O1xuXHRcblx0YXN5bmMgb25sb2FkKCkge1xuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7IC8vIExvYWQgU2V0dGluZ3Ncblx0XHRjb25zdCBzZXR0aW5nc1RhYiA9IG5ldyBTZXR0aW5nc1RhYih0aGlzLmFwcCx0aGlzKTtcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIoc2V0dGluZ3NUYWIpO1xuXG5cdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXJcIik7IC8vIExvYWQgU3R5bGVzXG5cdFx0dXBkYXRlU3R5bGluZyh0aGlzLnNldHRpbmdzLHRoaXMuYXBwKTtcblxuXHRcdHRoaXMubGFuZ3VhZ2VJY29ucyA9IE9iamVjdC5rZXlzKExBTkdVQUdFUykucmVkdWNlKChyZXN1bHQ6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LCBrZXk6IHN0cmluZykgPT4geyAvLyBMb2FkIEljb25zXG5cdFx0XHRpZiAoTEFOR1VBR0VTW2tleV0/Lmljb24pXG5cdFx0XHRcdHJlc3VsdFtrZXldID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIj4ke0xBTkdVQUdFU1trZXldLmljb259PC9zdmc+YF0sIHsgdHlwZTogXCJpbWFnZS9zdmcreG1sXCIgfSkpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LHt9KTtcblx0XHR0aGlzLnNpemVzID0ge1xuXHRcdFx0Zm9udDogZG9jdW1lbnQuYm9keS5nZXRDc3NQcm9wZXJ0eVZhbHVlKFwiLS1mb250LXRleHQtc2l6ZVwiKSxcblx0XHRcdHpvb206IGRvY3VtZW50LmJvZHkuZ2V0Q3NzUHJvcGVydHlWYWx1ZShcIi0tem9vbS1mYWN0b3JcIiksXG5cdFx0fTtcblxuXHRcdHRoaXMuZXhlY3V0ZUNvZGVNdXRhdGlvbk9ic2VydmVyID0gZXhlY3V0ZUNvZGVNdXRhdGlvbk9ic2VydmVyOyAvLyBBZGQgZXhlY3V0ZSBjb2RlIG11dGF0aW9uIG9ic2VydmVyXG5cdFx0XG5cdFx0dGhpcy5yZWdpc3Rlck1hcmtkb3duUG9zdFByb2Nlc3Nvcihhc3luYyAoZWwsY3R4KSA9PiB7YXdhaXQgcmVhZGluZ1ZpZXdDb2RlYmxvY2tEZWNvcmF0aW5nUG9zdFByb2Nlc3NvcihlbCxjdHgsdGhpcyk7fSk7IC8vIEFkZCBjb2RlYmxvY2sgZGVjb3JhdGluZyBtYXJrZG93blBvc3RQcm9jZXNzb3Jcblx0XHR0aGlzLnJlZ2lzdGVyTWFya2Rvd25Qb3N0UHJvY2Vzc29yKGFzeW5jIChlbCxjdHgpID0+IHthd2FpdCByZWFkaW5nVmlld0lubGluZURlY29yYXRpbmdQb3N0UHJvY2Vzc29yKGVsLGN0eCx0aGlzKTt9KTsgLy8gQWRkIGlubGluZSBjb2RlIGRlY29yYXRpbmcgbWFya2Rvd25Qb3N0UHJvY2Vzc29yXG5cblx0XHR0aGlzLnJlZ2lzdGVyRWRpdG9yRXh0ZW5zaW9uKGNyZWF0ZUNvZGVibG9ja0NvZGVNaXJyb3JFeHRlbnNpb25zKHRoaXMuc2V0dGluZ3MsdGhpcykpOyAvLyBBZGQgY29kZW1pcnJvciBleHRlbnNpb25zXG5cblx0XHRsZXQgem9vbVRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0ID0gc2V0VGltZW91dCgoKT0+e30pO1xuXHRcdHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC53b3Jrc3BhY2Uub24oXCJjc3MtY2hhbmdlXCIsKCk9Pntcblx0XHRcdHVwZGF0ZVN0eWxpbmcodGhpcy5zZXR0aW5ncyx0aGlzLmFwcCk7IC8vIFVwZGF0ZSBzdHlsaW5nIG9uIGNzcyBjaGFuZ2VzXG5cdFx0XHRjb25zdCBjdXJyZW50Rm9udFNpemUgPSBkb2N1bWVudC5ib2R5LmdldENzc1Byb3BlcnR5VmFsdWUoXCItLWZvbnQtdGV4dC1zaXplXCIpO1xuXHRcdFx0aWYgKHRoaXMuc2l6ZXMuZm9udCAhPT0gY3VycmVudEZvbnRTaXplKSB7XG5cdFx0XHRcdHRoaXMuc2l6ZXMuZm9udCA9IGN1cnJlbnRGb250U2l6ZTtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHpvb21UaW1lb3V0KTtcblx0XHRcdFx0em9vbVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpPT57XG5cdFx0XHRcdFx0dGhpcy5yZW5kZXJSZWFkaW5nVmlldygpOyAvLyBSZS1yZW5kZXIgb24gZm9udCBzaXplIGNoYW5nZXNcblx0XHRcdFx0fSwxMDAwKTtcblx0XHRcdH1cblx0XHR9LHRoaXMpKTtcblx0XHR0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKFwicmVzaXplXCIsKCk9Pntcblx0XHRcdGNvbnN0IGN1cnJlbnRab29tU2l6ZSA9IGRvY3VtZW50LmJvZHkuZ2V0Q3NzUHJvcGVydHlWYWx1ZShcIi0tem9vbS1mYWN0b3JcIik7XG5cdFx0XHRpZiAodGhpcy5zaXplcy56b29tICE9PSBjdXJyZW50Wm9vbVNpemUpIHtcblx0XHRcdFx0dGhpcy5zaXplcy56b29tID0gY3VycmVudFpvb21TaXplO1xuXHRcdFx0XHRjbGVhclRpbWVvdXQoem9vbVRpbWVvdXQpO1xuXHRcdFx0XHR6b29tVGltZW91dCA9IHNldFRpbWVvdXQoKCk9Pntcblx0XHRcdFx0XHR0aGlzLnJlbmRlclJlYWRpbmdWaWV3KCk7IC8vIFJlLXJlbmRlciBvbiB6b29tIGNoYW5nZXNcblx0XHRcdFx0fSwxMDAwKTtcblx0XHRcdH1cblx0XHR9LHRoaXMpKTtcblxuXHRcdHRoaXMuYWRkQ29tbWFuZCh7aWQ6IFwiZm9sZC1hbGxcIiwgbmFtZTogXCJGb2xkIGFsbCBjb2RlYmxvY2tzXCIsIGNhbGxiYWNrOiAoKT0+e1xuXHRcdFx0Y29uc3QgYWN0aXZlVmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG5cdFx0XHRpZiAoYWN0aXZlVmlldykge1xuXHRcdFx0XHRpZiAoYWN0aXZlVmlldy5nZXRNb2RlKCkgPT09IFwicHJldmlld1wiKVxuXHRcdFx0XHRcdHJlYWRpbmdEb2N1bWVudEZvbGQoYWN0aXZlVmlldy5jb250ZW50RWwsdHJ1ZSk7XG5cdFx0XHRcdGVsc2UgaWYgKGFjdGl2ZVZpZXcuZ2V0TW9kZSgpID09PSBcInNvdXJjZVwiKVxuXHRcdFx0XHRcdC8vQHRzLWV4cGVjdC1lcnJvciBVbmRvY3VtZW50ZWQgT2JzaWRpYW4gQVBJXG5cdFx0XHRcdFx0ZWRpdGluZ0RvY3VtZW50Rm9sZChhY3RpdmVWaWV3LmVkaXRvci5jbS5kb2NWaWV3LnZpZXcsdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fX0pO1xuXHRcdHRoaXMuYWRkQ29tbWFuZCh7aWQ6IFwidW5mb2xkLWFsbFwiLCBuYW1lOiBcIlVuZm9sZCBhbGwgY29kZWJsb2Nrc1wiLCBjYWxsYmFjazogKCk9Pntcblx0XHRcdGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuXHRcdFx0aWYgKGFjdGl2ZVZpZXcpIHtcblx0XHRcdFx0aWYgKGFjdGl2ZVZpZXcuZ2V0TW9kZSgpID09PSBcInByZXZpZXdcIilcblx0XHRcdFx0XHRyZWFkaW5nRG9jdW1lbnRGb2xkKGFjdGl2ZVZpZXcuY29udGVudEVsLGZhbHNlKTtcblx0XHRcdFx0ZWxzZSBpZiAoYWN0aXZlVmlldy5nZXRNb2RlKCkgPT09IFwic291cmNlXCIpXG5cdFx0XHRcdFx0Ly9AdHMtZXhwZWN0LWVycm9yIFVuZG9jdW1lbnRlZCBPYnNpZGlhbiBBUElcblx0XHRcdFx0XHRlZGl0aW5nRG9jdW1lbnRGb2xkKGFjdGl2ZVZpZXcuZWRpdG9yLmNtLmRvY1ZpZXcudmlldyxmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fX0pO1xuXHRcdHRoaXMuYWRkQ29tbWFuZCh7aWQ6IFwicmVzZXQtYWxsXCIsIG5hbWU6IFwiUmVzZXQgZm9sZCBzdGF0ZSBmb3IgYWxsIGNvZGVibG9ja3NcIiwgY2FsbGJhY2s6ICgpPT57XG5cdFx0XHRjb25zdCBhY3RpdmVWaWV3ID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcblx0XHRcdGlmIChhY3RpdmVWaWV3KSB7XG5cdFx0XHRcdGlmIChhY3RpdmVWaWV3LmdldE1vZGUoKSA9PT0gXCJwcmV2aWV3XCIpXG5cdFx0XHRcdFx0cmVhZGluZ0RvY3VtZW50Rm9sZChhY3RpdmVWaWV3LmNvbnRlbnRFbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGFjdGl2ZVZpZXcuZ2V0TW9kZSgpID09PSBcInNvdXJjZVwiKVxuXHRcdFx0XHRcdC8vQHRzLWV4cGVjdC1lcnJvciBVbmRvY3VtZW50ZWQgT2JzaWRpYW4gQVBJXG5cdFx0XHRcdFx0ZWRpdGluZ0RvY3VtZW50Rm9sZChhY3RpdmVWaWV3LmVkaXRvci5jbS5kb2NWaWV3LnZpZXcpO1xuXHRcdFx0fVxuXHRcdH19KTtcblxuXHRcdHRoaXMuYXBwLndvcmtzcGFjZS5vbkxheW91dFJlYWR5KCgpPT57dGhpcy5yZW5kZXJSZWFkaW5nVmlldygpO30pOyAvLyBBZGQgZGVjb3JhdGlvbiBvbiBlbmFibGluZyBvZiBwbHVnaW5cblxuXHRcdGNvbnNvbGUubG9nKFwiTG9hZGVkIHBsdWdpbjogQ29kZSBTdHlsZXJcIik7XG5cdH1cblx0XG5cdG9udW5sb2FkKCkge1xuXHRcdHRoaXMuZXhlY3V0ZUNvZGVNdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblx0XHRyZW1vdmVTdHlsZXNBbmRDbGFzc2VzKCk7XG5cdFx0ZGVzdHJveVJlYWRpbmdNb2RlRWxlbWVudHMoKTtcblx0XHRmb3IgKGNvbnN0IHVybCBvZiBPYmplY3QudmFsdWVzKHRoaXMubGFuZ3VhZ2VJY29ucykpIC8vIFVubG9hZCBpY29uc1xuXHRcdFx0VVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuXHRcdGNvbnNvbGUubG9nKFwiVW5sb2FkZWQgcGx1Z2luOiBDb2RlIFN0eWxlclwiKTtcblx0fVxuXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcblx0XHR0aGlzLnNldHRpbmdzID0gey4uLnN0cnVjdHVyZWRDbG9uZShERUZBVUxUX1NFVFRJTkdTKSwgLi4uY29udmVydFNldHRpbmdzKGF3YWl0IHRoaXMubG9hZERhdGEoKSl9O1xuXHR9XG5cblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xuXHRcdGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XG5cdFx0dGhpcy5hcHAud29ya3NwYWNlLnVwZGF0ZU9wdGlvbnMoKTtcblx0XHR1cGRhdGVTdHlsaW5nKHRoaXMuc2V0dGluZ3MsdGhpcy5hcHApO1xuXHR9XG5cblx0cmVuZGVyUmVhZGluZ1ZpZXcoKSB7XG5cdFx0dGhpcy5hcHAud29ya3NwYWNlLml0ZXJhdGVSb290TGVhdmVzKChsZWFmOiBXb3Jrc3BhY2VMZWFmKSA9PiB7XG5cdFx0XHRpZiAobGVhZi52aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIGxlYWYudmlldy5nZXRNb2RlKCkgPT09IFwicHJldmlld1wiKVxuXHRcdFx0XHRsZWFmLnZpZXcucHJldmlld01vZGUucmVyZW5kZXIodHJ1ZSk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvLyBUeXBpbmdcbmV4cG9ydCB0eXBlIEhFWCA9IGAjJHtzdHJpbmd9YDtcbmV4cG9ydCB0eXBlIENTUyA9IGAtLSR7c3RyaW5nfWA7XG5leHBvcnQgdHlwZSBDb2xvdXIgPSBIRVggfCBDU1M7XG5leHBvcnQgdHlwZSBQZXJjZW50YWdlID0gYCR7bnVtYmVyfSVgO1xuZXhwb3J0IHR5cGUgRGlzcGxheSA9IFwibm9uZVwiIHwgXCJpZl9oZWFkZXJfc2hvd25cIiB8IFwiYWx3YXlzXCI7XG5cbi8vIEludGVyZmFjZSBDcmVhdGlvblxuZXhwb3J0IGludGVyZmFjZSBDb2RlU3R5bGVyVGhlbWVNb2RlQ29sb3VycyB7XG5cdGNvZGVibG9jazoge1xuXHRcdGJhY2tncm91bmRDb2xvdXI6IENvbG91cjtcblx0XHR0ZXh0Q29sb3VyOiBDb2xvdXI7XG5cdH0sXG5cdGd1dHRlcjoge1xuXHRcdGJhY2tncm91bmRDb2xvdXI6IENvbG91cjtcblx0XHR0ZXh0Q29sb3VyOiBDb2xvdXI7XG5cdFx0YWN0aXZlVGV4dENvbG91cjogQ29sb3VyO1xuXHR9LFxuXHRoZWFkZXI6IHtcblx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBDb2xvdXI7XG5cdFx0dGl0bGU6IHtcblx0XHRcdHRleHRDb2xvdXI6IENvbG91cjtcblx0XHR9LFxuXHRcdGxhbmd1YWdlVGFnOiB7XG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBDb2xvdXI7XG5cdFx0XHR0ZXh0Q29sb3VyOiBDb2xvdXI7XG5cdFx0fSxcblx0XHRsaW5lQ29sb3VyOiBDb2xvdXI7XG5cdH0sXG5cdGhpZ2hsaWdodHM6IHtcblx0XHRhY3RpdmVDb2RlYmxvY2tMaW5lQ29sb3VyOiBDb2xvdXI7XG5cdFx0YWN0aXZlRWRpdG9yTGluZUNvbG91cjogQ29sb3VyO1xuXHRcdGRlZmF1bHRDb2xvdXI6IENvbG91cjtcblx0XHRhbHRlcm5hdGl2ZUhpZ2hsaWdodHM6IFJlY29yZDxzdHJpbmcsQ29sb3VyPjtcblx0fSxcblx0aW5saW5lOiB7XG5cdFx0YmFja2dyb3VuZENvbG91cjogQ29sb3VyO1xuXHRcdHRleHRDb2xvdXI6IENvbG91cjtcblx0XHRhY3RpdmVUZXh0Q29sb3VyOiBDb2xvdXI7XG5cdFx0dGl0bGVUZXh0Q29sb3VyOiBDb2xvdXJcblx0fVxuXHRhZHZhbmNlZDoge1xuXHRcdGJ1dHRvbkNvbG91cjogQ29sb3VyO1xuXHRcdGJ1dHRvbkFjdGl2ZUNvbG91cjogQ29sb3VyO1xuXHR9XG59XG5leHBvcnQgaW50ZXJmYWNlIENvZGVTdHlsZXJUaGVtZVNldHRpbmdzIHtcblx0Y29kZWJsb2NrOiB7XG5cdFx0bGluZU51bWJlcnM6IGJvb2xlYW47XG5cdFx0dW53cmFwTGluZXM6IGJvb2xlYW47XG5cdFx0d3JhcExpbmVzQWN0aXZlOiBib29sZWFuO1xuXHRcdGN1cnZhdHVyZTogbnVtYmVyO1xuXHR9LFxuXHRndXR0ZXI6IHtcblx0XHRoaWdobGlnaHQ6IGJvb2xlYW47XG5cdFx0YWN0aXZlTGluZTogYm9vbGVhbjtcblx0fSxcblx0aGVhZGVyOiB7XG5cdFx0dGl0bGU6IHtcblx0XHRcdHRleHRGb250OiBzdHJpbmc7XG5cdFx0XHR0ZXh0Qm9sZDogYm9vbGVhbjtcblx0XHRcdHRleHRJdGFsaWM6IGJvb2xlYW47XG5cdFx0fSxcblx0XHRsYW5ndWFnZVRhZzoge1xuXHRcdFx0ZGlzcGxheTogRGlzcGxheTtcblx0XHRcdHRleHRGb250OiBzdHJpbmc7XG5cdFx0XHR0ZXh0Qm9sZDogYm9vbGVhbjtcblx0XHRcdHRleHRJdGFsaWM6IGJvb2xlYW47XG5cdFx0fSxcblx0XHRsYW5ndWFnZUljb246IHtcblx0XHRcdGRpc3BsYXk6IERpc3BsYXk7XG5cdFx0XHRkaXNwbGF5Q29sb3VyOiBib29sZWFuO1xuXHRcdH0sXG5cdFx0Zm9udFNpemU6IG51bWJlcjtcblx0XHRmb2xkUGxhY2Vob2xkZXI6IHN0cmluZztcblx0fSxcblx0aGlnaGxpZ2h0czoge1xuXHRcdGFjdGl2ZUNvZGVibG9ja0xpbmU6IGJvb2xlYW47XG5cdFx0YWN0aXZlRWRpdG9yTGluZTogYm9vbGVhbjtcblx0fSxcblx0aW5saW5lOiB7XG5cdFx0c3ludGF4SGlnaGxpZ2h0OiBib29sZWFuO1xuXHRcdHN0eWxlOiBib29sZWFuO1xuXHRcdGZvbnRXZWlnaHQ6IG51bWJlcjtcblx0XHRjdXJ2YXR1cmU6IG51bWJlcjtcblx0XHRwYWRkaW5nVmVydGljYWw6IG51bWJlcjtcblx0XHRwYWRkaW5nSG9yaXpvbnRhbDogbnVtYmVyO1xuXHRcdG1hcmdpbkhvcml6b250YWw6IG51bWJlcjtcblx0XHR0aXRsZUZvbnRXZWlnaHQ6IG51bWJlcjtcblx0fSxcblx0YWR2YW5jZWQ6IHtcblx0XHRncmFkaWVudEhpZ2hsaWdodHM6IGJvb2xlYW47XG5cdFx0Z3JhZGllbnRIaWdobGlnaHRzQ29sb3VyU3RvcDogUGVyY2VudGFnZTtcblx0XHRsYW5ndWFnZUJvcmRlckNvbG91cjogYm9vbGVhbjtcblx0XHRsYW5ndWFnZUJvcmRlcldpZHRoOiBudW1iZXI7XG5cdFx0aWNvblNpemU6IG51bWJlcjtcblx0fTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZVN0eWxlclRoZW1lQ29sb3VycyB7XG5cdGxpZ2h0OiBDb2RlU3R5bGVyVGhlbWVNb2RlQ29sb3Vycztcblx0ZGFyazogQ29kZVN0eWxlclRoZW1lTW9kZUNvbG91cnM7XG59XG5leHBvcnQgaW50ZXJmYWNlIENvZGVTdHlsZXJUaGVtZSB7XG5cdHNldHRpbmdzOiBDb2RlU3R5bGVyVGhlbWVTZXR0aW5ncztcblx0Y29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZVN0eWxlclNldHRpbmdzIHtcblx0dGhlbWVzOiBSZWNvcmQ8c3RyaW5nLENvZGVTdHlsZXJUaGVtZT47XG5cdHNlbGVjdGVkVGhlbWU6IHN0cmluZztcblx0Y3VycmVudFRoZW1lOiBDb2RlU3R5bGVyVGhlbWU7XG5cdG5ld1RoZW1lOiBzdHJpbmc7XG5cdG5ld0hpZ2hsaWdodDogc3RyaW5nO1xuXHRleGFtcGxlQ29kZWJsb2NrUGFyYW1ldGVyczogc3RyaW5nO1xuXHRleGFtcGxlQ29kZWJsb2NrQ29udGVudDogc3RyaW5nO1xuXHRleGFtcGxlSW5saW5lQ29kZTogc3RyaW5nO1xuXHRkZWNvcmF0ZVByaW50OiBib29sZWFuO1xuXHRleGNsdWRlZExhbmd1YWdlczogc3RyaW5nO1xuXHRwcm9jZXNzZWRDb2RlYmxvY2tzV2hpdGVsaXN0OiBzdHJpbmc7XG5cdHJlZGlyZWN0TGFuZ3VhZ2VzOiBSZWNvcmQ8c3RyaW5nLHtjb2xvdXI/OiBDb2xvdXIsIGljb24/OiBzdHJpbmd9Pjtcblx0dmVyc2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbmd1YWdlIHtcblx0aWNvbj86IHN0cmluZztcblx0Y29sb3VyPzogQ29sb3VyO1xuXHRpbmxpbmVDb21tZW50PzogQXJyYXk8c3RyaW5nPjtcblx0YmxvY2tDb21tZW50PzogQXJyYXk8e1xuXHRcdG9wZW46IHN0cmluZztcblx0XHRjbG9zZTogc3RyaW5nO1xuXHRcdGNvbnRpbnVhdGlvbj86IHN0cmluZzsgLy8gRGVmYXVsdDogTm9uZVxuXHRcdG11bHRpbGluZT86IHN0cmluZzsgLy8gRGVmYXVsdDogdHJ1ZVxuXHR9Pjtcbn1cdFxuXG4vLyBUaGVtZSBEZWZhdWx0c1xuY29uc3QgVEhFTUVfREVGQVVMVF9TRVRUSU5HUzogQ29kZVN0eWxlclRoZW1lU2V0dGluZ3MgPSB7XG5cdGNvZGVibG9jazoge1xuXHRcdGxpbmVOdW1iZXJzOiB0cnVlLFxuXHRcdHVud3JhcExpbmVzOiB0cnVlLFxuXHRcdHdyYXBMaW5lc0FjdGl2ZTogZmFsc2UsXG5cdFx0Y3VydmF0dXJlOiA0LFxuXHR9LFxuXHRndXR0ZXI6IHtcblx0XHRoaWdobGlnaHQ6IHRydWUsXG5cdFx0YWN0aXZlTGluZTogZmFsc2UsXG5cdH0sXG5cdGhlYWRlcjoge1xuXHRcdHRpdGxlOiB7XG5cdFx0XHR0ZXh0Rm9udDogXCJcIixcblx0XHRcdHRleHRCb2xkOiBmYWxzZSxcblx0XHRcdHRleHRJdGFsaWM6IHRydWUsXG5cdFx0fSxcblx0XHRsYW5ndWFnZVRhZzoge1xuXHRcdFx0ZGlzcGxheTogXCJub25lXCIsXG5cdFx0XHR0ZXh0Rm9udDogXCJcIixcblx0XHRcdHRleHRCb2xkOiB0cnVlLFxuXHRcdFx0dGV4dEl0YWxpYzogZmFsc2UsXG5cdFx0fSxcblx0XHRsYW5ndWFnZUljb246IHtcblx0XHRcdGRpc3BsYXk6IFwibm9uZVwiLFxuXHRcdFx0ZGlzcGxheUNvbG91cjogdHJ1ZSxcblx0XHR9LFxuXHRcdGZvbnRTaXplOiAxNCxcblx0XHRmb2xkUGxhY2Vob2xkZXI6IFwiXCIsXG5cdH0sXG5cdGhpZ2hsaWdodHM6IHtcblx0XHRhY3RpdmVDb2RlYmxvY2tMaW5lOiBmYWxzZSxcblx0XHRhY3RpdmVFZGl0b3JMaW5lOiBmYWxzZSxcblx0fSxcblx0aW5saW5lOiB7XG5cdFx0c3ludGF4SGlnaGxpZ2h0OiB0cnVlLFxuXHRcdHN0eWxlOiB0cnVlLFxuXHRcdGZvbnRXZWlnaHQ6IDQsXG5cdFx0Y3VydmF0dXJlOiA2LFxuXHRcdHBhZGRpbmdWZXJ0aWNhbDogNSxcblx0XHRwYWRkaW5nSG9yaXpvbnRhbDogNSxcblx0XHRtYXJnaW5Ib3Jpem9udGFsOiAwLFxuXHRcdHRpdGxlRm9udFdlaWdodDogOCxcblx0fSxcblx0YWR2YW5jZWQ6IHtcblx0XHRncmFkaWVudEhpZ2hsaWdodHM6IGZhbHNlLFxuXHRcdGdyYWRpZW50SGlnaGxpZ2h0c0NvbG91clN0b3A6IFwiNzAlXCIsXG5cdFx0bGFuZ3VhZ2VCb3JkZXJDb2xvdXI6IGZhbHNlLFxuXHRcdGxhbmd1YWdlQm9yZGVyV2lkdGg6IDUsXG5cdFx0aWNvblNpemU6IDI4LFxuXHR9LFxufTtcbmV4cG9ydCBjb25zdCBUSEVNRV9GQUxMQkFDS19DT0xPVVJTOiBDb2RlU3R5bGVyVGhlbWVNb2RlQ29sb3VycyA9IHtcblx0Y29kZWJsb2NrOiB7XG5cdFx0YmFja2dyb3VuZENvbG91cjogXCItLWNvZGUtYmFja2dyb3VuZFwiLFxuXHRcdHRleHRDb2xvdXI6IFwiLS1jb2RlLW5vcm1hbFwiLFxuXHR9LFxuXHRndXR0ZXI6IHtcblx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIi0tY29kZS1iYWNrZ3JvdW5kXCIsXG5cdFx0dGV4dENvbG91cjogXCItLXRleHQtZmFpbnRcIixcblx0XHRhY3RpdmVUZXh0Q29sb3VyOiBcIi0tdGV4dC1tdXRlZFwiLFxuXHR9LFxuXHRoZWFkZXI6IHtcblx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIi0tY29kZS1iYWNrZ3JvdW5kXCIsXG5cdFx0dGl0bGU6IHtcblx0XHRcdHRleHRDb2xvdXI6IFwiLS1jb2RlLWNvbW1lbnRcIixcblx0XHR9LFxuXHRcdGxhbmd1YWdlVGFnOiB7XG5cdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIi0tY29kZS1iYWNrZ3JvdW5kXCIsXG5cdFx0XHR0ZXh0Q29sb3VyOiBcIi0tY29kZS1jb21tZW50XCIsXG5cdFx0fSxcblx0XHRsaW5lQ29sb3VyOiBcIi0tY29sb3ItYmFzZS0zMFwiLFxuXHR9LFxuXHRoaWdobGlnaHRzOiB7XG5cdFx0YWN0aXZlQ29kZWJsb2NrTGluZUNvbG91cjogXCItLWNvbG9yLWJhc2UtMzBcIixcblx0XHRhY3RpdmVFZGl0b3JMaW5lQ29sb3VyOiBcIi0tY29sb3ItYmFzZS0yMFwiLFxuXHRcdGRlZmF1bHRDb2xvdXI6IFwiLS10ZXh0LWhpZ2hsaWdodC1iZ1wiLFxuXHRcdGFsdGVybmF0aXZlSGlnaGxpZ2h0czoge30sXG5cdH0sXG5cdGlubGluZToge1xuXHRcdGJhY2tncm91bmRDb2xvdXI6IFwiLS1jb2RlLWJhY2tncm91bmRcIixcblx0XHR0ZXh0Q29sb3VyOiBcIi0tY29kZS1ub3JtYWxcIixcblx0XHRhY3RpdmVUZXh0Q29sb3VyOiBcIi0tY29kZS1ub3JtYWxcIixcblx0XHR0aXRsZVRleHRDb2xvdXI6IFwiLS1jb2RlLWNvbW1lbnRcIixcblx0fSxcblx0YWR2YW5jZWQ6IHtcblx0XHRidXR0b25Db2xvdXI6IFwiLS10ZXh0LW11dGVkXCIsXG5cdFx0YnV0dG9uQWN0aXZlQ29sb3VyOiBcIi0tdGV4dC1ub3JtYWxcIixcblx0fVxufTtcblxuLy8gQ29sb3IgU2NoZW1lc1xuY29uc3QgU09MQVJJWkVEOiBSZWNvcmQ8c3RyaW5nLENvbG91cj4gPSB7XG5cdFwiYmFzZTAzXCI6IFwiIzAwMmIzNlwiLFxuXHRcImJhc2UwMlwiOiBcIiMwNzM2NDJcIixcblx0XCJiYXNlMDFcIjogXCIjNTg2ZTc1XCIsXG5cdFwiYmFzZTAwXCI6IFwiIzY1N2I4M1wiLFxuXHRcImJhc2UwXCI6IFwiIzgzOTQ5NlwiLFxuXHRcImJhc2UxXCI6IFwiIzkzYTFhMVwiLFxuXHRcImJhc2UyXCI6IFwiI2VlZThkNVwiLFxuXHRcImJhc2UzXCI6IFwiI2ZkZjZlM1wiLFxuXHRcInllbGxvd1wiOiBcIiNiNTg5MDBcIixcblx0XCJvcmFuZ2VcIjogXCIjY2I0YjE2XCIsXG5cdFwicmVkXCI6IFwiI2RjMzIyZlwiLFxuXHRcIm1hZ2VudGFcIjogXCIjZDMzNjgyXCIsXG5cdFwidmlvbGV0XCI6IFwiIzZjNzFjNFwiLFxuXHRcImJsdWVcIjogXCIjMjY4YmQyXCIsXG5cdFwiY3lhblwiOiBcIiMyYWExOThcIixcblx0XCJncmVlblwiOiBcIiM4NTk5MDBcIixcbn07XG4vLyBjb25zdCBDQVRQVUNDSU46IFJlY29yZDxzdHJpbmcsQ29sb3VyPiA9IHtcbi8vIFx0bGF0dGU6IHtcbi8vIFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwiI2VmZjFmNVwiLFxuLy8gXHRcdGZvcmVncm91bmRDb2xvcjogXCIjNGM0ZjY5XCIsXG4vLyBcdFx0c2VsZWN0aW9uQ29sb3I6IFwiI2FjYjBiZVwiLFxuLy8gXHRcdGN1cnNvckNvbG9yOiBcIiNkYzhhNzhcIixcbi8vIFx0XHRjdXJzb3JBY2NlbnRDb2xvcjogXCIjZWZmMWY1XCIsXG4vLyBcdFx0Y29sb3JzOiB7XG4vLyBcdFx0XHRibGFjazogXCIjNWM1Zjc3XCIsXG4vLyBcdFx0XHRibHVlOiBcIiMxZTY2ZjVcIixcbi8vIFx0XHRcdHJlZDogXCIjZDIwZjM5XCIsXG4vLyBcdFx0XHRncmVlbjogXCIjNDBhMDJiXCIsXG4vLyBcdFx0XHR5ZWxsb3c6IFwiI2RmOGUxZFwiLFxuLy8gXHRcdFx0bWFnZW50YTogXCIjZWE3NmNiXCIsXG4vLyBcdFx0XHRjeWFuOiBcIiMxNzkyOTlcIixcbi8vIFx0XHRcdHdoaXRlOiBcIiNhY2IwYmVcIixcbi8vIFx0XHRcdGxpZ2h0QmxhY2s6IFwiIzZjNmY4NVwiLFxuLy8gXHRcdFx0bGlnaHRXaGl0ZTogXCIjYmNjMGNjXCIsXG4vLyBcdFx0XHRsaWdodEJsdWU6IFwiIzFlNjZmNVwiLFxuLy8gXHRcdFx0bGlnaHRSZWQ6IFwiI2QyMGYzOVwiLFxuLy8gXHRcdFx0bGlnaHRHcmVlbjogXCIjNDBhMDJiXCIsXG4vLyBcdFx0XHRsaWdodFllbGxvdzogXCIjZGY4ZTFkXCIsXG4vLyBcdFx0XHRsaWdodE1hZ2VudGE6IFwiI2VhNzZjYlwiLFxuLy8gXHRcdFx0bGlnaHRDeWFuOiBcIiMxNzkyOTlcIixcbi8vIFx0XHR9LFxuLy8gXHR9LFxuLy8gXHRmcmFwcFx1MDBFOToge1xuLy8gXHRcdGJhY2tncm91bmRDb2xvcjogXCIjMzAzNDQ2XCIsXG4vLyBcdFx0Zm9yZWdyb3VuZENvbG9yOiBcIiNjNmQwZjVcIixcbi8vIFx0XHRzZWxlY3Rpb25Db2xvcjogXCIjNjI2ODgwXCIsXG4vLyBcdFx0Y3Vyc29yQ29sb3I6IFwiI2YyZDVjZlwiLFxuLy8gXHRcdGN1cnNvckFjY2VudENvbG9yOiBcIiMyMzI2MzRcIixcbi8vIFx0XHRjb2xvcnM6IHtcbi8vIFx0XHRcdGJsYWNrOiBcIiM1MTU3NmRcIixcbi8vIFx0XHRcdGJsdWU6IFwiIzhjYWFlZVwiLFxuLy8gXHRcdFx0cmVkOiBcIiNlNzgyODRcIixcbi8vIFx0XHRcdGdyZWVuOiBcIiNhNmQxODlcIixcbi8vIFx0XHRcdHllbGxvdzogXCIjZTVjODkwXCIsXG4vLyBcdFx0XHRtYWdlbnRhOiBcIiNmNGI4ZTRcIixcbi8vIFx0XHRcdGN5YW46IFwiIzgxYzhiZVwiLFxuLy8gXHRcdFx0d2hpdGU6IFwiI2I1YmZlMlwiLFxuLy8gXHRcdFx0bGlnaHRCbGFjazogXCIjNjI2ODgwXCIsXG4vLyBcdFx0XHRsaWdodFdoaXRlOiBcIiNhNWFkY2VcIixcbi8vIFx0XHRcdGxpZ2h0Qmx1ZTogXCIjOGNhYWVlXCIsXG4vLyBcdFx0XHRsaWdodFJlZDogXCIjZTc4Mjg0XCIsXG4vLyBcdFx0XHRsaWdodEdyZWVuOiBcIiNhNmQxODlcIixcbi8vIFx0XHRcdGxpZ2h0WWVsbG93OiBcIiNlNWM4OTBcIixcbi8vIFx0XHRcdGxpZ2h0TWFnZW50YTogXCIjZjRiOGU0XCIsXG4vLyBcdFx0XHRsaWdodEN5YW46IFwiIzgxYzhiZVwiLFxuLy8gXHRcdH0sXG4vLyBcdH0sXG4vLyBcdG1hY2NoaWF0bzoge1xuLy8gXHRcdGJhY2tncm91bmRDb2xvcjogXCIjMjQyNzNhXCIsXG4vLyBcdFx0Zm9yZWdyb3VuZENvbG9yOiBcIiNjYWQzZjVcIixcbi8vIFx0XHRzZWxlY3Rpb25Db2xvcjogXCIjNWI2MDc4XCIsXG4vLyBcdFx0Y3Vyc29yQ29sb3I6IFwiI2Y0ZGJkNlwiLFxuLy8gXHRcdGN1cnNvckFjY2VudENvbG9yOiBcIiMxODE5MjZcIixcbi8vIFx0XHRjb2xvcnM6IHtcbi8vIFx0XHRcdGJsYWNrOiBcIiM0OTRkNjRcIixcbi8vIFx0XHRcdGJsdWU6IFwiIzhhYWRmNFwiLFxuLy8gXHRcdFx0cmVkOiBcIiNlZDg3OTZcIixcbi8vIFx0XHRcdGdyZWVuOiBcIiNhNmRhOTVcIixcbi8vIFx0XHRcdHllbGxvdzogXCIjZWVkNDlmXCIsXG4vLyBcdFx0XHRtYWdlbnRhOiBcIiNmNWJkZTZcIixcbi8vIFx0XHRcdGN5YW46IFwiIzhiZDVjYThiZDVjYVwiLFxuLy8gXHRcdFx0d2hpdGU6IFwiI2I4YzBlMFwiLFxuLy8gXHRcdFx0bGlnaHRCbGFjazogXCIjNWI2MDc4XCIsXG4vLyBcdFx0XHRsaWdodFdoaXRlOiBcIiNhNWFkY2JcIixcbi8vIFx0XHRcdGxpZ2h0Qmx1ZTogXCIjOGFhZGY0XCIsXG4vLyBcdFx0XHRsaWdodFJlZDogXCIjZWQ4Nzk2XCIsXG4vLyBcdFx0XHRsaWdodEdyZWVuOiBcIiNhNmRhOTVcIixcbi8vIFx0XHRcdGxpZ2h0WWVsbG93OiBcIiNlZWQ0OWZcIixcbi8vIFx0XHRcdGxpZ2h0TWFnZW50YTogXCIjZjViZGU2XCIsXG4vLyBcdFx0XHRsaWdodEN5YW46IFwiIzhiZDVjYVwiLFxuLy8gXHRcdH0sXG4vLyBcdH0sXG4vLyBcdG1vY2hhOiB7XG4vLyBcdFx0YmFja2dyb3VuZENvbG9yOiBcIiMxZTFlMmVcIixcbi8vIFx0XHRmb3JlZ3JvdW5kQ29sb3I6IFwiI2NkZDZmNFwiLFxuLy8gXHRcdHNlbGVjdGlvbkNvbG9yOiBcIiM1ODViNzBcIixcbi8vIFx0XHRjdXJzb3JDb2xvcjogXCIjZjVlMGRjXCIsXG4vLyBcdFx0Y3Vyc29yQWNjZW50Q29sb3I6IFwiIzExMTExYlwiLFxuLy8gXHRcdGNvbG9yczoge1xuLy8gXHRcdFx0YmxhY2s6IFwiIzQ1NDc1QVwiLFxuLy8gXHRcdFx0Ymx1ZTogXCIjODliNGZhXCIsXG4vLyBcdFx0XHRyZWQ6IFwiI2YzOGJhOFwiLFxuLy8gXHRcdFx0Z3JlZW46IFwiI2E2ZTNhMVwiLFxuLy8gXHRcdFx0eWVsbG93OiBcIiNmOWUyYWZcIixcbi8vIFx0XHRcdG1hZ2VudGE6IFwiI2Y1YzJlN1wiLFxuLy8gXHRcdFx0Y3lhbjogXCIjOTRlMmQ1XCIsXG4vLyBcdFx0XHR3aGl0ZTogXCIjYmFjMmRlXCIsXG4vLyBcdFx0XHRsaWdodEJsYWNrOiBcIiM1ODViNzBcIixcbi8vIFx0XHRcdGxpZ2h0V2hpdGU6IFwiI2E2YWRjOFwiLFxuLy8gXHRcdFx0bGlnaHRCbHVlOiBcIiM4OWI0ZmFcIixcbi8vIFx0XHRcdGxpZ2h0UmVkOiBcIiNmMzhiYThcIixcbi8vIFx0XHRcdGxpZ2h0R3JlZW46IFwiI2E2ZTNhMVwiLFxuLy8gXHRcdFx0bGlnaHRZZWxsb3c6IFwiI2Y5ZTJhZlwiLFxuLy8gXHRcdFx0bGlnaHRNYWdlbnRhOiBcIiNmNWMyZTdcIixcbi8vIFx0XHRcdGxpZ2h0Q3lhbjogXCIjOTRlMmQ1XCIsXG4vLyBcdFx0fSxcbi8vIFx0fSxcbi8vIH07XG4vLyBjb25zdCBHUlVWQk9YOiBSZWNvcmQ8c3RyaW5nLENvbG91cj4gPSB7XG4vLyBcdGRhcmswX2hhcmQ6IFwiIzFkMjAyMVwiLFxuLy8gXHRkYXJrMDogXCIjMjgyODI4XCIsXG4vLyBcdGRhcmswX3NvZnQ6IFwiIzMyMzAyZlwiLFxuLy8gXHRkYXJrMTogXCIjM2MzODM2XCIsXG4vLyBcdGRhcmsyOiBcIiM1MDQ5NDVcIixcbi8vIFx0ZGFyazM6IFwiIzY2NWM1NFwiLFxuLy8gXHRkYXJrNDogXCIjN2M2ZjY0XCIsXG5cbi8vIFx0Z3JheV8yNDU6IFwiIzkyODM3NFwiLFxuLy8gXHRncmF5XzI0NDogXCIjOTI4Mzc0XCIsXG5cbi8vIFx0bGlnaHQwX2hhcmQ6IFwiI2Y5ZjVkN1wiLFxuLy8gXHRsaWdodDA6IFwiI2ZiZjFjN1wiLFxuLy8gXHRsaWdodDBfc29mdDogXCIjZjJlNWJjXCIsXG4vLyBcdGxpZ2h0MTogXCIjZWJkYmIyXCIsXG4vLyBcdGxpZ2h0MjogXCIjZDVjNGExXCIsXG4vLyBcdGxpZ2h0MzogXCIjYmRhZTkzXCIsXG4vLyBcdGxpZ2h0NDogXCIjYTg5OTg0XCIsXG5cbi8vIFx0YnJpZ2h0X3JlZDogXCIjZmI0OTM0XCIsXG4vLyBcdGJyaWdodF9ncmVlbjogXCIjYjhiYjI2XCIsXG4vLyBcdGJyaWdodF95ZWxsb3c6IFwiI2ZhYmQyZlwiLFxuLy8gXHRicmlnaHRfYmx1ZTogXCIjODNhNTk4XCIsXG4vLyBcdGJyaWdodF9wdXJwbGU6IFwiI2QzODY5YlwiLFxuLy8gXHRicmlnaHRfYXF1YTogXCIjOGVjMDdjXCIsXG4vLyBcdGJyaWdodF9vcmFuZ2U6IFwiI2ZlODAxOVwiLFxuXG4vLyBcdG5ldXRyYWxfcmVkOiBcIiNjYzI0MWRcIixcbi8vIFx0bmV1dHJhbF9ncmVlbjogXCIjOTg5NzFhXCIsXG4vLyBcdG5ldXRyYWxfeWVsbG93OiBcIiNkNzk5MjFcIixcbi8vIFx0bmV1dHJhbF9ibHVlOiBcIiM0NTg1ODhcIixcbi8vIFx0bmV1dHJhbF9wdXJwbGU6IFwiI2IxNjI4NlwiLFxuLy8gXHRuZXV0cmFsX2FxdWE6IFwiIzY4OWQ2YVwiLFxuLy8gXHRuZXV0cmFsX29yYW5nZTogXCIjZDY1ZDBlXCIsXG5cbi8vIFx0ZmFkZWRfcmVkOiBcIiM5ZDAwMDZcIixcbi8vIFx0ZmFkZWRfZ3JlZW46IFwiIzc5NzQwZVwiLFxuLy8gXHRmYWRlZF95ZWxsb3c6IFwiI2I1NzYxNFwiLFxuLy8gXHRmYWRlZF9ibHVlOiBcIiMwNzY2NzhcIixcbi8vIFx0ZmFkZWRfcHVycGxlOiBcIiM4ZjNmNzFcIixcbi8vIFx0ZmFkZWRfYXF1YTogXCIjNDI3YjU4XCIsXG4vLyBcdGZhZGVkX29yYW5nZTogXCIjYWYzYTAzXCIsXG4vLyB9O1xuLy8gY29uc3QgTk9SRDogUmVjb3JkPHN0cmluZyxDb2xvdXI+ID0ge1xuXG4vLyB9O1xuLy8gY29uc3QgRFJBQ1VMQTogUmVjb3JkPHN0cmluZyxDb2xvdXI+ID0ge1xuXG4vLyB9O1xuXG4vLyBUaGVtZSBDcmVhdGlvblxuY29uc3QgREVGQVVMVF9USEVNRTogQ29kZVN0eWxlclRoZW1lID0ge1xuXHRzZXR0aW5nczogVEhFTUVfREVGQVVMVF9TRVRUSU5HUyxcblx0Y29sb3Vyczoge1xuXHRcdGxpZ2h0OiBUSEVNRV9GQUxMQkFDS19DT0xPVVJTLFxuXHRcdGRhcms6IFRIRU1FX0ZBTExCQUNLX0NPTE9VUlMsXG5cdH0sXG59O1xuY29uc3QgU09MQVJJWkVEX1RIRU1FOiBDb2RlU3R5bGVyVGhlbWUgPSB7XG5cdHNldHRpbmdzOiBUSEVNRV9ERUZBVUxUX1NFVFRJTkdTLFxuXHRjb2xvdXJzOiB7XG5cdFx0bGlnaHQ6IHtcblx0XHRcdGNvZGVibG9jazoge1xuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBTT0xBUklaRUQuYmFzZTMsXG5cdFx0XHRcdHRleHRDb2xvdXI6IFwiI2JhYmFiYVwiLFxuXHRcdFx0fSxcblx0XHRcdGd1dHRlcjoge1xuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBTT0xBUklaRUQuYmFzZTIsXG5cdFx0XHRcdHRleHRDb2xvdXI6IFwiIzZjNmM2Y1wiLFxuXHRcdFx0XHRhY3RpdmVUZXh0Q29sb3VyOiBcIiM4YzhjOGNcIixcblx0XHRcdH0sXG5cdFx0XHRoZWFkZXI6IHtcblx0XHRcdFx0YmFja2dyb3VuZENvbG91cjogXCIjRDVDQ0I0XCIsXG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dGV4dENvbG91cjogXCIjODY2NzA0XCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhbmd1YWdlVGFnOiB7XG5cdFx0XHRcdFx0YmFja2dyb3VuZENvbG91cjogXCIjQjhCNUFBXCIsXG5cdFx0XHRcdFx0dGV4dENvbG91cjogXCIjQzI1RjMwXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxpbmVDb2xvdXI6IFwiI0VERDQ4OVwiLFxuXHRcdFx0fSxcblx0XHRcdGhpZ2hsaWdodHM6IHtcblx0XHRcdFx0YWN0aXZlQ29kZWJsb2NrTGluZUNvbG91cjogU09MQVJJWkVELmJhc2UyLFxuXHRcdFx0XHRhY3RpdmVFZGl0b3JMaW5lQ29sb3VyOiBcIiM2MDQ2MDYzM1wiLFxuXHRcdFx0XHRkZWZhdWx0Q29sb3VyOiBcIiNFOURGQkFcIixcblx0XHRcdFx0YWx0ZXJuYXRpdmVIaWdobGlnaHRzOiB7fSxcblx0XHRcdH0sXG5cdFx0XHRpbmxpbmU6IHtcblx0XHRcdFx0YmFja2dyb3VuZENvbG91cjogU09MQVJJWkVELmJhc2UzLFxuXHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiNiYWJhYmFcIixcblx0XHRcdFx0YWN0aXZlVGV4dENvbG91cjogXCIjYmFiYWJhXCIsXG5cdFx0XHRcdHRpdGxlVGV4dENvbG91cjogXCIjQzI1RjMwXCIsXG5cdFx0XHR9LFxuXHRcdFx0YWR2YW5jZWQ6IHtcblx0XHRcdFx0YnV0dG9uQ29sb3VyOiBcIi0tdGV4dC1tdXRlZFwiLFxuXHRcdFx0XHRidXR0b25BY3RpdmVDb2xvdXI6IFwiLS10ZXh0LW5vcm1hbFwiLFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0ZGFyazoge1xuXHRcdFx0Y29kZWJsb2NrOiB7XG5cdFx0XHRcdGJhY2tncm91bmRDb2xvdXI6IFNPTEFSSVpFRC5iYXNlMDMsXG5cdFx0XHRcdHRleHRDb2xvdXI6IFwiI2JhYmFiYVwiLFxuXHRcdFx0fSxcblx0XHRcdGd1dHRlcjoge1xuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBTT0xBUklaRUQuYmFzZTAyLFxuXHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiM2YzZjNmNcIixcblx0XHRcdFx0YWN0aXZlVGV4dENvbG91cjogXCIjNGM0YzRjXCIsXG5cdFx0XHR9LFxuXHRcdFx0aGVhZGVyOiB7XG5cdFx0XHRcdGJhY2tncm91bmRDb2xvdXI6IFwiIzBhNDU1NFwiLFxuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHRleHRDb2xvdXI6IFwiI2RhZGFkYVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYW5ndWFnZVRhZzoge1xuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvdXI6IFwiIzAwODA4MFwiLFxuXHRcdFx0XHRcdHRleHRDb2xvdXI6IFwiIzAwMDAwMFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsaW5lQ29sb3VyOiBcIiM0NmNjZWRcIixcblx0XHRcdH0sXG5cdFx0XHRoaWdobGlnaHRzOiB7XG5cdFx0XHRcdGFjdGl2ZUNvZGVibG9ja0xpbmVDb2xvdXI6IFNPTEFSSVpFRC5iYXNlMDIsXG5cdFx0XHRcdGFjdGl2ZUVkaXRvckxpbmVDb2xvdXI6IFwiIzQ2OGVlYjMzXCIsXG5cdFx0XHRcdGRlZmF1bHRDb2xvdXI6IFwiIzA1NGI1Y1wiLFxuXHRcdFx0XHRhbHRlcm5hdGl2ZUhpZ2hsaWdodHM6IHt9LFxuXHRcdFx0fSxcblx0XHRcdGlubGluZToge1xuXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBTT0xBUklaRUQuYmFzZTAzLFxuXHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiNiYWJhYmFcIixcblx0XHRcdFx0YWN0aXZlVGV4dENvbG91cjogXCIjYmFiYWJhXCIsXG5cdFx0XHRcdHRpdGxlVGV4dENvbG91cjogXCIjMDAwMDAwXCIsXG5cdFx0XHR9LFxuXHRcdFx0YWR2YW5jZWQ6IHtcblx0XHRcdFx0YnV0dG9uQ29sb3VyOiBcIi0tdGV4dC1tdXRlZFwiLFxuXHRcdFx0XHRidXR0b25BY3RpdmVDb2xvdXI6IFwiLS10ZXh0LW5vcm1hbFwiLFxuXHRcdFx0fVxuXHRcdH0sXG5cdH0sXG59O1xuLy8gY29uc3QgTk9SRF9USEVNRSA9IHtcblxuLy8gfTtcbi8vIGNvbnN0IERSQUNVTEFfVEhFTUUgPSB7XG5cbi8vIH07XG4vLyBjb25zdCBDQVRQVUNDSU5fVEhFTUUgPSB7XG5cbi8vIH07XG4vLyBjb25zdCBHUlVWQk9YX1RIRU1FID0ge1xuLy8gXHRzZXR0aW5nczogVEhFTUVfREVGQVVMVF9TRVRUSU5HUyxcbi8vIFx0Y29sb3Vyczoge1xuLy8gXHRcdGxpZ2h0OiB7XG4vLyBcdFx0XHRjb2RlYmxvY2s6IHtcbi8vIFx0XHRcdFx0YmFja2dyb3VuZENvbG91cjogR1JVVkJPWC5saWdodDAsXG4vLyBcdFx0XHRcdHRleHRDb2xvdXI6IFwiI2JhYmFiYVwiLFxuLy8gXHRcdFx0fSxcbi8vIFx0XHRcdGd1dHRlcjoge1xuLy8gXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBHUlVWQk9YLmxpZ2h0MSxcbi8vIFx0XHRcdFx0dGV4dENvbG91cjogXCIjNmM2YzZjXCIsXG4vLyBcdFx0XHRcdGFjdGl2ZVRleHRDb2xvdXI6IFwiIzhjOGM4Y1wiLFxuLy8gXHRcdFx0fSxcbi8vIFx0XHRcdGhlYWRlcjoge1xuLy8gXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIiNENUNDQjRcIixcbi8vIFx0XHRcdFx0dGl0bGU6IHtcbi8vIFx0XHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiM4NjY3MDRcIixcbi8vIFx0XHRcdFx0fSxcbi8vIFx0XHRcdFx0bGFuZ3VhZ2VUYWc6IHtcbi8vIFx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBcIiNCOEI1QUFcIixcbi8vIFx0XHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiNDMjVGMzBcIixcbi8vIFx0XHRcdFx0fSxcbi8vIFx0XHRcdFx0bGluZUNvbG91cjogXCIjRURENDg5XCIsXG4vLyBcdFx0XHR9LFxuLy8gXHRcdFx0aGlnaGxpZ2h0czoge1xuLy8gXHRcdFx0XHRhY3RpdmVDb2RlYmxvY2tMaW5lQ29sb3VyOiBHUlVWQk9YLmxpZ2h0MSxcbi8vIFx0XHRcdFx0YWN0aXZlRWRpdG9yTGluZUNvbG91cjogXCIjNjA0NjA2MzNcIixcbi8vIFx0XHRcdFx0ZGVmYXVsdENvbG91cjogXCIjRTlERkJBXCIsXG4vLyBcdFx0XHRcdGFsdGVybmF0aXZlSGlnaGxpZ2h0czoge30sXG4vLyBcdFx0XHR9LFxuLy8gXHRcdFx0aW5saW5lOiB7XG4vLyBcdFx0XHRcdGJhY2tncm91bmRDb2xvdXI6IEdSVVZCT1gubGlnaHQwLFxuLy8gXHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiNiYWJhYmFcIixcbi8vIFx0XHRcdFx0YWN0aXZlVGV4dENvbG91cjogXCIjYmFiYWJhXCIsXG4vLyBcdFx0XHRcdHRpdGxlVGV4dENvbG91cjogXCIjQzI1RjMwXCIsXG4vLyBcdFx0XHR9LFxuLy8gXHRcdFx0YWR2YW5jZWQ6IHtcbi8vIFx0XHRcdFx0YnV0dG9uQ29sb3VyOiBcIi0tdGV4dC1tdXRlZFwiLFxuLy8gXHRcdFx0XHRidXR0b25BY3RpdmVDb2xvdXI6IFwiLS10ZXh0LW5vcm1hbFwiLFxuLy8gXHRcdFx0fVxuLy8gXHRcdH0sXG4vLyBcdFx0ZGFyazoge1xuLy8gXHRcdFx0Y29kZWJsb2NrOiB7XG4vLyBcdFx0XHRcdGJhY2tncm91bmRDb2xvdXI6IEdSVVZCT1guZGFyazAsXG4vLyBcdFx0XHRcdHRleHRDb2xvdXI6IFwiI2JhYmFiYVwiLFxuLy8gXHRcdFx0fSxcbi8vIFx0XHRcdGd1dHRlcjoge1xuLy8gXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBHUlVWQk9YLmRhcmsxLFxuLy8gXHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiM2YzZjNmNcIixcbi8vIFx0XHRcdFx0YWN0aXZlVGV4dENvbG91cjogXCIjNGM0YzRjXCIsXG4vLyBcdFx0XHR9LFxuLy8gXHRcdFx0aGVhZGVyOiB7XG4vLyBcdFx0XHRcdGJhY2tncm91bmRDb2xvdXI6IFwiIzBhNDU1NFwiLFxuLy8gXHRcdFx0XHR0aXRsZToge1xuLy8gXHRcdFx0XHRcdHRleHRDb2xvdXI6IFwiI2RhZGFkYVwiLFxuLy8gXHRcdFx0XHR9LFxuLy8gXHRcdFx0XHRsYW5ndWFnZVRhZzoge1xuLy8gXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvdXI6IFwiIzAwODA4MFwiLFxuLy8gXHRcdFx0XHRcdHRleHRDb2xvdXI6IFwiIzAwMDAwMFwiLFxuLy8gXHRcdFx0XHR9LFxuLy8gXHRcdFx0XHRsaW5lQ29sb3VyOiBcIiM0NmNjZWRcIixcbi8vIFx0XHRcdH0sXG4vLyBcdFx0XHRoaWdobGlnaHRzOiB7XG4vLyBcdFx0XHRcdGFjdGl2ZUNvZGVibG9ja0xpbmVDb2xvdXI6IEdSVVZCT1guZGFyazEsXG4vLyBcdFx0XHRcdGFjdGl2ZUVkaXRvckxpbmVDb2xvdXI6IFwiIzQ2OGVlYjMzXCIsXG4vLyBcdFx0XHRcdGRlZmF1bHRDb2xvdXI6IFwiIzA1NGI1Y1wiLFxuLy8gXHRcdFx0XHRhbHRlcm5hdGl2ZUhpZ2hsaWdodHM6IHt9LFxuLy8gXHRcdFx0fSxcbi8vIFx0XHRcdGlubGluZToge1xuLy8gXHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3VyOiBHUlVWQk9YLmRhcmswLFxuLy8gXHRcdFx0XHR0ZXh0Q29sb3VyOiBcIiNiYWJhYmFcIixcbi8vIFx0XHRcdFx0YWN0aXZlVGV4dENvbG91cjogXCIjYmFiYWJhXCIsXG4vLyBcdFx0XHRcdHRpdGxlVGV4dENvbG91cjogXCIjMDAwMDAwXCIsXG4vLyBcdFx0XHR9LFxuLy8gXHRcdFx0YWR2YW5jZWQ6IHtcbi8vIFx0XHRcdFx0YnV0dG9uQ29sb3VyOiBcIi0tdGV4dC1tdXRlZFwiLFxuLy8gXHRcdFx0XHRidXR0b25BY3RpdmVDb2xvdXI6IFwiLS10ZXh0LW5vcm1hbFwiLFxuLy8gXHRcdFx0fVxuLy8gXHRcdH0sXG4vLyBcdH0sXG4vLyB9O1xuXG5leHBvcnQgY29uc3QgSU5CVUlMVF9USEVNRVM6IFJlY29yZDxzdHJpbmcsQ29kZVN0eWxlclRoZW1lPiA9IHtcblx0XCJEZWZhdWx0XCI6IERFRkFVTFRfVEhFTUUsXG5cdFwiU29sYXJpemVkXCI6IFNPTEFSSVpFRF9USEVNRSxcbn07XG5cbi8vIERlZmF1bHQgVmFsdWVzXG5leHBvcnQgY29uc3QgRVhBTVBMRV9DT0RFQkxPQ0tfUEFSQU1FVEVSUyA9IFwicHl0aG9uIHRpdGxlOmZvb1wiO1xuZXhwb3J0IGNvbnN0IEVYQU1QTEVfQ09ERUJMT0NLX0NPTlRFTlQgPSBcInByaW50KFxcXCJUaGlzIGxpbmUgaXMgdmVyeSBsb25nIGFuZCBzaG91bGQgYmUgdXNlZCBhcyBhbiBleGFtcGxlIGZvciBob3cgdGhlIHBsdWdpbiBkZWFscyB3aXRoIHdyYXBwaW5nIGFuZCB1bndyYXBwaW5nIHZlcnkgbG9uZyBsaW5lcyBnaXZlbiB0aGUgY2hvaWNlIG9mIGNvZGVibG9jayBwYXJhbWV0ZXJzIGFuZCBzZXR0aW5ncy5cXFwiKVxcbnByaW50KFxcXCJUaGlzIGxpbmUgaXMgaGlnaGxpZ2h0ZWQuXFxcIilcIjtcbmV4cG9ydCBjb25zdCBFWEFNUExFX0lOTElORV9DT0RFID0gXCJ7cHl0aG9uIGljb24gdGl0bGU6Zm9vfSBwcmludChcXFwiVGhpcyBpcyBpbmxpbmUgY29kZVxcXCIpXCI7XG5leHBvcnQgY29uc3QgRVhDTFVERURfTEFOR1VBR0VTID0gXCJhZC0qXCI7XG5leHBvcnQgY29uc3QgV0hJVEVMSVNUX0NPREVCTE9DS1MgPSBcInJ1bi0qXCI7XG5cbi8vIFBsdWdpbiBkZWZhdWx0IHNldHRpbmdzXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogQ29kZVN0eWxlclNldHRpbmdzID0ge1xuXHR0aGVtZXM6IHN0cnVjdHVyZWRDbG9uZShJTkJVSUxUX1RIRU1FUyksXG5cdHNlbGVjdGVkVGhlbWU6IFwiRGVmYXVsdFwiLFxuXHRjdXJyZW50VGhlbWU6IHN0cnVjdHVyZWRDbG9uZShERUZBVUxUX1RIRU1FKSxcblx0bmV3VGhlbWU6IFwiXCIsXG5cdG5ld0hpZ2hsaWdodDogXCJcIixcblx0ZXhhbXBsZUNvZGVibG9ja1BhcmFtZXRlcnM6IEVYQU1QTEVfQ09ERUJMT0NLX1BBUkFNRVRFUlMsXG5cdGV4YW1wbGVDb2RlYmxvY2tDb250ZW50OiBFWEFNUExFX0NPREVCTE9DS19DT05URU5ULFxuXHRleGFtcGxlSW5saW5lQ29kZTogRVhBTVBMRV9JTkxJTkVfQ09ERSxcblx0ZGVjb3JhdGVQcmludDogdHJ1ZSxcblx0ZXhjbHVkZWRMYW5ndWFnZXM6IEVYQ0xVREVEX0xBTkdVQUdFUyxcblx0cHJvY2Vzc2VkQ29kZWJsb2Nrc1doaXRlbGlzdDogV0hJVEVMSVNUX0NPREVCTE9DS1MsXG5cdHJlZGlyZWN0TGFuZ3VhZ2VzOiB7fSxcblx0dmVyc2lvbjogXCIxLjEuM1wiLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTZXR0aW5ncyhzZXR0aW5nczogQ29kZVN0eWxlclNldHRpbmdzKTogQ29kZVN0eWxlclNldHRpbmdzIHtcblx0aWYgKHR5cGVvZiBzZXR0aW5ncz8udmVyc2lvbiA9PT0gXCJ1bmRlZmluZWRcIilcblx0XHRyZXR1cm4gc2V0dGluZ3NDbGVhcigpO1xuXHR3aGlsZSAoc2VtdmVyTmV3ZXIoREVGQVVMVF9TRVRUSU5HUy52ZXJzaW9uLHNldHRpbmdzLnZlcnNpb24pKSB7XG5cdFx0aWYgKHNldHRpbmdzLnZlcnNpb24gaW4gc2V0dGluZ3NVcGRhdGVycylcblx0XHRcdHNldHRpbmdzID0gc2V0dGluZ3NVcGRhdGVyc1tzZXR0aW5ncy52ZXJzaW9uXShzZXR0aW5ncyk7XG5cdFx0ZWxzZVxuXHRcdFx0c2V0dGluZ3MgPSBzZXR0aW5nc0NsZWFyKCk7XG5cdH1cblx0cmV0dXJuIHNldHRpbmdzO1xufVxuZnVuY3Rpb24gc2VtdmVyTmV3ZXIobmV3VmVyc2lvbjogc3RyaW5nLCBvbGRWZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcblx0cmV0dXJuIG5ld1ZlcnNpb24ubG9jYWxlQ29tcGFyZShvbGRWZXJzaW9uLCB1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSB9KSA9PT0gMTtcbn1cbmZ1bmN0aW9uIHNldHRpbmdzVmVyc2lvblVwZGF0ZShzZXR0aW5nczogQ29kZVN0eWxlclNldHRpbmdzLCB0aGVtZVVwZGF0ZXI6ICh0aGVtZTogQ29kZVN0eWxlclRoZW1lKT0+Q29kZVN0eWxlclRoZW1lID0gKHRoZW1lKT0+dGhlbWUsIG90aGVyU2V0dGluZ3NVcGRhdGVyOiAoc2V0dGluZ3M6IENvZGVTdHlsZXJTZXR0aW5ncyk9PkNvZGVTdHlsZXJTZXR0aW5ncyA9IChzZXR0aW5ncyk9PnNldHRpbmdzLCByZWRpcmVjdExhbmd1YWdlc1VwZGF0ZXI6IChyZWRpcmVjdExhbmd1YWdlczogUmVjb3JkPHN0cmluZyx7Y29sb3VyPzogQ29sb3VyLCBpY29uPzogc3RyaW5nfT4pPT5SZWNvcmQ8c3RyaW5nLHtjb2xvdXI/OiBDb2xvdXIsIGljb24/OiBzdHJpbmd9PiA9IChyZWRpcmVjdExhbmd1YWdlcyk9PnJlZGlyZWN0TGFuZ3VhZ2VzKTogQ29kZVN0eWxlclNldHRpbmdzIHtcblx0Zm9yIChjb25zdCBbbmFtZSwgdGhlbWVdIG9mIE9iamVjdC5lbnRyaWVzKHNldHRpbmdzLnRoZW1lcykpIHtcblx0XHRzZXR0aW5ncy50aGVtZXNbbmFtZV0gPSB0aGVtZVVwZGF0ZXIodGhlbWUpO1xuXHR9XG5cdHNldHRpbmdzLmN1cnJlbnRUaGVtZSA9IHN0cnVjdHVyZWRDbG9uZShzZXR0aW5ncy50aGVtZXNbc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0pO1xuXHRzZXR0aW5ncy5yZWRpcmVjdExhbmd1YWdlcyA9IHJlZGlyZWN0TGFuZ3VhZ2VzVXBkYXRlcihzZXR0aW5ncy5yZWRpcmVjdExhbmd1YWdlcyk7XG5cdHNldHRpbmdzID0gb3RoZXJTZXR0aW5nc1VwZGF0ZXIoc2V0dGluZ3MpO1xuXHRzZXR0aW5ncy52ZXJzaW9uID0gT2JqZWN0LmtleXMoc2V0dGluZ3NVcGRhdGVycykuZmluZCgodmFsdWUsaW5kZXgsYXJyYXkpPT5hcnJheT8uW2luZGV4LTFdPT09c2V0dGluZ3MudmVyc2lvbikgPz8gXCIxLjAuMFwiO1xuXHRyZXR1cm4gc2V0dGluZ3M7XG59XG5mdW5jdGlvbiBzZXR0aW5nc1ByZXNlcnZlKHNldHRpbmdzOiBDb2RlU3R5bGVyU2V0dGluZ3MpOiBDb2RlU3R5bGVyU2V0dGluZ3Mge1xuXHRzZXR0aW5ncy52ZXJzaW9uID0gT2JqZWN0LmtleXMoc2V0dGluZ3NVcGRhdGVycykuZmluZCgodmFsdWUsaW5kZXgsYXJyYXkpPT5hcnJheT8uW2luZGV4LTFdPT09c2V0dGluZ3MudmVyc2lvbikgPz8gXCIxLjAuMFwiO1xuXHRyZXR1cm4gc2V0dGluZ3M7XG59XG5mdW5jdGlvbiBzZXR0aW5nc0NsZWFyKCk6IENvZGVTdHlsZXJTZXR0aW5ncyB7XG5cdHJldHVybiBERUZBVUxUX1NFVFRJTkdTO1xufVxuXG5jb25zdCBzZXR0aW5nc1VwZGF0ZXJzOiBSZWNvcmQ8c3RyaW5nLChzZXR0aW5nczogQ29kZVN0eWxlclNldHRpbmdzKT0+Q29kZVN0eWxlclNldHRpbmdzPiA9IHtcblx0XCIxLjAuMFwiOiBzZXR0aW5nc0NsZWFyLFxuXHRcIjEuMC4xXCI6IHNldHRpbmdzQ2xlYXIsXG5cdFwiMS4wLjJcIjogc2V0dGluZ3NDbGVhcixcblx0XCIxLjAuM1wiOiBzZXR0aW5nc0NsZWFyLFxuXHRcIjEuMC40XCI6IHNldHRpbmdzQ2xlYXIsXG5cdFwiMS4wLjVcIjogc2V0dGluZ3NDbGVhcixcblx0XCIxLjAuNlwiOiBzZXR0aW5nc0NsZWFyLFxuXHRcIjEuMC43XCI6IHNldHRpbmdzUHJlc2VydmUsXG5cdFwiMS4wLjhcIjogc2V0dGluZ3NQcmVzZXJ2ZSxcblx0XCIxLjAuOVwiOiBzZXR0aW5nc1ByZXNlcnZlLFxuXHRcIjEuMC4xMFwiOiAoc2V0dGluZ3MpPT5zZXR0aW5nc1ZlcnNpb25VcGRhdGUoc2V0dGluZ3MsKHRoZW1lKT0+e1xuXHRcdHRoZW1lLnNldHRpbmdzLmlubGluZS5zdHlsZSA9IHRydWU7XG5cdFx0cmV0dXJuIHRoZW1lO1xuXHR9LChzZXR0aW5ncyk9PnsvL0B0cy1leHBlY3QtZXJyb3IgT2xkZXIgaW50ZXJmYWNlIHZlcnNpb25zXG5cdFx0ZGVsZXRlIHNldHRpbmdzLnNwZWNpYWxMYW5ndWFnZXM7XG5cdFx0cmV0dXJuIHNldHRpbmdzO1xuXHR9KSxcblx0XCIxLjAuMTFcIjogc2V0dGluZ3NQcmVzZXJ2ZSxcblx0XCIxLjEuMFwiOiBzZXR0aW5nc1ByZXNlcnZlLFxuXHRcIjEuMS4xXCI6IHNldHRpbmdzUHJlc2VydmUsXG5cdFwiMS4xLjJcIjogc2V0dGluZ3NQcmVzZXJ2ZSxcblx0XCIxLjEuM1wiOiBzZXR0aW5nc1ByZXNlcnZlLFxufTtcblxuLy8gQ29uc3RhbnRzXG5leHBvcnQgY29uc3QgRk9MRF9QTEFDRUhPTERFUiA9IFwiRm9sZGVkIENvZGVcIjtcbmV4cG9ydCBjb25zdCBQQVJBTUVURVJTID0gW1widGl0bGVcIixcImZvbGRcIixcImxuXCIsXCJ3cmFwXCIsXCJ1bndyYXBcIixcImlnbm9yZVwiXTtcbmV4cG9ydCBjb25zdCBUUkFOU0lUSU9OX0xFTkdUSCA9IDI0MDsgLy8gMjQwbXNcbmV4cG9ydCBjb25zdCBTUEVDSUFMX0xBTkdVQUdFUyA9IFtcIl5wcmV2aWV3JFwiLFwiXmluY2x1ZGUkXCIsXCJeb3V0cHV0JFwiLFwiXnJ1bi0uKyRcIl07XG5leHBvcnQgY29uc3QgU0VUVElOR1NfU09VUkNFUEFUSF9QUkVGSVggPSBcIkBDb2RlLVN0eWxlci1TZXR0aW5nczpcIjtcblxuY29uc3QgUFJJU01fTEFOR1VBR0VTOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHsgLy8gUHJpc20gTGFuZ3VhZ2VzOiBodHRwczovL3ByaXNtanMuY29tL3BsdWdpbnMvc2hvdy1sYW5ndWFnZS9cblx0Ly8gXCJub25lXCI6IFwiUGxhaW4gdGV4dFwiLCAvLyBOT1RFOiBPYnNpZGlhbiB1c2VzIHRoaXMgZm9yIGNvZGVibG9ja3Mgd2l0aG91dCBsYW5ndWFnZSBuYW1lc1xuXHRcInBsYWluXCI6IFwiUGxhaW4gdGV4dFwiLFxuXHRcInBsYWludGV4dFwiOiBcIlBsYWluIHRleHRcIixcblx0XCJ0ZXh0XCI6IFwiUGxhaW4gdGV4dFwiLFxuXHRcInR4dFwiOiBcIlBsYWluIHRleHRcIixcblx0XCJodG1sXCI6IFwiSFRNTFwiLFxuXHRcInhtbFwiOiBcIlhNTFwiLFxuXHRcInN2Z1wiOiBcIlNWR1wiLFxuXHRcIm1hdGhtbFwiOiBcIk1hdGhNTFwiLFxuXHRcInNzbWxcIjogXCJTU01MXCIsXG5cdFwicnNzXCI6IFwiUlNTXCIsXG5cdFwiY3NzXCI6IFwiQ1NTXCIsXG5cdFwiY2xpa2VcIjogXCJDLWxpa2VcIixcblx0XCJqc1wiOiBcIkphdmFTY3JpcHRcIixcblx0XCJhYmFwXCI6IFwiQUJBUFwiLFxuXHRcImFibmZcIjogXCJBQk5GXCIsXG5cdFwiYWxcIjogXCJBTFwiLFxuXHRcImFudGxyNFwiOiBcIkFOVExSNFwiLFxuXHRcImc0XCI6IFwiQU5UTFI0XCIsXG5cdFwiYXBhY2hlY29uZlwiOiBcIkFwYWNoZSBDb25maWd1cmF0aW9uXCIsXG5cdFwiYXBsXCI6IFwiQVBMXCIsXG5cdFwiYXFsXCI6IFwiQVFMXCIsXG5cdFwiaW5vXCI6IFwiQXJkdWlub1wiLFxuXHRcImFyZmZcIjogXCJBUkZGXCIsXG5cdFwiYXJtYXNtXCI6IFwiQVJNIEFzc2VtYmx5XCIsXG5cdFwiYXJtLWFzbVwiOiBcIkFSTSBBc3NlbWJseVwiLFxuXHRcImFydFwiOiBcIkFydHVyb1wiLFxuXHRcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcblx0XCJhZG9jXCI6IFwiQXNjaWlEb2NcIixcblx0XCJhc3BuZXRcIjogXCJBU1AuTkVUIChDIylcIixcblx0XCJhc202NTAyXCI6IFwiNjUwMiBBc3NlbWJseVwiLFxuXHRcImFzbWF0bWVsXCI6IFwiQXRtZWwgQVZSIEFzc2VtYmx5XCIsXG5cdFwiYXV0b2hvdGtleVwiOiBcIkF1dG9Ib3RrZXlcIixcblx0XCJhdXRvaXRcIjogXCJBdXRvSXRcIixcblx0XCJhdmlzeW50aFwiOiBcIkF2aVN5bnRoXCIsXG5cdFwiYXZzXCI6IFwiQXZpU3ludGhcIixcblx0XCJhdnJvLWlkbFwiOiBcIkF2cm8gSURMXCIsXG5cdFwiYXZkbFwiOiBcIkF2cm8gSURMXCIsXG5cdFwiYXdrXCI6IFwiQVdLXCIsXG5cdFwiZ2F3a1wiOiBcIkdBV0tcIixcblx0XCJzaFwiOiBcIlNoZWxsXCIsXG5cdFwiYmFzaWNcIjogXCJCQVNJQ1wiLFxuXHRcImJiY29kZVwiOiBcIkJCY29kZVwiLFxuXHRcImJialwiOiBcIkJCalwiLFxuXHRcImJuZlwiOiBcIkJORlwiLFxuXHRcInJibmZcIjogXCJSQk5GXCIsXG5cdFwiYnFuXCI6IFwiQlFOXCIsXG5cdFwiYnNsXCI6IFwiQlNMICgxQzpFbnRlcnByaXNlKVwiLFxuXHRcIm9zY3JpcHRcIjogXCJPbmVTY3JpcHRcIixcblx0XCJjc2hhcnBcIjogXCJDI1wiLFxuXHRcImNzXCI6IFwiQyNcIixcblx0XCJkb3RuZXRcIjogXCJDI1wiLFxuXHRcImNwcFwiOiBcIkMrK1wiLFxuXHRcImNmc2NyaXB0XCI6IFwiQ0ZTY3JpcHRcIixcblx0XCJjZmNcIjogXCJDRlNjcmlwdFwiLFxuXHRcImNpbFwiOiBcIkNJTFwiLFxuXHRcImNpbGtjXCI6IFwiQ2lsay9DXCIsXG5cdFwiY2lsay1jXCI6IFwiQ2lsay9DXCIsXG5cdFwiY2lsa2NwcFwiOiBcIkNpbGsvQysrXCIsXG5cdFwiY2lsay1jcHBcIjogXCJDaWxrL0MrK1wiLFxuXHRcImNpbGtcIjogXCJDaWxrL0MrK1wiLFxuXHRcImNtYWtlXCI6IFwiQ01ha2VcIixcblx0XCJjb2JvbFwiOiBcIkNPQk9MXCIsXG5cdFwiY29mZmVlXCI6IFwiQ29mZmVlU2NyaXB0XCIsXG5cdFwiY29uY1wiOiBcIkNvbmN1cm5hc1wiLFxuXHRcImNzcFwiOiBcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCIsXG5cdFwiY3NzLWV4dHJhc1wiOiBcIkNTUyBFeHRyYXNcIixcblx0XCJjc3ZcIjogXCJDU1ZcIixcblx0XCJjdWVcIjogXCJDVUVcIixcblx0XCJkYXRhd2VhdmVcIjogXCJEYXRhV2VhdmVcIixcblx0XCJkYXhcIjogXCJEQVhcIixcblx0XCJkamFuZ29cIjogXCJEamFuZ28vSmluamEyXCIsXG5cdFwiamluamEyXCI6IFwiRGphbmdvL0ppbmphMlwiLFxuXHRcImRucy16b25lLWZpbGVcIjogXCJETlMgem9uZSBmaWxlXCIsXG5cdFwiZG5zLXpvbmVcIjogXCJETlMgem9uZSBmaWxlXCIsXG5cdFwiZG9ja2VyZmlsZVwiOiBcIkRvY2tlclwiLFxuXHRcImRvdFwiOiBcIkRPVCAoR3JhcGh2aXopXCIsXG5cdFwiZ3ZcIjogXCJET1QgKEdyYXBodml6KVwiLFxuXHRcImVibmZcIjogXCJFQk5GXCIsXG5cdFwiZWRpdG9yY29uZmlnXCI6IFwiRWRpdG9yQ29uZmlnXCIsXG5cdFwiZWpzXCI6IFwiRUpTXCIsXG5cdFwiZXRsdWFcIjogXCJFbWJlZGRlZCBMdWEgdGVtcGxhdGluZ1wiLFxuXHRcImVyYlwiOiBcIkVSQlwiLFxuXHRcImV4Y2VsLWZvcm11bGFcIjogXCJFeGNlbCBGb3JtdWxhXCIsXG5cdFwieGxzeFwiOiBcIkV4Y2VsIEZvcm11bGFcIixcblx0XCJ4bHNcIjogXCJFeGNlbCBGb3JtdWxhXCIsXG5cdFwiZnNoYXJwXCI6IFwiRiNcIixcblx0XCJmaXJlc3RvcmUtc2VjdXJpdHktcnVsZXNcIjogXCJGaXJlc3RvcmUgc2VjdXJpdHkgcnVsZXNcIixcblx0XCJmdGxcIjogXCJGcmVlTWFya2VyIFRlbXBsYXRlIExhbmd1YWdlXCIsXG5cdFwiZ21sXCI6IFwiR2FtZU1ha2VyIExhbmd1YWdlXCIsXG5cdFwiZ2FtZW1ha2VybGFuZ3VhZ2VcIjogXCJHYW1lTWFrZXIgTGFuZ3VhZ2VcIixcblx0XCJnYXBcIjogXCJHQVAgKENBUylcIixcblx0XCJnY29kZVwiOiBcIkctY29kZVwiLFxuXHRcImdkc2NyaXB0XCI6IFwiR0RTY3JpcHRcIixcblx0XCJnZWRjb21cIjogXCJHRURDT01cIixcblx0XCJnZXR0ZXh0XCI6IFwiZ2V0dGV4dFwiLFxuXHRcInBvXCI6IFwiZ2V0dGV4dFwiLFxuXHRcImdsc2xcIjogXCJHTFNMXCIsXG5cdFwiZ25cIjogXCJHTlwiLFxuXHRcImduaVwiOiBcIkdOXCIsXG5cdFwibGlua2VyLXNjcmlwdFwiOiBcIkdOVSBMaW5rZXIgU2NyaXB0XCIsXG5cdFwibGRcIjogXCJHTlUgTGlua2VyIFNjcmlwdFwiLFxuXHRcImdvLW1vZHVsZVwiOiBcIkdvIG1vZHVsZVwiLFxuXHRcImdvLW1vZFwiOiBcIkdvIG1vZHVsZVwiLFxuXHRcImdyYXBocWxcIjogXCJHcmFwaFFMXCIsXG5cdFwiaGJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuXHRcImhzXCI6IFwiSGFza2VsbFwiLFxuXHRcImhjbFwiOiBcIkhDTFwiLFxuXHRcImhsc2xcIjogXCJITFNMXCIsXG5cdFwiaHR0cFwiOiBcIkhUVFBcIixcblx0XCJocGtwXCI6IFwiSFRUUCBQdWJsaWMtS2V5LVBpbnNcIixcblx0XCJoc3RzXCI6IFwiSFRUUCBTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5XCIsXG5cdFwiaWNoaWdvamFtXCI6IFwiSWNoaWdvSmFtXCIsXG5cdFwiaWN1LW1lc3NhZ2UtZm9ybWF0XCI6IFwiSUNVIE1lc3NhZ2UgRm9ybWF0XCIsXG5cdFwiaWRyXCI6IFwiSWRyaXNcIixcblx0XCJpZ25vcmVcIjogXCIuaWdub3JlXCIsXG5cdFwiZ2l0aWdub3JlXCI6IFwiLmdpdGlnbm9yZVwiLFxuXHRcImhnaWdub3JlXCI6IFwiLmhnaWdub3JlXCIsXG5cdFwibnBtaWdub3JlXCI6IFwiLm5wbWlnbm9yZVwiLFxuXHRcImluZm9ybTdcIjogXCJJbmZvcm0gN1wiLFxuXHRcImphdmFkb2NcIjogXCJKYXZhRG9jXCIsXG5cdFwiamF2YWRvY2xpa2VcIjogXCJKYXZhRG9jLWxpa2VcIixcblx0XCJqYXZhc3RhY2t0cmFjZVwiOiBcIkphdmEgc3RhY2sgdHJhY2VcIixcblx0XCJqcVwiOiBcIkpRXCIsXG5cdFwianNkb2NcIjogXCJKU0RvY1wiLFxuXHRcImpzLWV4dHJhc1wiOiBcIkpTIEV4dHJhc1wiLFxuXHRcImpzb25cIjogXCJKU09OXCIsXG5cdFwid2VibWFuaWZlc3RcIjogXCJXZWIgQXBwIE1hbmlmZXN0XCIsXG5cdFwianNvbjVcIjogXCJKU09ONVwiLFxuXHRcImpzb25wXCI6IFwiSlNPTlBcIixcblx0XCJqc3N0YWNrdHJhY2VcIjogXCJKUyBzdGFjayB0cmFjZVwiLFxuXHRcImpzLXRlbXBsYXRlc1wiOiBcIkpTIFRlbXBsYXRlc1wiLFxuXHRcImtlZXBhbGl2ZWRcIjogXCJLZWVwYWxpdmVkIENvbmZpZ3VyZVwiLFxuXHRcImt0c1wiOiBcIktvdGxpbiBTY3JpcHRcIixcblx0XCJrdFwiOiBcIktvdGxpblwiLFxuXHRcImt1bWlyXCI6IFwiS3VNaXIgKFx1MDQxQVx1MDQ0M1x1MDQxQ1x1MDQzOFx1MDQ0MClcIixcblx0XCJrdW1cIjogXCJLdU1pciAoXHUwNDFBXHUwNDQzXHUwNDFDXHUwNDM4XHUwNDQwKVwiLFxuXHRcImxhdGV4XCI6IFwiTGFUZVhcIixcblx0XCJ0ZXhcIjogXCJUZVhcIixcblx0XCJjb250ZXh0XCI6IFwiQ29uVGVYdFwiLFxuXHRcImxpbHlwb25kXCI6IFwiTGlseVBvbmRcIixcblx0XCJseVwiOiBcIkxpbHlQb25kXCIsXG5cdFwiZW1hY3NcIjogXCJMaXNwXCIsXG5cdFwiZWxpc3BcIjogXCJMaXNwXCIsXG5cdFwiZW1hY3MtbGlzcFwiOiBcIkxpc3BcIixcblx0XCJsbHZtXCI6IFwiTExWTSBJUlwiLFxuXHRcImxvZ1wiOiBcIkxvZyBmaWxlXCIsXG5cdFwibG9sY29kZVwiOiBcIkxPTENPREVcIixcblx0XCJtYWdtYVwiOiBcIk1hZ21hIChDQVMpXCIsXG5cdFwibWRcIjogXCJNYXJrZG93blwiLFxuXHRcIm1hcmt1cC10ZW1wbGF0aW5nXCI6IFwiTWFya3VwIHRlbXBsYXRpbmdcIixcblx0XCJtYXRsYWJcIjogXCJNQVRMQUJcIixcblx0XCJtYXhzY3JpcHRcIjogXCJNQVhTY3JpcHRcIixcblx0XCJtZWxcIjogXCJNRUxcIixcblx0XCJtZXRhZm9udFwiOiBcIk1FVEFGT05UXCIsXG5cdFwibW9uZ29kYlwiOiBcIk1vbmdvREJcIixcblx0XCJtb29uXCI6IFwiTW9vblNjcmlwdFwiLFxuXHRcIm4xcWxcIjogXCJOMVFMXCIsXG5cdFwibjRqc1wiOiBcIk40SlNcIixcblx0XCJuNGpzZFwiOiBcIk40SlNcIixcblx0XCJuYW5kMnRldHJpcy1oZGxcIjogXCJOYW5kIFRvIFRldHJpcyBIRExcIixcblx0XCJuYW5pc2NyaXB0XCI6IFwiTmFuaW5vdmVsIFNjcmlwdFwiLFxuXHRcIm5hbmlcIjogXCJOYW5pbm92ZWwgU2NyaXB0XCIsXG5cdFwibmFzbVwiOiBcIk5BU01cIixcblx0XCJuZW9uXCI6IFwiTkVPTlwiLFxuXHRcIm5naW54XCI6IFwibmdpbnhcIixcblx0XCJuc2lzXCI6IFwiTlNJU1wiLFxuXHRcIm9iamVjdGl2ZWNcIjogXCJPYmplY3RpdmUtQ1wiLFxuXHRcIm9iamNcIjogXCJPYmplY3RpdmUtQ1wiLFxuXHRcIm9jYW1sXCI6IFwiT0NhbWxcIixcblx0XCJvcGVuY2xcIjogXCJPcGVuQ0xcIixcblx0XCJvcGVucWFzbVwiOiBcIk9wZW5RYXNtXCIsXG5cdFwicWFzbVwiOiBcIk9wZW5RYXNtXCIsXG5cdFwicGFyaWdwXCI6IFwiUEFSSS9HUFwiLFxuXHRcIm9iamVjdHBhc2NhbFwiOiBcIk9iamVjdCBQYXNjYWxcIixcblx0XCJwc2xcIjogXCJQQVRST0wgU2NyaXB0aW5nIExhbmd1YWdlXCIsXG5cdFwicGNheGlzXCI6IFwiUEMtQXhpc1wiLFxuXHRcInB4XCI6IFwiUEMtQXhpc1wiLFxuXHRcInBlb3BsZWNvZGVcIjogXCJQZW9wbGVDb2RlXCIsXG5cdFwicGNvZGVcIjogXCJQZW9wbGVDb2RlXCIsXG5cdFwicGhwXCI6IFwiUEhQXCIsXG5cdFwicGhwZG9jXCI6IFwiUEhQRG9jXCIsXG5cdFwicGhwLWV4dHJhc1wiOiBcIlBIUCBFeHRyYXNcIixcblx0XCJwbGFudC11bWxcIjogXCJQbGFudFVNTFwiLFxuXHRcInBsYW50dW1sXCI6IFwiUGxhbnRVTUxcIixcblx0XCJwbHNxbFwiOiBcIlBML1NRTFwiLFxuXHRcInBvd2VycXVlcnlcIjogXCJQb3dlclF1ZXJ5XCIsXG5cdFwicHFcIjogXCJQb3dlclF1ZXJ5XCIsXG5cdFwibXNjcmlwdFwiOiBcIlBvd2VyUXVlcnlcIixcblx0XCJwb3dlcnNoZWxsXCI6IFwiUG93ZXJTaGVsbFwiLFxuXHRcInByb21xbFwiOiBcIlByb21RTFwiLFxuXHRcInByb3BlcnRpZXNcIjogXCIucHJvcGVydGllc1wiLFxuXHRcInByb3RvYnVmXCI6IFwiUHJvdG9jb2wgQnVmZmVyc1wiLFxuXHRcInB1cmViYXNpY1wiOiBcIlB1cmVCYXNpY1wiLFxuXHRcInBiZmFzbVwiOiBcIlB1cmVCYXNpY1wiLFxuXHRcInB1cnNcIjogXCJQdXJlU2NyaXB0XCIsXG5cdFwicHlcIjogXCJQeXRob25cIixcblx0XCJxc2hhcnBcIjogXCJRI1wiLFxuXHRcInFzXCI6IFwiUSNcIixcblx0XCJxXCI6IFwiUSAoa2RiKyBkYXRhYmFzZSlcIixcblx0XCJxbWxcIjogXCJRTUxcIixcblx0XCJya3RcIjogXCJSYWNrZXRcIixcblx0XCJjc2h0bWxcIjogXCJSYXpvciBDI1wiLFxuXHRcInJhem9yXCI6IFwiUmF6b3IgQyNcIixcblx0XCJqc3hcIjogXCJSZWFjdCBKU1hcIixcblx0XCJ0c3hcIjogXCJSZWFjdCBUU1hcIixcblx0XCJyZW5weVwiOiBcIlJlbidweVwiLFxuXHRcInJweVwiOiBcIlJlbidweVwiLFxuXHRcInJlc1wiOiBcIlJlU2NyaXB0XCIsXG5cdFwicmVzdFwiOiBcInJlU1QgKHJlU3RydWN0dXJlZFRleHQpXCIsXG5cdFwicm9ib3RmcmFtZXdvcmtcIjogXCJSb2JvdCBGcmFtZXdvcmtcIixcblx0XCJyb2JvdFwiOiBcIlJvYm90IEZyYW1ld29ya1wiLFxuXHRcInJiXCI6IFwiUnVieVwiLFxuXHRcInNhc1wiOiBcIlNBU1wiLFxuXHRcInNhc3NcIjogXCJTYXNzIChTYXNzKVwiLFxuXHRcInNjc3NcIjogXCJTYXNzIChTQ1NTKVwiLFxuXHRcInNoZWxsLXNlc3Npb25cIjogXCJTaGVsbCBzZXNzaW9uXCIsXG5cdFwic2gtc2Vzc2lvblwiOiBcIlNoZWxsIHNlc3Npb25cIixcblx0XCJzaGVsbHNlc3Npb25cIjogXCJTaGVsbCBzZXNzaW9uXCIsXG5cdFwic21sXCI6IFwiU01MXCIsXG5cdFwic21sbmpcIjogXCJTTUwvTkpcIixcblx0XCJzb2xpZGl0eVwiOiBcIlNvbGlkaXR5IChFdGhlcmV1bSlcIixcblx0XCJzb2xcIjogXCJTb2xpZGl0eSAoRXRoZXJldW0pXCIsXG5cdFwic29sdXRpb24tZmlsZVwiOiBcIlNvbHV0aW9uIGZpbGVcIixcblx0XCJzbG5cIjogXCJTb2x1dGlvbiBmaWxlXCIsXG5cdFwic295XCI6IFwiU295IChDbG9zdXJlIFRlbXBsYXRlKVwiLFxuXHRcInNwYXJxbFwiOiBcIlNQQVJRTFwiLFxuXHRcInJxXCI6IFwiU1BBUlFMXCIsXG5cdFwic3BsdW5rLXNwbFwiOiBcIlNwbHVuayBTUExcIixcblx0XCJzcWZcIjogXCJTUUY6IFN0YXR1cyBRdW8gRnVuY3Rpb24gKEFybWEgMylcIixcblx0XCJzcWxcIjogXCJTUUxcIixcblx0XCJzdGF0YVwiOiBcIlN0YXRhIEFkb1wiLFxuXHRcImllY3N0XCI6IFwiU3RydWN0dXJlZCBUZXh0IChJRUMgNjExMzEtMylcIixcblx0XCJzdXBlcmNvbGxpZGVyXCI6IFwiU3VwZXJDb2xsaWRlclwiLFxuXHRcInNjbGFuZ1wiOiBcIlN1cGVyQ29sbGlkZXJcIixcblx0XCJzeXN0ZW1kXCI6IFwiU3lzdGVtZCBjb25maWd1cmF0aW9uIGZpbGVcIixcblx0XCJ0NC10ZW1wbGF0aW5nXCI6IFwiVDQgdGVtcGxhdGluZ1wiLFxuXHRcInQ0LWNzXCI6IFwiVDQgVGV4dCBUZW1wbGF0ZXMgKEMjKVwiLFxuXHRcInQ0XCI6IFwiVDQgVGV4dCBUZW1wbGF0ZXMgKEMjKVwiLFxuXHRcInQ0LXZiXCI6IFwiVDQgVGV4dCBUZW1wbGF0ZXMgKFZCKVwiLFxuXHRcInRhcFwiOiBcIlRBUFwiLFxuXHRcInR0MlwiOiBcIlRlbXBsYXRlIFRvb2xraXQgMlwiLFxuXHRcInRvbWxcIjogXCJUT01MXCIsXG5cdFwidHJpY2tsZVwiOiBcInRyaWNrbGVcIixcblx0XCJ0cm95XCI6IFwidHJveVwiLFxuXHRcInRyaWdcIjogXCJUcmlHXCIsXG5cdFwidHNcIjogXCJUeXBlU2NyaXB0XCIsXG5cdFwidHNjb25maWdcIjogXCJUU0NvbmZpZ1wiLFxuXHRcInVzY3JpcHRcIjogXCJVbnJlYWxTY3JpcHRcIixcblx0XCJ1Y1wiOiBcIlVucmVhbFNjcmlwdFwiLFxuXHRcInVvcmF6b3JcIjogXCJVTyBSYXpvciBTY3JpcHRcIixcblx0XCJ1cmlcIjogXCJVUklcIixcblx0XCJ1cmxcIjogXCJVUkxcIixcblx0XCJ2Ym5ldFwiOiBcIlZCLk5ldFwiLFxuXHRcInZoZGxcIjogXCJWSERMXCIsXG5cdFwidmltXCI6IFwidmltXCIsXG5cdFwidmlzdWFsLWJhc2ljXCI6IFwiVmlzdWFsIEJhc2ljXCIsXG5cdFwidmJhXCI6IFwiVkJBXCIsXG5cdFwidmJcIjogXCJWaXN1YWwgQmFzaWNcIixcblx0XCJ3YXNtXCI6IFwiV2ViQXNzZW1ibHlcIixcblx0XCJ3ZWItaWRsXCI6IFwiV2ViIElETFwiLFxuXHRcIndlYmlkbFwiOiBcIldlYiBJRExcIixcblx0XCJ3Z3NsXCI6IFwiV0dTTFwiLFxuXHRcIndpa2lcIjogXCJXaWtpIG1hcmt1cFwiLFxuXHRcIndvbGZyYW1cIjogXCJXb2xmcmFtIGxhbmd1YWdlXCIsXG5cdFwibmJcIjogXCJNYXRoZW1hdGljYSBOb3RlYm9va1wiLFxuXHRcIndsXCI6IFwiV29sZnJhbSBsYW5ndWFnZVwiLFxuXHRcInhlb3JhY3ViZVwiOiBcIlhlb3JhQ3ViZVwiLFxuXHRcInhtbC1kb2NcIjogXCJYTUwgZG9jICgubmV0KVwiLFxuXHRcInhvam9cIjogXCJYb2pvIChSRUFMYmFzaWMpXCIsXG5cdFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG5cdFwieWFtbFwiOiBcIllBTUxcIixcblx0XCJ5bWxcIjogXCJZQU1MXCIsXG5cdFwieWFuZ1wiOiBcIllBTkdcIixcbn07IFxuY29uc3QgTUFOVUFMX1BSSVNNX0xBTkdVQUdFUzoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7IC8vIE1hbnVhbGx5IGdlbmVyYXRlZCBsaXN0IGZyb20gaHR0cHM6Ly9wcmlzbWpzLmNvbS8gIC0gIDI5NyBsYW5ndWFnZXNcblx0XCJjc3NcIjpcIkNTU1wiLFxuXHRcImNsaWtlXCI6XCJDLWxpa2VcIixcblx0XCJqYXZhc2NyaXB0XCI6XCJKYXZhU2NyaXB0XCIsXG5cdFwianNcIjpcIkphdmFTY3JpcHRcIixcblx0XCJhYmFwXCI6XCJBQkFQXCIsXG5cdFwiYWJuZlwiOlwiQUJORlwiLFxuXHRcImFjdGlvbnNjcmlwdFwiOlwiQWN0aW9uU2NyaXB0XCIsXG5cdFwiYWRhXCI6XCJBZGFcIixcblx0XCJhZ2RhXCI6XCJBZ2RhXCIsXG5cdFwiYWxcIjpcIkFMXCIsXG5cdFwiYW50bHI0XCI6XCJBTlRMUjRcIixcblx0XCJnNFwiOlwiQU5UTFI0XCIsXG5cdFwiYXBhY2hlY29uZlwiOlwiQXBhY2hlIENvbmZpZ3VyYXRpb25cIixcblx0XCJhcGV4XCI6XCJBcGV4XCIsXG5cdFwiYXBsXCI6XCJBUExcIixcblx0XCJhcHBsZXNjcmlwdFwiOlwiQXBwbGVTY3JpcHRcIixcblx0XCJhcWxcIjpcIkFRTFwiLFxuXHRcImFyZHVpbm9cIjpcIkFyZHVpbm9cIixcblx0XCJpbm9cIjpcIkFyZHVpbm9cIixcblx0XCJhcmZmXCI6XCJBUkZGXCIsXG5cdFwiYXJtYXNtXCI6XCJBUk0gQXNzZW1ibHlcIixcblx0XCJhcm0tYXNtXCI6XCJBUk0gQXNzZW1ibHlcIixcblx0XCJhcnR1cm9cIjpcIkFydHVyb1wiLFxuXHRcImFydFwiOlwiQXJ0dXJvXCIsXG5cdFwiYXNjaWlkb2NcIjpcIkFzY2lpRG9jXCIsXG5cdFwiYWRvY1wiOlwiQXNjaWlEb2NcIixcblx0XCJhc3BuZXRcIjpcIkFTUC5ORVQgKEMjKVwiLFxuXHRcImFzbTY1MDJcIjpcIjY1MDIgQXNzZW1ibHlcIixcblx0XCJhc21hdG1lbFwiOlwiQXRtZWwgQVZSIEFzc2VtYmx5XCIsXG5cdFwiYXV0b2hvdGtleVwiOlwiQXV0b0hvdGtleVwiLFxuXHRcImF1dG9pdFwiOlwiQXV0b0l0XCIsXG5cdFwiYXZpc3ludGhcIjpcIkF2aVN5bnRoXCIsXG5cdFwiYXZzXCI6XCJBdmlTeW50aFwiLFxuXHRcImF2cm8taWRsXCI6XCJBdnJvIElETFwiLFxuXHRcImF2ZGxcIjpcIkF2cm8gSURMXCIsXG5cdFwiYXdrXCI6XCJBV0tcIixcblx0XCJnYXdrXCI6XCJHQVdLXCIsXG5cdFwiYmFzaFwiOlwiQmFzaFwiLFxuXHRcInNoXCI6XCJTaGVsbFwiLFxuXHRcInNoZWxsXCI6XCJTaGVsbFwiLFxuXHRcImJhc2ljXCI6XCJCQVNJQ1wiLFxuXHRcImJhdGNoXCI6XCJCYXRjaFwiLFxuXHRcImJiY29kZVwiOlwiQkJjb2RlXCIsXG5cdFwic2hvcnRjb2RlXCI6XCJCQmNvZGVcIixcblx0XCJiYmpcIjpcIkJCalwiLFxuXHRcImJpcmJcIjpcIkJpcmJcIixcblx0XCJiaXNvblwiOlwiQmlzb25cIixcblx0XCJibmZcIjpcIkJORlwiLFxuXHRcInJibmZcIjpcIkJORlwiLFxuXHRcImJxblwiOlwiQlFOXCIsXG5cdFwiYnJhaW5mdWNrXCI6XCJCcmFpbmZ1Y2tcIixcblx0XCJicmlnaHRzY3JpcHRcIjpcIkJyaWdodFNjcmlwdFwiLFxuXHRcImJyb1wiOlwiQnJvXCIsXG5cdFwiYnNsXCI6XCJCU0wgKDFDKVwiLFxuXHRcIm9zY3JpcHRcIjpcIkJTTCAoMUMpXCIsXG5cdFwiY1wiOlwiQ1wiLFxuXHRcImNzaGFycFwiOlwiQyNcIixcblx0XCJjc1wiOlwiQyNcIixcblx0XCJkb3RuZXRcIjpcIkMjXCIsXG5cdFwiY3BwXCI6XCJDKytcIixcblx0XCJjZnNjcmlwdFwiOlwiQ0ZTY3JpcHRcIixcblx0XCJjZmNcIjpcIkNGU2NyaXB0XCIsXG5cdFwiY2hhaXNjcmlwdFwiOlwiQ2hhaVNjcmlwdFwiLFxuXHRcImNpbFwiOlwiQ0lMXCIsXG5cdFwiY2lsa2NcIjpcIkNpbGsvQ1wiLFxuXHRcImNpbGstY1wiOlwiQ2lsay9DXCIsXG5cdFwiY2lsa2NwcFwiOlwiQ2lsay9DKytcIixcblx0XCJjaWxrLWNwcFwiOlwiQ2lsay9DKytcIixcblx0XCJjaWxrXCI6XCJDaWxrL0MrK1wiLFxuXHRcImNsb2p1cmVcIjpcIkNsb2p1cmVcIixcblx0XCJjbWFrZVwiOlwiQ01ha2VcIixcblx0XCJjb2JvbFwiOlwiQ09CT0xcIixcblx0XCJjb2ZmZWVzY3JpcHRcIjpcIkNvZmZlZVNjcmlwdFwiLFxuXHRcImNvZmZlZVwiOlwiQ29mZmVlU2NyaXB0XCIsXG5cdFwiY29uY3VybmFzXCI6XCJDb25jdXJuYXNcIixcblx0XCJjb25jXCI6XCJDb25jdXJuYXNcIixcblx0XCJjc3BcIjpcIkNvbnRlbnQtU2VjdXJpdHktUG9saWN5XCIsXG5cdFwiY29va2xhbmdcIjpcIkNvb2tsYW5nXCIsXG5cdFwiY29xXCI6XCJDb3FcIixcblx0XCJjcnlzdGFsXCI6XCJDcnlzdGFsXCIsXG5cdFwiY3NzLWV4dHJhc1wiOlwiQ1NTIEV4dHJhc1wiLFxuXHRcImNzdlwiOlwiQ1NWXCIsXG5cdFwiY3VlXCI6XCJDVUVcIixcblx0XCJjeXBoZXJcIjpcIkN5cGhlclwiLFxuXHRcImRcIjpcIkRcIixcblx0XCJkYXJ0XCI6XCJEYXJ0XCIsXG5cdFwiZGF0YXdlYXZlXCI6XCJEYXRhV2VhdmVcIixcblx0XCJkYXhcIjpcIkRBWFwiLFxuXHRcImRoYWxsXCI6XCJEaGFsbFwiLFxuXHRcImRpZmZcIjpcIkRpZmZcIixcblx0XCJkamFuZ29cIjpcIkRqYW5nby9KaW5qYTJcIixcblx0XCJqaW5qYTJcIjpcIkRqYW5nby9KaW5qYTJcIixcblx0XCJkbnMtem9uZS1maWxlXCI6XCJETlMgem9uZSBmaWxlXCIsXG5cdFwiZG5zLXpvbmVcIjpcIkROUyB6b25lIGZpbGVcIixcblx0XCJkb2NrZXJcIjpcIkRvY2tlclwiLFxuXHRcImRvY2tlcmZpbGVcIjpcIkRvY2tlclwiLFxuXHRcImRvdFwiOlwiRE9UIChHcmFwaHZpeilcIixcblx0XCJndlwiOlwiRE9UIChHcmFwaHZpeilcIixcblx0XCJlYm5mXCI6XCJFQk5GXCIsXG5cdFwiZWRpdG9yY29uZmlnXCI6XCJFZGl0b3JDb25maWdcIixcblx0XCJlaWZmZWxcIjpcIkVpZmZlbFwiLFxuXHRcImVqc1wiOlwiRUpTXCIsXG5cdFwiZXRhXCI6XCJFSlNcIixcblx0XCJlbGl4aXJcIjpcIkVsaXhpclwiLFxuXHRcImVsbVwiOlwiRWxtXCIsXG5cdFwiZXRsdWFcIjpcIkVtYmVkZGVkIEx1YSB0ZW1wbGF0aW5nXCIsXG5cdFwiZXJiXCI6XCJFUkJcIixcblx0XCJlcmxhbmdcIjpcIkVybGFuZ1wiLFxuXHRcImV4Y2VsLWZvcm11bGFcIjpcIkV4Y2VsIEZvcm11bGFcIixcblx0XCJ4bHN4XCI6XCJFeGNlbCBGb3JtdWxhXCIsXG5cdFwieGxzXCI6XCJFeGNlbCBGb3JtdWxhXCIsXG5cdFwiZnNoYXJwXCI6XCJGI1wiLFxuXHRcImZhY3RvclwiOlwiRmFjdG9yXCIsXG5cdFwiZmFsc2VcIjpcIkZhbHNlXCIsXG5cdFwiZmlyZXN0b3JlLXNlY3VyaXR5LXJ1bGVzXCI6XCJGaXJlc3RvcmUgc2VjdXJpdHkgcnVsZXNcIixcblx0XCJmbG93XCI6XCJGbG93XCIsXG5cdFwiZm9ydHJhblwiOlwiRm9ydHJhblwiLFxuXHRcImZ0bFwiOlwiRnJlZU1hcmtlciBUZW1wbGF0ZSBMYW5ndWFnZVwiLFxuXHRcImdtbFwiOlwiR2FtZU1ha2VyIExhbmd1YWdlXCIsXG5cdFwiZ2FtZW1ha2VybGFuZ3VhZ2VcIjpcIkdhbWVNYWtlciBMYW5ndWFnZVwiLFxuXHRcImdhcFwiOlwiR0FQIChDQVMpXCIsXG5cdFwiZ2NvZGVcIjpcIkctY29kZVwiLFxuXHRcImdkc2NyaXB0XCI6XCJHRFNjcmlwdFwiLFxuXHRcImdlZGNvbVwiOlwiR0VEQ09NXCIsXG5cdFwiZ2V0dGV4dFwiOlwiZ2V0dGV4dFwiLFxuXHRcInBvXCI6XCJnZXR0ZXh0XCIsXG5cdFwiZ2hlcmtpblwiOlwiR2hlcmtpblwiLFxuXHRcImdpdFwiOlwiR2l0XCIsXG5cdFwiZ2xzbFwiOlwiR0xTTFwiLFxuXHRcImduXCI6XCJHTlwiLFxuXHRcImduaVwiOlwiR05cIixcblx0XCJsaW5rZXItc2NyaXB0XCI6XCJHTlUgTGlua2VyIFNjcmlwdFwiLFxuXHRcImxkXCI6XCJHTlUgTGlua2VyIFNjcmlwdFwiLFxuXHRcImdvXCI6XCJHb1wiLFxuXHRcImdvLW1vZHVsZVwiOlwiR28gbW9kdWxlXCIsXG5cdFwiZ28tbW9kXCI6XCJHbyBtb2R1bGVcIixcblx0XCJncmFkbGVcIjpcIkdyYWRsZVwiLFxuXHRcImdyYXBocWxcIjpcIkdyYXBoUUxcIixcblx0XCJncm9vdnlcIjpcIkdyb292eVwiLFxuXHRcImhhbWxcIjpcIkhhbWxcIixcblx0XCJoYW5kbGViYXJzXCI6XCJIYW5kbGViYXJzXCIsXG5cdFwiaGJzXCI6XCJIYW5kbGViYXJzXCIsXG5cdFwibXVzdGFjaGVcIjpcIkhhbmRsZWJhcnNcIixcblx0XCJoYXNrZWxsXCI6XCJIYXNrZWxsXCIsXG5cdFwiaHNcIjpcIkhhc2tlbGxcIixcblx0XCJoYXhlXCI6XCJIYXhlXCIsXG5cdFwiaGNsXCI6XCJIQ0xcIixcblx0XCJobHNsXCI6XCJITFNMXCIsXG5cdFwiaG9vblwiOlwiSG9vblwiLFxuXHRcImh0dHBcIjpcIkhUVFBcIixcblx0XCJocGtwXCI6XCJIVFRQIFB1YmxpYy1LZXktUGluc1wiLFxuXHRcImhzdHNcIjpcIkhUVFAgU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eVwiLFxuXHRcImljaGlnb2phbVwiOlwiSWNoaWdvSmFtXCIsXG5cdFwiaWNvblwiOlwiSWNvblwiLFxuXHRcImljdS1tZXNzYWdlLWZvcm1hdFwiOlwiSUNVIE1lc3NhZ2UgRm9ybWF0XCIsXG5cdFwiaWRyaXNcIjpcIklkcmlzXCIsXG5cdFwiaWRyXCI6XCJJZHJpc1wiLFxuXHRcImluZm9ybTdcIjpcIkluZm9ybSA3XCIsXG5cdFwiaW5pXCI6XCJJbmlcIixcblx0XCJpb1wiOlwiSW9cIixcblx0XCJqXCI6XCJKXCIsXG5cdFwiamF2YVwiOlwiSmF2YVwiLFxuXHRcImphdmFkb2NcIjpcIkphdmFEb2NcIixcblx0XCJqYXZhZG9jbGlrZVwiOlwiSmF2YURvYy1saWtlXCIsXG5cdFwiamF2YXN0YWNrdHJhY2VcIjpcIkphdmEgc3RhY2sgdHJhY2VcIixcblx0XCJqZXhsXCI6XCJKZXhsXCIsXG5cdFwiam9saWVcIjpcIkpvbGllXCIsXG5cdFwianFcIjpcIkpRXCIsXG5cdFwianNkb2NcIjpcIkpTRG9jXCIsXG5cdFwianMtZXh0cmFzXCI6XCJKUyBFeHRyYXNcIixcblx0XCJqc29uXCI6XCJKU09OXCIsXG5cdFwid2VibWFuaWZlc3RcIjpcIkpTT05cIixcblx0XCJqc29uNVwiOlwiSlNPTjVcIixcblx0XCJqc29ucFwiOlwiSlNPTlBcIixcblx0XCJqc3N0YWNrdHJhY2VcIjpcIkpTIHN0YWNrIHRyYWNlXCIsXG5cdFwianMtdGVtcGxhdGVzXCI6XCJKUyBUZW1wbGF0ZXNcIixcblx0XCJqdWxpYVwiOlwiSnVsaWFcIixcblx0XCJrZWVwYWxpdmVkXCI6XCJLZWVwYWxpdmVkIENvbmZpZ3VyZVwiLFxuXHRcImtleW1hblwiOlwiS2V5bWFuXCIsXG5cdFwia290bGluXCI6XCJLb3RsaW5cIixcblx0XCJrdFwiOlwiS290bGluXCIsXG5cdFwia3RzXCI6XCJLb3RsaW5cIixcblx0XCJrdW1pclwiOlwiS3VNaXIgKFx1MDQxQVx1MDQ0M1x1MDQxQ1x1MDQzOFx1MDQ0MClcIixcblx0XCJrdW1cIjpcIkt1TWlyIChcdTA0MUFcdTA0NDNcdTA0MUNcdTA0MzhcdTA0NDApXCIsXG5cdFwia3VzdG9cIjpcIkt1c3RvXCIsXG5cdFwibGF0ZXhcIjpcIkxhVGVYXCIsXG5cdFwidGV4XCI6XCJMYVRlWFwiLFxuXHRcImNvbnRleHRcIjpcIkxhVGVYXCIsXG5cdFwibGF0dGVcIjpcIkxhdHRlXCIsXG5cdFwibGVzc1wiOlwiTGVzc1wiLFxuXHRcImxpbHlwb25kXCI6XCJMaWx5UG9uZFwiLFxuXHRcImx5XCI6XCJMaWx5UG9uZFwiLFxuXHRcImxpcXVpZFwiOlwiTGlxdWlkXCIsXG5cdFwibGlzcFwiOlwiTGlzcFwiLFxuXHRcImVtYWNzXCI6XCJMaXNwXCIsXG5cdFwiZWxpc3BcIjpcIkxpc3BcIixcblx0XCJlbWFjcy1saXNwXCI6XCJMaXNwXCIsXG5cdFwibGl2ZXNjcmlwdFwiOlwiTGl2ZVNjcmlwdFwiLFxuXHRcImxsdm1cIjpcIkxMVk0gSVJcIixcblx0XCJsb2dcIjpcIkxvZyBmaWxlXCIsXG5cdFwibG9sY29kZVwiOlwiTE9MQ09ERVwiLFxuXHRcImx1YVwiOlwiTHVhXCIsXG5cdFwibWFnbWFcIjpcIk1hZ21hIChDQVMpXCIsXG5cdFwibWFrZWZpbGVcIjpcIk1ha2VmaWxlXCIsXG5cdFwibWFya2Rvd25cIjpcIk1hcmtkb3duXCIsXG5cdFwibWRcIjpcIk1hcmtkb3duXCIsXG5cdFwibWFya3VwLXRlbXBsYXRpbmdcIjpcIk1hcmt1cCB0ZW1wbGF0aW5nXCIsXG5cdFwibWF0YVwiOlwiTWF0YVwiLFxuXHRcIm1hdGxhYlwiOlwiTUFUTEFCXCIsXG5cdFwibWF4c2NyaXB0XCI6XCJNQVhTY3JpcHRcIixcblx0XCJtZWxcIjpcIk1FTFwiLFxuXHRcIm1lcm1haWRcIjpcIk1lcm1haWRcIixcblx0XCJtZXRhZm9udFwiOlwiTUVUQUZPTlRcIixcblx0XCJtaXphclwiOlwiTWl6YXJcIixcblx0XCJtb25nb2RiXCI6XCJNb25nb0RCXCIsXG5cdFwibW9ua2V5XCI6XCJNb25rZXlcIixcblx0XCJtb29uc2NyaXB0XCI6XCJNb29uU2NyaXB0XCIsXG5cdFwibW9vblwiOlwiTW9vblNjcmlwdFwiLFxuXHRcIm4xcWxcIjpcIk4xUUxcIixcblx0XCJuNGpzXCI6XCJONEpTXCIsXG5cdFwibjRqc2RcIjpcIk40SlNcIixcblx0XCJuYW5kMnRldHJpcy1oZGxcIjpcIk5hbmQgVG8gVGV0cmlzIEhETFwiLFxuXHRcIm5hbmlzY3JpcHRcIjpcIk5hbmlub3ZlbCBTY3JpcHRcIixcblx0XCJuYW5pXCI6XCJOYW5pbm92ZWwgU2NyaXB0XCIsXG5cdFwibmFzbVwiOlwiTkFTTVwiLFxuXHRcIm5lb25cIjpcIk5FT05cIixcblx0XCJuZXZvZFwiOlwiTmV2b2RcIixcblx0XCJuZ2lueFwiOlwibmdpbnhcIixcblx0XCJuaW1cIjpcIk5pbVwiLFxuXHRcIm5peFwiOlwiTml4XCIsXG5cdFwibnNpc1wiOlwiTlNJU1wiLFxuXHRcIm9iamVjdGl2ZWNcIjpcIk9iamVjdGl2ZS1DXCIsXG5cdFwib2JqY1wiOlwiT2JqZWN0aXZlLUNcIixcblx0XCJvY2FtbFwiOlwiT0NhbWxcIixcblx0XCJvZGluXCI6XCJPZGluXCIsXG5cdFwib3BlbmNsXCI6XCJPcGVuQ0xcIixcblx0XCJvcGVucWFzbVwiOlwiT3BlblFhc21cIixcblx0XCJxYXNtXCI6XCJPcGVuUWFzbVwiLFxuXHRcIm96XCI6XCJPelwiLFxuXHRcInBhcmlncFwiOlwiUEFSSS9HUFwiLFxuXHRcInBhcnNlclwiOlwiUGFyc2VyXCIsXG5cdFwicGFzY2FsXCI6XCJQYXNjYWxcIixcblx0XCJwYXNjYWxpZ29cIjpcIlBhc2NhbGlnb1wiLFxuXHRcInBzbFwiOlwiUEFUUk9MIFNjcmlwdGluZyBMYW5ndWFnZVwiLFxuXHRcInBjYXhpc1wiOlwiUEMtQXhpc1wiLFxuXHRcInB4XCI6XCJQQy1BeGlzXCIsXG5cdFwicGVvcGxlY29kZVwiOlwiUGVvcGxlQ29kZVwiLFxuXHRcInBjb2RlXCI6XCJQZW9wbGVDb2RlXCIsXG5cdFwicGVybFwiOlwiUGVybFwiLFxuXHRcInBocFwiOlwiUEhQXCIsXG5cdFwicGhwZG9jXCI6XCJQSFBEb2NcIixcblx0XCJwaHAtZXh0cmFzXCI6XCJQSFAgRXh0cmFzXCIsXG5cdFwicGxhbnQtdW1sXCI6XCJQbGFudFVNTFwiLFxuXHRcInBsYW50dW1sXCI6XCJQbGFudFVNTFwiLFxuXHRcInBsc3FsXCI6XCJQTC9TUUxcIixcblx0XCJwb3dlcnF1ZXJ5XCI6XCJQb3dlclF1ZXJ5XCIsXG5cdFwicHFcIjpcIlBvd2VyUXVlcnlcIixcblx0XCJtc2NyaXB0XCI6XCJQb3dlclF1ZXJ5XCIsXG5cdFwicG93ZXJzaGVsbFwiOlwiUG93ZXJTaGVsbFwiLFxuXHRcInByb2Nlc3NpbmdcIjpcIlByb2Nlc3NpbmdcIixcblx0XCJwcm9sb2dcIjpcIlByb2xvZ1wiLFxuXHRcInByb21xbFwiOlwiUHJvbVFMXCIsXG5cdFwicHJvcGVydGllc1wiOlwiLnByb3BlcnRpZXNcIixcblx0XCJwcm90b2J1ZlwiOlwiUHJvdG9jb2wgQnVmZmVyc1wiLFxuXHRcInB1Z1wiOlwiUHVnXCIsXG5cdFwicHVwcGV0XCI6XCJQdXBwZXRcIixcblx0XCJwdXJlXCI6XCJQdXJlXCIsXG5cdFwicHVyZWJhc2ljXCI6XCJQdXJlQmFzaWNcIixcblx0XCJwYmZhc21cIjpcIlB1cmVCYXNpY1wiLFxuXHRcInB1cmVzY3JpcHRcIjpcIlB1cmVTY3JpcHRcIixcblx0XCJwdXJzXCI6XCJQdXJlU2NyaXB0XCIsXG5cdFwicHl0aG9uXCI6XCJQeXRob25cIixcblx0XCJweVwiOlwiUHl0aG9uXCIsXG5cdFwicXNoYXJwXCI6XCJRI1wiLFxuXHRcInFzXCI6XCJRI1wiLFxuXHRcInFcIjpcIlEgKGtkYisgZGF0YWJhc2UpXCIsXG5cdFwicW1sXCI6XCJRTUxcIixcblx0XCJxb3JlXCI6XCJRb3JlXCIsXG5cdFwiclwiOlwiUlwiLFxuXHRcInJhY2tldFwiOlwiUmFja2V0XCIsXG5cdFwicmt0XCI6XCJSYWNrZXRcIixcblx0XCJjc2h0bWxcIjpcIlJhem9yIEMjXCIsXG5cdFwianN4XCI6XCJSZWFjdCBKU1hcIixcblx0XCJ0c3hcIjpcIlJlYWN0IFRTWFwiLFxuXHRcInJlYXNvblwiOlwiUmVhc29uXCIsXG5cdFwicmVnZXhcIjpcIlJlZ2V4XCIsXG5cdFwicmVnb1wiOlwiUmVnb1wiLFxuXHRcInJlbnB5XCI6XCJSZW4ncHlcIixcblx0XCJycHlcIjpcIlJlbidweVwiLFxuXHRcInJlc2NyaXB0XCI6XCJSZVNjcmlwdFwiLFxuXHRcInJlc1wiOlwiUmVTY3JpcHRcIixcblx0XCJyZXN0XCI6XCJyZVNUIChyZVN0cnVjdHVyZWRUZXh0KVwiLFxuXHRcInJpcFwiOlwiUmlwXCIsXG5cdFwicm9ib2NvbmZcIjpcIlJvYm9jb25mXCIsXG5cdFwicm9ib3RmcmFtZXdvcmtcIjpcIlJvYm90IEZyYW1ld29ya1wiLFxuXHRcInJvYm90XCI6XCJSb2JvdCBGcmFtZXdvcmtcIixcblx0XCJydWJ5XCI6XCJSdWJ5XCIsXG5cdFwicmJcIjpcIlJ1YnlcIixcblx0XCJydXN0XCI6XCJSdXN0XCIsXG5cdFwic2FzXCI6XCJTQVNcIixcblx0XCJzYXNzXCI6XCJTYXNzIChTYXNzKVwiLFxuXHRcInNjc3NcIjpcIlNhc3MgKFNDU1MpXCIsXG5cdFwic2NhbGFcIjpcIlNjYWxhXCIsXG5cdFwic2NoZW1lXCI6XCJTY2hlbWVcIixcblx0XCJzaGVsbC1zZXNzaW9uXCI6XCJTaGVsbCBzZXNzaW9uXCIsXG5cdFwic2gtc2Vzc2lvblwiOlwiU2hlbGwgc2Vzc2lvblwiLFxuXHRcInNoZWxsc2Vzc2lvblwiOlwiU2hlbGwgc2Vzc2lvblwiLFxuXHRcInNtYWxpXCI6XCJTbWFsaVwiLFxuXHRcInNtYWxsdGFsa1wiOlwiU21hbGx0YWxrXCIsXG5cdFwic21hcnR5XCI6XCJTbWFydHlcIixcblx0XCJzbWxcIjpcIlNNTFwiLFxuXHRcInNtbG5qXCI6XCJTTUxcIixcblx0XCJzb2xpZGl0eVwiOlwiU29saWRpdHkgKEV0aGVyZXVtKVwiLFxuXHRcInNvbFwiOlwiU29saWRpdHkgKEV0aGVyZXVtKVwiLFxuXHRcInNvbHV0aW9uLWZpbGVcIjpcIlNvbHV0aW9uIGZpbGVcIixcblx0XCJzbG5cIjpcIlNvbHV0aW9uIGZpbGVcIixcblx0XCJzb3lcIjpcIlNveSAoQ2xvc3VyZSBUZW1wbGF0ZSlcIixcblx0XCJzcGFycWxcIjpcIlNQQVJRTFwiLFxuXHRcInJxXCI6XCJTUEFSUUxcIixcblx0XCJzcGx1bmstc3BsXCI6XCJTcGx1bmsgU1BMXCIsXG5cdFwic3FmXCI6XCJTUUZcIixcblx0XCJzcWxcIjpcIlNRTFwiLFxuXHRcInNxdWlycmVsXCI6XCJTcXVpcnJlbFwiLFxuXHRcInN0YW5cIjpcIlN0YW5cIixcblx0XCJzdGF0YVwiOlwiU3RhdGEgQWRvXCIsXG5cdFwiaWVjc3RcIjpcIlN0cnVjdHVyZWQgVGV4dCAoSUVDIDYxMTMxLTMpXCIsXG5cdFwic3R5bHVzXCI6XCJTdHlsdXNcIixcblx0XCJzdXBlcmNvbGxpZGVyXCI6XCJTdXBlckNvbGxpZGVyXCIsXG5cdFwic2NsYW5nXCI6XCJTdXBlckNvbGxpZGVyXCIsXG5cdFwic3dpZnRcIjpcIlN3aWZ0XCIsXG5cdFwic3lzdGVtZFwiOlwiU3lzdGVtZCBjb25maWd1cmF0aW9uIGZpbGVcIixcblx0XCJ0NC10ZW1wbGF0aW5nXCI6XCJUNCB0ZW1wbGF0aW5nXCIsXG5cdFwidDQtY3NcIjpcIlQ0IFRleHQgVGVtcGxhdGVzIChDIylcIixcblx0XCJ0NFwiOlwiVDQgVGV4dCBUZW1wbGF0ZXMgKEMjKVwiLFxuXHRcInQ0LXZiXCI6XCJUNCBUZXh0IFRlbXBsYXRlcyAoVkIpXCIsXG5cdFwidGFwXCI6XCJUQVBcIixcblx0XCJ0Y2xcIjpcIlRjbFwiLFxuXHRcInR0MlwiOlwiVGVtcGxhdGUgVG9vbGtpdCAyXCIsXG5cdFwidGV4dGlsZVwiOlwiVGV4dGlsZVwiLFxuXHRcInRvbWxcIjpcIlRPTUxcIixcblx0XCJ0cmVtb3JcIjpcIlRyZW1vclwiLFxuXHRcInRyaWNrbGVcIjpcIlRyZW1vclwiLFxuXHRcInRyb3lcIjpcIlRyZW1vclwiLFxuXHRcInR1cnRsZVwiOlwiVHVydGxlXCIsXG5cdFwidHJpZ1wiOlwiVHVydGxlXCIsXG5cdFwidHdpZ1wiOlwiVHdpZ1wiLFxuXHRcInR5cGVzY3JpcHRcIjpcIlR5cGVTY3JpcHRcIixcblx0XCJ0c1wiOlwiVHlwZVNjcmlwdFwiLFxuXHRcInR5cG9zY3JpcHRcIjpcIlR5cG9TY3JpcHRcIixcblx0XCJ0c2NvbmZpZ1wiOlwiVFNDb25maWdcIixcblx0XCJ1bnJlYWxzY3JpcHRcIjpcIlVucmVhbFNjcmlwdFwiLFxuXHRcInVzY3JpcHRcIjpcIlVucmVhbFNjcmlwdFwiLFxuXHRcInVjXCI6XCJVbnJlYWxTY3JpcHRcIixcblx0XCJ1b3Jhem9yXCI6XCJVTyBSYXpvciBTY3JpcHRcIixcblx0XCJ1cmlcIjpcIlVSSVwiLFxuXHRcInVybFwiOlwiVVJJXCIsXG5cdFwidlwiOlwiVlwiLFxuXHRcInZhbGFcIjpcIlZhbGFcIixcblx0XCJ2Ym5ldFwiOlwiVkIuTmV0XCIsXG5cdFwidmVsb2NpdHlcIjpcIlZlbG9jaXR5XCIsXG5cdFwidmVyaWxvZ1wiOlwiVmVyaWxvZ1wiLFxuXHRcInZoZGxcIjpcIlZIRExcIixcblx0XCJ2aW1cIjpcInZpbVwiLFxuXHRcInZpc3VhbC1iYXNpY1wiOlwiVmlzdWFsIEJhc2ljXCIsXG5cdFwidmJcIjpcIlZpc3VhbCBCYXNpY1wiLFxuXHRcIndhcnBzY3JpcHRcIjpcIldhcnBTY3JpcHRcIixcblx0XCJ3YXNtXCI6XCJXZWJBc3NlbWJseVwiLFxuXHRcIndlYi1pZGxcIjpcIldlYiBJRExcIixcblx0XCJ3ZWJpZGxcIjpcIldlYiBJRExcIixcblx0XCJ3Z3NsXCI6XCJXR1NMXCIsXG5cdFwid2lraVwiOlwiV2lraSBtYXJrdXBcIixcblx0XCJ3b2xmcmFtXCI6XCJXb2xmcmFtIGxhbmd1YWdlXCIsXG5cdFwibWF0aGVtYXRpY2FcIjpcIldvbGZyYW0gbGFuZ3VhZ2VcIixcblx0XCJuYlwiOlwiV29sZnJhbSBsYW5ndWFnZVwiLFxuXHRcIndsXCI6XCJXb2xmcmFtIGxhbmd1YWdlXCIsXG5cdFwid3JlblwiOlwiV3JlblwiLFxuXHRcInhlb3JhXCI6XCJYZW9yYVwiLFxuXHRcInhlb3JhY3ViZVwiOlwiWGVvcmFcIixcblx0XCJ4bWwtZG9jXCI6XCJYTUwgZG9jICgubmV0KVwiLFxuXHRcInhvam9cIjpcIlhvam8gKFJFQUxiYXNpYylcIixcblx0XCJ4cXVlcnlcIjpcIlhRdWVyeVwiLFxuXHRcInlhbWxcIjpcIllBTUxcIixcblx0XCJ5bWxcIjpcIllBTUxcIixcblx0XCJ5YW5nXCI6XCJZQU5HXCIsXG5cdFwiemlnXCI6XCJaaWdcIlxufTtcbmNvbnN0IE1BTlVBTF9MQU5HVUFHRVM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0geyAvLyBNYW51YWxseSBjcmVhdGVkIGxpc3Rcblx0XCJmaXNoXCI6XCJGaXNoXCIsXG5cdFwib2N0YXZlXCI6XCJPY3RhdmVcIixcblx0XCJtYXhpbWFcIjpcIk1heGltYVwiLFxuXHRcIm15c3FsXCI6XCJTUUxcIixcblx0XCJwb3N0Z3Jlc3FsXCI6XCJTUUxcIixcblx0XCJyc2NyaXB0XCI6XCJSXCIsXG5cdFwic2hlbGxzY3JpcHRcIjpcIlNoZWxsXCIsXG5cdFwic3FsaXRlXCI6XCJTUUxcIixcblx0XCJ6c2hcIjpcIlpzaFwiLFxufTtcbmV4cG9ydCBjb25zdCBMQU5HVUFHRV9OQU1FUzoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7Li4uUFJJU01fTEFOR1VBR0VTLC4uLk1BTlVBTF9QUklTTV9MQU5HVUFHRVMsLi4uTUFOVUFMX0xBTkdVQUdFU307XG5cbmV4cG9ydCBjb25zdCBMQU5HVUFHRVM6IHtba2V5OiBzdHJpbmddOiBMYW5ndWFnZX0gPSB7XG5cdFwiLmdpdGlnbm9yZVwiOiB7XG5cdFx0Y29sb3VyOiBcIiNkZDRjMzVcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yOS40NzIsMTQuNzUzLDE3LjI0NywyLjUyOGExLjgsMS44LDAsMCwwLTIuNTUsMEwxMi4xNTgsNS4wNjdsMy4yMiwzLjIyYTIuMTQxLDIuMTQxLDAsMCwxLDIuNzEyLDIuNzNsMy4xLDMuMWEyLjE0MywyLjE0MywwLDEsMS0xLjI4NSwxLjIxbC0yLjg5NS0yLjg5NXY3LjYxN2EyLjE0MSwyLjE0MSwwLDEsMS0xLjc2NC0uMDYyVjEyLjNhMi4xNDYsMi4xNDYsMCwwLDEtMS4xNjUtMi44MTRMMTAuOTExLDYuMzE0LDIuNTI4LDE0LjdhMS44LDEuOCwwLDAsMCwwLDIuNTUxTDE0Ljc1MywyOS40NzJhMS44LDEuOCwwLDAsMCwyLjU1LDBMMjkuNDcyLDE3LjNhMS44LDEuOCwwLDAsMCwwLTIuNTUxXFxcIiBzdHlsZT1cXFwiZmlsbDojZGQ0YzM1XFxcIi8+PHBhdGggZD1cXFwiTTEyLjE1OCw1LjA2N2wzLjIyLDMuMjJhMi4xNDEsMi4xNDEsMCwwLDEsMi43MTIsMi43M2wzLjEsMy4xYTIuMTQzLDIuMTQzLDAsMSwxLTEuMjg1LDEuMjFsLTIuODk1LTIuODk1djcuNjE3YTIuMTQxLDIuMTQxLDAsMSwxLTEuNzY0LS4wNjJWMTIuM2EyLjE0NiwyLjE0NiwwLDAsMS0xLjE2NS0yLjgxNEwxMC45MTEsNi4zMTRcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0XHRpbmxpbmVDb21tZW50OiBbXG5cdFx0XHRcIiNcIixcblx0XHRdLFxuXHR9LFxuXHRcIi5oZ2lnbm9yZVwiOiB7XG5cdFx0Y29sb3VyOiBcIiNiZmJmYmZcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yOC4wNDIsMjMuMTcyYzQuOTg5LTguMy0xLjA1NC0yMS43NTEtMTIuMS0yMC4zODRDNS45NTUsNC4wMjIsNS43OTQsMTQuNTMsMTQuNTkzLDE3LjAyNmM3LjYxNCwyLjE2MiwxLjU3Myw2Ljk5MiwxLjc0OSwxMC4yMDhzNi42Miw0LjM4MiwxMS43LTQuMDYzXFxcIiBzdHlsZT1cXFwiZmlsbDojMWIxYjFiXFxcIi8+PGNpcmNsZSBjeD1cXFwiOS43ODRcXFwiIGN5PVxcXCIyNC4yNTdcXFwiIHI9XFxcIjQuMzMyXFxcIiBzdHlsZT1cXFwiZmlsbDojMWIxYjFiXFxcIi8+PGNpcmNsZSBjeD1cXFwiNC44MzVcXFwiIGN5PVxcXCIxNS4wOTlcXFwiIHI9XFxcIjIuODM1XFxcIiBzdHlsZT1cXFwiZmlsbDojMWIxYjFiXFxcIi8+PHBhdGggZD1cXFwiTTI4LjIzMSwyMi44MzVjNC45ODktOC4zLTEuMDU0LTIxLjc1MS0xMi4xLTIwLjM4NEM2LjE0NCwzLjY4Niw1Ljk4MywxNC4xOTQsMTQuNzgxLDE2LjY5YzcuNjE0LDIuMTYyLDEuNTczLDYuOTkyLDEuNzQ5LDEwLjIwOHM2LjYyLDQuMzgyLDExLjctNC4wNjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZmJmYmZcXFwiLz48Y2lyY2xlIGN4PVxcXCI5Ljk3MlxcXCIgY3k9XFxcIjIzLjkyMVxcXCIgcj1cXFwiNC4zMzJcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZmJmYmZcXFwiLz48Y2lyY2xlIGN4PVxcXCI1LjAyM1xcXCIgY3k9XFxcIjE0Ljc2MlxcXCIgcj1cXFwiMi44MzVcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZmJmYmZcXFwiLz48cGF0aCBkPVxcXCJNMTcuODExLDI4LjE2OGEuNjY5LjY2OSwwLDAsMSwuNjM1LS45OTQsNyw3LDAsMCwwLDMuNy0uNzQ2YzMuMjQ3LTEuODQxLDguMjQ0LTEwLjcsNS43MzEtMTYuMjg1QTEyLjc3LDEyLjc3LDAsMCwwLDI1LjA0OSw1LjdjLS4yMzYtLjI0OS0uMS0uMjM2LjA1OS0uMTUyYTEwLjA4LDEwLjA4LDAsMCwxLDIuODU3LDMuNjc2LDE0LjU3OCwxNC41NzgsMCwwLDEsMS4xLDEwLjI3OWMtLjQ5NCwxLjgxNy0yLjIsNS45MjgtNC42OTEsNy43MDZzLTUuNDI0LDIuOC02LjU2My45NTVNMTUuNTQ4LDE2LjY3M2MtMS43LS41LTMuODk0LTEuMjA4LTUuMTYzLTIuODY3QTguMDg4LDguMDg4LDAsMCwxLDguODU0LDEwLjQ5Yy0uMDQzLS4yNy0uMDgtLjUsMC0uNTU4YTIxLjg4MiwyMS44ODIsMCwwLDAsMS42ODgsMi43MjMsNi40ODcsNi40ODcsMCwwLDAsMy41MjYsMi4yNTYsMTIuMzgzLDEyLjM4MywwLDAsMSwzLjg2NywxLjM3Yy43MzkuNjI5LjgsMS45ODkuNTUyLDIuMTQycy0uNzU5LTEuMS0yLjkzOC0xLjc0OW0tOC4xNTUsMTAuNGMzLjM2OSwzLjEyMSw4LjQzOS0xLjE2Niw2LjIwNy00Ljk1NC0uMjUxLS40MjUtLjU3Ni0uNzQ5LS40NjktLjQyMy43MTQsMi4xNzguMDU0LDMuOS0xLjE3Niw0Ljc4OGE0LjA2Myw0LjA2MywwLDAsMS00LjE5Mi4zMjhjLS4zOS0uMi0uNTUxLjA5Mi0uMzcuMjYxbS0zLjkzLTEwLjE2Yy4wMTguMi4yOTIuNDU4LjcyMi41NzZhMi45NjksMi45NjksMCwwLDAsMi41NS0uNDEzLDIuNzU5LDIuNzU5LDAsMCwwLC44MS0zLjQ1MmMtLjE3Mi0uMzA4LS40LS41MzMtLjIxOC0uMDQxQTIuNjgsMi42OCwwLDAsMSw2LjE0OCwxNi41M2EyLjQzOSwyLjQzOSwwLDAsMS0yLjEuMTY0Yy0uMzkxLS4xMTktLjYuMDE2LS41OC4yMjNcXFwiLz48cGF0aCBkPVxcXCJNMTkuMDU2LDI4LjQwN2MtLjAzMy4zODkuNDE0LjQ2NiwxLjAxNi4zNzZhNi43NTUsNi43NTUsMCwwLDAsMi4zMTMtLjY0OCw5LjU0LDkuNTQsMCwwLDAsMy4zMTQtMi42M2MyLjY2Mi0zLjQ3MywzLjYtNy41ODIsMy40Ni04LjE3M0ExNi4xNzIsMTYuMTcyLDAsMCwxLDI3LDIyLjY5MmMtMS44ODgsMi45NjgtMy4yNTYsNC41NDgtNi40MTMsNS4zMTQtLjg3OS4yMTMtMS40ODUtLjExMi0xLjUyOS40bS03LTEzLjVBNy45NjcsNy45NjcsMCwwLDAsMTQuNiwxNi4wODlhMTIuMiwxMi4yLDAsMCwxLDIuOTYsMS4zMWMuMzc4LjI1My42MTguODE5LjY0Mi4zMTdzLS4yODUtLjkzNC0uOTc2LTEuMTY0YTE1LjI3NCwxNS4yNzQsMCwwLDAtMi4wMDktLjY3NGMtLjQ4NS0uMS0xLjI3My0uMjg1LTEuOTQ5LS40OTMtLjM3MS0uMTE0LS43NDgtLjMxMy0xLjIxNC0uNDgzTTEwLjAzNywyNy43MThjLjQyOS0uMDksMi45MjQtLjczNiwzLjUxLTIuNzg4LjE4My0uNjQuMjE1LS41MTEuMTY0LS4xNjVhMy44LDMuOCwwLDAsMS0zLjM1OCwzLjEyM2MtLjI4OS4wMy0uNjY4LS4xLS4zMTUtLjE3TTUuMDQ2LDE3LjJhNy45OTEsNy45OTEsMCwwLDAsMS4xOTUtLjMzNiwyLjM4MywyLjM4MywwLDAsMCwxLjIzMi0xLjc0MWMuMDY0LS41MDUuMDgzLS4zNzguMTA5LS4xYTIuNjI3LDIuNjI3LDAsMCwxLTIuMTQ3LDIuMzI0Yy0uMi4wMjgtLjU2LjAxMS0uMzg5LS4xNDNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMjcuNTQsMTcuNDQ2YzIuMTI0LTYuMTIzLTIuMzIxLTE1LjM3LTExLjMxNS0xNC4yNTgtOC4xMjYsMS04LjI1Nyw5LjU1Ny0xLjEsMTEuNTksOC4xMTIsMS4yMjgsMy4yMjcsNy4zNDcsMi41MzUsMTAuNDMzLS42MjEsMi43NjYsNi41NTUsMy4yMjEsOS44NzYtNy43NjVNNy4yMTksMjYuMmEyLjAyOCwyLjAyOCwwLDAsMSwxLjMzMi40NDIsMy41MjUsMy41MjUsMCwwLDAsMy43NTUtLjk4M0E0LjE1NCw0LjE1NCwwLDAsMCwxMi44NjksMjJjLS44MDYtMi4zMTktNC4yMjktMi4yNzgtNS43NTgtLjM1My0xLjY1NCwyLjE1LS40LDQuNTM5LjEwOCw0LjU0OE0yLjY3NiwxNS40NTFhMS4xNjYsMS4xNjYsMCwwLDAsLjkwOC44NjNjLjczMS4xLjg4LjQzNCwxLjc0My4yNjNBMi40NjQsMi40NjQsMCwwLDAsNy4xLDE0LjkxNmExLjc3MSwxLjc3MSwwLDAsMC0uODI0LTIuMTQsMi42ODksMi42ODksMCwwLDAtMy4wNDcuMzYzLDIuMjYzLDIuMjYzLDAsMCwwLS41NTgsMi4zMTJcXFwiIHN0eWxlPVxcXCJmaWxsOiM5OTlcXFwiLz48cGF0aCBkPVxcXCJNMjEuOTgxLDIyLjIyOGMtMi4yLS4yNzItNS4zNiw0LjY5LTIuMzc4LDQuMTA5aDBhNS42NDUsNS42NDUsMCwwLDAsMy42ODMtMS45MzIsMjMuMTM2LDIzLjEzNiwwLDAsMCw0LjA1NS03LjJjLjUtMS44NjEuMjUxLTQuNzQ1LS4yNjktMi4wMzYtLjUzMywyLjc4MS0yLjg5Myw3LjMzNi01LjA5MSw3LjA2NE0xMC41MjMsMjYuMzYyQTIuNzc4LDIuNzc4LDAsMCwwLDEyLjUsMjIuOTljLS4xNjUtMS4yNzYtLjg2MSwxLjU4NC0yLjE1LDIuMDEyLTEuOTUzLjY0OC0xLjczMywxLjg2MS4xNzYsMS4zNjFtLTQuOTc4LTEwLjJjLjY2My0uMTczLDEuNTQtMS4wNzcsMS4xLTEuNzY3LS41MzctLjg1LTIuMDMzLS4xMjItMi4wODQuODI0cy4yNzcsMS4xMjcuOTc5Ljk0M1xcXCIgc3R5bGU9XFxcImZpbGw6I2YzZjNmM1xcXCIvPlwiLFxuXHR9LFxuXHRcIi5ucG1pZ25vcmVcIjoge1xuXHRcdGNvbG91cjogXCIjY2IzODM3XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMiwxMC41NTVIMzB2OS4zMzVIMTZ2MS41NTZIOS43NzhWMTkuODg5SDJabTEuNTU2LDcuNzc5SDYuNjY3VjEzLjY2Nkg4LjIyMnY0LjY2N0g5Ljc3OFYxMi4xMTFIMy41NTZabTcuNzc4LTYuMjIzdjcuNzc5aDMuMTExVjE4LjMzNGgzLjExMVYxMi4xMTFabTMuMTExLDEuNTU2SDE2djMuMTEySDE0LjQ0NFptNC42NjctMS41NTZ2Ni4yMjNoMy4xMTFWMTMuNjY2aDEuNTU2djQuNjY3aDEuNTU2VjEzLjY2NmgxLjU1NnY0LjY2N2gxLjU1NlYxMi4xMTFaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2IzODM3XFxcIi8+XCIsXG5cdH0sXG5cdFwiLnByb3BlcnRpZXNcIjoge1xuXHRcdGNvbG91cjogXCIjOTliOGM0XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMjMuMjY1LDI0LjM4MWwuOS0uODk0YzQuMTY0LjEzNiw0LjIyOC0uMDEsNC40MTEtLjQzOGwxLjE0NC0yLjc4NUwyOS44MDUsMjBsLS4wOTMtLjIzMWMtLjA0OS0uMTIyLS4yLS40ODYtMi44LTIuOTY1VjE1LjVjMy0yLjg5LDIuOTM2LTMuMDM4LDIuNzY1LTMuNDYxTDI4LjUzOCw5LjIyNWMtLjE3MS0uNDIyLS4yMzYtLjU4Ny00LjM3LS40NzRsLS45LS45M2EyMC4xNjYsMjAuMTY2LDAsMCwwLS4xNDEtNC4xMDZsLS4xMTYtLjI2My0yLjk3NC0xLjNjLS40MzgtLjItLjU5Mi0uMjcyLTMuNCwyLjc4NmwtMS4yNjItLjAxOWMtMi44OTEtMy4wODYtMy4wMjgtMy4wMy0zLjQ2MS0yLjg1NUw5LjE0OSwzLjE4MmMtLjQzMy4xNzUtLjU4Ni4yMzctLjQxOCw0LjQzN2wtLjg5My44OWMtNC4xNjItLjEzNi00LjIyNi4wMTItNC40MDcuNDM4TDIuMjg1LDExLjczMywyLjE5NSwxMmwuMDk0LjIzMmMuMDQ5LjEyLjE5NC40OCwyLjgsMi45NjJsMCwxLjNjLTMsMi44OS0yLjkzNSwzLjAzOC0yLjc2MywzLjQ2MmwxLjEzOCwyLjgxN2MuMTc0LjQzMS4yMzYuNTg0LDQuMzY5LjQ3NmwuOS45MzVhMjAuMjQzLDIwLjI0MywwLDAsMCwuMTM3LDQuMWwuMTE2LjI2NSwyLjk5MywxLjMwOGMuNDM1LjE4Mi41ODYuMjQ3LDMuMzg2LTIuOGwxLjI2Mi4wMTZjMi44OTUsMy4wOSwzLjA0MywzLjAzLDMuNDY2LDIuODU5bDIuNzU5LTEuMTE1QzIzLjI4OCwyOC42NDQsMjMuNDQsMjguNTgzLDIzLjI2NSwyNC4zODFaTTExLjQwNywxNy44NTdhNC45NTcsNC45NTcsMCwxLDEsNi40ODgsMi44MjRBNS4wMTQsNS4wMTQsMCwwLDEsMTEuNDA3LDE3Ljg1N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM5OWI4YzRcXFwiLz5cIixcblx0fSxcblx0XCI2NTAyIEFzc2VtYmx5XCI6IHtcblx0XHRjb2xvdXI6IFwiIzAwMDBiZlwiLFxuXHRcdGljb246IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiODM2LjYzXFxcIiB5MT1cXFwiMzYuMjA1XFxcIiB4Mj1cXFwiODQzLjgwMlxcXCIgeTI9XFxcIjE0LjQ4XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDUyNS45MjIgMzAuMjQ5KSByb3RhdGUoMTgwKSBzY2FsZSgwLjYwNyAwLjYwNylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwLjI3NVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfYXNzZW1ibHk8L3RpdGxlPjxwYXRoIGQ9XFxcIk0xNiwyYy0xLjI0NiwzLjA1Ni0yLDUuMDU3LTMuMzkxLDguMDIyQTIxLjg4NCwyMS44ODQsMCwwLDAsMTYuMiwxMy4xNTZhMTQuODU4LDE0Ljg1OCwwLDAsMS00LTIuMjgzQzEwLjQzLDE0LjU3OSw3LjY0NiwxOS44NTUsMiwzMGM1LjE4Ni0yLjk5NCw5LjAxMi00LjY0OCwxMi42OTEtNC45NjZWMjQuMmgtLjgzNHYtLjgzN2guODM0VjI0LjJoMS42NzVWMjIuNTIxSDE0LjY5MXYtLjgzNGgtLjgzNFYyMC4wMTNoLjgzNHYtLjgzNGgxLjY3NXYuODM0SDE3LjJ2LjgzN2gtLjgzN3YtLjgzN0gxNC42OTF2MS42NzVoMS42NzV2LjgzNEgxNy4yVjI0LjJoLS44Mzd2Ljc4M2MzLjk4LjEsOC4wMDYsMS43NzIsMTMuNjM0LDUuMDIxLS44NjMtMS41ODktMS42MzYtMy4wMjEtMi4zNzItNC4zODVhMjUuNTI2LDI1LjUyNiwwLDAsMC00LjgzMy0zLjMzM0ExNC40MzYsMTQuNDM2LDAsMCwxLDI2LjY1LDIzLjhDMTkuMTcsOS44NzIsMTguNTY1LDguMDIsMTYsMlpNMTAuNTExLDE5LjE3OWgxLjY3MXYuODM0aC44Mzd2NS4wMjFoLS44MzdWMjIuNTIxSDEwLjUxMXYyLjUxMkg5LjY3M1YyMC4wMTNoLjgzN1ptMCwuODM0djEuNjc1aDEuNjcxVjIwLjAxM1ptNy41MjYtLjgzNGguODM3di44MzRoLjgzN3YuODM3aC44MzR2LS44MzdoLjgzN3YtLjgzNGguODM3djUuODU1aC0uODM3VjIwLjg1aC0uODM3di44MzdoLS44MzRWMjAuODVoLS44Mzd2NC4xODRoLS44MzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDAwMGJmXFxcIi8+PHBhdGggZD1cXFwiTTIzLjg4MSwxOC42NDJjLTYuMDY5LTguMjM3LTcuNDc2LTE0Ljg3Ni03LjgzMi0xNi40NjFBMTc1LjIxNywxNzUuMjE3LDAsMCwwLDIzLjg4MSwxOC42NDJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmO2ZpbGwtb3BhY2l0eTowLjE2NTY4MDQ2ODA4MjQyOFxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4wNTEsMi4xMiwxNS42LDMuMjI3Yy0uMTU5LjM5MS0uMzExLjc2NS0uNDYxLDEuMTMxcy0uMy43MjQtLjQ0OCwxLjA3Ny0uMy43LS40NDgsMS4wNTMtLjMuNzA2LS40NjUsMS4wNjYtLjMyOS43MjktLjUwNiwxLjExMS0uMzYyLjc3OC0uNTYxLDEuMTkzYy0uMDI4LjA1Ny0uMDYxLjEyMy0uMDg5LjE4MUEyMS44NzIsMjEuODcyLDAsMCwwLDE2LjIsMTMuMTU2YTE0Ljg3OSwxNC44NzksMCwwLDEtMy45ODktMi4yNzZsLS4xNC4yODdjLS4wNjUuMTMzLS4xNDQuMjgzLS4yMTIuNDJsLS4xMDYuMjE5Yy0uODc4LDEuNzkzLTIuMDA2LDMuOTg0LTMuNTI0LDYuODIyLDMuNTUxLTIsNy4zODEtNC44ODcsMTQuMzM4LTIuNC0uMzQ5LS42NjEtLjY3LTEuMjgtLjk3MS0xLjg2M3MtLjU4MS0xLjEyOC0uODQxLTEuNjQ0LS41LTEtLjcyNS0xLjQ2My0uNDMzLS45LS42MjktMS4zMTMtLjM4LS44MTgtLjU1NC0xLjItLjMzOS0uNzU0LS41LTEuMTE4UzE4LjA0Nyw2LjksMTcuOSw2LjU0NnMtLjI5MS0uNzA5LS40MzQtMS4wNjZjLS4wMzYtLjA5MS0uMDczLS4xODYtLjEwOS0uMjc3QzE2Ljk0OSw0LjI0NywxNi41MzYsMy4yNTgsMTYuMDUxLDIuMTJaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+XCIsXG5cdH0sXG5cdFwiQWN0aW9uU2NyaXB0XCI6IHtcblx0XHRjb2xvdXI6IFwiI2M0MTcxOFwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIsMTUuMjgxYzEuOTE4LDAsMi4xMS0xLjA1NSwyLjExLTEuOTE4YTE3LjExOSwxNy4xMTksMCwwLDAtLjE5Mi0yLjIwNSwxOC43MjMsMTguNzIzLDAsMCwxLS4xOTItMi4yMDVjMC0yLjQsMS42My0zLjQ1MiwzLjgzNi0zLjQ1MmguNTc1VjYuOTM4SDcuNjU4Yy0xLjUzNCwwLTIuMTEuNzY3LTIuMTEsMi4yMDVhMTQuNDEyLDE0LjQxMiwwLDAsMCwuMTkyLDEuOTE4LDE0LjMwNiwxNC4zMDYsMCwwLDEsLjE5MiwyLjAxNGMwLDEuNzI2LS42NzEsMi40OTMtMS45MTgsMi44Nzd2LjFjMS4xNTEuMjg4LDEuOTE4LDEuMTUxLDEuOTE4LDIuODc3YTE0LjMwNiwxNC4zMDYsMCwwLDEtLjE5MiwyLjAxNCwxMywxMywwLDAsMC0uMTkyLDEuOTE4YzAsMS40MzguNTc1LDIuMywyLjExLDIuM2guNDc5VjI2LjZINy41NjJjLTIuMjA1LDAtMy44MzYtLjk1OS0zLjgzNi0zLjY0NGExOC43MjMsMTguNzIzLDAsMCwxLC4xOTItMi4yMDUsMTUuNjgsMTUuNjgsMCwwLDAsLjE5Mi0yLjExYzAtLjg2My0uMjg4LTEuOTE4LTIuMTEtMS45MThaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzQxNzE4XFxcIi8+PHBhdGggZD1cXFwiTTkuNDc5LDE4LjA2Miw4LjIzMywyMS44SDYuNkwxMC42Myw5LjkxMWgxLjgyMkwxNi40NzksMjEuOEgxNC45NDVMMTMuNywxOC4wNjJabTMuOTMyLTEuMTUxTDEyLjI2LDEzLjQ1OWE5LjM2NCw5LjM2NCwwLDAsMS0uNTc1LTIuMjA1aDBjLS4xOTIuNjcxLS4zODQsMS40MzgtLjU3NSwyLjExTDkuOTU5LDE2LjgxNWgzLjQ1MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjNDE3MThcXFwiLz48cGF0aCBkPVxcXCJNMTcuOTE4LDE5Ljk3OWE1Ljk0MSw1Ljk0MSwwLDAsMCwyLjc4MS43NjdjMS41MzQsMCwyLjQ5My0uODYzLDIuNDkzLTIuMDE0cy0uNjcxLTEuNzI2LTIuMjA1LTIuNGMtMS45MTgtLjY3MS0zLjE2NC0xLjcyNi0zLjE2NC0zLjM1NiwwLTEuODIyLDEuNTM0LTMuMjYsMy44MzYtMy4yNmE1LjEzNSw1LjEzNSwwLDAsMSwyLjU4OS41NzVsLS4zODQsMS4yNDdhNS41MTksNS41MTksMCwwLDAtMi4zLS40NzljLTEuNjMsMC0yLjIwNS45NTktMi4yMDUsMS44MjIsMCwxLjE1MS43NjcsMS42MywyLjQsMi4zLDIuMDE0Ljc2NywzLjA2OCwxLjcyNiwzLjA2OCwzLjQ1MiwwLDEuODIyLTEuMzQyLDMuNDUyLTQuMTIzLDMuNDUyYTUuODA3LDUuODA3LDAsMCwxLTMuMDY4LS43NjdaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzQxNzE4XFxcIi8+PHBhdGggZD1cXFwiTTMwLDE2LjYyM2MtMS45MTgsMC0yLjExLDEuMTUxLTIuMTEsMS45MThhMTUuNjgsMTUuNjgsMCwwLDAsLjE5MiwyLjExLDE1LjczOCwxNS43MzgsMCwwLDEsLjE5MiwyLjIwNWMwLDIuNjg1LTEuNjMsMy42NDQtMy44MzYsMy42NDRoLS41NzVWMjUuMDYyaC40NzljMS40MzgsMCwyLjExLS44NjMsMi4xMS0yLjNhMTMsMTMsMCwwLDAtLjE5Mi0xLjkxOCwxNC4zMDYsMTQuMzA2LDAsMCwxLS4xOTItMi4wMTRjMC0xLjcyNi43NjctMi41ODksMS45MTgtMi44Nzd2LS4xYy0xLjE1MS0uMjg4LTEuOTE4LTEuMTUxLTEuOTE4LTIuODc3YTE0LjMwNiwxNC4zMDYsMCwwLDEsLjE5Mi0yLjAxNCwxMywxMywwLDAsMCwuMTkyLTEuOTE4YzAtMS40MzgtLjU3NS0yLjIwNS0yLjExLTIuM2gtLjQ3OVY1LjRoLjU3NWMyLjIwNSwwLDMuODM2LDEuMDU1LDMuODM2LDMuNDUyYTE3LjExOSwxNy4xMTksMCwwLDEtLjE5MiwyLjIwNSwxNy4xMTksMTcuMTE5LDAsMCwwLS4xOTIsMi4yMDVjMCwuOTU5LjI4OCwxLjkxOCwyLjExLDEuOTE4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2M0MTcxOFxcXCIvPlwiLFxuXHR9LFxuXHRcIkFkYVwiOiB7XG5cdFx0Y29sb3VyOiBcIiMwZjIzYzNcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yNC41NTQsMjAuMDc1Yy4yMDkuMjcsMS4zNTYuOTYxLDEuMzcsMS4yNDZhNi45MjEsNi45MjEsMCwwLDAtMS40LS4zMjRjLS40NjgtLjE0Mi0uOTUxLS4yOTMtMS40MTItLjQ4YTkuMiw5LjIsMCwwLDEtMi4zNzUtMS4zQTMuMTQ2LDMuMTQ2LDAsMCwxLDE5LjMsMTYuNzVhMS43MjIsMS43MjIsMCwwLDEsMS43NjctMS44MjIsMy41ODQsMy41ODQsMCwwLDEsMS41OTMuMzIxYy4xNDYuMDY2LDEuMzEuNjA2LDEuMjU2LjgwOWE1LjUsNS41LDAsMCwwLTEuNDEtLjExMmMtLjY0OS4yNDQtLjQuODI4LS4xNjgsMS4zMTFhNy44NzcsNy44NzcsMCwwLDAsMS4wNzgsMS41NTRDMjMuNTgsMTkuMDA1LDI0LjMsMjAuMDgyLDI0LjU1NCwyMC4wNzVaXFxcIiBzdHlsZT1cXFwiZmlsbDojMGYyM2MzXFxcIi8+PHBhdGggZD1cXFwiTTI0LjE0MSwxNi4yNzZjLjEyOC0uNTkuODE5LTEuMzg0LDEuMzQ0LS43NzNhNC4yLDQuMiwwLDAsMSwuNTc4LDEuOTE4Yy4xMi42NTYuMiwxLjMyNy4yNjEsMS45ODIuMDM4LjM3OS4zNCwxLjc5NC4xMjMsMi4wNzVhMjMuMjQsMjMuMjQsMCwwLDEtMi45MjItMi44MzgsMy43NjMsMy43NjMsMCwwLDEtLjkyNS0xLjdDMjIuNSwxNS44NjcsMjMuNDc5LDE2LjIxLDI0LjE0MSwxNi4yNzZaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWExOTc4XFxcIi8+PHBhdGggZD1cXFwiTTI2LjMsMTcuNzgxYy4xNDEtLjczMi0uNDA2LTIuNTkyLTEuMDY3LTIuOTQ5YS4wNi4wNiwwLDAsMCwuMDQ0LS4wMDdjLS4xNTYtLjQ0NC0xLjM1OSwxLjExNi0xLjIyOCwxLjE3NC0uMzE2LS4xMzguNzc0LTEuOTg0Ljk4OC0yLjE2LjctLjU3OCwxLjM3Mi0uMDg2LDEuODQ1LjU0M2E2LjAzNiw2LjAzNiwwLDAsMSwuNzMzLDQuNDM0LDQuNSw0LjUsMCwwLDEtLjQyMSwxLjMxMmMtLjEuMjItLjQ1LDEuMS0uNjgyLDEuMTc0QTE0Ljc1NCwxNC43NTQsMCwwLDAsMjYuMywxNy43ODFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMGYyM2MzXFxcIi8+PHBhdGggZD1cXFwiTTMuNjg3LDguNGMuMTc5LS4xODgtLjA0MS0xLjUyNy4zMjQtMS41NDguMjYyLS4wMTUuNTUzLDEuNzQxLjYyNywxLjk2OGE5LjIsOS4yLDAsMCwwLDEuMTI3LDIuMzI5LDcuNTI5LDcuNTI5LDAsMCwwLDQuMDE2LDIuOTc4LDQuNTUsNC41NSwwLDAsMCwyLjM2Ni4yYy45MzEtLjIwOCwxLjgyLS41NzcsMi43NTctLjc2NSwxLjM1LS4yNywzLjM0Mi0uMzUyLDQuNDM4LjY0Ny43LjY0MS4zNzYuNzYuMDQzLDEuNDIxYTIuNDQ1LDIuNDQ1LDAsMCwwLC4xNzgsMi41NjJjLjIzNS4zNDIsMS4wMzMuODI3LjY3NSwxLjA5NC0uNTY3LjQyNC0xLjI3Ny0uNDUyLTEuNjM2LS43NzYtMS40LTEuMjY0LTIuNzExLTEuMzEzLTQuNDkyLTEuMDc0YTguOTg3LDguOTg3LDAsMCwxLTQuODgzLS43MDhBOS40NjksOS40NjksMCwwLDEsMy42ODcsOC40WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS45NDEsMzBhMy42MTUsMy42MTUsMCwwLDEtMi4zMjUtLjgxN2MuNDY5LS4wOTIsMS4wMjEuMDI1LDEuNTA4LS4wNDRhOS43LDkuNywwLDAsMCwxLjc1NC0uNDNBMTAuNTM3LDEwLjUzNywwLDAsMCwyMy45LDI3LjE1NWE2LjU1LDYuNTUsMCwwLDAsMi43NTctNS4yMTRjLjE0OS0uMDg4LjMxNiwxLjAzNC4zMTksMS4wOTFhNS43ODksNS43ODksMCwwLDEtLjE5LDEuNzI3LDYuODY3LDYuODY3LDAsMCwxLTEuNDIzLDIuNzc0QTcuMjg2LDcuMjg2LDAsMCwxLDE5Ljk0MSwzMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMmQyZDJcXFwiLz48cGF0aCBkPVxcXCJNMTguOTYyLDE5LjEwOWE1Ljc2LDUuNzYsMCwwLDEtMi4wNS44NTksMTMuMzgsMTMuMzgsMCwwLDEtMi4yMjQuNTQ5LDguODYxLDguODYxLDAsMCwxLTQuNDM1LS41MSw5LjkzOSw5LjkzOSwwLDAsMS0zLjg0OS0yLjRDNi4wNTIsMTcuMjQsNC4zLDE1LjE5LDQuODU2LDE0LjU1N2MuMjQ4LS4yODIuODc1Ljg0NiwxLC45OTJhNSw1LDAsMCwwLDEuMzU3LDEuMTEsMTAuOTE3LDEwLjkxNywwLDAsMCw0LjAzNSwxLjQ1Niw2LjY5Myw2LjY5MywwLDAsMCwyLjM0LS4wOTQsMTIuNzQzLDEyLjc0MywwLDAsMSwxLjY5NC0uNDg1LDQsNCwwLDAsMSwyLjExMy40NTdDMTcuNzM5LDE4LjE2MywxOC45MTgsMTguNzM2LDE4Ljk2MiwxOS4xMDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTI4LjMxMywxNS4wNzhhMTkuMjc3LDE5LjI3NywwLDAsMS0uNDUzLDMuNzc0Yy0uMTc2LS4yNDIuMDE2LTEuNDcsMC0xLjc5MmE2LjAzMiw2LjAzMiwwLDAsMC0uMzg0LTIuMDg3QTQuOTI1LDQuOTI1LDAsMCwwLDI2LjEsMTMuMzEyYTE0LjcyOCwxNC43MjgsMCwwLDEtMS4yNy0xLjUzNmMtMS44MzctMi4zODItMy4yNDUtNS4yMTEtMi45LTguMy4wMzQtLjMwOC4wNjktMS40NDguNDExLTEuNDQ1LjE1MiwwLC4yNjYsMS41NjEuMjksMS43MThhMTIuNTI3LDEyLjUyNywwLDAsMCwxLjIyNCw0LjExNmMuNjcsMS4yMjIsMS45NDcsMi4wMjMsMi44MjUsMy4xQTYuNTc5LDYuNTc5LDAsMCwxLDI4LjMxMywxNS4wNzhaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTE1LjcsMjYuOTM1YTEwLjg0NSwxMC44NDUsMCwwLDAsNi40MzYtLjY4Nyw2Ljk0MSw2Ljk0MSwwLDAsMCw0LjI3OC00LjQxOGMuMzE5LjItLjA0OCwxLjUyOS0uMTI4LDEuNzgxYTUuNzI2LDUuNzI2LDAsMCwxLTEuMDEsMS44MTMsOC45MzMsOC45MzMsMCwwLDEtMy4yNTcsMi41MTRDMjAuMzE2LDI4LjcxLDE2LjM1NywyOS41OSwxNS43LDI2LjkzNVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMmQyZDJcXFwiLz48cGF0aCBkPVxcXCJNMTkuMTUxLDE5LjM3NmMuMzY3LDIuMTA3LTIuOTU3LDMuMTI0LTQuNDc4LDMuMjEzLTEuODU5LjExLTQuOTI5LS4yOTItNi4wNi0yLjAzMS0uNjczLTEuMDM1Ljc4MS0uMDksMS4xODguMDU4YTguNjYzLDguNjYzLDAsMCwwLDMuMDYuNSwxMS42LDExLjYsMCwwLDAsMy4zMDUtLjUsMTMuNzI1LDEzLjcyNSwwLDAsMCwxLjUzMy0uNTc2QzE4LDE5LjkwOCwxOC44MjMsMTkuMzQ5LDE5LjE1MSwxOS4zNzZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTI0LjE0MiwyMy40NmMuNC0uOTQ1LTEuODgzLTEuNTc4LTIuNDQ1LTEuODU4YTQuODU3LDQuODU3LDAsMCwxLTEuMzE1LS44NjdjLS4xODEtLjE4MS0uODcyLS45Mi0uODA3LTEuMjE5YTQuOTEyLDQuOTEyLDAsMCwxLDEuMDg3LS4xNzUsNS45Myw1LjkzLDAsMCwxLC44NTUuNTg4LDEwLjMyMywxMC4zMjMsMCwwLDAsLjk2NC41QTE1LjYxNSwxNS42MTUsMCwwLDAsMjQuNiwyMS4yYy4zMDguMDksMS41NDkuMjA4LDEuNzI3LjQyOEMyNi4yODcsMjEuOTI0LDI0LjM1NywyMy42NDksMjQuMTQyLDIzLjQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0yNi4xLDIyLjE3MmMuMjY1LjQzLTEuMDgsMS44MzEtMS4zNjMsMi4xMDVhOS4zNCw5LjM0LDAsMCwxLTIuNTY2LDEuNzI4LDcuNzQ4LDcuNzQ4LDAsMCwxLTIuNTYuNzUzYy0uNjc5LjA1OC0xLjk2Ni0uMTI0LTIuMTQxLS45NzlhNi45NTEsNi45NTEsMCwwLDEsMS4xNzctLjA4NmMuNDYyLS4wNTkuOTIxLS4xNDksMS4zNzYtLjI0NmExMy4wNjUsMTMuMDY1LDAsMCwwLDIuMTg0LS42NDUsMTEuNTA2LDExLjUwNiwwLDAsMCwyLjA4NC0xLjExLDEwLjg3MiwxMC44NzIsMCwwLDAsMS4wNzgtLjgyMkMyNS40NzQsMjIuNzgxLDI1Ljk4NiwyMi4xNjgsMjYuMSwyMi4xNzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTE4Ljc1OCwxMS45NjVjLS4xLTEuMzA4LDIuNjEyLTEuMywzLjI3MS0xLjA5MmE1Ljk3Niw1Ljk3NiwwLDAsMSwyLjk4MiwyLjQ3NWMtMS4wODIuOC0yLjQ0OS4wOTQtMy4zLS42NTRhNC4zMjQsNC4zMjQsMCwwLDAtMS40ODEtMS4wMjlDMTkuNDIxLDExLjQsMTkuNDEyLDExLjc1OSwxOC43NTgsMTEuOTY1WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0yNS43ODMsMTMuMzQxYy0uNDQ0LS4wMjktLjMxNi4wNzEtLjY0Ny0uMjEyLS4zNTgtLjMwNy0uNjE0LS43OTUtLjk0NS0xLjE0MS0uNTM0LS41NTgtMS4yNDItLjg5NS0xLjcyMy0xLjQ4NWE3LjI2OSw3LjI2OSwwLDAsMS0xLjYyNC00Ljg0OGMuMDE4LTEuNDg5LjQwNy4xODcuNTUxLjY3NWExMi4yNzYsMTIuMjc2LDAsMCwwLDEuMTI2LDIuNzA4LDQ2LjA1NSw0Ni4wNTUsMCwwLDAsMy40LDQuMzIxQzI1Ljg4MiwxMy4zNjEsMjUuODI0LDEzLjMzOCwyNS43ODMsMTMuMzQxWlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0yMC4wNjgsMTQuNzU2Yy4wMzMtLjYyNS0uOTExLS43OTItMS4yMTEtMS40Mi0uMTY0LS4zNDMtLjIxMS0uNTY5LjAyOS0uNy4wODItLjA0NS4zODMuMDEyLjUtLjAyLjI3MS0uMDc2LjMzNS0uMjczLjU4MS0uNEExLjE5MywxLjE5MywwLDAsMSwyMS42LDEzLjIzNywxLjgyMSwxLjgyMSwwLDAsMSwyMC4wNjgsMTQuNzU2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0yMC41LDE0Ljc0NWExLjkzMSwxLjkzMSwwLDAsMCwxLjMyMy0xLjdjLjUyNC4xMzkuOTI4LjY1OCwxLjUyMS43NzFhMi41ODQsMi41ODQsMCwwLDAsMS4wMjktLjAxN2MuMjA3LS4wNDUuNTQtLjI3NC43MjEtLjI1OS0uMDMzLjE2My0uNDY0LjU0Ni0uNTY1LjcxN2E0LjI0Miw0LjI0MiwwLDAsMC0uMzg4LjljLS4yMjkuNzQxLS4wNjEuNzM5LS43MDkuMzExYTQuMjg0LDQuMjg0LDAsMCwwLTEuOTU3LS43MkMyMS4yMDksMTQuNzIyLDIwLjU5NCwxNC43NjcsMjAuNSwxNC43NDVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTE5LjkwNSwyMC43MzRhMi4wMDgsMi4wMDgsMCwwLDEtMS40LDEuNzEyYy0uMjA1LjA5MS0yLjAxOC43MzMtMi4wMzIuMzQ4LS4wMDctLjIsMS42MjQtLjk1NCwxLjgwOS0xLjExYTMuMzU1LDMuMzU1LDAsMCwwLC44NjctMS4wNzFjLjA1NS0uMTEyLjIzMi0uOTI1LjI3MS0uOTQzQzE5LjY0NCwxOS41NjQsMTkuOTA4LDIwLjYsMTkuOTA1LDIwLjczNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMmQyZDJcXFwiLz48cGF0aCBkPVxcXCJNMTEuMzczLDEyLjUzMmExMC42MjUsMTAuNjI1LDAsMCwxLDMuNzEtLjkxNCwxMC4yODIsMTAuMjgyLDAsMCwxLDEuODY1LjAyNGMuMzY2LjAzOSwxLjQ2OS4wNTQsMS43NC4zNDNhLjI1NS4yNTUsMCwwLDEtLjI3My4xNzNjLS4wMzcuMDc3LjI1MS4zNzEuMy40MjUtLjAzNC4wMzQtMS40NDUtLjQtMS41NzItLjQyNGExMC42MzIsMTAuNjMyLDAsMCwwLTIuMjgyLS4xMzQsMTYsMTYsMCwwLDAtMS44NDEuMTk0QTYuMjI0LDYuMjI0LDAsMCwxLDExLjM3MywxMi41MzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTIyLjUxMiwxMC43MzFhMS44ODgsMS44ODgsMCwwLDEtMS41MTctLjZjLS4yNDctLjM0OS0uNzM3LTEuNjkyLS4zODUtMi4wMjEuMjA5LS4yLjM4NC42NjIuNDg0Ljg0NkExMC44MjIsMTAuODIyLDAsMCwwLDIyLjUxMiwxMC43MzFaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDJkMmQyXFxcIi8+PHBhdGggZD1cXFwiTTI3Ljc4OCwxOS4yYTE5LjIxMiwxOS4yMTIsMCwwLDEtLjc0OSwzLjMxM2MtLjE3My0uMDc3LS4yNzUtLjc3OC0uNTYyLS45NWE0LjA3LDQuMDcsMCwwLDAsLjc2LTEuMTU0QzI3LjM4OSwyMC4xMDcsMjcuNTQsMTkuMzYzLDI3Ljc4OCwxOS4yWlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS45ODEsMTEuODQzYy0uMTMyLjI2OC0uOTMyLDEuMS0xLjExOC40ODFDMTguNzU2LDExLjk2OCwxOS43MzksMTEuNDgzLDE5Ljk4MSwxMS44NDNabS0uNzQ3LjQ1Yy4yMjguMDA2LjAxMi0uMjQ4LjAxMi0uMjY2QzE5LjI0NSwxMS45ODQsMTguODc4LDEyLjI5MywxOS4yMzQsMTIuMjkzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiLS1cIixcblx0XHRdLFxuXHR9LFxuXHRcIkFMXCI6IHtcblx0XHRjb2xvdXI6IFwiIzJlYTk4ZVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTExLjYxNiw3Ljk4NkExLjU1OSwxLjU1OSwwLDAsMCwxMC4xNiw3SDEwLjFhMS41NTgsMS41NTgsMCwwLDAtMS40NTYuOTg2TDIsMjVINS44MDZsMS4wMTUtMi44MzRoNi42MjFMMTQuNDU3LDI1aDMuOFpNNy45NDQsMTguOTU2bDIuMTg4LTYuMTExLDIuMTg4LDYuMTE2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzJlYTk4ZVxcXCIvPjxwYXRoIGQ9XFxcIk0yMy44MjksMjEuNjcxVjcuMTI5SDIwLjNWMjIuNzQ3QTIuMzQ2LDIuMzQ2LDAsMCwwLDIyLjU3LDI1SDMwVjIxLjY3MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyZWE5OGVcXFwiLz5cIixcblx0fSxcblx0XCJBTlRMUjRcIjoge1xuXHRcdGNvbG91cjogXCIjZTQ0YTMyXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTQuMTc3LDcuMjc4YTIuMDgsMi4wOCwwLDAsMSwzLjA0MS0uOEEzLjU3MSwzLjU3MSwwLDAsMSwxOC4yLDguMDIyYzEuMzU2LDMuMTIyLDIuOSw2LjE2NSw0LjExOSw5LjM0NS42NDUsMS41LDEuNDI5LDIuOTM4LDEuOTk0LDQuNDY4YTEuNDU1LDEuNDU1LDAsMCwxLTIuMjU4LDEuMzc2Yy0yLjgtMS41NzItNS42MjgtMy4wOTQtOC4zODUtNC43MzEsMi4wMDkuMDA4LDQuMDE4LS4wMDgsNi4wMjUuMDEzYTE5LjcwNywxOS43MDcsMCwwLDAtMS4yODgtMi45MThjLS43ODEtMS44NTgtMS42LTMuNy0yLjM1OC01LjU2NWE5Ljc4Myw5Ljc4MywwLDAsMC0xLjAzMiwyLjEyNWMtMS4zLDMuMTgyLTIuODcsNi4yNDEtNC4xMzYsOS40MzUtLjI4MS41OS0uNDI0LDEuMzQ0LTEuMDM1LDEuNjlhMS40NDcsMS40NDcsMCwwLDEtMi4wOTQtLjczOGMtLjI0MS0uNjEuMTUxLTEuMi4zODItMS43NDMuNzc5LTEuNzI1LDEuNjQ1LTMuNDEzLDIuMjgzLTUuMkMxMS42NSwxMi44LDEyLjkxNiwxMC4wNDEsMTQuMTc3LDcuMjc4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZlZmVmZVxcXCIvPjxwYXRoIGQ9XFxcIk0xMy44MTcsMi4yQTEzLjkyMywxMy45MjMsMCwwLDEsMjkuNTI2LDEyLjU0OWExMy43MzMsMTMuNzMzLDAsMCwxLTIuMDgyLDExLjUxOUExNC4wNzQsMTQuMDc0LDAsMCwxLDcuNzM4LDI3LjI5M2ExMy44NTIsMTMuODUyLDAsMCwxLTUuNjE1LTkuNDgzQTE0LjE1MiwxNC4xNTIsMCwwLDEsMy40NTEsOS44NSwxMy45NjEsMTMuOTYxLDAsMCwxLDEzLjgxNywyLjJtLjM1OSw1LjA4Yy0xLjI2MSwyLjc2Mi0yLjUyNiw1LjUyNS0zLjc2Miw4LjMtLjYzOCwxLjc4Ni0xLjUsMy40NzMtMi4yODMsNS4yLS4yMzEuNTQyLS42MjMsMS4xMzMtLjM4MiwxLjc0M2ExLjQ0NywxLjQ0NywwLDAsMCwyLjA5NC43MzhjLjYxLS4zNDcuNzUzLTEuMSwxLjAzNS0xLjY5LDEuMjY2LTMuMTk0LDIuODMzLTYuMjUzLDQuMTM2LTkuNDM1YTkuNzgzLDkuNzgzLDAsMCwxLDEuMDMyLTIuMTI1Yy43NTYsMS44NjgsMS41NzcsMy43MDcsMi4zNTgsNS41NjVhMTkuNzA3LDE5LjcwNywwLDAsMSwxLjI4OCwyLjkxOGMtMi4wMDctLjAyLTQuMDE2LS4wMDUtNi4wMjUtLjAxMywyLjc1NywxLjYzNyw1LjU4OCwzLjE1OSw4LjM4NSw0LjczMWExLjQ1NSwxLjQ1NSwwLDAsMCwyLjI1OC0xLjM3NmMtLjU2NS0xLjUyOS0xLjM0OS0yLjk3MS0xLjk5NC00LjQ2OC0xLjIyLTMuMTc5LTIuNzYyLTYuMjIzLTQuMTE5LTkuMzQ1YTMuNTcxLDMuNTcxLDAsMCwwLS45ODItMS41NDRBMi4wOCwyLjA4LDAsMCwwLDE0LjE3Nyw3LjI3OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlNDRhMzJcXFwiLz5cIixcblx0fSxcblx0XCJBcGFjaGUgQ29uZmlndXJhdGlvblwiOiB7XG5cdFx0Y29sb3VyOiBcIiNjOTIwMzdcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi01NjAyLjY4MlxcXCIgeTE9XFxcIjc2OC41NDFcXFwiIHgyPVxcXCItNTU5OC43MjdcXFwiIHkyPVxcXCI3NjMuOTE3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuNDIzLCAtMC45MDYsIC0wLjkwNiwgLTAuNDIzLCAzMDgyLjg1MywgLTQ3NDguNTUxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2Y2OTkyM1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zMTJcXFwiIHN0b3AtY29sb3I9XFxcIiNmNzlhMjNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuODM4XFxcIiBzdG9wLWNvbG9yPVxcXCIjZTk3ODI2XFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCItNTYzMS45NTJcXFwiIHkxPVxcXCI3NjkuMDUyXFxcIiB4Mj1cXFwiLTU2MDMuNzM3XFxcIiB5Mj1cXFwiNzY5LjA1MlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgwLjQyMywgLTAuOTA2LCAtMC45MDYsIC0wLjQyMywgMzA4Mi44NTMsIC00NzQ4LjU1MSlcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMzIzXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWUyMDY0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjYzXFxcIiBzdG9wLWNvbG9yPVxcXCIjYzkyMDM3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjc1MVxcXCIgc3RvcC1jb2xvcj1cXFwiI2NkMjMzNVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2U5NzgyNlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJjXFxcIiB4MT1cXFwiLTU2MjguNTQ2XFxcIiB5MT1cXFwiNzY2LjIyMVxcXCIgeDI9XFxcIi01NjExLjczM1xcXCIgeTI9XFxcIjc2Ni4yMjFcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMC40MjMsIC0wLjkwNiwgLTAuOTA2LCAtMC40MjMsIDMwODIuODUzLCAtNDc0OC41NTEpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMjgyNjYyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjA5NVxcXCIgc3RvcC1jb2xvcj1cXFwiIzY2MmU4ZFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43ODhcXFwiIHN0b3AtY29sb3I9XFxcIiM5ZjIwNjRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTQ5XFxcIiBzdG9wLWNvbG9yPVxcXCIjY2QyMDMyXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImRcXFwiIHgxPVxcXCItNTYzMC4zNjdcXFwiIHkxPVxcXCI3NjkuMzE2XFxcIiB4Mj1cXFwiLTU2MDIuMTUyXFxcIiB5Mj1cXFwiNzY5LjMxNlxcXCIgeGxpbms6aHJlZj1cXFwiI2JcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImVcXFwiIHgxPVxcXCItNTYyOC4zMVxcXCIgeTE9XFxcIjc2OC45MzNcXFwiIHgyPVxcXCItNTYxMy40ODJcXFwiIHkyPVxcXCI3NjguOTMzXFxcIiB4bGluazpocmVmPVxcXCIjY1xcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZlxcXCIgeDE9XFxcIi01NjMwLjM2N1xcXCIgeTE9XFxcIjc2Ni4zOTRcXFwiIHgyPVxcXCItNTYwMi4xNTJcXFwiIHkyPVxcXCI3NjYuMzk0XFxcIiB4bGluazpocmVmPVxcXCIjYlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZ1xcXCIgeDE9XFxcIi01NjMyLjExOFxcXCIgeTE9XFxcIjc2Ni41MzlcXFwiIHgyPVxcXCItNTYwMy45MDJcXFwiIHkyPVxcXCI3NjYuNTM5XFxcIiB4bGluazpocmVmPVxcXCIjYlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaFxcXCIgeDE9XFxcIi01NjMwLjM2N1xcXCIgeTE9XFxcIjc2NS41MjZcXFwiIHgyPVxcXCItNTYwMi4xNTJcXFwiIHkyPVxcXCI3NjUuNTI2XFxcIiB4bGluazpocmVmPVxcXCIjYlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaVxcXCIgeDE9XFxcIi01NjMwLjM2N1xcXCIgeTE9XFxcIjc2NS42MjVcXFwiIHgyPVxcXCItNTYwMi4xNTJcXFwiIHkyPVxcXCI3NjUuNjI1XFxcIiB4bGluazpocmVmPVxcXCIjYlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwialxcXCIgeDE9XFxcIi01NjE0LjUxNlxcXCIgeTE9XFxcIjc2NS42NDVcXFwiIHgyPVxcXCItNTYwOC4yOFxcXCIgeTI9XFxcIjc2NS42NDVcXFwiIHhsaW5rOmhyZWY9XFxcIiNiXFxcIi8+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfYXBhY2hlPC90aXRsZT48cGF0aCBkPVxcXCJNMTkuOTkzLDIuMTMzYTEwLjI2NywxMC4yNjcsMCwwLDAtMi4wNCwyLjA1NmwuOCwxLjUxYTE5LjczMywxOS43MzMsMCwwLDEsMS43MDgtMi4xNDRjLjA0NC0uMDQ5LjA2OC0uMDcyLjA2OC0uMDcybC0uMDY4LjA3MmExNy44NjUsMTcuODY1LDAsMCwwLTEuNiwyLjE3NCwzMC4xLDMwLjEsMCwwLDAsMy4xMTEtLjM4NSwzLjI4OCwzLjI4OCwwLDAsMC0uMy0yLjVTMjAuOSwxLjYsMTkuOTkzLDIuMTMzWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOC42MzgsMTAuNzQ5bC4wMTgsMC0uMTE1LjAxMy0uMDIxLjAwOVpcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmVcXFwiLz48cGF0aCBkPVxcXCJNMTcuODIxLDEzLjQ1NWMtLjA2Ni4wMTUtLjEzMi4wMjYtLjIuMDM2QzE3LjY4OSwxMy40ODEsMTcuNzU2LDEzLjQ2OSwxNy44MjEsMTMuNDU1WlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4yNywxOS41MjRjLjAwOS0uMDIzLjAxNy0uMDQ1LjAyNS0uMDY4cS4yNjQtLjcuNTIzLTEuMzU3LjI5MS0uNzQxLjU3NS0xLjQzNi4zLS43MzMuNTktMS40MTguMzA1LS43MTguNi0xLjM4NC4yNC0uNTQyLjQ3NC0xLjA0OS4wNzgtLjE2OS4xNTUtLjMzNS4xNTMtLjMyOS4zLS42NDUuMTM4LS4yOTEuMjc0LS41N2MuMDMtLjA2Mi4wNi0uMTIzLjA5LS4xODVsLjAxNS0uMDMtLjEuMDExLS4wNzgtLjE1NGMtLjAwNy4wMTUtLjAxNS4wMy0uMDIzLjA0NXEtLjIxMS40MTgtLjQxNy44NDUtLjExOS4yNDYtLjIzOC40OTUtLjMyOC42ODktLjY0NSwxLjM4OVQxMy43NjYsMTUuMXEtLjMuNy0uNTk0LDEuNHQtLjU2NywxLjM4N3EtLjI4OS43Mi0uNTYyLDEuNDI2LS4wNjIuMTU5LS4xMjMuMzE4LS4yMTkuNTY5LS40MjYsMS4xMjRsLjEyMy4yNDMuMTEtLjAxMi4wMTItLjAzM1ExMi4wMDgsMjAuMjE2LDEyLjI3LDE5LjUyNFpcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmVcXFwiLz48cGF0aCBkPVxcXCJNMTcuNTcsMTMuNVpcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmVcXFwiLz48cGF0aCBkPVxcXCJNMTcuMzA1LDE0LjgxOGwtLjMxNS4wNTVoMGwuMTYxLS4wMjVDMTcuMiwxNC44MzksMTcuMjUzLDE0LjgyOSwxNy4zMDUsMTQuODE4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2JlMjAyZVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy4zMDUsMTQuODE4bC0uMzE1LjA1NWgwbC4xNjEtLjAyNUMxNy4yLDE0LjgzOSwxNy4yNTMsMTQuODI5LDE3LjMwNSwxNC44MThaXFxcIiBzdHlsZT1cXFwiZmlsbDojYmUyMDJlO29wYWNpdHk6MC4zNDk5OTk5OTQwMzk1MzU1O2lzb2xhdGlvbjppc29sYXRlXFxcIi8+PHBhdGggZD1cXFwiTTE3LjU3MywxMy41aDBsLjA1LS4wMDdjLjA2OC0uMDEuMTM1LS4wMjIuMi0uMDM2bC0uMjQ4LjA0MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZTIwMmVcXFwiLz48cGF0aCBkPVxcXCJNMTcuNTczLDEzLjVoMGwuMDUtLjAwN2MuMDY4LS4wMS4xMzUtLjAyMi4yLS4wMzZsLS4yNDguMDQyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2JlMjAyZTtvcGFjaXR5OjAuMzQ5OTk5OTk0MDM5NTM1NTtpc29sYXRpb246aXNvbGF0ZVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4zOTQsOS42cS4zNjUtLjY4Mi43MzktMS4zMzIuMzg4LS42NzQuNzg0LTEuMzA1bC4wNDYtLjA3NXEuMzkyLS42Mi43OS0xLjE5MWwtLjgtMS41MS0uMTgyLjIyNWMtLjIzMS4yODgtLjQ3LjYtLjcxNi45MjUtLjI3Ny4zNy0uNTYyLjc2NC0uODUxLDEuMTc5LS4yNjcuMzgzLS41MzguNzg0LS44MDksMS4yLS4yMzEuMzUzLS40NjIuNzE3LS42OTIsMS4wOWwtLjAyNi4wNDJMMTUuNzE4LDEwLjlRMTYuMDUyLDEwLjI0NCwxNi4zOTQsOS42WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS42NTEsMjEuMTkycS0uMjA3LjU2OC0uNDE1LDEuMTU5bC0uMDA2LjAxNy0uMDU5LjE2N2MtLjA5My4yNjYtLjE3NS41LS4zNjEsMS4wNDlhMi4xMDcsMi4xMDcsMCwwLDEsLjc4Ni45MjYsMS42OCwxLjY4LDAsMCwwLS41NDQtMS4xNTQsMy42MjEsMy42MjEsMCwwLDAsMy40ODktMS40MiwyLjc5MSwyLjc5MSwwLDAsMCwuMTY1LS4zMTMsMS40NTEsMS40NTEsMCwwLDEtMS40LjUxM2wwLDAsMCwwYTQuMDU5LDQuMDU5LDAsMCwwLDIuMDQ2LTEuNjcyYy4xMTEtLjE3OC4yMTgtLjM3Mi4zMjgtLjU4N2EzLjMsMy4zLDAsMCwxLTMuMTA5LDEuMDFsLS44NDIuMDkyQzExLjcsMjEuMDUsMTEuNjc3LDIxLjEyMSwxMS42NTEsMjEuMTkyWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4wNDQsMTkuMzA2cS4yNzMtLjcwNi41NjItMS40MjYuMjc2LS42OS41NjctMS4zODd0LjU5NC0xLjRxLjMwOC0uNzExLjYyOS0xLjQxOXQuNjQ1LTEuMzg5cS4xMTgtLjI0OC4yMzgtLjQ5NS4yMDctLjQyNi40MTctLjg0NWMuMDA3LS4wMTUuMDE1LS4wMy4wMjMtLjA0NUwxNC42NzcsOC44NDdsLS4wNTEuMDgzYy0uMjQyLjQtLjQ4NC44LS43MjEsMS4yMTZzLS40NzUuODQ0LS43LDEuMjc2cS0uMjkxLjU0Ny0uNTY4LDEuMWwtLjExLjIyNWMtLjIyNy40NjctLjQzMi45MTgtLjYxNywxLjM1MnEtLjMxNS43MzctLjU1NiwxLjQwNmMtLjEwNy4yOTMtLjIuNTc2LS4yOTIuODQ3LS4wNzMuMjMyLS4xNDIuNDY0LS4yMDguN3EtLjIzNC44MTgtLjQsMS42MzFMMTEuNSwyMC43NDhxLjIwOC0uNTU0LjQyNi0xLjEyNFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMTAuNDM1LDE4Ljc1NWExNi4wNywxNi4wNywwLDAsMC0uMjcyLDEuOTc0YzAsLjAyMywwLC4wNDYtLjAwNS4wNjlhNC4xNSw0LjE1LDAsMCwwLTEuMi0xLjAyOSw1LjgyNSw1LjgyNSwwLDAsMSwxLjE3MiwyLjY5MywyLjY0MiwyLjY0MiwwLDAsMS0xLjMyNS0uMjI2LDIuNjYyLDIuNjYyLDAsMCwwLDEuMTMuNjg2LDMuMjQ3LDMuMjQ3LDAsMCwwLTEuNTcxLjc4MywzLjM1OSwzLjM1OSwwLDAsMSwxLjg2MS0uMzQyQzkuNTEsMjUuMzg5LDguNzkzLDI3LjYyNiw4LjA3NiwzMGEuNjI1LjYyNSwwLDAsMCwuNDI1LS40MTNjLjEyOC0uNDMuOTc2LTMuMjUxLDIuMzA2LTYuOTU5bC4xMTUtLjMxOC4wMzItLjA4OXEuMjExLS41ODMuNDM3LTEuMTlsLjEtLjI3NywwLS4wMDVMMTAuNDUsMTguNjg0QzEwLjQ0NSwxOC43MDcsMTAuNDM5LDE4LjczMSwxMC40MzUsMTguNzU1WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNlKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNS44OCwxMS4wNzhsLS4wOS4xODVxLS4xMzUuMjc5LS4yNzQuNTctLjE1LjMxNS0uMy42NDVjLS4wNTIuMTExLS4xLjIyMi0uMTU1LjMzNXEtLjIzNC41MDgtLjQ3NCwxLjA0OS0uMy42NjYtLjYsMS4zODQtLjI5MS42ODUtLjU5LDEuNDE4LS4yODQuNy0uNTc1LDEuNDM2LS4yNTkuNjYxLS41MjMsMS4zNTdjLS4wMDkuMDIzLS4wMTcuMDQ1LS4wMjUuMDY4cS0uMjYyLjY5My0uNTI5LDEuNDIybC0uMDEyLjAzMy44NDItLjA5Mi0uMDUtLjAwOWE2LDYsMCwwLDAsMy4yMS0xLjgwNyw3Ljk4NCw3Ljk4NCwwLDAsMCwxLjEtMS41MjQsMTMuMTM5LDEzLjEzOSwwLDAsMCwuNzA2LTEuNDY3Yy4xOTUtLjQ3Mi4zODItLjk4Mi41NjItMS41MzZhMy4wNTMsMy4wNTMsMCwwLDEtLjc4OC4yNzRjLS4wNTEuMDExLS4xLjAyMS0uMTU2LjAzcy0uMTA3LjAxOC0uMTYxLjAyNWgwYTMuNjY4LDMuNjY4LDAsMCwwLDEuOTYyLTEuOTEzLDMuMzQ0LDMuMzQ0LDAsMCwxLTEuMTMuNDk1Yy0uMDY2LjAxNS0uMTMyLjAyNi0uMi4wMzZsLS4wNS4wMDdoMGEzLjgyMSwzLjgyMSwwLDAsMCwuODM5LS40NjljLjA1MS0uMDM4LjEtLjA3OC4xNDgtLjEyLjA3My0uMDYzLjE0Mi0uMTI5LjIwOC0uMi4wNDItLjA0NC4wODMtLjA5LjEyMy0uMTM4YTMuMjcsMy4yNywwLDAsMCwuMjYzLS4zNjJjLjAyNS0uMDQuMDUtLjA4LjA3NC0uMTIyLjAzMS0uMDYuMDYxLS4xMTkuMDktLjE3OC4xMzEtLjI2NC4yMzYtLjUuMzE5LS43MDYuMDQyLS4xLjA3OC0uMi4xMDktLjI4OC4wMTMtLjAzNS4wMjUtLjA3LjAzNi0uMS4wMzMtLjEuMDYtLjE4Ny4wODEtLjI2NWEyLjYwNSwyLjYwNSwwLDAsMCwuMDYyLS4yNzVoMGExLjAxLDEuMDEsMCwwLDEtLjEwOS4wNzUsMy45NjUsMy45NjUsMCwwLDEtMS4xNjIuNGwuNzczLS4wODUtLjc3My4wODUtLjAxOCwwLS4xMTkuMDE5LjAyMS0uMDA5LTIuNjQ1LjI5WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNmKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOC44NTgsNS43M2MtLjIzNS4zNjEtLjQ5Mi43NzEtLjc2OCwxLjIzNmwtLjA0NC4wNzRxLS4zNTguNi0uNzU5LDEuMzI3LS4zNDYuNjI2LS43MTksMS4zNDctLjMyNi42MjktLjY3MiwxLjMzNmwyLjY0NS0uMjlBMy4yMTYsMy4yMTYsMCwwLDAsMTkuOTksOS42MmMuMDg5LS4xMjguMTc4LS4yNjIuMjY3LS40LjI3Mi0uNDI0LjUzOC0uODkxLjc3Ni0xLjM1NWExNC4wNzQsMTQuMDc0LDAsMCwwLC41ODgtMS4yOTQsNi44LDYuOCwwLDAsMCwuMjMzLS43Yy4wNDgtLjE4NC4wODYtLjM1OC4xMTUtLjUyNEEzMC4xNTIsMzAuMTUyLDAsMCwxLDE4Ljg1OCw1LjczWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNnKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy4xNDksMTQuODQ4Yy0uMDUzLjAwOS0uMTA3LjAxOC0uMTYxLjAyNWgwQzE3LjA0MiwxNC44NjYsMTcuMSwxNC44NTcsMTcuMTQ5LDE0Ljg0OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZTIwMmVcXFwiLz48cGF0aCBkPVxcXCJNMTcuMTQ5LDE0Ljg0OGMtLjA1My4wMDktLjEwNy4wMTgtLjE2MS4wMjVoMEMxNy4wNDIsMTQuODY2LDE3LjEsMTQuODU3LDE3LjE0OSwxNC44NDhaXFxcIiBzdHlsZT1cXFwiZmlsbDojYmUyMDJlO29wYWNpdHk6MC4zNDk5OTk5OTQwMzk1MzU1O2lzb2xhdGlvbjppc29sYXRlXFxcIi8+PHBhdGggZD1cXFwiTTE3LjE0OSwxNC44NDhjLS4wNTMuMDA5LS4xMDcuMDE4LS4xNjEuMDI1aDBDMTcuMDQyLDE0Ljg2NiwxNy4xLDE0Ljg1NywxNy4xNDksMTQuODQ4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNoKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy41NywxMy41bC4wNS0uMDA3LS4wNS4wMDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojYmUyMDJlXFxcIi8+PHBhdGggZD1cXFwiTTE3LjU3LDEzLjVsLjA1LS4wMDctLjA1LjAwN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZTIwMmU7b3BhY2l0eTowLjM0OTk5OTk5NDAzOTUzNTU7aXNvbGF0aW9uOmlzb2xhdGVcXFwiLz48cGF0aCBkPVxcXCJNMTcuNTcsMTMuNWwuMDUtLjAwNy0uMDUuMDA3WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy41NzIsMTMuNWgwWlxcXCIgc3R5bGU9XFxcImZpbGw6I2JlMjAyZVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy41NzIsMTMuNWgwWlxcXCIgc3R5bGU9XFxcImZpbGw6I2JlMjAyZTtvcGFjaXR5OjAuMzQ5OTk5OTk0MDM5NTM1NTtpc29sYXRpb246aXNvbGF0ZVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy41NzIsMTMuNWgwWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNqKVxcXCIvPlwiLFxuXHR9LFxuXHRcIkFwZXhcIjoge1xuXHRcdGNvbG91cjogXCIjMGY5YmQ3XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTMuNjUyLDguMzM4QTQuOTA2LDQuOTA2LDAsMCwxLDE3LjIsNi44MTRhNC45NTcsNC45NTcsMCwwLDEsNC4zMiwyLjU2LDUuOTcyLDUuOTcyLDAsMCwxLDIuNDQyLS41MTksNi4wODksNi4wODksMCwxLDEtMS4xODksMTIuMDYsNC40MTIsNC40MTIsMCwwLDEtNS43ODIsMS44MTZBNS4wMzQsNS4wMzQsMCwwLDEsNy42MzQsMjIuNWE0LjY0Niw0LjY0NiwwLDAsMS0uOTYuMSw0LjczMiw0LjczMiwwLDAsMS0yLjMzNy04LjgxMiw1LjQzOCw1LjQzOCwwLDAsMSw5LjMxNS01LjQ1M1xcXCIgc3R5bGU9XFxcImZpbGw6IzBmOWJkN1xcXCIvPjxwYXRoIGQ9XFxcIk0yNS4zNzYsMzAuOTY2aC0uNTYxYTQuNjU4LDQuNjU4LDAsMCwxLTEuMjg0LS4xMzcsMS45LDEuOSwwLDAsMS0uODE4LS40ODIsMS43MjYsMS43MjYsMCwwLDEtLjQ1NS0uODQzLDYuNzcsNi43NywwLDAsMS0uMTA2LTEuNDEzLDUuODg5LDUuODg5LDAsMCwwLS4wODQtMS4zMywxLDEsMCwwLDAtLjMtLjU0NCwxLjIyMywxLjIyMywwLDAsMC0uNjYtLjE3OWwtLjIzNi0uMDE0VjI0LjE0NWwuMjM2LS4wMTRhMS40ODIsMS40ODIsMCwwLDAsLjU0OS0uMS43MDYuNzA2LDAsMCwwLC4yNzMtLjI2NCwxLjM5NCwxLjM5NCwwLDAsMCwuMTgxLS41MjksNi42ODMsNi42ODMsMCwwLDAsLjA0NC0uOTM5LDguMTMyLDguMTMyLDAsMCwxLC4xMTItMS42NDMsMS43LDEuNywwLDAsMSwuNDQ4LS44NDEsMi4xNDQsMi4xNDQsMCwwLDEsLjkwNi0uNDkyLDQuNTE0LDQuNTE0LDAsMCwxLDEuMi0uMTE2aC41NjF2MS45aC0uMjVhMi41ODksMi41ODksMCwwLDAtLjc0My4wNTYuMjg0LjI4NCwwLDAsMC0uMTQ4LjExNy44MzkuODM5LDAsMCwwLS4wNTQuMzg2cTAsLjM3Mi0uMDUzLDEuNDEzYTMuNzQsMy43NCwwLDAsMS0uMTY2LDEuMDA5LDEuOTQ1LDEuOTQ1LDAsMCwxLS42OTMsMSwyLjAxLDIuMDEsMCwwLDEsLjcsMS4wNDQsNC42MjcsNC42MjcsMCwwLDEsLjE2MywxLjA3OWMuMDI3LjY1Ny4wNDEsMS4wNzQuMDQxLDEuMjU2YS44NzEuODcxLDAsMCwwLC4wNTcuNDA4QS4zNDMuMzQzLDAsMCwwLDI0LjQsMjlhMi4zODIsMi4zODIsMCwwLDAsLjcyOC4wNmguMjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTIxLjExOCwyNS43ODhWMjQuMzgyYTEuNzUyLDEuNzUyLDAsMCwwLC42NDUtLjEyOS45MzYuOTM2LDAsMCwwLC4zNzUtLjM1NCwxLjYyMSwxLjYyMSwwLDAsMCwuMjE3LS42MjRBNi44OCw2Ljg4LDAsMCwwLDIyLjQsMjIuM2E4LDgsMCwwLDEsLjEwNS0xLjU4NSwxLjQ1NiwxLjQ1NiwwLDAsMSwuMzgxLS43MjEsMS45LDEuOSwwLDAsMSwuOC0uNDMxLDQuMzM2LDQuMzM2LDAsMCwxLDEuMTI1LS4xMDVoLjMxMXYxLjRhMi44NzYsMi44NzYsMCwwLDAtLjgzNS4wNzMuNTMuNTMsMCwwLDAtLjI3Mi4yMjMsMS4wNzksMS4wNzksMCwwLDAtLjA4OC41MTNxMCwuMzY5LS4wNTMsMS40YTMuNTMxLDMuNTMxLDAsMCwxLS4xNTIuOTQsMS45MTgsMS45MTgsMCwwLDEtLjMxMy41OTUsMi40NywyLjQ3LDAsMCwxLS41ODMuNDg2LDIuMDQ1LDIuMDQ1LDAsMCwxLC41NjUuNDY2LDEuODY5LDEuODY5LDAsMCwxLC4zMzcuNjQ3LDQuNDEsNC40MSwwLDAsMSwuMTUyLDEuMDJxLjA0MS45NzMuMDQxLDEuMjQyYTEuMSwxLjEsMCwwLDAsLjA5NC41MzkuNTg0LjU4NCwwLDAsMCwuMjg0LjIzMSwyLjY0OSwyLjY0OSwwLDAsMCwuODIzLjA3OXYxLjQwNmgtLjMxMUE0LjQ3NCw0LjQ3NCwwLDAsMSwyMy42LDMwLjU5YTEuNjQ0LDEuNjQ0LDAsMCwxLS43MTItLjQxOSwxLjQ3OCwxLjQ3OCwwLDAsMS0uMzktLjcyNCw2LjYyMSw2LjYyMSwwLDAsMS0uMS0xLjM1Niw2LjM3NCw2LjM3NCwwLDAsMC0uMDk0LTEuNCwxLjIzMiwxLjIzMiwwLDAsMC0uMzktLjY3MUExLjQzMSwxLjQzMSwwLDAsMCwyMS4xMTgsMjUuNzg4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNzJhMFxcXCIvPjxwYXRoIGQ9XFxcIk0yNy4wMTEsMzAuOTY2SDI2LjQ1VjI5LjA1OWguMjVBMi4zMjksMi4zMjksMCwwLDAsMjcuNDI2LDI5YS4zMjMuMzIzLDAsMCwwLC4xNjUtLjEyNy44MTIuODEyLDAsMCwwLC4wNTgtLjM3OXEwLS4zNi4wNS0xLjM3NWEzLjcyNSwzLjcyNSwwLDAsMSwuMTczLTEuMDQ3LDIuMjIzLDIuMjIzLDAsMCwxLC4zODctLjcsMi4xNDUsMi4xNDUsMCwwLDEsLjMtLjI5MiwyLjE0MSwyLjE0MSwwLDAsMS0uNC0uNCwyLjYxMiwyLjYxMiwwLDAsMS0uNDIxLTEuMDkyLDE3LjUyNSwxNy41MjUsMCwwLDEtLjEtMS44NDEsMS4zNTcsMS4zNTcsMCwwLDAtLjA1My0uNDc5Yy0uMDA4LS4wMTYtLjAzMS0uMDYyLS4xMzYtLjEwNmEyLjUyNCwyLjUyNCwwLDAsMC0uNzU3LS4wNmgtLjI1VjE5LjJoLjU2MWE0Ljc5Myw0Ljc5MywwLDAsMSwxLjI4My4xMzMsMS44NDEsMS44NDEsMCwwLDEsLjgxOC40ODUsMS43ODEsMS43ODEsMCwwLDEsLjQ1My44NDMsNi42LDYuNiwwLDAsMSwuMTA5LDEuNDE0LDYuMzU5LDYuMzU5LDAsMCwwLC4wNzksMS4zMzYuOTkyLjk5MiwwLDAsMCwuMy41MzcsMS4yMjYsMS4yMjYsMCwwLDAsLjY2NC4xOGwuMjM2LjAxNHYxLjg3OWwtLjIzNi4wMTRhMS40ODIsMS40ODIsMCwwLDAtLjU0OS4xLjY4Ni42ODYsMCwwLDAtLjI3LjI2MiwxLjQ4NCwxLjQ4NCwwLDAsMC0uMTg2LjUzNCw2Ljc0Myw2Ljc0MywwLDAsMC0uMDQzLjkzMSw4LjM4Myw4LjM4MywwLDAsMS0uMTA4LDEuNjQ0LDEuNjk0LDEuNjk0LDAsMCwxLS40NDYuODQ2LDIuMTQzLDIuMTQzLDAsMCwxLS45MTMuNDkyQTQuNSw0LjUsMCwwLDEsMjcuMDExLDMwLjk2NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMzAuNzA4LDI1Ljc4OGExLjc1MiwxLjc1MiwwLDAsMC0uNjQ1LjEyOS45MTguOTE4LDAsMCwwLS4zNzIuMzU0LDEuNzI1LDEuNzI1LDAsMCwwLS4yMi42MjQsNi44Miw2LjgyLDAsMCwwLS4wNDcuOTczLDguMjcsOC4yNywwLDAsMS0uMSwxLjU4OCwxLjQzOSwxLjQzOSwwLDAsMS0uMzc4LjcyNCwxLjksMS45LDAsMCwxLS44MDkuNDMxLDQuMzM2LDQuMzM2LDAsMCwxLTEuMTI1LjEwNUgyNi43VjI5LjMxYTIuNjUyLDIuNjUyLDAsMCwwLC44Mi0uMDc5QS41NzIuNTcyLDAsMCwwLDI3LjgsMjksMS4wNSwxLjA1LDAsMCwwLDI3LjksMjguNXEwLS4zNTcuMDUtMS4zNjVhMy41MywzLjUzLDAsMCwxLC4xNTgtLjk3NiwxLjk3NiwxLjk3NiwwLDAsMSwuMzQzLS42MjFBMi4wMzgsMi4wMzgsMCwwLDEsMjksMjUuMDg1YTIuNDE2LDIuNDE2LDAsMCwxLS42MzMtLjU1MSwyLjMzOSwyLjMzOSwwLDAsMS0uMzc1LS45ODQsMTcuNTY0LDE3LjU2NCwwLDAsMS0uMDk0LTEuOCwxLjU3MSwxLjU3MSwwLDAsMC0uMDc5LS41ODYuNDg3LjQ4NywwLDAsMC0uMjY0LS4yMjYsMi44LDIuOCwwLDAsMC0uODUzLS4wNzl2LTEuNGguMzExYTQuNTc2LDQuNTc2LDAsMCwxLDEuMjEzLjEyMywxLjU4NywxLjU4NywwLDAsMSwuNzA5LjQxOSwxLjUyOSwxLjUyOSwwLDAsMSwuMzkuNzI3LDYuNDM2LDYuNDM2LDAsMCwxLC4xLDEuMzU2LDYuODQyLDYuODQyLDAsMCwwLC4wODgsMS40LDEuMjIzLDEuMjIzLDAsMCwwLC4zOTMuNjcxLDEuNDQ3LDEuNDQ3LDAsMCwwLC44LjIzMVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDcyYTBcXFwiLz5cIixcblx0fSxcblx0XCJBUExcIjoge1xuXHRcdGNvbG91cjogXCIjZDJkMmQyXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMzAsMjguMjc1LDE2LDIsMiwyOC4yNzVIMTQuMTYyVjMwaDMuNjc2VjI4LjI3NVpNMTcuODM4LDI0LjgyNlYxMy4xNjFsNi4yMTUsMTEuNjY1Wm0tOS44OTEsMCw2LjIxNS0xMS42NjVWMjQuODI2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiXHUyMzVEXCIsXG5cdFx0XSxcblx0fSxcblx0XCJBcHBsZVNjcmlwdFwiOiB7XG5cdFx0Y29sb3VyOiBcIiNhOGMyYWJcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xNy4xODEsNC40MzdBNS45OTMsNS45OTMsMCwwLDEsMjEuNTc5LDJhNS45NzksNS45NzksMCwwLDEtMS40NDcsNC40NzYsNC43MjksNC43MjksMCwwLDEtNC4xNywxLjk2MUE1LjIsNS4yLDAsMCwxLDE3LjE4MSw0LjQzN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNhOGMyYWJcXFwiLz48cGF0aCBkPVxcXCJNMTYuMiwxMC4wMzRjLjk0NiwwLDIuNy0xLjMsNC45ODktMS4zYTYuMjQ5LDYuMjQ5LDAsMCwxLDUuNDg0LDIuOCw2LjA4LDYuMDgsMCwwLDAtMy4wMjgsNS4zLDYuMjM1LDYuMjM1LDAsMCwwLDMuNzcyLDUuN3MtMi42MzcsNy40MjItNi4yLDcuNDIyYy0xLjYzNiwwLTIuOTA4LTEuMS00LjYzMS0xLjEtMS43NTcsMC0zLjUsMS4xNDQtNC42MzUsMS4xNDRDOC43LDMwLDQuNTg3LDIyLjk1OSw0LjU4NywxNy4zYzAtNS41NjgsMy40NzgtOC40ODksNi43NC04LjQ4OUMxMy40NDgsOC44MTEsMTUuMDkzLDEwLjAzNCwxNi4yLDEwLjAzNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNhOGMyYWJcXFwiLz5cIixcblx0XHRpbmxpbmVDb21tZW50OiBbXG5cdFx0XHRcIi0tXCIsXG5cdFx0XHRcIiNcIixcblx0XHRdLFxuXHR9LFxuXHRcIkFyZHVpbm9cIjoge1xuXHRcdGNvbG91cjogXCIjMmQ5MDk0XCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImFcXFwiIGN4PVxcXCI3NjcuMTc5XFxcIiBjeT1cXFwiNTE2OS41NDNcXFwiIHI9XFxcIjE0Ljk4OVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtNzE4LjExMiAtNDk1My45MTcpIHNjYWxlKDAuOTU1IDAuOTYyKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzM2YmFjMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzJkOTA5NFxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfYXJkdWlubzwvdGl0bGU+PHBhdGggZD1cXFwiTTI5LjY0NSwxNS45MjVBMTMuNzcsMTMuNzcsMCwxLDEsMTUuODc2LDIuMDU2LDEzLjgxOSwxMy44MTksMCwwLDEsMjkuNjQ1LDE1LjkyNVpcXFwiIHN0eWxlPVxcXCJzdHJva2U6IzAyNzk3ZTtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjEuMTM2NzIyODQ1NDk2OTI2N3B4O2ZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC41ODEsMTEuNjQ4YzIuNDEtLjA3NiwzLjM1OS44MzQsNC42MDUsMi4wNjkuMjg1LjI4Mi41NzkuNTkuOS45MjFsLjkyMi0uOTkxYTYuMjIzLDYuMjIzLDAsMCwxLDMuMjU2LTEuOTNjMS45MzktLjIxMSwzLjExOS0uMTIyLDQuMzExLjgxNGE1LjAyMyw1LjAyMywwLDAsMSwyLjI0NSwzLjksNS42NTMsNS42NTMsMCwwLDEtMy4yNSw1LjE1Niw1Ljk3NSw1Ljk3NSwwLDAsMS0zLjkxMy4xMzUsNy42NTYsNy42NTYsMCwwLDEtMy41NDEtMi45ODdjLTEuNjc4LDIuMTQyLTMuMTg3LDMuMjUzLTUuMjM1LDMuMTU1LTcuNDUyLS4zNTQtNi44NDItMTAuMDc1LS4zLTEwLjI0N1ptMS42NTcsNy45OTRhOS4xOTMsOS4xOTMsMCwwLDAsMi44NTYtMi45Yy0uNzQtMS4yNDMtMi4yMDktMi44MjQtMy40NTUtMy4xMzRhNC4zMjgsNC4zMjgsMCwwLDAtMy4yMjQuNzc3LDMuMzg0LDMuMzg0LDAsMCwwLS43NjIsMy42ODYsMy42NzQsMy42NzQsMCwwLDAsNC41ODUsMS41N1ptLTIuOTgtMy40ODcsMy4yNzguMDA1djEuMjFsLTMuMjgzLjAwNVptMTMuNDQ4LDMuNkEzLjg0MywzLjg0MywwLDAsMCwyNC45MzcsMTdhMy40NTgsMy40NTgsMCwwLDAtMS44NjMtMy4xMDksMy42NDgsMy42NDgsMCwwLDAtNC4yLjcyOCw3LjM2NCw3LjM2NCwwLDAsMC0xLjY0OSwyLjE1MUE4LjkzNiw4LjkzNiwwLDAsMCwxOS4yLDE5LjI1Miw0LjAyMiw0LjAyMiwwLDAsMCwyMi43MDYsMTkuNzU0Wm0tMS45NTUtMi4zNzYtMS4wODgtLjAwOCwwLTEuMjE3LDEuMDkxLDBWMTUuMDc1bDEuMTA3LS4wMDgtLjAwNywxLjA5MywxLjA4NSwwdjEuMTY1bC0xLjAyMS0uMDA4djEuMTJIMjAuNzUzWlxcXCIgc3R5bGU9XFxcInN0cm9rZTojMDAwO3N0cm9rZS13aWR0aDowLjEyMTAzMDk2NDgwOTI3NDgycHg7b3BhY2l0eTowLjE2ODA5OTk5OTQyNzc5NTQ7aXNvbGF0aW9uOmlzb2xhdGVcXFwiLz48cGF0aCBkPVxcXCJNNC45MTcsMTYuMzM3YzAsNS4zNDgsNy4zNTQsNy4zNCwxMC45ODcsMS44OTQsMy43NjUsNS42NDcsMTAuODI0LDMuMjgsMTAuODI0LTEuOVMxOS43LDguNjU2LDE1LjksMTQuNDQxYy0zLjYtNS43MTktMTAuOTg3LTMuNDUzLTEwLjk4NywxLjlabTEuOTMxLDBjMC0zLjg2LDUuNDU1LTUuMDc4LDcuOTkyLDAtMi41ODgsNC44ODktNy45OTIsMy44NTktNy45OTIsMFptMTAuMTE5LDBjMi4yODYtNS4xNzgsNy44ODktMy43NTEsNy44NzIuMDA4UzE5LjE4NiwyMS4yNzcsMTYuOTY3LDE2LjMzN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmY7c3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjAuMjQyMDYxOTI5NjE4NTQ5NjRweFxcXCIvPjxyZWN0IHg9XFxcIjguODk4XFxcIiB5PVxcXCIxNS43OTVcXFwiIHdpZHRoPVxcXCIzLjIzN1xcXCIgaGVpZ2h0PVxcXCIxLjA2N1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjAuNjQ0IDE2Ljg0NiAxOS41NzYgMTYuODQ2IDE5LjU3NiAxNS43MTIgMjAuNjQ0IDE1LjcxMiAyMC42NDQgMTQuNjQ0IDIxLjc3OSAxNC42NDQgMjEuNzc5IDE1LjcxMiAyMi44NDcgMTUuNzEyIDIyLjg0NyAxNi44NDYgMjEuNzc5IDE2Ljg0NiAyMS43NzkgMTcuOTE0IDIwLjY0NCAxNy45MTQgMjAuNjQ0IDE2Ljg0NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHR9LFxuXHRcIkFSTSBBc3NlbWJseVwiOiB7XG5cdFx0Y29sb3VyOiBcIiMwMDAwYmZcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjgzNi42M1xcXCIgeTE9XFxcIjM2LjIwNVxcXCIgeDI9XFxcIjg0My44MDJcXFwiIHkyPVxcXCIxNC40OFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSg1MjUuOTIyIDMwLjI0OSkgcm90YXRlKDE4MCkgc2NhbGUoMC42MDcgMC42MDcpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMC4yNzVcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX2Fzc2VtYmx5PC90aXRsZT48cGF0aCBkPVxcXCJNMTYsMmMtMS4yNDYsMy4wNTYtMiw1LjA1Ny0zLjM5MSw4LjAyMkEyMS44ODQsMjEuODg0LDAsMCwwLDE2LjIsMTMuMTU2YTE0Ljg1OCwxNC44NTgsMCwwLDEtNC0yLjI4M0MxMC40MywxNC41NzksNy42NDYsMTkuODU1LDIsMzBjNS4xODYtMi45OTQsOS4wMTItNC42NDgsMTIuNjkxLTQuOTY2VjI0LjJoLS44MzR2LS44MzdoLjgzNFYyNC4yaDEuNjc1VjIyLjUyMUgxNC42OTF2LS44MzRoLS44MzRWMjAuMDEzaC44MzR2LS44MzRoMS42NzV2LjgzNEgxNy4ydi44MzdoLS44Mzd2LS44MzdIMTQuNjkxdjEuNjc1aDEuNjc1di44MzRIMTcuMlYyNC4yaC0uODM3di43ODNjMy45OC4xLDguMDA2LDEuNzcyLDEzLjYzNCw1LjAyMS0uODYzLTEuNTg5LTEuNjM2LTMuMDIxLTIuMzcyLTQuMzg1YTI1LjUyNiwyNS41MjYsMCwwLDAtNC44MzMtMy4zMzNBMTQuNDM2LDE0LjQzNiwwLDAsMSwyNi42NSwyMy44QzE5LjE3LDkuODcyLDE4LjU2NSw4LjAyLDE2LDJaTTEwLjUxMSwxOS4xNzloMS42NzF2LjgzNGguODM3djUuMDIxaC0uODM3VjIyLjUyMUgxMC41MTF2Mi41MTJIOS42NzNWMjAuMDEzaC44MzdabTAsLjgzNHYxLjY3NWgxLjY3MVYyMC4wMTNabTcuNTI2LS44MzRoLjgzN3YuODM0aC44Mzd2LjgzN2guODM0di0uODM3aC44Mzd2LS44MzRoLjgzN3Y1Ljg1NWgtLjgzN1YyMC44NWgtLjgzN3YuODM3aC0uODM0VjIwLjg1aC0uODM3djQuMTg0aC0uODM3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwMDBiZlxcXCIvPjxwYXRoIGQ9XFxcIk0yMy44ODEsMTguNjQyYy02LjA2OS04LjIzNy03LjQ3Ni0xNC44NzYtNy44MzItMTYuNDYxQTE3NS4yMTcsMTc1LjIxNywwLDAsMCwyMy44ODEsMTguNjQyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZjtmaWxsLW9wYWNpdHk6MC4xNjU2ODA0NjgwODI0MjhcXFwiLz48cGF0aCBkPVxcXCJNMTYuMDUxLDIuMTIsMTUuNiwzLjIyN2MtLjE1OS4zOTEtLjMxMS43NjUtLjQ2MSwxLjEzMXMtLjMuNzI0LS40NDgsMS4wNzctLjMuNy0uNDQ4LDEuMDUzLS4zLjcwNi0uNDY1LDEuMDY2LS4zMjkuNzI5LS41MDYsMS4xMTEtLjM2Mi43NzgtLjU2MSwxLjE5M2MtLjAyOC4wNTctLjA2MS4xMjMtLjA4OS4xODFBMjEuODcyLDIxLjg3MiwwLDAsMCwxNi4yLDEzLjE1NmExNC44NzksMTQuODc5LDAsMCwxLTMuOTg5LTIuMjc2bC0uMTQuMjg3Yy0uMDY1LjEzMy0uMTQ0LjI4My0uMjEyLjQybC0uMTA2LjIxOWMtLjg3OCwxLjc5My0yLjAwNiwzLjk4NC0zLjUyNCw2LjgyMiwzLjU1MS0yLDcuMzgxLTQuODg3LDE0LjMzOC0yLjQtLjM0OS0uNjYxLS42Ny0xLjI4LS45NzEtMS44NjNzLS41ODEtMS4xMjgtLjg0MS0xLjY0NC0uNS0xLS43MjUtMS40NjMtLjQzMy0uOS0uNjI5LTEuMzEzLS4zOC0uODE4LS41NTQtMS4yLS4zMzktLjc1NC0uNS0xLjExOFMxOC4wNDcsNi45LDE3LjksNi41NDZzLS4yOTEtLjcwOS0uNDM0LTEuMDY2Yy0uMDM2LS4wOTEtLjA3My0uMTg2LS4xMDktLjI3N0MxNi45NDksNC4yNDcsMTYuNTM2LDMuMjU4LDE2LjA1MSwyLjEyWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPlwiLFxuXHR9LFxuXHRcIkFzY2lpRG9jXCI6IHtcblx0XHRjb2xvdXI6IFwiI2U0MDA0NlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTMwLDMwSDJWMkgzMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlNDAwNDZcXFwiLz48cGF0aCBkPVxcXCJNMjMuNzMxLDI0LjgzYS41ODkuNTg5LDAsMCwxLS43NjMtLjMzN0wxNi43MjQsOS4yNjksMTMuOTMsMTUuOTloMS44MzNhLjU5LjU5LDAsMCwxLS4wMjQsMS4xOEg4LjlhLjU5LjU5LDAsMCwxLC4wMjQtMS4xOGgzLjcyN2wwLS4wMTNMMTYuMTg0LDcuNWEuNTkxLjU5MSwwLDAsMSwuNTMzLS4zNjNoMGEuNTkyLjU5MiwwLDAsMSwuNTU3LjM2Nmw2Ljc4NSwxNi41NDYuMDA5LjAyMUEuNTkuNTksMCwwLDEsMjMuNzMxLDI0LjgzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNC41MTYsMTguNzkxSDcuNjc5YS41OS41OSwwLDAsMC0uMDI0LDEuMThIMTFMOS4zMDksMjQuMDQzYS41OS41OSwwLDAsMCwxLjA4NS40NjRsMC0uMDExLDEuODc1LTQuNTA5LjAwNS0uMDE2aDIuMjE1YS41OS41OSwwLDAsMCwuMDIzLTEuMThaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiQVNQLk5FVCAoQyMpXCI6IHtcblx0XHRjb2xvdXI6IFwiIzMzYTlkY1wiLFxuXHRcdGljb246IFwiPHRpdGxlPmZpbGVfdHlwZV9hc3B4PC90aXRsZT48cG9seWdvbiBwb2ludHM9XFxcIjIyLjc1IDIgNi4zNSAyIDYuMzUgMzAgMjkuNjUgMzAgMjkuNjUgOSAyMi43NSAyXFxcIiBzdHlsZT1cXFwiZmlsbDojYzVjNWM1XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNy4zNSAyNy43IDguNzUgMjcuNyA4Ljc1IDQuMyAyMC40NSA0LjMgMjAuNDUgMTEuMyAyNy40NSAxMS4zIDI3LjQ1IDI3LjcgMjcuMzUgMjcuN1xcXCIgc3R5bGU9XFxcImZpbGw6I2Y1ZjVmNVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4xLDMwLjk5NEExMS4wOTQsMTEuMDk0LDAsMSwxLDIzLjE5NCwxOS45LDExLjEwNiwxMS4xMDYsMCwwLDEsMTIuMSwzMC45OTRabTAtMjAuM0E5LjIsOS4yLDAsMSwwLDIxLjMsMTkuOSw5LjIxNiw5LjIxNiwwLDAsMCwxMi4xLDEwLjdaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzNhOWRjXFxcIi8+PHJlY3QgeD1cXFwiMi4wOTlcXFwiIHk9XFxcIjE5LjQ1NVxcXCIgd2lkdGg9XFxcIjIwLjAwM1xcXCIgaGVpZ2h0PVxcXCIwLjg5XFxcIiBzdHlsZT1cXFwiZmlsbDojMzNhOWRjO3N0cm9rZTojMzNhOWRjO3N0cm9rZS1taXRlcmxpbWl0OjEwXFxcIi8+PHBhdGggZD1cXFwiTTEyLjMyNSwxNS43NjNhMzEuOTMsMzEuOTMsMCwwLDEtOC40ODQtMS4xMWwuMjQyLS44MDdhMzEuMzc0LDMxLjM3NCwwLDAsMCwxNS45OTIsMGwuMjM5LjgwN0EyOC4wNzYsMjguMDc2LDAsMCwxLDEyLjMyNSwxNS43NjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzNhOWRjO3N0cm9rZTojMzNhOWRjO3N0cm9rZS1taXRlcmxpbWl0OjEwXFxcIi8+PHBhdGggZD1cXFwiTTQuMSwyNS43MjRsLS4yMzktLjgwN2EzMS42NTIsMzEuNjUyLDAsMCwxLDE2LjQ3MiwwbC0uMjQyLjgwN0EzMS4zOCwzMS4zOCwwLDAsMCw0LjEsMjUuNzI0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzMzYTlkYztzdHJva2U6IzMzYTlkYztzdHJva2UtbWl0ZXJsaW1pdDoxMFxcXCIvPjxwYXRoIGQ9XFxcIk04LjUzNiwyOS4wNTVBMjUuNDM4LDI1LjQzOCwwLDAsMSw4LDEwLjYwOGwuNzc2LjMzMWEyNC41NTgsMjQuNTU4LDAsMCwwLC41MzMsMTcuNzgzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzMzYTlkYztzdHJva2U6IzMzYTlkYztzdHJva2UtbWl0ZXJsaW1pdDoxMFxcXCIvPjxwYXRoIGQ9XFxcIk0xNS42LDI5LjA1NWwtLjc3Ni0uMzMzYTI0LjU1OSwyNC41NTksMCwwLDAsLjUzMS0xNy43ODNsLjc3Ni0uMzMxQTI1LjQ0MywyNS40NDMsMCwwLDEsMTUuNiwyOS4wNTVaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzNhOWRjO3N0cm9rZTojMzNhOWRjO3N0cm9rZS1taXRlcmxpbWl0OjEwXFxcIi8+PHJlY3QgeD1cXFwiMTEuNjU1XFxcIiB5PVxcXCI5Ljg5OFxcXCIgd2lkdGg9XFxcIjAuODg5XFxcIiBoZWlnaHQ9XFxcIjIwLjM3MVxcXCIgc3R5bGU9XFxcImZpbGw6IzMzYTlkYztzdHJva2U6IzMzYTlkYztzdHJva2UtbWl0ZXJsaW1pdDoxMFxcXCIvPlwiLFxuXHR9LFxuXHRcIkF1dG9Ib3RrZXlcIjoge1xuXHRcdGNvbG91cjogXCIjZDhkOGQ4XCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCI1NC42MDRcXFwiIHkxPVxcXCIxNjguMzg4XFxcIiB4Mj1cXFwiNTQuNjA0XFxcIiB5Mj1cXFwiMTk0Ljg4NVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMzguNjA0IC0xNjUuNjM2KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2Q4ZDhkOFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2EzYTNhM1xcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiNjguNzU2XFxcIiB5MT1cXFwiMjA5LjE1MlxcXCIgeDI9XFxcIjkxLjYzOFxcXCIgeTI9XFxcIjIwOS4xNTJcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTUwLjYwMSAtMTU5LjQ0OSkgc2NhbGUoMC44MzIgMC44MzcpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZDdkN2Q3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjVcXFwiIHN0b3AtY29sb3I9XFxcIiNlN2U3ZTdcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNkN2Q3ZDdcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX2F1dG9ob3RrZXk8L3RpdGxlPjxyZWN0IHg9XFxcIjJcXFwiIHk9XFxcIjIuODI0XFxcIiB3aWR0aD1cXFwiMjhcXFwiIGhlaWdodD1cXFwiMjYuMzUzXFxcIiByeD1cXFwiMy4wODhcXFwiIHJ5PVxcXCIzLjA4OFxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0yNi44NTYsMjkuMTgxSDUuMTQ0QTMuMTQ4LDMuMTQ4LDAsMCwxLDIsMjYuMDM3VjUuOTYzQTMuMTQ4LDMuMTQ4LDAsMCwxLDUuMTQ0LDIuODE5SDI2Ljg1NkEzLjE0OCwzLjE0OCwwLDAsMSwzMCw1Ljk2M1YyNi4wMzdBMy4xNDgsMy4xNDgsMCwwLDEsMjYuODU2LDI5LjE4MVpNNS4xNDQsMi45NjNhMywzLDAsMCwwLTMsM2gwVjI2LjAzN2EzLDMsMCwwLDAsMywzSDI2Ljg1NmEzLDMsMCwwLDAsMy0zVjUuOTYzYTMsMywwLDAsMC0zLTNaXFxcIiBzdHlsZT1cXFwiZmlsbDojOGQ4ZDhkXFxcIi8+PHJlY3QgeD1cXFwiNC4zMTNcXFwiIHk9XFxcIjQuNjQxXFxcIiB3aWR0aD1cXFwiMjMuMTY5XFxcIiBoZWlnaHQ9XFxcIjIxLjk0XFxcIiByeD1cXFwiMi41NzFcXFwiIHJ5PVxcXCIyLjU3MVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk0yNC45MTEsMjYuNjQxSDYuODg0QTIuNjM0LDIuNjM0LDAsMCwxLDQuMjUzLDI0LjAxVjcuMjEyQTIuNjM0LDIuNjM0LDAsMCwxLDYuODg0LDQuNTgxSDI0LjkxMWEyLjYzNCwyLjYzNCwwLDAsMSwyLjYzMSwyLjYzMXYxNi44QTIuNjM0LDIuNjM0LDAsMCwxLDI0LjkxMSwyNi42NDFaTTYuODg0LDQuN0EyLjUxNCwyLjUxNCwwLDAsMCw0LjM3Myw3LjIxMnYxNi44YTIuNTE0LDIuNTE0LDAsMCwwLDIuNTExLDIuNTExSDI0LjkxMWEyLjUxNCwyLjUxNCwwLDAsMCwyLjUxMS0yLjUxMVY3LjIxMkEyLjUxNCwyLjUxNCwwLDAsMCwyNC45MTEsNC43WlxcXCIgc3R5bGU9XFxcImZpbGw6I2Y4ZjhmOFxcXCIvPjxwYXRoIGQ9XFxcIk02LjE0NSwyMy45bDIuMzQzLTYuMWguODdsMi41LDYuMWgtLjkybC0uNzEyLTEuODQ4SDcuNjczTDcsMjMuOVpNNy45LDIxLjRIOS45NzRsLS42MzctMS43cS0uMjkxLS43Ny0uNDMzLTEuMjY1QTcuNzc2LDcuNzc2LDAsMCwxLDguNTc2LDE5LjZaXFxcIi8+PHBhdGggZD1cXFwiTTEzLjYwNywyMy45VjE3LjhoLjgwN3YyLjVoMy4xNzFWMTcuOGguODA3djYuMWgtLjgwN1YyMS4wMjFoLTMuMTdWMjMuOVpcXFwiLz48cGF0aCBkPVxcXCJNMjAuNDc4LDIzLjlWMTcuOGguODA3djMuMDI1bDMuMDMtMy4wMjVoMS4wOTRMMjIuODUsMjAuMjY3LDI1LjUyMiwyMy45SDI0LjQ1NmwtMi4xNzItMy4wODgtMSwuOTc0VjIzLjlaXFxcIi8+XCIsXG5cdH0sXG5cdFwiQXV0b0l0XCI6IHtcblx0XHRjb2xvdXI6IFwiIzVkODNhY1wiLFxuXHRcdGljb246IFwiPGNpcmNsZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCIxNlxcXCIgcj1cXFwiMTIuNTUxXFxcIiBzdHlsZT1cXFwiZmlsbDojNWQ4M2FjXFxcIi8+PHBhdGggZD1cXFwiTTIsMTZBMTQsMTQsMCwxLDEsMTYsMzAsMTQsMTQsMCwwLDEsMiwxNlpNMTYsNC43ODlBMTEuMjExLDExLjIxMSwwLDEsMCwyNy4yMTEsMTYsMTEuMjExLDExLjIxMSwwLDAsMCwxNiw0Ljc4OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmMGYwZjBcXFwiLz48cGF0aCBkPVxcXCJNMjQuNTc2LDIwLjE1NmwtNi40LTkuMjY0YTMuMTMxLDMuMTMxLDAsMCwwLS44MTktLjgxOSwyLjM2LDIuMzYsMCwwLDAtMi40NDIuMDIzLDMuNTQzLDMuNTQzLDAsMCwwLS44MTIuOEw3LjUzMywyMC4xNTZoMy43NTJsNC44MDgtNi44LDEuODM4LDIuNzFxLjI2LjM2OC41NDQuNzg5dC41LjdxLS4zNjgtLjAzMS0uODY1LS4wMzFoLTMuNTNsLTEuOTE0LDIuNjM0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2YwZjBmMFxcXCIvPlwiLFxuXHR9LFxuXHRcIkF2cm8gSURMXCI6IHtcblx0XHRjb2xvdXI6IFwiIzAwNDBmZlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIsMTEuNjQ5aC4wMjVhNC43ODUsNC43ODUsMCwwLDAsMi45MTEsMS4zMzZjMi4zMDguMjIxLDQuNTktLjQ4NSw2LjktLjMyNmE3LjAzLDcuMDMsMCwwLDEsMi42OC42NjRjLjUtLjMxOS45ODktLjY2MiwxLjQ4Ni0uOTg5LjUuMzI3Ljk4NC42NzQsMS40ODguOTg5YTYuODM0LDYuODM0LDAsMCwxLDIuNDg3LS42NWMxLjk5NS0uMTY3LDMuOTY3LjMwOCw1Ljk1Ny4zNTlhNS4yLDUuMiwwLDAsMCw0LjAyNi0xLjM4M0gzMHYuMjM2Yy0uMTc4Ljc0Ny0uODgyLDEuMTc2LTEuMjg0LDEuNzlhNC45NDgsNC45NDgsMCwwLDEtLjczMS43OTEsMy44LDMuOCwwLDAsMS0uNTY1Ljc0OCwyLjU1MSwyLjU1MSwwLDAsMC0uNTk0LjU0MSwyLjE4MSwyLjE4MSwwLDAsMS0uOTYuNzQ5LDEuMTQ5LDEuMTQ5LDAsMCwxLS41NjUuNTYsNi42OSw2LjY5LDAsMCwxLTEuOTQuMTg0Yy43MjMuNTQ4LDEuNSwxLjAyLDIuMjQ2LDEuNTM1Ljc4Mi41MTMsMS41NCwxLjA2MSwyLjMyNiwxLjU2OEg0LjA4OWMxLjUtMS4wNTgsMy4wNTctMi4wMzUsNC41NS0zLjFBNi44LDYuOCwwLDAsMSw2LjcsMTcuMDY1YTEuMTU1LDEuMTU1LDAsMCwxLS41NjktLjU2MiwyLjI4LDIuMjgsMCwwLDEtMS4wNDMtLjg2Yy0uMjY4LS4zLS42Ny0uNDY2LS44NTMtLjg0My0uMi0uNDM2LS42NTgtLjY2NC0uOTA5LTEuMDY3LS40LS42NDItMS4xMzctMS4wNzYtMS4zMjctMS44NDZ2LS4yMzltMi45MzksOC41MjhxMTEuMDU5LjAwOSwyMi4xMiwwYy0zLjY2OC0yLjUxLTcuMzc2LTQuOTYxLTExLjA1OS03LjQ0OC0zLjY4NCwyLjQ4Ny03LjM5Miw0Ljk0MS0xMS4wNjEsNy40NDlNNC4xNjcsMTMuMmE3Ljg0Miw3Ljg0MiwwLDAsMCwyLjg0LjczMWMxLjE2My4xMjMsMi4zNDEuMDQ2LDMuNS4yMzZhMi43LDIuNywwLDAsMSwxLjYwNy43ODFjLjY1OS0uNDUyLDEuMzMyLS44ODUsMS45ODctMS4zNDJsLjAxMi0uMDY0YTUuMjk0LDUuMjk0LDAsMCwwLTEuODc3LS41Yy0yLjY5My0uMzE2LTUuMzg3LjcxMi04LjA2Ny4xNm0xMy42NTIuMzU2Yy42ODguNDY2LDEuMzgyLjkyNSwyLjA3LDEuMzkyYTIuNDg4LDIuNDg4LDAsMCwxLDEuMy0uNzE5LDE5Ljg1OSwxOS44NTksMCwwLDEsMy4xMzctLjI0OCw5LjEwNSw5LjEwNSwwLDAsMCwzLjUtLjc2OGMtMi41ODIuNS01LjE2OC0uNDA5LTcuNzYxLS4yYTYuMjU2LDYuMjU2LDAsMCwwLTIuMjQ1LjU0NU0zLjMzOSwxMy4xNjZhNy4yNjQsNy4yNjQsMCwwLDAsMi43MjMsMS4zYy0uMjE5LS4xNTMtLjM3Ni0uNDE2LS42NTctLjQ1N2E3Ljk1NSw3Ljk1NSwwLDAsMS0yLjA2Ni0uODQ0bTIzLjMzMy44MjVjLS4zMTcuMDIzLS41LjMtLjczMy40NzNhNy4yMzIsNy4yMzIsMCwwLDAsMi43MjQtMS4zLDguMTA2LDguMTA2LDAsMCwxLTEuOTkxLjgyNG0tMjIuNS4xMjZhNS4xMjEsNS4xMjEsMCwwLDAsMi41ODksMS4xYy0uMTE1LS4xMjgtLjIwOS0uMzEyLS40LS4zMzRhMTAuNDU5LDEwLjQ1OSwwLDAsMS0yLjE5LS43NzFtMjEuNDY3Ljc2OGMtLjE4OS4wMjItLjI4NC4yLS4zOTQuMzM2YTUuMTg3LDUuMTg3LDAsMCwwLDIuNi0xLjEwOSwxMC40NzcsMTAuNDc3LDAsMCwxLTIuMi43NzNNNi4zLDE0LjIwNmEzLjI0MywzLjI0MywwLDAsMCwyLjQ0NS4zNTJjLS4xLS4wOC0uMTgxLS4yMTUtLjMyNS0uMjA2cS0xLjA2My0uMDQtMi4xMi0uMTQ2bTE3LjM1MS4xMzljLS4xNzEtLjAxOS0uMjkxLjEtLjQwNi4yMTFhMy4xMDgsMy4xMDgsMCwwLDAsMi40Mi0uMzUycS0xLC4xMTItMi4wMTQuMTQxbS0xNi43NDEuNTM4YTMuNjY5LDMuNjY5LDAsMCwwLDIuNDgyLjMxOSwxLjEwNywxLjEwNywwLDAsMC0uMjgxLS4zNzYsNS4xNTgsNS4xNTgsMCwwLDEtMi4yLjA1N20xNS43LjMxOGEzLjY3OCwzLjY3OCwwLDAsMCwyLjQ4Ny0uMzE5LDUuMTI3LDUuMTI3LDAsMCwxLTIuMi0uMDU3LDEuMSwxLjEsMCwwLDAtLjI4My4zNzZNNC44MzgsMTQuOTc3YTQuMTEsNC4xMSwwLDAsMCwyLjEzMy44NDFjLS4wNTctLjA4NC0uMTE0LS4xNjgtLjE3MS0uMjU0YTYuOTQ4LDYuOTQ4LDAsMCwxLTEuOTYyLS41ODdtMjAuMzYxLjU4OS0uMTY5LjI1M2E0LjE0MSw0LjE0MSwwLDAsMCwyLjEzNi0uODQzLDcuMDE1LDcuMDE1LDAsMCwxLTEuOTY3LjU5bS0xOC4xLS4xM2EuOC44LDAsMCwwLC41MzQuMzEsNy41NzksNy41NzksMCwwLDAsMi4wMzctLjA3M2MtLjAwOS0uMDMtLjAyNy0uMDktLjAzNi0uMTItLjQ1Ny0uMDUxLS45MjMuMDc0LTEuMzg1LjA0N0E3LjA1NCw3LjA1NCwwLDAsMSw3LjEsMTUuNDM3bTE2LjE5MS4xNTFhNi4yOCw2LjI4LDAsMCwwLS45MTMtLjA0MWwtLjA0Mi4xMjZhNy40MTYsNy40MTYsMCwwLDAsMi4wNDUuMDcyLjcuNywwLDAsMCwuNTIyLS4zMzEsNC4zNDksNC4zNDksMCwwLDEtMS42MTMuMTc0bS0xNy41Mi4zMjdhMy4xMiwzLjEyLDAsMCwwLDEuNzU0LjQ4MWMtLjA2NS0uMjQtLjMzNC0uMi0uNTIzLS4yMzYtLjQxOS0uMDQxLS44MTYtLjE4Ni0xLjIzMS0uMjQ2TTI1LDE2LjE2M2MtLjE4OC4wNDEtLjQ1Mi0uMDA2LS41MjEuMjMyYTIuODc0LDIuODc0LDAsMCwwLDEuNzMyLS40ODJjLS40LjA3OS0uOC4yMDctMS4yMTEuMjUxTTcuNzM1LDE2LjExOWExLDEsMCwwLDAsLjc4OS4yNzUsOS4zMzEsOS4zMzEsMCwwLDAsMS4zMjUtLjE1OGMtLjAyMS0uMDkzLS4wMDktLjI3OC0uMTYzLS4yMjhhOS45ODMsOS45ODMsMCwwLDEtMS45NTEuMTExbTE0LjQxNS4xMThhOC4xNTcsOC4xNTcsMCwwLDAsMS40MTIuMTU0LjkuOSwwLDAsMCwuNy0uMjc0LDkuMzg3LDkuMzg3LDAsMCwxLTEuOTM0LS4xMWMtLjE2LS4wNi0uMTU1LjEzMi0uMTc2LjIzbS0xNS40MzguNDRhMS45NjIsMS45NjIsMCwwLDAsMS4zLjE4MWwtLjA5MS0uMTI2Yy0uNC4wMDYtLjgwNy0uMDIyLTEuMjA5LS4wNTVtMS42MTUuMDQzYTEuMDMsMS4wMywwLDAsMCwuNzE2LjI5NGMuMTc5LS4xMjUuMzU4LS4yNTIuNTMxLS4zODZhNS43NDcsNS43NDcsMCwwLDEtMS4yNDcuMDkybTE0LjEtLjA5M2MuMjM3LjE0NC40NjcuNDc3Ljc4Mi4zNDUuMTY2LS4wNS4zNjktLjA4OS40NjEtLjI1N2E1LjI3MSw1LjI3MSwwLDAsMS0xLjI0My0uMDg4bTEuNzEzLjI2M2EyLjAwNywyLjAwNywwLDAsMCwxLjE0NS0uMjEzLDEwLjI2OSwxMC4yNjksMCwwLDEtMS4xNDQuMDQ5QzIzLjk5MywxNi42NjcsMjMuOTg0LDE2Ljk2MSwyNC4xMzgsMTYuODlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA0MGZmXFxcIi8+PHBhdGggZD1cXFwiTTcuNDM1LDE4Ljg4NlExMS43MTksMTYuMDEzLDE2LDEzLjEzN2w5LjMsNi4yNDRjLjIyMS4xNDcuNDM5LjMuNjQ4LjQ2NHEtOS45NDctLjAxLTE5Ljg5NCwwYy40NDMtLjM0NC45Mi0uNjQsMS4zODMtLjk1OG04LjI1NS01LjA2NmMtLjQ1NywxLjg1OS0uOTA3LDMuNzE5LTEuMzc1LDUuNTc2LjUyLjAxNSwxLjA0MS4wMTIsMS41NjIsMHEtLjAxMy0yLjg0MSwwLTUuNjhsLS4xODQuMW0tMi41LDEuNjg0Yy4yNTUuODU5LjQ4LDEuNzI4Ljc2MywyLjU3OS4yODktMS4yMzguNi0yLjQ3MS45LTMuNzA3LS41NS4zODYtMS4xMTQuNzUtMS42NjgsMS4xMjltMy4zNTctLjg3M2MtLjAwNi42ODIsMCwxLjM2NCwwLDIuMDQ2YTIuMSwyLjEsMCwwLDAsMS4wMTQtLjI1NGMuMTkzLS4xNDUuMS0uNDA5LjAxMS0uNTg2YTQuMjc2LDQuMjc2LDAsMCwwLTEuMDI0LTEuMjA3TTE4LjMyNywxNi40Yy0uMS41NDQtLjY2Ni43OTItMS4xNTEuOS40NzQuNy45NiwxLjM4OSwxLjQxNiwyLjEuNDY5LjAyNC45NC4wMTEsMS40MTEuMDA5YTEuNjMxLDEuNjMxLDAsMCwxLC4xNi0yLjk3NmMtLjgzNC0uNi0xLjctMS4xNC0yLjU0NC0xLjcyNy4zNDkuNS44MzEsMS4wMzcuNzA4LDEuN20tNi44MjIuMjQyYy4yNjcuOTIxLjUyOSwxLjg0NS43OTQsMi43NjcuNDQsMCwuODguMDA4LDEuMzIxLS4wMDctLjMzOS0xLjE2MS0uNjg1LTIuMzE5LTEuMDA5LTMuNDg0LS4zODUuMjE1LS43MzcuNDgyLTEuMS43MjRtOC44LjQ1MmEuOTQ2Ljk0NiwwLDAsMCwuMDU3LDEuN2MuNTMzLjA5Ljg1NS0uNTMzLjc3OS0uOTktLjAyNi0uNC0uNC0uODYxLS44MzYtLjcxNE03LjQsMTkuNHExLjMyNC4wMTgsMi42NSwwYy4yNTYtLjcuNDEzLTEuNDY4LjYyOS0yLjItMS4xLjcxNS0yLjE4NywxLjQ2MS0zLjI3OSwyLjE5NG0xNC4zNzctMS45YTEuNjE2LDEuNjE2LDAsMCwxLS44NzYsMS45YzEuMjMzLjAxOCwyLjQ2NS4wMTUsMy43LDAtLjkzNC0uNjQ0LTEuODgzLTEuMjY2LTIuODIyLTEuOW0tNS4yMjMuMTE1Yy0uMDEuNiwwLDEuMiwwLDEuOC40MTUsMCwuODMxLDAsMS4yNDgsMC0uNDE5LS42LS44LTEuMjE5LTEuMjQzLTEuNzk0bS01LjU0Ni45NDFoLjM0NmMtLjA1NS0uMTg3LS4xMDgtLjM3Ni0uMTY2LS41NjJhMy43NTEsMy43NTEsMCwwLDAtLjE4MS41NjNtLS4xOC42OTNjLS4wMTUuMDQtLjA0NS4xMTktLjA2MS4xNTkuMjc1LS4wMjYuNTkuMDcxLjg0Mi0uMDVDMTEuNDUzLDE5LjExMiwxMS4wNzQsMTkuMjc1LDEwLjgyNiwxOS4yNDRaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA0MGZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiQVdLXCI6IHtcblx0XHRjb2xvdXI6IFwiI2QyZDJkMlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTI2LjkyNSwyNy43MzdDMjMuNDMxLDI2LjEsMjQuNjA2LDE0LjU4OCwxMy44MSw4LjMxOSwxNC4wODksNS43OTIsMTQuNzU4LS41LDcuOTYxLDMsNi44NDUsMy4xMjgsNC45MDcsMi4zMzEsNCw0LjgzMXYuMTE0QzE2LjkxOCwzLjkuMDg4LDEwLjUzLDE2Ljc1LDI1Ljg0NGMtLjM3My4xNzYtLjY3NC0uMzI1LTEuOTcuMWwtLjAxNC4wMTZjLTEuNzIyLDEuMTM1LDEuOTMzLjc2OCw0LjE1NCwxLjI3NC0xLjYxMS40MTctNS41OTQtMS4xMzctNi4zLDEuNjQ1Ljg3Ny0uMzcsMSwuMzI5LDEuMDc2LDEuMDc3QTI2LjI3NywyNi4yNzcsMCwwLDEsMjIuMzc5LDI3LjVjMS4xLjI4NSw0LjExOCwyLjA0OSw1LjEyMi41NTFDMjcuNTE5LDI3LjkzLDI3LjIyMSwyNy44NzYsMjYuOTI1LDI3LjczN1pcXFwiLz48cGF0aCBkPVxcXCJNMTAuNDQ2LDIuOTdsLS4xMjEuMDg4YS4yNjYuMjY2LDAsMCwwLS4wMTEuMzc3LjIxMS4yMTEsMCwwLDAsLjA0NS4wMzkuNDE2LjQxNiwwLDAsMCwuNTIxLS4wNjMuMjYzLjI2MywwLDAsMCwuMDc4LS4zNjRsLS4wMS0uMDE0Yy0uMDc2LS4xNDMtLjE2My0uMTc3LS4zNC0uMTI3QzEwLjU1MywyLjkyNSwxMC41LDIuOTQ2LDEwLjQ0NiwyLjk3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0xOCwyNi4zNjhjLjE1MS0uMDQxLjMxOC0uODI4LjE3NC0uOTQ5QTYuMjksNi4yOSwwLDAsMCwxOS40LDI2LjQ4NWMxLjAyMywxLjAwNywyLjY2NS0uMDMyLDMuNDgyLjc1OWExMC43MzYsMTAuNzM2LDAsMCwwLDEuOTU3LDEuMDI3Yy0uMTM5LS4xNTEtLjAyOS0uMTQ0LjE3OS0uMDExLS4xMy0uMzM4LTQuNDIxLTUuMTU2LTUuMjI2LTcuMTguMDk1LjI5My0xLjYwOC0uODI0LTIuMDc2LTEuNDE5LS4wMjguMDU2LS4wOTItLjI1MS0uMjI4LS40MzQtLjA0MS4wNS0uMi0uNDMzLS4zLS43MjguMDM3LjE4Ny0uNDYyLS41LS42NS0uODE4LS4wNTYuMDktLjcxOS4zNzItLjgwOS4yODYtLjcyOS0uNCwyLjUyOSw0LjA2Ni4xMjIsMi41NTkuNjc2LjY4My42MTQuNC0xLjA5NS0uODUyLjM2NC40NTItLjMxNy4zMTItMS41NTMtMS41MjMuMTg2LjItLjIxOC0uNTc2LS4yMTgtLjU3NmEyLjY5MiwyLjY5MiwwLDAsMC0uMTMzLS40ODNjLS4wNTYtLjMyLS4yNDEtLjcyMy0uMTItLjY1LTEuNDQ0LTEuNTU2LDEuMzE0LTMuMy43MTktMy42NzEtLjExMSwwLS4wMjcuMDE3LS4xNTEtLjEwNi0uMDksMC0uNDY4LjI4NS0uNTg3LS4yMzQuMDA2LjEzMi0uMDM0LjQwNi0uMTUzLS4xLS4wMjMuMDUyLjAxNS4xLS4wMy4xNDUtLjIyNS0uNTc2LS43NzItMS42LTEuMjE3LTIuNTM5LS4xNTguMTU1LS4xMzgtLjA3Ni0uMTkzLTEuMDkyLjA1My4xNDQtLjIyNSwxLjkyMS0uMi4xMy0uMTI4LjAwNy4xMDgsMS4yNTgtLjM0My4yMS0uMTQxLjA1LS4zMDUtLjM2My0uMzQxLTEuMTc4LS4wNDguNjIzLS4yOS4xODctLjUtLjkyMy0uMjY5LjUwOC0xLjYsMS43NDMtLjMzMyw3LjYyMi0uMDUzLS4zMTMuMTg2LjM0MS43NTUsMi40MjcuMDIxLS4wMzktLjAyMi0uMDgzLjAzOC0uMTMxYTYuMzI0LDYuMzI0LDAsMCwwLC42NzcsMS4zNjVjLjU0NC42NTguOTk1LDIuMDc0LjgsMS4yNzdhMTEuODY3LDExLjg2NywwLDAsMCwyLjU1NCwzLjI0OUEzNC40MjMsMzQuNDIzLDAsMCwwLDE4LDI2LjM2OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMmQyZDJcXFwiLz48cGF0aCBkPVxcXCJNMTAuODIzLDIuNTU3YS4yOTEuMjkxLDAsMCwwLS4wNTEtLjAyMmMtLjIyMS0uMDQtLjQyOS4xNTMtLjY1NC4wMzItLjE0NS4wODUtLjI1Ny0uMDM2LS4zNzUtLjA3M2EuMjI0LjIyNCwwLDAsMC0uMi4wMTQsNS44MjMsNS44MjMsMCwwLDAtLjgxNC41ODIsMS4wMzcsMS4wMzcsMCwwLDAtLjI3My40NDljLS4wMjEuMDQ4LS4wMzcuMTI2LjA1LjEzN2EyLjMsMi4zLDAsMCwwLC42ODIuMDQ1Yy4xNzctLjAyOC4yNzctLjE1Mi40MTgtLjIyMWExLjIsMS4yLDAsMCwwLC41OTItLjY4Yy4wNjQtLjE3NS4xNjEtLjE2Ny4yOC0uMlMxMC43LDIuNjIsMTAuODIzLDIuNTU3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0xMC4zMjUsMy4wNThsLjEyMS0uMDg4YS4xMTcuMTE3LDAsMCwxLC4xMi4wNjRjLjA0NC4xLjEwNi4xMTIuMTkzLjA0Ny4wMzMtLjAyNS4wNzEtLjA1OC4xMTgtLjAyN2EuMTE5LjExOSwwLDAsMSwuMDQxLjEyOC4yNzYuMjc2LDAsMCwxLS4xODcuMjQ4LjI2Ni4yNjYsMCwwLDEtLjMtLjAzQzEwLjM0MSwzLjMwOCwxMC4yNiwzLjIsMTAuMzI1LDMuMDU4WlxcXCIvPlwiLFxuXHR9LFxuXHRcIkJhdGNoXCI6IHtcblx0XHRjb2xvdXI6IFwiI2Q5YjQwMFwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTI5LjQsMjcuNkgyLjVWNC41SDI5LjRabS0yNS45LTFIMjguNFY1LjVIMy41WlxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiNi4wNzcgMTkuMzE2IDUuNTIyIDE4LjQ4NCAxMC4zNjYgMTUuMjU1IDUuNDc5IDExLjE4NCA2LjEyIDEwLjQxNiAxMi4wMzUgMTUuMzQ0IDYuMDc3IDE5LjMxNlxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPjxyZWN0IHg9XFxcIjEyLjdcXFwiIHk9XFxcIjE4LjJcXFwiIHdpZHRoPVxcXCI3LjhcXFwiIGhlaWdodD1cXFwiMVxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPjxyZWN0IHg9XFxcIjIuNVxcXCIgeT1cXFwiNS41XFxcIiB3aWR0aD1cXFwiMjYuOVxcXCIgaGVpZ2h0PVxcXCIxLjlcXFwiIHN0eWxlPVxcXCJmaWxsOiNkOWI0MDBcXFwiLz5cIixcblx0fSxcblx0XCJDI1wiOiB7XG5cdFx0Y29sb3VyOiBcIiMzNjg4MzJcIixcblx0XHRpY29uOiBcIjx0aXRsZT5maWxlX3R5cGVfY3NoYXJwPC90aXRsZT48cGF0aCBkPVxcXCJNMTkuNzkyLDcuMDcxaDIuNTUzVjkuNjI0SDI0LjlWNy4wNzFoMi41NTJWOS42MjRIMzB2Mi41NTJoLTIuNTV2Mi41NTFIMzBWMTcuMjhIMjcuNDQ5djIuNTUySDI0Ljl2LTIuNTVsLTIuNTUsMCwwLDIuNTUySDE5Ljc5M3YtMi41NWwtMi41NTMsMFYxNC43MjVoMi41NTNWMTIuMTc5SDE3LjI0VjkuNjIyaDIuNTU0Wm0yLjU1Myw3LjY1OEgyNC45VjEyLjE3NkgyMi4zNDVaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzY4ODMyXFxcIi8+PHBhdGggZD1cXFwiTTE0LjY4OSwyNC4wMTNhMTAuMiwxMC4yLDAsMCwxLTQuNjUzLjkxNSw3LjYsNy42LDAsMCwxLTUuODktMi4zMzZBOC44MzksOC44MzksMCwwLDEsMiwxNi4zNjcsOS40MzYsOS40MzYsMCwwLDEsNC40MTIsOS42NDhhOC4xODEsOC4xODEsMCwwLDEsNi4yNTktMi41NzcsMTEuMSwxMS4xLDAsMCwxLDQuMDE4LjYzOHYzLjc0NWE2LjgxLDYuODEsMCwwLDAtMy43MjMtMS4wMzYsNC43OTMsNC43OTMsMCwwLDAtMy43LDEuNTI5LDUuODc5LDUuODc5LDAsMCwwLTEuNDA3LDQuMTQyLDUuNzc0LDUuNzc0LDAsMCwwLDEuMzI4LDMuOTkyLDQuNTUxLDQuNTUxLDAsMCwwLDMuNTc1LDEuNDg3LDcuMjg4LDcuMjg4LDAsMCwwLDMuOTI3LTEuMTA4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzM2ODgzMlxcXCIvPlwiLFxuXHR9LFxuXHRcIkNcIjoge1xuXHRcdGNvbG91cjogXCIjMDA1ZjkxXCIsXG5cdFx0aWNvbjogXCI8dGl0bGU+ZmlsZV90eXBlX2M8L3RpdGxlPjxwYXRoIGQ9XFxcIk0xMC42NzYsMTUuOTczYTEwLjA1MiwxMC4wNTIsMCwwLDAsMS4xNzUsNS4xNTEsNS40NDYsNS40NDYsMCwwLDAsNi4zMDYsMi40MDgsNC4yODQsNC4yODQsMCwwLDAsMy4wOS0zLjZjLjEwNy0uNi4xMDktLjYxLjEwOS0uNjEsMS43MzcuMjUxLDQuNTM3LjY1OCw2LjI3NC45MDZsLS4xMS40NGExMS4yNTYsMTEuMjU2LDAsMCwxLTIuNyw1LjM5LDkuNDM5LDkuNDM5LDAsMCwxLTUuMzY2LDIuNjg4LDE0LjYxLDE0LjYxLDAsMCwxLTguMjc3LS44MTlBMTAuMTUxLDEwLjE1MSwwLDAsMSw1LjQsMjEuNjg3YTE2LjIyNSwxNi4yMjUsMCwwLDEsLjAxOS0xMS40NSwxMC41MzgsMTAuNTM4LDAsMCwxLDguOTYzLTcuMDU0LDEzLjM1MywxMy4zNTMsMCwwLDEsNi42NjYuNTU1LDkuNTcxLDkuNTcxLDAsMCwxLDYuMTY3LDYuOWMuMDk0LjM1Mi4xMTQuNDE3LjExNC40MTctMS45MzIuMzUxLTQuMzE5LjgtNi4yMzgsMS4yMTUtLjM2Mi0xLjkxNS0xLjI2NS0zLjQyOC0zLjItMy45YTUuMjYzLDUuMjYzLDAsMCwwLTYuNjE2LDMuNTcsMTAuNDksMTAuNDksMCwwLDAtLjM4NSwxLjQzOUExMi4zMSwxMi4zMSwwLDAsMCwxMC42NzYsMTUuOTczWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNWY5MVxcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiLy9cIixcblx0XHRdLFxuXHR9LFxuXHRcIkMrK1wiOiB7XG5cdFx0Y29sb3VyOiBcIiM5ODRjOTNcIixcblx0XHRpY29uOiBcIjx0aXRsZT5maWxlX3R5cGVfY3BwPC90aXRsZT48cGF0aCBkPVxcXCJNMTQuNzQyLDI0LjA0N2ExMC4yNDIsMTAuMjQyLDAsMCwxLTQuNjczLjkxOUE3LjYyOCw3LjYyOCwwLDAsMSw0LjE1NSwyMi42Miw4Ljg3Niw4Ljg3NiwwLDAsMSwyLDE2LjM2OSw5LjQ3Niw5LjQ3NiwwLDAsMSw0LjQyMiw5LjYyMWE4LjIxNiw4LjIxNiwwLDAsMSw2LjI4NS0yLjU4OCwxMS4xNTEsMTEuMTUxLDAsMCwxLDQuMDM1LjY0MXYzLjc2MUE2LjgzOSw2LjgzOSwwLDAsMCwxMSwxMC4zOTUsNC44MTMsNC44MTMsMCwwLDAsNy4yODgsMTEuOTNhNS45LDUuOSwwLDAsMC0xLjQxMyw0LjE1OUE1LjgsNS44LDAsMCwwLDcuMjA5LDIwLjFhNC41Nyw0LjU3LDAsMCwwLDMuNTksMS40OTMsNy4zMTksNy4zMTksMCwwLDAsMy45NDMtMS4xMTNaXFxcIiBzdHlsZT1cXFwiZmlsbDojOTg0YzkzXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNy4xMTIgMTQuODI5IDE3LjExMiAxMi40ODUgMTkuNDU2IDEyLjQ4NSAxOS40NTYgMTQuODI5IDIxLjggMTQuODI5IDIxLjggMTcuMTcyIDE5LjQ1NiAxNy4xNzIgMTkuNDU2IDE5LjUxNSAxNy4xMTIgMTkuNTE1IDE3LjExMiAxNy4xNzIgMTQuNzcgMTcuMTcyIDE0Ljc3IDE0LjgyOCAxNy4xMTIgMTQuODI5XFxcIiBzdHlsZT1cXFwiZmlsbDojOTg0YzkzXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNS4zMTMgMTQuODI5IDI1LjMxMyAxMi40ODUgMjcuNjU3IDEyLjQ4NSAyNy42NTcgMTQuODI5IDMwIDE0LjgyOSAzMCAxNy4xNzIgMjcuNjU3IDE3LjE3MiAyNy42NTcgMTkuNTE1IDI1LjMxMyAxOS41MTUgMjUuMzEzIDE3LjE3MiAyMi45NzEgMTcuMTcyIDIyLjk3MSAxNC44MjggMjUuMzEzIDE0LjgyOVxcXCIgc3R5bGU9XFxcImZpbGw6Izk4NGM5M1xcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiLy9cIixcblx0XHRdLFxuXHR9LFxuXHRcIkNsb2p1cmVcIjoge1xuXHRcdGNvbG91cjogXCIjOTFkYzQ3XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTYsMkExNCwxNCwwLDEsMCwzMCwxNiwxNC4wMTYsMTQuMDE2LDAsMCwwLDE2LDJcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTUuNDg4LDE2LjI1MmMtLjEyNi4yNzMtLjI2NS41NzktLjQwOC45QTIyLjk2MywyMi45NjMsMCwwLDAsMTMuOCwyMC42MDVhNS4xODEsNS4xODEsMCwwLDAtLjExOSwxLjE1NWMwLC4xNzQuMDA5LjM1Ni4wMjQuNTQyYTYuNjU4LDYuNjU4LDAsMCwwLDQuNDEzLjA2NywzLjk2NiwzLjk2NiwwLDAsMS0uNDQtLjQ2NmMtLjktMS4xNDYtMS40LTIuODI3LTIuMTk0LTUuNjUyXFxcIiBzdHlsZT1cXFwiZmlsbDojOTFkYzQ3XFxcIi8+PHBhdGggZD1cXFwiTTEyLjE2OSwxMC41NTZhNi42NzcsNi42NzcsMCwwLDAtLjA3NywxMC44ODFjLjQxMS0xLjcxLDEuNDQtMy4yNzYsMi45ODMtNi40MTUtLjA5Mi0uMjUyLS4yLS41MjctLjMxMy0uODE3YTEwLjIwNywxMC4yMDcsMCwwLDAtMS42LTIuODgyLDQuNDM5LDQuNDM5LDAsMCwwLTEtLjc2N1xcXCIgc3R5bGU9XFxcImZpbGw6IzkxZGM0N1xcXCIvPjxwYXRoIGQ9XFxcIk0yMS44NCwyMy43YTEwLjg3NywxMC44NzcsMCwwLDEtMi4yNTctLjQ3MUE4LjAzNiw4LjAzNiwwLDAsMSwxMC43MTYsOS45ODJhNS45LDUuOSwwLDAsMC0xLjQtLjE3MWMtMi4zNTguMDIyLTQuODQ4LDEuMzI3LTUuODg0LDQuODUyYTYuNjA2LDYuNjA2LDAsMCwwLS4wNzQsMS4zNjEsMTIuNjQ5LDEyLjY0OSwwLDAsMCwyMyw3LjI3NCwxNC43MzcsMTQuNzM3LDAsMCwxLTMuNDQ4LjQ1OUE4Ljg4MSw4Ljg4MSwwLDAsMSwyMS44NCwyMy43XFxcIiBzdHlsZT1cXFwiZmlsbDojNjNiMTMyXFxcIi8+PHBhdGggZD1cXFwiTTE5LjQ2MywyMS4yNDRhMy41MywzLjUzLDAsMCwwLC41LjE3MkE2LjY5LDYuNjksMCwwLDAsMjIuNywxNi4wMjNoMGE2LjY4MSw2LjY4MSwwLDAsMC04Ljc5LTYuMzQ4YzEuMzU4LDEuNTQ4LDIuMDExLDMuNzYxLDIuNjQzLDYuMTgxdjBzLjIuNjczLjU0NywxLjU2MmExNS40MzQsMTUuNDM0LDAsMCwwLDEuMzYzLDIuNzg4LDIuOTI0LDIuOTI0LDAsMCwwLDEsMS4wMzZcXFwiIHN0eWxlPVxcXCJmaWxsOiM5MGI0ZmVcXFwiLz48cGF0aCBkPVxcXCJNMTYuMDEzLDMuMzcyQTEyLjYzMiwxMi42MzIsMCwwLDAsNS43MzEsOC42NTZhNi40MjUsNi40MjUsMCwwLDEsMy40OC0xLjAwOSw2LjgsNi44LDAsMCwxLDMuMTgyLjc3MmMuMTM0LjA3Ny4yNjEuMTYuMzg2LjI0NmE4LjAzOCw4LjAzOCwwLDAsMSwxMS4yNzMsNy4zNThoMGE4LjAxMyw4LjAxMywwLDAsMS0yLjM5MSw1LjcxOSw5Ljg3MSw5Ljg3MSwwLDAsMCwxLjE0My4wNjQsNi4yNCw2LjI0LDAsMCwwLDQuMDUxLTEuMjYzLDUuMzQ4LDUuMzQ4LDAsMCwwLDEuNy0yLjkwNkExMi42MzIsMTIuNjMyLDAsMCwwLDE2LjAxMywzLjM3MlxcXCIgc3R5bGU9XFxcImZpbGw6IzU4ODFkOFxcXCIvPlwiLFxuXHR9LFxuXHRcIkNNYWtlXCI6IHtcblx0XHRjb2xvdXI6IFwiIzAxYTMwMFwiLFxuXHRcdGljb246IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiOS45NTVcXFwiIHkxPVxcXCI5LjA5NlxcXCIgeDI9XFxcIjE2LjY4XFxcIiB5Mj1cXFwiMjMuMzI0XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEsIDAsIDAsIC0xLCAwLCAzMilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiMxMDExYTFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM2OTY5ZTFcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIjE2LjIzMVxcXCIgeTE9XFxcIjE5LjY1NVxcXCIgeDI9XFxcIjI1LjYxOFxcXCIgeTI9XFxcIjMuNzgyXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEsIDAsIDAsIC0xLCAwLCAzMilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNiNDBlMGVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZjU5NTlcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiY1xcXCIgeDE9XFxcIjIxLjY2M1xcXCIgeTE9XFxcIjQuODIzXFxcIiB4Mj1cXFwiOC4zODFcXFwiIHkyPVxcXCI1LjkzOFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLCAwLCAwLCAtMSwgMCwgMzIpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMDFhMzAwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMDFkZjAwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImRcXFwiIHgxPVxcXCIxNC42NDNcXFwiIHkxPVxcXCI4LjM2OFxcXCIgeDI9XFxcIjE0LjQ3MlxcXCIgeTI9XFxcIjE0LjE0NVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLCAwLCAwLCAtMSwgMCwgMzIpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjODQ4NDg0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZDJkMmQyXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9jbWFrZTwvdGl0bGU+PHBhdGggZD1cXFwiTTE3LjI1NywxNi45MTksMi4yNDYsMjkuNzQ5LDE1Ljk5NCwyLjI4M1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMi4yNjIsMjkuNzY4bC0uMDM4LS4wM0wxNi4wMTIsMi4xOTNsLjAwOC4wODhMMTcuMjgzLDE2LjkzbC0uMDEuMDA4Wk0xNS45NzcsMi4zNzQsMi4zMjQsMjkuNjQ5LDE3LjIzLDE2LjkwOFpcXFwiLz48cGF0aCBkPVxcXCJNMTcuOTUyLDI0LjkzMSwxNiwyLjI4LDI5Ljc2NywyOS43NTFaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2IpXFxcIi8+PHBhdGggZD1cXFwiTTI5LjgxOCwyOS44bC0uMDYxLS4wMjVMMTcuOTI5LDI0Ljk0OGwwLS4wMTVMMTUuOTc1LDIuMjgybC4wNDctLjAxM1pNMTcuOTc2LDI0LjkxMywyOS43MTUsMjkuNywxNi4wMzYsMi40MDhaXFxcIi8+PHBhdGggZD1cXFwiTTExLjE2LDIyLjA5NGwxOC42MjEsNy42NTRIMi4yNVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYylcXFwiLz48cGF0aCBkPVxcXCJNMjkuNzgxLDI5Ljc3M0gyLjE4M2wuMDUxLS4wNDQsOC45MjEtNy42NjUuMDE0LjAwNiwxOC42MjIsNy42NTVabS0yNy40NjQtLjA1SDI5LjY1NGwtMTguNDg5LTcuNlpcXFwiLz48cGF0aCBkPVxcXCJNMTEuMTg5LDIyLjExMmw2LjA1OS01LjE2OC44NDMsNy45OFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMTguMTQ5LDI1bC0uMDc3LS4wMzItNi45NzgtMi44NDIsNi4xOTQtNS4yODMuMDEuMDk0Wm0tNi44NjUtMi45LDYuNzQ4LDIuNzQ5LS44MjQtNy44WlxcXCIvPjxwYXRoIGQ9XFxcIk0yOS43LDI5LjkxMUgyLjI4NWEuMjIxLjIyMSwwLDAsMS0uMTgyLS4wODguMjIyLjIyMiwwLDAsMSwuMDIyLS4yTDE1Ljg2NCwyLjE4N2EuMTY5LjE2OSwwLDAsMSwuMTQtLjFoMGEuMTU0LjE1NCwwLDAsMSwuMTMuMDg1TDI5Ljg2NywyOS42MDdhLjIzOC4yMzgsMCwwLDEsLjAyLjIyNkEuMjExLjIxMSwwLDAsMSwyOS43LDI5LjkxMVptLTI3LjQ2OC0uMTZhLjQ4NC40ODQsMCwwLDAsLjA1Ny4wMTFoMjcuNGwuMDczLS4wMDlhLjIyMS4yMjEsMCwwLDAtLjAyOC0uMDc3TDE2LDIuMjQ4LDE2LDIuMjYsMi4yNjEsMjkuNjg0YS4yNzkuMjc5LDAsMCwwLS4wMjUuMDY3WlxcXCIvPlwiLFxuXHR9LFxuXHRcIkNPQk9MXCI6IHtcblx0XHRjb2xvdXI6IFwiIzAwNWNhNVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIyLjI0LDYuNTQ2YTQuNDQ5LDQuNDQ5LDAsMCwwLDEuNzY1LTIuNTIyLDQuNjM2LDQuNjM2LDAsMCwxLS4wMTgsMi4xNTdjLS4yMjMuNTgyLS41NjcsMS4xMDctLjgzNCwxLjY2OWEyMS43NzIsMjEuNzcyLDAsMCwxLDQuNTU5LTIuOTM4QzI3LjIzLDYuNCwyNS44OTEsNy4zLDI0LjkwNyw4LjQ0MmMuMTkuNDA5LjI4Ljk4OS44LDEuMTA5YTUuMDM2LDUuMDM2LDAsMCwwLDIuNS4xNTVjLjkxMi0uMzEzLDEuMzQ1LTEuMjU4LDEuOC0yLjAzNVY5LjE0YTE1LjczOCwxNS43MzgsMCwwLDEtLjU4MiwxLjc0OGMuMi41NDcuNDA5LDEuMDkyLjU4MiwxLjY0N3YuOTUyYy0uMjE0LjM2OC0uNDQyLjcyNi0uNjYzLDEuMDg5YTUuMjkzLDUuMjkzLDAsMCwwLTEuMDY4LTEuMTYyLDQuMDMsNC4wMywwLDAsMC0xLjg1MS0uMTI1LDMuMjEyLDMuMjEyLDAsMCwwLDIuNDEzLDEuNDdjLS4zNTkuMzctLjY2My45MTItMS4yMy45NjktMS42NDEuMjQ3LTMuMjA3LS41MDUtNC44MzktLjUtLjI4Mi4wMi0uNzA3LjAyNC0uNzg1LjM3MiwwLC43MzUuMjE3LDEuNDUzLjE5LDIuMTg4LS4wNTksMS4yNTgtLjUxMiwyLjQ2Ni0uNTI5LDMuNzI2YTEzLjc4NSwxMy43ODUsMCwwLDAsLjgzOCwzLjQ0OGMtLjUyMy0uMDc3LTEuMDQ0LS4xNjYtMS41NjItLjI2LS4xLjIwOC0uMTg0LjQyLS4yNi42MzRBNC41MTQsNC41MTQsMCwwLDAsMjEuOCwyNi41MzFjLS4wNjEuMTI3LS4xODIuMzgxLS4yNDEuNTA4bC0uNTczLjEzOGMtLjEzMS4yNDctLjI2My40OTItLjQuNzM5YTQuNDIxLDQuNDIxLDAsMCwwLTIuMi4wNjFjLS40NjYtLjE4Ni0uOTI4LS4zNzYtMS4zODktLjU2N2E1LjkzOSw1LjkzOSwwLDAsMCwuNDA3LTIuMzE1Yy0uMjgyLS45ODItMS42LS45ODQtMi0xLjg3N2E2LjIzMyw2LjIzMywwLDAsMS0xLjAyMi0yLjg1MWMtLjgyMy0uNDMzLTEuNDU1LTEuMjIxLTIuNC0xLjQtLjA0OC40MDktLjA4My44Mi0uMTUzLDEuMjI3QTYuMDE1LDYuMDE1LDAsMCwxLDEwLjQ4MSwyMi42Yy4wMzkuNDIyLjA3OS44NDIuMTIsMS4yNjUuMzQ2LjMyNC42OTEuNjQ4LDEuMDMzLjk3NGE5Ljc1Miw5Ljc1MiwwLDAsMS0xLjQyNi43MTMsMTEuMTE0LDExLjExNCwwLDAsMS0xLjY4Ny4wNzdjLS4yNTgtLjI1NC0uNTE4LS41MDgtLjc3Ny0uNzY0YTQuODcxLDQuODcxLDAsMCwwLC4xMTQtMi42MDhjLjE3MS0uNC4zMjYtLjgxMi40NzUtMS4yMjFhNS41NjUsNS41NjUsMCwwLDEtMy4wMS4yMDYsNS4xMiw1LjEyLDAsMCwxLTMuMjktNC4zMywzLjg1OSwzLjg1OSwwLDAsMSwxLjQwNy0zLjI2OEE2LjQxLDYuNDEsMCwwLDAsMy4yLDE2LjI1OWEzLjAzOCwzLjAzOCwwLDAsMCwyLjUsMi40NjYsMy40NjIsMy40NjIsMCwwLDAsMS45Ni0uNjQzLDcuNDgsNy40OCwwLDAsMSwuMzYzLTQuMTMzLDUuNTI0LDUuNTI0LDAsMCwxLDMuNTg2LTIuNjYsNC4yMzUsNC4yMzUsMCwwLDAsMi4wMTEtMS41NjYsMTAuNjcsMTAuNjcsMCwwLDEsMS41MjktMS4zM2MtLjIyOC0uMjE5LS40NTMtLjQ0LS42OC0uNjU5QTIuMTU0LDIuMTU0LDAsMCwwLDE1LjksNi4wMjNjMS4yODQtLjMsMi41NTEtLjY2MSwzLjgyLTEuMDExYTMuNzkzLDMuNzkzLDAsMCwwLDEuNDE1LjYwNmMuMzE3LjM0Ni40OTQsMS4xNTcsMS4xLjkyOE0xOC40NTgsMTkuOTA4Yy4wNDIuNzY4LS4wNDgsMS42NjUuNjc0LDIuMTU1LDAtLjc1NS0uMDQ2LTEuNTA3LS4xLTIuMjZaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA1Y2E1XFxcIi8+XCIsXG5cdH0sXG5cdFwiQ29mZmVlU2NyaXB0XCI6IHtcblx0XHRjb2xvdXI6IFwiIzZmNGUzN1wiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTEzLjExNCw1LjcyOGMuMDI1LjE1My0uMDUxLjI4LS4zMDYuNDA4YTMuNDU3LDMuNDU3LDAsMCwwLTEuNjMtLjIyOWMtLjYzNy4wNTEtMS4xNzIuMjU1LTEuMS42ODguMS40MzMuNzEzLjY4OCwxLjgwOC41ODYsMi42NzQtLjIyOSwyLjY0OS0yLjAzOCw2LjU3MS0yLjM5NCwzLjA1Ni0uMjgsNC43NjMuNjYyLDQuOTkyLDEuODA4LjE3OC44OTEtLjU2LDEuNzU3LTIuNzc2LDEuOTM2LTEuOTYxLjE3OC0zLjEwNy0uMzU3LTMuMjA5LS44OTEtLjA1MS0uMjguMS0uNjg4LDEuMDQ0LS43OS4xLjQzMy42MzcuODkxLDEuOTEuNzY0QzIxLjM0MSw3LjUzNiwyMi4xLDcuMiwyMiw2LjdjLS4xLS41MzUtMS4wNy0uODQtMi42LS43MTMtMy4xMDcuMjgtMy44NzEsMS45ODctNi41MiwyLjIxNkMxMSw4LjM3Niw5LjQ3Miw3LjY4OSw5LjI2OCw2LjY3Yy0uMDc2LS4zODItLjA3Ni0xLjI3MywxLjkxLTEuNDUyLDEuMDE5LS4wNzYsMS44MzQuMSwxLjkzNi41MDlaTTMuMTgxLDE2LjM3NEE1LjI3OSw1LjI3OSwwLDAsMCwyLjAxLDE5Ljk5YTQuMjA2LDQuMjA2LDAsMCwwLDEuNjU1LDMuMDU2LDQsNCwwLDAsMCwzLjM2Mi43OSwxMS40MzQsMTEuNDM0LDAsMCwwLDEuNS0uNDg0LDQuMjM4LDQuMjM4LDAsMCwxLTIuNzUxLTEuMDE5LDQuMTMsNC4xMywwLDAsMS0xLjczMi0yLjgyN0EzLjc5LDMuNzksMCwwLDEsNC42NTgsMTYuNSwzLjk3NywzLjk3NywwLDAsMSw3LjQwOSwxNWE0LjgwNiw0LjgwNiwwLDAsMSwzLjIwOS45NDIsNi45NSw2Ljk1LDAsMCwwLS44NjYtLjg2Niw0LjEsNC4xLDAsMCwwLTMuNDY0LS42ODgsNS4yLDUuMiwwLDAsMC0zLjEwNywxLjk4N1pNMTYuODMzLDEwLjQ5QTQwLjgzNyw0MC44MzcsMCwwLDEsOC41LDkuN0M2LjIzNyw5LjE0LDUuMDQsOC41MjksNS4wNCw3Ljc0YzAtLjMzMS4xNTMtLjYxMS42MTEtLjk0Mi0xLjQyNi41Ni0yLjE5LDEuMDE5LTIuMTksMS43MzIuMDc2Ljc5LDEuMzUsMS41NzksMy45NDgsMi4xOWEzOS40NDMsMzkuNDQzLDAsMCwwLDkuMzQ3Ljk0MkEzOC45OTMsMzguOTkzLDAsMCwwLDI2LjEsMTAuNzJjMi42LS42MTEsMy44NDYtMS40MjYsMy44NDYtMi4xOSwwLS41Ni0uNTYtMS4xLTEuNTc5LTEuNWEuODYyLjg2MiwwLDAsMSwuNDA4LjY4OGMwLC43OS0xLjE3MiwxLjQyNi0zLjU0LDEuOTYxQTM5LjMyNCwzOS4zMjQsMCwwLDEsMTYuODMzLDEwLjQ5Wm05LjM3MywyLjE5YTQyLjMxNSw0Mi4zMTUsMCwwLDEtOS4zNDcuOTQyLDQ0LjE0NCw0NC4xNDQsMCwwLDEtOS40MjQtLjk0MmMtMi4xOS0uNTYtMy4zNjItMS4xNzItMy43NjktMS44MDhhMjMuMTg2LDIzLjE4NiwwLDAsMCwyLjYsNy42NDFjLjk0MiwxLjQyNiwxLjg4NSwyLjY3NCwyLjgyNyw0LjAyNGE5Ljg4Myw5Ljg4MywwLDAsMSwuODY2LDIuMzY5LDQuNTU5LDQuNTU5LDAsMCwwLDIuNiwxLjczMiwxMC42MTEsMTAuNjExLDAsMCwwLDQuMTc3LjYxMWguMTUzYTExLjgzOSwxMS44MzksMCwwLDAsNC4zLS42MTEsNC44NjksNC44NjksMCwwLDAsMi41MjEtMS43MzJoLjA3NmE5LjU5Miw5LjU5MiwwLDAsMSwuNzktMi4zNjljLjk0Mi0xLjM1LDEuODg1LTIuNiwyLjgyNy00LjAyNEEyNC42MiwyNC42MiwwLDAsMCwzMCwxMC44NzJDMjkuNDkxLDExLjU4NSwyOC4zMTksMTIuMiwyNi4yMDUsMTIuNjgxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzZmNGUzN1xcXCIvPlwiLFxuXHR9LFxuXHRcIkNyeXN0YWxcIjoge1xuXHRcdGNvbG91cjogXCIjYzhjOGM4XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMjkuOTQxLDE5LjgxNiwxOS44LDI5LjkyOGMtLjAyOC4wMjgtLjA4NS4wMjgtLjE2OS4wMjhMNS44LDI2LjI2N2MtLjAyOCwwLS4wODQtLjAyOC0uMTEzLS4xMTNMMiwxMi4zNTJhLjQxOS40MTksMCwwLDEsLjAyOC0uMTY5TDEyLjE2OCwyLjA3MmMuMDI4LS4wMjguMDg0LS4wMjguMTY5LS4wMjhsMTMuODMsMy43MThjLjAyOCwwLC4wODQuMDI4LjExMy4xMTNsMy42OSwxMy44QzMwLjAyNiwxOS43MzIsMzAsMTkuNzg4LDI5Ljk0MSwxOS44MTZaTTE2LjM5Myw4LjgzMiwyLjgxNywxMi40OTNxLS4wNDIsMCwwLC4wODRMMTIuNzYsMjIuNTJjLjAyOC4wMjguMDI4LDAsLjA4NCwwTDE2LjUwNiw4Ljk3MkMxNi40NDksOC44MzIsMTYuMzkzLDguODMyLDE2LjM5Myw4LjgzMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjOGM4YzhcXFwiLz5cIixcblx0fSxcblx0XCJDU1NcIjoge1xuXHRcdGNvbG91cjogXCIjMTU3MmI2XCIsXG5cdFx0aWNvbjogXCI8cG9seWdvbiBwb2ludHM9XFxcIjUuOTAyIDI3LjIwMSAzLjY1NiAyIDI4LjM0NCAyIDI2LjA5NSAyNy4xOTcgMTUuOTg1IDMwIDUuOTAyIDI3LjIwMVxcXCIgc3R5bGU9XFxcImZpbGw6IzE1NzJiNlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTYgMjcuODU4IDI0LjE3IDI1LjU5MyAyNi4wOTIgNC4wNjEgMTYgNC4wNjEgMTYgMjcuODU4XFxcIiBzdHlsZT1cXFwiZmlsbDojMzNhOWRjXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNiAxMy4xOTEgMjAuMDkgMTMuMTkxIDIwLjM3MiAxMC4wMjYgMTYgMTAuMDI2IDE2IDYuOTM1IDE2LjAxMSA2LjkzNSAyMy43NSA2LjkzNSAyMy42NzYgNy43NjQgMjIuOTE3IDE2LjI4MiAxNiAxNi4yODIgMTYgMTMuMTkxXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNi4wMTkgMjEuMjE4IDE2LjAwNSAyMS4yMjIgMTIuNTYzIDIwLjI5MiAxMi4zNDMgMTcuODI3IDEwLjY3IDE3LjgyNyA5LjI0IDE3LjgyNyA5LjY3MyAyMi42OCAxNi4wMDQgMjQuNDM4IDE2LjAxOSAyNC40MzQgMTYuMDE5IDIxLjIxOFxcXCIgc3R5bGU9XFxcImZpbGw6I2ViZWJlYlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTkuODI3IDE2LjE1MSAxOS40NTUgMjAuMjkgMTYuMDA4IDIxLjIyIDE2LjAwOCAyNC40MzYgMjIuMzQ0IDIyLjY4IDIyLjM5MSAyMi4xNTggMjIuOTI4IDE2LjE1MSAxOS44MjcgMTYuMTUxXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNi4wMTEgNi45MzUgMTYuMDExIDguODU1IDE2LjAxMSAxMC4wMTggMTYuMDExIDEwLjAyNiA4LjU1NSAxMC4wMjYgOC41NTUgMTAuMDI2IDguNTQ1IDEwLjAyNiA4LjQ4MyA5LjMzMSA4LjM0MiA3Ljc2NCA4LjI2OCA2LjkzNSAxNi4wMTEgNi45MzVcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYmViZWJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE2IDEzLjE5MSAxNiAxNS4xMTEgMTYgMTYuMjc0IDE2IDE2LjI4MiAxMi42MTEgMTYuMjgyIDEyLjYxMSAxNi4yODIgMTIuNjAxIDE2LjI4MiAxMi41MzkgMTUuNTg3IDEyLjM5OSAxNC4wMiAxMi4zMjUgMTMuMTkxIDE2IDEzLjE5MVxcXCIgc3R5bGU9XFxcImZpbGw6I2ViZWJlYlxcXCIvPlwiLFxuXHR9LFxuXHRcIkNTVlwiOiB7XG5cdFx0Y29sb3VyOiBcIiNjMmMyYzJcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yMi4wMzgsMkg2LjM3NWExLjc1NSwxLjc1NSwwLDAsMC0xLjc1LDEuNzV2MjQuNUExLjc1NSwxLjc1NSwwLDAsMCw2LjM3NSwzMGgxOS4yNWExLjc1NSwxLjc1NSwwLDAsMCwxLjc1LTEuNzVWNi44NTZabS41MjUsMi44NDQsMS42NjMsMS41MzFIMjIuNTYzWk02LjM3NSwyOC4yNVYzLjc1SDIwLjgxM1Y4LjEyNWg0LjgxM1YyOC4yNVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmMyYzJcXFwiLz48cmVjdCB4PVxcXCI4LjEyNVxcXCIgeT1cXFwiMTUuMDk3XFxcIiB3aWR0aD1cXFwiMTMuMDc2XFxcIiBoZWlnaHQ9XFxcIjEuNzVcXFwiIHN0eWxlPVxcXCJmaWxsOiM4MjllYzJcXFwiLz48cmVjdCB4PVxcXCI4LjEyNVxcXCIgeT1cXFwiMjQuNDM5XFxcIiB3aWR0aD1cXFwiOS43NjJcXFwiIGhlaWdodD1cXFwiMS43NVxcXCIgc3R5bGU9XFxcImZpbGw6IzgyOWVjMlxcXCIvPjxyZWN0IHg9XFxcIjguMTI1XFxcIiB5PVxcXCIxOS43NjNcXFwiIHdpZHRoPVxcXCIxNS43NVxcXCIgaGVpZ2h0PVxcXCIxLjc1XFxcIiBzdHlsZT1cXFwiZmlsbDojODI5ZWMyXFxcIi8+PHJlY3QgeD1cXFwiOC4xMjVcXFwiIHk9XFxcIjEwLjIzXFxcIiB3aWR0aD1cXFwiMTUuNzVcXFwiIGhlaWdodD1cXFwiMS43NVxcXCIgc3R5bGU9XFxcImZpbGw6IzgyOWVjMlxcXCIvPlwiLFxuXHR9LFxuXHRcIkRcIjoge1xuXHRcdGNvbG91cjogXCIjYjAzOTMxXCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCIxODUuNDU1XFxcIiB5MT1cXFwiMTYwMS42NDFcXFwiIHgyPVxcXCIxODEuOTU1XFxcIiB5Mj1cXFwiMTYzMC4yMjRcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTYyLjUyMyAtNjY2LjY0Nikgc2NhbGUoMC40MjcpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIjE3Ni4xMzZcXFwiIHkxPVxcXCIxNjAwLjVcXFwiIHgyPVxcXCIxNzIuNjM2XFxcIiB5Mj1cXFwiMTYyOS4wODNcXFwiIHhsaW5rOmhyZWY9XFxcIiNhXFxcIi8+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfZGxhbmc8L3RpdGxlPjxwYXRoIGQ9XFxcIk0zLjk3OCwxNS40NjIsMy45NjksOC41MDlBLjU4OC41ODgsMCwwLDEsNC41LDcuOTQ3YS42NTguNjU4LDAsMCwxLC4wNzYsMGw2LjA3NC0uMDA5YTE1LjcsMTUuNywwLDAsMSw2LjA2Ny45NSw4LjksOC45LDAsMCwxLDIuMjQ0LDEuMzU5LDQuNDY5LDQuNDY5LDAsMCwxLDIuOTQ2LTEuMDgzLDQuMTEsNC4xMSwwLDAsMSw0LjI3NiwzLjkyQTQuMTEsNC4xMSwwLDAsMSwyMS45MDcsMTdjLS4wODksMC0uMTc3LS4wMDgtLjI2NS0uMDEyYTYuNjE3LDYuNjE3LDAsMCwxLS4yMzIuOTUzLDg1LjM4Myw4NS4zODMsMCwwLDEsOC41OSwyLjZWMkgyVjE1LjRRMi45OTIsMTUuNDIsMy45NzgsMTUuNDYyWm0yMi44LTcuOTQ0YTEuMzIsMS4zMiwwLDAsMSwxLjM3NCwxLjI1OSwxLjM3OSwxLjM3OSwwLDAsMS0yLjc0NywwQTEuMzIsMS4zMiwwLDAsMSwyNi43OCw3LjUxN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNiMDM5MzFcXFwiLz48cGF0aCBkPVxcXCJNMTcuODYxLDE1Ljc4N2E0LjExNCw0LjExNCwwLDAsMC0xLjc0OC0zLjQ1OCw1LjgxNCw1LjgxNCwwLDAsMC0xLjUwOC0uODIyLDcuMzU0LDcuMzU0LDAsMCwwLTEuNjI5LS40MzgsMjEuNjI5LDIxLjYyOSwwLDAsMC0yLjU4OC0uMWwtMi42MTksMCwuMDA2LDQuNzM3YTg4LjgyNyw4OC44MjcsMCwwLDEsOS45MSwxLjQwOEE0LjkxOSw0LjkxOSwwLDAsMCwxNy44NjEsMTUuNzg3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2IwMzkzMVxcXCIvPjxwYXRoIGQ9XFxcIk0yMC45OTMsMTguOTc5YTcuOTA2LDcuOTA2LDAsMCwxLTIuMTI4LDIuNTgyLDkuNzM5LDkuNzM5LDAsMCwxLTMuMjU2LDEuNzEsMTEuNTU4LDExLjU1OCwwLDAsMS0xLjk3MS40NzJoLS4wMTVhMzEuODU3LDMxLjg1NywwLDAsMS0zLjMyNi4xMTFsLTUuNjI1LjAyMmEuNjE2LjYxNiwwLDAsMS0uNjg2LS42ODFsLS4wMS03LjczNFEyLjk5MiwxNS40MiwyLDE1LjRWMzBIMzBWMjAuNTQ0YTg1LjM4Myw4NS4zODMsMCwwLDAtOC41OS0yLjZBNi45ODUsNi45ODUsMCwwLDEsMjAuOTkzLDE4Ljk3OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNiMDM5MzFcXFwiLz48cGF0aCBkPVxcXCJNMjAuOTkzLDE4Ljk3OWE3LjkwNiw3LjkwNiwwLDAsMS0yLjEyOCwyLjU4Miw5LjczOSw5LjczOSwwLDAsMS0zLjI1NiwxLjcxLDExLjU1OCwxMS41NTgsMCwwLDEtMS45NzEuNDcyaC0uMDE1YTMxLjg1NywzMS44NTcsMCwwLDEtMy4zMjYuMTExbC01LjYyNS4wMjJhLjYxNi42MTYsMCwwLDEtLjY4Ni0uNjgxbC0uMDEtNy43MzRRMi45OTIsMTUuNDIsMiwxNS40VjMwSDMwVjIwLjU0NGE4NS4zODMsODUuMzgzLDAsMCwwLTguNTktMi42QTYuOTg1LDYuOTg1LDAsMCwxLDIwLjk5MywxOC45NzlaXFxcIiBzdHlsZT1cXFwib3BhY2l0eTowLjMwMDAwMDAxMTkyMDkyOTtpc29sYXRpb246aXNvbGF0ZTtmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMTAuNDc3LDIwLjgzNWExNi4wMTQsMTYuMDE0LDAsMCwwLDIuODc3LS4yLDcuNjMzLDcuNjMzLDAsMCwwLDEuNjI4LS41LDUuNjI4LDUuNjI4LDAsMCwwLDEuMTg3LS43NDgsNC40NTcsNC40NTcsMCwwLDAsMS41MTgtMi4yNzEsODguNjkxLDg4LjY5MSwwLDAsMC05LjkxLTEuNDA4bC4wMDYsNS4xMzNaXFxcIiBzdHlsZT1cXFwiZmlsbDojYjAzOTMxXFxcIi8+PHBhdGggZD1cXFwiTTEwLjQ3NywyMC44MzVhMTYuMDE0LDE2LjAxNCwwLDAsMCwyLjg3Ny0uMiw3LjYzMyw3LjYzMywwLDAsMCwxLjYyOC0uNSw1LjYyOCw1LjYyOCwwLDAsMCwxLjE4Ny0uNzQ4LDQuNDU3LDQuNDU3LDAsMCwwLDEuNTE4LTIuMjcxLDg4LjY5MSw4OC42OTEsMCwwLDAtOS45MS0xLjQwOGwuMDA2LDUuMTMzWlxcXCIgc3R5bGU9XFxcIm9wYWNpdHk6MC4zMDAwMDAwMTE5MjA5Mjk7aXNvbGF0aW9uOmlzb2xhdGU7ZmlsbDp1cmwoI2IpXFxcIi8+PHBhdGggZD1cXFwiTTIwLjM4MywxMS43NDZhNi45OTMsNi45OTMsMCwwLDEsMS4zNiw0LjE0OCw2LjYxOCw2LjYxOCwwLDAsMS0uMSwxLjFjLjA4OCwwLC4xNzYuMDEyLjI2NS4wMTJhNC4xMSw0LjExLDAsMCwwLDQuMjc2LTMuOTIsNC4xMSw0LjExLDAsMCwwLTQuMjc2LTMuOTIsNC40Nyw0LjQ3LDAsMCwwLTIuOTQ2LDEuMDgzQTguMTIzLDguMTIzLDAsMCwxLDIwLjM4MywxMS43NDZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PGVsbGlwc2UgY3g9XFxcIjI2Ljc4XFxcIiBjeT1cXFwiOC43NzdcXFwiIHJ4PVxcXCIxLjM3NFxcXCIgcnk9XFxcIjEuMjU5XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTQuNjczLDIzLjg3N2w1LjYyNS0uMDIyYTMxLjg3MSwzMS44NzEsMCwwLDAsMy4zMjYtLjExMWguMDE1YTExLjQ5LDExLjQ5LDAsMCwwLDEuOTcxLS40NzIsOS43MzksOS43MzksMCwwLDAsMy4yNTYtMS43MSw3LjkwNiw3LjkwNiwwLDAsMCwyLjEyOC0yLjU4Miw2Ljk4NSw2Ljk4NSwwLDAsMCwuNDE3LTEuMDM0LDcuMDU2LDcuMDU2LDAsMCwwLC4zMzItMi4wNTEsNi45OTIsNi45OTIsMCwwLDAtMS4zNi00LjE0OCw4LjEsOC4xLDAsMCwwLTEuNDIxLTEuNSw4Ljg3OCw4Ljg3OCwwLDAsMC0yLjI0NC0xLjM1OSwxNS42ODYsMTUuNjg2LDAsMCwwLTYuMDY3LS45NWwtNi4wNzQuMDA5YS42NTguNjU4LDAsMCwwLS4wNzYsMCwuNTg4LjU4OCwwLDAsMC0uNTMyLjU2MmwuMDA5LDYuOTUyLjAxLDcuNzM0QS42MTYuNjE2LDAsMCwwLDQuNjczLDIzLjg3N1ptMy4xLTEyLjkwOCwyLjYxOSwwYTIxLjYyMywyMS42MjMsMCwwLDEsMi41ODguMSw3LjM1NCw3LjM1NCwwLDAsMSwxLjYyOS40MzgsNS44MTQsNS44MTQsMCwwLDEsMS41MDguODIyLDQuMTE2LDQuMTE2LDAsMCwxLDEuNzQ4LDMuNDU4LDQuOTA1LDQuOTA1LDAsMCwxLS4xNzUsMS4zMjcsNC40NTcsNC40NTcsMCwwLDEtMS41MTgsMi4yNzEsNS42MTMsNS42MTMsMCwwLDEtMS4xODcuNzQ4LDcuNjY2LDcuNjY2LDAsMCwxLTEuNjI4LjUsMTYuMDA5LDE2LjAwOSwwLDAsMS0yLjg3Ny4ybC0yLjY5NCwwLS4wMDYtNS4xMzNaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdFx0aW5saW5lQ29tbWVudDogW1xuXHRcdFx0XCIvL1wiLFxuXHRcdF0sXG5cdH0sXG5cdFwiRGFydFwiOiB7XG5cdFx0Y29sb3VyOiBcIiM1OGI2ZjBcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xNi43MzksMi4wMzdhMS4zMTQsMS4zMTQsMCwwLDAtLjkxNi4zNzdsLS4wMTMuMDFMNy4yMiw3LjM4OWw4LjU2Niw4LjU2NnYuMDA2bDEwLjMsMTAuMywxLjk2My0zLjUzNkwyMC45NjgsNS43MjhsLTMuMy0zLjNhMS4zMDcsMS4zMDcsMCwwLDAtLjkyNy0uMzg4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY2YzNmYVxcXCIvPjxwYXRoIGQ9XFxcIk03LjI1LDcuMzUsMi4yODgsMTUuOTMxbC0uMDEuMDEzYTEuMzIyLDEuMzIyLDAsMCwwLS4zNzguOTE5LDEuMywxLjMsMCwwLDAsLjM4Ny45MjRMNi40LDIxLjlsMTYuMDg0LDYuMzI3LDMuNjM2LTIuMDItLjEtLjEtLjAyNSwwLTEwLjA4My0xMC4xSDE1LjlMNy4yNSw3LjM1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzIxNTg5NlxcXCIvPjxwYXRoIGQ9XFxcIk03LjE5Miw3LjM2Mmw4Ljc2NCw4Ljc3M2guMDEzbDEwLjA4NywxMC4xLDMuODM5LS43MzJMMjkuOSwxNC4xNGwtNC4wNTQtMy45NzNhNi41MjEsNi41MjEsMCwwLDAtMy42MjQtMS42MTZsMC0uMDQ0TDcuMTkyLDcuMzYyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzNTk5N1xcXCIvPjxwYXRoIGQ9XFxcIk03LjI1Niw3LjQxMWw4Ljc2OCw4Ljc2OHYuMDEzTDI2LjExNiwyNi4yODRsLS43MzQsMy44MzlIMTQuMDIybC0zLjk3MS00LjA1NmE2LjUyMiw2LjUyMiwwLDAsMS0xLjYxNC0zLjYyNWwtLjA0NCwwTDcuMjU2LDcuNDExWlxcXCIgc3R5bGU9XFxcImZpbGw6IzU4YjZmMFxcXCIvPlwiLFxuXHR9LFxuXHRcIkRoYWxsXCI6IHtcblx0XHRjb2xvdXI6IFwiI2I3YjdiN1wiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTE2LDIuMDdBMTMuOTMsMTMuOTMsMCwxLDEsMiwxNiwxMy45MywxMy45MywwLDAsMSwxNiwyLjA3Wk0xMy4yOCwyMi4zMmExLjQ5LDEuNDksMCwxLDEtMSwxLjgzQTEuNDksMS40OSwwLDAsMSwxMy4yOCwyMi4zMlptOC0xNS42OGEuNTMuNTMsMCwwLDEsLjM4LjY2LjUyLjUyLDAsMCwxLS42NS4zOGwtLjUtLjEzYTQyLjY3LDQyLjY3LDAsMCwwLS4zNyw3LjA3QzE4LjA2LDE2LjQ1LDE0LjM5LDIyLDE0LjM5LDIybDEuOTMtNy4xOGExLDEsMCwwLDAsLjg5LS42NS45MS45MSwwLDAsMC0xLjc1LS40NywxLDEsMCwwLDAsLjQ1LDFMMTQsMjEuODVhNjguMzgsNjguMzgsMCwwLDAtMS4zNC05LjI1LDM0LjI4LDM0LjI4LDAsMCwwLDMuMjEtNi4zMWwtLjUtLjEzQS41NS41NSwwLDAsMSwxNSw1LjVhLjUzLjUzLDAsMCwxLC42Ni0uMzhsNS42OCwxLjUyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2I3YjdiNztmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPlwiLFxuXHR9LFxuXHRcIkRpZmZcIjoge1xuXHRcdGNvbG91cjogXCIjYzAwMDAwXCIsXG5cdFx0aWNvbjogXCI8cmVjdCB4PVxcXCI2Ljk3NVxcXCIgeT1cXFwiM1xcXCIgd2lkdGg9XFxcIjE4LjA1XFxcIiBoZWlnaHQ9XFxcIjYuMDE3XFxcIiBzdHlsZT1cXFwiZmlsbDojYzAwMDAwXFxcIi8+PHBhdGggZD1cXFwiTTEyLjk5MiwxMC45NXY2LjAxN0g2Ljk3NXY2LjAxN2g2LjAxN1YyOWg2LjAxN1YyMi45ODNoNi4wMTdWMTYuOTY3SDE5LjAwOFYxMC45NVpcXFwiIHN0eWxlPVxcXCJmaWxsOmdyZWVuXFxcIi8+XCIsXG5cdH0sXG5cdFwiRGphbmdvL0ppbmphMlwiOiB7XG5cdFx0Y29sb3VyOiBcIiNmZjAwMDBcIixcblx0XHRpY29uOiBcIjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiYVxcXCIgY3g9XFxcIjE2XFxcIiBjeT1cXFwiLTExOS4yODNcXFwiIHI9XFxcIjEzLjVcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMSwgMCwgMCwgLTAuOTQ1LCAwLCAtOTYuNzM1KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzU3NTc1N1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzJmMmYyZlxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfamluamE8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yOS4zNCwzLjI0MWEzOC4yNzEsMzguMjcxLDAsMCwxLTkuNDUxLDMuMDRjLTQuMjQxLjU1LTEyLjMyOSwxLjEtMTMuOTM1LjcxMkEyMy4zLDIzLjMsMCwwLDEsMy4yLDYuMTUxbC4zMzQsMS4xMzJMMi41LDguMTg4bC4xODMuMzIzLjQyNC4wMzIsMS4zLjE2Mi4xODMuNTgyLjcyNy4wNjYuMzY0LDEuMjI4czEuNTQ0LjEzLDIsLjEzLDEuMzYzLS4wNjQsMS4zNjMtLjA2NGwuMDMuNDg1LjMzNC4wNjR2LjU1bC0uNzI4LjY0OC4xODMuMDMydi4yMjVhMTUuODE2LDE1LjgxNiwwLDAsMS0yLjMuMDM0Yy0uNjY2LS4xLS43ODgtLjEtLjc4OC0uMWwtLjA2LjA2NC0uMDMuMjkxaC4xNTFsLjA2LDEuMjYyLDMuMzYzLS4xMy0uMjQzLDQuMzY1LS4wMy41NDktMi44NDgtLjE2Mi0uMDMtMS4xNjRoLjYzNWwuMDYxLS40NTMuNTc1LS4xMy4wOTEtLjEyOC0yLjE1MS0uNTE4LTEuNjM2LjQ4NS4yNzMuMjI3aC4yNzNsLjAzLjM4OS41NzUuMDMyVjE4LjdsLS42MzUuMTYyLjEyMS4yNTcuMTUxLjF2Ljg3M2guMzk0djQuMDQxbC0uNjM3LjEuMDkxLDEuMTY0LjM5My4wNjYtLjA2LDIuNjUxLDEuNzI3LjAzMi0uMzY0LTIuNjE5LDIuNjA1LS4wNjQtLjE4MSwxLjQyMi0uMjQzLDEsMi42MzUuMDMyLjAzLTIuNTg2LDEuODE3LS4xNjItLjA5LDEuNjQ5LS4wNjEuOTY5aDEuNTQ2bC0uMDYxLTIuNjUxLjIxMy4wMzQuMDYtMS4yNjJoLS4yNDNsLS4wOS0uNTE4TDEzLjgsMjEuOWwuMDYtMS43MTNoLjMzM1YxOS4xNDlsLS40MjQuMDMyLjA2MS0xLjIyLjQ5My0uMDQ5LjAyMy0uNC4yOC0uMDQxLjI4Ny0uMjE4TDEzLjE4NywxNi45bC0xLjcxMi4zNzkuMTY3LjI3NC4xODEtLjAxNS4yMTEtLjAwOC4wMzkuNS40NzctLjAyMy4wMDksMS4wODItMi4wNTMtLjA0Ny4wNjktMS4xNTYuMDY3LTEuMDUxVjE1LjQ1NUwxMC43LDE0bDQuMTExLS4yMSw0Ljg5Mi0uMjgyLjA0Ni45MjktLjE3NCwyLjIzMUwxOS41LDE4Ljc0NGwtMS44LS4wMzItLjAwOS0xLjQ1NS42NjctLjAyNC4wMy0uNDExLjI3My0uMDQxLS4wMTQtLjA4MS4yNzMtLjAxNS4xNTEtLjJMMTcuMDM0LDE2LDE1LDE2LjQ0bC4xNDQuMjUxLjIyNy0uMDE3di4xMTRoLjI4di40NmwuNi4wMDgtLjAwNywxLjI3N2gtLjYwNWwtLjAwOS4yOTEuMjEzLjAyNC0uMDIzLDEuMTA4LjQ0Ny4wMjQtLjA1Myw0LjM5LS41OTEuMTIuMDA3LjIxaC4yMDZ2MS4xMjRoLjM0bC0uMDksMS41MzZMMTUuOTc0LDI4LjdsMi4xNTEuMDU2LS4wNjktMS4xNjQtLjE1OC0uOTY5LS4wMzEtLjg0MSwxLjgyNi0uMDMyLS4wNTMsMS4zLS4wMDksMS4zNzQsMS4wMzEuMDgxLDEuNC0uMDU2LjQ0LS4xMy0uMjQzLS43MzYtLjA2LTEuMTU2LS4xMTQtLjgyNCwxLjc0Mi0uMDY0LS4wNzYsMS4wMS0uMDA3LDEuNTg1LjcuMDY0LjY5LS4wMTUuMzMzLS4xMDUtLjItMS41TDI1LjIsMjUuNDQ1bC4zLS4wMzJMMjUuNSwyNC40bC4wODMtLjAxNy0uMDE0LS4yMThoLS4zNDFsLS4wNjktLjc0NEwyNS4xMywyMC4ybC4yNTctLjAwOFYxOS4xMzNsLjEwNy4wMTd2LS4yMWwtLjM4LS4wMzQuMDA5LTEuMjI4LjYzNS0uMDU2LS4wMzctLjQxMy4yOC0uMDI0LS4wMTYtLjA4MS4zNzEtLjE4Ni0xLjg4Ni0uMzc5LTEuOTE2LjM4OS4xMjEuMjI2LjMtLjAyNC4wMTYuMWguMjVsLjAxNC40ODUuNjIxLS4wMDguMDUzLDEuMTg4LTIuMi0uMDE3LS4yNTctMS43ODYtLjIwNi0uOTQ2LS4xNjYtMS43LjEtLjk5Myw0LjM3Ny0uMzMyLjAxNC0xLjQ3OS4yMi0uMDU2LS4wMTQtLjIyNS0uMTY3LS4xcy0yLjM5My4zNTUtMy4xNTEuNDM2bC0uMzcxLjA0LS4wMjMtLjI3NC0uOTA1LS40NzQuMDExLS41NTIuMzExLS4wMDkuMDIzLS43NTlhMjQuODA3LDI0LjgwNywwLDAsMCwyLjU0NC0uMjgzYy42ODktLjE2MiwxLjY2Ni0uMzIzLDEuNjY2LS4zMjNMMjYuMiw3LjgwOWwuOTE3LS4yNjcuMDc2LS4yMSwyLjA3NC0uNTc0LjIzNi0uMTk0LS43ODgtMS43MjIuMDc2LS4zODkuNC0uMjEuMjg4LS44ODFaTTE5LjM3NCw5LjhsLS4wMTEuNjI2LjQ3LjAyLS4wMy41OTQtLjkyMS42LS4wNTcuMTc0LjM3MSwwLDAsLjE0Ni0yLjgxNC4xMzcuMDE5LS40MTYuMTI4LS4yMDcuMDA5LS4xMzMsMC0uMjg2LjA4LS4xOS4wMy0uMTU0di0uMTFsLjEyMS0uNDg1Wm0tNS44ODUuNTMzLS4wNjkuNDIxLjIyLjI1OS0uMDE0LjQ1My4yLjMxNS0uMDUzLjM3Mi4xNTEuMjE4LTIuODcxLjExMy0uMDA3LS4xLjMzMy0uMDQxLjAxNi0uMTIyLS43MjctLjM5NS0uMDM5LS42MzEuMzQ4LS4wMTcuMDMtLjY4Wm00LjI0OSw5LjcsMS43NDIuMTEzTDE5LjQyLDIyLjVsLjIyNywxLjkyM0wxNy44LDI0LjM1NFptLTExLjY2My4xLDIuNzg4LjE0NUw4LjYyLDIxLjl2MS4zNTlsLjIuNzU5LTIuNzI3LjEzWm0xNy44NDMuMDE1djQuMDFsLTEuNzcyLjEzLS4wNjEtMi4xMTgtLjItMS45NzNaTTEwLjUsMjAuMjRsMi4wNi4wMDguMDIxLDMuNzE4TDEwLjY1NywyNGwtLjEtMS4yMDUtLjAwNy0xLjJaXFxcIiBzdHlsZT1cXFwic3Ryb2tlOnJlZDtzdHJva2Utd2lkdGg6MC41cHg7ZmlsbDp1cmwoI2EpXFxcIi8+XCIsXG5cdH0sXG5cdFwiRG9ja2VyXCI6IHtcblx0XHRjb2xvdXI6IFwiIzAwOTZlNlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTE2LjU0LDEyLjY2M0gxOS40djIuOTI0aDEuNDQ2YTYuMjcyLDYuMjcyLDAsMCwwLDEuOTg4LS4zMzMsNS4wOTEsNS4wOTEsMCwwLDAsLjk2Ni0uNDM2LDMuNTg0LDMuNTg0LDAsMCwxLS42Ny0xLjg0OSwzLjkwNywzLjkwNywwLDAsMSwuNy0yLjc1M2wuMy0uMzQ4LjM1OC4yODhhNC41NTgsNC41NTgsMCwwLDEsMS43OTUsMi44OTIsNC4zNzUsNC4zNzUsMCwwLDEsMy4zMTkuMzA5bC4zOTMuMjI2LS4yMDcuNGE0LjE0MSw0LjE0MSwwLDAsMS00LjE1NywxLjk4M2MtMi40OCw2LjE2OC03Ljg3MSw5LjA4OC0xNC40MDksOS4wODgtMy4zNzgsMC02LjQ3Ni0xLjI2My04LjI0MS00LjI1OWwtLjAyOS0uMDQ5TDIuNywyMC4yMjdhOC4zMTYsOC4zMTYsMCwwLDEtLjY1OS00LjIwOGwuMDQtLjQzM0g0LjUyNlYxMi42NjNINy4zODdWOS44aDUuNzIxVjYuOTQySDE2LjU0djUuNzIxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwOTZlNlxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4wMDYsMjQuNTY3YTYuMDIyLDYuMDIyLDAsMCwxLTMuMTQtMy4wODksMTAuMzI5LDEwLjMyOSwwLDAsMS0yLjI2NC4zNDNxLS41LjAyOC0xLjA0NS4wMjgtLjYzMiwwLTEuMzMxLS4wMzdhOS4wNTEsOS4wNTEsMCwwLDAsNywyLjc2OVExMS42MTgsMjQuNTgxLDEyLjAwNiwyNC41NjdaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTcuMDgsMTMuMzQ2aC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N0g2LjdWMTMuMzQ2Wm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJabS0uMzc2LDBoLjJ2Mi4wNjdoLS4yWm0tLjM2OCwwaC4ydjIuMDY3aC0uMlYxMy4zNDZaTTUsMTMuMTRINy40ODJ2Mi40NzlINVptMi44NTktMi44NjFoMi40OHYyLjQ3OUg3Ljg2M1ptMi4wNzcuMjA3aC4ydjIuMDY2aC0uMlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzc2LDBoLjJ2Mi4wNjZoLS4yVjEwLjQ4NlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzc2LDBoLjJ2Mi4wNjZoLS4yWm0tLjM2OCwwaC4ydjIuMDY2aC0uMlptLS4yMDcsMi42NTNoMi40OHYyLjQ4SDcuODYzVjEzLjE0Wm0yLjA3Ny4yMDdoLjJ2Mi4wNjdoLS4yWm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJWMTMuMzQ2Wm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJabS0uMzY4LDBoLjJ2Mi4wNjdoLS4yWm0yLjY1NC0uMjA3SDEzLjJ2Mi40OGgtMi40OFYxMy4xNFptMi4wNzYuMjA3SDEzdjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJabS0uMzc2LDBoLjJ2Mi4wNjdoLS4yWm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJabS0uMzY4LDBoLjJ2Mi4wNjdoLS4yWm0tLjIwNi0zLjA2N0gxMy4ydjIuNDc5aC0yLjQ4VjEwLjI3OVptMi4wNzYuMjA3SDEzdjIuMDY2aC0uMlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzc2LDBoLjJ2Mi4wNjZoLS4yWm0tLjM3NiwwaC4ydjIuMDY2aC0uMlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzY4LDBoLjJ2Mi4wNjZoLS4yWm0yLjY1NCwyLjY1M2gyLjQ3OXYyLjQ4aC0yLjQ4VjEzLjE0Wm0yLjA3Ni4yMDdoLjJ2Mi4wNjdoLS4yWm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjJabS0uMzc2LDBoLjJ2Mi4wNjdoLS4yWm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNjgsMGguMTkydjIuMDY3aC0uMlYxMy4zNDZabS0uMjA2LTMuMDY3aDIuNDc5djIuNDc5aC0yLjQ4VjEwLjI3OVptMi4wNzYuMjA3aC4ydjIuMDY2aC0uMlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzc2LDBoLjJ2Mi4wNjZoLS4yWm0tLjM3NiwwaC4ydjIuMDY2aC0uMlptLS4zNzYsMGguMnYyLjA2NmgtLjJabS0uMzY4LDBoLjE5MnYyLjA2NmgtLjJWMTAuNDg2Wm0tLjIwNi0zLjA2N2gyLjQ3OVY5LjloLTIuNDhWNy40MTlabTIuMDc2LjIwNmguMlY5LjY5MWgtLjJabS0uMzc2LDBoLjJWOS42OTFoLS4yWm0tLjM3NiwwaC4yVjkuNjkxaC0uMlptLS4zNzYsMGguMlY5LjY5MWgtLjJabS0uMzc2LDBoLjJWOS42OTFoLS4yWm0tLjM2OCwwaC4xOTJWOS42OTFoLS4yVjcuNjI1Wm0yLjY1NCw1LjUxNGgyLjQ3OXYyLjQ4aC0yLjQ4VjEzLjE0Wm0yLjA3Ni4yMDdoLjE5NXYyLjA2N2gtLjJWMTMuMzQ2Wm0tLjM3NiwwaC4yMDZ2Mi4wNjdoLS4yMDZabS0uMzc2LDBoLjJ2Mi4wNjdoLS4yWm0tLjM3NiwwaC4ydjIuMDY3aC0uMlptLS4zNzYsMGguMnYyLjA2N2gtLjIwNVYxMy4zNDZabS0uMzY4LDBoLjJ2Mi4wNjdoLS4xOTRWMTMuMzQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xMC4xODgsMTkuNjM4YS42ODQuNjg0LDAsMSwxLS42ODQuNjg0QS42ODQuNjg0LDAsMCwxLDEwLjE4OCwxOS42MzhabTAsLjE5NGEuNDg5LjQ4OSwwLDAsMSwuMTc3LjAzMy4yLjIsMCwxLDAsLjI3NS4yNjkuNDkuNDksMCwxLDEtLjQ1My0uM1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0fSxcblx0XCJET1QgKEdyYXBodml6KVwiOiB7XG5cdFx0Y29sb3VyOiBcIiM0ZWQxZjhcIixcblx0XHRpY29uOiBcIjxwb2x5Z29uIHBvaW50cz1cXFwiMjMuOTQyIDMwIDEyLjY3OSAzMCAxLjQxNyAzMCAxLjQxNyAxNiAxLjQxNyAyIDEyLjY3OSAyIDIzLjk0MiAyIDIzLjk0MiAxNiAyMy45NDIgMzBcXFwiIHN0eWxlPVxcXCJmaWxsOiNlNmU2ZTZcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMy4yMDJcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiNy40MlxcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIxMS42MzhcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMTUuODU2XFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMi4xMzJcXFwiIHk9XFxcIjIwLjA3NFxcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIyNC4yOTNcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMjguNTExXFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMlxcXCIgeT1cXFwiMy4yMDJcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS41NzNcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCI2LjIxOFxcXCIgeT1cXFwiMy4zMzNcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS4zMzFcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIxMC40MzZcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMTQuNjU1XFxcIiB5PVxcXCIzLjMzM1xcXCIgd2lkdGg9XFxcIjAuMjY0XFxcIiBoZWlnaHQ9XFxcIjI1LjMzMVxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjE4Ljg3M1xcXCIgeT1cXFwiMy4zMzNcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS4zMzFcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyMy4wOTFcXFwiIHk9XFxcIjMuMjAyXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuNTczXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PGcgc3R5bGU9XFxcIm9wYWNpdHk6MC41XFxcIj48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMjcuNDU2XFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMi4xMzJcXFwiIHk9XFxcIjI2LjQwMlxcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIyNS4zNDdcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMjMuMjM4XFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMi4xMzJcXFwiIHk9XFxcIjIyLjE4NFxcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIyMS4xMjlcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMTkuMDJcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMTcuOTY1XFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMi4xMzJcXFwiIHk9XFxcIjE2LjkxMVxcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIxNC44MDJcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiMTMuNzQ3XFxcIiB3aWR0aD1cXFwiMjEuMTM1XFxcIiBoZWlnaHQ9XFxcIjAuMjY0XFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMi4xMzJcXFwiIHk9XFxcIjEyLjY5M1xcXCIgd2lkdGg9XFxcIjIxLjEzNVxcXCIgaGVpZ2h0PVxcXCIwLjI2NFxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjIuMTMyXFxcIiB5PVxcXCIxMC41ODNcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiOS41MjlcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiOC40NzRcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiNi4zNjVcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiNS4zMTFcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIyLjEzMlxcXCIgeT1cXFwiNC4yNTZcXFwiIHdpZHRoPVxcXCIyMS4xMzVcXFwiIGhlaWdodD1cXFwiMC4yNjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48L2c+PGcgc3R5bGU9XFxcIm9wYWNpdHk6MC41XFxcIj48cmVjdCB4PVxcXCIyMi4wMzZcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMjAuOTgyXFxcIiB5PVxcXCIzLjMzM1xcXCIgd2lkdGg9XFxcIjAuMjY0XFxcIiBoZWlnaHQ9XFxcIjI1LjMzMVxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjE5LjkyN1xcXCIgeT1cXFwiMy4zMzNcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS4zMzFcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIxNy44MThcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMTYuNzY0XFxcIiB5PVxcXCIzLjMzM1xcXCIgd2lkdGg9XFxcIjAuMjY0XFxcIiBoZWlnaHQ9XFxcIjI1LjMzMVxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjE1LjcwOVxcXCIgeT1cXFwiMy4zMzNcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS4zMzFcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIxMy42XFxcIiB5PVxcXCIzLjMzM1xcXCIgd2lkdGg9XFxcIjAuMjY0XFxcIiBoZWlnaHQ9XFxcIjI1LjMzMVxcXCIgc3R5bGU9XFxcImZpbGw6IzRlZDFmOFxcXCIvPjxyZWN0IHg9XFxcIjEyLjU0NVxcXCIgeT1cXFwiMy4zMzNcXFwiIHdpZHRoPVxcXCIwLjI2NFxcXCIgaGVpZ2h0PVxcXCIyNS4zMzFcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZWQxZjhcXFwiLz48cmVjdCB4PVxcXCIxMS40OTFcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiOS4zODJcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiOC4zMjdcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiNy4yNzNcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiNS4xNjRcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiNC4xMDlcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PHJlY3QgeD1cXFwiMy4wNTVcXFwiIHk9XFxcIjMuMzMzXFxcIiB3aWR0aD1cXFwiMC4yNjRcXFwiIGhlaWdodD1cXFwiMjUuMzMxXFxcIiBzdHlsZT1cXFwiZmlsbDojNGVkMWY4XFxcIi8+PC9nPjxwYXRoIGQ9XFxcIk0xMyw4Ljk3NmMtMi4zMDgsMC00LjEzMS0xLjI3NC00LjE5My0yLjk2OWgwYTIuNzc1LDIuNzc1LDAsMCwxLDEuMjUzLTIuMzIsNS4zLDUuMywwLDAsMSwyLjk0My0uOTYzLDUuMjk0LDUuMjk0LDAsMCwxLDMuMDA2Ljc0MywyLjc3NSwyLjc3NSwwLDAsMSwxLjQyMSwyLjIyMWMuMDY1LDEuNzUyLTEuNzc5LDMuMTk0LTQuMiwzLjI4M0MxMy4xNTgsOC45NzQsMTMuMDgsOC45NzYsMTMsOC45NzZabS4yMzItNS4ycS0uMDk1LDAtLjE5LDBhNC4yMzgsNC4yMzgsMCwwLDAtMi4zNTQuNzU2LDEuNzYxLDEuNzYxLDAsMCwwLS44MjgsMS40MzVDOS45LDcuMDksMTEuNDI4LDcuOTc4LDEzLjIsNy45MTdzMy4yMjMtMS4wNjksMy4xODEtMi4xOTFhMS43NjEsMS43NjEsMCwwLDAtLjkzMi0xLjM2OUE0LjE2NSw0LjE2NSwwLDAsMCwxMy4yMzQsMy43NzNaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTYuNCwyOS4yODFBNS4yMzgsNS4yMzgsMCwwLDEsMy42LDI4LjUxOWEyLjc3NSwyLjc3NSwwLDAsMS0xLjQxLTIuMjI5Yy0uMDU2LTEuNzUyLDEuOC0zLjE4NSw0LjIxMy0zLjI2MnM0LjM1NiwxLjIzNiw0LjQxMiwyLjk4OEEyLjc3NSwyLjc3NSwwLDAsMSw5LjU0OCwyOC4zM2E1LjMsNS4zLDAsMCwxLTIuOTQ4Ljk0OFE2LjUsMjkuMjgxLDYuNCwyOS4yODFabS4xODYtNS4yLS4xNTYsMGMtMS43NjYuMDU2LTMuMjI5LDEuMDUyLTMuMTkzLDIuMTc0YTEuNzYxLDEuNzYxLDAsMCwwLC45MjQsMS4zNzQsNC4yMzUsNC4yMzUsMCwwLDAsMi40LjU5Myw0LjIzNSw0LjIzNSwwLDAsMCwyLjM1Ny0uNzQ0LDEuNzYxLDEuNzYxLDAsMCwwLC44MzUtMS40M0M5LjcyNCwyNC45NjEsOC4yOSwyNC4wOCw2LjU5MSwyNC4wOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NTY1NjVcXFwiLz48cGF0aCBkPVxcXCJNMTkuMjYxLDI5LjI2YTUuMjM4LDUuMjM4LDAsMCwxLTIuODA3LS43NjIsMi43NzUsMi43NzUsMCwwLDEtMS40MS0yLjIyOWgwYy0uMDU1LTEuNzUyLDEuOC0zLjE4NSw0LjIxMy0zLjI2MmE1LjMsNS4zLDAsMCwxLDMsLjc1OUEyLjYsMi42LDAsMCwxLDIyLjQsMjguMzFhNS4zLDUuMywwLDAsMS0yLjk0OC45NDhRMTkuMzU4LDI5LjI2LDE5LjI2MSwyOS4yNlpNMTYuMSwyNi4yMzZhMS43NjEsMS43NjEsMCwwLDAsLjkyNCwxLjM3NCw0LjU3LDQuNTcsMCwwLDAsNC43NTctLjE1MSwxLjU1OCwxLjU1OCwwLDAsMC0uMDg5LTIuOCw0LjIyNiw0LjIyNiwwLDAsMC0yLjQtLjU5M2MtMS43NjYuMDU2LTMuMjI4LDEuMDUyLTMuMTkzLDIuMTc0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk02LjIsMjMuNDc3QTI3LjQsMjcuNCwwLDAsMSw5Ljc2OSw4Ljk4NmwuNjg3LjM5MUEyNi42MDksMjYuNjA5LDAsMCwwLDYuOTg2LDIzLjQ1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC44NTMsNy45NTdhNy4xNzEsNy4xNzEsMCwwLDAtLjA3NSwyLjMybC0uNzU4LS45My0xLjE3OC0uMjNBNy4xNjUsNy4xNjUsMCwwLDAsMTAuODUzLDcuOTU3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS44NTQsMjMuNDc3bC0uNzktLjAyN2EyNi41OSwyNi41OSwwLDAsMC0uOTE1LTcuODg0LDI2LjYyNCwyNi42MjQsMCwwLDAtMi41NTQtNi4xODlsLjY4Ny0uMzkxYTI3LjQyMywyNy40MjMsMCwwLDEsMi42Myw2LjM3M0EyNy4zNzIsMjcuMzcyLDAsMCwxLDE5Ljg1NCwyMy40NzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTE1LjIsNy45NTdhNy4xNzEsNy4xNzEsMCwwLDAsMi4wMTEsMS4xNTlsLTEuMTc4LjIzLS43NTguOTNBNy4xNjUsNy4xNjUsMCwwLDAsMTUuMiw3Ljk1N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NTY1NjVcXFwiLz48cmVjdCB4PVxcXCIxMS4zNDhcXFwiIHk9XFxcIjkuOTQ1XFxcIiB3aWR0aD1cXFwiMy41MTVcXFwiIGhlaWdodD1cXFwiMC43OTFcXFwiIHRyYW5zZm9ybT1cXFwibWF0cml4KDAuMDE2LCAtMSwgMSwgMC4wMTYsIDIuNTU3LCAyMy4yNzkpXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTEzLjA1NCwxMy41MjlhNy4xNzEsNy4xNzEsMCwwLDAtMS4xLTIuMDQ2bDEuMTIyLjQyNiwxLjEzNS0uMzlBNy4xNjUsNy4xNjUsMCwwLDAsMTMuMDU0LDEzLjUyOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NTY1NjVcXFwiLz48cmVjdCB4PVxcXCI3LjgwOVxcXCIgeT1cXFwiMjAuMDgxXFxcIiB3aWR0aD1cXFwiNC43NTdcXFwiIGhlaWdodD1cXFwiMC43OTFcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0xMi41NiAxOC4xMDgpIHJvdGF0ZSgtNTcuNjAzKVxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk04LjE0NywyMy42OTRhNy4xNzEsNy4xNzEsMCwwLDAsLjEzMy0yLjMxN2wuNzM0Ljk0OSwxLjE3MS4yNkE3LjE2NSw3LjE2NSwwLDAsMCw4LjE0NywyMy42OTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHJlY3QgeD1cXFwiMTUuNDE4XFxcIiB5PVxcXCIxOC4wNTFcXFwiIHdpZHRoPVxcXCIwLjc5MVxcXCIgaGVpZ2h0PVxcXCI0LjkxOVxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTguMjU3IDEwLjk1MSkgcm90YXRlKC0zMC43MDgpXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTE3LjgsMjMuODU2YTcuMTcxLDcuMTcxLDAsMCwwLTIuMDA2LTEuMTY4bDEuMTc5LS4yMjUuNzYyLS45MjdBNy4xNjUsNy4xNjUsMCwwLDAsMTcuOCwyMy44NTZaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTEzLjAyNCwxOS4xMjVhNS4yMzgsNS4yMzgsMCwwLDEtMi44MDctLjc2MiwyLjc3NSwyLjc3NSwwLDAsMS0xLjQxLTIuMjI5LDIuNzc1LDIuNzc1LDAsMCwxLDEuMjY2LTIuMzE0LDUuMyw1LjMsMCwwLDEsMi45NDgtLjk0OCw2LjcxMiw2LjcxMiwwLDAsMSwyLjEzNC4zMTNsLS4zMzEsMWE1LjY2OCw1LjY2OCwwLDAsMC0xLjc2OS0uMjYxLDQuMjM4LDQuMjM4LDAsMCwwLTIuMzU4Ljc0NCwxLjc2MSwxLjc2MSwwLDAsMC0uODM1LDEuNDMsMS43NjEsMS43NjEsMCwwLDAsLjkyNCwxLjM3NCw0LjI0Miw0LjI0MiwwLDAsMCwyLjQuNTkzLDUuNyw1LjcsMCwwLDAsMS42NzgtLjM3OGwuMzc4Ljk4NWE2Ljg0NCw2Ljg0NCwwLDAsMS0yLjAyMi40NDhRMTMuMTIxLDE5LjEyNSwxMy4wMjQsMTkuMTI1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk0xNS40MzUsMTIuODc2YTQuMzM4LDQuMzM4LDAsMCwwLS45ODQsMS42MjIsMi4wNjQsMi4wNjQsMCwwLDEtLjAxNiwyLjgwNiw0LjQsNC40LDAsMCwwLC45ODIsMS42LDMuOTMyLDMuOTMyLDAsMCwwLC4wNzgtNS45ODZDMTUuNDc2LDEyLjksMTUuNDU0LDEyLjg5MywxNS40MzUsMTIuODc2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzY1NjU2NVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS41MjUsMTUuMjc4YTI3LjkzMSwyNy45MzEsMCwwLDAtMS4yNjMtMy43NDIsNC4zNzYsNC4zNzYsMCwwLDAtMS43NzcuNTE3LDI2LjA2MywyNi4wNjMsMCwwLDEsMS4yNTMsMy42ODUsMjYuMDM4LDI2LjAzOCwwLDAsMSwuNzM0LDQuNTM0LDQuMzQ3LDQuMzQ3LDAsMCwwLDEuODI1LS4zNTFBMjcuOSwyNy45LDAsMCwwLDE5LjUyNSwxNS4yNzhaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU2NTY1XFxcIi8+PHBhdGggZD1cXFwiTTE2LjE1MywxMi4yMjlBNC40MzcsNC40MzcsMCwxLDAsMjIuMywxMy41LDQuNDM3LDQuNDM3LDAsMCwwLDE2LjE1MywxMi4yMjlabTQuODEyLDcuMzMyYTQuMzQ2LDQuMzQ2LDAsMSwxLDEuMjQ5LTYuMDE4QTQuMzQ2LDQuMzQ2LDAsMCwxLDIwLjk2NSwxOS41NjFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMmMyOTI4XFxcIi8+PHBhdGggZD1cXFwiTTIyLjAxNSwxOS4xODZhLjgyMi44MjIsMCwwLDAtLjE5Mi0uMjA5LDQuMzQ3LDQuMzQ3LDAsMCwxLS4zMzMuMzE5LDQuNTIyLDQuNTIyLDAsMCwxLS40NDYuMzM3LDQuNzMsNC43MywwLDAsMS0uOTQuNDc3LjY2OS42NjksMCwwLDAsLjAzMS4xLjY0LjY0LDAsMCwwLC4wNDcuMDk0bC40ODcuOEwyMi41LDE5Ljk4NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyODI4MjhcXFwiLz48cmVjdCB4PVxcXCIyMC43OTNcXFwiIHk9XFxcIjIwLjc4NFxcXCIgd2lkdGg9XFxcIjIuMTQ3XFxcIiBoZWlnaHQ9XFxcIjAuNDRcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC03Ljc0IDE0LjQ2NSkgcm90YXRlKC0zMS4zOTQpXFxcIiBzdHlsZT1cXFwiZmlsbDojMjgyODI4XFxcIi8+PHJlY3QgeD1cXFwiMjIuODY4XFxcIiB5PVxcXCIyMC45NlxcXCIgd2lkdGg9XFxcIjIuMTQ3XFxcIiBoZWlnaHQ9XFxcIjYuODg3XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtOS4yMDcgMTYuMDQ0KSByb3RhdGUoLTMxLjM5NClcXFwiIHN0eWxlPVxcXCJmaWxsOiMyODI4MjhcXFwiLz48cGF0aCBkPVxcXCJNMjcuMDU0LDI3LjQ0M2wtLjIzNi0uMzg3LTEuODMzLDEuMTE5LjIzNi4zODdhLjkyNC45MjQsMCwwLDAsMS4yNzkuMTU5bC4xMS0uMDY3QS45MjQuOTI0LDAsMCwwLDI3LjA1NCwyNy40NDNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjgyODI4XFxcIi8+PHBhdGggZD1cXFwiTTIwLjY4LDE0Ljg0NWEuMzE1LjMxNSwwLDAsMSwuMzM4LjAyNywxLjA3OCwxLjA3OCwwLDAsMSwuMjk0LjU3OCwxLjEsMS4xLDAsMCwxLC4wMjkuNjU0LjMyNy4zMjcsMCwwLDEtLjI3OC4yLjQ2OC40NjgsMCwwLDEtLjM3LS4xLjkyMi45MjIsMCwwLDEtLjI2Mi0uNS45NTUuOTU1LDAsMCwxLS4wMS0uNTg1QS40NjYuNDY2LDAsMCwxLDIwLjY4LDE0Ljg0NVptLjA2LjIyN2EuMTQ5LjE0OSwwLDAsMC0uMDc0LjA2My4yNDcuMjQ3LDAsMCwwLS4wMjcuMTMyLDEuNjI2LDEuNjI2LDAsMCwwLC4wNjQuMzU1LDEuNTkyLDEuNTkyLDAsMCwwLC4xMTIuMzI5LjI2OC4yNjgsMCwwLDAsLjA5NC4xMS4xNDIuMTQyLDAsMCwwLC4wOTQuMDE1LjEyMS4xMjEsMCwwLDAsLjA3OC0uMDQ4LjIxMS4yMTEsMCwwLDAsLjAyOC0uMTI4LDIuNjQzLDIuNjQzLDAsMCwwLS4xODYtLjcyMi4yMzUuMjM1LDAsMCwwLS4wOTMtLjEwN0EuMTE2LjExNiwwLDAsMCwyMC43MzksMTUuMDcyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yMS42OTQsMTQuNGEuMy4zLDAsMCwxLC4zNDYuMDU3LDEuNDkzLDEuNDkzLDAsMCwxLC4zMjUuNywxLjUyMSwxLjUyMSwwLDAsMSwuMDYuNzcxLjMxLjMxLDAsMCwxLS4yNy4yMjguNDQ2LjQ0NiwwLDAsMS0uMzc5LS4xMzcsMS4zMSwxLjMxLDAsMCwxLS4yOTItLjYxNywxLjM0MSwxLjM0MSwwLDAsMS0uMDQxLS43QS40NDEuNDQxLDAsMCwxLDIxLjY5NCwxNC40Wm0uMDcyLjI3M2EuMTM2LjEzNiwwLDAsMC0uMDcyLjA2OS4zMTUuMzE1LDAsMCwwLS4wMjEuMTU1LDIuMzUxLDIuMzUxLDAsMCwwLC4wODQuNDI3LDIuMzEsMi4zMSwwLDAsMCwuMTMxLjQuMzQ3LjM0NywwLDAsMCwuMS4xMzUuMTMuMTMsMCwwLDAsLjEuMDIxLjExLjExLDAsMCwwLC4wNzYtLjA1NC4yNzUuMjc1LDAsMCwwLC4wMjItLjE1LDMuNzczLDMuNzczLDAsMCwwLS4yMjQtLjg2Mi4zMTEuMzExLDAsMCwwLS4xLS4xMzJBLjEuMSwwLDAsMCwyMS43NjYsMTQuNjc0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yMy40NzIsMTUuOTM0bC0uMjY5LjAzOC0uMzc5LTEuNDM5YS45NTUuOTU1LDAsMCwxLS4yNTcuMzkybC0uMDg3LS4zMzFhLjg0MS44NDEsMCwwLDAsLjE2OS0uMjYuODc0Ljg3NCwwLDAsMCwuMDc1LS4zODNsLjItLjA4OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjQuNDU1LDE1Ljc5NGwtLjI2OS4wMzgtLjQyOS0xLjYyNWExLDEsMCwwLDEtLjI0Ny40MjlsLS4xLS4zNzZhLjg3NC44NzQsMCwwLDAsLjE2Mi0uMjg0LDEuMDI4LDEuMDI4LDAsMCwwLC4wNjQtLjQyNGwuMi0uMDg5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yNC42MzYsMTMuMTE3Yy4xMjctLjA1NS4yNDktLjAwOC4zNjkuMTQ0YTMuMTEsMy4xMSwwLDAsMSwuNDE2LDEuMDM0LDMuMTQzLDMuMTQzLDAsMCwxLC4xNTEsMS4xMWMtLjAyOS4xOS0uMTExLjI5NC0uMjQ3LjMxMnMtLjI3Mi0uMDU5LS40LS4yMzFhMi44NTUsMi44NTUsMCwwLDEtLjM4MS0uOTUsMi44NzEsMi44NzEsMCwwLDEtLjEzMi0xLjAzOUEuNDM3LjQzNywwLDAsMSwyNC42MzYsMTMuMTE3Wm0uMTA3LjRhLjEyNC4xMjQsMCwwLDAtLjA2Ny4wODguNTg0LjU4NCwwLDAsMCwwLC4yMjEsNS4yMTgsNS4yMTgsMCwwLDAsLjEzOS42MzUsNS4xNTMsNS4xNTMsMCwwLDAsLjE4NC42LjY2LjY2LDAsMCwwLC4xMi4yMDguMTE4LjExOCwwLDAsMCwuMS4wNC4xLjEsMCwwLDAsLjA3MS0uMDcyLjUyOC41MjgsMCwwLDAsMC0uMjE2LDUuNDQyLDUuNDQyLDAsMCwwLS4xNDQtLjY1Myw1LjQ0Nyw1LjQ0NywwLDAsMC0uMTg5LS42MTkuNjEyLjYxMiwwLDAsMC0uMTE5LS4yMDVBLjA5My4wOTMsMCwwLDAsMjQuNzQzLDEzLjUyMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjYuNjM4LDE1LjQ4OGwtLjI2OS4wMzgtLjU0LTIuMDM5QTEuMTUxLDEuMTUxLDAsMCwxLDI1LjYsMTRsLS4xMjYtLjQ3NWEuOTkuOTksMCwwLDAsLjE0OC0uMzM3LDEuNDM2LDEuNDM2LDAsMCwwLC4wMzktLjUxNWwuMi0uMDg4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yNi42NjYsMTIuMjM2Yy4xMjctLjA1NS4yNTUuMDEyLjM4NS4yYTQuNTg0LDQuNTg0LDAsMCwxLC40NzgsMS4yNjgsNC42Miw0LjYyLDAsMCwxLC4yMTMsMS4zNDNjLS4wMTguMjI5LS4xLjM1Mi0uMjMyLjM3cy0uMjc4LS4wODEtLjQyMS0uM2E0LjI4NCw0LjI4NCwwLDAsMS0uNDQzLTEuMTc5LDQuMjgzLDQuMjgzLDAsMCwxLS4xOTQtMS4yNzJDMjYuNDY4LDEyLjQzOCwyNi41MzksMTIuMjkxLDI2LjY2NiwxMi4yMzZabS4xMzEuNXEtLjA0Ni4wMTgtLjA2NC4xYS44MjkuODI5LDAsMCwwLC4wMDkuMjY2LDcuODU2LDcuODU2LDAsMCwwLC4xNzguNzc5cS4xNDMuNTQxLjIyMS43MzhhLjk0Ny45NDcsMCwwLDAsLjEzNC4yNTguMTE5LjExOSwwLDAsMCwuMS4wNTJxLjA0OC0uMDA5LjA2OC0uMDg1YS43NjIuNzYyLDAsMCwwLS4wMDgtLjI2Miw4LjExNyw4LjExNywwLDAsMC0uMTgyLS44cS0uMTQ4LS41NTctLjIyNy0uNzU3YS44OTIuODkyLDAsMCwwLS4xMzMtLjI1NlEyNi44NDMsMTIuNzE0LDI2LjgsMTIuNzMyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yNy42ODEsMTEuOGMuMTI3LS4wNTUuMjU3LjAyMy4zOTMuMjM0YTUuNDMxLDUuNDMxLDAsMCwxLC41MDksMS4zODUsNS40NjcsNS40NjcsMCwwLDEsLjI0NCwxLjQ2Yy0uMDEzLjI0OS0uMDg4LjM4MS0uMjI0LjRzLS4yODEtLjA5Mi0uNDMtLjMyOGE1LjExLDUuMTEsMCwwLDEtLjQ3My0xLjI5NCw1LjEsNS4xLDAsMCwxLS4yMjUtMS4zODhDMjcuNDg2LDEyLjAwOCwyNy41NTUsMTEuODUxLDI3LjY4MSwxMS44Wm0uMTQ0LjU0MnEtLjA0Ni4wMTgtLjA2Mi4xMDZhLjk3Ljk3LDAsMCwwLC4wMTUuMjg5cS4wNC4yNTkuMi44NTF0LjI0LjgwN2ExLjExMiwxLjExMiwwLDAsMCwuMTQuMjg0cS4wNTcuMDY3LjEwNi4wNTl0LjA2Ni0uMDkxYS45LjksMCwwLDAtLjAxNC0uMjg0cS0uMDQtLjI2LS4yLS44Njd0LS4yNDUtLjgyN2ExLjA1MywxLjA1MywwLDAsMC0uMTQtLjI4MVEyNy44NzEsMTIuMzIsMjcuODI1LDEyLjMzOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjkuOTE1LDE1LjAzNGwtLjI3LjAzNy0uNzA2LTIuNjYxYTEuNDc4LDEuNDc4LDAsMCwxLS4xOTIuNjM2bC0uMTY2LS42MjVBMS4yNDgsMS4yNDgsMCwwLDAsMjguNzA4LDEyYTIuMjE0LDIuMjE0LDAsMCwwLDAtLjY1M2wuMi0uMDg4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yOS43MTIsMTAuOTIxYy4xMjctLjA1NC4yNjMuMDQzLjQwOS4yOTRhNy4zNDUsNy4zNDUsMCwwLDEsLjU3MiwxLjYxOUE3LjM4Miw3LjM4MiwwLDAsMSwzMSwxNC41MjdjMCwuMjg4LS4wNzIuNDQtLjIwOS40NThzLS4yODYtLjExNC0uNDQ3LS4zOTNhNi45ODQsNi45ODQsMCwwLDEtLjUzNS0xLjUyNCw2Ljk0NCw2Ljk0NCwwLDAsMS0uMjg3LTEuNjIxQzI5LjUyMywxMS4xNTEsMjkuNTg2LDEwLjk3NSwyOS43MTIsMTAuOTIxWm0uMTY4LjYzM3EtLjA0Ni4wMTgtLjA1OS4xMTlhMS4yODcsMS4yODcsMCwwLDAsLjAyNy4zMzRxLjA1MS4zLjIzNS45OTR0LjI3Ny45NDZhMS40ODQsMS40ODQsMCwwLDAsLjE1NC4zMzRxLjA2LjA4LjEwOS4wNzF0LjA2My0uMWExLjIsMS4yLDAsMCwwLS4wMjYtLjMzcS0uMDUxLS4zLS4yMzktMS4wMTF0LS4yODItLjk2NWExLjQyLDEuNDIsMCwwLDAtLjE1My0uMzMyUTI5LjkyNiwxMS41MzYsMjkuODgsMTEuNTUzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yMS4xNjcsMTYuMzYyYS40MjIuNDIyLDAsMCwxLC4zMTguMTg1LDEuMDA1LDEuMDA1LDAsMCwxLS4yNzcsMS4wMy40Mi40MiwwLDAsMS0uMzY2LDAsLjU5LjU5LDAsMCwxLS4zMTEtLjI2MS44MDguODA4LDAsMCwxLC4yNTQtLjg5M0EuNTYxLjU2MSwwLDAsMSwyMS4xNjcsMTYuMzYyWm0tLjA1MS4xODlhLjE3NS4xNzUsMCwwLDAtLjE5Mi4wODcsMS40ODcsMS40ODcsMCwwLDAtLjE1NS41NjcuMjE2LjIxNiwwLDAsMCwuMDM5LjEyNC4xOTEuMTkxLDAsMCwwLC4wODQuMDU4LjE0NS4xNDUsMCwwLDAsLjE4OC0uMDY5LDEuNjY2LDEuNjY2LDAsMCwwLC4xNjQtLjYuMTg5LjE4OSwwLDAsMC0uMDQtLjEyMUEuMTYzLjE2MywwLDAsMCwyMS4xMTcsMTYuNTUxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yMi4zNzYsMTYuNTQ4YS4zODIuMzgyLDAsMCwxLC4zMTEuMjEyLDEuMDI0LDEuMDI0LDAsMCwxLS4wMTkuNjYsMS4wMjIsMS4wMjIsMCwwLDEtLjMxNS41ODEuMzguMzgsMCwwLDEtLjM3My4wMjUuNTMzLjUzMywwLDAsMS0uMy0uMjksMS4xODksMS4xODksMCwwLDEsLjMwOS0xLjFBLjUuNSwwLDAsMSwyMi4zNzYsMTYuNTQ4Wm0tLjA2Mi4yM2EuMTY3LjE2NywwLDAsMC0uMS4wMTMuMjM1LjIzNSwwLDAsMC0uMS4xLDIuMjE5LDIuMjE5LDAsMCwwLS4xODkuNjk0LjI2OS4yNjksMCwwLDAsLjAzMy4xNDcuMTY3LjE2NywwLDAsMCwuMDgzLjA2NC4xNDMuMTQzLDAsMCwwLC4xLDAsLjIwNi4yMDYsMCwwLDAsLjA5NC0uMSwyLjQzNiwyLjQzNiwwLDAsMCwuMi0uNzI3LjI0LjI0LDAsMCwwLS4wMzQtLjE0NEEuMTQxLjE0MSwwLDAsMCwyMi4zMTQsMTYuNzc4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yMy4zNywxOC41NDFsLS4yODEtLjExLjMyOC0xLjIyNWExLDEsMCwwLDEtLjQ0Mi4xNTJsLjA3NS0uMjgxYS44ODEuODgxLDAsMCwwLC4yOTItLjEuNjguNjgsMCwwLDAsLjI1OS0uMjM4bC4yNDIuMDM3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0yNC43OTMsMTYuOTE5YS4zNDguMzQ4LDAsMCwxLC4zLjI2NiwxLjc1MSwxLjc1MSwwLDAsMS0uMDc1Ljg3LDEuNzQ5LDEuNzQ5LDAsMCwxLS4zNzEuNzkxLjM0NS4zNDUsMCwwLDEtLjM4OC4wNzguNDg4LjQ4OCwwLDAsMS0uMjg4LS4zNDgsMS41ODcsMS41ODcsMCwwLDEsLjA2Ny0uNzksMS41NzcsMS41NzcsMCwwLDEsLjM1NC0uNzI3QS40NTcuNDU3LDAsMCwxLDI0Ljc5MywxNi45MTlabS0uMDg0LjMxMmEuMTQzLjE0MywwLDAsMC0uMTA3LjAyNS4zNTMuMzUzLDAsMCwwLS4xMDYuMTQxLDQuMTI2LDQuMTI2LDAsMCwwLS4yNTcuOTQ4LjQwOC40MDgsMCwwLDAsLjAyMS4xOTIuMTQzLjE0MywwLDAsMCwuMDguMDc1LjEyLjEyLDAsMCwwLC4xLS4wMTEuMzE4LjMxOCwwLDAsMCwuMTA1LS4xMzcsNC40MTgsNC40MTgsMCwwLDAsLjI2Ni0uOTgxLjM3NC4zNzQsMCwwLDAtLjAyMi0uMTg5QS4xMTkuMTE5LDAsMCwwLDI0LjcxLDE3LjIzMVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjUuNjQ5LDE5LjQzbC0uMjgxLS4xMS40MjgtMS42YTEuMDMzLDEuMDMzLDAsMCwxLS40NjIuMjI3bC4xLS4zNzFhLjkuOSwwLDAsMCwuMy0uMTUxLjkzLjkzLDAsMCwwLC4yODEtLjMyMWwuMjQyLjAzN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjcuMjExLDE3LjI5MWEuMzQ0LjM0NCwwLDAsMSwuMjgyLjMxOSwyLjY5MiwyLjY5MiwwLDAsMS0uMTMxLDEuMDgsMi42OSwyLjY5LDAsMCwxLS40MjcsMSwuMzQuMzQsMCwwLDEtLjQuMTMuNDg3LjQ4NywwLDAsMS0uMjczLS40MDUsMi40OTQsMi40OTQsMCwwLDEsLjEyMi0xLDIuNDcsMi40NywwLDAsMSwuNDEtLjkzN0EuNDUxLjQ1MSwwLDAsMSwyNy4yMTEsMTcuMjkxWm0tLjEwNi4zOTRhLjEzMy4xMzMsMCwwLDAtLjExLjAzNi41MDkuNTA5LDAsMCwwLS4xMTcuMTgyLDYuNjIyLDYuNjIyLDAsMCwwLS4zMjUsMS4yLjU5MS41OTEsMCwwLDAsLjAwOS4yMzcuMTMzLjEzMywwLDAsMCwuMDc3LjA4Ni4xMS4xMSwwLDAsMCwuMTA3LS4wMjMuNDY1LjQ2NSwwLDAsMCwuMTE2LS4xNzgsNC42MzksNC42MzksMCwwLDAsLjItLjYxOSw0LjY1OCw0LjY1OCwwLDAsMCwuMTM2LS42MTUuNTUyLjU1MiwwLDAsMC0uMDEtLjIzNUEuMTEuMTEsMCwwLDAsMjcuMTA1LDE3LjY4NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz48cGF0aCBkPVxcXCJNMjcuOTI3LDIwLjMybC0uMjgxLS4xMS41MjgtMS45NzFhMS4xMzQsMS4xMzQsMCwwLDEtLjQ4Mi4zbC4xMjMtLjQ2YS45NzIuOTcyLDAsMCwwLC4zMTctLjIsMS4yNDgsMS4yNDgsMCwwLDAsLjMtLjRsLjI0Mi4wMzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBmZjgwXFxcIi8+PHBhdGggZD1cXFwiTTI4Ljk1MywyMC43MjFsLS4yODEtLjExLjU3My0yLjEzOWExLjIsMS4yLDAsMCwxLS40OTEuMzM2bC4xMzQtLjVhMS4wMiwxLjAyLDAsMCwwLC4zMjMtLjIyLDEuNDEzLDEuNDEzLDAsMCwwLC4zMTQtLjQ0bC4yNDIuMDM3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZmY4MFxcXCIvPjxwYXRoIGQ9XFxcIk0zMC43MTcsMTcuODNjLjE1MS4wMjMuMjM4LjE1NS4yNjIuNGE0LjQzNiw0LjQzNiwwLDAsMS0uMjEzLDEuMzg1LDQuNDM0LDQuNDM0LDAsMCwxLS41MDksMS4zMDdjLS4xNC4xOTUtLjI4LjI2My0uNDIyLjIwN3MtLjIyNi0uMjItLjI1LS40ODlhNC4xOTQsNC4xOTQsMCwwLDEsLjItMS4zLDQuMTQzLDQuMTQzLDAsMCwxLC40OTItMS4yNDFDMzAuNDIsMTcuOSwzMC41NjYsMTcuODA3LDMwLjcxNywxNy44M1ptLS4xMzcuNTEzYS4xMzIuMTMyLDAsMCwwLS4xMTUuMDUzLjguOCwwLDAsMC0uMTMzLjI0MSw3LjU4Nyw3LjU4NywwLDAsMC0uMjQ0Ljc5MSw3LjUzOSw3LjUzOSwwLDAsMC0uMTguNzc5LjkzLjkzLDAsMCwwLS4wMDkuMy4xMzEuMTMxLDAsMCwwLC4wNzMuMS4xMDguMTA4LDAsMCwwLC4xMTEtLjAzOS43NDIuNzQyLDAsMCwwLC4xMzItLjIzNyw3LjgsNy44LDAsMCwwLC4yNDgtLjgwNiw3LjgzNSw3LjgzNSwwLDAsMCwuMTg1LS44Ljg4NC44ODQsMCwwLDAsLjAwOC0uM1EzMC42MzMsMTguMzUzLDMwLjU4LDE4LjM0M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGZmODBcXFwiLz5cIixcblx0fSxcblx0XCJFZGl0b3JDb25maWdcIjoge1xuXHRcdGNvbG91cjogXCIjZTNlM2Y4XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNOC43MDksMTguMzUxYTEuMjY3LDEuMjY3LDAsMCwwLC41MzItMS4zNzlDOC42OTIsMTcuMjA3LDguNzE4LDE3Ljc0OSw4LjcwOSwxOC4zNTFaXFxcIiBzdHlsZT1cXFwiZmlsbDojZTNlM2Y4XFxcIi8+PHBhdGggZD1cXFwiTTE0LjkyNCwxOS44NTJhLjg3MS44NzEsMCwwLDAsLjYyLTEuMTM1QTEuNDMsMS40MywwLDAsMCwxNC45MjQsMTkuODUyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2UzZTNmOFxcXCIvPjxwYXRoIGQ9XFxcIk0yLjcxMywyNy4wNzlhMS41MzgsMS41MzgsMCwwLDAsLjUyNCwxLjM1M2MxLjQxNC43OTQsNi4zNzIuMTc1LDguMDU2LS4yYTE0Ljk5NCwxNC45OTQsMCwwLDAsMi40MjYtMS4yMTMsMjIuNjQzLDIyLjY0MywwLDAsMCw0LjcxMy0yLjU1N2MxLjA4Mi0uNzk0LDIuOC0zLjAyOSwyLjk4NS00LjM2NGwtMS40NzUtLjMzMmMtLjAzNSwxLjUtLjM3NSwxLjg0Mi0xLjcxMSwyLjE5MWExMC42NjIsMTAuNjYyLDAsMCwxLTMuNTcuMTQsMy4zNjIsMy4zNjIsMCwwLDEtMi4zMTMtMS41NjJjLTEuMDY1LTEuNDE0LjIzNi0yLjQtMS40NDktMi41LTEuNzcyLDIuMTczLTQuOS42MTEtNi4yNjcuMzkzYTMwLjA2NiwzMC4wNjYsMCwwLDAtMS45MzgsNy42LDIuNzQ4LDIuNzQ4LDAsMCwxLDIuMTM4LjMyM2MyLjY4OCwxLjAzOS4zNCwxLjk1NS0uNzMzLDEuNjg1QzMuMzY4LDI3Ljg2NCwzLjE0MSwyNy4zODQsMi43MTMsMjcuMDc5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZkZmRmZFxcXCIvPjxwYXRoIGQ9XFxcIk02LjIzMSwxNC41MzdhMTEuNTM5LDExLjUzOSwwLDAsMSwyLjk4NSwxLjEyNmMxLjUxLjc1MSwxLjc4MS42NDYsMS45MiwxLjY5My4wMTcuMTkyLS4wMTcuMy41MzIuNDcxLjkyNS4yODgtLjUzMi0uMjI3LDEuOTQ2LS4yMThBMTYuNjQsMTYuNjQsMCwwLDEsMTkuNTU5LDE4LjljLjQ1NC4yODguMzY3LjY1NSwxLjkuNjExYTE4Ljc2NywxOC43NjcsMCwwLDAtMS4yLTYuMTYyYy0uODY0LTIuMDA3LTIuMDA3LTIuMzEzLTQuMzM4LTMuMDY0LTEuMzYyLS40MzYtNS4zNTktLjkxNi02LjYtLjE0OC0xLjE2MS43MjQtMS4zNzksMS41ODktMi40NjEsMy4xMDdBNS4zNjYsNS4zNjYsMCwwLDAsNi4yMzEsMTQuNTM3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZkZmRmZFxcXCIvPjxwYXRoIGQ9XFxcIk0xNS44NCwxOC4yNDZjLjg3My4zNTgtLjA0NCwyLjY3MS0xLjI1NywyLjExMi0uMzkzLTEuMTA4LjU0MS0xLjczNy43OTQtMi4yMzRhOC41MSw4LjUxLDAsMCwwLTIuNDYxLS4xNDhjLS41NzYuMjE4LS43MDcsMS40NDktLjQxLDIuMDI1LDEuNCwyLjc0MSw3LjU2NywyLjE1Niw2LjkxMy4wMjYtLjI2Mi0uODY0LS41MDYtMS0xLjM4OC0xLjNBNi44ODUsNi44ODUsMCwwLDAsMTUuODQsMTguMjQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZkZmRmZFxcXCIvPjxwYXRoIGQ9XFxcIk00Ljg2OSwxNy45NDFjLjcuNjcyLDIuMjc4Ljc3NywzLjMuODI5QzguMywxNy40MTcsOC40MTMsMTYuNCw5LjUsMTYuNDgzYTEuNiwxLjYsMCwwLDEtLjMwNSwyLjEzLDEuMzg2LDEuMzg2LDAsMCwwLDEuMzYyLTEuNzYzLDE0LjU0MiwxNC41NDIsMCwwLDAtNC40Ni0xLjg5NEE5LjUwNiw5LjUwNiwwLDAsMCw0Ljg2OSwxNy45NDFaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmRmZGZkXFxcIi8+PHBhdGggZD1cXFwiTTMuMjI4LDI2LjU4MWMuNTc2LS4wNTIsMi4wNzcuMzg0LDIuMi44NzNDNC40OTQsMjcuNTY4LDMuMzA3LDI3LjQ4LDMuMjI4LDI2LjU4MVptLS41MTUuNWMuNDI4LjMwNS42NTUuNzg2LDEuMzg4Ljk2LDEuMDc0LjI3MSwzLjQyMS0uNjQ2LjczMy0xLjY4NUEyLjc0OCwyLjc0OCwwLDAsMCwyLjcsMjYuMDMyYTMwLjA2NiwzMC4wNjYsMCwwLDEsMS45MzgtNy42YzEuMzcuMjE4LDQuNDk1LDEuNzgxLDYuMjY3LS4zOTMsMS42ODUuMS4zODQsMS4wODIsMS40NDksMi41QTMuMzYyLDMuMzYyLDAsMCwwLDE0LjY2MiwyMi4xYTEwLjY2MiwxMC42NjIsMCwwLDAsMy41Ny0uMTRjMS4zMzUtLjM0OSwxLjY3Ni0uNjksMS43MTEtMi4xOTFsMS40NzUuMzMyYy0uMTgzLDEuMzM1LTEuOSwzLjU3LTIuOTg1LDQuMzY0YTIyLjY0MywyMi42NDMsMCwwLDEtNC43MTMsMi41NTcsMTQuOTk0LDE0Ljk5NCwwLDAsMS0yLjQyNiwxLjIxM2MtMS42ODUuMzc1LTYuNjQyLDEtOC4wNTYuMkExLjUzOCwxLjUzOCwwLDAsMSwyLjcxMywyNy4wNzlabTEyLjIxMS03LjIyN2ExLjQzLDEuNDMsMCwwLDEsLjYyLTEuMTM1QS44NzEuODcxLDAsMCwxLDE0LjkyNCwxOS44NTJabS45MTYtMS42MDZhNi44ODUsNi44ODUsMCwwLDEsMi4xOTEuNDhjLjg4Mi4zLDEuMTI2LjQzNiwxLjM4OCwxLjMuNjU1LDIuMTMtNS41MTYsMi43MTQtNi45MTMtLjAyNi0uMy0uNTc2LS4xNjYtMS44MDcuNDEtMi4wMjVhOC41MSw4LjUxLDAsMCwxLDIuNDYxLjE0OGMtLjI1My41LTEuMTg3LDEuMTI2LS43OTQsMi4yMzRDMTUuOCwyMC45MTcsMTYuNzEzLDE4LjYsMTUuODQsMTguMjQ2Wm0tNy4xMzEuMWMuMDA5LS42LS4wMTctMS4xNDMuNTMyLTEuMzc5QTEuMjY3LDEuMjY3LDAsMCwxLDguNzA5LDE4LjM1MVptLTMuODQtLjQxYTkuNTA2LDkuNTA2LDAsMCwxLDEuMjIyLTIuOTg1LDE0LjU0MiwxNC41NDIsMCwwLDEsNC40NiwxLjg5NEExLjM4NiwxLjM4NiwwLDAsMSw5LjE5LDE4LjYxM2ExLjYsMS42LDAsMCwwLC4zMDUtMi4xM2MtMS4wODItLjA3OS0xLjIuOTM0LTEuMzI3LDIuMjg3QzcuMTQ3LDE4LjcxNyw1LjU2NywxOC42MTMsNC44NjksMTcuOTQxWk00LDE3LjI0MmMtLjMyMy0uODktLjMyMy0yLjI3OCwxLjA0Ny0yLjM5MmwtLjcsMS45NDZDNC4xNjIsMTcuMjE2LDQuMTYyLDE3LjEyLDQsMTcuMjQyWm0yLjIzNC0yLjcwNmE1LjM2Niw1LjM2NiwwLDAsMSwuNjI4LTEuMjkyYzEuMDgyLTEuNTE5LDEuMy0yLjM4MywyLjQ2MS0zLjEwNywxLjIzOS0uNzY4LDUuMjM3LS4yODgsNi42LjE0OCwyLjMzLjc1MSwzLjQ3NCwxLjA1Niw0LjMzOCwzLjA2NGExOC43NjcsMTguNzY3LDAsMCwxLDEuMiw2LjE2MmMtMS41MzYuMDQ0LTEuNDQ5LS4zMjMtMS45LS42MTFhMTYuNjQsMTYuNjQsMCwwLDAtNS45NDQtMS4yOTJjLTIuNDc5LS4wMDktMS4wMjEuNTA2LTEuOTQ2LjIxOC0uNTUtLjE3NS0uNTE1LS4yNzktLjUzMi0uNDcxLS4xNC0xLjA0Ny0uNDEtLjk0My0xLjkyLTEuNjkzQTExLjUzOSwxMS41MzksMCwwLDAsNi4yMzEsMTQuNTM3Wm0xNS40NDktLjQyOGMtLjE2Ni0uNTUuMTQtLjUxNS42NzItLjg5YTkuMDIxLDkuMDIxLDAsMCwxLC45MjUtLjY1NWMxLjQwNS0uNzg2LDQuMDI0LS45MTYsNS4xNDEuMDE3QTIuNDc5LDIuNDc5LDAsMCwxLDI5LjUsMTQuNjVhNS44MzgsNS44MzgsMCwwLDEtMi42MTgsMy44MzIsNS4yMTMsNS4yMTMsMCwwLDEtNC43ODMsMS4yYy0uMTU3LS4zODQtLjAzNS0yLjgxOS0uMjE4LTMuNzE4LS4xNjYtLjgtLjA3OS0uODkuMzg0LTEuMzcsMS4zNjItMS40MTQsNC4zMTItMi40NDQsNS45ODgtMS4yMzEuNzA3LjUyNC41MDYuNzI0Ljg3MywxLjEyNi40NTQtLjQ4OS0uMzkzLTIuMTMtMy41MTctMi4wMjVDMjMuNDg2LDEyLjUyOSwyMi41NywxNC4xODcsMjEuNjgsMTQuMTA5Wk04Ljk3MSw5LjE0M2E4LjA5NCw4LjA5NCwwLDAsMSwyLjI3OC00LjZDMTIuNiwzLjUsMTQuMDE2LDIuNTA5LDE2LjA5NCwzLjY4N2MuNTE1LjI4OC40ODkuNDM2LjU0MSwxLjE1MmEzLjMxMiwzLjMxMiwwLDAsMS0uMTkyLDEuNWMtMS4zNzksNC40NTEtMi41MzEsMS44OTQtNi45NDgsMi45NWE2LjM3NCw2LjM3NCwwLDAsMSwyLjEyMS0zLjQxM2MxLjItMS4xNjEsMi4wNi0xLjkxMSwzLjg1OC0xLjY2N2ExLjg0MiwxLjg0MiwwLDAsMS0uMDUyLDIuMzIyYy0uOCwxLjI5Mi0xLDEuMjEzLS44ODIsMi4wOTUuNjI4LS4xNTcuODItLjc2OCwxLjEwOC0xLjM3OSwxLjc1NC0zLjY2Ni0uNzk0LTQuMTExLTIuMzU3LTMuNDM5QTEwLjM3MiwxMC4zNzIsMCwwLDAsOS43NjYsNy41NTRjLS4xMjIuMjQ0LS4yNTMuNTU5LS4zNjcuODI5Wm02LjkxMy4xODNDMTYuMDY3LDguMjM1LDE3LjE1LDcuOTY0LDE3LjE1LDQuNmMwLTEuNDQ5LTEuNzgxLTIuNzQ5LTQuMTExLTEuNzgxLTIsLjgyLTIuMywxLjQ0OS0zLjM2OSwzLjA1NS0xLDEuNTE5LS45NjksMy4xODYtMS44MzMsNC41OTEtLjI1My40LS40OC41NDEtLjc1OS45NDMtLjIuMy0uMzQ5LjY3Mi0uNTUsMS4wMjFBMTIuOTQsMTIuOTQsMCwwLDAsNS4zNjcsMTQuNGMtMS4wNDcuMDI2LTEuOTI5LjA0NC0yLjAzNCwxLjEyNi0uMTQsMS40ODQuNTU5LDEuODUuNTU5LDIuNDA5LS4wMDkuNi0yLjQ1Myw2LjY3Ny0xLjc3MiwxMC4zLjE5MiwxLC44NDcsMSwxLjg5NCwxLjEyNmExNy45MywxNy45MywwLDAsMCw4LjA1Ni0uNzA3bDQuMS0xLjk2NGExOC44NSwxOC44NSwwLDAsMCwzLjU2MS0yLjUsMTIuMzgzLDEyLjM4MywwLDAsMCwxLjMwOS0xLjcxOSwzLjIxMywzLjIxMywwLDAsMCwuOC0yLjIwOCw4LjQ3Myw4LjQ3MywwLDAsMSwyLjk4NSwxYy0uMDYxLjYtLjM1OC4zMTQtLjM1OC44NTVhMS4zNTUsMS4zNTUsMCwwLDAsMS4wNDctLjg5Yy0uMzU4LS41MjQtLjczMy0uNDM2LTEuMjQ4LS44NTVhOC4yMTIsOC4yMTIsMCwwLDEsMS43MTktLjcwN2MxLjIyMi0uNTA2LDMuMzA4LTIuMDQyLDMuODIzLTMuNDM5YTQuNDQ5LDQuNDQ5LDAsMCwwLS41NTktMy43MzYsNS40NDQsNS40NDQsMCwwLDAtMy42NDgtMS4xNjFjLTEuNTgsMC0zLjIxMiwxLjEzNS00LjQ4NiwxLjYyMy0uNDg5LS40MjgtLjUyNC0uOTE2LS44ODItMS4zODhBMTIuMjgxLDEyLjI4MSwwLDAsMCwxNS44ODQsOS4zMjZaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDIwMjAyXFxcIi8+PHBhdGggZD1cXFwiTTIxLjY4LDE0LjEwOWMuODkuMDc5LDEuODA3LTEuNTgsMy45MjgtMS42NSwzLjEyNS0uMSwzLjk3MSwxLjUzNiwzLjUxNywyLjAyNS0uMzY3LS40LS4xNjYtLjYtLjg3My0xLjEyNi0xLjY3Ni0xLjIxMy00LjYyNi0uMTgzLTUuOTg4LDEuMjMxLS40NjMuNDgtLjU1LjU2Ny0uMzg0LDEuMzcuMTgzLjkuMDYxLDMuMzM0LjIxOCwzLjcxOGE1LjIxMyw1LjIxMywwLDAsMCw0Ljc4My0xLjJBNS44MzgsNS44MzgsMCwwLDAsMjkuNSwxNC42NWEyLjQ3OSwyLjQ3OSwwLDAsMC0xLjA4Mi0yLjA2OWMtMS4xMTctLjkzNC0zLjczNi0uOC01LjE0MS0uMDE3YTkuMDIxLDkuMDIxLDAsMCwwLS45MjUuNjU1QzIxLjgxOSwxMy41OTQsMjEuNTE0LDEzLjU1OSwyMS42OCwxNC4xMDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmRmMmYyXFxcIi8+PHBhdGggZD1cXFwiTTguOTcxLDkuMTQzLDkuNCw4LjM4M2MuMTEzLS4yNzEuMjQ0LS41ODUuMzY3LS44MjlBMTAuMzcyLDEwLjM3MiwwLDAsMSwxMy4yOTIsMy44MWMxLjU2Mi0uNjcyLDQuMTExLS4yMjcsMi4zNTcsMy40MzktLjI4OC42MTEtLjQ4LDEuMjIyLTEuMTA4LDEuMzc5LS4xMjItLjg4Mi4wNzktLjguODgyLTIuMDk1YTEuODQyLDEuODQyLDAsMCwwLC4wNTItMi4zMjJjLTEuOC0uMjQ0LTIuNjYyLjUwNi0zLjg1OCwxLjY2N0E2LjM3NCw2LjM3NCwwLDAsMCw5LjUsOS4yOTFjNC40MTYtMS4wNTYsNS41NjksMS41LDYuOTQ4LTIuOTVhMy4zMTIsMy4zMTIsMCwwLDAsLjE5Mi0xLjVjLS4wNTItLjcxNi0uMDI2LS44NjQtLjU0MS0xLjE1Mi0yLjA3Ny0xLjE3OC0zLjQ5MS0uMTkyLTQuODQ0Ljg1NUE4LjA5NCw4LjA5NCwwLDAsMCw4Ljk3MSw5LjE0M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZWYzZjNcXFwiLz48cGF0aCBkPVxcXCJNNCwxNy4yNDJjLjE2Ni0uMTIyLjE2Ni0uMDI2LjM0OS0uNDQ1bC43LTEuOTQ2QzMuNjczLDE0Ljk2NCwzLjY3MywxNi4zNTIsNCwxNy4yNDJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWZlZmVmXFxcIi8+PHBhdGggZD1cXFwiTTUuNDI4LDI3LjQ1NGMtLjEyMi0uNDg5LTEuNjIzLS45MjUtMi4yLS44NzNDMy4zMDcsMjcuNDgsNC40OTQsMjcuNTY4LDUuNDI4LDI3LjQ1NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWYxZjFcXFwiLz5cIixcblx0fSxcblx0XCJFSlNcIjoge1xuXHRcdGNvbG91cjogXCIjOTBhOTNhXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMiwxNy42NzJWMTQuMzI4bDExLjg2LTYuMlYxMS4yTDUuMSwxNS45MzlsOC43NjIsNC44MzV2My4xWm0yNy44MTQtOC44OEwxOS40NjUsMjMuMjI5SDE1LjkxMkwyNi4yODEsOC43OTFaTTI2Ljk0NywyMS41YS43OTQuNzk0LDAsMCwwLC42MTktLjI3OCwxLjA2MSwxLjA2MSwwLDAsMCwuMjQ4LS43MzIsMS4xNDEsMS4xNDEsMCwwLDAtLjI0OC0uNzUzLjc2OC43NjgsMCwwLDAtMS4yMTcsMCwxLjE0MSwxLjE0MSwwLDAsMC0uMjQ4Ljc1MywxLjA5LDEuMDksMCwwLDAsLjIzNy43MzJBLjc2My43NjMsMCwwLDAsMjYuOTQ3LDIxLjVabTIuMTg2LDEuMDQyYTMuMjM3LDMuMjM3LDAsMCwxLTQuMzUyLS4wMSwyLjg2NCwyLjg2NCwwLDAsMSwwLTQuMSwzLjIyMywzLjIyMywwLDAsMSw0LjM1MiwwQTIuNzczLDIuNzczLDAsMCwxLDMwLDIwLjQ4NiwyLjc0LDIuNzQsMCwwLDEsMjkuMTM0LDIyLjUzOFpNMTguODIxLDEzLjA2MWEuNzk0Ljc5NCwwLDAsMCwuNjE5LS4yNzgsMS4wNjEsMS4wNjEsMCwwLDAsLjI0OC0uNzMyLDEuMTQxLDEuMTQxLDAsMCwwLS4yNDgtLjc1My43NjkuNzY5LDAsMCwwLTEuMjE3LDAsMS4xNDEsMS4xNDEsMCwwLDAtLjI0OC43NTMsMS4wOSwxLjA5LDAsMCwwLC4yMzcuNzMyQS43NjMuNzYzLDAsMCwwLDE4LjgyMSwxMy4wNjFaTTIxLjAwNywxNC4xYTMuMjM3LDMuMjM3LDAsMCwxLTQuMzUyLS4wMSwyLjg2NCwyLjg2NCwwLDAsMSwwLTQuMSwzLjIyMywzLjIyMywwLDAsMSw0LjM1MiwwLDIuNzczLDIuNzczLDAsMCwxLC44NjYsMi4wNjNBMi43NCwyLjc0LDAsMCwxLDIxLjAwNywxNC4xWlxcXCIgc3R5bGU9XFxcImZpbGw6IzkwYTkzYVxcXCIvPlwiLFxuXHR9LFxuXHRcIkVsaXhpclwiOiB7XG5cdFx0Y29sb3VyOiBcIiM0NTI0NTlcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjE3LjI0OVxcXCIgeTE9XFxcIi0zMzUuNTk3XFxcIiB4Mj1cXFwiMTQuOTczXFxcIiB5Mj1cXFwiLTMwOS45OTRcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMSwgMCwgMCwgLTEsIDAsIC0zMDYpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMDFcXFwiIHN0b3AtY29sb3I9XFxcIiNmN2Y2ZjhcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMC4wNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4wOVxcXCIgc3RvcC1jb2xvcj1cXFwiI2FhOWNiM1xcXCIgc3RvcC1vcGFjaXR5PVxcXCIwLjM5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjJcXFwiIHN0b3AtY29sb3I9XFxcIiM2ZjU2N2VcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMC42NlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zMlxcXCIgc3RvcC1jb2xvcj1cXFwiIzQ1MjQ1OVxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwLjg2XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjVcXFwiIHN0b3AtY29sb3I9XFxcIiMyZDA4NDNcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMC45N1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzI2MDAzZFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfZWxpeGlyPC90aXRsZT48cGF0aCBkPVxcXCJNMTcuOCw4LjU5MWMyLjA3OSw0LjU4NCw3LjY0LDYuNSw3LjE0MSwxMi40NzQtLjU4Miw3LjAxNy01LjU1MSw4Ljc4NC04LjMxNiw4LjkwOWE4LjgxNSw4LjgxNSwwLDAsMS05LjQtNy40ODVDNS42MTgsMTUuMDQ2LDEyLjY1NSwzLjYzMiwxNi43MDksMkExNS4wODMsMTUuMDgzLDAsMCwwLDE3LjgsOC41OTFabS0uMTY2LDE4Ljg1N2EuNDIzLjQyMywwLDAsMC0uMDU3LS4zMjdjLS41OTMtMS4xLTUuODEtMS42NDUtNi45MDctMS43NTJhOC4yNzIsOC4yNzIsMCwwLDAsMS42MzUsMS4zLDcuNzY2LDcuNzY2LDAsMCwwLDIuODE0LDEuMDQxQzE1LjkyMiwyNy44MzEsMTcuNDY3LDI3LjkzMywxNy42MzUsMjcuNDQ3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzdjNjQ4ZlxcXCIvPjxnIHN0eWxlPVxcXCJvcGFjaXR5OjAuMjVcXFwiPjxwYXRoIGQ9XFxcIk0xOC4yNDgsMTAuNjE4YzQuNDcsNC44MjMsNi40NDUsNC45NzksNi4yMzcsMTAuNDc4LS4yNDksNi40NzYtNC41NDMsOC4xOTEtNy4wNTgsOC40Mi00LjIuNTUxLTcuNDk1LTEuNTI4LTguMzU4LTUuNjg2QzcuMzEyLDE3LjA2MywxMi45NzgsNi4wMjMsMTYuNjM3LDQuMzZBMTUuMzIzLDE1LjMyMywwLDAsMCwxOC4yNTgsMTAuNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNjAwM2RcXFwiLz48L2c+PGcgc3R5bGU9XFxcIm9wYWNpdHk6MC43NVxcXCI+PHBhdGggZD1cXFwiTTE3LjM4NSw5LjkyMUMyMC4zNjksMTQsMjQuMzE5LDEzLjcsMjUsMTkuNjQxYy4wOTQsNi45MjMtMy42LDkuMjgzLTYuMjM3LDkuOTQ4LTQuNSwxLjI3OS04LjUxNC0uNjQ1LTEwLjA5NC01LTMuMDM1LTcsMi42NTEtMTguNTE0LDYuMzEtMjAuOTE1YTE1LjA4MywxNS4wODMsMCwwLDAsMi4zNyw2LjIzN1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48L2c+XCIsXG5cdH0sXG5cdFwiRWxtXCI6IHtcblx0XHRjb2xvdXI6IFwiIzhjZDYzNlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTE2LDE2Ljc2OCwyLjc2OCwzMEgyOS4yMzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojNWZiNGNiXFxcIi8+PHBhdGggZD1cXFwiTTI0LjEzLDIzLjM2MiwzMCwyOS4yMzJWMTcuNDkyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2VlYTQwMFxcXCIvPjxwYXRoIGQ9XFxcIk0xNS4yMzIsMTYsMiwyLjc2OFYyOS4yMzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojNTk2Mjc3XFxcIi8+PHBhdGggZD1cXFwiTTMwLDE0LjQ0OFYySDE3LjU1MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM1ZmI0Y2JcXFwiLz48cGF0aCBkPVxcXCJNMjMuMzkyLDkuMzc2bDYuNTk0LDYuNTk0LTYuNjI0LDYuNjI0TDE2Ljc2OCwxNlpNMi43NjgsMiw4Ljg2Myw4LjFIMjIuMTExTDE2LjAxNiwyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhjZDYzNlxcXCIvPjxwYXRoIGQ9XFxcIk0xNiwxNS4yMzJsNi4wNTEtNi4wNTFIOS45NDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWVhNDAwXFxcIi8+XCIsXG5cdH0sXG5cdFwiRVJCXCI6IHtcblx0XHRjb2xvdXI6IFwiIzkyMWExZVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTcuMjUsMjQuNzVoMTcuNUwxMi41LDEyLjUsNy4yNSwxNy43NVpNMiwzMEgzMFYySDE2TDIsMTZabTI1LjM3NS0yLjYyNUg0LjYyNXYtMTAuNWwxMi4yNS0xMi4yNWgxMC41WlxcXCIgc3R5bGU9XFxcImZpbGw6IzkyMWExZVxcXCIvPlwiLFxuXHR9LFxuXHRcIkVybGFuZ1wiOiB7XG5cdFx0Y29sb3VyOiBcIiNhMjAwM2VcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk02LjM4OCwyMy44NjdhMTEuMDEyLDExLjAxMiwwLDAsMS0zLjQ0MS04LjIzNCwxMC43NjUsMTAuNzY1LDAsMCwxLDIuODY0LTcuNUgydjE1LjczWm0yMC4wNjYsMGExNi40NCwxNi40NCwwLDAsMCwyLjUzNy0zLjEzNmwtNC4yMTgtMS44NzNhOC4zMDYsOC4zMDYsMCwwLDEtNi42NDEsNC4xMmMtNC4zNTktLjAxNC02LjA3Mi0zLjMyOS02LjA2My03LjU4NEgyOC4zNmE2LjQ2NSw2LjQ2NSwwLDAsMCwwLS45MzUsOS4wNTcsOS4wNTcsMCwwLDAtMi4wMjktNi4zMjZIMzB2MTUuNzNIMjYuNDU2Wk0xMi4zMzIsMTEuNzQyYTMuNzIzLDMuNzIzLDAsMCwxLDMuOS0zLjIzLDMuMjksMy4yOSwwLDAsMSwzLjUzMiwzLjIzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2EyMDAzZVxcXCIvPlwiLFxuXHR9LFxuXHRcIkYjXCI6IHtcblx0XHRjb2xvdXI6IFwiIzM3OGJiYVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIsMTYsMTUuMjg4LDIuNzEyVjkuMzU2TDguNjQ0LDE2bDYuNjQ0LDYuNjQ0djYuNjQ0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzM3OGJiYVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC41NDIsMTZsNC43NDYtNC43NDZ2OS40OTJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzc4YmJhXFxcIi8+PHBhdGggZD1cXFwiTTMwLDE2LDE2LjIzNywyLjcxMlY5LjM1NkwyMi44ODEsMTZsLTYuNjQ0LDYuNjQ0djYuNjQ0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzMwYjlkYlxcXCIvPlwiLFxuXHR9LFxuXHRcIkZpcmVzdG9yZSBzZWN1cml0eSBydWxlc1wiOiB7XG5cdFx0Y29sb3VyOiBcIiNmNjgyMGNcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk01LjgsMjQuNmwuMTctLjIzN0wxMy45OSw5LjE0OWwuMDE3LS4xNjEtMy41MzUtNi42NGEuNjU2LjY1NiwwLDAsMC0xLjIyNy4yMDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZjMjRhXFxcIi8+PHBhdGggZD1cXFwiTTUuOSwyNC40MmwuMTI4LS4yNUwxMy45NjUsOS4xMTQsMTAuNDM5LDIuNDQ4YS42LjYsMCwwLDAtMS4xMzMuMjA2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYTcxMlxcXCIvPjxwYXRoIGQ9XFxcIk0xNi41ODQsMTQuMDFsMi42MzItMi43TDE2LjU4Myw2LjI4OWEuNjc4LjY3OCwwLDAsMC0xLjE5NSwwTDEzLjk4MSw4Ljk3MVY5LjJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjRiZDYyXFxcIi8+PHBhdGggZD1cXFwiTTE2LjUzNywxMy45LDE5LjEsMTEuMjgsMTYuNTM3LDYuNGEuNTg5LjU4OSwwLDAsMC0xLjA3NC0uMDQ3TDE0LjA0OSw5LjA4MmwtLjA0Mi4xMzlaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZhNTBlXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI1LjgwMiAyNC42MDEgNS44NzkgMjQuNTIzIDYuMTU4IDI0LjQxIDE2LjQxOCAxNC4xODggMTYuNTQ4IDEzLjgzNCAxMy45ODkgOC45NTYgNS44MDIgMjQuNjAxXFxcIiBzdHlsZT1cXFwiZmlsbDojZjY4MjBjXFxcIi8+PHBhdGggZD1cXFwiTTE2LjkxMiwyOS43NTYsMjYuMiwyNC41NzcsMjMuNTQ2LDguMjQ2QS42MzUuNjM1LDAsMCwwLDIyLjQ3MSw3LjlMNS44LDI0LjZsOS4yMzMsNS4xNTVhMS45MjcsMS45MjcsMCwwLDAsMS44NzgsMFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZkZTA2OFxcXCIvPjxwYXRoIGQ9XFxcIk0yNi4xMTUsMjQuNTM0LDIzLjQ4Myw4LjMyNmEuNTU3LjU1NywwLDAsMC0uOTY3LS4zNTNMNS45LDI0LjU2OWw5LjEzMSw1LjFhMS45MTIsMS45MTIsMCwwLDAsMS44NjMsMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmY2NhM2ZcXFwiLz48cGF0aCBkPVxcXCJNMTYuOTEyLDI5LjZhMS45MjcsMS45MjcsMCwwLDEtMS44NzgsMEw1Ljg3NiwyNC41MjIsNS44LDI0LjZsOS4yMzMsNS4xNTVhMS45MjcsMS45MjcsMCwwLDAsMS44NzgsMEwyNi4yLDI0LjU3N2wtLjAyMy0uMTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWVhYjM3XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMy4yMDEgMTMgMTUuNDA1IDE2LjUzNCAxNS40MDUgMjcuNjAzIDIxLjYyNSAyNC43ODUgMjEuNjI1IDMxIDMxIDI2Ljc0MyAzMSAxNi41MzQgMjMuMjAxIDEzXFxcIiBzdHlsZT1cXFwiZmlsbDojMjUyNTI1XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMy4yMDEgMTQuNzMgMTYuOTg1IDE3LjU0OSAxNi45ODUgMjAuMzI3IDIzLjIwMSAxNy41MDcgMjkuNDIxIDIwLjMyNyAyOS40MjEgMTcuNTQ5IDIzLjIwMSAxNC43M1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjMuMjAxIDE5LjU2NCAxNi45ODUgMjIuMzgxIDE2Ljk4NSAyNS4xNTggMjMuMjAxIDIyLjMzNyAyOS40MjEgMjUuMTU4IDI5LjQyMSAyMi4zODEgMjMuMjAxIDE5LjU2NFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjguNjA2IDI2LjA5OCAyNS41NTEgMjQuNzEyIDIzLjIwMSAyNS43NzggMjMuMjAxIDI4LjU0OCAyOC42MDYgMjYuMDk4XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiRmxvd1wiOiB7XG5cdFx0Y29sb3VyOiBcIiNmZmIwNDdcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi02Ny45MDdcXFwiIHkxPVxcXCItMzA4LjU1MVxcXCIgeDI9XFxcIi02Ny44NTdcXFwiIHkyPVxcXCItMzA4LjU2NFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg4Ny44MjIsIDAsIDAsIC04OC41MzMsIDU5ODQuNTMyLCAtMjcyOTAuNjE3KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZDQ0MVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmYjA0N1xcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiLTY3LjY3NFxcXCIgeTE9XFxcIi0zMTAuMTIxXFxcIiB4Mj1cXFwiLTY3LjY0N1xcXCIgeTI9XFxcIi0zMTAuMDYzXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDg3LjgyMiwgMCwgMCwgLTg4LjUzMywgNTk2NC42NjcsIC0yNzQ0MylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmQ3NTRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmI1MzJcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiY1xcXCIgeDE9XFxcIi02Ny4wMjlcXFwiIHkxPVxcXCItMzEwLjkxXFxcIiB4Mj1cXFwiLTY3LjAyOVxcXCIgeTI9XFxcIi0zMTAuODZcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoODcuODIyLCAwLCAwLCAtODguNTMzLCA1OTAyLjgsIC0yNzUxOC43MzMpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZkNjQyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZkNDQxXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZiNTMyXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImRcXFwiIHgxPVxcXCItNjYuMjUyXFxcIiB5MT1cXFwiLTMxMC4zNzdcXFwiIHgyPVxcXCItNjYuMzJcXFwiIHkyPVxcXCItMzEwLjM2MlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxMDYuMTk4LCAwLCAwLCAtODguNTUxLCA3MDQ4LjQyOCwgLTI3NDc0LjE2NylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmQ0NDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmE4MjlcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX2Zsb3c8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yMy40MjYsMjkuNDFWMjIuMTcyaC03LjE4bDcuMTgsNy4yMzhcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmRmNTE7ZmlsbC1vcGFjaXR5OjAuNjk5OTk5OTg4MDc5MDcxXFxcIi8+PHBhdGggZD1cXFwiTTI0LjIzMSwyNS4zMDZWMTcuNDc3SDE2LjQ2Nmw3Ljc2Niw3LjgyOVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmODkwMDtmaWxsLW9wYWNpdHk6MC42OTk5OTk5ODgwNzkwNzFcXFwiLz48cGF0aCBkPVxcXCJNMTkuNTE1LDIyLjE3MVYzMGg3Ljc2NmwtNy43NjYtNy44MjlcXFwiIHN0eWxlPVxcXCJmaWxsLW9wYWNpdHk6MC42OTk5OTk5ODgwNzkwNzE7ZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTIyLjYwOCwxOFYxMS44MDlIMTYuNDY2TDIyLjYwOCwxOFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZGY0ZjtmaWxsLW9wYWNpdHk6MC42OTk5OTk5ODgwNzkwNzFcXFwiLz48cGF0aCBkPVxcXCJNMjUuNTI0LDE2LjUyNVY4LjdIMTcuNzU5bDcuNzY2LDcuODI5XFxcIiBzdHlsZT1cXFwiZmlsbC1vcGFjaXR5OjAuNzk5OTk5OTUyMzE2Mjg0O2ZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4yODgsMlY5LjgyOWg3Ljc2NkwxMi4yODgsMlxcXCIgc3R5bGU9XFxcImZpbGwtb3BhY2l0eTowLjgwMDAwMDAxMTkyMDkyOTtmaWxsOnVybCgjYylcXFwiLz48cGF0aCBkPVxcXCJNMTQuMTEsMTQuMjYyVjYuNDMzSDQuNzE5bDcuNzMyLDcuODMsMS42NTksMFxcXCIgc3R5bGU9XFxcImZpbGwtb3BhY2l0eTowLjg3OTk5OTk5NTIzMTYyODtmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMTQuMTEsMjkuOTU4VjIwLjQ4N0g0LjcxOWw5LjM5MSw5LjQ3MVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYjcwMDtmaWxsLW9wYWNpdHk6MC42OTk5OTk5ODgwNzkwNzFcXFwiLz48cGF0aCBkPVxcXCJNMTQuMTEyLDIyLjExNFYxNC4yODVINi4zNDZsNy43NjYsNy44MjlcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmI3MDA7ZmlsbC1vcGFjaXR5OjAuNVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi40NjUsMTEuODA5djcuODI5aDcuNzY2bC03Ljc2Ni03LjgyOVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmY2QyNTtmaWxsLW9wYWNpdHk6MC42OTk5OTk5ODgwNzkwNzFcXFwiLz48cGF0aCBkPVxcXCJNMTQuMDkyLDEyLjY5MVY0Ljg2Mkg2LjMyNmw3Ljc2Niw3LjgyOVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmODkwMDtmaWxsLW9wYWNpdHk6MC43MDAwMDAwNDc2ODM3MTZcXFwiLz48cGF0aCBkPVxcXCJNMTYuMjQ2LDIyLjE3MVYzMGg3Ljc2NmwtNy43NjYtNy44MjlcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZjg5MDA7ZmlsbC1vcGFjaXR5OjAuNjk5OTk5OTg4MDc5MDcxXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMS4xMjIgMjIuMTcyIDE4LjYwOSAxOS42MzggMTYuNDY1IDE5LjYzOCAxNi40NjYgMTEuODA5IDIwLjg0NyAxMS44MDkgMTguODgyIDkuODI5IDE0LjA5MiA5LjgyOSAxNC4xMSAxNC4yNjIgMTQuMTEgMjAuNDg3IDE0LjExIDMwIDE2LjI0NiAzMCAxNi4yNDYgMjIuMTcyIDIxLjEyMiAyMi4xNzJcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0fSxcblx0XCJGb3J0cmFuXCI6IHtcblx0XHRjb2xvdXI6IFwiIzczNGY5NlwiLFxuXHRcdGljb246IFwiPGcgaWQ9XFxcImczNzY4XFxcIj48cmVjdCBpZD1cXFwicmVjdDg4MVxcXCIgeD1cXFwiMi4zNFxcXCIgeT1cXFwiMi4zNFxcXCIgd2lkdGg9XFxcIjI3LjMzXFxcIiBoZWlnaHQ9XFxcIjI3LjMzXFxcIiByeD1cXFwiNS4wOFxcXCIgc3R5bGU9XFxcImZpbGw6IzczNGY5NlxcXCIvPjxwYXRoIGlkPVxcXCJwYXRoMTQxMlxcXCIgZD1cXFwiTTYuMDYsMjUuNWMwLTEuMDksMC0xLjE5LjEtMS4xOWwxLjI1LS4wNmMxLDAsMS4xOC0uMDYsMS40Mi0uMTlhLjc0Ljc0LDAsMCwwLC4zOS0uMzdjLjEyLS4yMy4xMi0uMjkuMTItNy43MiwwLTcsMC03LjUtLjEtNy42N2ExLjA2LDEuMDYsMCwwLDAtLjYzLS41LDEwLjIzLDEwLjIzLDAsMCwwLTEuMzgtLjFsLTEuMTcsMFY1LjMySDI1Ljk0djguODJIMjQuODlhOC41Niw4LjU2LDAsMCwxLTEuMi0uMDVjLS4xNCwwLS4xNS0uMDUtLjIyLS45NWExMi43MywxMi43MywwLDAsMC0uMzUtMi40MywzLjIyLDMuMjIsMCwwLDAtMi42My0yLjgxYy0uNTctLjEtMy4xLS4yLTUuMTktLjJIMTMuODd2Ni42M2wuNzUsMEE2LjMzLDYuMzMsMCwwLDAsMTYuNDksMTRhMS44OCwxLjg4LDAsMCwwLC44OS0uOTEsNS44Niw1Ljg2LDAsMCwwLC4zOS0xLjc1YzAtLjMzLjA4LS42Ni4xLS43M3MwLS4xMywxLjE4LS4xM0gyMC4yVjIxLjA2SDE3Ljg1bDAtLjYxYTcuODUsNy44NSwwLDAsMC0uNTQtMi42NmMtLjM2LS42OC0xLjA1LTEtMi40NS0xLjA4bC0uNzYtLjA3LS4yLDAsMCwzLjM0YzAsMy41MSwwLDMuNjUuMywzLjk0cy40My4zMiwzLjIyLjQyYy4wNSwwLC4wNy4yOC4wNywxLjE5djEuMThINi4wNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48L2c+XCIsXG5cdH0sXG5cdFwiRnJlZU1hcmtlciBUZW1wbGF0ZSBMYW5ndWFnZVwiOiB7XG5cdFx0Y29sb3VyOiBcIiMwMDUwYjJcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yNC4wMjMsMjAuOSwyNS40MDgsMjNsNC42MTUtN0wyNS40MDgsOWwtMS4zODUsMi4xTDI3LjI1NSwxNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDUwYjJcXFwiLz48cGF0aCBkPVxcXCJNNy45NzcsMTEuMSw2LjU5Miw5LDEuOTc3LDE2bDQuNjE1LDcsMS4zODUtMi4xTDQuNzQ1LDE2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNTBiMlxcXCIvPjxwYXRoIGQ9XFxcIk0xMy4wMzUsOWgyLjhsLS40OTQsMi44aDIuOEwxOC42MzUsOWgyLjhsLS40OTQsMi44aDIuOGwtLjQ5NSwyLjhoLTIuOGwtLjQ5MywyLjhoMi44bC0uNDk0LDIuOGgtMi44TDE4Ljk2NywyM2gtMi44bC40OTMtMi44LTIuOCwwTDEzLjM3NSwyM0gxMC41NjdsLjQ5My0yLjgtMi44LDAsLjQ5NC0yLjhoMi44bC40OTMtMi43OTNoLTIuOEw5Ljc0MSwxMS44aDIuOFptMS4zMTksOC40aDIuOGwuNDk0LTIuOGgtMi44WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNTBiMlxcXCIvPlwiLFxuXHR9LFxuXHRcIkdhbWVNYWtlciBMYW5ndWFnZVwiOiB7XG5cdFx0Y29sb3VyOiBcIiM4YmMzNGFcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xNC4yMTYsMjQuMTY3aC0uOTg5YTMuMjQsMy4yNCwwLDAsMS0yLjgxMS0xLjY0OUw2LjY2NywxNmw0LjY4MS04LjE2N0gxNi4ybC00LjM0LDguMTc2LjA1Ny4wMzJMMTMuOTM2LDE5LjVIMTYuODJaTTguNDU1LDEwLjUzNWwtMS4yNy0yLjIxYTEsMSwwLDAsMC0uODU5LS40OTJIMmw0LDYuOTkyWk0yMS41NCw5LjQ4MmEzLjIzOSwzLjIzOSwwLDAsMC0yLjgxMi0xLjY0OUgxNy41MjNMMTUuMDQ1LDEyLjVIMTguMDJMMjAuMDgzLDE2bC00LjUzMSw4LjE2N2g1LjA1NkwyNS4zMzMsMTZaTTI2LDE3LjE3MmwtMi40Nyw0LjI3LDEuMjgzLDIuMjMzYTEsMSwwLDAsMCwuODU5LjQ5MkgzMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4YmMzNGFcXFwiLz5cIixcblx0fSxcblx0XCJHLWNvZGVcIjoge1xuXHRcdGNvbG91cjogXCIjYmEwMDAwXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTcuMzMzLDE2LjM1NmgwTDE3LjMwOSwyMC44bC0yLjEtMS4wMTguMDIzLTQuNDM3aDBsMTAuNTU4LTMuMDM4LDIuMTA2LDEuMDEzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhlMDAwMFxcXCIvPjxwYXRoIGQ9XFxcIk0yNC40OTIsMTguNTc2YTE0LjkwOSwxNC45MDksMCwwLDEtMS4zNDMsMy4wNzQsNy44Niw3Ljg2LDAsMCwxLTEuMzksMS44MjksNi44LDYuOCwwLDAsMS0xLjcsMS4zMjQsNy40MDUsNy40MDUsMCwwLDEtMi4wMDYuODU1LDYsNiwwLDAsMS0zLjA3Mi4yM0E0LjY2OCw0LjY2OCwwLDAsMSwxMi40NCwyNC42NGE1LjMyMiw1LjMyMiwwLDAsMS0uNjM2LS42MjlsLS41MDgtLjI0NGE0LjcxNyw0LjcxNywwLDAsMCwuNDU3LjE4MSw1LjUyLDUuNTIsMCwwLDEtMS4wMTUtMS43NTgsOC4xMzUsOC4xMzUsMCwwLDEtLjQzLTEuNTMzYy0uMDIzLS4xMzEtLjA0My0uMjM5LS4wNjEtLjM0YTcuMjkyLDcuMjkyLDAsMCwwLC4zNzcsMS4zNTQsNS44MzYsNS44MzYsMCwwLDAsMS42MTQsMi4zMTljLjA2LjA1NC4xMjcuMS4xOS4xNDguMDQuMDA4LjA3OC4wMjIuMTE5LjAyOWE2LjQ1NCw2LjQ1NCwwLDAsMCwyLjkyOC0uMjE5LDguNCw4LjQsMCwwLDAsMS45MS0uODA3LDcuNjU4LDcuNjU4LDAsMCwwLDEuNTg5LTEuMjI3LDguNjYyLDguNjYyLDAsMCwwLDEuMjktMS42OSwxMi42NjcsMTIuNjY3LDAsMCwwLDEuMDE5LTIuMTk0TDIzLjMsMTljLjA1Ni0uMTUzLjA5MS0uMjU0LjA5MS0uMjU0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhlMDAwMFxcXCIvPjxwYXRoIGQ9XFxcIk0yNC41MjQsNC4wMTNhMTEuNiwxMS42LDAsMCwwLTYuNTg4LTEuOTk0LDEzLjgsMTMuOCwwLDAsMC05LjM3Myw0Ljg0QTE4LjI0MywxOC4yNDMsMCwwLDAsNCwxOC44Yy4wMjEsMy44NTEsMS40ODEsNy44MDYsNS4xMTIsOS41NzVhMTMuNTYzLDEzLjU2MywwLDAsMCw0LjE1OSwxLjU2NCwxMi4xMTQsMTIuMTE0LDAsMCwwLDYuODY5LTEuNTI5Yy0yLjczNCwxLjMzMy02LjEyLDEuOTkzLTguODk0LjQtMi42ODktMS41NDMtMy45ODMtNC43MjQtNC4yMjEtNy43LS41MTItNi40LDMuMS0xMy42NCw5LjEzMi0xNi4yODEsMy41MTItMS41MzcsNy4zMDctMS41ODUsMTAuMjM5LDEuMUMyNi43MjcsNS4yNDQsMjUsNC4zMDUsMjQuNTI0LDQuMDEzWm0tMTQuMzU5LDI0LjgtLjEzOC0uMDkzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhlMDAwMFxcXCIvPjxwYXRoIGQ9XFxcIk0yMi41MjksMjYuNzg4Yy0zLjA0NCwyLjU4Mi03LjkyLDQuMTQ5LTExLjU1NCwxLjg1N0M3LjI0LDI2LjI4OSw2LjUzLDIxLjA4OSw3LjIxMiwxNy4wODNhMTcuMjE4LDE3LjIxOCwwLDAsMSw2LjctMTAuOTdjMy43NzEtMi42MzYsOC44OC0zLjQ5LDEyLjQ4OS0uMTgybC0yLjI3LDMuMjkxYy0yLjUxLTIuMzU1LTYuMy0xLjk1Ni04Ljk0NS0uMDUyQTEyLjQzNCwxMi40MzQsMCwwLDAsMTAuNSwxNi4yYy0uNjYyLDIuNjIzLS41LDYuMDExLDEuNSw4LjA0NywyLjA4OCwyLjEyOSw1LjExMiwyLjExNiw3LjY1Ni44QTEwLjMzNCwxMC4zMzQsMCwwLDAsMjQuNSwxOC42MzZMMTcuMzA3LDIwLjhsLjAyMi00LjQzOEwyNy44OSwxMy4zMTlsLjEuODA2aDBBMTYuNjI1LDE2LjYyNSwwLDAsMSwyMi41MjksMjYuNzg4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2JhMDAwMFxcXCIvPlwiLFxuXHR9LFxuXHRcIkdEU2NyaXB0XCI6IHtcblx0XHRjb2xvdXI6IFwiIzQ3OGNiZlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTI4LjE2NiwyMS4wMjl2MS42NTJhLjM3NC4zNzQsMCwwLDEtLjI2LjM1N2wtMi42Ljg0MWEuMzY3LjM2NywwLDAsMS0uMzM1LS4wNTQuMzc0LjM3NCwwLDAsMS0uMTU1LS4zdi0xLjhsLTIuNDM4LjQ2NFYyNC4wMmEuMzc1LjM3NSwwLDAsMS0uMzI1LjM3MWwtMy41MjUuNDgzYy0uMDE2LDAtLjAzNCwwLS4wNTEsMEEuMzc0LjM3NCwwLDAsMSwxOC4xLDI0LjVWMjIuNTU3bC0xLjgxOS4wMDhoLS4yNjdsLTEuODE5LS4wMDhWMjQuNWEuMzc1LjM3NSwwLDAsMS0uMzc1LjM3NmMtLjAxNywwLS4wMzQsMC0uMDUyLDBsLTMuNTI1LS40ODNhLjM3NS4zNzUsMCwwLDEtLjMyNC0uMzcxVjIyLjE4NGwtMi40MzktLjQ2NHYxLjhhLjM3NC4zNzQsMCwwLDEtLjE1NC4zLjM3LjM3LDAsMCwxLS4zMzYuMDU0bC0yLjYtLjg0MWEuMzc0LjM3NCwwLDAsMS0uMjU5LS4zNTdWMjEuMDI5bC0xLjYwOC0uNTQxYTQuNTU4LDQuNTU4LDAsMCwwLS4xMjQsMS4wNGMwLDQuMzE3LDYuMDgyLDcuNjUsMTMuNiw3LjY3NGguMDE5YzcuNTE3LS4wMjQsMTMuNi0zLjM1NiwxMy42LTcuNjc0YTQuNTQsNC41NCwwLDAsMC0uMS0uOTVaXFxcIiBmaWxsPVxcXCIjNDc4Y2JmXFxcIi8+PHBhdGggZD1cXFwiTTMuNzExLDEzLjM3M1YyMC4xbC45MDcuMzA2YS4zNzQuMzc0LDAsMCwxLC4yNTYuMzU1djEuNjVsMS44NTUuNlYyMS4yNjdhLjM3Ni4zNzYsMCwwLDEsLjQ0NS0uMzY5bDMuMTg5LjYwOWEuMzc0LjM3NCwwLDAsMSwuMzA1LjM2OHYxLjgxOGwyLjc3NS4zNzl2LTEuODlhLjM3NC4zNzQsMCwwLDEsLjM3Ni0uMzc1aDBsMi4zMjcuMDA5LDIuMzI2LS4wMDlhLjM3NC4zNzQsMCwwLDEsLjM3Ny4zNzV2MS44OWwyLjc3NS0uMzc5VjIxLjg3NGEuMzczLjM3MywwLDAsMSwuMy0uMzY4bDMuMTg5LS42MDlhLjM3Ny4zNzcsMCwwLDEsLjQ0Ni4zNjl2MS43NDFsMS44NTUtLjZWMjAuNzZhLjM3NC4zNzQsMCwwLDEsLjI1NS0uMzU1bC42MTgtLjIwOFYxMy4zNzNoLjAxN0EyNi43OTIsMjYuNzkyLDAsMCwwLDMwLDEwLjkzMWExOS4wMiwxOS4wMiwwLDAsMC0yLjUwOS0zLjI4OEEyNC41MDcsMjQuNTA3LDAsMCwwLDI1LDkuMDkxYTEzLjAxLDEzLjAxLDAsMCwwLTEuMjc5LTEuMDUyLDE1LjM2NSwxNS4zNjUsMCwwLDAtMS4zNzUtLjg5NCwyOC4zNTMsMjguMzUzLDAsMCwwLC4yMzItMy4wNzFBMTUuOTY4LDE1Ljk2OCwwLDAsMCwxOC44NDcsMi44YTI2LjQ0LDI2LjQ0LDAsMCwwLTEuMzg1LDIuNyw5LjQ2LDkuNDYsMCwwLDAtMS40NTMtLjExNmgtLjAxOGE5LjQ1Nyw5LjQ1NywwLDAsMC0xLjQ1NC4xMTYsMjYuMjc1LDI2LjI3NSwwLDAsMC0xLjM4NS0yLjdBMTUuOTYxLDE1Ljk2MSwwLDAsMCw5LjQyMiw0LjA3NWEyOC4xNDIsMjguMTQyLDAsMCwwLC4yMzIsMy4wNzEsMTUuMzEyLDE1LjMxMiwwLDAsMC0xLjM3Ni44OTRBMTMuMDYsMTMuMDYsMCwwLDAsNyw5LjA5MWEyNC41NTMsMjQuNTUzLDAsMCwwLTIuNDktMS40NDhBMTkuMDIsMTkuMDIsMCwwLDAsMiwxMC45MzFhMjYuNzkyLDI2Ljc5MiwwLDAsMCwxLjY5NCwyLjQ0M1pcXFwiIGZpbGw9XFxcIiM0NzhjYmZcXFwiLz48cGF0aCBkPVxcXCJtMTIuNDYyIDE2LjZhMi43MzkgMi43MzkgMCAxIDEtMi43NC0yLjczOCAyLjczOSAyLjczOSAwIDAgMSAyLjc0IDIuNzM4XFxcIiBmaWxsPVxcXCIjZmZmXFxcIi8+PHBhdGggZD1cXFwibTExLjggMTYuNzY0YTEuODE5IDEuODE5IDAgMSAxLTEuODE5LTEuODE5IDEuODE3IDEuODE3IDAgMCAxIDEuODE5IDEuODE5XFxcIiBmaWxsPVxcXCIjNDE0MDQyXFxcIi8+PHBhdGggZD1cXFwiTTE2LjE2NiwxOS41OWEuODQ0Ljg0NCwwLDAsMS0uODgyLS44VjE2LjI2N2EuODg2Ljg4NiwwLDAsMSwxLjc2NCwwdjIuNTIyYS44NDUuODQ1LDAsMCwxLS44ODMuOFxcXCIgZmlsbD1cXFwiI2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIm0xOS44NzEgMTYuNmEyLjczOSAyLjczOSAwIDEgMCAyLjc0LTIuNzM4IDIuNzM5IDIuNzM5IDAgMCAwLTIuNzQgMi43MzhcXFwiIGZpbGw9XFxcIiNmZmZcXFwiLz48cGF0aCBkPVxcXCJtMjAuNTMxIDE2Ljc2NGExLjgxOCAxLjgxOCAwIDEgMCAxLjgxNy0xLjgxOSAxLjgxNyAxLjgxNyAwIDAgMC0xLjgxNyAxLjgxOVxcXCIgZmlsbD1cXFwiIzQxNDA0MlxcXCIvPlwiLFxuXHR9LFxuXHRcIkdpdFwiOiB7XG5cdFx0Y29sb3VyOiBcIiNkZDRjMzVcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yOS40NzIsMTQuNzUzLDE3LjI0NywyLjUyOGExLjgsMS44LDAsMCwwLTIuNTUsMEwxMi4xNTgsNS4wNjdsMy4yMiwzLjIyYTIuMTQxLDIuMTQxLDAsMCwxLDIuNzEyLDIuNzNsMy4xLDMuMWEyLjE0MywyLjE0MywwLDEsMS0xLjI4NSwxLjIxbC0yLjg5NS0yLjg5NXY3LjYxN2EyLjE0MSwyLjE0MSwwLDEsMS0xLjc2NC0uMDYyVjEyLjNhMi4xNDYsMi4xNDYsMCwwLDEtMS4xNjUtMi44MTRMMTAuOTExLDYuMzE0LDIuNTI4LDE0LjdhMS44LDEuOCwwLDAsMCwwLDIuNTUxTDE0Ljc1MywyOS40NzJhMS44LDEuOCwwLDAsMCwyLjU1LDBMMjkuNDcyLDE3LjNhMS44LDEuOCwwLDAsMCwwLTIuNTUxXFxcIiBzdHlsZT1cXFwiZmlsbDojZGQ0YzM1XFxcIi8+PHBhdGggZD1cXFwiTTEyLjE1OCw1LjA2N2wzLjIyLDMuMjJhMi4xNDEsMi4xNDEsMCwwLDEsMi43MTIsMi43M2wzLjEsMy4xYTIuMTQzLDIuMTQzLDAsMSwxLTEuMjg1LDEuMjFsLTIuODk1LTIuODk1djcuNjE3YTIuMTQxLDIuMTQxLDAsMSwxLTEuNzY0LS4wNjJWMTIuM2EyLjE0NiwyLjE0NiwwLDAsMS0xLjE2NS0yLjgxNEwxMC45MTEsNi4zMTRcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0fSxcblx0XCJHTFNMXCI6IHtcblx0XHRjb2xvdXI6IFwiIzQzODZiNVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTcuNzc5LDE4LjkyM0EyLjMzMywyLjMzMywwLDAsMSw1LjQsMTcuMTZjLjMwNiwxLjQ2MiwxLjk2MSwyLjg5Miw3LjE4MywzLjUyOWExNC4yMjgsMTQuMjI4LDAsMCwwLDkuMjMyLTEuNjEycy43MzMtLjMyMi4yOTMuMTc2YzAsMC0zLjEwNywyLjg3My05LjIsMi45UzEuOTcsMTkuMTA3LDIsMTZjLS4wMjktMy4xMDcsNC44MDYtNi4xODUsMTAuOS02LjE1NXM5LjIsMi45LDkuMiwyLjljLjQ0LjUtLjI5My4xNzYtLjI5My4xNzYtMS4wODQtLjctNC4yODYtMi4wODktOS4yMzItMS42MTItNC44NjYuNDY5LTYuNDUzLDIuMTIyLTYuOTgxLDMuMjM1YTMuMjU0LDMuMjU0LDAsMCwwLS4zMTgsMS4yNCwyLjQyNCwyLjQyNCwwLDAsMSwyLjUtMi4zMTZBMi41MDcsMi41MDcsMCwwLDEsMTAuMywxNi4xOTUsMi41MDYsMi41MDYsMCwwLDEsNy43NzksMTguOTJabTE5LjY0Ny0xLjA3NEgzMHYuOTM3SDI2LjM0NFYxMy42MDloMS4wODJ2NC4yNFpNMjMuNDU0LDE2aDIuMTYzdjIuNzkxSDI0LjlsLS4xMDgtLjY0OWExLjksMS45LDAsMCwxLTEuNjE0Ljc4NiwyLjQxNCwyLjQxNCwwLDAsMS0yLjM3OS0yLjcxMSwyLjQ4NSwyLjQ4NSwwLDAsMSwyLjUzMS0yLjc0QTIuMDUzLDIuMDUzLDAsMCwxLDI1LjYsMTUuMjE3SDI0LjUxNWExLjEzNiwxLjEzNiwwLDAsMC0xLjEzMi0uODUxYy0uNzcxLDAtMS40ODUuNTM0LTEuNDg1LDEuODYsMCwxLjQxMy43NzEsMS43ODEsMS41MDYsMS43ODFhMS4yOCwxLjI4LDAsMCwwLDEuMjU0LTEuMTM5aC0xLjJWMTZaTTcuNzgxLDE0LjFhMS44NiwxLjg2LDAsMCwwLTEuOCwyLjEwNSwxLjg2LDEuODYsMCwwLDAsMS44LDIuMTA1LDEuODYsMS44NiwwLDAsMCwxLjgtMi4xMDVBMS44NiwxLjg2LDAsMCwwLDcuNzgxLDE0LjFabTIuOTExLDEuMzgzaC41MjV2LjQ2OGguMDEzYTEuMTIsMS4xMiwwLDAsMSwuOTg3LS41NjMsMS41NjUsMS41NjUsMCwwLDEsMS41MDYsMS42NzcsMS42NzUsMS42NzUsMCwwLDEtMS41ODMsMS44MjQsMSwxLDAsMCwxLS44OC0uNDQzaC0uMDEzVjIwLjFoLS41NTdWMTUuNDc5Wk0xMi4xLDE4LjRjLjYwOCwwLDEuMDE5LS41MjcsMS4wMTktMS4yNTQsMC0uNDI0LS4xNzEtMS4yNjQtMS4wMzItMS4yNjQtLjgsMC0uODkzLjg2Ny0uODkzLDEuNDA2LDAsLjg4LjU1MSwxLjExNC45MDUsMS4xMTRabTUtLjY1MmExLjM3OCwxLjM3OCwwLDAsMS0xLjQ4OCwxLjEzMywxLjQ4NywxLjQ4NywwLDAsMS0xLjQ4Mi0xLjY1OGMwLTEuMDI1LjQ5NC0xLjg0MiwxLjU4OC0xLjg0Mi45NTYsMCwxLjQyNC43NiwxLjQyNCwxLjkzMUgxNC43MjFjMCwuNjkuMzIzLDEuMDg5Ljk2MiwxLjA4OWEuODQxLjg0MSwwLDAsMCwuODU0LS42NTJIMTcuMVptLS41OS0uODhjLS4wMzItLjUxMy0uMjQ3LS45ODctLjkyNC0uOTg3YS45NzIuOTcyLDAsMCwwLS45MTguOTg3aDEuODQyWm0zLjcxMywxLjkxN2gtLjU1N1YxNi43NTFjMC0uNTc2LS4xNjUtLjg2Ny0uNzA5LS44NjctLjMxNywwLS44NzQuMi0uODc0LDEuMXYxLjhoLS41NTdWMTUuNDc5aC41MjV2LjQ2OGguMDEzYTEuMiwxLjIsMCwwLDEsMS0uNTYzLDEuMDQ2LDEuMDQ2LDAsMCwxLDEuMTU4LDEuMTUydjIuMjUzXFxcIiBzdHlsZT1cXFwiZmlsbDojNDM4NmI1XFxcIi8+XCIsXG5cdH0sXG5cdFwiR28gbW9kdWxlXCI6IHtcblx0XHRjb2xvdXI6IFwiI2NlMzI2MlwiLFxuXHRcdGljb246IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNTQuNSAyMjVcXFwiPjx0aXRsZT5maWxlX3R5cGVfZ29fcGFja2FnZTwvdGl0bGU+PHBhdGggZD1cXFwiTTYxLjk0OSwxMy4wNjhjMTYuMDYtLjE0NywzMi4xNDMsMCw0OC4yMTEtLjA2Mi0zLjgxLDE2LjQwOC03LjQ2NiwzMi44NjItMTEuMjYxLDQ5LjI3N0gyNS41NDhjLTIuMzE5LDAtNC42MzcuMDc3LTYuOTU2LS4wOTNDMzMsNDUuNzc1LDQ3LjU2NiwyOS41LDYxLjk0OSwxMy4wNjhaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjJlNmM5XFxcIi8+PHBhdGggZD1cXFwiTTE0My41MDksMTMuMDE0aDQ4LjA3MmMxNC40MzcsMTYuNDMxLDI5LjAxMywzMi43MjMsNDMuNDExLDQ5LjE3Ny05LjI3NC4xOTMtMTguNTQ5LDAtMjcuODIzLjA4NUgxNTQuNjU0QzE1MS4wMDYsNDUuODM3LDE0Ny4xMTEsMjkuNDYsMTQzLjUwOSwxMy4wMTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjJlNmM5XFxcIi8+PHBhdGggZD1cXFwiTTExMC4xNiwxMy4wMTRoMzMuMzQ5YzMuNiwxNi40NDYsNy40ODksMzIuODIzLDExLjE2LDQ5LjI1NEg5OC45QzEwMi42OTQsNDUuODY4LDEwNi4zNSwyOS40MjIsMTEwLjE2LDEzLjAxNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZmM3NWVcXFwiLz48cGF0aCBkPVxcXCJNMTguNTkyLDYyLjE4M2MyLjMxOS4xNyw0LjYzNy4wODUsNi45NTYuMDkzSDk4LjlxMCwyNi4wMjYuMDU0LDUyLjA1MmExOC44NTcsMTguODU3LDAsMCwwLDEuOTc5LjEzOWg1Mi4xMTRhMTQuNjkzLDE0LjY5MywwLDAsMCwxLjU0Ni0uMTA4Yy4xNDctMTcuMzY2LDAtMzQuNzMyLjA3LTUyLjFoNTIuNTE2YzkuMjc0LS4wNDYsMTguNTQ5LjEwOCwyNy44MjMtLjA4NVYyMTIuNjJIMTguNlExOC41OTIsMTM3LjQwNSwxOC41OTIsNjIuMTgzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2U3YmY1NVxcXCIvPjxwYXRoIGQ9XFxcIk05OC45LDYyLjI5MWg1NS43NjljLS4wNjIsMTcuMzY2LjA4NSwzNC43MzItLjA3LDUyLjEtLjUxOC4wNTQtMS4wMzYuMDkzLTEuNTQ2LjEwOEgxMDAuOTRhMTguODU3LDE4Ljg1NywwLDAsMS0xLjk3MS0uMTMxQzk4Ljg2MSw5Ni45OTMsOTguOTY5LDc5LjYzNCw5OC45LDYyLjI5MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkYmI1NTFcXFwiLz48cmVjdCB4PVxcXCIzNC4zODlcXFwiIHk9XFxcIjE2My42ODJcXFwiIHdpZHRoPVxcXCI3Mi40MTdcXFwiIGhlaWdodD1cXFwiMjcuODg1XFxcIiBzdHlsZT1cXFwiZmlsbDojZjJmMmYyXFxcIi8+PHBhdGggZD1cXFwiTTYxLjQyMiwxMzcuMDg1Yy0uMzg4LDAtLjQ4Ny0uMTk0LS4yOTEtLjQ4N2wyLjA0MS0yLjYyNWExLjM5MywxLjM5MywwLDAsMSwxLjA2OS0uNDg3aDM0LjdjLjM4OCwwLC40ODcuMjkxLjI5MS41ODRMOTcuNTgyLDEzNi42YTEuNDgxLDEuNDgxLDAsMCwxLS45NzIuNTg0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NlMzI2MlxcXCIvPjxwYXRoIGQ9XFxcIk00Ni43NCwxNDYuMDI4Yy0uMzg4LDAtLjQ4Ny0uMTk0LS4yOTEtLjQ4N2wyLjA0MS0yLjYyNWExLjM5MywxLjM5MywwLDAsMSwxLjA2OS0uNDg3SDkzLjg5YS40NDcuNDQ3LDAsMCwxLC40ODcuNTg0bC0uNzc4LDIuMzMzYS44NS44NSwwLDAsMS0uODc1LjU4NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjZTMyNjJcXFwiLz48cGF0aCBkPVxcXCJNNzAuMjY0LDE1NC45NzFjLS4zODgsMC0uNDg3LS4yOTEtLjI5MS0uNTg0bDEuMzU3LTIuNDNhMS4yODksMS4yODksMCwwLDEsLjk3Mi0uNTg0SDkxLjc0N2MuMzg4LDAsLjU4NC4yOTEuNTg0LjY4MWwtLjE5NCwyLjMzM2EuNzMxLjczMSwwLDAsMS0uNjgxLjY4MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjZTMyNjJcXFwiLz48cGF0aCBkPVxcXCJNMTcxLjE2MywxMzUuMzM1Yy02LjEyNCwxLjU1Ni0xMC4zLDIuNzIyLTE2LjMzLDQuMjgtMS40NjIuMzg4LTEuNTU2LjQ4Ny0yLjgxOS0uOTcyYTEzLjAxMSwxMy4wMTEsMCwwLDAtNC41NjktMy42OTRjLTYuMTI0LTMuMDEzLTEyLjA1NC0yLjEzOC0xNy41OTQsMS40NjJhMjAuNjcxLDIwLjY3MSwwLDAsMC05LjkxOCwxOC40NjksMTUuMjQyLDE1LjI0MiwwLDAsMCwxMy4xMjMsMTUuMjYxYzYuNjEuODc1LDEyLjE1MS0xLjQ2MiwxNi41MjUtNi40MTUuODc1LTEuMDY5LDEuNjUzLTIuMjM2LDIuNjI1LTMuNkgxMzMuNDQ2Yy0yLjA0MSwwLTIuNTI4LTEuMjYzLTEuODQ3LTIuOTE2LDEuMjYzLTMuMDEzLDMuNi04LjA2OCw0Ljk1OC0xMC42YTIuNjI1LDIuNjI1LDAsMCwxLDIuNDMtMS41NTZoMzUuMzg0Yy0uMTk0LDIuNjI1LS4xOTQsNS4yNDktLjU4NCw3Ljg3NGE0MS40NTYsNDEuNDU2LDAsMCwxLTcuOTY3LDE5LjA0MmMtNi45OTUsOS4yMzQtMTYuMTM2LDE0Ljk3LTI3LjcsMTYuNTI1LTkuNTI2LDEuMjYzLTE4LjM3NC0uNTg0LTI2LjE0OC02LjQxNUEzMC41MzMsMzAuNTMzLDAsMCwxLDk5LjYyNSwxNjAuNTFjLTEuMjYzLTEwLjYsMS44NDctMjAuMTIyLDguMjYyLTI4LjQ4MUE0My4xMzcsNDMuMTM3LDAsMCwxLDEzNS4xLDExNS4yMTJjOS4xMzctMS42NTMsMTcuODg2LS41ODQsMjUuNzYsNC43NjNBMzAuNDcxLDMwLjQ3MSwwLDAsMSwxNzIuMTQsMTMzLjY4QzE3Mi43MTksMTM0LjU1OCwxNzIuMzMsMTM1LjA0NCwxNzEuMTYzLDEzNS4zMzVaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2UzMjYyXFxcIi8+PHBhdGggZD1cXFwiTTIwMy4zMzgsMTg5LjA5Yy04Ljg0Ni0uMTk0LTE2LjkxMy0yLjcyMi0yMy43MTktOC41NTRhMzAuNDg1LDMwLjQ4NSwwLDAsMS0xMC41LTE4Ljc2MWMtMS43NS0xMC45ODQsMS4yNjMtMjAuNyw3Ljg3NC0yOS4zNTYsNy4xLTkuMzMxLDE1LjY1MS0xNC4xOTIsMjcuMjE4LTE2LjIzMyw5LjkxOC0xLjc1LDE5LjI0Ny0uNzc4LDI3LjcsNC45NTgsNy42OCw1LjI0OSwxMi40NDIsMTIuMzQ1LDEzLjcwNiwyMS42NzYsMS42NTMsMTMuMTIzLTIuMTM4LDIzLjgxNi0xMS4xNzksMzIuOTUzYTQ0LjU0Miw0NC41NDIsMCwwLDEtMjMuMzI5LDEyLjQ0MkMyMDguNDksMTg4LjcsMjA1Ljg2NiwxODguOCwyMDMuMzM4LDE4OS4wOVptMjMuMTM1LTM5LjI3MWEyNy45NzgsMjcuOTc4LDAsMCwwLS4yOTEtMy4yMDgsMTYuMDEzLDE2LjAxMywwLDAsMC0xOC4zNzUtMTMuMjM1cS0uNzM0LjExOS0xLjQ1NC4zMDZjLTkuMDQsMi4wNDEtMTQuODczLDcuNzc3LTE3LjAxMSwxNi45MTNhMTYuMDA5LDE2LjAwOSwwLDAsMCw4Ljk0MywxOC4zNzQsMTcuODIsMTcuODIsMCwwLDAsMTUuODQ1LS41ODRjNy42NzktMy45ODUsMTEuODU5LTEwLjIwNiwxMi4zNDgtMTguNTY2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NlMzI2MlxcXCIvPjwvc3ZnPlwiLFxuXHR9LFxuXHRcIkdvXCI6IHtcblx0XHRjb2xvdXI6IFwiIzAwYWNkN1wiLFxuXHRcdGljb246IFwiPHN2ZyB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiIHZpZXdCb3g9XFxcIjAgMCAyNTQuNSAyMjVcXFwiPjx0aXRsZT5maWxlX3R5cGVfZ288L3RpdGxlPjxwYXRoIGQ9XFxcIk0tNDYuOTI2LDg5Yy0uNjIxLDAtLjc3Ny0uMzExLS40NjYtLjc3N2wzLjI2Mi00LjE5NGEyLjIyNSwyLjIyNSwwLDAsMSwxLjcwOC0uNzc3SDEzLjAyNmMuNjIxLDAsLjc3Ny40NjYuNDY2LjkzMmwtMi42NCw0LjAzOGEyLjM2NywyLjM2NywwLDAsMS0xLjU1My45MzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBhY2Q3XFxcIi8+PHBhdGggZD1cXFwiTS03MC4zNzksMTAzLjI4NWMtLjYyMSwwLS43NzctLjMxMS0uNDY2LS43NzdsMy4yNjItNC4xOTRhMi4yMjUsMi4yMjUsMCwwLDEsMS43MDgtLjc3N0g0Ljk1YS43MTQuNzE0LDAsMCwxLC43NzcuOTMyTDQuNDg0LDEwMi4yYTEuMzU4LDEuMzU4LDAsMCwxLTEuNC45MzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBhY2Q3XFxcIi8+PHBhdGggZD1cXFwiTS0zMi43OTIsMTE3LjU3NGMtLjYyMSwwLS43NzctLjQ2Ni0uNDY2LS45MzJsMi4xNzQtMy44ODNhMi4wNiwyLjA2LDAsMCwxLDEuNTUzLS45MzJIMS41MzNjLjYyMSwwLC45MzIuNDY2LjkzMiwxLjA4N2wtLjMxMSwzLjcyOGExLjE2NywxLjE2NywwLDAsMS0xLjA4NywxLjA4N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGFjZDdcXFwiLz48cGF0aCBkPVxcXCJNMTI4LjQyNiw4Ni4yYy05Ljc4NSwyLjQ4NS0xNi40NjQsNC4zNDktMjYuMDkzLDYuODM0LTIuMzMuNjIxLTIuNDg1Ljc3Ny00LjUtMS41NTMtMi4zMy0yLjY0LTQuMDM4LTQuMzQ5LTcuMy01LjktOS43ODUtNC44MTUtMTkuMjU5LTMuNDE3LTI4LjExMiwyLjMzLTEwLjU2MSw2LjgzNC0xNiwxNi45MjktMTUuODQyLDI5LjUxLjE1NSwxMi40MjUsOC43LDIyLjY3NiwyMC45NjgsMjQuMzg1LDEwLjU2MSwxLjQsMTkuNDE0LTIuMzMsMjYuNC0xMC4yNTEsMS40LTEuNzA4LDIuNjQtMy41NzIsNC4xOTQtNS43NDdINjguMTYzYy0zLjI2MiwwLTQuMDM4LTIuMDE5LTIuOTUxLTQuNjU5LDIuMDE5LTQuODE1LDUuNzQ3LTEyLjg5MSw3LjkyMS0xNi45MjlhNC4xOTQsNC4xOTQsMCwwLDEsMy44ODMtMi40ODVoNTYuNTM1Yy0uMzExLDQuMTk0LS4zMTEsOC4zODctLjkzMiwxMi41ODFhNjYuMjM5LDY2LjIzOSwwLDAsMS0xMi43MzYsMzAuNDQyQzEwOC43LDE1OS41MSw5NC4xLDE2OC42NzMsNzUuNjE4LDE3MS4xNThjLTE1LjIyMSwyLjAxOS0yOS4zNTUtLjkzMi00MS43OC0xMC4yNTFhNDguNzg1LDQ4Ljc4NSwwLDAsMS0xOS43MjUtMzQuNDhjLTIuMDE5LTE2LjkyOSwyLjk1MS0zMi4xNSwxMy4yLTQ1LjUwOEMzOC4zNDIsNjYuNDc1LDUyLjk0Miw1Ny4zMTIsNzAuOCw1NC4wNWMxNC42LTIuNjQsMjguNTc4LS45MzIsNDEuMTU5LDcuNjFhNDguNjg2LDQ4LjY4NiwwLDAsMSwxOC4wMTcsMjEuOUMxMzAuOTExLDg0Ljk1OCwxMzAuMjg5LDg1LjczNSwxMjguNDI2LDg2LjJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBhY2Q3XFxcIi8+PHBhdGggZD1cXFwiTTE3OS44MzUsMTcyLjA5Yy0xNC4xMzQtLjMxMS0yNy4wMjUtNC4zNDktMzcuOS0xMy42NjhhNDguNzExLDQ4LjcxMSwwLDAsMS0xNi43NzQtMjkuOTc2Yy0yLjgtMTcuNTUxLDIuMDE5LTMzLjA4MiwxMi41ODEtNDYuOTA1LDExLjMzOC0xNC45MSwyNS4wMDYtMjIuNjc2LDQzLjQ4OC0yNS45MzgsMTUuODQyLTIuOCwzMC43NTMtMS4yNDMsNDQuMjY1LDcuOTIxLDEyLjI3LDguMzg3LDE5Ljg4LDE5LjcyNSwyMS45LDM0LjYzNSwyLjY0LDIwLjk2OC0zLjQxNywzOC4wNTItMTcuODYxLDUyLjY1MmE3MS4xNyw3MS4xNywwLDAsMS0zNy4yNzYsMTkuODhDMTg4LjA2NywxNzEuNDY5LDE4My44NzQsMTcxLjYyNCwxNzkuODM1LDE3Mi4wOVpNMjE2LjgsMTA5LjM0M2E0NC43LDQ0LjcsMCwwLDAtLjQ2Ni01LjEyNWMtMi44LTE1LjM3Ni0xNi45MjktMjQuMDc0LTMxLjY4NC0yMC42NTctMTQuNDQ0LDMuMjYyLTIzLjc2MywxMi40MjUtMjcuMTgsMjcuMDI1YTI1LjU3OSwyNS41NzksMCwwLDAsMTQuMjg5LDI5LjM1NWM4LjU0MiwzLjcyOCwxNy4wODUsMy4yNjIsMjUuMzE3LS45MzJDMjA5LjM0NSwxMzIuNjQsMjE2LjAyNCwxMjIuNywyMTYuOCwxMDkuMzQzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwYWNkN1xcXCIvPjwvc3ZnPlwiLFxuXHR9LFxuXHRcIkdyYWRsZVwiOiB7XG5cdFx0Y29sb3VyOiBcIiMwMDY1MzNcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xMy41LDYuOTY1aDcuOTIzbDQsNi44ODdIMjkuOThBMTQuMSwxNC4xLDAsMCwwLDExLjAyNCwyLjkzMkwxMy41LDYuOTY1XFxcIiBzdHlsZT1cXFwiZmlsbDojMDA2NTMzXFxcIi8+PHBhdGggZD1cXFwiTTI1LjYyOCwxOGwtNC4yMDksNy4yNTJIMTAuODA2TDUuNSwxNi4xMDgsOS43MzksOC44LDcuNCw0Ljk4MUExNC4wMywxNC4wMywwLDEsMCwzMCwxOEgyNS42MjhcXFwiIHN0eWxlPVxcXCJmaWxsOiM4MmI4MTZcXFwiLz48cGF0aCBkPVxcXCJNMjEuMDYxLDE1Ljk2M2E1LjAyNiw1LjAyNiwwLDEsMS01LjAyNi01LDUuMDEzLDUuMDEzLDAsMCwxLDUuMDI2LDVcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDY1MzJcXFwiLz5cIixcblx0fSxcblx0XCJHcmFwaFFMXCI6IHtcblx0XHRjb2xvdXI6IFwiI2UxMDA5OFwiLFxuXHRcdGljb246IFwiPHJlY3QgeD1cXFwiLTAuNDNcXFwiIHk9XFxcIjEyLjUzNFxcXCIgd2lkdGg9XFxcIjIyLjkwMVxcXCIgaGVpZ2h0PVxcXCIxLjE4N1xcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTUuODU4IDE2LjEwNykgcm90YXRlKC01OS45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojZTEwMDk4XFxcIi8+PHJlY3QgeD1cXFwiNC41NDVcXFwiIHk9XFxcIjIxLjE2MlxcXCIgd2lkdGg9XFxcIjIyLjkwMlxcXCIgaGVpZ2h0PVxcXCIxLjE4N1xcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxyZWN0IHg9XFxcIjEwLjQzXFxcIiB5PVxcXCIxOC4wMDhcXFwiIHdpZHRoPVxcXCIxLjE4N1xcXCIgaGVpZ2h0PVxcXCIxMy4yMjdcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0xNS44MTIgMjEuODU3KSByb3RhdGUoLTU5Ljk5OSlcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cmVjdCB4PVxcXCIyMC4zODFcXFwiIHk9XFxcIjAuNzcxXFxcIiB3aWR0aD1cXFwiMS4xODdcXFwiIGhlaWdodD1cXFwiMTMuMjI3XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSg0LjA5MiAyMS44NTYpIHJvdGF0ZSgtNTkuOTk5KVxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxyZWN0IHg9XFxcIjQuNDEyXFxcIiB5PVxcXCI2Ljc4N1xcXCIgd2lkdGg9XFxcIjEzLjIyN1xcXCIgaGVpZ2h0PVxcXCIxLjE4N1xcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTIuMjEzIDYuNTAyKSByb3RhdGUoLTMwLjAwMSlcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cmVjdCB4PVxcXCIyMC4zODlcXFwiIHk9XFxcIjEuNjc3XFxcIiB3aWR0aD1cXFwiMS4xODdcXFwiIGhlaWdodD1cXFwiMjIuOTAxXFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMy43NTMgMTIuMjUpIHJvdGF0ZSgtMzAuMDAxKVxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxyZWN0IHg9XFxcIjUuNDU0XFxcIiB5PVxcXCI5LjM4NlxcXCIgd2lkdGg9XFxcIjEuMTg3XFxcIiBoZWlnaHQ9XFxcIjEzLjIyOFxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxyZWN0IHg9XFxcIjI1LjM2XFxcIiB5PVxcXCI5LjM4NlxcXCIgd2lkdGg9XFxcIjEuMTg3XFxcIiBoZWlnaHQ9XFxcIjEzLjIyOFxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxyZWN0IHg9XFxcIjE1LjIyMlxcXCIgeT1cXFwiMjQuMDk3XFxcIiB3aWR0aD1cXFwiMTEuNTA0XFxcIiBoZWlnaHQ9XFxcIjEuMDM3XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtOS40OTggMTMuNzg1KSByb3RhdGUoLTMwLjAwMSlcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cGF0aCBkPVxcXCJNMjguMTIsMjNhMi41LDIuNSwwLDEsMS0uOTE1LTMuNDExQTIuNSwyLjUsMCwwLDEsMjguMTIsMjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cGF0aCBkPVxcXCJNOC4yLDExLjVhMi41LDIuNSwwLDEsMS0uOTE1LTMuNDExQTIuNSwyLjUsMCwwLDEsOC4yLDExLjVcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cGF0aCBkPVxcXCJNMy44OCwyM2EyLjUsMi41LDAsMSwxLDMuNDExLjkxNUEyLjUsMi41LDAsMCwxLDMuODgsMjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMTAwOThcXFwiLz48cGF0aCBkPVxcXCJNMjMuOCwxMS41YTIuNSwyLjUsMCwxLDEsMy40MTEuOTE1QTIuNSwyLjUsMCwwLDEsMjMuOCwxMS41XFxcIiBzdHlsZT1cXFwiZmlsbDojZTEwMDk4XFxcIi8+PHBhdGggZD1cXFwiTTE2LDMwYTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjQ5MywyLjQ5MywwLDAsMSwxNiwzMFxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPjxwYXRoIGQ9XFxcIk0xNiw2Ljk5MWEyLjUsMi41LDAsMSwxLDIuNS0yLjUsMi40OTMsMi40OTMsMCwwLDEtMi41LDIuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2UxMDA5OFxcXCIvPlwiLFxuXHR9LFxuXHRcIkdyb292eVwiOiB7XG5cdFx0Y29sb3VyOiBcIiM2Mzk4YWFcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk03LjQ1MywyOS44NjVjMC0uMDc0LjQ5NC0xLjcxNywxLjEtMy42NTFBMjEuODA4LDIxLjgwOCwwLDAsMCw5LjUsMjIuNmMtLjA3OS0uMDU2LS4zNS4wNDUtLjYuMjI0LS43NjQuNTM4LS45Mi40LTEuNDkxLTEuMzU2LS42MTctMS45LS42MzktMi4wOTEtLjMxNy0yLjgxLjIxLS40Ny4yLS41NzktLjE0Ny0xLjI3N2EzLjc1LDMuNzUsMCwwLDEtLjM3Ny0xLjA0NGMwLS4yNi0xLjQxMy0xLjQzOC0zLjY0Ny0zLjA0QTMuODQ1LDMuODQ1LDAsMCwxLDIsMTIuNWExMC40NzcsMTAuNDc3LDAsMCwxLDIuMzc4LS4wMzlsMi4zNzguMS4yMzItLjc0MWMuOTgxLTMuMTMsMi40NjMtNS45NTcsMy4xMjItNS45NTcuMTM3LDAsLjQxNi4yNjUuNjE5LjU4OC4zMzEuNTI3LjM3Ni44NTMuNDM1LDMuMTI2YTIzLjAxMywyMy4wMTMsMCwwLDAsLjE2NSwyLjczOWMuMDU1LjExLjIyOC0uMDM1LjM4NS0uMzIyLjItLjM2Ny40MTItLjQ2Ny43MS0uMzM1cy40ODUuMDQzLjY0Ni0uMzQ1Yy4yNDItLjU4MiwxLjQ1NS00LjUxMywxLjQ1NS00LjcxNywwLS4wNjkuMjQtLjkuNTM0LTEuODQ2cy42MzEtMi4wMzYuNzUxLTIuNDI0Yy4yMTMtLjY4OC4yNDYtLjYwNywxLjUyNCwzLjcyNiwxLjMyLDQuNDc0LDIuMDMsNi4xMjQsMi4zODUsNS41NDQuMjQ4LS40LDEuNTUtLjQyOCwxLjkxNC0uMDM0LjIwNy4yMjQuMzM4LjIyMS40NTMtLjAxLjIzNy0uNDguOC0uNC45NTMuMTQuMTE3LjQyMy4xNDcuNDIzLjMyLDBhLjgxMi44MTIsMCwwLDEsLjY5Mi0uNDY2Yy4zODksMCwuNTM4LjE2NC42NjYuNzM1bC4xNjUuNzM1LDIuNTU4LS4xODNBMTEuNTIxLDExLjUyMSwwLDAsMSwzMCwxMi40NjhhMjAuNzksMjAuNzksMCwwLDEtMi4zMjEsMS44ODljLTEuMjc3Ljk2LTIuMzQyLDEuNzc1LTIuMzY4LDEuODFhMTcuNjA3LDE3LjYwNywwLDAsMCwuMTI4LDEuODY3LDExLjA3NSwxMS4wNzUsMCwwLDEtLjU0NCw1LjcxMyw0LjMwOCw0LjMwOCwwLDAsMS0xLjAyMSwxLjQ5Yy0uMjc4LjE4Ni0uNTA2LjQtLjUwNi40ODZzLjMsMS4wNzcuNjYsMi4yMTJBOS42ODIsOS42ODIsMCwwLDEsMjQuNTY4LDMwYy0uMTA5LDAtMi43NTctMi4wNy02Ljg3Ni01LjM3M2ExMS4xNDMsMTEuMTQzLDAsMCwwLTEuNjQzLTEuMTg0Yy0uMTcxLDAtMS42NDksMS4xMzMtNS45ODQsNC41ODgtMi41MTQsMi0yLjYxMiwyLjA3My0yLjYxMiwxLjgzNVptNS4xNTgtNC43MjdjMS4zMzctMS4wNTEsMi42NjQtMi4wNzgsMi45NDctMi4yODIuNDg4LS4zNTEuNjUxLS4yNjMsMy4wMjEsMS42MzEsMS4zNzgsMS4xLDIuNzM3LDIuMTc0LDMuMDIxLDIuMzg0cy44NjguNjY2LDEuMywxLjAxM2MuNDkxLjQuNzQyLjQ5Mi42NzQuMjU2LS43Ny0yLjYzNC0uNzkzLTIuNjc4LTEuMzI3LTIuNDc2LS42NDQuMjQ0LTEuMDQzLS4wMDYtMS4yNDktLjc4M2ExLjczOSwxLjczOSwwLDAsMSwuMjQtMS40NTEsMi4zNzcsMi4zNzcsMCwwLDAtLjIyMS0yLjczMSw0LjI4OSw0LjI4OSwwLDAsMS0uNjg2LTEuNTNsLS4yNDEtMS4wMjMtLjUxNy43MWMtLjYzNi44NzMtMS40MTEuOTE4LTIuMDU5LjExOWwtLjQ3Ny0uNTg4LS41NTQuNzYyYy0uNTU1Ljc2My0xLjE5NC44NjItMS44NDQuMjg0LS4xNzktLjE1OS0uMjU4LS4xLS4yNTguMmExLjI0LDEuMjQsMCwwLDEtLjM3NS43NzdjLS42MTkuNTctMS4yMjMuNDE5LTEuNjMzLS40MDlMMTIsMTkuMjQ5bC0uMy43NzVhNy4wMzIsNy4wMzIsMCwwLDEtLjg1MywxLjQ3OSwxMy44OTEsMTMuODkxLDAsMCwwLTEuNDU1LDMuNjYzYy0uNSwxLjYyNy0uOSwzLjA0Mi0uOSwzLjE0M3MuMzgxLS4xNDEuODQ3LS41MzgsMS45NDItMS41ODIsMy4yNzktMi42MzNabTExLjM0My0xLjEzMWMxLjAxNS0xLjE1NCwxLjI1LTMuMjg4LjgtNy4yNzEtLjM3NS0zLjMyOS0uNTYyLTQuNDE5LS43ODQtNC41NjUtLjE1NC0uMS0uMTc3LjAxLS4wOTEuNDI2LjU2MiwyLjcuNTkzLDQuMDUzLjEsNC40MzQtLjMzNy4yNjItLjY5NS0uNzE5LS45NzYtMi42NzUtLjIxOC0xLjUxNS0uNDQ1LTIuMi0uNjE3LTEuODVhMy4zNTksMy4zNTksMCwwLDAsLjE2LDEuMDcsMjYuNzE4LDI2LjcxOCwwLDAsMSwuMzk0LDMuMzgxLDIxLjc1NywyMS43NTcsMCwwLDAsLjM3NSwzLjE1MWMuMzA5Ljk4NS44Ljc0NywxLjExOC0uNTRzLjM1LS40MjUuMDQ0LDEuMDU1Yy0uMzE3LDEuNTM2LTEuMjYsMi0yLjM1MiwxLjE1LS4xNzUtLjEzNi0uMjM0LDAtLjIzNC41NTVhNC45ODgsNC45ODgsMCwwLDEtLjMsMS41bC0uMy43NjUuNDA4LjEzOUEyLjI0NywyLjI0NywwLDAsMCwyMy45NTQsMjQuMDA3Wk05LjM0NiwyMS40NjhjMi4xMTgtMS4yMzIsMi41LTIuNjY4LDEuNzkzLTYuODA1YTIxLjk0MSwyMS45NDEsMCwwLDEtLjMtMi4zYzAtMS4wMjktLjI1Ni0uNTU0LS40NDguODMyLS4yNTQsMS44MzItMS4wMTYsMy4zODktMS42NTcsMy4zODMtLjU1Ny0uMDA1LS43MzgtLjIxLS45NjgtMS4wOTQtLjQxMy0xLjU4NS4wMzctNC4wMTgsMS4xODQtNi40MDYuODQtMS43NDksMS4zLTEuOTA4LDEuMy0uNDQ4LDAsMi4yNzYtLjc3Niw1LjYyNS0xLjE4NCw1LjExNWEzLjgxNCwzLjgxNCwwLDAsMSwuMDY1LTIuMmMuMi0uNzIuMTU3LTEuODE4LS4wNjYtMS44MTgtLjI1OSwwLS43NzMsMS45MS0uODQxLDMuMTI3LS4wNiwxLjA3Ni0uMDIyLDEuMzM4LjIzMSwxLjYxMi44ODguOTYyLDIuMDUyLTEuOTczLDIuMTExLTUuMzIzLjAzMS0xLjc1OS0uMTM4LTIuMjU0LS42NzQtMS45ODItLjc4MS40LTIuODgzLDUuODgzLTIuODgzLDcuNTIzLDAsMS4yODMuMzE5LDIuMTg2Ljg4LDIuNDkxLjk1NC41MTksMS44NzYtLjQsMi41MjktMi41MzFsLjI3NS0uODk0VjE0Ljk3YzAsMS43NTktLjU2NywyLjY4Ni0yLjM1NywzLjg1MmE4Ljg5Myw4Ljg5MywwLDAsMC0uODUyLjYsOS43NTgsOS43NTgsMCwwLDAsLjg5MiwyLjUzNCw1LjI4Myw1LjI4MywwLDAsMCwuOTY5LS40ODRabTEyLjc2NC0yLjE4NGMuMjEzLS40NzUuMjUtLjk5Mi4yLTIuODE3LS4wNS0xLjk4Ni0uMS0yLjMzNy0uNDg2LTMuMTQ0LS42OTEtMS40NTgtMS41NDQtMS4wODYtMS4wNDUuNDU1LjI2NS44Mi41ODkuNjguNDc1LS4yMDUtLjA5MS0uNy4wNzktLjcyMy4zNzUtLjA0MS41NTYsMS4yODEuNDE2LDMuMDU1LS4yNDIsMy4wNTUtLjQ1LDAtLjU5LS4zOS0uODgzLTIuNDU5YTYuNzUyLDYuNzUyLDAsMCwwLS4zNjItMS43MTRjLS4yMTcsMC0uMzE0LjM4OC0uMTc5LjcxOGEyOC4yMywyOC4yMywwLDAsMSwuNDUyLDIuODU5Yy40NDEsMy41MDcsMS4wNTcsNC43MDcsMS42OSwzLjI5M1ptLTguMzguMDU2YTMuMzg1LDMuMzg1LDAsMCwwLC4wOTUtMS4zM2MtLjA2LTEuMDA4LS4wOTQtMS4wODEtLjM2NC0uNzktLjM4Ny40MTktLjgtLjM3NS0uOTQ0LTEuOC0uMTA3LTEuMDgyLS4xNC0xLjA2MS42NC0uNDE1LjEuMDgxLjM0Ni0uMTk0LjU1My0uNjExLjM3Ny0uNzYzLjUtMS42OC4yMjgtMS42OC0uMDgxLDAtLjE0Ny4xMzQtLjE0Ny4zLDAsLjQyOS0uNC4zNjgtLjQ5NC0uMDc1LS4wNTMtLjI1OC0uMTY2LS4xNjctLjM2Ny4zLS4xNi4zNjktLjM1Ni42NzEtLjQzNC42NzFzLS4xODUtLjMtLjIzNy0uNjcxYy0uMDktLjY0Ni0uMS0uNjUtLjMtLjExM2EuOTUxLjk1MSwwLDAsMC0uMDEuOTY0LDE4LjgxOCwxOC44MTgsMCwwLDEsLjUyMSwzLjc5MWMwLDEuMTc0LjgsMi4xLDEuMjY3LDEuNDYzWm0yLjY4OC0xLjU1NmE3LjA1NSw3LjA1NSwwLDAsMCwuNDE2LTQuMjU5Yy0uMjM2LTEuMTQxLS42NDUtMS41NjgtMS4yMjItMS4yNzUtLjQyOS4yMTgtMS4wODIsMi43NDYtMS4wODQsNC4yLDAsMi4yNjIsMS4wNiwzLjAxNSwxLjg5LDEuMzM3Wm0tMS4wMDctMS43OTJhMy43NywzLjc3LDAsMCwxLS4yOS0xLjQxNmMwLS43NDUuMDIyLS43NzIuMi0uMy4yMi41ODYuNjExLjY4OC43NjEuMmExLjAzNSwxLjAzNSwwLDAsMC0uMDY1LS42NTZjLS4yMzItLjQ2OS0uMi0xLjEwNy4wNDktMS4xMDcuMjgsMCwuNjcyLDEuMTU0LjY3MiwxLjk4MiwwLC42MDktLjYxMywxLjg5My0uOSwxLjg5My0uMDcsMC0uMjYtLjI2OC0uNDIyLS42Wk0xOS4zNDgsMTcuN2E2LjQ0Nyw2LjQ0NywwLDAsMC0uMTQxLTQuOTE4Yy0uMzU4LS43NzMtMS4xNTMtLjkwNi0xLjQ3OS0uMjQ4YTExLjYwNywxMS42MDcsMCwwLDAtLjQ4OSwzLjg5NUMxNy40NzcsMTguMzQ4LDE4LjcxNiwxOS4xLDE5LjM0OCwxNy43Wk0xOC4xLDE1LjUyN2EyLjQ5MiwyLjQ5MiwwLDAsMS0uMzE4LTEuNTY1Yy4wMDgtLjkwOS4wMzEtLjk5MS4xMzUtLjQ3Mi4xNTMuNzY0LjQ3MywxLjA1Mi43NTMuNjc5LjE3NC0uMjMxLjE2Ni0uMzQxLS4wNS0uNjc2LS4yODgtLjQ0Ny0uMzQ0LTEuMDc5LS4xLTEuMDc5YTUuMDM3LDUuMDM3LDAsMCwxLDEuMDE3LDIuMjVjMCwuNDgtLjU2NCwxLjMyNy0uODg0LDEuMzI3QzE4LjUyNywxNS45OTEsMTguMjc2LDE1Ljc4MiwxOC4xLDE1LjUyN1ptOC42NjItMS4zMTgsMS41NDctMS4xNzUtMS42NTgtLjAxMmMtMS40ODQtLjAxMS0xLjY1OC4wNDMtMS42NTYuNTFhMTEuNTMyLDExLjUzMiwwLDAsMCwuMiwxLjg1N2MuMDExLDAsLjcxNi0uNTM0LDEuNTY3LTEuMThaTTYuNTM1LDE0bC4xNTgtLjk0OUw1LjMsMTIuOTU2Yy0uNzY0LS4wNTItMS4zODktLjAxMi0xLjM4OS4wODhhMTQuMSwxNC4xLDAsMCwwLDIuNDQ3LDEuOTM0QzYuMzcxLDE0Ljk2MSw2LjQ0OCwxNC41MjEsNi41MzUsMTRabTkuNTI2LTIuOTQxYTEuNjI0LDEuNjI0LDAsMCwxLC44MTkuNmMuMTkyLjM0OS4yNzYuMzI2LjU3My0uMTYzLjE5MS0uMzE1LjQ0LS41NzIuNTUzLS41NzJzLjItLjA2Ni4yLS4xNDZjMC0uMjc4LTIuMTIyLTcuMzA2LTIuMi03LjNzLTIuMjcsNy4zODYtMi4zMzcsNy45MjVjLS4wMjguMjI2LjA2LjMwOS4yMzEuMjE5LjE1Mi0uMDgxLjM2My4wNjMuNDY4LjMxOS4xNy40MTUuMjQuMzgyLjY0NC0uMzA2LjM4NC0uNjU0LjU0NC0uNzQyLDEuMDQ4LS41NzlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzMzXFxcIi8+PHBhdGggZD1cXFwiTTE0LjUsMTIuMTc1YS44NS44NSwwLDAsMS0uMTE1LS4yLjczNy43MzcsMCwwLDAtLjE5NC0uMjkuMjgxLjI4MSwwLDAsMC0uMy0uMDYxYy0uMDg3LjAzNS0uMTExLjAzOS0uMTUuMDI0LS4wNjUtLjAyNi0uMDg5LS4xMDYtLjA3LS4yNDIuMDIzLS4xNjkuMi0uODI1LjU0OC0yLjA1NC43MTEtMi41LDEuNjY2LTUuNjQ2LDEuNzcyLTUuODM5LjAxMi0uMDIxLjAxMi0uMDIxLjAyNCwwLC4wNjMuMTE0LjQzMiwxLjI2Ni45MzcsMi45MjIuNjgyLDIuMjQsMS4yNSw0LjIxLDEuMjUsNC4zMzksMCwuMDc5LS4wNi4xMjctLjE4Ni4xNDctLjE1Ny4wMjYtLjMzOS4yMTItLjU4Ny42YTEuNjc0LDEuNjc0LDAsMCwxLS4yMjYuMzFjLS4wNDguMDQ2LS4wNTIuMDQ4LS4xLjA0OHMtLjA1NiwwLS4xLS4wNDNhLjk1OC45NTgsMCwwLDEtLjEtLjE0NCwxLjI2OCwxLjI2OCwwLDAsMC0uNDE0LS40MjIsMS41MjUsMS41MjUsMCwwLDAtLjczOC0uMjgxLjQzNC40MzQsMCwwLDAtLjQuMTU2LDIuNzE4LDIuNzE4LDAsMCwwLS40MTYuNmMtLjI1Ny40MjUtLjM0OC41MTMtLjQ0MS40MjZaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjM5OGFhXFxcIi8+PHBhdGggZD1cXFwiTTYuMjUyLDE0LjkyOGExOS4wNTUsMTkuMDU1LDAsMCwxLTIuMy0xLjgzOGMtLjAzMS0uMDM4LS4wMzQtLjA0NC0uMDI1LS4wNTdhMi43LDIuNywwLDAsMSwxLjE0LS4wODVjLjIzLjAxMiwxLjYxOS4xLDEuNjIxLjEwOHMtLjMsMS43NzktLjMyMSwxLjg4MUM2LjM1NywxNC45ODEsNi4zMzcsMTQuOTc5LDYuMjUyLDE0LjkyOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM2Mzk4YWFcXFwiLz48cGF0aCBkPVxcXCJNMjUuMTc3LDE1LjM1QTE0LjIzOSwxNC4yMzksMCwwLDEsMjUsMTMuNTZhLjU1My41NTMsMCwwLDEsLjA0NC0uMjljLjA4MS0uMTUxLjI0NS0uMjA1LjctLjIzLjIyOC0uMDEzLDEuMjgxLS4wMTUsMi4wMjUsMGwuNTIxLjAwOEwyNy4wMjksMTRjLTEuMTQ0Ljg2Ny0xLjgxLDEuMzY5LTEuODM0LDEuMzgyLS4wMDYsMC0uMDEyLS4wMDYtLjAxOC0uMDI3aDBaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjM5OGFhXFxcIi8+PHBhdGggZD1cXFwiTTguNTA2LDI4LjI4MWMwLS4wNzEuMTQ5LS42LjUyNy0xLjg3OC45MDUtMy4wNTcsMS4zMTktNC4xNjUsMS44MjctNC44OTJhNy42NjQsNy42NjQsMCwwLDAsLjk2OS0xLjc5MkwxMiwxOS4yOTJsLjIyNS40NDhjLjM5NC43ODQuNjMyLDEuMDExLDEuMDYyLDEuMDE2YTEuMjM5LDEuMjM5LDAsMCwwLDEuMS0xLjEzN2MwLS4xMjQuMDQ0LS4yNTEuMDg2LS4yNTFhMS4xMTksMS4xMTksMCwwLDEsLjIyNi4xNCwxLjI3MSwxLjI3MSwwLDAsMCwuNjY2LjMuODc5Ljg3OSwwLDAsMCwuNjA5LS4xNDgsMi40NywyLjQ3LDAsMCwwLC43MTEtLjc2NGMuMTg3LS4yNTIuMzQ3LS40NTkuMzU0LS40NTlzLjE0My4xNTkuMy4zNTJhNS4wOTEsNS4wOTEsMCwwLDAsLjQyMi40NjcsMS4wNDksMS4wNDksMCwwLDAsMS41NDktLjA4LDYuMTExLDYuMTExLDAsMCwwLC40NjctLjU3MmMuMTY4LS4yMjguMzA3LS40MS4zMS0uNHMuMDY2LjI2OS4xNDEuNTg0LjE2OS42Ny4yMDkuNzg5YTMuODI2LDMuODI2LDAsMCwwLC42NDIsMS4yMzQsMi4xNywyLjE3LDAsMCwxLC40NjYsMS4yNDYsMy4wNTEsMy4wNTEsMCwwLDEtLjM1MiwxLjQ0NywyLjA3LDIuMDcsMCwwLDAtLjI2Ny45MzQsMi4wMTcsMi4wMTcsMCwwLDAsLjIxMy44NTEuNzczLjc3MywwLDAsMCwxLjA2OS40MTMsMS4zNTEsMS4zNTEsMCwwLDEsLjMxNi0uMDY4Yy4yLDAsLjMxNS4xOTMuNTQyLjg4MS4xNTcuNDc0LjUsMS42MzcuNSwxLjY5NSwwLC4wMy0uMDE2LjA1MS0uMDM5LjA1MWExLjQ4NiwxLjQ4NiwwLDAsMS0uNDA3LS4yMjRjLS4yLS4xNDQtMi42MTItMi4wMjktMy40MDgtMi42NjMtMi4xMjgtMS42OTMtMi44MjgtMi4yMzMtMy4xNzEtMi40NDYtLjM3LS4yMy0uNjIyLS4yODUtLjgyNy0uMTc3LS4yNTQuMTMzLTMuNzI2LDIuODQ3LTUuNzUxLDQuNUExMC44NDYsMTAuODQ2LDAsMCwxLDguNjUsMjguMjUxYy0uMTQ5LjA4My0uMTQzLjA4MS0uMTQzLjAzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzYzOThhYVxcXCIvPlwiLFxuXHR9LFxuXHRcIkhhbWxcIjoge1xuXHRcdGNvbG91cjogXCIjZWNkZmE3XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTUuMzExLDE2LjA0MywxMy40LDI5LjcyNmE2LjMyMiw2LjMyMiwwLDAsMS01Ljk1Ni0xLjI1bDMuMS0xMy4yNjZMNC42OSwzLjM0YTguMDMxLDguMDMxLDAsMCwxLDMuNzktLjY0Nmw1LjE0NCw5LjcsOC45MTQtNy41ODFzMywxLjA0MSwzLjI3LDIuMDQxbC0xMC41LDkuMTg0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VjZGZhN1xcXCIvPjxwYXRoIGQ9XFxcIk0yNy4wMTYsMTcuNDExYTQuMjQ0LDQuMjQ0LDAsMCwwLS41NDEtLjgxMiw1LjcsNS43LDAsMCwwLTEuNDU4LTEuMTg3LDcuMzMxLDcuMzMxLDAsMCwwLTEuNjg3LS43OTFsLS4yMjktLjA2Mi0uMTg3LS4wNjJjLS4xMjUtLjA0Mi0uMjI5LS4xLS4zMzMtLjE0NmExLjI4MiwxLjI4MiwwLDAsMS0uNDU4LS40MTdBMS43NTQsMS43NTQsMCwwLDEsMjIsMTIuNjQyYTIuNTE4LDIuNTE4LDAsMCwxLC4xLS4zNzVjLjA0Mi0uMTI1LjA4My0uMjUuMTI1LS40YTIuNjkxLDIuNjkxLDAsMCwwLC4wNjItLjZsLjEtLjA4MywxLjI1LTEuMDQxYy4yMjktLjE4Ny40NTgtLjQuNjg3LS41ODNhMi4yLDIuMiwwLDAsMSwuMjI5LjE0NnMuNjQ2LjA2MiwxLS45MTZsLS4xODctLjEyNS4xMjUtLjEuMzEyLS4yNzFhLjYxMy42MTMsMCwwLDAsLjIyOS0uMzc1LjUyOS41MjksMCwwLDAtLjQxNy4xMjVsLS4zMzMuMjUtLjIyOS4xNjdMMjIuMTg0LDYuNDc4Yy4xNDYtLjEyNS4yNzEtLjIyOS40MTctLjM1NGwuNi0uNTQxLjA2Mi0uMDYyYy4wNjIuMDQyLjEuMDgzLjE2Ny4xMjUuMTQ2LjEuMzEyLjIwOC40NTguMjkybC45MTYuNWMuMjkyLjE2Ny42LjMzMy45MTYuNDc5YTMuMzIzLDMuMzIzLDAsMCwwLC40NzkuMjA4Yy4wODMuMDIxLjE2Ny4wNjIuMjUuMDgzLjA0MiwwLC4xLjAyMS4xNDYuMDIxaC4xYS4xNTEuMTUxLDAsMCwwLC4xMjUtLjA4M1Y3LjEyM2EuMDc3LjA3NywwLDAsMSwuMDIxLS4wNjJWNi45NzdhLjEwOC4xMDgsMCwwLDAtLjA0Mi0uMDgzYy0uMDIxLS4wNDItLjA2Mi0uMDgzLS4wODMtLjEyNWExLjU5LDEuNTksMCwwLDAtLjE4Ny0uMTg3Yy0uMTI1LS4xMjUtLjI3MS0uMjI5LS40LS4zMzMtLjI3MS0uMjA4LS41NjItLjQtLjg1NC0uNTgzYTcuNTQ1LDcuNTQ1LDAsMCwwLS45LS41LDMuMzIzLDMuMzIzLDAsMCwwLS40NzktLjIwOGMtLjA4My0uMDIxLS4xNjctLjA2Mi0uMjcxLS4wODMtLjA0MiwwLS4xLS4wMjEtLjE2Ny0uMDIxYS4zMS4zMSwwLDAsMC0uMTI1LjAyMS41MjIuNTIyLDAsMCwwLS4xNjcuMSwxLjYsMS42LDAsMCwwLS4zNzUuMjA4bC0uNjI1LjM1NGMtLjE4Ny4xNDYtLjQuMzEyLS41ODMuNDU4bC0uMjA4LS4xNDZzLS44NzUuMDgzLS41ODMuNjQ2bC4wODMuMDgzYy0uODMzLjY4Ny0xLjY0NSwxLjQtMi40NTcsMi4wODMtLjgzMy43MDgtMS42NDUsMS40MTYtMi40NzgsMi4xNDVsLTEuMjI5LDEuMDgzYTEuODc4LDEuODc4LDAsMCwxLS4yMDguMTg3Yy0uMDQyLS4xMjUtLjEtLjIyOS0uMTQ2LS4zMzNsLS4yOTItLjYyNS0uNTYyLTEuMjVjLS4zNzUtLjgzMy0uNzUtMS42NjYtMS4xNDUtMi41TDExLjIwOSw0Ljg5NWwtLjE4Ny0uMzc1aC4yNXMuMDgzLS42ODctLjQxNy0uODEyYTEuNCwxLjQsMCwwLDAtLjIwOC4wMjFjLS4xODctLjM3NS0uMzU0LS43NS0uNTQxLTEuMTI1aDBsLS4wODMtLjMxMkEuMzMuMzMsMCwwLDAsOS45LDIuMWEuMzUyLjM1MiwwLDAsMC0uMS0uMDQyYy0uMDYyLS4wMjEtLjEtLjAyMS0uMTY3LS4wNDJBMS4yODEsMS4yODEsMCwwLDAsOS4zNTUsMmE0LjA1Nyw0LjA1NywwLDAsMC0uNTIxLjA0Miw4Ljc2Nyw4Ljc2NywwLDAsMC0xLjAyLjE4N2MtLjMzMy4wODMtLjY2Ni4xNjctMSwuMjcxYTMuMjcyLDMuMjcyLDAsMCwwLS40NzkuMTg3bC0uMjUuMTI1Yy0uMDQyLjAyMS0uMDgzLjA2Mi0uMTI1LjA4M0w1LjksMi45NThjLS4wMjEuMDIxLS4wMjEuMDQyLS4wNDIuMDYydi4wNjJoMFYzLjFhLjE2NC4xNjQsMCwwLDAsLjEuMTI1Yy4wNDIuMDIxLjA2Mi4wNDIuMDgzLjA0MmExLjMyNywxLjMyNywwLDAsMSwuMTQ2LjA0MiwxLjE4OCwxLjE4OCwwLDAsMCwuMjcxLjAyMSw0LjM4NCw0LjM4NCwwLDAsMCwuNTIxLS4wNDJjLjMzMy0uMDQyLjY4Ny0uMDgzLDEuMDItLjE0NmwxLjAyLS4xNjdjLjE2Ny0uMDIxLjMzMy0uMDYyLjUyMS0uMS4xNDYuMjkyLjI5Mi42LjQzNy45LS45NTguMDgzLTIuNDU3LjIwOC0zLjM5NS4zMTItLjEtLjE4Ny0uMTg3LS4zNTQtLjI5Mi0uNTQxYS4xMjcuMTI3LDAsMCwwLS4xNDYtLjA2Mi4xMDguMTA4LDAsMCwwLS4wNjIuMTQ2Yy4wNjIuMTY3LjEyNS4zMTIuMTg3LjQ3OWExLjE2NywxLjE2NywwLDAsMC0uNS4xMjVBMS44MjgsMS44MjgsMCwwLDAsNi40LDUuNjQ1YTMuNTY3LDMuNTY3LDAsMCwxLC40NTgtLjEyNWwuNDM3LDEsMS4yNSwyLjgzMiwxLjI3LDIuODMyYy40MTcuOTM3Ljg1NCwxLjg3NCwxLjI5MSwyLjgzMmgwYS4wMi4wMiwwLDAsMCwuMDIxLjAyMWwtLjE4Ny42MjUtLjUsMS43NDljLS4zMTIsMS4xNjYtLjYsMi4zNTMtLjksMy41Mkw5LjEwNSwyMi43bC0uNDE3LDEuNzdjLS4yOTIsMS4xODctLjU2MiwyLjM1My0uOSwzLjUyYS4xMjUuMTI1LDAsMCwwLC4wMjEuMDgzLDMuMDc2LDMuMDc2LDAsMCwwLC42LjU2Miw2LjA0OCw2LjA0OCwwLDAsMCwuNjg3LjQxNyw5LjQsOS40LDAsMCwwLDEuNS42LDYuOTcyLDYuOTcyLDAsMCwwLDEuNjI0LjI3MSwzLjcyOCwzLjcyOCwwLDAsMCwuODMzLS4wNDIsNi41NDcsNi41NDcsMCwwLDAsLjgzMy0uMTY3LjI1NC4yNTQsMCwwLDAsLjE2Ny0uMTg3di0uMDIxYy4yMjktMS4xNDUuNDE3LTIuMzEyLjYyNS0zLjQ1N2wuNTgzLTMuNDc4Yy4xODctMS4xNjYuNC0yLjMxMi41ODMtMy40NzguMDIxLS4xMjUuMDQyLS4yNzEuMDYyLS40LjA0Mi4wNDIuMDYyLjEuMS4xNDZhNC4xMzcsNC4xMzcsMCwwLDAsLjcwOC42NDYsNy4yMTIsNy4yMTIsMCwwLDAsMS41ODMuODMzLDExLjc3NCwxMS43NzQsMCwwLDAsMS42NjYuNSwxMC4xODIsMTAuMTgyLDAsMCwwLDEuMS4xODcsMi42MjEsMi42MjEsMCwwLDAtLjI1LDEuMjA4LjExNS4xMTUsMCwwLDAsLjA2Mi4xaC4wMjFhNS4xNjQsNS4xNjQsMCwwLDAsMS4yNy40NzksNC4zMzMsNC4zMzMsMCwwLDAsMS4zNzUuMDYyLDIuNjI3LDIuNjI3LDAsMCwwLDEuMzMzLS41NjIsMi44MjQsMi44MjQsMCwwLDAsLjgxMi0xLjE2NmwuMDIxLS4wMjFWMjEuMWwuMDYyLS41NjJ2LS4wMjFhNS40MjcsNS40MjcsMCwwLDAsLjYyNS0uNDE3LDIuNzEsMi43MSwwLDAsMCwuNjQ2LS43MjksMS44MzMsMS44MzMsMCwwLDAsLjI1LTEsMi41NjMsMi41NjMsMCwwLDAtLjI5Mi0uOTU4Wm0tLjQtMTAuNVptLTEuNDc5LTEuMWE3LjEyLDcuMTIsMCwwLDEsLjgzMy41NDFjLjEyNS4xLjI3MS4xODcuNC4zMTJhMS4yNTcsMS4yNTcsMCwwLDEsLjE2Ny4xNjdsLjA0Mi4wNDJoLS4wNDJjLS4wODMtLjAyMS0uMTQ2LS4wNDItLjIyOS0uMDYyLS4xNDYtLjA2Mi0uMzEyLS4xMjUtLjQ1OC0uMTg3YTcuMTMyLDcuMTMyLDAsMCwxLS44NzUtLjQ3OUE1LjYxLDUuNjEsMCwwLDEsMjQuMiw1LjUyYTIuNSwyLjUsMCwwLDEtLjIyOS0uMjVsLjMxMi4xMjVhNi40LDYuNCwwLDAsMSwuODU0LjQxN1ptLTEuNDE2LS45MTYuMDIxLjAyMXYuMDQyYS4wMi4wMiwwLDAsMC0uMDIxLS4wMjFWNC44OTVaTTguODc2LDIuNTYyYTUuMDIxLDUuMDIxLDAsMCwxLS45MzcuMzMzLDUuMzQ3LDUuMzQ3LDAsMCwxLS45NzkuMTY3LDQuMDEzLDQuMDEzLDAsMCwxLS41LjAyMS43ODEuNzgxLDAsMCwxLS4yMjktLjAyMUg2LjE2OWMuMDIxLDAsLjAyMS0uMDIxLjA0Mi0uMDIxLjA2Mi0uMDQyLjE0Ni0uMDYyLjIwOC0uMS4xNDYtLjA2Mi4zMTItLjEuNDU4LS4xNjcuMzEyLS4wODMuNjQ2LS4xNjcuOTc5LS4yMjlhOC40LDguNCwwLDAsMSwuOTc5LS4xMjVBMS41NzYsMS41NzYsMCwwLDAsOS4xNDcsMi40YTEuNTM2LDEuNTM2LDAsMCwxLS4yNzEuMTY3Wm0xNC40NTMsNy4xLTEuMjkxLDEtMS4yOTEsMS4wMmMtLjM1NC4yOTItLjcwOC41ODMtMS4wNjIuODU0LjAyMS0uMDIxLjA0Mi0uMDYyLjA2Mi0uMDgzLjE2Ny0uMjI5LjMzMy0uNDM3LjUtLjY0Ni4zNTQtLjQxNy42ODctLjg1NCwxLjA2Mi0xLjI1cy43NzEtLjc5MSwxLjE2Ni0xLjE0NWE0Ljg3Miw0Ljg3MiwwLDAsMSwuNjQ2LS41bC4xODctLjEyNWMuMTg3LjE0Ni40LjI5Mi41ODMuNDM3LS4xNjcuMTQ2LS4zNzUuMjkyLS41NjIuNDM3Wk04LjA2NCw3LjFsLjEuMWE1LjYzLDUuNjMsMCwwLDEsLjU4My42NDYsMi4yMSwyLjIxLDAsMCwxLC4zNzUuNzI5LjkyMS45MjEsMCwwLDEtLjA2Mi42MjVsLS4wMjEtLjA2Mkw4LjA2NCw3LjFabTEuMDIsMi4xNjZhLjcyLjcyLDAsMCwwLC4xNDYtLjI1Ljg2Ni44NjYsMCwwLDAsLjA0Mi0uNDU4QTEuNywxLjcsMCwwLDAsOC45LDcuNzI3YTQuMDE1LDQuMDE1LDAsMCwwLS45NzktLjlsLS4yMjktLjQ3OWMtLjE0Ni0uMzEyLS4yOTItLjYyNS0uNDU4LS45MTYuMzEyLS4wODMuNjg3LS4yMDgsMS4xLS4zMTJBMjAuMzEzLDIwLjMxMywwLDAsMSw5LjM1NSw3YTcuOTYzLDcuOTYzLDAsMCwxLC43NzEsMi41NDFjLjAyMS4yMDgsMCwuNDM3LDAsLjY2NnMwLC40NTguMDIxLjY4N2E3LjYwOSw3LjYwOSwwLDAsMCwuMTQ2Ljk1OEw5LjA4NCw5LjI2OFpNMTQsMjYuMjQyYS45LjksMCwwLDEtLjE4Ny4yMDguNC40LDAsMCwxLS4zMzMuMS4zNTguMzU4LDAsMCwxLS4yMjktLjIyOS45ODEuOTgxLDAsMCwxLS4wODMtLjM1NCwyLjI3NSwyLjI3NSwwLDAsMSwuMDQyLS43NSwyLjgxNiwyLjgxNiwwLDAsMSwuMjI5LS43MDgsMS40NzgsMS40NzgsMCwwLDEsLjIwOC0uMjkyLjM0MS4zNDEsMCwwLDEsLjI5Mi0uMTI1Yy4xLDAsLjIwOC4xLjI3MS4yMDhhLjc0Ljc0LDAsMCwxLC4wODMuMTg3bC0uMjUsMS40NzljLS4wMjEuMS0uMDIxLjE4Ny0uMDQyLjI3MVptMS4yMjktNy4xODUtLjM3NSwyLjE4N2EzLjMyOSwzLjMyOSwwLDAsMC0uMS0uNDM3Yy0uMS0uNC0uMjI5LS43NzEtLjM1NC0xLjE0NWExNS41MzcsMTUuNTM3LDAsMCwwLS45NTgtMi4xNjZjLjIyOS43NzEuNSwxLjUuNzcxLDIuMjQ5LjE0Ni4zNzUuMjcxLjc1LjQsMS4xbC4xODcuNTYyYzAsLjAyMS4wMjEuMDYyLjAyMS4wODMtLjA2Mi4zMzMtLjEyNS42NjYtLjE2NywxLjAybC0uMzEyLDEuOWMtLjAyMS0uMDQyLS4wMjEtLjA4My0uMDQyLS4xMjVhLjQ4Ni40ODYsMCwwLDAtLjMxMi0uMjkyLjUyNS41MjUsMCwwLDAtLjQxNy4xMjUsMS45NDQsMS45NDQsMCwwLDAtLjI3MS4zMTIsMi4wMzYsMi4wMzYsMCwwLDAtLjI3MS43NSwyLjEzMSwyLjEzMSwwLDAsMCwwLC44MTIsMS4wMjEsMS4wMjEsMCwwLDAsLjE0Ni40LjQ4Ni40ODYsMCwwLDAsLjMzMy4yNzEuNDI4LjQyOCwwLDAsMCwuMzc1LS4xNjdjLjA0Mi0uMDQyLjA4My0uMS4xMjUtLjE0Ni0uMTQ2Ljk3OS0uMzEyLDEuOTU4LS40NTgsMi45NTdhMi43MjcsMi43MjcsMCwwLDEtLjU2Mi4xMjVjLS4yNS4wNDItLjUuMDYyLS43NS4wODNhNS41MzEsNS41MzEsMCwwLDEtMS41NDEtLjE0Niw3Ljg0Niw3Ljg0NiwwLDAsMS0xLjUtLjQ3OSwzLjYyNSwzLjYyNSwwLDAsMS0xLjIyOS0uODU0Yy4zMTItMS4xNDUuNjY2LTIuMjkxLDEuMDItMy40MzZsLjU0MS0xLjcyOS41MjEtMS43NDljLjM1NC0xLjE2Ni43MDgtMi4zMzMsMS4wNDEtMy41LjE2Ny0uNTgzLjMxMi0xLjE2Ni40NzktMS43NDlhMy42MjYsMy42MjYsMCwwLDAsLjE4Ny0xLjgzM3YtLjAyMWMtLjAyMS0uMDIxLS4wNDItLjAyMS0uMDQyLDBhMy4xMDksMy4xMDksMCwwLDAtLjI1LjI5MmMtLjIyOS0uNTIxLS40NzktMS4wMi0uNzA4LTEuNTQxYTQuNzY1LDQuNzY1LDAsMCwxLS4xNjctLjU4Myw3LjE2NSw3LjE2NSwwLDAsMS0uMjA4LTEuMzEyYy0uMDIxLS4yMjktLjAyMS0uNDM3LS4wMjEtLjY2NnMuMDIxLS40NTgsMC0uNjg3YTcuNjI1LDcuNjI1LDAsMCwwLS44MzMtMi42LDEyLjU4NywxMi41ODcsMCwwLDAtMS4xLTEuODMzYy42ODctLjE4NywxLjQxNi0uMzc1LDItLjQ3OS4wODMuMTg3LjE4Ny4zNTQuMjcxLjU0MUwxMS45MzgsNy42bDEuMjUsMi40MzcuNjI1LDEuMjA4LjMxMi42Yy4wODMuMTI1LjEyNS4yNzEuMjA4LjM3NWwtLjgxMi43NWEuMDY5LjA2OSwwLDAsMCwwLC4xLjA3My4wNzMsMCwwLDAsLjEuMDIxYy40MzctLjMxMi44NzUtLjY0NiwxLjMxMi0uOTc5bDEuMzEyLTFjLjg3NS0uNjY2LDEuNzI5LTEuMzMzLDIuNTgyLTJzMS43MDgtMS4zNTQsMi41NjItMi4wNDFsLjAyMS0uMDIxYTI0LjMxNiwyNC4zMTYsMCwwLDAsMS44NzQsMS42NDUsNi4xNjIsNi4xNjIsMCwwLDAtLjg3NS41NDEsOC45NDMsOC45NDMsMCwwLDAtMS4yMjksMS4xMjUsMTIuMjc5LDEyLjI3OSwwLDAsMC0xLjA0MSwxLjI5MSwxMS43NzgsMTEuNzc4LDAsMCwwLS42NDYsMWMtMS4yNywxLjA0MS0yLjUyLDIuMS0zLjcyOCwzLjIwN2EuMTI4LjEyOCwwLDAsMC0uMDIxLjE0Ni4xMzguMTM4LDAsMCwwLC4xNDYuMDQyLDkuMTM0LDkuMTM0LDAsMCwwLS4zMTIsMS4yNWMtLjEyNS41ODMtLjI1LDEuMTY2LS4zNTQsMS43NDlabTkuMjA1LDIuNzkxYTIuNTI3LDIuNTI3LDAsMCwxLTEuMDIuNDU4LDMuNzY3LDMuNzY3LDAsMCwxLTEuMTg3LjA0Miw3LjM2MSw3LjM2MSwwLDAsMS0xLjE0NS0uMjA4LDIuMDM3LDIuMDM3LDAsMCwxLC4xNjctMS4wNDFjLjE0Ni4wMjEuMjcxLjAyMS40MTcuMDQyYS4xMTQuMTE0LDAsMCwwLC4xMjUtLjA4My4xMjQuMTI0LDAsMCwwLS4wODMtLjE2N2gwYy0uMS0uMDQyLS4xODctLjA2Mi0uMjkyLS4xYTIuNzcxLDIuNzcxLDAsMCwxLC4yOTItLjRjLjEyNS0uMTI1LjI1LS4yNS4zNzUtLjM1NGEzLjk5MiwzLjk5MiwwLDAsMCwuODU0LjQsMi44ODEsMi44ODEsMCwwLDAsMS4xMjUuMSwxLjU1LDEuNTUsMCwwLDAsMS4wMi0uNTQxLDEuNTI0LDEuNTI0LDAsMCwwLC4zNTQtLjkxNi44NS44NSwwLDAsMSwuMDIxLjQsNC41MTEsNC41MTEsMCwwLDEtLjA4My41MjFsLS4wNjIuMzEyTDI1LDIwLjQ5NGEuOTE5LjkxOSwwLDAsMC0uMzMzLjM1NC43NTEuNzUxLDAsMCwwLC40NzksMGMuMDIxLDAsLjAyMS0uMDIxLjA0Mi0uMDIxLS4wMjEuMDYyLS4wMjEuMS0uMDQyLjE2N2EyLjU1MiwyLjU1MiwwLDAsMS0uNzA4Ljg1NFpNMjYuNSwxOS4xMTlhMi4yLDIuMiwwLDAsMS0uNDU4LjYyNSwyLjYzOCwyLjYzOCwwLDAsMS0uMjcxLjIyOSwyLjU4NSwyLjU4NSwwLDAsMC0uMDYyLS41NjIsMS41MzQsMS41MzQsMCwwLDAtLjA4My0uMjkyLjUzMS41MzEsMCwwLDAtLjE4Ny0uMjVoMGMtLjAyMSwwLS4wNDIsMC0uMDQyLjAyMWgwYTEuOTUsMS45NSwwLDAsMS0uNTYyLjc3MSwxLjQyOSwxLjQyOSwwLDAsMS0uODEyLjI5MiwyLjg1NywyLjg1NywwLDAsMS0uOTE2LS4xMjVjLS4zMTItLjA4My0uNjI1LS4xODctLjkzNy0uMjkybC0uMDQyLS4wMjFhLjIuMiwwLDAsMC0uMTg3LjA0MmMtLjE2Ny4yMDgtLjI5Mi40LS40MzcuNi0uMS4xNjctLjE4Ny4zMTItLjI3MS40NzktLjM3NS0uMTQ2LS43MjktLjI3MS0xLjEtLjQxNy0uNTIxLS4yMDgtMS4wNDEtLjQxNy0xLjUyLS42NjZhNy42NDgsNy42NDgsMCwwLDEtMS40LS44MTIsMi45NDksMi45NDksMCwwLDEtLjk3OS0xLjA2MnYtLjAyMWEuNDA5LjQwOSwwLDAsMC0uMTg3LS4xODdjMC0uMDQyLjAyMS0uMS4wMjEtLjE0NmE3LjM3LDcuMzcsMCwwLDAsLjEtMS41MmMxLjY4Ny0xLjE4NywzLjMzMi0yLjQzNyw0Ljk1Ny0zLjcyOGwtLjA2Mi4xODdhMy4yNywzLjI3LDAsMCwwLS4xNDYsMS4wMkEyLjA4OSwyLjA4OSwwLDAsMCwyMi4xMjIsMTUuMWEyLjgyNSwyLjgyNSwwLDAsMCwuNDc5LjE4N2wuMjUuMDYyLjIwOC4wNDJhNi42NDUsNi42NDUsMCwwLDEsMS41NDEuNjI1LDYuMTU2LDYuMTU2LDAsMCwxLDEuMzEyLjk3OSwyLjI3NSwyLjI3NSwwLDAsMSwuNzA4LDEuMzMzLDEuNTEsMS41MSwwLDAsMS0uMTI1Ljc5MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMzZjNlMjlcXFwiLz48cGF0aCBkPVxcXCJNMTIuNjY3LDIzLjkwOWEyLjE2MSwyLjE2MSwwLDAsMC0uMzU0Ljc3MSwxLjU1NiwxLjU1NiwwLDAsMC0uMDYyLjQxN2wtLjAyMS40MTdhNC41MzMsNC41MzMsMCwwLDAsLjE0NiwxLjY2Niw3LjY0Nyw3LjY0NywwLDAsMCwuNjY2LDEuNTJjLS4wODMtLjI3MS0uMTg3LS41MjEtLjI3MS0uNzcxcy0uMTY3LS41MjEtLjIyOS0uNzkxYTUuODksNS44OSwwLDAsMS0uMS0xLjZsLjAyMS0uNDE3YTIuNTUyLDIuNTUyLDAsMCwxLC4wNDItLjQsMy4xMzcsMy4xMzcsMCwwLDEsLjI5Mi0uNzI5LDIuOTY3LDIuOTY3LDAsMCwxLC41MjEtLjYyNSwyLjU5MSwyLjU5MSwwLDAsMSwuNjY2LS40NzksMi43NiwyLjc2LDAsMCwwLTEuMzEyLDEuMDJaXFxcIiBzdHlsZT1cXFwiZmlsbDojM2YzZTI5XFxcIi8+XCIsXG5cdH0sXG5cdFwiSGFuZGxlYmFyc1wiOiB7XG5cdFx0Y29sb3VyOiBcIiNjMTk3NzBcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xMi4zLDEzLjFhNC4yMzgsNC4yMzgsMCwwLDEsMi43MjguOUE0LjU5Miw0LjU5MiwwLDAsMSwxNiwxNS4xMjdhNC4xNDQsNC4xNDQsMCwwLDEsMi4wMzktMS43NDcsNC43NTcsNC43NTcsMCwwLDEsMy4yODYuMDE5LDcuODMzLDcuODMzLDAsMCwxLDIuNDQzLDEuNTU4Yy41NjguNSwxLjA5NCwxLjA1LDEuNjc5LDEuNTMzYTMuNCwzLjQsMCwwLDAsMS4wMTkuNjE0LDEuNDIsMS40MiwwLDAsMCwxLjQ2LS4zNzkuOTY1Ljk2NSwwLDAsMC0uMDU1LTEuMzIzLjU0NS41NDUsMCwwLDAtLjguMTA4LjY1OS42NTksMCwwLDAsLjA1LjY4NiwxLjIyMiwxLjIyMiwwLDAsMS0uNi0uOTI2LDEuMDIyLDEuMDIyLDAsMCwxLC42OTEtMS4wMzIsMi4wMDUsMi4wMDUsMCwwLDEsMi4zMTIuNjYxLDMuMjU4LDMuMjU4LDAsMCwxLC40NCwyLjMwOCwyLjc2MiwyLjc2MiwwLDAsMS0xLjEzNywxLjg3Miw1LjA1MSw1LjA1MSwwLDAsMS0zLjAxMy44LDguNDg4LDguNDg4LDAsMCwxLTIuOTMyLS42M2MtMS41NTgtLjYyNi0zLjAxNi0xLjQ5Mi00LjYyNS0xLjk5MmExMy45NzcsMTMuOTc3LDAsMCwwLTEuNy0uMzYzYy0uNDMuMDA3LS44NjEtLjAxNS0xLjI5LjAxNWE1LjY5Miw1LjY5MiwwLDAsMC0xLjUzNC4zNDljLTEuNjM2LjUwOS0zLjExNiwxLjQtNC43LDIuMDI0YTcuNjI1LDcuNjI1LDAsMCwxLTQuMjQ5LjQ3NCwzLjc0LDMuNzQsMCwwLDEtMi4xMjUtMS4xNEEyLjg1NiwyLjg1NiwwLDAsMSwyLDE2LjY2OGEyLjcyMiwyLjcyMiwwLDAsMSwuNTU1LTEuODc0LDEuOTk0LDEuOTk0LDAsMCwxLDEuNjg3LS42OCwxLjQyNSwxLjQyNSwwLDAsMSwxLjA2My41MiwxLjA0LDEuMDQsMCwwLDEsLjEyMi45MTEsMS40NTcsMS40NTcsMCwwLDEtLjU1Ni42NDQuNjQzLjY0MywwLDAsMCwuMDUxLS42ODEuNTQ3LjU0NywwLDAsMC0uODMxLS4wNzkuOTc1Ljk3NSwwLDAsMC0uMTUxLDEuMTEsMS4zMzEsMS4zMzEsMCwwLDAsMS4wMzIuNjIzLDIuMzMyLDIuMzMyLDAsMCwwLDEuNi0uN0EyOC41MjYsMjguNTI2LDAsMCwxLDkuNCwxNC4wNTMsNS4yNTEsNS4yNTEsMCwwLDEsMTIuMywxMy4xWlxcXCIgc3R5bGU9XFxcImZpbGw6I2MxOTc3MFxcXCIvPlwiLFxuXHR9LFxuXHRcIkhhc2tlbGxcIjoge1xuXHRcdGNvbG91cjogXCIjQzA0NTA0XCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCIwLjk5NlxcXCIgeTE9XFxcIi0yMDYuMDU3XFxcIiB4Mj1cXFwiMC45NTFcXFwiIHkyPVxcXCItMjA2LjA1N1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgyNTkuOTQxLCAwLCAwLCAtMTgzLjQ4NywgLTIzNy45NDEsIC0zNzc5Mi43ODgpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmFiYTA5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYjQyYzAxXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9oYXNrZWxsMjwvdGl0bGU+PHBhdGggZD1cXFwiTTIsMjUuODgyLDguNTg4LDE2LDIsNi4xMThINi45NDFMMTMuNTI5LDE2LDYuOTQxLDI1Ljg4MlptNi41ODgsMEwxNS4xNzcsMTYsOC41ODgsNi4xMThoNC45NDFMMjYuNzA2LDI1Ljg4MkgyMS43NjVsLTQuMTE3LTYuMTc2LTQuMTE4LDYuMTc2Wk0yNC41MSwyMC4xMThsLTIuMi0zLjI5NEgzMHYzLjI5NFptLTMuMjk0LTQuOTQxLTIuMi0zLjI5NEgzMHYzLjI5NFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz5cIixcblx0fSxcblx0XCJIYXhlXCI6IHtcblx0XHRjb2xvdXI6IFwiI2Y2ODcxMlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTE2LDUuNSw1LjUsMTYsMTYsMjYuNSwyNi41LDE2LDE2LDUuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2Y2ODcxMlxcXCIvPjxwYXRoIGQ9XFxcIk0yLDIsMTYsNS41LDUuNSwxNiwyLDJcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWIyMGJcXFwiLz48cGF0aCBkPVxcXCJNMzAsMiwyNi41LDE2LDE2LDUuNSwzMCwyXFxcIiBzdHlsZT1cXFwiZmlsbDojZjQ3MjE2XFxcIi8+PHBhdGggZD1cXFwiTTMwLDMwLDE2LDI2LjUsMjYuNSwxNiwzMCwzMFxcXCIgc3R5bGU9XFxcImZpbGw6I2YyNWMxOVxcXCIvPjxwYXRoIGQ9XFxcIk0yLDMwLDUuNSwxNiwxNiwyNi41LDIsMzBcXFwiIHN0eWxlPVxcXCJmaWxsOiNmODljMGVcXFwiLz48cGF0aCBkPVxcXCJNMTYsNS41LDIsMkg5bDcsMy41XFxcIiBzdHlsZT1cXFwiZmlsbDojZmJjNzA3XFxcIi8+PHBhdGggZD1cXFwiTTE2LDUuNSwzMCwySDIzTDE2LDUuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZiYzcwN1xcXCIvPjxwYXRoIGQ9XFxcIk0xNiwyNi41LDMwLDMwSDIzbC03LTMuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2Y2ODcxMlxcXCIvPjxwYXRoIGQ9XFxcIk0xNiwyNi41LDIsMzBIOWw3LTMuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2YyNWMxOVxcXCIvPjxwYXRoIGQ9XFxcIk01LjUsMTYsMiwzMFYyM2wzLjUtN1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZjIwMFxcXCIvPjxwYXRoIGQ9XFxcIk01LjUsMTYsMiwyVjlsMy41LDdcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmYyMDBcXFwiLz48cGF0aCBkPVxcXCJNMjYuNSwxNiwzMCwyVjlsLTMuNSw3XFxcIiBzdHlsZT1cXFwiZmlsbDojZjE0NzFkXFxcIi8+PHBhdGggZD1cXFwiTTI2LjUsMTYsMzAsMzBWMjNsLTMuNS03XFxcIiBzdHlsZT1cXFwiZmlsbDojZjE0NzFkXFxcIi8+XCIsXG5cdH0sXG5cdFwiSExTTFwiOiB7XG5cdFx0Y29sb3VyOiBcIiMwMDAwZmZcIixcblx0XHRpY29uOiBcIjxwb2x5Z29uIHBvaW50cz1cXFwiOS41MjUgMjEuOTQ3IDcuNTYgMjEuOTQ3IDcuNTYgMTcuMSAzLjk1OCAxNy4xIDMuOTU4IDIxLjk0NyAyIDIxLjk0NyAyIDEwLjA0NCAzLjk1OCAxMC4wNDQgMy45NTggMTQuNzkyIDcuNTYgMTQuNzkyIDcuNTYgMTAuMDQ0IDkuNTI1IDEwLjA0NCA5LjUyNSAyMS45NDdcXFwiIHN0eWxlPVxcXCJmaWxsOmJsdWVcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE2LjY5MiAyMS45NDcgMTEuNTEzIDIxLjk0NyAxMS41MTMgMTAuMDQ0IDEzLjQ3MiAxMC4wNDQgMTMuNDcyIDE5Ljc3MyAxNi42OTIgMTkuNzczIDE2LjY5MiAyMS45NDdcXFwiIHN0eWxlPVxcXCJmaWxsOmJsdWVcXFwiLz48cGF0aCBkPVxcXCJNMTcuNDYyLDIxLjQ5MVYxOC44MzRhMy42NzYsMy42NzYsMCwwLDAsMS4xNDYuOTA5LDIuODA5LDIuODA5LDAsMCwwLDEuMjQ5LjMsMi4wNSwyLjA1LDAsMCwwLC42NDYtLjA5MiwxLjMwOSwxLjMwOSwwLDAsMCwuNDYxLS4yNTIsMS4wMjksMS4wMjksMCwwLDAsLjI3Ni0uMzgyLDEuMjMxLDEuMjMxLDAsMCwwLC4wOTEtLjQ3OCwxLjMsMS4zLDAsMCwwLS4xNDUtLjYyMywxLjkwNywxLjkwNywwLDAsMC0uNC0uNTA2LDQuMDc3LDQuMDc3LDAsMCwwLS42LS40NDhxLS4zNDYtLjIxNS0uNzQ2LS40MzlhNC4wNDUsNC4wNDUsMCwwLDEtMS41MTktMS40MTksMy44ODQsMy44ODQsMCwwLDEtLjUtMi4wMjYsNC4yMzIsNC4yMzIsMCwwLDEsLjI3My0xLjYsMy4wMiwzLjAyLDAsMCwxLC43NDQtMS4xLDIuOTM4LDIuOTM4LDAsMCwxLDEuMDg4LS42MzQsNC4xNjcsNC4xNjcsMCwwLDEsMS4zMS0uMiw1LjgxNiw1LjgxNiwwLDAsMSwxLjIuMTExLDMuOCwzLjgsMCwwLDEsLjk2Ny4zNDV2Mi40ODJhMi44NTksMi44NTksMCwwLDAtLjQ3Ni0uMzY1LDMuMjEyLDMuMjEyLDAsMCwwLS41My0uMjYyQTMuMSwzLjEsMCwwLDAsMjEuNDYsMTJhMi43OTQsMi43OTQsMCwwLDAtLjUxMi0uMDUsMS45OTQsMS45OTQsMCwwLDAtLjYwNi4wODcsMS4zNDcsMS4zNDcsMCwwLDAtLjQ2MS4yNDUsMS4wOTIsMS4wOTIsMCwwLDAtLjI5MS4zNzcsMS4xNDQsMS4xNDQsMCwwLDAtLjEuNDk0LDEuMiwxLjIsMCwwLDAsLjExNS41MzYsMS42NTcsMS42NTcsMCwwLDAsLjMyOC40NDgsMy40NjEsMy40NjEsMCwwLDAsLjUxNS40MTVjLjIuMTM2LjQzLjI3NS42ODYuNDE5YTcuMDk0LDcuMDk0LDAsMCwxLC45MzYuNjM1LDMuNzEyLDMuNzEyLDAsMCwxLC43MTMuNzU5LDMuMjY5LDMuMjY5LDAsMCwxLC40NTUuOTY3LDQuNTczLDQuNTczLDAsMCwxLC4xNTgsMS4yNjYsNC40MzksNC40MzksMCwwLDEtLjI3NywxLjY3MiwyLjg4OCwyLjg4OCwwLDAsMS0uNzQ5LDEuMSwyLjgyMywyLjgyMywwLDAsMS0xLjEuNiw0Ljc0Miw0Ljc0MiwwLDAsMS0xLjMyNS4xODIsNS40NzYsNS40NzYsMCwwLDEtMS4zNjEtLjE2NkEzLjQxLDMuNDEsMCwwLDEsMTcuNDYyLDIxLjQ5MVpcXFwiIHN0eWxlPVxcXCJmaWxsOmJsdWVcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjMwIDIxLjk0NyAyNC44MjIgMjEuOTQ3IDI0LjgyMiAxMC4wNDQgMjYuNzggMTAuMDQ0IDI2Ljc4IDE5Ljc3MyAzMCAxOS43NzMgMzAgMjEuOTQ3XFxcIiBzdHlsZT1cXFwiZmlsbDpibHVlXFxcIi8+XCIsXG5cdH0sXG5cdFwiSFRNTFwiOiB7XG5cdFx0Y29sb3VyOiBcIiNlNDRmMjZcIixcblx0XHRpY29uOiBcIjxwb2x5Z29uIHBvaW50cz1cXFwiNS45MDIgMjcuMjAxIDMuNjU1IDIgMjguMzQ1IDIgMjYuMDk1IDI3LjE5NyAxNS45ODUgMzAgNS45MDIgMjcuMjAxXFxcIiBzdHlsZT1cXFwiZmlsbDojZTQ0ZjI2XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNiAyNy44NTggMjQuMTcgMjUuNTkzIDI2LjA5MiA0LjA2MSAxNiA0LjA2MSAxNiAyNy44NThcXFwiIHN0eWxlPVxcXCJmaWxsOiNmMTY2MmFcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE2IDEzLjQwNyAxMS45MSAxMy40MDcgMTEuNjI4IDEwLjI0MiAxNiAxMC4yNDIgMTYgNy4xNTEgMTUuOTg5IDcuMTUxIDguMjUgNy4xNTEgOC4zMjQgNy45ODEgOS4wODMgMTYuNDk4IDE2IDE2LjQ5OCAxNiAxMy40MDdcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYmViZWJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE2IDIxLjQzNCAxNS45ODYgMjEuNDM4IDEyLjU0NCAyMC41MDkgMTIuMzI0IDE4LjA0NCAxMC42NTEgMTguMDQ0IDkuMjIxIDE4LjA0NCA5LjY1NCAyMi44OTYgMTUuOTg2IDI0LjY1NCAxNiAyNC42NSAxNiAyMS40MzRcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYmViZWJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE1Ljk4OSAxMy40MDcgMTUuOTg5IDE2LjQ5OCAxOS43OTUgMTYuNDk4IDE5LjQzNyAyMC41MDcgMTUuOTg5IDIxLjQzNyAxNS45ODkgMjQuNjUzIDIyLjMyNiAyMi44OTYgMjIuMzcyIDIyLjM3NCAyMy4wOTggMTQuMjM3IDIzLjE3NCAxMy40MDcgMjIuMzQxIDEzLjQwNyAxNS45ODkgMTMuNDA3XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNS45ODkgNy4xNTEgMTUuOTg5IDkuMDcxIDE1Ljk4OSAxMC4yMzUgMTUuOTg5IDEwLjI0MiAyMy40NDUgMTAuMjQyIDIzLjQ0NSAxMC4yNDIgMjMuNDU1IDEwLjI0MiAyMy41MTcgOS41NDggMjMuNjU4IDcuOTgxIDIzLjczMiA3LjE1MSAxNS45ODkgNy4xNTFcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0fSxcblx0XCJIVFRQXCI6IHtcblx0XHRjb2xvdXI6IFwiIzNiNjFhNlwiLFxuXHRcdGljb246IFwiPGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJhXFxcIiBjeD1cXFwiMTIuMjc4XFxcIiBjeT1cXFwiMjQuNTU3XFxcIiByPVxcXCIxOC4zNzFcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMSwgMCwgMCwgLTEsIC0wLjAwMSwgMzQuMDAxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2QzZTlmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4xNTVcXFwiIHN0b3AtY29sb3I9XFxcIiNkM2U5ZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzVcXFwiIHN0b3AtY29sb3I9XFxcIiM0MDc0YWVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMzNjQ4NmNcXFwiLz48L3JhZGlhbEdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiYlxcXCIgY3g9XFxcIjEwLjY1N1xcXCIgY3k9XFxcIjI2Ljc0NlxcXCIgcj1cXFwiMjYuNjZcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMSwgMCwgMCwgLTEsIC0wLjAwMSwgMzQuMDAxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIgc3RvcC1vcGFjaXR5PVxcXCIwLjE2NVxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJjXFxcIiBjeD1cXFwiLTQ1LjA1XFxcIiBjeT1cXFwiOS4yODVcXFwiIHI9XFxcIjQuMTE1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0yMS45NzEgNDEuOTQyKSByb3RhdGUoMTQzLjczNClcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiIHN0b3Atb3BhY2l0eT1cXFwiMFxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJkXFxcIiBjeD1cXFwiLTQxLjQ1NlxcXCIgY3k9XFxcIjMyLjE1NFxcXCIgcj1cXFwiNC4xMTVcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMy41NzEgODcuMDc1KSByb3RhdGUoMTQzLjczNCkgc2NhbGUoMS4yOTcpXFxcIiB4bGluazpocmVmPVxcXCIjY1xcXCIvPjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiZVxcXCIgY3g9XFxcIi00OC40ODVcXFwiIGN5PVxcXCIxMy4yMzlcXFwiIHI9XFxcIjQuMTE1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0yMy4wODQgNTUuNDEzKSByb3RhdGUoMTQzLjczNClcXFwiIHhsaW5rOmhyZWY9XFxcIiNjXFxcIi8+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJmXFxcIiBjeD1cXFwiLTQwLjg4M1xcXCIgY3k9XFxcIjE2LjAzNlxcXCIgcj1cXFwiNC4xMTVcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoLTAuODcsIDAuNjM5LCAtMC42MzgsIC0wLjg3LCAtOS4zNTEsIDQ3LjcwNilcXFwiIHhsaW5rOmhyZWY9XFxcIiNjXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJnXFxcIiB4MT1cXFwiLTY2LjUwMlxcXCIgeTE9XFxcIjIuMjE5XFxcIiB4Mj1cXFwiLTY0LjYyNlxcXCIgeTI9XFxcIjYuNzQ5XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuOTM5LCAtMC44NzksIC0wLjY4MywgLTAuNzMsIDg0LjgxLCAtMzMuNjI4KVxcXCIgeGxpbms6aHJlZj1cXFwiI2NcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImhcXFwiIHgxPVxcXCItMjYuNzkxXFxcIiB5MT1cXFwiMzkuMTU5XFxcIiB4Mj1cXFwiLTI0Ljk5OVxcXCIgeTI9XFxcIjQ0LjY4M1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLjEzMSwgMC42MTMsIDAuNDc3LCAtMC44NzksIDIxLjY0OCwgNjkuMDcxKVxcXCIgeGxpbms6aHJlZj1cXFwiI2NcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImlcXFwiIHgxPVxcXCItNjMuMzg0XFxcIiB5MT1cXFwiOC4xNzdcXFwiIHgyPVxcXCItNjMuNTdcXFwiIHkyPVxcXCI0LjY5XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuOTE4LCAtMC44NTksIC0wLjY2OCwgLTAuNzEzLCA3Ny44NTcsIC0zNi40OTMpXFxcIiB4bGluazpocmVmPVxcXCIjY1xcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwialxcXCIgeDE9XFxcIi05OS4yNTlcXFwiIHkxPVxcXCI4OS41NDVcXFwiIHgyPVxcXCItOTguODI1XFxcIiB5Mj1cXFwiOTMuMDIzXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KC0xLjI4LCAtMC4xMjYsIC0wLjA5OCwgMC45OTUsIC0xMDEuNjM3LCAtOTMuMDE1KVxcXCIgeGxpbms6aHJlZj1cXFwiI2NcXFwiLz48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImtcXFwiIGN4PVxcXCItMjAuNzEyXFxcIiBjeT1cXFwiNTcuNjFcXFwiIHI9XFxcIjIuODM2XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAsIC0wLjg0MywgLTAuNzIxLCAwLCAyNi42MjUsIC0yMS42OTYpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNzI5ZmNmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjM2I2MWE2XFxcIi8+PC9yYWRpYWxHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImxcXFwiIGN4PVxcXCItMjAuNzEyXFxcIiBjeT1cXFwiMzkuODU4XFxcIiByPVxcXCIyLjgzNlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgyNi42MjUgNjMuMDk2KSByb3RhdGUoOTApIHNjYWxlKDAuODQzIDAuNzIxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzcyOWZjZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzUwOWUyZlxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfaHR0cDwvdGl0bGU+PHBhdGggZD1cXFwiTTI4LjAyNiwxNC4yQTExLjg3NywxMS44NzcsMCwxLDEsMTYuMTQ5LDIuMzI1LDExLjg3OCwxMS44NzgsMCwwLDEsMjguMDI2LDE0LjJaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTE2LjE0OSwyNi4zODZBMTIuMTgzLDEyLjE4MywwLDEsMSwyOC4zMzMsMTQuMiwxMi4yLDEyLjIsMCwwLDEsMTYuMTQ5LDI2LjM4NlptMC0yMy43NTRBMTEuNTcxLDExLjU3MSwwLDEsMCwyNy43MiwxNC4yLDExLjU4NCwxMS41ODQsMCwwLDAsMTYuMTQ5LDIuNjMyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzM5Mzk2Y1xcXCIvPjxwYXRoIGQ9XFxcIk0yNy42OTMsMTIuNDI0aDBsLS4zMjguMzcxYTcsNywwLDAsMC0uNjU2LS42NDRsLS41LjA3NC0uNDYtLjUxOXYuNjQzbC4zOTQuMy4yNjIuMy4zNS0uNGMuMDg4LjE2NS4xNzUuMzMuMjYzLjV2LjQ5NWwtLjM5NC40NDUtLjcyMi41LS41NDYuNTQ1LS4zNS0uNC4xNzUtLjQ0NS0uMzUtLjQtLjU5MS0xLjI2Mi0uNS0uNTY5TDIzLjYsMTIuMWwuMi43MTguMzcxLjQyMWExNy4wNjksMTcuMDY5LDAsMCwwLC43LDEuNzgzLDkuOTc5LDkuOTc5LDAsMCwwLDEuMjY4LS4xdi4zNDdsLS41MjUsMS4yODctLjQ4MS41NDQtLjM5NC44NDNWMTkuMzNsLjEzMi41NDUtLjIxOS4yNDctLjQ4Mi4zLS41LjQyMS40MTYuNDctLjU2OS41LjEwOS4zMjEtLjg1My45NjZIMjIuMmwtLjQ4MS4zaC0uMzA3di0uNGwtLjEzLS43OTNjLS4xNjktLjUtLjM0Ni0uOTkxLS41MjUtMS40ODQsMC0uMzY0LjAyMi0uNzI1LjA0NC0xLjA4OWwuMjE5LS40OTUtLjMwNy0uNTk1LjAyMi0uODE3LS40MTYtLjQ3LjIwOC0uNjgtLjMzOC0uMzg0SDE5LjZsLS4yLS4yMjMtLjU5MS4zNzItLjI0LS4yNzMtLjU0Ny40N0wxNi45MTEsMTUuMjdsLS40MzctMS4wNC4zOTQtLjU5My0uMjE5LS4yNDcuNDgxLTEuMTM5Yy4zOTUtLjQ5MS44MDctLjk2MywxLjIyNS0xLjQzNmwuNzQ0LS4yLjgzMS0uMS41NjkuMTQ5LjgwOS44MTYuMjg0LS4zMjEuMzkzLS4wNDkuNzQ0LjI0N0gyMy4zbC4zOTQtLjM0Ny4xNzUtLjI0Ny0uMzk0LS4yNDctLjY1Ni0uMDQ5YTYuNiw2LjYsMCwwLDAtLjU2OC0uNzQzbC0uMjE5LjEtLjA4OC42NDQtLjM5NC0uNDQ1LS4wODctLjUtLjQzNy0uMzQ2aC0uMTc2bC40MzguNDk1LS4xNzUuNDQ1LS4zNS4xLjIxOS0uNDQ1LS4zOTQtLjItLjM0OS0uNC0uNjU3LjE0OC0uMDg3LjItLjM5NC4yNDgtLjIxOS41NDUtLjU0Ni4yNzItLjI0MS0uMjcySDE3LjgzVjkuNDI4bC41NjktLjNoLjQzN2wtLjA4OC0uMzQ2TDE4LjQsOC40MzhsLjU5LS4xMjQuMzI4LS4zNzEuMjYyLS40NDZoLjQ4MmwtLjEzMi0uMzQ2LjMwNy0uMnYuNGwuNjU2LjE0OC42NTYtLjU0NC4wNDQtLjI0OC41NjgtLjRhNC4zNTMsNC4zNTMsMCwwLDAtLjYxMi4xVjUuOTYzbC4yMTktLjVoLS4yMTlsLS40OC40NDUtLjEzMi4yNDguMTMyLjM0Ny0uMjE5LjU5My0uMzUtLjItLjMwNi0uMzQ2LS40ODIuMzQ2LS4xNzUtLjc5Mi44MzEtLjU0NHYtLjNsLjUyNS0uMzQ2LjgzMS0uMi41NjkuMiwxLjA0OS4yLS4yNjIuM0gyMi41MWwuNTY5LjU5NC40MzctLjQ5NS4xMzMtLjIxOGExNS41MywxNS41MywwLDAsMSwyLjYzNSwzLjE0N0ExMS40NTIsMTEuNDUyLDAsMCwxLDI3LjY5MywxMi40MjRaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eTowLjcxMzQ1MDMxMjYxNDQ0MDlcXFwiLz48cGF0aCBkPVxcXCJNMTYuODYxLDUuNTE3bC0uMDQ0LjMuMzA3LjIuNTI0LS4zNDYtLjI2Mi0uMy0uMzUuMi0uMTc0LS4wNVxcXCIgc3R5bGU9XFxcImZpbGw6IzIwNGE4NztmaWxsLW9wYWNpdHk6MC43MTM0NTAzMTI2MTQ0NDA5XFxcIi8+PHBhdGggZD1cXFwiTTE3LjM0MywzLjQ4OGwtMS4xMzgtLjQ0Ni0xLjMxMi4xNDgtMS42MTkuNDQ1LS4zMDYuMywxLjAwNi42OTN2LjRsLS4zOTQuNC41MjUsMS4wNC4zNDktLjIuNDM4LS42OTNhMTUuMDUzLDE1LjA1MywwLDAsMCwxLjkyNC0uNzQzbC41MjUtMS4zMzdcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMDRhODc7ZmlsbC1vcGFjaXR5OjAuNzEzNDUwMzEyNjE0NDQwOVxcXCIvPjxwYXRoIGQ9XFxcIk0xOC41MjQsNy42NDcsMTguMzQ5LDcuMmwtLjMwNy4xLjA4OC41NDQuMzk0LS4yXFxcIiBzdHlsZT1cXFwiZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eTowLjcxMzQ1MDMxMjYxNDQ0MDlcXFwiLz48cGF0aCBkPVxcXCJNMTguNyw3LjU0N2wtLjA4OC41OTUuNDgxLS4xLjM1LS4zNDYtLjMwNi0uM2MtLjEtLjI3NC0uMjIxLS41MjktLjM1LS43OTJoLS4yNjJ2LjNsLjE3NC4ydi40NDVcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMDRhODc7ZmlsbC1vcGFjaXR5OjAuNzEzNDUwMzEyNjE0NDQwOVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4yMjUsMTYuOTUzbC0uMzUtLjY5My0uNjU2LS4xNDgtLjM1LS45NC0uODc1LjEtLjc0My0uNTQ0LS43ODguNjkzdi4xMDlhMywzLDAsMCwxLS43NDMtLjIwOWwtLjE3NS0uNDk1VjE0LjI4bC0uNTI1LjA0OXEuMDY2LS41Mi4xMzEtMS4wMzlINi44NDVsLS4zMDYuNC0uMzA2LjE0OEw1LjgsMTMuNTg3bC0uMDQ0LS41NDUuMDg4LS41OTQuNjU2LS40OTVINy4wMmwuMDg3LS4zLjY1Ni4xNDguNDgxLjU5NS4wODgtLjk5MS44MzEtLjY5My4zMDYtLjc0My42MTItLjI0Ny4zNS0uNDk1Ljc4Ny0uMTQ5LjM5NC0uNTkzSDEwLjQzMmwuNzQ0LS4zNDdIMTEuN2wuNzQ0LS4yNDguMDg4LS4zLS4yNjMtLjI0OC0uMzA2LS4xLjA4OC0uMy0uMjE5LS40NDUtLjUyNS4yLjA4OC0uNC0uNjEyLS4zNDdMMTAuMyw2LjhsLjA0NC4zLS40ODEuMi0uMzA2LjY0My0uMTMxLS41OTRMOC41OTQsN2wtLjEzMS0uNDQ1LDEuMDk0LS42NDQuNDgxLS40NDUuMDQ0LS41NDQtLjI2Mi0uMTQ5LS4zNS0uMDUtLjIxOS41NDVzLS4zNjYuMDcyLS40Ni4wOTVBMTIuNSwxMi41LDAsMCwwLDQuNiwxMy4zNzFhNi43ODksNi43ODksMCwwLDAsLjQwOS43MTFsLjkxOC41NDQuOTE4LjI0OC4zOTQuNS42MTIuNDQ1LjM1LS4wNDkuMjYyLjExOHYuMDhsLS4zNS45NC0uMjYzLjQuMDg4LjItLjIxOS43NDIuNzg3LDEuNDM2Ljc4Ny42OTMuMzUuNDk1TDkuNiwyMS45bC4yNjMuNTkzTDkuNiwyMy42MzdzLS4wMjEtLjAwNy4wMTMuMTA3YTUuMjc4LDUuMjc4LDAsMCwwLDEuNDg4LjgwOWwuMTYxLS4xMjMtLjA4Ny0uMjQ3LjM1LS4zNDcuMTMxLS4zNDcuNTY5LS4yLjQzNy0xLjA4OS0uMTMxLS4zLjMwNi0uNDQ1LjY1Ni0uMTQ5LjM1LS43OTItLjA4OC0uOTkuNTI1LS43NDMuMDg4LS43NDNjLS43MTgtLjM1Ni0xLjQzLS43MjMtMi4xNDMtMS4wODlcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMDRhODc7ZmlsbC1vcGFjaXR5OjAuNzEzNDUwMzEyNjE0NDQwOVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS4yNjMsNS43MTVsLjQzNy4zaC4zNVY1LjY2NmwtLjQzNy0uMi0uMzUuMjQ3XFxcIiBzdHlsZT1cXFwiZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eTowLjcxMzQ1MDMxMjYxNDQ0MDlcXFwiLz48cGF0aCBkPVxcXCJNMTAuMTI2LDUuMzE5bC0uMjE5LjU0NGguNDM4bC4yMTktLjVjLjE4OS0uMTMzLjM3Ni0uMjY4LjU2OC0uNGwuNDM4LjE0OS44NzUuNTk0LjQzOC0uNC0uNDgyLS4yLS4yMTktLjQ0Ni0uODMxLS4xLS4wNDQtLjI0OC0uMzk0LjEtLjE3NS4zNDYtLjIxOS0uNDQ2LS4wODcuMi4wNDQuNS0uMzUuM1xcXCIgc3R5bGU9XFxcImZpbGw6IzIwNGE4NztmaWxsLW9wYWNpdHk6MC43MTM0NTAzMTI2MTQ0NDA5XFxcIi8+PHBhdGggZD1cXFwiTTExLjcsNC4wODFsLjIxOS0uMi40MzgtLjFhNi45LDYuOSwwLDAsMSwuOTE4LS4zNDdsLS4xNzQtLjMtLjU2NS4wODEtLjI2Ny4yNjYtLjQ0LjA2NC0uMzkxLjE4NC0uMTkuMDkyLS4xMTYuMTU1LjU2OC4xXFxcIiBzdHlsZT1cXFwiZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eTowLjcxMzQ1MDMxMjYxNDQ0MDlcXFwiLz48cGF0aCBkPVxcXCJNMTIuNDQ0LDguNzg1bC4yNjMtLjQtLjM5NC0uMy4xMzEuNjkzXFxcIiBzdHlsZT1cXFwiZmlsbDojMjA0YTg3O2ZpbGwtb3BhY2l0eTowLjcxMzQ1MDMxMjYxNDQ0MDlcXFwiLz48cGF0aCBkPVxcXCJNMTYuMTQ5LDI1Ljc4M0ExMS41OCwxMS41OCwwLDEsMSwyNy43MjksMTQuMiwxMS41OTMsMTEuNTkzLDAsMCwxLDE2LjE0OSwyNS43ODNabTAtMjIuNTQ4QTEwLjk2OCwxMC45NjgsMCwxLDAsMjcuMTE3LDE0LjIsMTAuOTgsMTAuOTgsMCwwLDAsMTYuMTQ5LDMuMjM1WlxcXCIgc3R5bGU9XFxcIm9wYWNpdHk6MC4zOTU2MDQ0MDE4MjY4NTg1O2lzb2xhdGlvbjppc29sYXRlO2ZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk01LjU0MSwxMC4yNDFhNC4xMTUsNC4xMTUsMCwxLDAsNi42MzYtNC44NjZoMEE0LjExNSw0LjExNSwwLDAsMCw1LjU0LDEwLjI0WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPjxwYXRoIGQ9XFxcIk03LjgzNiw4LjU1OGExLjI2OCwxLjI2OCwwLDEsMCwyLjA0Ni0xLjVoMGExLjI2OCwxLjI2OCwwLDAsMC0yLjA0NiwxLjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTE3Ljk1MiwyNC44YTUuMzM3LDUuMzM3LDAsMSwwLDguNjA3LTYuMzEydjBBNS4zMzcsNS4zMzcsMCwwLDAsMTcuOTUsMjQuOFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMjAuOTI4LDIyLjYxNmExLjY0NSwxLjY0NSwwLDEsMCwyLjY1My0xLjk0NmgwYTEuNjQ1LDEuNjQ1LDAsMCwwLTIuNjUzLDEuOTQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk00Ljg1OSwxOC40OTNBNC4xMTUsNC4xMTUsMCwxLDAsMTEuNSwxMy42MjZoMGE0LjExNSw0LjExNSwwLDAsMC02LjYzNiw0Ljg2NlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZSlcXFwiLz48cGF0aCBkPVxcXCJNNy4xNTQsMTYuODA5YTEuMjY4LDEuMjY4LDAsMSwwLDIuMDQ2LTEuNWgwYTEuMjY4LDEuMjY4LDAsMCwwLTIuMDQ2LDEuNVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTIuNDA4LDEwLjI2OUE0LjQ0MSw0LjQ0MSwwLDEsMCwxOS41Nyw1LjAxNmgwYTQuNDQxLDQuNDQxLDAsMSwwLTcuMTYyLDUuMjUzWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNmKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNC44ODUsOC40NTJhMS4zNjksMS4zNjksMCwxLDAsMi4yMDgtMS42MTloMGExLjM2OSwxLjM2OSwwLDEsMC0yLjIwOCwxLjYxOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTIuNjgsMjYuMjM4YTMuODMsMy44MywwLDAsMS0yLjkwOS0xLjA4N2MtMS4xMzMtMS4yMS0xLjItMy4yNTUtLjItNS43NTdhMjEuNTQyLDIxLjU0MiwwLDAsMSw1LjMwNy03LjMyNkMyMC4wNjQsNy4yMTUsMjUuOTQ1LDUuMzU2LDI4LjI3LDcuODM5YzEuMTMzLDEuMjExLDEuMiwzLjI1NS4yLDUuNzU3YTIxLjU1MywyMS41NTMsMCwwLDEtNS4zMDgsNy4zMjZBMjEuNTUxLDIxLjU1MSwwLDAsMSwxNS41LDI1LjczMyw5LjIyOSw5LjIyOSwwLDAsMSwxMi42OCwyNi4yMzhaTTI1LjM0Miw3LjI4Yy0yLjcsMC02LjYsMS45MDgtMTAuMSw1LjE4M0EyMSwyMSwwLDAsMCwxMC4wNzEsMTkuNmMtLjkyMSwyLjMtLjg4Nyw0LjEzOC4wOTQsNS4xODdzMi44MTcsMS4yLDUuMTY5LjQzN2EyMSwyMSwwLDAsMCw3LjQ2LTQuNjkyLDIxLDIxLDAsMCwwLDUuMTc1LTcuMTMyYy45MjEtMi4zLjg4OC00LjEzOC0uMDk1LTUuMTg3QTMuMzQsMy4zNCwwLDAsMCwyNS4zNDIsNy4yOFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZylcXFwiLz48cGF0aCBkPVxcXCJNMjEuNjgxLDIyLjA5NGEyMC42MzMsMjAuNjMzLDAsMCwxLTkuMzM5LTIuNzU5QzYuMSwxNS45NSwyLjQ3MywxMC45NTcsNC4wOTQsNy45NjhjLjc5LTEuNDU4LDIuNy0yLjE3NSw1LjQtMi4wMTJBMjEuNTQyLDIxLjU0MiwwLDAsMSwxOC4xMiw4LjY3NGEyMS41NDUsMjEuNTQ1LDAsMCwxLDYuOTg3LDUuNzQ2YzEuNiwyLjE2NywyLjA1MSw0LjE2MywxLjI2MSw1LjYyMUMyNS42MjIsMjEuNDE2LDIzLjkxNSwyMi4wOTQsMjEuNjgxLDIyLjA5NFpNOC43NTksNi40NzRjLTIuMSwwLTMuNTcyLjYxMi00LjE5LDEuNzUxQzMuMTE3LDEwLjksNi43MiwxNS42NzQsMTIuNiwxOC44NnMxMS44NDMsMy42LDEzLjI5NC45MjRjLjY4NS0xLjI2My4yNTEtMy4wNTQtMS4yMi01LjA0MmEyMSwyMSwwLDAsMC02LjgxLTUuNTkzQTIxLDIxLDAsMCwwLDkuNDU5LDYuNVE5LjEsNi40NzQsOC43NTksNi40NzRaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2gpXFxcIi8+PHBhdGggZD1cXFwiTTEwLDI0LjA3OGEzLjc1NywzLjc1NywwLDAsMS0yLjg1MS0xLjA2NWMtMS4xMS0xLjE4Ny0xLjE4MS0zLjE4OS0uMi01LjYzOWEyMS4wNjIsMjEuMDYyLDAsMCwxLDUuMTg5LTcuMTYzYzUuMDczLTQuNzQ3LDEwLjgzLTYuNTYzLDEzLjEtNC4xMzJoMGMyLjI3NSwyLjQzMS4wODMsOC4wNTMtNC45OSwxMi44YTIxLjA1OSwyMS4wNTksMCwwLDEtNy40OTEsNC43QTkuMDI0LDkuMDI0LDAsMCwxLDEwLDI0LjA3OFpNMjIuMzczLDUuNTUzYy0yLjYzLDAtNi40MzksMS44NjQtOS44NTYsNS4wNjJBMjAuNSwyMC41LDAsMCwwLDcuNDYzLDE3LjU4Yy0uOSwyLjIzOS0uODY2LDQuMDM0LjA5LDUuMDU1czIuNzQ1LDEuMTcyLDUuMDM4LjQyNGEyMC41MTMsMjAuNTEzLDAsMCwwLDcuMjg0LTQuNTgyYzQuNzY2LTQuNDYsNi45OTQtOS44NTMsNC45NjUtMTIuMDJoMEEzLjI1NiwzLjI1NiwwLDAsMCwyMi4zNzMsNS41NTNaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2kpXFxcIi8+PHBhdGggZD1cXFwiTTE3LjUxMiwxOS40MTNjLS44NiwwLTEuNzQ4LS4wNDMtMi42NTktLjEzM0M3Ljc4NCwxOC41ODQsMi41MDcsMTUuMzg4LDIuODQsMTJoMGMuMzMzLTMuMzgzLDYuMTMzLTUuNDksMTMuMi00Ljc5MXMxMi4zNDUsMy44OTIsMTIuMDEyLDcuMjc1QzI3Ljc2MywxNy40MzYsMjMuMzI0LDE5LjQxMywxNy41MTIsMTkuNDEzWk0zLjM3OCwxMi4wNTdjLS4zLDMuMDMxLDQuODczLDYuMDMsMTEuNTI4LDYuNjg2czEyLjMxMi0xLjI3NywxMi42MTEtNC4zMDhTMjIuNjQ0LDguNDA2LDE1Ljk4OCw3Ljc1LDMuNjc3LDkuMDI3LDMuMzc4LDEyLjA1N1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjailcXFwiLz48cGF0aCBkPVxcXCJNNi4yNTEsMjkuOTY2aDYuNjc0VjIwLjgwOWgyLjk4MUw5LjU0OCwxMS40MzQsMy4yOTUsMjAuNzgybDIuOTU4LjAzMVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaylcXFwiLz48cGF0aCBkPVxcXCJNMTIuOTI0LDMwLjA0NUg2LjI1MWEuMDQ5LjA0OSwwLDAsMS0uMDM5LS4wMjNjLS4wMS0uMDE1LS4wMTYtMy4xMzUtLjAxNi0zLjE1NmwwLTUuOTc1LTIuOS0uMDNhLjA2LjA2LDAsMCwxLS4wNTEtLjA0OC4xLjEsMCwwLDEsLjAxMS0uMDg1TDkuNTA4LDExLjM4YS4wNTYuMDU2LDAsMCwxLC4wNDEtLjAyNS4wNS4wNSwwLDAsMSwuMDQuMDI0bDYuMzU3LDkuMzc1YS4xLjEsMCwwLDEsLjAxMS4wODYuMDU5LjA1OSwwLDAsMS0uMDUxLjA0OEgxMi45OHY5LjA3OEMxMi45OCwzMC4wMSwxMi45NTUsMzAuMDQ1LDEyLjkyNCwzMC4wNDVabS02LjYxOC0uMTU4aDYuNTYyVjIwLjgwOWMwLS4wNDQuMDI1LS4wNzkuMDU2LS4wNzloMi44NUw5LjU0OSwxMS41NDksMy40MjQsMjAuN2wyLjgzLjAzYy4wMzEsMCwuMDU1LjAzNi4wNTUuMDc5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzE4Mzg2OFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4wNTMsMjAuNTg3bC0yLjk1OC4wMzEsNi4yNTQsOS4zNDgsNi4zNTctOS4zNzVIMjUuNzI0VjExLjQzNEgxOS4wNTFaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2wpXFxcIi8+PHBhdGggZD1cXFwiTTI1Ljc4LDExLjQzNHY5LjA3OGgyLjkyNWEuMDU5LjA1OSwwLDAsMSwuMDUxLjA0OC4xLjEsMCwwLDEtLjAxMS4wODZsLTYuMzU3LDkuMzc1YS4wNS4wNSwwLDAsMS0uMDQuMDI0LjA1Ni4wNTYsMCwwLDEtLjA0MS0uMDI1bC02LjI1NC05LjM0OGEuMS4xLDAsMCwxLS4wMTEtLjA4NS4wNi4wNiwwLDAsMSwuMDUxLS4wNDhsMi45LS4wMywwLTUuOTc1YzAtLjAyMS4wMDYtMy4xNDEuMDE2LTMuMTU2YS4wNDkuMDQ5LDAsMCwxLC4wMzktLjAyM2g2LjY3NEMyNS43NTUsMTEuMzU1LDI1Ljc4LDExLjM5LDI1Ljc4LDExLjQzNFptLTYuNjcyLDkuMTUzYzAsLjA0My0uMDI1LjA3OS0uMDU1LjA3OWwtMi44My4wMyw2LjEyNSw5LjE1Niw2LjIyNi05LjE4MWgtMi44NWMtLjAzMSwwLS4wNTYtLjAzNS0uMDU2LS4wNzlWMTEuNTEzSDE5LjEwN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMxODM4NjhcXFwiLz5cIixcblx0fSxcblx0XCJJZHJpc1wiOiB7XG5cdFx0Y29sb3VyOiBcIiM4YTA4MTlcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xMy4zNzYsNi4yYzMuNiwxLjEsNC41LDIsNS44LDUuMi0uMy00LTEuOS01LjYtNS44LTUuMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4YTA4MTlcXFwiLz48cGF0aCBkPVxcXCJNOC4zNzYsMTIuNGMyLjMuNyw1LDEuMyw2LDUuNy40LTUuNS0yLjItNS44LTYtNS43WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhhMDgxOVxcXCIvPjxwYXRoIGQ9XFxcIk05Ljk3Niw4LjhjMy41LjcsNS43LDEuNyw3LDYuMi4zLTUuOC0yLjktNi40LTctNi4yWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhhMDgxOVxcXCIvPjxwYXRoIGQ9XFxcIk0xNC41NzYsMmMxOS4xLDEyLjQtNC4yLDEyLjcuOCwyNy4xbDMsLjljLTguMy0xMS4yLDE4LjQtMTctMy44LTI4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhhMDgxOVxcXCIvPlwiLFxuXHR9LFxuXHRcIkluaVwiOiB7XG5cdFx0Y29sb3VyOiBcIiM5OWI4YzRcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yMy4yNjUsMjQuMzgxbC45LS44OTRjNC4xNjQuMTM2LDQuMjI4LS4wMSw0LjQxMS0uNDM4bDEuMTQ0LTIuNzg1TDI5LjgwNSwyMGwtLjA5My0uMjMxYy0uMDQ5LS4xMjItLjItLjQ4Ni0yLjgtMi45NjVWMTUuNWMzLTIuODksMi45MzYtMy4wMzgsMi43NjUtMy40NjFMMjguNTM4LDkuMjI1Yy0uMTcxLS40MjItLjIzNi0uNTg3LTQuMzctLjQ3NGwtLjktLjkzYTIwLjE2NiwyMC4xNjYsMCwwLDAtLjE0MS00LjEwNmwtLjExNi0uMjYzLTIuOTc0LTEuM2MtLjQzOC0uMi0uNTkyLS4yNzItMy40LDIuNzg2bC0xLjI2Mi0uMDE5Yy0yLjg5MS0zLjA4Ni0zLjAyOC0zLjAzLTMuNDYxLTIuODU1TDkuMTQ5LDMuMTgyYy0uNDMzLjE3NS0uNTg2LjIzNy0uNDE4LDQuNDM3bC0uODkzLjg5Yy00LjE2Mi0uMTM2LTQuMjI2LjAxMi00LjQwNy40MzhMMi4yODUsMTEuNzMzLDIuMTk1LDEybC4wOTQuMjMyYy4wNDkuMTIuMTk0LjQ4LDIuOCwyLjk2MmwwLDEuM2MtMywyLjg5LTIuOTM1LDMuMDM4LTIuNzYzLDMuNDYybDEuMTM4LDIuODE3Yy4xNzQuNDMxLjIzNi41ODQsNC4zNjkuNDc2bC45LjkzNWEyMC4yNDMsMjAuMjQzLDAsMCwwLC4xMzcsNC4xbC4xMTYuMjY1LDIuOTkzLDEuMzA4Yy40MzUuMTgyLjU4Ni4yNDcsMy4zODYtMi44bDEuMjYyLjAxNmMyLjg5NSwzLjA5LDMuMDQzLDMuMDMsMy40NjYsMi44NTlsMi43NTktMS4xMTVDMjMuMjg4LDI4LjY0NCwyMy40NCwyOC41ODMsMjMuMjY1LDI0LjM4MVpNMTEuNDA3LDE3Ljg1N2E0Ljk1Nyw0Ljk1NywwLDEsMSw2LjQ4OCwyLjgyNEE1LjAxNCw1LjAxNCwwLDAsMSwxMS40MDcsMTcuODU3WlxcXCIgc3R5bGU9XFxcImZpbGw6Izk5YjhjNFxcXCIvPlwiLFxuXHR9LFxuXHRcIklvXCI6IHtcblx0XHRjb2xvdXI6IFwiI2MyYzJjMlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIsMi44ODdINy4wNzVWNy41MUgyWm0uMDUyLDYuODNINy4wNFYyOC42MjZIMi4wNTJaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+PHBhdGggZD1cXFwiTTEzLjI3MSwyNi40NTRhOS43OTEsOS43OTEsMCwwLDEtMi42MTYtNy4xNzgsMTAuMTQ4LDEwLjE0OCwwLDAsMSwyLjYxNi03LjM0Myw5LjMyMSw5LjMyMSwwLDAsMSw3LjA0Ny0yLjcyLDkuMzQsOS4zNCwwLDAsMSw3LjA3NSwyLjcyQTEwLjE2OCwxMC4xNjgsMCwwLDEsMzAsMTkuMjc2YTkuODA5LDkuODA5LDAsMCwxLTIuNjA3LDcuMTc4LDkuNDU2LDkuNDU2LDAsMCwxLTcuMDc1LDIuNjU5QTkuNDM2LDkuNDM2LDAsMCwxLDEzLjI3MSwyNi40NTRabTEwLjQzNi0yLjk3MmE2LjcsNi43LDAsMCwwLDEuMTY2LTQuMjU4LDYuOTQzLDYuOTQzLDAsMCwwLTEuMTY2LTQuMzU0LDQuMDQ3LDQuMDQ3LDAsMCwwLTMuMzg5LTEuNDg2LDQuMDIyLDQuMDIyLDAsMCwwLTMuMzgsMS40ODYsNi45OTEsNi45OTEsMCwwLDAtMS4xNTYsNC4zNTQsNi43NDQsNi43NDQsMCwwLDAsMS4xNTYsNC4yNTgsNC4wNTMsNC4wNTMsMCwwLDAsMy4zOCwxLjQ2QTQuMDc4LDQuMDc4LDAsMCwwLDIzLjcwNywyMy40ODJaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+XCIsXG5cdH0sXG5cdFwiSmF2YVwiOiB7XG5cdFx0Y29sb3VyOiBcIiM1MzgyYTFcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xMi4zMjUsMjMuNjU0cy0xLjA3LjYyMi43NjEuODMzYTE2LjAyMywxNi4wMjMsMCwwLDAsNS44LS4yNDYsMTAuMDg4LDEwLjA4OCwwLDAsMCwxLjU0MS43NTJjLTUuNDgxLDIuMzQ5LTEyLjQwNS0uMTM2LTguMS0xLjMzOVxcXCIgc3R5bGU9XFxcImZpbGw6IzUzODJhMVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS42NTYsMjAuNTg4cy0xLjIuODg4LjYzMywxLjA3OGEyMi42MTgsMjIuNjE4LDAsMCwwLDcuNDgxLS4zNTksMy4zMiwzLjMyLDAsMCwwLDEuMTUyLjdjLTYuNjI3LDEuOTM4LTE0LjAwOS4xNTMtOS4yNjYtMS40MjFcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzgyYTFcXFwiLz48cGF0aCBkPVxcXCJNMTcuMywxNS4zODhhMi4wNTEsMi4wNTEsMCwwLDEtLjM1NSwyLjk1NHMzLjQyOS0xLjc3LDEuODU0LTMuOTg3Yy0xLjQ3MS0yLjA2Ny0yLjYtMy4wOTUsMy41MDgtNi42MzYsMCwwLTkuNTg2LDIuMzk0LTUuMDA3LDcuNjY5XFxcIiBzdHlsZT1cXFwiZmlsbDojNTM4MmExXFxcIi8+PHBhdGggZD1cXFwiTTI0LjU1MiwyNS45MjFzLjc5Mi42NTItLjg3MiwxLjE1N2MtMy4xNjQuOTU4LTEzLjE2OCwxLjI0OC0xNS45NDguMDM4LTEtLjQzNS44NzQtMS4wMzgsMS40NjQtMS4xNjRhMy44LDMuOCwwLDAsMSwuOTY2LS4xMDhjLTEuMTExLS43ODMtNy4xODEsMS41MzctMy4wODMsMi4yLDExLjE3NiwxLjgxMiwyMC4zNzItLjgxNiwxNy40NzMtMi4xMjRcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzgyYTFcXFwiLz48cGF0aCBkPVxcXCJNMTIuODQsMTcuNDEycy01LjA4OSwxLjIwOS0xLjgsMS42NDhhMzguMjI1LDM4LjIyNSwwLDAsMCw2LjczMS0uMDcyYzIuMTA2LS4xNzgsNC4yMjEtLjU1NSw0LjIyMS0uNTU1YTguOTM0LDguOTM0LDAsMCwwLTEuMjguNjg1Yy01LjE2OCwxLjM1OS0xNS4xNTEuNzI3LTEyLjI3Ny0uNjYzYTkuNjI5LDkuNjI5LDAsMCwxLDQuNDA3LTEuMDQyXFxcIiBzdHlsZT1cXFwiZmlsbDojNTM4MmExXFxcIi8+PHBhdGggZD1cXFwiTTIxLjk2OSwyMi41MTVjNS4yNTMtMi43MywyLjgyNC01LjM1MywxLjEyOS01YTMuOTMyLDMuOTMyLDAsMCwwLS42LjE2MS45NTcuOTU3LDAsMCwxLC40NDktLjM0NmMzLjM1NC0xLjE3OSw1LjkzMywzLjQ3OC0xLjA4Myw1LjMyMmEuNDU4LjQ1OCwwLDAsMCwuMTA2LS4xMzhcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzgyYTFcXFwiLz48cGF0aCBkPVxcXCJNMTguOCwyczIuOTA5LDIuOTEtMi43NTksNy4zODZjLTQuNTQ2LDMuNTktMS4wMzcsNS42MzcsMCw3Ljk3NS0yLjY1My0yLjM5NC00LjYtNC41LTMuMjk0LTYuNDYzQzE0LjY2NCw4LjAxOSwxOS45NzYsNi42MjMsMTguOCwyXFxcIiBzdHlsZT1cXFwiZmlsbDojNTM4MmExXFxcIi8+PHBhdGggZD1cXFwiTTEzLjM1NiwyOS45MTJjNS4wNDIuMzIzLDEyLjc4Ni0uMTc5LDEyLjk2OS0yLjU2NSwwLDAtLjM1My45LTQuMTY3LDEuNjIzYTQxLjQ1OCw0MS40NTgsMCwwLDEtMTIuNzYuMnMuNjQ1LjUzMywzLjk1OS43NDZcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzgyYTFcXFwiLz5cIixcblx0XHRpbmxpbmVDb21tZW50OiBbXG5cdFx0XHRcIi8vXCIsXG5cdFx0XSxcblx0fSxcblx0XCJKYXZhU2NyaXB0XCI6IHtcblx0XHRjb2xvdXI6IFwiI2Y1ZGUxOVwiLFxuXHRcdGljb246IFwiPHJlY3QgeD1cXFwiMlxcXCIgeT1cXFwiMlxcXCIgd2lkdGg9XFxcIjI4XFxcIiBoZWlnaHQ9XFxcIjI4XFxcIiBzdHlsZT1cXFwiZmlsbDojZjVkZTE5XFxcIi8+PHBhdGggZD1cXFwiTTIwLjgwOSwyMy44NzVhMi44NjYsMi44NjYsMCwwLDAsMi42LDEuNmMxLjA5LDAsMS43ODctLjU0NSwxLjc4Ny0xLjMsMC0uOS0uNzE2LTEuMjIyLTEuOTE2LTEuNzQ3bC0uNjU4LS4yODJjLTEuOS0uODA5LTMuMTYtMS44MjItMy4xNi0zLjk2NCwwLTEuOTczLDEuNS0zLjQ3NiwzLjg1My0zLjQ3NmEzLjg4OSwzLjg4OSwwLDAsMSwzLjc0MiwyLjEwN0wyNSwxOC4xMjhBMS43ODksMS43ODksMCwwLDAsMjMuMzExLDE3YTEuMTQ1LDEuMTQ1LDAsMCwwLTEuMjU5LDEuMTI4YzAsLjc4OS40ODksMS4xMDksMS42MTgsMS42bC42NTguMjgyYzIuMjM2Ljk1OSwzLjUsMS45MzYsMy41LDQuMTMzLDAsMi4zNjktMS44NjEsMy42NjctNC4zNiwzLjY2N2E1LjA1NSw1LjA1NSwwLDAsMS00Ljc5NS0yLjY5MVptLTkuMjk1LjIyOGMuNDEzLjczMy43ODksMS4zNTMsMS42OTMsMS4zNTMuODY0LDAsMS40MS0uMzM4LDEuNDEtMS42NTNWMTQuODU2aDIuNjMxdjguOTgyYzAsMi43MjQtMS42LDMuOTY0LTMuOTI5LDMuOTY0YTQuMDg1LDQuMDg1LDAsMCwxLTMuOTQ3LTIuNFpcXFwiLz5cIixcblx0XHRpbmxpbmVDb21tZW50OiBbXG5cdFx0XHRcIi8vXCIsXG5cdFx0XSxcblx0fSxcblx0XCJKU09OXCI6IHtcblx0XHRjb2xvdXI6IFwiI2Y1ZGUxOVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTQuMDE0LDE0Ljk3NmEyLjUxLDIuNTEsMCwwLDAsMS41NjctLjUxOEEyLjM3NywyLjM3NywwLDAsMCw2LjM4NiwxMy4xLDE1LjI2MSwxNS4yNjEsMCwwLDAsNi42LDEwLjE1NnEuMDEyLTIuMDg1LjA3NS0yLjc0N2E1LjIzNiw1LjIzNiwwLDAsMSwuNDE4LTEuNjg2LDMuMDI1LDMuMDI1LDAsMCwxLC43NTUtMS4wMThBMy4wNDYsMy4wNDYsMCwwLDEsOSw0LjEyNSw2Ljc2Miw2Ljc2MiwwLDAsMSwxMC41NDQsNGguN1Y1Ljk2aC0uMzg3YTIuMzM4LDIuMzM4LDAsMCwwLTEuNzIzLjQ2OEEzLjQsMy40LDAsMCwwLDguNzA5LDguNTJhMzYuMDU0LDM2LjA1NCwwLDAsMS0uMTM3LDQuMTMzLDQuNzM0LDQuNzM0LDAsMCwxLS43NjgsMi4wNkE0LjU2Nyw0LjU2NywwLDAsMSw2LjEsMTZhMy44MDksMy44MDksMCwwLDEsMS45OTIsMS43NTQsOC44NjEsOC44NjEsMCwwLDEsLjYxOCwzLjg2NXEwLDIuNDM1LjA1LDIuOUExLjc1NSwxLjc1NSwwLDAsMCw5LjI2NCwyNS43YTIuNjM5LDIuNjM5LDAsMCwwLDEuNTkyLjMzN2guMzg3VjI4aC0uN2E1LjY1NSw1LjY1NSwwLDAsMS0xLjc3My0uMiwyLjk3LDIuOTcsMCwwLDEtMS4zMjQtLjkzLDMuMzUzLDMuMzUzLDAsMCwxLS42ODEtMS42M0EyNC4xNzUsMjQuMTc1LDAsMCwxLDYuNiwyMi4wMDYsMTYuNDY5LDE2LjQ2OSwwLDAsMCw2LjM4NiwxOC45YTIuNDA4LDIuNDA4LDAsMCwwLS44MDUtMS4zNjEsMi40ODksMi40ODksMCwwLDAtMS41NjctLjUyNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmNWRlMTlcXFwiLz48cGF0aCBkPVxcXCJNMjcuOTg2LDE3LjAxMWEyLjQ4OSwyLjQ4OSwwLDAsMC0xLjU2Ny41MjQsMi40MDgsMi40MDgsMCwwLDAtLjgwNSwxLjM2MSwxNi40NjksMTYuNDY5LDAsMCwwLS4yMTIsMy4xMDksMjQuMTc1LDI0LjE3NSwwLDAsMS0uMTY5LDMuMjM0LDMuMzUzLDMuMzUzLDAsMCwxLS42ODEsMS42MywyLjk3LDIuOTcsMCwwLDEtMS4zMjQuOTMsNS42NTUsNS42NTUsMCwwLDEtMS43NzMuMmgtLjdWMjYuMDRoLjM4N2EyLjYzOSwyLjYzOSwwLDAsMCwxLjU5Mi0uMzM3LDEuNzU1LDEuNzU1LDAsMCwwLC41MDYtMS4xODZxLjA1LS40NjIuMDUtMi45YTguODYxLDguODYxLDAsMCwxLC42MTgtMy44NjVBMy44MDksMy44MDksMCwwLDEsMjUuOSwxNmE0LjU2Nyw0LjU2NywwLDAsMS0xLjctMS4yODYsNC43MzQsNC43MzQsMCwwLDEtLjc2OC0yLjA2LDM2LjA1NCwzNi4wNTQsMCwwLDEtLjEzNy00LjEzMywzLjQsMy40LDAsMCwwLS40MjUtMi4wOTIsMi4zMzgsMi4zMzgsMCwwLDAtMS43MjMtLjQ2OGgtLjM4N1Y0aC43QTYuNzYyLDYuNzYyLDAsMCwxLDIzLDQuMTI1YTMuMDQ2LDMuMDQ2LDAsMCwxLDEuMTQ5LjU4MSwzLjAyNSwzLjAyNSwwLDAsMSwuNzU1LDEuMDE4LDUuMjM2LDUuMjM2LDAsMCwxLC40MTgsMS42ODZxLjA2Mi42NjIuMDc1LDIuNzQ3YTE1LjI2MSwxNS4yNjEsMCwwLDAsLjIxMiwyLjk0NywyLjM3NywyLjM3NywwLDAsMCwuODA1LDEuMzU1LDIuNTEsMi41MSwwLDAsMCwxLjU2Ny41MThaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjVkZTE5XFxcIi8+XCIsXG5cdH0sXG5cdFwiSlNPTjVcIjoge1xuXHRcdGNvbG91cjogXCIjOTA5MDkwXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTIuODE1LDE1LjE2N2wuNjgtNS42NzZoNi40ODl2MmgtNC40TDE1LjMyOSwxMy43YTIuNCwyLjQsMCwwLDEsLjI1Mi0uMTIyLDIuOTYyLDIuOTYyLDAsMCwxLC4zNzQtLjEzLDIuOSwyLjksMCwwLDEsLjQ1OC0uMTA2LDIuODM0LDIuODM0LDAsMCwxLC41MTItLjA0NiwzLjk4MywzLjk4MywwLDAsMSwxLjQ2Ni4yNTIsMi43MzYsMi43MzYsMCwwLDEsMS4wNzYuNzIzLDMuMTY3LDMuMTY3LDAsMCwxLC42NjQsMS4xNjgsNSw1LDAsMCwxLC4yMjgsMS41ODgsNC4xNTcsNC4xNTcsMCwwLDEtLjIzNiwxLjM4NywzLjMwNywzLjMwNywwLDAsMS0xLjksMi4wMjksNC4zLDQuMywwLDAsMS0xLjcxNS4zMTIsNC43NSw0Ljc1LDAsMCwxLTEuNDU4LS4yMjgsNC4wNTQsNC4wNTQsMCwwLDEtMS4yNTItLjY1NiwzLjM1OSwzLjM1OSwwLDAsMS0uODc4LTEuMDQ2LDIuNzg3LDIuNzg3LDAsMCwxLS4zMi0xLjM4MkgxNS4xOGExLjQ1OCwxLjQ1OCwwLDAsMCwuMzkuOTcsMS4zODMsMS4zODMsMCwwLDAsMS41NTguMjA2LDEuMDg5LDEuMDg5LDAsMCwwLC40LS40MTIsMS43NDksMS43NDksMCwwLDAsLjIwNi0uNjE4LDQuMyw0LjMsMCwwLDAsLjA2Mi0uNzQsMi43MDksMi43MDksMCwwLDAtLjA5Mi0uNzQsMS41MDYsMS41MDYsMCwwLDAtLjI4Mi0uNTU4LDEuMjI5LDEuMjI5LDAsMCwwLS41LS4zNDksMS43OCwxLjc4LDAsMCwwLS43MTgtLjEzLDIuMTIxLDIuMTIxLDAsMCwwLS41LjA1NCwxLjgwNSwxLjgwNSwwLDAsMC0uMzgyLjEzOCwxLjMxOCwxLjMxOCwwLDAsMC0uMjc0LjE5LDEuMjgsMS4yOCwwLDAsMC0uMTkuMmwtMi4wNDgtLjQ4MlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk01Ljk4NSwyMy4zNDNhNC40NSw0LjQ1LDAsMCwxLTEuMzExLS41OCwzLjIsMy4yLDAsMCwxLS44NDgtLjgyNCwzLjAxMiwzLjAxMiwwLDAsMS0uNDU4LTEuMDA4LDQuODc5LDQuODc5LDAsMCwxLS4xMy0xLjE0M3YtMS41NWEyLjMsMi4zLDAsMCwwLS4wNzYtLjYxOCwxLjE4NCwxLjE4NCwwLDAsMC0uMjIyLS40NjYuOTY5Ljk2OSwwLDAsMC0uMzgyLS4zMDZBMS4zMjQsMS4zMjQsMCwwLDAsMiwxNi43NDRWMTUuMDEyYTEuMDc0LDEuMDc0LDAsMCwwLC45MzctLjQsMS44NDEsMS44NDEsMCwwLDAsLjMtMS4xdi0xLjU1YTQuODc5LDQuODc5LDAsMCwxLC4xMy0xLjE0MywzLjAzNywzLjAzNywwLDAsMSwuNDU4LTEuMDA4QTMuMTcsMy4xNywwLDAsMSw0LjY3MSw5YTQuNDgyLDQuNDgyLDAsMCwxLDEuMzExLS41OGwuNDgsMS4zNDRhMS4yMjIsMS4yMjIsMCwwLDAtLjQ4OC4zMjgsMS43NDIsMS43NDIsMCwwLDAtLjMwNi41LDIuNTI0LDIuNTI0LDAsMCwwLS4xNi42MzQsNS44MjcsNS44MjcsMCwwLDAtLjA0Ni43NHYxLjU1QTIuODQ0LDIuODQ0LDAsMCwxLDUuMTI2LDE0LjlhMi4zNywyLjM3LDAsMCwxLTEuMDc2Ljk4MywyLjM1NiwyLjM1NiwwLDAsMSwxLjA3Ni45OTIsMi44MDgsMi44MDgsMCwwLDEsLjMzNiwxLjM3NHYxLjU1YTUuODI3LDUuODI3LDAsMCwwLC4wNDYuNzQsMi41ODYsMi41ODYsMCwwLDAsLjE2LjYzNCwxLjY4NCwxLjY4NCwwLDAsMCwuMzA2LjVBMS4yMjIsMS4yMjIsMCwwLDAsNi40NjIsMjJjMC0uMDA1LS40NzcsMS4zNDQtLjQ3NywxLjM0NFxcXCIgc3R5bGU9XFxcImZpbGw6Izk5OVxcXCIvPjxwYXRoIGQ9XFxcIk04LjIxNSwxOS4zOTNhMS4yODksMS4yODksMCwwLDEsLjEtLjUxMiwxLjIxMiwxLjIxMiwwLDAsMSwuMjktLjQsMS4zNzMsMS4zNzMsMCwwLDEsLjQ1LS4yNzQsMS42MzcsMS42MzcsMCwwLDEsLjU4LS4xLDEuNTU1LDEuNTU1LDAsMCwxLC41NzIuMSwxLjI2OSwxLjI2OSwwLDAsMSwuNDUuMjc0LDEuMDc3LDEuMDc3LDAsMCwxLC4yOS40LDEuMjk0LDEuMjk0LDAsMCwxLDAsMS4wMjQsMS4xNTEsMS4xNTEsMCwwLDEtLjI5LjQxMiwxLjM4OCwxLjM4OCwwLDAsMS0uNDUuMjY4LDEuNjEzLDEuNjEzLDAsMCwxLS41NzIuMSwxLjU3OCwxLjU3OCwwLDAsMS0uNTgtLjEsMS40MDksMS40MDksMCwwLDEtLjQ1LS4yNjgsMS4yMjksMS4yMjksMCwwLDEtLjM5LS45MjRtMC02LjA4OGExLjI4OSwxLjI4OSwwLDAsMSwuMS0uNTEyLDEuMjEyLDEuMjEyLDAsMCwxLC4yOS0uNCwxLjM3MywxLjM3MywwLDAsMSwuNDUtLjI3NCwxLjYzNywxLjYzNywwLDAsMSwuNTgtLjEsMS41NTUsMS41NTUsMCwwLDEsLjU3Mi4xLDEuMjY5LDEuMjY5LDAsMCwxLC40NS4yNzQsMS4wNzcsMS4wNzcsMCwwLDEsLjI5LjQsMS4yOTQsMS4yOTQsMCwwLDEsMCwxLjAyNCwxLjE1MSwxLjE1MSwwLDAsMS0uMjkuNDEyLDEuMzg4LDEuMzg4LDAsMCwxLS40NS4yNjgsMS42MTMsMS42MTMsMCwwLDEtLjU3Mi4xLDEuNTc4LDEuNTc4LDAsMCwxLS41OC0uMSwxLjQwOSwxLjQwOSwwLDAsMS0uNDUtLjI2OCwxLjIyOSwxLjIyOSwwLDAsMS0uMzktLjkyNFxcXCIgc3R5bGU9XFxcImZpbGw6Izk5OVxcXCIvPjxwYXRoIGQ9XFxcIk0yNC4yNCwyMC4yOTNhMy42NDgsMy42NDgsMCwwLDEtLjEyMi45MjksNC41MzQsNC41MzQsMCwwLDEtLjMzNi44OTEsNC43MDYsNC43MDYsMCwwLDEtLjUuODA3LDQuMDA1LDQuMDA1LDAsMCwxLS42MS42NjRsLTEuMy0uNjFjLjA4MS0uMTczLjE2OC0uMzQ5LjI2LS41MjZhNC44NDYsNC44NDYsMCwwLDAsLjI2OC0uNTU4LDQuNDQzLDQuNDQzLDAsMCwwLC4yMDYtLjY1NiwzLjQwNiwzLjQwNiwwLDAsMCwuMDg0LS44VjE4LjY1NmgyLjA1OWwtLjAwOCwxLjYzNlxcXCIgc3R5bGU9XFxcImZpbGw6Izk5OVxcXCIvPjxwYXRoIGQ9XFxcIk0yNS41MzgsMjEuOTk0YTEuMjUxLDEuMjUxLDAsMCwwLC40ODgtLjMyOCwxLjcwNywxLjcwNywwLDAsMCwuMzA2LS41LDIuNTI1LDIuNTI1LDAsMCwwLC4xNi0uNjM0LDUuODI2LDUuODI2LDAsMCwwLC4wNDYtLjc0di0xLjU1YTIuODQ0LDIuODQ0LDAsMCwxLC4zMzYtMS4zODIsMi4zNjQsMi4zNjQsMCwwLDEsMS4wODQtLjk4MywyLjM2NCwyLjM2NCwwLDAsMS0xLjA4NC0uOTgzLDIuODQ0LDIuODQ0LDAsMCwxLS4zMzYtMS4zODJ2LTEuNTVhNS44MjcsNS44MjcsMCwwLDAtLjA0Ni0uNzQsMi41ODYsMi41ODYsMCwwLDAtLjE2LS42MzQsMS42ODQsMS42ODQsMCwwLDAtLjMwNi0uNSwxLjIyMiwxLjIyMiwwLDAsMC0uNDg4LS4zMjhsLjQ4LTEuMzM4QTQuNDUsNC40NSwwLDAsMSwyNy4zMjksOWEzLjA5MiwzLjA5MiwwLDAsMSwuODQ4LjgxNSwyLjg5MiwyLjg5MiwwLDAsMSwuNDUsMS4wMDgsNC42MDYsNC42MDYsMCwwLDEsLjEzOCwxLjE0M3YxLjU1YTIuNjU1LDIuNjU1LDAsMCwwLC4wNjguNjI2LDEuNDQ4LDEuNDQ4LDAsMCwwLC4yMjIuNDc0LDEuMDM3LDEuMDM3LDAsMCwwLC4zODIuMywxLjM3NiwxLjM3NiwwLDAsMCwuNTY0LjEwNnYxLjczMWExLjA3NywxLjA3NywwLDAsMC0uOTQ2LjQxMiwxLjgyOCwxLjgyOCwwLDAsMC0uMjksMS4wODR2MS41NWE0LjYwNiw0LjYwNiwwLDAsMS0uMTM4LDEuMTQzLDIuOTE1LDIuOTE1LDAsMCwxLS40NSwxLjAwOCwzLjE1NywzLjE1NywwLDAsMS0uODQ4LjgyNCw0LjQ4Miw0LjQ4MiwwLDAsMS0xLjMxMS41OGwtLjQ4LTEuMzUyXFxcIiBzdHlsZT1cXFwiZmlsbDojOTk5XFxcIi8+XCIsXG5cdH0sXG5cdFwiSnVsaWFcIjoge1xuXHRcdGNvbG91cjogXCIjNDA2M2Q4XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNNy40NDgsMjEuOTgzVjEzLjc3NWwtMi40MzIuNjY5djguNzI5YTIuNjYsMi42NiwwLDAsMS0uMTA2LjkyOS4zMzYuMzM2LDAsMCwxLS4zMDguMjM5LjQwNS40MDUsMCwwLDEtLjIxMi0uMDc0LDEuMjgyLDEuMjgyLDAsMCwxLS4yODctLjMsMi44MTMsMi44MTMsMCwwLDAtLjM3Ny0uNDA5Ljg3NC44NzQsMCwwLDAtLjYxMS0uMjA3LDEuMjIsMS4yMiwwLDAsMC0uODEyLjI1NS43ODkuNzg5LDAsMCwwLS4zLjYyN0EuOTA3LjkwNywwLDAsMCwyLjU0MiwyNWEzLjExNSwzLjExNSwwLDAsMCwxLjU2MS4zMTksNy4wNjUsNy4wNjUsMCwwLDAsMS4zNy0uMTIyLDIuMzYxLDIuMzYxLDAsMCwwLDEuMDU3LS40ODMsMi4yOTIsMi4yOTIsMCwwLDAsLjY4LTEuMDE0LDUuMDk0LDUuMDk0LDAsMCwwLC4yMzktMS43MTVaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjUyNTI1XFxcIi8+PHBhdGggZD1cXFwiTTEwLjgyNSwxNC4wMDhIOC40djUuNjE4YTIuMjQxLDIuMjQxLDAsMCwwLC4yMTguOTc3LDIuNDg5LDIuNDg5LDAsMCwwLC42LjgsMi45LDIuOSwwLDAsMCwuODkyLjUzNiwzLjA0NSwzLjA0NSwwLDAsMCwxLjEuMiwyLjU1LDIuNTUsMCwwLDAsMS4wNTEtLjI0NCw0LjM0Nyw0LjM0NywwLDAsMCwxLjAxOS0uNjQ4di43NDNIMTUuNzFWMTQuMDA4SDEzLjI4OXY1Ljc1NmEyLjc2NCwyLjc2NCwwLDAsMS0uNjQ4LjcwNiwxLjEzOSwxLjEzOSwwLDAsMS0uNjQ4LjI4MSwxLjE1NSwxLjE1NSwwLDAsMS0uNDU3LS4wOSwxLjI2MywxLjI2MywwLDAsMS0uMzcyLS4yMzksMS4wNiwxLjA2LDAsMCwxLS4yNS0uMzU2LDEuMDkxLDEuMDkxLDAsMCwxLS4wOS0uNDQxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzI1MjUyNVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4wNzQsMjEuOTgzVjEwLjEzMmwtMi40MTEuNjY5VjIxLjk4M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNTI1MjVcXFwiLz48cGF0aCBkPVxcXCJNMjAuMDM4LDE0LjQ0NHY3LjU0aDIuNDIxVjEzLjc3NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNTI1MjVcXFwiLz48cGF0aCBkPVxcXCJNMjcuNTY4LDE3Ljg2M3YyLjNxLS4zNzIuMjc2LS42NzQuNDU3YTEuMTY1LDEuMTY1LDAsMCwxLS42LjE4MS40NjguNDY4LDAsMCwxLS4yNzYtLjA5LDEsMSwwLDAsMS0uMjM0LS4yMzksMS4xMzgsMS4xMzgsMCwwLDEtLjE2NS0uMzU2LDEuNTc2LDEuNTc2LDAsMCwxLS4wNTgtLjQzLjk2OC45NjgsMCwwLDEsLjE4MS0uNTUyLDIuMzA2LDIuMzA2LDAsMCwxLC40NzMtLjUsNC41NzIsNC41NzIsMCwwLDEsLjY0OC0uNDMsNy42MTIsNy42MTIsMCwwLDEsLjcwNi0uMzQ1Wk0zMCwyMS45ODNWMTZhMi4wODMsMi4wODMsMCwwLDAtLjE5MS0uOSwxLjc3OSwxLjc3OSwwLDAsMC0uNTk1LS42OSwzLjAwNiwzLjAwNiwwLDAsMC0xLjAyNS0uNDQxLDYuMjI1LDYuMjI1LDAsMCwwLTEuNDgxLS4xNTQsNS43MzUsNS43MzUsMCwwLDAtMS4zMjcuMTQ5LDQuNiw0LjYsMCwwLDAtMS4xLjQsMi4zNzMsMi4zNzMsMCwwLDAtLjc1OS42MTEsMS4yMTYsMS4yMTYsMCwwLDAtLjI4MS43Ny45NTguOTU4LDAsMCwwLC4zMTkuNzM4LDEuMTc4LDEuMTc4LDAsMCwwLC44MjguMjkyLDEuMzY0LDEuMzY0LDAsMCwwLC41NDctLjEuOC44LDAsMCwwLC4zMzUtLjI1NS45ODYuOTg2LDAsMCwwLC4xNjUtLjM3MiwxLjk3OCwxLjk3OCwwLDAsMCwuMDQ4LS40MzUsMS4wMzEsMS4wMzEsMCwwLDEsLjIyMy0uNjY5Ljk3NS45NzUsMCwwLDEsLjgtLjI3NiwxLjAwOCwxLjAwOCwwLDAsMSwuNzgxLjMxOSwxLjU5NCwxLjU5NCwwLDAsMSwuMjkyLDEuMDgzdi43ODZsLS4yNjUuMDY0cS0uNDg4LjE0OS0uOTg4LjMxM3QtLjk2MS4zNjFhNy44ODQsNy44ODQsMCwwLDAtLjg2NS40MywzLjUxMSwzLjUxMSwwLDAsMC0uNzA2LjUzMSwyLjMxOSwyLjMxOSwwLDAsMC0uNDc4LjY2OSwxLjkxOCwxLjkxOCwwLDAsMC0uMTc1LjgyOCwyLjAzNCwyLjAzNCwwLDAsMCwuMTY1LjgyMywxLjg3NiwxLjg3NiwwLDAsMCwuNDczLjY1MywyLjI1NSwyLjI1NSwwLDAsMCwuNzQ5LjQzNSwyLjkwNywyLjkwNywwLDAsMCwuOTkzLjE1OSwzLjY3OSwzLjY3OSwwLDAsMCwuNy0uMDU4LDIuNTA5LDIuNTA5LDAsMCwwLC41MzYtLjE2NSwyLjIwOSwyLjIwOSwwLDAsMCwuNDMtLjI1cS4xOTEtLjE0My4zOTMtLjMxM3YuNjM3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzI1MjUyNVxcXCIvPjxjaXJjbGUgY3g9XFxcIjYuMjA0XFxcIiBjeT1cXFwiMTEuNjcyXFxcIiByPVxcXCIxLjVcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NjgyZGZcXFwiLz48cGF0aCBkPVxcXCJNNi4yLDEzLjI4N2ExLjYxNSwxLjYxNSwwLDEsMSwxLjYxNS0xLjYxNUExLjYxNywxLjYxNywwLDAsMSw2LjIsMTMuMjg3Wm0wLTNhMS4zODUsMS4zODUsMCwxLDAsMS4zODUsMS4zODVBMS4zODYsMS4zODYsMCwwLDAsNi4yLDEwLjI4N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM0MDYzZDhcXFwiLz48Y2lyY2xlIGN4PVxcXCIyMS40MTdcXFwiIGN5PVxcXCIxMS42NzJcXFwiIHI9XFxcIjEuNVxcXCIgc3R5bGU9XFxcImZpbGw6I2Q1NjM1Y1xcXCIvPjxwYXRoIGQ9XFxcIk0yMS40MTcsMTMuMjg3YTEuNjE1LDEuNjE1LDAsMSwxLDEuNjE1LTEuNjE1QTEuNjE3LDEuNjE3LDAsMCwxLDIxLjQxNywxMy4yODdabTAtM0ExLjM4NSwxLjM4NSwwLDEsMCwyMi44LDExLjY3MiwxLjM4NiwxLjM4NiwwLDAsMCwyMS40MTcsMTAuMjg3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NiM2MzM1xcXCIvPjxjaXJjbGUgY3g9XFxcIjIzLjM4NVxcXCIgY3k9XFxcIjguMjk3XFxcIiByPVxcXCIxLjVcXFwiIHN0eWxlPVxcXCJmaWxsOiM2MGFkNTFcXFwiLz48cGF0aCBkPVxcXCJNMjMuMzg1LDkuOTEyQTEuNjE1LDEuNjE1LDAsMSwxLDI1LDguMywxLjYxNywxLjYxNywwLDAsMSwyMy4zODUsOS45MTJabTAtM0ExLjM4NSwxLjM4NSwwLDEsMCwyNC43Nyw4LjMsMS4zODYsMS4zODYsMCwwLDAsMjMuMzg1LDYuOTEyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzM4OTgyNlxcXCIvPjxjaXJjbGUgY3g9XFxcIjI1LjM1NFxcXCIgY3k9XFxcIjExLjY3MlxcXCIgcj1cXFwiMS41XFxcIiBzdHlsZT1cXFwiZmlsbDojYWE3OWMxXFxcIi8+PHBhdGggZD1cXFwiTTI1LjM1NCwxMy4yODdhMS42MTUsMS42MTUsMCwxLDEsMS42MTUtMS42MTVBMS42MTcsMS42MTcsMCwwLDEsMjUuMzU0LDEzLjI4N1ptMC0zYTEuMzg1LDEuMzg1LDAsMSwwLDEuMzg1LDEuMzg1QTEuMzg2LDEuMzg2LDAsMCwwLDI1LjM1NCwxMC4yODdaXFxcIiBzdHlsZT1cXFwiZmlsbDojOTU1OGIyXFxcIi8+XCIsXG5cdH0sXG5cdFwiS290bGluXCI6IHtcblx0XHRjb2xvdXI6IFwiIzlkNGI5ZFwiLFxuXHRcdGljb246IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiMzExLjMzNlxcXCIgeTE9XFxcIjE0NTIuMDY0XFxcIiB4Mj1cXFwiMjgzLjM0MlxcXCIgeTI9XFxcIjE0ODAuMDU4XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0yODEuNCAtMTQ1MClcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNlNDQ4NTdcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDdcXFwiIHN0b3AtY29sb3I9XFxcIiM5ZDRiOWRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM2ZDVmYWFcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX2tvdGxpbjwvdGl0bGU+PHBhdGggZD1cXFwiTTMwLDMwSDJWMkgzMEwxNiwxNlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz5cIixcblx0fSxcblx0XCJLdXN0b1wiOiB7XG5cdFx0Y29sb3VyOiBcIiM1OWI0ZDlcIixcblx0XHRpY29uOiBcIjxyZWN0IHg9XFxcIjAuNTVcXFwiIHk9XFxcIjIyLjMzOVxcXCIgd2lkdGg9XFxcIjE1LjQzM1xcXCIgaGVpZ2h0PVxcXCIyLjc5NlxcXCIgcng9XFxcIjAuNDM5XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMTQuMzYzIDEyLjc5Nykgcm90YXRlKC00NC45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojYjhkNDMyXFxcIi8+PHJlY3QgeD1cXFwiMS4zNzJcXFwiIHk9XFxcIjE2LjM4MlxcXCIgd2lkdGg9XFxcIjkuODU5XFxcIiBoZWlnaHQ9XFxcIjIuNzk2XFxcIiByeD1cXFwiMC40MzlcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0xMC43MjcgOS42NjMpIHJvdGF0ZSgtNDQuOTk5KVxcXCIgc3R5bGU9XFxcImZpbGw6I2I4ZDQzMlxcXCIvPjxyZWN0IHg9XFxcIjkuMjMyXFxcIiB5PVxcXCIyNC4zMDFcXFwiIHdpZHRoPVxcXCI5Ljg1OVxcXCIgaGVpZ2h0PVxcXCIyLjc5NlxcXCIgcng9XFxcIjAuNDM5XFxcIiB0cmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgtMTQuMDI0IDE3LjU0MSkgcm90YXRlKC00NC45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojYjhkNDMyXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIzMCAyIDIgMiAzMCAyOS45OTkgMzAgMlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNzhkNFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTAuMjgyIDEwLjI4MiAyMS43MTggMjEuNzE4IDMwIDEzLjQzNiAzMCAyIDE4LjU2NCAyIDEwLjI4MiAxMC4yODJcXFwiIHN0eWxlPVxcXCJmaWxsOiM1OWI0ZDlcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjMwIDI5Ljk5OSAzMCAyIDE2IDE2IDMwIDI5Ljk5OVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZjtvcGFjaXR5OjAuMjAwMDAwMDAyOTgwMjMyMjQ7aXNvbGF0aW9uOmlzb2xhdGVcXFwiLz48cmVjdCB4PVxcXCIxNi4yMjZcXFwiIHk9XFxcIjkuMDAxXFxcIiB3aWR0aD1cXFwiMi43OTZcXFwiIGhlaWdodD1cXFwiMi43OTZcXFwiIHJ4PVxcXCIwLjYyMlxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTIuMTkyIDE1LjUwNykgcm90YXRlKC00NC45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHJlY3QgeD1cXFwiMjAuMThcXFwiIHk9XFxcIjUuMDQ4XFxcIiB3aWR0aD1cXFwiMi43OTZcXFwiIGhlaWdodD1cXFwiMi43OTZcXFwiIHJ4PVxcXCIwLjYyMlxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMS43NjIgMTcuMTQ2KSByb3RhdGUoLTQ0Ljk5OSlcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cmVjdCB4PVxcXCIyMC4xOFxcXCIgeT1cXFwiMTIuOTU1XFxcIiB3aWR0aD1cXFwiMi43OTZcXFwiIGhlaWdodD1cXFwiMi43OTZcXFwiIHJ4PVxcXCIwLjYyMlxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTMuODI5IDE5LjQ2MSkgcm90YXRlKC00NC45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHJlY3QgeD1cXFwiMjQuMTMzXFxcIiB5PVxcXCI5LjAwMlxcXCIgd2lkdGg9XFxcIjIuNzk2XFxcIiBoZWlnaHQ9XFxcIjIuNzk2XFxcIiByeD1cXFwiMC42MjJcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDAuMTI0IDIxLjA5OSkgcm90YXRlKC00NC45OTkpXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiTGFUZVhcIjoge1xuXHRcdGNvbG91cjogXCIjY2ZjZmNmXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTEuMzMzLDEzLjEyMmMtLjEyOC0xLjU2Mi0uMjQxLTIuNzU2LTIuMjg3LTIuNzU2SDcuOTF2OC40aDIuMTQ1di42MTFsLTMuMDgzLS4wMjktMy4wODIuMDI5di0uNjExSDYuMDM0di04LjRINC44ODRjLTIuMDQ2LDAtMi4xNTksMS4yMDgtMi4yODcsMi43NTZIMmwuMjg0LTMuMzY3aDkuMzYybC4yODQsMy4zNjdoLS42WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NmY2ZjZlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4yODksMjIuNTNIMTAuNDFWMjEuOTJoMS41MDZWMTMuNDY3SDEwLjQxdi0uNjExaDguNjM3bC40MTIsMy4zNjdoLS42Yy0uMjEzLTEuODMzLS42ODItMi43NTYtMi44NTUtMi43NTZIMTMuNzkxVjE3LjJoLjgzOGMxLjM2NCwwLDEuNTA1LS42LDEuNTA1LTEuNjYyaC42djMuOTM1aC0uNmMwLTEuMDgtLjE0Mi0xLjY2Mi0xLjUwNS0xLjY2MmgtLjgzOHY0LjEwNmgyLjIxNmMyLjQ3MiwwLDMtMS4xMDgsMy4zLTMuMjI1aC42WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NmY2ZjZlxcXCIvPjxwYXRoIGQ9XFxcIk0yNy43MjcsMTkuMTg2Yy0uNTQsMC0xLjk2LDAtMi40MTUuMDI5VjE4LjZoMS4xNzlsLTIuNTU3LTMuNTUyLTIuNTI5LDMuMzgxQTQuMSw0LjEsMCwwLDAsMjIuNywxOC42di42MTFjLS4zNTUtLjAyOS0xLjU3Ni0uMDI5LTIuMDE3LS4wMjktLjQsMC0xLjU0OCwwLTEuODc1LjAyOVYxOC42aC4zODNhNy40NTksNy40NTksMCwwLDAsLjgyNC0uMDQzYy41LS4wNDMuNTQtLjA4NS42NjctLjI1NkwyMy41MzYsMTQuNWwtMy4xNTMtNC40MThIMTlWOS40N2MuMzg0LjAyOCwxLjc5LjAyOCwyLjI3My4wMjguNTgyLDAsMS45MTgsMCwyLjQyOS0uMDI4di42MTFIMjIuNTI4bDIuMTE3LDIuOTU1LDIuMDc0LTIuNzg0YTQuMSw0LjEsMCwwLDAtMS4yOTMtLjE3VjkuNDdjLjM1Ni4wMjgsMS41OTEuMDI4LDIuMDMyLjAyOC40LDAsMS41MzQsMCwxLjg2MS0uMDI4di42MTFoLS4zNjlhNS4yNjQsNS4yNjQsMCwwLDAtLjgzOC4wNDNjLS40NjkuMDQzLS41MjYuMDcxLS42NjcuMjU2bC0yLjQsMy4yMUwyOC42MzYsMTguNkgzMHYuNjExQzI5LjY0NSwxOS4xODYsMjguMTgyLDE5LjE4NiwyNy43MjcsMTkuMTg2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NmY2ZjZlxcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiJVwiLFxuXHRcdF0sXG5cdH0sXG5cdFwiTGVzc1wiOiB7XG5cdFx0Y29sb3VyOiBcIiMyYTRmODRcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi0zLjYwOVxcXCIgeTE9XFxcIi00OTIuNjg1XFxcIiB4Mj1cXFwiLTMuNjA5XFxcIiB5Mj1cXFwiLTQ4MC4yNzFcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMTkuNzEyIDUwMi44OTEpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwLjE1XFxcIiBzdG9wLWNvbG9yPVxcXCIjMmE0Zjg0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjM4OFxcXCIgc3RvcC1jb2xvcj1cXFwiIzI5NGU4MlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzE3MmU0ZVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfbGVzczwvdGl0bGU+PHBhdGggZD1cXFwiTTI4LjU1OSwyMC4yMjZhMi40LDIuNCwwLDAsMS0yLjM5NCwyLjM5NEg2LjA0YTIuNCwyLjQsMCwwLDEtMi4zOTQtMi4zOTRWMTIuNkEyLjQsMi40LDAsMCwxLDYuMDQsMTAuMjA2SDI2LjE2NUEyLjQsMi40LDAsMCwxLDI4LjU1OSwxMi42WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0yNC4zNDksMTYuMjVhMS45NzIsMS45NzIsMCwwLDEsMS41NzgsMS44OTEsMS42OSwxLjY5LDAsMCwxLS42NTMsMS40LDIuOTM0LDIuOTM0LDAsMCwxLTEuODYyLjU1OSw0LjU1OCw0LjU1OCwwLDAsMS0yLjI0MS0uNjE4LDEuOTg2LDEuOTg2LDAsMCwxLC4xNi0uNjY5LDEuODMsMS44MywwLDAsMSwuMzUtLjU3NiwzLjcsMy43LDAsMCwwLDEuNjQ5LjQ5My45NjUuOTY1LDAsMCwwLC41MS0uMTEyLjMzOS4zMzksMCwwLDAsLjE3OC0uM3EwLS4zNTMtLjU0Ni0uNTI5bC0uNjUzLS4yNDdxLTEuNDgyLS41NC0xLjQ4Mi0xLjc2MmExLjc1MywxLjc1MywwLDAsMSwuNjIzLTEuNDE2LDIuNTg3LDIuNTg3LDAsMCwxLDEuNjc4LS42NDgsNS4wOTQsNS4wOTQsMCwwLDEsMS4xNS4xNDcsNC41NTUsNC41NTUsMCwwLDEsMS4wMzIuNDcyLDEuNjY4LDEuNjY4LDAsMCwxLS4xMy43MjIsMS4yMiwxLjIyLDAsMCwxLS4zOC41NTgsNC4yNjEsNC4yNjEsMCwwLDAtMS42Ni0uNDQ2LjU0NC41NDQsMCwwLDAtLjM2Mi4xMDYuMzM4LjMzOCwwLDAsMC0uMTI0LjI3cTAsLjI4Mi40NTEuNDQ2bC43MzYuMjU5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2Y2ZjZmNlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4xLDE2LjI1YTEuOTcyLDEuOTcyLDAsMCwxLDEuNTc3LDEuODkxLDEuNjkxLDEuNjkxLDAsMCwxLS42NTIsMS40LDIuOTM3LDIuOTM3LDAsMCwxLTEuODYyLjU1OSw0LjU2LDQuNTYsMCwwLDEtMi4yNDEtLjYxOCwxLjk4MSwxLjk4MSwwLDAsMSwuMTYtLjY2OSwxLjgyMSwxLjgyMSwwLDAsMSwuMzUtLjU3NiwzLjcsMy43LDAsMCwwLDEuNjQ5LjQ5My45NjMuOTYzLDAsMCwwLC41MS0uMTEyLjM0LjM0LDAsMCwwLC4xNzgtLjNxMC0uMzUzLS41NDYtLjUyOWwtLjY1My0uMjQ3cS0xLjQ4Mi0uNTQtMS40ODItMS43NjJhMS43NTIsMS43NTIsMCwwLDEsLjYyMy0xLjQxNiwyLjU4NSwyLjU4NSwwLDAsMSwxLjY3Ny0uNjQ4LDUuMDg4LDUuMDg4LDAsMCwxLDEuMTUuMTQ3LDQuNTUyLDQuNTUyLDAsMCwxLDEuMDMyLjQ3MiwxLjY2OCwxLjY2OCwwLDAsMS0uMTMuNzIyLDEuMjIsMS4yMiwwLDAsMS0uMzguNTU4LDQuMjYzLDQuMjYzLDAsMCwwLTEuNjYxLS40NDYuNTQzLjU0MywwLDAsMC0uMzYyLjEwNi4zMzkuMzM5LDAsMCwwLS4xMjQuMjdxMCwuMjgyLjQ1MS40NDZsLjczNi4yNTlaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjZmNmY2XFxcIi8+PHBhdGggZD1cXFwiTTE1LjI2NCwxNi4zMzNhMi44MjIsMi44MjIsMCwwLDAtLjE3Mi0xLDIuMjM5LDIuMjM5LDAsMCwwLS40OTItLjc4NywyLjI4LDIuMjgsMCwwLDAtLjc3Ny0uNTE3LDIuNzM3LDIuNzM3LDAsMCwwLTEuMDI2LS4zMTQsMi44LDIuOCwwLDAsMC0xLjE4LjM2MSwyLjI1NiwyLjI1NiwwLDAsMC0uODMuNjQ2LDIuNzY1LDIuNzY1LDAsMCwwLS40ODcuOTY5LDQuNCw0LjQsMCwwLDAtLjE2LDEuMjE2LDUuNjgxLDUuNjgxLDAsMCwwLC4xMywxLjI1NywyLjYyOCwyLjYyOCwwLDAsMCwuNDQ1LDEsMi4xMDcsMi4xMDcsMCwwLDAsLjgxOC42NTcsMi45MzUsMi45MzUsMCwwLDAsMS4yNTEuMjc3LDMuOTUyLDMuOTUyLDAsMCwwLDIuMzI0LS43MTIsMS44NjUsMS44NjUsMCwwLDAtLjQ4NC0xLjA4MSw2LjE4OCw2LjE4OCwwLDAsMS0uODU3LjI2MiwzLjIwOCwzLjIwOCwwLDAsMS0uNjU2LjA3OSwxLjAxNywxLjAxNywwLDAsMS0uODE1LS4yOSwxLjE4NywxLjE4NywwLDAsMS0uMjcxLS43N2gzLjA4M0E0LjQ0Nyw0LjQ0NywwLDAsMCwxNS4yNjQsMTYuMzMzWm0tMy4yNDguMDgxYTIuNDMzLDIuNDMzLDAsMCwxLC4yMTgtMSwuNjMyLjYzMiwwLDAsMSwuNTU5LS4yNjQuNjYuNjYsMCwwLDEsLjU4Mi4yODIsMS43NDksMS43NDksMCwwLDEsLjE5NC44NTZ2LjEzSDEyLjAxNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmNmY2ZjZcXFwiLz48cGF0aCBkPVxcXCJNMjkuMTgsMTcuMmExLjYwNSwxLjYwNSwwLDAsMC0uNTMsMS4yNjV2Mi4wNTFhMS44MSwxLjgxLDAsMCwxLS42ODMsMS41NTcsMi44LDIuOCwwLDAsMS0xLjY1NC41NDlsLS4zNzMsMFYyMS41OTRhMS4yNDEsMS4yNDEsMCwwLDAsLjU5NS0uMzM0LDEuMzY5LDEuMzY5LDAsMCwwLC40MTktMS4wNDdWMTguNTU2YTIuNTQ1LDIuNTQ1LDAsMCwxLC4yNTctMS4zMjMsMi41LDIuNSwwLDAsMSwxLjItLjgzOCwyLjUyOCwyLjUyOCwwLDAsMS0xLjMyNC0xLjE3OSwyLjk1NiwyLjk1NiwwLDAsMS0uMTM1LTEuMTY1VjEyLjUzM2ExLjQ1OCwxLjQ1OCwwLDAsMC0uMzY2LTEuMDU0LDEuMTUyLDEuMTUyLDAsMCwwLS42NDgtLjMxNHYtLjk2Yy40NDUsMCwuNjY5LDAsLjkyOCwwYTEuNjc2LDEuNjc2LDAsMCwxLDEuMDIzLjQ0MiwyLDIsMCwwLDEsLjY3MywxLjAwOSwyLjMzLDIuMzMsMCwwLDEsLjA4Ni43djEuNzU3YTEuODQ2LDEuODQ2LDAsMCwwLC41LDEuMzgzLDIuMTEzLDIuMTEzLDAsMCwwLC44NTQuNDc5di43OTRhMS45NDMsMS45NDMsMCwwLDAtLjgyLjQyNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmNmY2ZjY7c3Ryb2tlOiM0MDQwNDA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjVweFxcXCIvPjxwYXRoIGQ9XFxcIk01LjU5NCwxMC4yMDZINS4yNmExLjY3MywxLjY3MywwLDAsMC0xLjAyMy40NDIsMS43MSwxLjcxLDAsMCwwLS42NzMsMS4wMDksMy41MzEsMy41MzEsMCwwLDAtLjAzOC43djEuNzU3QTEuODY3LDEuODY3LDAsMCwxLDIuOTgxLDE1LjUsMi44NDcsMi44NDcsMCwwLDEsMiwxNS45Nzd2Ljc5M2EyLjU1MiwyLjU1MiwwLDAsMSwuOTQ3LjQyNiwxLjYzOCwxLjYzOCwwLDAsMSwuNTc3LDEuMjY1djIuMDUxQTEuNzgxLDEuNzgxLDAsMCwwLDQuMTYsMjIuMDdhMi44LDIuOCwwLDAsMCwxLjY1NC41NWwuNDIxLDBWMjEuNTk0YTEuNDcsMS40NywwLDAsMS0uNjQzLS4zMzQsMS4zNTUsMS4zNTUsMCwwLDEtLjM3MS0xLjA0N1YxOC41NTdhMi41MTYsMi41MTYsMCwwLDAtLjMwNS0xLjMyMywyLjUsMi41LDAsMCwwLTEuMi0uODM4LDIuNTI5LDIuNTI5LDAsMCwwLDEuMzI0LTEuMTc4LDIuODU3LDIuODU3LDAsMCwwLC4xODMtMS4xNjVWMTIuNTM0QTEuNDYyLDEuNDYyLDAsMCwxLDUuNTQsMTEuNDhhMS4zMTMsMS4zMTMsMCwwLDEsLjU3NS0uMjcxbC40MjgsMFYxMC4yMDZINS41OTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjZmNmY2O3N0cm9rZTojNDA0MDQwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjI1cHhcXFwiLz48cGF0aCBkPVxcXCJNOS41MzcsMTguNTI5aC0uMzJjLS4zNDgsMC0uNDc5LS4xODMtLjQ3OS0uNTUxVjExLjIxOWExLjI1NiwxLjI1NiwwLDAsMC0uMjY4LS44NTZjLS4xNS0uMTY0LS40MTEtLjE2Mi0uNzgzLS4xNjJINi45NjRsLS4wODUsMHY4LjEwNmExLjg3NSwxLjg3NSwwLDAsMCwuMzUyLDEuMjQsMS40NDEsMS40NDEsMCwwLDAsMS4xNDUuMzkzLDcuODU5LDcuODU5LDAsMCwwLDEuMjY5LS4xMTgsMi4yMywyLjIzLDAsMCwwLC4wMzYtLjUwOSwyLjI3OCwyLjI3OCwwLDAsMC0uMTQyLS43ODJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjZmNmY2XFxcIi8+XCIsXG5cdH0sXG5cdFwiTGlxdWlkXCI6IHtcblx0XHRjb2xvdXI6IFwiIzAwNDk5OVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTI5Ljk4OCwyMi4zNzJsLS43NDguMDQ4YTUuMjA5LDUuMjA5LDAsMCwxLTIuOTktLjY3MSw3LjgsNy44LDAsMCwwLTcuOCwwLDUuMjc1LDUuMjc1LDAsMCwxLTUuMy4wMUE3LjI2Miw3LjI2MiwwLDAsMCw5LjI2MywyMC43YTcuMjI5LDcuMjI5LDAsMCwwLTMuOTQsMS4wNiw0Ljc1MSw0Ljc1MSwwLDAsMS0yLjQ3LjdsLS44MzgsMGMwLC44ODktLjAwOSwxLjczOS0uMDE1LDIuNTE1bC44NjEsMGE3LjIzNyw3LjIzNywwLDAsMCwzLjc1LTEuMDUyLDQuNzYzLDQuNzYzLDAsMCwxLDIuNjU5LS43LDQuODM1LDQuODM1LDAsMCwxLDIuNjM0LjcxOCw3Ljc5NCw3Ljc5NCwwLDAsMCw3LjgsMCw1LjI4Nyw1LjI4NywwLDAsMSw1LjMxOSwwLDcuNzA5LDcuNzA5LDAsMCwwLDQuNC45ODlMMzAsMjQuODg4QzI5Ljk5NSwyNC4xLDI5Ljk5MSwyMy4yNDksMjkuOTg4LDIyLjM3MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDQ5OTlcXFwiLz48cGF0aCBkPVxcXCJNMjkuOTgzLDE1LjU4MWwtLjc0My4wNDdhNS4yMjYsNS4yMjYsMCwwLDEtMi45OS0uNjcxLDcuOCw3LjgsMCwwLDAtNy44LDAsNS4yNzgsNS4yNzgsMCwwLDEtNS4zLjAxQTcuMzEyLDcuMzEyLDAsMCwwLDkuMjYzLDEzLjkxYTcuMyw3LjMsMCwwLDAtMy45NDEsMS4wNiw0Ljc0Miw0Ljc0MiwwLDAsMS0yLjQ2OS43bC0uODI4LDBjMCwuODQ5LDAsMS42OTMsMCwyLjUxNWwuODQsMGE3LjIzNyw3LjIzNywwLDAsMCwzLjc1LTEuMDUyLDQuNyw0LjcsMCwwLDEsMi42NTktLjcsNC44LDQuOCwwLDAsMSwyLjYzNC43MTgsNy43OTQsNy43OTQsMCwwLDAsNy44LDAsNS4yODcsNS4yODcsMCwwLDEsNS4zMTksMCw3LjcwOSw3LjcwOSwwLDAsMCw0LjQuOTg5bC41NjgtLjAzN0MyOS45ODMsMTcuMjY5LDI5Ljk4MywxNi40MjQsMjkuOTgzLDE1LjU4MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDQ5OTlcXFwiLz48cGF0aCBkPVxcXCJNMjkuMjQsOS4xMzdhNS4yNTQsNS4yNTQsMCwwLDEtMi45OS0uNjcxLDcuOCw3LjgsMCwwLDAtNy44LDAsNS4yNzUsNS4yNzUsMCwwLDEtNS4zLjAwOUE3LjE2LDcuMTYsMCwwLDAsOS4yNjMsNy40MmE3LjE1OSw3LjE1OSwwLDAsMC0zLjk0LDEuMDU5LDQuNzM4LDQuNzM4LDAsMCwxLTIuNDY5LjdsLS44MzQsMGMwLC44MiwwLDEuNjY0LDAsMi41MTdsLjgzNiwwYTcuMjM3LDcuMjM3LDAsMCwwLDMuNzUtMS4wNTIsNC43MzgsNC43MzgsMCwwLDEsMi42NTktLjcwNiw0LjgxNCw0LjgxNCwwLDAsMSwyLjYzNC43MTksNy43OTEsNy43OTEsMCwwLDAsNy44LDAsNS4yOTMsNS4yOTMsMCwwLDEsNS4zMTksMCw3LjczMiw3LjczMiwwLDAsMCw0LjQuOTg4bC41NjgtLjAzN2MwLS44NTksMC0xLjcuMDA3LTIuNTE2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNDk5OVxcXCIvPlwiLFxuXHR9LFxuXHRcIkxpc3BcIjoge1xuXHRcdGNvbG91cjogXCIjODM4MWM1XCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCIxOTI1Ljc4NVxcXCIgeTE9XFxcIi0xMzgzLjA3NVxcXCIgeDI9XFxcIjIzMDIuMzUxXFxcIiB5Mj1cXFwiLTE4NjguNTU3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuMDQ4LCAwLCAwLCAtMC4wNDUsIC04Mi41MzksIC01NC42NSlcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM4MzgxYzVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTY2XFxcIiBzdG9wLWNvbG9yPVxcXCIjN2U1NWIzXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjAuOTk2XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYTUyZWNiXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjAuOTkyXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCIyMjE0LjE4N1xcXCIgeTE9XFxcIi0xNzUwLjIyNVxcXCIgeDI9XFxcIjE5MzAuOTc0XFxcIiB5Mj1cXFwiLTE0MDguMzQyXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuMDU0LCAwLCAwLCAtMC4wNTQsIC05NS4xODgsIC02OC40ODcpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNDExZjVkXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjNWIyYTg1XFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9lbWFjczwvdGl0bGU+PHBhdGggZD1cXFwiTTI5LjM2MywxNkExMy4zNjQsMTMuMzY0LDAsMSwxLDE2LDIuNSwxMy40MzIsMTMuNDMyLDAsMCwxLDI5LjM2MywxNlpcXFwiIHN0eWxlPVxcXCJzdHJva2Utd2lkdGg6MC43NXB4O2ZpbGw6dXJsKCNhKTtzdHJva2U6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS40MDYsMjUuNDgzYTE4LjE1NywxOC4xNTcsMCwwLDAsMi41ODctLjA0OCw0MS43MjgsNDEuNzI4LDAsMCwwLDQuNS0uNjM5LDMwLjY3MSwzMC42NzEsMCwwLDAsMy4xMzItLjgzOWMxLjE0Mi0uNDIxLDEuNzY0LS43NzgsMi4wNDMtMS4yODRhLjYyLjYyLDAsMCwwLS40NDEtLjY5MmMtMS4zNDctLjU2NS0yLjkwOC0uNDYzLTYtLjUyOC0zLjQyNy0uMTE4LTQuNTY3LS42OTEtNS4xNzQtMS4xNTMtLjU4Mi0uNDY5LS4yOS0xLjc2NSwyLjIwNi0yLjkwN2E1NC4yNjYsNTQuMjY2LDAsMCwxLDYuMTg0LTEuNzNjLTEuNjU5LS44Mi00Ljc1My0yLjI2Mi01LjM4OS0yLjU3My0uNTU4LS4yNzMtMS40NTEtLjY4NC0xLjY0NC0xLjE4Mi0uMjE5LS40NzguNTE4LS44ODkuOTMtMS4wMDdhMjAuMywyMC4zLDAsMCwxLDQuOS0uNjQ3LDQuMzA4LDQuMzA4LDAsMCwwLDEtLjA2OUExLjc2NywxLjc2NywwLDAsMCwyMS44NzksNy45YTIuNzc1LDIuNzc1LDAsMCwwLTMuMjg2LTEuODFDMTcuMjIsNi4zMzgsMTMuOTA4LDcuMywxMy45MDgsNy4zYzQuMDkzLS4wMzUsNC43NzkuMDMzLDUuMDg1LjQ2MS4xODEuMjUzLS4wODIuNi0xLjE3NC43NzctMS4xODkuMTk0LTMuNjU5LjQyOC0zLjY1OS40MjgtMi4zNy4xNDEtNC4wNC4xNS00LjU0LDEuMjEtLjMyNy42OTMuMzQ5LDEuMy42NDUsMS42ODhhMTIuNzI4LDEyLjcyOCwwLDAsMCw0LjIyNSwyLjdjLjQzOC4yMDgsMS43MjMuNiwxLjcyMy42YTExLjUyLDExLjUyLDAsMCwwLTguMSwyLjI4N2MtMS44MDcsMS42NzItMS4wMDgsMy42NjUsMi42OTUsNC44OTFhMTIuNzU1LDEyLjc1NSwwLDAsMCw2LjUzNC43NzJjMS45MjItLjEsMi4yMjQtLjA0MiwyLjI0NC4xMTYuMDI3LjIyMi0yLjEzNC43NzMtMi43MjQuOTQ0LTEuNS40MzMtNS40MzYsMS4zMDctNS40NTYsMS4zMTJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiTGl2ZVNjcmlwdFwiOiB7XG5cdFx0Y29sb3VyOiBcIiMzMTdlYWNcIixcblx0XHRpY29uOiBcIjxwb2x5Z29uIHBvaW50cz1cXFwiNS41MDQgMi4wMDcgOC45ODYgMiA4Ljk4NiAyMS43NDYgMTAuNzU5IDE5Ljk4NyAxMC43NTkgMy43NTUgMTIuNDk3IDMuNzU1IDEyLjQ5NyAxOC4yNCAxNC4yNTMgMTYuNDg3IDE0LjI1MyAzLjc1NSAxNS45OTcgMy43NTUgMTUuOTk3IDE0LjcyOSAxNy43MzUgMTIuOTYyIDE3LjczNSAzLjc1NSAxOS40NjEgMy43NTUgMTkuNDYxIDExLjIyNSAyMS4yNDUgOS40NjEgMjEuMjQ1IDMuNzU1IDIyLjk3MiAzLjc1NSAyMi45NzIgNy43MjMgMjQuNzM4IDUuOTc1IDI0LjczOSAzLjc1NSAyNi40ODMgMy43NTUgMjYuNDgzIDUuNDgyIDI4LjIwOSA1LjQ4MiAyOC4yMDkgNy4yNjcgMjUuOTExIDcuMjY4IDI0LjE4NCA4Ljk5MyAyOC4yMDkgOC45OTMgMjguMjA5IDEwLjcxOSAyMi40MzggMTAuNzE5IDIwLjY5OCAxMi41MDQgMjguMjA5IDEyLjUwNCAyOC4yMDkgMTQuMjMgMTguOTYxIDE0LjIzIDE3LjIwNSAxNi4wMTQgMjguMjA5IDE2LjAxNCAyOC4yMDkgMTcuNzQxIDE1LjQ1NSAxNy43NDEgMTMuNzE1IDE5LjQ5NiAyOC4yMDkgMTkuNDk2IDI4LjIwOSAyMS4yNTIgMTEuOTggMjEuMjUyIDEwLjI0MiAyMi45NzggMjkuOTgyIDIyLjk3OCAyOS45ODkgMjYuNDg5IDguOTg2IDI2LjQ4OSA4Ljk4NiAzMCA1LjUwNCAzMCA1LjUwNCAyNi40ODkgMi4wMTEgMjYuNDg5IDIuMDExIDIyLjk3OCA1LjUwNCAyMi45NzggNS41MDMgMiA1LjUwNCAyLjAwN1xcXCIgc3R5bGU9XFxcImZpbGw6IzMxN2VhY1xcXCIvPlwiLFxuXHR9LFxuXHRcIkxvZyBmaWxlXCI6IHtcblx0XHRjb2xvdXI6IFwiIzAwYmQwMlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTI5LjQsMjcuNkgyLjVWNC41SDI5LjRabS0yNS45LTFIMjguNFY1LjVIMy41WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwYmQwMlxcXCIvPjxyZWN0IHg9XFxcIjIuNVxcXCIgeT1cXFwiNS41XFxcIiB3aWR0aD1cXFwiMjYuOVxcXCIgaGVpZ2h0PVxcXCIxLjlcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCIxMS4zMzNcXFwiIHk9XFxcIjkuNVxcXCIgd2lkdGg9XFxcIjguMTY3XFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCIxMS4zMzNcXFwiIHk9XFxcIjEyLjA4M1xcXCIgd2lkdGg9XFxcIjEyLjVcXFwiIGhlaWdodD1cXFwiMVxcXCIgc3R5bGU9XFxcImZpbGw6IzAwYmQwMlxcXCIvPjxyZWN0IHg9XFxcIjExLjMzM1xcXCIgeT1cXFwiMTQuNzVcXFwiIHdpZHRoPVxcXCIxMC42MTdcXFwiIGhlaWdodD1cXFwiMVxcXCIgc3R5bGU9XFxcImZpbGw6IzAwYmQwMlxcXCIvPjxyZWN0IHg9XFxcIjExLjMzM1xcXCIgeT1cXFwiMTcuNTgzXFxcIiB3aWR0aD1cXFwiMTQuMTY3XFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCIxMS4zMzNcXFwiIHk9XFxcIjIwLjVcXFwiIHdpZHRoPVxcXCI5LjgzNFxcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBiZDAyXFxcIi8+PHJlY3QgeD1cXFwiMTEuNVxcXCIgeT1cXFwiMjMuMDgzXFxcIiB3aWR0aD1cXFwiMTIuMTY3XFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCI1LjVcXFwiIHk9XFxcIjkuNVxcXCIgd2lkdGg9XFxcIjQuMzMzXFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCI1LjVcXFwiIHk9XFxcIjEyLjA4M1xcXCIgd2lkdGg9XFxcIjQuMzMzXFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCI1LjVcXFwiIHk9XFxcIjEyLjA4M1xcXCIgd2lkdGg9XFxcIjQuMzMzXFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCI1LjVcXFwiIHk9XFxcIjE0LjY2N1xcXCIgd2lkdGg9XFxcIjQuMzMzXFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCI1LjVcXFwiIHk9XFxcIjE3LjI1XFxcIiB3aWR0aD1cXFwiNC4zMzNcXFwiIGhlaWdodD1cXFwiMVxcXCIgc3R5bGU9XFxcImZpbGw6IzAwYmQwMlxcXCIvPjxyZWN0IHg9XFxcIjUuNVxcXCIgeT1cXFwiMjAuNVxcXCIgd2lkdGg9XFxcIjQuMzMzXFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz48cmVjdCB4PVxcXCI1LjVcXFwiIHk9XFxcIjIzLjA4M1xcXCIgd2lkdGg9XFxcIjQuMzMzXFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGJkMDJcXFwiLz5cIixcblx0fSxcblx0XCJMT0xDT0RFXCI6IHtcblx0XHRjb2xvdXI6IFwiIzhkMjcwMVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIxLjMsMy43M2EzLjk0LDMuOTQsMCwwLDEsMS4wNDEtLjYyLDguNDM1LDguNDM1LDAsMCwxLC41NTYsMy4zODUsMjQuODY1LDI0Ljg2NSwwLDAsMS0uNjQzLDUuMDE5Yy0uMzY4LS4xOC0uNzM2LS4zNjQtMS4xLS41NTRhMTEuNzU0LDExLjc1NCwwLDAsMCwuMjczLTMuNzQ3LDMuMDgsMy4wOCwwLDAsMC0uMjU1LS44NjUsNS4xNDIsNS4xNDIsMCwwLDAtMi4wMTYsMi4wN2MtLjMxOS0uMjQtLjY1Mi0uNDU5LS45ODUtLjY3NkExNS43MTYsMTUuNzE2LDAsMCwxLDIxLjMsMy43M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZGVkZWRcXFwiLz48cGF0aCBkPVxcXCJNMTkuNDUxLDguNmE0LjU3NCw0LjU3NCwwLDAsMSwxLjUwOS0xLjU2Myw2LjY4NSw2LjY4NSwwLDAsMSwuMDksMi42NzFDMjAuNTE3LDkuMzQzLDE5Ljk3NSw4Ljk4NywxOS40NTEsOC42WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VkZWRlZFxcXCIvPjxwYXRoIGQ9XFxcIk0xNi40NjEsMTAuMDc2Yy0uMDM4LTEuMTM0LS4wMzEtMi4yNjktLjAyNi0zLjQtLjkuNDkzLTEuNzU4LDEuMDcxLTIuNjQ4LDEuNTg5LS40NTMuMjctLjkwOC41MzYtMS4zNi44MDguMjI0LS4xNjMuNDU3LS4zMTIuNjktLjQ2Mi0uODYxLTEuMjI0LTEuOTcxLTIuNS0zLjUzLTIuNzQ4YTEwLjk2NCwxMC45NjQsMCwwLDAtLjM2NSw1LjE0N2MuMzE4LS4xOTUuNjMzLS40Ljk2Mi0uNTcyLS40NzQuMzE5LS45NjQuNjE1LTEuNDQ2LjkyLS45NTcuNi0xLjkyMiwxLjE5Mi0yLjg5MiwxLjc3N2ExLjIzMiwxLjIzMiwwLDAsMC0uMzkxLjMyYy0uMSwxLjM5NS0uMzQsNC4zOTItLjM0LDQuMzkyLS4yNTQsMy42NjgtLjUyMiw3LjMzNi0uODI2LDExLDQuMDYyLjM0Myw4LjExOC43NDIsMTIuMTc5LDEuMDc2QzE2LjQ1OCwyMy4zLDE2LjQ3MiwxNi42OSwxNi40NjEsMTAuMDc2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VkZWRlZFxcXCIvPjxwYXRoIGQ9XFxcIk0yMS4xLDIuOTc3QTUuODg0LDUuODg0LDAsMCwxLDIyLjcwNiwyYTEwLjA2NCwxMC4wNjQsMCwwLDEsLjc3Miw0LjYwNiwyNC41OTEsMjQuNTkxLDAsMCwxLS41MDgsNC40NTljMS4yLjg0NiwyLjQzMywxLjY0NSwzLjYxOCwyLjUwOXEuNDQsNi4zOC45MDcsMTIuNzU4Yy4wNjYuODM5LjA5NCwxLjY4LjIxNiwyLjUxMy0zLjAyOS4yNzktNi4wNTcuNTkxLTkuMDg1Ljg4NmExOS4xMzcsMTkuMTM3LDAsMCwwLTIuMTU4LjI3di0uMDgzYy0uMDEtNi42MTQsMC0xMy4yMjctLjAwNy0xOS44NDEtLjAzOC0xLjEzNC0uMDMxLTIuMjY5LS4wMjYtMy40di0uMWMuNDA2LjI5Mi44MjYuNTYyLDEuMjQzLjgzOUExNi4yNzQsMTYuMjc0LDAsMCwxLDIxLjEsMi45NzdabS4yLjc1MmExNS43MTYsMTUuNzE2LDAsMCwwLTMuMTI4LDQuMDExYy4zMzQuMjE3LjY2Ni40MzcuOTg1LjY3NmE1LjE0Miw1LjE0MiwwLDAsMSwyLjAxNi0yLjA3LDMuMDgsMy4wOCwwLDAsMSwuMjU1Ljg2NSwxMS43NTQsMTEuNzU0LDAsMCwxLS4yNzMsMy43NDdjLjM2NC4xOS43MzEuMzc0LDEuMS41NTRhMjQuODY1LDI0Ljg2NSwwLDAsMCwuNjQzLTUuMDE5LDguNDM1LDguNDM1LDAsMCwwLS41NTYtMy4zODVBMy45NCwzLjk0LDAsMCwwLDIxLjMsMy43M1pNMTkuNDUxLDguNmMuNTI0LjM4MywxLjA2Ni43MzksMS42LDEuMTA4YTYuNjg1LDYuNjg1LDAsMCwwLS4wOS0yLjY3MUE0LjU3NCw0LjU3NCwwLDAsMCwxOS40NTEsOC42WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPjxwYXRoIGQ9XFxcIk05LjIxOSw1LjA2MmEzLjU4MSwzLjU4MSwwLDAsMSwyLjIwNS43NDhBMTIuOSwxMi45LDAsMCwxLDEzLjc4OCw4LjI2Yy0uNDUzLjI3LS45MDguNTM2LTEuMzYuODA4LjIyNC0uMTYzLjQ1Ny0uMzEyLjY5LS40NjItLjg2MS0xLjIyNC0xLjk3MS0yLjUtMy41My0yLjc0OGExMC45NjQsMTAuOTY0LDAsMCwwLS4zNjUsNS4xNDdjLjMxOC0uMTk1LjYzMy0uNC45NjItLjU3Mi0uNDc0LjMxOS0uOTY0LjYxNS0xLjQ0Ni45MkExNC4xLDE0LjEsMCwwLDEsOS4yMTksNS4wNjJaXFxcIiBzdHlsZT1cXFwiZmlsbDojOGQyNzAxXFxcIi8+PHBhdGggZD1cXFwiTTEwLjUwNyw4LjQ3NmEyLjQ1NSwyLjQ1NSwwLDAsMSwxLjUxNy44OGwtLjM2LjJBMi42OSwyLjY5LDAsMCwwLDEwLjczOSw5YTMuMzE4LDMuMzE4LDAsMCwwLS4xNjUsMS4yODFsLS4zNDQuMTFBNy4wMjEsNy4wMjEsMCwwLDEsMTAuNTA3LDguNDc2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4xMzksMTAuNjkzYS40ODcuNDg3LDAsMCwxLC41NDIuMDEsMS41NTIsMS41NTIsMCwwLDEsLjA2Mi42Yy0uMDM5Ljc4NC4wMjQsMS41NzMtLjA3NiwyLjM1NGExLjAxMywxLjAxMywwLDAsMS0xLjAxMi44ODZjLS4yMzMtLjA1LS4yNzgtLjM0MS0uMjc4LS41NDEsMC0uNjc1LjEtMS4zNDcuMDY2LTIuMDI0QTEuMywxLjMsMCwwLDEsMTIuMTM5LDEwLjY5M1ptLjE1LDEuMDg0YS44OTEuODkxLDAsMCwwLC4yNTEtLjg2NkMxMi4yMTgsMTEuMDYxLDExLjksMTEuNTA3LDEyLjI4OSwxMS43NzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojOGQyNzAxXFxcIi8+PHBhdGggZD1cXFwiTTE0LjUsMTMuNzI4YTE3LjY3MSwxNy42NzEsMCwwLDEsMS45MjgtLjgyMmMtLjAyNC4wNjQtLjA2OS4xOTEtLjA5Mi4yNTUtLjY0OS4zNTgtMS4zNi42LTIuMDIxLjkzOGExMi4xMTgsMTIuMTE4LDAsMCwwLTMuMjM4LDIuMjQ4QTcuMiw3LjIsMCwwLDEsMTAsMTcuMzgxYTQuMTY2LDQuMTY2LDAsMCwxLC45OC0xLjI0NkExMi43MjcsMTIuNzI3LDAsMCwxLDE0LjUsMTMuNzI4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPjxwYXRoIGQ9XFxcIk03LjYyOCwxMy4yMzFhLjk4OS45ODksMCwwLDEsLjU5NC0uMTUyLDE4LjExNCwxOC4xMTQsMCwwLDEtLjEsMi42NTQuNzEzLjcxMywwLDAsMS0uODkyLjY1OCwyMS4xLDIxLjEsMCwwLDEsLjA4Mi0yLjIyNkExLjM4MywxLjM4MywwLDAsMSw3LjYyOCwxMy4yMzFabS4xNzkuODMxYy4yNjgtLjExMi4zMTktLjQxMy40MTItLjY1NEM3LjgyLDEzLjMxMiw3Ljc3NSwxMy43ODMsNy44MDcsMTQuMDYyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC44MjMsMTcuMDk0YTEzLjkzNCwxMy45MzQsMCwwLDEsNC42MTItMS45NjhjLS4wMS4wNjgtLjAyOS4yMDYtLjAzOS4yNzRhMTQuMjczLDE0LjI3MywwLDAsMC00LjQ3NSwxLjkxNCwyLjYyNiwyLjYyNiwwLDAsMS0uNjgxLjM0M0MxMC4zLDE3LjM1NiwxMC42LDE3LjI0OSwxMC44MjMsMTcuMDk0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPjxwYXRoIGQ9XFxcIk01LjI2NCwxNy41OUE1LjE0NCw1LjE0NCwwLDAsMSw4LDE3LjFhMS41LDEuNSwwLDAsMSwxLjE0Mi42NjVBNi44NTQsNi44NTQsMCwwLDAsNy42LDE3LjI3OGE2Ljk2Nyw2Ljk2NywwLDAsMC0yLjQ4NC41NjRaXFxcIiBzdHlsZT1cXFwiZmlsbDojOGQyNzAxXFxcIi8+PHBhdGggZD1cXFwiTTEwLjU3OCwxNy43MjVhOS41OSw5LjU5LDAsMCwxLDMuNjEtLjU2NmMuMjQuMDIxLjMyMS4yLjMxMy40MjRhMy4yMzgsMy4yMzgsMCwwLDAtMS45NTYtLjA5LDIxLjY4OCwyMS42ODgsMCwwLDAtMi41NTcuNjU4QzkuOTk1LDE3LjgyOSwxMC4zNDUsMTcuODA5LDEwLjU3OCwxNy43MjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojOGQyNzAxXFxcIi8+PHBhdGggZD1cXFwiTTkuMjY4LDE3LjY3NmMuMTQ5LS4xNzYuNTMzLS4zMzIuNjY0LS4wNjJhMS4zLDEuMywwLDAsMS0uNTE2Ljk5M0M5LjI2OCwxOC4zMzcsOC45NzMsMTcuOTUyLDkuMjY4LDE3LjY3NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4ZDI3MDFcXFwiLz48cGF0aCBkPVxcXCJNNS43NDQsMTguNjI5YTUuOSw1LjksMCwwLDEsMy4xODItLjYxOGMtLjE4Mi4yMzUtLjQ5My4xNzgtLjc1MS4yMDhhNS42NjMsNS42NjMsMCwwLDAtMS43Mi4zM2MtLjM0NC4xMjgtLjY2NS4zMS0xLjAyLjQwOUEuNi42LDAsMCwxLDUuNzQ0LDE4LjYyOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiM4ZDI3MDFcXFwiLz48cGF0aCBkPVxcXCJNNi45LDE5LjExNGE5LjY3Niw5LjY3NiwwLDAsMSwyLjItLjg1NGMtLjEuMy0uNDQxLjMzOC0uNy40NDRhNy44MzksNy44MzksMCwwLDAtMi41NjQsMS40MTVDNS45MzgsMTkuNTg0LDYuNDg4LDE5LjM2OSw2LjksMTkuMTE0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS42MzUsMTkuN2EzLjExLDMuMTEsMCwwLDAsMS45MS0xLjM4M2MuMzQ3LS4xLjI3My4yNzUuMjYuNDk0YTIuMDU2LDIuMDU2LDAsMCwxLS45NSwxLjAzNiwxMi4zNjUsMTIuMzY1LDAsMCwxLTEuODI3LDYuNDE5QTIuMzQyLDIuMzQyLDAsMCwxLDguODc5LDI3LjVhMi4yNTEsMi4yNTEsMCwwLDEtMS41MzUtMS40OSwxMC44OTQsMTAuODk0LDAsMCwxLS42OS00LjY2NWMtLjE1Ny0uMTEyLS4zNjktLjE3OS0uNDYtLjM2Mi0uMTMtLjIuMDExLS40MjUuMDQ3LS42MzEuMTkuMTUxLjM0NS4zOTIuNjA2LjQyYTMuNjE3LDMuNjE3LDAsMCwwLDEuODYzLS40LDEuNTg4LDEuNTg4LDAsMCwwLC43MDktLjY2MiwzLjg4MSwzLjg4MSwwLDAsMCwuNDMxLjI2NkE0LjI4LDQuMjgsMCwwLDAsMTEuNjM1LDE5LjdabS0yLjIuODM1YTQuMTMyLDQuMTMyLDAsMCwxLTIuNDYyLjgwOSwxMS4wNDksMTEuMDQ5LDAsMCwwLC4zNTgsMy41MjYsMy4yMjYsMy4yMjYsMCwwLDEsLjktMS4yODIsMi4wNTUsMi4wNTUsMCwwLDEsMi4zLS4yLDIuMywyLjMsMCwwLDEsLjg4NCwxLjE3MiwxNC42NTksMTQuNjU5LDAsMCwwLDEuMDA1LTQuNDg5QTUuMTY3LDUuMTY3LDAsMCwxLDkuNDM1LDIwLjUzMlptLS4zMjksMy4yNmEyLjI3MywyLjI3MywwLDAsMC0xLjUsMS40MzRjLS4xMjMuMjY5LjEuNTE3LjIyNS43MzguMzMxLjQ2Mi43OTUsMSwxLjQzMS44OTNhMi44NjgsMi44NjgsMCwwLDAsMS43NjktMS42QTEuNiwxLjYsMCwwLDAsOS4xMDYsMjMuNzkyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzhkMjcwMVxcXCIvPlwiLFxuXHR9LFxuXHRcIkx1YVwiOiB7XG5cdFx0Y29sb3VyOiBcIiMwNTAwODBcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xNi41LDMwbC0uMDExLS4zMjFjLjQtLjAxNC44LS4wNDUsMS4xOS0uMDk0bC4wMzkuMzE5QzE3LjMxMiwyOS45NTIsMTYuOSwyOS45ODQsMTYuNSwzMFptLTEuMjIyLS4wMTFjLS40LS4wMjEtLjgxNC0uMDYxLTEuMjE2LS4xMThsLjA0NS0uMzE4Yy4zOTMuMDU1Ljc5My4wOTQsMS4xODguMTE1Wk0xOC45MiwyOS43bC0uMDY3LS4zMTRjLjM4Ny0uMDgzLjc3Ni0uMTg0LDEuMTU1LS4zbC4wOTQuMzA3QzE5LjcxNCwyOS41MTEsMTkuMzE2LDI5LjYxNSwxOC45MiwyOS43Wm0tNi4wNjMtLjA1M2MtLjQtLjA5MS0uNzkxLS4yLTEuMTc3LS4zMjZsLjEtLjMwNmMuMzc3LjEyMi43NjQuMjMsMS4xNS4zMTlabTguNC0uNjY1LS4xMjEtLjNjLjM2NC0uMTQ4LjcyOC0uMzE0LDEuMDgtLjQ5M2wuMDA2LDAsLjE0NS4yODYsMCwwQzIyLDI4LjY2MSwyMS42MjYsMjguODMxLDIxLjI1MywyOC45ODJabS0xMC43MTgtLjA4OGMtLjM3NC0uMTU4LS43NDUtLjMzNS0xLjEtLjUyNGwuMTUtLjI4NGMuMzUuMTg2LjcxMy4zNTgsMS4wNzguNTEyWm0xMi44OTMtMS4wMjEtLjE3LS4yNzNjLjMzNy0uMjEuNjY4LS40MzcuOTg0LS42NzVsLjE5My4yNTdDMjQuMTExLDI3LjQyNSwyMy43NzIsMjcuNjU4LDIzLjQyOCwyNy44NzNaTTguMzc5LDI3Ljc1MWMtLjM0MS0uMjItLjY3Ni0uNDU5LTEtLjcwOGwuMi0uMjUzYy4zMTIuMjQzLjY0LjQ3Ni45NzIuNjkxWm0xNy0xLjM0Ni0uMjE1LS4yMzljLjI5NC0uMjY1LjU4LS41NDYuODUxLS44MzZsLjIzNS4yMTlDMjUuOTcyLDI1Ljg0NiwyNS42NzksMjYuMTM0LDI1LjM3OCwyNi40Wk02LjQ1NCwyNi4yNTJjLS4zLS4yNzYtLjU4NS0uNTY5LS44NTYtLjg3bC4yMzktLjIxNWMuMjY1LjI5NC41NDcuNTguODM2Ljg1Wk0yNy4wNDEsMjQuNjJsLS4yNTMtLjJjLjI0NC0uMzEyLjQ3Ni0uNjM5LjY5Mi0uOTcybC4yNy4xNzVDMjcuNTI5LDIzLjk2NiwyNy4yOSwyNC4zLDI3LjA0MSwyNC42MlpNNC44MiwyNC40MzljLS4yNDQtLjMyNC0uNDc2LS42NjItLjY5Mi0xLjAwN2wuMjcyLS4xN2MuMjEuMzM3LjQzOC42NjguNjc2Ljk4NFptMjMuNTQ3LTEuODY3LS4yODQtLjE1MWMuMTg2LS4zNS4zNTgtLjcxMy41MTMtMS4wNzhsLjMuMTI1QzI4LjczNSwyMS44NDMsMjguNTU4LDIyLjIxNCwyOC4zNjgsMjIuNTcyWm0tMjQuODQxLS4yLS4wMDYtLjAxMmMtLjE4My0uMzU5LS4zNTItLjcyOC0uNS0xLjFsLjMtLjEyMWMuMTQ3LjM2Mi4zMTIuNzI0LjQ5MSwxLjA3NGwuMDA2LjAxMlpNMjkuMzIsMjAuMzI1bC0uMzA2LS4xYy4xMjItLjM3Ny4yMy0uNzY0LjMxOS0xLjE1bC4zMTMuMDcyQzI5LjU1NSwxOS41NDMsMjkuNDQ2LDE5LjkzOSwyOS4zMiwyMC4zMjVaTTIuNjA4LDIwLjEwN2MtLjEyLS4zODgtLjIyMy0uNzg2LS4zMDgtMS4xODJsLjMxNC0uMDY3Yy4wODMuMzg3LjE4NC43NzYuMywxLjE1NVpNMjkuODcsMTcuOTQ2bC0uMzE4LS4wNDVjLjA1Ni0uMzkzLjA5NC0uNzkzLjExNS0xLjE4OGwuMzIxLjAxN0MyOS45NjcsMTcuMTM1LDI5LjkyNywxNy41NDQsMjkuODcsMTcuOTQ2Wk0yLjEsMTcuNzJjLS4wNS0uNC0uMDgyLS44MTItLjEtMS4yMThsLjMyMS0uMDExYy4wMTQuNC4wNDYuOC4wOTQsMS4xOVptMjcuNTgyLTIuMmMtLjAxNC0uNC0uMDQ1LS44LS4wOTMtMS4xOWwuMzE5LS4wMzljLjA0OS40LjA4Mi44MTMuMSwxLjIxOFpNMi4zMzEsMTUuMywyLjAxLDE1LjI4Yy4wMjEtLjQwNS4wNjEtLjgxNC4xMTctMS4yMTZsLjMxOC4wNDVDMi4zOSwxNC41LDIuMzUyLDE0LjksMi4zMzEsMTUuM1ptMjcuMDU3LTIuMTQ0Yy0uMDgzLS4zODctLjE4NC0uNzc2LS4zLTEuMTU1TDI5LjQsMTEuOWMuMTE5LjM4OC4yMjMuNzg2LjMwNywxLjE4M1pNMi42NjMsMTIuOTM0bC0uMzEzLS4wNzJjLjA5MS0uNC4yLS43OTEuMzI2LTEuMTc3bC4zMDYuMUMyLjg1OSwxMi4xNjEsMi43NTIsMTIuNTQ4LDIuNjYzLDEyLjkzNFptMjYuMDI2LTIuMDYyYy0uMTQ5LS4zNjYtLjMxNS0uNzMyLS41LTEuMDg2bC4yODYtLjE0NmMuMTg1LjM2My4zNTUuNzM2LjUwNywxLjExMVpNMy40LDEwLjY2NWwtLjMtLjEyNWMuMTU4LS4zNzQuMzM0LS43NDUuNTI0LTEuMWwuMjg0LjE1QzMuNzI0LDkuOTM3LDMuNTUyLDEwLjMsMy40LDEwLjY2NVpNNC41MTMsOC41NTdsLS4yNy0uMTc0Yy4yMi0uMzQxLjQ1OC0uNjc2LjcwNy0xbC4yNTQuMkM0Ljk2MSw3LjksNC43MjgsOC4yMjQsNC41MTMsOC41NTdaTTUuOTc3LDYuNjc2bC0uMjM1LS4yMTljLjI3Ni0uMy41NjktLjU4NS44Ny0uODU3bC4yMTUuMjM5QzYuNTMzLDYuMSw2LjI0Nyw2LjM4Niw1Ljk3Nyw2LjY3NlptMS43Ny0xLjYtLjE5My0uMjU3Yy4zMjMtLjI0NC42NjItLjQ3NywxLjAwNy0uNjkybC4xNy4yNzJDOC4zOTQsNC42MTQsOC4wNjMsNC44NDEsNy43NDcsNS4wNzlabTE1LjcwNS0uNTU4LS4wMTgtLjAxMi4xNzUtLjI3LjAxOC4wMTFabS0xLjA0Ny0uNjE2Yy0uMzUtLjE4Ni0uNzEzLS4zNTgtMS4wNzgtLjUxMmwuMTI1LS4zYy4zNzQuMTU4Ljc0NS4zMzQsMS4xLjUyNFpNOS43NjksMy44MTVsLS4xNDYtLjI4Ni4wMTgtLjAwOWMuMzU2LS4xODEuNzI0LS4zNDksMS4wOTMtLjVsLjEyMS4zYy0uMzYxLjE0Ny0uNzIuMzExLTEuMDY4LjQ4OFptMTAuNDQtLjgzOGMtLjM3Ny0uMTIyLS43NjQtLjIyOS0xLjE1MS0uMzE3bC4wNzItLjMxM2MuNC4wOTEuNzkyLjIsMS4xNzguMzI1Wm0tOC4yMjktLjA2LS4wOTQtLjMwN2MuMzg4LS4xMTkuNzg2LS4yMjMsMS4xODItLjMwOGwuMDY3LjMxNEMxMi43NDcsMi43LDEyLjM1OSwyLjgsMTEuOTgsMi45MTdabTUuOS0uNDczYy0uMzkzLS4wNTUtLjc5My0uMDkyLTEuMTg4LS4xMTNsLjAxNi0uMzIxYy40MDUuMDIxLjgxNC4wNTksMS4yMTYuMTE1Wm0tMy41NzItLjAyNi0uMDQtLjMxOWMuNC0uMDUuODEyLS4wODMsMS4yMTgtLjFsLjAxMi4zMjFDMTUuMTA2LDIuMzM3LDE0LjcwNSwyLjM2OSwxNC4zMTIsMi40MThaXFxcIiBzdHlsZT1cXFwiZmlsbDpncmF5XFxcIi8+PGNpcmNsZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCIxNS45OThcXFwiIHI9XFxcIjEwLjcwOFxcXCIgc3R5bGU9XFxcImZpbGw6bmF2eVxcXCIvPjxjaXJjbGUgY3g9XFxcIjIwLjQzNVxcXCIgY3k9XFxcIjExLjU2MlxcXCIgcj1cXFwiMy4xMzZcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48Y2lyY2xlIGN4PVxcXCIyNi43MDhcXFwiIGN5PVxcXCI1LjI5XFxcIiByPVxcXCIzLjEzN1xcXCIgc3R5bGU9XFxcImZpbGw6bmF2eVxcXCIvPjxwYXRoIGQ9XFxcIk0xMy4xLDIxLjM1MnYtLjc5SDkuNjI5VjE0LjMyNmgtLjl2Ny4wMjZIMTMuMVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNy45MTYsMjEuMzUyVjE2LjNoLS44djIuNzg1YzAsMS4wMzEtLjU0LDEuNzA2LTEuMzc4LDEuNzA2QS45NS45NSwwLDAsMSwxNC43LDE5LjhWMTYuM2gtLjh2My44MTdjMCwuODM4LjYyNiwxLjM3OCwxLjYwOSwxLjM3OGExLjg2MywxLjg2MywwLDAsMCwxLjY4Ny0uOTI1di43ODFoLjcyM1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0yMy43OTEsMjEuMzMzdi0uNjA3YS42NjQuNjY0LDAsMCwxLS4xNzMuMDE5Yy0uMjc5LDAtLjQzNC0uMTQ1LS40MzQtLjRWMTcuNTM2YzAtLjktLjY1NS0xLjM3OC0xLjktMS4zNzgtMS4yMjQsMC0xLjk3Ni40NzItMi4wMjQsMS42MzhoLjgxYy4wNjctLjYxNy40MzQtLjksMS4xODUtLjkuNzIzLDAsMS4xMjguMjcsMS4xMjguNzUydi4yMTJjMCwuMzM3LS4yLjQ4Mi0uODM4LjU1OWE1Ljc2Myw1Ljc2MywwLDAsMC0xLjYxOS4zMDgsMS4zMjcsMS4zMjcsMCwwLDAtLjg4NywxLjMxMWMwLC45MTYuNjM2LDEuNDU1LDEuNjU4LDEuNDU1YTIuMzYzLDIuMzYzLDAsMCwwLDEuNzE1LS43NDIuODU1Ljg1NSwwLDAsMCwuODI5LjY2NSwxLjk2NywxLjk2NywwLDAsMCwuNTQ5LS4wODdtLTEuNDA3LTEuNzI1YTEuMzY2LDEuMzY2LDAsMCwxLTEuNTEzLDEuMTg1Yy0uNjI2LDAtLjk5My0uMjIyLS45OTMtLjc3MSwwLS41My4zNTctLjc2MSwxLjIxNC0uODg3YTQsNCwwLDAsMCwxLjI5MS0uMjc5di43NTJcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0XHRpbmxpbmVDb21tZW50OiBbXG5cdFx0XHRcIi0tXCIsXG5cdFx0XSxcblx0fSxcblx0XCJNYXJrZG93blwiOiB7XG5cdFx0Y29sb3VyOiBcIiM3NTU4MzhcIixcblx0XHRpY29uOiBcIjxyZWN0IHg9XFxcIjIuNVxcXCIgeT1cXFwiNy45NTVcXFwiIHdpZHRoPVxcXCIyN1xcXCIgaGVpZ2h0PVxcXCIxNi4wOTFcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiM3NTU4MzhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjUuOTA5IDIwLjYzNiA1LjkwOSAxMS4zNjQgOC42MzYgMTEuMzY0IDExLjM2NCAxNC43NzMgMTQuMDkxIDExLjM2NCAxNi44MTggMTEuMzY0IDE2LjgxOCAyMC42MzYgMTQuMDkxIDIwLjYzNiAxNC4wOTEgMTUuMzE4IDExLjM2NCAxOC43MjcgOC42MzYgMTUuMzE4IDguNjM2IDIwLjYzNiA1LjkwOSAyMC42MzZcXFwiIHN0eWxlPVxcXCJmaWxsOiM3NTU4MzhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIyLjk1NSAyMC42MzYgMTguODY0IDE2LjEzNiAyMS41OTEgMTYuMTM2IDIxLjU5MSAxMS4zNjQgMjQuMzE4IDExLjM2NCAyNC4zMTggMTYuMTM2IDI3LjA0NSAxNi4xMzYgMjIuOTU1IDIwLjYzNlxcXCIgc3R5bGU9XFxcImZpbGw6Izc1NTgzOFxcXCIvPlwiLFxuXHR9LFxuXHRcIk1BVExBQlwiOiB7XG5cdFx0Y29sb3VyOiBcIiNlZjZjM2VcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjE2LjgwM1xcXCIgeTE9XFxcIjE2LjYzMVxcXCIgeDI9XFxcIjE1LjAxM1xcXCIgeTI9XFxcIjIyLjQxMVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLCAwLCAwLCAtMSwgMCwgMzIpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNTEyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjIzXFxcIiBzdG9wLWNvbG9yPVxcXCIjNTIzXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjM2XFxcIiBzdG9wLWNvbG9yPVxcXCIjNTM0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjUxXFxcIiBzdG9wLWNvbG9yPVxcXCIjNjQ1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjY2XFxcIiBzdG9wLWNvbG9yPVxcXCIjNTY4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjg0XFxcIiBzdG9wLWNvbG9yPVxcXCIjMjlkXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCIyOS43MVxcXCIgeTE9XFxcIjE4Ljk4M1xcXCIgeDI9XFxcIjExLjcxXFxcIiB5Mj1cXFwiMTQuNTYzXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwLjA4MVxcXCIgc3RvcC1jb2xvcj1cXFwiI2MzM1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4xODlcXFwiIHN0b3AtY29sb3I9XFxcIiNkZTUyMzlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzEzXFxcIiBzdG9wLWNvbG9yPVxcXCIjZjA2ZTNlXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQyMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZhODA0MlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41XFxcIiBzdG9wLWNvbG9yPVxcXCIjZmU4NjQzXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjU4XFxcIiBzdG9wLWNvbG9yPVxcXCIjZmE3ZjQyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjY5NlxcXCIgc3RvcC1jb2xvcj1cXFwiI2VmNmMzZVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC44MzNcXFwiIHN0b3AtY29sb3I9XFxcIiNkYzRjMzdcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTE2XFxcIiBzdG9wLWNvbG9yPVxcXCIjY2YzNjMzXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9tYXRsYWI8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yLDE3LjU1bDcuOTctMy4yMmEyMC43LDIwLjcsMCwwLDEsMi43Mi0yLjk1Yy42Ni0uMzUsMS45LS4xNiw0LjE3LTIuOTgsMi4yLTIuNzUsMi45LTUuMSwzLjkzLTUuMSwxLjYzLDAsMi44MywzLjUyLDQuNjUsOC44NUExMTUuNjI5LDExNS42MjksMCwwLDAsMzAsMjQuMTJjLTEuOS0xLjc3LTMuNTItMy42OC01LjM3LTMuNjMtMS43Mi4wNC0zLjYzLDIuMDgtNS43Miw0LjctMS42NiwyLjEtMy44NiwzLjU0LTQuNzIsMy41MSwwLDAtMi4yMi02LjI4LTQuMDgtNy4zYTIuNjQxLDIuNjQxLDAsMCwwLTIuMzkuMkwyLDE3LjU0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzQ5ZFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS44LDQuMDJjLS42Ny45LTEuNDgsMi41NS0yLjk0LDQuMzgtMi4yNywyLjgyLTMuNSwyLjYzLTQuMTcsMi45OGExOS42NzQsMTkuNjc0LDAsMCwwLTIuNzIsMi45NWwzLjMsMi40MWMyLjgtMy44Miw0LjMtNy45Niw1LjQ3LTEwLjY0QTEzLjU3OSwxMy41NzksMCwwLDEsMTkuOCw0LjAyWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0yMC44LDMuM2MtMi4xOCwwLTMuNjcsMTEuNDgtMTEuNzIsMTcuODksMi4yNi0uMzcsNC4yMiw1LjI0LDUuMTIsNy41MSw0LS42OCw3LjItOC4zMywxMC40My04LjIxLDEuODUuMDcsMy40NywxLjg2LDUuMzcsMy42M0MyNS42NiwxNSwyMy42MywzLjMsMjAuOCwzLjNaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2IpXFxcIi8+XCIsXG5cdFx0aW5saW5lQ29tbWVudDogW1xuXHRcdFx0XCIlXCIsXG5cdFx0XSxcblx0fSxcblx0XCJNQVhTY3JpcHRcIjoge1xuXHRcdGNvbG91cjogXCIjMDA2OTZiXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTQuNCw3LjU2OCwyMC4yMTIsMkg3LjI3M0w0Ljg0OCw3LjUzNmw5LjU1Ny4wMzJaTTQuODQ4LDcuNTM2bDYuODQ0LDIuNkwxNC40LDcuNTY4bS0uMDEzLDMuNjIyLTIuNy0xLjA1M0w1LjI2MywxNi4xbDYuMjg2LDUuODIzLDIuODA4LTEuMUwxNC40LDcuNTY4bTAsMCwxMi44LDguMzc2TDIwLjIxMiwyTTI3LjIsMTUuOTQ0LDE0LjM5MSwxMS4xOW0tLjAzNSw5LjYzNi0uMDMyLDMuNjg1TTIwLjIyOCwzMGwtOC42NzktOC4wNzNMNC44LDI0LjQ2NCw3LjI1NywzMFptMCwwTDI3LjIsMTUuOTQ0LDE0LjMyNSwyNC41MTJNMjcuMiwxNS45NDQsMTQuMzU3LDIwLjgyNlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzFkMWQxYjtzdHJva2UtbWl0ZXJsaW1pdDoyMi45MjU1ODQ3OTMwOTA4MjtzdHJva2Utd2lkdGg6MC4wMjgzNDk5OTkzMzgzODg0NDNweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTQuMzkxIDExLjE5IDI3LjIgMTUuOTQ0IDE0LjQwNSA3LjU2OCAxNC4zOTEgMTEuMTkgMTQuMzkxIDExLjE5XFxcIiBzdHlsZT1cXFwiZmlsbDojMTgxYjE3O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNy4yIDE1Ljk0NCAxNC4zNTcgMjAuODI2IDE0LjMyNSAyNC41MDkgMTQuMzI2IDI0LjUxMSAyNy4yIDE1Ljk0NCAyNy4yIDE1Ljk0NFxcXCIgc3R5bGU9XFxcImZpbGw6IzFhMWQxYTtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTQuNDA1IDcuNTY4IDI3LjIgMTUuOTQ0IDIwLjIxMiAyIDE0LjQwNSA3LjU2OCAxNC40MDUgNy41NjhcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDVmNWU7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjI3LjIgMTUuOTQ0IDE0LjMyNiAyNC41MTEgMjAuMjI4IDMwIDI3LjIgMTUuOTQ0IDI3LjIgMTUuOTQ0XFxcIiBzdHlsZT1cXFwiZmlsbDojMDA0MjQyO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNC4zNTcgMjAuODI2IDI3LjIgMTUuOTQ0IDE0LjM5MSAxMS4xOSAxNC4zNTcgMjAuODI2IDE0LjM1NyAyMC44MjZcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDUxNTI7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE0LjM1NyAyMC44MjYgMTQuMzkxIDExLjE5IDExLjY5MiAxMC4xMzcgNS4yNjMgMTYuMTA0IDExLjU0OSAyMS45MjcgMTQuMzU3IDIwLjgyNiAxNC4zNTcgMjAuODI2XFxcIiBzdHlsZT1cXFwiZmlsbDojMDA2OTZiO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxMS42OTIgMTAuMTM3IDE0LjM5MSAxMS4xOSAxNC40MDUgNy41NjggMTEuNjkyIDEwLjEzNyAxMS42OTIgMTAuMTM3XFxcIiBzdHlsZT1cXFwiZmlsbDojMWIyNzI1O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNC4zNTcgMjAuODI2IDExLjU0OSAyMS45MjcgMTQuMzI1IDI0LjUwOSAxNC4zNTcgMjAuODI2IDE0LjM1NyAyMC44MjZcXFwiIHN0eWxlPVxcXCJmaWxsOiMxYzI2MjQ7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE0LjMyNSAyNC41MTIgNC44IDI0LjQ2NCA3LjI1NyAzMCAyMC4yMjggMzAgMTQuMzI2IDI0LjUxMSAxNC4zMjUgMjQuNTEyIDE0LjMyNSAyNC41MTJcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDY0NjY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjQuODQ4IDcuNTM2IDE0LjQwNSA3LjU2OCAyMC4yMTIgMiA3LjI3MyAyIDQuODQ4IDcuNTM2IDQuODQ4IDcuNTM2XFxcIiBzdHlsZT1cXFwiZmlsbDojMDA3NjdhO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNC40MDUgNy41NjggNC44NDggNy41MzYgMTEuNjkyIDEwLjEzNyAxNC40MDUgNy41NjggMTQuNDA1IDcuNTY4XFxcIiBzdHlsZT1cXFwiZmlsbDojMWUzOTM4O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxMS41NDkgMjEuOTI3IDQuOCAyNC40NjQgMTQuMzI1IDI0LjUxMiAxNC4zMjUgMjQuNTA5IDExLjU0OSAyMS45MjcgMTEuNTQ5IDIxLjkyN1xcXCIgc3R5bGU9XFxcImZpbGw6IzIwMzAyZTtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPlwiLFxuXHR9LFxuXHRcIk1FTFwiOiB7XG5cdFx0Y29sb3VyOiBcIiMwNmEwYTJcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi02MTEuMzQ4XFxcIiB5MT1cXFwiLTY3LjQ4OFxcXCIgeDI9XFxcIi02MDAuMjcyXFxcIiB5Mj1cXFwiLTY1LjMzNVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLjQzNywgMCwgMCwgLTEuNDM3LCA4OTQuNDE3LCAtODIuMjkyKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzBmNjA2N1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41XFxcIiBzdG9wLWNvbG9yPVxcXCIjMDVhYmFjXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjNThiZWM0XFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCItNjAzLjU5NFxcXCIgeTE9XFxcIi03Ny42OTlcXFwiIHgyPVxcXCItNjAyLjAxMVxcXCIgeTI9XFxcIi01OS42MDRcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMS40MzcsIDAsIDAsIC0xLjQzNywgODk0LjQxNywgLTgyLjI5MilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiMxMTdjODNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzIxYjViNVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzdlZDRkNFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJjXFxcIiB4MT1cXFwiLTYxMi43NTdcXFwiIHkxPVxcXCItNTkuOTA2XFxcIiB4Mj1cXFwiLTYxNi45MzRcXFwiIHkyPVxcXCItNzIuNzZcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMS40MzcsIDAsIDAsIC0xLjQzNywgODk0LjQxNywgLTgyLjI5MilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM5YWNjZDNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzcyYWViM1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzMxN2Q3ZlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJkXFxcIiB4MT1cXFwiLTYyMS44NTFcXFwiIHkxPVxcXCItNzQuNTc5XFxcIiB4Mj1cXFwiLTYxNC44NFxcXCIgeTI9XFxcIi03Mi4zMDFcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMS40MzcsIDAsIDAsIC0xLjQzNywgODk0LjQxNywgLTgyLjI5MilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiMyMTYyNmVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzE1N2M4NFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzAzYTNhNVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJlXFxcIiB4MT1cXFwiLTYxNi4zNjlcXFwiIHkxPVxcXCItNjQuNDY5XFxcIiB4Mj1cXFwiLTYyNS4zNFxcXCIgeTI9XFxcIi03Mi44MzVcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMS40MzcsIDAsIDAsIC0xLjQzNywgODk0LjQxNywgLTgyLjI5MilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiMwYjdjODFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzA2OGQ5MFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzE2YjFiMVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJmXFxcIiB4MT1cXFwiLTYwOC4wNzJcXFwiIHkxPVxcXCItNzQuNjc4XFxcIiB4Mj1cXFwiLTYwMy40ODhcXFwiIHkyPVxcXCItNzAuOTY2XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEuNDM3LCAwLCAwLCAtMS40MzcsIDg5NC40MTcsIC04Mi4yOTIpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjMGE4YThmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjVcXFwiIHN0b3AtY29sb3I9XFxcIiMwZjdjODJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMxYTU5NjRcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZ1xcXCIgeDE9XFxcIi02MDEuMTM0XFxcIiB5MT1cXFwiLTcwLjExM1xcXCIgeDI9XFxcIi02MDYuMDA4XFxcIiB5Mj1cXFwiLTY3LjA2N1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLjQzNywgMCwgMCwgLTEuNDM3LCA4OTQuNDE3LCAtODIuMjkyKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzI1NmE3N1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41XFxcIiBzdG9wLWNvbG9yPVxcXCIjMGQ5NDk5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjMDZhMGEyXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9tYXlhPC90aXRsZT48cGF0aCBkPVxcXCJNMjEuNiwzLjQ2MkgzMEwxOC43NjcsMjQuMjExcy0xLjg5My01LjUtMi43MDYtNy40NTlcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMjMuNjY5LDI5LjExOEgzMFYzLjQ2MkMyOS45OTUsMTYuODY5LDI0LjM2LDI5LjExOCwyMy42NjksMjkuMTE4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOC43NjcsMjQuMjExSDEzLjU0MUwyLDMuNDYyYzIuMDQ3LS4yNiw2LjEzNS0uNjExLDguMTYtLjc3NlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYylcXFwiLz48cGF0aCBkPVxcXCJNOC42OTMsMTYuMDE5QzYuOTYsMjIuODY2LDEuOTk1LDI5LjMyLDIsMjkuMzE0YzUuNzUyLDAsNi45OTEtLjgzNSw2Ljk5MS0xLjI3NlYxNi41NEM4Ljg5LDE2LjM3LDguNzk0LDE2LjE5NCw4LjY5MywxNi4wMTlaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2QpXFxcIi8+PHBhdGggZD1cXFwiTTIsMy40NjJWMjkuMzE0YzMuMTQ3LTUuMiw0Ljk4MS04LjYsNi42LTEzLjQ1QzQuNiw4Ljc5NCwyLDMuNDYyLDIsMy40NjJaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2UpXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiMjMuMjMzIDI4LjEwMiAyMy42NjkgMjkuMTE4IDIzLjY2OSAxNS42NDcgMjMuMjMzIDE2LjM3NVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNmKVxcXCIvPjxwYXRoIGQ9XFxcIk0yMy42NDcsMTUuNjczdjEzLjRsLjAxNi4wNDNjLjQ1MiwwLDYuMzMyLTE0LjUsNi4zMzItMjUuNjU2QzI5Ljk5NSwzLjQ2MiwyNi40MDYsMTAuOTQ3LDIzLjY0NywxNS42NzNaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2cpXFxcIi8+XCIsXG5cdH0sXG5cdFwiTW9uZ29EQlwiOiB7XG5cdFx0Y29sb3VyOiBcIiM0MWEyNDdcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi02NDUuNzMyXFxcIiB5MT1cXFwiODM5LjE4OFxcXCIgeDI9XFxcIi02NTQuNTlcXFwiIHkyPVxcXCI4MzkuMjVcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoLTAuOTc3LCAtMC4zMjMsIC0wLjI5LCAwLjg3NywgLTM3NS45NDQsIC05MjguMjg3KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMC4yMzFcXFwiIHN0b3AtY29sb3I9XFxcIiM5OTk4NzVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTYzXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWI5OTc3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjY4M1xcXCIgc3RvcC1jb2xvcj1cXFwiI2EwOWY3ZVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43NjhcXFwiIHN0b3AtY29sb3I9XFxcIiNhOWE4ODlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuODM3XFxcIiBzdG9wLWNvbG9yPVxcXCIjYjdiNjlhXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjg5NlxcXCIgc3RvcC1jb2xvcj1cXFwiI2M5YzdiMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC45NDhcXFwiIHN0b3AtY29sb3I9XFxcIiNkZWRkY2JcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTk0XFxcIiBzdG9wLWNvbG9yPVxcXCIjZjhmNmViXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmJmOWVmXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCItNjQ0LjI4N1xcXCIgeTE9XFxcIjgyMy40MDVcXFwiIHgyPVxcXCItNjU3LjAyOFxcXCIgeTI9XFxcIjg0NS40NzZcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoLTAuOTc3LCAtMC4zMjMsIC0wLjI5LCAwLjg3NywgLTM3NS45NDQsIC05MjguMjg3KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzQ4YTU0N1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzNmOTE0M1xcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJjXFxcIiB4MT1cXFwiLTY0My4zODZcXFwiIHkxPVxcXCI4MzkuNDg1XFxcIiB4Mj1cXFwiLTY1Mi40MThcXFwiIHkyPVxcXCI4MzMuNDE3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KC0wLjk3NywgLTAuMzIzLCAtMC4yOSwgMC44NzcsIC0zNzUuOTQ0LCAtOTI4LjI4NylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM0MWEyNDdcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzUyXFxcIiBzdG9wLWNvbG9yPVxcXCIjNGJhNzRiXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk1NlxcXCIgc3RvcC1jb2xvcj1cXFwiIzY3YjU1NFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzY5YjY1NVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfbW9uZ288L3RpdGxlPjxwYXRoIGQ9XFxcIk0xNi42MiwzMGwtLjc1MS0uMjQ5cy4xLTMuOC0xLjI3NS00LjA2N2MtLjktMS4wNDguMTMzLTQ0Ljc0MSwzLjQyMy0uMTQ5YTIuNzEyLDIuNzEyLDAsMCwwLTEuMzMzLDEuNTIzQTE0LjEsMTQuMSwwLDAsMCwxNi42MiwzMFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMTcuMDI2LDI2LjMyOWExMy4yMjMsMTMuMjIzLDAsMCwwLDUtMTMuMjI1QzIwLjU1Niw2LjYxOSwxNy4wNzUsNC40ODcsMTYuNywzLjY3M2E5Ljc5Miw5Ljc5MiwwLDAsMS0uODI1LTEuNmwuMjc3LDE4LjA2OVMxNS41NzgsMjUuNjY0LDE3LjAyNiwyNi4zMjlaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2IpXFxcIi8+PHBhdGggZD1cXFwiTTE1LjQ4NywyNi41NjlTOS4zNjYsMjIuNCw5LjcyLDE1LjAyNUExNS41NCwxNS41NCwwLDAsMSwxNS4yMzksMy4zNzcsMS43MjUsMS43MjUsMCwwLDAsMTUuODQ2LDJjLjM4MS44Mi4zMTksMTIuMjQzLjM1OSwxMy41NzlDMTYuMzYsMjAuNzc2LDE1LjkxNiwyNS41ODgsMTUuNDg3LDI2LjU2OVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYylcXFwiLz5cIixcblx0fSxcblx0XCJuZ2lueFwiOiB7XG5cdFx0Y29sb3VyOiBcIiMwMTk2MzlcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xNS45NDgsMmguMDY1YTEwLjQxOCwxMC40MTgsMCwwLDEsLjk3Mi41MjhRMjIuNDE0LDUuNjUsMjcuODQzLDguNzc0YS43OTIuNzkyLDAsMCwxLC40MTQuNzg4Yy0uMDA4LDQuMzg5LDAsOC43NzctLjAwNSwxMy4xNjRhLjgxMy44MTMsMCwwLDEtLjM1Ni41MDdxLTUuNzczLDMuMzI0LTExLjU0Nyw2LjY0NGEuNTg3LjU4NywwLDAsMS0uNjU3LjAzN1E5LjkxMiwyNi42LDQuMTQzLDIzLjI3NGEuNy43LDAsMCwxLS40LS42NjZxMC02LjU4MiwwLTEzLjE2M2EuNjkzLjY5MywwLDAsMSwuMzg3LS42N1E5LjU1Miw1LjY1NywxNC45NzQsMi41MzVjLjMyMi0uMTg0LjYzOC0uMzc5Ljk3NC0uNTM1XFxcIiBzdHlsZT1cXFwiZmlsbDojMDE5NjM5XFxcIi8+PHBhdGggZD1cXFwiTTguNzY3LDEwLjUzOHEwLDUuNDI5LDAsMTAuODU5YTEuNTA5LDEuNTA5LDAsMCwwLC40MjcsMS4wODcsMS42NDcsMS42NDcsMCwwLDAsMi4wNi4yMDYsMS41NjQsMS41NjQsMCwwLDAsLjY4NS0xLjI5M2MwLTIuNjItLjAwNS01LjI0LDAtNy44NnEzLjU4Myw0LjI5LDcuMTgxLDguNTY4YTIuODMzLDIuODMzLDAsMCwwLDIuNi43ODIsMS41NjEsMS41NjEsMCwwLDAsMS4yNTEtMS4zNzFxLjAwOC01LjU0MSwwLTExLjA4MWExLjU4MiwxLjU4MiwwLDAsMC0zLjE1MiwwYzAsMi42NjItLjAxNiw1LjMyMSwwLDcuOTgyLTIuMzQ2LTIuNzY2LTQuNjYzLTUuNTU2LTctOC4zMzJBMi44MTcsMi44MTcsMCwwLDAsMTAuMTcsOS4wMzMsMS41NzksMS41NzksMCwwLDAsOC43NjcsMTAuNTM4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHR9LFxuXHRcIk5pbVwiOiB7XG5cdFx0Y29sb3VyOiBcIiNmZmU5NTNcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xNi4xMTEsNi40MDVzLTEuMDczLjg0Ny0yLjE2NywxLjY5YTE1LjM2MSwxNS4zNjEsMCwwLDAtNC41MjcuNjUxYy0xLjEtLjctMi4wNy0xLjQ2OS0yLjA3LTEuNDY5UzYuNTIsOC43LDYsOS41MzVhMTEuMzgyLDExLjM4MiwwLDAsMC0yLjIzNiwxLjQ4MkMyLjk2MSwxMC43LDIuMDMsMTAuMzEsMiwxMC4zYzEuMDYzLDIuMTQ1LDEuNzc4LDQuMjkyLDMuNzIyLDUuNTgzLDMuMS00Ljg4OSwxNy40OC00LjQzOSwyMC42MzktLjAyOEMyOC40LDE0Ljc4NywyOS4yLDEyLjUsMzAsMTAuMzhjLS4wODguMDI5LTEuMTgxLjM5NS0xLjg4OS42NjVhMTEuNDg5LDExLjQ4OSwwLDAsMC0xLjk4Ni0xLjUxYy0uNTM3LS45ODQtMS4zMTktMi4zMTMtMS4zMTktMi4zMTNzLS45MjcuNjg5LTIsMS40NGEyMS4yNjUsMjEuMjY1LDAsMCwwLTQuNjgxLS41MTJjLTEtLjgyNi0yLjAxNC0xLjc0Ni0yLjAxNC0xLjc0NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmM2Q0MDBcXFwiLz48cGF0aCBkPVxcXCJNMy4xLDE0Ljg1NGwyLjU1NCw2LjE4NWM0LjQzNSw1Ljg1LDE1Ljc1OSw2LjI1NywyMC43LjExMywxLjE2OC0yLjYzMywyLjc0NS02LjMzMywyLjc0NS02LjMzM2ExMy4zNzksMTMuMzc5LDAsMCwxLTQuNiwzLjg2OSwxMi4yMTcsMTIuMjE3LDAsMCwxLTIuOTgzLjc5M2wtNS40NjUtMi44MzItNS41LDIuNzc1YTE1LjY3OSwxNS42NzksMCwwLDEtMi45ODMtLjc2NEExNC4wNzYsMTQuMDc2LDAsMCwxLDMuMSwxNC44NTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZlOTUzXFxcIi8+XCIsXG5cdFx0aW5saW5lQ29tbWVudDogW1xuXHRcdFx0XCIjXCIsXG5cdFx0XSxcblx0fSxcblx0XCJOaXhcIjoge1xuXHRcdGNvbG91cjogXCIjNTI3N2MzXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTMsMTEuMTE1LDYuMTgzLDIzLjc2LDQuNTksMjAuODdsMS44MzktMy4zODctMy42NTEtLjAxTDIsMTYuMDI5bC44LTEuNDc3LDUuMi4wMTgsMS44NjgtMy40NDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojN2ViYWU0O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBhdGggZD1cXFwiTTEzLjUyNywyMS4yMjNoMTMuNjRsLTEuNTQxLDIuOTIyLTMuNjU4LS4wMTEsMS44MTcsMy4zODktLjc3OSwxLjQ0OS0xLjU5MywwLTIuNTg0LTQuODI1LTMuNzIyLS4wMDhaXFxcIiBzdHlsZT1cXFwiZmlsbDojN2ViYWU0O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBhdGggZD1cXFwiTTIxLjQ2NywxNS42ODIsMTQuNjQ3LDMuMDM3bDMuMTM0LS4wMzJMMTkuNiw2LjRsMS44MzQtMy4zNzloMS41NTdMMjMuNzg2LDQuNSwyMS4xNzQsOS4zMDdsMS44NTQsMy40NTVaXFxcIiBzdHlsZT1cXFwiZmlsbDojN2ViYWU0O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBhdGggZD1cXFwiTTEwLjU0MiwxNi4zMjRsNi44MjEsMTIuNjQ1TDE0LjIyOSwyOWwtMS44MjEtMy40LTEuODM0LDMuMzhIOS4wMTZsLS44LTEuNDc2TDEwLjgzMSwyMi43LDguOTc2LDE5LjI0M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM1Mjc3YzM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTguNDY0LDEwLjc1MUg0LjgyM0w2LjM2NSw3LjgyOWwzLjY1OC4wMTFMOC4yMDcsNC40NTEsOC45ODYsM2wxLjU5MiwwLDIuNTg0LDQuODI1LDMuNzIyLjAwOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM1Mjc3YzM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTksMjAuODg4LDI1LjgxNyw4LjI0NGwxLjU5MywyLjg5TDI1LjU3MSwxNC41MmwzLjY1MS4wMUwzMCwxNS45NzlsLS44LDEuNDc3LTUuMi0uMDE4LTEuODY4LDMuNDQ3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzUyNzdjMztmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPlwiLFxuXHR9LFxuXHRcIk5TSVNcIjoge1xuXHRcdGNvbG91cjogXCIjYTQyZDI2XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMjcuNDM1LDE2LjAzNywyMi4wMTIsMjEuNDZsNS40MjMsNS40MjNcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDU3N2JcXFwiLz48cGF0aCBkPVxcXCJNMjYuODg0LDE1LjVIMTYuMDQ4bDUuNDIzLDUuNDIzXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA3OWFhXFxcIi8+PHBhdGggZD1cXFwiTTI2Ljg4NCwxNC43MTIsMjEuNDYxLDkuMjg5bC01LjQyMyw1LjQyM1xcXCIgc3R5bGU9XFxcImZpbGw6IzAwOTZkM1xcXCIvPjxwYXRoIGQ9XFxcIk0yMC41MjgsOS4xMzFIOS42ODNsNS40MjMsNS40MjNNMjcuNDM1LDMuMzI1LDIyLjAxMiw4Ljc0OGw1LjQyMyw1LjQyM1xcXCIgc3R5bGU9XFxcImZpbGw6IzAxYjBmMFxcXCIvPjxwYXRoIGQ9XFxcIk0yMC41MjgsOC4zNTYsMTUuMTA1LDIuOTMzLDkuNjgzLDguMzU2XFxcIiBzdHlsZT1cXFwiZmlsbDojMjdiY2YzXFxcIi8+PHBhdGggZD1cXFwiTTE0LjE3MiwyLjc3NUgzLjMyN0w4Ljc0OSw4LjJcXFwiIHN0eWxlPVxcXCJmaWxsOiM0ZmM5ZjVcXFwiLz48cGF0aCBkPVxcXCJNNC41NjgsMTUuOTYzLDkuOTkxLDEwLjU0LDQuNTY4LDUuMTE3XFxcIiBzdHlsZT1cXFwiZmlsbDojNzkyMDFiXFxcIi8+PHBhdGggZD1cXFwiTTEwLjU0MSwxMS4wOTEsNS4xMTksMTYuNTEzSDE1Ljk2NFxcXCIgc3R5bGU9XFxcImZpbGw6I2E0MmQyNlxcXCIvPjxwYXRoIGQ9XFxcIk01LjExOSwxNy4yODhsNS40MjMsNS40MjMsNS40MjMtNS40MjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNjYzM4MmZcXFwiLz48cGF0aCBkPVxcXCJNNC41NjgsMTcuODI5VjI4LjY3NWw1LjQyMy01LjQyM0w4LjQsMjEuNjY1bTEzLjkxNiwxLjJMMTYuOSwxNy40NDdsLTUuNDIzLDUuNDIzXFxcIiBzdHlsZT1cXFwiZmlsbDojZjA0NTNmXFxcIi8+PHBhdGggZD1cXFwiTTExLjQ3NSwyMy42NDQsMTYuOSwyOS4wNjdsNS40MjMtNS40MjNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmMjYyNWRcXFwiLz48cGF0aCBkPVxcXCJNMTcuODQsMjkuMjI1SDI4LjY4NUwyMy4yNjMsMjMuOFxcXCIgc3R5bGU9XFxcImZpbGw6I2Y0N2Y3ZFxcXCIvPjxwYXRoIGQ9XFxcIk0yOS44ODksMjkuMzM3bC0xLjY4LTEuNjhWMi4zOTJhLjM3NC4zNzQsMCwwLDAtLjI0My0uMzU1QS4yNjMuMjYzLDAsMCwwLDI3LjgyNywyYS4zNTkuMzU5LDAsMCwwLS4yNzEuMTEyTDIxLjQ3MSw4LjIsMTUuMzg1LDIuMTEyLDE1LjMsMi4wMzdoLS4wMzdBLjMwNy4zMDcsMCwwLDAsMTUuMTA1LDJIMi40YS40MzQuNDM0LDAsMCwwLS4yODkuMTEyQS4zOC4zOCwwLDAsMCwyLDIuMzkyYS4zNTkuMzU5LDAsMCwwLC4xMTIuMjcxbDEuNjgsMS42OFYyOS42MTdhLjM3NC4zNzQsMCwwLDAsLjI0My4zNTVBLjM4Ny4zODcsMCwwLDAsNC4xODUsMzBhLjM1OS4zNTksMCwwLDAsLjI3MS0uMTEyTDEwLjU0MSwyMy44bDYuMDg1LDYuMDg1LjA4NC4wNzVoLjAzN0EuMjU0LjI1NCwwLDAsMCwxNi45LDMwSDI5LjYwOWEuMzk1LjM5NSwwLDAsMCwuMjgtLjY2M1pNMjcuNDM1LDMuMzI1VjE0LjE3MUwyMi4wMTIsOC43NDhsNS40MjMtNS40MjNaTTkuOTkxLDEwLjU0LDQuNTY4LDE1Ljk2M1Y1LjExN0w5Ljk5MSwxMC41NFpNOS42ODMsOS4xMzFIMjAuNTI4bC01LjQyMyw1LjQyM0w5LjY4Myw5LjEzMVptLjg1OSwxLjk2LDUuNDIzLDUuNDIzSDUuMTE5bDUuNDIzLTUuNDIzWk0xNi45LDE3LjQ0N2w1LjQyMyw1LjQyM0gxMS40NzVMMTYuOSwxNy40NDdaTTE2LjA0OCwxNS41SDI2Ljg5M2wtNS40MjMsNS40MjNMMTYuMDQ4LDE1LjVabTUuOTY0LDUuOTY0LDUuNDIzLTUuNDIzVjI2Ljg4M0wyMi4wMTIsMjEuNDZabTQuODcyLTYuNzQ4SDE2LjA0OGw1LjQyMy01LjQyMyw1LjQxMyw1LjQyM1pNMjAuNTI4LDguMzU2SDkuNjgzbDUuNDIzLTUuNDIzLDUuNDIzLDUuNDIzWk0zLjMyNywyLjc3NUgxNC4xNzJMOC43NDksOC4yWm0xLjI0MSwyNS45VjE3LjgyOUw4LjQsMjEuNjY1bDEuNTg3LDEuNTg3TDQuNTY4LDI4LjY3NVptLjU1MS0xMS4zODdIMTUuOTY0bC01LjQyMyw1LjQyM0w1LjExOSwxNy4yODhaTTE2LjksMjkuMDY3bC01LjQyMy01LjQyM0gyMi4zMkwxNi45LDI5LjA2N1ptLjk0My4xNTlMMjMuMjYzLDIzLjhsNS40MjMsNS40MjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojNDY0MDQ5XFxcIi8+XCIsXG5cdH0sXG5cdFwiT2JqZWN0IFBhc2NhbFwiOiB7XG5cdFx0Y29sb3VyOiBcIiNGRjYzNDRcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjE2XFxcIiB5MT1cXFwiLTAuNDQzXFxcIiB4Mj1cXFwiMTZcXFwiIHkyPVxcXCIyMi4wNDJcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMDIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmYwYzE1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWEwYzBmXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9kZWxwaGk8L3RpdGxlPjxjaXJjbGUgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTZcXFwiIHI9XFxcIjE0XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTI3LjU0NSwxNi4yNDNINC45MjRhLjkxNC45MTQsMCwwLDAtMS4wOTIuODJxLjAzMy40MjkuMS44NDlhMTIuNCwxMi40LDAsMCwwLDI0LjUzMiwwcS4wNzUtLjUuMTA4LTEuMDIxQzI4LjQ3OCwxNi41MjMsMjguMjExLDE2LjIwNywyNy41NDUsMTYuMjQzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmNjQ0M1xcXCIvPjxwb2x5bGluZSBwb2ludHM9XFxcIjE4LjQ4IDExLjY0IDIzLjcwNyA3LjI2NiAxOS43ODcgNS44OCAxNiAxMS4wNTNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCIxNS42OCAxMS4wMjYgMTguNjQgNS44OCAxNC44NTMgNS44OCAxMy4zMDcgMTEuMjkzXFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiMTMuMDQgMTEuMzczIDEzLjYgNi43MDYgMTAuNTg3IDcuOTYgMTEuMDEzIDEyLjc2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiMTAuNzQ3IDEzIDkuNzg3IDguNzYgNy43MDcgMTAuODQgOS42NTMgMTQuNjhcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjM4NyAxNS4wNTMgNy40OTMgMTIuMzc2IDYuNjQgMTQuNDY2IDkuMDQgMTYuNTE3XFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiOS4wNCAxNi43NTcgNi42NCAxNS4yMTMgNi40OCAxNy40IDkuMiAxOC4zMzNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjIyNyAxOC44NDYgNi42NCAxOC4wNCA3LjIyNyAxOS44IDkuNTQ3IDE5LjhcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjcwNyAyMC4wOTMgNy43MDcgMjAuMzg2IDguNjI3IDIxLjc0NiAxMC4yNjcgMjFcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMjAuMDIzLDEzLjA4OWE2LjYxLDYuNjEsMCwwLDAtNC41My0yQTYuMjkzLDYuMjkzLDAsMCwwLDExLjMsMjIuMDdsNC45NDEuMTI5LTIuMDgtNC4xNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZWU7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTYuNSwyMi4zNjZsLTUuMjY3LS4xMzgtLjA0NC0uMDM5YTYuNDUzLDYuNDUzLDAsMCwxLDQuMy0xMS4yNjQsNi43ODcsNi43ODcsMCwwLDEsNC42NDMsMi4wNWwuMTIzLjEyMy01LjksNC45ODJabS01LjE0LS40NTUsNC42MTYuMTIxTDEzLjk2MSwxOGw1LjgyNS00LjkxOWE2LjQzLDYuNDMsMCwwLDAtNC4yOTItMS44MzUsNi4xMzMsNi4xMzMsMCwwLDAtNC4xMzEsMTAuNjY3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VlNGIyZVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4wMTMsMjAuNDkzYy00LjE3My01LjgxMywyLjEwOS04LjE3MiwyLjQ3OC04LjQ1My40NTEtLjM0NC03LjU5LDEuNzg1LTMuMjI2LDguODhaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjA0ZTMxO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMC43MiAxMi42IDEzLjUyIDE3LjU2NyAxMy43MzMgMTguNTczIDIxLjQ2NyAxNy4wMjYgMjAuNzIgMTIuNlxcXCIgc3R5bGU9XFxcImZpbGw6I2VlZTtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwYXRoIGQ9XFxcIk0xMy42MSwxOC43NjEsMTMuMzQxLDE3LjVsNy40OTUtNS4xNy44MTQsNC44MjhabS4wODktMS4xMjMuMTU4Ljc0N0wyMS4yODMsMTYuOSwyMC42LDEyLjg3NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZTRiMmVcXFwiLz48cGF0aCBkPVxcXCJNMTUuNzIzLDIxLjMxOWMtMy45My0uNjY4LTQuMjgzLjQyOC00LjI4My40MjhMMTAuMjY3LDI0LjQ0czEuMTItLjkwNyw1LjQ5MywwbC43Ni0xLjM4OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkZDBjMTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTQuMTIyLDIxLjZjLS4wMi0uMi0xLjEtLjMxOS0xLjY3Ny0uMTIzLS43MzIuMjQ5LTEuMjE5LDEuMTQyLTEuMDQ1LDEuMjEzYTEuOTc1LDEuOTc1LDAsMCwxLDEuMTI1LS45ODZDMTMuNDQ3LDIxLjQ5MywxNC4xNDIsMjEuOCwxNC4xMjIsMjEuNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZjZlNGY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTUuNTIsMTguNjA2YTExLjEsMTEuMSwwLDAsMCwxLjU0NywxLjQ4Nyw2LjksNi45LDAsMCwxLDIuNzIsNC4xMDdjLS4xMDcsMS4wNjctMS45NzMsMS43Ni0xLjk3MywxLjc2bC0zLjMwNy03LjE5NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZWU7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTcuNzMsMjYuMTYxbC0zLjQ1Ny03LjUyMSwxLjMyLS4yMDguMDU3LjA4MWExMC44NjksMTAuODY5LDAsMCwwLDEuNTEyLDEuNDUxLDcsNywwLDAsMSwyLjc4Miw0LjIwN2wwLC4wMjIsMCwuMDIyYy0uMTE1LDEuMTUzLTIsMS44NjQtMi4wNzcsMS44OTRabS0yLjk5LTcuMjcsMy4xNTUsNi44NjNjLjQxNC0uMTc4LDEuNjMtLjc2MywxLjczLTEuNTQ4YTYuNzkzLDYuNzkzLDAsMCwwLTIuNjQ4LTMuOTgxbC0uMDEtLjAwN2ExMS45NCwxMS45NCwwLDAsMS0xLjUxNy0xLjQzOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZTRiMmVcXFwiLz48cGF0aCBkPVxcXCJNMjgsMTIuNzQyYy4wMjUuMzk0LjAzNC43OTIuMDI1LDEuMTk0YTEzLjk0NiwxMy45NDYsMCwwLDEtMTkuOSwxMi4zQTEyLjg2LDEyLjg2LDAsMCwwLDI4LDEyLjc0MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYWUwZGY7ZmlsbC1ydWxlOmV2ZW5vZGQ7b3BhY2l0eTowLjJcXFwiLz48cGF0aCBkPVxcXCJNMi4zODMsMTMuODkzQTEzLjk0MSwxMy45NDEsMCwwLDEsMjUuNyw1Ljgzcy01LjAwOSw1Ljk3OS0xMC41ODQsNy45MDdTMi4zODMsMTMuODkzLDIuMzgzLDEzLjg5M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYWUwZGY7b3BhY2l0eTowLjJcXFwiLz48cGF0aCBkPVxcXCJNMy42MTgsMTguNjk0Yy0uMDQ0LS4zOTItLjA3Mi0uNzktLjA4My0xLjE5MUMzLjMyOSw5LjgwNywxMC4wMTIsNC4yLDE3LjcwOCwzLjk5MWExNC4yLDE0LjIsMCwwLDEsNS43MTksMS40NTgsMTMuMTI4LDEzLjEyOCwwLDAsMC03LjE4OC0yLjM2OWMtNy4xLjE5LTEzLjMwNiw1LjMtMTMuMTE2LDEyLjRBMTIuODczLDEyLjg3MywwLDAsMCwzLjYxOCwxOC42OTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWFlMGRmO2ZpbGwtcnVsZTpldmVub2RkO29wYWNpdHk6MC4yXFxcIi8+XCIsXG5cdH0sXG5cdFwiT2JqZWN0aXZlLUNcIjoge1xuXHRcdGNvbG91cjogXCIjYzJjMmMyXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTEuMjksMTUuOTc2YTguODkyLDguODkyLDAsMCwwLDEuMDM5LDQuNTU3LDQuODE4LDQuODE4LDAsMCwwLDUuNTc5LDIuMTMsMy43ODksMy43ODksMCwwLDAsMi43MzQtMy4xODFjLjA5NS0uNTM1LjEtLjU0LjEtLjU0LDEuNTM3LjIyMiw0LjAxNC41ODIsNS41NS44bC0uMS4zODlBOS45NTgsOS45NTgsMCwwLDEsMjMuOCwyNC45YTguMzUsOC4zNSwwLDAsMS00Ljc0NywyLjM3OCwxMi45MjUsMTIuOTI1LDAsMCwxLTcuMzIyLS43MjUsOC45OCw4Ljk4LDAsMCwxLTUuMTA2LTUuNTI0QTE0LjM1MywxNC4zNTMsMCwwLDEsNi42NDIsMTAuOWE5LjMyMyw5LjMyMywwLDAsMSw3LjkyOS02LjI0LDExLjgxMiwxMS44MTIsMCwwLDEsNS45LjQ5MSw4LjQ2Nyw4LjQ2NywwLDAsMSw1LjQ1Niw2LjFjLjA4My4zMTEuMS4zNjkuMS4zNjktMS43MDkuMzExLTMuODIxLjcwNS01LjUxOCwxLjA3NUMyMC4xODYsMTEsMTkuMzg3LDkuNjY2LDE3LjY3OCw5LjI1YTQuNjU2LDQuNjU2LDAsMCwwLTUuODUzLDMuMTU4LDkuMjgsOS4yOCwwLDAsMC0uMzQxLDEuMjczQTEwLjg5LDEwLjg5LDAsMCwwLDExLjI5LDE1Ljk3NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmMyYzJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIuMDMzIDMwIDIuMDMzIDIgNy45NjcgMiA3Ljk2NyA0LjIyNyA0LjcyMyA0LjIyNyA0LjcyMyAyNy43NzMgNy45NjcgMjcuNzczIDcuOTY3IDMwIDIuMDMzIDMwXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyOS45NjcgMjkuOTk5IDI0LjAzMyAyOS45OTkgMjQuMDMzIDI3Ljc3MSAyNy4yNzcgMjcuNzcxIDI3LjI3NyA0LjIyNiAyNC4wMzMgNC4yMjYgMjQuMDMzIDEuOTk5IDI5Ljk2NyAxLjk5OSAyOS45NjcgMjkuOTk5XFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+XCIsXG5cdH0sXG5cdFwiT0NhbWxcIjoge1xuXHRcdGNvbG91cjogXCIjZjI5MTA0XCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCItNzQ1LjYyM1xcXCIgeTE9XFxcIi05Mi43NlxcXCIgeDI9XFxcIi03NDUuNjIzXFxcIiB5Mj1cXFwiLTg1LjEwOFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSg3NTggMTEzLjI4KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2YyOTEwNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2VjNjgxM1xcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiLTc0MS45OVxcXCIgeTE9XFxcIi0xMDkuNDc3XFxcIiB4Mj1cXFwiLTc0MS45OVxcXCIgeTI9XFxcIi04NS4wOTlcXFwiIHhsaW5rOmhyZWY9XFxcIiNhXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJjXFxcIiB4MT1cXFwiLTc1Mi4xMTFcXFwiIHkxPVxcXCItOTMuOTE4XFxcIiB4Mj1cXFwiLTc1Mi4xMTFcXFwiIHkyPVxcXCItODUuMjg0XFxcIiB4bGluazpocmVmPVxcXCIjYVxcXCIvPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX29jYW1sPC90aXRsZT48cGF0aCBkPVxcXCJNMTYuNTcxLDI1LjI0NmE0LjI4LDQuMjgsMCwwLDAtLjAzOS0uNzA5Yy0uMDU5LS4yLS4yLS4yMTctLjMtLjM3NGEzLjUwNywzLjUwNywwLDAsMS0uNTMyLTEuNDc3Yy0uMDItLjQ1My0uMi0uODg2LS4yMTctMS4zMzktLjAyLS4yMTcuMDItLjQ1MywwLS42NjlhMS45NjMsMS45NjMsMCwwLDAtLjAzOS0uMzE1LDEuMTMzLDEuMTMzLDAsMCwwLS4wMzktLjJsLjA1OS0uMTM4YTIuNzIsMi43MiwwLDAsMSwuNjUtLjAzOWMuMjU2LDAsLjUxMi4wMi43NjguMDJhNy45NjEsNy45NjEsMCwwLDAsMS41MzYtLjA1OSwzLjcyMiwzLjcyMiwwLDAsMCwxLjk0OS0uODQ3LDQuOTQ2LDQuOTQ2LDAsMCwwLDEuNTM2LTIuMDA4Yy4xNzctLjM5NC4xNzctMS4wODMuNTUxLTEuNC40MzMtLjM3NCwxLjE4MS0uMzM1LDEuNjkzLS41NzFhMS4xODcsMS4xODcsMCwwLDEsLjgwNy0uMTM4Yy4yMTcuMDM5LjYzLjMxNS43MjktLjA1OS0uMDc5LS4wMzktLjEtLjEzOC0uMTM4LS4xNzcuNDE0LS4wMzksMC0xLS4xNTgtMS4yQTIuMjI1LDIuMjI1LDAsMCwwLDI0LjI1LDEzYTMuNTA5LDMuNTA5LDAsMCwwLTEuNTM2LS4yMTdjLS44ODYuMTc3LS44MjctLjMzNS0xLjMzOS0uMzM1LS42MywwLTEuNzMzLjAzOS0xLjkzLjYzYTEuNTQsMS41NCwwLDAsMS0uMzM1LjUxMmMtLjEzOC4xNzcuMDIuMzU0LS4wMzkuNTcxLS4wNzkuMjE3LS4xNzcuOTg1LS4yNzYsMS4yNi0uMTc3LjQ1My0uMzk0LDEuMDI0LS43ODgsMS4wMjRhMy4xNTIsMy4xNTIsMCwwLDEtMS40MzctLjA3OWMtLjI3Ni0uMS0uNzI5LS4yNTYtLjk0NS0uMzM1LTEuMDI0LS40MzMtMS4yLS45MDYtMS4yLS45MDZhMy4wMjYsMy4wMjYsMCwwLDEtLjUxMi0uODY2Yy0uMTE4LS40MTQtLjMxNS0uNzY4LS4zOTQtMXMtLjMtLjU5MS0uNDUzLS45ODVhMi42NjcsMi42NjcsMCwwLDAtLjcwOS0xLjA2M2MtLjMxNS0uMjc2LS42MS0uNzI5LTEuMjYtLjU5MWExLjY0MSwxLjY0MSwwLDAsMC0uODY2LjMxNWMtLjIxNy4xNzctLjMuNTcxLS40OTIuODg2LS4xMTguMTc3LS4zMTUuNzA5LS41MTIsMS4xNjJhMS45MjksMS45MjksMCwwLDEtLjMzNS42NWMtLjExOC4wNzktLjI1Ni4yLS40MTQuMTM4YS45MjQuOTI0LDAsMCwxLS4zMTUtLjIsNS4zMzQsNS4zMzQsMCwwLDEtLjcwOS0xLjEyMiwxMS4xLDExLjEsMCwwLDAtLjc4OC0xLjI0MSwxLjAxNiwxLjAxNiwwLDAsMC0uOTg1LS41NTFjLTEuMDI0LDAtMS4xLjU3MS0xLjU1NiwxLjQxOGE1LjU3NCw1LjU3NCwwLDAsMS0uNjY5LDEuNGMtLjIzNi4yNTYtLjk0NSwxLjMzOS0xLjQ1NywxLjUxNkgydjcuNjJjLjAzOS0uMS4wNTktLjIuMS0uMjc2LjItLjQxNC42NS0uODA3LjkwNi0xLjIyMWEzLjUsMy41LDAsMCwwLC4zNzQtLjcwOSwzLjc0MywzLjc0MywwLDAsMSwuMjM2LS43MDkuNzk0Ljc5NCwwLDAsMSwuNTcxLS4zMzVjLjM1NC0uMDU5LjY1LjQ5MiwxLjA4My43MDkuMi4wNzksMS4wNjMuMzk0LDEuMzE5LjQ1My40MzMuMS45MDYuMiwxLjMzOS4yNzYuMjM2LjAzOS40NTMuMDc5LjcwOS4xYTcuMyw3LjMsMCwwLDEsMS4wODMuMSwyLjI3NywyLjI3NywwLDAsMC0uODA3LDEuMjIxYy0uMTU4LjQzMy0uMjc2LjkyNS0uNDczLDEuMzM5LS4yMTcuNDczLS42NjkuNjY5LS42MSwxLjIyMWEyLjY2OCwyLjY2OCwwLDAsMSwuMDIuNjg5LDQuMDA5LDQuMDA5LDAsMCwxLS4yMTcuNjg5Yy0uMS4zMTUtLjIxNywxLjM1OS0uMzU0LDEuNjc0bC45MDYtLjExOGgwQTEwLjY5MiwxMC42OTIsMCwwLDAsOC40LDI2LjM4OGEzLjczNywzLjczNywwLDAsMSwuNzI5LTEuMjhjLjMzNS0uMzc0LjMxNS0uODQ3LjUxMi0xLjNhMTIuNDg4LDEyLjQ4OCwwLDAsMSwuNzY4LTEuM2MuNDkyLS44MDcuODA3LTEuODEyLDEuODUxLTIuMDI4YTMuMywzLjMsMCwwLDEsMS4wMjQuNzA5LDQuNDUyLDQuNDUyLDAsMCwxLC44ODYsMS4xLDEyLjg1MSwxMi44NTEsMCwwLDEsLjg4NiwyLjY3OCwxLjIyNywxLjIyNywwLDAsMCwuMzk0LjcwOSw1LjQ2Miw1LjQ2MiwwLDAsMSwuNDMzLjcyOWMuMDc5LjE3Ny4yLjU3MS4zLjc4OGE2LjI2Nyw2LjI2NywwLDAsMSwuMzE1LjgyN2wuODQ3LS4wMmguMDJ2LS4wMkE5Ljc1NCw5Ljc1NCwwLDAsMSwxNi41NzEsMjUuMjQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4yMTcsMjcuMjM1Yy0uMS0uMi0uMjE3LS42MS0uMy0uNzg4YTUuNDYyLDUuNDYyLDAsMCwwLS40MzMtLjcyOSwxLjExOSwxLjExOSwwLDAsMS0uMzk0LS43MDksMTIuNDg3LDEyLjQ4NywwLDAsMC0uODg2LTIuNjc4LDQuNDUyLDQuNDUyLDAsMCwwLS44ODYtMS4xLDMuMywzLjMsMCwwLDAtMS4wMjQtLjcwOWMtMS4wNDQuMi0xLjM1OSwxLjIyMS0xLjg1MSwyLjAyOGExMi40ODgsMTIuNDg4LDAsMCwwLS43NjgsMS4zYy0uMi40MzMtLjE3Ny45MjUtLjUxMiwxLjNhMy40NDMsMy40NDMsMCwwLDAtLjcyOSwxLjI4Yy0uMDM5LjEtLjExOCwxLjA4My0uMjE3LDEuMzE5aDBsMS41MzYtLjFjMS40MzcuMSwxLjAyNC42NSwzLjI0OS41MzJsMy41MjUtLjExOGgwQTYuMjY3LDYuMjY3LDAsMCwwLDE2LjIxNywyNy4yMzVaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTI2LjQ1NiwzLjhINS41NDRBMy41MjEsMy41MjEsMCwwLDAsMi4wMiw3LjMyOHY3LjY3OWgwYy41MTItLjE3NywxLjIyMS0xLjI2LDEuNDU3LTEuNTE2YTUuOTEzLDUuOTEzLDAsMCwwLC42NjktMS40Yy40NTMtLjgyNy41MzItMS40MTgsMS41NTYtMS40MThhMS4wMTYsMS4wMTYsMCwwLDEsLjk4NS41NTEsOS41NDcsOS41NDcsMCwwLDEsLjc4OCwxLjI0MSw0Ljg0OSw0Ljg0OSwwLDAsMCwuNzA5LDEuMTIyLDIsMiwwLDAsMCwuMzE1LjJjLjE1OC4wNTkuMy0uMDU5LjQxNC0uMTM4QTEuOTI5LDEuOTI5LDAsMCwwLDkuMjQ2LDEzYy4yLS40NTMuMzk0LS45NjUuNTEyLTEuMTYyLjItLjMxNS4yNzYtLjcwOS40OTItLjg4NmExLjU5LDEuNTksMCwwLDEsLjg2Ni0uMzE1Yy42NS0uMTM4Ljk0NS4zMTUsMS4yNi41OTFhMy4yODUsMy4yODUsMCwwLDEsLjcwOSwxLjA2M2MuMTU4LjM5NC4zNTQuNzY4LjQ1My45ODVhOC45NDYsOC45NDYsMCwwLDEsLjM5NCwxLDMuNzEzLDMuNzEzLDAsMCwwLC41MTIuODY2cy4xNzcuNDczLDEuMi45MDZhOC43NDksOC43NDksMCwwLDAsLjk0NS4zMzUsMy4xNTIsMy4xNTIsMCwwLDAsMS40MzcuMDc5Yy4zOTQsMCwuNjEtLjU3MS43ODgtMS4wMjQuMS0uMjc2LjIxNy0xLjA0NC4yNzYtMS4yNnMtLjEtLjM3NC4wMzktLjU3MWMuMTU4LS4yMTcuMjU2LS4yMzYuMzM1LS41MTIuMi0uNjEsMS4zLS42MywxLjkzLS42My41MzIsMCwuNDUzLjUxMiwxLjMzOS4zMzVhMy4yNDMsMy4yNDMsMCwwLDEsMS41MzYuMjE3LDIuMjI1LDIuMjI1LDAsMCwxLDEuMTQyLjU1MWMuMTU4LjIuNTcxLDEuMTYyLjE1OCwxLjIuMDM5LjAzOS4wNzkuMTM4LjEzOC4xNzctLjEuMzc0LS40OTIuMS0uNzI5LjA1OWExLjE4NywxLjE4NywwLDAsMC0uODA3LjEzOGMtLjUxMi4yMTctMS4yNDEuMi0xLjY5My41NzEtLjM3NC4zMTUtLjM3NCwxLS41NTEsMS40YTUuMTY3LDUuMTY3LDAsMCwxLTEuNTM2LDIuMDA4LDMuOSwzLjksMCwwLDEtMS45NDkuODQ3LDcuOTYxLDcuOTYxLDAsMCwxLTEuNTM2LjA1OWMtLjI1Ni0uMDItLjUxMi0uMDItLjc2OC0uMDItLjE1OCwwLS42NjktLjAyLS42NS4wMzlsLS4wNTkuMTM4YS43LjcsMCwwLDAsLjAzOS4yYy4wMi4xMTguMDIuMjE3LjAzOS4zMTUsMCwuMjE3LS4wMi40NTMsMCwuNjY5LjAyLjQ1My4yLjg2Ni4yMTcsMS4zMzlhMy4yNiwzLjI2LDAsMCwwLC41MzIsMS40NzdjLjEuMTU4LjIzNi4xNzcuMy4zNzRhNC4xNjMsNC4xNjMsMCwwLDEsLjAzOS43MDksOS42ODUsOS42ODUsMCwwLDAsLjgyNywyLjc1N3YuMDJoMGMuNTEyLS4wNzksMS4wNDQtLjI3NiwxLjcxMy0uMzc0LDEuMjQxLS4xNzcsMi45NTQtLjEsNC4wNTYtLjIsMi44LS4yNTYsNC4zMTIsMS4xNDIsNi44MTMuNTcxVjcuMzI4QTMuNTUxLDMuNTUxLDAsMCwwLDI2LjQ1NiwzLjhaTTE2LjAyLDIwLjM0M1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz48cGF0aCBkPVxcXCJNOC40NzgsMjMuNTczYy4yLS40MzMuMzE1LS45MDYuNDczLTEuMzM5YTIuMjc3LDIuMjc3LDAsMCwxLC44MDctMS4yMjEsNy4zLDcuMywwLDAsMC0xLjA4My0uMWMtLjIzNi0uMDItLjQ3My0uMDU5LS43MDktLjEtLjQzMy0uMDc5LS45MjUtLjE3Ny0xLjMzOS0uMjc2LS4yNTYtLjA1OS0xLjE0Mi0uMzc0LTEuMzE5LS40NTMtLjQ1My0uMi0uNzQ4LS43NjgtMS4wODMtLjcwOWEuNzk0Ljc5NCwwLDAsMC0uNTcxLjMzNSwzLjc0MywzLjc0MywwLDAsMC0uMjM2LjcwOWMtLjEuMjM2LS4yNTYuNDczLS4zNzQuNzA5YTEyLjI4OSwxMi4yODksMCwwLDAtLjkyNSwxLjJjLS4wMzkuMS0uMDU5LjItLjEuM3Y0Ljc0NWE1LjQsNS40LDAsMCwxLC43MjkuMTU4LDguNzcsOC43NywwLDAsMCw0LjM3MS4zNTRsLjE3Ny0uMDJoMGMuMTM4LS4zMTUuMjU2LTEuMzU5LjM1NC0xLjY3NGE1LjQ5NCw1LjQ5NCwwLDAsMCwuMjE3LS42ODksMi42NjgsMi42NjgsMCwwLDAtLjAyLS42ODlDNy44MDksMjQuMjQyLDguMjYyLDI0LjA0NSw4LjQ3OCwyMy41NzNaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2MpXFxcIi8+XCIsXG5cdH0sXG5cdFwiT2N0YXZlXCI6IHtcblx0XHRjb2xvdXI6IFwiIzc3Y2NlMVwiLFxuXHRcdGljb246IFwiPGRlZnMgaWQ9XFxcImRlZnMyODc0XFxcIj4gPHJhZGlhbEdyYWRpZW50IGN4PVxcXCIxODIuOTgzN1xcXCIgY3k9XFxcIjM5NS4wNDg3MVxcXCIgcj1cXFwiMTQ4Ljk1MzA5XFxcIiBmeD1cXFwiMTgyLjk4MzdcXFwiIGZ5PVxcXCIzOTUuMDQ4NzFcXFwiIGlkPVxcXCJyYWRpYWxHcmFkaWVudDMwMzNcXFwiIHhsaW5rOmhyZWY9XFxcIiNsaW5lYXJHcmFkaWVudDM3NTVcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuMjI5MTQzMzQsLTAuMjQ5MDE0NzksMC43NjQzNTcyLDAuODMwNjQyNjgsLTI3Mi44NTMzNywtMTU5LjY5NDgyKVxcXCIgLz4gPGxpbmVhckdyYWRpZW50IGlkPVxcXCJsaW5lYXJHcmFkaWVudDM3NTVcXFwiPiA8c3RvcCBpZD1cXFwic3RvcDM3NTdcXFwiIHN0eWxlPVxcXCJzdG9wLWNvbG9yOiMwMDhjYmU7c3RvcC1vcGFjaXR5OjFcXFwiIG9mZnNldD1cXFwiMFxcXCIgLz4gPHN0b3AgaWQ9XFxcInN0b3AzNzU5XFxcIiBzdHlsZT1cXFwic3RvcC1jb2xvcjojYjJmZmZmO3N0b3Atb3BhY2l0eToxXFxcIiBvZmZzZXQ9XFxcIjFcXFwiIC8+IDwvbGluZWFyR3JhZGllbnQ+IDwvZGVmcz4gPGcgaWQ9XFxcImxheWVyMVxcXCIgdHJhbnNmb3JtPVxcXCJzY2FsZSgwLjExMjk2KSB0cmFuc2xhdGUoLTIzMy4zNTU0NCwtMzkwLjcxODAyKVxcXCI+IDxnIHRyYW5zZm9ybT1cXFwibWF0cml4KDguNDUxOTcyMywwLDAsOC40NTE5NzIzLC0yNzguNDUwMTIsLTQwMy44Mjk3NSlcXFwiIGlkPVxcXCJnMzAyNVxcXCI+IDxwYXRoIGQ9XFxcIm0gNjYuNDMyMTAzLDk3LjQ4ODY3OSBjIC01LjE5NTg0LDUuNjQ2NDMxIC0zLjkzNjYxLDE2LjE2OTAzMSAyLjgxMTA3LDIzLjUwMTg3MSA2Ljc0NzY4LDcuMzMyODUgMTYuNDI4OTgsOC42OTk1NSAyMS42MjQ4MywzLjA1MzEyIDUuMTk1ODUsLTUuNjQ2NDMgMy45NDAyLC0xNi4xNjk0NiAtMi44MDc0OSwtMjMuNTAyMyAtNi43NDc2OCwtNy4zMzI4NjEgLTE2LjQzMjU2LC04LjY5OTEzMSAtMjEuNjI4NDEsLTMuMDUyNjkxIHogbSA0LjcxMTQ5LDIuMzQ1NTMgYyA0LjA4MjU2LC00LjQzNjU5IDExLjU4OSwtMy40NzE1MiAxNi43Njc0MSwyLjE1NTk2MSA1LjE3ODQyLDUuNjI3NSA2LjA2NjQ3LDEzLjc4NDkxIDEuOTgzOTEsMTguMjIxNSAtNC4wODI1Niw0LjQzNjU4IC0xMS41OTA5NywzLjQ3MzY5IC0xNi43NjkzOSwtMi4xNTM4MSAtNS4xNzg0MiwtNS42Mjc1IC02LjA2NDQ5LC0xMy43ODcwNCAtMS45ODE5MywtMTguMjIzNjUxIHpcXFwiIGlkPVxcXCJwYXRoNTg3NFxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNyYWRpYWxHcmFkaWVudDMwMzMpO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lXFxcIiAvPiA8cmVjdCB3aWR0aD1cXFwiNC4zNDk4NTRcXFwiIGhlaWdodD1cXFwiNC4zNDk4NTRcXFwiIHJ4PVxcXCIwLjc2OTU4OTY2XFxcIiByeT1cXFwiMC43Njk1ODk2NlxcXCIgeD1cXFwiODUuMzgxNTYxXFxcIiB5PVxcXCI5OS40OTM4ODFcXFwiIGlkPVxcXCJyZWN0NTg3NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmN2YyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6I2Q0NTUwMDtzdHJva2Utd2lkdGg6MC43NDQwMzc5OTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZVxcXCIgLz4gPHJlY3Qgd2lkdGg9XFxcIjEwLjI0NTQzNlxcXCIgaGVpZ2h0PVxcXCIxMC4yNDU0MzZcXFwiIHJ4PVxcXCIxLjgxMjY1NDVcXFwiIHJ5PVxcXCIxLjgxMjY1NDVcXFwiIHg9XFxcIjYwLjkyNjU5XFxcIiB5PVxcXCIxMDUuMjI0NVxcXCIgaWQ9XFxcInJlY3Q1ODc4XFxcIiBzdHlsZT1cXFwiZmlsbDojZmY3ZjJhO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTojZDQ1NTAwO3N0cm9rZS13aWR0aDowLjc0NDAzNzk5O3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lXFxcIiAvPiA8cmVjdCB3aWR0aD1cXFwiNi4xODk3NTMxXFxcIiBoZWlnaHQ9XFxcIjYuMTg5NzUzMVxcXCIgcng9XFxcIjEuMDk1MTEwMlxcXCIgcnk9XFxcIjEuMDk1MTEwMlxcXCIgeD1cXFwiODcuNDA0NzM5XFxcIiB5PVxcXCIxMTguNjM3MDVcXFwiIGlkPVxcXCJyZWN0NTg4MFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmN2YyYTtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6I2Q0NTUwMDtzdHJva2Utd2lkdGg6MC43NDQwMzc5OTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZVxcXCIgLz4gPC9nPiA8L2c+XCIsXG5cdH0sXG5cdFwiT3BlbkNMXCI6IHtcblx0XHRjb2xvdXI6IFwiI0ZGMUMxQVwiLFxuXHRcdGljb246IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiMjkuNjYyXFxcIiB5MT1cXFwiMTguMDI2XFxcIiB4Mj1cXFwiMjEuNDE5XFxcIiB5Mj1cXFwiMjAuMjM0XFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCJyZWRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNmZjZhNmFcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIjI0LjU4OFxcXCIgeTE9XFxcIjkuNzQ4XFxcIiB4Mj1cXFwiMTguNzc2XFxcIiB5Mj1cXFwiMTUuNTZcXFwiIHhsaW5rOmhyZWY9XFxcIiNhXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJjXFxcIiB4MT1cXFwiMTguNDY2XFxcIiB5MT1cXFwiNi42MTlcXFwiIHgyPVxcXCIxNS45MjRcXFwiIHkyPVxcXCIxMy42MDNcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNjZmE0MGNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNlZGQ0ODBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZFxcXCIgeDE9XFxcIjEzLjE3XFxcIiB5MT1cXFwiNi41MVxcXCIgeDI9XFxcIjEzLjE3XFxcIiB5Mj1cXFwiMTIuOTk3XFxcIiB4bGluazpocmVmPVxcXCIjY1xcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZVxcXCIgeDE9XFxcIjguODA4XFxcIiB5MT1cXFwiOC40ODZcXFwiIHgyPVxcXCIxMC45ODhcXFwiIHkyPVxcXCIxMy4xNjFcXFwiIHhsaW5rOmhyZWY9XFxcIiNjXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJmXFxcIiB4MT1cXFwiNS41MDVcXFwiIHkxPVxcXCIxMS40NzdcXFwiIHgyPVxcXCI4LjU0NlxcXCIgeTI9XFxcIjE0LjUxOVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzExYTExOVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzM3YWUzZFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJnXFxcIiB4MT1cXFwiMy42MzlcXFwiIHkxPVxcXCIxNC4yODVcXFwiIHgyPVxcXCI2Ljg4M1xcXCIgeTI9XFxcIjE2LjE1OFxcXCIgeGxpbms6aHJlZj1cXFwiI2ZcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImhcXFwiIHgxPVxcXCIyLjI2NVxcXCIgeTE9XFxcIjE3Ljc5OVxcXCIgeDI9XFxcIjUuMzc5XFxcIiB5Mj1cXFwiMTguOTMzXFxcIiB4bGluazpocmVmPVxcXCIjZlxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiaVxcXCIgeDE9XFxcIjJcXFwiIHkxPVxcXCIyMS42MTRcXFwiIHgyPVxcXCI0LjgzM1xcXCIgeTI9XFxcIjIxLjYxNFxcXCIgeGxpbms6aHJlZj1cXFwiI2ZcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImpcXFwiIHgxPVxcXCIyMC42NjJcXFwiIHkxPVxcXCIxOC45NDlcXFwiIHgyPVxcXCIxOC4wMjZcXFwiIHkyPVxcXCIxNy40MjhcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzY0NjQ2NFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2NiY2JjYlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJrXFxcIiB4MT1cXFwiMTYuMDIxXFxcIiB5MT1cXFwiMjUuMjY0XFxcIiB4Mj1cXFwiMTYuMDIxXFxcIiB5Mj1cXFwiMjIuNjkxXFxcIiB4bGluazpocmVmPVxcXCIjalxcXCIvPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX29wZW5jbDwvdGl0bGU+PHBhdGggZD1cXFwiTTI3LjgyOCwxMy41NzRhMTQuNjc2LDE0LjY3NiwwLDAsMSwuODM1LDEuNTQyQTE0Ljk2NCwxNC45NjQsMCwwLDEsMjkuOTIsMjIuOUgyMi4xMzNhMTAuMzc3LDEwLjM3NywwLDAsMC0uOTY3LTQuNDI0WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy43NTMsMTQuNDNhMTAuMDc0LDEwLjA3NCwwLDAsMSwyLjc3MiwyLjg3OGw2LjI3My01LjJhMTUuNTQsMTUuNTQsMCwwLDAtNC45ODgtNC4xNVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz48cGF0aCBkPVxcXCJNMTQuNzgxLDEzLjA4NmE4LjgyNyw4LjgyNywwLDAsMSwyLjM3Ni45NjZMMjAuNjY2LDcuNDNhMTIuNywxMi43LDAsMCwwLTQuNjQ1LS45NTJaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2MpXFxcIi8+PHBhdGggZD1cXFwiTTE0LjM2NCwxM2wuNjEyLTYuNDg4YTEyLjQ2LDEyLjQ2LDAsMCwwLTMuNjExLjgxM2wuNTA3LDUuNjM4QTcuMjE5LDcuMjE5LDAsMCwxLDE0LjM2NCwxM1xcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNkKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMC45NDgsMTMuMTc5bC0uNjgzLTUuMzczQTE0LjU4OCwxNC41ODgsMCwwLDAsNy43NzMsOS4zNzlsMS43NCw0LjQyYTcuNTE4LDcuNTE4LDAsMCwxLDEuNDM1LS42MTlcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZSlcXFwiLz48cGF0aCBkPVxcXCJNOC44NiwxNC4yMDYsNi40NzQsMTAuNTExYy0uNDUzLjQ0LS43OS44Mi0xLjAwNiwxLjA3NHEtLjIyNy4yNjctLjQzNi41MzhMNy40OCwxNS4zODdhOC44Nyw4Ljg3LDAsMCwxLDEuMzgtMS4xODJcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZilcXFwiLz48cGF0aCBkPVxcXCJNNy4wNDYsMTUuODc1LDQuMzM1LDEzLjExMmExNC4yNTksMTQuMjU5LDAsMCwwLTEuMjUsMi40MjlsMy4wMDcsMS43MWE5LjgyNiw5LjgyNiwwLDAsMSwuOTU0LTEuMzc2XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2cpXFxcIi8+PHBhdGggZD1cXFwiTTUuNTI3LDE4LjM5M2wtMi43Ny0xLjk0NWExNS40NTIsMTUuNDUyLDAsMCwwLS42MywyLjgzbDIuOTA2LjYwN2ExMC4zNDMsMTAuMzQzLDAsMCwxLC40OTQtMS40OTJcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaClcXFwiLz48cGF0aCBkPVxcXCJNNC44MzMsMjAuOWExMC42ODQsMTAuNjg0LDAsMCwwLS4xLDJIMi4wOTNhMTQuMzMzLDE0LjMzMywwLDAsMS0uMDY0LTIuNTczWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpKVxcXCIvPjxwYXRoIGQ9XFxcIk0yMi41NTEsMTIuNDc4LDE0Ljc1MSwyMy4xQTEuNTQ0LDEuNTQ0LDAsMCwxLDE3LjUsMjQuNDI4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNqKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4wMjEsMjUuNTIyYTEuNTQ0LDEuNTQ0LDAsMSwxLDEuMDkyLS40NTJBMS41MzMsMS41MzMsMCwwLDEsMTYuMDIxLDI1LjUyMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NDY0NjRcXFwiLz48cGF0aCBkPVxcXCJNMTcuMzA4LDIzLjk3OGExLjI4NywxLjI4NywwLDEsMS0uMzc3LS45MUExLjI4MywxLjI4MywwLDAsMSwxNy4zMDgsMjMuOTc4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNrKVxcXCIvPlwiLFxuXHR9LFxuXHRcIlBhc2NhbFwiOiB7XG5cdFx0Y29sb3VyOiBcIiNGRjYzNDRcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjE2XFxcIiB5MT1cXFwiLTAuNDQzXFxcIiB4Mj1cXFwiMTZcXFwiIHkyPVxcXCIyMi4wNDJcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMDIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmYwYzE1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWEwYzBmXFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9kZWxwaGk8L3RpdGxlPjxjaXJjbGUgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTZcXFwiIHI9XFxcIjE0XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTI3LjU0NSwxNi4yNDNINC45MjRhLjkxNC45MTQsMCwwLDAtMS4wOTIuODJxLjAzMy40MjkuMS44NDlhMTIuNCwxMi40LDAsMCwwLDI0LjUzMiwwcS4wNzUtLjUuMTA4LTEuMDIxQzI4LjQ3OCwxNi41MjMsMjguMjExLDE2LjIwNywyNy41NDUsMTYuMjQzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmNjQ0M1xcXCIvPjxwb2x5bGluZSBwb2ludHM9XFxcIjE4LjQ4IDExLjY0IDIzLjcwNyA3LjI2NiAxOS43ODcgNS44OCAxNiAxMS4wNTNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCIxNS42OCAxMS4wMjYgMTguNjQgNS44OCAxNC44NTMgNS44OCAxMy4zMDcgMTEuMjkzXFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiMTMuMDQgMTEuMzczIDEzLjYgNi43MDYgMTAuNTg3IDcuOTYgMTEuMDEzIDEyLjc2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiMTAuNzQ3IDEzIDkuNzg3IDguNzYgNy43MDcgMTAuODQgOS42NTMgMTQuNjhcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjM4NyAxNS4wNTMgNy40OTMgMTIuMzc2IDYuNjQgMTQuNDY2IDkuMDQgMTYuNTE3XFxcIiBzdHlsZT1cXFwiZmlsbDojZmFlN2UzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlsaW5lIHBvaW50cz1cXFwiOS4wNCAxNi43NTcgNi42NCAxNS4yMTMgNi40OCAxNy40IDkuMiAxOC4zMzNcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjIyNyAxOC44NDYgNi42NCAxOC4wNCA3LjIyNyAxOS44IDkuNTQ3IDE5LjhcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWxpbmUgcG9pbnRzPVxcXCI5LjcwNyAyMC4wOTMgNy43MDcgMjAuMzg2IDguNjI3IDIxLjc0NiAxMC4yNjcgMjFcXFwiIHN0eWxlPVxcXCJmaWxsOiNmYWU3ZTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMjAuMDIzLDEzLjA4OWE2LjYxLDYuNjEsMCwwLDAtNC41My0yQTYuMjkzLDYuMjkzLDAsMCwwLDExLjMsMjIuMDdsNC45NDEuMTI5LTIuMDgtNC4xNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZWU7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTYuNSwyMi4zNjZsLTUuMjY3LS4xMzgtLjA0NC0uMDM5YTYuNDUzLDYuNDUzLDAsMCwxLDQuMy0xMS4yNjQsNi43ODcsNi43ODcsMCwwLDEsNC42NDMsMi4wNWwuMTIzLjEyMy01LjksNC45ODJabS01LjE0LS40NTUsNC42MTYuMTIxTDEzLjk2MSwxOGw1LjgyNS00LjkxOWE2LjQzLDYuNDMsMCwwLDAtNC4yOTItMS44MzUsNi4xMzMsNi4xMzMsMCwwLDAtNC4xMzEsMTAuNjY3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VlNGIyZVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi4wMTMsMjAuNDkzYy00LjE3My01LjgxMywyLjEwOS04LjE3MiwyLjQ3OC04LjQ1My40NTEtLjM0NC03LjU5LDEuNzg1LTMuMjI2LDguODhaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjA0ZTMxO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMC43MiAxMi42IDEzLjUyIDE3LjU2NyAxMy43MzMgMTguNTczIDIxLjQ2NyAxNy4wMjYgMjAuNzIgMTIuNlxcXCIgc3R5bGU9XFxcImZpbGw6I2VlZTtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwYXRoIGQ9XFxcIk0xMy42MSwxOC43NjEsMTMuMzQxLDE3LjVsNy40OTUtNS4xNy44MTQsNC44MjhabS4wODktMS4xMjMuMTU4Ljc0N0wyMS4yODMsMTYuOSwyMC42LDEyLjg3NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZTRiMmVcXFwiLz48cGF0aCBkPVxcXCJNMTUuNzIzLDIxLjMxOWMtMy45My0uNjY4LTQuMjgzLjQyOC00LjI4My40MjhMMTAuMjY3LDI0LjQ0czEuMTItLjkwNyw1LjQ5MywwbC43Ni0xLjM4OFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkZDBjMTM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTQuMTIyLDIxLjZjLS4wMi0uMi0xLjEtLjMxOS0xLjY3Ny0uMTIzLS43MzIuMjQ5LTEuMjE5LDEuMTQyLTEuMDQ1LDEuMjEzYTEuOTc1LDEuOTc1LDAsMCwxLDEuMTI1LS45ODZDMTMuNDQ3LDIxLjQ5MywxNC4xNDIsMjEuOCwxNC4xMjIsMjEuNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZjZlNGY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTUuNTIsMTguNjA2YTExLjEsMTEuMSwwLDAsMCwxLjU0NywxLjQ4Nyw2LjksNi45LDAsMCwxLDIuNzIsNC4xMDdjLS4xMDcsMS4wNjctMS45NzMsMS43Ni0xLjk3MywxLjc2bC0zLjMwNy03LjE5NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZWU7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTcuNzMsMjYuMTYxbC0zLjQ1Ny03LjUyMSwxLjMyLS4yMDguMDU3LjA4MWExMC44NjksMTAuODY5LDAsMCwwLDEuNTEyLDEuNDUxLDcsNywwLDAsMSwyLjc4Miw0LjIwN2wwLC4wMjIsMCwuMDIyYy0uMTE1LDEuMTUzLTIsMS44NjQtMi4wNzcsMS44OTRabS0yLjk5LTcuMjcsMy4xNTUsNi44NjNjLjQxNC0uMTc4LDEuNjMtLjc2MywxLjczLTEuNTQ4YTYuNzkzLDYuNzkzLDAsMCwwLTIuNjQ4LTMuOTgxbC0uMDEtLjAwN2ExMS45NCwxMS45NCwwLDAsMS0xLjUxNy0xLjQzOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZTRiMmVcXFwiLz48cGF0aCBkPVxcXCJNMjgsMTIuNzQyYy4wMjUuMzk0LjAzNC43OTIuMDI1LDEuMTk0YTEzLjk0NiwxMy45NDYsMCwwLDEtMTkuOSwxMi4zQTEyLjg2LDEyLjg2LDAsMCwwLDI4LDEyLjc0MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYWUwZGY7ZmlsbC1ydWxlOmV2ZW5vZGQ7b3BhY2l0eTowLjJcXFwiLz48cGF0aCBkPVxcXCJNMi4zODMsMTMuODkzQTEzLjk0MSwxMy45NDEsMCwwLDEsMjUuNyw1Ljgzcy01LjAwOSw1Ljk3OS0xMC41ODQsNy45MDdTMi4zODMsMTMuODkzLDIuMzgzLDEzLjg5M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNlYWUwZGY7b3BhY2l0eTowLjJcXFwiLz48cGF0aCBkPVxcXCJNMy42MTgsMTguNjk0Yy0uMDQ0LS4zOTItLjA3Mi0uNzktLjA4My0xLjE5MUMzLjMyOSw5LjgwNywxMC4wMTIsNC4yLDE3LjcwOCwzLjk5MWExNC4yLDE0LjIsMCwwLDEsNS43MTksMS40NTgsMTMuMTI4LDEzLjEyOCwwLDAsMC03LjE4OC0yLjM2OWMtNy4xLjE5LTEzLjMwNiw1LjMtMTMuMTE2LDEyLjRBMTIuODczLDEyLjg3MywwLDAsMCwzLjYxOCwxOC42OTRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWFlMGRmO2ZpbGwtcnVsZTpldmVub2RkO29wYWNpdHk6MC4yXFxcIi8+XCIsXG5cdH0sXG5cdFwiUGVybFwiOiB7XG5cdFx0Y29sb3VyOiBcIiMzYTNjNWJcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yOS4yNSwxMy44YTYuODg4LDYuODg4LDAsMCwwLS43NDItMi4yNjgsMS4wMTEsMS4wMTEsMCwwLDAtLjE3Mi0uMjMzLDkuNDcxLDkuNDcxLDAsMCwxLTEuNzI1LTIuNCw4LjYzMiw4LjYzMiwwLDAsMC0xLjM5NS0yLjM4MkE2LjkwNiw2LjkwNiwwLDAsMSwyNC4xLDQuNjQ0LDQuNTcyLDQuNTcyLDAsMCwwLDIxLjk5LDEuNzI3YTEuMDA5LDEuMDA5LDAsMCwwLS4xLS4wNTQsOC44ODYsOC44ODYsMCwwLDAtMS4zLS40NjgsMS4wMjIsMS4wMjIsMCwwLDAtLjI2My0uMDM1LDEuMDA5LDEuMDA5LDAsMCwwLS4yLjAyMSw1LjYwNyw1LjYwNywwLDAsMS0uODA3LjEwN2MtLjA1LDAtLjEtLjAwNi0uMTQ5LS4wMDZhMi44NDIsMi44NDIsMCwwLDAtMS40MTYuNDUzYy0uMDk0LjA1Mi0uMTg4LjEwNi0uMjg0LjE0OXEtLjA0MS4wMTgtLjA3OC4wMzlBMS42MzcsMS42MzcsMCwwLDEsMTcuMDY2LDJhMy4xMDksMy4xMDksMCwwLDAtLjc3Mi4xOTQsMSwxLDAsMCwwLS41MDguNDgzLDIuMTg0LDIuMTg0LDAsMCwxLS40NjkuNUE0LjM4Miw0LjM4MiwwLDAsMCwxNC41NTUsNGEuOTY0Ljk2NCwwLDAsMC0uMTE2LjIzNCw0LjY4Nyw0LjY4NywwLDAsMS0xLjU3NCwyLjIsNi40NzEsNi40NzEsMCwwLDAtLjguNjEzLDIuNzM0LDIuNzM0LDAsMCwwLS42MjctMS42MzRjLS4wMTctLjAxOS0uMDM1LS4wMzgtLjA1My0uMDU2bDAtLjAxNGEyLjM3OCwyLjM3OCwwLDAsMC0uMTM1LS41ODYsMSwxLDAsMCwwLS4xMzItLjIzNkE1LjE2Nyw1LjE2NywwLDAsMCw5LjUxMSwzLjExM2EuOTg4Ljk4OCwwLDAsMC0uMzQ2LS4xMTksMS41LDEuNSwwLDAsMS0uMTQ4LS4wNzcsMi4wNiwyLjA2LDAsMCwwLTEtLjMxMSwxLjQ3NiwxLjQ3NiwwLDAsMC0uNjgxLjE2Ni45ODcuOTg3LDAsMCwwLS4yNzQuMjA2LDEuMzI4LDEuMzI4LDAsMCwxLS4xMjUuMDYzLDEuOSwxLjksMCwwLDAtLjkwOC43NzgsMi41MzksMi41MzksMCwwLDAtLjU0MS4xMDYsMS42NTYsMS42NTYsMCwwLDEtLjM4My4wNTcsMi4zLDIuMywwLDAsMC0xLjUuNTQ1bC0uMTA2LjFhMi41MzMsMi41MzMsMCwwLDAtMSwyLjUyNSwxLjA4LDEuMDgsMCwwLDAsLjA2OC4xNjVBMi4yOTQsMi4yOTQsMCwwLDAsNC40NDYsOC40NzhjLS4xLjIzOC0uMi40NzMtLjMxNC43YTEuMDA5LDEuMDA5LDAsMCwwLS4wODcuMjkzQTExLjA1MiwxMS4wNTIsMCwwLDAsNCwxMi4wMzljMCwuMDIsMCwuMDQuMDA3LjA2YTUuMjc4LDUuMjc4LDAsMCwxLC4wNDEuNTQ3LDIuOTI2LDIuOTI2LDAsMCwwLC45MzEsMi40Yy4wMTcuMDE0LjAzNC4wMjYuMDUyLjAzOWwuMDA4LjAzMWEyLjgsMi44LDAsMCwwLC4xNTEuNDQ3LDEuMTg1LDEuMTg1LDAsMCwwLC42MzIuNjE3LDEuMjg5LDEuMjg5LDAsMCwwLC4yNDguNTcxLDEsMSwwLDAsMCwuMzMyLjI3OSwyLjQ1MywyLjQ1MywwLDAsMCwuNDY1LjE3NmwuMDY0LjAxOGEuOTc2Ljk3NiwwLDAsMCwuMTkyLjE3MUE1Ljg3OSw1Ljg3OSwwLDAsMSw3Ljg3MywxOGExLjEzLDEuMTMsMCwwLDAsMS4zNTEuNDI3LDEuNSwxLjUsMCwwLDAsLjc2NS4yMTUsMS40MjEsMS40MjEsMCwwLDAsLjYyNC0uMTQ1bC4xMTQtLjAyNmMuMDI0LjQwOC4wMzMuODE3LjAyOCwxLjIyM2ExLjA0MywxLjA0MywwLDAsMCwuMDI2LjI0MiwxMC43NDQsMTAuNzQ0LDAsMCwxLC4yNjYsMS44MjguOTMxLjkzMSwwLDAsMCwuMDMxLjIsOC40OTIsOC40OTIsMCwwLDEsLjI2OCwxLjgxNWMwLC4wMzEsMCwuMDYzLjAwOC4wOTRhNi4wODMsNi4wODMsMCwwLDEtLjYxLDMuNTc1Ljk5NC45OTQsMCwwLDAtLjA4OS4yNjEsMS4wOTMsMS4wOTMsMCwwLDAtLjIzNC4wNzlsLS4wNS4wMjJhMi4wMTMsMi4wMTMsMCwwLDAtMS4yLDEuMDY1LDEuMzIyLDEuMzIyLDAsMCwwLC4wNzQsMS4wNTQsMSwxLDAsMCwwLC4zMjQuMzcxLDMuNTQ3LDMuNTQ3LDAsMCwwLDMuNTA5LjMsMS41NDYsMS41NDYsMCwwLDAsLjgyOS0xLjY1M2wtLjAwNS0uMDY3YS45ODkuOTg5LDAsMCwwLC4wNTYtLjE1OCwxMS4xODYsMTEuMTg2LDAsMCwwLC4yODgtMi4wNjgsOC45MzksOC45MzksMCwwLDEsLjI1OS0xLjgyMiw0LjcyNyw0LjcyNywwLDAsMCwuMzg5LTEuNTg4bC4wNDIuMDQ4YTEyLjY2MSwxMi42NjEsMCwwLDAsMS4yNTUsMS4xMjksMTAuMywxMC4zLDAsMCwxLDEuMS45ODlsLS4wMTEuMDM4YS41MzIuNTMyLDAsMCwxLS4zNDIuMzU5bC0uMDQ5LjAxN2ExLjkyMSwxLjkyMSwwLDAsMC0xLjE4NCwxLjMzNCwxLjMxMywxLjMxMywwLDAsMCwuNDUyLDEuMjM0LDEsMSwwLDAsMCwuNDQxLjIyMiw0LjkwOCw0LjkwOCwwLDAsMCwyLjczNS0uMTgxLDEuNTU2LDEuNTU2LDAsMCwwLC4yNjYtLjEyNCwxLjQxMSwxLjQxMSwwLDAsMCwuOTcuMzcyLDIuMzI2LDIuMzI2LDAsMCwwLDEtLjI3NGMuMDQ5LS4wMjMuMS0uMDQ1LjE0LS4wNjJhMSwxLDAsMCwwLC42MzctLjg2NCw0LjU1Myw0LjU1MywwLDAsMC0uNDY4LTIuMzQzLDEuNTYsMS41NiwwLDAsMC0uNTEtLjYsMTAuOCwxMC44LDAsMCwxLDEuMy0yLjE1LDIuMTkzLDIuMTkzLDAsMCwwLC40NTEtMi4wMjYsMi41MTksMi41MTksMCwwLDEtLjA0My0uMzk0LDEuMDQ2LDEuMDQ2LDAsMCwwLDAtLjE0OCw1Ljc1Niw1Ljc1NiwwLDAsMSwuMDEyLTEuMjc5LDcuMTYxLDcuMTYxLDAsMCwwLC45NTEsMS43OTMsNy44OTIsNy44OTIsMCwwLDEsLjEzMywxLjEsMTAuNzMzLDEwLjczMywwLDAsMCwuMTMzLDEuMTg2LDkuMzYsOS4zNiwwLDAsMS0uMjI0LDMuOSwxLDEsMCwwLDAtLjAzMi4zNGgwYS45OC45OCwwLDAsMC0uMS4xNzksMi4yMzgsMi4yMzgsMCwwLDAtLjMxMiwxLjIzNSwxLjAwNywxLjAwNywwLDAsMCwuMDM5LjIsMS4zMTUsMS4zMTUsMCwwLDAsMS4zMjguOTYzYy4wODYsMCwuMTc3LS4wMDYuMjY4LS4wMTRsLjAxOSwwLC4wMzguMDEzYTIuMTA5LDIuMTA5LDAsMCwwLDIuNTE3LTEuMDg4LDEsMSwwLDAsMCwuMDU4LS43MzUsNS4yODUsNS4yODUsMCwwLDEtLjIwOC0xLjAyNywxLjAxMSwxLjAxMSwwLDAsMC0uMDQ2LS4yMTcsNi40Nyw2LjQ3LDAsMCwxLS4yMjEtMy4yMiwxLjExMiwxLjExMiwwLDAsMCwuMDE1LS4xMTQsMy45MDcsMy45MDcsMCwwLDEsLjA3NC0uNDQzLDIuNzM4LDIuNzM4LDAsMCwwLS4xOTMtMi4xLDQuMzM5LDQuMzM5LDAsMCwxLC4wMjEtLjQ3NmMuMDExLS4xNDcuMDIzLS4zLjAyNy0uNDYzYTEuNTksMS41OSwwLDAsMCwuODYyLS44NTEsMTIuODMsMTIuODMsMCwwLDAsLjk0Ny0yLjIzLDEuNzE5LDEuNzE5LDAsMCwwLC4xNzItMS4xODUsMS4yMzQsMS4yMzQsMCwwLDAsLjExMS0uMjUxQTEuNDY3LDEuNDY3LDAsMCwwLDI5LjI1LDEzLjhaTTE4Ljg2MywyMi43NjhjLS4wMjYsMC0uMDUzLS4wMDgtLjA4LS4wMWwtLjAyNCwwYTIuNzQ4LDIuNzQ4LDAsMCwxLS4yMzYtLjMyM2MtLjA1OS0uMDg4LS4xMTgtLjE3NS0uMTc4LS4yNThhMi4yNTMsMi4yNTMsMCwwLDAsLjIwOC0uMjM0LDEuMjU1LDEuMjU1LDAsMCwwLC42MjktLjMyMUEzLjE4NiwzLjE4NiwwLDAsMSwxOC44NjMsMjIuNzY4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VkZWRlZFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4yODksMi4zYy0uNTQ4LS4wNjUtLjk2MS4zLTEuNDE5LjUwNi0uMzY4LjIwNi0uODE1LjE1Mi0xLjE4NS4zMDktLjI4Mi41NzktLjk0MS45MDgtMS4zLDEuNDQzYTUuNyw1LjcsMCwwLDEtMS45NDIsMi42OTQsNS40NjQsNS40NjQsMCwwLDAtMi4zNjgsMy4zOTRjLS4xNDUuMy0uMTIyLjc0Ni0uMjc3LDEtLjUxMS4xNDMtLjIzOS0uNTE2LS4zLS44MjUtLjA3NC0uNDcuMzQxLS43Ny4zNzMtMS4yMjZhMS44MzQsMS44MzQsMCwwLDAsLjIwOS0xLjA1M2MtLjA1Ni0uODE0LjE4OS0xLjgwNy0uMzkzLTIuNDc3LS4zNDktLjItLjIzOS0uNjIzLS4zNjYtLjk0N2E0LjIxNCw0LjIxNCwwLDAsMC0xLjMtMS4xMzljLS40MTktLjA0MS0uODA2LS41NDItMS4yMzItLjMyMy0uMjY2LjMwOS0uNzYzLjMwNS0uOTIyLjcxMy0uMS41MTYtLjY4OC4zNzQtMS4wNjguNS0uNDg4LjE4NS0xLjExOC4wMDYtMS41MTguMzgyLS40MTEuNDEtMS4wMzQuOTYxLS44MzUsMS42MDYuNDU3Ljg4MiwxLjY0NS40MzgsMi4zMTcuOTc0QTE3Ljk5LDE3Ljk5LDAsMCwxLDUuMDM2LDkuNjFhMTAuMDUxLDEwLjA1MSwwLDAsMC0uMDQ0LDIuMzMyYy4xMjMuNzczLS4wODMsMS43NzIuNjA2LDIuMzE5LjM4LjEzNy4zNTcuNTcyLjUuODg3LjEzNC4yOS40MjctLjExMy41NDMuMTkzLjMzOC4xODQuMDM3LjU2MS4yMi44LjI2My4xMzcuNjM5LjEyOC44MjIuNDI2YTYuODQ0LDYuODQ0LDAsMCwxLC45NzUuODA2Yy4yMy40NjcuNTMxLS40NTQuNzgzLS4xMDkuMTcuMjg1LjUwNi41MjIuODE5LjI4NWEyLjk5MywyLjk5MywwLDAsMCwxLjMyNC0uNTU2LDE4LjAzMywxOC4wMzMsMCwwLDEsLjE3MSwyLjcxOCwxMS43MzMsMTEuNzMzLDAsMCwxLC4yOSwyLDkuNDA5LDkuNDA5LDAsMCwxLC4zLDIuMDMsNy4xMTEsNy4xMTEsMCwwLDEtLjcwOSw0LjE2LDEuMDEyLDEuMDEyLDAsMCwxLS44MDcuOGMtLjI5MS4xMy0uOS4zNjYtLjY5Mi43NzZhMi41NDksMi41NDksMCwwLDAsMi41Mi4yMTRjLjUxLS4yNDMuMDczLS44NTguMzM0LTEuMjI2LjM0My0xLjMuMTc0LTIuNjkxLjU3NS0zLjk4NWEzLjc2MiwzLjc2MiwwLDAsMCwuMy0yLjFjLjA3OS0uNDQtLjEwNS0uOTY5LjE4Ny0xLjMyOWExLjgxMywxLjgxMywwLDAsMSwuNDgzLTEuMiwxNC43NjIsMTQuNzYyLDAsMCwwLC4xNDQtMi4wMjYsMy4yMTQsMy4yMTQsMCwwLDEsMS4yNjctLjEyN2MuMDE4LjM3NS0uMjcyLjgxMi0uMTksMS4yMzRBMS45NDgsMS45NDgsMCwwLDEsMTUuNSwyMC4zYTIuODQ5LDIuODQ5LDAsMCwwLC4xNjgsMi4zMDhjLjc4Mi44MzksMS44LDEuNDMyLDIuNTM2LDIuMzI3LjMxNC4yMDUuMi41MTcuMDM4Ljc4NGExLjUyOCwxLjUyOCwwLDAsMS0uOTg3LDEuMDM0Yy0uMzA4LjEyMS0uODA2LjU2Ni0uNDQyLjg4MmEzLjkwNiwzLjkwNiwwLDAsMCwyLjE3OC0uMTQ0Yy40NzYtLjE3MS4zLS43MzguNDg4LTEuMDg4LjMuMjMzLjQyMy43NjUuNzExLDEuMDY5LjMuNDMzLjgwNy4wNzMsMS4xNTYtLjA2MmEzLjU0OSwzLjU0OSwwLDAsMC0uMzcyLTEuODQyYy0uMTY3LS4zNzgtLjgtLjM4NS0uNzctLjg1MmExMS43NjEsMTEuNzYxLDAsMCwxLDEuNzEyLTNjLjUxLS40NzkuMTMtMS4xOTEuMTU4LTEuOEE2Ljc2NSw2Ljc2NSwwLDAsMSwyMy4xNTgsMTUuNWExNS44ODksMTUuODg5LDAsMCwwLC42OTIsMi4xNCw2LjIzLDYuMjMsMCwwLDAsMS4xLDIuMjQ2Yy4yMzcuODExLjE3NiwxLjcxLjMzMSwyLjU1MWExMC40NCwxMC40NCwwLDAsMS0uMjQyLDQuMzQ3Yy4wNC41MTgtLjQ1Ny45LS40MTUsMS40MDguMTQuNDY5LjcuMDkzLjk5LjI5YTEuMTEsMS4xMSwwLDAsMCwxLjMyNC0uNTcyLDYuMjEyLDYuMjEyLDAsMCwxLS4yNDctMS4yMjMsNy40NTQsNy40NTQsMCwwLDEtLjI1NS0zLjcxOWMuMDQ2LS42NjkuNDU3LTEuNS0uMDczLTIuMDcyLS4xNDgtLjYxOS4xLTEuMjg1LS4wNDktMS45MTVhMTIuODc3LDEyLjg3NywwLDAsMS0uMTIyLTQuOTMzYy4wOTMtLjIyNy4wMTMtLjY0OS4yNDctLjc3NWExLjg1MSwxLjg1MSwwLDAsMSwuMzE1LDEuMjMyLDMuNywzLjcsMCwwLDEsLjA3OSwyLjA4MWMtLjQyNC41MzEtLjE2MywxLjI0OC0uMTA5LDEuODUuMDY4LjQyMi41MTYuMTE4LjU4OS0uMTQ0YTExLjg1MSwxMS44NTEsMCwwLDAsLjk0NC0yLjI0MWMuMjY5LS4zNTYuMDE0LS43NywwLTEuMTQyLjQxMy0uMDQ5LjI1Ni0uNTA2LjAzNS0uN2E1LjkzLDUuOTMsMCwwLDAtLjY2Ny0yLjIsMTAuNDY0LDEwLjQ2NCwwLDAsMS0xLjk0MS0yLjcyM2MtLjUyOC0xLjYzOS0yLjA0Mi0yLjcyNi0yLjU1Ni00LjM3OWEzLjU1NiwzLjU1NiwwLDAsMC0xLjY1Mi0yLjMxN0E3Ljg4MSw3Ljg4MSwwLDAsMCwyMC4zMiwyLjE3LDYuNSw2LjUsMCwwLDEsMTkuMjg5LDIuM1ptLjQsMTQuNjZhMzguOTA3LDM4LjkwNywwLDAsMSwuNSw0LjI5MSw0LjE3NSw0LjE3NSwwLDAsMS0uNzYsMi41MTdjLS4xMi40MjUtLjQ4Ni4wMTItLjc1MS0uMDE2LS42NDMtLjAxOC0uODgyLS42ODMtMS4yMzItMS4xMDctLjM2LS4zNDQtLjEtLjguMTMzLTEuMTMxLjI1Mi0uMTc5LjM1LS41NzkuNzA4LS41NDguNC0uMDA3LjMxNi0uNDg3LjI2LS43NDMuMjM4LS4zNjIuMDkyLS44OTIuMzI4LTEuMjgzLjQxOS0uMTgyLjI5NC0uODIuNDQyLTEuMTguMTE1LS4yNTYuMDE3LS43NDkuMzM0LS44NTQuMDM3LS4wMDYuMDQ5LjAxMi4wNDIuMDUyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzNhM2M1YlxcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiI1wiLFxuXHRcdF0sXG5cdH0sXG5cdFwiUEhQXCI6IHtcblx0XHRjb2xvdXI6IFwiIzRjNmI5NlwiLFxuXHRcdGljb246IFwiPGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJhXFxcIiBjeD1cXFwiLTE2LjExNFxcXCIgY3k9XFxcIjIwLjUzMlxcXCIgcj1cXFwiMTguMzg0XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDI2LjUyIC05LjMwNylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzRjNmI5NlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzIzMWYyMFxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfcGhwPC90aXRsZT48ZWxsaXBzZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCIxNlxcXCIgcng9XFxcIjE0XFxcIiByeT1cXFwiNy4zNjVcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48ZWxsaXBzZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCIxNlxcXCIgcng9XFxcIjEzLjQ1M1xcXCIgcnk9XFxcIjYuODE4XFxcIiBzdHlsZT1cXFwiZmlsbDojNjI4MGI2XFxcIi8+PHBhdGggZD1cXFwiTTE4LjcyNSwxOC4ybC42NjctMy40MzRhMS43NTIsMS43NTIsMCwwLDAtLjM3Mi0xLjcxOSwyLjkyOSwyLjkyOSwwLDAsMC0yLS41MjVIMTUuODY3bC4zMzEtMS43YS4yMTkuMjE5LDAsMCwwLS4yMTUtLjI2aC0xLjZhLjIxOS4yMTksMCwwLDAtLjIxNS4xNzdsLS43MDksMy42NDZhMi4wNTEsMi4wNTEsMCwwLDAtLjQ3Ny0xLjA1NCwyLjc4MywyLjc4MywwLDAsMC0yLjItLjgwN0g3LjdhLjIxOS4yMTksMCwwLDAtLjIxNS4xNzdsLTEuNDM0LDcuMzhhLjIxOS4yMTksMCwwLDAsLjIxNS4yNkg3Ljg2OWEuMjE5LjIxOSwwLDAsMCwuMjE1LS4xNzdsLjM0Ny0xLjc4NWgxLjJhNS4xNjcsNS4xNjcsMCwwLDAsMS41NjgtLjIsMy4wNjgsMy4wNjgsMCwwLDAsMS4xNS0uNjg5LDMuNTM4LDMuNTM4LDAsMCwwLC42OC0uODQ0bC0uMjg3LDEuNDc1YS4yMTkuMjE5LDAsMCwwLC4yMTUuMjZoMS42YS4yMTkuMjE5LDAsMCwwLC4yMTUtLjE3N2wuNzg3LTQuMDUxaDEuMDk0Yy40NjYsMCwuNi4wOTMuNjQuMTMzcy4xLjE2NS4wMjUuNTY5bC0uNjM1LDMuMjY1YS4yMTkuMjE5LDAsMCwwLC4yMTUuMjZoMS42MkEuMjE5LjIxOSwwLDAsMCwxOC43MjUsMTguMlpNMTEuMzMsMTUuMzY2YTEuNzQ5LDEuNzQ5LDAsMCwxLS41NjEsMS4wOTIsMi4xNzEsMi4xNzEsMCwwLDEtMS4zMTUuMzIxSDguNzQybC41MTUtMi42NTFoLjkyMWMuNjc3LDAsLjk0OS4xNDUsMS4wNTkuMjY2QTEuMTgxLDEuMTgxLDAsMCwxLDExLjMzLDE1LjM2NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMjUuNTQ2LDEzLjMzMmEyLjc4MywyLjc4MywwLDAsMC0yLjItLjgwN0gyMC4yNTVhLjIxOS4yMTksMCwwLDAtLjIxNS4xNzdsLTEuNDM0LDcuMzhhLjIxOS4yMTksMCwwLDAsLjIxNS4yNmgxLjYwOGEuMjE5LjIxOSwwLDAsMCwuMjE1LS4xNzdsLjM0Ny0xLjc4NWgxLjJhNS4xNjcsNS4xNjcsMCwwLDAsMS41NjgtLjIsMy4wNjgsMy4wNjgsMCwwLDAsMS4xNS0uNjg5LDMuNDI1LDMuNDI1LDAsMCwwLDEuMDc2LTEuOTI3QTIuNTEyLDIuNTEyLDAsMCwwLDI1LjU0NiwxMy4zMzJabS0xLjY2NywyLjAzNGExLjc0OSwxLjc0OSwwLDAsMS0uNTYxLDEuMDkyQTIuMTcxLDIuMTcxLDAsMCwxLDIyLDE2Ljc3OEgyMS4yOWwuNTE1LTIuNjUxaC45MjFjLjY3NywwLC45NDkuMTQ1LDEuMDU5LjI2NkExLjE4MSwxLjE4MSwwLDAsMSwyMy44NzksMTUuMzY2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xMC4xNzgsMTMuOTA4YTEuNjQ1LDEuNjQ1LDAsMCwxLDEuMjIxLjMzOCwxLjM0LDEuMzQsMCwwLDEsLjE0NSwxLjE2MSwxLjk0NSwxLjk0NSwwLDAsMS0uNjQyLDEuMjIzQTIuMzYxLDIuMzYxLDAsMCwxLDkuNDU0LDE3SDguNDc2bC42LTMuMDg5Wk02LjI2MSwyMC4xMjRINy44NjlsLjM4MS0xLjk2Mkg5LjYyN2E0LjkzMSw0LjkzMSwwLDAsMCwxLjUtLjE5MSwyLjg0LDIuODQsMCwwLDAsMS4wNy0uNjQyLDMuMjA3LDMuMjA3LDAsMCwwLDEuMDEtMS44MDgsMi4zLDIuMywwLDAsMC0uMzg1LTIuMDQ0LDIuNTY4LDIuNTY4LDAsMCwwLTIuMDM1LS43MzJINy43WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwMDAwNFxcXCIvPjxwYXRoIGQ9XFxcIk0xNC4zODcsMTAuNzgyaDEuNkwxNS42LDEyLjc0NGgxLjQyMWEyLjc2NywyLjc2NywwLDAsMSwxLjg1LjQ2OCwxLjU0OCwxLjU0OCwwLDAsMSwuMzA1LDEuNTE2bC0uNjY3LDMuNDM0SDE2Ljg5bC42MzUtMy4yNjVhLjg4Ni44ODYsMCwwLDAtLjA4LS43NiwxLjEyMSwxLjEyMSwwLDAsMC0uOC0uMkgxNS4zN2wtLjgyMiw0LjIyOGgtMS42WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwMDAwNFxcXCIvPjxwYXRoIGQ9XFxcIk0yMi43MjcsMTMuOTA4YTEuNjQ1LDEuNjQ1LDAsMCwxLDEuMjIxLjMzOCwxLjM0LDEuMzQsMCwwLDEsLjE0NSwxLjE2MSwxLjk0NSwxLjk0NSwwLDAsMS0uNjQyLDEuMjIzQTIuMzYxLDIuMzYxLDAsMCwxLDIyLDE3aC0uOTc4bC42LTMuMDg5Wk0xOC44MSwyMC4xMjRoMS42MDhsLjM4MS0xLjk2MmgxLjM3N2E0LjkzMSw0LjkzMSwwLDAsMCwxLjUtLjE5MSwyLjg0LDIuODQsMCwwLDAsMS4wNy0uNjQyLDMuMjA3LDMuMjA3LDAsMCwwLDEuMDEtMS44MDgsMi4zLDIuMywwLDAsMC0uMzg1LTIuMDQ0LDIuNTY4LDIuNTY4LDAsMCwwLTIuMDM1LS43MzJIMjAuMjQ0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwMDAwNFxcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiI1wiLFxuXHRcdFx0XCIvL1wiLFxuXHRcdF0sXG5cdH0sXG5cdFwiUEwvU1FMXCI6IHtcblx0XHRjb2xvdXI6IFwiI2ZmMDAwMFwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTguNTYyLDE1LjI1NkEyMS4xNTksMjEuMTU5LDAsMCwwLDE2LDE2LjQ0OWEyMS4xNTksMjEuMTU5LDAsMCwwLDcuNDM4LTEuMTk0YzEuODY0LS43MjcsMi41MjUtMS41MzUsMi41MjUtMlY5LjdhMTAuMzU3LDEwLjM1NywwLDAsMS0yLjA4NCwxLjA3NkEyMi4yOTMsMjIuMjkzLDAsMCwxLDE2LDEyLjA3OGEyMi4zNiwyMi4zNiwwLDAsMS03Ljg3OS0xLjNBMTAuMjgsMTAuMjgsMCwwLDEsNi4wMzcsOS43djMuNTVDNi4wMzcsMTMuNzI0LDYuNywxNC41MjgsOC41NjIsMTUuMjU2WlxcXCIgc3R5bGU9XFxcImZpbGw6cmVkXFxcIi8+PHBhdGggZD1cXFwiTTguNTYyLDIxLjk2MWExNS42MTEsMTUuNjExLDAsMCwwLDIuNi43NDFBMjQuOSwyNC45LDAsMCwwLDE2LDIzLjE1NWEyNC45LDI0LjksMCwwLDAsNC44MzgtLjQ1MiwxNS42MTQsMTUuNjE0LDAsMCwwLDIuNi0uNzQxYzEuODY0LS43MjcsMi41MjUtMS41MzUsMi41MjUtMnYtMy4zOWExMC43MDYsMTAuNzA2LDAsMCwxLTEuNjkyLjgyNUEyMy40OSwyMy40OSwwLDAsMSwxNiwxOC43NGEyMy40OSwyMy40OSwwLDAsMS04LjI3MS0xLjM0OCwxMC44MjksMTAuODI5LDAsMCwxLTEuNjkyLS44MjVWMTkuOTZDNi4wMzcsMjAuNDI2LDYuNywyMS4yMzEsOC41NjIsMjEuOTYxWlxcXCIgc3R5bGU9XFxcImZpbGw6cmVkXFxcIi8+PHBhdGggZD1cXFwiTTE2LDMwYzUuNSwwLDkuOTYzLTEuNzQ0LDkuOTYzLTMuODk0VjIzLjI2OWExMC41LDEwLjUsMCwwLDEtMS41MzUuNzYybC0uMTU3LjA2M0EyMy40ODcsMjMuNDg3LDAsMCwxLDE2LDI1LjQ0NWEyMy40MjIsMjMuNDIyLDAsMCwxLTguMjcxLTEuMzUxYy0uMDU0LS4wMi0uMTA2LS4wNDMtLjE1Ny0uMDYzYTEwLjUsMTAuNSwwLDAsMS0xLjUzNS0uNzYydjIuODM3QzYuMDM3LDI4LjI1NiwxMC41LDMwLDE2LDMwWlxcXCIgc3R5bGU9XFxcImZpbGw6cmVkXFxcIi8+PGVsbGlwc2UgY3g9XFxcIjE2XFxcIiBjeT1cXFwiNS44OTRcXFwiIHJ4PVxcXCI5Ljk2M1xcXCIgcnk9XFxcIjMuODk0XFxcIiBzdHlsZT1cXFwiZmlsbDpyZWRcXFwiLz5cIixcblx0fSxcblx0XCJQbGFpbiB0ZXh0XCI6IHtcblx0XHRjb2xvdXI6IFwiI2MyYzJjMlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIyLjAzOCwySDYuMzc1YTEuNzU1LDEuNzU1LDAsMCwwLTEuNzUsMS43NXYyNC41QTEuNzU1LDEuNzU1LDAsMCwwLDYuMzc1LDMwaDE5LjI1YTEuNzU1LDEuNzU1LDAsMCwwLDEuNzUtMS43NVY2Ljg1NlptLjUyNSwyLjg0NCwxLjY2MywxLjUzMUgyMi41NjNaTTYuMzc1LDI4LjI1VjMuNzVIMjAuODEzVjguMTI1aDQuODEzVjI4LjI1WlxcXCIgc3R5bGU9XFxcImZpbGw6I2MyYzJjMlxcXCIvPjxyZWN0IHg9XFxcIjguMTI1XFxcIiB5PVxcXCIxNS4wOTdcXFwiIHdpZHRoPVxcXCIxMy4wNzZcXFwiIGhlaWdodD1cXFwiMS43NVxcXCIgc3R5bGU9XFxcImZpbGw6IzgyOWVjMlxcXCIvPjxyZWN0IHg9XFxcIjguMTI1XFxcIiB5PVxcXCIyNC40MzlcXFwiIHdpZHRoPVxcXCI5Ljc2MlxcXCIgaGVpZ2h0PVxcXCIxLjc1XFxcIiBzdHlsZT1cXFwiZmlsbDojODI5ZWMyXFxcIi8+PHJlY3QgeD1cXFwiOC4xMjVcXFwiIHk9XFxcIjE5Ljc2M1xcXCIgd2lkdGg9XFxcIjE1Ljc1XFxcIiBoZWlnaHQ9XFxcIjEuNzVcXFwiIHN0eWxlPVxcXCJmaWxsOiM4MjllYzJcXFwiLz48cmVjdCB4PVxcXCI4LjEyNVxcXCIgeT1cXFwiMTAuMjNcXFwiIHdpZHRoPVxcXCIxNS43NVxcXCIgaGVpZ2h0PVxcXCIxLjc1XFxcIiBzdHlsZT1cXFwiZmlsbDojODI5ZWMyXFxcIi8+XCIsXG5cdH0sXG5cdFwiUGxhbnRVTUxcIjoge1xuXHRcdGNvbG91cjogXCIjQTExRjQxXCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCItMzMuNDIzXFxcIiB5MT1cXFwiLTI1MC45MTFcXFwiIHgyPVxcXCItMzMuMzUzXFxcIiB5Mj1cXFwiLTI1MC44NThcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMzcuMTM0LCAyNi4wMDEsIDEzLjU3NSwgLTE5LjM4NywgNDY3My40NzMsIC0zOTgyLjAxOSlcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM3Njc2NzZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIi0zMi4xMDdcXFwiIHkxPVxcXCItMjQyLjU2M1xcXCIgeDI9XFxcIi0zMi4wMjhcXFwiIHkyPVxcXCItMjQyLjU4NlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg4MS4wODEsIDU2Ljc3NCwgMTcuMzA2LCAtMjQuNzE1LCA2ODA0LjAyMSwgLTQxNDkuNjQ0KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzAwNzliOVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJjXFxcIiB4MT1cXFwiLTMzLjI4MlxcXCIgeTE9XFxcIi0yNDMuNDIzXFxcIiB4Mj1cXFwiLTMzLjIyNFxcXCIgeTI9XFxcIi0yNDMuNDU1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDYwLjAwMywgNDIuMDE1LCAzNC4xODQsIC00OC44MiwgMTAzNDMuMDA1LCAtMTA0NjkuMDg0KVxcXCIgeGxpbms6aHJlZj1cXFwiI2JcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImRcXFwiIHgxPVxcXCIxMi4zNTZcXFwiIHkxPVxcXCIyNi4yNjhcXFwiIHgyPVxcXCIxNC4wMTFcXFwiIHkyPVxcXCIyNi4yNjhcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM1OTU5NTlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMDg3XFxcIiBzdG9wLWNvbG9yPVxcXCIjNmU2ZTZlXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjI0MlxcXCIgc3RvcC1jb2xvcj1cXFwiIzhjOGM4Y1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC40MDVcXFwiIHN0b3AtY29sb3I9XFxcIiNhNGE0YTRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTc3XFxcIiBzdG9wLWNvbG9yPVxcXCIjYjViNWI1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjc2NVxcXCIgc3RvcC1jb2xvcj1cXFwiI2JmYmZiZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2MyYzJjMlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJlXFxcIiB4MT1cXFwiMTguMjkxXFxcIiB5MT1cXFwiMjYuMTcxXFxcIiB4Mj1cXFwiMTkuOTQ2XFxcIiB5Mj1cXFwiMjYuMTcxXFxcIiB4bGluazpocmVmPVxcXCIjZFxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZlxcXCIgeDE9XFxcIjI0LjQ0XFxcIiB5MT1cXFwiMjYuMTcxXFxcIiB4Mj1cXFwiMjYuMDk2XFxcIiB5Mj1cXFwiMjYuMTcxXFxcIiB4bGluazpocmVmPVxcXCIjZFxcXCIvPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3BsYW50dW1sPC90aXRsZT48cG9seWdvbiBwb2ludHM9XFxcIjIwLjMwNSAxNy44NzIgMjcuMTYgMjIuNDE4IDIxLjcyIDI1LjQ5MyAxNC44NjEgMjAuOTk5IDIwLjMwNSAxNy44NzJcXFwiIHN0eWxlPVxcXCJmaWxsOiMxYzBhNDJcXFwiLz48cGF0aCBkPVxcXCJNMjEuNzE2LDI1LjYxOWwtLjA1NS0uMDM2LTcuMDA1LTQuNTksNS42NTMtMy4yNDcsNy4wNTYsNC42OFptLTYuNjUtNC42MTMsNi42NTgsNC4zNjIsNS4yMzEtMi45NTdMMjAuMywxOFpcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjI2LjQwMSAxMS45MDkgMjkuNDE4IDEzLjU5MiAyNy4wNyAxNS4wODggMjQuMjEzIDEzLjI0NyAyNi40MDEgMTEuOTA5XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTI3LjA2OSwxNS4yMTVsLTMuMDU4LTEuOTcsMi4zODctMS40NiwzLjIyOCwxLjhabS0yLjY1NC0xLjk2NkwyNy4wNywxNC45NiwyOS4yMDgsMTMuNmwtMi44LTEuNTY1WlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTQuNDk4IDE3LjgwNyAyMS4zNTQgMjIuMzU0IDE1LjkxNCAyNS40MjkgOS4wNTUgMjAuOTM1IDE0LjQ5OCAxNy44MDdcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmJkM2ZcXFwiLz48cGF0aCBkPVxcXCJNMTUuOTEsMjUuNTU0bC0uMDU1LS4wMzZMOC44NSwyMC45MjksMTQuNSwxNy42ODFsNy4wNTYsNC42OFpNOS4yNiwyMC45NDEsMTUuOTE4LDI1LjNsNS4yMzEtMi45NTctNi42NTQtNC40MTNaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI3Ljk5IDE3Ljk2NiAxNC45NTQgMjIuMzY2IDkuNTc3IDI1LjUwNCAyLjIxOCAyMC44NDkgNy45OSAxNy45NjZcXFwiIHN0eWxlPVxcXCJmaWxsOiNhMTFmNDBcXFwiLz48cGF0aCBkPVxcXCJNOS41NzUsMjUuNjI5LDIsMjAuODM4bDYtMyw3LjE2NCw0LjUyN1pNMi40MzYsMjAuODYsOS41OCwyNS4zNzhsNS4xNjgtMy4wMTZMNy45ODQsMTguMDg5WlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMi4xMTEgMjEuMDIxIDkuNDQzIDI1LjUxNSA5LjQ0MyAyOS4wNjMgMi4xMTEgMjQuMzMyIDIuMTExIDIxLjAyMVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNiKVxcXCIvPjxwYXRoIGQ9XFxcIk05LjU1LDI5LjI2LDIsMjQuMzkxVjIwLjgyOUw5LjU1LDI1LjQ1NVpNMi4yMTgsMjQuMjc0bDcuMTE4LDQuNTkyVjI1LjU3NUwyLjIxOCwyMS4yMTNaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNC4wNzEgMTMuMzQzIDI3LjAwOSAxNS4yMjIgMjcuMDA5IDIyLjEzMSAyNC4wNzEgMjAuMjQ3IDI0LjA3MSAxMy4zNDNcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYylcXFwiLz48cGF0aCBkPVxcXCJNMjcuMDYzLDIyLjIyOWwtMy4wNDUtMS45NTNWMTMuMjQ1bDMuMDQ1LDEuOTQ3Wm0tMi45MzgtMi4wMTIsMi44MzEsMS44MTVWMTUuMjUxbC0yLjgzMS0xLjgxWlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjcuMTQ5IDIyLjUyNiAyNy4xNDkgMTUuMTk0IDI5LjUxNCAxMy43NzUgMjkuNTE0IDI5LjE0OSAyOC4zMzEgMjkuMTQ5IDkuNjQ2IDI5LjE0OSA5LjY0NiAyNS42MDEgMTUuMDg2IDIyLjUyNiAxNS43ODUgMjUuNjAxIDE1Ljc5NiAyNS42MDEgMjEuNDcyIDIyLjUyNiAyMS44OTEgMjUuNjAxIDIxLjk0NSAyNS42MDEgMjcuMTQ5IDIyLjUyNlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0yOS42MjEsMjkuMjU2SDkuNTM5VjI1LjUzOGw1LjYyLTMuMTc3LjcsMy4wODMsNS43LTMuMDg3LjQyMiwzLjEsNS4wNjEtMi45OTFWMTUuMTMzbDIuNTgtMS41NDhaTTkuNzUzLDI5LjA0MUgyOS40MDdWMTMuOTY0bC0yLjE1MSwxLjI5djcuMzMybC0uMDUzLjAzMS01LjIyOSwzLjA5SDIxLjhsLS40MTEtMy4wMTQtNS41NjQsMy4wMTRIMTUuN2wtLjY4Ni0zLjAxOC01LjI2LDIuOTczWlxcXCIvPjxyZWN0IHg9XFxcIjEyLjM1NlxcXCIgeT1cXFwiMjUuNDRcXFwiIHdpZHRoPVxcXCIxLjY1NlxcXCIgaGVpZ2h0PVxcXCIxLjY1NlxcXCIgcng9XFxcIjAuMjE1XFxcIiByeT1cXFwiMC4yMTVcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMTMuOCwyNy4ySDEyLjU3YS4zMjIuMzIyLDAsMCwxLS4zMjItLjMyMlYyNS42NTVhLjMyMi4zMjIsMCwwLDEsLjMyMi0uMzIySDEzLjhhLjMyMi4zMjIsMCwwLDEsLjMyMi4zMjJ2MS4yMjZBLjMyMi4zMjIsMCwwLDEsMTMuOCwyNy4yWk0xMi41NywyNS41NDdhLjEwOC4xMDgsMCwwLDAtLjEwNy4xMDd2MS4yMjZhLjEwOC4xMDgsMCwwLDAsLjEwNy4xMDdIMTMuOGEuMTA4LjEwOCwwLDAsMCwuMTA3LS4xMDdWMjUuNjU1YS4xMDguMTA4LDAsMCwwLS4xMDctLjEwN1pcXFwiLz48cmVjdCB4PVxcXCIxOC4yOTFcXFwiIHk9XFxcIjI1LjM0M1xcXCIgd2lkdGg9XFxcIjEuNjU2XFxcIiBoZWlnaHQ9XFxcIjEuNjU2XFxcIiByeD1cXFwiMC4yMTVcXFwiIHJ5PVxcXCIwLjIxNVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNlKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS43MzIsMjcuMTA2SDE4LjUwNWEuMzIyLjMyMiwwLDAsMS0uMzIyLS4zMjJWMjUuNTU4YS4zMjIuMzIyLDAsMCwxLC4zMjItLjMyMmgxLjIyNmEuMzIyLjMyMiwwLDAsMSwuMzIyLjMyMnYxLjIyNkEuMzIyLjMyMiwwLDAsMSwxOS43MzIsMjcuMTA2Wm0tMS4yMjYtMS42NTZhLjEwOC4xMDgsMCwwLDAtLjEwNy4xMDd2MS4yMjZhLjEwOC4xMDgsMCwwLDAsLjEwNy4xMDdoMS4yMjZhLjEwOC4xMDgsMCwwLDAsLjEwNy0uMTA3VjI1LjU1OGEuMTA4LjEwOCwwLDAsMC0uMTA3LS4xMDdaXFxcIi8+PHJlY3QgeD1cXFwiMjQuNDRcXFwiIHk9XFxcIjI1LjM0M1xcXCIgd2lkdGg9XFxcIjEuNjU2XFxcIiBoZWlnaHQ9XFxcIjEuNjU2XFxcIiByeD1cXFwiMC4yMTVcXFwiIHJ5PVxcXCIwLjIxNVxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNmKVxcXCIvPjxwYXRoIGQ9XFxcIk0yNS44ODEsMjcuMTA2SDI0LjY1NWEuMzIyLjMyMiwwLDAsMS0uMzIyLS4zMjJWMjUuNTU4YS4zMjIuMzIyLDAsMCwxLC4zMjItLjMyMmgxLjIyNmEuMzIyLjMyMiwwLDAsMSwuMzIyLjMyMnYxLjIyNkEuMzIyLjMyMiwwLDAsMSwyNS44ODEsMjcuMTA2Wm0tMS4yMjYtMS42NTZhLjEwOC4xMDgsMCwwLDAtLjEwNy4xMDd2MS4yMjZhLjEwOC4xMDgsMCwwLDAsLjEwNy4xMDdoMS4yMjZhLjEwOC4xMDgsMCwwLDAsLjEwNy0uMTA3VjI1LjU1OGEuMTA4LjEwOCwwLDAsMC0uMTA3LS4xMDdaXFxcIi8+PHBhdGggZD1cXFwiTTI3LjIxNSwxMS4yM2MtLjA1Mi4wNjktLjQxNy0uMjYyLS42NTMtLjUyNmE0LjQwOCw0LjQwOCwwLDAsMS0uNTE2LS43M0EyLjYsMi42LDAsMCwxLDI1LjcsOS4yYTIuMzU4LDIuMzU4LDAsMCwxLS4wNTItLjY4MiwyLjk1OSwyLjk1OSwwLDAsMSwuMTI5LS43NDksMy4xNDIsMy4xNDIsMCwwLDEsLjc4Ny0xLjIwNywxNS41MzIsMTUuNTMyLDAsMCwwLDEuMjgzLTEuNCwzLjA2MiwzLjA2MiwwLDAsMCwuNDc5LS45MjcsMy45NzksMy45NzksMCwwLDAsLjE1MS0uODU1Yy4wMTktLjM2NC0uMDI1LS41OTMuMDIzLS42MTNzLjIxNS4yNzQuMjg3LjU2NGEzLjE2NywzLjE2NywwLDAsMS0uNDU4LDIuMSw2LjksNi45LDAsMCwxLTEuMDk0LDEuNDQ4LDIuOCwyLjgsMCwwLDAtLjg0OSwxLjIzNEEyLjQ2NiwyLjQ2NiwwLDAsMCwyNi4zLDguOGEzLjQ2NSwzLjQ2NSwwLDAsMCwuNDc2LDEuNTQyQzI3LjA2NCwxMC45MTQsMjcuMjU2LDExLjE3NSwyNy4yMTUsMTEuMjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWEyZDJlXFxcIi8+PHBhdGggZD1cXFwiTTI3LjE5MywxMS4yNjZjLS4xMjQsMC0uNDkyLS4zNjUtLjY1MS0uNTQ0YTQuNDc4LDQuNDc4LDAsMCwxLS41Mi0uNzM0LDIuNjI4LDIuNjI4LDAsMCwxLS4zNDYtLjc4MSwyLjM3NSwyLjM3NSwwLDAsMS0uMDUzLS42OSwyLjk3OCwyLjk3OCwwLDAsMSwuMTMtLjc1NiwzLjIwOCwzLjIwOCwwLDAsMSwuNzkzLTEuMjE2Yy4yOTQtLjMzMS41LS41MjguNjU5LS42ODZhNC4zOTMsNC4zOTMsMCwwLDAsLjYyMi0uNzExLDMuMDUyLDMuMDUyLDAsMCwwLC40NzYtLjkxOSwzLjk1MSwzLjk1MSwwLDAsMCwuMTUtLjg0OWMuMDA4LS4xNTksMC0uMjk0LDAtLjM5MywwLS4xNTktLjAwNi0uMjI1LjAzOC0uMjQzYS4wNS4wNSwwLDAsMSwuMDQzLDAsMS4yMjYsMS4yMjYsMCwwLDEsLjI4LjU3OSwzLjE2NywzLjE2NywwLDAsMS0uNDYsMi4xMjEsNi45MjgsNi45MjgsMCwwLDEtMS4xLDEuNDUzYy0uMDU1LjA2LS4xMDkuMTE2LS4xNjIuMTcxYTIuMywyLjMsMCwwLDAtLjY4MSwxLjA1MiwyLjQ3LDIuNDcsMCwwLDAtLjA4Mi42NzMsMy40NTgsMy40NTgsMCwwLDAsLjQ3MywxLjUzYy4xMTQuMjMxLjIxNS40MTUuMjg5LjU0OS4xMjkuMjM1LjE3OC4zMjMuMTQyLjM2OWgwYS4wNTEuMDUxLDAsMCwxLS4wNC4wMlpNMjguNTEyLDIuOGEuODYzLjg2MywwLDAsMCwwLC4xOWMwLC4xLjAwNy4yMzYsMCwuNGE0LjAyMSw0LjAyMSwwLDAsMS0uMTUyLjg2MSwzLjEwNiwzLjEwNiwwLDAsMS0uNDgzLjkzNCw0LjQzNyw0LjQzNywwLDAsMS0uNjI5LjcxOWMtLjE2Mi4xNTgtLjM2NC4zNTQtLjY1Ny42ODNhMy4xNjgsMy4xNjgsMCwwLDAtLjc4MiwxLjIsMi45MzMsMi45MzMsMCwwLDAtLjEyOC43NDMsMi4zMjUsMi4zMjUsMCwwLDAsLjA1Mi42NzUsMi41OSwyLjU5LDAsMCwwLC4zNDEuNzY3LDQuNDIyLDQuNDIyLDAsMCwwLC41MTMuNzI1LDIuMDM1LDIuMDM1LDAsMCwwLC42MTEuNTI2LDEuMTgzLDEuMTgzLDAsMCwwLS4xNDctLjMxYy0uMDc0LS4xMzQtLjE3NS0uMzE4LS4yOS0uNTUxQTMuNSwzLjUsMCwwLDEsMjYuMjc4LDguOGEyLjUzLDIuNTMsMCwwLDEsLjA4NC0uNjg4LDIuMzc1LDIuMzc1LDAsMCwxLC42OTQtMS4wNzVjLjA1Mi0uMDU1LjEwNi0uMTExLjE2MS0uMTcxYTYuODc5LDYuODc5LDAsMCwwLDEuMDktMS40NDIsMy4xMTksMy4xMTksMCwwLDAsLjQ1Ni0yLjA4M0ExLjI4MSwxLjI4MSwwLDAsMCwyOC41MTIsMi44WlxcXCIvPjxwYXRoIGQ9XFxcIk0yOS45NzIsNi4wODdjLS4wMTktLjA4OC0uNDMyLS4wNC0uNzY2LjA3M2EyLjYsMi42LDAsMCwwLTEuMDU5LjcyMiwyLjgsMi44LDAsMCwwLS45MTYsMS44NTUsMi45NzIsMi45NzIsMCwwLDAsLjI1OCwxLjA2Yy4yMjEuNTcyLjQ1NS43NzMuNDQ0LDEuMjI1LS4wMDcuMy0uMTE0LjQ4NC0uMDQ4LjU0OXMuMzE0LS4xLjQ2Mi0uMzEzYTEuOCwxLjgsMCwwLDAsLjI1OS0xLjAyMmMtLjA0Ni0uODE1LS42LTEuMDE1LS42MDgtMS44YTEuODU4LDEuODU4LDAsMCwxLC4xMjktLjY3NkMyOC41Nyw2LjUwOSwzMC4wMDgsNi4yNTIsMjkuOTcyLDYuMDg3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2VhMmQyZVxcXCIvPjxwYXRoIGQ9XFxcIk0yNy45MzQsMTEuNjE3YS4wOTQuMDk0LDAsMCwxLS4wNjktLjAyNmMtLjA0Ni0uMDQ2LS4wMy0uMTIyLS4wMDUtLjIzN2ExLjcxOCwxLjcxOCwwLDAsMCwuMDQ1LS4zMzEsMS4zNzQsMS4zNzQsMCwwLDAtLjIxNC0uNzIsNSw1LDAsMCwxLS4yMjgtLjQ5NSwyLjk4LDIuOTgsMCwwLDEtLjI1OS0xLjA3LDIuODEsMi44MSwwLDAsMSwuOTIzLTEuODc0LDIuNjQsMi42NCwwLDAsMSwxLjA3LS43MjksMS40ODIsMS40ODIsMCwwLDEsLjc2Ni0uMUEuMDY1LjA2NSwwLDAsMSwzMCw2LjA4MWgwYy4wMTUuMDctLjA5Mi4xMjEtLjMwNi4yMjRhMi43MywyLjczLDAsMCwwLTEuNTQyLDEuNDYzLDEuODI3LDEuODI3LDAsMCwwLS4xMjcuNjY3LDEuNjQ1LDEuNjQ1LDAsMCwwLC4yOTEuODg1LDEuODg5LDEuODg5LDAsMCwxLC4zMTcuOTE0LDEuODE0LDEuODE0LDAsMCwxLS4yNjQsMS4wMzkuODA5LjgwOSwwLDAsMS0uNDIxLjM0MlptMS44ODktNS41NDlhMi4xMTcsMi4xMTcsMCwwLDAtLjYwOC4xMTcsMi41ODgsMi41ODgsMCwwLDAtMS4wNDguNzE1LDIuNzY0LDIuNzY0LDAsMCwwLS45MDksMS44MzcsMi45MzUsMi45MzUsMCwwLDAsLjI1NiwxLjA1LDQuOTU1LDQuOTU1LDAsMCwwLC4yMjUuNDksMS40MzMsMS40MzMsMCwwLDEsLjIyLjc0NSwxLjc2NSwxLjc2NSwwLDAsMS0uMDQ3LjM0MWMtLjAxOS4wOTEtLjAzNS4xNjMtLjAwOS4xODhhLjA0Ni4wNDYsMCwwLDAsLjAzOC4wMS43NjkuNzY5LDAsMCwwLC4zODItLjMyLDEuNzkzLDEuNzkzLDAsMCwwLC4yNTQtMS4wMDUsMS44NDQsMS44NDQsMCwwLDAtLjMxLS44OSwxLjcxMSwxLjcxMSwwLDAsMS0uMy0uOTExLDEuODc3LDEuODc3LDAsMCwxLC4xMy0uNjg2QTIuNzc2LDIuNzc2LDAsMCwxLDI5LjY3LDYuMjU3Yy4xMjYtLjA2MS4yODMtLjEzNi4yNzctLjE2NGwtLjAwOC0uMDA3QS4yNjQuMjY0LDAsMCwwLDI5LjgyMyw2LjA2OFpcXFwiLz5cIixcblx0fSxcblx0XCJQb3dlclF1ZXJ5XCI6IHtcblx0XHRjb2xvdXI6IFwiI2NmY2ZjZlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTMwLDI1LjU4M0gyNS43NTdWMTUuMzc4YTguMjcxLDguMjcxLDAsMCwwLS44MzItNC4yNjFBMy4wNjEsMy4wNjEsMCwwLDAsMjIuMTE4LDkuOGEzLjM4MywzLjM4MywwLDAsMC0yLjgyNiwxLjY2NCw2Ljc5MSw2Ljc5MSwwLDAsMC0xLjE2MSwzLjk4N1YyNS41ODNIMTMuODY5VjE1LjAzMXEwLTUuMjMxLTMuNjk0LTUuMjMxYTMuMzMyLDMuMzMyLDAsMCwwLTIuODI2LDEuNTczLDYuOTM1LDYuOTM1LDAsMCwwLTEuMTA2LDQuMDc4VjI1LjU4M0gyVjYuODU2SDYuMjQzVjkuODE4aC4wNzNhNi40ODgsNi40ODgsMCwwLDEsNS45MDctMy40LDUuNTY5LDUuNTY5LDAsMCwxLDMuMzkzLDEuMDdBNS4zMjgsNS4zMjgsMCwwLDEsMTcuNiwxMC4yOTRhNi42ODMsNi42ODMsMCwwLDEsNi4yMTgtMy44NzdRMzAsNi40MTcsMzAsMTQuMDQzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2NmY2ZjZlxcXCIvPlwiLFxuXHR9LFxuXHRcIlBvd2VyU2hlbGxcIjoge1xuXHRcdGNvbG91cjogXCIjNTM5MWZlXCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCIyMy4zMjVcXFwiIHkxPVxcXCItMTE4LjU0M1xcXCIgeDI9XFxcIjcuMjZcXFwiIHkyPVxcXCItMTA0LjE5M1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxLCAwLCAwLCAtMSwgMCwgLTk2KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzUzOTFmZVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzNlNmRiZlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiNy4xXFxcIiB5MT1cXFwiLTEwNC4wMDJcXFwiIHgyPVxcXCIyMy4wMDFcXFwiIHkyPVxcXCItMTE4LjI5MlxcXCIgeGxpbms6aHJlZj1cXFwiI2FcXFwiLz48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9wb3dlcnNoZWxsPC90aXRsZT48cGF0aCBkPVxcXCJNMy4xNzQsMjYuNTg5YTEuMTU0LDEuMTU0LDAsMCwxLS45MjgtLjQyMywxLjIzNCwxLjIzNCwwLDAsMS0uMjEtMS4wNTJMNi4yMzMsNi43OEExLjgsMS44LDAsMCwxLDcuOTE0LDUuNDFIMjguODI2YTEuMTU3LDEuMTU3LDAsMCwxLC45MjguNDIzLDEuMjM1LDEuMjM1LDAsMCwxLC4yMSwxLjA1MmwtNC4yLDE4LjMzNWExLjgsMS44LDAsMCwxLTEuNjgxLDEuMzdIMy4xNzRaXFxcIiBzdHlsZT1cXFwiZmlsbC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTcuOTE0LDUuNjQ2SDI4LjgyNmEuOTEzLjkxMywwLDAsMSwuOTA4LDEuMTg3bC00LjIsMTguMzM0YTEuNTc1LDEuNTc1LDAsMCwxLTEuNDUxLDEuMTg3SDMuMTc0YS45MTMuOTEzLDAsMCwxLS45MDgtMS4xODdsNC4yLTE4LjMzNEExLjU3NCwxLjU3NCwwLDAsMSw3LjkxNCw1LjY0NlpcXFwiIHN0eWxlPVxcXCJmaWxsLXJ1bGU6ZXZlbm9kZDtmaWxsOnVybCgjYilcXFwiLz48cGF0aCBkPVxcXCJNMTYuMDQsMjEuNTQ0aDUuMDg2YTEuMTE4LDEuMTE4LDAsMCwxLDAsMi4yMzRIMTYuMDRhMS4xMTgsMS4xMTgsMCwwLDEsMC0yLjIzNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyYzU1OTE7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMTkuMzM5LDE2LjU3OGExLjc2MiwxLjc2MiwwLDAsMS0uNTkxLjZMOS4zMDksMjMuOTUzYTEuMjI0LDEuMjI0LDAsMCwxLTEuNDM4LTEuOTc3bDguNTEyLTYuMTY0di0uMTI2TDExLjAzNSwxMGExLjIyNCwxLjIyNCwwLDAsMSwxLjc4Mi0xLjY3Mmw2LjQxOCw2LjgyN0ExLjE2NiwxLjE2NiwwLDAsMSwxOS4zMzksMTYuNTc4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzJjNTU5MTtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4xLDE2LjM0MmExLjc0OSwxLjc0OSwwLDAsMS0uNTkuNkw5LjA3NCwyMy43MThhMS4yMjUsMS4yMjUsMCwwLDEtMS40MzktMS45NzdsOC41MTMtNi4xNjRWMTUuNDVMMTAuOCw5Ljc2MWExLjIyNCwxLjIyNCwwLDAsMSwxLjc4My0xLjY3MkwxOSwxNC45MTZBMS4xNjIsMS4xNjIsMCwwLDEsMTkuMSwxNi4zNDJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBhdGggZD1cXFwiTTE1LjksMjEuNDEyaDUuMDg2YTEuMDU5LDEuMDU5LDAsMSwxLDAsMi4xMThIMTUuOWExLjA1OSwxLjA1OSwwLDEsMSwwLTIuMTE4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZjtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiI1wiLFxuXHRcdF0sXG5cdH0sXG5cdFwiUHJvY2Vzc2luZ1wiOiB7XG5cdFx0Y29sb3VyOiBcIiMxYzRjNzBcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjE2XFxcIiB5MT1cXFwiM1xcXCIgeDI9XFxcIjE2XFxcIiB5Mj1cXFwiMjlcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiMxYzRjNzBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiMwYzJiNDJcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3Byb2Nlc3NpbmdsYW5nPC90aXRsZT48cGF0aCBkPVxcXCJNMTUuOTIyLDE5Ljk2MmExMywxMywwLDAsMS0xLjY0Ny0uMDc3djUuNTUyYTI3Ljc2LDI3Ljc2LDAsMCwxLDMuMzMyLjQ2MVYyOUg1Ljk2OFYyNS45QTI3Ljk4OCwyNy45ODgsMCwwLDEsOS4zLDI1LjQzOFY2LjcxNWEyOC4yMTUsMjguMjE1LDAsMCwxLTMuMzMxLS40NnYtMy4xSDguOTU1QzEwLjE4LDMuMTUzLDEzLjU0OSwzLDE2LjIzLDNjNi4zMTgsMCw5LjgsMi45NDgsOS44LDhDMjYuMDMxLDE2LjAxOCwyMi4yLDE5Ljk2MiwxNS45MjIsMTkuOTYyWk0xNiw3LjA1OGMtLjYxMywwLTEuMTQ5LDAtMS43MjMuMDM4djguNjE1YTkuNjk0LDkuNjk0LDAsMCwwLDEuNDU1LjExNWMzLjAyNS0uMDM4LDUuMTMtMS43MjMsNS4xMy00LjUxOUMyMC44NjIsOC43LDE5LjQwNyw3LjA1OCwxNiw3LjA1OFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz5cIixcblx0fSxcblx0XCJQcm9sb2dcIjoge1xuXHRcdGNvbG91cjogXCIjZWMxYzI0XCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImFcXFwiIGN4PVxcXCIxMzQxLjI1XFxcIiBjeT1cXFwiLTMzOTYuODY2XFxcIiByPVxcXCIxOC4yOTlcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTEzMjcuMDc3IDM0MDUuOTM1KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4xODFcXFwiIHN0b3AtY29sb3I9XFxcIiNmYmZiZmJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzY1XFxcIiBzdG9wLWNvbG9yPVxcXCIjZWZlZmYwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjU1MlxcXCIgc3RvcC1jb2xvcj1cXFwiI2RhZGJkY1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43MzhcXFwiIHN0b3AtY29sb3I9XFxcIiNiZWJmYzJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuODI0XFxcIiBzdG9wLWNvbG9yPVxcXCIjYWViMGIzXFxcIi8+PC9yYWRpYWxHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImJcXFwiIGN4PVxcXCI2LjY3OFxcXCIgY3k9XFxcIjg0Ljc0XFxcIiByPVxcXCIxNS41NTRcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTEuODg0IC04Ni4xNTQpIHNjYWxlKDEuMDcyIDEuMTY2KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZhZmRmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4wNzlcXFwiIHN0b3AtY29sb3I9XFxcIiNlZWY1ZmFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjJcXFwiIHN0b3AtY29sb3I9XFxcIiNjZmRmZWNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDA3XFxcIiBzdG9wLWNvbG9yPVxcXCIjOWRiYmQ1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjYzMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzU4OGFiNVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43NDVcXFwiIHN0b3AtY29sb3I9XFxcIiMzMjZmYTRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjMmI2Njk4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjg5N1xcXCIgc3RvcC1jb2xvcj1cXFwiIzE3NGU3OFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC45OTRcXFwiIHN0b3AtY29sb3I9XFxcIiMwMDMxNTJcXFwiLz48L3JhZGlhbEdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiY1xcXCIgY3g9XFxcIjExLjI0MVxcXCIgY3k9XFxcIi05Ljg5N1xcXCIgcj1cXFwiMTYuNTk0XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDAgMjIuNjMxKSBzY2FsZSgxIDEuMDYyKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZDU0MFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42NjdcXFwiIHN0b3AtY29sb3I9XFxcIiNlYzFjMjRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTk0XFxcIiBzdG9wLWNvbG9yPVxcXCIjNzYwMDAwXFxcIi8+PC9yYWRpYWxHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9XFxcImRcXFwiIGN4PVxcXCIxMi4yODZcXFwiIGN5PVxcXCIyNi4xMjdcXFwiIHI9XFxcIjIuMDgzXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZGRkZmUwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjE3NFxcXCIgc3RvcC1jb2xvcj1cXFwiI2Q5ZGJkY1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zNTFcXFwiIHN0b3AtY29sb3I9XFxcIiNjZGNmZDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTMxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYjhiYWJiXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjcxMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzljOWU5ZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC44OTFcXFwiIHN0b3AtY29sb3I9XFxcIiM3ODc5N2JcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM1ZTVmNjFcXFwiLz48L3JhZGlhbEdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiZVxcXCIgY3g9XFxcIjE5LjA2NFxcXCIgY3k9XFxcIjI2LjEyN1xcXCIgcj1cXFwiMi4wODNcXFwiIHhsaW5rOmhyZWY9XFxcIiNkXFxcIi8+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJmXFxcIiBjeD1cXFwiMTUuNDM0XFxcIiBjeT1cXFwiMTYuMTkxXFxcIiByPVxcXCIyLjY4N1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgwIDAuNDYxKVxcXCIgeGxpbms6aHJlZj1cXFwiI2RcXFwiLz48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9wcm9sb2c8L3RpdGxlPjxnIHN0eWxlPVxcXCJpc29sYXRpb246aXNvbGF0ZVxcXCI+PGNpcmNsZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCIxNlxcXCIgcj1cXFwiMTRcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC02LjYwMiAxNC45Mikgcm90YXRlKC00Mi4yNjUpXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTE5LjkzOCw2LjMwOWE5Ljc4NSw5Ljc4NSwwLDAsMC02LjUtMi4zMzlDOC41NjQsMy45NywzLjc3NCw3LjcsMy40MDUsMTQuOTYxYy0uNCw3LjgsNC43NSwxMi44NjIsMTIsMTIuODYyLDEwLjczMywwLDE2LjY3Mi05Ljc4LDEwLjAyNy0yMC4zODgsNC42NzEsMTAuNi0uNTI3LDE3LjI3OS03LjIzNiwxNy4yNzktNS40NDEsMC05LjYxLTMuNjUxLTkuNjEtMTAuMzQ1QzguNTgyLDQuNzA5LDE1LjgyMyw0LjAzOSwxOS45MzgsNi4zMDlaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2IpXFxcIi8+PHBhdGggZD1cXFwiTTIyLjcsMTAuNDE1Yy0uMjkzLS45NC0uNjQ1LTIuNzg4LjYzNC0zLjg2YTMuNzI5LDMuNzI5LDAsMCwwLTMuODQ0LDEuNTM0QTkuMTY1LDkuMTY1LDAsMCwwLDEyLDguMSwzLjcyOSwzLjcyOSwwLDAsMCw4LjE1Miw2LjU1NWMxLjMwOSwxLjEuOTEsMy4wMDUuNjE0LDMuOTIzQTEwLjUxNywxMC41MTcsMCwwLDAsNi4xLDE3LjUyNGMwLDIuMTc0LDEuNCw0LjY0NSwxLjY3NSw3Ljk1NWwxLjc2OC0xLjUzMmExMS43NDMsMTEuNzQzLDAsMCwwLDYuMjEyLDEuNDMzLDExLjc0MSwxMS43NDEsMCwwLDAsNi4yMTItMS40MzNsMS43NjksMS41MzJjLjI4LTMuMzEsMS42NzUtNS43ODEsMS42NzUtNy45NTVBMTAuNTEyLDEwLjUxMiwwLDAsMCwyMi43LDEwLjQxNVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYylcXFwiLz48cGF0aCBkPVxcXCJNMTAuNzIyLDI3Ljg2N2ExLjYyMSwxLjYyMSwwLDEsMSwzLjI0LDBjMCwuMDE4LDAsLjAzNSwwLC4wNTNhMi4yMzQsMi4yMzQsMCwxLDAtMy4yMjguMTI2QzEwLjcyNSwyNy45ODcsMTAuNzIyLDI3LjkyNywxMC43MjIsMjcuODY3WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNkKVxcXCIvPjxwYXRoIGQ9XFxcIk0yMC42MjksMjcuODY3YTEuNjIxLDEuNjIxLDAsMSwwLTMuMjQsMGMwLC4wMTgsMCwuMDM1LDAsLjA1M2EyLjIzNCwyLjIzNCwwLDEsMSwzLjIyOC4xMjZBMS42NzgsMS42NzgsMCwwLDAsMjAuNjI5LDI3Ljg2N1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZSlcXFwiLz48ZyBzdHlsZT1cXFwib3BhY2l0eTowLjUzO21peC1ibGVuZC1tb2RlOm11bHRpcGx5XFxcIj48cGF0aCBkPVxcXCJNOC4zNDYsMTguNGMtLjEzMi42NjctLjk3MS44NzctLjk3MS44NzdBMS4zNTksMS4zNTksMCwwLDEsNi44MDksMTguMWEyLjkyOSwyLjkyOSwwLDAsMCwuNDQzLDEuNzkzQTIuOTI3LDIuOTI3LDAsMCwwLDguMzQ2LDE4LjRaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PHBhdGggZD1cXFwiTTEwLjAwOCwxOC43MzdjLS4xMzIuNjY3LS45NzIuODc3LS45NzIuODc3YTEuMzYsMS4zNiwwLDAsMS0uNTY2LTEuMTgyLDIuOTI5LDIuOTI5LDAsMCwwLC40NDQsMS43OTNBMi45MjYsMi45MjYsMCwwLDAsMTAuMDA4LDE4LjczN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48cGF0aCBkPVxcXCJNOC44MzMsMjAuMjQ5Yy0uMTMyLjY2Ny0uOTcxLjg3Ny0uOTcxLjg3N0ExLjM1OSwxLjM1OSwwLDAsMSw3LjMsMTkuOTQ0YTIuOTI5LDIuOTI5LDAsMCwwLC40NDMsMS43OTNBMi45MjUsMi45MjUsMCwwLDAsOC44MzMsMjAuMjQ5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPjxwYXRoIGQ9XFxcIk0xMC41LDIwLjU4M2MtLjEzMi42NjctLjk3MS44NzctLjk3MS44NzdhMS4zNiwxLjM2LDAsMCwxLS41NjYtMS4xODJBMi45MjksMi45MjksMCwwLDAsOS40LDIyLjA3MiwyLjkyNywyLjkyNywwLDAsMCwxMC41LDIwLjU4M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48cGF0aCBkPVxcXCJNOS4zMjgsMjIuMTIxYy0uMTMyLjY2Ny0uOTcyLjg3Ny0uOTcyLjg3N2ExLjM2LDEuMzYsMCwwLDEtLjU2NS0xLjE4MiwyLjkyOSwyLjkyOSwwLDAsMCwuNDQzLDEuNzkzQTIuOTI2LDIuOTI2LDAsMCwwLDkuMzI4LDIyLjEyMVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48cGF0aCBkPVxcXCJNMTEuNjY0LDE5LjA3Yy0uMTMyLjY2Ny0uOTcyLjg3Ny0uOTcyLjg3N2ExLjM1OSwxLjM1OSwwLDAsMS0uNTY1LTEuMTgyLDIuOTMsMi45MywwLDAsMCwuNDQzLDEuNzkzQTIuOTI3LDIuOTI3LDAsMCwwLDExLjY2NCwxOS4wN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48L2c+PGcgc3R5bGU9XFxcIm9wYWNpdHk6MC41MzttaXgtYmxlbmQtbW9kZTptdWx0aXBseVxcXCI+PHBhdGggZD1cXFwiTTIzLjE1NywxOC40Yy4xMzIuNjY3Ljk3MS44NzcuOTcxLjg3N2ExLjM1OSwxLjM1OSwwLDAsMCwuNTY2LTEuMTgyLDIuOTMsMi45MywwLDAsMS0uNDQzLDEuNzkzQTIuOTI3LDIuOTI3LDAsMCwxLDIzLjE1NywxOC40WlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPjxwYXRoIGQ9XFxcIk0yMS40OTUsMTguNzM3Yy4xMzIuNjY3Ljk3Mi44NzcuOTcyLjg3N2ExLjM2LDEuMzYsMCwwLDAsLjU2NS0xLjE4MiwyLjkzMSwyLjkzMSwwLDAsMS0uNDQ0LDEuNzkzQTIuOTI2LDIuOTI2LDAsMCwxLDIxLjQ5NSwxOC43MzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PHBhdGggZD1cXFwiTTIyLjY2OSwyMC4yNDljLjEzMi42NjcuOTcxLjg3Ny45NzEuODc3YTEuMzYsMS4zNiwwLDAsMCwuNTY2LTEuMTgyLDIuOTI5LDIuOTI5LDAsMCwxLS40NDMsMS43OTNBMi45MjYsMi45MjYsMCwwLDEsMjIuNjY5LDIwLjI0OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48cGF0aCBkPVxcXCJNMjEuMDA4LDIwLjU4M2MuMTMyLjY2Ny45NzEuODc3Ljk3MS44NzdhMS4zNTksMS4zNTksMCwwLDAsLjU2NS0xLjE4MiwyLjkyOCwyLjkyOCwwLDAsMS0uNDQzLDEuNzkzQTIuOTI3LDIuOTI3LDAsMCwxLDIxLjAwOCwyMC41ODNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PHBhdGggZD1cXFwiTTIyLjE3NSwyMi4xMjFjLjEzMi42NjcuOTcyLjg3Ny45NzIuODc3YTEuMzYsMS4zNiwwLDAsMCwuNTY1LTEuMTgyLDIuOTI4LDIuOTI4LDAsMCwxLS40NDQsMS43OTNBMi45MjcsMi45MjcsMCwwLDEsMjIuMTc1LDIyLjEyMVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48cGF0aCBkPVxcXCJNMTkuODM4LDE5LjA3Yy4xMzIuNjY3Ljk3Mi44NzcuOTcyLjg3N2ExLjM1OSwxLjM1OSwwLDAsMCwuNTY1LTEuMTgyLDIuOTI4LDIuOTI4LDAsMCwxLS40NDMsMS43OTNBMi45MjgsMi45MjgsMCwwLDEsMTkuODM4LDE5LjA3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPjwvZz48Y2lyY2xlIGN4PVxcXCIxMS4zMzlcXFwiIGN5PVxcXCIxNC4wNzRcXFwiIHI9XFxcIjMuODE2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTIuMTNcXFwiIGN5PVxcXCIxNC40NDZcXFwiIHI9XFxcIjEuODYxXFxcIiBzdHlsZT1cXFwiZmlsbDojYmRiZmMxXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTIuMTNcXFwiIGN5PVxcXCIxNC40NDZcXFwiIHI9XFxcIjEuMTkxXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTEuNjAzXFxcIiBjeT1cXFwiMTQuMDI3XFxcIiByPVxcXCIwLjM1N1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxjaXJjbGUgY3g9XFxcIjIwLjExMlxcXCIgY3k9XFxcIjE0LjA3NFxcXCIgcj1cXFwiMy44MTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48Y2lyY2xlIGN4PVxcXCIyMC45MDNcXFwiIGN5PVxcXCIxNC40NDZcXFwiIHI9XFxcIjEuODYxXFxcIiBzdHlsZT1cXFwiZmlsbDojYmRiZmMxXFxcIi8+PGNpcmNsZSBjeD1cXFwiMjAuOTAzXFxcIiBjeT1cXFwiMTQuNDQ2XFxcIiByPVxcXCIxLjE5MVxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPjxjaXJjbGUgY3g9XFxcIjIwLjM3NVxcXCIgY3k9XFxcIjE0LjAyN1xcXCIgcj1cXFwiMC4zNTdcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTUuNzA2LDIxLjUyYzAtMS40MTIsMi4xNTctMy40MTMsMi4xNTctNC44ODdhMi4xNTcsMi4xNTcsMCwwLDAtNC4zMTMsMEMxMy41NSwxOC4xMDcsMTUuNzA2LDIwLjEwOCwxNS43MDYsMjEuNTJaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2YpXFxcIi8+PC9nPlwiLFxuXHR9LFxuXHRcIlByb3RvY29sIEJ1ZmZlcnNcIjoge1xuXHRcdGNvbG91cjogXCIjOTdmZjI3XCIsXG5cdFx0aWNvbjogXCI8cG9seWdvbiBwb2ludHM9XFxcIjE1Ljk5NiAzLjIyIDI2Ljk2NiA5LjcgMjYuOTU0IDIyLjMgMTYgMjguNzggNS4wMzggMjIuNDA4IDUuMDM0IDkuNjI4IDE1Ljk5NiAzLjIyXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTE2LDIsMy45ODcsOS4wMmwwLDE0TDE2LDMwbDEyLTcuMS4wMTMtMTMuOFpNMjYuOTU0LDIyLjMsMTYsMjguNzgsNS4wMzgsMjIuNDA4bDAtMTIuNzhMMTYsMy4yMiwyNi45NjYsOS43WlxcXCIgc3R5bGU9XFxcImZpbGw6IzE3MWMxZVxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjUuNTY5IDEzLjY1NCAxOS45NDYgMTYuOTY0IDE5Ljk0MyAyNC44OSAyNS41OSAyMS41NjUgMjUuNTY5IDEzLjY1NFxcXCIgc3R5bGU9XFxcImZpbGw6IzFlYThmZlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjMuMjgyIDEyLjMwMyAyNS41NjkgMTMuNjU0IDE5Ljk0NiAxNi45NjQgMTkuOTQzIDI0Ljg5IDE3LjMyNyAyMy4zNyAxNy4zNDggMTUuODc1IDIzLjI4MiAxMi4zMDNcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MGJmZmZcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIyLjUxMiAxMC4zNSAyMi41MTQgMTEuODE2IDE2LjQxMSAxNS40OTggMTYuNDE4IDIzLjU5NyAxNC45OTggMjQuNDMxIDE0Ljk5NCAxNC44NTYgMjIuNTEyIDEwLjM1XFxcIiBzdHlsZT1cXFwiZmlsbDojOTdmZjI3XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMC4wMDggOC44NzEgMjIuNTEyIDEwLjM1IDE0Ljk5NCAxNC44NTYgMTQuOTk4IDI0LjQzMSAxMi4xOTQgMjIuODAxIDEyLjE4OSAxMy40MTMgMjAuMDA4IDguODcxXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJmZjcyXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxOS4yMjYgNi42MDYgMTkuMjI2IDguMzc0IDExLjIxIDEzLjA3NCAxMS4yMSAyMy4xNzIgOS44MDggMjMuOTg4IDkuODM1IDEyLjI3NyAxOS4yMjYgNi42MDZcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZjI3NGJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE2LjE2IDQuNzg0IDYuNTMgMTAuMzk0IDYuNTI5IDIyLjA3MSA5LjgyNyAyMy45ODggOS44MzUgMTIuMjc3IDE5LjIzNSA2LjYwNiAxNi4xNiA0Ljc4NFxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmNWM3N1xcXCIvPlwiLFxuXHR9LFxuXHRcIlB1Z1wiOiB7XG5cdFx0Y29sb3VyOiBcIiM0NDI4MjNcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yNS41MTQsMTIuODQ2Yy0uMDUyLS45MzguMjA5LTEuODI1LS4yMDktMi41NTQtMS4wNDMtMS44MjUtMy42NDktMi44NjctOC44NjMtMi44NjdWNy4zNzJoMHYuMDUyYy01LjczNSwwLTguMTg1LDEuMDQzLTkuMjI3LDIuODY3YTUuNiw1LjYsMCwwLDAtLjQ2OSwyLjU1NCw5LjU0Niw5LjU0NiwwLDAsMC0uMjYxLDIuNDVjLjE1NiwxLjE0Ny4yNjEsMi4yOTQuNDE3LDMuMzM2LjE1Ni44ODYsMS40MDgsMS41NjQsMS41NjQsMi40LjMxMywyLjI0MiwyLjI5NCwzLjI4NCw4LjAyOCwzLjI4NHYuMjYxaC0uMXYtLjI2MWM1LjIxMywwLDcuNC0xLjA0Myw3LjcxNi0zLjI4NC4xLS44MzQsMS4xNDctMS41MTIsMS4zLTIuNC4xNTYtMS4wNDMuMjA5LTIuMTkuMzY1LTMuMzM2QTExLjc3NCwxMS43NzQsMCwwLDAsMjUuNTE0LDEyLjg0NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZmNjYTNcXFwiLz48cGF0aCBkPVxcXCJNMTYuMTgyLDEzLjY4YTMuMjQxLDMuMjQxLDAsMCwxLDIuMTksMS4xNDdjLjczLjYyNiwxLjkyOSwxLjA0MywyLjQ1LDEuNjE2YTQuNzE1LDQuNzE1LDAsMCwxLDEuNDA4LDEuOTgxLDguOSw4LjksMCwwLDEsLjMxMywyLjI0MmMwLC4yNjEuMTU2LjIwOS41NzMsMGE5LjAyLDkuMDIsMCwwLDAsMi4xOS0xLjg3N2MtLjE1Ni44ODYtMS4yNTEsMS42NjgtMS4zNTUsMi41LS4zMTMsMi4yNDItMi41LDMuMzM2LTcuODcyLDMuMzM2aC4zMTNcXFwiIHN0eWxlPVxcXCJmaWxsOiNjY2FjOGRcXFwiLz48cGF0aCBkPVxcXCJNMTkuNTE5LDExLjkwOGMuMjA5LjY3OC44ODYsMy4wMjQtLjQ2OSwyLjI0MmEyLjU1NywyLjU1NywwLDAsMSwuOTM4LDEuNTY0LDEuODMxLDEuODMxLDAsMCwwLDEuMywxLjQwOCwzLjQ3OSwzLjQ3OSwwLDAsMCwyLjU1NC0uNjI2LDIuOTU2LDIuOTU2LDAsMCwwLC42NzgtMy4yODQsMi40MywyLjQzLDAsMCwwLTIuMTM3LTEuNjE2QzIxLjQsMTEuMzM0LDE5LjMxLDExLjEyNiwxOS41MTksMTEuOTA4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxjaXJjbGUgY3g9XFxcIjIyLjE3OFxcXCIgY3k9XFxcIjE0LjQxXFxcIiByPVxcXCIxLjkyOVxcXCIvPjxjaXJjbGUgY3g9XFxcIjIxLjY1NlxcXCIgY3k9XFxcIjEzLjUyNFxcXCIgcj1cXFwiMC41MjFcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTkuMjA2LDE0LjMwNmExNy42OCwxNy42OCwwLDAsMSwyLjcxMSwyLjM0NmMuOTM4LDEuMi45MzgsMS40MDguOTM4LDEuNDA4bC0uNjc4LjMxM2E3LjEsNy4xLDAsMCwwLTIuMTM3LTIuNWMtMS4yLS42NzgtMS4zNTUtMS4yNTEtMS4zNTUtMS4yNTFaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWZjY2EzXFxcIi8+PHBhdGggZD1cXFwiTTE2LjIzNSwxMy42OGEzLjYwNSwzLjYwNSwwLDAsMC0yLjM0NiwxLjE0N2MtLjczLjYyNi0yLjAzMywxLjA0My0yLjUsMS42MTZhNC44MDYsNC44MDYsMCwwLDAtMS40NiwxLjk4MSw4LjksOC45LDAsMCwwLS4zMTMsMi4yNDJjMCwuMjYxLjA1Mi4zMTMtLjYyNiwwQTcuOTcyLDcuOTcyLDAsMCwxLDYuOCwxOC43ODljLjE1Ni44ODYsMS4yNTEsMS42NjgsMS4zNTUsMi41LjMxMywyLjE5LDIuNSwzLjI4NCw3Ljg3MiwzLjI4NGguMzY1XFxcIiBzdHlsZT1cXFwiZmlsbDojY2NhYzhkXFxcIi8+PHBhdGggZD1cXFwiTTIxLjIzOSwxNy4yNzdhNi41NTIsNi41NTIsMCwwLDAtNS4xMDktMi42MDdoMGE2LjYzOCw2LjYzOCwwLDAsMC01LjEwOSwyLjYwNywzLjg2MSwzLjg2MSwwLDAsMC0xLjA0MywzLjE4YzAsNC42NCwxLjYxNiwzLjIzMiwyLjcxMSwzLjgwNmE3LjQ2Niw3LjQ2NiwwLDAsMCwzLjM4OS4zMTNoMGE3LjQsNy40LDAsMCwwLDMuMzg5LS4zMTNjMS4wOTUtLjU3MywyLjcxMS44MzQsMi43MTEtMy44MDZBMy4zODYsMy4zODYsMCwwLDAsMjEuMjM5LDE3LjI3N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM1NjMzMmJcXFwiLz48cGF0aCBkPVxcXCJNMTYuMDI2LDE1Ljk3NGE5LjU0OSw5LjU0OSwwLDAsMS0uNDY5LDIuNTU0bC41NzMtLjE1NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiM0NDI4MjNcXFwiLz48cGF0aCBkPVxcXCJNMTYuMTgyLDE1Ljk3NGE5LjU0OSw5LjU0OSwwLDAsMCwuNDY5LDIuNTU0bC0uNTczLS4xNTZaXFxcIiBzdHlsZT1cXFwiZmlsbDojNDQyODIzXFxcIi8+PHBhdGggZD1cXFwiTTE0LjM1OCwxNS40NTNjLS4yMDktLjUyMS41NzMtMS4zNTUsMS44MjUtMS4zNTVzMi4wMzMuODM0LDEuODI1LDEuMzU1LTEuMDQzLjY3OC0xLjgyNS42NzhDMTUuMzQ4LDE2LjEzLDE0LjU2NiwxNS45NzQsMTQuMzU4LDE1LjQ1M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM1NjMzMmJcXFwiLz48cGF0aCBkPVxcXCJNMTYuMTgyLDE1Ljk3NGMwLS4xLjczLS4xLDEuMTQ3LS4zNjUsMCwwLS44MzQuMjYxLS45OTEuMTU2YS42NTYuNjU2LDAsMCwxLS4yMDktLjM2NS42NTYuNjU2LDAsMCwxLS4yMDkuMzY1Yy0uMTU2LjEtMS4wOTUtLjE1Ni0xLjA5NS0uMTU2YTguMDU4LDguMDU4LDAsMCwxLDEuMi4zNjV2LjQxN2ExMC40OTIsMTAuNDkyLDAsMCwwLC4xLDIuMDMzYy4xNTYuMjA5LjEtMS40Ni4xLTIuMDMzQTEuMywxLjMsMCwwLDEsMTYuMTgyLDE1Ljk3NFpcXFwiLz48cGF0aCBkPVxcXCJNMTYuMTgyLDE4Ljk0NWEzLjM1LDMuMzUsMCwwLDEsMS42MTYuNjc4LDMuMTIxLDMuMTIxLDAsMCwwLTEuNjE2LTEuMDk1LDMuMDM2LDMuMDM2LDAsMCwwLTEuODI1LDEuMkEzLjMxMiwzLjMxMiwwLDAsMSwxNi4xODIsMTguOTQ1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzdmNGE0MVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4wNzgsMjIuOGE4LjksOC45LDAsMCwxLTIuNC0uNDY5Yy0uMTU2LS4wNTItLjMxMy4wNTItLjQ2OSwwYTYuMTcyLDYuMTcyLDAsMCwxLTMuMTgtMi4xMzd2LjIwOWMwLDQuNjQsMS42MTYsMy4yMzIsMi43MTEsMy44MDZhNy40NjYsNy40NjYsMCwwLDAsMy4zODkuMzEzaDBhNy40LDcuNCwwLDAsMCwzLjM4OS0uMzEzYzEuMDk1LS41NzMsMi43MTEuODM0LDIuNzExLTMuODA2di0uNDY5QTUuOTE0LDUuOTE0LDAsMCwxLDE5LDIyLjI4MmMtLjE1Ni4wNTItLjQxNy0uMDUyLS41NzMtLjA1MkE3LjA0NSw3LjA0NSwwLDAsMSwxNi4wNzgsMjIuOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM0NDI4MjNcXFwiLz48cGF0aCBkPVxcXCJNMTMuOTQxLDIwLjNzLS41NzMsMS42NjgtLjE1NiwyLjRsLS41MjEtLjIwOUExNS40MzMsMTUuNDMzLDAsMCwxLDEzLjk0MSwyMC4zWlxcXCIgc3R5bGU9XFxcImZpbGw6IzQ0MjgyM1xcXCIvPjxwYXRoIGQ9XFxcIk0xOC4zMiwyMC4zcy41NzMsMS42NjguMTU2LDIuNEwxOSwyMi40OTFBMTAuNjI5LDEwLjYyOSwwLDAsMCwxOC4zMiwyMC4zWlxcXCIgc3R5bGU9XFxcImZpbGw6IzQ0MjgyM1xcXCIvPjxwYXRoIGQ9XFxcIk0xMi41ODUsMTEuOTA4Yy0uMjA5LjY3OC0uODg2LDMuMDI0LjQ2OSwyLjI0MmEyLjU1NywyLjU1NywwLDAsMC0uOTM4LDEuNTY0LDEuODMxLDEuODMxLDAsMCwxLTEuMywxLjQwOEEzLjQ3OSwzLjQ3OSwwLDAsMSw4LjI1OCwxNi41YTIuOTU2LDIuOTU2LDAsMCwxLS42NzgtMy4yODQsMi40MywyLjQzLDAsMCwxLDIuMTM3LTEuNjE2QzEwLjcwOSwxMS4zMzQsMTIuNzk0LDExLjEyNiwxMi41ODUsMTEuOTA4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4xMywxOC41MjhhMy4zOTMsMy4zOTMsMCwwLDEsMi40NSwyLjg2N3YtLjFhMy4wNTEsMy4wNTEsMCwwLDAtMi40NS0yLjkxOSwzLDMsMCwwLDAtMi40NSwyLjkxOXYuMUEzLjQ2MywzLjQ2MywwLDAsMSwxNi4xMywxOC41MjhaXFxcIi8+PGVsbGlwc2UgY3g9XFxcIjE2LjU0NlxcXCIgY3k9XFxcIjE1LjEzOFxcXCIgcng9XFxcIjAuMTU2XFxcIiByeT1cXFwiMC4zMTNcXFwiIHRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKC0zLjI1NiA0LjYxMSkgcm90YXRlKC0xNC40NilcXFwiIHN0eWxlPVxcXCJmaWxsOiMzMzE3MTJcXFwiLz48ZWxsaXBzZSBjeD1cXFwiMTUuNjA5XFxcIiBjeT1cXFwiMTUuMTQ2XFxcIiByeD1cXFwiMC4zMTNcXFwiIHJ5PVxcXCIwLjE1NlxcXCIgdHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoLTMuNDgyIDI1LjU2Nykgcm90YXRlKC03Mi43NjUpXFxcIiBzdHlsZT1cXFwiZmlsbDojMzMxNzEyXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTAuMDMxXFxcIiBjeT1cXFwiMTQuNDFcXFwiIHI9XFxcIjEuOTI5XFxcIi8+PGNpcmNsZSBjeD1cXFwiMTAuNTUyXFxcIiBjeT1cXFwiMTMuNTI0XFxcIiByPVxcXCIwLjUyMVxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNi43LDE0LjQxcy0uNTIxLjIwOS0uNjI2LjI2MWEyLjQ5MiwyLjQ5MiwwLDAsMS0uNjI2LS4yNjFIMTYuN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM3ZjRhNDFcXFwiLz48cGF0aCBkPVxcXCJNMTIuOSwxNC4zMDZhMTcuNjgsMTcuNjgsMCwwLDAtMi43MTEsMi4zNDZjLS45MzgsMS4yLS45MzgsMS40MDgtLjkzOCwxLjQwOGwuNjc4LjMxM2E3LjEsNy4xLDAsMCwxLDIuMTM3LTIuNWMxLjItLjY3OCwxLjM1NS0xLjI1MSwxLjM1NS0xLjI1MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNlZmNjYTNcXFwiLz48cGF0aCBkPVxcXCJNOS4wOTIsMTAuODEzYTQuNTE5LDQuNTE5LDAsMCwxLTEuOTI5LDIuMjk0QTIuMTksMi4xOSwwLDAsMCw5LjA5MiwxMC44MTNaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2NhYzhkXFxcIi8+PHBhdGggZD1cXFwiTTIyLjkwOCwxMC44MTNhNC41MTksNC41MTksMCwwLDAsMS45MjksMi4yOTRBMi4xOSwyLjE5LDAsMCwxLDIyLjkwOCwxMC44MTNaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2NhYzhkXFxcIi8+PHBhdGggZD1cXFwiTTE5LjMxLDEzLjgzNmE1LjE2LDUuMTYsMCwwLDAtMy4wNzYtMS40MDhoLjE1NmEzLjg1MiwzLjg1MiwwLDAsMC0zLjAyNCwxLjQwOCw0LjgzMiw0LjgzMiwwLDAsMSwzLjAyNC0xLjA0M2gwQTUuNzg1LDUuNzg1LDAsMCwxLDE5LjMxLDEzLjgzNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjY2FjOGRcXFwiLz48cGF0aCBkPVxcXCJNMTcuNzQ2LDEwLjk2OWEyLjQ1NSwyLjQ1NSwwLDAsMC0xLjU2NC0uOTM4aC4xNTZhMS43ODYsMS43ODYsMCwwLDAtMS41MTIuOTM4LDIuMTg3LDIuMTg3LDAsMCwxLDEuNTEyLS42NzhoMEExLjg5NCwxLjg5NCwwLDAsMSwxNy43NDYsMTAuOTY5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxwYXRoIGQ9XFxcIk0xMC4wMzEsMTcuNzQ2YTIuNTQ1LDIuNTQ1LDAsMCwxLTEuNzczLjIwOUg4LjA1YTMuNjgsMy42OCwwLDAsMS0uODg2LTEuNTEyQTIuMjcsMi4yNywwLDAsMCwxMC4wMzEsMTcuNzQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxwYXRoIGQ9XFxcIk0yMi4xMjYsMTcuNzQ2YTIuNTQ1LDIuNTQ1LDAsMCwwLDEuNzczLjIwOUgyMy42OWExLjc0OSwxLjc0OSwwLDAsMCwxLjA5NS0xLjUxMkEyLjAyLDIuMDIsMCwwLDEsMjIuMTI2LDE3Ljc0NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjY2FjOGRcXFwiLz48cGF0aCBkPVxcXCJNMTEuMjMsMTAuNzA5YTQuNzUsNC43NSwwLDAsMSwyLjI0Mi4xYy45MzguMzEzLjIwOSwxLjU2NC4zNjUsMS42MTZhMi44NjUsMi44NjUsMCwwLDEsMi4yNDItLjczYzEuNzczLjEsMS45ODEuODg2LDIuMjQyLjczLjI2MS0uMS0uMjYxLTIuMTksMi40NS0xLjcyLDAsMC0yLjc2My0uNzMtMi42NTksMS4yNTFhMy42NzUsMy42NzUsMCwwLDAtMy44NTgtLjFTMTQuODI3LDkuOTI3LDExLjIzLDEwLjcwOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjY2FjOGRcXFwiLz48cGF0aCBkPVxcXCJNMTAuNSw4cy0yLjQsMi45NzItMi43MTEsNC4xMThjLS4zNjUsMS4xNDctLjYyNiw1Ljk0My0uOTM4LDYuNjIxTDUuNzU2LDE0LjA0NWwyLjAzMy00LjlaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2NhYzhkXFxcIi8+PHBhdGggZD1cXFwiTTIxLjY1Niw4czIuNCwyLjk3MiwyLjcxMSw0LjExOGMuMzY1LDEuMTQ3LjYyNiw1Ljk0My45MzgsNi42MjFMMjYuNCwxNC4wNDVsLTIuMDMzLTQuOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjY2FjOGRcXFwiLz48cGF0aCBkPVxcXCJNMjEuNSw4YTExLjYxNywxMS42MTcsMCwwLDEsMy4yODQsNC41ODhjLjczLDIuNDUuNDE3LDUuNDc0Ljk5MSw1LjgzOS44MzQuNTIxLDEuNzItMi42MDcsMi4wMzMtMi45MTkuNDY5LS41MjEsMi4wODUtMS44NzcsMi4xOS0yLjEzN3MtMy4yMzItMy45MS00Ljc0NC00LjY0QzIzLjU4NSw3Ljg5MywyMS40LDcuNzg5LDIxLjUsOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM1NjMzMmJcXFwiLz48cGF0aCBkPVxcXCJNMjMuNjksOS4zYTE1LjM3OSwxNS4zNzksMCwwLDEsMi45NzIsOC42NTRsMS4yLTIuNDVBMTYuNTY0LDE2LjU2NCwwLDAsMCwyMy42OSw5LjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojNDQyODIzXFxcIi8+PHBhdGggZD1cXFwiTTEwLjUsOGExMS42MTcsMTEuNjE3LDAsMCwwLTMuMjg0LDQuNTg4Yy0uNzMsMi40NS0uNDE3LDUuNDc0LS45OTEsNS44MzktLjgzNC41MjEtMS43Mi0yLjYwNy0yLjAzMy0yLjkxOS0uNDY5LS41MjEtMi4wODUtMS44NzctMi4xOS0yLjEzN3MzLjIzMi0zLjkxLDQuNzQ0LTQuNjRDOC40MTUsNy44OTMsMTAuNiw3Ljc4OSwxMC41LDhaXFxcIiBzdHlsZT1cXFwiZmlsbDojNTYzMzJiXFxcIi8+PHBhdGggZD1cXFwiTTguMzEsOS4zYTE1LjM3OSwxNS4zNzksMCwwLDAtMi45NzIsOC42NTRMNC4xNCwxNS41QTE2LjU2NCwxNi41NjQsMCwwLDEsOC4zMSw5LjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojNDQyODIzXFxcIi8+PHBhdGggZD1cXFwiTTYuNjQyLDE4LjAwN2E0LjExOCw0LjExOCwwLDAsMCwuNTczLDEuNTY0Yy4zNjUuMzY1LjEtLjMxMy4xLS4zMTNzLS4zNjUtLjIwOS0uMzEzLTEuNzJTNi42NDIsMTguMDA3LDYuNjQyLDE4LjAwN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNjY2FjOGRcXFwiLz48cGF0aCBkPVxcXCJNMjUuNDEsMTguMDA3YTQuMTE4LDQuMTE4LDAsMCwxLS41NzMsMS41NjRjLS4zNjUuMzY1LS4xLS4zMTMtLjEtLjMxM3MuMzY1LS4yMDkuMzEzLTEuNzJDMjQuOTkzLDE2LjA3OCwyNS40MSwxOC4wMDcsMjUuNDEsMTguMDA3WlxcXCIgc3R5bGU9XFxcImZpbGw6I2NjYWM4ZFxcXCIvPjxjaXJjbGUgY3g9XFxcIjEzLjg4OVxcXCIgY3k9XFxcIjE3LjEyMVxcXCIgcj1cXFwiMC4xNTZcXFwiIHN0eWxlPVxcXCJmaWxsOiM0NDI4MjNcXFwiLz48Y2lyY2xlIGN4PVxcXCIxMi44NDZcXFwiIGN5PVxcXCIxOC4yMTZcXFwiIHI9XFxcIjAuMTU2XFxcIiBzdHlsZT1cXFwiZmlsbDojNDQyODIzXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTIuNTMzXFxcIiBjeT1cXFwiMTcuMTIxXFxcIiByPVxcXCIwLjE1NlxcXCIgc3R5bGU9XFxcImZpbGw6IzQ0MjgyM1xcXCIvPjxjaXJjbGUgY3g9XFxcIjE4LjE2NFxcXCIgY3k9XFxcIjE3LjEyMVxcXCIgcj1cXFwiMC4xNTZcXFwiIHN0eWxlPVxcXCJmaWxsOiM0NDI4MjNcXFwiLz48Y2lyY2xlIGN4PVxcXCIxOS4xNTRcXFwiIGN5PVxcXCIxOC4yMTZcXFwiIHI9XFxcIjAuMTU2XFxcIiBzdHlsZT1cXFwiZmlsbDojNDQyODIzXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTkuNDY3XFxcIiBjeT1cXFwiMTcuMTIxXFxcIiByPVxcXCIwLjE1NlxcXCIgc3R5bGU9XFxcImZpbGw6IzQ0MjgyM1xcXCIvPlwiLFxuXHR9LFxuXHRcIlB1cHBldFwiOiB7XG5cdFx0Y29sb3VyOiBcIiNmZmFlMWFcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yNS4wODksMTEuODIySDE4LjdMMTUuMjY3LDguMzg4VjJINi45MTF2OC4zNTdIMTMuM2wzLjQyMiwzLjQyMmgwdjQuNDMxaDBsLTMuNDM0LDMuNDM0SDYuOTExVjMwaDguMzU3VjIzLjYxMmgwTDE4LjcsMjAuMTc4aDYuMzg4Wk05LjcsNC43ODZoMi43ODZWNy41NzFIOS43Wk0xMi40ODIsMjcuMkg5LjdWMjQuNDE3aDIuNzg2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYWUxYVxcXCIvPlwiLFxuXHR9LFxuXHRcIlB1cmVTY3JpcHRcIjoge1xuXHRcdGNvbG91cjogXCIjMTYxNzFiXCIsXG5cdFx0aWNvbjogXCI8cmVjdCB3aWR0aD1cXFwiMzJcXFwiIGhlaWdodD1cXFwiMzJcXFwiIHN0eWxlPVxcXCJmaWxsOiMxNjE3MWJcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIxLjg5MiAyMi4xMzYgMTkuNzA2IDIwLjA5NSAxMC4xMDcgMjAuMDk1IDEyLjI5MyAyMi4xMzYgMjEuODkyIDIyLjEzNlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTIuMjkzIDE0Ljk4IDEwLjEwNyAxNy4wMjEgMTkuNzA2IDE3LjAyMSAyMS44OTIgMTQuOTggMTIuMjkzIDE0Ljk4XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMS44OTEgMTEuOTA2IDE5LjcwNiA5Ljg2NCAxMC4xMDcgOS44NjQgMTIuMjkzIDExLjkwNiAyMS44OTEgMTEuOTA2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTkuMSwxMy45MjYsNy42NTIsMTIuNDgyLDIuMywxNy44MzZhMS4wMjMsMS4wMjMsMCwwLDAsMCwxLjQ0M2w1LjM1NCw1LjM1NEw5LjEsMjMuMTksNC40NjQsMTguNTU4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0yOS43LDEyLjcyMSwyNC4zNDgsNy4zNjYsMjIuOSw4LjgxbDQuNjMsNC42MzJMMjIuOSwxOC4wNzVsMS40NDMsMS40NDNMMjkuNywxNC4xNjVhMS4wMjEsMS4wMjEsMCwwLDAsMC0xLjQ0NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0fSxcblx0XCJQeXRob25cIjoge1xuXHRcdGNvbG91cjogXCIjMzY3MUExXCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCItMTMzLjI2OFxcXCIgeTE9XFxcIi0yMDIuOTFcXFwiIHgyPVxcXCItMTMzLjE5OFxcXCIgeTI9XFxcIi0yMDIuODRcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMjUyNDMuMDYxIDM4NTE5LjE3KSBzY2FsZSgxODkuMzggMTg5LjgxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzM4N2ViOFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzM2Njk5NFxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJiXFxcIiB4MT1cXFwiLTEzMy41NzVcXFwiIHkxPVxcXCItMjAzLjIwM1xcXCIgeDI9XFxcIi0xMzMuNDk1XFxcIiB5Mj1cXFwiLTIwMy4xMzNcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJ0cmFuc2xhdGUoMjUzMDkuMDYxIDM4NTgzLjQyKSBzY2FsZSgxODkuMzggMTg5LjgxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZTA1MlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmYzMzMVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfcHl0aG9uPC90aXRsZT48cGF0aCBkPVxcXCJNMTUuODg1LDIuMWMtNy4xLDAtNi42NTEsMy4wNy02LjY1MSwzLjA3VjguMzZoNi43NTJ2MUg2LjU0NVMyLDguOCwyLDE2LjAwNXM0LjAxMyw2LjkxMiw0LjAxMyw2LjkxMkg4LjMzVjE5LjU1NnMtLjEzLTQuMDEzLDMuOS00LjAxM2g2Ljc2MnMzLjc3Mi4wNiwzLjc3Mi0zLjY1MlY1LjhzLjU3Mi0zLjcxMi02Ljg0Mi0zLjcxMmgwWk0xMi4xNTMsNC4yMzdhMS4yMTQsMS4yMTQsMCwxLDEtMS4xODMsMS4yNDR2LS4wMmExLjIxNCwxLjIxNCwwLDAsMSwxLjIxNC0xLjIxNGgwWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPjxwYXRoIGQ9XFxcIk0xNi4wODUsMjkuOTFjNy4xLDAsNi42NTEtMy4wOCw2LjY1MS0zLjA4VjIzLjY1SDE1Ljk4NXYtMWg5LjQ3UzMwLDIzLjE1OCwzMCwxNS45OTVzLTQuMDEzLTYuOTEyLTQuMDEzLTYuOTEySDIzLjY0VjEyLjRzLjEzLDQuMDEzLTMuOSw0LjAxM0gxMi45NzVTOS4yLDE2LjM1Niw5LjIsMjAuMDY4VjI2LjJzLS41NzIsMy43MTIsNi44NDIsMy43MTJoLjA0Wm0zLjczMi0yLjE0N0ExLjIxNCwxLjIxNCwwLDEsMSwyMSwyNi41MTl2LjAzYTEuMjE0LDEuMjE0LDAsMCwxLTEuMjE0LDEuMjE0aC4wM1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz5cIixcblx0XHRpbmxpbmVDb21tZW50OiBbXG5cdFx0XHRcIiNcIixcblx0XHRdLFxuXHR9LFxuXHRcIlEgKGtkYisgZGF0YWJhc2UpXCI6IHtcblx0XHRjb2xvdXI6IFwiIzFlNzhiM1wiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIwLjA5MiwyOVYxOS42ODJBNi45NTMsNi45NTMsMCwwLDEsMTcuNywyMS42NDVhNi43NDMsNi43NDMsMCwwLDEtMy4wODkuNzI0QTYuNTU3LDYuNTU3LDAsMCwxLDkuNDEzLDIwLDExLjA4MSwxMS4wODEsMCwwLDEsNywxMi40NzUsMTAuMDMzLDEwLjAzMywwLDAsMSw5LjI2NCw1LjUsNy4yNTEsNy4yNTEsMCwwLDEsMTQuODc0LDNhNi4yNjYsNi4yNjYsMCwwLDEsMy4yLjc4NSw3LjMyOSw3LjMyOSwwLDAsMSwyLjQsMi4zNzNWMy40MTlIMjVWMjlabS4xNTctMTYuNTQyYTYuNDkyLDYuNDkyLDAsMCwwLTEuMTYtNC4yMzIsMy42MzQsMy42MzQsMCwwLDAtMi45MDUtMS4zODcsMy43NDIsMy43NDIsMCwwLDAtMi45NzUsMS40MTMsNi44ODEsNi44ODEsMCwwLDAtMS4yLDQuNDg1LDYuNzY3LDYuNzY3LDAsMCwwLDEuMTUyLDQuNDA2QTMuNTkzLDMuNTkzLDAsMCwwLDE2LjAwOSwxOC41YTMuNzg2LDMuNzg2LDAsMCwwLDIuOTY2LTEuNTE4QTYuODg5LDYuODg5LDAsMCwwLDIwLjI0OSwxMi40NThaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWU3OGIzXFxcIi8+XCIsXG5cdH0sXG5cdFwiUSNcIjoge1xuXHRcdGNvbG91cjogXCIjMzMzM2NjXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTkuNDUxLDYuMjE4aDIuNjM4VjguODU2aDIuNjM3VjYuMjE4aDIuNjM3VjguODU2SDMwVjExLjVIMjcuMzY0djIuNjM2SDMwVjE2Ljc3SDI3LjM2NHYyLjYzN0gyNC43MjdWMTYuNzY5SDIyLjA5MWwwLDIuNjM3SDE5LjQ1M1YxNi43NjhIMTYuODE1VjE0LjEyN2gyLjYzOFYxMS41SDE2LjgxNVY4Ljg1M2gyLjYzOVptMi42MzgsNy45MTRoMi42MzdWMTEuNUgyMi4wODlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMzNjXFxcIi8+PHBhdGggZD1cXFwiTTE0LjAxOCwyMS41MjRhMTEuNDM2LDExLjQzNiwwLDAsMCwxLjU3Mi02LjE5MiwxMC44NzcsMTAuODc3LDAsMCwwLTEuODU4LTYuNkE1Ljg4OSw1Ljg4OSwwLDAsMCw4LjgwOCw2LjE1M2E1LjkyMSw1LjkyMSwwLDAsMC00Ljk0LDIuNTgxQTEwLjg0MiwxMC44NDIsMCwwLDAsMiwxNS4zMzNhMTAuODUzLDEwLjg1MywwLDAsMCwxLjg2OCw2LjU5Miw1LjkxOCw1LjkxOCwwLDAsMCw0Ljk0MSwyLjU4OCw1Ljc0Myw1Ljc0MywwLDAsMCwzLjI2LS45ODdsMi4zMDYsMi4zMjEsMS41NzctMi40Wm0tNS4xNy0xLjIxOCwxLjExNywxLjEyMWEzLjIyOSwzLjIyOSwwLDAsMS0xLjE3NC4yMTcsMy4zMzUsMy4zMzUsMCwwLDEtMi44MzctMS41OTMsOC4xMjUsOC4xMjUsMCwwLDEtMS4xOC00LjcxOSw4LjEsOC4xLDAsMCwxLDEuMTg0LTQuNzI0LDMuMzcyLDMuMzcyLDAsMCwxLDIuODctMS41ODgsMy4zMSwzLjMxLDAsMCwxLDIuODE5LDEuNTg1LDguMTc4LDguMTc4LDAsMCwxLDEuMTcyLDQuNzI2LDkuMTEzLDkuMTEzLDAsMCwxLS44MzMsNC4xNWwtMS41Ni0xLjU3MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMzM2NcXFwiLz5cIixcblx0fSxcblx0XCJRTUxcIjoge1xuXHRcdGNvbG91cjogXCIjNDFjZDUyXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMjcuMyw1SDUuODg2TDIsOC45NThWMjZIMjYuMTE0TDMwLDIyLjA0MlY1Wk0xNi45LDIzLjA3bC0xLjgyOC44NTJMMTMuNSwyMS4zMzFhMy45NjgsMy45NjgsMCwwLDEtMS4wODIuMTA2Yy0xLjg0NSwwLTMuMTIzLS41LTMuODUtMS40OWE4LjAzLDguMDMsMCwwLDEtMS4wODItNC43LDguMzUxLDguMzUxLDAsMCwxLDEuMS00Ljc3Myw0LjM3OSw0LjM3OSwwLDAsMSwzLjgzMy0xLjU2MWMxLjgyOCwwLDMuMDg3LjUxNSwzLjgzMywxLjU0NGE4LjM1MSw4LjM1MSwwLDAsMSwxLjEsNC43NzMsMTAuODA5LDEwLjgwOSwwLDAsMS0uNDUyLDMuNDQsMy45LDMuOSwwLDAsMS0xLjQ3MywyWm01Ljg0OC0xLjY3YTIuNzM1LDIuNzM1LDAsMCwxLTIuMTY4LS42OTJBNC4xOTIsNC4xOTIsMCwwLDEsMjAsMTguMVYxNEgxOVYxMmgxVjloMnYzaDJ2MkgyMnYzLjlhMy45MDcsMy45MDcsMCwwLDAsLjE2OCwxLjQzN2MuMTEyLjIzMS4zOTMuMzU1Ljg2LjM1NWwxLjUzMy0uMDUzLjA5MywxLjU0NEExMi41MTksMTIuNTE5LDAsMCwxLDIyLjc0OCwyMS40Wk0xMi40MTYsMTAuNjE0YTIuNCwyLjQsMCwwLDAtMi4yODksMS4xLDcuNjU3LDcuNjU3LDAsMCwwLS42LDMuNTEzLDcuMTMxLDcuMTMxLDAsMCwwLC42LDMuNDQyQTIuNDQsMi40NCwwLDAsMCwxMi40MzMsMTkuN2EyLjQxNywyLjQxNywwLDAsMCwyLjI4OS0xLjAxMSw3LjM0Myw3LjM0MywwLDAsMCwuNTg2LTMuNDQyLDcuNjkyLDcuNjkyLDAsMCwwLS42LTMuNTMxQTIuNCwyLjQsMCwwLDAsMTIuNDE2LDEwLjYxNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM0MWNkNTJcXFwiLz5cIixcblx0fSxcblx0XCJSXCI6IHtcblx0XHRjb2xvdXI6IFwiIzI3NmRjM1wiLFxuXHRcdGljb246IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiLTEzNC44MTFcXFwiIHkxPVxcXCItMTAzLjI4NFxcXCIgeDI9XFxcIi0xMzQuNzcyXFxcIiB5Mj1cXFwiLTEwMy4zMjNcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoNzIxLjA5NCwgMCwgMCwgLTQ4Mi45MzcsIDk3MjEzLjU5NSwgLTQ5ODc0LjUxMilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNjYmNlZDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM4NDgzOGJcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIi0xMzUuMzc4XFxcIiB5MT1cXFwiLTEwMi45ODVcXFwiIHgyPVxcXCItMTM1LjMzOVxcXCIgeTI9XFxcIi0xMDMuMDI0XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDM5OCwgMCwgMCwgLTQwNi4xMjQsIDUzODkzLCAtNDE4MTIuODM2KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzI3NmRjM1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzE2NWNhYVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfcjwvdGl0bGU+PHBhdGggZD1cXFwiTTE2LDIzLjk1NmMtNy43MzIsMC0xNC00LjItMTQtOS4zNzZTOC4yNjgsNS4yLDE2LDUuMiwzMCw5LjQsMzAsMTQuNTgsMjMuNzMyLDIzLjk1NiwxNiwyMy45NTZaTTE4LjE0Myw4Ljg3QzEyLjI2Niw4Ljg3LDcuNSwxMS43NCw3LjUsMTUuMjhzNC43NjQsNi40MSwxMC42NDEsNi40MSwxMC4yMTQtMS45NjIsMTAuMjE0LTYuNDFTMjQuMDIsOC44NywxOC4xNDMsOC44N1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMjMuMzIxLDE5LjcyNmExMC41NDUsMTAuNTQ1LDAsMCwxLDEuMzQuNSwyLjU5MSwyLjU5MSwwLDAsMSwuNjguNDg1LDEuODM1LDEuODM1LDAsMCwxLC4zMTEuNDQ3bDMuMzM5LDUuNjMtNS40LDAtMi41MjQtNC43NGE2LjEsNi4xLDAsMCwwLS44MzUtMS4xNDUuODc5Ljg3OSwwLDAsMC0uNjQxLS4yOTFIMTguMzExdjYuMTczbC00Ljc3NiwwVjExLjAyNmg5LjU5MVMyNy41LDExLjEsMjcuNSwxNS4yNjEsMjMuMzIxLDE5LjcyNiwyMy4zMjEsMTkuNzI2Wm0tMi4wNzctNS4yOC0yLjg5MSwwdjIuNjgxaDIuODkzYTEuMzIzLDEuMzIzLDAsMCwwLDEuMzQtMS4zNjRBMS4yNDcsMS4yNDcsMCwwLDAsMjEuMjQ0LDE0LjQ0N1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz5cIixcblx0XHRpbmxpbmVDb21tZW50OiBbXG5cdFx0XHRcIiNcIixcblx0XHRdLFxuXHR9LFxuXHRcIlJhY2tldFwiOiB7XG5cdFx0Y29sb3VyOiBcIiM5ZjFkMjBcIixcblx0XHRpY29uOiBcIjxjaXJjbGUgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTZcXFwiIHI9XFxcIjE0XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTI3LjAxNiwyNC42NDFhMTQsMTQsMCwwLDAtMTUuOC0yMS44QzE2LjksNS44MjIsMjQuNDEzLDE1LjU0OSwyNy4wMTYsMjQuNjQxWlxcXCIgc3R5bGU9XFxcImZpbGw6IzNlNWJhOVxcXCIvPjxwYXRoIGQ9XFxcIk0xMy45OTUsMTAuOTNhMjQuMywyNC4zLDAsMCwwLTcuMjItNS40NkExNCwxNCwwLDAsMCw1LjQ2MywyNS4yMTcsMzkuNTYsMzkuNTYsMCwwLDEsMTMuOTk1LDEwLjkzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzlmMWQyMFxcXCIvPjxwYXRoIGQ9XFxcIk0xNi41NzUsMTQuMUEzMi42NDUsMzIuNjQ1LDAsMCwwLDkuNDMsMjguMzY1YTE0LjAxNiwxNC4wMTYsMCwwLDAsMTMuMy0uMDg5QTM4LjY0MiwzOC42NDIsMCwwLDAsMTYuNTc1LDE0LjFaXFxcIiBzdHlsZT1cXFwiZmlsbDojOWYxZDIwXFxcIi8+XCIsXG5cdH0sXG5cdFwiUmF6b3IgQyNcIjoge1xuXHRcdGNvbG91cjogXCIjMzY4ODMyXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMjMuODQ0LDI3LjY5MmExNi4zMzIsMTYuMzMyLDAsMCwxLTYuNjQ1LDEuM3EtNi4zNjQsMC0xMC4wMTMtMy4yNDNhMTEuMywxMS4zLDAsMCwxLTMuNjQ5LTguOUExMy43MTYsMTMuNzE2LDAsMCwxLDcuMzIyLDYuOTUxLDEyLjcxNiwxMi43MTYsMCwwLDEsMTYuOSwzLjAwOGExMS42NzYsMTEuNjc2LDAsMCwxLDguNDI1LDMuMDA2LDkuOTk0LDkuOTk0LDAsMCwxLDMuMTQyLDcuNTMzLDEwLjE4NywxMC4xODcsMCwwLDEtMi4zMTgsNy4xMTQsNy41MzIsNy41MzIsMCwwLDEtNS44MTcsMi41NDcsMi42MTMsMi42MTMsMCwwLDEtMS44NDUtLjY0MiwyLjMyMywyLjMyMywwLDAsMS0uNzY0LTEuNiw0LjksNC45LDAsMCwxLTQuMTQ4LDIuMjQzLDQuNiw0LjYsMCwwLDEtMy41MDctMS40NzksNS43MDYsNS43MDYsMCwwLDEtMS4zODQtNC4wNjMsOS45MTMsOS45MTMsMCwwLDEsMi4yLTYuMzU3cTIuMi0yLjc2Myw0LjgtMi43NjNhNS4wNjMsNS4wNjMsMCwwLDEsNC4yNTYsMS43MTZsLjMxMS0xLjMzOGgyLjQwNWwtMi4wODEsOS4wOGExMC43MTYsMTAuNzE2LDAsMCwwLS4zNTIsMi4yNDNxMCwuOTcyLjc0NC45NzJhNC44MTksNC44MTksMCwwLDAsMy44NzctMi4wNDcsOC45Myw4LjkzLDAsMCwwLDEuNjIxLTUuNjgxLDcuOTgsNy45OCwwLDAsMC0yLjY3NS02LjE3NSw5Ljg4Nyw5Ljg4NywwLDAsMC02LjkxOS0yLjQzMkExMC42LDEwLjYsMCwwLDAsOC43MTMsOC4zNTJhMTIuMDY2LDEyLjA2NiwwLDAsMC0zLjIsOC40OTUsOS41NjEsOS41NjEsMCwwLDAsMy4wNiw3LjU3M3EzLjA2LDIuNyw4LjU4NiwyLjdhMTMuNzU3LDEzLjc1NywwLDAsMCw1LjY3NS0xLjA1NFpNMTkuNDY2LDEyLjI1YTMuOTc3LDMuOTc3LDAsMCwwLTMuNi0xLjcxNnEtMS44MjQsMC0zLjI2MywyLjIzYTguNzI2LDguNzI2LDAsMCwwLTEuNDM5LDQuODI0cTAsMy42MzUsMi45MDUsMy42MzVBMy43NzEsMy43NzEsMCwwLDAsMTYuNzIsMjAuMDRhNi4zMDksNi4zMDksMCwwLDAsMS43LTMuMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMzNjg4MzJcXFwiLz5cIixcblx0fSxcblx0XCJSZWFjdCBKU1hcIjoge1xuXHRcdGNvbG91cjogXCIjMDBkOGZmXCIsXG5cdFx0aWNvbjogXCI8Y2lyY2xlIGN4PVxcXCIxNlxcXCIgY3k9XFxcIjE1Ljk3NFxcXCIgcj1cXFwiMi41XFxcIiBzdHlsZT1cXFwiZmlsbDojMDBkOGZmXFxcIi8+PHBhdGggZD1cXFwiTTE2LDIxLjcwNmEyOC4zODUsMjguMzg1LDAsMCwxLTguODgtMS4yLDExLjMsMTEuMywwLDAsMS0zLjY1Ny0xLjk1OEEzLjU0MywzLjU0MywwLDAsMSwyLDE1Ljk3NGMwLTEuNjUzLDEuODE2LTMuMjczLDQuODU4LTQuMzMzQTI4Ljc1NSwyOC43NTUsMCwwLDEsMTYsMTAuMjkzYTI4LjY3NCwyOC42NzQsMCwwLDEsOS4wMjIsMS4zMjQsMTEuMzc2LDExLjM3NiwwLDAsMSwzLjUzOCwxLjg2NkEzLjM5MSwzLjM5MSwwLDAsMSwzMCwxNS45NzRjMCwxLjcxOC0yLjAzLDMuNDU5LTUuMyw0LjU0MUEyOC44LDI4LjgsMCwwLDEsMTYsMjEuNzA2Wm0wLTEwLjIxN2EyNy45NDgsMjcuOTQ4LDAsMCwwLTguNzQ5LDEuMjgyYy0yLjguOTc3LTQuMDU1LDIuMzEzLTQuMDU1LDMuMiwwLC45MjgsMS4zNDksMi4zODcsNC4zMTEsMy40QTI3LjIxLDI3LjIxLDAsMCwwLDE2LDIwLjUxYTI3LjYsMjcuNiwwLDAsMCw4LjMyNS0xLjEzQzI3LjQsMTguMzYxLDI4LjgsMTYuOSwyOC44LDE1Ljk3NGEyLjMyNywyLjMyNywwLDAsMC0xLjAxLTEuNTczLDEwLjE5NCwxMC4xOTQsMCwwLDAtMy4xNjEtMS42NTRBMjcuNDYyLDI3LjQ2MiwwLDAsMCwxNiwxMS40ODlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDBkOGZmXFxcIi8+PHBhdGggZD1cXFwiTTEwLjMyLDI4LjQ0M2EyLjYzOSwyLjYzOSwwLDAsMS0xLjMzNi0uMzI4Yy0xLjQzMi0uODI2LTEuOTI4LTMuMjA4LTEuMzI3LTYuMzczYTI4Ljc1NSwyOC43NTUsMCwwLDEsMy40LTguNTkzaDBBMjguNjc2LDI4LjY3NiwwLDAsMSwxNi43MSw1Ljk5NWExMS4zNzYsMTEuMzc2LDAsMCwxLDMuMzg0LTIuMTMzLDMuMzkxLDMuMzkxLDAsMCwxLDIuODc4LDBjMS40ODkuODU4LDEuOTgyLDMuNDg2LDEuMjg3LDYuODU5YTI4LjgwNiwyOC44MDYsMCwwLDEtMy4zMTYsOC4xMzMsMjguMzg1LDI4LjM4NSwwLDAsMS01LjQ3Niw3LjA5MywxMS4zLDExLjMsMCwwLDEtMy41MjMsMi4xODlBNC45MjYsNC45MjYsMCwwLDEsMTAuMzIsMjguNDQzWm0xLjc3My0xNC43YTI3Ljk0OCwyNy45NDgsMCwwLDAtMy4yNiw4LjIxOWMtLjU1MywyLjkxNS0uMDIyLDQuNjY4Ljc1LDUuMTE0LjguNDYzLDIuNzQyLjAyNCw1LjEtMi4wMzZhMjcuMjA5LDI3LjIwOSwwLDAsMCw1LjIyNy02Ljc5LDI3LjYsMjcuNiwwLDAsMCwzLjE4MS03Ljc3NmMuNjU0LTMuMTc1LjA4OS01LjExOS0uNzEzLTUuNTgxYTIuMzI3LDIuMzI3LDAsMCwwLTEuODY4LjA4OUExMC4xOTQsMTAuMTk0LDAsMCwwLDE3LjUsNi45YTI3LjQ2NCwyNy40NjQsMCwwLDAtNS40LDYuODQ5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwZDhmZlxcXCIvPjxwYXRoIGQ9XFxcIk0yMS42NzcsMjguNDU2Yy0xLjM1NSwwLTMuMDc2LS44Mi00Ljg2OC0yLjM2MWEyOC43NTYsMjguNzU2LDAsMCwxLTUuNzQ3LTcuMjM3aDBhMjguNjc2LDI4LjY3NiwwLDAsMS0zLjM3NC04LjQ3MSwxMS4zNzYsMTEuMzc2LDAsMCwxLS4xNTgtNEEzLjM5MSwzLjM5MSwwLDAsMSw4Ljk2NCwzLjljMS40ODctLjg2MSw0LjAxLjAyNCw2LjU4NSwyLjMxYTI4LjgsMjguOCwwLDAsMSw1LjM5LDYuOTM0LDI4LjM4NCwyOC4zODQsMCwwLDEsMy40MSw4LjI4NywxMS4zLDExLjMsMCwwLDEsLjEzNyw0LjE0NiwzLjU0MywzLjU0MywwLDAsMS0xLjQ5NCwyLjU1NUEyLjU5LDIuNTksMCwwLDEsMjEuNjc3LDI4LjQ1NlptLTkuNTgtMTAuMmEyNy45NDksMjcuOTQ5LDAsMCwwLDUuNDkyLDYuOTI5YzIuMjQ5LDEuOTM1LDQuMDMzLDIuMzUxLDQuOCwxLjkuOC0uNDY1LDEuMzktMi4zNjMuNzgyLTUuNDM0QTI3LjIxMiwyNy4yMTIsMCwwLDAsMTkuOSwxMy43NCwyNy42LDI3LjYsMCwwLDAsMTQuNzU1LDcuMWMtMi40MjQtMi4xNTItNC4zOS0yLjYzMy01LjE5MS0yLjE2OWEyLjMyNywyLjMyNywwLDAsMC0uODU1LDEuNjYyLDEwLjE5NCwxMC4xOTQsMCwwLDAsLjE1MywzLjU2NSwyNy40NjUsMjcuNDY1LDAsMCwwLDMuMjM2LDguMVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMGQ4ZmZcXFwiLz5cIixcblx0fSxcblx0XCJSZWFjdCBUU1hcIjoge1xuXHRcdGNvbG91cjogXCIjMDA3YWNjXCIsXG5cdFx0aWNvbjogXCI8Y2lyY2xlIGN4PVxcXCIxNlxcXCIgY3k9XFxcIjE1Ljk3NFxcXCIgcj1cXFwiMi41XFxcIiBzdHlsZT1cXFwiZmlsbDojMDA3YWNjXFxcIi8+PHBhdGggZD1cXFwiTTE2LDIxLjcwNmEyOC4zODUsMjguMzg1LDAsMCwxLTguODgtMS4yLDExLjMsMTEuMywwLDAsMS0zLjY1Ny0xLjk1OEEzLjU0MywzLjU0MywwLDAsMSwyLDE1Ljk3NGMwLTEuNjUzLDEuODE2LTMuMjczLDQuODU4LTQuMzMzQTI4Ljc1NSwyOC43NTUsMCwwLDEsMTYsMTAuMjkzYTI4LjY3NCwyOC42NzQsMCwwLDEsOS4wMjIsMS4zMjQsMTEuMzc2LDExLjM3NiwwLDAsMSwzLjUzOCwxLjg2NkEzLjM5MSwzLjM5MSwwLDAsMSwzMCwxNS45NzRjMCwxLjcxOC0yLjAzLDMuNDU5LTUuMyw0LjU0MUEyOC44LDI4LjgsMCwwLDEsMTYsMjEuNzA2Wm0wLTEwLjIxN2EyNy45NDgsMjcuOTQ4LDAsMCwwLTguNzQ5LDEuMjgyYy0yLjguOTc3LTQuMDU1LDIuMzEzLTQuMDU1LDMuMiwwLC45MjgsMS4zNDksMi4zODcsNC4zMTEsMy40QTI3LjIxLDI3LjIxLDAsMCwwLDE2LDIwLjUxYTI3LjYsMjcuNiwwLDAsMCw4LjMyNS0xLjEzQzI3LjQsMTguMzYxLDI4LjgsMTYuOSwyOC44LDE1Ljk3NGEyLjMyNywyLjMyNywwLDAsMC0xLjAxLTEuNTczLDEwLjE5NCwxMC4xOTQsMCwwLDAtMy4xNjEtMS42NTRBMjcuNDYyLDI3LjQ2MiwwLDAsMCwxNiwxMS40ODlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA3YWNjXFxcIi8+PHBhdGggZD1cXFwiTTEwLjMyLDI4LjQ0M2EyLjYzOSwyLjYzOSwwLDAsMS0xLjMzNi0uMzI4Yy0xLjQzMi0uODI2LTEuOTI4LTMuMjA4LTEuMzI3LTYuMzczYTI4Ljc1NSwyOC43NTUsMCwwLDEsMy40LTguNTkzaDBBMjguNjc2LDI4LjY3NiwwLDAsMSwxNi43MSw1Ljk5NWExMS4zNzYsMTEuMzc2LDAsMCwxLDMuMzg0LTIuMTMzLDMuMzkxLDMuMzkxLDAsMCwxLDIuODc4LDBjMS40ODkuODU4LDEuOTgyLDMuNDg2LDEuMjg3LDYuODU5YTI4LjgwNiwyOC44MDYsMCwwLDEtMy4zMTYsOC4xMzMsMjguMzg1LDI4LjM4NSwwLDAsMS01LjQ3Niw3LjA5MywxMS4zLDExLjMsMCwwLDEtMy41MjMsMi4xODlBNC45MjYsNC45MjYsMCwwLDEsMTAuMzIsMjguNDQzWm0xLjc3My0xNC43YTI3Ljk0OCwyNy45NDgsMCwwLDAtMy4yNiw4LjIxOWMtLjU1MywyLjkxNS0uMDIyLDQuNjY4Ljc1LDUuMTE0LjguNDYzLDIuNzQyLjAyNCw1LjEtMi4wMzZhMjcuMjA5LDI3LjIwOSwwLDAsMCw1LjIyNy02Ljc5LDI3LjYsMjcuNiwwLDAsMCwzLjE4MS03Ljc3NmMuNjU0LTMuMTc1LjA4OS01LjExOS0uNzEzLTUuNTgxYTIuMzI3LDIuMzI3LDAsMCwwLTEuODY4LjA4OUExMC4xOTQsMTAuMTk0LDAsMCwwLDE3LjUsNi45YTI3LjQ2NCwyNy40NjQsMCwwLDAtNS40LDYuODQ5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwN2FjY1xcXCIvPjxwYXRoIGQ9XFxcIk0yMS42NzcsMjguNDU2Yy0xLjM1NSwwLTMuMDc2LS44Mi00Ljg2OC0yLjM2MWEyOC43NTYsMjguNzU2LDAsMCwxLTUuNzQ3LTcuMjM3aDBhMjguNjc2LDI4LjY3NiwwLDAsMS0zLjM3NC04LjQ3MSwxMS4zNzYsMTEuMzc2LDAsMCwxLS4xNTgtNEEzLjM5MSwzLjM5MSwwLDAsMSw4Ljk2NCwzLjljMS40ODctLjg2MSw0LjAxLjAyNCw2LjU4NSwyLjMxYTI4LjgsMjguOCwwLDAsMSw1LjM5LDYuOTM0LDI4LjM4NCwyOC4zODQsMCwwLDEsMy40MSw4LjI4NywxMS4zLDExLjMsMCwwLDEsLjEzNyw0LjE0NiwzLjU0MywzLjU0MywwLDAsMS0xLjQ5NCwyLjU1NUEyLjU5LDIuNTksMCwwLDEsMjEuNjc3LDI4LjQ1NlptLTkuNTgtMTAuMmEyNy45NDksMjcuOTQ5LDAsMCwwLDUuNDkyLDYuOTI5YzIuMjQ5LDEuOTM1LDQuMDMzLDIuMzUxLDQuOCwxLjkuOC0uNDY1LDEuMzktMi4zNjMuNzgyLTUuNDM0QTI3LjIxMiwyNy4yMTIsMCwwLDAsMTkuOSwxMy43NCwyNy42LDI3LjYsMCwwLDAsMTQuNzU1LDcuMWMtMi40MjQtMi4xNTItNC4zOS0yLjYzMy01LjE5MS0yLjE2OWEyLjMyNywyLjMyNywwLDAsMC0uODU1LDEuNjYyLDEwLjE5NCwxMC4xOTQsMCwwLDAsLjE1MywzLjU2NSwyNy40NjUsMjcuNDY1LDAsMCwwLDMuMjM2LDguMVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDdhY2NcXFwiLz5cIixcblx0fSxcblx0XCJSZWFzb25cIjoge1xuXHRcdGNvbG91cjogXCIjZGQ0YjM5XCIsXG5cdFx0aWNvbjogXCI8cG9seWxpbmUgcG9pbnRzPVxcXCIyIDIgMzAgMiAzMCAzMCAyIDMwIDIgMlxcXCIgc3R5bGU9XFxcImZpbGw6I2RkNGIzOVxcXCIvPjxwYXRoIGQ9XFxcIk05LjA1MSwxNy41MjdxMi41MzcsMCw1LjA3MiwwQTQuOTQ3LDQuOTQ3LDAsMCwxLDE3LjEsMTguNWEzLjI5LDMuMjksMCwwLDEsMS4xMjgsMi4yNjcsNC4xMTcsNC4xMTcsMCwwLDEtLjc3OCwzLjAyMiwzLjYsMy42LDAsMCwxLTEuMTM3LjkwNWwyLjI0NywzLjU0OS0zLjA2MSwwLTEuNi0zLjA0My0yLjE1NCwwLDAsMy4wMzJIOS4wNTFWMTcuNTI3bTIuNjksMi4xMjgsMCwzLjQzOCwxLjk4OSwwYTIuMTg0LDIuMTg0LDAsMCwwLDEuNDY4LS40NTIsMS44MTQsMS44MTQsMCwwLDAsLjQ4Mi0xLjU0NCwxLjQ2OSwxLjQ2OSwwLDAsMC0uNzA1LTEuMTgsMi43NjgsMi43NjgsMCwwLDAtMS40MzctLjI2OUMxMi45NCwxOS42NTQsMTEuNzQxLDE5LjY1NSwxMS43NDEsMTkuNjU1Wm04LjM4NC0yLjEzaDguMzV2Mi4xM2gtNS42NlYyMS44bDUuMTEsMHYyLjExOUgyMi44MlYyNi4xaDUuODI0djIuMTQySDIwLjEyNVYxNy41MjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiUmVnb1wiOiB7XG5cdFx0Y29sb3VyOiBcIiM3ODkyOWFcIixcblx0XHRpY29uOiBcIjxkZWZzPjxjbGlwUGF0aCBpZD1cXFwiYVxcXCI+PHBhdGggZD1cXFwiTTcuMDU1LDE2LjI0MWMzLjQxNS0xMC4yMiwxNC43NTktOS40NzMsMTcuOTI0LDBsLjEsNS44OTNhMTUuNTYyLDE1LjU2MiwwLDAsMC05LjAzNiw3LjI0NkExNy42NDEsMTcuNjQxLDAsMCwwLDcuMDMsMjIuMzQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZVxcXCIvPjwvY2xpcFBhdGg+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfcmVnbzwvdGl0bGU+PHBhdGggZD1cXFwiTTcuMDMsMTYuMjQxbDIuNi00LjU1OWMtMi40MTgtLjMxMi0yLjYwNi0zLjQzMS0uOC05LjA2MkMzLjgwOSw4Ljg1MywyLjQyLDEwLjIyOCw3LjAzLDE2LjI0MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZmJmYmY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cGF0aCBkPVxcXCJNMjQuOTcsMTYuMjQxbC0yLjU5NS00LjU1OWMyLjQxOC0uMzEyLDIuNjA2LTMuNDMxLjgtOS4wNjJDMjguMTkxLDguODUzLDI5LjU4LDEwLjIyOCwyNC45NywxNi4yNDFaXFxcIiBzdHlsZT1cXFwiZmlsbDojYmZiZmJmO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBhdGggZD1cXFwiTTcuMDU1LDE2LjI0MWMzLjQxNS0xMC4yMiwxNC43NTktOS40NzMsMTcuOTI0LDBsLjEsNS44OTNhMTUuNTYyLDE1LjU2MiwwLDAsMC05LjAzNiw3LjI0NkExNy42NDEsMTcuNjQxLDAsMCwwLDcuMDMsMjIuMzQ2WlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZVxcXCIvPjxnIHN0eWxlPVxcXCJjbGlwLXBhdGg6dXJsKCNhKVxcXCI+PHJlY3QgeD1cXFwiMTYuMDUzXFxcIiB5PVxcXCI3Ljk2MlxcXCIgd2lkdGg9XFxcIjkuNTQ5XFxcIiBoZWlnaHQ9XFxcIjIxLjg5OVxcXCIgc3R5bGU9XFxcImZpbGw6IzUzNjM2N1xcXCIvPjxyZWN0IHg9XFxcIjUuMzIyXFxcIiB5PVxcXCI3Ljk2MlxcXCIgd2lkdGg9XFxcIjEwLjczMlxcXCIgaGVpZ2h0PVxcXCIyMS44OTlcXFwiIHN0eWxlPVxcXCJmaWxsOiM3ODkyOWFcXFwiLz48L2c+PGNpcmNsZSBjeD1cXFwiMTYuMDRcXFwiIGN5PVxcXCIxNi4yNDFcXFwiIHI9XFxcIjEuMTY2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiUmVTY3JpcHRcIjoge1xuXHRcdGNvbG91cjogXCIjZTg0ZjRmXCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCIxMS40MjFcXFwiIHkxPVxcXCItMjIxLjcwNVxcXCIgeDI9XFxcIjIxLjUwOVxcXCIgeTI9XFxcIi0yNDguNzkyXFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEsIDAsIDAsIC0xLCAwLCAtMjE4KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2U4NGY0ZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC40MDlcXFwiIHN0b3AtY29sb3I9XFxcIiNkYjQ2NDZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjY2IzOTM5XFxcIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9yZXNjcmlwdDwvdGl0bGU+PHBhdGggZD1cXFwiTTIsMTAuOTdjMC0zLjczOCwwLTUuNi45NTItNi45MTZhNC45OTIsNC45OTIsMCwwLDEsMS4xLTEuMUM1LjM2NCwyLDcuMjMzLDIsMTAuOTY5LDJIMjEuMDNjMy43MzgsMCw1LjYwNSwwLDYuOTE2Ljk1MWE0Ljk5Miw0Ljk5MiwwLDAsMSwxLjEsMS4xQzMwLDUuMzY0LDMwLDcuMjMyLDMwLDEwLjk3VjIxLjAzYzAsMy43MzcsMCw1LjYwNS0uOTUyLDYuOTE2YTQuOTY2LDQuOTY2LDAsMCwxLTEuMSwxLjFDMjYuNjM2LDMwLDI0Ljc2OCwzMCwyMS4wMywzMEgxMC45NjljLTMuNzM2LDAtNS42LDAtNi45MTUtLjk1MmE0Ljk2Niw0Ljk2NiwwLDAsMS0xLjEtMS4xQzIsMjYuNjM2LDIsMjQuNzY3LDIsMjEuMDNaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTIwLjk3NCwxNS41NTRhMy4zMjUsMy4zMjUsMCwxLDAtMy4zMjQtMy4zMjVBMy4zMjUsMy4zMjUsMCwwLDAsMjAuOTc0LDE1LjU1NFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNOS4zMTYsMTEuODA5YTQuNjc2LDQuNjc2LDAsMCwxLC4yMDYtMS45ODdBMS44ODYsMS44ODYsMCwwLDEsMTAuMzQ1LDlhNC43LDQuNywwLDAsMSwxLjk4Ny0uMjA1aDIuNjRWMjEuMDQ1YTQuNjg2LDQuNjg2LDAsMCwxLS4xNDQsMS42NjQsMS44OTIsMS44OTIsMCwwLDEtMS4wMiwxLjAyLDQuNzIsNC43MiwwLDAsMS0xLjY2NC4xNDMsNC43MTcsNC43MTcsMCwwLDEtMS42NjQtLjE0MywxLjg5MiwxLjg5MiwwLDAsMS0xLjAyLTEuMDIsNC43Miw0LjcyLDAsMCwxLS4xNDMtMS42NjRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwicmVTVCAocmVTdHJ1Y3R1cmVkVGV4dClcIjoge1xuXHRcdGNvbG91cjogXCIjY2UzZjMxXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTYsMzBBMTMuODU5LDEzLjg1OSwwLDAsMSwyLjI4NiwxNiwxNC4xNDksMTQuMTQ5LDAsMCwxLDYuMyw2LjEsMTMuNTE3LDEzLjUxNywwLDAsMSwyNS43LDYuMSwxNC4xNDksMTQuMTQ5LDAsMCwxLDI5LjcxNCwxNiwxMy44NTksMTMuODU5LDAsMCwxLDE2LDMwWlxcXCIgc3R5bGU9XFxcImZpbGw6I2NlM2YzMVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS44NjksMjMuMDE1aC0uNGE0LjI2Myw0LjI2MywwLDAsMS0xLjA0OC0uMTEzLDEuMzg3LDEuMzg3LDAsMCwxLS43NjctLjU0OCwyLjIsMi4yLDAsMCwxLS40MDktMS4wMjZBMTMuMjgsMTMuMjgsMCwwLDEsOS4xNTksMTkuNmExMi43OCwxMi43OCwwLDAsMC0uMDgtMS42ODcsMS43NzMsMS43NzMsMCwwLDAtLjQwNS0uOTI0LDEuMzI1LDEuMzI1LDAsMCwwLTEuMDI2LS4zOTFWMTUuNGExLjMyNSwxLjMyNSwwLDAsMCwxLjAyNi0uMzkxLDEuNzczLDEuNzczLDAsMCwwLC40MDUtLjkyNCwxMi43OCwxMi43OCwwLDAsMCwuMDgtMS42ODcsMTMuMjgsMTMuMjgsMCwwLDEsLjA4NC0xLjczMSwyLjIsMi4yLDAsMCwxLC40MDktMS4wMjYsMS4zODcsMS4zODcsMCwwLDEsLjc2Ny0uNTQ4LDQuMjYzLDQuMjYzLDAsMCwxLDEuMDQ4LS4xMTNoLjR2MS4xNGgtLjIyNnEtLjc2LDAtLjkzMS40YTcuNzIsNy43MiwwLDAsMC0uMTcyLDIuMTcsNC44NzYsNC44NzYsMCwwLDEtLjQxNiwyLjMxNkEyLjExNywyLjExNywwLDAsMSw4Ljg1OSwxNmEyLjA4OSwyLjA4OSwwLDAsMSwxLjI2NC45ODZBNC44NzYsNC44NzYsMCwwLDEsMTAuNTQsMTkuM2E3LjcyLDcuNzIsMCwwLDAsLjE3MiwyLjE3cS4xNzIuNC45MzEuNGguMjI2Wm0xLjYtMy4xNDFoMS4wMzVWMTYuNDJoMS40NTlsMS45NywzLjQ1NGgxLjE4NEwxNy4wNCwxNi4zMDhhMi4yNDMsMi4yNDMsMCwwLDAsMS44MzMtMi4zMTljMC0xLjctMS4yLTIuMjk0LTIuODU1LTIuMjk0SDEzLjQ3NFptMS4wMzUtNC4zVjEyLjUzaDEuMzU5YzEuMjcyLDAsMS45Ny4zODYsMS45NywxLjQ1OXMtLjcsMS41ODMtMS45NywxLjU4M1ptNS41NTctNi41OTFoLjRhNC4yNjMsNC4yNjMsMCwwLDEsMS4wNDguMTEzLDEuMzg3LDEuMzg3LDAsMCwxLC43NjcuNTQ4LDIuMiwyLjIsMCwwLDEsLjQwOSwxLjAyNiwxMy4yOCwxMy4yOCwwLDAsMSwuMDg0LDEuNzMxLDEyLjc4LDEyLjc4LDAsMCwwLC4wOCwxLjY4NywxLjc3MywxLjc3MywwLDAsMCwuNDA1LjkyNCwxLjMyNSwxLjMyNSwwLDAsMCwxLjAyNi4zOTF2MS4xOTFhMS4zMjUsMS4zMjUsMCwwLDAtMS4wMjYuMzkxLDEuNzczLDEuNzczLDAsMCwwLS40MDUuOTI0LDEyLjc4LDEyLjc4LDAsMCwwLS4wOCwxLjY4NywxMy4yOCwxMy4yOCwwLDAsMS0uMDg0LDEuNzMxLDIuMiwyLjIsMCwwLDEtLjQwOSwxLjAyNiwxLjM4NywxLjM4NywwLDAsMS0uNzY3LjU0OCw0LjI2Myw0LjI2MywwLDAsMS0xLjA0OC4xMTNoLS40di0xLjE0aC4yMjZxLjc2LDAsLjkzMS0uNEE3LjcyLDcuNzIsMCwwLDAsMjEuNCwxOS4zYTQuODc2LDQuODc2LDAsMCwxLC40MTYtMi4zMTZBMi4wODksMi4wODksMCwwLDEsMjMuMDc1LDE2YTIuMTE3LDIuMTE3LDAsMCwxLTEuMjY0LS45OTQsNC44NzYsNC44NzYsMCwwLDEtLjQxNi0yLjMxNiw3LjcyLDcuNzIsMCwwLDAtLjE3Mi0yLjE3cS0uMTcyLS40LS45MzEtLjRoLS4yMjZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiUm9ib3QgRnJhbWV3b3JrXCI6IHtcblx0XHRpY29uOiBcIjxjaXJjbGUgY3g9XFxcIjE2XFxcIiBjeT1cXFwiMTZcXFwiIHI9XFxcIjE0XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTEwLjM4NywxNC42YTIuNzI3LDIuNzI3LDAsMCwxLDUuNDUzLDAsLjk5Ljk5LDAsMSwxLTEuOTgsMCwuNzQ2Ljc0NiwwLDAsMC0xLjQ5MiwwLC45OS45OSwwLDEsMS0xLjk4LDBtMTEuMyw0LjU4NmEuOTkxLjk5MSwwLDAsMS0uOTkyLjk5MkgxMS41MDhhLjk5Mi45OTIsMCwwLDEsMC0xLjk4NGg5LjE4NGEuOTk0Ljk5NCwwLDAsMSwuOTkyLjk5Mk0xNy4zOTEsMTUuMTZhLjk5Mi45OTIsMCwwLDEsLjI3LTEuMzc1bDIuMjkzLTEuNTUxYS45ODkuOTg5LDAsMSwxLDEuMTA5LDEuNjM3bC0yLjMsMS41NTFhLjk2NS45NjUsMCwwLDEtLjU1MS4xNzIuOTk0Ljk5NCwwLDAsMS0uODI0LS40MzRtNi4yODksNi4wOTRhLjcwNy43MDcsMCwwLDEtLjIwNy41bC0xLjcwNywxLjcwN2EuNzA3LjcwNywwLDAsMS0uNS4yMDdIMTAuOGEuNzA3LjcwNywwLDAsMS0uNS0uMjA3TDguNiwyMS43NTRhLjcwNy43MDcsMCwwLDEtLjIwNy0uNVYxMC44YS43MDcuNzA3LDAsMCwxLC4yMDctLjVMMTAuMyw4LjU5NGEuNzA3LjcwNywwLDAsMSwuNS0uMjA3SDIxLjI2NmEuNzA3LjcwNywwLDAsMSwuNS4yMDdMMjMuNDczLDEwLjNhLjcwNy43MDcsMCwwLDEsLjIwNy41Wk0yNS4xMjksOS4xNiwyMi45LDYuOTNBMS44MDcsMS44MDcsMCwwLDAsMjEuNjI5LDYuNEgxMC40MzhhMS44MDcsMS44MDcsMCwwLDAtMS4yNzMuNTI3TDYuOTM4LDkuMTZhMS44LDEuOCwwLDAsMC0uNTI3LDEuMjdWMjEuNjIxYTEuOCwxLjgsMCwwLDAsLjUyNywxLjI3M2wyLjIyNywyLjIzYTEuODEsMS44MSwwLDAsMCwxLjI3My41MjNIMjEuNjI5YTEuOCwxLjgsMCwwLDAsMS4yNzMtLjUyM2wyLjIyNy0yLjIzYTEuNzg0LDEuNzg0LDAsMCwwLC41MjctMS4yNzNWMTAuNDM0YTEuNzg0LDEuNzg0LDAsMCwwLS41MjctMS4yNzNcXFwiLz5cIixcblx0fSxcblx0XCJSdWJ5XCI6IHtcblx0XHRjb2xvdXI6IFwiI2IzMTMwMVwiLFxuXHRcdGljb246IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiLTIzNS45NTdcXFwiIHkxPVxcXCItMzA4LjU3OVxcXCIgeDI9XFxcIi0yMzUuOTg2XFxcIiB5Mj1cXFwiLTMwOC41MjdcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMjAyLjkzNSwgMCwgMCwgLTIwMi43OCwgNDc5MTAuNDYxLCAtNjI1NDEuMTYpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmI3NjU1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZTQyYjFlXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjOTAwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOTAwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCItMjM1LjU3MVxcXCIgeTE9XFxcIi0zMDkuMDg3XFxcIiB4Mj1cXFwiLTIzNS42OTdcXFwiIHkyPVxcXCItMzA5LjA0MVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg2MC4zMDgsIDAsIDAsIC0xMTEuNzc4LCAxNDIzNi4zNTEsIC0zNDUyNS4zOTUpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjODcxMTAxXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjOTExMjA5XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOTExMjA5XFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImNcXFwiIHgxPVxcXCItMjM1Ljg5NlxcXCIgeTE9XFxcIi0zMTMuMzYyXFxcIiB4Mj1cXFwiLTIzNS45MzdcXFwiIHkyPVxcXCItMzEzLjEyOVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxODguMzIsIDAsIDAsIC0yMS45ODYsIDQ0NDQ3LjMwMiwgLTY4NTYuODgyKVxcXCIgeGxpbms6aHJlZj1cXFwiI2JcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImRcXFwiIHgxPVxcXCItMjMzLjUxNVxcXCIgeTE9XFxcIi0zMDkuMDgyXFxcIiB4Mj1cXFwiLTIzMy40OTdcXFwiIHkyPVxcXCItMzA5LjE2MVxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg2NS4yMjIsIDAsIDAsIC05Ny4xLCAxNTIzNy44MDIsIC0yOTk5MS44MTQpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjIzXFxcIiBzdG9wLWNvbG9yPVxcXCIjZTU3MjUyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQ2XFxcIiBzdG9wLWNvbG9yPVxcXCIjZGUzYjIwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjYTYwMDAzXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYTYwMDAzXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImVcXFwiIHgxPVxcXCItMjM1LjMxNFxcXCIgeTE9XFxcIi0zMDkuNTM0XFxcIiB4Mj1cXFwiLTIzNS4zMVxcXCIgeTI9XFxcIi0zMDkuNjA3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEwNS4zMiwgMCwgMCwgLTEwNi44MjUsIDI0Nzk4LjkyNSwgLTMzMDUzLjE1MilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjNcXFwiIHN0b3AtY29sb3I9XFxcIiNlNDcxNGVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTZcXFwiIHN0b3AtY29sb3I9XFxcIiNiZTFhMGRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiNhODBkMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNhODBkMDBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZlxcXCIgeDE9XFxcIi0yMzUuODgyXFxcIiB5MT1cXFwiLTMxMS44NTFcXFwiIHgyPVxcXCItMjM1Ljg2OVxcXCIgeTI9XFxcIi0zMTEuOTM1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDk0LjMyMSwgMCwgMCwgLTY2LjQxOCwgMjIyNzEuNDk5LCAtMjA3MDcuMDA0KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4xOFxcXCIgc3RvcC1jb2xvcj1cXFwiI2U0NjM0MlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC40XFxcIiBzdG9wLWNvbG9yPVxcXCIjYzgyNDEwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjYTgwZDAwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYTgwZDAwXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImdcXFwiIHgxPVxcXCItMjM1LjQxMlxcXCIgeTE9XFxcIi0zMjEuMDc0XFxcIiB4Mj1cXFwiLTIzNS4zMzNcXFwiIHkyPVxcXCItMzIwLjk1OFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg3MC43NjcsIDAsIDAsIC0yNC4zMDEsIDE2Njc4LjExNiwgLTc3OTguNjQ3KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41NFxcXCIgc3RvcC1jb2xvcj1cXFwiI2M4MWYxMVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC45OVxcXCIgc3RvcC1jb2xvcj1cXFwiI2JmMDkwNVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2JmMDkwNVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJoXFxcIiB4MT1cXFwiLTIyMy44MjFcXFwiIHkxPVxcXCItMzEwLjExNlxcXCIgeDI9XFxcIi0yMjMuNzk2XFxcIiB5Mj1cXFwiLTMxMC4xOFxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxOC4xNzcsIDAsIDAsIC03Mi42NDUsIDQwNzEuMDE3LCAtMjI1MTAuMjMzKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2RlNDAyNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC45OVxcXCIgc3RvcC1jb2xvcj1cXFwiI2JmMTkwYlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2JmMTkwYlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJpXFxcIiB4MT1cXFwiLTIzNS41NjFcXFwiIHkxPVxcXCItMzA5LjI1OFxcXCIgeDI9XFxcIi0yMzUuNDI0XFxcIiB5Mj1cXFwiLTMwOS4xMTZcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMTU4LjE2MiwgMCwgMCwgLTE1Ny45MzcsIDM3MjU2LjMxMywgLTQ4ODE5LjM4MilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNiZDAwMTJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMDdcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMTdcXFwiIHN0b3AtY29sb3I9XFxcIiNmZmZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMjdcXFwiIHN0b3AtY29sb3I9XFxcIiNjODJmMWNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzNcXFwiIHN0b3AtY29sb3I9XFxcIiM4MjBjMDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDZcXFwiIHN0b3AtY29sb3I9XFxcIiNhMzE2MDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzJcXFwiIHN0b3AtY29sb3I9XFxcIiNiMzEzMDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiNlODI2MDlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNlODI2MDlcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwialxcXCIgeDE9XFxcIi0yMzUuNDI0XFxcIiB5MT1cXFwiLTMwOS4xNDNcXFwiIHgyPVxcXCItMjM1LjQ3NlxcXCIgeTI9XFxcIi0zMDkuMTI2XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDEyNy4wNzQsIDAsIDAsIC05Ny40MDksIDI5OTMyLjIyOSwgLTMwMDg2Ljk0NylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM4YzBjMDFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTRcXFwiIHN0b3AtY29sb3I9XFxcIiM5OTBjMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiNhODBkMGVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNhODBkMGVcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwia1xcXCIgeDE9XFxcIi0yMzUuODM5XFxcIiB5MT1cXFwiLTMwOS42MDRcXFwiIHgyPVxcXCItMjM1LjkwMVxcXCIgeTI9XFxcIi0zMDkuNTU1XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDk0LjAxMSwgMCwgMCwgLTEwNS42MDMsIDIyMTk4Ljc0MywgLTMyNjc2Ljg1NilcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiM3ZTExMGJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiM5ZTBjMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM5ZTBjMDBcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwibFxcXCIgeDE9XFxcIi0yMzUuODU0XFxcIiB5MT1cXFwiLTMxMS4yNFxcXCIgeDI9XFxcIi0yMzUuODkxXFxcIiB5Mj1cXFwiLTMxMS4yMDJcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoNzkuNzAyLCAwLCAwLCAtODEuNzkxLCAxODgyNy4zOTcsIC0yNTQ0Ny45MDUpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjNzkxMzBkXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjOWUxMjBiXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWUxMjBiXFxcIi8+PC9saW5lYXJHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9XFxcIm1cXFwiIGN4PVxcXCItMjM1Ljg4MlxcXCIgY3k9XFxcIi0zMTIuNTQzXFxcIiByPVxcXCIwLjA3NlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg5My4xMTMsIDAsIDAsIC00OC42NTUsIDIxOTg2LjA3MywgLTE1MTkzLjYxKVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2E4MGQwMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC45OVxcXCIgc3RvcC1jb2xvcj1cXFwiIzdlMGUwOFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzdlMGUwOFxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPVxcXCJuXFxcIiBjeD1cXFwiLTIzNS4yODJcXFwiIGN5PVxcXCItMzA5LjcwNFxcXCIgcj1cXFwiMC4wOTdcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoOTcuNDM0LCAwLCAwLCAtNzUuODQ4LCAyMjkzNy4wNTcsIC0yMzQ2Ny44NClcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNhMzBjMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiM4MDBlMDhcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM4MDBlMDhcXFwiLz48L3JhZGlhbEdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwib1xcXCIgeDE9XFxcIi0yMzEuMjQxXFxcIiB5MT1cXFwiLTMwOS40MzVcXFwiIHgyPVxcXCItMjMxLjI5OVxcXCIgeTI9XFxcIi0zMDkuMzM3XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDQwLjEzNywgMCwgMCwgLTgxLjE0MywgOTI4Ni45OTgsIC0yNTA3OC41ODkpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjOGIyMTE0XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQzXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWUxMDBhXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjk5XFxcIiBzdG9wLWNvbG9yPVxcXCIjYjMxMDBjXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjYjMxMDBjXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcInBcXFwiIHgxPVxcXCItMjM1Ljg5OFxcXCIgeTE9XFxcIi0zMTcuNDY2XFxcIiB4Mj1cXFwiLTIzNS44MzFcXFwiIHkyPVxcXCItMzE3LjUzN1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCg3OC4wOTksIDAsIDAsIC0zMi42MjQsIDE4NDQ3LjM2MSwgLTEwMzUzLjU1MylcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNiMzEwMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDRcXFwiIHN0b3AtY29sb3I9XFxcIiM5MTBmMDhcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTlcXFwiIHN0b3AtY29sb3I9XFxcIiM3OTFjMTJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM3OTFjMTJcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3J1Ynk8L3RpdGxlPjxwYXRoIGQ9XFxcIk0yMy42OTMsMjAuNDY5LDcuNzA3LDI5Ljk2MWwyMC43LTEuNEwzMCw3LjY4NVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cGF0aCBkPVxcXCJNMjguNDQsMjguNTQyLDI2LjY2MSwxNi4yNjNsLTQuODQ2LDYuNFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYilcXFwiLz48cGF0aCBkPVxcXCJNMjguNDY0LDI4LjU0MiwxNS40MywyNy41MTksNy43NzYsMjkuOTM0WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPjxwYXRoIGQ9XFxcIk03Ljc5NCwyOS45MzcsMTEuMDUsMTkuMjcsMy44ODUsMjAuOFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMjEuODEzLDIyLjdsLTMtMTEuNzM1TDEwLjI0MywxOVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZSlcXFwiLz48cGF0aCBkPVxcXCJNMjkuMzIsMTEuMTI3bC04LjEtNi42MTktMi4yNTcsNy4zWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNmKVxcXCIvPjxwYXRoIGQ9XFxcIk0yNS41MywyLjE0OCwyMC43NjMsNC43ODJsLTMuMDA3LTIuNjdaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2cpXFxcIi8+PHBhdGggZD1cXFwiTTIsMjQuMzhsMi0zLjY0MkwyLjM4MiwxNi40WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNoKVxcXCIvPjxwYXRoIGQ9XFxcIk0yLjI3NCwxNi4yNjMsMy45LDIwLjg3M2w3LjA2Mi0xLjU4NEwxOS4wMjQsMTEuOCwyMS4zLDQuNTY5bC0zLjU4My0yLjUzLTYuMDkxLDIuMjhDOS43MDYsNi4xLDUuOTgyLDkuNjM1LDUuODQ4LDkuN3MtMi40NTksNC40NjQtMy41NzQsNi41NjJaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTcuOTgxLDcuOTgxQzEyLjE0LDMuODU4LDE3LjUsMS40MjEsMTkuNTU5LDMuNXMtLjEyNCw3LjEyMS00LjI4MywxMS4yNDRTNS44MjEsMjEuNDM0LDMuNzY1LDE5LjM1OCwzLjgyMiwxMi4xLDcuOTgxLDcuOTgxWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNpKVxcXCIvPjxwYXRoIGQ9XFxcIk03Ljc5NCwyOS45MzNsMy4yMzEtMTAuNywxMC43MjksMy40NDdjLTMuODc5LDMuNjM4LTguMTk0LDYuNzEzLTEzLjk2LDcuMjU0WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNqKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4wMzgsMTEuNzc0bDIuNzU0LDEwLjkxYzMuMjQtMy40MDcsNi4xNDktNy4wNyw3LjU3My0xMS42bC0xMC4zMjguNjkxWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNrKVxcXCIvPjxwYXRoIGQ9XFxcIk0yOS4zMzcsMTEuMTM5YzEuMS0zLjMyNywxLjM1Ny04LjEtMy44NDEtOC45ODVMMjEuMjMxLDQuNTA5bDguMTA2LDYuNjI5WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNsKVxcXCIvPjxwYXRoIGQ9XFxcIk0yLDI0LjMzMmMuMTUzLDUuNDksNC4xMTQsNS41NzIsNS44LDUuNjJsLTMuOS05LjFMMiwyNC4zMzJaXFxcIiBzdHlsZT1cXFwiZmlsbDojOWUxMjA5XFxcIi8+PHBhdGggZD1cXFwiTTE5LjA1MywxMS43OTFjMi40OSwxLjUzMSw3LjUwOSw0LjYsNy42MSw0LjY2MWExNy41NTIsMTcuNTUyLDAsMCwwLDIuNjE5LTUuMzQzbC0xMC4yMjkuNjgzWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNtKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS4wMjEsMTkuMjMybDQuMzE5LDguMzMyYTI3LjkyNCwyNy45MjQsMCwwLDAsNi4zODUtNC44OGwtMTAuNy0zLjQ1MlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjbilcXFwiLz48cGF0aCBkPVxcXCJNMy44ODcsMjAuODYxbC0uNjEyLDcuMjg3YzEuMTU1LDEuNTc3LDIuNzQzLDEuNzE0LDQuNDA5LDEuNTkxLTEuMjA1LTMtMy42MTQtOS0zLjgtOC44NzhaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI28pXFxcIi8+PHBhdGggZD1cXFwiTTIxLjIwNiw0LjUyOGw4LjU4LDEuMmMtLjQ1OC0xLjk0LTEuODY0LTMuMTkyLTQuMjYxLTMuNTg0bC00LjMxOSwyLjM4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNwKVxcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiI1wiLFxuXHRcdF0sXG5cdH0sXG5cdFwiUnVzdFwiOiB7XG5cdFx0Y29sb3VyOiBcIiNhMDRmMTJcIixcblx0XHRpY29uOiBcIjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiYVxcXCIgY3g9XFxcIi00OTIuMDM1XFxcIiBjeT1cXFwiLTg4My4zN1xcXCIgcj1cXFwiMTMuOTk4XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwibWF0cml4KDAuODY2LCAtMC41LCAtMC4zLCAtMC41MiwgMTc3LjEwNiwgLTY4OS4wMzMpXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjN2Q3ZDdkXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjI2N1xcXCIgc3RvcC1jb2xvcj1cXFwiIzdlN2M3YVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC40NVxcXCIgc3RvcC1jb2xvcj1cXFwiIzgxNzg3MVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42MDhcXFwiIHN0b3AtY29sb3I9XFxcIiM4NjcxNjJcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzUzXFxcIiBzdG9wLWNvbG9yPVxcXCIjOGQ2ODRjXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjg4NlxcXCIgc3RvcC1jb2xvcj1cXFwiIzk2NWMzMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2EwNGYxMlxcXCIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfcnVzdDwvdGl0bGU+PHBhdGggZD1cXFwiTTE1LjEyNCw1LjNhLjgzMi44MzIsMCwxLDEsLjgzMi44MzJoMGEuODMxLjgzMSwwLDAsMS0uODMyLS44MzJNNS4yLDEyLjgzNGEuODMyLjgzMiwwLDEsMSwuODMyLjgzMmgwYS44MzIuODMyLDAsMCwxLS44MzItLjgzMm0xOS44NTYuMDM5YS44MzIuODMyLDAsMSwxLC44MzIuODMyLjgzMS44MzEsMCwwLDEtLjgzMi0uODMyaDBNNy42MDUsMTQuMDEzYS43Ni43NiwwLDAsMCwuMzg2LTFsLS4zNjktLjgzNUg5LjA3NHY2LjU0NUg2LjE0NGExMC4yNDcsMTAuMjQ3LDAsMCwxLS4zMzItMy45MTFabTYuMDc0LjE2MVYxMi4yNDVoMy40NThjLjE3OSwwLDEuMjYxLjIwNiwxLjI2MSwxLjAxNiwwLC42NzItLjgzLjkxMy0xLjUxMy45MTNaTTguOTU4LDI0LjU2MWEuODMyLjgzMiwwLDEsMSwuODMyLjgzMi44MzEuODMxLDAsMCwxLS44MzItLjgzMmgwbTEyLjMzMS4wMzlhLjgzMi44MzIsMCwxLDEsLjgzMi44MzIuODMyLjgzMiwwLDAsMS0uODMyLS44MzJoMG0uMjU3LTEuODg3YS43NTguNzU4LDAsMCwwLS45LjU4NGwtLjQxOCwxLjk0OWExMC4yNDksMTAuMjQ5LDAsMCwxLTguNTQ1LS4wNDFsLS40MTctMS45NDlhLjc1OS43NTksMCwwLDAtLjktLjU4M2gwbC0xLjcyMS4zN2ExMC4yMzMsMTAuMjMzLDAsMCwxLS44OS0xLjA0OWg4LjM3NGMuMDk1LDAsLjE1OC0uMDE3LjE1OC0uMVYxOC45MjhjMC0uMDg2LS4wNjMtLjEtLjE1OC0uMWgtMi40NVYxNi45NDdoMi42NDlhMS42NjUsMS42NjUsMCwwLDEsMS42MjksMS40MTJjLjEwNS40MTMuMzM2LDEuNzU3LjQ5NCwyLjE4Ny4xNTcuNDgzLjgsMS40NDcsMS40ODIsMS40NDdoNC4zMjNhMTAuMjQzLDEwLjI0MywwLDAsMS0uOTQ5LDEuMVptNC42NS03LjgyMWExMC4yNjEsMTAuMjYxLDAsMCwxLC4wMjIsMS43NzlIMjUuMTY3Yy0uMTA1LDAtLjE0OC4wNjktLjE0OC4xNzJ2LjQ4M2MwLDEuMTM2LS42NDEsMS4zODQtMS4yLDEuNDQ3LS41MzUuMDYtMS4xMjgtLjIyNC0xLjItLjU1MWEzLjYxNiwzLjYxNiwwLDAsMC0xLjY3MS0yLjgwOGMxLjAzLS42NTQsMi4xLTEuNjE5LDIuMS0yLjkxMUEzLjI5MiwzLjI5MiwwLDAsMCwyMS40NCw5LjhhNC41NTksNC41NTksMCwwLDAtMi4yLS43MjRIOC4zNjdBMTAuMjQ2LDEwLjI0NiwwLDAsMSwxNC4xLDUuODRsMS4yODIsMS4zNDRhLjc1OC43NTgsMCwwLDAsMS4wNzIuMDI2aDBsMS40MzQtMS4zNzJhMTAuMjQ4LDEwLjI0OCwwLDAsMSw3LjAxNSw1bC0uOTgyLDIuMjE3YS43NjEuNzYxLDAsMCwwLC4zODYsMVptMi40NDguMDM2LS4wMzMtLjM0MywxLjAxMS0uOTQzYS40Mi40MiwwLDAsMC0uMDEzLS41OTUuNDI4LjQyOCwwLDAsMC0uMTIxLS4wODFMMjguMiwxMi40ODNsLS4xLS4zMzQuODA2LTEuMTJhLjQyMi40MjIsMCwwLDAtLjEzLS41ODEuNDMuNDMsMCwwLDAtLjEzMy0uMDU1bC0xLjM2My0uMjIyLS4xNjQtLjMwNi41NzMtMS4yNTdhLjQxOS40MTksMCwwLDAtLjIzNi0uNTQ0LjQyNi40MjYsMCwwLDAtLjE0Ni0uMDI5bC0xLjM4My4wNDhMMjUuNyw3LjgxOWwuMzE4LTEuMzQ3YS40MjEuNDIxLDAsMCwwLS4zNDMtLjQ4Ny40MzUuNDM1LDAsMCwwLS4xNDQsMEwyNC4xODMsNi4zbC0uMjY2LS4yMTlMMjMuOTY2LDQuN2EuNDIxLjQyMSwwLDAsMC0uNDMxLS40MTEuNDI2LjQyNiwwLDAsMC0uMTQxLjAyOGwtMS4yNTcuNTczLS4zMDYtLjE2NC0uMjIyLTEuMzYzYS40MjEuNDIxLDAsMCwwLS41LS4zMTguNDMuNDMsMCwwLDAtLjEzMy4wNTVsLTEuMTIxLjgwNi0uMzMzLS4xLS40ODMtMS4yOTNhLjQyMS40MjEsMCwwLDAtLjU1NS0uMjE1LjQ0Mi40NDIsMCwwLDAtLjEyLjA4TDE3LjQxOCwzLjM5bC0uMzQzLS4wMzNMMTYuMzQ3LDIuMThhLjQyMS40MjEsMCwwLDAtLjY4OCwwbC0uNzI4LDEuMTc3LS4zNDMuMDMzLS45NDMtMS4wMTJhLjQyMS40MjEsMCwwLDAtLjU5NS4wMTUuNDQyLjQ0MiwwLDAsMC0uMDguMTJMMTIuNDgzLDMuOGwtLjMzMy4xLTEuMTItLjhhLjQyMi40MjIsMCwwLDAtLjU4MS4xMy40My40MywwLDAsMC0uMDU1LjEzM2wtLjIyMiwxLjM2My0uMzA2LjE2NEw4LjYwOCw0LjMxN2EuNDIxLjQyMSwwLDAsMC0uNTQ0LjIzOS40NDQuNDQ0LDAsMCwwLS4wMjguMTQ0bC4wNDgsMS4zODNMNy44MTgsNi4zLDYuNDcxLDUuOTg0YS40MjEuNDIxLDAsMCwwLS40ODcuMzQzLjQzNS40MzUsMCwwLDAsMCwuMTQ0TDYuMyw3LjgxOWwtLjIxOC4yNjVMNC43LDguMDM2YS40MjIuNDIyLDAsMCwwLS4zODMuNTczTDQuODksOS44NjZsLS4xNjQuMzA2LTEuMzYzLjIyMmEuNDIuNDIsMCwwLDAtLjMxOC41LjQzLjQzLDAsMCwwLC4wNTUuMTMzbC44MDYsMS4xMi0uMS4zMzQtMS4yOTMuNDgzYS40MjEuNDIxLDAsMCwwLS4yMTUuNTU1LjQxNC40MTQsMCwwLDAsLjA4MS4xMjFsMS4wMTEuOTQzLS4wMzMuMzQzLTEuMTc3LjcyOGEuNDIxLjQyMSwwLDAsMCwwLC42ODhsMS4xNzcuNzI4LjAzMy4zNDMtMS4wMTEuOTQzYS40MjEuNDIxLDAsMCwwLC4wMTUuNTk1LjQzNi40MzYsMCwwLDAsLjExOS4wOGwxLjI5My40ODMuMS4zMzRMMy4xLDIwLjk3MmEuNDIxLjQyMSwwLDAsMCwuMTMxLjU4MS40My40MywwLDAsMCwuMTMzLjA1NWwxLjM2My4yMjIuMTY0LjMwNy0uNTczLDEuMjU3YS40MjIuNDIyLDAsMCwwLC4yNC41NDUuNDM4LjQzOCwwLDAsMCwuMTQzLjAyOGwxLjM4My0uMDQ4LjIxOS4yNjYtLjMxNywxLjM0OGEuNDIuNDIsMCwwLDAsLjM0MS40ODYuNC40LDAsMCwwLC4xNDYsMEw3LjgxOCwyNS43bC4yNjYuMjE4TDguMDM1LDI3LjNhLjQxOS40MTksMCwwLDAsLjQyOS40MS40MTMuNDEzLDAsMCwwLC4xNDMtLjAyOGwxLjI1Ny0uNTczLjMwNi4xNjQuMjIyLDEuMzYyYS40MjEuNDIxLDAsMCwwLC41LjMxOS40MDcuNDA3LDAsMCwwLC4xMzMtLjA1NWwxLjEyLS44MDcuMzM0LjEuNDgzLDEuMjkyYS40MjIuNDIyLDAsMCwwLC41NTYuMjE0LjQzNi40MzYsMCwwLDAsLjExOS0uMDhsLjk0My0xLjAxMS4zNDMuMDM0LjcyOCwxLjE3N2EuNDIyLjQyMiwwLDAsMCwuNTg4LjEuNDEzLjQxMywwLDAsMCwuMS0uMWwuNzI4LTEuMTc3LjM0My0uMDM0Ljk0MywxLjAxMWEuNDIxLjQyMSwwLDAsMCwuNTk1LS4wMTUuNDM2LjQzNiwwLDAsMCwuMDgtLjExOWwuNDgzLTEuMjkyLjMzNC0uMSwxLjEyLjgwN2EuNDIxLjQyMSwwLDAsMCwuNTgxLS4xMzEuNDMuNDMsMCwwLDAsLjA1NS0uMTMzbC4yMjItMS4zNjIuMzA2LS4xNjQsMS4yNTcuNTczYS40MjEuNDIxLDAsMCwwLC41NDQtLjIzOS40MzguNDM4LDAsMCwwLC4wMjgtLjE0M2wtLjA0OC0xLjM4NC4yNjUtLjIxOCwxLjM0Ny4zMTdhLjQyMS40MjEsMCwwLDAsLjQ4Ny0uMzQuNDQ3LjQ0NywwLDAsMCwwLS4xNDZMMjUuNywyNC4xODNsLjIxOC0uMjY2LDEuMzgzLjA0OGEuNDIxLjQyMSwwLDAsMCwuNDEtLjQzMS40LjQsMCwwLDAtLjAyOC0uMTQybC0uNTczLTEuMjU3LjE2NC0uMzA3LDEuMzYzLS4yMjJhLjQyMS40MjEsMCwwLDAsLjMxOS0uNS40MzQuNDM0LDAsMCwwLS4wNTYtLjEzNWwtLjgwNi0xLjEyLjEtLjMzNCwxLjI5My0uNDgzYS40Mi40MiwwLDAsMCwuMjE1LS41NTQuNDE0LjQxNCwwLDAsMC0uMDgxLS4xMjFsLTEuMDExLS45NDMuMDMzLS4zNDMsMS4xNzctLjcyOGEuNDIxLjQyMSwwLDAsMCwwLS42ODhaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+XCIsXG5cdH0sXG5cdFwiU0FTXCI6IHtcblx0XHRjb2xvdXI6IFwiIzAwMmJiNVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTE2LjAxOCwzMEExNCwxNCwwLDEsMSwzMCwxNi4yLDE0LDE0LDAsMCwxLDE2LjAxOCwzMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDJiYjVcXFwiLz48cGF0aCBkPVxcXCJNOS4xNywyMi42M2MuMDI2LjA2MS4wNDYuMTI0LjA3Ny4xODMsMi4yMTUsNC4yMDYsNy43MzgsNC42MTYsMTAuNzU2LDIuNDU0YTYuMDE3LDYuMDE3LDAsMCwwLDEuNzMxLTguNTgzLDE1LjcsMTUuNywwLDAsMC0xLjMxOC0xLjczMWMtLjg4MS0xLjA2Ny0xLjc1NS0yLjE0LTIuNjM2LTMuMjA3LS4zNjYtLjQ0My0uNzY3LS44MzUtMS40MTYtLjY4M2ExLjM5MywxLjM5MywwLDAsMC0uODE2LDIuMzExYy44ODgsMS4xMDYsMS44MTksMi4xNzcsMi43LDMuMjg2YTMuODc0LDMuODc0LDAsMCwxLC41ODksNC40LDUuNDIzLDUuNDIzLDAsMCwxLTUsMy4xMzRBNi42LDYuNiwwLDAsMSw5LjE3LDIyLjYzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0yMi40OTQsOS42MDljLjA4LS4yNDgtLjA2Ni0uMzctLjE0MS0uNTA5QTcuNDc3LDcuNDc3LDAsMCwwLDEyLjYsNi4yMzdjLTMuMywxLjYzLTUuMSw1LjM1Mi0yLjYzNyw5LjE0N2E1Ni41Myw1Ni41MywwLDAsMCw0LjEzNSw1LjEyLDEuMDEyLDEuMDEyLDAsMCwwLC43MDkuMzQ1LDEuMzg0LDEuMzg0LDAsMCwwLDEuNDI4LS43NjUsMS4yNDcsMS4yNDcsMCwwLDAtLjE3My0xLjUwN2MtLjg3Ni0xLjA1MS0xLjc2OS0yLjA4OC0yLjYxNS0zLjE2MmE0LjEzLDQuMTMsMCwwLDEsLjMyMy01Ljc3MUE2LjA1NCw2LjA1NCwwLDAsMSwxOS45ODQsOC4xMyw1LjE5LDUuMTksMCwwLDEsMjIuNDk0LDkuNjA5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHR9LFxuXHRcIlNhc3MgKFNhc3MpXCI6IHtcblx0XHRjb2xvdXI6IFwiI2NkNjc5OVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTI2LjExLDE3LjU3MmE1LjgsNS44LDAsMCwwLTIuNTM3LjU4OCw1LjM0NSw1LjM0NSwwLDAsMS0uNTY4LTEuMzE0LDMuNTMsMy41MywwLDAsMS0uMDUxLTEuMSw5LjgxMSw5LjgxMSwwLDAsMSwuMzMyLTEuMTkyYy0uMDA1LS4wNTEtLjA2MS0uMjkyLS42MjQtLjNzLTEuMDQ4LjEwNy0xLjEuMjU2YTYuMTcxLDYuMTcxLDAsMCwwLS4yMzUuODM0LDE5LjY4NiwxOS42ODYsMCwwLDEtMS43MTMsMy4yOTQsMy4xODYsMy4xODYsMCwwLDEtLjQ0LTIuMDY2LDkuODExLDkuODExLDAsMCwxLC4zMzItMS4xOTJjLS4wMDUtLjA1MS0uMDYxLS4yOTItLjYyNC0uM3MtMS4wNDguMTA3LTEuMS4yNTYtLjExOC41LS4yMzUuODM0LTEuNDgzLDMuMzg2LTEuODQxLDQuMTczYy0uMTg0LjQtLjM0My43MjYtLjQ1NS45NDZoMGEuMjMzLjIzMywwLDAsMS0uMDIuMDQxYy0uMS4xODktLjE1My4yOTItLjE1My4yOTJ2LjAwNWMtLjA3Ny4xMzgtLjE1OS4yNjYtLjIuMjY2YTEuNzExLDEuNzExLDAsMCwxLC4wMS0uODY5Yy4yLTEuMDU5LjY5LTIuNzA1LjY4NS0yLjc2MiwwLS4wMzEuMDkyLS4zMTctLjMxNy0uNDY1YS41MDguNTA4LDAsMCwwLS41NzguMWMtLjAzNiwwLS4wNjEuMDg3LS4wNjEuMDg3cy40NDUtMS44NTEtLjg0OS0xLjg1MWEzLjg1NSwzLjg1NSwwLDAsMC0yLjQ3NSwxLjY4M2MtLjM0OC4xODktMS4wODkuNTkzLTEuODgyLDEuMDI4LS4zLjE2OS0uNjE0LjMzOC0uOTA1LjUtLjAyLS4wMi0uMDQxLS4wNDYtLjA2MS0uMDY2QzYuODcsMTcuNiwzLjk3NSwxNi40MTYsNC4xLDE0LjE3MWMuMDQ2LS44MTguMzI3LTIuOTY2LDUuNTU5LTUuNTc1LDQuMzA2LTIuMTIyLDcuNzMzLTEuNTM0LDguMzI2LS4yMy44NDksMS44NjItMS44MzYsNS4zMTktNi4yODUsNS44MmEzLjM1MSwzLjM1MSwwLDAsMS0yLjgxMy0uNzExYy0uMjM1LS4yNTYtLjI3MS0uMjcxLS4zNTgtLjIyLS4xNDMuMDc3LS4wNTEuMzA3LDAsLjQ0YTIuNjI2LDIuNjI2LDAsMCwwLDEuNjA2LDEuMjYzLDguNTUsOC41NSwwLDAsMCw1LjIxNy0uNTE3YzIuNy0xLjA0Myw0LjgtMy45NDMsNC4xODQtNi4zNzItLjYxOS0yLjQ2NS00LjcxLTMuMjc4LTguNTgyLTEuOUExOS41LDE5LjUsMCwwLDAsNC4zNTksOS45NTJjLTIuMTMzLDEuOTk1LTIuNDcsMy43MjgtMi4zMzIsNC40NTUuNSwyLjU3OCw0LjA1MSw0LjI1NSw1LjQ3Miw1LjUtLjA3Mi4wNDEtLjEzOC4wNzctLjE5NC4xMDctLjcxMS4zNTMtMy40MjEsMS43Ny00LjEsMy4yNjgtLjc2NywxLjcuMTIzLDIuOTE1LjcxMSwzLjA3OWE0LjM3NCw0LjM3NCwwLDAsMCw0LjcxLTEuOTA4QTQuNzI1LDQuNzI1LDAsMCwwLDkuMDQ5LDIwLjFhLjEwNy4xMDcsMCwwLDAtLjAyLS4wMzFsLjU1Ny0uMzI3Yy4zNjMtLjIxNS43MjEtLjQxNCwxLjAyOC0uNTc4YTYuNzQsNi43NCwwLDAsMC0uMzYzLDEuODYyLDMuODg2LDMuODg2LDAsMCwwLC44MzQsMi43LjkyMS45MjEsMCwwLDAsLjY3NS4yMmMuNiwwLC44NzUtLjUsMS4xNzYtMS4wOTQuMzY4LS43MjYuNy0xLjU3LjctMS41N3MtLjQxNCwyLjI4MS43MTEsMi4yODFjLjQwOSwwLC44MjMtLjUzMiwxLjAwOC0uOHYuMDA1cy4wMS0uMDE1LjAzMS0uMDUxbC4wNjYtLjEwN3YtLjAxYy4xNjQtLjI4Ni41MzItLjkzNiwxLjA3OS0yLjAxNS43MDYtMS4zOTEsMS4zODYtMy4xMywxLjM4Ni0zLjEzYTguODg4LDguODg4LDAsMCwwLC4yNzEsMS4xMywxMC42NDMsMTAuNjQzLDAsMCwwLC41ODMsMS4zMDljLS4xNjQuMjMtLjI2Ni4zNTgtLjI2Ni4zNThsLjAwNS4wMDVjLS4xMzMuMTc0LS4yNzYuMzYzLS40MzUuNTQ3YTE2LjMsMTYuMywwLDAsMC0xLjMxNCwxLjY0Ny40NDcuNDQ3LDAsMCwwLC4xMjMuNiwxLjExNiwxLjExNiwwLDAsMCwuNjg1LjExMywzLjE0NywzLjE0NywwLDAsMCwxLjAyOC0uMjM1LDMuNDUsMy40NSwwLDAsMCwuODg1LS40NjUsMS45OCwxLjk4LDAsMCwwLC44NDktMS43NDQsMy41MjEsMy41MjEsMCwwLDAtLjMyMi0xLjIzM2MuMDUxLS4wNzIuMS0uMTQzLjE0OC0uMjE1YTIzLjQyOCwyMy40MjgsMCwwLDAsMS41MzQtMi42NDksOC44ODgsOC44ODgsMCwwLDAsLjI3MSwxLjEzLDcuNTcsNy41NywwLDAsMCwuNSwxLjEyNUE0Ljg2MSw0Ljg2MSwwLDAsMCwyMC45NjUsMjAuOGMtLjMyMi45MzEtLjA3MiwxLjM1LjQsMS40NDdhMS40MjUsMS40MjUsMCwwLDAsLjc0Ny0uMTUzLDMuNCwzLjQsMCwwLDAsLjk0Ni0uNDg2LDIuMTI2LDIuMTI2LDAsMCwwLDEuMDQzLTEuNzI5LDMuMjY4LDMuMjY4LDAsMCwwLS4yMzUtMS4wMjMsNS4zNTYsNS4zNTYsMCwwLDEsMi43MTYtLjMxMmMyLjQzNC4yODYsMi45MTUsMS44MDUsMi44MjMsMi40NDVhMS42MTgsMS42MTgsMCwwLDEtLjc3MiwxLjA5NGMtLjE2OS4xMDctLjIyNS4xNDMtLjIxLjIyLjAyLjExMy4xLjEwNy4yNDUuMDg3QTEuOSwxLjksMCwwLDAsMzAsMjAuN2MuMDc3LTEuNS0xLjM1NS0zLjE0NS0zLjg4Ny0zLjEzWk03LjMzLDIzLjljLS44MDguODgtMS45MzMsMS4yMTItMi40MTkuOTMxLS41MjItLjMtLjMxNy0xLjYuNjc1LTIuNTMyYTEyLjg4NCwxMi44ODQsMCwwLDEsMS45LTEuNDE3Yy4xMTgtLjA3Mi4yOTItLjE3NC41LS4zbC4wNTYtLjAzMWgwbC4xMjMtLjA3N0EzLjQ5MywzLjQ5MywwLDAsMSw3LjMzLDIzLjlabTUuODgxLTRjLS4yODEuNjg1LS44NjksMi40NC0xLjIyNywyLjM0Mi0uMzA3LS4wODItLjUtMS40MTItLjA2MS0yLjcyNmE2LjE5Myw2LjE5MywwLDAsMSwuOTU2LTEuNzU0Yy40NC0uNDkxLjkyNi0uNjU1LDEuMDQzLS40NTVhOS4wNjIsOS4wNjIsMCwwLDEtLjcxMSwyLjU5M1ptNC44NTMsMi4zMjJjLS4xMTguMDYxLS4yMy4xLS4yODEuMDcyLS4wMzYtLjAyLjA1MS0uMS4wNTEtLjFzLjYwOS0uNjU1Ljg0OS0uOTUxYy4xMzgtLjE3NC4zLS4zNzguNDc2LS42MDlWMjAuN2MwLC43ODItLjc1NywxLjMwOS0xLjA5NCwxLjUyNFptMy43NDQtLjg1NGMtLjA4Ny0uMDYxLS4wNzItLjI2Ni4yMi0uOTA1YTMuNDA4LDMuNDA4LDAsMCwxLC44MzQtMS4wNzQsMS40NDgsMS40NDgsMCwwLDEsLjA4Mi40NzEsMS41NDcsMS41NDcsMCwwLDEtMS4xMzUsMS41MDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojY2Q2Nzk5XFxcIi8+XCIsXG5cdH0sXG5cdFwiU2FzcyAoU0NTUylcIjoge1xuXHRcdGNvbG91cjogXCIjY2Q2Nzk5XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTYuMTcxLDE4LjdjLS40ODEuMjIxLTEuMDA4LjUwOS0yLjA2MywxLjA4OC0uNC4yMjUtLjgxOC40NS0xLjIwNy42NjItLjAyNy0uMDI3LS4wNTUtLjA2MS0uMDgyLS4wODktMi4wODctMi4yMy01Ljk0Ny0zLjgwNS01Ljc4My02LjguMDYxLTEuMDkxLjQzNi0zLjk1NSw3LjQxMy03LjQzMyw1Ljc0Mi0yLjgzLDEwLjMxMS0yLjA0NiwxMS4xLS4zMDdDMjYuNjgzLDguMywyMy4xLDEyLjkxMywxNy4xNywxMy41ODJhNC40NjksNC40NjksMCwwLDEtMy43NTEtLjk0OGMtLjMxNC0uMzQxLS4zNjEtLjM2MS0uNDc3LS4yOTMtLjE5MS4xLS4wNjguNDA5LDAsLjU4NmEzLjUsMy41LDAsMCwwLDIuMTQxLDEuNjg0LDExLjQsMTEuNCwwLDAsMCw2Ljk1Ni0uNjg5YzMuNTk0LTEuMzkxLDYuNC01LjI1OCw1LjU3OC04LjUtLjgyNS0zLjI4Ny02LjI4MS00LjM3MS0xMS40NDMtMi41MzdhMjYsMjYsMCwwLDAtOC43OSw1LjA0N2MtMi44NDQsMi42Ni0zLjI5NCw0Ljk3Mi0zLjExLDUuOTQuNjYyLDMuNDM3LDUuNCw1LjY3NCw3LjMsNy4zMzEtLjEuMDU1LS4xODQuMS0uMjU5LjE0My0uOTQ4LjQ3MS00LjU2MiwyLjM2LTUuNDYzLDQuMzU4LTEuMDIzLDIuMjY0LjE2NCwzLjg4Ny45NDgsNC4xMDVhNS44MzIsNS44MzIsMCwwLDAsNi4yODEtMi41NDQsNi4zLDYuMywwLDAsMCwuNTU5LTUuOCw1LjAzLDUuMDMsMCwwLDEsLjcxNi0uNDc3Yy40ODQtLjI4Ni45NDUtLjU2OCwxLjM1NC0uNzg2bDAsMGExMC40NzUsMTAuNDc1LDAsMCwxLDQuNDc1LS45ODljMy4yNDYuMzgyLDMuODg3LDIuNDA3LDMuNzY0LDMuMjZhMi4xNTcsMi4xNTcsMCwwLDEtMS4wMywxLjQ1OWMtLjIyNS4xNDMtLjMuMTkxLS4yOC4yOTMuMDI3LjE1LjEzNi4xNDMuMzI3LjExNmEyLjUzNSwyLjUzNSwwLDAsMCwxLjc2Ni0yLjI1N2MuMS0yLTEuODA3LTQuMTk0LTUuMTgzLTQuMTc0YTcuNzUzLDcuNzUzLDAsMCwwLTIuOTQ2LjU4N3EtLjIyNS4wOTMtLjQzNy4yWm0tNC44MjUsNy44MzljLTEuMDc4LDEuMTczLTIuNTc4LDEuNjE2LTMuMjI2LDEuMjQxLS43LS40LS40MjMtMi4xMzUuOS0zLjM3NmExNy4xOCwxNy4xOCwwLDAsMSwyLjUzLTEuODg5Yy4xNTctLjEuMzg5LS4yMzIuNjY4LS40LjA0OC0uMDI3LjA3NS0uMDQxLjA3NS0uMDQxbC4xNjQtLjFBNC42NTgsNC42NTgsMCwwLDEsMTEuMzQ2LDI2LjUzOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjZDY3OTlcXFwiLz5cIixcblx0fSxcblx0XCJTY2FsYVwiOiB7XG5cdFx0Y29sb3VyOiBcIiNlNjJkMmFcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIi0xMzQuOTA3XFxcIiB5MT1cXFwiMjA0LjU3MlxcXCIgeDI9XFxcIi0xMzQuODk2XFxcIiB5Mj1cXFwiMjA0LjU3MlxcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxNTM4LCAwLCAwLCAtOTYxLjI1LCAyMDc0OTUsIDE5NjY2MSlcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjBcXFwiIHN0b3AtY29sb3I9XFxcIiNlNjJkMmFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNlxcXCIgc3RvcC1jb2xvcj1cXFwiI2RmM2YzZFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC44XFxcIiBzdG9wLWNvbG9yPVxcXCIjZGYzZjNkXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZTYyZDJhXFxcIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImJcXFwiIHgxPVxcXCItMTM0LjkwN1xcXCIgeTE9XFxcIjIwMy43ODFcXFwiIHgyPVxcXCItMTM0Ljg5NlxcXCIgeTI9XFxcIjIwMy43ODFcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMTUzOCwgMCwgMCwgLTk2MS4yNSwgMjA3NDk1LCAxOTU4OTIpXFxcIiB4bGluazpocmVmPVxcXCIjYVxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiY1xcXCIgeDE9XFxcIi0xMzQuOTA3XFxcIiB5MT1cXFwiMjA1LjM2M1xcXCIgeDI9XFxcIi0xMzQuODk2XFxcIiB5Mj1cXFwiMjA1LjM2M1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcIm1hdHJpeCgxNTM4LCAwLCAwLCAtOTYxLjI1LCAyMDc0OTUsIDE5NzQzMClcXFwiIHhsaW5rOmhyZWY9XFxcIiNhXFxcIi8+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfc2NhbGE8L3RpdGxlPjxwYXRoIGQ9XFxcIk03LjM4NCwxOS4yMzF2Mi4xNTRjMCwuMzYzLDcuODMzLjk3MSwxMi45MzcsMi4xNTQsMi40NjUtLjU3MSw0LjI5NS0xLjI3Nyw0LjI5NS0yLjE1NFYxOS4yMzFjMC0uODc3LTEuODMtMS41ODItNC4yOTUtMi4xNTQtNS4xLDEuMTgzLTEyLjkzNywxLjc5MS0xMi45MzcsMi4xNTRcXFwiIHN0eWxlPVxcXCJmaWxsOiM3ZjBjMWRcXFwiLz48cGF0aCBkPVxcXCJNNy4zODQsMTAuNjE1djIuMTU0YzAsLjM2Myw3LjgzMy45NzEsMTIuOTM3LDIuMTU0LDIuNDY1LS41NzEsNC4yOTUtMS4yNzcsNC4yOTUtMi4xNTRWMTAuNjE1YzAtLjg3Ny0xLjgzLTEuNTgyLTQuMjk1LTIuMTU0LTUuMSwxLjE4My0xMi45MzcsMS43OTEtMTIuOTM3LDIuMTU0XFxcIiBzdHlsZT1cXFwiZmlsbDojN2YwYzFkXFxcIi8+PHBhdGggZD1cXFwiTTcuMzg0LDE0LjkyM3Y2LjQ2MmMwLS41MzgsMTcuMjMyLTEuNjE1LDE3LjIzMi00LjMwOFYxMC42MTVjMCwyLjY5Mi0xNy4yMzIsMy43NjktMTcuMjMyLDQuMzA4XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTcuMzg0LDYuMzA4VjEyLjc3YzAtLjUzOCwxNy4yMzItMS42MTUsMTcuMjMyLTQuMzA4VjJjMCwyLjY5Mi0xNy4yMzIsMy43NjktMTcuMjMyLDQuMzA4XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2IpXFxcIi8+PHBhdGggZD1cXFwiTTcuMzg0LDIzLjUzOFYzMGMwLS41MzgsMTcuMjMyLTEuNjE1LDE3LjIzMi00LjMwOFYxOS4yMzFjMCwyLjY5Mi0xNy4yMzIsMy43NjktMTcuMjMyLDQuMzA4XFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2MpXFxcIi8+XCIsXG5cdH0sXG5cdFwiU2hlbGwgc2Vzc2lvblwiOiB7XG5cdFx0Y29sb3VyOiBcIiNkOWI0MDBcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yOS40LDI3LjZIMi41VjQuNUgyOS40Wm0tMjUuOS0xSDI4LjRWNS41SDMuNVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkOWI0MDBcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjYuMDc3IDE5LjMxNiA1LjUyMiAxOC40ODQgMTAuMzY2IDE1LjI1NSA1LjQ3OSAxMS4xODQgNi4xMiAxMC40MTYgMTIuMDM1IDE1LjM0NCA2LjA3NyAxOS4zMTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNkOWI0MDBcXFwiLz48cmVjdCB4PVxcXCIxMi43XFxcIiB5PVxcXCIxOC4yXFxcIiB3aWR0aD1cXFwiNy44XFxcIiBoZWlnaHQ9XFxcIjFcXFwiIHN0eWxlPVxcXCJmaWxsOiNkOWI0MDBcXFwiLz48cmVjdCB4PVxcXCIyLjVcXFwiIHk9XFxcIjUuNVxcXCIgd2lkdGg9XFxcIjI2LjlcXFwiIGhlaWdodD1cXFwiMS45XFxcIiBzdHlsZT1cXFwiZmlsbDojZDliNDAwXFxcIi8+XCIsXG5cdH0sXG5cdFwiU2hlbGxcIjoge1xuXHRcdGNvbG91cjogXCIjZDliNDAwXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMjkuNCwyNy42SDIuNVY0LjVIMjkuNFptLTI1LjktMUgyOC40VjUuNUgzLjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZDliNDAwXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI2LjA3NyAxOS4zMTYgNS41MjIgMTguNDg0IDEwLjM2NiAxNS4yNTUgNS40NzkgMTEuMTg0IDYuMTIgMTAuNDE2IDEyLjAzNSAxNS4zNDQgNi4wNzcgMTkuMzE2XFxcIiBzdHlsZT1cXFwiZmlsbDojZDliNDAwXFxcIi8+PHJlY3QgeD1cXFwiMTIuN1xcXCIgeT1cXFwiMTguMlxcXCIgd2lkdGg9XFxcIjcuOFxcXCIgaGVpZ2h0PVxcXCIxXFxcIiBzdHlsZT1cXFwiZmlsbDojZDliNDAwXFxcIi8+PHJlY3QgeD1cXFwiMi41XFxcIiB5PVxcXCI1LjVcXFwiIHdpZHRoPVxcXCIyNi45XFxcIiBoZWlnaHQ9XFxcIjEuOVxcXCIgc3R5bGU9XFxcImZpbGw6I2Q5YjQwMFxcXCIvPlwiLFxuXHR9LFxuXHRcIlNtYXJ0eVwiOiB7XG5cdFx0Y29sb3VyOiBcIiNmNmUyMDBcIixcblx0XHRpY29uOiBcIjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYVxcXCIgeDE9XFxcIjEzLjg1OVxcXCIgeTE9XFxcIjI5LjIxOVxcXCIgeDI9XFxcIjE4LjEwNlxcXCIgeTI9XFxcIjI5LjIxOVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMC4wMzRcXFwiIHN0b3AtY29sb3I9XFxcIiM2MzYzNjFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMTc4XFxcIiBzdG9wLWNvbG9yPVxcXCIjNmM2ZDcwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjIxOVxcXCIgc3RvcC1jb2xvcj1cXFwiIzZmNzE3NVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zMDlcXFwiIHN0b3AtY29sb3I9XFxcIiM2MTYzNjZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDgxXFxcIiBzdG9wLWNvbG9yPVxcXCIjM2MzZDNmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjcxNlxcXCIgc3RvcC1jb2xvcj1cXFwiIzAxMDEwMVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43MTlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM2MzZhNmVcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiYlxcXCIgeDE9XFxcIjE1LjE3OFxcXCIgeTE9XFxcIjI5LjczNFxcXCIgeDI9XFxcIjE2Ljc4N1xcXCIgeTI9XFxcIjI5LjczNFxcXCIgeGxpbms6aHJlZj1cXFwiI2FcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImNcXFwiIHgxPVxcXCIxNS4yNzdcXFwiIHkxPVxcXCIyOS44ODFcXFwiIHgyPVxcXCIxNi42ODhcXFwiIHkyPVxcXCIyOS44ODFcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMDM0XFxcIiBzdG9wLWNvbG9yPVxcXCIjOWI5Yjk4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjEzMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2E0YTVhN1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yMTlcXFwiIHN0b3AtY29sb3I9XFxcIiNhZWIxYjhcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzUyXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWZhNGFiXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjYwNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzc4ODE4OFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43MTlcXFwiIHN0b3AtY29sb3I9XFxcIiM2NTcwNzZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM4Yjk0OWFcXFwiLz48L2xpbmVhckdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD1cXFwiZFxcXCIgY3g9XFxcIi04LjQ1NlxcXCIgY3k9XFxcIi0xNi42MTZcXFwiIHI9XFxcIjE5LjM4M1xcXCIgZ3JhZGllbnRUcmFuc2Zvcm09XFxcInRyYW5zbGF0ZSgzNC4wNDIgMzcuMDYzKSBzY2FsZSgxLjA1NClcXFwiIGdyYWRpZW50VW5pdHM9XFxcInVzZXJTcGFjZU9uVXNlXFxcIj48c3RvcCBvZmZzZXQ9XFxcIjAuMDM0XFxcIiBzdG9wLWNvbG9yPVxcXCIjNzA3MDZlXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjExMlxcXCIgc3RvcC1jb2xvcj1cXFwiIzYxNjI2MVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yMTlcXFwiIHN0b3AtY29sb3I9XFxcIiM0NjQ3NGFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDA4XFxcIiBzdG9wLWNvbG9yPVxcXCIjNDg0OTRjXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjQ4N1xcXCIgc3RvcC1jb2xvcj1cXFwiIzRlNTA1M1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41NDRcXFwiIHN0b3AtY29sb3I9XFxcIiM1YTVjNWZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTkyXFxcIiBzdG9wLWNvbG9yPVxcXCIjNmE2ZTcxXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjYzM1xcXCIgc3RvcC1jb2xvcj1cXFwiIzdmODU4OFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42NjdcXFwiIHN0b3AtY29sb3I9XFxcIiM5NzllYTFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNzE5XFxcIiBzdG9wLWNvbG9yPVxcXCIjM2Q0NDQ3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjNjU2YzcwXFxcIi8+PC9yYWRpYWxHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9XFxcImVcXFwiIHgxPVxcXCIxNi4xMjZcXFwiIHkxPVxcXCIyOC4xMDhcXFwiIHgyPVxcXCIxNi4wNVxcXCIgeTI9XFxcIjI2Ljg5M1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMC4wMzRcXFwiIHN0b3AtY29sb3I9XFxcIiM5YjliOThcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMTA5XFxcIiBzdG9wLWNvbG9yPVxcXCIjYTVhNmE3XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjIxOVxcXCIgc3RvcC1jb2xvcj1cXFwiI2JhYmNjNFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4zMTFcXFwiIHN0b3AtY29sb3I9XFxcIiNhYmFlYjVcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNDg3XFxcIiBzdG9wLWNvbG9yPVxcXCIjODQ4OThmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjcxOVxcXCIgc3RvcC1jb2xvcj1cXFwiIzQ4NTA1NFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzhiOTQ5YVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJmXFxcIiB4MT1cXFwiMTYuMDEzXFxcIiB5MT1cXFwiMjYuNTQyXFxcIiB4Mj1cXFwiMTUuODk1XFxcIiB5Mj1cXFwiMjQuNjM1XFxcIiB4bGluazpocmVmPVxcXCIjZVxcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiZ1xcXCIgeDE9XFxcIjE2LjAyM1xcXCIgeTE9XFxcIjI1LjU0NlxcXCIgeDI9XFxcIjE1Ljg4N1xcXCIgeTI9XFxcIjIzLjM1NVxcXCIgeGxpbms6aHJlZj1cXFwiI2VcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImhcXFwiIHgxPVxcXCIxNi4wMTNcXFwiIHkxPVxcXCIyNy42MjdcXFwiIHgyPVxcXCIxNS44OTVcXFwiIHkyPVxcXCIyNS43MlxcXCIgeGxpbms6aHJlZj1cXFwiI2VcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImpcXFwiIHgxPVxcXCIxMy42OFxcXCIgeTE9XFxcIjI4LjgwNVxcXCIgeDI9XFxcIjE4LjI4NFxcXCIgeTI9XFxcIjI4LjgwNVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMC4wMzRcXFwiIHN0b3AtY29sb3I9XFxcIiM1NDU0NTNcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMDcxXFxcIiBzdG9wLWNvbG9yPVxcXCIjNjE2MjYyXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjE0M1xcXCIgc3RvcC1jb2xvcj1cXFwiIzg0ODU4OVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yMTlcXFwiIHN0b3AtY29sb3I9XFxcIiNhZWIxYjhcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzUyXFxcIiBzdG9wLWNvbG9yPVxcXCIjOWZhNGFiXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjYwNVxcXCIgc3RvcC1jb2xvcj1cXFwiIzc4ODE4OFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43MTlcXFwiIHN0b3AtY29sb3I9XFxcIiM2NTcwNzZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiM1MDU2NTlcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwia1xcXCIgeDE9XFxcIjEyLjE1OVxcXCIgeTE9XFxcIjI1LjgxM1xcXCIgeDI9XFxcIjE5LjQ3NVxcXCIgeTI9XFxcIjI1LjgxM1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2U1ZTFkZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2RkZGFkNlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4wMzhcXFwiIHN0b3AtY29sb3I9XFxcIiNjZWNjYzlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMTEyXFxcIiBzdG9wLWNvbG9yPVxcXCIjYTdhOWE4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjIxMlxcXCIgc3RvcC1jb2xvcj1cXFwiIzY5NzA3MlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yNjRcXFwiIHN0b3AtY29sb3I9XFxcIiM0NjUwNTRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzAzXFxcIiBzdG9wLWNvbG9yPVxcXCIjNjM2YzZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjM5OFxcXCIgc3RvcC1jb2xvcj1cXFwiI2E1YWFhY1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC40NzhcXFwiIHN0b3AtY29sb3I9XFxcIiNkNWQ3ZDlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTM5XFxcIiBzdG9wLWNvbG9yPVxcXCIjZjNmNGY1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjU3M1xcXCIgc3RvcC1jb2xvcj1cXFwiI2ZlZmVmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42MlxcXCIgc3RvcC1jb2xvcj1cXFwiI2Y0ZjVmNlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42OTlcXFwiIHN0b3AtY29sb3I9XFxcIiNkYWRjZGZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOFxcXCIgc3RvcC1jb2xvcj1cXFwiI2IwYjRiOVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC44NzZcXFwiIHN0b3AtY29sb3I9XFxcIiM4YjkyOThcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNkMWQzZDRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNhN2E5YWNcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwibFxcXCIgeDE9XFxcIjEyLjE1OVxcXCIgeTE9XFxcIjI0LjcyOFxcXCIgeDI9XFxcIjE5LjQ3NVxcXCIgeTI9XFxcIjI0LjcyOFxcXCIgeGxpbms6aHJlZj1cXFwiI2tcXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcIm1cXFwiIHgxPVxcXCIxMi4xNTlcXFwiIHkxPVxcXCIyMy41NDhcXFwiIHgyPVxcXCIxOS40NzVcXFwiIHkyPVxcXCIyMy41NDhcXFwiIHhsaW5rOmhyZWY9XFxcIiNrXFxcIi8+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJuXFxcIiB4MT1cXFwiMTIuMTU5XFxcIiB5MT1cXFwiMjYuODk4XFxcIiB4Mj1cXFwiMTkuNDc1XFxcIiB5Mj1cXFwiMjYuODk4XFxcIiB4bGluazpocmVmPVxcXCIja1xcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwib1xcXCIgeDE9XFxcIjEyLjE1OVxcXCIgeTE9XFxcIjI1Ljk2N1xcXCIgeDI9XFxcIjE5LjQ3NVxcXCIgeTI9XFxcIjI1Ljk2N1xcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2U1ZTFkZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2RkZThkMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2QyZjNiYVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4wMzZcXFwiIHN0b3AtY29sb3I9XFxcIiNjNWU0YjFcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMTA1XFxcIiBzdG9wLWNvbG9yPVxcXCIjYTRiZDk4XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjE5OVxcXCIgc3RvcC1jb2xvcj1cXFwiIzZlN2Y3MVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC4yNjRcXFwiIHN0b3AtY29sb3I9XFxcIiM0NjUwNTRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuMzAzXFxcIiBzdG9wLWNvbG9yPVxcXCIjNjM2YzZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjM5OFxcXCIgc3RvcC1jb2xvcj1cXFwiI2E1YWFhY1xcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC40NzhcXFwiIHN0b3AtY29sb3I9XFxcIiNkNWQ3ZDlcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTM5XFxcIiBzdG9wLWNvbG9yPVxcXCIjZjNmNGY1XFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjU3M1xcXCIgc3RvcC1jb2xvcj1cXFwiI2ZlZmVmZlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42MlxcXCIgc3RvcC1jb2xvcj1cXFwiI2Y0ZjVmNlxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC42OTlcXFwiIHN0b3AtY29sb3I9XFxcIiNkYWRjZGZcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOFxcXCIgc3RvcC1jb2xvcj1cXFwiI2IwYjRiOVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC44NzZcXFwiIHN0b3AtY29sb3I9XFxcIiM4YjkyOThcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNkMWQzZDRcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjFcXFwiIHN0b3AtY29sb3I9XFxcIiNhN2E5YWNcXFwiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD1cXFwicFxcXCIgeDE9XFxcIjEyLjE1OVxcXCIgeTE9XFxcIjI0Ljg4M1xcXCIgeDI9XFxcIjE5LjQ3NVxcXCIgeTI9XFxcIjI0Ljg4M1xcXCIgeGxpbms6aHJlZj1cXFwiI29cXFwiLz48bGluZWFyR3JhZGllbnQgaWQ9XFxcInFcXFwiIHgxPVxcXCIxMi4xNTlcXFwiIHkxPVxcXCIyNy4wNVxcXCIgeDI9XFxcIjE5LjQ3NVxcXCIgeTI9XFxcIjI3LjA1XFxcIiB4bGluazpocmVmPVxcXCIjb1xcXCIvPjxsaW5lYXJHcmFkaWVudCBpZD1cXFwiclxcXCIgeDE9XFxcIjExLjkwMlxcXCIgeTE9XFxcIjIzLjIwMVxcXCIgeDI9XFxcIjE5Ljg4NFxcXCIgeTI9XFxcIjIzLjIwMVxcXCIgeGxpbms6aHJlZj1cXFwiI2VcXFwiLz48cmFkaWFsR3JhZGllbnQgaWQ9XFxcInNcXFwiIGN4PVxcXCItMTYuOTgzXFxcIiBjeT1cXFwiLTIyLjk0OFxcXCIgcj1cXFwiMTAuNzE4XFxcIiBncmFkaWVudFRyYW5zZm9ybT1cXFwidHJhbnNsYXRlKDM0LjA0MiAzNy4wNjMpIHNjYWxlKDEuMDU0KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZmZmZkMVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC41MDVcXFwiIHN0b3AtY29sb3I9XFxcIiNmZjBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuNTY4XFxcIiBzdG9wLWNvbG9yPVxcXCIjZmRmNzAwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIwLjY2NFxcXCIgc3RvcC1jb2xvcj1cXFwiI2Y2ZTIwMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMC43ODJcXFwiIHN0b3AtY29sb3I9XFxcIiNlYmJmMDBcXFwiLz48c3RvcCBvZmZzZXQ9XFxcIjAuOTA2XFxcIiBzdG9wLWNvbG9yPVxcXCIjZGU5MjAwXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZGE5ODE5XFxcIi8+PC9yYWRpYWxHcmFkaWVudD48L2RlZnM+PHRpdGxlPmZpbGVfdHlwZV9zbWFydHk8L3RpdGxlPjxwYXRoIGQ9XFxcIk0xMy44NTksMjguNzc2YS4yNDIuMjQyLDAsMCwwLC4xMjguMTkxLDEyLDEyLDAsMCwwLDEuMzkyLjYyMiw0LjMsNC4zLDAsMCwwLC41NzguMDcyaC4wNTJhNC4zLDQuMywwLDAsMCwuNTc4LS4wNzIsMTIuMDE0LDEyLjAxNCwwLDAsMCwxLjM5Mi0uNjIyLjI0My4yNDMsMCwwLDAsLjEyOC0uMTkxbC0yLjEzNy4xOTJaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2EpXFxcIi8+PHBhdGggZD1cXFwiTTE2LjAxNCwzMGExLjEyMywxLjEyMywwLDAsMCwuNjg4LS4yNDcuMTc1LjE3NSwwLDAsMCwuMDg1LS4xMjZ2LS4xMDVhMy4yMzUsMy4yMzUsMCwwLDAtLjc3My0uMDUzaC0uMDYzYTMuMjM3LDMuMjM3LDAsMCwwLS43NzMuMDUzdi4xMDVhLjE3NS4xNzUsMCwwLDAsLjA4NS4xMjYsMS4xMjIsMS4xMjIsMCwwLDAsLjY4OC4yNDdaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2IpXFxcIi8+PHBhdGggZD1cXFwiTTE1Ljk1MSwyOS44MDdhNC43MzIsNC43MzIsMCwwLDEtLjY3NC0uMDQ0LDEuMTA1LDEuMTA1LDAsMCwwLC42NzQuMjM3aC4wNjNhMS4xMDYsMS4xMDYsMCwwLDAsLjY3NS0uMjM3LDQuNzMzLDQuNzMzLDAsMCwxLS42NzUuMDQ0WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNjKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS44MDksMjYuODM4YTEsMSwwLDAsMC0uMjM0LjM4OWMtLjAzNi4xODEtLjEuNTg1LTEuMzI2LDEuNDA2bC0uMDI1LjAxN2EuNDM1LjQzNSwwLDAsMS0uMDg2LjAzNyw5Ljk2OCw5Ljk2OCwwLDAsMS0yLjE1NS4yMDksOS45NjgsOS45NjgsMCwwLDEtMi4xNTYtLjIwOS40MzYuNDM2LDAsMCwxLS4wODUtLjAzNmwtLjAyNS0uMDE3YTQuNTc5LDQuNTc5LDAsMCwxLTEuMTItLjk1N2MtLjE2NC0uMjE5LS4zNzMtLjI1Ny0uMzktLjM0NWEyMS4wNTUsMjEuMDU1LDAsMCwwLDMuODU1LjA1NywxMy4wNDksMTMuMDQ5LDAsMCwwLDMuNzYxLS42NTRBLjY5Mi42OTIsMCwwLDEsMTkuODA5LDI2LjgzOFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZClcXFwiLz48cGF0aCBkPVxcXCJNMTkuNzcyLDI2Ljg4YS45ODUuOTg1LDAsMCwxLS4yNDYuMTI5Yy0uMDc2LjAyOC0uMjQ1LjA3OC0uMjQ1LjA3OGEyNS4xNSwyNS4xNSwwLDAsMS02LjQ1OC40MzZjLS4xMzYtLjAwOS0uMzItLjAyOC0uMzItLjAyOGExLjA2MiwxLjA2MiwwLDAsMS0uMTQtLjAyOCwxLjAxNiwxLjAxNiwwLDAsMSwuMTQuMTA3Yy4xNi4wMTMuMzE5LjAxOS4zMTkuMDE5YTI2Ljg2NCwyNi44NjQsMCwwLDAsNi43NDMtLjMyM2wuMDA5LS4wNDJBLjg4NS44ODUsMCwwLDEsMTkuNzcyLDI2Ljg4WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNlKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS40MzksMjUuMzgycy4yNDUtLjA3LjI0NS0uMTYyYS4xMTQuMTE0LDAsMCwwLS4wMTMtLjA2NS4yMTQuMjE0LDAsMCwxLS4wNjEtLjE0NC40MzcuNDM3LDAsMCwxLC4xMTktLjI3LDEuMDY5LDEuMDY5LDAsMCwxLS4yLjFjLS4wNzYuMDI4LS4yNDUuMDc4LS4yNDUuMDc4YTI1LjE1MSwyNS4xNTEsMCwwLDEtNi40NTguNDM2Yy0uMTM2LS4wMDktLjMyLS4wMjgtLjMyLS4wMjhhMS4wNTUsMS4wNTUsMCwwLDEtLjE4MS0uMDQxLjM3Ny4zNzcsMCwwLDEsLjA3OC4yMTcuNzE2LjcxNiwwLDAsMS0uMjU0LjQzMi42NzMuNjczLDAsMCwxLC4zNjgtLjA3OUEyNi4yLDI2LjIsMCwwLDAsMTkuNDM5LDI1LjM4MlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjZilcXFwiLz48cGF0aCBkPVxcXCJNMTkuNDM5LDI0LjIyOXMuMjQ1LS4wNzguMjQ1LS4xODJhLjE0My4xNDMsMCwwLDAtLjAxMy0uMDczLjI1NC4yNTQsMCwwLDEtLjA2MS0uMTYyLjUxNC41MTQsMCwwLDEsLjExOS0uMywxLjAyNiwxLjAyNiwwLDAsMS0uMi4xMTFjLS4wNzYuMDMyLS4yNDUuMDg4LS4yNDUuMDg4YTIyLjUwNywyMi41MDcsMCwwLDEtNi40NTguNDg5Yy0uMTM2LS4wMS0uMzItLjAzMi0uMzItLjAzMmEuOTUzLjk1MywwLDAsMS0uMTgxLS4wNDYuNDU1LjQ1NSwwLDAsMSwuMDc4LjI0My44MjUuODI1LDAsMCwxLS4yNTQuNDg0LjYxNC42MTQsMCwwLDEsLjM2OC0uMDg5QzEzLjAxNCwyNC43NTgsMTYuOTM1LDI1LjA0MSwxOS40MzksMjQuMjI5WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNnKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS40MzksMjYuNDY3cy4yNDUtLjA3LjI0NS0uMTYzYS4xMTUuMTE1LDAsMCwwLS4wMTMtLjA2NS4yMTQuMjE0LDAsMCwxLS4wNjEtLjE0NC40MzUuNDM1LDAsMCwxLC4xMTktLjI3LDEuMDcsMS4wNywwLDAsMS0uMi4xYy0uMDc2LjAyOC0uMjQ1LjA3OC0uMjQ1LjA3OGEyNS4xNjIsMjUuMTYyLDAsMCwxLTYuNDU4LjQzNmMtLjEzNi0uMDA5LS4zMi0uMDI4LS4zMi0uMDI4YTEuMDQyLDEuMDQyLDAsMCwxLS4xODEtLjA0MS4zNzcuMzc3LDAsMCwxLC4wNzguMjE3LjcxNy43MTcsMCwwLDEtLjI1NC40MzIuNjcuNjcsMCwwLDEsLjM2OC0uMDc5QTI2LjIwNywyNi4yMDcsMCwwLDAsMTkuNDM5LDI2LjQ2N1pcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjaClcXFwiLz48cGF0aCBkPVxcXCJNMTkuNDM5LDI2LjQ2N3MuMjQ1LS4wNy4yNDUtLjE2M2EuMTE1LjExNSwwLDAsMC0uMDEzLS4wNjUuMjE0LjIxNCwwLDAsMS0uMDYxLS4xNDQuNDM1LjQzNSwwLDAsMSwuMTE5LS4yNywxLjA3LDEuMDcsMCwwLDEtLjIuMWMtLjA3Ni4wMjgtLjI0NS4wNzgtLjI0NS4wNzhhMjUuMTY4LDI1LjE2OCwwLDAsMS02LjQ1OC40MzZjLS4xMzYtLjAwOS0uMzItLjAyOC0uMzItLjAyOGExLjA0MiwxLjA0MiwwLDAsMS0uMTgxLS4wNDEuMzc2LjM3NiwwLDAsMSwuMDc4LjIxNy43MTcuNzE3LDAsMCwxLS4yNTQuNDMyLjY3LjY3LDAsMCwxLC4zNjgtLjA3OUEyNi4yMDcsMjYuMjA3LDAsMCwwLDE5LjQzOSwyNi40NjdaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2gpXFxcIi8+PHBhdGggZD1cXFwiTTE4LjIyNCwyOC42NWEuNDM1LjQzNSwwLDAsMS0uMDg2LjAzNyw5Ljk2OCw5Ljk2OCwwLDAsMS0yLjE1NS4yMDksOS45NjgsOS45NjgsMCwwLDEtMi4xNTYtLjIwOS40MzYuNDM2LDAsMCwxLS4wODUtLjAzNmwtLjAyNS0uMDE3LS4wMjktLjAxOWEuMTEyLjExMiwwLDAsMCwwLC4wNzNjLjAyNC4wNzMuMTQ3LjEuMTQ3LjFhOS45NDMsOS45NDMsMCwwLDAsMi4xNS4yMDksOS45NDIsOS45NDIsMCwwLDAsMi4xNS0uMjA5cy4xMjYtLjAyOS4xNDctLjFhLjExOC4xMTgsMCwwLDAsMC0uMDczbC0uMDI5LjAxOVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjailcXFwiLz48cGF0aCBkPVxcXCJNMTkuOTQ0LDI1LjVzLjA0MS4yNTItLjQxOC40MjNjLS4wNzYuMDI4LS4yNDUuMDc4LS4yNDUuMDc4YTI1LjE2MiwyNS4xNjIsMCwwLDEtNi40NTguNDM2Yy0uMTM2LS4wMDktLjMyLS4wMjgtLjMyLS4wMjgtLjI3Ni0uMDM4LS40NjctLjE2LS40NTUtLjMwOCwwLDAtLjAzMy0uMjQ5LjQ2Ni0uMjQ5YTI2LjIsMjYuMiwwLDAsMCw2LjkyNS0uNDcycy4yNDUtLjA3LjI0NS0uMTYyYS4xMTEuMTExLDAsMCwwLS4wMTMtLjA2NlMxOS45NDQsMjUuMzEyLDE5Ljk0NCwyNS41WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNrKVxcXCIvPjxwYXRoIGQ9XFxcIk0xOS45NDQsMjQuNDE2cy4wNDEuMjUyLS40MTguNDIzYy0uMDc2LjAyOC0uMjQ1LjA3OC0uMjQ1LjA3OGEyNS4xNTEsMjUuMTUxLDAsMCwxLTYuNDU4LjQzNmMtLjEzNi0uMDA5LS4zMi0uMDI4LS4zMi0uMDI4LS4yNzYtLjAzOC0uNDY3LS4xNi0uNDU1LS4zMDgsMCwwLS4wMzMtLjI0OC40NjYtLjI0OGEyNi4xOTMsMjYuMTkzLDAsMCwwLDYuOTI1LS40NzJzLjI0NS0uMDcuMjQ1LS4xNjJhLjExLjExLDAsMCwwLS4wMTMtLjA2NVMxOS45NDQsMjQuMjI3LDE5Ljk0NCwyNC40MTZaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI2wpXFxcIi8+PHBhdGggZD1cXFwiTTE5Ljg5MywyNC40MDZ2LS4wMjFjLS4wMTIuMDc2LS4wNzguMjM2LS40MTcuMzU1LS4wNzYuMDI2LS4yNDUuMDczLS4yNDUuMDczYTIyLjM3MiwyMi4zNzIsMCwwLDEtNS4xLjVoMGEyMi4xNTUsMjIuMTU1LDAsMCwwLDUuMS0uNDQxcy4xNjktLjA0Ny4yNDUtLjA3M0MxOS45MzMsMjQuNjQzLDE5Ljg5MywyNC40MDYsMTkuODkzLDI0LjQwNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTkuODkzLDI1LjQ5MVYyNS40N2MtLjAxMi4wNzYtLjA3OC4yMzYtLjQxNy4zNTUtLjA3Ni4wMjctLjI0NS4wNzMtLjI0NS4wNzNhMjIuMzgsMjIuMzgsMCwwLDEtNS4xLjVoMGEyMi4xNzEsMjIuMTcxLDAsMCwwLDUuMS0uNDQxcy4xNjktLjA0Ny4yNDUtLjA3M0MxOS45MzMsMjUuNzI4LDE5Ljg5MywyNS40OTEsMTkuODkzLDI1LjQ5MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTkuOTQ0LDIzLjAzNHMuMDQxLjMyOS0uNDE4LjU1MmMtLjA3Ni4wMzctLjI0NS4xLS4yNDUuMWExOS40MDksMTkuNDA5LDAsMCwxLTYuNDU4LjU2OWMtLjEzNi0uMDEyLS4zMi0uMDM3LS4zMi0uMDM3LS4yNzYtLjA1LS40NjctLjIwOS0uNDU1LS40LDAsMC0uMDMzLS4zMjQuNDY2LS4zMjRhMTguMjgzLDE4LjI4MywwLDAsMCw2LjkyNS0uNDYxLDEuMDE0LDEuMDE0LDAsMCwwLC40NDQtLjIzOEEuNTMuNTMsMCwwLDEsMTkuOTQ0LDIzLjAzNFpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjbSlcXFwiLz48cGF0aCBkPVxcXCJNMTkuOTQ0LDI2LjU4NnMuMDQxLjI1Mi0uNDE4LjQyM2MtLjA3Ni4wMjgtLjI0NS4wNzgtLjI0NS4wNzhhMjUuMTUsMjUuMTUsMCwwLDEtNi40NTguNDM2Yy0uMTM2LS4wMDktLjMyLS4wMjgtLjMyLS4wMjgtLjI3Ni0uMDM4LS40NjctLjE2LS40NTUtLjMwOCwwLDAtLjAzMy0uMjQ4LjQ2Ni0uMjQ4YTI2LjIwNywyNi4yMDcsMCwwLDAsNi45MjUtLjQ3MnMuMjQ1LS4wNy4yNDUtLjE2M2EuMTExLjExMSwwLDAsMC0uMDEzLS4wNjVTMTkuOTQ0LDI2LjQsMTkuOTQ0LDI2LjU4NlpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjbilcXFwiLz48cGF0aCBkPVxcXCJNMTkuODkzLDI2LjU3NnYtLjAyMWMtLjAxMi4wNzYtLjA3OC4yMzYtLjQxNy4zNTUtLjA3Ni4wMjYtLjI0NS4wNzMtLjI0NS4wNzNhMjIuMzcyLDIyLjM3MiwwLDAsMS01LjEuNWgwYTIyLjE2MywyMi4xNjMsMCwwLDAsNS4xLS40NDFzLjE2OS0uMDQ3LjI0NS0uMDczQzE5LjkzMywyNi44MTMsMTkuODkzLDI2LjU3NiwxOS44OTMsMjYuNTc2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS44OTMsMjMuMzIxVjIzLjNjLS4wMTIuMDc2LS4wNzguMjM2LS40MTcuMzU1LS4wNzYuMDI3LS4yNDUuMDczLS4yNDUuMDczYTIyLjM3MiwyMi4zNzIsMCwwLDEtNS4xLjVoMGEyMi4xNTYsMjIuMTU2LDAsMCwwLDUuMS0uNDQxcy4xNjktLjA0Ny4yNDUtLjA3M0MxOS45MzMsMjMuNTU4LDE5Ljg5MywyMy4zMjEsMTkuODkzLDIzLjMyMVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTIuNDE3LDI1Ljg4MXMtLjIzNiwwLS4yNDEuMDguMjQ2LjA4NS4yNDYuMDg1LjE3NSwwLC4zLjAwNWMuNjE5LS4wMTMsMS45OTMtLjAzOCwzLjQzNy0uMTY2QzE0LjM4NCwyNS45NTgsMTIuNzIzLDI1Ljg4MywxMi40MTcsMjUuODgxWlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNvKVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi40MTcsMjQuOHMtLjIzNiwwLS4yNDEuMDguMjQ2LjA4NS4yNDYuMDg1LjE3NSwwLC4zLjAwNWMuNjE5LS4wMTIsMS45OTMtLjAzOCwzLjQzNy0uMTY2QzE0LjM4NCwyNC44NzQsMTIuNzIzLDI0LjgsMTIuNDE3LDI0LjhaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI3ApXFxcIi8+PHBhdGggZD1cXFwiTTEyLjQxNywyNi45NjVzLS4yMzYsMC0uMjQxLjA4LjI0Ni4wODUuMjQ2LjA4NS4xNzUsMCwuMy4wMDVjLjYxOS0uMDEyLDEuOTkzLS4wMzgsMy40MzctLjE2NkMxNC4zODQsMjcuMDQyLDEyLjcyMywyNi45NjYsMTIuNDE3LDI2Ljk2NVpcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjcSlcXFwiLz48cGF0aCBkPVxcXCJNMTEuOTY1LDIyLjc3OXMtLjI3NC4zMTUuMzE5LjcxMWMwLDAsNS43NzUuNTg3LDcuNi0uNjk1QzE5Ljg4NCwyMi43OTUsMTMuNjIzLDIzLjMyLDExLjk2NSwyMi43NzlaXFxcIiBzdHlsZT1cXFwiZmlsbDp1cmwoI3IpXFxcIi8+PHBhdGggZD1cXFwiTTIwLjAzNSwyMi43NzlhNC40NDksNC40NDksMCwwLDAsLjgxLTEuMTU1LDMuMzg2LDMuMzg2LDAsMCwwLC4yLTEuMTE1LDYuNzMzLDYuNzMzLDAsMCwxLC42MzItMi45MWMuNTM0LTEuMDE0LDIuODEtNC40NDcsMi44MS03LjQ2MkE4LjAxMiw4LjAxMiwwLDAsMCwxNiwyYTguMDEyLDguMDEyLDAsMCwwLTguNDgzLDguMTM2YzAsMy4wMTUsMi4yNzYsNi40NDgsMi44MSw3LjQ2MmE2LjczMSw2LjczMSwwLDAsMSwuNjMyLDIuOTEsMy4zODQsMy4zODQsMCwwLDAsLjIsMS4xMTUsNC40NTMsNC40NTMsMCwwLDAsLjgxLDEuMTU1LDEzLjg2NiwxMy44NjYsMCwwLDAsMy45ODcuMzdBMTUuMTUxLDE1LjE1MSwwLDAsMCwyMC4wMzUsMjIuNzc5WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNzKVxcXCIvPlwiLFxuXHR9LFxuXHRcIlNvbGlkaXR5IChFdGhlcmV1bSlcIjoge1xuXHRcdGNvbG91cjogXCIjYzFjMWMxXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMjAuNDc3LDJsLTQuNSw4aC05bDQuNS04aDlcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMWMxYzE7b3BhY2l0eTowLjQ1O2lzb2xhdGlvbjppc29sYXRlXFxcIi8+PHBhdGggZD1cXFwiTTExLjUyLDMwbDQuNS04aDlsLTQuNSw4aC05XFxcIiBzdHlsZT1cXFwiZmlsbDojYzFjMWMxO29wYWNpdHk6MC40NTtpc29sYXRpb246aXNvbGF0ZVxcXCIvPjxwYXRoIGQ9XFxcIk0xNS45NzUsMTBoOWwtNC41LThoLTlaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzFjMWMxO29wYWNpdHk6MC42O2lzb2xhdGlvbjppc29sYXRlXFxcIi8+PHBhdGggZD1cXFwiTTE2LjAyMiwyMmgtOWw0LjUsOGg5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2MxYzFjMTtvcGFjaXR5OjAuNjtpc29sYXRpb246aXNvbGF0ZVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS40NzcsMThsNC41LTgtNC41LTgtNC41LDhaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzFjMWMxO29wYWNpdHk6MC44O2lzb2xhdGlvbjppc29sYXRlXFxcIi8+PHBhdGggZD1cXFwiTTIwLjUyLDE0bC00LjUsOCw0LjUsOCw0LjUtOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMWMxYzE7b3BhY2l0eTowLjg7aXNvbGF0aW9uOmlzb2xhdGVcXFwiLz5cIixcblx0fSxcblx0XCJTb2x1dGlvbiBmaWxlXCI6IHtcblx0XHRjb2xvdXI6IFwiIzg1NGNjN1wiLFxuXHRcdGljb246IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiMTZcXFwiIHkxPVxcXCItMTgyLjA3MlxcXCIgeDI9XFxcIjE2XFxcIiB5Mj1cXFwiLTIwOS45MjhcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMSwgMCwgMCwgLTEsIDAsIC0xODApXFxcIiBncmFkaWVudFVuaXRzPVxcXCJ1c2VyU3BhY2VPblVzZVxcXCI+PHN0b3Agb2Zmc2V0PVxcXCIwXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIi8+PHN0b3Agb2Zmc2V0PVxcXCIxXFxcIiBzdG9wLWNvbG9yPVxcXCIjZmZmXFxcIiBzdG9wLW9wYWNpdHk9XFxcIjBcXFwiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3NsbjwvdGl0bGU+PHBhdGggZD1cXFwiTTYuMDQ1LDIzLjk5MWExLjE2NiwxLjE2NiwwLDAsMS0xLjIwOC4xOTFMMi43MTgsMjMuM0ExLjE2OCwxLjE2OCwwLDAsMSwyLDIyLjIyMlY5Ljc3OEExLjE2NSwxLjE2NSwwLDAsMSwyLjcxOCw4LjdsMi4xMTktLjg4M2ExLjE2OSwxLjE2OSwwLDAsMSwxLjIwOC4xOTFsLjQ3Ni40MDhBLjY0Ni42NDYsMCwwLDAsNS41LDguOTQyVjIzLjA1OGEuNjQ2LjY0NiwwLDAsMCwxLjAyMS41MjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojNTIyMThhXFxcIi8+PHBhdGggZD1cXFwiTTIuNzE4LDIzLjNBMS4xNjksMS4xNjksMCwwLDEsMiwyMi4yMjJ2LS4xYS42NzQuNjc0LDAsMCwwLDEuMTc0LjQ1MkwyMS4yNSwyLjU4M2ExLjc0MywxLjc0MywwLDAsMSwxLjk5LS4zMzhsNS43NjksMi43NzhBMS43NDksMS43NDksMCwwLDEsMzAsNi42di4wNjdhMS4xLDEuMSwwLDAsMC0xLjgtLjg1NEw2LjUyMSwyMy41ODNsLS40NzYuNDA4YTEuMTY2LDEuMTY2LDAsMCwxLTEuMjA4LjE5MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiM2YzMzYWZcXFwiLz48cGF0aCBkPVxcXCJNMi43MTgsOC43QTEuMTY4LDEuMTY4LDAsMCwwLDIsOS43Nzh2LjFhLjY3NC42NzQsMCwwLDEsMS4xNzQtLjQ1MkwyMS4yNSwyOS40MTZhMS43NDMsMS43NDMsMCwwLDAsMS45OS4zMzhsNS43NjktMi43NzhBMS43NDcsMS43NDcsMCwwLDAsMzAsMjUuNHYtLjA2OGExLjEsMS4xLDAsMCwxLTEuOC44NTVMNi41MjEsOC40MTdsLS40NzYtLjQwOGExLjE2NiwxLjE2NiwwLDAsMC0xLjIwOC0uMTkxWlxcXCIgc3R5bGU9XFxcImZpbGw6Izg1NGNjN1xcXCIvPjxwYXRoIGQ9XFxcIk0yMy4yNCwyOS43NTVhMS43NDMsMS43NDMsMCwwLDEtMS45OS0uMzM4QTEuMDI1LDEuMDI1LDAsMCwwLDIzLDI4LjY5MlYzLjMwOGExLjAyNSwxLjAyNSwwLDAsMC0xLjc1LS43MjUsMS43NDMsMS43NDMsMCwwLDEsMS45OS0uMzM4bDUuNzY4LDIuNzc0QTEuNzQ5LDEuNzQ5LDAsMCwxLDMwLDYuNlYyNS40MDVhMS43NTEsMS43NTEsMCwwLDEtLjk5MSwxLjU3N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNiMTc5ZjFcXFwiLz48ZyBzdHlsZT1cXFwib3BhY2l0eTowLjI1XFxcIj48cGF0aCBkPVxcXCJNMjIuMDkzLDI5Ljg4M2ExLjc0LDEuNzQsMCwwLDAsMS4xNDctLjEyOGw1Ljc2OC0yLjc3NEExLjc0OSwxLjc0OSwwLDAsMCwzMCwyNS40VjYuNmExLjc1LDEuNzUsMCwwLDAtLjk5Mi0xLjU3N0wyMy4yNCwyLjI0NWExLjc0MiwxLjc0MiwwLDAsMC0xLjk5LjMzOWwtOS4zLDEwLjI4NEw2LjUyMSw4LjQxNmwtLjQ3Ni0uNDA4YTEuMTY4LDEuMTY4LDAsMCwwLTEuMjA3LS4xOTFMMi43MTksOC43QTEuMTY3LDEuMTY3LDAsMCwwLDIsOS42ODljMCwuMDI5LDAsLjA1OSwwLC4wODhWMjIuMjIxYzAsLjAzLDAsLjA1OSwwLC4wODhhMS4xNjcsMS4xNjcsMCwwLDAsLjcxNS45ODlsMi4xMTkuODgzYTEuMjI2LDEuMjI2LDAsMCwwLC4xNTUuMDUyLDEuMTY1LDEuMTY1LDAsMCwwLDEuMDUyLS4yNDNsLjQ3Ni0uNDA4LDUuNDMtNC40NTIsOS4zLDEwLjI4NUExLjczMywxLjczMywwLDAsMCwyMi4wOTMsMjkuODgzWk0yMywxMC4wNzIsMTUuNzcsMTYsMjMsMjEuOTI3Wk01LjUsMTJsMy42MTksNEw1LjUsMjBaXFxcIiBzdHlsZT1cXFwiZmlsbC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI2EpXFxcIi8+PC9nPlwiLFxuXHR9LFxuXHRcIlNQQVJRTFwiOiB7XG5cdFx0Y29sb3VyOiBcIiMwYzQ3OWNcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yNi4yODQsMjAuMzYxYy0uMTY1LS4wODQtLjM1OS0uMTY0LS41MjMtLjI0OEgyNS45cy0xLjE1OC0uNS0xLjI0LTQuMTc2Yy0uMTExLTMuNjU1LDEuMS00LjI4OSwxLjEtNC4yODlhNC45Niw0Ljk2LDAsMCwwLDIuMTc2LTIuMTQzLDUuMTIyLDUuMTIyLDAsMCwwLTIuMTIyLTYuOTI3LDUuMzQyLDUuMzQyLDAsMCwwLTcuMTM4LDIuMTQ2LDUuMDY3LDUuMDY3LDAsMCwwLS41MjMsMy4yMTRMMTguMSw3Ljg1NXMuMywxLjMxOS0yLjgzOSwzLjI3MmMtMy4xMTUsMS45NS00LjU0OS45NjItNC41NDkuOTYybC4wODIuMTM4YTIuMTMxLDIuMTMxLDAsMCwwLS4yNzMtLjE2Nyw1LjExNyw1LjExNywwLDEsMCwuODI1LDguNTJsLS4wMjUuMDU1czEuMTI5LS45MzMsNC40MDcuODI3YzIuNTkyLDEuMzc0LDIuOTc5LDIuNzQ4LDMuMDMzLDMuMjRhNS4xLDUuMSwwLDAsMCwyLjcsNC43LDUuMTI0LDUuMTI0LDAsMSwwLDQuODI1LTkuMDQxWm0tNS43OS42ODVjLS40MTIuMTM4LTEuNi4zLTQuMDc3LTEuMDE3LTIuNy0xLjQ1NC0zLjExNS0yLjY2NC0zLjE2OS0zLjAyMWE1LjQwNiw1LjQwNiwwLDAsMC0uMDU3LTEuMzE5bC4wMjkuMDI2UzEzLDE0LjUzNCwxNi4wODQsMTIuNjM5YzIuNzU3LTEuNzA1LDQuMDI2LTEuMzc0LDQuMjQ1LTEuMjkzYTIuODMsMi44MywwLDAsMCwuNDcuMjc3LDQuMDgyLDQuMDgyLDAsMCwwLC45NjQuMzgzYy4zODcuMzU3LDEuMDc2LDEuMzc0LDEuMTU4LDQuMXMtLjcxNywzLjc2NC0xLjE1OCw0LjEyMUE1LjA0LDUuMDQsMCwwLDAsMjAuNDk0LDIxLjA0N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMwYzQ3OWNcXFwiLz48cGF0aCBkPVxcXCJNMjAuMTM1LDQuMjI5YTMuODYxLDMuODYxLDAsMCwwLS4wODIsNS4zODZjLS43MTctLjY4NS0uNjg4LTIuMTE3LjAyOS0zLjQ2MmEuNjczLjY3MywwLDAsMSwuNzQ2LS4yNzdjLjAyNSwwLC4wNTQuMDI5LjA4Mi4wMjlhLjk5My45OTMsMCwwLDAsLjI3Ni4wMjZBMS4wNTYsMS4wNTYsMCwwLDAsMjIuMiw0LjgwNWEuOTM0LjkzNCwwLDAsMC0uMy0uNjg1YzEuMzgtLjkwNywyLjk1LTEuMDE3LDMuNjEtLjQxMmguMDI5QTMuODI2LDMuODI2LDAsMCwwLDIwLjEzNSw0LjIyOVpNNS4xNDUsMTMuODQ2YTMuODU5LDMuODU5LDAsMCwwLS4wODIsNS4zODljLS43MTctLjY4OS0uNjkyLTIuMTE3LjAyNS0zLjQ2NWEuNjY4LjY2OCwwLDAsMSwuNzQ2LS4yNzNjLjAyNSwwLC4wNTQuMDI5LjA4Mi4wMjlhMSwxLDAsMCwwLC4yNzYuMDI2QTEuMDU2LDEuMDU2LDAsMCwwLDcuMjEsMTQuNDI1YS45NDUuOTQ1LDAsMCwwLS4zLS42ODljMS4zNzctLjkwNywyLjk0Ny0xLjAxNywzLjYxLS40MTJoLjAyNUEzLjg1MiwzLjg1MiwwLDAsMCw1LjE0NSwxMy44NDZabTE1Ljg3Miw4LjE2M2EzLjg2NSwzLjg2NSwwLDAsMC0uMDgyLDUuMzg5Yy0uNzE3LS42ODktLjY4OC0yLjExNy4wMjktMy40NjVhLjY2OC42NjgsMCwwLDEsLjc0Ni0uMjczYy4wMjUsMCwuMDU0LjAyNi4wODIuMDI2YS44ODcuODg3LDAsMCwwLC4yNzYuMDI5LDEuMDU3LDEuMDU3LDAsMCwwLDEuMDE4LTEuMTI2LjkzNi45MzYsMCwwLDAtLjMtLjY4OWMxLjM4LS45MDcsMi45NS0xLjAxNywzLjYxLS40MTJoLjAyOUEzLjgyOSwzLjgyOSwwLDAsMCwyMS4wMTcsMjIuMDA5WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHR9LFxuXHRcIlNRRlwiOiB7XG5cdFx0Y29sb3VyOiBcIiNjMmMyYzJcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yNSwyMy41SDdhNS4wMTUsNS4wMTUsMCwwLDEtNS01di02YTUuMDE1LDUuMDE1LDAsMCwxLDUtNUgyNWE1LjAxNSw1LjAxNSwwLDAsMSw1LDV2NmE1LjAxNSw1LjAxNSwwLDAsMS01LDVaXFxcIi8+PHBhdGggZD1cXFwiTTcsMTkuNDYxYTQuODEsNC44MSwwLDAsMS0xLjQxNC0uMiw1LjA1Miw1LjA1MiwwLDAsMS0xLjExMS0uNDcybC0uNC40MzJoLS41TDMuNSwxNi4wNTJINGE4LjQ2Miw4LjQ2MiwwLDAsMCwuNDMxLjk1Myw0LjYzOCw0LjYzOCwwLDAsMCwuNjA2LjksMy4xNzcsMy4xNzcsMCwwLDAsLjguNjc1LDEuOTg1LDEuOTg1LDAsMCwwLDEuMDI5LjI2LDEuNjcyLDEuNjcyLDAsMCwwLDEuMjE2LS40MTFBMS4zODIsMS4zODIsMCwwLDAsOC41LDE3LjM5MWExLjE1NiwxLjE1NiwwLDAsMC0uMzU5LS44NjIsMi45NDUsMi45NDUsMCwwLDAtMS4xMTEtLjZxLS40OS0uMTY3LS45LS4zMXQtLjc3My0uMjkyYTIuNTgsMi41OCwwLDAsMS0xLjIzOS0xLjAwNywyLjczLDIuNzMsMCwwLDEtLjQwNS0xLjQ2NSwyLjQwNiwyLjQwNiwwLDAsMSwuMjEtLjk4NiwyLjYwOCwyLjYwOCwwLDAsMSwuNjEyLS44NSwyLjk2NywyLjk2NywwLDAsMSwuOTg1LS41NzUsMy43MjIsMy43MjIsMCwwLDEsMS4zMDYtLjIyMywzLjk4NCwzLjk4NCwwLDAsMSwxLjI4OC4yLDUuMTUxLDUuMTUxLDAsMCwxLC45NDQuNDA4bC4zNTYtLjM3aC41MDdsLjA0NywyLjk4OGgtLjVxLS4xNzUtLjQ4My0uNDExLS45ODdhNC4zMzIsNC4zMzIsMCwwLDAtLjUtLjgzOSwyLjMsMi4zLDAsMCwwLS42NTktLjU3MywxLjcyOSwxLjcyOSwwLDAsMC0uODc1LS4yMTRBMS40MzcsMS40MzcsMCwwLDAsNiwxMS4yMTJhMS4yMzMsMS4yMzMsMCwwLDAtLjQuOTM0LDEuMTQxLDEuMTQxLDAsMCwwLC4zNDcuODYsMi45NTEsMi45NTEsMCwwLDAsMS4wODIuNTg4cS40MzEuMTU0Ljg4LjMwOXQuOC4zYTIuODg1LDIuODg1LDAsMCwxLDEuMjg2Ljk1NSwyLjUxMiwyLjUxMiwwLDAsMSwuNDQsMS41MTIsMi42MzIsMi42MzIsMCwwLDEtLjkyNywxLjk4NSwzLjM2NywzLjM2NywwLDAsMS0xLjA3OS42QTQuMzkxLDQuMzkxLDAsMCwxLDcsMTkuNDYxWlxcXCIgc3R5bGU9XFxcImZpbGw6I2MyYzJjMlxcXCIvPjxwYXRoIGQ9XFxcIk0xOC45MjEsMTEuNDM0YTQuMzM4LDQuMzM4LDAsMCwxLC45NzEsMS40MzIsNC44MzQsNC44MzQsMCwwLDEsLjM1OSwxLjkxNCw0Ljk1OCw0Ljk1OCwwLDAsMS0uNzIsMi42OCw0LjAzNiw0LjAzNiwwLDAsMS0yLjAzOCwxLjY2MSwyLjE1MSwyLjE1MSwwLDAsMCwuNDIsMS4yNzIsMS4xNjgsMS4xNjgsMCwwLDAsLjk1LjUzNywzLjU2MywzLjU2MywwLDAsMCwuNTkyLS4wNDNxLjI1NC0uMDQzLjQ1OC0uMXYuNTQzYTUuNzUzLDUuNzUzLDAsMCwxLS45ODUuMyw2LjA1NCw2LjA1NCwwLDAsMS0xLjM3LjE1MSwyLjIwNiwyLjIwNiwwLDAsMS0xLjYxMi0uNjIxLDIuNTc0LDIuNTc0LDAsMCwxLS43MDgtMS43MzJBNC41NzksNC41NzksMCwwLDEsMTMuNywxOWE0LjE4Niw0LjE4NiwwLDAsMS0xLjI1My0uOTMyLDQuMzg4LDQuMzg4LDAsMCwxLS44NDItMS4zNzcsNC43NjksNC43NjksMCwwLDEtLjMxMi0xLjc1Myw1LjIzNyw1LjIzNywwLDAsMSwuMzQ3LTEuOTQ4LDQuNSw0LjUsMCwwLDEsLjk1My0xLjUsNC4xMTksNC4xMTksMCwwLDEsMS40MjUtLjk0Miw0Ljg2LDQuODYsMCwwLDEsMy41LS4wMDlBNC4yNDcsNC4yNDcsMCwwLDEsMTguOTIxLDExLjQzNFptLTEuNSw2LjI2NmE0Ljg1Nyw0Ljg1NywwLDAsMCwuMzc5LTEuMjczLDkuOTgxLDkuOTgxLDAsMCwwLC4xMTctMS42MDYsMTAuNTM0LDEwLjUzNCwwLDAsMC0uMS0xLjQ4LDQuOTM2LDQuOTM2LDAsMCwwLS4zNDctMS4yODIsMi40MSwyLjQxLDAsMCwwLS42NjUtLjksMS41NzEsMS41NzEsMCwwLDAtMS4wMzItLjM0LDEuNzMsMS43MywwLDAsMC0xLjYsMS4wNiw2LjYzNCw2LjYzNCwwLDAsMC0uNTQ4LDIuOTkzLDkuNTgzLDkuNTgzLDAsMCwwLC4xMiwxLjU1MSw0LjgsNC44LDAsMCwwLC4zNzYsMS4yNzMsMi4yODYsMi4yODYsMCwwLDAsLjY2NS44NTYsMS41OTEsMS41OTEsMCwwLDAsLjk5MS4zMDYsMS42MTEsMS42MTEsMCwwLDAsLjk5MS0uMzA5QTIuMTM1LDIuMTM1LDAsMCwwLDE3LjQyMywxNy43WlxcXCIgc3R5bGU9XFxcImZpbGw6I2MyYzJjMlxcXCIvPjxwYXRoIGQ9XFxcIk0yOC41LDEyLjhoLS40NTVhMy45MywzLjkzLDAsMCwwLS42LTEuMDg2LDEuMzg1LDEuMzg1LDAsMCwwLS44MTItLjYzYy0uMTE2LS4wMTYtLjI3Mi0uMDMxLS40NjUtLjA0M3MtLjM3My0uMDE5LS41MzUtLjAxOUgyNC4zNDl2My40MzNoLjgyMmExLjk2OSwxLjk2OSwwLDAsMCwuNjA2LS4wODMsMS4wNTQsMS4wNTQsMCwwLDAsLjQ1NS0uMywxLjU5MSwxLjU5MSwwLDAsMCwuMjgzLS41MTYsMi42MzUsMi42MzUsMCwwLDAsLjE2Ni0uNjIxaC40NDN2My42ODZoLS40NDNhMi40NzEsMi40NzEsMCwwLDAtLjE4MS0uNjc2LDIuMDk0LDIuMDk0LDAsMCwwLS4yNjgtLjUyOCwxLjAxMiwxLjAxMiwwLDAsMC0uNDMxLS4yOTMsMS44NDIsMS44NDIsMCwwLDAtLjYzLS4xaC0uODIydjIuOWEuODQyLjg0MiwwLDAsMCwuMDc5LjM4LjU4LjU4LDAsMCwwLC4zLjI1NiwxLjg3LDEuODcsMCwwLDAsLjM1My4xcS4yMjQuMDQ2LjQ0Ni4wNzF2LjQ4MmgtNC40NnYtLjQ4MmwuNDQ5LS4wNTJhMS41MjUsMS41MjUsMCwwLDAsLjM5MS0uMDgzLjU0Ny41NDcsMCwwLDAsLjI5Mi0uMjQxLjg0Mi44NDIsMCwwLDAsLjA4Mi0uNHYtNi4xOGEuODY3Ljg2NywwLDAsMC0uMDczLS4zNjcuNTc1LjU3NSwwLDAsMC0uMy0uMjYyLDIuMzQxLDIuMzQxLDAsMCwwLS40MzEtLjEzNnEtLjI2OC0uMDYyLS40MDgtLjA4di0uNDgySDI4LjVaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+XCIsXG5cdH0sXG5cdFwiU1FGOiBTdGF0dXMgUXVvIEZ1bmN0aW9uIChBcm1hIDMpXCI6IHtcblx0XHRjb2xvdXI6IFwiI2MyYzJjMlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTI1LDIzLjVIN2E1LjAxNSw1LjAxNSwwLDAsMS01LTV2LTZhNS4wMTUsNS4wMTUsMCwwLDEsNS01SDI1YTUuMDE1LDUuMDE1LDAsMCwxLDUsNXY2YTUuMDE1LDUuMDE1LDAsMCwxLTUsNVpcXFwiLz48cGF0aCBkPVxcXCJNNywxOS40NjFhNC44MSw0LjgxLDAsMCwxLTEuNDE0LS4yLDUuMDUyLDUuMDUyLDAsMCwxLTEuMTExLS40NzJsLS40LjQzMmgtLjVMMy41LDE2LjA1Mkg0YTguNDYyLDguNDYyLDAsMCwwLC40MzEuOTUzLDQuNjM4LDQuNjM4LDAsMCwwLC42MDYuOSwzLjE3NywzLjE3NywwLDAsMCwuOC42NzUsMS45ODUsMS45ODUsMCwwLDAsMS4wMjkuMjYsMS42NzIsMS42NzIsMCwwLDAsMS4yMTYtLjQxMUExLjM4MiwxLjM4MiwwLDAsMCw4LjUsMTcuMzkxYTEuMTU2LDEuMTU2LDAsMCwwLS4zNTktLjg2MiwyLjk0NSwyLjk0NSwwLDAsMC0xLjExMS0uNnEtLjQ5LS4xNjctLjktLjMxdC0uNzczLS4yOTJhMi41OCwyLjU4LDAsMCwxLTEuMjM5LTEuMDA3LDIuNzMsMi43MywwLDAsMS0uNDA1LTEuNDY1LDIuNDA2LDIuNDA2LDAsMCwxLC4yMS0uOTg2LDIuNjA4LDIuNjA4LDAsMCwxLC42MTItLjg1LDIuOTY3LDIuOTY3LDAsMCwxLC45ODUtLjU3NSwzLjcyMiwzLjcyMiwwLDAsMSwxLjMwNi0uMjIzLDMuOTg0LDMuOTg0LDAsMCwxLDEuMjg4LjIsNS4xNTEsNS4xNTEsMCwwLDEsLjk0NC40MDhsLjM1Ni0uMzdoLjUwN2wuMDQ3LDIuOTg4aC0uNXEtLjE3NS0uNDgzLS40MTEtLjk4N2E0LjMzMiw0LjMzMiwwLDAsMC0uNS0uODM5LDIuMywyLjMsMCwwLDAtLjY1OS0uNTczLDEuNzI5LDEuNzI5LDAsMCwwLS44NzUtLjIxNEExLjQzNywxLjQzNywwLDAsMCw2LDExLjIxMmExLjIzMywxLjIzMywwLDAsMC0uNC45MzQsMS4xNDEsMS4xNDEsMCwwLDAsLjM0Ny44NiwyLjk1MSwyLjk1MSwwLDAsMCwxLjA4Mi41ODhxLjQzMS4xNTQuODguMzA5dC44LjNhMi44ODUsMi44ODUsMCwwLDEsMS4yODYuOTU1LDIuNTEyLDIuNTEyLDAsMCwxLC40NCwxLjUxMiwyLjYzMiwyLjYzMiwwLDAsMS0uOTI3LDEuOTg1LDMuMzY3LDMuMzY3LDAsMCwxLTEuMDc5LjZBNC4zOTEsNC4zOTEsMCwwLDEsNywxOS40NjFaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+PHBhdGggZD1cXFwiTTE4LjkyMSwxMS40MzRhNC4zMzgsNC4zMzgsMCwwLDEsLjk3MSwxLjQzMiw0LjgzNCw0LjgzNCwwLDAsMSwuMzU5LDEuOTE0LDQuOTU4LDQuOTU4LDAsMCwxLS43MiwyLjY4LDQuMDM2LDQuMDM2LDAsMCwxLTIuMDM4LDEuNjYxLDIuMTUxLDIuMTUxLDAsMCwwLC40MiwxLjI3MiwxLjE2OCwxLjE2OCwwLDAsMCwuOTUuNTM3LDMuNTYzLDMuNTYzLDAsMCwwLC41OTItLjA0M3EuMjU0LS4wNDMuNDU4LS4xdi41NDNhNS43NTMsNS43NTMsMCwwLDEtLjk4NS4zLDYuMDU0LDYuMDU0LDAsMCwxLTEuMzcuMTUxLDIuMjA2LDIuMjA2LDAsMCwxLTEuNjEyLS42MjEsMi41NzQsMi41NzQsMCwwLDEtLjcwOC0xLjczMkE0LjU3OSw0LjU3OSwwLDAsMSwxMy43LDE5YTQuMTg2LDQuMTg2LDAsMCwxLTEuMjUzLS45MzIsNC4zODgsNC4zODgsMCwwLDEtLjg0Mi0xLjM3Nyw0Ljc2OSw0Ljc2OSwwLDAsMS0uMzEyLTEuNzUzLDUuMjM3LDUuMjM3LDAsMCwxLC4zNDctMS45NDgsNC41LDQuNSwwLDAsMSwuOTUzLTEuNSw0LjExOSw0LjExOSwwLDAsMSwxLjQyNS0uOTQyLDQuODYsNC44NiwwLDAsMSwzLjUtLjAwOUE0LjI0Nyw0LjI0NywwLDAsMSwxOC45MjEsMTEuNDM0Wm0tMS41LDYuMjY2YTQuODU3LDQuODU3LDAsMCwwLC4zNzktMS4yNzMsOS45ODEsOS45ODEsMCwwLDAsLjExNy0xLjYwNiwxMC41MzQsMTAuNTM0LDAsMCwwLS4xLTEuNDgsNC45MzYsNC45MzYsMCwwLDAtLjM0Ny0xLjI4MiwyLjQxLDIuNDEsMCwwLDAtLjY2NS0uOSwxLjU3MSwxLjU3MSwwLDAsMC0xLjAzMi0uMzQsMS43MywxLjczLDAsMCwwLTEuNiwxLjA2LDYuNjM0LDYuNjM0LDAsMCwwLS41NDgsMi45OTMsOS41ODMsOS41ODMsMCwwLDAsLjEyLDEuNTUxLDQuOCw0LjgsMCwwLDAsLjM3NiwxLjI3MywyLjI4NiwyLjI4NiwwLDAsMCwuNjY1Ljg1NiwxLjU5MSwxLjU5MSwwLDAsMCwuOTkxLjMwNiwxLjYxMSwxLjYxMSwwLDAsMCwuOTkxLS4zMDlBMi4xMzUsMi4xMzUsMCwwLDAsMTcuNDIzLDE3LjdaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+PHBhdGggZD1cXFwiTTI4LjUsMTIuOGgtLjQ1NWEzLjkzLDMuOTMsMCwwLDAtLjYtMS4wODYsMS4zODUsMS4zODUsMCwwLDAtLjgxMi0uNjNjLS4xMTYtLjAxNi0uMjcyLS4wMzEtLjQ2NS0uMDQzcy0uMzczLS4wMTktLjUzNS0uMDE5SDI0LjM0OXYzLjQzM2guODIyYTEuOTY5LDEuOTY5LDAsMCwwLC42MDYtLjA4MywxLjA1NCwxLjA1NCwwLDAsMCwuNDU1LS4zLDEuNTkxLDEuNTkxLDAsMCwwLC4yODMtLjUxNiwyLjYzNSwyLjYzNSwwLDAsMCwuMTY2LS42MjFoLjQ0M3YzLjY4NmgtLjQ0M2EyLjQ3MSwyLjQ3MSwwLDAsMC0uMTgxLS42NzYsMi4wOTQsMi4wOTQsMCwwLDAtLjI2OC0uNTI4LDEuMDEyLDEuMDEyLDAsMCwwLS40MzEtLjI5MywxLjg0MiwxLjg0MiwwLDAsMC0uNjMtLjFoLS44MjJ2Mi45YS44NDIuODQyLDAsMCwwLC4wNzkuMzguNTguNTgsMCwwLDAsLjMuMjU2LDEuODcsMS44NywwLDAsMCwuMzUzLjFxLjIyNC4wNDYuNDQ2LjA3MXYuNDgyaC00LjQ2di0uNDgybC40NDktLjA1MmExLjUyNSwxLjUyNSwwLDAsMCwuMzkxLS4wODMuNTQ3LjU0NywwLDAsMCwuMjkyLS4yNDEuODQyLjg0MiwwLDAsMCwuMDgyLS40di02LjE4YS44NjcuODY3LDAsMCwwLS4wNzMtLjM2Ny41NzUuNTc1LDAsMCwwLS4zLS4yNjIsMi4zNDEsMi4zNDEsMCwwLDAtLjQzMS0uMTM2cS0uMjY4LS4wNjItLjQwOC0uMDh2LS40ODJIMjguNVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmMyYzJcXFwiLz5cIixcblx0fSxcblx0XCJTUUxcIjoge1xuXHRcdGNvbG91cjogXCIjZmZkYTQ0XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNOC41NjIsMTUuMjU2QTIxLjE1OSwyMS4xNTksMCwwLDAsMTYsMTYuNDQ5YTIxLjE1OSwyMS4xNTksMCwwLDAsNy40MzgtMS4xOTRjMS44NjQtLjcyNywyLjUyNS0xLjUzNSwyLjUyNS0yVjkuN2ExMC4zNTcsMTAuMzU3LDAsMCwxLTIuMDg0LDEuMDc2QTIyLjI5MywyMi4yOTMsMCwwLDEsMTYsMTIuMDc4YTIyLjM2LDIyLjM2LDAsMCwxLTcuODc5LTEuM0ExMC4yOCwxMC4yOCwwLDAsMSw2LjAzNyw5Ljd2My41NUM2LjAzNywxMy43MjQsNi43LDE0LjUyOCw4LjU2MiwxNS4yNTZaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZkYTQ0XFxcIi8+PHBhdGggZD1cXFwiTTguNTYyLDIxLjk2MWExNS42MTEsMTUuNjExLDAsMCwwLDIuNi43NDFBMjQuOSwyNC45LDAsMCwwLDE2LDIzLjE1NWEyNC45LDI0LjksMCwwLDAsNC44MzgtLjQ1MiwxNS42MTQsMTUuNjE0LDAsMCwwLDIuNi0uNzQxYzEuODY0LS43MjcsMi41MjUtMS41MzUsMi41MjUtMnYtMy4zOWExMC43MDYsMTAuNzA2LDAsMCwxLTEuNjkyLjgyNUEyMy40OSwyMy40OSwwLDAsMSwxNiwxOC43NGEyMy40OSwyMy40OSwwLDAsMS04LjI3MS0xLjM0OCwxMC44MjksMTAuODI5LDAsMCwxLTEuNjkyLS44MjVWMTkuOTZDNi4wMzcsMjAuNDI2LDYuNywyMS4yMzEsOC41NjIsMjEuOTYxWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZGE0NFxcXCIvPjxwYXRoIGQ9XFxcIk0xNiwzMGM1LjUsMCw5Ljk2My0xLjc0NCw5Ljk2My0zLjg5NFYyMy4yNjlhMTAuNSwxMC41LDAsMCwxLTEuNTM1Ljc2MmwtLjE1Ny4wNjNBMjMuNDg3LDIzLjQ4NywwLDAsMSwxNiwyNS40NDVhMjMuNDIyLDIzLjQyMiwwLDAsMS04LjI3MS0xLjM1MWMtLjA1NC0uMDItLjEwNi0uMDQzLS4xNTctLjA2M2ExMC41LDEwLjUsMCwwLDEtMS41MzUtLjc2MnYyLjgzN0M2LjAzNywyOC4yNTYsMTAuNSwzMCwxNiwzMFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmRhNDRcXFwiLz48ZWxsaXBzZSBjeD1cXFwiMTZcXFwiIGN5PVxcXCI1Ljg5NFxcXCIgcng9XFxcIjkuOTYzXFxcIiByeT1cXFwiMy44OTRcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmRhNDRcXFwiLz5cIixcblx0XHRpbmxpbmVDb21tZW50OiBbXG5cdFx0XHRcIi0tXCIsXG5cdFx0XSxcblx0fSxcblx0XCJTcXVpcnJlbFwiOiB7XG5cdFx0Y29sb3VyOiBcIiNhMDVhMmNcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xMi45NjYsMjcuM2ExOC45MjYsMTguOTI2LDAsMCwxLTUuNzA3LS45MTVjLTEuODMyLS41OTItNC4wNDQtMS41NC00LjkzMS0zLjY0NWEuNTU3LjU1NywwLDAsMS0uMDI1LS4wNzMsMTIuMjE0LDEyLjIxNCwwLDAsMSwuNzYzLTcuNTMxYzEuNTIyLTQuMDA4LDMuNzEtNi43MzksNi41LTguMTE2YTEwLjQyMiwxMC40MjIsMCwwLDEsNy42LS41NSwxMC40MjYsMTAuNDI2LDAsMCwxLDYuMDQsNC42MzksMTEuMDU3LDExLjA1NywwLDAsMSwxLjA1OCwyLjMyNiwxMC42NiwxMC42NiwwLDAsMS01LjM3OCwxMi42ODlsLS4wMi4wMDlBMTQuODMyLDE0LjgzMiwwLDAsMSwxMi45NjYsMjcuM1pcXFwiLz48cGF0aCBkPVxcXCJNMjIuNzIsMTEuMzkzYTEwLjE0NCwxMC4xNDQsMCwwLDAtMTIuOS0zLjg2OUM2LjcsOS4wNjEsNC43ODQsMTIuMiwzLjU5MywxNS4zMzRhMTEuOSwxMS45LDAsMCwwLS43NDYsNy4xODdjLjc4MywxLjg2LDIuNzc5LDIuNzQ0LDQuNTgyLDMuMzI3YTE2LjIwNiwxNi4yMDYsMCwwLDAsMTEuMjEzLS4yMzJBMTAuMTEsMTAuMTEsMCwwLDAsMjMuNzI3LDEzLjYsMTAuNDg4LDEwLjQ4OCwwLDAsMCwyMi43MiwxMS4zOTNaXFxcIiBzdHlsZT1cXFwiZmlsbDojYTA1YTJjXFxcIi8+PHBhdGggZD1cXFwiTTE1Ljc4Miw2LjcyQTguMjYzLDguMjYzLDAsMCwxLDE3LjY0LDguMDg0LDkuNjUsOS42NSwwLDAsMSwxOS4wOCw5LjhhOS4zMTcsOS4zMTcsMCwwLDEtMS41MzEsMTEuOTIxQTE0LjkzMywxNC45MzMsMCwwLDEsNy42NTYsMjQuN2E3LjU4MSw3LjU4MSwwLDAsMS00LjEzNS0xLjEsOC40NTQsOC40NTQsMCwwLDAsMy45MDcsMi4yNDEsMTYuMjA4LDE2LjIwOCwwLDAsMCwxMS4yMTQtLjIzM0ExMC4xMTIsMTAuMTEyLDAsMCwwLDIzLjcyNywxMy42YTEwLjQ4NywxMC40ODcsMCwwLDAtMS4wMDctMi4yMTFBOS45NzMsOS45NzMsMCwwLDAsMTUuNzgyLDYuNzJaXFxcIiBzdHlsZT1cXFwiZmlsbC1vcGFjaXR5OjAuMzEzNzI1NTAxMjk4OTA0NFxcXCIvPjxwYXRoIGQ9XFxcIk0yMy40NzYsMTMuMzg5bC0xLjA2Mi0yLjg5NS4xNTItLjIzNkE2Ljg3NSw2Ljg3NSwwLDAsMSwyNy41MDksNy43YTIuMTc3LDIuMTc3LDAsMCwxLDEuODc5LjU4OCwzLjM3NiwzLjM3NiwwLDAsMSwuMSwzLjcyOWMtLjM0My4yOTItLjc1MS4xMjQtMS4yMjItLjA3YTIuODIxLDIuODIxLDAsMCwwLTIuMTMzLS4yNywxMC4yLDEwLjIsMCwwLDAtMi4wNDcsMS4yMDlaXFxcIi8+PHBhdGggZD1cXFwiTTIzLjAzOSwxMC41NjNjMS4yMjMtMS45LDUuMTA3LTIuOTE1LDUuOTEyLTEuOTIzYTIuOTcsMi45NywwLDAsMSwuMTc3LDIuOTQ1Yy0uMjQ1LjIwNy0xLjgzNy0xLjA1OS0zLjIyNS0uNDIzQTEwLjU3NCwxMC41NzQsMCwwLDAsMjMuNzMsMTIuNDVaXFxcIiBzdHlsZT1cXFwiZmlsbDojNTAyZDE2XFxcIi8+PHBhdGggZD1cXFwiTTI5LjQsOS43MjdhLjguOCwwLDAsMS0uMi40NjljLS4yMjkuMTYyLTEuOS0uNTA2LTMuMjM4LjA1NmExMi40MzksMTIuNDM5LDAsMCwwLTIuMDcxLDEuMDdMMjMuMiwxMC4zNGMtLjA1Ny4wNzQtLjExNi4xNDctLjE2NS4yMjNsLjY5MiwxLjg4NkExMC41NzcsMTAuNTc3LDAsMCwxLDI1LjksMTEuMTYyYzEuMzg4LS42MzYsMi45OC42MzEsMy4yMjUuNDIzQTIuODQ2LDIuODQ2LDAsMCwwLDI5LjQsOS43MjdaXFxcIiBzdHlsZT1cXFwiZmlsbC1vcGFjaXR5OjAuMzEzNzI1NTAxMjk4OTA0NFxcXCIvPjxwYXRoIGQ9XFxcIk0yMS4zODIsMjUuMThhMi4yMzYsMi4yMzYsMCwwLDEtMS4xNDctLjMyMy41NjMuNTYzLDAsMCwxLS4wODItLjg4OGMuNzM3LS42ODQuNjA3LTIuMTczLS40MS00LjY4OWEzNi41MjYsMzYuNTI2LDAsMCwwLTUuMTIzLTguODI1bC0uMzUtLjQzYy0xLjUxMi0xLjg2NS0yLjM1OC0yLjgxNS0zLjU1NC0yLjNhLjU2Mi41NjIsMCwwLDEtLjQxMy4wMTYuNTcxLjU3MSwwLDAsMS0uMzc3LS41OTIsMi4xMTksMi4xMTksMCwwLDEsMS40NjEtMmM0LjcxNi0xLjQ4MSwxMC4yNi44MTQsMTIuOTA1LDUuMzQ0YTExLjIsMTEuMiwwLDAsMS0xLjQzMSwxMy45OTFBMS45MTksMS45MTksMCwwLDEsMjEuMzgyLDI1LjE4WlxcXCIvPjxwYXRoIGQ9XFxcIk0yMy44MTIsMTAuNzgzYy0yLjQ0NC00LjE5Mi03LjczLTYuNTI4LTEyLjI3LTUuMDkzLTEuMDA3LjI0OC0xLjA2NSwxLjUzNS0xLjA1MiwxLjUxNywxLjc3Ni0uNzY3LDIuOTUzLjkxOSw0LjU2NiwyLjg5YTM2LjksMzYuOSwwLDAsMSw1LjIwOSw4Ljk3MWMuODksMi4yLDEuNCw0LjI2Ny4yNyw1LjMxMmExLjUsMS41LDAsMCwwLDEuOTA5LS4yNzRBMTAuNjQ2LDEwLjY0NiwwLDAsMCwyMy44MTIsMTAuNzgzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzUwMmQxNlxcXCIvPjxwYXRoIGQ9XFxcIk0yMy42NDksMTAuMzQ2YTkuMzE0LDkuMzE0LDAsMCwxLTIuNTE4LDcuNzI1Yy0uNDU1LjQ4Ni0uODczLjE3Ny0xLjI2My4wNjMuMTM4LjMxMy4yNzEuNjI2LjQuOTM2Ljg5LDIuMiwxLjQsNC4yNjYuMjcxLDUuMzEyYTEuNSwxLjUsMCwwLDAsMS45MDktLjI3NEMyNi4wODksMjAuMTgzLDI2LjM1NywxNC45MTksMjMuNjQ5LDEwLjM0NlpcXFwiIHN0eWxlPVxcXCJmaWxsLW9wYWNpdHk6MC4zMTM3MjU1MDEyOTg5MDQ0XFxcIi8+XCIsXG5cdH0sXG5cdFwiU3RhblwiOiB7XG5cdFx0Y29sb3VyOiBcIiNiMjAwMWRcIixcblx0XHRpY29uOiBcIjx0aXRsZT5maWxlX3R5cGVfc3RhbjwvdGl0bGU+PHBhdGggZD1cXFwiTTE2LDJBMTQsMTQsMCwwLDAsNS42ODgsMjUuNDY5YzEuNy0uNTE0LDMuNDExLS45OTIsNC44MDYtMS4zNTcsNC4wMzctMS4wNTQsMTAuOTQ4LTIuODM2LDExLjk0Ni01LjA4Mi0uMjguNzgtMS4yMTgsMi44Ny0xLjIxOCwyLjg3LTEuMjc5LDEuMjQ3LTcuMDksMi42MzEtMTAuOTE3LDMuMzY3LTEuMjIuMjM1LTIuNjE0LjUwNy00LjAyNi44MDZBMTQsMTQsMCwwLDAsMjguNDY3LDkuNjI4Yy0yLjUyNi40MDgtMTAuNSwxLjg1NC0xMi41MzksMi4zMTUtMi4yNTUuNTA5LTYuNzg5LDEuNDMzLTcuNjk0LDIuOTkzQzguOCwxMy41LDEwLjQ5Miw5Ljc0NCwxMC40OTIsOS43NDRjMS4yMTYtMiw2LjYtMy40MjUsMTAuMzU4LTQuNDYzLjg3Ni0uMjQyLDEuOTIyLS41MzksMy4wMjMtLjg1OEExMy45MzQsMTMuOTM0LDAsMCwwLDE2LDJaXFxcIiBzdHlsZT1cXFwiZmlsbDojYjIwMDFkXFxcIi8+PHBhdGggZD1cXFwiTTguMjIzLDE0Ljk4N2MtLjI1MiwxLjE3NSwzLjUyLDIuMzEzLDYuOTIxLDMuMzg5YTI2LjM2MiwyNi4zNjIsMCwwLDEsNS42NjcsMi4xOTIsMy4wODUsMy4wODUsMCwwLDAsMS42NjItMS42MTRjLjM3Ny0xLjQ4OS0zLjAxMy0zLjM5My01LjI3NC00LjIyOWEzMy4zMzcsMzMuMzM3LDAsMCwxLTQuNDA3LTIuMDQyYy00LjMxNiwxLjE0My00LjU2OSwyLjMtNC41NjksMi4zWlxcXCIgc3R5bGU9XFxcImZpbGw6IzU5MDgxNVxcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiI1wiLFxuXHRcdF0sXG5cdH0sXG5cdFwiU3RhdGEgQWRvXCI6IHtcblx0XHRjb2xvdXI6IFwiIzNjNmU4ZlwiLFxuXHRcdGljb246IFwiPGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPVxcXCJhXFxcIiB4MT1cXFwiMTZcXFwiIHkxPVxcXCIyXFxcIiB4Mj1cXFwiMTZcXFwiIHkyPVxcXCIzMFxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiIzhhYTdjMFxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiIzNjNmU4ZlxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfc3RhdGE8L3RpdGxlPjxyZWN0IHg9XFxcIjJcXFwiIHk9XFxcIjJcXFwiIHdpZHRoPVxcXCIyOFxcXCIgaGVpZ2h0PVxcXCIyOFxcXCIgcng9XFxcIjEuNTU2XFxcIiByeT1cXFwiMS41NTZcXFwiIHN0eWxlPVxcXCJmaWxsOnVybCgjYSlcXFwiLz48cmVjdCB4PVxcXCIxMy4xNzFcXFwiIHk9XFxcIjYuMDE1XFxcIiB3aWR0aD1cXFwiNS43NTZcXFwiIGhlaWdodD1cXFwiNS43NTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cmVjdCB4PVxcXCIyMC4zMjZcXFwiIHk9XFxcIjYuMDE1XFxcIiB3aWR0aD1cXFwiNS43NTZcXFwiIGhlaWdodD1cXFwiNS43NTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cmVjdCB4PVxcXCIyMC4zMjZcXFwiIHk9XFxcIjEzLjE3MVxcXCIgd2lkdGg9XFxcIjUuNzU2XFxcIiBoZWlnaHQ9XFxcIjUuNzU2XFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHJlY3QgeD1cXFwiMTMuMTcxXFxcIiB5PVxcXCIxMy4xNzFcXFwiIHdpZHRoPVxcXCI1Ljc1NlxcXCIgaGVpZ2h0PVxcXCI1Ljc1NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxyZWN0IHg9XFxcIjYuMDE1XFxcIiB5PVxcXCIxMy4xNzFcXFwiIHdpZHRoPVxcXCI1Ljc1NlxcXCIgaGVpZ2h0PVxcXCI1Ljc1NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxyZWN0IHg9XFxcIjYuMDE1XFxcIiB5PVxcXCIyMC4zMjZcXFwiIHdpZHRoPVxcXCI1Ljc1NlxcXCIgaGVpZ2h0PVxcXCI1Ljc1NlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxyZWN0IHg9XFxcIjEzLjE3MVxcXCIgeT1cXFwiMjAuMzI2XFxcIiB3aWR0aD1cXFwiNS43NTZcXFwiIGhlaWdodD1cXFwiNS43NTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz5cIixcblx0fSxcblx0XCJTdHlsdXNcIjoge1xuXHRcdGNvbG91cjogXCIjYzJjMmMyXCIsXG5cdFx0aWNvbjogXCI8dGl0bGU+ZmlsZV90eXBlX3N0eWx1czwvdGl0bGU+PHBhdGggZD1cXFwiTTYuMzE1LDIwLjc3NmMuNzI2LS44NjkuODEyLTEuNzY2LjI0OS0zLjQzMi0uMzU2LTEuMDU0LS45NDctMS44NjUtLjUxMy0yLjUyMS40NjMtLjcsMS40NDUtLjAyMS42MjcuOTExbC4xNjQuMTE0Yy45ODMuMTE0LDEuNDY3LTEuMjMyLjczMy0xLjYxNi0xLjkzNy0xLjAxMS0zLjYzMS45MzMtMi44ODQsMy4xODMuMzIuOTU0Ljc2OSwxLjk2NS40MDYsMi43N0ExLjc5NCwxLjc5NCwwLDAsMSwzLjc3MywyMS4zYy0uODQ3LjA0My0uMjg1LTEuOS42OTEtMi4zODUuMDg1LS4wNDMuMjA2LS4xLjA5My0uMjQyYTIuMTM0LDIuMTM0LDAsMCwwLTIuMzE0LDEuMkMxLjA2MSwyMi4xMjEsNC40ODUsMjIuOTU0LDYuMzE1LDIwLjc3NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmMyYzJcXFwiLz48cGF0aCBkPVxcXCJNMjcuNDYyLDE0LjE0Yy4yNzguNjg0LjcsMS4zNi40NDksMS45NTgtLjIwNi41MTMtLjQ3Ny43MjYtLjc3Ni43NzYtLjQyLjA3MS0uMzA2LTEuMjQ2LjQxMy0xLjYzOC4wNjQtLjAzNi4xNTctLjIwNi4wNzEtLjMwNmExLjYzNiwxLjYzNiwwLDAsMC0xLjcuOTYxYy0uOCwxLjY4NywxLjgyMywyLjE1LDMuMTEyLjQ5MS41MTMtLjY2Mi41MzQtMS4zMTcuMDQzLTIuNTA2LS4zMTMtLjc1NS0uNzktMS4zMTctLjQ5MS0xLjgxNi4zMi0uNTI3LDEuMDg5LS4wNzEuNTEzLjYzNGwuMTI4LjA3MWMuNzQ4LjA0MywxLjA1NC0uOTU0LjQ4NC0xLjJBMS44MzQsMS44MzQsMCwwLDAsMjcuNDYyLDE0LjE0WlxcXCIgc3R5bGU9XFxcImZpbGw6I2MyYzJjMlxcXCIvPjxwYXRoIGQ9XFxcIk0xNy45NSwxMi4zMzhjLS41Mi0uNDEzLTEuOTc5LjI3OC0yLjM5MiwxLjNhMTYuMjEzLDE2LjIxMywwLDAsMS0yLjA0Myw0LjAzN2MtLjguODc2LS44NzYuMi0uOC0uMzA2QTE1LjMyNywxNS4zMjcsMCwwLDEsMTQuNywxMi42NTJjLS4yMzUtLjM0OS0xLjc3My0uMy0yLjg0MSwxLjM2LS40LjYyNy0xLjMxLDIuNzEzLTIuMzIxLDQuMzU4LS4yMjEuMzU2LS41LjEwNy0uMjg1LS43MjZhMzkuOCwzOS44LDAsMCwxLDEuODczLTUuNjgyLDM5LjA3MiwzOS4wNzIsMCwwLDEsNi45MjEtLjgxOWMuMjYzLS4wNzEuNDQxLS4zMDYsMC0uMzJhNDYuNzc4LDQ2Ljc3OCwwLDAsMC02LjU5My40NDEsNC45MjMsNC45MjMsMCwwLDEsMS40NDUtMS45NDQsMS43ODcsMS43ODcsMCwwLDAtMi4yNjQuNzE5LDEyLjI4NywxMi4yODcsMCwwLDAtLjgxOSwxLjQ1MywyNC4xOTQsMjQuMTk0LDAsMCwwLTMuOTguODYyYy0uNzgzLjMtLjcsMS4yNDYtLjIyMSwxLjA2OGEzMS42MzEsMzEuNjMxLDAsMCwxLDMuODE2LTEuMSwzMC4yOTIsMzAuMjkyLDAsMCwwLTEuODY1LDUuNjgyYy0uNDQxLDIuNDkyLDEuMSwyLjQ3OCwxLjg1OCwxLjUuODE5LTEuMDc1LDIuNTI4LTQuODU2LDIuNzkxLTUuMjU1LjA3OC0uMTM1LjE4NS0uMDY0LjEyOC4wNTctMS45MDgsMy44MDktMS43NDQsNS4yODMtLjIsNC45NTZhNC45MjksNC45MjksMCwwLDAsMi4yMTQtMS45NjVjLjA2NC0uMTUuMi0uMTM1LjE3MS0uMDcxLTEuMjEsMy4xNC0yLjc0OCw1LjY4Mi0zLjc4MSw2LjQ3OS0uOTQuNzE5LTEuNjM4LS44NCwxLjY4Ny0zLjA3Ni40OTEtLjMzNS4yNjMtLjc5LS4yOTItLjYzNGgwYTI5Ljc5MywyOS43OTMsMCwwLDAtOC43ODYsMy4zMjVjLS4xNjQuMTE0LS4zMTMuMjA2LS4zMDYuNDQxLjAwNy4xMzUuMjQyLjA4NS4zNTYuMDE0QTIyLjc3MSwyMi43NzEsMCwwLDEsMTEuMSwyMC45YS4xNTguMTU4LDAsMCwwLC4xMTQuMDA3Yy4xMjEtLjAyOC4xMTQuMDM2LjAzNi4wODUtLjE3OC4xLS4zNTYuMTkyLS40LjIwNi0xLjc2Ni42OTEtMi44MzQsMi4yMTQtMi40NTYsMi45OS4zMi42NjksMi4wNTEuNDI3LDIuODY5LS4wMTQsMi4wMDgtMS4wODksMy40NjgtMy4yMjUsNC40NjQtNi4xNzNDMTYuNiwxNS4zODYsMTcuNjkzLDEyLjQyNCwxNy45NSwxMi4zMzhaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzJjMmMyXFxcIi8+PHBhdGggZD1cXFwiTTI5LjYyLDE4LjM2OWE0OC4xNDUsNDguMTQ1LDAsMCwwLTEzLjQyOS45NjhjLS45MjYuMjQyLS42NjkuNzMzLS4yLjY0MS4wMDcsMCwuMjA2LS4wNS4yMTQtLjA1YTQyLjI3OSw0Mi4yNzksMCwwLDEsMTIuMzc1LS4yNDJDMjkuMDE0LDE5Ljc2NSwzMC4zMTcsMTguNDYyLDI5LjYyLDE4LjM2OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjMmMyYzJcXFwiLz48cGF0aCBkPVxcXCJNMTguODYxLDE3Ljk4NWMuOTExLS40NTYsMi4yNjQtMy4yNzUsMy4xNTQtNC44Mi4wNjQtLjExNC4xNzgtLjAyMS4xMTQuMDU3LTIuMjUsMy44NzMtMS4zLDQuMzIyLS40MDYsNC4yNjUsMS4xODktLjA3MSwyLjI4Ni0xLjc4LDIuNTI4LTIuMTY1LjEtLjE1LjE1Ny0uMDI4LjEuMDc4LS4wNTcuMTc4LS4yNjMuNDkxLS40NTYuOTE5LS4yNzEuNjA1LjAxNC44NC4yNDkuOTQ3LjM3LjE3OCwxLjM4MS4wNjQsMS41MzgtLjU1NS0xLjAxMS0uMDIxLDEuNDEtNC43OTIsMS42NTktNS4wODRhMS43MTgsMS43MTgsMCwwLDAtMi4yLjk3NWMtMS4wMTgsMi4wMTUtMS44NzMsMy42MzgtMi40MDcsMy42NjctMS4wNC4wNTcsMS4yLTQuNDkzLDEuNTU5LTQuNjM1LS4yMjEtLjMyLTEuNjM4LS4xODUtMi40MjgsMS4wNC0uMjg1LjQ0MS0yLjAyMiwzLjUxNy0yLjQ0OSw0LjAyMy0uNzU1LjktLjgxMi4xMjgtLjYtLjc2OWExMC41NjksMTAuNTY5LDAsMCwxLC4zNDktMS4xMzIsNS4zMjQsNS4zMjQsMCwwLDEsMS4zNi0xLjg0NGMyLjItMi40NDIsMy40Ni00LjQyMiwyLjk2Mi01LjItLjQ0MS0uNjkxLTEuOTE1LS4zODQtMi44NjIsMS4wNC0xLjc0NCwyLjYxMy0zLjM1NCw2LjE5NS0zLjU2LDcuODMyUzE4LjA1NiwxOC4zODMsMTguODYxLDE3Ljk4NVptLjkyNi00Ljc5MmMuMDc4LS4xNzguMTI4LS4yMjguMjYzLS41MjdoMEEyNC45MzQsMjQuOTM0LDAsMCwxLDIyLjQ5Miw4LjI4Yy40Mi0uNDQxLDEuMDExLjE1Ny0uMDU3LDEuNzk0YTE2LjQ2MiwxNi40NjIsMCwwLDEtMi4xMTUsMi42NDJ2LjAwN2MtLjIuMjIxLS4zNzcuNDA2LS40NTYuNTEzQzE5LjgwOCwxMy4zMDcsMTkuNzQ0LDEzLjI5MiwxOS43ODcsMTMuMTkzWlxcXCIgc3R5bGU9XFxcImZpbGw6I2MyYzJjMlxcXCIvPlwiLFxuXHR9LFxuXHRcIlNWR1wiOiB7XG5cdFx0Y29sb3VyOiBcIiNmZmIxM2JcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk03LjY3NCwxNC40ODhhMi4yMTgsMi4yMTgsMCwxLDAsMCwzLjEzN0gyNC4zMjZhMi4yMTgsMi4yMTgsMCwxLDAsMC0zLjEzN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmIxM2I7c3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjMuNzMwMDAwMDE5MDczNDlweFxcXCIvPjxwYXRoIGQ9XFxcIk0xMS4yMjIsOS4wNkEyLjIxOCwyLjIxOCwwLDEsMCw5LDExLjI3OEwyMC43NzgsMjMuMDUyQTIuMjE4LDIuMjE4LDAsMSwwLDIzLDIwLjgzNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmIxM2I7c3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjMuNzMwMDAwMDE5MDczNDlweFxcXCIvPjxwYXRoIGQ9XFxcIk0xNy41NjgsNy43M2EyLjIxOCwyLjIxOCwwLDEsMC0zLjEzNywwVjI0LjM4MmEyLjIxOCwyLjIxOCwwLDEsMCwzLjEzNywwWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmYjEzYjtzdHJva2U6IzAwMDtzdHJva2Utd2lkdGg6My43MzAwMDAwMTkwNzM0OXB4XFxcIi8+PHBhdGggZD1cXFwiTTIzLDExLjI3OEEyLjIxOCwyLjIxOCwwLDEsMCwyMC43NzgsOS4wNkw5LDIwLjgzNGEyLjIxOCwyLjIxOCwwLDEsMCwyLjIxOCwyLjIxOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmIxM2I7c3Ryb2tlOiMwMDA7c3Ryb2tlLXdpZHRoOjMuNzMwMDAwMDE5MDczNDlweFxcXCIvPjxwYXRoIGQ9XFxcIk03LjY3NCwxNC40ODhhMi4yMTgsMi4yMTgsMCwxLDAsMCwzLjEzN0gyNC4zMjZhMi4yMTgsMi4yMTgsMCwxLDAsMC0zLjEzN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmIxM2JcXFwiLz48cGF0aCBkPVxcXCJNMTEuMjIyLDkuMDZBMi4yMTgsMi4yMTgsMCwxLDAsOSwxMS4yNzhMMjAuNzc4LDIzLjA1MkEyLjIxOCwyLjIxOCwwLDEsMCwyMywyMC44MzRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZiMTNiXFxcIi8+PHBhdGggZD1cXFwiTTE3LjU2OCw3LjczYTIuMjE4LDIuMjE4LDAsMSwwLTMuMTM3LDBWMjQuMzgyYTIuMjE4LDIuMjE4LDAsMSwwLDMuMTM3LDBaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZiMTNiXFxcIi8+PHBhdGggZD1cXFwiTTIzLDExLjI3OEEyLjIxOCwyLjIxOCwwLDEsMCwyMC43NzgsOS4wNkw5LDIwLjgzNGEyLjIxOCwyLjIxOCwwLDEsMCwyLjIxOCwyLjIxOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmIxM2JcXFwiLz48cGF0aCBkPVxcXCJNMiwxNi4wNTZIMzBWMjUuOTVhNC4wMzUsNC4wMzUsMCwwLDEtNC4xMDYsNC4xMDZINi4xMDZBNC4wMzUsNC4wMzUsMCwwLDEsMiwyNS45NVpcXFwiLz48cGF0aCBkPVxcXCJNNi4yLDIzLjA0NUEzLjYyOCwzLjYyOCwwLDEsMSwxMi40LDIwLjQ4SDEwLjI3QTEuNSwxLjUsMCwxLDAsNy43LDIxLjU0MWgwYTEuNiwxLjYsMCwwLDAsMS4wNjIuNDQxaDBhNC4xMTgsNC4xMTgsMCwwLDEsMi41NjYsMS4wNjNoMGEzLjYyOCwzLjYyOCwwLDEsMS02LjE5NCwyLjU2NUg3LjI2NEExLjUsMS41LDAsMSwwLDkuODMsMjQuNTVoMGExLjk0OCwxLjk0OCwwLDAsMC0xLjA2My0uNDRoMEE0LjQ2NSw0LjQ2NSwwLDAsMSw2LjIsMjMuMDQ1WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0xOS42NTEsMTYuODUyLDE3LjA4NSwyOS4yNEgxNC45NkwxMi40LDE2Ljg1MkgxNC41MmwxLjUsNy4yNTUsMS41LTcuMjU1WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxwYXRoIGQ9XFxcIk0yMy4yOCwyMS45ODNoMy42Mjh2My42MjhoMGEzLjYyOCwzLjYyOCwwLDEsMS03LjI1NywwaDBWMjAuNDhoMGEzLjYyOCwzLjYyOCwwLDAsMSw3LjI1NywwSDI0Ljc4M2ExLjUsMS41LDAsMSwwLTMuMDA1LDB2NS4xM2gwYTEuNSwxLjUsMCwwLDAsMy4wMDUsMGgwdi0xLjVoLTEuNVYyMS45ODNaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiU3dpZnRcIjoge1xuXHRcdGNvbG91cjogXCIjRkE1RDJEXCIsXG5cdFx0aWNvbjogXCI8ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9XFxcImFcXFwiIHgxPVxcXCItMTM0LjQ5NFxcXCIgeTE9XFxcIi0xNzEuODJcXFwiIHgyPVxcXCItMTM0LjQ5N1xcXCIgeTI9XFxcIi0xNzEuODlcXFwiIGdyYWRpZW50VHJhbnNmb3JtPVxcXCJtYXRyaXgoMjQwLCAwLCAwLCAtMjA1LjYsIDMyMjk1LCAtMzUzMTIuNTg1KVxcXCIgZ3JhZGllbnRVbml0cz1cXFwidXNlclNwYWNlT25Vc2VcXFwiPjxzdG9wIG9mZnNldD1cXFwiMFxcXCIgc3RvcC1jb2xvcj1cXFwiI2Y4ODUzNVxcXCIvPjxzdG9wIG9mZnNldD1cXFwiMVxcXCIgc3RvcC1jb2xvcj1cXFwiI2ZkMjIyMVxcXCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjx0aXRsZT5maWxlX3R5cGVfc3dpZnQ8L3RpdGxlPjxwYXRoIGQ9XFxcIk0xOS40MjIsNC4wMDdzNi4yMTcsMy41NTQsNy44NDQsOS4yYzEuNDY2LDUuMS4yOTIsNy41MzQuMjkyLDcuNTM0YTguOTE1LDguOTE1LDAsMCwxLDEuNzQyLDIuOCw0LjgyNSw0LjgyNSwwLDAsMSwuMjksNC40NTNzLS4xLTIuMDgtMy4yLTIuNTExYy0yLjg0MS0uNC0zLjg3NCwyLjM2Ni05LjMsMi4yMzJBMTguNDM1LDE4LjQzNSwwLDAsMSwyLDE5LjM1NEM0LjY1MSwyMC44LDguMTI0LDIzLjA0NSwxMi40NDksMjIuN3M1LjIyOC0xLjY3NCw1LjIyOC0xLjY3NEE2Ni45LDY2LjksMCwwLDEsNC44OTEsNy42NDNjMy40LDIuODQ1LDExLjgyMiw4LjUwNywxMS42MjYsOC4zNjNBNzUuODI2LDc1LjgyNiwwLDAsMSw4LjA5Miw2LjI0UzIwLjcyOCwxNi42MjksMjEuNzQ1LDE2LjU2M2MuNDE4LS44NjEsMi41NzktNS4zMTgtMi4zMjQtMTIuNTU3WlxcXCIgc3R5bGU9XFxcImZpbGw6dXJsKCNhKVxcXCIvPlwiLFxuXHRcdGlubGluZUNvbW1lbnQ6IFtcblx0XHRcdFwiLy9cIixcblx0XHRdLFxuXHR9LFxuXHRcIlN5c3RlbWQgY29uZmlndXJhdGlvbiBmaWxlXCI6IHtcblx0XHRjb2xvdXI6IFwiIzMwZDQ3NVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIsMTJ2OEg1LjI1NlYxOC43NjlIMy4zVjEzLjIzMUg1LjI1NlYxMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMmQyZDJcXFwiLz48cGF0aCBkPVxcXCJNMjYuNzQ0LDEydjEuMjMxSDI4Ljd2NS41MzhIMjYuNzQ0VjIwSDMwVjEyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2QyZDJkMlxcXCIvPjxwYXRoIGQ9XFxcIk0xNy42MjgsMTZsNS4yMS0yLjc2OXY1LjUzOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMzMGQ0NzVcXFwiLz48ZWxsaXBzZSBjeD1cXFwiMTIuMDkzXFxcIiBjeT1cXFwiMTZcXFwiIHJ4PVxcXCIyLjkzXFxcIiByeT1cXFwiMi43NjlcXFwiIHN0eWxlPVxcXCJmaWxsOiMzMGQ0NzVcXFwiLz5cIixcblx0fSxcblx0XCJUNCB0ZW1wbGF0aW5nXCI6IHtcblx0XHRjb2xvdXI6IFwiIzFlODhlNVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTE5LjU0NSw2LjAzNUgxMy4yN1YyNEg4LjNWNi4wMzVIMi4wNTVWMmgxNy40OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMxZTg4ZTVcXFwiLz48cGF0aCBkPVxcXCJNMjcuNTY3LDEwVjIyLjYwOGgyLjRWMjUuOWgtMi40VjMwSDIzLjU1MVYyNS45SDE0LjgzNFYyMi40NTVxMS4xNTgtMS4zLDIuNC0yLjgzOHQyLjQtMy4xNzNxMS4xNTgtMS42MzIsMi4xNTUtMy4yODVBMzIuOTI1LDMyLjkyNSwwLDAsMCwyMy40ODEsMTBaTTE4Ljc4MSwyMi42MDhoNC43N1YxNS42MjFxLS40ODguOTA3LTEuMDYsMS44MzR0LTEuMiwxLjgyN3EtLjYyOC45LTEuMjY5LDEuNzQzVDE4Ljc4MSwyMi42MDhaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWU4OGU1XFxcIi8+XCIsXG5cdH0sXG5cdFwiVDQgVGV4dCBUZW1wbGF0ZXMgKEMjKVwiOiB7XG5cdFx0Y29sb3VyOiBcIiMxZTg4ZTVcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xOS41NDUsNi4wMzVIMTMuMjdWMjRIOC4zVjYuMDM1SDIuMDU1VjJoMTcuNDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWU4OGU1XFxcIi8+PHBhdGggZD1cXFwiTTI3LjU2NywxMFYyMi42MDhoMi40VjI1LjloLTIuNFYzMEgyMy41NTFWMjUuOUgxNC44MzRWMjIuNDU1cTEuMTU4LTEuMywyLjQtMi44Mzh0Mi40LTMuMTczcTEuMTU4LTEuNjMyLDIuMTU1LTMuMjg1QTMyLjkyNSwzMi45MjUsMCwwLDAsMjMuNDgxLDEwWk0xOC43ODEsMjIuNjA4aDQuNzdWMTUuNjIxcS0uNDg4LjkwNy0xLjA2LDEuODM0dC0xLjIsMS44MjdxLS42MjguOS0xLjI2OSwxLjc0M1QxOC43ODEsMjIuNjA4WlxcXCIgc3R5bGU9XFxcImZpbGw6IzFlODhlNVxcXCIvPlwiLFxuXHR9LFxuXHRcIlQ0IFRleHQgVGVtcGxhdGVzIChWQilcIjoge1xuXHRcdGNvbG91cjogXCIjMWU4OGU1XCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTkuNTQ1LDYuMDM1SDEzLjI3VjI0SDguM1Y2LjAzNUgyLjA1NVYyaDE3LjQ5WlxcXCIgc3R5bGU9XFxcImZpbGw6IzFlODhlNVxcXCIvPjxwYXRoIGQ9XFxcIk0yNy41NjcsMTBWMjIuNjA4aDIuNFYyNS45aC0yLjRWMzBIMjMuNTUxVjI1LjlIMTQuODM0VjIyLjQ1NXExLjE1OC0xLjMsMi40LTIuODM4dDIuNC0zLjE3M3ExLjE1OC0xLjYzMiwyLjE1NS0zLjI4NUEzMi45MjUsMzIuOTI1LDAsMCwwLDIzLjQ4MSwxMFpNMTguNzgxLDIyLjYwOGg0Ljc3VjE1LjYyMXEtLjQ4OC45MDctMS4wNiwxLjgzNHQtMS4yLDEuODI3cS0uNjI4LjktMS4yNjksMS43NDNUMTguNzgxLDIyLjYwOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiMxZTg4ZTVcXFwiLz5cIixcblx0fSxcblx0XCJUY2xcIjoge1xuXHRcdGNvbG91cjogXCIjZWZmMWNiXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMjEuOTQyLDIuODc2Yy4wNCwyLjQ2OC0uMDMzLDQuOTEtMi4xNjksNy4yM2wtLjA3OS4wODloLjExOWwuODczLjAxM2MtMS40MTgsMi45NS0yLjM0MSw1Ljg5Mi00LjM4LDguODNsLS4wNzMuMTA2LjEyNi0uMDIzLDEuMDc4LS4yYTUuODUxLDUuODUxLDAsMCwxLTMuNDg0LDMuNjVjLS4zOS01LjQ1NSwyLjMzMy0xMC4yNyw0LjY0NS0xNS4wNzFsLjAwNy0uMDEzLS4wODYtLjA2Yy0zLjc4Niw0LjIzMy01LjQ5MSwxMC4yLTYuMTM2LDE1LjEyN2E0LjU4Miw0LjU4MiwwLDAsMS0yLjE0NS0yLjk4OGwuOS4zNzcuMDkzLjA0LS4wMi0uMWMtLjY4MS0zLjAyOC4zNzYtNS4yLDEuNC04LjA1NmwuNzM3LjQ5My4wODYuMDYsMC0uMWMtLjA1OC0yLjMyLDEuNS00LjY0OSwzLjU3Ny02LjcyN2wuMjg4Ljc3LjA0LjEuMDU2LS4xLjYzMS0xLjA1MSwwLS4wMDdBNi4xLDYuMSwwLDAsMSwyMS45NDIsMi44NzZaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzNiMTVmXFxcIi8+PHBhdGggZD1cXFwiTTIxLjk0OCwyLjg3NWE2LjEzMSw2LjEzMSwwLDAsMC0zLjkyNiwyLjM4OGwwLC4wMDctLjYzMSwxLjA1MS0uMDU2LjEtLjA0LS4xTDE3LDUuNTQ0Yy0yLjA3MiwyLjA3OC0zLjYzNSw0LjQwNy0zLjU3Nyw2LjcyN2wwLC4xLS4wODYtLjA2LS43MzctLjQ5M2MtMS4wMjUsMi44NTYtMi4wODMsNS4wMjktMS40LDguMDU2bC4wMi4xLS4wOTMtLjA0LS44ODYtLjM3NGMwLC4wMTguMDA3LjAzNS4wMS4wNTNhNC41MzMsNC41MzMsMCwwLDAsMi4xMjYsMi45MzJjLjA1LS4zODEuMTA1LS43NzEuMTY5LTEuMTY0LTEuNTQzLTMuNjE0LS4yLTYuMjcxLjQwNy04LjY2MWwuOTM5LjU0MmMtLjEzLTIuMjM4LDEuMTg0LTQuNjUxLDIuODkzLTYuNzU3bC41Ljg3M0MxOC41NTUsNC43NjksMTkuNTYsMy43MiwyMS45NDgsMi44NzVaXFxcIiBzdHlsZT1cXFwiZmlsbDojZWZmMWNiO3N0cm9rZTojZWZmMWNiXFxcIi8+PHBhdGggZD1cXFwiTTIyLjUxOCwybC0uMDU2LjAxYy0yLjA4Mi4zNjMtNC4xMjEsMS4xMjgtNS4wMTUsMi45NTlsLS4zNzctLjY1OC0uMDMzLS4wNi0uMDUuMDVhMjAuODUsMjAuODUsMCwwLDAtMi45MzksMy41QTUuOTM5LDUuOTM5LDAsMCwwLDEyLjgzNSwxMWwtLjUzMi0uNjY0LS4wNTMtLjA2Ni0uMDM2LjA3NmEyNy41MzUsMjcuNTM1LDAsMCwwLTEuNjkzLDQuNyw2LjczLDYuNzMsMCwwLDAtLjE1OSwzLjcxOWwtLjg3Ni0uNTA5LS4wNzMtLjA0My0uMDA3LjA4NmE1LjUyOSw1LjUyOSwwLDAsMCwyLjAxNyw0Ljg0M2wtLjk3Mi4yNDEtLjIuMDUuMi4wNTNhNC4yNTgsNC4yNTgsMCwwLDEsMS40NTUuNiwxLjMyNSwxLjMyNSwwLDAsMSwuNTE2LDEuM1YyOC4xbC4wMS4wMTMsMS4yMTcsMS43NDUuMS4xMzlWMjUuNzE5YTMuNDY2LDMuNDY2LDAsMCwxLC42MjEtMS40ODRBMS42MzksMS42MzksMCwwLDEsMTUuNSwyMy43bC4xODItLjAyMy0uMTY1LS4wNzYtLjY0MS0uM2E5LjExMiw5LjExMiwwLDAsMCwzLjY5My01LjMyMmwuMDItLjA4Ni0uMDgzLjAyMy0uNzkzLjIxNWExMS42NjksMTEuNjY5LDAsMCwwLDIuMDg5LTMuNUMyMC41MTIsMTMsMjEuMTgsMTEuMTY2LDIxLjcyOCw5LjdsLjAzLS4wNzktLjA4My4wMDctLjYxMi4wNDNhNi42NTUsNi42NTUsMCwwLDAsMS4zODItMy41MjcsMTcuMDM5LDE3LjAzOSwwLDAsMCwuMDc5LTQuMDg2Wm0tLjU3NS44NzZjLjA0LDIuNDY4LS4wMzMsNC45MS0yLjE2OSw3LjIzbC0uMDc5LjA4OWguMTE5bC44NzMuMDEzYy0xLjQxOCwyLjk1LTIuMzQxLDUuODkyLTQuMzgsOC44M2wtLjA3My4xMDYuMTI2LS4wMjMsMS4wNzgtLjJhNS44NTEsNS44NTEsMCwwLDEtMy40ODQsMy42NWMtLjM5LTUuNDU1LDIuMzMzLTEwLjI3LDQuNjQ1LTE1LjA3MWwuMDA3LS4wMTMtLjA4Ni0uMDZjLTMuNzg2LDQuMjMzLTUuNDkxLDEwLjItNi4xMzYsMTUuMTI3YTQuNTgyLDQuNTgyLDAsMCwxLTIuMTQ1LTIuOTg4bC45LjM3Ny4wOTMuMDQtLjAyLS4xYy0uNjgxLTMuMDI4LjM3Ni01LjIsMS40LTguMDU2bC43MzcuNDkzLjA4Ni4wNiwwLS4xYy0uMDU4LTIuMzIsMS41LTQuNjQ5LDMuNTc3LTYuNzI3bC4yODguNzcuMDQuMS4wNTYtLjEuNjMxLTEuMDUxLDAtLjAwN0E2LjEsNi4xLDAsMCwxLDIxLjk0MiwyLjg3NlpcXFwiLz5cIixcblx0fSxcblx0XCJUZW1wbGF0ZSBUb29sa2l0IDJcIjoge1xuXHRcdGNvbG91cjogXCIjM2JjZWZjXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNOC45MDcsMjMuMDIxSDguODc4YTMuMzA1LDMuMzA1LDAsMCwxLTIuMDExLS42NjFBMi41NjEsMi41NjEsMCwwLDEsNS44MywyMC4zMzRWMTYuMUg0LjI4OGEzLjA1LDMuMDUsMCwwLDEtMi43MzgtMS42OSwzLjMsMy4zLDAsMCwxLC40NDEtMy41MywyLjI2NSwyLjI2NSwwLDAsMSwxLjgxNS0uOWg5LjY1YTMuMDUsMy4wNSwwLDAsMSwyLjczOCwxLjY5LDMuMywzLjMsMCwwLDEtLjQ0MSwzLjUzLDIuMjY1LDIuMjY1LDAsMCwxLTEuODE1LjlIMTEuOTU1djQuMjMxYTIuNTYxLDIuNTYxLDAsMCwxLTEuMDM3LDIuMDI2QTMuMzA1LDMuMzA1LDAsMCwxLDguOTA3LDIzLjAyMVpNNC4yNjQsMTEuNjM2YTEuMzksMS4zOSwwLDAsMC0xLjM4OCwxLjM4OHYuMDMzYTEuMzksMS4zOSwwLDAsMCwxLjM4OCwxLjM4OEg3LjQ4N3Y1Ljg4MWMwLC41NzIuNjI0LDEuMDM3LDEuMzksMS4wMzdoLjAyOWMuNzY3LDAsMS4zOS0uNDY1LDEuMzktMS4wMzdWMTQuNDQ2aDMuMjIzYTEuMzksMS4zOSwwLDAsMCwxLjM4OC0xLjM4OHYtLjAzM2ExLjM5LDEuMzksMCwwLDAtMS4zODgtMS4zODhaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDE1ZDlhXFxcIi8+PHBhdGggZD1cXFwiTTE0Ljk4MSwxMi45NTN2LjAzM2ExLjUzMywxLjUzMywwLDAsMS0xLjUzMywxLjUzM0gxMC4zN3Y1LjczN2ExLjM5MywxLjM5MywwLDAsMS0xLjUzNSwxLjE4MUg4LjgwNmExLjM5MywxLjM5MywwLDAsMS0xLjUzNS0xLjE4MVYxNC41MThINC4xOTJBMS41MzMsMS41MzMsMCwwLDEsMi42NiwxMi45ODZ2LS4wMzNBMS41MzMsMS41MzMsMCwwLDEsNC4xOTIsMTEuNDJoOS4yNTdBMS41MzMsMS41MzMsMCwwLDEsMTQuOTgxLDEyLjk1M1ptLTQuMjIzLDkuMjIyYTIuNDE4LDIuNDE4LDAsMCwwLC45OC0xLjkxMlYxNS44ODhoMi4xMjdhMi4xMTQsMi4xMTQsMCwwLDAsMS43LS44NDYsMi45OTIsMi45OTIsMCwwLDAtMi4xOC00Ljk5SDMuNzM1YTIuMTE0LDIuMTE0LDAsMCwwLTEuNy44NDYsMi45OTIsMi45OTIsMCwwLDAsMi4xOCw0Ljk5SDUuOXY0LjM3NWEyLjQxOCwyLjQxOCwwLDAsMCwuOTgsMS45MTIsMy4xNiwzLjE2LDAsMCwwLDEuOTIzLjYzMWguMDI5QTMuMTYsMy4xNiwwLDAsMCwxMC43NTgsMjIuMTc0WlxcXCIgc3R5bGU9XFxcImZpbGw6IzNiY2VmY1xcXCIvPjxwYXRoIGQ9XFxcIk0yMy42MDcsMjMuMDIxaC0uMDI5YTMuMzA1LDMuMzA1LDAsMCwxLTIuMDExLS42NjEsMi41NjEsMi41NjEsMCwwLDEtMS4wMzctMi4wMjZWMTYuMUgxOC45ODhhMy4wNSwzLjA1LDAsMCwxLTIuNzM4LTEuNjksMy4zLDMuMywwLDAsMSwuNDQxLTMuNTMsMi4yNjUsMi4yNjUsMCwwLDEsMS44MTUtLjloOS42NWEzLjA1LDMuMDUsMCwwLDEsMi43MzgsMS42OSwzLjMsMy4zLDAsMCwxLS40NDEsMy41MywyLjI2NSwyLjI2NSwwLDAsMS0xLjgxNS45SDI2LjY1NXY0LjIzMWEyLjU2MSwyLjU2MSwwLDAsMS0xLjAzNywyLjAyNkEzLjMwNSwzLjMwNSwwLDAsMSwyMy42MDcsMjMuMDIxWk0xOC45NjQsMTEuNjM2YTEuMzksMS4zOSwwLDAsMC0xLjM4OCwxLjM4OHYuMDMzYTEuMzksMS4zOSwwLDAsMCwxLjM4OCwxLjM4OGgzLjIyM3Y1Ljg4MWMwLC41NzIuNjI0LDEuMDM3LDEuMzksMS4wMzdoLjAyOWMuNzY3LDAsMS4zOS0uNDY1LDEuMzktMS4wMzdWMTQuNDQ2aDMuMjIzYTEuMzksMS4zOSwwLDAsMCwxLjM4OC0xLjM4OHYtLjAzM2ExLjM5LDEuMzksMCwwLDAtMS4zODgtMS4zODhaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDE1ZDlhXFxcIi8+PHBhdGggZD1cXFwiTTI5LjY4MSwxMi45NTN2LjAzM2ExLjUzMywxLjUzMywwLDAsMS0xLjUzMywxLjUzM0gyNS4wN3Y1LjczN2ExLjM5MywxLjM5MywwLDAsMS0xLjUzNSwxLjE4MWgtLjAyOWExLjM5MywxLjM5MywwLDAsMS0xLjUzNS0xLjE4MVYxNC41MThIMTguODkyYTEuNTMzLDEuNTMzLDAsMCwxLTEuNTMzLTEuNTMzdi0uMDMzYTEuNTMzLDEuNTMzLDAsMCwxLDEuNTMzLTEuNTMzaDkuMjU3QTEuNTMzLDEuNTMzLDAsMCwxLDI5LjY4MSwxMi45NTNabS00LjIyMyw5LjIyMmEyLjQxOCwyLjQxOCwwLDAsMCwuOTgtMS45MTJWMTUuODg4aDIuMTI3YTIuMTE0LDIuMTE0LDAsMCwwLDEuNy0uODQ2LDIuOTkyLDIuOTkyLDAsMCwwLTIuMTgtNC45OWgtOS42NWEyLjExNCwyLjExNCwwLDAsMC0xLjcuODQ2LDIuOTkyLDIuOTkyLDAsMCwwLDIuMTgsNC45OUgyMC42djQuMzc1YTIuNDE4LDIuNDE4LDAsMCwwLC45OCwxLjkxMiwzLjE2LDMuMTYsMCwwLDAsMS45MjMuNjMxaC4wMjlBMy4xNiwzLjE2LDAsMCwwLDI1LjQ1OCwyMi4xNzRaXFxcIiBzdHlsZT1cXFwiZmlsbDojM2JjZWZjXFxcIi8+XCIsXG5cdH0sXG5cdFwiVGVYXCI6IHtcblx0XHRjb2xvdXI6IFwiI2NmY2ZjZlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTExLjMzMywxMy4xMjJjLS4xMjgtMS41NjItLjI0MS0yLjc1Ni0yLjI4Ny0yLjc1Nkg3LjkxdjguNGgyLjE0NXYuNjExbC0zLjA4My0uMDI5LTMuMDgyLjAyOXYtLjYxMUg2LjAzNHYtOC40SDQuODg0Yy0yLjA0NiwwLTIuMTU5LDEuMjA4LTIuMjg3LDIuNzU2SDJsLjI4NC0zLjM2N2g5LjM2MmwuMjg0LDMuMzY3aC0uNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjZmNmY2ZcXFwiLz48cGF0aCBkPVxcXCJNMTkuMjg5LDIyLjUzSDEwLjQxVjIxLjkyaDEuNTA2VjEzLjQ2N0gxMC40MXYtLjYxMWg4LjYzN2wuNDEyLDMuMzY3aC0uNmMtLjIxMy0xLjgzMy0uNjgyLTIuNzU2LTIuODU1LTIuNzU2SDEzLjc5MVYxNy4yaC44MzhjMS4zNjQsMCwxLjUwNS0uNiwxLjUwNS0xLjY2MmguNnYzLjkzNWgtLjZjMC0xLjA4LS4xNDItMS42NjItMS41MDUtMS42NjJoLS44Mzh2NC4xMDZoMi4yMTZjMi40NzIsMCwzLTEuMTA4LDMuMy0zLjIyNWguNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjZmNmY2ZcXFwiLz48cGF0aCBkPVxcXCJNMjcuNzI3LDE5LjE4NmMtLjU0LDAtMS45NiwwLTIuNDE1LjAyOVYxOC42aDEuMTc5bC0yLjU1Ny0zLjU1Mi0yLjUyOSwzLjM4MUE0LjEsNC4xLDAsMCwwLDIyLjcsMTguNnYuNjExYy0uMzU1LS4wMjktMS41NzYtLjAyOS0yLjAxNy0uMDI5LS40LDAtMS41NDgsMC0xLjg3NS4wMjlWMTguNmguMzgzYTcuNDU5LDcuNDU5LDAsMCwwLC44MjQtLjA0M2MuNS0uMDQzLjU0LS4wODUuNjY3LS4yNTZMMjMuNTM2LDE0LjVsLTMuMTUzLTQuNDE4SDE5VjkuNDdjLjM4NC4wMjgsMS43OS4wMjgsMi4yNzMuMDI4LjU4MiwwLDEuOTE4LDAsMi40MjktLjAyOHYuNjExSDIyLjUyOGwyLjExNywyLjk1NSwyLjA3NC0yLjc4NGE0LjEsNC4xLDAsMCwwLTEuMjkzLS4xN1Y5LjQ3Yy4zNTYuMDI4LDEuNTkxLjAyOCwyLjAzMi4wMjguNCwwLDEuNTM0LDAsMS44NjEtLjAyOHYuNjExaC0uMzY5YTUuMjY0LDUuMjY0LDAsMCwwLS44MzguMDQzYy0uNDY5LjA0My0uNTI2LjA3MS0uNjY3LjI1NmwtMi40LDMuMjFMMjguNjM2LDE4LjZIMzB2LjYxMUMyOS42NDUsMTkuMTg2LDI4LjE4MiwxOS4xODYsMjcuNzI3LDE5LjE4NlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNjZmNmY2ZcXFwiLz5cIixcblx0XHRpbmxpbmVDb21tZW50OiBbXG5cdFx0XHRcIiVcIixcblx0XHRdLFxuXHR9LFxuXHRcIlRleHRpbGVcIjoge1xuXHRcdGNvbG91cjogXCIjZmZlN2FjXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMjguNjgxLDI2LjA3NUgzLjMxOUExLjMxNywxLjMxNywwLDAsMSwyLDI0Ljc1NlY3LjI0NEExLjMxNywxLjMxNywwLDAsMSwzLjMxOSw1LjkyNUgyOC42ODFBMS4zMTcsMS4zMTcsMCwwLDEsMzAsNy4yNDRWMjQuNzZBMS4zMTYsMS4zMTYsMCwwLDEsMjguNjgxLDI2LjA3NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmU3YWNcXFwiLz48cGF0aCBkPVxcXCJNNi4wNjYsMTIuODQ4YTQuOTg3LDQuOTg3LDAsMCwxLDEuNTA4LS42NTlWMTAuNjY0YTMuNywzLjcsMCwwLDEsLjc0My0uMzMsNy44NjksNy44NjksMCwwLDEsMS4zMjctLjM0N2guNjQydjIuMzkxaDIuNDg0VjEzLjZIMTAuMjg2djQuODQ4YTMuMTcyLDMuMTcyLDAsMCwwLC4yOSwxLjYwOSwxLjA3LDEuMDcsMCwwLDAsLjk3MS40NDgsNy4xMjcsNy4xMjcsMCwwLDAsLjc2LS4wNDgsMy4zMzgsMy4zMzgsMCwwLDAsLjc4Mi0uMThsLjEzMi42MmEyLjM4OCwyLjM4OCwwLDAsMS0uNS4zNTYsNS40NTcsNS40NTcsMCwwLDEtLjc1Mi4zNTYsNS44MzcsNS44MzcsMCwwLDEtLjkyMy4yODFBNC43NjksNC43NjksMCwwLDEsMTAsMjJhMi4zODUsMi4zODUsMCwwLDEtMS44MjQtLjYzNywyLjk0NywyLjk0NywwLDAsMS0uNi0yLjA2MlYxMy41OTFINi4wNjZaXFxcIi8+PHBhdGggZD1cXFwiTTE0LjYwNywyMC40NTNhMS40NDcsMS40NDcsMCwwLDEsLjQzMS0xLjA5LDEuNTkxLDEuNTkxLDAsMCwxLDEuMTQ3LS40MTMsMS42NDksMS42NDksMCwwLDEsMS4xNjUuNDEzLDEuNDIyLDEuNDIyLDAsMCwxLC40NTMsMS4wOSwxLjM2OSwxLjM2OSwwLDAsMS0uNDUzLDEuMDgxLDEuNjkyLDEuNjkyLDAsMCwxLTEuMTY1LjQsMS42MSwxLjYxLDAsMCwxLTEuMTQ3LS40QTEuNDI3LDEuNDI3LDAsMCwxLDE0LjYwNywyMC40NTNaXFxcIi8+XCIsXG5cdH0sXG5cdFwiVE9NTFwiOiB7XG5cdFx0Y29sb3VyOiBcIiNiZmJmYmZcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yMi43Niw2LjgzdjMuMjVoLTVWMjUuMTdIMTQuMjZWMTAuMDhoLTVWNi44M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM3ZjdmN2ZcXFwiLz48cGF0aCBkPVxcXCJNMiwySDguMlY1LjA5SDUuMzR2MjEuOEg4LjJWMzBIMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNiZmJmYmZcXFwiLz48cGF0aCBkPVxcXCJNMzAsMzBIMjMuOFYyNi45MWgyLjg2VjUuMTFIMjMuOFYySDMwWlxcXCIgc3R5bGU9XFxcImZpbGw6I2JmYmZiZlxcXCIvPlwiLFxuXHR9LFxuXHRcIlRTQ29uZmlnXCI6IHtcblx0XHRjb2xvdXI6IFwiIzAwN2FjY1wiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIzLjgyNyw4LjI0M0E0LjQyNCw0LjQyNCwwLDAsMSwyNi4wNSw5LjUyNGE1Ljg1Myw1Ljg1MywwLDAsMSwuODUyLDEuMTQzYy4wMTEuMDQ1LTEuNTM0LDEuMDgzLTIuNDcxLDEuNjYyLS4wMzQuMDIzLS4xNjktLjEyNC0uMzIyLS4zNWEyLjAxNCwyLjAxNCwwLDAsMC0xLjY3LTFjLTEuMDc3LS4wNzQtMS43NzEuNDktMS43NjYsMS40MzNhMS4zLDEuMywwLDAsMCwuMTUzLjY2NmMuMjM3LjQ5LjY3Ny43ODQsMi4wNTksMS4zODMsMi41NDQsMS4xLDMuNjM2LDEuODE3LDQuMzEsMi44NDNhNS4xNTgsNS4xNTgsMCwwLDEsLjQxNiw0LjMzMyw0Ljc2NCw0Ljc2NCwwLDAsMS0zLjkzMiwyLjgxNSwxMC45LDEwLjksMCwwLDEtMi43MDgtLjAyOCw2LjUzMSw2LjUzMSwwLDAsMS0zLjYxNi0xLjg4NCw2LjI3OCw2LjI3OCwwLDAsMS0uOTI2LTEuMzcxLDIuNjU1LDIuNjU1LDAsMCwxLC4zMjctLjIwOGMuMTU4LS4wOS43NTYtLjQzNCwxLjMyLS43NjFsMS4wMjQtLjYuMjE0LjMxMmE0Ljc3MSw0Ljc3MSwwLDAsMCwxLjM1LDEuMjkyLDMuMywzLjMsMCwwLDAsMy40NTgtLjE3NSwxLjU0NSwxLjU0NSwwLDAsMCwuMi0xLjk3NGMtLjI3Ni0uNC0uODQtLjcyNy0yLjQ0My0xLjQyMmE4LjgsOC44LDAsMCwxLTMuMzQ5LTIuMDU1LDQuNjg3LDQuNjg3LDAsMCwxLS45NzYtMS43NzcsNy4xMTYsNy4xMTYsMCwwLDEtLjA2Mi0yLjI2OCw0LjMzMiw0LjMzMiwwLDAsMSwzLjY0NC0zLjM3NEE5LDksMCwwLDEsMjMuODI3LDguMjQzWk0xNS40ODQsOS43MjZsLjAxMSwxLjQ1NGgtNC42M1YyNC4zMjhINy42VjExLjE4M0gyLjk3VjkuNzU1YTEzLjk4NiwxMy45ODYsMCwwLDEsLjA0LTEuNDY2Yy4wMTctLjAyMywyLjgzMi0uMDM0LDYuMjQ1LS4wMjhsNi4yMTEuMDE3WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwN2FjY1xcXCIvPjxwYXRoIGQ9XFxcIk0yNy4wNzUsMjUuMTA3bC4zNjMtLjM2MWMxLjY4LjA1NSwxLjcwNiwwLDEuNzgtLjE3N2wuNDYyLTEuMTI0LjAzNC0uMTA3LS4wMzgtLjA5M2MtLjAyLS4wNDktLjA4MS0uMi0xLjEzLTEuMnYtLjUyNmMxLjIxMS0xLjE2NiwxLjE4NS0xLjIyNiwxLjExNi0xLjRsLS40Ni0xLjEzNmMtLjA2OS0uMTctLjEtLjIzNy0xLjc2My0uMTkxbC0uMzY0LS4zNjdhOC4xMzgsOC4xMzgsMCwwLDAtLjA1Ny0xLjY1N2wtLjA0Ny0uMTA2LTEuMi0uNTI1Yy0uMTc3LS4wODEtLjIzOS0uMTEtMS4zNzIsMS4xMjRsLS41MDktLjAwOGMtMS4xNjctMS4yNDUtMS4yMjItMS4yMjMtMS40LTEuMTUybC0xLjExNS40NTJjLS4xNzUuMDcxLS4yMzYuMS0uMTY5LDEuNzlsLS4zNi4zNTljLTEuNjgtLjA1NS0xLjcsMC0xLjc3OC4xNzdMMTguNjA2LDIwbC0uMDM2LjEwOC4wMzguMDk0Yy4wMi4wNDguMDc4LjE5NCwxLjEzLDEuMnYuNTI1Yy0xLjIxMSwxLjE2Ni0xLjE4NCwxLjIyNi0xLjExNSwxLjRsLjQ1OSwxLjEzN2MuMDcuMTc0LjEuMjM2LDEuNzYzLjE5MmwuMzYzLjM3N2E4LjE2OSw4LjE2OSwwLDAsMCwuMDU1LDEuNjU0bC4wNDcuMTA3LDEuMjA4LjUyOGMuMTc2LjA3My4yMzYuMSwxLjM2Ni0xLjEzbC41MDkuMDA2YzEuMTY4LDEuMjQ3LDEuMjI4LDEuMjIzLDEuNCwxLjE1NGwxLjExMy0uNDVDMjcuMDgyLDI2LjgyNywyNy4xNDMsMjYuOCwyNy4wNzUsMjUuMTA3Wm0tNC43ODgtMi42MzJhMiwyLDAsMSwxLDIuNjE4LDEuMTRBMi4wMjMsMi4wMjMsMCwwLDEsMjIuMjg3LDIyLjQ3NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiM5OWI4YzRcXFwiLz5cIixcblx0fSxcblx0XCJUd2lnXCI6IHtcblx0XHRjb2xvdXI6IFwiIzc4ZGM1MFwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTQuNTc0LDUuNDYzYy4yNjIuNCwyLjUtMS42MDgsNC40NTQtMS4xNjEsMi4wNjEuNDcyLDQuMDE0LDMuNzI0LDQuODQ4LDEzLjdhNDAuMTgsNDAuMTgsMCwwLDEsMy41NDEsMy42MXEuNTMuNjE0LDEuMDEzLDEuMjJhMTEuODQ3LDExLjg0NywwLDAsMSwuMjI5LTEuNCwxMi4zLDEyLjMsMCwwLDEsMS45ODEtNC40QTE5LjE1MSwxOS4xNTEsMCwwLDAsMTcuMjcyLDcuOWMtMS4wMy0xLjQ0NS00LjYtNi40NzgtOC41NDYtNS44NDNDNi4xODIsMi40NjUsNC4zLDUuMDU0LDQuNTc0LDUuNDYzWlxcXCIgc3R5bGU9XFxcImZpbGw6IzYzYmY2YVxcXCIvPjxwYXRoIGQ9XFxcIk0yNC40LDMwYy0uMzItMi41NjctLjQ0OC00Ljc2LS41LTYuNDQ5LS4wOTQtMy4yMzIuMS00LjU0MS45LTUuNzU2LjE5My0uMjk1LDEuMjg4LTEuOTc1LDIuNTgtMS44NjMsMS40NjYuMTI4LDIuMjEzLDIuNDE0LDIuMzYyLDIuMzM3LjE3NS0uMDktLjM2LTMuNTQzLTIuNTMyLTQuNDMxLTIuNi0xLjA2My02LjMxMiwyLjA3LTcuOCw1LjE1NGExMi4yMjMsMTIuMjIzLDAsMCwwLS44NTcsMi44MSwzMi41NTUsMzIuNTU1LDAsMCwwLS43MSw4LjJaXFxcIiBzdHlsZT1cXFwiZmlsbDojNzRkNzRkXFxcIi8+PHBhdGggZD1cXFwiTTIuMjM4LDEzLjkzNWMuMTQ1LS40NDcsMi40NjgtLjI1OSw0LjU0LjI5MywyLjUuNjY2LDcsMi4zNDQsMTEuNjUxLDguNjA2QTEyLjU0NCwxMi41NDQsMCwwLDEsMjAuMjc5LDMwSDEwLjM4NmEyMS44NzUsMjEuODc1LDAsMCwwLS4xNzUtNC42MiwxNC45LDE0LjksMCwwLDAtMi40NTktNy4xNThDNS40NDEsMTUuMTU5LDIuMDU1LDE0LjUsMi4yMzgsMTMuOTM1WlxcXCIgc3R5bGU9XFxcImZpbGw6Izc4ZGM1MFxcXCIvPjxwYXRoIGQ9XFxcIk0xNy4zLDIxLjMyM2ExLjc1MywxLjc1MywwLDEsMS0uNTEzLTEuMjRBMS43NDgsMS43NDgsMCwwLDEsMTcuMywyMS4zMjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+PHBhdGggZD1cXFwiTTIxLjk3NSwyMS4zMjNhMS43NTMsMS43NTMsMCwxLDEtLjUxMy0xLjI0QTEuNzQ4LDEuNzQ4LDAsMCwxLDIxLjk3NSwyMS4zMjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiVHlwZVNjcmlwdFwiOiB7XG5cdFx0Y29sb3VyOiBcIiMzMTc4YzZcIixcblx0XHRpY29uOiBcIjxyZWN0IHg9XFxcIjJcXFwiIHk9XFxcIjJcXFwiIHdpZHRoPVxcXCIyOFxcXCIgaGVpZ2h0PVxcXCIyOFxcXCIgcng9XFxcIjEuMzEyXFxcIiBzdHlsZT1cXFwiZmlsbDojMzE3OGM2XFxcIi8+PHBhdGggZD1cXFwiTTE4LjI0NSwyMy43NTl2My4wNjhhNi40OTIsNi40OTIsMCwwLDAsMS43NjQuNTc1LDExLjU2LDExLjU2LDAsMCwwLDIuMTQ2LjE5Miw5Ljk2OCw5Ljk2OCwwLDAsMCwyLjA4OC0uMjExLDUuMTEsNS4xMSwwLDAsMCwxLjczNS0uNywzLjU0MiwzLjU0MiwwLDAsMCwxLjE4MS0xLjI2Niw0LjQ2OSw0LjQ2OSwwLDAsMCwuMTg2LTMuMzk0LDMuNDA5LDMuNDA5LDAsMCwwLS43MTctMS4xMTcsNS4yMzYsNS4yMzYsMCwwLDAtMS4xMjMtLjg3NywxMi4wMjcsMTIuMDI3LDAsMCwwLTEuNDc3LS43MzRxLS42LS4yNDktMS4wOC0uNDg0YTUuNSw1LjUsMCwwLDEtLjgxMy0uNDc5LDIuMDg5LDIuMDg5LDAsMCwxLS41MTYtLjUxOCwxLjA5MSwxLjA5MSwwLDAsMS0uMTgxLS42MTgsMS4wMzksMS4wMzksMCwwLDEsLjE2Mi0uNTcxLDEuNCwxLjQsMCwwLDEsLjQ1OS0uNDM2LDIuNDM5LDIuNDM5LDAsMCwxLC43MjYtLjI4Myw0LjIxMSw0LjIxMSwwLDAsMSwuOTU2LS4xLDUuOTQyLDUuOTQyLDAsMCwxLC44MDguMDU4LDYuMjkyLDYuMjkyLDAsMCwxLC44NTYuMTc3LDUuOTk0LDUuOTk0LDAsMCwxLC44MzYuMyw0LjY1Nyw0LjY1NywwLDAsMSwuNzUxLjQyMlYxMy45YTcuNTA5LDcuNTA5LDAsMCwwLTEuNTI1LS40LDEyLjQyNiwxMi40MjYsMCwwLDAtMS45LS4xMjksOC43NjcsOC43NjcsMCwwLDAtMi4wNjQuMjM1LDUuMjM5LDUuMjM5LDAsMCwwLTEuNzE2LjczMywzLjY1NSwzLjY1NSwwLDAsMC0xLjE3MSwxLjI3MSwzLjczMSwzLjczMSwwLDAsMC0uNDMxLDEuODQ1LDMuNTg4LDMuNTg4LDAsMCwwLC43ODksMi4zNCw2LDYsMCwwLDAsMi4zOTUsMS42MzlxLjYzLjI2LDEuMTc1LjUwOWE2LjQ1OCw2LjQ1OCwwLDAsMSwuOTQyLjUxNywyLjQ2MywyLjQ2MywwLDAsMSwuNjI2LjU4NSwxLjIsMS4yLDAsMCwxLC4yMy43MTksMS4xLDEuMSwwLDAsMS0uMTQ0LjU1MiwxLjI2OSwxLjI2OSwwLDAsMS0uNDM1LjQ0MSwyLjM4MSwyLjM4MSwwLDAsMS0uNzI2LjI5Miw0LjM3Nyw0LjM3NywwLDAsMS0xLjAxOC4xMDUsNS43NzMsNS43NzMsMCwwLDEtMS45NjktLjM1QTUuODc0LDUuODc0LDAsMCwxLDE4LjI0NSwyMy43NTlabS01LjE1NC03LjYzOGg0VjEzLjU5NEg1LjkzOHYyLjUyN0g5LjkyVjI3LjM3NWgzLjE3MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz5cIixcblx0XHRpbmxpbmVDb21tZW50OiBbXG5cdFx0XHRcIi8vXCIsXG5cdFx0XSxcblx0fSxcblx0XCJUeXBvU2NyaXB0XCI6IHtcblx0XHRjb2xvdXI6IFwiI2ZmODcwMFwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIzLjA5MywyMS4zYTMuODQ3LDMuODQ3LDAsMCwxLTEuMTguMTY1Yy0zLjU1NSwwLTguNzc4LTEyLjQyNC04Ljc3OC0xNi41NTksMC0xLjUyMy4zNjItMi4wMzEuODctMi40NjZDOS42NTMsMi45NDMsNC40Myw0LjUzOSwyLjc2MSw2LjU3YTQuMDQ4LDQuMDQ4LDAsMCwwLS41OCwyLjMyMUMyLjE4MSwxNS4zNDgsOS4wNzIsMzAsMTMuOTMzLDMwYzIuMjQ4LDAsNi4wNDEtMy43LDkuMTYtOC43XFxcIiBzdHlsZT1cXFwiZmlsbDojZmY4NzAwXFxcIi8+PHBhdGggZD1cXFwiTTIwLjgyMywyYzQuNSwwLDksLjcyNSw5LDMuMjY0LDAsNS4xNTEtMy4yNjQsMTEuMzg5LTQuOTMzLDExLjM4OS0yLjk3NCwwLTYuNjczLTguMjY5LTYuNjczLTEyLjQsMC0xLjg4Ni43MjUtMi4yNDksMi42MTEtMi4yNDlcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZjg3MDBcXFwiLz5cIixcblx0fSxcblx0XCJWXCI6IHtcblx0XHRjb2xvdXI6IFwiIzVkODdiZlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIwLjQ2NywyOS4yODgsMjkuOTUyLDIuOTEzYS41LjUsMCwwLDAtLjU2Ni0uNzI4TDIxLjkyNywyLjlhMS40NjQsMS40NjQsMCwwLDAtMS4xNDEuOUwxMi4wMDcsMjkuMDA2YS41NzMuNTczLDAsMCwwLC41NzguODEzaDcuMjZhLjY1Ny42NTcsMCwwLDAsLjU3Ny0uNFpcXFwiIHN0eWxlPVxcXCJmaWxsOiM1MzZiOGFcXFwiLz48cGF0aCBkPVxcXCJNMi42MTQsMi4xODVsNy40NTkuNzE5YTEuNDY2LDEuNDY2LDAsMCwxLDEuMTQyLjlMMjAuMTgsMjkuNDEzYS4yODYuMjg2LDAsMCwxLS4yODkuNDA2SDEyLjU4NWExLjMxMSwxLjMxMSwwLDAsMS0xLjE1Mi0uODFMMi4wNDgsMi45MTNBLjUuNSwwLDAsMSwyLjYxNCwyLjE4NVpcXFwiIHN0eWxlPVxcXCJmaWxsOiM1ZDg3YmZcXFwiLz5cIixcblx0fSxcblx0XCJWYWxhXCI6IHtcblx0XHRjb2xvdXI6IFwiIzQwMzc1N1wiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTEyLjUwOSwxNy4xOTNjLS4xNjUtNi44MzYtLjMyNS0xMi40NTUtLjM1Ny0xMi40ODdBNy45MTYsNy45MTYsMCwwLDAsOS44NzksNS44NzQsNy42MDYsNy42MDYsMCwwLDAsNy4zMjQsOS4xODhhOC40MjIsOC40MjIsMCwwLDAtLjU4NywzLjU0Myw0LjY2NSw0LjY2NSwwLDAsMCwuMiwxLjk2MiwzLjQxNywzLjQxNywwLDAsMSwuMTgyLjU2Yy0uMDEyLjAwOS0uMzM4LS4wMTgtLjcyNC0uMDYxLTEuODY4LS4yMDctMi43ODYtMS4wNS0zLTIuNzU3QTYuMzEyLDYuMzEyLDAsMCwxLDQuODUsNy43MTlhMTUuMTM0LDE1LjEzNCwwLDAsMSw4LjQxNC01LjE2MywxMi44OTEsMTIuODkxLDAsMCwxLDIuNTQyLS4yMzVsMS43NDgtLjA1LjA1OSwyLjUwNmMuMDMyLDEuMzc4LjEsNi4zNTguMTYxLDExLjA2N3MtLjI1Miw4LjI5LS4yMTksOC40QzE5LjUsMTcuODc5LDIyLDEzLjA3MywyNC4zNjcsNi4yNTNsMS40MjctMy45ODNIMjguNTRjLS4wMjIuMDYzLTIuNzUxLDYuNS01LjUxNCwxMy45MTZsLTUuNDczLDEzLjU1SDEyLjk3NkMxMi45NzYsMjcuOTA2LDEyLjUzNSwxOC40ODYsMTIuNTA5LDE3LjE5M1pcXFwiIHN0eWxlPVxcXCJmaWxsOiM0MDM3NTdcXFwiLz48cGF0aCBkPVxcXCJNMTcuNzMyLDMwSDEyLjcxM3YtLjI2M2MwLTEuMTM3LS4xNy01LjE5Mi0uMzA3LTguNDUyLS4wODEtMS45MjktLjE1LTMuNi0uMTYxLTQuMDg3LS4xNTYtNi40NzktLjI4Ni0xMS0uMzM2LTEyLjE2M2ExMS42NzQsMTEuNjc0LDAsMCwwLTEuODc0LDEuMDQ5LDcuMzQ4LDcuMzQ4LDAsMCwwLTIuNDY2LDMuMkE4LjE0Niw4LjE0NiwwLDAsMCw3LDEyLjczMSw0LjM3LDQuMzcsMCwwLDAsNy4xODUsMTQuNmMuMjE1LjU2OS4yNzMuNzIzLjEuODU5LS4wOTMuMDczLS4xMDcuMDg0LS45MTYtLjAwNy0xLjk3Ni0uMjE5LTMtMS4xNjctMy4yMzQtMi45ODZBNi41NjgsNi41NjgsMCwwLDEsNC42NCw3LjU2MSwxNS40MzksMTUuNDM5LDAsMCwxLDEzLjIsMi4zLDEzLjE3NiwxMy4xNzYsMCwwLDEsMTUuOCwyLjA1OEwxNy44MTEsMmwuMDY1LDIuNzdjLjAzMiwxLjM5Mi4xMDYsNi40NjEuMTYxLDExLjA3LjAzMSwyLjYxNi0uMDUyLDQuOTE1LS4xMjQsNi40My45MzEtMi43NjMsMS45NTgtNS4yNywzLjAzMy03LjksMS4wNDMtMi41NDcsMi4xMjItNS4xOCwzLjE3My04LjIwN2wxLjQ5MS00LjE2aDMuM2wtLjEyNS4zNTFjMCwuMDA3LS4wMzEuMDc2LS4wODQuMi0xLjEsMi42MjItMy4yNTksNy44ODktNS40MywxMy43MTdabS00LjQ5NS0uNTI2aDQuMTRsNS40MDctMTMuMzg2YzIuMTI0LTUuNyw0LjI0My0xMC44NzYsNS4zNjItMTMuNTU1SDI1Ljk3OUwyNC42MTQsNi4zNDJjLTEuMDU1LDMuMDM4LTIuMTM3LDUuNjc4LTMuMTgzLDguMjMxLTEuMzExLDMuMi0yLjU1LDYuMjI2LTMuNjI2LDkuNzQ3bC0uMjU1LjgzMS0uMjQ4LS44MzNhMy4yNzQsMy4yNzQsMCwwLDEsLjAyMS0uODM5Yy4wNzQtMS4zNS4yMjktNC4xNTguMTg4LTcuNjMzLS4wNTUtNC42MDctLjEyOS05LjY3NC0uMTYxLTExLjA2NEwxNy4zLDIuNTQxbC0xLjQ4NC4wNDNhMTIuNzI5LDEyLjcyOSwwLDAsMC0yLjQ5LjIyOEExNC44ODcsMTQuODg3LDAsMCwwLDUuMDYsNy44NzdhNi4wNzEsNi4wNzEsMCwwLDAtMS40LDQuNTI0Yy4yLDEuNTgsMS4wMjgsMi4zMzYsMi43NywyLjUyOWwuMzMzLjAzNWMtLjAxOS0uMDU0LS4wNDEtLjExNC0uMDY2LS4xNzlhNC44OTMsNC44OTMsMCwwLDEtLjIxOS0yLjA1NSw4LjcsOC43LDAsMCwxLC42LTMuNjM4LDcuODgzLDcuODgzLDAsMCwxLDIuNjQ0LTMuNDNjLjAyMi0uMDE2LDIuMjMyLTEuNTI1LDIuNjE1LTEuMTQyLjA5Mi4wOTIuMTMxLjEzMS40MzMsMTIuNjY2aDBjLjAxLjQ4NS4wOCwyLjE0OS4xNiw0LjA3NkMxMy4wNiwyNC4zMTMsMTMuMjE3LDI4LjA2LDEzLjIzNywyOS40NzRaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzhjOGM4XFxcIi8+XCIsXG5cdH0sXG5cdFwiVkIuTmV0XCI6IHtcblx0XHRjb2xvdXI6IFwiIzAwNTE5YVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTYuNjcsNy44MzYsOSwxOC45MTUsMTEuMzM2LDcuODM2SDE2TDExLjMzNiwyNC4xNjRINi42NzJMMiw3LjgzNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDUxOWFcXFwiLz48cGF0aCBkPVxcXCJNMTguMzMxLDcuODM2aDcuNmE0LjA4LDQuMDgsMCwwLDEsMi45LDEuNzQ5LDMuNzgsMy43OCwwLDAsMSwuNTcxLDIuMDQsMy45ODUsMy45ODUsMCwwLDEtLjU3MSwyLjAzNCw0LjEwOCw0LjEwOCwwLDAsMS0yLjM0MSwxLjc2Myw0LjEsNC4xLDAsMCwxLDIuOTI5LDEuNzU2LDMuOCwzLjgsMCwwLDEsLjU4LDIuMSw0LjY2Myw0LjY2MywwLDAsMS0uNTc5LDIuNTQ2LDUuMDQ3LDUuMDQ3LDAsMCwxLTMuNSwyLjMzOEgxOC4zMzFaTTIzLDE0LjI1MmgxLjE2NmExLjc1NCwxLjc1NCwwLDAsMCwwLTMuNUgyM1ptMCw3SDI0LjM5YTIuMDQ3LDIuMDQ3LDAsMCwwLDAtNC4wODlIMjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMDA1MTlhXFxcIi8+XCIsXG5cdH0sXG5cdFwiVkJBXCI6IHtcblx0XHRjb2xvdXI6IFwiI2Q4N2IzMFwiLFxuXHRcdGljb246IFwiPHBvbHlnb24gcG9pbnRzPVxcXCIxMC40NTcgMTEuMDkyIDE2LjAxNCAxMy44MzkgMTYuMDE0IDE4LjMwNyAxMC40NTcgMTUuMzgyIDEwLjQ1NyAxMS4wOTJcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NDgzYzBcXFwiLz48cGF0aCBkPVxcXCJNMTYuMiwxOC42MTNsLTUuOTI2LTMuMTJWMTAuOEwxNi4yLDEzLjcyNFpNMTAuNjQyLDE1LjI3LDE1LjgzLDE4VjEzLjk1M2wtNS4xODgtMi41NjRaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNi4zNzEgMTMuODM5IDE2LjM3MSAxOC4zMDcgMjEuMzE1IDE1LjgxNCAyMS4zMTUgMTEuMzU0IDE2LjM3MSAxMy44MzlcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NDgzYzBcXFwiLz48cGF0aCBkPVxcXCJNMTYuMTg2LDE4LjYwN1YxMy43MjVsNS4zMTMtMi42N3Y0Ljg3M1ptLjM2OS00LjY1NXY0LjA1NUwyMS4xMywxNS43VjExLjY1M1pcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjEwLjcwMyAxMC43OTcgMTYuMTg2IDEzLjU4IDIxLjA4MiAxMS4wNjQgMTUuNzc3IDguMzg5IDEwLjcwMyAxMC43OTdcXFwiIHN0eWxlPVxcXCJmaWxsOiM2NDgzYzBcXFwiLz48cGF0aCBkPVxcXCJNMTYuMTg3LDEzLjc4OGwtNS45LTMsNS41LTIuNjA4LDUuNzA5LDIuODc5Wk0xMS4xMjIsMTAuOGw1LjA2NCwyLjU3LDQuNDktMi4zMDgtNC45LTIuNDcxWlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTguOTU3IDE1LjgyOSAyNC41MTUgMTguNTc1IDI0LjUxNSAyMy4wNDMgMTguOTU3IDIwLjExOCAxOC45NTcgMTUuODI5XFxcIiBzdHlsZT1cXFwiZmlsbDojOTUyNzgxXFxcIi8+PHBhdGggZD1cXFwiTTI0LjcsMjMuMzQ5bC01LjkyNi0zLjEydi00LjdMMjQuNywxOC40NlptLTUuNTU3LTMuMzQzLDUuMTg4LDIuNzMxVjE4LjY4OWwtNS4xODgtMi41NjRaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNC44NzEgMTguNTc1IDI0Ljg3MSAyMy4wNDMgMjkuODE1IDIwLjU1IDI5LjgxNSAxNi4wOSAyNC44NzEgMTguNTc1XFxcIiBzdHlsZT1cXFwiZmlsbDojOTUyNzgxXFxcIi8+PHBhdGggZD1cXFwiTTI0LjY4NywyMy4zNDNWMTguNDYxTDMwLDE1Ljc5MXY0Ljg3M1ptLjM2OS00LjY1NXY0LjA1NWw0LjU3NS0yLjMwOFYxNi4zODlaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxOS4yMDMgMTUuNTQ2IDI0LjY4NyAxOC4zMjkgMjkuNTgzIDE1LjgxMiAyNC4zNjQgMTMuMzQ2IDE5LjIwMyAxNS41NDZcXFwiIHN0eWxlPVxcXCJmaWxsOiM5NTI3ODFcXFwiLz48cGF0aCBkPVxcXCJNMjQuNjg3LDE4LjUzNmwtNS45Mi0zLjAwNSw1LjYtMi4zODdMMzAsMTUuODA1Wk0xOS42NCwxNS41Nmw1LjA0NiwyLjU2MSw0LjQ3OS0yLjMtNC44MDYtMi4yN1pcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIuMTkgMTUuNDk2IDcuNzQ4IDE4LjI0MyA3Ljc0OCAyMi43MTEgMi4xOSAxOS43ODYgMi4xOSAxNS40OTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNkODdiMzBcXFwiLz48cGF0aCBkPVxcXCJNNy45MzIsMjMuMDE3LDIuMDA2LDE5LjlWMTUuMmw1LjkyNiwyLjkyOVpNMi4zNzUsMTkuNjc0bDUuMTg4LDIuNzMxVjE4LjM1N0wyLjM3NSwxNS43OTNaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI4LjEwNCAxOC4yNDMgOC4xMDQgMjIuNzExIDEzLjA0OCAyMC4yMTggMTMuMDQ4IDE1Ljc1OCA4LjEwNCAxOC4yNDNcXFwiIHN0eWxlPVxcXCJmaWxsOiNkODdiMzBcXFwiLz48cGF0aCBkPVxcXCJNNy45MiwyMy4wMTFWMTguMTI5bDUuMzEzLTIuNjd2NC44NzNabS4zNjktNC42NTV2NC4wNTVMMTIuODY0LDIwLjFWMTYuMDU3WlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMi40MzYgMTUuMjEzIDcuOTIgMTcuOTk3IDEyLjgxNiAxNS40OCA3LjU5NyAxMy4wMTQgMi40MzYgMTUuMjEzXFxcIiBzdHlsZT1cXFwiZmlsbDojZDg3YjMwXFxcIi8+PHBhdGggZD1cXFwiTTcuOTIsMTguMiwyLDE1LjJsNS42LTIuMzg3LDUuNjMyLDIuNjYxWk0yLjg3MywxNS4yMjhsNS4wNDYsMi41NjEsNC40NzktMi4zLTQuODA2LTIuMjdaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxMC44NzUgMTYuMjk2IDE2LjQzMiAxOS4wNDIgMTYuNDMyIDIzLjUxMSAxMC44NzUgMjAuNTg1IDEwLjg3NSAxNi4yOTZcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMGQ0MDBcXFwiLz48cGF0aCBkPVxcXCJNMTYuNjE3LDIzLjgxNiwxMC42OTEsMjAuN1YxNmw1LjkyNiwyLjkyOVpNMTEuMDYsMjAuNDc0bDUuMTg4LDIuNzMxVjE5LjE1N0wxMS4wNiwxNi41OTNaXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNi43ODkgMTkuMDQyIDE2Ljc4OSAyMy41MTEgMjEuNzMzIDIxLjAxNyAyMS43MzMgMTYuNTU3IDE2Ljc4OSAxOS4wNDJcXFwiIHN0eWxlPVxcXCJmaWxsOiNlMGQ0MDBcXFwiLz48cGF0aCBkPVxcXCJNMTYuNiwyMy44MTFWMTguOTI5bDUuMzEzLTIuNjd2NC44NzNabS4zNjktNC42NTV2NC4wNTVMMjEuNTQ5LDIwLjlWMTYuODU3WlxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTEuMTIxIDE2LjAwMSAxNi42MDUgMTguNzg0IDIxLjUwMSAxNi4yNjcgMTYuMTk2IDEzLjU5MyAxMS4xMjEgMTYuMDAxXFxcIiBzdHlsZT1cXFwiZmlsbDojZTBkNDAwXFxcIi8+PHBhdGggZD1cXFwiTTE2LjYwNSwxOC45OTFsLTUuOS0zLDUuNS0yLjYwOCw1LjcwOSwyLjg3OVpNMTEuNTQsMTYuMDA2bDUuMDY0LDIuNTcsNC40OS0yLjMwOC00LjktMi40NzFaXFxcIi8+XCIsXG5cdH0sXG5cdFwiVmVsb2NpdHlcIjoge1xuXHRcdGNvbG91cjogXCIjMjYyNjkyXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMTYuMjQ1LDI0LjE4N0E4LjM1Miw4LjM1MiwwLDEsMSwyNC42LDE1LjgzNSw4LjM2Miw4LjM2MiwwLDAsMSwxNi4yNDUsMjQuMTg3Wm0wLTE0Ljc2MmE2LjQxLDYuNDEsMCwxLDAsNi40MSw2LjQxQTYuNDE3LDYuNDE3LDAsMCwwLDE2LjI0NSw5LjQyNVpcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjI5LjEzMiA4LjU1MSAyNS40NTEgNi41MzEgMjUuNDUxIDcuNDc0IDE1LjgyMSA3LjQ3NCAxNS44MjEgOS40MjQgMjUuNDUxIDkuNDI0IDI1LjQ1MSAxMC41NzEgMjkuMTMyIDguNTUxXFxcIiBzdHlsZT1cXFwiZmlsbDojMjYyNjkyXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI4Ljk4NCAyIDYuOTY0IDUuNjg3IDcuOTA2IDUuNjg3IDcuOTA2IDE1LjMyOCA5Ljg1NyAxNS4zMjggOS44NTcgNS42ODcgMTEuMDA0IDUuNjg3IDguOTg0IDJcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNjI2OTNcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIzLjcwNSAzMCAyMS42ODUgMjYuMjQzIDIyLjYyOCAyNi4yNDMgMjIuNjI4IDE2LjQxNyAyNC41NzggMTYuNDE3IDI0LjU3OCAyNi4yNDMgMjUuNzI1IDI2LjI0MyAyMy43MDUgMzBcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNjI2OTNcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjIuODY4IDIzLjMyIDYuNjM0IDIxLjMgNi42MzQgMjIuMjQyIDE2LjQ4NCAyMi4yNDIgMTYuNDg0IDI0LjE5MiA2LjYzNCAyNC4xOTIgNi42MzQgMjUuMzQgMi44NjggMjMuMzJcXFwiIHN0eWxlPVxcXCJmaWxsOiMyNjI2OTJcXFwiLz5cIixcblx0fSxcblx0XCJWZXJpbG9nXCI6IHtcblx0XHRjb2xvdXI6IFwiIzFhMzQ4ZlwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTI5LjAwNywxNy40aC4wMzdhMS40NDksMS40NDksMCwwLDAsLjkzOC0uMzE2LDEuNDczLDEuNDczLDAsMCwwLC41MTktMS4wMzFWMTUuOWExLjQxMywxLjQxMywwLDAsMC0xLjM3Ni0xLjNoLS4wMDljLS42ODcsMC0xLjM3NCwwLTIuMDYyLDBIMjUuNVYxMS45NTZsMy41MTMsMGguMDM0QTEuNDExLDEuNDExLDAsMCwwLDMwLjUsMTAuNmwwLS4wOSwwLS4wMzJhMS40MTIsMS40MTIsMCwwLDAtLjY0Ni0xLjEsMS40NTUsMS40NTUsMCwwLDAtLjgzNS0uMjI1SDI1LjQ1NmEyLjk2LDIuOTYsMCwwLDAtLjI3OC0xLjAzNCwyLjkwOSwyLjkwOSwwLDAsMC0xLjctMS40NjEsMi42ODQsMi42ODQsMCwwLDAtLjYyOS0uMTNWNC45NDdjMC0uNjksMC0xLjM4LDAtMi4wNjNBMS40MTQsMS40MTQsMCwwLDAsMjEuNDgxLDEuNWgtLjExNmExLjQsMS40LDAsMCwwLTEuMzE5LDEuMzg4cTAsMS4xNTQsMCwyLjMwNlY2LjVIMTcuNFY0Ljk4MWMwLS43LDAtMS40LDAtMi4wODdBMS40MSwxLjQxLDAsMCwwLDE2LjA1MywxLjVIMTUuOWExLjQwOCwxLjQwOCwwLDAsMC0xLjMsMS4zODNjMCwuNjg4LDAsMS4zNzYsMCwyLjA2NFY2LjUwOHEtMS4zMTksMC0yLjYzOSwwVjQuODg4YzAtLjY2NiwwLTEuMzMyLDAtMS45ODlhMS4zNjYsMS4zNjYsMCwwLDAtLjQtLjk3NSwxLjQsMS40LDAsMCwwLS45ODQtLjQyNEgxMC41QTEuNDEsMS40MSwwLDAsMCw5LjE1OSwyLjg4MWMwLC42ODMsMCwxLjM2NiwwLDIuMDQ5djEuNmEyLjkzMywyLjkzMywwLDAsMC0yLjQ2NiwxLjksMi44NzgsMi44NzgsMCwwLDAtLjE2MS43MjZINC45NTdjLS42OTMsMC0xLjM4NiwwLTIuMDczLDBIMi44NzZBMS40MTMsMS40MTMsMCwwLDAsMS41LDEwLjV2LjA5NWExLjQxNywxLjQxNywwLDAsMCwuNTc1LDEuMDkxLDEuNDYzLDEuNDYzLDAsMCwwLC44ODcuMjczaC4wMTdsMy41MjIsMFYxNC42SDQuOTQ4Yy0uNjg2LDAtMS4zNzUsMC0yLjA1NywwQTEuNDI4LDEuNDI4LDAsMCwwLDEuNSwxNS45MTNWMTYuMWExLjQsMS40LDAsMCwwLDEuMzg2LDEuM2MuNzExLDAsMS40MjMsMCwyLjEzNSwwSDYuNVYyMC4wNWwtLjI5MiwwYy0uNjEzLS4wMDctMS4yMjYsMC0xLjgzOCwwSDMuMDg3YTEuNjMzLDEuNjMzLDAsMCwwLS45MTguMjExQTEuNDM3LDEuNDM3LDAsMCwwLDEuNSwyMS40VjIxLjVhMS40MTcsMS40MTcsMCwwLDAsMS4zNzUsMS4zMzdoLjAwNXEuNjQ1LDAsMS4yOSwwSDYuNTQ2YTIuODMyLDIuODMyLDAsMCwwLDEuOTc4LDIuNSwyLjcxMiwyLjcxMiwwLDAsMCwuNjMxLjEyOHYxLjYyYzAsLjY3OCwwLDEuMzU0LDAsMi4wMjVhMS40LDEuNCwwLDEsMCwyLjgtLjA5MmwwLTMuNTI3SDE0LjZ2My41MTZBMS40MTQsMS40MTQsMCwwLDAsMTUuOTQ3LDMwLjVIMTYuMWExLjQxMSwxLjQxMSwwLDAsMCwxLjMtMS4zODVxLjAwNi0xLjA2NiwwLTIuMTMxVjI1LjVoMi42NDRWMjkuMUExLjQyMywxLjQyMywwLDAsMCwyMS40LDMwLjVoLjExOWExLjQwOCwxLjQwOCwwLDAsMCwxLjE2LS43NDEsMS42NDMsMS42NDMsMCwwLDAsLjE2Ny0uODMzVjI1LjQ3NGEyLjY3MSwyLjY3MSwwLDAsMCwuNjItLjEyOCwyLjkyOCwyLjkyOCwwLDAsMCwxLjg4Ni0xLjg4OCwyLjgzNCwyLjgzNCwwLDAsMCwuMTIzLS42MTNoMS41ODFjLjY4NywwLDEuMzc1LDAsMi4wNTcsMGguMDA4QTEuNDIyLDEuNDIyLDAsMCwwLDMwLjUsMjEuNDgxdi0uMTE4YTEuNDA5LDEuNDA5LDAsMCwwLTEuMzgyLTEuMzE4aDBjLS43MTgsMC0xLjQzNiwwLTIuMTU0LDBIMjUuNVYxNy40WlxcXCIgc3R5bGU9XFxcImZpbGw6I2M1YzVjNTtvcGFjaXR5OjAuM1xcXCIvPjxwYXRoIGQ9XFxcIk0xMC41MTUsMmguMDU2YS45MS45MSwwLDAsMSwuODg2Ljg5M2MuMDA2LDEuMTA4LDAsMi4yMTYsMCwzLjMyNC0uNiwwLTEuMiwwLTEuOCwwLDAtMS4xMTEsMC0yLjIyMiwwLTMuMzMzQS45MDcuOTA3LDAsMCwxLDEwLjUxNSwyWlxcXCIgc3R5bGU9XFxcImZpbGw6IzFhMzQ4ZlxcXCIvPjxwYXRoIGQ9XFxcIk0xNS45MzcsMmguMTE2YS45MTIuOTEyLDAsMCwxLC44NDYuODg5Yy4wMDYsMS4xMDksMCwyLjIxOSwwLDMuMzI5SDE1LjFjMC0xLjExLDAtMi4yMiwwLTMuMzNBLjkxMS45MTEsMCwwLDEsMTUuOTM3LDJaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTIxLjM5MiwyaC4wODlhLjkwNy45MDcsMCwwLDEsLjg1OS44ODFjLjAwNywxLjExMiwwLDIuMjI1LDAsMy4zMzdoLTEuOGMwLTEuMTA5LDAtMi4yMTcsMC0zLjMyNkEuOTEyLjkxMiwwLDAsMSwyMS4zOTIsMlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMxYTM0OGZcXFwiLz48cGF0aCBkPVxcXCJNMiwxMC41MThhLjkwOC45MDgsMCwwLDEsLjg4Mi0uODU5YzEuMTEyLS4wMDcsMi4yMjMsMCwzLjMzNCwwcTAsLjksMCwxLjhjLTEuMDc5LDAtMi4xNTgsMC0zLjIzNywwYS45ODMuOTgzLDAsMCwxLS42LS4xNzNBLjkyNC45MjQsMCwwLDEsMiwxMC41NzFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTI1Ljc4Niw5LjY1NWgzLjIzM2ExLDEsMCwwLDEsLjU2MS4xNDMuOTI0LjkyNCwwLDAsMSwuNDIuNzE2di4wNThhLjkzMy45MzMsMCwwLDEtLjMuNjUxLjk1Ny45NTcsMCwwLDEtLjY3Ny4yMzRjLTEuMDc5LDAtMi4xNTgsMC0zLjIzNywwUTI1Ljc4NiwxMC41NTYsMjUuNzg2LDkuNjU1WlxcXCIgc3R5bGU9XFxcImZpbGw6IzFhMzQ4ZlxcXCIvPjxwYXRoIGQ9XFxcIk0yLDE1Ljk0NGEuOTEzLjkxMywwLDAsMSwuODg4LS44NDJjMS4xMDktLjAwNywyLjIxOSwwLDMuMzI4LDBxMCwuOSwwLDEuOGMtMS4xMDksMC0yLjIxNywwLTMuMzI2LDBBLjkxNS45MTUsMCwwLDEsMiwxNi4wNjNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTI1Ljc4NiwxNS4xYzEuMTA5LDAsMi4yMTgsMCwzLjMyNiwwYS45MTQuOTE0LDAsMCwxLC44ODkuODM1di4xMTdhLjk0Ni45NDYsMCwwLDEtLjMzMS42NDEuOTczLjk3MywwLDAsMS0uNjUxLjIwN0gyNS43ODZRMjUuNzg1LDE2LDI1Ljc4NiwxNS4xWlxcXCIgc3R5bGU9XFxcImZpbGw6IzFhMzQ4ZlxcXCIvPjxwYXRoIGQ9XFxcIk0yLjQzMywyMC42NzhhMS4xMjEsMS4xMjEsMCwwLDEsLjY0My0uMTM2YzEuMDQzLjAwNiwyLjA4Ni0uMDA2LDMuMTI5LjAwNi4wMjguNiwwLDEuMi4wMTIsMS44LTEuMTEsMC0yLjIyMSwwLTMuMzMxLDBBLjkxMS45MTEsMCwwLDEsMiwyMS40ODNWMjEuNEEuOTI1LjkyNSwwLDAsMSwyLjQzMywyMC42NzhaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTI1Ljc4NiwyMC41NDNjMS4xMDgsMCwyLjIxNiwwLDMuMzI0LDBhLjkxNC45MTQsMCwwLDEsLjg5Ljg0N3YuMDlhLjkxMS45MTEsMCwwLDEtLjg4OC44NTljLTEuMTA5LjAwNy0yLjIxOCwwLTMuMzI2LDBDMjUuNzg2LDIxLjc0MywyNS43ODUsMjEuMTQzLDI1Ljc4NiwyMC41NDNaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTkuNjU2LDI1Ljc4MWgxLjhjMCwxLjA4MSwwLDIuMTYyLDAsMy4yNDNhLjk1Ny45NTcsMCwwLDEtLjIzNS42NzcuOTMxLjkzMSwwLDAsMS0uNjUzLjNoLS4wNTJhLjkwNy45MDcsMCwwLDEtLjg2LS44ODJDOS42NTEsMjguMDA2LDkuNjU4LDI2Ljg5NCw5LjY1NiwyNS43ODFaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTE1LjEsMjUuNzgxaDEuOGMwLDEuMTEsMCwyLjIyLDAsMy4zM2EuOTE0LjkxNCwwLDAsMS0uODM2Ljg4OWgtLjExNmEuOTQuOTQsMCwwLDEtLjYxOS0uMzA2Ljk2Mi45NjIsMCwwLDEtLjIyOC0uNjczUTE1LjEsMjcuNCwxNS4xLDI1Ljc4MVpcXFwiIHN0eWxlPVxcXCJmaWxsOiMxYTM0OGZcXFwiLz48cGF0aCBkPVxcXCJNMjAuNTQ3LDI5LjEwNmMwLTEuMTA4LDAtMi4yMTcsMC0zLjMyNWgxLjhjMCwxLjA0OCwwLDIuMSwwLDMuMTQ0YTEuMTc4LDEuMTc4LDAsMCwxLS4xMDUuNTkuOTIuOTIsMCwwLDEtLjc1Ni40ODRIMjEuNEEuOTExLjkxMSwwLDAsMSwyMC41NDcsMjkuMTA2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzFhMzQ4ZlxcXCIvPjxwYXRoIGQ9XFxcIk0yNC43MzIsOC4zNDlBMi40MjksMi40MjksMCwwLDAsMjMuMzEsNy4xMzEsMy4yNDUsMy4yNDUsMCwwLDAsMjIuMjU0LDdjLTQuMy4wMDgtOC42LS4wMTEtMTIuOTA1LjAxQTIuNDM2LDIuNDM2LDAsMCwwLDcuMTU3LDguNjA2LDMuNjExLDMuNjExLDAsMCwwLDcsOS45MzRxMCw2LjI1LDAsMTIuNWEyLjY3MywyLjY3MywwLDAsMCwuMjY4LDEuMjE5QTIuNDMxLDIuNDMxLDAsMCwwLDguNjg4LDI0Ljg3LDMuNzU2LDMuNzU2LDAsMCwwLDkuOTI3LDI1SDIyLjA3YTMuNzYyLDMuNzYyLDAsMCwwLDEuMjQzLS4xMjdBMi40MjksMi40MjksMCwwLDAsMjQuODc1LDIzLjMsMy44LDMuOCwwLDAsMCwyNSwyMi4wNzFxMC02LjI1LDAtMTIuNUEyLjY4NiwyLjY4NiwwLDAsMCwyNC43MzIsOC4zNDlaXFxcIiBzdHlsZT1cXFwiZmlsbDojMWEzNDhmXFxcIi8+PHBhdGggZD1cXFwiTTcuNSw4LjMwN2wuMDg0LS4ycS45NjgsMCwxLjkzNS4wMjRoLjM5NHEuMTc5LDAsLjM5NC0uMDEyLjc3Ni0uMDM2LDIuODA3LS4wMzYuNDA2LDAsLjc4OC4wMDZ0Ljc0MS4wMThhLjIzNC4yMzQsMCwwLDEsLjEwOC4xMDhsLS4wMjQuMTkxcS0uMDcyLjExOS0uMzU4LjExOWgtLjFhMTAuMywxMC4zLDAsMCwwLTEuMS4wNTQsMi4xNzksMi4xNzksMCwwLDAtMSwuMjQ1LjQzMi40MzIsMCwwLDAtLjE1NS4zNDYsNC4wNSw0LjA1LDAsMCwwLC4zOTQsMS40bDEuODE4LDQuMjE3LjYzNCwxLjRxLjkyMSwyLjIyMiwxLjgxOSw0LjUzOS4xLjI1MS4xNzkuNDU0bC44LTEuOTU5cS42Mi0xLjQ4MSwxLjI1Mi0zLjE1NGwuODIzLTIuMjQ2cS4wMjQtLjA3Mi4xMzEtLjQ3OGExNy4wMjYsMTcuMDI2LDAsMCwwLDEuMTU3LTQsLjU2MS41NjEsMCwwLDAtLjE2MS0uMzY0LDEuMTY1LDEuMTY1LDAsMCwwLS41Mi0uMyw3LjcyMyw3LjcyMywwLDAsMC0uOTMyLS4xNDNsLS44ODQtLjEwOGEuMzM3LjMzNywwLDAsMS0uMTA4LS4ybC4wMzYtLjEsMy44Ny0uMDM2SDIzLjZhMy4xLDMuMSwwLDAsMSwuODg1LjA4NGwuMDEyLjFhLjY0MS42NDEsMCwwLDEtLjA3Mi4yNTEsMi40NDksMi40NDksMCwwLDEtLjUyNi4xMTksMy42LDMuNiwwLDAsMC0xLjI0NC4yODEsMS44MTUsMS44MTUsMCwwLDAtLjUuNjg3bC0zLjEzNCw3Ljc2NXEtMS40NjYsMy41LTIuMDg2LDUuNDIzbC0uMzQ1LDEuMDM5YS41MzEuNTMxLDAsMCwxLS4yNjMuMSwxLjM4MywxLjM4MywwLDAsMS0uMy0uMDM2cS0xLjQyMi0zLjY3Ni0yLjMxOC01LjY4MUwxMC4wNTUsOS45MmEzLjI0NywzLjI0NywwLDAsMC0uNTkxLS44OSw1LjQ2Myw1LjQ2MywwLDAsMC0xLjM3OS0uNDI0LDQuMzQ3LDQuMzQ3LDAsMCwxLS40NjYtLjExOUEuMzI2LjMyNiwwLDAsMSw3LjUsOC4zMDdaXFxcIiBzdHlsZT1cXFwiZmlsbDojYzVjMmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiVkhETFwiOiB7XG5cdFx0Y29sb3VyOiBcIiMwZDliMzVcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0yLDJIMzBWMzBIMlptMS42ODkuMDY3QTEuNjI0LDEuNjI0LDAsMCwwLDIuMDYzLDMuNjkyVjI4LjMxNEExLjYyNSwxLjYyNSwwLDAsMCwzLjY4OSwyOS45NEgyOC4zMTZhMS42MjUsMS42MjUsMCwwLDAsMS42MjYtMS42MjZWMy42OTJhMS42MjQsMS42MjQsMCwwLDAtMS42MjYtMS42MjVaTTMuMDA4LDI4LjA3OWEuOTExLjkxMSwwLDAsMCwuOTExLjkxMkgyOC4wODNhLjkxMS45MTEsMCwwLDAsLjkxMS0uOTEyVjMuOTE5YS45MS45MSwwLDAsMC0uOTExLS45MTFIMy45MTlhLjkxLjkxLDAsMCwwLS45MTEuOTExWlxcXCIgc3R5bGU9XFxcImZpbGw6IzBkOWIzNVxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjUuNTIgNS41MDIgMTguODU4IDI2LjQ5MSAxMy4xNTQgMjYuNDkxIDYuNDkyIDUuNTAyIDEwLjUwOCA1LjUwMiAxNi4wMjkgMjIuNzk1IDIxLjUwNCA1LjUwMiAyNS41MiA1LjUwMlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHR9LFxuXHRcInZpbVwiOiB7XG5cdFx0Y29sb3VyOiBcIiM0M2I1NGFcIixcblx0XHRpY29uOiBcIjxkZWZzPjxjbGlwUGF0aCBpZD1cXFwiYVxcXCI+PHBvbHlnb24gcG9pbnRzPVxcXCIyIDIgMzAgMiAzMCAzMCAyIDMwIDIgMiAyIDJcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7Y2xpcC1ydWxlOmV2ZW5vZGRcXFwiLz48L2NsaXBQYXRoPjwvZGVmcz48dGl0bGU+ZmlsZV90eXBlX3ZpbTwvdGl0bGU+PHBvbHlnb24gcG9pbnRzPVxcXCIyOS45ODkgMTUuODU2IDE1Ljg1NiAyLjAxMSAyLjAxMSAxNi4xMzYgMTUuODU2IDI5Ljk4OSAyOS45ODkgMTUuODU2IDI5Ljk4OSAxNS44NTZcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjA7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48ZyBzdHlsZT1cXFwiY2xpcC1wYXRoOnVybCgjYSlcXFwiPjxwb2x5Z29uIHBvaW50cz1cXFwiMjkuOTg5IDE1Ljg1NiAxNS44NTYgMi4wMTEgMi4wMTEgMTYuMTM2IDE1Ljg1NiAyOS45ODkgMjkuOTg5IDE1Ljg1NiAyOS45ODkgMTUuODU2XFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PC9nPjxwb2x5Z29uIHBvaW50cz1cXFwiMjguNTc1IDE1Ljg1NiAyOS40MjIgMTUuODU2IDE1Ljg1NiAyOS40MjIgMTUuODU2IDI4LjU3NSAyOC41NzUgMTUuODU2IDI4LjU3NSAxNS44NTZcXFwiIHN0eWxlPVxcXCJmaWxsOiMyOTY5NWQ7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjI4LjU3NSAxNS44NTYgMjkuNDIyIDE1Ljg1NiAxNS44NTYgMjkuNDIyIDE1Ljg1NiAyOC41NzUgMjguNTc1IDE1Ljg1NiAyOC41NzUgMTUuODU2XFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyLjU3OCAxNi4xMzYgMy40MjUgMTYuMTM2IDE1Ljg1NiAyOC41NzUgMTUuODU2IDI5LjQyMiAyLjU3OCAxNi4xMzYgMi41NzggMTYuMTM2XFxcIiBzdHlsZT1cXFwiZmlsbDojMzE3MzY3O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyLjU3OCAxNi4xMzYgMy40MjUgMTYuMTM2IDE1Ljg1NiAyOC41NzUgMTUuODU2IDI5LjQyMiAyLjU3OCAxNi4xMzYgMi41NzggMTYuMTM2XFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNS44NTYgMy40MTggMTUuODU2IDIuNTc4IDIuNTc4IDE2LjEzNiAzLjQyNSAxNi4xMzYgMTUuODU2IDMuNDE4IDE1Ljg1NiAzLjQxOFxcXCIgc3R5bGU9XFxcImZpbGw6IzYwYzJhYztmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTUuODU2IDMuNDE4IDE1Ljg1NiAyLjU3OCAyLjU3OCAxNi4xMzYgMy40MjUgMTYuMTM2IDE1Ljg1NiAzLjQxOCAxNS44NTYgMy40MThcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE1Ljg1NiAyLjU3OCAxNS44NTYgMy40MTggMjguNTc1IDE1Ljg1NiAyOS40MjIgMTUuODU2IDE1Ljg1NiAyLjU3OCAxNS44NTYgMi41NzhcXFwiIHN0eWxlPVxcXCJmaWxsOiM0M2I1NGE7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE1Ljg1NiAyLjU3OCAxNS44NTYgMy40MTggMjguNTc1IDE1Ljg1NiAyOS40MjIgMTUuODU2IDE1Ljg1NiAyLjU3OCAxNS44NTYgMi41NzhcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE1Ljg1NiAyOC41NzUgMjguNTc1IDE1Ljg1NiAxNS44NTYgMy40MTggMy40MjUgMTYuMTM2IDE1Ljg1NiAyOC41NzUgMTUuODU2IDI4LjU3NVxcXCIgc3R5bGU9XFxcImZpbGw6IzNjODM3NjtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTUuODU2IDI4LjU3NSAyOC41NzUgMTUuODU2IDE1Ljg1NiAzLjQxOCAzLjQyNSAxNi4xMzYgMTUuODU2IDI4LjU3NSAxNS44NTYgMjguNTc1XFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxOC40OTggNi4yNDYgMTkuMzQ1IDcuMSAxMy41MDIgMTMuMDI4IDEzLjUwMiA3LjEgMTQuMDY5IDcuMSAxNC45MTYgNi4yNDYgMTQuOTE2IDMuOTkyIDE0LjA2OSAzLjEzOCA0LjY1MiAzLjEzOCAzLjgwNSAzLjk5MiAzLjgwNSA2LjI0NiA0LjY1MiA3LjEgNS4zMTIgNy4xIDUuMzEyIDI2LjMxNCA2LjM0NiAyNy4xNjEgOS4yNjcgMjcuMTYxIDI5LjUxNiA2LjI0NiAyOS41MTYgMy45OTIgMjguNjY5IDMuMTM4IDE5LjQzOCAzLjEzOCAxOC40OTggMy45OTIgMTguNDk4IDYuMjQ2IDE4LjQ5OCA2LjI0NlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMDtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTguNDk4IDYuMjQ2IDE5LjM0NSA3LjEgMTMuNTAyIDEzLjAyOCAxMy41MDIgNy4xIDE0LjA2OSA3LjEgMTQuOTE2IDYuMjQ2IDE0LjkxNiAzLjk5MiAxNC4wNjkgMy4xMzggNC42NTIgMy4xMzggMy44MDUgMy45OTIgMy44MDUgNi4yNDYgNC42NTIgNy4xIDUuMzEyIDcuMSA1LjMxMiAyNi4zMTQgNi4zNDYgMjcuMTYxIDkuMjY3IDI3LjE2MSAyOS41MTYgNi4yNDYgMjkuNTE2IDMuOTkyIDI4LjY2OSAzLjEzOCAxOS40MzggMy4xMzggMTguNDk4IDMuOTkyIDE4LjQ5OCA2LjI0NiAxOC40OTggNi4yNDZcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjQuOTMyIDYuNTMzIDQuMzY1IDUuOTY2IDQuMzY1IDQuMjcyIDQuOTMyIDMuNzA1IDEzLjc4OSAzLjY5OCAxNC4zNDkgNC4yNzIgMTMuNzg5IDQuNTQ0IDEzLjUwMiA0LjI3MiA0LjkzMiA1LjY3OSA0LjkzMiA2LjUzMyA0LjkzMiA2LjUzM1xcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZjtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiNC45MzIgNi41MzMgNC4zNjUgNS45NjYgNC4zNjUgNC4yNzIgNC45MzIgMy43MDUgMTMuNzg5IDMuNjk4IDE0LjM0OSA0LjI3MiAxMy43ODkgNC41NDQgMTMuNTAyIDQuMjcyIDQuOTMyIDUuNjc5IDQuOTMyIDYuNTMzIDQuOTMyIDYuNTMzXFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI2LjYyNiAyNi41OTQgNS45NjYgMjYuMDI3IDUuOTY2IDYuNTI2IDYuNjI2IDUuOTY2IDYuNjI2IDI2LjU5NCA2LjYyNiAyNi41OTRcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmY7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjYuNjI2IDI2LjU5NCA1Ljk2NiAyNi4wMjcgNS45NjYgNi41MjYgNi42MjYgNS45NjYgNi42MjYgMjYuNTk0IDYuNjI2IDI2LjU5NFxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjAuNzU5IDYuNTMzIDIxLjMyNiA1Ljk2NiAyMS4zMjYgNy4xIDExLjkwMiAxNi43MDMgMTIuOTQyIDE0LjQ0MiAyMC43NTkgNi41MzMgMjAuNzU5IDYuNTMzXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMC43NTkgNi41MzMgMjEuMzI2IDUuOTY2IDIxLjMyNiA3LjEgMTEuOTAyIDE2LjcwMyAxMi45NDIgMTQuNDQyIDIwLjc1OSA2LjUzMyAyMC43NTkgNi41MzNcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjYuODIgNS42ODYgNi42MjYgNS45NjYgNS45NjYgNi41MzMgNC45MzIgNi41MzMgNC45MzIgNS4zOTkgNi44MiA1LjY4NiA2LjgyIDUuNjg2XFxcIiBzdHlsZT1cXFwiZmlsbDojOTI5NDk3O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCI2LjgyIDUuNjg2IDYuNjI2IDUuOTY2IDUuOTY2IDYuNTMzIDQuOTMyIDYuNTMzIDQuOTMyIDUuMzk5IDYuODIgNS42ODYgNi44MiA1LjY4NlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTIuOTQyIDYuNTMzIDEyLjk0MiAxNC40NDIgMTEuOTAyIDE2LjY5NiAxMS45MDIgNS45NTggMTMuNTAyIDUuOTU4IDEzLjc4OSA1LjY3OCAxMy41MDIgNC4yNzIgMTQuMzQ5IDQuMjcyIDE0LjM0OSA1Ljk2NiAxMy43ODkgNi41MzMgMTIuOTQyIDYuNTMzIDEyLjk0MiA2LjUzM1xcXCIgc3R5bGU9XFxcImZpbGw6IzkyOTQ5NztmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTIuOTQyIDYuNTMzIDEyLjk0MiAxNC40NDIgMTEuOTAyIDE2LjY5NiAxMS45MDIgNS45NTggMTMuNTAyIDUuOTU4IDEzLjc4OSA1LjY3OCAxMy41MDIgNC4yNzIgMTQuMzQ5IDQuMjcyIDE0LjM0OSA1Ljk2NiAxMy43ODkgNi41MzMgMTIuOTQyIDYuNTMzIDEyLjk0MiA2LjUzM1xcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTkuNjI1IDYuNTMzIDE5LjA2NSA1Ljk2NiAxOS4wNjUgNC4yNzIgMTkuNzE4IDMuNzA1IDI4LjI5NSAzLjcwNSAyOC45NTYgNC4yNzIgMjguMDA4IDUuMTE5IDE5LjYyNSA1LjY3OSAxOS42MjUgNi41MzMgMTkuNjI1IDYuNTMzXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxOS42MjUgNi41MzMgMTkuMDY1IDUuOTY2IDE5LjA2NSA0LjI3MiAxOS43MTggMy43MDUgMjguMjk1IDMuNzA1IDI4Ljk1NiA0LjI3MiAyOC4wMDggNS4xMTkgMTkuNjI1IDUuNjc5IDE5LjYyNSA2LjUzMyAxOS42MjUgNi41MzNcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjI4Ljk1NiA1Ljk2NiA5LjA3NCAyNi41OTQgNi42MjYgMjYuNTk0IDYuNjI2IDI1Ljc0NyA4LjQyIDI1Ljc0NyAyOC4yOTUgNS4zOTkgMjguMDA4IDQuMjcyIDI4Ljk1NiA0LjI3MiAyOC45NTYgNS45NjYgMjguOTU2IDUuOTY2XFxcIiBzdHlsZT1cXFwiZmlsbDojOTI5NDk3O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyOC45NTYgNS45NjYgOS4wNzQgMjYuNTk0IDYuNjI2IDI2LjU5NCA2LjYyNiAyNS43NDcgOC40MiAyNS43NDcgMjguMjk1IDUuMzk5IDI4LjAwOCA0LjI3MiAyOC45NTYgNC4yNzIgMjguOTU2IDUuOTY2IDI4Ljk1NiA1Ljk2NlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjEuNTEyIDUuNjg2IDIxLjMxOSA1Ljk2NiAyMC43NTkgNi41MzMgMTkuNjI1IDYuNTMzIDE5LjYyNSA1LjM5OSAyMS41MTIgNS42ODYgMjEuNTEyIDUuNjg2XFxcIiBzdHlsZT1cXFwiZmlsbDojOTI5NDk3O2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyMS41MTIgNS42ODYgMjEuMzE5IDUuOTY2IDIwLjc1OSA2LjUzMyAxOS42MjUgNi41MzMgMTkuNjI1IDUuMzk5IDIxLjUxMiA1LjY4NiAyMS41MTIgNS42ODZcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjExLjkwMiAxNi42OTYgMTEuOTAyIDUuOTU4IDEzLjUwMiA1Ljk1OCAxMy43ODkgNS42NzkgMTMuNzg5IDQuNTQ0IDEzLjUwMiA0LjI2NSA1LjIxMiA0LjI2NSA0LjkzMiA0LjU0NCA0LjkzMiA1LjY3OSA1LjIxMiA1Ljk1OCA2LjYyNiA1Ljk1OCA2LjYyNiAyNS43NDcgNi45OTIgMjYuMDI3IDguNjA3IDI2LjAyNyAyOC4zODkgNS4zOTkgMjguMzg5IDQuNTg4IDI4LjEwMiA0LjI2NSAxOS45MTIgNC4yNjUgMTkuNjI1IDQuNTQ0IDE5LjYyNSA1LjY4NiAxOS45MTIgNS45NjYgMjEuMzI2IDUuOTY2IDIxLjMyNiA3LjEgMTEuOTAyIDE2LjY5NiAxMS45MDIgMTYuNjk2XFxcIiBzdHlsZT1cXFwiZmlsbDojZDBkMmQzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxMS45MDIgMTYuNjk2IDExLjkwMiA1Ljk1OCAxMy41MDIgNS45NTggMTMuNzg5IDUuNjc5IDEzLjc4OSA0LjU0NCAxMy41MDIgNC4yNjUgNS4yMTIgNC4yNjUgNC45MzIgNC41NDQgNC45MzIgNS42NzkgNS4yMTIgNS45NTggNi42MjYgNS45NTggNi42MjYgMjUuNzQ3IDYuOTkyIDI2LjAyNyA4LjYwNyAyNi4wMjcgMjguMzg5IDUuMzk5IDI4LjM4OSA0LjU4OCAyOC4xMDIgNC4yNjUgMTkuOTEyIDQuMjY1IDE5LjYyNSA0LjU0NCAxOS42MjUgNS42ODYgMTkuOTEyIDUuOTY2IDIxLjMyNiA1Ljk2NiAyMS4zMjYgNy4xIDExLjkwMiAxNi42OTYgMTEuOTAyIDE2LjY5NlxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTcuMDQxIDE2LjcxMSAxNy43MDEgMTYuMTQ0IDE5LjM5NSAxNi4xNDQgMTkuODY5IDE2LjcxMSAxOS4zMDIgMTguNDA1IDE4LjY0OSAxOC45NzIgMTYuOTU1IDE4Ljk3MiAxNi40NzQgMTguNDA1IDE3LjA0MSAxNi43MTEgMTcuMDQxIDE2LjcxMVxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMDtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTcuMDQxIDE2LjcxMSAxNy43MDEgMTYuMTQ0IDE5LjM5NSAxNi4xNDQgMTkuODY5IDE2LjcxMSAxOS4zMDIgMTguNDA1IDE4LjY0OSAxOC45NzIgMTYuOTU1IDE4Ljk3MiAxNi40NzQgMTguNDA1IDE3LjA0MSAxNi43MTEgMTcuMDQxIDE2LjcxMVxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTcuNjA4IDI2LjAzNCAxOS4zMDkgMjAuOTUzIDE4Ljc0MiAyMC45NTMgMTkuMzA5IDE5LjI1MSAyMS44NDMgMTkuMjUxIDIyLjQxIDE5LjgxOSAyMi43OSAxOS44MTkgMjMuMzUgMTkuMjUxIDI1LjIzOCAxOS4yNTEgMjUuODA1IDE5LjgxOSAyNi4xNzggMTkuODE5IDI2Ljc0NSAxOS4yNTEgMjguODEyIDE5LjI1MSAyOS41NjYgMjAuMzg2IDI4LjMzMSAyNC40MDUgMjguODkxIDI0LjQwNSAyOC4zNDYgMjYuMDM0IDI0Ljk1MSAyNi4wMzQgMjYuMjc4IDIyLjA3OSAyNS40MzEgMjIuMDc5IDI0LjY0OSAyNC4zOTEgMjUuMjA5IDI0LjM5MSAyNC42NzggMjYuMDM0IDIxLjI4MyAyNi4wMzQgMjIuNjAzIDIyLjA3OSAyMS43NTYgMjIuMDc5IDIwLjk2NyAyNC40MDUgMjEuNTM0IDI0LjQwNSAyMS4wMDMgMjYuMDM0IDE3LjYwOCAyNi4wMzQgMTcuNjA4IDI2LjAzNFxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMDtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTcuNjA4IDI2LjAzNCAxOS4zMDkgMjAuOTUzIDE4Ljc0MiAyMC45NTMgMTkuMzA5IDE5LjI1MSAyMS44NDMgMTkuMjUxIDIyLjQxIDE5LjgxOSAyMi43OSAxOS44MTkgMjMuMzUgMTkuMjUxIDI1LjIzOCAxOS4yNTEgMjUuODA1IDE5LjgxOSAyNi4xNzggMTkuODE5IDI2Ljc0NSAxOS4yNTEgMjguODEyIDE5LjI1MSAyOS41NjYgMjAuMzg2IDI4LjMzMSAyNC40MDUgMjguODkxIDI0LjQwNSAyOC4zNDYgMjYuMDM0IDI0Ljk1MSAyNi4wMzQgMjYuMjc4IDIyLjA3OSAyNS40MzEgMjIuMDc5IDI0LjY0OSAyNC4zOTEgMjUuMjA5IDI0LjM5MSAyNC42NzggMjYuMDM0IDIxLjI4MyAyNi4wMzQgMjIuNjAzIDIyLjA3OSAyMS43NTYgMjIuMDc5IDIwLjk2NyAyNC40MDUgMjEuNTM0IDI0LjQwNSAyMS4wMDMgMjYuMDM0IDE3LjYwOCAyNi4wMzQgMTcuNjA4IDI2LjAzNFxcXCIgc3R5bGU9XFxcImZpbGw6bm9uZTtzdHJva2U6IzIzMWYyMDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2Utd2lkdGg6MC4yMTYwMDAwMDU2MDI4MzdweFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjguNTU0IDE5LjgxOSAyOC45OTIgMjAuNDQzIDI3LjU5OSAyNC45MDcgMjguMTU5IDI0LjkwNyAyNy45NzIgMjUuNDY3IDI1LjcxMSAyNS40NjcgMjcuMDMyIDIxLjUxMiAyNS4wNTEgMjEuNTEyIDIzLjkyNCAyNC45MDcgMjQuNDg0IDI0LjkwNyAyNC4yOTcgMjUuNDY3IDIyLjAzNiAyNS40NjcgMjMuMzU3IDIxLjUxMiAyMS4zNzYgMjEuNTEyIDIwLjI0OSAyNC45MDcgMjAuODE2IDI0LjkwNyAyMC42MjIgMjUuNDY3IDE4LjM2MSAyNS40NjcgMjAuMDYzIDIwLjM4NiAxOS40OTUgMjAuMzg2IDE5LjY4MiAxOS44MTkgMjEuNzU2IDE5LjgxOSAyMi4zMjMgMjAuMzg2IDIyLjg4MyAyMC4zODYgMjMuNDUgMTkuODE5IDI1LjE0NCAxOS44MTkgMjUuNzExIDIwLjM4NiAyNi4yNzggMjAuMzg2IDI2Ljg0NSAxOS44MTkgMjguNTU0IDE5LjgxOSAyOC41NTQgMTkuODE5XFxcIiBzdHlsZT1cXFwiZmlsbDojZDBkMmQzO2ZpbGwtcnVsZTpldmVub2RkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyOC41NTQgMTkuODE5IDI4Ljk5MiAyMC40NDMgMjcuNTk5IDI0LjkwNyAyOC4xNTkgMjQuOTA3IDI3Ljk3MiAyNS40NjcgMjUuNzExIDI1LjQ2NyAyNy4wMzIgMjEuNTEyIDI1LjA1MSAyMS41MTIgMjMuOTI0IDI0LjkwNyAyNC40ODQgMjQuOTA3IDI0LjI5NyAyNS40NjcgMjIuMDM2IDI1LjQ2NyAyMy4zNTcgMjEuNTEyIDIxLjM3NiAyMS41MTIgMjAuMjQ5IDI0LjkwNyAyMC44MTYgMjQuOTA3IDIwLjYyMiAyNS40NjcgMTguMzYxIDI1LjQ2NyAyMC4wNjMgMjAuMzg2IDE5LjQ5NSAyMC4zODYgMTkuNjgyIDE5LjgxOSAyMS43NTYgMTkuODE5IDIyLjMyMyAyMC4zODYgMjIuODgzIDIwLjM4NiAyMy40NSAxOS44MTkgMjUuMTQ0IDE5LjgxOSAyNS43MTEgMjAuMzg2IDI2LjI3OCAyMC4zODYgMjYuODQ1IDE5LjgxOSAyOC41NTQgMTkuODE5IDI4LjU1NCAxOS44MTlcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cGF0aCBkPVxcXCJNMTkuMDIyLDE5LjI1MSwxNy4yOTIsMjQuNGguNTg5bC0uNTYsMS42MzdIMTMuOTMzbDEuNjk0LTUuMDgySDE1LjA2bDMuOTYyLTEuN1ptLTMuOTYyLDEuNy41NjctMS43aDMuNGwtMy45NjIsMS43WlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMDtmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwYXRoIGQ9XFxcIk0xOS4wMjIsMTkuMjUxLDE3LjI5MiwyNC40aC41ODlsLS41NiwxLjYzN0gxMy45MzNsMS42OTQtNS4wODJIMTUuMDZsMy45NjItMS43Wm0tMy45NjIsMS43LjU2Ny0xLjdoMy40bC0zLjk2MiwxLjdaXFxcIiBzdHlsZT1cXFwiZmlsbDpub25lO3N0cm9rZTojMjMxZjIwO3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS13aWR0aDowLjIxNjAwMDAwNTYwMjgzN3B4XFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIxNi45NDcgMjUuNDY3IDE3LjEzNCAyNC45MDcgMTYuNTY3IDI0LjkwNyAxOC4yNjggMTkuODE5IDE1LjkxNCAxOS44MTkgMTUuNzIgMjAuMzg2IDE2LjM4IDIwLjM4NiAxNC42ODYgMjUuNDY3IDE2Ljk0NyAyNS40NjcgMTYuOTQ3IDI1LjQ2N1xcXCIgc3R5bGU9XFxcImZpbGw6I2QwZDJkMztmaWxsLXJ1bGU6ZXZlbm9kZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMTYuOTQ3IDI1LjQ2NyAxNy4xMzQgMjQuOTA3IDE2LjU2NyAyNC45MDcgMTguMjY4IDE5LjgxOSAxNS45MTQgMTkuODE5IDE1LjcyIDIwLjM4NiAxNi4zOCAyMC4zODYgMTQuNjg2IDI1LjQ2NyAxNi45NDcgMjUuNDY3IDE2Ljk0NyAyNS40NjdcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE4LjgyOCAxOC4xMjUgMTkuMjA4IDE2Ljk5MSAxOS4wMjIgMTYuNzExIDE3Ljg4OCAxNi43MTEgMTcuNTE0IDE2Ljk5MSAxNy4xMzQgMTguMTI1IDE3LjMyOCAxOC40MDUgMTguNDYyIDE4LjQwNSAxOC44MjggMTguMTI1IDE4LjgyOCAxOC4xMjVcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMGQyZDM7ZmlsbC1ydWxlOmV2ZW5vZGRcXFwiLz48cG9seWdvbiBwb2ludHM9XFxcIjE4LjgyOCAxOC4xMjUgMTkuMjA4IDE2Ljk5MSAxOS4wMjIgMTYuNzExIDE3Ljg4OCAxNi43MTEgMTcuNTE0IDE2Ljk5MSAxNy4xMzQgMTguMTI1IDE3LjMyOCAxOC40MDUgMTguNDYyIDE4LjQwNSAxOC44MjggMTguMTI1IDE4LjgyOCAxOC4xMjVcXFwiIHN0eWxlPVxcXCJmaWxsOm5vbmU7c3Ryb2tlOiMyMzFmMjA7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLXdpZHRoOjAuMjE2MDAwMDA1NjAyODM3cHhcXFwiLz5cIixcblx0fSxcblx0XCJWaXN1YWwgQmFzaWNcIjoge1xuXHRcdGNvbG91cjogXCIjMDA1MTlhXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNNi42Nyw3LjgzNiw5LDE4LjkxNSwxMS4zMzYsNy44MzZIMTZMMTEuMzM2LDI0LjE2NEg2LjY3MkwyLDcuODM2WlxcXCIgc3R5bGU9XFxcImZpbGw6IzAwNTE5YVxcXCIvPjxwYXRoIGQ9XFxcIk0xOC4zMzEsNy44MzZoNy42YTQuMDgsNC4wOCwwLDAsMSwyLjksMS43NDksMy43OCwzLjc4LDAsMCwxLC41NzEsMi4wNCwzLjk4NSwzLjk4NSwwLDAsMS0uNTcxLDIuMDM0LDQuMTA4LDQuMTA4LDAsMCwxLTIuMzQxLDEuNzYzLDQuMSw0LjEsMCwwLDEsMi45MjksMS43NTYsMy44LDMuOCwwLDAsMSwuNTgsMi4xLDQuNjYzLDQuNjYzLDAsMCwxLS41NzksMi41NDYsNS4wNDcsNS4wNDcsMCwwLDEtMy41LDIuMzM4SDE4LjMzMVpNMjMsMTQuMjUyaDEuMTY2YTEuNzU0LDEuNzU0LDAsMCwwLDAtMy41SDIzWm0wLDdIMjQuMzlhMi4wNDcsMi4wNDcsMCwwLDAsMC00LjA4OUgyM1pcXFwiIHN0eWxlPVxcXCJmaWxsOiMwMDUxOWFcXFwiLz5cIixcblx0fSxcblx0XCJXZWJBc3NlbWJseVwiOiB7XG5cdFx0Y29sb3VyOiBcIiM2NTRmZjBcIixcblx0XHRpY29uOiBcIjxwYXRoIGQ9XFxcIk0xOS4xNTMsMi4zNVYyLjVhMy4yLDMuMiwwLDEsMS02LjQsMGgwVjIuMzVIMlYzMC4yNjlIMjkuOTE5VjIuMzVaXFxcIiBzdHlsZT1cXFwiZmlsbDojNjU0ZmYwXFxcIi8+PHBhdGggZD1cXFwiTTguNDg1LDE3LjRoMS44NUwxMS42LDI0LjEyM2guMDIzTDEzLjE0LDE3LjRoMS43MzFsMS4zNzEsNi44MWguMDI3bDEuNDQtNi44MWgxLjgxNWwtMi4zNTgsOS44ODVIMTUuMzI5bC0xLjM2LTYuNzI4aC0uMDM2bC0xLjQ1Niw2LjcyOGgtMS44N1ptMTMuMTI0LDBoMi45MTdsMi45LDkuODg1SDI1LjUxNWwtLjYzLTIuMkgyMS41NjJsLS40ODYsMi4ySDE5LjIxN1ptMS4xMSwyLjQzNy0uODA3LDMuNjI3aDIuNTEyTDIzLjUsMTkuODMyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPlwiLFxuXHR9LFxuXHRcIldvbGZyYW0gbGFuZ3VhZ2VcIjoge1xuXHRcdGNvbG91cjogXCIjZDAxMDAwXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMzAsMjAuNTUsMjUuOTQsMTYsMzAsMTEuNDVsLTUuOTQ4LTEuMjk0LjU5NS02LjA2N0wxOS4wNzEsNi41NDMsMTUuOTkzLDEuMjc5LDEyLjkyOSw2LjU0Myw3LjM1Myw0LjA4OWwuNTk1LDYuMDY3TDIsMTEuNDUsNi4wNTksMTYsMiwyMC41NWw1Ljk0OCwxLjI5NC0uNTk1LDYuMDY3LDUuNTc2LTIuNDU0LDMuMDc4LDUuMjY0LDMuMDYzLTUuMjY0LDUuNTkxLDIuNDU0LS42MS02LjA2N1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNkMTBcXFwiLz48cGF0aCBkPVxcXCJNMTkuMzUzLDExLjQ1YTYuOTY4LDYuOTY4LDAsMCwxLTMuNDIuODYyLDUuNDQ2LDUuNDQ2LDAsMCwxLTMuMjEyLS44NjJBNy4xLDcuMSwwLDAsMSwxMi41LDE0LjhhNi4yMjUsNi4yMjUsMCwwLDEtMS44NzQsMi45MTQsNy40NTQsNy40NTQsMCwwLDEsMy4xMzgsMS4xOSw5LjY1OSw5LjY1OSwwLDAsMSwyLjIxNiwyLjcyMSw4LjE5NCw4LjE5NCwwLDAsMSwyLjE0MS0yLjY5MSw3LjYwNSw3LjYwNSwwLDAsMSwzLjI0Mi0xLjIsMTIuNTYyLDEyLjU2MiwwLDAsMS0xLjkzMy0yLjk0NEE2LjcxOCw2LjcxOCwwLDAsMSwxOS4zNTMsMTEuNDVabS0xLjksNi41NDNhNS4yMzMsNS4yMzMsMCwwLDAtMS40NTcsMS42MzYsNi4yMzYsNi4yMzYsMCwwLDAtMS41LTEuNjIxLDUuMTkxLDUuMTkxLDAsMCwwLTEuOTQ4LS44NDgsNi44MzksNi44MzksMCwwLDAsMS4xMTUtMi4wMDcsNi4xOCw2LjE4LDAsMCwwLC4yMjMtMi4wODIsNi4zMTcsNi4zMTcsMCwwLDAsMi4wODIuNDQ2LDYuNTUyLDYuNTUyLDAsMCwwLDIuMTcxLS40NjEsNC41MjEsNC41MjEsMCwwLDAsLjA3NCwyLjE1Niw2LjcxLDYuNzEsMCwwLDAsMS4yNDksMS45MzNBNy4wMzEsNy4wMzEsMCwwLDAsMTcuNDUsMTcuOTkzWm00LjIzOC00LjAxNWMtLjM1Ny0xLjE3NS42NTQtNi43MDYuNjU0LTYuNzA2UzE4LjU1LDkuODQ0LDE1Ljg4OCw5Ljg0NHMtNi4yMy0yLjU3Mi02LjIzLTIuNTcyLDEuMTc1LDQuMDE1LjQ2MSw2LjU4Ny00LjM4Nyw1LjQ3Mi00LjM4Nyw1LjQ3Miw0Ljc4OC4yODMsNi42LDEuNSwzLjY1OCw1Ljk0OCwzLjY1OCw1Ljk0OCwyLjQ1NC01LjIsMy40OC01Ljk0OCw2LjgtMS41LDYuOC0xLjUtNC4yMjMtNC4xNzgtNC41OC01LjM1M1ptLTIuODQsNS45NjNhOS40NDQsOS40NDQsMCwwLDAtMi44NCw0LjE3OHMtMS40MTMtMy4xNTItMi45NzQtNC4yMjNTOC4zLDE4LjU0Myw4LjMsMTguNTQzczIuNDU0LTIuMTcxLDMuMDQ4LTQuMWExMS45MjMsMTEuOTIzLDAsMCwwLS4xLTQuOTUyLDExLjMsMTEuMywwLDAsMCw0LjY2OSwxLjYyMWMyLjAzNywwLDQuODQ4LTEuNjIxLDQuODQ4LTEuNjIxcy0uODE4LDMuMDMzLS4xNjQsNC45MjIsMy4xMDgsNC4xMzQsMy4xMDgsNC4xMzRhMTAuNTU3LDEwLjU1NywwLDAsMC00Ljg2MiwxLjRaXFxcIiBzdHlsZT1cXFwiZmlsbDojZmZmXFxcIi8+XCIsXG5cdH0sXG5cdFwiWE1MXCI6IHtcblx0XHRjb2xvdXI6IFwiI2YxNjYyYVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIwLjQyLDIxLjE1N2wyLjIxMSwyLjIxMUwzMCwxNiwyMi42MzEsOC42MzEsMjAuNDIsMTAuODQzLDI1LjU4LDE2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2YxNjYyYVxcXCIvPjxwYXRoIGQ9XFxcIk0xMS41OCwxMC44NDMsOS4zNjksOC42MzEsMiwxNmw3LjM2OSw3LjM2OSwyLjIxMS0yLjIxMUw2LjQyLDE2WlxcXCIgc3R5bGU9XFxcImZpbGw6I2YxNjYyYVxcXCIvPjxwYXRoIGQ9XFxcIk0xNy40MTEsNy42NzdsMS42LjQzNy00LjQyLDE2LjIwOS0xLjYtLjQzNyw0LjQyLTE2LjIwOVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmMTY2MmFcXFwiLz5cIixcblx0fSxcblx0XCJYUXVlcnlcIjoge1xuXHRcdGNvbG91cjogXCIjZjE2NjJhXCIsXG5cdFx0aWNvbjogXCI8cGF0aCBkPVxcXCJNMjAuNDIsMjEuMTU3bDIuMjExLDIuMjExTDMwLDE2LDIyLjYzMSw4LjYzMSwyMC40MiwxMC44NDMsMjUuNTgsMTZaTTExLjU4LDEwLjg0Myw5LjM2OSw4LjYzMSwyLDE2bDcuMzY5LDcuMzY5LDIuMjExLTIuMjExTDYuNDIsMTZabTUuODMxLTMuMTY2LDEuNi40MzctNC40MiwxNi4yMDktMS42LS40MzdaXFxcIiBzdHlsZT1cXFwiZmlsbDojZjE2NjJhXFxcIi8+PHBhdGggZD1cXFwiTTIwLjMzMiwxOC40NjJhMy4zNTQsMy4zNTQsMCwwLDEsLjk3NS0xLjQyMyw0LjAxNCw0LjAxNCwwLDAsMSwxLjYxNy0uOEE5LjExOCw5LjExOCwwLDAsMSwyNS4xMzgsMTZhNS40NzIsNS40NzIsMCwwLDEsMy42ODEsMS4wMzlBMy41LDMuNSwwLDAsMSwzMCwxOS44MDhhNC40Nyw0LjQ3LDAsMCwxLS4yNCwxLjQ5MSwzLjEyNCwzLjEyNCwwLDAsMS0uODM4LDEuMjM5bC0xLjY3NSwxLjZhMS41MTIsMS41MTIsMCwwLDAtLjQyNC43ODksNS4zMDcsNS4zMDcsMCwwLDAtLjEsMS4xSDIzdi0uNTRhNi4zMiw2LjMyLDAsMCwxLC4yMDctMS43NzgsMi44ODYsMi44ODYsMCwwLDEsLjc4LTEuMjRsMS4zNTItMS4yODlhMS44NCwxLjg0LDAsMCwwLC41NjMtLjg5NCwzLjY4MiwzLjY4MiwwLDAsMCwuMS0uOCwxLjUsMS41LDAsMCwwLS4yNTItLjkuOS45LDAsMCwwLS43NzktLjM0NiwxLjI1NSwxLjI1NSwwLDAsMC0uNDgzLjA4Ni43MjQuNzI0LDAsMCwwLS4zNDQuMzM3LDIuMzQ3LDIuMzQ3LDAsMCwwLS4yMTcuNzIxLDcuNjE0LDcuNjE0LDAsMCwwLS4wODEsMS4yNEgyMEE2LjE1NSw2LjE1NSwwLDAsMSwyMC4zMzIsMTguNDYyWm02LjQ1Nyw4LjVWMzBIMjIuOTM2VjI2Ljk2MlpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmY2JhMDBcXFwiLz5cIixcblx0fSxcblx0XCJZQU1MXCI6IHtcblx0XHRjb2xvdXI6IFwiI2ZmZTg4NVwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTIsMTIuMjE4Yy43NTUsMCwxLjUxLS4wMDgsMi4yNjQsMGwuMDUzLjAzOFE1LjcsMTMuNjM4LDcuMDc4LDE1LjAxNGMuODkxLS45MDYsMS44LTEuNzk0LDIuNy0yLjcuMDUzLS4wNTIuMTEtLjExMy4xOTItLjEuNjA4LDAsMS4yMTUsMCwxLjgyMywwYTEuNCwxLjQsMCwwLDEsLjM1My4wMTljLS43LjY3LTEuMzc3LDEuMzY5LTIuMDY5LDIuMDVMNS41NDUsMTguOGMtLjMzMS4zMjQtLjY0OC42NjMtLjk4OS45NzUtLjc1NC4wMjItMS41MTEuMDA3LTIuMjY2LjAwNywxLjIyMy0xLjIwOSwyLjQzMS0yLjQzMywzLjY1OC0zLjYzN0M0LjYyNywxNC44NDEsMy4zMTgsMTMuNTI1LDIsMTIuMjE4WlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZTg4NVxcXCIvPjxwYXRoIGQ9XFxcIk0xMi43LDEyLjIxOGMuNjEzLDAsMS4yMjYsMCwxLjgzOSwwcTAsMy43ODMsMCw3LjU2NmMtLjYxMSwwLTEuMjIyLjAxMi0xLjgzMi0uMDA4LDAtMS42NjQsMC0zLjMyOSwwLTQuOTk0LTEuNiwxLjYwNy0zLjIwOSwzLjItNC44MTEsNC44LS4wODkuMDgtLjE2Ni4yMTctLjMwNS4xOTQtLjgyNC0uMDA2LTEuNjQ5LDAtMi40NzQsMFE4LjkxNiwxNiwxMi43LDEyLjIxOFpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmU4ODVcXFwiLz48cGF0aCBkPVxcXCJNMTQuOTU4LDEyLjIyYy40Ny0uMDA5LjkzOSwwLDEuNDA5LDAsLjgzNi44NTMsMS42OSwxLjY4OSwyLjUzNiwyLjUzMnExLjI2OC0xLjI2NywyLjUzOS0yLjUzMi43LDAsMS40LDAtLjAwOCwzLjc4NCwwLDcuNTY3Yy0uNDcxLDAtLjk0My4wMDYtMS40MTQsMHEuMDA4LTIuMzg3LDAtNC43NzNjLS44NDQuODQzLTEuNjc2LDEuNy0yLjUyNiwyLjUzNi0uODU2LS44MzUtMS42ODctMS42OTUtMi41MzItMi41NDEsMCwxLjU5NC0uMDA2LDMuMTg4LjAwNiw0Ljc4MS0uNDcyLDAtLjk0My4wMDUtMS40MTUsMFExNC45NTgsMTYsMTQuOTU4LDEyLjIyWlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZTg4NVxcXCIvPjxwYXRoIGQ9XFxcIk0yMy4yNTksMTIuMjE3Yy40NzIsMCwuOTQ0LS4wMDcsMS40MTYsMHEtLjAwNywzLjA4MywwLDYuMTY2YzEuMjYsMCwyLjUyMSwwLDMuNzgyLDAsLjA2My4wMDYuMTQ0LS4wMTIuMTkxLjA0NS40NDguNDU0LjkwNy45LDEuMzUzLDEuMzU0cS0zLjM3MS4wMDctNi43NDEsMFEyMy4yNjcsMTYsMjMuMjU5LDEyLjIxN1pcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmU4ODVcXFwiLz5cIixcblx0fSxcblx0XCJZQU5HXCI6IHtcblx0XHRjb2xvdXI6IFwiIzIzMWYyMFwiLFxuXHRcdGljb246IFwiPHBhdGggZD1cXFwiTTguODc3LDIzLjE1OWMwLTUuNTM1LDMuOTkyLTcuMTY4LDcuODk0LTcuMTY4LDMuMzU3LDAsNS45ODgtMy44MTEsNS45ODgtNi42MjQsMC0zLjYyMS0yLjQ4Ny01LjgzMS00Ljg4Mi03LjEyQTEzLjg4MSwxMy44ODEsMCwxLDAsMTQuNSwyOS44QzEwLjQ5MSwyOC4yNDgsOC44NzcsMjUuMzI0LDguODc3LDIzLjE1OVpcXFwiIHN0eWxlPVxcXCJmaWxsOiNmZmZcXFwiLz48cGF0aCBkPVxcXCJNMTQuNDgyLDI5LjkxN0ExNCwxNCwwLDAsMSwxNiwyYTE0LjE1NCwxNC4xNTQsMCwwLDEsMS44OTMuMTMxbC4wNC4wMTNjMi4yNTUsMS4yMTMsNC45NDQsMy40NTIsNC45NDQsNy4yMjMsMCwyLjcxNS0yLjU2NCw2Ljc0MS02LjEwNiw2Ljc0MS0yLjksMC03Ljc3Ni45MTYtNy43NzYsNy4wNSwwLDIuMDIyLDEuNDUxLDQuOTQ2LDUuNTQyLDYuNTMxWk0xNiwyLjIzNkExMy43NjUsMTMuNzY1LDAsMCwwLDEzLjYzNywyOS41NmMtMy41ODEtMS42ODQtNC44NzctNC40NDctNC44NzctNi40LDAtNi41NzYsNS42LTcuMjg2LDguMDEyLTcuMjg2LDMuNDA2LDAsNS44Ny0zLjg4Niw1Ljg3LTYuNTA2LDAtMy42NDUtMi42MDYtNS44Mi00LjgtNy4wMDZBMTMuOTI4LDEzLjkyOCwwLDAsMCwxNiwyLjIzNlpcXFwiIHN0eWxlPVxcXCJmaWxsOiMyMzFmMjBcXFwiLz48cGF0aCBkPVxcXCJNMjkuODgyLDE2YTEzLjg4MiwxMy44ODIsMCwwLDAtMTItMTMuNzUyYzIuNCwxLjI4OSw0Ljg4MiwzLjUsNC44ODIsNy4xMiwwLDIuODEzLTIuNjMxLDYuNjI0LTUuOTg4LDYuNjI0LTMuOSwwLTcuODk0LDEuNjMzLTcuODk0LDcuMTY4LDAsMi4xNjYsMS42MTMsNS4wODksNS42MTgsNi42NDFBMTMuODc1LDEzLjg3NSwwLDAsMCwyOS44ODIsMTZaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PHBhdGggZD1cXFwiTTE2LDMwYTE0LjIsMTQuMiwwLDAsMS0xLjUxOC0uMDgzbC0uMDMtLjAwN2MtNC4yLTEuNjI4LTUuNjkzLTQuNjU0LTUuNjkzLTYuNzUsMC02LjU3Niw1LjYtNy4yODYsOC4wMTItNy4yODYsMy40MDYsMCw1Ljg3LTMuODg2LDUuODctNi41MDYsMC0zLjY1NS0yLjYyMS01LjgzMy00LjgyLTcuMDE2bC4wNzItLjIyMUExNCwxNCwwLDAsMSwxNiwzMFptLTEuNDc3LS4zMTZBMTMuNzU2LDEzLjc1NiwwLDAsMCwyOS43NjQsMTYsMTMuODA3LDEzLjgwNywwLDAsMCwxOC41LDIuNDY2YzIuMTE1LDEuMjcyLDQuMzc3LDMuNDQxLDQuMzc3LDYuOSwwLDIuNzE1LTIuNTY0LDYuNzQxLTYuMTA2LDYuNzQxLTIuOSwwLTcuNzc2LjkxNi03Ljc3Niw3LjA1QzksMjUuMTc4LDEwLjQ0MywyOC4xLDE0LjUyMywyOS42ODRaXFxcIiBzdHlsZT1cXFwiZmlsbDojMjMxZjIwXFxcIi8+PGNpcmNsZSBjeD1cXFwiMTUuOTQzXFxcIiBjeT1cXFwiMjIuNzg3XFxcIiByPVxcXCIxLjUwNlxcXCIgc3R5bGU9XFxcImZpbGw6I2ZmZlxcXCIvPjxjaXJjbGUgY3g9XFxcIjE2LjAwN1xcXCIgY3k9XFxcIjkuMTQyXFxcIiByPVxcXCIxLjUwNlxcXCIgc3R5bGU9XFxcImZpbGw6IzIzMWYyMFxcXCIvPlwiLFxuXHR9LFxuXHRcIlppZ1wiOiB7XG5cdFx0Y29sb3VyOiBcIiNmN2E0MWRcIixcblx0XHRpY29uOiBcIjxwb2x5Z29uIHBvaW50cz1cXFwiNS43MzMgMTkuNzMxIDUuNzMzIDEyLjI2NCA4LjUzMyAxMi4yNjQgOC41MzMgOC41MzEgMiA4LjUzMSAyIDIzLjQ2NCA1LjU0NyAyMy40NjQgOC45MDcgMTkuNzMxIDUuNzMzIDE5LjczMVxcXCIgc3R5bGU9XFxcImZpbGw6I2Y3YTQxZFxcXCIvPjxwb2x5Z29uIHBvaW50cz1cXFwiMjYuNDUzIDguNTMxIDIzLjA5MyAxMi4yNjQgMjYuMjY3IDEyLjI2NCAyNi4yNjcgMTkuNzMxIDIzLjQ2NyAxOS43MzEgMjMuNDY3IDIzLjQ2NCAzMCAyMy40NjQgMzAgOC41MzEgMjYuNDUzIDguNTMxXFxcIiBzdHlsZT1cXFwiZmlsbDojZjdhNDFkXFxcIi8+PHBvbHlnb24gcG9pbnRzPVxcXCIyNi44NzUgNi43MDcgMjAuNTEzIDguNTMxIDkuNDY3IDguNTMxIDkuNDY3IDEyLjI2NCAxNi44NDcgMTIuMjY0IDUuMTE1IDI1LjI5MyAxMS40OTcgMjMuNDY0IDIyLjUzMyAyMy40NjQgMjIuNTMzIDE5LjczMSAxNS4xNDggMTkuNzMxIDI2Ljg3NSA2LjcwN1xcXCIgc3R5bGU9XFxcImZpbGw6I2Y3YTQxZFxcXCIvPlwiLFxuXHR9XG59O1xuXG5jb25zdCBFWEVDVVRFX0NPREVfTEFOR1VBR0VfQUxJQVNFUzogQXJyYXk8c3RyaW5nPiA9IFtcImphdmFzY3JpcHRcIixcInR5cGVzY3JpcHRcIixcImJhc2hcIixcImNzaGFycFwiLFwid29sZnJhbVwiLFwibmJcIixcIndsXCIsXCJoc1wiLFwicHlcIixcInNjcHRcIl07XG5jb25zdCBFWEVDVVRFX0NPREVfQ0FOT05JQ0FMX0xBTkdVQUdFUzogQXJyYXk8c3RyaW5nPiA9IFtcImpzXCIsXCJ0c1wiLFwiY3NcIixcImxlYW5cIixcImx1YVwiLFwicHl0aG9uXCIsXCJjcHBcIixcInByb2xvZ1wiLFwic2hlbGxcIixcImdyb292eVwiLFwiclwiLFwiZ29cIixcInJ1c3RcIixcImphdmFcIixcInBvd2Vyc2hlbGxcIixcImtvdGxpblwiLFwibWF0aGVtYXRpY2FcIixcImhhc2tlbGxcIixcInNjYWxhXCIsXCJyYWNrZXRcIixcImZzaGFycFwiLFwiY1wiLFwiZGFydFwiLFwicnVieVwiLFwiYmF0Y2hcIixcInNxbFwiLFwib2N0YXZlXCIsXCJtYXhpbWFcIixcImFwcGxlc2NyaXB0XCJdO1xuXG5leHBvcnQgY29uc3QgRVhFQ1VURV9DT0RFX1NVUFBPUlRFRF9MQU5HVUFHRVMgPSBbLi4uRVhFQ1VURV9DT0RFX0xBTkdVQUdFX0FMSUFTRVMsLi4uRVhFQ1VURV9DT0RFX0NBTk9OSUNBTF9MQU5HVUFHRVNdO1xuIiwgImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZywgTm90aWNlLCBUZXh0Q29tcG9uZW50LCBEcm9wZG93bkNvbXBvbmVudCwgU2xpZGVyQ29tcG9uZW50LCBUb2dnbGVDb21wb25lbnQsIEV4dHJhQnV0dG9uQ29tcG9uZW50LCBNYXJrZG93blJlbmRlcmVyIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgUGlja3IgZnJvbSBcIkBzaW1vbndlcC9waWNrclwiO1xuaW1wb3J0IHsgQ29sb3JUcmFuc2xhdG9yIH0gZnJvbSBcImNvbG9ydHJhbnNsYXRvclwiO1xuXG5pbXBvcnQgQ29kZVN0eWxlclBsdWdpbiBmcm9tIFwiLi9tYWluXCI7XG5pbXBvcnQgeyBDb2xvdXIsIENTUywgSEVYLCBEaXNwbGF5LCBDb2RlU3R5bGVyU2V0dGluZ3MsIENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIEZPTERfUExBQ0VIT0xERVIsIFBBUkFNRVRFUlMsIERFRkFVTFRfU0VUVElOR1MsIExBTkdVQUdFX05BTUVTLCBMQU5HVUFHRVMsIFNFVFRJTkdTX1NPVVJDRVBBVEhfUFJFRklYLCBFWEFNUExFX0lOTElORV9DT0RFLCBFWEFNUExFX0NPREVCTE9DS19QQVJBTUVURVJTLCBFWEFNUExFX0NPREVCTE9DS19DT05URU5ULCBFWENMVURFRF9MQU5HVUFHRVMsIFdISVRFTElTVF9DT0RFQkxPQ0tTLCBJTkJVSUxUX1RIRU1FUywgQ29kZVN0eWxlclRoZW1lIH0gZnJvbSBcIi4vU2V0dGluZ3NcIjtcblxuY29uc3QgU0VUVElOR1NfUEFHRVM6IFJlY29yZDxzdHJpbmcsc3RyaW5nPiA9IHtcblx0XCJtYWluXCI6IFwiQ29yZSBTZXR0aW5nc1wiLFxuXHRcImNvZGVibG9ja1wiOiBcIkNvZGVibG9jayBTdHlsaW5nXCIsXG5cdFwiaW5saW5lXCI6IFwiSW5saW5lIENvZGUgU3R5bGluZ1wiLFxufTtcbmNvbnN0IENPREVCTE9DS19QQUdFUzogUmVjb3JkPHN0cmluZyxzdHJpbmc+ID0ge1xuXHRcImJvZHlcIjogXCJDb2RlYmxvY2sgQm9keVwiLFxuXHRcImd1dHRlclwiOiBcIkNvZGVibG9jayBHdXR0ZXJcIixcblx0XCJoZWFkZXJcIjogXCJDb2RlYmxvY2sgSGVhZGVyXCIsXG5cdFwiaGlnaGxpZ2h0XCI6IFwiQ29kZWJsb2NrIEhpZ2hsaWdodGluZ1wiLFxuXHRcImxhbmd1YWdlc1wiOiBcIkNvZGVibG9jayBMYW5ndWFnZXNcIixcblx0Ly8gXCJwbHVnaW5zXCI6IFwiUGx1Z2luIENvbXBhdGliaWxpdHlcIixcblx0XCJleGFtcGxlXCI6IFwiRXhhbXBsZSBDb2RlYmxvY2sgQ29udGVudFwiLFxufTtcbmNvbnN0IERJU1BMQVlfT1BUSU9OUzogUmVjb3JkPERpc3BsYXksc3RyaW5nPiA9IHtcblx0XCJub25lXCI6IFwiTmV2ZXJcIixcblx0XCJpZl9oZWFkZXJfc2hvd25cIjogXCJJZiBIZWFkZXIgU2hvd25cIixcblx0XCJhbHdheXNcIjogXCJBbHdheXNcIixcbn07XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwbHVnaW46IENvZGVTdHlsZXJQbHVnaW47XG5cdHBpY2tyczogUmVjb3JkPHN0cmluZyxQaWNrclJlc2V0dGFibGU+O1xuXHRwYWdlOiBzdHJpbmc7XG5cdGNvZGVibG9ja1BhZ2U6IHN0cmluZztcblx0aGlkZUFkdmFuY2VkOiBib29sZWFuO1xuXHRjb2RlYmxvY2tTZXR0aW5nRWw6IEhUTUxFbGVtZW50O1xuXHRhZHZhbmNlZFNldHRpbmdzQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcblx0YWx0ZXJuYXRpdmVIaWdobGlnaHRzQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcblx0ZXhhbXBsZUNvZGVibG9ja0NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG5cdGV4YW1wbGVJbmxpbmVDb2RlQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcblx0d3JhcExpbmVzQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcblx0bGluZU51bWJlcnNDb250YWluZXI6IEhUTUxFbGVtZW50O1xuXHRoZWFkZXJUYWdzQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcblx0aGVhZGVySWNvbnNDb250YWluZXI6IEhUTUxFbGVtZW50O1xuXHRpbmxpbmVDb2RlU3R5bGVzQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcblx0ZGlzYWJsZWFibGVDb21wb25lbnRzOiBSZWNvcmQ8c3RyaW5nLEFycmF5PFRvZ2dsZUNvbXBvbmVudCB8IFNsaWRlckNvbXBvbmVudCB8IFRleHRDb21wb25lbnQgfCBFeHRyYUJ1dHRvbkNvbXBvbmVudD4+O1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4pIHtcblx0XHRzdXBlcihhcHAsIHBsdWdpbik7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdFx0dGhpcy5waWNrcnMgPSB7fTtcblx0XHR0aGlzLnBhZ2UgPSBcIm1haW5cIjtcblx0XHR0aGlzLmNvZGVibG9ja1BhZ2UgPSBcImJvZHlcIjtcblx0XHR0aGlzLmhpZGVBZHZhbmNlZCA9IHRydWU7XG5cdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgQnVpbGRzIHRoZSBodG1sIHBhZ2UgdGhhdCBpcyBzaG93ZWQgaW4gdGhlIHNldHRpbmdzLlxuXHQgKi9cblx0ZGlzcGxheSgpIHtcblx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50cyA9IHtcblx0XHRcdFwiZWRpdG9yQWN0aXZlTGluZUhpZ2hsaWdodFwiOiBbXSxcblx0XHRcdFwiY29kZWJsb2NrQWN0aXZlTGluZUhpZ2hsaWdodFwiOiBbXSxcblx0XHRcdFwiZ3JhZGllbnRIaWdobGlnaHRpbmdcIjogW10sXG5cdFx0XHRcImxhbmd1YWdlQm9yZGVyQ29sb3VyXCI6IFtdLFxuXHRcdH07XG5cdFx0dGhpcy5oaWRlQWR2YW5jZWQgPSB0cnVlO1xuXHRcdHRoaXMuZ2VuZXJhdGVTZXR0aW5ncyh0aGlzLmNvbnRhaW5lckVsKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBTZXR0aW5ncyBQYWdlc1xuXHRkaXNwbGF5TWFpblNldHRpbmdzKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkge1xuXHRcdHRoaXMuZW1wdHlTZXR0aW5ncyhjb250YWluZXJFbCk7XG5cdFx0dGhpcy5nZW5lcmF0ZVNldHRpbmdzU3dpdGNoZXIoY29udGFpbmVyRWwpO1xuXHRcdHRoaXMuZ2VuZXJhdGVUaGVtZVNldHRpbmdzKGNvbnRhaW5lckVsKTtcblx0XHR0aGlzLmdlbmVyYXRlQ29yZVNldHRpbmdzKGNvbnRhaW5lckVsKTtcblx0XHR0aGlzLmdlbmVyYXRlQWR2YW5jZWRIZWFkaW5nKGNvbnRhaW5lckVsKTtcblx0XHR0aGlzLmFkdmFuY2VkU2V0dGluZ3NDb250YWluZXIgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoKTtcblx0XHR0aGlzLmdlbmVyYXRlQWR2YW5jZWRTZXR0aW5ncygpO1xuXHRcdHRoaXMuZ2VuZXJhdGVEb25hdGlvbkZvb3Rlcihjb250YWluZXJFbCk7XG5cdH1cblx0ZGlzcGxheUNvZGVibG9ja1NldHRpbmdzKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkge1xuXHRcdHRoaXMuZW1wdHlTZXR0aW5ncyhjb250YWluZXJFbCk7XG5cdFx0dGhpcy5nZW5lcmF0ZVNldHRpbmdzU3dpdGNoZXIoY29udGFpbmVyRWwpO1xuXHRcdHRoaXMuZ2VuZXJhdGVUaGVtZVNldHRpbmdzKGNvbnRhaW5lckVsKTtcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbChcImhyXCIpO1xuXHRcdHRoaXMuZXhhbXBsZUNvZGVibG9ja0NvbnRhaW5lciA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xuXHRcdHRoaXMuZ2VuZXJhdGVFeGFtcGxlQ29kZWJsb2NrKCk7XG5cdFx0dGhpcy5nZW5lcmF0ZUNvZGVibG9ja1N0eWxpbmdTd2l0Y2hlcihjb250YWluZXJFbCk7XG5cdFx0dGhpcy5jb2RlYmxvY2tTZXR0aW5nRWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoKTtcblx0XHR0aGlzLmdlbmVyYXRlQ29kZWJsb2NrU2V0dGluZygpO1xuXG5cdH1cblx0ZGlzcGxheUlubGluZUNvZGVTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQpIHtcblx0XHR0aGlzLmVtcHR5U2V0dGluZ3MoY29udGFpbmVyRWwpO1xuXHRcdHRoaXMuZ2VuZXJhdGVTZXR0aW5nc1N3aXRjaGVyKGNvbnRhaW5lckVsKTtcblx0XHR0aGlzLmdlbmVyYXRlVGhlbWVTZXR0aW5ncyhjb250YWluZXJFbCk7XG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcblx0XHR0aGlzLmV4YW1wbGVJbmxpbmVDb2RlQ29udGFpbmVyID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XG5cdFx0dGhpcy5nZW5lcmF0ZUV4YW1wbGVJbmxpbmVDb2RlKCk7XG5cdFx0dGhpcy5nZW5lcmF0ZUV4YW1wbGVJbmxpbmVDb2RlU2V0dGluZ3MoY29udGFpbmVyRWwpO1xuXHRcdHRoaXMuZ2VuZXJhdGVJbmxpbmVDb2RlU2V0dGluZ3MoY29udGFpbmVyRWwpO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIFNldHRpbmdzIEdyb3Vwc1xuXHRlbXB0eVNldHRpbmdzKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnRhaW5lckVsLmVtcHR5KCk7XG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMVwiLCB7dGV4dDogXCJTZXR0aW5ncyBmb3IgdGhlIENvZGUgU3R5bGVyIFBsdWdpbi5cIn0pO1xuXHR9XG5cdGdlbmVyYXRlU2V0dGluZ3NTd2l0Y2hlcihjb250YWluZXJFbDogSFRNTEVsZW1lbnQpIHtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiQ2hvb3NlIFNldHRpbmdzIFBhZ2VcIilcblx0XHRcdC5zZXREZXNjKFwiQ2hhbmdlIGRyb3Bkb3duIHRvIG1vZGlmeSBkaWZmZXJlbnQgZ3JvdXBzIG9mIHNldHRpbmdzXCIpXG5cdFx0XHQuYWRkRHJvcGRvd24oKGRyb3Bkb3duKSA9PiBkcm9wZG93blxuXHRcdFx0XHQuYWRkT3B0aW9ucyhTRVRUSU5HU19QQUdFUylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGFnZSlcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wYWdlID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5nZW5lcmF0ZVNldHRpbmdzKGNvbnRhaW5lckVsKTtcblx0XHRcdFx0fSkpO1xuXHR9XG5cdGdlbmVyYXRlU2V0dGluZ3MoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKHRoaXMucGFnZSA9PT0gXCJtYWluXCIpXG5cdFx0XHR0aGlzLmRpc3BsYXlNYWluU2V0dGluZ3MoY29udGFpbmVyRWwpO1xuXHRcdGVsc2UgaWYgKHRoaXMucGFnZSA9PT0gXCJjb2RlYmxvY2tcIilcblx0XHRcdHRoaXMuZGlzcGxheUNvZGVibG9ja1NldHRpbmdzKGNvbnRhaW5lckVsKTtcblx0XHRlbHNlIGlmICh0aGlzLnBhZ2UgPT09IFwiaW5saW5lXCIpXG5cdFx0XHR0aGlzLmRpc3BsYXlJbmxpbmVDb2RlU2V0dGluZ3MoY29udGFpbmVyRWwpO1xuXHR9XG5cdGdlbmVyYXRlQ29kZWJsb2NrU3R5bGluZ1N3aXRjaGVyKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkge1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJDaG9vc2UgQ29kZWJsb2NrIFNldHRpbmdzXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkNoYW5nZSBkcm9wZG93biB0byBtb2RpZnkgc3R5bGVzIGFuZCBzZXR0aW5ncyBvZiBkaWZmZXJlbnQgY29kZWJsb2NrIHNlY3Rpb25zXCIpXG5cdFx0XHQuYWRkRHJvcGRvd24oKGRyb3Bkb3duKSA9PiBkcm9wZG93blxuXHRcdFx0XHQuYWRkT3B0aW9ucyhDT0RFQkxPQ0tfUEFHRVMpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLmNvZGVibG9ja1BhZ2UpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY29kZWJsb2NrUGFnZSA9IHZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuZ2VuZXJhdGVDb2RlYmxvY2tTZXR0aW5nKCk7XG5cdFx0XHRcdH0pKTtcblx0fVxuXHRnZW5lcmF0ZUNvZGVibG9ja1NldHRpbmcoKSB7XG5cdFx0dGhpcy5jb2RlYmxvY2tTZXR0aW5nRWwuZW1wdHkoKTtcblx0XHRpZiAodGhpcy5jb2RlYmxvY2tQYWdlID09PSBcImJvZHlcIilcblx0XHRcdHRoaXMuZ2VuZXJhdGVDb2RlYmxvY2tCb2R5U2V0dGluZ3ModGhpcy5jb2RlYmxvY2tTZXR0aW5nRWwpO1xuXHRcdGVsc2UgaWYgKHRoaXMuY29kZWJsb2NrUGFnZSA9PT0gXCJndXR0ZXJcIilcblx0XHRcdHRoaXMuZ2VuZXJhdGVDb2RlYmxvY2tHdXR0ZXJTZXR0aW5ncyh0aGlzLmNvZGVibG9ja1NldHRpbmdFbCk7XG5cdFx0ZWxzZSBpZiAodGhpcy5jb2RlYmxvY2tQYWdlID09PSBcImhlYWRlclwiKVxuXHRcdFx0dGhpcy5nZW5lcmF0ZUNvZGVibG9ja0hlYWRlclNldHRpbmdzKHRoaXMuY29kZWJsb2NrU2V0dGluZ0VsKTtcblx0XHRlbHNlIGlmICh0aGlzLmNvZGVibG9ja1BhZ2UgPT09IFwiaGlnaGxpZ2h0XCIpXG5cdFx0XHR0aGlzLmdlbmVyYXRlQ29kZWJsb2NrSGlnaGxpZ2h0U2V0dGluZ3ModGhpcy5jb2RlYmxvY2tTZXR0aW5nRWwpO1xuXHRcdGVsc2UgaWYgKHRoaXMuY29kZWJsb2NrUGFnZSA9PT0gXCJsYW5ndWFnZXNcIilcblx0XHRcdHRoaXMuZ2VuZXJhdGVDb2RlYmxvY2tMYW5ndWFnZVNldHRpbmdzKHRoaXMuY29kZWJsb2NrU2V0dGluZ0VsKTtcblx0XHRlbHNlIGlmICh0aGlzLmNvZGVibG9ja1BhZ2UgPT09IFwicGx1Z2luc1wiKVxuXHRcdFx0dGhpcy5nZW5lcmF0ZVBsdWdpbkNvbXBhdGliaWxpdHlTZXR0aW5ncyh0aGlzLmNvZGVibG9ja1NldHRpbmdFbCk7XG5cdFx0ZWxzZSBpZiAodGhpcy5jb2RlYmxvY2tQYWdlID09PSBcImV4YW1wbGVcIilcblx0XHRcdHRoaXMuZ2VuZXJhdGVFeGFtcGxlQ29kZWJsb2NrU2V0dGluZ3ModGhpcy5jb2RlYmxvY2tTZXR0aW5nRWwpO1xuXHR9XG5cdGdlbmVyYXRlQ29yZVNldHRpbmdzKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkge1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJTdHlsZSBDb2RlIG9uIEV4cG9ydFwiKVxuXHRcdFx0LnNldERlc2MoXCJJZiBlbmFibGVkLCBzdHlsaW5nIHdpbGwgYmUgYXBwbGllZCB3aGVuIGV4cG9ydGluZyB0byBQREYuXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRlY29yYXRlUHJpbnQpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWNvcmF0ZVByaW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTsgICAgICAgICBcblx0XHRcdFx0fSkpO1xuXHR9XG5cdGdlbmVyYXRlVGhlbWVTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQpIHtcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbChcImgyXCIsIHt0ZXh0OiBcIlRoZW1lIFNldHRpbmdzXCJ9KTtcblx0XHRsZXQgdGhlbWVEcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQ7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIlNlbGVjdCBUaGVtZVwiKVxuXHRcdFx0LmFkZERyb3Bkb3duKChkcm9wZG93bikgPT4ge1xuXHRcdFx0XHR0aGVtZURyb3Bkb3duID0gZHJvcGRvd247XG5cdFx0XHRcdHRoaXMudXBkYXRlRHJvcGRvd24odGhlbWVEcm9wZG93bix0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG5cdFx0XHRcdHRoZW1lRHJvcGRvd24ub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZSA9IHZhbHVlO1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0pO1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdFx0dGhpcy5kaXNwbGF5KCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC5hZGRFeHRyYUJ1dHRvbihidXR0b24gPT4ge1xuXHRcdFx0XHRidXR0b24uc2V0VG9vbHRpcChcIlVwZGF0ZSB0aGVtZVwiKTtcblx0XHRcdFx0YnV0dG9uLnNldEljb24oXCJzYXZlXCIpO1xuXHRcdFx0XHRidXR0b24ub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGhlbWVzW3RoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWVdID0gc3RydWN0dXJlZENsb25lKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZSk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVBbHRlcm5hdGl2ZUhpZ2hsaWdodHMoKTtcblx0XHRcdFx0XHRuZXcgTm90aWNlKGAke3RoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWV9IHRoZW1lIHNhdmVkIHN1Y2Nlc3NmdWxseSFgKTsgLy9OT1NPTkFSXG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LmFkZEV4dHJhQnV0dG9uKGJ1dHRvbiA9PiB7XG5cdFx0XHRcdGJ1dHRvbi5zZXRUb29sdGlwKFwiRGVsZXRlIHRoZW1lXCIpO1xuXHRcdFx0XHRidXR0b24uc2V0SWNvbihcInRyYXNoXCIpO1xuXHRcdFx0XHRidXR0b24ub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWUudHJpbSgpLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJTZWxlY3QgYSB0aGVtZSBmaXJzdCB0byBkZWxldGVcIik7IC8vTk9TT05BUlxuXHRcdFx0XHRcdGVsc2UgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWUgaW4gREVGQVVMVF9TRVRUSU5HUy50aGVtZXMpXG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKFwiWW91IGNhbm5vdCBkZWxldGUgdGhlIGRlZmF1bHQgdGhlbWVzXCIpOyAvL05PU09OQVJcblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV07XG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKGAke3RoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWV9IHRoZW1lIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5IWApOyAvL05PU09OQVJcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWUgPSBcIkRlZmF1bHRcIjtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0pO1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVEcm9wZG93bih0aGVtZURyb3Bkb3duLHRoaXMucGx1Z2luLnNldHRpbmdzKTtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdFx0XHR0aGlzLmRpc3BsYXkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0bGV0IG5ld1RoZW1lTmFtZTogVGV4dENvbXBvbmVudDtcblx0XHRsZXQgbmV3VGhlbWVEZWZhdWx0OiBUb2dnbGVDb21wb25lbnQ7XG5cdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3VGhlbWUgPSBcIlwiO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJBZGQgTmV3IFRoZW1lXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkNyZWF0ZSBhIG5ldyB0aGVtZSBmcm9tIHRoZSBjdXJyZW50IHNldHRpbmdzLlwiKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB7bmV3VGhlbWVOYW1lID0gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoXCJOZXcgdGhlbWUgbmFtZVwiKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3VGhlbWUpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdUaGVtZSA9IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuYWRkRXh0cmFCdXR0b24oYnV0dG9uID0+IHtcblx0XHRcdFx0YnV0dG9uLnNldFRvb2x0aXAoXCJTYXZlIHRoZW1lXCIpO1xuXHRcdFx0XHRidXR0b24uc2V0SWNvbihcInBsdXNcIik7XG5cdFx0XHRcdGJ1dHRvbi5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3VGhlbWUudHJpbSgpLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJTZXQgYSBuYW1lIGZvciB5b3VyIHRoZW1lXCIpOyAvL05PU09OQVJcblx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdUaGVtZSBpbiBERUZBVUxUX1NFVFRJTkdTLnRoZW1lcylcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJZb3UgY2FuJ3Qgb3ZlcndyaXRlIHRoZSBkZWZhdWx0IHRoZW1lc1wiKTsgLy9OT1NPTkFSXG5cdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3VGhlbWUgaW4gdGhpcy5wbHVnaW4uc2V0dGluZ3MudGhlbWVzKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdUaGVtZV0gPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lKTtcblx0XHRcdFx0XHRcdFx0bmV3IE5vdGljZShgJHt0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdUaGVtZX0gdGhlbWUgdXBkYXRlZCBzdWNjZXNzZnVsbHkhYCk7IC8vTk9TT05BUlxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGhlbWVzW3RoaXMucGx1Z2luLnNldHRpbmdzLm5ld1RoZW1lXSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUpO1xuXHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKGAke3RoaXMucGx1Z2luLnNldHRpbmdzLm5ld1RoZW1lfSB0aGVtZSBzYXZlZCBzdWNjZXNzZnVsbHkhYCk7IC8vTk9TT05BUlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZSA9IHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld1RoZW1lO1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVEcm9wZG93bih0aGVtZURyb3Bkb3duLHRoaXMucGx1Z2luLnNldHRpbmdzKTtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlQWx0ZXJuYXRpdmVIaWdobGlnaHRzKCk7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdUaGVtZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRuZXdUaGVtZU5hbWUuc2V0VmFsdWUoXCJcIik7XG5cdFx0XHRcdFx0XHRuZXdUaGVtZURlZmF1bHQuc2V0VmFsdWUoZmFsc2UpO1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdH1cblx0Z2VuZXJhdGVDb2RlYmxvY2tCb2R5U2V0dGluZ3MoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSB7XG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoXCJoM1wiLCB7dGV4dDogXCJDb2RlYmxvY2sgQXBwZWFyYW5jZVwifSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkNvZGVibG9jayBCYWNrZ3JvdW5kIENvbG91clwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImNvZGVibG9ja19iYWNrZ3JvdW5kXCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uY29kZWJsb2NrLmJhY2tncm91bmRDb2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uY29kZWJsb2NrLmJhY2tncm91bmRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHQpO30pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJDb2RlYmxvY2sgVGV4dCBDb2xvdXJcIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJjb2RlYmxvY2tfdGV4dFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmNvZGVibG9jay50ZXh0Q29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmNvZGVibG9jay50ZXh0Q29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiQ29kZWJsb2NrIEN1cnZhdHVyZVwiKVxuXHRcdFx0LnNldERlc2MoXCJEZXRlcm1pbmVzIGhvdyByb3VuZGVkIHRoZSBjb2RlYmxvY2tzIGFwcGVhciBpbiBwaXhlbHMuXCIpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge1xuXHRcdFx0XHRsZXQgcmVzZXR0YWJsZVNsaWRlcjogU2xpZGVyQ29tcG9uZW50O1xuXHRcdFx0XHRzZXR0aW5nLmFkZFNsaWRlcigoc2xpZGVyKSA9PiB7cmVzZXR0YWJsZVNsaWRlciA9IHNsaWRlclxuXHRcdFx0XHRcdC5zZXRMaW1pdHMoMCwyNSwxKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmN1cnZhdHVyZSlcblx0XHRcdFx0XHQuc2V0RHluYW1pY1Rvb2x0aXAoKVxuXHRcdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2suY3VydmF0dXJlID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpOyAgICBcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNldHRpbmcuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge2J1dHRvblxuXHRcdFx0XHRcdC5zZXRJY29uKFwicmVzZXRcIilcblx0XHRcdFx0XHQuc2V0VG9vbHRpcChcIlJlc3RvcmUgZGVmYXVsdCBjdXJ2YXR1cmVcIilcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmN1cnZhdHVyZSA9IHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXS5zZXR0aW5ncy5jb2RlYmxvY2suY3VydmF0dXJlO1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmN1cnZhdHVyZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJMYW5ndWFnZSBDb2xvdXJlZCBCb3JkZXJzXCIpXG5cdFx0XHQuc2V0RGVzYyhcIklmIGVuYWJsZWQsIGxhbmd1YWdlcyB3aXRoIGljb25zIGRpc3BsYXkgYSBsZWZ0IGJvcmRlciB3aXRoIHRoZSBjb2xvdXIgb2YgdGhlIGljb24uIFRoZSBzbGlkZXIgc2V0cyB0aGUgd2lkdGggb2YgdGhlIGJvcmRlci5cIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyQ29sb3VyKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyQ29sb3VyID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJsYW5ndWFnZUJvcmRlckNvbG91clwiXS5mb3JFYWNoKGNvbXBvbmVudCA9PiB7Y29tcG9uZW50LnNldERpc2FibGVkKCF2YWx1ZSk7fSk7XG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge1xuXHRcdFx0XHRsZXQgcmVzZXR0YWJsZVNsaWRlcjogU2xpZGVyQ29tcG9uZW50O1xuXHRcdFx0XHRzZXR0aW5nLmFkZFNsaWRlcigoc2xpZGVyKSA9PiB7cmVzZXR0YWJsZVNsaWRlciA9IHNsaWRlclxuXHRcdFx0XHRcdC5zZXRMaW1pdHMoMCwyMCwxKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQubGFuZ3VhZ2VCb3JkZXJXaWR0aClcblx0XHRcdFx0XHQuc2V0RGlzYWJsZWQoIXRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5hZHZhbmNlZC5sYW5ndWFnZUJvcmRlckNvbG91cilcblx0XHRcdFx0XHQuc2V0RHluYW1pY1Rvb2x0aXAoKVxuXHRcdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5hZHZhbmNlZC5sYW5ndWFnZUJvcmRlcldpZHRoID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpOyAgICBcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJsYW5ndWFnZUJvcmRlckNvbG91clwiXS5wdXNoKHJlc2V0dGFibGVTbGlkZXIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0bGV0IHJlc2V0QnV0dG9uOiBFeHRyYUJ1dHRvbkNvbXBvbmVudDtcblx0XHRcdFx0c2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7cmVzZXRCdXR0b24gPSBidXR0b25cblx0XHRcdFx0XHQuc2V0SWNvbihcInJlc2V0XCIpXG5cdFx0XHRcdFx0LnNldERpc2FibGVkKCF0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQubGFuZ3VhZ2VCb3JkZXJDb2xvdXIpXG5cdFx0XHRcdFx0LnNldFRvb2x0aXAoXCJSZXN0b3JlIGRlZmF1bHQgY29sb3VyIHN0b3BcIilcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQubGFuZ3VhZ2VCb3JkZXJXaWR0aCA9IHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXS5zZXR0aW5ncy5hZHZhbmNlZC5sYW5ndWFnZUJvcmRlcldpZHRoO1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQubGFuZ3VhZ2VCb3JkZXJXaWR0aCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImxhbmd1YWdlQm9yZGVyQ29sb3VyXCJdLnB1c2gocmVzZXRCdXR0b24pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJVbndyYXAgY29kZWJsb2NrIGxpbmVzXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkNob29zZSB3aGV0aGVyIHRvIHVud3JhcCBsaW5lcyBpbiByZWFkaW5nIG1vZGVcIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmNvZGVibG9jay51bndyYXBMaW5lcylcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2sudW53cmFwTGluZXMgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLmdlbmVyYXRlV3JhcExpbmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKHRydWUpOyAgXG5cdFx0XHRcdH0pKTtcblx0XHR0aGlzLndyYXBMaW5lc0NvbnRhaW5lciA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xuXHRcdHRoaXMuZ2VuZXJhdGVXcmFwTGluZVNldHRpbmdzKCk7XG5cdH1cblx0Z2VuZXJhdGVXcmFwTGluZVNldHRpbmdzKCkge1xuXHRcdHRoaXMud3JhcExpbmVzQ29udGFpbmVyLmVtcHR5KCk7XG5cdFx0aWYgKCF0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLnVud3JhcExpbmVzKVxuXHRcdFx0cmV0dXJuO1xuXHRcdG5ldyBTZXR0aW5nKHRoaXMud3JhcExpbmVzQ29udGFpbmVyKVxuXHRcdFx0LnNldE5hbWUoXCJXcmFwIExpbmVzIG9uIENsaWNrXCIpXG5cdFx0XHQuc2V0RGVzYyhcIklmIGVuYWJsZWQsIGluIHJlYWRpbmcgbW9kZSwgaG9sZGluZyBjbGljayBvbiBhIGNvZGVibG9jayB3aWxsIHdyYXAgdGhlIGxpbmVzIGZvciBiZXR0ZXIgdmlzaWJpbGl0eS5cIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmNvZGVibG9jay53cmFwTGluZXNBY3RpdmUpXG5cdFx0XHRcdC5zZXREaXNhYmxlZCghdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmNvZGVibG9jay51bndyYXBMaW5lcylcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2sud3JhcExpbmVzQWN0aXZlID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3ModHJ1ZSk7IFxuXHRcdFx0XHR9KSk7XG5cdH1cblx0Z2VuZXJhdGVDb2RlYmxvY2tHdXR0ZXJTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQpIHtcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbChcImgzXCIsIHt0ZXh0OiBcIkd1dHRlciBBcHBlYXJhbmNlXCJ9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiRW5hYmxlIExpbmUgTnVtYmVyc1wiKVxuXHRcdFx0LnNldERlc2MoXCJJZiBkaXNhYmxlZCwgdGhlIGJlbG93IHNldHRpbmdzIGFyZSBkaXNhYmxlZCB0b28uXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2subGluZU51bWJlcnMpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmxpbmVOdW1iZXJzID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5nZW5lcmF0ZUNvZGVibG9ja0xpbmVOdW1iZXJTZXR0aW5ncygpO1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKHRydWUpOyAgICAgICAgIFxuXHRcdFx0XHR9KSk7XG5cdFx0dGhpcy5saW5lTnVtYmVyc0NvbnRhaW5lciA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xuXHRcdHRoaXMuZ2VuZXJhdGVDb2RlYmxvY2tMaW5lTnVtYmVyU2V0dGluZ3MoKTtcblx0fVxuXHRnZW5lcmF0ZUNvZGVibG9ja0xpbmVOdW1iZXJTZXR0aW5ncygpIHtcblx0XHR0aGlzLmxpbmVOdW1iZXJzQ29udGFpbmVyLmVtcHR5KCk7XG5cdFx0aWYgKCF0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmxpbmVOdW1iZXJzKVxuXHRcdFx0cmV0dXJuO1xuXHRcdG5ldyBTZXR0aW5nKHRoaXMubGluZU51bWJlcnNDb250YWluZXIpXG5cdFx0XHQuc2V0TmFtZShcIkd1dHRlciBCYWNrZ3JvdW5kIENvbG91clwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbix0aGlzLmxpbmVOdW1iZXJzQ29udGFpbmVyLHNldHRpbmcsXG5cdFx0XHRcdFwiZ3V0dGVyX2JhY2tncm91bmRcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5ndXR0ZXIuYmFja2dyb3VuZENvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5ndXR0ZXIuYmFja2dyb3VuZENvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdCk7fSk7XG5cdFx0bmV3IFNldHRpbmcodGhpcy5saW5lTnVtYmVyc0NvbnRhaW5lcilcblx0XHRcdC5zZXROYW1lKFwiTGluZSBOdW1iZXIgQ29sb3VyXCIpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge3RoaXMuY3JlYXRlUGlja3IoXG5cdFx0XHRcdHRoaXMucGx1Z2luLHRoaXMubGluZU51bWJlcnNDb250YWluZXIsc2V0dGluZyxcblx0XHRcdFx0XCJsaW5lX251bWJlclwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmd1dHRlci50ZXh0Q29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmd1dHRlci50ZXh0Q29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyh0aGlzLmxpbmVOdW1iZXJzQ29udGFpbmVyKVxuXHRcdFx0LnNldE5hbWUoXCJIaWdobGlnaHQgTGluZSBOdW1iZXJzXCIpXG5cdFx0XHQuc2V0RGVzYyhcIklmIGVuYWJsZWQsIGhpZ2hsaWdodHMgd2lsbCBhbHNvIGhpZ2hsaWdodCB0aGUgbGluZSBudW1iZXJzLlwiKVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuZ3V0dGVyLmhpZ2hsaWdodClcblx0XHRcdFx0LnNldERpc2FibGVkKCF0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmxpbmVOdW1iZXJzKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmd1dHRlci5oaWdobGlnaHQgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSk7XG5cdFx0bmV3IFNldHRpbmcodGhpcy5saW5lTnVtYmVyc0NvbnRhaW5lcilcblx0XHRcdC5zZXROYW1lKFwiSW5kaWNhdGUgQ3VycmVudCBMaW5lIE51bWJlclwiKVxuXHRcdFx0LnNldERlc2MoXCJJZiBlbmFibGVkLCB0aGUgY3VycmVudCBsaW5lIG51bWJlciBpbiBjb2RlYmxvY2tzIHdpbGwgYmUgaW5kaWNhdGVkIHdpdGggYSBzZXBhcmF0ZSBjb2xvdXIuXCIpXG5cdFx0XHQuc2V0Q2xhc3MoXCJjb2RlLXN0eWxlci1zcGFjZWRcIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmd1dHRlci5hY3RpdmVMaW5lKVxuXHRcdFx0XHQuc2V0RGlzYWJsZWQoIXRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5jb2RlYmxvY2subGluZU51bWJlcnMpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuZ3V0dGVyLmFjdGl2ZUxpbmUgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbix0aGlzLmxpbmVOdW1iZXJzQ29udGFpbmVyLHNldHRpbmcsXG5cdFx0XHRcdFwiYWN0aXZlX2xpbmVfbnVtYmVyXCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uZ3V0dGVyLmFjdGl2ZVRleHRDb2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uZ3V0dGVyLmFjdGl2ZVRleHRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHQpO30pO1xuXHR9XG5cdGdlbmVyYXRlQ29kZWJsb2NrSGVhZGVyU2V0dGluZ3MoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSB7XG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoXCJoM1wiLCB7dGV4dDogXCJIZWFkZXIgQXBwZWFyYW5jZVwifSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkhlYWRlciBCYWNrZ3JvdW5kIENvbG91clwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImhlYWRlcl9iYWNrZ3JvdW5kXCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGVhZGVyLmJhY2tncm91bmRDb2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGVhZGVyLmJhY2tncm91bmRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHQpO30pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJIZWFkZXIgRm9udCBTaXplXCIpXG5cdFx0XHQuc2V0RGVzYyhcIlNldCB0aGUgZm9udCBzaXplIGZvciBoZWFkZXIgbGFuZ3VhZ2UgdGFncyBhbmQgdGl0bGVzLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHtcblx0XHRcdFx0bGV0IHJlc2V0dGFibGVTbGlkZXI6IFNsaWRlckNvbXBvbmVudDtcblx0XHRcdFx0c2V0dGluZy5hZGRTbGlkZXIoKHNsaWRlcikgPT4ge3Jlc2V0dGFibGVTbGlkZXIgPSBzbGlkZXJcblx0XHRcdFx0XHQuc2V0TGltaXRzKDYsMzIsMSlcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5mb250U2l6ZSlcblx0XHRcdFx0XHQuc2V0RHluYW1pY1Rvb2x0aXAoKVxuXHRcdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIuZm9udFNpemUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7ICAgIFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7YnV0dG9uXG5cdFx0XHRcdFx0LnNldEljb24oXCJyZXNldFwiKVxuXHRcdFx0XHRcdC5zZXRUb29sdGlwKFwiUmVzdG9yZSBkZWZhdWx0IGZvbnQgc2l6ZVwiKVxuXHRcdFx0XHRcdC5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIuZm9udFNpemUgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0uc2V0dGluZ3MuaGVhZGVyLmZvbnRTaXplO1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmZvbnRTaXplKTtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkhlYWRlciBUaXRsZSBUZXh0IFN0eWxpbmdcIilcblx0XHRcdC5zZXREZXNjKFwiU3R5bGUgdGhlIGhlYWRlciB0aXRsZSB0ZXh0IHVzaW5nIGJvbGQgYW5kIGl0YWxpYyB0b2dnbGVzLCBieSBzZXR0aW5nIGEgZm9udCBvciBieSBzZXR0aW5nIGEgdGV4dCBjb2xvdXIuXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7dG9nZ2xlXG5cdFx0XHRcdC5zZXRUb29sdGlwKFwiVG9nZ2xlIGJvbGQgdGl0bGUgdGV4dFwiKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci50aXRsZS50ZXh0Qm9sZClcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIudGl0bGUudGV4dEJvbGQgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB7dG9nZ2xlXG5cdFx0XHRcdC5zZXRUb29sdGlwKFwiVG9nZ2xlIGl0YWxpYyB0aXRsZSB0ZXh0XCIpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLnRpdGxlLnRleHRJdGFsaWMpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLnRpdGxlLnRleHRJdGFsaWMgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHt0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIkZvbnRcIilcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIudGl0bGUudGV4dEZvbnQpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLnRpdGxlLnRleHRGb250ID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImhlYWRlcl90aXRsZV90ZXh0XCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGVhZGVyLnRpdGxlLnRleHRDb2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGVhZGVyLnRpdGxlLnRleHRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHQpO30pO1xuXHRcdGxldCBmb2xkUGxhY2Vob2xkZXJUaW1lb3V0OiBOb2RlSlMuVGltZW91dCA9IHNldFRpbWVvdXQoKCk9Pnt9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiRm9sZCBQbGFjZWhvbGRlciBUZXh0XCIpXG5cdFx0XHQuc2V0RGVzYyhcIlRpdGxlIHBsYWNlaG9sZGVyIHRleHQgZm9yIGZvbGRlZCBjb2RlIHdoZW4gbm8gdGl0bGUgcGFyYW1ldGVyIGlzIHNldC5cIilcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoRk9MRF9QTEFDRUhPTERFUilcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIuZm9sZFBsYWNlaG9sZGVyKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5mb2xkUGxhY2Vob2xkZXIgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dChmb2xkUGxhY2Vob2xkZXJUaW1lb3V0KTtcblx0XHRcdFx0XHRmb2xkUGxhY2Vob2xkZXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKT0+dGhpcy5yZXJlbmRlcigpLDEwMDApO1xuXHRcdFx0XHR9KSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkhlYWRlciBTZXBhcmF0b3IgQ29sb3VyXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkNvbG91ciBvZiB0aGUgbGluZSBzZXBhcmF0aW5nIHRoZSBjb2RlYmxvY2sgaGVhZGVyIGFuZCB0aGUgY29kZWJsb2NrLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImhlYWRlcl9zZXBhcmF0b3JcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oZWFkZXIubGluZUNvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oZWFkZXIubGluZUNvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdCk7fSk7XG5cdFx0XHRcblx0XHRjb250YWluZXJFbC5jcmVhdGVFbChcImg1XCIsIHt0ZXh0OiBcIkhlYWRlciBMYW5ndWFnZSBUYWcgQXBwZWFyYW5jZVwifSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkRpc3BsYXkgSGVhZGVyIExhbmd1YWdlIFRhZ3NcIilcblx0XHRcdC5zZXREZXNjKFwiRGV0ZXJtaW5lIHdoZW4gdG8gc2hvdyBsYW5ndWFnZSB0YWdzIGluIHRoZSBoZWFkZXIuIFxcXCJUaXRsZSBPbmx5XFxcIiB3aWxsIG9ubHkgc2hvdyBsYW5ndWFnZSB0YWdzIHdoZW4gdGhlIHRpdGxlIHBhcmFtZXRlciBpcyBzZXQuXCIpXG5cdFx0XHQuYWRkRHJvcGRvd24oKGRyb3Bkb3duKSA9PiBkcm9wZG93blxuXHRcdFx0XHQuYWRkT3B0aW9ucyhESVNQTEFZX09QVElPTlMpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLmRpc3BsYXkpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWU6IERpc3BsYXkpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLmRpc3BsYXkgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLmdlbmVyYXRlSGVhZGVyVGFnU2V0dGluZ3MoKTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncyh0cnVlKTtcblx0XHRcdFx0fSkpO1xuXHRcdHRoaXMuaGVhZGVyVGFnc0NvbnRhaW5lciA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xuXHRcdHRoaXMuZ2VuZXJhdGVIZWFkZXJUYWdTZXR0aW5ncygpO1xuXHRcdFxuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDVcIiwge3RleHQ6IFwiSGVhZGVyIExhbmd1YWdlIEljb24gQXBwZWFyYW5jZVwifSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkRpc3BsYXkgSGVhZGVyIExhbmd1YWdlIEljb25zXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkRldGVybWluZSB3aGVuIHRvIHNob3cgbGFuZ3VhZ2UgaWNvbnMgd2hlcmUgYXZhaWxhYmxlLiBcXFwiVGl0bGUgT25seVxcXCIgd2lsbCBvbmx5IHNob3cgbGFuZ3VhZ2UgdGFncyB3aGVuIHRoZSB0aXRsZSBwYXJhbWV0ZXIgaXMgc2V0LlwiKVxuXHRcdFx0LmFkZERyb3Bkb3duKChkcm9wZG93bikgPT4gZHJvcGRvd25cblx0XHRcdFx0LmFkZE9wdGlvbnMoRElTUExBWV9PUFRJT05TKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZUljb24uZGlzcGxheSlcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZTogRGlzcGxheSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VJY29uLmRpc3BsYXkgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLmdlbmVyYXRlSGVhZGVySWNvblNldHRpbmdzKCk7XG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3ModHJ1ZSk7XG5cdFx0XHRcdH0pKTtcblx0XHR0aGlzLmhlYWRlckljb25zQ29udGFpbmVyID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XG5cdFx0dGhpcy5nZW5lcmF0ZUhlYWRlckljb25TZXR0aW5ncygpO1xuXHR9XG5cdGdlbmVyYXRlSGVhZGVyVGFnU2V0dGluZ3MoKSB7XG5cdFx0dGhpcy5oZWFkZXJUYWdzQ29udGFpbmVyLmVtcHR5KCk7XG5cdFx0aWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VUYWcuZGlzcGxheSA9PT0gXCJub25lXCIpXG5cdFx0XHRyZXR1cm47XG5cdFx0bmV3IFNldHRpbmcodGhpcy5oZWFkZXJUYWdzQ29udGFpbmVyKVxuXHRcdFx0LnNldE5hbWUoXCJIZWFkZXIgTGFuZ3VhZ2UgVGFnIEJhY2tncm91bmQgQ29sb3VyXCIpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge3RoaXMuY3JlYXRlUGlja3IoXG5cdFx0XHRcdHRoaXMucGx1Z2luLHRoaXMuaGVhZGVyVGFnc0NvbnRhaW5lcixzZXR0aW5nLFxuXHRcdFx0XHRcImhlYWRlcl9sYW5ndWFnZV90YWdfYmFja2dyb3VuZFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhlYWRlci5sYW5ndWFnZVRhZy5iYWNrZ3JvdW5kQ29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhlYWRlci5sYW5ndWFnZVRhZy5iYWNrZ3JvdW5kQ29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyh0aGlzLmhlYWRlclRhZ3NDb250YWluZXIpXG5cdFx0XHQuc2V0TmFtZShcIkhlYWRlciBMYW5ndWFnZSBUYWcgVGV4dCBTdHlsaW5nXCIpXG5cdFx0XHQuc2V0RGVzYyhcIlN0eWxlIHRoZSBoZWFkZXIgbGFuZ3VhZ2UgdGFnIHRleHQgdXNpbmcgYm9sZCBhbmQgaXRhbGljIHRvZ2dsZXMsIGJ5IHNldHRpbmcgYSBmb250IG9yIGJ5IHNldHRpbmcgYSB0ZXh0IGNvbG91ci5cIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZVxuXHRcdFx0XHQuc2V0VG9vbHRpcChcIlRvZ2dsZSBib2xkIGxhbmd1YWdlIHRhZyB0ZXh0XCIpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRCb2xkKVxuXHRcdFx0XHQuc2V0RGlzYWJsZWQodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy5kaXNwbGF5PT09XCJub25lXCIpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRCb2xkID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcblx0XHRcdFx0LnNldFRvb2x0aXAoXCJUb2dnbGUgaXRhbGljIGxhbmd1YWdlIHRhZyB0ZXh0XCIpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRJdGFsaWMpXG5cdFx0XHRcdC5zZXREaXNhYmxlZCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLmRpc3BsYXk9PT1cIm5vbmVcIilcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VUYWcudGV4dEl0YWxpYyA9IHZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcIkZvbnRcIilcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VUYWcudGV4dEZvbnQpXG5cdFx0XHRcdC5zZXREaXNhYmxlZCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLmRpc3BsYXk9PT1cIm5vbmVcIilcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VUYWcudGV4dEZvbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSlcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sdGhpcy5oZWFkZXJUYWdzQ29udGFpbmVyLHNldHRpbmcsXG5cdFx0XHRcdFwiaGVhZGVyX2xhbmd1YWdlX3RhZ190ZXh0XCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRDb2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHQpO30pO1xuXHR9XG5cdGdlbmVyYXRlSGVhZGVySWNvblNldHRpbmdzKCkge1xuXHRcdHRoaXMuaGVhZGVySWNvbnNDb250YWluZXIuZW1wdHkoKTtcblx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZUljb24uZGlzcGxheSA9PT0gXCJub25lXCIpXG5cdFx0XHRyZXR1cm47XG5cdFx0bmV3IFNldHRpbmcodGhpcy5oZWFkZXJJY29uc0NvbnRhaW5lcilcblx0XHRcdC5zZXROYW1lKFwiTGFuZ3VhZ2UgSWNvbnMgQ29sb3VyZWRcIilcblx0XHRcdC5zZXREZXNjKFwiSWYgZGlzYWJsZWQsIGxhbmd1YWdlIGljb25zIHdpbGwgYmUgYmxhY2sgYW5kIHdoaXRlLlwiKVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlSWNvbi5kaXNwbGF5Q29sb3VyKVxuXHRcdFx0XHQuc2V0RGlzYWJsZWQodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZUljb24uZGlzcGxheT09PVwibm9uZVwiKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhlYWRlci5sYW5ndWFnZUljb24uZGlzcGxheUNvbG91ciA9IHZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRuZXcgU2V0dGluZyh0aGlzLmhlYWRlckljb25zQ29udGFpbmVyKVxuXHRcdFx0LnNldE5hbWUoXCJMYW5ndWFnZSBJY29uIFNpemVcIilcblx0XHRcdC5zZXREZXNjKFwiU2V0IHRoZSBzaXplIG9mIHRoZSBkaXNwbGF5ZWQgbGFuZ3VhZ2UgaWNvbnMuXCIpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge1xuXHRcdFx0XHRsZXQgcmVzZXR0YWJsZVNsaWRlcjogU2xpZGVyQ29tcG9uZW50O1xuXHRcdFx0XHRzZXR0aW5nLmFkZFNsaWRlcigoc2xpZGVyKSA9PiB7cmVzZXR0YWJsZVNsaWRlciA9IHNsaWRlclxuXHRcdFx0XHRcdC5zZXRMaW1pdHMoMTAsNDAsMSlcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmljb25TaXplKVxuXHRcdFx0XHRcdC5zZXREaXNhYmxlZCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlSWNvbi5kaXNwbGF5PT09XCJub25lXCIpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQuaWNvblNpemUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7ICAgIFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiBidXR0b25cblx0XHRcdFx0XHQuc2V0SWNvbihcInJlc2V0XCIpXG5cdFx0XHRcdFx0LnNldERpc2FibGVkKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VJY29uLmRpc3BsYXk9PT1cIm5vbmVcIilcblx0XHRcdFx0XHQuc2V0VG9vbHRpcChcIlJlc3RvcmUgZGVmYXVsdCBpY29uIHNpemVcIilcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQuaWNvblNpemUgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0uc2V0dGluZ3MuYWR2YW5jZWQuaWNvblNpemU7XG5cdFx0XHRcdFx0XHRyZXNldHRhYmxlU2xpZGVyLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5hZHZhbmNlZC5pY29uU2l6ZSk7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdH0pKTtcblx0XHRcdH0pO1xuXHR9XG5cdGdlbmVyYXRlQ29kZWJsb2NrSGlnaGxpZ2h0U2V0dGluZ3MoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSB7XG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoXCJoM1wiLCB7dGV4dDogXCJIaWdobGlnaHRpbmcgQXBwZWFyYW5jZVwifSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkNvZGVibG9jayBBY3RpdmUgTGluZSBIaWdobGlnaHRcIilcblx0XHRcdC5zZXREZXNjKFwiSWYgZW5hYmxlZCwgaGlnaGxpZ2h0cyB0aGUgYWN0aXZlIGxpbmUgaW5zaWRlIGNvZGVibG9ja3MuXCIpXG5cdFx0XHQuc2V0Q2xhc3MoXCJjb2RlLXN0eWxlci1zcGFjZWRcIilcblx0XHRcdC5hZGRUb2dnbGUodG9nZ2xlID0+IHtyZXR1cm4gdG9nZ2xlXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGlnaGxpZ2h0cy5hY3RpdmVDb2RlYmxvY2tMaW5lKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmhpZ2hsaWdodHMuYWN0aXZlQ29kZWJsb2NrTGluZSA9IHZhbHVlOyBcblx0XHRcdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImNvZGVibG9ja0FjdGl2ZUxpbmVIaWdobGlnaHRcIl0uZm9yRWFjaChjb21wb25lbnQgPT4ge2NvbXBvbmVudC5zZXREaXNhYmxlZCghdmFsdWUpO30pO1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJjb2RlYmxvY2tfYWN0aXZlX2xpbmVfaGlnaGxpZ2h0XCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGlnaGxpZ2h0cy5hY3RpdmVDb2RlYmxvY2tMaW5lQ29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhpZ2hsaWdodHMuYWN0aXZlQ29kZWJsb2NrTGluZUNvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdFx0KCkgPT4gIXRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oaWdobGlnaHRzLmFjdGl2ZUNvZGVibG9ja0xpbmUsXG5cdFx0XHQpO30pO1xuXHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzW1wiY29kZWJsb2NrQWN0aXZlTGluZUhpZ2hsaWdodFwiXS5wdXNoKHRoaXMucGlja3JzW1wiY29kZWJsb2NrX2FjdGl2ZV9saW5lX2hpZ2hsaWdodFwiXS5yZXNldEJ1dHRvbik7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkRlZmF1bHQgSGlnaGxpZ2h0IENvbG91clwiKVxuXHRcdFx0LnNldERlc2MoXCJVc2VkIGJ5IHRoZSAnaGwnIHBhcmFtZXRlci5cIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sY29udGFpbmVyRWwsc2V0dGluZyxcblx0XHRcdFx0XCJkZWZhdWx0X2hpZ2hsaWdodFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhpZ2hsaWdodHMuZGVmYXVsdENvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oaWdobGlnaHRzLmRlZmF1bHRDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHQpO30pO1xuXHRcdGxldCBuZXdIaWdobGlnaHRUZXh0OiBUZXh0Q29tcG9uZW50O1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJBZGQgQWx0ZXJuYXRpdmUgSGlnaGxpZ2h0XCIpXG5cdFx0XHQuc2V0RGVzYyhcIkRlZmluZSBhIG5ldyBhbHRlcm5hdGl2ZSBoaWdobGlnaHQgbmFtZS4gVGhlIGNvbG91ciBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXIgaXQgaXMgYWRkZWQuXCIpXG5cdFx0XHQuYWRkVGV4dCh2YWx1ZSA9PiB7bmV3SGlnaGxpZ2h0VGV4dCA9IHZhbHVlXG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihcImUuZy4gZXJyb3IsIHdhcm5cIilcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld0hpZ2hsaWdodCA9IHZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuYWRkQnV0dG9uKChidXR0b24pID0+IHtcblx0XHRcdFx0YnV0dG9uLnNldEJ1dHRvblRleHQoXCJBZGRcIik7XG5cdFx0XHRcdGJ1dHRvbi5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3SGlnaGxpZ2h0LnRyaW0oKSA9PT0gXCJcIilcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJQbGVhc2UgZW50ZXIgYSBjb2xvdXIgbmFtZS5cIik7IC8vTk9TT05BUlxuXHRcdFx0XHRcdGVsc2UgaWYgKCEvXlteXFxkXVxcdyokLy50ZXN0KHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld0hpZ2hsaWdodCkpXG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKGBcIiR7dGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3SGlnaGxpZ2h0fVwiIGlzIG5vdCBhIHZhbGlkIGNvbG91ciBuYW1lLmApOyAvL05PU09OQVJcblx0XHRcdFx0XHRlbHNlIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdIaWdobGlnaHQudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IFwiaGxcIilcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJDYW5ub3Qgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgaGlnaGxpZ2h0IHBhcmFtZXRlci5cIik7IC8vTk9TT05BUlxuXHRcdFx0XHRcdGVsc2UgaWYgKFBBUkFNRVRFUlMuaW5jbHVkZXModGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3SGlnaGxpZ2h0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSlcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJDYW5ub3QgdXNlIG90aGVyIGRlZmF1bHQgcGFyYW1ldGVycy5cIik7IC8vTk9TT05BUlxuXHRcdFx0XHRcdGVsc2UgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLm5ld0hpZ2hsaWdodCBpbiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuY29sb3Vycy5saWdodC5oaWdobGlnaHRzLmFsdGVybmF0aXZlSGlnaGxpZ2h0cylcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoYEEgaGlnaGxpZ2h0IHdpdGggdGhlIG5hbWUgXCIke3RoaXMucGx1Z2luLnNldHRpbmdzLm5ld0hpZ2hsaWdodH1cIiBhbHJlYWR5IGV4aXN0cy5gKTsgLy9OT1NPTkFSXG5cdFx0XHRcdFx0XHQvL1RPRE8gKEBtYXl1cmFua3YpIEZ1dHVyZTogRm9jdXMgb24gZXhpc3RpbmcgaGlnaGxpZ2h0ZXIgLSBgcmVuZGVyTWF0Y2hlc2Bcblx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdGNvbnN0IG5ld0NvbG91ciA9IGdldFJhbmRvbUNvbG91cigpO1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLmNvbG91cnMubGlnaHQuaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHNbdGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3SGlnaGxpZ2h0XSA9IG5ld0NvbG91cjtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5jb2xvdXJzLmRhcmsuaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHNbdGhpcy5wbHVnaW4uc2V0dGluZ3MubmV3SGlnaGxpZ2h0XSA9IG5ld0NvbG91cjtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlQWx0ZXJuYXRpdmVIaWdobGlnaHRzKCk7XG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKGBBZGRlZCBoaWdobGlnaHQgXCIke3RoaXMucGx1Z2luLnNldHRpbmdzLm5ld0hpZ2hsaWdodH1cIi5gKTsgLy9OT1NPTkFSXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5uZXdIaWdobGlnaHQgPSBcIlwiO1xuXHRcdFx0XHRcdFx0bmV3SGlnaGxpZ2h0VGV4dC5zZXRWYWx1ZShcIlwiKTtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR0aGlzLmFsdGVybmF0aXZlSGlnaGxpZ2h0c0NvbnRhaW5lciA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xuXHRcdHRoaXMudXBkYXRlQWx0ZXJuYXRpdmVIaWdobGlnaHRzKCk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkdyYWRpZW50IEhpZ2hsaWdodGluZ1wiKVxuXHRcdFx0LnNldERlc2MoXCJJZiBlbmFibGVkLCBoaWdobGlnaHRzIGZhZGUgYXdheSB0byB0aGUgcmlnaHQuIFRoZSBzbGlkZXIgc2V0cyB0aGUgZ3JhZGllbnQgY29sb3VyIHN0b3AgYXMgYSBwZXJjZW50YWdlLlwiKVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQuZ3JhZGllbnRIaWdobGlnaHRzKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmdyYWRpZW50SGlnaGxpZ2h0cyA9IHZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzW1wiZ3JhZGllbnRIaWdobGlnaHRpbmdcIl0uZm9yRWFjaChjb21wb25lbnQgPT4ge2NvbXBvbmVudC5zZXREaXNhYmxlZCghdmFsdWUpO30pO1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHtcblx0XHRcdFx0bGV0IHJlc2V0dGFibGVTbGlkZXI6IFNsaWRlckNvbXBvbmVudDtcblx0XHRcdFx0c2V0dGluZy5hZGRTbGlkZXIoKHNsaWRlcikgPT4ge3Jlc2V0dGFibGVTbGlkZXIgPSBzbGlkZXJcblx0XHRcdFx0XHQuc2V0TGltaXRzKDAsMTAwLDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKCt0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQuZ3JhZGllbnRIaWdobGlnaHRzQ29sb3VyU3RvcC5zbGljZSgwLC0xKSlcblx0XHRcdFx0XHQuc2V0RGlzYWJsZWQoIXRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5hZHZhbmNlZC5ncmFkaWVudEhpZ2hsaWdodHMpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQuZ3JhZGllbnRIaWdobGlnaHRzQ29sb3VyU3RvcCA9IGAke3ZhbHVlfSVgO1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTsgICAgXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuZGlzYWJsZWFibGVDb21wb25lbnRzW1wiZ3JhZGllbnRIaWdobGlnaHRpbmdcIl0ucHVzaChyZXNldHRhYmxlU2xpZGVyKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGxldCByZXNldEJ1dHRvbjogRXh0cmFCdXR0b25Db21wb25lbnQ7XG5cdFx0XHRcdHNldHRpbmcuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge3Jlc2V0QnV0dG9uID0gYnV0dG9uXG5cdFx0XHRcdFx0LnNldEljb24oXCJyZXNldFwiKVxuXHRcdFx0XHRcdC5zZXREaXNhYmxlZCghdGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmFkdmFuY2VkLmdyYWRpZW50SGlnaGxpZ2h0cylcblx0XHRcdFx0XHQuc2V0VG9vbHRpcChcIlJlc3RvcmUgZGVmYXVsdCBjb2xvdXIgc3RvcFwiKVxuXHRcdFx0XHRcdC5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5hZHZhbmNlZC5ncmFkaWVudEhpZ2hsaWdodHNDb2xvdXJTdG9wID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MudGhlbWVzW3RoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWVdLnNldHRpbmdzLmFkdmFuY2VkLmdyYWRpZW50SGlnaGxpZ2h0c0NvbG91clN0b3A7XG5cdFx0XHRcdFx0XHRyZXNldHRhYmxlU2xpZGVyLnNldFZhbHVlKCt0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuYWR2YW5jZWQuZ3JhZGllbnRIaWdobGlnaHRzQ29sb3VyU3RvcC5zbGljZSgwLC0xKSk7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImdyYWRpZW50SGlnaGxpZ2h0aW5nXCJdLnB1c2gocmVzZXRCdXR0b24pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHR9XG5cdGdlbmVyYXRlQ29kZWJsb2NrTGFuZ3VhZ2VTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQpIHtcblx0XHRsZXQgZXhjbHVkZVRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0ID0gc2V0VGltZW91dCgoKT0+e30pO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJFeGNsdWRlIExhbmd1YWdlc1wiKVxuXHRcdFx0LnNldERlc2MoXCJEZWZpbmUgbGFuZ3VhZ2VzIGluIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgd2hpY2ggdGhlIHBsdWdpbiBzaG91bGQgbm90IGRlY29yYXRlLiBZb3UgY2FuIHVzZSBhIHdpbGRjYXJkICgqKSBlaXRoZXIgYXQgdGhlIGJlZ2lubmluZywgb3IgYXQgdGhlIGVuZC4gRm9yIGV4YW1wbGU6IGFkLSogd2lsbCBleGNsdWRlIGNvZGVibG9ja3Mgd2hlcmUgdGhlIGxhbmd1YWdlIHN0YXJ0cyB3aXRoIGFkLSBlLmcuOiBhZC1pbmZvLCBhZC1lcnJvciBldGMuXCIpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKGBlLmcuICR7RVhDTFVERURfTEFOR1VBR0VTfSBldGMuYClcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmV4Y2x1ZGVkTGFuZ3VhZ2VzKVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZXhjbHVkZWRMYW5ndWFnZXMgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dChleGNsdWRlVGltZW91dCk7XG5cdFx0XHRcdFx0ZXhjbHVkZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpPT50aGlzLnJlcmVuZGVyKCksMTAwMCk7XG5cdFx0XHRcdH0pKTtcblx0XHRsZXQgd2hpdGVsaXN0VGltZW91dDogTm9kZUpTLlRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpPT57fSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIldoaXRlbGlzdGVkIFByb2Nlc3NlZCBDb2RlYmxvY2tzXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkRlZmluZSBsYW5ndWFnZXMgaW4gYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCB3aGljaCB0aGUgcGx1Z2luIHNob3VsZCBzdHlsZSBkZXNwaXRlIGJlaW5nIHByb2Nlc3NlZCBieSBhbm90aGVyIHBsdWdpbi4gWW91IGNhbiB1c2UgYSB3aWxkY2FyZCAoKikgZWl0aGVyIGF0IHRoZSBiZWdpbm5pbmcsIG9yIGF0IHRoZSBlbmQuIEZvciBleGFtcGxlOiBhZC0qIHdpbGwgZXhjbHVkZSBjb2RlYmxvY2tzIHdoZXJlIHRoZSBsYW5ndWFnZSBzdGFydHMgd2l0aCBhZC0gZS5nLjogYWQtaW5mbywgYWQtZXJyb3IgZXRjLlwiKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihgZS5nLiAke1dISVRFTElTVF9DT0RFQkxPQ0tTfSBldGMuYClcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnByb2Nlc3NlZENvZGVibG9ja3NXaGl0ZWxpc3QpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5wcm9jZXNzZWRDb2RlYmxvY2tzV2hpdGVsaXN0ID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQod2hpdGVsaXN0VGltZW91dCk7XG5cdFx0XHRcdFx0d2hpdGVsaXN0VGltZW91dCA9IHNldFRpbWVvdXQoKCk9PnRoaXMucmVyZW5kZXIoKSwxMDAwKTtcblx0XHRcdFx0fSkpO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoXCJSZWRpcmVjdCBMYW5ndWFnZSBTZXR0aW5nc1wiKVxuXHRcdFx0LnNldERlc2MoXCJVc2UgdGhpcyB0ZXh0Ym94IHRvIHJlZGlyZWN0IHNwZWNpZmljIGxhbmd1YWdlIGNvbG91cnMgYW5kIGljb25zIGFzIGEgSlNPTiB3aXRoIGxhbmd1YWdlIG5hbWVzIGFzIGtleXMgYW5kIGVpdGhlciBhIGNvbG91ciBrZXksIGFuIGljb24ga2V5IG9yIGJvdGggYXMgdGhlIHZhbHVlIGZvciBhIGdpdmVuIGxhbmd1YWdlLiBDb2xvdXJzIHNob3VsZCBiZSBwYXNzZWQgYXMgQ1NTIGNvbG91cnMgYW5kIGljb25zIHNob3VsZCBiZSBwYXNzZWQgYXMgYSBzdHJpbmcgb2YgdGhlIGluc2lkZSBvZiBhbiBzdmcgZWxlbWVudC4gVGhpcyBzZXR0aW5nIGlzIHRoZW1lIGluZGVwZW5kZW50LlwiKVxuXHRcdFx0LnNldENsYXNzKFwiY29kZS1zdHlsZXItc2V0dGluZy10ZXh0LWFyZWFcIilcblx0XHRcdC5hZGRUZXh0QXJlYSh0ZXh0QXJlYSA9PiB0ZXh0QXJlYVxuXHRcdFx0XHQuc2V0VmFsdWUoSlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW4uc2V0dGluZ3MucmVkaXJlY3RMYW5ndWFnZXMpPT09XCJ7fVwiP1wiXCI6SlNPTi5zdHJpbmdpZnkodGhpcy5wbHVnaW4uc2V0dGluZ3MucmVkaXJlY3RMYW5ndWFnZXMsbnVsbCw0KSlcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKEpTT04uc3RyaW5naWZ5KHt0b21sOiB7Y29sb3VyOiBcIiMwMTIzNDVcIiwgaWNvbjogTEFOR1VBR0VTW1wiQVBMXCJdLmNvbG91cn19LG51bGwsNCkpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpPT57XG5cdFx0XHRcdFx0aWYgKHZhbHVlID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5yZWRpcmVjdExhbmd1YWdlcyA9IHt9O1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MucmVkaXJlY3RMYW5ndWFnZXMgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5yZWRpcmVjdExhbmd1YWdlcygpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoXCJJbnZhbGlkIEpTT05cIik7IC8vTk9TT05BUlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvL1RPRE8gKEBtYXl1cmFua3YpIFJlLXJlbmRlciAoVGVzdClcblx0XHRcdFx0fSkpO1xuXHR9XG5cdGdlbmVyYXRlSW5saW5lQ29kZVNldHRpbmdzKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwge3RleHQ6IFwiSW5saW5lIENvZGUgQXBwZWFyYW5jZVwifSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIlN5bnRheCBIaWdobGlnaHQgSW5saW5lIENvZGVcIilcblx0XHRcdC5zZXREZXNjKFwiSWYgZW5hYmxlZCwgaW4gcmVhZGluZyBtb2RlLCBpbmxpbmUgY29kZSB3aWxsIGJlIHN5bnRheCBoaWdobGlnaHRlZCBiYXNlZCBvbiBhIGxhbmd1YWdlIHNldCB3aXRoIGB7bGFuZ3VhZ2V9IGhpZ2hsaWdodGVkX2lubGluZV9jb2RlYC4gU2VlIHRoZSBSRUFETUUgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuc3ludGF4SGlnaGxpZ2h0KVxuXHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5zeW50YXhIaWdobGlnaHQgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncyh0cnVlKTsgICAgXG5cdFx0XHRcdH0pKTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiU3R5bGUgSW5saW5lIENvZGVcIilcblx0XHRcdC5zZXREZXNjKFwiSWYgZW5hYmxlZCwgaW5saW5lIGNvZGUgd2lsbCBiZSBzdHlsZWQuXCIpXG5cdFx0XHQuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGVcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuc3R5bGUpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnN0eWxlID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5nZW5lcmF0ZUlubGluZUNvZGVTdHlsZVNldHRpbmdzKCk7XG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTsgICAgXG5cdFx0XHRcdH0pKTtcblx0XHR0aGlzLmlubGluZUNvZGVTdHlsZXNDb250YWluZXIgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoKTtcblx0XHR0aGlzLmdlbmVyYXRlSW5saW5lQ29kZVN0eWxlU2V0dGluZ3MoKTtcblx0XHRuZXcgU2V0dGluZyh0aGlzLmlubGluZUNvZGVTdHlsZXNDb250YWluZXIpXG5cdFx0XHQuc2V0TmFtZShcIklubGluZSBDb2RlIFRpdGxlIENvbG91clwiKVxuXHRcdFx0LnNldERlc2MoXCJUaGUgdGV4dCBjb2xvdXIgb2YgaW5saW5lIGNvZGUgdGl0bGVzLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbix0aGlzLmlubGluZUNvZGVTdHlsZXNDb250YWluZXIsc2V0dGluZyxcblx0XHRcdFx0XCJ0aXRsZV90ZXh0XCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaW5saW5lLnRpdGxlVGV4dENvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5pbmxpbmUudGl0bGVUZXh0Q29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyh0aGlzLmlubGluZUNvZGVTdHlsZXNDb250YWluZXIpXG5cdFx0XHQuc2V0TmFtZShcIklubGluZSBDb2RlIFRpdGxlIEZvbnQgV2VpZ2h0XCIpXG5cdFx0XHQuc2V0RGVzYyhcIkRldGVybWluZXMgaG93IGJvbGQgaW5saW5lIGNvZGUgdGl0bGVzIGFwcGVhci5cIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7XG5cdFx0XHRcdGxldCByZXNldHRhYmxlU2xpZGVyOiBTbGlkZXJDb21wb25lbnQ7XG5cdFx0XHRcdHNldHRpbmcuYWRkU2xpZGVyKChzbGlkZXIpID0+IHtyZXNldHRhYmxlU2xpZGVyID0gc2xpZGVyXG5cdFx0XHRcdFx0LnNldExpbWl0cygxLDksMSlcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS50aXRsZUZvbnRXZWlnaHQpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnRpdGxlRm9udFdlaWdodCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTsgICAgXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzZXR0aW5nLmFkZEV4dHJhQnV0dG9uKChidXR0b24pID0+IHtidXR0b25cblx0XHRcdFx0XHQuc2V0SWNvbihcInJlc2V0XCIpXG5cdFx0XHRcdFx0LnNldFRvb2x0aXAoXCJSZXN0b3JlIGRlZmF1bHQgZm9udCB3ZWlnaHRcIilcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnRpdGxlRm9udFdlaWdodCA9IHRoaXMucGx1Z2luLnNldHRpbmdzLnRoZW1lc1t0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZWxlY3RlZFRoZW1lXS5zZXR0aW5ncy5pbmxpbmUudGl0bGVGb250V2VpZ2h0O1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnRpdGxlRm9udFdlaWdodCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHR9XG5cdGdlbmVyYXRlSW5saW5lQ29kZVN0eWxlU2V0dGluZ3MoKSB7XG5cdFx0dGhpcy5pbmxpbmVDb2RlU3R5bGVzQ29udGFpbmVyLmVtcHR5KCk7XG5cdFx0aWYgKCF0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnN0eWxlKVxuXHRcdFx0cmV0dXJuO1xuXHRcdG5ldyBTZXR0aW5nKHRoaXMuaW5saW5lQ29kZVN0eWxlc0NvbnRhaW5lcilcblx0XHRcdC5zZXROYW1lKFwiSW5saW5lIENvZGUgQmFja2dyb3VuZCBDb2xvdXJcIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sdGhpcy5pbmxpbmVDb2RlU3R5bGVzQ29udGFpbmVyLHNldHRpbmcsXG5cdFx0XHRcdFwiaW5saW5lX2JhY2tncm91bmRcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5pbmxpbmUuYmFja2dyb3VuZENvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5pbmxpbmUuYmFja2dyb3VuZENvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdCk7fSk7XG5cdFx0bmV3IFNldHRpbmcodGhpcy5pbmxpbmVDb2RlU3R5bGVzQ29udGFpbmVyKVxuXHRcdFx0LnNldE5hbWUoXCJJbmxpbmUgQ29kZSBUZXh0IENvbG91clwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbix0aGlzLmlubGluZUNvZGVTdHlsZXNDb250YWluZXIsc2V0dGluZyxcblx0XHRcdFx0XCJpbmxpbmVfdGV4dFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmlubGluZS50ZXh0Q29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmlubGluZS50ZXh0Q29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyh0aGlzLmlubGluZUNvZGVTdHlsZXNDb250YWluZXIpXG5cdFx0XHQuc2V0TmFtZShcIklubGluZSBDb2RlIEFjdGl2ZSBUZXh0IENvbG91clwiKVxuXHRcdFx0LnNldERlc2MoXCJUaGUgdGV4dCBjb2xvdXIgd2hlbiBlZGl0aW5nIGlubGluZSBjb2RlLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbix0aGlzLmlubGluZUNvZGVTdHlsZXNDb250YWluZXIsc2V0dGluZyxcblx0XHRcdFx0XCJpbmxpbmVfYWN0aXZlX3RleHRcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5pbmxpbmUuYWN0aXZlVGV4dENvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5pbmxpbmUuYWN0aXZlVGV4dENvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdCk7fSk7XG5cdFx0bmV3IFNldHRpbmcodGhpcy5pbmxpbmVDb2RlU3R5bGVzQ29udGFpbmVyKVxuXHRcdFx0LnNldE5hbWUoXCJJbmxpbmUgQ29kZSBGb250IFdlaWdodFwiKVxuXHRcdFx0LnNldERlc2MoXCJEZXRlcm1pbmVzIGhvdyBib2xkIGlubGluZSBjb2RlIGFwcGVhcnMuXCIpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge1xuXHRcdFx0XHRsZXQgcmVzZXR0YWJsZVNsaWRlcjogU2xpZGVyQ29tcG9uZW50O1xuXHRcdFx0XHRzZXR0aW5nLmFkZFNsaWRlcigoc2xpZGVyKSA9PiB7cmVzZXR0YWJsZVNsaWRlciA9IHNsaWRlclxuXHRcdFx0XHRcdC5zZXRMaW1pdHMoMSw5LDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuZm9udFdlaWdodClcblx0XHRcdFx0XHQuc2V0RHluYW1pY1Rvb2x0aXAoKVxuXHRcdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuZm9udFdlaWdodCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTsgICAgXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzZXR0aW5nLmFkZEV4dHJhQnV0dG9uKChidXR0b24pID0+IHtidXR0b25cblx0XHRcdFx0XHQuc2V0SWNvbihcInJlc2V0XCIpXG5cdFx0XHRcdFx0LnNldFRvb2x0aXAoXCJSZXN0b3JlIGRlZmF1bHQgZm9udCB3ZWlnaHRcIilcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLmZvbnRXZWlnaHQgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0uc2V0dGluZ3MuaW5saW5lLmZvbnRXZWlnaHQ7XG5cdFx0XHRcdFx0XHRyZXNldHRhYmxlU2xpZGVyLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuZm9udFdlaWdodCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdG5ldyBTZXR0aW5nKHRoaXMuaW5saW5lQ29kZVN0eWxlc0NvbnRhaW5lcilcblx0XHRcdC5zZXROYW1lKFwiSW5saW5lIENvZGUgQ3VydmF0dXJlXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkRldGVybWluZXMgaG93IHJvdW5kZWQgaW5saW5lIGNvZGUgYXBwZWFyIGluIHBpeGVscy5cIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7XG5cdFx0XHRcdGxldCByZXNldHRhYmxlU2xpZGVyOiBTbGlkZXJDb21wb25lbnQ7XG5cdFx0XHRcdHNldHRpbmcuYWRkU2xpZGVyKChzbGlkZXIpID0+IHtyZXNldHRhYmxlU2xpZGVyID0gc2xpZGVyXG5cdFx0XHRcdFx0LnNldExpbWl0cygwLDEyLDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuY3VydmF0dXJlKVxuXHRcdFx0XHRcdC5zZXREeW5hbWljVG9vbHRpcCgpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5jdXJ2YXR1cmUgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7ICAgIFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7YnV0dG9uXG5cdFx0XHRcdFx0LnNldEljb24oXCJyZXNldFwiKVxuXHRcdFx0XHRcdC5zZXRUb29sdGlwKFwiUmVzdG9yZSBkZWZhdWx0IGN1cnZhdHVyZVwiKVxuXHRcdFx0XHRcdC5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuY3VydmF0dXJlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MudGhlbWVzW3RoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWVdLnNldHRpbmdzLmlubGluZS5jdXJ2YXR1cmU7XG5cdFx0XHRcdFx0XHRyZXNldHRhYmxlU2xpZGVyLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuY3VydmF0dXJlKTtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0bmV3IFNldHRpbmcodGhpcy5pbmxpbmVDb2RlU3R5bGVzQ29udGFpbmVyKVxuXHRcdFx0LnNldE5hbWUoXCJJbmxpbmUgQ29kZSBWZXJ0aWNhbCBQYWRkaW5nXCIpXG5cdFx0XHQuc2V0RGVzYyhcIkRldGVybWluZXMgaG93IG11Y2ggdmVydGljYWwgaW5uZXIgcGFkZGluZyBpbiBwaXhlbHMgaW5saW5lIGNvZGUgaGFzLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHtcblx0XHRcdFx0bGV0IHJlc2V0dGFibGVTbGlkZXI6IFNsaWRlckNvbXBvbmVudDtcblx0XHRcdFx0c2V0dGluZy5hZGRTbGlkZXIoKHNsaWRlcikgPT4ge3Jlc2V0dGFibGVTbGlkZXIgPSBzbGlkZXJcblx0XHRcdFx0XHQuc2V0TGltaXRzKDAsMTAsMSlcblx0XHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5wYWRkaW5nVmVydGljYWwpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnBhZGRpbmdWZXJ0aWNhbCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTsgICAgXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzZXR0aW5nLmFkZEV4dHJhQnV0dG9uKChidXR0b24pID0+IHtidXR0b25cblx0XHRcdFx0XHQuc2V0SWNvbihcInJlc2V0XCIpXG5cdFx0XHRcdFx0LnNldFRvb2x0aXAoXCJSZXN0b3JlIGRlZmF1bHQgdmVydGljYWwgcGFkZGluZ1wiKVxuXHRcdFx0XHRcdC5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUucGFkZGluZ1ZlcnRpY2FsID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MudGhlbWVzW3RoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWVdLnNldHRpbmdzLmlubGluZS5wYWRkaW5nVmVydGljYWw7XG5cdFx0XHRcdFx0XHRyZXNldHRhYmxlU2xpZGVyLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUucGFkZGluZ1ZlcnRpY2FsKTtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0bmV3IFNldHRpbmcodGhpcy5pbmxpbmVDb2RlU3R5bGVzQ29udGFpbmVyKVxuXHRcdFx0LnNldE5hbWUoXCJJbmxpbmUgQ29kZSBIb3Jpem9udGFsIFBhZGRpbmdcIilcblx0XHRcdC5zZXREZXNjKFwiRGV0ZXJtaW5lcyBob3cgbXVjaCBob3Jpem9udGFsIGlubmVyIHBhZGRpbmcgaW4gcGl4ZWxzIGlubGluZSBjb2RlIGhhcy5cIilcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7XG5cdFx0XHRcdGxldCByZXNldHRhYmxlU2xpZGVyOiBTbGlkZXJDb21wb25lbnQ7XG5cdFx0XHRcdHNldHRpbmcuYWRkU2xpZGVyKChzbGlkZXIpID0+IHtyZXNldHRhYmxlU2xpZGVyID0gc2xpZGVyXG5cdFx0XHRcdFx0LnNldExpbWl0cygwLDEwLDEpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUucGFkZGluZ0hvcml6b250YWwpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnBhZGRpbmdIb3Jpem9udGFsID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpOyAgICBcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHNldHRpbmcuYWRkRXh0cmFCdXR0b24oKGJ1dHRvbikgPT4ge2J1dHRvblxuXHRcdFx0XHRcdC5zZXRJY29uKFwicmVzZXRcIilcblx0XHRcdFx0XHQuc2V0VG9vbHRpcChcIlJlc3RvcmUgZGVmYXVsdCBob3Jpem9udGFsIHBhZGRpbmdcIilcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLnBhZGRpbmdIb3Jpem9udGFsID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MudGhlbWVzW3RoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWVdLnNldHRpbmdzLmlubGluZS5wYWRkaW5nSG9yaXpvbnRhbDtcblx0XHRcdFx0XHRcdHJlc2V0dGFibGVTbGlkZXIuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5wYWRkaW5nSG9yaXpvbnRhbCk7XG5cdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdG5ldyBTZXR0aW5nKHRoaXMuaW5saW5lQ29kZVN0eWxlc0NvbnRhaW5lcilcblx0XHRcdC5zZXROYW1lKFwiSW5saW5lIENvZGUgSG9yaXpvbnRhbCBNYXJnaW5cIilcblx0XHRcdC5zZXREZXNjKFwiRGV0ZXJtaW5lcyBob3cgbXVjaCBob3Jpem9udGFsIG91dGVyIG1hcmdpbiBpcyBhZGRlZCB0byB0aGUgaW5saW5lIGNvZGUgaW4gcGl4ZWxzLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHtcblx0XHRcdFx0bGV0IHJlc2V0dGFibGVTbGlkZXI6IFNsaWRlckNvbXBvbmVudDtcblx0XHRcdFx0c2V0dGluZy5hZGRTbGlkZXIoKHNsaWRlcikgPT4ge3Jlc2V0dGFibGVTbGlkZXIgPSBzbGlkZXJcblx0XHRcdFx0XHQuc2V0TGltaXRzKDAsOCwxKVxuXHRcdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLm1hcmdpbkhvcml6b250YWwpXG5cdFx0XHRcdFx0LnNldER5bmFtaWNUb29sdGlwKClcblx0XHRcdFx0XHQub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLm1hcmdpbkhvcml6b250YWwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7ICAgIFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7YnV0dG9uXG5cdFx0XHRcdFx0LnNldEljb24oXCJyZXNldFwiKVxuXHRcdFx0XHRcdC5zZXRUb29sdGlwKFwiUmVzdG9yZSBkZWZhdWx0IGhvcml6b250YWwgbWFyZ2luXCIpXG5cdFx0XHRcdFx0Lm9uQ2xpY2soKCkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5tYXJnaW5Ib3Jpem9udGFsID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MudGhlbWVzW3RoaXMucGx1Z2luLnNldHRpbmdzLnNlbGVjdGVkVGhlbWVdLnNldHRpbmdzLmlubGluZS5tYXJnaW5Ib3Jpem9udGFsO1xuXHRcdFx0XHRcdFx0cmVzZXR0YWJsZVNsaWRlci5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaW5saW5lLm1hcmdpbkhvcml6b250YWwpO1xuXHRcdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0fVxuXHRnZW5lcmF0ZUFkdmFuY2VkSGVhZGluZyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQpIHtcblx0XHRjb25zdCBhZHZhbmNlZFNldHRpbmdzSGVhZGluZyA9IGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwge3RleHQ6IFwiQWR2YW5jZWQgU2V0dGluZ3NcIiwgY2xzOiBgYWR2YW5jZWQtc2V0dGluZ3MtaGVhZGVyJHt0aGlzLmhpZGVBZHZhbmNlZD9cIiBoZWFkZXItZm9sZGVkXCI6XCJcIn1gfSk7XG5cdFx0YWR2YW5jZWRTZXR0aW5nc0hlYWRpbmcuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKCk9Pntcblx0XHRcdHRoaXMuaGlkZUFkdmFuY2VkID0gIXRoaXMuaGlkZUFkdmFuY2VkO1xuXHRcdFx0YWR2YW5jZWRTZXR0aW5nc0hlYWRpbmcuY2xhc3NMaXN0LnRvZ2dsZShcImhlYWRlci1mb2xkZWRcIix0aGlzLmhpZGVBZHZhbmNlZCk7XG5cdFx0XHR0aGlzLmdlbmVyYXRlQWR2YW5jZWRTZXR0aW5ncygpO1xuXHRcdH0pO1xuXHR9XG5cdGdlbmVyYXRlQWR2YW5jZWRTZXR0aW5ncygpIHtcblx0XHR0aGlzLmFkdmFuY2VkU2V0dGluZ3NDb250YWluZXIuZW1wdHkoKTtcblx0XHRpZiAodGhpcy5oaWRlQWR2YW5jZWQpXG5cdFx0XHRyZXR1cm47XG5cdFx0dGhpcy5nZW5lcmF0ZUludGVyZmFjZVNldHRpbmdzKHRoaXMuYWR2YW5jZWRTZXR0aW5nc0NvbnRhaW5lcik7XG5cdFx0bmV3IFNldHRpbmcodGhpcy5hZHZhbmNlZFNldHRpbmdzQ29udGFpbmVyKVxuXHRcdFx0LnNldE5hbWUoXCJFZGl0b3IgQWN0aXZlIExpbmUgSGlnaGxpZ2h0XCIpXG5cdFx0XHQuc2V0RGVzYyhcIklmIGVuYWJsZWQsIGhpZ2hsaWdodHMgdGhlIGFjdGl2ZSBsaW5lIG91dHNpZGUgY29kZWJsb2Nrcy5cIilcblx0XHRcdC5zZXRDbGFzcyhcImNvZGUtc3R5bGVyLXNwYWNlZFwiKVxuXHRcdFx0LmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlXG5cdFx0XHRcdC5zZXRUb29sdGlwKFwiVG9nZ2xlIGVkaXRvciBhY3RpdmUgbGluZSBoaWdobGlnaHRpbmdcIilcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5oaWdobGlnaHRzLmFjdGl2ZUVkaXRvckxpbmUpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGlnaGxpZ2h0cy5hY3RpdmVFZGl0b3JMaW5lID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5kaXNhYmxlYWJsZUNvbXBvbmVudHNbXCJlZGl0b3JBY3RpdmVMaW5lSGlnaGxpZ2h0XCJdLmZvckVhY2goY29tcG9uZW50ID0+IHtjb21wb25lbnQuc2V0RGlzYWJsZWQoIXZhbHVlKTt9KTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHR9KSlcblx0XHRcdC50aGVuKChzZXR0aW5nKSA9PiB7dGhpcy5jcmVhdGVQaWNrcihcblx0XHRcdFx0dGhpcy5wbHVnaW4sdGhpcy5hZHZhbmNlZFNldHRpbmdzQ29udGFpbmVyLHNldHRpbmcsXG5cdFx0XHRcdFwiZWRpdG9yX2FjdGl2ZV9saW5lX2hpZ2hsaWdodFwiLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMpID0+IHJlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmhpZ2hsaWdodHMuYWN0aXZlRWRpdG9yTGluZUNvbG91cixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oaWdobGlnaHRzLmFjdGl2ZUVkaXRvckxpbmVDb2xvdXIgPSBzYXZlQ29sb3VyO30sXG5cdFx0XHRcdCgpID0+ICF0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuaGlnaGxpZ2h0cy5hY3RpdmVFZGl0b3JMaW5lLFxuXHRcdFx0KTt9KTtcblx0XHR0aGlzLmRpc2FibGVhYmxlQ29tcG9uZW50c1tcImVkaXRvckFjdGl2ZUxpbmVIaWdobGlnaHRcIl0ucHVzaCh0aGlzLnBpY2tyc1tcImVkaXRvcl9hY3RpdmVfbGluZV9oaWdobGlnaHRcIl0ucmVzZXRCdXR0b24pO1xuXHRcdG5ldyBTZXR0aW5nKHRoaXMuYWR2YW5jZWRTZXR0aW5nc0NvbnRhaW5lcilcblx0XHRcdC5zZXROYW1lKFwiUmVzZXQgaW5idWlsdCB0aGVtZXNcIilcblx0XHRcdC5zZXREZXNjKFwiVGhpcyB3aWxsIHJldHVybiBhbGwgaW5idWlsdCB0aGVtZXMgdG8gdGhlIHBsdWdpbiBkZWZhdWx0c1wiKVxuXHRcdFx0LmFkZEJ1dHRvbihidXR0b24gPT4gYnV0dG9uXG5cdFx0XHRcdC5zZXRCdXR0b25UZXh0KFwiUmVzZXRcIilcblx0XHRcdFx0Lm9uQ2xpY2soKCk9Pntcblx0XHRcdFx0XHRPYmplY3QuZW50cmllcyhJTkJVSUxUX1RIRU1FUykuZm9yRWFjaCgoW3RoZW1lTmFtZSx0aGVtZV06IFtzdHJpbmcsQ29kZVN0eWxlclRoZW1lXSkgPT4gdGhpcy5wbHVnaW4uc2V0dGluZ3MudGhlbWVzW3RoZW1lTmFtZV0gPSBzdHJ1Y3R1cmVkQ2xvbmUodGhlbWUpKTtcblx0XHRcdFx0XHRpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZSBpbiBJTkJVSUxUX1RIRU1FUylcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aGVtZXNbdGhpcy5wbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0pO1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKHRydWUpO1xuXHRcdFx0XHR9KSk7XG5cdH1cblx0Z2VuZXJhdGVJbnRlcmZhY2VTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQpIHtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiQnV0dG9uIENvbG91clwiKVxuXHRcdFx0LnNldERlc2MoXCJVc2VkIGZvciBVSSBidXR0b25zIGxpa2UgdGhlIGNvcHkgY29kZSBidXR0b24uXCIpXG5cdFx0XHQudGhlbigoc2V0dGluZykgPT4ge3RoaXMuY3JlYXRlUGlja3IoXG5cdFx0XHRcdHRoaXMucGx1Z2luLGNvbnRhaW5lckVsLHNldHRpbmcsXG5cdFx0XHRcdFwiZGVmYXVsdF9oaWdobGlnaHRcIixcblx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiByZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5hZHZhbmNlZC5idXR0b25Db2xvdXIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKSA9PiB7cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uYWR2YW5jZWQuYnV0dG9uQ29sb3VyID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0KTt9KTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiQnV0dG9uIEFjdGl2ZSBDb2xvdXJcIilcblx0XHRcdC5zZXREZXNjKFwiQ29sb3VyIGJ1dHRvbnMgdXNlIHdoZW4gYWN0aXZhdGVkLlwiKVxuXHRcdFx0LnRoZW4oKHNldHRpbmcpID0+IHt0aGlzLmNyZWF0ZVBpY2tyKFxuXHRcdFx0XHR0aGlzLnBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLFxuXHRcdFx0XHRcImRlZmF1bHRfaGlnaGxpZ2h0XCIsXG5cdFx0XHRcdChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3VycykgPT4gcmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uYWR2YW5jZWQuYnV0dG9uQWN0aXZlQ29sb3VyLFxuXHRcdFx0XHQocmVsZXZhbnRUaGVtZUNvbG91cnM6IENvZGVTdHlsZXJUaGVtZUNvbG91cnMsIHNhdmVDb2xvdXI6IENvbG91cikgPT4ge3JlbGV2YW50VGhlbWVDb2xvdXJzW2dldEN1cnJlbnRNb2RlKCldLmFkdmFuY2VkLmJ1dHRvbkFjdGl2ZUNvbG91ciA9IHNhdmVDb2xvdXI7fSxcblx0XHRcdCk7fSk7XG5cdH1cblx0Z2VuZXJhdGVQbHVnaW5Db21wYXRpYmlsaXR5U2V0dGluZ3MoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSB7XG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlU3BhbihcIk5lZWRzIGNvbXBsZXRpbmdcIik7IC8vVE9ETyAoQG1heXVyYW5rdikgQ29tcGxldGVcblx0XHQvLyBFeGVjdXRlIENvZGUgU2V0dGluZ3Ncblx0fVxuXHRnZW5lcmF0ZUV4YW1wbGVDb2RlYmxvY2tTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQpIHtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiRXhhbXBsZSBDb2RlYmxvY2sgUGFyYW1ldGVyIFN0cmluZ1wiKVxuXHRcdFx0LnNldERlc2MoXCJQYXJhbWV0ZXJzIGFuZCBsYW5ndWFnZSB3aGljaCB3b3VsZCBmb2xsb3cgY29kZWJsb2NrIGRlbGltaXRlci5cIilcblx0XHRcdC5zZXRDbGFzcyhcImNvZGUtc3R5bGVyLXNldHRpbmctdGV4dC13aWRlXCIpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+IHRleHRcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKEVYQU1QTEVfQ09ERUJMT0NLX1BBUkFNRVRFUlMpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5leGFtcGxlQ29kZWJsb2NrUGFyYW1ldGVycylcblx0XHRcdFx0Lm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmV4YW1wbGVDb2RlYmxvY2tQYXJhbWV0ZXJzID0gdmFsdWU7XG5cdFx0XHRcdFx0dGhpcy5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0XHR0aGlzLmdlbmVyYXRlRXhhbXBsZUNvZGVibG9jaygpO1xuXHRcdFx0XHR9KSk7XG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZShcIkV4YW1wbGUgQ29kZWJsb2NrIFBhcmFtZXRlciBTdHJpbmdcIilcblx0XHRcdC5zZXREZXNjKFwiQ29udGVudCBmb3IgZXhhbXBsZSBjb2RlYmxvY2suXCIpXG5cdFx0XHQuc2V0Q2xhc3MoXCJjb2RlLXN0eWxlci1zZXR0aW5nLXRleHQtYXJlYVwiKVxuXHRcdFx0LmFkZFRleHRBcmVhKHRleHRBcmVhID0+IHRleHRBcmVhXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5leGFtcGxlQ29kZWJsb2NrQ29udGVudClcblx0XHRcdFx0LnNldFBsYWNlaG9sZGVyKEVYQU1QTEVfQ09ERUJMT0NLX0NPTlRFTlQpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpPT57XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZXhhbXBsZUNvZGVibG9ja0NvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdHRoaXMuZ2VuZXJhdGVFeGFtcGxlQ29kZWJsb2NrKCk7XG5cdFx0XHRcdH0pKTtcblx0fVxuXHRnZW5lcmF0ZUV4YW1wbGVDb2RlYmxvY2soKSB7XG5cdFx0dGhpcy5leGFtcGxlQ29kZWJsb2NrQ29udGFpbmVyLmVtcHR5KCk7XG5cdFx0Y29uc3QgY29kZWJsb2NrU3RyaW5nID0gXCJgYGBgYGBgXCIrdGhpcy5wbHVnaW4uc2V0dGluZ3MuZXhhbXBsZUNvZGVibG9ja1BhcmFtZXRlcnMrXCJcXG5cIit0aGlzLnBsdWdpbi5zZXR0aW5ncy5leGFtcGxlQ29kZWJsb2NrQ29udGVudCtcIlxcbmBgYGBgYGBcIjtcblx0XHRNYXJrZG93blJlbmRlcmVyLnJlbmRlcih0aGlzLnBsdWdpbi5hcHAsY29kZWJsb2NrU3RyaW5nLHRoaXMuZXhhbXBsZUNvZGVibG9ja0NvbnRhaW5lcixTRVRUSU5HU19TT1VSQ0VQQVRIX1BSRUZJWCtjb2RlYmxvY2tTdHJpbmcsdGhpcy5wbHVnaW4pO1xuXHRcdHRoaXMuZXhhbXBsZUNvZGVibG9ja0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwicHJlID4gYnV0dG9uLmNvcHktY29kZS1idXR0b25cIik/LmNsYXNzTGlzdD8uYWRkKFwiY29kZS1zdHlsZXItc2V0dGluZ3MtYnV0dG9uXCIpO1xuXHR9XG5cdGdlbmVyYXRlRXhhbXBsZUlubGluZUNvZGVTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQpIHtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5zZXROYW1lKFwiSW5saW5lIENvZGUgRXhhbXBsZVwiKVxuXHRcdFx0LnNldERlc2MoXCJUZXh0IHRvIHJlbmRlciBhcyBleGFtcGxlIGluc2lkZSBjb2RlIGRlbGltaXRlcnMuXCIpXG5cdFx0XHQuc2V0Q2xhc3MoXCJjb2RlLXN0eWxlci1zZXR0aW5nLXRleHQtd2lkZVwiKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcihFWEFNUExFX0lOTElORV9DT0RFKVxuXHRcdFx0XHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZXhhbXBsZUlubGluZUNvZGUpXG5cdFx0XHRcdC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnBsdWdpbi5zZXR0aW5ncy5leGFtcGxlSW5saW5lQ29kZSA9IHZhbHVlO1xuXHRcdFx0XHRcdHRoaXMuc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdFx0dGhpcy5nZW5lcmF0ZUV4YW1wbGVJbmxpbmVDb2RlKCk7XG5cdFx0XHRcdH0pKTtcblx0fVxuXHRnZW5lcmF0ZUV4YW1wbGVJbmxpbmVDb2RlKCkge1xuXHRcdHRoaXMuZXhhbXBsZUlubGluZUNvZGVDb250YWluZXIuZW1wdHkoKTtcblx0XHRNYXJrZG93blJlbmRlcmVyLnJlbmRlcih0aGlzLnBsdWdpbi5hcHAsXCJgXCIrdGhpcy5wbHVnaW4uc2V0dGluZ3MuZXhhbXBsZUlubGluZUNvZGUrXCJgXCIsdGhpcy5leGFtcGxlSW5saW5lQ29kZUNvbnRhaW5lcixTRVRUSU5HU19TT1VSQ0VQQVRIX1BSRUZJWCx0aGlzLnBsdWdpbik7XG5cdFx0dGhpcy5leGFtcGxlSW5saW5lQ29kZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiY29kZVwiKT8uY2xhc3NMaXN0Py5hZGQoXCJjb2RlLXN0eWxlci1zZXR0aW5ncy1pbmxpbmUtY29kZVwiKTtcblx0fVxuXHRnZW5lcmF0ZURvbmF0aW9uRm9vdGVyKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XG5cdFx0Y29uc3QgZG9uYXRpb25EaXYgPSBjb250YWluZXJFbC5jcmVhdGVFbChcImRpdlwiLCB7IGNsczogXCJjb2RlLXN0eWxlci1kb25hdGlvblwiLCB9KTsgICAgXG5cdFx0Y29uc3QgZG9uYXRpb25UZXh0ID0gY3JlYXRlRWwoXCJwXCIsIHt0ZXh0OiBcIklmIHlvdSBsaWtlIHRoaXMgcGx1Z2luLCBhbmQgd291bGQgbGlrZSB0byBoZWxwIHN1cHBvcnQgY29udGludWVkIGRldmVsb3BtZW50LCB1c2UgdGhlIGJ1dHRvbiBiZWxvdyFcIn0pO1xuXHRcdGRvbmF0aW9uRGl2LmFwcGVuZENoaWxkKGRvbmF0aW9uVGV4dCk7XG5cdFx0Y29uc3QgZG9uYXRpb25CdXR0b24gPSBjcmVhdGVFbChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vd3d3LmJ1eW1lYWNvZmZlZS5jb20vbWF5dXJhbmt2MlwifSk7XG5cdFx0ZG9uYXRpb25CdXR0b24uaW5uZXJIVE1MID0gXCI8aW1nIHNyYz1cXFwiaHR0cHM6Ly9pbWcuYnV5bWVhY29mZmVlLmNvbS9idXR0b24tYXBpLz90ZXh0PUJ1eSBtZSBhIGNvZmZlZSZlbW9qaT0mc2x1Zz1tYXl1cmFua3YyJmJ1dHRvbl9jb2xvdXI9ZTNlN2VmYTAmZm9udF9jb2xvdXI9MjYyNjI2JmZvbnRfZmFtaWx5PUludGVyJm91dGxpbmVfY29sb3VyPTI2MjYyNiZjb2ZmZWVfY29sb3VyPWEwNTIyZFxcXCIgaGVpZ2h0PVxcXCI0MnB4XFxcIj5cIjtcblx0XHRkb25hdGlvbkRpdi5hcHBlbmRDaGlsZChkb25hdGlvbkJ1dHRvbik7XG5cdH1cblxuXHQvLyBDcmVhdGUgU2V0dGluZ3Ncblx0Y3JlYXRlUGlja3IocGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luLCBjb250YWluZXJFbDogSFRNTEVsZW1lbnQsIHNldHRpbmc6IFNldHRpbmcsIGlkOiBzdHJpbmcsIGdldFJlbGV2YW50VGhlbWVDb2xvdXI6IChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycyk9PkNvbG91ciwgc2F2ZVJlbGV2YW50VGhlbWVDb2xvdXI6IChyZWxldmFudFRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycywgc2F2ZUNvbG91cjogQ29sb3VyKT0+dm9pZCwgZGlzYWJsZWQ/OiAoKT0+Ym9vbGVhbikge1xuXHRcdGNvbnN0IHBpY2tyOiBQaWNrclJlc2V0dGFibGUgPSBuZXcgUGlja3JSZXNldHRhYmxlKHBsdWdpbixjb250YWluZXJFbCxzZXR0aW5nLGdldFJlbGV2YW50VGhlbWVDb2xvdXIsc2F2ZVJlbGV2YW50VGhlbWVDb2xvdXIpO1xuXHRcdHBpY2tyXG5cdFx0XHQub24oXCJzaG93XCIsIChjb2xvdXI6IFBpY2tyLkhTVmFDb2xvciwgaW5zdGFuY2U6IFBpY2tyKSA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZGlzYWJsZWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZGlzYWJsZWQoKSlcblx0XHRcdFx0XHRpbnN0YW5jZS5oaWRlKCk7XG5cdFx0XHRcdC8vIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gKGluc3RhbmNlLmdldFJvb3QoKSBhcyBhbnkpLmludGVyYWN0aW9uLnJlc3VsdC5zZWxlY3QoKSkpXG5cdFx0XHR9KVxuXHRcdFx0Lm9uKFwic2F2ZVwiLCAoY29sb3VyOiBQaWNrci5IU1ZhQ29sb3IsIGluc3RhbmNlOiBQaWNrclJlc2V0dGFibGUpID0+IHtcblx0XHRcdFx0Y29uc3Qgc2F2ZWRDb2xvdXI6IENvbG91ciA9IGAjJHtjb2xvdXIudG9IRVhBKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMSl9YDtcblx0XHRcdFx0aW5zdGFuY2UuaGlkZSgpO1xuXHRcdFx0XHRpbnN0YW5jZS5hZGRTd2F0Y2goc2F2ZWRDb2xvdXIpO1xuXHRcdFx0XHRpbnN0YW5jZS5zYXZlQ29sb3VyKHNhdmVkQ29sb3VyKTtcblx0XHRcdH0pXG5cdFx0XHQub24oXCJjYW5jZWxcIiwgKGluc3RhbmNlOiBQaWNrclJlc2V0dGFibGUpID0+IHtpbnN0YW5jZS5oaWRlKCk7fSk7XG5cdFx0c2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7cGlja3IucmVzZXRCdXR0b24gPSBidXR0b25cblx0XHRcdC5zZXRJY29uKFwicmVzZXRcIilcblx0XHRcdC5zZXREaXNhYmxlZCh0eXBlb2YgZGlzYWJsZWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZGlzYWJsZWQoKSlcblx0XHRcdC5zZXRUb29sdGlwKFwiUmVzdG9yZSBkZWZhdWx0IGNvbG91clwiKVxuXHRcdFx0Lm9uQ2xpY2soKCkgPT4ge3BpY2tyLnJlc2V0Q29sb3VyKCk7fSk7XG5cdFx0fSk7XG5cdFx0dGhpcy5waWNrcnNbaWRdPXBpY2tyO1xuXHR9XG5cdFxuXHQvLyBVcGRhdGUgU2V0dGluZ3Ncblx0c2F2ZVNldHRpbmdzKHJlcmVuZGVyOiBib29sZWFuPWZhbHNlKSB7XG5cdFx0KGFzeW5jICgpID0+IHthd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTt9KSgpO1xuXHRcdGlmIChyZXJlbmRlcilcblx0XHRcdHRoaXMucmVyZW5kZXIoKTtcblx0fVxuXHRyZXJlbmRlcigpIHtcblx0XHR0aGlzLnBsdWdpbi5yZW5kZXJSZWFkaW5nVmlldygpO1xuXHRcdGlmICh0aGlzLnBhZ2UgPT09IFwiY29kZWJsb2NrXCIpXG5cdFx0XHR0aGlzLmdlbmVyYXRlRXhhbXBsZUNvZGVibG9jaygpO1xuXHRcdGVsc2UgaWYgKHRoaXMucGFnZSA9PT0gXCJpbmxpbmVcIilcblx0XHRcdHRoaXMuZ2VuZXJhdGVFeGFtcGxlSW5saW5lQ29kZSgpO1xuXHR9XG5cdHVwZGF0ZURyb3Bkb3duKGRyb3Bkb3duOiBEcm9wZG93bkNvbXBvbmVudCwgc2V0dGluZ3M6IENvZGVTdHlsZXJTZXR0aW5ncykge1xuXHRcdGRyb3Bkb3duLnNlbGVjdEVsLmVtcHR5KCk7XG5cdFx0T2JqZWN0LmtleXMoc2V0dGluZ3MudGhlbWVzKS5mb3JFYWNoKCh0aGVtZV9uYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGRyb3Bkb3duLmFkZE9wdGlvbih0aGVtZV9uYW1lLCB0aGVtZV9uYW1lKTsgICAgICAgICAgICBcblx0XHR9KTtcblx0XHRkcm9wZG93bi5zZXRWYWx1ZShzZXR0aW5ncy5zZWxlY3RlZFRoZW1lKTtcblx0fVxuXHR1cGRhdGVBbHRlcm5hdGl2ZUhpZ2hsaWdodHMoKSB7XG5cdFx0aWYgKHRoaXMucGFnZSAhPT0gXCJjb2RlYmxvY2tcIiB8fCB0aGlzLmNvZGVibG9ja1BhZ2UgIT09IFwiaGlnaGxpZ2h0XCIpXG5cdFx0XHRyZXR1cm47XG5cdFx0dGhpcy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHNDb250YWluZXIuZW1wdHkoKTtcblx0XHRPYmplY3Qua2V5cyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuY29sb3Vycy5saWdodC5oaWdobGlnaHRzLmFsdGVybmF0aXZlSGlnaGxpZ2h0cykuZm9yRWFjaCgoYWx0ZXJuYXRpdmVIaWdobGlnaHROYW1lKSA9PiB7XG5cdFx0XHRuZXcgU2V0dGluZyh0aGlzLmFsdGVybmF0aXZlSGlnaGxpZ2h0c0NvbnRhaW5lcilcblx0XHRcdFx0LnNldE5hbWUoYWx0ZXJuYXRpdmVIaWdobGlnaHROYW1lKVxuXHRcdFx0XHQuc2V0RGVzYyhgVG8gaGlnaGxpZ2h0IGxpbmVzIHdpdGggdGhpcyBoaWdobGlnaHQsIHVzZSB0aGUgJHthbHRlcm5hdGl2ZUhpZ2hsaWdodE5hbWV9IHBhcmFtZXRlci5gKVxuXHRcdFx0XHQudGhlbigoc2V0dGluZykgPT4ge1xuXHRcdFx0XHRcdHRoaXMuY3JlYXRlUGlja3IoXG5cdFx0XHRcdFx0XHR0aGlzLnBsdWdpbix0aGlzLmFsdGVybmF0aXZlSGlnaGxpZ2h0c0NvbnRhaW5lcixzZXR0aW5nLFxuXHRcdFx0XHRcdFx0YGFsdGVybmF0aXZlX2hpZ2hsaWdodF8ke2FsdGVybmF0aXZlSGlnaGxpZ2h0TmFtZX1gLFxuXHRcdFx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKSA9PiBhbHRlcm5hdGl2ZUhpZ2hsaWdodE5hbWUgaW4gcmVsZXZhbnRUaGVtZUNvbG91cnMubGlnaHQuaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHM/cmVsZXZhbnRUaGVtZUNvbG91cnNbZ2V0Q3VycmVudE1vZGUoKV0uaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHNbYWx0ZXJuYXRpdmVIaWdobGlnaHROYW1lXTp0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuY29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oaWdobGlnaHRzLmFsdGVybmF0aXZlSGlnaGxpZ2h0c1thbHRlcm5hdGl2ZUhpZ2hsaWdodE5hbWVdLFxuXHRcdFx0XHRcdFx0KHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtyZWxldmFudFRoZW1lQ29sb3Vyc1tnZXRDdXJyZW50TW9kZSgpXS5oaWdobGlnaHRzLmFsdGVybmF0aXZlSGlnaGxpZ2h0c1thbHRlcm5hdGl2ZUhpZ2hsaWdodE5hbWVdID0gc2F2ZUNvbG91cjt9LFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0c2V0dGluZy5hZGRFeHRyYUJ1dHRvbigoYnV0dG9uKSA9PiB7YnV0dG9uXG5cdFx0XHRcdFx0XHQuc2V0SWNvbihcInRyYXNoXCIpXG5cdFx0XHRcdFx0XHQuc2V0VG9vbHRpcChcIkRlbGV0ZSBoaWdobGlnaHRcIilcblx0XHRcdFx0XHRcdC5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIHRoaXMucGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5jb2xvdXJzLmxpZ2h0LmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzW2FsdGVybmF0aXZlSGlnaGxpZ2h0TmFtZV07XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuY29sb3Vycy5kYXJrLmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzW2FsdGVybmF0aXZlSGlnaGxpZ2h0TmFtZV07XG5cdFx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoYFJlbW92ZWQgaGlnaGxpZ2h0IFwiJHthbHRlcm5hdGl2ZUhpZ2hsaWdodE5hbWV9XCIuYCk7IC8vTk9TT05BUlxuXHRcdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUFsdGVybmF0aXZlSGlnaGxpZ2h0cygpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cdHJlZGlyZWN0TGFuZ3VhZ2VzKCkge1xuXHRcdE9iamVjdC5lbnRyaWVzKHRoaXMucGx1Z2luLnNldHRpbmdzLnJlZGlyZWN0TGFuZ3VhZ2VzKS5mb3JFYWNoKChbbGFuZ3VhZ2VOYW1lLCBsYW5ndWFnZVNldHRpbmdzXTogW3N0cmluZywge2NvbG91cj86IENvbG91ciwgaWNvbj86IHN0cmluZ31dKT0+e1xuXHRcdFx0aWYgKFwiaWNvblwiIGluIGxhbmd1YWdlU2V0dGluZ3MpIHtcblx0XHRcdFx0aWYgKExBTkdVQUdFX05BTUVTW2xhbmd1YWdlTmFtZV0gaW4gdGhpcy5wbHVnaW4ubGFuZ3VhZ2VJY29ucylcblx0XHRcdFx0XHRVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMucGx1Z2luLmxhbmd1YWdlSWNvbnNbTEFOR1VBR0VfTkFNRVNbbGFuZ3VhZ2VOYW1lXV0pO1xuXHRcdFx0XHR0aGlzLnBsdWdpbi5sYW5ndWFnZUljb25zW0xBTkdVQUdFX05BTUVTW2xhbmd1YWdlTmFtZV1dID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIj4ke2xhbmd1YWdlU2V0dGluZ3MuaWNvbn08L3N2Zz5gXSwgeyB0eXBlOiBcImltYWdlL3N2Zyt4bWxcIiB9KSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cblxuLy8gRXh0ZW5kIFBpY2tyIENsYXNzXG5jbGFzcyBQaWNrclJlc2V0dGFibGUgZXh0ZW5kcyBQaWNrciB7XG5cdHNhdmVDb2xvdXI6IChzYXZlQ29sb3VyOiBDb2xvdXIpPT52b2lkO1xuXHRyZXNldENvbG91cjogKCk9PnZvaWQ7XG5cdGdldEN1cnJlbnRDb2xvdXI6IChhY2Nlc3NUaGVtZTogYm9vbGVhbik9PnZvaWQ7XG5cdHJlc2V0QnV0dG9uOiBFeHRyYUJ1dHRvbkNvbXBvbmVudDtcblxuXHRjb25zdHJ1Y3RvcihwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4sIGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgc2V0dGluZzogU2V0dGluZywgZ2V0UmVsZXZhbnRUaGVtZUNvbG91cjogKHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzKT0+Q29sb3VyLCBzYXZlUmVsZXZhbnRUaGVtZUNvbG91cjogKHJlbGV2YW50VGhlbWVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVDb2xvdXJzLCBzYXZlQ29sb3VyOiBDb2xvdXIpPT52b2lkLCB0b29sdGlwPzogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgc2V0dGluZ3M6IFBpY2tyLk9wdGlvbnMgPSB7XG5cdFx0XHRlbDogc2V0dGluZy5jb250cm9sRWwuY3JlYXRlRGl2KHtjbHM6IFwicGlja2VyXCJ9KSxcblx0XHRcdHRoZW1lOiBcIm5hbm9cIixcblx0XHRcdGRlZmF1bHQ6IGdldENvbG91cihnZXRSZWxldmFudFRoZW1lQ29sb3VyKHBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuY29sb3VycykpLFxuXHRcdFx0cG9zaXRpb246IFwibGVmdC1taWRkbGVcIixcblx0XHRcdGxvY2tPcGFjaXR5OiBmYWxzZSxcblx0XHRcdGNvbXBvbmVudHM6IHtcblx0XHRcdFx0cHJldmlldzogdHJ1ZSxcblx0XHRcdFx0aHVlOiB0cnVlLFxuXHRcdFx0XHRvcGFjaXR5OiB0cnVlLFxuXHRcdFx0XHRpbnRlcmFjdGlvbjoge1xuXHRcdFx0XHRcdGhleDogdHJ1ZSxcblx0XHRcdFx0XHRyZ2JhOiB0cnVlLFxuXHRcdFx0XHRcdGhzbGE6IGZhbHNlLFxuXHRcdFx0XHRcdGlucHV0OiB0cnVlLFxuXHRcdFx0XHRcdGNhbmNlbDogdHJ1ZSxcblx0XHRcdFx0XHRzYXZlOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGkxOG46IHtcblx0XHRcdFx0XCJ1aTpkaWFsb2dcIjogXCJDb2xvdXIgcGlja2VyIGRpYWxvZ1wiLFxuXHRcdFx0XHRcImJ0bjp0b2dnbGVcIjogKHR5cGVvZiB0b29sdGlwICE9PSBcInVuZGVmaW5lZFwiKT90b29sdGlwOlwiU2VsZWN0IGNvbG91clwiLFxuXHRcdFx0XHRcImJ0bjpzd2F0Y2hcIjogXCJDb2xvdXIgc3dhdGNoXCIsXG5cdFx0XHRcdFwiYnRuOmxhc3QtY29sb3JcIjogXCJVc2UgcHJldmlvdXMgY29sb3VyXCIsXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAoY29udGFpbmVyRWwucGFyZW50RWxlbWVudCAhPT0gbnVsbClcblx0XHRcdHNldHRpbmdzLmNvbnRhaW5lciA9IGNvbnRhaW5lckVsLnBhcmVudEVsZW1lbnQ7XG5cdFx0c3VwZXIoc2V0dGluZ3MpO1xuXHRcdHRoaXMuc2F2ZUNvbG91ciA9IChzYXZlQ29sb3VyOiBDb2xvdXIpID0+IHtcblx0XHRcdHNhdmVSZWxldmFudFRoZW1lQ29sb3VyKHBsdWdpbi5zZXR0aW5ncy5jdXJyZW50VGhlbWUuY29sb3VycyxzYXZlQ29sb3VyKTtcblx0XHRcdChhc3luYyAoKSA9PiB7YXdhaXQgcGx1Z2luLnNhdmVTZXR0aW5ncygpO30pKCk7XG5cdFx0fTtcblx0XHR0aGlzLnJlc2V0Q29sb3VyID0gKCkgPT4ge1xuXHRcdFx0Y29uc3QgcmVzZXRDb2xvdXI6IENvbG91ciA9IGdldFJlbGV2YW50VGhlbWVDb2xvdXIocGx1Z2luLnNldHRpbmdzLnRoZW1lc1twbHVnaW4uc2V0dGluZ3Muc2VsZWN0ZWRUaGVtZV0uY29sb3Vycyk7XG5cdFx0XHR0aGlzLnNldENvbG9yKGdldENvbG91cihyZXNldENvbG91cikpO1xuXHRcdFx0dGhpcy5zYXZlQ29sb3VyKHJlc2V0Q29sb3VyKTtcblx0XHR9O1xuXHR9XG59XG5cbi8vIENvbG91ciBNYW5hZ2VtZW50XG5mdW5jdGlvbiBnZXRSYW5kb21Db2xvdXIoKTogQ29sb3VyIHtcblx0Y29uc3QgbGV0dGVycyA9IFwiMDEyMzQ1Njc4OUFCQ0RFRlwiO1xuXHRsZXQgY29sb3VyID0gXCJcIjtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspXG5cdFx0Y29sb3VyICs9IGxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTYpXTtcblx0cmV0dXJuIGAjJHtjb2xvdXJ9RkZgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG91cih0aGVtZUNvbG91cjogQ29sb3VyKTogQ29sb3VyIHtcblx0cmV0dXJuIGlzQ3NzKHRoZW1lQ29sb3VyKT9nZXRDc3NWYXJpYWJsZSh0aGVtZUNvbG91cik6dGhlbWVDb2xvdXI7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNDc3MocG9zc2libGVDc3M6IHN0cmluZyk6IHBvc3NpYmxlQ3NzIGlzIENTUyB7XG5cdHJldHVybiBwb3NzaWJsZUNzcy5zdGFydHNXaXRoKFwiLS1cIikgJiYgdHlwZW9mIHBvc3NpYmxlQ3NzID09PSBcInN0cmluZ1wiO1xufVxuZnVuY3Rpb24gZ2V0Q3NzVmFyaWFibGUoY3NzVmFyaWFibGU6IENTUyk6IEhFWCB7XG5cdGNvbnN0IHZhcmlhYmxlVmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKGNzc1ZhcmlhYmxlKS50cmltKCk7XG5cdGlmICh0eXBlb2YgdmFyaWFibGVWYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiB2YXJpYWJsZVZhbHVlLnN0YXJ0c1dpdGgoXCIjXCIpKVxuXHRcdHJldHVybiBgIyR7dmFyaWFibGVWYWx1ZS50cmltKCkuc3Vic3RyaW5nKDEpfWA7XG5cdGVsc2UgaWYgKHZhcmlhYmxlVmFsdWUuc3RhcnRzV2l0aChcInJnYlwiKSlcblx0XHRyZXR1cm4gYCMke0NvbG9yVHJhbnNsYXRvci50b0hFWEEodmFyaWFibGVWYWx1ZS5yZXBsYWNlKC9jYWxjXFwoKC4qPylcXCkvZywobWF0Y2gsY2FwdHVyZSk9PmNhbGMoY2FwdHVyZSkpKS5zdWJzdHJpbmcoMSl9YDtcblx0ZWxzZSBpZiAodmFyaWFibGVWYWx1ZS5zdGFydHNXaXRoKFwiaHNsXCIpKVxuXHRcdHJldHVybiBgIyR7Q29sb3JUcmFuc2xhdG9yLnRvSEVYQSh2YXJpYWJsZVZhbHVlLnJlcGxhY2UoL2NhbGNcXCgoLio/KVxcKS9nLChtYXRjaCxjYXB0dXJlKT0+Y2FsYyhjYXB0dXJlKSkpLnN1YnN0cmluZygxKX1gO1xuXHRlbHNlXG5cdFx0Y29uc29sZS53YXJuKGBXYXJuaW5nOiBDb3VsZG4ndCBkZXRlcm1pbmUgY29sb3VyIGZvcm1hdCAtICR7dmFyaWFibGVWYWx1ZX1gKTtcblx0cmV0dXJuIGAjJHtDb2xvclRyYW5zbGF0b3IudG9IRVhBKHZhcmlhYmxlVmFsdWUpLnN1YnN0cmluZygxKX1gO1xufVxuZnVuY3Rpb24gY2FsYyhjYWxjU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBzcGxpdFN0cmluZyA9IGNhbGNTdHJpbmcudHJpbSgpLnJlcGxhY2UoLyhcXGQqKSUvZyxcIiQxXCIpLnNwbGl0KFwiIFwiKTtcblx0Y29uc3Qgb3BlcmF0b3JzOiB7W2tleTogc3RyaW5nXTogKG51bTE6bnVtYmVyLCBudW0yOm51bWJlcikgPT4gbnVtYmVyfSA9IHtcblx0XHRcIitcIjogKG51bTE6bnVtYmVyLCBudW0yOm51bWJlcik6bnVtYmVyID0+IE1hdGgubWF4KG51bTErbnVtMiwwKSxcblx0XHRcIi1cIjogKG51bTE6bnVtYmVyICxudW0yOm51bWJlcik6bnVtYmVyID0+IE1hdGgubWF4KG51bTEtbnVtMiwwKSxcblx0fTtcblx0aWYgKHNwbGl0U3RyaW5nLmxlbmd0aCA9PT0gMylcblx0XHRpZiAoc3BsaXRTdHJpbmdbMV0gaW4gb3BlcmF0b3JzKVxuXHRcdFx0cmV0dXJuIGAke29wZXJhdG9yc1tzcGxpdFN0cmluZ1sxXV0ocGFyc2VGbG9hdChzcGxpdFN0cmluZ1swXSkscGFyc2VGbG9hdChzcGxpdFN0cmluZ1syXSkpfSVgO1xuXHRcblx0Y29uc29sZS53YXJuKFwiV2FybmluZzogQ291bGRuJ3QgcGFyc2UgY2FsYyBzdHJpbmdcIik7XG5cdHJldHVybiBjYWxjU3RyaW5nO1xufVxuXG4vLyBGZXRjaCBTZXR0aW5nc1xuZnVuY3Rpb24gZ2V0Q3VycmVudE1vZGUoKSB7XG5cdGNvbnN0IGJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblx0aWYgKGJvZHkgIT09IG51bGwpe1xuXHRcdGlmIChib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInRoZW1lLWxpZ2h0XCIpKVxuXHRcdFx0cmV0dXJuIFwibGlnaHRcIjtcblx0XHRlbHNlIGlmIChib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInRoZW1lLWRhcmtcIikpXG5cdFx0XHRyZXR1cm4gXCJkYXJrXCI7XG5cdH1cblx0Y29uc29sZS53YXJuKFwiV2FybmluZzogQ291bGRuJ3QgZ2V0IGN1cnJlbnQgdGhlbWVcIik7XG5cdHJldHVybiBcImxpZ2h0XCI7XG59XG4iLCAidmFyIHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGUsbj0xLHI9YXJndW1lbnRzLmxlbmd0aDtuPHI7bisrKWZvcih2YXIgaSBpbiBlPWFyZ3VtZW50c1tuXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxpKSYmKHRbaV09ZVtpXSk7cmV0dXJuIHR9LHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBlKHQsZSxuKXtpZihufHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHIsaT0wLG89ZS5sZW5ndGg7aTxvO2krKykhciYmaSBpbiBlfHwocnx8KHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSwwLGkpKSxyW2ldPWVbaV0pO3JldHVybiB0LmNvbmNhdChyfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSl9dmFyIG4scixpLG87IWZ1bmN0aW9uKHQpe3QuSEVYPVwiSEVYXCIsdC5SR0I9XCJSR0JcIix0LkhTTD1cIkhTTFwiLHQuQ01ZSz1cIkNNWUtcIn0obnx8KG49e30pKSxmdW5jdGlvbih0KXt0LkFOQUxPR09VUz1cIkFOQUxPR09VU1wiLHQuQ09NUExFTUVOVEFSWT1cIkNPTVBMRU1FTlRBUllcIix0LlNQTElUX0NPTVBMRU1FTlRBUlk9XCJTUExJVF9DT01QTEVNRU5UQVJZXCIsdC5UUklBRElDPVwiVFJJQURJQ1wiLHQuVEVUUkFESUM9XCJURVRSQURJQ1wiLHQuU1FVQVJFPVwiU1FVQVJFXCJ9KHJ8fChyPXt9KSksZnVuY3Rpb24odCl7dC5BRERJVElWRT1cIkFERElUSVZFXCIsdC5TVUJUUkFDVElWRT1cIlNVQlRSQUNUSVZFXCJ9KGl8fChpPXt9KSksZnVuY3Rpb24odCl7dC5ibGFjaz1cIiMwMDAwMDBcIix0LnNpbHZlcj1cIiNDMEMwQzBcIix0LmdyYXk9XCIjODA4MDgwXCIsdC53aGl0ZT1cIiNGRkZGRkZcIix0Lm1hcm9vbj1cIiM4MDAwMDBcIix0LnJlZD1cIiNGRjAwMDBcIix0LnB1cnBsZT1cIiM4MDAwODBcIix0LmZ1Y2hzaWE9XCIjRkYwMEZGXCIsdC5ncmVlbj1cIiMwMDgwMDBcIix0LmxpbWU9XCIjMDBGRjAwXCIsdC5vbGl2ZT1cIiM4MDgwMDBcIix0LnllbGxvdz1cIiNGRkZGMDBcIix0Lm5hdnk9XCIjMDAwMDgwXCIsdC5ibHVlPVwiIzAwMDBGRlwiLHQudGVhbD1cIiMwMDgwODBcIix0LmFxdWE9XCIjMDBGRkZGXCIsdC5vcmFuZ2U9XCIjRkZBNTAwXCIsdC5hbGljZWJsdWU9XCIjRjBGOEZGXCIsdC5hbnRpcXVld2hpdGU9XCIjRkFFQkQ3XCIsdC5hcXVhbWFyaW5lPVwiIzdGRkZENFwiLHQuYXp1cmU9XCIjRjBGRkZGXCIsdC5iZWlnZT1cIiNGNUY1RENcIix0LmJpc3F1ZT1cIiNGRkU0QzRcIix0LmJsYW5jaGVkYWxtb25kPVwiI0ZGRUJDRFwiLHQuYmx1ZXZpb2xldD1cIiM4QTJCRTJcIix0LmJyb3duPVwiI0E1MkEyQVwiLHQuYnVybHl3b29kPVwiI0RFQjg4N1wiLHQuY2FkZXRibHVlPVwiIzVGOUVBMFwiLHQuY2hhcnRyZXVzZT1cIiM3RkZGMDBcIix0LmNob2NvbGF0ZT1cIiNEMjY5MUVcIix0LmNvcmFsPVwiI0ZGN0Y1MFwiLHQuY29ybmZsb3dlcmJsdWU9XCIjNjQ5NUVEXCIsdC5jb3Juc2lsaz1cIiNGRkY4RENcIix0LmNyaW1zb249XCIjREMxNDNDXCIsdC5jeWFuPVwiIzAwRkZGRlwiLHQuZGFya2JsdWU9XCIjMDAwMDhCXCIsdC5kYXJrY3lhbj1cIiMwMDhCOEJcIix0LmRhcmtnb2xkZW5yb2Q9XCIjQjg4NjBCXCIsdC5kYXJrZ3JheT1cIiNBOUE5QTlcIix0LmRhcmtncmVlbj1cIiMwMDY0MDBcIix0LmRhcmtncmV5PVwiI0E5QTlBOVwiLHQuZGFya2toYWtpPVwiI0JEQjc2QlwiLHQuZGFya21hZ2VudGE9XCIjOEIwMDhCXCIsdC5kYXJrb2xpdmVncmVlbj1cIiM1NTZCMkZcIix0LmRhcmtvcmFuZ2U9XCIjRkY4QzAwXCIsdC5kYXJrb3JjaGlkPVwiIzk5MzJDQ1wiLHQuZGFya3JlZD1cIiM4QjAwMDBcIix0LmRhcmtzYWxtb249XCIjRTk5NjdBXCIsdC5kYXJrc2VhZ3JlZW49XCIjOEZCQzhGXCIsdC5kYXJrc2xhdGVibHVlPVwiIzQ4M0Q4QlwiLHQuZGFya3NsYXRlZ3JheT1cIiMyRjRGNEZcIix0LmRhcmtzbGF0ZWdyZXk9XCIjMkY0RjRGXCIsdC5kYXJrdHVycXVvaXNlPVwiIzAwQ0VEMVwiLHQuZGFya3Zpb2xldD1cIiM5NDAwRDNcIix0LmRlZXBwaW5rPVwiI0ZGMTQ5M1wiLHQuZGVlcHNreWJsdWU9XCIjMDBCRkZGXCIsdC5kaW1ncmF5PVwiIzY5Njk2OVwiLHQuZGltZ3JleT1cIiM2OTY5NjlcIix0LmRvZGdlcmJsdWU9XCIjMUU5MEZGXCIsdC5maXJlYnJpY2s9XCIjQjIyMjIyXCIsdC5mbG9yYWx3aGl0ZT1cIiNGRkZBRjBcIix0LmZvcmVzdGdyZWVuPVwiIzIyOEIyMlwiLHQuZ2FpbnNib3JvPVwiI0RDRENEQ1wiLHQuZ2hvc3R3aGl0ZT1cIiNGOEY4RkZcIix0LmdvbGQ9XCIjRkZENzAwXCIsdC5nb2xkZW5yb2Q9XCIjREFBNTIwXCIsdC5ncmVlbnllbGxvdz1cIiNBREZGMkZcIix0LmdyZXk9XCIjODA4MDgwXCIsdC5ob25leWRldz1cIiNGMEZGRjBcIix0LmhvdHBpbms9XCIjRkY2OUI0XCIsdC5pbmRpYW5yZWQ9XCIjQ0Q1QzVDXCIsdC5pbmRpZ289XCIjNEIwMDgyXCIsdC5pdm9yeT1cIiNGRkZGRjBcIix0LmtoYWtpPVwiI0YwRTY4Q1wiLHQubGF2ZW5kZXI9XCIjRTZFNkZBXCIsdC5sYXZlbmRlcmJsdXNoPVwiI0ZGRjBGNVwiLHQubGF3bmdyZWVuPVwiIzdDRkMwMFwiLHQubGVtb25jaGlmZm9uPVwiI0ZGRkFDRFwiLHQubGlnaHRibHVlPVwiI0FERDhFNlwiLHQubGlnaHRjb3JhbD1cIiNGMDgwODBcIix0LmxpZ2h0Y3lhbj1cIiNFMEZGRkZcIix0LmxpZ2h0Z29sZGVucm9keWVsbG93PVwiI0ZBRkFEMlwiLHQubGlnaHRncmF5PVwiI0QzRDNEM1wiLHQubGlnaHRncmVlbj1cIiM5MEVFOTBcIix0LmxpZ2h0Z3JleT1cIiNEM0QzRDNcIix0LmxpZ2h0cGluaz1cIiNGRkI2QzFcIix0LmxpZ2h0c2FsbW9uPVwiI0ZGQTA3QVwiLHQubGlnaHRzZWFncmVlbj1cIiMyMEIyQUFcIix0LmxpZ2h0c2t5Ymx1ZT1cIiM4N0NFRkFcIix0LmxpZ2h0c2xhdGVncmF5PVwiIzc3ODg5OVwiLHQubGlnaHRzbGF0ZWdyZXk9XCIjNzc4ODk5XCIsdC5saWdodHN0ZWVsYmx1ZT1cIiNCMEM0REVcIix0LmxpZ2h0eWVsbG93PVwiI0ZGRkZFMFwiLHQubGltZWdyZWVuPVwiIzMyQ0QzMlwiLHQubGluZW49XCIjRkFGMEU2XCIsdC5tYWdlbnRhPVwiI0ZGMDBGRlwiLHQubWVkaXVtYXF1YW1hcmluZT1cIiM2NkNEQUFcIix0Lm1lZGl1bWJsdWU9XCIjMDAwMENEXCIsdC5tZWRpdW1vcmNoaWQ9XCIjQkE1NUQzXCIsdC5tZWRpdW1wdXJwbGU9XCIjOTM3MERCXCIsdC5tZWRpdW1zZWFncmVlbj1cIiMzQ0IzNzFcIix0Lm1lZGl1bXNsYXRlYmx1ZT1cIiM3QjY4RUVcIix0Lm1lZGl1bXNwcmluZ2dyZWVuPVwiIzAwRkE5QVwiLHQubWVkaXVtdHVycXVvaXNlPVwiIzQ4RDFDQ1wiLHQubWVkaXVtdmlvbGV0cmVkPVwiI0M3MTU4NVwiLHQubWlkbmlnaHRibHVlPVwiIzE5MTk3MFwiLHQubWludGNyZWFtPVwiI0Y1RkZGQVwiLHQubWlzdHlyb3NlPVwiI0ZGRTRFMVwiLHQubW9jY2FzaW49XCIjRkZFNEI1XCIsdC5uYXZham93aGl0ZT1cIiNGRkRFQURcIix0Lm9sZGxhY2U9XCIjRkRGNUU2XCIsdC5vbGl2ZWRyYWI9XCIjNkI4RTIzXCIsdC5vcmFuZ2VyZWQ9XCIjRkY0NTAwXCIsdC5vcmNoaWQ9XCIjREE3MEQ2XCIsdC5wYWxlZ29sZGVucm9kPVwiI0VFRThBQVwiLHQucGFsZWdyZWVuPVwiIzk4RkI5OFwiLHQucGFsZXR1cnF1b2lzZT1cIiNBRkVFRUVcIix0LnBhbGV2aW9sZXRyZWQ9XCIjREI3MDkzXCIsdC5wYXBheWF3aGlwPVwiI0ZGRUZENVwiLHQucGVhY2hwdWZmPVwiI0ZGREFCOVwiLHQucGVydT1cIiNDRDg1M0ZcIix0LnBpbms9XCIjRkZDMENCXCIsdC5wbHVtPVwiI0REQTBERFwiLHQucG93ZGVyYmx1ZT1cIiNCMEUwRTZcIix0LnJvc3licm93bj1cIiNCQzhGOEZcIix0LnJveWFsYmx1ZT1cIiM0MTY5RTFcIix0LnNhZGRsZWJyb3duPVwiIzhCNDUxM1wiLHQuc2FsbW9uPVwiI0ZBODA3MlwiLHQuc2FuZHlicm93bj1cIiNGNEE0NjBcIix0LnNlYWdyZWVuPVwiIzJFOEI1N1wiLHQuc2Vhc2hlbGw9XCIjRkZGNUVFXCIsdC5zaWVubmE9XCIjQTA1MjJEXCIsdC5za3libHVlPVwiIzg3Q0VFQlwiLHQuc2xhdGVibHVlPVwiIzZBNUFDRFwiLHQuc2xhdGVncmF5PVwiIzcwODA5MFwiLHQuc2xhdGVncmV5PVwiIzcwODA5MFwiLHQuc25vdz1cIiNGRkZBRkFcIix0LnNwcmluZ2dyZWVuPVwiIzAwRkY3RlwiLHQuc3RlZWxibHVlPVwiIzQ2ODJCNFwiLHQudGFuPVwiI0QyQjQ4Q1wiLHQudGhpc3RsZT1cIiNEOEJGRDhcIix0LnRvbWF0bz1cIiNGRjYzNDdcIix0LnR1cnF1b2lzZT1cIiM0MEUwRDBcIix0LnZpb2xldD1cIiNFRTgyRUVcIix0LndoZWF0PVwiI0Y1REVCM1wiLHQud2hpdGVzbW9rZT1cIiNGNUY1RjVcIix0LnllbGxvd2dyZWVuPVwiIzlBQ0QzMlwiLHQucmViZWNjYXB1cnBsZT1cIiM2NjMzOTlcIn0ob3x8KG89e30pKTt2YXIgYSxjLHU9T2JqZWN0LmtleXMobykscz17SEVYOltcInJcIixcImdcIixcImJcIixcImFcIl0sUkdCOltcInJcIixcImdcIixcImJcIixcImFcIl0sSFNMOltcImhcIixcInNcIixcImxcIixcImFcIl0sQ01ZSzpbXCJjXCIsXCJtXCIsXCJ5XCIsXCJrXCIsXCJhXCJdfSxkPXtCR1I6bi5SR0IsQUJHUjpuLlJHQixITFM6bi5IU0wsQUhMUzpuLkhTTCxDS01ZOm4uQ01ZSyxBQ0tNWTpuLkNNWUt9OyFmdW5jdGlvbih0KXt0Lk5VTUJFUj1cIm51bWJlclwiLHQuQk9PTEVBTj1cImJvb2xlYW5cIn0oYXx8KGE9e30pKTt2YXIgbCxmLGgscD0oKGM9e30pW24uSEVYXT0vXiMoPzooW2EtZlxcZF0pKFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pP3woW2EtZlxcZF17Mn0pKFthLWZcXGRdezJ9KShbYS1mXFxkXXsyfSkoW2EtZlxcZF17Mn0pPykkL2ksY1tuLlJHQl09L15yZ2JhP1xccypcXChcXHMqKD86KCg/OlxcZCpcXC4pP1xcZCslPylcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKyU/KVxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pKD86XFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCspKT98KCg/OlxcZCpcXC4pP1xcZCslPylcXHMqKCg/OlxcZCpcXC4pP1xcZCslPylcXHMqKCg/OlxcZCpcXC4pP1xcZCslPykoPzpcXHMqXFwvXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pKT8pXFxzKlxcKSQvLGNbbi5IU0xdPS9eaHNsYT9cXHMqXFwoXFxzKig/OigtPyg/OlxcZCpcXC4pP1xcZCsoPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrKSVcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKyklKD86XFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCspKT98KC0/KD86XFxkKlxcLik/XFxkKyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKigoPzpcXGQqXFwuKT9cXGQrKSVcXHMqKCg/OlxcZCpcXC4pP1xcZCspJSg/OlxccypcXC9cXHMqKCg/OlxcZCpcXC4pP1xcZCslPykpPylcXHMqXFwpJC8sY1tuLkNNWUtdPS9eKD86ZGV2aWNlLWNteWt8Y215aylcXHMqXFwoXFxzKig/OigoPzpcXGQqXFwuKT9cXGQrJT8pXFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCslPylcXHMqLFxccyooKD86XFxkKlxcLik/XFxkKyU/KVxccyosXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pKD86XFxzKixcXHMqKCg/OlxcZCpcXC4pP1xcZCspKT98KCg/OlxcZCpcXC4pP1xcZCslPylcXHMqKCg/OlxcZCpcXC4pP1xcZCslPylcXHMqKCg/OlxcZCpcXC4pP1xcZCslPylcXHMqKCg/OlxcZCpcXC4pP1xcZCslPykoPzpcXHMqXFwvXFxzKigoPzpcXGQqXFwuKT9cXGQrJT8pKT8pXFxzKlxcKSQvLGMpLGc9L14oLT8oPzpcXGQqXFwuKT9cXGQrKSgoPzpkZWd8Z3JhZHxyYWR8dHVybik/KSQvLG09L14oXFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSUkLyxiPS9eMHgoW2EtZlxcZF17MSwyfSkkL2ksQT0vXFx7KFxcZCspXFx9L2cseT0vLCggK3xcXGQrKS9nLEU9LyArLyxGPVwiVGhlIHByb3ZpZGVkIHN0cmluZyBjb2xvciBkb2Vzbid0IGhhdmUgYSBjb3JyZWN0IGZvcm1hdFwiLHY9XCJUaGUgcHJvdmlkZWQgY29sb3Igb2JqZWN0IGRvZXNuJ3QgaGF2ZSB0aGUgcHJvcGVyIGtleXMgb3IgZm9ybWF0XCI7IWZ1bmN0aW9uKHQpe3QuTk9ORT1cIm5vbmVcIix0LkRFR1JFRVM9XCJkZWdcIix0LkdSQURJQU5TPVwiZ3JhZFwiLHQuUkFESUFOUz1cInJhZFwiLHQuVFVSTlM9XCJ0dXJuXCJ9KGx8fChsPXt9KSksZnVuY3Rpb24odCl7dC5OT05FPVwibm9uZVwiLHQuUEVSQ0VOVD1cInBlcmNlbnRcIn0oZnx8KGY9e30pKSxmdW5jdGlvbih0KXt0LkRFVklDRV9DTVlLPVwiZGV2aWNlLWNteWtcIix0LkNNWUs9XCJjbXlrXCJ9KGh8fChoPXt9KSk7dmFyIEgsQixDLFMsUixNLEQ9e2RlY2ltYWxzOjYsbGVnYWN5Q1NTOiExLHNwYWNlc0FmdGVyQ29tbWFzOiExLGFuZ2xlc1VuaXQ6bC5OT05FLHJnYlVuaXQ6Zi5OT05FLGNteWtVbml0OmYuUEVSQ0VOVCxhbHBoYVVuaXQ6Zi5OT05FLGNteWtGdW5jdGlvbjpoLkRFVklDRV9DTVlLfSxPPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSxMPWZ1bmN0aW9uKHQpe3JldHVybitcIlwiLmNvbmNhdCh0KS5yZXBsYWNlKG0sXCIkMVwiKX0sRz1mdW5jdGlvbih0KXtyZXR1cm4gbS50ZXN0KFwiXCIuY29uY2F0KHQpKT9MKHQpOk1hdGgubWluKCt0LDEwMCl9LGs9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aCYmKHQrPXQpLHBhcnNlSW50KHQsMTYpfSxqPWZ1bmN0aW9uKHQpe3ZhciBlPUsodCwwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gMT09PWUubGVuZ3RoP1wiMHgwXCIuY29uY2F0KGUpOlwiMHhcIi5jb25jYXQoZSl9LFg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ITEpLCFlJiZtLnRlc3QodCk/TWF0aC5taW4oMjU1KkwodCkvMTAwLDI1NSk6Yi50ZXN0KHQpPygzPT09dC5sZW5ndGgmJih0Kz10LnNsaWNlKC0xKSksZT9LKHQpLzI1NTpLKHQpKTpNYXRoLm1pbigrdCxlPzE6MjU1KX0sST1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4obS50ZXN0KHQpP0wodCkvMTAwOit0LDEpfSxZPWZ1bmN0aW9uKHQpe3JldHVybiBlKFtdLHQsITApLnNvcnQoKS5qb2luKFwiXCIpLnRvVXBwZXJDYXNlKCl9LEs9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT02KTt2YXIgbj1NYXRoLnBvdygxMCxlKTtyZXR1cm4gTWF0aC5yb3VuZCgrdCpuKS9ufSxOPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gTWF0aC5tYXgoZSxNYXRoLm1pbih0LG4pKX0sVD1mdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9dC5tYXRjaChnKSxuPStlWzFdO3N3aXRjaChlWzJdKXtjYXNlIGwuUkFESUFOUzp0PUsoMTgwKm4vTWF0aC5QSSk7YnJlYWs7Y2FzZSBsLlRVUk5TOnQ9SygzNjAqbik7YnJlYWs7Y2FzZSBsLkdSQURJQU5TOnQ9SyguOSpuKTticmVhaztjYXNlIGwuREVHUkVFUzpkZWZhdWx0OnQ9bn19cmV0dXJuKHQ+MzYwfHx0PDApJiYodC09MzYwKk1hdGguZmxvb3IodC8zNjApKSx0fSxQPWZ1bmN0aW9uKHQsZSl7dmFyIG47c3dpdGNoKGUpe2Nhc2UgbC5SQURJQU5TOm49SyhmdW5jdGlvbih0KXtyZXR1cm4gdCpNYXRoLlBJLzE4MH0odCkpO2JyZWFrO2Nhc2UgbC5UVVJOUzpuPUsodC8zNjApO2JyZWFrO2Nhc2UgbC5HUkFESUFOUzpuPUsoMTAvOSp0KTticmVhaztjYXNlIGwuREVHUkVFUzpjYXNlIGwuTk9ORTpkZWZhdWx0Om49dH1yZXR1cm4gbn0sVT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZVtuLTFdPWFyZ3VtZW50c1tuXTtmb3IodmFyIHI9W10saT1bXSxvPVtdLGM9W10sdT1bXSxzPU9iamVjdC52YWx1ZXMobCksZD1PYmplY3QudmFsdWVzKGYpLGI9T2JqZWN0LnZhbHVlcyhoKSxBPXtsZWdhY3lDU1M6MCxzcGFjZXNBZnRlckNvbW1hczowLGNteWtGdW5jdGlvbjowfSxGPTAsdj1lO0Y8di5sZW5ndGg7RisrKXt2YXIgSD12W0ZdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBIKXtpZihyLnB1c2goSCksSC5pbmNsdWRlcyhcIixcIikpe0EubGVnYWN5Q1NTKys7dmFyIEI9SC5tYXRjaCh5KTsxPT09bmV3IFNldChCKS5zaXplJiZFLnRlc3QoQlswXS5zbGljZSgxKSkmJkEuc3BhY2VzQWZ0ZXJDb21tYXMrK31pZihILm1hdGNoKHAuSFNMKSl7dmFyIEM9KGs9SC5tYXRjaChwLkhTTCkpWzFdfHxrWzVdLFM9a1s4XSxSPUMubWF0Y2goZylbMl07aS5wdXNoKFwiXCI9PT1SP2wuTk9ORTpSKSx1LnB1c2gobS50ZXN0KFMpKTtjb250aW51ZX1pZihwLlJHQi50ZXN0KEgpKXt2YXIgTT0oaz1ILm1hdGNoKHAuUkdCKSlbMV18fGtbNV0sTz1rWzJdfHxrWzZdLEw9a1szXXx8a1s3XSxHPWtbOF07by5wdXNoKG0udGVzdChNKSYmbS50ZXN0KE8pJiZtLnRlc3QoTCkpLHUucHVzaChtLnRlc3QoRykpO2NvbnRpbnVlfWlmKEgubWF0Y2gocC5DTVlLKSl7dmFyIGssaj0oaz1ILm1hdGNoKHAuQ01ZSykpWzFdfHxrWzZdLFg9a1syXXx8a1s3XSxJPWtbM118fGtbOF0sWT1rWzRdfHxrWzldO0c9a1sxMF07Yy5wdXNoKG0udGVzdChqKSYmbS50ZXN0KFgpJiZtLnRlc3QoSSkmJm0udGVzdChZKSksSC5zdGFydHNXaXRoKFwiY215a1wiKSYmQS5jbXlrRnVuY3Rpb24rKyx1LnB1c2gobS50ZXN0KEcpKX19fXJldHVybntkZWNpbWFsczp0eXBlb2YgdC5kZWNpbWFscz09PWEuTlVNQkVSP3QuZGVjaW1hbHM6RC5kZWNpbWFscyxsZWdhY3lDU1M6dHlwZW9mIHQubGVnYWN5Q1NTPT09YS5CT09MRUFOP3QubGVnYWN5Q1NTOkJvb2xlYW4oci5sZW5ndGgmJkEubGVnYWN5Q1NTPT09ci5sZW5ndGgpfHxELmxlZ2FjeUNTUyxzcGFjZXNBZnRlckNvbW1hczp0eXBlb2YgdC5zcGFjZXNBZnRlckNvbW1hcz09PWEuQk9PTEVBTj90LnNwYWNlc0FmdGVyQ29tbWFzOkJvb2xlYW4oci5sZW5ndGgmJkEuc3BhY2VzQWZ0ZXJDb21tYXM9PT1yLmxlbmd0aCl8fEQuc3BhY2VzQWZ0ZXJDb21tYXMsYW5nbGVzVW5pdDp0LmFuZ2xlc1VuaXQmJnMuaW5jbHVkZXModC5hbmdsZXNVbml0KT90LmFuZ2xlc1VuaXQ6MT09PW5ldyBTZXQoaSkuc2l6ZT9pWzBdOkQuYW5nbGVzVW5pdCxyZ2JVbml0OnQucmdiVW5pdCYmZC5pbmNsdWRlcyh0LnJnYlVuaXQpP3QucmdiVW5pdDoxPT09bmV3IFNldChvKS5zaXplJiZvWzBdP2YuUEVSQ0VOVDpELnJnYlVuaXQsY215a1VuaXQ6dC5jbXlrVW5pdCYmZC5pbmNsdWRlcyh0LmNteWtVbml0KT90LmNteWtVbml0OjEhPT1uZXcgU2V0KGMpLnNpemV8fGNbMF0/RC5jbXlrVW5pdDpmLk5PTkUsYWxwaGFVbml0OnQuYWxwaGFVbml0JiZkLmluY2x1ZGVzKHQuYWxwaGFVbml0KT90LmFscGhhVW5pdDoxPT09bmV3IFNldCh1KS5zaXplJiZ1WzBdP2YuUEVSQ0VOVDpELmFscGhhVW5pdCxjbXlrRnVuY3Rpb246dC5jbXlrRnVuY3Rpb24mJmIuaW5jbHVkZXModC5jbXlrRnVuY3Rpb24pP3QuY215a0Z1bmN0aW9uOmMubGVuZ3RoJiZjLmxlbmd0aD09PUEuY215a0Z1bmN0aW9uP2guQ01ZSzpELmNteWtGdW5jdGlvbn19LHc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPDAmJihuKz02KSxuPj02JiYobi09NiksSyhuPDE/MjU1KigoZS10KSpuK3QpOm48Mz8yNTUqZTpuPDQ/MjU1KigoZS10KSooNC1uKSt0KToyNTUqdCl9LHg9ZnVuY3Rpb24odCxlLG4pe2UvPTEwMDt2YXIgcj0obi89MTAwKTw9LjU/biooZSsxKTpuK2UtbiplLGk9MipuLXI7cmV0dXJue3I6dyhpLHIsKHQvPTYwKSsyKSxnOncoaSxyLHQpLGI6dyhpLHIsdC0yKX19LFY9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJue3I6SygyNTUqKDEtdCkqKHI9MS1yKSksZzpLKDI1NSooMS1lKSpyKSxiOksoMjU1KigxLW4pKnIpfX0scT1mdW5jdGlvbih0LGUsbil7dC89MjU1LGUvPTI1NSxuLz0yNTU7dmFyIHI9MS1NYXRoLm1heCh0LGUsbiksaT0xLXIsbz1pJiYoaS1lKS9pLGE9aSYmKGktbikvaTtyZXR1cm57YzpLKDEwMCooaSYmKGktdCkvaSkpLG06SygxMDAqbykseTpLKDEwMCphKSxrOksoMTAwKnIpfX0sXz1mdW5jdGlvbih0LGUsbixyKXt2b2lkIDA9PT1yJiYocj0xKSx0Lz0yNTUsZS89MjU1LG4vPTI1NSxyPU1hdGgubWluKHIsMSk7dmFyIGk9TWF0aC5tYXgodCxlLG4pLG89TWF0aC5taW4odCxlLG4pLGE9aS1vLGM9MCx1PTAscz0oaStvKS8yO2lmKDAhPT1hKXtzd2l0Y2goaSl7Y2FzZSB0OmM9KGUtbikvYSU2O2JyZWFrO2Nhc2UgZTpjPShuLXQpL2ErMjticmVhaztjYXNlIG46Yz0odC1lKS9hKzR9KGM9Syg2MCpjKSk8MCYmKGMrPTM2MCksdT1hLygxLU1hdGguYWJzKDIqcy0xKSl9cmV0dXJue2g6YyxzOksoMTAwKnUpLGw6SygxMDAqcyksYTpyfX0sJD1mdW5jdGlvbih0LGUpe2lmKHQ8MCYmKHQrPTM2MCksdD4zNjAmJih0LT0zNjApLDM2MD09PXR8fDA9PT10KXJldHVybiB0O3ZhciBuPVtbMCwxMjBdLFsxMjAsMTgwXSxbMTgwLDI0MF0sWzI0MCwzNjBdXSxyPVtbMCw2MF0sWzYwLDEyMF0sWzEyMCwyNDBdLFsyNDAsMzYwXV0saT1lP3I6bixvPTAsYT0wLGM9MCx1PTA7cmV0dXJuKGU/bjpyKS5maW5kKChmdW5jdGlvbihlLG4pe3JldHVybiB0Pj1lWzBdJiZ0PGVbMV0mJihvPWVbMF0sYT1lWzFdLGM9aVtuXVswXSx1PWlbbl1bMV0sITApfSkpLGMrKHUtYykvKGEtbykqKHQtbyl9LHo9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/XCIsIFwiOlwiLFwifSxRPWZ1bmN0aW9uKHQsZSl7dmFyIG49WShPYmplY3Qua2V5cyh0KSk7cmV0dXJuIHNbZFtuXV0ucmVkdWNlKChmdW5jdGlvbihuLHIsaSl7dmFyIG89dFtyXTtyZXR1cm4gdm9pZCAwIT09byYmbi5wdXNoKGUobyxpKSksbn0pLFtdKX0sVz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnJlcGxhY2UoQSwoZnVuY3Rpb24odCxuKXtyZXR1cm5cIlwiLmNvbmNhdChlWytuLTFdKX0pKX0sSj1mdW5jdGlvbih0LGUpe3ZhciBuPWUuYWxwaGFVbml0LHI9ZS5sZWdhY3lDU1MsaT1lLmRlY2ltYWxzO3JldHVybiBuIT09Zi5QRVJDRU5UfHxyP0sodCxpKTpcIlwiLmNvbmNhdChLKDEwMCp0LGkpLFwiJVwiKX0sWj0oKEg9e30pW24uSEVYXT1mdW5jdGlvbih0KXt2YXIgZT1RKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBlPUsodCksMT09PShuPUsoZSwwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSkubGVuZ3RoJiYobj1cIjBcIi5jb25jYXQobikpLG47dmFyIGUsbn0pKSxuPTQ9PT1lLmxlbmd0aD9cIiN7MX17Mn17M317NH1cIjpcIiN7MX17Mn17M31cIjtyZXR1cm4gVyhuLGUpfSxIW24uUkdCXT1mdW5jdGlvbih0LGUpe3ZhciBuPWUuZGVjaW1hbHMscj1lLmxlZ2FjeUNTUyxpPWUuc3BhY2VzQWZ0ZXJDb21tYXMsbz1lLnJnYlVuaXQsYT16KGkpLGM9USh0LChmdW5jdGlvbih0LHIpe3JldHVybiBvPT09Zi5QRVJDRU5UJiZyPDM/XCJcIi5jb25jYXQoZnVuY3Rpb24odCxlKXtyZXR1cm4gSyh0LzI1NSoxMDAsZSl9KHQsbiksXCIlXCIpOjM9PT1yP0oodCxlKTpLKHQsbil9KSksdT1yPzQ9PT1jLmxlbmd0aD9cInJnYmEoezF9XCIuY29uY2F0KGEsXCJ7Mn1cIikuY29uY2F0KGEsXCJ7M31cIikuY29uY2F0KGEsXCJ7NH0pXCIpOlwicmdiKHsxfVwiLmNvbmNhdChhLFwiezJ9XCIpLmNvbmNhdChhLFwiezN9KVwiKTo0PT09Yy5sZW5ndGg/XCJyZ2IoezF9IHsyfSB7M30gLyB7NH0pXCI6XCJyZ2IoezF9IHsyfSB7M30pXCI7cmV0dXJuIFcodSxjKX0sSFtuLkhTTF09ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmRlY2ltYWxzLHI9ZS5sZWdhY3lDU1MsaT1lLnNwYWNlc0FmdGVyQ29tbWFzLG89ZS5hbmdsZXNVbml0LGE9eihpKSxjPVEodCwoZnVuY3Rpb24odCxyKXtpZigwPT09ciYmbyE9PWwuTk9ORSl7dmFyIGk9SyhQKHQsbyksbik7cmV0dXJuXCJcIi5jb25jYXQoaSkuY29uY2F0KG8pfXJldHVybiAzPT09cj9KKHQsZSk6Syh0LG4pfSkpLHU9cj80PT09Yy5sZW5ndGg/XCJoc2xhKHsxfVwiLmNvbmNhdChhLFwiezJ9JVwiKS5jb25jYXQoYSxcInszfSVcIikuY29uY2F0KGEsXCJ7NH0pXCIpOlwiaHNsKHsxfVwiLmNvbmNhdChhLFwiezJ9JVwiKS5jb25jYXQoYSxcInszfSUpXCIpOjQ9PT1jLmxlbmd0aD9cImhzbCh7MX0gezJ9JSB7M30lIC8gezR9KVwiOlwiaHNsKHsxfSB7Mn0lIHszfSUpXCI7cmV0dXJuIFcodSxjKX0sSFtuLkNNWUtdPWZ1bmN0aW9uKHQsZSl7dmFyIG49ZS5kZWNpbWFscyxyPWUubGVnYWN5Q1NTLGk9ZS5zcGFjZXNBZnRlckNvbW1hcyxvPWUuY215a1VuaXQsYT1lLmNteWtGdW5jdGlvbixjPXooaSksdT1RKHQsKGZ1bmN0aW9uKHQscil7cmV0dXJuIG89PT1mLlBFUkNFTlQmJnI8ND9cIlwiLmNvbmNhdChLKHQsbiksXCIlXCIpOjQ9PT1yP0oodCxlKTpLKHQvMTAwLG4pfSkpLHM9cj81PT09dS5sZW5ndGg/XCJcIi5jb25jYXQoYSxcIih7MX1cIikuY29uY2F0KGMsXCJ7Mn1cIikuY29uY2F0KGMsXCJ7M31cIikuY29uY2F0KGMsXCJ7NH1cIikuY29uY2F0KGMsXCJ7NX0pXCIpOlwiXCIuY29uY2F0KGEsXCIoezF9XCIpLmNvbmNhdChjLFwiezJ9XCIpLmNvbmNhdChjLFwiezN9XCIpLmNvbmNhdChjLFwiezR9KVwiKTo1PT09dS5sZW5ndGg/XCJcIi5jb25jYXQoYSxcIih7MX0gezJ9IHszfSB7NH0gLyB7NX0pXCIpOlwiXCIuY29uY2F0KGEsXCIoezF9IHsyfSB7M30gezR9KVwiKTtyZXR1cm4gVyhzLHUpfSxIKSx0dD1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bS50ZXN0KHQpP0wodCkvMTAwOit0KSxpc05hTigrdCl8fHQ+MT8xOksodCl9LGV0PWZ1bmN0aW9uKG4scixvKXtyZXR1cm4gci5yZWR1Y2UoKGZ1bmN0aW9uKHIsYSl7cmV0dXJuIGUoZShbXSxyLCEwKSxbdCh0KHt9LG4pLHtoOm89PT1pLkFERElUSVZFP1Qobi5oK2EpOlQoJCgkKG4uaCwhMSkrYSwhMCkpfSldLCExKX0pLFt0KHt9LG4pXSl9LG50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV0KHQsWzMwLC0zMF0sZSl9LHJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV0KHQsWzE4MF0sZSl9LGl0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV0KHQsWzE1MCwtMTUwXSxlKX0sb3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXQodCxbMTIwLC0xMjBdLGUpfSxhdD1mdW5jdGlvbih0LGUpe3JldHVybiBldCh0LFs2MCwtMTIwLDE4MF0sZSl9LGN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV0KHQsWzkwLC05MCwxODBdLGUpfSx1dD1mdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9mdW5jdGlvbih0KXt2YXIgZTtpZihPYmplY3Qua2V5cyhuKS5zb21lKChmdW5jdGlvbihuKXtpZihwW25dLnRlc3QodCkpcmV0dXJuIGU9biwhMH0pKSwhZSYmfnUuaW5kZXhPZih0KSYmKGU9bi5IRVgpLCFlKXRocm93IG5ldyBFcnJvcihGKTtyZXR1cm4gZX0odCk6ZnVuY3Rpb24odCl7dmFyIGUscj0hMSxpPVkoT2JqZWN0LmtleXModCkpO2lmKGRbaV0mJihlPWRbaV0pLGUmJmU9PT1uLlJHQil7dmFyIG89T2JqZWN0LmVudHJpZXModCkuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIWIudGVzdChcIlwiLmNvbmNhdCh0WzFdKSl9KSksYT1PYmplY3QuZW50cmllcyh0KS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4hKG0udGVzdChcIlwiLmNvbmNhdCh0WzFdKSl8fCFiLnRlc3QoXCJcIi5jb25jYXQodFsxXSkpJiYhaXNOYU4oK3RbMV0pJiYrdFsxXTw9MjU1KX0pKTtvJiZhJiYocj0hMCksb3x8KGU9bi5IRVgpfWlmKCFlfHxyKXRocm93IG5ldyBFcnJvcih2KTtyZXR1cm4gZX0odCl9LHN0PSgoQj17fSlbbi5IRVhdPWZ1bmN0aW9uKHQpe3ZhciBlPSh+dS5pbmRleE9mKHQpP29bdF06dCkubWF0Y2gocC5IRVgpLG49e3I6ayhlWzFdfHxlWzVdKSxnOmsoZVsyXXx8ZVs2XSksYjprKGVbM118fGVbN10pfSxyPWVbNF18fGVbOF07cmV0dXJuIHZvaWQgMCE9PXImJihuLmE9ayhyKS8yNTUpLG59LEJbbi5SR0JdPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2gocC5SR0IpLG49WChlWzFdfHxlWzVdKSxyPVgoZVsyXXx8ZVs2XSksaT1YKGVbM118fGVbN10pLG89ZVs0XXx8ZVs4XSxhPXtyOk1hdGgubWluKG4sMjU1KSxnOk1hdGgubWluKHIsMjU1KSxiOk1hdGgubWluKGksMjU1KX07cmV0dXJuIHZvaWQgMCE9PW8mJihhLmE9dHQobykpLGF9LEJbbi5IU0xdPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2gocC5IU0wpLG49VChlWzFdfHxlWzVdKSxyPUcoZVsyXXx8ZVs2XSksaT1HKGVbM118fGVbN10pLG89ZVs0XXx8ZVs4XSxhPXgobixyLGkpO3JldHVybiB2b2lkIDAhPT1vJiYoYS5hPXR0KG8pKSxhfSxCW24uQ01ZS109ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChwLkNNWUspLG49SShlWzFdfHxlWzZdKSxyPUkoZVsyXXx8ZVs3XSksaT1JKGVbM118fGVbOF0pLG89SShlWzRdfHxlWzldKSxhPWVbNV18fGVbMTBdLGM9VihuLHIsaSxvKTtyZXR1cm4gdm9pZCAwIT09YSYmKGMuYT10dChhKSksY30sQiksZHQ9KChDPXt9KVtuLkhFWF09ZnVuY3Rpb24odCl7dmFyIGU9e3I6WChcIlwiLmNvbmNhdCh0LnIpKSxnOlgoXCJcIi5jb25jYXQodC5nKSksYjpYKFwiXCIuY29uY2F0KHQuYikpfTtyZXR1cm4gTyh0LFwiYVwiKSYmKGUuYT1NYXRoLm1pbihYKFwiXCIuY29uY2F0KHQuYSksITApLDEpKSxlfSxDW24uUkdCXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5IRVgodCl9LENbbi5IU0xdPWZ1bmN0aW9uKHQpe3ZhciBlPUcoXCJcIi5jb25jYXQodC5zKSksbj1HKFwiXCIuY29uY2F0KHQubCkpLHI9eChUKHQuaCksZSxuKTtyZXR1cm4gTyh0LFwiYVwiKSYmKHIuYT10dCh0LmEpKSxyfSxDW24uQ01ZS109ZnVuY3Rpb24odCl7dmFyIGU9SShcIlwiLmNvbmNhdCh0LmMpKSxuPUkoXCJcIi5jb25jYXQodC5tKSkscj1JKFwiXCIuY29uY2F0KHQueSkpLGk9SShcIlwiLmNvbmNhdCh0LmspKSxvPVYoZSxuLHIsaSk7cmV0dXJuIE8odCxcImFcIikmJihvLmE9dHQodC5hKSksb30sQyksbHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dXQodCkpLFwic3RyaW5nXCI9PXR5cGVvZiB0P3N0W2VdKHQpOmR0W2VdKHQpfSxmdD0oKFM9e30pW24uSEVYXT1mdW5jdGlvbih0KXtyZXR1cm57cjpqKHQuciksZzpqKHQuZyksYjpqKHQuYil9fSxTLkhFWEE9ZnVuY3Rpb24odCl7dmFyIGU9ZnQuSEVYKHQpO3JldHVybiBlLmE9Tyh0LFwiYVwiKT9qKDI1NSp0LmEpOlwiMHhGRlwiLGV9LFNbbi5SR0JdPWZ1bmN0aW9uKHQsZSl7dmFyIG49bXQodCxlKTtyZXR1cm4gTyhuLFwiYVwiKSYmZGVsZXRlIG4uYSxufSxTLlJHQkE9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdC5SR0IodCxlKTtyZXR1cm4gbi5hPU8odCxcImFcIik/Syh0LmEpOjEsbn0sU1tuLkhTTF09ZnVuY3Rpb24odCxlKXt2YXIgbj1fKHQucix0LmcsdC5iKTtyZXR1cm4gZGVsZXRlIG4uYSxidChuLGUpfSxTLkhTTEE9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdC5IU0wodCxlKTtyZXR1cm4gbi5hPU8odCxcImFcIik/Syh0LmEsZSk6MSxufSxTW24uQ01ZS109ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXQocSh0LnIsdC5nLHQuYiksZSl9LFMuQ01ZS0E9ZnVuY3Rpb24odCxlKXt2YXIgbj1mdC5DTVlLKHQsZSk7cmV0dXJuIG4uYT1PKHQsXCJhXCIpP0sodC5hLGUpOjEsbn0sUyksaHQ9ZnVuY3Rpb24oZSxyLGksbyl7dmFyIGE9dXQoZSksYz1cInN0cmluZ1wiPT10eXBlb2YgZSx1PWx0KGUsYSkscz1cInN0cmluZ1wiPT10eXBlb2YgZSYmTyh1LFwiYVwiKXx8XCJzdHJpbmdcIiE9dHlwZW9mIGUmJk8oZSxcImFcIiksZD1fKHUucix1LmcsdS5iLHUuYSk7c3x8ZGVsZXRlIGQuYTt2YXIgbD1pP2QubC8ocisxKTooMTAwLWQubCkvKHIrMSksZj1BcnJheShyKS5maWxsKG51bGwpLm1hcCgoZnVuY3Rpb24oZSxuKXtyZXR1cm4gdCh0KHt9LGQpLHtsOmQubCtsKihuKzEpKigxLTIqK2kpfSl9KSk7c3dpdGNoKGEpe2Nhc2Ugbi5IRVg6ZGVmYXVsdDpyZXR1cm4gZi5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuPXgoZS5oLGUucyxlLmwpO3JldHVybiBzJiYobi5hPWUuYSksYz9zP1ouSEVYKHQodCh7fSxuKSx7YTpLKDI1NSpuLmEpfSkpOlouSEVYKG4pOnM/ZnQuSEVYQShuKTpmdC5IRVgobil9KSk7Y2FzZSBuLlJHQjpyZXR1cm4gZi5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXgodC5oLHQucyx0LmwpO3JldHVybiBzJiYoZS5hPXQuYSksYz9aLlJHQihlLG8pOnM/ZnQuUkdCQShlLG8uZGVjaW1hbHMpOmZ0LlJHQihlLG8uZGVjaW1hbHMpfSkpO2Nhc2Ugbi5IU0w6cmV0dXJuIGYubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gYz9aLkhTTChlLG8pOnM/ZnQuSFNMQSh0KHQoe30seChlLmgsZS5zLGUubCkpLHthOmUuYX0pLG8uZGVjaW1hbHMpOmZ0LkhTTCh4KGUuaCxlLnMsZS5sKSxvLmRlY2ltYWxzKX0pKX19LHB0PSgoUj17YnVpbGRIYXJtb255OmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvPXV0KHQpLGE9bHQodCxvKSxjPV8oYS5yLGEuZyxhLmIsYS5hKSx1PVwic3RyaW5nXCI9PXR5cGVvZiB0JiZPKGEsXCJhXCIpfHxcInN0cmluZ1wiIT10eXBlb2YgdCYmTyh0LFwiYVwiKSxzPVwic3RyaW5nXCI9PXR5cGVvZiB0O3N3aXRjaChvKXtjYXNlIG4uSEVYOmRlZmF1bHQ6cmV0dXJuIHU/dGhpcy5IRVhBKGJ0KGMsMCksZSxyLHMpOnRoaXMuSEVYKGJ0KGMsMCksZSxyLHMpO2Nhc2Ugbi5IU0w6cmV0dXJuIHU/dGhpcy5IU0xBKGMsZSxyLHMsaSk6dGhpcy5IU0woYyxlLHIscyxpKTtjYXNlIG4uUkdCOnJldHVybiB1P3RoaXMuUkdCQShjLGUscixzLGkpOnRoaXMuUkdCKGMsZSxyLHMsaSl9fX0pW24uSEVYXT1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gZSh0LG4pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHI/Wi5IRVgoeCh0LmgsdC5zLHQubCkpOmZ0LkhFWCh4KHQuaCx0LnMsdC5sKSl9KSl9LFIuSEVYQT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gbihlLHIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGk/Wi5IRVgodCh0KHt9LHgoZS5oLGUucyxlLmwpKSx7YToyNTUqdHQoZS5hKX0pKTpmdC5IRVhBKHQodCh7fSx4KGUuaCxlLnMsZS5sKSkse2E6dHQoZS5hKX0pKX0pKX0sUltuLlJHQl09ZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gZSh0LG4pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHI/Wi5SR0IoeCh0LmgsdC5zLHQubCksaSk6ZnQuUkdCKHgodC5oLHQucyx0LmwpLGkuZGVjaW1hbHMpfSkpfSxSLlJHQkE9ZnVuY3Rpb24oZSxuLHIsaSxvKXtyZXR1cm4gbihlLHIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGk/Wi5SR0IodCh0KHt9LHgoZS5oLGUucyxlLmwpKSx7YTp0dChlLmEpfSksbyk6ZnQuUkdCQSh0KHQoe30seChlLmgsZS5zLGUubCkpLHthOnR0KGUuYSl9KSxvLmRlY2ltYWxzKX0pKX0sUltuLkhTTF09ZnVuY3Rpb24odCxlLG4scixpKXtyZXR1cm4gZSh0LG4pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHI/Wi5IU0woe2g6dC5oLHM6dC5zLGw6dC5sfSxpKTpmdC5IU0woeCh0LmgsdC5zLHQubCksaS5kZWNpbWFscyl9KSl9LFIuSFNMQT1mdW5jdGlvbihlLG4scixpLG8pe3JldHVybiBuKGUscikubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaT9aLkhTTCh0KHQoe30sZSkse2E6dHQoZS5hKX0pLG8pOmZ0LkhTTEEodCh0KHt9LHgoZS5oLGUucyxlLmwpKSx7YTp0dChlLmEpfSksby5kZWNpbWFscyl9KSl9LFIpLGd0PSgoTT17bWl4OmZ1bmN0aW9uKGUsbil7dmFyIHIsbyxhLGMsdSxzLGQsbCxmLGgscCxnLG0sYixBLHk9ZS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPXV0KHQpO3JldHVybiBsdCh0LGUpfSkpLEU9bj09PWkuU1VCVFJBQ1RJVkU/eS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYSxjLHUscyxkLGwsZixoLHAsZz0oZT10LnIsbj10Lmcscj10LmIsaT1NYXRoLm1pbihlLG4sciksbz1NYXRoLm1pbigyNTUtZSwyNTUtbiwyNTUtciksYT1lLWksYz1uLWksdT1yLWkscz1NYXRoLm1pbihhLGMpLGQ9YS1zLGw9KGMrcykvMixmPSh1K2MtcykvMixoPU1hdGgubWF4KGQsbCxmKS9NYXRoLm1heChhLGMsdSkscD1pc05hTihoKXx8aD09PTEvMHx8aDw9MD8xOmgse3I6ZC9wK28seTpsL3ArbyxiOmYvcCtvfSk7cmV0dXJuIE8odCxcImFcIikmJihnLmE9dC5hKSxnfSkpOm51bGw7ZnVuY3Rpb24gRihlKXt2YXIgcj1uPT09aS5BRERJVElWRT97cjowLGc6MCxiOjAsYTowfTp7cjowLHk6MCxiOjAsYTowfTtyZXR1cm4gZS5yZWR1Y2UoKGZ1bmN0aW9uKGUscil7dmFyIG89TyhyLFwiYVwiKT9yLmE6MSxhPXtyOk1hdGgubWluKGUucityLnIqbywyNTUpLGI6TWF0aC5taW4oZS5iK3IuYipvLDI1NSksYToxLSgxLW8pKigxLWUuYSl9LGM9XCJnXCJpbiBlP2UuZzplLnksdT1cImdcImluIHI/ci5nOnIueTtyZXR1cm4gdCh0KHt9LGEpLG49PT1pLkFERElUSVZFP3tnOk1hdGgubWluKGMrdSpvLDI1NSl9Ont5Ok1hdGgubWluKGMrdSpvLDI1NSl9KX0pLHIpfWlmKG49PT1pLkFERElUSVZFKXI9Rih5KTtlbHNle3ZhciB2PUYoRSk7bz12LnIsYT12LnksYz12LmIsdT1NYXRoLm1pbihvLGEsYykscz1NYXRoLm1pbigyNTUtbywyNTUtYSwyNTUtYyksZD1vLXUsbD1hLXUsZj1jLXUsaD1NYXRoLm1pbihsLGYpLHA9ZCtsLWgsZz1sK2gsbT0yKihmLWgpLGI9TWF0aC5tYXgocCxnLG0pL01hdGgubWF4KGQsbCxmKSxBPWlzTmFOKGIpfHxiPT09MS8wfHxiPD0wPzE6Yiwocj17cjpwL0ErcyxnOmcvQStzLGI6bS9BK3N9KS5hPXYuYX1yZXR1cm57cjpLKHIuciksZzpLKHIuZyksYjpLKHIuYiksYTpOKHIuYSwwLDEpfX19KVtuLkhFWF09ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMubWl4KHQsZSk7cmV0dXJuIGRlbGV0ZSByLmEsbj9aLkhFWChyKTpmdC5IRVgocil9LE0uSEVYQT1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcy5taXgodCxlKTtyZXR1cm4gci5hPW4/MjU1KnR0KHIuYSk6dHQoci5hKSxuP1ouSEVYKHIpOmZ0LkhFWEEocil9LE1bbi5SR0JdPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXRoaXMubWl4KHQsZSk7cmV0dXJuIGRlbGV0ZSBpLmEsbj9aLlJHQihpLHIpOmZ0LlJHQihpLHIuZGVjaW1hbHMpfSxNLlJHQkE9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5taXgodCxlKTtyZXR1cm4gbj9aLlJHQihpLHIpOmZ0LlJHQkEoaSxyLmRlY2ltYWxzKX0sTVtuLkhTTF09ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5taXgodCxlKSxvPV8oaS5yLGkuZyxpLmIpO3JldHVybiBkZWxldGUgaS5hLGRlbGV0ZSBvLmEsbj9aLkhTTChvLHIpOmZ0LkhTTChpLHIuZGVjaW1hbHMpfSxNLkhTTEE9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dGhpcy5taXgodCxlKSxvPV8oaS5yLGkuZyxpLmIsaS5hKTtyZXR1cm4gbj9aLkhTTChvLHIpOmZ0LkhTTEEoaSxyLmRlY2ltYWxzKX0sTSksbXQ9ZnVuY3Rpb24oZSxuKXt2YXIgcj1LKGUucixuKSxpPUsoZS5nLG4pLG89SyhlLmIsbik7cmV0dXJuIHQoe3I6cixnOmksYjpvfSxPKGUsXCJhXCIpP3thOksoZS5hLG4pfTp7fSl9LGJ0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoe2g6SyhlLmgsbiksczpLKGUucyxuKSxsOksoZS5sLG4pfSxPKGUsXCJhXCIpP3thOksoZS5hLG4pfTp7fSl9LEF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJue2M6Syh0LmMsZSksbTpLKHQubSxlKSx5OksodC55LGUpLGs6Syh0LmssZSl9fSx5dD1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gcihsdCh0LGUpLG4pfSxFdD1mdW5jdGlvbih0LGUsbixyLGkpe248MSYmKG49NSk7dmFyIG89ZnVuY3Rpb24odCxlLG4pe3ZhciByPW4tMSxpPShlLnItdC5yKS9yLG89KGUuZy10LmcpL3IsYT0oZS5iLXQuYikvcixjPXR0KHQuYSksdT0odHQoZS5hKS1jKS9yO3JldHVybiBBcnJheShuKS5maWxsKG51bGwpLm1hcCgoZnVuY3Rpb24obixzKXtyZXR1cm4gMD09PXM/dDpzPT09cj9lOntyOksodC5yK2kqcyksZzpLKHQuZytvKnMpLGI6Syh0LmIrYSpzKSxhOksoYyt1KnMpfX0pKX0obHQodCksbHQoZSksbik7cmV0dXJuIG8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gaSh0LHIpfSkpfSxGdD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCxlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fb3B0aW9ucz1VKGUsdCksdGhpcy5yZ2I9bHQodCksdGhpcy51cGRhdGVIU0woKSx0aGlzLnVwZGF0ZUNNWUsoKX1yZXR1cm4gbi5wcm90b3R5cGUudXBkYXRlUkdCPWZ1bmN0aW9uKCl7dGhpcy5yZ2I9dCh0KHt9LHgodGhpcy5oc2wuaCx0aGlzLmhzbC5zLHRoaXMuaHNsLmwpKSx7YTp0aGlzLmhzbC5hfSl9LG4ucHJvdG90eXBlLnVwZGF0ZVJHQkZyb21DTVlLPWZ1bmN0aW9uKCl7dGhpcy5yZ2I9dCh0KHt9LFYodGhpcy5jbXlrLmMsdGhpcy5jbXlrLm0sdGhpcy5jbXlrLnksdGhpcy5jbXlrLmspKSx7YTp0aGlzLnJnYi5hfSl9LG4ucHJvdG90eXBlLnVwZGF0ZUhTTD1mdW5jdGlvbigpe3RoaXMuaHNsPV8odGhpcy5yZ2Iucix0aGlzLnJnYi5nLHRoaXMucmdiLmIsdGhpcy5yZ2IuYSl9LG4ucHJvdG90eXBlLnVwZGF0ZUNNWUs9ZnVuY3Rpb24oKXt0aGlzLmNteWs9cSh0aGlzLnJnYi5yLHRoaXMucmdiLmcsdGhpcy5yZ2IuYil9LG4ucHJvdG90eXBlLnVwZGF0ZVJHQkFuZENNWUs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51cGRhdGVSR0IoKSx0aGlzLnVwZGF0ZUNNWUsoKSx0aGlzfSxuLnByb3RvdHlwZS51cGRhdGVIU0xBbmRDTVlLPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXBkYXRlSFNMKCksdGhpcy51cGRhdGVDTVlLKCksdGhpc30sbi5wcm90b3R5cGUudXBkYXRlUkdCQW5kSFNMPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXBkYXRlUkdCRnJvbUNNWUsoKSx0aGlzLnVwZGF0ZUhTTCgpLHRoaXN9LG4ucHJvdG90eXBlLnNldE9wdGlvbnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0aGlzLl9vcHRpb25zPXQodCh7fSx0aGlzLl9vcHRpb25zKSxlKSx0aGlzfSxuLnByb3RvdHlwZS5zZXRIPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhzbC5oPVQodCksdGhpcy51cGRhdGVSR0JBbmRDTVlLKCl9LG4ucHJvdG90eXBlLnNldFM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaHNsLnM9Tih0LDAsMTAwKSx0aGlzLnVwZGF0ZVJHQkFuZENNWUsoKX0sbi5wcm90b3R5cGUuc2V0TD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oc2wubD1OKHQsMCwxMDApLHRoaXMudXBkYXRlUkdCQW5kQ01ZSygpfSxuLnByb3RvdHlwZS5zZXRSPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJnYi5yPU4odCwwLDI1NSksdGhpcy51cGRhdGVIU0xBbmRDTVlLKCl9LG4ucHJvdG90eXBlLnNldEc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmdiLmc9Tih0LDAsMjU1KSx0aGlzLnVwZGF0ZUhTTEFuZENNWUsoKX0sbi5wcm90b3R5cGUuc2V0Qj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZ2IuYj1OKHQsMCwyNTUpLHRoaXMudXBkYXRlSFNMQW5kQ01ZSygpfSxuLnByb3RvdHlwZS5zZXRBPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhzbC5hPXRoaXMucmdiLmE9Tih0LDAsMSksdGhpc30sbi5wcm90b3R5cGUuc2V0Qz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXlrLmM9Tih0LDAsMTAwKSx0aGlzLnVwZGF0ZVJHQkFuZEhTTCgpfSxuLnByb3RvdHlwZS5zZXRNPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNteWsubT1OKHQsMCwxMDApLHRoaXMudXBkYXRlUkdCQW5kSFNMKCl9LG4ucHJvdG90eXBlLnNldFk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY215ay55PU4odCwwLDEwMCksdGhpcy51cGRhdGVSR0JBbmRIU0woKX0sbi5wcm90b3R5cGUuc2V0Sz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXlrLms9Tih0LDAsMTAwKSx0aGlzLnVwZGF0ZVJHQkFuZEhTTCgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJvcHRpb25zXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcHRpb25zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkhcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5oc2wuaCx0aGlzLm9wdGlvbnMuZGVjaW1hbHMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIlNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5oc2wucyx0aGlzLm9wdGlvbnMuZGVjaW1hbHMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkxcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5oc2wubCx0aGlzLm9wdGlvbnMuZGVjaW1hbHMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIlJcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5yZ2Iucix0aGlzLm9wdGlvbnMuZGVjaW1hbHMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkdcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5yZ2IuZyx0aGlzLm9wdGlvbnMuZGVjaW1hbHMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkJcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5yZ2IuYix0aGlzLm9wdGlvbnMuZGVjaW1hbHMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5oc2wuYSx0aGlzLm9wdGlvbnMuZGVjaW1hbHMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkNcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5jbXlrLmMsdGhpcy5vcHRpb25zLmRlY2ltYWxzKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJNXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBLKHRoaXMuY215ay5tLHRoaXMub3B0aW9ucy5kZWNpbWFscyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiWVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSyh0aGlzLmNteWsueSx0aGlzLm9wdGlvbnMuZGVjaW1hbHMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIktcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcy5jbXlrLmssdGhpcy5vcHRpb25zLmRlY2ltYWxzKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJIRVhPYmplY3RcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ0LkhFWCh0aGlzLnJnYil9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiSEVYQU9iamVjdFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZnQuSEVYQSh0aGlzLnJnYil9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiUkdCT2JqZWN0XCIse2dldDpmdW5jdGlvbigpe3JldHVybntyOnRoaXMuUixnOnRoaXMuRyxiOnRoaXMuQn19LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiUkdCQU9iamVjdFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCh0KHt9LHRoaXMuUkdCT2JqZWN0KSx7YTp0aGlzLkF9KX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJIU0xPYmplY3RcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJue2g6dGhpcy5ILHM6dGhpcy5TLGw6dGhpcy5MfX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJIU0xBT2JqZWN0XCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0KHQoe30sdGhpcy5IU0xPYmplY3QpLHthOnRoaXMuQX0pfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkNNWUtPYmplY3RcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJue2M6dGhpcy5DLG06dGhpcy5NLHk6dGhpcy5ZLGs6dGhpcy5LfX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJDTVlLQU9iamVjdFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCh0KHt9LHRoaXMuQ01ZS09iamVjdCkse2E6dGhpcy5BfSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiSEVYXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBaLkhFWCh7cjp0aGlzLlIsZzp0aGlzLkcsYjp0aGlzLkJ9KX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJIRVhBXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBaLkhFWCh7cjp0aGlzLlIsZzp0aGlzLkcsYjp0aGlzLkIsYToyNTUqdGhpcy5BfSl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiUkdCXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBaLlJHQih7cjp0aGlzLlIsZzp0aGlzLkcsYjp0aGlzLkJ9LHRoaXMub3B0aW9ucyl9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiUkdCQVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWi5SR0Ioe3I6dGhpcy5SLGc6dGhpcy5HLGI6dGhpcy5CLGE6dGhpcy5BfSx0aGlzLm9wdGlvbnMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkhTTFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWi5IU0woe2g6dGhpcy5ILHM6dGhpcy5TLGw6dGhpcy5MfSx0aGlzLm9wdGlvbnMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkhTTEFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFouSFNMKHtoOnRoaXMuSCxzOnRoaXMuUyxsOnRoaXMuTCxhOnRoaXMuQX0sdGhpcy5vcHRpb25zKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJDTVlLXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBaLkNNWUsoe2M6dGhpcy5DLG06dGhpcy5NLHk6dGhpcy5ZLGs6dGhpcy5LfSx0aGlzLm9wdGlvbnMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcIkNNWUtBXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBaLkNNWUsoe2M6dGhpcy5DLG06dGhpcy5NLHk6dGhpcy5ZLGs6dGhpcy5LLGE6dGhpcy5BfSx0aGlzLm9wdGlvbnMpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG4udG9IRVhPYmplY3Q9ZnVuY3Rpb24odCl7dmFyIGU9dXQodCk7cmV0dXJuIHl0KHQsZSwwLGZ0LkhFWCl9LG4udG9IRVg9ZnVuY3Rpb24odCl7cmV0dXJuIFouSEVYKG4udG9IRVhPYmplY3QodCkpfSxuLnRvSEVYQU9iamVjdD1mdW5jdGlvbih0KXt2YXIgZT11dCh0KTtyZXR1cm4geXQodCxlLDAsZnQuSEVYQSl9LG4udG9IRVhBPWZ1bmN0aW9uKHQpe3JldHVybiBaLkhFWChuLnRvSEVYQU9iamVjdCh0KSl9LG4udG9SR0JPYmplY3Q9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dXQodCk7cmV0dXJuIHl0KHQsbixlLmRlY2ltYWxzLGZ0LlJHQil9LG4udG9SR0I9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dXQodCkscj1VKGUsdCksaT15dCh0LG4sNixmdC5SR0IpO3JldHVybiBaLlJHQihpLHIpfSxuLnRvUkdCQU9iamVjdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj11dCh0KTtyZXR1cm4geXQodCxuLGUuZGVjaW1hbHMsZnQuUkdCQSl9LG4udG9SR0JBPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXV0KHQpLHI9VShlLHQpLGk9eXQodCxuLDYsZnQuUkdCQSk7cmV0dXJuIFouUkdCKGkscil9LG4udG9IU0xPYmplY3Q9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dXQodCk7cmV0dXJuIHl0KHQsbixlLmRlY2ltYWxzLGZ0LkhTTCl9LG4udG9IU0w9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dXQodCkscj1VKGUsdCksaT15dCh0LG4sNixmdC5IU0wpO3JldHVybiBaLkhTTChpLHIpfSxuLnRvSFNMQU9iamVjdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj11dCh0KTtyZXR1cm4geXQodCxuLGUuZGVjaW1hbHMsZnQuSFNMQSl9LG4udG9IU0xBPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXV0KHQpLHI9VShlLHQpLGk9eXQodCxuLDYsZnQuSFNMQSk7cmV0dXJuIFouSFNMKGkscil9LG4udG9DTVlLT2JqZWN0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciBuPXV0KHQpO3JldHVybiB5dCh0LG4sZS5kZWNpbWFscyxmdC5DTVlLKX0sbi50b0NNWUs9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dXQodCkscj1VKGUsdCksaT15dCh0LG4sNixmdC5DTVlLKTtyZXR1cm4gWi5DTVlLKGkscil9LG4udG9DTVlLQU9iamVjdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgbj11dCh0KTtyZXR1cm4geXQodCxuLGUuZGVjaW1hbHMsZnQuQ01ZS0EpfSxuLnRvQ01ZS0E9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIG49dXQodCkscj1VKGUsdCksaT15dCh0LG4sNixmdC5DTVlLQSk7cmV0dXJuIFouQ01ZSyhpLHIpfSxuLmdldEJsZW5kSEVYT2JqZWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49NSksRXQodCxlLG4sMCxmdC5IRVgpfSxuLmdldEJsZW5kSEVYPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9NSksbi5nZXRCbGVuZEhFWE9iamVjdCh0LGUscikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gWi5IRVgodCl9KSl9LG4uZ2V0QmxlbmRIRVhBT2JqZWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49NSksRXQodCxlLG4sMCxmdC5IRVhBKX0sbi5nZXRCbGVuZEhFWEE9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj01KSxuLmdldEJsZW5kSEVYQU9iamVjdCh0LGUscikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gWi5IRVgodCl9KSl9LG4uZ2V0QmxlbmRSR0JPYmplY3Q9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTUpLHZvaWQgMD09PXImJihyPXt9KSxFdCh0LGUsbixyLmRlY2ltYWxzLGZ0LlJHQil9LG4uZ2V0QmxlbmRSR0I9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTUpLHZvaWQgMD09PXImJihyPXt9KSxFdCh0LGUsbiw2LGZ0LlJHQikubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gWi5SR0IobixVKHIsdCxlKSl9KSl9LG4uZ2V0QmxlbmRSR0JBT2JqZWN0PWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj01KSx2b2lkIDA9PT1yJiYocj17fSksRXQodCxlLG4sci5kZWNpbWFscyxmdC5SR0JBKX0sbi5nZXRCbGVuZFJHQkE9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPTUpLHZvaWQgMD09PXImJihyPXt9KSxFdCh0LGUsbiw2LGZ0LlJHQkEpLm1hcCgoZnVuY3Rpb24obil7cmV0dXJuIFouUkdCKG4sVShyLHQsZSkpfSkpfSxuLmdldEJsZW5kSFNMT2JqZWN0PWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj01KSx2b2lkIDA9PT1yJiYocj17fSksRXQodCxlLG4sci5kZWNpbWFscyxmdC5IU0wpfSxuLmdldEJsZW5kSFNMPWZ1bmN0aW9uKHQsZSxuLHIpe3ZvaWQgMD09PW4mJihuPTUpLHZvaWQgMD09PXImJihyPXt9KTt2YXIgaT1VKHIsdCxlKTtyZXR1cm4gRXQodCxlLG4sNixmdC5IU0wpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIFouSFNMKHQsaSl9KSl9LG4uZ2V0QmxlbmRIU0xBT2JqZWN0PWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj01KSx2b2lkIDA9PT1yJiYocj17fSksRXQodCxlLG4sci5kZWNpbWFscyxmdC5IU0xBKX0sbi5nZXRCbGVuZEhTTEE9ZnVuY3Rpb24odCxlLG4scil7dm9pZCAwPT09biYmKG49NSksdm9pZCAwPT09ciYmKHI9e30pO3ZhciBpPVUocix0LGUpO3JldHVybiBFdCh0LGUsbiw2LGZ0LkhTTEEpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIFouSFNMKHQsaSl9KSl9LG4uZ2V0TWl4SEVYT2JqZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWkuQURESVRJVkUpLGd0LkhFWCh0LGUsITEpfSxuLmdldE1peEhFWD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1pLkFERElUSVZFKSxndC5IRVgodCxlLCEwKX0sbi5nZXRNaXhIRVhBT2JqZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWkuQURESVRJVkUpLGd0LkhFWEEodCxlLCExKX0sbi5nZXRNaXhIRVhBPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPWkuQURESVRJVkUpLGd0LkhFWEEodCxlLCEwKX0sbi5nZXRNaXhSR0JPYmplY3Q9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj1pLkFERElUSVZFKSx2b2lkIDA9PT1yJiYocj17fSksZ3QuUkdCKHQsbiwhMSxVLmFwcGx5KHZvaWQgMCxlKFtyXSx0LCExKSkpfSxuLmdldE1peFJHQj1mdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPWkuQURESVRJVkUpLHZvaWQgMD09PXImJihyPXt9KSxndC5SR0IodCxuLCEwLFUuYXBwbHkodm9pZCAwLGUoW3JdLHQsITEpKSl9LG4uZ2V0TWl4UkdCQU9iamVjdD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPWkuQURESVRJVkUpLHZvaWQgMD09PXImJihyPXt9KSxndC5SR0JBKHQsbiwhMSxVLmFwcGx5KHZvaWQgMCxlKFtyXSx0LCExKSkpfSxuLmdldE1peFJHQkE9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj1pLkFERElUSVZFKSx2b2lkIDA9PT1yJiYocj17fSksZ3QuUkdCQSh0LG4sITAsVS5hcHBseSh2b2lkIDAsZShbcl0sdCwhMSkpKX0sbi5nZXRNaXhIU0xPYmplY3Q9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj1pLkFERElUSVZFKSx2b2lkIDA9PT1yJiYocj17fSksZ3QuSFNMKHQsbiwhMSxVLmFwcGx5KHZvaWQgMCxlKFtyXSx0LCExKSkpfSxuLmdldE1peEhTTD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPWkuQURESVRJVkUpLHZvaWQgMD09PXImJihyPXt9KSxndC5IU0wodCxuLCEwLFUuYXBwbHkodm9pZCAwLGUoW3JdLHQsITEpKSl9LG4uZ2V0TWl4SFNMQU9iamVjdD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHZvaWQgMD09PW4mJihuPWkuQURESVRJVkUpLHZvaWQgMD09PXImJihyPXt9KSxndC5IU0xBKHQsbiwhMSxVLmFwcGx5KHZvaWQgMCxlKFtyXSx0LCExKSkpfSxuLmdldE1peEhTTEE9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB2b2lkIDA9PT1uJiYobj1pLkFERElUSVZFKSx2b2lkIDA9PT1yJiYocj17fSksZ3QuSFNMQSh0LG4sITAsVS5hcHBseSh2b2lkIDAsZShbcl0sdCwhMSkpKX0sbi5nZXRTaGFkZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksaHQodCxlLCEwLFUobix0KSl9LG4uZ2V0VGludHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2b2lkIDA9PT1uJiYobj17fSksaHQodCxlLCExLFUobix0KSl9LG4uZ2V0SGFybW9ueT1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9ci5DT01QTEVNRU5UQVJZKSx2b2lkIDA9PT1uJiYobj1pLkFERElUSVZFKSx2b2lkIDA9PT1vJiYobz17fSksZnVuY3Rpb24odCxlLG4saSl7dmFyIG87cmV0dXJuKG89e30sb1tyLkFOQUxPR09VU109cHQuYnVpbGRIYXJtb255KGUsbnQsbixpKSxvW3IuQ09NUExFTUVOVEFSWV09cHQuYnVpbGRIYXJtb255KGUscnQsbixpKSxvW3IuU1BMSVRfQ09NUExFTUVOVEFSWV09cHQuYnVpbGRIYXJtb255KGUsaXQsbixpKSxvW3IuVFJJQURJQ109cHQuYnVpbGRIYXJtb255KGUsb3QsbixpKSxvW3IuVEVUUkFESUNdPXB0LmJ1aWxkSGFybW9ueShlLGF0LG4saSksb1tyLlNRVUFSRV09cHQuYnVpbGRIYXJtb255KGUsY3QsbixpKSxvKVt0XX0oZSx0LG4sVShvLHQpKX0sbn0oKTtleHBvcnR7RnQgYXMgQ29sb3JUcmFuc2xhdG9yLHIgYXMgSGFybW9ueSxpIGFzIE1peH07XG4iLCAiaW1wb3J0IHsgQXBwIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbmltcG9ydCB7IENvZGVTdHlsZXJTZXR0aW5ncywgQ29kZVN0eWxlclRoZW1lQ29sb3VycywgQ29kZVN0eWxlclRoZW1lTW9kZUNvbG91cnMsIENvZGVTdHlsZXJUaGVtZVNldHRpbmdzLCBDb2xvdXIsIExBTkdVQUdFX05BTUVTLCBMQU5HVUFHRVMgfSBmcm9tIFwiLi9TZXR0aW5nc1wiO1xuaW1wb3J0IHsgaXNDc3MgfSBmcm9tIFwiLi9TZXR0aW5nc1RhYlwiO1xuXG5pbnRlcmZhY2UgVGhlbWVTdHlsZSB7XG5cdGJvcmRlcj86IHtcblx0XHRzaXplOiBudW1iZXI7XG5cdFx0c3R5bGU6IHN0cmluZztcblx0fSxcblx0c2Nyb2xsYmFyPzogYm9vbGVhbjtcblx0ZXh0cmE/OiBzdHJpbmc7XG59XG5cbmNvbnN0IFNUWUxFX0lEID0gXCJjb2RlLXN0eWxlci1zdHlsZXNcIjtcbmNvbnN0IFRIRU1FX1NUWUxFUzogUmVjb3JkPHN0cmluZyxUaGVtZVN0eWxlPiA9IHtcblx0XCJQcmlzbVwiOiB7XG5cdFx0Ym9yZGVyOiB7XG5cdFx0XHRzaXplOiAxLFxuXHRcdFx0c3R5bGU6IFwiMXB4IHNvbGlkIHZhcigtLXdpbmRvdy1ib3JkZXItY29sb3IpXCIsXG5cdFx0fSxcblx0fSxcblx0XCJTaGltbWVyaW5nIEZvY3VzXCI6IHtcblx0XHRib3JkZXI6IHtcblx0XHRcdHNpemU6IDEsXG5cdFx0XHRzdHlsZTogXCJ2YXIoLS10aGluLW11dGVkLWJvcmRlcilcIixcblx0XHR9LFxuXHR9LFxuXHRcIk1pbmltYWxcIjoge1xuXHRcdGV4dHJhOiBgXG5cdFx0XHQubWFya2Rvd24tc291cmNlLXZpZXcubW9kLWNtNi5pcy1yZWFkYWJsZS1saW5lLXdpZHRoIDpub3QocHJlLmNvZGUtc3R5bGVyLXByZSkgPiAuY29kZS1zdHlsZXItaGVhZGVyLWNvbnRhaW5lciB7XG5cdFx0XHRcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cdFx0XHR9XG5cdFx0YCxcblx0fSxcblx0XCJPYnNpZGlhbml0ZVwiOiB7XG5cdFx0c2Nyb2xsYmFyOiB0cnVlLFxuXHR9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3R5bGluZyhzZXR0aW5nczogQ29kZVN0eWxlclNldHRpbmdzLCBhcHA6IEFwcCk6IHZvaWQge1xuXHRjb25zdCBjdXJyZW50VGhlbWUgPSBnZXRDdXJyZW50VGhlbWUoYXBwKTtcblx0bGV0IHN0eWxlVGFnID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU1RZTEVfSUQpO1xuXHRpZiAoIXN0eWxlVGFnKSB7XG5cdFx0c3R5bGVUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdFx0c3R5bGVUYWcuaWQgPSBTVFlMRV9JRDtcblx0XHRkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoc3R5bGVUYWcpO1xuXHR9XG5cdHN0eWxlVGFnLmlubmVyVGV4dCA9IChzdHlsZVRoZW1lQ29sb3VycyhzZXR0aW5ncy5jdXJyZW50VGhlbWUuY29sb3Vycykrc3R5bGVUaGVtZVNldHRpbmdzKHNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncyxjdXJyZW50VGhlbWUpK3N0eWxlTGFuZ3VhZ2VDb2xvdXJzKHNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncyxzZXR0aW5ncy5yZWRpcmVjdExhbmd1YWdlcyxjdXJyZW50VGhlbWUpKS50cmltKCkucmVwbGFjZSgvXFxzKy9nLFwiIFwiKTtcblx0YWRkVGhlbWVTZXR0aW5nc0NsYXNzZXMoc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzKTtcbn1cblxuZnVuY3Rpb24gc3R5bGVUaGVtZUNvbG91cnMgKHRoZW1lQ29sb3VyczogQ29kZVN0eWxlclRoZW1lQ29sb3Vycyk6IHN0cmluZyB7XG5cdHJldHVybiBPYmplY3Qua2V5cyh0aGVtZUNvbG91cnMubGlnaHQuaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZUhpZ2hsaWdodHMpLnJlZHVjZSgocmVzdWx0OiBzdHJpbmcsIGFsdGVybmF0aXZlSGlnaGxpZ2h0OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gcmVzdWx0ICsgYFxuXHRcdFx0Ym9keS5jb2RlLXN0eWxlciAuY29kZS1zdHlsZXItbGluZS1oaWdobGlnaHRlZC0ke2FsdGVybmF0aXZlSGlnaGxpZ2h0LnJlcGxhY2UoL1xccysvZyxcIi1cIikudG9Mb3dlckNhc2UoKX0ge1xuXHRcdFx0XHQtLWdyYWRpZW50LWJhY2tncm91bmQtY29sb3VyOiB2YXIoLS1jb2RlLXN0eWxlci0ke2FsdGVybmF0aXZlSGlnaGxpZ2h0LnJlcGxhY2UoL1xccysvZyxcIi1cIikudG9Mb3dlckNhc2UoKX0taGlnaGxpZ2h0LWNvbG91cikgIWltcG9ydGFudDtcblx0XHRcdH1cblx0XHRgO1xuXHR9LGBcblx0XHRib2R5LmNvZGUtc3R5bGVyLnRoZW1lLWxpZ2h0IHtcblx0XHRcdCR7Z2V0VGhlbWVDb2xvdXJzKHRoZW1lQ29sb3Vycy5saWdodCl9XG5cdFx0fVxuXHRcdGJvZHkuY29kZS1zdHlsZXIudGhlbWUtZGFyayB7XG5cdFx0XHQke2dldFRoZW1lQ29sb3Vycyh0aGVtZUNvbG91cnMuZGFyayl9XG5cdFx0fVxuXHRgKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGhlbWVDb2xvdXJzICh0aGVtZU1vZGVDb2xvdXJzOiBDb2RlU3R5bGVyVGhlbWVNb2RlQ29sb3Vycyk6IHN0cmluZyB7XG5cdHJldHVybiBPYmplY3QuZW50cmllcyh7XG5cdFx0XCJjb2RlYmxvY2stYmFja2dyb3VuZC1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5jb2RlYmxvY2suYmFja2dyb3VuZENvbG91cixcblx0XHRcImNvZGVibG9jay10ZXh0LWNvbG91clwiOiB0aGVtZU1vZGVDb2xvdXJzLmNvZGVibG9jay50ZXh0Q29sb3VyLFxuXHRcdFwiZ3V0dGVyLWJhY2tncm91bmQtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuZ3V0dGVyLmJhY2tncm91bmRDb2xvdXIsXG5cdFx0XCJndXR0ZXItdGV4dC1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5ndXR0ZXIudGV4dENvbG91cixcblx0XHRcImd1dHRlci1hY3RpdmUtdGV4dC1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5ndXR0ZXIuYWN0aXZlVGV4dENvbG91cixcblx0XHRcImhlYWRlci1iYWNrZ3JvdW5kLWNvbG91clwiOiB0aGVtZU1vZGVDb2xvdXJzLmhlYWRlci5iYWNrZ3JvdW5kQ29sb3VyLFxuXHRcdFwiaGVhZGVyLXRpdGxlLXRleHQtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaGVhZGVyLnRpdGxlLnRleHRDb2xvdXIsXG5cdFx0XCJoZWFkZXItbGFuZ3VhZ2UtdGFnLWJhY2tncm91bmQtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaGVhZGVyLmxhbmd1YWdlVGFnLmJhY2tncm91bmRDb2xvdXIsXG5cdFx0XCJoZWFkZXItbGFuZ3VhZ2UtdGFnLXRleHQtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRDb2xvdXIsXG5cdFx0XCJoZWFkZXItc2VwYXJhdG9yLWNvbG91clwiOiB0aGVtZU1vZGVDb2xvdXJzLmhlYWRlci5saW5lQ29sb3VyLFxuXHRcdFwiYWN0aXZlLWNvZGVibG9jay1saW5lLWNvbG91clwiOiB0aGVtZU1vZGVDb2xvdXJzLmhpZ2hsaWdodHMuYWN0aXZlQ29kZWJsb2NrTGluZUNvbG91cixcblx0XHRcImFjdGl2ZS1lZGl0b3ItbGluZS1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5oaWdobGlnaHRzLmFjdGl2ZUVkaXRvckxpbmVDb2xvdXIsXG5cdFx0XCJkZWZhdWx0LWhpZ2hsaWdodC1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5oaWdobGlnaHRzLmRlZmF1bHRDb2xvdXIsXG5cdFx0XCJidXR0b24tY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuYWR2YW5jZWQuYnV0dG9uQ29sb3VyLFxuXHRcdFwiYnV0dG9uLWFjdGl2ZS1jb2xvdXJcIjogdGhlbWVNb2RlQ29sb3Vycy5hZHZhbmNlZC5idXR0b25BY3RpdmVDb2xvdXIsXG5cdFx0XCJpbmxpbmUtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaW5saW5lLnRleHRDb2xvdXIsXG5cdFx0XCJpbmxpbmUtY29sb3VyLWFjdGl2ZVwiOiB0aGVtZU1vZGVDb2xvdXJzLmlubGluZS5hY3RpdmVUZXh0Q29sb3VyLFxuXHRcdFwiaW5saW5lLWJhY2tncm91bmQtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaW5saW5lLmJhY2tncm91bmRDb2xvdXIsXG5cdFx0XCJpbmxpbmUtdGl0bGUtY29sb3VyXCI6IHRoZW1lTW9kZUNvbG91cnMuaW5saW5lLnRpdGxlVGV4dENvbG91cixcblx0XHQuLi5PYmplY3QuZW50cmllcyh0aGVtZU1vZGVDb2xvdXJzLmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzKS5yZWR1Y2UoKHJlc3VsdDogUmVjb3JkPHN0cmluZyxDb2xvdXI+LFthbHRlcm5hdGl2ZUhpZ2hsaWdodCxjb2xvdXJdOiBbc3RyaW5nLENvbG91cl0pOiBSZWNvcmQ8c3RyaW5nLENvbG91cj4gPT4ge1xuXHRcdFx0cmVzdWx0W2Ake2FsdGVybmF0aXZlSGlnaGxpZ2h0LnJlcGxhY2UoL1xccysvZyxcIi1cIikudG9Mb3dlckNhc2UoKX0taGlnaGxpZ2h0LWNvbG91cmBdID0gY29sb3VyO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LHt9KVxuXHR9KS5yZWR1Y2UoKHJlc3VsdDogc3RyaW5nLCBbY3NzVmFyaWFibGUsY29sb3VyXTogW3N0cmluZyxDb2xvdXJdKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBzdHlsZUNvbG91ciA9IGlzQ3NzKGNvbG91cik/YHZhcigke2NvbG91cn0pYDpjb2xvdXI7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGAtLWNvZGUtc3R5bGVyLSR7Y3NzVmFyaWFibGV9OiAke3N0eWxlQ29sb3VyfTtgO1xuXHR9LFwiXCIpO1xufVxuXG5mdW5jdGlvbiBzdHlsZVRoZW1lU2V0dGluZ3MgKHRoZW1lU2V0dGluZ3M6IENvZGVTdHlsZXJUaGVtZVNldHRpbmdzLCBjdXJyZW50VGhlbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBgXG5cdFx0Ym9keS5jb2RlLXN0eWxlciAuY29kZS1zdHlsZXItaGVhZGVyLWxhbmd1YWdlLXRhZyB7XG5cdFx0XHQtLWNvZGUtc3R5bGVyLWhlYWRlci1sYW5ndWFnZS10YWctdGV4dC1ib2xkOiAke3RoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRCb2xkP1wiYm9sZFwiOlwibm9ybWFsXCJ9O1xuXHRcdFx0LS1jb2RlLXN0eWxlci1oZWFkZXItbGFuZ3VhZ2UtdGFnLXRleHQtaXRhbGljOiAke3RoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRJdGFsaWM/XCJpdGFsaWNcIjpcIm5vcm1hbFwifTtcblx0XHRcdGZvbnQtZmFtaWx5OiAke3RoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRGb250IT09XCJcIj90aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy50ZXh0Rm9udDpcInZhcigtLWZvbnQtdGV4dClcIn07XG5cdFx0fVxuXHRcdGJvZHkuY29kZS1zdHlsZXIgLmNvZGUtc3R5bGVyLWhlYWRlci10ZXh0IHtcblx0XHRcdC0tY29kZS1zdHlsZXItaGVhZGVyLXRpdGxlLXRleHQtYm9sZDogJHt0aGVtZVNldHRpbmdzLmhlYWRlci50aXRsZS50ZXh0Qm9sZD9cImJvbGRcIjpcIm5vcm1hbFwifTtcblx0XHRcdC0tY29kZS1zdHlsZXItaGVhZGVyLXRpdGxlLXRleHQtaXRhbGljOiAke3RoZW1lU2V0dGluZ3MuaGVhZGVyLnRpdGxlLnRleHRJdGFsaWM/XCJpdGFsaWNcIjpcIm5vcm1hbFwifTtcblx0XHRcdGZvbnQtZmFtaWx5OiAke3RoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLnRleHRGb250IT09XCJcIj90aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy50ZXh0Rm9udDpcInZhcigtLWZvbnQtdGV4dClcIn07XG5cdFx0fVxuXHRcdGJvZHkuY29kZS1zdHlsZXIge1xuXHRcdFx0LS1ib3JkZXItcmFkaXVzOiAke3RoZW1lU2V0dGluZ3MuY29kZWJsb2NrLmN1cnZhdHVyZX1weDtcblx0XHRcdC0tbGFuZ3VhZ2UtaWNvbi1zaXplOiAke3RoZW1lU2V0dGluZ3MuYWR2YW5jZWQuaWNvblNpemV9cHg7XG5cdFx0XHQtLWdyYWRpZW50LWhpZ2hsaWdodHMtY29sb3VyLXN0b3A6ICR7dGhlbWVTZXR0aW5ncy5hZHZhbmNlZC5ncmFkaWVudEhpZ2hsaWdodHM/dGhlbWVTZXR0aW5ncy5hZHZhbmNlZC5ncmFkaWVudEhpZ2hsaWdodHNDb2xvdXJTdG9wOlwiMTAwJVwifTtcblx0XHRcdC0taGVhZGVyLWZvbnQtc2l6ZTogJHt0aGVtZVNldHRpbmdzLmhlYWRlci5mb250U2l6ZX1weDtcblx0XHRcdC0tbGluZS13cmFwcGluZzogJHt0aGVtZVNldHRpbmdzLmNvZGVibG9jay51bndyYXBMaW5lcz9cInByZVwiOlwicHJlLXdyYXBcIn07XG5cdFx0XHQtLWNvZGUtc3R5bGVyLWlubGluZS1mb250LXdlaWdodDogJHt0aGVtZVNldHRpbmdzLmlubGluZS5mb250V2VpZ2h0fTAwO1xuXHRcdFx0LS1jb2RlLXN0eWxlci1pbmxpbmUtYm9yZGVyLXJhZGl1czogJHt0aGVtZVNldHRpbmdzLmlubGluZS5jdXJ2YXR1cmV9cHg7XG5cdFx0XHQtLWNvZGUtc3R5bGVyLWlubGluZS1wYWRkaW5nLXZlcnRpY2FsOiAke3RoZW1lU2V0dGluZ3MuaW5saW5lLnBhZGRpbmdWZXJ0aWNhbH1weDtcblx0XHRcdC0tY29kZS1zdHlsZXItaW5saW5lLXBhZGRpbmctaG9yaXpvbnRhbDogJHt0aGVtZVNldHRpbmdzLmlubGluZS5wYWRkaW5nSG9yaXpvbnRhbH1weDtcblx0XHRcdC0tY29kZS1zdHlsZXItaW5saW5lLW1hcmdpbi1ob3Jpem9udGFsOiAke3RoZW1lU2V0dGluZ3MuaW5saW5lLm1hcmdpbkhvcml6b250YWx9cHg7XG5cdFx0XHQtLWNvZGUtc3R5bGVyLWlubGluZS10aXRsZS1mb250LXdlaWdodDogJHt0aGVtZVNldHRpbmdzLmlubGluZS50aXRsZUZvbnRXZWlnaHR9MDA7XG5cdFx0XHQkeyF0aGVtZVNldHRpbmdzLmNvZGVibG9jay53cmFwTGluZXNBY3RpdmU/XCJcIjpcIi0tbGluZS1hY3RpdmUtd3JhcHBpbmc6IHByZS13cmFwO1wifVxuXHRcdFx0JHt0aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZUljb24uZGlzcGxheUNvbG91cj9cIlwiOlwiLS1pY29uLWZpbHRlcjogZ3JheXNjYWxlKDEpO1wifVxuXHRcdH1cblx0XHQke1RIRU1FX1NUWUxFUz8uW2N1cnJlbnRUaGVtZV0/LmJvcmRlcj9gXG5cdFx0XHQubWFya2Rvd24tc291cmNlLXZpZXcgOm5vdChwcmUuY29kZS1zdHlsZXItcHJlKSA+IC5jb2RlLXN0eWxlci1oZWFkZXItY29udGFpbmVyIHtcblx0XHRcdFx0LS1jb2RlLXN0eWxlci1oZWFkZXItYm9yZGVyOmArIC8vQHRzLWV4cGVjdC1lcnJvciBEb2VzIEV4aXN0XG5cdFx0XHRcdFx0VEhFTUVfU1RZTEVTW2N1cnJlbnRUaGVtZV0uYm9yZGVyLnN0eWxlK2A7XG5cdFx0XHRcdC0taGVhZGVyLXNlcGFyYXRvci13aWR0aC1wYWRkaW5nOiBjYWxjKHZhcigtLWhlYWRlci1zZXBhcmF0b3Itd2lkdGgpIC0gYCsgLy9AdHMtZXhwZWN0LWVycm9yIERvZXMgRXhpc3Rcblx0XHRcdFx0XHRUSEVNRV9TVFlMRVNbY3VycmVudFRoZW1lXS5ib3JkZXIuc2l6ZStgcHgpO1xuXHRcdFx0XHQtLWZvbGRlZC1ib3R0b20tYm9yZGVyOiB2YXIoLS1jb2RlLXN0eWxlci1oZWFkZXItYm9yZGVyKTtcblx0XHRcdH1cblx0XHRgOlwiXCJ9XG5cdFx0JHtUSEVNRV9TVFlMRVM/LltjdXJyZW50VGhlbWVdPy5zY3JvbGxiYXI/YFxuXHRcdFx0cHJlLmNvZGUtc3R5bGVyLXByZTo6LXdlYmtpdC1zY3JvbGxiYXIsXG5cdFx0XHRwcmUuY29kZS1zdHlsZXItcHJlID4gY29kZTo6LXdlYmtpdC1zY3JvbGxiYXIge1xuXHRcdFx0XHR3aWR0aDogdmFyKC0tY29kZS1wYWRkaW5nKTtcblx0XHRcdFx0aGVpZ2h0OiB2YXIoLS1jb2RlLXBhZGRpbmcpO1xuXHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2RlLXN0eWxlci1jb2RlYmxvY2stYmFja2dyb3VuZC1jb2xvdXIpO1xuXHRcdFx0fVxuXHRcdGA6XCJcIn1cblx0XHQke1RIRU1FX1NUWUxFUz8uW2N1cnJlbnRUaGVtZV0/LmV4dHJhP1RIRU1FX1NUWUxFU1tjdXJyZW50VGhlbWVdLmV4dHJhOlwiXCJ9XG5cdGA7XG59XG5cbmZ1bmN0aW9uIHN0eWxlTGFuZ3VhZ2VDb2xvdXJzICh0aGVtZVNldHRpbmdzOiBDb2RlU3R5bGVyVGhlbWVTZXR0aW5ncywgcmVkaXJlY3RMYW5ndWFnZXM6IFJlY29yZDxzdHJpbmcse2NvbG91cj86IENvbG91ciwgaWNvbj86IHN0cmluZ30+LCBjdXJyZW50VGhlbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBPYmplY3QuZW50cmllcyhMQU5HVUFHRV9OQU1FUykucmVkdWNlKChyZXN1bHQ6IHN0cmluZyxbbGFuZ3VhZ2VOYW1lLCBsYW5ndWFnZURpc3BsYXlOYW1lXTogW3N0cmluZyxzdHJpbmddKTogc3RyaW5nID0+IHtcblx0XHRpZiAoTEFOR1VBR0VTPy5bbGFuZ3VhZ2VEaXNwbGF5TmFtZV0/LmNvbG91ciB8fCAobGFuZ3VhZ2VOYW1lIGluIHJlZGlyZWN0TGFuZ3VhZ2VzICYmIFwiY29sb3VyXCIgaW4gcmVkaXJlY3RMYW5ndWFnZXNbbGFuZ3VhZ2VOYW1lXSkpIHtcblx0XHRcdHJlc3VsdCArPSBgXG5cdFx0XHRcdC5sYW5ndWFnZS0ke2xhbmd1YWdlTmFtZX0ge1xuXHRcdFx0XHRcdC0tbGFuZ3VhZ2UtYm9yZGVyLWNvbG91cjogJHtyZWRpcmVjdExhbmd1YWdlcz8uW2xhbmd1YWdlTmFtZV0/LltcImNvbG91clwiXSA/PyBMQU5HVUFHRVNbbGFuZ3VhZ2VEaXNwbGF5TmFtZV0uY29sb3VyfTtcblx0XHRcdFx0XHQtLWxhbmd1YWdlLWJvcmRlci13aWR0aDogJHt0aGVtZVNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyQ29sb3VyP3RoZW1lU2V0dGluZ3MuYWR2YW5jZWQubGFuZ3VhZ2VCb3JkZXJXaWR0aDowfXB4O1xuXHRcdFx0XHR9XG5cdFx0XHRgO1xuXHRcdFx0aWYgKFRIRU1FX1NUWUxFUz8uW2N1cnJlbnRUaGVtZV0/LmJvcmRlcikge1xuXHRcdFx0XHRyZXN1bHQgKz0gYFxuXHRcdFx0XHRcdC5tYXJrZG93bi1zb3VyY2UtdmlldyA6bm90KHByZS5jb2RlLXN0eWxlci1wcmUpID4gLmNvZGUtc3R5bGVyLWhlYWRlci1jb250YWluZXIubGFuZ3VhZ2UtJHtsYW5ndWFnZU5hbWV9ICB7XG5cdFx0XHRcdFx0XHQtLWxhbmd1YWdlLWJvcmRlci13aWR0aDogJHsgLy9AdHMtZXhwZWN0LWVycm9yIERvZXMgZXhpc3Rcblx0dGhlbWVTZXR0aW5ncy5hZHZhbmNlZC5sYW5ndWFnZUJvcmRlckNvbG91cj90aGVtZVNldHRpbmdzLmFkdmFuY2VkLmxhbmd1YWdlQm9yZGVyV2lkdGgrVEhFTUVfU1RZTEVTW2N1cnJlbnRUaGVtZV0uYm9yZGVyLnNpemU6MH1weDtcblx0XHRcdFx0XHR9YDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcIlwiKTtcbn1cblxuZnVuY3Rpb24gYWRkVGhlbWVTZXR0aW5nc0NsYXNzZXMgKHRoZW1lU2V0dGluZ3M6IENvZGVTdHlsZXJUaGVtZVNldHRpbmdzKTogdm9pZCB7XG5cdHRoZW1lU2V0dGluZ3MuaW5saW5lLnN0eWxlID8gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItc3R5bGUtaW5saW5lXCIpIDogZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiY29kZS1zdHlsZXItc3R5bGUtaW5saW5lXCIpO1xuXHR0aGVtZVNldHRpbmdzLmd1dHRlci5oaWdobGlnaHQgPyBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJjb2RlLXN0eWxlci1ndXR0ZXItaGlnaGxpZ2h0XCIpIDogZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiY29kZS1zdHlsZXItZ3V0dGVyLWhpZ2hsaWdodFwiKTtcblx0dGhlbWVTZXR0aW5ncy5ndXR0ZXIuYWN0aXZlTGluZSA/IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImNvZGUtc3R5bGVyLWd1dHRlci1hY3RpdmUtbGluZVwiKSA6IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImNvZGUtc3R5bGVyLWd1dHRlci1hY3RpdmUtbGluZVwiKTtcblx0XG5cdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImNvZGUtc3R5bGVyLWFjdGl2ZS1saW5lLWhpZ2hsaWdodFwiLFwiY29kZS1zdHlsZXItYWN0aXZlLWxpbmUtaGlnaGxpZ2h0LWNvZGVibG9ja1wiLFwiY29kZS1zdHlsZXItYWN0aXZlLWxpbmUtaGlnaGxpZ2h0LWVkaXRvclwiKTsgLy9UT0RPIChAbWF5dXJhbmt2KSBJcyB0aGlzIHNlY3Rpb24gbmVjZXNzYXJ5PyBJcyB0aGlzIGZ1bmN0aW9uIG5lY2Vzc2FyeT9cblx0aWYgKHRoZW1lU2V0dGluZ3MuaGlnaGxpZ2h0cy5hY3RpdmVFZGl0b3JMaW5lICYmIHRoZW1lU2V0dGluZ3MuaGlnaGxpZ2h0cy5hY3RpdmVDb2RlYmxvY2tMaW5lKSAvLyBJbnNpZGUgYW5kIG91dHNpZGUgb2YgY29kZWJsb2NrcyB3aXRoIGRpZmZlcmVudCBjb2xvdXJzXG5cdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItYWN0aXZlLWxpbmUtaGlnaGxpZ2h0XCIpO1xuXHRlbHNlIGlmICh0aGVtZVNldHRpbmdzLmhpZ2hsaWdodHMuYWN0aXZlRWRpdG9yTGluZSAmJiAhdGhlbWVTZXR0aW5ncy5oaWdobGlnaHRzLmFjdGl2ZUNvZGVibG9ja0xpbmUpIC8vIE9ubHkgb3V0c2lkZSBjb2RlYmxvY2tzXG5cdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItYWN0aXZlLWxpbmUtaGlnaGxpZ2h0LWVkaXRvclwiKTtcblx0ZWxzZSBpZiAoIXRoZW1lU2V0dGluZ3MuaGlnaGxpZ2h0cy5hY3RpdmVFZGl0b3JMaW5lICYmIHRoZW1lU2V0dGluZ3MuaGlnaGxpZ2h0cy5hY3RpdmVDb2RlYmxvY2tMaW5lKSAvLyBPbmx5IGluc2lkZSBjb2RlYmxvY2tzXG5cdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItYWN0aXZlLWxpbmUtaGlnaGxpZ2h0LWNvZGVibG9ja1wiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVN0eWxlc0FuZENsYXNzZXMoKTogdm9pZCB7XG5cdGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNUWUxFX0lEKT8ucmVtb3ZlKCk7XG5cdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcblx0XHRcImNvZGUtc3R5bGVyXCIsXG5cdFx0XCJjb2RlLXN0eWxlci1zaG93LWxpbmUtbnVtYmVyc1wiLFxuXHRcdFwiY29kZS1zdHlsZXItZ3V0dGVyLWhpZ2hsaWdodFwiLFxuXHRcdFwiY29kZS1zdHlsZXItZ3V0dGVyLWFjdGl2ZS1saW5lXCIsXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUaGVtZShhcHA6IEFwcCk6IHN0cmluZyB7XG5cdC8vQHRzLWV4cGVjdC1lcnJvciBVbmRvY3VtZW50ZWQgT2JzaWRpYW4gQVBJXG5cdHJldHVybiBhcHAudmF1bHQuZ2V0Q29uZmlnKFwiY3NzVGhlbWVcIik7XG59XG4iLCAiaW1wb3J0IHsgTWFya2Rvd25SZW5kZXJlciwgZWRpdG9yRWRpdG9yRmllbGQsIGVkaXRvckluZm9GaWVsZCwgZWRpdG9yTGl2ZVByZXZpZXdGaWVsZCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgRWRpdG9yVmlldywgVmlld1VwZGF0ZSwgRGVjb3JhdGlvbiwgRGVjb3JhdGlvblNldCwgV2lkZ2V0VHlwZSwgVmlld1BsdWdpbiwgUGx1Z2luVmFsdWUgfSBmcm9tIFwiQGNvZGVtaXJyb3Ivdmlld1wiO1xuaW1wb3J0IHsgRXh0ZW5zaW9uLCBFZGl0b3JTdGF0ZSwgU3RhdGVGaWVsZCwgU3RhdGVFZmZlY3QsIFN0YXRlRWZmZWN0VHlwZSwgUmFuZ2UsIFJhbmdlU2V0QnVpbGRlciwgVHJhbnNhY3Rpb24sIExpbmUsIFNlbGVjdGlvblJhbmdlLCBDb21wYXJ0bWVudCB9IGZyb20gXCJAY29kZW1pcnJvci9zdGF0ZVwiO1xuaW1wb3J0IHsgc3ludGF4VHJlZSwgdG9rZW5DbGFzc05vZGVQcm9wIH0gZnJvbSBcIkBjb2RlbWlycm9yL2xhbmd1YWdlXCI7XG5pbXBvcnQgeyBTeW50YXhOb2RlUmVmIH0gZnJvbSBcIkBsZXplci9jb21tb25cIjtcblxuaW1wb3J0IHsgQ29kZVN0eWxlclNldHRpbmdzLCBDb2RlU3R5bGVyVGhlbWVTZXR0aW5ncywgU1BFQ0lBTF9MQU5HVUFHRVMgfSBmcm9tIFwiLi9TZXR0aW5nc1wiO1xuaW1wb3J0IHsgQ29kZWJsb2NrUGFyYW1ldGVycywgcGFyc2VDb2RlYmxvY2tQYXJhbWV0ZXJzLCB0ZXN0T3BlbmluZ0xpbmUsIHRyaW1QYXJhbWV0ZXJMaW5lLCBpc0NvZGVibG9ja0lnbm9yZWQsIGlzTGFuZ3VhZ2VJZ25vcmVkIH0gZnJvbSBcIi4vUGFyc2luZy9Db2RlYmxvY2tQYXJzaW5nXCI7XG5pbXBvcnQgeyBJbmxpbmVDb2RlUGFyYW1ldGVycywgcGFyc2VJbmxpbmVDb2RlIH0gZnJvbSBcIi4vUGFyc2luZy9JbmxpbmVDb2RlUGFyc2luZ1wiO1xuaW1wb3J0IHsgY3JlYXRlSGVhZGVyLCBjcmVhdGVJbmxpbmVPcGVuZXIsIGdldExhbmd1YWdlSWNvbiwgZ2V0TGluZUNsYXNzLCBpc0hlYWRlckhpZGRlbiB9IGZyb20gXCIuL0NvZGVibG9ja0RlY29yYXRpbmdcIjtcbmltcG9ydCBDb2RlU3R5bGVyUGx1Z2luIGZyb20gXCIuL21haW5cIjtcblxuaW50ZXJmYWNlIFNldHRpbmdzU3RhdGUge1xuXHRleGNsdWRlZExhbmd1YWdlczogc3RyaW5nO1xuXHRwcm9jZXNzZWRDb2RlYmxvY2tzV2hpdGVsaXN0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb2RlYmxvY2tDb2RlTWlycm9yRXh0ZW5zaW9ucyhzZXR0aW5nczogQ29kZVN0eWxlclNldHRpbmdzLCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4pIHtcblx0Y29uc3QgbGl2ZVByZXZpZXdDb21wYXJ0bWVudCA9IG5ldyBDb21wYXJ0bWVudDtcblx0Y29uc3QgaWdub3JlQ29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQ7XG5cblx0Y29uc3QgaW50ZXJhY3Rpb24gPSBWaWV3UGx1Z2luLmZyb21DbGFzcyhcblx0XHRjbGFzcyBFeGFtcGxlUGx1Z2luIGltcGxlbWVudHMgUGx1Z2luVmFsdWUge1xuXHRcdFx0Y29uc3RydWN0b3IoKSB7fSAvLyB2aWV3OiBFZGl0b3JWaWV3XG5cdFx0XHR1cGRhdGUoKSB7fSAvLyB1cGRhdGU6IFZpZXdVcGRhdGVcblx0XHRcdGRlc3Ryb3koKSB7fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0ZXZlbnRIYW5kbGVyczoge1xuXHRcdFx0XHRjbGljazogZnVuY3Rpb24oZXZlbnQ6IE1vdXNlRXZlbnQsIHZpZXc6IEVkaXRvclZpZXcpIHtcblx0XHRcdFx0XHRpZiAoKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY29kZS1zdHlsZXItc291cmNlLWxpbmtcIikgJiYgZXZlbnQubWV0YUtleSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc291cmNlUGF0aCA9IHZpZXcuc3RhdGUuZmllbGQoZWRpdG9ySW5mb0ZpZWxkKT8uZmlsZT8ucGF0aCA/PyBcIlwiO1xuXHRcdFx0XHRcdFx0Y29uc3QgZGVzdGluYXRpb24gPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRBdHRyaWJ1dGUoXCJkZXN0aW5hdGlvblwiKTtcblx0XHRcdFx0XHRcdGlmIChkZXN0aW5hdGlvbilcblx0XHRcdFx0XHRcdFx0cGx1Z2luLmFwcC53b3Jrc3BhY2Uub3BlbkxpbmtUZXh0KGRlc3RpbmF0aW9uLCBzb3VyY2VQYXRoLCB0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdCk7XG5cblx0Y29uc3QgaWdub3JlTGlzdGVuZXIgPSBFZGl0b3JWaWV3LnVwZGF0ZUxpc3RlbmVyLm9mKCh1cGRhdGU6IFZpZXdVcGRhdGUpID0+IHsgLy9UT0RPIChAbWF5dXJhbmt2KSBDYW4gSSBtYWtlIHRoaXMgc3RhcnRTdGF0ZSBvbmx5PyBEb2VzIGl0IG5lZWQgdG8gYmU/XG5cdFx0Y29uc3QgbGl2ZVByZXZpZXdFeHRlbnNpb25zID0gbGl2ZVByZXZpZXdDb21wYXJ0bWVudC5nZXQodXBkYXRlLnN0YXRlKTtcblx0XHRjb25zdCB0b0lnbm9yZSA9IGlzU291cmNlTW9kZSh1cGRhdGUuc3RhdGUpO1xuXHRcdGNvbnN0IGZpbGVJZ25vcmUgPSBpc0ZpbGVJZ25vcmVkKHVwZGF0ZS5zdGF0ZSkgJiYgIShBcnJheS5pc0FycmF5KGxpdmVQcmV2aWV3RXh0ZW5zaW9ucykgJiYgbGl2ZVByZXZpZXdFeHRlbnNpb25zLmxlbmd0aCA9PT0gMCk7XG5cdFx0Y29uc3QgZmlsZVVuaWdub3JlID0gIXRvSWdub3JlICYmICFpc0ZpbGVJZ25vcmVkKHVwZGF0ZS5zdGF0ZSkgJiYgKEFycmF5LmlzQXJyYXkobGl2ZVByZXZpZXdFeHRlbnNpb25zKSAmJiBsaXZlUHJldmlld0V4dGVuc2lvbnMubGVuZ3RoID09PSAwKTtcblx0XHRpZiAoaXNTb3VyY2VNb2RlKHVwZGF0ZS5zdGFydFN0YXRlKSAhPT0gdG9JZ25vcmUgfHwgZmlsZUlnbm9yZSB8fCBmaWxlVW5pZ25vcmUpIHtcblx0XHRcdHVwZGF0ZS52aWV3LmRpc3BhdGNoKHtlZmZlY3RzOiBsaXZlUHJldmlld0NvbXBhcnRtZW50LnJlY29uZmlndXJlKCh0b0lnbm9yZXx8ZmlsZUlnbm9yZSk/W106W2hlYWRlckRlY29yYXRpb25zLGxpbmVEZWNvcmF0aW9ucyxmb2xkRGVjb3JhdGlvbnMsaGlkZGVuRGVjb3JhdGlvbnNdKX0pO1xuXHRcdFx0aWYgKCF0b0lnbm9yZSAmJiAhZmlsZUlnbm9yZSlcblx0XHRcdFx0dXBkYXRlLnZpZXcuZGlzcGF0Y2goe2VmZmVjdHM6IGZvbGRBbGwub2Yoe30pfSk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgaWdub3JlRmlsZUxpc3RlbmVyID0gRWRpdG9yVmlldy51cGRhdGVMaXN0ZW5lci5vZigodXBkYXRlOiBWaWV3VXBkYXRlKSA9PiB7XG5cdFx0Y29uc3QgaWdub3JlRXh0ZW5zaW9ucyA9IGlnbm9yZUNvbXBhcnRtZW50LmdldCh1cGRhdGUuc3RhdGUpO1xuXHRcdGNvbnN0IGZpbGVJZ25vcmUgPSBpc0ZpbGVJZ25vcmVkKHVwZGF0ZS5zdGF0ZSkgJiYgIShBcnJheS5pc0FycmF5KGlnbm9yZUV4dGVuc2lvbnMpICYmIGlnbm9yZUV4dGVuc2lvbnMubGVuZ3RoID09PSAwKTtcblx0XHRjb25zdCBmaWxlVW5pZ25vcmUgPSAhaXNGaWxlSWdub3JlZCh1cGRhdGUuc3RhdGUpICYmIChBcnJheS5pc0FycmF5KGlnbm9yZUV4dGVuc2lvbnMpICYmIGlnbm9yZUV4dGVuc2lvbnMubGVuZ3RoID09PSAwKTtcblx0XHRpZiAoZmlsZUlnbm9yZSB8fCBmaWxlVW5pZ25vcmUpXG5cdFx0XHR1cGRhdGUudmlldy5kaXNwYXRjaCh7ZWZmZWN0czogaWdub3JlQ29tcGFydG1lbnQucmVjb25maWd1cmUoZmlsZUlnbm9yZT9bXTppbmxpbmVEZWNvcmF0aW9ucyl9KTtcblx0fSk7XG5cblx0Y29uc3Qgc2V0dGluZ3NTdGF0ZSA9IFN0YXRlRmllbGQuZGVmaW5lPFNldHRpbmdzU3RhdGU+KHtcblx0XHRjcmVhdGUoKTogU2V0dGluZ3NTdGF0ZSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRleGNsdWRlZExhbmd1YWdlczogc2V0dGluZ3MuZXhjbHVkZWRMYW5ndWFnZXMsXG5cdFx0XHRcdHByb2Nlc3NlZENvZGVibG9ja3NXaGl0ZWxpc3Q6IHNldHRpbmdzLnByb2Nlc3NlZENvZGVibG9ja3NXaGl0ZWxpc3QsXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0dXBkYXRlKHZhbHVlOiBTZXR0aW5nc1N0YXRlKTogU2V0dGluZ3NTdGF0ZSB7XG5cdFx0XHRpZiAodmFsdWUucHJvY2Vzc2VkQ29kZWJsb2Nrc1doaXRlbGlzdCAhPT0gc2V0dGluZ3MucHJvY2Vzc2VkQ29kZWJsb2Nrc1doaXRlbGlzdCB8fCB2YWx1ZS5leGNsdWRlZExhbmd1YWdlcyAhPT0gc2V0dGluZ3MuZXhjbHVkZWRMYW5ndWFnZXMpXG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZXhjbHVkZWRMYW5ndWFnZXM6IHNldHRpbmdzLmV4Y2x1ZGVkTGFuZ3VhZ2VzLFxuXHRcdFx0XHRcdHByb2Nlc3NlZENvZGVibG9ja3NXaGl0ZWxpc3Q6IHNldHRpbmdzLnByb2Nlc3NlZENvZGVibG9ja3NXaGl0ZWxpc3QsXG5cdFx0XHRcdH07XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgY2hhcldpZHRoU3RhdGUgPSBTdGF0ZUZpZWxkLmRlZmluZTxudW1iZXI+KHsgLy9UT0RPIChAbWF5dXJhbmt2KSBJbXByb3ZlIGltcGxlbWVudGF0aW9uXG5cdFx0Y3JlYXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IG51bWJlciB7XG5cdFx0XHRyZXR1cm4oc3RhdGUuZmllbGQoZWRpdG9yRWRpdG9yRmllbGQpLmRlZmF1bHRDaGFyYWN0ZXJXaWR0aCAqIDEuMTA1KTtcblx0XHR9LFxuXHRcdHVwZGF0ZSh2YWx1ZTogbnVtYmVyLCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBudW1iZXIge1xuXHRcdFx0cmV0dXJuKHRyYW5zYWN0aW9uLnN0YXRlLmZpZWxkKGVkaXRvckVkaXRvckZpZWxkKS5kZWZhdWx0Q2hhcmFjdGVyV2lkdGggKiAxLjEwNSk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgaGVhZGVyRGVjb3JhdGlvbnMgPSBTdGF0ZUZpZWxkLmRlZmluZTxEZWNvcmF0aW9uU2V0Pih7IC8vVE9ETyAoQG1heXVyYW5rdikgVXBkYXRlIChkb2VzIHRoaXMgbmVlZCB0byBiZSB1cGRhdGVkIGluIHRoaXMgbWFubmVyPylcblx0XHRjcmVhdGUoc3RhdGU6IEVkaXRvclN0YXRlKTogRGVjb3JhdGlvblNldCB7XG5cdFx0XHRyZXR1cm4gYnVpbGRIZWFkZXJEZWNvcmF0aW9ucyhzdGF0ZSk7XG5cdFx0fSxcblx0XHR1cGRhdGUodmFsdWU6IERlY29yYXRpb25TZXQsIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IERlY29yYXRpb25TZXQge1xuXHRcdFx0cmV0dXJuIGJ1aWxkSGVhZGVyRGVjb3JhdGlvbnModHJhbnNhY3Rpb24uc3RhdGUsKHBvc2l0aW9uKT0+aXNGb2xkZWQodHJhbnNhY3Rpb24uc3RhdGUscG9zaXRpb24pKTtcblx0XHR9LFxuXHRcdHByb3ZpZGUoZmllbGQ6IFN0YXRlRmllbGQ8RGVjb3JhdGlvblNldD4pOiBFeHRlbnNpb24ge1xuXHRcdFx0cmV0dXJuIEVkaXRvclZpZXcuZGVjb3JhdGlvbnMuZnJvbShmaWVsZCk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgbGluZURlY29yYXRpb25zID0gU3RhdGVGaWVsZC5kZWZpbmU8RGVjb3JhdGlvblNldD4oeyAvL1RPRE8gKEBtYXl1cmFua3YpIERlYWwgd2l0aCBzb3VyY2UgbW9kZSAtIG1ha2UgYXBwbHkgc3R5bGluZyBpbiBzb3VyY2UgbW9kZVxuXHRcdGNyZWF0ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBEZWNvcmF0aW9uU2V0IHtcblx0XHRcdHJldHVybiBidWlsZExpbmVEZWNvcmF0aW9ucyhzdGF0ZSk7XG5cdFx0fSxcblx0XHR1cGRhdGUodmFsdWU6IERlY29yYXRpb25TZXQsIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IERlY29yYXRpb25TZXQge1xuXHRcdFx0cmV0dXJuIGJ1aWxkTGluZURlY29yYXRpb25zKHRyYW5zYWN0aW9uLnN0YXRlKTtcblx0XHR9LFxuXHRcdHByb3ZpZGUoZmllbGQ6IFN0YXRlRmllbGQ8RGVjb3JhdGlvblNldD4pOiBFeHRlbnNpb24ge1xuXHRcdFx0cmV0dXJuIEVkaXRvclZpZXcuZGVjb3JhdGlvbnMuZnJvbShmaWVsZCk7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgZm9sZERlY29yYXRpb25zID0gU3RhdGVGaWVsZC5kZWZpbmU8RGVjb3JhdGlvblNldD4oe1xuXHRcdGNyZWF0ZShzdGF0ZTogRWRpdG9yU3RhdGUpOiBEZWNvcmF0aW9uU2V0IHsgLy9UT0RPIChAbWF5dXJhbmt2KSBDYW4gSSBjaGFuZ2UgdGhpcz9cblx0XHRcdGNvbnN0IGJ1aWxkZXIgPSBuZXcgUmFuZ2VTZXRCdWlsZGVyPERlY29yYXRpb24+KCk7XG5cdFx0XHRmb3IgKGxldCBpdGVyID0gKHN0YXRlLmZpZWxkKGhlYWRlckRlY29yYXRpb25zLGZhbHNlKSA/PyBEZWNvcmF0aW9uLm5vbmUpLml0ZXIoKTsgaXRlci52YWx1ZSAhPT0gbnVsbDsgaXRlci5uZXh0KCkpIHtcblx0XHRcdFx0aWYgKCFpdGVyLnZhbHVlLnNwZWMud2lkZ2V0LmNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZC5lbmFibGVkKVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRjb2RlYmxvY2tGb2xkQ2FsbGJhY2soaXRlci5mcm9tLHN0YXRlLChmb2xkU3RhcnQsZm9sZEVuZCk9Pntcblx0XHRcdFx0XHRidWlsZGVyLmFkZChmb2xkU3RhcnQuZnJvbSxmb2xkRW5kLnRvLGZvbGREZWNvcmF0aW9uKChpdGVyLnZhbHVlIGFzIERlY29yYXRpb24pLnNwZWMud2lkZ2V0LmNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYnVpbGRlci5maW5pc2goKTtcblx0XHR9LFxuXHRcdHVwZGF0ZSh2YWx1ZTogRGVjb3JhdGlvblNldCwgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogRGVjb3JhdGlvblNldCB7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLm1hcCh0cmFuc2FjdGlvbi5jaGFuZ2VzKS51cGRhdGUoe2ZpbHRlcjogKGZyb206IG51bWJlciwgdG86IG51bWJlcik9PmZyb20hPT10b30pO1xuXHRcdFx0dmFsdWUgPSB2YWx1ZS51cGRhdGUoe2FkZDogdHJhbnNhY3Rpb24uZWZmZWN0cy5maWx0ZXIoZWZmZWN0PT4oZWZmZWN0LmlzKGZvbGQpfHxlZmZlY3QuaXModW5oaWRlRm9sZCkpKS5tYXAoZWZmZWN0PT5mb2xkUmVnaW9uKGVmZmVjdC52YWx1ZSkpfSk7IC8vVE9ETyAoQG1heXVyYW5rdikgQ2FuIEkgcmVtb3ZlIGAsIHNvcnQ6IHRydWVgXG5cdFx0XHR0cmFuc2FjdGlvbi5lZmZlY3RzLmZpbHRlcihlZmZlY3Q9PihlZmZlY3QuaXModW5mb2xkKXx8ZWZmZWN0LmlzKGhpZGVGb2xkKSkpLmZvckVhY2goZWZmZWN0PT52YWx1ZT12YWx1ZS51cGRhdGUodW5mb2xkUmVnaW9uKGVmZmVjdC52YWx1ZSkpKTtcblx0XHRcdHRyYW5zYWN0aW9uLmVmZmVjdHMuZmlsdGVyKGVmZmVjdD0+ZWZmZWN0LmlzKHJlbW92ZUZvbGQpKS5mb3JFYWNoKGVmZmVjdD0+dmFsdWU9dmFsdWUudXBkYXRlKHJlbW92ZUZvbGRMYW5ndWFnZXMoZWZmZWN0LnZhbHVlKSkpO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0sXG5cdFx0cHJvdmlkZShmaWVsZDogU3RhdGVGaWVsZDxEZWNvcmF0aW9uU2V0Pik6IEV4dGVuc2lvbiB7XG5cdFx0XHRyZXR1cm4gRWRpdG9yVmlldy5kZWNvcmF0aW9ucy5mcm9tKGZpZWxkKTtcblx0XHR9LFxuXHR9KTtcblx0Y29uc3QgaGlkZGVuRGVjb3JhdGlvbnMgPSBTdGF0ZUZpZWxkLmRlZmluZTxEZWNvcmF0aW9uU2V0Pih7XG5cdFx0Y3JlYXRlKCk6IERlY29yYXRpb25TZXQge1xuXHRcdFx0cmV0dXJuIERlY29yYXRpb24ubm9uZTtcblx0XHR9LFxuXHRcdHVwZGF0ZSh2YWx1ZTogRGVjb3JhdGlvblNldCwgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogRGVjb3JhdGlvblNldCB7XG5cdFx0XHRpZiAodHJhbnNhY3Rpb24uZWZmZWN0cy5zb21lKGVmZmVjdD0+ZWZmZWN0LmlzKGZvbGRBbGwpKSlcblx0XHRcdFx0cmV0dXJuIERlY29yYXRpb24ubm9uZTtcblx0XHRcdHZhbHVlID0gdmFsdWUubWFwKHRyYW5zYWN0aW9uLmNoYW5nZXMpLnVwZGF0ZSh7ZmlsdGVyOiAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKT0+ZnJvbSE9PXRvfSk7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnVwZGF0ZSh7YWRkOiB0cmFuc2FjdGlvbi5lZmZlY3RzLmZpbHRlcihlZmZlY3Q9PmVmZmVjdC5pcyhoaWRlRm9sZCkpLm1hcChlZmZlY3Q9PmVmZmVjdC52YWx1ZSl9KTsgLy9UT0RPIChAbWF5dXJhbmt2KSBDYW4gSSByZW1vdmUgYCwgc29ydDogdHJ1ZWBcblx0XHRcdHRyYW5zYWN0aW9uLmVmZmVjdHMuZmlsdGVyKGVmZmVjdD0+ZWZmZWN0LmlzKHVuaGlkZUZvbGQpKS5mb3JFYWNoKGVmZmVjdD0+dmFsdWU9dmFsdWUudXBkYXRlKHVuaGlkZUZvbGRVcGRhdGUoZWZmZWN0LnZhbHVlKSkpO1xuXHRcdFx0dHJhbnNhY3Rpb24uZWZmZWN0cy5maWx0ZXIoZWZmZWN0PT5lZmZlY3QuaXMocmVtb3ZlRm9sZCkpLmZvckVhY2goZWZmZWN0PT52YWx1ZT12YWx1ZS51cGRhdGUocmVtb3ZlRm9sZExhbmd1YWdlcyhlZmZlY3QudmFsdWUpKSk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHR9KTtcblx0Y29uc3QgaW5saW5lRGVjb3JhdGlvbnMgPSBTdGF0ZUZpZWxkLmRlZmluZTxEZWNvcmF0aW9uU2V0Pih7XG5cdFx0Y3JlYXRlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IERlY29yYXRpb25TZXQge1xuXHRcdFx0cmV0dXJuIGJ1aWxkSW5saW5lRGVjb3JhdGlvbnMoc3RhdGUpO1xuXHRcdH0sXG5cdFx0dXBkYXRlKHZhbHVlOiBEZWNvcmF0aW9uU2V0LCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiBEZWNvcmF0aW9uU2V0IHtcblx0XHRcdHJldHVybiBidWlsZElubGluZURlY29yYXRpb25zKHRyYW5zYWN0aW9uLnN0YXRlKTtcblx0XHR9LFxuXHRcdHByb3ZpZGUoZmllbGQ6IFN0YXRlRmllbGQ8RGVjb3JhdGlvblNldD4pOiBFeHRlbnNpb24ge1xuXHRcdFx0cmV0dXJuIEVkaXRvclZpZXcuZGVjb3JhdGlvbnMuZnJvbShmaWVsZCk7XG5cdFx0fVxuXHR9KTtcblxuXHRmdW5jdGlvbiBzZXR0aW5nc0NoYW5nZUV4dGVuZGVyKCkge1xuXHRcdHJldHVybiBFZGl0b3JTdGF0ZS50cmFuc2FjdGlvbkV4dGVuZGVyLm9mKCh0cmFuc2FjdGlvbikgPT4ge1xuXHRcdFx0bGV0IGFkZEVmZmVjdHM6IEFycmF5PFN0YXRlRWZmZWN0PHVua25vd24+PiA9IFtdO1xuXHRcdFx0Y29uc3QgaW5pdGlhbFNldHRpbmdzID0gdHJhbnNhY3Rpb24uc3RhcnRTdGF0ZS5maWVsZChzZXR0aW5nc1N0YXRlKTtcblx0XHRcdGxldCByZWFkZEZvbGRMYW5ndWFnZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcblx0XHRcdGxldCByZW1vdmVGb2xkTGFuZ3VhZ2VzOiBBcnJheTxzdHJpbmc+ID0gW107XG5cdFx0XHRpZiAoaW5pdGlhbFNldHRpbmdzLnByb2Nlc3NlZENvZGVibG9ja3NXaGl0ZWxpc3QgIT09IHNldHRpbmdzLnByb2Nlc3NlZENvZGVibG9ja3NXaGl0ZWxpc3QpIHtcblx0XHRcdFx0Ly9AdHMtZXhwZWN0LWVycm9yIFVuZG9jdW1lbnRlZCBPYnNpZGlhbiBBUElcblx0XHRcdFx0Y29uc3QgY29kZWJsb2NrUHJvY2Vzc29ycyA9IE9iamVjdC5rZXlzKE1hcmtkb3duUHJldmlld1JlbmRlcmVyLmNvZGVCbG9ja1Bvc3RQcm9jZXNzb3JzKTtcblx0XHRcdFx0Y29uc3QgaW5pdGlhbEV4Y2x1ZGVkQ29kZWJsb2NrcyA9IGNvZGVibG9ja1Byb2Nlc3NvcnMuZmlsdGVyKGxhbmc9PiFpbml0aWFsU2V0dGluZ3MucHJvY2Vzc2VkQ29kZWJsb2Nrc1doaXRlbGlzdC5zcGxpdChcIixcIikubWFwKGxhbmc9PmxhbmcudHJpbSgpKS5pbmNsdWRlcyhsYW5nKSk7XG5cdFx0XHRcdGNvbnN0IGN1cnJlbnRFeGNsdWRlZENvZGVibG9ja3MgPSBjb2RlYmxvY2tQcm9jZXNzb3JzLmZpbHRlcihsYW5nPT4hc2V0dGluZ3MucHJvY2Vzc2VkQ29kZWJsb2Nrc1doaXRlbGlzdC5zcGxpdChcIixcIikubWFwKGxhbmc9PmxhbmcudHJpbSgpKS5pbmNsdWRlcyhsYW5nKSk7XG5cdFx0XHRcdHJlbW92ZUZvbGRMYW5ndWFnZXMgPSByZW1vdmVGb2xkTGFuZ3VhZ2VzLmNvbmNhdChzZXREaWZmZXJlbmNlKGN1cnJlbnRFeGNsdWRlZENvZGVibG9ja3MsaW5pdGlhbEV4Y2x1ZGVkQ29kZWJsb2NrcykgYXMgQXJyYXk8c3RyaW5nPik7XG5cdFx0XHRcdHJlYWRkRm9sZExhbmd1YWdlcyA9IHJlYWRkRm9sZExhbmd1YWdlcy5jb25jYXQoc2V0RGlmZmVyZW5jZShpbml0aWFsRXhjbHVkZWRDb2RlYmxvY2tzLGN1cnJlbnRFeGNsdWRlZENvZGVibG9ja3MpIGFzIEFycmF5PHN0cmluZz4pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGluaXRpYWxTZXR0aW5ncy5leGNsdWRlZExhbmd1YWdlcyAhPT0gc2V0dGluZ3MuZXhjbHVkZWRMYW5ndWFnZXMpIHtcblx0XHRcdFx0Y29uc3QgaW5pdGlhbEV4Y2x1ZGVkTGFuZ3VhZ2VzID0gaW5pdGlhbFNldHRpbmdzLmV4Y2x1ZGVkTGFuZ3VhZ2VzLnNwbGl0KFwiLFwiKS5tYXAobGFuZz0+bGFuZy50cmltKCkpO1xuXHRcdFx0XHRjb25zdCBjdXJyZW50RXhjbHVkZWRMYW5ndWFnZXMgPSBzZXR0aW5ncy5leGNsdWRlZExhbmd1YWdlcy5zcGxpdChcIixcIikubWFwKGxhbmc9PmxhbmcudHJpbSgpKTtcblx0XHRcdFx0cmVtb3ZlRm9sZExhbmd1YWdlcyA9IHJlbW92ZUZvbGRMYW5ndWFnZXMuY29uY2F0KHNldERpZmZlcmVuY2UoY3VycmVudEV4Y2x1ZGVkTGFuZ3VhZ2VzLGluaXRpYWxFeGNsdWRlZExhbmd1YWdlcykgYXMgQXJyYXk8c3RyaW5nPik7XG5cdFx0XHRcdHJlYWRkRm9sZExhbmd1YWdlcyA9IHJlYWRkRm9sZExhbmd1YWdlcy5jb25jYXQoc2V0RGlmZmVyZW5jZShpbml0aWFsRXhjbHVkZWRMYW5ndWFnZXMsY3VycmVudEV4Y2x1ZGVkTGFuZ3VhZ2VzKSBhcyBBcnJheTxzdHJpbmc+KTtcblx0XHRcdH1cblx0XHRcdGlmIChyZW1vdmVGb2xkTGFuZ3VhZ2VzLmxlbmd0aCAhPT0gMClcblx0XHRcdFx0YWRkRWZmZWN0cy5wdXNoKHJlbW92ZUZvbGQub2YocmVtb3ZlRm9sZExhbmd1YWdlcykpO1xuXHRcdFx0aWYgKHJlYWRkRm9sZExhbmd1YWdlcy5sZW5ndGggIT09IDApXG5cdFx0XHRcdGFkZEVmZmVjdHMgPSBhZGRFZmZlY3RzLmNvbmNhdChjb252ZXJ0UmVhZGRGb2xkKHRyYW5zYWN0aW9uLHJlYWRkRm9sZExhbmd1YWdlcykpO1xuXHRcdFx0cmV0dXJuIChhZGRFZmZlY3RzLmxlbmd0aCAhPT0gMCk/e2VmZmVjdHM6IGFkZEVmZmVjdHN9Om51bGw7XG5cdFx0fSk7XG5cdH1cblx0ZnVuY3Rpb24gY3Vyc29yRm9sZEV4dGVuZGVyKCkge1xuXHRcdHJldHVybiBFZGl0b3JTdGF0ZS50cmFuc2FjdGlvbkV4dGVuZGVyLm9mKCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pID0+IHtcblx0XHRcdGNvbnN0IGFkZEVmZmVjdHM6IEFycmF5PFN0YXRlRWZmZWN0PHVua25vd24+PiA9IFtdO1xuXHRcdFx0Y29uc3QgZm9sZERlY29yYXRpb25zU3RhdGUgPSB0cmFuc2FjdGlvbi5zdGFydFN0YXRlLmZpZWxkKGZvbGREZWNvcmF0aW9ucyxmYWxzZSk/Lm1hcCh0cmFuc2FjdGlvbi5jaGFuZ2VzKSA/PyBEZWNvcmF0aW9uLm5vbmU7XG5cdFx0XHRjb25zdCBoaWRkZW5EZWNvcmF0aW9uc1N0YXRlID0gdHJhbnNhY3Rpb24uc3RhcnRTdGF0ZS5maWVsZChoaWRkZW5EZWNvcmF0aW9ucyxmYWxzZSk/Lm1hcCh0cmFuc2FjdGlvbi5jaGFuZ2VzKSA/PyBEZWNvcmF0aW9uLm5vbmU7XG5cdFx0XHR0cmFuc2FjdGlvbi5uZXdTZWxlY3Rpb24ucmFuZ2VzLmZvckVhY2goKHJhbmdlOiBTZWxlY3Rpb25SYW5nZSk9Pntcblx0XHRcdFx0Zm9sZERlY29yYXRpb25zU3RhdGUuYmV0d2VlbihyYW5nZS5mcm9tLCByYW5nZS50bywgKGZvbGRGcm9tLCBmb2xkVG8sIGRlY29yYXRpb25WYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdGlmIChyYW5nZUludGVyYWN0aW9uKGZvbGRGcm9tLGZvbGRUbyxyYW5nZSkpXG5cdFx0XHRcdFx0XHRhZGRFZmZlY3RzLnB1c2goaGlkZUZvbGQub2Yoe2Zyb206IGZvbGRGcm9tLCB0bzogZm9sZFRvLCB2YWx1ZTogZGVjb3JhdGlvblZhbHVlfSkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Zm9yIChsZXQgaXRlciA9IGhpZGRlbkRlY29yYXRpb25zU3RhdGUuaXRlcigpOyBpdGVyLnZhbHVlICE9PSBudWxsOyBpdGVyLm5leHQoKSkge1xuXHRcdFx0XHRcdGlmICghcmFuZ2VJbnRlcmFjdGlvbihpdGVyLmZyb20saXRlci50byxyYW5nZSkpXG5cdFx0XHRcdFx0XHRhZGRFZmZlY3RzLnB1c2godW5oaWRlRm9sZC5vZih7ZnJvbTogaXRlci5mcm9tLCB0bzogaXRlci50bywgdmFsdWU6IGl0ZXIudmFsdWV9KSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIChhZGRFZmZlY3RzLmxlbmd0aCAhPT0gMCk/e2VmZmVjdHM6IGFkZEVmZmVjdHN9Om51bGw7XG5cdFx0fSk7XG5cdH1cblx0ZnVuY3Rpb24gZG9jdW1lbnRGb2xkRXh0ZW5kZXIoKSB7XG5cdFx0cmV0dXJuIEVkaXRvclN0YXRlLnRyYW5zYWN0aW9uRXh0ZW5kZXIub2YoKHRyYW5zYWN0aW9uKSA9PiB7XG5cdFx0XHRsZXQgYWRkRWZmZWN0czogQXJyYXk8U3RhdGVFZmZlY3Q8dW5rbm93bj4+ID0gW107XG5cdFx0XHR0cmFuc2FjdGlvbi5lZmZlY3RzLmZpbHRlcihlZmZlY3Q9PmVmZmVjdC5pcyhmb2xkQWxsKSkuZm9yRWFjaChlZmZlY3Q9Pntcblx0XHRcdFx0aWYgKHR5cGVvZiBlZmZlY3QudmFsdWU/LnRvRm9sZCAhPT0gXCJ1bmRlZmluZWRcIilcblx0XHRcdFx0XHRhZGRFZmZlY3RzID0gYWRkRWZmZWN0cy5jb25jYXQoZG9jdW1lbnRGb2xkKHRyYW5zYWN0aW9uLnN0YXJ0U3RhdGUsZWZmZWN0LnZhbHVlLnRvRm9sZCkpOyAvL1RPRE8gKEBtYXl1cmFua3YpIERvZXMgdGhpcyBuZWVkIHRvIGJlIHN0YXRlXG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRhZGRFZmZlY3RzID0gYWRkRWZmZWN0cy5jb25jYXQoZG9jdW1lbnRGb2xkKHRyYW5zYWN0aW9uLnN0YXJ0U3RhdGUpKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIChhZGRFZmZlY3RzLmxlbmd0aCAhPT0gMCk/e2VmZmVjdHM6IGFkZEVmZmVjdHN9Om51bGw7XG5cdFx0fSk7XG5cdH1cblx0Ly9UT0RPIChAbWF5dXJhbmt2KSBVcmdlbnQ6IEF1dG8gYWRkIHRlbXAgdW5mb2xkIG9uIHR5cGUgb2YgZm9sZCBhbmQgcmVtb3ZlIGJvdGggZm9sZCBhbmQgdGVtcCB1bmZvbGQgZm9yIHJlbW92YWxcblxuXHRjbGFzcyBMaW5lTnVtYmVyV2lkZ2V0IGV4dGVuZHMgV2lkZ2V0VHlwZSB7XG5cdFx0bGluZU51bWJlcjogbnVtYmVyO1xuXHRcdGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnM7XG5cdFx0bWF4TGluZU51bTogbnVtYmVyO1xuXHRcdGVtcHR5OiBib29sZWFuO1xuXHRcblx0XHRjb25zdHJ1Y3RvcihsaW5lTnVtYmVyOiBudW1iZXIsIGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIG1heExpbmVOdW06IG51bWJlciwgZW1wdHk6IGJvb2xlYW4gPSBmYWxzZSkge1xuXHRcdFx0c3VwZXIoKTtcblx0XHRcdHRoaXMubGluZU51bWJlciA9IGxpbmVOdW1iZXI7XG5cdFx0XHR0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMgPSBjb2RlYmxvY2tQYXJhbWV0ZXJzO1xuXHRcdFx0dGhpcy5tYXhMaW5lTnVtID0gbWF4TGluZU51bTtcblx0XHRcdHRoaXMuZW1wdHkgPSBlbXB0eTtcblx0XHR9XG5cdFxuXHRcdGVxKG90aGVyOiBMaW5lTnVtYmVyV2lkZ2V0KTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5saW5lTnVtYmVyID09PSBvdGhlci5saW5lTnVtYmVyICYmIHRoaXMuY29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5hbHdheXNFbmFibGVkID09PSBvdGhlci5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLmFsd2F5c0VuYWJsZWQgJiYgdGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLmFsd2F5c0Rpc2FibGVkID09PSBvdGhlci5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLmFsd2F5c0Rpc2FibGVkICYmIHRoaXMuY29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5vZmZzZXQgPT09IG90aGVyLmNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMub2Zmc2V0ICYmIHRoaXMubWF4TGluZU51bSA9PT0gb3RoZXIubWF4TGluZU51bSAmJiB0aGlzLmVtcHR5ID09PSBvdGhlci5lbXB0eTtcblx0XHR9XG5cdFxuXHRcdHRvRE9NKCk6IEhUTUxFbGVtZW50IHtcblx0XHRcdHJldHVybiBjcmVhdGVTcGFuKHthdHRyOiB7c3R5bGU6IHRoaXMubWF4TGluZU51bS50b1N0cmluZygpLmxlbmd0aCA+ICh0aGlzLmxpbmVOdW1iZXIgKyB0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMub2Zmc2V0KS50b1N0cmluZygpLmxlbmd0aD9cIndpZHRoOiB2YXIoLS1saW5lLW51bWJlci1ndXR0ZXItd2lkdGgpO1wiOlwiXCJ9LCBjbHM6IFwiY29kZS1zdHlsZXItbGluZS1udW1iZXJcIiwgdGV4dDogdGhpcy5lbXB0eT9cIlwiOih0aGlzLmxpbmVOdW1iZXIgKyB0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMub2Zmc2V0KS50b1N0cmluZygpfSk7XG5cdFx0fVxuXHR9XG5cdGNsYXNzIENvbW1lbnRMaW5rV2lkZ2V0IGV4dGVuZHMgV2lkZ2V0VHlwZSB7XG5cdFx0bGlua1RleHQ6IHN0cmluZztcblx0XHRzb3VyY2VQYXRoOiBzdHJpbmc7XG5cblx0XHRjb25zdHJ1Y3RvcihsaW5rVGV4dDogc3RyaW5nLCBzb3VyY2VQYXRoOiBzdHJpbmcpIHtcblx0XHRcdHN1cGVyKCk7XG5cdFx0XHR0aGlzLmxpbmtUZXh0ID0gbGlua1RleHQ7XG5cdFx0XHR0aGlzLnNvdXJjZVBhdGggPSBzb3VyY2VQYXRoO1xuXHRcdH1cblxuXHRcdGVxKG90aGVyOiBDb21tZW50TGlua1dpZGdldCk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIHRoaXMubGlua1RleHQgPT09IG90aGVyLmxpbmtUZXh0ICYmIHRoaXMuc291cmNlUGF0aCA9PT0gb3RoZXIuc291cmNlUGF0aDtcblx0XHR9XG5cblx0XHR0b0RPTSgpOiBIVE1MRWxlbWVudCB7XG5cdFx0XHRjb25zdCBsaW5rUGFyZW50RWxlbWVudCA9IGNyZWF0ZURpdih7YXR0cjoge2NsYXNzOiBcImNvZGUtc3R5bGVyLWNvbW1lbnQtbGlua1wifX0pO1xuXHRcdFx0TWFya2Rvd25SZW5kZXJlci5yZW5kZXIocGx1Z2luLmFwcCx0aGlzLmxpbmtUZXh0LGxpbmtQYXJlbnRFbGVtZW50LHRoaXMuc291cmNlUGF0aCxwbHVnaW4pO1xuXHRcdFx0cmV0dXJuIGxpbmtQYXJlbnRFbGVtZW50O1xuXHRcdH1cblx0fVxuXHRjbGFzcyBIZWFkZXJXaWRnZXQgZXh0ZW5kcyBXaWRnZXRUeXBlIHtcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzO1xuXHRcdHRoZW1lU2V0dGluZ3M6IENvZGVTdHlsZXJUaGVtZVNldHRpbmdzO1xuXHRcdHNvdXJjZVBhdGg6IHN0cmluZztcblx0XHRwbHVnaW46IENvZGVTdHlsZXJQbHVnaW47XG5cdFx0aWNvblVSTDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdGZvbGRlZDogYm9vbGVhbjtcblx0XHRoaWRkZW46IGJvb2xlYW47XG5cdFxuXHRcdGNvbnN0cnVjdG9yKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIGZvbGRlZDogYm9vbGVhbiwgdGhlbWVTZXR0aW5nczogQ29kZVN0eWxlclRoZW1lU2V0dGluZ3MsIHNvdXJjZVBhdGg6IHN0cmluZywgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luKSB7XG5cdFx0XHRzdXBlcigpO1xuXHRcdFx0dGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzID0gc3RydWN0dXJlZENsb25lKGNvZGVibG9ja1BhcmFtZXRlcnMpO1xuXHRcdFx0dGhpcy50aGVtZVNldHRpbmdzID0gc3RydWN0dXJlZENsb25lKHRoZW1lU2V0dGluZ3MpO1xuXHRcdFx0dGhpcy5zb3VyY2VQYXRoID0gc291cmNlUGF0aDtcblx0XHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHRcdFx0dGhpcy5pY29uVVJMID0gZ2V0TGFuZ3VhZ2VJY29uKHRoaXMuY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSx0aGlzLnBsdWdpbi5sYW5ndWFnZUljb25zKTtcblx0XHRcdHRoaXMuZm9sZGVkID0gZm9sZGVkO1xuXHRcdFx0dGhpcy5oaWRkZW4gPSBpc0hlYWRlckhpZGRlbih0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMsdGhpcy50aGVtZVNldHRpbmdzLHRoaXMuaWNvblVSTCk7XG5cdFx0fVxuXHRcdFx0XG5cdFx0ZXEob3RoZXI6IEhlYWRlcldpZGdldCk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlID09PSBvdGhlci5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlICYmXG5cdFx0XHRcdHRoaXMuY29kZWJsb2NrUGFyYW1ldGVycy50aXRsZSA9PT0gb3RoZXIuY29kZWJsb2NrUGFyYW1ldGVycy50aXRsZSAmJlxuXHRcdFx0XHR0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMucmVmZXJlbmNlID09PSBvdGhlci5jb2RlYmxvY2tQYXJhbWV0ZXJzLnJlZmVyZW5jZSAmJlxuXHRcdFx0XHR0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZC5lbmFibGVkID09PSBvdGhlci5jb2RlYmxvY2tQYXJhbWV0ZXJzLmZvbGQuZW5hYmxlZCAmJlxuXHRcdFx0XHR0aGlzLmNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZC5wbGFjZWhvbGRlciA9PT0gb3RoZXIuY29kZWJsb2NrUGFyYW1ldGVycy5mb2xkLnBsYWNlaG9sZGVyICYmXG5cdFx0XHRcdHRoaXMudGhlbWVTZXR0aW5ncy5oZWFkZXIuZm9sZFBsYWNlaG9sZGVyID09PSBvdGhlci50aGVtZVNldHRpbmdzLmhlYWRlci5mb2xkUGxhY2Vob2xkZXIgJiZcblx0XHRcdFx0dGhpcy50aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZUljb24uZGlzcGxheSA9PT0gb3RoZXIudGhlbWVTZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VJY29uLmRpc3BsYXkgJiZcblx0XHRcdFx0dGhpcy50aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy5kaXNwbGF5ID09PSBvdGhlci50aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy5kaXNwbGF5ICYmXG5cdFx0XHRcdHRoaXMuZm9sZGVkID09PSBvdGhlci5mb2xkZWQgJiZcblx0XHRcdFx0dGhpcy5pY29uVVJMID09PSBvdGhlci5pY29uVVJMXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRcdFxuXHRcdHRvRE9NKHZpZXc6IEVkaXRvclZpZXcpOiBIVE1MRWxlbWVudCB7XG5cdFx0XHRjb25zdCBoZWFkZXJDb250YWluZXIgPSBjcmVhdGVIZWFkZXIodGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzLHRoaXMudGhlbWVTZXR0aW5ncyx0aGlzLnNvdXJjZVBhdGgsdGhpcy5wbHVnaW4pO1xuXHRcdFx0aWYgKHRoaXMuY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSE9PVwiXCIpXG5cdFx0XHRcdGhlYWRlckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKGBsYW5ndWFnZS0ke3RoaXMuY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZX1gKTtcblx0XHRcdGlmICh0aGlzLmZvbGRlZClcblx0XHRcdFx0aGVhZGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJjb2RlLXN0eWxlci1oZWFkZXItZm9sZGVkXCIpO1xuXHRcdFx0aGVhZGVyQ29udGFpbmVyLm9uY2xpY2sgPSAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKCEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8uY2xhc3NMaXN0Py5jb250YWlucyhcImludGVybmFsLWxpbmtcIikpXG5cdFx0XHRcdFx0Zm9sZE9uQ2xpY2sodmlldyxoZWFkZXJDb250YWluZXIsdGhpcy5mb2xkZWQsdGhpcy5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlKTtcblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gaGVhZGVyQ29udGFpbmVyO1xuXHRcdH1cblx0fVxuXHRjbGFzcyBPcGVuZXJXaWRnZXQgZXh0ZW5kcyBXaWRnZXRUeXBlIHtcblx0XHRpbmxpbmVDb2RlUGFyYW1ldGVyczogSW5saW5lQ29kZVBhcmFtZXRlcnM7XG5cdFx0cGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luO1xuXG5cdFx0Y29uc3RydWN0b3IgKGlubGluZUNvZGVQYXJhbWV0ZXJzOiBJbmxpbmVDb2RlUGFyYW1ldGVycywgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luKSB7XG5cdFx0XHRzdXBlcigpO1xuXHRcdFx0dGhpcy5pbmxpbmVDb2RlUGFyYW1ldGVycyA9IGlubGluZUNvZGVQYXJhbWV0ZXJzO1xuXHRcdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdFx0fVxuXG5cdFx0ZXEob3RoZXI6IE9wZW5lcldpZGdldCk6IGJvb2xlYW4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGhpcy5pbmxpbmVDb2RlUGFyYW1ldGVycy5sYW5ndWFnZSA9PSBvdGhlci5pbmxpbmVDb2RlUGFyYW1ldGVycy5sYW5ndWFnZSAmJlxuXHRcdFx0XHR0aGlzLmlubGluZUNvZGVQYXJhbWV0ZXJzLnRpdGxlID09IG90aGVyLmlubGluZUNvZGVQYXJhbWV0ZXJzLnRpdGxlICYmXG5cdFx0XHRcdHRoaXMuaW5saW5lQ29kZVBhcmFtZXRlcnMuaWNvbiA9PSBvdGhlci5pbmxpbmVDb2RlUGFyYW1ldGVycy5pY29uICYmXG5cdFx0XHRcdGdldExhbmd1YWdlSWNvbih0aGlzLmlubGluZUNvZGVQYXJhbWV0ZXJzLmxhbmd1YWdlLHRoaXMucGx1Z2luLmxhbmd1YWdlSWNvbnMpID09IGdldExhbmd1YWdlSWNvbihvdGhlci5pbmxpbmVDb2RlUGFyYW1ldGVycy5sYW5ndWFnZSxvdGhlci5wbHVnaW4ubGFuZ3VhZ2VJY29ucylcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dG9ET00oKTogSFRNTEVsZW1lbnQge1xuXHRcdFx0cmV0dXJuIGNyZWF0ZUlubGluZU9wZW5lcih0aGlzLmlubGluZUNvZGVQYXJhbWV0ZXJzLHRoaXMucGx1Z2luLmxhbmd1YWdlSWNvbnMsW1wiY29kZS1zdHlsZXItaW5saW5lLW9wZW5lclwiLFwiY20taW5saW5lLWNvZGVcIl0pO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGJ1aWxkSGVhZGVyRGVjb3JhdGlvbnMoc3RhdGU6IEVkaXRvclN0YXRlLCBmb2xkVmFsdWU6IChwb3NpdGlvbjogbnVtYmVyLCBkZWZhdWx0Rm9sZDogYm9vbGVhbik9PmJvb2xlYW4gPSAocG9zaXRpb24sZGVmYXVsdEZvbGQpPT5kZWZhdWx0Rm9sZCkge1xuXHRcdGNvbnN0IGJ1aWxkZXIgPSBuZXcgUmFuZ2VTZXRCdWlsZGVyPERlY29yYXRpb24+KCk7XG5cdFx0Y29uc3Qgc291cmNlUGF0aCA9IHN0YXRlLmZpZWxkKGVkaXRvckluZm9GaWVsZCk/LmZpbGU/LnBhdGggPz8gXCJcIjtcblx0XHRsZXQgY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycztcblx0XHRzeW50YXhUcmVlKHN0YXRlKS5pdGVyYXRlKHtcblx0XHRcdGVudGVyOiAoc3ludGF4Tm9kZSkgPT4ge1xuXHRcdFx0XHRpZiAoc3ludGF4Tm9kZS50eXBlLm5hbWUuaW5jbHVkZXMoXCJIeXBlck1ELWNvZGVibG9jay1iZWdpblwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0TGluZSA9IHN0YXRlLmRvYy5saW5lQXQoc3ludGF4Tm9kZS5mcm9tKTtcblx0XHRcdFx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzID0gcGFyc2VDb2RlYmxvY2tQYXJhbWV0ZXJzKHRyaW1QYXJhbWV0ZXJMaW5lKHN0YXJ0TGluZS50ZXh0LnRvU3RyaW5nKCkpLHNldHRpbmdzLmN1cnJlbnRUaGVtZSk7XG5cdFx0XHRcdFx0aWYgKCFpc0xhbmd1YWdlSWdub3JlZChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlLHNldHRpbmdzLmV4Y2x1ZGVkTGFuZ3VhZ2VzKSAmJiAhaXNDb2RlYmxvY2tJZ25vcmVkKGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2Usc2V0dGluZ3MucHJvY2Vzc2VkQ29kZWJsb2Nrc1doaXRlbGlzdCkgJiYgIWNvZGVibG9ja1BhcmFtZXRlcnMuaWdub3JlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIVNQRUNJQUxfTEFOR1VBR0VTLnNvbWUocmVnRXhwID0+IG5ldyBSZWdFeHAocmVnRXhwKS50ZXN0KGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UpKSlcblx0XHRcdFx0XHRcdFx0YnVpbGRlci5hZGQoc3RhcnRMaW5lLmZyb20sc3RhcnRMaW5lLmZyb20sRGVjb3JhdGlvbi53aWRnZXQoe3dpZGdldDogbmV3IEhlYWRlcldpZGdldChjb2RlYmxvY2tQYXJhbWV0ZXJzLGZvbGRWYWx1ZShzdGFydExpbmUuZnJvbSxjb2RlYmxvY2tQYXJhbWV0ZXJzLmZvbGQuZW5hYmxlZCksc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLHNvdXJjZVBhdGgscGx1Z2luKSwgYmxvY2s6IHRydWUsIHNpZGU6IC0xfSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBidWlsZGVyLmZpbmlzaCgpO1xuXHR9XG5cdGZ1bmN0aW9uIGJ1aWxkTGluZURlY29yYXRpb25zKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IERlY29yYXRpb25TZXQge1xuXHRcdGNvbnN0IGJ1aWxkZXIgPSBuZXcgUmFuZ2VTZXRCdWlsZGVyPERlY29yYXRpb24+KCk7XG5cdFx0Y29uc3Qgc291cmNlUGF0aCA9IHN0YXRlLmZpZWxkKGVkaXRvckluZm9GaWVsZCk/LmZpbGU/LnBhdGggPz8gXCJcIjtcblx0XHRjb25zdCBzb3VyY2VNb2RlID0gaXNTb3VyY2VNb2RlKHN0YXRlKTtcblx0XHRmb3IgKGxldCBpdGVyID0gKHN0YXRlLmZpZWxkKGhlYWRlckRlY29yYXRpb25zLGZhbHNlKSA/PyBEZWNvcmF0aW9uLm5vbmUpLml0ZXIoKTsgaXRlci52YWx1ZSAhPT0gbnVsbDsgaXRlci5uZXh0KCkpIHtcblx0XHRcdGNvbnN0IGZvbGRTdGFydCA9IHN0YXRlLmRvYy5saW5lQXQoaXRlci5mcm9tKTtcblx0XHRcdGNvbnN0IHN0YXJ0RGVsaW1pdGVyID0gdGVzdE9wZW5pbmdMaW5lKGZvbGRTdGFydC50ZXh0LnRvU3RyaW5nKCkpO1xuXHRcdFx0Y29uc3QgY29kZWJsb2NrUGFyYW1ldGVycyA9IGl0ZXIudmFsdWUuc3BlYy53aWRnZXQuY29kZWJsb2NrUGFyYW1ldGVycztcblx0XHRcdGNvbnN0IHNob3dMaW5lTnVtYmVycyA9IChzZXR0aW5ncy5jdXJyZW50VGhlbWUuc2V0dGluZ3MuY29kZWJsb2NrLmxpbmVOdW1iZXJzICYmICFjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLmFsd2F5c0Rpc2FibGVkKSB8fCBjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLmFsd2F5c0VuYWJsZWQ7XG5cdFx0XHRsZXQgZm9sZEVuZDogTGluZSB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IG1heExpbmVOdW06IG51bWJlciA9IDA7XG5cdFx0XHRjb2RlYmxvY2tGb2xkQ2FsbGJhY2soaXRlci5mcm9tLHN0YXRlLChmb2xkU3RhcnQsZm9sZEVuZCk9Pntcblx0XHRcdFx0bWF4TGluZU51bSA9IGZvbGRFbmQudG8tZm9sZFN0YXJ0LmZyb20tMStjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLm9mZnNldDtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgbGluZU51bWJlck1hcmdpbiA9IChtYXhMaW5lTnVtLnRvU3RyaW5nKCkubGVuZ3RoID4gMik/bWF4TGluZU51bS50b1N0cmluZygpLmxlbmd0aCAqIHN0YXRlLmZpZWxkKGNoYXJXaWR0aFN0YXRlKTp1bmRlZmluZWQ7XG5cdFx0XHRidWlsZGVyLmFkZChmb2xkU3RhcnQuZnJvbSxmb2xkU3RhcnQuZnJvbSxEZWNvcmF0aW9uLmxpbmUoe2F0dHJpYnV0ZXM6IHtzdHlsZTogYC0tbGluZS1udW1iZXItZ3V0dGVyLXdpZHRoOiAke2xpbmVOdW1iZXJNYXJnaW4/bGluZU51bWJlck1hcmdpbitcInB4XCI6XCJjYWxjKHZhcigtLWxpbmUtbnVtYmVyLWd1dHRlci1taW4td2lkdGgpIC0gMTJweClcIn07YCwgY2xhc3M6IFwiY29kZS1zdHlsZXItbGluZVwiKyhbXCJeJFwiXS5jb25jYXQoU1BFQ0lBTF9MQU5HVUFHRVMpLnNvbWUocmVnRXhwID0+IG5ldyBSZWdFeHAocmVnRXhwKS50ZXN0KGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UpKT9cIlwiOmAgbGFuZ3VhZ2UtJHtjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlfWApfX0pKTtcblx0XHRcdGlmIChzaG93TGluZU51bWJlcnMpXG5cdFx0XHRcdGJ1aWxkZXIuYWRkKGZvbGRTdGFydC5mcm9tLGZvbGRTdGFydC5mcm9tLERlY29yYXRpb24ud2lkZ2V0KHt3aWRnZXQ6IG5ldyBMaW5lTnVtYmVyV2lkZ2V0KDAsY29kZWJsb2NrUGFyYW1ldGVycyxtYXhMaW5lTnVtLHRydWUpfSkpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IGZvbGRTdGFydC5udW1iZXIrMTsgaSA8PSBzdGF0ZS5kb2MubGluZXM7IGkrKykge1xuXHRcdFx0XHRjb25zdCBsaW5lID0gc3RhdGUuZG9jPy5saW5lKGkpO1xuXHRcdFx0XHRpZiAoIWxpbmUpXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNvbnN0IGxpbmVUZXh0ID0gbGluZS50ZXh0LnRvU3RyaW5nKCk7XG5cdFx0XHRcdGlmICh0ZXN0T3BlbmluZ0xpbmUobGluZVRleHQpID09PSBzdGFydERlbGltaXRlcikge1xuXHRcdFx0XHRcdGZvbGRFbmQgPSBsaW5lO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJ1aWxkZXIuYWRkKGxpbmUuZnJvbSxsaW5lLmZyb20sRGVjb3JhdGlvbi5saW5lKHthdHRyaWJ1dGVzOiB7c3R5bGU6IGAtLWxpbmUtbnVtYmVyLWd1dHRlci13aWR0aDogJHtsaW5lTnVtYmVyTWFyZ2luP2xpbmVOdW1iZXJNYXJnaW4rXCJweFwiOlwiY2FsYyh2YXIoLS1saW5lLW51bWJlci1ndXR0ZXItbWluLXdpZHRoKSAtIDEycHgpXCJ9O2AsIGNsYXNzOiAoKFNQRUNJQUxfTEFOR1VBR0VTLnNvbWUocmVnRXhwID0+IG5ldyBSZWdFeHAocmVnRXhwKS50ZXN0KChpdGVyLnZhbHVlIGFzIERlY29yYXRpb24pLnNwZWMud2lkZ2V0LmNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UpKSk/XCJjb2RlLXN0eWxlci1saW5lXCI6Z2V0TGluZUNsYXNzKGNvZGVibG9ja1BhcmFtZXRlcnMsaS1mb2xkU3RhcnQubnVtYmVyLGxpbmUudGV4dCkuam9pbihcIiBcIikpKyhbXCJeJFwiXS5jb25jYXQoU1BFQ0lBTF9MQU5HVUFHRVMpLnNvbWUocmVnRXhwID0+IG5ldyBSZWdFeHAocmVnRXhwKS50ZXN0KGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UpKT9cIlwiOmAgbGFuZ3VhZ2UtJHtjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlfWApfX0pKTtcblx0XHRcdFx0aWYgKHNob3dMaW5lTnVtYmVycylcblx0XHRcdFx0XHRidWlsZGVyLmFkZChsaW5lLmZyb20sbGluZS5mcm9tLERlY29yYXRpb24ud2lkZ2V0KHt3aWRnZXQ6IG5ldyBMaW5lTnVtYmVyV2lkZ2V0KGkgLSBmb2xkU3RhcnQubnVtYmVyLCBjb2RlYmxvY2tQYXJhbWV0ZXJzLCBtYXhMaW5lTnVtKX0pKTtcblx0XHRcdFx0aWYgKGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UgPT09IFwibWFya2Rvd25cIilcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0Y29udmVydENvbW1lbnRMaW5rcyhzdGF0ZSwgbGluZSwgc291cmNlUGF0aCwgYnVpbGRlciwgc291cmNlTW9kZSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZm9sZEVuZCAhPT0gbnVsbCkge1xuXHRcdFx0XHRidWlsZGVyLmFkZChmb2xkRW5kLmZyb20sZm9sZEVuZC5mcm9tLERlY29yYXRpb24ubGluZSh7YXR0cmlidXRlczoge3N0eWxlOiBgLS1saW5lLW51bWJlci1ndXR0ZXItd2lkdGg6ICR7bGluZU51bWJlck1hcmdpbj9saW5lTnVtYmVyTWFyZ2luK1wicHhcIjpcImNhbGModmFyKC0tbGluZS1udW1iZXItZ3V0dGVyLW1pbi13aWR0aCkgLSAxMnB4KVwifTtgLCBjbGFzczogXCJjb2RlLXN0eWxlci1saW5lXCIrKFtcIl4kXCJdLmNvbmNhdChTUEVDSUFMX0xBTkdVQUdFUykuc29tZShyZWdFeHAgPT4gbmV3IFJlZ0V4cChyZWdFeHApLnRlc3QoY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSkpP1wiXCI6YCBsYW5ndWFnZS0ke2NvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2V9YCl9fSkpO1xuXHRcdFx0XHRpZiAoc2hvd0xpbmVOdW1iZXJzKVxuXHRcdFx0XHRcdGJ1aWxkZXIuYWRkKGZvbGRFbmQuZnJvbSxmb2xkRW5kLmZyb20sRGVjb3JhdGlvbi53aWRnZXQoe3dpZGdldDogbmV3IExpbmVOdW1iZXJXaWRnZXQoMCxjb2RlYmxvY2tQYXJhbWV0ZXJzLG1heExpbmVOdW0sdHJ1ZSl9KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidWlsZGVyLmZpbmlzaCgpO1xuXHR9XG5cdGZ1bmN0aW9uIGNvbnZlcnRDb21tZW50TGlua3Moc3RhdGU6IEVkaXRvclN0YXRlLCBsaW5lOiBMaW5lLCBzb3VyY2VQYXRoOiBzdHJpbmcsIGJ1aWxkZXI6IFJhbmdlU2V0QnVpbGRlcjxEZWNvcmF0aW9uPiwgc291cmNlTW9kZTogYm9vbGVhbikge1xuXHRcdHN5bnRheFRyZWUoc3RhdGUpLml0ZXJhdGUoe1xuXHRcdFx0ZW50ZXI6IChzeW50YXhOb2RlKSA9PiB7XG5cdFx0XHRcdGlmIChzeW50YXhOb2RlLnR5cGUubmFtZS5pbmNsdWRlcyhcImNvbW1lbnRfaG1kLWNvZGVibG9ja1wiKSkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbW1lbnRUZXh0ID0gc3RhdGUuc2xpY2VEb2Moc3ludGF4Tm9kZS5mcm9tLHN5bnRheE5vZGUudG8pO1xuXHRcdFx0XHRcdGNvbnN0IGxpbmtNYXRjaGVzID0gWy4uLmNvbW1lbnRUZXh0Lm1hdGNoQWxsKC8oPzpcXFtcXFtbXlxcXXxcXHJcXG5dKz8oPzpcXHxbXlxcXXxcXHJcXG5dKz8pP1xcXVxcXXxcXFsuKj9cXF1cXCguK1xcKSkvZyldO1xuXHRcdFx0XHRcdGxpbmtNYXRjaGVzLmZvckVhY2goKGxpbmtNYXRjaDogUmVnRXhwTWF0Y2hBcnJheSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGxpbmtNYXRjaD8uaW5kZXggPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0Y29uc3QgZnJvbSA9IHN5bnRheE5vZGUuZnJvbSArIGxpbmtNYXRjaC5pbmRleDtcblx0XHRcdFx0XHRcdGNvbnN0IHRvID0gZnJvbSArIGxpbmtNYXRjaFswXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRpZiAoc291cmNlTW9kZSB8fCBzdGF0ZS5zZWxlY3Rpb24ucmFuZ2VzLnNvbWUoKHJhbmdlOiBTZWxlY3Rpb25SYW5nZSk9PnJhbmdlSW50ZXJhY3Rpb24oZnJvbSx0byxyYW5nZSkpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1kQnJlYWsgPSBsaW5rTWF0Y2hbMF0uaW5kZXhPZihcIl0oXCIpO1xuXHRcdFx0XHRcdFx0XHQvL1RPRE8gKEBtYXl1cmFua3YpIEFkZCBlZGl0b3Igd2lkZSB2aWV3ZXIgdG8gYWxsb3cgY2xpY2tpbmcgb24gZmlsZXMgd2l0aCBjdXJzb3IgaW5zaWRlXG5cdFx0XHRcdFx0XHRcdGlmIChtZEJyZWFrID09PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHdpa2lsaW5rU2VwYXJhdG9yID0gbGlua01hdGNoWzBdLmluZGV4T2YoXCJ8XCIpO1xuXHRcdFx0XHRcdFx0XHRcdGJ1aWxkZXIuYWRkKGZyb20rMix0by0yLERlY29yYXRpb24ubWFyayh7Y2xhc3M6IFwiY20taG1kLWludGVybmFsLWxpbmsgY29kZS1zdHlsZXItc291cmNlLWxpbmtcIiwgYXR0cmlidXRlczoge2Rlc3RpbmF0aW9uOiBsaW5rTWF0Y2hbMF0uc2xpY2UoMix3aWtpbGlua1NlcGFyYXRvciE9PS0xP3dpa2lsaW5rU2VwYXJhdG9yOi0yKX19KSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YnVpbGRlci5hZGQoZnJvbSsxLGZyb20rbWRCcmVhayxEZWNvcmF0aW9uLm1hcmsoe2NsYXNzOiBcImNtLWxpbmsgY29kZS1zdHlsZXItc291cmNlLWxpbmtcIiwgYXR0cmlidXRlczoge2Rlc3RpbmF0aW9uOiBsaW5rTWF0Y2hbMF0uc2xpY2UobWRCcmVhaysyLC0xKX19KSk7XG5cdFx0XHRcdFx0XHRcdFx0YnVpbGRlci5hZGQoZnJvbSttZEJyZWFrKzIsdG8tMSxEZWNvcmF0aW9uLm1hcmsoe2NsYXNzOiBcImNtLXN0cmluZyBjbS11cmxcIn0pKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlXG5cdFx0XHRcdFx0XHRcdGJ1aWxkZXIuYWRkKGZyb20sdG8sRGVjb3JhdGlvbi5yZXBsYWNlKHt3aWRnZXQ6IG5ldyBDb21tZW50TGlua1dpZGdldChsaW5rTWF0Y2hbMF0sIHNvdXJjZVBhdGgpfSkpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZnJvbTogbGluZS5mcm9tLFxuXHRcdFx0dG86IGxpbmUudG9cblx0XHR9KTtcblx0fVxuXHRmdW5jdGlvbiBidWlsZElubGluZURlY29yYXRpb25zKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IERlY29yYXRpb25TZXQge1xuXHRcdGlmICghc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5zeW50YXhIaWdobGlnaHQpXG5cdFx0XHRyZXR1cm4gRGVjb3JhdGlvbi5ub25lO1xuXHRcdGNvbnN0IGJ1aWxkZXIgPSBuZXcgUmFuZ2VTZXRCdWlsZGVyPERlY29yYXRpb24+KCk7XG5cdFx0Y29uc3Qgc291cmNlTW9kZSA9IGlzU291cmNlTW9kZShzdGF0ZSk7XG5cdFx0c3ludGF4VHJlZShzdGF0ZSkuaXRlcmF0ZSh7XG5cdFx0XHRlbnRlcjogKHN5bnRheE5vZGUpPT57XG5cdFx0XHRcdGNvbnN0IHJhbmdlcyA9IGdldElubGluZUNvZGVSYW5nZXMoc3RhdGUsc3ludGF4Tm9kZSk7XG5cdFx0XHRcdGlmIChyYW5nZXMgPT09IG51bGwpXG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRjb25zdCB7cGFyYW1ldGVycyx0ZXh0LHNlY3Rpb259ID0gcmFuZ2VzO1xuXHRcdFx0XHRpZiAocGFyYW1ldGVycy52YWx1ZSA9PT0gbnVsbClcblx0XHRcdFx0XHRhZGRVbnN0eWxlZElubGluZURlY29yYXRpb25zKHN0YXRlLGJ1aWxkZXIscGFyYW1ldGVycyBhcyB7ZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCB2YWx1ZTogbnVsbH0sdGV4dCxzZWN0aW9uLHNvdXJjZU1vZGUpO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0YWRkU3R5bGVkSW5saW5lRGVjb3JhdGlvbnMoc3RhdGUsYnVpbGRlcixwYXJhbWV0ZXJzIGFzIHtmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIHZhbHVlOiBJbmxpbmVDb2RlUGFyYW1ldGVyc30sdGV4dCxzZWN0aW9uLHNvdXJjZU1vZGUpO1xuXHRcdFx0fSxcblx0XHR9KTtcblx0XHRyZXR1cm4gYnVpbGRlci5maW5pc2goKTtcblx0fVxuXHRmdW5jdGlvbiBhZGRTdHlsZWRJbmxpbmVEZWNvcmF0aW9ucyhzdGF0ZTogRWRpdG9yU3RhdGUsIGJ1aWxkZXI6IFJhbmdlU2V0QnVpbGRlcjxEZWNvcmF0aW9uPiwgcGFyYW1ldGVyczoge2Zyb206IG51bWJlciwgdG86IG51bWJlciwgdmFsdWU6IElubGluZUNvZGVQYXJhbWV0ZXJzfSwgdGV4dDoge2Zyb206IG51bWJlciwgdG86IG51bWJlciwgdmFsdWU6IHN0cmluZ30sIHNlY3Rpb246IHtmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJ9LCBzb3VyY2VNb2RlOiBib29sZWFuKSB7XG5cdFx0aWYgKHNvdXJjZU1vZGUgfHwgc3RhdGUuc2VsZWN0aW9uLnJhbmdlcy5zb21lKChyYW5nZTogU2VsZWN0aW9uUmFuZ2UpPT5yYW5nZUludGVyYWN0aW9uKHNlY3Rpb24uZnJvbSxzZWN0aW9uLnRvLHJhbmdlKSkpXG5cdFx0XHRidWlsZGVyLmFkZChwYXJhbWV0ZXJzLmZyb20sIHBhcmFtZXRlcnMudG8sIERlY29yYXRpb24ubWFyayh7Y2xhc3M6IFwiY29kZS1zdHlsZXItaW5saW5lLXBhcmFtZXRlcnNcIn0pKTtcblx0XHRlbHNlIHtcblx0XHRcdGJ1aWxkZXIuYWRkKHBhcmFtZXRlcnMuZnJvbSwgcGFyYW1ldGVycy50bywgRGVjb3JhdGlvbi5yZXBsYWNlKHt9KSk7XG5cdFx0XHRpZiAocGFyYW1ldGVycy52YWx1ZT8udGl0bGUgfHwgKHBhcmFtZXRlcnMudmFsdWU/Lmljb24gJiYgZ2V0TGFuZ3VhZ2VJY29uKHBhcmFtZXRlcnMudmFsdWUubGFuZ3VhZ2UscGx1Z2luLmxhbmd1YWdlSWNvbnMpKSlcblx0XHRcdFx0YnVpbGRlci5hZGQocGFyYW1ldGVycy5mcm9tLCBwYXJhbWV0ZXJzLmZyb20sIERlY29yYXRpb24ucmVwbGFjZSh7d2lkZ2V0OiBuZXcgT3BlbmVyV2lkZ2V0KHBhcmFtZXRlcnMudmFsdWUscGx1Z2luKX0pKTtcblx0XHR9XG5cdFx0bW9kZUhpZ2hsaWdodCh7c3RhcnQ6IHBhcmFtZXRlcnMudG8sIHRleHQ6IHRleHQudmFsdWUsIGxhbmd1YWdlOiBwYXJhbWV0ZXJzLnZhbHVlLmxhbmd1YWdlfSxidWlsZGVyKTtcblx0fVxuXHRcblx0ZnVuY3Rpb24gY29udmVydFJlYWRkRm9sZCh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24sIHJlYWRkTGFuZ3VhZ2VzOiBBcnJheTxzdHJpbmc+KSB7XG5cdFx0Y29uc3QgYWRkRWZmZWN0czogQXJyYXk8U3RhdGVFZmZlY3Q8dW5rbm93bj4+ID0gW107XG5cdFx0Zm9yIChsZXQgaXRlciA9ICh0cmFuc2FjdGlvbi5zdGF0ZS5maWVsZChoZWFkZXJEZWNvcmF0aW9ucyxmYWxzZSkgPz8gRGVjb3JhdGlvbi5ub25lKS5pdGVyKCk7IGl0ZXIudmFsdWUgIT09IG51bGw7IGl0ZXIubmV4dCgpKSB7IC8vVE9ETyAoQG1heXVyYW5rdikgUmVmYWN0b3I6IFRyeSBhbmQgbWFrZSB0aGlzIHN0YXJ0U3RhdGVcblx0XHRcdGlmICghaXRlci52YWx1ZS5zcGVjLndpZGdldC5jb2RlYmxvY2tQYXJhbWV0ZXJzLmZvbGQuZW5hYmxlZCB8fCAhcmVhZGRMYW5ndWFnZXMuaW5jbHVkZXMoaXRlci52YWx1ZS5zcGVjLndpZGdldC5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlKSlcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRjb2RlYmxvY2tGb2xkQ2FsbGJhY2soaXRlci5mcm9tLHRyYW5zYWN0aW9uLnN0YXRlLChmb2xkU3RhcnQsZm9sZEVuZCk9Pntcblx0XHRcdFx0YWRkRWZmZWN0cy5wdXNoKGZvbGQub2Yoe2Zyb206IGZvbGRTdGFydC5mcm9tLHRvOiBmb2xkRW5kLnRvLHZhbHVlOiB7c3BlYzoge2xhbmd1YWdlOiAoaXRlci52YWx1ZSBhcyBEZWNvcmF0aW9uKS5zcGVjLndpZGdldC5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlfX19KSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFkZEVmZmVjdHM7XG5cdH1cblx0ZnVuY3Rpb24gaXNGb2xkZWQoc3RhdGU6IEVkaXRvclN0YXRlLCBwb3NpdGlvbjogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0bGV0IGZvbGRlZCA9IGZhbHNlO1xuXHRcdHN0YXRlLmZpZWxkKGZvbGREZWNvcmF0aW9ucyxmYWxzZSk/LmJldHdlZW4ocG9zaXRpb24scG9zaXRpb24sKCk9Pntcblx0XHRcdGZvbGRlZCA9IHRydWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGZvbGRlZDtcblx0fVxuXHRmdW5jdGlvbiBkb2N1bWVudEZvbGQoc3RhdGU6IEVkaXRvclN0YXRlLCB0b0ZvbGQ/OiBib29sZWFuKTogQXJyYXk8U3RhdGVFZmZlY3Q8dW5rbm93bj4+IHtcblx0XHRjb25zdCBhZGRFZmZlY3RzOiBBcnJheTxTdGF0ZUVmZmVjdDx1bmtub3duPj4gPSBbXTtcblx0XHRjb25zdCByZXNldCA9ICh0eXBlb2YgdG9Gb2xkID09PSBcInVuZGVmaW5lZFwiKTtcblx0XHRmb3IgKGxldCBpdGVyID0gKHN0YXRlLmZpZWxkKGhlYWRlckRlY29yYXRpb25zLGZhbHNlKSA/PyBEZWNvcmF0aW9uLm5vbmUpLml0ZXIoKTsgaXRlci52YWx1ZSAhPT0gbnVsbDsgaXRlci5uZXh0KCkpIHtcblx0XHRcdGlmIChpdGVyLnZhbHVlLnNwZWMud2lkZ2V0LmhpZGRlbilcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRjb25zdCBmb2xkZWQgPSBpdGVyLnZhbHVlLnNwZWMud2lkZ2V0LmZvbGRlZDtcblx0XHRcdGNvbnN0IGRlZmF1bHRGb2xkID0gaXRlci52YWx1ZS5zcGVjLndpZGdldC5jb2RlYmxvY2tQYXJhbWV0ZXJzLmZvbGQuZW5hYmxlZDtcblx0XHRcdGNvZGVibG9ja0ZvbGRDYWxsYmFjayhpdGVyLmZyb20sc3RhdGUsKGZvbGRTdGFydCxmb2xkRW5kKT0+e1xuXHRcdFx0XHRpZiAoKCFyZXNldCAmJiB0b0ZvbGQgJiYgIWZvbGRlZCkgfHwgKHJlc2V0ICYmICFmb2xkZWQgJiYgZGVmYXVsdEZvbGQpKVxuXHRcdFx0XHRcdGFkZEVmZmVjdHMucHVzaChmb2xkLm9mKHtmcm9tOiBmb2xkU3RhcnQuZnJvbSwgdG86IGZvbGRFbmQudG8sIHZhbHVlOiB7c3BlYzoge2xhbmd1YWdlOiAoaXRlci52YWx1ZSBhcyBEZWNvcmF0aW9uKS5zcGVjLndpZGdldC5jb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlfX19KSk7XG5cdFx0XHRcdGVsc2UgaWYgKCghcmVzZXQgJiYgIXRvRm9sZCAmJiBmb2xkZWQpIHx8IChyZXNldCAmJiBmb2xkZWQgJiYgIWRlZmF1bHRGb2xkKSlcblx0XHRcdFx0XHRhZGRFZmZlY3RzLnB1c2godW5mb2xkLm9mKHtmcm9tOiBmb2xkU3RhcnQuZnJvbSwgdG86IGZvbGRFbmQudG99KSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFkZEVmZmVjdHM7XG5cdH1cblxuXHRyZXR1cm4gW1xuXHRcdGludGVyYWN0aW9uLFxuXHRcdGlnbm9yZUxpc3RlbmVyLGlnbm9yZUZpbGVMaXN0ZW5lcixcblx0XHRjdXJzb3JGb2xkRXh0ZW5kZXIoKSxkb2N1bWVudEZvbGRFeHRlbmRlcigpLHNldHRpbmdzQ2hhbmdlRXh0ZW5kZXIoKSxcblx0XHRzZXR0aW5nc1N0YXRlLGNoYXJXaWR0aFN0YXRlLGxpdmVQcmV2aWV3Q29tcGFydG1lbnQub2YoW10pLGlnbm9yZUNvbXBhcnRtZW50Lm9mKFtdKSxcblx0XTtcbn1cblxuY29uc3QgZm9sZDogU3RhdGVFZmZlY3RUeXBlPHtmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIHZhbHVlOiB7c3BlYzoge2xhbmd1YWdlOiBzdHJpbmd9fX0+ID0gU3RhdGVFZmZlY3QuZGVmaW5lKCk7XG5jb25zdCB1bmZvbGQ6IFN0YXRlRWZmZWN0VHlwZTx7ZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyfT4gPSBTdGF0ZUVmZmVjdC5kZWZpbmUoKTtcbmNvbnN0IGhpZGVGb2xkOiBTdGF0ZUVmZmVjdFR5cGU8UmFuZ2U8RGVjb3JhdGlvbj4+ID0gU3RhdGVFZmZlY3QuZGVmaW5lKCk7XG5jb25zdCB1bmhpZGVGb2xkOiBTdGF0ZUVmZmVjdFR5cGU8UmFuZ2U8RGVjb3JhdGlvbj4+ID0gU3RhdGVFZmZlY3QuZGVmaW5lKCk7XG5jb25zdCByZW1vdmVGb2xkOiBTdGF0ZUVmZmVjdFR5cGU8QXJyYXk8c3RyaW5nPj4gPSBTdGF0ZUVmZmVjdC5kZWZpbmUoKTtcbmNvbnN0IGZvbGRBbGw6IFN0YXRlRWZmZWN0VHlwZTx7dG9Gb2xkPzogYm9vbGVhbn0+ID0gU3RhdGVFZmZlY3QuZGVmaW5lKCk7XG5cbmZ1bmN0aW9uIGNvZGVibG9ja0ZvbGRDYWxsYmFjayhzdGFydFBvc2l0aW9uOiBudW1iZXIsIHN0YXRlOiBFZGl0b3JTdGF0ZSwgZm9sZENhbGxiYWNrOiAoZm9sZFN0YXJ0OiBMaW5lLCBmb2xkRW5kOiBMaW5lKT0+dm9pZCkge1xuXHRjb25zdCBmb2xkU3RhcnQgPSBzdGF0ZS5kb2MubGluZUF0KHN0YXJ0UG9zaXRpb24pO1xuXHRjb25zdCBzdGFydERlbGltaXRlciA9IHRlc3RPcGVuaW5nTGluZShmb2xkU3RhcnQudGV4dC50b1N0cmluZygpKTtcblx0bGV0IGZvbGRFbmQ6IExpbmUgfCBudWxsID0gbnVsbDtcblx0Zm9yIChsZXQgaSA9IGZvbGRTdGFydC5udW1iZXIrMTsgaSA8PSBzdGF0ZS5kb2MubGluZXM7IGkrKykge1xuXHRcdGNvbnN0IGxpbmUgPSBzdGF0ZS5kb2MubGluZShpKTtcblx0XHRjb25zdCBsaW5lVGV4dCA9IGxpbmUudGV4dC50b1N0cmluZygpO1xuXHRcdGlmICh0ZXN0T3BlbmluZ0xpbmUobGluZVRleHQpID09PSBzdGFydERlbGltaXRlcikge1xuXHRcdFx0Zm9sZEVuZCA9IGxpbmU7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0aWYgKGZvbGRFbmQgIT09IG51bGwpXG5cdFx0Zm9sZENhbGxiYWNrKGZvbGRTdGFydCxmb2xkRW5kKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5saW5lQ29kZVJhbmdlcyhzdGF0ZTogRWRpdG9yU3RhdGUsIHN5bnRheE5vZGU6IFN5bnRheE5vZGVSZWYpOiB7cGFyYW1ldGVyczoge2Zyb206IG51bWJlciwgdG86IG51bWJlciwgdmFsdWU6IElubGluZUNvZGVQYXJhbWV0ZXJzIHwgbnVsbH0sIHRleHQ6IHtmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIHZhbHVlOiBzdHJpbmd9LCBzZWN0aW9uOiB7ZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyfX0gfCBudWxsIHtcblx0Y29uc3QgZGVsaW1pdGVyU2l6ZSA9IGdldElubGluZURlbGltaXRlclNpemUoc3ludGF4Tm9kZSk7XG5cdGlmIChkZWxpbWl0ZXJTaXplID09PSBudWxsKVxuXHRcdHJldHVybiBudWxsO1xuXHRjb25zdCBpbmxpbmVDb2RlVGV4dCA9IHN0YXRlLmRvYy5zbGljZVN0cmluZyhzeW50YXhOb2RlLmZyb20sIHN5bnRheE5vZGUudG8pO1xuXHRjb25zdCB7cGFyYW1ldGVycyx0ZXh0fSA9IHBhcnNlSW5saW5lQ29kZShpbmxpbmVDb2RlVGV4dCk7XG5cdGNvbnN0IHBhcmFtZXRlcnNMZW5ndGggPSBpbmxpbmVDb2RlVGV4dC5sYXN0SW5kZXhPZih0ZXh0KTtcblx0cmV0dXJuIHtwYXJhbWV0ZXJzOiB7ZnJvbTogc3ludGF4Tm9kZS5mcm9tLCB0bzogc3ludGF4Tm9kZS5mcm9tK3BhcmFtZXRlcnNMZW5ndGgsIHZhbHVlOiBwYXJhbWV0ZXJzfSwgdGV4dDoge2Zyb206IHN5bnRheE5vZGUuZnJvbStwYXJhbWV0ZXJzTGVuZ3RoKzEsdG86IHN5bnRheE5vZGUudG8gLHZhbHVlOiB0ZXh0fSwgc2VjdGlvbjoge2Zyb206IHN5bnRheE5vZGUuZnJvbS1kZWxpbWl0ZXJTaXplLCB0bzogc3ludGF4Tm9kZS50bytkZWxpbWl0ZXJTaXplfX07XG59XG5mdW5jdGlvbiBnZXRJbmxpbmVEZWxpbWl0ZXJTaXplKHN5bnRheE5vZGU6IFN5bnRheE5vZGVSZWYpOiBudW1iZXIgfCBudWxsIHtcblx0Y29uc3QgcHJvcGVydGllcyA9IG5ldyBTZXQoc3ludGF4Tm9kZS5ub2RlLnR5cGUucHJvcDxzdHJpbmc+KHRva2VuQ2xhc3NOb2RlUHJvcCk/LnNwbGl0KFwiIFwiKSk7XG5cdGlmICghKHByb3BlcnRpZXMuaGFzKFwiaW5saW5lLWNvZGVcIikgJiYgIXByb3BlcnRpZXMuaGFzKFwiZm9ybWF0dGluZ1wiKSkpXG5cdFx0cmV0dXJuIG51bGw7XG5cdGNvbnN0IHByZXZpb3VzU2libGluZyA9IHN5bnRheE5vZGUubm9kZS5wcmV2U2libGluZztcblx0aWYgKCFwcmV2aW91c1NpYmxpbmcpXG5cdFx0cmV0dXJuIG51bGw7XG5cdHJldHVybiBwcmV2aW91c1NpYmxpbmcudG8tcHJldmlvdXNTaWJsaW5nLmZyb207XG59XG5mdW5jdGlvbiBhZGRVbnN0eWxlZElubGluZURlY29yYXRpb25zKHN0YXRlOiBFZGl0b3JTdGF0ZSwgYnVpbGRlcjogUmFuZ2VTZXRCdWlsZGVyPERlY29yYXRpb24+LCBwYXJhbWV0ZXJzOiB7ZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCB2YWx1ZTogbnVsbH0sIHRleHQ6IHtmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIHZhbHVlOiBzdHJpbmd9LCBzZWN0aW9uOiB7ZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyfSwgc291cmNlTW9kZTogYm9vbGVhbikge1xuXHRpZiAodGV4dC52YWx1ZSkge1xuXHRcdGlmICghc3RhdGUuc2VsZWN0aW9uLnJhbmdlcy5zb21lKChyYW5nZTogU2VsZWN0aW9uUmFuZ2UpPT5yYW5nZS50byA+PSBzZWN0aW9uLmZyb20gJiYgcmFuZ2UuZnJvbSA8PSBzZWN0aW9uLnRvKSAmJiAhc291cmNlTW9kZSlcblx0XHRcdGJ1aWxkZXIuYWRkKHBhcmFtZXRlcnMuZnJvbSwgcGFyYW1ldGVycy50bywgRGVjb3JhdGlvbi5yZXBsYWNlKHt9KSk7XG5cdH1cbn1cbmZ1bmN0aW9uIG1vZGVIaWdobGlnaHQoe3N0YXJ0LHRleHQsbGFuZ3VhZ2V9OiB7c3RhcnQ6IG51bWJlciwgdGV4dDogc3RyaW5nLCBsYW5ndWFnZTogc3RyaW5nfSwgYnVpbGRlcjogUmFuZ2VTZXRCdWlsZGVyPERlY29yYXRpb24+KSB7XG5cdC8vQHRzLWV4cGVjdC1lcnJvciBVbmRvY3VtZW50ZWQgT2JzaWRpYW4gQVBJXG5cdGNvbnN0IG1vZGUgPSB3aW5kb3cuQ29kZU1pcnJvci5nZXRNb2RlKHdpbmRvdy5Db2RlTWlycm9yLmRlZmF1bHRzLHdpbmRvdy5Db2RlTWlycm9yLmZpbmRNb2RlQnlOYW1lKGxhbmd1YWdlKT8ubWltZSk7XG5cdGNvbnN0IHN0YXRlID0gd2luZG93LkNvZGVNaXJyb3Iuc3RhcnRTdGF0ZShtb2RlKTtcblx0aWYgKG1vZGU/LnRva2VuKSB7XG5cdFx0Y29uc3Qgc3RyZWFtID0gbmV3IHdpbmRvdy5Db2RlTWlycm9yLlN0cmluZ1N0cmVhbSh0ZXh0KTtcblx0XHR3aGlsZSAoIXN0cmVhbS5lb2woKSkge1xuXHRcdFx0Y29uc3Qgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSxzdGF0ZSk7XG5cdFx0XHRpZiAoc3R5bGUpXG5cdFx0XHRcdGJ1aWxkZXIuYWRkKHN0YXJ0K3N0cmVhbS5zdGFydCwgc3RhcnQrc3RyZWFtLnBvcywgRGVjb3JhdGlvbi5tYXJrKHtjbGFzczogYGNtLSR7c3R5bGV9YH0pKTtcblx0XHRcdHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlZGl0aW5nRG9jdW1lbnRGb2xkKHZpZXc6IEVkaXRvclZpZXcsIHRvRm9sZD86IGJvb2xlYW4pIHtcblx0dmlldy5kaXNwYXRjaCh7ZWZmZWN0czogZm9sZEFsbC5vZigodHlwZW9mIHRvRm9sZCAhPT0gXCJ1bmRlZmluZWRcIik/e3RvRm9sZDogdG9Gb2xkfTp7fSl9KTtcblx0dmlldy5yZXF1ZXN0TWVhc3VyZSgpO1xufVxuZnVuY3Rpb24gZm9sZE9uQ2xpY2sodmlldzogRWRpdG9yVmlldywgdGFyZ2V0OiBIVE1MRWxlbWVudCwgZm9sZGVkOiBib29sZWFuLCBsYW5ndWFnZTogc3RyaW5nKSB7XG5cdGNvZGVibG9ja0ZvbGRDYWxsYmFjayh2aWV3LnBvc0F0RE9NKHRhcmdldCksdmlldy5zdGF0ZSwoZm9sZFN0YXJ0LGZvbGRFbmQpPT57XG5cdFx0dmlldy5kaXNwYXRjaCh7ZWZmZWN0czogZm9sZExpbmVzKCFmb2xkZWQse2Zyb206IGZvbGRTdGFydC5mcm9tLCB0bzogZm9sZEVuZC50bywgdmFsdWU6IHtzcGVjOiB7bGFuZ3VhZ2U6IGxhbmd1YWdlfX19KX0pO1xuXHRcdHZpZXcucmVxdWVzdE1lYXN1cmUoKTtcblx0fSk7XG59XG5mdW5jdGlvbiBmb2xkTGluZXModG9Gb2xkOiBib29sZWFuLCBmb2xkSW5mbzoge2Zyb206IG51bWJlciwgdG86IG51bWJlcix2YWx1ZToge3NwZWM6IHtsYW5ndWFnZTogc3RyaW5nfX19KTogU3RhdGVFZmZlY3Q8dW5rbm93bj4ge1xuXHRyZXR1cm4gdG9Gb2xkP2ZvbGQub2YoZm9sZEluZm8pOnVuZm9sZC5vZih7ZnJvbTogZm9sZEluZm8uZnJvbSwgdG86IGZvbGRJbmZvLnRvfSk7XG59XG5mdW5jdGlvbiBmb2xkUmVnaW9uKHtmcm9tOiBmb2xkRnJvbSwgdG86IGZvbGRUbywgdmFsdWU6IHtzcGVjOiB7bGFuZ3VhZ2V9fX06IHtmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsdmFsdWU6IHtzcGVjOiB7bGFuZ3VhZ2U6IHN0cmluZ319fSk6IFJhbmdlPERlY29yYXRpb24+IHtcblx0cmV0dXJuIGZvbGREZWNvcmF0aW9uKGxhbmd1YWdlKS5yYW5nZShmb2xkRnJvbSxmb2xkVG8pO1xufVxuZnVuY3Rpb24gdW5mb2xkUmVnaW9uKHtmcm9tOiBmb2xkRnJvbSwgdG86IGZvbGRUb306IHtmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJ9KSB7XG5cdHJldHVybiB7ZmlsdGVyOiAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKSA9PiAodG8gPD0gZm9sZEZyb20gfHwgZnJvbSA+PSBmb2xkVG8pLCBmaWx0ZXJGcm9tOiBmb2xkRnJvbSwgZmlsdGVyVG86IGZvbGRUb307XG59XG5mdW5jdGlvbiByZW1vdmVGb2xkTGFuZ3VhZ2VzKGxhbmd1YWdlczogQXJyYXk8c3RyaW5nPikge1xuXHRyZXR1cm4ge2ZpbHRlcjogKGZyb206IG51bWJlciwgdG86IG51bWJlciwgdmFsdWU6IERlY29yYXRpb24pID0+ICFsYW5ndWFnZXMuaW5jbHVkZXModmFsdWU/LnNwZWM/Lmxhbmd1YWdlKX07XG59XG5mdW5jdGlvbiB1bmhpZGVGb2xkVXBkYXRlKHJhbmdlOiBSYW5nZTxEZWNvcmF0aW9uPikge1xuXHRyZXR1cm4ge2ZpbHRlckZyb206IHJhbmdlLmZyb20sIGZpbHRlclRvOiByYW5nZS50bywgZmlsdGVyOiAoZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKT0+IShmcm9tID09PSByYW5nZS5mcm9tICYmIHRvID09PSByYW5nZS50byl9O1xufVxuZnVuY3Rpb24gZm9sZERlY29yYXRpb24obGFuZ3VhZ2U6IHN0cmluZyk6IERlY29yYXRpb24ge1xuXHRyZXR1cm4gRGVjb3JhdGlvbi5yZXBsYWNlKHtibG9jazogdHJ1ZSwgbGFuZ3VhZ2U6IGxhbmd1YWdlfSk7XG59XG5mdW5jdGlvbiByYW5nZUludGVyYWN0aW9uKGZyb206IG51bWJlciwgdG86IG51bWJlciwgcmFuZ2U6IFNlbGVjdGlvblJhbmdlKTogYm9vbGVhbiB7XG5cdHJldHVybiAoZnJvbSA8PSByYW5nZS5oZWFkICYmIHJhbmdlLmhlYWQgPD0gdG8pIHx8IChmcm9tIDw9IHJhbmdlLmFuY2hvciAmJiByYW5nZS5hbmNob3IgPD0gdG8pO1xufVxuXG5mdW5jdGlvbiBpc0ZpbGVJZ25vcmVkKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuXHRjb25zdCBmaWxlUGF0aCA9IHN0YXRlLmZpZWxkKGVkaXRvckluZm9GaWVsZCk/LmZpbGU/LnBhdGg7XG5cdGlmICh0eXBlb2YgZmlsZVBhdGggIT09IFwidW5kZWZpbmVkXCIpXG5cdFx0cmV0dXJuIHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Q2FjaGUoZmlsZVBhdGgpPy5mcm9udG1hdHRlcj8uW1wiY29kZS1zdHlsZXItaWdub3JlXCJdPy50b1N0cmluZygpID09PSBcInRydWVcIjtcblx0cmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNTb3VyY2VNb2RlKHN0YXRlOiBFZGl0b3JTdGF0ZSk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gIXN0YXRlLmZpZWxkKGVkaXRvckxpdmVQcmV2aWV3RmllbGQpO1xufVxuZnVuY3Rpb24gc2V0RGlmZmVyZW5jZShhcnJheTE6IEFycmF5PHVua25vd24+LCBhcnJheTI6IEFycmF5PHVua25vd24+KSB7XG5cdHJldHVybiBhcnJheTEuZmlsdGVyKGVsZW1lbnQgPT4gIWFycmF5Mi5pbmNsdWRlcyhlbGVtZW50KSk7XG59XG4iLCAiaW1wb3J0IHsgTWFya2Rvd25QcmV2aWV3UmVuZGVyZXIsIFBsdWdpbiwgVEZpbGUgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuaW1wb3J0IENvZGVTdHlsZXJQbHVnaW4gZnJvbSBcIi4uL21haW5cIjtcbmltcG9ydCB7IENvZGVTdHlsZXJUaGVtZSwgRVhFQ1VURV9DT0RFX1NVUFBPUlRFRF9MQU5HVUFHRVMgfSBmcm9tIFwiLi4vU2V0dGluZ3NcIjtcbmltcG9ydCB7IENvZGVCbG9ja0FyZ3MsIGdldEFyZ3MgfSBmcm9tIFwiLi4vRXh0ZXJuYWwvRXhlY3V0ZUNvZGUvQ29kZUJsb2NrQXJnc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVibG9ja1BhcmFtZXRlcnMge1xuXHRsYW5ndWFnZTogc3RyaW5nO1xuXHR0aXRsZTogc3RyaW5nO1xuXHRyZWZlcmVuY2U6IHN0cmluZztcblx0Zm9sZDoge1xuXHRcdGVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0cGxhY2Vob2xkZXI6IHN0cmluZztcblx0fVxuXHRsaW5lTnVtYmVyczoge1xuXHRcdGFsd2F5c0VuYWJsZWQ6IGJvb2xlYW47XG5cdFx0YWx3YXlzRGlzYWJsZWQ6IGJvb2xlYW47XG5cdFx0b2Zmc2V0OiBudW1iZXI7XG5cdH0sXG5cdGxpbmVVbndyYXA6IHtcblx0XHRhbHdheXNFbmFibGVkOiBib29sZWFuO1xuXHRcdGFsd2F5c0Rpc2FibGVkOiBib29sZWFuO1xuXHRcdGFjdGl2ZVdyYXA6IGJvb2xlYW47XG5cdH0sXG5cdGhpZ2hsaWdodHM6IHtcblx0XHRkZWZhdWx0OiBIaWdobGlnaHRzO1xuXHRcdGFsdGVybmF0aXZlOiBSZWNvcmQ8c3RyaW5nLEhpZ2hsaWdodHM+XG5cdH0sXG5cdGlnbm9yZTogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSGlnaGxpZ2h0cyB7XG5cdGxpbmVOdW1iZXJzOiBBcnJheTxudW1iZXI+O1xuXHRwbGFpblRleHQ6IEFycmF5PHN0cmluZz47XG5cdHJlZ3VsYXJFeHByZXNzaW9uczogQXJyYXk8UmVnRXhwPjtcbn1cbmludGVyZmFjZSBFeHRlcm5hbFBsdWdpbiBleHRlbmRzIFBsdWdpbiB7XG5cdHN1cHBvcnRlZExhbmd1YWdlcz86IEFycmF5PHN0cmluZz47XG5cdGNvZGU/OiAoc291cmNlOiBzdHJpbmcsIHNvdXJjZVBhdGg/OiBzdHJpbmcpPT5Qcm9taXNlPHtcblx0XHRzdGFydDogbnVtYmVyO1xuXHRcdGNvZGU6IHN0cmluZztcblx0XHRsYW5ndWFnZTogc3RyaW5nO1xuXHRcdGhpZ2hsaWdodDogc3RyaW5nO1xuXHRcdGxpbmVzOiBBcnJheTxzdHJpbmc+O1xuXHRcdGZpbGVQYXRoOiBzdHJpbmc7XG5cdFx0bGluZW51bWJlcjogbnVtYmVyO1xuXHR9Pjtcblx0YW5hbHl6ZUhpZ2hMaWdodExpbmVzPzogKGxpbmVzOiBzdHJpbmdbXSwgc291cmNlOiBzdHJpbmcgfCBzdHJpbmdbXSk9Pk1hcDxudW1iZXIsYm9vbGVhbj47XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJzZUNvZGVibG9ja1NvdXJjZShjb2RlU2VjdGlvbjogQXJyYXk8c3RyaW5nPiwgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luLCBzb3VyY2VQYXRoPzogc3RyaW5nKTogUHJvbWlzZTx7Y29kZWJsb2Nrc1BhcmFtZXRlcnM6IEFycmF5PENvZGVibG9ja1BhcmFtZXRlcnM+LCBuZXN0ZWQ6IGJvb2xlYW59PiB7XG5cdC8vIEB0cy1leHBlY3QtZXJyb3IgVW5kb2N1bWVudGVkIE9ic2lkaWFuIEFQSVxuXHRjb25zdCBwbHVnaW5zOiBSZWNvcmQ8c3RyaW5nLEV4dGVybmFsUGx1Z2luPiA9IHBsdWdpbi5hcHAucGx1Z2lucy5wbHVnaW5zO1xuXHRjb25zdCBhZG1vbml0aW9uczogYm9vbGVhbiA9IChcIm9ic2lkaWFuLWFkbW9uaXRpb25cIiBpbiBwbHVnaW5zKTtcblx0Y29uc3QgY29kZWJsb2NrczogQXJyYXk8QXJyYXk8c3RyaW5nPj4gPSBbXTtcblx0ZnVuY3Rpb24gcGFyc2VDb2RlYmxvY2tTZWN0aW9uKGNvZGVTZWN0aW9uOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG5cdFx0aWYgKGNvZGVTZWN0aW9uLmxlbmd0aCA9PT0gMClcblx0XHRcdHJldHVybjtcblx0XHRcblx0XHRjb25zdCBvcGVuaW5nQ29kZWJsb2NrTGluZSA9IGdldE9wZW5pbmdMaW5lKGNvZGVTZWN0aW9uKTtcblx0XHRpZiAoIW9wZW5pbmdDb2RlYmxvY2tMaW5lKVxuXHRcdFx0cmV0dXJuO1xuXHRcdFxuXHRcdGNvbnN0IG9wZW5EZWxpbWl0ZXIgPSAvXlxccyooPzo+XFxzKikqKCg/OmBgYCt8fn5+KykpLiokLy5leGVjKG9wZW5pbmdDb2RlYmxvY2tMaW5lKT8uWzFdO1xuXHRcdGlmICghb3BlbkRlbGltaXRlcilcblx0XHRcdHJldHVybjtcblxuXHRcdGNvbnN0IG9wZW5EZWxpbWl0ZXJJbmRleCA9IGNvZGVTZWN0aW9uLmluZGV4T2Yob3BlbmluZ0NvZGVibG9ja0xpbmUpO1xuXHRcdGNvbnN0IGNsb3NlRGVsaW1pdGVySW5kZXggPSBjb2RlU2VjdGlvbi5zbGljZShvcGVuRGVsaW1pdGVySW5kZXgrMSkuZmluZEluZGV4KChsaW5lKT0+bmV3IFJlZ0V4cChgXlxcXFxzKig/Oj5cXFxccyopKiR7b3BlbkRlbGltaXRlcn0oPyEke29wZW5EZWxpbWl0ZXJbMF19KSRgKS50ZXN0KGxpbmUpKTtcblx0XHRpZiAoIWFkbW9uaXRpb25zIHx8ICEvXlxccyooPzo+XFxzKikqKD86YGBgK3x+fn4rKSAqYWQtLiokLy50ZXN0KG9wZW5pbmdDb2RlYmxvY2tMaW5lKSlcblx0XHRcdGNvZGVibG9ja3MucHVzaChjb2RlU2VjdGlvbi5zbGljZSgwLG9wZW5EZWxpbWl0ZXJJbmRleCsyK2Nsb3NlRGVsaW1pdGVySW5kZXgpKTtcblx0XHRlbHNlXG5cdFx0XHRwYXJzZUNvZGVibG9ja1NlY3Rpb24oY29kZVNlY3Rpb24uc2xpY2Uob3BlbkRlbGltaXRlckluZGV4KzEsb3BlbkRlbGltaXRlckluZGV4KzErY2xvc2VEZWxpbWl0ZXJJbmRleCkpO1xuICAgICAgICBcblx0XHRwYXJzZUNvZGVibG9ja1NlY3Rpb24oY29kZVNlY3Rpb24uc2xpY2Uob3BlbkRlbGltaXRlckluZGV4KzErY2xvc2VEZWxpbWl0ZXJJbmRleCsxKSk7XG5cdH1cblx0cGFyc2VDb2RlYmxvY2tTZWN0aW9uKGNvZGVTZWN0aW9uKTtcblx0cmV0dXJuIHtjb2RlYmxvY2tzUGFyYW1ldGVyczogYXdhaXQgKHR5cGVvZiBzb3VyY2VQYXRoICE9PSBcInVuZGVmaW5lZFwiP3BhcnNlQ29kZWJsb2Nrcyhjb2RlYmxvY2tzLHBsdWdpbixwbHVnaW5zLHNvdXJjZVBhdGgpOnBhcnNlQ29kZWJsb2Nrcyhjb2RlYmxvY2tzLHBsdWdpbixwbHVnaW5zKSksIG5lc3RlZDogY29kZWJsb2Nrc1swXT8hYXJyYXlzRXF1YWwoY29kZVNlY3Rpb24sY29kZWJsb2Nrc1swXSk6dHJ1ZX07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlQ29kZWJsb2Nrcyhjb2RlYmxvY2tzOiBBcnJheTxBcnJheTxzdHJpbmc+PiwgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luLCBwbHVnaW5zOiBSZWNvcmQ8c3RyaW5nLEV4dGVybmFsUGx1Z2luPiwgc291cmNlUGF0aD86IHN0cmluZyk6IFByb21pc2U8QXJyYXk8Q29kZWJsb2NrUGFyYW1ldGVycz4+IHtcblx0Y29uc3QgY29kZWJsb2Nrc1BhcmFtZXRlcnM6IEFycmF5PENvZGVibG9ja1BhcmFtZXRlcnM+ID0gW107XG5cdGZvciAoY29uc3QgY29kZWJsb2NrTGluZXMgb2YgY29kZWJsb2Nrcykge1xuXHRcdGNvbnN0IGNvZGVibG9ja1BhcmFtZXRlcnMgPSBhd2FpdCAodHlwZW9mIHNvdXJjZVBhdGggIT09IFwidW5kZWZpbmVkXCI/cGFyc2VDb2RlYmxvY2soY29kZWJsb2NrTGluZXMscGx1Z2luLHBsdWdpbnMsc291cmNlUGF0aCk6cGFyc2VDb2RlYmxvY2soY29kZWJsb2NrTGluZXMscGx1Z2luLHBsdWdpbnMpKTtcblx0XHRpZiAoY29kZWJsb2NrUGFyYW1ldGVycyAhPT0gbnVsbClcblx0XHRcdGNvZGVibG9ja3NQYXJhbWV0ZXJzLnB1c2goY29kZWJsb2NrUGFyYW1ldGVycyk7XG5cdH1cblx0cmV0dXJuIGNvZGVibG9ja3NQYXJhbWV0ZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gcGFyc2VDb2RlYmxvY2soY29kZWJsb2NrTGluZXM6IEFycmF5PHN0cmluZz4sIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbiwgcGx1Z2luczogUmVjb3JkPHN0cmluZyxFeHRlcm5hbFBsdWdpbj4sIHNvdXJjZVBhdGg/OiBzdHJpbmcpOiBQcm9taXNlPENvZGVibG9ja1BhcmFtZXRlcnMgfCBudWxsPiB7XG5cdGNvbnN0IHBhcmFtZXRlckxpbmUgPSBnZXRQYXJhbWV0ZXJMaW5lKGNvZGVibG9ja0xpbmVzKTtcblx0aWYgKCFwYXJhbWV0ZXJMaW5lKVxuXHRcdHJldHVybiBudWxsO1xuXHRjb25zdCBjb2RlYmxvY2tQYXJhbWV0ZXJzID0gcGFyc2VDb2RlYmxvY2tQYXJhbWV0ZXJzKHBhcmFtZXRlckxpbmUscGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZSk7XG5cdFx0XG5cdGlmIChpc0NvZGVibG9ja0lnbm9yZWQoY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSxwbHVnaW4uc2V0dGluZ3MucHJvY2Vzc2VkQ29kZWJsb2Nrc1doaXRlbGlzdCkpXG5cdFx0cmV0dXJuIG51bGw7XG5cblx0cmV0dXJuIGF3YWl0ICh0eXBlb2Ygc291cmNlUGF0aCAhPT0gXCJ1bmRlZmluZWRcIj9wbHVnaW5BZGp1c3RQYXJhbWV0ZXJzKGNvZGVibG9ja1BhcmFtZXRlcnMscGx1Z2luLHBsdWdpbnMsY29kZWJsb2NrTGluZXMsc291cmNlUGF0aCk6cGx1Z2luQWRqdXN0UGFyYW1ldGVycyhjb2RlYmxvY2tQYXJhbWV0ZXJzLHBsdWdpbixwbHVnaW5zLGNvZGVibG9ja0xpbmVzKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb2RlYmxvY2tQYXJhbWV0ZXJzKHBhcmFtZXRlckxpbmU6IHN0cmluZywgdGhlbWU6IENvZGVTdHlsZXJUaGVtZSk6IENvZGVibG9ja1BhcmFtZXRlcnMge1xuXHRjb25zdCBjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzID0ge1xuXHRcdGxhbmd1YWdlOiBcIlwiLFxuXHRcdHRpdGxlOiBcIlwiLFxuXHRcdHJlZmVyZW5jZTogXCJcIixcblx0XHRmb2xkOiB7XG5cdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdHBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdH0sXG5cdFx0bGluZU51bWJlcnM6IHtcblx0XHRcdGFsd2F5c0VuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0YWx3YXlzRGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0b2Zmc2V0OiAwLFxuXHRcdH0sXG5cdFx0bGluZVVud3JhcDoge1xuXHRcdFx0YWx3YXlzRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRhbHdheXNEaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRhY3RpdmVXcmFwOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhpZ2hsaWdodHM6IHtcblx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0bGluZU51bWJlcnM6IFtdLFxuXHRcdFx0XHRwbGFpblRleHQ6IFtdLFxuXHRcdFx0XHRyZWd1bGFyRXhwcmVzc2lvbnM6IFtdLFxuXHRcdFx0fSxcblx0XHRcdGFsdGVybmF0aXZlOiB7fSxcblx0XHR9LFxuXHRcdGlnbm9yZTogZmFsc2UsXG5cdH07XG5cblx0aWYgKHBhcmFtZXRlckxpbmUuc3RhcnRzV2l0aChcImBgYFwiKSlcblx0XHRwYXJhbWV0ZXJMaW5lID0gcGFyYW1ldGVyTGluZS5yZXBsYWNlKC9eYGBgKyg/PVteYF18JCkvLFwiXCIpO1xuXHRlbHNlIGlmIChwYXJhbWV0ZXJMaW5lLnN0YXJ0c1dpdGgoXCJ+fn5cIikpXG5cdFx0cGFyYW1ldGVyTGluZSA9IHBhcmFtZXRlckxpbmUucmVwbGFjZSgvXn5+fisoPz1bXn5dfCQpLyxcIlwiKTtcblx0ZWxzZVxuXHRcdHJldHVybiBjb2RlYmxvY2tQYXJhbWV0ZXJzO1xuXG5cdGNvbnN0IHJtZE1hdGNoID0gL15cXHsoLispXFx9ICokLy5leGVjKHBhcmFtZXRlckxpbmUpO1xuXHRpZiAocm1kTWF0Y2gpXG5cdFx0cGFyYW1ldGVyTGluZSA9IHJtZE1hdGNoWzFdO1xuXG5cdGNvbnN0IGxhbmd1YWdlQnJlYWsgPSBwYXJhbWV0ZXJMaW5lLmluZGV4T2YoXCIgXCIpO1xuXHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlID0gcGFyYW1ldGVyTGluZS5zbGljZSgwLChsYW5ndWFnZUJyZWFrICE9PSAtMSk/bGFuZ3VhZ2VCcmVhazpwYXJhbWV0ZXJMaW5lLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcblx0aWYgKGxhbmd1YWdlQnJlYWsgPT09IC0xKVxuXHRcdHJldHVybiBjb2RlYmxvY2tQYXJhbWV0ZXJzO1xuXHRwYXJhbWV0ZXJMaW5lID0gcGFyYW1ldGVyTGluZS5zbGljZShsYW5ndWFnZUJyZWFrKzEpO1xuXHRpZiAocm1kTWF0Y2gpXG5cdFx0cGFyYW1ldGVyTGluZSA9IFwidGl0bGU6XCIgKyBwYXJhbWV0ZXJMaW5lO1xuXG5cdGNvbnN0IHBhcmFtZXRlclN0cmluZ3MgPSBwYXJhbWV0ZXJMaW5lLm1hdGNoKC8oPzooPzpyZWZ8cmVmZXJlbmNlfHRpdGxlKTooPzpcXFtcXFsuKj9cXF1cXF18XFxbLio/XFxdXFwoLitcXCkpfFteXFxzXCInXSt8XCJbXlwiXSpcInwnW14nXSonKSsvZyk7XG5cdGlmICghcGFyYW1ldGVyU3RyaW5ncylcblx0XHRyZXR1cm4gY29kZWJsb2NrUGFyYW1ldGVycztcblx0XG5cdHBhcmFtZXRlclN0cmluZ3MuZm9yRWFjaCgocGFyYW1ldGVyU3RyaW5nKSA9PiBwYXJzZUNvZGVibG9ja1BhcmFtZXRlclN0cmluZyhwYXJhbWV0ZXJTdHJpbmcucmVwbGFjZSgvKD86Xix8LCQpL2csIFwiXCIpLGNvZGVibG9ja1BhcmFtZXRlcnMsdGhlbWUpKTtcblx0cmV0dXJuIGNvZGVibG9ja1BhcmFtZXRlcnM7XG59XG5hc3luYyBmdW5jdGlvbiBwbHVnaW5BZGp1c3RQYXJhbWV0ZXJzKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbiwgcGx1Z2luczogUmVjb3JkPHN0cmluZyxFeHRlcm5hbFBsdWdpbj4sIGNvZGVibG9ja0xpbmVzOiBBcnJheTxzdHJpbmc+LCBzb3VyY2VQYXRoPzogc3RyaW5nKTogUHJvbWlzZTxDb2RlYmxvY2tQYXJhbWV0ZXJzPiB7XG5cdGlmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlID09PSBcInByZXZpZXdcIilcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzID0gYXdhaXQgKHR5cGVvZiBzb3VyY2VQYXRoICE9PSBcInVuZGVmaW5lZFwiP3BsdWdpbkFkanVzdFByZXZpZXdDb2RlKGNvZGVibG9ja1BhcmFtZXRlcnMscGx1Z2lucyxjb2RlYmxvY2tMaW5lcyxzb3VyY2VQYXRoKTpwbHVnaW5BZGp1c3RQcmV2aWV3Q29kZShjb2RlYmxvY2tQYXJhbWV0ZXJzLHBsdWdpbnMsY29kZWJsb2NrTGluZXMpKTtcblx0ZWxzZSBpZiAoY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSA9PT0gXCJpbmNsdWRlXCIpXG5cdFx0Y29kZWJsb2NrUGFyYW1ldGVycyA9IHBsdWdpbkFkanVzdEZpbGVJbmNsdWRlKGNvZGVibG9ja1BhcmFtZXRlcnMscGx1Z2lucyxjb2RlYmxvY2tMaW5lcyk7XG5cdGVsc2UgaWYgKC9ydW4tXFx3Ki8udGVzdChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlKSlcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzID0gcGx1Z2luQWRqdXN0RXhlY3V0ZUNvZGVSdW4oY29kZWJsb2NrUGFyYW1ldGVycyxwbHVnaW4scGx1Z2lucyk7XG5cdGNvZGVibG9ja1BhcmFtZXRlcnMgPSBwbHVnaW5BZGp1c3RFeGVjdXRlQ29kZShjb2RlYmxvY2tQYXJhbWV0ZXJzLHBsdWdpbnMsY29kZWJsb2NrTGluZXMpO1xuXHRyZXR1cm4gY29kZWJsb2NrUGFyYW1ldGVycztcbn1cbmFzeW5jIGZ1bmN0aW9uIHBsdWdpbkFkanVzdFByZXZpZXdDb2RlKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIHBsdWdpbnM6IFJlY29yZDxzdHJpbmcsRXh0ZXJuYWxQbHVnaW4+LCBjb2RlYmxvY2tMaW5lczogQXJyYXk8c3RyaW5nPiwgc291cmNlUGF0aD86IHN0cmluZyk6IFByb21pc2U8Q29kZWJsb2NrUGFyYW1ldGVycz4ge1xuXHRpZiAocGx1Z2lucz8uW1wib2JzaWRpYW4tY29kZS1wcmV2aWV3XCJdPy5jb2RlICYmIHBsdWdpbnM/LltcIm9ic2lkaWFuLWNvZGUtcHJldmlld1wiXT8uYW5hbHl6ZUhpZ2hMaWdodExpbmVzKSB7XG5cdFx0Y29uc3QgY29kZVByZXZpZXdQYXJhbXMgPSBhd2FpdCBwbHVnaW5zW1wib2JzaWRpYW4tY29kZS1wcmV2aWV3XCJdLmNvZGUoY29kZWJsb2NrTGluZXMuc2xpY2UoMSwtMSkuam9pbihcIlxcblwiKSxzb3VyY2VQYXRoKTtcblx0XHRpZiAoIWNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMuYWx3YXlzRGlzYWJsZWQgJiYgIWNvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMuYWx3YXlzRW5hYmxlZCkge1xuXHRcdFx0aWYgKHR5cGVvZiBjb2RlUHJldmlld1BhcmFtcy5zdGFydCA9PT0gXCJudW1iZXJcIilcblx0XHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5vZmZzZXQgPSBjb2RlUHJldmlld1BhcmFtcy5zdGFydCAtIDE7XG5cdFx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLmFsd2F5c0VuYWJsZWQgPSBCb29sZWFuKGNvZGVQcmV2aWV3UGFyYW1zLmxpbmVudW1iZXIpO1xuXHRcdH1cblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmhpZ2hsaWdodHMuZGVmYXVsdC5saW5lTnVtYmVycyA9IFsuLi5uZXcgU2V0KGNvZGVibG9ja1BhcmFtZXRlcnMuaGlnaGxpZ2h0cy5kZWZhdWx0LmxpbmVOdW1iZXJzLmNvbmNhdChBcnJheS5mcm9tKHBsdWdpbnNbXCJvYnNpZGlhbi1jb2RlLXByZXZpZXdcIl0uYW5hbHl6ZUhpZ2hMaWdodExpbmVzKGNvZGVQcmV2aWV3UGFyYW1zLmxpbmVzLGNvZGVQcmV2aWV3UGFyYW1zLmhpZ2hsaWdodCksKHBhaXI6IFtudW1iZXIsYm9vbGVhbl0pPT4ocGFpclswXSkpKSldO1xuXHRcdGlmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLnRpdGxlID09PSBcIlwiKVxuXHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy50aXRsZSA9IGNvZGVQcmV2aWV3UGFyYW1zLmZpbGVQYXRoLnNwbGl0KFwiXFxcXFwiKS5wb3AoKT8uc3BsaXQoXCIvXCIpLnBvcCgpID8/IFwiXCI7XG5cdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSA9IGNvZGVQcmV2aWV3UGFyYW1zLmxhbmd1YWdlO1xuXHR9XG5cdHJldHVybiBjb2RlYmxvY2tQYXJhbWV0ZXJzO1xufVxuZnVuY3Rpb24gcGx1Z2luQWRqdXN0RmlsZUluY2x1ZGUoY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycywgcGx1Z2luczogUmVjb3JkPHN0cmluZyxFeHRlcm5hbFBsdWdpbj4sIGNvZGVibG9ja0xpbmVzOiBBcnJheTxzdHJpbmc+KTogQ29kZWJsb2NrUGFyYW1ldGVycyB7XG5cdGlmIChcImZpbGUtaW5jbHVkZVwiIGluIHBsdWdpbnMpIHtcblx0XHRjb25zdCBmaWxlSW5jbHVkZUxhbmd1YWdlID0gL2luY2x1ZGUgKFxcdyspLy5leGVjKGNvZGVibG9ja0xpbmVzWzBdKT8uWzFdO1xuXHRcdGlmICh0eXBlb2YgZmlsZUluY2x1ZGVMYW5ndWFnZSAhPT0gXCJ1bmRlZmluZWRcIilcblx0XHRcdGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UgPSBmaWxlSW5jbHVkZUxhbmd1YWdlO1xuXHR9XG5cdHJldHVybiBjb2RlYmxvY2tQYXJhbWV0ZXJzO1xufVxuZnVuY3Rpb24gcGx1Z2luQWRqdXN0RXhlY3V0ZUNvZGUoY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycywgcGx1Z2luczogUmVjb3JkPHN0cmluZyxFeHRlcm5hbFBsdWdpbj4sIGNvZGVibG9ja0xpbmVzOiBBcnJheTxzdHJpbmc+KTogQ29kZWJsb2NrUGFyYW1ldGVycyB7XG5cdGlmIChcImV4ZWN1dGUtY29kZVwiIGluIHBsdWdpbnMpIHtcblx0XHRjb25zdCBjb2RlYmxvY2tBcmdzOiBDb2RlQmxvY2tBcmdzID0gZ2V0QXJncyhjb2RlYmxvY2tMaW5lc1swXSk7XG5cdFx0Y29kZWJsb2NrUGFyYW1ldGVycy50aXRsZSA9IGNvZGVibG9ja1BhcmFtZXRlcnMudGl0bGUgPz8gY29kZWJsb2NrQXJncz8ubGFiZWwgPz8gXCJcIjtcblx0fVxuXHRyZXR1cm4gY29kZWJsb2NrUGFyYW1ldGVycztcbn1cbmZ1bmN0aW9uIHBsdWdpbkFkanVzdEV4ZWN1dGVDb2RlUnVuKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbiwgcGx1Z2luczogUmVjb3JkPHN0cmluZyxFeHRlcm5hbFBsdWdpbj4pOiBDb2RlYmxvY2tQYXJhbWV0ZXJzIHtcblx0aWYgKFwiZXhlY3V0ZS1jb2RlXCIgaW4gcGx1Z2lucykge1xuXHRcdGlmIChFWEVDVVRFX0NPREVfU1VQUE9SVEVEX0xBTkdVQUdFUy5pbmNsdWRlcyhjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlLnNsaWNlKDQpKSAmJiAhaXNDb2RlYmxvY2tJZ25vcmVkKGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2UscGx1Z2luLnNldHRpbmdzLnByb2Nlc3NlZENvZGVibG9ja3NXaGl0ZWxpc3QpKVxuXHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSA9IGNvZGVibG9ja1BhcmFtZXRlcnMubGFuZ3VhZ2Uuc2xpY2UoNCk7XG5cdH1cblx0cmV0dXJuIGNvZGVibG9ja1BhcmFtZXRlcnM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29kZWJsb2NrUGFyYW1ldGVyU3RyaW5nKHBhcmFtZXRlclN0cmluZzogc3RyaW5nLCBjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzLCB0aGVtZTogQ29kZVN0eWxlclRoZW1lKTogdm9pZCB7XG5cdGlmIChwYXJhbWV0ZXJTdHJpbmcgPT09IFwiaWdub3JlXCIpXG5cdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5pZ25vcmUgPSB0cnVlO1xuXHRlbHNlIGlmICgvXnRpdGxlWzo9XS8udGVzdChwYXJhbWV0ZXJTdHJpbmcpKVxuXHRcdG1hbmFnZVRpdGxlKHBhcmFtZXRlclN0cmluZyxjb2RlYmxvY2tQYXJhbWV0ZXJzKTtcblx0ZWxzZSBpZiAoL15yZWZbOj1dLy50ZXN0KHBhcmFtZXRlclN0cmluZykgfHwgL15yZWZlcmVuY2VbOj1dLy50ZXN0KHBhcmFtZXRlclN0cmluZykpXG5cdFx0bWFuYWdlUmVmZXJlbmNlKHBhcmFtZXRlclN0cmluZyxjb2RlYmxvY2tQYXJhbWV0ZXJzKTtcblx0ZWxzZSBpZiAoL15mb2xkWzo9XT8vLnRlc3QocGFyYW1ldGVyU3RyaW5nKSlcblx0XHRtYW5hZ2VGb2xkaW5nKHBhcmFtZXRlclN0cmluZyxjb2RlYmxvY2tQYXJhbWV0ZXJzKTtcblx0ZWxzZSBpZiAoL15sbls6PV0vLnRlc3QocGFyYW1ldGVyU3RyaW5nKSlcblx0XHRtYW5hZ2VMaW5lTnVtYmVyaW5nKHBhcmFtZXRlclN0cmluZyxjb2RlYmxvY2tQYXJhbWV0ZXJzKTtcblx0ZWxzZSBpZiAoL151bndyYXBbOj1dPy8udGVzdChwYXJhbWV0ZXJTdHJpbmcpIHx8IHBhcmFtZXRlclN0cmluZyA9PT0gXCJ3cmFwXCIpXG5cdFx0bWFuYWdlV3JhcHBpbmcocGFyYW1ldGVyU3RyaW5nLGNvZGVibG9ja1BhcmFtZXRlcnMpO1xuXHRlbHNlXG5cdFx0YWRkSGlnaGxpZ2h0cyhwYXJhbWV0ZXJTdHJpbmcsY29kZWJsb2NrUGFyYW1ldGVycyx0aGVtZSk7XG59XG5mdW5jdGlvbiBtYW5hZ2VUaXRsZShwYXJhbWV0ZXJTdHJpbmc6IHN0cmluZywgY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycykge1xuXHRjb25zdCB0aXRsZU1hdGNoID0gLyhbXCInXT8pKFteXFwxXSspXFwxLy5leGVjKHBhcmFtZXRlclN0cmluZy5zbGljZShcInRpdGxlOlwiLmxlbmd0aCkpO1xuXHRpZiAodGl0bGVNYXRjaClcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLnRpdGxlID0gdGl0bGVNYXRjaFsyXS50cmltKCk7XG5cdHBhcmFtZXRlclN0cmluZyA9IHBhcmFtZXRlclN0cmluZy5zbGljZShcInRpdGxlOlwiLmxlbmd0aCk7XG5cdGNvbnN0IGxpbmtJbmZvID0gbWFuYWdlTGluayhwYXJhbWV0ZXJTdHJpbmcpO1xuXHRpZiAobGlua0luZm8pIHtcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLnRpdGxlID0gbGlua0luZm8udGl0bGU7XG5cdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5yZWZlcmVuY2UgPSBsaW5rSW5mby5yZWZlcmVuY2U7XG5cdH1cbn1cbmZ1bmN0aW9uIG1hbmFnZVJlZmVyZW5jZShwYXJhbWV0ZXJTdHJpbmc6IHN0cmluZywgY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycykge1xuXHRwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXJTdHJpbmcuc2xpY2UoKCgvXnJlZls6PV0vLnRlc3QocGFyYW1ldGVyU3RyaW5nKSk/XCJyZWY6XCI6XCJyZWZlcmVuY2U6XCIpLmxlbmd0aCk7XG5cdGNvbnN0IGxpbmtJbmZvID0gbWFuYWdlTGluayhwYXJhbWV0ZXJTdHJpbmcpO1xuXHRpZiAobGlua0luZm8pIHtcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLnJlZmVyZW5jZSA9IGxpbmtJbmZvLnJlZmVyZW5jZTtcblx0XHRpZiAoY29kZWJsb2NrUGFyYW1ldGVycy50aXRsZSA9PT0gXCJcIilcblx0XHRcdGNvZGVibG9ja1BhcmFtZXRlcnMudGl0bGUgPSBsaW5rSW5mby50aXRsZTtcblx0fVxufVxuZXhwb3J0IGZ1bmN0aW9uIG1hbmFnZUxpbmsocGFyYW1ldGVyU3RyaW5nOiBzdHJpbmcpOiB7dGl0bGU6IHN0cmluZywgcmVmZXJlbmNlOiBzdHJpbmd9IHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcmVmV2lraU1hdGNoID0gL1xcW1xcWyhbXlxcXXxcXHJcXG5dKz8pKD86XFx8KFteXFxdfFxcclxcbl0rPykpP1xcXVxcXS8uZXhlYyhwYXJhbWV0ZXJTdHJpbmcpO1xuXHRjb25zdCByZWZNZE1hdGNoID0gL1xcWyguKj8pXFxdXFwoKC4rKVxcKS8uZXhlYyhwYXJhbWV0ZXJTdHJpbmcpO1xuXHRsZXQgdGl0bGUgPSBcIlwiO1xuXHRsZXQgcmVmZXJlbmNlID0gXCJcIjtcblx0aWYgKHJlZldpa2lNYXRjaCkge1xuXHRcdHRpdGxlID0gcmVmV2lraU1hdGNoWzJdP3JlZldpa2lNYXRjaFsyXS50cmltKCk6cmVmV2lraU1hdGNoWzFdLnRyaW0oKTtcblx0XHRyZWZlcmVuY2UgPSByZWZXaWtpTWF0Y2hbMV0udHJpbSgpO1xuXHR9IGVsc2UgaWYgKHJlZk1kTWF0Y2gpIHtcblx0XHR0aXRsZSA9IHJlZk1kTWF0Y2hbMV0udHJpbSgpO1xuXHRcdHJlZmVyZW5jZSA9IHJlZk1kTWF0Y2hbMl0udHJpbSgpO1xuXHR9IGVsc2Vcblx0XHRyZXR1cm47XG5cdHJldHVybiB7dGl0bGU6IHRpdGxlLCByZWZlcmVuY2U6IHJlZmVyZW5jZX07XG59XG5mdW5jdGlvbiBtYW5hZ2VGb2xkaW5nKHBhcmFtZXRlclN0cmluZzogc3RyaW5nLCBjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzKSB7XG5cdGlmIChwYXJhbWV0ZXJTdHJpbmcgPT09IFwiZm9sZFwiKSB7XG5cdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5mb2xkID0ge1xuXHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdHBsYWNlaG9sZGVyOiBcIlwiLFxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgZm9sZFBsYWNlaG9sZGVyTWF0Y2ggPSAvKFtcIiddPykoW15cXDFdKylcXDEvLmV4ZWMocGFyYW1ldGVyU3RyaW5nLnNsaWNlKFwiZm9sZDpcIi5sZW5ndGgpKTtcblx0XHRpZiAoZm9sZFBsYWNlaG9sZGVyTWF0Y2gpIHtcblx0XHRcdGNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZCA9IHtcblx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0cGxhY2Vob2xkZXI6IGZvbGRQbGFjZWhvbGRlck1hdGNoWzJdLnRyaW0oKSxcblx0XHRcdH07XG5cdFx0fVxuXHR9XG59XG5mdW5jdGlvbiBtYW5hZ2VMaW5lTnVtYmVyaW5nKHBhcmFtZXRlclN0cmluZzogc3RyaW5nLCBjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzKSB7XG5cdHBhcmFtZXRlclN0cmluZyA9IHBhcmFtZXRlclN0cmluZy5zbGljZShcImxuOlwiLmxlbmd0aCk7XG5cdGlmICgvXlxcZCskLy50ZXN0KHBhcmFtZXRlclN0cmluZykpIHtcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzID0ge1xuXHRcdFx0YWx3YXlzRW5hYmxlZDogdHJ1ZSxcblx0XHRcdGFsd2F5c0Rpc2FibGVkOiBmYWxzZSxcblx0XHRcdG9mZnNldDogcGFyc2VJbnQocGFyYW1ldGVyU3RyaW5nKS0xLFxuXHRcdH07XG5cdH0gZWxzZSBpZiAocGFyYW1ldGVyU3RyaW5nLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycyA9IHtcblx0XHRcdGFsd2F5c0VuYWJsZWQ6IHRydWUsXG5cdFx0XHRhbHdheXNEaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRvZmZzZXQ6IDAsXG5cdFx0fTtcblx0fSBlbHNlIGlmIChwYXJhbWV0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKSA9PT0gXCJmYWxzZVwiKSB7XG5cdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycyA9IHtcblx0XHRcdGFsd2F5c0VuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0YWx3YXlzRGlzYWJsZWQ6IHRydWUsXG5cdFx0XHRvZmZzZXQ6IDAsXG5cdFx0fTtcblx0fVxufVxuZnVuY3Rpb24gbWFuYWdlV3JhcHBpbmcocGFyYW1ldGVyU3RyaW5nOiBzdHJpbmcsIGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMpIHtcblx0aWYgKHBhcmFtZXRlclN0cmluZyA9PT0gXCJ3cmFwXCIpIHtcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVVbndyYXAgPSB7XG5cdFx0XHRhbHdheXNFbmFibGVkOiBmYWxzZSxcblx0XHRcdGFsd2F5c0Rpc2FibGVkOiB0cnVlLFxuXHRcdFx0YWN0aXZlV3JhcDogZmFsc2UsXG5cdFx0fTtcblx0fSBlbHNlIGlmIChwYXJhbWV0ZXJTdHJpbmcgPT09IFwidW53cmFwXCIpIHtcblx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVVbndyYXAgPSB7XG5cdFx0XHRhbHdheXNFbmFibGVkOiB0cnVlLFxuXHRcdFx0YWx3YXlzRGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0YWN0aXZlV3JhcDogZmFsc2UsXG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRwYXJhbWV0ZXJTdHJpbmcgPSBwYXJhbWV0ZXJTdHJpbmcuc2xpY2UoXCJ1bndyYXA6XCIubGVuZ3RoKTtcblx0XHRpZiAocGFyYW1ldGVyU3RyaW5nLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5hY3RpdmVcIikge1xuXHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5saW5lVW53cmFwID0ge1xuXHRcdFx0XHRhbHdheXNFbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRhbHdheXNEaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRcdGFjdGl2ZVdyYXA6IHRydWUsXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAocGFyYW1ldGVyU3RyaW5nLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVVbndyYXAgPSB7XG5cdFx0XHRcdGFsd2F5c0VuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdGFsd2F5c0Rpc2FibGVkOiBmYWxzZSxcblx0XHRcdFx0YWN0aXZlV3JhcDogZmFsc2UsXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSBpZiAocGFyYW1ldGVyU3RyaW5nLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIikge1xuXHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5saW5lVW53cmFwID0ge1xuXHRcdFx0XHRhbHdheXNFbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0YWx3YXlzRGlzYWJsZWQ6IHRydWUsXG5cdFx0XHRcdGFjdGl2ZVdyYXA6IGZhbHNlLFxuXHRcdFx0fTtcblx0XHR9XG5cdH1cbn1cbmZ1bmN0aW9uIGFkZEhpZ2hsaWdodHMocGFyYW1ldGVyU3RyaW5nOiBzdHJpbmcsIGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIHRoZW1lOiBDb2RlU3R5bGVyVGhlbWUpIHtcblx0Y29uc3QgaGlnaGxpZ2h0TWF0Y2ggPSAvXihcXHcrKVs6PV0oLispJC8uZXhlYyhwYXJhbWV0ZXJTdHJpbmcpO1xuXHRpZiAoaGlnaGxpZ2h0TWF0Y2gpIHtcblx0XHRpZiAoaGlnaGxpZ2h0TWF0Y2hbMV0gPT09IFwiaGxcIilcblx0XHRcdGNvZGVibG9ja1BhcmFtZXRlcnMuaGlnaGxpZ2h0cy5kZWZhdWx0ID0gcGFyc2VIaWdobGlnaHRlZExpbmVzKGhpZ2hsaWdodE1hdGNoWzJdKTtcblx0XHRlbHNlIGlmIChoaWdobGlnaHRNYXRjaFsxXSBpbiB0aGVtZS5jb2xvdXJzLmxpZ2h0LmhpZ2hsaWdodHMuYWx0ZXJuYXRpdmVIaWdobGlnaHRzKVxuXHRcdFx0Y29kZWJsb2NrUGFyYW1ldGVycy5oaWdobGlnaHRzLmFsdGVybmF0aXZlW2hpZ2hsaWdodE1hdGNoWzFdXSA9IHBhcnNlSGlnaGxpZ2h0ZWRMaW5lcyhoaWdobGlnaHRNYXRjaFsyXSk7XG5cdH0gZWxzZSBpZiAoL157W1xcZC0sXSt9JC8udGVzdChwYXJhbWV0ZXJTdHJpbmcpKVxuXHRcdGNvZGVibG9ja1BhcmFtZXRlcnMuaGlnaGxpZ2h0cy5kZWZhdWx0ID0gcGFyc2VIaWdobGlnaHRlZExpbmVzKHBhcmFtZXRlclN0cmluZy5zbGljZSgxLC0xKSk7XG59XG5mdW5jdGlvbiBwYXJzZUhpZ2hsaWdodGVkTGluZXMoaGlnaGxpZ2h0ZWRMaW5lc1N0cmluZzogc3RyaW5nKTogSGlnaGxpZ2h0cyB7XG5cdGNvbnN0IGhpZ2hsaWdodFJ1bGVzID0gaGlnaGxpZ2h0ZWRMaW5lc1N0cmluZy5zcGxpdChcIixcIik7XG5cdGNvbnN0IGxpbmVOdW1iZXJzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTtcblx0Y29uc3QgcGxhaW5UZXh0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcblx0Y29uc3QgcmVndWxhckV4cHJlc3Npb25zOiBTZXQ8UmVnRXhwPiA9IG5ldyBTZXQoKTtcblx0aGlnaGxpZ2h0UnVsZXMuZm9yRWFjaChoaWdobGlnaHRSdWxlID0+IHtcblx0XHRpZiAoL1xcZCstXFxkKy8udGVzdChoaWdobGlnaHRSdWxlKSkgeyAvLyBOdW1iZXIgUmFuZ2Vcblx0XHRcdGNvbnN0IFtzdGFydCxlbmRdID0gaGlnaGxpZ2h0UnVsZS5zcGxpdChcIi1cIikubWFwKG51bSA9PiBwYXJzZUludChudW0pKTtcblx0XHRcdGlmIChzdGFydCAmJiBlbmQgJiYgc3RhcnQgPD0gZW5kKVxuXHRcdFx0XHRBcnJheS5mcm9tKHtsZW5ndGg6ZW5kLXN0YXJ0KzF9LCAoXyxudW0pID0+IG51bSArIHN0YXJ0KS5mb3JFYWNoKGxpbmVOdW1iZXIgPT4gbGluZU51bWJlcnMuYWRkKGxpbmVOdW1iZXIpKTtcblx0XHR9IGVsc2UgaWYgKC9eXFwvKC4qKVxcLyQvLnRlc3QoaGlnaGxpZ2h0UnVsZSkpIHsgLy8gUmVnZXhcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlZ3VsYXJFeHByZXNzaW9ucy5hZGQobmV3IFJlZ0V4cChoaWdobGlnaHRSdWxlLnJlcGxhY2UoL15cXC8oLiopXFwvJC8sXCIkMVwiKSkpO1xuXHRcdFx0fSBjYXRjaCB7XG5cdFx0XHRcdC8vcGFzc1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoL1wiLipcIi8udGVzdChoaWdobGlnaHRSdWxlKSkgeyAvLyBQbGFpbiBUZXh0XG5cdFx0XHRwbGFpblRleHQuYWRkKGhpZ2hsaWdodFJ1bGUuc3Vic3RyaW5nKDEsaGlnaGxpZ2h0UnVsZS5sZW5ndGgtMSkpO1xuXHRcdH0gZWxzZSBpZiAoLycuKicvLnRlc3QoaGlnaGxpZ2h0UnVsZSkpIHsgLy8gUGxhaW4gVGV4dFxuXHRcdFx0cGxhaW5UZXh0LmFkZChoaWdobGlnaHRSdWxlLnN1YnN0cmluZygxLGhpZ2hsaWdodFJ1bGUubGVuZ3RoLTEpKTtcblx0XHR9IGVsc2UgaWYgKC9cXEQvLnRlc3QoaGlnaGxpZ2h0UnVsZSkpIHsgLy8gUGxhaW4gVGV4dFxuXHRcdFx0cGxhaW5UZXh0LmFkZChoaWdobGlnaHRSdWxlKTtcblx0XHR9IGVsc2UgaWYgKC9cXGQrLy50ZXN0KGhpZ2hsaWdodFJ1bGUpKSB7IC8vIFBsYWluIE51bWJlclxuXHRcdFx0bGluZU51bWJlcnMuYWRkKHBhcnNlSW50KGhpZ2hsaWdodFJ1bGUpKTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdGxpbmVOdW1iZXJzOiBbLi4ubGluZU51bWJlcnNdLFxuXHRcdHBsYWluVGV4dDogWy4uLnBsYWluVGV4dF0sXG5cdFx0cmVndWxhckV4cHJlc3Npb25zOiBbLi4ucmVndWxhckV4cHJlc3Npb25zXSxcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0xhbmd1YWdlSWdub3JlZChsYW5ndWFnZTogc3RyaW5nLCBleGNsdWRlZExhbmd1YWdlc1N0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdHJldHVybiBwYXJzZVJlZ2V4RXhjbHVkZWRMYW5ndWFnZXMoZXhjbHVkZWRMYW5ndWFnZXNTdHJpbmcpLnNvbWUocmVnZXhFeGNsdWRlZExhbmd1YWdlPT5yZWdleEV4Y2x1ZGVkTGFuZ3VhZ2UudGVzdChsYW5ndWFnZSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29kZWJsb2NrSWdub3JlZChsYW5ndWFnZTogc3RyaW5nLCB3aGl0ZWxpc3RlZENvZGVibG9ja3NTdHJpbmc6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHQvL0B0cy1leHBlY3QtZXJyb3IgVW5kb2N1bWVudGVkIE9ic2lkaWFuIEFQSVxuXHRyZXR1cm4gKGxhbmd1YWdlIGluIE1hcmtkb3duUHJldmlld1JlbmRlcmVyLmNvZGVCbG9ja1Bvc3RQcm9jZXNzb3JzKSAmJiAhcGFyc2VSZWdleEV4Y2x1ZGVkTGFuZ3VhZ2VzKHdoaXRlbGlzdGVkQ29kZWJsb2Nrc1N0cmluZykuc29tZShyZWdleEV4Y2x1ZGVkTGFuZ3VhZ2U9PnJlZ2V4RXhjbHVkZWRMYW5ndWFnZS50ZXN0KGxhbmd1YWdlKSk7XG59XG5mdW5jdGlvbiBwYXJzZVJlZ2V4RXhjbHVkZWRMYW5ndWFnZXMoZXhjbHVkZWRMYW5ndWFnZXNTdHJpbmc6IHN0cmluZyk6IEFycmF5PFJlZ0V4cD4ge1xuXHRyZXR1cm4gZXhjbHVkZWRMYW5ndWFnZXNTdHJpbmcuc3BsaXQoXCIsXCIpLm1hcChyZWdleExhbmd1YWdlID0+IG5ldyBSZWdFeHAoYF4ke3JlZ2V4TGFuZ3VhZ2UudHJpbSgpLnJlcGxhY2UoL1xcKi9nLFwiLitcIil9JGAsXCJpXCIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtZXRlckxpbmUoY29kZWJsb2NrTGluZXM6IEFycmF5PHN0cmluZz4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRsZXQgb3BlbmluZ0NvZGVibG9ja0xpbmUgPSBnZXRPcGVuaW5nTGluZShjb2RlYmxvY2tMaW5lcyk7XG5cdGlmIChvcGVuaW5nQ29kZWJsb2NrTGluZSAmJiAob3BlbmluZ0NvZGVibG9ja0xpbmUgIT09IGNvZGVibG9ja0xpbmVzWzBdIHx8IC8+XFxzKig/Oltgfl0pLy50ZXN0KG9wZW5pbmdDb2RlYmxvY2tMaW5lKSkpXG5cdFx0b3BlbmluZ0NvZGVibG9ja0xpbmUgPSBjbGVhblBhcmFtZXRlckxpbmUob3BlbmluZ0NvZGVibG9ja0xpbmUpO1xuXHRyZXR1cm4gb3BlbmluZ0NvZGVibG9ja0xpbmU7XG59XG5mdW5jdGlvbiBnZXRPcGVuaW5nTGluZShjb2RlYmxvY2tMaW5lczogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBjb2RlYmxvY2tMaW5lcy5maW5kKChsaW5lOiBzdHJpbmcpPT5Cb29sZWFuKHRlc3RPcGVuaW5nTGluZShsaW5lKSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RPcGVuaW5nTGluZShjb2RlYmxvY2tMaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBsaW5lTWF0Y2ggPSAvXihcXHMqKD86PlxccyopKikoYGBgK3x+fn4rKS8uZXhlYyhjb2RlYmxvY2tMaW5lKTtcblx0aWYgKCFsaW5lTWF0Y2gpXG5cdFx0cmV0dXJuIFwiXCI7XG5cdGlmIChjb2RlYmxvY2tMaW5lLmluZGV4T2YobGluZU1hdGNoWzJdLGxpbmVNYXRjaFsxXS5sZW5ndGgrbGluZU1hdGNoWzJdLmxlbmd0aCsxKT09PS0xKVxuXHRcdHJldHVybiBsaW5lTWF0Y2hbMl07XG5cdHJldHVybiBcIlwiO1xufVxuZnVuY3Rpb24gY2xlYW5QYXJhbWV0ZXJMaW5lKHBhcmFtZXRlckxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiB0cmltUGFyYW1ldGVyTGluZShwYXJhbWV0ZXJMaW5lKS5yZXBsYWNlKC9eKD86PlxccyopKihgYGArfH5+fispLyxcIiQxXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRyaW1QYXJhbWV0ZXJMaW5lKHBhcmFtZXRlckxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBwYXJhbWV0ZXJMaW5lLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEZpbGVDb250ZW50TGluZXMoc291cmNlUGF0aDogc3RyaW5nLCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4pOiBQcm9taXNlPEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQ+IHtcblx0Y29uc3QgZmlsZSA9IHBsdWdpbi5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHNvdXJjZVBhdGgpO1xuXHRpZiAoIWZpbGUpIHtcblx0XHRjb25zb2xlLmVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtzb3VyY2VQYXRofWApO1xuXHRcdHJldHVybjtcblx0fVxuXHRjb25zdCBmaWxlQ29udGVudCA9IGF3YWl0IHBsdWdpbi5hcHAudmF1bHQuY2FjaGVkUmVhZCg8VEZpbGU+IGZpbGUpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIHJlYWRpbmcgZmlsZTogJHtlcnJvci5tZXNzYWdlfWApO1xuXHRcdHJldHVybiBcIlwiO1xuXHR9KTtcblx0aWYgKCFmaWxlQ29udGVudClcblx0XHRyZXR1cm47XG5cdHJldHVybiBmaWxlQ29udGVudC5zcGxpdCgvXFxuL2cpO1xufVxuXG5mdW5jdGlvbiBhcnJheXNFcXVhbChhcnJheTE6IEFycmF5PHVua25vd24+LGFycmF5MjogQXJyYXk8dW5rbm93bj4pOiBib29sZWFuIHtcblx0cmV0dXJuIGFycmF5MS5sZW5ndGggPT09IGFycmF5Mi5sZW5ndGggJiYgYXJyYXkxLmV2ZXJ5KChlbCkgPT4gYXJyYXkyLmluY2x1ZGVzKGVsKSk7XG59XG4iLCAiaW1wb3J0IHtOb3RpY2V9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0ICogYXMgSlNPTjUgZnJvbSBcImpzb241XCI7XG5cbmV4cG9ydCB0eXBlIEV4cG9ydFR5cGUgPSBcInByZVwiIHwgXCJwb3N0XCI7XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciBjb2RlIGJsb2Nrcywgc3BlY2lmaWVkIG5leHQgdG8gdGhlIGxhbmd1YWdlIGlkZW50aWZpZXIgYXMgSlNPTlxuICogQGV4YW1wbGUgYGBgcHl0aG9uIHtcImV4cG9ydFwiOiBcInByZVwifVxuICogQGV4YW1wbGUgYGBgY3BwIHtcImlnbm9yZUV4cG9ydFwiOiBbXCJwb3N0XCJdfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCbG9ja0FyZ3Mge1xuXHRsYWJlbD86IHN0cmluZztcblx0aW1wb3J0Pzogc3RyaW5nIHwgc3RyaW5nW107XG5cdGV4cG9ydD86IEV4cG9ydFR5cGUgfCBFeHBvcnRUeXBlW107XG5cdGlnbm9yZT86IChFeHBvcnRUeXBlIHwgXCJnbG9iYWxcIilbXSB8IEV4cG9ydFR5cGUgfCBcImdsb2JhbFwiIHwgXCJhbGxcIjtcbn1cblxuLyoqXG4gKiBHZXQgY29kZSBibG9jayBhcmdzIGdpdmVuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjb2RlIGJsb2NrLlxuICpcbiAqIEBwYXJhbSBmaXJzdExpbmVPZkNvZGUgVGhlIGZpcnN0IGxpbmUgb2YgYSBjb2RlIGJsb2NrIHRoYXQgY29udGFpbnMgdGhlIGxhbmd1YWdlIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnRzIGZyb20gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGNvZGUgYmxvY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcmdzKGZpcnN0TGluZU9mQ29kZTogc3RyaW5nKTogQ29kZUJsb2NrQXJncyB7XG5cdC8vIE5vIGFyZ3Mgc3BlY2lmaWVkXG5cdGlmICghZmlyc3RMaW5lT2ZDb2RlLmNvbnRhaW5zKFwie1wiKSAmJiAhZmlyc3RMaW5lT2ZDb2RlLmNvbnRhaW5zKFwifVwiKSlcblx0XHRyZXR1cm4ge307XG5cdHRyeSB7XG5cdFx0bGV0IGFyZ3MgPSBmaXJzdExpbmVPZkNvZGUuc3Vic3RyaW5nKGZpcnN0TGluZU9mQ29kZS5pbmRleE9mKFwie1wiKSArIDEpLnRyaW0oKTtcblx0XHQvLyBUcmFuc2Zvcm0gY3VzdG9tIHN5bnRheCB0byBKU09ONVxuXHRcdGFyZ3MgPSBhcmdzLnJlcGxhY2UoLz0vZywgXCI6XCIpO1xuXHRcdC8vIEhhbmRsZSB1bm5hbWVkIGV4cG9ydCBhcmcgLSBwcmUgLyBwb3N0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFyZ3Mgd2l0aG91dCBhbnkgYXJnIG5hbWVcblx0XHRjb25zdCBleHBvcnRzOiBFeHBvcnRUeXBlW10gPSBbXTtcblx0XHRjb25zdCBoYW5kbGVVbm5hbWVkRXhwb3J0ID0gKGV4cG9ydE5hbWU6IEV4cG9ydFR5cGUpID0+IHtcblx0XHRcdGxldCBpID0gYXJncy5pbmRleE9mKGV4cG9ydE5hbWUpO1xuXHRcdFx0d2hpbGUgKGkgIT09IC0xKSB7XG5cdFx0XHRcdGNvbnN0IG5leHRDaGFyID0gYXJnc1tpICsgZXhwb3J0TmFtZS5sZW5ndGhdO1xuXHRcdFx0XHRpZiAobmV4dENoYXIgIT09IFwiXFxcIlwiICYmIG5leHRDaGFyICE9PSBcIidcIikge1xuXHRcdFx0XHRcdC8vIFJlbW92ZSBmcm9tIGFyZ3Mgc3RyaW5nXG5cdFx0XHRcdFx0YXJncyA9IGFyZ3Muc3Vic3RyaW5nKDAsIGkpICsgYXJncy5zdWJzdHJpbmcoaSArIGV4cG9ydE5hbWUubGVuZ3RoICsgKG5leHRDaGFyID09PSBcIn1cIiA/IDAgOiAxKSk7XG5cdFx0XHRcdFx0ZXhwb3J0cy5wdXNoKGV4cG9ydE5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGkgPSBhcmdzLmluZGV4T2YoZXhwb3J0TmFtZSwgaSArIDEpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0aGFuZGxlVW5uYW1lZEV4cG9ydChcInByZVwiKTtcblx0XHRoYW5kbGVVbm5hbWVkRXhwb3J0KFwicG9zdFwiKTtcblx0XHRhcmdzID0gYHtleHBvcnQ6IFsnJHtleHBvcnRzLmpvaW4oXCInLCAnXCIpfSddLCAke2FyZ3N9YDtcblx0XHRyZXR1cm4gSlNPTjUucGFyc2UoYXJncyk7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdG5ldyBOb3RpY2UoYEZhaWxlZCB0byBwYXJzZSBjb2RlIGJsb2NrIGFyZ3VtZW50cyBmcm9tIGxpbmU6XFxuJHtmaXJzdExpbmVPZkNvZGV9XFxuXFxuRmFpbGVkIHdpdGggZXJyb3I6XFxuJHtlcnJ9YCk7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG4iLCAiXG5leHBvcnQgaW50ZXJmYWNlIElubGluZUNvZGVQYXJhbWV0ZXJzIHtcblx0bGFuZ3VhZ2U6IHN0cmluZztcblx0dGl0bGU6IHN0cmluZztcblx0aWNvbjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSW5saW5lQ29kZShjb2RlVGV4dDogc3RyaW5nKToge3BhcmFtZXRlcnM6IElubGluZUNvZGVQYXJhbWV0ZXJzIHwgbnVsbCwgdGV4dDogc3RyaW5nfSB7XG5cdGNvbnN0IG1hdGNoID0gL157KCAqKD86XFx3Kyg/OiArKD86KD86W15cXHNcIiddK3xcIlteXCJdKlwifCdbXiddKicpKykpKik/ICopfSAqPyhbXiBdLio/KSQvLmV4ZWMoY29kZVRleHQpO1xuXG5cdGlmICh0eXBlb2YgbWF0Y2g/LlsxXSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgbWF0Y2g/LlsyXSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGlmIChtYXRjaFsxXSA9PT0gXCJcIilcblx0XHRcdHJldHVybiB7cGFyYW1ldGVyczogbnVsbCwgdGV4dDogbWF0Y2hbMl19O1xuXHRcdGVsc2Vcblx0XHRcdHJldHVybiB7cGFyYW1ldGVyczogcGFyc2VJbmxpbmVDb2RlUGFyYW1ldGVycyhtYXRjaFsxXSksIHRleHQ6IG1hdGNoWzJdfTtcblx0fSBlbHNlIFxuXHRcdHJldHVybiB7cGFyYW1ldGVyczogbnVsbCwgdGV4dDogY29kZVRleHR9O1xufVxuZnVuY3Rpb24gcGFyc2VJbmxpbmVDb2RlUGFyYW1ldGVycyhwYXJhbWV0ZXJMaW5lOiBzdHJpbmcpOiBJbmxpbmVDb2RlUGFyYW1ldGVycyB7XG5cdGNvbnN0IGlubGluZUNvZGVQYXJhbWV0ZXJzOiBJbmxpbmVDb2RlUGFyYW1ldGVycyA9IHtcblx0XHRsYW5ndWFnZTogXCJcIixcblx0XHR0aXRsZTogXCJcIixcblx0XHRpY29uOiBmYWxzZSxcblx0fTtcblx0Y29uc3QgbGFuZ3VhZ2VCcmVhayA9IHBhcmFtZXRlckxpbmUuaW5kZXhPZihcIiBcIik7XG5cdGlubGluZUNvZGVQYXJhbWV0ZXJzLmxhbmd1YWdlID0gcGFyYW1ldGVyTGluZS5zbGljZSgwLGxhbmd1YWdlQnJlYWsgIT09IC0xP2xhbmd1YWdlQnJlYWs6cGFyYW1ldGVyTGluZS5sZW5ndGgpLnRvTG93ZXJDYXNlKCk7XG5cdGlmIChsYW5ndWFnZUJyZWFrID09PSAtMSlcblx0XHRyZXR1cm4gaW5saW5lQ29kZVBhcmFtZXRlcnM7XG5cdGNvbnN0IHBhcmFtZXRlclN0cmluZ3MgPSBwYXJhbWV0ZXJMaW5lLnNsaWNlKGxhbmd1YWdlQnJlYWsrMSkubWF0Y2goLyg/OlteXFxzXCInXSt8XCJbXlwiXSpcInwnW14nXSonKSsvZyk7XG5cdGlmICghcGFyYW1ldGVyU3RyaW5ncylcblx0XHRyZXR1cm4gaW5saW5lQ29kZVBhcmFtZXRlcnM7XG5cdHBhcmFtZXRlclN0cmluZ3MuZm9yRWFjaCgocGFyYW1ldGVyU3RyaW5nKSA9PiBwYXJzZUlubGluZUNvZGVQYXJhbWV0ZXJTdHJpbmcocGFyYW1ldGVyU3RyaW5nLGlubGluZUNvZGVQYXJhbWV0ZXJzKSk7XG5cdHJldHVybiBpbmxpbmVDb2RlUGFyYW1ldGVycztcbn1cbmZ1bmN0aW9uIHBhcnNlSW5saW5lQ29kZVBhcmFtZXRlclN0cmluZyhwYXJhbWV0ZXJTdHJpbmc6IHN0cmluZywgaW5saW5lQ29kZVBhcmFtZXRlcnM6IElubGluZUNvZGVQYXJhbWV0ZXJzKTogdm9pZCB7XG5cdGlmIChwYXJhbWV0ZXJTdHJpbmcuc3RhcnRzV2l0aChcInRpdGxlOlwiKSkge1xuXHRcdGNvbnN0IHRpdGxlTWF0Y2ggPSAvKFtcIiddPykoW15cXDFdKylcXDEvLmV4ZWMocGFyYW1ldGVyU3RyaW5nLnNsaWNlKFwidGl0bGU6XCIubGVuZ3RoKSk7XG5cdFx0aWYgKHRpdGxlTWF0Y2gpXG5cdFx0XHRpbmxpbmVDb2RlUGFyYW1ldGVycy50aXRsZSA9IHRpdGxlTWF0Y2hbMl0udHJpbSgpO1xuXHR9IGVsc2UgaWYgKHBhcmFtZXRlclN0cmluZyA9PT0gXCJpY29uXCIgfHwgKHBhcmFtZXRlclN0cmluZy5zdGFydHNXaXRoKFwiaWNvbjpcIikgJiYgcGFyYW1ldGVyU3RyaW5nLnRvTG93ZXJDYXNlKCkgPT09IFwiaWNvbjp0cnVlXCIpKVxuXHRcdGlubGluZUNvZGVQYXJhbWV0ZXJzLmljb24gPSB0cnVlO1xufVxuXG4iLCAiaW1wb3J0IHsgTEFOR1VBR0VfTkFNRVMsIENvZGVTdHlsZXJUaGVtZVNldHRpbmdzLCBGT0xEX1BMQUNFSE9MREVSIH0gZnJvbSBcIi4vU2V0dGluZ3NcIjtcbmltcG9ydCB7IENvZGVibG9ja1BhcmFtZXRlcnMsIEhpZ2hsaWdodHMgfSBmcm9tIFwiLi9QYXJzaW5nL0NvZGVibG9ja1BhcnNpbmdcIjtcbmltcG9ydCB7IElubGluZUNvZGVQYXJhbWV0ZXJzIH0gZnJvbSBcIi4vUGFyc2luZy9JbmxpbmVDb2RlUGFyc2luZ1wiO1xuaW1wb3J0IHsgTWFya2Rvd25SZW5kZXJlciB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IENvZGVTdHlsZXJQbHVnaW4gZnJvbSBcIi4vbWFpblwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGVhZGVyKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIHRoZW1lU2V0dGluZ3M6IENvZGVTdHlsZXJUaGVtZVNldHRpbmdzLCBzb3VyY2VQYXRoOiBzdHJpbmcsIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbik6IEhUTUxFbGVtZW50IHtcblx0Y29uc3QgaGVhZGVyQ29udGFpbmVyID0gY3JlYXRlRGl2KCk7XG5cdGNvbnN0IGljb25VUkwgPSBjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlP2dldExhbmd1YWdlSWNvbihjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlLHBsdWdpbi5sYW5ndWFnZUljb25zKTp1bmRlZmluZWQ7XG5cdGlmICghaXNIZWFkZXJIaWRkZW4oY29kZWJsb2NrUGFyYW1ldGVycyx0aGVtZVNldHRpbmdzLGljb25VUkwpKSB7XG5cdFx0aGVhZGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJjb2RlLXN0eWxlci1oZWFkZXItY29udGFpbmVyXCIpO1xuXHRcdGlmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlICE9PSBcIlwiKSB7XG5cdFx0XHRpZiAoaXNMYW5ndWFnZUljb25TaG93bihjb2RlYmxvY2tQYXJhbWV0ZXJzLHRoZW1lU2V0dGluZ3MsaWNvblVSTCkpXG5cdFx0XHRcdGhlYWRlckNvbnRhaW5lci5hcHBlbmRDaGlsZChjcmVhdGVJbWFnZVdyYXBwZXIoaWNvblVSTCBhcyBzdHJpbmcsY3JlYXRlRGl2KCkpKTtcblx0XHRcdGlmIChpc0xhbmd1YWdlVGFnU2hvd24oY29kZWJsb2NrUGFyYW1ldGVycyx0aGVtZVNldHRpbmdzKSlcblx0XHRcdFx0aGVhZGVyQ29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZURpdih7Y2xzOiBcImNvZGUtc3R5bGVyLWhlYWRlci1sYW5ndWFnZS10YWdcIiwgdGV4dDogZ2V0TGFuZ3VhZ2VUYWcoY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSl9KSk7XG5cdFx0fVxuXHRcdGNvbnN0IHRpdGxlQ29udGFpbmVyID0gY3JlYXRlVGl0bGVDb250YWluZXIoY29kZWJsb2NrUGFyYW1ldGVycywgdGhlbWVTZXR0aW5ncywgc291cmNlUGF0aCwgcGx1Z2luKTtcblx0XHRoZWFkZXJDb250YWluZXIuYXBwZW5kQ2hpbGQodGl0bGVDb250YWluZXIpO1xuXHR9IGVsc2Vcblx0XHRoZWFkZXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImNvZGUtc3R5bGVyLWhlYWRlci1jb250YWluZXItaGlkZGVuXCIpO1xuXHRyZXR1cm4gaGVhZGVyQ29udGFpbmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlVGl0bGVDb250YWluZXIoY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycywgdGhlbWVTZXR0aW5nczogQ29kZVN0eWxlclRoZW1lU2V0dGluZ3MsIHNvdXJjZVBhdGg6IHN0cmluZywgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luKTogSFRNTEVsZW1lbnQge1xuXHRjb25zdCB0aXRsZUNvbnRhaW5lciA9IGNyZWF0ZURpdih7Y2xzOiBcImNvZGUtc3R5bGVyLWhlYWRlci10ZXh0XCJ9KTtcblx0Y29uc3QgdGl0bGUgPSBjb2RlYmxvY2tQYXJhbWV0ZXJzLnRpdGxlIHx8IChjb2RlYmxvY2tQYXJhbWV0ZXJzLmZvbGQuZW5hYmxlZD8oY29kZWJsb2NrUGFyYW1ldGVycy5mb2xkLnBsYWNlaG9sZGVyIHx8IHRoZW1lU2V0dGluZ3MuaGVhZGVyLmZvbGRQbGFjZWhvbGRlciB8fCBGT0xEX1BMQUNFSE9MREVSKTpcIlwiKTtcblx0aWYgKGNvZGVibG9ja1BhcmFtZXRlcnMucmVmZXJlbmNlID09PSBcIlwiKVxuXHRcdHRpdGxlQ29udGFpbmVyLmlubmVyVGV4dCA9IHRpdGxlO1xuXHRlbHNlIHtcblx0XHRNYXJrZG93blJlbmRlcmVyLnJlbmRlcihwbHVnaW4uYXBwLGBbWyR7Y29kZWJsb2NrUGFyYW1ldGVycy5yZWZlcmVuY2V9fCR7dGl0bGV9XV1gLHRpdGxlQ29udGFpbmVyLHNvdXJjZVBhdGgscGx1Z2luKTsgLy9UT0RPIChAbWF5dXJhbmt2KSBBZGQgbGlua3MgdG8gbWV0YWRhdGEgY2FjaGUgcHJvcGVybHlcblx0fVxuXHRyZXR1cm4gdGl0bGVDb250YWluZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5saW5lT3BlbmVyKGlubGluZUNvZGVQYXJhbWV0ZXJzOiBJbmxpbmVDb2RlUGFyYW1ldGVycywgbGFuZ3VhZ2VJY29uczogUmVjb3JkPHN0cmluZyxzdHJpbmc+LCBjb250YWluZXJDbGFzc2VzOiBBcnJheTxzdHJpbmc+ID0gW1wiY29kZS1zdHlsZXItaW5saW5lLW9wZW5lclwiXSk6IEhUTUxFbGVtZW50IHtcblx0Y29uc3Qgb3BlbmVyQ29udGFpbmVyID0gY3JlYXRlU3Bhbih7Y2xzOiBjb250YWluZXJDbGFzc2VzLmpvaW4oXCIgXCIpfSk7XG5cdGlmIChpbmxpbmVDb2RlUGFyYW1ldGVycy5pY29uKSB7XG5cdFx0Y29uc3QgaWNvblVSTCA9IGdldExhbmd1YWdlSWNvbihpbmxpbmVDb2RlUGFyYW1ldGVycy5sYW5ndWFnZSxsYW5ndWFnZUljb25zKTtcblx0XHRpZiAodHlwZW9mIGljb25VUkwgIT09IFwidW5kZWZpbmVkXCIpXG5cdFx0XHRvcGVuZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlSW1hZ2VXcmFwcGVyKGljb25VUkwsY3JlYXRlU3BhbigpLFwiY29kZS1zdHlsZXItaW5saW5lLWljb25cIikpO1xuXHR9XG5cdGlmIChpbmxpbmVDb2RlUGFyYW1ldGVycy50aXRsZSlcblx0XHRvcGVuZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlU3Bhbih7Y2xzOiBcImNvZGUtc3R5bGVyLWlubGluZS10aXRsZVwiLCB0ZXh0OiBpbmxpbmVDb2RlUGFyYW1ldGVycy50aXRsZX0pKTtcblx0cmV0dXJuIG9wZW5lckNvbnRhaW5lcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUltYWdlV3JhcHBlcihpY29uVVJMOiBzdHJpbmcsIGltYWdlV3JhcHBlcjogSFRNTEVsZW1lbnQsIGltZ0NsYXNzID0gXCJjb2RlLXN0eWxlci1pY29uXCIpOiBIVE1MRWxlbWVudCB7XG5cdGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG5cdGltZy5jbGFzc0xpc3QuYWRkKGltZ0NsYXNzKTtcblx0aW1nLnNyYyA9IGljb25VUkw7XG5cdGltYWdlV3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xuXHRyZXR1cm4gaW1hZ2VXcmFwcGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VJY29uKGxhbmd1YWdlOiBzdHJpbmcsIGxhbmd1YWdlSWNvbnM6IFJlY29yZDxzdHJpbmcsc3RyaW5nPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBsYW5ndWFnZUljb25zPy5bZ2V0TGFuZ3VhZ2VUYWcobGFuZ3VhZ2UpXTtcbn1cbmZ1bmN0aW9uIGdldExhbmd1YWdlVGFnKGxhbmd1YWdlOiBzdHJpbmcpIHtcblx0cmV0dXJuIExBTkdVQUdFX05BTUVTPy5bbGFuZ3VhZ2VdID8/IChsYW5ndWFnZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGxhbmd1YWdlLnNsaWNlKDEpIHx8IFwiXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSGVhZGVySGlkZGVuKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIHRoZW1lU2V0dGluZ3M6IENvZGVTdHlsZXJUaGVtZVNldHRpbmdzLCBpY29uVVJMOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0cmV0dXJuICFpc0hlYWRlclJlcXVpcmVkKGNvZGVibG9ja1BhcmFtZXRlcnMpICYmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlID09PSBcIlwiIHx8ICh0aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZVRhZy5kaXNwbGF5ICE9PSBcImFsd2F5c1wiICYmICh0aGVtZVNldHRpbmdzLmhlYWRlci5sYW5ndWFnZUljb24uZGlzcGxheSAhPT0gXCJhbHdheXNcIiB8fCAodHlwZW9mIGljb25VUkwgPT0gXCJ1bmRlZmluZWRcIikpKSk7XG59XG5mdW5jdGlvbiBpc0xhbmd1YWdlSWNvblNob3duKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIHRoZW1lU2V0dGluZ3M6IENvZGVTdHlsZXJUaGVtZVNldHRpbmdzLCBpY29uVVJMOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0cmV0dXJuICh0eXBlb2YgaWNvblVSTCAhPT0gXCJ1bmRlZmluZWRcIikgJiYgKHRoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlSWNvbi5kaXNwbGF5ID09PSBcImFsd2F5c1wiIHx8IChpc0hlYWRlclJlcXVpcmVkKGNvZGVibG9ja1BhcmFtZXRlcnMpICYmIHRoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlSWNvbi5kaXNwbGF5ID09PSBcImlmX2hlYWRlcl9zaG93blwiKSk7XG59XG5mdW5jdGlvbiBpc0xhbmd1YWdlVGFnU2hvd24oY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycywgdGhlbWVTZXR0aW5nczogQ29kZVN0eWxlclRoZW1lU2V0dGluZ3MpOiBib29sZWFuIHtcblx0cmV0dXJuIHRoZW1lU2V0dGluZ3MuaGVhZGVyLmxhbmd1YWdlVGFnLmRpc3BsYXkgPT09IFwiYWx3YXlzXCIgfHwgKGlzSGVhZGVyUmVxdWlyZWQoY29kZWJsb2NrUGFyYW1ldGVycykgJiYgdGhlbWVTZXR0aW5ncy5oZWFkZXIubGFuZ3VhZ2VUYWcuZGlzcGxheSA9PT0gXCJpZl9oZWFkZXJfc2hvd25cIik7XG59XG5mdW5jdGlvbiBpc0hlYWRlclJlcXVpcmVkKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMpOiBib29sZWFuIHtcblx0cmV0dXJuIGNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZC5lbmFibGVkIHx8IGNvZGVibG9ja1BhcmFtZXRlcnMudGl0bGUgIT09IFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lQ2xhc3MoY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycywgbGluZU51bWJlcjogbnVtYmVyLCBsaW5lOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHtcblx0bGV0IGNsYXNzTGlzdDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXHRpZiAoY29kZWJsb2NrUGFyYW1ldGVycy5oaWdobGlnaHRzLmRlZmF1bHQubGluZU51bWJlcnMuaW5jbHVkZXMobGluZU51bWJlcitjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLm9mZnNldCkgfHwgY29kZWJsb2NrUGFyYW1ldGVycy5oaWdobGlnaHRzLmRlZmF1bHQucGxhaW5UZXh0LnNvbWUodGV4dCA9PiBsaW5lLmluZGV4T2YodGV4dCkgPiAtMSkgfHwgY29kZWJsb2NrUGFyYW1ldGVycy5oaWdobGlnaHRzLmRlZmF1bHQucmVndWxhckV4cHJlc3Npb25zLnNvbWUocmVnRXhwID0+IHJlZ0V4cC50ZXN0KGxpbmUpKSlcblx0XHRjbGFzc0xpc3QucHVzaChcImNvZGUtc3R5bGVyLWxpbmUtaGlnaGxpZ2h0ZWRcIik7XG5cdE9iamVjdC5lbnRyaWVzKGNvZGVibG9ja1BhcmFtZXRlcnMuaGlnaGxpZ2h0cy5hbHRlcm5hdGl2ZSkuZm9yRWFjaCgoW2FsdGVybmF0aXZlSGlnaGxpZ2h0LGhpZ2hsaWdodGVkTGluZXNdOiBbc3RyaW5nLEhpZ2hsaWdodHNdKSA9PiB7XG5cdFx0aWYgKGhpZ2hsaWdodGVkTGluZXMubGluZU51bWJlcnMuaW5jbHVkZXMobGluZU51bWJlcitjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVOdW1iZXJzLm9mZnNldCkgfHwgaGlnaGxpZ2h0ZWRMaW5lcy5wbGFpblRleHQuc29tZSh0ZXh0ID0+IGxpbmUuaW5kZXhPZih0ZXh0KSA+IC0xKSB8fCBoaWdobGlnaHRlZExpbmVzLnJlZ3VsYXJFeHByZXNzaW9ucy5zb21lKHJlZ0V4cCA9PiByZWdFeHAudGVzdChsaW5lKSkpXG5cdFx0XHRjbGFzc0xpc3QucHVzaChgY29kZS1zdHlsZXItbGluZS1oaWdobGlnaHRlZC0ke2FsdGVybmF0aXZlSGlnaGxpZ2h0LnJlcGxhY2UoL1xccysvZywgXCItXCIpLnRvTG93ZXJDYXNlKCl9YCk7XG5cdH0pO1xuXHRpZiAoY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMClcblx0XHRjbGFzc0xpc3QgPSBbXCJjb2RlLXN0eWxlci1saW5lXCJdO1xuXHRyZXR1cm4gY2xhc3NMaXN0O1xufVxuIiwgImltcG9ydCB7IE1hcmtkb3duU2VjdGlvbkluZm9ybWF0aW9uLCBDYWNoZWRNZXRhZGF0YSwgc2FuaXRpemVIVE1MVG9Eb20sIEZyb250TWF0dGVyQ2FjaGUsIE1hcmtkb3duUmVuZGVyZXIgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IHZpc2l0UGFyZW50cyB9IGZyb20gXCJ1bmlzdC11dGlsLXZpc2l0LXBhcmVudHNcIjtcbmltcG9ydCB7IGZyb21IdG1sIH0gZnJvbSBcImhhc3QtdXRpbC1mcm9tLWh0bWxcIjtcbmltcG9ydCB7IHRvSHRtbCB9IGZyb20gXCJoYXN0LXV0aWwtdG8taHRtbFwiO1xuaW1wb3J0IHsgRWxlbWVudENvbnRlbnQsIEVsZW1lbnQgfSBmcm9tIFwiaGFzdFwiO1xuXG5pbXBvcnQgQ29kZVN0eWxlclBsdWdpbiBmcm9tIFwiLi9tYWluXCI7XG5pbXBvcnQgeyBTRVRUSU5HU19TT1VSQ0VQQVRIX1BSRUZJWCwgVFJBTlNJVElPTl9MRU5HVEggfSBmcm9tIFwiLi9TZXR0aW5nc1wiO1xuaW1wb3J0IHsgQ29kZWJsb2NrUGFyYW1ldGVycywgZ2V0RmlsZUNvbnRlbnRMaW5lcywgaXNDb2RlYmxvY2tJZ25vcmVkLCBpc0xhbmd1YWdlSWdub3JlZCwgcGFyc2VDb2RlYmxvY2tTb3VyY2UgfSBmcm9tIFwiLi9QYXJzaW5nL0NvZGVibG9ja1BhcnNpbmdcIjtcbmltcG9ydCB7IElubGluZUNvZGVQYXJhbWV0ZXJzLCBwYXJzZUlubGluZUNvZGUgfSBmcm9tIFwiLi9QYXJzaW5nL0lubGluZUNvZGVQYXJzaW5nXCI7XG5pbXBvcnQgeyBjcmVhdGVIZWFkZXIsIGNyZWF0ZUlubGluZU9wZW5lciwgZ2V0TGluZUNsYXNzIGFzIGdldExpbmVDbGFzc2VzIH0gZnJvbSBcIi4vQ29kZWJsb2NrRGVjb3JhdGluZ1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZGluZ1ZpZXdDb2RlYmxvY2tEZWNvcmF0aW5nUG9zdFByb2Nlc3NvcihlbGVtZW50OiBIVE1MRWxlbWVudCwge3NvdXJjZVBhdGgsZ2V0U2VjdGlvbkluZm8sZnJvbnRtYXR0ZXJ9OiB7c291cmNlUGF0aDogc3RyaW5nLCBnZXRTZWN0aW9uSW5mbzogKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbiB8IG51bGwsIGZyb250bWF0dGVyOiBGcm9udE1hdHRlckNhY2hlIHwgdW5kZWZpbmVkfSwgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luLCBlZGl0aW5nRW1iZWRzID0gZmFsc2UpIHtcblx0Y29uc3QgY2FjaGU6IENhY2hlZE1ldGFkYXRhIHwgbnVsbCA9IHBsdWdpbi5hcHAubWV0YWRhdGFDYWNoZS5nZXRDYWNoZShzb3VyY2VQYXRoKTtcblx0aWYgKCFzb3VyY2VQYXRoIHx8ICFlbGVtZW50IHx8IChmcm9udG1hdHRlciA/PyBjYWNoZT8uZnJvbnRtYXR0ZXIpPy5bXCJjb2RlLXN0eWxlci1pZ25vcmVcIl0gPT09IHRydWUpXG5cdFx0cmV0dXJuO1xuXG5cdGVkaXRpbmdFbWJlZHMgPSBlZGl0aW5nRW1iZWRzIHx8IEJvb2xlYW4oZWxlbWVudC5tYXRjaFBhcmVudChcIi5jbS1lbWJlZC1ibG9ja1wiKSk7XG5cdGNvbnN0IHNwZWNpZmljID0gIWVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi52aWV3LWNvbnRlbnQgPiAqXCIpO1xuXHRjb25zdCBwcmludGluZyA9IEJvb2xlYW4oZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiZGl2LnByaW50ID4gKlwiKSkgfHwgQm9vbGVhbihlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJkaXYuc2xpZGVzID4gKlwiKSk7XG5cdGlmIChwcmludGluZyAmJiAhcGx1Z2luLnNldHRpbmdzLmRlY29yYXRlUHJpbnQpXG5cdFx0cmV0dXJuO1xuXG5cdGNvbnN0IGNvZGVibG9ja1ByZUVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudD4gPSBhd2FpdCBnZXRDb2RlYmxvY2tQcmVFbGVtZW50cyhlbGVtZW50LHNwZWNpZmljLGVkaXRpbmdFbWJlZHMpO1xuXHRpZiAoY29kZWJsb2NrUHJlRWxlbWVudHMubGVuZ3RoID09PSAwICYmICEoZWRpdGluZ0VtYmVkcyAmJiBzcGVjaWZpYykpXG5cdFx0cmV0dXJuO1xuXG5cdGNvbnN0IGNvZGVibG9ja1NlY3Rpb25JbmZvOiBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbiB8IG51bGwgPSBnZXRTZWN0aW9uSW5mbyhjb2RlYmxvY2tQcmVFbGVtZW50c1swXSk7XG5cdGlmIChjb2RlYmxvY2tTZWN0aW9uSW5mbyAmJiBzcGVjaWZpYyAmJiAhZWRpdGluZ0VtYmVkcylcblx0XHRhd2FpdCByZW5kZXJTcGVjaWZpY1JlYWRpbmdTZWN0aW9uKGNvZGVibG9ja1ByZUVsZW1lbnRzLHNvdXJjZVBhdGgsY29kZWJsb2NrU2VjdGlvbkluZm8scGx1Z2luKTtcblx0ZWxzZSBpZiAoc3BlY2lmaWMgJiYgc291cmNlUGF0aC5zdGFydHNXaXRoKFNFVFRJTkdTX1NPVVJDRVBBVEhfUFJFRklYKSlcblx0XHRhd2FpdCByZW5kZXJTZXR0aW5ncyhjb2RlYmxvY2tQcmVFbGVtZW50cyxzb3VyY2VQYXRoLHBsdWdpbik7XG5cdGVsc2UgaWYgKHNwZWNpZmljICYmICFwcmludGluZylcblx0XHRhd2FpdCByZXRyaWdnZXJQcm9jZXNzb3IoZWxlbWVudCx7c291cmNlUGF0aCxnZXRTZWN0aW9uSW5mbyxmcm9udG1hdHRlcn0scGx1Z2luLGVkaXRpbmdFbWJlZHMpO1xuXHRlbHNlXG5cdFx0YXdhaXQgcmVuZGVyRG9jdW1lbnQoY29kZWJsb2NrUHJlRWxlbWVudHMsc291cmNlUGF0aCxjYWNoZSxlZGl0aW5nRW1iZWRzLHByaW50aW5nLHBsdWdpbik7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZGluZ1ZpZXdJbmxpbmVEZWNvcmF0aW5nUG9zdFByb2Nlc3NvcihlbGVtZW50OiBIVE1MRWxlbWVudCwge3NvdXJjZVBhdGh9OiB7c291cmNlUGF0aDogc3RyaW5nLCBnZXRTZWN0aW9uSW5mbzogKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbiB8IG51bGwsIGZyb250bWF0dGVyOiBGcm9udE1hdHRlckNhY2hlIHwgdW5kZWZpbmVkfSwgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luKSB7XG5cdGlmICghc291cmNlUGF0aCB8fCAhZWxlbWVudClcblx0XHRyZXR1cm47XG5cdGZvciAoY29uc3QgaW5saW5lQ29kZUVsZW1lbnQgb2YgQXJyYXkuZnJvbShlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6bm90KHByZSkgPiBjb2RlXCIpKSkge1xuXHRcdGF3YWl0IHJlbWFrZUlubGluZUNvZGUoaW5saW5lQ29kZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQscGx1Z2luKTtcblx0fVxufVxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lSZWFkaW5nTW9kZUVsZW1lbnRzKCk6IHZvaWQge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmNvZGUtc3R5bGVyLXByZS1wYXJlbnRcIikuZm9yRWFjaChjb2RlYmxvY2tQcmVQYXJlbnQgPT4ge1xuXHRcdGNvZGVibG9ja1ByZVBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKFwiY29kZS1zdHlsZXItcHJlLXBhcmVudFwiKTtcblx0fSk7XG5cdFtcblx0XHQuLi5BcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJwcmUuY29kZS1zdHlsZXItcHJlIGRpdltjbGFzc149J2NvZGUtc3R5bGVyLWhlYWRlci1jb250YWluZXInXVwiKSksXG5cdFx0Li4uQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwicHJlLmNvZGUtc3R5bGVyLXByZSBkaXZbY2xhc3NePSdjb2RlLXN0eWxlci1saW5lLW51bWJlciddXCIpKSxcblx0XHQuLi5BcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6bm90KHByZSkgPiBjb2RlIHNwYW4uY29kZS1zdHlsZXItaW5saW5lLW9wZW5lclwiKSksXG5cdF0uZm9yRWFjaChlbGVtZW50ID0+IGVsZW1lbnQucmVtb3ZlKCkpO1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwicHJlLmNvZGUtc3R5bGVyLXByZVwiKS5mb3JFYWNoKChjb2RlYmxvY2tQcmVFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuXHRcdGNvZGVibG9ja1ByZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImNvZGUtc3R5bGVyLXByZVwiKTtcblx0XHRjb2RlYmxvY2tQcmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2RlLXN0eWxlci1mb2xkZWRcIik7XG5cdFx0Y29kZWJsb2NrUHJlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIi0tdHJ1ZS1oZWlnaHRcIik7XG5cdFx0Y29kZWJsb2NrUHJlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIi0tbGluZS1udW1iZXItbWFyZ2luXCIpO1xuXHRcdGNvZGVibG9ja1ByZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJtYXgtaGVpZ2h0XCIpO1xuXHRcdGNvZGVibG9ja1ByZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ3aGl0ZS1zcGFjZVwiKTtcblx0fSk7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJwcmUgPiBjb2RlIH4gY29kZS5sYW5ndWFnZS1vdXRwdXRcIikuZm9yRWFjaCgoZXhlY3V0ZUNvZGVPdXRwdXQ6IEhUTUxFbGVtZW50KSA9PiB7XG5cdFx0ZXhlY3V0ZUNvZGVPdXRwdXQuY2xhc3NMaXN0LnJlbW92ZShcImV4ZWN1dGUtY29kZS1vdXRwdXRcIik7XG5cdFx0ZXhlY3V0ZUNvZGVPdXRwdXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCItLXRydWUtaGVpZ2h0XCIpO1xuXHRcdGV4ZWN1dGVDb2RlT3V0cHV0LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwibWF4LWhlaWdodFwiKTtcblx0fSk7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJwcmUgPiBjb2RlOm50aC1vZi10eXBlKDEpXCIpLmZvckVhY2goKGNvZGVibG9ja0NvZGVFbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuXHRcdGNvZGVibG9ja0NvZGVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiLS10cnVlLWhlaWdodFwiKTtcblx0XHRjb2RlYmxvY2tDb2RlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIi0tbGluZS13cmFwcGluZ1wiKTtcblx0XHRjb2RlYmxvY2tDb2RlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIi0tbGluZS1hY3RpdmUtd3JhcHBpbmdcIik7XG5cdFx0Y29kZWJsb2NrQ29kZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJtYXgtaGVpZ2h0XCIpO1xuXHRcdGNvZGVibG9ja0NvZGVFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwid2hpdGUtc3BhY2VcIik7XG5cdFx0Y29kZWJsb2NrQ29kZUVsZW1lbnQuaW5uZXJIVE1MID0gQXJyYXkuZnJvbShjb2RlYmxvY2tDb2RlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiY29kZSA+IFtjbGFzcyo9XFxcImNvZGUtc3R5bGVyLWxpbmVcXFwiXVwiKSkucmVkdWNlKChyZWNvbnN0cnVjdGVkQ29kZWJsb2NrTGluZXM6IEFycmF5PHN0cmluZz4sIGNvZGVibG9ja0xpbmU6IEhUTUxFbGVtZW50KTogQXJyYXk8c3RyaW5nPiA9PiB7XG5cdFx0XHRjb25zdCBjb2RlYmxvY2tMaW5lVGV4dCA9IChjb2RlYmxvY2tMaW5lLmZpcnN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQpO1xuXHRcdFx0aWYgKGNvZGVibG9ja0xpbmVUZXh0KVxuXHRcdFx0XHRyZWNvbnN0cnVjdGVkQ29kZWJsb2NrTGluZXMucHVzaChjb2RlYmxvY2tMaW5lVGV4dC5pbm5lckhUTUwpO1xuXHRcdFx0cmV0dXJuIHJlY29uc3RydWN0ZWRDb2RlYmxvY2tMaW5lcztcblx0XHR9LFtdKS5qb2luKFwiXFxuXCIpK1wiXFxuXCI7XG5cdH0pO1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOm5vdChwcmUpID4gY29kZVwiKS5mb3JFYWNoKChpbmxpbmVDb2RlRWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcblx0XHRpbmxpbmVDb2RlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiY29kZS1zdHlsZXItaGlnaGxpZ2h0ZWRcIik7XG5cdFx0aW5saW5lQ29kZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImNvZGUtc3R5bGVyLWhpZ2hsaWdodC1pZ25vcmVcIik7XG5cdFx0aW5saW5lQ29kZUVsZW1lbnQuaW5uZXJUZXh0ID0gaW5saW5lQ29kZUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwicGFyYW1ldGVyc1wiKSArIGlubGluZUNvZGVFbGVtZW50LmlubmVyVGV4dDtcblx0fSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbmRlclNwZWNpZmljUmVhZGluZ1NlY3Rpb24oY29kZWJsb2NrUHJlRWxlbWVudHM6IEFycmF5PEhUTUxFbGVtZW50Piwgc291cmNlUGF0aDogc3RyaW5nLCBjb2RlYmxvY2tTZWN0aW9uSW5mbzogTWFya2Rvd25TZWN0aW9uSW5mb3JtYXRpb24sIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbikge1xuXHRjb25zdCBjb2RlYmxvY2tzUGFyYW1ldGVycyA9IChhd2FpdCBwYXJzZUNvZGVibG9ja1NvdXJjZShBcnJheS5mcm9tKHtsZW5ndGg6IGNvZGVibG9ja1NlY3Rpb25JbmZvLmxpbmVFbmQtY29kZWJsb2NrU2VjdGlvbkluZm8ubGluZVN0YXJ0KzF9LCAoXyxudW0pID0+IG51bSArIGNvZGVibG9ja1NlY3Rpb25JbmZvLmxpbmVTdGFydCkubWFwKChsaW5lTnVtYmVyKT0+Y29kZWJsb2NrU2VjdGlvbkluZm8udGV4dC5zcGxpdChcIlxcblwiKVtsaW5lTnVtYmVyXSkscGx1Z2luLHNvdXJjZVBhdGgpKS5jb2RlYmxvY2tzUGFyYW1ldGVycztcblx0YXdhaXQgcmVtYWtlQ29kZWJsb2Nrcyhjb2RlYmxvY2tQcmVFbGVtZW50cyxjb2RlYmxvY2tzUGFyYW1ldGVycyxzb3VyY2VQYXRoLHRydWUsZmFsc2UscGx1Z2luKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHJlbmRlclNldHRpbmdzKGNvZGVibG9ja1ByZUVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudD4sIHNvdXJjZVBhdGg6IHN0cmluZywgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luKSB7XG5cdGNvbnN0IGNvZGVibG9ja3NQYXJhbWV0ZXJzID0gKGF3YWl0IHBhcnNlQ29kZWJsb2NrU291cmNlKHNvdXJjZVBhdGguc3Vic3RyaW5nKFNFVFRJTkdTX1NPVVJDRVBBVEhfUFJFRklYLmxlbmd0aCkuc3BsaXQoXCJcXG5cIikscGx1Z2luKSkuY29kZWJsb2Nrc1BhcmFtZXRlcnM7XG5cdGF3YWl0IHJlbWFrZUNvZGVibG9ja3MoY29kZWJsb2NrUHJlRWxlbWVudHMsY29kZWJsb2Nrc1BhcmFtZXRlcnMsc291cmNlUGF0aCx0cnVlLGZhbHNlLHBsdWdpbik7XG59XG5hc3luYyBmdW5jdGlvbiByZW5kZXJEb2N1bWVudChjb2RlYmxvY2tQcmVFbGVtZW50czogQXJyYXk8SFRNTEVsZW1lbnQ+LCBzb3VyY2VQYXRoOiBzdHJpbmcsIGNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGwsIGVkaXRpbmdFbWJlZHM6IGJvb2xlYW4sIHByaW50aW5nOiBib29sZWFuLCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4pIHtcblx0Y29uc3QgY29kZWJsb2Nrc1BhcmFtZXRlcnM6IEFycmF5PENvZGVibG9ja1BhcmFtZXRlcnM+ID0gYXdhaXQgZ2V0Q29kZWJsb2Nrc1BhcmFtZXRlcnMoc291cmNlUGF0aCxjYWNoZSxwbHVnaW4sZWRpdGluZ0VtYmVkcyk7XG5cdGF3YWl0IHJlbWFrZUNvZGVibG9ja3MoY29kZWJsb2NrUHJlRWxlbWVudHMsY29kZWJsb2Nrc1BhcmFtZXRlcnMsc291cmNlUGF0aCwhcHJpbnRpbmcsdHJ1ZSxwbHVnaW4pO1xufVxuYXN5bmMgZnVuY3Rpb24gcmV0cmlnZ2VyUHJvY2Vzc29yKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb250ZXh0OiB7c291cmNlUGF0aDogc3RyaW5nLCBnZXRTZWN0aW9uSW5mbzogKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBNYXJrZG93blNlY3Rpb25JbmZvcm1hdGlvbiB8IG51bGwsIGZyb250bWF0dGVyOiBGcm9udE1hdHRlckNhY2hlIHwgdW5kZWZpbmVkfSwgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luLCBlZGl0aW5nRW1iZWRzOiBib29sZWFuKSB7XG5cdGlmIChlbGVtZW50Lm1hdGNoUGFyZW50KFwiZGl2LmJsb2NrLWxhbmd1YWdlLWRhdGF2aWV3anNcIikgJiYgaXNDb2RlYmxvY2tJZ25vcmVkKFwiZGF0YXZpZXdqc1wiLHBsdWdpbi5zZXR0aW5ncy5wcm9jZXNzZWRDb2RlYmxvY2tzV2hpdGVsaXN0KSlcblx0XHRyZXR1cm47XG5cdGF3YWl0IHNsZWVwKDUwKTtcblx0ZWRpdGluZ0VtYmVkcyA9IGVkaXRpbmdFbWJlZHMgfHwgQm9vbGVhbihlbGVtZW50Lm1hdGNoUGFyZW50KFwiLmNtLWVtYmVkLWJsb2NrXCIpKTtcblx0aWYgKGVkaXRpbmdFbWJlZHMgfHwgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWRtb25pdGlvbi1jb250ZW50XCIpKSB7XG5cdFx0Y29uc3QgY29udGVudEVsID0gZWxlbWVudC5tYXRjaFBhcmVudChcIi52aWV3LWNvbnRlbnRcIikgPz8gZWxlbWVudC5tYXRjaFBhcmVudChcImRpdi5wcmludFwiKTtcblx0XHRpZiAoY29udGVudEVsICE9PSBudWxsKVxuXHRcdFx0YXdhaXQgcmVhZGluZ1ZpZXdDb2RlYmxvY2tEZWNvcmF0aW5nUG9zdFByb2Nlc3Nvcihjb250ZW50RWwgYXMgSFRNTEVsZW1lbnQsY29udGV4dCxwbHVnaW4sZWRpdGluZ0VtYmVkcyk7IC8vIFJlLXJlbmRlciB3aG9sZSBkb2N1bWVudFxuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbWFrZUNvZGVibG9ja3MoY29kZWJsb2NrUHJlRWxlbWVudHM6IEFycmF5PEhUTUxFbGVtZW50PiwgY29kZWJsb2Nrc1BhcmFtZXRlcnM6IEFycmF5PENvZGVibG9ja1BhcmFtZXRlcnM+LCBzb3VyY2VQYXRoOiBzdHJpbmcsIGR5bmFtaWM6IGJvb2xlYW4sIHNraXBTdHlsZWQ6IGJvb2xlYW4sIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbikge1xuXHRpZiAoY29kZWJsb2NrUHJlRWxlbWVudHMubGVuZ3RoICE9PSBjb2RlYmxvY2tzUGFyYW1ldGVycy5sZW5ndGgpXG5cdFx0cmV0dXJuO1xuXHRmb3IgKGNvbnN0IFtrZXksY29kZWJsb2NrUHJlRWxlbWVudF0gb2YgQXJyYXkuZnJvbShjb2RlYmxvY2tQcmVFbGVtZW50cykuZW50cmllcygpKSB7XG5cdFx0Y29uc3QgY29kZWJsb2NrUGFyYW1ldGVycyA9IGNvZGVibG9ja3NQYXJhbWV0ZXJzW2tleV07XG5cdFx0Y29uc3QgY29kZWJsb2NrQ29kZUVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGNvZGVibG9ja1ByZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcInByZSA+IGNvZGVcIik7XG5cdFx0aWYgKCFjb2RlYmxvY2tDb2RlRWxlbWVudClcblx0XHRcdHJldHVybjtcblx0XHRpZiAoQXJyYXkuZnJvbShjb2RlYmxvY2tDb2RlRWxlbWVudC5jbGFzc0xpc3QpLnNvbWUoY2xhc3NOYW1lID0+IC9ebGFuZ3VhZ2UtXFxTKy8udGVzdChjbGFzc05hbWUpKSlcblx0XHRcdHdoaWxlKCFjb2RlYmxvY2tDb2RlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJpcy1sb2FkZWRcIikpXG5cdFx0XHRcdGF3YWl0IHNsZWVwKDIpO1xuXHRcdGlmIChza2lwU3R5bGVkICYmIGNvZGVibG9ja0NvZGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJjb2RlIFtjbGFzcyo9J2NvZGUtc3R5bGVyLWxpbmUnXVwiKSlcblx0XHRcdGNvbnRpbnVlO1xuXHRcdGlmIChpc0xhbmd1YWdlSWdub3JlZChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlLHBsdWdpbi5zZXR0aW5ncy5leGNsdWRlZExhbmd1YWdlcykgfHwgY29kZWJsb2NrUGFyYW1ldGVycy5pZ25vcmUpXG5cdFx0XHRjb250aW51ZTtcblx0XHRhd2FpdCByZW1ha2VDb2RlYmxvY2soY29kZWJsb2NrQ29kZUVsZW1lbnQsY29kZWJsb2NrUHJlRWxlbWVudCxjb2RlYmxvY2tQYXJhbWV0ZXJzLHNvdXJjZVBhdGgsZHluYW1pYyxwbHVnaW4pO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbWFrZUNvZGVibG9jayhjb2RlYmxvY2tDb2RlRWxlbWVudDogSFRNTEVsZW1lbnQsIGNvZGVibG9ja1ByZUVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzLCBzb3VyY2VQYXRoOiBzdHJpbmcsIGR5bmFtaWM6IGJvb2xlYW4sIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbikge1xuXHRpZiAoZHluYW1pYylcblx0XHRwbHVnaW4uZXhlY3V0ZUNvZGVNdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoY29kZWJsb2NrUHJlRWxlbWVudCx7Y2hpbGRMaXN0OiB0cnVlLHN1YnRyZWU6IHRydWUsYXR0cmlidXRlczogdHJ1ZSxjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7IC8vIEFkZCBFeGVjdXRlIENvZGUgT2JzZXJ2ZXJcblx0XG5cdGluc2VydEhlYWRlcihjb2RlYmxvY2tQcmVFbGVtZW50LGNvZGVibG9ja1BhcmFtZXRlcnMsc291cmNlUGF0aCxwbHVnaW4sZHluYW1pYyk7XG5cdFxuXHRjb2RlYmxvY2tQcmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uZ2V0UHJlQ2xhc3Nlcyhjb2RlYmxvY2tQYXJhbWV0ZXJzLGR5bmFtaWMpKTtcblx0Y29kZWJsb2NrUHJlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkZWZhdWx0Rm9sZFwiLGNvZGVibG9ja1BhcmFtZXRlcnMuZm9sZC5lbmFibGVkLnRvU3RyaW5nKCkpO1xuXHRpZiAoY29kZWJsb2NrUHJlRWxlbWVudC5wYXJlbnRFbGVtZW50KVxuXHRcdGNvZGVibG9ja1ByZUVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItcHJlLXBhcmVudFwiKTtcblx0XG5cdGlmICghY29kZWJsb2NrQ29kZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcImNvZGUgW2NsYXNzKj0nY29kZS1zdHlsZXItbGluZSddXCIpKSAvLyBJZ25vcmUgc3R5bGVkIGxpbmVzXG5cdFx0ZGVjb3JhdGVDb2RlYmxvY2tMaW5lcyhjb2RlYmxvY2tDb2RlRWxlbWVudCxjb2RlYmxvY2tQYXJhbWV0ZXJzLHNvdXJjZVBhdGgscGx1Z2luKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIHJlbWFrZUlubGluZUNvZGUoaW5saW5lQ29kZUVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0aWYgKCFwbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmlubGluZS5zeW50YXhIaWdobGlnaHQgfHwgaW5saW5lQ29kZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY29kZS1zdHlsZXItaW5saW5lXCIpKVxuXHRcdHJldHVybjtcblx0Y29uc3QgaW5saW5lQ29kZVRleHQgPSBpbmxpbmVDb2RlRWxlbWVudC5pbm5lclRleHQ7XG5cdGNvbnN0IHtwYXJhbWV0ZXJzLHRleHR9ID0gcGFyc2VJbmxpbmVDb2RlKGlubGluZUNvZGVUZXh0KTtcblx0aWYgKHBhcmFtZXRlcnMpIHtcblx0XHRpbmxpbmVDb2RlRWxlbWVudC5pbm5lckhUTUwgPSBhd2FpdCBnZXRIaWdobGlnaHRlZEhUTUwocGFyYW1ldGVycyx0ZXh0LHBsdWdpbik7XG5cdFx0aW5saW5lQ29kZUVsZW1lbnQuaW5uZXJIVE1MID0gaW5saW5lQ29kZUVsZW1lbnQuaW5uZXJIVE1MICsgXCImWmVyb1dpZHRoU3BhY2U7XCI7XG5cdFx0aW5saW5lQ29kZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNvZGUtc3R5bGVyLWlubGluZVwiKTtcblx0XHRjb25zdCBwYXJhbWV0ZXJTdHJpbmcgPSBpbmxpbmVDb2RlVGV4dC5zdWJzdHJpbmcoMCxpbmxpbmVDb2RlVGV4dC5sYXN0SW5kZXhPZih0ZXh0KSk7XG5cdFx0aW5saW5lQ29kZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwicGFyYW1ldGVyc1wiLHBhcmFtZXRlclN0cmluZyk7IC8vIFN0b3JlIHBhcmFtZXRlciBzdHJpbmcgYXMgYXR0cmlidXRlIHNvIG9yaWdpbmFsIHRleHQgY2FuIGJlIHJlc3RvcmVkIG9uIHBsdWdpbiByZW1vdmFsXG5cdFx0aWYgKHBhcmFtZXRlcnMuaWNvbiB8fCBwYXJhbWV0ZXJzLnRpdGxlKVxuXHRcdFx0aW5saW5lQ29kZUVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNyZWF0ZUlubGluZU9wZW5lcihwYXJhbWV0ZXJzLHBsdWdpbi5sYW5ndWFnZUljb25zKSxpbmxpbmVDb2RlRWxlbWVudC5jaGlsZE5vZGVzWzBdKTtcblx0fSBlbHNlIGlmICghcGFyYW1ldGVycyAmJiB0ZXh0KSB7XG5cdFx0aW5saW5lQ29kZUVsZW1lbnQuaW5uZXJUZXh0ID0gdGV4dDtcblx0XHRpbmxpbmVDb2RlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiY29kZS1zdHlsZXItaW5saW5lXCIpO1xuXHR9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvZGVibG9ja1ByZUVsZW1lbnRzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzcGVjaWZpYzogYm9vbGVhbixlZGl0aW5nRW1iZWRzOiBib29sZWFuKTogUHJvbWlzZTxBcnJheTxIVE1MRWxlbWVudD4+IHtcblx0bGV0IGNvZGVibG9ja1ByZUVsZW1lbnRzOiBBcnJheTxIVE1MRWxlbWVudD47XG5cdGlmICghZWRpdGluZ0VtYmVkcyAmJiAhc3BlY2lmaWMpXG5cdFx0Y29kZWJsb2NrUHJlRWxlbWVudHMgPSBBcnJheS5mcm9tKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tYXJrZG93bi1yZWFkaW5nLXZpZXcgcHJlOm5vdCguZnJvbnRtYXR0ZXIpXCIpKTtcblx0ZWxzZSBpZiAoZWRpdGluZ0VtYmVkcyAmJiAhc3BlY2lmaWMpXG5cdFx0Y29kZWJsb2NrUHJlRWxlbWVudHMgPSBBcnJheS5mcm9tKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tYXJrZG93bi1zb3VyY2UtdmlldyAuY20tZW1iZWQtYmxvY2sgcHJlOm5vdCguZnJvbnRtYXR0ZXIpXCIpKTtcblx0ZWxzZSBpZiAoIWVkaXRpbmdFbWJlZHMgJiYgc3BlY2lmaWMpIHtcblx0XHRjb2RlYmxvY2tQcmVFbGVtZW50cyA9IEFycmF5LmZyb20oZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwicHJlOm5vdCguZnJvbnRtYXR0ZXIpXCIpKTtcblx0XHRjb25zdCBhZG1vbml0aW9uQ29kZUVsZW1lbnQgPSBjb2RlYmxvY2tQcmVFbGVtZW50cz8uWzBdPy5xdWVyeVNlbGVjdG9yKFwicHJlOm5vdChbY2xhc3NdKSA+IGNvZGVbY2xhc3MqPVxcXCJsYW5ndWFnZS1hZC1cXFwiXVwiKTtcblx0XHRpZiAoYWRtb25pdGlvbkNvZGVFbGVtZW50KSB7XG5cdFx0XHRhd2FpdCBzbGVlcCg1MCk7IC8vVE9ET1xuXHRcdFx0Y29kZWJsb2NrUHJlRWxlbWVudHMgPSBBcnJheS5mcm9tKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInByZTpub3QoLmZyb250bWF0dGVyKVwiKSk7XG5cdFx0fVxuXHR9IGVsc2Vcblx0XHRjb2RlYmxvY2tQcmVFbGVtZW50cyA9IFtdO1xuXHRyZXR1cm4gY29kZWJsb2NrUHJlRWxlbWVudHM7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRDb2RlYmxvY2tzUGFyYW1ldGVycyhzb3VyY2VQYXRoOiBzdHJpbmcsIGNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGwsIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbiwgZWRpdGluZ0VtYmVkczogYm9vbGVhbik6IFByb21pc2U8QXJyYXk8Q29kZWJsb2NrUGFyYW1ldGVycz4+IHtcblx0bGV0IGNvZGVibG9ja3NQYXJhbWV0ZXJzOiBBcnJheTxDb2RlYmxvY2tQYXJhbWV0ZXJzPiA9IFtdO1xuXHRjb25zdCBmaWxlQ29udGVudExpbmVzID0gYXdhaXQgZ2V0RmlsZUNvbnRlbnRMaW5lcyhzb3VyY2VQYXRoLHBsdWdpbik7XG5cdGlmICghZmlsZUNvbnRlbnRMaW5lcylcblx0XHRyZXR1cm4gW107XG5cblx0aWYgKHR5cGVvZiBjYWNoZT8uc2VjdGlvbnMgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRmb3IgKGNvbnN0IHNlY3Rpb24gb2YgY2FjaGUuc2VjdGlvbnMpIHtcblx0XHRcdGlmICghZWRpdGluZ0VtYmVkcyB8fCBzZWN0aW9uLnR5cGUgPT09IFwiY29kZVwiIHx8IHNlY3Rpb24udHlwZSA9PT0gXCJjYWxsb3V0XCIpIHtcblx0XHRcdFx0Y29uc3QgcGFyc2VkQ29kZWJsb2Nrc1BhcmFtZXRlcnMgPSBhd2FpdCBwYXJzZUNvZGVibG9ja1NvdXJjZShmaWxlQ29udGVudExpbmVzLnNsaWNlKHNlY3Rpb24ucG9zaXRpb24uc3RhcnQubGluZSxzZWN0aW9uLnBvc2l0aW9uLmVuZC5saW5lKzEpLHBsdWdpbixzb3VyY2VQYXRoKTtcblx0XHRcdFx0aWYgKCFlZGl0aW5nRW1iZWRzIHx8IHBhcnNlZENvZGVibG9ja3NQYXJhbWV0ZXJzLm5lc3RlZClcblx0XHRcdFx0XHRjb2RlYmxvY2tzUGFyYW1ldGVycyA9IGNvZGVibG9ja3NQYXJhbWV0ZXJzLmNvbmNhdChwYXJzZWRDb2RlYmxvY2tzUGFyYW1ldGVycy5jb2RlYmxvY2tzUGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Vcblx0XHRjb25zb2xlLmVycm9yKGBNZXRhZGF0YSBjYWNoZSBub3QgZm91bmQgZm9yIGZpbGU6ICR7c291cmNlUGF0aH1gKTtcblx0cmV0dXJuIGNvZGVibG9ja3NQYXJhbWV0ZXJzO1xufVxuZnVuY3Rpb24gaW5zZXJ0SGVhZGVyKGNvZGVibG9ja1ByZUVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzLCBzb3VyY2VQYXRoOiBzdHJpbmcsIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbiwgZHluYW1pYzogYm9vbGVhbik6IHZvaWQge1xuXHRjb25zdCBoZWFkZXJDb250YWluZXIgPSBjcmVhdGVIZWFkZXIoY29kZWJsb2NrUGFyYW1ldGVycywgcGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncywgc291cmNlUGF0aCwgcGx1Z2luKTtcblx0aWYgKGR5bmFtaWMpXG5cdFx0aGVhZGVyQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCgpPT57dG9nZ2xlRm9sZChjb2RlYmxvY2tQcmVFbGVtZW50KTt9KTsgLy8gQWRkIGxpc3RlbmVyIGZvciBoZWFkZXIgZm9sZGluZyBvbiBjbGlja1xuXHRjb2RlYmxvY2tQcmVFbGVtZW50Lmluc2VydEJlZm9yZShoZWFkZXJDb250YWluZXIsY29kZWJsb2NrUHJlRWxlbWVudC5jaGlsZE5vZGVzWzBdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWFkaW5nRG9jdW1lbnRGb2xkKGNvbnRlbnRFbDogSFRNTEVsZW1lbnQsIGZvbGQ/OiBib29sZWFuKSB7XG5cdGNvbnN0IGNvZGVibG9ja1ByZUVsZW1lbnRzID0gY29udGVudEVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJwcmUuY29kZS1zdHlsZXItcHJlXCIpO1xuXHRpZiAodHlwZW9mIGZvbGQgPT09IFwidW5kZWZpbmVkXCIpIC8vUmV0dXJuIGFsbCBibG9ja3MgdG8gb3JpZ2luYWwgc3RhdGVcblx0XHRjb2RlYmxvY2tQcmVFbGVtZW50cy5mb3JFYWNoKChjb2RlYmxvY2tQcmVFbGVtZW50OiBIVE1MRWxlbWVudCk9Pnt0b2dnbGVGb2xkKGNvZGVibG9ja1ByZUVsZW1lbnQsKGNvZGVibG9ja1ByZUVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGVmYXVsdEZvbGRcIik/P1wiZmFsc2VcIik9PT1cInRydWVcIik7fSk7XG5cdGVsc2UgLy9Gb2xkIG9yIHVuZm9sZCBhbGwgYmxvY2tzXG5cdFx0Y29kZWJsb2NrUHJlRWxlbWVudHMuZm9yRWFjaCgoY29kZWJsb2NrUHJlRWxlbWVudDogSFRNTEVsZW1lbnQpPT57dG9nZ2xlRm9sZChjb2RlYmxvY2tQcmVFbGVtZW50LGZvbGQpO30pO1xufVxuYXN5bmMgZnVuY3Rpb24gdG9nZ2xlRm9sZChjb2RlYmxvY2tQcmVFbGVtZW50OiBIVE1MRWxlbWVudCwgZm9sZD86IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcblx0aWYgKGNvZGVibG9ja1ByZUVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQ/LmNsYXNzTGlzdD8uY29udGFpbnMoXCJjb2RlLXN0eWxlci1oZWFkZXItY29udGFpbmVyLWhpZGRlblwiKSlcblx0XHRyZXR1cm47XG5cdGNvZGVibG9ja1ByZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInByZSA+IGNvZGVcIikuZm9yRWFjaCgoY29kZWJsb2NrQ29kZUVsZW1lbnQ6IEhUTUxFbGVtZW50KT0+Y29kZWJsb2NrQ29kZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCJtYXgtaGVpZ2h0XCIsYGNhbGMoJHtNYXRoLmNlaWwoY29kZWJsb2NrQ29kZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0KzAuMDEpfXB4ICsgdmFyKC0tY29kZS1wYWRkaW5nKSAqICR7Y29kZWJsb2NrQ29kZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZXhlY3V0ZS1jb2RlLW91dHB1dFwiKT9cIjMuNSArIHZhcigtLWhlYWRlci1zZXBhcmF0b3Itd2lkdGgpXCI6XCIyXCJ9KWApKTtcblx0Y29kZWJsb2NrUHJlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaGlkZS1zY3JvbGxcIik7XG5cdGF3YWl0IHNsZWVwKDEpO1xuXHRpZiAodHlwZW9mIGZvbGQgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0Y29kZWJsb2NrUHJlRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKFwiY29kZS1zdHlsZXItZm9sZGVkXCIpO1xuXHRlbHNlXG5cdFx0Zm9sZD9jb2RlYmxvY2tQcmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjb2RlLXN0eWxlci1mb2xkZWRcIik6Y29kZWJsb2NrUHJlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiY29kZS1zdHlsZXItZm9sZGVkXCIpO1xuXHRhd2FpdCBzbGVlcChUUkFOU0lUSU9OX0xFTkdUSCk7XG5cdGNvZGVibG9ja1ByZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcInByZSA+IGNvZGVcIikuZm9yRWFjaCgoY29kZWJsb2NrQ29kZUVsZW1lbnQ6IEhUTUxFbGVtZW50KT0+Y29kZWJsb2NrQ29kZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJtYXgtaGVpZ2h0XCIpKTtcblx0Y29kZWJsb2NrUHJlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZS1zY3JvbGxcIik7XG59XG5mdW5jdGlvbiBnZXRQcmVDbGFzc2VzKGNvZGVibG9ja1BhcmFtZXRlcnM6IENvZGVibG9ja1BhcmFtZXRlcnMsIGR5bmFtaWM6IGJvb2xlYW4pOiBBcnJheTxzdHJpbmc+IHtcblx0Y29uc3QgcHJlQ2xhc3NMaXN0ID0gW1wiY29kZS1zdHlsZXItcHJlXCJdO1xuXHRpZiAoY29kZWJsb2NrUGFyYW1ldGVycy5sYW5ndWFnZSlcblx0XHRwcmVDbGFzc0xpc3QucHVzaChgbGFuZ3VhZ2UtJHtjb2RlYmxvY2tQYXJhbWV0ZXJzLmxhbmd1YWdlfWApO1xuXHRpZiAoZHluYW1pYykge1xuXHRcdGlmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLmZvbGQuZW5hYmxlZClcblx0XHRcdHByZUNsYXNzTGlzdC5wdXNoKFwiY29kZS1zdHlsZXItZm9sZGVkXCIpO1xuXHRcdGlmIChjb2RlYmxvY2tQYXJhbWV0ZXJzLmxpbmVVbndyYXAuYWx3YXlzRW5hYmxlZClcblx0XHRcdHByZUNsYXNzTGlzdC5wdXNoKGNvZGVibG9ja1BhcmFtZXRlcnMubGluZVVud3JhcC5hY3RpdmVXcmFwP1widW53cmFwcGVkLWluYWN0aXZlXCI6XCJ1bndyYXBwZWRcIik7XG5cdFx0ZWxzZSBpZiAoY29kZWJsb2NrUGFyYW1ldGVycy5saW5lVW53cmFwLmFsd2F5c0Rpc2FibGVkKVxuXHRcdFx0cHJlQ2xhc3NMaXN0LnB1c2goXCJ3cmFwcGVkXCIpO1xuXHR9XG5cdHJldHVybiBwcmVDbGFzc0xpc3Q7XG59XG5mdW5jdGlvbiBkZWNvcmF0ZUNvZGVibG9ja0xpbmVzKGNvZGVibG9ja0NvZGVFbGVtZW50OiBIVE1MRWxlbWVudCwgY29kZWJsb2NrUGFyYW1ldGVyczogQ29kZWJsb2NrUGFyYW1ldGVycywgc291cmNlUGF0aDogc3RyaW5nLCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4pOiB2b2lkIHtcblx0bGV0IGluZGVudGF0aW9uID0gMDtcblx0Z2V0Q29kZWJsb2NrTGluZXMoY29kZWJsb2NrQ29kZUVsZW1lbnQsc291cmNlUGF0aCxwbHVnaW4pLmZvckVhY2goKGxpbmUsaW5kZXgsY29kZWJsb2NrTGluZXMpID0+IHtcblx0XHRjb25zdCBjdXJyZW50SW5kZW50YXRpb24gPSBjb3VudFRhYnMobGluZSk7XG5cdFx0aWYgKGN1cnJlbnRJbmRlbnRhdGlvbiA+IGluZGVudGF0aW9uKSB7XG5cdFx0XHQvL1RPRE8gKEBtYXl1cmFua3YpIEFkZCBmb2xkIHRvIHByZXZpb3VzIHBvaW50XG5cdFx0XHRpbmRlbnRhdGlvbiA9IGN1cnJlbnRJbmRlbnRhdGlvbjtcblx0XHR9IGVsc2UgaWYgKGN1cnJlbnRJbmRlbnRhdGlvbiA8IGluZGVudGF0aW9uKSB7XG5cdFx0XHQvL1RPRE8gKEBtYXl1cmFua3YpIENsb3NlIGFsbCBmb2xkcyB0byBsZXZlbCBvZiBjdXJyZW50SW5kZW5hdGlvblxuXHRcdFx0aW5kZW50YXRpb24gPSBjdXJyZW50SW5kZW50YXRpb247XG5cdFx0fVxuXHRcdGlmIChjdXJyZW50SW5kZW50YXRpb24gPiAwKSB7XG5cdFx0XHQvL1RPRE8gKEBtYXl1cmFua3YpIEFkZCBpbmRlbnRhdGlvbiBsaW5lXG5cdFx0fVxuXHRcdGlmIChpbmRleCAhPT0gY29kZWJsb2NrTGluZXMubGVuZ3RoLTEpXG5cdFx0XHRpbnNlcnRMaW5lV3JhcHBlcihjb2RlYmxvY2tDb2RlRWxlbWVudCxjb2RlYmxvY2tQYXJhbWV0ZXJzLGluZGV4KzEsbGluZSxwbHVnaW4uc2V0dGluZ3MuY3VycmVudFRoZW1lLnNldHRpbmdzLmNvZGVibG9jay5saW5lTnVtYmVycyk7XG5cdH0pO1xufVxuZnVuY3Rpb24gZ2V0Q29kZWJsb2NrTGluZXMoY29kZWJsb2NrQ29kZUVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzb3VyY2VQYXRoOiBzdHJpbmcsIHBsdWdpbjogQ29kZVN0eWxlclBsdWdpbik6IEFycmF5PHN0cmluZz4ge1xuXHRjb25zdCBodG1sVHJlZSA9IGZyb21IdG1sKGNvZGVibG9ja0NvZGVFbGVtZW50LmlubmVySFRNTC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIikse2ZyYWdtZW50OiB0cnVlfSk7XG5cdGxldCBjb2RlYmxvY2tIVE1MID0gY29kZWJsb2NrQ29kZUVsZW1lbnQuaW5uZXJIVE1MO1xuXHR2aXNpdFBhcmVudHMoaHRtbFRyZWUsW1widGV4dFwiLFwiZWxlbWVudFwiXSwobm9kZSxhbmNlc3RvcnMpPT57XG5cdFx0aWYgKG5vZGUudHlwZSA9PT0gXCJlbGVtZW50XCIgJiYgbm9kZS50YWdOYW1lID09PSBcImJyXCIpIHtcblx0XHRcdGlmIChhbmNlc3RvcnMubGVuZ3RoID49IDIpIHtcblx0XHRcdFx0Y29kZWJsb2NrSFRNTCA9IGNvZGVibG9ja0hUTUwucmVwbGFjZSgvXFxuLyxhbmNlc3RvcnMuc2xpY2UoMSkucmVkdWNlKChyZXN1bHQsZWxlbWVudCk9Pntcblx0XHRcdFx0XHRjb25zdCBlbGVtZW50Q29weSA9IHN0cnVjdHVyZWRDbG9uZShlbGVtZW50KTtcblx0XHRcdFx0XHRlbGVtZW50Q29weS5jaGlsZHJlbiA9IFtdO1xuXHRcdFx0XHRcdGNvbnN0IHNwbGl0VGFnID0gdG9IdG1sKGVsZW1lbnRDb3B5KS5zcGxpdCgvKD88PT4pKD89PFxcLykvKTtcblx0XHRcdFx0XHRyZXR1cm4gc3BsaXRUYWcuc3BsaWNlKC0xKStyZXN1bHQrc3BsaXRUYWcuam9pbihcIlwiKTtcblx0XHRcdFx0fSxcIjxicj5cIikpO1xuXHRcdFx0fSBlbHNlXG5cdFx0XHRcdGNvZGVibG9ja0hUTUwgPSBjb2RlYmxvY2tIVE1MLnJlcGxhY2UoL1xcbi8sXCI8YnI+XCIpO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHNwbGl0SHRtbFRyZWUgPSBmcm9tSHRtbChjb2RlYmxvY2tIVE1MLHtmcmFnbWVudDogdHJ1ZX0pO1xuXHR2aXNpdFBhcmVudHMoc3BsaXRIdG1sVHJlZSxbXCJlbGVtZW50XCJdLChub2RlKT0+e1xuXHRcdGlmIChub2RlLnR5cGUgPT09IFwiZWxlbWVudFwiICYmIEFycmF5LmlzQXJyYXkobm9kZS5wcm9wZXJ0aWVzLmNsYXNzTmFtZSkgJiYgbm9kZS5wcm9wZXJ0aWVzPy5jbGFzc05hbWU/LmluY2x1ZGVzKFwiY29tbWVudFwiKSkge1xuXHRcdFx0bm9kZS5jaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4ucmVkdWNlKChyZXN1bHQ6IEFycmF5PEVsZW1lbnRDb250ZW50PiwgY2hpbGQ6IEVsZW1lbnRDb250ZW50KTogQXJyYXk8RWxlbWVudENvbnRlbnQ+ID0+IHtcblx0XHRcdFx0aWYgKGNoaWxkLnR5cGUgIT09IFwidGV4dFwiKVxuXHRcdFx0XHRcdHJlc3VsdC5wdXNoKGNoaWxkKTtcblx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdHJlc3VsdCA9IGNvbnZlcnRDb21tZW50TGlua3MocmVzdWx0LGNoaWxkLnZhbHVlLHNvdXJjZVBhdGgscGx1Z2luKTtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sW10pO1xuXHRcdH1cblx0fSk7XG5cdGNvZGVibG9ja0hUTUwgPSB0b0h0bWwoc3BsaXRIdG1sVHJlZSk7XG5cdGxldCBjb2RlYmxvY2tMaW5lcyA9IGNvZGVibG9ja0hUTUwuc3BsaXQoXCI8YnI+XCIpO1xuXHRpZiAoY29kZWJsb2NrTGluZXMubGVuZ3RoID09PSAxKVxuXHRcdGNvZGVibG9ja0xpbmVzID0gW1wiXCIsXCJcIl07XG5cdGNvZGVibG9ja0NvZGVFbGVtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdHJldHVybiBjb2RlYmxvY2tMaW5lcztcbn1cbmZ1bmN0aW9uIGNvbnZlcnRDb21tZW50TGlua3MocmVzdWx0OiBBcnJheTxFbGVtZW50Q29udGVudD4sIGNvbW1lbnRUZXh0OiBzdHJpbmcsIHNvdXJjZVBhdGg6IHN0cmluZywgcGx1Z2luOiBDb2RlU3R5bGVyUGx1Z2luKTogQXJyYXk8RWxlbWVudENvbnRlbnQ+IHtcblx0Y29uc3QgbGlua01hdGNoZXMgPSBbLi4uY29tbWVudFRleHQubWF0Y2hBbGwoLyg/OlxcW1xcW1teXFxdfFxcclxcbl0rPyg/OlxcfFteXFxdfFxcclxcbl0rPyk/XFxdXFxdfFxcWy4qP1xcXVxcKC4rXFwpKS9nKV0ucmV2ZXJzZSgpO1xuXHRjb25zdCBuZXdDaGlsZHJlbiA9IGxpbmtNYXRjaGVzLnJlZHVjZSgocmVzdWx0OiBBcnJheTxFbGVtZW50Q29udGVudD4sIGxpbmtNYXRjaDogUmVnRXhwTWF0Y2hBcnJheSk6IEFycmF5PEVsZW1lbnRDb250ZW50PiA9PiB7XG5cdFx0aWYgKGxpbmtNYXRjaD8uaW5kZXggPT09IHVuZGVmaW5lZClcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0Y29uc3QgZW5kaW5nID0gY29tbWVudFRleHQuc2xpY2UobGlua01hdGNoLmluZGV4ICsgbGlua01hdGNoWzBdLmxlbmd0aCk7XG5cdFx0cmVzdWx0LnB1c2goe3R5cGU6IFwidGV4dFwiLHZhbHVlOiBlbmRpbmd9KTtcblx0XHRjb25zdCBsaW5rVGV4dCA9IGNvbW1lbnRUZXh0LnNsaWNlKGxpbmtNYXRjaC5pbmRleCwgbGlua01hdGNoLmluZGV4ICsgbGlua01hdGNoWzBdLmxlbmd0aCk7XG5cdFx0Y29uc3QgbGlua0NvbnRhaW5lciA9IGNyZWF0ZURpdigpO1xuXHRcdE1hcmtkb3duUmVuZGVyZXIucmVuZGVyKHBsdWdpbi5hcHAsbGlua1RleHQsbGlua0NvbnRhaW5lcixzb3VyY2VQYXRoLHBsdWdpbik7XG5cdFx0Y29uc3QgbGlua0NoaWxkID0gKGZyb21IdG1sKGxpbmtDb250YWluZXIuaW5uZXJIVE1MLHtmcmFnbWVudDogdHJ1ZX0pPy5jaGlsZHJlbj8uWzBdIGFzIEVsZW1lbnQpPy5jaGlsZHJlbj8uWzBdO1xuXHRcdHJlc3VsdC5wdXNoKGxpbmtDaGlsZCk7XG5cdFx0Y29tbWVudFRleHQgPSBjb21tZW50VGV4dC5zbGljZSgwLCBsaW5rTWF0Y2guaW5kZXgpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sW10pLnJldmVyc2UoKTtcblx0cmV0dXJuIFsuLi5yZXN1bHQsIC4uLlt7dHlwZTogXCJ0ZXh0XCIsdmFsdWU6IGNvbW1lbnRUZXh0fSBhcyBFbGVtZW50Q29udGVudCwuLi5uZXdDaGlsZHJlbl1dO1xufVxuZnVuY3Rpb24gaW5zZXJ0TGluZVdyYXBwZXIoY29kZWJsb2NrQ29kZUVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb2RlYmxvY2tQYXJhbWV0ZXJzOiBDb2RlYmxvY2tQYXJhbWV0ZXJzLCBsaW5lTnVtYmVyOiBudW1iZXIsIGxpbmU6IHN0cmluZywgc2hvd0xpbmVOdW1iZXJzOiBib29sZWFuKTogdm9pZCB7XG5cdGNvbnN0IGxpbmVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0Y29kZWJsb2NrQ29kZUVsZW1lbnQuYXBwZW5kQ2hpbGQobGluZVdyYXBwZXIpO1xuXHRnZXRMaW5lQ2xhc3Nlcyhjb2RlYmxvY2tQYXJhbWV0ZXJzLGxpbmVOdW1iZXIsbGluZSkuZm9yRWFjaCgobGluZUNsYXNzKSA9PiBsaW5lV3JhcHBlci5jbGFzc0xpc3QuYWRkKGxpbmVDbGFzcykpO1xuXHRpZiAoKHNob3dMaW5lTnVtYmVycyAmJiAhY29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5hbHdheXNEaXNhYmxlZCkgfHwgY29kZWJsb2NrUGFyYW1ldGVycy5saW5lTnVtYmVycy5hbHdheXNFbmFibGVkKVxuXHRcdGxpbmVXcmFwcGVyLmFwcGVuZENoaWxkKGNyZWF0ZURpdih7Y2xzOiBcImNvZGUtc3R5bGVyLWxpbmUtbnVtYmVyXCIsIHRleHQ6IChsaW5lTnVtYmVyK2NvZGVibG9ja1BhcmFtZXRlcnMubGluZU51bWJlcnMub2Zmc2V0KS50b1N0cmluZygpfSkpO1xuXHRsaW5lV3JhcHBlci5hcHBlbmRDaGlsZChjcmVhdGVEaXYoe2NsczogXCJjb2RlLXN0eWxlci1saW5lLXRleHRcIiwgdGV4dDogc2FuaXRpemVIVE1MVG9Eb20obGluZSAhPT0gXCJcIiA/IGxpbmUgOiBcIjxicj5cIil9KSk7XG59XG5mdW5jdGlvbiBjb3VudFRhYnModGV4dDogc3RyaW5nKTogbnVtYmVyIHtcblx0bGV0IGNvdW50ID0gMDtcblx0bGV0IGluZGV4ID0gMDtcblx0d2hpbGUgKHRleHQuY2hhckF0KGluZGV4KyspID09PSBcIlxcdFwiKVxuXHRcdGNvdW50Kys7XG5cdHJldHVybiBjb3VudDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldEhpZ2hsaWdodGVkSFRNTChwYXJhbWV0ZXJzOiBJbmxpbmVDb2RlUGFyYW1ldGVycywgdGV4dDogc3RyaW5nLCBwbHVnaW46IENvZGVTdHlsZXJQbHVnaW4pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCB0ZW1wb3JhcnlSZW5kZXJpbmdDb250YWluZXIgPSBjcmVhdGVEaXYoKTtcblx0TWFya2Rvd25SZW5kZXJlci5yZW5kZXIocGx1Z2luLmFwcCxbXCJgYGBcIixwYXJhbWV0ZXJzLmxhbmd1YWdlLFwiXFxuXCIsdGV4dCxcIlxcblwiLFwiYGBgXCJdLmpvaW4oXCJcIiksdGVtcG9yYXJ5UmVuZGVyaW5nQ29udGFpbmVyLFwiXCIscGx1Z2luKTtcblx0Y29uc3QgcmVuZGVyZWRDb2RlRWxlbWVudCA9IHRlbXBvcmFyeVJlbmRlcmluZ0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiY29kZVwiKTtcblx0aWYgKCFyZW5kZXJlZENvZGVFbGVtZW50KVxuXHRcdHJldHVybiBcIkVSUk9SOiBDb3VsZCBub3QgcmVuZGVyIGhpZ2hsaWdodGVkIGNvZGVcIjtcblx0d2hpbGUocGx1Z2luLnNldHRpbmdzLmN1cnJlbnRUaGVtZS5zZXR0aW5ncy5pbmxpbmUuc3ludGF4SGlnaGxpZ2h0ICYmICFyZW5kZXJlZENvZGVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImlzLWxvYWRlZFwiKSlcblx0XHRhd2FpdCBzbGVlcCgyKTtcblx0cmV0dXJuIHJlbmRlcmVkQ29kZUVsZW1lbnQuaW5uZXJIVE1MO1xufVxuXG5leHBvcnQgY29uc3QgZXhlY3V0ZUNvZGVNdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuXHRtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb246IE11dGF0aW9uUmVjb3JkKSA9PiB7XG5cdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIgJiYgKG11dGF0aW9uLnRhcmdldCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSA9PT0gXCJQUkVcIikgeyAvLyBBZGQgZXhlY3V0ZSBjb2RlIG91dHB1dFxuXHRcdFx0Y29uc3QgZXhlY3V0ZUNvZGVPdXRwdXQgPSAobXV0YXRpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKFwicHJlID4gY29kZSB+IGNvZGUubGFuZ3VhZ2Utb3V0cHV0XCIpIGFzIEhUTUxFbGVtZW50O1xuXHRcdFx0aWYgKGV4ZWN1dGVDb2RlT3V0cHV0KVxuXHRcdFx0XHRleGVjdXRlQ29kZU91dHB1dC5jbGFzc0xpc3QuYWRkKFwiZXhlY3V0ZS1jb2RlLW91dHB1dFwiKTtcblx0XHR9XG5cdH0pO1xufSk7XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLk5vZGV9IE5vZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuUGFyZW50fSBQYXJlbnRcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBGblxuICogQHRlbXBsYXRlIEZhbGxiYWNrXG4gKiBAdHlwZWRlZiB7Rm4gZXh0ZW5kcyAodmFsdWU6IGFueSkgPT4gdmFsdWUgaXMgaW5mZXIgVGhpbmcgPyBUaGluZyA6IEZhbGxiYWNrfSBQcmVkaWNhdGVcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBDaGVja1xuICogICBDaGVjayB0aGF0IGFuIGFyYml0cmFyeSB2YWx1ZSBpcyBhIG5vZGUuXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaXNcbiAqICAgVGhlIGdpdmVuIGNvbnRleHQuXG4gKiBAcGFyYW0ge3Vua25vd259IFtub2RlXVxuICogICBBbnl0aGluZyAodHlwaWNhbGx5IGEgbm9kZSkuXG4gKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtpbmRleF1cbiAqICAgVGhlIG5vZGVcdTIwMTlzIHBvc2l0aW9uIGluIGl0cyBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudCB8IG51bGwgfCB1bmRlZmluZWR9IFtwYXJlbnRdXG4gKiAgIFRoZSBub2RlXHUyMDE5cyBwYXJlbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGlzIGlzIGEgbm9kZSBhbmQgcGFzc2VzIGEgdGVzdC5cbiAqXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBOb2RlfSBQcm9wc1xuICogICBPYmplY3QgdG8gY2hlY2sgZm9yIGVxdWl2YWxlbmNlLlxuICpcbiAqICAgTm90ZTogYE5vZGVgIGlzIGluY2x1ZGVkIGFzIGl0IGlzIGNvbW1vbiBidXQgaXMgbm90IGluZGV4YWJsZS5cbiAqXG4gKiBAdHlwZWRlZiB7QXJyYXk8UHJvcHMgfCBUZXN0RnVuY3Rpb24gfCBzdHJpbmc+IHwgUHJvcHMgfCBUZXN0RnVuY3Rpb24gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBUZXN0XG4gKiAgIENoZWNrIGZvciBhbiBhcmJpdHJhcnkgbm9kZS5cbiAqXG4gKiBAY2FsbGJhY2sgVGVzdEZ1bmN0aW9uXG4gKiAgIENoZWNrIGlmIGEgbm9kZSBwYXNzZXMgYSB0ZXN0LlxuICogQHBhcmFtIHt1bmtub3dufSB0aGlzXG4gKiAgIFRoZSBnaXZlbiBjb250ZXh0LlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiAgIEEgbm9kZS5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBbaW5kZXhdXG4gKiAgIFRoZSBub2RlXHUyMDE5cyBwb3NpdGlvbiBpbiBpdHMgcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnQgfCB1bmRlZmluZWR9IFtwYXJlbnRdXG4gKiAgIFRoZSBub2RlXHUyMDE5cyBwYXJlbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZCB8IHZvaWR9XG4gKiAgIFdoZXRoZXIgdGhpcyBub2RlIHBhc3NlcyB0aGUgdGVzdC5cbiAqXG4gKiAgIE5vdGU6IGB2b2lkYCBpcyBpbmNsdWRlZCB1bnRpbCBUUyBzZWVzIG5vIHJldHVybiBhcyBgdW5kZWZpbmVkYC5cbiAqL1xuXG4vKipcbiAqIENoZWNrIGlmIGBub2RlYCBpcyBhIGBOb2RlYCBhbmQgd2hldGhlciBpdCBwYXNzZXMgdGhlIGdpdmVuIHRlc3QuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSBub2RlXG4gKiAgIFRoaW5nIHRvIGNoZWNrLCB0eXBpY2FsbHkgYE5vZGVgLlxuICogQHBhcmFtIHtUZXN0fSB0ZXN0XG4gKiAgIEEgY2hlY2sgZm9yIGEgc3BlY2lmaWMgbm9kZS5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgVGhlIG5vZGVcdTIwMTlzIHBvc2l0aW9uIGluIGl0cyBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudCB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBUaGUgbm9kZVx1MjAxOXMgcGFyZW50LlxuICogQHBhcmFtIHt1bmtub3dufSBjb250ZXh0XG4gKiAgIENvbnRleHQgb2JqZWN0IChgdGhpc2ApIHRvIHBhc3MgdG8gYHRlc3RgIGZ1bmN0aW9ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIGBub2RlYCBpcyBhIG5vZGUgYW5kIHBhc3NlcyBhIHRlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBpcyA9XG4gIC8vIE5vdGU6IG92ZXJsb2FkcyBpbiBKU0RvYyBjYW5cdTIwMTl0IHlldCB1c2UgZGlmZmVyZW50IGBAdGVtcGxhdGVgcy5cbiAgLyoqXG4gICAqIEB0eXBlIHsoXG4gICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBzdHJpbmc+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbn0pICZcbiAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFByb3BzPihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIENvbmRpdGlvbikgJlxuICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgVGVzdEZ1bmN0aW9uPihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIFByZWRpY2F0ZTxDb25kaXRpb24sIE5vZGU+KSAmXG4gICAqICAgKChub2RlPzogbnVsbCB8IHVuZGVmaW5lZCkgPT4gZmFsc2UpICZcbiAgICogICAoKG5vZGU6IHVua25vd24sIHRlc3Q/OiBudWxsIHwgdW5kZWZpbmVkLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUpICZcbiAgICogICAoKG5vZGU6IHVua25vd24sIHRlc3Q/OiBUZXN0LCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBib29sZWFuKVxuICAgKiApfVxuICAgKi9cbiAgKFxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7dW5rbm93bn0gW25vZGVdXG4gICAgICogQHBhcmFtIHtUZXN0fSBbdGVzdF1cbiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtpbmRleF1cbiAgICAgKiBAcGFyYW0ge1BhcmVudCB8IG51bGwgfCB1bmRlZmluZWR9IFtwYXJlbnRdXG4gICAgICogQHBhcmFtIHt1bmtub3dufSBbY29udGV4dF1cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXBhcmFtc1xuICAgIGZ1bmN0aW9uIChub2RlLCB0ZXN0LCBpbmRleCwgcGFyZW50LCBjb250ZXh0KSB7XG4gICAgICBjb25zdCBjaGVjayA9IGNvbnZlcnQodGVzdClcblxuICAgICAgaWYgKFxuICAgICAgICBpbmRleCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGluZGV4ICE9PSBudWxsICYmXG4gICAgICAgICh0eXBlb2YgaW5kZXggIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgaW5kZXggPCAwIHx8XG4gICAgICAgICAgaW5kZXggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBvc2l0aXZlIGZpbml0ZSBpbmRleCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgcGFyZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgcGFyZW50ICE9PSBudWxsICYmXG4gICAgICAgICghaXMocGFyZW50KSB8fCAhcGFyZW50LmNoaWxkcmVuKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgcGFyZW50IG5vZGUnKVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChwYXJlbnQgPT09IHVuZGVmaW5lZCB8fCBwYXJlbnQgPT09IG51bGwpICE9PVxuICAgICAgICAoaW5kZXggPT09IHVuZGVmaW5lZCB8fCBpbmRleCA9PT0gbnVsbClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGJvdGggcGFyZW50IGFuZCBpbmRleCcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsb29rc0xpa2VBTm9kZShub2RlKVxuICAgICAgICA/IGNoZWNrLmNhbGwoY29udGV4dCwgbm9kZSwgaW5kZXgsIHBhcmVudClcbiAgICAgICAgOiBmYWxzZVxuICAgIH1cbiAgKVxuXG4vKipcbiAqIEdlbmVyYXRlIGFuIGFzc2VydGlvbiBmcm9tIGEgdGVzdC5cbiAqXG4gKiBVc2VmdWwgaWYgeW91XHUyMDE5cmUgZ29pbmcgdG8gdGVzdCBtYW55IG5vZGVzLCBmb3IgZXhhbXBsZSB3aGVuIGNyZWF0aW5nIGFcbiAqIHV0aWxpdHkgd2hlcmUgc29tZXRoaW5nIGVsc2UgcGFzc2VzIGEgY29tcGF0aWJsZSB0ZXN0LlxuICpcbiAqIFRoZSBjcmVhdGVkIGZ1bmN0aW9uIGlzIGEgYml0IGZhc3RlciBiZWNhdXNlIGl0IGV4cGVjdHMgdmFsaWQgaW5wdXQgb25seTpcbiAqIGEgYG5vZGVgLCBgaW5kZXhgLCBhbmQgYHBhcmVudGAuXG4gKlxuICogQHBhcmFtIHtUZXN0fSB0ZXN0XG4gKiAgICogICB3aGVuIG51bGxpc2gsIGNoZWNrcyBpZiBgbm9kZWAgaXMgYSBgTm9kZWAuXG4gKiAgICogICB3aGVuIGBzdHJpbmdgLCB3b3JrcyBsaWtlIHBhc3NpbmcgYChub2RlKSA9PiBub2RlLnR5cGUgPT09IHRlc3RgLlxuICogICAqICAgd2hlbiBgZnVuY3Rpb25gIGNoZWNrcyBpZiBmdW5jdGlvbiBwYXNzZWQgdGhlIG5vZGUgaXMgdHJ1ZS5cbiAqICAgKiAgIHdoZW4gYG9iamVjdGAsIGNoZWNrcyB0aGF0IGFsbCBrZXlzIGluIHRlc3QgYXJlIGluIG5vZGUsIGFuZCB0aGF0IHRoZXkgaGF2ZSAoc3RyaWN0bHkpIGVxdWFsIHZhbHVlcy5cbiAqICAgKiAgIHdoZW4gYGFycmF5YCwgY2hlY2tzIGlmIGFueSBvbmUgb2YgdGhlIHN1YnRlc3RzIHBhc3MuXG4gKiBAcmV0dXJucyB7Q2hlY2t9XG4gKiAgIEFuIGFzc2VydGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnQgPVxuICAvLyBOb3RlOiBvdmVybG9hZHMgaW4gSlNEb2MgY2FuXHUyMDE5dCB5ZXQgdXNlIGRpZmZlcmVudCBgQHRlbXBsYXRlYHMuXG4gIC8qKlxuICAgKiBAdHlwZSB7KFxuICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgc3RyaW5nPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiB7dHlwZTogQ29uZGl0aW9ufSkgJlxuICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgUHJvcHM+KHRlc3Q6IENvbmRpdGlvbikgPT4gKG5vZGU6IHVua25vd24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIENvbmRpdGlvbikgJlxuICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgVGVzdEZ1bmN0aW9uPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBQcmVkaWNhdGU8Q29uZGl0aW9uLCBOb2RlPikgJlxuICAgKiAgICgodGVzdD86IG51bGwgfCB1bmRlZmluZWQpID0+IChub2RlPzogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlKSAmXG4gICAqICAgKCh0ZXN0PzogVGVzdCkgPT4gQ2hlY2spXG4gICAqICl9XG4gICAqL1xuICAoXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtUZXN0fSBbdGVzdF1cbiAgICAgKiBAcmV0dXJucyB7Q2hlY2t9XG4gICAgICovXG4gICAgZnVuY3Rpb24gKHRlc3QpIHtcbiAgICAgIGlmICh0ZXN0ID09PSBudWxsIHx8IHRlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gb2tcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBjYXN0RmFjdG9yeSh0ZXN0KVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRlc3QpID8gYW55RmFjdG9yeSh0ZXN0KSA6IHByb3BzRmFjdG9yeSh0ZXN0KVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0eXBlRmFjdG9yeSh0ZXN0KVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIGZ1bmN0aW9uLCBzdHJpbmcsIG9yIG9iamVjdCBhcyB0ZXN0JylcbiAgICB9XG4gIClcblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5PFByb3BzIHwgVGVzdEZ1bmN0aW9uIHwgc3RyaW5nPn0gdGVzdHNcbiAqIEByZXR1cm5zIHtDaGVja31cbiAqL1xuZnVuY3Rpb24gYW55RmFjdG9yeSh0ZXN0cykge1xuICAvKiogQHR5cGUge0FycmF5PENoZWNrPn0gKi9cbiAgY29uc3QgY2hlY2tzID0gW11cbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IHRlc3RzLmxlbmd0aCkge1xuICAgIGNoZWNrc1tpbmRleF0gPSBjb252ZXJ0KHRlc3RzW2luZGV4XSlcbiAgfVxuXG4gIHJldHVybiBjYXN0RmFjdG9yeShhbnkpXG5cbiAgLyoqXG4gICAqIEB0aGlzIHt1bmtub3dufVxuICAgKiBAdHlwZSB7VGVzdEZ1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gYW55KC4uLnBhcmFtZXRlcnMpIHtcbiAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgd2hpbGUgKCsraW5kZXggPCBjaGVja3MubGVuZ3RoKSB7XG4gICAgICBpZiAoY2hlY2tzW2luZGV4XS5hcHBseSh0aGlzLCBwYXJhbWV0ZXJzKSkgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFR1cm4gYW4gb2JqZWN0IGludG8gYSB0ZXN0IGZvciBhIG5vZGUgd2l0aCBhIGNlcnRhaW4gZmllbGRzLlxuICpcbiAqIEBwYXJhbSB7UHJvcHN9IGNoZWNrXG4gKiBAcmV0dXJucyB7Q2hlY2t9XG4gKi9cbmZ1bmN0aW9uIHByb3BzRmFjdG9yeShjaGVjaykge1xuICBjb25zdCBjaGVja0FzUmVjb3JkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKGNoZWNrKVxuXG4gIHJldHVybiBjYXN0RmFjdG9yeShhbGwpXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGFsbChub2RlKSB7XG4gICAgY29uc3Qgbm9kZUFzUmVjb3JkID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKFxuICAgICAgLyoqIEB0eXBlIHt1bmtub3dufSAqLyAobm9kZSlcbiAgICApXG5cbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQga2V5XG5cbiAgICBmb3IgKGtleSBpbiBjaGVjaykge1xuICAgICAgaWYgKG5vZGVBc1JlY29yZFtrZXldICE9PSBjaGVja0FzUmVjb3JkW2tleV0pIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuLyoqXG4gKiBUdXJuIGEgc3RyaW5nIGludG8gYSB0ZXN0IGZvciBhIG5vZGUgd2l0aCBhIGNlcnRhaW4gdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hlY2tcbiAqIEByZXR1cm5zIHtDaGVja31cbiAqL1xuZnVuY3Rpb24gdHlwZUZhY3RvcnkoY2hlY2spIHtcbiAgcmV0dXJuIGNhc3RGYWN0b3J5KHR5cGUpXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKi9cbiAgZnVuY3Rpb24gdHlwZShub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUgJiYgbm9kZS50eXBlID09PSBjaGVja1xuICB9XG59XG5cbi8qKlxuICogVHVybiBhIGN1c3RvbSB0ZXN0IGludG8gYSB0ZXN0IGZvciBhIG5vZGUgdGhhdCBwYXNzZXMgdGhhdCB0ZXN0LlxuICpcbiAqIEBwYXJhbSB7VGVzdEZ1bmN0aW9ufSB0ZXN0RnVuY3Rpb25cbiAqIEByZXR1cm5zIHtDaGVja31cbiAqL1xuZnVuY3Rpb24gY2FzdEZhY3RvcnkodGVzdEZ1bmN0aW9uKSB7XG4gIHJldHVybiBjaGVja1xuXG4gIC8qKlxuICAgKiBAdGhpcyB7dW5rbm93bn1cbiAgICogQHR5cGUge0NoZWNrfVxuICAgKi9cbiAgZnVuY3Rpb24gY2hlY2sodmFsdWUsIGluZGV4LCBwYXJlbnQpIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIGxvb2tzTGlrZUFOb2RlKHZhbHVlKSAmJlxuICAgICAgICB0ZXN0RnVuY3Rpb24uY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHR5cGVvZiBpbmRleCA9PT0gJ251bWJlcicgPyBpbmRleCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwYXJlbnQgfHwgdW5kZWZpbmVkXG4gICAgICAgIClcbiAgICApXG4gIH1cbn1cblxuZnVuY3Rpb24gb2soKSB7XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogQHJldHVybnMge3ZhbHVlIGlzIE5vZGV9XG4gKi9cbmZ1bmN0aW9uIGxvb2tzTGlrZUFOb2RlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiB2YWx1ZVxufVxuIiwgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcihkKSB7XG4gIHJldHVybiBkXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLk5vZGV9IFVuaXN0Tm9kZVxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5QYXJlbnR9IFVuaXN0UGFyZW50XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7RXhjbHVkZTxpbXBvcnQoJ3VuaXN0LXV0aWwtaXMnKS5UZXN0LCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkfSBUZXN0XG4gKiAgIFRlc3QgZnJvbSBgdW5pc3QtdXRpbC1pc2AuXG4gKlxuICogICBOb3RlOiB3ZSBoYXZlIHJlbW92ZSBhbmQgYWRkIGB1bmRlZmluZWRgLCBiZWNhdXNlIG90aGVyd2lzZSB3aGVuIGdlbmVyYXRpbmdcbiAqICAgYXV0b21hdGljIGAuZC50c2AgZmlsZXMsIFRTIHRyaWVzIHRvIGZsYXR0ZW4gcGF0aHMgZnJvbSBhIGxvY2FsIHBlcnNwZWN0aXZlLFxuICogICB3aGljaCBkb2Vzblx1MjAxOXQgd29yayB3aGVuIHB1Ymxpc2hpbmcgb24gbnBtLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhcbiAqICAgRm4gZXh0ZW5kcyAodmFsdWU6IGFueSkgPT4gdmFsdWUgaXMgaW5mZXIgVGhpbmdcbiAqICAgPyBUaGluZ1xuICogICA6IEZhbGxiYWNrXG4gKiApfSBQcmVkaWNhdGVcbiAqICAgR2V0IHRoZSB2YWx1ZSBvZiBhIHR5cGUgZ3VhcmQgYEZuYC5cbiAqIEB0ZW1wbGF0ZSBGblxuICogICBWYWx1ZTsgdHlwaWNhbGx5IGZ1bmN0aW9uIHRoYXQgaXMgYSB0eXBlIGd1YXJkIChzdWNoIGFzIGAoeCk6IHggaXMgWWApLlxuICogQHRlbXBsYXRlIEZhbGxiYWNrXG4gKiAgIFZhbHVlIHRvIHlpZWxkIGlmIGBGbmAgaXMgbm90IGEgdHlwZSBndWFyZC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIENoZWNrIGV4dGVuZHMgbnVsbCB8IHVuZGVmaW5lZCAvLyBObyB0ZXN0LlxuICogICA/IFZhbHVlXG4gKiAgIDogVmFsdWUgZXh0ZW5kcyB7dHlwZTogQ2hlY2t9IC8vIFN0cmluZyAodHlwZSkgdGVzdC5cbiAqICAgPyBWYWx1ZVxuICogICA6IFZhbHVlIGV4dGVuZHMgQ2hlY2sgLy8gUGFydGlhbCB0ZXN0LlxuICogICA/IFZhbHVlXG4gKiAgIDogQ2hlY2sgZXh0ZW5kcyBGdW5jdGlvbiAvLyBGdW5jdGlvbiB0ZXN0LlxuICogICA/IFByZWRpY2F0ZTxDaGVjaywgVmFsdWU+IGV4dGVuZHMgVmFsdWVcbiAqICAgICA/IFByZWRpY2F0ZTxDaGVjaywgVmFsdWU+XG4gKiAgICAgOiBuZXZlclxuICogICA6IG5ldmVyIC8vIFNvbWUgb3RoZXIgdGVzdD9cbiAqICl9IE1hdGNoZXNPbmVcbiAqICAgQ2hlY2sgd2hldGhlciBhIG5vZGUgbWF0Y2hlcyBhIHByaW1pdGl2ZSBjaGVjayBpbiB0aGUgdHlwZSBzeXN0ZW0uXG4gKiBAdGVtcGxhdGUgVmFsdWVcbiAqICAgVmFsdWU7IHR5cGljYWxseSB1bmlzdCBgTm9kZWAuXG4gKiBAdGVtcGxhdGUgQ2hlY2tcbiAqICAgVmFsdWU7IHR5cGljYWxseSBgdW5pc3QtdXRpbC1pc2AtY29tcGF0aWJsZSB0ZXN0LCBidXQgbm90IGFycmF5cy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIENoZWNrIGV4dGVuZHMgQXJyYXk8YW55PlxuICogICA/IE1hdGNoZXNPbmU8VmFsdWUsIENoZWNrW2tleW9mIENoZWNrXT5cbiAqICAgOiBNYXRjaGVzT25lPFZhbHVlLCBDaGVjaz5cbiAqICl9IE1hdGNoZXNcbiAqICAgQ2hlY2sgd2hldGhlciBhIG5vZGUgbWF0Y2hlcyBhIGNoZWNrIGluIHRoZSB0eXBlIHN5c3RlbS5cbiAqIEB0ZW1wbGF0ZSBWYWx1ZVxuICogICBWYWx1ZTsgdHlwaWNhbGx5IHVuaXN0IGBOb2RlYC5cbiAqIEB0ZW1wbGF0ZSBDaGVja1xuICogICBWYWx1ZTsgdHlwaWNhbGx5IGB1bmlzdC11dGlsLWlzYC1jb21wYXRpYmxlIHRlc3QuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7MCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOSB8IDEwfSBVaW50XG4gKiAgIE51bWJlcjsgY2FwcGVkIHJlYXNvbmFibHkuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7SSBleHRlbmRzIDAgPyAxIDogSSBleHRlbmRzIDEgPyAyIDogSSBleHRlbmRzIDIgPyAzIDogSSBleHRlbmRzIDMgPyA0IDogSSBleHRlbmRzIDQgPyA1IDogSSBleHRlbmRzIDUgPyA2IDogSSBleHRlbmRzIDYgPyA3IDogSSBleHRlbmRzIDcgPyA4IDogSSBleHRlbmRzIDggPyA5IDogMTB9IEluY3JlbWVudFxuICogICBJbmNyZW1lbnQgYSBudW1iZXIgaW4gdGhlIHR5cGUgc3lzdGVtLlxuICogQHRlbXBsYXRlIHtVaW50fSBbST0wXVxuICogICBJbmRleC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoXG4gKiAgIE5vZGUgZXh0ZW5kcyBVbmlzdFBhcmVudFxuICogICA/IE5vZGUgZXh0ZW5kcyB7Y2hpbGRyZW46IEFycmF5PGluZmVyIENoaWxkcmVuPn1cbiAqICAgICA/IENoaWxkIGV4dGVuZHMgQ2hpbGRyZW4gPyBOb2RlIDogbmV2ZXJcbiAqICAgICA6IG5ldmVyXG4gKiAgIDogbmV2ZXJcbiAqICl9IEludGVybmFsUGFyZW50XG4gKiAgIENvbGxlY3Qgbm9kZXMgdGhhdCBjYW4gYmUgcGFyZW50cyBvZiBgQ2hpbGRgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IE5vZGVcbiAqICAgQWxsIG5vZGUgdHlwZXMgaW4gYSB0cmVlLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IENoaWxkXG4gKiAgIE5vZGUgdG8gc2VhcmNoIGZvci5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtJbnRlcm5hbFBhcmVudDxJbmNsdXNpdmVEZXNjZW5kYW50PFRyZWU+LCBDaGlsZD59IFBhcmVudFxuICogICBDb2xsZWN0IG5vZGVzIGluIGBUcmVlYCB0aGF0IGNhbiBiZSBwYXJlbnRzIG9mIGBDaGlsZGAuXG4gKiBAdGVtcGxhdGUge1VuaXN0Tm9kZX0gVHJlZVxuICogICBBbGwgbm9kZSB0eXBlcyBpbiBhIHRyZWUuXG4gKiBAdGVtcGxhdGUge1VuaXN0Tm9kZX0gQ2hpbGRcbiAqICAgTm9kZSB0byBzZWFyY2ggZm9yLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhcbiAqICAgRGVwdGggZXh0ZW5kcyBNYXhcbiAqICAgPyBuZXZlclxuICogICA6XG4gKiAgICAgfCBJbnRlcm5hbFBhcmVudDxOb2RlLCBDaGlsZD5cbiAqICAgICB8IEludGVybmFsQW5jZXN0b3I8Tm9kZSwgSW50ZXJuYWxQYXJlbnQ8Tm9kZSwgQ2hpbGQ+LCBNYXgsIEluY3JlbWVudDxEZXB0aD4+XG4gKiApfSBJbnRlcm5hbEFuY2VzdG9yXG4gKiAgIENvbGxlY3Qgbm9kZXMgaW4gYFRyZWVgIHRoYXQgY2FuIGJlIGFuY2VzdG9ycyBvZiBgQ2hpbGRgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IE5vZGVcbiAqICAgQWxsIG5vZGUgdHlwZXMgaW4gYSB0cmVlLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IENoaWxkXG4gKiAgIE5vZGUgdG8gc2VhcmNoIGZvci5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW01heD0xMF1cbiAqICAgTWF4OyBzZWFyY2hlcyB1cCB0byB0aGlzIGRlcHRoLlxuICogQHRlbXBsYXRlIHtVaW50fSBbRGVwdGg9MF1cbiAqICAgQ3VycmVudCBkZXB0aC5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtJbnRlcm5hbEFuY2VzdG9yPEluY2x1c2l2ZURlc2NlbmRhbnQ8VHJlZT4sIENoaWxkPn0gQW5jZXN0b3JcbiAqICAgQ29sbGVjdCBub2RlcyBpbiBgVHJlZWAgdGhhdCBjYW4gYmUgYW5jZXN0b3JzIG9mIGBDaGlsZGAuXG4gKiBAdGVtcGxhdGUge1VuaXN0Tm9kZX0gVHJlZVxuICogICBBbGwgbm9kZSB0eXBlcyBpbiBhIHRyZWUuXG4gKiBAdGVtcGxhdGUge1VuaXN0Tm9kZX0gQ2hpbGRcbiAqICAgTm9kZSB0byBzZWFyY2ggZm9yLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgeyhcbiAqICAgVHJlZSBleHRlbmRzIFVuaXN0UGFyZW50XG4gKiAgICAgPyBEZXB0aCBleHRlbmRzIE1heFxuICogICAgICAgPyBUcmVlXG4gKiAgICAgICA6IFRyZWUgfCBJbmNsdXNpdmVEZXNjZW5kYW50PFRyZWVbJ2NoaWxkcmVuJ11bbnVtYmVyXSwgTWF4LCBJbmNyZW1lbnQ8RGVwdGg+PlxuICogICAgIDogVHJlZVxuICogKX0gSW5jbHVzaXZlRGVzY2VuZGFudFxuICogICBDb2xsZWN0IGFsbCAoaW5jbHVzaXZlKSBkZXNjZW5kYW50cyBvZiBgVHJlZWAuXG4gKlxuICogICA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIGZhc3Rlc3Qgd2F5IHRvXG4gKiAgID4gcmVjdXJzZSB3aXRob3V0IGFjdHVhbGx5IHJ1bm5pbmcgaW50byBhbiBpbmZpbml0ZSBsb29wLCB3aGljaCB0aGVcbiAqICAgPiBwcmV2aW91cyB2ZXJzaW9uIGRpZC5cbiAqICAgPlxuICogICA+IFByYWN0aWNhbGx5LCBhIG1heCBvZiBgMmAgaXMgdHlwaWNhbGx5IGVub3VnaCBhc3N1bWluZyBhIGBSb290YCBpc1xuICogICA+IHBhc3NlZCwgYnV0IGl0IGRvZXNuXHUyMDE5dCBpbXByb3ZlIHBlcmZvcm1hbmNlLlxuICogICA+IEl0IGdldHMgaGlnaGVyIHdpdGggYExpc3QgPiBMaXN0SXRlbSA+IFRhYmxlID4gVGFibGVSb3cgPiBUYWJsZUNlbGxgLlxuICogICA+IFVzaW5nIHVwIHRvIGAxMGAgZG9lc25cdTIwMTl0IGh1cnQgb3IgaGVscCBlaXRoZXIuXG4gKiBAdGVtcGxhdGUge1VuaXN0Tm9kZX0gVHJlZVxuICogICBUcmVlIHR5cGUuXG4gKiBAdGVtcGxhdGUge1VpbnR9IFtNYXg9MTBdXG4gKiAgIE1heDsgc2VhcmNoZXMgdXAgdG8gdGhpcyBkZXB0aC5cbiAqIEB0ZW1wbGF0ZSB7VWludH0gW0RlcHRoPTBdXG4gKiAgIEN1cnJlbnQgZGVwdGguXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7J3NraXAnIHwgYm9vbGVhbn0gQWN0aW9uXG4gKiAgIFVuaW9uIG9mIHRoZSBhY3Rpb24gdHlwZXMuXG4gKlxuICogQHR5cGVkZWYge251bWJlcn0gSW5kZXhcbiAqICAgTW92ZSB0byB0aGUgc2libGluZyBhdCBgaW5kZXhgIG5leHQgKGFmdGVyIG5vZGUgaXRzZWxmIGlzIGNvbXBsZXRlbHlcbiAqICAgdHJhdmVyc2VkKS5cbiAqXG4gKiAgIFVzZWZ1bCBpZiBtdXRhdGluZyB0aGUgdHJlZSwgc3VjaCBhcyByZW1vdmluZyB0aGUgbm9kZSB0aGUgdmlzaXRvciBpc1xuICogICBjdXJyZW50bHkgb24sIG9yIGFueSBvZiBpdHMgcHJldmlvdXMgc2libGluZ3MuXG4gKiAgIFJlc3VsdHMgbGVzcyB0aGFuIDAgb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBjaGlsZHJlbi5sZW5ndGhgIHN0b3BcbiAqICAgdHJhdmVyc2luZyB0aGUgcGFyZW50LlxuICpcbiAqIEB0eXBlZGVmIHtbKEFjdGlvbiB8IG51bGwgfCB1bmRlZmluZWQgfCB2b2lkKT8sIChJbmRleCB8IG51bGwgfCB1bmRlZmluZWQpP119IEFjdGlvblR1cGxlXG4gKiAgIExpc3Qgd2l0aCBvbmUgb3IgdHdvIHZhbHVlcywgdGhlIGZpcnN0IGFuIGFjdGlvbiwgdGhlIHNlY29uZCBhbiBpbmRleC5cbiAqXG4gKiBAdHlwZWRlZiB7QWN0aW9uIHwgQWN0aW9uVHVwbGUgfCBJbmRleCB8IG51bGwgfCB1bmRlZmluZWQgfCB2b2lkfSBWaXNpdG9yUmVzdWx0XG4gKiAgIEFueSB2YWx1ZSB0aGF0IGNhbiBiZSByZXR1cm5lZCBmcm9tIGEgdmlzaXRvci5cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBWaXNpdG9yXG4gKiAgIEhhbmRsZSBhIG5vZGUgKG1hdGNoaW5nIGB0ZXN0YCwgaWYgZ2l2ZW4pLlxuICpcbiAqICAgVmlzaXRvcnMgYXJlIGZyZWUgdG8gdHJhbnNmb3JtIGBub2RlYC5cbiAqICAgVGhleSBjYW4gYWxzbyB0cmFuc2Zvcm0gdGhlIHBhcmVudCBvZiBub2RlICh0aGUgbGFzdCBvZiBgYW5jZXN0b3JzYCkuXG4gKlxuICogICBSZXBsYWNpbmcgYG5vZGVgIGl0c2VsZiwgaWYgYFNLSVBgIGlzIG5vdCByZXR1cm5lZCwgc3RpbGwgY2F1c2VzIGl0c1xuICogICBkZXNjZW5kYW50cyB0byBiZSB3YWxrZWQgKHdoaWNoIGlzIGEgYnVnKS5cbiAqXG4gKiAgIFdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIHByZXZpb3VzIHNpYmxpbmdzIG9mIGBub2RlYCAob3IgbmV4dCBzaWJsaW5ncywgaW5cbiAqICAgY2FzZSBvZiByZXZlcnNlKSwgdGhlIGBWaXNpdG9yYCBzaG91bGQgcmV0dXJuIGEgbmV3IGBJbmRleGAgdG8gc3BlY2lmeSB0aGVcbiAqICAgc2libGluZyB0byB0cmF2ZXJzZSBhZnRlciBgbm9kZWAgaXMgdHJhdmVyc2VkLlxuICogICBBZGRpbmcgb3IgcmVtb3ZpbmcgbmV4dCBzaWJsaW5ncyBvZiBgbm9kZWAgKG9yIHByZXZpb3VzIHNpYmxpbmdzLCBpbiBjYXNlXG4gKiAgIG9mIHJldmVyc2UpIGlzIGhhbmRsZWQgYXMgZXhwZWN0ZWQgd2l0aG91dCBuZWVkaW5nIHRvIHJldHVybiBhIG5ldyBgSW5kZXhgLlxuICpcbiAqICAgUmVtb3ZpbmcgdGhlIGNoaWxkcmVuIHByb3BlcnR5IG9mIGFuIGFuY2VzdG9yIHN0aWxsIHJlc3VsdHMgaW4gdGhlbSBiZWluZ1xuICogICB0cmF2ZXJzZWQuXG4gKiBAcGFyYW0ge1Zpc2l0ZWR9IG5vZGVcbiAqICAgRm91bmQgbm9kZS5cbiAqIEBwYXJhbSB7QXJyYXk8VmlzaXRlZFBhcmVudHM+fSBhbmNlc3RvcnNcbiAqICAgQW5jZXN0b3JzIG9mIGBub2RlYC5cbiAqIEByZXR1cm5zIHtWaXNpdG9yUmVzdWx0fVxuICogICBXaGF0IHRvIGRvIG5leHQuXG4gKlxuICogICBBbiBgSW5kZXhgIGlzIHRyZWF0ZWQgYXMgYSB0dXBsZSBvZiBgW0NPTlRJTlVFLCBJbmRleF1gLlxuICogICBBbiBgQWN0aW9uYCBpcyB0cmVhdGVkIGFzIGEgdHVwbGUgb2YgYFtBY3Rpb25dYC5cbiAqXG4gKiAgIFBhc3NpbmcgYSB0dXBsZSBiYWNrIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGBBY3Rpb25gIGlzIGBTS0lQYC5cbiAqICAgV2hlbiB0aGUgYEFjdGlvbmAgaXMgYEVYSVRgLCB0aGF0IGFjdGlvbiBjYW4gYmUgcmV0dXJuZWQuXG4gKiAgIFdoZW4gdGhlIGBBY3Rpb25gIGlzIGBDT05USU5VRWAsIGBJbmRleGAgY2FuIGJlIHJldHVybmVkLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFtWaXNpdGVkPVVuaXN0Tm9kZV1cbiAqICAgVmlzaXRlZCBub2RlIHR5cGUuXG4gKiBAdGVtcGxhdGUge1VuaXN0UGFyZW50fSBbVmlzaXRlZFBhcmVudHM9VW5pc3RQYXJlbnRdXG4gKiAgIEFuY2VzdG9yIHR5cGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7VmlzaXRvcjxNYXRjaGVzPEluY2x1c2l2ZURlc2NlbmRhbnQ8VHJlZT4sIENoZWNrPiwgQW5jZXN0b3I8VHJlZSwgTWF0Y2hlczxJbmNsdXNpdmVEZXNjZW5kYW50PFRyZWU+LCBDaGVjaz4+Pn0gQnVpbGRWaXNpdG9yXG4gKiAgIEJ1aWxkIGEgdHlwZWQgYFZpc2l0b3JgIGZ1bmN0aW9uIGZyb20gYSB0cmVlIGFuZCBhIHRlc3QuXG4gKlxuICogICBJdCB3aWxsIGluZmVyIHdoaWNoIHZhbHVlcyBhcmUgcGFzc2VkIGFzIGBub2RlYCBhbmQgd2hpY2ggYXMgYHBhcmVudHNgLlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFtUcmVlPVVuaXN0Tm9kZV1cbiAqICAgVHJlZSB0eXBlLlxuICogQHRlbXBsYXRlIHtUZXN0fSBbQ2hlY2s9VGVzdF1cbiAqICAgVGVzdCB0eXBlLlxuICovXG5cbmltcG9ydCB7Y29udmVydH0gZnJvbSAndW5pc3QtdXRpbC1pcydcbmltcG9ydCB7Y29sb3J9IGZyb20gJ3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9kby1ub3QtdXNlLWNvbG9yJ1xuXG4vKiogQHR5cGUge1JlYWRvbmx5PEFjdGlvblR1cGxlPn0gKi9cbmNvbnN0IGVtcHR5ID0gW11cblxuLyoqXG4gKiBDb250aW51ZSB0cmF2ZXJzaW5nIGFzIG5vcm1hbC5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTlRJTlVFID0gdHJ1ZVxuXG4vKipcbiAqIFN0b3AgdHJhdmVyc2luZyBpbW1lZGlhdGVseS5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYSVQgPSBmYWxzZVxuXG4vKipcbiAqIERvIG5vdCB0cmF2ZXJzZSB0aGlzIG5vZGVcdTIwMTlzIGNoaWxkcmVuLlxuICovXG5leHBvcnQgY29uc3QgU0tJUCA9ICdza2lwJ1xuXG4vKipcbiAqIFZpc2l0IG5vZGVzLCB3aXRoIGFuY2VzdHJhbCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBUaGlzIGFsZ29yaXRobSBwZXJmb3JtcyAqZGVwdGgtZmlyc3QqICp0cmVlIHRyYXZlcnNhbCogaW4gKnByZW9yZGVyKlxuICogKCoqTkxSKiopIG9yIGlmIGByZXZlcnNlYCBpcyBnaXZlbiwgaW4gKnJldmVyc2UgcHJlb3JkZXIqICgqKk5STCoqKS5cbiAqXG4gKiBZb3UgY2FuIGNob29zZSBmb3Igd2hpY2ggbm9kZXMgYHZpc2l0b3JgIGlzIGNhbGxlZCBieSBwYXNzaW5nIGEgYHRlc3RgLlxuICogRm9yIGNvbXBsZXggdGVzdHMsIHlvdSBzaG91bGQgdGVzdCB5b3Vyc2VsZiBpbiBgdmlzaXRvcmAsIGFzIGl0IHdpbGwgYmVcbiAqIGZhc3RlciBhbmQgd2lsbCBoYXZlIGltcHJvdmVkIHR5cGUgaW5mb3JtYXRpb24uXG4gKlxuICogV2Fsa2luZyB0aGUgdHJlZSBpcyBhbiBpbnRlbnNpdmUgdGFzay5cbiAqIE1ha2UgdXNlIG9mIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZSB2aXNpdG9yIHdoZW4gcG9zc2libGUuXG4gKiBJbnN0ZWFkIG9mIHdhbGtpbmcgYSB0cmVlIG11bHRpcGxlIHRpbWVzLCB3YWxrIGl0IG9uY2UsIHVzZSBgdW5pc3QtdXRpbC1pc2BcbiAqIHRvIGNoZWNrIGlmIGEgbm9kZSBtYXRjaGVzLCBhbmQgdGhlbiBwZXJmb3JtIGRpZmZlcmVudCBvcGVyYXRpb25zLlxuICpcbiAqIFlvdSBjYW4gY2hhbmdlIHRoZSB0cmVlLlxuICogU2VlIGBWaXNpdG9yYCBmb3IgbW9yZSBpbmZvLlxuICpcbiAqIEBvdmVybG9hZFxuICogQHBhcmFtIHtUcmVlfSB0cmVlXG4gKiBAcGFyYW0ge0NoZWNrfSBjaGVja1xuICogQHBhcmFtIHtCdWlsZFZpc2l0b3I8VHJlZSwgQ2hlY2s+fSB2aXNpdG9yXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbcmV2ZXJzZV1cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKlxuICogQG92ZXJsb2FkXG4gKiBAcGFyYW0ge1RyZWV9IHRyZWVcbiAqIEBwYXJhbSB7QnVpbGRWaXNpdG9yPFRyZWU+fSB2aXNpdG9yXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbcmV2ZXJzZV1cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKlxuICogQHBhcmFtIHtVbmlzdE5vZGV9IHRyZWVcbiAqICAgVHJlZSB0byB0cmF2ZXJzZS5cbiAqIEBwYXJhbSB7VmlzaXRvciB8IFRlc3R9IHRlc3RcbiAqICAgYHVuaXN0LXV0aWwtaXNgLWNvbXBhdGlibGUgdGVzdFxuICogQHBhcmFtIHtWaXNpdG9yIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFt2aXNpdG9yXVxuICogICBIYW5kbGUgZWFjaCBub2RlLlxuICogQHBhcmFtIHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3JldmVyc2VdXG4gKiAgIFRyYXZlcnNlIGluIHJldmVyc2UgcHJlb3JkZXIgKE5STCkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBwcmVvcmRlciAoTkxSKS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKlxuICogQHRlbXBsYXRlIHtVbmlzdE5vZGV9IFRyZWVcbiAqICAgTm9kZSB0eXBlLlxuICogQHRlbXBsYXRlIHtUZXN0fSBDaGVja1xuICogICBgdW5pc3QtdXRpbC1pc2AtY29tcGF0aWJsZSB0ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlzaXRQYXJlbnRzKHRyZWUsIHRlc3QsIHZpc2l0b3IsIHJldmVyc2UpIHtcbiAgLyoqIEB0eXBlIHtUZXN0fSAqL1xuICBsZXQgY2hlY2tcblxuICBpZiAodHlwZW9mIHRlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZpc2l0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXZlcnNlID0gdmlzaXRvclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igbm8gdmlzaXRvciBnaXZlbiwgc28gYHZpc2l0b3JgIGlzIHRlc3QuXG4gICAgdmlzaXRvciA9IHRlc3RcbiAgfSBlbHNlIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHZpc2l0b3IgZ2l2ZW4sIHNvIGB0ZXN0YCBpc25cdTIwMTl0IGEgdmlzaXRvci5cbiAgICBjaGVjayA9IHRlc3RcbiAgfVxuXG4gIGNvbnN0IGlzID0gY29udmVydChjaGVjaylcbiAgY29uc3Qgc3RlcCA9IHJldmVyc2UgPyAtMSA6IDFcblxuICBmYWN0b3J5KHRyZWUsIHVuZGVmaW5lZCwgW10pKClcblxuICAvKipcbiAgICogQHBhcmFtIHtVbmlzdE5vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gICAqIEBwYXJhbSB7QXJyYXk8VW5pc3RQYXJlbnQ+fSBwYXJlbnRzXG4gICAqL1xuICBmdW5jdGlvbiBmYWN0b3J5KG5vZGUsIGluZGV4LCBwYXJlbnRzKSB7XG4gICAgY29uc3QgdmFsdWUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoXG4gICAgICBub2RlICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyA/IG5vZGUgOiB7fVxuICAgIClcblxuICAgIGlmICh0eXBlb2YgdmFsdWUudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICAvLyBgaGFzdGBcbiAgICAgICAgdHlwZW9mIHZhbHVlLnRhZ05hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyB2YWx1ZS50YWdOYW1lXG4gICAgICAgICAgOiAvLyBgeGFzdGBcbiAgICAgICAgICB0eXBlb2YgdmFsdWUubmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IHZhbHVlLm5hbWVcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlzaXQsICduYW1lJywge1xuICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAnbm9kZSAoJyArIGNvbG9yKG5vZGUudHlwZSArIChuYW1lID8gJzwnICsgbmFtZSArICc+JyA6ICcnKSkgKyAnKSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHZpc2l0XG5cbiAgICBmdW5jdGlvbiB2aXNpdCgpIHtcbiAgICAgIC8qKiBAdHlwZSB7UmVhZG9ubHk8QWN0aW9uVHVwbGU+fSAqL1xuICAgICAgbGV0IHJlc3VsdCA9IGVtcHR5XG4gICAgICAvKiogQHR5cGUge1JlYWRvbmx5PEFjdGlvblR1cGxlPn0gKi9cbiAgICAgIGxldCBzdWJyZXN1bHRcbiAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgICAgbGV0IG9mZnNldFxuICAgICAgLyoqIEB0eXBlIHtBcnJheTxVbmlzdFBhcmVudD59ICovXG4gICAgICBsZXQgZ3JhbmRwYXJlbnRzXG5cbiAgICAgIGlmICghdGVzdCB8fCBpcyhub2RlLCBpbmRleCwgcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdIHx8IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYHZpc2l0b3JgIGlzIG5vdyBhIHZpc2l0b3IuXG4gICAgICAgIHJlc3VsdCA9IHRvUmVzdWx0KHZpc2l0b3Iobm9kZSwgcGFyZW50cykpXG5cbiAgICAgICAgaWYgKHJlc3VsdFswXSA9PT0gRVhJVCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoJ2NoaWxkcmVuJyBpbiBub2RlICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3Qgbm9kZUFzUGFyZW50ID0gLyoqIEB0eXBlIHtVbmlzdFBhcmVudH0gKi8gKG5vZGUpXG5cbiAgICAgICAgaWYgKG5vZGVBc1BhcmVudC5jaGlsZHJlbiAmJiByZXN1bHRbMF0gIT09IFNLSVApIHtcbiAgICAgICAgICBvZmZzZXQgPSAocmV2ZXJzZSA/IG5vZGVBc1BhcmVudC5jaGlsZHJlbi5sZW5ndGggOiAtMSkgKyBzdGVwXG4gICAgICAgICAgZ3JhbmRwYXJlbnRzID0gcGFyZW50cy5jb25jYXQobm9kZUFzUGFyZW50KVxuXG4gICAgICAgICAgd2hpbGUgKG9mZnNldCA+IC0xICYmIG9mZnNldCA8IG5vZGVBc1BhcmVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZUFzUGFyZW50LmNoaWxkcmVuW29mZnNldF1cblxuICAgICAgICAgICAgc3VicmVzdWx0ID0gZmFjdG9yeShjaGlsZCwgb2Zmc2V0LCBncmFuZHBhcmVudHMpKClcblxuICAgICAgICAgICAgaWYgKHN1YnJlc3VsdFswXSA9PT0gRVhJVCkge1xuICAgICAgICAgICAgICByZXR1cm4gc3VicmVzdWx0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG9mZnNldCA9XG4gICAgICAgICAgICAgIHR5cGVvZiBzdWJyZXN1bHRbMV0gPT09ICdudW1iZXInID8gc3VicmVzdWx0WzFdIDogb2Zmc2V0ICsgc3RlcFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVHVybiBhIHJldHVybiB2YWx1ZSBpbnRvIGEgY2xlYW4gcmVzdWx0LlxuICpcbiAqIEBwYXJhbSB7VmlzaXRvclJlc3VsdH0gdmFsdWVcbiAqICAgVmFsaWQgcmV0dXJuIHZhbHVlcyBmcm9tIHZpc2l0b3JzLlxuICogQHJldHVybnMge1JlYWRvbmx5PEFjdGlvblR1cGxlPn1cbiAqICAgQ2xlYW4gcmVzdWx0LlxuICovXG5mdW5jdGlvbiB0b1Jlc3VsdCh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFtDT05USU5VRSwgdmFsdWVdXG4gIH1cblxuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCA/IGVtcHR5IDogW3ZhbHVlXVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGUoZm4pIHtcbiAgcmV0dXJuIGZuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhbCgpIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBvaygpIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnJlYWNoYWJsZSgpIHt9XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2luZm8uanMnKS5JbmZvfSBJbmZvXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgSW5mbz59IFByb3BlcnRpZXNcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBOb3JtYWxcbiAqL1xuXG5leHBvcnQgY2xhc3MgU2NoZW1hIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1Byb3BlcnRpZXN9IHByb3BlcnR5XG4gICAqIEBwYXJhbSB7Tm9ybWFsfSBub3JtYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzcGFjZV1cbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BlcnR5LCBub3JtYWwsIHNwYWNlKSB7XG4gICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5XG4gICAgdGhpcy5ub3JtYWwgPSBub3JtYWxcbiAgICBpZiAoc3BhY2UpIHtcbiAgICAgIHRoaXMuc3BhY2UgPSBzcGFjZVxuICAgIH1cbiAgfVxufVxuXG4vKiogQHR5cGUge1Byb3BlcnRpZXN9ICovXG5TY2hlbWEucHJvdG90eXBlLnByb3BlcnR5ID0ge31cbi8qKiBAdHlwZSB7Tm9ybWFsfSAqL1xuU2NoZW1hLnByb3RvdHlwZS5ub3JtYWwgPSB7fVxuLyoqIEB0eXBlIHtzdHJpbmd8bnVsbH0gKi9cblNjaGVtYS5wcm90b3R5cGUuc3BhY2UgPSBudWxsXG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL3NjaGVtYS5qcycpLlByb3BlcnRpZXN9IFByb3BlcnRpZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vc2NoZW1hLmpzJykuTm9ybWFsfSBOb3JtYWxcbiAqL1xuXG5pbXBvcnQge1NjaGVtYX0gZnJvbSAnLi9zY2hlbWEuanMnXG5cbi8qKlxuICogQHBhcmFtIHtTY2hlbWFbXX0gZGVmaW5pdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3BhY2VdXG4gKiBAcmV0dXJucyB7U2NoZW1hfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoZGVmaW5pdGlvbnMsIHNwYWNlKSB7XG4gIC8qKiBAdHlwZSB7UHJvcGVydGllc30gKi9cbiAgY29uc3QgcHJvcGVydHkgPSB7fVxuICAvKiogQHR5cGUge05vcm1hbH0gKi9cbiAgY29uc3Qgbm9ybWFsID0ge31cbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IGRlZmluaXRpb25zLmxlbmd0aCkge1xuICAgIE9iamVjdC5hc3NpZ24ocHJvcGVydHksIGRlZmluaXRpb25zW2luZGV4XS5wcm9wZXJ0eSlcbiAgICBPYmplY3QuYXNzaWduKG5vcm1hbCwgZGVmaW5pdGlvbnNbaW5kZXhdLm5vcm1hbClcbiAgfVxuXG4gIHJldHVybiBuZXcgU2NoZW1hKHByb3BlcnR5LCBub3JtYWwsIHNwYWNlKVxufVxuIiwgIi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpXG59XG4iLCAiZXhwb3J0IGNsYXNzIEluZm8ge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eSwgYXR0cmlidXRlKSB7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgdGhpcy5wcm9wZXJ0eSA9IHByb3BlcnR5XG4gICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgdGhpcy5hdHRyaWJ1dGUgPSBhdHRyaWJ1dGVcbiAgfVxufVxuXG4vKiogQHR5cGUge3N0cmluZ3xudWxsfSAqL1xuSW5mby5wcm90b3R5cGUuc3BhY2UgPSBudWxsXG5JbmZvLnByb3RvdHlwZS5ib29sZWFuID0gZmFsc2VcbkluZm8ucHJvdG90eXBlLmJvb2xlYW5pc2ggPSBmYWxzZVxuSW5mby5wcm90b3R5cGUub3ZlcmxvYWRlZEJvb2xlYW4gPSBmYWxzZVxuSW5mby5wcm90b3R5cGUubnVtYmVyID0gZmFsc2VcbkluZm8ucHJvdG90eXBlLmNvbW1hU2VwYXJhdGVkID0gZmFsc2VcbkluZm8ucHJvdG90eXBlLnNwYWNlU2VwYXJhdGVkID0gZmFsc2VcbkluZm8ucHJvdG90eXBlLmNvbW1hT3JTcGFjZVNlcGFyYXRlZCA9IGZhbHNlXG5JbmZvLnByb3RvdHlwZS5tdXN0VXNlUHJvcGVydHkgPSBmYWxzZVxuSW5mby5wcm90b3R5cGUuZGVmaW5lZCA9IGZhbHNlXG4iLCAibGV0IHBvd2VycyA9IDBcblxuZXhwb3J0IGNvbnN0IGJvb2xlYW4gPSBpbmNyZW1lbnQoKVxuZXhwb3J0IGNvbnN0IGJvb2xlYW5pc2ggPSBpbmNyZW1lbnQoKVxuZXhwb3J0IGNvbnN0IG92ZXJsb2FkZWRCb29sZWFuID0gaW5jcmVtZW50KClcbmV4cG9ydCBjb25zdCBudW1iZXIgPSBpbmNyZW1lbnQoKVxuZXhwb3J0IGNvbnN0IHNwYWNlU2VwYXJhdGVkID0gaW5jcmVtZW50KClcbmV4cG9ydCBjb25zdCBjb21tYVNlcGFyYXRlZCA9IGluY3JlbWVudCgpXG5leHBvcnQgY29uc3QgY29tbWFPclNwYWNlU2VwYXJhdGVkID0gaW5jcmVtZW50KClcblxuZnVuY3Rpb24gaW5jcmVtZW50KCkge1xuICByZXR1cm4gMiAqKiArK3Bvd2Vyc1xufVxuIiwgImltcG9ydCB7SW5mb30gZnJvbSAnLi9pbmZvLmpzJ1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcy5qcydcblxuLyoqIEB0eXBlIHtBcnJheTxrZXlvZiB0eXBlcz59ICovXG4vLyBAdHMtZXhwZWN0LWVycm9yOiBodXNoLlxuY29uc3QgY2hlY2tzID0gT2JqZWN0LmtleXModHlwZXMpXG5cbmV4cG9ydCBjbGFzcyBEZWZpbmVkSW5mbyBleHRlbmRzIEluZm8ge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfG51bGx9IFttYXNrXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NwYWNlXVxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcGVydHksIGF0dHJpYnV0ZSwgbWFzaywgc3BhY2UpIHtcbiAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgc3VwZXIocHJvcGVydHksIGF0dHJpYnV0ZSlcblxuICAgIG1hcmsodGhpcywgJ3NwYWNlJywgc3BhY2UpXG5cbiAgICBpZiAodHlwZW9mIG1hc2sgPT09ICdudW1iZXInKSB7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGNoZWNrcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBjaGVja3NbaW5kZXhdXG4gICAgICAgIG1hcmsodGhpcywgY2hlY2tzW2luZGV4XSwgKG1hc2sgJiB0eXBlc1tjaGVja10pID09PSB0eXBlc1tjaGVja10pXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbkRlZmluZWRJbmZvLnByb3RvdHlwZS5kZWZpbmVkID0gdHJ1ZVxuXG4vKipcbiAqIEBwYXJhbSB7RGVmaW5lZEluZm99IHZhbHVlc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICovXG5mdW5jdGlvbiBtYXJrKHZhbHVlcywga2V5LCB2YWx1ZSkge1xuICBpZiAodmFsdWUpIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBhc3N1bWUgYHZhbHVlYCBtYXRjaGVzIHRoZSBleHBlY3RlZCB2YWx1ZSBvZiBga2V5YC5cbiAgICB2YWx1ZXNba2V5XSA9IHZhbHVlXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vc2NoZW1hLmpzJykuUHJvcGVydGllc30gUHJvcGVydGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9zY2hlbWEuanMnKS5Ob3JtYWx9IE5vcm1hbFxuICpcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBBdHRyaWJ1dGVzXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gRGVmaW5pdGlvblxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBudW1iZXJ8bnVsbD59IHByb3BlcnRpZXNcbiAqIEBwcm9wZXJ0eSB7KGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZXMsIHByb3BlcnR5OiBzdHJpbmcpID0+IHN0cmluZ30gdHJhbnNmb3JtXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NwYWNlXVxuICogQHByb3BlcnR5IHtBdHRyaWJ1dGVzfSBbYXR0cmlidXRlc11cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gW211c3RVc2VQcm9wZXJ0eV1cbiAqL1xuXG5pbXBvcnQge25vcm1hbGl6ZX0gZnJvbSAnLi4vbm9ybWFsaXplLmpzJ1xuaW1wb3J0IHtTY2hlbWF9IGZyb20gJy4vc2NoZW1hLmpzJ1xuaW1wb3J0IHtEZWZpbmVkSW5mb30gZnJvbSAnLi9kZWZpbmVkLWluZm8uanMnXG5cbmNvbnN0IG93biA9IHt9Lmhhc093blByb3BlcnR5XG5cbi8qKlxuICogQHBhcmFtIHtEZWZpbml0aW9ufSBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyB7U2NoZW1hfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKGRlZmluaXRpb24pIHtcbiAgLyoqIEB0eXBlIHtQcm9wZXJ0aWVzfSAqL1xuICBjb25zdCBwcm9wZXJ0eSA9IHt9XG4gIC8qKiBAdHlwZSB7Tm9ybWFsfSAqL1xuICBjb25zdCBub3JtYWwgPSB7fVxuICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgbGV0IHByb3BcblxuICBmb3IgKHByb3AgaW4gZGVmaW5pdGlvbi5wcm9wZXJ0aWVzKSB7XG4gICAgaWYgKG93bi5jYWxsKGRlZmluaXRpb24ucHJvcGVydGllcywgcHJvcCkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGVmaW5pdGlvbi5wcm9wZXJ0aWVzW3Byb3BdXG4gICAgICBjb25zdCBpbmZvID0gbmV3IERlZmluZWRJbmZvKFxuICAgICAgICBwcm9wLFxuICAgICAgICBkZWZpbml0aW9uLnRyYW5zZm9ybShkZWZpbml0aW9uLmF0dHJpYnV0ZXMgfHwge30sIHByb3ApLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZGVmaW5pdGlvbi5zcGFjZVxuICAgICAgKVxuXG4gICAgICBpZiAoXG4gICAgICAgIGRlZmluaXRpb24ubXVzdFVzZVByb3BlcnR5ICYmXG4gICAgICAgIGRlZmluaXRpb24ubXVzdFVzZVByb3BlcnR5LmluY2x1ZGVzKHByb3ApXG4gICAgICApIHtcbiAgICAgICAgaW5mby5tdXN0VXNlUHJvcGVydHkgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIHByb3BlcnR5W3Byb3BdID0gaW5mb1xuXG4gICAgICBub3JtYWxbbm9ybWFsaXplKHByb3ApXSA9IHByb3BcbiAgICAgIG5vcm1hbFtub3JtYWxpemUoaW5mby5hdHRyaWJ1dGUpXSA9IHByb3BcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNjaGVtYShwcm9wZXJ0eSwgbm9ybWFsLCBkZWZpbml0aW9uLnNwYWNlKVxufVxuIiwgImltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL3V0aWwvY3JlYXRlLmpzJ1xuXG5leHBvcnQgY29uc3QgeGxpbmsgPSBjcmVhdGUoe1xuICBzcGFjZTogJ3hsaW5rJyxcbiAgdHJhbnNmb3JtKF8sIHByb3ApIHtcbiAgICByZXR1cm4gJ3hsaW5rOicgKyBwcm9wLnNsaWNlKDUpLnRvTG93ZXJDYXNlKClcbiAgfSxcbiAgcHJvcGVydGllczoge1xuICAgIHhMaW5rQWN0dWF0ZTogbnVsbCxcbiAgICB4TGlua0FyY1JvbGU6IG51bGwsXG4gICAgeExpbmtIcmVmOiBudWxsLFxuICAgIHhMaW5rUm9sZTogbnVsbCxcbiAgICB4TGlua1Nob3c6IG51bGwsXG4gICAgeExpbmtUaXRsZTogbnVsbCxcbiAgICB4TGlua1R5cGU6IG51bGxcbiAgfVxufSlcbiIsICJpbXBvcnQge2NyZWF0ZX0gZnJvbSAnLi91dGlsL2NyZWF0ZS5qcydcblxuZXhwb3J0IGNvbnN0IHhtbCA9IGNyZWF0ZSh7XG4gIHNwYWNlOiAneG1sJyxcbiAgdHJhbnNmb3JtKF8sIHByb3ApIHtcbiAgICByZXR1cm4gJ3htbDonICsgcHJvcC5zbGljZSgzKS50b0xvd2VyQ2FzZSgpXG4gIH0sXG4gIHByb3BlcnRpZXM6IHt4bWxMYW5nOiBudWxsLCB4bWxCYXNlOiBudWxsLCB4bWxTcGFjZTogbnVsbH1cbn0pXG4iLCAiLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXNlU2Vuc2l0aXZlVHJhbnNmb3JtKGF0dHJpYnV0ZXMsIGF0dHJpYnV0ZSkge1xuICByZXR1cm4gYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMgPyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gOiBhdHRyaWJ1dGVcbn1cbiIsICJpbXBvcnQge2Nhc2VTZW5zaXRpdmVUcmFuc2Zvcm19IGZyb20gJy4vY2FzZS1zZW5zaXRpdmUtdHJhbnNmb3JtLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gYXR0cmlidXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtKGF0dHJpYnV0ZXMsIHByb3BlcnR5KSB7XG4gIHJldHVybiBjYXNlU2Vuc2l0aXZlVHJhbnNmb3JtKGF0dHJpYnV0ZXMsIHByb3BlcnR5LnRvTG93ZXJDYXNlKCkpXG59XG4iLCAiaW1wb3J0IHtjcmVhdGV9IGZyb20gJy4vdXRpbC9jcmVhdGUuanMnXG5pbXBvcnQge2Nhc2VJbnNlbnNpdGl2ZVRyYW5zZm9ybX0gZnJvbSAnLi91dGlsL2Nhc2UtaW5zZW5zaXRpdmUtdHJhbnNmb3JtLmpzJ1xuXG5leHBvcnQgY29uc3QgeG1sbnMgPSBjcmVhdGUoe1xuICBzcGFjZTogJ3htbG5zJyxcbiAgYXR0cmlidXRlczoge3htbG5zeGxpbms6ICd4bWxuczp4bGluayd9LFxuICB0cmFuc2Zvcm06IGNhc2VJbnNlbnNpdGl2ZVRyYW5zZm9ybSxcbiAgcHJvcGVydGllczoge3htbG5zOiBudWxsLCB4bWxuc1hMaW5rOiBudWxsfVxufSlcbiIsICJpbXBvcnQge2Jvb2xlYW5pc2gsIG51bWJlciwgc3BhY2VTZXBhcmF0ZWR9IGZyb20gJy4vdXRpbC90eXBlcy5qcydcbmltcG9ydCB7Y3JlYXRlfSBmcm9tICcuL3V0aWwvY3JlYXRlLmpzJ1xuXG5leHBvcnQgY29uc3QgYXJpYSA9IGNyZWF0ZSh7XG4gIHRyYW5zZm9ybShfLCBwcm9wKSB7XG4gICAgcmV0dXJuIHByb3AgPT09ICdyb2xlJyA/IHByb3AgOiAnYXJpYS0nICsgcHJvcC5zbGljZSg0KS50b0xvd2VyQ2FzZSgpXG4gIH0sXG4gIHByb3BlcnRpZXM6IHtcbiAgICBhcmlhQWN0aXZlRGVzY2VuZGFudDogbnVsbCxcbiAgICBhcmlhQXRvbWljOiBib29sZWFuaXNoLFxuICAgIGFyaWFBdXRvQ29tcGxldGU6IG51bGwsXG4gICAgYXJpYUJ1c3k6IGJvb2xlYW5pc2gsXG4gICAgYXJpYUNoZWNrZWQ6IGJvb2xlYW5pc2gsXG4gICAgYXJpYUNvbENvdW50OiBudW1iZXIsXG4gICAgYXJpYUNvbEluZGV4OiBudW1iZXIsXG4gICAgYXJpYUNvbFNwYW46IG51bWJlcixcbiAgICBhcmlhQ29udHJvbHM6IHNwYWNlU2VwYXJhdGVkLFxuICAgIGFyaWFDdXJyZW50OiBudWxsLFxuICAgIGFyaWFEZXNjcmliZWRCeTogc3BhY2VTZXBhcmF0ZWQsXG4gICAgYXJpYURldGFpbHM6IG51bGwsXG4gICAgYXJpYURpc2FibGVkOiBib29sZWFuaXNoLFxuICAgIGFyaWFEcm9wRWZmZWN0OiBzcGFjZVNlcGFyYXRlZCxcbiAgICBhcmlhRXJyb3JNZXNzYWdlOiBudWxsLFxuICAgIGFyaWFFeHBhbmRlZDogYm9vbGVhbmlzaCxcbiAgICBhcmlhRmxvd1RvOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBhcmlhR3JhYmJlZDogYm9vbGVhbmlzaCxcbiAgICBhcmlhSGFzUG9wdXA6IG51bGwsXG4gICAgYXJpYUhpZGRlbjogYm9vbGVhbmlzaCxcbiAgICBhcmlhSW52YWxpZDogbnVsbCxcbiAgICBhcmlhS2V5U2hvcnRjdXRzOiBudWxsLFxuICAgIGFyaWFMYWJlbDogbnVsbCxcbiAgICBhcmlhTGFiZWxsZWRCeTogc3BhY2VTZXBhcmF0ZWQsXG4gICAgYXJpYUxldmVsOiBudW1iZXIsXG4gICAgYXJpYUxpdmU6IG51bGwsXG4gICAgYXJpYU1vZGFsOiBib29sZWFuaXNoLFxuICAgIGFyaWFNdWx0aUxpbmU6IGJvb2xlYW5pc2gsXG4gICAgYXJpYU11bHRpU2VsZWN0YWJsZTogYm9vbGVhbmlzaCxcbiAgICBhcmlhT3JpZW50YXRpb246IG51bGwsXG4gICAgYXJpYU93bnM6IHNwYWNlU2VwYXJhdGVkLFxuICAgIGFyaWFQbGFjZWhvbGRlcjogbnVsbCxcbiAgICBhcmlhUG9zSW5TZXQ6IG51bWJlcixcbiAgICBhcmlhUHJlc3NlZDogYm9vbGVhbmlzaCxcbiAgICBhcmlhUmVhZE9ubHk6IGJvb2xlYW5pc2gsXG4gICAgYXJpYVJlbGV2YW50OiBudWxsLFxuICAgIGFyaWFSZXF1aXJlZDogYm9vbGVhbmlzaCxcbiAgICBhcmlhUm9sZURlc2NyaXB0aW9uOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBhcmlhUm93Q291bnQ6IG51bWJlcixcbiAgICBhcmlhUm93SW5kZXg6IG51bWJlcixcbiAgICBhcmlhUm93U3BhbjogbnVtYmVyLFxuICAgIGFyaWFTZWxlY3RlZDogYm9vbGVhbmlzaCxcbiAgICBhcmlhU2V0U2l6ZTogbnVtYmVyLFxuICAgIGFyaWFTb3J0OiBudWxsLFxuICAgIGFyaWFWYWx1ZU1heDogbnVtYmVyLFxuICAgIGFyaWFWYWx1ZU1pbjogbnVtYmVyLFxuICAgIGFyaWFWYWx1ZU5vdzogbnVtYmVyLFxuICAgIGFyaWFWYWx1ZVRleHQ6IG51bGwsXG4gICAgcm9sZTogbnVsbFxuICB9XG59KVxuIiwgImltcG9ydCB7XG4gIGJvb2xlYW4sXG4gIG92ZXJsb2FkZWRCb29sZWFuLFxuICBib29sZWFuaXNoLFxuICBudW1iZXIsXG4gIHNwYWNlU2VwYXJhdGVkLFxuICBjb21tYVNlcGFyYXRlZFxufSBmcm9tICcuL3V0aWwvdHlwZXMuanMnXG5pbXBvcnQge2NyZWF0ZX0gZnJvbSAnLi91dGlsL2NyZWF0ZS5qcydcbmltcG9ydCB7Y2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtfSBmcm9tICcuL3V0aWwvY2FzZS1pbnNlbnNpdGl2ZS10cmFuc2Zvcm0uanMnXG5cbmV4cG9ydCBjb25zdCBodG1sID0gY3JlYXRlKHtcbiAgc3BhY2U6ICdodG1sJyxcbiAgYXR0cmlidXRlczoge1xuICAgIGFjY2VwdGNoYXJzZXQ6ICdhY2NlcHQtY2hhcnNldCcsXG4gICAgY2xhc3NuYW1lOiAnY2xhc3MnLFxuICAgIGh0bWxmb3I6ICdmb3InLFxuICAgIGh0dHBlcXVpdjogJ2h0dHAtZXF1aXYnXG4gIH0sXG4gIHRyYW5zZm9ybTogY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtLFxuICBtdXN0VXNlUHJvcGVydHk6IFsnY2hlY2tlZCcsICdtdWx0aXBsZScsICdtdXRlZCcsICdzZWxlY3RlZCddLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgLy8gU3RhbmRhcmQgUHJvcGVydGllcy5cbiAgICBhYmJyOiBudWxsLFxuICAgIGFjY2VwdDogY29tbWFTZXBhcmF0ZWQsXG4gICAgYWNjZXB0Q2hhcnNldDogc3BhY2VTZXBhcmF0ZWQsXG4gICAgYWNjZXNzS2V5OiBzcGFjZVNlcGFyYXRlZCxcbiAgICBhY3Rpb246IG51bGwsXG4gICAgYWxsb3c6IG51bGwsXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBib29sZWFuLFxuICAgIGFsbG93UGF5bWVudFJlcXVlc3Q6IGJvb2xlYW4sXG4gICAgYWxsb3dVc2VyTWVkaWE6IGJvb2xlYW4sXG4gICAgYWx0OiBudWxsLFxuICAgIGFzOiBudWxsLFxuICAgIGFzeW5jOiBib29sZWFuLFxuICAgIGF1dG9DYXBpdGFsaXplOiBudWxsLFxuICAgIGF1dG9Db21wbGV0ZTogc3BhY2VTZXBhcmF0ZWQsXG4gICAgYXV0b0ZvY3VzOiBib29sZWFuLFxuICAgIGF1dG9QbGF5OiBib29sZWFuLFxuICAgIGJsb2NraW5nOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBjYXB0dXJlOiBib29sZWFuLFxuICAgIGNoYXJTZXQ6IG51bGwsXG4gICAgY2hlY2tlZDogYm9vbGVhbixcbiAgICBjaXRlOiBudWxsLFxuICAgIGNsYXNzTmFtZTogc3BhY2VTZXBhcmF0ZWQsXG4gICAgY29sczogbnVtYmVyLFxuICAgIGNvbFNwYW46IG51bGwsXG4gICAgY29udGVudDogbnVsbCxcbiAgICBjb250ZW50RWRpdGFibGU6IGJvb2xlYW5pc2gsXG4gICAgY29udHJvbHM6IGJvb2xlYW4sXG4gICAgY29udHJvbHNMaXN0OiBzcGFjZVNlcGFyYXRlZCxcbiAgICBjb29yZHM6IG51bWJlciB8IGNvbW1hU2VwYXJhdGVkLFxuICAgIGNyb3NzT3JpZ2luOiBudWxsLFxuICAgIGRhdGE6IG51bGwsXG4gICAgZGF0ZVRpbWU6IG51bGwsXG4gICAgZGVjb2Rpbmc6IG51bGwsXG4gICAgZGVmYXVsdDogYm9vbGVhbixcbiAgICBkZWZlcjogYm9vbGVhbixcbiAgICBkaXI6IG51bGwsXG4gICAgZGlyTmFtZTogbnVsbCxcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcbiAgICBkb3dubG9hZDogb3ZlcmxvYWRlZEJvb2xlYW4sXG4gICAgZHJhZ2dhYmxlOiBib29sZWFuaXNoLFxuICAgIGVuY1R5cGU6IG51bGwsXG4gICAgZW50ZXJLZXlIaW50OiBudWxsLFxuICAgIGZldGNoUHJpb3JpdHk6IG51bGwsXG4gICAgZm9ybTogbnVsbCxcbiAgICBmb3JtQWN0aW9uOiBudWxsLFxuICAgIGZvcm1FbmNUeXBlOiBudWxsLFxuICAgIGZvcm1NZXRob2Q6IG51bGwsXG4gICAgZm9ybU5vVmFsaWRhdGU6IGJvb2xlYW4sXG4gICAgZm9ybVRhcmdldDogbnVsbCxcbiAgICBoZWFkZXJzOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBoaWRkZW46IGJvb2xlYW4sXG4gICAgaGlnaDogbnVtYmVyLFxuICAgIGhyZWY6IG51bGwsXG4gICAgaHJlZkxhbmc6IG51bGwsXG4gICAgaHRtbEZvcjogc3BhY2VTZXBhcmF0ZWQsXG4gICAgaHR0cEVxdWl2OiBzcGFjZVNlcGFyYXRlZCxcbiAgICBpZDogbnVsbCxcbiAgICBpbWFnZVNpemVzOiBudWxsLFxuICAgIGltYWdlU3JjU2V0OiBudWxsLFxuICAgIGluZXJ0OiBib29sZWFuLFxuICAgIGlucHV0TW9kZTogbnVsbCxcbiAgICBpbnRlZ3JpdHk6IG51bGwsXG4gICAgaXM6IG51bGwsXG4gICAgaXNNYXA6IGJvb2xlYW4sXG4gICAgaXRlbUlkOiBudWxsLFxuICAgIGl0ZW1Qcm9wOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBpdGVtUmVmOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBpdGVtU2NvcGU6IGJvb2xlYW4sXG4gICAgaXRlbVR5cGU6IHNwYWNlU2VwYXJhdGVkLFxuICAgIGtpbmQ6IG51bGwsXG4gICAgbGFiZWw6IG51bGwsXG4gICAgbGFuZzogbnVsbCxcbiAgICBsYW5ndWFnZTogbnVsbCxcbiAgICBsaXN0OiBudWxsLFxuICAgIGxvYWRpbmc6IG51bGwsXG4gICAgbG9vcDogYm9vbGVhbixcbiAgICBsb3c6IG51bWJlcixcbiAgICBtYW5pZmVzdDogbnVsbCxcbiAgICBtYXg6IG51bGwsXG4gICAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gICAgbWVkaWE6IG51bGwsXG4gICAgbWV0aG9kOiBudWxsLFxuICAgIG1pbjogbnVsbCxcbiAgICBtaW5MZW5ndGg6IG51bWJlcixcbiAgICBtdWx0aXBsZTogYm9vbGVhbixcbiAgICBtdXRlZDogYm9vbGVhbixcbiAgICBuYW1lOiBudWxsLFxuICAgIG5vbmNlOiBudWxsLFxuICAgIG5vTW9kdWxlOiBib29sZWFuLFxuICAgIG5vVmFsaWRhdGU6IGJvb2xlYW4sXG4gICAgb25BYm9ydDogbnVsbCxcbiAgICBvbkFmdGVyUHJpbnQ6IG51bGwsXG4gICAgb25BdXhDbGljazogbnVsbCxcbiAgICBvbkJlZm9yZU1hdGNoOiBudWxsLFxuICAgIG9uQmVmb3JlUHJpbnQ6IG51bGwsXG4gICAgb25CZWZvcmVUb2dnbGU6IG51bGwsXG4gICAgb25CZWZvcmVVbmxvYWQ6IG51bGwsXG4gICAgb25CbHVyOiBudWxsLFxuICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgIG9uQ2FuUGxheTogbnVsbCxcbiAgICBvbkNhblBsYXlUaHJvdWdoOiBudWxsLFxuICAgIG9uQ2hhbmdlOiBudWxsLFxuICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgb25DbG9zZTogbnVsbCxcbiAgICBvbkNvbnRleHRMb3N0OiBudWxsLFxuICAgIG9uQ29udGV4dE1lbnU6IG51bGwsXG4gICAgb25Db250ZXh0UmVzdG9yZWQ6IG51bGwsXG4gICAgb25Db3B5OiBudWxsLFxuICAgIG9uQ3VlQ2hhbmdlOiBudWxsLFxuICAgIG9uQ3V0OiBudWxsLFxuICAgIG9uRGJsQ2xpY2s6IG51bGwsXG4gICAgb25EcmFnOiBudWxsLFxuICAgIG9uRHJhZ0VuZDogbnVsbCxcbiAgICBvbkRyYWdFbnRlcjogbnVsbCxcbiAgICBvbkRyYWdFeGl0OiBudWxsLFxuICAgIG9uRHJhZ0xlYXZlOiBudWxsLFxuICAgIG9uRHJhZ092ZXI6IG51bGwsXG4gICAgb25EcmFnU3RhcnQ6IG51bGwsXG4gICAgb25Ecm9wOiBudWxsLFxuICAgIG9uRHVyYXRpb25DaGFuZ2U6IG51bGwsXG4gICAgb25FbXB0aWVkOiBudWxsLFxuICAgIG9uRW5kZWQ6IG51bGwsXG4gICAgb25FcnJvcjogbnVsbCxcbiAgICBvbkZvY3VzOiBudWxsLFxuICAgIG9uRm9ybURhdGE6IG51bGwsXG4gICAgb25IYXNoQ2hhbmdlOiBudWxsLFxuICAgIG9uSW5wdXQ6IG51bGwsXG4gICAgb25JbnZhbGlkOiBudWxsLFxuICAgIG9uS2V5RG93bjogbnVsbCxcbiAgICBvbktleVByZXNzOiBudWxsLFxuICAgIG9uS2V5VXA6IG51bGwsXG4gICAgb25MYW5ndWFnZUNoYW5nZTogbnVsbCxcbiAgICBvbkxvYWQ6IG51bGwsXG4gICAgb25Mb2FkZWREYXRhOiBudWxsLFxuICAgIG9uTG9hZGVkTWV0YWRhdGE6IG51bGwsXG4gICAgb25Mb2FkRW5kOiBudWxsLFxuICAgIG9uTG9hZFN0YXJ0OiBudWxsLFxuICAgIG9uTWVzc2FnZTogbnVsbCxcbiAgICBvbk1lc3NhZ2VFcnJvcjogbnVsbCxcbiAgICBvbk1vdXNlRG93bjogbnVsbCxcbiAgICBvbk1vdXNlRW50ZXI6IG51bGwsXG4gICAgb25Nb3VzZUxlYXZlOiBudWxsLFxuICAgIG9uTW91c2VNb3ZlOiBudWxsLFxuICAgIG9uTW91c2VPdXQ6IG51bGwsXG4gICAgb25Nb3VzZU92ZXI6IG51bGwsXG4gICAgb25Nb3VzZVVwOiBudWxsLFxuICAgIG9uT2ZmbGluZTogbnVsbCxcbiAgICBvbk9ubGluZTogbnVsbCxcbiAgICBvblBhZ2VIaWRlOiBudWxsLFxuICAgIG9uUGFnZVNob3c6IG51bGwsXG4gICAgb25QYXN0ZTogbnVsbCxcbiAgICBvblBhdXNlOiBudWxsLFxuICAgIG9uUGxheTogbnVsbCxcbiAgICBvblBsYXlpbmc6IG51bGwsXG4gICAgb25Qb3BTdGF0ZTogbnVsbCxcbiAgICBvblByb2dyZXNzOiBudWxsLFxuICAgIG9uUmF0ZUNoYW5nZTogbnVsbCxcbiAgICBvblJlamVjdGlvbkhhbmRsZWQ6IG51bGwsXG4gICAgb25SZXNldDogbnVsbCxcbiAgICBvblJlc2l6ZTogbnVsbCxcbiAgICBvblNjcm9sbDogbnVsbCxcbiAgICBvblNjcm9sbEVuZDogbnVsbCxcbiAgICBvblNlY3VyaXR5UG9saWN5VmlvbGF0aW9uOiBudWxsLFxuICAgIG9uU2Vla2VkOiBudWxsLFxuICAgIG9uU2Vla2luZzogbnVsbCxcbiAgICBvblNlbGVjdDogbnVsbCxcbiAgICBvblNsb3RDaGFuZ2U6IG51bGwsXG4gICAgb25TdGFsbGVkOiBudWxsLFxuICAgIG9uU3RvcmFnZTogbnVsbCxcbiAgICBvblN1Ym1pdDogbnVsbCxcbiAgICBvblN1c3BlbmQ6IG51bGwsXG4gICAgb25UaW1lVXBkYXRlOiBudWxsLFxuICAgIG9uVG9nZ2xlOiBudWxsLFxuICAgIG9uVW5oYW5kbGVkUmVqZWN0aW9uOiBudWxsLFxuICAgIG9uVW5sb2FkOiBudWxsLFxuICAgIG9uVm9sdW1lQ2hhbmdlOiBudWxsLFxuICAgIG9uV2FpdGluZzogbnVsbCxcbiAgICBvbldoZWVsOiBudWxsLFxuICAgIG9wZW46IGJvb2xlYW4sXG4gICAgb3B0aW11bTogbnVtYmVyLFxuICAgIHBhdHRlcm46IG51bGwsXG4gICAgcGluZzogc3BhY2VTZXBhcmF0ZWQsXG4gICAgcGxhY2Vob2xkZXI6IG51bGwsXG4gICAgcGxheXNJbmxpbmU6IGJvb2xlYW4sXG4gICAgcG9wb3ZlcjogbnVsbCxcbiAgICBwb3BvdmVyVGFyZ2V0OiBudWxsLFxuICAgIHBvcG92ZXJUYXJnZXRBY3Rpb246IG51bGwsXG4gICAgcG9zdGVyOiBudWxsLFxuICAgIHByZWxvYWQ6IG51bGwsXG4gICAgcmVhZE9ubHk6IGJvb2xlYW4sXG4gICAgcmVmZXJyZXJQb2xpY3k6IG51bGwsXG4gICAgcmVsOiBzcGFjZVNlcGFyYXRlZCxcbiAgICByZXF1aXJlZDogYm9vbGVhbixcbiAgICByZXZlcnNlZDogYm9vbGVhbixcbiAgICByb3dzOiBudW1iZXIsXG4gICAgcm93U3BhbjogbnVtYmVyLFxuICAgIHNhbmRib3g6IHNwYWNlU2VwYXJhdGVkLFxuICAgIHNjb3BlOiBudWxsLFxuICAgIHNjb3BlZDogYm9vbGVhbixcbiAgICBzZWFtbGVzczogYm9vbGVhbixcbiAgICBzZWxlY3RlZDogYm9vbGVhbixcbiAgICBzaGFkb3dSb290RGVsZWdhdGVzRm9jdXM6IGJvb2xlYW4sXG4gICAgc2hhZG93Um9vdE1vZGU6IG51bGwsXG4gICAgc2hhcGU6IG51bGwsXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIHNpemVzOiBudWxsLFxuICAgIHNsb3Q6IG51bGwsXG4gICAgc3BhbjogbnVtYmVyLFxuICAgIHNwZWxsQ2hlY2s6IGJvb2xlYW5pc2gsXG4gICAgc3JjOiBudWxsLFxuICAgIHNyY0RvYzogbnVsbCxcbiAgICBzcmNMYW5nOiBudWxsLFxuICAgIHNyY1NldDogbnVsbCxcbiAgICBzdGFydDogbnVtYmVyLFxuICAgIHN0ZXA6IG51bGwsXG4gICAgc3R5bGU6IG51bGwsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICB0YXJnZXQ6IG51bGwsXG4gICAgdGl0bGU6IG51bGwsXG4gICAgdHJhbnNsYXRlOiBudWxsLFxuICAgIHR5cGU6IG51bGwsXG4gICAgdHlwZU11c3RNYXRjaDogYm9vbGVhbixcbiAgICB1c2VNYXA6IG51bGwsXG4gICAgdmFsdWU6IGJvb2xlYW5pc2gsXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICB3cmFwOiBudWxsLFxuXG4gICAgLy8gTGVnYWN5LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jb3RoZXItZWxlbWVudHMsLWF0dHJpYnV0ZXMtYW5kLWFwaXNcbiAgICBhbGlnbjogbnVsbCwgLy8gU2V2ZXJhbC4gVXNlIENTUyBgdGV4dC1hbGlnbmAgaW5zdGVhZCxcbiAgICBhTGluazogbnVsbCwgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGE6YWN0aXZlIHtjb2xvcn1gIGluc3RlYWRcbiAgICBhcmNoaXZlOiBzcGFjZVNlcGFyYXRlZCwgLy8gYDxvYmplY3Q+YC4gTGlzdCBvZiBVUklzIHRvIGFyY2hpdmVzXG4gICAgYXhpczogbnVsbCwgLy8gYDx0ZD5gIGFuZCBgPHRoPmAuIFVzZSBgc2NvcGVgIG9uIGA8dGg+YFxuICAgIGJhY2tncm91bmQ6IG51bGwsIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBiYWNrZ3JvdW5kLWltYWdlYCBpbnN0ZWFkXG4gICAgYmdDb2xvcjogbnVsbCwgLy8gYDxib2R5PmAgYW5kIHRhYmxlIGVsZW1lbnRzLiBVc2UgQ1NTIGBiYWNrZ3JvdW5kLWNvbG9yYCBpbnN0ZWFkXG4gICAgYm9yZGVyOiBudW1iZXIsIC8vIGA8dGFibGU+YC4gVXNlIENTUyBgYm9yZGVyLXdpZHRoYCBpbnN0ZWFkLFxuICAgIGJvcmRlckNvbG9yOiBudWxsLCAvLyBgPHRhYmxlPmAuIFVzZSBDU1MgYGJvcmRlci1jb2xvcmAgaW5zdGVhZCxcbiAgICBib3R0b21NYXJnaW46IG51bWJlciwgLy8gYDxib2R5PmBcbiAgICBjZWxsUGFkZGluZzogbnVsbCwgLy8gYDx0YWJsZT5gXG4gICAgY2VsbFNwYWNpbmc6IG51bGwsIC8vIGA8dGFibGU+YFxuICAgIGNoYXI6IG51bGwsIC8vIFNldmVyYWwgdGFibGUgZWxlbWVudHMuIFdoZW4gYGFsaWduPWNoYXJgLCBzZXRzIHRoZSBjaGFyYWN0ZXIgdG8gYWxpZ24gb25cbiAgICBjaGFyT2ZmOiBudWxsLCAvLyBTZXZlcmFsIHRhYmxlIGVsZW1lbnRzLiBXaGVuIGBjaGFyYCwgb2Zmc2V0cyB0aGUgYWxpZ25tZW50XG4gICAgY2xhc3NJZDogbnVsbCwgLy8gYDxvYmplY3Q+YFxuICAgIGNsZWFyOiBudWxsLCAvLyBgPGJyPmAuIFVzZSBDU1MgYGNsZWFyYCBpbnN0ZWFkXG4gICAgY29kZTogbnVsbCwgLy8gYDxvYmplY3Q+YFxuICAgIGNvZGVCYXNlOiBudWxsLCAvLyBgPG9iamVjdD5gXG4gICAgY29kZVR5cGU6IG51bGwsIC8vIGA8b2JqZWN0PmBcbiAgICBjb2xvcjogbnVsbCwgLy8gYDxmb250PmAgYW5kIGA8aHI+YC4gVXNlIENTUyBpbnN0ZWFkXG4gICAgY29tcGFjdDogYm9vbGVhbiwgLy8gTGlzdHMuIFVzZSBDU1MgdG8gcmVkdWNlIHNwYWNlIGJldHdlZW4gaXRlbXMgaW5zdGVhZFxuICAgIGRlY2xhcmU6IGJvb2xlYW4sIC8vIGA8b2JqZWN0PmBcbiAgICBldmVudDogbnVsbCwgLy8gYDxzY3JpcHQ+YFxuICAgIGZhY2U6IG51bGwsIC8vIGA8Zm9udD5gLiBVc2UgQ1NTIGluc3RlYWRcbiAgICBmcmFtZTogbnVsbCwgLy8gYDx0YWJsZT5gXG4gICAgZnJhbWVCb3JkZXI6IG51bGwsIC8vIGA8aWZyYW1lPmAuIFVzZSBDU1MgYGJvcmRlcmAgaW5zdGVhZFxuICAgIGhTcGFjZTogbnVtYmVyLCAvLyBgPGltZz5gIGFuZCBgPG9iamVjdD5gXG4gICAgbGVmdE1hcmdpbjogbnVtYmVyLCAvLyBgPGJvZHk+YFxuICAgIGxpbms6IG51bGwsIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBhOmxpbmsge2NvbG9yOiAqfWAgaW5zdGVhZFxuICAgIGxvbmdEZXNjOiBudWxsLCAvLyBgPGZyYW1lPmAsIGA8aWZyYW1lPmAsIGFuZCBgPGltZz5gLiBVc2UgYW4gYDxhPmBcbiAgICBsb3dTcmM6IG51bGwsIC8vIGA8aW1nPmAuIFVzZSBhIGA8cGljdHVyZT5gXG4gICAgbWFyZ2luSGVpZ2h0OiBudW1iZXIsIC8vIGA8Ym9keT5gXG4gICAgbWFyZ2luV2lkdGg6IG51bWJlciwgLy8gYDxib2R5PmBcbiAgICBub1Jlc2l6ZTogYm9vbGVhbiwgLy8gYDxmcmFtZT5gXG4gICAgbm9IcmVmOiBib29sZWFuLCAvLyBgPGFyZWE+YC4gVXNlIG5vIGhyZWYgaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBgbm9ocmVmYFxuICAgIG5vU2hhZGU6IGJvb2xlYW4sIC8vIGA8aHI+YC4gVXNlIGJhY2tncm91bmQtY29sb3IgYW5kIGhlaWdodCBpbnN0ZWFkIG9mIGJvcmRlcnNcbiAgICBub1dyYXA6IGJvb2xlYW4sIC8vIGA8dGQ+YCBhbmQgYDx0aD5gXG4gICAgb2JqZWN0OiBudWxsLCAvLyBgPGFwcGxldD5gXG4gICAgcHJvZmlsZTogbnVsbCwgLy8gYDxoZWFkPmBcbiAgICBwcm9tcHQ6IG51bGwsIC8vIGA8aXNpbmRleD5gXG4gICAgcmV2OiBudWxsLCAvLyBgPGxpbms+YFxuICAgIHJpZ2h0TWFyZ2luOiBudW1iZXIsIC8vIGA8Ym9keT5gXG4gICAgcnVsZXM6IG51bGwsIC8vIGA8dGFibGU+YFxuICAgIHNjaGVtZTogbnVsbCwgLy8gYDxtZXRhPmBcbiAgICBzY3JvbGxpbmc6IGJvb2xlYW5pc2gsIC8vIGA8ZnJhbWU+YC4gVXNlIG92ZXJmbG93IGluIHRoZSBjaGlsZCBjb250ZXh0XG4gICAgc3RhbmRieTogbnVsbCwgLy8gYDxvYmplY3Q+YFxuICAgIHN1bW1hcnk6IG51bGwsIC8vIGA8dGFibGU+YFxuICAgIHRleHQ6IG51bGwsIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBjb2xvcmAgaW5zdGVhZFxuICAgIHRvcE1hcmdpbjogbnVtYmVyLCAvLyBgPGJvZHk+YFxuICAgIHZhbHVlVHlwZTogbnVsbCwgLy8gYDxwYXJhbT5gXG4gICAgdmVyc2lvbjogbnVsbCwgLy8gYDxodG1sPmAuIFVzZSBhIGRvY3R5cGUuXG4gICAgdkFsaWduOiBudWxsLCAvLyBTZXZlcmFsLiBVc2UgQ1NTIGB2ZXJ0aWNhbC1hbGlnbmAgaW5zdGVhZFxuICAgIHZMaW5rOiBudWxsLCAvLyBgPGJvZHk+YC4gVXNlIENTUyBgYTp2aXNpdGVkIHtjb2xvcn1gIGluc3RlYWRcbiAgICB2U3BhY2U6IG51bWJlciwgLy8gYDxpbWc+YCBhbmQgYDxvYmplY3Q+YFxuXG4gICAgLy8gTm9uLXN0YW5kYXJkIFByb3BlcnRpZXMuXG4gICAgYWxsb3dUcmFuc3BhcmVuY3k6IG51bGwsXG4gICAgYXV0b0NvcnJlY3Q6IG51bGwsXG4gICAgYXV0b1NhdmU6IG51bGwsXG4gICAgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmU6IGJvb2xlYW4sXG4gICAgZGlzYWJsZVJlbW90ZVBsYXliYWNrOiBib29sZWFuLFxuICAgIHByZWZpeDogbnVsbCxcbiAgICBwcm9wZXJ0eTogbnVsbCxcbiAgICByZXN1bHRzOiBudW1iZXIsXG4gICAgc2VjdXJpdHk6IG51bGwsXG4gICAgdW5zZWxlY3RhYmxlOiBudWxsXG4gIH1cbn0pXG4iLCAiaW1wb3J0IHtcbiAgYm9vbGVhbixcbiAgbnVtYmVyLFxuICBzcGFjZVNlcGFyYXRlZCxcbiAgY29tbWFTZXBhcmF0ZWQsXG4gIGNvbW1hT3JTcGFjZVNlcGFyYXRlZFxufSBmcm9tICcuL3V0aWwvdHlwZXMuanMnXG5pbXBvcnQge2NyZWF0ZX0gZnJvbSAnLi91dGlsL2NyZWF0ZS5qcydcbmltcG9ydCB7Y2FzZVNlbnNpdGl2ZVRyYW5zZm9ybX0gZnJvbSAnLi91dGlsL2Nhc2Utc2Vuc2l0aXZlLXRyYW5zZm9ybS5qcydcblxuZXhwb3J0IGNvbnN0IHN2ZyA9IGNyZWF0ZSh7XG4gIHNwYWNlOiAnc3ZnJyxcbiAgYXR0cmlidXRlczoge1xuICAgIGFjY2VudEhlaWdodDogJ2FjY2VudC1oZWlnaHQnLFxuICAgIGFsaWdubWVudEJhc2VsaW5lOiAnYWxpZ25tZW50LWJhc2VsaW5lJyxcbiAgICBhcmFiaWNGb3JtOiAnYXJhYmljLWZvcm0nLFxuICAgIGJhc2VsaW5lU2hpZnQ6ICdiYXNlbGluZS1zaGlmdCcsXG4gICAgY2FwSGVpZ2h0OiAnY2FwLWhlaWdodCcsXG4gICAgY2xhc3NOYW1lOiAnY2xhc3MnLFxuICAgIGNsaXBQYXRoOiAnY2xpcC1wYXRoJyxcbiAgICBjbGlwUnVsZTogJ2NsaXAtcnVsZScsXG4gICAgY29sb3JJbnRlcnBvbGF0aW9uOiAnY29sb3ItaW50ZXJwb2xhdGlvbicsXG4gICAgY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczogJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsXG4gICAgY29sb3JQcm9maWxlOiAnY29sb3ItcHJvZmlsZScsXG4gICAgY29sb3JSZW5kZXJpbmc6ICdjb2xvci1yZW5kZXJpbmcnLFxuICAgIGNyb3NzT3JpZ2luOiAnY3Jvc3NvcmlnaW4nLFxuICAgIGRhdGFUeXBlOiAnZGF0YXR5cGUnLFxuICAgIGRvbWluYW50QmFzZWxpbmU6ICdkb21pbmFudC1iYXNlbGluZScsXG4gICAgZW5hYmxlQmFja2dyb3VuZDogJ2VuYWJsZS1iYWNrZ3JvdW5kJyxcbiAgICBmaWxsT3BhY2l0eTogJ2ZpbGwtb3BhY2l0eScsXG4gICAgZmlsbFJ1bGU6ICdmaWxsLXJ1bGUnLFxuICAgIGZsb29kQ29sb3I6ICdmbG9vZC1jb2xvcicsXG4gICAgZmxvb2RPcGFjaXR5OiAnZmxvb2Qtb3BhY2l0eScsXG4gICAgZm9udEZhbWlseTogJ2ZvbnQtZmFtaWx5JyxcbiAgICBmb250U2l6ZTogJ2ZvbnQtc2l6ZScsXG4gICAgZm9udFNpemVBZGp1c3Q6ICdmb250LXNpemUtYWRqdXN0JyxcbiAgICBmb250U3RyZXRjaDogJ2ZvbnQtc3RyZXRjaCcsXG4gICAgZm9udFN0eWxlOiAnZm9udC1zdHlsZScsXG4gICAgZm9udFZhcmlhbnQ6ICdmb250LXZhcmlhbnQnLFxuICAgIGZvbnRXZWlnaHQ6ICdmb250LXdlaWdodCcsXG4gICAgZ2x5cGhOYW1lOiAnZ2x5cGgtbmFtZScsXG4gICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6ICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJyxcbiAgICBnbHlwaE9yaWVudGF0aW9uVmVydGljYWw6ICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsXG4gICAgaHJlZkxhbmc6ICdocmVmbGFuZycsXG4gICAgaG9yaXpBZHZYOiAnaG9yaXotYWR2LXgnLFxuICAgIGhvcml6T3JpZ2luWDogJ2hvcml6LW9yaWdpbi14JyxcbiAgICBob3Jpek9yaWdpblk6ICdob3Jpei1vcmlnaW4teScsXG4gICAgaW1hZ2VSZW5kZXJpbmc6ICdpbWFnZS1yZW5kZXJpbmcnLFxuICAgIGxldHRlclNwYWNpbmc6ICdsZXR0ZXItc3BhY2luZycsXG4gICAgbGlnaHRpbmdDb2xvcjogJ2xpZ2h0aW5nLWNvbG9yJyxcbiAgICBtYXJrZXJFbmQ6ICdtYXJrZXItZW5kJyxcbiAgICBtYXJrZXJNaWQ6ICdtYXJrZXItbWlkJyxcbiAgICBtYXJrZXJTdGFydDogJ21hcmtlci1zdGFydCcsXG4gICAgbmF2RG93bjogJ25hdi1kb3duJyxcbiAgICBuYXZEb3duTGVmdDogJ25hdi1kb3duLWxlZnQnLFxuICAgIG5hdkRvd25SaWdodDogJ25hdi1kb3duLXJpZ2h0JyxcbiAgICBuYXZMZWZ0OiAnbmF2LWxlZnQnLFxuICAgIG5hdk5leHQ6ICduYXYtbmV4dCcsXG4gICAgbmF2UHJldjogJ25hdi1wcmV2JyxcbiAgICBuYXZSaWdodDogJ25hdi1yaWdodCcsXG4gICAgbmF2VXA6ICduYXYtdXAnLFxuICAgIG5hdlVwTGVmdDogJ25hdi11cC1sZWZ0JyxcbiAgICBuYXZVcFJpZ2h0OiAnbmF2LXVwLXJpZ2h0JyxcbiAgICBvbkFib3J0OiAnb25hYm9ydCcsXG4gICAgb25BY3RpdmF0ZTogJ29uYWN0aXZhdGUnLFxuICAgIG9uQWZ0ZXJQcmludDogJ29uYWZ0ZXJwcmludCcsXG4gICAgb25CZWZvcmVQcmludDogJ29uYmVmb3JlcHJpbnQnLFxuICAgIG9uQmVnaW46ICdvbmJlZ2luJyxcbiAgICBvbkNhbmNlbDogJ29uY2FuY2VsJyxcbiAgICBvbkNhblBsYXk6ICdvbmNhbnBsYXknLFxuICAgIG9uQ2FuUGxheVRocm91Z2g6ICdvbmNhbnBsYXl0aHJvdWdoJyxcbiAgICBvbkNoYW5nZTogJ29uY2hhbmdlJyxcbiAgICBvbkNsaWNrOiAnb25jbGljaycsXG4gICAgb25DbG9zZTogJ29uY2xvc2UnLFxuICAgIG9uQ29weTogJ29uY29weScsXG4gICAgb25DdWVDaGFuZ2U6ICdvbmN1ZWNoYW5nZScsXG4gICAgb25DdXQ6ICdvbmN1dCcsXG4gICAgb25EYmxDbGljazogJ29uZGJsY2xpY2snLFxuICAgIG9uRHJhZzogJ29uZHJhZycsXG4gICAgb25EcmFnRW5kOiAnb25kcmFnZW5kJyxcbiAgICBvbkRyYWdFbnRlcjogJ29uZHJhZ2VudGVyJyxcbiAgICBvbkRyYWdFeGl0OiAnb25kcmFnZXhpdCcsXG4gICAgb25EcmFnTGVhdmU6ICdvbmRyYWdsZWF2ZScsXG4gICAgb25EcmFnT3ZlcjogJ29uZHJhZ292ZXInLFxuICAgIG9uRHJhZ1N0YXJ0OiAnb25kcmFnc3RhcnQnLFxuICAgIG9uRHJvcDogJ29uZHJvcCcsXG4gICAgb25EdXJhdGlvbkNoYW5nZTogJ29uZHVyYXRpb25jaGFuZ2UnLFxuICAgIG9uRW1wdGllZDogJ29uZW1wdGllZCcsXG4gICAgb25FbmQ6ICdvbmVuZCcsXG4gICAgb25FbmRlZDogJ29uZW5kZWQnLFxuICAgIG9uRXJyb3I6ICdvbmVycm9yJyxcbiAgICBvbkZvY3VzOiAnb25mb2N1cycsXG4gICAgb25Gb2N1c0luOiAnb25mb2N1c2luJyxcbiAgICBvbkZvY3VzT3V0OiAnb25mb2N1c291dCcsXG4gICAgb25IYXNoQ2hhbmdlOiAnb25oYXNoY2hhbmdlJyxcbiAgICBvbklucHV0OiAnb25pbnB1dCcsXG4gICAgb25JbnZhbGlkOiAnb25pbnZhbGlkJyxcbiAgICBvbktleURvd246ICdvbmtleWRvd24nLFxuICAgIG9uS2V5UHJlc3M6ICdvbmtleXByZXNzJyxcbiAgICBvbktleVVwOiAnb25rZXl1cCcsXG4gICAgb25Mb2FkOiAnb25sb2FkJyxcbiAgICBvbkxvYWRlZERhdGE6ICdvbmxvYWRlZGRhdGEnLFxuICAgIG9uTG9hZGVkTWV0YWRhdGE6ICdvbmxvYWRlZG1ldGFkYXRhJyxcbiAgICBvbkxvYWRTdGFydDogJ29ubG9hZHN0YXJ0JyxcbiAgICBvbk1lc3NhZ2U6ICdvbm1lc3NhZ2UnLFxuICAgIG9uTW91c2VEb3duOiAnb25tb3VzZWRvd24nLFxuICAgIG9uTW91c2VFbnRlcjogJ29ubW91c2VlbnRlcicsXG4gICAgb25Nb3VzZUxlYXZlOiAnb25tb3VzZWxlYXZlJyxcbiAgICBvbk1vdXNlTW92ZTogJ29ubW91c2Vtb3ZlJyxcbiAgICBvbk1vdXNlT3V0OiAnb25tb3VzZW91dCcsXG4gICAgb25Nb3VzZU92ZXI6ICdvbm1vdXNlb3ZlcicsXG4gICAgb25Nb3VzZVVwOiAnb25tb3VzZXVwJyxcbiAgICBvbk1vdXNlV2hlZWw6ICdvbm1vdXNld2hlZWwnLFxuICAgIG9uT2ZmbGluZTogJ29ub2ZmbGluZScsXG4gICAgb25PbmxpbmU6ICdvbm9ubGluZScsXG4gICAgb25QYWdlSGlkZTogJ29ucGFnZWhpZGUnLFxuICAgIG9uUGFnZVNob3c6ICdvbnBhZ2VzaG93JyxcbiAgICBvblBhc3RlOiAnb25wYXN0ZScsXG4gICAgb25QYXVzZTogJ29ucGF1c2UnLFxuICAgIG9uUGxheTogJ29ucGxheScsXG4gICAgb25QbGF5aW5nOiAnb25wbGF5aW5nJyxcbiAgICBvblBvcFN0YXRlOiAnb25wb3BzdGF0ZScsXG4gICAgb25Qcm9ncmVzczogJ29ucHJvZ3Jlc3MnLFxuICAgIG9uUmF0ZUNoYW5nZTogJ29ucmF0ZWNoYW5nZScsXG4gICAgb25SZXBlYXQ6ICdvbnJlcGVhdCcsXG4gICAgb25SZXNldDogJ29ucmVzZXQnLFxuICAgIG9uUmVzaXplOiAnb25yZXNpemUnLFxuICAgIG9uU2Nyb2xsOiAnb25zY3JvbGwnLFxuICAgIG9uU2Vla2VkOiAnb25zZWVrZWQnLFxuICAgIG9uU2Vla2luZzogJ29uc2Vla2luZycsXG4gICAgb25TZWxlY3Q6ICdvbnNlbGVjdCcsXG4gICAgb25TaG93OiAnb25zaG93JyxcbiAgICBvblN0YWxsZWQ6ICdvbnN0YWxsZWQnLFxuICAgIG9uU3RvcmFnZTogJ29uc3RvcmFnZScsXG4gICAgb25TdWJtaXQ6ICdvbnN1Ym1pdCcsXG4gICAgb25TdXNwZW5kOiAnb25zdXNwZW5kJyxcbiAgICBvblRpbWVVcGRhdGU6ICdvbnRpbWV1cGRhdGUnLFxuICAgIG9uVG9nZ2xlOiAnb250b2dnbGUnLFxuICAgIG9uVW5sb2FkOiAnb251bmxvYWQnLFxuICAgIG9uVm9sdW1lQ2hhbmdlOiAnb252b2x1bWVjaGFuZ2UnLFxuICAgIG9uV2FpdGluZzogJ29ud2FpdGluZycsXG4gICAgb25ab29tOiAnb256b29tJyxcbiAgICBvdmVybGluZVBvc2l0aW9uOiAnb3ZlcmxpbmUtcG9zaXRpb24nLFxuICAgIG92ZXJsaW5lVGhpY2tuZXNzOiAnb3ZlcmxpbmUtdGhpY2tuZXNzJyxcbiAgICBwYWludE9yZGVyOiAncGFpbnQtb3JkZXInLFxuICAgIHBhbm9zZTE6ICdwYW5vc2UtMScsXG4gICAgcG9pbnRlckV2ZW50czogJ3BvaW50ZXItZXZlbnRzJyxcbiAgICByZWZlcnJlclBvbGljeTogJ3JlZmVycmVycG9saWN5JyxcbiAgICByZW5kZXJpbmdJbnRlbnQ6ICdyZW5kZXJpbmctaW50ZW50JyxcbiAgICBzaGFwZVJlbmRlcmluZzogJ3NoYXBlLXJlbmRlcmluZycsXG4gICAgc3RvcENvbG9yOiAnc3RvcC1jb2xvcicsXG4gICAgc3RvcE9wYWNpdHk6ICdzdG9wLW9wYWNpdHknLFxuICAgIHN0cmlrZXRocm91Z2hQb3NpdGlvbjogJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nLFxuICAgIHN0cmlrZXRocm91Z2hUaGlja25lc3M6ICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcycsXG4gICAgc3Ryb2tlRGFzaEFycmF5OiAnc3Ryb2tlLWRhc2hhcnJheScsXG4gICAgc3Ryb2tlRGFzaE9mZnNldDogJ3N0cm9rZS1kYXNob2Zmc2V0JyxcbiAgICBzdHJva2VMaW5lQ2FwOiAnc3Ryb2tlLWxpbmVjYXAnLFxuICAgIHN0cm9rZUxpbmVKb2luOiAnc3Ryb2tlLWxpbmVqb2luJyxcbiAgICBzdHJva2VNaXRlckxpbWl0OiAnc3Ryb2tlLW1pdGVybGltaXQnLFxuICAgIHN0cm9rZU9wYWNpdHk6ICdzdHJva2Utb3BhY2l0eScsXG4gICAgc3Ryb2tlV2lkdGg6ICdzdHJva2Utd2lkdGgnLFxuICAgIHRhYkluZGV4OiAndGFiaW5kZXgnLFxuICAgIHRleHRBbmNob3I6ICd0ZXh0LWFuY2hvcicsXG4gICAgdGV4dERlY29yYXRpb246ICd0ZXh0LWRlY29yYXRpb24nLFxuICAgIHRleHRSZW5kZXJpbmc6ICd0ZXh0LXJlbmRlcmluZycsXG4gICAgdHJhbnNmb3JtT3JpZ2luOiAndHJhbnNmb3JtLW9yaWdpbicsXG4gICAgdHlwZU9mOiAndHlwZW9mJyxcbiAgICB1bmRlcmxpbmVQb3NpdGlvbjogJ3VuZGVybGluZS1wb3NpdGlvbicsXG4gICAgdW5kZXJsaW5lVGhpY2tuZXNzOiAndW5kZXJsaW5lLXRoaWNrbmVzcycsXG4gICAgdW5pY29kZUJpZGk6ICd1bmljb2RlLWJpZGknLFxuICAgIHVuaWNvZGVSYW5nZTogJ3VuaWNvZGUtcmFuZ2UnLFxuICAgIHVuaXRzUGVyRW06ICd1bml0cy1wZXItZW0nLFxuICAgIHZBbHBoYWJldGljOiAndi1hbHBoYWJldGljJyxcbiAgICB2SGFuZ2luZzogJ3YtaGFuZ2luZycsXG4gICAgdklkZW9ncmFwaGljOiAndi1pZGVvZ3JhcGhpYycsXG4gICAgdk1hdGhlbWF0aWNhbDogJ3YtbWF0aGVtYXRpY2FsJyxcbiAgICB2ZWN0b3JFZmZlY3Q6ICd2ZWN0b3ItZWZmZWN0JyxcbiAgICB2ZXJ0QWR2WTogJ3ZlcnQtYWR2LXknLFxuICAgIHZlcnRPcmlnaW5YOiAndmVydC1vcmlnaW4teCcsXG4gICAgdmVydE9yaWdpblk6ICd2ZXJ0LW9yaWdpbi15JyxcbiAgICB3b3JkU3BhY2luZzogJ3dvcmQtc3BhY2luZycsXG4gICAgd3JpdGluZ01vZGU6ICd3cml0aW5nLW1vZGUnLFxuICAgIHhIZWlnaHQ6ICd4LWhlaWdodCcsXG4gICAgLy8gVGhlc2Ugd2VyZSBjYW1lbGNhc2VkIGluIFRpbnkuIE5vdyBsb3dlcmNhc2VkIGluIFNWRyAyXG4gICAgcGxheWJhY2tPcmRlcjogJ3BsYXliYWNrb3JkZXInLFxuICAgIHRpbWVsaW5lQmVnaW46ICd0aW1lbGluZWJlZ2luJ1xuICB9LFxuICB0cmFuc2Zvcm06IGNhc2VTZW5zaXRpdmVUcmFuc2Zvcm0sXG4gIHByb3BlcnRpZXM6IHtcbiAgICBhYm91dDogY29tbWFPclNwYWNlU2VwYXJhdGVkLFxuICAgIGFjY2VudEhlaWdodDogbnVtYmVyLFxuICAgIGFjY3VtdWxhdGU6IG51bGwsXG4gICAgYWRkaXRpdmU6IG51bGwsXG4gICAgYWxpZ25tZW50QmFzZWxpbmU6IG51bGwsXG4gICAgYWxwaGFiZXRpYzogbnVtYmVyLFxuICAgIGFtcGxpdHVkZTogbnVtYmVyLFxuICAgIGFyYWJpY0Zvcm06IG51bGwsXG4gICAgYXNjZW50OiBudW1iZXIsXG4gICAgYXR0cmlidXRlTmFtZTogbnVsbCxcbiAgICBhdHRyaWJ1dGVUeXBlOiBudWxsLFxuICAgIGF6aW11dGg6IG51bWJlcixcbiAgICBiYW5kd2lkdGg6IG51bGwsXG4gICAgYmFzZWxpbmVTaGlmdDogbnVsbCxcbiAgICBiYXNlRnJlcXVlbmN5OiBudWxsLFxuICAgIGJhc2VQcm9maWxlOiBudWxsLFxuICAgIGJib3g6IG51bGwsXG4gICAgYmVnaW46IG51bGwsXG4gICAgYmlhczogbnVtYmVyLFxuICAgIGJ5OiBudWxsLFxuICAgIGNhbGNNb2RlOiBudWxsLFxuICAgIGNhcEhlaWdodDogbnVtYmVyLFxuICAgIGNsYXNzTmFtZTogc3BhY2VTZXBhcmF0ZWQsXG4gICAgY2xpcDogbnVsbCxcbiAgICBjbGlwUGF0aDogbnVsbCxcbiAgICBjbGlwUGF0aFVuaXRzOiBudWxsLFxuICAgIGNsaXBSdWxlOiBudWxsLFxuICAgIGNvbG9yOiBudWxsLFxuICAgIGNvbG9ySW50ZXJwb2xhdGlvbjogbnVsbCxcbiAgICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiBudWxsLFxuICAgIGNvbG9yUHJvZmlsZTogbnVsbCxcbiAgICBjb2xvclJlbmRlcmluZzogbnVsbCxcbiAgICBjb250ZW50OiBudWxsLFxuICAgIGNvbnRlbnRTY3JpcHRUeXBlOiBudWxsLFxuICAgIGNvbnRlbnRTdHlsZVR5cGU6IG51bGwsXG4gICAgY3Jvc3NPcmlnaW46IG51bGwsXG4gICAgY3Vyc29yOiBudWxsLFxuICAgIGN4OiBudWxsLFxuICAgIGN5OiBudWxsLFxuICAgIGQ6IG51bGwsXG4gICAgZGF0YVR5cGU6IG51bGwsXG4gICAgZGVmYXVsdEFjdGlvbjogbnVsbCxcbiAgICBkZXNjZW50OiBudW1iZXIsXG4gICAgZGlmZnVzZUNvbnN0YW50OiBudW1iZXIsXG4gICAgZGlyZWN0aW9uOiBudWxsLFxuICAgIGRpc3BsYXk6IG51bGwsXG4gICAgZHVyOiBudWxsLFxuICAgIGRpdmlzb3I6IG51bWJlcixcbiAgICBkb21pbmFudEJhc2VsaW5lOiBudWxsLFxuICAgIGRvd25sb2FkOiBib29sZWFuLFxuICAgIGR4OiBudWxsLFxuICAgIGR5OiBudWxsLFxuICAgIGVkZ2VNb2RlOiBudWxsLFxuICAgIGVkaXRhYmxlOiBudWxsLFxuICAgIGVsZXZhdGlvbjogbnVtYmVyLFxuICAgIGVuYWJsZUJhY2tncm91bmQ6IG51bGwsXG4gICAgZW5kOiBudWxsLFxuICAgIGV2ZW50OiBudWxsLFxuICAgIGV4cG9uZW50OiBudW1iZXIsXG4gICAgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDogbnVsbCxcbiAgICBmaWxsOiBudWxsLFxuICAgIGZpbGxPcGFjaXR5OiBudW1iZXIsXG4gICAgZmlsbFJ1bGU6IG51bGwsXG4gICAgZmlsdGVyOiBudWxsLFxuICAgIGZpbHRlclJlczogbnVsbCxcbiAgICBmaWx0ZXJVbml0czogbnVsbCxcbiAgICBmbG9vZENvbG9yOiBudWxsLFxuICAgIGZsb29kT3BhY2l0eTogbnVsbCxcbiAgICBmb2N1c2FibGU6IG51bGwsXG4gICAgZm9jdXNIaWdobGlnaHQ6IG51bGwsXG4gICAgZm9udEZhbWlseTogbnVsbCxcbiAgICBmb250U2l6ZTogbnVsbCxcbiAgICBmb250U2l6ZUFkanVzdDogbnVsbCxcbiAgICBmb250U3RyZXRjaDogbnVsbCxcbiAgICBmb250U3R5bGU6IG51bGwsXG4gICAgZm9udFZhcmlhbnQ6IG51bGwsXG4gICAgZm9udFdlaWdodDogbnVsbCxcbiAgICBmb3JtYXQ6IG51bGwsXG4gICAgZnI6IG51bGwsXG4gICAgZnJvbTogbnVsbCxcbiAgICBmeDogbnVsbCxcbiAgICBmeTogbnVsbCxcbiAgICBnMTogY29tbWFTZXBhcmF0ZWQsXG4gICAgZzI6IGNvbW1hU2VwYXJhdGVkLFxuICAgIGdseXBoTmFtZTogY29tbWFTZXBhcmF0ZWQsXG4gICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6IG51bGwsXG4gICAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiBudWxsLFxuICAgIGdseXBoUmVmOiBudWxsLFxuICAgIGdyYWRpZW50VHJhbnNmb3JtOiBudWxsLFxuICAgIGdyYWRpZW50VW5pdHM6IG51bGwsXG4gICAgaGFuZGxlcjogbnVsbCxcbiAgICBoYW5naW5nOiBudW1iZXIsXG4gICAgaGF0Y2hDb250ZW50VW5pdHM6IG51bGwsXG4gICAgaGF0Y2hVbml0czogbnVsbCxcbiAgICBoZWlnaHQ6IG51bGwsXG4gICAgaHJlZjogbnVsbCxcbiAgICBocmVmTGFuZzogbnVsbCxcbiAgICBob3JpekFkdlg6IG51bWJlcixcbiAgICBob3Jpek9yaWdpblg6IG51bWJlcixcbiAgICBob3Jpek9yaWdpblk6IG51bWJlcixcbiAgICBpZDogbnVsbCxcbiAgICBpZGVvZ3JhcGhpYzogbnVtYmVyLFxuICAgIGltYWdlUmVuZGVyaW5nOiBudWxsLFxuICAgIGluaXRpYWxWaXNpYmlsaXR5OiBudWxsLFxuICAgIGluOiBudWxsLFxuICAgIGluMjogbnVsbCxcbiAgICBpbnRlcmNlcHQ6IG51bWJlcixcbiAgICBrOiBudW1iZXIsXG4gICAgazE6IG51bWJlcixcbiAgICBrMjogbnVtYmVyLFxuICAgIGszOiBudW1iZXIsXG4gICAgazQ6IG51bWJlcixcbiAgICBrZXJuZWxNYXRyaXg6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICBrZXJuZWxVbml0TGVuZ3RoOiBudWxsLFxuICAgIGtleVBvaW50czogbnVsbCwgLy8gU0VNSV9DT0xPTl9TRVBBUkFURURcbiAgICBrZXlTcGxpbmVzOiBudWxsLCAvLyBTRU1JX0NPTE9OX1NFUEFSQVRFRFxuICAgIGtleVRpbWVzOiBudWxsLCAvLyBTRU1JX0NPTE9OX1NFUEFSQVRFRFxuICAgIGtlcm5pbmc6IG51bGwsXG4gICAgbGFuZzogbnVsbCxcbiAgICBsZW5ndGhBZGp1c3Q6IG51bGwsXG4gICAgbGV0dGVyU3BhY2luZzogbnVsbCxcbiAgICBsaWdodGluZ0NvbG9yOiBudWxsLFxuICAgIGxpbWl0aW5nQ29uZUFuZ2xlOiBudW1iZXIsXG4gICAgbG9jYWw6IG51bGwsXG4gICAgbWFya2VyRW5kOiBudWxsLFxuICAgIG1hcmtlck1pZDogbnVsbCxcbiAgICBtYXJrZXJTdGFydDogbnVsbCxcbiAgICBtYXJrZXJIZWlnaHQ6IG51bGwsXG4gICAgbWFya2VyVW5pdHM6IG51bGwsXG4gICAgbWFya2VyV2lkdGg6IG51bGwsXG4gICAgbWFzazogbnVsbCxcbiAgICBtYXNrQ29udGVudFVuaXRzOiBudWxsLFxuICAgIG1hc2tVbml0czogbnVsbCxcbiAgICBtYXRoZW1hdGljYWw6IG51bGwsXG4gICAgbWF4OiBudWxsLFxuICAgIG1lZGlhOiBudWxsLFxuICAgIG1lZGlhQ2hhcmFjdGVyRW5jb2Rpbmc6IG51bGwsXG4gICAgbWVkaWFDb250ZW50RW5jb2RpbmdzOiBudWxsLFxuICAgIG1lZGlhU2l6ZTogbnVtYmVyLFxuICAgIG1lZGlhVGltZTogbnVsbCxcbiAgICBtZXRob2Q6IG51bGwsXG4gICAgbWluOiBudWxsLFxuICAgIG1vZGU6IG51bGwsXG4gICAgbmFtZTogbnVsbCxcbiAgICBuYXZEb3duOiBudWxsLFxuICAgIG5hdkRvd25MZWZ0OiBudWxsLFxuICAgIG5hdkRvd25SaWdodDogbnVsbCxcbiAgICBuYXZMZWZ0OiBudWxsLFxuICAgIG5hdk5leHQ6IG51bGwsXG4gICAgbmF2UHJldjogbnVsbCxcbiAgICBuYXZSaWdodDogbnVsbCxcbiAgICBuYXZVcDogbnVsbCxcbiAgICBuYXZVcExlZnQ6IG51bGwsXG4gICAgbmF2VXBSaWdodDogbnVsbCxcbiAgICBudW1PY3RhdmVzOiBudWxsLFxuICAgIG9ic2VydmVyOiBudWxsLFxuICAgIG9mZnNldDogbnVsbCxcbiAgICBvbkFib3J0OiBudWxsLFxuICAgIG9uQWN0aXZhdGU6IG51bGwsXG4gICAgb25BZnRlclByaW50OiBudWxsLFxuICAgIG9uQmVmb3JlUHJpbnQ6IG51bGwsXG4gICAgb25CZWdpbjogbnVsbCxcbiAgICBvbkNhbmNlbDogbnVsbCxcbiAgICBvbkNhblBsYXk6IG51bGwsXG4gICAgb25DYW5QbGF5VGhyb3VnaDogbnVsbCxcbiAgICBvbkNoYW5nZTogbnVsbCxcbiAgICBvbkNsaWNrOiBudWxsLFxuICAgIG9uQ2xvc2U6IG51bGwsXG4gICAgb25Db3B5OiBudWxsLFxuICAgIG9uQ3VlQ2hhbmdlOiBudWxsLFxuICAgIG9uQ3V0OiBudWxsLFxuICAgIG9uRGJsQ2xpY2s6IG51bGwsXG4gICAgb25EcmFnOiBudWxsLFxuICAgIG9uRHJhZ0VuZDogbnVsbCxcbiAgICBvbkRyYWdFbnRlcjogbnVsbCxcbiAgICBvbkRyYWdFeGl0OiBudWxsLFxuICAgIG9uRHJhZ0xlYXZlOiBudWxsLFxuICAgIG9uRHJhZ092ZXI6IG51bGwsXG4gICAgb25EcmFnU3RhcnQ6IG51bGwsXG4gICAgb25Ecm9wOiBudWxsLFxuICAgIG9uRHVyYXRpb25DaGFuZ2U6IG51bGwsXG4gICAgb25FbXB0aWVkOiBudWxsLFxuICAgIG9uRW5kOiBudWxsLFxuICAgIG9uRW5kZWQ6IG51bGwsXG4gICAgb25FcnJvcjogbnVsbCxcbiAgICBvbkZvY3VzOiBudWxsLFxuICAgIG9uRm9jdXNJbjogbnVsbCxcbiAgICBvbkZvY3VzT3V0OiBudWxsLFxuICAgIG9uSGFzaENoYW5nZTogbnVsbCxcbiAgICBvbklucHV0OiBudWxsLFxuICAgIG9uSW52YWxpZDogbnVsbCxcbiAgICBvbktleURvd246IG51bGwsXG4gICAgb25LZXlQcmVzczogbnVsbCxcbiAgICBvbktleVVwOiBudWxsLFxuICAgIG9uTG9hZDogbnVsbCxcbiAgICBvbkxvYWRlZERhdGE6IG51bGwsXG4gICAgb25Mb2FkZWRNZXRhZGF0YTogbnVsbCxcbiAgICBvbkxvYWRTdGFydDogbnVsbCxcbiAgICBvbk1lc3NhZ2U6IG51bGwsXG4gICAgb25Nb3VzZURvd246IG51bGwsXG4gICAgb25Nb3VzZUVudGVyOiBudWxsLFxuICAgIG9uTW91c2VMZWF2ZTogbnVsbCxcbiAgICBvbk1vdXNlTW92ZTogbnVsbCxcbiAgICBvbk1vdXNlT3V0OiBudWxsLFxuICAgIG9uTW91c2VPdmVyOiBudWxsLFxuICAgIG9uTW91c2VVcDogbnVsbCxcbiAgICBvbk1vdXNlV2hlZWw6IG51bGwsXG4gICAgb25PZmZsaW5lOiBudWxsLFxuICAgIG9uT25saW5lOiBudWxsLFxuICAgIG9uUGFnZUhpZGU6IG51bGwsXG4gICAgb25QYWdlU2hvdzogbnVsbCxcbiAgICBvblBhc3RlOiBudWxsLFxuICAgIG9uUGF1c2U6IG51bGwsXG4gICAgb25QbGF5OiBudWxsLFxuICAgIG9uUGxheWluZzogbnVsbCxcbiAgICBvblBvcFN0YXRlOiBudWxsLFxuICAgIG9uUHJvZ3Jlc3M6IG51bGwsXG4gICAgb25SYXRlQ2hhbmdlOiBudWxsLFxuICAgIG9uUmVwZWF0OiBudWxsLFxuICAgIG9uUmVzZXQ6IG51bGwsXG4gICAgb25SZXNpemU6IG51bGwsXG4gICAgb25TY3JvbGw6IG51bGwsXG4gICAgb25TZWVrZWQ6IG51bGwsXG4gICAgb25TZWVraW5nOiBudWxsLFxuICAgIG9uU2VsZWN0OiBudWxsLFxuICAgIG9uU2hvdzogbnVsbCxcbiAgICBvblN0YWxsZWQ6IG51bGwsXG4gICAgb25TdG9yYWdlOiBudWxsLFxuICAgIG9uU3VibWl0OiBudWxsLFxuICAgIG9uU3VzcGVuZDogbnVsbCxcbiAgICBvblRpbWVVcGRhdGU6IG51bGwsXG4gICAgb25Ub2dnbGU6IG51bGwsXG4gICAgb25VbmxvYWQ6IG51bGwsXG4gICAgb25Wb2x1bWVDaGFuZ2U6IG51bGwsXG4gICAgb25XYWl0aW5nOiBudWxsLFxuICAgIG9uWm9vbTogbnVsbCxcbiAgICBvcGFjaXR5OiBudWxsLFxuICAgIG9wZXJhdG9yOiBudWxsLFxuICAgIG9yZGVyOiBudWxsLFxuICAgIG9yaWVudDogbnVsbCxcbiAgICBvcmllbnRhdGlvbjogbnVsbCxcbiAgICBvcmlnaW46IG51bGwsXG4gICAgb3ZlcmZsb3c6IG51bGwsXG4gICAgb3ZlcmxheTogbnVsbCxcbiAgICBvdmVybGluZVBvc2l0aW9uOiBudW1iZXIsXG4gICAgb3ZlcmxpbmVUaGlja25lc3M6IG51bWJlcixcbiAgICBwYWludE9yZGVyOiBudWxsLFxuICAgIHBhbm9zZTE6IG51bGwsXG4gICAgcGF0aDogbnVsbCxcbiAgICBwYXRoTGVuZ3RoOiBudW1iZXIsXG4gICAgcGF0dGVybkNvbnRlbnRVbml0czogbnVsbCxcbiAgICBwYXR0ZXJuVHJhbnNmb3JtOiBudWxsLFxuICAgIHBhdHRlcm5Vbml0czogbnVsbCxcbiAgICBwaGFzZTogbnVsbCxcbiAgICBwaW5nOiBzcGFjZVNlcGFyYXRlZCxcbiAgICBwaXRjaDogbnVsbCxcbiAgICBwbGF5YmFja09yZGVyOiBudWxsLFxuICAgIHBvaW50ZXJFdmVudHM6IG51bGwsXG4gICAgcG9pbnRzOiBudWxsLFxuICAgIHBvaW50c0F0WDogbnVtYmVyLFxuICAgIHBvaW50c0F0WTogbnVtYmVyLFxuICAgIHBvaW50c0F0WjogbnVtYmVyLFxuICAgIHByZXNlcnZlQWxwaGE6IG51bGwsXG4gICAgcHJlc2VydmVBc3BlY3RSYXRpbzogbnVsbCxcbiAgICBwcmltaXRpdmVVbml0czogbnVsbCxcbiAgICBwcm9wYWdhdGU6IG51bGwsXG4gICAgcHJvcGVydHk6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICByOiBudWxsLFxuICAgIHJhZGl1czogbnVsbCxcbiAgICByZWZlcnJlclBvbGljeTogbnVsbCxcbiAgICByZWZYOiBudWxsLFxuICAgIHJlZlk6IG51bGwsXG4gICAgcmVsOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsXG4gICAgcmV2OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsXG4gICAgcmVuZGVyaW5nSW50ZW50OiBudWxsLFxuICAgIHJlcGVhdENvdW50OiBudWxsLFxuICAgIHJlcGVhdER1cjogbnVsbCxcbiAgICByZXF1aXJlZEV4dGVuc2lvbnM6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICByZXF1aXJlZEZlYXR1cmVzOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsXG4gICAgcmVxdWlyZWRGb250czogY29tbWFPclNwYWNlU2VwYXJhdGVkLFxuICAgIHJlcXVpcmVkRm9ybWF0czogY29tbWFPclNwYWNlU2VwYXJhdGVkLFxuICAgIHJlc291cmNlOiBudWxsLFxuICAgIHJlc3RhcnQ6IG51bGwsXG4gICAgcmVzdWx0OiBudWxsLFxuICAgIHJvdGF0ZTogbnVsbCxcbiAgICByeDogbnVsbCxcbiAgICByeTogbnVsbCxcbiAgICBzY2FsZTogbnVsbCxcbiAgICBzZWVkOiBudWxsLFxuICAgIHNoYXBlUmVuZGVyaW5nOiBudWxsLFxuICAgIHNpZGU6IG51bGwsXG4gICAgc2xvcGU6IG51bGwsXG4gICAgc25hcHNob3RUaW1lOiBudWxsLFxuICAgIHNwZWN1bGFyQ29uc3RhbnQ6IG51bWJlcixcbiAgICBzcGVjdWxhckV4cG9uZW50OiBudW1iZXIsXG4gICAgc3ByZWFkTWV0aG9kOiBudWxsLFxuICAgIHNwYWNpbmc6IG51bGwsXG4gICAgc3RhcnRPZmZzZXQ6IG51bGwsXG4gICAgc3RkRGV2aWF0aW9uOiBudWxsLFxuICAgIHN0ZW1oOiBudWxsLFxuICAgIHN0ZW12OiBudWxsLFxuICAgIHN0aXRjaFRpbGVzOiBudWxsLFxuICAgIHN0b3BDb2xvcjogbnVsbCxcbiAgICBzdG9wT3BhY2l0eTogbnVsbCxcbiAgICBzdHJpa2V0aHJvdWdoUG9zaXRpb246IG51bWJlcixcbiAgICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiBudW1iZXIsXG4gICAgc3RyaW5nOiBudWxsLFxuICAgIHN0cm9rZTogbnVsbCxcbiAgICBzdHJva2VEYXNoQXJyYXk6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICBzdHJva2VEYXNoT2Zmc2V0OiBudWxsLFxuICAgIHN0cm9rZUxpbmVDYXA6IG51bGwsXG4gICAgc3Ryb2tlTGluZUpvaW46IG51bGwsXG4gICAgc3Ryb2tlTWl0ZXJMaW1pdDogbnVtYmVyLFxuICAgIHN0cm9rZU9wYWNpdHk6IG51bWJlcixcbiAgICBzdHJva2VXaWR0aDogbnVsbCxcbiAgICBzdHlsZTogbnVsbCxcbiAgICBzdXJmYWNlU2NhbGU6IG51bWJlcixcbiAgICBzeW5jQmVoYXZpb3I6IG51bGwsXG4gICAgc3luY0JlaGF2aW9yRGVmYXVsdDogbnVsbCxcbiAgICBzeW5jTWFzdGVyOiBudWxsLFxuICAgIHN5bmNUb2xlcmFuY2U6IG51bGwsXG4gICAgc3luY1RvbGVyYW5jZURlZmF1bHQ6IG51bGwsXG4gICAgc3lzdGVtTGFuZ3VhZ2U6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIHRhYmxlVmFsdWVzOiBudWxsLFxuICAgIHRhcmdldDogbnVsbCxcbiAgICB0YXJnZXRYOiBudW1iZXIsXG4gICAgdGFyZ2V0WTogbnVtYmVyLFxuICAgIHRleHRBbmNob3I6IG51bGwsXG4gICAgdGV4dERlY29yYXRpb246IG51bGwsXG4gICAgdGV4dFJlbmRlcmluZzogbnVsbCxcbiAgICB0ZXh0TGVuZ3RoOiBudWxsLFxuICAgIHRpbWVsaW5lQmVnaW46IG51bGwsXG4gICAgdGl0bGU6IG51bGwsXG4gICAgdHJhbnNmb3JtQmVoYXZpb3I6IG51bGwsXG4gICAgdHlwZTogbnVsbCxcbiAgICB0eXBlT2Y6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCxcbiAgICB0bzogbnVsbCxcbiAgICB0cmFuc2Zvcm06IG51bGwsXG4gICAgdHJhbnNmb3JtT3JpZ2luOiBudWxsLFxuICAgIHUxOiBudWxsLFxuICAgIHUyOiBudWxsLFxuICAgIHVuZGVybGluZVBvc2l0aW9uOiBudW1iZXIsXG4gICAgdW5kZXJsaW5lVGhpY2tuZXNzOiBudW1iZXIsXG4gICAgdW5pY29kZTogbnVsbCxcbiAgICB1bmljb2RlQmlkaTogbnVsbCxcbiAgICB1bmljb2RlUmFuZ2U6IG51bGwsXG4gICAgdW5pdHNQZXJFbTogbnVtYmVyLFxuICAgIHZhbHVlczogbnVsbCxcbiAgICB2QWxwaGFiZXRpYzogbnVtYmVyLFxuICAgIHZNYXRoZW1hdGljYWw6IG51bWJlcixcbiAgICB2ZWN0b3JFZmZlY3Q6IG51bGwsXG4gICAgdkhhbmdpbmc6IG51bWJlcixcbiAgICB2SWRlb2dyYXBoaWM6IG51bWJlcixcbiAgICB2ZXJzaW9uOiBudWxsLFxuICAgIHZlcnRBZHZZOiBudW1iZXIsXG4gICAgdmVydE9yaWdpblg6IG51bWJlcixcbiAgICB2ZXJ0T3JpZ2luWTogbnVtYmVyLFxuICAgIHZpZXdCb3g6IG51bGwsXG4gICAgdmlld1RhcmdldDogbnVsbCxcbiAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgIHdpZHRoOiBudWxsLFxuICAgIHdpZHRoczogbnVsbCxcbiAgICB3b3JkU3BhY2luZzogbnVsbCxcbiAgICB3cml0aW5nTW9kZTogbnVsbCxcbiAgICB4OiBudWxsLFxuICAgIHgxOiBudWxsLFxuICAgIHgyOiBudWxsLFxuICAgIHhDaGFubmVsU2VsZWN0b3I6IG51bGwsXG4gICAgeEhlaWdodDogbnVtYmVyLFxuICAgIHk6IG51bGwsXG4gICAgeTE6IG51bGwsXG4gICAgeTI6IG51bGwsXG4gICAgeUNoYW5uZWxTZWxlY3RvcjogbnVsbCxcbiAgICB6OiBudWxsLFxuICAgIHpvb21BbmRQYW46IG51bGxcbiAgfVxufSlcbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vdXRpbC9zY2hlbWEuanMnKS5TY2hlbWF9IFNjaGVtYVxuICovXG5cbmltcG9ydCB7bm9ybWFsaXplfSBmcm9tICcuL25vcm1hbGl6ZS5qcydcbmltcG9ydCB7RGVmaW5lZEluZm99IGZyb20gJy4vdXRpbC9kZWZpbmVkLWluZm8uanMnXG5pbXBvcnQge0luZm99IGZyb20gJy4vdXRpbC9pbmZvLmpzJ1xuXG5jb25zdCB2YWxpZCA9IC9eZGF0YVstXFx3LjpdKyQvaVxuY29uc3QgZGFzaCA9IC8tW2Etel0vZ1xuY29uc3QgY2FwID0gL1tBLVpdL2dcblxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtJbmZvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZChzY2hlbWEsIHZhbHVlKSB7XG4gIGNvbnN0IG5vcm1hbCA9IG5vcm1hbGl6ZSh2YWx1ZSlcbiAgbGV0IHByb3AgPSB2YWx1ZVxuICBsZXQgVHlwZSA9IEluZm9cblxuICBpZiAobm9ybWFsIGluIHNjaGVtYS5ub3JtYWwpIHtcbiAgICByZXR1cm4gc2NoZW1hLnByb3BlcnR5W3NjaGVtYS5ub3JtYWxbbm9ybWFsXV1cbiAgfVxuXG4gIGlmIChub3JtYWwubGVuZ3RoID4gNCAmJiBub3JtYWwuc2xpY2UoMCwgNCkgPT09ICdkYXRhJyAmJiB2YWxpZC50ZXN0KHZhbHVlKSkge1xuICAgIC8vIEF0dHJpYnV0ZSBvciBwcm9wZXJ0eS5cbiAgICBpZiAodmFsdWUuY2hhckF0KDQpID09PSAnLScpIHtcbiAgICAgIC8vIFR1cm4gaXQgaW50byBhIHByb3BlcnR5LlxuICAgICAgY29uc3QgcmVzdCA9IHZhbHVlLnNsaWNlKDUpLnJlcGxhY2UoZGFzaCwgY2FtZWxjYXNlKVxuICAgICAgcHJvcCA9ICdkYXRhJyArIHJlc3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXN0LnNsaWNlKDEpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFR1cm4gaXQgaW50byBhbiBhdHRyaWJ1dGUuXG4gICAgICBjb25zdCByZXN0ID0gdmFsdWUuc2xpY2UoNClcblxuICAgICAgaWYgKCFkYXNoLnRlc3QocmVzdCkpIHtcbiAgICAgICAgbGV0IGRhc2hlcyA9IHJlc3QucmVwbGFjZShjYXAsIGtlYmFiKVxuXG4gICAgICAgIGlmIChkYXNoZXMuY2hhckF0KDApICE9PSAnLScpIHtcbiAgICAgICAgICBkYXNoZXMgPSAnLScgKyBkYXNoZXNcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gJ2RhdGEnICsgZGFzaGVzXG4gICAgICB9XG4gICAgfVxuXG4gICAgVHlwZSA9IERlZmluZWRJbmZvXG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGUocHJvcCwgdmFsdWUpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9ICQwXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBrZWJhYigkMCkge1xuICByZXR1cm4gJy0nICsgJDAudG9Mb3dlckNhc2UoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSAkMFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY2FtZWxjYXNlKCQwKSB7XG4gIHJldHVybiAkMC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvdXRpbC9pbmZvLmpzJykuSW5mb30gSW5mb1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9saWIvdXRpbC9zY2hlbWEuanMnKS5TY2hlbWF9IFNjaGVtYVxuICovXG5cbmltcG9ydCB7bWVyZ2V9IGZyb20gJy4vbGliL3V0aWwvbWVyZ2UuanMnXG5pbXBvcnQge3hsaW5rfSBmcm9tICcuL2xpYi94bGluay5qcydcbmltcG9ydCB7eG1sfSBmcm9tICcuL2xpYi94bWwuanMnXG5pbXBvcnQge3htbG5zfSBmcm9tICcuL2xpYi94bWxucy5qcydcbmltcG9ydCB7YXJpYX0gZnJvbSAnLi9saWIvYXJpYS5qcydcbmltcG9ydCB7aHRtbCBhcyBodG1sQmFzZX0gZnJvbSAnLi9saWIvaHRtbC5qcydcbmltcG9ydCB7c3ZnIGFzIHN2Z0Jhc2V9IGZyb20gJy4vbGliL3N2Zy5qcydcblxuZXhwb3J0IHtmaW5kfSBmcm9tICcuL2xpYi9maW5kLmpzJ1xuZXhwb3J0IHtoYXN0VG9SZWFjdH0gZnJvbSAnLi9saWIvaGFzdC10by1yZWFjdC5qcydcbmV4cG9ydCB7bm9ybWFsaXplfSBmcm9tICcuL2xpYi9ub3JtYWxpemUuanMnXG5leHBvcnQgY29uc3QgaHRtbCA9IG1lcmdlKFt4bWwsIHhsaW5rLCB4bWxucywgYXJpYSwgaHRtbEJhc2VdLCAnaHRtbCcpXG5leHBvcnQgY29uc3Qgc3ZnID0gbWVyZ2UoW3htbCwgeGxpbmssIHhtbG5zLCBhcmlhLCBzdmdCYXNlXSwgJ3N2ZycpXG4iLCAiLyoqXG4gKiBAdHlwZWRlZiBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24gZm9yIGBzdHJpbmdpZnlgLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcGFkTGVmdD10cnVlXVxuICogICBXaGV0aGVyIHRvIHBhZCBhIHNwYWNlIGJlZm9yZSBhIHRva2VuLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcGFkUmlnaHQ9ZmFsc2VdXG4gKiAgIFdoZXRoZXIgdG8gcGFkIGEgc3BhY2UgYWZ0ZXIgYSB0b2tlbi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtPcHRpb25zfSBTdHJpbmdpZnlPcHRpb25zXG4gKiAgIFBsZWFzZSB1c2UgYFN0cmluZ2lmeU9wdGlvbnNgIGluc3RlYWQuXG4gKi9cblxuLyoqXG4gKiBQYXJzZSBjb21tYS1zZXBhcmF0ZWQgdG9rZW5zIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBDb21tYS1zZXBhcmF0ZWQgdG9rZW5zLlxuICogQHJldHVybnMge0FycmF5PHN0cmluZz59XG4gKiAgIExpc3Qgb2YgdG9rZW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodmFsdWUpIHtcbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCB0b2tlbnMgPSBbXVxuICBjb25zdCBpbnB1dCA9IFN0cmluZyh2YWx1ZSB8fCAnJylcbiAgbGV0IGluZGV4ID0gaW5wdXQuaW5kZXhPZignLCcpXG4gIGxldCBzdGFydCA9IDBcbiAgLyoqIEB0eXBlIHtib29sZWFufSAqL1xuICBsZXQgZW5kID0gZmFsc2VcblxuICB3aGlsZSAoIWVuZCkge1xuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIGluZGV4ID0gaW5wdXQubGVuZ3RoXG4gICAgICBlbmQgPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSBpbnB1dC5zbGljZShzdGFydCwgaW5kZXgpLnRyaW0oKVxuXG4gICAgaWYgKHRva2VuIHx8ICFlbmQpIHtcbiAgICAgIHRva2Vucy5wdXNoKHRva2VuKVxuICAgIH1cblxuICAgIHN0YXJ0ID0gaW5kZXggKyAxXG4gICAgaW5kZXggPSBpbnB1dC5pbmRleE9mKCcsJywgc3RhcnQpXG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbi8qKlxuICogU2VyaWFsaXplIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgbnVtYmVycyB0byBjb21tYS1zZXBhcmF0ZWQgdG9rZW5zLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nfG51bWJlcj59IHZhbHVlc1xuICogICBMaXN0IG9mIHRva2Vucy5cbiAqIEBwYXJhbSB7T3B0aW9uc30gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gZm9yIGBzdHJpbmdpZnlgIChvcHRpb25hbCkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBDb21tYS1zZXBhcmF0ZWQgdG9rZW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlcywgb3B0aW9ucykge1xuICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge31cblxuICAvLyBFbnN1cmUgdGhlIGxhc3QgZW1wdHkgZW50cnkgaXMgc2Vlbi5cbiAgY29uc3QgaW5wdXQgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdID09PSAnJyA/IFsuLi52YWx1ZXMsICcnXSA6IHZhbHVlc1xuXG4gIHJldHVybiBpbnB1dFxuICAgIC5qb2luKFxuICAgICAgKHNldHRpbmdzLnBhZFJpZ2h0ID8gJyAnIDogJycpICtcbiAgICAgICAgJywnICtcbiAgICAgICAgKHNldHRpbmdzLnBhZExlZnQgPT09IGZhbHNlID8gJycgOiAnICcpXG4gICAgKVxuICAgIC50cmltKClcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5FbGVtZW50fSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUHJvcGVydGllc30gUHJvcGVydGllc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIHtzdHJpbmd9IFNpbXBsZVNlbGVjdG9yXG4gKiAgIFNlbGVjdG9yIHR5cGUuXG4gKiBAdGVtcGxhdGUge3N0cmluZ30gRGVmYXVsdFRhZ05hbWVcbiAqICAgRGVmYXVsdCB0YWcgbmFtZS5cbiAqIEB0eXBlZGVmIHsoXG4gKiAgIFNpbXBsZVNlbGVjdG9yIGV4dGVuZHMgJydcbiAqICAgICA/IERlZmF1bHRUYWdOYW1lXG4gKiAgICAgOiBTaW1wbGVTZWxlY3RvciBleHRlbmRzIGAke2luZmVyIFRhZ05hbWV9LiR7aW5mZXIgUmVzdH1gXG4gKiAgICAgPyBFeHRyYWN0VGFnTmFtZTxUYWdOYW1lLCBEZWZhdWx0VGFnTmFtZT5cbiAqICAgICA6IFNpbXBsZVNlbGVjdG9yIGV4dGVuZHMgYCR7aW5mZXIgVGFnTmFtZX0jJHtpbmZlciBSZXN0fWBcbiAqICAgICA/IEV4dHJhY3RUYWdOYW1lPFRhZ05hbWUsIERlZmF1bHRUYWdOYW1lPlxuICogICAgIDogU2ltcGxlU2VsZWN0b3IgZXh0ZW5kcyBzdHJpbmdcbiAqICAgICA/IFNpbXBsZVNlbGVjdG9yXG4gKiAgICAgOiBEZWZhdWx0VGFnTmFtZVxuICogKX0gRXh0cmFjdFRhZ05hbWVcbiAqICAgRXh0cmFjdCB0YWcgbmFtZSBmcm9tIGEgc2ltcGxlIHNlbGVjdG9yLlxuICovXG5cbmNvbnN0IHNlYXJjaCA9IC9bIy5dL2dcblxuLyoqXG4gKiBDcmVhdGUgYSBoYXN0IGVsZW1lbnQgZnJvbSBhIHNpbXBsZSBDU1Mgc2VsZWN0b3IuXG4gKlxuICogQHRlbXBsYXRlIHtzdHJpbmd9IFNlbGVjdG9yXG4gKiAgIFR5cGUgb2Ygc2VsZWN0b3IuXG4gKiBAdGVtcGxhdGUge3N0cmluZ30gW0RlZmF1bHRUYWdOYW1lPSdkaXYnXVxuICogICBUeXBlIG9mIGRlZmF1bHQgdGFnIG5hbWUgKGRlZmF1bHQ6IGAnZGl2J2ApLlxuICogQHBhcmFtIHtTZWxlY3RvciB8IG51bGwgfCB1bmRlZmluZWR9IFtzZWxlY3Rvcl1cbiAqICAgU2ltcGxlIENTUyBzZWxlY3RvciAob3B0aW9uYWwpLlxuICpcbiAqICAgQ2FuIGNvbnRhaW4gYSB0YWcgbmFtZSAoYGZvb2ApLCBjbGFzc2VzIChgLmJhcmApLCBhbmQgYW4gSUQgKGAjYmF6YCkuXG4gKiAgIE11bHRpcGxlIGNsYXNzZXMgYXJlIGFsbG93ZWQuXG4gKiAgIFVzZXMgdGhlIGxhc3QgSUQgaWYgbXVsdGlwbGUgSURzIGFyZSBmb3VuZC5cbiAqIEBwYXJhbSB7RGVmYXVsdFRhZ05hbWUgfCBudWxsIHwgdW5kZWZpbmVkfSBbZGVmYXVsdFRhZ05hbWU9J2RpdiddXG4gKiAgIFRhZyBuYW1lIHRvIHVzZSBpZiBgc2VsZWN0b3JgIGRvZXMgbm90IHNwZWNpZnkgb25lIChkZWZhdWx0OiBgJ2RpdidgKS5cbiAqIEByZXR1cm5zIHtFbGVtZW50ICYge3RhZ05hbWU6IEV4dHJhY3RUYWdOYW1lPFNlbGVjdG9yLCBEZWZhdWx0VGFnTmFtZT59fVxuICogICBCdWlsdCBlbGVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTZWxlY3RvcihzZWxlY3RvciwgZGVmYXVsdFRhZ05hbWUpIHtcbiAgY29uc3QgdmFsdWUgPSBzZWxlY3RvciB8fCAnJ1xuICAvKiogQHR5cGUge1Byb3BlcnRpZXN9ICovXG4gIGNvbnN0IHByb3BzID0ge31cbiAgbGV0IHN0YXJ0ID0gMFxuICAvKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHByZXZpb3VzXG4gIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgdGFnTmFtZVxuXG4gIHdoaWxlIChzdGFydCA8IHZhbHVlLmxlbmd0aCkge1xuICAgIHNlYXJjaC5sYXN0SW5kZXggPSBzdGFydFxuICAgIGNvbnN0IG1hdGNoID0gc2VhcmNoLmV4ZWModmFsdWUpXG4gICAgY29uc3Qgc3VidmFsdWUgPSB2YWx1ZS5zbGljZShzdGFydCwgbWF0Y2ggPyBtYXRjaC5pbmRleCA6IHZhbHVlLmxlbmd0aClcblxuICAgIGlmIChzdWJ2YWx1ZSkge1xuICAgICAgaWYgKCFwcmV2aW91cykge1xuICAgICAgICB0YWdOYW1lID0gc3VidmFsdWVcbiAgICAgIH0gZWxzZSBpZiAocHJldmlvdXMgPT09ICcjJykge1xuICAgICAgICBwcm9wcy5pZCA9IHN1YnZhbHVlXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMuY2xhc3NOYW1lKSkge1xuICAgICAgICBwcm9wcy5jbGFzc05hbWUucHVzaChzdWJ2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BzLmNsYXNzTmFtZSA9IFtzdWJ2YWx1ZV1cbiAgICAgIH1cblxuICAgICAgc3RhcnQgKz0gc3VidmFsdWUubGVuZ3RoXG4gICAgfVxuXG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBwcmV2aW91cyA9IG1hdGNoWzBdXG4gICAgICBzdGFydCsrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnZWxlbWVudCcsXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogdGFnIG5hbWUgaXMgcGFyc2VkLlxuICAgIHRhZ05hbWU6IHRhZ05hbWUgfHwgZGVmYXVsdFRhZ05hbWUgfHwgJ2RpdicsXG4gICAgcHJvcGVydGllczogcHJvcHMsXG4gICAgY2hpbGRyZW46IFtdXG4gIH1cbn1cbiIsICIvKipcbiAqIFBhcnNlIHNwYWNlLXNlcGFyYXRlZCB0b2tlbnMgdG8gYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqICAgU3BhY2Utc2VwYXJhdGVkIHRva2Vucy5cbiAqIEByZXR1cm5zIHtBcnJheTxzdHJpbmc+fVxuICogICBMaXN0IG9mIHRva2Vucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHZhbHVlKSB7XG4gIGNvbnN0IGlucHV0ID0gU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKClcbiAgcmV0dXJuIGlucHV0ID8gaW5wdXQuc3BsaXQoL1sgXFx0XFxuXFxyXFxmXSsvZykgOiBbXVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBzdHJpbmdzIGFzIHNwYWNlIHNlcGFyYXRlZC10b2tlbnMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmd8bnVtYmVyPn0gdmFsdWVzXG4gKiAgIExpc3Qgb2YgdG9rZW5zLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU3BhY2Utc2VwYXJhdGVkIHRva2Vucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSh2YWx1ZXMpIHtcbiAgcmV0dXJuIHZhbHVlcy5qb2luKCcgJykudHJpbSgpXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuRWxlbWVudH0gRWxlbWVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdCcpLk5vZGVzfSBOb2Rlc1xuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdCcpLlJvb3R9IFJvb3RcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5Sb290Q29udGVudH0gUm9vdENvbnRlbnRcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdwcm9wZXJ0eS1pbmZvcm1hdGlvbicpLkluZm99IEluZm9cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3Byb3BlcnR5LWluZm9ybWF0aW9uJykuU2NoZW1hfSBTY2hlbWFcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtFbGVtZW50IHwgUm9vdH0gUmVzdWx0XG4gKiAgIFJlc3VsdCBmcm9tIGEgYGhgIChvciBgc2ApIGNhbGwuXG4gKlxuICogQHR5cGVkZWYge251bWJlciB8IHN0cmluZ30gU3R5bGVWYWx1ZVxuICogICBWYWx1ZSBmb3IgYSBDU1Mgc3R5bGUgZmllbGQuXG4gKiBAdHlwZWRlZiB7UmVjb3JkPHN0cmluZywgU3R5bGVWYWx1ZT59IFN0eWxlXG4gKiAgIFN1cHBvcnRlZCB2YWx1ZSBvZiBhIGBzdHlsZWAgcHJvcC5cbiAqIEB0eXBlZGVmIHtib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gUHJpbWl0aXZlVmFsdWVcbiAqICAgUHJpbWl0aXZlIHByb3BlcnR5IHZhbHVlLlxuICogQHR5cGVkZWYge0FycmF5PG51bWJlciB8IHN0cmluZz59IEFycmF5VmFsdWVcbiAqICAgTGlzdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgZm9yIHNwYWNlLSBvciBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIChzdWNoIGFzIGBjbGFzc05hbWVgKS5cbiAqIEB0eXBlZGVmIHtBcnJheVZhbHVlIHwgUHJpbWl0aXZlVmFsdWV9IFByb3BlcnR5VmFsdWVcbiAqICAgUHJpbWl0aXZlIHZhbHVlIG9yIGxpc3QgdmFsdWUuXG4gKiBAdHlwZWRlZiB7e1twcm9wZXJ0eTogc3RyaW5nXTogUHJvcGVydHlWYWx1ZSB8IFN0eWxlfX0gUHJvcGVydGllc1xuICogICBBY2NlcHRhYmxlIHZhbHVlIGZvciBlbGVtZW50IHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVkZWYge251bWJlciB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFByaW1pdGl2ZUNoaWxkXG4gKiAgIFByaW1pdGl2ZSBjaGlsZHJlbiwgZWl0aGVyIGlnbm9yZWQgKG51bGxpc2gpLCBvciB0dXJuZWQgaW50byB0ZXh0IG5vZGVzLlxuICogQHR5cGVkZWYge0FycmF5PEFycmF5Q2hpbGROZXN0ZWQgfCBOb2RlcyB8IFByaW1pdGl2ZUNoaWxkPn0gQXJyYXlDaGlsZFxuICogICBMaXN0IG9mIGNoaWxkcmVuLlxuICogQHR5cGVkZWYge0FycmF5PE5vZGVzIHwgUHJpbWl0aXZlQ2hpbGQ+fSBBcnJheUNoaWxkTmVzdGVkXG4gKiAgIExpc3Qgb2YgY2hpbGRyZW4gKGRlZXApLlxuICogQHR5cGVkZWYge0FycmF5Q2hpbGQgfCBOb2RlcyB8IFByaW1pdGl2ZUNoaWxkfSBDaGlsZFxuICogICBBY2NlcHRhYmxlIGNoaWxkIHZhbHVlLlxuICovXG5cbmltcG9ydCB7cGFyc2UgYXMgY29tbWFzfSBmcm9tICdjb21tYS1zZXBhcmF0ZWQtdG9rZW5zJ1xuaW1wb3J0IHtwYXJzZVNlbGVjdG9yfSBmcm9tICdoYXN0LXV0aWwtcGFyc2Utc2VsZWN0b3InXG5pbXBvcnQge2ZpbmQsIG5vcm1hbGl6ZX0gZnJvbSAncHJvcGVydHktaW5mb3JtYXRpb24nXG5pbXBvcnQge3BhcnNlIGFzIHNwYWNlc30gZnJvbSAnc3BhY2Utc2VwYXJhdGVkLXRva2VucydcblxuY29uc3QgYnV0dG9uVHlwZXMgPSBuZXcgU2V0KFsnYnV0dG9uJywgJ21lbnUnLCAncmVzZXQnLCAnc3VibWl0J10pXG5cbmNvbnN0IG93biA9IHt9Lmhhc093blByb3BlcnR5XG5cbi8qKlxuICogQHBhcmFtIHtTY2hlbWF9IHNjaGVtYVxuICogICBTY2hlbWEgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGRlZmF1bHRUYWdOYW1lXG4gKiAgIERlZmF1bHQgdGFnIG5hbWUuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz4gfCB1bmRlZmluZWR9IFtjYXNlU2Vuc2l0aXZlXVxuICogICBDYXNlLXNlbnNpdGl2ZSB0YWcgbmFtZXMgKGRlZmF1bHQ6IGB1bmRlZmluZWRgKS5cbiAqIEByZXR1cm5zXG4gKiAgIGBoYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUgoc2NoZW1hLCBkZWZhdWx0VGFnTmFtZSwgY2FzZVNlbnNpdGl2ZSkge1xuICBjb25zdCBhZGp1c3QgPSBjYXNlU2Vuc2l0aXZlICYmIGNyZWF0ZUFkanVzdE1hcChjYXNlU2Vuc2l0aXZlKVxuXG4gIC8qKlxuICAgKiBIeXBlcnNjcmlwdCBjb21wYXRpYmxlIERTTCBmb3IgY3JlYXRpbmcgdmlydHVhbCBoYXN0IHRyZWVzLlxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtudWxsIHwgdW5kZWZpbmVkfSBbc2VsZWN0b3JdXG4gICAqIEBwYXJhbSB7Li4uQ2hpbGR9IGNoaWxkcmVuXG4gICAqIEByZXR1cm5zIHtSb290fVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEBwYXJhbSB7UHJvcGVydGllc30gcHJvcGVydGllc1xuICAgKiBAcGFyYW0gey4uLkNoaWxkfSBjaGlsZHJlblxuICAgKiBAcmV0dXJucyB7RWxlbWVudH1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcGFyYW0gey4uLkNoaWxkfSBjaGlsZHJlblxuICAgKiBAcmV0dXJucyB7RWxlbWVudH1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbc2VsZWN0b3JdXG4gICAqICAgU2VsZWN0b3IuXG4gICAqIEBwYXJhbSB7Q2hpbGQgfCBQcm9wZXJ0aWVzIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3Byb3BlcnRpZXNdXG4gICAqICAgUHJvcGVydGllcyAob3IgZmlyc3QgY2hpbGQpIChkZWZhdWx0OiBgdW5kZWZpbmVkYCkuXG4gICAqIEBwYXJhbSB7Li4uQ2hpbGR9IGNoaWxkcmVuXG4gICAqICAgQ2hpbGRyZW4uXG4gICAqIEByZXR1cm5zIHtSZXN1bHR9XG4gICAqICAgUmVzdWx0LlxuICAgKi9cbiAgZnVuY3Rpb24gaChzZWxlY3RvciwgcHJvcGVydGllcywgLi4uY2hpbGRyZW4pIHtcbiAgICBsZXQgaW5kZXggPSAtMVxuICAgIC8qKiBAdHlwZSB7UmVzdWx0fSAqL1xuICAgIGxldCBub2RlXG5cbiAgICBpZiAoc2VsZWN0b3IgPT09IHVuZGVmaW5lZCB8fCBzZWxlY3RvciA9PT0gbnVsbCkge1xuICAgICAgbm9kZSA9IHt0eXBlOiAncm9vdCcsIGNoaWxkcmVuOiBbXX1cbiAgICAgIC8vIFByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHJvb3RzLlxuICAgICAgY29uc3QgY2hpbGQgPSAvKiogQHR5cGUge0NoaWxkfSAqLyAocHJvcGVydGllcylcbiAgICAgIGNoaWxkcmVuLnVuc2hpZnQoY2hpbGQpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUgPSBwYXJzZVNlbGVjdG9yKHNlbGVjdG9yLCBkZWZhdWx0VGFnTmFtZSlcbiAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgbmFtZS5cbiAgICAgIG5vZGUudGFnTmFtZSA9IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICBpZiAoYWRqdXN0ICYmIG93bi5jYWxsKGFkanVzdCwgbm9kZS50YWdOYW1lKSkge1xuICAgICAgICBub2RlLnRhZ05hbWUgPSBhZGp1c3Rbbm9kZS50YWdOYW1lXVxuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgcHJvcHMuXG4gICAgICBpZiAoaXNQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIG5vZGUudGFnTmFtZSkpIHtcbiAgICAgICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gICAgICAgIGxldCBrZXlcblxuICAgICAgICBmb3IgKGtleSBpbiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgaWYgKG93bi5jYWxsKHByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgICAgIGFkZFByb3BlcnR5KHNjaGVtYSwgbm9kZS5wcm9wZXJ0aWVzLCBrZXksIHByb3BlcnRpZXNba2V5XSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuLnVuc2hpZnQocHJvcGVydGllcylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgY2hpbGRyZW4uXG4gICAgd2hpbGUgKCsraW5kZXggPCBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGFkZENoaWxkKG5vZGUuY2hpbGRyZW4sIGNoaWxkcmVuW2luZGV4XSlcbiAgICB9XG5cbiAgICBpZiAobm9kZS50eXBlID09PSAnZWxlbWVudCcgJiYgbm9kZS50YWdOYW1lID09PSAndGVtcGxhdGUnKSB7XG4gICAgICBub2RlLmNvbnRlbnQgPSB7dHlwZTogJ3Jvb3QnLCBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbn1cbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXVxuICAgIH1cblxuICAgIHJldHVybiBub2RlXG4gIH1cblxuICByZXR1cm4gaFxufVxuXG4vKipcbiAqIENoZWNrIGlmIHNvbWV0aGluZyBpcyBwcm9wZXJ0aWVzIG9yIGEgY2hpbGQuXG4gKlxuICogQHBhcmFtIHtDaGlsZCB8IFByb3BlcnRpZXN9IHZhbHVlXG4gKiAgIFZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqICAgVGFnIG5hbWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgUHJvcGVydGllc31cbiAqICAgV2hldGhlciBgdmFsdWVgIGlzIGEgcHJvcGVydGllcyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvcGVydGllcyh2YWx1ZSwgbmFtZSkge1xuICBpZiAoXG4gICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fFxuICAgIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG5hbWUgPT09ICdpbnB1dCcgfHwgIXZhbHVlLnR5cGUgfHwgdHlwZW9mIHZhbHVlLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmICgnY2hpbGRyZW4nIGluIHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUuY2hpbGRyZW4pKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobmFtZSA9PT0gJ2J1dHRvbicpIHtcbiAgICByZXR1cm4gYnV0dG9uVHlwZXMuaGFzKHZhbHVlLnR5cGUudG9Mb3dlckNhc2UoKSlcbiAgfVxuXG4gIHJldHVybiAhKCd2YWx1ZScgaW4gdmFsdWUpXG59XG5cbi8qKlxuICogQHBhcmFtIHtTY2hlbWF9IHNjaGVtYVxuICogICBTY2hlbWEuXG4gKiBAcGFyYW0ge1Byb3BlcnRpZXN9IHByb3BlcnRpZXNcbiAqICAgUHJvcGVydGllcyBvYmplY3QuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiAgIFByb3BlcnR5IG5hbWUuXG4gKiBAcGFyYW0ge1Byb3BlcnR5VmFsdWUgfCBTdHlsZX0gdmFsdWVcbiAqICAgUHJvcGVydHkgdmFsdWUuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBhZGRQcm9wZXJ0eShzY2hlbWEsIHByb3BlcnRpZXMsIGtleSwgdmFsdWUpIHtcbiAgY29uc3QgaW5mbyA9IGZpbmQoc2NoZW1hLCBrZXkpXG4gIGxldCBpbmRleCA9IC0xXG4gIC8qKiBAdHlwZSB7UHJvcGVydHlWYWx1ZX0gKi9cbiAgbGV0IHJlc3VsdFxuXG4gIC8vIElnbm9yZSBudWxsaXNoIGFuZCBOYU4gdmFsdWVzLlxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuXG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAvLyBJZ25vcmUgTmFOLlxuICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSByZXR1cm5cblxuICAgIHJlc3VsdCA9IHZhbHVlXG4gIH1cbiAgLy8gQm9vbGVhbnMuXG4gIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmVzdWx0ID0gdmFsdWVcbiAgfVxuICAvLyBIYW5kbGUgbGlzdCB2YWx1ZXMuXG4gIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoaW5mby5zcGFjZVNlcGFyYXRlZCkge1xuICAgICAgcmVzdWx0ID0gc3BhY2VzKHZhbHVlKVxuICAgIH0gZWxzZSBpZiAoaW5mby5jb21tYVNlcGFyYXRlZCkge1xuICAgICAgcmVzdWx0ID0gY29tbWFzKHZhbHVlKVxuICAgIH0gZWxzZSBpZiAoaW5mby5jb21tYU9yU3BhY2VTZXBhcmF0ZWQpIHtcbiAgICAgIHJlc3VsdCA9IHNwYWNlcyhjb21tYXModmFsdWUpLmpvaW4oJyAnKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gcGFyc2VQcmltaXRpdmUoaW5mbywgaW5mby5wcm9wZXJ0eSwgdmFsdWUpXG4gICAgfVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmVzdWx0ID0gdmFsdWUuY29uY2F0KClcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBpbmZvLnByb3BlcnR5ID09PSAnc3R5bGUnID8gc3R5bGUodmFsdWUpIDogU3RyaW5nKHZhbHVlKVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgIC8qKiBAdHlwZSB7QXJyYXk8bnVtYmVyIHwgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBmaW5hbFJlc3VsdCA9IFtdXG5cbiAgICB3aGlsZSAoKytpbmRleCA8IHJlc3VsdC5sZW5ndGgpIHtcbiAgICAgIC8vIEFzc3VtZSBubyBib29sZWFucyBpbiBhcnJheS5cbiAgICAgIGNvbnN0IHZhbHVlID0gLyoqIEB0eXBlIHtudW1iZXIgfCBzdHJpbmd9ICovIChcbiAgICAgICAgcGFyc2VQcmltaXRpdmUoaW5mbywgaW5mby5wcm9wZXJ0eSwgcmVzdWx0W2luZGV4XSlcbiAgICAgIClcbiAgICAgIGZpbmFsUmVzdWx0W2luZGV4XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmVzdWx0ID0gZmluYWxSZXN1bHRcbiAgfVxuXG4gIC8vIENsYXNzIG5hbWVzICh3aGljaCBjYW4gYmUgYWRkZWQgYm90aCBvbiB0aGUgYHNlbGVjdG9yYCBhbmQgaGVyZSkuXG4gIGlmIChpbmZvLnByb3BlcnR5ID09PSAnY2xhc3NOYW1lJyAmJiBBcnJheS5pc0FycmF5KHByb3BlcnRpZXMuY2xhc3NOYW1lKSkge1xuICAgIC8vIEFzc3VtZSBubyBib29sZWFucyBpbiBgY2xhc3NOYW1lYC5cbiAgICBjb25zdCB2YWx1ZSA9IC8qKiBAdHlwZSB7bnVtYmVyIHwgc3RyaW5nfSAqLyAocmVzdWx0KVxuICAgIHJlc3VsdCA9IHByb3BlcnRpZXMuY2xhc3NOYW1lLmNvbmNhdCh2YWx1ZSlcbiAgfVxuXG4gIHByb3BlcnRpZXNbaW5mby5wcm9wZXJ0eV0gPSByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5PFJvb3RDb250ZW50Pn0gbm9kZXNcbiAqICAgQ2hpbGRyZW4uXG4gKiBAcGFyYW0ge0NoaWxkfSB2YWx1ZVxuICogICBDaGlsZC5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGFkZENoaWxkKG5vZGVzLCB2YWx1ZSkge1xuICBsZXQgaW5kZXggPSAtMVxuXG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgLy8gRW1wdHkuXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgbm9kZXMucHVzaCh7dHlwZTogJ3RleHQnLCB2YWx1ZTogU3RyaW5nKHZhbHVlKX0pXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB3aGlsZSAoKytpbmRleCA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgYWRkQ2hpbGQobm9kZXMsIHZhbHVlW2luZGV4XSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gdmFsdWUpIHtcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gJ3Jvb3QnKSB7XG4gICAgICBhZGRDaGlsZChub2RlcywgdmFsdWUuY2hpbGRyZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVzLnB1c2godmFsdWUpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbm9kZSwgbm9kZXMsIG9yIHN0cmluZywgZ290IGAnICsgdmFsdWUgKyAnYCcpXG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhIHNpbmdsZSBwcmltaXRpdmVzLlxuICpcbiAqIEBwYXJhbSB7SW5mb30gaW5mb1xuICogICBQcm9wZXJ0eSBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiAgIFByb3BlcnR5IG5hbWUuXG4gKiBAcGFyYW0ge1ByaW1pdGl2ZVZhbHVlfSB2YWx1ZVxuICogICBQcm9wZXJ0eSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtQcmltaXRpdmVWYWx1ZX1cbiAqICAgUHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUHJpbWl0aXZlKGluZm8sIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGluZm8ubnVtYmVyICYmIHZhbHVlICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHZhbHVlKSkpIHtcbiAgICAgIHJldHVybiBOdW1iZXIodmFsdWUpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKGluZm8uYm9vbGVhbiB8fCBpbmZvLm92ZXJsb2FkZWRCb29sZWFuKSAmJlxuICAgICAgKHZhbHVlID09PSAnJyB8fCBub3JtYWxpemUodmFsdWUpID09PSBub3JtYWxpemUobmFtZSkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZVxufVxuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIGBzdHlsZWAgb2JqZWN0IGFzIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7U3R5bGV9IHZhbHVlXG4gKiAgIFN0eWxlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIENTUyBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHN0eWxlKHZhbHVlKSB7XG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgcmVzdWx0ID0gW11cbiAgLyoqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGxldCBrZXlcblxuICBmb3IgKGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChvd24uY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgcmVzdWx0LnB1c2goW2tleSwgdmFsdWVba2V5XV0uam9pbignOiAnKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmpvaW4oJzsgJylcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtYXAgdG8gYWRqdXN0IGNhc2luZy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHZhbHVlc1xuICogICBMaXN0IG9mIHByb3Blcmx5IGNhc2VkIGtleXMuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqICAgTWFwIG9mIGxvd2VyY2FzZSBrZXlzIHRvIHVwcGVyY2FzZSBrZXlzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVBZGp1c3RNYXAodmFsdWVzKSB7XG4gIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgY29uc3QgcmVzdWx0ID0ge31cbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IHZhbHVlcy5sZW5ndGgpIHtcbiAgICByZXN1bHRbdmFsdWVzW2luZGV4XS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlc1tpbmRleF1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiIsICJleHBvcnQgY29uc3Qgc3ZnQ2FzZVNlbnNpdGl2ZVRhZ05hbWVzID0gW1xuICAnYWx0R2x5cGgnLFxuICAnYWx0R2x5cGhEZWYnLFxuICAnYWx0R2x5cGhJdGVtJyxcbiAgJ2FuaW1hdGVDb2xvcicsXG4gICdhbmltYXRlTW90aW9uJyxcbiAgJ2FuaW1hdGVUcmFuc2Zvcm0nLFxuICAnY2xpcFBhdGgnLFxuICAnZmVCbGVuZCcsXG4gICdmZUNvbG9yTWF0cml4JyxcbiAgJ2ZlQ29tcG9uZW50VHJhbnNmZXInLFxuICAnZmVDb21wb3NpdGUnLFxuICAnZmVDb252b2x2ZU1hdHJpeCcsXG4gICdmZURpZmZ1c2VMaWdodGluZycsXG4gICdmZURpc3BsYWNlbWVudE1hcCcsXG4gICdmZURpc3RhbnRMaWdodCcsXG4gICdmZURyb3BTaGFkb3cnLFxuICAnZmVGbG9vZCcsXG4gICdmZUZ1bmNBJyxcbiAgJ2ZlRnVuY0InLFxuICAnZmVGdW5jRycsXG4gICdmZUZ1bmNSJyxcbiAgJ2ZlR2F1c3NpYW5CbHVyJyxcbiAgJ2ZlSW1hZ2UnLFxuICAnZmVNZXJnZScsXG4gICdmZU1lcmdlTm9kZScsXG4gICdmZU1vcnBob2xvZ3knLFxuICAnZmVPZmZzZXQnLFxuICAnZmVQb2ludExpZ2h0JyxcbiAgJ2ZlU3BlY3VsYXJMaWdodGluZycsXG4gICdmZVNwb3RMaWdodCcsXG4gICdmZVRpbGUnLFxuICAnZmVUdXJidWxlbmNlJyxcbiAgJ2ZvcmVpZ25PYmplY3QnLFxuICAnZ2x5cGhSZWYnLFxuICAnbGluZWFyR3JhZGllbnQnLFxuICAncmFkaWFsR3JhZGllbnQnLFxuICAnc29saWRDb2xvcicsXG4gICd0ZXh0QXJlYScsXG4gICd0ZXh0UGF0aCdcbl1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vY3JlYXRlLWguanMnKS5DaGlsZH0gQ2hpbGRcbiAqICAgQWNjZXB0YWJsZSBjaGlsZCB2YWx1ZS5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vY3JlYXRlLWguanMnKS5Qcm9wZXJ0aWVzfSBQcm9wZXJ0aWVzXG4gKiAgIEFjY2VwdGFibGUgdmFsdWUgZm9yIGVsZW1lbnQgcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vY3JlYXRlLWguanMnKS5SZXN1bHR9IFJlc3VsdFxuICogICBSZXN1bHQgZnJvbSBhIGBoYCAob3IgYHNgKSBjYWxsLlxuICovXG5cbi8vIFJlZ2lzdGVyIHRoZSBKU1ggbmFtZXNwYWNlIG9uIGBoYC5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9qc3gtY2xhc3NpYy5qcycpLkVsZW1lbnR9IGguSlNYLkVsZW1lbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vanN4LWNsYXNzaWMuanMnKS5FbGVtZW50Q2hpbGRyZW5BdHRyaWJ1dGV9IGguSlNYLkVsZW1lbnRDaGlsZHJlbkF0dHJpYnV0ZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi9qc3gtY2xhc3NpYy5qcycpLkludHJpbnNpY0F0dHJpYnV0ZXN9IGguSlNYLkludHJpbnNpY0F0dHJpYnV0ZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vanN4LWNsYXNzaWMuanMnKS5JbnRyaW5zaWNFbGVtZW50c30gaC5KU1guSW50cmluc2ljRWxlbWVudHNcbiAqL1xuXG4vLyBSZWdpc3RlciB0aGUgSlNYIG5hbWVzcGFjZSBvbiBgc2AuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vanN4LWNsYXNzaWMuanMnKS5FbGVtZW50fSBzLkpTWC5FbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2pzeC1jbGFzc2ljLmpzJykuRWxlbWVudENoaWxkcmVuQXR0cmlidXRlfSBzLkpTWC5FbGVtZW50Q2hpbGRyZW5BdHRyaWJ1dGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4vanN4LWNsYXNzaWMuanMnKS5JbnRyaW5zaWNBdHRyaWJ1dGVzfSBzLkpTWC5JbnRyaW5zaWNBdHRyaWJ1dGVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2pzeC1jbGFzc2ljLmpzJykuSW50cmluc2ljRWxlbWVudHN9IHMuSlNYLkludHJpbnNpY0VsZW1lbnRzXG4gKi9cblxuaW1wb3J0IHtodG1sLCBzdmd9IGZyb20gJ3Byb3BlcnR5LWluZm9ybWF0aW9uJ1xuaW1wb3J0IHtjcmVhdGVIfSBmcm9tICcuL2NyZWF0ZS1oLmpzJ1xuaW1wb3J0IHtzdmdDYXNlU2Vuc2l0aXZlVGFnTmFtZXN9IGZyb20gJy4vc3ZnLWNhc2Utc2Vuc2l0aXZlLXRhZy1uYW1lcy5qcydcblxuLy8gTm90ZTogdGhpcyBleHBsaWNpdCB0eXBlIGlzIG5lZWRlZCwgb3RoZXJ3aXNlIFRTIGNyZWF0ZXMgYnJva2VuIHR5cGVzLlxuLyoqIEB0eXBlIHtSZXR1cm5UeXBlPGNyZWF0ZUg+fSAqL1xuZXhwb3J0IGNvbnN0IGggPSBjcmVhdGVIKGh0bWwsICdkaXYnKVxuXG4vLyBOb3RlOiB0aGlzIGV4cGxpY2l0IHR5cGUgaXMgbmVlZGVkLCBvdGhlcndpc2UgVFMgY3JlYXRlcyBicm9rZW4gdHlwZXMuXG4vKiogQHR5cGUge1JldHVyblR5cGU8Y3JlYXRlSD59ICovXG5leHBvcnQgY29uc3QgcyA9IGNyZWF0ZUgoc3ZnLCAnZycsIHN2Z0Nhc2VTZW5zaXRpdmVUYWdOYW1lcylcbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3ZmaWxlJykuVkZpbGV9IFZGaWxlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd2ZmlsZScpLlZhbHVlfSBWYWx1ZVxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Qb2ludH0gVW5pc3RQb2ludFxuICovXG5cbi8qKlxuICpcbiAqIEB0eXBlZGVmIFBvaW50TGlrZVxuICogICB1bmlzdCBwb2ludCwgYWxsb3dlZCBhcyBpbnB1dC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2xpbmVdXG4gKiAgIExpbmUuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtjb2x1bW5dXG4gKiAgIENvbHVtbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29mZnNldF1cbiAqICAgT2Zmc2V0LlxuICpcbiAqIEBjYWxsYmFjayBUb1BvaW50XG4gKiAgIEdldCB0aGUgbGluZS9jb2x1bW4gYmFzZWQgYFBvaW50YCBmb3IgYG9mZnNldGAgaW4gdGhlIGJvdW5kIGluZGljZXMuXG4gKlxuICogICBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gZ2l2ZW4gb3V0IG9mIGJvdW5kcyBpbnB1dC5cbiAqXG4gKiAgIEFsc28gaW1wbGVtZW50ZWQgaW4gUnVzdCBpbiBbYHdvb29ybS9tYXJrZG93bi1yc2BdW21hcmtkb3duLXJzXS5cbiAqXG4gKiAgIFttYXJrZG93bi1yc106IGh0dHBzOi8vZ2l0aHViLmNvbS93b29vcm0vbWFya2Rvd24tcnMvYmxvYi9tYWluL3NyYy91dGlsL2xvY2F0aW9uLnJzXG4gKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtvZmZzZXRdXG4gKiAgIFNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBhbiBgb2Zmc2V0LlxuICogQHJldHVybnMge1VuaXN0UG9pbnQgfCB1bmRlZmluZWR9XG4gKiAgIFBvaW50LCBpZiBgb2Zmc2V0YCBpcyB2YWxpZCBhbmQgaW4tYm91bmRzIGlucHV0LlxuICpcbiAqIEBjYWxsYmFjayBUb09mZnNldFxuICogICBHZXQgdGhlIGBvZmZzZXRgIGZyb20gYSBsaW5lL2NvbHVtbiBiYXNlZCBgUG9pbnRgIGluIHRoZSBib3VuZCBpbmRpY2VzLlxuICogQHBhcmFtIHtQb2ludExpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbcG9pbnRdXG4gKiAgIFNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBhIGBwb2ludC5cbiAqIEByZXR1cm5zIHtudW1iZXIgfCB1bmRlZmluZWR9XG4gKiAgIE9mZnNldCAoYG51bWJlcmApIG9yIGB1bmRlZmluZWRgIGZvciBpbnZhbGlkIG9yIG91dCBvZiBib3VuZHMgaW5wdXQuXG4gKlxuICogQHR5cGVkZWYgTG9jYXRpb25cbiAqICAgQWNjZXNzb3JzIGZvciBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7VG9Qb2ludH0gdG9Qb2ludFxuICogICBHZXQgdGhlIGxpbmUvY29sdW1uIGJhc2VkIGBQb2ludGAgZm9yIGBvZmZzZXRgIGluIHRoZSBib3VuZCBpbmRpY2VzLlxuICogQHByb3BlcnR5IHtUb09mZnNldH0gdG9PZmZzZXRcbiAqICAgR2V0IHRoZSBgb2Zmc2V0YCBmcm9tIGEgbGluZS9jb2x1bW4gYmFzZWQgYFBvaW50YCBpbiB0aGUgYm91bmQgaW5kaWNlcy5cbiAqL1xuXG5jb25zdCBzZWFyY2ggPSAvXFxyP1xcbnxcXHIvZ1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbmRleCBvZiB0aGUgZ2l2ZW4gZG9jdW1lbnQgdG8gdHJhbnNsYXRlIGJldHdlZW4gbGluZS9jb2x1bW4gYW5kXG4gKiBvZmZzZXQgYmFzZWQgcG9zaXRpb25hbCBpbmZvLlxuICpcbiAqIEFsc28gaW1wbGVtZW50ZWQgaW4gUnVzdCBpbiBbYHdvb29ybS9tYXJrZG93bi1yc2BdW21hcmtkb3duLXJzXS5cbiAqXG4gKiBbbWFya2Rvd24tcnNdOiBodHRwczovL2dpdGh1Yi5jb20vd29vb3JtL21hcmtkb3duLXJzL2Jsb2IvbWFpbi9zcmMvdXRpbC9sb2NhdGlvbi5yc1xuICpcbiAqIEBwYXJhbSB7VkZpbGUgfCBWYWx1ZX0gZmlsZVxuICogICBGaWxlIHRvIGluZGV4LlxuICogQHJldHVybnMge0xvY2F0aW9ufVxuICogICBBY2Nlc3NvcnMgZm9yIGluZGV4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9jYXRpb24oZmlsZSkge1xuICBjb25zdCB2YWx1ZSA9IFN0cmluZyhmaWxlKVxuICAvKipcbiAgICogTGlzdCwgd2hlcmUgZWFjaCBpbmRleCBpcyBhIGxpbmUgbnVtYmVyICgwLWJhc2VkKSwgYW5kIGVhY2ggdmFsdWUgaXMgdGhlXG4gICAqIGJ5dGUgaW5kZXggKmFmdGVyKiB3aGVyZSB0aGUgbGluZSBlbmRzLlxuICAgKlxuICAgKiBAdHlwZSB7QXJyYXk8bnVtYmVyPn1cbiAgICovXG4gIGNvbnN0IGluZGljZXMgPSBbXVxuXG4gIHNlYXJjaC5sYXN0SW5kZXggPSAwXG5cbiAgd2hpbGUgKHNlYXJjaC50ZXN0KHZhbHVlKSkge1xuICAgIGluZGljZXMucHVzaChzZWFyY2gubGFzdEluZGV4KVxuICB9XG5cbiAgaW5kaWNlcy5wdXNoKHZhbHVlLmxlbmd0aCArIDEpXG5cbiAgcmV0dXJuIHt0b1BvaW50LCB0b09mZnNldH1cblxuICAvKiogQHR5cGUge1RvUG9pbnR9ICovXG4gIGZ1bmN0aW9uIHRvUG9pbnQob2Zmc2V0KSB7XG4gICAgbGV0IGluZGV4ID0gLTFcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInICYmXG4gICAgICBvZmZzZXQgPiAtMSAmJlxuICAgICAgb2Zmc2V0IDwgaW5kaWNlc1tpbmRpY2VzLmxlbmd0aCAtIDFdXG4gICAgKSB7XG4gICAgICB3aGlsZSAoKytpbmRleCA8IGluZGljZXMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChpbmRpY2VzW2luZGV4XSA+IG9mZnNldCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaW5lOiBpbmRleCArIDEsXG4gICAgICAgICAgICBjb2x1bW46IG9mZnNldCAtIChpbmRleCA+IDAgPyBpbmRpY2VzW2luZGV4IC0gMV0gOiAwKSArIDEsXG4gICAgICAgICAgICBvZmZzZXRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQHR5cGUge1RvT2Zmc2V0fSAqL1xuICBmdW5jdGlvbiB0b09mZnNldChwb2ludCkge1xuICAgIGNvbnN0IGxpbmUgPSBwb2ludCAmJiBwb2ludC5saW5lXG4gICAgY29uc3QgY29sdW1uID0gcG9pbnQgJiYgcG9pbnQuY29sdW1uXG5cbiAgICBpZiAoXG4gICAgICB0eXBlb2YgbGluZSA9PT0gJ251bWJlcicgJiZcbiAgICAgIHR5cGVvZiBjb2x1bW4gPT09ICdudW1iZXInICYmXG4gICAgICAhTnVtYmVyLmlzTmFOKGxpbmUpICYmXG4gICAgICAhTnVtYmVyLmlzTmFOKGNvbHVtbikgJiZcbiAgICAgIGxpbmUgLSAxIGluIGluZGljZXNcbiAgICApIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IChpbmRpY2VzW2xpbmUgLSAyXSB8fCAwKSArIGNvbHVtbiAtIDEgfHwgMFxuXG4gICAgICBpZiAob2Zmc2V0ID4gLTEgJiYgb2Zmc2V0IDwgaW5kaWNlc1tpbmRpY2VzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgIHJldHVybiBvZmZzZXRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICIvKipcbiAqIE1hcCBvZiB3ZWIgbmFtZXNwYWNlcy5cbiAqXG4gKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuZXhwb3J0IGNvbnN0IHdlYk5hbWVzcGFjZXMgPSB7XG4gIGh0bWw6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJyxcbiAgbWF0aG1sOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCcsXG4gIHN2ZzogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcbiAgeGxpbms6ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJyxcbiAgeG1sOiAnaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlJyxcbiAgeG1sbnM6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLydcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5FbGVtZW50fSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuRWxlbWVudERhdGF9IEVsZW1lbnREYXRhXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuTm9kZXN9IE5vZGVzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUm9vdH0gUm9vdFxuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdCcpLlJvb3RDb250ZW50fSBSb290Q29udGVudFxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3BhcnNlNScpLkRlZmF1bHRUcmVlQWRhcHRlck1hcH0gRGVmYXVsdFRyZWVBZGFwdGVyTWFwXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdwYXJzZTUnKS5Ub2tlbi5FbGVtZW50TG9jYXRpb259IFA1RWxlbWVudExvY2F0aW9uXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdwYXJzZTUnKS5Ub2tlbi5Mb2NhdGlvbn0gUDVMb2NhdGlvblxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3Byb3BlcnR5LWluZm9ybWF0aW9uJykuU2NoZW1hfSBTY2hlbWFcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBvaW50fSBQb2ludFxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Qb3NpdGlvbn0gUG9zaXRpb25cbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd2ZmlsZScpLlZGaWxlfSBWRmlsZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge0RlZmF1bHRUcmVlQWRhcHRlck1hcFsnZG9jdW1lbnQnXX0gUDVEb2N1bWVudFxuICogQHR5cGVkZWYge0RlZmF1bHRUcmVlQWRhcHRlck1hcFsnZG9jdW1lbnRGcmFnbWVudCddfSBQNURvY3VtZW50RnJhZ21lbnRcbiAqIEB0eXBlZGVmIHtEZWZhdWx0VHJlZUFkYXB0ZXJNYXBbJ2RvY3VtZW50VHlwZSddfSBQNURvY3VtZW50VHlwZVxuICogQHR5cGVkZWYge0RlZmF1bHRUcmVlQWRhcHRlck1hcFsnY29tbWVudE5vZGUnXX0gUDVDb21tZW50XG4gKiBAdHlwZWRlZiB7RGVmYXVsdFRyZWVBZGFwdGVyTWFwWyd0ZXh0Tm9kZSddfSBQNVRleHRcbiAqIEB0eXBlZGVmIHtEZWZhdWx0VHJlZUFkYXB0ZXJNYXBbJ2VsZW1lbnQnXX0gUDVFbGVtZW50XG4gKiBAdHlwZWRlZiB7RGVmYXVsdFRyZWVBZGFwdGVyTWFwWydub2RlJ119IFA1Tm9kZVxuICogQHR5cGVkZWYge0RlZmF1bHRUcmVlQWRhcHRlck1hcFsndGVtcGxhdGUnXX0gUDVUZW1wbGF0ZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgT3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtTcGFjZSB8IG51bGwgfCB1bmRlZmluZWR9IFtzcGFjZT0naHRtbCddXG4gKiAgIFdoaWNoIHNwYWNlIHRoZSBkb2N1bWVudCBpcyBpbiAoZGVmYXVsdDogYCdodG1sJ2ApLlxuICpcbiAqICAgV2hlbiBhbiBgPHN2Zz5gIGVsZW1lbnQgaXMgZm91bmQgaW4gdGhlIEhUTUwgc3BhY2UsIHRoaXMgcGFja2FnZSBhbHJlYWR5XG4gKiAgIGF1dG9tYXRpY2FsbHkgc3dpdGNoZXMgdG8gYW5kIGZyb20gdGhlIFNWRyBzcGFjZSB3aGVuIGVudGVyaW5nIGFuZCBleGl0aW5nXG4gKiAgIGl0LlxuICogQHByb3BlcnR5IHtWRmlsZSB8IG51bGwgfCB1bmRlZmluZWR9IFtmaWxlXVxuICogICBGaWxlIHVzZWQgdG8gYWRkIHBvc2l0aW9uYWwgaW5mbyB0byBub2RlcyAob3B0aW9uYWwpLlxuICpcbiAqICAgSWYgZ2l2ZW4sIHRoZSBmaWxlIHNob3VsZCByZXByZXNlbnQgdGhlIG9yaWdpbmFsIEhUTUwgc291cmNlLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3ZlcmJvc2U9ZmFsc2VdXG4gKiAgIFdoZXRoZXIgdG8gYWRkIGV4dHJhIHBvc2l0aW9uYWwgaW5mbyBhYm91dCBzdGFydGluZyB0YWdzLCBjbG9zaW5nIHRhZ3MsXG4gKiAgIGFuZCBhdHRyaWJ1dGVzIHRvIGVsZW1lbnRzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBvbmx5IHVzZWQgd2hlbiBgZmlsZWAgaXMgZ2l2ZW4uXG4gKlxuICogQHR5cGVkZWYgeydodG1sJyB8ICdzdmcnfSBTcGFjZVxuICogICBOYW1lc3BhY2UuXG4gKlxuICogQHR5cGVkZWYgU3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHByb3BlcnR5IHtWRmlsZSB8IHVuZGVmaW5lZH0gZmlsZVxuICogICBDb3JyZXNwb25kaW5nIGZpbGUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvY2F0aW9uXG4gKiAgIFdoZXRoZXIgbG9jYXRpb24gaW5mbyB3YXMgZm91bmQuXG4gKiBAcHJvcGVydHkge1NjaGVtYX0gc2NoZW1hXG4gKiAgIEN1cnJlbnQgc2NoZW1hLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgdW5kZWZpbmVkfSB2ZXJib3NlXG4gKiAgIEFkZCBleHRyYSBwb3NpdGlvbmFsIGluZm8uXG4gKi9cblxuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ2RldmxvcCdcbmltcG9ydCB7aCwgc30gZnJvbSAnaGFzdHNjcmlwdCdcbmltcG9ydCB7ZmluZCwgaHRtbCwgc3ZnfSBmcm9tICdwcm9wZXJ0eS1pbmZvcm1hdGlvbidcbmltcG9ydCB7bG9jYXRpb259IGZyb20gJ3ZmaWxlLWxvY2F0aW9uJ1xuaW1wb3J0IHt3ZWJOYW1lc3BhY2VzfSBmcm9tICd3ZWItbmFtZXNwYWNlcydcblxuY29uc3Qgb3duID0ge30uaGFzT3duUHJvcGVydHlcbi8qKiBAdHlwZSB7dW5rbm93bn0gKi9cbi8vIHR5cGUtY292ZXJhZ2U6aWdub3JlLW5leHQtbGluZVxuY29uc3QgcHJvdG8gPSBPYmplY3QucHJvdG90eXBlXG5cbi8qKlxuICogVHJhbnNmb3JtIGEgYHBhcnNlNWAgQVNUIHRvIGhhc3QuXG4gKlxuICogQHBhcmFtIHtQNU5vZGV9IHRyZWVcbiAqICAgYHBhcnNlNWAgdHJlZSB0byB0cmFuc2Zvcm0uXG4gKiBAcGFyYW0ge09wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICogQHJldHVybnMge05vZGVzfVxuICogICBoYXN0IHRyZWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUGFyc2U1KHRyZWUsIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG5cbiAgcmV0dXJuIG9uZShcbiAgICB7XG4gICAgICBmaWxlOiBzZXR0aW5ncy5maWxlIHx8IHVuZGVmaW5lZCxcbiAgICAgIGxvY2F0aW9uOiBmYWxzZSxcbiAgICAgIHNjaGVtYTogc2V0dGluZ3Muc3BhY2UgPT09ICdzdmcnID8gc3ZnIDogaHRtbCxcbiAgICAgIHZlcmJvc2U6IHNldHRpbmdzLnZlcmJvc2UgfHwgZmFsc2VcbiAgICB9LFxuICAgIHRyZWVcbiAgKVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHtQNU5vZGV9IG5vZGVcbiAqICAgcDUgbm9kZS5cbiAqIEByZXR1cm5zIHtOb2Rlc31cbiAqICAgaGFzdCBub2RlLlxuICovXG5mdW5jdGlvbiBvbmUoc3RhdGUsIG5vZGUpIHtcbiAgLyoqIEB0eXBlIHtOb2Rlc30gKi9cbiAgbGV0IHJlc3VsdFxuXG4gIHN3aXRjaCAobm9kZS5ub2RlTmFtZSkge1xuICAgIGNhc2UgJyNjb21tZW50Jzoge1xuICAgICAgY29uc3QgcmVmZXJlbmNlID0gLyoqIEB0eXBlIHtQNUNvbW1lbnR9ICovIChub2RlKVxuICAgICAgcmVzdWx0ID0ge3R5cGU6ICdjb21tZW50JywgdmFsdWU6IHJlZmVyZW5jZS5kYXRhfVxuICAgICAgcGF0Y2goc3RhdGUsIHJlZmVyZW5jZSwgcmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIGNhc2UgJyNkb2N1bWVudCc6XG4gICAgY2FzZSAnI2RvY3VtZW50LWZyYWdtZW50Jzoge1xuICAgICAgY29uc3QgcmVmZXJlbmNlID0gLyoqIEB0eXBlIHtQNURvY3VtZW50IHwgUDVEb2N1bWVudEZyYWdtZW50fSAqLyAobm9kZSlcbiAgICAgIGNvbnN0IHF1aXJrc01vZGUgPVxuICAgICAgICAnbW9kZScgaW4gcmVmZXJlbmNlXG4gICAgICAgICAgPyByZWZlcmVuY2UubW9kZSA9PT0gJ3F1aXJrcycgfHwgcmVmZXJlbmNlLm1vZGUgPT09ICdsaW1pdGVkLXF1aXJrcydcbiAgICAgICAgICA6IGZhbHNlXG5cbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgdHlwZTogJ3Jvb3QnLFxuICAgICAgICBjaGlsZHJlbjogYWxsKHN0YXRlLCBub2RlLmNoaWxkTm9kZXMpLFxuICAgICAgICBkYXRhOiB7cXVpcmtzTW9kZX1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlLmZpbGUgJiYgc3RhdGUubG9jYXRpb24pIHtcbiAgICAgICAgY29uc3QgZG9jID0gU3RyaW5nKHN0YXRlLmZpbGUpXG4gICAgICAgIGNvbnN0IGxvYyA9IGxvY2F0aW9uKGRvYylcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBsb2MudG9Qb2ludCgwKVxuICAgICAgICBjb25zdCBlbmQgPSBsb2MudG9Qb2ludChkb2MubGVuZ3RoKVxuICAgICAgICAvLyBBbHdheXMgZGVmaW5lZCBhcyB3ZSBnaXZlIHZhbGlkIGlucHV0LlxuICAgICAgICBhc3NlcnQoc3RhcnQsICdleHBlY3RlZCBgc3RhcnRgJylcbiAgICAgICAgYXNzZXJ0KGVuZCwgJ2V4cGVjdGVkIGBlbmRgJylcbiAgICAgICAgcmVzdWx0LnBvc2l0aW9uID0ge3N0YXJ0LCBlbmR9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICBjYXNlICcjZG9jdW1lbnRUeXBlJzoge1xuICAgICAgY29uc3QgcmVmZXJlbmNlID0gLyoqIEB0eXBlIHtQNURvY3VtZW50VHlwZX0gKi8gKG5vZGUpXG4gICAgICByZXN1bHQgPSB7dHlwZTogJ2RvY3R5cGUnfVxuICAgICAgcGF0Y2goc3RhdGUsIHJlZmVyZW5jZSwgcmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIGNhc2UgJyN0ZXh0Jzoge1xuICAgICAgY29uc3QgcmVmZXJlbmNlID0gLyoqIEB0eXBlIHtQNVRleHR9ICovIChub2RlKVxuICAgICAgcmVzdWx0ID0ge3R5cGU6ICd0ZXh0JywgdmFsdWU6IHJlZmVyZW5jZS52YWx1ZX1cbiAgICAgIHBhdGNoKHN0YXRlLCByZWZlcmVuY2UsIHJlc3VsdClcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICAvLyBFbGVtZW50LlxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IC8qKiBAdHlwZSB7UDVFbGVtZW50fSAqLyAobm9kZSlcbiAgICAgIHJlc3VsdCA9IGVsZW1lbnQoc3RhdGUsIHJlZmVyZW5jZSlcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHtBcnJheTxQNU5vZGU+fSBub2Rlc1xuICogICBOb2Rlcy5cbiAqIEByZXR1cm5zIHtBcnJheTxSb290Q29udGVudD59XG4gKiAgIGhhc3Qgbm9kZXMuXG4gKi9cbmZ1bmN0aW9uIGFsbChzdGF0ZSwgbm9kZXMpIHtcbiAgbGV0IGluZGV4ID0gLTFcbiAgLyoqIEB0eXBlIHtBcnJheTxSb290Q29udGVudD59ICovXG4gIGNvbnN0IHJlc3VsdHMgPSBbXVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbm9kZXMubGVuZ3RoKSB7XG4gICAgLy8gQXNzdW1lIG5vIHJvb3RzIGluIGBub2Rlc2AuXG4gICAgY29uc3QgcmVzdWx0ID0gLyoqIEB0eXBlIHtSb290Q29udGVudH0gKi8gKG9uZShzdGF0ZSwgbm9kZXNbaW5kZXhdKSlcbiAgICByZXN1bHRzLnB1c2gocmVzdWx0KVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHNcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0ge1A1RWxlbWVudH0gbm9kZVxuICogICBgcGFyc2U1YCBub2RlIHRvIHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtFbGVtZW50fVxuICogICBoYXN0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGVsZW1lbnQoc3RhdGUsIG5vZGUpIHtcbiAgY29uc3Qgc2NoZW1hID0gc3RhdGUuc2NoZW1hXG5cbiAgc3RhdGUuc2NoZW1hID0gbm9kZS5uYW1lc3BhY2VVUkkgPT09IHdlYk5hbWVzcGFjZXMuc3ZnID8gc3ZnIDogaHRtbFxuXG4gIC8vIFByb3BzLlxuICBsZXQgaW5kZXggPSAtMVxuICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZz59ICovXG4gIGNvbnN0IHByb3BzID0ge31cblxuICB3aGlsZSAoKytpbmRleCA8IG5vZGUuYXR0cnMubGVuZ3RoKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gbm9kZS5hdHRyc1tpbmRleF1cbiAgICBjb25zdCBuYW1lID1cbiAgICAgIChhdHRyaWJ1dGUucHJlZml4ID8gYXR0cmlidXRlLnByZWZpeCArICc6JyA6ICcnKSArIGF0dHJpYnV0ZS5uYW1lXG4gICAgaWYgKCFvd24uY2FsbChwcm90bywgbmFtZSkpIHtcbiAgICAgIHByb3BzW25hbWVdID0gYXR0cmlidXRlLnZhbHVlXG4gICAgfVxuICB9XG5cbiAgLy8gQnVpbGQuXG4gIGNvbnN0IGZuID0gc3RhdGUuc2NoZW1hLnNwYWNlID09PSAnc3ZnJyA/IHMgOiBoXG4gIGNvbnN0IHJlc3VsdCA9IGZuKG5vZGUudGFnTmFtZSwgcHJvcHMsIGFsbChzdGF0ZSwgbm9kZS5jaGlsZE5vZGVzKSlcbiAgcGF0Y2goc3RhdGUsIG5vZGUsIHJlc3VsdClcblxuICAvLyBTd2l0Y2ggY29udGVudC5cbiAgaWYgKHJlc3VsdC50YWdOYW1lID09PSAndGVtcGxhdGUnKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlID0gLyoqIEB0eXBlIHtQNVRlbXBsYXRlfSAqLyAobm9kZSlcbiAgICBjb25zdCBwb3MgPSByZWZlcmVuY2Uuc291cmNlQ29kZUxvY2F0aW9uXG4gICAgY29uc3Qgc3RhcnRUYWcgPSBwb3MgJiYgcG9zLnN0YXJ0VGFnICYmIHBvc2l0aW9uKHBvcy5zdGFydFRhZylcbiAgICBjb25zdCBlbmRUYWcgPSBwb3MgJiYgcG9zLmVuZFRhZyAmJiBwb3NpdGlvbihwb3MuZW5kVGFnKVxuXG4gICAgLy8gUm9vdCBpbiwgcm9vdCBvdXQuXG4gICAgY29uc3QgY29udGVudCA9IC8qKiBAdHlwZSB7Um9vdH0gKi8gKG9uZShzdGF0ZSwgcmVmZXJlbmNlLmNvbnRlbnQpKVxuXG4gICAgaWYgKHN0YXJ0VGFnICYmIGVuZFRhZyAmJiBzdGF0ZS5maWxlKSB7XG4gICAgICBjb250ZW50LnBvc2l0aW9uID0ge3N0YXJ0OiBzdGFydFRhZy5lbmQsIGVuZDogZW5kVGFnLnN0YXJ0fVxuICAgIH1cblxuICAgIHJlc3VsdC5jb250ZW50ID0gY29udGVudFxuICB9XG5cbiAgc3RhdGUuc2NoZW1hID0gc2NoZW1hXG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIFBhdGNoIHBvc2l0aW9uYWwgaW5mbyBmcm9tIGBmcm9tYCBvbnRvIGB0b2AuXG4gKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHtQNU5vZGV9IGZyb21cbiAqICAgcDUgbm9kZS5cbiAqIEBwYXJhbSB7Tm9kZXN9IHRvXG4gKiAgIGhhc3Qgbm9kZS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIHBhdGNoKHN0YXRlLCBmcm9tLCB0bykge1xuICBpZiAoJ3NvdXJjZUNvZGVMb2NhdGlvbicgaW4gZnJvbSAmJiBmcm9tLnNvdXJjZUNvZGVMb2NhdGlvbiAmJiBzdGF0ZS5maWxlKSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSBjcmVhdGVMb2NhdGlvbihzdGF0ZSwgdG8sIGZyb20uc291cmNlQ29kZUxvY2F0aW9uKVxuXG4gICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICBzdGF0ZS5sb2NhdGlvbiA9IHRydWVcbiAgICAgIHRvLnBvc2l0aW9uID0gcG9zaXRpb25cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgY2xlYW4gcG9zaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcGFyYW0ge05vZGVzfSBub2RlXG4gKiAgIGhhc3Qgbm9kZS5cbiAqIEBwYXJhbSB7UDVFbGVtZW50TG9jYXRpb259IGxvY2F0aW9uXG4gKiAgIHA1IGxvY2F0aW9uIGluZm8uXG4gKiBAcmV0dXJucyB7UG9zaXRpb24gfCB1bmRlZmluZWR9XG4gKiAgIFBvc2l0aW9uLCBvciBub3RoaW5nLlxuICovXG5mdW5jdGlvbiBjcmVhdGVMb2NhdGlvbihzdGF0ZSwgbm9kZSwgbG9jYXRpb24pIHtcbiAgY29uc3QgcmVzdWx0ID0gcG9zaXRpb24obG9jYXRpb24pXG5cbiAgaWYgKG5vZGUudHlwZSA9PT0gJ2VsZW1lbnQnKSB7XG4gICAgY29uc3QgdGFpbCA9IG5vZGUuY2hpbGRyZW5bbm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXVxuXG4gICAgLy8gQnVnIGZvciB1bmNsb3NlZCB3aXRoIGNoaWxkcmVuLlxuICAgIC8vIFNlZTogPGh0dHBzOi8vZ2l0aHViLmNvbS9pbmlrdWxpbi9wYXJzZTUvaXNzdWVzLzEwOT4uXG4gICAgaWYgKFxuICAgICAgcmVzdWx0ICYmXG4gICAgICAhbG9jYXRpb24uZW5kVGFnICYmXG4gICAgICB0YWlsICYmXG4gICAgICB0YWlsLnBvc2l0aW9uICYmXG4gICAgICB0YWlsLnBvc2l0aW9uLmVuZFxuICAgICkge1xuICAgICAgcmVzdWx0LmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIHRhaWwucG9zaXRpb24uZW5kKVxuICAgIH1cblxuICAgIGlmIChzdGF0ZS52ZXJib3NlKSB7XG4gICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFBvc2l0aW9uIHwgdW5kZWZpbmVkPn0gKi9cbiAgICAgIGNvbnN0IHByb3BzID0ge31cbiAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICAgICAgbGV0IGtleVxuXG4gICAgICBpZiAobG9jYXRpb24uYXR0cnMpIHtcbiAgICAgICAgZm9yIChrZXkgaW4gbG9jYXRpb24uYXR0cnMpIHtcbiAgICAgICAgICBpZiAob3duLmNhbGwobG9jYXRpb24uYXR0cnMsIGtleSkpIHtcbiAgICAgICAgICAgIHByb3BzW2ZpbmQoc3RhdGUuc2NoZW1hLCBrZXkpLnByb3BlcnR5XSA9IHBvc2l0aW9uKFxuICAgICAgICAgICAgICBsb2NhdGlvbi5hdHRyc1trZXldXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChsb2NhdGlvbi5zdGFydFRhZywgJ2Egc3RhcnQgdGFnIHNob3VsZCBleGlzdCcpXG4gICAgICBjb25zdCBvcGVuaW5nID0gcG9zaXRpb24obG9jYXRpb24uc3RhcnRUYWcpXG4gICAgICBjb25zdCBjbG9zaW5nID0gbG9jYXRpb24uZW5kVGFnID8gcG9zaXRpb24obG9jYXRpb24uZW5kVGFnKSA6IHVuZGVmaW5lZFxuICAgICAgLyoqIEB0eXBlIHtFbGVtZW50RGF0YVsncG9zaXRpb24nXX0gKi9cbiAgICAgIGNvbnN0IGRhdGEgPSB7b3BlbmluZ31cbiAgICAgIGlmIChjbG9zaW5nKSBkYXRhLmNsb3NpbmcgPSBjbG9zaW5nXG4gICAgICBkYXRhLnByb3BlcnRpZXMgPSBwcm9wc1xuXG4gICAgICBub2RlLmRhdGEgPSB7cG9zaXRpb246IGRhdGF9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIFR1cm4gYSBwNSBsb2NhdGlvbiBpbnRvIGEgcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIHtQNUxvY2F0aW9ufSBsb2NcbiAqICAgTG9jYXRpb24uXG4gKiBAcmV0dXJucyB7UG9zaXRpb24gfCB1bmRlZmluZWR9XG4gKiAgIFBvc2l0aW9uIG9yIG5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIHBvc2l0aW9uKGxvYykge1xuICBjb25zdCBzdGFydCA9IHBvaW50KHtcbiAgICBsaW5lOiBsb2Muc3RhcnRMaW5lLFxuICAgIGNvbHVtbjogbG9jLnN0YXJ0Q29sLFxuICAgIG9mZnNldDogbG9jLnN0YXJ0T2Zmc2V0XG4gIH0pXG4gIGNvbnN0IGVuZCA9IHBvaW50KHtcbiAgICBsaW5lOiBsb2MuZW5kTGluZSxcbiAgICBjb2x1bW46IGxvYy5lbmRDb2wsXG4gICAgb2Zmc2V0OiBsb2MuZW5kT2Zmc2V0XG4gIH0pXG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogd2UgZG8gdXNlIGB1bmRlZmluZWRgIGZvciBwb2ludHMgaWYgb25lIG9yIHRoZSBvdGhlclxuICAvLyBleGlzdHMuXG4gIHJldHVybiBzdGFydCB8fCBlbmQgPyB7c3RhcnQsIGVuZH0gOiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBGaWx0ZXIgb3V0IGludmFsaWQgcG9pbnRzLlxuICpcbiAqIEBwYXJhbSB7UG9pbnR9IHBvaW50XG4gKiAgIFBvaW50IHdpdGggcG90ZW50aWFsbHkgYHVuZGVmaW5lZGAgdmFsdWVzLlxuICogQHJldHVybnMge1BvaW50IHwgdW5kZWZpbmVkfVxuICogICBQb2ludCBvciBub3RoaW5nLlxuICovXG5mdW5jdGlvbiBwb2ludChwb2ludCkge1xuICByZXR1cm4gcG9pbnQubGluZSAmJiBwb2ludC5jb2x1bW4gPyBwb2ludCA6IHVuZGVmaW5lZFxufVxuIiwgImNvbnN0IFVOREVGSU5FRF9DT0RFX1BPSU5UUyA9IG5ldyBTZXQoW1xuICAgIDY1NTM0LCA2NTUzNSwgMTMxMDcwLCAxMzEwNzEsIDE5NjYwNiwgMTk2NjA3LCAyNjIxNDIsIDI2MjE0MywgMzI3Njc4LCAzMjc2NzksIDM5MzIxNCxcbiAgICAzOTMyMTUsIDQ1ODc1MCwgNDU4NzUxLCA1MjQyODYsIDUyNDI4NywgNTg5ODIyLCA1ODk4MjMsIDY1NTM1OCwgNjU1MzU5LCA3MjA4OTQsXG4gICAgNzIwODk1LCA3ODY0MzAsIDc4NjQzMSwgODUxOTY2LCA4NTE5NjcsIDkxNzUwMiwgOTE3NTAzLCA5ODMwMzgsIDk4MzAzOSwgMTA0ODU3NCxcbiAgICAxMDQ4NTc1LCAxMTE0MTEwLCAxMTE0MTExLFxuXSk7XG5leHBvcnQgY29uc3QgUkVQTEFDRU1FTlRfQ0hBUkFDVEVSID0gJ1xcdUZGRkQnO1xuZXhwb3J0IHZhciBDT0RFX1BPSU5UUztcbihmdW5jdGlvbiAoQ09ERV9QT0lOVFMpIHtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkVPRlwiXSA9IC0xXSA9IFwiRU9GXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJOVUxMXCJdID0gMF0gPSBcIk5VTExcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIlRBQlVMQVRJT05cIl0gPSA5XSA9IFwiVEFCVUxBVElPTlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiQ0FSUklBR0VfUkVUVVJOXCJdID0gMTNdID0gXCJDQVJSSUFHRV9SRVRVUk5cIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkxJTkVfRkVFRFwiXSA9IDEwXSA9IFwiTElORV9GRUVEXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJGT1JNX0ZFRURcIl0gPSAxMl0gPSBcIkZPUk1fRkVFRFwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiU1BBQ0VcIl0gPSAzMl0gPSBcIlNQQUNFXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJFWENMQU1BVElPTl9NQVJLXCJdID0gMzNdID0gXCJFWENMQU1BVElPTl9NQVJLXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJRVU9UQVRJT05fTUFSS1wiXSA9IDM0XSA9IFwiUVVPVEFUSU9OX01BUktcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIk5VTUJFUl9TSUdOXCJdID0gMzVdID0gXCJOVU1CRVJfU0lHTlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiQU1QRVJTQU5EXCJdID0gMzhdID0gXCJBTVBFUlNBTkRcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkFQT1NUUk9QSEVcIl0gPSAzOV0gPSBcIkFQT1NUUk9QSEVcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkhZUEhFTl9NSU5VU1wiXSA9IDQ1XSA9IFwiSFlQSEVOX01JTlVTXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJTT0xJRFVTXCJdID0gNDddID0gXCJTT0xJRFVTXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJESUdJVF8wXCJdID0gNDhdID0gXCJESUdJVF8wXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJESUdJVF85XCJdID0gNTddID0gXCJESUdJVF85XCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJTRU1JQ09MT05cIl0gPSA1OV0gPSBcIlNFTUlDT0xPTlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTEVTU19USEFOX1NJR05cIl0gPSA2MF0gPSBcIkxFU1NfVEhBTl9TSUdOXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJFUVVBTFNfU0lHTlwiXSA9IDYxXSA9IFwiRVFVQUxTX1NJR05cIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkdSRUFURVJfVEhBTl9TSUdOXCJdID0gNjJdID0gXCJHUkVBVEVSX1RIQU5fU0lHTlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiUVVFU1RJT05fTUFSS1wiXSA9IDYzXSA9IFwiUVVFU1RJT05fTUFSS1wiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTEFUSU5fQ0FQSVRBTF9BXCJdID0gNjVdID0gXCJMQVRJTl9DQVBJVEFMX0FcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkxBVElOX0NBUElUQUxfRlwiXSA9IDcwXSA9IFwiTEFUSU5fQ0FQSVRBTF9GXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJMQVRJTl9DQVBJVEFMX1hcIl0gPSA4OF0gPSBcIkxBVElOX0NBUElUQUxfWFwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTEFUSU5fQ0FQSVRBTF9aXCJdID0gOTBdID0gXCJMQVRJTl9DQVBJVEFMX1pcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIlJJR0hUX1NRVUFSRV9CUkFDS0VUXCJdID0gOTNdID0gXCJSSUdIVF9TUVVBUkVfQlJBQ0tFVFwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiR1JBVkVfQUNDRU5UXCJdID0gOTZdID0gXCJHUkFWRV9BQ0NFTlRcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkxBVElOX1NNQUxMX0FcIl0gPSA5N10gPSBcIkxBVElOX1NNQUxMX0FcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkxBVElOX1NNQUxMX0ZcIl0gPSAxMDJdID0gXCJMQVRJTl9TTUFMTF9GXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJMQVRJTl9TTUFMTF9YXCJdID0gMTIwXSA9IFwiTEFUSU5fU01BTExfWFwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTEFUSU5fU01BTExfWlwiXSA9IDEyMl0gPSBcIkxBVElOX1NNQUxMX1pcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIlJFUExBQ0VNRU5UX0NIQVJBQ1RFUlwiXSA9IDY1NTMzXSA9IFwiUkVQTEFDRU1FTlRfQ0hBUkFDVEVSXCI7XG59KShDT0RFX1BPSU5UUyA9IENPREVfUE9JTlRTIHx8IChDT0RFX1BPSU5UUyA9IHt9KSk7XG5leHBvcnQgY29uc3QgU0VRVUVOQ0VTID0ge1xuICAgIERBU0hfREFTSDogJy0tJyxcbiAgICBDREFUQV9TVEFSVDogJ1tDREFUQVsnLFxuICAgIERPQ1RZUEU6ICdkb2N0eXBlJyxcbiAgICBTQ1JJUFQ6ICdzY3JpcHQnLFxuICAgIFBVQkxJQzogJ3B1YmxpYycsXG4gICAgU1lTVEVNOiAnc3lzdGVtJyxcbn07XG4vL1N1cnJvZ2F0ZXNcbmV4cG9ydCBmdW5jdGlvbiBpc1N1cnJvZ2F0ZShjcCkge1xuICAgIHJldHVybiBjcCA+PSA1NTI5NiAmJiBjcCA8PSA1NzM0Mztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N1cnJvZ2F0ZVBhaXIoY3ApIHtcbiAgICByZXR1cm4gY3AgPj0gNTYzMjAgJiYgY3AgPD0gNTczNDM7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3Vycm9nYXRlUGFpckNvZGVQb2ludChjcDEsIGNwMikge1xuICAgIHJldHVybiAoY3AxIC0gNTUyOTYpICogMTAyNCArIDkyMTYgKyBjcDI7XG59XG4vL05PVEU6IGV4Y2x1ZGluZyBOVUxMIGFuZCBBU0NJSSB3aGl0ZXNwYWNlXG5leHBvcnQgZnVuY3Rpb24gaXNDb250cm9sQ29kZVBvaW50KGNwKSB7XG4gICAgcmV0dXJuICgoY3AgIT09IDB4MjAgJiYgY3AgIT09IDB4MGEgJiYgY3AgIT09IDB4MGQgJiYgY3AgIT09IDB4MDkgJiYgY3AgIT09IDB4MGMgJiYgY3AgPj0gMHgwMSAmJiBjcCA8PSAweDFmKSB8fFxuICAgICAgICAoY3AgPj0gMHg3ZiAmJiBjcCA8PSAweDlmKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNVbmRlZmluZWRDb2RlUG9pbnQoY3ApIHtcbiAgICByZXR1cm4gKGNwID49IDY0OTc2ICYmIGNwIDw9IDY1MDA3KSB8fCBVTkRFRklORURfQ09ERV9QT0lOVFMuaGFzKGNwKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVuaWNvZGUuanMubWFwIiwgImV4cG9ydCB2YXIgRVJSO1xuKGZ1bmN0aW9uIChFUlIpIHtcbiAgICBFUlJbXCJjb250cm9sQ2hhcmFjdGVySW5JbnB1dFN0cmVhbVwiXSA9IFwiY29udHJvbC1jaGFyYWN0ZXItaW4taW5wdXQtc3RyZWFtXCI7XG4gICAgRVJSW1wibm9uY2hhcmFjdGVySW5JbnB1dFN0cmVhbVwiXSA9IFwibm9uY2hhcmFjdGVyLWluLWlucHV0LXN0cmVhbVwiO1xuICAgIEVSUltcInN1cnJvZ2F0ZUluSW5wdXRTdHJlYW1cIl0gPSBcInN1cnJvZ2F0ZS1pbi1pbnB1dC1zdHJlYW1cIjtcbiAgICBFUlJbXCJub25Wb2lkSHRtbEVsZW1lbnRTdGFydFRhZ1dpdGhUcmFpbGluZ1NvbGlkdXNcIl0gPSBcIm5vbi12b2lkLWh0bWwtZWxlbWVudC1zdGFydC10YWctd2l0aC10cmFpbGluZy1zb2xpZHVzXCI7XG4gICAgRVJSW1wiZW5kVGFnV2l0aEF0dHJpYnV0ZXNcIl0gPSBcImVuZC10YWctd2l0aC1hdHRyaWJ1dGVzXCI7XG4gICAgRVJSW1wiZW5kVGFnV2l0aFRyYWlsaW5nU29saWR1c1wiXSA9IFwiZW5kLXRhZy13aXRoLXRyYWlsaW5nLXNvbGlkdXNcIjtcbiAgICBFUlJbXCJ1bmV4cGVjdGVkU29saWR1c0luVGFnXCJdID0gXCJ1bmV4cGVjdGVkLXNvbGlkdXMtaW4tdGFnXCI7XG4gICAgRVJSW1widW5leHBlY3RlZE51bGxDaGFyYWN0ZXJcIl0gPSBcInVuZXhwZWN0ZWQtbnVsbC1jaGFyYWN0ZXJcIjtcbiAgICBFUlJbXCJ1bmV4cGVjdGVkUXVlc3Rpb25NYXJrSW5zdGVhZE9mVGFnTmFtZVwiXSA9IFwidW5leHBlY3RlZC1xdWVzdGlvbi1tYXJrLWluc3RlYWQtb2YtdGFnLW5hbWVcIjtcbiAgICBFUlJbXCJpbnZhbGlkRmlyc3RDaGFyYWN0ZXJPZlRhZ05hbWVcIl0gPSBcImludmFsaWQtZmlyc3QtY2hhcmFjdGVyLW9mLXRhZy1uYW1lXCI7XG4gICAgRVJSW1widW5leHBlY3RlZEVxdWFsc1NpZ25CZWZvcmVBdHRyaWJ1dGVOYW1lXCJdID0gXCJ1bmV4cGVjdGVkLWVxdWFscy1zaWduLWJlZm9yZS1hdHRyaWJ1dGUtbmFtZVwiO1xuICAgIEVSUltcIm1pc3NpbmdFbmRUYWdOYW1lXCJdID0gXCJtaXNzaW5nLWVuZC10YWctbmFtZVwiO1xuICAgIEVSUltcInVuZXhwZWN0ZWRDaGFyYWN0ZXJJbkF0dHJpYnV0ZU5hbWVcIl0gPSBcInVuZXhwZWN0ZWQtY2hhcmFjdGVyLWluLWF0dHJpYnV0ZS1uYW1lXCI7XG4gICAgRVJSW1widW5rbm93bk5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlXCJdID0gXCJ1bmtub3duLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VcIjtcbiAgICBFUlJbXCJtaXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2VcIl0gPSBcIm1pc3Npbmctc2VtaWNvbG9uLWFmdGVyLWNoYXJhY3Rlci1yZWZlcmVuY2VcIjtcbiAgICBFUlJbXCJ1bmV4cGVjdGVkQ2hhcmFjdGVyQWZ0ZXJEb2N0eXBlU3lzdGVtSWRlbnRpZmllclwiXSA9IFwidW5leHBlY3RlZC1jaGFyYWN0ZXItYWZ0ZXItZG9jdHlwZS1zeXN0ZW0taWRlbnRpZmllclwiO1xuICAgIEVSUltcInVuZXhwZWN0ZWRDaGFyYWN0ZXJJblVucXVvdGVkQXR0cmlidXRlVmFsdWVcIl0gPSBcInVuZXhwZWN0ZWQtY2hhcmFjdGVyLWluLXVucXVvdGVkLWF0dHJpYnV0ZS12YWx1ZVwiO1xuICAgIEVSUltcImVvZkJlZm9yZVRhZ05hbWVcIl0gPSBcImVvZi1iZWZvcmUtdGFnLW5hbWVcIjtcbiAgICBFUlJbXCJlb2ZJblRhZ1wiXSA9IFwiZW9mLWluLXRhZ1wiO1xuICAgIEVSUltcIm1pc3NpbmdBdHRyaWJ1dGVWYWx1ZVwiXSA9IFwibWlzc2luZy1hdHRyaWJ1dGUtdmFsdWVcIjtcbiAgICBFUlJbXCJtaXNzaW5nV2hpdGVzcGFjZUJldHdlZW5BdHRyaWJ1dGVzXCJdID0gXCJtaXNzaW5nLXdoaXRlc3BhY2UtYmV0d2Vlbi1hdHRyaWJ1dGVzXCI7XG4gICAgRVJSW1wibWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkXCJdID0gXCJtaXNzaW5nLXdoaXRlc3BhY2UtYWZ0ZXItZG9jdHlwZS1wdWJsaWMta2V5d29yZFwiO1xuICAgIEVSUltcIm1pc3NpbmdXaGl0ZXNwYWNlQmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVyc1wiXSA9IFwibWlzc2luZy13aGl0ZXNwYWNlLWJldHdlZW4tZG9jdHlwZS1wdWJsaWMtYW5kLXN5c3RlbS1pZGVudGlmaWVyc1wiO1xuICAgIEVSUltcIm1pc3NpbmdXaGl0ZXNwYWNlQWZ0ZXJEb2N0eXBlU3lzdGVtS2V5d29yZFwiXSA9IFwibWlzc2luZy13aGl0ZXNwYWNlLWFmdGVyLWRvY3R5cGUtc3lzdGVtLWtleXdvcmRcIjtcbiAgICBFUlJbXCJtaXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllclwiXSA9IFwibWlzc2luZy1xdW90ZS1iZWZvcmUtZG9jdHlwZS1wdWJsaWMtaWRlbnRpZmllclwiO1xuICAgIEVSUltcIm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyXCJdID0gXCJtaXNzaW5nLXF1b3RlLWJlZm9yZS1kb2N0eXBlLXN5c3RlbS1pZGVudGlmaWVyXCI7XG4gICAgRVJSW1wibWlzc2luZ0RvY3R5cGVQdWJsaWNJZGVudGlmaWVyXCJdID0gXCJtaXNzaW5nLWRvY3R5cGUtcHVibGljLWlkZW50aWZpZXJcIjtcbiAgICBFUlJbXCJtaXNzaW5nRG9jdHlwZVN5c3RlbUlkZW50aWZpZXJcIl0gPSBcIm1pc3NpbmctZG9jdHlwZS1zeXN0ZW0taWRlbnRpZmllclwiO1xuICAgIEVSUltcImFicnVwdERvY3R5cGVQdWJsaWNJZGVudGlmaWVyXCJdID0gXCJhYnJ1cHQtZG9jdHlwZS1wdWJsaWMtaWRlbnRpZmllclwiO1xuICAgIEVSUltcImFicnVwdERvY3R5cGVTeXN0ZW1JZGVudGlmaWVyXCJdID0gXCJhYnJ1cHQtZG9jdHlwZS1zeXN0ZW0taWRlbnRpZmllclwiO1xuICAgIEVSUltcImNkYXRhSW5IdG1sQ29udGVudFwiXSA9IFwiY2RhdGEtaW4taHRtbC1jb250ZW50XCI7XG4gICAgRVJSW1wiaW5jb3JyZWN0bHlPcGVuZWRDb21tZW50XCJdID0gXCJpbmNvcnJlY3RseS1vcGVuZWQtY29tbWVudFwiO1xuICAgIEVSUltcImVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dFwiXSA9IFwiZW9mLWluLXNjcmlwdC1odG1sLWNvbW1lbnQtbGlrZS10ZXh0XCI7XG4gICAgRVJSW1wiZW9mSW5Eb2N0eXBlXCJdID0gXCJlb2YtaW4tZG9jdHlwZVwiO1xuICAgIEVSUltcIm5lc3RlZENvbW1lbnRcIl0gPSBcIm5lc3RlZC1jb21tZW50XCI7XG4gICAgRVJSW1wiYWJydXB0Q2xvc2luZ09mRW1wdHlDb21tZW50XCJdID0gXCJhYnJ1cHQtY2xvc2luZy1vZi1lbXB0eS1jb21tZW50XCI7XG4gICAgRVJSW1wiZW9mSW5Db21tZW50XCJdID0gXCJlb2YtaW4tY29tbWVudFwiO1xuICAgIEVSUltcImluY29ycmVjdGx5Q2xvc2VkQ29tbWVudFwiXSA9IFwiaW5jb3JyZWN0bHktY2xvc2VkLWNvbW1lbnRcIjtcbiAgICBFUlJbXCJlb2ZJbkNkYXRhXCJdID0gXCJlb2YtaW4tY2RhdGFcIjtcbiAgICBFUlJbXCJhYnNlbmNlT2ZEaWdpdHNJbk51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2VcIl0gPSBcImFic2VuY2Utb2YtZGlnaXRzLWluLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZVwiO1xuICAgIEVSUltcIm51bGxDaGFyYWN0ZXJSZWZlcmVuY2VcIl0gPSBcIm51bGwtY2hhcmFjdGVyLXJlZmVyZW5jZVwiO1xuICAgIEVSUltcInN1cnJvZ2F0ZUNoYXJhY3RlclJlZmVyZW5jZVwiXSA9IFwic3Vycm9nYXRlLWNoYXJhY3Rlci1yZWZlcmVuY2VcIjtcbiAgICBFUlJbXCJjaGFyYWN0ZXJSZWZlcmVuY2VPdXRzaWRlVW5pY29kZVJhbmdlXCJdID0gXCJjaGFyYWN0ZXItcmVmZXJlbmNlLW91dHNpZGUtdW5pY29kZS1yYW5nZVwiO1xuICAgIEVSUltcImNvbnRyb2xDaGFyYWN0ZXJSZWZlcmVuY2VcIl0gPSBcImNvbnRyb2wtY2hhcmFjdGVyLXJlZmVyZW5jZVwiO1xuICAgIEVSUltcIm5vbmNoYXJhY3RlckNoYXJhY3RlclJlZmVyZW5jZVwiXSA9IFwibm9uY2hhcmFjdGVyLWNoYXJhY3Rlci1yZWZlcmVuY2VcIjtcbiAgICBFUlJbXCJtaXNzaW5nV2hpdGVzcGFjZUJlZm9yZURvY3R5cGVOYW1lXCJdID0gXCJtaXNzaW5nLXdoaXRlc3BhY2UtYmVmb3JlLWRvY3R5cGUtbmFtZVwiO1xuICAgIEVSUltcIm1pc3NpbmdEb2N0eXBlTmFtZVwiXSA9IFwibWlzc2luZy1kb2N0eXBlLW5hbWVcIjtcbiAgICBFUlJbXCJpbnZhbGlkQ2hhcmFjdGVyU2VxdWVuY2VBZnRlckRvY3R5cGVOYW1lXCJdID0gXCJpbnZhbGlkLWNoYXJhY3Rlci1zZXF1ZW5jZS1hZnRlci1kb2N0eXBlLW5hbWVcIjtcbiAgICBFUlJbXCJkdXBsaWNhdGVBdHRyaWJ1dGVcIl0gPSBcImR1cGxpY2F0ZS1hdHRyaWJ1dGVcIjtcbiAgICBFUlJbXCJub25Db25mb3JtaW5nRG9jdHlwZVwiXSA9IFwibm9uLWNvbmZvcm1pbmctZG9jdHlwZVwiO1xuICAgIEVSUltcIm1pc3NpbmdEb2N0eXBlXCJdID0gXCJtaXNzaW5nLWRvY3R5cGVcIjtcbiAgICBFUlJbXCJtaXNwbGFjZWREb2N0eXBlXCJdID0gXCJtaXNwbGFjZWQtZG9jdHlwZVwiO1xuICAgIEVSUltcImVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50XCJdID0gXCJlbmQtdGFnLXdpdGhvdXQtbWF0Y2hpbmctb3Blbi1lbGVtZW50XCI7XG4gICAgRVJSW1wiY2xvc2luZ09mRWxlbWVudFdpdGhPcGVuQ2hpbGRFbGVtZW50c1wiXSA9IFwiY2xvc2luZy1vZi1lbGVtZW50LXdpdGgtb3Blbi1jaGlsZC1lbGVtZW50c1wiO1xuICAgIEVSUltcImRpc2FsbG93ZWRDb250ZW50SW5Ob3NjcmlwdEluSGVhZFwiXSA9IFwiZGlzYWxsb3dlZC1jb250ZW50LWluLW5vc2NyaXB0LWluLWhlYWRcIjtcbiAgICBFUlJbXCJvcGVuRWxlbWVudHNMZWZ0QWZ0ZXJFb2ZcIl0gPSBcIm9wZW4tZWxlbWVudHMtbGVmdC1hZnRlci1lb2ZcIjtcbiAgICBFUlJbXCJhYmFuZG9uZWRIZWFkRWxlbWVudENoaWxkXCJdID0gXCJhYmFuZG9uZWQtaGVhZC1lbGVtZW50LWNoaWxkXCI7XG4gICAgRVJSW1wibWlzcGxhY2VkU3RhcnRUYWdGb3JIZWFkRWxlbWVudFwiXSA9IFwibWlzcGxhY2VkLXN0YXJ0LXRhZy1mb3ItaGVhZC1lbGVtZW50XCI7XG4gICAgRVJSW1wibmVzdGVkTm9zY3JpcHRJbkhlYWRcIl0gPSBcIm5lc3RlZC1ub3NjcmlwdC1pbi1oZWFkXCI7XG4gICAgRVJSW1wiZW9mSW5FbGVtZW50VGhhdENhbkNvbnRhaW5Pbmx5VGV4dFwiXSA9IFwiZW9mLWluLWVsZW1lbnQtdGhhdC1jYW4tY29udGFpbi1vbmx5LXRleHRcIjtcbn0pKEVSUiA9IEVSUiB8fCAoRVJSID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9yLWNvZGVzLmpzLm1hcCIsICJpbXBvcnQgeyBDT0RFX1BPSU5UUyBhcyAkLCBnZXRTdXJyb2dhdGVQYWlyQ29kZVBvaW50LCBpc0NvbnRyb2xDb2RlUG9pbnQsIGlzU3Vycm9nYXRlLCBpc1N1cnJvZ2F0ZVBhaXIsIGlzVW5kZWZpbmVkQ29kZVBvaW50LCB9IGZyb20gJy4uL2NvbW1vbi91bmljb2RlLmpzJztcbmltcG9ydCB7IEVSUiB9IGZyb20gJy4uL2NvbW1vbi9lcnJvci1jb2Rlcy5qcyc7XG4vL0NvbnN0XG5jb25zdCBERUZBVUxUX0JVRkZFUl9XQVRFUkxJTkUgPSAxIDw8IDE2O1xuLy9QcmVwcm9jZXNzb3Jcbi8vTk9URTogSFRNTCBpbnB1dCBwcmVwcm9jZXNzaW5nXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW0pXG5leHBvcnQgY2xhc3MgUHJlcHJvY2Vzc29yIHtcbiAgICBjb25zdHJ1Y3RvcihoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgIHRoaXMuaHRtbCA9ICcnO1xuICAgICAgICB0aGlzLnBvcyA9IC0xO1xuICAgICAgICAvLyBOT1RFOiBJbml0aWFsIGBsYXN0R2FwUG9zYCBpcyAtMiwgdG8gZW5zdXJlIGBjb2xgIG9uIGluaXRpYWxpc2F0aW9uIGlzIDBcbiAgICAgICAgdGhpcy5sYXN0R2FwUG9zID0gLTI7XG4gICAgICAgIHRoaXMuZ2FwU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sYXN0Q2h1bmtXcml0dGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW5kT2ZDaHVua0hpdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1ZmZlcldhdGVybGluZSA9IERFRkFVTFRfQlVGRkVSX1dBVEVSTElORTtcbiAgICAgICAgdGhpcy5pc0VvbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxpbmVTdGFydFBvcyA9IDA7XG4gICAgICAgIHRoaXMuZHJvcHBlZEJ1ZmZlclNpemUgPSAwO1xuICAgICAgICB0aGlzLmxpbmUgPSAxO1xuICAgICAgICAvL05PVEU6IGF2b2lkIHJlcG9ydGluZyBlcnJvcnMgdHdpY2Ugb24gYWR2YW5jZS9yZXRyZWF0XG4gICAgICAgIHRoaXMubGFzdEVyck9mZnNldCA9IC0xO1xuICAgIH1cbiAgICAvKiogVGhlIGNvbHVtbiBvbiB0aGUgY3VycmVudCBsaW5lLiBJZiB3ZSBqdXN0IHNhdyBhIGdhcCAoZWcuIGEgc3Vycm9nYXRlIHBhaXIpLCByZXR1cm4gdGhlIGluZGV4IGJlZm9yZS4gKi9cbiAgICBnZXQgY29sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3MgLSB0aGlzLmxpbmVTdGFydFBvcyArIE51bWJlcih0aGlzLmxhc3RHYXBQb3MgIT09IHRoaXMucG9zKTtcbiAgICB9XG4gICAgZ2V0IG9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcHBlZEJ1ZmZlclNpemUgKyB0aGlzLnBvcztcbiAgICB9XG4gICAgZ2V0RXJyb3IoY29kZSkge1xuICAgICAgICBjb25zdCB7IGxpbmUsIGNvbCwgb2Zmc2V0IH0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgIHN0YXJ0TGluZTogbGluZSxcbiAgICAgICAgICAgIGVuZExpbmU6IGxpbmUsXG4gICAgICAgICAgICBzdGFydENvbDogY29sLFxuICAgICAgICAgICAgZW5kQ29sOiBjb2wsXG4gICAgICAgICAgICBzdGFydE9mZnNldDogb2Zmc2V0LFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9lcnIoY29kZSkge1xuICAgICAgICBpZiAodGhpcy5oYW5kbGVyLm9uUGFyc2VFcnJvciAmJiB0aGlzLmxhc3RFcnJPZmZzZXQgIT09IHRoaXMub2Zmc2V0KSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RFcnJPZmZzZXQgPSB0aGlzLm9mZnNldDtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlci5vblBhcnNlRXJyb3IodGhpcy5nZXRFcnJvcihjb2RlKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2FkZEdhcCgpIHtcbiAgICAgICAgdGhpcy5nYXBTdGFjay5wdXNoKHRoaXMubGFzdEdhcFBvcyk7XG4gICAgICAgIHRoaXMubGFzdEdhcFBvcyA9IHRoaXMucG9zO1xuICAgIH1cbiAgICBfcHJvY2Vzc1N1cnJvZ2F0ZShjcCkge1xuICAgICAgICAvL05PVEU6IHRyeSB0byBwZWVrIGEgc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgaWYgKHRoaXMucG9zICE9PSB0aGlzLmh0bWwubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dENwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MgKyAxKTtcbiAgICAgICAgICAgIGlmIChpc1N1cnJvZ2F0ZVBhaXIobmV4dENwKSkge1xuICAgICAgICAgICAgICAgIC8vTk9URTogd2UgaGF2ZSBhIHN1cnJvZ2F0ZSBwYWlyLiBQZWVrIHBhaXIgY2hhcmFjdGVyIGFuZCByZWNhbGN1bGF0ZSBjb2RlIHBvaW50LlxuICAgICAgICAgICAgICAgIHRoaXMucG9zKys7XG4gICAgICAgICAgICAgICAgLy9OT1RFOiBhZGQgYSBnYXAgdGhhdCBzaG91bGQgYmUgYXZvaWRlZCBkdXJpbmcgcmV0cmVhdFxuICAgICAgICAgICAgICAgIHRoaXMuX2FkZEdhcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRTdXJyb2dhdGVQYWlyQ29kZVBvaW50KGNwLCBuZXh0Q3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vTk9URTogd2UgYXJlIGF0IHRoZSBlbmQgb2YgYSBjaHVuaywgdGhlcmVmb3JlIHdlIGNhbid0IGluZmVyIHRoZSBzdXJyb2dhdGUgcGFpciB5ZXQuXG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLmxhc3RDaHVua1dyaXR0ZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZW5kT2ZDaHVua0hpdCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gJC5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgLy9OT1RFOiBpc29sYXRlZCBzdXJyb2dhdGVcbiAgICAgICAgdGhpcy5fZXJyKEVSUi5zdXJyb2dhdGVJbklucHV0U3RyZWFtKTtcbiAgICAgICAgcmV0dXJuIGNwO1xuICAgIH1cbiAgICB3aWxsRHJvcFBhcnNlZENodW5rKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3MgPiB0aGlzLmJ1ZmZlcldhdGVybGluZTtcbiAgICB9XG4gICAgZHJvcFBhcnNlZENodW5rKCkge1xuICAgICAgICBpZiAodGhpcy53aWxsRHJvcFBhcnNlZENodW5rKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaHRtbCA9IHRoaXMuaHRtbC5zdWJzdHJpbmcodGhpcy5wb3MpO1xuICAgICAgICAgICAgdGhpcy5saW5lU3RhcnRQb3MgLT0gdGhpcy5wb3M7XG4gICAgICAgICAgICB0aGlzLmRyb3BwZWRCdWZmZXJTaXplICs9IHRoaXMucG9zO1xuICAgICAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICAgICAgdGhpcy5sYXN0R2FwUG9zID0gLTI7XG4gICAgICAgICAgICB0aGlzLmdhcFN0YWNrLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgd3JpdGUoY2h1bmssIGlzTGFzdENodW5rKSB7XG4gICAgICAgIGlmICh0aGlzLmh0bWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5odG1sICs9IGNodW5rO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5odG1sID0gY2h1bms7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbmRPZkNodW5rSGl0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGFzdENodW5rV3JpdHRlbiA9IGlzTGFzdENodW5rO1xuICAgIH1cbiAgICBpbnNlcnRIdG1sQXRDdXJyZW50UG9zKGNodW5rKSB7XG4gICAgICAgIHRoaXMuaHRtbCA9IHRoaXMuaHRtbC5zdWJzdHJpbmcoMCwgdGhpcy5wb3MgKyAxKSArIGNodW5rICsgdGhpcy5odG1sLnN1YnN0cmluZyh0aGlzLnBvcyArIDEpO1xuICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSBmYWxzZTtcbiAgICB9XG4gICAgc3RhcnRzV2l0aChwYXR0ZXJuLCBjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIG91ciBidWZmZXIgaGFzIGVub3VnaCBjaGFyYWN0ZXJzXG4gICAgICAgIGlmICh0aGlzLnBvcyArIHBhdHRlcm4ubGVuZ3RoID4gdGhpcy5odG1sLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbmRPZkNodW5rSGl0ID0gIXRoaXMubGFzdENodW5rV3JpdHRlbjtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHRtbC5zdGFydHNXaXRoKHBhdHRlcm4sIHRoaXMucG9zKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MgKyBpKSB8IDB4MjA7XG4gICAgICAgICAgICBpZiAoY3AgIT09IHBhdHRlcm4uY2hhckNvZGVBdChpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcGVlayhvZmZzZXQpIHtcbiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5wb3MgKyBvZmZzZXQ7XG4gICAgICAgIGlmIChwb3MgPj0gdGhpcy5odG1sLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbmRPZkNodW5rSGl0ID0gIXRoaXMubGFzdENodW5rV3JpdHRlbjtcbiAgICAgICAgICAgIHJldHVybiAkLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2RlID0gdGhpcy5odG1sLmNoYXJDb2RlQXQocG9zKTtcbiAgICAgICAgcmV0dXJuIGNvZGUgPT09ICQuQ0FSUklBR0VfUkVUVVJOID8gJC5MSU5FX0ZFRUQgOiBjb2RlO1xuICAgIH1cbiAgICBhZHZhbmNlKCkge1xuICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICAvL05PVEU6IExGIHNob3VsZCBiZSBpbiB0aGUgbGFzdCBjb2x1bW4gb2YgdGhlIGxpbmVcbiAgICAgICAgaWYgKHRoaXMuaXNFb2wpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFb2wgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubGluZSsrO1xuICAgICAgICAgICAgdGhpcy5saW5lU3RhcnRQb3MgPSB0aGlzLnBvcztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5odG1sLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lbmRPZkNodW5rSGl0ID0gIXRoaXMubGFzdENodW5rV3JpdHRlbjtcbiAgICAgICAgICAgIHJldHVybiAkLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3AgPSB0aGlzLmh0bWwuY2hhckNvZGVBdCh0aGlzLnBvcyk7XG4gICAgICAgIC8vTk9URTogYWxsIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gKENSKSBjaGFyYWN0ZXJzIG11c3QgYmUgY29udmVydGVkIHRvIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXJzXG4gICAgICAgIGlmIChjcCA9PT0gJC5DQVJSSUFHRV9SRVRVUk4pIHtcbiAgICAgICAgICAgIHRoaXMuaXNFb2wgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuICQuTElORV9GRUVEO1xuICAgICAgICB9XG4gICAgICAgIC8vTk9URTogYW55IFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXJzIHRoYXQgaW1tZWRpYXRlbHkgZm9sbG93IGEgVSswMDBEIENBUlJJQUdFIFJFVFVSTiAoQ1IpIGNoYXJhY3RlclxuICAgICAgICAvL211c3QgYmUgaWdub3JlZC5cbiAgICAgICAgaWYgKGNwID09PSAkLkxJTkVfRkVFRCkge1xuICAgICAgICAgICAgdGhpcy5pc0VvbCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5za2lwTmV4dE5ld0xpbmUpIHtcbiAgICAgICAgICAgICAgICAvLyBgbGluZWAgd2lsbCBiZSBidW1wZWQgYWdhaW4gaW4gdGhlIHJlY3Vyc2l2ZSBjYWxsLlxuICAgICAgICAgICAgICAgIHRoaXMubGluZS0tO1xuICAgICAgICAgICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWRkR2FwKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgIGlmIChpc1N1cnJvZ2F0ZShjcCkpIHtcbiAgICAgICAgICAgIGNwID0gdGhpcy5fcHJvY2Vzc1N1cnJvZ2F0ZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgLy9PUFRJTUlaQVRJT046IGZpcnN0IGNoZWNrIGlmIGNvZGUgcG9pbnQgaXMgaW4gdGhlIGNvbW1vbiBhbGxvd2VkXG4gICAgICAgIC8vcmFuZ2UgKEFTQ0lJIGFscGhhbnVtZXJpYywgd2hpdGVzcGFjZXMsIGJpZyBjaHVuayBvZiBCTVApXG4gICAgICAgIC8vYmVmb3JlIGdvaW5nIGludG8gZGV0YWlsZWQgcGVyZm9ybWFuY2UgY29zdCB2YWxpZGF0aW9uLlxuICAgICAgICBjb25zdCBpc0NvbW1vblZhbGlkUmFuZ2UgPSB0aGlzLmhhbmRsZXIub25QYXJzZUVycm9yID09PSBudWxsIHx8XG4gICAgICAgICAgICAoY3AgPiAweDFmICYmIGNwIDwgMHg3ZikgfHxcbiAgICAgICAgICAgIGNwID09PSAkLkxJTkVfRkVFRCB8fFxuICAgICAgICAgICAgY3AgPT09ICQuQ0FSUklBR0VfUkVUVVJOIHx8XG4gICAgICAgICAgICAoY3AgPiAweDlmICYmIGNwIDwgNjQ5NzYpO1xuICAgICAgICBpZiAoIWlzQ29tbW9uVmFsaWRSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tGb3JQcm9ibGVtYXRpY0NoYXJhY3RlcnMoY3ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcDtcbiAgICB9XG4gICAgX2NoZWNrRm9yUHJvYmxlbWF0aWNDaGFyYWN0ZXJzKGNwKSB7XG4gICAgICAgIGlmIChpc0NvbnRyb2xDb2RlUG9pbnQoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmNvbnRyb2xDaGFyYWN0ZXJJbklucHV0U3RyZWFtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1VuZGVmaW5lZENvZGVQb2ludChjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIubm9uY2hhcmFjdGVySW5JbnB1dFN0cmVhbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0cmVhdChjb3VudCkge1xuICAgICAgICB0aGlzLnBvcyAtPSBjb3VudDtcbiAgICAgICAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5sYXN0R2FwUG9zKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RHYXBQb3MgPSB0aGlzLmdhcFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgdGhpcy5wb3MtLTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRW9sID0gZmFsc2U7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHJlcHJvY2Vzc29yLmpzLm1hcCIsICJleHBvcnQgdmFyIFRva2VuVHlwZTtcbihmdW5jdGlvbiAoVG9rZW5UeXBlKSB7XG4gICAgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIkNIQVJBQ1RFUlwiXSA9IDBdID0gXCJDSEFSQUNURVJcIjtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiTlVMTF9DSEFSQUNURVJcIl0gPSAxXSA9IFwiTlVMTF9DSEFSQUNURVJcIjtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiV0hJVEVTUEFDRV9DSEFSQUNURVJcIl0gPSAyXSA9IFwiV0hJVEVTUEFDRV9DSEFSQUNURVJcIjtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiU1RBUlRfVEFHXCJdID0gM10gPSBcIlNUQVJUX1RBR1wiO1xuICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJFTkRfVEFHXCJdID0gNF0gPSBcIkVORF9UQUdcIjtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiQ09NTUVOVFwiXSA9IDVdID0gXCJDT01NRU5UXCI7XG4gICAgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIkRPQ1RZUEVcIl0gPSA2XSA9IFwiRE9DVFlQRVwiO1xuICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJFT0ZcIl0gPSA3XSA9IFwiRU9GXCI7XG4gICAgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIkhJQkVSTkFUSU9OXCJdID0gOF0gPSBcIkhJQkVSTkFUSU9OXCI7XG59KShUb2tlblR5cGUgPSBUb2tlblR5cGUgfHwgKFRva2VuVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW5BdHRyKHRva2VuLCBhdHRyTmFtZSkge1xuICAgIGZvciAobGV0IGkgPSB0b2tlbi5hdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAodG9rZW4uYXR0cnNbaV0ubmFtZSA9PT0gYXR0ck5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbi5hdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRva2VuLmpzLm1hcCIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICIvKiogQWxsIHZhbGlkIG5hbWVzcGFjZXMgaW4gSFRNTC4gKi9cbmV4cG9ydCB2YXIgTlM7XG4oZnVuY3Rpb24gKE5TKSB7XG4gICAgTlNbXCJIVE1MXCJdID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG4gICAgTlNbXCJNQVRITUxcIl0gPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIjtcbiAgICBOU1tcIlNWR1wiXSA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICBOU1tcIlhMSU5LXCJdID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI7XG4gICAgTlNbXCJYTUxcIl0gPSBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiO1xuICAgIE5TW1wiWE1MTlNcIl0gPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCI7XG59KShOUyA9IE5TIHx8IChOUyA9IHt9KSk7XG5leHBvcnQgdmFyIEFUVFJTO1xuKGZ1bmN0aW9uIChBVFRSUykge1xuICAgIEFUVFJTW1wiVFlQRVwiXSA9IFwidHlwZVwiO1xuICAgIEFUVFJTW1wiQUNUSU9OXCJdID0gXCJhY3Rpb25cIjtcbiAgICBBVFRSU1tcIkVOQ09ESU5HXCJdID0gXCJlbmNvZGluZ1wiO1xuICAgIEFUVFJTW1wiUFJPTVBUXCJdID0gXCJwcm9tcHRcIjtcbiAgICBBVFRSU1tcIk5BTUVcIl0gPSBcIm5hbWVcIjtcbiAgICBBVFRSU1tcIkNPTE9SXCJdID0gXCJjb2xvclwiO1xuICAgIEFUVFJTW1wiRkFDRVwiXSA9IFwiZmFjZVwiO1xuICAgIEFUVFJTW1wiU0laRVwiXSA9IFwic2l6ZVwiO1xufSkoQVRUUlMgPSBBVFRSUyB8fCAoQVRUUlMgPSB7fSkpO1xuLyoqXG4gKiBUaGUgbW9kZSBvZiB0aGUgZG9jdW1lbnQuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWRvY3VtZW50LWxpbWl0ZWQtcXVpcmtzfVxuICovXG5leHBvcnQgdmFyIERPQ1VNRU5UX01PREU7XG4oZnVuY3Rpb24gKERPQ1VNRU5UX01PREUpIHtcbiAgICBET0NVTUVOVF9NT0RFW1wiTk9fUVVJUktTXCJdID0gXCJuby1xdWlya3NcIjtcbiAgICBET0NVTUVOVF9NT0RFW1wiUVVJUktTXCJdID0gXCJxdWlya3NcIjtcbiAgICBET0NVTUVOVF9NT0RFW1wiTElNSVRFRF9RVUlSS1NcIl0gPSBcImxpbWl0ZWQtcXVpcmtzXCI7XG59KShET0NVTUVOVF9NT0RFID0gRE9DVU1FTlRfTU9ERSB8fCAoRE9DVU1FTlRfTU9ERSA9IHt9KSk7XG5leHBvcnQgdmFyIFRBR19OQU1FUztcbihmdW5jdGlvbiAoVEFHX05BTUVTKSB7XG4gICAgVEFHX05BTUVTW1wiQVwiXSA9IFwiYVwiO1xuICAgIFRBR19OQU1FU1tcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgICBUQUdfTkFNRVNbXCJBTk5PVEFUSU9OX1hNTFwiXSA9IFwiYW5ub3RhdGlvbi14bWxcIjtcbiAgICBUQUdfTkFNRVNbXCJBUFBMRVRcIl0gPSBcImFwcGxldFwiO1xuICAgIFRBR19OQU1FU1tcIkFSRUFcIl0gPSBcImFyZWFcIjtcbiAgICBUQUdfTkFNRVNbXCJBUlRJQ0xFXCJdID0gXCJhcnRpY2xlXCI7XG4gICAgVEFHX05BTUVTW1wiQVNJREVcIl0gPSBcImFzaWRlXCI7XG4gICAgVEFHX05BTUVTW1wiQlwiXSA9IFwiYlwiO1xuICAgIFRBR19OQU1FU1tcIkJBU0VcIl0gPSBcImJhc2VcIjtcbiAgICBUQUdfTkFNRVNbXCJCQVNFRk9OVFwiXSA9IFwiYmFzZWZvbnRcIjtcbiAgICBUQUdfTkFNRVNbXCJCR1NPVU5EXCJdID0gXCJiZ3NvdW5kXCI7XG4gICAgVEFHX05BTUVTW1wiQklHXCJdID0gXCJiaWdcIjtcbiAgICBUQUdfTkFNRVNbXCJCTE9DS1FVT1RFXCJdID0gXCJibG9ja3F1b3RlXCI7XG4gICAgVEFHX05BTUVTW1wiQk9EWVwiXSA9IFwiYm9keVwiO1xuICAgIFRBR19OQU1FU1tcIkJSXCJdID0gXCJiclwiO1xuICAgIFRBR19OQU1FU1tcIkJVVFRPTlwiXSA9IFwiYnV0dG9uXCI7XG4gICAgVEFHX05BTUVTW1wiQ0FQVElPTlwiXSA9IFwiY2FwdGlvblwiO1xuICAgIFRBR19OQU1FU1tcIkNFTlRFUlwiXSA9IFwiY2VudGVyXCI7XG4gICAgVEFHX05BTUVTW1wiQ09ERVwiXSA9IFwiY29kZVwiO1xuICAgIFRBR19OQU1FU1tcIkNPTFwiXSA9IFwiY29sXCI7XG4gICAgVEFHX05BTUVTW1wiQ09MR1JPVVBcIl0gPSBcImNvbGdyb3VwXCI7XG4gICAgVEFHX05BTUVTW1wiRERcIl0gPSBcImRkXCI7XG4gICAgVEFHX05BTUVTW1wiREVTQ1wiXSA9IFwiZGVzY1wiO1xuICAgIFRBR19OQU1FU1tcIkRFVEFJTFNcIl0gPSBcImRldGFpbHNcIjtcbiAgICBUQUdfTkFNRVNbXCJESUFMT0dcIl0gPSBcImRpYWxvZ1wiO1xuICAgIFRBR19OQU1FU1tcIkRJUlwiXSA9IFwiZGlyXCI7XG4gICAgVEFHX05BTUVTW1wiRElWXCJdID0gXCJkaXZcIjtcbiAgICBUQUdfTkFNRVNbXCJETFwiXSA9IFwiZGxcIjtcbiAgICBUQUdfTkFNRVNbXCJEVFwiXSA9IFwiZHRcIjtcbiAgICBUQUdfTkFNRVNbXCJFTVwiXSA9IFwiZW1cIjtcbiAgICBUQUdfTkFNRVNbXCJFTUJFRFwiXSA9IFwiZW1iZWRcIjtcbiAgICBUQUdfTkFNRVNbXCJGSUVMRFNFVFwiXSA9IFwiZmllbGRzZXRcIjtcbiAgICBUQUdfTkFNRVNbXCJGSUdDQVBUSU9OXCJdID0gXCJmaWdjYXB0aW9uXCI7XG4gICAgVEFHX05BTUVTW1wiRklHVVJFXCJdID0gXCJmaWd1cmVcIjtcbiAgICBUQUdfTkFNRVNbXCJGT05UXCJdID0gXCJmb250XCI7XG4gICAgVEFHX05BTUVTW1wiRk9PVEVSXCJdID0gXCJmb290ZXJcIjtcbiAgICBUQUdfTkFNRVNbXCJGT1JFSUdOX09CSkVDVFwiXSA9IFwiZm9yZWlnbk9iamVjdFwiO1xuICAgIFRBR19OQU1FU1tcIkZPUk1cIl0gPSBcImZvcm1cIjtcbiAgICBUQUdfTkFNRVNbXCJGUkFNRVwiXSA9IFwiZnJhbWVcIjtcbiAgICBUQUdfTkFNRVNbXCJGUkFNRVNFVFwiXSA9IFwiZnJhbWVzZXRcIjtcbiAgICBUQUdfTkFNRVNbXCJIMVwiXSA9IFwiaDFcIjtcbiAgICBUQUdfTkFNRVNbXCJIMlwiXSA9IFwiaDJcIjtcbiAgICBUQUdfTkFNRVNbXCJIM1wiXSA9IFwiaDNcIjtcbiAgICBUQUdfTkFNRVNbXCJINFwiXSA9IFwiaDRcIjtcbiAgICBUQUdfTkFNRVNbXCJINVwiXSA9IFwiaDVcIjtcbiAgICBUQUdfTkFNRVNbXCJINlwiXSA9IFwiaDZcIjtcbiAgICBUQUdfTkFNRVNbXCJIRUFEXCJdID0gXCJoZWFkXCI7XG4gICAgVEFHX05BTUVTW1wiSEVBREVSXCJdID0gXCJoZWFkZXJcIjtcbiAgICBUQUdfTkFNRVNbXCJIR1JPVVBcIl0gPSBcImhncm91cFwiO1xuICAgIFRBR19OQU1FU1tcIkhSXCJdID0gXCJoclwiO1xuICAgIFRBR19OQU1FU1tcIkhUTUxcIl0gPSBcImh0bWxcIjtcbiAgICBUQUdfTkFNRVNbXCJJXCJdID0gXCJpXCI7XG4gICAgVEFHX05BTUVTW1wiSU1HXCJdID0gXCJpbWdcIjtcbiAgICBUQUdfTkFNRVNbXCJJTUFHRVwiXSA9IFwiaW1hZ2VcIjtcbiAgICBUQUdfTkFNRVNbXCJJTlBVVFwiXSA9IFwiaW5wdXRcIjtcbiAgICBUQUdfTkFNRVNbXCJJRlJBTUVcIl0gPSBcImlmcmFtZVwiO1xuICAgIFRBR19OQU1FU1tcIktFWUdFTlwiXSA9IFwia2V5Z2VuXCI7XG4gICAgVEFHX05BTUVTW1wiTEFCRUxcIl0gPSBcImxhYmVsXCI7XG4gICAgVEFHX05BTUVTW1wiTElcIl0gPSBcImxpXCI7XG4gICAgVEFHX05BTUVTW1wiTElOS1wiXSA9IFwibGlua1wiO1xuICAgIFRBR19OQU1FU1tcIkxJU1RJTkdcIl0gPSBcImxpc3RpbmdcIjtcbiAgICBUQUdfTkFNRVNbXCJNQUlOXCJdID0gXCJtYWluXCI7XG4gICAgVEFHX05BTUVTW1wiTUFMSUdOTUFSS1wiXSA9IFwibWFsaWdubWFya1wiO1xuICAgIFRBR19OQU1FU1tcIk1BUlFVRUVcIl0gPSBcIm1hcnF1ZWVcIjtcbiAgICBUQUdfTkFNRVNbXCJNQVRIXCJdID0gXCJtYXRoXCI7XG4gICAgVEFHX05BTUVTW1wiTUVOVVwiXSA9IFwibWVudVwiO1xuICAgIFRBR19OQU1FU1tcIk1FVEFcIl0gPSBcIm1ldGFcIjtcbiAgICBUQUdfTkFNRVNbXCJNR0xZUEhcIl0gPSBcIm1nbHlwaFwiO1xuICAgIFRBR19OQU1FU1tcIk1JXCJdID0gXCJtaVwiO1xuICAgIFRBR19OQU1FU1tcIk1PXCJdID0gXCJtb1wiO1xuICAgIFRBR19OQU1FU1tcIk1OXCJdID0gXCJtblwiO1xuICAgIFRBR19OQU1FU1tcIk1TXCJdID0gXCJtc1wiO1xuICAgIFRBR19OQU1FU1tcIk1URVhUXCJdID0gXCJtdGV4dFwiO1xuICAgIFRBR19OQU1FU1tcIk5BVlwiXSA9IFwibmF2XCI7XG4gICAgVEFHX05BTUVTW1wiTk9CUlwiXSA9IFwibm9iclwiO1xuICAgIFRBR19OQU1FU1tcIk5PRlJBTUVTXCJdID0gXCJub2ZyYW1lc1wiO1xuICAgIFRBR19OQU1FU1tcIk5PRU1CRURcIl0gPSBcIm5vZW1iZWRcIjtcbiAgICBUQUdfTkFNRVNbXCJOT1NDUklQVFwiXSA9IFwibm9zY3JpcHRcIjtcbiAgICBUQUdfTkFNRVNbXCJPQkpFQ1RcIl0gPSBcIm9iamVjdFwiO1xuICAgIFRBR19OQU1FU1tcIk9MXCJdID0gXCJvbFwiO1xuICAgIFRBR19OQU1FU1tcIk9QVEdST1VQXCJdID0gXCJvcHRncm91cFwiO1xuICAgIFRBR19OQU1FU1tcIk9QVElPTlwiXSA9IFwib3B0aW9uXCI7XG4gICAgVEFHX05BTUVTW1wiUFwiXSA9IFwicFwiO1xuICAgIFRBR19OQU1FU1tcIlBBUkFNXCJdID0gXCJwYXJhbVwiO1xuICAgIFRBR19OQU1FU1tcIlBMQUlOVEVYVFwiXSA9IFwicGxhaW50ZXh0XCI7XG4gICAgVEFHX05BTUVTW1wiUFJFXCJdID0gXCJwcmVcIjtcbiAgICBUQUdfTkFNRVNbXCJSQlwiXSA9IFwicmJcIjtcbiAgICBUQUdfTkFNRVNbXCJSUFwiXSA9IFwicnBcIjtcbiAgICBUQUdfTkFNRVNbXCJSVFwiXSA9IFwicnRcIjtcbiAgICBUQUdfTkFNRVNbXCJSVENcIl0gPSBcInJ0Y1wiO1xuICAgIFRBR19OQU1FU1tcIlJVQllcIl0gPSBcInJ1YnlcIjtcbiAgICBUQUdfTkFNRVNbXCJTXCJdID0gXCJzXCI7XG4gICAgVEFHX05BTUVTW1wiU0NSSVBUXCJdID0gXCJzY3JpcHRcIjtcbiAgICBUQUdfTkFNRVNbXCJTRUNUSU9OXCJdID0gXCJzZWN0aW9uXCI7XG4gICAgVEFHX05BTUVTW1wiU0VMRUNUXCJdID0gXCJzZWxlY3RcIjtcbiAgICBUQUdfTkFNRVNbXCJTT1VSQ0VcIl0gPSBcInNvdXJjZVwiO1xuICAgIFRBR19OQU1FU1tcIlNNQUxMXCJdID0gXCJzbWFsbFwiO1xuICAgIFRBR19OQU1FU1tcIlNQQU5cIl0gPSBcInNwYW5cIjtcbiAgICBUQUdfTkFNRVNbXCJTVFJJS0VcIl0gPSBcInN0cmlrZVwiO1xuICAgIFRBR19OQU1FU1tcIlNUUk9OR1wiXSA9IFwic3Ryb25nXCI7XG4gICAgVEFHX05BTUVTW1wiU1RZTEVcIl0gPSBcInN0eWxlXCI7XG4gICAgVEFHX05BTUVTW1wiU1VCXCJdID0gXCJzdWJcIjtcbiAgICBUQUdfTkFNRVNbXCJTVU1NQVJZXCJdID0gXCJzdW1tYXJ5XCI7XG4gICAgVEFHX05BTUVTW1wiU1VQXCJdID0gXCJzdXBcIjtcbiAgICBUQUdfTkFNRVNbXCJUQUJMRVwiXSA9IFwidGFibGVcIjtcbiAgICBUQUdfTkFNRVNbXCJUQk9EWVwiXSA9IFwidGJvZHlcIjtcbiAgICBUQUdfTkFNRVNbXCJURU1QTEFURVwiXSA9IFwidGVtcGxhdGVcIjtcbiAgICBUQUdfTkFNRVNbXCJURVhUQVJFQVwiXSA9IFwidGV4dGFyZWFcIjtcbiAgICBUQUdfTkFNRVNbXCJURk9PVFwiXSA9IFwidGZvb3RcIjtcbiAgICBUQUdfTkFNRVNbXCJURFwiXSA9IFwidGRcIjtcbiAgICBUQUdfTkFNRVNbXCJUSFwiXSA9IFwidGhcIjtcbiAgICBUQUdfTkFNRVNbXCJUSEVBRFwiXSA9IFwidGhlYWRcIjtcbiAgICBUQUdfTkFNRVNbXCJUSVRMRVwiXSA9IFwidGl0bGVcIjtcbiAgICBUQUdfTkFNRVNbXCJUUlwiXSA9IFwidHJcIjtcbiAgICBUQUdfTkFNRVNbXCJUUkFDS1wiXSA9IFwidHJhY2tcIjtcbiAgICBUQUdfTkFNRVNbXCJUVFwiXSA9IFwidHRcIjtcbiAgICBUQUdfTkFNRVNbXCJVXCJdID0gXCJ1XCI7XG4gICAgVEFHX05BTUVTW1wiVUxcIl0gPSBcInVsXCI7XG4gICAgVEFHX05BTUVTW1wiU1ZHXCJdID0gXCJzdmdcIjtcbiAgICBUQUdfTkFNRVNbXCJWQVJcIl0gPSBcInZhclwiO1xuICAgIFRBR19OQU1FU1tcIldCUlwiXSA9IFwid2JyXCI7XG4gICAgVEFHX05BTUVTW1wiWE1QXCJdID0gXCJ4bXBcIjtcbn0pKFRBR19OQU1FUyA9IFRBR19OQU1FUyB8fCAoVEFHX05BTUVTID0ge30pKTtcbi8qKlxuICogVGFnIElEcyBhcmUgbnVtZXJpYyBJRHMgZm9yIGtub3duIHRhZyBuYW1lcy5cbiAqXG4gKiBXZSB1c2UgdGFnIElEcyB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0YWcgbmFtZSBjb21wYXJpc29ucy5cbiAqL1xuZXhwb3J0IHZhciBUQUdfSUQ7XG4oZnVuY3Rpb24gKFRBR19JRCkge1xuICAgIFRBR19JRFtUQUdfSURbXCJVTktOT1dOXCJdID0gMF0gPSBcIlVOS05PV05cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQVwiXSA9IDFdID0gXCJBXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkFERFJFU1NcIl0gPSAyXSA9IFwiQUREUkVTU1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJBTk5PVEFUSU9OX1hNTFwiXSA9IDNdID0gXCJBTk5PVEFUSU9OX1hNTFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJBUFBMRVRcIl0gPSA0XSA9IFwiQVBQTEVUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkFSRUFcIl0gPSA1XSA9IFwiQVJFQVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJBUlRJQ0xFXCJdID0gNl0gPSBcIkFSVElDTEVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQVNJREVcIl0gPSA3XSA9IFwiQVNJREVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQlwiXSA9IDhdID0gXCJCXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkJBU0VcIl0gPSA5XSA9IFwiQkFTRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJCQVNFRk9OVFwiXSA9IDEwXSA9IFwiQkFTRUZPTlRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQkdTT1VORFwiXSA9IDExXSA9IFwiQkdTT1VORFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJCSUdcIl0gPSAxMl0gPSBcIkJJR1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJCTE9DS1FVT1RFXCJdID0gMTNdID0gXCJCTE9DS1FVT1RFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkJPRFlcIl0gPSAxNF0gPSBcIkJPRFlcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQlJcIl0gPSAxNV0gPSBcIkJSXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkJVVFRPTlwiXSA9IDE2XSA9IFwiQlVUVE9OXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkNBUFRJT05cIl0gPSAxN10gPSBcIkNBUFRJT05cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQ0VOVEVSXCJdID0gMThdID0gXCJDRU5URVJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQ09ERVwiXSA9IDE5XSA9IFwiQ09ERVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJDT0xcIl0gPSAyMF0gPSBcIkNPTFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJDT0xHUk9VUFwiXSA9IDIxXSA9IFwiQ09MR1JPVVBcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRERcIl0gPSAyMl0gPSBcIkREXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkRFU0NcIl0gPSAyM10gPSBcIkRFU0NcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiREVUQUlMU1wiXSA9IDI0XSA9IFwiREVUQUlMU1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJESUFMT0dcIl0gPSAyNV0gPSBcIkRJQUxPR1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJESVJcIl0gPSAyNl0gPSBcIkRJUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJESVZcIl0gPSAyN10gPSBcIkRJVlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJETFwiXSA9IDI4XSA9IFwiRExcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRFRcIl0gPSAyOV0gPSBcIkRUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkVNXCJdID0gMzBdID0gXCJFTVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJFTUJFRFwiXSA9IDMxXSA9IFwiRU1CRURcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRklFTERTRVRcIl0gPSAzMl0gPSBcIkZJRUxEU0VUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkZJR0NBUFRJT05cIl0gPSAzM10gPSBcIkZJR0NBUFRJT05cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRklHVVJFXCJdID0gMzRdID0gXCJGSUdVUkVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRk9OVFwiXSA9IDM1XSA9IFwiRk9OVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJGT09URVJcIl0gPSAzNl0gPSBcIkZPT1RFUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJGT1JFSUdOX09CSkVDVFwiXSA9IDM3XSA9IFwiRk9SRUlHTl9PQkpFQ1RcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRk9STVwiXSA9IDM4XSA9IFwiRk9STVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJGUkFNRVwiXSA9IDM5XSA9IFwiRlJBTUVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRlJBTUVTRVRcIl0gPSA0MF0gPSBcIkZSQU1FU0VUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkgxXCJdID0gNDFdID0gXCJIMVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJIMlwiXSA9IDQyXSA9IFwiSDJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSDNcIl0gPSA0M10gPSBcIkgzXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkg0XCJdID0gNDRdID0gXCJINFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJINVwiXSA9IDQ1XSA9IFwiSDVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSDZcIl0gPSA0Nl0gPSBcIkg2XCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkhFQURcIl0gPSA0N10gPSBcIkhFQURcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSEVBREVSXCJdID0gNDhdID0gXCJIRUFERVJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSEdST1VQXCJdID0gNDldID0gXCJIR1JPVVBcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSFJcIl0gPSA1MF0gPSBcIkhSXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkhUTUxcIl0gPSA1MV0gPSBcIkhUTUxcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSVwiXSA9IDUyXSA9IFwiSVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJJTUdcIl0gPSA1M10gPSBcIklNR1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJJTUFHRVwiXSA9IDU0XSA9IFwiSU1BR0VcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSU5QVVRcIl0gPSA1NV0gPSBcIklOUFVUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIklGUkFNRVwiXSA9IDU2XSA9IFwiSUZSQU1FXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIktFWUdFTlwiXSA9IDU3XSA9IFwiS0VZR0VOXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkxBQkVMXCJdID0gNThdID0gXCJMQUJFTFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJMSVwiXSA9IDU5XSA9IFwiTElcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTElOS1wiXSA9IDYwXSA9IFwiTElOS1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJMSVNUSU5HXCJdID0gNjFdID0gXCJMSVNUSU5HXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1BSU5cIl0gPSA2Ml0gPSBcIk1BSU5cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTUFMSUdOTUFSS1wiXSA9IDYzXSA9IFwiTUFMSUdOTUFSS1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNQVJRVUVFXCJdID0gNjRdID0gXCJNQVJRVUVFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1BVEhcIl0gPSA2NV0gPSBcIk1BVEhcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTUVOVVwiXSA9IDY2XSA9IFwiTUVOVVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNRVRBXCJdID0gNjddID0gXCJNRVRBXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1HTFlQSFwiXSA9IDY4XSA9IFwiTUdMWVBIXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1JXCJdID0gNjldID0gXCJNSVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNT1wiXSA9IDcwXSA9IFwiTU9cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTU5cIl0gPSA3MV0gPSBcIk1OXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1TXCJdID0gNzJdID0gXCJNU1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNVEVYVFwiXSA9IDczXSA9IFwiTVRFWFRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTkFWXCJdID0gNzRdID0gXCJOQVZcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTk9CUlwiXSA9IDc1XSA9IFwiTk9CUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJOT0ZSQU1FU1wiXSA9IDc2XSA9IFwiTk9GUkFNRVNcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTk9FTUJFRFwiXSA9IDc3XSA9IFwiTk9FTUJFRFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJOT1NDUklQVFwiXSA9IDc4XSA9IFwiTk9TQ1JJUFRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiT0JKRUNUXCJdID0gNzldID0gXCJPQkpFQ1RcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiT0xcIl0gPSA4MF0gPSBcIk9MXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk9QVEdST1VQXCJdID0gODFdID0gXCJPUFRHUk9VUFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJPUFRJT05cIl0gPSA4Ml0gPSBcIk9QVElPTlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJQXCJdID0gODNdID0gXCJQXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlBBUkFNXCJdID0gODRdID0gXCJQQVJBTVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJQTEFJTlRFWFRcIl0gPSA4NV0gPSBcIlBMQUlOVEVYVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJQUkVcIl0gPSA4Nl0gPSBcIlBSRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJSQlwiXSA9IDg3XSA9IFwiUkJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiUlBcIl0gPSA4OF0gPSBcIlJQXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlJUXCJdID0gODldID0gXCJSVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJSVENcIl0gPSA5MF0gPSBcIlJUQ1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJSVUJZXCJdID0gOTFdID0gXCJSVUJZXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlNcIl0gPSA5Ml0gPSBcIlNcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU0NSSVBUXCJdID0gOTNdID0gXCJTQ1JJUFRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU0VDVElPTlwiXSA9IDk0XSA9IFwiU0VDVElPTlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTRUxFQ1RcIl0gPSA5NV0gPSBcIlNFTEVDVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTT1VSQ0VcIl0gPSA5Nl0gPSBcIlNPVVJDRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTTUFMTFwiXSA9IDk3XSA9IFwiU01BTExcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1BBTlwiXSA9IDk4XSA9IFwiU1BBTlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTVFJJS0VcIl0gPSA5OV0gPSBcIlNUUklLRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTVFJPTkdcIl0gPSAxMDBdID0gXCJTVFJPTkdcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1RZTEVcIl0gPSAxMDFdID0gXCJTVFlMRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTVUJcIl0gPSAxMDJdID0gXCJTVUJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1VNTUFSWVwiXSA9IDEwM10gPSBcIlNVTU1BUllcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1VQXCJdID0gMTA0XSA9IFwiU1VQXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRBQkxFXCJdID0gMTA1XSA9IFwiVEFCTEVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVEJPRFlcIl0gPSAxMDZdID0gXCJUQk9EWVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJURU1QTEFURVwiXSA9IDEwN10gPSBcIlRFTVBMQVRFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRFWFRBUkVBXCJdID0gMTA4XSA9IFwiVEVYVEFSRUFcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVEZPT1RcIl0gPSAxMDldID0gXCJURk9PVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJURFwiXSA9IDExMF0gPSBcIlREXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRIXCJdID0gMTExXSA9IFwiVEhcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVEhFQURcIl0gPSAxMTJdID0gXCJUSEVBRFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJUSVRMRVwiXSA9IDExM10gPSBcIlRJVExFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRSXCJdID0gMTE0XSA9IFwiVFJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVFJBQ0tcIl0gPSAxMTVdID0gXCJUUkFDS1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJUVFwiXSA9IDExNl0gPSBcIlRUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlVcIl0gPSAxMTddID0gXCJVXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlVMXCJdID0gMTE4XSA9IFwiVUxcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1ZHXCJdID0gMTE5XSA9IFwiU1ZHXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlZBUlwiXSA9IDEyMF0gPSBcIlZBUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJXQlJcIl0gPSAxMjFdID0gXCJXQlJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiWE1QXCJdID0gMTIyXSA9IFwiWE1QXCI7XG59KShUQUdfSUQgPSBUQUdfSUQgfHwgKFRBR19JRCA9IHt9KSk7XG5jb25zdCBUQUdfTkFNRV9UT19JRCA9IG5ldyBNYXAoW1xuICAgIFtUQUdfTkFNRVMuQSwgVEFHX0lELkFdLFxuICAgIFtUQUdfTkFNRVMuQUREUkVTUywgVEFHX0lELkFERFJFU1NdLFxuICAgIFtUQUdfTkFNRVMuQU5OT1RBVElPTl9YTUwsIFRBR19JRC5BTk5PVEFUSU9OX1hNTF0sXG4gICAgW1RBR19OQU1FUy5BUFBMRVQsIFRBR19JRC5BUFBMRVRdLFxuICAgIFtUQUdfTkFNRVMuQVJFQSwgVEFHX0lELkFSRUFdLFxuICAgIFtUQUdfTkFNRVMuQVJUSUNMRSwgVEFHX0lELkFSVElDTEVdLFxuICAgIFtUQUdfTkFNRVMuQVNJREUsIFRBR19JRC5BU0lERV0sXG4gICAgW1RBR19OQU1FUy5CLCBUQUdfSUQuQl0sXG4gICAgW1RBR19OQU1FUy5CQVNFLCBUQUdfSUQuQkFTRV0sXG4gICAgW1RBR19OQU1FUy5CQVNFRk9OVCwgVEFHX0lELkJBU0VGT05UXSxcbiAgICBbVEFHX05BTUVTLkJHU09VTkQsIFRBR19JRC5CR1NPVU5EXSxcbiAgICBbVEFHX05BTUVTLkJJRywgVEFHX0lELkJJR10sXG4gICAgW1RBR19OQU1FUy5CTE9DS1FVT1RFLCBUQUdfSUQuQkxPQ0tRVU9URV0sXG4gICAgW1RBR19OQU1FUy5CT0RZLCBUQUdfSUQuQk9EWV0sXG4gICAgW1RBR19OQU1FUy5CUiwgVEFHX0lELkJSXSxcbiAgICBbVEFHX05BTUVTLkJVVFRPTiwgVEFHX0lELkJVVFRPTl0sXG4gICAgW1RBR19OQU1FUy5DQVBUSU9OLCBUQUdfSUQuQ0FQVElPTl0sXG4gICAgW1RBR19OQU1FUy5DRU5URVIsIFRBR19JRC5DRU5URVJdLFxuICAgIFtUQUdfTkFNRVMuQ09ERSwgVEFHX0lELkNPREVdLFxuICAgIFtUQUdfTkFNRVMuQ09MLCBUQUdfSUQuQ09MXSxcbiAgICBbVEFHX05BTUVTLkNPTEdST1VQLCBUQUdfSUQuQ09MR1JPVVBdLFxuICAgIFtUQUdfTkFNRVMuREQsIFRBR19JRC5ERF0sXG4gICAgW1RBR19OQU1FUy5ERVNDLCBUQUdfSUQuREVTQ10sXG4gICAgW1RBR19OQU1FUy5ERVRBSUxTLCBUQUdfSUQuREVUQUlMU10sXG4gICAgW1RBR19OQU1FUy5ESUFMT0csIFRBR19JRC5ESUFMT0ddLFxuICAgIFtUQUdfTkFNRVMuRElSLCBUQUdfSUQuRElSXSxcbiAgICBbVEFHX05BTUVTLkRJViwgVEFHX0lELkRJVl0sXG4gICAgW1RBR19OQU1FUy5ETCwgVEFHX0lELkRMXSxcbiAgICBbVEFHX05BTUVTLkRULCBUQUdfSUQuRFRdLFxuICAgIFtUQUdfTkFNRVMuRU0sIFRBR19JRC5FTV0sXG4gICAgW1RBR19OQU1FUy5FTUJFRCwgVEFHX0lELkVNQkVEXSxcbiAgICBbVEFHX05BTUVTLkZJRUxEU0VULCBUQUdfSUQuRklFTERTRVRdLFxuICAgIFtUQUdfTkFNRVMuRklHQ0FQVElPTiwgVEFHX0lELkZJR0NBUFRJT05dLFxuICAgIFtUQUdfTkFNRVMuRklHVVJFLCBUQUdfSUQuRklHVVJFXSxcbiAgICBbVEFHX05BTUVTLkZPTlQsIFRBR19JRC5GT05UXSxcbiAgICBbVEFHX05BTUVTLkZPT1RFUiwgVEFHX0lELkZPT1RFUl0sXG4gICAgW1RBR19OQU1FUy5GT1JFSUdOX09CSkVDVCwgVEFHX0lELkZPUkVJR05fT0JKRUNUXSxcbiAgICBbVEFHX05BTUVTLkZPUk0sIFRBR19JRC5GT1JNXSxcbiAgICBbVEFHX05BTUVTLkZSQU1FLCBUQUdfSUQuRlJBTUVdLFxuICAgIFtUQUdfTkFNRVMuRlJBTUVTRVQsIFRBR19JRC5GUkFNRVNFVF0sXG4gICAgW1RBR19OQU1FUy5IMSwgVEFHX0lELkgxXSxcbiAgICBbVEFHX05BTUVTLkgyLCBUQUdfSUQuSDJdLFxuICAgIFtUQUdfTkFNRVMuSDMsIFRBR19JRC5IM10sXG4gICAgW1RBR19OQU1FUy5INCwgVEFHX0lELkg0XSxcbiAgICBbVEFHX05BTUVTLkg1LCBUQUdfSUQuSDVdLFxuICAgIFtUQUdfTkFNRVMuSDYsIFRBR19JRC5INl0sXG4gICAgW1RBR19OQU1FUy5IRUFELCBUQUdfSUQuSEVBRF0sXG4gICAgW1RBR19OQU1FUy5IRUFERVIsIFRBR19JRC5IRUFERVJdLFxuICAgIFtUQUdfTkFNRVMuSEdST1VQLCBUQUdfSUQuSEdST1VQXSxcbiAgICBbVEFHX05BTUVTLkhSLCBUQUdfSUQuSFJdLFxuICAgIFtUQUdfTkFNRVMuSFRNTCwgVEFHX0lELkhUTUxdLFxuICAgIFtUQUdfTkFNRVMuSSwgVEFHX0lELkldLFxuICAgIFtUQUdfTkFNRVMuSU1HLCBUQUdfSUQuSU1HXSxcbiAgICBbVEFHX05BTUVTLklNQUdFLCBUQUdfSUQuSU1BR0VdLFxuICAgIFtUQUdfTkFNRVMuSU5QVVQsIFRBR19JRC5JTlBVVF0sXG4gICAgW1RBR19OQU1FUy5JRlJBTUUsIFRBR19JRC5JRlJBTUVdLFxuICAgIFtUQUdfTkFNRVMuS0VZR0VOLCBUQUdfSUQuS0VZR0VOXSxcbiAgICBbVEFHX05BTUVTLkxBQkVMLCBUQUdfSUQuTEFCRUxdLFxuICAgIFtUQUdfTkFNRVMuTEksIFRBR19JRC5MSV0sXG4gICAgW1RBR19OQU1FUy5MSU5LLCBUQUdfSUQuTElOS10sXG4gICAgW1RBR19OQU1FUy5MSVNUSU5HLCBUQUdfSUQuTElTVElOR10sXG4gICAgW1RBR19OQU1FUy5NQUlOLCBUQUdfSUQuTUFJTl0sXG4gICAgW1RBR19OQU1FUy5NQUxJR05NQVJLLCBUQUdfSUQuTUFMSUdOTUFSS10sXG4gICAgW1RBR19OQU1FUy5NQVJRVUVFLCBUQUdfSUQuTUFSUVVFRV0sXG4gICAgW1RBR19OQU1FUy5NQVRILCBUQUdfSUQuTUFUSF0sXG4gICAgW1RBR19OQU1FUy5NRU5VLCBUQUdfSUQuTUVOVV0sXG4gICAgW1RBR19OQU1FUy5NRVRBLCBUQUdfSUQuTUVUQV0sXG4gICAgW1RBR19OQU1FUy5NR0xZUEgsIFRBR19JRC5NR0xZUEhdLFxuICAgIFtUQUdfTkFNRVMuTUksIFRBR19JRC5NSV0sXG4gICAgW1RBR19OQU1FUy5NTywgVEFHX0lELk1PXSxcbiAgICBbVEFHX05BTUVTLk1OLCBUQUdfSUQuTU5dLFxuICAgIFtUQUdfTkFNRVMuTVMsIFRBR19JRC5NU10sXG4gICAgW1RBR19OQU1FUy5NVEVYVCwgVEFHX0lELk1URVhUXSxcbiAgICBbVEFHX05BTUVTLk5BViwgVEFHX0lELk5BVl0sXG4gICAgW1RBR19OQU1FUy5OT0JSLCBUQUdfSUQuTk9CUl0sXG4gICAgW1RBR19OQU1FUy5OT0ZSQU1FUywgVEFHX0lELk5PRlJBTUVTXSxcbiAgICBbVEFHX05BTUVTLk5PRU1CRUQsIFRBR19JRC5OT0VNQkVEXSxcbiAgICBbVEFHX05BTUVTLk5PU0NSSVBULCBUQUdfSUQuTk9TQ1JJUFRdLFxuICAgIFtUQUdfTkFNRVMuT0JKRUNULCBUQUdfSUQuT0JKRUNUXSxcbiAgICBbVEFHX05BTUVTLk9MLCBUQUdfSUQuT0xdLFxuICAgIFtUQUdfTkFNRVMuT1BUR1JPVVAsIFRBR19JRC5PUFRHUk9VUF0sXG4gICAgW1RBR19OQU1FUy5PUFRJT04sIFRBR19JRC5PUFRJT05dLFxuICAgIFtUQUdfTkFNRVMuUCwgVEFHX0lELlBdLFxuICAgIFtUQUdfTkFNRVMuUEFSQU0sIFRBR19JRC5QQVJBTV0sXG4gICAgW1RBR19OQU1FUy5QTEFJTlRFWFQsIFRBR19JRC5QTEFJTlRFWFRdLFxuICAgIFtUQUdfTkFNRVMuUFJFLCBUQUdfSUQuUFJFXSxcbiAgICBbVEFHX05BTUVTLlJCLCBUQUdfSUQuUkJdLFxuICAgIFtUQUdfTkFNRVMuUlAsIFRBR19JRC5SUF0sXG4gICAgW1RBR19OQU1FUy5SVCwgVEFHX0lELlJUXSxcbiAgICBbVEFHX05BTUVTLlJUQywgVEFHX0lELlJUQ10sXG4gICAgW1RBR19OQU1FUy5SVUJZLCBUQUdfSUQuUlVCWV0sXG4gICAgW1RBR19OQU1FUy5TLCBUQUdfSUQuU10sXG4gICAgW1RBR19OQU1FUy5TQ1JJUFQsIFRBR19JRC5TQ1JJUFRdLFxuICAgIFtUQUdfTkFNRVMuU0VDVElPTiwgVEFHX0lELlNFQ1RJT05dLFxuICAgIFtUQUdfTkFNRVMuU0VMRUNULCBUQUdfSUQuU0VMRUNUXSxcbiAgICBbVEFHX05BTUVTLlNPVVJDRSwgVEFHX0lELlNPVVJDRV0sXG4gICAgW1RBR19OQU1FUy5TTUFMTCwgVEFHX0lELlNNQUxMXSxcbiAgICBbVEFHX05BTUVTLlNQQU4sIFRBR19JRC5TUEFOXSxcbiAgICBbVEFHX05BTUVTLlNUUklLRSwgVEFHX0lELlNUUklLRV0sXG4gICAgW1RBR19OQU1FUy5TVFJPTkcsIFRBR19JRC5TVFJPTkddLFxuICAgIFtUQUdfTkFNRVMuU1RZTEUsIFRBR19JRC5TVFlMRV0sXG4gICAgW1RBR19OQU1FUy5TVUIsIFRBR19JRC5TVUJdLFxuICAgIFtUQUdfTkFNRVMuU1VNTUFSWSwgVEFHX0lELlNVTU1BUlldLFxuICAgIFtUQUdfTkFNRVMuU1VQLCBUQUdfSUQuU1VQXSxcbiAgICBbVEFHX05BTUVTLlRBQkxFLCBUQUdfSUQuVEFCTEVdLFxuICAgIFtUQUdfTkFNRVMuVEJPRFksIFRBR19JRC5UQk9EWV0sXG4gICAgW1RBR19OQU1FUy5URU1QTEFURSwgVEFHX0lELlRFTVBMQVRFXSxcbiAgICBbVEFHX05BTUVTLlRFWFRBUkVBLCBUQUdfSUQuVEVYVEFSRUFdLFxuICAgIFtUQUdfTkFNRVMuVEZPT1QsIFRBR19JRC5URk9PVF0sXG4gICAgW1RBR19OQU1FUy5URCwgVEFHX0lELlREXSxcbiAgICBbVEFHX05BTUVTLlRILCBUQUdfSUQuVEhdLFxuICAgIFtUQUdfTkFNRVMuVEhFQUQsIFRBR19JRC5USEVBRF0sXG4gICAgW1RBR19OQU1FUy5USVRMRSwgVEFHX0lELlRJVExFXSxcbiAgICBbVEFHX05BTUVTLlRSLCBUQUdfSUQuVFJdLFxuICAgIFtUQUdfTkFNRVMuVFJBQ0ssIFRBR19JRC5UUkFDS10sXG4gICAgW1RBR19OQU1FUy5UVCwgVEFHX0lELlRUXSxcbiAgICBbVEFHX05BTUVTLlUsIFRBR19JRC5VXSxcbiAgICBbVEFHX05BTUVTLlVMLCBUQUdfSUQuVUxdLFxuICAgIFtUQUdfTkFNRVMuU1ZHLCBUQUdfSUQuU1ZHXSxcbiAgICBbVEFHX05BTUVTLlZBUiwgVEFHX0lELlZBUl0sXG4gICAgW1RBR19OQU1FUy5XQlIsIFRBR19JRC5XQlJdLFxuICAgIFtUQUdfTkFNRVMuWE1QLCBUQUdfSUQuWE1QXSxcbl0pO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhZ0lEKHRhZ05hbWUpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IFRBR19OQU1FX1RPX0lELmdldCh0YWdOYW1lKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogVEFHX0lELlVOS05PV047XG59XG5jb25zdCAkID0gVEFHX0lEO1xuZXhwb3J0IGNvbnN0IFNQRUNJQUxfRUxFTUVOVFMgPSB7XG4gICAgW05TLkhUTUxdOiBuZXcgU2V0KFtcbiAgICAgICAgJC5BRERSRVNTLFxuICAgICAgICAkLkFQUExFVCxcbiAgICAgICAgJC5BUkVBLFxuICAgICAgICAkLkFSVElDTEUsXG4gICAgICAgICQuQVNJREUsXG4gICAgICAgICQuQkFTRSxcbiAgICAgICAgJC5CQVNFRk9OVCxcbiAgICAgICAgJC5CR1NPVU5ELFxuICAgICAgICAkLkJMT0NLUVVPVEUsXG4gICAgICAgICQuQk9EWSxcbiAgICAgICAgJC5CUixcbiAgICAgICAgJC5CVVRUT04sXG4gICAgICAgICQuQ0FQVElPTixcbiAgICAgICAgJC5DRU5URVIsXG4gICAgICAgICQuQ09MLFxuICAgICAgICAkLkNPTEdST1VQLFxuICAgICAgICAkLkRELFxuICAgICAgICAkLkRFVEFJTFMsXG4gICAgICAgICQuRElSLFxuICAgICAgICAkLkRJVixcbiAgICAgICAgJC5ETCxcbiAgICAgICAgJC5EVCxcbiAgICAgICAgJC5FTUJFRCxcbiAgICAgICAgJC5GSUVMRFNFVCxcbiAgICAgICAgJC5GSUdDQVBUSU9OLFxuICAgICAgICAkLkZJR1VSRSxcbiAgICAgICAgJC5GT09URVIsXG4gICAgICAgICQuRk9STSxcbiAgICAgICAgJC5GUkFNRSxcbiAgICAgICAgJC5GUkFNRVNFVCxcbiAgICAgICAgJC5IMSxcbiAgICAgICAgJC5IMixcbiAgICAgICAgJC5IMyxcbiAgICAgICAgJC5INCxcbiAgICAgICAgJC5INSxcbiAgICAgICAgJC5INixcbiAgICAgICAgJC5IRUFELFxuICAgICAgICAkLkhFQURFUixcbiAgICAgICAgJC5IR1JPVVAsXG4gICAgICAgICQuSFIsXG4gICAgICAgICQuSFRNTCxcbiAgICAgICAgJC5JRlJBTUUsXG4gICAgICAgICQuSU1HLFxuICAgICAgICAkLklOUFVULFxuICAgICAgICAkLkxJLFxuICAgICAgICAkLkxJTkssXG4gICAgICAgICQuTElTVElORyxcbiAgICAgICAgJC5NQUlOLFxuICAgICAgICAkLk1BUlFVRUUsXG4gICAgICAgICQuTUVOVSxcbiAgICAgICAgJC5NRVRBLFxuICAgICAgICAkLk5BVixcbiAgICAgICAgJC5OT0VNQkVELFxuICAgICAgICAkLk5PRlJBTUVTLFxuICAgICAgICAkLk5PU0NSSVBULFxuICAgICAgICAkLk9CSkVDVCxcbiAgICAgICAgJC5PTCxcbiAgICAgICAgJC5QLFxuICAgICAgICAkLlBBUkFNLFxuICAgICAgICAkLlBMQUlOVEVYVCxcbiAgICAgICAgJC5QUkUsXG4gICAgICAgICQuU0NSSVBULFxuICAgICAgICAkLlNFQ1RJT04sXG4gICAgICAgICQuU0VMRUNULFxuICAgICAgICAkLlNPVVJDRSxcbiAgICAgICAgJC5TVFlMRSxcbiAgICAgICAgJC5TVU1NQVJZLFxuICAgICAgICAkLlRBQkxFLFxuICAgICAgICAkLlRCT0RZLFxuICAgICAgICAkLlRELFxuICAgICAgICAkLlRFTVBMQVRFLFxuICAgICAgICAkLlRFWFRBUkVBLFxuICAgICAgICAkLlRGT09ULFxuICAgICAgICAkLlRILFxuICAgICAgICAkLlRIRUFELFxuICAgICAgICAkLlRJVExFLFxuICAgICAgICAkLlRSLFxuICAgICAgICAkLlRSQUNLLFxuICAgICAgICAkLlVMLFxuICAgICAgICAkLldCUixcbiAgICAgICAgJC5YTVAsXG4gICAgXSksXG4gICAgW05TLk1BVEhNTF06IG5ldyBTZXQoWyQuTUksICQuTU8sICQuTU4sICQuTVMsICQuTVRFWFQsICQuQU5OT1RBVElPTl9YTUxdKSxcbiAgICBbTlMuU1ZHXTogbmV3IFNldChbJC5USVRMRSwgJC5GT1JFSUdOX09CSkVDVCwgJC5ERVNDXSksXG4gICAgW05TLlhMSU5LXTogbmV3IFNldCgpLFxuICAgIFtOUy5YTUxdOiBuZXcgU2V0KCksXG4gICAgW05TLlhNTE5TXTogbmV3IFNldCgpLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBpc051bWJlcmVkSGVhZGVyKHRuKSB7XG4gICAgcmV0dXJuIHRuID09PSAkLkgxIHx8IHRuID09PSAkLkgyIHx8IHRuID09PSAkLkgzIHx8IHRuID09PSAkLkg0IHx8IHRuID09PSAkLkg1IHx8IHRuID09PSAkLkg2O1xufVxuY29uc3QgVU5FU0NBUEVEX1RFWFQgPSBuZXcgU2V0KFtcbiAgICBUQUdfTkFNRVMuU1RZTEUsXG4gICAgVEFHX05BTUVTLlNDUklQVCxcbiAgICBUQUdfTkFNRVMuWE1QLFxuICAgIFRBR19OQU1FUy5JRlJBTUUsXG4gICAgVEFHX05BTUVTLk5PRU1CRUQsXG4gICAgVEFHX05BTUVTLk5PRlJBTUVTLFxuICAgIFRBR19OQU1FUy5QTEFJTlRFWFQsXG5dKTtcbmV4cG9ydCBmdW5jdGlvbiBoYXNVbmVzY2FwZWRUZXh0KHRuLCBzY3JpcHRpbmdFbmFibGVkKSB7XG4gICAgcmV0dXJuIFVORVNDQVBFRF9URVhULmhhcyh0bikgfHwgKHNjcmlwdGluZ0VuYWJsZWQgJiYgdG4gPT09IFRBR19OQU1FUy5OT1NDUklQVCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1odG1sLmpzLm1hcCIsICJpbXBvcnQgeyBQcmVwcm9jZXNzb3IgfSBmcm9tICcuL3ByZXByb2Nlc3Nvci5qcyc7XG5pbXBvcnQgeyBDT0RFX1BPSU5UUyBhcyAkLCBTRVFVRU5DRVMgYXMgJCQsIFJFUExBQ0VNRU5UX0NIQVJBQ1RFUiwgaXNTdXJyb2dhdGUsIGlzVW5kZWZpbmVkQ29kZVBvaW50LCBpc0NvbnRyb2xDb2RlUG9pbnQsIH0gZnJvbSAnLi4vY29tbW9uL3VuaWNvZGUuanMnO1xuaW1wb3J0IHsgVG9rZW5UeXBlLCBnZXRUb2tlbkF0dHIsIH0gZnJvbSAnLi4vY29tbW9uL3Rva2VuLmpzJztcbmltcG9ydCB7IGh0bWxEZWNvZGVUcmVlLCBCaW5UcmllRmxhZ3MsIGRldGVybWluZUJyYW5jaCB9IGZyb20gJ2VudGl0aWVzL2xpYi9kZWNvZGUuanMnO1xuaW1wb3J0IHsgRVJSIH0gZnJvbSAnLi4vY29tbW9uL2Vycm9yLWNvZGVzLmpzJztcbmltcG9ydCB7IFRBR19JRCwgZ2V0VGFnSUQgfSBmcm9tICcuLi9jb21tb24vaHRtbC5qcyc7XG4vL0MxIFVuaWNvZGUgY29udHJvbCBjaGFyYWN0ZXIgcmVmZXJlbmNlIHJlcGxhY2VtZW50c1xuY29uc3QgQzFfQ09OVFJPTFNfUkVGRVJFTkNFX1JFUExBQ0VNRU5UUyA9IG5ldyBNYXAoW1xuICAgIFsweDgwLCA4MzY0XSxcbiAgICBbMHg4MiwgODIxOF0sXG4gICAgWzB4ODMsIDQwMl0sXG4gICAgWzB4ODQsIDgyMjJdLFxuICAgIFsweDg1LCA4MjMwXSxcbiAgICBbMHg4NiwgODIyNF0sXG4gICAgWzB4ODcsIDgyMjVdLFxuICAgIFsweDg4LCA3MTBdLFxuICAgIFsweDg5LCA4MjQwXSxcbiAgICBbMHg4YSwgMzUyXSxcbiAgICBbMHg4YiwgODI0OV0sXG4gICAgWzB4OGMsIDMzOF0sXG4gICAgWzB4OGUsIDM4MV0sXG4gICAgWzB4OTEsIDgyMTZdLFxuICAgIFsweDkyLCA4MjE3XSxcbiAgICBbMHg5MywgODIyMF0sXG4gICAgWzB4OTQsIDgyMjFdLFxuICAgIFsweDk1LCA4MjI2XSxcbiAgICBbMHg5NiwgODIxMV0sXG4gICAgWzB4OTcsIDgyMTJdLFxuICAgIFsweDk4LCA3MzJdLFxuICAgIFsweDk5LCA4NDgyXSxcbiAgICBbMHg5YSwgMzUzXSxcbiAgICBbMHg5YiwgODI1MF0sXG4gICAgWzB4OWMsIDMzOV0sXG4gICAgWzB4OWUsIDM4Ml0sXG4gICAgWzB4OWYsIDM3Nl0sXG5dKTtcbi8vU3RhdGVzXG52YXIgU3RhdGU7XG4oZnVuY3Rpb24gKFN0YXRlKSB7XG4gICAgU3RhdGVbU3RhdGVbXCJEQVRBXCJdID0gMF0gPSBcIkRBVEFcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlJDREFUQVwiXSA9IDFdID0gXCJSQ0RBVEFcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlJBV1RFWFRcIl0gPSAyXSA9IFwiUkFXVEVYVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFcIl0gPSAzXSA9IFwiU0NSSVBUX0RBVEFcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlBMQUlOVEVYVFwiXSA9IDRdID0gXCJQTEFJTlRFWFRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlRBR19PUEVOXCJdID0gNV0gPSBcIlRBR19PUEVOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJFTkRfVEFHX09QRU5cIl0gPSA2XSA9IFwiRU5EX1RBR19PUEVOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJUQUdfTkFNRVwiXSA9IDddID0gXCJUQUdfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiUkNEQVRBX0xFU1NfVEhBTl9TSUdOXCJdID0gOF0gPSBcIlJDREFUQV9MRVNTX1RIQU5fU0lHTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiUkNEQVRBX0VORF9UQUdfT1BFTlwiXSA9IDldID0gXCJSQ0RBVEFfRU5EX1RBR19PUEVOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJSQ0RBVEFfRU5EX1RBR19OQU1FXCJdID0gMTBdID0gXCJSQ0RBVEFfRU5EX1RBR19OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJSQVdURVhUX0xFU1NfVEhBTl9TSUdOXCJdID0gMTFdID0gXCJSQVdURVhUX0xFU1NfVEhBTl9TSUdOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJSQVdURVhUX0VORF9UQUdfT1BFTlwiXSA9IDEyXSA9IFwiUkFXVEVYVF9FTkRfVEFHX09QRU5cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlJBV1RFWFRfRU5EX1RBR19OQU1FXCJdID0gMTNdID0gXCJSQVdURVhUX0VORF9UQUdfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05cIl0gPSAxNF0gPSBcIlNDUklQVF9EQVRBX0xFU1NfVEhBTl9TSUdOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9FTkRfVEFHX09QRU5cIl0gPSAxNV0gPSBcIlNDUklQVF9EQVRBX0VORF9UQUdfT1BFTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FXCJdID0gMTZdID0gXCJTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVFwiXSA9IDE3XSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSFwiXSA9IDE4XSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRURcIl0gPSAxOV0gPSBcIlNDUklQVF9EQVRBX0VTQ0FQRURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRURfREFTSFwiXSA9IDIwXSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSFwiXSA9IDIxXSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05cIl0gPSAyMl0gPSBcIlNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR05cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOXCJdID0gMjNdID0gXCJTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfT1BFTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVcIl0gPSAyNF0gPSBcIlNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUXCJdID0gMjVdID0gXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRFwiXSA9IDI2XSA9IFwiU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hcIl0gPSAyN10gPSBcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfREFTSFwiXSA9IDI4XSA9IFwiU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTlwiXSA9IDI5XSA9IFwiU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfTEVTU19USEFOX1NJR05cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EXCJdID0gMzBdID0gXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQkVGT1JFX0FUVFJJQlVURV9OQU1FXCJdID0gMzFdID0gXCJCRUZPUkVfQVRUUklCVVRFX05BTUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFUVFJJQlVURV9OQU1FXCJdID0gMzJdID0gXCJBVFRSSUJVVEVfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQUZURVJfQVRUUklCVVRFX05BTUVcIl0gPSAzM10gPSBcIkFGVEVSX0FUVFJJQlVURV9OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCRUZPUkVfQVRUUklCVVRFX1ZBTFVFXCJdID0gMzRdID0gXCJCRUZPUkVfQVRUUklCVVRFX1ZBTFVFXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRFwiXSA9IDM1XSA9IFwiQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEXCJdID0gMzZdID0gXCJBVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEXCJdID0gMzddID0gXCJBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURcIl0gPSAzOF0gPSBcIkFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNFTEZfQ0xPU0lOR19TVEFSVF9UQUdcIl0gPSAzOV0gPSBcIlNFTEZfQ0xPU0lOR19TVEFSVF9UQUdcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkJPR1VTX0NPTU1FTlRcIl0gPSA0MF0gPSBcIkJPR1VTX0NPTU1FTlRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIk1BUktVUF9ERUNMQVJBVElPTl9PUEVOXCJdID0gNDFdID0gXCJNQVJLVVBfREVDTEFSQVRJT05fT1BFTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9TVEFSVFwiXSA9IDQyXSA9IFwiQ09NTUVOVF9TVEFSVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9TVEFSVF9EQVNIXCJdID0gNDNdID0gXCJDT01NRU5UX1NUQVJUX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRcIl0gPSA0NF0gPSBcIkNPTU1FTlRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfTEVTU19USEFOX1NJR05cIl0gPSA0NV0gPSBcIkNPTU1FTlRfTEVTU19USEFOX1NJR05cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR1wiXSA9IDQ2XSA9IFwiQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfREFTSFwiXSA9IDQ3XSA9IFwiQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIX0RBU0hcIl0gPSA0OF0gPSBcIkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfRU5EX0RBU0hcIl0gPSA0OV0gPSBcIkNPTU1FTlRfRU5EX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfRU5EXCJdID0gNTBdID0gXCJDT01NRU5UX0VORFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9FTkRfQkFOR1wiXSA9IDUxXSA9IFwiQ09NTUVOVF9FTkRfQkFOR1wiO1xuICAgIFN0YXRlW1N0YXRlW1wiRE9DVFlQRVwiXSA9IDUyXSA9IFwiRE9DVFlQRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQkVGT1JFX0RPQ1RZUEVfTkFNRVwiXSA9IDUzXSA9IFwiQkVGT1JFX0RPQ1RZUEVfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiRE9DVFlQRV9OQU1FXCJdID0gNTRdID0gXCJET0NUWVBFX05BTUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFGVEVSX0RPQ1RZUEVfTkFNRVwiXSA9IDU1XSA9IFwiQUZURVJfRE9DVFlQRV9OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEXCJdID0gNTZdID0gXCJBRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUlwiXSA9IDU3XSA9IFwiQkVGT1JFX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRFwiXSA9IDU4XSA9IFwiRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URURcIl0gPSA1OV0gPSBcIkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUlwiXSA9IDYwXSA9IFwiQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTXCJdID0gNjFdID0gXCJCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRcIl0gPSA2Ml0gPSBcIkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSXCJdID0gNjNdID0gXCJCRUZPUkVfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEXCJdID0gNjRdID0gXCJET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRFwiXSA9IDY1XSA9IFwiRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSXCJdID0gNjZdID0gXCJBRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCT0dVU19ET0NUWVBFXCJdID0gNjddID0gXCJCT0dVU19ET0NUWVBFXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDREFUQV9TRUNUSU9OXCJdID0gNjhdID0gXCJDREFUQV9TRUNUSU9OXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDREFUQV9TRUNUSU9OX0JSQUNLRVRcIl0gPSA2OV0gPSBcIkNEQVRBX1NFQ1RJT05fQlJBQ0tFVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ0RBVEFfU0VDVElPTl9FTkRcIl0gPSA3MF0gPSBcIkNEQVRBX1NFQ1RJT05fRU5EXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDSEFSQUNURVJfUkVGRVJFTkNFXCJdID0gNzFdID0gXCJDSEFSQUNURVJfUkVGRVJFTkNFXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJOQU1FRF9DSEFSQUNURVJfUkVGRVJFTkNFXCJdID0gNzJdID0gXCJOQU1FRF9DSEFSQUNURVJfUkVGRVJFTkNFXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBTUJJR1VPVVNfQU1QRVJTQU5EXCJdID0gNzNdID0gXCJBTUJJR1VPVVNfQU1QRVJTQU5EXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJOVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0VcIl0gPSA3NF0gPSBcIk5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFSVFwiXSA9IDc1XSA9IFwiSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRV9TVEFSVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRVwiXSA9IDc2XSA9IFwiSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiREVDSU1BTF9DSEFSQUNURVJfUkVGRVJFTkNFXCJdID0gNzddID0gXCJERUNJTUFMX0NIQVJBQ1RFUl9SRUZFUkVOQ0VcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIk5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkRcIl0gPSA3OF0gPSBcIk5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkRcIjtcbn0pKFN0YXRlIHx8IChTdGF0ZSA9IHt9KSk7XG4vL1Rva2VuaXplciBpbml0aWFsIHN0YXRlcyBmb3IgZGlmZmVyZW50IG1vZGVzXG5leHBvcnQgY29uc3QgVG9rZW5pemVyTW9kZSA9IHtcbiAgICBEQVRBOiBTdGF0ZS5EQVRBLFxuICAgIFJDREFUQTogU3RhdGUuUkNEQVRBLFxuICAgIFJBV1RFWFQ6IFN0YXRlLlJBV1RFWFQsXG4gICAgU0NSSVBUX0RBVEE6IFN0YXRlLlNDUklQVF9EQVRBLFxuICAgIFBMQUlOVEVYVDogU3RhdGUuUExBSU5URVhULFxuICAgIENEQVRBX1NFQ1RJT046IFN0YXRlLkNEQVRBX1NFQ1RJT04sXG59O1xuLy9VdGlsc1xuLy9PUFRJTUlaQVRJT046IHRoZXNlIHV0aWxpdHkgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgbW92ZWQgb3V0IG9mIHRoaXMgbW9kdWxlLiBWOCBDcmFua3NoYWZ0IHdpbGwgbm90IGlubGluZVxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxuLy9BbHdheXMgcGVyZm9ybSBpbmxpbmluZyBjaGVjayBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb25zICgnbm9kZSAtLXRyYWNlLWlubGluaW5nJykuXG5mdW5jdGlvbiBpc0FzY2lpRGlnaXQoY3ApIHtcbiAgICByZXR1cm4gY3AgPj0gJC5ESUdJVF8wICYmIGNwIDw9ICQuRElHSVRfOTtcbn1cbmZ1bmN0aW9uIGlzQXNjaWlVcHBlcihjcCkge1xuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX0NBUElUQUxfQSAmJiBjcCA8PSAkLkxBVElOX0NBUElUQUxfWjtcbn1cbmZ1bmN0aW9uIGlzQXNjaWlMb3dlcihjcCkge1xuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX1NNQUxMX0EgJiYgY3AgPD0gJC5MQVRJTl9TTUFMTF9aO1xufVxuZnVuY3Rpb24gaXNBc2NpaUxldHRlcihjcCkge1xuICAgIHJldHVybiBpc0FzY2lpTG93ZXIoY3ApIHx8IGlzQXNjaWlVcHBlcihjcCk7XG59XG5mdW5jdGlvbiBpc0FzY2lpQWxwaGFOdW1lcmljKGNwKSB7XG4gICAgcmV0dXJuIGlzQXNjaWlMZXR0ZXIoY3ApIHx8IGlzQXNjaWlEaWdpdChjcCk7XG59XG5mdW5jdGlvbiBpc0FzY2lpVXBwZXJIZXhEaWdpdChjcCkge1xuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX0NBUElUQUxfQSAmJiBjcCA8PSAkLkxBVElOX0NBUElUQUxfRjtcbn1cbmZ1bmN0aW9uIGlzQXNjaWlMb3dlckhleERpZ2l0KGNwKSB7XG4gICAgcmV0dXJuIGNwID49ICQuTEFUSU5fU01BTExfQSAmJiBjcCA8PSAkLkxBVElOX1NNQUxMX0Y7XG59XG5mdW5jdGlvbiBpc0FzY2lpSGV4RGlnaXQoY3ApIHtcbiAgICByZXR1cm4gaXNBc2NpaURpZ2l0KGNwKSB8fCBpc0FzY2lpVXBwZXJIZXhEaWdpdChjcCkgfHwgaXNBc2NpaUxvd2VySGV4RGlnaXQoY3ApO1xufVxuZnVuY3Rpb24gdG9Bc2NpaUxvd2VyKGNwKSB7XG4gICAgcmV0dXJuIGNwICsgMzI7XG59XG5mdW5jdGlvbiBpc1doaXRlc3BhY2UoY3ApIHtcbiAgICByZXR1cm4gY3AgPT09ICQuU1BBQ0UgfHwgY3AgPT09ICQuTElORV9GRUVEIHx8IGNwID09PSAkLlRBQlVMQVRJT04gfHwgY3AgPT09ICQuRk9STV9GRUVEO1xufVxuZnVuY3Rpb24gaXNFbnRpdHlJbkF0dHJpYnV0ZUludmFsaWRFbmQobmV4dENwKSB7XG4gICAgcmV0dXJuIG5leHRDcCA9PT0gJC5FUVVBTFNfU0lHTiB8fCBpc0FzY2lpQWxwaGFOdW1lcmljKG5leHRDcCk7XG59XG5mdW5jdGlvbiBpc1NjcmlwdERhdGFEb3VibGVFc2NhcGVTZXF1ZW5jZUVuZChjcCkge1xuICAgIHJldHVybiBpc1doaXRlc3BhY2UoY3ApIHx8IGNwID09PSAkLlNPTElEVVMgfHwgY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR047XG59XG4vL1Rva2VuaXplclxuZXhwb3J0IGNsYXNzIFRva2VuaXplciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgaGFuZGxlcikge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAvKiogRW5zdXJlcyB0aGF0IHRoZSBwYXJzaW5nIGxvb3AgaXNuJ3QgcnVuIG11bHRpcGxlIHRpbWVzIGF0IG9uY2UuICovXG4gICAgICAgIHRoaXMuaW5Mb29wID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBhZGp1c3RlZCBub2RlIGV4aXN0cywgaXMgbm90IGFuIGVsZW1lbnQgaW4gdGhlIEhUTUwgbmFtZXNwYWNlLFxuICAgICAgICAgKiBhbmQgdGhhdCBpdCBpcyBub3QgYW4gaW50ZWdyYXRpb24gcG9pbnQgZm9yIGVpdGhlciBNYXRoTUwgb3IgSFRNTC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3RyZWUtY29uc3RydWN0aW9ufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbkZvcmVpZ25Ob2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGFzdFN0YXJ0VGFnTmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSAtMTtcbiAgICAgICAgdGhpcy5jb25zdW1lZEFmdGVyU25hcHNob3QgPSAtMTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gPSBudWxsO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIgPSB7IG5hbWU6ICcnLCB2YWx1ZTogJycgfTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IgPSBuZXcgUHJlcHJvY2Vzc29yKGhhbmRsZXIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbiA9IHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKC0xKTtcbiAgICB9XG4gICAgLy9FcnJvcnNcbiAgICBfZXJyKGNvZGUpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5oYW5kbGVyKS5vblBhcnNlRXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB0aGlzLnByZXByb2Nlc3Nvci5nZXRFcnJvcihjb2RlKSk7XG4gICAgfVxuICAgIC8vIE5PVEU6IGBvZmZzZXRgIG1heSBuZXZlciBydW4gYWNyb3NzIGxpbmUgYm91bmRhcmllcy5cbiAgICBnZXRDdXJyZW50TG9jYXRpb24ob2Zmc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnNvdXJjZUNvZGVMb2NhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydExpbmU6IHRoaXMucHJlcHJvY2Vzc29yLmxpbmUsXG4gICAgICAgICAgICBzdGFydENvbDogdGhpcy5wcmVwcm9jZXNzb3IuY29sIC0gb2Zmc2V0LFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQ6IHRoaXMucHJlcHJvY2Vzc29yLm9mZnNldCAtIG9mZnNldCxcbiAgICAgICAgICAgIGVuZExpbmU6IC0xLFxuICAgICAgICAgICAgZW5kQ29sOiAtMSxcbiAgICAgICAgICAgIGVuZE9mZnNldDogLTEsXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9ydW5QYXJzaW5nTG9vcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5Mb29wKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmluTG9vcCA9IHRydWU7XG4gICAgICAgIHdoaWxlICh0aGlzLmFjdGl2ZSAmJiAhdGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29uc3VtZWRBZnRlclNuYXBzaG90ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IGNwID0gdGhpcy5fY29uc3VtZSgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9lbnN1cmVIaWJlcm5hdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FsbFN0YXRlKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluTG9vcCA9IGZhbHNlO1xuICAgIH1cbiAgICAvL0FQSVxuICAgIHBhdXNlKCkge1xuICAgICAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gICAgfVxuICAgIHJlc3VtZSh3cml0ZUNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5wYXVzZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyc2VyIHdhcyBhbHJlYWR5IHJlc3VtZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAvLyBOZWNlc3NhcnkgZm9yIHN5bmNocm9ub3VzIHJlc3VtZS5cbiAgICAgICAgaWYgKHRoaXMuaW5Mb29wKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLl9ydW5QYXJzaW5nTG9vcCgpO1xuICAgICAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB3cml0ZUNhbGxiYWNrID09PSBudWxsIHx8IHdyaXRlQ2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyaXRlQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3cml0ZShjaHVuaywgaXNMYXN0Q2h1bmssIHdyaXRlQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci53cml0ZShjaHVuaywgaXNMYXN0Q2h1bmspO1xuICAgICAgICB0aGlzLl9ydW5QYXJzaW5nTG9vcCgpO1xuICAgICAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB3cml0ZUNhbGxiYWNrID09PSBudWxsIHx8IHdyaXRlQ2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdyaXRlQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnNlcnRIdG1sQXRDdXJyZW50UG9zKGNodW5rKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuaW5zZXJ0SHRtbEF0Q3VycmVudFBvcyhjaHVuayk7XG4gICAgICAgIHRoaXMuX3J1blBhcnNpbmdMb29wKCk7XG4gICAgfVxuICAgIC8vSGliZXJuYXRpb25cbiAgICBfZW5zdXJlSGliZXJuYXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXByb2Nlc3Nvci5lbmRPZkNodW5rSGl0KSB7XG4gICAgICAgICAgICB0aGlzLl91bmNvbnN1bWUodGhpcy5jb25zdW1lZEFmdGVyU25hcHNob3QpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy9Db25zdW1wdGlvblxuICAgIF9jb25zdW1lKCkge1xuICAgICAgICB0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdCsrO1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVwcm9jZXNzb3IuYWR2YW5jZSgpO1xuICAgIH1cbiAgICBfdW5jb25zdW1lKGNvdW50KSB7XG4gICAgICAgIHRoaXMuY29uc3VtZWRBZnRlclNuYXBzaG90IC09IGNvdW50O1xuICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci5yZXRyZWF0KGNvdW50KTtcbiAgICB9XG4gICAgX3JlY29uc3VtZUluU3RhdGUoc3RhdGUsIGNwKSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5fY2FsbFN0YXRlKGNwKTtcbiAgICB9XG4gICAgX2FkdmFuY2VCeShjb3VudCkge1xuICAgICAgICB0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdCArPSBjb3VudDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci5hZHZhbmNlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2gocGF0dGVybiwgY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICBpZiAodGhpcy5wcmVwcm9jZXNzb3Iuc3RhcnRzV2l0aChwYXR0ZXJuLCBjYXNlU2Vuc2l0aXZlKSkge1xuICAgICAgICAgICAgLy8gV2Ugd2lsbCBhbHJlYWR5IGhhdmUgY29uc3VtZWQgb25lIGNoYXJhY3RlciBiZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZC5cbiAgICAgICAgICAgIHRoaXMuX2FkdmFuY2VCeShwYXR0ZXJuLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvL1Rva2VuIGNyZWF0aW9uXG4gICAgX2NyZWF0ZVN0YXJ0VGFnVG9rZW4oKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLlNUQVJUX1RBRyxcbiAgICAgICAgICAgIHRhZ05hbWU6ICcnLFxuICAgICAgICAgICAgdGFnSUQ6IFRBR19JRC5VTktOT1dOLFxuICAgICAgICAgICAgc2VsZkNsb3Npbmc6IGZhbHNlLFxuICAgICAgICAgICAgYWNrU2VsZkNsb3Npbmc6IGZhbHNlLFxuICAgICAgICAgICAgYXR0cnM6IFtdLFxuICAgICAgICAgICAgbG9jYXRpb246IHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKDEpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfY3JlYXRlRW5kVGFnVG9rZW4oKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLkVORF9UQUcsXG4gICAgICAgICAgICB0YWdOYW1lOiAnJyxcbiAgICAgICAgICAgIHRhZ0lEOiBUQUdfSUQuVU5LTk9XTixcbiAgICAgICAgICAgIHNlbGZDbG9zaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGFja1NlbGZDbG9zaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGF0dHJzOiBbXSxcbiAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbigyKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2NyZWF0ZUNvbW1lbnRUb2tlbihvZmZzZXQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlblR5cGUuQ09NTUVOVCxcbiAgICAgICAgICAgIGRhdGE6ICcnLFxuICAgICAgICAgICAgbG9jYXRpb246IHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKG9mZnNldCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9jcmVhdGVEb2N0eXBlVG9rZW4oaW5pdGlhbE5hbWUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VG9rZW4gPSB7XG4gICAgICAgICAgICB0eXBlOiBUb2tlblR5cGUuRE9DVFlQRSxcbiAgICAgICAgICAgIG5hbWU6IGluaXRpYWxOYW1lLFxuICAgICAgICAgICAgZm9yY2VRdWlya3M6IGZhbHNlLFxuICAgICAgICAgICAgcHVibGljSWQ6IG51bGwsXG4gICAgICAgICAgICBzeXN0ZW1JZDogbnVsbCxcbiAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLmN1cnJlbnRMb2NhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2NyZWF0ZUNoYXJhY3RlclRva2VuKHR5cGUsIGNoYXJzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuID0ge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIGNoYXJzLFxuICAgICAgICAgICAgbG9jYXRpb246IHRoaXMuY3VycmVudExvY2F0aW9uLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAvL1RhZyBhdHRyaWJ1dGVzXG4gICAgX2NyZWF0ZUF0dHIoYXR0ck5hbWVGaXJzdENoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEF0dHIgPSB7XG4gICAgICAgICAgICBuYW1lOiBhdHRyTmFtZUZpcnN0Q2gsXG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY3VycmVudExvY2F0aW9uID0gdGhpcy5nZXRDdXJyZW50TG9jYXRpb24oMCk7XG4gICAgfVxuICAgIF9sZWF2ZUF0dHJOYW1lKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBfYjtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgaWYgKGdldFRva2VuQXR0cih0b2tlbiwgdGhpcy5jdXJyZW50QXR0ci5uYW1lKSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdG9rZW4uYXR0cnMucHVzaCh0aGlzLmN1cnJlbnRBdHRyKTtcbiAgICAgICAgICAgIGlmICh0b2tlbi5sb2NhdGlvbiAmJiB0aGlzLmN1cnJlbnRMb2NhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJMb2NhdGlvbnMgPSAoKF9hID0gKF9iID0gdG9rZW4ubG9jYXRpb24pLmF0dHJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoX2IuYXR0cnMgPSBPYmplY3QuY3JlYXRlKG51bGwpKSk7XG4gICAgICAgICAgICAgICAgYXR0ckxvY2F0aW9uc1t0aGlzLmN1cnJlbnRBdHRyLm5hbWVdID0gdGhpcy5jdXJyZW50TG9jYXRpb247XG4gICAgICAgICAgICAgICAgLy8gU2V0IGVuZCBsb2NhdGlvblxuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0clZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmR1cGxpY2F0ZUF0dHJpYnV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2xlYXZlQXR0clZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50TG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2F0aW9uLmVuZExpbmUgPSB0aGlzLnByZXByb2Nlc3Nvci5saW5lO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb24uZW5kQ29sID0gdGhpcy5wcmVwcm9jZXNzb3IuY29sO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb24uZW5kT2Zmc2V0ID0gdGhpcy5wcmVwcm9jZXNzb3Iub2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vVG9rZW4gZW1pc3Npb25cbiAgICBwcmVwYXJlVG9rZW4oY3QpIHtcbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbihjdC5sb2NhdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcbiAgICAgICAgaWYgKGN0LmxvY2F0aW9uKSB7XG4gICAgICAgICAgICBjdC5sb2NhdGlvbi5lbmRMaW5lID0gdGhpcy5wcmVwcm9jZXNzb3IubGluZTtcbiAgICAgICAgICAgIGN0LmxvY2F0aW9uLmVuZENvbCA9IHRoaXMucHJlcHJvY2Vzc29yLmNvbCArIDE7XG4gICAgICAgICAgICBjdC5sb2NhdGlvbi5lbmRPZmZzZXQgPSB0aGlzLnByZXByb2Nlc3Nvci5vZmZzZXQgKyAxO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudExvY2F0aW9uID0gdGhpcy5nZXRDdXJyZW50TG9jYXRpb24oLTEpO1xuICAgIH1cbiAgICBlbWl0Q3VycmVudFRhZ1Rva2VuKCkge1xuICAgICAgICBjb25zdCBjdCA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICB0aGlzLnByZXBhcmVUb2tlbihjdCk7XG4gICAgICAgIGN0LnRhZ0lEID0gZ2V0VGFnSUQoY3QudGFnTmFtZSk7XG4gICAgICAgIGlmIChjdC50eXBlID09PSBUb2tlblR5cGUuU1RBUlRfVEFHKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RTdGFydFRhZ05hbWUgPSBjdC50YWdOYW1lO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVyLm9uU3RhcnRUYWcoY3QpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGN0LmF0dHJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVuZFRhZ1dpdGhBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjdC5zZWxmQ2xvc2luZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW5kVGFnV2l0aFRyYWlsaW5nU29saWR1cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXIub25FbmRUYWcoY3QpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc29yLmRyb3BQYXJzZWRDaHVuaygpO1xuICAgIH1cbiAgICBlbWl0Q3VycmVudENvbW1lbnQoY3QpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlVG9rZW4oY3QpO1xuICAgICAgICB0aGlzLmhhbmRsZXIub25Db21tZW50KGN0KTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuZHJvcFBhcnNlZENodW5rKCk7XG4gICAgfVxuICAgIGVtaXRDdXJyZW50RG9jdHlwZShjdCkge1xuICAgICAgICB0aGlzLnByZXBhcmVUb2tlbihjdCk7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkRvY3R5cGUoY3QpO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci5kcm9wUGFyc2VkQ2h1bmsoKTtcbiAgICB9XG4gICAgX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4obmV4dExvY2F0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbikge1xuICAgICAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGEgcGVuZGluZyBjaGFyYWN0ZXIgdG9rZW4sIG1ha2UgaXQncyBlbmQgbG9jYXRpb24gZXF1YWwgdG8gdGhlXG4gICAgICAgICAgICAvL2N1cnJlbnQgdG9rZW4ncyBzdGFydCBsb2NhdGlvbi5cbiAgICAgICAgICAgIGlmIChuZXh0TG9jYXRpb24gJiYgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbi5lbmRMaW5lID0gbmV4dExvY2F0aW9uLnN0YXJ0TGluZTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi5sb2NhdGlvbi5lbmRDb2wgPSBuZXh0TG9jYXRpb24uc3RhcnRDb2w7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kT2Zmc2V0ID0gbmV4dExvY2F0aW9uLnN0YXJ0T2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuQ0hBUkFDVEVSOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlci5vbkNoYXJhY3Rlcih0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5OVUxMX0NIQVJBQ1RFUjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZXIub25OdWxsQ2hhcmFjdGVyKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLldISVRFU1BBQ0VfQ0hBUkFDVEVSOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlci5vbldoaXRlc3BhY2VDaGFyYWN0ZXIodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2VtaXRFT0ZUb2tlbigpIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbigwKTtcbiAgICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgICAgICBsb2NhdGlvbi5lbmRMaW5lID0gbG9jYXRpb24uc3RhcnRMaW5lO1xuICAgICAgICAgICAgbG9jYXRpb24uZW5kQ29sID0gbG9jYXRpb24uc3RhcnRDb2w7XG4gICAgICAgICAgICBsb2NhdGlvbi5lbmRPZmZzZXQgPSBsb2NhdGlvbi5zdGFydE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5oYW5kbGVyLm9uRW9mKHsgdHlwZTogVG9rZW5UeXBlLkVPRiwgbG9jYXRpb24gfSk7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIC8vQ2hhcmFjdGVycyBlbWlzc2lvblxuICAgIC8vT1BUSU1JWkFUSU9OOiBzcGVjaWZpY2F0aW9uIHVzZXMgb25seSBvbmUgdHlwZSBvZiBjaGFyYWN0ZXIgdG9rZW5zIChvbmUgdG9rZW4gcGVyIGNoYXJhY3RlcikuXG4gICAgLy9UaGlzIGNhdXNlcyBhIGh1Z2UgbWVtb3J5IG92ZXJoZWFkIGFuZCBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBwYXJzZXIgbG9vcHMuIHBhcnNlNSB1c2VzIDMgZ3JvdXBzIG9mIGNoYXJhY3RlcnMuXG4gICAgLy9JZiB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGJlbG9uZyB0byB0aGUgc2FtZSBncm91cCwgdGhlIHBhcnNlciBjYW4gcHJvY2VzcyBpdFxuICAgIC8vYXMgYSBzaW5nbGUgc29saWQgY2hhcmFjdGVyIHRva2VuLlxuICAgIC8vU28sIHRoZXJlIGFyZSAzIHR5cGVzIG9mIGNoYXJhY3RlciB0b2tlbnMgaW4gcGFyc2U1OlxuICAgIC8vMSlUb2tlblR5cGUuTlVMTF9DSEFSQUNURVIgLSBcXHUwMDAwLWNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcdTAwMDBcXHUwMDAwXFx1MDAwMCcpXG4gICAgLy8yKVRva2VuVHlwZS5XSElURVNQQUNFX0NIQVJBQ1RFUiAtIGFueSB3aGl0ZXNwYWNlL25ldy1saW5lIGNoYXJhY3RlciBzZXF1ZW5jZXMgKGUuZy4gJ1xcbiAgXFxyXFx0ICAgXFxmJylcbiAgICAvLzMpVG9rZW5UeXBlLkNIQVJBQ1RFUiAtIGFueSBjaGFyYWN0ZXIgc2VxdWVuY2Ugd2hpY2ggZG9uJ3QgYmVsb25nIHRvIGdyb3VwcyAxIGFuZCAyIChlLmcuICdhYmNkZWYxMjM0QEAjJCVeJylcbiAgICBfYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKHR5cGUsIGNoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLnR5cGUgIT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbiA9IHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKDApO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4odGhpcy5jdXJyZW50TG9jYXRpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc29yLmRyb3BQYXJzZWRDaHVuaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4uY2hhcnMgKz0gY2g7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUNoYXJhY3RlclRva2VuKHR5cGUsIGNoKTtcbiAgICB9XG4gICAgX2VtaXRDb2RlUG9pbnQoY3ApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGlzV2hpdGVzcGFjZShjcClcbiAgICAgICAgICAgID8gVG9rZW5UeXBlLldISVRFU1BBQ0VfQ0hBUkFDVEVSXG4gICAgICAgICAgICA6IGNwID09PSAkLk5VTExcbiAgICAgICAgICAgICAgICA/IFRva2VuVHlwZS5OVUxMX0NIQVJBQ1RFUlxuICAgICAgICAgICAgICAgIDogVG9rZW5UeXBlLkNIQVJBQ1RFUjtcbiAgICAgICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKHR5cGUsIFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKSk7XG4gICAgfVxuICAgIC8vTk9URTogdXNlZCB3aGVuIHdlIGVtaXQgY2hhcmFjdGVycyBleHBsaWNpdGx5LlxuICAgIC8vVGhpcyBpcyBhbHdheXMgZm9yIG5vbi13aGl0ZXNwYWNlIGFuZCBub24tbnVsbCBjaGFyYWN0ZXJzLCB3aGljaCBhbGxvd3MgdXMgdG8gYXZvaWQgYWRkaXRpb25hbCBjaGVja3MuXG4gICAgX2VtaXRDaGFycyhjaCkge1xuICAgICAgICB0aGlzLl9hcHBlbmRDaGFyVG9DdXJyZW50Q2hhcmFjdGVyVG9rZW4oVG9rZW5UeXBlLkNIQVJBQ1RFUiwgY2gpO1xuICAgIH1cbiAgICAvLyBDaGFyYWN0ZXIgcmVmZXJlbmNlIGhlbHBlcnNcbiAgICBfbWF0Y2hOYW1lZENoYXJhY3RlclJlZmVyZW5jZShjcCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgbGV0IGV4Y2VzcyA9IDA7XG4gICAgICAgIGxldCB3aXRob3V0U2VtaWNvbG9uID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjdXJyZW50ID0gaHRtbERlY29kZVRyZWVbMF07IGkgPj0gMDsgY3AgPSB0aGlzLl9jb25zdW1lKCkpIHtcbiAgICAgICAgICAgIGkgPSBkZXRlcm1pbmVCcmFuY2goaHRtbERlY29kZVRyZWUsIGN1cnJlbnQsIGkgKyAxLCBjcCk7XG4gICAgICAgICAgICBpZiAoaSA8IDApXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBleGNlc3MgKz0gMTtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBodG1sRGVjb2RlVHJlZVtpXTtcbiAgICAgICAgICAgIGNvbnN0IG1hc2tlZCA9IGN1cnJlbnQgJiBCaW5UcmllRmxhZ3MuVkFMVUVfTEVOR1RIO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGJyYW5jaCBpcyBhIHZhbHVlLCBzdG9yZSBpdCBhbmQgY29udGludWVcbiAgICAgICAgICAgIGlmIChtYXNrZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgbWFzayBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSB2YWx1ZSwgaW5jbHVkaW5nIHRoZSBjdXJyZW50IGJ5dGUuXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVMZW5ndGggPSAobWFza2VkID4+IDE0KSAtIDE7XG4gICAgICAgICAgICAgICAgLy8gQXR0cmlidXRlIHZhbHVlcyB0aGF0IGFyZW4ndCB0ZXJtaW5hdGVkIHByb3Blcmx5IGFyZW4ndCBwYXJzZWQsIGFuZCBzaG91bGRuJ3QgbGVhZCB0byBhIHBhcnNlciBlcnJvci5cbiAgICAgICAgICAgICAgICAvLyBTZWUgdGhlIGV4YW1wbGUgaW4gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI25hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2Utc3RhdGVcbiAgICAgICAgICAgICAgICBpZiAoY3AgIT09ICQuU0VNSUNPTE9OICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGUoKSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0VudGl0eUluQXR0cmlidXRlSW52YWxpZEVuZCh0aGlzLnByZXByb2Nlc3Nvci5wZWVrKDEpKSkge1xuICAgICAgICAgICAgICAgICAgICAvL05PVEU6IHdlIGRvbid0IGZsdXNoIGFsbCBjb25zdW1lZCBjb2RlIHBvaW50cyBoZXJlLCBhbmQgaW5zdGVhZCBzd2l0Y2ggYmFjayB0byB0aGUgb3JpZ2luYWwgc3RhdGUgYWZ0ZXJcbiAgICAgICAgICAgICAgICAgICAgLy9lbWl0dGluZyBhbiBhbXBlcnNhbmQuIFRoaXMgaXMgZmluZSwgYXMgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgd29uJ3QgYmUgcGFyc2VkIGRpZmZlcmVudGx5IGluIGF0dHJpYnV0ZXMuXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFskLkFNUEVSU0FORF07XG4gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgb3ZlciB0aGUgdmFsdWUuXG4gICAgICAgICAgICAgICAgICAgIGkgKz0gdmFsdWVMZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3Vycm9nYXRlIHBhaXIsIGNvbnN1bWUgdGhlIG5leHQgdHdvIGJ5dGVzLlxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVMZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtodG1sRGVjb2RlVHJlZVtpXSAmIH5CaW5UcmllRmxhZ3MuVkFMVUVfTEVOR1RIXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWVMZW5ndGggPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbaHRtbERlY29kZVRyZWVbKytpXV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbaHRtbERlY29kZVRyZWVbKytpXSwgaHRtbERlY29kZVRyZWVbKytpXV07XG4gICAgICAgICAgICAgICAgICAgIGV4Y2VzcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHdpdGhvdXRTZW1pY29sb24gPSBjcCAhPT0gJC5TRU1JQ09MT047XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgemVyby1sZW5ndGgsIHdlJ3JlIGRvbmUuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VuY29uc3VtZShleGNlc3MpO1xuICAgICAgICBpZiAod2l0aG91dFNlbWljb2xvbiAmJiAhdGhpcy5wcmVwcm9jZXNzb3IuZW5kT2ZDaHVua0hpdCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW1pdCB0aGUgZXJyb3IgYWJvdmUgb24gdGhlIGNvZGUgcG9pbnQgYWZ0ZXIgdGhlIGVudGl0eS5cbiAgICAgICAgLy8gV2UgYWx3YXlzIGNvbnN1bWUgb25lIGNvZGUgcG9pbnQgdG9vIG1hbnkgaW4gdGhlIGxvb3AsIGFuZCB3ZSB3YWl0IHRvXG4gICAgICAgIC8vIHVuY29uc3VtZSBpdCB1bnRpbCBhZnRlciB0aGUgZXJyb3IgaXMgZW1pdHRlZC5cbiAgICAgICAgdGhpcy5fdW5jb25zdW1lKDEpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBfaXNDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnJldHVyblN0YXRlID09PSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRCB8fFxuICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9PT0gU3RhdGUuQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URUQgfHxcbiAgICAgICAgICAgIHRoaXMucmV0dXJuU3RhdGUgPT09IFN0YXRlLkFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRCk7XG4gICAgfVxuICAgIF9mbHVzaENvZGVQb2ludENvbnN1bWVkQXNDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ2hhcmFjdGVyUmVmZXJlbmNlSW5BdHRyaWJ1dGUoKSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDYWxsaW5nIHN0YXRlcyB0aGlzIHdheSB0dXJucyBvdXQgdG8gYmUgbXVjaCBmYXN0ZXIgdGhhbiBhbnkgb3RoZXIgYXBwcm9hY2guXG4gICAgX2NhbGxTdGF0ZShjcCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgU3RhdGUuREFUQToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlRGF0YShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlJDREFUQToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmNkYXRhKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuUkFXVEVYVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmF3dGV4dChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuUExBSU5URVhUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVQbGFpbnRleHQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5UQUdfT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlVGFnT3BlbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkVORF9UQUdfT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlRW5kVGFnT3BlbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlRBR19OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVUYWdOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuUkNEQVRBX0xFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGFMZXNzVGhhblNpZ24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5SQ0RBVEFfRU5EX1RBR19PUEVOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGFFbmRUYWdPcGVuKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuUkNEQVRBX0VORF9UQUdfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmNkYXRhRW5kVGFnTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlJBV1RFWFRfTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVJhd3RleHRMZXNzVGhhblNpZ24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5SQVdURVhUX0VORF9UQUdfT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmF3dGV4dEVuZFRhZ09wZW4oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5SQVdURVhUX0VORF9UQUdfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmF3dGV4dEVuZFRhZ05hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUxlc3NUaGFuU2lnbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VORF9UQUdfT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVuZFRhZ09wZW4oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9FTkRfVEFHX05BTUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFbmRUYWdOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlU3RhcnQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZVN0YXJ0RGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlZERhc2goY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWREYXNoRGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkTGVzc1RoYW5TaWduKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU46IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkRW5kVGFnT3BlbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlZEVuZFRhZ05hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlU3RhcnQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlZERhc2goY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0g6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaERhc2goY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWRMZXNzVGhhblNpZ24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZUVuZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmVmb3JlQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkFUVFJJQlVURV9OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBdHRyaWJ1dGVOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfQVRUUklCVVRFX05BTUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfVkFMVUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJlZm9yZUF0dHJpYnV0ZVZhbHVlKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNFTEZfQ0xPU0lOR19TVEFSVF9UQUc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNlbGZDbG9zaW5nU3RhcnRUYWcoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5CT0dVU19DT01NRU5UOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0NvbW1lbnQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5NQVJLVVBfREVDTEFSQVRJT05fT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlTWFya3VwRGVjbGFyYXRpb25PcGVuKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9TVEFSVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudFN0YXJ0KGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9TVEFSVF9EQVNIOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50U3RhcnREYXNoKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNPTU1FTlRfTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ25CYW5nKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0g6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ25CYW5nRGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIX0RBU0g6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ25CYW5nRGFzaERhc2goY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DT01NRU5UX0VORF9EQVNIOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50RW5kRGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNPTU1FTlRfRU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50RW5kKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9FTkRfQkFORzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudEVuZEJhbmcoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ET0NUWVBFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVEb2N0eXBlKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQkVGT1JFX0RPQ1RZUEVfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmVmb3JlRG9jdHlwZU5hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ET0NUWVBFX05BTUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURvY3R5cGVOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfRE9DVFlQRV9OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBZnRlckRvY3R5cGVOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfRE9DVFlQRV9QVUJMSUNfS0VZV09SRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQWZ0ZXJEb2N0eXBlUHVibGljS2V5d29yZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllcihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURvY3R5cGVQdWJsaWNJZGVudGlmaWVyU2luZ2xlUXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQWZ0ZXJEb2N0eXBlUHVibGljSWRlbnRpZmllcihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVycyhjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyRG9jdHlwZVN5c3RlbUtleXdvcmQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5CRUZPUkVfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmVmb3JlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXIoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyRG91YmxlUXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVEb2N0eXBlU3lzdGVtSWRlbnRpZmllclNpbmdsZVF1b3RlZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVI6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyRG9jdHlwZVN5c3RlbUlkZW50aWZpZXIoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5CT0dVU19ET0NUWVBFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DREFUQV9TRUNUSU9OOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDZGF0YVNlY3Rpb24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DREFUQV9TRUNUSU9OX0JSQUNLRVQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNkYXRhU2VjdGlvbkJyYWNrZXQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DREFUQV9TRUNUSU9OX0VORDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ2RhdGFTZWN0aW9uRW5kKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ0hBUkFDVEVSX1JFRkVSRU5DRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuTkFNRURfQ0hBUkFDVEVSX1JFRkVSRU5DRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5BTUJJR1VPVVNfQU1QRVJTQU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBbWJpZ3VvdXNBbXBlcnNhbmQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5OVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0U6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5IRVhBREVNSUNBTF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVJUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVIZXhhZGVtaWNhbENoYXJhY3RlclJlZmVyZW5jZVN0YXJ0KGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuSEVYQURFTUlDQUxfQ0hBUkFDVEVSX1JFRkVSRU5DRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlSGV4YWRlbWljYWxDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ERUNJTUFMX0NIQVJBQ1RFUl9SRUZFUkVOQ0U6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURlY2ltYWxDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5OVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfRU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlRW5kKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gc3RhdGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTdGF0ZSBtYWNoaW5lXG4gICAgLy8gRGF0YSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRGF0YShjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuVEFHX09QRU47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuQU1QRVJTQU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNIQVJBQ1RFUl9SRUZFUkVOQ0U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vICBSQ0RBVEEgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVJjZGF0YShjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuQU1QRVJTQU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IFN0YXRlLlJDREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ0hBUkFDVEVSX1JFRkVSRU5DRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQ0RBVEFfTEVTU19USEFOX1NJR047XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyhSRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJBV1RFWFQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVJhd3RleHQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlJBV1RFWFRfTEVTU19USEFOX1NJR047XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyhSRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKFJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUExBSU5URVhUIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVQbGFpbnRleHQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUYWcgb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlVGFnT3BlbihjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaUxldHRlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVN0YXJ0VGFnVG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5UQUdfTkFNRTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlVGFnTmFtZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJC5FWENMQU1BVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5NQVJLVVBfREVDTEFSQVRJT05fT1BFTjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJC5TT0xJRFVTOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5FTkRfVEFHX09QRU47XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuUVVFU1RJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWRRdWVzdGlvbk1hcmtJbnN0ZWFkT2ZUYWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKDEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQk9HVVNfQ09NTUVOVDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0NvbW1lbnQoY3ApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkJlZm9yZVRhZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuaW52YWxpZEZpcnN0Q2hhcmFjdGVyT2ZUYWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURhdGEoY3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgLy8gRW5kIHRhZyBvcGVuIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVFbmRUYWdPcGVuKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpTGV0dGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5UQUdfTkFNRTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlVGFnTmFtZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdFbmRUYWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mQmVmb3JlVGFnTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuaW52YWxpZEZpcnN0Q2hhcmFjdGVyT2ZUYWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKDIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQk9HVVNfQ09NTUVOVDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0NvbW1lbnQoY3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgLy8gVGFnIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVRhZ05hbWUoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuU09MSURVUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TRUxGX0NMT1NJTkdfU1RBUlRfVEFHO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLnRhZ05hbWUgKz0gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLnRhZ05hbWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoaXNBc2NpaVVwcGVyKGNwKSA/IHRvQXNjaWlMb3dlcihjcCkgOiBjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUkNEQVRBIGxlc3MtdGhhbiBzaWduIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVSY2RhdGFMZXNzVGhhblNpZ24oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQ0RBVEFfRU5EX1RBR19PUEVOO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkNEQVRBO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGEoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJDREFUQSBlbmQgdGFnIG9wZW4gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVJjZGF0YUVuZFRhZ09wZW4oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkNEQVRBX0VORF9UQUdfTkFNRTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlUmNkYXRhRW5kVGFnTmFtZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkNEQVRBO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGEoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZVNwZWNpYWxFbmRUYWcoX2NwKSB7XG4gICAgICAgIGlmICghdGhpcy5wcmVwcm9jZXNzb3Iuc3RhcnRzV2l0aCh0aGlzLmxhc3RTdGFydFRhZ05hbWUsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLl9lbnN1cmVIaWJlcm5hdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NyZWF0ZUVuZFRhZ1Rva2VuKCk7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHRva2VuLnRhZ05hbWUgPSB0aGlzLmxhc3RTdGFydFRhZ05hbWU7XG4gICAgICAgIGNvbnN0IGNwID0gdGhpcy5wcmVwcm9jZXNzb3IucGVlayh0aGlzLmxhc3RTdGFydFRhZ05hbWUubGVuZ3RoKTtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2VCeSh0aGlzLmxhc3RTdGFydFRhZ05hbWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9OQU1FO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5TT0xJRFVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZUJ5KHRoaXMubGFzdFN0YXJ0VGFnTmFtZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TRUxGX0NMT1NJTkdfU1RBUlRfVEFHO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkdmFuY2VCeSh0aGlzLmxhc3RTdGFydFRhZ05hbWUubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50VGFnVG9rZW4oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLl9lbnN1cmVIaWJlcm5hdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFJDREFUQSBlbmQgdGFnIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVJjZGF0YUVuZFRhZ05hbWUoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlU3BlY2lhbEVuZFRhZyhjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQ0RBVEE7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVJjZGF0YShjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUkFXVEVYVCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmF3dGV4dExlc3NUaGFuU2lnbihjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlJBV1RFWFRfRU5EX1RBR19PUEVOO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkFXVEVYVDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlUmF3dGV4dChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUkFXVEVYVCBlbmQgdGFnIG9wZW4gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVJhd3RleHRFbmRUYWdPcGVuKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpTGV0dGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlJBV1RFWFRfRU5EX1RBR19OQU1FO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSYXd0ZXh0RW5kVGFnTmFtZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkFXVEVYVDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlUmF3dGV4dChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUkFXVEVYVCBlbmQgdGFnIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVJhd3RleHRFbmRUYWdOYW1lKGNwKSB7XG4gICAgICAgIGlmICh0aGlzLmhhbmRsZVNwZWNpYWxFbmRUYWcoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkFXVEVYVDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlUmF3dGV4dChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgbGVzcy10aGFuIHNpZ24gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFMZXNzVGhhblNpZ24oY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNPTElEVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVYQ0xBTUFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCEnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBlbmQgdGFnIG9wZW4gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFFbmRUYWdPcGVuKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpTGV0dGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VORF9UQUdfTkFNRTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVuZFRhZ05hbWUoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8LycpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBlbmQgdGFnIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFFbmRUYWdOYW1lKGNwKSB7XG4gICAgICAgIGlmICh0aGlzLmhhbmRsZVNwZWNpYWxFbmRUYWcoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGEoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZSBzdGFydCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVzY2FwZVN0YXJ0KGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSDtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBlc2NhcGUgc3RhcnQgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVzY2FwZVN0YXJ0RGFzaChjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0g7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YShjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZXNjYXBlZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0g7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCctJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKFJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblNjcmlwdEh0bWxDb21tZW50TGlrZVRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZWQgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWREYXNoKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIX0RBU0g7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCctJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKFJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblNjcmlwdEh0bWxDb21tZW50TGlrZVRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZWQgZGFzaCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlZERhc2hEYXNoKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRDtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWRMZXNzVGhhblNpZ24oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfT1BFTjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0FzY2lpTGV0dGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9TVEFSVDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZVN0YXJ0KGNwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCcpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBlc2NhcGVkIGVuZCB0YWcgb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdPcGVuKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpTGV0dGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19OQU1FO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlZEVuZFRhZ05hbWUoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8LycpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBlc2NhcGVkIGVuZCB0YWcgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdOYW1lKGNwKSB7XG4gICAgICAgIGlmICh0aGlzLmhhbmRsZVNwZWNpYWxFbmRUYWcoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGUgc3RhcnQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVTdGFydChjcCkge1xuICAgICAgICBpZiAodGhpcy5wcmVwcm9jZXNzb3Iuc3RhcnRzV2l0aCgkJC5TQ1JJUFQsIGZhbHNlKSAmJlxuICAgICAgICAgICAgaXNTY3JpcHREYXRhRG91YmxlRXNjYXBlU2VxdWVuY2VFbmQodGhpcy5wcmVwcm9jZXNzb3IucGVlaygkJC5TQ1JJUFQubGVuZ3RoKSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAkJC5TQ1JJUFQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KHRoaXMuX2NvbnN1bWUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRUQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuX2Vuc3VyZUhpYmVybmF0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlZChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVkKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSDtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKFJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblNjcmlwdEh0bWxDb21tZW50TGlrZVRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGVkIGRhc2ggc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuSFlQSEVOX01JTlVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfREFTSDtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyhSRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5TY3JpcHRIdG1sQ29tbWVudExpa2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgZGFzaCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlZERhc2hEYXNoKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJz4nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyhSRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5TY3JpcHRIdG1sQ29tbWVudExpa2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgbGVzcy10aGFuIHNpZ24gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVkTGVzc1RoYW5TaWduKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9FTkQ7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy8nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGRvdWJsZSBlc2NhcGUgZW5kIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlRW5kKGNwKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXByb2Nlc3Nvci5zdGFydHNXaXRoKCQkLlNDUklQVCwgZmFsc2UpICYmXG4gICAgICAgICAgICBpc1NjcmlwdERhdGFEb3VibGVFc2NhcGVTZXF1ZW5jZUVuZCh0aGlzLnByZXByb2Nlc3Nvci5wZWVrKCQkLlNDUklQVC5sZW5ndGgpKSkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICQkLlNDUklQVC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQodGhpcy5fY29uc3VtZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLl9lbnN1cmVIaWJlcm5hdGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRUQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVkKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBCZWZvcmUgYXR0cmlidXRlIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuU09MSURVUzpcbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjpcbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQUZURVJfQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBZnRlckF0dHJpYnV0ZU5hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVRVUFMU19TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkRXF1YWxzU2lnbkJlZm9yZUF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoJz0nKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlQXR0cignJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFUVFJJQlVURV9OQU1FO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQXR0cmlidXRlIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUF0dHJpYnV0ZU5hbWUoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5TT0xJRFVTOlxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOlxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0ck5hbWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQUZURVJfQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBZnRlckF0dHJpYnV0ZU5hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVRVUFMU19TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfQVRUUklCVVRFX1ZBTFVFO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLlFVT1RBVElPTl9NQVJLOlxuICAgICAgICAgICAgY2FzZSAkLkFQT1NUUk9QSEU6XG4gICAgICAgICAgICBjYXNlICQuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWRDaGFyYWN0ZXJJbkF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIubmFtZSArPSBSRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGlzQXNjaWlVcHBlcihjcCkgPyB0b0FzY2lpTG93ZXIoY3ApIDogY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFmdGVyIGF0dHJpYnV0ZSBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBZnRlckF0dHJpYnV0ZU5hbWUoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuU09MSURVUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TRUxGX0NMT1NJTkdfU1RBUlRfVEFHO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVRVUFMU19TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfVkFMVUU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50VGFnVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluVGFnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKCcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBdHRyaWJ1dGVOYW1lKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBCZWZvcmUgYXR0cmlidXRlIHZhbHVlIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVCZWZvcmVBdHRyaWJ1dGVWYWx1ZShjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nQXR0cmlidXRlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRUYWdUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfVU5RVU9URUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBdHRyaWJ1dGUgdmFsdWUgKGRvdWJsZS1xdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBdHRyaWJ1dGVWYWx1ZURvdWJsZVF1b3RlZChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuUVVPVEFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5BTVBFUlNBTkQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gU3RhdGUuQVRUUklCVVRFX1ZBTFVFX0RPVUJMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNIQVJBQ1RFUl9SRUZFUkVOQ0U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEF0dHJpYnV0ZSB2YWx1ZSAoc2luZ2xlLXF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuQU1QRVJTQU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IFN0YXRlLkFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DSEFSQUNURVJfUkVGRVJFTkNFO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluVGFnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBdHRyaWJ1dGUgdmFsdWUgKHVucXVvdGVkKSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmVBdHRyVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9OQU1FO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkFNUEVSU0FORDoge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0dXJuU3RhdGUgPSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfVU5RVU9URUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNIQVJBQ1RFUl9SRUZFUkVOQ0U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWF2ZUF0dHJWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRUYWdUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5RVU9UQVRJT05fTUFSSzpcbiAgICAgICAgICAgIGNhc2UgJC5BUE9TVFJPUEhFOlxuICAgICAgICAgICAgY2FzZSAkLkxFU1NfVEhBTl9TSUdOOlxuICAgICAgICAgICAgY2FzZSAkLkVRVUFMU19TSUdOOlxuICAgICAgICAgICAgY2FzZSAkLkdSQVZFX0FDQ0VOVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZENoYXJhY3RlckluVW5xdW90ZWRBdHRyaWJ1dGVWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblRhZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWZ0ZXIgYXR0cmlidXRlIHZhbHVlIChxdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgJC5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlICQuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgJC5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWF2ZUF0dHJWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuU09MSURVUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0clZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNFTEZfQ0xPU0lOR19TVEFSVF9UQUc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWF2ZUF0dHJWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRUYWdUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VCZXR3ZWVuQXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNlbGYtY2xvc2luZyBzdGFydCB0YWcgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNlbGZDbG9zaW5nU3RhcnRUYWcoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgICAgICAgICB0b2tlbi5zZWxmQ2xvc2luZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblRhZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkU29saWR1c0luVGFnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9OQU1FO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmVmb3JlQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQm9ndXMgY29tbWVudCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQm9ndXNDb21tZW50KGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE1hcmt1cCBkZWNsYXJhdGlvbiBvcGVuIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVNYXJrdXBEZWNsYXJhdGlvbk9wZW4oY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2goJCQuREFTSF9EQVNILCB0cnVlKSkge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCQkLkRBU0hfREFTSC5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX1NUQVJUO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2goJCQuRE9DVFlQRSwgZmFsc2UpKSB7XG4gICAgICAgICAgICAvLyBOT1RFOiBEb2N0eXBlcyB0b2tlbnMgYXJlIGNyZWF0ZWQgd2l0aG91dCBmaXhlZCBvZmZzZXRzLiBXZSBrZWVwIHRyYWNrIG9mIHRoZSBtb21lbnQgYSBkb2N0eXBlICptaWdodCogc3RhcnQgaGVyZS5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2F0aW9uID0gdGhpcy5nZXRDdXJyZW50TG9jYXRpb24oJCQuRE9DVFlQRS5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2goJCQuQ0RBVEFfU1RBUlQsIHRydWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbkZvcmVpZ25Ob2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNEQVRBX1NFQ1RJT047XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmNkYXRhSW5IdG1sQ29udGVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKCQkLkNEQVRBX1NUQVJULmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRva2VuLmRhdGEgPSAnW0NEQVRBWyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0NPTU1FTlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy9OT1RFOiBTZXF1ZW5jZSBsb29rdXBzIGNhbiBiZSBhYnJ1cHRlZCBieSBoaWJlcm5hdGlvbi4gSW4gdGhhdCBjYXNlLCBsb29rdXBcbiAgICAgICAgLy9yZXN1bHRzIGFyZSBubyBsb25nZXIgdmFsaWQgYW5kIHdlIHdpbGwgbmVlZCB0byBzdGFydCBvdmVyLlxuICAgICAgICBlbHNlIGlmICghdGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5pbmNvcnJlY3RseU9wZW5lZENvbW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlQ29tbWVudFRva2VuKDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0NPTU1FTlQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzQ29tbWVudChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29tbWVudCBzdGFydCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ29tbWVudFN0YXJ0KGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9TVEFSVF9EQVNIO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5hYnJ1cHRDbG9zaW5nT2ZFbXB0eUNvbW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29tbWVudCBzdGFydCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50U3RhcnREYXNoKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9FTkQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmFicnVwdENsb3NpbmdPZkVtcHR5Q29tbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Db21tZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uZGF0YSArPSAnLSc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50KGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9FTkRfREFTSDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJzwnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9IFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENvbW1lbnQgbGVzcy10aGFuIHNpZ24gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ24oY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkVYQ0xBTUFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9ICchJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uZGF0YSArPSAnPCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IGxlc3MtdGhhbiBzaWduIGJhbmcgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ25CYW5nKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfREFTSDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50KGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IGxlc3MtdGhhbiBzaWduIGJhbmcgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ29tbWVudExlc3NUaGFuU2lnbkJhbmdEYXNoKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfREFTSF9EQVNIO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfRU5EX0RBU0g7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRFbmREYXNoKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IGxlc3MtdGhhbiBzaWduIGJhbmcgZGFzaCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50TGVzc1RoYW5TaWduQmFuZ0Rhc2hEYXNoKGNwKSB7XG4gICAgICAgIGlmIChjcCAhPT0gJC5HUkVBVEVSX1RIQU5fU0lHTiAmJiBjcCAhPT0gJC5FT0YpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIubmVzdGVkQ29tbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfRU5EO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRFbmQoY3ApO1xuICAgIH1cbiAgICAvLyBDb21tZW50IGVuZCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50RW5kRGFzaChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuSFlQSEVOX01JTlVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfRU5EO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Db21tZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uZGF0YSArPSAnLSc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IGVuZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ29tbWVudEVuZChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRVhDTEFNQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX0VORF9CQU5HO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJy0nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Db21tZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uZGF0YSArPSAnLS0nO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29tbWVudCBlbmQgYmFuZyBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ29tbWVudEVuZEJhbmcoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJy0tISc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfRU5EX0RBU0g7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmluY29ycmVjdGx5Q2xvc2VkQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Db21tZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uZGF0YSArPSAnLS0hJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIERPQ1RZUEUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZURvY3R5cGUoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfRE9DVFlQRV9OQU1FO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9ET0NUWVBFX05BTUU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCZWZvcmVEb2N0eXBlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihudWxsKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nV2hpdGVzcGFjZUJlZm9yZURvY3R5cGVOYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0RPQ1RZUEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJlZm9yZURvY3R5cGVOYW1lKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBCZWZvcmUgRE9DVFlQRSBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVCZWZvcmVEb2N0eXBlTmFtZShjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaVVwcGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKFN0cmluZy5mcm9tQ2hhckNvZGUodG9Bc2NpaUxvd2VyKGNwKSkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfTkFNRTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgICAgIGNhc2UgJC5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihSRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9OQU1FO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ0RvY3R5cGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlRG9jdHlwZVRva2VuKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihTdHJpbmcuZnJvbUNvZGVQb2ludChjcCkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9OQU1FO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICB9XG4gICAgLy8gRE9DVFlQRSBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVEb2N0eXBlTmFtZShjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0RPQ1RZUEVfTkFNRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdG9rZW4ubmFtZSArPSBSRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4ubmFtZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChpc0FzY2lpVXBwZXIoY3ApID8gdG9Bc2NpaUxvd2VyKGNwKSA6IGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBET0NUWVBFIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUFmdGVyRG9jdHlwZU5hbWUoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2goJCQuUFVCTElDLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2NvbnN1bWVTZXF1ZW5jZUlmTWF0Y2goJCQuU1lTVEVNLCBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0tFWVdPUkQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vTk9URTogc2VxdWVuY2UgbG9va3VwIGNhbiBiZSBhYnJ1cHRlZCBieSBoaWJlcm5hdGlvbi4gSW4gdGhhdCBjYXNlIGxvb2t1cFxuICAgICAgICAgICAgICAgIC8vcmVzdWx0cyBhcmUgbm8gbG9uZ2VyIHZhbGlkIGFuZCB3ZSB3aWxsIG5lZWQgdG8gc3RhcnQgb3Zlci5cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmludmFsaWRDaGFyYWN0ZXJTZXF1ZW5jZUFmdGVyRG9jdHlwZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19ET0NUWVBFO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzRG9jdHlwZShjcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFmdGVyIERPQ1RZUEUgcHVibGljIGtleXdvcmQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUFmdGVyRG9jdHlwZVB1YmxpY0tleXdvcmQoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5wdWJsaWNJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuQVBPU1RST1BIRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5wdWJsaWNJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX1NJTkdMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdEb2N0eXBlUHVibGljSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVQdWJsaWNJZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0RPQ1RZUEU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJlZm9yZSBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVCZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllcihjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRva2VuLnB1YmxpY0lkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdG9rZW4ucHVibGljSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nRG9jdHlwZVB1YmxpY0lkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19ET0NUWVBFO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQm9ndXNEb2N0eXBlKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIChkb3VibGUtcXVvdGVkKSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJEb3VibGVRdW90ZWQoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlFVT1RBVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLnB1YmxpY0lkICs9IFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuYWJydXB0RG9jdHlwZVB1YmxpY0lkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4ucHVibGljSWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIERPQ1RZUEUgcHVibGljIGlkZW50aWZpZXIgKHNpbmdsZS1xdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVEb2N0eXBlUHVibGljSWRlbnRpZmllclNpbmdsZVF1b3RlZChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuQVBPU1RST1BIRToge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5wdWJsaWNJZCArPSBSRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmFicnVwdERvY3R5cGVQdWJsaWNJZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLnB1YmxpY0lkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBZnRlckRvY3R5cGVQdWJsaWNJZGVudGlmaWVyKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgJC5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlICQuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgJC5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLlFVT1RBVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nV2hpdGVzcGFjZUJldHdlZW5Eb2N0eXBlUHVibGljQW5kU3lzdGVtSWRlbnRpZmllcnMpO1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nV2hpdGVzcGFjZUJldHdlZW5Eb2N0eXBlUHVibGljQW5kU3lzdGVtSWRlbnRpZmllcnMpO1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0RPQ1RZUEU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJldHdlZW4gRE9DVFlQRSBwdWJsaWMgYW5kIHN5c3RlbSBpZGVudGlmaWVycyBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVycyhjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uc3lzdGVtSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1F1b3RlQmVmb3JlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQk9HVVNfRE9DVFlQRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzRG9jdHlwZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWZ0ZXIgRE9DVFlQRSBzeXN0ZW0ga2V5d29yZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQWZ0ZXJEb2N0eXBlU3lzdGVtS2V5d29yZChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLlFVT1RBVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nV2hpdGVzcGFjZUFmdGVyRG9jdHlwZVN5c3RlbUtleXdvcmQpO1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nV2hpdGVzcGFjZUFmdGVyRG9jdHlwZVN5c3RlbUtleXdvcmQpO1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ0RvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1F1b3RlQmVmb3JlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQk9HVVNfRE9DVFlQRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzRG9jdHlwZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQmVmb3JlIERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgJC5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlICQuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgJC5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLlFVT1RBVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uc3lzdGVtSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkFQT1NUUk9QSEU6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0RPQ1RZUEU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgKGRvdWJsZS1xdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVEb2N0eXBlU3lzdGVtSWRlbnRpZmllckRvdWJsZVF1b3RlZChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuUVVPVEFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uc3lzdGVtSWQgKz0gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5hYnJ1cHREb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gRE9DVFlQRSBzeXN0ZW0gaWRlbnRpZmllciAoc2luZ2xlLXF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkICs9IFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuYWJydXB0RG9jdHlwZVN5c3RlbUlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uc3lzdGVtSWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFmdGVyIERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUFmdGVyRG9jdHlwZVN5c3RlbUlkZW50aWZpZXIoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkQ2hhcmFjdGVyQWZ0ZXJEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0RPQ1RZUEU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJvZ3VzIERPQ1RZUEUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJvZ3VzRG9jdHlwZShjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ0RBVEEgc2VjdGlvbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ2RhdGFTZWN0aW9uKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5SSUdIVF9TUVVBUkVfQlJBQ0tFVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DREFUQV9TRUNUSU9OX0JSQUNLRVQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkNkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDREFUQSBzZWN0aW9uIGJyYWNrZXQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNkYXRhU2VjdGlvbkJyYWNrZXQoY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLlJJR0hUX1NRVUFSRV9CUkFDS0VUKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ0RBVEFfU0VDVElPTl9FTkQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJ10nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DREFUQV9TRUNUSU9OO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVDZGF0YVNlY3Rpb24oY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENEQVRBIHNlY3Rpb24gZW5kIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDZGF0YVNlY3Rpb25FbmQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuUklHSFRfU1FVQVJFX0JSQUNLRVQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJ10nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJ11dJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNEQVRBX1NFQ1RJT047XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDZGF0YVNlY3Rpb24oY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENoYXJhY3RlciByZWZlcmVuY2Ugc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNoYXJhY3RlclJlZmVyZW5jZShjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuTlVNQkVSX1NJR04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5OVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNBc2NpaUFscGhhTnVtZXJpYyhjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5OQU1FRF9DSEFSQUNURVJfUkVGRVJFTkNFO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9mbHVzaENvZGVQb2ludENvbnN1bWVkQXNDaGFyYWN0ZXJSZWZlcmVuY2UoJC5BTVBFUlNBTkQpO1xuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZSh0aGlzLnJldHVyblN0YXRlLCBjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApIHtcbiAgICAgICAgY29uc3QgbWF0Y2hSZXN1bHQgPSB0aGlzLl9tYXRjaE5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKTtcbiAgICAgICAgLy9OT1RFOiBNYXRjaGluZyBjYW4gYmUgYWJydXB0ZWQgYnkgaGliZXJuYXRpb24uIEluIHRoYXQgY2FzZSwgbWF0Y2hcbiAgICAgICAgLy9yZXN1bHRzIGFyZSBubyBsb25nZXIgdmFsaWQgYW5kIHdlIHdpbGwgbmVlZCB0byBzdGFydCBvdmVyLlxuICAgICAgICBpZiAodGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgLy8gU3RheSBpbiB0aGUgc3RhdGUsIHRyeSBhZ2Fpbi5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFJlc3VsdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRjaFJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZsdXNoQ29kZVBvaW50Q29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZShtYXRjaFJlc3VsdFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5yZXR1cm5TdGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2ZsdXNoQ29kZVBvaW50Q29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZSgkLkFNUEVSU0FORCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQU1CSUdVT1VTX0FNUEVSU0FORDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBbWJpZ3VvcyBhbXBlcnNhbmQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUFtYmlndW91c0FtcGVyc2FuZChjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaUFscGhhTnVtZXJpYyhjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZsdXNoQ29kZVBvaW50Q29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY3AgPT09ICQuU0VNSUNPTE9OKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmtub3duTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZSh0aGlzLnJldHVyblN0YXRlLCBjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKGNwKSB7XG4gICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSAwO1xuICAgICAgICBpZiAoY3AgPT09ICQuTEFUSU5fU01BTExfWCB8fCBjcCA9PT0gJC5MQVRJTl9DQVBJVEFMX1gpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5IRVhBREVNSUNBTF9DSEFSQUNURVJfUkVGRVJFTkNFX1NUQVJUO1xuICAgICAgICB9XG4gICAgICAgIC8vIElubGluZWQgZGVjaW1hbCBjaGFyYWN0ZXIgcmVmZXJlbmNlIHN0YXJ0IHN0YXRlXG4gICAgICAgIGVsc2UgaWYgKGlzQXNjaWlEaWdpdChjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ERUNJTUFMX0NIQVJBQ1RFUl9SRUZFUkVOQ0U7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZURlY2ltYWxDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5hYnNlbmNlT2ZEaWdpdHNJbk51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKCQuQU1QRVJTQU5EKTtcbiAgICAgICAgICAgIHRoaXMuX2ZsdXNoQ29kZVBvaW50Q29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZSgkLk5VTUJFUl9TSUdOKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29uc3VtZUluU3RhdGUodGhpcy5yZXR1cm5TdGF0ZSwgY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEhleGFkZW1pY2FsIGNoYXJhY3RlciByZWZlcmVuY2Ugc3RhcnQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUhleGFkZW1pY2FsQ2hhcmFjdGVyUmVmZXJlbmNlU3RhcnQoY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlIZXhEaWdpdChjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5IRVhBREVNSUNBTF9DSEFSQUNURVJfUkVGRVJFTkNFO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVIZXhhZGVtaWNhbENoYXJhY3RlclJlZmVyZW5jZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmFic2VuY2VPZkRpZ2l0c0luTnVtZXJpY0NoYXJhY3RlclJlZmVyZW5jZSk7XG4gICAgICAgICAgICB0aGlzLl9mbHVzaENvZGVQb2ludENvbnN1bWVkQXNDaGFyYWN0ZXJSZWZlcmVuY2UoJC5BTVBFUlNBTkQpO1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKCQuTlVNQkVSX1NJR04pO1xuICAgICAgICAgICAgdGhpcy5fdW5jb25zdW1lKDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMucmV0dXJuU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSGV4YWRlbWljYWwgY2hhcmFjdGVyIHJlZmVyZW5jZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlSGV4YWRlbWljYWxDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlVcHBlckhleERpZ2l0KGNwKSkge1xuICAgICAgICAgICAgdGhpcy5jaGFyUmVmQ29kZSA9IHRoaXMuY2hhclJlZkNvZGUgKiAxNiArIGNwIC0gMHgzNztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0FzY2lpTG93ZXJIZXhEaWdpdChjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSB0aGlzLmNoYXJSZWZDb2RlICogMTYgKyBjcCAtIDB4NTc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNBc2NpaURpZ2l0KGNwKSkge1xuICAgICAgICAgICAgdGhpcy5jaGFyUmVmQ29kZSA9IHRoaXMuY2hhclJlZkNvZGUgKiAxNiArIGNwIC0gMHgzMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcCA9PT0gJC5TRU1JQ09MT04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5OVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfRU5EO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLk5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2VFbmQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIERlY2ltYWwgY2hhcmFjdGVyIHJlZmVyZW5jZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRGVjaW1hbENoYXJhY3RlclJlZmVyZW5jZShjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaURpZ2l0KGNwKSkge1xuICAgICAgICAgICAgdGhpcy5jaGFyUmVmQ29kZSA9IHRoaXMuY2hhclJlZkNvZGUgKiAxMCArIGNwIC0gMHgzMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjcCA9PT0gJC5TRU1JQ09MT04pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5OVU1FUklDX0NIQVJBQ1RFUl9SRUZFUkVOQ0VfRU5EO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLk5VTUVSSUNfQ0hBUkFDVEVSX1JFRkVSRU5DRV9FTkQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2VFbmQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZSBlbmQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2VFbmQoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuY2hhclJlZkNvZGUgPT09ICQuTlVMTCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5udWxsQ2hhcmFjdGVyUmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNoYXJSZWZDb2RlID4gMTExNDExMSkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5jaGFyYWN0ZXJSZWZlcmVuY2VPdXRzaWRlVW5pY29kZVJhbmdlKTtcbiAgICAgICAgICAgIHRoaXMuY2hhclJlZkNvZGUgPSAkLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N1cnJvZ2F0ZSh0aGlzLmNoYXJSZWZDb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5zdXJyb2dhdGVDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgdGhpcy5jaGFyUmVmQ29kZSA9ICQuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzVW5kZWZpbmVkQ29kZVBvaW50KHRoaXMuY2hhclJlZkNvZGUpKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm5vbmNoYXJhY3RlckNoYXJhY3RlclJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb250cm9sQ29kZVBvaW50KHRoaXMuY2hhclJlZkNvZGUpIHx8IHRoaXMuY2hhclJlZkNvZGUgPT09ICQuQ0FSUklBR0VfUkVUVVJOKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmNvbnRyb2xDaGFyYWN0ZXJSZWZlcmVuY2UpO1xuICAgICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBDMV9DT05UUk9MU19SRUZFUkVOQ0VfUkVQTEFDRU1FTlRTLmdldCh0aGlzLmNoYXJSZWZDb2RlKTtcbiAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFyUmVmQ29kZSA9IHJlcGxhY2VtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZsdXNoQ29kZVBvaW50Q29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZSh0aGlzLmNoYXJSZWZDb2RlKTtcbiAgICAgICAgdGhpcy5fcmVjb25zdW1lSW5TdGF0ZSh0aGlzLnJldHVyblN0YXRlLCBjcCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwgImltcG9ydCB7IFRBR19JRCBhcyAkLCBOUywgaXNOdW1iZXJlZEhlYWRlciB9IGZyb20gJy4uL2NvbW1vbi9odG1sLmpzJztcbi8vRWxlbWVudCB1dGlsc1xuY29uc3QgSU1QTElDSVRfRU5EX1RBR19SRVFVSVJFRCA9IG5ldyBTZXQoWyQuREQsICQuRFQsICQuTEksICQuT1BUR1JPVVAsICQuT1BUSU9OLCAkLlAsICQuUkIsICQuUlAsICQuUlQsICQuUlRDXSk7XG5jb25zdCBJTVBMSUNJVF9FTkRfVEFHX1JFUVVJUkVEX1RIT1JPVUdITFkgPSBuZXcgU2V0KFtcbiAgICAuLi5JTVBMSUNJVF9FTkRfVEFHX1JFUVVJUkVELFxuICAgICQuQ0FQVElPTixcbiAgICAkLkNPTEdST1VQLFxuICAgICQuVEJPRFksXG4gICAgJC5URCxcbiAgICAkLlRGT09ULFxuICAgICQuVEgsXG4gICAgJC5USEVBRCxcbiAgICAkLlRSLFxuXSk7XG5jb25zdCBTQ09QSU5HX0VMRU1FTlRfTlMgPSBuZXcgTWFwKFtcbiAgICBbJC5BUFBMRVQsIE5TLkhUTUxdLFxuICAgIFskLkNBUFRJT04sIE5TLkhUTUxdLFxuICAgIFskLkhUTUwsIE5TLkhUTUxdLFxuICAgIFskLk1BUlFVRUUsIE5TLkhUTUxdLFxuICAgIFskLk9CSkVDVCwgTlMuSFRNTF0sXG4gICAgWyQuVEFCTEUsIE5TLkhUTUxdLFxuICAgIFskLlRELCBOUy5IVE1MXSxcbiAgICBbJC5URU1QTEFURSwgTlMuSFRNTF0sXG4gICAgWyQuVEgsIE5TLkhUTUxdLFxuICAgIFskLkFOTk9UQVRJT05fWE1MLCBOUy5NQVRITUxdLFxuICAgIFskLk1JLCBOUy5NQVRITUxdLFxuICAgIFskLk1OLCBOUy5NQVRITUxdLFxuICAgIFskLk1PLCBOUy5NQVRITUxdLFxuICAgIFskLk1TLCBOUy5NQVRITUxdLFxuICAgIFskLk1URVhULCBOUy5NQVRITUxdLFxuICAgIFskLkRFU0MsIE5TLlNWR10sXG4gICAgWyQuRk9SRUlHTl9PQkpFQ1QsIE5TLlNWR10sXG4gICAgWyQuVElUTEUsIE5TLlNWR10sXG5dKTtcbmNvbnN0IE5BTUVEX0hFQURFUlMgPSBbJC5IMSwgJC5IMiwgJC5IMywgJC5INCwgJC5INSwgJC5INl07XG5jb25zdCBUQUJMRV9ST1dfQ09OVEVYVCA9IFskLlRSLCAkLlRFTVBMQVRFLCAkLkhUTUxdO1xuY29uc3QgVEFCTEVfQk9EWV9DT05URVhUID0gWyQuVEJPRFksICQuVEZPT1QsICQuVEhFQUQsICQuVEVNUExBVEUsICQuSFRNTF07XG5jb25zdCBUQUJMRV9DT05URVhUID0gWyQuVEFCTEUsICQuVEVNUExBVEUsICQuSFRNTF07XG5jb25zdCBUQUJMRV9DRUxMUyA9IFskLlRELCAkLlRIXTtcbi8vU3RhY2sgb2Ygb3BlbiBlbGVtZW50c1xuZXhwb3J0IGNsYXNzIE9wZW5FbGVtZW50U3RhY2sge1xuICAgIGdldCBjdXJyZW50VG1wbENvbnRlbnRPck5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luVGVtcGxhdGUoKSA/IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGVtcGxhdGVDb250ZW50KHRoaXMuY3VycmVudCkgOiB0aGlzLmN1cnJlbnQ7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCB0cmVlQWRhcHRlciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XG4gICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy50YWdJRHMgPSBbXTtcbiAgICAgICAgdGhpcy5zdGFja1RvcCA9IC0xO1xuICAgICAgICB0aGlzLnRtcGxDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuY3VycmVudFRhZ0lkID0gJC5VTktOT1dOO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBkb2N1bWVudDtcbiAgICB9XG4gICAgLy9JbmRleCBvZiBlbGVtZW50XG4gICAgX2luZGV4T2YoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5sYXN0SW5kZXhPZihlbGVtZW50LCB0aGlzLnN0YWNrVG9wKTtcbiAgICB9XG4gICAgLy9VcGRhdGUgY3VycmVudCBlbGVtZW50XG4gICAgX2lzSW5UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRhZ0lkID09PSAkLlRFTVBMQVRFICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuY3VycmVudCkgPT09IE5TLkhUTUw7XG4gICAgfVxuICAgIF91cGRhdGVDdXJyZW50RWxlbWVudCgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5pdGVtc1t0aGlzLnN0YWNrVG9wXTtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFnSWQgPSB0aGlzLnRhZ0lEc1t0aGlzLnN0YWNrVG9wXTtcbiAgICB9XG4gICAgLy9NdXRhdGlvbnNcbiAgICBwdXNoKGVsZW1lbnQsIHRhZ0lEKSB7XG4gICAgICAgIHRoaXMuc3RhY2tUb3ArKztcbiAgICAgICAgdGhpcy5pdGVtc1t0aGlzLnN0YWNrVG9wXSA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMudGFnSURzW3RoaXMuc3RhY2tUb3BdID0gdGFnSUQ7XG4gICAgICAgIHRoaXMuY3VycmVudFRhZ0lkID0gdGFnSUQ7XG4gICAgICAgIGlmICh0aGlzLl9pc0luVGVtcGxhdGUoKSkge1xuICAgICAgICAgICAgdGhpcy50bXBsQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZXIub25JdGVtUHVzaChlbGVtZW50LCB0YWdJRCwgdHJ1ZSk7XG4gICAgfVxuICAgIHBvcCgpIHtcbiAgICAgICAgY29uc3QgcG9wcGVkID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRtcGxDb3VudC0tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhY2tUb3AtLTtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVyLm9uSXRlbVBvcChwb3BwZWQsIHRydWUpO1xuICAgIH1cbiAgICByZXBsYWNlKG9sZEVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5faW5kZXhPZihvbGRFbGVtZW50KTtcbiAgICAgICAgdGhpcy5pdGVtc1tpZHhdID0gbmV3RWxlbWVudDtcbiAgICAgICAgaWYgKGlkeCA9PT0gdGhpcy5zdGFja1RvcCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gbmV3RWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnNlcnRBZnRlcihyZWZlcmVuY2VFbGVtZW50LCBuZXdFbGVtZW50LCBuZXdFbGVtZW50SUQpIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0aW9uSWR4ID0gdGhpcy5faW5kZXhPZihyZWZlcmVuY2VFbGVtZW50KSArIDE7XG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3RWxlbWVudCk7XG4gICAgICAgIHRoaXMudGFnSURzLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld0VsZW1lbnRJRCk7XG4gICAgICAgIHRoaXMuc3RhY2tUb3ArKztcbiAgICAgICAgaWYgKGluc2VydGlvbklkeCA9PT0gdGhpcy5zdGFja1RvcCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZXIub25JdGVtUHVzaCh0aGlzLmN1cnJlbnQsIHRoaXMuY3VycmVudFRhZ0lkLCBpbnNlcnRpb25JZHggPT09IHRoaXMuc3RhY2tUb3ApO1xuICAgIH1cbiAgICBwb3BVbnRpbFRhZ05hbWVQb3BwZWQodGFnTmFtZSkge1xuICAgICAgICBsZXQgdGFyZ2V0SWR4ID0gdGhpcy5zdGFja1RvcCArIDE7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHRhcmdldElkeCA9IHRoaXMudGFnSURzLmxhc3RJbmRleE9mKHRhZ05hbWUsIHRhcmdldElkeCAtIDEpO1xuICAgICAgICB9IHdoaWxlICh0YXJnZXRJZHggPiAwICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbdGFyZ2V0SWR4XSkgIT09IE5TLkhUTUwpO1xuICAgICAgICB0aGlzLnNob3J0ZW5Ub0xlbmd0aCh0YXJnZXRJZHggPCAwID8gMCA6IHRhcmdldElkeCk7XG4gICAgfVxuICAgIHNob3J0ZW5Ub0xlbmd0aChpZHgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPj0gaWR4KSB7XG4gICAgICAgICAgICBjb25zdCBwb3BwZWQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50bXBsQ291bnQgLT0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhY2tUb3AtLTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXIub25JdGVtUG9wKHBvcHBlZCwgdGhpcy5zdGFja1RvcCA8IGlkeCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcG9wVW50aWxFbGVtZW50UG9wcGVkKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5faW5kZXhPZihlbGVtZW50KTtcbiAgICAgICAgdGhpcy5zaG9ydGVuVG9MZW5ndGgoaWR4IDwgMCA/IDAgOiBpZHgpO1xuICAgIH1cbiAgICBwb3BVbnRpbFBvcHBlZCh0YWdOYW1lcywgdGFyZ2V0TlMpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5faW5kZXhPZlRhZ05hbWVzKHRhZ05hbWVzLCB0YXJnZXROUyk7XG4gICAgICAgIHRoaXMuc2hvcnRlblRvTGVuZ3RoKGlkeCA8IDAgPyAwIDogaWR4KTtcbiAgICB9XG4gICAgcG9wVW50aWxOdW1iZXJlZEhlYWRlclBvcHBlZCgpIHtcbiAgICAgICAgdGhpcy5wb3BVbnRpbFBvcHBlZChOQU1FRF9IRUFERVJTLCBOUy5IVE1MKTtcbiAgICB9XG4gICAgcG9wVW50aWxUYWJsZUNlbGxQb3BwZWQoKSB7XG4gICAgICAgIHRoaXMucG9wVW50aWxQb3BwZWQoVEFCTEVfQ0VMTFMsIE5TLkhUTUwpO1xuICAgIH1cbiAgICBwb3BBbGxVcFRvSHRtbEVsZW1lbnQoKSB7XG4gICAgICAgIC8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgcm9vdCA8aHRtbD4gZWxlbWVudCBpcyBhbHdheXMgZmlyc3QgaW4gdGhlIG9wZW4gZWxlbWVudCBzdGFjaywgc29cbiAgICAgICAgLy93ZSBwZXJmb3JtIHRoaXMgZmFzdCBzdGFjayBjbGVhbiB1cC5cbiAgICAgICAgdGhpcy50bXBsQ291bnQgPSAwO1xuICAgICAgICB0aGlzLnNob3J0ZW5Ub0xlbmd0aCgxKTtcbiAgICB9XG4gICAgX2luZGV4T2ZUYWdOYW1lcyh0YWdOYW1lcywgbmFtZXNwYWNlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRhZ05hbWVzLmluY2x1ZGVzKHRoaXMudGFnSURzW2ldKSAmJiB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKSA9PT0gbmFtZXNwYWNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBjbGVhckJhY2tUbyh0YWdOYW1lcywgdGFyZ2V0TlMpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5faW5kZXhPZlRhZ05hbWVzKHRhZ05hbWVzLCB0YXJnZXROUyk7XG4gICAgICAgIHRoaXMuc2hvcnRlblRvTGVuZ3RoKGlkeCArIDEpO1xuICAgIH1cbiAgICBjbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5jbGVhckJhY2tUbyhUQUJMRV9DT05URVhULCBOUy5IVE1MKTtcbiAgICB9XG4gICAgY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCkge1xuICAgICAgICB0aGlzLmNsZWFyQmFja1RvKFRBQkxFX0JPRFlfQ09OVEVYVCwgTlMuSFRNTCk7XG4gICAgfVxuICAgIGNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCkge1xuICAgICAgICB0aGlzLmNsZWFyQmFja1RvKFRBQkxFX1JPV19DT05URVhULCBOUy5IVE1MKTtcbiAgICB9XG4gICAgcmVtb3ZlKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5faW5kZXhPZihlbGVtZW50KTtcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoaWR4ID09PSB0aGlzLnN0YWNrVG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdJRHMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFja1RvcC0tO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVyLm9uSXRlbVBvcChlbGVtZW50LCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9TZWFyY2hcbiAgICB0cnlQZWVrUHJvcGVybHlOZXN0ZWRCb2R5RWxlbWVudCgpIHtcbiAgICAgICAgLy9Qcm9wZXJseSBuZXN0ZWQgPGJvZHk+IGVsZW1lbnQgKHNob3VsZCBiZSBzZWNvbmQgZWxlbWVudCBpbiBzdGFjaykuXG4gICAgICAgIHJldHVybiB0aGlzLnN0YWNrVG9wID49IDEgJiYgdGhpcy50YWdJRHNbMV0gPT09ICQuQk9EWSA/IHRoaXMuaXRlbXNbMV0gOiBudWxsO1xuICAgIH1cbiAgICBjb250YWlucyhlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmRleE9mKGVsZW1lbnQpID4gLTE7XG4gICAgfVxuICAgIGdldENvbW1vbkFuY2VzdG9yKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudElkeCA9IHRoaXMuX2luZGV4T2YoZWxlbWVudCkgLSAxO1xuICAgICAgICByZXR1cm4gZWxlbWVudElkeCA+PSAwID8gdGhpcy5pdGVtc1tlbGVtZW50SWR4XSA6IG51bGw7XG4gICAgfVxuICAgIGlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhY2tUb3AgPT09IDAgJiYgdGhpcy50YWdJRHNbMF0gPT09ICQuSFRNTDtcbiAgICB9XG4gICAgLy9FbGVtZW50IGluIHNjb3BlXG4gICAgaGFzSW5TY29wZSh0YWdOYW1lKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLnRhZ0lEc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IG5zID0gdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSk7XG4gICAgICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUgJiYgbnMgPT09IE5TLkhUTUwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChTQ09QSU5HX0VMRU1FTlRfTlMuZ2V0KHRuKSA9PT0gbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGhhc051bWJlcmVkSGVhZGVySW5TY29wZSgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCB0biA9IHRoaXMudGFnSURzW2ldO1xuICAgICAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgICAgICAgIGlmIChpc051bWJlcmVkSGVhZGVyKHRuKSAmJiBucyA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFNDT1BJTkdfRUxFTUVOVF9OUy5nZXQodG4pID09PSBucykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaGFzSW5MaXN0SXRlbVNjb3BlKHRhZ05hbWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCB0biA9IHRoaXMudGFnSURzW2ldO1xuICAgICAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSAmJiBucyA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCgodG4gPT09ICQuVUwgfHwgdG4gPT09ICQuT0wpICYmIG5zID09PSBOUy5IVE1MKSB8fCBTQ09QSU5HX0VMRU1FTlRfTlMuZ2V0KHRuKSA9PT0gbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGhhc0luQnV0dG9uU2NvcGUodGFnTmFtZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50YWdJRHNbaV07XG4gICAgICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xuICAgICAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lICYmIG5zID09PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHRuID09PSAkLkJVVFRPTiAmJiBucyA9PT0gTlMuSFRNTCkgfHwgU0NPUElOR19FTEVNRU5UX05TLmdldCh0bikgPT09IG5zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBoYXNJblRhYmxlU2NvcGUodGFnTmFtZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50YWdJRHNbaV07XG4gICAgICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xuICAgICAgICAgICAgaWYgKG5zICE9PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG4gPT09IHRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5URU1QTEFURSB8fCB0biA9PT0gJC5IVE1MKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBoYXNUYWJsZUJvZHlDb250ZXh0SW5UYWJsZVNjb3BlKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50YWdJRHNbaV07XG4gICAgICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pO1xuICAgICAgICAgICAgaWYgKG5zICE9PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG4gPT09ICQuVEJPRFkgfHwgdG4gPT09ICQuVEhFQUQgfHwgdG4gPT09ICQuVEZPT1QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0biA9PT0gJC5UQUJMRSB8fCB0biA9PT0gJC5IVE1MKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBoYXNJblNlbGVjdFNjb3BlKHRhZ05hbWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCB0biA9IHRoaXMudGFnSURzW2ldO1xuICAgICAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKTtcbiAgICAgICAgICAgIGlmIChucyAhPT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRuID09PSB0YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG4gIT09ICQuT1BUSU9OICYmIHRuICE9PSAkLk9QVEdST1VQKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvL0ltcGxpZWQgZW5kIHRhZ3NcbiAgICBnZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCkge1xuICAgICAgICB3aGlsZSAoSU1QTElDSVRfRU5EX1RBR19SRVFVSVJFRC5oYXModGhpcy5jdXJyZW50VGFnSWQpKSB7XG4gICAgICAgICAgICB0aGlzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdlbmVyYXRlSW1wbGllZEVuZFRhZ3NUaG9yb3VnaGx5KCkge1xuICAgICAgICB3aGlsZSAoSU1QTElDSVRfRU5EX1RBR19SRVFVSVJFRF9USE9ST1VHSExZLmhhcyh0aGlzLmN1cnJlbnRUYWdJZCkpIHtcbiAgICAgICAgICAgIHRoaXMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oZXhjbHVzaW9uSWQpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuY3VycmVudFRhZ0lkICE9PSBleGNsdXNpb25JZCAmJiBJTVBMSUNJVF9FTkRfVEFHX1JFUVVJUkVEX1RIT1JPVUdITFkuaGFzKHRoaXMuY3VycmVudFRhZ0lkKSkge1xuICAgICAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9wZW4tZWxlbWVudC1zdGFjay5qcy5tYXAiLCAiLy9Db25zdFxuY29uc3QgTk9BSF9BUktfQ0FQQUNJVFkgPSAzO1xuZXhwb3J0IHZhciBFbnRyeVR5cGU7XG4oZnVuY3Rpb24gKEVudHJ5VHlwZSkge1xuICAgIEVudHJ5VHlwZVtFbnRyeVR5cGVbXCJNYXJrZXJcIl0gPSAwXSA9IFwiTWFya2VyXCI7XG4gICAgRW50cnlUeXBlW0VudHJ5VHlwZVtcIkVsZW1lbnRcIl0gPSAxXSA9IFwiRWxlbWVudFwiO1xufSkoRW50cnlUeXBlID0gRW50cnlUeXBlIHx8IChFbnRyeVR5cGUgPSB7fSkpO1xuY29uc3QgTUFSS0VSID0geyB0eXBlOiBFbnRyeVR5cGUuTWFya2VyIH07XG4vL0xpc3Qgb2YgZm9ybWF0dGluZyBlbGVtZW50c1xuZXhwb3J0IGNsYXNzIEZvcm1hdHRpbmdFbGVtZW50TGlzdCB7XG4gICAgY29uc3RydWN0b3IodHJlZUFkYXB0ZXIpIHtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlciA9IHRyZWVBZGFwdGVyO1xuICAgICAgICB0aGlzLmVudHJpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5ib29rbWFyayA9IG51bGw7XG4gICAgfVxuICAgIC8vTm9haCBBcmsncyBjb25kaXRpb25cbiAgICAvL09QVElNSVpBVElPTjogYXQgZmlyc3Qgd2UgdHJ5IHRvIGZpbmQgcG9zc2libGUgY2FuZGlkYXRlcyBmb3IgZXhjbHVzaW9uIHVzaW5nXG4gICAgLy9saWdodHdlaWdodCBoZXVyaXN0aWNzIHdpdGhvdXQgdGhvcm91Z2ggYXR0cmlidXRlcyBjaGVjay5cbiAgICBfZ2V0Tm9haEFya0NvbmRpdGlvbkNhbmRpZGF0ZXMobmV3RWxlbWVudCwgbmVBdHRycykge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGVzID0gW107XG4gICAgICAgIGNvbnN0IG5lQXR0cnNMZW5ndGggPSBuZUF0dHJzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbmVUYWdOYW1lID0gdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG5ld0VsZW1lbnQpO1xuICAgICAgICBjb25zdCBuZU5hbWVzcGFjZVVSSSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKG5ld0VsZW1lbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gRW50cnlUeXBlLk1hcmtlcikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBlbGVtZW50IH0gPSBlbnRyeTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCkgPT09IG5lVGFnTmFtZSAmJlxuICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpID09PSBuZU5hbWVzcGFjZVVSSSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRBdHRycy5sZW5ndGggPT09IG5lQXR0cnNMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKHsgaWR4OiBpLCBhdHRyczogZWxlbWVudEF0dHJzIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2FuZGlkYXRlcztcbiAgICB9XG4gICAgX2Vuc3VyZU5vYWhBcmtDb25kaXRpb24obmV3RWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5lbnRyaWVzLmxlbmd0aCA8IE5PQUhfQVJLX0NBUEFDSVRZKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZUF0dHJzID0gdGhpcy50cmVlQWRhcHRlci5nZXRBdHRyTGlzdChuZXdFbGVtZW50KTtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IHRoaXMuX2dldE5vYWhBcmtDb25kaXRpb25DYW5kaWRhdGVzKG5ld0VsZW1lbnQsIG5lQXR0cnMpO1xuICAgICAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPCBOT0FIX0FSS19DQVBBQ0lUWSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy9OT1RFOiBidWlsZCBhdHRycyBtYXAgZm9yIHRoZSBuZXcgZWxlbWVudCwgc28gd2UgY2FuIHBlcmZvcm0gZmFzdCBsb29rdXBzXG4gICAgICAgIGNvbnN0IG5lQXR0cnNNYXAgPSBuZXcgTWFwKG5lQXR0cnMubWFwKChuZUF0dHIpID0+IFtuZUF0dHIubmFtZSwgbmVBdHRyLnZhbHVlXSkpO1xuICAgICAgICBsZXQgdmFsaWRDYW5kaWRhdGVzID0gMDtcbiAgICAgICAgLy9OT1RFOiByZW1vdmUgYm90dG9tbW9zdCBjYW5kaWRhdGVzLCB1bnRpbCBOb2FoJ3MgQXJrIGNvbmRpdGlvbiB3aWxsIG5vdCBiZSBtZXRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYW5kaWRhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBjYW5kaWRhdGVzW2ldO1xuICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IGBjYW5kaWRhdGUuYXR0cnMubGVuZ3RoID09PSBuZUF0dHJzLmxlbmd0aGBcbiAgICAgICAgICAgIGlmIChjYW5kaWRhdGUuYXR0cnMuZXZlcnkoKGNBdHRyKSA9PiBuZUF0dHJzTWFwLmdldChjQXR0ci5uYW1lKSA9PT0gY0F0dHIudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRDYW5kaWRhdGVzICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkQ2FuZGlkYXRlcyA+PSBOT0FIX0FSS19DQVBBQ0lUWSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGNhbmRpZGF0ZS5pZHgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvL011dGF0aW9uc1xuICAgIGluc2VydE1hcmtlcigpIHtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnVuc2hpZnQoTUFSS0VSKTtcbiAgICB9XG4gICAgcHVzaEVsZW1lbnQoZWxlbWVudCwgdG9rZW4pIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlTm9haEFya0NvbmRpdGlvbihlbGVtZW50KTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnVuc2hpZnQoe1xuICAgICAgICAgICAgdHlwZTogRW50cnlUeXBlLkVsZW1lbnQsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbnNlcnRFbGVtZW50QWZ0ZXJCb29rbWFyayhlbGVtZW50LCB0b2tlbikge1xuICAgICAgICBjb25zdCBib29rbWFya0lkeCA9IHRoaXMuZW50cmllcy5pbmRleE9mKHRoaXMuYm9va21hcmspO1xuICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGJvb2ttYXJrSWR4LCAwLCB7XG4gICAgICAgICAgICB0eXBlOiBFbnRyeVR5cGUuRWxlbWVudCxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlbW92ZUVudHJ5KGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IGVudHJ5SW5kZXggPSB0aGlzLmVudHJpZXMuaW5kZXhPZihlbnRyeSk7XG4gICAgICAgIGlmIChlbnRyeUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoZW50cnlJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBsaXN0IG9mIGZvcm1hdHRpbmcgZWxlbWVudHMgdXAgdG8gdGhlIGxhc3QgbWFya2VyLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjY2xlYXItdGhlLWxpc3Qtb2YtYWN0aXZlLWZvcm1hdHRpbmctZWxlbWVudHMtdXAtdG8tdGhlLWxhc3QtbWFya2VyXG4gICAgICovXG4gICAgY2xlYXJUb0xhc3RNYXJrZXIoKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlcklkeCA9IHRoaXMuZW50cmllcy5pbmRleE9mKE1BUktFUik7XG4gICAgICAgIGlmIChtYXJrZXJJZHggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZSgwLCBtYXJrZXJJZHggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vU2VhcmNoXG4gICAgZ2V0RWxlbWVudEVudHJ5SW5TY29wZVdpdGhUYWdOYW1lKHRhZ05hbWUpIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXMuZmluZCgoZW50cnkpID0+IGVudHJ5LnR5cGUgPT09IEVudHJ5VHlwZS5NYXJrZXIgfHwgdGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVudHJ5LmVsZW1lbnQpID09PSB0YWdOYW1lKTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnR5cGUgPT09IEVudHJ5VHlwZS5FbGVtZW50ID8gZW50cnkgOiBudWxsO1xuICAgIH1cbiAgICBnZXRFbGVtZW50RW50cnkoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS50eXBlID09PSBFbnRyeVR5cGUuRWxlbWVudCAmJiBlbnRyeS5lbGVtZW50ID09PSBlbGVtZW50KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JtYXR0aW5nLWVsZW1lbnQtbGlzdC5qcy5tYXAiLCAiaW1wb3J0IHsgRE9DVU1FTlRfTU9ERSB9IGZyb20gJy4uL2NvbW1vbi9odG1sLmpzJztcbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZU5hbWU6ICcjdGV4dCcsXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBwYXJlbnROb2RlOiBudWxsLFxuICAgIH07XG59XG5leHBvcnQgY29uc3QgZGVmYXVsdFRyZWVBZGFwdGVyID0ge1xuICAgIC8vTm9kZSBjb25zdHJ1Y3Rpb25cbiAgICBjcmVhdGVEb2N1bWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGVOYW1lOiAnI2RvY3VtZW50JyxcbiAgICAgICAgICAgIG1vZGU6IERPQ1VNRU5UX01PREUuTk9fUVVJUktTLFxuICAgICAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnQtZnJhZ21lbnQnLFxuICAgICAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGVOYW1lOiB0YWdOYW1lLFxuICAgICAgICAgICAgdGFnTmFtZSxcbiAgICAgICAgICAgIGF0dHJzLFxuICAgICAgICAgICAgbmFtZXNwYWNlVVJJLFxuICAgICAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgICAgICBwYXJlbnROb2RlOiBudWxsLFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgY3JlYXRlQ29tbWVudE5vZGUoZGF0YSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZU5hbWU6ICcjY29tbWVudCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIC8vVHJlZSBtdXRhdGlvblxuICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIG5ld05vZGUpIHtcbiAgICAgICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnB1c2gobmV3Tm9kZSk7XG4gICAgICAgIG5ld05vZGUucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgfSxcbiAgICBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgbmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkge1xuICAgICAgICBjb25zdCBpbnNlcnRpb25JZHggPSBwYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihyZWZlcmVuY2VOb2RlKTtcbiAgICAgICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xuICAgICAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICAgIH0sXG4gICAgc2V0VGVtcGxhdGVDb250ZW50KHRlbXBsYXRlRWxlbWVudCwgY29udGVudEVsZW1lbnQpIHtcbiAgICAgICAgdGVtcGxhdGVFbGVtZW50LmNvbnRlbnQgPSBjb250ZW50RWxlbWVudDtcbiAgICB9LFxuICAgIGdldFRlbXBsYXRlQ29udGVudCh0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlRWxlbWVudC5jb250ZW50O1xuICAgIH0sXG4gICAgc2V0RG9jdW1lbnRUeXBlKGRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcbiAgICAgICAgY29uc3QgZG9jdHlwZU5vZGUgPSBkb2N1bWVudC5jaGlsZE5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnRUeXBlJyk7XG4gICAgICAgIGlmIChkb2N0eXBlTm9kZSkge1xuICAgICAgICAgICAgZG9jdHlwZU5vZGUubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICBkb2N0eXBlTm9kZS5wdWJsaWNJZCA9IHB1YmxpY0lkO1xuICAgICAgICAgICAgZG9jdHlwZU5vZGUuc3lzdGVtSWQgPSBzeXN0ZW1JZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnRUeXBlJyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHB1YmxpY0lkLFxuICAgICAgICAgICAgICAgIHN5c3RlbUlkLFxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGU6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGVmYXVsdFRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGRvY3VtZW50LCBub2RlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2V0RG9jdW1lbnRNb2RlKGRvY3VtZW50LCBtb2RlKSB7XG4gICAgICAgIGRvY3VtZW50Lm1vZGUgPSBtb2RlO1xuICAgIH0sXG4gICAgZ2V0RG9jdW1lbnRNb2RlKGRvY3VtZW50KSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5tb2RlO1xuICAgIH0sXG4gICAgZGV0YWNoTm9kZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2Yobm9kZSk7XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUuY2hpbGROb2Rlcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGluc2VydFRleHQocGFyZW50Tm9kZSwgdGV4dCkge1xuICAgICAgICBpZiAocGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzW3BhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0VHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShwcmV2Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBwcmV2Tm9kZS52YWx1ZSArPSB0ZXh0O1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0VHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50Tm9kZSwgY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xuICAgIH0sXG4gICAgaW5zZXJ0VGV4dEJlZm9yZShwYXJlbnROb2RlLCB0ZXh0LCByZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgIGNvbnN0IHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzW3BhcmVudE5vZGUuY2hpbGROb2Rlcy5pbmRleE9mKHJlZmVyZW5jZU5vZGUpIC0gMV07XG4gICAgICAgIGlmIChwcmV2Tm9kZSAmJiBkZWZhdWx0VHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShwcmV2Tm9kZSkpIHtcbiAgICAgICAgICAgIHByZXZOb2RlLnZhbHVlICs9IHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VHJlZUFkYXB0ZXIuaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGNyZWF0ZVRleHROb2RlKHRleHQpLCByZWZlcmVuY2VOb2RlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgYWRvcHRBdHRyaWJ1dGVzKHJlY2lwaWVudCwgYXR0cnMpIHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50QXR0cnNNYXAgPSBuZXcgU2V0KHJlY2lwaWVudC5hdHRycy5tYXAoKGF0dHIpID0+IGF0dHIubmFtZSkpO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGF0dHJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoIXJlY2lwaWVudEF0dHJzTWFwLmhhcyhhdHRyc1tqXS5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHJlY2lwaWVudC5hdHRycy5wdXNoKGF0dHJzW2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy9UcmVlIHRyYXZlcnNpbmdcbiAgICBnZXRGaXJzdENoaWxkKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGROb2Rlc1swXTtcbiAgICB9LFxuICAgIGdldENoaWxkTm9kZXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzO1xuICAgIH0sXG4gICAgZ2V0UGFyZW50Tm9kZShub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLnBhcmVudE5vZGU7XG4gICAgfSxcbiAgICBnZXRBdHRyTGlzdChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmF0dHJzO1xuICAgIH0sXG4gICAgLy9Ob2RlIGRhdGFcbiAgICBnZXRUYWdOYW1lKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQudGFnTmFtZTtcbiAgICB9LFxuICAgIGdldE5hbWVzcGFjZVVSSShlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Lm5hbWVzcGFjZVVSSTtcbiAgICB9LFxuICAgIGdldFRleHROb2RlQ29udGVudCh0ZXh0Tm9kZSkge1xuICAgICAgICByZXR1cm4gdGV4dE5vZGUudmFsdWU7XG4gICAgfSxcbiAgICBnZXRDb21tZW50Tm9kZUNvbnRlbnQoY29tbWVudE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGNvbW1lbnROb2RlLmRhdGE7XG4gICAgfSxcbiAgICBnZXREb2N1bWVudFR5cGVOb2RlTmFtZShkb2N0eXBlTm9kZSkge1xuICAgICAgICByZXR1cm4gZG9jdHlwZU5vZGUubmFtZTtcbiAgICB9LFxuICAgIGdldERvY3VtZW50VHlwZU5vZGVQdWJsaWNJZChkb2N0eXBlTm9kZSkge1xuICAgICAgICByZXR1cm4gZG9jdHlwZU5vZGUucHVibGljSWQ7XG4gICAgfSxcbiAgICBnZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQoZG9jdHlwZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGRvY3R5cGVOb2RlLnN5c3RlbUlkO1xuICAgIH0sXG4gICAgLy9Ob2RlIHR5cGVzXG4gICAgaXNUZXh0Tm9kZShub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI3RleHQnO1xuICAgIH0sXG4gICAgaXNDb21tZW50Tm9kZShub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnI2NvbW1lbnQnO1xuICAgIH0sXG4gICAgaXNEb2N1bWVudFR5cGVOb2RlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnRUeXBlJztcbiAgICB9LFxuICAgIGlzRWxlbWVudE5vZGUobm9kZSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsICd0YWdOYW1lJyk7XG4gICAgfSxcbiAgICAvLyBTb3VyY2UgY29kZSBsb2NhdGlvblxuICAgIHNldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24obm9kZSwgbG9jYXRpb24pIHtcbiAgICAgICAgbm9kZS5zb3VyY2VDb2RlTG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICB9LFxuICAgIGdldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24obm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5zb3VyY2VDb2RlTG9jYXRpb247XG4gICAgfSxcbiAgICB1cGRhdGVOb2RlU291cmNlQ29kZUxvY2F0aW9uKG5vZGUsIGVuZExvY2F0aW9uKSB7XG4gICAgICAgIG5vZGUuc291cmNlQ29kZUxvY2F0aW9uID0geyAuLi5ub2RlLnNvdXJjZUNvZGVMb2NhdGlvbiwgLi4uZW5kTG9jYXRpb24gfTtcbiAgICB9LFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHQuanMubWFwIiwgImltcG9ydCB7IERPQ1VNRU5UX01PREUgfSBmcm9tICcuL2h0bWwuanMnO1xuLy9Db25zdFxuY29uc3QgVkFMSURfRE9DVFlQRV9OQU1FID0gJ2h0bWwnO1xuY29uc3QgVkFMSURfU1lTVEVNX0lEID0gJ2Fib3V0OmxlZ2FjeS1jb21wYXQnO1xuY29uc3QgUVVJUktTX01PREVfU1lTVEVNX0lEID0gJ2h0dHA6Ly93d3cuaWJtLmNvbS9kYXRhL2R0ZC92MTEvaWJteGh0bWwxLXRyYW5zaXRpb25hbC5kdGQnO1xuY29uc3QgUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xuICAgICcrLy9zaWxtYXJpbC8vZHRkIGh0bWwgcHJvIHYwcjExIDE5OTcwMTAxLy8nLFxuICAgICctLy9hcy8vZHRkIGh0bWwgMy4wIGFzd2VkaXQgKyBleHRlbnNpb25zLy8nLFxuICAgICctLy9hZHZhc29mdCBsdGQvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDEvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMCBsZXZlbCAyLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMi8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjFlLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAzLjAvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDMuMiBmaW5hbC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMy4yLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAzLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDEvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAyLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbC8vJyxcbiAgICAnLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvLycsXG4gICAgJy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sIHN0cmljdC8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwvLycsXG4gICAgJy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvLycsXG4gICAgJy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sIHN0cmljdC8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwvLycsXG4gICAgJy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvLycsXG4gICAgJy0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgaHRtbC8vJyxcbiAgICAnLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBzdHJpY3QgaHRtbC8vJyxcbiAgICBcIi0vL28ncmVpbGx5IGFuZCBhc3NvY2lhdGVzLy9kdGQgaHRtbCAyLjAvL1wiLFxuICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIGV4dGVuZGVkIDEuMC8vXCIsXG4gICAgXCItLy9vJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgZXh0ZW5kZWQgcmVsYXhlZCAxLjAvL1wiLFxuICAgICctLy9zcS8vZHRkIGh0bWwgMi4wIGhvdG1ldGFsICsgZXh0ZW5zaW9ucy8vJyxcbiAgICAnLS8vc29mdHF1YWQgc29mdHdhcmUvL2R0ZCBob3RtZXRhbCBwcm8gNi4wOjoxOTk5MDYwMTo6ZXh0ZW5zaW9ucyB0byBodG1sIDQuMC8vJyxcbiAgICAnLS8vc29mdHF1YWQvL2R0ZCBob3RtZXRhbCBwcm8gNC4wOjoxOTk3MTAxMDo6ZXh0ZW5zaW9ucyB0byBodG1sIDQuMC8vJyxcbiAgICAnLS8vc3B5Z2xhc3MvL2R0ZCBodG1sIDIuMCBleHRlbmRlZC8vJyxcbiAgICAnLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgaHRtbC8vJyxcbiAgICAnLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgc3RyaWN0IGh0bWwvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgMyAxOTk1LTAzLTI0Ly8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDMuMiBkcmFmdC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCAzLjIgZmluYWwvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgMy4yLy8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDMuMnMgZHJhZnQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wIGZyYW1lc2V0Ly8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDE5OTYwNzEyLy8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCA5NzA0MjEvLycsXG4gICAgJy0vL3czYy8vZHRkIHczIGh0bWwvLycsXG4gICAgJy0vL3czby8vZHRkIHczIGh0bWwgMy4wLy8nLFxuICAgICctLy93ZWJ0ZWNocy8vZHRkIG1vemlsbGEgaHRtbCAyLjAvLycsXG4gICAgJy0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sLy8nLFxuXTtcbmNvbnN0IFFVSVJLU19NT0RFX05PX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVMgPSBbXG4gICAgLi4uUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDQuMDEgZnJhbWVzZXQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLycsXG5dO1xuY29uc3QgUVVJUktTX01PREVfUFVCTElDX0lEUyA9IG5ldyBTZXQoW1xuICAgICctLy93M28vL2R0ZCB3MyBodG1sIHN0cmljdCAzLjAvL2VuLy8nLFxuICAgICctL3czYy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsL2VuJyxcbiAgICAnaHRtbCcsXG5dKTtcbmNvbnN0IExJTUlURURfUVVJUktTX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFsnLS8vdzNjLy9kdGQgeGh0bWwgMS4wIGZyYW1lc2V0Ly8nLCAnLS8vdzNjLy9kdGQgeGh0bWwgMS4wIHRyYW5zaXRpb25hbC8vJ107XG5jb25zdCBMSU1JVEVEX1FVSVJLU19XSVRIX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVMgPSBbXG4gICAgLi4uTElNSVRFRF9RVUlSS1NfUFVCTElDX0lEX1BSRUZJWEVTLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDQuMDEgZnJhbWVzZXQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLycsXG5dO1xuLy9VdGlsc1xuZnVuY3Rpb24gaGFzUHJlZml4KHB1YmxpY0lkLCBwcmVmaXhlcykge1xuICAgIHJldHVybiBwcmVmaXhlcy5zb21lKChwcmVmaXgpID0+IHB1YmxpY0lkLnN0YXJ0c1dpdGgocHJlZml4KSk7XG59XG4vL0FQSVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uZm9ybWluZyh0b2tlbikge1xuICAgIHJldHVybiAodG9rZW4ubmFtZSA9PT0gVkFMSURfRE9DVFlQRV9OQU1FICYmXG4gICAgICAgIHRva2VuLnB1YmxpY0lkID09PSBudWxsICYmXG4gICAgICAgICh0b2tlbi5zeXN0ZW1JZCA9PT0gbnVsbCB8fCB0b2tlbi5zeXN0ZW1JZCA9PT0gVkFMSURfU1lTVEVNX0lEKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRNb2RlKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLm5hbWUgIT09IFZBTElEX0RPQ1RZUEVfTkFNRSkge1xuICAgICAgICByZXR1cm4gRE9DVU1FTlRfTU9ERS5RVUlSS1M7XG4gICAgfVxuICAgIGNvbnN0IHsgc3lzdGVtSWQgfSA9IHRva2VuO1xuICAgIGlmIChzeXN0ZW1JZCAmJiBzeXN0ZW1JZC50b0xvd2VyQ2FzZSgpID09PSBRVUlSS1NfTU9ERV9TWVNURU1fSUQpIHtcbiAgICAgICAgcmV0dXJuIERPQ1VNRU5UX01PREUuUVVJUktTO1xuICAgIH1cbiAgICBsZXQgeyBwdWJsaWNJZCB9ID0gdG9rZW47XG4gICAgaWYgKHB1YmxpY0lkICE9PSBudWxsKSB7XG4gICAgICAgIHB1YmxpY0lkID0gcHVibGljSWQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKFFVSVJLU19NT0RFX1BVQkxJQ19JRFMuaGFzKHB1YmxpY0lkKSkge1xuICAgICAgICAgICAgcmV0dXJuIERPQ1VNRU5UX01PREUuUVVJUktTO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwcmVmaXhlcyA9IHN5c3RlbUlkID09PSBudWxsID8gUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyA6IFFVSVJLU19NT0RFX1BVQkxJQ19JRF9QUkVGSVhFUztcbiAgICAgICAgaWYgKGhhc1ByZWZpeChwdWJsaWNJZCwgcHJlZml4ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gRE9DVU1FTlRfTU9ERS5RVUlSS1M7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZml4ZXMgPVxuICAgICAgICAgICAgc3lzdGVtSWQgPT09IG51bGwgPyBMSU1JVEVEX1FVSVJLU19QVUJMSUNfSURfUFJFRklYRVMgOiBMSU1JVEVEX1FVSVJLU19XSVRIX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVM7XG4gICAgICAgIGlmIChoYXNQcmVmaXgocHVibGljSWQsIHByZWZpeGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIERPQ1VNRU5UX01PREUuTElNSVRFRF9RVUlSS1M7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIERPQ1VNRU5UX01PREUuTk9fUVVJUktTO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZG9jdHlwZS5qcy5tYXAiLCAiaW1wb3J0IHsgVEFHX0lEIGFzICQsIE5TLCBBVFRSUywgZ2V0VGFnSUQgfSBmcm9tICcuL2h0bWwuanMnO1xuLy9NSU1FIHR5cGVzXG5jb25zdCBNSU1FX1RZUEVTID0ge1xuICAgIFRFWFRfSFRNTDogJ3RleHQvaHRtbCcsXG4gICAgQVBQTElDQVRJT05fWE1MOiAnYXBwbGljYXRpb24veGh0bWwreG1sJyxcbn07XG4vL0F0dHJpYnV0ZXNcbmNvbnN0IERFRklOSVRJT05fVVJMX0FUVFIgPSAnZGVmaW5pdGlvbnVybCc7XG5jb25zdCBBREpVU1RFRF9ERUZJTklUSU9OX1VSTF9BVFRSID0gJ2RlZmluaXRpb25VUkwnO1xuY29uc3QgU1ZHX0FUVFJTX0FESlVTVE1FTlRfTUFQID0gbmV3IE1hcChbXG4gICAgJ2F0dHJpYnV0ZU5hbWUnLFxuICAgICdhdHRyaWJ1dGVUeXBlJyxcbiAgICAnYmFzZUZyZXF1ZW5jeScsXG4gICAgJ2Jhc2VQcm9maWxlJyxcbiAgICAnY2FsY01vZGUnLFxuICAgICdjbGlwUGF0aFVuaXRzJyxcbiAgICAnZGlmZnVzZUNvbnN0YW50JyxcbiAgICAnZWRnZU1vZGUnLFxuICAgICdmaWx0ZXJVbml0cycsXG4gICAgJ2dseXBoUmVmJyxcbiAgICAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxuICAgICdncmFkaWVudFVuaXRzJyxcbiAgICAna2VybmVsTWF0cml4JyxcbiAgICAna2VybmVsVW5pdExlbmd0aCcsXG4gICAgJ2tleVBvaW50cycsXG4gICAgJ2tleVNwbGluZXMnLFxuICAgICdrZXlUaW1lcycsXG4gICAgJ2xlbmd0aEFkanVzdCcsXG4gICAgJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcbiAgICAnbWFya2VySGVpZ2h0JyxcbiAgICAnbWFya2VyVW5pdHMnLFxuICAgICdtYXJrZXJXaWR0aCcsXG4gICAgJ21hc2tDb250ZW50VW5pdHMnLFxuICAgICdtYXNrVW5pdHMnLFxuICAgICdudW1PY3RhdmVzJyxcbiAgICAncGF0aExlbmd0aCcsXG4gICAgJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxuICAgICdwYXR0ZXJuVHJhbnNmb3JtJyxcbiAgICAncGF0dGVyblVuaXRzJyxcbiAgICAncG9pbnRzQXRYJyxcbiAgICAncG9pbnRzQXRZJyxcbiAgICAncG9pbnRzQXRaJyxcbiAgICAncHJlc2VydmVBbHBoYScsXG4gICAgJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICAgICdwcmltaXRpdmVVbml0cycsXG4gICAgJ3JlZlgnLFxuICAgICdyZWZZJyxcbiAgICAncmVwZWF0Q291bnQnLFxuICAgICdyZXBlYXREdXInLFxuICAgICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxuICAgICdyZXF1aXJlZEZlYXR1cmVzJyxcbiAgICAnc3BlY3VsYXJDb25zdGFudCcsXG4gICAgJ3NwZWN1bGFyRXhwb25lbnQnLFxuICAgICdzcHJlYWRNZXRob2QnLFxuICAgICdzdGFydE9mZnNldCcsXG4gICAgJ3N0ZERldmlhdGlvbicsXG4gICAgJ3N0aXRjaFRpbGVzJyxcbiAgICAnc3VyZmFjZVNjYWxlJyxcbiAgICAnc3lzdGVtTGFuZ3VhZ2UnLFxuICAgICd0YWJsZVZhbHVlcycsXG4gICAgJ3RhcmdldFgnLFxuICAgICd0YXJnZXRZJyxcbiAgICAndGV4dExlbmd0aCcsXG4gICAgJ3ZpZXdCb3gnLFxuICAgICd2aWV3VGFyZ2V0JyxcbiAgICAneENoYW5uZWxTZWxlY3RvcicsXG4gICAgJ3lDaGFubmVsU2VsZWN0b3InLFxuICAgICd6b29tQW5kUGFuJyxcbl0ubWFwKChhdHRyKSA9PiBbYXR0ci50b0xvd2VyQ2FzZSgpLCBhdHRyXSkpO1xuY29uc3QgWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQID0gbmV3IE1hcChbXG4gICAgWyd4bGluazphY3R1YXRlJywgeyBwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdhY3R1YXRlJywgbmFtZXNwYWNlOiBOUy5YTElOSyB9XSxcbiAgICBbJ3hsaW5rOmFyY3JvbGUnLCB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2FyY3JvbGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LIH1dLFxuICAgIFsneGxpbms6aHJlZicsIHsgcHJlZml4OiAneGxpbmsnLCBuYW1lOiAnaHJlZicsIG5hbWVzcGFjZTogTlMuWExJTksgfV0sXG4gICAgWyd4bGluazpyb2xlJywgeyBwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdyb2xlJywgbmFtZXNwYWNlOiBOUy5YTElOSyB9XSxcbiAgICBbJ3hsaW5rOnNob3cnLCB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3Nob3cnLCBuYW1lc3BhY2U6IE5TLlhMSU5LIH1dLFxuICAgIFsneGxpbms6dGl0bGUnLCB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3RpdGxlJywgbmFtZXNwYWNlOiBOUy5YTElOSyB9XSxcbiAgICBbJ3hsaW5rOnR5cGUnLCB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ3R5cGUnLCBuYW1lc3BhY2U6IE5TLlhMSU5LIH1dLFxuICAgIFsneG1sOmJhc2UnLCB7IHByZWZpeDogJ3htbCcsIG5hbWU6ICdiYXNlJywgbmFtZXNwYWNlOiBOUy5YTUwgfV0sXG4gICAgWyd4bWw6bGFuZycsIHsgcHJlZml4OiAneG1sJywgbmFtZTogJ2xhbmcnLCBuYW1lc3BhY2U6IE5TLlhNTCB9XSxcbiAgICBbJ3htbDpzcGFjZScsIHsgcHJlZml4OiAneG1sJywgbmFtZTogJ3NwYWNlJywgbmFtZXNwYWNlOiBOUy5YTUwgfV0sXG4gICAgWyd4bWxucycsIHsgcHJlZml4OiAnJywgbmFtZTogJ3htbG5zJywgbmFtZXNwYWNlOiBOUy5YTUxOUyB9XSxcbiAgICBbJ3htbG5zOnhsaW5rJywgeyBwcmVmaXg6ICd4bWxucycsIG5hbWU6ICd4bGluaycsIG5hbWVzcGFjZTogTlMuWE1MTlMgfV0sXG5dKTtcbi8vU1ZHIHRhZyBuYW1lcyBhZGp1c3RtZW50IG1hcFxuZXhwb3J0IGNvbnN0IFNWR19UQUdfTkFNRVNfQURKVVNUTUVOVF9NQVAgPSBuZXcgTWFwKFtcbiAgICAnYWx0R2x5cGgnLFxuICAgICdhbHRHbHlwaERlZicsXG4gICAgJ2FsdEdseXBoSXRlbScsXG4gICAgJ2FuaW1hdGVDb2xvcicsXG4gICAgJ2FuaW1hdGVNb3Rpb24nLFxuICAgICdhbmltYXRlVHJhbnNmb3JtJyxcbiAgICAnY2xpcFBhdGgnLFxuICAgICdmZUJsZW5kJyxcbiAgICAnZmVDb2xvck1hdHJpeCcsXG4gICAgJ2ZlQ29tcG9uZW50VHJhbnNmZXInLFxuICAgICdmZUNvbXBvc2l0ZScsXG4gICAgJ2ZlQ29udm9sdmVNYXRyaXgnLFxuICAgICdmZURpZmZ1c2VMaWdodGluZycsXG4gICAgJ2ZlRGlzcGxhY2VtZW50TWFwJyxcbiAgICAnZmVEaXN0YW50TGlnaHQnLFxuICAgICdmZUZsb29kJyxcbiAgICAnZmVGdW5jQScsXG4gICAgJ2ZlRnVuY0InLFxuICAgICdmZUZ1bmNHJyxcbiAgICAnZmVGdW5jUicsXG4gICAgJ2ZlR2F1c3NpYW5CbHVyJyxcbiAgICAnZmVJbWFnZScsXG4gICAgJ2ZlTWVyZ2UnLFxuICAgICdmZU1lcmdlTm9kZScsXG4gICAgJ2ZlTW9ycGhvbG9neScsXG4gICAgJ2ZlT2Zmc2V0JyxcbiAgICAnZmVQb2ludExpZ2h0JyxcbiAgICAnZmVTcGVjdWxhckxpZ2h0aW5nJyxcbiAgICAnZmVTcG90TGlnaHQnLFxuICAgICdmZVRpbGUnLFxuICAgICdmZVR1cmJ1bGVuY2UnLFxuICAgICdmb3JlaWduT2JqZWN0JyxcbiAgICAnZ2x5cGhSZWYnLFxuICAgICdsaW5lYXJHcmFkaWVudCcsXG4gICAgJ3JhZGlhbEdyYWRpZW50JyxcbiAgICAndGV4dFBhdGgnLFxuXS5tYXAoKHRuKSA9PiBbdG4udG9Mb3dlckNhc2UoKSwgdG5dKSk7XG4vL1RhZ3MgdGhhdCBjYXVzZXMgZXhpdCBmcm9tIGZvcmVpZ24gY29udGVudFxuY29uc3QgRVhJVFNfRk9SRUlHTl9DT05URU5UID0gbmV3IFNldChbXG4gICAgJC5CLFxuICAgICQuQklHLFxuICAgICQuQkxPQ0tRVU9URSxcbiAgICAkLkJPRFksXG4gICAgJC5CUixcbiAgICAkLkNFTlRFUixcbiAgICAkLkNPREUsXG4gICAgJC5ERCxcbiAgICAkLkRJVixcbiAgICAkLkRMLFxuICAgICQuRFQsXG4gICAgJC5FTSxcbiAgICAkLkVNQkVELFxuICAgICQuSDEsXG4gICAgJC5IMixcbiAgICAkLkgzLFxuICAgICQuSDQsXG4gICAgJC5INSxcbiAgICAkLkg2LFxuICAgICQuSEVBRCxcbiAgICAkLkhSLFxuICAgICQuSSxcbiAgICAkLklNRyxcbiAgICAkLkxJLFxuICAgICQuTElTVElORyxcbiAgICAkLk1FTlUsXG4gICAgJC5NRVRBLFxuICAgICQuTk9CUixcbiAgICAkLk9MLFxuICAgICQuUCxcbiAgICAkLlBSRSxcbiAgICAkLlJVQlksXG4gICAgJC5TLFxuICAgICQuU01BTEwsXG4gICAgJC5TUEFOLFxuICAgICQuU1RST05HLFxuICAgICQuU1RSSUtFLFxuICAgICQuU1VCLFxuICAgICQuU1VQLFxuICAgICQuVEFCTEUsXG4gICAgJC5UVCxcbiAgICAkLlUsXG4gICAgJC5VTCxcbiAgICAkLlZBUixcbl0pO1xuLy9DaGVjayBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XG5leHBvcnQgZnVuY3Rpb24gY2F1c2VzRXhpdChzdGFydFRhZ1Rva2VuKSB7XG4gICAgY29uc3QgdG4gPSBzdGFydFRhZ1Rva2VuLnRhZ0lEO1xuICAgIGNvbnN0IGlzRm9udFdpdGhBdHRycyA9IHRuID09PSAkLkZPTlQgJiZcbiAgICAgICAgc3RhcnRUYWdUb2tlbi5hdHRycy5zb21lKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gQVRUUlMuQ09MT1IgfHwgbmFtZSA9PT0gQVRUUlMuU0laRSB8fCBuYW1lID09PSBBVFRSUy5GQUNFKTtcbiAgICByZXR1cm4gaXNGb250V2l0aEF0dHJzIHx8IEVYSVRTX0ZPUkVJR05fQ09OVEVOVC5oYXModG4pO1xufVxuLy9Ub2tlbiBhZGp1c3RtZW50c1xuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0b2tlbi5hdHRyc1tpXS5uYW1lID09PSBERUZJTklUSU9OX1VSTF9BVFRSKSB7XG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gQURKVVNURURfREVGSU5JVElPTl9VUkxfQVRUUjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdFRva2VuU1ZHQXR0cnModG9rZW4pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkQXR0ck5hbWUgPSBTVkdfQVRUUlNfQURKVVNUTUVOVF9NQVAuZ2V0KHRva2VuLmF0dHJzW2ldLm5hbWUpO1xuICAgICAgICBpZiAoYWRqdXN0ZWRBdHRyTmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyTmFtZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b2tlbi5hdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBhZGp1c3RlZEF0dHJFbnRyeSA9IFhNTF9BVFRSU19BREpVU1RNRU5UX01BUC5nZXQodG9rZW4uYXR0cnNbaV0ubmFtZSk7XG4gICAgICAgIGlmIChhZGp1c3RlZEF0dHJFbnRyeSkge1xuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ucHJlZml4ID0gYWRqdXN0ZWRBdHRyRW50cnkucHJlZml4O1xuICAgICAgICAgICAgdG9rZW4uYXR0cnNbaV0ubmFtZSA9IGFkanVzdGVkQXR0ckVudHJ5Lm5hbWU7XG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lc3BhY2UgPSBhZGp1c3RlZEF0dHJFbnRyeS5uYW1lc3BhY2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0VG9rZW5TVkdUYWdOYW1lKHRva2VuKSB7XG4gICAgY29uc3QgYWRqdXN0ZWRUYWdOYW1lID0gU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUC5nZXQodG9rZW4udGFnTmFtZSk7XG4gICAgaWYgKGFkanVzdGVkVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIHRva2VuLnRhZ05hbWUgPSBhZGp1c3RlZFRhZ05hbWU7XG4gICAgICAgIHRva2VuLnRhZ0lEID0gZ2V0VGFnSUQodG9rZW4udGFnTmFtZSk7XG4gICAgfVxufVxuLy9JbnRlZ3JhdGlvbiBwb2ludHNcbmZ1bmN0aW9uIGlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKSB7XG4gICAgcmV0dXJuIG5zID09PSBOUy5NQVRITUwgJiYgKHRuID09PSAkLk1JIHx8IHRuID09PSAkLk1PIHx8IHRuID09PSAkLk1OIHx8IHRuID09PSAkLk1TIHx8IHRuID09PSAkLk1URVhUKTtcbn1cbmZ1bmN0aW9uIGlzSHRtbEludGVncmF0aW9uUG9pbnQodG4sIG5zLCBhdHRycykge1xuICAgIGlmIChucyA9PT0gTlMuTUFUSE1MICYmIHRuID09PSAkLkFOTk9UQVRJT05fWE1MKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhdHRyc1tpXS5uYW1lID09PSBBVFRSUy5FTkNPRElORykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXR0cnNbaV0udmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IE1JTUVfVFlQRVMuVEVYVF9IVE1MIHx8IHZhbHVlID09PSBNSU1FX1RZUEVTLkFQUExJQ0FUSU9OX1hNTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnMgPT09IE5TLlNWRyAmJiAodG4gPT09ICQuRk9SRUlHTl9PQkpFQ1QgfHwgdG4gPT09ICQuREVTQyB8fCB0biA9PT0gJC5USVRMRSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlZ3JhdGlvblBvaW50KHRuLCBucywgYXR0cnMsIGZvcmVpZ25OUykge1xuICAgIHJldHVybiAoKCghZm9yZWlnbk5TIHx8IGZvcmVpZ25OUyA9PT0gTlMuSFRNTCkgJiYgaXNIdG1sSW50ZWdyYXRpb25Qb2ludCh0biwgbnMsIGF0dHJzKSkgfHxcbiAgICAgICAgKCghZm9yZWlnbk5TIHx8IGZvcmVpZ25OUyA9PT0gTlMuTUFUSE1MKSAmJiBpc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KHRuLCBucykpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZvcmVpZ24tY29udGVudC5qcy5tYXAiLCAiaW1wb3J0IHsgVG9rZW5pemVyLCBUb2tlbml6ZXJNb2RlIH0gZnJvbSAnLi4vdG9rZW5pemVyL2luZGV4LmpzJztcbmltcG9ydCB7IE9wZW5FbGVtZW50U3RhY2sgfSBmcm9tICcuL29wZW4tZWxlbWVudC1zdGFjay5qcyc7XG5pbXBvcnQgeyBGb3JtYXR0aW5nRWxlbWVudExpc3QsIEVudHJ5VHlwZSB9IGZyb20gJy4vZm9ybWF0dGluZy1lbGVtZW50LWxpc3QuanMnO1xuaW1wb3J0IHsgZGVmYXVsdFRyZWVBZGFwdGVyIH0gZnJvbSAnLi4vdHJlZS1hZGFwdGVycy9kZWZhdWx0LmpzJztcbmltcG9ydCAqIGFzIGRvY3R5cGUgZnJvbSAnLi4vY29tbW9uL2RvY3R5cGUuanMnO1xuaW1wb3J0ICogYXMgZm9yZWlnbkNvbnRlbnQgZnJvbSAnLi4vY29tbW9uL2ZvcmVpZ24tY29udGVudC5qcyc7XG5pbXBvcnQgeyBFUlIgfSBmcm9tICcuLi9jb21tb24vZXJyb3ItY29kZXMuanMnO1xuaW1wb3J0ICogYXMgdW5pY29kZSBmcm9tICcuLi9jb21tb24vdW5pY29kZS5qcyc7XG5pbXBvcnQgeyBUQUdfSUQgYXMgJCwgVEFHX05BTUVTIGFzIFROLCBOUywgQVRUUlMsIFNQRUNJQUxfRUxFTUVOVFMsIERPQ1VNRU5UX01PREUsIGlzTnVtYmVyZWRIZWFkZXIsIGdldFRhZ0lELCB9IGZyb20gJy4uL2NvbW1vbi9odG1sLmpzJztcbmltcG9ydCB7IFRva2VuVHlwZSwgZ2V0VG9rZW5BdHRyLCB9IGZyb20gJy4uL2NvbW1vbi90b2tlbi5qcyc7XG4vL01pc2MgY29uc3RhbnRzXG5jb25zdCBISURERU5fSU5QVVRfVFlQRSA9ICdoaWRkZW4nO1xuLy9BZG9wdGlvbiBhZ2VuY3kgbG9vcHMgaXRlcmF0aW9uIGNvdW50XG5jb25zdCBBQV9PVVRFUl9MT09QX0lURVIgPSA4O1xuY29uc3QgQUFfSU5ORVJfTE9PUF9JVEVSID0gMztcbi8vSW5zZXJ0aW9uIG1vZGVzXG52YXIgSW5zZXJ0aW9uTW9kZTtcbihmdW5jdGlvbiAoSW5zZXJ0aW9uTW9kZSkge1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOSVRJQUxcIl0gPSAwXSA9IFwiSU5JVElBTFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIkJFRk9SRV9IVE1MXCJdID0gMV0gPSBcIkJFRk9SRV9IVE1MXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiQkVGT1JFX0hFQURcIl0gPSAyXSA9IFwiQkVGT1JFX0hFQURcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9IRUFEXCJdID0gM10gPSBcIklOX0hFQURcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9IRUFEX05PX1NDUklQVFwiXSA9IDRdID0gXCJJTl9IRUFEX05PX1NDUklQVFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIkFGVEVSX0hFQURcIl0gPSA1XSA9IFwiQUZURVJfSEVBRFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX0JPRFlcIl0gPSA2XSA9IFwiSU5fQk9EWVwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIlRFWFRcIl0gPSA3XSA9IFwiVEVYVFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX1RBQkxFXCJdID0gOF0gPSBcIklOX1RBQkxFXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fVEFCTEVfVEVYVFwiXSA9IDldID0gXCJJTl9UQUJMRV9URVhUXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fQ0FQVElPTlwiXSA9IDEwXSA9IFwiSU5fQ0FQVElPTlwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX0NPTFVNTl9HUk9VUFwiXSA9IDExXSA9IFwiSU5fQ09MVU1OX0dST1VQXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fVEFCTEVfQk9EWVwiXSA9IDEyXSA9IFwiSU5fVEFCTEVfQk9EWVwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX1JPV1wiXSA9IDEzXSA9IFwiSU5fUk9XXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fQ0VMTFwiXSA9IDE0XSA9IFwiSU5fQ0VMTFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX1NFTEVDVFwiXSA9IDE1XSA9IFwiSU5fU0VMRUNUXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fU0VMRUNUX0lOX1RBQkxFXCJdID0gMTZdID0gXCJJTl9TRUxFQ1RfSU5fVEFCTEVcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9URU1QTEFURVwiXSA9IDE3XSA9IFwiSU5fVEVNUExBVEVcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJBRlRFUl9CT0RZXCJdID0gMThdID0gXCJBRlRFUl9CT0RZXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fRlJBTUVTRVRcIl0gPSAxOV0gPSBcIklOX0ZSQU1FU0VUXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiQUZURVJfRlJBTUVTRVRcIl0gPSAyMF0gPSBcIkFGVEVSX0ZSQU1FU0VUXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiQUZURVJfQUZURVJfQk9EWVwiXSA9IDIxXSA9IFwiQUZURVJfQUZURVJfQk9EWVwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIkFGVEVSX0FGVEVSX0ZSQU1FU0VUXCJdID0gMjJdID0gXCJBRlRFUl9BRlRFUl9GUkFNRVNFVFwiO1xufSkoSW5zZXJ0aW9uTW9kZSB8fCAoSW5zZXJ0aW9uTW9kZSA9IHt9KSk7XG5jb25zdCBCQVNFX0xPQyA9IHtcbiAgICBzdGFydExpbmU6IC0xLFxuICAgIHN0YXJ0Q29sOiAtMSxcbiAgICBzdGFydE9mZnNldDogLTEsXG4gICAgZW5kTGluZTogLTEsXG4gICAgZW5kQ29sOiAtMSxcbiAgICBlbmRPZmZzZXQ6IC0xLFxufTtcbmNvbnN0IFRBQkxFX1NUUlVDVFVSRV9UQUdTID0gbmV3IFNldChbJC5UQUJMRSwgJC5UQk9EWSwgJC5URk9PVCwgJC5USEVBRCwgJC5UUl0pO1xuY29uc3QgZGVmYXVsdFBhcnNlck9wdGlvbnMgPSB7XG4gICAgc2NyaXB0aW5nRW5hYmxlZDogdHJ1ZSxcbiAgICBzb3VyY2VDb2RlTG9jYXRpb25JbmZvOiBmYWxzZSxcbiAgICB0cmVlQWRhcHRlcjogZGVmYXVsdFRyZWVBZGFwdGVyLFxuICAgIG9uUGFyc2VFcnJvcjogbnVsbCxcbn07XG4vL1BhcnNlclxuZXhwb3J0IGNsYXNzIFBhcnNlciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgZG9jdW1lbnQsIGZyYWdtZW50Q29udGV4dCA9IG51bGwsIHNjcmlwdEhhbmRsZXIgPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0ID0gZnJhZ21lbnRDb250ZXh0O1xuICAgICAgICB0aGlzLnNjcmlwdEhhbmRsZXIgPSBzY3JpcHRIYW5kbGVyO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOSVRJQUw7XG4gICAgICAgIHRoaXMub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTklUSUFMO1xuICAgICAgICB0aGlzLmhlYWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgdGhpcy5mb3JtRWxlbWVudCA9IG51bGw7XG4gICAgICAgIC8qKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBub2RlIGlzIG5vdCBhbiBlbGVtZW50IGluIHRoZSBIVE1MIG5hbWVzcGFjZSAqL1xuICAgICAgICB0aGlzLmN1cnJlbnROb3RJbkhUTUwgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB0ZW1wbGF0ZSBpbnNlcnRpb24gbW9kZSBzdGFjayBpcyBtYWludGFpbmVkIGZyb20gdGhlIGxlZnQuXG4gICAgICAgICAqIEllLiB0aGUgdG9wbW9zdCBlbGVtZW50IHdpbGwgYWx3YXlzIGhhdmUgaW5kZXggMC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjayA9IFtdO1xuICAgICAgICB0aGlzLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMgPSBbXTtcbiAgICAgICAgdGhpcy5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9zdGVyUGFyZW50aW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0UGFyc2VyT3B0aW9ucyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIgPSB0aGlzLm9wdGlvbnMudHJlZUFkYXB0ZXI7XG4gICAgICAgIHRoaXMub25QYXJzZUVycm9yID0gdGhpcy5vcHRpb25zLm9uUGFyc2VFcnJvcjtcbiAgICAgICAgLy8gQWx3YXlzIGVuYWJsZSBsb2NhdGlvbiBpbmZvIGlmIHdlIHJlcG9ydCBwYXJzZSBlcnJvcnMuXG4gICAgICAgIGlmICh0aGlzLm9uUGFyc2VFcnJvcikge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnNvdXJjZUNvZGVMb2NhdGlvbkluZm8gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9jdW1lbnQgPSBkb2N1bWVudCAhPT0gbnVsbCAmJiBkb2N1bWVudCAhPT0gdm9pZCAwID8gZG9jdW1lbnQgOiB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50KCk7XG4gICAgICAgIHRoaXMudG9rZW5pemVyID0gbmV3IFRva2VuaXplcih0aGlzLm9wdGlvbnMsIHRoaXMpO1xuICAgICAgICB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cyA9IG5ldyBGb3JtYXR0aW5nRWxlbWVudExpc3QodGhpcy50cmVlQWRhcHRlcik7XG4gICAgICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0SUQgPSBmcmFnbWVudENvbnRleHQgPyBnZXRUYWdJRCh0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZnJhZ21lbnRDb250ZXh0KSkgOiAkLlVOS05PV047XG4gICAgICAgIHRoaXMuX3NldENvbnRleHRNb2RlcyhmcmFnbWVudENvbnRleHQgIT09IG51bGwgJiYgZnJhZ21lbnRDb250ZXh0ICE9PSB2b2lkIDAgPyBmcmFnbWVudENvbnRleHQgOiB0aGlzLmRvY3VtZW50LCB0aGlzLmZyYWdtZW50Q29udGV4dElEKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMgPSBuZXcgT3BlbkVsZW1lbnRTdGFjayh0aGlzLmRvY3VtZW50LCB0aGlzLnRyZWVBZGFwdGVyLCB0aGlzKTtcbiAgICB9XG4gICAgLy8gQVBJXG4gICAgc3RhdGljIHBhcnNlKGh0bWwsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IHRoaXMob3B0aW9ucyk7XG4gICAgICAgIHBhcnNlci50b2tlbml6ZXIud3JpdGUoaHRtbCwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBwYXJzZXIuZG9jdW1lbnQ7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRGcmFnbWVudFBhcnNlcihmcmFnbWVudENvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRQYXJzZXJPcHRpb25zLFxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgLy9OT1RFOiB1c2UgYSA8dGVtcGxhdGU+IGVsZW1lbnQgYXMgdGhlIGZyYWdtZW50IGNvbnRleHQgaWYgbm8gY29udGV4dCBlbGVtZW50IHdhcyBwcm92aWRlZCxcbiAgICAgICAgLy9zbyB3ZSB3aWxsIHBhcnNlIGluIGEgXCJmb3JnaXZpbmdcIiBtYW5uZXJcbiAgICAgICAgZnJhZ21lbnRDb250ZXh0ICE9PSBudWxsICYmIGZyYWdtZW50Q29udGV4dCAhPT0gdm9pZCAwID8gZnJhZ21lbnRDb250ZXh0IDogKGZyYWdtZW50Q29udGV4dCA9IG9wdHMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudChUTi5URU1QTEFURSwgTlMuSFRNTCwgW10pKTtcbiAgICAgICAgLy9OT1RFOiBjcmVhdGUgYSBmYWtlIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIHRoZSBgZG9jdW1lbnRgIGZvciBmcmFnbWVudCBwYXJzaW5nLlxuICAgICAgICAvL1RoaXMgaXMgaW1wb3J0YW50IGZvciBqc2RvbSwgd2hlcmUgYSBuZXcgYGRvY3VtZW50YCBjYW5ub3QgYmUgY3JlYXRlZC4gVGhpcyBsZWQgdG9cbiAgICAgICAgLy9mcmFnbWVudCBwYXJzaW5nIG1lc3Npbmcgd2l0aCB0aGUgbWFpbiBgZG9jdW1lbnRgLlxuICAgICAgICBjb25zdCBkb2N1bWVudE1vY2sgPSBvcHRzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoJ2RvY3VtZW50bW9jaycsIE5TLkhUTUwsIFtdKTtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IHRoaXMob3B0cywgZG9jdW1lbnRNb2NrLCBmcmFnbWVudENvbnRleHQpO1xuICAgICAgICBpZiAocGFyc2VyLmZyYWdtZW50Q29udGV4dElEID09PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgICAgICBwYXJzZXIudG1wbEluc2VydGlvbk1vZGVTdGFjay51bnNoaWZ0KEluc2VydGlvbk1vZGUuSU5fVEVNUExBVEUpO1xuICAgICAgICB9XG4gICAgICAgIHBhcnNlci5faW5pdFRva2VuaXplckZvckZyYWdtZW50UGFyc2luZygpO1xuICAgICAgICBwYXJzZXIuX2luc2VydEZha2VSb290RWxlbWVudCgpO1xuICAgICAgICBwYXJzZXIuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwYXJzZXIuX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQoKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlcjtcbiAgICB9XG4gICAgZ2V0RnJhZ21lbnQoKSB7XG4gICAgICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRGaXJzdENoaWxkKHRoaXMuZG9jdW1lbnQpO1xuICAgICAgICBjb25zdCBmcmFnbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICB0aGlzLl9hZG9wdE5vZGVzKHJvb3RFbGVtZW50LCBmcmFnbWVudCk7XG4gICAgICAgIHJldHVybiBmcmFnbWVudDtcbiAgICB9XG4gICAgLy9FcnJvcnNcbiAgICBfZXJyKHRva2VuLCBjb2RlLCBiZWZvcmVUb2tlbikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghdGhpcy5vblBhcnNlRXJyb3IpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxvYyA9IChfYSA9IHRva2VuLmxvY2F0aW9uKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBCQVNFX0xPQztcbiAgICAgICAgY29uc3QgZXJyID0ge1xuICAgICAgICAgICAgY29kZSxcbiAgICAgICAgICAgIHN0YXJ0TGluZTogbG9jLnN0YXJ0TGluZSxcbiAgICAgICAgICAgIHN0YXJ0Q29sOiBsb2Muc3RhcnRDb2wsXG4gICAgICAgICAgICBzdGFydE9mZnNldDogbG9jLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgZW5kTGluZTogYmVmb3JlVG9rZW4gPyBsb2Muc3RhcnRMaW5lIDogbG9jLmVuZExpbmUsXG4gICAgICAgICAgICBlbmRDb2w6IGJlZm9yZVRva2VuID8gbG9jLnN0YXJ0Q29sIDogbG9jLmVuZENvbCxcbiAgICAgICAgICAgIGVuZE9mZnNldDogYmVmb3JlVG9rZW4gPyBsb2Muc3RhcnRPZmZzZXQgOiBsb2MuZW5kT2Zmc2V0LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uUGFyc2VFcnJvcihlcnIpO1xuICAgIH1cbiAgICAvL1N0YWNrIGV2ZW50c1xuICAgIG9uSXRlbVB1c2gobm9kZSwgdGlkLCBpc1RvcCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLnRyZWVBZGFwdGVyKS5vbkl0ZW1QdXNoKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgbm9kZSk7XG4gICAgICAgIGlmIChpc1RvcCAmJiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA+IDApXG4gICAgICAgICAgICB0aGlzLl9zZXRDb250ZXh0TW9kZXMobm9kZSwgdGlkKTtcbiAgICB9XG4gICAgb25JdGVtUG9wKG5vZGUsIGlzVG9wKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc291cmNlQ29kZUxvY2F0aW9uSW5mbykge1xuICAgICAgICAgICAgdGhpcy5fc2V0RW5kTG9jYXRpb24obm9kZSwgdGhpcy5jdXJyZW50VG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMudHJlZUFkYXB0ZXIpLm9uSXRlbVBvcCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIG5vZGUsIHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQpO1xuICAgICAgICBpZiAoaXNUb3ApIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50O1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRUYWdJZDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcbiAgICAgICAgICAgICAgICBjdXJyZW50VGFnSWQgPSB0aGlzLmZyYWdtZW50Q29udGV4dElEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgKHsgY3VycmVudCwgY3VycmVudFRhZ0lkIH0gPSB0aGlzLm9wZW5FbGVtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9zZXRDb250ZXh0TW9kZXMoY3VycmVudCwgY3VycmVudFRhZ0lkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfc2V0Q29udGV4dE1vZGVzKGN1cnJlbnQsIHRpZCkge1xuICAgICAgICBjb25zdCBpc0hUTUwgPSBjdXJyZW50ID09PSB0aGlzLmRvY3VtZW50IHx8IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpID09PSBOUy5IVE1MO1xuICAgICAgICB0aGlzLmN1cnJlbnROb3RJbkhUTUwgPSAhaXNIVE1MO1xuICAgICAgICB0aGlzLnRva2VuaXplci5pbkZvcmVpZ25Ob2RlID0gIWlzSFRNTCAmJiAhdGhpcy5faXNJbnRlZ3JhdGlvblBvaW50KHRpZCwgY3VycmVudCk7XG4gICAgfVxuICAgIF9zd2l0Y2hUb1RleHRQYXJzaW5nKGN1cnJlbnRUb2tlbiwgbmV4dFRva2VuaXplclN0YXRlKSB7XG4gICAgICAgIHRoaXMuX2luc2VydEVsZW1lbnQoY3VycmVudFRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBuZXh0VG9rZW5pemVyU3RhdGU7XG4gICAgICAgIHRoaXMub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gdGhpcy5pbnNlcnRpb25Nb2RlO1xuICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLlRFWFQ7XG4gICAgfVxuICAgIHN3aXRjaFRvUGxhaW50ZXh0UGFyc2luZygpIHtcbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5URVhUO1xuICAgICAgICB0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXJNb2RlLlBMQUlOVEVYVDtcbiAgICB9XG4gICAgLy9GcmFnbWVudCBwYXJzaW5nXG4gICAgX2dldEFkanVzdGVkQ3VycmVudEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA9PT0gMCAmJiB0aGlzLmZyYWdtZW50Q29udGV4dFxuICAgICAgICAgICAgPyB0aGlzLmZyYWdtZW50Q29udGV4dFxuICAgICAgICAgICAgOiB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgIH1cbiAgICBfZmluZEZvcm1JbkZyYWdtZW50Q29udGV4dCgpIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcbiAgICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobm9kZSkgPT09IFROLkZPUk0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1FbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFBhcmVudE5vZGUobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcoKSB7XG4gICAgICAgIGlmICghdGhpcy5mcmFnbWVudENvbnRleHQgfHwgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5mcmFnbWVudENvbnRleHQpICE9PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmZyYWdtZW50Q29udGV4dElEKSB7XG4gICAgICAgICAgICBjYXNlICQuVElUTEU6XG4gICAgICAgICAgICBjYXNlICQuVEVYVEFSRUE6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplck1vZGUuUkNEQVRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLlNUWUxFOlxuICAgICAgICAgICAgY2FzZSAkLlhNUDpcbiAgICAgICAgICAgIGNhc2UgJC5JRlJBTUU6XG4gICAgICAgICAgICBjYXNlICQuTk9FTUJFRDpcbiAgICAgICAgICAgIGNhc2UgJC5OT0ZSQU1FUzpcbiAgICAgICAgICAgIGNhc2UgJC5OT1NDUklQVDoge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyTW9kZS5SQVdURVhUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLlNDUklQVDoge1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyTW9kZS5TQ1JJUFRfREFUQTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5QTEFJTlRFWFQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplck1vZGUuUExBSU5URVhUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvL1RyZWUgbXV0YXRpb25cbiAgICBfc2V0RG9jdW1lbnRUeXBlKHRva2VuKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b2tlbi5uYW1lIHx8ICcnO1xuICAgICAgICBjb25zdCBwdWJsaWNJZCA9IHRva2VuLnB1YmxpY0lkIHx8ICcnO1xuICAgICAgICBjb25zdCBzeXN0ZW1JZCA9IHRva2VuLnN5c3RlbUlkIHx8ICcnO1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnNldERvY3VtZW50VHlwZSh0aGlzLmRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpO1xuICAgICAgICBpZiAodG9rZW4ubG9jYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50Q2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5kb2N1bWVudCk7XG4gICAgICAgICAgICBjb25zdCBkb2NUeXBlTm9kZSA9IGRvY3VtZW50Q2hpbGRyZW4uZmluZCgobm9kZSkgPT4gdGhpcy50cmVlQWRhcHRlci5pc0RvY3VtZW50VHlwZU5vZGUobm9kZSkpO1xuICAgICAgICAgICAgaWYgKGRvY1R5cGVOb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGRvY1R5cGVOb2RlLCB0b2tlbi5sb2NhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCwgbG9jYXRpb24pIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICBjb25zdCBsb2MgPSBsb2NhdGlvbiAmJiB7XG4gICAgICAgICAgICAgICAgLi4ubG9jYXRpb24sXG4gICAgICAgICAgICAgICAgc3RhcnRUYWc6IGxvY2F0aW9uLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuc2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbihlbGVtZW50LCBsb2MpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zaG91bGRGb3N0ZXJQYXJlbnRPbkluc2VydGlvbigpKSB7XG4gICAgICAgICAgICB0aGlzLl9mb3N0ZXJQYXJlbnRFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50T3JOb2RlO1xuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChwYXJlbnQsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9hcHBlbmRFbGVtZW50KHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0b2tlbi50YWdOYW1lLCBuYW1lc3BhY2VVUkksIHRva2VuLmF0dHJzKTtcbiAgICAgICAgdGhpcy5fYXR0YWNoRWxlbWVudFRvVHJlZShlbGVtZW50LCB0b2tlbi5sb2NhdGlvbik7XG4gICAgfVxuICAgIF9pbnNlcnRFbGVtZW50KHRva2VuLCBuYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0b2tlbi50YWdOYW1lLCBuYW1lc3BhY2VVUkksIHRva2VuLmF0dHJzKTtcbiAgICAgICAgdGhpcy5fYXR0YWNoRWxlbWVudFRvVHJlZShlbGVtZW50LCB0b2tlbi5sb2NhdGlvbik7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCwgdG9rZW4udGFnSUQpO1xuICAgIH1cbiAgICBfaW5zZXJ0RmFrZUVsZW1lbnQodGFnTmFtZSwgdGFnSUQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBOUy5IVE1MLCBbXSk7XG4gICAgICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCwgbnVsbCk7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCwgdGFnSUQpO1xuICAgIH1cbiAgICBfaW5zZXJ0VGVtcGxhdGUodG9rZW4pIHtcbiAgICAgICAgY29uc3QgdG1wbCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0b2tlbi50YWdOYW1lLCBOUy5IVE1MLCB0b2tlbi5hdHRycyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXRUZW1wbGF0ZUNvbnRlbnQodG1wbCwgY29udGVudCk7XG4gICAgICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUodG1wbCwgdG9rZW4ubG9jYXRpb24pO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wdXNoKHRtcGwsIHRva2VuLnRhZ0lEKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKVxuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGNvbnRlbnQsIG51bGwpO1xuICAgIH1cbiAgICBfaW5zZXJ0RmFrZVJvb3RFbGVtZW50KCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KFROLkhUTUwsIE5TLkhUTUwsIFtdKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKVxuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGVsZW1lbnQsIG51bGwpO1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQsICQuSFRNTCk7XG4gICAgfVxuICAgIF9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnROb2RlID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVDb21tZW50Tm9kZSh0b2tlbi5kYXRhKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChwYXJlbnQsIGNvbW1lbnROb2RlKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnNldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24oY29tbWVudE5vZGUsIHRva2VuLmxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfaW5zZXJ0Q2hhcmFjdGVycyh0b2tlbikge1xuICAgICAgICBsZXQgcGFyZW50O1xuICAgICAgICBsZXQgYmVmb3JlRWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCkpIHtcbiAgICAgICAgICAgICh7IHBhcmVudCwgYmVmb3JlRWxlbWVudCB9ID0gdGhpcy5fZmluZEZvc3RlclBhcmVudGluZ0xvY2F0aW9uKCkpO1xuICAgICAgICAgICAgaWYgKGJlZm9yZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHRCZWZvcmUocGFyZW50LCB0b2tlbi5jaGFycywgYmVmb3JlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQocGFyZW50LCB0b2tlbi5jaGFycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnRPck5vZGU7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmluc2VydFRleHQocGFyZW50LCB0b2tlbi5jaGFycyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0b2tlbi5sb2NhdGlvbilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc2libGluZ3MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXMocGFyZW50KTtcbiAgICAgICAgY29uc3QgdGV4dE5vZGVJZHggPSBiZWZvcmVFbGVtZW50ID8gc2libGluZ3MubGFzdEluZGV4T2YoYmVmb3JlRWxlbWVudCkgOiBzaWJsaW5ncy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gc2libGluZ3NbdGV4dE5vZGVJZHggLSAxXTtcbiAgICAgICAgLy9OT1RFOiBpZiB3ZSBoYXZlIGEgbG9jYXRpb24gYXNzaWduZWQgYnkgYW5vdGhlciB0b2tlbiwgdGhlbiBqdXN0IHVwZGF0ZSB0aGUgZW5kIHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IHRuTG9jID0gdGhpcy50cmVlQWRhcHRlci5nZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKHRleHROb2RlKTtcbiAgICAgICAgaWYgKHRuTG9jKSB7XG4gICAgICAgICAgICBjb25zdCB7IGVuZExpbmUsIGVuZENvbCwgZW5kT2Zmc2V0IH0gPSB0b2tlbi5sb2NhdGlvbjtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIudXBkYXRlTm9kZVNvdXJjZUNvZGVMb2NhdGlvbih0ZXh0Tm9kZSwgeyBlbmRMaW5lLCBlbmRDb2wsIGVuZE9mZnNldCB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc291cmNlQ29kZUxvY2F0aW9uSW5mbykge1xuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKHRleHROb2RlLCB0b2tlbi5sb2NhdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2Fkb3B0Tm9kZXMoZG9ub3IsIHJlY2lwaWVudCkge1xuICAgICAgICBmb3IgKGxldCBjaGlsZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZChkb25vcik7IGNoaWxkOyBjaGlsZCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZChkb25vcikpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShjaGlsZCk7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHJlY2lwaWVudCwgY2hpbGQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9zZXRFbmRMb2NhdGlvbihlbGVtZW50LCBjbG9zaW5nVG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbihlbGVtZW50KSAmJiBjbG9zaW5nVG9rZW4ubG9jYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGN0TG9jID0gY2xvc2luZ1Rva2VuLmxvY2F0aW9uO1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBlbmRMb2MgPSBcbiAgICAgICAgICAgIC8vIE5PVEU6IEZvciBjYXNlcyBsaWtlIDxwPiA8cD4gPC9wPiAtIEZpcnN0ICdwJyBjbG9zZXMgd2l0aG91dCBhIGNsb3NpbmdcbiAgICAgICAgICAgIC8vIHRhZyBhbmQgZm9yIGNhc2VzIGxpa2UgPHRkPiA8cD4gPC90ZD4gLSAncCcgY2xvc2VzIHdpdGhvdXQgYSBjbG9zaW5nIHRhZy5cbiAgICAgICAgICAgIGNsb3NpbmdUb2tlbi50eXBlID09PSBUb2tlblR5cGUuRU5EX1RBRyAmJiB0biA9PT0gY2xvc2luZ1Rva2VuLnRhZ05hbWVcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgZW5kVGFnOiB7IC4uLmN0TG9jIH0sXG4gICAgICAgICAgICAgICAgICAgIGVuZExpbmU6IGN0TG9jLmVuZExpbmUsXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbDogY3RMb2MuZW5kQ29sLFxuICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IGN0TG9jLmVuZE9mZnNldCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGVuZExpbmU6IGN0TG9jLnN0YXJ0TGluZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29sOiBjdExvYy5zdGFydENvbCxcbiAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiBjdExvYy5zdGFydE9mZnNldCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci51cGRhdGVOb2RlU291cmNlQ29kZUxvY2F0aW9uKGVsZW1lbnQsIGVuZExvYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9Ub2tlbiBwcm9jZXNzaW5nXG4gICAgc2hvdWxkUHJvY2Vzc1N0YXJ0VGFnVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSB7XG4gICAgICAgIC8vIENoZWNrIHRoYXQgbmVpdGhlciBjdXJyZW50ID09PSBkb2N1bWVudCwgb3IgbnMgPT09IE5TLkhUTUxcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnROb3RJbkhUTUwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGxldCBjdXJyZW50O1xuICAgICAgICBsZXQgY3VycmVudFRhZ0lkO1xuICAgICAgICBpZiAodGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPT09IDAgJiYgdGhpcy5mcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcbiAgICAgICAgICAgIGN1cnJlbnRUYWdJZCA9IHRoaXMuZnJhZ21lbnRDb250ZXh0SUQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAoeyBjdXJyZW50LCBjdXJyZW50VGFnSWQgfSA9IHRoaXMub3BlbkVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4udGFnSUQgPT09ICQuU1ZHICYmXG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoY3VycmVudCkgPT09IFROLkFOTk9UQVRJT05fWE1MICYmXG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KSA9PT0gTlMuTUFUSE1MKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBgY3VycmVudGAgaXMgbm90IGFuIGludGVncmF0aW9uIHBvaW50IGZvciBIVE1MIG9yIE1hdGhNTCBlbGVtZW50cy5cbiAgICAgICAgdGhpcy50b2tlbml6ZXIuaW5Gb3JlaWduTm9kZSB8fFxuICAgICAgICAgICAgLy8gSWYgaXQgX2lzXyBhbiBpbnRlZ3JhdGlvbiBwb2ludCwgdGhlbiB3ZSBtaWdodCBoYXZlIHRvIGNoZWNrIHRoYXQgaXQgaXMgbm90IGFuIEhUTUxcbiAgICAgICAgICAgIC8vIGludGVncmF0aW9uIHBvaW50LlxuICAgICAgICAgICAgKCh0b2tlbi50YWdJRCA9PT0gJC5NR0xZUEggfHwgdG9rZW4udGFnSUQgPT09ICQuTUFMSUdOTUFSSykgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5faXNJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnRUYWdJZCwgY3VycmVudCwgTlMuSFRNTCkpKTtcbiAgICB9XG4gICAgX3Byb2Nlc3NUb2tlbih0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkNIQVJBQ1RFUjoge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFyYWN0ZXIodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuTlVMTF9DSEFSQUNURVI6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTnVsbENoYXJhY3Rlcih0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5DT01NRU5UOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuRE9DVFlQRToge1xuICAgICAgICAgICAgICAgIHRoaXMub25Eb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLlNUQVJUX1RBRzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NTdGFydFRhZyh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5FTkRfVEFHOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVuZFRhZyh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW9mKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLldISVRFU1BBQ0VfQ0hBUkFDVEVSOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbldoaXRlc3BhY2VDaGFyYWN0ZXIodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vSW50ZWdyYXRpb24gcG9pbnRzXG4gICAgX2lzSW50ZWdyYXRpb25Qb2ludCh0aWQsIGVsZW1lbnQsIGZvcmVpZ25OUykge1xuICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBhdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBmb3JlaWduQ29udGVudC5pc0ludGVncmF0aW9uUG9pbnQodGlkLCBucywgYXR0cnMsIGZvcmVpZ25OUyk7XG4gICAgfVxuICAgIC8vQWN0aXZlIGZvcm1hdHRpbmcgZWxlbWVudHMgcmVjb25zdHJ1Y3Rpb25cbiAgICBfcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RMZW5ndGggPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5lbnRyaWVzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxpc3RMZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllcy5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS50eXBlID09PSBFbnRyeVR5cGUuTWFya2VyIHx8IHRoaXMub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGVudHJ5LmVsZW1lbnQpKTtcbiAgICAgICAgICAgIGNvbnN0IHVub3BlbklkeCA9IGVuZEluZGV4IDwgMCA/IGxpc3RMZW5ndGggLSAxIDogZW5kSW5kZXggLSAxO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHVub3BlbklkeDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmVudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0RWxlbWVudChlbnRyeS50b2tlbiwgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZW50cnkuZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vQ2xvc2UgZWxlbWVudHNcbiAgICBfY2xvc2VUYWJsZUNlbGwoKSB7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZUNlbGxQb3BwZWQoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9ST1c7XG4gICAgfVxuICAgIF9jbG9zZVBFbGVtZW50KCkge1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlApO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5QKTtcbiAgICB9XG4gICAgLy9JbnNlcnRpb24gbW9kZXNcbiAgICBfcmVzZXRJbnNlcnRpb25Nb2RlKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAvL0luc2VydGlvbiBtb2RlIHJlc2V0IG1hcFxuICAgICAgICAgICAgc3dpdGNoIChpID09PSAwICYmIHRoaXMuZnJhZ21lbnRDb250ZXh0ID8gdGhpcy5mcmFnbWVudENvbnRleHRJRCA6IHRoaXMub3BlbkVsZW1lbnRzLnRhZ0lEc1tpXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJC5UUjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1JPVztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuVEJPRFk6XG4gICAgICAgICAgICAgICAgY2FzZSAkLlRIRUFEOlxuICAgICAgICAgICAgICAgIGNhc2UgJC5URk9PVDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLkNBUFRJT046IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJC5DT0xHUk9VUDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuVEFCTEU6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuQk9EWToge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0JPRFk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLkZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fRlJBTUVTRVQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLlNFTEVDVDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGVGb3JTZWxlY3QoaSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLlRFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1swXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuSFRNTDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSB0aGlzLmhlYWRFbGVtZW50ID8gSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEIDogSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuVEQ6XG4gICAgICAgICAgICAgICAgY2FzZSAkLlRIOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9DRUxMO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuSEVBRDoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fSEVBRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9CT0RZO1xuICAgIH1cbiAgICBfcmVzZXRJbnNlcnRpb25Nb2RlRm9yU2VsZWN0KHNlbGVjdElkeCkge1xuICAgICAgICBpZiAoc2VsZWN0SWR4ID4gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHNlbGVjdElkeCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0biA9IHRoaXMub3BlbkVsZW1lbnRzLnRhZ0lEc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAodG4gPT09ICQuVEVNUExBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fU0VMRUNUO1xuICAgIH1cbiAgICAvL0Zvc3RlciBwYXJlbnRpbmdcbiAgICBfaXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKHRuKSB7XG4gICAgICAgIHJldHVybiBUQUJMRV9TVFJVQ1RVUkVfVEFHUy5oYXModG4pO1xuICAgIH1cbiAgICBfc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgJiYgdGhpcy5faXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCk7XG4gICAgfVxuICAgIF9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IG9wZW5FbGVtZW50ID0gdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaV07XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMub3BlbkVsZW1lbnRzLnRhZ0lEc1tpXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkob3BlbkVsZW1lbnQpID09PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBwYXJlbnQ6IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGVtcGxhdGVDb250ZW50KG9wZW5FbGVtZW50KSwgYmVmb3JlRWxlbWVudDogbnVsbCB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuVEFCTEU6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy50cmVlQWRhcHRlci5nZXRQYXJlbnROb2RlKG9wZW5FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcGFyZW50LCBiZWZvcmVFbGVtZW50OiBvcGVuRWxlbWVudCB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhcmVudDogdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbaSAtIDFdLCBiZWZvcmVFbGVtZW50OiBudWxsIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHBhcmVudDogdGhpcy5vcGVuRWxlbWVudHMuaXRlbXNbMF0sIGJlZm9yZUVsZW1lbnQ6IG51bGwgfTtcbiAgICB9XG4gICAgX2Zvc3RlclBhcmVudEVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpO1xuICAgICAgICBpZiAobG9jYXRpb24uYmVmb3JlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5pbnNlcnRCZWZvcmUobG9jYXRpb24ucGFyZW50LCBlbGVtZW50LCBsb2NhdGlvbi5iZWZvcmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQobG9jYXRpb24ucGFyZW50LCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvL1NwZWNpYWwgZWxlbWVudHNcbiAgICBfaXNTcGVjaWFsRWxlbWVudChlbGVtZW50LCBpZCkge1xuICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gU1BFQ0lBTF9FTEVNRU5UU1tuc10uaGFzKGlkKTtcbiAgICB9XG4gICAgb25DaGFyYWN0ZXIodG9rZW4pIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5pemVyLmluRm9yZWlnbk5vZGUpIHtcbiAgICAgICAgICAgIGNoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGhpcy5pbnNlcnRpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5JVElBTDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5Jbml0aWFsTW9kZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hUTUw6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZUh0bWwodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQURfTk9fU0NSSVBUOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkhlYWROb1NjcmlwdCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDoge1xuICAgICAgICAgICAgICAgIHRva2VuQWZ0ZXJIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NBUFRJT046XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ0VMTDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9URU1QTEFURToge1xuICAgICAgICAgICAgICAgIGNoYXJhY3RlckluQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuVEVYVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1Q6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEU6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9ST1c6IHtcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJJblRhYmxlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9URVhUOiB7XG4gICAgICAgICAgICAgICAgY2hhcmFjdGVySW5UYWJsZVRleHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQk9EWToge1xuICAgICAgICAgICAgICAgIHRva2VuQWZ0ZXJCb2R5KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uTnVsbENoYXJhY3Rlcih0b2tlbikge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy50b2tlbml6ZXIuaW5Gb3JlaWduTm9kZSkge1xuICAgICAgICAgICAgbnVsbENoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGhpcy5pbnNlcnRpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5JVElBTDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5Jbml0aWFsTW9kZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hUTUw6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZUh0bWwodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQURfTk9fU0NSSVBUOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkhlYWROb1NjcmlwdCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDoge1xuICAgICAgICAgICAgICAgIHRva2VuQWZ0ZXJIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5URVhUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEU6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9ST1c6IHtcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJJblRhYmxlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DT0xVTU5fR1JPVVA6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkFmdGVyQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQUZURVJfQk9EWToge1xuICAgICAgICAgICAgICAgIHRva2VuQWZ0ZXJBZnRlckJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNvbW1lbnQodG9rZW4pIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudE5vdEluSFRNTCkge1xuICAgICAgICAgICAgYXBwZW5kQ29tbWVudCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmluc2VydGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTklUSUFMOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IVE1MOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IRUFEOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NBUFRJT046XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fUk9XOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVF9JTl9UQUJMRTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9URU1QTEFURTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9GUkFNRVNFVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDoge1xuICAgICAgICAgICAgICAgIGFwcGVuZENvbW1lbnQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX1RFWFQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGVUZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkRvY3R5cGUodG9rZW4pIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgc3dpdGNoICh0aGlzLmluc2VydGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTklUSUFMOiB7XG4gICAgICAgICAgICAgICAgZG9jdHlwZUluSW5pdGlhbE1vZGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IRUFEOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vycih0b2tlbiwgRVJSLm1pc3BsYWNlZERvY3R5cGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX1RFWFQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGVUZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgIH1cbiAgICB9XG4gICAgb25TdGFydFRhZyh0b2tlbikge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICB0aGlzLl9wcm9jZXNzU3RhcnRUYWcodG9rZW4pO1xuICAgICAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcgJiYgIXRva2VuLmFja1NlbGZDbG9zaW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIodG9rZW4sIEVSUi5ub25Wb2lkSHRtbEVsZW1lbnRTdGFydFRhZ1dpdGhUcmFpbGluZ1NvbGlkdXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyBhIGdpdmVuIHN0YXJ0IHRhZy5cbiAgICAgKlxuICAgICAqIGBvblN0YXJ0VGFnYCBjaGVja3MgaWYgYSBzZWxmLWNsb3NpbmcgdGFnIHdhcyByZWNvZ25pemVkLiBXaGVuIGEgdG9rZW5cbiAgICAgKiBpcyBtb3ZlZCBpbmJldHdlZW4gbXVsdGlwbGUgaW5zZXJ0aW9uIG1vZGVzLCB0aGlzIGNoZWNrIGZvciBzZWxmLWNsb3NpbmdcbiAgICAgKiBjb3VsZCBsZWFkIHRvIGZhbHNlIHBvc2l0aXZlcy4gVG8gYXZvaWQgdGhpcywgYF9wcm9jZXNzU3RhcnRUYWdgIGlzIHVzZWRcbiAgICAgKiBmb3IgbmVzdGVkIGNhbGxzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHRva2VuIFRoZSB0b2tlbiB0byBwcm9jZXNzLlxuICAgICAqL1xuICAgIF9wcm9jZXNzU3RhcnRUYWcodG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkUHJvY2Vzc1N0YXJ0VGFnVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSkge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGFnT3V0c2lkZUZvcmVpZ25Db250ZW50KHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfc3RhcnRUYWdPdXRzaWRlRm9yZWlnbkNvbnRlbnQodG9rZW4pIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmluc2VydGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTklUSUFMOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkluaXRpYWxNb2RlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSFRNTDoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnQmVmb3JlSHRtbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0JlZm9yZUhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luSGVhZE5vU2NyaXB0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdBZnRlckhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0JPRFk6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEU6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luVGFibGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX1RFWFQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGVUZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkNhcHRpb24odGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWToge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5UYWJsZUJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1JPVzoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5Sb3codGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luQ2VsbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJblNlbGVjdCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJblNlbGVjdEluVGFibGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJblRlbXBsYXRlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdBZnRlckJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkZyYW1lc2V0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnQWZ0ZXJGcmFtZXNldCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQUZURVJfQk9EWToge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnQWZ0ZXJBZnRlckJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkVuZFRhZyh0b2tlbikge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Tm90SW5IVE1MKSB7XG4gICAgICAgICAgICBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VuZFRhZ091dHNpZGVGb3JlaWduQ29udGVudCh0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX2VuZFRhZ091dHNpZGVGb3JlaWduQ29udGVudCh0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOSVRJQUw6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluSW5pdGlhbE1vZGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IVE1MOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnQmVmb3JlSHRtbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdCZWZvcmVIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5IZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEX05PX1NDUklQVDoge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luSGVhZE5vU2NyaXB0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnQWZ0ZXJIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5Cb2R5KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5URVhUOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5UZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRToge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luVGFibGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX1RFWFQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGVUZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5DYXB0aW9uKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DT0xVTU5fR1JPVVA6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJbkNvbHVtbkdyb3VwKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5UYWJsZUJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1JPVzoge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luUm93KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DRUxMOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5DZWxsKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1Q6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJblNlbGVjdCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5TZWxlY3RJblRhYmxlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9URU1QTEFURToge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luVGVtcGxhdGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdBZnRlckJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5GcmFtZXNldCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfRlJBTUVTRVQ6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdBZnRlckZyYW1lc2V0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uRW9mKHRva2VuKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5pbnNlcnRpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5JVElBTDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5Jbml0aWFsTW9kZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hUTUw6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZUh0bWwodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQURfTk9fU0NSSVBUOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkhlYWROb1NjcmlwdCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDoge1xuICAgICAgICAgICAgICAgIHRva2VuQWZ0ZXJIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NBUFRJT046XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fUk9XOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVF9JTl9UQUJMRToge1xuICAgICAgICAgICAgICAgIGVvZkluQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuVEVYVDoge1xuICAgICAgICAgICAgICAgIGVvZkluVGV4dCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfVEVYVDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZVRleHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgZW9mSW5UZW1wbGF0ZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9GUkFNRVNFVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgc3RvcFBhcnNpbmcodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbldoaXRlc3BhY2VDaGFyYWN0ZXIodG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XG4gICAgICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRva2VuLmNoYXJzLmNoYXJDb2RlQXQoMCkgPT09IHVuaWNvZGUuQ09ERV9QT0lOVFMuTElORV9GRUVEKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLmNoYXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuLmNoYXJzID0gdG9rZW4uY2hhcnMuc3Vic3RyKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRva2VuaXplci5pbkZvcmVpZ25Ob2RlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5URVhUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1Q6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0ZSQU1FU0VUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEVNUExBVEU6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEU6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9ST1c6IHtcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJJblRhYmxlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9URVhUOiB7XG4gICAgICAgICAgICAgICAgd2hpdGVzcGFjZUNoYXJhY3RlckluVGFibGVUZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgIH1cbiAgICB9XG59XG4vL0Fkb3B0aW9uIGFnZW5jeSBhbGdvcml0aG1cbi8vKHNlZTogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdHJlZS1jb25zdHJ1Y3Rpb24uaHRtbCNhZG9wdGlvbkFnZW5jeSlcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vL1N0ZXBzIDUtOCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYU9idGFpbkZvcm1hdHRpbmdFbGVtZW50RW50cnkocCwgdG9rZW4pIHtcbiAgICBsZXQgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSh0b2tlbi50YWdOYW1lKTtcbiAgICBpZiAoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSkge1xuICAgICAgICBpZiAoIXAub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuICAgICAgICAgICAgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG9rZW4udGFnSUQpKSB7XG4gICAgICAgICAgICBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0aW5nRWxlbWVudEVudHJ5O1xufVxuLy9TdGVwcyA5IGFuZCAxMCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYU9idGFpbkZ1cnRoZXN0QmxvY2socCwgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSkge1xuICAgIGxldCBmdXJ0aGVzdEJsb2NrID0gbnVsbDtcbiAgICBsZXQgaWR4ID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7XG4gICAgZm9yICg7IGlkeCA+PSAwOyBpZHgtLSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbaWR4XTtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09IGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHAuX2lzU3BlY2lhbEVsZW1lbnQoZWxlbWVudCwgcC5vcGVuRWxlbWVudHMudGFnSURzW2lkeF0pKSB7XG4gICAgICAgICAgICBmdXJ0aGVzdEJsb2NrID0gZWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZ1cnRoZXN0QmxvY2spIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuc2hvcnRlblRvTGVuZ3RoKGlkeCA8IDAgPyAwIDogaWR4KTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiBmdXJ0aGVzdEJsb2NrO1xufVxuLy9TdGVwIDEzIG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhSW5uZXJMb29wKHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50KSB7XG4gICAgbGV0IGxhc3RFbGVtZW50ID0gZnVydGhlc3RCbG9jaztcbiAgICBsZXQgbmV4dEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3RvcihmdXJ0aGVzdEJsb2NrKTtcbiAgICBmb3IgKGxldCBpID0gMCwgZWxlbWVudCA9IG5leHRFbGVtZW50OyBlbGVtZW50ICE9PSBmb3JtYXR0aW5nRWxlbWVudDsgaSsrLCBlbGVtZW50ID0gbmV4dEVsZW1lbnQpIHtcbiAgICAgICAgLy9OT1RFOiBzdG9yZSB0aGUgbmV4dCBlbGVtZW50IGZvciB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbiAoaXQgbWF5IGJlIGRlbGV0ZWQgZnJvbSB0aGUgc3RhY2sgYnkgc3RlcCA5LjUpXG4gICAgICAgIG5leHRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRFbnRyeSA9IHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmdldEVsZW1lbnRFbnRyeShlbGVtZW50KTtcbiAgICAgICAgY29uc3QgY291bnRlck92ZXJmbG93ID0gZWxlbWVudEVudHJ5ICYmIGkgPj0gQUFfSU5ORVJfTE9PUF9JVEVSO1xuICAgICAgICBjb25zdCBzaG91bGRSZW1vdmVGcm9tT3BlbkVsZW1lbnRzID0gIWVsZW1lbnRFbnRyeSB8fCBjb3VudGVyT3ZlcmZsb3c7XG4gICAgICAgIGlmIChzaG91bGRSZW1vdmVGcm9tT3BlbkVsZW1lbnRzKSB7XG4gICAgICAgICAgICBpZiAoY291bnRlck92ZXJmbG93KSB7XG4gICAgICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZWxlbWVudEVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSBhYVJlY3JlYXRlRWxlbWVudEZyb21FbnRyeShwLCBlbGVtZW50RW50cnkpO1xuICAgICAgICAgICAgaWYgKGxhc3RFbGVtZW50ID09PSBmdXJ0aGVzdEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYm9va21hcmsgPSBlbGVtZW50RW50cnk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUobGFzdEVsZW1lbnQpO1xuICAgICAgICAgICAgcC50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChlbGVtZW50LCBsYXN0RWxlbWVudCk7XG4gICAgICAgICAgICBsYXN0RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxhc3RFbGVtZW50O1xufVxuLy9TdGVwIDEzLjcgb2YgdGhlIGFsZ29yaXRobVxuZnVuY3Rpb24gYWFSZWNyZWF0ZUVsZW1lbnRGcm9tRW50cnkocCwgZWxlbWVudEVudHJ5KSB7XG4gICAgY29uc3QgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHAudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudChlbGVtZW50RW50cnkudG9rZW4udGFnTmFtZSwgbnMsIGVsZW1lbnRFbnRyeS50b2tlbi5hdHRycyk7XG4gICAgcC5vcGVuRWxlbWVudHMucmVwbGFjZShlbGVtZW50RW50cnkuZWxlbWVudCwgbmV3RWxlbWVudCk7XG4gICAgZWxlbWVudEVudHJ5LmVsZW1lbnQgPSBuZXdFbGVtZW50O1xuICAgIHJldHVybiBuZXdFbGVtZW50O1xufVxuLy9TdGVwIDE0IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhSW5zZXJ0TGFzdE5vZGVJbkNvbW1vbkFuY2VzdG9yKHAsIGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCkge1xuICAgIGNvbnN0IHRuID0gcC50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGNvbW1vbkFuY2VzdG9yKTtcbiAgICBjb25zdCB0aWQgPSBnZXRUYWdJRCh0bik7XG4gICAgaWYgKHAuX2lzRWxlbWVudENhdXNlc0Zvc3RlclBhcmVudGluZyh0aWQpKSB7XG4gICAgICAgIHAuX2Zvc3RlclBhcmVudEVsZW1lbnQobGFzdEVsZW1lbnQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjb21tb25BbmNlc3Rvcik7XG4gICAgICAgIGlmICh0aWQgPT09ICQuVEVNUExBVEUgJiYgbnMgPT09IE5TLkhUTUwpIHtcbiAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcC50cmVlQWRhcHRlci5nZXRUZW1wbGF0ZUNvbnRlbnQoY29tbW9uQW5jZXN0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoY29tbW9uQW5jZXN0b3IsIGxhc3RFbGVtZW50KTtcbiAgICB9XG59XG4vL1N0ZXBzIDE1LTE5IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICBjb25zdCBucyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgY29uc3QgeyB0b2tlbiB9ID0gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0gcC50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIG5zLCB0b2tlbi5hdHRycyk7XG4gICAgcC5fYWRvcHROb2RlcyhmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcbiAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGZ1cnRoZXN0QmxvY2ssIG5ld0VsZW1lbnQpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydEVsZW1lbnRBZnRlckJvb2ttYXJrKG5ld0VsZW1lbnQsIHRva2VuKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICBwLm9wZW5FbGVtZW50cy5pbnNlcnRBZnRlcihmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50LCB0b2tlbi50YWdJRCk7XG59XG4vL0FsZ29yaXRobSBlbnRyeSBwb2ludFxuZnVuY3Rpb24gY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBBQV9PVVRFUl9MT09QX0lURVI7IGkrKykge1xuICAgICAgICBjb25zdCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5ID0gYWFPYnRhaW5Gb3JtYXR0aW5nRWxlbWVudEVudHJ5KHAsIHRva2VuKTtcbiAgICAgICAgaWYgKCFmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdXJ0aGVzdEJsb2NrID0gYWFPYnRhaW5GdXJ0aGVzdEJsb2NrKHAsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuICAgICAgICBpZiAoIWZ1cnRoZXN0QmxvY2spIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmJvb2ttYXJrID0gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeTtcbiAgICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjb21tb25BbmNlc3RvciA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShsYXN0RWxlbWVudCk7XG4gICAgICAgIGlmIChjb21tb25BbmNlc3RvcilcbiAgICAgICAgICAgIGFhSW5zZXJ0TGFzdE5vZGVJbkNvbW1vbkFuY2VzdG9yKHAsIGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCk7XG4gICAgICAgIGFhUmVwbGFjZUZvcm1hdHRpbmdFbGVtZW50KHAsIGZ1cnRoZXN0QmxvY2ssIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuICAgIH1cbn1cbi8vR2VuZXJpYyB0b2tlbiBoYW5kbGVyc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGFwcGVuZENvbW1lbnQocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5vcGVuRWxlbWVudHMuY3VycmVudFRtcGxDb250ZW50T3JOb2RlKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENvbW1lbnRUb1Jvb3RIdG1sRWxlbWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLm9wZW5FbGVtZW50cy5pdGVtc1swXSk7XG59XG5mdW5jdGlvbiBhcHBlbmRDb21tZW50VG9Eb2N1bWVudChwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZENvbW1lbnROb2RlKHRva2VuLCBwLmRvY3VtZW50KTtcbn1cbmZ1bmN0aW9uIHN0b3BQYXJzaW5nKHAsIHRva2VuKSB7XG4gICAgcC5zdG9wcGVkID0gdHJ1ZTtcbiAgICAvLyBOT1RFOiBTZXQgZW5kIGxvY2F0aW9ucyBmb3IgZWxlbWVudHMgdGhhdCByZW1haW4gb24gdGhlIG9wZW4gZWxlbWVudCBzdGFjay5cbiAgICBpZiAodG9rZW4ubG9jYXRpb24pIHtcbiAgICAgICAgLy8gTk9URTogSWYgd2UgYXJlIG5vdCBpbiBhIGZyYWdtZW50LCBgaHRtbGAgYW5kIGBib2R5YCB3aWxsIHN0YXkgb24gdGhlIHN0YWNrLlxuICAgICAgICAvLyBUaGlzIGlzIGEgcHJvYmxlbSwgYXMgd2UgbWlnaHQgb3ZlcndyaXRlIHRoZWlyIGVuZCBwb3NpdGlvbiBoZXJlLlxuICAgICAgICBjb25zdCB0YXJnZXQgPSBwLmZyYWdtZW50Q29udGV4dCA/IDAgOiAyO1xuICAgICAgICBmb3IgKGxldCBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gdGFyZ2V0OyBpLS0pIHtcbiAgICAgICAgICAgIHAuX3NldEVuZExvY2F0aW9uKHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFuZGxlIGBodG1sYCBhbmQgYGJvZHlgXG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQgJiYgcC5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1swXTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWxMb2NhdGlvbiA9IHAudHJlZUFkYXB0ZXIuZ2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbihodG1sRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoaHRtbExvY2F0aW9uICYmICFodG1sTG9jYXRpb24uZW5kVGFnKSB7XG4gICAgICAgICAgICAgICAgcC5fc2V0RW5kTG9jYXRpb24oaHRtbEVsZW1lbnQsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPj0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zWzFdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5TG9jYXRpb24gPSBwLnRyZWVBZGFwdGVyLmdldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24oYm9keUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keUxvY2F0aW9uICYmICFib2R5TG9jYXRpb24uZW5kVGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwLl9zZXRFbmRMb2NhdGlvbihib2R5RWxlbWVudCwgdG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuLy8gVGhlIFwiaW5pdGlhbFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZG9jdHlwZUluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcbiAgICBwLl9zZXREb2N1bWVudFR5cGUodG9rZW4pO1xuICAgIGNvbnN0IG1vZGUgPSB0b2tlbi5mb3JjZVF1aXJrcyA/IERPQ1VNRU5UX01PREUuUVVJUktTIDogZG9jdHlwZS5nZXREb2N1bWVudE1vZGUodG9rZW4pO1xuICAgIGlmICghZG9jdHlwZS5pc0NvbmZvcm1pbmcodG9rZW4pKSB7XG4gICAgICAgIHAuX2Vycih0b2tlbiwgRVJSLm5vbkNvbmZvcm1pbmdEb2N0eXBlKTtcbiAgICB9XG4gICAgcC50cmVlQWRhcHRlci5zZXREb2N1bWVudE1vZGUocC5kb2N1bWVudCwgbW9kZSk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSFRNTDtcbn1cbmZ1bmN0aW9uIHRva2VuSW5Jbml0aWFsTW9kZShwLCB0b2tlbikge1xuICAgIHAuX2Vycih0b2tlbiwgRVJSLm1pc3NpbmdEb2N0eXBlLCB0cnVlKTtcbiAgICBwLnRyZWVBZGFwdGVyLnNldERvY3VtZW50TW9kZShwLmRvY3VtZW50LCBET0NVTUVOVF9NT0RFLlFVSVJLUyk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSFRNTDtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuLy8gVGhlIFwiYmVmb3JlIGh0bWxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdJRCA9PT0gJC5IVE1MKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IRUFEO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdCZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAodG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5IRUFEIHx8IHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuQlIpIHtcbiAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0b2tlbkJlZm9yZUh0bWwocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IRUFEO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG4vLyBUaGUgXCJiZWZvcmUgaGVhZFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdCZWZvcmVIZWFkKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuSFRNTDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkhFQUQ6IHtcbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICAgICAgcC5oZWFkRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkJlZm9yZUhlYWQocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnSUQ7XG4gICAgaWYgKHRuID09PSAkLkhFQUQgfHwgdG4gPT09ICQuQk9EWSB8fCB0biA9PT0gJC5IVE1MIHx8IHRuID09PSAkLkJSKSB7XG4gICAgICAgIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwLl9lcnIodG9rZW4sIEVSUi5lbmRUYWdXaXRob3V0TWF0Y2hpbmdPcGVuRWxlbWVudCk7XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZUVsZW1lbnQoVE4uSEVBRCwgJC5IRUFEKTtcbiAgICBwLmhlYWRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cbi8vIFRoZSBcImluIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuSFRNTDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJBU0U6XG4gICAgICAgIGNhc2UgJC5CQVNFRk9OVDpcbiAgICAgICAgY2FzZSAkLkJHU09VTkQ6XG4gICAgICAgIGNhc2UgJC5MSU5LOlxuICAgICAgICBjYXNlICQuTUVUQToge1xuICAgICAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgICAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuVElUTEU6IHtcbiAgICAgICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplck1vZGUuUkNEQVRBKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5OT1NDUklQVDoge1xuICAgICAgICAgICAgaWYgKHAub3B0aW9ucy5zY3JpcHRpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyTW9kZS5SQVdURVhUKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuTk9GUkFNRVM6XG4gICAgICAgIGNhc2UgJC5TVFlMRToge1xuICAgICAgICAgICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyTW9kZS5SQVdURVhUKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5TQ1JJUFQ6IHtcbiAgICAgICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplck1vZGUuU0NSSVBUX0RBVEEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRFTVBMQVRFOiB7XG4gICAgICAgICAgICBwLl9pbnNlcnRUZW1wbGF0ZSh0b2tlbik7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICAgICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9URU1QTEFURTtcbiAgICAgICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFjay51bnNoaWZ0KEluc2VydGlvbk1vZGUuSU5fVEVNUExBVEUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkhFQUQ6IHtcbiAgICAgICAgICAgIHAuX2Vycih0b2tlbiwgRVJSLm1pc3BsYWNlZFN0YXJ0VGFnRm9ySGVhZEVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5IZWFkKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuSEVBRDoge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLkFGVEVSX0hFQUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQk9EWTpcbiAgICAgICAgY2FzZSAkLkJSOlxuICAgICAgICBjYXNlICQuSFRNTDoge1xuICAgICAgICAgICAgdG9rZW5JbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRFTVBMQVRFOiB7XG4gICAgICAgICAgICB0ZW1wbGF0ZUVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBwLl9lcnIodG9rZW4sIEVSUi5lbmRUYWdXaXRob3V0TWF0Y2hpbmdPcGVuRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB0ZW1wbGF0ZUVuZFRhZ0luSGVhZChwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPiAwKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NUaG9yb3VnaGx5KCk7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQgIT09ICQuVEVNUExBVEUpIHtcbiAgICAgICAgICAgIHAuX2Vycih0b2tlbiwgRVJSLmNsb3NpbmdPZkVsZW1lbnRXaXRoT3BlbkNoaWxkRWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlRFTVBMQVRFKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgcC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrLnNoaWZ0KCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fZXJyKHRva2VuLCBFUlIuZW5kVGFnV2l0aG91dE1hdGNoaW5nT3BlbkVsZW1lbnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRva2VuSW5IZWFkKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG4vLyBUaGUgXCJpbiBoZWFkIG5vIHNjcmlwdFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkhlYWROb1NjcmlwdChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CQVNFRk9OVDpcbiAgICAgICAgY2FzZSAkLkJHU09VTkQ6XG4gICAgICAgIGNhc2UgJC5IRUFEOlxuICAgICAgICBjYXNlICQuTElOSzpcbiAgICAgICAgY2FzZSAkLk1FVEE6XG4gICAgICAgIGNhc2UgJC5OT0ZSQU1FUzpcbiAgICAgICAgY2FzZSAkLlNUWUxFOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuTk9TQ1JJUFQ6IHtcbiAgICAgICAgICAgIHAuX2Vycih0b2tlbiwgRVJSLm5lc3RlZE5vc2NyaXB0SW5IZWFkKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHRva2VuSW5IZWFkTm9TY3JpcHQocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5IZWFkTm9TY3JpcHQocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5OT1NDUklQVDoge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQlI6IHtcbiAgICAgICAgICAgIHRva2VuSW5IZWFkTm9TY3JpcHQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcC5fZXJyKHRva2VuLCBFUlIuZW5kVGFnV2l0aG91dE1hdGNoaW5nT3BlbkVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5JbkhlYWROb1NjcmlwdChwLCB0b2tlbikge1xuICAgIGNvbnN0IGVyckNvZGUgPSB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuRU9GID8gRVJSLm9wZW5FbGVtZW50c0xlZnRBZnRlckVvZiA6IEVSUi5kaXNhbGxvd2VkQ29udGVudEluTm9zY3JpcHRJbkhlYWQ7XG4gICAgcC5fZXJyKHRva2VuLCBlcnJDb2RlKTtcbiAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cbi8vIFRoZSBcImFmdGVyIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuSFRNTDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJPRFk6IHtcbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0JPRFk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuRlJBTUVTRVQ6IHtcbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9GUkFNRVNFVDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CQVNFOlxuICAgICAgICBjYXNlICQuQkFTRUZPTlQ6XG4gICAgICAgIGNhc2UgJC5CR1NPVU5EOlxuICAgICAgICBjYXNlICQuTElOSzpcbiAgICAgICAgY2FzZSAkLk1FVEE6XG4gICAgICAgIGNhc2UgJC5OT0ZSQU1FUzpcbiAgICAgICAgY2FzZSAkLlNDUklQVDpcbiAgICAgICAgY2FzZSAkLlNUWUxFOlxuICAgICAgICBjYXNlICQuVEVNUExBVEU6XG4gICAgICAgIGNhc2UgJC5USVRMRToge1xuICAgICAgICAgICAgcC5fZXJyKHRva2VuLCBFUlIuYWJhbmRvbmVkSGVhZEVsZW1lbnRDaGlsZCk7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wdXNoKHAuaGVhZEVsZW1lbnQsICQuSEVBRCk7XG4gICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUocC5oZWFkRWxlbWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuSEVBRDoge1xuICAgICAgICAgICAgcC5fZXJyKHRva2VuLCBFUlIubWlzcGxhY2VkU3RhcnRUYWdGb3JIZWFkRWxlbWVudCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkFmdGVySGVhZChwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdBZnRlckhlYWQocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5CT0RZOlxuICAgICAgICBjYXNlICQuSFRNTDpcbiAgICAgICAgY2FzZSAkLkJSOiB7XG4gICAgICAgICAgICB0b2tlbkFmdGVySGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuVEVNUExBVEU6IHtcbiAgICAgICAgICAgIHRlbXBsYXRlRW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHAuX2Vycih0b2tlbiwgRVJSLmVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZUVsZW1lbnQoVE4uQk9EWSwgJC5CT0RZKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0JPRFk7XG4gICAgbW9kZUluQm9keShwLCB0b2tlbik7XG59XG4vLyBUaGUgXCJpbiBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBtb2RlSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkNIQVJBQ1RFUjoge1xuICAgICAgICAgICAgY2hhcmFjdGVySW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLldISVRFU1BBQ0VfQ0hBUkFDVEVSOiB7XG4gICAgICAgICAgICB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkNPTU1FTlQ6IHtcbiAgICAgICAgICAgIGFwcGVuZENvbW1lbnQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUb2tlblR5cGUuU1RBUlRfVEFHOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFRva2VuVHlwZS5FTkRfVEFHOiB7XG4gICAgICAgICAgICBlbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUb2tlblR5cGUuRU9GOiB7XG4gICAgICAgICAgICBlb2ZJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH1cbn1cbmZ1bmN0aW9uIHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xufVxuZnVuY3Rpb24gY2hhcmFjdGVySW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApIHtcbiAgICAgICAgcC50cmVlQWRhcHRlci5hZG9wdEF0dHJpYnV0ZXMocC5vcGVuRWxlbWVudHMuaXRlbXNbMF0sIHRva2VuLmF0dHJzKTtcbiAgICB9XG59XG5mdW5jdGlvbiBib2R5U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLnRyeVBlZWtQcm9wZXJseU5lc3RlZEJvZHlFbGVtZW50KCk7XG4gICAgaWYgKGJvZHlFbGVtZW50ICYmIHAub3BlbkVsZW1lbnRzLnRtcGxDb3VudCA9PT0gMCkge1xuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICAgICAgcC50cmVlQWRhcHRlci5hZG9wdEF0dHJpYnV0ZXMoYm9keUVsZW1lbnQsIHRva2VuLmF0dHJzKTtcbiAgICB9XG59XG5mdW5jdGlvbiBmcmFtZXNldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgYm9keUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy50cnlQZWVrUHJvcGVybHlOZXN0ZWRCb2R5RWxlbWVudCgpO1xuICAgIGlmIChwLmZyYW1lc2V0T2sgJiYgYm9keUVsZW1lbnQpIHtcbiAgICAgICAgcC50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGJvZHlFbGVtZW50KTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wQWxsVXBUb0h0bWxFbGVtZW50KCk7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0ZSQU1FU0VUO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuICAgIH1cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cbmZ1bmN0aW9uIG51bWJlcmVkSGVhZGVyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyZWRIZWFkZXIocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICB9XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5mdW5jdGlvbiBwcmVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuICAgIH1cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAvL05PVEU6IElmIHRoZSBuZXh0IHRva2VuIGlzIGEgVSswMDBBIExJTkUgRkVFRCAoTEYpIGNoYXJhY3RlciB0b2tlbiwgdGhlbiBpZ25vcmUgdGhhdCB0b2tlbiBhbmQgbW92ZVxuICAgIC8vb24gdG8gdGhlIG5leHQgb25lLiAoTmV3bGluZXMgYXQgdGhlIHN0YXJ0IG9mIHByZSBibG9ja3MgYXJlIGlnbm9yZWQgYXMgYW4gYXV0aG9yaW5nIGNvbnZlbmllbmNlLilcbiAgICBwLnNraXBOZXh0TmV3TGluZSA9IHRydWU7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5mdW5jdGlvbiBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMDtcbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgfHwgaW5UZW1wbGF0ZSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKSB7XG4gICAgICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgIGlmICghaW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcC5mb3JtRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBsaXN0SXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBmb3IgKGxldCBpID0gcC5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IHAub3BlbkVsZW1lbnRzLnRhZ0lEc1tpXTtcbiAgICAgICAgaWYgKCh0biA9PT0gJC5MSSAmJiBlbGVtZW50SWQgPT09ICQuTEkpIHx8XG4gICAgICAgICAgICAoKHRuID09PSAkLkREIHx8IHRuID09PSAkLkRUKSAmJiAoZWxlbWVudElkID09PSAkLkREIHx8IGVsZW1lbnRJZCA9PT0gJC5EVCkpKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbihlbGVtZW50SWQpO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKGVsZW1lbnRJZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudElkICE9PSAkLkFERFJFU1MgJiZcbiAgICAgICAgICAgIGVsZW1lbnRJZCAhPT0gJC5ESVYgJiZcbiAgICAgICAgICAgIGVsZW1lbnRJZCAhPT0gJC5QICYmXG4gICAgICAgICAgICBwLl9pc1NwZWNpYWxFbGVtZW50KHAub3BlbkVsZW1lbnRzLml0ZW1zW2ldLCBlbGVtZW50SWQpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5mdW5jdGlvbiBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuICAgIH1cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplck1vZGUuUExBSU5URVhUO1xufVxuZnVuY3Rpb24gYnV0dG9uU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLkJVVFRPTikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5CVVRUT04pO1xuICAgIH1cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuZnVuY3Rpb24gYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudEVudHJ5ID0gcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZ2V0RWxlbWVudEVudHJ5SW5TY29wZVdpdGhUYWdOYW1lKFROLkEpO1xuICAgIGlmIChhY3RpdmVFbGVtZW50RW50cnkpIHtcbiAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGFjdGl2ZUVsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoYWN0aXZlRWxlbWVudEVudHJ5KTtcbiAgICB9XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5mdW5jdGlvbiBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cbmZ1bmN0aW9uIG5vYnJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5OT0JSKSkge1xuICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuICAgICAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIH1cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5wdXNoRWxlbWVudChwLm9wZW5FbGVtZW50cy5jdXJyZW50LCB0b2tlbik7XG59XG5mdW5jdGlvbiBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5mdW5jdGlvbiB0YWJsZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0RG9jdW1lbnRNb2RlKHAuZG9jdW1lbnQpICE9PSBET0NVTUVOVF9NT0RFLlFVSVJLUyAmJiBwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuICAgIH1cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFO1xufVxuZnVuY3Rpb24gYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG59XG5mdW5jdGlvbiBpc0hpZGRlbklucHV0KHRva2VuKSB7XG4gICAgY29uc3QgaW5wdXRUeXBlID0gZ2V0VG9rZW5BdHRyKHRva2VuLCBBVFRSUy5UWVBFKTtcbiAgICByZXR1cm4gaW5wdXRUeXBlICE9IG51bGwgJiYgaW5wdXRUeXBlLnRvTG93ZXJDYXNlKCkgPT09IEhJRERFTl9JTlBVVF9UWVBFO1xufVxuZnVuY3Rpb24gaW5wdXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgaWYgKCFpc0hpZGRlbklucHV0KHRva2VuKSkge1xuICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICB9XG4gICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gcGFyYW1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGhyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHRva2VuLnRhZ05hbWUgPSBUTi5JTUc7XG4gICAgdG9rZW4udGFnSUQgPSAkLklNRztcbiAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xufVxuZnVuY3Rpb24gdGV4dGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIC8vTk9URTogSWYgdGhlIG5leHQgdG9rZW4gaXMgYSBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyIHRva2VuLCB0aGVuIGlnbm9yZSB0aGF0IHRva2VuIGFuZCBtb3ZlXG4gICAgLy9vbiB0byB0aGUgbmV4dCBvbmUuIChOZXdsaW5lcyBhdCB0aGUgc3RhcnQgb2YgdGV4dGFyZWEgZWxlbWVudHMgYXJlIGlnbm9yZWQgYXMgYW4gYXV0aG9yaW5nIGNvbnZlbmllbmNlLilcbiAgICBwLnNraXBOZXh0TmV3TGluZSA9IHRydWU7XG4gICAgcC50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXJNb2RlLlJDREFUQTtcbiAgICBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IHAuaW5zZXJ0aW9uTW9kZTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLlRFWFQ7XG59XG5mdW5jdGlvbiB4bXBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuICAgIH1cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplck1vZGUuUkFXVEVYVCk7XG59XG5mdW5jdGlvbiBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplck1vZGUuUkFXVEVYVCk7XG59XG4vL05PVEU6IGhlcmUgd2UgYXNzdW1lIHRoYXQgd2UgYWx3YXlzIGFjdCBhcyBhbiB1c2VyIGFnZW50IHdpdGggZW5hYmxlZCBwbHVnaW5zLCBzbyB3ZSBwYXJzZVxuLy88bm9lbWJlZD4gYXMgcmF3dGV4dC5cbmZ1bmN0aW9uIG5vZW1iZWRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplck1vZGUuUkFXVEVYVCk7XG59XG5mdW5jdGlvbiBzZWxlY3RTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgcC5pbnNlcnRpb25Nb2RlID1cbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFIHx8XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IEluc2VydGlvbk1vZGUuSU5fQ0FQVElPTiB8fFxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFkgfHxcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9PT0gSW5zZXJ0aW9uTW9kZS5JTl9ST1cgfHxcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9PT0gSW5zZXJ0aW9uTW9kZS5JTl9DRUxMXG4gICAgICAgICAgICA/IEluc2VydGlvbk1vZGUuSU5fU0VMRUNUX0lOX1RBQkxFXG4gICAgICAgICAgICA6IEluc2VydGlvbk1vZGUuSU5fU0VMRUNUO1xufVxuZnVuY3Rpb24gb3B0Z3JvdXBTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQgPT09ICQuT1BUSU9OKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuZnVuY3Rpb24gcmJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuUlVCWSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgIH1cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cbmZ1bmN0aW9uIHJ0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLlJVQlkpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKCQuUlRDKTtcbiAgICB9XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5mdW5jdGlvbiBtYXRoU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIGZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pO1xuICAgIGZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZykge1xuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5NQVRITUwpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuTUFUSE1MKTtcbiAgICB9XG4gICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gc3ZnU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIGZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHQXR0cnModG9rZW4pO1xuICAgIGZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZykge1xuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5TVkcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuU1ZHKTtcbiAgICB9XG4gICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gZ2VuZXJpY1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuSTpcbiAgICAgICAgY2FzZSAkLlM6XG4gICAgICAgIGNhc2UgJC5COlxuICAgICAgICBjYXNlICQuVTpcbiAgICAgICAgY2FzZSAkLkVNOlxuICAgICAgICBjYXNlICQuVFQ6XG4gICAgICAgIGNhc2UgJC5CSUc6XG4gICAgICAgIGNhc2UgJC5DT0RFOlxuICAgICAgICBjYXNlICQuRk9OVDpcbiAgICAgICAgY2FzZSAkLlNNQUxMOlxuICAgICAgICBjYXNlICQuU1RSSUtFOlxuICAgICAgICBjYXNlICQuU1RST05HOiB7XG4gICAgICAgICAgICBiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkE6IHtcbiAgICAgICAgICAgIGFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuSDE6XG4gICAgICAgIGNhc2UgJC5IMjpcbiAgICAgICAgY2FzZSAkLkgzOlxuICAgICAgICBjYXNlICQuSDQ6XG4gICAgICAgIGNhc2UgJC5INTpcbiAgICAgICAgY2FzZSAkLkg2OiB7XG4gICAgICAgICAgICBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5QOlxuICAgICAgICBjYXNlICQuREw6XG4gICAgICAgIGNhc2UgJC5PTDpcbiAgICAgICAgY2FzZSAkLlVMOlxuICAgICAgICBjYXNlICQuRElWOlxuICAgICAgICBjYXNlICQuRElSOlxuICAgICAgICBjYXNlICQuTkFWOlxuICAgICAgICBjYXNlICQuTUFJTjpcbiAgICAgICAgY2FzZSAkLk1FTlU6XG4gICAgICAgIGNhc2UgJC5BU0lERTpcbiAgICAgICAgY2FzZSAkLkNFTlRFUjpcbiAgICAgICAgY2FzZSAkLkZJR1VSRTpcbiAgICAgICAgY2FzZSAkLkZPT1RFUjpcbiAgICAgICAgY2FzZSAkLkhFQURFUjpcbiAgICAgICAgY2FzZSAkLkhHUk9VUDpcbiAgICAgICAgY2FzZSAkLkRJQUxPRzpcbiAgICAgICAgY2FzZSAkLkRFVEFJTFM6XG4gICAgICAgIGNhc2UgJC5BRERSRVNTOlxuICAgICAgICBjYXNlICQuQVJUSUNMRTpcbiAgICAgICAgY2FzZSAkLlNFQ1RJT046XG4gICAgICAgIGNhc2UgJC5TVU1NQVJZOlxuICAgICAgICBjYXNlICQuRklFTERTRVQ6XG4gICAgICAgIGNhc2UgJC5CTE9DS1FVT1RFOlxuICAgICAgICBjYXNlICQuRklHQ0FQVElPTjoge1xuICAgICAgICAgICAgYWRkcmVzc1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5MSTpcbiAgICAgICAgY2FzZSAkLkREOlxuICAgICAgICBjYXNlICQuRFQ6IHtcbiAgICAgICAgICAgIGxpc3RJdGVtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJSOlxuICAgICAgICBjYXNlICQuSU1HOlxuICAgICAgICBjYXNlICQuV0JSOlxuICAgICAgICBjYXNlICQuQVJFQTpcbiAgICAgICAgY2FzZSAkLkVNQkVEOlxuICAgICAgICBjYXNlICQuS0VZR0VOOiB7XG4gICAgICAgICAgICBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkhSOiB7XG4gICAgICAgICAgICBoclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5SQjpcbiAgICAgICAgY2FzZSAkLlJUQzoge1xuICAgICAgICAgICAgcmJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuUlQ6XG4gICAgICAgIGNhc2UgJC5SUDoge1xuICAgICAgICAgICAgcnRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuUFJFOlxuICAgICAgICBjYXNlICQuTElTVElORzoge1xuICAgICAgICAgICAgcHJlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlhNUDoge1xuICAgICAgICAgICAgeG1wU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlNWRzoge1xuICAgICAgICAgICAgc3ZnU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIGh0bWxTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQkFTRTpcbiAgICAgICAgY2FzZSAkLkxJTks6XG4gICAgICAgIGNhc2UgJC5NRVRBOlxuICAgICAgICBjYXNlICQuU1RZTEU6XG4gICAgICAgIGNhc2UgJC5USVRMRTpcbiAgICAgICAgY2FzZSAkLlNDUklQVDpcbiAgICAgICAgY2FzZSAkLkJHU09VTkQ6XG4gICAgICAgIGNhc2UgJC5CQVNFRk9OVDpcbiAgICAgICAgY2FzZSAkLlRFTVBMQVRFOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQk9EWToge1xuICAgICAgICAgICAgYm9keVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5GT1JNOiB7XG4gICAgICAgICAgICBmb3JtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLk5PQlI6IHtcbiAgICAgICAgICAgIG5vYnJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuTUFUSDoge1xuICAgICAgICAgICAgbWF0aFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQUJMRToge1xuICAgICAgICAgICAgdGFibGVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuSU5QVVQ6IHtcbiAgICAgICAgICAgIGlucHV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlBBUkFNOlxuICAgICAgICBjYXNlICQuVFJBQ0s6XG4gICAgICAgIGNhc2UgJC5TT1VSQ0U6IHtcbiAgICAgICAgICAgIHBhcmFtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLklNQUdFOiB7XG4gICAgICAgICAgICBpbWFnZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CVVRUT046IHtcbiAgICAgICAgICAgIGJ1dHRvblN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5BUFBMRVQ6XG4gICAgICAgIGNhc2UgJC5PQkpFQ1Q6XG4gICAgICAgIGNhc2UgJC5NQVJRVUVFOiB7XG4gICAgICAgICAgICBhcHBsZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuSUZSQU1FOiB7XG4gICAgICAgICAgICBpZnJhbWVTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuU0VMRUNUOiB7XG4gICAgICAgICAgICBzZWxlY3RTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuT1BUSU9OOlxuICAgICAgICBjYXNlICQuT1BUR1JPVVA6IHtcbiAgICAgICAgICAgIG9wdGdyb3VwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLk5PRU1CRUQ6IHtcbiAgICAgICAgICAgIG5vZW1iZWRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuRlJBTUVTRVQ6IHtcbiAgICAgICAgICAgIGZyYW1lc2V0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRFWFRBUkVBOiB7XG4gICAgICAgICAgICB0ZXh0YXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5OT1NDUklQVDoge1xuICAgICAgICAgICAgaWYgKHAub3B0aW9ucy5zY3JpcHRpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgbm9lbWJlZFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuUExBSU5URVhUOiB7XG4gICAgICAgICAgICBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQ09MOlxuICAgICAgICBjYXNlICQuVEg6XG4gICAgICAgIGNhc2UgJC5URDpcbiAgICAgICAgY2FzZSAkLlRSOlxuICAgICAgICBjYXNlICQuSEVBRDpcbiAgICAgICAgY2FzZSAkLkZSQU1FOlxuICAgICAgICBjYXNlICQuVEJPRFk6XG4gICAgICAgIGNhc2UgJC5URk9PVDpcbiAgICAgICAgY2FzZSAkLlRIRUFEOlxuICAgICAgICBjYXNlICQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgdG9rZW5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBib2R5RW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CT0RZKSkge1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk7XG4gICAgICAgIC8vTk9URTogPGJvZHk+IGlzIG5ldmVyIHBvcHBlZCBmcm9tIHRoZSBzdGFjaywgc28gd2UgbmVlZCB0byB1cGRhdGVkXG4gICAgICAgIC8vdGhlIGVuZCBsb2NhdGlvbiBleHBsaWNpdGx5LlxuICAgICAgICBpZiAocC5vcHRpb25zLnNvdXJjZUNvZGVMb2NhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKTtcbiAgICAgICAgICAgIGlmIChib2R5RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHAuX3NldEVuZExvY2F0aW9uKGJvZHlFbGVtZW50LCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBodG1sRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CT0RZKSkge1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk7XG4gICAgICAgIGVuZFRhZ0FmdGVyQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnSUQ7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBmb3JtRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBjb25zdCBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMDtcbiAgICBjb25zdCB7IGZvcm1FbGVtZW50IH0gPSBwO1xuICAgIGlmICghaW5UZW1wbGF0ZSkge1xuICAgICAgICBwLmZvcm1FbGVtZW50ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKChmb3JtRWxlbWVudCB8fCBpblRlbXBsYXRlKSAmJiBwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuRk9STSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBpZiAoaW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuRk9STSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBpZiAoIXAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLl9pbnNlcnRGYWtlRWxlbWVudChUTi5QLCAkLlApO1xuICAgIH1cbiAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG59XG5mdW5jdGlvbiBsaUVuZFRhZ0luQm9keShwKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luTGlzdEl0ZW1TY29wZSgkLkxJKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLkxJKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuTEkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRkRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG51bWJlcmVkSGVhZGVyRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJyRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KFROLkJSLCAkLkJSKTtcbiAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG4gICAgY29uc3QgdGlkID0gdG9rZW4udGFnSUQ7XG4gICAgZm9yIChsZXQgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID4gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcbiAgICAgICAgY29uc3QgZWxlbWVudElkID0gcC5vcGVuRWxlbWVudHMudGFnSURzW2ldO1xuICAgICAgICAvLyBDb21wYXJlIHRoZSB0YWcgbmFtZSBoZXJlLCBhcyB0aGUgdGFnIG1pZ2h0IG5vdCBiZSBhIGtub3duIHRhZyB3aXRoIGFuIElELlxuICAgICAgICBpZiAodGlkID09PSBlbGVtZW50SWQgJiYgKHRpZCAhPT0gJC5VTktOT1dOIHx8IHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gdG4pKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0aWQpO1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wID49IGkpXG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuc2hvcnRlblRvTGVuZ3RoKGkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHAuX2lzU3BlY2lhbEVsZW1lbnQoZWxlbWVudCwgZWxlbWVudElkKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5BOlxuICAgICAgICBjYXNlICQuQjpcbiAgICAgICAgY2FzZSAkLkk6XG4gICAgICAgIGNhc2UgJC5TOlxuICAgICAgICBjYXNlICQuVTpcbiAgICAgICAgY2FzZSAkLkVNOlxuICAgICAgICBjYXNlICQuVFQ6XG4gICAgICAgIGNhc2UgJC5CSUc6XG4gICAgICAgIGNhc2UgJC5DT0RFOlxuICAgICAgICBjYXNlICQuRk9OVDpcbiAgICAgICAgY2FzZSAkLk5PQlI6XG4gICAgICAgIGNhc2UgJC5TTUFMTDpcbiAgICAgICAgY2FzZSAkLlNUUklLRTpcbiAgICAgICAgY2FzZSAkLlNUUk9ORzoge1xuICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5QOiB7XG4gICAgICAgICAgICBwRW5kVGFnSW5Cb2R5KHApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkRMOlxuICAgICAgICBjYXNlICQuVUw6XG4gICAgICAgIGNhc2UgJC5PTDpcbiAgICAgICAgY2FzZSAkLkRJUjpcbiAgICAgICAgY2FzZSAkLkRJVjpcbiAgICAgICAgY2FzZSAkLk5BVjpcbiAgICAgICAgY2FzZSAkLlBSRTpcbiAgICAgICAgY2FzZSAkLk1BSU46XG4gICAgICAgIGNhc2UgJC5NRU5VOlxuICAgICAgICBjYXNlICQuQVNJREU6XG4gICAgICAgIGNhc2UgJC5CVVRUT046XG4gICAgICAgIGNhc2UgJC5DRU5URVI6XG4gICAgICAgIGNhc2UgJC5GSUdVUkU6XG4gICAgICAgIGNhc2UgJC5GT09URVI6XG4gICAgICAgIGNhc2UgJC5IRUFERVI6XG4gICAgICAgIGNhc2UgJC5IR1JPVVA6XG4gICAgICAgIGNhc2UgJC5ESUFMT0c6XG4gICAgICAgIGNhc2UgJC5BRERSRVNTOlxuICAgICAgICBjYXNlICQuQVJUSUNMRTpcbiAgICAgICAgY2FzZSAkLkRFVEFJTFM6XG4gICAgICAgIGNhc2UgJC5TRUNUSU9OOlxuICAgICAgICBjYXNlICQuU1VNTUFSWTpcbiAgICAgICAgY2FzZSAkLkxJU1RJTkc6XG4gICAgICAgIGNhc2UgJC5GSUVMRFNFVDpcbiAgICAgICAgY2FzZSAkLkJMT0NLUVVPVEU6XG4gICAgICAgIGNhc2UgJC5GSUdDQVBUSU9OOiB7XG4gICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5MSToge1xuICAgICAgICAgICAgbGlFbmRUYWdJbkJvZHkocCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuREQ6XG4gICAgICAgIGNhc2UgJC5EVDoge1xuICAgICAgICAgICAgZGRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkgxOlxuICAgICAgICBjYXNlICQuSDI6XG4gICAgICAgIGNhc2UgJC5IMzpcbiAgICAgICAgY2FzZSAkLkg0OlxuICAgICAgICBjYXNlICQuSDU6XG4gICAgICAgIGNhc2UgJC5INjoge1xuICAgICAgICAgICAgbnVtYmVyZWRIZWFkZXJFbmRUYWdJbkJvZHkocCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQlI6IHtcbiAgICAgICAgICAgIGJyRW5kVGFnSW5Cb2R5KHApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJPRFk6IHtcbiAgICAgICAgICAgIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIGh0bWxFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkZPUk06IHtcbiAgICAgICAgICAgIGZvcm1FbmRUYWdJbkJvZHkocCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQVBQTEVUOlxuICAgICAgICBjYXNlICQuT0JKRUNUOlxuICAgICAgICBjYXNlICQuTUFSUVVFRToge1xuICAgICAgICAgICAgYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBlb2ZJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZW9mSW5UZW1wbGF0ZShwLCB0b2tlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdG9wUGFyc2luZyhwLCB0b2tlbik7XG4gICAgfVxufVxuLy8gVGhlIFwidGV4dFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZW5kVGFnSW5UZXh0KHAsIHRva2VuKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICh0b2tlbi50YWdJRCA9PT0gJC5TQ1JJUFQpIHtcbiAgICAgICAgKF9hID0gcC5zY3JpcHRIYW5kbGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChwLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50KTtcbiAgICB9XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG59XG5mdW5jdGlvbiBlb2ZJblRleHQocCwgdG9rZW4pIHtcbiAgICBwLl9lcnIodG9rZW4sIEVSUi5lb2ZJbkVsZW1lbnRUaGF0Q2FuQ29udGFpbk9ubHlUZXh0KTtcbiAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZTtcbiAgICBwLm9uRW9mKHRva2VuKTtcbn1cbi8vIFRoZSBcImluIHRhYmxlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjaGFyYWN0ZXJJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgaWYgKFRBQkxFX1NUUlVDVFVSRV9UQUdTLmhhcyhwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQpKSB7XG4gICAgICAgIHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5sZW5ndGggPSAwO1xuICAgICAgICBwLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgcC5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBwLmluc2VydGlvbk1vZGU7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfVEVYVDtcbiAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5DSEFSQUNURVI6IHtcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJJblRhYmxlVGV4dChwLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5XSElURVNQQUNFX0NIQVJBQ1RFUjoge1xuICAgICAgICAgICAgICAgIHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dChwLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZ25vcmUgbnVsbFxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQ0FQVElPTjtcbn1cbmZ1bmN0aW9uIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDtcbn1cbmZ1bmN0aW9uIGNvbFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5faW5zZXJ0RmFrZUVsZW1lbnQoVE4uQ09MR1JPVVAsICQuQ09MR1JPVVApO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQO1xuICAgIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5mdW5jdGlvbiB0Ym9keVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZO1xufVxuZnVuY3Rpb24gdGRTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KFROLlRCT0RZLCAkLlRCT0RZKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk7XG4gICAgc3RhcnRUYWdJblRhYmxlQm9keShwLCB0b2tlbik7XG59XG5mdW5jdGlvbiB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UQUJMRSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuVEFCTEUpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIGlmIChpc0hpZGRlbklucHV0KHRva2VuKSkge1xuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxuICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGZvcm1TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmZvcm1FbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuVEQ6XG4gICAgICAgIGNhc2UgJC5USDpcbiAgICAgICAgY2FzZSAkLlRSOiB7XG4gICAgICAgICAgICB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuU1RZTEU6XG4gICAgICAgIGNhc2UgJC5TQ1JJUFQ6XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkNPTDoge1xuICAgICAgICAgICAgY29sU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5GT1JNOiB7XG4gICAgICAgICAgICBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQUJMRToge1xuICAgICAgICAgICAgdGFibGVTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRCT0RZOlxuICAgICAgICBjYXNlICQuVEZPT1Q6XG4gICAgICAgIGNhc2UgJC5USEVBRDoge1xuICAgICAgICAgICAgdGJvZHlTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLklOUFVUOiB7XG4gICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQ0FQVElPTjoge1xuICAgICAgICAgICAgY2FwdGlvblN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQ09MR1JPVVA6IHtcbiAgICAgICAgICAgIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuVEFCTEU6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UQUJMRSkpIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5UQUJMRSk7XG4gICAgICAgICAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuVEVNUExBVEU6IHtcbiAgICAgICAgICAgIHRlbXBsYXRlRW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CT0RZOlxuICAgICAgICBjYXNlICQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSAkLkNPTDpcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOlxuICAgICAgICBjYXNlICQuSFRNTDpcbiAgICAgICAgY2FzZSAkLlRCT0RZOlxuICAgICAgICBjYXNlICQuVEQ6XG4gICAgICAgIGNhc2UgJC5URk9PVDpcbiAgICAgICAgY2FzZSAkLlRIOlxuICAgICAgICBjYXNlICQuVEhFQUQ6XG4gICAgICAgIGNhc2UgJC5UUjoge1xuICAgICAgICAgICAgLy8gSWdub3JlIHRva2VuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5JblRhYmxlKHAsIHRva2VuKSB7XG4gICAgY29uc3Qgc2F2ZWRGb3N0ZXJQYXJlbnRpbmdTdGF0ZSA9IHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZDtcbiAgICBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSB0cnVlO1xuICAgIC8vIFByb2Nlc3MgdG9rZW4gaW4gYEluIEJvZHlgIG1vZGVcbiAgICBtb2RlSW5Cb2R5KHAsIHRva2VuKTtcbiAgICBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBzYXZlZEZvc3RlclBhcmVudGluZ1N0YXRlO1xufVxuLy8gVGhlIFwiaW4gdGFibGUgdGV4dFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gd2hpdGVzcGFjZUNoYXJhY3RlckluVGFibGVUZXh0KHAsIHRva2VuKSB7XG4gICAgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLnB1c2godG9rZW4pO1xufVxuZnVuY3Rpb24gY2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHRva2VuSW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgaWYgKHAuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbikge1xuICAgICAgICBmb3IgKDsgaSA8IHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAoOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cbi8vIFRoZSBcImluIGNhcHRpb25cIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmNvbnN0IFRBQkxFX1ZPSURfRUxFTUVOVFMgPSBuZXcgU2V0KFskLkNBUFRJT04sICQuQ09MLCAkLkNPTEdST1VQLCAkLlRCT0RZLCAkLlRELCAkLlRGT09ULCAkLlRILCAkLlRIRUFELCAkLlRSXSk7XG5mdW5jdGlvbiBzdGFydFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnSUQ7XG4gICAgaWYgKFRBQkxFX1ZPSURfRUxFTUVOVFMuaGFzKHRuKSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuQ0FQVElPTikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkNBUFRJT04pO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG4gICAgICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5DYXB0aW9uKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBzd2l0Y2ggKHRuKSB7XG4gICAgICAgIGNhc2UgJC5DQVBUSU9OOlxuICAgICAgICBjYXNlICQuVEFCTEU6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5DQVBUSU9OKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5DQVBUSU9OKTtcbiAgICAgICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG4gICAgICAgICAgICAgICAgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CT0RZOlxuICAgICAgICBjYXNlICQuQ09MOlxuICAgICAgICBjYXNlICQuQ09MR1JPVVA6XG4gICAgICAgIGNhc2UgJC5IVE1MOlxuICAgICAgICBjYXNlICQuVEJPRFk6XG4gICAgICAgIGNhc2UgJC5URDpcbiAgICAgICAgY2FzZSAkLlRGT09UOlxuICAgICAgICBjYXNlICQuVEg6XG4gICAgICAgIGNhc2UgJC5USEVBRDpcbiAgICAgICAgY2FzZSAkLlRSOiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgdG9rZW5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBUaGUgXCJpbiBjb2x1bW4gZ3JvdXBcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5DT0w6IHtcbiAgICAgICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICAgICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRFTVBMQVRFOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSAkLkNPTEdST1VQKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkNPTDoge1xuICAgICAgICAgICAgLy8gSWdub3JlIHRva2VuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5JbkNvbHVtbkdyb3VwKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCA9PT0gJC5DT0xHUk9VUCkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG59XG4vLyBUaGUgXCJpbiB0YWJsZSBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuVFI6IHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1JPVztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5USDpcbiAgICAgICAgY2FzZSAkLlREOiB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgICAgIHAuX2luc2VydEZha2VFbGVtZW50KFROLlRSLCAkLlRSKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fUk9XO1xuICAgICAgICAgICAgc3RhcnRUYWdJblJvdyhwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSAkLkNPTDpcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOlxuICAgICAgICBjYXNlICQuVEJPRFk6XG4gICAgICAgIGNhc2UgJC5URk9PVDpcbiAgICAgICAgY2FzZSAkLlRIRUFEOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzVGFibGVCb2R5Q29udGV4dEluVGFibGVTY29wZSgpKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5UQk9EWTpcbiAgICAgICAgY2FzZSAkLlRGT09UOlxuICAgICAgICBjYXNlICQuVEhFQUQ6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQUJMRToge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc1RhYmxlQm9keUNvbnRleHRJblRhYmxlU2NvcGUoKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQk9EWTpcbiAgICAgICAgY2FzZSAkLkNBUFRJT046XG4gICAgICAgIGNhc2UgJC5DT0w6XG4gICAgICAgIGNhc2UgJC5DT0xHUk9VUDpcbiAgICAgICAgY2FzZSAkLkhUTUw6XG4gICAgICAgIGNhc2UgJC5URDpcbiAgICAgICAgY2FzZSAkLlRIOlxuICAgICAgICBjYXNlICQuVFI6IHtcbiAgICAgICAgICAgIC8vIElnbm9yZSB0b2tlblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBUaGUgXCJpbiByb3dcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5USDpcbiAgICAgICAgY2FzZSAkLlREOiB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0NFTEw7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5DQVBUSU9OOlxuICAgICAgICBjYXNlICQuQ09MOlxuICAgICAgICBjYXNlICQuQ09MR1JPVVA6XG4gICAgICAgIGNhc2UgJC5UQk9EWTpcbiAgICAgICAgY2FzZSAkLlRGT09UOlxuICAgICAgICBjYXNlICQuVEhFQUQ6XG4gICAgICAgIGNhc2UgJC5UUjoge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRSKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZO1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luUm93KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuVFI6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UUikpIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQUJMRToge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRSKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZO1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQk9EWTpcbiAgICAgICAgY2FzZSAkLlRGT09UOlxuICAgICAgICBjYXNlICQuVEhFQUQ6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG9rZW4udGFnSUQpIHx8IHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRSKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZO1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CT0RZOlxuICAgICAgICBjYXNlICQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSAkLkNPTDpcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOlxuICAgICAgICBjYXNlICQuSFRNTDpcbiAgICAgICAgY2FzZSAkLlREOlxuICAgICAgICBjYXNlICQuVEg6IHtcbiAgICAgICAgICAgIC8vIElnbm9yZSBlbmQgdGFnXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBlbmRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIFRoZSBcImluIGNlbGxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5DZWxsKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAoVEFCTEVfVk9JRF9FTEVNRU5UUy5oYXModG4pKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5URCkgfHwgcC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVEgpKSB7XG4gICAgICAgICAgICBwLl9jbG9zZVRhYmxlQ2VsbCgpO1xuICAgICAgICAgICAgc3RhcnRUYWdJblJvdyhwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJbkNlbGwocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ0lEO1xuICAgIHN3aXRjaCAodG4pIHtcbiAgICAgICAgY2FzZSAkLlREOlxuICAgICAgICBjYXNlICQuVEg6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XG4gICAgICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1JPVztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQUJMRTpcbiAgICAgICAgY2FzZSAkLlRCT0RZOlxuICAgICAgICBjYXNlICQuVEZPT1Q6XG4gICAgICAgIGNhc2UgJC5USEVBRDpcbiAgICAgICAgY2FzZSAkLlRSOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgICAgIHAuX2Nsb3NlVGFibGVDZWxsKCk7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5Sb3cocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJPRFk6XG4gICAgICAgIGNhc2UgJC5DQVBUSU9OOlxuICAgICAgICBjYXNlICQuQ09MOlxuICAgICAgICBjYXNlICQuQ09MR1JPVVA6XG4gICAgICAgIGNhc2UgJC5IVE1MOiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgdG9rZW5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBUaGUgXCJpbiBzZWxlY3RcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5TZWxlY3QocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5IVE1MOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuT1BUSU9OOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSAkLk9QVElPTikge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuT1BUR1JPVVA6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQgPT09ICQuT1BUSU9OKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSAkLk9QVEdST1VQKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5JTlBVVDpcbiAgICAgICAgY2FzZSAkLktFWUdFTjpcbiAgICAgICAgY2FzZSAkLlRFWFRBUkVBOlxuICAgICAgICBjYXNlICQuU0VMRUNUOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TZWxlY3RTY29wZSgkLlNFTEVDVCkpIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbi50YWdJRCAhPT0gJC5TRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgcC5fcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuU0NSSVBUOlxuICAgICAgICBjYXNlICQuVEVNUExBVEU6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJblNlbGVjdChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLk9QVEdST1VQOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPiAwICYmXG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSAkLk9QVElPTiAmJlxuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnRhZ0lEc1twLm9wZW5FbGVtZW50cy5zdGFja1RvcCAtIDFdID09PSAkLk9QVEdST1VQKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSAkLk9QVEdST1VQKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuT1BUSU9OOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSAkLk9QVElPTikge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlNFTEVDVDoge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2VsZWN0U2NvcGUoJC5TRUxFQ1QpKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuU0VMRUNUKTtcbiAgICAgICAgICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH1cbn1cbi8vIFRoZSBcImluIHNlbGVjdCBpbiB0YWJsZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblNlbGVjdEluVGFibGUocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ0lEO1xuICAgIGlmICh0biA9PT0gJC5DQVBUSU9OIHx8XG4gICAgICAgIHRuID09PSAkLlRBQkxFIHx8XG4gICAgICAgIHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlRGT09UIHx8XG4gICAgICAgIHRuID09PSAkLlRIRUFEIHx8XG4gICAgICAgIHRuID09PSAkLlRSIHx8XG4gICAgICAgIHRuID09PSAkLlREIHx8XG4gICAgICAgIHRuID09PSAkLlRIKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlNFTEVDVCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLl9wcm9jZXNzU3RhcnRUYWcodG9rZW4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3RhcnRUYWdJblNlbGVjdChwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5TZWxlY3RJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAodG4gPT09ICQuQ0FQVElPTiB8fFxuICAgICAgICB0biA9PT0gJC5UQUJMRSB8fFxuICAgICAgICB0biA9PT0gJC5UQk9EWSB8fFxuICAgICAgICB0biA9PT0gJC5URk9PVCB8fFxuICAgICAgICB0biA9PT0gJC5USEVBRCB8fFxuICAgICAgICB0biA9PT0gJC5UUiB8fFxuICAgICAgICB0biA9PT0gJC5URCB8fFxuICAgICAgICB0biA9PT0gJC5USCkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuU0VMRUNUKTtcbiAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICAgICAgcC5vbkVuZFRhZyh0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGVuZFRhZ0luU2VsZWN0KHAsIHRva2VuKTtcbiAgICB9XG59XG4vLyBUaGUgXCJpbiB0ZW1wbGF0ZVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJblRlbXBsYXRlKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICAvLyBGaXJzdCwgaGFuZGxlIHRhZ3MgdGhhdCBjYW4gc3RhcnQgd2l0aG91dCBhIG1vZGUgY2hhbmdlXG4gICAgICAgIGNhc2UgJC5CQVNFOlxuICAgICAgICBjYXNlICQuQkFTRUZPTlQ6XG4gICAgICAgIGNhc2UgJC5CR1NPVU5EOlxuICAgICAgICBjYXNlICQuTElOSzpcbiAgICAgICAgY2FzZSAkLk1FVEE6XG4gICAgICAgIGNhc2UgJC5OT0ZSQU1FUzpcbiAgICAgICAgY2FzZSAkLlNDUklQVDpcbiAgICAgICAgY2FzZSAkLlNUWUxFOlxuICAgICAgICBjYXNlICQuVEVNUExBVEU6XG4gICAgICAgIGNhc2UgJC5USVRMRToge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmUtcHJvY2VzcyB0aGUgdG9rZW4gaW4gdGhlIGFwcHJvcHJpYXRlIG1vZGVcbiAgICAgICAgY2FzZSAkLkNBUFRJT046XG4gICAgICAgIGNhc2UgJC5DT0xHUk9VUDpcbiAgICAgICAgY2FzZSAkLlRCT0RZOlxuICAgICAgICBjYXNlICQuVEZPT1Q6XG4gICAgICAgIGNhc2UgJC5USEVBRDoge1xuICAgICAgICAgICAgcC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrWzBdID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG4gICAgICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkNPTDoge1xuICAgICAgICAgICAgcC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrWzBdID0gSW5zZXJ0aW9uTW9kZS5JTl9DT0xVTU5fR1JPVVA7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuVFI6IHtcbiAgICAgICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFja1swXSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlREOlxuICAgICAgICBjYXNlICQuVEg6IHtcbiAgICAgICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFja1swXSA9IEluc2VydGlvbk1vZGUuSU5fUk9XO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9ST1c7XG4gICAgICAgICAgICBzdGFydFRhZ0luUm93KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFja1swXSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnSUQgPT09ICQuVEVNUExBVEUpIHtcbiAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVvZkluVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5URU1QTEFURSk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFjay5zaGlmdCgpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5vbkVvZih0b2tlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdG9wUGFyc2luZyhwLCB0b2tlbik7XG4gICAgfVxufVxuLy8gVGhlIFwiYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnSUQgPT09ICQuSFRNTCkge1xuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICh0b2tlbi50YWdJRCA9PT0gJC5IVE1MKSB7XG4gICAgICAgIGlmICghcC5mcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuQUZURVJfQUZURVJfQk9EWTtcbiAgICAgICAgfVxuICAgICAgICAvL05PVEU6IDxodG1sPiBpcyBuZXZlciBwb3BwZWQgZnJvbSB0aGUgc3RhY2ssIHNvIHdlIG5lZWQgdG8gdXBkYXRlZFxuICAgICAgICAvL3RoZSBlbmQgbG9jYXRpb24gZXhwbGljaXRseS5cbiAgICAgICAgaWYgKHAub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvICYmIHAub3BlbkVsZW1lbnRzLnRhZ0lEc1swXSA9PT0gJC5IVE1MKSB7XG4gICAgICAgICAgICBwLl9zZXRFbmRMb2NhdGlvbihwLm9wZW5FbGVtZW50cy5pdGVtc1swXSwgdG9rZW4pO1xuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBib2R5IGVsZW1lbnQsIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbiBlbmQgdGFnXG4gICAgICAgICAgICBjb25zdCBib2R5RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zWzFdO1xuICAgICAgICAgICAgaWYgKGJvZHlFbGVtZW50ICYmICEoKF9hID0gcC50cmVlQWRhcHRlci5nZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGJvZHlFbGVtZW50KSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmVuZFRhZykpIHtcbiAgICAgICAgICAgICAgICBwLl9zZXRFbmRMb2NhdGlvbihib2R5RWxlbWVudCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0b2tlbkFmdGVyQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5BZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0JPRFk7XG4gICAgbW9kZUluQm9keShwLCB0b2tlbik7XG59XG4vLyBUaGUgXCJpbiBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdJbkZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuSFRNTDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkZSQU1FU0VUOiB7XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5GUkFNRToge1xuICAgICAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgICAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuTk9GUkFNRVM6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJbkZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ0lEID09PSAkLkZSQU1FU0VUICYmICFwLm9wZW5FbGVtZW50cy5pc1Jvb3RIdG1sRWxlbWVudEN1cnJlbnQoKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgaWYgKCFwLmZyYWdtZW50Q29udGV4dCAmJiBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQgIT09ICQuRlJBTUVTRVQpIHtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuQUZURVJfRlJBTUVTRVQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBUaGUgXCJhZnRlciBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuSFRNTDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLk5PRlJBTUVTOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdJRCA9PT0gJC5IVE1MKSB7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuQUZURVJfQUZURVJfRlJBTUVTRVQ7XG4gICAgfVxufVxuLy8gVGhlIFwiYWZ0ZXIgYWZ0ZXIgYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdJRCA9PT0gJC5IVE1MKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRva2VuQWZ0ZXJBZnRlckJvZHkocCwgdG9rZW4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRva2VuQWZ0ZXJBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0JPRFk7XG4gICAgbW9kZUluQm9keShwLCB0b2tlbik7XG59XG4vLyBUaGUgXCJhZnRlciBhZnRlciBmcmFtZXNldFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gc3RhcnRUYWdBZnRlckFmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5IVE1MOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuTk9GUkFNRVM6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9XG59XG4vLyBUaGUgcnVsZXMgZm9yIHBhcnNpbmcgdG9rZW5zIGluIGZvcmVpZ24gY29udGVudFxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIG51bGxDaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgdG9rZW4uY2hhcnMgPSB1bmljb2RlLlJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cbmZ1bmN0aW9uIGNoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIHBvcFVudGlsSHRtbE9ySW50ZWdyYXRpb25Qb2ludChwKSB7XG4gICAgd2hpbGUgKHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpICE9PSBOUy5IVE1MICYmXG4gICAgICAgICFwLl9pc0ludGVncmF0aW9uUG9pbnQocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50KSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBzdGFydFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBpZiAoZm9yZWlnbkNvbnRlbnQuY2F1c2VzRXhpdCh0b2tlbikpIHtcbiAgICAgICAgcG9wVW50aWxIdG1sT3JJbnRlZ3JhdGlvblBvaW50KHApO1xuICAgICAgICBwLl9zdGFydFRhZ091dHNpZGVGb3JlaWduQ29udGVudCh0b2tlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gcC5fZ2V0QWRqdXN0ZWRDdXJyZW50RWxlbWVudCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50TnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KTtcbiAgICAgICAgaWYgKGN1cnJlbnROcyA9PT0gTlMuTUFUSE1MKSB7XG4gICAgICAgICAgICBmb3JlaWduQ29udGVudC5hZGp1c3RUb2tlbk1hdGhNTEF0dHJzKHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjdXJyZW50TnMgPT09IE5TLlNWRykge1xuICAgICAgICAgICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdUYWdOYW1lKHRva2VuKTtcbiAgICAgICAgICAgIGZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuU1ZHQXR0cnModG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pO1xuICAgICAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIGN1cnJlbnROcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBjdXJyZW50TnMpO1xuICAgICAgICB9XG4gICAgICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ0lEID09PSAkLlAgfHwgdG9rZW4udGFnSUQgPT09ICQuQlIpIHtcbiAgICAgICAgcG9wVW50aWxIdG1sT3JJbnRlZ3JhdGlvblBvaW50KHApO1xuICAgICAgICBwLl9lbmRUYWdPdXRzaWRlRm9yZWlnbkNvbnRlbnQodG9rZW4pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+IDA7IGktLSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbaV07XG4gICAgICAgIGlmIChwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgcC5fZW5kVGFnT3V0c2lkZUZvcmVpZ25Db250ZW50KHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBwLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG4gICAgICAgIGlmICh0YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRva2VuLnRhZ05hbWUpIHtcbiAgICAgICAgICAgIC8vTk9URTogdXBkYXRlIHRoZSB0b2tlbiB0YWcgbmFtZSBmb3IgYF9zZXRFbmRMb2NhdGlvbmAuXG4gICAgICAgICAgICB0b2tlbi50YWdOYW1lID0gdGFnTmFtZTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnNob3J0ZW5Ub0xlbmd0aChpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwgbnVsbCwgImltcG9ydCB7IFRBR19OQU1FUyBhcyAkLCBOUywgaGFzVW5lc2NhcGVkVGV4dCB9IGZyb20gJy4uL2NvbW1vbi9odG1sLmpzJztcbmltcG9ydCB7IGVzY2FwZVRleHQsIGVzY2FwZUF0dHJpYnV0ZSB9IGZyb20gJ2VudGl0aWVzL2xpYi9lc2NhcGUuanMnO1xuaW1wb3J0IHsgZGVmYXVsdFRyZWVBZGFwdGVyIH0gZnJvbSAnLi4vdHJlZS1hZGFwdGVycy9kZWZhdWx0LmpzJztcbi8vIFNldHNcbmNvbnN0IFZPSURfRUxFTUVOVFMgPSBuZXcgU2V0KFtcbiAgICAkLkFSRUEsXG4gICAgJC5CQVNFLFxuICAgICQuQkFTRUZPTlQsXG4gICAgJC5CR1NPVU5ELFxuICAgICQuQlIsXG4gICAgJC5DT0wsXG4gICAgJC5FTUJFRCxcbiAgICAkLkZSQU1FLFxuICAgICQuSFIsXG4gICAgJC5JTUcsXG4gICAgJC5JTlBVVCxcbiAgICAkLktFWUdFTixcbiAgICAkLkxJTkssXG4gICAgJC5NRVRBLFxuICAgICQuUEFSQU0sXG4gICAgJC5TT1VSQ0UsXG4gICAgJC5UUkFDSyxcbiAgICAkLldCUixcbl0pO1xuZnVuY3Rpb24gaXNWb2lkRWxlbWVudChub2RlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChvcHRpb25zLnRyZWVBZGFwdGVyLmlzRWxlbWVudE5vZGUobm9kZSkgJiZcbiAgICAgICAgb3B0aW9ucy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkobm9kZSkgPT09IE5TLkhUTUwgJiZcbiAgICAgICAgVk9JRF9FTEVNRU5UUy5oYXMob3B0aW9ucy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG5vZGUpKSk7XG59XG5jb25zdCBkZWZhdWx0T3B0cyA9IHsgdHJlZUFkYXB0ZXI6IGRlZmF1bHRUcmVlQWRhcHRlciwgc2NyaXB0aW5nRW5hYmxlZDogdHJ1ZSB9O1xuLyoqXG4gKiBTZXJpYWxpemVzIGFuIEFTVCBub2RlIHRvIGFuIEhUTUwgc3RyaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBhcnNlNSA9IHJlcXVpcmUoJ3BhcnNlNScpO1xuICpcbiAqIGNvbnN0IGRvY3VtZW50ID0gcGFyc2U1LnBhcnNlKCc8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+SGkgdGhlcmUhPC9ib2R5PjwvaHRtbD4nKTtcbiAqXG4gKiAvLyBTZXJpYWxpemVzIGEgZG9jdW1lbnQuXG4gKiBjb25zdCBodG1sID0gcGFyc2U1LnNlcmlhbGl6ZShkb2N1bWVudCk7XG4gKlxuICogLy8gU2VyaWFsaXplcyB0aGUgPGh0bWw+IGVsZW1lbnQgY29udGVudC5cbiAqIGNvbnN0IHN0ciA9IHBhcnNlNS5zZXJpYWxpemUoZG9jdW1lbnQuY2hpbGROb2Rlc1sxXSk7XG4gKlxuICogY29uc29sZS5sb2coc3RyKTsgLy8+ICc8aGVhZD48L2hlYWQ+PGJvZHk+SGkgdGhlcmUhPC9ib2R5PidcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIG9wdGlvbnMgU2VyaWFsaXphdGlvbiBvcHRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplKG5vZGUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0geyAuLi5kZWZhdWx0T3B0cywgLi4ub3B0aW9ucyB9O1xuICAgIGlmIChpc1ZvaWRFbGVtZW50KG5vZGUsIG9wdHMpKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZUNoaWxkTm9kZXMobm9kZSwgb3B0cyk7XG59XG4vKipcbiAqIFNlcmlhbGl6ZXMgYW4gQVNUIGVsZW1lbnQgbm9kZSB0byBhbiBIVE1MIHN0cmluZywgaW5jbHVkaW5nIHRoZSBlbGVtZW50IG5vZGUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGFyc2U1ID0gcmVxdWlyZSgncGFyc2U1Jyk7XG4gKlxuICogY29uc3QgZG9jdW1lbnQgPSBwYXJzZTUucGFyc2VGcmFnbWVudCgnPGRpdj5IZWxsbywgPGI+d29ybGQ8L2I+ITwvZGl2PicpO1xuICpcbiAqIC8vIFNlcmlhbGl6ZXMgdGhlIDxkaXY+IGVsZW1lbnQuXG4gKiBjb25zdCBodG1sID0gcGFyc2U1LnNlcmlhbGl6ZU91dGVyKGRvY3VtZW50LmNoaWxkTm9kZXNbMF0pO1xuICpcbiAqIGNvbnNvbGUubG9nKHN0cik7IC8vPiAnPGRpdj5IZWxsbywgPGI+d29ybGQ8L2I+ITwvZGl2PidcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIG9wdGlvbnMgU2VyaWFsaXphdGlvbiBvcHRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplT3V0ZXIobm9kZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSB7IC4uLmRlZmF1bHRPcHRzLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHNlcmlhbGl6ZU5vZGUobm9kZSwgb3B0cyk7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVDaGlsZE5vZGVzKHBhcmVudE5vZGUsIG9wdGlvbnMpIHtcbiAgICBsZXQgaHRtbCA9ICcnO1xuICAgIC8vIEdldCBjb250YWluZXIgb2YgdGhlIGNoaWxkIG5vZGVzXG4gICAgY29uc3QgY29udGFpbmVyID0gb3B0aW9ucy50cmVlQWRhcHRlci5pc0VsZW1lbnROb2RlKHBhcmVudE5vZGUpICYmXG4gICAgICAgIG9wdGlvbnMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwYXJlbnROb2RlKSA9PT0gJC5URU1QTEFURSAmJlxuICAgICAgICBvcHRpb25zLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShwYXJlbnROb2RlKSA9PT0gTlMuSFRNTFxuICAgICAgICA/IG9wdGlvbnMudHJlZUFkYXB0ZXIuZ2V0VGVtcGxhdGVDb250ZW50KHBhcmVudE5vZGUpXG4gICAgICAgIDogcGFyZW50Tm9kZTtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gb3B0aW9ucy50cmVlQWRhcHRlci5nZXRDaGlsZE5vZGVzKGNvbnRhaW5lcik7XG4gICAgaWYgKGNoaWxkTm9kZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjdXJyZW50Tm9kZSBvZiBjaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICBodG1sICs9IHNlcmlhbGl6ZU5vZGUoY3VycmVudE5vZGUsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBodG1sO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplTm9kZShub2RlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShub2RlKSkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplRWxlbWVudChub2RlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShub2RlKSkge1xuICAgICAgICByZXR1cm4gc2VyaWFsaXplVGV4dE5vZGUobm9kZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRyZWVBZGFwdGVyLmlzQ29tbWVudE5vZGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZUNvbW1lbnROb2RlKG5vZGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50cmVlQWRhcHRlci5pc0RvY3VtZW50VHlwZU5vZGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUobm9kZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8vIFJldHVybiBhbiBlbXB0eSBzdHJpbmcgZm9yIHVua25vd24gbm9kZXNcbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVFbGVtZW50KG5vZGUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB0biA9IG9wdGlvbnMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShub2RlKTtcbiAgICByZXR1cm4gYDwke3RufSR7c2VyaWFsaXplQXR0cmlidXRlcyhub2RlLCBvcHRpb25zKX0+JHtpc1ZvaWRFbGVtZW50KG5vZGUsIG9wdGlvbnMpID8gJycgOiBgJHtzZXJpYWxpemVDaGlsZE5vZGVzKG5vZGUsIG9wdGlvbnMpfTwvJHt0bn0+YH1gO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQXR0cmlidXRlcyhub2RlLCB7IHRyZWVBZGFwdGVyIH0pIHtcbiAgICBsZXQgaHRtbCA9ICcnO1xuICAgIGZvciAoY29uc3QgYXR0ciBvZiB0cmVlQWRhcHRlci5nZXRBdHRyTGlzdChub2RlKSkge1xuICAgICAgICBodG1sICs9ICcgJztcbiAgICAgICAgaWYgKCFhdHRyLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgaHRtbCArPSBhdHRyLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChhdHRyLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgTlMuWE1MOiB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gYHhtbDoke2F0dHIubmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBOUy5YTUxOUzoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAneG1sbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICd4bWxuczonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gYXR0ci5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBOUy5YTElOSzoge1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9IGB4bGluazoke2F0dHIubmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9IGAke2F0dHIucHJlZml4fToke2F0dHIubmFtZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgaHRtbCArPSBgPVwiJHtlc2NhcGVBdHRyaWJ1dGUoYXR0ci52YWx1ZSl9XCJgO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbDtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZVRleHROb2RlKG5vZGUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHRyZWVBZGFwdGVyIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0cmVlQWRhcHRlci5nZXRUZXh0Tm9kZUNvbnRlbnQobm9kZSk7XG4gICAgY29uc3QgcGFyZW50ID0gdHJlZUFkYXB0ZXIuZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgICBjb25zdCBwYXJlbnRUbiA9IHBhcmVudCAmJiB0cmVlQWRhcHRlci5pc0VsZW1lbnROb2RlKHBhcmVudCkgJiYgdHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShwYXJlbnQpO1xuICAgIHJldHVybiBwYXJlbnRUbiAmJlxuICAgICAgICB0cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkocGFyZW50KSA9PT0gTlMuSFRNTCAmJlxuICAgICAgICBoYXNVbmVzY2FwZWRUZXh0KHBhcmVudFRuLCBvcHRpb25zLnNjcmlwdGluZ0VuYWJsZWQpXG4gICAgICAgID8gY29udGVudFxuICAgICAgICA6IGVzY2FwZVRleHQoY29udGVudCk7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVDb21tZW50Tm9kZShub2RlLCB7IHRyZWVBZGFwdGVyIH0pIHtcbiAgICByZXR1cm4gYDwhLS0ke3RyZWVBZGFwdGVyLmdldENvbW1lbnROb2RlQ29udGVudChub2RlKX0tLT5gO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplRG9jdW1lbnRUeXBlTm9kZShub2RlLCB7IHRyZWVBZGFwdGVyIH0pIHtcbiAgICByZXR1cm4gYDwhRE9DVFlQRSAke3RyZWVBZGFwdGVyLmdldERvY3VtZW50VHlwZU5vZGVOYW1lKG5vZGUpfT5gO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwgImltcG9ydCB7IFBhcnNlciB9IGZyb20gJy4vcGFyc2VyL2luZGV4LmpzJztcbmV4cG9ydCB7IGRlZmF1bHRUcmVlQWRhcHRlciB9IGZyb20gJy4vdHJlZS1hZGFwdGVycy9kZWZhdWx0LmpzJztcbmV4cG9ydCB7IC8qKiBAaW50ZXJuYWwgKi8gUGFyc2VyIH0gZnJvbSAnLi9wYXJzZXIvaW5kZXguanMnO1xuZXhwb3J0IHsgc2VyaWFsaXplLCBzZXJpYWxpemVPdXRlciB9IGZyb20gJy4vc2VyaWFsaXplci9pbmRleC5qcyc7XG5leHBvcnQgeyBFUlIgYXMgRXJyb3JDb2RlcyB9IGZyb20gJy4vY29tbW9uL2Vycm9yLWNvZGVzLmpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCAqIGFzIGZvcmVpZ25Db250ZW50IGZyb20gJy4vY29tbW9uL2ZvcmVpZ24tY29udGVudC5qcyc7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgKiBhcyBodG1sIGZyb20gJy4vY29tbW9uL2h0bWwuanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0ICogYXMgVG9rZW4gZnJvbSAnLi9jb21tb24vdG9rZW4uanMnO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IHsgVG9rZW5pemVyLCBUb2tlbml6ZXJNb2RlIH0gZnJvbSAnLi90b2tlbml6ZXIvaW5kZXguanMnO1xuLy8gU2hvcnRoYW5kc1xuLyoqXG4gKiBQYXJzZXMgYW4gSFRNTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGh0bWwgSW5wdXQgSFRNTCBzdHJpbmcuXG4gKiBAcGFyYW0gb3B0aW9ucyBQYXJzaW5nIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBEb2N1bWVudFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqIGNvbnN0IHBhcnNlNSA9IHJlcXVpcmUoJ3BhcnNlNScpO1xuICpcbiAqIGNvbnN0IGRvY3VtZW50ID0gcGFyc2U1LnBhcnNlKCc8IURPQ1RZUEUgaHRtbD48aHRtbD48aGVhZD48L2hlYWQ+PGJvZHk+SGkgdGhlcmUhPC9ib2R5PjwvaHRtbD4nKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhkb2N1bWVudC5jaGlsZE5vZGVzWzFdLnRhZ05hbWUpOyAvLz4gJ2h0bWwnXG4gKmBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoaHRtbCwgb3B0aW9ucykge1xuICAgIHJldHVybiBQYXJzZXIucGFyc2UoaHRtbCwgb3B0aW9ucyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFnbWVudChmcmFnbWVudENvbnRleHQsIGh0bWwsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIGZyYWdtZW50Q29udGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb3B0aW9ucyA9IGh0bWw7XG4gICAgICAgIGh0bWwgPSBmcmFnbWVudENvbnRleHQ7XG4gICAgICAgIGZyYWdtZW50Q29udGV4dCA9IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlciA9IFBhcnNlci5nZXRGcmFnbWVudFBhcnNlcihmcmFnbWVudENvbnRleHQsIG9wdGlvbnMpO1xuICAgIHBhcnNlci50b2tlbml6ZXIud3JpdGUoaHRtbCwgdHJ1ZSk7XG4gICAgcmV0dXJuIHBhcnNlci5nZXRGcmFnbWVudCgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Ob2RlfSBOb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBvaW50fSBQb2ludFxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Qb3NpdGlvbn0gUG9zaXRpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIE5vZGVMaWtlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICogQHByb3BlcnR5IHtQb3NpdGlvbkxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbcG9zaXRpb25dXG4gKlxuICogQHR5cGVkZWYgUG9pbnRMaWtlXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtsaW5lXVxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbY29sdW1uXVxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbb2Zmc2V0XVxuICpcbiAqIEB0eXBlZGVmIFBvc2l0aW9uTGlrZVxuICogQHByb3BlcnR5IHtQb2ludExpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbc3RhcnRdXG4gKiBAcHJvcGVydHkge1BvaW50TGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmRdXG4gKi9cblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIHBvc2l0aW9uYWwgaW5mbyBvZiBhIHBvaW50LCBwb3NpdGlvbiAoc3RhcnQgYW5kIGVuZCBwb2ludHMpLFxuICogb3Igbm9kZS5cbiAqXG4gKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IFBvaW50IHwgUG9pbnRMaWtlIHwgUG9zaXRpb24gfCBQb3NpdGlvbkxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbdmFsdWVdXG4gKiAgIE5vZGUsIHBvc2l0aW9uLCBvciBwb2ludC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFByZXR0eSBwcmludGVkIHBvc2l0aW9uYWwgaW5mbyBvZiBhIG5vZGUgKGBzdHJpbmdgKS5cbiAqXG4gKiAgIEluIHRoZSBmb3JtYXQgb2YgYSByYW5nZSBgbHM6Y3MtbGU6Y2VgICh3aGVuIGdpdmVuIGBub2RlYCBvciBgcG9zaXRpb25gKVxuICogICBvciBhIHBvaW50IGBsOmNgICh3aGVuIGdpdmVuIGBwb2ludGApLCB3aGVyZSBgbGAgc3RhbmRzIGZvciBsaW5lLCBgY2AgZm9yXG4gKiAgIGNvbHVtbiwgYHNgIGZvciBgc3RhcnRgLCBhbmQgYGVgIGZvciBlbmQuXG4gKiAgIEFuIGVtcHR5IHN0cmluZyAoYCcnYCkgaXMgcmV0dXJuZWQgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIG5laXRoZXIgYG5vZGVgLFxuICogICBgcG9zaXRpb25gLCBub3IgYHBvaW50YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVBvc2l0aW9uKHZhbHVlKSB7XG4gIC8vIE5vdGhpbmcuXG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gTm9kZS5cbiAgaWYgKCdwb3NpdGlvbicgaW4gdmFsdWUgfHwgJ3R5cGUnIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uKHZhbHVlLnBvc2l0aW9uKVxuICB9XG5cbiAgLy8gUG9zaXRpb24uXG4gIGlmICgnc3RhcnQnIGluIHZhbHVlIHx8ICdlbmQnIGluIHZhbHVlKSB7XG4gICAgcmV0dXJuIHBvc2l0aW9uKHZhbHVlKVxuICB9XG5cbiAgLy8gUG9pbnQuXG4gIGlmICgnbGluZScgaW4gdmFsdWUgfHwgJ2NvbHVtbicgaW4gdmFsdWUpIHtcbiAgICByZXR1cm4gcG9pbnQodmFsdWUpXG4gIH1cblxuICAvLyA/XG4gIHJldHVybiAnJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UG9pbnQgfCBQb2ludExpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwb2ludFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcG9pbnQocG9pbnQpIHtcbiAgcmV0dXJuIGluZGV4KHBvaW50ICYmIHBvaW50LmxpbmUpICsgJzonICsgaW5kZXgocG9pbnQgJiYgcG9pbnQuY29sdW1uKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UG9zaXRpb24gfCBQb3NpdGlvbkxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwb3NcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHBvc2l0aW9uKHBvcykge1xuICByZXR1cm4gcG9pbnQocG9zICYmIHBvcy5zdGFydCkgKyAnLScgKyBwb2ludChwb3MgJiYgcG9zLmVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBpbmRleCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogMVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Ob2RlfSBOb2RlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBvaW50fSBQb2ludFxuICogQHR5cGVkZWYge2ltcG9ydCgndW5pc3QnKS5Qb3NpdGlvbn0gUG9zaXRpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3QgJiB7dHlwZTogc3RyaW5nLCBwb3NpdGlvbj86IFBvc2l0aW9uIHwgdW5kZWZpbmVkfX0gTm9kZUxpa2VcbiAqXG4gKiBAdHlwZWRlZiBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0FycmF5PE5vZGU+IHwgbnVsbCB8IHVuZGVmaW5lZH0gW2FuY2VzdG9yc11cbiAqICAgU3RhY2sgb2YgKGluY2x1c2l2ZSkgYW5jZXN0b3Igbm9kZXMgc3Vycm91bmRpbmcgdGhlIG1lc3NhZ2UgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSB7RXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkfSBbY2F1c2VdXG4gKiAgIE9yaWdpbmFsIGVycm9yIGNhdXNlIG9mIHRoZSBtZXNzYWdlIChvcHRpb25hbCkuXG4gKiBAcHJvcGVydHkge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBbcGxhY2VdXG4gKiAgIFBsYWNlIG9mIG1lc3NhZ2UgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3J1bGVJZF1cbiAqICAgQ2F0ZWdvcnkgb2YgbWVzc2FnZSAob3B0aW9uYWwsIGV4YW1wbGU6IGAnbXktcnVsZSdgKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3NvdXJjZV1cbiAqICAgTmFtZXNwYWNlIG9mIHdobyBzZW50IHRoZSBtZXNzYWdlIChvcHRpb25hbCwgZXhhbXBsZTogYCdteS1wYWNrYWdlJ2ApLlxuICovXG5cbmltcG9ydCB7c3RyaW5naWZ5UG9zaXRpb259IGZyb20gJ3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uJ1xuXG4vKipcbiAqIE1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBWRmlsZU1lc3NhZ2UgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBtZXNzYWdlIGZvciBgcmVhc29uYC5cbiAgICpcbiAgICogPiBcdUQ4M0VcdURFQTYgKipOb3RlKio6IGFsc28gaGFzIG9ic29sZXRlIHNpZ25hdHVyZXMuXG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7T3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJuc1xuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqIEByZXR1cm5zXG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnNcbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJuc1xuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJuc1xuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJuc1xuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJuc1xuICAgKlxuICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uXG4gICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLlxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE9wdGlvbnMgfCBQb2ludCB8IFBvc2l0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNPclBhcmVudE9yUGxhY2VdXG4gICAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOlxuICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLlxuICAgKiBAcmV0dXJuc1xuICAgKiAgIEluc3RhbmNlIG9mIGBWRmlsZU1lc3NhZ2VgLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgY29uc3RydWN0b3IoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zT3JQYXJlbnRPclBsYWNlID09PSAnc3RyaW5nJykge1xuICAgICAgb3JpZ2luID0gb3B0aW9uc09yUGFyZW50T3JQbGFjZVxuICAgICAgb3B0aW9uc09yUGFyZW50T3JQbGFjZSA9IHVuZGVmaW5lZFxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICAgIGxldCByZWFzb24gPSAnJ1xuICAgIC8qKiBAdHlwZSB7T3B0aW9uc30gKi9cbiAgICBsZXQgb3B0aW9ucyA9IHt9XG4gICAgbGV0IGxlZ2FjeUNhdXNlID0gZmFsc2VcblxuICAgIGlmIChvcHRpb25zT3JQYXJlbnRPclBsYWNlKSB7XG4gICAgICAvLyBQb2ludC5cbiAgICAgIGlmIChcbiAgICAgICAgJ2xpbmUnIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2UgJiZcbiAgICAgICAgJ2NvbHVtbicgaW4gb3B0aW9uc09yUGFyZW50T3JQbGFjZVxuICAgICAgKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7cGxhY2U6IG9wdGlvbnNPclBhcmVudE9yUGxhY2V9XG4gICAgICB9XG4gICAgICAvLyBQb3NpdGlvbi5cbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICAnc3RhcnQnIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2UgJiZcbiAgICAgICAgJ2VuZCcgaW4gb3B0aW9uc09yUGFyZW50T3JQbGFjZVxuICAgICAgKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7cGxhY2U6IG9wdGlvbnNPclBhcmVudE9yUGxhY2V9XG4gICAgICB9XG4gICAgICAvLyBOb2RlLlxuICAgICAgZWxzZSBpZiAoJ3R5cGUnIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2UpIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICBhbmNlc3RvcnM6IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXSxcbiAgICAgICAgICBwbGFjZTogb3B0aW9uc09yUGFyZW50T3JQbGFjZS5wb3NpdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBPcHRpb25zLlxuICAgICAgZWxzZSB7XG4gICAgICAgIG9wdGlvbnMgPSB7Li4ub3B0aW9uc09yUGFyZW50T3JQbGFjZX1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhdXNlT3JSZWFzb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZWFzb24gPSBjYXVzZU9yUmVhc29uXG4gICAgfVxuICAgIC8vIEVycm9yLlxuICAgIGVsc2UgaWYgKCFvcHRpb25zLmNhdXNlICYmIGNhdXNlT3JSZWFzb24pIHtcbiAgICAgIGxlZ2FjeUNhdXNlID0gdHJ1ZVxuICAgICAgcmVhc29uID0gY2F1c2VPclJlYXNvbi5tZXNzYWdlXG4gICAgICBvcHRpb25zLmNhdXNlID0gY2F1c2VPclJlYXNvblxuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5ydWxlSWQgJiYgIW9wdGlvbnMuc291cmNlICYmIHR5cGVvZiBvcmlnaW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBpbmRleCA9IG9yaWdpbi5pbmRleE9mKCc6JylcblxuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICBvcHRpb25zLnJ1bGVJZCA9IG9yaWdpblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0aW9ucy5zb3VyY2UgPSBvcmlnaW4uc2xpY2UoMCwgaW5kZXgpXG4gICAgICAgIG9wdGlvbnMucnVsZUlkID0gb3JpZ2luLnNsaWNlKGluZGV4ICsgMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMucGxhY2UgJiYgb3B0aW9ucy5hbmNlc3RvcnMgJiYgb3B0aW9ucy5hbmNlc3RvcnMpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IG9wdGlvbnMuYW5jZXN0b3JzW29wdGlvbnMuYW5jZXN0b3JzLmxlbmd0aCAtIDFdXG5cbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgb3B0aW9ucy5wbGFjZSA9IHBhcmVudC5wb3NpdGlvblxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID1cbiAgICAgIG9wdGlvbnMucGxhY2UgJiYgJ3N0YXJ0JyBpbiBvcHRpb25zLnBsYWNlXG4gICAgICAgID8gb3B0aW9ucy5wbGFjZS5zdGFydFxuICAgICAgICA6IG9wdGlvbnMucGxhY2VcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICAgIC8qKlxuICAgICAqIFN0YWNrIG9mIGFuY2VzdG9yIG5vZGVzIHN1cnJvdW5kaW5nIHRoZSBtZXNzYWdlLlxuICAgICAqXG4gICAgICogQHR5cGUge0FycmF5PE5vZGU+IHwgdW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMuYW5jZXN0b3JzID0gb3B0aW9ucy5hbmNlc3RvcnMgfHwgdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBPcmlnaW5hbCBlcnJvciBjYXVzZSBvZiB0aGUgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtFcnJvciB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLmNhdXNlID0gb3B0aW9ucy5jYXVzZSB8fCB1bmRlZmluZWRcblxuICAgIC8qKlxuICAgICAqIFN0YXJ0aW5nIGNvbHVtbiBvZiBtZXNzYWdlLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlciB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLmNvbHVtbiA9IHN0YXJ0ID8gc3RhcnQuY29sdW1uIDogdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBTdGF0ZSBvZiBwcm9ibGVtLlxuICAgICAqXG4gICAgICogKiBgdHJ1ZWAgXHUyMDE0IGVycm9yLCBmaWxlIG5vdCB1c2FibGVcbiAgICAgKiAqIGBmYWxzZWAgXHUyMDE0IHdhcm5pbmcsIGNoYW5nZSBtYXkgYmUgbmVlZGVkXG4gICAgICogKiBgdW5kZWZpbmVkYCBcdTIwMTQgY2hhbmdlIGxpa2VseSBub3QgbmVlZGVkXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5mYXRhbCA9IHVuZGVmaW5lZFxuXG4gICAgLyoqXG4gICAgICogUGF0aCBvZiBhIGZpbGUgKHVzZWQgdGhyb3VnaG91dCB0aGUgYFZGaWxlYCBlY29zeXN0ZW0pLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLmZpbGVcblxuICAgIC8vIEZpZWxkIGZyb20gYEVycm9yYC5cbiAgICAvKipcbiAgICAgKiBSZWFzb24gZm9yIG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMubWVzc2FnZSA9IHJlYXNvblxuXG4gICAgLyoqXG4gICAgICogU3RhcnRpbmcgbGluZSBvZiBlcnJvci5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5saW5lID0gc3RhcnQgPyBzdGFydC5saW5lIDogdW5kZWZpbmVkXG5cbiAgICAvLyBGaWVsZCBmcm9tIGBFcnJvcmAuXG4gICAgLyoqXG4gICAgICogU2VyaWFsaXplZCBwb3NpdGlvbmFsIGluZm8gb2YgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIE9uIG5vcm1hbCBlcnJvcnMsIHRoaXMgd291bGQgYmUgc29tZXRoaW5nIGxpa2UgYFBhcnNlRXJyb3JgLCBidWl0IGluXG4gICAgICogYFZGaWxlYCBtZXNzYWdlcyB3ZSB1c2UgdGhpcyBzcGFjZSB0byBzaG93IHdoZXJlIGFuIGVycm9yIGhhcHBlbmVkLlxuICAgICAqL1xuICAgIHRoaXMubmFtZSA9IHN0cmluZ2lmeVBvc2l0aW9uKG9wdGlvbnMucGxhY2UpIHx8ICcxOjEnXG5cbiAgICAvKipcbiAgICAgKiBQbGFjZSBvZiBtZXNzYWdlLlxuICAgICAqXG4gICAgICogQHR5cGUge1BvaW50IHwgUG9zaXRpb24gfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5wbGFjZSA9IG9wdGlvbnMucGxhY2UgfHwgdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBSZWFzb24gZm9yIG1lc3NhZ2UsIHNob3VsZCB1c2UgbWFya2Rvd24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMucmVhc29uID0gdGhpcy5tZXNzYWdlXG5cbiAgICAvKipcbiAgICAgKiBDYXRlZ29yeSBvZiBtZXNzYWdlIChleGFtcGxlOiBgJ215LXJ1bGUnYCkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfVxuICAgICAqL1xuICAgIHRoaXMucnVsZUlkID0gb3B0aW9ucy5ydWxlSWQgfHwgdW5kZWZpbmVkXG5cbiAgICAvKipcbiAgICAgKiBOYW1lc3BhY2Ugb2YgbWVzc2FnZSAoZXhhbXBsZTogYCdteS1wYWNrYWdlJ2ApLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLnNvdXJjZSA9IG9wdGlvbnMuc291cmNlIHx8IHVuZGVmaW5lZFxuXG4gICAgLy8gRmllbGQgZnJvbSBgRXJyb3JgLlxuICAgIC8qKlxuICAgICAqIFN0YWNrIG9mIG1lc3NhZ2UuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgYnkgbm9ybWFsIGVycm9ycyB0byBzaG93IHdoZXJlIHNvbWV0aGluZyBoYXBwZW5lZCBpblxuICAgICAqIHByb2dyYW1taW5nIGNvZGUsIGlycmVsZXZhbnQgZm9yIGBWRmlsZWAgbWVzc2FnZXMsXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRoaXMuc3RhY2sgPVxuICAgICAgbGVnYWN5Q2F1c2UgJiYgb3B0aW9ucy5jYXVzZSAmJiB0eXBlb2Ygb3B0aW9ucy5jYXVzZS5zdGFjayA9PT0gJ3N0cmluZydcbiAgICAgICAgPyBvcHRpb25zLmNhdXNlLnN0YWNrXG4gICAgICAgIDogJydcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgZmllbGRzIGFyZSBcdTIwMUN3ZWxsIGtub3duXHUyMDFELlxuICAgIC8vIE5vdCBzdGFuZGFyZC5cbiAgICAvLyBGZWVsIGZyZWUgdG8gYWRkIG90aGVyIG5vbi1zdGFuZGFyZCBmaWVsZHMgdG8geW91ciBtZXNzYWdlcy5cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgdGhlIHNvdXJjZSB2YWx1ZSB0aGF0XHUyMDE5cyBiZWluZyByZXBvcnRlZCwgd2hpY2ggaXMgZGVlbWVkXG4gICAgICogaW5jb3JyZWN0LlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLmFjdHVhbFxuXG4gICAgLyoqXG4gICAgICogU3VnZ2VzdCBhY2NlcHRhYmxlIHZhbHVlcyB0aGF0IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYGFjdHVhbGAuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLmV4cGVjdGVkXG5cbiAgICAvKipcbiAgICAgKiBMb25nIGZvcm0gZGVzY3JpcHRpb24gb2YgdGhlIG1lc3NhZ2UgKHlvdSBzaG91bGQgdXNlIG1hcmtkb3duKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5ub3RlXG5cbiAgICAvKipcbiAgICAgKiBMaW5rIHRvIGRvY3MgZm9yIHRoZSBtZXNzYWdlLlxuICAgICAqXG4gICAgICogPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IHRoaXMgbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgdGhhdCBjYW4gYmUgcGFzc2VkIGFzIGB4YFxuICAgICAqID4gdG8gYG5ldyBVUkwoeClgLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICAgKi9cbiAgICB0aGlzLnVybFxuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gIH1cbn1cblxuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5maWxlID0gJydcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUubmFtZSA9ICcnXG5WRmlsZU1lc3NhZ2UucHJvdG90eXBlLnJlYXNvbiA9ICcnXG5WRmlsZU1lc3NhZ2UucHJvdG90eXBlLm1lc3NhZ2UgPSAnJ1xuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5zdGFjayA9ICcnXG5WRmlsZU1lc3NhZ2UucHJvdG90eXBlLmNvbHVtbiA9IHVuZGVmaW5lZFxuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5saW5lID0gdW5kZWZpbmVkXG5WRmlsZU1lc3NhZ2UucHJvdG90eXBlLmFuY2VzdG9ycyA9IHVuZGVmaW5lZFxuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5jYXVzZSA9IHVuZGVmaW5lZFxuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5mYXRhbCA9IHVuZGVmaW5lZFxuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5wbGFjZSA9IHVuZGVmaW5lZFxuVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5ydWxlSWQgPSB1bmRlZmluZWRcblZGaWxlTWVzc2FnZS5wcm90b3R5cGUuc291cmNlID0gdW5kZWZpbmVkXG4iLCAiLy8gQSBkZXJpdmF0aXZlIHdvcmsgYmFzZWQgb246XG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvcGF0aC1icm93c2VyaWZ5Pi5cbi8vIFdoaWNoIGlzIGxpY2Vuc2VkOlxuLy9cbi8vIE1JVCBMaWNlbnNlXG4vL1xuLy8gQ29weXJpZ2h0IChjKSAyMDEzIEphbWVzIEhhbGxpZGF5XG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZlxuLy8gdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpblxuLy8gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0b1xuLy8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2Zcbi8vIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyxcbi8vIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuLy8gY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTU1xuLy8gRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SXG4vLyBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVJcbi8vIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG4vLyBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuLy8gQSBkZXJpdmF0aXZlIHdvcmsgYmFzZWQgb246XG4vL1xuLy8gUGFydHMgb2YgdGhhdCBhcmUgZXh0cmFjdGVkIGZyb20gTm9kZVx1MjAxOXMgaW50ZXJuYWwgYHBhdGhgIG1vZHVsZTpcbi8vIDxodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvbGliL3BhdGguanM+LlxuLy8gV2hpY2ggaXMgbGljZW5zZWQ6XG4vL1xuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbmV4cG9ydCBjb25zdCBwYXRoID0ge2Jhc2VuYW1lLCBkaXJuYW1lLCBleHRuYW1lLCBqb2luLCBzZXA6ICcvJ31cblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWRlcHRoLCBjb21wbGV4aXR5ICovXG5cbi8qKlxuICogR2V0IHRoZSBiYXNlbmFtZSBmcm9tIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogICBGaWxlIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtleHRdXG4gKiAgIEV4dGVuc2lvbiB0byBzdHJpcC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFN0ZW0gb3IgYmFzZW5hbWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VuYW1lKHBhdGgsIGV4dCkge1xuICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKVxuICB9XG5cbiAgYXNzZXJ0UGF0aChwYXRoKVxuICBsZXQgc3RhcnQgPSAwXG4gIGxldCBlbmQgPSAtMVxuICBsZXQgaW5kZXggPSBwYXRoLmxlbmd0aFxuICAvKiogQHR5cGUge2Jvb2xlYW4gfCB1bmRlZmluZWR9ICovXG4gIGxldCBzZWVuTm9uU2xhc2hcblxuICBpZiAoZXh0ID09PSB1bmRlZmluZWQgfHwgZXh0Lmxlbmd0aCA9PT0gMCB8fCBleHQubGVuZ3RoID4gcGF0aC5sZW5ndGgpIHtcbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgaWYgKHBhdGguY29kZVBvaW50QXQoaW5kZXgpID09PSA0NyAvKiBgL2AgKi8pIHtcbiAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93LlxuICAgICAgICBpZiAoc2Vlbk5vblNsYXNoKSB7XG4gICAgICAgICAgc3RhcnQgPSBpbmRleCArIDFcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVuZCA8IDApIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAvLyBwYXRoIGNvbXBvbmVudC5cbiAgICAgICAgc2Vlbk5vblNsYXNoID0gdHJ1ZVxuICAgICAgICBlbmQgPSBpbmRleCArIDFcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW5kIDwgMCA/ICcnIDogcGF0aC5zbGljZShzdGFydCwgZW5kKVxuICB9XG5cbiAgaWYgKGV4dCA9PT0gcGF0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgbGV0IGZpcnN0Tm9uU2xhc2hFbmQgPSAtMVxuICBsZXQgZXh0SW5kZXggPSBleHQubGVuZ3RoIC0gMVxuXG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgaWYgKHBhdGguY29kZVBvaW50QXQoaW5kZXgpID09PSA0NyAvKiBgL2AgKi8pIHtcbiAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3cuXG4gICAgICBpZiAoc2Vlbk5vblNsYXNoKSB7XG4gICAgICAgIHN0YXJ0ID0gaW5kZXggKyAxXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmaXJzdE5vblNsYXNoRW5kIDwgMCkge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgcmVtZW1iZXIgdGhpcyBpbmRleCBpbiBjYXNlXG4gICAgICAgIC8vIHdlIG5lZWQgaXQgaWYgdGhlIGV4dGVuc2lvbiBlbmRzIHVwIG5vdCBtYXRjaGluZy5cbiAgICAgICAgc2Vlbk5vblNsYXNoID0gdHJ1ZVxuICAgICAgICBmaXJzdE5vblNsYXNoRW5kID0gaW5kZXggKyAxXG4gICAgICB9XG5cbiAgICAgIGlmIChleHRJbmRleCA+IC0xKSB7XG4gICAgICAgIC8vIFRyeSB0byBtYXRjaCB0aGUgZXhwbGljaXQgZXh0ZW5zaW9uLlxuICAgICAgICBpZiAocGF0aC5jb2RlUG9pbnRBdChpbmRleCkgPT09IGV4dC5jb2RlUG9pbnRBdChleHRJbmRleC0tKSkge1xuICAgICAgICAgIGlmIChleHRJbmRleCA8IDApIHtcbiAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIGV4dGVuc2lvbiwgc28gbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyIHBhdGhcbiAgICAgICAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgICAgICAgZW5kID0gaW5kZXhcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXh0ZW5zaW9uIGRvZXMgbm90IG1hdGNoLCBzbyBvdXIgcmVzdWx0IGlzIHRoZSBlbnRpcmUgcGF0aFxuICAgICAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgICAgIGV4dEluZGV4ID0gLTFcbiAgICAgICAgICBlbmQgPSBmaXJzdE5vblNsYXNoRW5kXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc3RhcnQgPT09IGVuZCkge1xuICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmRcbiAgfSBlbHNlIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kID0gcGF0aC5sZW5ndGhcbiAgfVxuXG4gIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpXG59XG5cbi8qKlxuICogR2V0IHRoZSBkaXJuYW1lIGZyb20gYSBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiAgIEZpbGUgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIEZpbGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gZGlybmFtZShwYXRoKSB7XG4gIGFzc2VydFBhdGgocGF0aClcblxuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJy4nXG4gIH1cblxuICBsZXQgZW5kID0gLTFcbiAgbGV0IGluZGV4ID0gcGF0aC5sZW5ndGhcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgdW5tYXRjaGVkU2xhc2hcblxuICAvLyBQcmVmaXggYC0tYCBpcyBpbXBvcnRhbnQgdG8gbm90IHJ1biBvbiBgMGAuXG4gIHdoaWxlICgtLWluZGV4KSB7XG4gICAgaWYgKHBhdGguY29kZVBvaW50QXQoaW5kZXgpID09PSA0NyAvKiBgL2AgKi8pIHtcbiAgICAgIGlmICh1bm1hdGNoZWRTbGFzaCkge1xuICAgICAgICBlbmQgPSBpbmRleFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXVubWF0Y2hlZFNsYXNoKSB7XG4gICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvclxuICAgICAgdW5tYXRjaGVkU2xhc2ggPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVuZCA8IDBcbiAgICA/IHBhdGguY29kZVBvaW50QXQoMCkgPT09IDQ3IC8qIGAvYCAqL1xuICAgICAgPyAnLydcbiAgICAgIDogJy4nXG4gICAgOiBlbmQgPT09IDEgJiYgcGF0aC5jb2RlUG9pbnRBdCgwKSA9PT0gNDcgLyogYC9gICovXG4gICAgPyAnLy8nXG4gICAgOiBwYXRoLnNsaWNlKDAsIGVuZClcbn1cblxuLyoqXG4gKiBHZXQgYW4gZXh0bmFtZSBmcm9tIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogICBGaWxlIHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBFeHRuYW1lLlxuICovXG5mdW5jdGlvbiBleHRuYW1lKHBhdGgpIHtcbiAgYXNzZXJ0UGF0aChwYXRoKVxuXG4gIGxldCBpbmRleCA9IHBhdGgubGVuZ3RoXG5cbiAgbGV0IGVuZCA9IC0xXG4gIGxldCBzdGFydFBhcnQgPSAwXG4gIGxldCBzdGFydERvdCA9IC0xXG4gIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmQuXG4gIGxldCBwcmVEb3RTdGF0ZSA9IDBcbiAgLyoqIEB0eXBlIHtib29sZWFuIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgdW5tYXRjaGVkU2xhc2hcblxuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIGNvbnN0IGNvZGUgPSBwYXRoLmNvZGVQb2ludEF0KGluZGV4KVxuXG4gICAgaWYgKGNvZGUgPT09IDQ3IC8qIGAvYCAqLykge1xuICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vdy5cbiAgICAgIGlmICh1bm1hdGNoZWRTbGFzaCkge1xuICAgICAgICBzdGFydFBhcnQgPSBpbmRleCArIDFcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgLy8gZXh0ZW5zaW9uLlxuICAgICAgdW5tYXRjaGVkU2xhc2ggPSB0cnVlXG4gICAgICBlbmQgPSBpbmRleCArIDFcbiAgICB9XG5cbiAgICBpZiAoY29kZSA9PT0gNDYgLyogYC5gICovKSB7XG4gICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb24uXG4gICAgICBpZiAoc3RhcnREb3QgPCAwKSB7XG4gICAgICAgIHN0YXJ0RG90ID0gaW5kZXhcbiAgICAgIH0gZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpIHtcbiAgICAgICAgcHJlRG90U3RhdGUgPSAxXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGFydERvdCA+IC0xKSB7XG4gICAgICAvLyBXZSBzYXcgYSBub24tZG90IGFuZCBub24tcGF0aCBzZXBhcmF0b3IgYmVmb3JlIG91ciBkb3QsIHNvIHdlIHNob3VsZFxuICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb24uXG4gICAgICBwcmVEb3RTdGF0ZSA9IC0xXG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIHN0YXJ0RG90IDwgMCB8fFxuICAgIGVuZCA8IDAgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdC5cbiAgICBwcmVEb3RTdGF0ZSA9PT0gMCB8fFxuICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5IGAuLmAuXG4gICAgKHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKVxuICApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpXG59XG5cbi8qKlxuICogSm9pbiBzZWdtZW50cyBmcm9tIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHNlZ21lbnRzXG4gKiAgIFBhdGggc2VnbWVudHMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBGaWxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGpvaW4oLi4uc2VnbWVudHMpIHtcbiAgbGV0IGluZGV4ID0gLTFcbiAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gIGxldCBqb2luZWRcblxuICB3aGlsZSAoKytpbmRleCA8IHNlZ21lbnRzLmxlbmd0aCkge1xuICAgIGFzc2VydFBhdGgoc2VnbWVudHNbaW5kZXhdKVxuXG4gICAgaWYgKHNlZ21lbnRzW2luZGV4XSkge1xuICAgICAgam9pbmVkID1cbiAgICAgICAgam9pbmVkID09PSB1bmRlZmluZWQgPyBzZWdtZW50c1tpbmRleF0gOiBqb2luZWQgKyAnLycgKyBzZWdtZW50c1tpbmRleF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gam9pbmVkID09PSB1bmRlZmluZWQgPyAnLicgOiBub3JtYWxpemUoam9pbmVkKVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIGJhc2ljIGZpbGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogICBGaWxlIHBhdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBGaWxlIHBhdGguXG4gKi9cbi8vIE5vdGU6IGBub3JtYWxpemVgIGlzIG5vdCBleHBvc2VkIGFzIGBwYXRoLm5vcm1hbGl6ZWAsIHNvIHNvbWUgY29kZSBpc1xuLy8gbWFudWFsbHkgcmVtb3ZlZCBmcm9tIGl0LlxuZnVuY3Rpb24gbm9ybWFsaXplKHBhdGgpIHtcbiAgYXNzZXJ0UGF0aChwYXRoKVxuXG4gIGNvbnN0IGFic29sdXRlID0gcGF0aC5jb2RlUG9pbnRBdCgwKSA9PT0gNDcgLyogYC9gICovXG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoIGFjY29yZGluZyB0byBQT1NJWCBydWxlcy5cbiAgbGV0IHZhbHVlID0gbm9ybWFsaXplU3RyaW5nKHBhdGgsICFhYnNvbHV0ZSlcblxuICBpZiAodmFsdWUubGVuZ3RoID09PSAwICYmICFhYnNvbHV0ZSkge1xuICAgIHZhbHVlID0gJy4nXG4gIH1cblxuICBpZiAodmFsdWUubGVuZ3RoID4gMCAmJiBwYXRoLmNvZGVQb2ludEF0KHBhdGgubGVuZ3RoIC0gMSkgPT09IDQ3IC8qIC8gKi8pIHtcbiAgICB2YWx1ZSArPSAnLydcbiAgfVxuXG4gIHJldHVybiBhYnNvbHV0ZSA/ICcvJyArIHZhbHVlIDogdmFsdWVcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGAuYCBhbmQgYC4uYCBlbGVtZW50cyBpbiBhIHBhdGggd2l0aCBkaXJlY3RvcnkgbmFtZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqICAgRmlsZSBwYXRoLlxuICogQHBhcmFtIHtib29sZWFufSBhbGxvd0Fib3ZlUm9vdFxuICogICBXaGV0aGVyIGAuLmAgY2FuIG1vdmUgYWJvdmUgcm9vdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIEZpbGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nKHBhdGgsIGFsbG93QWJvdmVSb290KSB7XG4gIGxldCByZXN1bHQgPSAnJ1xuICBsZXQgbGFzdFNlZ21lbnRMZW5ndGggPSAwXG4gIGxldCBsYXN0U2xhc2ggPSAtMVxuICBsZXQgZG90cyA9IDBcbiAgbGV0IGluZGV4ID0gLTFcbiAgLyoqIEB0eXBlIHtudW1iZXIgfCB1bmRlZmluZWR9ICovXG4gIGxldCBjb2RlXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBsZXQgbGFzdFNsYXNoSW5kZXhcblxuICB3aGlsZSAoKytpbmRleCA8PSBwYXRoLmxlbmd0aCkge1xuICAgIGlmIChpbmRleCA8IHBhdGgubGVuZ3RoKSB7XG4gICAgICBjb2RlID0gcGF0aC5jb2RlUG9pbnRBdChpbmRleClcbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQ3IC8qIGAvYCAqLykge1xuICAgICAgYnJlYWtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZSA9IDQ3IC8qIGAvYCAqL1xuICAgIH1cblxuICAgIGlmIChjb2RlID09PSA0NyAvKiBgL2AgKi8pIHtcbiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGluZGV4IC0gMSB8fCBkb3RzID09PSAxKSB7XG4gICAgICAgIC8vIEVtcHR5LlxuICAgICAgfSBlbHNlIGlmIChsYXN0U2xhc2ggIT09IGluZGV4IC0gMSAmJiBkb3RzID09PSAyKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXN1bHQubGVuZ3RoIDwgMiB8fFxuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8XG4gICAgICAgICAgcmVzdWx0LmNvZGVQb2ludEF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gNDYgLyogYC5gICovIHx8XG4gICAgICAgICAgcmVzdWx0LmNvZGVQb2ludEF0KHJlc3VsdC5sZW5ndGggLSAyKSAhPT0gNDYgLyogYC5gICovXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgbGFzdFNsYXNoSW5kZXggPSByZXN1bHQubGFzdEluZGV4T2YoJy8nKVxuXG4gICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggIT09IHJlc3VsdC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAnJ1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMFxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBsYXN0U2xhc2hJbmRleClcbiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IHJlc3VsdC5sZW5ndGggLSAxIC0gcmVzdWx0Lmxhc3RJbmRleE9mKCcvJylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxhc3RTbGFzaCA9IGluZGV4XG4gICAgICAgICAgICAgIGRvdHMgPSAwXG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gJydcbiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMFxuICAgICAgICAgICAgbGFzdFNsYXNoID0gaW5kZXhcbiAgICAgICAgICAgIGRvdHMgPSAwXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5sZW5ndGggPiAwID8gcmVzdWx0ICsgJy8uLicgOiAnLi4nXG4gICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAyXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJlc3VsdCArPSAnLycgKyBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGluZGV4KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IHBhdGguc2xpY2UobGFzdFNsYXNoICsgMSwgaW5kZXgpXG4gICAgICAgIH1cblxuICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IGluZGV4IC0gbGFzdFNsYXNoIC0gMVxuICAgICAgfVxuXG4gICAgICBsYXN0U2xhc2ggPSBpbmRleFxuICAgICAgZG90cyA9IDBcbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQ2IC8qIGAuYCAqLyAmJiBkb3RzID4gLTEpIHtcbiAgICAgIGRvdHMrK1xuICAgIH0gZWxzZSB7XG4gICAgICBkb3RzID0gLTFcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogTWFrZSBzdXJlIGBwYXRoYCBpcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogICBGaWxlIHBhdGguXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBwYXRoIGlzIHN0cmluZ31cbiAqICAgTm90aGluZy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1BhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIEpTT04uc3RyaW5naWZ5KHBhdGgpXG4gICAgKVxuICB9XG59XG5cbi8qIGVzbGludC1lbmFibGUgbWF4LWRlcHRoLCBjb21wbGV4aXR5ICovXG4iLCAiLy8gU29tZXdoYXQgYmFzZWQgb246XG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL2RlZnVuY3R6b21iaWUvbm9kZS1wcm9jZXNzL2Jsb2IvbWFzdGVyL2Jyb3dzZXIuanM+LlxuLy8gQnV0IEkgZG9uXHUyMDE5dCB0aGluayBvbmUgdGlueSBsaW5lIG9mIGNvZGUgY2FuIGJlIGNvcHlyaWdodGVkLiBcdUQ4M0RcdURFMDVcbmV4cG9ydCBjb25zdCBwcm9jID0ge2N3ZH1cblxuZnVuY3Rpb24gY3dkKCkge1xuICByZXR1cm4gJy8nXG59XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBoYXMgdGhlIHNoYXBlIG9mIGEgV0hBVFdHIFVSTCBvYmplY3QuXG4gKlxuICogVXNpbmcgYSBzeW1ib2wgb3IgaW5zdGFuY2VvZiB3b3VsZCBub3QgYmUgYWJsZSB0byByZWNvZ25pemUgVVJMIG9iamVjdHNcbiAqIGNvbWluZyBmcm9tIG90aGVyIGltcGxlbWVudGF0aW9ucyAoZS5nLiBpbiBFbGVjdHJvbiksIHNvIGluc3RlYWQgd2UgYXJlXG4gKiBjaGVja2luZyBzb21lIHdlbGwga25vd24gcHJvcGVydGllcyBmb3IgYSBsYWNrIG9mIGEgYmV0dGVyIHRlc3QuXG4gKlxuICogV2UgdXNlIGBocmVmYCBhbmQgYHByb3RvY29sYCBhcyB0aGV5IGFyZSB0aGUgb25seSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiBlYXN5IHRvIHJldHJpZXZlIGFuZCBjYWxjdWxhdGUgZHVlIHRvIHRoZSBsYXp5IG5hdHVyZSBvZiB0aGUgZ2V0dGVycy5cbiAqXG4gKiBXZSBjaGVjayBmb3IgYXV0aCBhdHRyaWJ1dGUgdG8gZGlzdGluZ3Vpc2ggbGVnYWN5IHVybCBpbnN0YW5jZSB3aXRoXG4gKiBXSEFUV0cgVVJMIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gZmlsZVVybE9yUGF0aFxuICogICBGaWxlIHBhdGggb3IgVVJMLlxuICogQHJldHVybnMge2ZpbGVVcmxPclBhdGggaXMgVVJMfVxuICogICBXaGV0aGVyIGl0XHUyMDE5cyBhIFVSTC5cbiAqL1xuLy8gRnJvbTogPGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzZhMzQwM2MvbGliL2ludGVybmFsL3VybC5qcyNMNzIwPlxuZXhwb3J0IGZ1bmN0aW9uIGlzVXJsKGZpbGVVcmxPclBhdGgpIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZmlsZVVybE9yUGF0aCAhPT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIGZpbGVVcmxPclBhdGggPT09ICdvYmplY3QnICYmXG4gICAgICAnaHJlZicgaW4gZmlsZVVybE9yUGF0aCAmJlxuICAgICAgZmlsZVVybE9yUGF0aC5ocmVmICYmXG4gICAgICAncHJvdG9jb2wnIGluIGZpbGVVcmxPclBhdGggJiZcbiAgICAgIGZpbGVVcmxPclBhdGgucHJvdG9jb2wgJiZcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGluZGV4aW5nIGlzIGZpbmUuXG4gICAgICBmaWxlVXJsT3JQYXRoLmF1dGggPT09IHVuZGVmaW5lZFxuICApXG59XG4iLCAiaW1wb3J0IHtpc1VybH0gZnJvbSAnLi9taW51cmwuc2hhcmVkLmpzJ1xuXG5leHBvcnQge2lzVXJsfSBmcm9tICcuL21pbnVybC5zaGFyZWQuanMnXG5cbi8vIFNlZTogPGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzZhMzQwM2MvbGliL2ludGVybmFsL3VybC5qcz5cblxuLyoqXG4gKiBAcGFyYW0ge1VSTCB8IHN0cmluZ30gcGF0aFxuICogICBGaWxlIFVSTC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIEZpbGUgVVJMLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXJsVG9QYXRoKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xuICAgIHBhdGggPSBuZXcgVVJMKHBhdGgpXG4gIH0gZWxzZSBpZiAoIWlzVXJsKHBhdGgpKSB7XG4gICAgLyoqIEB0eXBlIHtOb2RlSlMuRXJybm9FeGNlcHRpb259ICovXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInBhdGhcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIFVSTC4gUmVjZWl2ZWQgYCcgK1xuICAgICAgICBwYXRoICtcbiAgICAgICAgJ2AnXG4gICAgKVxuICAgIGVycm9yLmNvZGUgPSAnRVJSX0lOVkFMSURfQVJHX1RZUEUnXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxuXG4gIGlmIChwYXRoLnByb3RvY29sICE9PSAnZmlsZTonKSB7XG4gICAgLyoqIEB0eXBlIHtOb2RlSlMuRXJybm9FeGNlcHRpb259ICovXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKCdUaGUgVVJMIG11c3QgYmUgb2Ygc2NoZW1lIGZpbGUnKVxuICAgIGVycm9yLmNvZGUgPSAnRVJSX0lOVkFMSURfVVJMX1NDSEVNRSdcbiAgICB0aHJvdyBlcnJvclxuICB9XG5cbiAgcmV0dXJuIGdldFBhdGhGcm9tVVJMUG9zaXgocGF0aClcbn1cblxuLyoqXG4gKiBHZXQgYSBwYXRoIGZyb20gYSBQT1NJWCBVUkwuXG4gKlxuICogQHBhcmFtIHtVUkx9IHVybFxuICogICBVUkwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBGaWxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldFBhdGhGcm9tVVJMUG9zaXgodXJsKSB7XG4gIGlmICh1cmwuaG9zdG5hbWUgIT09ICcnKSB7XG4gICAgLyoqIEB0eXBlIHtOb2RlSlMuRXJybm9FeGNlcHRpb259ICovXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgJ0ZpbGUgVVJMIGhvc3QgbXVzdCBiZSBcImxvY2FsaG9zdFwiIG9yIGVtcHR5IG9uIGRhcndpbidcbiAgICApXG4gICAgZXJyb3IuY29kZSA9ICdFUlJfSU5WQUxJRF9GSUxFX1VSTF9IT1NUJ1xuICAgIHRocm93IGVycm9yXG4gIH1cblxuICBjb25zdCBwYXRobmFtZSA9IHVybC5wYXRobmFtZVxuICBsZXQgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgcGF0aG5hbWUubGVuZ3RoKSB7XG4gICAgaWYgKFxuICAgICAgcGF0aG5hbWUuY29kZVBvaW50QXQoaW5kZXgpID09PSAzNyAvKiBgJWAgKi8gJiZcbiAgICAgIHBhdGhuYW1lLmNvZGVQb2ludEF0KGluZGV4ICsgMSkgPT09IDUwIC8qIGAyYCAqL1xuICAgICkge1xuICAgICAgY29uc3QgdGhpcmQgPSBwYXRobmFtZS5jb2RlUG9pbnRBdChpbmRleCArIDIpXG4gICAgICBpZiAodGhpcmQgPT09IDcwIC8qIGBGYCAqLyB8fCB0aGlyZCA9PT0gMTAyIC8qIGBmYCAqLykge1xuICAgICAgICAvKiogQHR5cGUge05vZGVKUy5FcnJub0V4Y2VwdGlvbn0gKi9cbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdGaWxlIFVSTCBwYXRoIG11c3Qgbm90IGluY2x1ZGUgZW5jb2RlZCAvIGNoYXJhY3RlcnMnXG4gICAgICAgIClcbiAgICAgICAgZXJyb3IuY29kZSA9ICdFUlJfSU5WQUxJRF9GSUxFX1VSTF9QQVRIJ1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocGF0aG5hbWUpXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLk5vZGV9IE5vZGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3VuaXN0JykuUG9pbnR9IFBvaW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd1bmlzdCcpLlBvc2l0aW9ufSBQb3NpdGlvblxuICogQHR5cGVkZWYge2ltcG9ydCgndmZpbGUtbWVzc2FnZScpLk9wdGlvbnN9IE1lc3NhZ2VPcHRpb25zXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9pbmRleC5qcycpLkRhdGF9IERhdGFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2luZGV4LmpzJykuVmFsdWV9IFZhbHVlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0ICYge3R5cGU6IHN0cmluZywgcG9zaXRpb24/OiBQb3NpdGlvbiB8IHVuZGVmaW5lZH19IE5vZGVMaWtlXG4gKlxuICogQHR5cGVkZWYge09wdGlvbnMgfCBVUkwgfCBWRmlsZSB8IFZhbHVlfSBDb21wYXRpYmxlXG4gKiAgIFRoaW5ncyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEB0eXBlZGVmIFZGaWxlQ29yZU9wdGlvbnNcbiAqICAgU2V0IG11bHRpcGxlIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2Jhc2VuYW1lXVxuICogICBTZXQgYGJhc2VuYW1lYCAobmFtZSkuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtjd2RdXG4gKiAgIFNldCBgY3dkYCAod29ya2luZyBkaXJlY3RvcnkpLlxuICogQHByb3BlcnR5IHtEYXRhIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2RhdGFdXG4gKiAgIFNldCBgZGF0YWAgKGFzc29jaWF0ZWQgaW5mbykuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtkaXJuYW1lXVxuICogICBTZXQgYGRpcm5hbWVgIChwYXRoIHcvbyBiYXNlbmFtZSkuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtleHRuYW1lXVxuICogICBTZXQgYGV4dG5hbWVgIChleHRlbnNpb24gd2l0aCBkb3QpLlxuICogQHByb3BlcnR5IHtBcnJheTxzdHJpbmc+IHwgbnVsbCB8IHVuZGVmaW5lZH0gW2hpc3RvcnldXG4gKiAgIFNldCBgaGlzdG9yeWAgKHBhdGhzIHRoZSBmaWxlIG1vdmVkIGJldHdlZW4pLlxuICogQHByb3BlcnR5IHtVUkwgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbcGF0aF1cbiAqICAgU2V0IGBwYXRoYCAoY3VycmVudCBwYXRoKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3N0ZW1dXG4gKiAgIFNldCBgc3RlbWAgKG5hbWUgd2l0aG91dCBleHRlbnNpb24pLlxuICogQHByb3BlcnR5IHtWYWx1ZSB8IG51bGwgfCB1bmRlZmluZWR9IFt2YWx1ZV1cbiAqICAgU2V0IGB2YWx1ZWAgKHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSkuXG4gKlxuICogQHR5cGVkZWYgTWFwXG4gKiAgIFJhdyBzb3VyY2UgbWFwLlxuICpcbiAqICAgU2VlOlxuICogICA8aHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvc291cmNlLW1hcC9ibG9iLzYwYWRjYjAvc291cmNlLW1hcC5kLnRzI0wxNS1MMjM+LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcnNpb25cbiAqICAgV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gc291cmNlc1xuICogICBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiBAcHJvcGVydHkge0FycmF5PHN0cmluZz59IG5hbWVzXG4gKiAgIEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcmVuY2VkIGJ5IGluZGl2aWR1YWwgbWFwcGluZ3MuXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gW3NvdXJjZVJvb3RdXG4gKiAgIFRoZSBVUkwgcm9vdCBmcm9tIHdoaWNoIGFsbCBzb3VyY2VzIGFyZSByZWxhdGl2ZS5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZH0gW3NvdXJjZXNDb250ZW50XVxuICogICBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1hcHBpbmdzXG4gKiAgIEEgc3RyaW5nIG9mIGJhc2U2NCBWTFFzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCBtYXBwaW5ncy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlXG4gKiAgIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIFZGaWxlQ29yZU9wdGlvbnN9IE9wdGlvbnNcbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqXG4gKiAgIEEgYnVuY2ggb2Yga2V5cyB0aGF0IHdpbGwgYmUgc2hhbGxvdyBjb3BpZWQgb3ZlciB0byB0aGUgbmV3IGZpbGUuXG4gKlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBSZXBvcnRlclNldHRpbmdzXG4gKiAgIENvbmZpZ3VyYXRpb24gZm9yIHJlcG9ydGVycy5cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBbU2V0dGluZ3M9UmVwb3J0ZXJTZXR0aW5nc11cbiAqICAgT3B0aW9ucyB0eXBlLlxuICogQGNhbGxiYWNrIFJlcG9ydGVyXG4gKiAgIFR5cGUgZm9yIGEgcmVwb3J0ZXIuXG4gKiBAcGFyYW0ge0FycmF5PFZGaWxlPn0gZmlsZXNcbiAqICAgRmlsZXMgdG8gcmVwb3J0LlxuICogQHBhcmFtIHtTZXR0aW5nc30gb3B0aW9uc1xuICogICBDb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgUmVwb3J0LlxuICovXG5cbmltcG9ydCB7VkZpbGVNZXNzYWdlfSBmcm9tICd2ZmlsZS1tZXNzYWdlJ1xuaW1wb3J0IHtwYXRofSBmcm9tICd2ZmlsZS9kby1ub3QtdXNlLWNvbmRpdGlvbmFsLW1pbnBhdGgnXG5pbXBvcnQge3Byb2N9IGZyb20gJ3ZmaWxlL2RvLW5vdC11c2UtY29uZGl0aW9uYWwtbWlucHJvYydcbmltcG9ydCB7dXJsVG9QYXRoLCBpc1VybH0gZnJvbSAndmZpbGUvZG8tbm90LXVzZS1jb25kaXRpb25hbC1taW51cmwnXG5cbi8qKlxuICogT3JkZXIgb2Ygc2V0dGluZyAobGVhc3Qgc3BlY2lmaWMgdG8gbW9zdCksIHdlIG5lZWQgdGhpcyBiZWNhdXNlIG90aGVyd2lzZVxuICogYHtzdGVtOiAnYScsIHBhdGg6ICd+L2IuanMnfWAgd291bGQgdGhyb3csIGFzIGEgcGF0aCBpcyBuZWVkZWQgYmVmb3JlIGFcbiAqIHN0ZW0gY2FuIGJlIHNldC5cbiAqL1xuY29uc3Qgb3JkZXIgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnaGlzdG9yeScsXG4gICdwYXRoJyxcbiAgJ2Jhc2VuYW1lJyxcbiAgJ3N0ZW0nLFxuICAnZXh0bmFtZScsXG4gICdkaXJuYW1lJ1xuXSlcblxuZXhwb3J0IGNsYXNzIFZGaWxlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyB2aXJ0dWFsIGZpbGUuXG4gICAqXG4gICAqIGBvcHRpb25zYCBpcyB0cmVhdGVkIGFzOlxuICAgKlxuICAgKiAqICAgYHN0cmluZ2Agb3IgYFVpbnQ4QXJyYXlgIFx1MjAxNCBge3ZhbHVlOiBvcHRpb25zfWBcbiAgICogKiAgIGBVUkxgIFx1MjAxNCBge3BhdGg6IG9wdGlvbnN9YFxuICAgKiAqICAgYFZGaWxlYCBcdTIwMTQgc2hhbGxvdyBjb3BpZXMgaXRzIGRhdGEgb3ZlciB0byB0aGUgbmV3IGZpbGVcbiAgICogKiAgIGBvYmplY3RgIFx1MjAxNCBhbGwgZmllbGRzIGFyZSBzaGFsbG93IGNvcGllZCBvdmVyIHRvIHRoZSBuZXcgZmlsZVxuICAgKlxuICAgKiBQYXRoIHJlbGF0ZWQgZmllbGRzIGFyZSBzZXQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAobGVhc3Qgc3BlY2lmaWMgdG9cbiAgICogbW9zdCBzcGVjaWZpYyk6IGBoaXN0b3J5YCwgYHBhdGhgLCBgYmFzZW5hbWVgLCBgc3RlbWAsIGBleHRuYW1lYCxcbiAgICogYGRpcm5hbWVgLlxuICAgKlxuICAgKiBZb3UgY2Fubm90IHNldCBgZGlybmFtZWAgb3IgYGV4dG5hbWVgIHdpdGhvdXQgc2V0dGluZyBlaXRoZXIgYGhpc3RvcnlgLFxuICAgKiBgcGF0aGAsIGBiYXNlbmFtZWAsIG9yIGBzdGVtYCB0b28uXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IG51bGwgfCB1bmRlZmluZWR9IFt2YWx1ZV1cbiAgICogICBGaWxlIHZhbHVlLlxuICAgKiBAcmV0dXJuc1xuICAgKiAgIE5ldyBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgLyoqIEB0eXBlIHtPcHRpb25zIHwgVkZpbGV9ICovXG4gICAgbGV0IG9wdGlvbnNcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH0gZWxzZSBpZiAoaXNVcmwodmFsdWUpKSB7XG4gICAgICBvcHRpb25zID0ge3BhdGg6IHZhbHVlfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCBpc1VpbnQ4QXJyYXkodmFsdWUpKSB7XG4gICAgICBvcHRpb25zID0ge3ZhbHVlfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0gdmFsdWVcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cblxuICAgIC8qKlxuICAgICAqIEJhc2Ugb2YgYHBhdGhgIChkZWZhdWx0OiBgcHJvY2Vzcy5jd2QoKWAgb3IgYCcvJ2AgaW4gYnJvd3NlcnMpLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLmN3ZCA9IHByb2MuY3dkKClcblxuICAgIC8qKlxuICAgICAqIFBsYWNlIHRvIHN0b3JlIGN1c3RvbSBpbmZvIChkZWZhdWx0OiBge31gKS5cbiAgICAgKlxuICAgICAqIEl0XHUyMDE5cyBPSyB0byBzdG9yZSBjdXN0b20gZGF0YSBkaXJlY3RseSBvbiB0aGUgZmlsZSBidXQgbW92aW5nIGl0IHRvXG4gICAgICogYGRhdGFgIGlzIHJlY29tbWVuZGVkLlxuICAgICAqXG4gICAgICogQHR5cGUge0RhdGF9XG4gICAgICovXG4gICAgdGhpcy5kYXRhID0ge31cblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgZmlsZSBwYXRocyB0aGUgZmlsZSBtb3ZlZCBiZXR3ZWVuLlxuICAgICAqXG4gICAgICogVGhlIGZpcnN0IGlzIHRoZSBvcmlnaW5hbCBwYXRoIGFuZCB0aGUgbGFzdCBpcyB0aGUgY3VycmVudCBwYXRoLlxuICAgICAqXG4gICAgICogQHR5cGUge0FycmF5PHN0cmluZz59XG4gICAgICovXG4gICAgdGhpcy5oaXN0b3J5ID0gW11cblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgbWVzc2FnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLlxuICAgICAqXG4gICAgICogQHR5cGUge0FycmF5PFZGaWxlTWVzc2FnZT59XG4gICAgICovXG4gICAgdGhpcy5tZXNzYWdlcyA9IFtdXG5cbiAgICAvKipcbiAgICAgKiBSYXcgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7VmFsdWV9XG4gICAgICovXG4gICAgdGhpcy52YWx1ZVxuXG4gICAgLy8gVGhlIGJlbG93IGFyZSBub24tc3RhbmRhcmQsIHRoZXkgYXJlIFx1MjAxQ3dlbGwta25vd25cdTIwMUQuXG4gICAgLy8gQXMgaW4sIHVzZWQgaW4gc2V2ZXJhbCB0b29scy5cbiAgICAvKipcbiAgICAgKiBTb3VyY2UgbWFwLlxuICAgICAqXG4gICAgICogVGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGBSYXdTb3VyY2VNYXBgIHR5cGUgZnJvbSB0aGUgYHNvdXJjZS1tYXBgXG4gICAgICogbW9kdWxlLlxuICAgICAqXG4gICAgICogQHR5cGUge01hcCB8IG51bGwgfCB1bmRlZmluZWR9XG4gICAgICovXG4gICAgdGhpcy5tYXBcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSwgbm9uLXN0cmluZywgY29tcGlsZWQsIHJlcHJlc2VudGF0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB1c2VkIGJ5IHVuaWZpZWQgdG8gc3RvcmUgbm9uLXN0cmluZyByZXN1bHRzLlxuICAgICAqIE9uZSBleGFtcGxlIGlzIHdoZW4gdHVybmluZyBtYXJrZG93biBpbnRvIFJlYWN0IG5vZGVzLlxuICAgICAqXG4gICAgICogQHR5cGUge3Vua25vd259XG4gICAgICovXG4gICAgdGhpcy5yZXN1bHRcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgYSBmaWxlIHdhcyBzYXZlZCB0byBkaXNrLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB1c2VkIGJ5IHZmaWxlIHJlcG9ydGVycy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuc3RvcmVkXG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cblxuICAgIC8vIFNldCBwYXRoIHJlbGF0ZWQgcHJvcGVydGllcyBpbiB0aGUgY29ycmVjdCBvcmRlci5cbiAgICBsZXQgaW5kZXggPSAtMVxuXG4gICAgd2hpbGUgKCsraW5kZXggPCBvcmRlci5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHByb3AgPSBvcmRlcltpbmRleF1cblxuICAgICAgLy8gTm90ZTogd2Ugc3BlY2lmaWNhbGx5IHVzZSBgaW5gIGluc3RlYWQgb2YgYGhhc093blByb3BlcnR5YCB0byBhY2NlcHRcbiAgICAgIC8vIGB2ZmlsZWBzIHRvby5cbiAgICAgIGlmIChcbiAgICAgICAgcHJvcCBpbiBvcHRpb25zICYmXG4gICAgICAgIG9wdGlvbnNbcHJvcF0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBvcHRpb25zW3Byb3BdICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogVFMgZG9lc25cdTIwMTl0IHVuZGVyc3RhbmQgYmFzaWMgcmVhbGl0eS5cbiAgICAgICAgdGhpc1twcm9wXSA9IHByb3AgPT09ICdoaXN0b3J5JyA/IFsuLi5vcHRpb25zW3Byb3BdXSA6IG9wdGlvbnNbcHJvcF1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cbiAgICBsZXQgcHJvcFxuXG4gICAgLy8gU2V0IG5vbi1wYXRoIHJlbGF0ZWQgcHJvcGVydGllcy5cbiAgICBmb3IgKHByb3AgaW4gb3B0aW9ucykge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogZmluZSB0byBzZXQgb3RoZXIgdGhpbmdzLlxuICAgICAgaWYgKCFvcmRlci5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBmaW5lIHRvIHNldCBvdGhlciB0aGluZ3MuXG4gICAgICAgIHRoaXNbcHJvcF0gPSBvcHRpb25zW3Byb3BdXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYmFzZW5hbWUgKGluY2x1ZGluZyBleHRuYW1lKSAoZXhhbXBsZTogYCdpbmRleC5taW4uanMnYCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqICAgQmFzZW5hbWUuXG4gICAqL1xuICBnZXQgYmFzZW5hbWUoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnID8gcGF0aC5iYXNlbmFtZSh0aGlzLnBhdGgpIDogdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogU2V0IGJhc2VuYW1lIChpbmNsdWRpbmcgZXh0bmFtZSkgKGAnaW5kZXgubWluLmpzJ2ApLlxuICAgKlxuICAgKiBDYW5ub3QgY29udGFpbiBwYXRoIHNlcGFyYXRvcnMgKGAnLydgIG9uIHVuaXgsIG1hY09TLCBhbmQgYnJvd3NlcnMsIGAnXFwnYFxuICAgKiBvbiB3aW5kb3dzKS5cbiAgICogQ2Fubm90IGJlIG51bGxpZmllZCAodXNlIGBmaWxlLnBhdGggPSBmaWxlLmRpcm5hbWVgIGluc3RlYWQpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZW5hbWVcbiAgICogICBCYXNlbmFtZS5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgc2V0IGJhc2VuYW1lKGJhc2VuYW1lKSB7XG4gICAgYXNzZXJ0Tm9uRW1wdHkoYmFzZW5hbWUsICdiYXNlbmFtZScpXG4gICAgYXNzZXJ0UGFydChiYXNlbmFtZSwgJ2Jhc2VuYW1lJylcbiAgICB0aGlzLnBhdGggPSBwYXRoLmpvaW4odGhpcy5kaXJuYW1lIHx8ICcnLCBiYXNlbmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBhcmVudCBwYXRoIChleGFtcGxlOiBgJ34nYCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gICAqICAgRGlybmFtZS5cbiAgICovXG4gIGdldCBkaXJuYW1lKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoID09PSAnc3RyaW5nJyA/IHBhdGguZGlybmFtZSh0aGlzLnBhdGgpIDogdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBwYXJlbnQgcGF0aCAoZXhhbXBsZTogYCd+J2ApLlxuICAgKlxuICAgKiBDYW5ub3QgYmUgc2V0IGlmIHRoZXJlXHUyMDE5cyBubyBgcGF0aGAgeWV0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gZGlybmFtZVxuICAgKiAgIERpcm5hbWUuXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqICAgTm90aGluZy5cbiAgICovXG4gIHNldCBkaXJuYW1lKGRpcm5hbWUpIHtcbiAgICBhc3NlcnRQYXRoKHRoaXMuYmFzZW5hbWUsICdkaXJuYW1lJylcbiAgICB0aGlzLnBhdGggPSBwYXRoLmpvaW4oZGlybmFtZSB8fCAnJywgdGhpcy5iYXNlbmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4dG5hbWUgKGluY2x1ZGluZyBkb3QpIChleGFtcGxlOiBgJy5qcydgKS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogICBFeHRuYW1lLlxuICAgKi9cbiAgZ2V0IGV4dG5hbWUoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnID8gcGF0aC5leHRuYW1lKHRoaXMucGF0aCkgOiB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGV4dG5hbWUgKGluY2x1ZGluZyBkb3QpIChleGFtcGxlOiBgJy5qcydgKS5cbiAgICpcbiAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1xcJ2BcbiAgICogb24gd2luZG93cykuXG4gICAqIENhbm5vdCBiZSBzZXQgaWYgdGhlcmVcdTIwMTlzIG5vIGBwYXRoYCB5ZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBleHRuYW1lXG4gICAqICAgRXh0bmFtZS5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgc2V0IGV4dG5hbWUoZXh0bmFtZSkge1xuICAgIGFzc2VydFBhcnQoZXh0bmFtZSwgJ2V4dG5hbWUnKVxuICAgIGFzc2VydFBhdGgodGhpcy5kaXJuYW1lLCAnZXh0bmFtZScpXG5cbiAgICBpZiAoZXh0bmFtZSkge1xuICAgICAgaWYgKGV4dG5hbWUuY29kZVBvaW50QXQoMCkgIT09IDQ2IC8qIGAuYCAqLykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gJylcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dG5hbWUuaW5jbHVkZXMoJy4nLCAxKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2BleHRuYW1lYCBjYW5ub3QgY29udGFpbiBtdWx0aXBsZSBkb3RzJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhdGggPSBwYXRoLmpvaW4odGhpcy5kaXJuYW1lLCB0aGlzLnN0ZW0gKyAoZXh0bmFtZSB8fCAnJykpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIHBhdGggKGV4YW1wbGU6IGAnfi9pbmRleC5taW4uanMnYCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqICAgUGF0aC5cbiAgICovXG4gIGdldCBwYXRoKCkge1xuICAgIHJldHVybiB0aGlzLmhpc3RvcnlbdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDFdXG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBmdWxsIHBhdGggKGV4YW1wbGU6IGAnfi9pbmRleC5taW4uanMnYCkuXG4gICAqXG4gICAqIENhbm5vdCBiZSBudWxsaWZpZWQuXG4gICAqIFlvdSBjYW4gc2V0IGEgZmlsZSBVUkwgKGEgYFVSTGAgb2JqZWN0IHdpdGggYSBgZmlsZTpgIHByb3RvY29sKSB3aGljaCB3aWxsXG4gICAqIGJlIHR1cm5lZCBpbnRvIGEgcGF0aCB3aXRoIGB1cmwuZmlsZVVSTFRvUGF0aGAuXG4gICAqXG4gICAqIEBwYXJhbSB7VVJMIHwgc3RyaW5nfSBwYXRoXG4gICAqICAgUGF0aC5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZH1cbiAgICogICBOb3RoaW5nLlxuICAgKi9cbiAgc2V0IHBhdGgocGF0aCkge1xuICAgIGlmIChpc1VybChwYXRoKSkge1xuICAgICAgcGF0aCA9IHVybFRvUGF0aChwYXRoKVxuICAgIH1cblxuICAgIGFzc2VydE5vbkVtcHR5KHBhdGgsICdwYXRoJylcblxuICAgIGlmICh0aGlzLnBhdGggIT09IHBhdGgpIHtcbiAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKHBhdGgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH1cbiAgICogICBTdGVtLlxuICAgKi9cbiAgZ2V0IHN0ZW0oKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICdzdHJpbmcnXG4gICAgICA/IHBhdGguYmFzZW5hbWUodGhpcy5wYXRoLCB0aGlzLmV4dG5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc3RlbSAoYmFzZW5hbWUgdy9vIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbidgKS5cbiAgICpcbiAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1xcJ2BcbiAgICogb24gd2luZG93cykuXG4gICAqIENhbm5vdCBiZSBudWxsaWZpZWQgKHVzZSBgZmlsZS5wYXRoID0gZmlsZS5kaXJuYW1lYCBpbnN0ZWFkKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0ZW1cbiAgICogICBTdGVtLlxuICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfVxuICAgKiAgIE5vdGhpbmcuXG4gICAqL1xuICBzZXQgc3RlbShzdGVtKSB7XG4gICAgYXNzZXJ0Tm9uRW1wdHkoc3RlbSwgJ3N0ZW0nKVxuICAgIGFzc2VydFBhcnQoc3RlbSwgJ3N0ZW0nKVxuICAgIHRoaXMucGF0aCA9IHBhdGguam9pbih0aGlzLmRpcm5hbWUgfHwgJycsIHN0ZW0gKyAodGhpcy5leHRuYW1lIHx8ICcnKSlcbiAgfVxuXG4gIC8vIE5vcm1hbCBwcm90b3R5cGFsIG1ldGhvZHMuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmYXRhbCBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAqXG4gICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgdHJ1ZWAgKGVycm9yOyBmaWxlIG5vdCB1c2FibGUpXG4gICAqIGFuZCB0aGUgYGZpbGVgIGZpZWxkIGlzIHNldCB0byB0aGUgY3VycmVudCBmaWxlIHBhdGguXG4gICAqIFRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBgbWVzc2FnZXNgIGZpZWxkIG9uIGBmaWxlYC5cbiAgICpcbiAgICogPiBcdUQ4M0VcdURFQTYgKipOb3RlKio6IGFsc28gaGFzIG9ic29sZXRlIHNpZ25hdHVyZXMuXG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7TWVzc2FnZU9wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc11cbiAgICogQHJldHVybnMge25ldmVyfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqIEByZXR1cm5zIHtuZXZlcn1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7bmV2ZXJ9XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnMge25ldmVyfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7bmV2ZXJ9XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZVxuICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqIEByZXR1cm5zIHtuZXZlcn1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnMge25ldmVyfVxuICAgKlxuICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uXG4gICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLlxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXVxuICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZTpcbiAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS5cbiAgICogQHJldHVybnMge25ldmVyfVxuICAgKiAgIE5ldmVyLlxuICAgKiBAdGhyb3dzIHtWRmlsZU1lc3NhZ2V9XG4gICAqICAgTWVzc2FnZS5cbiAgICovXG4gIGZhaWwoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKSB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogdGhlIG92ZXJsb2FkcyBhcmUgZmluZS5cbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbilcblxuICAgIG1lc3NhZ2UuZmF0YWwgPSB0cnVlXG5cbiAgICB0aHJvdyBtZXNzYWdlXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGluZm8gbWVzc2FnZSBmb3IgYHJlYXNvbmAgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWxlLlxuICAgKlxuICAgKiBUaGUgYGZhdGFsYCBmaWVsZCBvZiB0aGUgbWVzc2FnZSBpcyBzZXQgdG8gYHVuZGVmaW5lZGAgKGluZm87IGNoYW5nZVxuICAgKiBsaWtlbHkgbm90IG5lZWRlZCkgYW5kIHRoZSBgZmlsZWAgZmllbGQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGZpbGUgcGF0aC5cbiAgICogVGhlIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGBtZXNzYWdlc2AgZmllbGQgb24gYGZpbGVgLlxuICAgKlxuICAgKiA+IFx1RDgzRVx1REVBNiAqKk5vdGUqKjogYWxzbyBoYXMgb2Jzb2xldGUgc2lnbmF0dXJlcy5cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtNZXNzYWdlT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uXG4gICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLlxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXVxuICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZTpcbiAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS5cbiAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX1cbiAgICogICBNZXNzYWdlLlxuICAgKi9cbiAgaW5mbyhjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB0aGUgb3ZlcmxvYWRzIGFyZSBmaW5lLlxuICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKVxuXG4gICAgbWVzc2FnZS5mYXRhbCA9IHVuZGVmaW5lZFxuXG4gICAgcmV0dXJuIG1lc3NhZ2VcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuXG4gICAqXG4gICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgZmFsc2VgICh3YXJuaW5nOyBjaGFuZ2UgbWF5IGJlXG4gICAqIG5lZWRlZCkgYW5kIHRoZSBgZmlsZWAgZmllbGQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGZpbGUgcGF0aC5cbiAgICogVGhlIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGBtZXNzYWdlc2AgZmllbGQgb24gYGZpbGVgLlxuICAgKlxuICAgKiA+IFx1RDgzRVx1REVBNiAqKk5vdGUqKjogYWxzbyBoYXMgb2Jzb2xldGUgc2lnbmF0dXJlcy5cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtNZXNzYWdlT3B0aW9ucyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvblxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dXG4gICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9XG4gICAqXG4gICAqIEBvdmVybG9hZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uXG4gICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl1cbiAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX1cbiAgICpcbiAgICogQG92ZXJsb2FkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb25cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAb3ZlcmxvYWRcbiAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2VcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfVxuICAgKlxuICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uXG4gICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLlxuICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXVxuICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXVxuICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZTpcbiAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS5cbiAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX1cbiAgICogICBNZXNzYWdlLlxuICAgKi9cbiAgbWVzc2FnZShjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gbmV3IFZGaWxlTWVzc2FnZShcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IHRoZSBvdmVybG9hZHMgYXJlIGZpbmUuXG4gICAgICBjYXVzZU9yUmVhc29uLFxuICAgICAgb3B0aW9uc09yUGFyZW50T3JQbGFjZSxcbiAgICAgIG9yaWdpblxuICAgIClcblxuICAgIGlmICh0aGlzLnBhdGgpIHtcbiAgICAgIG1lc3NhZ2UubmFtZSA9IHRoaXMucGF0aCArICc6JyArIG1lc3NhZ2UubmFtZVxuICAgICAgbWVzc2FnZS5maWxlID0gdGhpcy5wYXRoXG4gICAgfVxuXG4gICAgbWVzc2FnZS5mYXRhbCA9IGZhbHNlXG5cbiAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSlcblxuICAgIHJldHVybiBtZXNzYWdlXG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRoZSBmaWxlLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiB3aGljaCBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZCBkZXBlbmRzIG9uIHRoZSBlbmdpbmUuXG4gICAqID4gRm9yIGluZm8gb24gTm9kZS5qcywgc2VlOlxuICAgKiA+IDxodHRwczovL25vZGVqcy5vcmcvYXBpL3V0aWwuaHRtbCN3aGF0d2ctc3VwcG9ydGVkLWVuY29kaW5ncz4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2VuY29kaW5nPSd1dGY4J11cbiAgICogICBDaGFyYWN0ZXIgZW5jb2RpbmcgdG8gdW5kZXJzdGFuZCBgdmFsdWVgIGFzIHdoZW4gaXRcdTIwMTlzIGEgYFVpbnQ4QXJyYXlgXG4gICAqICAgKGRlZmF1bHQ6IGAndXRmLTgnYCkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqICAgU2VyaWFsaXplZCBmaWxlLlxuICAgKi9cbiAgdG9TdHJpbmcoZW5jb2RpbmcpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgIH1cblxuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcgfHwgdW5kZWZpbmVkKVxuICAgIHJldHVybiBkZWNvZGVyLmRlY29kZSh0aGlzLnZhbHVlKVxuICB9XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgYHBhcnRgIGlzIG5vdCBhIHBhdGggKGFzIGluLCBkb2VzIG5vdCBjb250YWluIGBwYXRoLnNlcGApLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFydFxuICogICBGaWxlIHBhdGggcGFydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiAgIFBhcnQgbmFtZS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gKiAgIE5vdGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydFBhcnQocGFydCwgbmFtZSkge1xuICBpZiAocGFydCAmJiBwYXJ0LmluY2x1ZGVzKHBhdGguc2VwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdgJyArIG5hbWUgKyAnYCBjYW5ub3QgYmUgYSBwYXRoOiBkaWQgbm90IGV4cGVjdCBgJyArIHBhdGguc2VwICsgJ2AnXG4gICAgKVxuICB9XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgYHBhcnRgIGlzIG5vdCBlbXB0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gcGFydFxuICogICBUaGluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiAgIFBhcnQgbmFtZS5cbiAqIEByZXR1cm5zIHthc3NlcnRzIHBhcnQgaXMgc3RyaW5nfVxuICogICBOb3RoaW5nLlxuICovXG5mdW5jdGlvbiBhc3NlcnROb25FbXB0eShwYXJ0LCBuYW1lKSB7XG4gIGlmICghcGFydCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYCcgKyBuYW1lICsgJ2AgY2Fubm90IGJlIGVtcHR5JylcbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydCBgcGF0aGAgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBwYXRoXG4gKiAgIFBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogICBEZXBlbmRlbmN5IG5hbWUuXG4gKiBAcmV0dXJucyB7YXNzZXJ0cyBwYXRoIGlzIHN0cmluZ31cbiAqICAgTm90aGluZy5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoLCBuYW1lKSB7XG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2V0dGluZyBgJyArIG5hbWUgKyAnYCByZXF1aXJlcyBgcGF0aGAgdG8gYmUgc2V0IHRvbycpXG4gIH1cbn1cblxuLyoqXG4gKiBBc3NlcnQgYHZhbHVlYCBpcyBhbiBgVWludDhBcnJheWAuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZVxuICogICB0aGluZy5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBVaW50OEFycmF5fVxuICogICBXaGV0aGVyIGB2YWx1ZWAgaXMgYW4gYFVpbnQ4QXJyYXlgLlxuICovXG5mdW5jdGlvbiBpc1VpbnQ4QXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgdmFsdWUgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICdieXRlTGVuZ3RoJyBpbiB2YWx1ZSAmJlxuICAgICAgJ2J5dGVPZmZzZXQnIGluIHZhbHVlXG4gIClcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIEVycm9ySW5mb1xuICogICBJbmZvIG9uIGEgYHBhcnNlNWAgZXJyb3IuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmVhc29uXG4gKiAgIFJlYXNvbiBvZiBlcnJvci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZXNjcmlwdGlvblxuICogICBNb3JlIGluZm8gb24gZXJyb3IuXG4gKiBAcHJvcGVydHkge2ZhbHNlfSBbdXJsXVxuICogICBUdXJuIG9mZiBpZiB0aGlzIGlzIG5vdCBkb2N1bWVudGVkIGluIHRoZSBodG1sNSBzcGVjIChvcHRpb25hbCkuXG4gKi9cblxuZXhwb3J0IGNvbnN0IGVycm9ycyA9IHtcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIGFiYW5kb25lZEhlYWRFbGVtZW50Q2hpbGQ6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIG1ldGFkYXRhIGVsZW1lbnQgYWZ0ZXIgaGVhZCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVW5leHBlY3RlZCBlbGVtZW50IGFmdGVyIGhlYWQuIEV4cGVjdGVkIHRoZSBlbGVtZW50IGJlZm9yZSBgPC9oZWFkPmAnLFxuICAgIHVybDogZmFsc2VcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIGFicnVwdENsb3NpbmdPZkVtcHR5Q29tbWVudDoge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgYWJydXB0bHkgY2xvc2VkIGVtcHR5IGNvbW1lbnQnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBgPmAgb3IgYC0+YC4gRXhwZWN0ZWQgYC0tPmAgdG8gY2xvc2UgY29tbWVudHMnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBhYnJ1cHREb2N0eXBlUHVibGljSWRlbnRpZmllcjoge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgYWJydXB0bHkgY2xvc2VkIHB1YmxpYyBpZGVudGlmaWVyJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdVbmV4cGVjdGVkIGA+YC4gRXhwZWN0ZWQgYSBjbG9zaW5nIGBcImAgb3IgYFxcJ2AgYWZ0ZXIgdGhlIHB1YmxpYyBpZGVudGlmaWVyJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgYWJydXB0RG9jdHlwZVN5c3RlbUlkZW50aWZpZXI6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGFicnVwdGx5IGNsb3NlZCBzeXN0ZW0gaWRlbnRpZmllcicsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVW5leHBlY3RlZCBgPmAuIEV4cGVjdGVkIGEgY2xvc2luZyBgXCJgIG9yIGBcXCdgIGFmdGVyIHRoZSBpZGVudGlmaWVyIGlkZW50aWZpZXInXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBhYnNlbmNlT2ZEaWdpdHNJbk51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2U6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIG5vbi1kaWdpdCBhdCBzdGFydCBvZiBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2UnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1VuZXhwZWN0ZWQgYCVjYC4gRXhwZWN0ZWQgYFswLTldYCBmb3IgZGVjaW1hbCByZWZlcmVuY2VzIG9yIGBbMC05YS1mQS1GXWAgZm9yIGhleGFkZWNpbWFsIHJlZmVyZW5jZXMnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBjZGF0YUluSHRtbENvbnRlbnQ6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIENEQVRBIHNlY3Rpb24gaW4gSFRNTCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVW5leHBlY3RlZCBgPCFbQ0RBVEFbYCBpbiBIVE1MLiBSZW1vdmUgaXQsIHVzZSBhIGNvbW1lbnQsIG9yIGVuY29kZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW5zdGVhZCdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIGNoYXJhY3RlclJlZmVyZW5jZU91dHNpZGVVbmljb2RlUmFuZ2U6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIHRvbyBiaWcgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdVbmV4cGVjdGVkbHkgaGlnaCBjaGFyYWN0ZXIgcmVmZXJlbmNlLiBFeHBlY3RlZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyB0byBiZSBhdCBtb3N0IGhleGFkZWNpbWFsIDEwZmZmZiAob3IgZGVjaW1hbCAxMTE0MTExKSdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIGNsb3NpbmdPZkVsZW1lbnRXaXRoT3BlbkNoaWxkRWxlbWVudHM6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGNsb3NpbmcgdGFnIHdpdGggb3BlbiBjaGlsZCBlbGVtZW50cycsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVW5leHBlY3RlZGx5IGNsb3NpbmcgdGFnLiBFeHBlY3RlZCBvdGhlciB0YWdzIHRvIGJlIGNsb3NlZCBmaXJzdCcsXG4gICAgdXJsOiBmYWxzZVxuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgY29udHJvbENoYXJhY3RlckluSW5wdXRTdHJlYW06IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVyJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdVbmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVyIGAleGAuIEV4cGVjdGVkIGEgbm9uLWNvbnRyb2wgY29kZSBwb2ludCwgMHgwMCwgb3IgQVNDSUkgd2hpdGVzcGFjZSdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIGNvbnRyb2xDaGFyYWN0ZXJSZWZlcmVuY2U6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGNvbnRyb2wgY2hhcmFjdGVyIHJlZmVyZW5jZScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVW5leHBlY3RlZGx5IGNvbnRyb2wgY2hhcmFjdGVyIGluIHJlZmVyZW5jZS4gRXhwZWN0ZWQgYSBub24tY29udHJvbCBjb2RlIHBvaW50LCAweDAwLCBvciBBU0NJSSB3aGl0ZXNwYWNlJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgZGlzYWxsb3dlZENvbnRlbnRJbk5vc2NyaXB0SW5IZWFkOiB7XG4gICAgcmVhc29uOiAnRGlzYWxsb3dlZCBjb250ZW50IGluc2lkZSBgPG5vc2NyaXB0PmAgaW4gYDxoZWFkPmAnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1VuZXhwZWN0ZWQgdGV4dCBjaGFyYWN0ZXIgYCVjYC4gT25seSB1c2UgdGV4dCBpbiBgPG5vc2NyaXB0PmBzIGluIGA8Ym9keT5gJyxcbiAgICB1cmw6IGZhbHNlXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBkdXBsaWNhdGVBdHRyaWJ1dGU6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGR1cGxpY2F0ZSBhdHRyaWJ1dGUnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1VuZXhwZWN0ZWRseSBkb3VibGUgYXR0cmlidXRlLiBFeHBlY3RlZCBhdHRyaWJ1dGVzIHRvIG9jY3VyIG9ubHkgb25jZSdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIGVuZFRhZ1dpdGhBdHRyaWJ1dGVzOiB7XG4gICAgcmVhc29uOiAnVW5leHBlY3RlZCBhdHRyaWJ1dGUgb24gY2xvc2luZyB0YWcnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBhdHRyaWJ1dGUuIEV4cGVjdGVkIGA+YCBpbnN0ZWFkJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgZW5kVGFnV2l0aFRyYWlsaW5nU29saWR1czoge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgc2xhc2ggYXQgZW5kIG9mIGNsb3NpbmcgdGFnJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgYCVjLTFgLiBFeHBlY3RlZCBgPmAgaW5zdGVhZCdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIGVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50OiB7XG4gICAgcmVhc29uOiAnVW5leHBlY3RlZCB1bm9wZW5lZCBlbmQgdGFnJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgZW5kIHRhZy4gRXhwZWN0ZWQgbm8gZW5kIHRhZyBvciBhbm90aGVyIGVuZCB0YWcnLFxuICAgIHVybDogZmFsc2VcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIGVvZkJlZm9yZVRhZ05hbWU6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGVuZCBvZiBmaWxlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIEV4cGVjdGVkIHRhZyBuYW1lIGluc3RlYWQnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBlb2ZJbkNkYXRhOiB7XG4gICAgcmVhc29uOiAnVW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpbiBDREFUQScsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLiBFeHBlY3RlZCBgXV0+YCB0byBjbG9zZSB0aGUgQ0RBVEEnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBlb2ZJbkNvbW1lbnQ6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGNvbW1lbnQnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4gRXhwZWN0ZWQgYC0tPmAgdG8gY2xvc2UgdGhlIGNvbW1lbnQnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBlb2ZJbkRvY3R5cGU6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluIGRvY3R5cGUnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1VuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIEV4cGVjdGVkIGEgdmFsaWQgZG9jdHlwZSAoc3VjaCBhcyBgPCFkb2N0eXBlIGh0bWw+YCknXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBlb2ZJbkVsZW1lbnRUaGF0Q2FuQ29udGFpbk9ubHlUZXh0OiB7XG4gICAgcmVhc29uOiAnVW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpbiBlbGVtZW50IHRoYXQgY2FuIG9ubHkgY29udGFpbiB0ZXh0JyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIEV4cGVjdGVkIHRleHQgb3IgYSBjbG9zaW5nIHRhZycsXG4gICAgdXJsOiBmYWxzZVxuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgZW9mSW5TY3JpcHRIdG1sQ29tbWVudExpa2VUZXh0OiB7XG4gICAgcmVhc29uOiAnVW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpbiBjb21tZW50IGluc2lkZSBzY3JpcHQnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBlbmQgb2YgZmlsZS4gRXhwZWN0ZWQgYC0tPmAgdG8gY2xvc2UgdGhlIGNvbW1lbnQnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBlb2ZJblRhZzoge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaW4gdGFnJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIEV4cGVjdGVkIGA+YCB0byBjbG9zZSB0aGUgdGFnJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgaW5jb3JyZWN0bHlDbG9zZWRDb21tZW50OiB7XG4gICAgcmVhc29uOiAnSW5jb3JyZWN0bHkgY2xvc2VkIGNvbW1lbnQnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBgJWMtMWAuIEV4cGVjdGVkIGAtLT5gIHRvIGNsb3NlIHRoZSBjb21tZW50J1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgaW5jb3JyZWN0bHlPcGVuZWRDb21tZW50OiB7XG4gICAgcmVhc29uOiAnSW5jb3JyZWN0bHkgb3BlbmVkIGNvbW1lbnQnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBgJWNgLiBFeHBlY3RlZCBgPCEtLWAgdG8gb3BlbiB0aGUgY29tbWVudCdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIGludmFsaWRDaGFyYWN0ZXJTZXF1ZW5jZUFmdGVyRG9jdHlwZU5hbWU6IHtcbiAgICByZWFzb246ICdJbnZhbGlkIHNlcXVlbmNlIGFmdGVyIGRvY3R5cGUgbmFtZScsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIHNlcXVlbmNlIGF0IGAlY2AuIEV4cGVjdGVkIGBwdWJsaWNgIG9yIGBzeXN0ZW1gJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgaW52YWxpZEZpcnN0Q2hhcmFjdGVyT2ZUYWdOYW1lOiB7XG4gICAgcmVhc29uOiAnSW52YWxpZCBmaXJzdCBjaGFyYWN0ZXIgaW4gdGFnIG5hbWUnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBgJWNgLiBFeHBlY3RlZCBhbiBBU0NJSSBsZXR0ZXIgaW5zdGVhZCdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIG1pc3BsYWNlZERvY3R5cGU6IHtcbiAgICByZWFzb246ICdNaXNwbGFjZWQgZG9jdHlwZScsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGRvY3R5cGUuIEV4cGVjdGVkIGRvY3R5cGUgYmVmb3JlIGhlYWQnLFxuICAgIHVybDogZmFsc2VcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIG1pc3BsYWNlZFN0YXJ0VGFnRm9ySGVhZEVsZW1lbnQ6IHtcbiAgICByZWFzb246ICdNaXNwbGFjZWQgYDxoZWFkPmAgc3RhcnQgdGFnJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdVbmV4cGVjdGVkIHN0YXJ0IHRhZyBgPGhlYWQ+YC4gRXhwZWN0ZWQgYDxoZWFkPmAgZGlyZWN0bHkgYWZ0ZXIgZG9jdHlwZScsXG4gICAgdXJsOiBmYWxzZVxuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgbWlzc2luZ0F0dHJpYnV0ZVZhbHVlOiB7XG4gICAgcmVhc29uOiAnTWlzc2luZyBhdHRyaWJ1dGUgdmFsdWUnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1VuZXhwZWN0ZWQgYCVjLTFgLiBFeHBlY3RlZCBhbiBhdHRyaWJ1dGUgdmFsdWUgb3Igbm8gYCVjLTFgIGluc3RlYWQnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBtaXNzaW5nRG9jdHlwZToge1xuICAgIHJlYXNvbjogJ01pc3NpbmcgZG9jdHlwZSBiZWZvcmUgb3RoZXIgY29udGVudCcsXG4gICAgZGVzY3JpcHRpb246ICdFeHBlY3RlZCBhIGA8IWRvY3R5cGUgaHRtbD5gIGJlZm9yZSBhbnl0aGluZyBlbHNlJyxcbiAgICB1cmw6IGZhbHNlXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBtaXNzaW5nRG9jdHlwZU5hbWU6IHtcbiAgICByZWFzb246ICdNaXNzaW5nIGRvY3R5cGUgbmFtZScsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGRvY3R5cGUgZW5kIGF0IGAlY2AuIEV4cGVjdGVkIGBodG1sYCBpbnN0ZWFkJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgbWlzc2luZ0RvY3R5cGVQdWJsaWNJZGVudGlmaWVyOiB7XG4gICAgcmVhc29uOiAnTWlzc2luZyBwdWJsaWMgaWRlbnRpZmllciBpbiBkb2N0eXBlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgYCVjYC4gRXhwZWN0ZWQgaWRlbnRpZmllciBmb3IgYHB1YmxpY2AgaW5zdGVhZCdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIG1pc3NpbmdEb2N0eXBlU3lzdGVtSWRlbnRpZmllcjoge1xuICAgIHJlYXNvbjogJ01pc3Npbmcgc3lzdGVtIGlkZW50aWZpZXIgaW4gZG9jdHlwZScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVW5leHBlY3RlZCBgJWNgLiBFeHBlY3RlZCBpZGVudGlmaWVyIGZvciBgc3lzdGVtYCBpbnN0ZWFkIChzdWdnZXN0ZWQ6IGBcImFib3V0OmxlZ2FjeS1jb21wYXRcImApJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgbWlzc2luZ0VuZFRhZ05hbWU6IHtcbiAgICByZWFzb246ICdNaXNzaW5nIG5hbWUgaW4gZW5kIHRhZycsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGAlY2AuIEV4cGVjdGVkIGFuIEFTQ0lJIGxldHRlciBpbnN0ZWFkJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgbWlzc2luZ1F1b3RlQmVmb3JlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXI6IHtcbiAgICByZWFzb246ICdNaXNzaW5nIHF1b3RlIGJlZm9yZSBwdWJsaWMgaWRlbnRpZmllciBpbiBkb2N0eXBlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgYCVjYC4gRXhwZWN0ZWQgYFwiYCBvciBgXFwnYCBpbnN0ZWFkJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgbWlzc2luZ1F1b3RlQmVmb3JlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXI6IHtcbiAgICByZWFzb246ICdNaXNzaW5nIHF1b3RlIGJlZm9yZSBzeXN0ZW0gaWRlbnRpZmllciBpbiBkb2N0eXBlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgYCVjYC4gRXhwZWN0ZWQgYFwiYCBvciBgXFwnYCBpbnN0ZWFkJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgbWlzc2luZ1NlbWljb2xvbkFmdGVyQ2hhcmFjdGVyUmVmZXJlbmNlOiB7XG4gICAgcmVhc29uOiAnTWlzc2luZyBzZW1pY29sb24gYWZ0ZXIgY2hhcmFjdGVyIHJlZmVyZW5jZScsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGAlY2AuIEV4cGVjdGVkIGA7YCBpbnN0ZWFkJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgbWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkOiB7XG4gICAgcmVhc29uOiAnTWlzc2luZyB3aGl0ZXNwYWNlIGFmdGVyIHB1YmxpYyBpZGVudGlmaWVyIGluIGRvY3R5cGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBgJWNgLiBFeHBlY3RlZCBBU0NJSSB3aGl0ZXNwYWNlIGluc3RlYWQnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBtaXNzaW5nV2hpdGVzcGFjZUFmdGVyRG9jdHlwZVN5c3RlbUtleXdvcmQ6IHtcbiAgICByZWFzb246ICdNaXNzaW5nIHdoaXRlc3BhY2UgYWZ0ZXIgc3lzdGVtIGlkZW50aWZpZXIgaW4gZG9jdHlwZScsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGAlY2AuIEV4cGVjdGVkIEFTQ0lJIHdoaXRlc3BhY2UgaW5zdGVhZCdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIG1pc3NpbmdXaGl0ZXNwYWNlQmVmb3JlRG9jdHlwZU5hbWU6IHtcbiAgICByZWFzb246ICdNaXNzaW5nIHdoaXRlc3BhY2UgYmVmb3JlIGRvY3R5cGUgbmFtZScsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGAlY2AuIEV4cGVjdGVkIEFTQ0lJIHdoaXRlc3BhY2UgaW5zdGVhZCdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIG1pc3NpbmdXaGl0ZXNwYWNlQmV0d2VlbkF0dHJpYnV0ZXM6IHtcbiAgICByZWFzb246ICdNaXNzaW5nIHdoaXRlc3BhY2UgYmV0d2VlbiBhdHRyaWJ1dGVzJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgYCVjYC4gRXhwZWN0ZWQgQVNDSUkgd2hpdGVzcGFjZSBpbnN0ZWFkJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgbWlzc2luZ1doaXRlc3BhY2VCZXR3ZWVuRG9jdHlwZVB1YmxpY0FuZFN5c3RlbUlkZW50aWZpZXJzOiB7XG4gICAgcmVhc29uOlxuICAgICAgJ01pc3Npbmcgd2hpdGVzcGFjZSBiZXR3ZWVuIHB1YmxpYyBhbmQgc3lzdGVtIGlkZW50aWZpZXJzIGluIGRvY3R5cGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBgJWNgLiBFeHBlY3RlZCBBU0NJSSB3aGl0ZXNwYWNlIGluc3RlYWQnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBuZXN0ZWRDb21tZW50OiB7XG4gICAgcmVhc29uOiAnVW5leHBlY3RlZCBuZXN0ZWQgY29tbWVudCcsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGA8IS0tYC4gRXhwZWN0ZWQgYC0tPmAnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBuZXN0ZWROb3NjcmlwdEluSGVhZDoge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgbmVzdGVkIGA8bm9zY3JpcHQ+YCBpbiBgPGhlYWQ+YCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnVW5leHBlY3RlZCBgPG5vc2NyaXB0PmAuIEV4cGVjdGVkIGEgY2xvc2luZyB0YWcgb3IgYSBtZXRhIGVsZW1lbnQnLFxuICAgIHVybDogZmFsc2VcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIG5vbkNvbmZvcm1pbmdEb2N0eXBlOiB7XG4gICAgcmVhc29uOiAnVW5leHBlY3RlZCBub24tY29uZm9ybWluZyBkb2N0eXBlIGRlY2xhcmF0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdFeHBlY3RlZCBgPCFkb2N0eXBlIGh0bWw+YCBvciBgPCFkb2N0eXBlIGh0bWwgc3lzdGVtIFwiYWJvdXQ6bGVnYWN5LWNvbXBhdFwiPmAnLFxuICAgIHVybDogZmFsc2VcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIG5vblZvaWRIdG1sRWxlbWVudFN0YXJ0VGFnV2l0aFRyYWlsaW5nU29saWR1czoge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgdHJhaWxpbmcgc2xhc2ggb24gc3RhcnQgdGFnIG9mIG5vbi12b2lkIGVsZW1lbnQnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBgL2AuIEV4cGVjdGVkIGA+YCBpbnN0ZWFkJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgbm9uY2hhcmFjdGVyQ2hhcmFjdGVyUmVmZXJlbmNlOiB7XG4gICAgcmVhc29uOlxuICAgICAgJ1VuZXhwZWN0ZWQgbm9uY2hhcmFjdGVyIGNvZGUgcG9pbnQgcmVmZXJlbmNlZCBieSBjaGFyYWN0ZXIgcmVmZXJlbmNlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgY29kZSBwb2ludC4gRG8gbm90IHVzZSBub25jaGFyYWN0ZXJzIGluIEhUTUwnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBub25jaGFyYWN0ZXJJbklucHV0U3RyZWFtOiB7XG4gICAgcmVhc29uOiAnVW5leHBlY3RlZCBub25jaGFyYWN0ZXIgY2hhcmFjdGVyJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgY29kZSBwb2ludCBgJXhgLiBEbyBub3QgdXNlIG5vbmNoYXJhY3RlcnMgaW4gSFRNTCdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIG51bGxDaGFyYWN0ZXJSZWZlcmVuY2U6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIE5VTEwgY2hhcmFjdGVyIHJlZmVyZW5jZWQgYnkgY2hhcmFjdGVyIHJlZmVyZW5jZScsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGNvZGUgcG9pbnQuIERvIG5vdCB1c2UgTlVMTCBjaGFyYWN0ZXJzIGluIEhUTUwnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBvcGVuRWxlbWVudHNMZWZ0QWZ0ZXJFb2Y6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGVuZCBvZiBmaWxlJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIEV4cGVjdGVkIGNsb3NpbmcgdGFnIGluc3RlYWQnLFxuICAgIHVybDogZmFsc2VcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIHN1cnJvZ2F0ZUNoYXJhY3RlclJlZmVyZW5jZToge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgc3Vycm9nYXRlIGNoYXJhY3RlciByZWZlcmVuY2VkIGJ5IGNoYXJhY3RlciByZWZlcmVuY2UnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1VuZXhwZWN0ZWQgY29kZSBwb2ludC4gRG8gbm90IHVzZSBsb25lIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGluIEhUTUwnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICBzdXJyb2dhdGVJbklucHV0U3RyZWFtOiB7XG4gICAgcmVhc29uOiAnVW5leHBlY3RlZCBzdXJyb2dhdGUgY2hhcmFjdGVyJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdVbmV4cGVjdGVkIGNvZGUgcG9pbnQgYCV4YC4gRG8gbm90IHVzZSBsb25lIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGluIEhUTUwnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICB1bmV4cGVjdGVkQ2hhcmFjdGVyQWZ0ZXJEb2N0eXBlU3lzdGVtSWRlbnRpZmllcjoge1xuICAgIHJlYXNvbjogJ0ludmFsaWQgY2hhcmFjdGVyIGFmdGVyIHN5c3RlbSBpZGVudGlmaWVyIGluIGRvY3R5cGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBjaGFyYWN0ZXIgYXQgYCVjYC4gRXhwZWN0ZWQgYD5gJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgdW5leHBlY3RlZENoYXJhY3RlckluQXR0cmlidXRlTmFtZToge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyIGluIGF0dHJpYnV0ZSBuYW1lJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdVbmV4cGVjdGVkIGAlY2AuIEV4cGVjdGVkIHdoaXRlc3BhY2UsIGAvYCwgYD5gLCBgPWAsIG9yIHByb2JhYmx5IGFuIEFTQ0lJIGxldHRlcidcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIHVuZXhwZWN0ZWRDaGFyYWN0ZXJJblVucXVvdGVkQXR0cmlidXRlVmFsdWU6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGNoYXJhY3RlciBpbiB1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUnLFxuICAgIGRlc2NyaXB0aW9uOiAnVW5leHBlY3RlZCBgJWNgLiBRdW90ZSB0aGUgYXR0cmlidXRlIHZhbHVlIHRvIGluY2x1ZGUgaXQnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICB1bmV4cGVjdGVkRXF1YWxzU2lnbkJlZm9yZUF0dHJpYnV0ZU5hbWU6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIGVxdWFscyBzaWduIGJlZm9yZSBhdHRyaWJ1dGUgbmFtZScsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGAlY2AuIEFkZCBhbiBhdHRyaWJ1dGUgbmFtZSBiZWZvcmUgaXQnXG4gIH0sXG4gIC8qKiBAdHlwZSB7RXJyb3JJbmZvfSAqL1xuICB1bmV4cGVjdGVkTnVsbENoYXJhY3Rlcjoge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgTlVMTCBjaGFyYWN0ZXInLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ1VuZXhwZWN0ZWQgY29kZSBwb2ludCBgJXhgLiBEbyBub3QgdXNlIE5VTEwgY2hhcmFjdGVycyBpbiBIVE1MJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgdW5leHBlY3RlZFF1ZXN0aW9uTWFya0luc3RlYWRPZlRhZ05hbWU6IHtcbiAgICByZWFzb246ICdVbmV4cGVjdGVkIHF1ZXN0aW9uIG1hcmsgaW5zdGVhZCBvZiB0YWcgbmFtZScsXG4gICAgZGVzY3JpcHRpb246ICdVbmV4cGVjdGVkIGAlY2AuIEV4cGVjdGVkIGFuIEFTQ0lJIGxldHRlciBpbnN0ZWFkJ1xuICB9LFxuICAvKiogQHR5cGUge0Vycm9ySW5mb30gKi9cbiAgdW5leHBlY3RlZFNvbGlkdXNJblRhZzoge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgc2xhc2ggaW4gdGFnJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdVbmV4cGVjdGVkIGAlYy0xYC4gRXhwZWN0ZWQgaXQgZm9sbG93ZWQgYnkgYD5gIG9yIGluIGEgcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZSdcbiAgfSxcbiAgLyoqIEB0eXBlIHtFcnJvckluZm99ICovXG4gIHVua25vd25OYW1lZENoYXJhY3RlclJlZmVyZW5jZToge1xuICAgIHJlYXNvbjogJ1VuZXhwZWN0ZWQgdW5rbm93biBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdVbmV4cGVjdGVkIGNoYXJhY3RlciByZWZlcmVuY2UuIEV4cGVjdGVkIGtub3duIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzJ1xuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUm9vdH0gUm9vdFxuICogQHR5cGVkZWYge2ltcG9ydCgncGFyc2U1JykuUGFyc2VyRXJyb3J9IFBhcnNlckVycm9yXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCd2ZmlsZScpLlZhbHVlfSBWYWx1ZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2tleW9mIGVycm9yc30gRXJyb3JDb2RlXG4gKiAgIEtub3duIG5hbWVzIG9mIHBhcnNlIGVycm9ycy5cbiAqXG4gKiBAdHlwZWRlZiB7UGFydGlhbDxSZWNvcmQ8RXJyb3JDb2RlLCBFcnJvclNldmVyaXR5IHwgbnVsbCB8IHVuZGVmaW5lZD4+fSBFcnJvck9wdGlvbnNcbiAqICAgT3B0aW9ucyB0aGF0IGRlZmluZSB0aGUgc2V2ZXJpdHkgb2YgZXJyb3JzLlxuICpcbiAqIEB0eXBlZGVmIHtib29sZWFuIHwgMCB8IDEgfCAyfSBFcnJvclNldmVyaXR5XG4gKiAgIEVycm9yIHNldmVyaXR5OlxuICpcbiAqICAgKiBgMGAgb3IgYGZhbHNlYFxuICogICAgIFx1MjAxNCB0dXJuIHRoZSBwYXJzZSBlcnJvciBvZmZcbiAqICAgKiBgMWAgb3IgYHRydWVgXG4gKiAgICAgXHUyMDE0IHR1cm4gdGhlIHBhcnNlIGVycm9yIGludG8gYSB3YXJuaW5nXG4gKiAgICogYDJgXG4gKiAgICAgXHUyMDE0IHR1cm4gdGhlIHBhcnNlIGVycm9yIGludG8gYW4gYWN0dWFsIGVycm9yOiBwcm9jZXNzaW5nIHN0b3BzLlxuICpcbiAqIEB0eXBlZGVmIEV4dHJhT3B0aW9uc1xuICogICBPcHRpb25zIHRoYXQgZGVmaW5lIGhvdyB0byBwYXJzZSBIVE1MLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2ZyYWdtZW50PWZhbHNlXVxuICogICBTcGVjaWZ5IHdoZXRoZXIgdG8gcGFyc2UgYSBmcmFnbWVudCwgaW5zdGVhZCBvZiBhIGNvbXBsZXRlIGRvY3VtZW50XG4gKiAgIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgIEluIGRvY3VtZW50IG1vZGUsIHVub3BlbmVkIGBodG1sYCwgYGhlYWRgLCBhbmQgYGJvZHlgIGVsZW1lbnRzIGFyZSBvcGVuZWRcbiAqICAgaW4ganVzdCB0aGUgcmlnaHQgcGxhY2VzLlxuICogQHByb3BlcnR5IHtPbkVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29uZXJyb3JdXG4gKiAgIENhbGwgYG9uZXJyb3JgIHdpdGggcGFyc2UgZXJyb3JzIHdoaWxlIHBhcnNpbmcgKG9wdGlvbmFsKS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBwYXJzZSBlcnJvcnMgYXJlIGN1cnJlbnRseSBiZWluZyBhZGRlZCB0byBIVE1MLlxuICogICA+IE5vdCBhbGwgZXJyb3JzIGVtaXR0ZWQgYnkgcGFyc2U1IChvciB1cykgYXJlIHNwZWNjZWQgeWV0LlxuICogICA+IFNvbWUgZG9jdW1lbnRhdGlvbiBtYXkgc3RpbGwgYmUgbWlzc2luZy5cbiAqXG4gKiAgIFNwZWNpZmljIHJ1bGVzIGNhbiBiZSB0dXJuZWQgb2ZmIGJ5IHNldHRpbmcgdGhlbSB0byBgZmFsc2VgIChvciBgMGApLlxuICogICBUaGUgZGVmYXVsdCwgd2hlbiBgZW1pdFBhcnNlRXJyb3JzOiB0cnVlYCwgaXMgYHRydWVgIChvciBgMWApLCBhbmQgbWVhbnNcbiAqICAgdGhhdCBydWxlcyBlbWl0IGFzIHdhcm5pbmdzLlxuICogICBSdWxlcyBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHdpdGggYDJgLCB0byB0dXJuIHRoZW0gaW50byBmYXRhbCBlcnJvcnMuXG4gKlxuICogQHR5cGVkZWYge09taXQ8aW1wb3J0KCdoYXN0LXV0aWwtZnJvbS1wYXJzZTUnKS5PcHRpb25zLCAnZmlsZSc+fSBGcm9tUGFyc2U1T3B0aW9uc1xuICogICBPcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGBoYXN0LXV0aWwtZnJvbS1wYXJzZTVgLlxuICpcbiAqIEBjYWxsYmFjayBPbkVycm9yXG4gKiAgIEhhbmRsZSBwYXJzZSBlcnJvcnMuXG4gKiBAcGFyYW0ge1ZGaWxlTWVzc2FnZX0gZXJyb3JcbiAqICAgTWVzc2FnZS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWQgfCB2b2lkfVxuICogICBOb3RoaW5nLlxuICpcbiAqICAgTm90ZTogYHZvaWRgIGluY2x1ZGVkIHVudGlsIFRTIGluZmVycyBgdW5kZWZpbmVkYCBuaWNlbHkuXG4gKlxuICogQHR5cGVkZWYge0Zyb21QYXJzZTVPcHRpb25zICYgRXJyb3JPcHRpb25zICYgRXh0cmFPcHRpb25zfSBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24uXG4gKi9cblxuaW1wb3J0IHtvayBhcyBhc3NlcnR9IGZyb20gJ2RldmxvcCdcbmltcG9ydCB7ZnJvbVBhcnNlNX0gZnJvbSAnaGFzdC11dGlsLWZyb20tcGFyc2U1J1xuaW1wb3J0IHtwYXJzZSwgcGFyc2VGcmFnbWVudH0gZnJvbSAncGFyc2U1J1xuaW1wb3J0IHtWRmlsZX0gZnJvbSAndmZpbGUnXG5pbXBvcnQge1ZGaWxlTWVzc2FnZX0gZnJvbSAndmZpbGUtbWVzc2FnZSdcbmltcG9ydCB7ZXJyb3JzfSBmcm9tICcuL2Vycm9ycy5qcydcblxuY29uc3QgYmFzZSA9ICdodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9wYXJzaW5nLmh0bWwjcGFyc2UtZXJyb3ItJ1xuXG5jb25zdCBkYXNoVG9DYW1lbFJlID0gLy1bYS16XS9nXG5jb25zdCBmb3JtYXRDUmUgPSAvJWMoPzooWy0rXSkoXFxkKykpPy9nXG5jb25zdCBmb3JtYXRYUmUgPSAvJXgvZ1xuXG5jb25zdCBmYXRhbGl0aWVzID0gezI6IHRydWUsIDE6IGZhbHNlLCAwOiBudWxsfVxuXG4vKiogQHR5cGUge1JlYWRvbmx5PE9wdGlvbnM+fSAqL1xuY29uc3QgZW1wdHlPcHRpb25zID0ge31cblxuLyoqXG4gKiBUdXJuIHNlcmlhbGl6ZWQgSFRNTCBpbnRvIGEgaGFzdCB0cmVlLlxuICpcbiAqIEBwYXJhbSB7VkZpbGUgfCBWYWx1ZX0gdmFsdWVcbiAqICAgU2VyaWFsaXplZCBIVE1MIHRvIHBhcnNlLlxuICogQHBhcmFtIHtSZWFkb25seTxPcHRpb25zPiB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuXG4gKiBAcmV0dXJucyB7Um9vdH1cbiAqICAgVHJlZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21IdG1sKHZhbHVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnNcbiAgY29uc3Qgb25lcnJvciA9IHNldHRpbmdzLm9uZXJyb3JcbiAgY29uc3QgZmlsZSA9IHZhbHVlIGluc3RhbmNlb2YgVkZpbGUgPyB2YWx1ZSA6IG5ldyBWRmlsZSh2YWx1ZSlcbiAgY29uc3QgZm4gPSBzZXR0aW5ncy5mcmFnbWVudCA/IHBhcnNlRnJhZ21lbnQgOiBwYXJzZVxuICBjb25zdCBkb2MgPSBTdHJpbmcoZmlsZSlcbiAgY29uc3QgcDVkb2MgPSBmbihkb2MsIHtcbiAgICBzb3VyY2VDb2RlTG9jYXRpb25JbmZvOiB0cnVlLFxuICAgIC8vIE5vdGUgYHBhcnNlNWAgdHlwZXMgY3VycmVudGx5IGRvIG5vdCBhbGxvdyBgdW5kZWZpbmVkYC5cbiAgICBvblBhcnNlRXJyb3I6IHNldHRpbmdzLm9uZXJyb3IgPyBpbnRlcm5hbE9uZXJyb3IgOiBudWxsLFxuICAgIHNjcmlwdGluZ0VuYWJsZWQ6IGZhbHNlXG4gIH0pXG5cbiAgLy8gYHBhcnNlNWAgcmV0dXJucyBkb2N1bWVudCB3aGljaCBhcmUgYWx3YXlzIG1hcHBlZCB0byByb290cy5cbiAgcmV0dXJuIC8qKiBAdHlwZSB7Um9vdH0gKi8gKFxuICAgIGZyb21QYXJzZTUocDVkb2MsIHtcbiAgICAgIGZpbGUsXG4gICAgICBzcGFjZTogc2V0dGluZ3Muc3BhY2UsXG4gICAgICB2ZXJib3NlOiBzZXR0aW5ncy52ZXJib3NlXG4gICAgfSlcbiAgKVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYSBwYXJzZSBlcnJvci5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJzZXJFcnJvcn0gZXJyb3JcbiAgICogICBQYXJzZTUgZXJyb3IuXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR9XG4gICAqICAgTm90aGluZy5cbiAgICovXG4gIGZ1bmN0aW9uIGludGVybmFsT25lcnJvcihlcnJvcikge1xuICAgIGNvbnN0IGNvZGUgPSBlcnJvci5jb2RlXG4gICAgY29uc3QgbmFtZSA9IGNhbWVsY2FzZShjb2RlKVxuICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tuYW1lXVxuICAgIGNvbnN0IGNvbmZpZyA9IHNldHRpbmcgPT09IG51bGwgfHwgc2V0dGluZyA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNldHRpbmdcbiAgICBjb25zdCBsZXZlbCA9IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8gY29uZmlnIDogY29uZmlnID8gMSA6IDBcblxuICAgIGlmIChsZXZlbCkge1xuICAgICAgY29uc3QgaW5mbyA9IGVycm9yc1tuYW1lXVxuICAgICAgYXNzZXJ0KGluZm8sICdleHBlY3RlZCBrbm93biBlcnJvciBmcm9tIGBwYXJzZTVgJylcblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBWRmlsZU1lc3NhZ2UoZm9ybWF0KGluZm8ucmVhc29uKSwge1xuICAgICAgICBwbGFjZToge1xuICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICBsaW5lOiBlcnJvci5zdGFydExpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGVycm9yLnN0YXJ0Q29sLFxuICAgICAgICAgICAgb2Zmc2V0OiBlcnJvci5zdGFydE9mZnNldFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW5kOiB7XG4gICAgICAgICAgICBsaW5lOiBlcnJvci5lbmRMaW5lLFxuICAgICAgICAgICAgY29sdW1uOiBlcnJvci5lbmRDb2wsXG4gICAgICAgICAgICBvZmZzZXQ6IGVycm9yLmVuZE9mZnNldFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcnVsZUlkOiBjb2RlLFxuICAgICAgICBzb3VyY2U6ICdoYXN0LXV0aWwtZnJvbS1odG1sJ1xuICAgICAgfSlcblxuICAgICAgaWYgKGZpbGUucGF0aCkge1xuICAgICAgICBtZXNzYWdlLmZpbGUgPSBmaWxlLnBhdGhcbiAgICAgICAgbWVzc2FnZS5uYW1lID0gZmlsZS5wYXRoICsgJzonICsgbWVzc2FnZS5uYW1lXG4gICAgICB9XG5cbiAgICAgIG1lc3NhZ2UuZmF0YWwgPSBmYXRhbGl0aWVzW2xldmVsXVxuICAgICAgbWVzc2FnZS5ub3RlID0gZm9ybWF0KGluZm8uZGVzY3JpcHRpb24pXG4gICAgICBtZXNzYWdlLnVybCA9IGluZm8udXJsID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IGJhc2UgKyBjb2RlXG5cbiAgICAgIGFzc2VydChvbmVycm9yLCAnYGludGVybmFsT25lcnJvcmAgaXMgbm90IHBhc3NlZCBpZiBgb25lcnJvcmAgaXMgbm90IHNldCcpXG4gICAgICBvbmVycm9yKG1lc3NhZ2UpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9ybWF0IGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIGFib3V0IGFuIGVycm9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAgICogICBWYWx1ZSB0byBmb3JtYXQuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKiAgIEZvcm1hdHRlZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGZvcm1hdENSZSwgZm9ybWF0QykucmVwbGFjZShmb3JtYXRYUmUsIGZvcm1hdFgpXG5cbiAgICAgIC8qKlxuICAgICAgICogRm9ybWF0IHRoZSBjaGFyYWN0ZXIuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9IF9cbiAgICAgICAqICAgTWF0Y2guXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gJDFcbiAgICAgICAqICAgU2lnbiAoYC1gIG9yIGArYCwgb3B0aW9uYWwpLlxuICAgICAgICogQHBhcmFtIHtzdHJpbmd9ICQyXG4gICAgICAgKiAgIE9mZnNldC5cbiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICAgKiAgIEZvcm1hdHRlZC5cbiAgICAgICAqL1xuICAgICAgZnVuY3Rpb24gZm9ybWF0QyhfLCAkMSwgJDIpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID1cbiAgICAgICAgICAoJDIgPyBOdW1iZXIucGFyc2VJbnQoJDIsIDEwKSA6IDApICogKCQxID09PSAnLScgPyAtMSA6IDEpXG4gICAgICAgIGNvbnN0IGNoYXIgPSBkb2MuY2hhckF0KGVycm9yLnN0YXJ0T2Zmc2V0ICsgb2Zmc2V0KVxuICAgICAgICByZXR1cm4gdmlzdWFsaXplQ2hhcmFjdGVyKGNoYXIpXG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogRm9ybWF0IHRoZSBjaGFyYWN0ZXIgY29kZS5cbiAgICAgICAqXG4gICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAgICogICBGb3JtYXR0ZWQuXG4gICAgICAgKi9cbiAgICAgIGZ1bmN0aW9uIGZvcm1hdFgoKSB7XG4gICAgICAgIHJldHVybiB2aXN1YWxpemVDaGFyYWN0ZXJDb2RlKGRvYy5jaGFyQ29kZUF0KGVycm9yLnN0YXJ0T2Zmc2V0KSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqICAgRXJyb3IgY29kZSBpbiBkYXNoIGNhc2UuXG4gKiBAcmV0dXJucyB7RXJyb3JDb2RlfVxuICogICBFcnJvciBjb2RlIGluIGNhbWVsY2FzZS5cbiAqL1xuZnVuY3Rpb24gY2FtZWxjYXNlKHZhbHVlKSB7XG4gIC8vIFRoaXMgc2hvdWxkIG1hdGNoIGFuIGVycm9yIGNvZGUuXG4gIHJldHVybiAvKiogQHR5cGUge0Vycm9yQ29kZX0gKi8gKHZhbHVlLnJlcGxhY2UoZGFzaFRvQ2FtZWxSZSwgZGFzaFRvQ2FtZWwpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSAkMFxuICogICBNYXRjaC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIENhbWVsY2FzZWQuXG4gKi9cbmZ1bmN0aW9uIGRhc2hUb0NhbWVsKCQwKSB7XG4gIHJldHVybiAkMC5jaGFyQXQoMSkudG9VcHBlckNhc2UoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKiAgIENoYXJhY3Rlci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIEZvcm1hdHRlZC5cbiAqL1xuZnVuY3Rpb24gdmlzdWFsaXplQ2hhcmFjdGVyKGNoYXIpIHtcbiAgcmV0dXJuIGNoYXIgPT09ICdgJyA/ICdgIGAgYCcgOiBjaGFyXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGNoYXJDb2RlXG4gKiAgIENoYXJhY3RlciBjb2RlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRm9ybWF0dGVkLlxuICovXG5mdW5jdGlvbiB2aXN1YWxpemVDaGFyYWN0ZXJDb2RlKGNoYXJDb2RlKSB7XG4gIHJldHVybiAnMHgnICsgY2hhckNvZGUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbn1cbiIsICIvKipcbiAqIExpc3Qgb2YgSFRNTCB2b2lkIHRhZyBuYW1lcy5cbiAqXG4gKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn1cbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxWb2lkRWxlbWVudHMgPSBbXG4gICdhcmVhJyxcbiAgJ2Jhc2UnLFxuICAnYmFzZWZvbnQnLFxuICAnYmdzb3VuZCcsXG4gICdicicsXG4gICdjb2wnLFxuICAnY29tbWFuZCcsXG4gICdlbWJlZCcsXG4gICdmcmFtZScsXG4gICdocicsXG4gICdpbWFnZScsXG4gICdpbWcnLFxuICAnaW5wdXQnLFxuICAna2V5Z2VuJyxcbiAgJ2xpbmsnLFxuICAnbWV0YScsXG4gICdwYXJhbScsXG4gICdzb3VyY2UnLFxuICAndHJhY2snLFxuICAnd2JyJ1xuXVxuIiwgIi8qKlxuICogQGNhbGxiYWNrIEhhbmRsZXJcbiAqICAgSGFuZGxlIGEgdmFsdWUsIHdpdGggYSBjZXJ0YWluIElEIGZpZWxkIHNldCB0byBhIGNlcnRhaW4gdmFsdWUuXG4gKiAgIFRoZSBJRCBmaWVsZCBpcyBwYXNzZWQgdG8gYHp3aXRjaGAsIGFuZCBpdFx1MjAxOXMgdmFsdWUgaXMgdGhpcyBmdW5jdGlvblx1MjAxOXNcbiAqICAgcGxhY2Ugb24gdGhlIGBoYW5kbGVyc2AgcmVjb3JkLlxuICogQHBhcmFtIHsuLi5hbnl9IHBhcmFtZXRlcnNcbiAqICAgQXJiaXRyYXJ5IHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSB6d2l0Y2guXG4gKiAgIFRoZSBmaXJzdCB3aWxsIGJlIGFuIG9iamVjdCB3aXRoIGEgY2VydGFpbiBJRCBmaWVsZCBzZXQgdG8gYSBjZXJ0YWluIHZhbHVlLlxuICogQHJldHVybnMge2FueX1cbiAqICAgQW55dGhpbmchXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgVW5rbm93bkhhbmRsZXJcbiAqICAgSGFuZGxlIHZhbHVlcyB0aGF0IGRvIGhhdmUgYSBjZXJ0YWluIElEIGZpZWxkLCBidXQgaXRcdTIwMTlzIHNldCB0byBhIHZhbHVlXG4gKiAgIHRoYXQgaXMgbm90IGxpc3RlZCBpbiB0aGUgYGhhbmRsZXJzYCByZWNvcmQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlXG4gKiAgIEFuIG9iamVjdCB3aXRoIGEgY2VydGFpbiBJRCBmaWVsZCBzZXQgdG8gYW4gdW5rbm93biB2YWx1ZS5cbiAqIEBwYXJhbSB7Li4uYW55fSByZXN0XG4gKiAgIEFyYml0cmFyeSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgendpdGNoLlxuICogQHJldHVybnMge2FueX1cbiAqICAgQW55dGhpbmchXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgSW52YWxpZEhhbmRsZXJcbiAqICAgSGFuZGxlIHZhbHVlcyB0aGF0IGRvIG5vdCBoYXZlIGEgY2VydGFpbiBJRCBmaWVsZC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWVcbiAqICAgQW55IHVua25vd24gdmFsdWUuXG4gKiBAcGFyYW0gey4uLmFueX0gcmVzdFxuICogICBBcmJpdHJhcnkgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIHp3aXRjaC5cbiAqIEByZXR1cm5zIHt2b2lkfG51bGx8dW5kZWZpbmVkfG5ldmVyfVxuICogICBUaGlzIHNob3VsZCBjcmFzaCBvciByZXR1cm4gbm90aGluZy5cbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSB7SW52YWxpZEhhbmRsZXJ9IFtJbnZhbGlkPUludmFsaWRIYW5kbGVyXVxuICogQHRlbXBsYXRlIHtVbmtub3duSGFuZGxlcn0gW1Vua25vd249VW5rbm93bkhhbmRsZXJdXG4gKiBAdGVtcGxhdGUge1JlY29yZDxzdHJpbmcsIEhhbmRsZXI+fSBbSGFuZGxlcnM9UmVjb3JkPHN0cmluZywgSGFuZGxlcj5dXG4gKiBAdHlwZWRlZiBPcHRpb25zXG4gKiAgIENvbmZpZ3VyYXRpb24gKHJlcXVpcmVkKS5cbiAqIEBwcm9wZXJ0eSB7SW52YWxpZH0gW2ludmFsaWRdXG4gKiAgIEhhbmRsZXIgdG8gdXNlIGZvciBpbnZhbGlkIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7VW5rbm93bn0gW3Vua25vd25dXG4gKiAgIEhhbmRsZXIgdG8gdXNlIGZvciB1bmtub3duIHZhbHVlcy5cbiAqIEBwcm9wZXJ0eSB7SGFuZGxlcnN9IFtoYW5kbGVyc11cbiAqICAgSGFuZGxlcnMgdG8gdXNlLlxuICovXG5cbmNvbnN0IG93biA9IHt9Lmhhc093blByb3BlcnR5XG5cbi8qKlxuICogSGFuZGxlIHZhbHVlcyBiYXNlZCBvbiBhIGZpZWxkLlxuICpcbiAqIEB0ZW1wbGF0ZSB7SW52YWxpZEhhbmRsZXJ9IFtJbnZhbGlkPUludmFsaWRIYW5kbGVyXVxuICogQHRlbXBsYXRlIHtVbmtub3duSGFuZGxlcn0gW1Vua25vd249VW5rbm93bkhhbmRsZXJdXG4gKiBAdGVtcGxhdGUge1JlY29yZDxzdHJpbmcsIEhhbmRsZXI+fSBbSGFuZGxlcnM9UmVjb3JkPHN0cmluZywgSGFuZGxlcj5dXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiAgIEZpZWxkIHRvIHN3aXRjaCBvbi5cbiAqIEBwYXJhbSB7T3B0aW9uczxJbnZhbGlkLCBVbmtub3duLCBIYW5kbGVycz59IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uIChyZXF1aXJlZCkuXG4gKiBAcmV0dXJucyB7e3Vua25vd246IFVua25vd24sIGludmFsaWQ6IEludmFsaWQsIGhhbmRsZXJzOiBIYW5kbGVycywgKC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnM8SGFuZGxlcnNba2V5b2YgSGFuZGxlcnNdPik6IFJldHVyblR5cGU8SGFuZGxlcnNba2V5b2YgSGFuZGxlcnNdPiwgKC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnM8VW5rbm93bj4pOiBSZXR1cm5UeXBlPFVua25vd24+fX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHp3aXRjaChrZXksIG9wdGlvbnMpIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IHt9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBvbmUgdmFsdWUuXG4gICAqXG4gICAqIEJhc2VkIG9uIHRoZSBib3VuZCBga2V5YCwgYSByZXNwZWN0aXZlIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQuXG4gICAqIElmIGB2YWx1ZWAgaXMgbm90IGFuIG9iamVjdCwgb3IgZG9lc25cdTIwMTl0IGhhdmUgYSBga2V5YCBwcm9wZXJ0eSwgdGhlIHNwZWNpYWxcbiAgICogXHUyMDFDaW52YWxpZFx1MjAxRCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkLlxuICAgKiBJZiBgdmFsdWVgIGhhcyBhbiB1bmtub3duIGBrZXlgLCB0aGUgc3BlY2lhbCBcdTIwMUN1bmtub3duXHUyMDFEIGhhbmRsZXIgd2lsbCBiZVxuICAgKiBjYWxsZWQuXG4gICAqXG4gICAqIEFsbCBhcmd1bWVudHMsIGFuZCB0aGUgY29udGV4dCBvYmplY3QsIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgaGFuZGxlcixcbiAgICogYW5kIGl0XHUyMDE5cyByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEB0aGlzIHt1bmtub3dufVxuICAgKiAgIEFueSBjb250ZXh0IG9iamVjdC5cbiAgICogQHBhcmFtIHt1bmtub3dufSBbdmFsdWVdXG4gICAqICAgQW55IHZhbHVlLlxuICAgKiBAcGFyYW0gey4uLnVua25vd259IHBhcmFtZXRlcnNcbiAgICogICBBcmJpdHJhcnkgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIHp3aXRjaC5cbiAgICogQHByb3BlcnR5IHtIYW5kbGVyfSBpbnZhbGlkXG4gICAqICAgSGFuZGxlIGZvciB2YWx1ZXMgdGhhdCBkbyBub3QgaGF2ZSBhIGNlcnRhaW4gSUQgZmllbGQuXG4gICAqIEBwcm9wZXJ0eSB7SGFuZGxlcn0gdW5rbm93blxuICAgKiAgIEhhbmRsZSB2YWx1ZXMgdGhhdCBkbyBoYXZlIGEgY2VydGFpbiBJRCBmaWVsZCwgYnV0IGl0XHUyMDE5cyBzZXQgdG8gYSB2YWx1ZVxuICAgKiAgIHRoYXQgaXMgbm90IGxpc3RlZCBpbiB0aGUgYGhhbmRsZXJzYCByZWNvcmQuXG4gICAqIEBwcm9wZXJ0eSB7SGFuZGxlcnN9IGhhbmRsZXJzXG4gICAqICAgUmVjb3JkIG9mIGhhbmRsZXJzLlxuICAgKiBAcmV0dXJucyB7dW5rbm93bn1cbiAgICogICBBbnl0aGluZy5cbiAgICovXG4gIGZ1bmN0aW9uIG9uZSh2YWx1ZSwgLi4ucGFyYW1ldGVycykge1xuICAgIC8qKiBAdHlwZSB7SGFuZGxlcnx1bmRlZmluZWR9ICovXG4gICAgbGV0IGZuID0gb25lLmludmFsaWRcbiAgICBjb25zdCBoYW5kbGVycyA9IG9uZS5oYW5kbGVyc1xuXG4gICAgaWYgKHZhbHVlICYmIG93bi5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEluZGV4YWJsZS5cbiAgICAgIGNvbnN0IGlkID0gU3RyaW5nKHZhbHVlW2tleV0pXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEluZGV4YWJsZS5cbiAgICAgIGZuID0gb3duLmNhbGwoaGFuZGxlcnMsIGlkKSA/IGhhbmRsZXJzW2lkXSA6IG9uZS51bmtub3duXG4gICAgfVxuXG4gICAgaWYgKGZuKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCB2YWx1ZSwgLi4ucGFyYW1ldGVycylcbiAgICB9XG4gIH1cblxuICBvbmUuaGFuZGxlcnMgPSBzZXR0aW5ncy5oYW5kbGVycyB8fCB7fVxuICBvbmUuaW52YWxpZCA9IHNldHRpbmdzLmludmFsaWRcbiAgb25lLnVua25vd24gPSBzZXR0aW5ncy51bmtub3duXG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbWF0Y2hlcyFcbiAgcmV0dXJuIG9uZVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYgQ29yZU9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7QXJyYXk8c3RyaW5nPn0gW3N1YnNldD1bXV1cbiAqICAgV2hldGhlciB0byBvbmx5IGVzY2FwZSB0aGUgZ2l2ZW4gc3Vic2V0IG9mIGNoYXJhY3RlcnMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtlc2NhcGVPbmx5PWZhbHNlXVxuICogICBXaGV0aGVyIHRvIG9ubHkgZXNjYXBlIHBvc3NpYmx5IGRhbmdlcm91cyBjaGFyYWN0ZXJzLlxuICogICBUaG9zZSBjaGFyYWN0ZXJzIGFyZSBgXCJgLCBgJmAsIGAnYCwgYDxgLCBgPmAsIGFuZCBgYCBgIGBgLlxuICpcbiAqIEB0eXBlZGVmIEZvcm1hdE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7KGNvZGU6IG51bWJlciwgbmV4dDogbnVtYmVyLCBvcHRpb25zOiBDb3JlV2l0aEZvcm1hdE9wdGlvbnMpID0+IHN0cmluZ30gZm9ybWF0XG4gKiAgIEZvcm1hdCBzdHJhdGVneS5cbiAqXG4gKiBAdHlwZWRlZiB7Q29yZU9wdGlvbnMgJiBGb3JtYXRPcHRpb25zICYgaW1wb3J0KCcuL3V0aWwvZm9ybWF0LXNtYXJ0LmpzJykuRm9ybWF0U21hcnRPcHRpb25zfSBDb3JlV2l0aEZvcm1hdE9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIEVuY29kZSBjZXJ0YWluIGNoYXJhY3RlcnMgaW4gYHZhbHVlYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7Q29yZVdpdGhGb3JtYXRPcHRpb25zfSBvcHRpb25zXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29yZSh2YWx1ZSwgb3B0aW9ucykge1xuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXG4gICAgb3B0aW9ucy5zdWJzZXQgPyBjaGFyYWN0ZXJzVG9FeHByZXNzaW9uKG9wdGlvbnMuc3Vic2V0KSA6IC9bXCImJzw+YF0vZyxcbiAgICBiYXNpY1xuICApXG5cbiAgaWYgKG9wdGlvbnMuc3Vic2V0IHx8IG9wdGlvbnMuZXNjYXBlT25seSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICB2YWx1ZVxuICAgICAgLy8gU3Vycm9nYXRlIHBhaXJzLlxuICAgICAgLnJlcGxhY2UoL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0vZywgc3Vycm9nYXRlKVxuICAgICAgLy8gQk1QIGNvbnRyb2wgY2hhcmFjdGVycyAoQzAgZXhjZXB0IGZvciBMRiwgQ1IsIFNQOyBERUw7IGFuZCBzb21lIG1vcmVcbiAgICAgIC8vIG5vbi1BU0NJSSBvbmVzKS5cbiAgICAgIC5yZXBsYWNlKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCwgdW5pY29ybi9uby1oZXgtZXNjYXBlXG4gICAgICAgIC9bXFx4MDEtXFx0XFx2XFxmXFx4MEUtXFx4MUZcXHg3RlxceDgxXFx4OERcXHg4RlxceDkwXFx4OURcXHhBMC1cXHVGRkZGXS9nLFxuICAgICAgICBiYXNpY1xuICAgICAgKVxuICApXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYWlyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWxsXG4gICAqL1xuICBmdW5jdGlvbiBzdXJyb2dhdGUocGFpciwgaW5kZXgsIGFsbCkge1xuICAgIHJldHVybiBvcHRpb25zLmZvcm1hdChcbiAgICAgIChwYWlyLmNoYXJDb2RlQXQoMCkgLSAweGQ4MDApICogMHg0MDAgK1xuICAgICAgICBwYWlyLmNoYXJDb2RlQXQoMSkgLVxuICAgICAgICAweGRjMDAgK1xuICAgICAgICAweDEwMDAwLFxuICAgICAgYWxsLmNoYXJDb2RlQXQoaW5kZXggKyAyKSxcbiAgICAgIG9wdGlvbnNcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYXJhY3RlclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFsbFxuICAgKi9cbiAgZnVuY3Rpb24gYmFzaWMoY2hhcmFjdGVyLCBpbmRleCwgYWxsKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZm9ybWF0KFxuICAgICAgY2hhcmFjdGVyLmNoYXJDb2RlQXQoMCksXG4gICAgICBhbGwuY2hhckNvZGVBdChpbmRleCArIDEpLFxuICAgICAgb3B0aW9uc1xuICAgIClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3Vic2V0XG4gKiBAcmV0dXJucyB7UmVnRXhwfVxuICovXG5mdW5jdGlvbiBjaGFyYWN0ZXJzVG9FeHByZXNzaW9uKHN1YnNldCkge1xuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IGdyb3VwcyA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG5cbiAgd2hpbGUgKCsraW5kZXggPCBzdWJzZXQubGVuZ3RoKSB7XG4gICAgZ3JvdXBzLnB1c2goc3Vic2V0W2luZGV4XS5yZXBsYWNlKC9bfFxcXFx7fSgpW1xcXV4kKyo/Ll0vZywgJ1xcXFwkJicpKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBSZWdFeHAoJyg/OicgKyBncm91cHMuam9pbignfCcpICsgJyknLCAnZycpXG59XG4iLCAiLyoqXG4gKiBDb25maWd1cmFibGUgd2F5cyB0byBlbmNvZGUgY2hhcmFjdGVycyBhcyBoZXhhZGVjaW1hbCByZWZlcmVuY2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcGFyYW0ge251bWJlcn0gbmV4dFxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gb21pdFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSGV4YWRlY2ltYWwoY29kZSwgbmV4dCwgb21pdCkge1xuICBjb25zdCB2YWx1ZSA9ICcmI3gnICsgY29kZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICByZXR1cm4gb21pdCAmJiBuZXh0ICYmICEvW1xcZEEtRmEtZl0vLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0KSlcbiAgICA/IHZhbHVlXG4gICAgOiB2YWx1ZSArICc7J1xufVxuIiwgIi8qKlxuICogQ29uZmlndXJhYmxlIHdheXMgdG8gZW5jb2RlIGNoYXJhY3RlcnMgYXMgZGVjaW1hbCByZWZlcmVuY2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcGFyYW0ge251bWJlcn0gbmV4dFxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gb21pdFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvRGVjaW1hbChjb2RlLCBuZXh0LCBvbWl0KSB7XG4gIGNvbnN0IHZhbHVlID0gJyYjJyArIFN0cmluZyhjb2RlKVxuICByZXR1cm4gb21pdCAmJiBuZXh0ICYmICEvXFxkLy50ZXN0KFN0cmluZy5mcm9tQ2hhckNvZGUobmV4dCkpXG4gICAgPyB2YWx1ZVxuICAgIDogdmFsdWUgKyAnOydcbn1cbiIsICIvKipcbiAqIExpc3Qgb2YgbGVnYWN5IEhUTUwgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgdGhhdCBkb25cdTIwMTl0IG5lZWQgYSB0cmFpbGluZyBzZW1pY29sb24uXG4gKlxuICogQHR5cGUge0FycmF5PHN0cmluZz59XG4gKi9cbmV4cG9ydCBjb25zdCBjaGFyYWN0ZXJFbnRpdGllc0xlZ2FjeSA9IFtcbiAgJ0FFbGlnJyxcbiAgJ0FNUCcsXG4gICdBYWN1dGUnLFxuICAnQWNpcmMnLFxuICAnQWdyYXZlJyxcbiAgJ0FyaW5nJyxcbiAgJ0F0aWxkZScsXG4gICdBdW1sJyxcbiAgJ0NPUFknLFxuICAnQ2NlZGlsJyxcbiAgJ0VUSCcsXG4gICdFYWN1dGUnLFxuICAnRWNpcmMnLFxuICAnRWdyYXZlJyxcbiAgJ0V1bWwnLFxuICAnR1QnLFxuICAnSWFjdXRlJyxcbiAgJ0ljaXJjJyxcbiAgJ0lncmF2ZScsXG4gICdJdW1sJyxcbiAgJ0xUJyxcbiAgJ050aWxkZScsXG4gICdPYWN1dGUnLFxuICAnT2NpcmMnLFxuICAnT2dyYXZlJyxcbiAgJ09zbGFzaCcsXG4gICdPdGlsZGUnLFxuICAnT3VtbCcsXG4gICdRVU9UJyxcbiAgJ1JFRycsXG4gICdUSE9STicsXG4gICdVYWN1dGUnLFxuICAnVWNpcmMnLFxuICAnVWdyYXZlJyxcbiAgJ1V1bWwnLFxuICAnWWFjdXRlJyxcbiAgJ2FhY3V0ZScsXG4gICdhY2lyYycsXG4gICdhY3V0ZScsXG4gICdhZWxpZycsXG4gICdhZ3JhdmUnLFxuICAnYW1wJyxcbiAgJ2FyaW5nJyxcbiAgJ2F0aWxkZScsXG4gICdhdW1sJyxcbiAgJ2JydmJhcicsXG4gICdjY2VkaWwnLFxuICAnY2VkaWwnLFxuICAnY2VudCcsXG4gICdjb3B5JyxcbiAgJ2N1cnJlbicsXG4gICdkZWcnLFxuICAnZGl2aWRlJyxcbiAgJ2VhY3V0ZScsXG4gICdlY2lyYycsXG4gICdlZ3JhdmUnLFxuICAnZXRoJyxcbiAgJ2V1bWwnLFxuICAnZnJhYzEyJyxcbiAgJ2ZyYWMxNCcsXG4gICdmcmFjMzQnLFxuICAnZ3QnLFxuICAnaWFjdXRlJyxcbiAgJ2ljaXJjJyxcbiAgJ2lleGNsJyxcbiAgJ2lncmF2ZScsXG4gICdpcXVlc3QnLFxuICAnaXVtbCcsXG4gICdsYXF1bycsXG4gICdsdCcsXG4gICdtYWNyJyxcbiAgJ21pY3JvJyxcbiAgJ21pZGRvdCcsXG4gICduYnNwJyxcbiAgJ25vdCcsXG4gICdudGlsZGUnLFxuICAnb2FjdXRlJyxcbiAgJ29jaXJjJyxcbiAgJ29ncmF2ZScsXG4gICdvcmRmJyxcbiAgJ29yZG0nLFxuICAnb3NsYXNoJyxcbiAgJ290aWxkZScsXG4gICdvdW1sJyxcbiAgJ3BhcmEnLFxuICAncGx1c21uJyxcbiAgJ3BvdW5kJyxcbiAgJ3F1b3QnLFxuICAncmFxdW8nLFxuICAncmVnJyxcbiAgJ3NlY3QnLFxuICAnc2h5JyxcbiAgJ3N1cDEnLFxuICAnc3VwMicsXG4gICdzdXAzJyxcbiAgJ3N6bGlnJyxcbiAgJ3Rob3JuJyxcbiAgJ3RpbWVzJyxcbiAgJ3VhY3V0ZScsXG4gICd1Y2lyYycsXG4gICd1Z3JhdmUnLFxuICAndW1sJyxcbiAgJ3V1bWwnLFxuICAneWFjdXRlJyxcbiAgJ3llbicsXG4gICd5dW1sJ1xuXVxuIiwgIi8qKlxuICogTWFwIG9mIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIGZyb20gSFRNTCA0LlxuICpcbiAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5leHBvcnQgY29uc3QgY2hhcmFjdGVyRW50aXRpZXNIdG1sNCA9IHtcbiAgbmJzcDogJ1x1MDBBMCcsXG4gIGlleGNsOiAnXHUwMEExJyxcbiAgY2VudDogJ1x1MDBBMicsXG4gIHBvdW5kOiAnXHUwMEEzJyxcbiAgY3VycmVuOiAnXHUwMEE0JyxcbiAgeWVuOiAnXHUwMEE1JyxcbiAgYnJ2YmFyOiAnXHUwMEE2JyxcbiAgc2VjdDogJ1x1MDBBNycsXG4gIHVtbDogJ1x1MDBBOCcsXG4gIGNvcHk6ICdcdTAwQTknLFxuICBvcmRmOiAnXHUwMEFBJyxcbiAgbGFxdW86ICdcdTAwQUInLFxuICBub3Q6ICdcdTAwQUMnLFxuICBzaHk6ICdcdTAwQUQnLFxuICByZWc6ICdcdTAwQUUnLFxuICBtYWNyOiAnXHUwMEFGJyxcbiAgZGVnOiAnXHUwMEIwJyxcbiAgcGx1c21uOiAnXHUwMEIxJyxcbiAgc3VwMjogJ1x1MDBCMicsXG4gIHN1cDM6ICdcdTAwQjMnLFxuICBhY3V0ZTogJ1x1MDBCNCcsXG4gIG1pY3JvOiAnXHUwMEI1JyxcbiAgcGFyYTogJ1x1MDBCNicsXG4gIG1pZGRvdDogJ1x1MDBCNycsXG4gIGNlZGlsOiAnXHUwMEI4JyxcbiAgc3VwMTogJ1x1MDBCOScsXG4gIG9yZG06ICdcdTAwQkEnLFxuICByYXF1bzogJ1x1MDBCQicsXG4gIGZyYWMxNDogJ1x1MDBCQycsXG4gIGZyYWMxMjogJ1x1MDBCRCcsXG4gIGZyYWMzNDogJ1x1MDBCRScsXG4gIGlxdWVzdDogJ1x1MDBCRicsXG4gIEFncmF2ZTogJ1x1MDBDMCcsXG4gIEFhY3V0ZTogJ1x1MDBDMScsXG4gIEFjaXJjOiAnXHUwMEMyJyxcbiAgQXRpbGRlOiAnXHUwMEMzJyxcbiAgQXVtbDogJ1x1MDBDNCcsXG4gIEFyaW5nOiAnXHUwMEM1JyxcbiAgQUVsaWc6ICdcdTAwQzYnLFxuICBDY2VkaWw6ICdcdTAwQzcnLFxuICBFZ3JhdmU6ICdcdTAwQzgnLFxuICBFYWN1dGU6ICdcdTAwQzknLFxuICBFY2lyYzogJ1x1MDBDQScsXG4gIEV1bWw6ICdcdTAwQ0InLFxuICBJZ3JhdmU6ICdcdTAwQ0MnLFxuICBJYWN1dGU6ICdcdTAwQ0QnLFxuICBJY2lyYzogJ1x1MDBDRScsXG4gIEl1bWw6ICdcdTAwQ0YnLFxuICBFVEg6ICdcdTAwRDAnLFxuICBOdGlsZGU6ICdcdTAwRDEnLFxuICBPZ3JhdmU6ICdcdTAwRDInLFxuICBPYWN1dGU6ICdcdTAwRDMnLFxuICBPY2lyYzogJ1x1MDBENCcsXG4gIE90aWxkZTogJ1x1MDBENScsXG4gIE91bWw6ICdcdTAwRDYnLFxuICB0aW1lczogJ1x1MDBENycsXG4gIE9zbGFzaDogJ1x1MDBEOCcsXG4gIFVncmF2ZTogJ1x1MDBEOScsXG4gIFVhY3V0ZTogJ1x1MDBEQScsXG4gIFVjaXJjOiAnXHUwMERCJyxcbiAgVXVtbDogJ1x1MDBEQycsXG4gIFlhY3V0ZTogJ1x1MDBERCcsXG4gIFRIT1JOOiAnXHUwMERFJyxcbiAgc3psaWc6ICdcdTAwREYnLFxuICBhZ3JhdmU6ICdcdTAwRTAnLFxuICBhYWN1dGU6ICdcdTAwRTEnLFxuICBhY2lyYzogJ1x1MDBFMicsXG4gIGF0aWxkZTogJ1x1MDBFMycsXG4gIGF1bWw6ICdcdTAwRTQnLFxuICBhcmluZzogJ1x1MDBFNScsXG4gIGFlbGlnOiAnXHUwMEU2JyxcbiAgY2NlZGlsOiAnXHUwMEU3JyxcbiAgZWdyYXZlOiAnXHUwMEU4JyxcbiAgZWFjdXRlOiAnXHUwMEU5JyxcbiAgZWNpcmM6ICdcdTAwRUEnLFxuICBldW1sOiAnXHUwMEVCJyxcbiAgaWdyYXZlOiAnXHUwMEVDJyxcbiAgaWFjdXRlOiAnXHUwMEVEJyxcbiAgaWNpcmM6ICdcdTAwRUUnLFxuICBpdW1sOiAnXHUwMEVGJyxcbiAgZXRoOiAnXHUwMEYwJyxcbiAgbnRpbGRlOiAnXHUwMEYxJyxcbiAgb2dyYXZlOiAnXHUwMEYyJyxcbiAgb2FjdXRlOiAnXHUwMEYzJyxcbiAgb2NpcmM6ICdcdTAwRjQnLFxuICBvdGlsZGU6ICdcdTAwRjUnLFxuICBvdW1sOiAnXHUwMEY2JyxcbiAgZGl2aWRlOiAnXHUwMEY3JyxcbiAgb3NsYXNoOiAnXHUwMEY4JyxcbiAgdWdyYXZlOiAnXHUwMEY5JyxcbiAgdWFjdXRlOiAnXHUwMEZBJyxcbiAgdWNpcmM6ICdcdTAwRkInLFxuICB1dW1sOiAnXHUwMEZDJyxcbiAgeWFjdXRlOiAnXHUwMEZEJyxcbiAgdGhvcm46ICdcdTAwRkUnLFxuICB5dW1sOiAnXHUwMEZGJyxcbiAgZm5vZjogJ1x1MDE5MicsXG4gIEFscGhhOiAnXHUwMzkxJyxcbiAgQmV0YTogJ1x1MDM5MicsXG4gIEdhbW1hOiAnXHUwMzkzJyxcbiAgRGVsdGE6ICdcdTAzOTQnLFxuICBFcHNpbG9uOiAnXHUwMzk1JyxcbiAgWmV0YTogJ1x1MDM5NicsXG4gIEV0YTogJ1x1MDM5NycsXG4gIFRoZXRhOiAnXHUwMzk4JyxcbiAgSW90YTogJ1x1MDM5OScsXG4gIEthcHBhOiAnXHUwMzlBJyxcbiAgTGFtYmRhOiAnXHUwMzlCJyxcbiAgTXU6ICdcdTAzOUMnLFxuICBOdTogJ1x1MDM5RCcsXG4gIFhpOiAnXHUwMzlFJyxcbiAgT21pY3JvbjogJ1x1MDM5RicsXG4gIFBpOiAnXHUwM0EwJyxcbiAgUmhvOiAnXHUwM0ExJyxcbiAgU2lnbWE6ICdcdTAzQTMnLFxuICBUYXU6ICdcdTAzQTQnLFxuICBVcHNpbG9uOiAnXHUwM0E1JyxcbiAgUGhpOiAnXHUwM0E2JyxcbiAgQ2hpOiAnXHUwM0E3JyxcbiAgUHNpOiAnXHUwM0E4JyxcbiAgT21lZ2E6ICdcdTAzQTknLFxuICBhbHBoYTogJ1x1MDNCMScsXG4gIGJldGE6ICdcdTAzQjInLFxuICBnYW1tYTogJ1x1MDNCMycsXG4gIGRlbHRhOiAnXHUwM0I0JyxcbiAgZXBzaWxvbjogJ1x1MDNCNScsXG4gIHpldGE6ICdcdTAzQjYnLFxuICBldGE6ICdcdTAzQjcnLFxuICB0aGV0YTogJ1x1MDNCOCcsXG4gIGlvdGE6ICdcdTAzQjknLFxuICBrYXBwYTogJ1x1MDNCQScsXG4gIGxhbWJkYTogJ1x1MDNCQicsXG4gIG11OiAnXHUwM0JDJyxcbiAgbnU6ICdcdTAzQkQnLFxuICB4aTogJ1x1MDNCRScsXG4gIG9taWNyb246ICdcdTAzQkYnLFxuICBwaTogJ1x1MDNDMCcsXG4gIHJobzogJ1x1MDNDMScsXG4gIHNpZ21hZjogJ1x1MDNDMicsXG4gIHNpZ21hOiAnXHUwM0MzJyxcbiAgdGF1OiAnXHUwM0M0JyxcbiAgdXBzaWxvbjogJ1x1MDNDNScsXG4gIHBoaTogJ1x1MDNDNicsXG4gIGNoaTogJ1x1MDNDNycsXG4gIHBzaTogJ1x1MDNDOCcsXG4gIG9tZWdhOiAnXHUwM0M5JyxcbiAgdGhldGFzeW06ICdcdTAzRDEnLFxuICB1cHNpaDogJ1x1MDNEMicsXG4gIHBpdjogJ1x1MDNENicsXG4gIGJ1bGw6ICdcdTIwMjInLFxuICBoZWxsaXA6ICdcdTIwMjYnLFxuICBwcmltZTogJ1x1MjAzMicsXG4gIFByaW1lOiAnXHUyMDMzJyxcbiAgb2xpbmU6ICdcdTIwM0UnLFxuICBmcmFzbDogJ1x1MjA0NCcsXG4gIHdlaWVycDogJ1x1MjExOCcsXG4gIGltYWdlOiAnXHUyMTExJyxcbiAgcmVhbDogJ1x1MjExQycsXG4gIHRyYWRlOiAnXHUyMTIyJyxcbiAgYWxlZnN5bTogJ1x1MjEzNScsXG4gIGxhcnI6ICdcdTIxOTAnLFxuICB1YXJyOiAnXHUyMTkxJyxcbiAgcmFycjogJ1x1MjE5MicsXG4gIGRhcnI6ICdcdTIxOTMnLFxuICBoYXJyOiAnXHUyMTk0JyxcbiAgY3JhcnI6ICdcdTIxQjUnLFxuICBsQXJyOiAnXHUyMUQwJyxcbiAgdUFycjogJ1x1MjFEMScsXG4gIHJBcnI6ICdcdTIxRDInLFxuICBkQXJyOiAnXHUyMUQzJyxcbiAgaEFycjogJ1x1MjFENCcsXG4gIGZvcmFsbDogJ1x1MjIwMCcsXG4gIHBhcnQ6ICdcdTIyMDInLFxuICBleGlzdDogJ1x1MjIwMycsXG4gIGVtcHR5OiAnXHUyMjA1JyxcbiAgbmFibGE6ICdcdTIyMDcnLFxuICBpc2luOiAnXHUyMjA4JyxcbiAgbm90aW46ICdcdTIyMDknLFxuICBuaTogJ1x1MjIwQicsXG4gIHByb2Q6ICdcdTIyMEYnLFxuICBzdW06ICdcdTIyMTEnLFxuICBtaW51czogJ1x1MjIxMicsXG4gIGxvd2FzdDogJ1x1MjIxNycsXG4gIHJhZGljOiAnXHUyMjFBJyxcbiAgcHJvcDogJ1x1MjIxRCcsXG4gIGluZmluOiAnXHUyMjFFJyxcbiAgYW5nOiAnXHUyMjIwJyxcbiAgYW5kOiAnXHUyMjI3JyxcbiAgb3I6ICdcdTIyMjgnLFxuICBjYXA6ICdcdTIyMjknLFxuICBjdXA6ICdcdTIyMkEnLFxuICBpbnQ6ICdcdTIyMkInLFxuICB0aGVyZTQ6ICdcdTIyMzQnLFxuICBzaW06ICdcdTIyM0MnLFxuICBjb25nOiAnXHUyMjQ1JyxcbiAgYXN5bXA6ICdcdTIyNDgnLFxuICBuZTogJ1x1MjI2MCcsXG4gIGVxdWl2OiAnXHUyMjYxJyxcbiAgbGU6ICdcdTIyNjQnLFxuICBnZTogJ1x1MjI2NScsXG4gIHN1YjogJ1x1MjI4MicsXG4gIHN1cDogJ1x1MjI4MycsXG4gIG5zdWI6ICdcdTIyODQnLFxuICBzdWJlOiAnXHUyMjg2JyxcbiAgc3VwZTogJ1x1MjI4NycsXG4gIG9wbHVzOiAnXHUyMjk1JyxcbiAgb3RpbWVzOiAnXHUyMjk3JyxcbiAgcGVycDogJ1x1MjJBNScsXG4gIHNkb3Q6ICdcdTIyQzUnLFxuICBsY2VpbDogJ1x1MjMwOCcsXG4gIHJjZWlsOiAnXHUyMzA5JyxcbiAgbGZsb29yOiAnXHUyMzBBJyxcbiAgcmZsb29yOiAnXHUyMzBCJyxcbiAgbGFuZzogJ1x1MjMyOScsXG4gIHJhbmc6ICdcdTIzMkEnLFxuICBsb3o6ICdcdTI1Q0EnLFxuICBzcGFkZXM6ICdcdTI2NjAnLFxuICBjbHViczogJ1x1MjY2MycsXG4gIGhlYXJ0czogJ1x1MjY2NScsXG4gIGRpYW1zOiAnXHUyNjY2JyxcbiAgcXVvdDogJ1wiJyxcbiAgYW1wOiAnJicsXG4gIGx0OiAnPCcsXG4gIGd0OiAnPicsXG4gIE9FbGlnOiAnXHUwMTUyJyxcbiAgb2VsaWc6ICdcdTAxNTMnLFxuICBTY2Fyb246ICdcdTAxNjAnLFxuICBzY2Fyb246ICdcdTAxNjEnLFxuICBZdW1sOiAnXHUwMTc4JyxcbiAgY2lyYzogJ1x1MDJDNicsXG4gIHRpbGRlOiAnXHUwMkRDJyxcbiAgZW5zcDogJ1x1MjAwMicsXG4gIGVtc3A6ICdcdTIwMDMnLFxuICB0aGluc3A6ICdcdTIwMDknLFxuICB6d25qOiAnXHUyMDBDJyxcbiAgendqOiAnXHUyMDBEJyxcbiAgbHJtOiAnXHUyMDBFJyxcbiAgcmxtOiAnXHUyMDBGJyxcbiAgbmRhc2g6ICdcdTIwMTMnLFxuICBtZGFzaDogJ1x1MjAxNCcsXG4gIGxzcXVvOiAnXHUyMDE4JyxcbiAgcnNxdW86ICdcdTIwMTknLFxuICBzYnF1bzogJ1x1MjAxQScsXG4gIGxkcXVvOiAnXHUyMDFDJyxcbiAgcmRxdW86ICdcdTIwMUQnLFxuICBiZHF1bzogJ1x1MjAxRScsXG4gIGRhZ2dlcjogJ1x1MjAyMCcsXG4gIERhZ2dlcjogJ1x1MjAyMScsXG4gIHBlcm1pbDogJ1x1MjAzMCcsXG4gIGxzYXF1bzogJ1x1MjAzOScsXG4gIHJzYXF1bzogJ1x1MjAzQScsXG4gIGV1cm86ICdcdTIwQUMnXG59XG4iLCAiLyoqXG4gKiBMaXN0IG9mIGxlZ2FjeSAodGhhdCBkb25cdTIwMTl0IG5lZWQgYSB0cmFpbGluZyBgO2ApIG5hbWVkIHJlZmVyZW5jZXMgd2hpY2ggY291bGQsXG4gKiBkZXBlbmRpbmcgb24gd2hhdCBmb2xsb3dzIHRoZW0sIHR1cm4gaW50byBhIGRpZmZlcmVudCBtZWFuaW5nXG4gKlxuICogQHR5cGUge0FycmF5PHN0cmluZz59XG4gKi9cbmV4cG9ydCBjb25zdCBkYW5nZXJvdXMgPSBbXG4gICdjZW50JyxcbiAgJ2NvcHknLFxuICAnZGl2aWRlJyxcbiAgJ2d0JyxcbiAgJ2x0JyxcbiAgJ25vdCcsXG4gICdwYXJhJyxcbiAgJ3RpbWVzJ1xuXVxuIiwgImltcG9ydCB7Y2hhcmFjdGVyRW50aXRpZXNMZWdhY3l9IGZyb20gJ2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3knXG5pbXBvcnQge2NoYXJhY3RlckVudGl0aWVzSHRtbDR9IGZyb20gJ2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNCdcbmltcG9ydCB7ZGFuZ2Vyb3VzfSBmcm9tICcuLi9jb25zdGFudC9kYW5nZXJvdXMuanMnXG5cbmNvbnN0IG93biA9IHt9Lmhhc093blByb3BlcnR5XG5cbi8qKlxuICogYGNoYXJhY3RlckVudGl0aWVzSHRtbDRgIGJ1dCBpbnZlcnRlZC5cbiAqXG4gKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuY29uc3QgY2hhcmFjdGVycyA9IHt9XG5cbi8qKiBAdHlwZSB7c3RyaW5nfSAqL1xubGV0IGtleVxuXG5mb3IgKGtleSBpbiBjaGFyYWN0ZXJFbnRpdGllc0h0bWw0KSB7XG4gIGlmIChvd24uY2FsbChjaGFyYWN0ZXJFbnRpdGllc0h0bWw0LCBrZXkpKSB7XG4gICAgY2hhcmFjdGVyc1tjaGFyYWN0ZXJFbnRpdGllc0h0bWw0W2tleV1dID0ga2V5XG4gIH1cbn1cblxuLyoqXG4gKiBDb25maWd1cmFibGUgd2F5cyB0byBlbmNvZGUgY2hhcmFjdGVycyBhcyBuYW1lZCByZWZlcmVuY2VzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcGFyYW0ge251bWJlcn0gbmV4dFxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gb21pdFxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gYXR0cmlidXRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9OYW1lZChjb2RlLCBuZXh0LCBvbWl0LCBhdHRyaWJ1dGUpIHtcbiAgY29uc3QgY2hhcmFjdGVyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKVxuXG4gIGlmIChvd24uY2FsbChjaGFyYWN0ZXJzLCBjaGFyYWN0ZXIpKSB7XG4gICAgY29uc3QgbmFtZSA9IGNoYXJhY3RlcnNbY2hhcmFjdGVyXVxuICAgIGNvbnN0IHZhbHVlID0gJyYnICsgbmFtZVxuXG4gICAgaWYgKFxuICAgICAgb21pdCAmJlxuICAgICAgY2hhcmFjdGVyRW50aXRpZXNMZWdhY3kuaW5jbHVkZXMobmFtZSkgJiZcbiAgICAgICFkYW5nZXJvdXMuaW5jbHVkZXMobmFtZSkgJiZcbiAgICAgICghYXR0cmlidXRlIHx8XG4gICAgICAgIChuZXh0ICYmXG4gICAgICAgICAgbmV4dCAhPT0gNjEgLyogYD1gICovICYmXG4gICAgICAgICAgL1teXFxkYS16XS9pLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShuZXh0KSkpKVxuICAgICkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlICsgJzsnXG4gIH1cblxuICByZXR1cm4gJydcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIEZvcm1hdFNtYXJ0T3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFufSBbdXNlTmFtZWRSZWZlcmVuY2VzPWZhbHNlXVxuICogICBQcmVmZXIgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgKGAmYW1wO2ApIHdoZXJlIHBvc3NpYmxlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbdXNlU2hvcnRlc3RSZWZlcmVuY2VzPWZhbHNlXVxuICogICBQcmVmZXIgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIHJlZmVyZW5jZSwgaWYgdGhhdCByZXN1bHRzIGluIGxlc3MgYnl0ZXMuXG4gKiAgICoqTm90ZSoqOiBgdXNlTmFtZWRSZWZlcmVuY2VzYCBjYW4gYmUgb21pdHRlZCB3aGVuIHVzaW5nIGB1c2VTaG9ydGVzdFJlZmVyZW5jZXNgLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbb21pdE9wdGlvbmFsU2VtaWNvbG9ucz1mYWxzZV1cbiAqICAgV2hldGhlciB0byBvbWl0IHNlbWljb2xvbnMgd2hlbiBwb3NzaWJsZS5cbiAqICAgKipOb3RlKio6IFRoaXMgY3JlYXRlcyB3aGF0IEhUTUwgY2FsbHMgXHUyMDFDcGFyc2UgZXJyb3JzXHUyMDFEIGJ1dCBpcyBvdGhlcndpc2Ugc3RpbGwgdmFsaWQgSFRNTCBcdTIwMTQgZG9uXHUyMDE5dCB1c2UgdGhpcyBleGNlcHQgd2hlbiBidWlsZGluZyBhIG1pbmlmaWVyLlxuICogICBPbWl0dGluZyBzZW1pY29sb25zIGlzIHBvc3NpYmxlIGZvciBjZXJ0YWluIG5hbWVkIGFuZCBudW1lcmljIHJlZmVyZW5jZXMgaW4gc29tZSBjYXNlcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2F0dHJpYnV0ZT1mYWxzZV1cbiAqICAgQ3JlYXRlIGNoYXJhY3RlciByZWZlcmVuY2VzIHdoaWNoIGRvblx1MjAxOXQgZmFpbCBpbiBhdHRyaWJ1dGVzLlxuICogICAqKk5vdGUqKjogYGF0dHJpYnV0ZWAgb25seSBhcHBsaWVzIHdoZW4gb3BlcmF0aW5nIGRhbmdlcm91c2x5IHdpdGhcbiAqICAgYG9taXRPcHRpb25hbFNlbWljb2xvbnM6IHRydWVgLlxuICovXG5cbmltcG9ydCB7dG9IZXhhZGVjaW1hbH0gZnJvbSAnLi90by1oZXhhZGVjaW1hbC5qcydcbmltcG9ydCB7dG9EZWNpbWFsfSBmcm9tICcuL3RvLWRlY2ltYWwuanMnXG5pbXBvcnQge3RvTmFtZWR9IGZyb20gJy4vdG8tbmFtZWQuanMnXG5cbi8qKlxuICogQ29uZmlndXJhYmxlIHdheXMgdG8gZW5jb2RlIGEgY2hhcmFjdGVyIHlpZWxkaW5nIHByZXR0eSBvciBzbWFsbCByZXN1bHRzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKiBAcGFyYW0ge251bWJlcn0gbmV4dFxuICogQHBhcmFtIHtGb3JtYXRTbWFydE9wdGlvbnN9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTbWFydChjb2RlLCBuZXh0LCBvcHRpb25zKSB7XG4gIGxldCBudW1lcmljID0gdG9IZXhhZGVjaW1hbChjb2RlLCBuZXh0LCBvcHRpb25zLm9taXRPcHRpb25hbFNlbWljb2xvbnMpXG4gIC8qKiBAdHlwZSB7c3RyaW5nfHVuZGVmaW5lZH0gKi9cbiAgbGV0IG5hbWVkXG5cbiAgaWYgKG9wdGlvbnMudXNlTmFtZWRSZWZlcmVuY2VzIHx8IG9wdGlvbnMudXNlU2hvcnRlc3RSZWZlcmVuY2VzKSB7XG4gICAgbmFtZWQgPSB0b05hbWVkKFxuICAgICAgY29kZSxcbiAgICAgIG5leHQsXG4gICAgICBvcHRpb25zLm9taXRPcHRpb25hbFNlbWljb2xvbnMsXG4gICAgICBvcHRpb25zLmF0dHJpYnV0ZVxuICAgIClcbiAgfVxuXG4gIC8vIFVzZSB0aGUgc2hvcnRlc3QgbnVtZXJpYyByZWZlcmVuY2Ugd2hlbiByZXF1ZXN0ZWQuXG4gIC8vIEEgc2ltcGxlIGFsZ29yaXRobSB3b3VsZCB1c2UgZGVjaW1hbCBmb3IgYWxsIGNvZGUgcG9pbnRzIHVuZGVyIDEwMCwgYXNcbiAgLy8gdGhvc2UgYXJlIHNob3J0ZXIgdGhhbiBoZXhhZGVjaW1hbDpcbiAgLy9cbiAgLy8gKiBgJiM5OTtgIHZzIGAmI3g2MztgIChkZWNpbWFsIHNob3J0ZXIpXG4gIC8vICogYCYjMTAwO2AgdnMgYCYjeDY0O2AgKGVxdWFsKVxuICAvL1xuICAvLyBIb3dldmVyLCBiZWNhdXNlIHdlIHRha2UgYG5leHRgIGludG8gY29uc2lkZXJhdGlvbiB3aGVuIGBvbWl0YCBpcyB1c2VkLFxuICAvLyBBbmQgaXQgd291bGQgYmUgcG9zc2libGUgdGhhdCBkZWNpbWFscyBhcmUgc2hvcnRlciBvbiBiaWdnZXIgdmFsdWVzIGFzXG4gIC8vIHdlbGwgaWYgYG5leHRgIGlzIGhleGFkZWNpbWFsIGJ1dCBub3QgZGVjaW1hbCwgd2UgaW5zdGVhZCBjb21wYXJlIGJvdGguXG4gIGlmIChcbiAgICAob3B0aW9ucy51c2VTaG9ydGVzdFJlZmVyZW5jZXMgfHwgIW5hbWVkKSAmJlxuICAgIG9wdGlvbnMudXNlU2hvcnRlc3RSZWZlcmVuY2VzXG4gICkge1xuICAgIGNvbnN0IGRlY2ltYWwgPSB0b0RlY2ltYWwoY29kZSwgbmV4dCwgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zKVxuXG4gICAgaWYgKGRlY2ltYWwubGVuZ3RoIDwgbnVtZXJpYy5sZW5ndGgpIHtcbiAgICAgIG51bWVyaWMgPSBkZWNpbWFsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5hbWVkICYmXG4gICAgKCFvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcyB8fCBuYW1lZC5sZW5ndGggPCBudW1lcmljLmxlbmd0aClcbiAgICA/IG5hbWVkXG4gICAgOiBudW1lcmljXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2NvcmUuanMnKS5Db3JlT3B0aW9ucyAmIGltcG9ydCgnLi91dGlsL2Zvcm1hdC1zbWFydC5qcycpLkZvcm1hdFNtYXJ0T3B0aW9uc30gT3B0aW9uc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi9jb3JlLmpzJykuQ29yZU9wdGlvbnN9IExpZ2h0T3B0aW9uc1xuICovXG5cbmltcG9ydCB7Y29yZX0gZnJvbSAnLi9jb3JlLmpzJ1xuaW1wb3J0IHtmb3JtYXRTbWFydH0gZnJvbSAnLi91dGlsL2Zvcm1hdC1zbWFydC5qcydcbmltcG9ydCB7Zm9ybWF0QmFzaWN9IGZyb20gJy4vdXRpbC9mb3JtYXQtYmFzaWMuanMnXG5cbi8qKlxuICogRW5jb2RlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBgdmFsdWVgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBWYWx1ZSB0byBlbmNvZGUuXG4gKiBAcGFyYW0ge09wdGlvbnN9IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUVudGl0aWVzKHZhbHVlLCBvcHRpb25zKSB7XG4gIHJldHVybiBjb3JlKHZhbHVlLCBPYmplY3QuYXNzaWduKHtmb3JtYXQ6IGZvcm1hdFNtYXJ0fSwgb3B0aW9ucykpXG59XG5cbi8qKlxuICogRW5jb2RlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBgdmFsdWVgIGFzIGhleGFkZWNpbWFscy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqICAgVmFsdWUgdG8gZW5jb2RlLlxuICogQHBhcmFtIHtMaWdodE9wdGlvbnN9IFtvcHRpb25zXVxuICogICBDb25maWd1cmF0aW9uLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgRW5jb2RlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUVudGl0aWVzTGlnaHQodmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGNvcmUodmFsdWUsIE9iamVjdC5hc3NpZ24oe2Zvcm1hdDogZm9ybWF0QmFzaWN9LCBvcHRpb25zKSlcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5Db21tZW50fSBDb21tZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUGFyZW50c30gUGFyZW50c1xuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2luZGV4LmpzJykuU3RhdGV9IFN0YXRlXG4gKi9cblxuaW1wb3J0IHtzdHJpbmdpZnlFbnRpdGllc30gZnJvbSAnc3RyaW5naWZ5LWVudGl0aWVzJ1xuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIGNvbW1lbnQuXG4gKlxuICogQHBhcmFtIHtDb21tZW50fSBub2RlXG4gKiAgIE5vZGUgdG8gaGFuZGxlLlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IF8xXG4gKiAgIEluZGV4IG9mIGBub2RlYCBpbiBgcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBfMlxuICogICBQYXJlbnQgb2YgYG5vZGVgLlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU2VyaWFsaXplZCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudChub2RlLCBfMSwgXzIsIHN0YXRlKSB7XG4gIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2NvbW1lbnRzPlxuICByZXR1cm4gc3RhdGUuc2V0dGluZ3MuYm9ndXNDb21tZW50c1xuICAgID8gJzw/JyArXG4gICAgICAgIHN0cmluZ2lmeUVudGl0aWVzKFxuICAgICAgICAgIG5vZGUudmFsdWUsXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywge3N1YnNldDogWyc+J119KVxuICAgICAgICApICtcbiAgICAgICAgJz4nXG4gICAgOiAnPCEtLScgKyBub2RlLnZhbHVlLnJlcGxhY2UoL14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZywgZW5jb2RlKSArICctLT4nXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSAkMFxuICAgKi9cbiAgZnVuY3Rpb24gZW5jb2RlKCQwKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeUVudGl0aWVzKFxuICAgICAgJDAsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7XG4gICAgICAgIHN1YnNldDogWyc8JywgJz4nXVxuICAgICAgfSlcbiAgICApXG4gIH1cbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5Eb2N0eXBlfSBEb2N0eXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUGFyZW50c30gUGFyZW50c1xuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2luZGV4LmpzJykuU3RhdGV9IFN0YXRlXG4gKi9cblxuLy8gTWFrZSBWUyBjb2RlIHNlZSByZWZlcmVuY2VzIHRvIHRoZSBhYm92ZSB0eXBlcy5cbicnXG5cbi8qKlxuICogU2VyaWFsaXplIGEgZG9jdHlwZS5cbiAqXG4gKiBAcGFyYW0ge0RvY3R5cGV9IF8xXG4gKiAgIE5vZGUgdG8gaGFuZGxlLlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IF8yXG4gKiAgIEluZGV4IG9mIGBub2RlYCBpbiBgcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBfM1xuICogICBQYXJlbnQgb2YgYG5vZGVgLlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU2VyaWFsaXplZCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZG9jdHlwZShfMSwgXzIsIF8zLCBzdGF0ZSkge1xuICByZXR1cm4gKFxuICAgICc8IScgK1xuICAgIChzdGF0ZS5zZXR0aW5ncy51cHBlckRvY3R5cGUgPyAnRE9DVFlQRScgOiAnZG9jdHlwZScpICtcbiAgICAoc3RhdGUuc2V0dGluZ3MudGlnaHREb2N0eXBlID8gJycgOiAnICcpICtcbiAgICAnaHRtbD4nXG4gIClcbn1cbiIsICIvKipcbiAqIENvdW50IGhvdyBvZnRlbiBhIGNoYXJhY3RlciAob3Igc3Vic3RyaW5nKSBpcyB1c2VkIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogICBWYWx1ZSB0byBzZWFyY2ggaW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyXG4gKiAgIENoYXJhY3RlciAob3Igc3Vic3RyaW5nKSB0byBsb29rIGZvci5cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqICAgTnVtYmVyIG9mIHRpbWVzIGBjaGFyYWN0ZXJgIG9jY3VycmVkIGluIGB2YWx1ZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjY291bnQodmFsdWUsIGNoYXJhY3Rlcikge1xuICBjb25zdCBzb3VyY2UgPSBTdHJpbmcodmFsdWUpXG5cbiAgaWYgKHR5cGVvZiBjaGFyYWN0ZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgY2hhcmFjdGVyJylcbiAgfVxuXG4gIGxldCBjb3VudCA9IDBcbiAgbGV0IGluZGV4ID0gc291cmNlLmluZGV4T2YoY2hhcmFjdGVyKVxuXG4gIHdoaWxlIChpbmRleCAhPT0gLTEpIHtcbiAgICBjb3VudCsrXG4gICAgaW5kZXggPSBzb3VyY2UuaW5kZXhPZihjaGFyYWN0ZXIsIGluZGV4ICsgY2hhcmFjdGVyLmxlbmd0aClcbiAgfVxuXG4gIHJldHVybiBjb3VudFxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdCcpLk5vZGVzfSBOb2Rlc1xuICovXG5cbi8vIEhUTUwgd2hpdGVzcGFjZSBleHByZXNzaW9uLlxuLy8gU2VlIDxodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktd2hpdGVzcGFjZT4uXG5jb25zdCByZSA9IC9bIFxcdFxcblxcZlxccl0vZ1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyAqaW50ZXItZWxlbWVudCB3aGl0ZXNwYWNlKi5cbiAqXG4gKiBAcGFyYW0ge05vZGVzIHwgc3RyaW5nfSB0aGluZ1xuICogICBUaGluZyB0byBjaGVjayAoYE5vZGVgIG9yIGBzdHJpbmdgKS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBgdmFsdWVgIGlzIGludGVyLWVsZW1lbnQgd2hpdGVzcGFjZSAoYGJvb2xlYW5gKTogY29uc2lzdGluZyBvZlxuICogICB6ZXJvIG9yIG1vcmUgb2Ygc3BhY2UsIHRhYiAoYFxcdGApLCBsaW5lIGZlZWQgKGBcXG5gKSwgY2FycmlhZ2UgcmV0dXJuXG4gKiAgIChgXFxyYCksIG9yIGZvcm0gZmVlZCAoYFxcZmApOyBpZiBhIG5vZGUgaXMgcGFzc2VkIGl0IG11c3QgYmUgYSBgVGV4dGAgbm9kZSxcbiAqICAgd2hvc2UgYHZhbHVlYCBmaWVsZCBpcyBjaGVja2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSh0aGluZykge1xuICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSAnb2JqZWN0J1xuICAgID8gdGhpbmcudHlwZSA9PT0gJ3RleHQnXG4gICAgICA/IGVtcHR5KHRoaW5nLnZhbHVlKVxuICAgICAgOiBmYWxzZVxuICAgIDogZW1wdHkodGhpbmcpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZW1wdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UocmUsICcnKSA9PT0gJydcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5QYXJlbnRzfSBQYXJlbnRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUm9vdENvbnRlbnR9IFJvb3RDb250ZW50XG4gKi9cblxuaW1wb3J0IHt3aGl0ZXNwYWNlfSBmcm9tICdoYXN0LXV0aWwtd2hpdGVzcGFjZSdcblxuZXhwb3J0IGNvbnN0IHNpYmxpbmdBZnRlciA9IHNpYmxpbmdzKDEpXG5leHBvcnQgY29uc3Qgc2libGluZ0JlZm9yZSA9IHNpYmxpbmdzKC0xKVxuXG4vKiogQHR5cGUge0FycmF5PFJvb3RDb250ZW50Pn0gKi9cbmNvbnN0IGVtcHR5Q2hpbGRyZW4gPSBbXVxuXG4vKipcbiAqIEZhY3RvcnkgdG8gY2hlY2sgc2libGluZ3MgaW4gYSBkaXJlY3Rpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGluY3JlbWVudFxuICovXG5mdW5jdGlvbiBzaWJsaW5ncyhpbmNyZW1lbnQpIHtcbiAgcmV0dXJuIHNpYmxpbmdcblxuICAvKipcbiAgICogRmluZCBhcHBsaWNhYmxlIHNpYmxpbmdzIGluIGEgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBAdGVtcGxhdGUge1BhcmVudHN9IFBhcmVudFxuICAgKiAgIFBhcmVudCB0eXBlLlxuICAgKiBAcGFyYW0ge1BhcmVudCB8IHVuZGVmaW5lZH0gcGFyZW50XG4gICAqICAgUGFyZW50LlxuICAgKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAgICogICBJbmRleCBvZiBjaGlsZCBpbiBgcGFyZW50YC5cbiAgICogQHBhcmFtIHtib29sZWFuIHwgdW5kZWZpbmVkfSBbaW5jbHVkZVdoaXRlc3BhY2U9ZmFsc2VdXG4gICAqICAgV2hldGhlciB0byBpbmNsdWRlIHdoaXRlc3BhY2UgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICAgKiBAcmV0dXJucyB7UGFyZW50IGV4dGVuZHMge2NoaWxkcmVuOiBBcnJheTxpbmZlciBDaGlsZD59ID8gQ2hpbGQgfCB1bmRlZmluZWQgOiBuZXZlcn1cbiAgICogICBDaGlsZCBvZiBwYXJlbnQuXG4gICAqL1xuICBmdW5jdGlvbiBzaWJsaW5nKHBhcmVudCwgaW5kZXgsIGluY2x1ZGVXaGl0ZXNwYWNlKSB7XG4gICAgY29uc3Qgc2libGluZ3MgPSBwYXJlbnQgPyBwYXJlbnQuY2hpbGRyZW4gOiBlbXB0eUNoaWxkcmVuXG4gICAgbGV0IG9mZnNldCA9IChpbmRleCB8fCAwKSArIGluY3JlbWVudFxuICAgIGxldCBuZXh0ID0gc2libGluZ3Nbb2Zmc2V0XVxuXG4gICAgaWYgKCFpbmNsdWRlV2hpdGVzcGFjZSkge1xuICAgICAgd2hpbGUgKG5leHQgJiYgd2hpdGVzcGFjZShuZXh0KSkge1xuICAgICAgICBvZmZzZXQgKz0gaW5jcmVtZW50XG4gICAgICAgIG5leHQgPSBzaWJsaW5nc1tvZmZzZXRdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogaXRcdTIwMTlzIGEgY29ycmVjdCBjaGlsZC5cbiAgICByZXR1cm4gbmV4dFxuICB9XG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuRWxlbWVudH0gRWxlbWVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdCcpLlBhcmVudHN9IFBhcmVudHNcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBPbWl0SGFuZGxlXG4gKiAgIENoZWNrIGlmIGEgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiAgIEVsZW1lbnQgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgZWxlbWVudCBpbiBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRvIG9taXQgYSB0YWcuXG4gKlxuICovXG5cbmNvbnN0IG93biA9IHt9Lmhhc093blByb3BlcnR5XG5cbi8qKlxuICogRmFjdG9yeSB0byBjaGVjayBpZiBhIGdpdmVuIG5vZGUgY2FuIGhhdmUgYSB0YWcgb21pdHRlZC5cbiAqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIE9taXRIYW5kbGU+fSBoYW5kbGVyc1xuICogICBPbWlzc2lvbiBoYW5kbGVycywgd2hlcmUgZWFjaCBrZXkgaXMgYSB0YWcgbmFtZSwgYW5kIGVhY2ggdmFsdWUgaXMgdGhlXG4gKiAgIGNvcnJlc3BvbmRpbmcgaGFuZGxlci5cbiAqIEByZXR1cm5zIHtPbWl0SGFuZGxlfVxuICogICBXaGV0aGVyIHRvIG9taXQgYSB0YWcgb2YgYW4gZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9taXNzaW9uKGhhbmRsZXJzKSB7XG4gIHJldHVybiBvbWl0XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgZ2l2ZW4gbm9kZSBjYW4gaGF2ZSBhIHRhZyBvbWl0dGVkLlxuICAgKlxuICAgKiBAdHlwZSB7T21pdEhhbmRsZX1cbiAgICovXG4gIGZ1bmN0aW9uIG9taXQobm9kZSwgaW5kZXgsIHBhcmVudCkge1xuICAgIHJldHVybiAoXG4gICAgICBvd24uY2FsbChoYW5kbGVycywgbm9kZS50YWdOYW1lKSAmJlxuICAgICAgaGFuZGxlcnNbbm9kZS50YWdOYW1lXShub2RlLCBpbmRleCwgcGFyZW50KVxuICAgIClcbiAgfVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdCcpLkVsZW1lbnR9IEVsZW1lbnRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5QYXJlbnRzfSBQYXJlbnRzXG4gKi9cblxuaW1wb3J0IHt3aGl0ZXNwYWNlfSBmcm9tICdoYXN0LXV0aWwtd2hpdGVzcGFjZSdcbmltcG9ydCB7c2libGluZ0FmdGVyfSBmcm9tICcuL3V0aWwvc2libGluZ3MuanMnXG5pbXBvcnQge29taXNzaW9ufSBmcm9tICcuL29taXNzaW9uLmpzJ1xuXG5leHBvcnQgY29uc3QgY2xvc2luZyA9IG9taXNzaW9uKHtcbiAgYm9keSxcbiAgY2FwdGlvbjogaGVhZE9yQ29sZ3JvdXBPckNhcHRpb24sXG4gIGNvbGdyb3VwOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbixcbiAgZGQsXG4gIGR0LFxuICBoZWFkOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbixcbiAgaHRtbCxcbiAgbGksXG4gIG9wdGdyb3VwLFxuICBvcHRpb24sXG4gIHAsXG4gIHJwOiBydWJ5RWxlbWVudCxcbiAgcnQ6IHJ1YnlFbGVtZW50LFxuICB0Ym9keSxcbiAgdGQ6IGNlbGxzLFxuICB0Zm9vdCxcbiAgdGg6IGNlbGxzLFxuICB0aGVhZCxcbiAgdHJcbn0pXG5cbi8qKlxuICogTWFjcm8gZm9yIGA8L2hlYWQ+YCwgYDwvY29sZ3JvdXA+YCwgYW5kIGA8L2NhcHRpb24+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IF9cbiAqICAgRWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBlbGVtZW50IGluIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGNsb3NpbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbihfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleCwgdHJ1ZSlcbiAgcmV0dXJuIChcbiAgICAhbmV4dCB8fFxuICAgIChuZXh0LnR5cGUgIT09ICdjb21tZW50JyAmJlxuICAgICAgIShuZXh0LnR5cGUgPT09ICd0ZXh0JyAmJiB3aGl0ZXNwYWNlKG5leHQudmFsdWUuY2hhckF0KDApKSkpXG4gIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvaHRtbD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIGh0bWwoXywgaW5kZXgsIHBhcmVudCkge1xuICBjb25zdCBuZXh0ID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgpXG4gIHJldHVybiAhbmV4dCB8fCBuZXh0LnR5cGUgIT09ICdjb21tZW50J1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPC9ib2R5PmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBfXG4gKiAgIEVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgZWxlbWVudCBpbiBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBjbG9zaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gYm9keShfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleClcbiAgcmV0dXJuICFuZXh0IHx8IG5leHQudHlwZSAhPT0gJ2NvbW1lbnQnXG59XG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8L3A+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IF9cbiAqICAgRWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBlbGVtZW50IGluIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGNsb3NpbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBwKF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gbmV4dFxuICAgID8gbmV4dC50eXBlID09PSAnZWxlbWVudCcgJiZcbiAgICAgICAgKG5leHQudGFnTmFtZSA9PT0gJ2FkZHJlc3MnIHx8XG4gICAgICAgICAgbmV4dC50YWdOYW1lID09PSAnYXJ0aWNsZScgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdhc2lkZScgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdibG9ja3F1b3RlJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2RldGFpbHMnIHx8XG4gICAgICAgICAgbmV4dC50YWdOYW1lID09PSAnZGl2JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2RsJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2ZpZWxkc2V0JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2ZpZ2NhcHRpb24nIHx8XG4gICAgICAgICAgbmV4dC50YWdOYW1lID09PSAnZmlndXJlJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2Zvb3RlcicgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdmb3JtJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2gxJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2gyJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2gzJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2g0JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2g1JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2g2JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ2hlYWRlcicgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdoZ3JvdXAnIHx8XG4gICAgICAgICAgbmV4dC50YWdOYW1lID09PSAnaHInIHx8XG4gICAgICAgICAgbmV4dC50YWdOYW1lID09PSAnbWFpbicgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdtZW51JyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ25hdicgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdvbCcgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdwJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ3ByZScgfHxcbiAgICAgICAgICBuZXh0LnRhZ05hbWUgPT09ICdzZWN0aW9uJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ3RhYmxlJyB8fFxuICAgICAgICAgIG5leHQudGFnTmFtZSA9PT0gJ3VsJylcbiAgICA6ICFwYXJlbnQgfHxcbiAgICAgICAgLy8gQ29uZnVzaW5nIHBhcmVudC5cbiAgICAgICAgIShcbiAgICAgICAgICBwYXJlbnQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAgICAgKHBhcmVudC50YWdOYW1lID09PSAnYScgfHxcbiAgICAgICAgICAgIHBhcmVudC50YWdOYW1lID09PSAnYXVkaW8nIHx8XG4gICAgICAgICAgICBwYXJlbnQudGFnTmFtZSA9PT0gJ2RlbCcgfHxcbiAgICAgICAgICAgIHBhcmVudC50YWdOYW1lID09PSAnaW5zJyB8fFxuICAgICAgICAgICAgcGFyZW50LnRhZ05hbWUgPT09ICdtYXAnIHx8XG4gICAgICAgICAgICBwYXJlbnQudGFnTmFtZSA9PT0gJ25vc2NyaXB0JyB8fFxuICAgICAgICAgICAgcGFyZW50LnRhZ05hbWUgPT09ICd2aWRlbycpXG4gICAgICAgIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvbGk+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IF9cbiAqICAgRWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBlbGVtZW50IGluIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGNsb3NpbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBsaShfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleClcbiAgcmV0dXJuICFuZXh0IHx8IChuZXh0LnR5cGUgPT09ICdlbGVtZW50JyAmJiBuZXh0LnRhZ05hbWUgPT09ICdsaScpXG59XG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8L2R0PmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBfXG4gKiAgIEVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgZWxlbWVudCBpbiBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBjbG9zaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gZHQoXywgaW5kZXgsIHBhcmVudCkge1xuICBjb25zdCBuZXh0ID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgpXG4gIHJldHVybiBCb29sZWFuKFxuICAgIG5leHQgJiZcbiAgICAgIG5leHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAobmV4dC50YWdOYW1lID09PSAnZHQnIHx8IG5leHQudGFnTmFtZSA9PT0gJ2RkJylcbiAgKVxufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPC9kZD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIGRkKF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gKFxuICAgICFuZXh0IHx8XG4gICAgKG5leHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAobmV4dC50YWdOYW1lID09PSAnZHQnIHx8IG5leHQudGFnTmFtZSA9PT0gJ2RkJykpXG4gIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvcnQ+YCBvciBgPC9ycD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIHJ1YnlFbGVtZW50KF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gKFxuICAgICFuZXh0IHx8XG4gICAgKG5leHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAobmV4dC50YWdOYW1lID09PSAncnAnIHx8IG5leHQudGFnTmFtZSA9PT0gJ3J0JykpXG4gIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvb3B0Z3JvdXA+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IF9cbiAqICAgRWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBlbGVtZW50IGluIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGNsb3NpbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBvcHRncm91cChfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleClcbiAgcmV0dXJuICFuZXh0IHx8IChuZXh0LnR5cGUgPT09ICdlbGVtZW50JyAmJiBuZXh0LnRhZ05hbWUgPT09ICdvcHRncm91cCcpXG59XG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8L29wdGlvbj5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIG9wdGlvbihfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleClcbiAgcmV0dXJuIChcbiAgICAhbmV4dCB8fFxuICAgIChuZXh0LnR5cGUgPT09ICdlbGVtZW50JyAmJlxuICAgICAgKG5leHQudGFnTmFtZSA9PT0gJ29wdGlvbicgfHwgbmV4dC50YWdOYW1lID09PSAnb3B0Z3JvdXAnKSlcbiAgKVxufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPC90aGVhZD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRoZWFkKF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gQm9vbGVhbihcbiAgICBuZXh0ICYmXG4gICAgICBuZXh0LnR5cGUgPT09ICdlbGVtZW50JyAmJlxuICAgICAgKG5leHQudGFnTmFtZSA9PT0gJ3Rib2R5JyB8fCBuZXh0LnRhZ05hbWUgPT09ICd0Zm9vdCcpXG4gIClcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvdGJvZHk+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IF9cbiAqICAgRWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBlbGVtZW50IGluIHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIGNsb3NpbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiB0Ym9keShfLCBpbmRleCwgcGFyZW50KSB7XG4gIGNvbnN0IG5leHQgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleClcbiAgcmV0dXJuIChcbiAgICAhbmV4dCB8fFxuICAgIChuZXh0LnR5cGUgPT09ICdlbGVtZW50JyAmJlxuICAgICAgKG5leHQudGFnTmFtZSA9PT0gJ3Rib2R5JyB8fCBuZXh0LnRhZ05hbWUgPT09ICd0Zm9vdCcpKVxuICApXG59XG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8L3Rmb290PmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBfXG4gKiAgIEVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgZWxlbWVudCBpbiBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBjbG9zaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gdGZvb3QoXywgaW5kZXgsIHBhcmVudCkge1xuICByZXR1cm4gIXNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPC90cj5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRyKF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gIW5leHQgfHwgKG5leHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmIG5leHQudGFnTmFtZSA9PT0gJ3RyJylcbn1cblxuLyoqXG4gKiBXaGV0aGVyIHRvIG9taXQgYDwvdGQ+YCBvciBgPC90aD5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gX1xuICogICBFbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IGluZGV4XG4gKiAgIEluZGV4IG9mIGVsZW1lbnQgaW4gcGFyZW50LlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IG9mIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqICAgV2hldGhlciB0aGUgY2xvc2luZyB0YWcgY2FuIGJlIG9taXR0ZWQuXG4gKi9cbmZ1bmN0aW9uIGNlbGxzKF8sIGluZGV4LCBwYXJlbnQpIHtcbiAgY29uc3QgbmV4dCA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4KVxuICByZXR1cm4gKFxuICAgICFuZXh0IHx8XG4gICAgKG5leHQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgICAobmV4dC50YWdOYW1lID09PSAndGQnIHx8IG5leHQudGFnTmFtZSA9PT0gJ3RoJykpXG4gIClcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5FbGVtZW50fSBFbGVtZW50XG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUGFyZW50c30gUGFyZW50c1xuICovXG5cbmltcG9ydCB7d2hpdGVzcGFjZX0gZnJvbSAnaGFzdC11dGlsLXdoaXRlc3BhY2UnXG5pbXBvcnQge3NpYmxpbmdBZnRlciwgc2libGluZ0JlZm9yZX0gZnJvbSAnLi91dGlsL3NpYmxpbmdzLmpzJ1xuaW1wb3J0IHtjbG9zaW5nfSBmcm9tICcuL2Nsb3NpbmcuanMnXG5pbXBvcnQge29taXNzaW9ufSBmcm9tICcuL29taXNzaW9uLmpzJ1xuXG5leHBvcnQgY29uc3Qgb3BlbmluZyA9IG9taXNzaW9uKHtcbiAgYm9keSxcbiAgY29sZ3JvdXAsXG4gIGhlYWQsXG4gIGh0bWwsXG4gIHRib2R5XG59KVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPGh0bWw+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqICAgRWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBvcGVuaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gaHRtbChub2RlKSB7XG4gIGNvbnN0IGhlYWQgPSBzaWJsaW5nQWZ0ZXIobm9kZSwgLTEpXG4gIHJldHVybiAhaGVhZCB8fCBoZWFkLnR5cGUgIT09ICdjb21tZW50J1xufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPGhlYWQ+YC5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqICAgRWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBvcGVuaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gaGVhZChub2RlKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlblxuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IHNlZW4gPSBbXVxuICBsZXQgaW5kZXggPSAtMVxuXG4gIHdoaWxlICgrK2luZGV4IDwgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlbltpbmRleF1cbiAgICBpZiAoXG4gICAgICBjaGlsZC50eXBlID09PSAnZWxlbWVudCcgJiZcbiAgICAgIChjaGlsZC50YWdOYW1lID09PSAndGl0bGUnIHx8IGNoaWxkLnRhZ05hbWUgPT09ICdiYXNlJylcbiAgICApIHtcbiAgICAgIGlmIChzZWVuLmluY2x1ZGVzKGNoaWxkLnRhZ05hbWUpKSByZXR1cm4gZmFsc2VcbiAgICAgIHNlZW4ucHVzaChjaGlsZC50YWdOYW1lKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbi5sZW5ndGggPiAwXG59XG5cbi8qKlxuICogV2hldGhlciB0byBvbWl0IGA8Ym9keT5gLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gbm9kZVxuICogICBFbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKiAgIFdoZXRoZXIgdGhlIG9wZW5pbmcgdGFnIGNhbiBiZSBvbWl0dGVkLlxuICovXG5mdW5jdGlvbiBib2R5KG5vZGUpIHtcbiAgY29uc3QgaGVhZCA9IHNpYmxpbmdBZnRlcihub2RlLCAtMSwgdHJ1ZSlcblxuICByZXR1cm4gKFxuICAgICFoZWFkIHx8XG4gICAgKGhlYWQudHlwZSAhPT0gJ2NvbW1lbnQnICYmXG4gICAgICAhKGhlYWQudHlwZSA9PT0gJ3RleHQnICYmIHdoaXRlc3BhY2UoaGVhZC52YWx1ZS5jaGFyQXQoMCkpKSAmJlxuICAgICAgIShcbiAgICAgICAgaGVhZC50eXBlID09PSAnZWxlbWVudCcgJiZcbiAgICAgICAgKGhlYWQudGFnTmFtZSA9PT0gJ21ldGEnIHx8XG4gICAgICAgICAgaGVhZC50YWdOYW1lID09PSAnbGluaycgfHxcbiAgICAgICAgICBoZWFkLnRhZ05hbWUgPT09ICdzY3JpcHQnIHx8XG4gICAgICAgICAgaGVhZC50YWdOYW1lID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaGVhZC50YWdOYW1lID09PSAndGVtcGxhdGUnKVxuICAgICAgKSlcbiAgKVxufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPGNvbGdyb3VwPmAuXG4gKiBUaGUgc3BlYyBkZXNjcmliZXMgc29tZSBsb2dpYyBmb3IgdGhlIG9wZW5pbmcgdGFnLCBidXQgaXRcdTIwMTlzIGVhc2llciB0b1xuICogaW1wbGVtZW50IGluIHRoZSBjbG9zaW5nIHRhZywgdG8gdGhlIHNhbWUgZWZmZWN0LCBzbyB3ZSBoYW5kbGUgaXQgdGhlcmVcbiAqIGluc3RlYWQuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBub2RlXG4gKiAgIEVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgZWxlbWVudCBpbiBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBvcGVuaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gY29sZ3JvdXAobm9kZSwgaW5kZXgsIHBhcmVudCkge1xuICBjb25zdCBwcmV2aW91cyA9IHNpYmxpbmdCZWZvcmUocGFyZW50LCBpbmRleClcbiAgY29uc3QgaGVhZCA9IHNpYmxpbmdBZnRlcihub2RlLCAtMSwgdHJ1ZSlcblxuICAvLyBQcmV2aW91cyBjb2xncm91cCB3YXMgYWxyZWFkeSBvbWl0dGVkLlxuICBpZiAoXG4gICAgcGFyZW50ICYmXG4gICAgcHJldmlvdXMgJiZcbiAgICBwcmV2aW91cy50eXBlID09PSAnZWxlbWVudCcgJiZcbiAgICBwcmV2aW91cy50YWdOYW1lID09PSAnY29sZ3JvdXAnICYmXG4gICAgY2xvc2luZyhwcmV2aW91cywgcGFyZW50LmNoaWxkcmVuLmluZGV4T2YocHJldmlvdXMpLCBwYXJlbnQpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIEJvb2xlYW4oaGVhZCAmJiBoZWFkLnR5cGUgPT09ICdlbGVtZW50JyAmJiBoZWFkLnRhZ05hbWUgPT09ICdjb2wnKVxufVxuXG4vKipcbiAqIFdoZXRoZXIgdG8gb21pdCBgPHRib2R5PmAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBub2RlXG4gKiAgIEVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgZWxlbWVudCBpbiBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICogICBXaGV0aGVyIHRoZSBvcGVuaW5nIHRhZyBjYW4gYmUgb21pdHRlZC5cbiAqL1xuZnVuY3Rpb24gdGJvZHkobm9kZSwgaW5kZXgsIHBhcmVudCkge1xuICBjb25zdCBwcmV2aW91cyA9IHNpYmxpbmdCZWZvcmUocGFyZW50LCBpbmRleClcbiAgY29uc3QgaGVhZCA9IHNpYmxpbmdBZnRlcihub2RlLCAtMSlcblxuICAvLyBQcmV2aW91cyB0YWJsZSBzZWN0aW9uIHdhcyBhbHJlYWR5IG9taXR0ZWQuXG4gIGlmIChcbiAgICBwYXJlbnQgJiZcbiAgICBwcmV2aW91cyAmJlxuICAgIHByZXZpb3VzLnR5cGUgPT09ICdlbGVtZW50JyAmJlxuICAgIChwcmV2aW91cy50YWdOYW1lID09PSAndGhlYWQnIHx8IHByZXZpb3VzLnRhZ05hbWUgPT09ICd0Ym9keScpICYmXG4gICAgY2xvc2luZyhwcmV2aW91cywgcGFyZW50LmNoaWxkcmVuLmluZGV4T2YocHJldmlvdXMpLCBwYXJlbnQpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIEJvb2xlYW4oaGVhZCAmJiBoZWFkLnR5cGUgPT09ICdlbGVtZW50JyAmJiBoZWFkLnRhZ05hbWUgPT09ICd0cicpXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuRWxlbWVudH0gRWxlbWVudFxuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdCcpLlBhcmVudHN9IFBhcmVudHNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5Qcm9wZXJ0aWVzfSBQcm9wZXJ0aWVzXG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vaW5kZXguanMnKS5TdGF0ZX0gU3RhdGVcbiAqL1xuXG5pbXBvcnQge2Njb3VudH0gZnJvbSAnY2NvdW50J1xuaW1wb3J0IHtzdHJpbmdpZnkgYXMgY29tbWFzfSBmcm9tICdjb21tYS1zZXBhcmF0ZWQtdG9rZW5zJ1xuaW1wb3J0IHtmaW5kLCBzdmd9IGZyb20gJ3Byb3BlcnR5LWluZm9ybWF0aW9uJ1xuaW1wb3J0IHtzdHJpbmdpZnkgYXMgc3BhY2VzfSBmcm9tICdzcGFjZS1zZXBhcmF0ZWQtdG9rZW5zJ1xuaW1wb3J0IHtzdHJpbmdpZnlFbnRpdGllc30gZnJvbSAnc3RyaW5naWZ5LWVudGl0aWVzJ1xuaW1wb3J0IHtjbG9zaW5nfSBmcm9tICcuLi9vbWlzc2lvbi9jbG9zaW5nLmpzJ1xuaW1wb3J0IHtvcGVuaW5nfSBmcm9tICcuLi9vbWlzc2lvbi9vcGVuaW5nLmpzJ1xuXG4vKipcbiAqIE1hcHMgb2Ygc3Vic2V0cy5cbiAqXG4gKiBFYWNoIHZhbHVlIGlzIGEgbWF0cml4IG9mIHR1cGxlcy5cbiAqIFRoZSB2YWx1ZSBhdCBgMGAgY2F1c2VzIHBhcnNlIGVycm9ycywgdGhlIHZhbHVlIGF0IGAxYCBpcyB2YWxpZC5cbiAqIE9mIGJvdGgsIHRoZSB2YWx1ZSBhdCBgMGAgaXMgdW5zYWZlLCBhbmQgdGhlIHZhbHVlIGF0IGAxYCBpcyBzYWZlLlxuICpcbiAqIEB0eXBlIHtSZWNvcmQ8J2RvdWJsZScgfCAnbmFtZScgfCAnc2luZ2xlJyB8ICd1bnF1b3RlZCcsIEFycmF5PFtBcnJheTxzdHJpbmc+LCBBcnJheTxzdHJpbmc+XT4+fVxuICovXG5jb25zdCBjb25zdGFudHMgPSB7XG4gIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS1uYW1lLXN0YXRlPi5cbiAgbmFtZTogW1xuICAgIFsnXFx0XFxuXFxmXFxyICYvPT4nLnNwbGl0KCcnKSwgJ1xcdFxcblxcZlxcciBcIiZcXCcvPT5gJy5zcGxpdCgnJyldLFxuICAgIFsnXFwwXFx0XFxuXFxmXFxyIFwiJlxcJy88PT4nLnNwbGl0KCcnKSwgJ1xcMFxcdFxcblxcZlxcciBcIiZcXCcvPD0+YCcuc3BsaXQoJycpXVxuICBdLFxuICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtdmFsdWUtKHVucXVvdGVkKS1zdGF0ZT4uXG4gIHVucXVvdGVkOiBbXG4gICAgWydcXHRcXG5cXGZcXHIgJj4nLnNwbGl0KCcnKSwgJ1xcMFxcdFxcblxcZlxcciBcIiZcXCc8PT5gJy5zcGxpdCgnJyldLFxuICAgIFsnXFwwXFx0XFxuXFxmXFxyIFwiJlxcJzw9PmAnLnNwbGl0KCcnKSwgJ1xcMFxcdFxcblxcZlxcciBcIiZcXCc8PT5gJy5zcGxpdCgnJyldXG4gIF0sXG4gIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS12YWx1ZS0oc2luZ2xlLXF1b3RlZCktc3RhdGU+LlxuICBzaW5nbGU6IFtcbiAgICBbXCImJ1wiLnNwbGl0KCcnKSwgJ1wiJlxcJ2AnLnNwbGl0KCcnKV0sXG4gICAgW1wiXFwwJidcIi5zcGxpdCgnJyksICdcXDBcIiZcXCdgJy5zcGxpdCgnJyldXG4gIF0sXG4gIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS12YWx1ZS0oZG91YmxlLXF1b3RlZCktc3RhdGU+LlxuICBkb3VibGU6IFtcbiAgICBbJ1wiJicuc3BsaXQoJycpLCAnXCImXFwnYCcuc3BsaXQoJycpXSxcbiAgICBbJ1xcMFwiJicuc3BsaXQoJycpLCAnXFwwXCImXFwnYCcuc3BsaXQoJycpXVxuICBdXG59XG5cbi8qKlxuICogU2VyaWFsaXplIGFuIGVsZW1lbnQgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IG5vZGVcbiAqICAgTm9kZSB0byBoYW5kbGUuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gaW5kZXhcbiAqICAgSW5kZXggb2YgYG5vZGVgIGluIGBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IHBhcmVudFxuICogICBQYXJlbnQgb2YgYG5vZGVgLlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqICAgU2VyaWFsaXplZCBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudChub2RlLCBpbmRleCwgcGFyZW50LCBzdGF0ZSkge1xuICBjb25zdCBzY2hlbWEgPSBzdGF0ZS5zY2hlbWFcbiAgY29uc3Qgb21pdCA9IHNjaGVtYS5zcGFjZSA9PT0gJ3N2ZycgPyBmYWxzZSA6IHN0YXRlLnNldHRpbmdzLm9taXRPcHRpb25hbFRhZ3NcbiAgbGV0IHNlbGZDbG9zaW5nID1cbiAgICBzY2hlbWEuc3BhY2UgPT09ICdzdmcnXG4gICAgICA/IHN0YXRlLnNldHRpbmdzLmNsb3NlRW1wdHlFbGVtZW50c1xuICAgICAgOiBzdGF0ZS5zZXR0aW5ncy52b2lkcy5pbmNsdWRlcyhub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcbiAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICBjb25zdCBwYXJ0cyA9IFtdXG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBsZXQgbGFzdFxuXG4gIGlmIChzY2hlbWEuc3BhY2UgPT09ICdodG1sJyAmJiBub2RlLnRhZ05hbWUgPT09ICdzdmcnKSB7XG4gICAgc3RhdGUuc2NoZW1hID0gc3ZnXG4gIH1cblxuICBjb25zdCBhdHRycyA9IHNlcmlhbGl6ZUF0dHJpYnV0ZXMoc3RhdGUsIG5vZGUucHJvcGVydGllcylcblxuICBjb25zdCBjb250ZW50ID0gc3RhdGUuYWxsKFxuICAgIHNjaGVtYS5zcGFjZSA9PT0gJ2h0bWwnICYmIG5vZGUudGFnTmFtZSA9PT0gJ3RlbXBsYXRlJyA/IG5vZGUuY29udGVudCA6IG5vZGVcbiAgKVxuXG4gIHN0YXRlLnNjaGVtYSA9IHNjaGVtYVxuXG4gIC8vIElmIHRoZSBub2RlIGlzIGNhdGVnb3Jpc2VkIGFzIHZvaWQsIGJ1dCBpdCBoYXMgY2hpbGRyZW4sIHJlbW92ZSB0aGVcbiAgLy8gY2F0ZWdvcmlzYXRpb24uXG4gIC8vIFRoaXMgZW5hYmxlcyBmb3IgZXhhbXBsZSBgbWVudWl0ZW1gcywgd2hpY2ggYXJlIHZvaWQgaW4gVzNDIEhUTUwgYnV0IG5vdFxuICAvLyB2b2lkIGluIFdIQVRXRyBIVE1MLCB0byBiZSBzdHJpbmdpZmllZCBwcm9wZXJseS5cbiAgLy8gTm90ZTogYG1lbnVpdGVtYCBoYXMgc2luY2UgYmVlbiByZW1vdmVkIGZyb20gdGhlIEhUTUwgc3BlYywgYW5kIHNvIGlzIG5vXG4gIC8vIGxvbmdlciB2b2lkLlxuICBpZiAoY29udGVudCkgc2VsZkNsb3NpbmcgPSBmYWxzZVxuXG4gIGlmIChhdHRycyB8fCAhb21pdCB8fCAhb3BlbmluZyhub2RlLCBpbmRleCwgcGFyZW50KSkge1xuICAgIHBhcnRzLnB1c2goJzwnLCBub2RlLnRhZ05hbWUsIGF0dHJzID8gJyAnICsgYXR0cnMgOiAnJylcblxuICAgIGlmIChcbiAgICAgIHNlbGZDbG9zaW5nICYmXG4gICAgICAoc2NoZW1hLnNwYWNlID09PSAnc3ZnJyB8fCBzdGF0ZS5zZXR0aW5ncy5jbG9zZVNlbGZDbG9zaW5nKVxuICAgICkge1xuICAgICAgbGFzdCA9IGF0dHJzLmNoYXJBdChhdHRycy5sZW5ndGggLSAxKVxuICAgICAgaWYgKFxuICAgICAgICAhc3RhdGUuc2V0dGluZ3MudGlnaHRTZWxmQ2xvc2luZyB8fFxuICAgICAgICBsYXN0ID09PSAnLycgfHxcbiAgICAgICAgKGxhc3QgJiYgbGFzdCAhPT0gJ1wiJyAmJiBsYXN0ICE9PSBcIidcIilcbiAgICAgICkge1xuICAgICAgICBwYXJ0cy5wdXNoKCcgJylcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnLycpXG4gICAgfVxuXG4gICAgcGFydHMucHVzaCgnPicpXG4gIH1cblxuICBwYXJ0cy5wdXNoKGNvbnRlbnQpXG5cbiAgaWYgKCFzZWxmQ2xvc2luZyAmJiAoIW9taXQgfHwgIWNsb3Npbmcobm9kZSwgaW5kZXgsIHBhcmVudCkpKSB7XG4gICAgcGFydHMucHVzaCgnPC8nICsgbm9kZS50YWdOYW1lICsgJz4nKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtTdGF0ZX0gc3RhdGVcbiAqIEBwYXJhbSB7UHJvcGVydGllcyB8IG51bGwgfCB1bmRlZmluZWR9IHByb3BzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVBdHRyaWJ1dGVzKHN0YXRlLCBwcm9wcykge1xuICAvKiogQHR5cGUge0FycmF5PHN0cmluZz59ICovXG4gIGNvbnN0IHZhbHVlcyA9IFtdXG4gIGxldCBpbmRleCA9IC0xXG4gIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuICBsZXQga2V5XG5cbiAgaWYgKHByb3BzKSB7XG4gICAgZm9yIChrZXkgaW4gcHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1trZXldICE9PSBudWxsICYmIHByb3BzW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNlcmlhbGl6ZUF0dHJpYnV0ZShzdGF0ZSwga2V5LCBwcm9wc1trZXldKVxuICAgICAgICBpZiAodmFsdWUpIHZhbHVlcy5wdXNoKHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgdmFsdWVzLmxlbmd0aCkge1xuICAgIGNvbnN0IGxhc3QgPSBzdGF0ZS5zZXR0aW5ncy50aWdodEF0dHJpYnV0ZXNcbiAgICAgID8gdmFsdWVzW2luZGV4XS5jaGFyQXQodmFsdWVzW2luZGV4XS5sZW5ndGggLSAxKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIEluIHRpZ2h0IG1vZGUsIGRvblx1MjAxOXQgYWRkIGEgc3BhY2UgYWZ0ZXIgcXVvdGVkIGF0dHJpYnV0ZXMuXG4gICAgaWYgKGluZGV4ICE9PSB2YWx1ZXMubGVuZ3RoIC0gMSAmJiBsYXN0ICE9PSAnXCInICYmIGxhc3QgIT09IFwiJ1wiKSB7XG4gICAgICB2YWx1ZXNbaW5kZXhdICs9ICcgJ1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZXMuam9pbignJylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtQcm9wZXJ0aWVzW2tleW9mIFByb3BlcnRpZXNdfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQXR0cmlidXRlKHN0YXRlLCBrZXksIHZhbHVlKSB7XG4gIGNvbnN0IGluZm8gPSBmaW5kKHN0YXRlLnNjaGVtYSwga2V5KVxuICBjb25zdCB4ID1cbiAgICBzdGF0ZS5zZXR0aW5ncy5hbGxvd1BhcnNlRXJyb3JzICYmIHN0YXRlLnNjaGVtYS5zcGFjZSA9PT0gJ2h0bWwnID8gMCA6IDFcbiAgY29uc3QgeSA9IHN0YXRlLnNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVycyA/IDAgOiAxXG4gIGxldCBxdW90ZSA9IHN0YXRlLnF1b3RlXG4gIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICBsZXQgcmVzdWx0XG5cbiAgaWYgKGluZm8ub3ZlcmxvYWRlZEJvb2xlYW4gJiYgKHZhbHVlID09PSBpbmZvLmF0dHJpYnV0ZSB8fCB2YWx1ZSA9PT0gJycpKSB7XG4gICAgdmFsdWUgPSB0cnVlXG4gIH0gZWxzZSBpZiAoXG4gICAgaW5mby5ib29sZWFuIHx8XG4gICAgKGluZm8ub3ZlcmxvYWRlZEJvb2xlYW4gJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJylcbiAgKSB7XG4gICAgdmFsdWUgPSBCb29sZWFuKHZhbHVlKVxuICB9XG5cbiAgaWYgKFxuICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgIHZhbHVlID09PSBmYWxzZSB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc05hTih2YWx1ZSkpXG4gICkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgY29uc3QgbmFtZSA9IHN0cmluZ2lmeUVudGl0aWVzKFxuICAgIGluZm8uYXR0cmlidXRlLFxuICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMsIHtcbiAgICAgIC8vIEFsd2F5cyBlbmNvZGUgd2l0aG91dCBwYXJzZSBlcnJvcnMgaW4gbm9uLUhUTUwuXG4gICAgICBzdWJzZXQ6IGNvbnN0YW50cy5uYW1lW3hdW3ldXG4gICAgfSlcbiAgKVxuXG4gIC8vIE5vIHZhbHVlLlxuICAvLyBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgYm9vbGVhbiBwcm9wZXJ0eSBpbiBTVkc6IGBbZG93bmxvYWRdYCBvblxuICAvLyBgPGE+YC5cbiAgLy8gVGhpcyBwcm9wZXJ0eSBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgaW4gYnJvd3NlcnMgKEZpcmVmb3gsIFNhZmFyaSwgQ2hyb21lKSxcbiAgLy8gc28gSSBjYW5cdTIwMTl0IHRlc3QgaWYgZHJvcHBpbmcgdGhlIHZhbHVlIHdvcmtzLlxuICAvLyBCdXQgSSBhc3N1bWUgdGhhdCBpdCBzaG91bGQ6XG4gIC8vXG4gIC8vIGBgYGh0bWxcbiAgLy8gPCFkb2N0eXBlIGh0bWw+XG4gIC8vIDxzdmcgdmlld0JveD1cIjAgMCAxMDAgMTAwXCI+XG4gIC8vICAgPGEgaHJlZj1odHRwczovL2V4YW1wbGUuY29tIGRvd25sb2FkPlxuICAvLyAgICAgPGNpcmNsZSBjeD01MCBjeT00MCByPTM1IC8+XG4gIC8vICAgPC9hPlxuICAvLyA8L3N2Zz5cbiAgLy8gYGBgXG4gIC8vXG4gIC8vIFNlZTogPGh0dHBzOi8vZ2l0aHViLmNvbS93b29vcm0vcHJvcGVydHktaW5mb3JtYXRpb24vYmxvYi9tYWluL2xpYi9zdmcuanM+XG4gIGlmICh2YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIG5hbWVcblxuICAvLyBgc3BhY2VzYCBkb2Vzblx1MjAxOXQgYWNjZXB0IGEgc2Vjb25kIGFyZ3VtZW50LCBidXQgaXRcdTIwMTlzIGdpdmVuIGhlcmUganVzdCB0b1xuICAvLyBrZWVwIHRoZSBjb2RlIGNsZWFuZXIuXG4gIHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICA/IChpbmZvLmNvbW1hU2VwYXJhdGVkID8gY29tbWFzIDogc3BhY2VzKSh2YWx1ZSwge1xuICAgICAgICBwYWRMZWZ0OiAhc3RhdGUuc2V0dGluZ3MudGlnaHRDb21tYVNlcGFyYXRlZExpc3RzXG4gICAgICB9KVxuICAgIDogU3RyaW5nKHZhbHVlKVxuXG4gIGlmIChzdGF0ZS5zZXR0aW5ncy5jb2xsYXBzZUVtcHR5QXR0cmlidXRlcyAmJiAhdmFsdWUpIHJldHVybiBuYW1lXG5cbiAgLy8gQ2hlY2sgdW5xdW90ZWQgdmFsdWUuXG4gIGlmIChzdGF0ZS5zZXR0aW5ncy5wcmVmZXJVbnF1b3RlZCkge1xuICAgIHJlc3VsdCA9IHN0cmluZ2lmeUVudGl0aWVzKFxuICAgICAgdmFsdWUsXG4gICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7XG4gICAgICAgIGF0dHJpYnV0ZTogdHJ1ZSxcbiAgICAgICAgc3Vic2V0OiBjb25zdGFudHMudW5xdW90ZWRbeF1beV1cbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgLy8gSWYgd2UgZG9uXHUyMDE5dCB3YW50IHVucXVvdGVkLCBvciBpZiBgdmFsdWVgIGNvbnRhaW5zIGNoYXJhY3RlciByZWZlcmVuY2VzIHdoZW5cbiAgLy8gdW5xdW90ZWRcdTIwMjZcbiAgaWYgKHJlc3VsdCAhPT0gdmFsdWUpIHtcbiAgICAvLyBJZiB0aGUgYWx0ZXJuYXRpdmUgaXMgbGVzcyBjb21tb24gdGhhbiBgcXVvdGVgLCBzd2l0Y2guXG4gICAgaWYgKFxuICAgICAgc3RhdGUuc2V0dGluZ3MucXVvdGVTbWFydCAmJlxuICAgICAgY2NvdW50KHZhbHVlLCBxdW90ZSkgPiBjY291bnQodmFsdWUsIHN0YXRlLmFsdGVybmF0aXZlKVxuICAgICkge1xuICAgICAgcXVvdGUgPSBzdGF0ZS5hbHRlcm5hdGl2ZVxuICAgIH1cblxuICAgIHJlc3VsdCA9XG4gICAgICBxdW90ZSArXG4gICAgICBzdHJpbmdpZnlFbnRpdGllcyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMsIHtcbiAgICAgICAgICAvLyBBbHdheXMgZW5jb2RlIHdpdGhvdXQgcGFyc2UgZXJyb3JzIGluIG5vbi1IVE1MLlxuICAgICAgICAgIHN1YnNldDogKHF1b3RlID09PSBcIidcIiA/IGNvbnN0YW50cy5zaW5nbGUgOiBjb25zdGFudHMuZG91YmxlKVt4XVt5XSxcbiAgICAgICAgICBhdHRyaWJ1dGU6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICkgK1xuICAgICAgcXVvdGVcbiAgfVxuXG4gIC8vIERvblx1MjAxOXQgYWRkIGEgYD1gIGZvciB1bnF1b3RlZCBlbXB0aWVzLlxuICByZXR1cm4gbmFtZSArIChyZXN1bHQgPyAnPScgKyByZXN1bHQgOiByZXN1bHQpXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUGFyZW50c30gUGFyZW50c1xuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdCcpLlRleHR9IFRleHRcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdtZGFzdC11dGlsLXRvLWhhc3QnKS5SYXd9IFJhd1xuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2luZGV4LmpzJykuU3RhdGV9IFN0YXRlXG4gKi9cblxuaW1wb3J0IHtzdHJpbmdpZnlFbnRpdGllc30gZnJvbSAnc3RyaW5naWZ5LWVudGl0aWVzJ1xuXG4vKipcbiAqIFNlcmlhbGl6ZSBhIHRleHQgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge1JhdyB8IFRleHR9IG5vZGVcbiAqICAgTm9kZSB0byBoYW5kbGUuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gX1xuICogICBJbmRleCBvZiBgbm9kZWAgaW4gYHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBgbm9kZWAuXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTZXJpYWxpemVkIG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZXh0KG5vZGUsIF8sIHBhcmVudCwgc3RhdGUpIHtcbiAgLy8gQ2hlY2sgaWYgY29udGVudCBvZiBgbm9kZWAgc2hvdWxkIGJlIGVzY2FwZWQuXG4gIHJldHVybiBwYXJlbnQgJiZcbiAgICBwYXJlbnQudHlwZSA9PT0gJ2VsZW1lbnQnICYmXG4gICAgKHBhcmVudC50YWdOYW1lID09PSAnc2NyaXB0JyB8fCBwYXJlbnQudGFnTmFtZSA9PT0gJ3N0eWxlJylcbiAgICA/IG5vZGUudmFsdWVcbiAgICA6IHN0cmluZ2lmeUVudGl0aWVzKFxuICAgICAgICBub2RlLnZhbHVlLFxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7XG4gICAgICAgICAgc3Vic2V0OiBbJzwnLCAnJiddXG4gICAgICAgIH0pXG4gICAgICApXG59XG4iLCAiLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUGFyZW50c30gUGFyZW50c1xuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ21kYXN0LXV0aWwtdG8taGFzdCcpLlJhd30gUmF3XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vaW5kZXguanMnKS5TdGF0ZX0gU3RhdGVcbiAqL1xuXG5pbXBvcnQge3RleHR9IGZyb20gJy4vdGV4dC5qcydcblxuLyoqXG4gKiBTZXJpYWxpemUgYSByYXcgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge1Jhd30gbm9kZVxuICogICBOb2RlIHRvIGhhbmRsZS5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBgbm9kZWAgaW4gYHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBgbm9kZWAuXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTZXJpYWxpemVkIG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYXcobm9kZSwgaW5kZXgsIHBhcmVudCwgc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzSHRtbFxuICAgID8gbm9kZS52YWx1ZVxuICAgIDogdGV4dChub2RlLCBpbmRleCwgcGFyZW50LCBzdGF0ZSlcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5QYXJlbnRzfSBQYXJlbnRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUm9vdH0gUm9vdFxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL2luZGV4LmpzJykuU3RhdGV9IFN0YXRlXG4gKi9cblxuLy8gTWFrZSBWUyBjb2RlIHNlZSByZWZlcmVuY2VzIHRvIHRoZSBhYm92ZSB0eXBlcy5cbicnXG5cbi8qKlxuICogU2VyaWFsaXplIGEgcm9vdC5cbiAqXG4gKiBAcGFyYW0ge1Jvb3R9IG5vZGVcbiAqICAgTm9kZSB0byBoYW5kbGUuXG4gKiBAcGFyYW0ge251bWJlciB8IHVuZGVmaW5lZH0gXzFcbiAqICAgSW5kZXggb2YgYG5vZGVgIGluIGBwYXJlbnQuXG4gKiBAcGFyYW0ge1BhcmVudHMgfCB1bmRlZmluZWR9IF8yXG4gKiAgIFBhcmVudCBvZiBgbm9kZWAuXG4gKiBAcGFyYW0ge1N0YXRlfSBzdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTZXJpYWxpemVkIG5vZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290KG5vZGUsIF8xLCBfMiwgc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmFsbChub2RlKVxufVxuIiwgIi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdCcpLk5vZGVzfSBOb2Rlc1xuICogQHR5cGVkZWYge2ltcG9ydCgnaGFzdCcpLlBhcmVudHN9IFBhcmVudHNcbiAqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi9pbmRleC5qcycpLlN0YXRlfSBTdGF0ZVxuICovXG5cbmltcG9ydCB7endpdGNofSBmcm9tICd6d2l0Y2gnXG5pbXBvcnQge2NvbW1lbnR9IGZyb20gJy4vY29tbWVudC5qcydcbmltcG9ydCB7ZG9jdHlwZX0gZnJvbSAnLi9kb2N0eXBlLmpzJ1xuaW1wb3J0IHtlbGVtZW50fSBmcm9tICcuL2VsZW1lbnQuanMnXG5pbXBvcnQge3Jhd30gZnJvbSAnLi9yYXcuanMnXG5pbXBvcnQge3Jvb3R9IGZyb20gJy4vcm9vdC5qcydcbmltcG9ydCB7dGV4dH0gZnJvbSAnLi90ZXh0LmpzJ1xuXG4vKipcbiAqIEB0eXBlIHsobm9kZTogTm9kZXMsIGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQsIHBhcmVudDogUGFyZW50cyB8IHVuZGVmaW5lZCwgc3RhdGU6IFN0YXRlKSA9PiBzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGUgPSB6d2l0Y2goJ3R5cGUnLCB7XG4gIGludmFsaWQsXG4gIHVua25vd24sXG4gIGhhbmRsZXJzOiB7Y29tbWVudCwgZG9jdHlwZSwgZWxlbWVudCwgcmF3LCByb290LCB0ZXh0fVxufSlcblxuLyoqXG4gKiBGYWlsIHdoZW4gYSBub24tbm9kZSBpcyBmb3VuZCBpbiB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IG5vZGVcbiAqICAgVW5rbm93biB2YWx1ZS5cbiAqIEByZXR1cm5zIHtuZXZlcn1cbiAqICAgTmV2ZXIuXG4gKi9cbmZ1bmN0aW9uIGludmFsaWQobm9kZSkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vZGUsIG5vdCBgJyArIG5vZGUgKyAnYCcpXG59XG5cbi8qKlxuICogRmFpbCB3aGVuIGEgbm9kZSB3aXRoIGFuIHVua25vd24gdHlwZSBpcyBmb3VuZCBpbiB0aGUgdHJlZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IG5vZGVfXG4gKiAgVW5rbm93biBub2RlLlxuICogQHJldHVybnMge25ldmVyfVxuICogICBOZXZlci5cbiAqL1xuZnVuY3Rpb24gdW5rbm93bihub2RlXykge1xuICAvLyBgdHlwZWAgaXMgZ3VhcmFudGVlZCBieSBydW50aW1lIEpTLlxuICBjb25zdCBub2RlID0gLyoqIEB0eXBlIHtOb2Rlc30gKi8gKG5vZGVfKVxuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21waWxlIHVua25vd24gbm9kZSBgJyArIG5vZGUudHlwZSArICdgJylcbn1cbiIsICIvKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5Ob2Rlc30gTm9kZXNcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ2hhc3QnKS5QYXJlbnRzfSBQYXJlbnRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdoYXN0JykuUm9vdENvbnRlbnR9IFJvb3RDb250ZW50XG4gKlxuICogQHR5cGVkZWYge2ltcG9ydCgncHJvcGVydHktaW5mb3JtYXRpb24nKS5TY2hlbWF9IFNjaGVtYVxuICpcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ3N0cmluZ2lmeS1lbnRpdGllcycpLk9wdGlvbnN9IFN0cmluZ2lmeUVudGl0aWVzT3B0aW9uc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09taXQ8U3RyaW5naWZ5RW50aXRpZXNPcHRpb25zLCAnYXR0cmlidXRlJyB8ICdlc2NhcGVPbmx5JyB8ICdzdWJzZXQnPn0gQ2hhcmFjdGVyUmVmZXJlbmNlc1xuICpcbiAqIEB0eXBlZGVmIE9wdGlvbnNcbiAqICAgQ29uZmlndXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFthbGxvd0Rhbmdlcm91c0NoYXJhY3RlcnM9ZmFsc2VdXG4gKiAgIERvIG5vdCBlbmNvZGUgc29tZSBjaGFyYWN0ZXJzIHdoaWNoIGNhdXNlIFhTUyB2dWxuZXJhYmlsaXRpZXMgaW4gb2xkZXJcbiAqICAgYnJvd3NlcnMgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgPiBcdTI2QTBcdUZFMEYgKipEYW5nZXIqKjogb25seSBzZXQgdGhpcyBpZiB5b3UgY29tcGxldGVseSB0cnVzdCB0aGUgY29udGVudC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFthbGxvd0Rhbmdlcm91c0h0bWw9ZmFsc2VdXG4gKiAgIEFsbG93IGByYXdgIG5vZGVzIGFuZCBpbnNlcnQgdGhlbSBhcyByYXcgSFRNTCAoZGVmYXVsdDogYGZhbHNlYCkuXG4gKlxuICogICBXaGVuIGBmYWxzZWAsIGBSYXdgIG5vZGVzIGFyZSBlbmNvZGVkLlxuICpcbiAqICAgPiBcdTI2QTBcdUZFMEYgKipEYW5nZXIqKjogb25seSBzZXQgdGhpcyBpZiB5b3UgY29tcGxldGVseSB0cnVzdCB0aGUgY29udGVudC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFthbGxvd1BhcnNlRXJyb3JzPWZhbHNlXVxuICogICBEbyBub3QgZW5jb2RlIGNoYXJhY3RlcnMgd2hpY2ggY2F1c2UgcGFyc2UgZXJyb3JzIChldmVuIHRob3VnaCB0aGV5IHdvcmspLFxuICogICB0byBzYXZlIGJ5dGVzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgIE5vdCB1c2VkIGluIHRoZSBTVkcgc3BhY2UuXG4gKlxuICogICA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogaW50ZW50aW9uYWxseSBjcmVhdGVzIHBhcnNlIGVycm9ycyBpbiBtYXJrdXAgKGhvdyBwYXJzZVxuICogICA+IGVycm9ycyBhcmUgaGFuZGxlZCBpcyB3ZWxsIGRlZmluZWQsIHNvIHRoaXMgd29ya3MgYnV0IGlzblx1MjAxOXQgcHJldHR5KS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtib2d1c0NvbW1lbnRzPWZhbHNlXVxuICogICBVc2UgXHUyMDFDYm9ndXMgY29tbWVudHNcdTIwMUQgaW5zdGVhZCBvZiBjb21tZW50cyB0byBzYXZlIGJ5ZXM6IGA8P2NoYXJsaWU+YFxuICogICBpbnN0ZWFkIG9mIGA8IS0tY2hhcmxpZS0tPmAgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IGludGVudGlvbmFsbHkgY3JlYXRlcyBwYXJzZSBlcnJvcnMgaW4gbWFya3VwIChob3cgcGFyc2VcbiAqICAgPiBlcnJvcnMgYXJlIGhhbmRsZWQgaXMgd2VsbCBkZWZpbmVkLCBzbyB0aGlzIHdvcmtzIGJ1dCBpc25cdTIwMTl0IHByZXR0eSkuXG4gKiBAcHJvcGVydHkge0NoYXJhY3RlclJlZmVyZW5jZXMgfCBudWxsIHwgdW5kZWZpbmVkfSBbY2hhcmFjdGVyUmVmZXJlbmNlc11cbiAqICAgQ29uZmlndXJlIGhvdyB0byBzZXJpYWxpemUgY2hhcmFjdGVyIHJlZmVyZW5jZXMgKG9wdGlvbmFsKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtjbG9zZUVtcHR5RWxlbWVudHM9ZmFsc2VdXG4gKiAgIENsb3NlIFNWRyBlbGVtZW50cyB3aXRob3V0IGFueSBjb250ZW50IHdpdGggc2xhc2ggKGAvYCkgb24gdGhlIG9wZW5pbmcgdGFnXG4gKiAgIGluc3RlYWQgb2YgYW4gZW5kIHRhZzogYDxjaXJjbGUgLz5gIGluc3RlYWQgb2YgYDxjaXJjbGU+PC9jaXJjbGU+YFxuICogICAoZGVmYXVsdDogYGZhbHNlYCkuXG4gKlxuICogICBTZWUgYHRpZ2h0U2VsZkNsb3NpbmdgIHRvIGNvbnRyb2wgd2hldGhlciBhIHNwYWNlIGlzIHVzZWQgYmVmb3JlIHRoZVxuICogICBzbGFzaC5cbiAqXG4gKiAgIE5vdCB1c2VkIGluIHRoZSBIVE1MIHNwYWNlLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW2Nsb3NlU2VsZkNsb3Npbmc9ZmFsc2VdXG4gKiAgIENsb3NlIHNlbGYtY2xvc2luZyBub2RlcyB3aXRoIGFuIGV4dHJhIHNsYXNoIChgL2ApOiBgPGltZyAvPmAgaW5zdGVhZCBvZlxuICogICBgPGltZz5gIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgIFNlZSBgdGlnaHRTZWxmQ2xvc2luZ2AgdG8gY29udHJvbCB3aGV0aGVyIGEgc3BhY2UgaXMgdXNlZCBiZWZvcmUgdGhlXG4gKiAgIHNsYXNoLlxuICpcbiAqICAgTm90IHVzZWQgaW4gdGhlIFNWRyBzcGFjZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtjb2xsYXBzZUVtcHR5QXR0cmlidXRlcz1mYWxzZV1cbiAqICAgQ29sbGFwc2UgZW1wdHkgYXR0cmlidXRlczogZ2V0IGBjbGFzc2AgaW5zdGVhZCBvZiBgY2xhc3M9XCJcImAgKGRlZmF1bHQ6XG4gKiAgIGBmYWxzZWApLlxuICpcbiAqICAgTm90IHVzZWQgaW4gdGhlIFNWRyBzcGFjZS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBib29sZWFuIGF0dHJpYnV0ZXMgKHN1Y2ggYXMgYGhpZGRlbmApIGFyZSBhbHdheXMgY29sbGFwc2VkLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29taXRPcHRpb25hbFRhZ3M9ZmFsc2VdXG4gKiAgIE9taXQgb3B0aW9uYWwgb3BlbmluZyBhbmQgY2xvc2luZyB0YWdzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgIEZvciBleGFtcGxlLCBpbiBgPG9sPjxsaT5vbmU8L2xpPjxsaT50d288L2xpPjwvb2w+YCwgYm90aCBgPC9saT5gIGNsb3NpbmdcbiAqICAgdGFncyBjYW4gYmUgb21pdHRlZC5cbiAqICAgVGhlIGZpcnN0IGJlY2F1c2UgaXRcdTIwMTlzIGZvbGxvd2VkIGJ5IGFub3RoZXIgYGxpYCwgdGhlIGxhc3QgYmVjYXVzZSBpdFx1MjAxOXNcbiAqICAgZm9sbG93ZWQgYnkgbm90aGluZy5cbiAqXG4gKiAgIE5vdCB1c2VkIGluIHRoZSBTVkcgc3BhY2UuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkfSBbcHJlZmVyVW5xdW90ZWQ9ZmFsc2VdXG4gKiAgIExlYXZlIGF0dHJpYnV0ZXMgdW5xdW90ZWQgaWYgdGhhdCByZXN1bHRzIGluIGxlc3MgYnl0ZXMgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgTm90IHVzZWQgaW4gdGhlIFNWRyBzcGFjZS5cbiAqIEBwcm9wZXJ0eSB7UXVvdGUgfCBudWxsIHwgdW5kZWZpbmVkfSBbcXVvdGU9J1wiJ11cbiAqICAgUHJlZmVycmVkIHF1b3RlIHRvIHVzZSAoZGVmYXVsdDogYCdcIidgKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFtxdW90ZVNtYXJ0PWZhbHNlXVxuICogICBVc2UgdGhlIG90aGVyIHF1b3RlIGlmIHRoYXQgcmVzdWx0cyBpbiBsZXNzIGJ5dGVzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqIEBwcm9wZXJ0eSB7U3BhY2UgfCBudWxsIHwgdW5kZWZpbmVkfSBbc3BhY2U9J2h0bWwnXVxuICogICBXaGVuIGFuIGA8c3ZnPmAgZWxlbWVudCBpcyBmb3VuZCBpbiB0aGUgSFRNTCBzcGFjZSwgdGhpcyBwYWNrYWdlIGFscmVhZHlcbiAqICAgYXV0b21hdGljYWxseSBzd2l0Y2hlcyB0byBhbmQgZnJvbSB0aGUgU1ZHIHNwYWNlIHdoZW4gZW50ZXJpbmcgYW5kIGV4aXRpbmdcbiAqICAgaXQgKGRlZmF1bHQ6IGAnaHRtbCdgKS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBoYXN0IGlzIG5vdCBYTUwuXG4gKiAgID4gSXQgc3VwcG9ydHMgU1ZHIGFzIGVtYmVkZGVkIGluIEhUTUwuXG4gKiAgID4gSXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZmVhdHVyZXMgYXZhaWxhYmxlIGluIFhNTC5cbiAqICAgPiBQYXNzaW5nIFNWRyBtaWdodCBicmVhayBidXQgZnJhZ21lbnRzIG9mIG1vZGVybiBTVkcgc2hvdWxkIGJlIGZpbmUuXG4gKiAgID4gVXNlIFtgeGFzdGBdW3hhc3RdIGlmIHlvdSBuZWVkIHRvIHN1cHBvcnQgU1ZHIGFzIFhNTC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFt0aWdodEF0dHJpYnV0ZXM9ZmFsc2VdXG4gKiAgIEpvaW4gYXR0cmlidXRlcyB0b2dldGhlciwgd2l0aG91dCB3aGl0ZXNwYWNlLCBpZiBwb3NzaWJsZTogZ2V0XG4gKiAgIGBjbGFzcz1cImEgYlwidGl0bGU9XCJjIGRcImAgaW5zdGVhZCBvZiBgY2xhc3M9XCJhIGJcIiB0aXRsZT1cImMgZFwiYCB0byBzYXZlXG4gKiAgIGJ5dGVzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgIE5vdCB1c2VkIGluIHRoZSBTVkcgc3BhY2UuXG4gKlxuICogICA+IFx1RDgzRFx1REM0OSAqKk5vdGUqKjogaW50ZW50aW9uYWxseSBjcmVhdGVzIHBhcnNlIGVycm9ycyBpbiBtYXJrdXAgKGhvdyBwYXJzZVxuICogICA+IGVycm9ycyBhcmUgaGFuZGxlZCBpcyB3ZWxsIGRlZmluZWQsIHNvIHRoaXMgd29ya3MgYnV0IGlzblx1MjAxOXQgcHJldHR5KS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFt0aWdodENvbW1hU2VwYXJhdGVkTGlzdHM9ZmFsc2VdXG4gKiAgIEpvaW4ga25vd24gY29tbWEtc2VwYXJhdGVkIGF0dHJpYnV0ZSB2YWx1ZXMgd2l0aCBqdXN0IGEgY29tbWEgKGAsYCksXG4gKiAgIGluc3RlYWQgb2YgcGFkZGluZyB0aGVtIG9uIHRoZSByaWdodCBhcyB3ZWxsIChgLFx1MjQyMGAsIHdoZXJlIGBcdTI0MjBgIHJlcHJlc2VudHMgYVxuICogICBzcGFjZSkgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3RpZ2h0RG9jdHlwZT1mYWxzZV1cbiAqICAgRHJvcCB1bm5lZWRlZCBzcGFjZXMgaW4gZG9jdHlwZXM6IGA8IWRvY3R5cGVodG1sPmAgaW5zdGVhZCBvZlxuICogICBgPCFkb2N0eXBlIGh0bWw+YCB0byBzYXZlIGJ5dGVzIChkZWZhdWx0OiBgZmFsc2VgKS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBpbnRlbnRpb25hbGx5IGNyZWF0ZXMgcGFyc2UgZXJyb3JzIGluIG1hcmt1cCAoaG93IHBhcnNlXG4gKiAgID4gZXJyb3JzIGFyZSBoYW5kbGVkIGlzIHdlbGwgZGVmaW5lZCwgc28gdGhpcyB3b3JrcyBidXQgaXNuXHUyMDE5dCBwcmV0dHkpLlxuICogQHByb3BlcnR5IHtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3RpZ2h0U2VsZkNsb3Npbmc9ZmFsc2VdXG4gKiAgIERvIG5vdCB1c2UgYW4gZXh0cmEgc3BhY2Ugd2hlbiBjbG9zaW5nIHNlbGYtY2xvc2luZyBlbGVtZW50czogYDxpbWcvPmBcbiAqICAgaW5zdGVhZCBvZiBgPGltZyAvPmAgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgPiBcdUQ4M0RcdURDNDkgKipOb3RlKio6IG9ubHkgdXNlZCBpZiBgY2xvc2VTZWxmQ2xvc2luZzogdHJ1ZWAgb3JcbiAqICAgPiBgY2xvc2VFbXB0eUVsZW1lbnRzOiB0cnVlYC5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWR9IFt1cHBlckRvY3R5cGU9ZmFsc2VdXG4gKiAgIFVzZSBhIGA8IURPQ1RZUEVcdTIwMjZgIGluc3RlYWQgb2YgYDwhZG9jdHlwZVx1MjAyNmAgKGRlZmF1bHQ6IGBmYWxzZWApLlxuICpcbiAqICAgVXNlbGVzcyBleGNlcHQgZm9yIFhIVE1MLlxuICogQHByb3BlcnR5IHtSZWFkb25seUFycmF5PHN0cmluZz4gfCBudWxsIHwgdW5kZWZpbmVkfSBbdm9pZHNdXG4gKiAgIFRhZyBuYW1lcyBvZiBlbGVtZW50cyB0byBzZXJpYWxpemUgd2l0aG91dCBjbG9zaW5nIHRhZyAoZGVmYXVsdDogYGh0bWwtdm9pZC1lbGVtZW50c2ApLlxuICpcbiAqICAgTm90IHVzZWQgaW4gdGhlIFNWRyBzcGFjZS5cbiAqXG4gKiAgID4gXHVEODNEXHVEQzQ5ICoqTm90ZSoqOiBJdFx1MjAxOXMgaGlnaGx5IHVubGlrZWx5IHRoYXQgeW91IHdhbnQgdG8gcGFzcyB0aGlzLCBiZWNhdXNlXG4gKiAgID4gaGFzdCBpcyBub3QgZm9yIFhNTCwgYW5kIEhUTUwgd2lsbCBub3QgYWRkIG1vcmUgdm9pZCBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZWRlZiB7J1wiJyB8IFwiJ1wifSBRdW90ZVxuICogICBIVE1MIHF1b3RlcyBmb3IgYXR0cmlidXRlIHZhbHVlcy5cbiAqXG4gKiBAdHlwZWRlZiB7T21pdDxSZXF1aXJlZDx7W2tleSBpbiBrZXlvZiBPcHRpb25zXTogRXhjbHVkZTxPcHRpb25zW2tleV0sIG51bGwgfCB1bmRlZmluZWQ+fT4sICdzcGFjZScgfCAncXVvdGUnPn0gU2V0dGluZ3NcbiAqXG4gKiBAdHlwZWRlZiB7J2h0bWwnIHwgJ3N2Zyd9IFNwYWNlXG4gKiAgIE5hbWVzcGFjZS5cbiAqXG4gKiBAdHlwZWRlZiBTdGF0ZVxuICogICBJbmZvIHBhc3NlZCBhcm91bmQgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBAcHJvcGVydHkgeyhub2RlOiBOb2RlcywgaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCwgcGFyZW50OiBQYXJlbnRzIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmd9IG9uZVxuICogICBTZXJpYWxpemUgb25lIG5vZGUuXG4gKiBAcHJvcGVydHkgeyhub2RlOiBQYXJlbnRzIHwgdW5kZWZpbmVkKSA9PiBzdHJpbmd9IGFsbFxuICogICBTZXJpYWxpemUgdGhlIGNoaWxkcmVuIG9mIGEgcGFyZW50IG5vZGUuXG4gKiBAcHJvcGVydHkge1NldHRpbmdzfSBzZXR0aW5nc1xuICogICBVc2VyIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge1NjaGVtYX0gc2NoZW1hXG4gKiAgIEN1cnJlbnQgc2NoZW1hLlxuICogQHByb3BlcnR5IHtRdW90ZX0gcXVvdGVcbiAqICAgUHJlZmVycmVkIHF1b3RlLlxuICogQHByb3BlcnR5IHtRdW90ZX0gYWx0ZXJuYXRpdmVcbiAqICAgQWx0ZXJuYXRpdmUgcXVvdGUuXG4gKi9cblxuaW1wb3J0IHtodG1sVm9pZEVsZW1lbnRzfSBmcm9tICdodG1sLXZvaWQtZWxlbWVudHMnXG5pbXBvcnQge2h0bWwsIHN2Z30gZnJvbSAncHJvcGVydHktaW5mb3JtYXRpb24nXG5pbXBvcnQge2hhbmRsZX0gZnJvbSAnLi9oYW5kbGUvaW5kZXguanMnXG5cbi8qKiBAdHlwZSB7T3B0aW9uc30gKi9cbmNvbnN0IGVtcHR5T3B0aW9ucyA9IHt9XG5cbi8qKiBAdHlwZSB7Q2hhcmFjdGVyUmVmZXJlbmNlc30gKi9cbmNvbnN0IGVtcHR5Q2hhcmFjdGVyUmVmZXJlbmNlcyA9IHt9XG5cbi8qKiBAdHlwZSB7QXJyYXk8bmV2ZXI+fSAqL1xuY29uc3QgZW1wdHlDaGlsZHJlbiA9IFtdXG5cbi8qKlxuICogU2VyaWFsaXplIGhhc3QgYXMgSFRNTC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFJvb3RDb250ZW50PiB8IE5vZGVzfSB0cmVlXG4gKiAgIFRyZWUgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdXG4gKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiAgIFNlcmlhbGl6ZWQgSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSHRtbCh0cmVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IG9wdGlvbnNfID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnNcbiAgY29uc3QgcXVvdGUgPSBvcHRpb25zXy5xdW90ZSB8fCAnXCInXG4gIGNvbnN0IGFsdGVybmF0aXZlID0gcXVvdGUgPT09ICdcIicgPyBcIidcIiA6ICdcIidcblxuICBpZiAocXVvdGUgIT09ICdcIicgJiYgcXVvdGUgIT09IFwiJ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHF1b3RlIGAnICsgcXVvdGUgKyAnYCwgZXhwZWN0ZWQgYFxcJ2Agb3IgYFwiYCcpXG4gIH1cblxuICAvKiogQHR5cGUge1N0YXRlfSAqL1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBvbmUsXG4gICAgYWxsLFxuICAgIHNldHRpbmdzOiB7XG4gICAgICBvbWl0T3B0aW9uYWxUYWdzOiBvcHRpb25zXy5vbWl0T3B0aW9uYWxUYWdzIHx8IGZhbHNlLFxuICAgICAgYWxsb3dQYXJzZUVycm9yczogb3B0aW9uc18uYWxsb3dQYXJzZUVycm9ycyB8fCBmYWxzZSxcbiAgICAgIGFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVyczogb3B0aW9uc18uYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzIHx8IGZhbHNlLFxuICAgICAgcXVvdGVTbWFydDogb3B0aW9uc18ucXVvdGVTbWFydCB8fCBmYWxzZSxcbiAgICAgIHByZWZlclVucXVvdGVkOiBvcHRpb25zXy5wcmVmZXJVbnF1b3RlZCB8fCBmYWxzZSxcbiAgICAgIHRpZ2h0QXR0cmlidXRlczogb3B0aW9uc18udGlnaHRBdHRyaWJ1dGVzIHx8IGZhbHNlLFxuICAgICAgdXBwZXJEb2N0eXBlOiBvcHRpb25zXy51cHBlckRvY3R5cGUgfHwgZmFsc2UsXG4gICAgICB0aWdodERvY3R5cGU6IG9wdGlvbnNfLnRpZ2h0RG9jdHlwZSB8fCBmYWxzZSxcbiAgICAgIGJvZ3VzQ29tbWVudHM6IG9wdGlvbnNfLmJvZ3VzQ29tbWVudHMgfHwgZmFsc2UsXG4gICAgICB0aWdodENvbW1hU2VwYXJhdGVkTGlzdHM6IG9wdGlvbnNfLnRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0cyB8fCBmYWxzZSxcbiAgICAgIHRpZ2h0U2VsZkNsb3Npbmc6IG9wdGlvbnNfLnRpZ2h0U2VsZkNsb3NpbmcgfHwgZmFsc2UsXG4gICAgICBjb2xsYXBzZUVtcHR5QXR0cmlidXRlczogb3B0aW9uc18uY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXMgfHwgZmFsc2UsXG4gICAgICBhbGxvd0Rhbmdlcm91c0h0bWw6IG9wdGlvbnNfLmFsbG93RGFuZ2Vyb3VzSHRtbCB8fCBmYWxzZSxcbiAgICAgIHZvaWRzOiBvcHRpb25zXy52b2lkcyB8fCBodG1sVm9pZEVsZW1lbnRzLFxuICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlczpcbiAgICAgICAgb3B0aW9uc18uY2hhcmFjdGVyUmVmZXJlbmNlcyB8fCBlbXB0eUNoYXJhY3RlclJlZmVyZW5jZXMsXG4gICAgICBjbG9zZVNlbGZDbG9zaW5nOiBvcHRpb25zXy5jbG9zZVNlbGZDbG9zaW5nIHx8IGZhbHNlLFxuICAgICAgY2xvc2VFbXB0eUVsZW1lbnRzOiBvcHRpb25zXy5jbG9zZUVtcHR5RWxlbWVudHMgfHwgZmFsc2VcbiAgICB9LFxuICAgIHNjaGVtYTogb3B0aW9uc18uc3BhY2UgPT09ICdzdmcnID8gc3ZnIDogaHRtbCxcbiAgICBxdW90ZSxcbiAgICBhbHRlcm5hdGl2ZVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlLm9uZShcbiAgICBBcnJheS5pc0FycmF5KHRyZWUpID8ge3R5cGU6ICdyb290JywgY2hpbGRyZW46IHRyZWV9IDogdHJlZSxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkXG4gIClcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYSBub2RlLlxuICpcbiAqIEB0aGlzIHtTdGF0ZX1cbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHtOb2Rlc30gbm9kZVxuICogICBOb2RlIHRvIGhhbmRsZS5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBpbmRleFxuICogICBJbmRleCBvZiBgbm9kZWAgaW4gYHBhcmVudC5cbiAqIEBwYXJhbSB7UGFyZW50cyB8IHVuZGVmaW5lZH0gcGFyZW50XG4gKiAgIFBhcmVudCBvZiBgbm9kZWAuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogICBTZXJpYWxpemVkIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIG9uZShub2RlLCBpbmRleCwgcGFyZW50KSB7XG4gIHJldHVybiBoYW5kbGUobm9kZSwgaW5kZXgsIHBhcmVudCwgdGhpcylcbn1cblxuLyoqXG4gKiBTZXJpYWxpemUgYWxsIGNoaWxkcmVuIG9mIGBwYXJlbnRgLlxuICpcbiAqIEB0aGlzIHtTdGF0ZX1cbiAqICAgSW5mbyBwYXNzZWQgYXJvdW5kIGFib3V0IHRoZSBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHtQYXJlbnRzIHwgdW5kZWZpbmVkfSBwYXJlbnRcbiAqICAgUGFyZW50IHdob3NlIGNoaWxkcmVuIHRvIHNlcmlhbGl6ZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGwocGFyZW50KSB7XG4gIC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nPn0gKi9cbiAgY29uc3QgcmVzdWx0cyA9IFtdXG4gIGNvbnN0IGNoaWxkcmVuID0gKHBhcmVudCAmJiBwYXJlbnQuY2hpbGRyZW4pIHx8IGVtcHR5Q2hpbGRyZW5cbiAgbGV0IGluZGV4ID0gLTFcblxuICB3aGlsZSAoKytpbmRleCA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgIHJlc3VsdHNbaW5kZXhdID0gdGhpcy5vbmUoY2hpbGRyZW5baW5kZXhdLCBpbmRleCwgcGFyZW50KVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHMuam9pbignJylcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBQUEsU0FBMkNBLElBQU1DLElBQUFBO0FBQzFCLGtCQUFBLE9BQVpDLFdBQTBDLFlBQUEsT0FBWEMsVUFDeENBLFFBQU9ELFVBQVVELEdBQUFBLElBQ1EsY0FBQSxPQUFYRyxVQUF5QkEsT0FBT0MsTUFDOUNELE9BQU8sQ0FBQSxHQUFJSCxFQUFBQSxJQUNlLFlBQUEsT0FBWkMsVUFDZEEsUUFBZSxRQUFJRCxHQUFBQSxJQUVuQkQsR0FBWSxRQUFJQyxHQUFBQTtJQUNqQixFQUFFSyxNQUFNLE9BQ1QsTUFBQTtBQUFBO0FDVEEsVUFBSUMsS0FBc0IsRUNBMUJBLEdB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RUFDUCxZQUFZO0FBQUEsRUFDWixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxjQUFjO0FBQUEsRUFDZCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxhQUFhO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixVQUFVO0FBQUEsRUFDVixpQkFBaUI7QUFBQSxFQUNqQixZQUFZO0FBQUEsRUFDWixjQUFjO0FBQUEsRUFDZCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixnQkFBZ0I7QUFBQSxFQUNoQixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxpQkFBaUI7QUFBQSxFQUNqQixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDViw0QkFBNEI7QUFBQSxFQUM1QixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxxQkFBcUI7QUFBQSxFQUNyQixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxpQkFBaUI7QUFBQSxFQUNqQixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixhQUFhO0FBQUEsRUFDYixzQkFBc0I7QUFBQSxFQUN0QixPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixZQUFZO0FBQUEsRUFDWixhQUFhO0FBQUEsRUFDYixXQUFXO0FBQUEsRUFDWCxXQUFXO0FBQUEsRUFDWCxlQUFlO0FBQUEsRUFDZixrQkFBa0I7QUFBQSxFQUNsQixNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxhQUFhO0FBQUEsRUFDYixRQUFRO0FBQUEsRUFDUixlQUFlO0FBQUEsRUFDZixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxnQkFBZ0I7QUFBQSxFQUNoQixnQkFBZ0I7QUFBQSxFQUNoQixjQUFjO0FBQUEsRUFDZCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxZQUFZO0FBQUEsRUFDWixNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxjQUFjO0FBQUEsRUFDZCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxXQUFXO0FBQUEsRUFDWCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixxQkFBcUI7QUFBQSxFQUNyQixVQUFVO0FBQUEsRUFDVixhQUFhO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxtQkFBbUI7QUFBQSxFQUNuQixjQUFjO0FBQUEsRUFDZCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixjQUFjO0FBQUEsRUFDZCxRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUEsRUFDVCxVQUFVO0FBQUEsRUFDVixZQUFZO0FBQUEsRUFDWixRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixnQkFBZ0I7QUFBQSxFQUNoQixPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixNQUFNO0FBQUEsRUFDTixjQUFjO0FBQUEsRUFDZCxTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixjQUFjO0FBQUEsRUFDZCxhQUFhO0FBQUEsRUFDYixZQUFZO0FBQUEsRUFDWixTQUFTO0FBQUEsRUFDVCxjQUFjO0FBQUEsRUFDZCxNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxjQUFjO0FBQUEsRUFDZCxVQUFVO0FBQUEsRUFDVixjQUFjO0FBQUEsRUFDZCxZQUFZO0FBQUEsRUFDWixhQUFhO0FBQUEsRUFDYixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixVQUFVO0FBQUEsRUFDVixNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixrQkFBa0I7QUFBQSxFQUNsQixTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixpQkFBaUI7QUFBQSxFQUNqQixjQUFjO0FBQUEsRUFDZCxnQkFBZ0I7QUFBQSxFQUNoQixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxZQUFZO0FBQUEsRUFDWixPQUFPO0FBQUEsRUFDUCxpQkFBaUI7QUFBQSxFQUNqQixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixNQUFNO0FBQUEsRUFDTixjQUFjO0FBQUEsRUFDZCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxTQUFTO0FBQUEsRUFDVCxpQkFBaUI7QUFBQSxFQUNqQixVQUFVO0FBQUEsRUFDVixXQUFXO0FBQUEsRUFDWCxpQkFBaUI7QUFBQSxFQUNqQixTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixTQUFTO0FBQUEsRUFDVCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixZQUFZO0FBQUEsRUFDWixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxnQkFBZ0I7QUFBQSxFQUNoQixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixXQUFXO0FBQUEsRUFDWCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixhQUFhO0FBQUEsRUFDYixXQUFXO0FBQUEsRUFDWCxRQUFRO0FBQUEsRUFDUixVQUFVO0FBQUEsRUFDVixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQ1Q7QUFDQSxJQUFNLHlCQUFrRDtBQUFBO0FBQUEsRUFDdkQsT0FBTTtBQUFBLEVBQ04sU0FBUTtBQUFBLEVBQ1IsY0FBYTtBQUFBLEVBQ2IsTUFBSztBQUFBLEVBQ0wsUUFBTztBQUFBLEVBQ1AsUUFBTztBQUFBLEVBQ1AsZ0JBQWU7QUFBQSxFQUNmLE9BQU07QUFBQSxFQUNOLFFBQU87QUFBQSxFQUNQLE1BQUs7QUFBQSxFQUNMLFVBQVM7QUFBQSxFQUNULE1BQUs7QUFBQSxFQUNMLGNBQWE7QUFBQSxFQUNiLFFBQU87QUFBQSxFQUNQLE9BQU07QUFBQSxFQUNOLGVBQWM7QUFBQSxFQUNkLE9BQU07QUFBQSxFQUNOLFdBQVU7QUFBQSxFQUNWLE9BQU07QUFBQSxFQUNOLFFBQU87QUFBQSxFQUNQLFVBQVM7QUFBQSxFQUNULFdBQVU7QUFBQSxFQUNWLFVBQVM7QUFBQSxFQUNULE9BQU07QUFBQSxFQUNOLFlBQVc7QUFBQSxFQUNYLFFBQU87QUFBQSxFQUNQLFVBQVM7QUFBQSxFQUNULFdBQVU7QUFBQSxFQUNWLFlBQVc7QUFBQSxFQUNYLGNBQWE7QUFBQSxFQUNiLFVBQVM7QUFBQSxFQUNULFlBQVc7QUFBQSxFQUNYLE9BQU07QUFBQSxFQUNOLFlBQVc7QUFBQSxFQUNYLFFBQU87QUFBQSxFQUNQLE9BQU07QUFBQSxFQUNOLFFBQU87QUFBQSxFQUNQLFFBQU87QUFBQSxFQUNQLE1BQUs7QUFBQSxFQUNMLFNBQVE7QUFBQSxFQUNSLFNBQVE7QUFBQSxFQUNSLFNBQVE7QUFBQSxFQUNSLFVBQVM7QUFBQSxFQUNULGFBQVk7QUFBQSxFQUNaLE9BQU07QUFBQSxFQUNOLFFBQU87QUFBQSxFQUNQLFNBQVE7QUFBQSxFQUNSLE9BQU07QUFBQSxFQUNOLFFBQU87QUFBQSxFQUNQLE9BQU07QUFBQSxFQUNOLGFBQVk7QUFBQSxFQUNaLGdCQUFlO0FBQUEsRUFDZixPQUFNO0FBQUEsRUFDTixPQUFNO0FBQUEsRUFDTixXQUFVO0FBQUEsRUFDVixLQUFJO0FBQUEsRUFDSixVQUFTO0FBQUEsRUFDVCxNQUFLO0FBQUEsRUFDTCxVQUFTO0FBQUEsRUFDVCxPQUFNO0FBQUEsRUFDTixZQUFXO0FBQUEsRUFDWCxPQUFNO0FBQUEsRUFDTixjQUFhO0FBQUEsRUFDYixPQUFNO0FBQUEsRUFDTixTQUFRO0FBQUEsRUFDUixVQUFTO0FBQUEsRUFDVCxXQUFVO0FBQUEsRUFDVixZQUFXO0FBQUEsRUFDWCxRQUFPO0FBQUEsRUFDUCxXQUFVO0FBQUEsRUFDVixTQUFRO0FBQUEsRUFDUixTQUFRO0FBQUEsRUFDUixnQkFBZTtBQUFBLEVBQ2YsVUFBUztBQUFBLEVBQ1QsYUFBWTtBQUFBLEVBQ1osUUFBTztBQUFBLEVBQ1AsT0FBTTtBQUFBLEVBQ04sWUFBVztBQUFBLEVBQ1gsT0FBTTtBQUFBLEVBQ04sV0FBVTtBQUFBLEVBQ1YsY0FBYTtBQUFBLEVBQ2IsT0FBTTtBQUFBLEVBQ04sT0FBTTtBQUFBLEVBQ04sVUFBUztBQUFBLEVBQ1QsS0FBSTtBQUFBLEVBQ0osUUFBTztBQUFBLEVBQ1AsYUFBWTtBQUFBLEVBQ1osT0FBTTtBQUFBLEVBQ04sU0FBUTtBQUFBLEVBQ1IsUUFBTztBQUFBLEVBQ1AsVUFBUztBQUFBLEVBQ1QsVUFBUztBQUFBLEVBQ1QsaUJBQWdCO0FBQUEsRUFDaEIsWUFBVztBQUFBLEVBQ1gsVUFBUztBQUFBLEVBQ1QsY0FBYTtBQUFBLEVBQ2IsT0FBTTtBQUFBLEVBQ04sTUFBSztBQUFBLEVBQ0wsUUFBTztBQUFBLEVBQ1AsZ0JBQWU7QUFBQSxFQUNmLFVBQVM7QUFBQSxFQUNULE9BQU07QUFBQSxFQUNOLE9BQU07QUFBQSxFQUNOLFVBQVM7QUFBQSxFQUNULE9BQU07QUFBQSxFQUNOLFNBQVE7QUFBQSxFQUNSLE9BQU07QUFBQSxFQUNOLFVBQVM7QUFBQSxFQUNULGlCQUFnQjtBQUFBLEVBQ2hCLFFBQU87QUFBQSxFQUNQLE9BQU07QUFBQSxFQUNOLFVBQVM7QUFBQSxFQUNULFVBQVM7QUFBQSxFQUNULFNBQVE7QUFBQSxFQUNSLDRCQUEyQjtBQUFBLEVBQzNCLFFBQU87QUFBQSxFQUNQLFdBQVU7QUFBQSxFQUNWLE9BQU07QUFBQSxFQUNOLE9BQU07QUFBQSxFQUNOLHFCQUFvQjtBQUFBLEVBQ3BCLE9BQU07QUFBQSxFQUNOLFNBQVE7QUFBQSxFQUNSLFlBQVc7QUFBQSxFQUNYLFVBQVM7QUFBQSxFQUNULFdBQVU7QUFBQSxFQUNWLE1BQUs7QUFBQSxFQUNMLFdBQVU7QUFBQSxFQUNWLE9BQU07QUFBQSxFQUNOLFFBQU87QUFBQSxFQUNQLE1BQUs7QUFBQSxFQUNMLE9BQU07QUFBQSxFQUNOLGlCQUFnQjtBQUFBLEVBQ2hCLE1BQUs7QUFBQSxFQUNMLE1BQUs7QUFBQSxFQUNMLGFBQVk7QUFBQSxFQUNaLFVBQVM7QUFBQSxFQUNULFVBQVM7QUFBQSxFQUNULFdBQVU7QUFBQSxFQUNWLFVBQVM7QUFBQSxFQUNULFFBQU87QUFBQSxFQUNQLGNBQWE7QUFBQSxFQUNiLE9BQU07QUFBQSxFQUNOLFlBQVc7QUFBQSxFQUNYLFdBQVU7QUFBQSxFQUNWLE1BQUs7QUFBQSxFQUNMLFFBQU87QUFBQSxFQUNQLE9BQU07QUFBQSxFQUNOLFFBQU87QUFBQSxFQUNQLFFBQU87QUFBQSxFQUNQLFFBQU87QUFBQSxFQUNQLFFBQU87QUFBQSxFQUNQLFFBQU87QUFBQSxFQUNQLGFBQVk7QUFBQSxFQUNaLFFBQU87QUFBQSxFQUNQLHNCQUFxQjtBQUFBLEVBQ3JCLFNBQVE7QUFBQSxFQUNSLE9BQU07QUFBQSxFQUNOLFdBQVU7QUFBQSxFQUNWLE9BQU07QUFBQSxFQUNOLE1BQUs7QUFBQSxFQUNMLEtBQUk7QUFBQSxFQUNKLFFBQU87QUFBQSxFQUNQLFdBQVU7QUFBQSxFQUNWLGVBQWM7QUFBQSxFQUNkLGtCQUFpQjtBQUFBLEVBQ2pCLFFBQU87QUFBQSxFQUNQLFNBQVE7QUFBQSxFQUNSLE1BQUs7QUFBQSxFQUNMLFNBQVE7QUFBQSxFQUNSLGFBQVk7QUFBQSxFQUNaLFFBQU87QUFBQSxFQUNQLGVBQWM7QUFBQSxFQUNkLFNBQVE7QUFBQSxFQUNSLFNBQVE7QUFBQSxFQUNSLGdCQUFlO0FBQUEsRUFDZixnQkFBZTtBQUFBLEVBQ2YsU0FBUTtBQUFBLEVBQ1IsY0FBYTtBQUFBLEVBQ2IsVUFBUztBQUFBLEVBQ1QsVUFBUztBQUFBLEVBQ1QsTUFBSztBQUFBLEVBQ0wsT0FBTTtBQUFBLEVBQ04sU0FBUTtBQUFBLEVBQ1IsT0FBTTtBQUFBLEVBQ04sU0FBUTtBQUFBLEVBQ1IsU0FBUTtBQUFBLEVBQ1IsT0FBTTtBQUFBLEVBQ04sV0FBVTtBQUFBLEVBQ1YsU0FBUTtBQUFBLEVBQ1IsUUFBTztBQUFBLEVBQ1AsWUFBVztBQUFBLEVBQ1gsTUFBSztBQUFBLEVBQ0wsVUFBUztBQUFBLEVBQ1QsUUFBTztBQUFBLEVBQ1AsU0FBUTtBQUFBLEVBQ1IsU0FBUTtBQUFBLEVBQ1IsY0FBYTtBQUFBLEVBQ2IsY0FBYTtBQUFBLEVBQ2IsUUFBTztBQUFBLEVBQ1AsT0FBTTtBQUFBLEVBQ04sV0FBVTtBQUFBLEVBQ1YsT0FBTTtBQUFBLEVBQ04sU0FBUTtBQUFBLEVBQ1IsWUFBVztBQUFBLEVBQ1gsWUFBVztBQUFBLEVBQ1gsTUFBSztBQUFBLEVBQ0wscUJBQW9CO0FBQUEsRUFDcEIsUUFBTztBQUFBLEVBQ1AsVUFBUztBQUFBLEVBQ1QsYUFBWTtBQUFBLEVBQ1osT0FBTTtBQUFBLEVBQ04sV0FBVTtBQUFBLEVBQ1YsWUFBVztBQUFBLEVBQ1gsU0FBUTtBQUFBLEVBQ1IsV0FBVTtBQUFBLEVBQ1YsVUFBUztBQUFBLEVBQ1QsY0FBYTtBQUFBLEVBQ2IsUUFBTztBQUFBLEVBQ1AsUUFBTztBQUFBLEVBQ1AsUUFBTztBQUFBLEVBQ1AsU0FBUTtBQUFBLEVBQ1IsbUJBQWtCO0FBQUEsRUFDbEIsY0FBYTtBQUFBLEVBQ2IsUUFBTztBQUFBLEVBQ1AsUUFBTztBQUFBLEVBQ1AsUUFBTztBQUFBLEVBQ1AsU0FBUTtBQUFBLEVBQ1IsU0FBUTtBQUFBLEVBQ1IsT0FBTTtBQUFBLEVBQ04sT0FBTTtBQUFBLEVBQ04sUUFBTztBQUFBLEVBQ1AsY0FBYTtBQUFBLEVBQ2IsUUFBTztBQUFBLEVBQ1AsU0FBUTtBQUFBLEVBQ1IsUUFBTztBQUFBLEVBQ1AsVUFBUztBQUFBLEVBQ1QsWUFBVztBQUFBLEVBQ1gsUUFBTztBQUFBLEVBQ1AsTUFBSztBQUFBLEVBQ0wsVUFBUztBQUFBLEVBQ1QsVUFBUztBQUFBLEVBQ1QsVUFBUztBQUFBLEVBQ1QsYUFBWTtBQUFBLEVBQ1osT0FBTTtBQUFBLEVBQ04sVUFBUztBQUFBLEVBQ1QsTUFBSztBQUFBLEVBQ0wsY0FBYTtBQUFBLEVBQ2IsU0FBUTtBQUFBLEVBQ1IsUUFBTztBQUFBLEVBQ1AsT0FBTTtBQUFBLEVBQ04sVUFBUztBQUFBLEVBQ1QsY0FBYTtBQUFBLEVBQ2IsYUFBWTtBQUFBLEVBQ1osWUFBVztBQUFBLEVBQ1gsU0FBUTtBQUFBLEVBQ1IsY0FBYTtBQUFBLEVBQ2IsTUFBSztBQUFBLEVBQ0wsV0FBVTtBQUFBLEVBQ1YsY0FBYTtBQUFBLEVBQ2IsY0FBYTtBQUFBLEVBQ2IsVUFBUztBQUFBLEVBQ1QsVUFBUztBQUFBLEVBQ1QsY0FBYTtBQUFBLEVBQ2IsWUFBVztBQUFBLEVBQ1gsT0FBTTtBQUFBLEVBQ04sVUFBUztBQUFBLEVBQ1QsUUFBTztBQUFBLEVBQ1AsYUFBWTtBQUFBLEVBQ1osVUFBUztBQUFBLEVBQ1QsY0FBYTtBQUFBLEVBQ2IsUUFBTztBQUFBLEVBQ1AsVUFBUztBQUFBLEVBQ1QsTUFBSztBQUFBLEVBQ0wsVUFBUztBQUFBLEVBQ1QsTUFBSztBQUFBLEVBQ0wsS0FBSTtBQUFBLEVBQ0osT0FBTTtBQUFBLEVBQ04sUUFBTztBQUFBLEVBQ1AsS0FBSTtBQUFBLEVBQ0osVUFBUztBQUFBLEVBQ1QsT0FBTTtBQUFBLEVBQ04sVUFBUztBQUFBLEVBQ1QsT0FBTTtBQUFBLEVBQ04sT0FBTTtBQUFBLEVBQ04sVUFBUztBQUFBLEVBQ1QsU0FBUTtBQUFBLEVBQ1IsUUFBTztBQUFBLEVBQ1AsU0FBUTtBQUFBLEVBQ1IsT0FBTTtBQUFBLEVBQ04sWUFBVztBQUFBLEVBQ1gsT0FBTTtBQUFBLEVBQ04sUUFBTztBQUFBLEVBQ1AsT0FBTTtBQUFBLEVBQ04sWUFBVztBQUFB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SUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsY0FBYztBQUFBLElBQ2IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxZQUFZO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsS0FBSztBQUFBLElBQ0osUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sZUFBZTtBQUFBLE1BQ2Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sZUFBZTtBQUFBLE1BQ2Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsV0FBVztBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsZ0JBQWdCO0FBQUEsSUFDZixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsV0FBVztBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsS0FBSztBQUFBLElBQ0osUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sZUFBZTtBQUFBLE1BQ2Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsaUJBQWlCO0FBQUEsSUFDaEIsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxrQkFBa0I7QUFBQSxJQUNqQixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsZ0JBQWdCO0FBQUEsSUFDZixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsNEJBQTRCO0FBQUEsSUFDM0IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxXQUFXO0FBQUEsSUFDVixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsZ0NBQWdDO0FBQUEsSUFDL0IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLHNCQUFzQjtBQUFBLElBQ3JCLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsWUFBWTtBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1osUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsV0FBVztBQUFBLElBQ1YsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsY0FBYztBQUFBLElBQ2IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFdBQVc7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDTCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sZUFBZTtBQUFBLE1BQ2Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsY0FBYztBQUFBLElBQ2IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sZUFBZTtBQUFBLE1BQ2Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsSUFDTixlQUFlO0FBQUEsTUFDZDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDYixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsWUFBWTtBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFdBQVc7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsSUFDTixlQUFlO0FBQUEsTUFDZDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxZQUFZO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sZUFBZTtBQUFBLE1BQ2Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsYUFBYTtBQUFBLElBQ1osUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxXQUFXO0FBQUEsSUFDVixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLGVBQWU7QUFBQSxNQUNkO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsaUJBQWlCO0FBQUEsSUFDaEIsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLGVBQWU7QUFBQSxJQUNkLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sZUFBZTtBQUFBLE1BQ2Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sZUFBZTtBQUFBLE1BQ2Q7QUFBQSxNQUNBO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUNBLFVBQVU7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDYixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsWUFBWTtBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLGNBQWM7QUFBQSxJQUNiLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDYixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsSUFDTixlQUFlO0FBQUEsTUFDZDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDYixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLG9CQUFvQjtBQUFBLElBQ25CLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLGNBQWM7QUFBQSxJQUNiLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsSUFDTixlQUFlO0FBQUEsTUFDZDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxxQkFBcUI7QUFBQSxJQUNwQixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0wsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxLQUFLO0FBQUEsSUFDSixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsSUFDTixlQUFlO0FBQUEsTUFDZDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsWUFBWTtBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLGFBQWE7QUFBQSxJQUNaLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxhQUFhO0FBQUEsSUFDWixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxZQUFZO0FBQUEsSUFDWCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsMkJBQTJCO0FBQUEsSUFDMUIsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLG1CQUFtQjtBQUFBLElBQ2xCLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsSUFDTixlQUFlO0FBQUEsTUFDZDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLGVBQWU7QUFBQSxJQUNkLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxlQUFlO0FBQUEsSUFDZCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsU0FBUztBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLGlCQUFpQjtBQUFBLElBQ2hCLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxTQUFTO0FBQUEsSUFDUixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLHVCQUF1QjtBQUFBLElBQ3RCLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxpQkFBaUI7QUFBQSxJQUNoQixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsVUFBVTtBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxxQ0FBcUM7QUFBQSxJQUNwQyxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sZUFBZTtBQUFBLE1BQ2Q7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUFBLEVBQ0EsWUFBWTtBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLGVBQWU7QUFBQSxNQUNkO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUNBLGFBQWE7QUFBQSxJQUNaLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFNBQVM7QUFBQSxJQUNSLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLGVBQWU7QUFBQSxNQUNkO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUNBLDhCQUE4QjtBQUFBLElBQzdCLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxpQkFBaUI7QUFBQSxJQUNoQixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsMEJBQTBCO0FBQUEsSUFDekIsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLDBCQUEwQjtBQUFBLElBQ3pCLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0Esc0JBQXNCO0FBQUEsSUFDckIsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxJQUNOLGVBQWU7QUFBQSxNQUNkO0FBQUEsSUFDRDtBQUFBLEVBQ0Q7QUFBQSxFQUNBLFdBQVc7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDUCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsWUFBWTtBQUFBLElBQ1gsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDYixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsSUFDTixlQUFlO0FBQUEsTUFDZDtBQUFBLElBQ0Q7QUFBQSxFQUNEO0FBQUEsRUFDQSxjQUFjO0FBQUEsSUFDYixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsS0FBSztBQUFBLElBQ0osUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsT0FBTztBQUFBLElBQ04sUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFlBQVk7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxXQUFXO0FBQUEsSUFDVixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxnQkFBZ0I7QUFBQSxJQUNmLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxlQUFlO0FBQUEsSUFDZCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0Esb0JBQW9CO0FBQUEsSUFDbkIsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLE9BQU87QUFBQSxJQUNOLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxVQUFVO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLEVBQ1A7QUFBQSxFQUNBLFFBQVE7QUFBQSxJQUNQLFFBQVE7QUFBQSxJQUNSLE1BQU07QUFBQSxFQUNQO0FBQUEsRUFDQSxPQUFPO0FBQUEsSUFDTixRQUFRO0FBQUEsSUFDUixNQUFNO0FBQUEsRUFDUDtBQUNEO0FBRUEsSUFBTSxnQ0FBK0MsQ0FBQyxjQUFhLGNBQWEsUUFBTyxVQUFTLFdBQVUsTUFBSyxNQUFLLE1BQUssTUFBSyxNQUFNO0FBQ3BJLElBQU0sbUNBQWtELENBQUMsTUFBSyxNQUFLLE1BQUssUUFBTyxPQUFNLFVBQVMsT0FBTSxVQUFTLFNBQVEsVUFBUyxLQUFJLE1BQUssUUFBTyxRQUFPLGNBQWEsVUFBUyxlQUFjLFdBQVUsU0FBUSxVQUFTLFVBQVMsS0FBSSxRQUFPLFFBQU8sU0FBUSxPQUFNLFVBQVMsVUFBUyxhQUFhO0FBRXJSLElBQU0sbUNBQW1DLENBQUMsR0FBRywrQkFBOEIsR0FBRyxnQ0FBZ0M7OztBQ3RsRXJILHNCQUFtSztBQUNuSyxtQkFBa0I7OztBQ0RsQixJQUFJLElBQUUsV0FBVTtBQUFDLFNBQU8sSUFBRSxPQUFPLFVBQVEsU0FBU0csSUFBRTtBQUFDLGFBQVFDLElBQUVDLEtBQUUsR0FBRUMsS0FBRSxVQUFVLFFBQU9ELEtBQUVDLElBQUVEO0FBQUksZUFBUUUsTUFBS0gsS0FBRSxVQUFVQyxFQUFDO0FBQUUsZUFBTyxVQUFVLGVBQWUsS0FBS0QsSUFBRUcsRUFBQyxNQUFJSixHQUFFSSxFQUFDLElBQUVILEdBQUVHLEVBQUM7QUFBRyxXQUFPSjtBQUFBLEVBQUMsR0FBRSxFQUFFLE1BQU0sTUFBSyxTQUFTO0FBQUM7QUFBRSxTQUFTLEVBQUVBLElBQUVDLElBQUVDLElBQUU7QUFBQyxNQUFHQSxNQUFHLE1BQUksVUFBVTtBQUFPLGFBQVFDLElBQUVDLEtBQUUsR0FBRUMsS0FBRUosR0FBRSxRQUFPRyxLQUFFQyxJQUFFRDtBQUFJLE9BQUNELE1BQUdDLE1BQUtILE9BQUlFLE9BQUlBLEtBQUUsTUFBTSxVQUFVLE1BQU0sS0FBS0YsSUFBRSxHQUFFRyxFQUFDLElBQUdELEdBQUVDLEVBQUMsSUFBRUgsR0FBRUcsRUFBQztBQUFHLFNBQU9KLEdBQUUsT0FBT0csTUFBRyxNQUFNLFVBQVUsTUFBTSxLQUFLRixFQUFDLENBQUM7QUFBQztBQUFDLElBQUk7QUFBSixJQUFNO0FBQU4sSUFBUTtBQUFSLElBQVU7QUFBRSxDQUFDLFNBQVNELElBQUU7QUFBQyxFQUFBQSxHQUFFLE1BQUksT0FBTUEsR0FBRSxNQUFJLE9BQU1BLEdBQUUsTUFBSSxPQUFNQSxHQUFFLE9BQUs7QUFBTSxFQUFFLE1BQUksSUFBRSxDQUFDLEVBQUUsR0FBRSxTQUFTQSxJQUFFO0FBQUMsRUFBQUEsR0FBRSxZQUFVLGFBQVlBLEdBQUUsZ0JBQWMsaUJBQWdCQSxHQUFFLHNCQUFvQix1QkFBc0JBLEdBQUUsVUFBUSxXQUFVQSxHQUFFLFdBQVMsWUFBV0EsR0FBRSxTQUFPO0FBQVEsRUFBRSxNQUFJLElBQUUsQ0FBQyxFQUFFLEdBQUUsU0FBU0EsSUFBRTtBQUFDLEVBQUFBLEdBQUUsV0FBUyxZQUFXQSxHQUFFLGNBQVk7QUFBYSxFQUFFLE1BQUksSUFBRSxDQUFDLEVBQUUsR0FBRSxTQUFTQSxJQUFFO0FBQUMsRUFBQUEsR0FBRSxRQUFNLFdBQVVBLEdBQUUsU0FBTyxXQUFVQSxHQUFFLE9BQUssV0FBVUEsR0FBRSxRQUFNLFdBQVVBLEdBQUUsU0FBTyxXQUFVQSxHQUFFLE1BQUksV0FBVUEsR0FBRSxTQUFPLFdBQVVBLEdBQUUsVUFBUSxXQUFVQSxHQUFFLFFBQU0sV0FBVUEsR0FBRSxPQUFLLFdBQVVBLEdBQUUsUUFBTSxXQUFVQSxHQUFFLFNBQU8sV0FBVUEsR0FBRSxPQUFLLFdBQVVBLEdBQUUsT0FBSyxXQUFVQSxHQUFFLE9BQUssV0FBVUEsR0FBRSxPQUFLLFdBQVVBLEdBQUUsU0FBTyxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxlQUFhLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLFFBQU0sV0FBVUEsR0FBRSxRQUFNLFdBQVVBLEdBQUUsU0FBTyxXQUFVQSxHQUFFLGlCQUFlLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLFFBQU0sV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLGFBQVcsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsUUFBTSxXQUFVQSxHQUFFLGlCQUFlLFdBQVVBLEdBQUUsV0FBUyxXQUFVQSxHQUFFLFVBQVEsV0FBVUEsR0FBRSxPQUFLLFdBQVVBLEdBQUUsV0FBUyxXQUFVQSxHQUFFLFdBQVMsV0FBVUEsR0FBRSxnQkFBYyxXQUFVQSxHQUFFLFdBQVMsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsV0FBUyxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxjQUFZLFdBQVVBLEdBQUUsaUJBQWUsV0FBVUEsR0FBRSxhQUFXLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLFVBQVEsV0FBVUEsR0FBRSxhQUFXLFdBQVVBLEdBQUUsZUFBYSxXQUFVQSxHQUFFLGdCQUFjLFdBQVVBLEdBQUUsZ0JBQWMsV0FBVUEsR0FBRSxnQkFBYyxXQUFVQSxHQUFFLGdCQUFjLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLFdBQVMsV0FBVUEsR0FBRSxjQUFZLFdBQVVBLEdBQUUsVUFBUSxXQUFVQSxHQUFFLFVBQVEsV0FBVUEsR0FBRSxhQUFXLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLGNBQVksV0FBVUEsR0FBRSxjQUFZLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLGFBQVcsV0FBVUEsR0FBRSxPQUFLLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLGNBQVksV0FBVUEsR0FBRSxPQUFLLFdBQVVBLEdBQUUsV0FBUyxXQUFVQSxHQUFFLFVBQVEsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsU0FBTyxXQUFVQSxHQUFFLFFBQU0sV0FBVUEsR0FBRSxRQUFNLFdBQVVBLEdBQUUsV0FBUyxXQUFVQSxHQUFFLGdCQUFjLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLGVBQWEsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSx1QkFBcUIsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsY0FBWSxXQUFVQSxHQUFFLGdCQUFjLFdBQVVBLEdBQUUsZUFBYSxXQUFVQSxHQUFFLGlCQUFlLFdBQVVBLEdBQUUsaUJBQWUsV0FBVUEsR0FBRSxpQkFBZSxXQUFVQSxHQUFFLGNBQVksV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsUUFBTSxXQUFVQSxHQUFFLFVBQVEsV0FBVUEsR0FBRSxtQkFBaUIsV0FBVUEsR0FBRSxhQUFXLFdBQVVBLEdBQUUsZUFBYSxXQUFVQSxHQUFFLGVBQWEsV0FBVUEsR0FBRSxpQkFBZSxXQUFVQSxHQUFFLGtCQUFnQixXQUFVQSxHQUFFLG9CQUFrQixXQUFVQSxHQUFFLGtCQUFnQixXQUFVQSxHQUFFLGtCQUFnQixXQUFVQSxHQUFFLGVBQWEsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLFdBQVMsV0FBVUEsR0FBRSxjQUFZLFdBQVVBLEdBQUUsVUFBUSxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsU0FBTyxXQUFVQSxHQUFFLGdCQUFjLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLGdCQUFjLFdBQVVBLEdBQUUsZ0JBQWMsV0FBVUEsR0FBRSxhQUFXLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLE9BQUssV0FBVUEsR0FBRSxPQUFLLFdBQVVBLEdBQUUsT0FBSyxXQUFVQSxHQUFFLGFBQVcsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLGNBQVksV0FBVUEsR0FBRSxTQUFPLFdBQVVBLEdBQUUsYUFBVyxXQUFVQSxHQUFFLFdBQVMsV0FBVUEsR0FBRSxXQUFTLFdBQVVBLEdBQUUsU0FBTyxXQUFVQSxHQUFFLFVBQVEsV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsWUFBVSxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxPQUFLLFdBQVVBLEdBQUUsY0FBWSxXQUFVQSxHQUFFLFlBQVUsV0FBVUEsR0FBRSxNQUFJLFdBQVVBLEdBQUUsVUFBUSxXQUFVQSxHQUFFLFNBQU8sV0FBVUEsR0FBRSxZQUFVLFdBQVVBLEdBQUUsU0FBTyxXQUFVQSxHQUFFLFFBQU0sV0FBVUEsR0FBRSxhQUFXLFdBQVVBLEdBQUUsY0FBWSxXQUFVQSxHQUFFLGdCQUFjO0FBQVMsRUFBRSxNQUFJLElBQUUsQ0FBQyxFQUFFO0FBQUUsSUFBSTtBQUFKLElBQU07QUFBTixJQUFRLElBQUUsT0FBTyxLQUFLLENBQUM7QUFBdkIsSUFBeUIsSUFBRSxFQUFDLEtBQUksQ0FBQyxLQUFJLEtBQUksS0FBSSxHQUFHLEdBQUUsS0FBSSxDQUFDLEtBQUksS0FBSSxLQUFJLEdBQUcsR0FBRSxLQUFJLENBQUMsS0FBSSxLQUFJLEtBQUksR0FBRyxHQUFFLE1BQUssQ0FBQyxLQUFJLEtBQUksS0FBSSxLQUFJLEdBQUcsRUFBQztBQUF4SCxJQUEwSCxJQUFFLEVBQUMsS0FBSSxFQUFFLEtBQUksTUFBSyxFQUFFLEtBQUksS0FBSSxFQUFFLEtBQUksTUFBSyxFQUFFLEtBQUksTUFBSyxFQUFFLE1BQUssT0FBTSxFQUFFLEtBQUk7QUFBRSxDQUFDLFNBQVNBLElBQUU7QUFBQyxFQUFBQSxHQUFFLFNBQU8sVUFBU0EsR0FBRSxVQUFRO0FBQVMsRUFBRSxNQUFJLElBQUUsQ0FBQyxFQUFFO0FBQUUsSUFBSTtBQUFKLElBQU07QUFBTixJQUFRO0FBQVIsSUFBVSxNQUFJLElBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFFLG1HQUFrRyxFQUFFLEVBQUUsR0FBRyxJQUFFLGdOQUErTSxFQUFFLEVBQUUsR0FBRyxJQUFFLHdQQUF1UCxFQUFFLEVBQUUsSUFBSSxJQUFFLDJRQUEwUTtBQUF6MkIsSUFBNDJCLElBQUU7QUFBOTJCLElBQTQ1QixJQUFFO0FBQTk1QixJQUF5N0IsSUFBRTtBQUEzN0IsSUFBaTlCLElBQUU7QUFBbjlCLElBQWcrQixJQUFFO0FBQWwrQixJQUErK0IsSUFBRTtBQUFqL0IsSUFBcy9CLElBQUU7QUFBeC9CLElBQWtqQyxJQUFFO0FBQW1FLENBQUMsU0FBU0EsSUFBRTtBQUFDLEVBQUFBLEdBQUUsT0FBSyxRQUFPQSxHQUFFLFVBQVEsT0FBTUEsR0FBRSxXQUFTLFFBQU9BLEdBQUUsVUFBUSxPQUFNQSxHQUFFLFFBQU07QUFBTSxFQUFFLE1BQUksSUFBRSxDQUFDLEVBQUUsR0FBRSxTQUFTQSxJQUFFO0FBQUMsRUFBQUEsR0FBRSxPQUFLLFFBQU9BLEdBQUUsVUFBUTtBQUFTLEVBQUUsTUFBSSxJQUFFLENBQUMsRUFBRSxHQUFFLFNBQVNBLElBQUU7QUFBQyxFQUFBQSxHQUFFLGNBQVksZUFBY0EsR0FBRSxPQUFLO0FBQU0sRUFBRSxNQUFJLElBQUUsQ0FBQyxFQUFFO0FBQUUsSUFBSTtBQUFKLElBQU07QUFBTixJQUFRO0FBQVIsSUFBVTtBQUFWLElBQVk7QUFBWixJQUFjO0FBQWQsSUFBZ0IsSUFBRSxFQUFDLFVBQVMsR0FBRSxXQUFVLE9BQUcsbUJBQWtCLE9BQUcsWUFBVyxFQUFFLE1BQUssU0FBUSxFQUFFLE1BQUssVUFBUyxFQUFFLFNBQVEsV0FBVSxFQUFFLE1BQUssY0FBYSxFQUFFLFlBQVc7QUFBL0osSUFBaUssSUFBRSxTQUFTQSxJQUFFQyxJQUFFO0FBQUMsU0FBTyxPQUFPLFVBQVUsZUFBZSxLQUFLRCxJQUFFQyxFQUFDO0FBQUM7QUFBak8sSUFBbU8sSUFBRSxTQUFTRCxJQUFFO0FBQUMsU0FBTSxDQUFDLEdBQUcsT0FBT0EsRUFBQyxFQUFFLFFBQVEsR0FBRSxJQUFJO0FBQUM7QUFBcFIsSUFBc1IsSUFBRSxTQUFTQSxJQUFFO0FBQUMsU0FBTyxFQUFFLEtBQUssR0FBRyxPQUFPQSxFQUFDLENBQUMsSUFBRSxFQUFFQSxFQUFDLElBQUUsS0FBSyxJQUFJLENBQUNBLElBQUUsR0FBRztBQUFDO0FBQXJWLElBQXVWLElBQUUsU0FBU0EsSUFBRTtBQUFDLFNBQU8sTUFBSUEsR0FBRSxXQUFTQSxNQUFHQSxLQUFHLFNBQVNBLElBQUUsRUFBRTtBQUFDO0FBQS9ZLElBQWlaLElBQUUsU0FBU0EsSUFBRTtBQUFDLE1BQUlDLEtBQUUsRUFBRUQsSUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsWUFBWTtBQUFFLFNBQU8sTUFBSUMsR0FBRSxTQUFPLE1BQU0sT0FBT0EsRUFBQyxJQUFFLEtBQUssT0FBT0EsRUFBQztBQUFDO0FBQXpmLElBQTJmLElBQUUsU0FBU0QsSUFBRUMsSUFBRTtBQUFDLFNBQU8sV0FBU0EsT0FBSUEsS0FBRSxRQUFJLENBQUNBLE1BQUcsRUFBRSxLQUFLRCxFQUFDLElBQUUsS0FBSyxJQUFJLE1BQUksRUFBRUEsRUFBQyxJQUFFLEtBQUksR0FBRyxJQUFFLEVBQUUsS0FBS0EsRUFBQyxLQUFHLE1BQUlBLEdBQUUsV0FBU0EsTUFBR0EsR0FBRSxNQUFNLEVBQUUsSUFBR0MsS0FBRSxFQUFFRCxFQUFDLElBQUUsTUFBSSxFQUFFQSxFQUFDLEtBQUcsS0FBSyxJQUFJLENBQUNBLElBQUVDLEtBQUUsSUFBRSxHQUFHO0FBQUM7QUFBN3BCLElBQStwQixJQUFFLFNBQVNELElBQUU7QUFBQyxTQUFPLEtBQUssSUFBSSxFQUFFLEtBQUtBLEVBQUMsSUFBRSxFQUFFQSxFQUFDLElBQUUsTUFBSSxDQUFDQSxJQUFFLENBQUM7QUFBQztBQUFydEIsSUFBdXRCLElBQUUsU0FBU0EsSUFBRTtBQUFDLFNBQU8sRUFBRSxDQUFDLEdBQUVBLElBQUUsSUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxZQUFZO0FBQUM7QUFBcHhCLElBQXN4QixJQUFFLFNBQVNBLElBQUVDLElBQUU7QUFBQyxhQUFTQSxPQUFJQSxLQUFFO0FBQUcsTUFBSUMsS0FBRSxLQUFLLElBQUksSUFBR0QsRUFBQztBQUFFLFNBQU8sS0FBSyxNQUFNLENBQUNELEtBQUVFLEVBQUMsSUFBRUE7QUFBQztBQUF0MkIsSUFBdzJCLElBQUUsU0FBU0YsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLFNBQU8sS0FBSyxJQUFJRCxJQUFFLEtBQUssSUFBSUQsSUFBRUUsRUFBQyxDQUFDO0FBQUM7QUFBMTVCLElBQTQ1QixJQUFFLFNBQVNGLElBQUU7QUFBQyxNQUFHLFlBQVUsT0FBT0EsSUFBRTtBQUFDLFFBQUlDLEtBQUVELEdBQUUsTUFBTSxDQUFDLEdBQUVFLEtBQUUsQ0FBQ0QsR0FBRSxDQUFDO0FBQUUsWUFBT0EsR0FBRSxDQUFDLEdBQUU7QUFBQSxNQUFDLEtBQUssRUFBRTtBQUFRLFFBQUFELEtBQUUsRUFBRSxNQUFJRSxLQUFFLEtBQUssRUFBRTtBQUFFO0FBQUEsTUFBTSxLQUFLLEVBQUU7QUFBTSxRQUFBRixLQUFFLEVBQUUsTUFBSUUsRUFBQztBQUFFO0FBQUEsTUFBTSxLQUFLLEVBQUU7QUFBUyxRQUFBRixLQUFFLEVBQUUsTUFBR0UsRUFBQztBQUFFO0FBQUEsTUFBTSxLQUFLLEVBQUU7QUFBQSxNQUFRO0FBQVEsUUFBQUYsS0FBRUU7QUFBQSxJQUFDO0FBQUEsRUFBQztBQUFDLFVBQU9GLEtBQUUsT0FBS0EsS0FBRSxPQUFLQSxNQUFHLE1BQUksS0FBSyxNQUFNQSxLQUFFLEdBQUcsSUFBR0E7QUFBQztBQUF6cEMsSUFBMnBDLElBQUUsU0FBU0EsSUFBRUMsSUFBRTtBQUFDLE1BQUlDO0FBQUUsVUFBT0QsSUFBRTtBQUFBLElBQUMsS0FBSyxFQUFFO0FBQVEsTUFBQUMsS0FBRSxFQUFFLFNBQVNGLElBQUU7QUFBQyxlQUFPQSxLQUFFLEtBQUssS0FBRztBQUFBLE1BQUcsRUFBRUEsRUFBQyxDQUFDO0FBQUU7QUFBQSxJQUFNLEtBQUssRUFBRTtBQUFNLE1BQUFFLEtBQUUsRUFBRUYsS0FBRSxHQUFHO0FBQUU7QUFBQSxJQUFNLEtBQUssRUFBRTtBQUFTLE1BQUFFLEtBQUUsRUFBRSxLQUFHLElBQUVGLEVBQUM7QUFBRTtBQUFBLElBQU0sS0FBSyxFQUFFO0FBQUEsSUFBUSxLQUFLLEVBQUU7QUFBQSxJQUFLO0FBQVEsTUFBQUUsS0FBRUY7QUFBQSxFQUFDO0FBQUMsU0FBT0U7QUFBQztBQUF6MkMsSUFBMjJDLElBQUUsU0FBU0YsSUFBRTtBQUFDLFdBQVFDLEtBQUUsQ0FBQyxHQUFFQyxLQUFFLEdBQUVBLEtBQUUsVUFBVSxRQUFPQTtBQUFJLElBQUFELEdBQUVDLEtBQUUsQ0FBQyxJQUFFLFVBQVVBLEVBQUM7QUFBRSxXQUFRQyxLQUFFLENBQUMsR0FBRUMsS0FBRSxDQUFDLEdBQUVDLEtBQUUsQ0FBQyxHQUFFQyxLQUFFLENBQUMsR0FBRUMsS0FBRSxDQUFDLEdBQUVDLEtBQUUsT0FBTyxPQUFPLENBQUMsR0FBRUMsS0FBRSxPQUFPLE9BQU8sQ0FBQyxHQUFFQyxLQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUVDLEtBQUUsRUFBQyxXQUFVLEdBQUUsbUJBQWtCLEdBQUUsY0FBYSxFQUFDLEdBQUVDLEtBQUUsR0FBRUMsS0FBRVosSUFBRVcsS0FBRUMsR0FBRSxRQUFPRCxNQUFJO0FBQUMsUUFBSUUsS0FBRUQsR0FBRUQsRUFBQztBQUFFLFFBQUcsWUFBVSxPQUFPRSxJQUFFO0FBQUMsVUFBR1gsR0FBRSxLQUFLVyxFQUFDLEdBQUVBLEdBQUUsU0FBUyxHQUFHLEdBQUU7QUFBQyxRQUFBSCxHQUFFO0FBQVksWUFBSUksS0FBRUQsR0FBRSxNQUFNLENBQUM7QUFBRSxjQUFJLElBQUksSUFBSUMsRUFBQyxFQUFFLFFBQU0sRUFBRSxLQUFLQSxHQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFHSixHQUFFO0FBQUEsTUFBbUI7QUFBQyxVQUFHRyxHQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUU7QUFBQyxZQUFJRSxNQUFHQyxLQUFFSCxHQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFHRyxHQUFFLENBQUMsR0FBRUMsS0FBRUQsR0FBRSxDQUFDLEdBQUVFLEtBQUVILEdBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztBQUFFLFFBQUFaLEdBQUUsS0FBSyxPQUFLZSxLQUFFLEVBQUUsT0FBS0EsRUFBQyxHQUFFWixHQUFFLEtBQUssRUFBRSxLQUFLVyxFQUFDLENBQUM7QUFBRTtBQUFBLE1BQVE7QUFBQyxVQUFHLEVBQUUsSUFBSSxLQUFLSixFQUFDLEdBQUU7QUFBQyxZQUFJTSxNQUFHSCxLQUFFSCxHQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFHRyxHQUFFLENBQUMsR0FBRUksS0FBRUosR0FBRSxDQUFDLEtBQUdBLEdBQUUsQ0FBQyxHQUFFSyxLQUFFTCxHQUFFLENBQUMsS0FBR0EsR0FBRSxDQUFDLEdBQUVNLEtBQUVOLEdBQUUsQ0FBQztBQUFFLFFBQUFaLEdBQUUsS0FBSyxFQUFFLEtBQUtlLEVBQUMsS0FBRyxFQUFFLEtBQUtDLEVBQUMsS0FBRyxFQUFFLEtBQUtDLEVBQUMsQ0FBQyxHQUFFZixHQUFFLEtBQUssRUFBRSxLQUFLZ0IsRUFBQyxDQUFDO0FBQUU7QUFBQSxNQUFRO0FBQUMsVUFBR1QsR0FBRSxNQUFNLEVBQUUsSUFBSSxHQUFFO0FBQUMsWUFBSUcsSUFBRU8sTUFBR1AsS0FBRUgsR0FBRSxNQUFNLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBR0csR0FBRSxDQUFDLEdBQUVRLEtBQUVSLEdBQUUsQ0FBQyxLQUFHQSxHQUFFLENBQUMsR0FBRVMsS0FBRVQsR0FBRSxDQUFDLEtBQUdBLEdBQUUsQ0FBQyxHQUFFVSxLQUFFVixHQUFFLENBQUMsS0FBR0EsR0FBRSxDQUFDO0FBQUUsUUFBQU0sS0FBRU4sR0FBRSxFQUFFO0FBQUUsUUFBQVgsR0FBRSxLQUFLLEVBQUUsS0FBS2tCLEVBQUMsS0FBRyxFQUFFLEtBQUtDLEVBQUMsS0FBRyxFQUFFLEtBQUtDLEVBQUMsS0FBRyxFQUFFLEtBQUtDLEVBQUMsQ0FBQyxHQUFFYixHQUFFLFdBQVcsTUFBTSxLQUFHSCxHQUFFLGdCQUFlSixHQUFFLEtBQUssRUFBRSxLQUFLZ0IsRUFBQyxDQUFDO0FBQUEsTUFBQztBQUFBLElBQUM7QUFBQSxFQUFDO0FBQUMsU0FBTSxFQUFDLFVBQVMsT0FBT3ZCLEdBQUUsYUFBVyxFQUFFLFNBQU9BLEdBQUUsV0FBUyxFQUFFLFVBQVMsV0FBVSxPQUFPQSxHQUFFLGNBQVksRUFBRSxVQUFRQSxHQUFFLFlBQVUsUUFBUUcsR0FBRSxVQUFRUSxHQUFFLGNBQVlSLEdBQUUsTUFBTSxLQUFHLEVBQUUsV0FBVSxtQkFBa0IsT0FBT0gsR0FBRSxzQkFBb0IsRUFBRSxVQUFRQSxHQUFFLG9CQUFrQixRQUFRRyxHQUFFLFVBQVFRLEdBQUUsc0JBQW9CUixHQUFFLE1BQU0sS0FBRyxFQUFFLG1CQUFrQixZQUFXSCxHQUFFLGNBQVlRLEdBQUUsU0FBU1IsR0FBRSxVQUFVLElBQUVBLEdBQUUsYUFBVyxNQUFJLElBQUksSUFBSUksRUFBQyxFQUFFLE9BQUtBLEdBQUUsQ0FBQyxJQUFFLEVBQUUsWUFBVyxTQUFRSixHQUFFLFdBQVNTLEdBQUUsU0FBU1QsR0FBRSxPQUFPLElBQUVBLEdBQUUsVUFBUSxNQUFJLElBQUksSUFBSUssRUFBQyxFQUFFLFFBQU1BLEdBQUUsQ0FBQyxJQUFFLEVBQUUsVUFBUSxFQUFFLFNBQVEsVUFBU0wsR0FBRSxZQUFVUyxHQUFFLFNBQVNULEdBQUUsUUFBUSxJQUFFQSxHQUFFLFdBQVMsTUFBSSxJQUFJLElBQUlNLEVBQUMsRUFBRSxRQUFNQSxHQUFFLENBQUMsSUFBRSxFQUFFLFdBQVMsRUFBRSxNQUFLLFdBQVVOLEdBQUUsYUFBV1MsR0FBRSxTQUFTVCxHQUFFLFNBQVMsSUFBRUEsR0FBRSxZQUFVLE1BQUksSUFBSSxJQUFJTyxFQUFDLEVBQUUsUUFBTUEsR0FBRSxDQUFDLElBQUUsRUFBRSxVQUFRLEVBQUUsV0FBVSxjQUFhUCxHQUFFLGdCQUFjVSxHQUFFLFNBQVNWLEdBQUUsWUFBWSxJQUFFQSxHQUFFLGVBQWFNLEdBQUUsVUFBUUEsR0FBRSxXQUFTSyxHQUFFLGVBQWEsRUFBRSxPQUFLLEVBQUUsYUFBWTtBQUFDO0FBQWhrRyxJQUFra0csSUFBRSxTQUFTWCxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsU0FBT0EsS0FBRSxNQUFJQSxNQUFHLElBQUdBLE1BQUcsTUFBSUEsTUFBRyxJQUFHLEVBQUVBLEtBQUUsSUFBRSxRQUFNRCxLQUFFRCxNQUFHRSxLQUFFRixNQUFHRSxLQUFFLElBQUUsTUFBSUQsS0FBRUMsS0FBRSxJQUFFLFFBQU1ELEtBQUVELE9BQUksSUFBRUUsTUFBR0YsTUFBRyxNQUFJQSxFQUFDO0FBQUM7QUFBbHJHLElBQW9yRyxJQUFFLFNBQVNBLElBQUVDLElBQUVDLElBQUU7QUFBQyxFQUFBRCxNQUFHO0FBQUksTUFBSUUsTUFBR0QsTUFBRyxRQUFNLE1BQUdBLE1BQUdELEtBQUUsS0FBR0MsS0FBRUQsS0FBRUMsS0FBRUQsSUFBRUcsS0FBRSxJQUFFRixLQUFFQztBQUFFLFNBQU0sRUFBQyxHQUFFLEVBQUVDLElBQUVELEtBQUdILE1BQUcsTUFBSSxDQUFDLEdBQUUsR0FBRSxFQUFFSSxJQUFFRCxJQUFFSCxFQUFDLEdBQUUsR0FBRSxFQUFFSSxJQUFFRCxJQUFFSCxLQUFFLENBQUMsRUFBQztBQUFDO0FBQTF5RyxJQUE0eUcsSUFBRSxTQUFTQSxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsU0FBTSxFQUFDLEdBQUUsRUFBRSxPQUFLLElBQUVILE9BQUlHLEtBQUUsSUFBRUEsR0FBRSxHQUFFLEdBQUUsRUFBRSxPQUFLLElBQUVGLE1BQUdFLEVBQUMsR0FBRSxHQUFFLEVBQUUsT0FBSyxJQUFFRCxNQUFHQyxFQUFDLEVBQUM7QUFBQztBQUFoNEcsSUFBazRHLElBQUUsU0FBU0gsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLEVBQUFGLE1BQUcsS0FBSUMsTUFBRyxLQUFJQyxNQUFHO0FBQUksTUFBSUMsS0FBRSxJQUFFLEtBQUssSUFBSUgsSUFBRUMsSUFBRUMsRUFBQyxHQUFFRSxLQUFFLElBQUVELElBQUVFLEtBQUVELE9BQUlBLEtBQUVILE1BQUdHLElBQUV3QixLQUFFeEIsT0FBSUEsS0FBRUYsTUFBR0U7QUFBRSxTQUFNLEVBQUMsR0FBRSxFQUFFLE9BQUtBLE9BQUlBLEtBQUVKLE1BQUdJLEdBQUUsR0FBRSxHQUFFLEVBQUUsTUFBSUMsRUFBQyxHQUFFLEdBQUUsRUFBRSxNQUFJdUIsRUFBQyxHQUFFLEdBQUUsRUFBRSxNQUFJekIsRUFBQyxFQUFDO0FBQUM7QUFBL2hILElBQWlpSCxJQUFFLFNBQVNILElBQUVDLElBQUVDLElBQUVDLElBQUU7QUFBQyxhQUFTQSxPQUFJQSxLQUFFLElBQUdILE1BQUcsS0FBSUMsTUFBRyxLQUFJQyxNQUFHLEtBQUlDLEtBQUUsS0FBSyxJQUFJQSxJQUFFLENBQUM7QUFBRSxNQUFJQyxLQUFFLEtBQUssSUFBSUosSUFBRUMsSUFBRUMsRUFBQyxHQUFFRyxLQUFFLEtBQUssSUFBSUwsSUFBRUMsSUFBRUMsRUFBQyxHQUFFMEIsS0FBRXhCLEtBQUVDLElBQUVDLEtBQUUsR0FBRUMsS0FBRSxHQUFFQyxNQUFHSixLQUFFQyxNQUFHO0FBQUUsTUFBRyxNQUFJdUIsSUFBRTtBQUFDLFlBQU94QixJQUFFO0FBQUEsTUFBQyxLQUFLSjtBQUFFLFFBQUFNLE1BQUdMLEtBQUVDLE1BQUcwQixLQUFFO0FBQUU7QUFBQSxNQUFNLEtBQUszQjtBQUFFLFFBQUFLLE1BQUdKLEtBQUVGLE1BQUc0QixLQUFFO0FBQUU7QUFBQSxNQUFNLEtBQUsxQjtBQUFFLFFBQUFJLE1BQUdOLEtBQUVDLE1BQUcyQixLQUFFO0FBQUEsSUFBQztBQUFDLEtBQUN0QixLQUFFLEVBQUUsS0FBR0EsRUFBQyxLQUFHLE1BQUlBLE1BQUcsTUFBS0MsS0FBRXFCLE1BQUcsSUFBRSxLQUFLLElBQUksSUFBRXBCLEtBQUUsQ0FBQztBQUFBLEVBQUU7QUFBQyxTQUFNLEVBQUMsR0FBRUYsSUFBRSxHQUFFLEVBQUUsTUFBSUMsRUFBQyxHQUFFLEdBQUUsRUFBRSxNQUFJQyxFQUFDLEdBQUUsR0FBRUwsR0FBQztBQUFDO0FBQTExSCxJQUE0MUgsSUFBRSxTQUFTSCxJQUFFQyxJQUFFO0FBQUMsTUFBR0QsS0FBRSxNQUFJQSxNQUFHLE1BQUtBLEtBQUUsUUFBTUEsTUFBRyxNQUFLLFFBQU1BLE1BQUcsTUFBSUE7QUFBRSxXQUFPQTtBQUFFLE1BQUlFLEtBQUUsQ0FBQyxDQUFDLEdBQUUsR0FBRyxHQUFFLENBQUMsS0FBSSxHQUFHLEdBQUUsQ0FBQyxLQUFJLEdBQUcsR0FBRSxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUVDLEtBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxHQUFFLENBQUMsSUFBRyxHQUFHLEdBQUUsQ0FBQyxLQUFJLEdBQUcsR0FBRSxDQUFDLEtBQUksR0FBRyxDQUFDLEdBQUVDLEtBQUVILEtBQUVFLEtBQUVELElBQUVHLEtBQUUsR0FBRXVCLEtBQUUsR0FBRXRCLEtBQUUsR0FBRUMsS0FBRTtBQUFFLFVBQU9OLEtBQUVDLEtBQUVDLElBQUcsS0FBTSxTQUFTRixJQUFFQyxJQUFFO0FBQUMsV0FBT0YsTUFBR0MsR0FBRSxDQUFDLEtBQUdELEtBQUVDLEdBQUUsQ0FBQyxNQUFJSSxLQUFFSixHQUFFLENBQUMsR0FBRTJCLEtBQUUzQixHQUFFLENBQUMsR0FBRUssS0FBRUYsR0FBRUYsRUFBQyxFQUFFLENBQUMsR0FBRUssS0FBRUgsR0FBRUYsRUFBQyxFQUFFLENBQUMsR0FBRTtBQUFBLEVBQUcsQ0FBRSxHQUFFSSxNQUFHQyxL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LEtBQUUsS0FBSyxLQUFLRCxJQUFFTCxJQUFFRSxJQUFFSyxJQUFFSixFQUFDLElBQUUsS0FBSyxJQUFJRSxJQUFFTCxJQUFFRSxJQUFFSyxJQUFFSixFQUFDO0FBQUEsRUFBQztBQUFDLEVBQUMsR0FBRyxFQUFFLEdBQUcsSUFBRSxTQUFTSixJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsU0FBT0YsR0FBRUQsSUFBRUUsRUFBQyxFQUFFLElBQUssU0FBU0YsSUFBRTtBQUFDLFdBQU9HLEtBQUUsRUFBRSxJQUFJLEVBQUVILEdBQUUsR0FBRUEsR0FBRSxHQUFFQSxHQUFFLENBQUMsQ0FBQyxJQUFFLEdBQUcsSUFBSSxFQUFFQSxHQUFFLEdBQUVBLEdBQUUsR0FBRUEsR0FBRSxDQUFDLENBQUM7QUFBQSxFQUFDLENBQUU7QUFBQyxHQUFFLEVBQUUsT0FBSyxTQUFTQyxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsU0FBT0YsR0FBRUQsSUFBRUUsRUFBQyxFQUFFLElBQUssU0FBU0YsSUFBRTtBQUFDLFdBQU9HLEtBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRUgsR0FBRSxHQUFFQSxHQUFFLEdBQUVBLEdBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBQyxHQUFFLE1BQUksR0FBR0EsR0FBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDLElBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRUEsR0FBRSxHQUFFQSxHQUFFLEdBQUVBLEdBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBQyxHQUFFLEdBQUdBLEdBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUFBLEVBQUMsQ0FBRTtBQUFDLEdBQUUsRUFBRSxFQUFFLEdBQUcsSUFBRSxTQUFTRCxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsU0FBT0gsR0FBRUQsSUFBRUUsRUFBQyxFQUFFLElBQUssU0FBU0YsSUFBRTtBQUFDLFdBQU9HLEtBQUUsRUFBRSxJQUFJLEVBQUVILEdBQUUsR0FBRUEsR0FBRSxHQUFFQSxHQUFFLENBQUMsR0FBRUksRUFBQyxJQUFFLEdBQUcsSUFBSSxFQUFFSixHQUFFLEdBQUVBLEdBQUUsR0FBRUEsR0FBRSxDQUFDLEdBQUVJLEdBQUUsUUFBUTtBQUFBLEVBQUMsQ0FBRTtBQUFDLEdBQUUsRUFBRSxPQUFLLFNBQVNILElBQUVDLElBQUVDLElBQUVDLElBQUVDLElBQUU7QUFBQyxTQUFPSCxHQUFFRCxJQUFFRSxFQUFDLEVBQUUsSUFBSyxTQUFTRixJQUFFO0FBQUMsV0FBT0csS0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRSxFQUFFSCxHQUFFLEdBQUVBLEdBQUUsR0FBRUEsR0FBRSxDQUFDLENBQUMsR0FBRSxFQUFDLEdBQUUsR0FBR0EsR0FBRSxDQUFDLEVBQUMsQ0FBQyxHQUFFSSxFQUFDLElBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUUsRUFBRUosR0FBRSxHQUFFQSxHQUFFLEdBQUVBLEdBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBQyxHQUFFLEdBQUdBLEdBQUUsQ0FBQyxFQUFDLENBQUMsR0FBRUksR0FBRSxRQUFRO0FBQUEsRUFBQyxDQUFFO0FBQUMsR0FBRSxFQUFFLEVBQUUsR0FBRyxJQUFFLFNBQVNMLElBQUVDLElBQUVDLElBQUVDLElBQUVDLElBQUU7QUFBQyxTQUFPSCxHQUFFRCxJQUFFRSxFQUFDLEVBQUUsSUFBSyxTQUFTRixJQUFFO0FBQUMsV0FBT0csS0FBRSxFQUFFLElBQUksRUFBQyxHQUFFSCxHQUFFLEdBQUUsR0FBRUEsR0FBRSxHQUFFLEdBQUVBLEdBQUUsRUFBQyxHQUFFSSxFQUFDLElBQUUsR0FBRyxJQUFJLEVBQUVKLEdBQUUsR0FBRUEsR0FBRSxHQUFFQSxHQUFFLENBQUMsR0FBRUksR0FBRSxRQUFRO0FBQUEsRUFBQyxDQUFFO0FBQUMsR0FBRSxFQUFFLE9BQUssU0FBU0gsSUFBRUMsSUFBRUMsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLFNBQU9ILEdBQUVELElBQUVFLEVBQUMsRUFBRSxJQUFLLFNBQVNGLElBQUU7QUFBQyxXQUFPRyxL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LEdBQUUsR0FBRSxHQUFFLENBQUMsRUFBQztBQUFDLEVBQUMsR0FBRyxFQUFFLEdBQUcsSUFBRSxTQUFTSCxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsTUFBSUMsS0FBRSxLQUFLLElBQUlILElBQUVDLEVBQUM7QUFBRSxTQUFPLE9BQU9FLEdBQUUsR0FBRUQsS0FBRSxFQUFFLElBQUlDLEVBQUMsSUFBRSxHQUFHLElBQUlBLEVBQUM7QUFBQyxHQUFFLEVBQUUsT0FBSyxTQUFTSCxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsTUFBSUMsS0FBRSxLQUFLLElBQUlILElBQUVDLEVBQUM7QUFBRSxTQUFPRSxHQUFFLElBQUVELEtBQUUsTUFBSSxHQUFHQyxHQUFFLENBQUMsSUFBRSxHQUFHQSxHQUFFLENBQUMsR0FBRUQsS0FBRSxFQUFFLElBQUlDLEVBQUMsSUFBRSxHQUFHLEtBQUtBLEVBQUM7QUFBQyxHQUFFLEVBQUUsRUFBRSxHQUFHLElBQUUsU0FBU0gsSUFBRUMsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLE1BQUlDLEtBQUUsS0FBSyxJQUFJSixJQUFFQyxFQUFDO0FBQUUsU0FBTyxPQUFPRyxHQUFFLEdBQUVGLEtBQUUsRUFBRSxJQUFJRSxJQUFFRCxFQUFDLElBQUUsR0FBRyxJQUFJQyxJQUFFRCxHQUFFLFFBQVE7QUFBQyxHQUFFLEVBQUUsT0FBSyxTQUFTSCxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsTUFBSUMsS0FBRSxLQUFLLElBQUlKLElBQUVDLEVBQUM7QUFBRSxTQUFPQyxLQUFFLEVBQUUsSUFBSUUsSUFBRUQsRUFBQyxJQUFFLEdBQUcsS0FBS0MsSUFBRUQsR0FBRSxRQUFRO0FBQUMsR0FBRSxFQUFFLEVBQUUsR0FBRyxJQUFFLFNBQVNILElBQUVDLElBQUVDLElBQUVDLElBQUU7QUFBQyxNQUFJQyxLQUFFLEtBQUssSUFBSUosSUFBRUMsRUFBQyxHQUFFSSxLQUFFLEVBQUVELEdBQUUsR0FBRUEsR0FBRSxHQUFFQSxHQUFFLENBQUM7QUFBRSxTQUFPLE9BQU9BLEdBQUUsR0FBRSxPQUFP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QSxFQUFJLEdBQUVBLEdBQUUsVUFBVSxrQkFBZ0IsV0FBVTtBQUFDLFdBQU8sS0FBSyxrQkFBa0IsR0FBRSxLQUFLLFVBQVUsR0FBRTtBQUFBLEVBQUksR0FBRUEsR0FBRSxVQUFVLGFBQVcsU0FBU0QsSUFBRTtBQUFDLFdBQU8sV0FBU0EsT0FBSUEsS0FBRSxDQUFDLElBQUcsS0FBSyxXQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUUsS0FBSyxRQUFRLEdBQUVBLEVBQUMsR0FBRTtBQUFBLEVBQUksR0FBRUMsR0FBRSxVQUFVLE9BQUssU0FBU0YsSUFBRTtBQUFDLFdBQU8sS0FBSyxJQUFJLElBQUUsRUFBRUEsRUFBQyxHQUFFLEtBQUssaUJBQWlCO0FBQUEsRUFBQyxHQUFFRSxHQUFFLFVBQVUsT0FBSyxTQUFTRixJQUFFO0FBQUMsV0FBTyxLQUFLLElBQUksSUFBRSxFQUFFQSxJQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUssaUJBQWlCO0FBQUEsRUFBQyxHQUFFRSxHQUFFLFVBQVUsT0FBSyxTQUFTRixJQUFFO0FBQUMsV0FBTyxLQUFLLElBQUksSUFBRSxFQUFFQSxJQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUssaUJBQWlCO0FBQUEsRUFBQyxHQUFFRSxHQUFFLFVBQVUsT0FBSyxTQUFTRixJQUFFO0FBQUMsV0FBTyxLQUFLLElBQUksSUFBRSxFQUFFQSxJQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUssaUJBQWlCO0FBQUEsRUFBQyxHQUFFRSxHQUFFLFVBQVUsT0FBSyxTQUFTRixJQUFFO0FBQUMsV0FBTyxLQUFLLElBQUksSUFBRSxFQUFFQSxJQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUssaUJBQWlCO0FBQUEsRUFBQyxHQUFFRSxHQUFFLFVBQVUsT0FBSyxTQUFTRixJQUFFO0FBQUMsV0FBTyxLQUFLLElBQUksSUFBRSxFQUFFQSxJQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUssaUJBQWlCO0FBQUEsRUFBQyxHQUFFRSxHQUFFLFVBQVUsT0FBSyxTQUFTRixJQUFFO0FBQUMsV0FBTyxLQUFLLElBQUksSUFBRSxLQUFLLElBQUksSUFBRSxFQUFFQSxJQUFFLEdBQUUsQ0FBQyxHQUFFO0FBQUEsRUFBSSxHQUFFRSxHQUFFLFVBQVUsT0FBSyxTQUFTRixJQUFFO0FBQUMsV0FBTyxLQUFLLEtBQUssSUFBRSxFQUFFQSxJQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUssZ0JBQWdCO0FBQUEsRUFBQyxHQUFFRSxHQUFFLFVBQVUsT0FBSyxTQUFTRixJQUFFO0FBQUMsV0FBTyxLQUFLLEtBQUssSUFBRSxFQUFFQSxJQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUssZ0JBQWdCO0FBQUEsRUFBQyxHQUFFRSxHQUFFLFVBQVUsT0FBSyxTQUFTRixJQUFFO0FBQUMsV0FBTyxLQUFLLEtBQUssSUFBRSxFQUFFQSxJQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUssZ0JBQWdCO0FBQUEsRUFBQyxHQUFFRSxHQUFFLFVBQVUsT0FBSyxTQUFTRixJQUFFO0FBQUMsV0FBTyxLQUFLLEtBQUssSUFBRSxFQUFFQSxJQUFFLEdBQUUsR0FBRyxHQUFFLEtBQUssZ0JBQWdCO0FBQUEsRUFBQyxHQUFFLE9BQU8sZUFBZUUsR0FBRSxXQUFVLFdBQVUsRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEtBQUs7QUFBQSxFQUFRLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsS0FBSSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxLQUFLLElBQUksR0FBRSxLQUFLLFFBQVEsUUFBUTtBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxLQUFJLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEtBQUssSUFBSSxHQUFFLEtBQUssUUFBUSxRQUFRO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLEtBQUksRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUUsS0FBSyxRQUFRLFFBQVE7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsS0FBSSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxLQUFLLElBQUksR0FBRSxLQUFLLFFBQVEsUUFBUTtBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxLQUFJLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEtBQUssSUFBSSxHQUFFLEtBQUssUUFBUSxRQUFRO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLEtBQUksRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEVBQUUsS0FBSyxJQUFJLEdBQUUsS0FBSyxRQUFRLFFBQVE7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsS0FBSSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxLQUFLLElBQUksR0FBRSxLQUFLLFFBQVEsUUFBUTtBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxLQUFJLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEtBQUssS0FBSyxHQUFFLEtBQUssUUFBUSxRQUFRO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLEtBQUksRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEVBQUUsS0FBSyxLQUFLLEdBQUUsS0FBSyxRQUFRLFFBQVE7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsS0FBSSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxLQUFLLEtBQUssR0FBRSxLQUFLLFFBQVEsUUFBUTtBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxLQUFJLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEtBQUssS0FBSyxHQUFFLEtBQUssUUFBUSxRQUFRO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLGFBQVksRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEdBQUcsSUFBSSxLQUFLLEdBQUc7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsY0FBYSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sR0FBRyxLQUFLLEtBQUssR0FBRztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxhQUFZLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTSxFQUFDLEdBQUUsS0FBSyxHQUFFLEdBQUUsS0FBSyxHQUFFLEdBQUUsS0FBSyxFQUFDO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLGNBQWEsRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUUsS0FBSyxTQUFTLEdBQUUsRUFBQyxHQUFFLEtBQUssRUFBQyxDQUFDO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLGFBQVksRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFNLEVBQUMsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEdBQUUsR0FBRSxLQUFLLEVBQUM7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsY0FBYSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU8sRUFBRSxFQUFFLENBQUMsR0FBRSxLQUFLLFNBQVMsR0FBRSxFQUFDLEdBQUUsS0FBSyxFQUFDLENBQUM7QUFBQSxFQUFDLEdBQUUsWUFBVyxPQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlQSxHQUFFLFdBQVUsY0FBYSxFQUFDLEtBQUksV0FBVTtBQUFDLFdBQU0sRUFBQyxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssRUFBQztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxlQUFjLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFFLEtBQUssVUFBVSxHQUFFLEVBQUMsR0FBRSxLQUFLLEVBQUMsQ0FBQztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxPQUFNLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLElBQUksRUFBQyxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssRUFBQyxDQUFDO0FBQUEsRUFBQyxHQUFFLFlBQVcsT0FBRyxjQUFhLEtBQUUsQ0FBQyxHQUFFLE9BQU8sZUFBZUEsR0FBRSxXQUFVLFFBQU8sRUFBQyxLQUFJLFdBQVU7QUFBQyxXQUFPLEVBQUUsSUFBSSxFQUFDLEdBQUUsS0FBSyxHQUFFLEdBQUUsS0FBSyxHQUFFLEdBQUUsS0FBSyxHQUFFLEdBQUUsTUFBSSxLQUFLLEVBQUMsQ0FBQztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxPQUFNLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLElBQUksRUFBQyxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssRUFBQyxHQUFFLEtBQUssT0FBTztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxRQUFPLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLElBQUksRUFBQyxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssRUFBQyxHQUFFLEtBQUssT0FBTztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxPQUFNLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLElBQUksRUFBQyxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssRUFBQyxHQUFFLEtBQUssT0FBTztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxRQUFPLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLElBQUksRUFBQyxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssRUFBQyxHQUFFLEtBQUssT0FBTztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxRQUFPLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEtBQUssRUFBQyxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssRUFBQyxHQUFFLEtBQUssT0FBTztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRSxPQUFPLGVBQWVBLEdBQUUsV0FBVSxTQUFRLEVBQUMsS0FBSSxXQUFVO0FBQUMsV0FBTyxFQUFFLEtBQUssRUFBQyxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssR0FBRSxHQUFFLEtBQUssRUFBQyxHQUFFLEtBQUssT0FBTztBQUFBLEVBQUMsR0FBRSxZQUFXLE9BQUcsY0FBYSxLQUFFLENBQUMsR0FBRUEsR0FBRSxjQUFZLFNBQVNGLElBQUU7QUFBQyxRQUFJQyxLQUFFLEdBQUdELEVBQUM7QUFBRSxXQUFPLEdBQUdBLElBQUVDLElBQUUsR0FBRSxHQUFHLEdBQUc7QUFBQSxFQUFDLEdBQUVDLEdBQUUsUUFBTSxTQUFTRixJQUFFO0FBQUMsV0FBTyxFQUFFLElBQUlFLEdBQUUsWUFBWUYsRUFBQyxDQUFDO0FBQUEsRUFBQyxHQUFFRSxHQUFFLGVBQWEsU0FBU0YsSUFBRTtBQUFDLFFBQUlDLEtBQUUsR0FBR0QsRUFBQztBQUFFLFdBQU8sR0FBR0EsSUFBRUMsSUFBRSxHQUFFLEdBQUcsSUFBSTtBQUFBLEVBQUMsR0FBRUMsR0FBRSxTQUFPLFNBQVNGLElBQUU7QUFBQyxXQUFPLEVBQUUsSUFBSUUsR0FBRSxhQUFhRixFQUFDLENBQUM7QUFBQSxFQUFDLEdBQUVFLEdBQUUsY0FBWSxTQUFTRixJQUFFQyxJQUFFO0FBQUMsZUFBU0EsT0FBSUEsS0FBRSxDQUFDO0FBQUcsUUFBSUMsS0FBRSxHQUFHRixFQUFDO0FBQUUsV0FBTyxHQUFHQSxJQUFFRSxJQUFFRCxHQUFFLFVBQVMsR0FBRyxHQUFHO0FBQUEsRUFBQyxHQUFFQyxHQUFFLFFBQU0sU0FBU0YsSUFBRUMsSUFBRTtBQUFDLGVBQVNBLE9BQUlBLEtBQUUsQ0FBQztBQUFHLFFBQUlDLEtBQUUsR0FBR0YsRUFBQyxHQUFFRyxLQUFFLEVBQUVGLElBQUVELEVBQUMsR0FBRUksS0FBRSxHQUFHSixJQUFFRSxJQUFFLEdBQUUsR0FBRyxHQUFHO0FBQUUsV0FBTyxFQUFFLElBQUlFLElBQUVELEVBQUM7QUFBQSxFQUFDLEdBQUVELEdBQUUsZUFBYSxTQUFTRixJQUFFQyxJQUFFO0FBQUMsZUFBU0EsT0FBSUEsS0FBRSxDQUFDO0FBQUcsUUFBSUMsS0FBRSxHQUFHRixFQUFDO0FBQUUsV0FBTyxHQUFHQSxJQUFFRSxJQUFFRCxHQUFFLFVBQVMsR0FBRyxJQUFJO0FBQUEsRUFBQyxHQUFFQyxHQUFFLFNBQU8sU0FBU0YsSUFBRUMsSUFBRTtBQUFDLGVBQVNBLE9BQUlBLEtBQUUsQ0FBQztBQUFHLFFBQUlDLEtBQUUsR0FBR0YsRUFBQyxHQUFFRyxLQUFFLEVBQUVGLElBQUVELEVBQUMsR0FBRUksS0FBRSxHQUFHSixJQUFFRSxJQUFFLEdBQUUsR0FBRyxJQUFJO0FBQUUsV0FBTyxFQUFFLElBQUlFLElBQUVELEVBQUM7QUFBQSxFQUFDLEdBQUVELEdBQUUsY0FBWSxTQUFTRixJQUFFQyxJQUFFO0FBQUMsZUFBU0EsT0FBSUEsS0FBRSxDQUFDO0FBQUcsUUFBSUMsS0FBRSxHQUFHRixFQUFDO0FBQUUsV0FBTyxHQUFHQSxJQUFFRSxJQUFFRCxHQUFFLFVBQVMsR0FBRyxHQUFHO0FBQUEsRUFBQyxHQUFFQyxHQUFFLFFBQU0sU0FBU0YsSUFBRUMsSUFBRTtBQUFDLGVBQVNBLE9BQUlBLEtBQUUsQ0FBQztBQUFHLFFBQUlDLEtBQUUsR0FBR0YsRUFBQyxHQUFFRyxLQUFFLEVBQUVGLElBQUVELEVBQUMsR0FBRUksS0FBRSxHQUFHSixJQUFFRSxJQUFFLEdBQUUsR0FBRyxHQUFHO0FBQUUsV0FBTyxFQUFFLElBQUlFLElBQUVELEVBQUM7QUFBQSxFQUFDLEdBQUVELEdBQUUsZUFBYSxTQUFTRixJQUFFQyxJQUFFO0FBQUMsZUFBU0EsT0FBSUEsS0FBRSxDQUFDO0FBQUcsUUFBSUMsS0FBRSxHQUFHRixFQUFDO0FBQUUsV0FBTyxHQUFHQSxJQUFFRSxJQUFFRCxHQUFFLFVBQVMsR0FBRyxJQUFJO0FBQUEsRUFBQyxHQUFFQyxHQUFFLFNBQU8sU0FBU0YsSUFBRUMsSUFBRTtBQUFDLGVBQVNBLE9BQUlBLEtBQUUsQ0FBQztBQUFHLFFBQUlDLEtBQUUsR0FBR0YsRUFBQyxHQUFFRyxLQUFFLEVBQUVGLElBQUVELEVBQUMsR0FBRUksS0FBRSxHQUFHSixJQUFFRSxJQUFF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QVNELE9BQUlBLEtBQUUsSUFBRyxXQUFTQyxPQUFJQSxLQUFFLENBQUMsSUFBRyxHQUFHSCxJQUFFQyxJQUFFQyxJQUFFQyxHQUFFLFVBQVMsR0FBRyxJQUFJO0FBQUEsRUFBQyxHQUFFRCxHQUFFLGVBQWEsU0FBU0YsSUFBRUMsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLFdBQU8sV0FBU0QsT0FBSUEsS0FBRSxJQUFHLFdBQVNDLE9BQUlBLEtBQUUsQ0FBQyxJQUFHLEdBQUdILElBQUVDLElBQUVDLElBQUUsR0FBRSxHQUFHLElBQUksRUFBRSxJQUFLLFNBQVNBLElBQUU7QUFBQyxhQUFPLEVBQUUsSUFBSUEsSUFBRSxFQUFFQyxJQUFFSCxJQUFFQyxFQUFDLENBQUM7QUFBQSxJQUFDLENBQUU7QUFBQSxFQUFDLEdBQUVDLEdBQUUsb0JBQWtCLFNBQVNGLElBQUVDLElBQUVDLElBQUVDLElBQUU7QUFBQyxXQUFPLFdBQVNELE9BQUlBLEtBQUUsSUFBRyxXQUFTQyxPQUFJQSxLQUFFLENBQUMsSUFBRyxHQUFHSCxJQUFFQyxJQUFFQyxJQUFFQyxHQUFFLFVBQVMsR0FBRyxHQUFHO0FBQUEsRUFBQyxHQUFFRCxHQUFFLGNBQVksU0FBU0YsSUFBRUMsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLGVBQVNELE9BQUlBLEtBQUUsSUFBRyxXQUFTQyxPQUFJQSxLQUFFLENBQUM7QUFBRyxRQUFJQyxLQUFFLEVBQUVELElBQUVILElBQUVDLEVBQUM7QUFBRSxXQUFPLEdBQUdELElBQUVDLElBQUVDLElBQUUsR0FBRSxHQUFHLEdBQUcsRUFBRSxJQUFLLFNBQVNGLElBQUU7QUFBQyxhQUFPLEVBQUUsSUFBSUEsSUFBRUksRUFBQztBQUFBLElBQUMsQ0FBRTtBQUFBLEVBQUMsR0FBRUYsR0FBRSxxQkFBbUIsU0FBU0YsSUFBRUMsSUFBRUMsSUFBRUMsSUFBRTtBQUFDLFdBQU8sV0FBU0QsT0FBSUEsS0FBRSxJQUFHLFdBQVNDLE9BQUlBLEtBQUUsQ0FBQyxJQUFHLEdBQUdILElBQUVDLElBQUVDLElBQUVDLEdBQUUsVUFBUyxHQUFHLElBQUk7QUFBQSxFQUFDLEdBQUVELEdBQUUsZUFBYSxTQUFTRixJQUFFQyxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsZUFBU0QsT0FBSUEsS0FBRSxJQUFHLFdBQVNDLE9BQUlBLEtBQUUsQ0FBQztBQUFHLFFBQUlDLEtBQUUsRUFBRUQsSUFBRUgsSUFBRUMsRUFBQztBQUFFLFdBQU8sR0FBR0QsSUFBRUMsSUFBRUMsSUFBRSxHQUFFLEdBQUcsSUFBSSxFQUFFLElBQUssU0FBU0YsSUFBRTtBQUFDLGFBQU8sRUFBRSxJQUFJQSxJQUFFSSxFQUFDO0FBQUEsSUFBQyxDQUFFO0FBQUEsRUFBQyxHQUFFRixHQUFFLGtCQUFnQixTQUFTRixJQUFFQyxJQUFFO0FBQUMsV0FBTyxXQUFTQSxPQUFJQSxLQUFFLEVBQUUsV0FBVSxHQUFHLElBQUlELElBQUVDLElBQUUsS0FBRTtBQUFBLEVBQUMsR0FBRUMsR0FBRSxZQUFVLFNBQVNGLElBQUVDLElBQUU7QUFBQyxXQUFPLFdBQVNBLE9BQUlBLEtBQUUsRUFBRSxXQUFVLEdBQUcsSUFBSUQsSUFBRUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxHQUFFQyxHQUFFLG1CQUFpQixTQUFTRixJQUFFQyxJQUFFO0FBQUMsV0FBTyxXQUFTQSxPQUFJQSxLQUFFLEVBQUUsV0FBVSxHQUFHLEtBQUtELElBQUVDLElBQUUsS0FBRTtBQUFBLEVBQUMsR0FBRUMsR0FBRSxhQUFXLFNBQVNGLElBQUVDLElBQUU7QUFBQyxXQUFPLFdBQVNBLE9BQUlBLEtBQUUsRUFBRSxXQUFVLEdBQUcsS0FBS0QsSUFBRUMsSUFBRSxJQUFFO0FBQUEsRUFBQyxHQUFFQyxHQUFFLGtCQUFnQixTQUFTRixJQUFFRSxJQUFFQyxJQUFFO0FBQUMsV0FBTyxXQUFTRCxPQUFJQSxLQUFFLEVBQUUsV0FBVSxXQUFTQyxPQUFJQSxLQUFFLENBQUMsSUFBRyxHQUFHLElBQUlILElBQUVFLElBQUUsT0FBRyxFQUFFLE1BQU0sUUFBTyxFQUFFLENBQUNDLEVBQUMsR0FBRUgsSUFBRSxLQUFFLENBQUMsQ0FBQztBQUFBLEVBQUMsR0FBRUUsR0FBRSxZQUFVLFNBQVNGLElBQUVFLElBQUVDLElBQUU7QUFBQyxXQUFPLFdBQVNELE9BQUlBLEtBQUUsRUFBRSxXQUFVLFdBQVNDLE9BQUlBLEtBQUUsQ0FBQyxJQUFHLEdBQUcsSUFBSUgsSUFBRUUsSUFBRSxNQUFHLEVBQUUsTUFBTSxRQUFPLEVBQUUsQ0FBQ0MsRUFBQyxHQUFFSCxJQUFFLEtBQUUsQ0FBQyxDQUFDO0FBQUEsRUFBQyxHQUFFRSxHQUFFLG1CQUFpQixTQUFTRixJQUFFRSxJQUFFQyxJQUFFO0FBQUMsV0FBTyxXQUFTRCxPQUFJQSxLQUFFLEVBQUUsV0FBVSxXQUFTQyxPQUFJQSxLQUFFLENBQUMsSUFBRyxHQUFHLEtBQUtILElBQUVFLElBQUUsT0FBRyxFQUFFLE1BQU0sUUFBTyxFQUFFLENBQUNDLEVBQUMsR0FBRUgsSUFBRSxLQUFFLENBQUMsQ0FBQztBQUFBLEVBQUMsR0FBRUUsR0FBRSxhQUFXLFNBQVNGLElBQUVFLElBQUVDLElBQUU7QUFBQyxXQUFPLFdBQVNELE9BQUlBLEtBQUUsRUFBRSxXQUFVLFdBQVNDLE9BQUlBLEtBQUUsQ0FBQyxJQUFHLEdBQUcsS0FBS0gsSUFBRUUsSUFBRSxNQUFHLEVBQUUsTUFBTSxRQUFPLEVBQUUsQ0FBQ0MsRUFBQyxHQUFFSCxJQUFFLEtBQUUsQ0FBQyxDQUFDO0FBQUEsRUFBQyxHQUFFRSxHQUFFLGtCQUFnQixTQUFTRixJQUFFRSxJQUFFQyxJQUFFO0FBQUMsV0FBTyxXQUFTRCxPQUFJQSxLQUFFLEVBQUUsV0FBVSxXQUFTQyxPQUFJQSxLQUFFLENBQUMsSUFBRyxHQUFHLElBQUlILElBQUVFLElBQUUsT0FBRyxFQUFFLE1BQU0sUUFBTyxFQUFFLENBQUNDLEVBQUMsR0FBRUgsSUFBRSxLQUFFLENBQUMsQ0FBQztBQUFBLEVBQUMsR0FBRUUsR0FBRSxZQUFVLFNBQVNGLElBQUVFLElBQUVDLElBQUU7QUFBQyxXQUFPLFdBQVNELE9BQUlBLEtBQUUsRUFBRSxXQUFVLFdBQVNDLE9BQUlBLEtBQUUsQ0FB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O0FBQUEsSUFDckIsZ0JBQWdCO0FBQUEsSUFDaEIsS0FBSztBQUFBLElBQ0wsSUFBSTtBQUFBLElBQ0osT0FBTztBQUFBLElBQ1AsZ0JBQWdCO0FBQUEsSUFDaEIsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sV0FBVztBQUFBLElBQ1gsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsaUJBQWlCO0FBQUEsSUFDakIsVUFBVTtBQUFBLElBQ1YsY0FBYztBQUFBLElBQ2QsUUFBUSxTQUFTO0FBQUEsSUFDakIsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLElBQ0wsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsTUFBTTtBQUFBLElBQ04sWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLElBQ1osZ0JBQWdCO0FBQUEsSUFDaEIsWUFBWTtBQUFBLElBQ1osU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsSUFBSTtBQUFBLElBQ0osWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLElBQ1AsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsSUFBSTtBQUFBLElBQ0osT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsTUFBTTtBQUFBLElBQ04sVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sS0FBSztBQUFBLElBQ0wsVUFBVTtBQUFBLElBQ1YsS0FBSztBQUFBLElBQ0wsV0FBVztBQUFBLElBQ1gsT0FBTztBQUFBLElBQ1AsUUFBUTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1YsT0FBTztBQUFBLElBQ1AsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsVUFBVTtBQUFBLElBQ1YsWUFBWTtBQUFBLElBQ1osU0FBUztBQUFBLElBQ1QsY0FBYztBQUFBLElBQ2QsWUFBWTtBQUFBLElBQ1osZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsZ0JBQWdCO0FBQUEsSUFDaEIsZ0JBQWdCO0FBQUEsSUFDaEIsUUFBUTtBQUFBLElBQ1IsVUFBVTtBQUFBLElBQ1YsV0FBVztBQUFBLElBQ1gsa0JBQWtCO0FBQUEsSUFDbEIsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsZUFBZTtBQUFBLElBQ2YsZUFBZTtBQUFBLElBQ2YsbUJBQW1CO0FBQUEsSUFDbkIsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLElBQ1AsWUFBWTtBQUFBLElBQ1osUUFBUTtBQUFBLElBQ1IsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsUUFBUTtBQUFBLElBQ1Isa0JBQWtCO0FBQUEsSUFDbEIsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBQ2QsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osU0FBUztBQUFBLElBQ1Qsa0JBQWtCO0FBQUEsSUFDbEIsUUFBUTtBQUFBLElBQ1IsY0FBYztBQUFBLElBQ2Qsa0JBQWtCO0FBQUEsSUFDbEIsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBLElBQ1gsZ0JBQWdCO0FBQUEsSUFDaEIsYUFBYTtBQUFBLElBQ2IsY0FBYztBQUFBLElBQ2QsY0FBYztBQUFBLElBQ2QsYUFBYTtBQUFBLElBQ2IsWUFBWTtBQUFBLElBQ1osYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1YsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsUUFBUTtBQUFBLElBQ1IsV0FBVztBQUFBLElBQ1gsWUFBWTtBQUFBLElBQ1osWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLElBQ2Qsb0JBQW9CO0FBQUEsSUFDcEIsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLElBQ2IsMkJBQTJCO0FBQUEsSUFDM0IsVUFBVTtBQUFBLElBQ1YsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsV0FBVztBQUFBLElBQ1gsVUFBVTtBQUFBLElBQ1YsV0FBVztBQUFBLElBQ1gsY0FBYztBQUFBLElBQ2QsVUFBVTtBQUFBLElBQ1Ysc0JBQXNCO0FBQUEsSUFDdEIsVUFBVTtBQUFBLElBQ1YsZ0JBQWdCO0FBQUEsSUFDaEIsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sYUFBYTtBQUFB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QSxJQUNWLE9BQU87QUFBQSxJQUNQLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLFNBQVM7QUFBQSxJQUNULFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLGtCQUFrQjtBQUFBLElBQ2xCLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLGFBQWE7QUFBQSxJQUNiLE9BQU87QUFBQSxJQUNQLFlBQVk7QUFBQSxJQUNaLFFBQVE7QUFBQSxJQUNSLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLFFBQVE7QUFBQSxJQUNSLGtCQUFrQjtBQUFBLElBQ2xCLFdBQVc7QUFBQSxJQUNYLE9BQU87QUFBQSxJQUNQLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxJQUNkLFNBQVM7QUFBQSxJQUNULFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLGNBQWM7QUFBQSxJQUNkLGtCQUFrQjtBQUFBLElBQ2xCLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLGNBQWM7QUFBQSxJQUNkLGFBQWE7QUFBQSxJQUNiLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLFVBQVU7QUFBQSxJQUNWLFlBQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxJQUNaLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxJQUNSLFdBQVc7QUFBQSxJQUNYLFlBQVk7QUFBQSxJQUNaLFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxJQUNkLFVBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLFVBQVU7QUFBQSxJQUNWLFFBQVE7QUFBQSxJQUNSLFdBQVc7QUFBQSxJQUNYLFdBQVc7QUFBQSxJQUNYLFVBQVU7QUFBQSxJQUNWLFdBQVc7QUFBQSxJQUNYLGNBQWM7QUFBQSxJQUNkLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLGdCQUFnQjtBQUFBLElBQ2hCLFdBQVc7QUFBQSxJQUNYLFFBQVE7QUFBQSxJQUNSLGtCQUFrQjtBQUFBLElBQ2xCLG1CQUFtQjtBQUFBLElBQ25CLFlBQVk7QUFBQSxJQUNaLFNBQVM7QUFBQSxJQUNULGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLGlCQUFpQjtBQUFBLElBQ2pCLGdCQUFnQjtBQUFBLElBQ2hCLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLHVCQUF1QjtBQUFBLElBQ3ZCLHdCQUF3QjtBQUFBLElBQ3hCLGlCQUFpQjtBQUFBLElBQ2pCLGtCQUFrQjtBQUFBLElBQ2xCLGVBQWU7QUFBQSxJQUNmLGdCQUFnQjtBQUFBLElBQ2hCLGtCQUFrQjtBQUFBLElBQ2xCLGVBQWU7QUFBQSxJQUNmLGFBQWE7QUFBQSxJQUNiLFVBQVU7QUFBQSxJQUNWLFlBQVk7QUFBQSxJQUNaLGdCQUFnQjtBQUFBLElBQ2hCLGVBQWU7QUFBQSxJQUNmLGlCQUFpQjtBQUFBLElBQ2pCLFFBQVE7QUFBQSxJQUNSLG1CQUFtQjtBQUFBLElBQ25CLG9CQUFvQjtBQUFBLElBQ3BCLGFBQWE7QUFBQSxJQUNiLGNBQWM7QUFBQSxJQUNkLFlBQVk7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLFVBQVU7QUFBQSxJQUNWLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJ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QUFVO0FBQUEsSUFDVixXQUFXO0FBQUEsSUFDWCxrQkFBa0I7QUFBQSxJQUNsQixVQUFVO0FBQUEsSUFDVixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsSUFDUCxZQUFZO0FBQUEsSUFDWixRQUFRO0FBQUEsSUFDUixXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixZQUFZO0FBQUEsSUFDWixhQUFhO0FBQUEsSUFDYixZQUFZO0FBQUEsSUFDWixhQUFhO0FBQUEsSUFDYixRQUFRO0FBQUEsSUFDUixrQkFBa0I7QUFBQSxJQUNsQixXQUFXO0FBQUEsSUFDWCxPQUFPO0FBQUEsSUFDUCxTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixjQUFjO0FBQUEsSUFDZCxTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixjQUFjO0FBQUEsSUFDZCxrQkFBa0I7QUFBQSxJQUNsQixhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixjQUFjO0FBQUEsSUFDZCxjQUFjO0FBQUEsSUFDZCxhQUFhO0FBQUEsSUFDYixZQUFZO0FBQUEsSUFDWixhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUEsSUFDWCxjQUFjO0FBQUEsSUFDZCxXQUFXO0FBQUEsSUFDWCxVQUFVO0FBQUEsSUFDVixZQUFZO0FBQUEsSUFDWixZQUFZO0FBQUEsSUFDWixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxRQUFRO0FBQUEsSUFDUixXQUFXO0FBQUEsSUFDWCxZQUFZO0FBQUEsSUFDWixZQUFZO0FBQUEsSUFDWixjQUFjO0FBQUEsSUFDZCxVQUFVO0FBQUEsSUFDVixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixVQUFVO0FB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Q25CLEVBQUFBLFdBQVUsSUFBSSxJQUFJO0FBQ2xCLEVBQUFBLFdBQVUsSUFBSSxJQUFJO0FBQ2xCLEVBQUFBLFdBQVUsSUFBSSxJQUFJO0FBQ2xCLEVBQUFBLFdBQVUsT0FBTyxJQUFJO0FBQ3JCLEVBQUFBLFdBQVUsVUFBVSxJQUFJO0FBQ3hCLEVBQUFBLFdBQVUsWUFBWSxJQUFJO0FBQzFCLEVBQUFBLFdBQVUsUUFBUSxJQUFJO0FBQ3RCLEVBQUFBLFdBQVUsTUFBTSxJQUFJO0FBQ3BCLEVBQUFBLFdBQVUsUUFBUSxJQUFJO0FBQ3RCLEVBQUFBLFdBQVUsZ0JBQWdCLElBQUk7QUFDOUIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxVQUFVLElBQUk7QUFDeEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxHQUFHLElBQUk7QUFDakIsRUFBQUEsV0FBVSxLQUFLLElBQUk7QUFDbkIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxTQUFTLElBQUk7QUFDdkIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxZQUFZLElBQUk7QUFDMUIsRUFBQUEsV0FBVSxTQUFTLElBQUk7QUFDdkIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxLQUFLLElBQUk7QUFDbkIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxVQUFVLElBQUk7QUFDeEIsRUFBQUEsV0FBVSxTQUFTLElBQUk7QUFDdkIsRUFBQUEsV0FBVSxVQUFVLElBQUk7QUFDeEIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxVQUFVLElBQUk7QUFDeEIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxHQUFHLElBQUk7QUFDakIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxXQUFXLElBQUk7QUFDekIsRUFBQUEsV0FBVSxLQUFLLElBQUk7QUFDbkIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxLQUFLLElBQUk7QUFDbkIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxHQUFHLElBQUk7QUFDakIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxTQUFTLElBQUk7QUFDdkIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxNQUFNLElBQUk7QUFDcEIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxRQUFRLElBQUk7QUFDdEIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxLQUFLLElBQUk7QUFDbkIsRUFBQUEsV0FBVSxTQUFTLElBQUk7QUFDdkIsRUFBQUEsV0FBVSxLQUFLLElBQUk7QUFDbkIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxVQUFVLElBQUk7QUFDeEIsRUFBQUEsV0FBVSxVQUFVLElBQUk7QUFDeEIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxPQUFPLElBQUk7QUFDckIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxHQUFHLElBQUk7QUFDakIsRUFBQUEsV0FBVSxJQUFJLElBQUk7QUFDbEIsRUFBQUEsV0FBVSxLQUFLLElBQUk7QUFDbkIsRUFBQUEsV0FBVSxLQUFLLElBQUk7QUFDbkIsRUFBQUEsV0FBVSxLQUFLLElBQUk7QUFDbkIsRUFBQUEsV0FBVSxLQUFLLElBQUk7QUFDdkIsR0FBRyxZQUFZLGNBQWMsWUFBWSxDQUFDLEVBQUU7QUFNckMsSUFBSTtBQUFBLENBQ1YsU0FBVUMsU0FBUTtBQUNmLEVBQUFBLFFBQU9BLFFBQU8sU0FBUyxJQUFJLENBQUMsSUFBSTtBQUNoQyxFQUFBQSxRQUFPQSxRQUFPLEdB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UUFBT0EsUUFBTyxTQUFTLElBQUksRUFBRSxJQUFJO0FBQ2pDLEVBQUFBLFFBQU9BLFFBQU8sTUFBTSxJQUFJLEVBQUUsSUFBSTtBQUM5QixFQUFBQSxRQUFPQSxRQUFPLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDOUIsRUFBQUEsUUFBT0EsUUFBTyxNQUFNLElBQUksRUFBRSxJQUFJO0FBQzlCLEVBQUFBLFFBQU9BLFFBQU8sUUFBUSxJQUFJLEVBQUUsSUFBSTtBQUNoQyxFQUFBQSxRQUFPQSxRQUFPLElBQUksSUFBSSxFQUFFLElBQUk7QUFDNUIsRUFBQUEsUUFBT0EsUUFBTyxJQUFJLElBQUksRUFBRSxJQUFJO0FBQzVCLEVBQUFBLFFBQU9BLFFBQU8sSUFBSSxJQUFJLEVBQUUsSUFBSTtBQUM1QixFQUFBQSxRQUFPQSxRQUFPLElBQUksSUFBSSxFQUFFLElBQUk7QUFDNUIsRUFBQUEsUUFBT0EsUUFBTyxPQUFPLElBQUksRUFBRSxJQUFJO0FBQy9CLEVBQUFBLFFBQU9BLFFBQU8sS0FBSyxJQUFJLEVBQUUsSUFBSTtBQUM3QixFQUFBQSxRQUFPQSxRQUFPLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDOUIsRUFBQUEsUUFBT0EsUUFBTyxVQUFVLElBQUksRUFBRSxJQUFJO0FBQ2xDLEVBQUFBLFFBQU9BLFFBQU8sU0FBUyxJQUFJLEVBQUUsSUFBSTtBQUNqQyxFQUFBQSxRQUFPQSxRQUFPLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDbEMsRUFBQUEsUUFBT0EsUUFBTyxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2hDLEVBQUFBLFFBQU9BLFFBQU8sSUFBSSxJQUFJLEVBQUUsSUFBSTtBQUM1QixFQUFBQSxRQUFPQSxRQUFPLFVBQVUsSUFBSSxFQUFFLElBQUk7QUFDbEMsRUFBQUEsUUFBT0EsUUFBTyxRQUFRLElBQUksRUFBRSxJQUFJO0FBQ2hDLEVBQUFBLFFBQU9BLFFBQU8sR0FBRyxJQUFJLEVBQUUsSUFBSTtBQUMzQixFQUFBQSxRQUFPQSxRQUFPLE9BQU8sSUFBSSxFQUFFLElBQUk7QUFDL0IsRUFB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QUFBQSxFQUNoRCxDQUFDLFVBQVUsUUFBUSxPQUFPLE1BQU07QUFBQSxFQUNoQyxDQUFDLFVBQVUsTUFBTSxPQUFPLElBQUk7QUFBQSxFQUM1QixDQUFDLFVBQVUsU0FBUyxPQUFPLE9BQU87QUFBQSxFQUNsQyxDQUFDLFVBQVUsT0FBTyxPQUFPLEtBQUs7QUFBQSxFQUM5QixDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7QUFBQSxFQUN0QixDQUFDLFVBQVUsTUFBTSxPQUFPLElBQUk7QUFBQSxFQUM1QixDQUFDLFVBQVUsVUFBVSxPQUFPLFFBQVE7QUFBQSxFQUNwQyxDQUFDLFVBQVUsU0FBUyxPQUFPLE9BQU87QUFBQSxFQUNsQyxDQUFDLFVBQVUsS0FBSyxPQUFPLEdBQUc7QUFBQSxFQUMxQixDQUFDLFVBQVUsWUFBWSxPQUFPLFVBQVU7QUFBQSxFQUN4QyxDQUFDLFVBQVUsTUFBTSxPQUFPLElBQUk7QUFBQSxFQUM1QixDQUFDLFVBQVUsSUFBSSxPQUFPLEVBQUU7QUFBQSxFQUN4QixDQUFDLFVBQVUsUUFBUSxPQUFPLE1BQU07QUFBQSxFQUNoQyxDQUFDLFVBQVUsU0FBUyxPQUFPLE9BQU87QUFBQSxFQUNsQyxDQUFDLFVBQVUsUUFBUSxPQUFPLE1BQU07QUFBQSxFQUNoQyxDQUFDLFVBQVUsTUFBTSxPQUFPLElBQUk7QUFBQSxFQUM1QixDQUFDLFVBQVUsS0FBSyxPQUFPLEdBQUc7QUFBQSxFQUMxQixDQUFDLFVBQVUsVUFBVSxPQUFPLFFBQVE7QUFBQSxFQUNwQyxDQUFDLFVBQVUsSUFBSSxPQUFPLEVBQUU7QUFBQSxFQUN4QixDQUFDLFVBQVUsTUFBTSxPQUFPLElBQUk7QUFBQSxFQUM1QixDQUFDLFVBQVUsU0FBUyxPQUFPLE9BQU87QUFBQSxFQUNsQyxDQUFDLFVBQVUsUUFBUSxPQUFPLE1BQU07QUFBQSxFQUNoQyxDQUFDLFVBQVUsS0FBSyxPQUFPLEdBQUc7QUFBQSxFQUMxQixDQUFDLFVBQVUsS0FBSyxPQUFPLEdBQUc7QUFBQSxFQUMxQixDQUFDLFVBQVUsSUFBSSxPQUFPLEVBQUU7QUFBQSxFQUN4QixDQUFDLFVBQVUsSUFBSSxPQUFPLEVBQUU7QUFBQSxFQUN4QixDQUFDLFVBQVUsSUFBSSxPQUFPLEVBQUU7QUFBQSxFQUN4QixDQUFDLFVBQVUsT0FBTyxPQUFPLEtBQUs7QUFBQSxFQUM5QixDQUFDLFVBQVUsVUFBVSxPQUFPLFFBQVE7QUFBQSxFQUNwQyxDQUFDLFVBQVUsWUFBWSxPQUFPLFVBQVU7QUFBQSxFQUN4QyxDQUFDLFVBQVUsUUFBUSxPQUFPLE1BQU07QUFBQSxFQUNoQyxDQUFDLFVBQVUsTUFBTSxPQUFPLElBQUk7QUFBQSxFQUM1QixDQUFDLFVBQVUsUUFBUSxPQUFPLE1BQU07QUFBQSxFQUNoQyxDQUFDLFVBQVUsZ0JBQWdCLE9BQU8sY0FBYztBQUFBLEVBQ2hELENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxVQUFVLE9BQU8sUUFBUTtBQUFBLEVBQ3BDLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztBQUFBLEVBQ3RCLENBQUMsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzFCLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxTQUFTLE9BQU8sT0FBTztBQUFBLEVBQ2xDLENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxZQUFZLE9BQU8sVUFBVTtBQUFBLEVBQ3hDLENBQUMsVUFBVSxTQUFTLE9BQU8sT0FBTztBQUFBLEVBQ2xDLENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzFCLENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxVQUFVLE9BQU8sUUFBUTtBQUFBLEVBQ3BDLENBQUMsVUFBVSxTQUFTLE9BQU8sT0FBTztBQUFBLEVBQ2xDLENBQUMsVUFBVSxVQUFVLE9BQU8sUUFBUTtBQUFBLEVBQ3BDLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxVQUFVLE9BQU8sUUFBUTtBQUFBLEVBQ3BDLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztBQUFBLEVBQ3RCLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxXQUFXLE9BQU8sU0FBUztBQUFBLEVBQ3RDLENBQUMsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzFCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzFCLENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztBQUFBLEVBQ3RCLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxTQUFTLE9BQU8sT0FBTztBQUFBLEVBQ2xDLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxNQUFNLE9BQU8sSUFBSTtBQUFBLEVBQzVCLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxRQUFRLE9BQU8sTUFBTTtBQUFBLEVBQ2hDLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzFCLENBQUMsVUFBVSxTQUFTLE9BQU8sT0FBTztBQUFBLEVBQ2xDLENBQUMsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzFCLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxVQUFVLE9BQU8sUUFBUTtBQUFBLEVBQ3BDLENBQUMsVUFBVSxVQUFVLE9BQU8sUUFBUTtBQUFBLEVBQ3BDLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxPQUFPLE9BQU8sS0FBSztBQUFBLEVBQzlCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztBQUFBLEVBQ3RCLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtBQUFBLEVBQ3hCLENBQUMsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzFCLENBQUMsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzFCLENBQUMsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUFBLEVBQzFCLENBQUMsVUFBVSxLQUFLLE9BQU8sR0FBRztBQUM5QixDQUFDO0FBQ00sU0FBUyxTQUFTLFNBQVM7QUFDOUIsTUFBSUM7QUFDSixVQUFRQSxNQUFLLGVBQWUsSUFBSSxPQUFPLE9BQU8sUUFBUUEsUUFBTyxTQUFTQSxNQUFLLE9BQU87QUFDdEY7QUFDQSxJQUFNQyxLQUFJO0FBQ0gsSUFBTSxtQkFBbUI7QUFBQSxFQUM1QixDQUFDLEdBQUcsSUFBSSxHQUFHLG9CQUFJLElBQUk7QUFBQSxJQUNmQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFFO0FBQUEsSUFDRkEsR0FBRTtBQUFBLElBQ0ZBLEdBQUU7QUFBQSxJQUNGQSxHQUFF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QUFFLElBQUk7QUFDM0MsRUFBQUEsT0FBTUEsT0FBTSwwQkFBMEIsSUFBSSxFQUFFLElBQUk7QUFDaEQsRUFBQUEsT0FBTUEsT0FBTSwrQkFBK0IsSUFBSSxFQUFFLElBQUk7QUFDckQsRUFBQUEsT0FBTUEsT0FBTSxvQ0FBb0MsSUFBSSxFQUFFLElBQUk7QUFDMUQsRUFBQUEsT0FBTUEsT0FBTSxrQ0FBa0MsSUFBSSxFQUFFLElBQUk7QUFDeEQsRUFBQUEsT0FBTUEsT0FBTSxrQ0FBa0MsSUFBSSxFQUFFLElBQUk7QUFDeEQsRUFBQUEsT0FBTUEsT0FBTSxpQ0FBaUMsSUFBSSxFQUFFLElBQUk7QUFDdkQsRUFBQUEsT0FBTUEsT0FBTSw0QkFBNEIsSUFBSSxFQUFFLElBQUk7QUFDbEQsRUFBQUEsT0FBTUEsT0FBTSxpQ0FBaUMsSUFBSSxFQUFFLElBQUk7QUFDdkQsRUFBQUEsT0FBTUEsT0FBTSxzQ0FBc0MsSUFBSSxFQUFFLElBQUk7QUFDNUQsRUFBQUEsT0FBTUEsT0FBTSwyQ0FBMkMsSUFBSSxFQUFFLElBQUk7QUFDakUsRUFBQUEsT0FBTUEsT0FBTSwrQkFBK0IsSUFBSSxFQUFFLElBQUk7QUFDckQsRUFBQUEsT0FBTUEsT0FBTSx1QkFBdUIsSUFBSSxFQUFFLElBQUk7QUFDN0MsRUFBQUEsT0FBTUEsT0FBTSxnQkFBZ0IsSUFBSSxFQUFFLElBQUk7QUFDdEMsRUFBQUEsT0FBTUEsT0FBTSxzQkFBc0IsSUFBSSxFQUFFLElBQUk7QUFDNUMsRUFBQUEsT0FBTUEsT0FBTSx3QkFBd0IsSUFBSSxFQUFFLElBQUk7QUFDOUMsRUFBQUEsT0FBTUEsT0FBTSwrQkFBK0IsSUFBSSxFQUFFLElBQUk7QUFDckQsRUFBQUEsT0FBTUEsT0FBTSwrQkFBK0IsSUFBSSxFQUFFLElBQUk7QUFDckQsRUFBQUEsT0FBTUEsT0FBTSwwQkFBMEIsSUFBSSxFQUFFLElBQUk7QUFDaEQsRUFBQUEsT0FBTUEsT0FBTSw4QkFBOEIsSUFBSSxFQUFFLElBQUk7QUFDcEQsRUFBQUEsT0FBTUEsT0FBTSx3QkFBd0IsSUFBSSxF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O0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRSxRQUFRO0FBQ1gseUJBQW1CQSxJQUFHLEtBQUs7QUFDM0I7QUFBQSxJQUNKO0FBQUEsSUFDQSxLQUFLLE9BQUUsR0FBRztBQUNOLG9CQUFjQSxFQUFDO0FBQ2Y7QUFBQSxJQUNKO0FBQUEsSUFDQSxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRTtBQUFBLElBQ1AsS0FBSyxPQUFFO0FBQUEsSUFDUCxLQUFLLE9BQUU7QUFBQSxJQUNQLEtBQUssT0FBRSxZQUFZO0FBQ2YsMEJBQW9CQSxJQUFHLEtBQUs7QUFDNUI7QUFBQSxJQUNKO0FBQUEsSUFDQSxLQUFL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QWNBLElBQUksS0FBSyxNQUFNO0FBQ2IsbUJBQWUsTUFBTSxNQUFNO0FBQzNCLGVBQVcsTUFBTSxNQUFNO0FBQ3ZCLFNBQUssT0FBTyxLQUFLLEtBQUssS0FBSyxXQUFXLElBQUksUUFBUSxLQUFLLFdBQVcsR0FBRztBQUFBLEVBQ3ZFO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQStEQSxLQUFLLGVBQWUsd0JBQXdCLFFBQVE7QUFFbEQsVUFBTSxVQUFVLEtBQUssUUFBUSxlQUFlLHdCQUF3QixNQUFNO0FBRTFFLFlBQVEsUUFBUTtBQUVoQixVQUFNO0FBQUEsRUFDUjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUE0REEsS0FBSyxlQUFlLHdCQUF3QixRQUFRO0FBRWxELFVBQU0sVUFBVSxLQUFLLFFBQVEs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QUEsSUFDekMsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEsMkNBQTJDO0FBQUEsSUFDekMsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEseUNBQXlDO0FBQUEsSUFDdkMsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEsNENBQTRDO0FBQUEsSUFDMUMsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEsNENBQTRDO0FBQUEsSUFDMUMsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEsb0NBQW9DO0FBQUEsSUFDbEMsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEsb0NBQW9DO0FBQUEsSUFDbEMsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEsMkRBQTJEO0FBQUEsSUFDekQsUUFDRTtBQUFBLElBQ0YsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEsZUFBZTtBQUFBLElBQ2IsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEsc0JBQXNCO0FBQUEsSUFDcEIsUUFBUTtBQUFBLElBQ1IsYUFDRTtBQUFBLElBQ0YsS0FBSztBQUFBLEVBQ1A7QUFBQTtBQUFBLEVBRUEsc0JBQXNCO0FBQUEsSUFDcEIsUUFBUTtBQUFBLElBQ1IsYUFDRTtBQUFBLElBQ0YsS0FBSztBQUFBLEVBQ1A7QUFBQTtBQUFBLEVBRUEsK0NBQStDO0FBQUEsSUFDN0MsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEsZ0NBQWdDO0FBQUEsSUFDOUIsUUFDRTtBQUFBLElBQ0YsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEsMkJBQTJCO0FBQUEsSUFDekIsUUFBUTtBQUFBLElBQ1IsYUFBYTtBQUFBLEVBQ2Y7QUFBQTtBQUFBLEVBRUEs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QUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGOzs7QUMzR08sSUFBTSx5QkFBeUI7QUFBQSxFQUNwQyxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixJQUFJO0FBQUEsRUFDSixJQUFJO0FBQUEsRUFDSixJQUFJO0FBQUEsRUFDSixTQUFTO0FBQUEsRUFDVCxJQUFJO0FBQUEsRUFDSixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixJQUFJO0FBQUEsRUFDSixJQUFJO0FBQUEsRUFDSixJQUFJO0FBQUEsRUFDSixTQUFTO0FBQUEsRUFDVCxJQUFJO0FBQUEsRUFDSixLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxTQUFTO0FBQUEsRUFDVCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxVQUFVO0FBQUEsRUFDVixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxJQUFJO0FBQUEsRUFDSixNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxJQUFJO0FBQUEsRUFDSixLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxJQUFJO0FBQUEsRUFDSixPQUFPO0FBQUEsRUFDUCxJQUFJO0FBQUEsRUFDSixJQUFJO0FBQUEsRUFDSixLQUFLO0FBQUEsRUFDTCxLQUFLO0FBQUEsRUFDTCxNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEsRUFDTixNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixPQUFPO0FBQUEsRUFDUCxNQUFNO0FBQUEsRUFDTixLQUFLO0FBQUEsRUFDTCxJQUFJO0FBQUEsRUFDSixJQUFJO0FBQUEsRUFDSixPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxRQUFRO0FBQUEsRUFDUixRQUFRO0FBQUEsRUFDUixNQUFNO0FBQUEs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LE1BQUk7QUFBQyxXQUFLLGtCQUFrQjtBQUFBLElBQUUsQ0FBQztBQUVoRSxZQUFRLElBQUksNEJBQTRCO0FBQUEsRUFDekM7QUFBQSxFQUVBLFdBQVc7QUFDVixTQUFLLDRCQUE0QixXQUFXO0FBQzVDLDJCQUF1QjtBQUN2QiwrQkFBMkI7QUFDM0IsZUFBVyxPQUFPLE9BQU8sT0FBTyxLQUFLLGFBQWE7QUFDakQsVUFBSSxnQkFBZ0IsR0FBRztBQUN4QixZQUFRLElBQUksOEJBQThCO0FBQUEsRUFDM0M7QUFBQSxFQUVBLE1BQU0sZUFBZTtBQUNwQixTQUFLLFdBQVcsRUFBQyxHQUFHLGdCQUFnQixnQkFBZ0IsR0FBRyxHQUFHLGdCQUFnQixNQUFNLEtBQUssU0FBUyxDQUFDLEVBQUM7QUFBQSxFQUNqRztBQUFBLEVBRUEsTUFBTSxlQUFlO0FBQ3BCLFVBQU0sS0FBSyxTQUFTLEtBQUssUUFBUTtBQUNqQyxTQUFLLElBQUksVUFBVSxjQUFjO0FBQ2pDLGtCQUFjLEtBQUssVUFBUyxLQUFLLEdBQUc7QUFBQSxFQUNyQztBQUFBLEVBRUEsb0JBQW9CO0FBQ25CLFNBQUssSUFBSSxVQUFVLGtCQUFrQixDQUFDLFNBQXdCO0FBQzdELFVBQUksS0FBSyxnQkFBZ0IsaUNBQWdCLEtBQUssS0FBSyxRQUFRLE1BQU07QUFDaEUsYUFBSyxLQUFLLFlBQVksU0FBUyxJQUFJO0FBQUEsSUFDckMsQ0FBQztBQUFBLEVBQ0Y7QUFDRDsiLAogICJuYW1lcyI6IFsicm9vdCIsICJmYWN0b3J5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImRlZmluZSIsICJhbWQiLCAic2VsZiIsICJfX3dlYnBhY2tfcmVxdWlyZV9fIiwgImRlZmluaXRpb24iLCAia2V5IiwgIm8iLCAiT2JqZWN0IiwgImRlZmluZVByb3BlcnR5IiwgImVudW1lcmFibGUiLCAiZ2V0IiwgIm9iaiIsICJwcm9wIiwgInByb3RvdHlwZSIsICJoYXNPd25Qcm9wZXJ0eSIsICJjYWxsIiwgIlN5bWJvbCIsICJ0b1N0cmluZ1RhZyIsICJ2YWx1ZSIsICJlIiwgInQiLCAiRSIsICJldmVudExpc3RlbmVyIiwgIm1ldGhvZCIsICJlbGVtZW50cyIsICJldmVudHMiLCAiZm4iLCAib3B0aW9ucyIsICJIVE1MQ29sbGVjdGlvbiIsICJOb2RlTGlzdCIsICJBcnJheSIsICJmcm9tIiwgImlzQXJyYXkiLCAiZWwiLCAiZXYiLCAiY2FwdHVyZSIsICJzbGljZSIsICJhcmd1bWVudHMiLCAicCIsICJyIiwgImEiLCAibCIsICJzIiwgImkiLCAiYyIsICJvbiIsICJiaW5kIiwgIm9mZiIsICJjcmVhdGVFbGVtZW50RnJvbVN0cmluZyIsICJodG1sIiwgImRpdiIsICJkb2N1bWVudCIsICJjcmVhdGVFbGVtZW50IiwgImlubmVySFRNTCIsICJ0cmltIiwgImZpcnN0RWxlbWVudENoaWxkIiwgImNyZWF0ZUZyb21UZW1wbGF0ZSIsICJzdHIiLCAicmVtb3ZlQXR0cmlidXRlIiwgIm5hbWUiLCAiZ2V0QXR0cmlidXRlIiwgInJlc29sdmUiLCAiZWxlbWVudCIsICJiYXNlIiwgImNvbiIsICJzdWJ0cmVlIiwgImNoaWxkIiwgImNoaWxkcmVuIiwgImFyciIsICJzdWIiLCAicHVzaCIsICJrZXlzIiwgImxlbmd0aCIsICJldmVudFBhdGgiLCAiZXZ0IiwgInBhdGgiLCAiY29tcG9zZWRQYXRoIiwgInRhcmdldCIsICJwYXJlbnRFbGVtZW50IiwgIndpbmRvdyIsICJyZXNvbHZlRWxlbWVudCIsICJ2YWwiLCAiRWxlbWVudCIsICJzcGxpdCIsICJyZWR1Y2UiLCAicHYiLCAiY3YiLCAiY2kiLCAicXVlcnlTZWxlY3RvciIsICJzaGFkb3dSb290IiwgImFkanVzdGFibGVJbnB1dE51bWJlcnMiLCAibWFwcGVyIiwgInYiLCAiaGFuZGxlU2Nyb2xsIiwgImluYyIsICJOdW1iZXIiLCAic2hpZnRLZXkiLCAiY3RybEtleSIsICJkZWx0YVkiLCAiaW5kZXgiLCAic2VsZWN0aW9uU3RhcnQiLCAicmVwbGFjZSIsICJmb2N1cyIsICJzZXRTZWxlY3Rpb25SYW5nZSIsICJwcmV2ZW50RGVmYXVsdCIsICJkaXNwYXRjaEV2ZW50IiwgIkV2ZW50IiwgInBhc3NpdmUiLCAibWluIiwgIm1heCIsICJmbG9vciIsICJyb3VuZCIsICJNYXRoIiwgImhzdlRvUmdiIiwgImgiLCAiZiIsICJxIiwgIm1vZCIsICJoc3ZUb0hzbCIsICJyZ2JUb0hzdiIsICJnIiwgImIiLCAibWluVmFsIiwgIm1heFZhbCIsICJkZWx0YSIsICJkciIsICJkZyIsICJkYiIsICJjbXlrVG9Ic3YiLCAibSIsICJ5IiwgImsiLCAiaHNsVG9Ic3YiLCAibnMiLCAiaXNOYU4iLCAiaGV4VG9Ic3YiLCAiaGV4IiwgIm1hdGNoIiwgIm1hcCIsICJwYXJzZUludCIsICJwYXJzZVRvSFNWQSIsICJ0b0xvd2VyQ2FzZSIsICJjdHgiLCAiZ2V0Q29udGV4dCIsICJmaWxsU3R5bGUiLCAicmVnZXgiLCAiY215ayIsICJyZ2JhIiwgImhzbGEiLCAiaHN2YSIsICJoZXhhIiwgIm51bWFyaXplIiwgImFycmF5IiwgInRlc3QiLCAidW5kZWZpbmVkIiwgImludmFsaWQiLCAidHlwZSIsICJleGVjIiwgInZhbHVlcyIsICJqb2luIiwgInJhdyIsICJzdWJzdHJpbmciLCAiSFNWYUNvbG9yIiwgIm9yaWdpbmFsIiwgIm5leHQiLCAicHJlY2lzaW9uIiwgInRvRml4ZWQiLCAidGhhdCIsICJ0b0hTVkEiLCAidG9TdHJpbmciLCAidG9IU0xBIiwgInRvUkdCQSIsICJ0b0NNWUsiLCAicmdiIiwgInRvSEVYQSIsICJwYWRTdGFydCIsICJhbHBoYSIsICJ0b1VwcGVyQ2FzZSIsICJjbG9uZSIsICJjbGFtcCIsICJNb3ZlYWJsZSIsICJvcHQiLCAiYXNzaWduIiwgImxvY2siLCAib25jaGFuZ2UiLCAib25zdG9wIiwgIl9rZXlib2FyZCIsICJhY3RpdmVFbGVtZW50IiwgIndyYXBwZXIiLCAidXAiLCAicmlnaHQiLCAiZG93biIsICJsZWZ0IiwgInhtIiwgInltIiwgInVwZGF0ZSIsICJjYWNoZSIsICJ4IiwgInN0YXJ0c1dpdGgiLCAiX3RhcHN0YXJ0IiwgIl8iLCAiX3RhcHN0b3AiLCAiX3RhcG1vdmUiLCAiY2FuY2VsYWJsZSIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAidG91Y2giLCAidG91Y2hlcyIsICJjbGllbnRYIiwgImNsaWVudFkiLCAid2lkdGgiLCAidG9wIiwgImhlaWdodCIsICJzdHlsZSIsICJvZmZzZXRXaWR0aCIsICJvZmZzZXRIZWlnaHQiLCAiY3giLCAiY3kiLCAidHJpZ2dlciIsICJkZXN0cm95IiwgIlNlbGVjdGFibGUiLCAiY2xhc3NOYW1lIiwgIm9uVGFwIiwgImZvckVhY2giLCAiY2xhc3NMaXN0IiwgInN0b3BQcm9wYWdhdGlvbiIsICJ2YXJpYW50RmxpcE9yZGVyIiwgInN0YXJ0IiwgIm1pZGRsZSIsICJlbmQiLCAicG9zaXRpb25GbGlwT3JkZXIiLCAiYm90dG9tIiwgInBvc2l0aW9uIiwgIm1hcmdpbiIsICJwYWRkaW5nIiwgIkQiLCAiSFRNTEVsZW1lbnQiLCAicmVmZXJlbmNlIiwgInBvcHBlciIsICJFcnJvciIsICJjb250YWluZXIiLCAiYXJyb3ciLCAiQiIsICJNIiwgIkMiLCAiZG9jdW1lbnRFbGVtZW50IiwgIkYiLCAiSyIsICJTIiwgIlYiLCAidnMiLCAidm0iLCAidmUiLCAiaHMiLCAiaG0iLCAiaGUiLCAiJCIsICJSIiwgImoiLCAidSIsICJuIiwgImQiLCAidyIsICJ6IiwgIkwiLCAiUCIsICJUIiwgIk8iLCAiSCIsICJQaWNrciIsICJjb25zdHJ1Y3RvciIsICJfaW5pdGlhbGl6aW5nQWN0aXZlIiwgIl9yZWNhbGMiLCAiX25hbm9wb3AiLCAiX3Jvb3QiLCAiX2NvbG9yIiwgIl9sYXN0Q29sb3IiLCAiX3N3YXRjaENvbG9ycyIsICJfc2V0dXBBbmltYXRpb25GcmFtZSIsICJfZXZlbnRMaXN0ZW5lciIsICJpbml0IiwgInNhdmUiLCAiaGlkZSIsICJzaG93IiwgImNsZWFyIiwgImNoYW5nZSIsICJjaGFuZ2VzdG9wIiwgImNhbmNlbCIsICJzd2F0Y2hzZWxlY3QiLCAidGhpcyIsICJERUZBVUxUX09QVElPTlMiLCAic3dhdGNoZXMiLCAiY29tcG9uZW50cyIsICJ0aGVtZSIsICJzbGlkZXJzIiwgImxvY2tPcGFjaXR5IiwgImluY2x1ZGVzIiwgImludGVyYWN0aW9uIiwgInByZXZpZXciLCAib3BhY2l0eSIsICJodWUiLCAicGFsZXR0ZSIsICJfcHJlQnVpbGQiLCAiX2J1aWxkQ29tcG9uZW50cyIsICJfYmluZEV2ZW50cyIsICJfZmluYWxCdWlsZCIsICJjb2xvciIsICJhZGRTd2F0Y2giLCAiYnV0dG9uIiwgImFwcCIsICJjcmVhdGVQb3BwZXIiLCAic2V0QXR0cmlidXRlIiwgIl90IiwgInJlcXVlc3RBbmltYXRpb25GcmFtZSIsICJjYiIsICJzZXRDb2xvciIsICJkZWZhdWx0IiwgIl9yZVBvc2l0aW9uaW5nUGlja2VyIiwgImRlZmF1bHRSZXByZXNlbnRhdGlvbiIsICJfcmVwcmVzZW50YXRpb24iLCAic2V0Q29sb3JSZXByZXNlbnRhdGlvbiIsICJzaG93QWx3YXlzIiwgIl9lbWl0IiwgImluc3RhbmNlIiwgInVzZUFzQnV0dG9uIiwgImlubGluZSIsICJhcHBDbGFzcyIsICJoaWRkZW4iLCAiaW5wdXQiLCAiaW50IiwgImZpbmQiLCAiYWRkIiwgImNvbnRhaW5zIiwgImFwcGVuZENoaWxkIiwgInJlbW92ZUNoaWxkIiwgInBhcmVudCIsICJuZXh0U2libGluZyIsICJpbnNlcnRCZWZvcmUiLCAicmVtb3ZlIiwgInBhcmVudE5vZGUiLCAicmVwbGFjZUNoaWxkIiwgImRpc2FibGVkIiwgImRpc2FibGUiLCAiY29tcGFyaXNvbiIsICJ0cmFuc2l0aW9uIiwgImxhc3RDb2xvciIsICJpbnN0IiwgImNzIiwgInJlcGVhdCIsICJzbyIsICJzaCIsICJnZXRDb2xvciIsICJwaWNrZXIiLCAiY3VycmVudENvbG9yIiwgIl91cGRhdGVPdXRwdXQiLCAiY3NzUkdCYVN0cmluZyIsICJiYWNrZ3JvdW5kIiwgInNldFByb3BlcnR5IiwgInNsaWRlciIsICJiYWNrZ3JvdW5kQ29sb3IiLCAic2VsZWN0YWJsZSIsICJfY29tcG9uZW50cyIsICJldmVudEJpbmRpbmdzIiwgIl9jbGVhckNvbG9yIiwgInNldEhTVkEiLCAiYXBwbHlDb2xvciIsICJyZXN1bHQiLCAic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwgImNrIiwgImNsb3NlV2l0aEtleSIsICJpc09wZW4iLCAiY29kZSIsICJzb21lIiwgImFkanVzdGFibGVOdW1iZXJzIiwgInJhbmdlcyIsICJzdGVwIiwgInJhbmdlIiwgImdldENvbG9yUmVwcmVzZW50YXRpb24iLCAibnYiLCAidG9QcmVjaXNpb24iLCAiYXV0b1JlcG9zaXRpb24iLCAidGltZW91dCIsICJjbG9zZU9uU2Nyb2xsIiwgInNldFRpbWVvdXQiLCAicnMiLCAiY2xlYXJUaW1lb3V0IiwgIl9ldmVudEJpbmRpbmdzIiwgImJvZHkiLCAiZWIiLCAiaW5uZXJIZWlnaHQiLCAiaW5uZXJXaWR0aCIsICJldmVudFNvdXJjZSIsICJvdXRwdXRQcmVjaXNpb24iLCAic2lsZW50IiwgIl9wYXJzZUxvY2FsQ29sb3IiLCAiYWxwaGFNYWtlc0FDaGFuZ2UiLCAiaTE4biIsICJJMThOX0RFRkFVTFRTIiwgImV2ZW50IiwgImFyZ3MiLCAiY2FsbEJhY2tzIiwgImluZGV4T2YiLCAic3BsaWNlIiwgInJlbW92ZVN3YXRjaCIsICJzd2F0Y2hDb2xvciIsICJjYW5jZWxBbmltYXRpb25GcmFtZSIsICJkZXN0cm95QW5kUmVtb3ZlIiwgInJlY2FsYyIsICJzdHJpbmciLCAidXR5cGUiLCAiY2xpY2siLCAiZ2V0U2VsZWN0ZWRDb2xvciIsICJnZXRSb290IiwgImVuYWJsZSIsICJzdGF0aWMiLCAiVkVSU0lPTiIsICJtb2R1bGUiLCAiY29yZSIsICJpdCIsICJlIiwgImRvY3VtZW50IiwgImlzIiwgIlMiLCAiZiIsICJPIiwgIlAiLCAia2V5IiwgImEiLCAiYiIsICJjIiwgInNvdXJjZSIsICJleHBvcnRzIiwgIm93biIsICJwb3MiLCAicyIsICJpIiwgImwiLCAiY29kZVBvaW50QXQiLCAiaW5kZXgiLCAiZnJvbUNvZGVQb2ludCIsICJ4IiwgInJvb3QiLCAicGFyc2UiLCAidGV4dCIsICJ0b2tlbiIsICJjb21tZW50IiwgInUiLCAicCIsICJidWZmZXIiLCAic3RyaW5naWZ5IiwgInN0YWNrIiwgInYiLCAidmFsdWUiLCAibGlzdCIsICJKU09ONSIsICJpbXBvcnRfb2JzaWRpYW4iLCAic2V0dGluZ3MiLCAiX2EiLCAiaW5kZXgiLCAidCIsICJlIiwgIm4iLCAiciIsICJpIiwgIm8iLCAiYyIsICJ1IiwgInMiLCAiZCIsICJiIiwgIkEiLCAiRiIsICJ2IiwgIkgiLCAiQiIsICJDIiwgImsiLCAiUyIsICJSIiwgIk0iLCAiTyIsICJMIiwgIkciLCAiaiIsICJYIiwgIkkiLCAiWSIsICJhIiwgImwiLCAiZiIsICJoIiwgInAiLCAiZyIsICJtIiwgInkiLCAiRSIsICJ0ZXh0IiwgInZhbHVlIiwgImUiLCAiX2EiLCAiUGlja3IiLCAiaSIsICJib2R5IiwgIl9hIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImkiLCAiY29kZVNlY3Rpb24iLCAiX2EiLCAiXyIsICJlIiwgImltcG9ydF9vYnNpZGlhbiIsICJfYSIsICJ0ZXh0IiwgIl9hIiwgInBvc2l0aW9uIiwgInJlbW92ZUZvbGRMYW5ndWFnZXMiLCAibGFuZyIsICJlbXB0eSIsICJwbHVnaW4iLCAiZm9sZFN0YXJ0IiwgImZvbGRFbmQiLCAiaSIsICJjb252ZXJ0Q29tbWVudExpbmtzIiwgInRleHQiLCAic3R5bGUiLCAiZWxlbWVudCIsICJpbXBvcnRfb2JzaWRpYW4iLCAiY2hlY2tzIiwgImluZGV4IiwgImFsbCIsICJrZXkiLCAiZCIsICJpcyIsICJpbmRleCIsICJvayIsICJpbmRleCIsICJpbmRleCIsICJrZXkiLCAiXyIsICJfIiwgIl8iLCAiaHRtbCIsICJzdmciLCAicGFyc2UiLCAiaW5kZXgiLCAicGFyc2UiLCAic3RyaW5naWZ5IiwgIm93biIsICJoIiwgImluZGV4IiwgImtleSIsICJwYXJzZSIsICJ2YWx1ZSIsICJoIiwgImh0bWwiLCAicyIsICJzdmciLCAic2VhcmNoIiwgImluZGV4IiwgInBvaW50IiwgIm93biIsICJzdmciLCAiaHRtbCIsICJvayIsICJpbmRleCIsICJzIiwgImgiLCAicG9zaXRpb24iLCAibG9jYXRpb24iLCAia2V5IiwgIm9wZW5pbmciLCAiY2xvc2luZyIsICJwb2ludCIsICJDT0RFX1BPSU5UUyIsICJFUlIiLCAiaSIsICJUb2tlblR5cGUiLCAiaSIsICJjIiwgImMiLCAiX2EiLCAiQ2hhckNvZGVzIiwgIkJpblRyaWVGbGFncyIsICJFbnRpdHlEZWNvZGVyU3RhdGUiLCAiRGVjb2RpbmdNb2RlIiwgImVycm9ycyIsICJiYXNlIiwgIl9hIiwgIk5TIiwgIkFUVFJTIiwgIkRPQ1VNRU5UX01PREUiLCAiVEFHX05BTUVTIiwgIlRBR19JRCIsICJfYSIsICIkIiwgIlN0YXRlIiwgImlzQXNjaWlBbHBoYU51bWVyaWMiLCAiaXNFbnRpdHlJbkF0dHJpYnV0ZUludmFsaWRFbmQiLCAiX2EiLCAiaSIsICJjdCIsICJsb2NhdGlvbiIsICJkb2N1bWVudCIsICJlbGVtZW50IiwgImkiLCAiRW50cnlUeXBlIiwgImkiLCAiZWxlbWVudCIsICJlbnRyeSIsICJkb2N1bWVudCIsICJ0ZXh0IiwgImoiLCAiZWxlbWVudCIsICJsb2NhdGlvbiIsICJpIiwgIkluc2VydGlvbk1vZGUiLCAiZG9jdW1lbnQiLCAiaHRtbCIsICJfYSIsICJlbGVtZW50IiwgImxvY2F0aW9uIiwgInNpYmxpbmdzIiwgImkiLCAicCIsICJpbmRleCIsICJjIiwgInBhcnNlIiwgImh0bWwiLCAicG9zaXRpb24iLCAicG9pbnQiLCAiaW5kZXgiLCAicGF0aCIsICJpbmRleCIsICJub3JtYWxpemUiLCAicGF0aCIsICJpbmRleCIsICJpbmRleCIsICJwcm9wIiwgImJhc2VuYW1lIiwgImRpcm5hbWUiLCAiYXNzZXJ0UGF0aCIsICJleHRuYW1lIiwgInBhdGgiLCAicGFyc2UiLCAiY2FtZWxjYXNlIiwgIm9rIiwgInZhbHVlIiwgIl8iLCAiJDIiLCAib3duIiwgImtleSIsICJvbmUiLCAiaW5kZXgiLCAiYWxsIiwgIm93biIsICJpbmRleCIsICJlbXB0eSIsICJpbmNyZW1lbnQiLCAiaW5kZXgiLCAic2libGluZ3MiLCAib3duIiwgImluZGV4IiwgImR0IiwgImh0bWwiLCAicCIsICJfIiwgImluZGV4IiwgImJvZHkiLCAiaHRtbCIsICJ0Ym9keSIsICJoZWFkIiwgImluZGV4IiwgImVsZW1lbnQiLCAiaW5kZXgiLCAic3ZnIiwgImtleSIsICJ4IiwgInkiLCAic3RyaW5naWZ5IiwgIl8iLCAiaW5kZXgiLCAiZWxlbWVudCIsICJlbXB0eU9wdGlvbnMiLCAiZW1wdHlDaGlsZHJlbiIsICJvbmUiLCAiYWxsIiwgInN2ZyIsICJodG1sIiwgImluZGV4IiwgImVsZW1lbnQiLCAiX2EiLCAiXyIsICJrZXkiLCAidGV4dCIsICJmb2xkIiwgImluZGV4IiwgInJlc3VsdCIsICJrZXkiLCAiX2EiXQp9Cg==
|